diff --git a/.env b/.env deleted file mode 100644 index 78ea8fbe1604c33e3976865d8977ae0fd073292e..0000000000000000000000000000000000000000 --- a/.env +++ /dev/null @@ -1,8 +0,0 @@ -OPENBLAS_NUM_THREADS = 1 -no_proxy = localhost, 127.0.0.1, ::1 - -# You can change the location of the model, etc. by changing here -weight_root = weights -weight_uvr5_root = uvr5_weights -index_root = logs -rmvpe_root = assets/rmvpe diff --git a/.gitattributes b/.gitattributes index 8f5dd3e8e3be92c6c0cf9d9a7b8c7fe681c90238..0813828990c72f4cd7f4083b83464fba819e66f8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,4 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text -stftpitchshift filter=lfs diff=lfs merge=lfs -text +ffmpeg.exe filter=lfs diff=lfs merge=lfs -text +ffprobe.exe filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore index 1cc60801f6d12ad4d01ccb1786860d8583c780f6..299d36e44d9f3ba488097a9d8997e82c02978b6c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,49 +1,129 @@ -.DS_Store -__pycache__ -/TEMP -/DATASETS -/RUNTIME -*.pyd -hubert_base.pt +# Applio +logs +*.exe +*.pt +*.pth +*.index +*.wav + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env .venv -alexforkINSTALL.bat -Changelog_CN.md -Changelog_EN.md -Changelog_KO.md -difdep.py -EasierGUI.py -envfilescheck.bat -export_onnx.py -.vscode/ -export_onnx_old.py -ffmpeg.exe -ffprobe.exe -Fixes/Launch_Tensorboard.bat -Fixes/LOCAL_CREPE_FIX.bat -Fixes/local_fixes.py -Fixes/tensor-launch.py -gui.py -infer-web — backup.py -infer-webbackup.py -install_easy_dependencies.py -install_easyGUI.bat -installstft.bat -Launch_Tensorboard.bat -listdepend.bat -LOCAL_CREPE_FIX.bat -local_fixes.py -oldinfer.py -onnx_inference_demo.py -Praat.exe -requirementsNEW.txt -rmvpe.pt -rmvpe.onnx -run_easiergui.bat -tensor-launch.py -values1.json -使用需遵守的协议-LICENSE.txt -!logs/ - -logs/* -logs/mute/0_gt_wavs/mute40k.spec.pt -!logs/mute/ \ No newline at end of file +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ \ No newline at end of file diff --git a/Applio-RVC-Fork/utils/README.md b/Applio-RVC-Fork/utils/README.md deleted file mode 100644 index fb45a36b5909585aa964f2033762ee59b55526b0..0000000000000000000000000000000000000000 --- a/Applio-RVC-Fork/utils/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# External Colab Code -Code used to make Google Colab work correctly -- Repo link: https://github.com/IAHispano/Applio-RVC-Fork/ - -Thanks to https://github.com/kalomaze/externalcolabcode - diff --git a/Applio-RVC-Fork/utils/backups.py b/Applio-RVC-Fork/utils/backups.py deleted file mode 100644 index b814f8184792e80e2324685436053d61487110b1..0000000000000000000000000000000000000000 --- a/Applio-RVC-Fork/utils/backups.py +++ /dev/null @@ -1,141 +0,0 @@ -import os -import shutil -import hashlib -import time -import base64 - - - - -LOGS_FOLDER = '/content/Applio-RVC-Fork/logs' -WEIGHTS_FOLDER = '/content/Applio-RVC-Fork/weights' -GOOGLE_DRIVE_PATH = '/content/drive/MyDrive/RVC_Backup' - -def import_google_drive_backup(): - print("Importing Google Drive backup...") - weights_exist = False - for root, dirs, files in os.walk(GOOGLE_DRIVE_PATH): - for filename in files: - filepath = os.path.join(root, filename) - if os.path.isfile(filepath) and not filepath.startswith(os.path.join(GOOGLE_DRIVE_PATH, 'weights')): - backup_filepath = os.path.join(LOGS_FOLDER, os.path.relpath(filepath, GOOGLE_DRIVE_PATH)) - backup_folderpath = os.path.dirname(backup_filepath) - if not os.path.exists(backup_folderpath): - os.makedirs(backup_folderpath) - print(f'Created backup folder: {backup_folderpath}', flush=True) - shutil.copy2(filepath, backup_filepath) # copy file with metadata - print(f'Imported file from Google Drive backup: {filename}') - elif filepath.startswith(os.path.join(GOOGLE_DRIVE_PATH, 'weights')) and filename.endswith('.pth'): - weights_exist = True - weights_filepath = os.path.join(WEIGHTS_FOLDER, os.path.relpath(filepath, os.path.join(GOOGLE_DRIVE_PATH, 'weights'))) - weights_folderpath = os.path.dirname(weights_filepath) - if not os.path.exists(weights_folderpath): - os.makedirs(weights_folderpath) - print(f'Created weights folder: {weights_folderpath}', flush=True) - shutil.copy2(filepath, weights_filepath) # copy file with metadata - print(f'Imported file from weights: {filename}') - if weights_exist: - print("Copied weights from Google Drive backup to local weights folder.") - else: - print("No weights found in Google Drive backup.") - print("Google Drive backup import completed.") - -def get_md5_hash(file_path): - hash_md5 = hashlib.md5() - with open(file_path, "rb") as f: - for chunk in iter(lambda: f.read(4096), b""): - hash_md5.update(chunk) - return hash_md5.hexdigest() - -def copy_weights_folder_to_drive(): - destination_folder = os.path.join(GOOGLE_DRIVE_PATH, 'weights') - try: - if not os.path.exists(destination_folder): - os.makedirs(destination_folder) - - num_copied = 0 - for filename in os.listdir(WEIGHTS_FOLDER): - if filename.endswith('.pth'): - source_file = os.path.join(WEIGHTS_FOLDER, filename) - destination_file = os.path.join(destination_folder, filename) - if not os.path.exists(destination_file): - shutil.copy2(source_file, destination_file) - num_copied += 1 - print(f"Copied {filename} to Google Drive!") - - if num_copied == 0: - print("No new finished models found for copying.") - else: - print(f"Finished copying {num_copied} files to Google Drive!") - - except Exception as e: - print(f"An error occurred while copying weights: {str(e)}") - # You can log the error or take appropriate actions here. - -def backup_files(): - print("\nStarting backup loop...") - last_backup_timestamps_path = os.path.join(LOGS_FOLDER, 'last_backup_timestamps.txt') - fully_updated = False # boolean to track if all files are up to date - - while True: - try: - updated = False # flag to check if any files were updated - last_backup_timestamps = {} - - try: - with open(last_backup_timestamps_path, 'r') as f: - last_backup_timestamps = dict(line.strip().split(':') for line in f) - except FileNotFoundError: - pass # File does not exist yet, which is fine - - for root, dirs, files in os.walk(LOGS_FOLDER): - for filename in files: - if filename != 'last_backup_timestamps.txt': - filepath = os.path.join(root, filename) - if os.path.isfile(filepath): - backup_filepath = os.path.join(GOOGLE_DRIVE_PATH, os.path.relpath(filepath, LOGS_FOLDER)) - backup_folderpath = os.path.dirname(backup_filepath) - if not os.path.exists(backup_folderpath): - os.makedirs(backup_folderpath) - print(f'Created backup folder: {backup_folderpath}', flush=True) - # check if file has changed since last backup - last_backup_timestamp = last_backup_timestamps.get(filepath) - current_timestamp = os.path.getmtime(filepath) - if last_backup_timestamp is None or float(last_backup_timestamp) < current_timestamp: - shutil.copy2(filepath, backup_filepath) # copy file with metadata - last_backup_timestamps[filepath] = str(current_timestamp) # update last backup timestamp - if last_backup_timestamp is None: - print(f'Backed up file: {filename}') - else: - print(f'Updating backed up file: {filename}') - updated = True - fully_updated = False # if a file is updated, all files are not up to date - - # check if any files were deleted in Colab and delete them from the backup drive - for filepath in list(last_backup_timestamps.keys()): - if not os.path.exists(filepath): - backup_filepath = os.path.join(GOOGLE_DRIVE_PATH, os.path.relpath(filepath, LOGS_FOLDER)) - if os.path.exists(backup_filepath): - os.remove(backup_filepath) - print(f'Deleted file: {filepath}') - del last_backup_timestamps[filepath] - updated = True - fully_updated = False # if a file is deleted, all files are not up to date - - if not updated and not fully_updated: - print("Files are up to date.") - fully_updated = True # if all files are up to date, set the boolean to True - copy_weights_folder_to_drive() - sleep_time = 15 - else: - sleep_time = 0.1 - - with open(last_backup_timestamps_path, 'w') as f: - for filepath, timestamp in last_backup_timestamps.items(): - f.write(f'{filepath}:{timestamp}\n') - - time.sleep(sleep_time) # wait for 15 seconds before checking again, or 0.1s if not fully up to date to speed up backups - - except Exception as e: - print(f"An error occurred: {str(e)}") - # You can log the error or take appropriate actions here. diff --git a/Applio-RVC-Fork/utils/backups_test.py b/Applio-RVC-Fork/utils/backups_test.py deleted file mode 100644 index f3edf15811b5035ee82f21e54e87b7e87ce413eb..0000000000000000000000000000000000000000 --- a/Applio-RVC-Fork/utils/backups_test.py +++ /dev/null @@ -1,138 +0,0 @@ - -import os -import shutil -import hashlib -import time - -LOGS_FOLDER = '/content/Applio-RVC-Fork/logs' -WEIGHTS_FOLDER = '/content/Applio-RVC-Fork/weights' -GOOGLE_DRIVE_PATH = '/content/drive/MyDrive/RVC_Backup' - -def import_google_drive_backup(): - print("Importing Google Drive backup...") - GOOGLE_DRIVE_PATH = '/content/drive/MyDrive/RVC_Backup' # change this to your Google Drive path - LOGS_FOLDER = '/content/Applio-RVC-Fork/logs' - WEIGHTS_FOLDER = '/content/Applio-RVC-Fork/weights' - weights_exist = False - files_to_copy = [] - weights_to_copy = [] - - def handle_files(root, files, is_weight_files=False): - for filename in files: - filepath = os.path.join(root, filename) - if filename.endswith('.pth') and is_weight_files: - weights_exist = True - backup_filepath = os.path.join(WEIGHTS_FOLDER, os.path.relpath(filepath, GOOGLE_DRIVE_PATH)) - else: - backup_filepath = os.path.join(LOGS_FOLDER, os.path.relpath(filepath, GOOGLE_DRIVE_PATH)) - backup_folderpath = os.path.dirname(backup_filepath) - if not os.path.exists(backup_folderpath): - os.makedirs(backup_folderpath) - print(f'Created folder: {backup_folderpath}', flush=True) - if is_weight_files: - weights_to_copy.append((filepath, backup_filepath)) - else: - files_to_copy.append((filepath, backup_filepath)) - - for root, dirs, files in os.walk(os.path.join(GOOGLE_DRIVE_PATH, 'logs')): - handle_files(root, files) - - for root, dirs, files in os.walk(os.path.join(GOOGLE_DRIVE_PATH, 'weights')): - handle_files(root, files, True) - - # Copy files in batches - total_files = len(files_to_copy) - start_time = time.time() - for i, (source, dest) in enumerate(files_to_copy, start=1): - with open(source, 'rb') as src, open(dest, 'wb') as dst: - shutil.copyfileobj(src, dst, 1024*1024) # 1MB buffer size - # Report progress every 5 seconds or after every 100 files, whichever is less frequent - if time.time() - start_time > 5 or i % 100 == 0: - print(f'\rCopying file {i} of {total_files} ({i * 100 / total_files:.2f}%)', end="") - start_time = time.time() - print(f'\nImported {len(files_to_copy)} files from Google Drive backup') - - # Copy weights in batches - total_weights = len(weights_to_copy) - start_time = time.time() - for i, (source, dest) in enumerate(weights_to_copy, start=1): - with open(source, 'rb') as src, open(dest, 'wb') as dst: - shutil.copyfileobj(src, dst, 1024*1024) # 1MB buffer size - # Report progress every 5 seconds or after every 100 files, whichever is less frequent - if time.time() - start_time > 5 or i % 100 == 0: - print(f'\rCopying weight file {i} of {total_weights} ({i * 100 / total_weights:.2f}%)', end="") - start_time = time.time() - if weights_exist: - print(f'\nImported {len(weights_to_copy)} weight files') - print("Copied weights from Google Drive backup to local weights folder.") - else: - print("\nNo weights found in Google Drive backup.") - print("Google Drive backup import completed.") - -def backup_files(): - print("\n Starting backup loop...") - last_backup_timestamps_path = os.path.join(LOGS_FOLDER, 'last_backup_timestamps.txt') - fully_updated = False # boolean to track if all files are up to date - try: - with open(last_backup_timestamps_path, 'r') as f: - last_backup_timestamps = dict(line.strip().split(':') for line in f) - except: - last_backup_timestamps = {} - - while True: - updated = False - files_to_copy = [] - files_to_delete = [] - - for root, dirs, files in os.walk(LOGS_FOLDER): - for filename in files: - if filename != 'last_backup_timestamps.txt': - filepath = os.path.join(root, filename) - if os.path.isfile(filepath): - backup_filepath = os.path.join(GOOGLE_DRIVE_PATH, os.path.relpath(filepath, LOGS_FOLDER)) - backup_folderpath = os.path.dirname(backup_filepath) - - if not os.path.exists(backup_folderpath): - os.makedirs(backup_folderpath) - print(f'Created backup folder: {backup_folderpath}', flush=True) - - # check if file has changed since last backup - last_backup_timestamp = last_backup_timestamps.get(filepath) - current_timestamp = os.path.getmtime(filepath) - if last_backup_timestamp is None or float(last_backup_timestamp) < current_timestamp: - files_to_copy.append((filepath, backup_filepath)) # add to list of files to copy - last_backup_timestamps[filepath] = str(current_timestamp) # update last backup timestamp - updated = True - fully_updated = False # if a file is updated, all files are not up to date - - # check if any files were deleted in Colab and delete them from the backup drive - for filepath in list(last_backup_timestamps.keys()): - if not os.path.exists(filepath): - backup_filepath = os.path.join(GOOGLE_DRIVE_PATH, os.path.relpath(filepath, LOGS_FOLDER)) - if os.path.exists(backup_filepath): - files_to_delete.append(backup_filepath) # add to list of files to delete - del last_backup_timestamps[filepath] - updated = True - fully_updated = False # if a file is deleted, all files are not up to date - - # Copy files in batches - if files_to_copy: - for source, dest in files_to_copy: - shutil.copy2(source, dest) - print(f'Copied or updated {len(files_to_copy)} files') - - # Delete files in batches - if files_to_delete: - for file in files_to_delete: - os.remove(file) - print(f'Deleted {len(files_to_delete)} files') - - if not updated and not fully_updated: - print("Files are up to date.") - fully_updated = True # if all files are up to date, set the boolean to True - copy_weights_folder_to_drive() - - with open(last_backup_timestamps_path, 'w') as f: - for filepath, timestamp in last_backup_timestamps.items(): - f.write(f'{filepath}:{timestamp}\n') - time.sleep(15) # wait for 15 seconds before checking again diff --git a/Applio-RVC-Fork/utils/clonerepo_experimental.py b/Applio-RVC-Fork/utils/clonerepo_experimental.py deleted file mode 100644 index b0ae02648c1307562cf48033908edcf2996db5e2..0000000000000000000000000000000000000000 --- a/Applio-RVC-Fork/utils/clonerepo_experimental.py +++ /dev/null @@ -1,253 +0,0 @@ -import os -import subprocess -import shutil -from concurrent.futures import ThreadPoolExecutor, as_completed -from tqdm.notebook import tqdm -from pathlib import Path -import requests - -def run_script(): - def run_cmd(cmd): - process = subprocess.run(cmd, shell=True, check=True, text=True) - return process.stdout - - # Change the current directory to /content/ - os.chdir('/content/') - print("Changing dir to /content/") - - # Your function to edit the file - def edit_file(file_path): - temp_file_path = "/tmp/temp_file.py" - changes_made = False - with open(file_path, "r") as file, open(temp_file_path, "w") as temp_file: - previous_line = "" - second_previous_line = "" - for line in file: - new_line = line.replace("value=160", "value=128") - if new_line != line: - print("Replaced 'value=160' with 'value=128'") - changes_made = True - line = new_line - - new_line = line.replace("crepe hop length: 160", "crepe hop length: 128") - if new_line != line: - print("Replaced 'crepe hop length: 160' with 'crepe hop length: 128'") - changes_made = True - line = new_line - - new_line = line.replace("value=0.88", "value=0.75") - if new_line != line: - print("Replaced 'value=0.88' with 'value=0.75'") - changes_made = True - line = new_line - - if "label=i18n(\"输入源音量包络替换输出音量包络融合比例,越靠近1越使用输出包络\")" in previous_line and "value=1," in line: - new_line = line.replace("value=1,", "value=0.25,") - if new_line != line: - print("Replaced 'value=1,' with 'value=0.25,' based on the condition") - changes_made = True - line = new_line - - if "label=i18n(\"总训练轮数total_epoch\")" in previous_line and "value=20," in line: - new_line = line.replace("value=20,", "value=500,") - if new_line != line: - print("Replaced 'value=20,' with 'value=500,' based on the condition for DEFAULT EPOCH") - changes_made = True - line = new_line - - if 'choices=["pm", "harvest", "dio", "crepe", "crepe-tiny", "mangio-crepe", "mangio-crepe-tiny"], # Fork Feature. Add Crepe-Tiny' in previous_line: - if 'value="pm",' in line: - new_line = line.replace('value="pm",', 'value="mangio-crepe",') - if new_line != line: - print("Replaced 'value=\"pm\",' with 'value=\"mangio-crepe\",' based on the condition") - changes_made = True - line = new_line - - new_line = line.replace('label=i18n("输入训练文件夹路径"), value="E:\\\\语音音频+标注\\\\米津玄师\\\\src"', 'label=i18n("输入训练文件夹路径"), value="/content/dataset/"') - if new_line != line: - print("Replaced 'label=i18n(\"输入训练文件夹路径\"), value=\"E:\\\\语音音频+标注\\\\米津玄师\\\\src\"' with 'label=i18n(\"输入训练文件夹路径\"), value=\"/content/dataset/\"'") - changes_made = True - line = new_line - - if 'label=i18n("是否仅保存最新的ckpt文件以节省硬盘空间"),' in second_previous_line: - if 'value=i18n("否"),' in line: - new_line = line.replace('value=i18n("否"),', 'value=i18n("是"),') - if new_line != line: - print("Replaced 'value=i18n(\"否\"),' with 'value=i18n(\"是\"),' based on the condition for SAVE ONLY LATEST") - changes_made = True - line = new_line - - if 'label=i18n("是否在每次保存时间点将最终小模型保存至weights文件夹"),' in second_previous_line: - if 'value=i18n("否"),' in line: - new_line = line.replace('value=i18n("否"),', 'value=i18n("是"),') - if new_line != line: - print("Replaced 'value=i18n(\"否\"),' with 'value=i18n(\"是\"),' based on the condition for SAVE SMALL WEIGHTS") - changes_made = True - line = new_line - - temp_file.write(line) - second_previous_line = previous_line - previous_line = line - - # After finished, we replace the original file with the temp one - import shutil - shutil.move(temp_file_path, file_path) - - if changes_made: - print("Changes made and file saved successfully.") - else: - print("No changes were needed.") - - # Define the repo path - repo_path = '/content/Applio-RVC-Fork' - - def copy_all_files_in_directory(src_dir, dest_dir): - # Iterate over all files in source directory - for item in Path(src_dir).glob('*'): - if item.is_file(): - # Copy each file to destination directory - shutil.copy(item, dest_dir) - else: - # If it's a directory, make a new directory in the destination and copy the files recursively - new_dest = Path(dest_dir) / item.name - new_dest.mkdir(exist_ok=True) - copy_all_files_in_directory(str(item), str(new_dest)) - - def clone_and_copy_repo(repo_path): - # New repository link - new_repo_link = "https://github.com/IAHispano/Applio-RVC-Fork/" - # Temporary path to clone the repository - temp_repo_path = "/content/temp_Applio-RVC-Fork" - # New folder name - new_folder_name = "Applio-RVC-Fork" - - # Clone the latest code from the new repository to a temporary location - run_cmd(f"git clone {new_repo_link} {temp_repo_path}") - os.chdir(temp_repo_path) - - run_cmd(f"git checkout 3fa4dad3d8961e5ca2522e9e12c0b4ddb71ad402") - run_cmd(f"git checkout f9e606c279cb49420597519b0a83b92be81e42e4") - run_cmd(f"git checkout 9e305588844c5442d58add1061b29beeca89d679") - run_cmd(f"git checkout bf92dc1eb54b4f28d6396a4d1820a25896cc9af8") - run_cmd(f"git checkout c3810e197d3cb98039973b2f723edf967ecd9e61") - run_cmd(f"git checkout a33159efd134c2413b0afe26a76b7dc87926d2de") - run_cmd(f"git checkout 24e251fb62c662e39ac5cf9253cc65deb9be94ec") - run_cmd(f"git checkout ad5667d3017e93232dba85969cddac1322ba2902") - run_cmd(f"git checkout ce9715392cf52dd5a0e18e00d1b5e408f08dbf27") - run_cmd(f"git checkout 7c7da3f2ac68f3bd8f3ad5ca5c700f18ab9f90eb") - run_cmd(f"git checkout 4ac395eab101955e8960b50d772c26f592161764") - run_cmd(f"git checkout b15b358702294c7375761584e5276c811ffab5e8") - run_cmd(f"git checkout 1501793dc490982db9aca84a50647764caa66e51") - run_cmd(f"git checkout 21f7faf57219c75e6ba837062350391a803e9ae2") - run_cmd(f"git checkout b5eb689fbc409b49f065a431817f822f554cebe7") - run_cmd(f"git checkout 7e02fae1ebf24cb151bf6cbe787d06734aa65862") - run_cmd(f"git checkout 6aea5ea18ed0b9a1e03fa5d268d6bc3c616672a9") - run_cmd(f"git checkout f0f9b25717e59116473fb42bd7f9252cfc32b398") - run_cmd(f"git checkout b394de424088a81fc081224bc27338a8651ad3b2") - run_cmd(f"git checkout f1999406a88b80c965d2082340f5ea2bfa9ab67a") - run_cmd(f"git checkout d98a0fa8dc715308dfc73eac5c553b69c6ee072b") - run_cmd(f"git checkout d73267a415fb0eba98477afa43ef71ffd82a7157") - run_cmd(f"git checkout 1a03d01356ae79179e1fb8d8915dc9cc79925742") - run_cmd(f"git checkout 81497bb3115e92c754300c9b3992df428886a3e9") - run_cmd(f"git checkout c5af1f8edcf79cb70f065c0110e279e78e48caf9") - run_cmd(f"git checkout cdb3c90109387fa4dfa92f53c3864c71170ffc77") - - # Edit the file here, before copying - #edit_file(f"{temp_repo_path}/infer-web.py") - - # Copy all files from the cloned repository to the existing path - copy_all_files_in_directory(temp_repo_path, repo_path) - print(f"Copying all {new_folder_name} files from GitHub.") - - # Change working directory back to /content/ - os.chdir('/content/') - print("Changed path back to /content/") - - # Remove the temporary cloned repository - shutil.rmtree(temp_repo_path) - - # Call the function - clone_and_copy_repo(repo_path) - - # Download the credentials file for RVC archive sheet - os.makedirs('/content/Applio-RVC-Fork/stats/', exist_ok=True) - run_cmd("wget -q https://cdn.discordapp.com/attachments/945486970883285045/1114717554481569802/peppy-generator-388800-07722f17a188.json -O /content/Applio-RVC-Fork/stats/peppy-generator-388800-07722f17a188.json") - - # Forcefully delete any existing torchcrepe dependencies downloaded from an earlier run just in case - shutil.rmtree('/content/Applio-RVC-Fork/torchcrepe', ignore_errors=True) - shutil.rmtree('/content/torchcrepe', ignore_errors=True) - - # Download the torchcrepe folder from the maxrmorrison/torchcrepe repository - run_cmd("git clone https://github.com/maxrmorrison/torchcrepe.git") - shutil.move('/content/torchcrepe/torchcrepe', '/content/Applio-RVC-Fork/') - shutil.rmtree('/content/torchcrepe', ignore_errors=True) # Delete the torchcrepe repository folder - - # Change the current directory to /content/Applio-RVC-Fork - os.chdir('/content/Applio-RVC-Fork') - os.makedirs('pretrained', exist_ok=True) - os.makedirs('uvr5_weights', exist_ok=True) - -def download_file(url, filepath): - response = requests.get(url, stream=True) - response.raise_for_status() - - with open(filepath, "wb") as file: - for chunk in response.iter_content(chunk_size=8192): - if chunk: - file.write(chunk) - -def download_pretrained_models(): - pretrained_models = { - "pretrained": [ - "D40k.pth", - "G40k.pth", - "f0D40k.pth", - "f0G40k.pth" - ], - "pretrained_v2": [ - "D40k.pth", - "G40k.pth", - "f0D40k.pth", - "f0G40k.pth", - "f0G48k.pth", - "f0D48k.pth" - ], - "uvr5_weights": [ - "HP2-人声vocals+非人声instrumentals.pth", - "HP5-主旋律人声vocals+其他instrumentals.pth", - "VR-DeEchoNormal.pth", - "VR-DeEchoDeReverb.pth", - "VR-DeEchoAggressive.pth", - "HP5_only_main_vocal.pth", - "HP3_all_vocals.pth", - "HP2_all_vocals.pth" - ] - } - part2 = "I" - base_url = "https://huggingface.co/lj1995/VoiceConversionWebU" + part2 + "/resolve/main/" - base_path = "/content/Applio-RVC-Fork/" - base_pathm = base_path - - # Calculate total number of files to download - total_files = sum(len(files) for files in pretrained_models.values()) + 1 # +1 for hubert_base.pt - - with tqdm(total=total_files, desc="Downloading files") as pbar: - for folder, models in pretrained_models.items(): - folder_path = os.path.join(base_path, folder) - os.makedirs(folder_path, exist_ok=True) - for model in models: - url = base_url + folder + "/" + model - filepath = os.path.join(folder_path, model) - download_file(url, filepath) - pbar.update() - - # Download hubert_base.pt to the base path - hubert_url = base_url + "hubert_base.pt" - hubert_filepath = os.path.join(base_pathm, "hubert_base.pt") - download_file(hubert_url, hubert_filepath) - pbar.update() -def clone_repository(run_download): - with ThreadPoolExecutor(max_workers=2) as executor: - executor.submit(run_script) - if run_download: - executor.submit(download_pretrained_models) diff --git a/Applio-RVC-Fork/utils/dependency.py b/Applio-RVC-Fork/utils/dependency.py deleted file mode 100644 index b70338b02d31b1ef455fbac817d418d328db518d..0000000000000000000000000000000000000000 --- a/Applio-RVC-Fork/utils/dependency.py +++ /dev/null @@ -1,170 +0,0 @@ -import os -import csv -import shutil -import tarfile -import subprocess -from pathlib import Path -from datetime import datetime - -def install_packages_but_jank_af(): - packages = ['build-essential', 'python3-dev', 'ffmpeg', 'aria2'] - pip_packages = ['pip', 'setuptools', 'wheel', 'httpx==0.23.0', 'faiss-gpu', 'fairseq', 'gradio==3.34.0', - 'ffmpeg', 'ffmpeg-python', 'praat-parselmouth', 'pyworld', 'numpy==1.23.5', - 'numba==0.56.4', 'librosa==0.9.2', 'mega.py', 'gdown', 'onnxruntime', 'pyngrok==4.1.12', - 'gTTS', 'elevenlabs', 'wget', 'tensorboardX', 'unidecode', 'huggingface-hub', 'stftpitchshift==1.5.1', - 'yt-dlp', 'pedalboard', 'pathvalidate', 'nltk', 'edge-tts', 'git+https://github.com/suno-ai/bark.git', 'python-dotenv' , 'av'] - - print("Updating and installing system packages...") - for package in packages: - print(f"Installing {package}...") - subprocess.check_call(['apt-get', 'install', '-qq', '-y', package]) - - print("Updating and installing pip packages...") - subprocess.check_call(['pip', 'install', '--upgrade'] + pip_packages) - - print('Packages up to date.') - - -def setup_environment(ForceUpdateDependencies, ForceTemporaryStorage): - # Mounting Google Drive - if not ForceTemporaryStorage: - from google.colab import drive - - if not os.path.exists('/content/drive'): - drive.mount('/content/drive') - else: - print('Drive is already mounted. Proceeding...') - - # Function to install dependencies with progress - def install_packages(): - packages = ['build-essential', 'python3-dev', 'ffmpeg', 'aria2'] - pip_packages = ['pip', 'setuptools', 'wheel', 'httpx==0.23.0', 'faiss-gpu', 'fairseq', 'gradio==3.34.0', - 'ffmpeg', 'ffmpeg-python', 'praat-parselmouth', 'pyworld', 'numpy==1.23.5', - 'numba==0.56.4', 'librosa==0.9.2', 'mega.py', 'gdown', 'onnxruntime', 'pyngrok==4.1.12', - 'gTTS', 'elevenlabs', 'wget', 'tensorboardX', 'unidecode', 'huggingface-hub', 'stftpitchshift==1.5.1', - 'yt-dlp', 'pedalboard', 'pathvalidate', 'nltk', 'edge-tts', 'git+https://github.com/suno-ai/bark.git', 'python-dotenv' , 'av'] - - print("Updating and installing system packages...") - for package in packages: - print(f"Installing {package}...") - subprocess.check_call(['apt-get', 'install', '-qq', '-y', package]) - - print("Updating and installing pip packages...") - subprocess.check_call(['pip', 'install', '--upgrade'] + pip_packages) - - - print('Packages up to date.') - - # Function to scan a directory and writes filenames and timestamps - def scan_and_write(base_path, output_file): - with open(output_file, 'w', newline='') as f: - writer = csv.writer(f) - for dirpath, dirs, files in os.walk(base_path): - for filename in files: - fname = os.path.join(dirpath, filename) - try: - mtime = os.path.getmtime(fname) - writer.writerow([fname, mtime]) - except Exception as e: - print(f'Skipping irrelevant nonexistent file {fname}: {str(e)}') - print(f'Finished recording filesystem timestamps to {output_file}.') - - # Function to compare files - def compare_files(old_file, new_file): - old_files = {} - new_files = {} - - with open(old_file, 'r') as f: - reader = csv.reader(f) - old_files = {rows[0]:rows[1] for rows in reader} - - with open(new_file, 'r') as f: - reader = csv.reader(f) - new_files = {rows[0]:rows[1] for rows in reader} - - removed_files = old_files.keys() - new_files.keys() - added_files = new_files.keys() - old_files.keys() - unchanged_files = old_files.keys() & new_files.keys() - - changed_files = {f for f in unchanged_files if old_files[f] != new_files[f]} - - for file in removed_files: - print(f'File has been removed: {file}') - - for file in changed_files: - print(f'File has been updated: {file}') - - return list(added_files) + list(changed_files) - - # Check if CachedRVC.tar.gz exists - if ForceTemporaryStorage: - file_path = '/content/CachedRVC.tar.gz' - else: - file_path = '/content/drive/MyDrive/RVC_Cached/CachedRVC.tar.gz' - - content_file_path = '/content/CachedRVC.tar.gz' - extract_path = '/' - - if not os.path.exists(file_path): - folder_path = os.path.dirname(file_path) - os.makedirs(folder_path, exist_ok=True) - print('No cached dependency install found. Attempting to download GitHub backup..') - - try: - download_url = "https://github.com/kalomaze/QuickMangioFixes/releases/download/release3/CachedRVC.tar.gz" - subprocess.run(["wget", "-O", file_path, download_url]) - print('Download completed successfully!') - except Exception as e: - print('Download failed:', str(e)) - - # Delete the failed download file - if os.path.exists(file_path): - os.remove(file_path) - print('Failed download file deleted. Continuing manual backup..') - - if Path(file_path).exists(): - if ForceTemporaryStorage: - print('Finished downloading CachedRVC.tar.gz.') - else: - print('CachedRVC.tar.gz found on Google Drive. Proceeding to copy and extract...') - - # Check if ForceTemporaryStorage is True and skip copying if it is - if ForceTemporaryStorage: - pass - else: - shutil.copy(file_path, content_file_path) - - print('Beginning backup copy operation...') - - with tarfile.open(content_file_path, 'r:gz') as tar: - for member in tar.getmembers(): - target_path = os.path.join(extract_path, member.name) - try: - tar.extract(member, extract_path) - except Exception as e: - print('Failed to extract a file (this isn\'t normal)... forcing an update to compensate') - ForceUpdateDependencies = True - print(f'Extraction of {content_file_path} to {extract_path} completed.') - - if ForceUpdateDependencies: - install_packages() - ForceUpdateDependencies = False - else: - print('CachedRVC.tar.gz not found. Proceeding to create an index of all current files...') - scan_and_write('/usr/', '/content/usr_files.csv') - - install_packages() - - scan_and_write('/usr/', '/content/usr_files_new.csv') - changed_files = compare_files('/content/usr_files.csv', '/content/usr_files_new.csv') - - with tarfile.open('/content/CachedRVC.tar.gz', 'w:gz') as new_tar: - for file in changed_files: - new_tar.add(file) - print(f'Added to tar: {file}') - - os.makedirs('/content/drive/MyDrive/RVC_Cached', exist_ok=True) - shutil.copy('/content/CachedRVC.tar.gz', '/content/drive/MyDrive/RVC_Cached/CachedRVC.tar.gz') - print('Updated CachedRVC.tar.gz copied to Google Drive.') - print('Dependencies fully up to date; future runs should be faster.') - diff --git a/Applio-RVC-Fork/utils/i18n.py b/Applio-RVC-Fork/utils/i18n.py deleted file mode 100644 index 8e75d2bc26ff86ab1716b8d7f239ad9f5cc1e32d..0000000000000000000000000000000000000000 --- a/Applio-RVC-Fork/utils/i18n.py +++ /dev/null @@ -1,28 +0,0 @@ -import locale -import json -import os - - -def load_language_list(language): - with open(f"./i18n/{language}.json", "r", encoding="utf-8") as f: - language_list = json.load(f) - return language_list - - -class I18nAuto: - def __init__(self, language=None): - if language in ["Auto", None]: - language = "es_ES" - if not os.path.exists(f"./i18n/{language}.json"): - language = "es_ES" - language = "es_ES" - self.language = language - # print("Use Language:", language) - self.language_map = load_language_list(language) - - def __call__(self, key): - return self.language_map.get(key, key) - - def print(self): - # print("Use Language:", self.language) - print("") diff --git a/Applio_(Mangio_RVC_Fork).ipynb b/Applio_(Mangio_RVC_Fork).ipynb deleted file mode 100644 index 4440de685158080ff706ee4099b0b7188851ceda..0000000000000000000000000000000000000000 --- a/Applio_(Mangio_RVC_Fork).ipynb +++ /dev/null @@ -1,169 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "cellView": "form", - "id": "izLwNF_8T1TK" - }, - "outputs": [], - "source": [ - "#@title <font color='#06ae56'>**🍏 Applio (Mangio-RVC-Fork)**</font>\n", - "import time\n", - "import os\n", - "import subprocess\n", - "import shutil\n", - "import threading\n", - "import base64\n", - "import threading\n", - "import time\n", - "from IPython.display import HTML, clear_output\n", - "\n", - "nosv_name1 = base64.b64decode(('ZXh0ZXJuYWxj').encode('ascii')).decode('ascii')\n", - "nosv_name2 = base64.b64decode(('b2xhYmNvZGU=').encode('ascii')).decode('ascii')\n", - "guebui = base64.b64decode(('V2U=').encode('ascii')).decode('ascii')\n", - "guebui2 = base64.b64decode(('YlVJ').encode('ascii')).decode('ascii')\n", - "pbestm = base64.b64decode(('cm12cGU=').encode('ascii')).decode('ascii')\n", - "tryre = base64.b64decode(('UmV0cmlldmFs').encode('ascii')).decode('ascii')\n", - "\n", - "xdsame = '/content/'+ tryre +'-based-Voice-Conversion-' + guebui + guebui2 +'/'\n", - "\n", - "collapsible_section = \"\"\"\n", - "<br>\n", - "<br>\n", - "<details style=\"border: 1px solid #ddd; border-radius: 5px; padding: 10px; margin-bottom: 10px;\">\n", - " <summary open style=\"font-weight: bold; cursor: pointer;\">🚀 Click to learn more about Applio</summary>\n", - " <div style=\"margin-left: 20px;\">\n", - " <ul>\n", - " <li><a href=\"https://github.com/Mangio621/Mangio-RVC-Fork\" style=\"color: #06ae56;\">Mangio-RVC-Fork</a> - Source of inspiration and base for this improved code, special thanks to the developers.</li>\n", - " <li><a href=\"https://github.com/Anjok07/ultimatevocalremovergui\" style=\"color: #06ae56;\">UltimateVocalRemover</a> - Used for voice and instrument separation.</li>\n", - " <li>Vidal, Blaise & Aitron - Contributors to the Applio version.</li>\n", - " <li>kalomaze - Creator of external scripts that help the functioning of Applio.</li>\n", - " </ul>\n", - " <p style=\"color: #fff;\">Join and contribute to the project on <a href=\"https://github.com/IAHispano/Applio-RVC-Fork\" style=\"color: #06ae56;\">our GitHub repository</a>.</p>\n", - " </div>\n", - "</details>\n", - "<br>\n", - "<button style=\"font-weight: bold; cursor: pointer; background-color: #06ae56; color: white; border: 1px solid #fff; border-radius: 4px; padding: 10px 20px; text-decoration: none;\" onclick=\"window.open('https://discord.gg/IAHispano', '_blank')\">🍏 Join our support Discord server (IA Hispano)</button>\n", - "<br>\n", - "<br>\n", - "\"\"\"\n", - "#@markdown **Settings:**\n", - "ForceUpdateDependencies = True\n", - "ForceNoMountDrive = False\n", - "#@markdown Restore your backup from Google Drive.\n", - "LoadBackupDrive = False #@param{type:\"boolean\"}\n", - "#@markdown Make regular backups of your model's training.\n", - "AutoBackups = True #@param{type:\"boolean\"}\n", - "if not os.path.exists(xdsame):\n", - " current_path = os.getcwd()\n", - " shutil.rmtree('/content/')\n", - " os.makedirs('/content/', exist_ok=True)\n", - "\n", - " os.chdir(current_path)\n", - " !git clone https://github.com/IAHispano/$nosv_name1$nosv_name2 /content/$tryre-based-Voice-Conversion-$guebui$guebui2/utils\n", - " clear_output()\n", - "\n", - " os.chdir(xdsame)\n", - " from utils.dependency import *\n", - " from utils.clonerepo_experimental import *\n", - " os.chdir(\"..\")\n", - "\n", - "\n", - "\n", - " setup_environment(ForceUpdateDependencies, ForceNoMountDrive)\n", - " clone_repository(True)\n", - "\n", - " !wget https://huggingface.co/lj1995/VoiceConversion$guebui$guebui2/resolve/main/rmvpe.pt -P /content/Retrieval-based-Voice-Conversion-$guebui$guebui2/\n", - " clear_output()\n", - "\n", - "base_path = \"/content/Retrieval-based-Voice-Conversion-$guebui$guebui2/\"\n", - "clear_output()\n", - "\n", - "\n", - "\n", - "from utils import backups\n", - "\n", - "LOGS_FOLDER = xdsame + '/logs'\n", - "if not os.path.exists(LOGS_FOLDER):\n", - " os.makedirs(LOGS_FOLDER)\n", - " clear_output()\n", - "\n", - "WEIGHTS_FOLDER = xdsame + '/logs' + '/weights'\n", - "if not os.path.exists(WEIGHTS_FOLDER):\n", - " os.makedirs(WEIGHTS_FOLDER)\n", - " clear_output()\n", - "\n", - "others_FOLDER = xdsame + '/audio-others'\n", - "if not os.path.exists(others_FOLDER):\n", - " os.makedirs(others_FOLDER)\n", - " clear_output()\n", - "\n", - "audio_outputs_FOLDER = xdsame + '/audio-outputs'\n", - "if not os.path.exists(audio_outputs_FOLDER):\n", - " os.makedirs(audio_outputs_FOLDER)\n", - " clear_output()\n", - "\n", - "if LoadBackupDrive:\n", - " backups.import_google_drive_backup()\n", - " clear_output()\n", - "\n", - "#@markdown Choose the language in which you want the interface to be available.\n", - "i18n_path = xdsame + 'i18n.py'\n", - "i18n_new_path = xdsame + 'utils/i18n.py'\n", - "try:\n", - " if os.path.exists(i18n_path) and os.path.exists(i18n_new_path):\n", - " shutil.move(i18n_new_path, i18n_path)\n", - "\n", - " SelectedLanguage = \"en_US\" #@param [\"es_ES\", \"en_US\", \"zh_CN\", \"ar_AR\", \"id_ID\", \"pt_PT\", \"ru_RU\", \"ur_UR\", \"tr_TR\", \"it_IT\", \"de_DE\"]\n", - " new_language_line = ' language = \"' + SelectedLanguage + '\"\\n'\n", - "#@markdown <a href=\"https://discord.gg/iahispano\"><font>If you need more help, feel free to join our official Discord server!</font></a>\n", - " with open(i18n_path, 'r') as file:\n", - " lines = file.readlines()\n", - "\n", - " with open(i18n_path, 'w') as file:\n", - " for index, line in enumerate(lines):\n", - " if index == 14:\n", - " file.write(new_language_line)\n", - " else:\n", - " file.write(line)\n", - "\n", - "except FileNotFoundError:\n", - " print(\"Translation couldn't be applied successfully. Please restart the environment and run the cell again.\")\n", - "\n", - "def start_web_server():\n", - " %cd /content/$tryre-based-Voice-Conversion-$guebui$guebui2\n", - " %load_ext tensorboard\n", - " clear_output()\n", - " %tensorboard --logdir /content/$tryre-based-Voice-Conversion-$guebui$guebui2/logs\n", - " !mkdir -p /content/$tryre-based-Voice-Conversion-$guebui$guebui2/audios\n", - " display(HTML(collapsible_section))\n", - " !python3 infer-web.py --colab --pycmd python3\n", - "\n", - "if AutoBackups:\n", - " web_server_thread = threading.Thread(target=start_web_server)\n", - " web_server_thread.start()\n", - " backups.backup_files()\n", - "\n", - "else:\n", - " start_web_server()" - ] - } - ], - "metadata": { - "accelerator": "GPU", - "colab": { - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3", - "name": "python3" - }, - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index b81f131c79cc585012b28002f4916491e85f3a33..0000000000000000000000000000000000000000 --- a/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -# syntax=docker/dockerfile:1 - -FROM python:3.10-bullseye - -EXPOSE 7865 - -WORKDIR /app - -COPY . . - -RUN apt update && apt install -y -qq ffmpeg aria2 && apt clean - -RUN pip3 install --no-cache-dir -r requirements.txt - -RUN aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/D40k.pth -d assets/pretrained_v2/ -o D40k.pth -RUN aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/G40k.pth -d assets/pretrained_v2/ -o G40k.pth -RUN aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/f0D40k.pth -d assets/pretrained_v2/ -o f0D40k.pth -RUN aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/f0G40k.pth -d assets/pretrained_v2/ -o f0G40k.pth - -RUN aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/HP2-人声vocals+非人声instrumentals.pth -d assets/uvr5_weights/ -o HP2-人声vocals+非人声instrumentals.pth -RUN aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/HP5-主旋律人声vocals+其他instrumentals.pth -d assets/uvr5_weights/ -o HP5-主旋律人声vocals+其他instrumentals.pth - -RUN aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt -d assets/hubert -o hubert_base.pt - -RUN aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/rmvpe.pt -d assets/hubert -o rmvpe.pt - -VOLUME [ "/app/weights", "/app/opt" ] - -CMD ["python3", "infer-web.py"] \ No newline at end of file diff --git a/Fixes/local_fixes.py b/Fixes/local_fixes.py deleted file mode 100644 index 8a418076eee6f65fe06eb0f607061796b839c1ee..0000000000000000000000000000000000000000 --- a/Fixes/local_fixes.py +++ /dev/null @@ -1,136 +0,0 @@ -import os -import sys -import time -import shutil -import requests -import zipfile - -def insert_new_line(file_name, line_to_find, text_to_insert): - lines = [] - with open(file_name, 'r', encoding='utf-8') as read_obj: - lines = read_obj.readlines() - already_exists = False - with open(file_name + '.tmp', 'w', encoding='utf-8') as write_obj: - for i in range(len(lines)): - write_obj.write(lines[i]) - if lines[i].strip() == line_to_find: - # If next line exists and starts with sys.path.append, skip - if i+1 < len(lines) and lines[i+1].strip().startswith("sys.path.append"): - print('It was already fixed! Skip adding a line...') - already_exists = True - break - else: - write_obj.write(text_to_insert + '\n') - # If no existing sys.path.append line was found, replace the original file - if not already_exists: - os.replace(file_name + '.tmp', file_name) - return True - else: - # If existing line was found, delete temporary file - os.remove(file_name + '.tmp') - return False - -def replace_in_file(file_name, old_text, new_text): - with open(file_name, 'r', encoding='utf-8') as file: - file_contents = file.read() - - if old_text in file_contents: - file_contents = file_contents.replace(old_text, new_text) - with open(file_name, 'w', encoding='utf-8') as file: - file.write(file_contents) - return True - - return False - -if __name__ == "__main__": - current_path = os.getcwd() - file_name = os.path.join(current_path, "infer", "modules", "train", "extract", "extract_f0_print.py") - line_to_find = 'import numpy as np, logging' - text_to_insert = "sys.path.append(r'" + current_path + "')" - - - success_1 = insert_new_line(file_name, line_to_find, text_to_insert) - if success_1: - print('The first operation was successful!') - else: - print('He skipped the first operation because it was already fixed!') - - file_name = 'infer-web.py' - old_text = 'with gr.Blocks(theme=gr.themes.Soft()) as app:' - new_text = 'with gr.Blocks() as app:' - - success_2 = replace_in_file(file_name, old_text, new_text) - if success_2: - print('The second operation was successful!') - else: - print('The second operation was omitted because it was already fixed!') - - print('Local corrections successful! You should now be able to infer and train locally in Applio RVC Fork.') - - time.sleep(5) - -def find_torchcrepe_directory(directory): - """ - Recursively searches for the topmost folder named 'torchcrepe' within a directory. - Returns the path of the directory found or None if none is found. - """ - for root, dirs, files in os.walk(directory): - if 'torchcrepe' in dirs: - return os.path.join(root, 'torchcrepe') - return None - -def download_and_extract_torchcrepe(): - url = 'https://github.com/maxrmorrison/torchcrepe/archive/refs/heads/master.zip' - temp_dir = 'temp_torchcrepe' - destination_dir = os.getcwd() - - try: - torchcrepe_dir_path = os.path.join(destination_dir, 'torchcrepe') - - if os.path.exists(torchcrepe_dir_path): - print("Skipping the torchcrepe download. The folder already exists.") - return - - # Download the file - print("Starting torchcrepe download...") - response = requests.get(url) - - # Raise an error if the GET request was unsuccessful - response.raise_for_status() - print("Download completed.") - - # Save the downloaded file - zip_file_path = os.path.join(temp_dir, 'master.zip') - os.makedirs(temp_dir, exist_ok=True) - with open(zip_file_path, 'wb') as file: - file.write(response.content) - print(f"Zip file saved to {zip_file_path}") - - # Extract the zip file - print("Extracting content...") - with zipfile.ZipFile(zip_file_path, 'r') as zip_file: - zip_file.extractall(temp_dir) - print("Extraction completed.") - - # Locate the torchcrepe folder and move it to the destination directory - torchcrepe_dir = find_torchcrepe_directory(temp_dir) - if torchcrepe_dir: - shutil.move(torchcrepe_dir, destination_dir) - print(f"Moved the torchcrepe directory to {destination_dir}!") - else: - print("The torchcrepe directory could not be located.") - - except Exception as e: - print("Torchcrepe not successfully downloaded", e) - - # Clean up temporary directory - if os.path.exists(temp_dir): - shutil.rmtree(temp_dir) - -# Run the function -download_and_extract_torchcrepe() - -temp_dir = 'temp_torchcrepe' - -if os.path.exists(temp_dir): - shutil.rmtree(temp_dir) diff --git a/Fixes/tensor-launch.py b/Fixes/tensor-launch.py deleted file mode 100644 index cd4ec997fb4b1338d7f29912987865899281b083..0000000000000000000000000000000000000000 --- a/Fixes/tensor-launch.py +++ /dev/null @@ -1,15 +0,0 @@ -import threading -import time -from tensorboard import program -import os - -log_path = "logs" - -if __name__ == "__main__": - tb = program.TensorBoard() - tb.configure(argv=[None, '--logdir', log_path]) - url = tb.launch() - print(f'Tensorboard can be accessed at: {url}') - - while True: - time.sleep(600) # Keep the main thread running \ No newline at end of file diff --git a/LICENSE b/LICENSE index c441961e22604dff6d32160a20972819efdd3872..7b3f47f72671fddbca4ab2abf092d702a0faeaeb 100644 --- a/LICENSE +++ b/LICENSE @@ -1,59 +1,7 @@ -MIT License - -Copyright (c) 2023 liujing04 -Copyright (c) 2023 源文雨 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -The licenses for related libraries are as follows: - -ContentVec -https://github.com/auspicious3000/contentvec/blob/main/LICENSE -MIT License - -VITS -https://github.com/jaywalnut310/vits/blob/main/LICENSE -MIT License - -HIFIGAN -https://github.com/jik876/hifi-gan/blob/master/LICENSE -MIT License - -gradio -https://github.com/gradio-app/gradio/blob/main/LICENSE -Apache License 2.0 - -ffmpeg -https://github.com/FFmpeg/FFmpeg/blob/master/COPYING.LGPLv3 -https://github.com/BtbN/FFmpeg-Builds/releases/download/autobuild-2021-02-28-12-32/ffmpeg-n4.3.2-160-gfbb9368226-win64-lgpl-4.3.zip -LPGLv3 License -MIT License - -ultimatevocalremovergui -https://github.com/Anjok07/ultimatevocalremovergui/blob/master/LICENSE -https://github.com/yang123qwe/vocal_separation_by_uvr5 -MIT License - -audio-slicer -https://github.com/openvpi/audio-slicer/blob/main/LICENSE -MIT License - -PySimpleGUI -https://github.com/PySimpleGUI/PySimpleGUI/blob/master/license.txt -LPGLv3 License \ No newline at end of file +Copyright 2024 AI Hispano + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/LazyImport.py b/LazyImport.py deleted file mode 100644 index 5bdb05ddd5a546a43adba7274b4c3465bb77f2f5..0000000000000000000000000000000000000000 --- a/LazyImport.py +++ /dev/null @@ -1,13 +0,0 @@ -from importlib.util import find_spec, LazyLoader, module_from_spec -from sys import modules - -def lazyload(name): - if name in modules: - return modules[name] - else: - spec = find_spec(name) - loader = LazyLoader(spec.loader) - module = module_from_spec(spec) - modules[name] = module - loader.exec_module(module) - return module \ No newline at end of file diff --git a/MDX-Net_Colab.ipynb b/MDX-Net_Colab.ipynb deleted file mode 100644 index a884caf08a9f7b9747346f5def57d24b7258f5b8..0000000000000000000000000000000000000000 --- a/MDX-Net_Colab.ipynb +++ /dev/null @@ -1,524 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "wX9xzLur4tus" - }, - "source": [ - "# MDX-Net Colab\n", - "<div style=\"display:flex; align-items:center; font-size: 16px;\">\n", - " <img src=\"https://github.githubassets.com/pinned-octocat.svg\" alt=\"icon1\" style=\"margin-right:10px; height: 20px;\" width=\"1.5%\">\n", - " <span>Trained models provided in this notebook are from <a href=\"https://github.com/Anjok07\">UVR-GUI</a>.</span>\n", - "</div>\n", - "<div style=\"display:flex; align-items:center; font-size: 16px;\">\n", - " <img src=\"https://github.com/Anjok07/ultimatevocalremovergui/raw/master/gui_data/img/GUI-Icon.ico\" alt=\"icon2\" style=\"margin-right:10px; height: 20px;margin-top:10px\" width=\"1.5%\">\n", - " <span>OFFICIAL UVR GITHUB PAGE: <a href=\"https://github.com/Anjok07/ultimatevocalremovergui\">here</a>.</span>\n", - "</div>\n", - "<div style=\"display:flex; align-items:center; font-size: 16px;\">\n", - " <img src=\"https://avatars.githubusercontent.com/u/24620594\" alt=\"icon3\" style=\"margin-right:10px; height: 20px;\" width=\"1.5%\">\n", - " <span>OFFICIAL CLI Version: <a href=\"https://github.com/tsurumeso/vocal-remover\">here</a>.</span>\n", - "</div>\n", - "<div style=\"display:flex; align-items:center; font-size: 16px;\">\n", - " <img src=\"https://icons.getbootstrap.com/assets/icons/discord.svg\" alt=\"icon4\" style=\"margin-right:10px; height: 20px;\" width=\"1.5%\">\n", - " <span>Join our <a href=\"https://cutt.ly/0TcDjmo\">Discord server</a>!</span>\n", - "</div>\n", - "<sup><br>Ultimate Vocal Remover (unofficial)</sup>\n", - "<sup><br>MDX-Net by <a href=\"https://github.com/kuielab\">kuielab</a> and adapted for Colaboratory by <a href=\"https://www.youtube.com/channel/UC0NiSV1jLMH-9E09wiDVFYw\">AudioHacker</a>.</sup>\n", - "\n", - "<sup><br>Your support means a lot to me. If you enjoy my work, please consider buying me a ko-fi:<br></sup>\n", - "[](https://ko-fi.com/X8X6M8FR0)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "3J69RV7G8ocb", - "cellView": "form" - }, - "outputs": [], - "source": [ - "import json\n", - "import os\n", - "import os.path\n", - "import gc\n", - "import psutil\n", - "import requests\n", - "import subprocess\n", - "import glob\n", - "import time\n", - "import logging\n", - "import sys\n", - "from bs4 import BeautifulSoup\n", - "from google.colab import drive, files, output\n", - "from IPython.display import Audio, display\n", - "\n", - "if \"first_cell_ran\" in locals():\n", - " print(\"You've ran this cell for this session. No need to run it again.\\nif you think something went wrong or you want to change mounting path, restart the runtime.\")\n", - "else:\n", - " print('Setting up... please wait around 1-2 minute(s).')\n", - "\n", - " branch = \"https://github.com/NaJeongMo/Colab-for-MDX_B\"\n", - "\n", - " model_params = \"https://raw.githubusercontent.com/TRvlvr/application_data/main/mdx_model_data/model_data.json\"\n", - " _Models = \"https://github.com/TRvlvr/model_repo/releases/download/all_public_uvr_models/\"\n", - " # _models = \"https://pastebin.com/raw/jBzYB8vz\"\n", - " _models = \"https://raw.githubusercontent.com/TRvlvr/application_data/main/filelists/download_checks.json\"\n", - " stem_naming = \"https://pastebin.com/raw/mpH4hRcF\"\n", - " arl_check_endpoint = 'https://dz.doubledouble.top/check' # param: arl?=<>\n", - "\n", - " file_folder = \"Colab-for-MDX_B\"\n", - "\n", - " model_ids = requests.get(_models).json()\n", - " model_ids = model_ids[\"mdx_download_list\"].values()\n", - "\n", - " model_params = requests.get(model_params).json()\n", - " stem_naming = requests.get(stem_naming).json()\n", - "\n", - " os.makedirs(\"tmp_models\", exist_ok=True)\n", - "\n", - " # @markdown If you don't wish to mount google drive, uncheck this box.\n", - " MountDrive = True # @param{type:\"boolean\"}\n", - " # @markdown The path for the drive to be mounted: Please be cautious when modifying this as it can cause issues if not done properly.\n", - " mounting_path = \"/content/drive/MyDrive\" # @param [\"snippets:\",\"/content/drive/MyDrive\",\"/content/drive/Shareddrives/<your shared drive name>\", \"/content/drive/Shareddrives/Shared Drive\"]{allow-input: true}\n", - " # @markdown Force update and disregard local changes: discards all local modifications in your repository, effectively replacing all files with the versions from the original commit.\n", - " force_update = False # @param{type:\"boolean\"}\n", - " # @markdown Auto Update (does not discard your changes)\n", - " auto_update = True # @param{type:\"boolean\"}\n", - "\n", - "\n", - " reqs_apt = [] # !sudo apt-get install\n", - " reqs_pip = [\"librosa>=0.6.3,<0.9\", \"onnxruntime_gpu\", \"deemix\", \"yt_dlp\"] # pip3 install\n", - "\n", - " class hide_opt: # hide outputs\n", - " def __enter__(self):\n", - " self._original_stdout = sys.stdout\n", - " sys.stdout = open(os.devnull, \"w\")\n", - "\n", - " def __exit__(self, exc_type, exc_val, exc_tb):\n", - " sys.stdout.close()\n", - " sys.stdout = self._original_stdout\n", - "\n", - " def get_size(bytes, suffix=\"B\"): # read ram\n", - " global svmem\n", - " factor = 1024\n", - " for unit in [\"\", \"K\", \"M\", \"G\", \"T\", \"P\"]:\n", - " if bytes < factor:\n", - " return f\"{bytes:.2f}{unit}{suffix}\"\n", - " bytes /= factor\n", - " svmem = psutil.virtual_memory()\n", - "\n", - "\n", - " print('installing requirements...',end=' ')\n", - " with hide_opt():\n", - " for x in reqs_apt:\n", - " subprocess.run([\"sudo\", \"apt-get\", \"install\", x])\n", - " for x in reqs_pip:\n", - " subprocess.run([\"python3\", \"-m\", \"pip\", \"install\", x])\n", - " print('done')\n", - "\n", - " def install_or_mount_drive():\n", - " print(\n", - " \"Please log in to your account by following the prompts in the pop-up tab.\\nThis step is necessary to install the files to your Google Drive.\\nIf you have any concerns about the safety of this notebook, you can choose not to mount your drive by unchecking the \\\"MountDrive\\\" checkbox.\"\n", - " )\n", - " drive.mount(\"/content/drive\", force_remount=True)\n", - " os.chdir(mounting_path)\n", - " # check if previous installation is done\n", - " if os.path.exists(os.path.join(mounting_path, file_folder)):\n", - " # update checking\n", - " os.chdir(file_folder)\n", - "\n", - " if force_update:\n", - " print('Force updating...')\n", - "\n", - " commands = [\n", - " [\"git\", \"pull\"],\n", - " [\"git\", \"checkout\", \"--\", \".\"],\n", - " ]\n", - "\n", - " for cmd in commands:\n", - " subprocess.run(cmd)\n", - "\n", - " elif auto_update:\n", - " print('Checking for updates...')\n", - " commands = [\n", - " [\"git\", \"pull\"],\n", - " ]\n", - "\n", - " for cmd in commands:\n", - " subprocess.run(cmd)\n", - " else:\n", - " subprocess.run([\"git\", \"clone\", \"https://github.com/NaJeongMo/Colab-for-MDX_B.git\"])\n", - " os.chdir(file_folder)\n", - "\n", - " def use_uvr_without_saving():\n", - " global mounting_path\n", - " print(\"Notice: files won't be saved to personal drive.\")\n", - " print(f\"Downloading {file_folder}...\", end=\" \")\n", - " mounting_path = \"/content\"\n", - " with hide_opt():\n", - " os.chdir(mounting_path)\n", - " subprocess.run([\"git\", \"clone\", \"https://github.com/NaJeongMo/Colab-for-MDX_B.git\"])\n", - " os.chdir(file_folder)\n", - "\n", - " if MountDrive:\n", - " install_or_mount_drive()\n", - " else:\n", - " use_uvr_without_saving()\n", - " print(\"done!\")\n", - " if not os.path.exists(\"tracks\"):\n", - " os.mkdir(\"tracks\")\n", - "\n", - " print('Importing required libraries...',end=' ')\n", - "\n", - " import os\n", - " import mdx\n", - " import librosa\n", - " import torch\n", - " import soundfile as sf\n", - " import numpy as np\n", - " import yt_dlp\n", - "\n", - " from deezer import Deezer\n", - " from deezer import TrackFormats\n", - " import deemix\n", - " from deemix.settings import load as loadSettings\n", - " from deemix.downloader import Downloader\n", - " from deemix import generateDownloadObject\n", - "\n", - " logger = logging.getLogger(\"yt_dlp\")\n", - " logger.setLevel(logging.ERROR)\n", - "\n", - " def id_to_ptm(mkey):\n", - " if mkey in model_ids:\n", - " mpath = f\"/content/tmp_models/{mkey}\"\n", - " if not os.path.exists(f'/content/tmp_models/{mkey}'):\n", - " print('Downloading model...',end=' ')\n", - " subprocess.run(\n", - " [\"wget\", _Models+mkey, \"-O\", mpath]\n", - " )\n", - " print(f'saved to {mpath}')\n", - " # get_ipython().system(f'gdown {model_id} -O /content/tmp_models/{mkey}')\n", - " return mpath\n", - " else:\n", - " return mpath\n", - " else:\n", - " mpath = f'models/{mkey}'\n", - " return mpath\n", - "\n", - " def prepare_mdx(custom_param=False, dim_f=None, dim_t=None, n_fft=None, stem_name=None, compensation=None):\n", - " device = torch.device('cuda:0') if torch.cuda.is_available() else torch.device('cpu')\n", - " if custom_param:\n", - " assert not (dim_f is None or dim_t is None or n_fft is None or compensation is None), 'Custom parameter selected, but incomplete parameters are provided.'\n", - " mdx_model = mdx.MDX_Model(\n", - " device,\n", - " dim_f = dim_f,\n", - " dim_t = dim_t,\n", - " n_fft = n_fft,\n", - " stem_name=stem_name,\n", - " compensation=compensation\n", - " )\n", - " else:\n", - " model_hash = mdx.MDX.get_hash(onnx)\n", - " if model_hash in model_params:\n", - " mp = model_params.get(model_hash)\n", - " mdx_model = mdx.MDX_Model(\n", - " device,\n", - " dim_f = mp[\"mdx_dim_f_set\"],\n", - " dim_t = 2**mp[\"mdx_dim_t_set\"],\n", - " n_fft = mp[\"mdx_n_fft_scale_set\"],\n", - " stem_name=mp[\"primary_stem\"],\n", - " compensation=compensation if not custom_param and compensation is not None else mp[\"compensate\"]\n", - " )\n", - " return mdx_model\n", - "\n", - " def run_mdx(onnx, mdx_model,filename,diff=False,suffix=None,diff_suffix=None, denoise=False, m_threads=1):\n", - " mdx_sess = mdx.MDX(onnx,mdx_model)\n", - " print(f\"Processing: {filename}\")\n", - " wave, sr = librosa.load(filename,mono=False, sr=44100)\n", - " # normalizing input wave gives better output\n", - " peak = max(np.max(wave), abs(np.min(wave)))\n", - " wave /= peak\n", - " if denoise:\n", - " wave_processed = -(mdx_sess.process_wave(-wave, m_threads)) + (mdx_sess.process_wave(wave, m_threads))\n", - " wave_processed *= 0.5\n", - " else:\n", - " wave_processed = mdx_sess.process_wave(wave, m_threads)\n", - " # return to previous peak\n", - " wave_processed *= peak\n", - "\n", - " stem_name = mdx_model.stem_name if suffix is None else suffix # use suffix if provided\n", - " save_path = f\"{os.path.basename(os.path.splitext(filename)[0])}_{stem_name}.wav\"\n", - " save_path = os.path.join(\n", - " 'separated',\n", - " save_path\n", - " )\n", - " sf.write(\n", - " save_path,\n", - " wave_processed.T,\n", - " sr\n", - " )\n", - "\n", - " print(f'done, saved to: {save_path}')\n", - "\n", - " if diff:\n", - " diff_stem_name = stem_naming.get(stem_name) if diff_suffix is None else diff_suffix # use suffix if provided\n", - " stem_name = f\"{stem_name}_diff\" if diff_stem_name is None else diff_stem_name\n", - " save_path = f\"{os.path.basename(os.path.splitext(filename)[0])}_{stem_name}.wav\"\n", - " save_path = os.path.join(\n", - " 'separated',\n", - " save_path\n", - " )\n", - " sf.write(\n", - " save_path,\n", - " (-wave_processed.T*mdx_model.compensation)+wave.T,\n", - " sr\n", - " )\n", - " print(f'invert done, saved to: {save_path}')\n", - " del mdx_sess, wave_processed, wave\n", - " gc.collect()\n", - "\n", - " def is_valid_url(url):\n", - " import re\n", - " regex = re.compile(\n", - " r'^https?://'\n", - " r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\\.)+[A-Z]{2,6}\\.?|'\n", - " r'localhost|'\n", - " r'\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})'\n", - " r'(?::\\d+)?'\n", - " r'(?:/?|[/?]\\S+)$', re.IGNORECASE)\n", - " return url is not None and regex.search(url)\n", - "\n", - " def download_deezer(link, arl, fmt='FLAC'):\n", - " match fmt:\n", - " case 'FLAC':\n", - " bitrate = TrackFormats.FLAC\n", - " case 'MP3_320':\n", - " bitrate = TrackFormats.MP3_320\n", - " case 'MP3_128':\n", - " bitrate = TrackFormats.MP3_128\n", - " case _:\n", - " bitrate = TrackFormats.MP3_128\n", - "\n", - " dz = Deezer()\n", - " settings = loadSettings('dz_config')\n", - " settings['downloadLocation'] = './tracks'\n", - " if not dz.login_via_arl(arl.strip()):\n", - " raise Exception('Error while logging in with provided ARL.')\n", - " downloadObject = generateDownloadObject(dz, link, bitrate)\n", - " print(f'Downloading {downloadObject.type}: \"{downloadObject.title}\" by {downloadObject.artist}...',end=' ',flush=True)\n", - " Downloader(dz, downloadObject, settings).start()\n", - " print(f'done.')\n", - "\n", - " path_to_audio = []\n", - " for file in downloadObject.files:\n", - " path_to_audio.append(file[\"path\"])\n", - "\n", - " return path_to_audio\n", - "\n", - " def download_link(url):\n", - " ydl_opts = {\n", - " 'format': 'bestvideo+bestaudio/best',\n", - " 'outtmpl': '%(title)s.%(ext)s',\n", - " 'nocheckcertificate': True,\n", - " 'ignoreerrors': True,\n", - " 'no_warnings': True,\n", - " 'extractaudio': True,\n", - " }\n", - " with yt_dlp.YoutubeDL(ydl_opts) as ydl:\n", - " result = ydl.extract_info(url, download=True)\n", - " download_path = ydl.prepare_filename(result)\n", - " return download_path\n", - "\n", - " print('finished setting up!')\n", - " first_cell_ran = True" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "4hd1TzEGCiRo", - "cellView": "form" - }, - "outputs": [], - "source": [ - "if 'first_cell_ran' in locals():\n", - " os.chdir(mounting_path + '/' + file_folder + '/')\n", - " #parameter markdowns-----------------\n", - " #@markdown ### Input files\n", - " #@markdown track filename: Upload your songs to the \"tracks\" folder. You may provide multiple links/files by spliting them with ;\n", - " filename = \"https://deezer.com/album/281108671\" #@param {type:\"string\"}\n", - " #@markdown onnx model (if you have your own model, upload it in models folder)\n", - " onnx = \"UVR-MDX-NET-Inst_HQ_3.onnx\" #@param [\"Kim_Inst.onnx\", \"Kim_Vocal_1.onnx\", \"Kim_Vocal_2.onnx\", \"kuielab_a_bass.onnx\", \"kuielab_a_drums.onnx\", \"kuielab_a_other.onnx\", \"kuielab_a_vocals.onnx\", \"kuielab_b_bass.onnx\", \"kuielab_b_drums.onnx\", \"kuielab_b_other.onnx\", \"kuielab_b_vocals.onnx\", \"Reverb_HQ_By_FoxJoy.onnx\", \"UVR-MDX-NET-Inst_1.onnx\", \"UVR-MDX-NET-Inst_2.onnx\", \"UVR-MDX-NET-Inst_3.onnx\", \"UVR-MDX-NET-Inst_HQ_1.onnx\", \"UVR-MDX-NET-Inst_HQ_2.onnx\", \"UVR-MDX-NET-Inst_Main.onnx\", \"UVR_MDXNET_1_9703.onnx\", \"UVR_MDXNET_2_9682.onnx\", \"UVR_MDXNET_3_9662.onnx\", \"UVR_MDXNET_9482.onnx\", \"UVR_MDXNET_KARA.onnx\", \"UVR_MDXNET_KARA_2.onnx\", \"UVR_MDXNET_Main.onnx\", \"UVR-MDX-NET-Inst_HQ_3.onnx\", \"UVR-MDX-NET-Voc_FT.onnx\"]{allow-input: true}\n", - " #@markdown process all: processes all tracks inside tracks/ folder instead. (filename will be ignored!)\n", - " process_all = False # @param{type:\"boolean\"}\n", - "\n", - "\n", - " #@markdown ### Settings\n", - " #@markdown invert: get difference between input and output (e.g get Instrumental out of Vocals)\n", - " invert = True # @param{type:\"boolean\"}\n", - " #@markdown denoise: get rid of MDX noise. (This processes input track twice)\n", - " denoise = True # @param{type:\"boolean\"}\n", - " #@markdown m_threads: like batch size, processes input wave in n threads. (beneficial for CPU)\n", - " m_threads = 2 #@param {type:\"slider\", min:1, max:8, step:1}\n", - "\n", - " #@markdown ### Custom model parameters (Only use this if you're using new/unofficial/custom models)\n", - " #@markdown Use custom model parameters. (Default: unchecked, or auto)\n", - " use_custom_parameter = False # @param{type:\"boolean\"}\n", - " #@markdown Output file suffix (usually the stem name e.g Vocals)\n", - " suffix = \"Vocals_custom\" #@param [\"Vocals\", \"Drums\", \"Bass\", \"Other\"]{allow-input: true}\n", - " suffix_invert = \"Instrumental_custom\" #@param [\"Instrumental\", \"Drumless\", \"Bassless\", \"Instruments\"]{allow-input: true}\n", - " #@markdown Model parameters\n", - " dim_f = 3072 #@param {type: \"integer\"}\n", - " dim_t = 256 #@param {type: \"integer\"}\n", - " n_fft = 6144 #@param {type: \"integer\"}\n", - " #@markdown use custom compensation: only if you have your own compensation value for your model. this still apply even if you don't have use_custom_parameter checked (Default: unchecked, or auto)\n", - " use_custom_compensation = False # @param{type:\"boolean\"}\n", - " compensation = 1.000 #@param {type: \"number\"}\n", - "\n", - " #@markdown ### Extras\n", - " #@markdown Deezer arl: paste your ARL here for deezer tracks directly!\n", - " arl = \"\" #@param {type:\"string\"}\n", - " #@markdown Track format: select track quality/format\n", - " track_format = \"FLAC\" #@param [\"FLAC\",\"MP3_320\",\"MP3_128\"]\n", - " #@markdown Print settings being used in the run\n", - " print_settings = True # @param{type:\"boolean\"}\n", - "\n", - "\n", - "\n", - " onnx = id_to_ptm(onnx)\n", - " compensation = compensation if use_custom_compensation or use_custom_parameter else None\n", - " mdx_model = prepare_mdx(use_custom_parameter, dim_f, dim_t, n_fft, compensation=compensation)\n", - "\n", - " filename_split = filename.split(';')\n", - "\n", - " usable_files = []\n", - "\n", - " if not process_all:\n", - " for fn in filename_split:\n", - " fn = fn.strip()\n", - " if is_valid_url(fn):\n", - " dm, ltype, lid = deemix.parseLink(fn)\n", - " if ltype and lid:\n", - " usable_files += download_deezer(fn, arl, track_format)\n", - " else:\n", - " print('downloading link...',end=' ')\n", - " usable_files+=[download_link(fn)]\n", - " print('done')\n", - " else:\n", - " usable_files.append(os.path.join('tracks',fn))\n", - " else:\n", - " for fn in glob.glob('tracks/*'):\n", - " usable_files.append(fn)\n", - " for filename in usable_files:\n", - " suffix_naming = suffix if use_custom_parameter else None\n", - " diff_suffix_naming = suffix_invert if use_custom_parameter else None\n", - " run_mdx(onnx, mdx_model, filename, diff=invert,suffix=suffix_naming,diff_suffix=diff_suffix_naming,denoise=denoise)\n", - "\n", - " if print_settings:\n", - " print()\n", - " print('[MDX-Net_Colab settings used]')\n", - " print(f'Model used: {onnx}')\n", - " print(f'Model MD5: {mdx.MDX.get_hash(onnx)}')\n", - " print(f'Using de-noise: {denoise}')\n", - " print(f'Model parameters:')\n", - " print(f' -dim_f: {mdx_model.dim_f}')\n", - " print(f' -dim_t: {mdx_model.dim_t}')\n", - " print(f' -n_fft: {mdx_model.n_fft}')\n", - " print(f' -compensation: {mdx_model.compensation}')\n", - " print()\n", - " print('[Input file]')\n", - " print('filename(s): ')\n", - " for filename in usable_files:\n", - " print(f' -{filename}')\n", - "\n", - " del mdx_model" - ] - }, - { - "cell_type": "markdown", - "source": [ - "# Guide\n", - "\n", - "This tutorial guide will walk you through the steps to use the features of this Colab notebook.\n", - "\n", - "## Mount Drive\n", - "\n", - "To mount your Google Drive, follow these steps:\n", - "\n", - "1. Check the box next to \"MountDrive\" if you want to mount Google Drive.\n", - "2. Modify the \"mounting_path\" if you want to specify a different path for the drive to be mounted. **Note:** Be cautious when modifying this path as it can cause issues if not done properly.\n", - "3. Check the box next to \"Force update and disregard local changes\" if you want to discard all local modifications in your repository and replace the files with the versions from the original commit.\n", - "4. Check the box next to \"Auto Update\" if you want to automatically update without discarding your changes. Leave it unchecked if you want to manually update.\n", - "\n", - "## Input Files\n", - "\n", - "To upload your songs, follow these steps:\n", - "\n", - "1. Specify the \"track filename\" for your songs. You can provide multiple links or files by separating them with a semicolon (;).\n", - "2. Upload your songs to the \"tracks\" folder.\n", - "\n", - "## ONNX Model\n", - "\n", - "If you have your own ONNX model, follow these steps:\n", - "\n", - "1. Upload your model to the \"models\" folder.\n", - "2. Specify the \"onnx\" filename for your model.\n", - "\n", - "## Processing\n", - "\n", - "To process your tracks, follow these steps:\n", - "\n", - "1. If you want to process all tracks inside the \"tracks\" folder, check the box next to \"process_all\" and ignore the \"filename\" field.\n", - "2. Specify any additional settings you want:\n", - " - Check the box next to \"invert\" to get the difference between input and output (e.g., get Instrumental out of Vocals).\n", - " - Check the box next to \"denoise\" to get rid of MDX noise. This processes the input track twice.\n", - " - Specify custom model parameters only if you're using new/unofficial/custom models. Use the \"use_custom_parameter\" checkbox to enable this feature.\n", - " - Specify the output file suffix, which is usually the stem name (e.g., Vocals). Use the \"suffix\" field to specify the suffix for normal processing and the \"suffix_invert\" field for inverted processing.\n", - "\n", - "## Model Parameters\n", - "\n", - "Specify the following custom model parameters if applicable:\n", - "\n", - "- \"dim_f\": The value for the `dim_f` parameter.\n", - "- \"dim_t\": The value for the `dim_t` parameter.\n", - "- \"n_fft\": The value for the `n_fft` parameter.\n", - "- Check the box next to \"use_custom_compensation\" if you have your own compensation value for your model. Specify the compensation value in the \"compensation\" field.\n", - "\n", - "## Extras\n", - "\n", - "If you're working with Deezer tracks, paste your ARL (Authentication Request Library) in the \"arl\" field to directly access the tracks.\n", - "\n", - "Specify the \"Track format\" by selecting the desired quality/format for the track.\n", - "\n", - "To print the settings being used in the run, check the box next to \"print_settings\".\n", - "\n", - "That's it! You're now ready to use this Colab notebook. Enjoy!\n", - "\n", - "## For more detailed guide, proceed to this <a href=\"https://docs.google.com/document/d/17fjNvJzj8ZGSer7c7OFe_CNfUKbAxEh_OBv94ZdRG5c\">link</a>.\n", - "credits: (discord) deton24" - ], - "metadata": { - "id": "tMVwX5RhZSRP" - } - } - ], - "metadata": { - "accelerator": "GPU", - "colab": { - "gpuType": "T4", - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3", - "name": "python3" - }, - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} \ No newline at end of file diff --git a/MDXNet.py b/MDXNet.py deleted file mode 100644 index 9b7eb43844ad0d4f9ce61287ccf9a8a4206d3853..0000000000000000000000000000000000000000 --- a/MDXNet.py +++ /dev/null @@ -1,272 +0,0 @@ -import soundfile as sf -import torch, pdb, os, warnings, librosa -import numpy as np -import onnxruntime as ort -from tqdm import tqdm -import torch - -dim_c = 4 - - -class Conv_TDF_net_trim: - def __init__( - self, device, model_name, target_name, L, dim_f, dim_t, n_fft, hop=1024 - ): - super(Conv_TDF_net_trim, self).__init__() - - self.dim_f = dim_f - self.dim_t = 2**dim_t - self.n_fft = n_fft - self.hop = hop - self.n_bins = self.n_fft // 2 + 1 - self.chunk_size = hop * (self.dim_t - 1) - self.window = torch.hann_window(window_length=self.n_fft, periodic=True).to( - device - ) - self.target_name = target_name - self.blender = "blender" in model_name - - out_c = dim_c * 4 if target_name == "*" else dim_c - self.freq_pad = torch.zeros( - [1, out_c, self.n_bins - self.dim_f, self.dim_t] - ).to(device) - - self.n = L // 2 - - def stft(self, x): - x = x.reshape([-1, self.chunk_size]) - x = torch.stft( - x, - n_fft=self.n_fft, - hop_length=self.hop, - window=self.window, - center=True, - return_complex=True, - ) - x = torch.view_as_real(x) - x = x.permute([0, 3, 1, 2]) - x = x.reshape([-1, 2, 2, self.n_bins, self.dim_t]).reshape( - [-1, dim_c, self.n_bins, self.dim_t] - ) - return x[:, :, : self.dim_f] - - def istft(self, x, freq_pad=None): - freq_pad = ( - self.freq_pad.repeat([x.shape[0], 1, 1, 1]) - if freq_pad is None - else freq_pad - ) - x = torch.cat([x, freq_pad], -2) - c = 4 * 2 if self.target_name == "*" else 2 - x = x.reshape([-1, c, 2, self.n_bins, self.dim_t]).reshape( - [-1, 2, self.n_bins, self.dim_t] - ) - x = x.permute([0, 2, 3, 1]) - x = x.contiguous() - x = torch.view_as_complex(x) - x = torch.istft( - x, n_fft=self.n_fft, hop_length=self.hop, window=self.window, center=True - ) - return x.reshape([-1, c, self.chunk_size]) - - -def get_models(device, dim_f, dim_t, n_fft): - return Conv_TDF_net_trim( - device=device, - model_name="Conv-TDF", - target_name="vocals", - L=11, - dim_f=dim_f, - dim_t=dim_t, - n_fft=n_fft, - ) - - -warnings.filterwarnings("ignore") -cpu = torch.device("cpu") -if torch.cuda.is_available(): - device = torch.device("cuda:0") -elif torch.backends.mps.is_available(): - device = torch.device("mps") -else: - device = torch.device("cpu") - - -class Predictor: - def __init__(self, args): - self.args = args - self.model_ = get_models( - device=cpu, dim_f=args.dim_f, dim_t=args.dim_t, n_fft=args.n_fft - ) - self.model = ort.InferenceSession( - os.path.join(args.onnx, self.model_.target_name + ".onnx"), - providers=["CUDAExecutionProvider", "CPUExecutionProvider"], - ) - print("onnx load done") - - def demix(self, mix): - samples = mix.shape[-1] - margin = self.args.margin - chunk_size = self.args.chunks * 44100 - assert not margin == 0, "margin cannot be zero!" - if margin > chunk_size: - margin = chunk_size - - segmented_mix = {} - - if self.args.chunks == 0 or samples < chunk_size: - chunk_size = samples - - counter = -1 - for skip in range(0, samples, chunk_size): - counter += 1 - - s_margin = 0 if counter == 0 else margin - end = min(skip + chunk_size + margin, samples) - - start = skip - s_margin - - segmented_mix[skip] = mix[:, start:end].copy() - if end == samples: - break - - sources = self.demix_base(segmented_mix, margin_size=margin) - """ - mix:(2,big_sample) - segmented_mix:offset->(2,small_sample) - sources:(1,2,big_sample) - """ - return sources - - def demix_base(self, mixes, margin_size): - chunked_sources = [] - progress_bar = tqdm(total=len(mixes)) - progress_bar.set_description("Processing") - for mix in mixes: - cmix = mixes[mix] - sources = [] - n_sample = cmix.shape[1] - model = self.model_ - trim = model.n_fft // 2 - gen_size = model.chunk_size - 2 * trim - pad = gen_size - n_sample % gen_size - mix_p = np.concatenate( - (np.zeros((2, trim)), cmix, np.zeros((2, pad)), np.zeros((2, trim))), 1 - ) - mix_waves = [] - i = 0 - while i < n_sample + pad: - waves = np.array(mix_p[:, i : i + model.chunk_size]) - mix_waves.append(waves) - i += gen_size - mix_waves = torch.tensor(mix_waves, dtype=torch.float32).to(cpu) - with torch.no_grad(): - _ort = self.model - spek = model.stft(mix_waves) - if self.args.denoise: - spec_pred = ( - -_ort.run(None, {"input": -spek.cpu().numpy()})[0] * 0.5 - + _ort.run(None, {"input": spek.cpu().numpy()})[0] * 0.5 - ) - tar_waves = model.istft(torch.tensor(spec_pred)) - else: - tar_waves = model.istft( - torch.tensor(_ort.run(None, {"input": spek.cpu().numpy()})[0]) - ) - tar_signal = ( - tar_waves[:, :, trim:-trim] - .transpose(0, 1) - .reshape(2, -1) - .numpy()[:, :-pad] - ) - - start = 0 if mix == 0 else margin_size - end = None if mix == list(mixes.keys())[::-1][0] else -margin_size - if margin_size == 0: - end = None - sources.append(tar_signal[:, start:end]) - - progress_bar.update(1) - - chunked_sources.append(sources) - _sources = np.concatenate(chunked_sources, axis=-1) - # del self.model - progress_bar.close() - return _sources - - def prediction(self, m, vocal_root, others_root, format): - os.makedirs(vocal_root, exist_ok=True) - os.makedirs(others_root, exist_ok=True) - basename = os.path.basename(m) - mix, rate = librosa.load(m, mono=False, sr=44100) - if mix.ndim == 1: - mix = np.asfortranarray([mix, mix]) - mix = mix.T - sources = self.demix(mix.T) - opt = sources[0].T - if format in ["wav", "flac"]: - sf.write( - "%s/%s_main_vocal.%s" % (vocal_root, basename, format), mix - opt, rate - ) - sf.write("%s/%s_others.%s" % (others_root, basename, format), opt, rate) - else: - path_vocal = "%s/%s_main_vocal.wav" % (vocal_root, basename) - path_other = "%s/%s_others.wav" % (others_root, basename) - sf.write(path_vocal, mix - opt, rate) - sf.write(path_other, opt, rate) - if os.path.exists(path_vocal): - os.system( - "ffmpeg -i %s -vn %s -q:a 2 -y" - % (path_vocal, path_vocal[:-4] + ".%s" % format) - ) - if os.path.exists(path_other): - os.system( - "ffmpeg -i %s -vn %s -q:a 2 -y" - % (path_other, path_other[:-4] + ".%s" % format) - ) - - -class MDXNetDereverb: - def __init__(self, chunks): - self.onnx = "uvr5_weights/onnx_dereverb_By_FoxJoy" - self.shifts = 10 #'Predict with randomised equivariant stabilisation' - self.mixing = "min_mag" # ['default','min_mag','max_mag'] - self.chunks = chunks - self.margin = 44100 - self.dim_t = 9 - self.dim_f = 3072 - self.n_fft = 6144 - self.denoise = True - self.pred = Predictor(self) - - def _path_audio_(self, input, vocal_root, others_root, format): - self.pred.prediction(input, vocal_root, others_root, format) - - -if __name__ == "__main__": - dereverb = MDXNetDereverb(15) - from time import time as ttime - - t0 = ttime() - dereverb._path_audio_( - "雪雪伴奏对消HP5.wav", - "vocal", - "others", - ) - t1 = ttime() - print(t1 - t0) - - -""" - -runtime\python.exe MDXNet.py - -6G: -15/9:0.8G->6.8G -14:0.8G->6.5G -25:炸 - -half15:0.7G->6.6G,22.69s -fp32-15:0.7G->6.6G,20.85s - -""" diff --git a/Makefile b/Makefile deleted file mode 100644 index 44de020e6feb7fcd58016d7c3c736681f533b597..0000000000000000000000000000000000000000 --- a/Makefile +++ /dev/null @@ -1,63 +0,0 @@ -.PHONY: -.ONESHELL: - -help: ## Show this help and exit - @grep -hE '^[A-Za-z0-9_ \-]*?:.*##.*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' - -install: ## Install dependencies (Do everytime you start up a paperspace machine) - apt-get -y install build-essential python3-dev ffmpeg - pip install --upgrade setuptools wheel - pip install --upgrade pip - pip install faiss-gpu fairseq gradio ffmpeg ffmpeg-python praat-parselmouth pyworld numpy==1.23.5 numba==0.56.4 librosa==0.9.1 - pip install -r requirements.txt - pip install --upgrade lxml - apt-get update - apt -y install -qq aria2 - -basev1: ## Download version 1 pre-trained models (Do only once after cloning the fork) - mkdir -p pretrained uvr5_weights - git pull - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/D32k.pth -d pretrained -o D32k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/D40k.pth -d pretrained -o D40k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/D48k.pth -d pretrained -o D48k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/G32k.pth -d pretrained -o G32k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/G40k.pth -d pretrained -o G40k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/G48k.pth -d pretrained -o G48k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0D32k.pth -d pretrained -o f0D32k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0D40k.pth -d pretrained -o f0D40k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0D48k.pth -d pretrained -o f0D48k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0G32k.pth -d pretrained -o f0G32k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0G40k.pth -d pretrained -o f0G40k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0G48k.pth -d pretrained -o f0G48k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/HP2-人声vocals+非人声instrumentals.pth -d uvr5_weights -o HP2-人声vocals+非人声instrumentals.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/HP5-主旋律人声vocals+其他instrumentals.pth -d uvr5_weights -o HP5-主旋律人声vocals+其他instrumentals.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt -d ./ -o hubert_base.pt - -basev2: ## Download version 2 pre-trained models (Do only once after cloning the fork) - mkdir -p pretrained_v2 uvr5_weights - git pull - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/D32k.pth -d pretrained_v2 -o D32k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/D40k.pth -d pretrained_v2 -o D40k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/D48k.pth -d pretrained_v2 -o D48k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/G32k.pth -d pretrained_v2 -o G32k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/G40k.pth -d pretrained_v2 -o G40k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/G48k.pth -d pretrained_v2 -o G48k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/f0D32k.pth -d pretrained_v2 -o f0D32k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/f0D40k.pth -d pretrained_v2 -o f0D40k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/f0D48k.pth -d pretrained_v2 -o f0D48k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/f0G32k.pth -d pretrained_v2 -o f0G32k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/f0G40k.pth -d pretrained_v2 -o f0G40k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/f0G48k.pth -d pretrained_v2 -o f0G48k.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/HP2-人声vocals+非人声instrumentals.pth -d uvr5_weights -o HP2-人声vocals+非人声instrumentals.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/HP5-主旋律人声vocals+其他instrumentals.pth -d uvr5_weights -o HP5-主旋律人声vocals+其他instrumentals.pth - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt -d ./ -o hubert_base.pt - -run-ui: ## Run the python GUI - python infer-web.py --paperspace --pycmd python - -run-cli: ## Run the python CLI - python infer-web.py --pycmd python --is_cli - -tensorboard: ## Start the tensorboard (Run on separate terminal) - echo https://tensorboard-$$(hostname).clg07azjl.paperspacegradient.com - tensorboard --logdir logs --bind_all \ No newline at end of file diff --git a/README.md b/README.md index 9d8914cd05791e4f8db6267eb2a5fe2133e22e58..7cbb137eefb5f4d512319e26c03d5db4c043aee6 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,142 @@ --- -title: RVC Inference HF -emoji: 👀 +license: mit +title: Applio +sdk: gradio colorFrom: green colorTo: green -sdk: gradio -sdk_version: 3.43.2 -app_file: app.py -pinned: false ---- \ No newline at end of file +emoji: 🍏 +startup_duration_timeout: 1h +--- + +<h1 align="center"> + <a href="https://applio.org" target="_blank"><img src="https://github.com/IAHispano/Applio/assets/133521603/a5cc5c72-ed68-48a5-954f-db9f1dc4e7de" alt="Applio"></a> +</h1> + +<p align="center"> + <img alt="Contributors" src="https://img.shields.io/github/contributors/iahispano/applio?style=for-the-badge&color=00AA68" /> + <img alt="Release" src="https://img.shields.io/github/release/iahispano/applio?style=for-the-badge&color=00AA68" /> + <img alt="Stars" src="https://img.shields.io/github/stars/iahispano/applio?style=for-the-badge&color=00AA68" /> + <img alt="Fork" src="https://img.shields.io/github/forks/iahispano/applio?style=for-the-badge&color=00AA68" /> + <img alt="Issues" src="https://img.shields.io/github/issues/iahispano/applio?style=for-the-badge&color=00AA68" /> +</p> + +<p align="center">VITS-based Voice Conversion focused on simplicity, quality and performance</p> + +<p align="center"> + <a href="https://applio.org" target="_blank">🌐 Website</a> + • + <a href="https://docs.applio.org" target="_blank">📚 Documentation</a> + • + <a href="https://discord.gg/iahispano" target="_blank">☎️ Discord</a> +</p> + +<p align="center"> + <a href="https://github.com/IAHispano/Applio-Plugins" target="_blank">🛒 Plugins</a> + • + <a href="https://huggingface.co/IAHispano/Applio/tree/main/Compiled" target="_blank">📦 Compiled</a> + • + <a href="https://applio.org/playground" target="_blank">🎮 Playground</a> + • + <a href="https://colab.research.google.com/github/iahispano/applio/blob/master/assets/Applio.ipynb" target="_blank">🔎 Google Colab (UI)</a> + • + <a href="https://colab.research.google.com/github/iahispano/applio/blob/master/assets/Applio_NoUI.ipynb" target="_blank">🔎 Google Colab (No UI)</a> +</p> + +## Content Table +- [**Installation**](#installation) + - [Windows](#windows) + - [Linux](#linux) + - [Makefile](#makefile) +- [**Usage**](#usage) + - [Windows](#windows-1) + - [Linux](#linux-1) + - [Makefile](#makefile-1) +- [**Repository Enhancements**](#repository-enhancements) +- [**Commercial Usage**](#commercial-usage) +- [**References**](#references) + - [Contributors](#contributors) + +## Installation +Download the latest version from [GitHub Releases](https://github.com/IAHispano/Applio-RVC-Fork/releases) or use the [Compiled Versions](https://huggingface.co/IAHispano/Applio/tree/main/Compiled). + +### Windows +```bash +./run-install.bat +``` + +### Linux +Certain Linux-based operating systems may encounter complications with the installer. In such instances, we suggest installing the `requirements.txt` within a Python environment version 3.9 to 3.11. +```bash +chmod +x run-install.sh +./run-install.sh +``` + +### Makefile +For platforms such as [Paperspace](https://www.paperspace.com/) +``` +make run-install +``` + +## Usage +Visit [Applio Documentation](https://docs.applio.org/) for a detailed UI usage explanation. + +### Windows +```bash +./run-applio.bat +``` + +### Linux +```bash +chmod +x run-applio.sh +./run-applio.sh +``` + +### Makefile +For platforms such as [Paperspace](https://www.paperspace.com/) +``` +make run-applio +``` + +## Repository Enhancements + +This repository has undergone significant enhancements to improve its functionality and maintainability: + +- **Modular Codebase:** Restructured codebase following a modular approach for better organization, readability, and maintenance. +- **Hop Length Implementation:** Implemented hop length, courtesy of [@Mangio621](https://github.com/Mangio621/Mangio-RVC-Fork), boosting efficiency and performance, especially on Crepe (formerly Mangio-Crepe). +- **Translations in 30+ Languages:** Added support for translations in over 30 languages, enhancing accessibility for a global audience. +- **Cross-Platform Compatibility:** Ensured seamless operation across various platforms for a consistent user experience. +- **Optimized Requirements:** Fine-tuned project requirements for enhanced performance and resource efficiency. +- **Streamlined Installation:** Simplified installation process for a user-friendly setup experience. +- **Hybrid F0 Estimation:** Introduced a personalized 'hybrid' F0 estimation method utilizing nanmedian, combining F0 calculations from various methods to achieve optimal results. +- **Easy-to-Use UI:** Implemented a user-friendly interface for intuitive interaction. +- **Optimized Code & Dependencies:** Enhanced code and streamlined dependencies for improved efficiency. +- **Plugin System:** Introduced a plugin system for extending functionality and customization. +- **Overtraining Detector:** Implemented an overtraining detector which halts training once a specified epoch limit is reached, preventing excessive training. +- **Model Search:** Integrated a model search feature directly into the application interface, facilitating easy model discovery. +- **Enhancements in Pretrained Models:** Introduced additional functionalities such as custom pretrained models, allowing users to utilize their preferred pretrained models without requiring RVC1 pretrained models upon installation. +- **Voice Blender:** Developed a voice blender feature that combines two trained models to create a new one, offering versatility in model generation. +- **Accessibility Improvements:** Enhanced accessibility with descriptive tooltips indicating the function of each element in the user interface, making it more user-friendly for all users. +- **New F0 Extraction Methods:** Introduced new F0 extraction methods such as FCPE or Hybrid, expanding options for pitch extraction. +- **Output Format Selection:** Implemented an output format selection feature, allowing users to choose the format in which they want to save their audio files. +- **Hashing System:** Implemented a hashing system where each created model is assigned a unique ID to prevent unauthorized duplication or theft. +- **Model Download System:** Added support for downloading models from various websites such as Google Drive, Yandex, Pixeldrain, Discord, Hugging Face, or Applio.org, enhancing model accessibility. +- **TTS Enhancements:** Improved Text-to-Speech functionality with support for uploading TXT files, increasing flexibility in input methods. +- **Split Audio:** Implemented audio splitting functionality which divides audio into segments for inference, subsequently merging them to create the final audio, resulting in faster processing times and potentially better outcomes. +- **Discord Presence:** Displayed presence on Discord indicating active usage of Applio, with plans to incorporate different statuses based on activities within the application. +- **Flask Integration:** Integration with Flask, initially disabled by default, allows for automatic model downloads from the web by simply clicking the Applio button next to the model download button in the settings tab. +- **Support Tab:** Added a support tab enabling users to record their screen to demonstrate encountered issues, facilitating faster issue resolution by allowing users to create GitHub issues for review and troubleshooting. + +These enhancements contribute to a more robust and scalable codebase, making the repository more accessible for contributors and users alike. + +## Commercial Usage +We follow the [MIT license](./LICENSE) for this project. If you intend to use Applio for commercial purposes, please contact us first to ensure the ethical use of the tool. You can reach us at support@applio.org. Additionally, we would appreciate it if you consider making a donation to support the ongoing development and maintenance of Applio. +Thank you for your cooperation and support! + +## References +- [gradio-screen-recorder](https://huggingface.co/spaces/gstaff/gradio-screen-recorder) by gstaff +- [RVC_CLI](https://github.com/blaise-tk/RVC_CLI) by blaise-tk + +### Contributors +<a href="https://github.com/IAHispano/Applio/graphs/contributors" target="_blank"> + <img src="https://contrib.rocks/image?repo=IAHispano/Applio" /> +</a> diff --git a/app.py b/app.py index fa6a8fb2ead56e63d0bd26be49a4669baa390df8..d4ad54404c3cf84f9b32d6159c81a677a22344d1 100644 --- a/app.py +++ b/app.py @@ -1,3154 +1,65 @@ -import os, sys -os.system("pip install pyworld") # ==0.3.3 +import gradio as gr +import sys +import os +import logging now_dir = os.getcwd() sys.path.append(now_dir) -os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' -os.environ["OPENBLAS_NUM_THREADS"] = "1" -os.environ["no_proxy"] = "localhost, 127.0.0.1, ::1" - -# Download models -shell_script = './tools/dlmodels.sh' -os.system(f'chmod +x {shell_script}') -os.system('apt install git-lfs') -os.system('git lfs install') -os.system('apt-get -y install aria2') -os.system('aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt -d . -o hubert_base.pt') -try: - return_code = os.system(shell_script) - if return_code == 0: - print("Shell script executed successfully.") - else: - print(f"Shell script failed with return code {return_code}") -except Exception as e: - print(f"An error occurred: {e}") - - -import logging -import shutil -import threading -import lib.globals.globals as rvc_globals -from LazyImport import lazyload -import mdx -from mdx_processing_script import get_model_list,id_to_ptm,prepare_mdx,run_mdx -math = lazyload('math') -import traceback -import warnings -tensorlowest = lazyload('tensorlowest') -from random import shuffle -from subprocess import Popen -from time import sleep -import json -import pathlib - -import fairseq -logging.getLogger("faiss").setLevel(logging.WARNING) -import faiss -gr = lazyload("gradio") -np = lazyload("numpy") -torch = lazyload('torch') -re = lazyload('regex') -SF = lazyload("soundfile") -SFWrite = SF.write -from dotenv import load_dotenv -from sklearn.cluster import MiniBatchKMeans -import datetime - - -from glob import glob1 -import signal -from signal import SIGTERM -import librosa - -from configs.config import Config -from i18n import I18nAuto -from infer.lib.train.process_ckpt import ( - change_info, - extract_small_model, - merge, - show_info, -) -#from infer.modules.uvr5.modules import uvr -from infer.modules.vc.modules import VC -from infer.modules.vc.utils import * -from infer.modules.vc.pipeline import Pipeline -import lib.globals.globals as rvc_globals -math = lazyload('math') -ffmpeg = lazyload('ffmpeg') -import nltk -nltk.download('punkt', quiet=True) -from nltk.tokenize import sent_tokenize -from bark import SAMPLE_RATE - -import easy_infer -import audioEffects -from infer.lib.csvutil import CSVutil - -from lib.infer_pack.models import ( - SynthesizerTrnMs256NSFsid, - SynthesizerTrnMs256NSFsid_nono, - SynthesizerTrnMs768NSFsid, - SynthesizerTrnMs768NSFsid_nono, -) -from lib.infer_pack.models_onnx import SynthesizerTrnMsNSFsidM -from infer_uvr5 import _audio_pre_, _audio_pre_new -from MDXNet import MDXNetDereverb -from infer.lib.audio import load_audio - - -from sklearn.cluster import MiniBatchKMeans - -import time -import csv - -from shlex import quote as SQuote - - - -RQuote = lambda val: SQuote(str(val)) +# Tabs +from tabs.inference.inference import inference_tab +from tabs.download.download import download_tab +from tabs.tts.tts import tts_tab -tmp = os.path.join(now_dir, "TEMP") -runtime_dir = os.path.join(now_dir, "runtime/Lib/site-packages") -directories = ['logs', 'audios', 'datasets', 'weights', 'audio-others' , 'audio-outputs'] +# Assets +import assets.themes.loadThemes as loadThemes +from assets.i18n.i18n import I18nAuto +import assets.installation_checker as installation_checker +from assets.discord_presence import RPCManager +from assets.flask.server import start_flask, load_config_flask +from core import run_prerequisites_script +from delete_models import start_infinite_loop -shutil.rmtree(tmp, ignore_errors=True) -shutil.rmtree("%s/runtime/Lib/site-packages/infer_pack" % (now_dir), ignore_errors=True) -shutil.rmtree("%s/runtime/Lib/site-packages/uvr5_pack" % (now_dir), ignore_errors=True) - -os.makedirs(tmp, exist_ok=True) -for folder in directories: - os.makedirs(os.path.join(now_dir, folder), exist_ok=True) - - -os.makedirs(tmp, exist_ok=True) -os.makedirs(os.path.join(now_dir, "logs"), exist_ok=True) -os.makedirs(os.path.join(now_dir, "assets/weights"), exist_ok=True) -os.environ["TEMP"] = tmp -warnings.filterwarnings("ignore") -torch.manual_seed(114514) -logging.getLogger("numba").setLevel(logging.WARNING) - -logger = logging.getLogger(__name__) - - -if not os.path.isdir("csvdb/"): - os.makedirs("csvdb") - frmnt, stp = open("csvdb/formanting.csv", "w"), open("csvdb/stop.csv", "w") - frmnt.close() - stp.close() - -global DoFormant, Quefrency, Timbre - -try: - DoFormant, Quefrency, Timbre = CSVutil("csvdb/formanting.csv", "r", "formanting") - DoFormant = ( - lambda DoFormant: True - if DoFormant.lower() == "true" - else (False if DoFormant.lower() == "false" else DoFormant) - )(DoFormant) -except (ValueError, TypeError, IndexError): - DoFormant, Quefrency, Timbre = False, 1.0, 1.0 - CSVutil("csvdb/formanting.csv", "w+", "formanting", DoFormant, Quefrency, Timbre) - -load_dotenv() -config = Config() -vc = VC(config) - -if config.dml == True: - - def forward_dml(ctx, x, scale): - ctx.scale = scale - res = x.clone().detach() - return res - - fairseq.modules.grad_multiply.GradMultiply.forward = forward_dml +run_prerequisites_script("False", "True", "True", "True") +start_infinite_loop() i18n = I18nAuto() -i18n.print() -# 判断是否有能用来训练和加速推理的N卡 -ngpu = torch.cuda.device_count() -gpu_infos = [] -mem = [] -if_gpu_ok = False - -isinterrupted = 0 - +installation_checker.check_installation() +logging.getLogger("uvicorn").disabled = True +logging.getLogger("fairseq").disabled = True -if torch.cuda.is_available() or ngpu != 0: - for i in range(ngpu): - gpu_name = torch.cuda.get_device_name(i) - if any( - value in gpu_name.upper() - for value in [ - "10", - "16", - "20", - "30", - "40", - "A2", - "A3", - "A4", - "P4", - "A50", - "500", - "A60", - "70", - "80", - "90", - "M4", - "T4", - "TITAN", - ] - ): - # A10#A100#V100#A40#P40#M40#K80#A4500 - if_gpu_ok = True # 至少有一张能用的N卡 - gpu_infos.append("%s\t%s" % (i, gpu_name)) - mem.append( - int( - torch.cuda.get_device_properties(i).total_memory - / 1024 - / 1024 - / 1024 - + 0.4 - ) - ) -if if_gpu_ok and len(gpu_infos) > 0: - gpu_info = "\n".join(gpu_infos) - default_batch_size = min(mem) // 2 +my_applio = loadThemes.load_json() +if my_applio: + pass else: - gpu_info = "Unfortunately, there is no compatible GPU available to support your training." - default_batch_size = 1 -gpus = "-".join([i[0] for i in gpu_infos]) - -class ToolButton(gr.Button, gr.components.FormComponent): - """Small button with single emoji as text, fits inside gradio forms""" - - def __init__(self, **kwargs): - super().__init__(variant="tool", **kwargs) - - def get_block_name(self): - return "button" - - -hubert_model = None -weight_root = os.getenv("weight_root") -weight_uvr5_root = os.getenv("weight_uvr5_root") -index_root = os.getenv("index_root") -datasets_root = "datasets" -fshift_root = "formantshiftcfg" -audio_root = "audios" -audio_others_root = "audio-others" - -sup_audioext = {'wav', 'mp3', 'flac', 'ogg', 'opus', - 'm4a', 'mp4', 'aac', 'alac', 'wma', - 'aiff', 'webm', 'ac3'} - -names = [os.path.join(root, file) - for root, _, files in os.walk(weight_root) - for file in files - if file.endswith((".pth", ".onnx"))] - -indexes_list = [os.path.join(root, name) - for root, _, files in os.walk(index_root, topdown=False) - for name in files - if name.endswith(".index") and "trained" not in name] - -audio_paths = [os.path.join(root, name) - for root, _, files in os.walk(audio_root, topdown=False) - for name in files - if name.endswith(tuple(sup_audioext))] - -audio_others_paths = [os.path.join(root, name) - for root, _, files in os.walk(audio_others_root, topdown=False) - for name in files - if name.endswith(tuple(sup_audioext))] - -uvr5_names = [name.replace(".pth", "") - for name in os.listdir(weight_uvr5_root) - if name.endswith(".pth") or "onnx" in name] - - -check_for_name = lambda: sorted(names)[0] if names else '' - -datasets=[] -for foldername in os.listdir(os.path.join(now_dir, datasets_root)): - if "." not in foldername: - datasets.append(os.path.join(easy_infer.find_folder_parent(".","pretrained"),"datasets",foldername)) - -def get_dataset(): - if len(datasets) > 0: - return sorted(datasets)[0] - else: - return '' - -def update_model_choices(select_value): - model_ids = get_model_list() - model_ids_list = list(model_ids) - if select_value == "VR": - return {"choices": uvr5_names, "__type__": "update"} - elif select_value == "MDX": - return {"choices": model_ids_list, "__type__": "update"} - -set_bark_voice = easy_infer.get_bark_voice() -set_edge_voice = easy_infer.get_edge_voice() - -def update_tts_methods_voice(select_value): - #["Edge-tts", "RVG-tts", "Bark-tts"] - if select_value == "Edge-tts": - return {"choices": set_edge_voice, "value": "", "__type__": "update"} - elif select_value == "Bark-tts": - return {"choices": set_bark_voice, "value": "", "__type__": "update"} - - -def update_dataset_list(name): - new_datasets = [] - for foldername in os.listdir(os.path.join(now_dir, datasets_root)): - if "." not in foldername: - new_datasets.append(os.path.join(easy_infer.find_folder_parent(".","pretrained"),"datasets",foldername)) - return gr.Dropdown.update(choices=new_datasets) - -def get_indexes(): - indexes_list = [ - os.path.join(dirpath, filename) - for dirpath, _, filenames in os.walk(index_root) - for filename in filenames - if filename.endswith(".index") and "trained" not in filename - ] - - return indexes_list if indexes_list else '' - -def get_fshift_presets(): - fshift_presets_list = [ - os.path.join(dirpath, filename) - for dirpath, _, filenames in os.walk(fshift_root) - for filename in filenames - if filename.endswith(".txt") - ] - - return fshift_presets_list if fshift_presets_list else '' - -import soundfile as sf - -def generate_output_path(output_folder, base_name, extension): - # Generar un nombre único para el archivo de salida - index = 1 - while True: - output_path = os.path.join(output_folder, f"{base_name}_{index}.{extension}") - if not os.path.exists(output_path): - return output_path - index += 1 - -def combine_and_save_audios(audio1_path, audio2_path, output_path, volume_factor_audio1, volume_factor_audio2): - audio1, sr1 = librosa.load(audio1_path, sr=None) - audio2, sr2 = librosa.load(audio2_path, sr=None) - - # Alinear las tasas de muestreo - if sr1 != sr2: - if sr1 > sr2: - audio2 = librosa.resample(audio2, orig_sr=sr2, target_sr=sr1) - else: - audio1 = librosa.resample(audio1, orig_sr=sr1, target_sr=sr2) - - # Ajustar los audios para que tengan la misma longitud - target_length = min(len(audio1), len(audio2)) - audio1 = librosa.util.fix_length(audio1, target_length) - audio2 = librosa.util.fix_length(audio2, target_length) - - # Ajustar el volumen de los audios multiplicando por el factor de ganancia - if volume_factor_audio1 != 1.0: - audio1 *= volume_factor_audio1 - if volume_factor_audio2 != 1.0: - audio2 *= volume_factor_audio2 - - # Combinar los audios - combined_audio = audio1 + audio2 - - sf.write(output_path, combined_audio, sr1) - -# Resto de tu código... - -# Define función de conversión llamada por el botón -def audio_combined(audio1_path, audio2_path, volume_factor_audio1=1.0, volume_factor_audio2=1.0, reverb_enabled=False, compressor_enabled=False, noise_gate_enabled=False): - output_folder = os.path.join(now_dir, "audio-outputs") - os.makedirs(output_folder, exist_ok=True) - - # Generar nombres únicos para los archivos de salida - base_name = "combined_audio" - extension = "wav" - output_path = generate_output_path(output_folder, base_name, extension) - print(reverb_enabled) - print(compressor_enabled) - print(noise_gate_enabled) - - if reverb_enabled or compressor_enabled or noise_gate_enabled: - # Procesa el primer audio con los efectos habilitados - base_name = "effect_audio" - output_path = generate_output_path(output_folder, base_name, extension) - processed_audio_path = audioEffects.process_audio(audio2_path, output_path, reverb_enabled, compressor_enabled, noise_gate_enabled) - base_name = "combined_audio" - output_path = generate_output_path(output_folder, base_name, extension) - # Combina el audio procesado con el segundo audio usando audio_combined - combine_and_save_audios(audio1_path, processed_audio_path, output_path, volume_factor_audio1, volume_factor_audio2) - - return i18n("Conversion complete!"), output_path - else: - base_name = "combined_audio" - output_path = generate_output_path(output_folder, base_name, extension) - # No hay efectos habilitados, combina directamente los audios sin procesar - combine_and_save_audios(audio1_path, audio2_path, output_path, volume_factor_audio1, volume_factor_audio2) - - return i18n("Conversion complete!"), output_path - - - - -def uvr(model_name, inp_root, save_root_vocal, paths, save_root_ins, agg, format0,architecture): - infos = [] - if architecture == "VR": - try: - inp_root, save_root_vocal, save_root_ins = [x.strip(" ").strip('"').strip("\n").strip('"').strip(" ") for x in [inp_root, save_root_vocal, save_root_ins]] - usable_files = [os.path.join(inp_root, file) - for file in os.listdir(inp_root) - if file.endswith(tuple(sup_audioext))] - - - pre_fun = MDXNetDereverb(15) if model_name == "onnx_dereverb_By_FoxJoy" else (_audio_pre_ if "DeEcho" not in model_name else _audio_pre_new)( - agg=int(agg), - model_path=os.path.join(weight_uvr5_root, model_name + ".pth"), - device=config.device, - is_half=config.is_half, - ) - - try: - if paths != None: - paths = [path.name for path in paths] - else: - paths = usable_files - - except: - traceback.print_exc() - paths = usable_files - print(paths) - for path in paths: - inp_path = os.path.join(inp_root, path) - need_reformat, done = 1, 0 - - try: - info = ffmpeg.probe(inp_path, cmd="ffprobe") - if info["streams"][0]["channels"] == 2 and info["streams"][0]["sample_rate"] == "44100": - need_reformat = 0 - pre_fun._path_audio_(inp_path, save_root_ins, save_root_vocal, format0) - done = 1 - except: - traceback.print_exc() - - if need_reformat: - tmp_path = f"{tmp}/{os.path.basename(RQuote(inp_path))}.reformatted.wav" - os.system(f"ffmpeg -i {RQuote(inp_path)} -vn -acodec pcm_s16le -ac 2 -ar 44100 {RQuote(tmp_path)} -y") - inp_path = tmp_path - - try: - if not done: - pre_fun._path_audio_(inp_path, save_root_ins, save_root_vocal, format0) - infos.append(f"{os.path.basename(inp_path)}->Success") - yield "\n".join(infos) - except: - infos.append(f"{os.path.basename(inp_path)}->{traceback.format_exc()}") - yield "\n".join(infos) - except: - infos.append(traceback.format_exc()) - yield "\n".join(infos) - finally: - try: - if model_name == "onnx_dereverb_By_FoxJoy": - del pre_fun.pred.model - del pre_fun.pred.model_ - else: - del pre_fun.model - - del pre_fun - except: traceback.print_exc() + my_applio = "ParityError/Interstellar" - print("clean_empty_cache") - - if torch.cuda.is_available(): torch.cuda.empty_cache() - - yield "\n".join(infos) - elif architecture == "MDX": - try: - infos.append(i18n("Starting audio conversion... (This might take a moment)")) - yield "\n".join(infos) - inp_root, save_root_vocal, save_root_ins = [x.strip(" ").strip('"').strip("\n").strip('"').strip(" ") for x in [inp_root, save_root_vocal, save_root_ins]] - - usable_files = [os.path.join(inp_root, file) - for file in os.listdir(inp_root) - if file.endswith(tuple(sup_audioext))] - try: - if paths != None: - paths = [path.name for path in paths] - else: - paths = usable_files - - except: - traceback.print_exc() - paths = usable_files - print(paths) - invert=True - denoise=True - use_custom_parameter=True - dim_f=3072 - dim_t=256 - n_fft=7680 - use_custom_compensation=True - compensation=1.025 - suffix = "Vocals_custom" #@param ["Vocals", "Drums", "Bass", "Other"]{allow-input: true} - suffix_invert = "Instrumental_custom" #@param ["Instrumental", "Drumless", "Bassless", "Instruments"]{allow-input: true} - print_settings = True # @param{type:"boolean"} - onnx = id_to_ptm(model_name) - compensation = compensation if use_custom_compensation or use_custom_parameter else None - mdx_model = prepare_mdx(onnx,use_custom_parameter, dim_f, dim_t, n_fft, compensation=compensation) - - - for path in paths: - #inp_path = os.path.join(inp_root, path) - suffix_naming = suffix if use_custom_parameter else None - diff_suffix_naming = suffix_invert if use_custom_parameter else None - run_mdx(onnx, mdx_model, path, format0, diff=invert,suffix=suffix_naming,diff_suffix=diff_suffix_naming,denoise=denoise) - - if print_settings: - print() - print('[MDX-Net_Colab settings used]') - print(f'Model used: {onnx}') - print(f'Model MD5: {mdx.MDX.get_hash(onnx)}') - print(f'Model parameters:') - print(f' -dim_f: {mdx_model.dim_f}') - print(f' -dim_t: {mdx_model.dim_t}') - print(f' -n_fft: {mdx_model.n_fft}') - print(f' -compensation: {mdx_model.compensation}') - print() - print('[Input file]') - print('filename(s): ') - for filename in paths: - print(f' -{filename}') - infos.append(f"{os.path.basename(filename)}->Success") - yield "\n".join(infos) - except: - infos.append(traceback.format_exc()) - yield "\n".join(infos) - finally: - try: - del mdx_model - except: traceback.print_exc() - - print("clean_empty_cache") - - if torch.cuda.is_available(): torch.cuda.empty_cache() - - - - - -def change_choices(): - names = [os.path.join(root, file) - for root, _, files in os.walk(weight_root) - for file in files - if file.endswith((".pth", ".onnx"))] - indexes_list = [os.path.join(root, name) for root, _, files in os.walk(index_root, topdown=False) for name in files if name.endswith(".index") and "trained" not in name] - audio_paths = [os.path.join(audio_root, file) for file in os.listdir(os.path.join(now_dir, "audios"))] - - - return ( - {"choices": sorted(names), "__type__": "update"}, - {"choices": sorted(indexes_list), "__type__": "update"}, - {"choices": sorted(audio_paths), "__type__": "update"} - ) -def change_choices2(): - names = [os.path.join(root, file) - for root, _, files in os.walk(weight_root) - for file in files - if file.endswith((".pth", ".onnx"))] - indexes_list = [os.path.join(root, name) for root, _, files in os.walk(index_root, topdown=False) for name in files if name.endswith(".index") and "trained" not in name] - - - return ( - {"choices": sorted(names), "__type__": "update"}, - {"choices": sorted(indexes_list), "__type__": "update"}, - ) -def change_choices3(): - - audio_paths = [os.path.join(audio_root, file) for file in os.listdir(os.path.join(now_dir, "audios"))] - audio_others_paths = [os.path.join(audio_others_root, file) for file in os.listdir(os.path.join(now_dir, "audio-others"))] - - - return ( - {"choices": sorted(audio_others_paths), "__type__": "update"}, - {"choices": sorted(audio_paths), "__type__": "update"} - ) - -def clean(): - return {"value": "", "__type__": "update"} -def export_onnx(): - from infer.modules.onnx.export import export_onnx as eo - - eo() - -sr_dict = { - "32k": 32000, - "40k": 40000, - "48k": 48000, -} - - -def if_done(done, p): - while 1: - if p.poll() is None: - sleep(0.5) - else: - break - done[0] = True - - -def if_done_multi(done, ps): - while 1: - # poll==None代表进程未结束 - # 只要有一个进程未结束都不停 - flag = 1 - for p in ps: - if p.poll() is None: - flag = 0 - sleep(0.5) - break - if flag == 1: - break - done[0] = True - -def formant_enabled( - cbox, qfrency, tmbre, frmntapply, formantpreset, formant_refresh_button -): - if cbox: - DoFormant = True - CSVutil("csvdb/formanting.csv", "w+", "formanting", DoFormant, qfrency, tmbre) - - # print(f"is checked? - {cbox}\ngot {DoFormant}") - - return ( - {"value": True, "__type__": "update"}, - {"visible": True, "__type__": "update"}, - {"visible": True, "__type__": "update"}, - {"visible": True, "__type__": "update"}, - {"visible": True, "__type__": "update"}, - {"visible": True, "__type__": "update"}, - ) - - else: - DoFormant = False - CSVutil("csvdb/formanting.csv", "w+", "formanting", DoFormant, qfrency, tmbre) - - # print(f"is checked? - {cbox}\ngot {DoFormant}") - return ( - {"value": False, "__type__": "update"}, - {"visible": False, "__type__": "update"}, - {"visible": False, "__type__": "update"}, - {"visible": False, "__type__": "update"}, - {"visible": False, "__type__": "update"}, - {"visible": False, "__type__": "update"}, - {"visible": False, "__type__": "update"}, - ) - - -def formant_apply(qfrency, tmbre): - Quefrency = qfrency - Timbre = tmbre - DoFormant = True - CSVutil("csvdb/formanting.csv", "w+", "formanting", DoFormant, qfrency, tmbre) - - return ( - {"value": Quefrency, "__type__": "update"}, - {"value": Timbre, "__type__": "update"}, - ) - -def update_fshift_presets(preset, qfrency, tmbre): - - if preset: - with open(preset, 'r') as p: - content = p.readlines() - qfrency, tmbre = content[0].strip(), content[1] - - formant_apply(qfrency, tmbre) - else: - qfrency, tmbre = preset_apply(preset, qfrency, tmbre) - - return ( - {"choices": get_fshift_presets(), "__type__": "update"}, - {"value": qfrency, "__type__": "update"}, - {"value": tmbre, "__type__": "update"}, - ) - -def preprocess_dataset(trainset_dir, exp_dir, sr, n_p): - sr = sr_dict[sr] - os.makedirs("%s/logs/%s" % (now_dir, exp_dir), exist_ok=True) - f = open("%s/logs/%s/preprocess.log" % (now_dir, exp_dir), "w") - f.close() - per = 3.0 if config.is_half else 3.7 - cmd = '"%s" infer/modules/train/preprocess.py "%s" %s %s "%s/logs/%s" %s %.1f' % ( - config.python_cmd, - trainset_dir, - sr, - n_p, - now_dir, - exp_dir, - config.noparallel, - per, - ) - logger.info(cmd) - p = Popen(cmd, shell=True) # , stdin=PIPE, stdout=PIPE,stderr=PIPE,cwd=now_dir - ###煞笔gr, popen read都非得全跑完了再一次性读取, 不用gr就正常读一句输出一句;只能额外弄出一个文本流定时读 - done = [False] - threading.Thread( - target=if_done, - args=( - done, - p, - ), - ).start() - while 1: - with open("%s/logs/%s/preprocess.log" % (now_dir, exp_dir), "r") as f: - yield (f.read()) - sleep(1) - if done[0]: - break - with open("%s/logs/%s/preprocess.log" % (now_dir, exp_dir), "r") as f: - log = f.read() - logger.info(log) - yield log - - -def extract_f0_feature(gpus, n_p, f0method, if_f0, exp_dir, version19, echl, gpus_rmvpe): - gpus = gpus.split("-") - os.makedirs("%s/logs/%s" % (now_dir, exp_dir), exist_ok=True) - f = open("%s/logs/%s/extract_f0_feature.log" % (now_dir, exp_dir), "w") - f.close() - if if_f0: - if f0method != "rmvpe_gpu": - cmd = ( - '"%s" infer/modules/train/extract/extract_f0_print.py "%s/logs/%s" %s %s' - % ( - config.python_cmd, - now_dir, - exp_dir, - n_p, - f0method, - echl, - ) - ) - logger.info(cmd) - p = Popen( - cmd, shell=True, cwd=now_dir - ) # , stdin=PIPE, stdout=PIPE,stderr=PIPE - ###煞笔gr, popen read都非得全跑完了再一次性读取, 不用gr就正常读一句输出一句;只能额外弄出一个文本流定时读 - done = [False] - threading.Thread( - target=if_done, - args=( - done, - p, - ), - ).start() - else: - if gpus_rmvpe != "-": - gpus_rmvpe = gpus_rmvpe.split("-") - leng = len(gpus_rmvpe) - ps = [] - for idx, n_g in enumerate(gpus_rmvpe): - cmd = ( - '"%s" infer/modules/train/extract/extract_f0_rmvpe.py %s %s %s "%s/logs/%s" %s ' - % ( - config.python_cmd, - leng, - idx, - n_g, - now_dir, - exp_dir, - config.is_half, - ) - ) - logger.info(cmd) - p = Popen( - cmd, shell=True, cwd=now_dir - ) # , shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, cwd=now_dir - ps.append(p) - ###煞笔gr, popen read都非得全跑完了再一次性读取, 不用gr就正常读一句输出一句;只能额外弄出一个文本流定时读 - done = [False] - threading.Thread( - target=if_done_multi, # - args=( - done, - ps, - ), - ).start() - else: - cmd = ( - config.python_cmd - + ' infer/modules/train/extract/extract_f0_rmvpe_dml.py "%s/logs/%s" ' - % ( - now_dir, - exp_dir, - ) - ) - logger.info(cmd) - p = Popen( - cmd, shell=True, cwd=now_dir - ) # , shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, cwd=now_dir - p.wait() - done = [True] - while 1: - with open( - "%s/logs/%s/extract_f0_feature.log" % (now_dir, exp_dir), "r" - ) as f: - yield (f.read()) - sleep(1) - if done[0]: - break - with open("%s/logs/%s/extract_f0_feature.log" % (now_dir, exp_dir), "r") as f: - log = f.read() - logger.info(log) - yield log - ####对不同part分别开多进程 - """ - n_part=int(sys.argv[1]) - i_part=int(sys.argv[2]) - i_gpu=sys.argv[3] - exp_dir=sys.argv[4] - os.environ["CUDA_VISIBLE_DEVICES"]=str(i_gpu) - """ - leng = len(gpus) - ps = [] - for idx, n_g in enumerate(gpus): - cmd = ( - '"%s" infer/modules/train/extract_feature_print.py %s %s %s %s "%s/logs/%s" %s' - % ( - config.python_cmd, - config.device, - leng, - idx, - n_g, - now_dir, - exp_dir, - version19, - ) +with gr.Blocks(theme=my_applio, title="Applio") as Applio: + gr.Markdown("# Applio") + gr.Markdown("### From the first Applio to the last") + gr.Markdown( + i18n( + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience." ) - logger.info(cmd) - p = Popen( - cmd, shell=True, cwd=now_dir - ) # , shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, cwd=now_dir - ps.append(p) - ###煞笔gr, popen read都非得全跑完了再一次性读取, 不用gr就正常读一句输出一句;只能额外弄出一个文本流定时读 - done = [False] - threading.Thread( - target=if_done_multi, - args=( - done, - ps, - ), - ).start() - while 1: - with open("%s/logs/%s/extract_f0_feature.log" % (now_dir, exp_dir), "r") as f: - yield (f.read()) - sleep(1) - if done[0]: - break - with open("%s/logs/%s/extract_f0_feature.log" % (now_dir, exp_dir), "r") as f: - log = f.read() - logger.info(log) - yield log - -def get_pretrained_models(path_str, f0_str, sr2): - if_pretrained_generator_exist = os.access( - "assets/pretrained%s/%sG%s.pth" % (path_str, f0_str, sr2), os.F_OK - ) - if_pretrained_discriminator_exist = os.access( - "assets/pretrained%s/%sD%s.pth" % (path_str, f0_str, sr2), os.F_OK - ) - if not if_pretrained_generator_exist: - logger.warn( - "assets/pretrained%s/%sG%s.pth not exist, will not use pretrained model", - path_str, - f0_str, - sr2, - ) - if not if_pretrained_discriminator_exist: - logger.warn( - "assets/pretrained%s/%sD%s.pth not exist, will not use pretrained model", - path_str, - f0_str, - sr2, - ) - return ( - "assets/pretrained%s/%sG%s.pth" % (path_str, f0_str, sr2) - if if_pretrained_generator_exist - else "", - "assets/pretrained%s/%sD%s.pth" % (path_str, f0_str, sr2) - if if_pretrained_discriminator_exist - else "", - ) - -def change_sr2(sr2, if_f0_3, version19): - path_str = "" if version19 == "v1" else "_v2" - f0_str = "f0" if if_f0_3 else "" - return get_pretrained_models(path_str, f0_str, sr2) - - -def change_version19(sr2, if_f0_3, version19): - path_str = "" if version19 == "v1" else "_v2" - if sr2 == "32k" and version19 == "v1": - sr2 = "40k" - to_return_sr2 = ( - {"choices": ["40k", "48k"], "__type__": "update", "value": sr2} - if version19 == "v1" - else {"choices": ["40k", "48k", "32k"], "__type__": "update", "value": sr2} - ) - f0_str = "f0" if if_f0_3 else "" - return ( - *get_pretrained_models(path_str, f0_str, sr2), - to_return_sr2, - ) - - -def change_f0(if_f0_3, sr2, version19): # f0method8,pretrained_G14,pretrained_D15 - path_str = "" if version19 == "v1" else "_v2" - return ( - {"visible": if_f0_3, "__type__": "update"}, - *get_pretrained_models(path_str, "f0", sr2), - ) - - -global log_interval - -def set_log_interval(exp_dir, batch_size12): - log_interval = 1 - folder_path = os.path.join(exp_dir, "1_16k_wavs") - - if os.path.isdir(folder_path): - wav_files_num = len(glob1(folder_path,"*.wav")) - - if wav_files_num > 0: - log_interval = math.ceil(wav_files_num / batch_size12) - if log_interval > 1: - log_interval += 1 - - return log_interval - -global PID, PROCESS - -def click_train( - exp_dir1, - sr2, - if_f0_3, - spk_id5, - save_epoch10, - total_epoch11, - batch_size12, - if_save_latest13, - pretrained_G14, - pretrained_D15, - gpus16, - if_cache_gpu17, - if_save_every_weights18, - version19, -): - CSVutil("csvdb/stop.csv", "w+", "formanting", False) - # 生成filelist - exp_dir = "%s/logs/%s" % (now_dir, exp_dir1) - os.makedirs(exp_dir, exist_ok=True) - gt_wavs_dir = "%s/0_gt_wavs" % (exp_dir) - feature_dir = ( - "%s/3_feature256" % (exp_dir) - if version19 == "v1" - else "%s/3_feature768" % (exp_dir) ) - if if_f0_3: - f0_dir = "%s/2a_f0" % (exp_dir) - f0nsf_dir = "%s/2b-f0nsf" % (exp_dir) - names = ( - set([name.split(".")[0] for name in os.listdir(gt_wavs_dir)]) - & set([name.split(".")[0] for name in os.listdir(feature_dir)]) - & set([name.split(".")[0] for name in os.listdir(f0_dir)]) - & set([name.split(".")[0] for name in os.listdir(f0nsf_dir)]) - ) - else: - names = set([name.split(".")[0] for name in os.listdir(gt_wavs_dir)]) & set( - [name.split(".")[0] for name in os.listdir(feature_dir)] - ) - opt = [] - for name in names: - if if_f0_3: - opt.append( - "%s/%s.wav|%s/%s.npy|%s/%s.wav.npy|%s/%s.wav.npy|%s" - % ( - gt_wavs_dir.replace("\\", "\\\\"), - name, - feature_dir.replace("\\", "\\\\"), - name, - f0_dir.replace("\\", "\\\\"), - name, - f0nsf_dir.replace("\\", "\\\\"), - name, - spk_id5, - ) - ) - else: - opt.append( - "%s/%s.wav|%s/%s.npy|%s" - % ( - gt_wavs_dir.replace("\\", "\\\\"), - name, - feature_dir.replace("\\", "\\\\"), - name, - spk_id5, - ) - ) - fea_dim = 256 if version19 == "v1" else 768 - if if_f0_3: - for _ in range(2): - opt.append( - "%s/logs/mute/0_gt_wavs/mute%s.wav|%s/logs/mute/3_feature%s/mute.npy|%s/logs/mute/2a_f0/mute.wav.npy|%s/logs/mute/2b-f0nsf/mute.wav.npy|%s" - % (now_dir, sr2, now_dir, fea_dim, now_dir, now_dir, spk_id5) - ) - else: - for _ in range(2): - opt.append( - "%s/logs/mute/0_gt_wavs/mute%s.wav|%s/logs/mute/3_feature%s/mute.npy|%s" - % (now_dir, sr2, now_dir, fea_dim, spk_id5) - ) - shuffle(opt) - with open("%s/filelist.txt" % exp_dir, "w") as f: - f.write("\n".join(opt)) - logger.debug("Write filelist done") - # 生成config#无需生成config - # cmd = python_cmd + " train_nsf_sim_cache_sid_load_pretrain.py -e mi-test -sr 40k -f0 1 -bs 4 -g 0 -te 10 -se 5 -pg pretrained/f0G40k.pth -pd pretrained/f0D40k.pth -l 1 -c 0" - logger.info("Use gpus: %s", str(gpus16)) - if pretrained_G14 == "": - logger.info("No pretrained Generator") - if pretrained_D15 == "": - logger.info("No pretrained Discriminator") - if version19 == "v1" or sr2 == "40k": - config_path = "v1/%s.json" % sr2 - else: - config_path = "v2/%s.json" % sr2 - config_save_path = os.path.join(exp_dir, "config.json") - if not pathlib.Path(config_save_path).exists(): - with open(config_save_path, "w", encoding="utf-8") as f: - json.dump( - config.json_config[config_path], - f, - ensure_ascii=False, - indent=4, - sort_keys=True, - ) - f.write("\n") - if gpus16: - cmd = ( - '"%s" infer/modules/train/train.py -e "%s" -sr %s -f0 %s -bs %s -g %s -te %s -se %s %s %s -l %s -c %s -sw %s -v %s' - % ( - config.python_cmd, - exp_dir1, - sr2, - 1 if if_f0_3 else 0, - batch_size12, - gpus16, - total_epoch11, - save_epoch10, - "-pg %s" % pretrained_G14 if pretrained_G14 != "" else "", - "-pd %s" % pretrained_D15 if pretrained_D15 != "" else "", - 1 if if_save_latest13 == True else 0, - 1 if if_cache_gpu17 == True else 0, - 1 if if_save_every_weights18 == True else 0, - version19, - ) + gr.Markdown( + i18n( + "[Support](https://discord.gg/IAHispano) — [Discord Bot](https://discord.com/oauth2/authorize?client_id=1144714449563955302&permissions=1376674695271&scope=bot%20applications.commands) — [Find Voices](https://applio.org/models) — [GitHub](https://github.com/IAHispano/Applio)" ) - else: - cmd = ( - '"%s" infer/modules/train/train.py -e "%s" -sr %s -f0 %s -bs %s -te %s -se %s %s %s -l %s -c %s -sw %s -v %s' - % ( - config.python_cmd, - exp_dir1, - sr2, - 1 if if_f0_3 else 0, - batch_size12, - total_epoch11, - save_epoch10, - "-pg %s" % pretrained_G14 if pretrained_G14 != "" else "", - "-pd %s" % pretrained_D15 if pretrained_D15 != "" else "", - 1 if if_save_latest13 == True else 0, - 1 if if_cache_gpu17 == True else 0, - 1 if if_save_every_weights18 == True else 0, - version19, - ) - ) - logger.info(cmd) - global p - p = Popen(cmd, shell=True, cwd=now_dir) - global PID - PID = p.pid - - p.wait() - - return i18n("Training is done, check train.log"), {"visible": False, "__type__": "update"}, {"visible": True, "__type__": "update"} - - -def train_index(exp_dir1, version19): - # exp_dir = "%s/logs/%s" % (now_dir, exp_dir1) - exp_dir = "logs/%s" % (exp_dir1) - os.makedirs(exp_dir, exist_ok=True) - feature_dir = ( - "%s/3_feature256" % (exp_dir) - if version19 == "v1" - else "%s/3_feature768" % (exp_dir) ) - if not os.path.exists(feature_dir): - return "请先进行特征提取!" - listdir_res = list(os.listdir(feature_dir)) - if len(listdir_res) == 0: - return "请先进行特征提取!" - infos = [] - npys = [] - for name in sorted(listdir_res): - phone = np.load("%s/%s" % (feature_dir, name)) - npys.append(phone) - big_npy = np.concatenate(npys, 0) - big_npy_idx = np.arange(big_npy.shape[0]) - np.random.shuffle(big_npy_idx) - big_npy = big_npy[big_npy_idx] - if big_npy.shape[0] > 2e5: - infos.append("Trying doing kmeans %s shape to 10k centers." % big_npy.shape[0]) - yield "\n".join(infos) - try: - big_npy = ( - MiniBatchKMeans( - n_clusters=10000, - verbose=True, - batch_size=256 * config.n_cpu, - compute_labels=False, - init="random", - ) - .fit(big_npy) - .cluster_centers_ - ) - except: - info = traceback.format_exc() - logger.info(info) - infos.append(info) - yield "\n".join(infos) + with gr.Tab(i18n("Inference")): + inference_tab() - np.save("%s/total_fea.npy" % exp_dir, big_npy) - n_ivf = min(int(16 * np.sqrt(big_npy.shape[0])), big_npy.shape[0] // 39) - infos.append("%s,%s" % (big_npy.shape, n_ivf)) - yield "\n".join(infos) - index = faiss.index_factory(256 if version19 == "v1" else 768, "IVF%s,Flat" % n_ivf) - # index = faiss.index_factory(256if version19=="v1"else 768, "IVF%s,PQ128x4fs,RFlat"%n_ivf) - infos.append("training") - yield "\n".join(infos) - index_ivf = faiss.extract_index_ivf(index) # - index_ivf.nprobe = 1 - index.train(big_npy) - faiss.write_index( - index, - "%s/trained_IVF%s_Flat_nprobe_%s_%s_%s.index" - % (exp_dir, n_ivf, index_ivf.nprobe, exp_dir1, version19), - ) - - infos.append("adding") - yield "\n".join(infos) - batch_size_add = 8192 - for i in range(0, big_npy.shape[0], batch_size_add): - index.add(big_npy[i : i + batch_size_add]) - faiss.write_index( - index, - "%s/added_IVF%s_Flat_nprobe_%s_%s_%s.index" - % (exp_dir, n_ivf, index_ivf.nprobe, exp_dir1, version19), - ) - infos.append( - "Successful Index Construction,added_IVF%s_Flat_nprobe_%s_%s_%s.index" - % (n_ivf, index_ivf.nprobe, exp_dir1, version19) - ) - # faiss.write_index(index, '%s/added_IVF%s_Flat_FastScan_%s.index'%(exp_dir,n_ivf,version19)) - # infos.append("成功构建索引,added_IVF%s_Flat_FastScan_%s.index"%(n_ivf,version19)) - yield "\n".join(infos) + with gr.Tab(i18n("TTS")): + tts_tab() -def change_info_(ckpt_path): - if not os.path.exists(ckpt_path.replace(os.path.basename(ckpt_path), "train.log")): - return {"__type__": "update"}, {"__type__": "update"}, {"__type__": "update"} - try: - with open( - ckpt_path.replace(os.path.basename(ckpt_path), "train.log"), "r" - ) as f: - info = eval(f.read().strip("\n").split("\n")[0].split("\t")[-1]) - sr, f0 = info["sample_rate"], info["if_f0"] - version = "v2" if ("version" in info and info["version"] == "v2") else "v1" - return sr, str(f0), version - except: - traceback.print_exc() - return {"__type__": "update"}, {"__type__": "update"}, {"__type__": "update"} + with gr.Tab(i18n("Download")): + download_tab() -F0GPUVisible = config.dml == False +def launch_gradio(): + Applio.launch() -def change_f0_method(f0method8): - if f0method8 == "rmvpe_gpu": - visible = F0GPUVisible - else: - visible = False - return {"visible": visible, "__type__": "update"} - - - -def export_onnx(model_path, exported_path): - device = torch.device("cpu") - checkpoint = torch.load(model_path, map_location=device) - vec_channels = 256 if checkpoint.get("version", "v1") == "v1" else 768 - - test_inputs = { - "phone": torch.rand(1, 200, vec_channels), - "phone_lengths": torch.LongTensor([200]), - "pitch": torch.randint(5, 255, (1, 200)), - "pitchf": torch.rand(1, 200), - "ds": torch.zeros(1).long(), - "rnd": torch.rand(1, 192, 200) - } - - checkpoint["config"][-3] = checkpoint["weight"]["emb_g.weight"].shape[0] - net_g = SynthesizerTrnMsNSFsidM(*checkpoint["config"], is_half=False, version=checkpoint.get("version", "v1")) - - net_g.load_state_dict(checkpoint["weight"], strict=False) - net_g = net_g.to(device) - - dynamic_axes = {"phone": [1], "pitch": [1], "pitchf": [1], "rnd": [2]} - - torch.onnx.export( - net_g, - tuple(value.to(device) for value in test_inputs.values()), - exported_path, - dynamic_axes=dynamic_axes, - do_constant_folding=False, - opset_version=13, - verbose=False, - input_names=list(test_inputs.keys()), - output_names=["audio"], - ) - return "Finished" - - - -import re as regex -import scipy.io.wavfile as wavfile - -cli_current_page = "HOME" - - -def cli_split_command(com): - exp = r'(?:(?<=\s)|^)"(.*?)"(?=\s|$)|(\S+)' - split_array = regex.findall(exp, com) - split_array = [group[0] if group[0] else group[1] for group in split_array] - return split_array - - -def execute_generator_function(genObject): - for _ in genObject: - pass - - -def cli_infer(com): - # get VC first - com = cli_split_command(com) - model_name = com[0] - source_audio_path = com[1] - output_file_name = com[2] - feature_index_path = com[3] - f0_file = None # Not Implemented Yet - - # Get parameters for inference - speaker_id = int(com[4]) - transposition = float(com[5]) - f0_method = com[6] - crepe_hop_length = int(com[7]) - harvest_median_filter = int(com[8]) - resample = int(com[9]) - mix = float(com[10]) - feature_ratio = float(com[11]) - protection_amnt = float(com[12]) - protect1 = 0.5 - - if com[14] == "False" or com[14] == "false": - DoFormant = False - Quefrency = 0.0 - Timbre = 0.0 - CSVutil( - "csvdb/formanting.csv", "w+", "formanting", DoFormant, Quefrency, Timbre - ) - - else: - DoFormant = True - Quefrency = float(com[15]) - Timbre = float(com[16]) - CSVutil( - "csvdb/formanting.csv", "w+", "formanting", DoFormant, Quefrency, Timbre - ) - - print("Mangio-RVC-Fork Infer-CLI: Starting the inference...") - vc_data = vc.get_vc(model_name, protection_amnt, protect1) - print(vc_data) - print("Mangio-RVC-Fork Infer-CLI: Performing inference...") - conversion_data = vc.vc_single( - speaker_id, - source_audio_path, - source_audio_path, - transposition, - f0_file, - f0_method, - feature_index_path, - feature_index_path, - feature_ratio, - harvest_median_filter, - resample, - mix, - protection_amnt, - crepe_hop_length, - ) - if "Success." in conversion_data[0]: - print( - "Mangio-RVC-Fork Infer-CLI: Inference succeeded. Writing to %s/%s..." - % ("audio-outputs", output_file_name) - ) - wavfile.write( - "%s/%s" % ("audio-outputs", output_file_name), - conversion_data[1][0], - conversion_data[1][1], - ) - print( - "Mangio-RVC-Fork Infer-CLI: Finished! Saved output to %s/%s" - % ("audio-outputs", output_file_name) - ) - else: - print("Mangio-RVC-Fork Infer-CLI: Inference failed. Here's the traceback: ") - print(conversion_data[0]) - - -def cli_pre_process(com): - com = cli_split_command(com) - model_name = com[0] - trainset_directory = com[1] - sample_rate = com[2] - num_processes = int(com[3]) - - print("Mangio-RVC-Fork Pre-process: Starting...") - generator = preprocess_dataset( - trainset_directory, model_name, sample_rate, num_processes - ) - execute_generator_function(generator) - print("Mangio-RVC-Fork Pre-process: Finished") - - -def cli_extract_feature(com): - com = cli_split_command(com) - model_name = com[0] - gpus = com[1] - num_processes = int(com[2]) - has_pitch_guidance = True if (int(com[3]) == 1) else False - f0_method = com[4] - crepe_hop_length = int(com[5]) - version = com[6] # v1 or v2 - - print("Mangio-RVC-CLI: Extract Feature Has Pitch: " + str(has_pitch_guidance)) - print("Mangio-RVC-CLI: Extract Feature Version: " + str(version)) - print("Mangio-RVC-Fork Feature Extraction: Starting...") - generator = extract_f0_feature( - gpus, - num_processes, - f0_method, - has_pitch_guidance, - model_name, - version, - crepe_hop_length, - ) - execute_generator_function(generator) - print("Mangio-RVC-Fork Feature Extraction: Finished") - - -def cli_train(com): - com = cli_split_command(com) - model_name = com[0] - sample_rate = com[1] - has_pitch_guidance = True if (int(com[2]) == 1) else False - speaker_id = int(com[3]) - save_epoch_iteration = int(com[4]) - total_epoch = int(com[5]) # 10000 - batch_size = int(com[6]) - gpu_card_slot_numbers = com[7] - if_save_latest = True if (int(com[8]) == 1) else False - if_cache_gpu = True if (int(com[9]) == 1) else False - if_save_every_weight = True if (int(com[10]) == 1) else False - version = com[11] - - pretrained_base = "pretrained/" if version == "v1" else "pretrained_v2/" - - g_pretrained_path = "%sf0G%s.pth" % (pretrained_base, sample_rate) - d_pretrained_path = "%sf0D%s.pth" % (pretrained_base, sample_rate) - - print("Mangio-RVC-Fork Train-CLI: Training...") - click_train( - model_name, - sample_rate, - has_pitch_guidance, - speaker_id, - save_epoch_iteration, - total_epoch, - batch_size, - if_save_latest, - g_pretrained_path, - d_pretrained_path, - gpu_card_slot_numbers, - if_cache_gpu, - if_save_every_weight, - version, - ) - - -def cli_train_feature(com): - com = cli_split_command(com) - model_name = com[0] - version = com[1] - print("Mangio-RVC-Fork Train Feature Index-CLI: Training... Please wait") - generator = train_index(model_name, version) - execute_generator_function(generator) - print("Mangio-RVC-Fork Train Feature Index-CLI: Done!") - - -def cli_extract_model(com): - com = cli_split_command(com) - model_path = com[0] - save_name = com[1] - sample_rate = com[2] - has_pitch_guidance = com[3] - info = com[4] - version = com[5] - extract_small_model_process = extract_small_model( - model_path, save_name, sample_rate, has_pitch_guidance, info, version - ) - if extract_small_model_process == "Success.": - print("Mangio-RVC-Fork Extract Small Model: Success!") - else: - print(str(extract_small_model_process)) - print("Mangio-RVC-Fork Extract Small Model: Failed!") - - -def preset_apply(preset, qfer, tmbr): - if str(preset) != "": - with open(str(preset), "r") as p: - content = p.readlines() - qfer, tmbr = content[0].split("\n")[0], content[1] - formant_apply(qfer, tmbr) - else: - pass - return ( - {"value": qfer, "__type__": "update"}, - {"value": tmbr, "__type__": "update"}, - ) - - -def print_page_details(): - if cli_current_page == "HOME": - print( - "\n go home : Takes you back to home with a navigation list." - "\n go infer : Takes you to inference command execution." - "\n go pre-process : Takes you to training step.1) pre-process command execution." - "\n go extract-feature : Takes you to training step.2) extract-feature command execution." - "\n go train : Takes you to training step.3) being or continue training command execution." - "\n go train-feature : Takes you to the train feature index command execution." - "\n go extract-model : Takes you to the extract small model command execution." - ) - elif cli_current_page == "INFER": - print( - "\n arg 1) model name with .pth in ./weights: mi-test.pth" - "\n arg 2) source audio path: myFolder\\MySource.wav" - "\n arg 3) output file name to be placed in './audio-outputs': MyTest.wav" - "\n arg 4) feature index file path: logs/mi-test/added_IVF3042_Flat_nprobe_1.index" - "\n arg 5) speaker id: 0" - "\n arg 6) transposition: 0" - "\n arg 7) f0 method: harvest (pm, harvest, crepe, crepe-tiny, hybrid[x,x,x,x], mangio-crepe, mangio-crepe-tiny, rmvpe)" - "\n arg 8) crepe hop length: 160" - "\n arg 9) harvest median filter radius: 3 (0-7)" - "\n arg 10) post resample rate: 0" - "\n arg 11) mix volume envelope: 1" - "\n arg 12) feature index ratio: 0.78 (0-1)" - "\n arg 13) Voiceless Consonant Protection (Less Artifact): 0.33 (Smaller number = more protection. 0.50 means Dont Use.)" - "\n arg 14) Whether to formant shift the inference audio before conversion: False (if set to false, you can ignore setting the quefrency and timbre values for formanting)" - "\n arg 15)* Quefrency for formanting: 8.0 (no need to set if arg14 is False/false)" - "\n arg 16)* Timbre for formanting: 1.2 (no need to set if arg14 is False/false) \n" - "\nExample: mi-test.pth saudio/Sidney.wav myTest.wav logs/mi-test/added_index.index 0 -2 harvest 160 3 0 1 0.95 0.33 0.45 True 8.0 1.2" - ) - elif cli_current_page == "PRE-PROCESS": - print( - "\n arg 1) Model folder name in ./logs: mi-test" - "\n arg 2) Trainset directory: mydataset (or) E:\\my-data-set" - "\n arg 3) Sample rate: 40k (32k, 40k, 48k)" - "\n arg 4) Number of CPU threads to use: 8 \n" - "\nExample: mi-test mydataset 40k 24" - ) - elif cli_current_page == "EXTRACT-FEATURE": - print( - "\n arg 1) Model folder name in ./logs: mi-test" - "\n arg 2) Gpu card slot: 0 (0-1-2 if using 3 GPUs)" - "\n arg 3) Number of CPU threads to use: 8" - "\n arg 4) Has Pitch Guidance?: 1 (0 for no, 1 for yes)" - "\n arg 5) f0 Method: harvest (pm, harvest, dio, crepe)" - "\n arg 6) Crepe hop length: 128" - "\n arg 7) Version for pre-trained models: v2 (use either v1 or v2)\n" - "\nExample: mi-test 0 24 1 harvest 128 v2" - ) - elif cli_current_page == "TRAIN": - print( - "\n arg 1) Model folder name in ./logs: mi-test" - "\n arg 2) Sample rate: 40k (32k, 40k, 48k)" - "\n arg 3) Has Pitch Guidance?: 1 (0 for no, 1 for yes)" - "\n arg 4) speaker id: 0" - "\n arg 5) Save epoch iteration: 50" - "\n arg 6) Total epochs: 10000" - "\n arg 7) Batch size: 8" - "\n arg 8) Gpu card slot: 0 (0-1-2 if using 3 GPUs)" - "\n arg 9) Save only the latest checkpoint: 0 (0 for no, 1 for yes)" - "\n arg 10) Whether to cache training set to vram: 0 (0 for no, 1 for yes)" - "\n arg 11) Save extracted small model every generation?: 0 (0 for no, 1 for yes)" - "\n arg 12) Model architecture version: v2 (use either v1 or v2)\n" - "\nExample: mi-test 40k 1 0 50 10000 8 0 0 0 0 v2" - ) - elif cli_current_page == "TRAIN-FEATURE": - print( - "\n arg 1) Model folder name in ./logs: mi-test" - "\n arg 2) Model architecture version: v2 (use either v1 or v2)\n" - "\nExample: mi-test v2" - ) - elif cli_current_page == "EXTRACT-MODEL": - print( - "\n arg 1) Model Path: logs/mi-test/G_168000.pth" - "\n arg 2) Model save name: MyModel" - "\n arg 3) Sample rate: 40k (32k, 40k, 48k)" - "\n arg 4) Has Pitch Guidance?: 1 (0 for no, 1 for yes)" - '\n arg 5) Model information: "My Model"' - "\n arg 6) Model architecture version: v2 (use either v1 or v2)\n" - '\nExample: logs/mi-test/G_168000.pth MyModel 40k 1 "Created by Cole Mangio" v2' - ) - -def change_page(page): - global cli_current_page - cli_current_page = page - return 0 - -def execute_command(com): - if com == "go home": - return change_page("HOME") - elif com == "go infer": - return change_page("INFER") - elif com == "go pre-process": - return change_page("PRE-PROCESS") - elif com == "go extract-feature": - return change_page("EXTRACT-FEATURE") - elif com == "go train": - return change_page("TRAIN") - elif com == "go train-feature": - return change_page("TRAIN-FEATURE") - elif com == "go extract-model": - return change_page("EXTRACT-MODEL") - else: - if com[:3] == "go ": - print("page '%s' does not exist!" % com[3:]) - return 0 - - if cli_current_page == "INFER": - cli_infer(com) - elif cli_current_page == "PRE-PROCESS": - cli_pre_process(com) - elif cli_current_page == "EXTRACT-FEATURE": - cli_extract_feature(com) - elif cli_current_page == "TRAIN": - cli_train(com) - elif cli_current_page == "TRAIN-FEATURE": - cli_train_feature(com) - elif cli_current_page == "EXTRACT-MODEL": - cli_extract_model(com) - -def cli_navigation_loop(): - while True: - print("\nYou are currently in '%s':" % cli_current_page) - print_page_details() - command = input("%s: " % cli_current_page) - try: - execute_command(command) - except: - print(traceback.format_exc()) - - -if config.is_cli: - print("\n\nMangio-RVC-Fork v2 CLI App!\n") - print( - "Welcome to the CLI version of RVC. Please read the documentation on https://github.com/Mangio621/Mangio-RVC-Fork (README.MD) to understand how to use this app.\n" - ) - cli_navigation_loop() - - - - - -def switch_pitch_controls(f0method0): - is_visible = f0method0 != 'rmvpe' - - if rvc_globals.NotesOrHertz: - return ( - {"visible": False, "__type__": "update"}, - {"visible": is_visible, "__type__": "update"}, - {"visible": False, "__type__": "update"}, - {"visible": is_visible, "__type__": "update"} - ) - else: - return ( - {"visible": is_visible, "__type__": "update"}, - {"visible": False, "__type__": "update"}, - {"visible": is_visible, "__type__": "update"}, - {"visible": False, "__type__": "update"} - ) - -def match_index(sid0): - picked = False - # folder = sid0.split('.')[0] - - # folder = re.split(r'. |_', sid0)[0] - folder = sid0.split(".")[0].split("_")[0] - # folder_test = sid0.split('.')[0].split('_')[0].split('-')[0] - parent_dir = "./logs/" + folder - # print(parent_dir) - if os.path.exists(parent_dir): - # print('path exists') - for filename in os.listdir(parent_dir.replace("\\", "/")): - if filename.endswith(".index"): - for i in range(len(indexes_list)): - if indexes_list[i] == ( - os.path.join(("./logs/" + folder), filename).replace("\\", "/") - ): - # print('regular index found') - break - else: - if indexes_list[i] == ( - os.path.join( - ("./logs/" + folder.lower()), filename - ).replace("\\", "/") - ): - # print('lowered index found') - parent_dir = "./logs/" + folder.lower() - break - # elif (indexes_list[i]).casefold() == ((os.path.join(("./logs/" + folder), filename).replace('\\','/')).casefold()): - # print('8') - # parent_dir = "./logs/" + folder.casefold() - # break - # elif (indexes_list[i]) == ((os.path.join(("./logs/" + folder_test), filename).replace('\\','/'))): - # parent_dir = "./logs/" + folder_test - # print(parent_dir) - # break - # elif (indexes_list[i]) == (os.path.join(("./logs/" + folder_test.lower()), filename).replace('\\','/')): - # parent_dir = "./logs/" + folder_test - # print(parent_dir) - # break - # else: - # #print('couldnt find index') - # continue - - # print('all done') - index_path = os.path.join( - parent_dir.replace("\\", "/"), filename.replace("\\", "/") - ).replace("\\", "/") - # print(index_path) - return (index_path, index_path) - - else: - # print('nothing found') - return ("", "") - -def stoptraining(mim): - if int(mim) == 1: - CSVutil("csvdb/stop.csv", "w+", "stop", "True") - # p.terminate() - # p.kill() - try: - os.kill(PID, signal.SIGTERM) - except Exception as e: - print(f"Couldn't click due to {e}") - pass - else: - pass - - return ( - {"visible": False, "__type__": "update"}, - {"visible": True, "__type__": "update"}, - ) - -weights_dir = 'weights/' - -def note_to_hz(note_name): - SEMITONES = {'C': -9, 'C#': -8, 'D': -7, 'D#': -6, 'E': -5, 'F': -4, 'F#': -3, 'G': -2, 'G#': -1, 'A': 0, 'A#': 1, 'B': 2} - pitch_class, octave = note_name[:-1], int(note_name[-1]) - semitone = SEMITONES[pitch_class] - note_number = 12 * (octave - 4) + semitone - frequency = 440.0 * (2.0 ** (1.0/12)) ** note_number - return frequency - -def save_to_wav(record_button): - if record_button is None: - pass - else: - path_to_file=record_button - new_name = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")+'.wav' - new_path='./audios/'+new_name - shutil.move(path_to_file,new_path) - return new_name -def save_to_wav2_edited(dropbox): - if dropbox is None: - pass - else: - file_path = dropbox.name - target_path = os.path.join('audios', os.path.basename(file_path)) - - if os.path.exists(target_path): - os.remove(target_path) - print('Replacing old dropdown file...') - - shutil.move(file_path, target_path) - return -def save_to_wav2(dropbox): - file_path = dropbox.name - target_path = os.path.join('audios', os.path.basename(file_path)) - - if os.path.exists(target_path): - os.remove(target_path) - print('Replacing old dropdown file...') - - shutil.move(file_path, target_path) - return target_path - -from gtts import gTTS -import edge_tts -import asyncio - - - - -def custom_voice( - _values, # filter indices - audio_files, # all audio files - model_voice_path='', - transpose=0, - f0method='pm', - index_rate_=float(0.66), - crepe_hop_length_=float(64), - f0_autotune=False, - file_index='', - file_index2='', - ): - - vc.get_vc(model_voice_path) - - - for _value_item in _values: - filename = "audio2/"+audio_files[_value_item] if _value_item != "converted_tts" else audio_files[0] - #filename = "audio2/"+audio_files[_value_item] - try: - print(audio_files[_value_item], model_voice_path) - except: - pass - info_, (sample_, audio_output_) = vc.vc_single_dont_save( - sid=0, - input_audio_path0=filename, #f"audio2/{filename}", - input_audio_path1=filename, #f"audio2/{filename}", - f0_up_key=transpose, # transpose for m to f and reverse 0 12 - f0_file=None, - f0_method= f0method, - file_index= file_index, # dir pwd? - file_index2= file_index2, - # file_big_npy1, - index_rate= index_rate_, - filter_radius= int(3), - resample_sr= int(0), - rms_mix_rate= float(0.25), - protect= float(0.33), - crepe_hop_length= crepe_hop_length_, - f0_autotune=f0_autotune, - f0_min=50, - note_min=50, - f0_max=1100, - note_max=1100 - ) - - sf.write( - file= filename, #f"audio2/{filename}", - samplerate=sample_, - data=audio_output_ - ) -def cast_to_device(tensor, device): - try: - return tensor.to(device) - except Exception as e: - print(e) - return tensor - - -def __bark__(text, voice_preset): - os.makedirs(os.path.join(now_dir,"tts"), exist_ok=True) - from transformers import AutoProcessor, BarkModel - device = "cuda:0" if torch.cuda.is_available() else "cpu" - dtype = torch.float32 if "cpu" in device else torch.float16 - bark_processor = AutoProcessor.from_pretrained( - "suno/bark-small", - cache_dir=os.path.join(now_dir,"tts","suno/bark"), - torch_dtype=dtype) - bark_model = BarkModel.from_pretrained( - "suno/bark-small", - cache_dir=os.path.join(now_dir,"tts","suno/bark"), - torch_dtype=dtype).to(device) - # bark_model.enable_cpu_offload() - inputs = bark_processor( - text=[text], - return_tensors="pt", - voice_preset=voice_preset - ) - tensor_dict = {k: cast_to_device(v,device) if hasattr(v,"to") else v for k, v in inputs.items()} - speech_values = bark_model.generate(**tensor_dict, do_sample=True) - sampling_rate = bark_model.generation_config.sample_rate - speech = speech_values.cpu().numpy().squeeze() - return speech, sampling_rate - - - -def make_test( - tts_text, - tts_voice, - model_path, - index_path, - transpose, - f0_method, - index_rate, - crepe_hop_length, - f0_autotune, - tts_method - ): - - if tts_voice == None: - return - - filename = os.path.join(now_dir, "audio-outputs", "converted_tts.wav") - if "SET_LIMIT" == os.getenv("DEMO"): - if len(tts_text) > 60: - tts_text = tts_text[:60] - print("DEMO; limit to 60 characters") - - language = tts_voice[:2] - if tts_method == "Edge-tts": - try: - #nest_asyncio.apply() # gradio;not - asyncio.run(edge_tts.Communicate(tts_text, "-".join(tts_voice.split('-')[:-1])).save(filename)) - except: - try: - tts = gTTS(tts_text, lang=language) - tts.save(filename) - tts.save - print(f'No audio was received. Please change the tts voice for {tts_voice}. USING gTTS.') - except: - tts = gTTS('a', lang=language) - tts.save(filename) - print('Error: Audio will be replaced.') - - os.system("cp audio-outputs/converted_tts.wav audio-outputs/real_tts.wav") - - custom_voice( - ["converted_tts"], # filter indices - ["audio-outputs/converted_tts.wav"], # all audio files - model_voice_path=model_path, - transpose=transpose, - f0method=f0_method, - index_rate_=index_rate, - crepe_hop_length_=crepe_hop_length, - f0_autotune=f0_autotune, - file_index='', - file_index2=index_path, - ) - return os.path.join(now_dir, "audio-outputs", "converted_tts.wav"), os.path.join(now_dir, "audio-outputs", "real_tts.wav") - elif tts_method == "Bark-tts": - try: - - script = tts_text.replace("\n", " ").strip() - sentences = sent_tokenize(script) - print(sentences) - silence = np.zeros(int(0.25 * SAMPLE_RATE)) - pieces = [] - nombre_archivo = os.path.join(now_dir, "audio-outputs", "bark_out.wav") - for sentence in sentences: - audio_array , _ = __bark__(sentence, tts_voice.split("-")[0]) - pieces += [audio_array, silence.copy()] - - sf.write( - file= nombre_archivo, - samplerate=SAMPLE_RATE, - data=np.concatenate(pieces) - ) - vc.get_vc(model_path) - info_, (sample_, audio_output_) = vc.vc_single_dont_save( - sid=0, - input_audio_path0=os.path.join(now_dir, "audio-outputs", "bark_out.wav"), #f"audio2/{filename}", - input_audio_path1=os.path.join(now_dir, "audio-outputs", "bark_out.wav"), #f"audio2/{filename}", - f0_up_key=transpose, # transpose for m to f and reverse 0 12 - f0_file=None, - f0_method=f0_method, - file_index= '', # dir pwd? - file_index2= index_path, - # file_big_npy1, - index_rate= index_rate, - filter_radius= int(3), - resample_sr= int(0), - rms_mix_rate= float(0.25), - protect= float(0.33), - crepe_hop_length= crepe_hop_length, - f0_autotune=f0_autotune, - f0_min=50, - note_min=50, - f0_max=1100, - note_max=1100 - ) - wavfile.write(os.path.join(now_dir, "audio-outputs", "converted_bark.wav"), rate=sample_, data=audio_output_) - return os.path.join(now_dir, "audio-outputs", "converted_bark.wav"), nombre_archivo - - except Exception as e: - print(f"{e}") - return None, None - - - - - - -def GradioSetup(UTheme=gr.themes.Soft()): - - default_weight = names[0] if names else '' - - with gr.Blocks(theme='JohnSmith9982/small_and_pretty', title="Applio") as app: - gr.Markdown("🍏 Applio (Mangio-RVC-Fork HF)") - gr.Markdown("More spaces: [Aesthetic_RVC_Inference_HF](https://huggingface.co/spaces/r3gm/Aesthetic_RVC_Inference_HF), [AICoverGen](https://huggingface.co/spaces/r3gm/AICoverGen), [Ultimate-Vocal-Remover-WebUI](https://huggingface.co/spaces/r3gm/Ultimate-Vocal-Remover-WebUI), [Advanced-RVC-Inference](https://huggingface.co/spaces/r3gm/Advanced-RVC-Inference)") - gr.HTML("<h4> The current space only uses CPU, so it's only for inference. If you have issues with the queue, I recommend duplicating the space. </h4>") - gr.Markdown( - "[](https://huggingface.co/spaces/r3gm/RVC_HF?duplicate=true)\n\n" - ) - with gr.Tabs(): - with gr.TabItem(i18n("Model Inference")): - with gr.Row(): - sid0 = gr.Dropdown(label=i18n("Inferencing voice:"), choices=sorted(names), value=default_weight) - refresh_button = gr.Button(i18n("Refresh"), variant="primary") - clean_button = gr.Button(i18n("Unload voice to save GPU memory"), variant="primary") - clean_button.click(fn=lambda: ({"value": "", "__type__": "update"}), inputs=[], outputs=[sid0]) - - - with gr.TabItem(i18n("Single")): - with gr.Row(): - spk_item = gr.Slider( - minimum=0, - maximum=2333, - step=1, - label=i18n("Select Speaker/Singer ID:"), - value=0, - visible=False, - interactive=True, - ) - - - with gr.Group(): - with gr.Row(): - with gr.Column(): # First column for audio-related inputs - dropbox = gr.File(label=i18n("Drag your audio here:")) - record_button=gr.Audio(source="microphone", label=i18n("Or record an audio:"), type="filepath") - input_audio0 = gr.Textbox( - label=i18n("Manual path to the audio file to be processed"), - value=os.path.join(now_dir, "audios", "someguy.mp3"), - visible=False - ) - input_audio1 = gr.Dropdown( - label=i18n("Auto detect audio path and select from the dropdown:"), - choices=sorted(audio_paths), - value='', - interactive=True, - ) - - input_audio1.select(fn=lambda:'',inputs=[],outputs=[input_audio0]) - input_audio0.input(fn=lambda:'',inputs=[],outputs=[input_audio1]) - - dropbox.upload(fn=save_to_wav2, inputs=[dropbox], outputs=[input_audio0]) - dropbox.upload(fn=easy_infer.change_choices2, inputs=[], outputs=[input_audio1]) - record_button.change(fn=save_to_wav, inputs=[record_button], outputs=[input_audio0]) - record_button.change(fn=easy_infer.change_choices2, inputs=[], outputs=[input_audio1]) - - best_match_index_path1 = match_index(sid0.value) # Get initial index from default sid0 (first voice model in list) - - with gr.Column(): # Second column for pitch shift and other options - file_index2 = gr.Dropdown( - label=i18n("Auto-detect index path and select from the dropdown:"), - choices=get_indexes(), - value=best_match_index_path1, - interactive=True, - allow_custom_value=True, - ) - index_rate1 = gr.Slider( - minimum=0, - maximum=1, - label=i18n("Search feature ratio:"), - value=0.75, - interactive=True, - ) - refresh_button.click( - fn=change_choices, inputs=[], outputs=[sid0, file_index2, input_audio1] - ) - with gr.Column(): - vc_transform0 = gr.Number( - label=i18n("Transpose (integer, number of semitones, raise by an octave: 12, lower by an octave: -12):"), value=0 - ) - - # Create a checkbox for advanced settings - advanced_settings_checkbox = gr.Checkbox( - value=False, - label=i18n("Advanced Settings"), - interactive=True, - ) - - # Advanced settings container - with gr.Column(visible=False) as advanced_settings: # Initially hidden - with gr.Row(label = i18n("Advanced Settings"), open = False): - with gr.Column(): - f0method0 = gr.Radio( - label=i18n( - "Select the pitch extraction algorithm:" - ), - choices=["pm", "harvest", "dio", "crepe", "crepe-tiny", "mangio-crepe", "mangio-crepe-tiny", "rmvpe", "rmvpe+"], - value="rmvpe+", - interactive=True, - ) - f0_autotune = gr.Checkbox( - label="Enable autotune", - interactive=True - ) - crepe_hop_length = gr.Slider( - minimum=1, - maximum=512, - step=1, - label=i18n("Mangio-Crepe Hop Length (Only applies to mangio-crepe): Hop length refers to the time it takes for the speaker to jump to a dramatic pitch. Lower hop lengths take more time to infer but are more pitch accurate."), - value=120, - interactive=True, - visible=False, - ) - filter_radius0 = gr.Slider( - minimum=0, - maximum=7, - label=i18n("If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness."), - value=3, - step=1, - interactive=True, - ) - - minpitch_slider = gr.Slider( - label = i18n("Min pitch:"), - info = i18n("Specify minimal pitch for inference [HZ]"), - step = 0.1, - minimum = 1, - scale = 0, - value = 50, - maximum = 16000, - interactive = True, - visible = (not rvc_globals.NotesOrHertz) and (f0method0.value != 'rmvpe'), - ) - minpitch_txtbox = gr.Textbox( - label = i18n("Min pitch:"), - info = i18n("Specify minimal pitch for inference [NOTE][OCTAVE]"), - placeholder = "C5", - visible = (rvc_globals.NotesOrHertz) and (f0method0.value != 'rmvpe'), - interactive = True, - ) - - maxpitch_slider = gr.Slider( - label = i18n("Max pitch:"), - info = i18n("Specify max pitch for inference [HZ]"), - step = 0.1, - minimum = 1, - scale = 0, - value = 1100, - maximum = 16000, - interactive = True, - visible = (not rvc_globals.NotesOrHertz) and (f0method0.value != 'rmvpe'), - ) - maxpitch_txtbox = gr.Textbox( - label = i18n("Max pitch:"), - info = i18n("Specify max pitch for inference [NOTE][OCTAVE]"), - placeholder = "C6", - visible = (rvc_globals.NotesOrHertz) and (f0method0.value != 'rmvpe'), - interactive = True, - ) - - with gr.Column(): - file_index1 = gr.Textbox( - label=i18n("Feature search database file path:"), - value="", - interactive=True, - ) - - with gr.Accordion(label = i18n("Custom f0 [Root pitch] File"), open = False): - f0_file = gr.File(label=i18n("F0 curve file (optional). One pitch per line. Replaces the default F0 and pitch modulation:")) - - f0method0.change( - fn=lambda radio: ( - { - "visible": radio in ['mangio-crepe', 'mangio-crepe-tiny'], - "__type__": "update" - } - ), - inputs=[f0method0], - outputs=[crepe_hop_length] - ) - - f0method0.change( - fn=switch_pitch_controls, - inputs=[f0method0], - outputs=[minpitch_slider, minpitch_txtbox, - maxpitch_slider, maxpitch_txtbox] - ) - - with gr.Column(): - resample_sr0 = gr.Slider( - minimum=0, - maximum=48000, - label=i18n("Resample the output audio in post-processing to the final sample rate. Set to 0 for no resampling:"), - value=0, - step=1, - interactive=True, - ) - rms_mix_rate0 = gr.Slider( - minimum=0, - maximum=1, - label=i18n("Use the volume envelope of the input to replace or mix with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is used:"), - value=0.25, - interactive=True, - ) - protect0 = gr.Slider( - minimum=0, - maximum=0.5, - label=i18n( - "Protect voiceless consonants and breath sounds to prevent artifacts such as tearing in electronic music. Set to 0.5 to disable. Decrease the value to increase protection, but it may reduce indexing accuracy:" - ), - value=0.33, - step=0.01, - interactive=True, - ) - formanting = gr.Checkbox( - value=bool(DoFormant), - label=i18n("Formant shift inference audio"), - info=i18n("Used for male to female and vice-versa conversions"), - interactive=True, - visible=True, - ) - - formant_preset = gr.Dropdown( - value='', - choices=get_fshift_presets(), - label=i18n("Browse presets for formanting"), - info=i18n("Presets are located in formantshiftcfg/ folder"), - visible=bool(DoFormant), - ) - - formant_refresh_button = gr.Button( - value='\U0001f504', - visible=bool(DoFormant), - variant='primary', - ) - - qfrency = gr.Slider( - value=Quefrency, - info=i18n("Default value is 1.0"), - label=i18n("Quefrency for formant shifting"), - minimum=0.0, - maximum=16.0, - step=0.1, - visible=bool(DoFormant), - interactive=True, - ) - - tmbre = gr.Slider( - value=Timbre, - info=i18n("Default value is 1.0"), - label=i18n("Timbre for formant shifting"), - minimum=0.0, - maximum=16.0, - step=0.1, - visible=bool(DoFormant), - interactive=True, - ) - frmntbut = gr.Button( - "Apply", variant="primary", visible=bool(DoFormant) - ) - - formant_preset.change( - fn=preset_apply, - inputs=[formant_preset, qfrency, tmbre], - outputs=[qfrency, tmbre], - ) - formanting.change( - fn=formant_enabled, - inputs=[ - formanting, - qfrency, - tmbre, - frmntbut, - formant_preset, - formant_refresh_button, - ], - outputs=[ - formanting, - qfrency, - tmbre, - frmntbut, - formant_preset, - formant_refresh_button, - ], - ) - frmntbut.click( - fn=formant_apply, - inputs=[qfrency, tmbre], - outputs=[qfrency, tmbre], - ) - formant_refresh_button.click( - fn=update_fshift_presets, - inputs=[formant_preset, qfrency, tmbre], - outputs=[formant_preset, qfrency, tmbre], - ) - - # Function to toggle advanced settings - def toggle_advanced_settings(checkbox): - return {"visible": checkbox, "__type__": "update"} - - # Attach the change event - advanced_settings_checkbox.change( - fn=toggle_advanced_settings, - inputs=[advanced_settings_checkbox], - outputs=[advanced_settings] - ) - - - but0 = gr.Button(i18n("Convert"), variant="primary").style(full_width=True) - - with gr.Row(): # Defines output info + output audio download after conversion - vc_output1 = gr.Textbox(label=i18n("Output information:")) - vc_output2 = gr.Audio(label=i18n("Export audio (click on the three dots in the lower right corner to download)")) - - with gr.Group(): # I think this defines the big convert button - with gr.Row(): - but0.click( - vc.vc_single, - [ - spk_item, - input_audio0, - input_audio1, - vc_transform0, - f0_file, - f0method0, - file_index1, - file_index2, - index_rate1, - filter_radius0, - resample_sr0, - rms_mix_rate0, - protect0, - crepe_hop_length, - minpitch_slider, minpitch_txtbox, - maxpitch_slider, maxpitch_txtbox, - f0_autotune - ], - [vc_output1, vc_output2], - ) - - - with gr.TabItem(i18n("Batch")): # Dont Change - with gr.Group(): # Markdown explanation of batch inference - gr.Markdown( - value=i18n("Batch conversion. Enter the folder containing the audio files to be converted or upload multiple audio files. The converted audio will be output in the specified folder (default: 'opt').") - ) - with gr.Row(): - with gr.Column(): - vc_transform1 = gr.Number( - label=i18n("Transpose (integer, number of semitones, raise by an octave: 12, lower by an octave: -12):"), value=0 - ) - opt_input = gr.Textbox(label=i18n("Specify output folder:"), value="opt") - with gr.Column(): - file_index4 = gr.Dropdown( - label=i18n("Auto-detect index path and select from the dropdown:"), - choices=get_indexes(), - value=best_match_index_path1, - interactive=True, - ) - sid0.select(fn=match_index, inputs=[sid0], outputs=[file_index2, file_index4]) - - refresh_button.click( - fn=lambda: change_choices()[1], - inputs=[], - outputs=file_index4, - ) - index_rate2 = gr.Slider( - minimum=0, - maximum=1, - label=i18n("Search feature ratio:"), - value=0.75, - interactive=True, - ) - with gr.Row(): - dir_input = gr.Textbox( - label=i18n("Enter the path of the audio folder to be processed (copy it from the address bar of the file manager):"), - value=os.path.join(now_dir, "audios"), - ) - inputs = gr.File( - file_count="multiple", label=i18n("You can also input audio files in batches. Choose one of the two options. Priority is given to reading from the folder.") - ) - - with gr.Row(): - with gr.Column(): - # Create a checkbox for advanced batch settings - advanced_settings_batch_checkbox = gr.Checkbox( - value=False, - label=i18n("Advanced Settings"), - interactive=True, - ) - - # Advanced batch settings container - with gr.Row(visible=False) as advanced_settings_batch: # Initially hidden - with gr.Row(label = i18n("Advanced Settings"), open = False): - with gr.Column(): - file_index3 = gr.Textbox( - label=i18n("Feature search database file path:"), - value="", - interactive=True, - ) - - f0method1 = gr.Radio( - label=i18n( - "Select the pitch extraction algorithm:" - ), - choices=["pm", "harvest", "crepe", "rmvpe"], - value="rmvpe", - interactive=True, - ) - f0_autotune = gr.Checkbox( - label="Enable autotune", - interactive=True - ) - filter_radius1 = gr.Slider( - minimum=0, - maximum=7, - label=i18n("If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness."), - value=3, - step=1, - interactive=True, - ) - - with gr.Row(): - format1 = gr.Radio( - label=i18n("Export file format"), - choices=["wav", "flac", "mp3", "m4a"], - value="wav", - interactive=True, - ) - - - with gr.Column(): - resample_sr1 = gr.Slider( - minimum=0, - maximum=48000, - label=i18n("Resample the output audio in post-processing to the final sample rate. Set to 0 for no resampling:"), - value=0, - step=1, - interactive=True, - ) - rms_mix_rate1 = gr.Slider( - minimum=0, - maximum=1, - label=i18n("Use the volume envelope of the input to replace or mix with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is used:"), - value=1, - interactive=True, - ) - protect1 = gr.Slider( - minimum=0, - maximum=0.5, - label=i18n( - "Protect voiceless consonants and breath sounds to prevent artifacts such as tearing in electronic music. Set to 0.5 to disable. Decrease the value to increase protection, but it may reduce indexing accuracy:" - ), - value=0.33, - step=0.01, - interactive=True, - ) - vc_output3 = gr.Textbox(label=i18n("Output information:")) - but1 = gr.Button(i18n("Convert"), variant="primary") - but1.click( - vc.vc_multi, - [ - spk_item, - dir_input, - opt_input, - inputs, - vc_transform1, - f0method1, - file_index3, - file_index4, - index_rate2, - filter_radius1, - resample_sr1, - rms_mix_rate1, - protect1, - format1, - crepe_hop_length, - minpitch_slider if (not rvc_globals.NotesOrHertz) else minpitch_txtbox, - maxpitch_slider if (not rvc_globals.NotesOrHertz) else maxpitch_txtbox, - f0_autotune - ], - [vc_output3], - ) - - sid0.change( - fn=vc.get_vc, - inputs=[sid0, protect0, protect1], - outputs=[spk_item, protect0, protect1], - ) - if not sid0.value == '': - spk_item, protect0, protect1 = vc.get_vc(sid0.value, protect0, protect1) - - #spk_item, protect0, protect1 = vc.get_vc(sid0.value, protect0, protect1) - - # Function to toggle advanced settings - def toggle_advanced_settings_batch(checkbox): - return {"visible": checkbox, "__type__": "update"} - - # Attach the change event - advanced_settings_batch_checkbox.change( - fn=toggle_advanced_settings_batch, - inputs=[advanced_settings_batch_checkbox], - outputs=[advanced_settings_batch] - ) - - - with gr.TabItem(i18n("Train")): - - - with gr.Accordion(label=i18n("Step 1: Processing data")): - with gr.Row(): - exp_dir1 = gr.Textbox(label=i18n("Enter the model name:"), value=i18n("Model_Name")) - sr2 = gr.Radio( - label=i18n("Target sample rate:"), - choices=["40k", "48k", "32k"], - value="40k", - interactive=True, - ) - if_f0_3 = gr.Checkbox( - label=i18n("Whether the model has pitch guidance."), - value=True, - interactive=True, - ) - version19 = gr.Radio( - label=i18n("Version:"), - choices=["v1", "v2"], - value="v2", - interactive=True, - visible=True, - ) - np7 = gr.Slider( - minimum=0, - maximum=config.n_cpu, - step=1, - label=i18n("Number of CPU processes:"), - value=int(np.ceil(config.n_cpu / 1.5)), - interactive=True, - ) - with gr.Group(): - with gr.Accordion(label=i18n("Step 2: Skipping pitch extraction")): - - with gr.Row(): - # trainset_dir4 = gr.Textbox( - # label=i18n("Enter the path of the training folder:"), value=os.path.join(now_dir, datasets_root) - # ) - with gr.Column(): - trainset_dir4 = gr.Dropdown(choices=sorted(datasets), label=i18n("Select your dataset:"), value=get_dataset()) - btn_update_dataset_list = gr.Button(i18n("Update list"), variant="primary") - spk_id5 = gr.Slider( - minimum=0, - maximum=4, - step=1, - label=i18n("Specify the model ID:"), - value=0, - interactive=True, - ) - btn_update_dataset_list.click( - easy_infer.update_dataset_list, [spk_id5], trainset_dir4 - ) - but1 = gr.Button(i18n("Process data"), variant="primary") - info1 = gr.Textbox(label=i18n("Output information:"), value="") - but1.click( - preprocess_dataset, [trainset_dir4, exp_dir1, sr2, np7], [info1] - ) - with gr.Group(): - with gr.Accordion(label=i18n("Step 3: Extracting features")): - with gr.Row(): - with gr.Column(): - gpus6 = gr.Textbox( - label=i18n("Provide the GPU index(es) separated by '-', like 0-1-2 for using GPUs 0, 1, and 2:"), - value=gpus, - interactive=True, - ) - gpu_info9 = gr.Textbox( - label=i18n("GPU Information:"), value=gpu_info, visible=F0GPUVisible - ) - with gr.Column(): - f0method8 = gr.Radio( - label=i18n( - "Select the pitch extraction algorithm:" - ), - choices=["pm", "harvest", "dio", "crepe", "mangio-crepe", "rmvpe", "rmvpe_gpu"], - # [ MANGIO ]: Fork feature: Crepe on f0 extraction for training. - value="rmvpe", - interactive=True, - ) - gpus_rmvpe = gr.Textbox( - label=i18n( - "rmvpe卡号配置:以-分隔输入使用的不同进程卡号,例如0-0-1使用在卡0上跑2个进程并在卡1上跑1个进程" - ), - value="%s-%s" % (gpus, gpus), - interactive=True, - visible=F0GPUVisible, - ) - - extraction_crepe_hop_length = gr.Slider( - minimum=1, - maximum=512, - step=1, - label=i18n("Mangio-Crepe Hop Length (Only applies to mangio-crepe): Hop length refers to the time it takes for the speaker to jump to a dramatic pitch. Lower hop lengths take more time to infer but are more pitch accurate."), - value=64, - interactive=True, - visible=False, - ) - - f0method8.change( - fn=lambda radio: ( - { - "visible": radio in ['mangio-crepe', 'mangio-crepe-tiny'], - "__type__": "update" - } - ), - inputs=[f0method8], - outputs=[extraction_crepe_hop_length] - ) - f0method8.change( - fn=change_f0_method, - inputs=[f0method8], - outputs=[gpus_rmvpe], - ) - but2 = gr.Button(i18n("Feature extraction"), variant="primary") - info2 = gr.Textbox(label=i18n("Output information:"), value="", max_lines=8, interactive=False) - but2.click( - extract_f0_feature, - [gpus6, np7, f0method8, if_f0_3, exp_dir1, version19, extraction_crepe_hop_length, gpus_rmvpe,], - [info2], - ) - with gr.Group(): - with gr.Row(): - with gr.Accordion(label=i18n("Step 4: Model training started")): - with gr.Row(): - save_epoch10 = gr.Slider( - minimum=1, - maximum=100, - step=1, - label=i18n("Save frequency:"), - value=10, - interactive=True, - visible=True, - ) - total_epoch11 = gr.Slider( - minimum=1, - maximum=10000, - step=2, - label=i18n("Training epochs:"), - value=750, - interactive=True, - ) - batch_size12 = gr.Slider( - minimum=1, - maximum=50, - step=1, - label=i18n("Batch size per GPU:"), - value=default_batch_size, - #value=20, - interactive=True, - ) - - with gr.Row(): - if_save_latest13 = gr.Checkbox( - label=i18n("Whether to save only the latest .ckpt file to save hard drive space"), - value=True, - interactive=True, - ) - if_cache_gpu17 = gr.Checkbox( - label=i18n("Cache all training sets to GPU memory. Caching small datasets (less than 10 minutes) can speed up training"), - value=False, - interactive=True, - ) - if_save_every_weights18 = gr.Checkbox( - label=i18n("Save a small final model to the 'weights' folder at each save point"), - value=True, - interactive=True, - ) - - with gr.Row(): - pretrained_G14 = gr.Textbox( - lines=4, - label=i18n("Load pre-trained base model G path:"), - value="assets/pretrained_v2/f0G40k.pth", - interactive=True, - ) - pretrained_D15 = gr.Textbox( - lines=4, - label=i18n("Load pre-trained base model D path:"), - value="assets/pretrained_v2/f0D40k.pth", - interactive=True, - ) - gpus16 = gr.Textbox( - label=i18n("Provide the GPU index(es) separated by '-', like 0-1-2 for using GPUs 0, 1, and 2:"), - value=gpus, - interactive=True, - ) - sr2.change( - change_sr2, - [sr2, if_f0_3, version19], - [pretrained_G14, pretrained_D15], - ) - version19.change( - change_version19, - [sr2, if_f0_3, version19], - [pretrained_G14, pretrained_D15, sr2], - ) - if_f0_3.change( - fn=change_f0, - inputs=[if_f0_3, sr2, version19], - outputs=[f0method8, pretrained_G14, pretrained_D15], - ) - if_f0_3.change(fn=lambda radio: ( - { - "visible": radio in ['mangio-crepe', 'mangio-crepe-tiny'], - "__type__": "update" - } - ), inputs=[f0method8], outputs=[extraction_crepe_hop_length]) - - butstop = gr.Button(i18n("Stop training"), - variant='primary', - visible=False, - ) - but3 = gr.Button(i18n("Train model"), variant="primary", visible=True) - but3.click(fn=stoptraining, inputs=[gr.Number(value=0, visible=False)], outputs=[but3, butstop]) - butstop.click(fn=stoptraining, inputs=[gr.Number(value=1, visible=False)], outputs=[but3, butstop]) - - - with gr.Column(): - info3 = gr.Textbox(label=i18n("Output information:"), value="", max_lines=4) - save_action = gr.Dropdown(label=i18n("Save type"), choices=[i18n("Save all"),i18n("Save D and G"),i18n("Save voice")], value=i18n("Choose the method"), interactive=True) - - but7 = gr.Button(i18n("Save model"), variant="primary") - but4 = gr.Button(i18n("Train feature index"), variant="primary") - - - - if_save_every_weights18.change( - fn=lambda if_save_every_weights: ( - { - "visible": if_save_every_weights, - "__type__": "update" - } - ), - inputs=[if_save_every_weights18], - outputs=[save_epoch10] - ) - - but3.click( - click_train, - [ - exp_dir1, - sr2, - if_f0_3, - spk_id5, - save_epoch10, - total_epoch11, - batch_size12, - if_save_latest13, - pretrained_G14, - pretrained_D15, - gpus16, - if_cache_gpu17, - if_save_every_weights18, - version19, - ], - [info3, butstop, but3], - ) - - but4.click(train_index, [exp_dir1, version19], info3) - but7.click(easy_infer.save_model, [exp_dir1, save_action], info3) - with gr.Group(): - with gr.Row(): - with gr.Accordion(label=i18n("Step 5: Export lowest points on a graph of the model")): - - lowestval_weight_dir = gr.Textbox(visible=False) - ds = gr.Textbox(visible=False) - weights_dir1 = gr.Textbox(visible=False, value=weights_dir) - - - with gr.Row(): - amntlastmdls = gr.Slider( - minimum=1, - maximum=25, - label=i18n('How many lowest points to save:'), - value=3, - step=1, - interactive=True, - ) - lpexport = gr.Button( - value=i18n('Export lowest points of a model'), - variant='primary', - ) - lw_mdls = gr.File( - file_count="multiple", - label=i18n("Output models:"), - interactive=False, - ) ##### - - with gr.Row(): - infolpex = gr.Textbox(label=i18n("Output information:"), value="", max_lines=10) - mdlbl = gr.Dataframe(label=i18n('Stats of selected models:'), datatype='number', type='pandas') - - lpexport.click( - lambda model_name: os.path.join("logs", model_name, "lowestvals"), - inputs=[exp_dir1], - outputs=[lowestval_weight_dir] - ) - - lpexport.click(fn=tensorlowest.main, inputs=[exp_dir1, save_epoch10, amntlastmdls], outputs=[ds]) - - ds.change( - fn=tensorlowest.selectweights, - inputs=[exp_dir1, ds, weights_dir1, lowestval_weight_dir], - outputs=[infolpex, lw_mdls, mdlbl], - ) - with gr.TabItem(i18n("UVR5")): # UVR section - with gr.Group(): - with gr.Row(): - with gr.Column(): - model_select = gr.Radio( - label=i18n("Model Architecture:"), - choices=["VR", "MDX"], - value="VR", - interactive=True, - ) - dir_wav_input = gr.Textbox( - label=i18n("Enter the path of the audio folder to be processed:"), - value=os.path.join(now_dir, "audios") - ) - wav_inputs = gr.File( - file_count="multiple", label=i18n("You can also input audio files in batches. Choose one of the two options. Priority is given to reading from the folder.") - ) - - with gr.Column(): - model_choose = gr.Dropdown(label=i18n("Model:"), choices=uvr5_names) - agg = gr.Slider( - minimum=0, - maximum=20, - step=1, - label="Vocal Extraction Aggressive", - value=10, - interactive=True, - visible=False, - ) - opt_vocal_root = gr.Textbox( - label=i18n("Specify the output folder for vocals:"), value="opt" - ) - opt_ins_root = gr.Textbox( - label=i18n("Specify the output folder for accompaniment:"), value="opt" - ) - format0 = gr.Radio( - label=i18n("Export file format:"), - choices=["wav", "flac", "mp3", "m4a"], - value="flac", - interactive=True, - ) - model_select.change( - fn=update_model_choices, - inputs=model_select, - outputs=model_choose, - ) - but2 = gr.Button(i18n("Convert"), variant="primary") - vc_output4 = gr.Textbox(label=i18n("Output information:")) - #wav_inputs.upload(fn=save_to_wav2_edited, inputs=[wav_inputs], outputs=[]) - but2.click( - uvr, - [ - model_choose, - dir_wav_input, - opt_vocal_root, - wav_inputs, - opt_ins_root, - agg, - format0, - model_select - ], - [vc_output4], - ) - with gr.TabItem(i18n("TTS")): - with gr.Group(): - with gr.Column(): - text_test = gr.Textbox(label=i18n("Text:"), placeholder=i18n("Enter the text you want to convert to voice..."), lines=6) - - with gr.Group(): - with gr.Row(): - with gr.Column(): - tts_methods_voice = ["Edge-tts", "Bark-tts"] - ttsmethod_test = gr.Dropdown(tts_methods_voice, value='Edge-tts', label = i18n('TTS Method:'), visible=True) - tts_test = gr.Dropdown(set_edge_voice, label = i18n('TTS Model:'), visible=True) - ttsmethod_test.change( - fn=update_tts_methods_voice, - inputs=ttsmethod_test, - outputs=tts_test, - ) - - with gr.Column(): - model_voice_path07 = gr.Dropdown(label=i18n('RVC Model:'), choices=sorted(names), value=default_weight) - best_match_index_path1 = match_index(model_voice_path07.value) - - file_index2_07 = gr.Dropdown( - label=i18n('Select the .index file:'), - choices=get_indexes(), - value=best_match_index_path1, - interactive=True, - allow_custom_value=True, - ) - #transpose_test = gr.Number(label = i18n('Transpose (integer, number Fof semitones, raise by an octave: 12, lower by an octave: -12):'), value=0, visible=True, interactive= True) - - - - - with gr.Row(): - refresh_button_ = gr.Button(i18n("Refresh"), variant="primary") - refresh_button_.click(fn=change_choices2, inputs=[], outputs=[model_voice_path07, file_index2_07]) - with gr.Row(): - original_ttsvoice = gr.Audio(label=i18n('Audio TTS:')) - ttsvoice = gr.Audio(label=i18n('Audio RVC:')) - - with gr.Row(): - button_test = gr.Button(i18n("Convert"), variant="primary") - - - button_test.click(make_test, inputs=[ - text_test, - tts_test, - model_voice_path07, - file_index2_07, - #transpose_test, - vc_transform0, - f0method8, - index_rate1, - crepe_hop_length, - f0_autotune, - ttsmethod_test - ], outputs=[ttsvoice, original_ttsvoice]) - - with gr.TabItem(i18n("Resources")): - gr.Markdown(f"Limit download size is {os.getenv('MAX_DOWNLOAD_SIZE')} MB, duplicate the space for modify the limit") - easy_infer.download_model() - easy_infer.download_backup() - easy_infer.download_dataset(trainset_dir4) - easy_infer.download_audio() - easy_infer.youtube_separator() - with gr.TabItem(i18n("Extra")): - gr.Markdown( - value=i18n("This section contains some extra utilities that often may be in experimental phases") - ) - with gr.TabItem(i18n("Merge Audios")): - with gr.Group(): - gr.Markdown( - value="## " + i18n("Merge your generated audios with the instrumental") - ) - gr.Markdown(value=".",visible=True) - gr.Markdown(value=".",visible=True) - with gr.Row(): - with gr.Column(): - dropbox = gr.File(label=i18n("Drag your audio here:")) - gr.Markdown(value=i18n("### Instrumental settings:")) - input_audio1 = gr.Dropdown( - label=i18n("Choose your instrumental:"), - choices=sorted(audio_others_paths), - value='', - interactive=True, - ) - input_audio1_scale = gr.Slider( - minimum=0, - maximum=10, - label=i18n("Volume of the instrumental audio:"), - value=1.00, - interactive=True, - ) - gr.Markdown(value=i18n("### Audio settings:")) - input_audio3 = gr.Dropdown( - label=i18n("Select the generated audio"), - choices=sorted(audio_paths), - value='', - interactive=True, - ) - with gr.Row(): - input_audio3_scale = gr.Slider( - minimum=0, - maximum=10, - label=i18n("Volume of the generated audio:"), - value=1.00, - interactive=True, - ) - - gr.Markdown(value=i18n("### Add the effects:")) - reverb_ = gr.Checkbox( - label=i18n("Reverb"), - value=False, - interactive=True, - ) - compressor_ = gr.Checkbox( - label=i18n("Compressor"), - value=False, - interactive=True, - ) - noise_gate_ = gr.Checkbox( - label=i18n("Noise Gate"), - value=False, - interactive=True, - ) - - butnone = gr.Button(i18n("Merge"), variant="primary").style(full_width=True) - - vc_output1 = gr.Textbox(label=i18n("Output information:")) - vc_output2 = gr.Audio(label=i18n("Export audio (click on the three dots in the lower right corner to download)"), type='filepath') - - dropbox.upload(fn=save_to_wav2, inputs=[dropbox], outputs=[input_audio1]) - dropbox.upload(fn=easy_infer.change_choices2, inputs=[], outputs=[input_audio1]) - - refresh_button.click( - fn=lambda: change_choices3(), - inputs=[], - outputs=[input_audio1, input_audio3], - ) - - butnone.click( - fn=audio_combined, - inputs=[input_audio1, input_audio3,input_audio1_scale,input_audio3_scale,reverb_,compressor_,noise_gate_], - outputs=[vc_output1, vc_output2] - ) - - - with gr.TabItem(i18n("Processing")): - with gr.Group(): - - with gr.Accordion(label=i18n("Model fusion, can be used to test timbre fusion")): - with gr.Row(): - with gr.Column(): - name_to_save0 = gr.Textbox( - label=i18n("Name:"), - value="", - max_lines=1, - interactive=True, - placeholder=i18n("Name for saving") - ) - alpha_a = gr.Slider( - minimum=0, - maximum=1, - label=i18n("Weight for Model A:"), - value=0.5, - interactive=True, - ) - if_f0_ = gr.Checkbox( - label=i18n("Whether the model has pitch guidance."), - value=True, - interactive=True, - ) - version_2 = gr.Radio( - label=i18n("Model architecture version:"), - choices=["v1", "v2"], - value="v2", - interactive=True, - ) - sr_ = gr.Radio( - label=i18n("Target sample rate:"), - choices=["40k", "48k"], - value="40k", - interactive=True, - ) - - - with gr.Column(): - ckpt_a = gr.Textbox(label=i18n("Path to Model A:"), value="", interactive=True, placeholder=i18n("Path to model")) - - ckpt_b = gr.Textbox(label=i18n("Path to Model B:"), value="", interactive=True, placeholder=i18n("Path to model")) - - info__ = gr.Textbox( - label=i18n("Model information to be placed:"), value="", max_lines=8, interactive=True, placeholder=i18n("Model information to be placed") - ) - info4 = gr.Textbox(label=i18n("Output information:"), value="", max_lines=8) - - - but6 = gr.Button(i18n("Fusion"), variant="primary") - - but6.click( - merge, - [ - ckpt_a, - ckpt_b, - alpha_a, - sr_, - if_f0_, - info__, - name_to_save0, - version_2, - ], - info4, - ) # def merge(path1,path2,alpha1,sr,f0,info): - with gr.Group(): - with gr.Accordion(label=i18n("Modify model information")): - with gr.Row(): ###### - with gr.Column(): - ckpt_path0 = gr.Textbox( - label=i18n("Path to Model:"), value="", interactive=True, placeholder=i18n("Path to model") - ) - info_ = gr.Textbox( - label=i18n("Model information to be modified:"), value="", max_lines=8, interactive=True, placeholder=i18n("Model information to be placed") - ) - - with gr.Column(): - name_to_save1 = gr.Textbox( - label=i18n("Save file name:"), - placeholder=i18n("Name for saving"), - value="", - max_lines=8, - interactive=True, - - ) - - info5 = gr.Textbox(label=i18n("Output information:"), value="", max_lines=8) - but7 = gr.Button(i18n("Modify"), variant="primary") - but7.click(change_info, [ckpt_path0, info_, name_to_save1], info5) - with gr.Group(): - with gr.Accordion(label=i18n("View model information")): - with gr.Row(): - with gr.Column(): - ckpt_path1 = gr.Textbox( - label=i18n("Path to Model:"), value="", interactive=True, placeholder=i18n("Path to model") - ) - - info6 = gr.Textbox(label=i18n("Output information:"), value="", max_lines=8) - but8 = gr.Button(i18n("View"), variant="primary") - but8.click(show_info, [ckpt_path1], info6) - with gr.Group(): - with gr.Accordion(label=i18n("Model extraction")): - with gr.Row(): - with gr.Column(): - save_name = gr.Textbox( - label=i18n("Name:"), value="", interactive=True, placeholder=i18n("Name for saving") - ) - if_f0__ = gr.Checkbox( - label=i18n("Whether the model has pitch guidance."), - value=True, - interactive=True, - ) - version_1 = gr.Radio( - label=i18n("Model architecture version:"), - choices=["v1", "v2"], - value="v2", - interactive=True, - ) - sr__ = gr.Radio( - label=i18n("Target sample rate:"), - choices=["32k", "40k", "48k"], - value="40k", - interactive=True, - ) - - with gr.Column(): - ckpt_path2 = gr.Textbox( - - label=i18n("Path to Model:"), - placeholder=i18n("Path to model"), - interactive=True, - ) - info___ = gr.Textbox( - label=i18n("Model information to be placed:"), value="", max_lines=8, interactive=True, placeholder=i18n("Model information to be placed") - ) - info7 = gr.Textbox(label=i18n("Output information:"), value="", max_lines=8) - - with gr.Row(): - - but9 = gr.Button(i18n("Extract"), variant="primary") - ckpt_path2.change( - change_info_, [ckpt_path2], [sr__, if_f0__, version_1] - ) - but9.click( - extract_small_model, - [ckpt_path2, save_name, sr__, if_f0__, info___, version_1], - info7, - ) - - - - - with gr.TabItem(i18n("Settings")): - with gr.Row(): - gr.Markdown(value= - i18n("Pitch settings") - ) - noteshertz = gr.Checkbox( - label = i18n("Whether to use note names instead of their hertz value. E.G. [C5, D6] instead of [523.25, 1174.66]Hz"), - value = rvc_globals.NotesOrHertz, - interactive = True, - ) - - noteshertz.change(fn=lambda nhertz: rvc_globals.__setattr__('NotesOrHertz', nhertz), inputs=[noteshertz], outputs=[]) - - noteshertz.change( - fn=switch_pitch_controls, - inputs=[f0method0], - outputs=[ - minpitch_slider, minpitch_txtbox, - maxpitch_slider, maxpitch_txtbox,] - ) - return app - -def GradioRun(app): - share_gradio_link = config.iscolab or config.paperspace - concurrency_count = 511 - max_size = 1022 - - if ( - config.iscolab or config.paperspace - ): - app.queue(concurrency_count=concurrency_count, max_size=max_size).launch( - favicon_path="./images/icon.png", - ) - else: - app.queue(concurrency_count=concurrency_count, max_size=max_size).launch( - favicon_path=".\images\icon.png", - ) if __name__ == "__main__": - if os.name == 'nt': - print(i18n("Any ConnectionResetErrors post-conversion are irrelevant and purely visual; they can be ignored.\n")) - app = GradioSetup(UTheme=config.grtheme) - GradioRun(app) \ No newline at end of file + launch_gradio() \ No newline at end of file diff --git a/assets/Applio.ipynb b/assets/Applio.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..5823f539c120d55598120676f86bca7bf777841f --- /dev/null +++ b/assets/Applio.ipynb @@ -0,0 +1,450 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "ymhGfgFSR17k" + }, + "source": [ + "## **Applio**\n", + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.\n", + "\n", + "[Support](https://discord.gg/IAHispano) — [Discord Bot](https://discord.com/oauth2/authorize?client_id=1144714449563955302&permissions=1376674695271&scope=bot%20applications.commands) — [Find Voices](https://applio.org/models) — [GitHub](https://github.com/IAHispano/Applio)\n", + "\n", + "<br>\n", + "\n", + "### **Credits**\n", + "- Encryption method: [Hina](https://github.com/hinabl)\n", + "- Extra section: [Poopmaster](https://github.com/poiqazwsx)\n", + "- Main development: [Applio Team](https://github.com/IAHispano)\n", + "\n", + "<br>\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "vtON700qokuQ" + }, + "outputs": [], + "source": [ + "# @title **Install Applio**\n", + "\n", + "import codecs\n", + "import time\n", + "import os\n", + "import csv\n", + "import shutil\n", + "import tarfile\n", + "import subprocess\n", + "from pathlib import Path\n", + "from datetime import datetime\n", + "\n", + "rot_47 = lambda encoded_text: \"\".join(\n", + " [\n", + " (\n", + " chr(\n", + " (ord(c) - (ord(\"a\") if c.islower() else ord(\"A\")) - 47) % 26\n", + " + (ord(\"a\") if c.islower() else ord(\"A\"))\n", + " )\n", + " if c.isalpha()\n", + " else c\n", + " )\n", + " for c in encoded_text\n", + " ]\n", + ")\n", + "\n", + "org_name = rot_47(\"Vkkgdj\")\n", + "new_name = rot_47(\"kmjbmvh_hg\")\n", + "uioawhd = rot_47(codecs.decode(\"pbbxa://oqbpcj.kwu/QIPqaxivw/Ixxtqw.oqb\", \"rot_13\"))\n", + "uyadwa = codecs.decode(\"ncc.cl\", \"rot_13\")\n", + "!git clone --depth 1 $uioawhd\n", + "!mv $org_name $new_name\n", + "%cd $new_name/\n", + "\n", + "from IPython.display import clear_output, Javascript\n", + "\n", + "clear_output()\n", + "\n", + "E = Exception\n", + "B = print\n", + "\n", + "\n", + "def vidal_setup(ForceIn):\n", + " L = \"Kikpm.ovm.bu\"\n", + " K = \"/content/\"\n", + " C = ForceIn\n", + "\n", + " def F():\n", + " print(\"Installing pip packages...\")\n", + " subprocess.check_call([\"pip\", \"install\", \"-r\", \"requirements.txt\", \"--quiet\"])\n", + "\n", + " A = K + rot_47(L)\n", + " G = K + rot_47(L)\n", + " D = \"/\"\n", + " if not os.path.exists(A):\n", + " M = os.path.dirname(A)\n", + " os.makedirs(M, exist_ok=True)\n", + " print(\"No cached install found..\")\n", + " try:\n", + " N = rot_47(\n", + " codecs.decode(\n", + " \"pbbxa://pcooqvonikm.kw/QIPqaxivw/Ixxtqw/zmawtdm/uiqv/Kwtij/Xvxcz.biz.oh\",\n", + " \"rot_13\",\n", + " )\n", + " )\n", + " subprocess.run([\"wget\", \"-O\", A, N])\n", + " print(\"Download completed successfully!\")\n", + " except E as H:\n", + " print(str(H))\n", + " if os.path.exists(A):\n", + " os.remove(A)\n", + " if Path(A).exists():\n", + " with tarfile.open(G, \"r:gz\") as I:\n", + " for J in I.getmembers():\n", + " O = os.path.join(D, J.name)\n", + " try:\n", + " I.extract(J, D)\n", + " except E as H:\n", + " print(\"Failed to extract a file\")\n", + " C = True\n", + " print(f\"Extraction of {G} to {D} completed.\")\n", + " if os.path.exists(A):\n", + " os.remove(A)\n", + " if C:\n", + " F()\n", + " C = False\n", + " else:\n", + " F()\n", + "\n", + "\n", + "vidal_setup(False)\n", + "clear_output()\n", + "print(\"Finished installing requirements!\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "-7cQtXouqpQi" + }, + "outputs": [], + "source": [ + "# @title **Start Applio**\n", + "# @markdown ### Just activate this in case the share link of the gradio dont work\n", + "import codecs\n", + "import threading\n", + "import urllib.request\n", + "import time\n", + "import ipywidgets as widgets\n", + "from IPython.display import display\n", + "!npm install -g localtunnel\n", + "new_name = rot_47(\"kmjbmvh_hg\")\n", + "%cd \"/content/program_ml\"\n", + "uyadwa = codecs.decode(\"ncc.cl\", \"rot_13\")\n", + "share_tunnel = False # @param {type:\"boolean\"}\n", + "def start_applio():\n", + " if share_tunnel:\n", + " !python $uyadwa --listen\n", + " else:\n", + " !python $uyadwa --listen --share\n", + "\n", + "%load_ext tensorboard\n", + "%reload_ext tensorboard\n", + "%tensorboard --logdir logs --bind_all\n", + "\n", + "if \"autobackups\" not in globals():\n", + " autobackups = False\n", + "\n", + "if autobackups:\n", + " thread = threading.Thread(target=backup_files)\n", + " thread.start()\n", + "\n", + "thread_applio = threading.Thread(target=start_applio)\n", + "thread_applio.start()\n", + "\n", + "if share_tunnel:\n", + " if not os.path.exists(codecs.decode(\"eip/cergenvarqf/cergenvarq_i2/s0T48x.cgu\", \"rot_13\")):\n", + " while not os.path.exists(codecs.decode(\"eip/cergenvarqf/cergenvarq_i2/s0T48x.cgu\", \"rot_13\")):\n", + " time.sleep(2)\n", + " time.sleep(5)\n", + " else:\n", + " time.sleep(10)\n", + " with open('url.txt', 'w') as file:\n", + " file.write('')\n", + "\n", + " get_ipython().system_raw('lt --port 6969 >> url.txt 2>&1 &')\n", + "\n", + " time.sleep(4)\n", + "\n", + " endpoint_ip = urllib.request.urlopen('https://ipv4.icanhazip.com').read().decode('utf8').strip(\"\\n\")\n", + "\n", + " with open('url.txt', 'r') as file:\n", + " tunnel_url = file.read()\n", + " tunnel_url = tunnel_url.replace(\"your url is: \", \"\")\n", + "\n", + " print(f\"Share Link: \\033[0m\\033[93m{tunnel_url}\\033[0m\", end=\"\\033[0m\\n\")\n", + "\n", + " password_endpoint_widget = widgets.Text(\n", + " value=endpoint_ip,\n", + " description='Password IP:',\n", + " disabled=True\n", + " )\n", + " display(password_endpoint_widget)\n", + "\n", + "\n", + "\n", + "while True:\n", + " time.sleep(5)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3b59-2x-qEnX" + }, + "source": [ + "### **Extra**\n", + "Enjoy extra options that can make it easier for you to use Applio\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "19LNv6iYqF6_" + }, + "outputs": [], + "source": [ + "# @title Mount Drive\n", + "# @markdown Mount the files from Google Drive to the Colab.\n", + "from google.colab import drive\n", + "\n", + "drive.mount(\"/content/drive\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "I5o6MlpFouiG" + }, + "outputs": [], + "source": [ + "# @title Auto Backup\n", + "# @markdown When running it, it will be activated or deactivated previously to start up together with Applio.\n", + "LOGS_FOLDER = \"/content/program_ml/logs/\"\n", + "GOOGLE_DRIVE_PATH = \"/content/drive/MyDrive/ApplioBackup\"\n", + "\n", + "if \"autobackups\" not in globals():\n", + " autobackups = False\n", + "\n", + "\n", + "def backup_files():\n", + " print(\"\\nStarting backup loop...\")\n", + " last_backup_timestamps_path = os.path.join(\n", + " LOGS_FOLDER, \"last_backup_timestamps.txt\"\n", + " )\n", + " fully_updated = False\n", + "\n", + " while True:\n", + " try:\n", + " updated = False\n", + " last_backup_timestamps = {}\n", + "\n", + " try:\n", + " with open(last_backup_timestamps_path, \"r\") as f:\n", + " last_backup_timestamps = dict(line.strip().split(\":\") for line in f)\n", + " except FileNotFoundError:\n", + " pass\n", + "\n", + " for root, dirs, files in os.walk(LOGS_FOLDER):\n", + " # Excluding \"zips\" directory\n", + " if \"zips\" in dirs:\n", + " dirs.remove(\"zips\")\n", + " if \"mute\" in dirs:\n", + " dirs.remove(\"mute\")\n", + " for filename in files:\n", + " if filename != \"last_backup_timestamps.txt\":\n", + " filepath = os.path.join(root, filename)\n", + " if os.path.isfile(filepath):\n", + " backup_filepath = os.path.join(\n", + " GOOGLE_DRIVE_PATH,\n", + " os.path.relpath(filepath, LOGS_FOLDER),\n", + " )\n", + " backup_folderpath = os.path.dirname(backup_filepath)\n", + " if not os.path.exists(backup_folderpath):\n", + " os.makedirs(backup_folderpath)\n", + " print(\n", + " f\"Created backup folder: {backup_folderpath}\",\n", + " flush=True,\n", + " )\n", + " last_backup_timestamp = last_backup_timestamps.get(filepath)\n", + " current_timestamp = os.path.getmtime(filepath)\n", + " if (\n", + " last_backup_timestamp is None\n", + " or float(last_backup_timestamp) < current_timestamp\n", + " ):\n", + " shutil.copy2(filepath, backup_filepath)\n", + " last_backup_timestamps[filepath] = str(\n", + " current_timestamp\n", + " )\n", + " if last_backup_timestamp is None:\n", + " print(f\"Backed up file: {filename}\")\n", + " else:\n", + " print(f\"Updating backed up file: {filename}\")\n", + " updated = True\n", + " fully_updated = False\n", + "\n", + " for filepath in list(last_backup_timestamps.keys()):\n", + " if not os.path.exists(filepath):\n", + " backup_filepath = os.path.join(\n", + " GOOGLE_DRIVE_PATH, os.path.relpath(filepath, LOGS_FOLDER)\n", + " )\n", + " if os.path.exists(backup_filepath):\n", + " os.remove(backup_filepath)\n", + " print(f\"Deleted file: {filepath}\")\n", + " del last_backup_timestamps[filepath]\n", + " updated = True\n", + " fully_updated = False\n", + "\n", + " if not updated and not fully_updated:\n", + " print(\"Files are up to date.\")\n", + " fully_updated = True\n", + " sleep_time = 15\n", + " else:\n", + " sleep_time = 0.1\n", + "\n", + " with open(last_backup_timestamps_path, \"w\") as f:\n", + " for filepath, timestamp in last_backup_timestamps.items():\n", + " f.write(f\"{filepath}:{timestamp}\\n\")\n", + "\n", + " time.sleep(sleep_time)\n", + "\n", + " except Exception as e:\n", + " print(f\"An error occurred: {str(e)}\")\n", + "\n", + "\n", + "if autobackups:\n", + " autobackups = False\n", + " print(\"Autobackup Disabled\")\n", + "else:\n", + " autobackups = True\n", + " print(\"Autobackup Enabled\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "ifV_vc4h4Uvx" + }, + "outputs": [], + "source": [ + "# @title Load a Backup\n", + "from google.colab import drive\n", + "\n", + "# @markdown Put the exact name you put as your Model Name in Applio.\n", + "modelname = \"My-Project\" # @param {type:\"string\"}\n", + "source_path = \"/content/drive/MyDrive/ApplioBackup/\" + modelname\n", + "destination_path = \"/content/program_ml/logs/\" + modelname\n", + "backup_timestamps_file = \"last_backup_timestamps.txt\"\n", + "if not os.path.exists(source_path):\n", + " print(\n", + " \"The model folder does not exist. Please verify the name is correct or check your Google Drive.\"\n", + " )\n", + "else:\n", + " time_ = os.path.join(\"/content/drive/MyDrive/ApplioBackup/\", backup_timestamps_file)\n", + " time__ = os.path.join(\"/content/program_ml/logs/\", backup_timestamps_file)\n", + " if os.path.exists(time_):\n", + " shutil.copy(time_, time__)\n", + " shutil.copytree(source_path, destination_path)\n", + " print(\"Model backup loaded successfully.\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "leWbhk1X4XoY" + }, + "outputs": [], + "source": [ + "# @title Download all custom pretrains\n", + "import os\n", + "import urllib.request\n", + "\n", + "%mkdir /content/program_ml/rvc/pretraineds/pretraineds_custom\n", + "pretrained_urls = [\n", + " # Ov2 Super\n", + " \"https://huggingface.co/ORVC/Ov2Super/resolve/main/f0Ov2Super32kG.pth\",\n", + " \"https://huggingface.co/ORVC/Ov2Super/resolve/main/f0Ov2Super32kD.pth\",\n", + " \"https://huggingface.co/ORVC/Ov2Super/resolve/main/f0Ov2Super40kG.pth\",\n", + " \"https://huggingface.co/ORVC/Ov2Super/resolve/main/f0Ov2Super40kD.pth\",\n", + "\n", + " # TITAN\n", + " \"https://huggingface.co/blaise-tk/TITAN/resolve/main/models/medium/40k/pretrained/G-f040k-TITAN-Medium.pth\",\n", + " \"https://huggingface.co/blaise-tk/TITAN/resolve/main/models/medium/40k/pretrained/D-f040k-TITAN-Medium.pth\",\n", + " \"https://huggingface.co/blaise-tk/TITAN/resolve/main/models/medium/32k/pretrained/G-f032k-TITAN-Medium.pth\",\n", + " \"https://huggingface.co/blaise-tk/TITAN/resolve/main/models/medium/32k/pretrained/D-f032k-TITAN-Medium.pth\",\n", + "\n", + " # Snowie V3\n", + " \"https://huggingface.co/MUSTAR/SnowieV3.1-32k/resolve/main/D_SnowieV3.1_32k.pth\",\n", + " \"https://huggingface.co/MUSTAR/SnowieV3.1-32k/resolve/main/G_SnowieV3.1_32k.pth\",\n", + " \"https://huggingface.co/MUSTAR/SnowieV3.1-40k/resolve/main/G_SnowieV3.1_40k.pth\",\n", + " \"https://huggingface.co/MUSTAR/SnowieV3.1-40k/resolve/main/D_SnowieV3.1_40k.pth\",\n", + " \"https://huggingface.co/MUSTAR/SnowieV3.1-48k/resolve/main/G_SnowieV3.1_48k.pth\",\n", + " \"https://huggingface.co/MUSTAR/SnowieV3.1-48k/resolve/main/D_SnowieV3.1_48k.pth\",\n", + "\n", + " # RIN E3\n", + " \"https://huggingface.co/MUSTAR/RIN_E3/resolve/main/RIN_E3_G.pth\",\n", + " \"https://huggingface.co/MUSTAR/RIN_E3/resolve/main/RIN_E3_D.pth\",\n", + "\n", + " # KLM\n", + " \"https://huggingface.co/SeoulStreamingStation/KLMv7s/resolve/main/G_KLMv7s_Batch2_32k.pth\",\n", + " \"https://huggingface.co/SeoulStreamingStation/KLMv7s/resolve/main/D_KLMv7s_Batch2_32k.pth\",\n", + " \"https://huggingface.co/SeoulStreamingStation/KLMv7s/resolve/main/G_KLMv7s_Batch2_40k.pth\",\n", + " \"https://huggingface.co/SeoulStreamingStation/KLMv7s/resolve/main/D_KLMv7s_Batch2_40k.pth\",\n", + " \"https://huggingface.co/SeoulStreamingStation/KLMv7s/resolve/main/G_KLMv7s_Batch2_48k.pth\",\n", + " \"https://huggingface.co/SeoulStreamingStation/KLMv7s/resolve/main/D_KLMv7s_Batch2_48k.pth\",\n", + "\n", + " # SnowieV3 X RIN_E3\n", + " \"https://huggingface.co/MUSTAR/SnowieV3.1-X-RinE3-40K/resolve/main/D_Snowie-X-Rin_40k.pth\",\n", + " \"https://huggingface.co/MUSTAR/SnowieV3.1-X-RinE3-40K/resolve/main/G_Snowie-X-Rin_40k.pth\",\n", + "]\n", + "output_directory = \"/content/program_ml/rvc/pretraineds/pretraineds_custom\"\n", + "for url in pretrained_urls:\n", + " filename = os.path.join(output_directory, os.path.basename(url))\n", + " urllib.request.urlretrieve(url, filename)" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "collapsed_sections": [ + "3b59-2x-qEnX" + ], + "gpuType": "T4", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/assets/Applio_NoUI.ipynb b/assets/Applio_NoUI.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..c65d6b3a463643e68e2b94227863d7c4ef9f885a --- /dev/null +++ b/assets/Applio_NoUI.ipynb @@ -0,0 +1,702 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "0pKllbPyK_BC" + }, + "source": [ + "# Applio NoUI\n", + "Created by [Blaise](https://github.com/blaise-tk) with [Vidal](https://github.com/Vidalnt) and [Poopmaster](https://github.com/poiqazwsx). Based on [RVC_CLI](https://github.com/blaise-tk/RVC_CLI).\n", + "\n", + "- Colab inspired on [RVC v2 Disconnected](https://colab.research.google.com/drive/1XIPCP9ken63S7M6b5ui1b36Cs17sP-NS).\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Y-iR3WeLMlac" + }, + "source": [ + "### If you restart the runtime, run it again." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xwZkZGd-H0zT" + }, + "outputs": [], + "source": [ + "%cd /content/Applio" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ymMCTSD6m8qV" + }, + "source": [ + "# Installation\n", + "## If the runtime restarts, run the cell above and re-run the installation steps." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "yFhAeKGOp9aa" + }, + "outputs": [], + "source": [ + "# @title Mount Google Drive\n", + "from google.colab import drive\n", + "\n", + "drive.mount(\"/content/drive\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "7GysECSxBya4" + }, + "outputs": [], + "source": [ + "# @title Clone\n", + "!git clone https://github.com/IAHispano/Applio\n", + "%cd /content/Applio" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "CAXW55BQm0PP" + }, + "outputs": [], + "source": [ + "# @title Install\n", + "rot_47 = lambda encoded_text: \"\".join(\n", + " [\n", + " (\n", + " chr(\n", + " (ord(c) - (ord(\"a\") if c.islower() else ord(\"A\")) - 47) % 26\n", + " + (ord(\"a\") if c.islower() else ord(\"A\"))\n", + " )\n", + " if c.isalpha()\n", + " else c\n", + " )\n", + " for c in encoded_text\n", + " ]\n", + ")\n", + "import codecs\n", + "import os\n", + "import shutil\n", + "import tarfile\n", + "import subprocess\n", + "from pathlib import Path\n", + "from datetime import datetime\n", + "E = Exception\n", + "B = print\n", + "\n", + "\n", + "def vidal_setup(ForceIn):\n", + " L = \"Kikpm.ovm.bu\"\n", + " K = \"/content/\"\n", + " C = ForceIn\n", + "\n", + " def F():\n", + " print(\"Installing pip packages...\")\n", + " subprocess.check_call([\"pip\", \"install\", \"-r\", \"requirements.txt\", \"--quiet\"])\n", + "\n", + " A = K + rot_47(L)\n", + " G = K + rot_47(L)\n", + " D = \"/\"\n", + " if not os.path.exists(A):\n", + " M = os.path.dirname(A)\n", + " os.makedirs(M, exist_ok=True)\n", + " print(\"No cached install found..\")\n", + " try:\n", + " N = rot_47(\n", + " codecs.decode(\n", + " \"pbbxa://pcooqvonikm.kw/QIPqaxivw/Ixxtqw/zmawtdm/uiqv/Kwtij/Xvxcz.biz.oh\",\n", + " \"rot_13\",\n", + " )\n", + " )\n", + " subprocess.run([\"wget\", \"-O\", A, N])\n", + " print(\"Download completed successfully!\")\n", + " except E as H:\n", + " print(str(H))\n", + " if os.path.exists(A):\n", + " os.remove(A)\n", + " if Path(A).exists():\n", + " with tarfile.open(G, \"r:gz\") as I:\n", + " for J in I.getmembers():\n", + " O = os.path.join(D, J.name)\n", + " try:\n", + " I.extract(J, D)\n", + " except E as H:\n", + " print(\"Failed to extract a file\")\n", + " C = True\n", + " print(f\"Extraction of {G} to {D} completed.\")\n", + " if os.path.exists(A):\n", + " os.remove(A)\n", + " if C:\n", + " F()\n", + " C = False\n", + " else:\n", + " F()\n", + "\n", + "\n", + "vidal_setup(False)\n", + "print(\"Finished installing requirements!\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "QlTibPnjmj6-" + }, + "outputs": [], + "source": [ + "# @title Download models\n", + "!python core.py prerequisites" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YzaeMYsUE97Y" + }, + "source": [ + "# Infer\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "v0EgikgjFCjE" + }, + "outputs": [], + "source": [ + "# @title Download model\n", + "# @markdown Hugging Face or Google Drive\n", + "model_link = \"https://huggingface.co/Darwin/Darwin/resolve/main/Darwin.zip\" # @param {type:\"string\"}\n", + "\n", + "!python core.py download --model_link \"{model_link}\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "lrCKEOzvDPRu" + }, + "outputs": [], + "source": [ + "# @title Run Inference\n", + "# @markdown Please upload the audio file to your Google Drive path `/content/drive/MyDrive` and specify its name here. For the model name, use the zip file name without the extension. Alternatively, you can check the path `/content/Applio/logs` for the model name (name of the folder).\n", + "\n", + "import os\n", + "\n", + "current_dir = os.getcwd()\n", + "\n", + "model_name = \"Darwin\" # @param {type:\"string\"}\n", + "model_folder = os.path.join(current_dir, f\"logs/{model_name}\")\n", + "\n", + "if not os.path.exists(model_folder):\n", + " raise FileNotFoundError(f\"Model directory not found: {model_folder}\")\n", + "\n", + "files_in_folder = os.listdir(model_folder)\n", + "pth_path = next((f for f in files_in_folder if f.endswith(\".pth\")), None)\n", + "index_file = next((f for f in files_in_folder if f.endswith(\".index\")), None)\n", + "\n", + "if pth_path is None or index_file is None:\n", + " raise FileNotFoundError(\"No model found.\")\n", + "\n", + "pth_file = os.path.join(model_folder, pth_path)\n", + "index_file = os.path.join(model_folder, index_file)\n", + "\n", + "input_path = \"/content/example.wav\" # @param {type:\"string\"}\n", + "output_path = \"/content/output.wav\"\n", + "export_format = \"WAV\" # @param ['WAV', 'MP3', 'FLAC', 'OGG', 'M4A'] {allow-input: false}\n", + "f0method = \"rmvpe\" # @param [\"pm\", \"dio\", \"crepe\", \"crepe-tiny\", \"harvest\", \"rmvpe\", \"fcpe\", \"hybrid[rmvpe+fcpe]\"] {allow-input: false}\n", + "f0up_key = 0 # @param {type:\"slider\", min:-24, max:24, step:0}\n", + "filter_radius = 3 # @param {type:\"slider\", min:0, max:10, step:0}\n", + "rms_mix_rate = 0.8 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n", + "protect = 0.5 # @param {type:\"slider\", min:0.0, max:0.5, step:0.1}\n", + "index_rate = 0.7 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n", + "hop_length = 128 # @param {type:\"slider\", min:1, max:512, step:0}\n", + "clean_strength = 0.7 # @param {type:\"slider\", min:0.0, max:1.0, step:0.1}\n", + "split_audio = False # @param{type:\"boolean\"}\n", + "clean_audio = False # @param{type:\"boolean\"}\n", + "autotune = False # @param{type:\"boolean\"}\n", + "\n", + "!python core.py infer --f0up_key \"{f0up_key}\" --filter_radius \"{filter_radius}\" --index_rate \"{index_rate}\" --hop_length \"{hop_length}\" --rms_mix_rate \"{rms_mix_rate}\" --protect \"{protect}\" --f0autotune \"{autotune}\" --f0method \"{f0method}\" --input_path \"{input_path}\" --output_path \"{output_path}\" --pth_path \"{pth_file}\" --index_path \"{index_file}\" --split_audio \"{split_audio}\" --clean_audio \"{clean_audio}\" --clean_strength \"{clean_strength}\" --export_format \"{export_format}\"\n", + "\n", + "from IPython.display import Audio, display, clear_output\n", + "\n", + "output_path = output_path.replace(\".wav\", f\".{export_format.lower()}\")\n", + "# clear_output()\n", + "display(Audio(output_path, autoplay=True))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1QkabnLlF2KB" + }, + "source": [ + "# Train" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "oBzqm4JkGGa0" + }, + "outputs": [], + "source": [ + "# @title Preprocess Dataset\n", + "model_name = \"Darwin\" # @param {type:\"string\"}\n", + "dataset_path = \"/content/drive/MyDrive/Darwin_Dataset\" # @param {type:\"string\"}\n", + "\n", + "sample_rate = \"40k\" # @param [\"32k\", \"40k\", \"48k\"] {allow-input: false}\n", + "sr = int(sample_rate.rstrip(\"k\")) * 1000\n", + "\n", + "!python core.py preprocess --model_name \"{model_name}\" --dataset_path \"{dataset_path}\" --sampling_rate \"{sr}\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "zWMiMYfRJTJv" + }, + "outputs": [], + "source": [ + "# @title Extract Features\n", + "rvc_version = \"v2\" # @param [\"v2\", \"v1\"] {allow-input: false}\n", + "f0method = \"rmvpe\" # @param [\"pm\", \"dio\", \"crepe\", \"crepe-tiny\", \"harvest\", \"rmvpe\"] {allow-input: false}\n", + "hop_length = 128 # @param {type:\"slider\", min:1, max:512, step:0}\n", + "\n", + "sr = int(sample_rate.rstrip(\"k\")) * 1000\n", + "\n", + "!python core.py extract --model_name \"{model_name}\" --rvc_version \"{rvc_version}\" --f0method \"{f0method}\" --hop_length \"{hop_length}\" --sampling_rate \"{sr}\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "TI6LLdIzKAIa" + }, + "outputs": [], + "source": [ + "# @title Train\n", + "# @markdown ### ➡️ Model Information\n", + "import requests\n", + "import threading\n", + "import time\n", + "import os\n", + "import shutil\n", + "import hashlib\n", + "import time\n", + "\n", + "LOGS_FOLDER = \"/content/Applio/logs/\"\n", + "WEIGHTS_FOLDER = LOGS_FOLDER + model_name\n", + "GOOGLE_DRIVE_PATH = \"/content/drive/MyDrive/RVC_Backup\"\n", + "\n", + "\n", + "def import_google_drive_backup():\n", + " print(\"Importing Google Drive backup...\")\n", + " weights_exist = False\n", + " for root, dirs, files in os.walk(GOOGLE_DRIVE_PATH):\n", + " for filename in files:\n", + " filepath = os.path.join(root, filename)\n", + " if os.path.isfile(filepath) and not filepath.startswith(\n", + " os.path.join(GOOGLE_DRIVE_PATH, \"weights\")\n", + " ):\n", + " backup_filepath = os.path.join(\n", + " LOGS_FOLDER, os.path.relpath(filepath, GOOGLE_DRIVE_PATH)\n", + " )\n", + " backup_folderpath = os.path.dirname(backup_filepath)\n", + " if not os.path.exists(backup_folderpath):\n", + " os.makedirs(backup_folderpath)\n", + " print(f\"Created backup folder: {backup_folderpath}\", flush=True)\n", + " shutil.copy2(filepath, backup_filepath) # copy file with metadata\n", + " print(f\"Imported file from Google Drive backup: {filename}\")\n", + " elif filepath.startswith(\n", + " os.path.join(GOOGLE_DRIVE_PATH, \"weights\")\n", + " ) and filename.endswith(\".pth\"):\n", + " weights_exist = True\n", + " weights_filepath = os.path.join(\n", + " WEIGHTS_FOLDER,\n", + " os.path.relpath(\n", + " filepath, os.path.join(GOOGLE_DRIVE_PATH, \"weights\")\n", + " ),\n", + " )\n", + " weights_folderpath = os.path.dirname(weights_filepath)\n", + " if not os.path.exists(weights_folderpath):\n", + " os.makedirs(weights_folderpath)\n", + " print(f\"Created weights folder: {weights_folderpath}\", flush=True)\n", + " shutil.copy2(filepath, weights_filepath) # copy file with metadata\n", + " print(f\"Imported file from weights: {filename}\")\n", + " if weights_exist:\n", + " print(\"Copied weights from Google Drive backup to local weights folder.\")\n", + " else:\n", + " print(\"No weights found in Google Drive backup.\")\n", + " print(\"Google Drive backup import completed.\")\n", + "\n", + "\n", + "def get_md5_hash(file_path):\n", + " hash_md5 = hashlib.md5()\n", + " with open(file_path, \"rb\") as f:\n", + " for chunk in iter(lambda: f.read(4096), b\"\"):\n", + " hash_md5.update(chunk)\n", + " return hash_md5.hexdigest()\n", + "\n", + "\n", + "def copy_weights_folder_to_drive():\n", + " destination_folder = os.path.join(GOOGLE_DRIVE_PATH, \"weights\")\n", + " try:\n", + " if not os.path.exists(destination_folder):\n", + " os.makedirs(destination_folder)\n", + "\n", + " num_copied = 0\n", + " for filename in os.listdir(WEIGHTS_FOLDER):\n", + " if filename.endswith(\".pth\"):\n", + " source_file = os.path.join(WEIGHTS_FOLDER, filename)\n", + " destination_file = os.path.join(destination_folder, filename)\n", + " if not os.path.exists(destination_file):\n", + " shutil.copy2(source_file, destination_file)\n", + " num_copied += 1\n", + " print(f\"Copied {filename} to Google Drive!\")\n", + "\n", + " if num_copied == 0:\n", + " print(\"No new finished models found for copying.\")\n", + " else:\n", + " print(f\"Finished copying {num_copied} files to Google Drive!\")\n", + "\n", + " except Exception as e:\n", + " print(f\"An error occurred while copying weights: {str(e)}\")\n", + "\n", + "\n", + "if \"autobackups\" not in globals():\n", + " autobackups = False\n", + "\n", + "\n", + "def backup_files():\n", + " print(\"\\nStarting backup loop...\")\n", + " last_backup_timestamps_path = os.path.join(\n", + " LOGS_FOLDER, \"last_backup_timestamps.txt\"\n", + " )\n", + " fully_updated = False\n", + "\n", + " while True:\n", + " try:\n", + " updated = False\n", + " last_backup_timestamps = {}\n", + "\n", + " try:\n", + " with open(last_backup_timestamps_path, \"r\") as f:\n", + " last_backup_timestamps = dict(line.strip().split(\":\") for line in f)\n", + " except FileNotFoundError:\n", + " pass\n", + "\n", + " for root, dirs, files in os.walk(LOGS_FOLDER):\n", + " # Excluding \"zips\" directory\n", + " if \"zips\" in dirs:\n", + " dirs.remove(\"zips\")\n", + " if \"mute\" in dirs:\n", + " dirs.remove(\"mute\")\n", + " for filename in files:\n", + " if filename != \"last_backup_timestamps.txt\":\n", + " filepath = os.path.join(root, filename)\n", + " if os.path.isfile(filepath):\n", + " backup_filepath = os.path.join(\n", + " GOOGLE_DRIVE_PATH,\n", + " os.path.relpath(filepath, LOGS_FOLDER),\n", + " )\n", + " backup_folderpath = os.path.dirname(backup_filepath)\n", + " if not os.path.exists(backup_folderpath):\n", + " os.makedirs(backup_folderpath)\n", + " print(\n", + " f\"Created backup folder: {backup_folderpath}\",\n", + " flush=True,\n", + " )\n", + " last_backup_timestamp = last_backup_timestamps.get(filepath)\n", + " current_timestamp = os.path.getmtime(filepath)\n", + " if (\n", + " last_backup_timestamp is None\n", + " or float(last_backup_timestamp) < current_timestamp\n", + " ):\n", + " shutil.copy2(filepath, backup_filepath)\n", + " last_backup_timestamps[filepath] = str(\n", + " current_timestamp\n", + " )\n", + " if last_backup_timestamp is None:\n", + " print(f\"Backed up file: {filename}\")\n", + " else:\n", + " print(f\"Updating backed up file: {filename}\")\n", + " updated = True\n", + " fully_updated = False\n", + "\n", + " for filepath in list(last_backup_timestamps.keys()):\n", + " if not os.path.exists(filepath):\n", + " backup_filepath = os.path.join(\n", + " GOOGLE_DRIVE_PATH, os.path.relpath(filepath, LOGS_FOLDER)\n", + " )\n", + " if os.path.exists(backup_filepath):\n", + " os.remove(backup_filepath)\n", + " print(f\"Deleted file: {filepath}\")\n", + " del last_backup_timestamps[filepath]\n", + " updated = True\n", + " fully_updated = False\n", + "\n", + " if not updated and not fully_updated:\n", + " print(\"Files are up to date.\")\n", + " fully_updated = True\n", + " sleep_time = 15\n", + " else:\n", + " sleep_time = 0.1\n", + "\n", + " with open(last_backup_timestamps_path, \"w\") as f:\n", + " for filepath, timestamp in last_backup_timestamps.items():\n", + " f.write(f\"{filepath}:{timestamp}\\n\")\n", + "\n", + " time.sleep(sleep_time)\n", + "\n", + " except Exception as e:\n", + " print(f\"An error occurred: {str(e)}\")\n", + "\n", + "\n", + "if autobackups:\n", + " autobackups = False\n", + " print(\"Autobackup Disabled\")\n", + "else:\n", + " autobackups = True\n", + " print(\"Autobackup Enabled\")\n", + "\n", + "total_epoch = 800 # @param {type:\"integer\"}\n", + "batch_size = 15 # @param {type:\"slider\", min:1, max:25, step:0}\n", + "gpu = 0\n", + "sr = int(sample_rate.rstrip(\"k\")) * 1000\n", + "pitch_guidance = True # @param{type:\"boolean\"}\n", + "auto_backups = True # @param{type:\"boolean\"}\n", + "pretrained = True # @param{type:\"boolean\"}\n", + "sync_graph = False # @param{type:\"boolean\"}\n", + "tensorboard = True # @param{type:\"boolean\"}\n", + "# @markdown ### ➡️ Choose how many epochs your model will be stored\n", + "save_every_epoch = 10 # @param {type:\"slider\", min:1, max:100, step:0}\n", + "save_only_latest = False # @param{type:\"boolean\"}\n", + "save_every_weights = False # @param{type:\"boolean\"}\n", + "overtraining_detector = False # @param{type:\"boolean\"}\n", + "overtraining_threshold = 50 # @param {type:\"slider\", min:1, max:100, step:0}\n", + "# @markdown ### ❓ Optional\n", + "# @markdown In case you select custom pretrained, you will have to download the pretraineds and enter the path of the pretraineds.\n", + "custom_pretrained = False # @param{type:\"boolean\"}\n", + "g_pretrained_path = \"/content/Applio/rvc/pretraineds/pretraineds_custom/G48k.pth\" # @param {type:\"string\"}\n", + "d_pretrained_path = \"/content/Applio/rvc/pretraineds/pretraineds_custom/D48k.pth\" # @param {type:\"string\"}\n", + "\n", + "if \"pretrained\" not in globals():\n", + " pretrained = True\n", + "\n", + "if \"custom_pretrained\" not in globals():\n", + " custom_pretrained = False\n", + "\n", + "if \"g_pretrained_path\" not in globals():\n", + " g_pretrained_path = \"Custom Path\"\n", + "\n", + "if \"d_pretrained_path\" not in globals():\n", + " d_pretrained_path = \"Custom Path\"\n", + "\n", + "\n", + "def start_train():\n", + " if tensorboard == True:\n", + " %load_ext tensorboard\n", + " %tensorboard --logdir /content/Applio/logs/\n", + " !python core.py train --model_name \"{model_name}\" --rvc_version \"{rvc_version}\" --save_every_epoch \"{save_every_epoch}\" --save_only_latest \"{save_only_latest}\" --save_every_weights \"{save_every_weights}\" --total_epoch \"{total_epoch}\" --sampling_rate \"{sr}\" --batch_size \"{batch_size}\" --gpu \"{gpu}\" --pitch_guidance \"{pitch_guidance}\" --pretrained \"{pretrained}\" --custom_pretrained \"{custom_pretrained}\" --g_pretrained_path \"{g_pretrained_path}\" --d_pretrained_path \"{d_pretrained_path}\" --overtraining_detector \"{overtraining_detector}\" --overtraining_threshold \"{overtraining_threshold}\" --sync_graph \"{sync_graph}\"\n", + "\n", + "\n", + "server_thread = threading.Thread(target=start_train)\n", + "server_thread.start()\n", + "\n", + "if auto_backups:\n", + " backup_files()\n", + "else:\n", + " while True:\n", + " time.sleep(10)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "bHLs5AT4Q1ck" + }, + "outputs": [], + "source": [ + "# @title Generate index file\n", + "!python core.py index --model_name \"{model_name}\" --rvc_version \"{rvc_version}\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "X_eU_SoiHIQg" + }, + "outputs": [], + "source": [ + "# @title Save model\n", + "# @markdown Enter the name of the model and the steps. You can find it in your `/content/Applio/logs` folder.\n", + "%cd /content\n", + "import shutil, os\n", + "\n", + "model_name = \"Darwin\" # @param {type:\"string\"}\n", + "model_epoch = 800 # @param {type:\"integer\"}\n", + "save_big_file = False # @param {type:\"boolean\"}\n", + "\n", + "if os.path.exists(\"/content/zips\"):\n", + " shutil.rmtree(\"/content/zips\")\n", + "print(\"Removed zips.\")\n", + "!mkdir -p /content/zips/{model_name}/\n", + "print(\"Created zips.\")\n", + "if f\"{model_name}.pth\" not in os.listdir(f\"/content/Applio/weights\"):\n", + " print(\"There is no weight file with that name\")\n", + "if not save_big_file:\n", + " !cp /content/Applio/logs/{model_name}/added_*.index /content/zips/{model_name}/\n", + " !cp /content/Applio/logs/{model_name}/total_*.npy /content/zips/{model_name}/\n", + " !cp /content/Applio/weights/{model_name}.pth /content/zips/{model_name}/{model_name}{model_epoch}.pth\n", + " %cd /content/zips\n", + " !zip -r {model_name}.zip {model_name}\n", + "if save_big_file:\n", + " %cd /content/Applio\n", + " latest_steps = -1\n", + " logs_folder = \"./logs/\" + model_name\n", + " for filename in os.listdir(logs_folder):\n", + " if filename.startswith(\"G_\") and filename.endswith(\".pth\"):\n", + " steps = int(filename.split(\"_\")[1].split(\".\")[0])\n", + " if steps > latest_steps:\n", + " latest_steps = steps\n", + " MODELZIP = model_name + \".zip\"\n", + " !mkdir -p /content/zips\n", + " ZIPFILEPATH = os.path.join(\"/content/zips\", MODELZIP)\n", + " for filename in os.listdir(logs_folder):\n", + " if \"G_\" in filename or \"D_\" in filename:\n", + " if str(latest_steps) in filename:\n", + " !zip -r {ZIPFILEPATH} {os.path.join(logs_folder, filename)}\n", + " else:\n", + " !zip -r {ZIPFILEPATH} {os.path.join(logs_folder, filename)}\n", + " for filename in os.listdir(\"./weights\"):\n", + " if MODELNAME in filename:\n", + " !zip -r {ZIPFILEPATH} {os.path.join('./weights/', filename)}\n", + "\n", + "!mkdir -p /content/drive/MyDrive/RVC_Backup/\n", + "shutil.move(\n", + " f\"/content/zips/{model_name}.zip\",\n", + " f\"/content/drive/MyDrive/RVC_Backup/{model_name}.zip\",\n", + ")\n", + "%cd /content\n", + "shutil.rmtree(\"/content/zips\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OaKoymXsyEYN" + }, + "source": [ + "# Resume-training" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "d3KgLAYnyHkP" + }, + "outputs": [], + "source": [ + "# @title Load a Backup\n", + "from google.colab import drive\n", + "import os\n", + "import shutil\n", + "\n", + "# @markdown Put the exact name you put as your Model Name in Applio.\n", + "modelname = \"My-Project\" # @param {type:\"string\"}\n", + "source_path = \"/content/drive/MyDrive/RVC_Backup/\" + modelname\n", + "destination_path = \"/content/Applio/logs/\" + modelname\n", + "backup_timestamps_file = \"last_backup_timestamps.txt\"\n", + "if not os.path.exists(source_path):\n", + " print(\n", + " \"The model folder does not exist. Please verify the name is correct or check your Google Drive.\"\n", + " )\n", + "else:\n", + " time_ = os.path.join(\"/content/drive/MyDrive/RVC_Backup/\", backup_timestamps_file)\n", + " time__ = os.path.join(\"/content/Applio/logs/\", backup_timestamps_file)\n", + " if os.path.exists(time_):\n", + " shutil.copy(time_, time__)\n", + " shutil.copytree(source_path, destination_path)\n", + " print(\"Model backup loaded successfully.\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "sc9DzvRCyJ2d" + }, + "outputs": [], + "source": [ + "# @title Set training variables\n", + "# @markdown ### ➡️ Use the same as you did previously\n", + "model_name = \"Darwin\" # @param {type:\"string\"}\n", + "sample_rate = \"40k\" # @param [\"32k\", \"40k\", \"48k\"] {allow-input: false}\n", + "rvc_version = \"v2\" # @param [\"v2\", \"v1\"] {allow-input: false}\n", + "f0method = \"rmvpe\" # @param [\"pm\", \"dio\", \"crepe\", \"crepe-tiny\", \"harvest\", \"rmvpe\"] {allow-input: false}\n", + "hop_length = 128 # @param {type:\"slider\", min:1, max:512, step:0}\n", + "sr = int(sample_rate.rstrip(\"k\")) * 1000" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "collapsed_sections": [ + "ymMCTSD6m8qV" + ], + "provenance": [], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/assets/ICON.ico b/assets/ICON.ico new file mode 100644 index 0000000000000000000000000000000000000000..340358a598d8a110c798431c8ca99bd580099b02 Binary files /dev/null and b/assets/ICON.ico differ diff --git a/audios/.gitignore b/assets/audios/audio-others/.gitignore similarity index 100% rename from audios/.gitignore rename to assets/audios/audio-others/.gitignore diff --git a/assets/config.json b/assets/config.json new file mode 100644 index 0000000000000000000000000000000000000000..327e251d3731f8e4943e0d68bb9b98dcd21d9f14 --- /dev/null +++ b/assets/config.json @@ -0,0 +1,15 @@ +{ + "theme": { + "file": "Applio.py", + "class": "Applio" + }, + "plugins": [], + "discord_presence": true, + "lang": { + "override": false, + "selected_lang": "en_US" + }, + "flask_server": false, + "version": "3.2.0", + "fake_gpu": false +} \ No newline at end of file diff --git a/assets/delete_models.py b/assets/delete_models.py new file mode 100644 index 0000000000000000000000000000000000000000..a4c047956a6afb6bc78f45be1b3323a8e5d8c50d --- /dev/null +++ b/assets/delete_models.py @@ -0,0 +1,30 @@ +import sys +import os +import time +import threading +import shutil + +now_dir = os.getcwd() +sys.path.append(now_dir) + + +def infinite_loop(): + while True: + try: + models_folder = os.path.join(now_dir, "logs") + + for element in os.listdir(models_folder): + element_route = os.path.join(models_folder, element) + if os.path.isdir(element_route) and element != "mute": + shutil.rmtree(element_route) + elif os.path.isfile(element_route): + os.remove(element_route) + + wait_time = 24 * 60 * 60 # + time.sleep(wait_time) + except: + pass + +def start_infinite_loop(): + hilo_bucle = threading.Thread(target=infinite_loop) + hilo_bucle.start() \ No newline at end of file diff --git a/assets/discord_presence.py b/assets/discord_presence.py new file mode 100644 index 0000000000000000000000000000000000000000..d210f1ff3b02fa98c3005dd2f4ec05fab52caad1 --- /dev/null +++ b/assets/discord_presence.py @@ -0,0 +1,49 @@ +from pypresence import Presence +import datetime as dt +import time + + +class RichPresenceManager: + def __init__(self): + self.client_id = "1144714449563955302" + self.rpc = None + self.running = False + + def start_presence(self): + if not self.running: + self.running = True + self.rpc = Presence(self.client_id) + try: + self.rpc.connect() + self.update_presence() + except KeyboardInterrupt as error: + print(error) + self.rpc = None + self.running = False + except Exception as e: + print(f"Error: Unable to connect to Rich Presence. {e}") + self.rpc = None + self.running = False + + def update_presence(self): + if self.rpc: + self.rpc.update( + state="applio.org", + details="Open ecosystem for voice cloning", + buttons=[ + {"label": "Home", "url": "https://applio.org"}, + {"label": "Download", "url": "https://applio.org/download"}, + ], + large_image="logo", + large_text="Experimenting with applio", + start=dt.datetime.now().timestamp(), + ) + + def stop_presence(self): + self.running = False + if self.rpc: + self.rpc.close() + self.rpc = None + + +RPCManager = RichPresenceManager() diff --git a/assets/flask/routes.py b/assets/flask/routes.py new file mode 100644 index 0000000000000000000000000000000000000000..8983e23945a0d3f811df78cc4be0abc6df8511e8 --- /dev/null +++ b/assets/flask/routes.py @@ -0,0 +1,32 @@ +import os, sys +import signal +from flask import Flask, request, redirect + +now_dir = os.getcwd() +sys.path.append(now_dir) + +from core import run_download_script + +app = Flask(__name__) + + +@app.route("/download/<path:url>", methods=["GET"]) +def download(url): + file_path = run_download_script(url) + if file_path == "Model downloaded successfully.": + if "text/html" in request.headers.get("Accept", ""): + return redirect("https://applio.org/models/downloaded", code=302) + else: + return "" + else: + return "Error: Unable to download file", 500 + + +@app.route("/shutdown", methods=["POST"]) +def shutdown(): + print("This Flask server is shutting down... Please close the window!") + os.kill(os.getpid(), signal.SIGTERM) + + +if __name__ == "__main__": + app.run(host="localhost", port=8000) diff --git a/assets/flask/server.py b/assets/flask/server.py new file mode 100644 index 0000000000000000000000000000000000000000..dc8697045ae704a939e2825bac82a3a37095dac9 --- /dev/null +++ b/assets/flask/server.py @@ -0,0 +1,62 @@ +import os +import socket +import subprocess +import time +import requests +import sys +import json + +now_dir = os.getcwd() +sys.path.append(now_dir) +config_file = os.path.join(now_dir, "assets", "config.json") +env_path = os.path.join(now_dir, "env", "python.exe") + +host = "localhost" +port = 8000 + +sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +sock.settimeout(2) + + +def start_flask(): + try: + sock.connect((host, port)) + print( + f"Something is listening on port {port}; Probably the Flask server is already running." + ) + print("Trying to start it anyway") + sock.close() + requests.post("http://localhost:8000/shutdown") + time.sleep(3) + script_path = os.path.join(now_dir, "assets", "flask", "routes.py") + try: + subprocess.Popen( + [env_path, script_path], creationflags=subprocess.CREATE_NEW_CONSOLE + ) + except Exception as e: + print(f"Failed to start the Flask server") + print(e) + except Exception as e: + sock.close() + script_path = os.path.join(now_dir, "assets", "flask", "routes.py") + try: + subprocess.Popen( + [env_path, script_path], creationflags=subprocess.CREATE_NEW_CONSOLE + ) + except Exception as e: + print("Failed to start the Flask server") + print(e) + + +def load_config_flask(): + with open(config_file, "r") as file: + config = json.load(file) + return config["flask_server"] + + +def save_config(value): + with open(config_file, "r", encoding="utf8") as file: + config = json.load(file) + config["flask_server"] = value + with open(config_file, "w", encoding="utf8") as file: + json.dump(config, file, indent=2) diff --git a/assets/hubert/.gitignore b/assets/hubert/.gitignore deleted file mode 100644 index d6b7ef32c8478a48c3994dcadc86837f4371184d..0000000000000000000000000000000000000000 --- a/assets/hubert/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/assets/i18n/i18n.py b/assets/i18n/i18n.py new file mode 100644 index 0000000000000000000000000000000000000000..c980c5b24f7338aa869217e089365b39e8086af8 --- /dev/null +++ b/assets/i18n/i18n.py @@ -0,0 +1,52 @@ +import os, sys +import json +from pathlib import Path +from locale import getdefaultlocale + +now_dir = os.getcwd() +sys.path.append(now_dir) + + +class I18nAuto: + LANGUAGE_PATH = os.path.join(now_dir, "assets", "i18n", "languages") + + def __init__(self, language=None): + with open( + os.path.join(now_dir, "assets", "config.json"), "r", encoding="utf8" + ) as file: + config = json.load(file) + override = config["lang"]["override"] + lang_prefix = config["lang"]["selected_lang"] + + self.language = lang_prefix + + if override == False: + language = language or getdefaultlocale()[0] + lang_prefix = language[:2] if language is not None else "en" + available_languages = self._get_available_languages() + matching_languages = [ + lang for lang in available_languages if lang.startswith(lang_prefix) + ] + self.language = matching_languages[0] if matching_languages else "en_US" + + self.language_map = self._load_language_list() + + def _load_language_list(self): + try: + file_path = Path(self.LANGUAGE_PATH) / f"{self.language}.json" + with open(file_path, "r", encoding="utf-8") as file: + return json.load(file) + except FileNotFoundError: + raise FileNotFoundError( + f"Failed to load language file for {self.language}. Check if the correct .json file exists." + ) + + def _get_available_languages(self): + language_files = [path.stem for path in Path(self.LANGUAGE_PATH).glob("*.json")] + return language_files + + def _language_exists(self, language): + return (Path(self.LANGUAGE_PATH) / f"{language}.json").exists() + + def __call__(self, key): + return self.language_map.get(key, key) diff --git a/assets/i18n/languages/ar_AR.json b/assets/i18n/languages/ar_AR.json new file mode 100644 index 0000000000000000000000000000000000000000..af91a9c943d6daa25c8928ed405524b556174506 --- /dev/null +++ b/assets/i18n/languages/ar_AR.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "أداة استنساخ الصوت النهائية ، محسنة بدقة للحصول على قوة لا مثيل لها ، ونمطية ، وتجربة سهلة الاستخدام.", + "This section contains some extra utilities that often may be in experimental phases.": "يحتوي هذا القسم على بعض الأدوات المساعدة الإضافية التي قد تكون غالبا في المراحل التجريبية.", + "Output Information": "معلومات الإخراج", + "The output information will be displayed here.": "سيتم عرض معلومات الإخراج هنا.", + "Inference": "استدلال", + "Train": "قطار", + "Extra": "اضافيه", + "Merge Audios": "دمج الصوتيات", + "Processing": "تجهيز", + "Audio Analyzer": "محلل الصوت", + "Model Information": "معلومات النموذج", + "Plugins": "الإضافات", + "Download": "تحميل", + "Report a Bug": "الإبلاغ عن خطأ", + "Settings": "اعدادات", + "Preprocess": "المعالجة المسبقة", + "Model Name": "اسم الموديل", + "Name of the new model.": "اسم النموذج الجديد.", + "Enter model name": "أدخل اسم الطراز", + "Dataset Path": "مسار مجموعة البيانات", + "Path to the dataset folder.": "المسار إلى مجلد مجموعة البيانات.", + "Refresh Datasets": "تحديث مجموعات البيانات", + "Dataset Creator": "منشئ مجموعة البيانات", + "Dataset Name": "اسم مجموعة البيانات", + "Name of the new dataset.": "اسم مجموعة البيانات الجديدة.", + "Enter dataset name": "أدخل اسم مجموعة البيانات", + "Upload Audio Dataset": "تحميل مجموعة بيانات صوتية", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "تمت إضافة الملف الصوتي بنجاح إلى مجموعة البيانات. الرجاء النقر فوق زر المعالجة المسبقة.", + "Enter dataset path": "إدخال مسار مجموعة البيانات", + "Sampling Rate": "معدل أخذ العينات", + "The sampling rate of the audio files.": "معدل أخذ العينات من الملفات الصوتية.", + "RVC Version": "نسخة RVC", + "The RVC version of the model.": "نسخة RVC من النموذج.", + "Preprocess Dataset": "مجموعة بيانات ما قبل المعالجة", + "Extract": "استخرج", + "Hop Length": "طول القفزة", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "يشير إلى المدة التي يستغرقها النظام للانتقال إلى تغيير كبير في درجة الصوت. تتطلب أطوال القفزات الأصغر مزيدا من الوقت للاستدلال ولكنها تميل إلى تحقيق دقة أعلى في درجة الصوت.", + "Batch Size": "حجم الدفعة", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "ينصح بمحاذاته مع VRAM المتاح لوحدة معالجة الرسومات الخاصة بك. يوفر الإعداد 4 دقة محسنة ولكن معالجة أبطأ ، بينما يوفر 8 نتائج أسرع وقياسية.", + "Save Every Epoch": "حفظ كل حقبة", + "Determine at how many epochs the model will saved at.": "حدد عدد الفترات التي سيتم حفظ النموذج فيها.", + "Total Epoch": "إجمالي العصر", + "Specifies the overall quantity of epochs for the model training process.": "يحدد الكمية الإجمالية للعهود لعملية التدريب النموذجية.", + "Pretrained": "التدريب المسبق", + "Save Only Latest": "حفظ الأحدث فقط", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "سيؤدي تمكين هذا الإعداد إلى حفظ ملفات G و D لأحدث إصداراتها فقط ، مما يوفر مساحة التخزين بشكل فعال.", + "Save Every Weights": "حفظ كل الأوزان", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "يمكنك هذا الإعداد من حفظ أوزان النموذج في نهاية كل حقبة.", + "Custom Pretrained": "تدريب مسبق مخصص", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "يمكن أن يؤدي استخدام النماذج المخصصة المدربة مسبقا إلى نتائج فائقة ، حيث أن اختيار النماذج الأكثر ملاءمة للاختبار المسبق والمصممة خصيصا لحالة الاستخدام المحددة يمكن أن يعزز الأداء بشكل كبير.", + "Upload Pretrained Model": "تحميل نموذج تم تدريبه مسبقا", + "Refresh Custom Pretraineds": "تحديث التدريبات المسبقة المخصصة", + "Pretrained Custom Settings": "الإعدادات المخصصة المدربة مسبقا", + "The file you dropped is not a valid pretrained file. Please try again.": "الملف الذي أسقطته ليس ملفا صالحا تم تدريبه مسبقا. يرجى المحاولة مرة أخرى.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "انقر فوق زر التحديث لرؤية الملف الذي تم اختباره مسبقا في القائمة المنسدلة.", + "Pretrained G Path": "مخصص مسبقا G", + "Pretrained D Path": "مخصص مسبق التدريب D", + "GPU Settings": "إعدادات وحدة معالجة الرسومات", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "يضبط إعدادات GPU المتقدمة ، الموصى بها للمستخدمين الذين لديهم بنية GPU أفضل.", + "GPU Custom Settings": "الإعدادات المخصصة لوحدة معالجة الرسومات", + "GPU Number": "رقم وحدة معالجة الرسومات", + "0 to ∞ separated by -": "0 إلى ∞ مفصولة ب -", + "GPU Information": "معلومات وحدة معالجة الرسومات", + "Pitch Guidance": "توجيه الملعب", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "من خلال استخدام توجيه درجة الصوت ، يصبح من الممكن عكس نغمة الصوت الأصلي ، بما في ذلك طبقة الصوت. هذه الميزة ذات قيمة خاصة للغناء والسيناريوهات الأخرى حيث يكون الحفاظ على اللحن الأصلي أو نمط طبقة الصوت أمرا ضروريا.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "استخدم النماذج المدربة مسبقا عند تدريب النماذج الخاصة بك. هذا النهج يقلل من مدة التدريب ويعزز الجودة الشاملة.", + "Extract Features": "استخراج الميزات", + "Start Training": "ابدأ التدريب", + "Generate Index": "إنشاء فهرس", + "Voice Model": "نموذج الصوت", + "Select the voice model to use for the conversion.": "حدد نموذج الصوت لاستخدامه في التحويل.", + "Index File": "ملف الفهرس", + "Select the index file to use for the conversion.": "حدد ملف الفهرس لاستخدامه للتحويل.", + "Refresh": "تحديث", + "Unload Voice": "تفريغ الصوت", + "Single": "واحد", + "Upload Audio": "تحميل الصوت", + "Select Audio": "حدد الصوت", + "Select the audio to convert.": "حدد الصوت المراد تحويله.", + "Advanced Settings": "الإعدادات المتقدمة", + "Clear Outputs (Deletes all audios in assets/audios)": "مخرجات واضحة (يحذف جميع الصوتيات في الأصول / الصوتيات)", + "Custom Output Path": "مسار الإخراج المخصص", + "Output Path": "مسار الإخراج", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "المسار الذي سيتم فيه حفظ الصوت الناتج ، افتراضيا في الأصول / الصوتيات / output.wav", + "Split Audio": "تقسيم الصوت", + "Split the audio into chunks for inference to obtain better results in some cases.": "قسم الصوت إلى أجزاء للاستدلال للحصول على نتائج أفضل في بعض الحالات.", + "Autotune": "الضبط التلقائي", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "قم بتطبيق ضبط تلقائي ناعم على استنتاجاتك ، موصى به لغناء التحويلات.", + "Clean Audio": "صوت نظيف", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "قم بتنظيف إخراج الصوت باستخدام خوارزميات اكتشاف الضوضاء ، الموصى بها للتحدث الصوتيات.", + "Clean Strength": "قوة نظيفة", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "اضبط مستوى التنظيف على الصوت الذي تريده ، وكلما قمت بزيادته كلما تم تنظيفه ، ولكن من الممكن أن يكون الصوت أكثر ضغطا.", + "Pitch": "زفت", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "اضبط درجة الصوت ، وكلما زادت القيمة ، زادت درجة الصوت.", + "Filter Radius": "نصف قطر المرشح", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "إذا كان العدد أكبر من أو يساوي ثلاثة ، فإن استخدام الترشيح المتوسط على نتائج النغمة التي تم جمعها لديه القدرة على تقليل التنفس.", + "Search Feature Ratio": "نسبة ميزة البحث", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "التأثير الذي يمارسه ملف الفهرس ؛ قيمة أعلى يتوافق مع تأثير أكبر. ومع ذلك ، يمكن أن يساعد اختيار القيم الأقل في التخفيف من العناصر الموجودة في الصوت.", + "Volume Envelope": "مغلف الحجم", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "استبدل أو امزج مع مغلف حجم المخرجات. كلما اقتربت النسبة من 1 ، زاد استخدام مغلف الإخراج.", + "Protect Voiceless Consonants": "حماية الحروف الساكنة التي لا صوت لها", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "حماية الحروف الساكنة المميزة وأصوات التنفس لمنع التمزق الصوتي الكهربائي والتحف الأخرى. يوفر سحب المعلمة إلى قيمتها القصوى البالغة 0.5 حماية شاملة. ومع ذلك ، قد يؤدي تقليل هذه القيمة إلى تقليل مدى الحماية مع احتمال التخفيف من تأثير الفهرسة.", + "Pitch extraction algorithm": "خوارزمية استخراج الملعب", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "خوارزمية استخراج الملعب لاستخدامها في تحويل الصوت. الخوارزمية الافتراضية هي rmvpe ، والتي يوصى بها في معظم الحالات.", + "Convert": "حول", + "Export Audio": "تصدير الصوت", + "Batch": "الدفعه", + "Input Folder": "مجلد الإدخال", + "Select the folder containing the audios to convert.": "حدد المجلد الذي يحتوي على الصوتيات المراد تحويلها.", + "Enter input path": "أدخل مسار الإدخال", + "Output Folder": "مجلد الإخراج", + "Select the folder where the output audios will be saved.": "حدد المجلد حيث سيتم حفظ صوتيات الإخراج.", + "Enter output path": "أدخل مسار الإخراج", + "Get information about the audio": "الحصول على معلومات حول الصوت", + "Information about the audio file": "معلومات حول الملف الصوتي", + "Waiting for information...": "في انتظار المعلومات...", + "## Voice Blender": "## خلاط الصوت", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "حدد نموذجين صوتيين ، وقم بتعيين نسبة المزج التي تريدها ، وامزجهما في صوت جديد تماما.", + "Voice Blender": "خلاط الصوت", + "Drag and drop your model here": "قم بسحب وإسقاط النموذج الخاص بك هنا", + "You can also use a custom path.": "يمكنك أيضا استخدام مسار مخصص.", + "Blend Ratio": "نسبة المزج", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "سيؤدي ضبط الموضع أكثر نحو جانب أو آخر إلى جعل النموذج أكثر تشابها مع الأول أو الثاني.", + "Fusion": "اندماج", + "Path to Model": "الطريق إلى النموذج", + "Enter path to model": "أدخل المسار إلى النموذج", + "Model information to be placed": "معلومات النموذج المراد وضعها", + "Inroduce the model information": "Inroduce معلومات النموذج", + "The information to be placed in the model (You can leave it blank or put anything).": "المعلومات المراد وضعها في النموذج (يمكنك تركها فارغة أو وضع أي شيء).", + "View model information": "عرض معلومات النموذج", + "Introduce the model pth path": "تقديم نموذج مسار pth", + "View": "منظر", + "Model extraction": "استخراج النموذج", + "Model conversion": "تحويل النموذج", + "Pth file": "ملف Pth", + "Output of the pth file": "إخراج ملف pth", + "# How to Report an Issue on GitHub": "# كيفية الإبلاغ عن مشكلة على GitHub", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. انقر فوق الزر \"شاشة التسجيل\" أدناه لبدء تسجيل المشكلة التي تواجهها.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. بمجرد الانتهاء من تسجيل المشكلة ، انقر فوق الزر \"إيقاف التسجيل\" (نفس الزر ، لكن التسمية تتغير اعتمادا على ما إذا كنت تقوم بالتسجيل بنشاط أم لا).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. انتقل إلى [مشكلات GitHub] (https://github.com/IAHispano/Applio/issues) وانقر على زر \"إصدار جديد\".", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. أكمل نموذج المشكلة المقدم ، مع التأكد من تضمين التفاصيل حسب الحاجة ، واستخدم قسم الأصول لتحميل الملف المسجل من الخطوة السابقة.", + "Record Screen": "شاشة التسجيل", + "Record": "سجل", + "Stop Recording": "إيقاف التسجيل", + "Introduce the model .pth path": "تقديم نموذج مسار .pth", + "See Model Information": "انظر معلومات النموذج", + "## Download Model": "## تحميل الموديل", + "Model Link": "رابط النموذج", + "Introduce the model link": "تقديم رابط النموذج", + "Download Model": "تحميل الموديل", + "## Drop files": "## إسقاط الملفات", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "اسحب ملف .pth وملف .index إلى هذه المساحة. اسحب أحدهما ثم الآخر.", + "TTS Voices": "أصوات تحويل النص إلى كلام", + "Select the TTS voice to use for the conversion.": "حدد صوت TTS لاستخدامه في التحويل.", + "Text to Synthesize": "النص المراد توليفه", + "Enter the text to synthesize.": "أدخل النص المراد توليفه.", + "Or you can upload a .txt file": "أو يمكنك تحميل ملف .txt", + "Enter text to synthesize": "أدخل نصا لتوليفه", + "Output Path for TTS Audio": "مسار الإخراج لصوت TTS", + "Output Path for RVC Audio": "مسار الإخراج لصوت RVC", + "Enable Applio integration with Discord presence": "تمكين تكامل Applio مع وجود Discord", + "It will activate the possibility of displaying the current Applio activity in Discord.": "سيتم تنشيط إمكانية عرض نشاط Applio الحالي في Discord.", + "Enable Applio integration with applio.org/models using flask": "تمكين تكامل Applio مع applio.org/models باستخدام القارورة", + "It will activate the possibility of downloading models with a click from the website.": "سيتم تنشيط إمكانية تنزيل النماذج بنقرة واحدة من الموقع.", + "Theme": "موضوع", + "Select the theme you want to use. (Requires restarting Applio)": "حدد السمة التي تريد استخدامها. (يتطلب إعادة تشغيل Applio)", + "Language": "اللغة", + "Select the language you want to use. (Requires restarting Applio)": "حدد اللغة التي تريد استخدامها. (يتطلب إعادة تشغيل Applio)", + "Plugin Installer": "مثبت البرنامج المساعد", + "Drag your plugin.zip to install it": "اسحب plugin.zip لتثبيته", + "Version Checker": "مدقق الإصدار", + "Check which version of Applio is the latest to see if you need to update.": "تحقق من إصدار Applio هو الأحدث لمعرفة ما إذا كنت بحاجة إلى التحديث.", + "Check for updates": "التحقق من وجود تحديثات" +} \ No newline at end of file diff --git a/assets/i18n/languages/bn_BN.json b/assets/i18n/languages/bn_BN.json new file mode 100644 index 0000000000000000000000000000000000000000..7a7f5462268c0797b64ae7134ab719b3bfc37a00 --- /dev/null +++ b/assets/i18n/languages/bn_BN.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "আলটিমেট ভয়েস ক্লোনিং টুল, অতুলনীয় শক্তি, মডুলারিটি এবং ব্যবহারকারী-বান্ধব অভিজ্ঞতার জন্য নিখুঁতভাবে অপ্টিমাইজ করা।", + "This section contains some extra utilities that often may be in experimental phases.": "এই বিভাগে কিছু অতিরিক্ত ইউটিলিটি রয়েছে যা প্রায়শই পরীক্ষামূলক পর্যায়ে থাকতে পারে।", + "Output Information": "আউটপুট তথ্য", + "The output information will be displayed here.": "আউটপুট তথ্য এখানে প্রদর্শিত হবে।", + "Inference": "অনুমান", + "Train": "ট্রেন", + "Extra": "অতিরিক্ত", + "Merge Audios": "অডিওগুলি মার্জ করুন", + "Processing": "প্রক্রিয়াকরণ", + "Audio Analyzer": "অডিও বিশ্লেষক", + "Model Information": "মডেল তথ্য", + "Plugins": "প্লাগইন", + "Download": "ডাউনলোড", + "Report a Bug": "একটি বাগ রিপোর্ট করুন", + "Settings": "সেটিংস", + "Preprocess": "প্রিপ্রসেস", + "Model Name": "মডেলের নাম", + "Name of the new model.": "নতুন মডেলের নাম", + "Enter model name": "মডেলের নাম লিখুন", + "Dataset Path": "ডেটাসেট পাথ", + "Path to the dataset folder.": "ডেটাসেট ফোল্ডারে পাথ।", + "Refresh Datasets": "ডেটাসেট রিফ্রেশ করুন", + "Dataset Creator": "ডেটাসেট স্রষ্টা", + "Dataset Name": "ডেটাসেটের নাম", + "Name of the new dataset.": "নতুন ডেটাসেটের নাম", + "Enter dataset name": "তথ্যসেটের নাম লিখুন", + "Upload Audio Dataset": "অডিও ডেটাসেট আপলোড করুন", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "অডিও ফাইলটি সফলভাবে ডেটাসেটে যুক্ত করা হয়েছে। অনুগ্রহ করে প্রিপ্রসেস বাটনে ক্লিক করুন।", + "Enter dataset path": "ডেটাসেটের পথ লিখুন", + "Sampling Rate": "নমুনা হার", + "The sampling rate of the audio files.": "অডিও ফাইলের নমুনা হার।", + "RVC Version": "আরভিসি সংস্করণ", + "The RVC version of the model.": "মডেলটির আরভিসি সংস্করণ।", + "Preprocess Dataset": "প্রিপ্রসেস ডেটাসেট", + "Extract": "নিষ্কাশন", + "Hop Length": "হপ দৈর্ঘ্য", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "সিস্টেমটি একটি উল্লেখযোগ্য পিচ পরিবর্তনে রূপান্তরিত হতে যে সময়কাল নেয় তা বোঝায়। ছোট হপ দৈর্ঘ্যের জন্য অনুমানের জন্য আরও সময় প্রয়োজন তবে উচ্চতর পিচ নির্ভুলতা অর্জন করে।", + "Batch Size": "ব্যাচের আকার", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "এটি আপনার জিপিইউর উপলব্ধ ভিআরএএমের সাথে সারিবদ্ধ করার পরামর্শ দেওয়া হচ্ছে। 4 এর একটি সেটিং উন্নত নির্ভুলতা সরবরাহ করে তবে ধীর প্রক্রিয়াজাতকরণ, যখন 8 দ্রুত এবং মানক ফলাফল সরবরাহ করে।", + "Save Every Epoch": "প্রতিটি যুগ সংরক্ষণ করুন", + "Determine at how many epochs the model will saved at.": "মডেলটি কতগুলি যুগে সংরক্ষণ করবে তা নির্ধারণ করুন।", + "Total Epoch": "মোট যুগ", + "Specifies the overall quantity of epochs for the model training process.": "মডেল প্রশিক্ষণ প্রক্রিয়ার জন্য যুগের সামগ্রিক পরিমাণ উল্লেখ করে।", + "Pretrained": "পূর্বনির্ধারিত", + "Save Only Latest": "শুধুমাত্র সর্বশেষ সংরক্ষণ করুন", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "এই সেটিংটি সক্ষম করার ফলে জি এবং ডি ফাইলগুলি কেবলমাত্র তাদের সাম্প্রতিকতম সংস্করণগুলি সংরক্ষণ করবে, কার্যকরভাবে স্টোরেজ স্পেস সংরক্ষণ করবে।", + "Save Every Weights": "প্রতিটি ওজন সংরক্ষণ করুন", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "এই সেটিংটি আপনাকে প্রতিটি যুগের শেষে মডেলের ওজন সংরক্ষণ করতে সক্ষম করে।", + "Custom Pretrained": "কাস্টম প্রিট্রেইনড", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "কাস্টম প্রিট্রেনড মডেলগুলি ব্যবহার করা উচ্চতর ফলাফলের দিকে পরিচালিত করতে পারে, কারণ নির্দিষ্ট ব্যবহারের ক্ষেত্রে উপযুক্ত প্রিট্রেনড মডেলগুলি নির্বাচন করা কর্মক্ষমতা উল্লেখযোগ্যভাবে বাড়িয়ে তুলতে পারে।", + "Upload Pretrained Model": "প্রিট্রেনড মডেল আপলোড করুন", + "Refresh Custom Pretraineds": "কাস্টম প্রিট্রেনেডগুলি রিফ্রেশ করুন", + "Pretrained Custom Settings": "পূর্বনির্ধারিত কাস্টম সেটিংস", + "The file you dropped is not a valid pretrained file. Please try again.": "আপনার ফেলে দেওয়া ফাইলটি একটি বৈধ পূর্বপ্রশিক্ষিত ফাইল নয়. অনুগ্রহ করে আবার চেষ্টা করুন।", + "Click the refresh button to see the pretrained file in the dropdown menu.": "ড্রপডাউন মেনুতে প্রিট্রেনড ফাইলটি দেখতে রিফ্রেশ বোতামটি ক্লিক করুন।", + "Pretrained G Path": "কাস্টম প্রিট্রেনড জি", + "Pretrained D Path": "কাস্টম প্রিট্রেনড ডি", + "GPU Settings": "জিপিইউ সেটিংস", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "উন্নত GPU সেটিংস সেট করে, আরও ভাল GPU আর্কিটেকচার সহ ব্যবহারকারীদের জন্য প্রস্তাবিত।", + "GPU Custom Settings": "GPU কাস্টম সেটিংস", + "GPU Number": "জিপিইউ নম্বর", + "0 to ∞ separated by -": "0 থেকে ∞ দ্বারা পৃথক করা হয় -", + "GPU Information": "জিপিইউ তথ্য", + "Pitch Guidance": "পিচ গাইডেন্স", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "পিচ গাইডেন্স নিয়োগ করে, এর পিচ সহ মূল ভয়েসের স্বরভঙ্গিটি মিরর করা সম্ভব হয়। এই বৈশিষ্ট্যটি গাওয়া এবং অন্যান্য পরিস্থিতিতে বিশেষত মূল্যবান যেখানে মূল সুর বা পিচ প্যাটার্ন সংরক্ষণ করা অপরিহার্য।", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "আপনার নিজের প্রশিক্ষণের সময় প্রিপ্রশিক্ষিত মডেলগুলি ব্যবহার করুন। এই পদ্ধতির প্রশিক্ষণের সময়কাল হ্রাস করে এবং সামগ্রিক মান বাড়ায়।", + "Extract Features": "এক্সট্রাক্ট বৈশিষ্ট্য", + "Start Training": "প্রশিক্ষণ শুরু করুন", + "Generate Index": "সূচী তৈরি করুন", + "Voice Model": "ভয়েস মডেল", + "Select the voice model to use for the conversion.": "রূপান্তরটির জন্য ব্যবহার করতে ভয়েস মডেলটি নির্বাচন করুন।", + "Index File": "সূচী ফাইল", + "Select the index file to use for the conversion.": "রূপান্তরটির জন্য ব্যবহার করতে সূচী ফাইলটি নির্বাচন করুন।", + "Refresh": "সতেজ", + "Unload Voice": "ভয়েস আনলোড করুন", + "Single": "একক", + "Upload Audio": "অডিও আপলোড করুন", + "Select Audio": "অডিও নির্বাচন করুন", + "Select the audio to convert.": "রূপান্তর করতে অডিও নির্বাচন করুন।", + "Advanced Settings": "উন্নত সেটিংস", + "Clear Outputs (Deletes all audios in assets/audios)": "আউটপুট সাফ করুন (সম্পদ / অডিওতে সমস্ত অডিও মুছে ফেলে)", + "Custom Output Path": "কাস্টম আউটপুট পাথ", + "Output Path": "আউটপুট পাথ", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "পাথ যেখানে আউটপুট অডিও সংরক্ষণ করা হবে, সম্পদ / অডিও / output.wav ডিফল্টরূপে", + "Split Audio": "অডিও বিভক্ত করুন", + "Split the audio into chunks for inference to obtain better results in some cases.": "কিছু ক্ষেত্রে আরও ভাল ফলাফল পেতে অনুমানের জন্য অডিওটিকে খণ্ডগুলিতে বিভক্ত করুন।", + "Autotune": "অটোটিউন", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "আপনার অনুমানগুলিতে একটি নরম অটোটিউন প্রয়োগ করুন, রূপান্তরগুলি গাওয়ার জন্য প্রস্তাবিত।", + "Clean Audio": "পরিষ্কার অডিও", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "অডিও বলার জন্য প্রস্তাবিত কোলাহল শনাক্তকরণ অ্যালগরিদমগুলি ব্যবহার করে আপনার অডিও আউটপুট পরিষ্কার করুন।", + "Clean Strength": "পরিষ্কার শক্তি", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "আপনি যে অডিওটি চান তাতে ক্লিন-আপ স্তরটি সেট করুন, আপনি এটি যত বাড়াবেন তত বেশি এটি পরিষ্কার হবে, তবে এটি সম্ভব যে অডিওটি আরও সংকুচিত হবে।", + "Pitch": "পিচ", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "অডিওর পিচ সেট করুন, মান যত বেশি, পিচ তত বেশি।", + "Filter Radius": "ফিল্টার ব্যাসার্ধ", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "যদি সংখ্যাটি তিনটির চেয়ে বেশি বা সমান হয় তবে সংগৃহীত স্বন ফলাফলগুলিতে মধ্যমা ফিল্টারিং নিয়োগ করা শ্বাসকষ্ট হ্রাস করার সম্ভাবনা রয়েছে।", + "Search Feature Ratio": "অনুসন্ধান বৈশিষ্ট্য অনুপাত", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "ইনডেক্স ফাইল দ্বারা প্রভাবিত; একটি উচ্চতর মান বৃহত্তর প্রভাবের সাথে মিলে যায়। তবে, নিম্ন মানগুলি বেছে নেওয়া অডিওতে উপস্থিত নিদর্শনগুলি প্রশমিত করতে সহায়তা করতে পারে।", + "Volume Envelope": "ভলিউম খাম", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "আউটপুটের ভলিউম খামের সাথে বিকল্প বা মিশ্রণ করুন। অনুপাতটি 1 এর কাছাকাছি হয়, তত বেশি আউটপুট খাম নিযুক্ত করা হয়।", + "Protect Voiceless Consonants": "কণ্ঠহীন ব্যঞ্জনবর্ণ রক্ষা করুন", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "ইলেক্ট্রো-অ্যাকোস্টিক ছিঁড়ে যাওয়া এবং অন্যান্য নিদর্শনগুলি রোধ করতে স্বতন্ত্র ব্যঞ্জনবর্ণ এবং শ্বাস প্রশ্বাসের শব্দগুলি রক্ষা করুন। প্যারামিটারটিকে তার সর্বোচ্চ মান 0.5 এ টানলে ব্যাপক সুরক্ষা সরবরাহ করে। যাইহোক, এই মান হ্রাস করা সম্ভাব্যভাবে সূচক প্রভাব প্রশমিত করার সময় সুরক্ষার পরিমাণ হ্রাস করতে পারে।", + "Pitch extraction algorithm": "পিচ নিষ্কাশন অ্যালগরিদম", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "অডিও রূপান্তর জন্য ব্যবহার করতে পিচ নিষ্কাশন অ্যালগরিদম. ডিফল্ট অ্যালগরিদমটি আরএমভিপিই, যা বেশিরভাগ ক্ষেত্রে প্রস্তাবিত।", + "Convert": "রূপান্তর", + "Export Audio": "অডিও রপ্তানি করুন", + "Batch": "ব্যাচ", + "Input Folder": "ইনপুট ফোল্ডার", + "Select the folder containing the audios to convert.": "রূপান্তর করতে অডিওযুক্ত ফোল্ডারটি নির্বাচন করুন।", + "Enter input path": "ইনপুট পথ লিখুন", + "Output Folder": "আউটপুট ফোল্ডার", + "Select the folder where the output audios will be saved.": "ফোল্ডারটি নির্বাচন করুন যেখানে আউটপুট অডিওগুলি সংরক্ষণ করা হবে।", + "Enter output path": "আউটপুট পথ লিখুন", + "Get information about the audio": "অডিও সম্পর্কে তথ্য পান", + "Information about the audio file": "অডিও ফাইল সম্পর্কে তথ্য", + "Waiting for information...": "তথ্যের অপেক্ষায়...", + "## Voice Blender": "## ভয়েস ব্লেন্ডার", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "দুটি ভয়েস মডেল নির্বাচন করুন, আপনার পছন্দসই মিশ্রণের শতাংশ সেট করুন এবং এগুলি সম্পূর্ণ নতুন ভয়েসে মিশ্রিত করুন।", + "Voice Blender": "ভয়েস ব্লেন্ডার", + "Drag and drop your model here": "আপনার মডেলটি এখানে টেনে এনে ছেড়ে দিন", + "You can also use a custom path.": "আপনি একটি কাস্টম পাথও ব্যবহার করতে পারেন।", + "Blend Ratio": "ব্লেন্ড রেশিও", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "একপাশে বা অন্যদিকে অবস্থানটি আরও সামঞ্জস্য করা মডেলটিকে প্রথম বা দ্বিতীয়টির সাথে আরও অনুরূপ করে তুলবে।", + "Fusion": "ফিউশন", + "Path to Model": "মডেলের পথ", + "Enter path to model": "মডেলের পথ লিখুন", + "Model information to be placed": "মডেল তথ্য স্থাপন করা হবে", + "Inroduce the model information": "মডেলের তথ্য ইনরোডিউস করুন", + "The information to be placed in the model (You can leave it blank or put anything).": "মডেলটিতে যে তথ্য রাখতে হবে (আপনি এটি ফাঁকা রেখে দিতে পারেন বা কিছু রাখতে পারেন)।", + "View model information": "মডেল তথ্য দেখুন", + "Introduce the model pth path": "মডেল পিটিএইচ পাথ পরিচয় করিয়ে দিন", + "View": "দর্শন", + "Model extraction": "মডেল নিষ্কাশন", + "Model conversion": "মডেল রূপান্তর", + "Pth file": "Pth ফাইল", + "Output of the pth file": "পিটিএইচ ফাইলের আউটপুট", + "# How to Report an Issue on GitHub": "# গিটহাবে একটি সমস্যা কিভাবে রিপোর্ট করবেন", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. আপনি যে সমস্যার সম্মুখীন হচ্ছেন তা রেকর্ড করা শুরু করতে নীচের 'রেকর্ড স্ক্রিন' বোতামে ক্লিক করুন।", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. একবার আপনি সমস্যাটি রেকর্ড করা শেষ করার পরে, 'রেকর্ডিং বন্ধ করুন' বোতামে ক্লিক করুন (একই বোতাম, তবে আপনি সক্রিয়ভাবে রেকর্ড করছেন কিনা তার উপর নির্ভর করে লেবেলটি পরিবর্তিত হয়)।", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "৩. [GitHub Issues](https://github.com/IAHispano/Applio/issues) এ যান এবং 'New Issue' বাটনে ক্লিক করুন।", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. প্রদত্ত ইস্যু টেমপ্লেটটি সম্পূর্ণ করুন, প্রয়োজন অনুসারে বিশদ অন্তর্ভুক্ত করা নিশ্চিত করুন এবং পূর্ববর্তী পদক্ষেপ থেকে রেকর্ড করা ফাইলটি আপলোড করতে সম্পদ বিভাগটি ব্যবহার করুন।", + "Record Screen": "রেকর্ড স্ক্রিন", + "Record": "রেকর্ড", + "Stop Recording": "রেকর্ডিং বন্ধ করুন", + "Introduce the model .pth path": "মডেল .pth পাথ পরিচয় করিয়ে দিন", + "See Model Information": "মডেল তথ্য দেখুন", + "## Download Model": "## মডেল ডাউনলোড করুন", + "Model Link": "মডেল লিংক", + "Introduce the model link": "মডেল লিঙ্কটি পরিচয় করিয়ে দিন", + "Download Model": "মডেল ডাউনলোড করুন", + "## Drop files": "## ফাইল ড্রপ করুন", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "আপনার .pth ফাইল এবং .index ফাইলটি এই স্পেসে টেনে আনুন। একটা টেনে আনুন, তারপর অন্যটা।", + "TTS Voices": "টিটিএস ভয়েসেস", + "Select the TTS voice to use for the conversion.": "রূপান্তরটির জন্য ব্যবহার করতে TTS ভয়েস নির্বাচন করুন।", + "Text to Synthesize": "সংশ্লেষণ করার জন্য পাঠ্য", + "Enter the text to synthesize.": "সংশ্লেষ করতে পাঠ্যটি প্রবেশ করান।", + "Or you can upload a .txt file": "অথবা আপনি একটি .txt ফাইল আপলোড করতে পারেন", + "Enter text to synthesize": "সংশ্লেষ করতে পাঠ্য লিখুন", + "Output Path for TTS Audio": "TTS অডিওর জন্য আউটপুট পাথ", + "Output Path for RVC Audio": "আরভিসি অডিওর জন্য আউটপুট পাথ", + "Enable Applio integration with Discord presence": "ডিসকর্ড উপস্থিতি সহ অ্যাপলিও ইন্টিগ্রেশন সক্ষম করুন", + "It will activate the possibility of displaying the current Applio activity in Discord.": "এটি ডিসকর্ডে বর্তমান অ্যাপলিও ক্রিয়াকলাপ প্রদর্শনের সম্ভাবনা সক্রিয় করবে।", + "Enable Applio integration with applio.org/models using flask": "ফ্লাস্ক ব্যবহার করে applio.org/models সাথে অ্যাপলিও ইন্টিগ্রেশন সক্ষম করুন", + "It will activate the possibility of downloading models with a click from the website.": "এটি ওয়েবসাইট থেকে একটি ক্লিকের সাথে মডেলগুলি ডাউনলোড করার সম্ভাবনা সক্রিয় করবে।", + "Theme": "থীম", + "Select the theme you want to use. (Requires restarting Applio)": "আপনি যে থিমটি ব্যবহার করতে চান তা নির্বাচন করুন। (অ্যাপলিও পুনরায় চালু করা প্রয়োজন)", + "Language": "ভাষা", + "Select the language you want to use. (Requires restarting Applio)": "আপনি যে ভাষাটি ব্যবহার করতে চান তা নির্বাচন করুন। (অ্যাপলিও পুনরায় চালু করা প্রয়োজন)", + "Plugin Installer": "প্লাগইন ইনস্টলার", + "Drag your plugin.zip to install it": "এটি ইনস্টল করতে আপনার plugin.zip টেনে আনুন", + "Version Checker": "সংস্করণ পরীক্ষক", + "Check which version of Applio is the latest to see if you need to update.": "আপনার আপডেট করার প্রয়োজন আছে কিনা তা দেখতে অ্যাপলিওর কোন সংস্করণটি সর্বশেষতম তা পরীক্ষা করে দেখুন।", + "Check for updates": "আপডেটের জন্য পরীক্ষা করুন" +} \ No newline at end of file diff --git a/assets/i18n/languages/de_DE.json b/assets/i18n/languages/de_DE.json new file mode 100644 index 0000000000000000000000000000000000000000..dd0c75f0aa2b413004309a09f8270b3746ee0b8b --- /dev/null +++ b/assets/i18n/languages/de_DE.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "Ultimatives Tool zum Klonen von Stimmen, das sorgfältig für unübertroffene Leistung, Modularität und Benutzerfreundlichkeit optimiert wurde.", + "This section contains some extra utilities that often may be in experimental phases.": "Dieser Abschnitt enthält einige zusätzliche Dienstprogramme, die sich häufig in experimentellen Phasen befinden.", + "Output Information": "Informationen zur Ausgabe", + "The output information will be displayed here.": "Hier werden die Ausgabeinformationen angezeigt.", + "Inference": "Inferenz", + "Train": "Trainieren", + "Extra": "Extra", + "Merge Audios": "Audios zusammenführen", + "Processing": "Verarbeitung", + "Audio Analyzer": "Audio-Analysator", + "Model Information": "Modell-Informationen", + "Plugins": "Plugins", + "Download": "Herunterladen", + "Report a Bug": "Einen Fehler melden", + "Settings": "Einstellungen", + "Preprocess": "Vorverarbeiten", + "Model Name": "Modellname", + "Name of the new model.": "Name des neuen Modells.", + "Enter model name": "Modellnamen eingeben", + "Dataset Path": "Datensatz-Pfad", + "Path to the dataset folder.": "Pfad zum Datensatz-Ordner.", + "Refresh Datasets": "Aktualisiere den Datensatz", + "Dataset Creator": "Ersteller des Datensatzes", + "Dataset Name": "Name des Datensatzes", + "Name of the new dataset.": "Name des neuen Datensatzes.", + "Enter dataset name": "Geben Sie den Namen des Datensatzes ein", + "Upload Audio Dataset": "Audio-Datensatz hochladen", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Die Audiodatei wurde erfolgreich zum Datensatz hinzugefügt. Bitte klicken Sie auf die Schaltfläche \"Vorverarbeiten\".", + "Enter dataset path": "Datensatz-Pfad eingeben", + "Sampling Rate": "Samplingrate", + "The sampling rate of the audio files.": "Die Samplingrate der Audiodateien.", + "RVC Version": "RVC-Version", + "The RVC version of the model.": "Die RVC-Version des Modells.", + "Preprocess Dataset": "Datensatz vorverarbeiten", + "Extract": "Extrahieren", + "Hop Length": "Sprungweite", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Gibt die Dauer an, die das System benötigt, um zu einer signifikanten Tonhöhenänderung überzugehen. Kleinere Sprunglängen benötigen mehr Zeit für die Inferenz, führen aber tendenziell zu einer höheren Tonhöhengenauigkeit.", + "Batch Size": "Losgröße", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Es ist ratsam, es mit dem verfügbaren VRAM Ihrer GPU in Einklang zu bringen. Eine Einstellung von 4 bietet eine verbesserte Genauigkeit, aber eine langsamere Verarbeitung, während 8 schnellere und standardmäßige Ergebnisse liefert.", + "Save Every Epoch": "Speichere nach jeder Epoche", + "Determine at how many epochs the model will saved at.": "Legen Sie fest, bei wie vielen Epochen das Modell gespeichert wird.", + "Total Epoch": "Epoche insgesamt", + "Specifies the overall quantity of epochs for the model training process.": "Gibt die Gesamtanzahl der Epochen für den Modelltrainingsprozess an.", + "Pretrained": "Vortrainiert", + "Save Only Latest": "Nur das Neueste speichern", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Wenn Sie diese Einstellung aktivieren, werden in den G- und D-Dateien nur die neuesten Versionen gespeichert, wodurch Speicherplatz gespart wird.", + "Save Every Weights": "Speichern Sie alle Gewichtungen", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Mit dieser Einstellung können Sie die Gewichtungen des Modells am Ende jeder Epoche speichern.", + "Custom Pretrained": "Benutzerdefiniert vortrainiert", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Die Verwendung benutzerdefinierter vortrainierter Modelle kann zu besseren Ergebnissen führen, da die Auswahl der am besten geeigneten vortrainierten Modelle, die auf den jeweiligen Anwendungsfall zugeschnitten sind, die Leistung erheblich verbessern kann.", + "Upload Pretrained Model": "Vortrainiertes Modell hochladen", + "Refresh Custom Pretraineds": "Aktualisiere benutzerdefinierte vortrainierte", + "Pretrained Custom Settings": "Vortrainierte benutzerdefinierte Einstellungen", + "The file you dropped is not a valid pretrained file. Please try again.": "Die Datei, die Sie abgelegt haben, ist keine gültige vortrainierte Datei. Bitte versuchen Sie es erneut.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "Klicken Sie auf die Schaltfläche \"Aktualisieren\", um die vortrainierte Datei im Dropdown-Menü anzuzeigen.", + "Pretrained G Path": "Benutzerdefinierter vortrainierter G Pfad", + "Pretrained D Path": "Benutzerdefinierter vortrainierter D Pfad", + "GPU Settings": "GPU-Einstellungen", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Legt erweiterte GPU-Einstellungen fest, die für Benutzer mit besserer GPU-Architektur empfohlen werden.", + "GPU Custom Settings": "Benutzerdefinierte GPU-Einstellungen", + "GPU Number": "GPU-Nummer", + "0 to ∞ separated by -": "0 bis ∞ getrennt durch -", + "GPU Information": "GPU-Informationen", + "Pitch Guidance": "Tonhöhen-Führung", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Durch den Einsatz von Tonhöhenführung wird es möglich, die Intonation der Originalstimme, einschließlich ihrer Tonhöhe, zu spiegeln. Diese Funktion ist besonders wertvoll für das Singen und andere Szenarien, in denen die Beibehaltung der ursprünglichen Melodie oder des Tonhöhenmusters unerlässlich ist.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Verwenden Sie vortrainierte Modelle, wenn Sie Ihre eigenen trainieren. Dieser Ansatz verkürzt die Schulungsdauer und verbessert die Gesamtqualität.", + "Extract Features": "Extrahieren von Merkmalen", + "Start Training": "Training starten", + "Generate Index": "Index generieren", + "Voice Model": "Sprach-Modell", + "Select the voice model to use for the conversion.": "Wählen Sie das Sprachmodell aus, das für die Konvertierung verwendet werden soll.", + "Index File": "Index-Datei", + "Select the index file to use for the conversion.": "Wählen Sie die Indexdatei aus, die für die Konvertierung verwendet werden soll.", + "Refresh": "Aktualisieren", + "Unload Voice": "Stimme entladen", + "Single": "Einzeln", + "Upload Audio": "Audio hochladen", + "Select Audio": "Wählen Sie ein Audio", + "Select the audio to convert.": "Wählen Sie das zu konvertierende Audio aus.", + "Advanced Settings": "Erweiterte Einstellungen", + "Clear Outputs (Deletes all audios in assets/audios)": "Ausgaben löschen (Löscht alle Audios in assets/audios)", + "Custom Output Path": "Benutzerdefinierter Ausgabepfad", + "Output Path": "Ausgabepfad", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "Der Pfad, in dem das Ausgabeaudio gespeichert wird, standardmäßig in assets/audios/output.wav", + "Split Audio": "Audio aufteilen", + "Split the audio into chunks for inference to obtain better results in some cases.": "Teilen Sie die Audiodaten für Rückschlüsse in Blöcke auf, um in einigen Fällen bessere Ergebnisse zu erzielen.", + "Autotune": "Autotune", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "Wenden Sie ein sanftes Autotune auf Ihre Inferenzen an, das für Gesangskonvertierungen empfohlen wird.", + "Clean Audio": "Audio bereinigen", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Bereinigen Sie Ihre Audioausgabe mithilfe von Rauscherkennungsalgorithmen, die für gesprochene Audios empfohlen werden.", + "Clean Strength": "Bereinigungsstärke", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Stellen Sie den Bereinigungsstärke auf den gewünschten Wert ein, je mehr Sie ihn erhöhen, desto mehr wird bereinigt, aber es ist möglich, dass der Ton stärker komprimiert wird.", + "Pitch": "Tonhöhe", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "Stellen Sie die Tonhöhe des Audios ein, je höher der Wert, desto höher die Tonhöhe.", + "Filter Radius": "Filter-Radius", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Wenn die Zahl größer oder gleich drei ist, kann die Verwendung einer Medianfilterung für die gesammelten Tonergebnisse die Atmung verringern.", + "Search Feature Ratio": "Such-Merkmal-Verhältnis", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Einfluss, der von der Indexdatei ausgeübt wird; Ein höherer Wert entspricht einem größeren Einfluss. Wenn Sie sich jedoch für niedrigere Werte entscheiden, können Sie Artefakte im Audiomaterial abschwächen.", + "Volume Envelope": "Lautstärke-Hüllkurve", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Ersetzen oder überblenden Sie die Lautstärke-Hüllkurve des Ausgangs. Je näher das Verhältnis an 1 liegt, desto mehr wird die Ausgangshüllkurve verwendet.", + "Protect Voiceless Consonants": "Schützen Sie stimmlose Konsonanten", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Schützen Sie eindeutige Konsonanten und Atemgeräusche, um elektroakustisches Reißen und andere Artefakte zu vermeiden. Das Ziehen des Parameters auf den Maximalwert von 0,5 bietet einen umfassenden Schutz. Das Verringern dieses Werts kann jedoch den Umfang des Schutzes verringern und gleichzeitig den Indizierungseffekt möglicherweise abschwächen.", + "Pitch extraction algorithm": "Algorithmus zur Tonhöhenextraktion", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Tonhöhenextraktionsalgorithmus, der für die Audiokonvertierung verwendet werden soll. Der Standardalgorithmus ist rmvpe, der in den meisten Fällen empfohlen wird.", + "Convert": "Umwandeln", + "Export Audio": "Audio exportieren", + "Batch": "Charge", + "Input Folder": "Eingabe-Ordner", + "Select the folder containing the audios to convert.": "Wählen Sie den Ordner aus, der die zu konvertierenden Audios enthält.", + "Enter input path": "Eingabepfad eingeben", + "Output Folder": "Ausgabe-Ordner", + "Select the folder where the output audios will be saved.": "Wählen Sie den Ordner aus, in dem die ausgegebenen Audios gespeichert werden sollen.", + "Enter output path": "Ausgabepfad eingeben", + "Get information about the audio": "Abrufen von Informationen zum Audio", + "Information about the audio file": "Informationen zur Audiodatei", + "Waiting for information...": "Warten auf Informationen...", + "## Voice Blender": "## Voice Blender", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Wählen Sie zwei Stimmmodelle aus, legen Sie den gewünschten Überblendungsprozentsatz fest und mischen Sie sie zu einer völlig neuen Stimme.", + "Voice Blender": "Voice Blender", + "Drag and drop your model here": "Ziehen Sie Ihr Modell per Drag & Drop hierher", + "You can also use a custom path.": "Sie können auch einen benutzerdefinierten Pfad verwenden.", + "Blend Ratio": "Mischungsverhältnis", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Wenn Sie die Position mehr auf die eine oder andere Seite anpassen, wird das Modell dem ersten oder zweiten ähnlicher.", + "Fusion": "Verschmelzen", + "Path to Model": "Pfad zum Modell", + "Enter path to model": "Pfad zum Modell eingeben", + "Model information to be placed": "Zu platzierende Modellinformationen", + "Inroduce the model information": "Einfügen der Modellinformationen", + "The information to be placed in the model (You can leave it blank or put anything).": "Die Informationen, die in das Modell eingefügt werden sollen (Sie können das Feld leer lassen oder etwas anderes einfügen).", + "View model information": "Anzeigen von Modellinformationen", + "Introduce the model pth path": "Einfügen des pth Pfad des Modells", + "View": "Ansehen", + "Model extraction": "Modell-Extraktion", + "Model conversion": "Modell-Konvertierung", + "Pth file": "Pth-Datei", + "Output of the pth file": "Ausgabe der pth-Datei", + "# How to Report an Issue on GitHub": "# So melden Sie ein Problem auf GitHub", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Klicken Sie unten auf die Schaltfläche \"Bildschirm aufzeichnen\", um mit der Aufzeichnung des aufgetretenen Problems zu beginnen.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Wenn Sie mit der Aufnahme des Problems fertig sind, klicken Sie auf die Schaltfläche \"Aufnahme beenden\" (dieselbe Schaltfläche, aber die Beschriftung ändert sich, je nachdem, ob Sie aktiv aufnehmen oder nicht).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Gehen Sie zu [GitHub Issues](https://github.com/IAHispano/Applio/issues) und klicken Sie auf die Schaltfläche \"New Issue\".", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Füllen Sie die bereitgestellte Problemvorlage aus, stellen Sie sicher, dass Sie die erforderlichen Details angeben, und verwenden Sie den Abschnitt \"Assets\", um die aufgezeichnete Datei aus dem vorherigen Schritt hochzuladen.", + "Record Screen": "Bildschirm aufzeichnen", + "Record": "Aufzeichnen", + "Stop Recording": "Aufzeichnung beenden", + "Introduce the model .pth path": "Einfügen des .pth Pfad des Modells", + "See Model Information": "Siehe Modellinformationen", + "## Download Model": "## Modell herunterladen", + "Model Link": "Modell-Link", + "Introduce the model link": "Einfügen des Modell-Links", + "Download Model": "Modell herunterladen", + "## Drop files": "## Dateien ablegen", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "Ziehen Sie Ihre .pth und .index Datei in diesen Bereich. Ziehen Sie das eine und dann das andere.", + "TTS Voices": "TTS-Stimmen", + "Select the TTS voice to use for the conversion.": "Wählen Sie die TTS-Stimme aus, die für die Konvertierung verwendet werden soll.", + "Text to Synthesize": "Zu synthetisierender Text", + "Enter the text to synthesize.": "Geben Sie den zu synthetisierenden Text ein.", + "Or you can upload a .txt file": "Oder Sie können eine .txt Datei hochladen", + "Enter text to synthesize": "Geben Sie den zu synthetisierenden Text ein", + "Output Path for TTS Audio": "Ausgabepfad für das TTS-Audio", + "Output Path for RVC Audio": "Ausgabepfad für das RVC-Audio", + "Enable Applio integration with Discord presence": "Aktivieren Sie die Applio-Integration mit Discord-Presence", + "It will activate the possibility of displaying the current Applio activity in Discord.": "Es aktiviert die Möglichkeit, die aktuelle Applio-Aktivität in Discord anzuzeigen.", + "Enable Applio integration with applio.org/models using flask": "Aktivieren der Applio-Integration mit applio.org/models mithilfe von flask", + "It will activate the possibility of downloading models with a click from the website.": "Es aktiviert die Möglichkeit, Modelle mit einem Klick von der Website herunterzuladen.", + "Theme": "Design", + "Select the theme you want to use. (Requires restarting Applio)": "Wählen Sie das Design aus, das Sie verwenden möchten. (Erfordert einen Neustart von Applio)", + "Language": "Sprache", + "Select the language you want to use. (Requires restarting Applio)": "Wählen Sie die Sprache aus, die Sie verwenden möchten. (Erfordert einen Neustart von Applio)", + "Plugin Installer": "Plugin-Installer", + "Drag your plugin.zip to install it": "Ziehen Sie Ihre plugin.zip, um sie zu installieren", + "Version Checker": "Versions-Checker", + "Check which version of Applio is the latest to see if you need to update.": "Überprüfen Sie, welche Version von Applio die neueste ist, um zu sehen, ob Sie ein Update benötigen.", + "Check for updates": "Nach Updates suchen" +} diff --git a/assets/i18n/languages/en_US.json b/assets/i18n/languages/en_US.json new file mode 100644 index 0000000000000000000000000000000000000000..23189320a5cfc9dffe439412886d51c6fa353351 --- /dev/null +++ b/assets/i18n/languages/en_US.json @@ -0,0 +1,224 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.", + "This section contains some extra utilities that often may be in experimental phases.": "This section contains some extra utilities that often may be in experimental phases.", + "Output Information": "Output Information", + "The output information will be displayed here.": "The output information will be displayed here.", + + "Inference": "Inference", + "Train": "Train", + "Extra": "Extra", + "Merge Audios": "Merge Audios", + "Processing": "Processing", + "Audio Analyzer": "Audio Analyzer", + "Model Information": "Model Information", + "Plugins": "Plugins", + "Download": "Download", + "Report a Bug": "Report a Bug", + "Settings": "Settings", + + "Preprocess": "Preprocess", + "Model Name": "Model Name", + "Name of the new model.": "Name of the new model.", + "Enter model name": "Enter model name", + "Dataset Path": "Dataset Path", + "Path to the dataset folder.": "Path to the dataset folder.", + "Refresh Datasets": "Refresh Datasets", + "Dataset Creator": "Dataset Creator", + "Dataset Name": "Dataset Name", + "Name of the new dataset.": "Name of the new dataset.", + "Enter dataset name": "Enter dataset name", + "Upload Audio Dataset": "Upload Audio Dataset", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "The audio file has been successfully added to the dataset. Please click the preprocess button.", + "Enter dataset path": "Enter dataset path", + "Sampling Rate": "Sampling Rate", + "The sampling rate of the audio files.": "The sampling rate of the audio files.", + "RVC Version": "RVC Version", + "The RVC version of the model.": "The RVC version of the model.", + "Preprocess Dataset": "Preprocess Dataset", + + "Embedder Model": "Embedder Model", + "Model used for learning speaker embedding.": "Model used for learning speaker embedding.", + "Extract": "Extract", + "Hop Length": "Hop Length", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.", + "Batch Size": "Batch Size", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.", + "Save Every Epoch": "Save Every Epoch", + "Determine at how many epochs the model will saved at.": "Determine at how many epochs the model will saved at.", + "Total Epoch": "Total Epoch", + "Specifies the overall quantity of epochs for the model training process.": "Specifies the overall quantity of epochs for the model training process.", + "Pretrained": "Pretrained", + "Save Only Latest": "Save Only Latest", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.", + "Save Every Weights": "Save Every Weights", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "This setting enables you to save the weights of the model at the conclusion of each epoch.", + "Custom Pretrained": "Custom Pretrained", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.", + "Upload Pretrained Model": "Upload Pretrained Model", + "Refresh Custom Pretraineds": "Refresh Custom Pretraineds", + "Pretrained Custom Settings": "Pretrained Custom Settings", + "The file you dropped is not a valid pretrained file. Please try again.": "The file you dropped is not a valid pretrained file. Please try again.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "Click the refresh button to see the pretrained file in the dropdown menu.", + "Pretrained G Path": "Custom Pretrained G", + "Pretrained D Path": "Custom Pretrained D", + "GPU Settings": "GPU Settings", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Sets advanced GPU settings, recommended for users with better GPU architecture.", + "GPU Custom Settings": "GPU Custom Settings", + "GPU Number": "GPU Number", + "0 to ∞ separated by -": "0 to ∞ separated by -", + "GPU Information": "GPU Information", + "Pitch Guidance": "Pitch Guidance", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.", + "Extract Features": "Extract Features", + "Overtraining Detector": "Overtraining Detector", + "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.", + "Overtraining Detector Settings": "Overtraining Detector Settings", + "Overtraining Threshold": "Overtraining Threshold", + "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Set the maximum number of epochs you want your model to stop training if no improvement is detected.", + "Sync Graph": "Sync Graph", + "Synchronize the graph of the tensorbaord. Only enable this setting if you are training a new model.": "Synchronize the graph of the tensorbaord. Only enable this setting if you are training a new model.", + + "Start Training": "Start Training", + "Stop Training & Restart Applio": "Stop Training & Restart Applio", + "Generate Index": "Generate Index", + + "Export Model": "Export Model", + "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.", + "Exported Pth file": "Exported Pth file", + "Exported Index file": "Exported Index file", + "Select the pth file to be exported": "Select the pth file to be exported", + "Select the index file to be exported": "Select the index file to be exported", + "Upload": "Upload", + + "Voice Model": "Voice Model", + "Select the voice model to use for the conversion.": "Select the voice model to use for the conversion.", + "Index File": "Index File", + "Select the index file to use for the conversion.": "Select the index file to use for the conversion.", + "Refresh": "Refresh", + "Unload Voice": "Unload Voice", + + "Single": "Single", + "Upload Audio": "Upload Audio", + "Select Audio": "Select Audio", + "Select the audio to convert.": "Select the audio to convert.", + "Advanced Settings": "Advanced Settings", + "Clear Outputs (Deletes all audios in assets/audios)": "Clear Outputs (Deletes all audios in assets/audios)", + "Custom Output Path": "Custom Output Path", + "Output Path": "Output Path", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "The path where the output audio will be saved, by default in assets/audios/output.wav", + "Split Audio": "Split Audio", + "Split the audio into chunks for inference to obtain better results in some cases.": "Split the audio into chunks for inference to obtain better results in some cases.", + "Autotune": "Autotune", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "Apply a soft autotune to your inferences, recommended for singing conversions.", + "Clean Audio": "Clean Audio", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Clean your audio output using noise detection algorithms, recommended for speaking audios.", + "Clean Strength": "Clean Strength", + "Upscale Audio": "Upscale Audio", + "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.", + "Pitch": "Pitch", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "Set the pitch of the audio, the higher the value, the higher the pitch.", + "Filter Radius": "Filter Radius", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.", + "Search Feature Ratio": "Search Feature Ratio", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.", + "Volume Envelope": "Volume Envelope", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.", + "Protect Voiceless Consonants": "Protect Voiceless Consonants", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.", + "Pitch extraction algorithm": "Pitch extraction algorithm", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.", + + "Convert": "Convert", + "Export Audio": "Export Audio", + + "Batch": "Batch", + "Input Folder": "Input Folder", + "Select the folder containing the audios to convert.": "Select the folder containing the audios to convert.", + "Enter input path": "Enter input path", + "Output Folder": "Output Folder", + "Select the folder where the output audios will be saved.": "Select the folder where the output audios will be saved.", + "Enter output path": "Enter output path", + + "Get information about the audio": "Get information about the audio", + + "## Voice Blender": "## Voice Blender", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.", + "Voice Blender": "Voice Blender", + "Drag and drop your model here": "Drag and drop your model here", + "You can also use a custom path.": "You can also use a custom path.", + "Blend Ratio": "Blend Ratio", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Adjusting the position more towards one side or the other will make the model more similar to the first or second.", + "Fusion": "Fusion", + + "Path to Model": "Path to Model", + "Enter path to model": "Enter path to model", + "Model information to be placed": "Model information to be placed", + "Inroduce the model information": "Inroduce the model information", + "The information to be placed in the model (You can leave it blank or put anything).": "The information to be placed in the model (You can leave it blank or put anything).", + "View model information": "View model information", + "Introduce the model pth path": "Introduce the model pth path", + "View": "View", + "Model extraction": "Model extraction", + "Model conversion": "Model conversion", + "Pth file": "Pth file", + "Output of the pth file": "Output of the pth file", + + "# How to Report an Issue on GitHub": "# How to Report an Issue on GitHub", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.", + + "Record Screen": "Record Screen", + "Record": "Record", + "Stop Recording": "Stop Recording", + + "Introduce the model .pth path": "Introduce the model .pth path", + "See Model Information": "See Model Information", + + "## Download Model": "## Download Model", + "Model Link": "Model Link", + "Introduce the model link": "Introduce the model link", + "Download Model": "Download Model", + "## Drop files": "## Drop files", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "Drag your .pth file and .index file into this space. Drag one and then the other.", + "## Search Model": "## Search Model", + "Search": "Search", + "Introduce the model name to search.": "Introduce the model name to search.", + "We couldn't find models by that name.": "We couldn't find models by that name.", + "## Download Pretrained Models": "## Download Pretrained Models", + "Select the pretrained model you want to download.": "Select the pretrained model you want to download.", + "And select the sampling rate": "And select the sampling rate.", + + "TTS Voices": "TTS Voices", + "TTS Speed": "TTS Speed", + "Increase or decrease TTS speed.": "Increase or decrease TTS speed.", + "Select the TTS voice to use for the conversion.": "Select the TTS voice to use for the conversion.", + "Text to Synthesize": "Text to Synthesize", + "Enter the text to synthesize.": "Enter the text to synthesize.", + "Or you can upload a .txt file": "Or you can upload a .txt file", + "Enter text to synthesize": "Enter text to synthesize", + "Output Path for TTS Audio": "Output Path for TTS Audio", + "Output Path for RVC Audio": "Output Path for RVC Audio", + + "Enable Applio integration with Discord presence": "Enable Applio integration with Discord presence", + "It will activate the possibility of displaying the current Applio activity in Discord.": "It will activate the possibility of displaying the current Applio activity in Discord.", + "Enable Applio integration with applio.org/models using flask": "Enable Applio integration with applio.org/models using flask", + "It will activate the possibility of downloading models with a click from the website.": "It will activate the possibility of downloading models with a click from the website.", + "Enable fake GPU": "Enable fake GPU", + "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.", + "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)", + "Theme": "Theme", + "Select the theme you want to use. (Requires restarting Applio)": "Select the theme you want to use. (Requires restarting Applio)", + "Language": "Language", + "Select the language you want to use. (Requires restarting Applio)": "Select the language you want to use. (Requires restarting Applio)", + + "Plugin Installer": "Plugin Installer", + "Drag your plugin.zip to install it": "Drag your plugin.zip to install it", + + "Version Checker": "Version Checker", + "Check which version of Applio is the latest to see if you need to update.": "Check which version of Applio is the latest to see if you need to update.", + "Check for updates": "Check for updates" +} diff --git a/assets/i18n/languages/es_ES.json b/assets/i18n/languages/es_ES.json new file mode 100644 index 0000000000000000000000000000000000000000..700d0c28e92cf4bf5b1f162b060a8f6fb6f34795 --- /dev/null +++ b/assets/i18n/languages/es_ES.json @@ -0,0 +1,205 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "La herramienta de clonación de voz definitiva, meticulosamente optimizada para una potencia, modularidad y experiencia de uso inigualables.", + "This section contains some extra utilities that often may be in experimental phases.": "Esta sección contiene algunas utilidades adicionales que a menudo pueden estar en fases experimentales.", + "Output Information": "Información de salida", + "The output information will be displayed here.": "La información de salida se mostrará aquí.", + "Inference": "Inferencia", + "Train": "Entrenar", + "Extra": "Extra", + "Merge Audios": "Fusionar audios", + "Processing": "Procesamiento", + "Audio Analyzer": "Analizador de audio", + "Model Information": "Información del modelo", + "Plugins": "Complementos", + "Download": "Descargar", + "Report a Bug": "Informar de un error", + "Settings": "Configuración", + "Preprocess": "Preprocesar", + "Model Name": "Nombre del modelo", + "Name of the new model.": "Nombre del nuevo modelo.", + "Enter model name": "Introduzca el nombre del modelo", + "Dataset Path": "Ruta del dataset", + "Path to the dataset folder.": "Ruta de acceso al dataset.", + "Refresh Datasets": "Actualizar datasets", + "Dataset Creator": "Creador de datasets", + "Dataset Name": "Nombre del dataset", + "Name of the new dataset.": "Nombre del nuevo dataset.", + "Enter dataset name": "Introduzca el nombre del dataset", + "Upload Audio Dataset": "Cargar audio del dataset", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "El archivo de audio se ha agregado correctamente dataset. Haga clic en el botón de preprocesamiento.", + "Enter dataset path": "Introduzca la ruta del dataset", + "Sampling Rate": "Frecuencia de muestreo", + "The sampling rate of the audio files.": "La frecuencia de muestreo de los archivos de audio.", + "RVC Version": "Versión RVC", + "The RVC version of the model.": "La versión RVC del modelo.", + "Preprocess Dataset": "Conjunto de datos de preprocesamiento", + "Embedder Model": "Modelo de incrustación", + "Model used for learning speaker embedding.": "Modelo utilizado para aprender la incrustación del hablante.", + "Hop Length": "Longitud del salto", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Denota el tiempo que tarda el sistema en realizar la transición a un cambio de tono significativo. Las longitudes de salto más pequeñas requieren más tiempo para la inferencia, pero tienden a producir una mayor precisión de tono.", + "Batch Size": "Tamaño del lote", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Es recomendable alinearlo con la VRAM disponible de tu GPU. Un ajuste de 4 ofrece una precisión mejorada pero un procesamiento más lento, mientras que 8 proporciona resultados más rápidos y estándar.", + "Save Every Epoch": "Frecuencia de guardado", + "Determine at how many epochs the model will saved at.": "Determine en cuántas épocas se guardará el modelo.", + "Total Epoch": "Épocas", + "Specifies the overall quantity of epochs for the model training process.": "Especifica la cantidad total de épocas para el proceso de entrenamiento del modelo.", + "Pretrained": "Preentrenado", + "Save Only Latest": "Guarde solo lo último", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Al habilitar esta configuración, los archivos G y D guardarán solo sus versiones más recientes, lo que ahorrará espacio de almacenamiento de manera efectiva.", + "Save Every Weights": "Ahorre todos los pesos", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Este ajuste le permite guardar los pesos del modelo al final de cada época.", + "Custom Pretrained": "Preentrenado personalizado", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "El uso de modelos preentrenados personalizados puede conducir a resultados superiores, ya que la selección de los modelos preentrenados más adecuados adaptados al caso de uso específico puede mejorar significativamente el rendimiento.", + "Upload Pretrained Model": "Cargar modelo previamente entrenado", + "Refresh Custom Pretraineds": "Actualizar preentrenados personalizados", + "Pretrained Custom Settings": "Configuración personalizada previamente entrenada", + "The file you dropped is not a valid pretrained file. Please try again.": "El archivo que has subido no es un archivo preentrenado válido. Por favor, inténtelo de nuevo.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "Haga clic en el botón de actualización para ver el archivo previamente entrenado en el menú desplegable.", + "Pretrained G Path": "G preentrenado personalizado", + "Pretrained D Path": "D preentrenado personalizado", + "GPU Settings": "Configuración de GPU", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Establece la configuración avanzada del GPU, recomendada para usuarios con una mejor arquitectura de GPU.", + "GPU Custom Settings": "Configuración personalizada de la GPU", + "GPU Number": "Número de GPU", + "0 to ∞ separated by -": "0 a ∞ separados por -", + "GPU Information": "Información de GPU", + "Pitch Guidance": "Guía de tono", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Al emplear la guía de tono, es factible reflejar la entonación de la voz original, incluido su tono. Esta característica es particularmente valiosa para cantar y otros escenarios en los que es esencial preservar la melodía original o el patrón de tono.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilice modelos preentrenados al entrenar los suyos propios. Este enfoque reduce la duración del entrenamiento y mejora la calidad general.", + "Extract Features": "Extraer características", + "Overtraining Detector": "Detector de Sobreentrenamiento", + "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Detectar el sobreentrenamiento para evitar que el modelo aprenda demasiado bien los datos de entrenamiento y pierda la capacidad de generalizar a nuevos datos.", + "Overtraining Detector Settings": "Configuraciones del Detector de Sobreentrenamiento", + "Overtraining Threshold": "Umbral de Sobreentrenamiento", + "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Establezca el número máximo de épocas para que su modelo deje de entrenar si no se detecta ninguna mejora.", + "Sync Graph": "Sincronizar gráfico", + "Synchronize the graph of the tensorbaord. Only enable this setting if you are training a new model.": "Sincronice el gráfico del tensorbaord. Solo active esta configuración si está entrenando un nuevo modelo.", + "Start Training": "Empezar a entrenar", + "Stop Training & Restart Applio": "Detener el entrenamiento y reiniciar Applio", + "Generate Index": "Generar índice", + "Export Model": "Exportar modelo", + "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "El botón 'Subir' es solo para Google Colab: Sube los archivos exportados a la carpeta ApplioExported en tu Google Drive.", + "Exported Pth file": "Archivo Pth exportado", + "Exported Index file": "Archivo de índice exportado", + "Select the pth file to be exported": "Seleccione el archivo pth que se va a exportar", + "Select the index file to be exported": "Seleccione el archivo de índice que se va a exportar", + "Upload": "Subir", + "Voice Model": "Modelo de voz", + "Select the voice model to use for the conversion.": "Seleccione el modelo de voz que desea utilizar para la conversión.", + "Index File": "Archivo de índice", + "Select the index file to use for the conversion.": "Seleccione el archivo de índice que desea utilizar para la conversión.", + "Refresh": "Actualizar", + "Unload Voice": "Descargar voz", + "Single": "Solo", + "Upload Audio": "Subir audio", + "Select Audio": "Seleccionar audio", + "Select the audio to convert.": "Seleccione el audio que desea convertir.", + "Advanced Settings": "Ajustes avanzados", + "Clear Outputs (Deletes all audios in assets/audios)": "Borrar salidas (elimina todos los audios de los assets/audios)", + "Custom Output Path": "Ruta de salida personalizada", + "Output Path": "Ruta de salida", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "La ruta donde se guardará el audio de salida, de forma predeterminada en assets/audios/output.wav", + "Split Audio": "Audio dividido", + "Split the audio into chunks for inference to obtain better results in some cases.": "Divida el audio en fragmentos para inferir y obtener mejores resultados en algunos casos.", + "Autotune": "Autotune", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "Aplique un autotune suave a sus inferencias, recomendado para conversiones de canto.", + "Clean Audio": "Audio limpio", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Limpie su salida de audio utilizando algoritmos de detección de ruido, recomendados para audios hablados.", + "Clean Strength": "Fuerza de limpieza", + "Upscale Audio": "Audio de alta calidad", + "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)": "Mejore la calidad del audio a una calidad superior, recomendado para audios de baja calidad. (Podría tardar más en procesar el audio)", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Establezca el nivel de limpieza en el audio que desee, cuanto más lo aumente, más se limpiará, pero es posible que el audio esté más comprimido.", + "Pitch": "Tono", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "Establezca el tono del audio, cuanto mayor sea el valor, mayor será el tono.", + "Filter Radius": "Radio del filtro", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Si el número es mayor o igual a tres, el empleo de filtrado de mediana en los resultados de tono recopilados tiene el potencial de disminuir la respiración.", + "Search Feature Ratio": "Relación de características de búsqueda", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influencia ejercida por el fichero índice; Un valor más alto corresponde a una mayor influencia. Sin embargo, optar por valores más bajos puede ayudar a mitigar los artefactos presentes en el audio.", + "Volume Envelope": "Envoltura de volumen", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Sustituya o mezcle con la envoltura de volumen de la salida. Cuanto más se acerque la relación a 1, más se empleará la envoltura de salida.", + "Protect Voiceless Consonants": "Proteger las consonantes sordas", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Proteja las distintas consonantes y sonidos respiratorios para evitar desgarros electroacústicos y otros artefactos. Llevar el parámetro a su valor máximo de 0,5 ofrece una protección completa. Sin embargo, la reducción de este valor podría disminuir el alcance de la protección y, al mismo tiempo, mitigar el efecto de indexación.", + "Pitch extraction algorithm": "Algoritmo de extracción de tono", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritmo de extracción de tono que se utilizará para la conversión de audio. El algoritmo predeterminado es rmvpe, que se recomienda para la mayoría de los casos.", + "Convert": "Convertir", + "Export Audio": "Exportar audio", + "Batch": "Lote", + "Input Folder": "Carpeta de entrada", + "Select the folder containing the audios to convert.": "Seleccione la carpeta que contiene los audios que desea convertir.", + "Enter input path": "Introduzca la ruta de entrada", + "Output Folder": "Carpeta de salida", + "Select the folder where the output audios will be saved.": "Seleccione la carpeta donde se guardarán los audios de salida.", + "Enter output path": "Introduzca la ruta de salida", + "Get information about the audio": "Obtener información sobre el audio", + "Information about the audio file": "Información sobre el archivo de audio", + "Waiting for information...": "A la espera de información...", + "## Voice Blender": "## Mezclador de voz", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Seleccione dos modelos de voz, establezca el porcentaje de mezcla deseado y combínelos en una voz completamente nueva.", + "Voice Blender": "Mezclador de voz", + "Drag and drop your model here": "Arrastra y suelta tu modelo aquí", + "You can also use a custom path.": "También puede utilizar una ruta de acceso personalizada.", + "Blend Ratio": "Relación de mezcla", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Ajustar la posición más hacia un lado u otro hará que el modelo se parezca más al primero o al segundo.", + "Fusion": "Fusión", + "Path to Model": "Ruta de acceso al modelo", + "Enter path to model": "Introduzca la ruta al modelo", + "Model information to be placed": "Información del modelo que se va a colocar", + "Inroduce the model information": "Introduzca la información del modelo", + "The information to be placed in the model (You can leave it blank or put anything).": "La información que se va a colocar en el modelo (Puedes dejarlo en blanco o poner cualquier cosa).", + "View model information": "Ver información del modelo", + "Introduce the model pth path": "Introducción de la ruta pth del modelo", + "View": "Vista", + "Model extraction": "Extracción de modelos", + "Model conversion": "Conversión de modelos", + "Pth file": "Archivo Pth", + "Output of the pth file": "Salida del fichero pth", + "# How to Report an Issue on GitHub": "# Cómo reportar un problema en GitHub", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Haga clic en el botón 'Grabar pantalla' a continuación para comenzar a grabar el problema que está experimentando.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Una vez que haya terminado de grabar el problema, haga clic en el botón 'Detener grabación' (el mismo botón, pero la etiqueta cambia dependiendo de si está grabando activamente o no).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Vaya a [Problemas de GitHub](https://github.com/IAHispano/Applio/issues) y haga clic en el botón 'Nuevo problema'.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Complete la plantilla de problema proporcionada, asegurándose de incluir los detalles según sea necesario, y utilice la sección de activos para cargar el archivo grabado del paso anterior.", + "Record Screen": "Grabar pantalla", + "Record": "Grabar", + "Stop Recording": "Detener la grabación", + "Introduce the model .pth path": "Introducción de la ruta de acceso .pth del modelo", + "See Model Information": "Ver información del modelo", + "## Download Model": "## Descargar modelo", + "Model Link": "Enlace de modelo", + "Introduce the model link": "Introducir el enlace del modelo", + "Download Model": "Descargar modelo", + "## Drop files": "## Soltar archivos", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "Arrastre el archivo .pth y el archivo .index a este espacio. Arrastre uno y luego el otro.", + "## Search Model": "## Buscar modelo", + "Search": "Buscar", + "Introduce the model name to search.": "Introduzca el nombre del modelo a buscar.", + "We couldn't find models by that name.": "No pudimos encontrar modelos con ese nombre.", + "## Download Pretrained Models": "## Descargar modelos preentrenados", + "Select the pretrained model you want to download.": "Seleccione el modelo preentrenado que desea descargar.", + "And select the sampling rate.": "Y seleccione la frecuencia de muestreo.", + "TTS Voices": "Voces TTS", + "TTS Speed": "Velocidad TTS", + "Increase or decrease TTS speed": "Aumentar o disminuir la velocidad de TTS", + "Select the TTS voice to use for the conversion.": "Seleccione la voz TTS que se utilizará para la conversión.", + "Text to Synthesize": "Texto para sintetizar", + "Enter the text to synthesize.": "Introduzca el texto que desea sintetizar.", + "Or you can upload a .txt file": "O bien, puede cargar un archivo .txt", + "Enter text to synthesize": "Introduzca el texto que desea sintetizar", + "Output Path for TTS Audio": "Ruta de salida para audio TTS", + "Output Path for RVC Audio": "Ruta de salida para audio RVC", + "Enable Applio integration with Discord presence": "Habilitar la integración de Applio con la presencia de Discord", + "It will activate the possibility of displaying the current Applio activity in Discord.": "Activará la posibilidad de mostrar la actividad actual de Applio en Discord.", + "Enable Applio integration with applio.org/models using flask": "Habilite la integración de Applio con applio.org/models usando flask", + "It will activate the possibility of downloading models with a click from the website.": "Activará la posibilidad de descargar modelos con un clic desde el sitio web.", + "Enable fake GPU": "Habilitar GPU falsa", + "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "Actualmente no se admite el entrenamiento debido a la ausencia de una GPU. Para activar la pestaña de entrenamiento, vaya a la pestaña de configuración y habilite la opción 'GPU falsa'.", + "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Activa la pestaña de entrenamiento. Sin embargo, tenga en cuenta que este dispositivo carece de capacidades de GPU, por lo que no se admite el entrenamiento. Esta opción es solo para fines de prueba. (Esta opción reiniciará Applio)", + "Theme": "Tema", + "Select the theme you want to use. (Requires restarting Applio)": "Seleccione el tema que desea utilizar. (Requiere reiniciar Applio)", + "Language": "Idioma", + "Select the language you want to use. (Requires restarting Applio)": "Seleccione el idioma que desea utilizar. (Requiere reiniciar Applio)", + "Plugin Installer": "Instalador de complementos", + "Drag your plugin.zip to install it": "Arrastra tu plugin.zip para instalarlo", + "Version Checker": "Comprobador de versiones", + "Check which version of Applio is the latest to see if you need to update.": "Compruebe qué versión de Applio es la más reciente para ver si necesita actualizar.", + "Check for updates": "Buscar actualizaciones" +} diff --git a/assets/i18n/languages/fa_FA.json b/assets/i18n/languages/fa_FA.json new file mode 100644 index 0000000000000000000000000000000000000000..6992ef5ea517f2a5ab3bdc9af804f364c8ea5f29 --- /dev/null +++ b/assets/i18n/languages/fa_FA.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "ابزار شبیه سازی صدا نهایی، با دقت برای قدرت بی نظیر، مدولار بودن و تجربه کاربر پسند بهینه شده است.", + "This section contains some extra utilities that often may be in experimental phases.": "این بخش شامل برخی از ابزارهای اضافی است که اغلب ممکن است در مراحل ازمایشی باشد.", + "Output Information": "اطلاعات خروجی", + "The output information will be displayed here.": "اطلاعات خروجی در اینجا نمایش داده خواهد شد.", + "Inference": "استنباط", + "Train": "قطار", + "Extra": "اضافی", + "Merge Audios": "ادغام Audios", + "Processing": "پردازش", + "Audio Analyzer": "انالایزر صوتی", + "Model Information": "اطلاعات مدل", + "Plugins": "پلاگین", + "Download": "دانلود", + "Report a Bug": "گزارش یک باگ", + "Settings": "تنظیمات", + "Preprocess": "پیش پردازش", + "Model Name": "نام مدل", + "Name of the new model.": "نام مدل جدید", + "Enter model name": "نام مدل را وارد کنید", + "Dataset Path": "مسیر مجموعه داده", + "Path to the dataset folder.": "مسیر به پوشه مجموعه داده ها.", + "Refresh Datasets": "بازاوری مجموعه داده ها", + "Dataset Creator": "سازنده مجموعه داده", + "Dataset Name": "نام مجموعه داده", + "Name of the new dataset.": "نام مجموعه داده های جدید", + "Enter dataset name": "وارد کردن نام مجموعه داده ها", + "Upload Audio Dataset": "اپلود مجموعه داده های صوتی", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "فایل صوتی با موفقیت به مجموعه داده ها اضافه شده است. لطفا دکمه پیش پردازش را فشار دهید.", + "Enter dataset path": "وارد کردن مسیر مجموعه داده ها", + "Sampling Rate": "نرخ نمونه برداری", + "The sampling rate of the audio files.": "نرخ نمونه برداری از فایل های صوتی.", + "RVC Version": "نسخه RVC", + "The RVC version of the model.": "نسخه RVC از مدل.", + "Preprocess Dataset": "مجموعه داده پیش پردازش", + "Extract": "عصاره", + "Hop Length": "طول هاپ", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "نشان دهنده مدت زمان لازم برای سیستم برای انتقال به یک تغییر قابل توجه است. طول هاپ کوچکتر نیاز به زمان بیشتری برای استنتاج دارد اما تمایل به عملکرد دقت بالاتر دارد.", + "Batch Size": "اندازه دسته", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "توصیه می شود ان را با VRAM موجود GPU خود هماهنگ کنید. تنظیمات 4 ارائه می دهد دقت بهبود یافته اما پردازش کندتر، در حالی که 8 نتایج سریع تر و استاندارد را فراهم می کند.", + "Save Every Epoch": "ذخیره هر عصر", + "Determine at how many epochs the model will saved at.": "تعیین کنید که مدل در چند دوره ذخیره خواهد شد.", + "Total Epoch": "کل اپک", + "Specifies the overall quantity of epochs for the model training process.": "مقدار کلی دوره ها را برای فرایند اموزش مدل مشخص می کند.", + "Pretrained": "پیش اموزش دیده", + "Save Only Latest": "ذخیره فقط اخرین", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "فعال کردن این تنظیم منجر به صرفه جویی در فایل های G و D تنها نسخه های اخیر انها می شود و به طور موثر فضای ذخیره سازی را حفظ می کند.", + "Save Every Weights": "صرفه جویی در هر وزن", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "این تنظیم شما را قادر به صرفه جویی در وزن مدل در پایان هر دوره می کند.", + "Custom Pretrained": "سفارشی پیش اموزش دیده", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "استفاده از مدل های از پیش اموزش دیده سفارشی می تواند منجر به نتایج برتر شود، زیرا انتخاب مناسب ترین مدل های از پیش اموزش دیده متناسب با مورد استفاده خاص می تواند به طور قابل توجهی عملکرد را افزایش دهد.", + "Upload Pretrained Model": "اپلود مدل از پیش اموزش دیده", + "Refresh Custom Pretraineds": "تازه کردن Pretraineds سفارشی", + "Pretrained Custom Settings": "تنظیمات سفارشی از پیش اموزش داده شده", + "The file you dropped is not a valid pretrained file. Please try again.": "پرونده ای که حذف کرده اید یک پرونده از پیش اموزش داده شده معتبر نیست. لطفا دوباره تلاش کنید.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "با کلیک بر روی دکمه تازه کردن برای دیدن فایل از پیش اموزش دیده در منوی کشویی.", + "Pretrained G Path": "سفارشی پیش اموزش G", + "Pretrained D Path": "سفارشی از پیش اموزش دیده D", + "GPU Settings": "تنظیمات GPU", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "تنظیمات پیشرفته GPU را تنظیم می کند که برای کاربران با معماری GPU بهتر توصیه می شود.", + "GPU Custom Settings": "تنظیمات سفارشی GPU", + "GPU Number": "شماره GPU", + "0 to ∞ separated by -": "0 به ∞ جدا شده توسط -", + "GPU Information": "اطلاعات GPU", + "Pitch Guidance": "راهنمای زمین", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "با استفاده از راهنمایی زمین، امکان پذیر است که زیر و بمی صدا اصلی، از جمله زمین ان را منعکس کند. این ویژگی به ویژه برای اواز خواندن و سناریوهای دیگر که در ان حفظ ملودی اصلی یا الگوی زمین ضروری است، ارزشمند است.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "از مدل های از پیش اموزش دیده در هنگام اموزش خود استفاده کنید. این رویکرد مدت زمان اموزش را کاهش می دهد و کیفیت کلی را افزایش می دهد.", + "Extract Features": "استخراج ویژگی ها", + "Start Training": "شروع اموزش", + "Generate Index": "ایجاد نمایه", + "Voice Model": "مدل صوتی", + "Select the voice model to use for the conversion.": "مدل صوتی مورد استفاده برای تبدیل را انتخاب کنید.", + "Index File": "پروندۀ نمایه", + "Select the index file to use for the conversion.": "انتخاب فایل شاخص برای استفاده برای تبدیل.", + "Refresh": "نوسازی", + "Unload Voice": "بارگیری صدا", + "Single": "تک", + "Upload Audio": "بارگذاری صدا", + "Select Audio": "انتخاب صدا", + "Select the audio to convert.": "صدا را برای تبدیل انتخاب کنید.", + "Advanced Settings": "تنظیمات پیشرفته", + "Clear Outputs (Deletes all audios in assets/audios)": "پاک کردن خروجی ها (حذف تمام فایل های صوتی در دارایی ها / audios)", + "Custom Output Path": "مسیر خروجی سفارشی", + "Output Path": "مسیر خروجی", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "مسیری که در ان صدای خروجی ذخیره می شود، به طور پیش فرض در assets/audios/output.wav", + "Split Audio": "تقسیم صوتی", + "Split the audio into chunks for inference to obtain better results in some cases.": "صدا را به تکه های تقسیم کنید تا استنتاج شود تا در برخی موارد نتایج بهتری کسب شود.", + "Autotune": "Autotune", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "درخواست autotune نرم به استنتاج خود را، توصیه می شود برای تبدیل اواز.", + "Clean Audio": "پاک صوتی", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "خروجی صوتی خود را با استفاده از الگوریتم های تشخیص سر و صدا تمیز کنید، توصیه شده برای صحبت کردن صوتی.", + "Clean Strength": "قدرت پاک", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "سطح پاکسازی را به صوتی که می خواهید تنظیم کنید، هرچه بیشتر ان را افزایش دهید، بیشتر تمیز می شود، اما ممکن است صدا فشرده تر شود.", + "Pitch": "زمین", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "زمین صدا را تنظیم کنید، هر چه مقدار بالاتر باشد، زمین بالاتر است.", + "Filter Radius": "شعاع پالا", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "اگر عدد بزرگتر یا مساوی با سه باشد، استفاده از فیلتر متوسط در نتایج تن جمع اوری شده پتانسیل کاهش تنفس را دارد.", + "Search Feature Ratio": "نسبت ویژگی جستجو", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "تاثیر اعمال شده توسط فایل شاخص؛ ارزش بالاتر مربوط به نفوذ بیشتر است. با این حال، انتخاب مقادیر پایین تر می تواند به کاهش مصنوعات موجود در صدا کمک کند.", + "Volume Envelope": "پاکت جلد", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "جایگزین یا ترکیب با پاکت حجم خروجی. هر چه نسبت به 1 نزدیک تر باشد، پاکت خروجی بیشتر استفاده می شود.", + "Protect Voiceless Consonants": "محافظت از صامت های بی صدا", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "حفاظت از صامت های متمایز و صداهای تنفسی برای جلوگیری از پارگی الکترو اکوستیک و سایر مصنوعات. کشیدن پارامتر به حداکثر مقدار ان از 0.5 ارائه می دهد حفاظت جامع. با این حال، کاهش این مقدار ممکن است میزان حفاظت را کاهش دهد در حالی که به طور بالقوه اثر نمایه سازی را کاهش می دهد.", + "Pitch extraction algorithm": "الگوریتم استخراج زمین", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "الگوریتم استخراج زمین برای استفاده برای تبدیل صوتی. الگوریتم پیش فرض rmvpe است که برای اکثر موارد توصیه می شود.", + "Convert": "تبدیل", + "Export Audio": "صادرات صدا", + "Batch": "دسته", + "Input Folder": "پوشه ورودی", + "Select the folder containing the audios to convert.": "پوشه حاوی فایل های صوتی را برای تبدیل انتخاب کنید.", + "Enter input path": "وارد کردن مسیر ورودی", + "Output Folder": "پوشۀ خروجی", + "Select the folder where the output audios will be saved.": "پوشه ای را انتخاب کنید که صدای خروجی در ان ذخیره می شود.", + "Enter output path": "وارد کردن مسیر خروجی", + "Get information about the audio": "دریافت اطلاعات در مورد صدا", + "Information about the audio file": "اطلاعات مربوط به فایل صوتی", + "Waiting for information...": "در انتظار اطلاعات...", + "## Voice Blender": "## بلندر صوتی", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "دو مدل صوتی را انتخاب کنید، درصد ترکیب مورد نظر خود را تنظیم کنید و انها را به یک صدای کاملا جدید ترکیب کنید.", + "Voice Blender": "بلندر صوتی", + "Drag and drop your model here": "کشیدن و رها کردن مدل خود را در اینجا", + "You can also use a custom path.": "شما همچنین می توانید از یک مسیر سفارشی استفاده کنید.", + "Blend Ratio": "نسبت مخلوط", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "تنظیم موقعیت بیشتر به سمت یک طرف یا طرف دیگر، مدل را بیشتر شبیه به اول یا دوم می کند.", + "Fusion": "همجوشی", + "Path to Model": "مسیر به مدل", + "Enter path to model": "وارد کردن مسیر به مدل", + "Model information to be placed": "اطلاعات مدل قرار داده می شود", + "Inroduce the model information": "Inroduce اطلاعات مدل", + "The information to be placed in the model (You can leave it blank or put anything).": "اطلاعاتی که باید در مدل قرار داده شود (شما می توانید ان را خالی بگذارید یا هر چیزی را قرار دهید).", + "View model information": "مشاهده اطلاعات مدل", + "Introduce the model pth path": "معرفی مسیر PTH مدل", + "View": "مشاهده", + "Model extraction": "استخراج مدل", + "Model conversion": "تبدیل مدل", + "Pth file": "پرونده Pth", + "Output of the pth file": "خروجی پروندۀ pth", + "# How to Report an Issue on GitHub": "# چگونه یک مشکل را در GitHub گزارش دهیم", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. با کلیک بر روی 'ضبط صفحه نمایش' دکمه زیر برای شروع ضبط مسئله شما در حال تجربه.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. هنگامی که ضبط مسئله را به پایان رساندید، بر روی دکمه \"توقف ضبط\" کلیک کنید (همان دکمه، اما برچسب بسته به اینکه ایا شما به طور فعال ضبط می کنید یا نه تغییر می کند).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. به [GitHub Issues] (https://github.com/IAHispano/Applio/issues) بروید و بر روی دکمه \"New Issue\" کلیک کنید.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. تکمیل قالب موضوع ارائه شده، اطمینان حاصل شود که شامل جزئیات در صورت نیاز، و استفاده از بخش دارایی برای اپلود فایل ضبط شده از مرحله قبلی.", + "Record Screen": "صفحه ضبط", + "Record": "رکورد", + "Stop Recording": "توقف ضبط", + "Introduce the model .pth path": "معرفی مسیر .pth مدل", + "See Model Information": "مشاهده اطلاعات مدل", + "## Download Model": "## دانلود مدل", + "Model Link": "پیوند مدل", + "Introduce the model link": "معرفی لینک مدل", + "Download Model": "دانلود مدل", + "## Drop files": "## رها کردن پروندهها", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "فایل .pth و .index خود را به این فضا بکشید. یکی را بکشید و سپس دیگری را بکشید.", + "TTS Voices": "TTS صداها", + "Select the TTS voice to use for the conversion.": "صدای TTS را برای استفاده برای تبدیل انتخاب کنید.", + "Text to Synthesize": "متن برای سنتز", + "Enter the text to synthesize.": "متن را برای ترکیب وارد کنید.", + "Or you can upload a .txt file": "یا شما می توانید یک فایل .txt اپلود کنید", + "Enter text to synthesize": "متن را برای سنتز وارد کنید", + "Output Path for TTS Audio": "مسیر خروجی برای صدای TTS", + "Output Path for RVC Audio": "مسیر خروجی برای RVC Audio", + "Enable Applio integration with Discord presence": "ادغام Applio را با حضور Discord فعال کنید", + "It will activate the possibility of displaying the current Applio activity in Discord.": "این امکان نمایش فعالیت Applio فعلی در Discord را فعال خواهد کرد.", + "Enable Applio integration with applio.org/models using flask": "فعال کردن ادغام Applio با applio.org/models با استفاده از فلاسک", + "It will activate the possibility of downloading models with a click from the website.": "این امکان دانلود مدل ها را با یک کلیک از وب سایت فعال می کند.", + "Theme": "تم", + "Select the theme you want to use. (Requires restarting Applio)": "زمینه ای را که می خواهید استفاده کنید انتخاب کنید. (نیاز به راه اندازی مجدد Applio)", + "Language": "زبان", + "Select the language you want to use. (Requires restarting Applio)": "زبانی را که می خواهید استفاده کنید انتخاب کنید. (نیاز به راه اندازی مجدد Applio)", + "Plugin Installer": "نصب افزونه", + "Drag your plugin.zip to install it": "plugin.zip خود را بکشید تا ان را نصب کنید", + "Version Checker": "بررسی نسخه", + "Check which version of Applio is the latest to see if you need to update.": "بررسی کنید که کدام نسخه از Applio اخرین است تا ببینید ایا شما نیاز به به روز رسانی دارید.", + "Check for updates": "بررسی برای به روز رسانی" +} \ No newline at end of file diff --git a/assets/i18n/languages/fr_FR.json b/assets/i18n/languages/fr_FR.json new file mode 100644 index 0000000000000000000000000000000000000000..a990d855a9a32764ef20145414a025837616049a --- /dev/null +++ b/assets/i18n/languages/fr_FR.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "Outil ultime de clonage vocal, méticuleusement optimisé pour une puissance, une modularité et une expérience conviviales inégalées.", + "This section contains some extra utilities that often may be in experimental phases.": "Cette section contient quelques utilitaires supplémentaires qui peuvent souvent être en phase expérimentale.", + "Output Information": "Informations de sortie", + "The output information will be displayed here.": "Les informations de sortie seront affichées ici.", + "Inference": "Inférence", + "Train": "Train", + "Extra": "Supplémentaire", + "Merge Audios": "Fusionner les audios", + "Processing": "Traitement", + "Audio Analyzer": "Analyseur audio", + "Model Information": "Informations sur le modèle", + "Plugins": "Plugins (Plugins)", + "Download": "Télécharger", + "Report a Bug": "Signaler un bogue", + "Settings": "Paramètres", + "Preprocess": "Pré-traitement", + "Model Name": "Nom du modèle", + "Name of the new model.": "Nom du nouveau modèle.", + "Enter model name": "Entrez le nom du modèle", + "Dataset Path": "Chemin d’accès au jeu de données", + "Path to the dataset folder.": "Chemin d’accès au dossier du jeu de données.", + "Refresh Datasets": "Actualiser les jeux de données", + "Dataset Creator": "Créateur de jeux de données", + "Dataset Name": "Nom du jeu de données", + "Name of the new dataset.": "Nom du nouveau jeu de données.", + "Enter dataset name": "Entrez le nom du jeu de données", + "Upload Audio Dataset": "Télécharger un jeu de données audio", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Le fichier audio a été ajouté avec succès au jeu de données. Veuillez cliquer sur le bouton de prétraitement.", + "Enter dataset path": "Entrez le chemin d’accès au jeu de données", + "Sampling Rate": "Fréquence d’échantillonnage", + "The sampling rate of the audio files.": "Fréquence d’échantillonnage des fichiers audio.", + "RVC Version": "RVC Version", + "The RVC version of the model.": "La version RVC du modèle.", + "Preprocess Dataset": "Jeu de données de prétraitement", + "Extract": "Extraire", + "Hop Length": "Longueur du houblon", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Indique le temps qu’il faut au système pour passer à un changement de hauteur significatif. Les longueurs de saut plus petites nécessitent plus de temps pour l’inférence, mais ont tendance à donner une plus grande précision de hauteur.", + "Batch Size": "Taille du lot", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Il est conseillé de l’aligner sur la VRAM disponible de votre GPU. Un réglage de 4 offre une précision améliorée mais un traitement plus lent, tandis que 8 fournit des résultats plus rapides et standard.", + "Save Every Epoch": "Sauvez toutes les époques", + "Determine at how many epochs the model will saved at.": "Déterminez à combien d’époques le modèle sera enregistré.", + "Total Epoch": "Époque totale", + "Specifies the overall quantity of epochs for the model training process.": "Spécifie la quantité globale d’époques pour le processus d’entraînement du modèle.", + "Pretrained": "Pré-entraîné", + "Save Only Latest": "Enregistrer uniquement les plus récents", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "L’activation de ce paramètre permet aux fichiers G et D d’enregistrer uniquement leurs versions les plus récentes, ce qui permet d’économiser efficacement de l’espace de stockage.", + "Save Every Weights": "Économisez tous les poids", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Ce paramètre vous permet d’enregistrer les poids du modèle à la fin de chaque époque.", + "Custom Pretrained": "Pré-entraîné sur mesure", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "L’utilisation de modèles préentraînés personnalisés peut conduire à des résultats supérieurs, car la sélection des modèles préentraînés les plus appropriés et adaptés au cas d’utilisation spécifique peut améliorer considérablement les performances.", + "Upload Pretrained Model": "Télécharger un modèle pré-entraîné", + "Refresh Custom Pretraineds": "Actualiser les pré-entraînés personnalisés", + "Pretrained Custom Settings": "Paramètres personnalisés préentraînés", + "The file you dropped is not a valid pretrained file. Please try again.": "Le fichier que vous avez déposé n’est pas un fichier pré-entraîné valide. Veuillez réessayer.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "Cliquez sur le bouton d’actualisation pour afficher le fichier préentraîné dans le menu déroulant.", + "Pretrained G Path": "G pré-entraîné personnalisé", + "Pretrained D Path": "D pré-entraîné personnalisé", + "GPU Settings": "Paramètres GPU", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Définit les paramètres GPU avancés, recommandés pour les utilisateurs disposant d’une meilleure architecture GPU.", + "GPU Custom Settings": "Paramètres personnalisés du GPU", + "GPU Number": "Numéro de GPU", + "0 to ∞ separated by -": "0 à ∞ séparés par -", + "GPU Information": "Informations sur le GPU", + "Pitch Guidance": "Guidage de la hauteur", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "En utilisant le guidage de hauteur, il devient possible de refléter l’intonation de la voix d’origine, y compris sa hauteur. Cette fonctionnalité est particulièrement utile pour le chant et d’autres scénarios où la préservation de la mélodie ou du modèle de hauteur d’origine est essentielle.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilisez des modèles pré-entraînés lors de l’entraînement des vôtres. Cette approche permet de réduire la durée de la formation et d’améliorer la qualité globale.", + "Extract Features": "Extraire des caractéristiques", + "Start Training": "Commencer l’entraînement", + "Generate Index": "Générer un index", + "Voice Model": "Modèle vocal", + "Select the voice model to use for the conversion.": "Sélectionnez le modèle vocal à utiliser pour la conversion.", + "Index File": "Fichier d’index", + "Select the index file to use for the conversion.": "Sélectionnez le fichier d’index à utiliser pour la conversion.", + "Refresh": "Rafraîchir", + "Unload Voice": "Décharger la voix", + "Single": "Célibataire", + "Upload Audio": "Télécharger l’audio", + "Select Audio": "Sélectionnez Audio (Audio)", + "Select the audio to convert.": "Sélectionnez l’audio à convertir.", + "Advanced Settings": "Paramètres avancés", + "Clear Outputs (Deletes all audios in assets/audios)": "Effacer les sorties (supprime tous les audios dans les ressources/audios)", + "Custom Output Path": "Chemin de sortie personnalisé", + "Output Path": "Chemin de sortie", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "Le chemin où l’audio de sortie sera enregistré, par défaut dans assets/audios/output.wav", + "Split Audio": "Diviser l’audio", + "Split the audio into chunks for inference to obtain better results in some cases.": "Divisez l’audio en morceaux pour l’inférence afin d’obtenir de meilleurs résultats dans certains cas.", + "Autotune": "Réglage automatique", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "Appliquez un réglage automatique doux à vos inférences, recommandé pour les conversions de chant.", + "Clean Audio": "Audio clair", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Nettoyez votre sortie audio à l’aide d’algorithmes de détection de bruit, recommandés pour les audios parlants.", + "Clean Strength": "Force propre", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Réglez le niveau de nettoyage sur l’audio que vous souhaitez, plus vous l’augmentez plus il nettoiera, mais il est possible que l’audio soit plus compressé.", + "Pitch": "Tanguer", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "Réglez la hauteur de l’audio, plus la valeur est élevée, plus la hauteur est élevée.", + "Filter Radius": "Rayon du filtre", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Si le nombre est supérieur ou égal à trois, l’utilisation d’un filtrage médian sur les résultats de tonalité recueillis a le potentiel de diminuer la respiration.", + "Search Feature Ratio": "Rapport de caractéristiques de recherche", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influence exercée par le fichier d’index ; Une valeur plus élevée correspond à une plus grande influence. Cependant, opter pour des valeurs plus faibles peut aider à atténuer les artefacts présents dans l’audio.", + "Volume Envelope": "Enveloppe de volume", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Remplacez ou fusionnez avec l’enveloppe de volume de la sortie. Plus le rapport est proche de 1, plus l’enveloppe de sortie est utilisée.", + "Protect Voiceless Consonants": "Protéger les consonnes sourdes", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Protégez les consonnes distinctes et les sons respiratoires pour éviter les déchirures électroacoustiques et autres artefacts. L’extraction du paramètre à sa valeur maximale de 0,5 offre une protection complète. Toutefois, la réduction de cette valeur peut réduire l’étendue de la protection tout en atténuant potentiellement l’effet d’indexation.", + "Pitch extraction algorithm": "Algorithme d’extraction de hauteur", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algorithme d’extraction de hauteur à utiliser pour la conversion audio. L’algorithme par défaut est rmvpe, qui est recommandé dans la plupart des cas.", + "Convert": "Convertir", + "Export Audio": "Exporter l’audio", + "Batch": "Lot", + "Input Folder": "Dossier d’entrée", + "Select the folder containing the audios to convert.": "Sélectionnez le dossier contenant les audios à convertir.", + "Enter input path": "Entrez le chemin d’entrée", + "Output Folder": "Dossier de sortie", + "Select the folder where the output audios will be saved.": "Sélectionnez le dossier dans lequel les audios de sortie seront enregistrés.", + "Enter output path": "Entrez le chemin de sortie", + "Get information about the audio": "Obtenir des informations sur l’audio", + "Information about the audio file": "Informations sur le fichier audio", + "Waiting for information...": "En attente d’informations...", + "## Voice Blender": "## Mélangeur de voix", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Sélectionnez deux modèles de voix, définissez le pourcentage de fusion souhaité et mélangez-les en une toute nouvelle voix.", + "Voice Blender": "Mélangeur de voix", + "Drag and drop your model here": "Faites glisser et déposez votre modèle ici", + "You can also use a custom path.": "Vous pouvez également utiliser un chemin personnalisé.", + "Blend Ratio": "Rapport de mélange", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "En ajustant la position d’un côté ou de l’autre, le modèle sera plus similaire au premier ou au second.", + "Fusion": "Fusion", + "Path to Model": "Chemin d’accès au modèle", + "Enter path to model": "Entrez le chemin d’accès au modèle", + "Model information to be placed": "Informations sur le modèle à placer", + "Inroduce the model information": "Introduire les informations du modèle", + "The information to be placed in the model (You can leave it blank or put anything).": "Les informations à placer dans le modèle (vous pouvez les laisser vides ou mettre n’importe quoi).", + "View model information": "Afficher les informations sur le modèle", + "Introduce the model pth path": "Présentation du modèle pth path", + "View": "Vue", + "Model extraction": "Extraction de modèles", + "Model conversion": "Conversion de modèle", + "Pth file": "Fichier Pth", + "Output of the pth file": "Sortie du fichier pth", + "# How to Report an Issue on GitHub": "# Comment signaler un problème sur GitHub", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Cliquez sur le bouton « Enregistrer l’écran » ci-dessous pour commencer à enregistrer le problème que vous rencontrez.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Une fois que vous avez terminé d’enregistrer le numéro, cliquez sur le bouton « Arrêter l’enregistrement » (le même bouton, mais l’étiquette change selon que vous enregistrez activement ou non).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Allez dans [GitHub Issues](https://github.com/IAHispano/Applio/issues) et cliquez sur le bouton « Nouveau problème ».", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Complétez le modèle de problème fourni, en veillant à inclure les détails nécessaires, et utilisez la section des ressources pour télécharger le fichier enregistré de l’étape précédente.", + "Record Screen": "Écran d’enregistrement", + "Record": "Enregistrer", + "Stop Recording": "Arrêter l’enregistrement", + "Introduce the model .pth path": "Présentation du chemin d’accès .pth du modèle", + "See Model Information": "Voir les informations sur le modèle", + "## Download Model": "## Télécharger le modèle", + "Model Link": "Lien vers le modèle", + "Introduce the model link": "Introduire le lien du modèle", + "Download Model": "Télécharger le modèle", + "## Drop files": "## Déposer des fichiers", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "Faites glisser vos fichiers .pth et .index dans cet espace. Faites glisser l’un, puis l’autre.", + "TTS Voices": "Voix TTS", + "Select the TTS voice to use for the conversion.": "Sélectionnez la voix TTS à utiliser pour la conversion.", + "Text to Synthesize": "Texte à synthétiser", + "Enter the text to synthesize.": "Saisissez le texte à synthétiser.", + "Or you can upload a .txt file": "Vous pouvez également télécharger un fichier .txt", + "Enter text to synthesize": "Saisir le texte à synthétiser", + "Output Path for TTS Audio": "Chemin de sortie pour l’audio TTS", + "Output Path for RVC Audio": "Chemin de sortie pour l’audio RVC", + "Enable Applio integration with Discord presence": "Activer l’intégration d’Applio avec la présence de Discord", + "It will activate the possibility of displaying the current Applio activity in Discord.": "Il activera la possibilité d’afficher l’activité actuelle d’Applio dans Discord.", + "Enable Applio integration with applio.org/models using flask": "Activer l’intégration d’Applio avec applio.org/models à l’aide de flask", + "It will activate the possibility of downloading models with a click from the website.": "Il activera la possibilité de télécharger des modèles en un clic depuis le site web.", + "Theme": "Thème", + "Select the theme you want to use. (Requires restarting Applio)": "Sélectionnez le thème que vous souhaitez utiliser. (Nécessite le redémarrage d’Applio)", + "Language": "Langue", + "Select the language you want to use. (Requires restarting Applio)": "Sélectionnez la langue que vous souhaitez utiliser. (Nécessite le redémarrage d’Applio)", + "Plugin Installer": "Installateur de plugin", + "Drag your plugin.zip to install it": "Faites glisser votre plugin.zip pour l’installer", + "Version Checker": "Vérificateur de version", + "Check which version of Applio is the latest to see if you need to update.": "Vérifiez quelle version d’Applio est la plus récente pour voir si vous devez effectuer une mise à jour.", + "Check for updates": "Vérifier les mises à jour" +} \ No newline at end of file diff --git a/assets/i18n/languages/gu_GU.json b/assets/i18n/languages/gu_GU.json new file mode 100644 index 0000000000000000000000000000000000000000..27b48a084d5ef5cd8e39b40ee0f0471813afa2a1 --- /dev/null +++ b/assets/i18n/languages/gu_GU.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "અંતિમ વોઇસ ક્લોનિંગ ટૂલ, જે અજોડ શક્તિ, મોડ્યુલારિટી અને વપરાશકર્તા-મૈત્રીપૂર્ણ અનુભવ માટે સાવચેતીપૂર્વક ઓપ્ટિમાઇઝ કરવામાં આવ્યું છે.", + "This section contains some extra utilities that often may be in experimental phases.": "આ વિભાગમાં કેટલીક વધારાની ઉપયોગિતાઓ છે જે ઘણીવાર પ્રાયોગિક તબક્કામાં હોઈ શકે છે.", + "Output Information": "આઉટપુટ જાણકારી", + "The output information will be displayed here.": "આઉટપુટ જાણકારી અંહિ દર્શાવવામાં આવશે.", + "Inference": "અનુમાન", + "Train": "રેલગાડી", + "Extra": "વધારાનું", + "Merge Audios": "ઓડિયો ભેગા કરો", + "Processing": "પ્રક્રિયા કરી રહ્યા છીએ", + "Audio Analyzer": "ઓડિયો વિશ્લેષક", + "Model Information": "મોડેલ જાણકારી", + "Plugins": "પ્લગઇનો", + "Download": "ડાઉનલોડ", + "Report a Bug": "ભૂલનો અહેવાલ આપો", + "Settings": "સુયોજનો", + "Preprocess": "પ્રીપ્રોસેસ", + "Model Name": "મોડેલ નામ", + "Name of the new model.": "નવા મોડેલનું નામ.", + "Enter model name": "મોડેલ નામ દાખલ કરો", + "Dataset Path": "ડેટાસેટ પાથ", + "Path to the dataset folder.": "ડેટાસેટ ફોલ્ડરનો પાથ.", + "Refresh Datasets": "ડેટાસેટ્સ પુનઃતાજું કરો", + "Dataset Creator": "ડેટાસેટ બનાવનાર", + "Dataset Name": "ડેટાસેટ નામ", + "Name of the new dataset.": "નવા ડેટાસેટનું નામ.", + "Enter dataset name": "ડેટાસેટ નામ દાખલ કરો", + "Upload Audio Dataset": "ઓડિયો ડેટાસેટ અપલોડ કરો", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "ઓડિયો ફાઈલ સફળતાપૂર્વક ડેટાસેટમાં ઉમેરાઈ ગઈ છે. કૃપા કરીને પ્રીપ્રોસેસ બટન પર ક્લિક કરો.", + "Enter dataset path": "ડેટાસેટ પાથને દાખલ કરો", + "Sampling Rate": "નમૂનાનો દર", + "The sampling rate of the audio files.": "ઓડિયો ફાઈલોનો નમૂનાનો દર.", + "RVC Version": "RVC આવૃત્તિ", + "The RVC version of the model.": "મોડેલનું આરવીસી વર્ઝન.", + "Preprocess Dataset": "પ્રીપ્રોસેસ ડેટાસેટ", + "Extract": "અર્ક કાઢો", + "Hop Length": "હોપ લંબાઈ", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "સિસ્ટમને નોંધપાત્ર પિચ પરિવર્તનમાં સંક્રમણ કરવામાં જે સમયગાળો લાગે છે તે સૂચવે છે. નાના હોપની લંબાઈને અનુમાન માટે વધુ સમયની જરૂર હોય છે પરંતુ ઉચ્ચ પિચ ચોકસાઈ પ્રાપ્ત કરવાનું વલણ ધરાવે છે.", + "Batch Size": "બેચ માપ", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "તેને તમારા જીપીયુના ઉપલબ્ધ વીઆરએએમ સાથે સંરેખિત કરવાની સલાહ આપવામાં આવે છે. 4નું સેટિંગ સુધારેલી ચોકસાઈ આપે છે પરંતુ પ્રક્રિયા ધીમી છે, જ્યારે 8 ઝડપી અને પ્રમાણભૂત પરિણામો પ્રદાન કરે છે.", + "Save Every Epoch": "દરેક ઈપોકનો સંગ્રહ કરો", + "Determine at how many epochs the model will saved at.": "મોડેલ કેટલા યુગમાં સંગ્રહાશે તે નક્કી કરો.", + "Total Epoch": "કુલ ઈપોક", + "Specifies the overall quantity of epochs for the model training process.": "મોડેલ તાલીમ પ્રક્રિયા માટે યુગોનો એકંદર જથ્થો સ્પષ્ટ કરે છે.", + "Pretrained": "પૂર્વપ્રશિક્ષિત", + "Save Only Latest": "ફક્ત તાજેતરનાં ને સંગ્રહો", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "આ ગોઠવણને સક્રિય કરવાથી જી અને ડી (G) અને ડી (D) ફાઇલો માત્ર તેમના તાજેતરના વર્ઝનને જ સેવ કરી શકશે, અસરકારક રીતે સ્ટોરેજ સ્પેસનું સંરક્ષણ કરશે.", + "Save Every Weights": "દરેક વજનોને બચાવો", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "આ ગોઠવણી તમને દરેક યુગના અંતે મોડેલના વજનને બચાવવા માટે સક્ષમ બનાવે છે.", + "Custom Pretrained": "વૈવિધ્યપૂર્ણ પૂર્વટ્રેઈન થયેલ", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "કસ્ટમ પ્રીટ્રેઇન્ડ મોડેલ્સનો ઉપયોગ કરવાથી શ્રેષ્ઠ પરિણામો મળી શકે છે, કારણ કે ચોક્કસ ઉપયોગના કિસ્સાને અનુરૂપ સૌથી યોગ્ય પ્રિટ્રેઇન્ડ મોડેલ્સની પસંદગી કરવાથી કામગીરીમાં નોંધપાત્ર વધારો થઈ શકે છે.", + "Upload Pretrained Model": "પહેલેથી પ્રશિક્ષિત મોડેલ અપલોડ કરો", + "Refresh Custom Pretraineds": "કસ્ટમ પૂર્વપ્રશિક્ષિતોને તાજુ કરો", + "Pretrained Custom Settings": "પહેલેથી પ્રશિક્ષિત વૈવિધ્યપૂર્ણ સુયોજનો", + "The file you dropped is not a valid pretrained file. Please try again.": "તમે મૂકેલી ફાઇલ એ યોગ્ય પૂર્વતાલીમવાળી ફાઇલ નથી. કૃપા કરીને ફરી પ્રયાસ કરો.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "ડ્રોપડાઉન મેનુમાં પહેલેથી તાલીમ લીધેલ ફાઈલ જોવા માટે રિફ્રેશ બટન પર ક્લિક કરો.", + "Pretrained G Path": "વૈવિધ્યપૂર્ણ પૂર્વપ્રશિક્ષિત G", + "Pretrained D Path": "વૈવિધ્યપૂર્ણ પૂર્વપ્રશિક્ષિત D", + "GPU Settings": "GPU સુયોજનો", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "અદ્યતન GPU ગોઠવણો સુયોજિત કરે છે, જે વધુ સારા GPU આર્કિટેક્ચર ધરાવતા વપરાશકર્તાઓ માટે આગ્રહણીય છે.", + "GPU Custom Settings": "GPU કસ્ટમ સુયોજનો", + "GPU Number": "GPU નંબર", + "0 to ∞ separated by -": "0 થી ∞ આના દ્વારા અલગ પાડવામાં આવે છે -", + "GPU Information": "GPU જાણકારી", + "Pitch Guidance": "પિચ માર્ગદર્શન", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "પિચ માર્ગદર્શનનો ઉપયોગ કરીને, મૂળ અવાજના રણકારને પ્રતિબિંબિત કરવાનું શક્ય બને છે, જેમાં તેની પીચનો પણ સમાવેશ થાય છે. આ સુવિધા ખાસ કરીને ગાવા અને અન્ય દૃશ્યો માટે મૂલ્યવાન છે જ્યાં મૂળ મેલોડી અથવા પિચ પેટર્નને સાચવવી જરૂરી છે.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "તમારા પોતાનાને તાલીમ આપતી વખતે પૂર્વપ્રશિક્ષિત મોડેલોનો ઉપયોગ કરો. આ અભિગમ તાલીમનો સમયગાળો ઘટાડે છે અને એકંદર ગુણવત્તામાં વધારો કરે છે.", + "Extract Features": "લક્ષણોનો અર્ક કાઢો", + "Start Training": "તાલીમ શરૂ કરો", + "Generate Index": "અનુક્રમણિકા બનાવો", + "Voice Model": "અવાજ મોડેલ", + "Select the voice model to use for the conversion.": "રૂપાંતરણ માટે વાપરવા માટે વોઇસ મોડેલ પસંદ કરો.", + "Index File": "અનુક્રમણિકા ફાઇલ", + "Select the index file to use for the conversion.": "રૂપાંતરણ માટે વાપરવા માટે અનુક્રમણિકા ફાઈલ પસંદ કરો.", + "Refresh": "પુનઃતાજું કરો", + "Unload Voice": "અવાજ અનલોડ કરો", + "Single": "એકલું", + "Upload Audio": "ઓડિયો અપલોડ કરો", + "Select Audio": "ઓડિયો પસંદ કરો", + "Select the audio to convert.": "રૂપાંતરિત કરવા માટે ઓડિયો પસંદ કરો.", + "Advanced Settings": "અદ્યતન સુયોજનો", + "Clear Outputs (Deletes all audios in assets/audios)": "આઉટપુટ સાફ કરો (સંપત્તિઓ/ઓડિયોમાં બધા ઓડિયો કાઢી નાંખે છે)", + "Custom Output Path": "કસ્ટમ આઉટપુટ પાથ", + "Output Path": "આઉટપુટ પાથ", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "પાથ કે જ્યાં આઉટપુટ ઓડિયો એ મૂળભૂત રીતે assets/audios/output.wav માં સંગ્રહાશે", + "Split Audio": "ઓડિયો વિભાજિત કરો", + "Split the audio into chunks for inference to obtain better results in some cases.": "કેટલાક કિસ્સાઓમાં વધુ સારા પરિણામો મેળવવા માટે અનુમાન માટે ઓડિઓને ભાગોમાં વિભાજિત કરો.", + "Autotune": "Autotune", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "તમારા અનુમાનો પર નરમ ઓટોટ્યુન લાગુ કરો, જે ગાવા માટે ભલામણ કરવામાં આવે છે રૂપાંતરણો ગાવા માટે ભલામણ કરવામાં આવે છે.", + "Clean Audio": "ઓડિયો સાફ કરો", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "ઓડિયો બોલવા માટે ભલામણ કરવામાં આવેલા નોઇઝ ડિટેક્શન એલ્ગોરિધમ્સનો ઉપયોગ કરીને તમારા ઓડિયો આઉટપુટને સાફ કરો.", + "Clean Strength": "સ્વચ્છ મજબૂતાઈ", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "તમે ઇચ્છો તે ઓડિયો પર સફાઇનું સ્તર સુયોજિત કરો, તમે તેને જેટલું વધારશો તેટલું તે સાફ થશે, પરંતુ શક્ય છે કે ઓડિયો વધુ સંકુચિત હશે.", + "Pitch": "પિચ", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "ઓડિયોની પિચ સુયોજિત કરો, કિંમત જેટલી ઊંચી હશે, તેટલી પીચ વધુ ઊંચી હશે.", + "Filter Radius": "ફિલ્ટર ત્રિજ્યા", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "જો સંખ્યા ત્રણ કરતા વધારે અથવા સમાન હોય, તો એકત્રિત સ્વર પરિણામો પર મધ્યમ ફિલ્ટરિંગનો ઉપયોગ કરવાથી શ્વસનનક્કી થવાની સંભાવના રહે છે.", + "Search Feature Ratio": "શોધ લક્ષણ ગુણોત્તર", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "અનુક્રમણિકા ફાઈલ દ્વારા લાગતો પ્રભાવ; ઉચ્ચતર મૂલ્ય વધુ પ્રભાવને મળતું આવે છે. જો કે, નીચા મૂલ્યોની પસંદગી કરવાથી ઓડિયોમાં હાજર કલાકૃતિઓને ઘટાડવામાં મદદ મળી શકે છે.", + "Volume Envelope": "વોલ્યુમ કવરpaper size", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "આઉટપુટના વોલ્યુમ પરબિડીયા સાથે અવેજી અથવા મિશ્રણ કરો. ગુણોત્તર 1 ની નજીક હોય છે, આઉટપુટ પરબિડીયાને વધુ ઉપયોગમાં લેવામાં આવે છે.", + "Protect Voiceless Consonants": "અવાજ વગરના વ્યંજનોનું રક્ષણ કરો", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "ઇલેક્ટ્રો-એકોસ્ટિક ફાટી ન જાય અને અન્ય કલાકૃતિઓ ન ફાટી જાય તે માટે વિશિષ્ટ વ્યંજનો અને શ્વાસોચ્છવાસના અવાજનું રક્ષણ કરો. પરિમાણને તેના ૦.૫ ના મહત્તમ મૂલ્ય તરફ ખેંચવું એ વ્યાપક સુરક્ષા પ્રદાન કરે છે. જો કે, આ મૂલ્યમાં ઘટાડો કરવાથી અનુક્રમણિકાની અસરને સંભવિતપણે ઘટાડવાની સાથે સંરક્ષણની હદમાં ઘટાડો થઈ શકે છે.", + "Pitch extraction algorithm": "પિચ નિષ્કર્ષણ અલગોરિધમ", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "ઓડિઓ રૂપાંતર માટે વાપરવા માટે પિચ નિષ્કર્ષણ અલ્ગોરિધમનો. મૂળભૂત અલ્ગોરિધમ એ rmvpe છે, જે મોટાભાગના કિસ્સાઓમાં ભલામણ કરવામાં આવે છે.", + "Convert": "રૂપાંતર કરો", + "Export Audio": "ઓડિયો નિકાસ કરો", + "Batch": "બેચ", + "Input Folder": "ઇનપુટ ફોલ્ડર", + "Select the folder containing the audios to convert.": "ફેરવવા માટે ઓડિયો સમાવતા ફોલ્ડરને પસંદ કરો.", + "Enter input path": "ઇનપુટ પાથને દાખલ કરો", + "Output Folder": "આઉટપુટ ફોલ્ડર", + "Select the folder where the output audios will be saved.": "ફોલ્ડર પસંદ કરો કે જ્યાં આઉટપુટ ઓડિયો સંગ્રહાશે.", + "Enter output path": "આઉટપુટ પાથ દાખલ કરો", + "Get information about the audio": "ઓડિયો વિશે જાણકારી મેળવો", + "Information about the audio file": "ઓડિયો ફાઈલ વિશેની માહિતી", + "Waiting for information...": "જાણકારી માટે રાહ જોઇ રહ્યા છીએ...", + "## Voice Blender": "## વોઇસ બ્લેન્ડર", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "બે વોઇસ મોડલ્સ પસંદ કરો, તમારી ઇચ્છિત મિશ્રણ ટકાવારી સેટ કરો અને તેને સંપૂર્ણપણે નવા અવાજમાં મિશ્રિત કરો.", + "Voice Blender": "અવાજ બ્લેન્ડર", + "Drag and drop your model here": "તમારા મોડેલને અંહિ ખેંચો અને મૂકો", + "You can also use a custom path.": "તમે કસ્ટમ પાથનો પણ ઉપયોગ કરી શકો છો.", + "Blend Ratio": "મિશ્રણ ગુણોત્તર", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "સ્થિતિને એક બાજુ અથવા બીજી બાજુ વધુ સમાયોજિત કરવાથી મોડેલને પ્રથમ અથવા બીજી બાજુ વધુ સમાન બનાવશે.", + "Fusion": "ફ્યુઝન", + "Path to Model": "મોડેલનો પાથ", + "Enter path to model": "મોડેલ માટે પાથને દાખલ કરો", + "Model information to be placed": "મૂકવાની મોડેલ માહિતી", + "Inroduce the model information": "મોડેલની જાણકારીને ઇનરોડ્યુસ કરો", + "The information to be placed in the model (You can leave it blank or put anything).": "મોડેલમાં મૂકવાની માહિતી (તમે તેને ખાલી છોડી શકો છો અથવા કંઈપણ મૂકી શકો છો).", + "View model information": "મોડેલ જાણકારી જુઓ", + "Introduce the model pth path": "મોડેલ pth પાથનો પરિચય આપો", + "View": "જુઓ", + "Model extraction": "મોડેલ નિષ્કર્ષણ", + "Model conversion": "મોડેલ રૂપાંતરણ", + "Pth file": "Pth ફાઈલ", + "Output of the pth file": "pth ફાઇલનું આઉટપુટ", + "# How to Report an Issue on GitHub": "# GitHub પર કોઈ સમસ્યાની જાણ કેવી રીતે કરવી", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. તમે જે સમસ્યાનો સામનો કરી રહ્યા છો તેને રેકોર્ડ કરવાનું શરૂ કરવા માટે નીચે આપેલા 'રેકોર્ડ સ્ક્રીન' બટન પર ક્લિક કરો.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. એક વખત તમે સમસ્યાનું રેકોર્ડિંગ પૂરું કરી લો એટલે 'સ્ટોપ રેકોર્ડિંગ' બટન પર ક્લિક કરો (આ જ બટન, પરંતુ તમે સક્રિયપણે રેકોર્ડિંગ કરી રહ્યા છો કે નહીં તેના આધારે લેબલ બદલાય છે).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [GitHub issues] (https://github.com/IAHispano/Applio/issues) પર જાઓ અને 'ન્યૂ ઇશ્યૂ' બટન પર ક્લિક કરો.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. પૂરી પાડવામાં આવેલ ઇશ્યૂ ટેમ્પલેટ પૂર્ણ કરો, જરૂરિયાત મુજબ વિગતોનો સમાવેશ કરવાની ખાતરી કરો અને અગાઉના પગલામાંથી રેકોર્ડ કરેલી ફાઇલને અપલોડ કરવા માટે અસ્કયામતોના વિભાગનો ઉપયોગ કરો.", + "Record Screen": "રેકોર્ડ સ્ક્રીન", + "Record": "રેકોર્ડ", + "Stop Recording": "રેકોર્ડ કરવાનું બંધ કરો", + "Introduce the model .pth path": "મોડલ .pth પાથને રજૂ કરો", + "See Model Information": "મોડેલ જાણકારી જુઓ", + "## Download Model": "## ડાઉનલોડ મોડેલ", + "Model Link": "મોડેલ કડી", + "Introduce the model link": "મોડેલ કડીનો પરિચય આપો", + "Download Model": "ડાઉનલોડ મોડેલ", + "## Drop files": "## ફાઇલો મૂકો", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "આ જગ્યામાં તમારી .pth ફાઇલ અને .index ફાઇલને ખેંચો. એકને ખેંચો અને પછી બીજું.", + "TTS Voices": "TTS અવાજો", + "Select the TTS voice to use for the conversion.": "રૂપાંતરણ માટે વાપરવા માટે TTS અવાજ પસંદ કરો.", + "Text to Synthesize": "સંશ્લેષણ કરવા માટેનું લખાણ", + "Enter the text to synthesize.": "સંશ્લેષણ કરવા માટે લખાણ દાખલ કરો.", + "Or you can upload a .txt file": "અથવા તમે .txt ફાઇલ અપલોડ કરી શકો છો", + "Enter text to synthesize": "સંશ્લેષણ કરવા માટે લખાણ દાખલ કરો", + "Output Path for TTS Audio": "TTS ઓડિયો માટે આઉટપુટ પાથ", + "Output Path for RVC Audio": "RVC ઓડિયો માટે આઉટપુટ પાથ", + "Enable Applio integration with Discord presence": "ડિસ્કોર્ડ હાજરી સાથે એપ્લિઓ સંકલન સક્રિય કરો", + "It will activate the possibility of displaying the current Applio activity in Discord.": "તે ડિસ્કોર્ડમાં વર્તમાન એપ્લિયો પ્રવૃત્તિ પ્રદર્શિત કરવાની સંભાવનાને સક્રિય કરશે.", + "Enable Applio integration with applio.org/models using flask": "ફ્લાસ્કની મદદથી applio.org/models સાથે એપ્લિયો સંકલન સક્રિય કરો", + "It will activate the possibility of downloading models with a click from the website.": "તે વેબસાઇટ પરથી એક ક્લિક સાથે મોડેલો ડાઉનલોડ કરવાની સંભાવનાને સક્રિય કરશે.", + "Theme": "થીમ", + "Select the theme you want to use. (Requires restarting Applio)": "થીમ પસંદ કરો જે તમે વાપરવા માંગો છો. (એપ્લિયોને ફરી શરૂ કરવાની જરૂર છે)", + "Language": "ભાષા", + "Select the language you want to use. (Requires restarting Applio)": "તમે જે ભાષા વાપરવા માંગો તે પસંદ કરો. (એપ્લિયોને ફરી શરૂ કરવાની જરૂર છે)", + "Plugin Installer": "પ્લગઇન સ્થાપનાર", + "Drag your plugin.zip to install it": "તેને સ્થાપિત કરવા માટે તમારા plugin.zip ખેંચો", + "Version Checker": "આવૃત્તિ ચકાસનાર", + "Check which version of Applio is the latest to see if you need to update.": "તમારે અપડેટ કરવાની જરૂર છે કે નહીં તે જોવા માટે એપ્લિઓનું કયું સંસ્કરણ નવીનતમ છે તે તપાસો.", + "Check for updates": "સુધારાઓ માટે ચકાસો" +} \ No newline at end of file diff --git a/assets/i18n/languages/hi_HI.json b/assets/i18n/languages/hi_HI.json new file mode 100644 index 0000000000000000000000000000000000000000..da116a08f8177508e0d07deb3c2e1b0921544fce --- /dev/null +++ b/assets/i18n/languages/hi_HI.json @@ -0,0 +1,113 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "अंतिम आवाज क्लोनिंग उपकरण, बेजोड़ शक्ति, प्रतिरूपकता और उपयोगकर्ता के अनुकूल अनुभव के लिए सावधानीपूर्वक अनुकूलित।", + "This section contains some extra utilities that often may be in experimental phases.": "इस खंड में कुछ अतिरिक्त उपयोगिताओं हैं जो अक्सर प्रयोगात्मक चरणों में हो सकती हैं।", + "Output Information": "आउटपुट जानकारी", + "Inference": "अनुमान", + "Train": "रेलगाड़ी", + "Extra": "अति", + "Merge Audios": "ऑडियो मर्ज करें", + "Processing": "संसाधन", + "Audio Analyzer": "ऑडियो विश्लेषक", + "Model Information": "मॉडल जानकारी", + "Download": "डाउनलोड", + "Report a Bug": "बग की रिपोर्ट करें", + "Preprocess": "प्रीप्रोसेस", + "Model Name": "मॉडल का नाम", + "Enter model name": "मॉडल का नाम दर्ज करें", + "Dataset Path": "डेटासेट पथ", + "Enter dataset path": "डेटासेट पथ दर्ज करें", + "Sampling Rate": "नमूनाकरण दर", + "RVC Version": "RVC संस्करण", + "Preprocess Dataset": "प्रीप्रोसेस डेटासेट", + "Extract": "निकालना", + "Hop Length": "हॉप लंबाई", + "Batch Size": "बैच का आकार", + "Save Every Epoch": "हर युग को बचाओ", + "Total Epoch": "कुल युग", + "Pretrained": "पूर्व-प्रशिक्षित", + "Save Only Latest": "केवल नवीनतम सहेजें", + "Save Every Weights": "हर वजन बचाओ", + "Custom Pretrained": "कस्टम पूर्व-प्रशिक्षित", + "Upload Pretrained Model": "पूर्व-प्रशिक्षित मॉडल अपलोड करें", + "Pretrained Custom Settings": "पूर्व-प्रशिक्षित कस्टम सेटिंग्स", + "The file you dropped is not a valid pretrained file. Please try again.": "आपके द्वारा छोड़ी गई फ़ाइल कोई मान्य पूर्व-प्रशिक्षित फ़ाइल नहीं है. कृपया पुनः प्रयास करें.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "ड्रॉपडाउन मेनू में पूर्व-प्रशिक्षित फ़ाइल देखने के लिए ताज़ा करें बटन पर क्लिक करें।", + "Pretrained G Path": "कस्टम पूर्व-प्रशिक्षित जी", + "Pretrained D Path": "कस्टम पूर्वप्रशिक्षित डी", + "GPU Settings": "GPU सेटिंग्स", + "GPU Custom Settings": "GPU कस्टम सेटिंग्स", + "GPU Number": "GPU नंबर", + "0 to ∞ separated by -": "0 से ∞ द्वारा अलग किया गया -", + "GPU Information": "GPU सूचना", + "Pitch Guidance": "पिच मार्गदर्शन", + "Extract Features": "एक्सट्रैक्ट फीचर्स", + "Start Training": "प्रशिक्षण शुरू करें", + "Generate Index": "इंडेक्स जनरेट करें", + "Voice Model": "आवाज मॉडल", + "Index File": "अनुक्रमणिका फ़ाइल", + "Refresh": "आराम देना", + "Unload Voice": "आवाज उतारना", + "Single": "अकेला", + "Upload Audio": "ऑडियो अपलोड करें", + "Select Audio": "ऑडियो का चयन करें", + "Advanced Settings": "उन्नत सेटिंग्स", + "Clear Outputs (Deletes all audios in assets/audios)": "आउटपुट साफ़ करें (संपत्ति/ऑडियो में सभी ऑडियो हटाता है)", + "Custom Output Path": "कस्टम आउटपुट पथ", + "Output Path": "आउटपुट पथ", + "Pitch": "फेंकना", + "If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness": "यदि > = 3: कटाई पिच परिणामों के लिए माध्यिका फ़िल्टरिंग लागू करें। मान फिल्टर त्रिज्या का प्रतिनिधित्व करता है और सांस लेने को कम कर सकता है", + "Search Feature Ratio": "खोज सुविधा अनुपात", + "Pitch extraction algorithm": "पिच निष्कर्षण एल्गोरिथ्म", + "Convert": "बदलना", + "Export Audio": "ऑडियो निर्यात करें", + "Batch": "जत्था", + "Input Folder": "इनपुट फ़ोल्डर", + "Enter input path": "इनपुट पथ दर्ज करें", + "Output Folder": "आउटपुट फ़ोल्डर", + "Enter output path": "आउटपुट पथ दर्ज करें", + "Get information about the audio": "ऑडियो के बारे में जानकारी प्राप्त करें", + "Information about the audio file": "ऑडियो फ़ाइल के बारे में जानकारी", + "Waiting for information...": "जानकारी का इंतजार...", + "Model fusion": "मॉडल फ्यूजन", + "Weight for Model A": "मॉडल ए के लिए वजन", + "Whether the model has pitch guidance": "क्या मॉडल में पिच मार्गदर्शन है", + "Model architecture version": "मॉडल वास्तुकला संस्करण", + "Path to Model A": "मॉडल ए के लिए पथ", + "Path to Model B": "मॉडल बी का रास्ता", + "Path to model": "मॉडल का मार्ग", + "Model information to be placed": "मॉडल जानकारी रखी जाएगी", + "Fusion": "परमाणु-संलयन", + "Modify model information": "मॉडल जानकारी संशोधित करें", + "Path to Model": "मॉडल का मार्ग", + "Model information to be modified": "संशोधित की जाने वाली मॉडल जानकारी", + "Save file name": "फ़ाइल नाम सहेजें", + "Modify": "सुधारना", + "View model information": "मॉडल की जानकारी देखें", + "View": "देखना", + "Model extraction": "मॉडल निष्कर्षण", + "Model conversion": "मॉडल रूपांतरण", + "Pth file": "Pth फ़ाइल", + "Output of the pth file": "pth फ़ाइल का आउटपुट", + "# How to Report an Issue on GitHub": "# GitHub पर किसी समस्या की रिपोर्ट कैसे करें", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. आप जिस समस्या का अनुभव कर रहे हैं उसे रिकॉर्ड करना शुरू करने के लिए नीचे दिए गए 'रिकॉर्ड स्क्रीन' बटन पर क्लिक करें।", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. एक बार जब आप समस्या को रिकॉर्ड करना समाप्त कर लेते हैं, तो 'स्टॉप रिकॉर्डिंग' बटन पर क्लिक करें (वही बटन, लेकिन लेबल इस बात पर निर्भर करता है कि आप सक्रिय रूप से रिकॉर्डिंग कर रहे हैं या नहीं)।", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [GitHub Issues](https://github.com/IAHispano/Applio/issues) पर जाएं और 'नया मुद्दा' बटन पर क्लिक करें।", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. प्रदान किए गए मुद्दे टेम्पलेट को पूरा करें, आवश्यकतानुसार विवरण शामिल करना सुनिश्चित करें, और पिछले चरण से रिकॉर्ड की गई फ़ाइल को अपलोड करने के लिए संपत्ति अनुभाग का उपयोग करें।", + "Record Screen": "रिकॉर्ड स्क्रीन", + "Record": "रिकॉर्ड", + "Stop Recording": "रिकॉर्डिंग बंद करो", + "Introduce the model .pth path": "मॉडल .pth पथ का परिचय दें", + "See Model Information": "मॉडल जानकारी देखें", + "## Download Model": "## मॉडल डाउनलोड करें", + "Model Link": "मॉडल लिंक", + "Introduce the model link": "मॉडल लिंक का परिचय दें", + "Download Model": "Descargar Modelo", + "## Drop files": "## फ़ाइलें ड्रॉप करें", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "अपनी .pth फ़ाइल और .index फ़ाइल को इस स्थान में खींचें. एक को खींचें और फिर दूसरे को।", + "TTS Voices": "टीटीएस आवाज़ें", + "Text to Synthesize": "संश्लेषित करने के लिए पाठ", + "Enter text to synthesize": "संश्लेषित करने के लिए पाठ दर्ज करें", + "Output Path for TTS Audio": "TTS ऑडियो के लिए आउटपुट पथ", + "Output Path for RVC Audio": "RVC ऑडियो के लिए आउटपुट पथ", + "Enable Applio integration with Discord presence": "Applio प्रसेन्स" +} diff --git a/assets/i18n/languages/hi_IN.json b/assets/i18n/languages/hi_IN.json new file mode 100644 index 0000000000000000000000000000000000000000..dc438f38b1f0fb9ded02cffaecbe1877ab1833ef --- /dev/null +++ b/assets/i18n/languages/hi_IN.json @@ -0,0 +1,215 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "अल्टीमेट वॉयस क्लोनिंग टूल, बेजोड़ पॉवर, मॉड्यूलरिटी और उपयोगकर्ता-अनुकूल अनुभव के लिए बारीकी से ऑप्टिमाइज़ किया गया।\n[हिन्दी अनुवाद: Enes](https://discord.com/users/1140031358006202468)", + "This section contains some extra utilities that often may be in experimental phases.": "इस खंड में कुछ अतिरिक्त उपयोगिताएँ होती हैं जो अक्सर प्रायोगिक चरणों में हो सकती हैं।", + "Output Information": "आउटपुट जानकारी", + "The output information will be displayed here.": "आउटपुट जानकारी यहाँ प्रदर्शित की जाएगी।", + + "Inference": "निष्कर्ष", + "Train": "ट्रेन", + "Extra": "अतिरिक्त", + "Merge Audios": "इस ऑडियो को मर्ज करें", + "Processing": "प्रोसेसिंग", + "Audio Analyzer": "ऑडियो एनालाइज़र", + "Model Information": "मॉडल जानकारी", + "Plugins": "प्लगइन्स", + "Download": "डाउनलोड करें", + "Report a Bug": "एक बग की रिपोर्ट करें", + "Settings": "सेटिंग्स", + + "Preprocess": "पूर्व-प्रसंस्करण", + "Model Name": "मॉडल का नाम", + "Name of the new model.": "नए मॉडल का नाम।", + "Enter model name": "मॉडल नाम डालें", + "Dataset Path": "डेटासेट पथ", + "Path to the dataset folder.": "डेटासेट फ़ोल्डर का पथ।", + "Refresh Datasets": "डेटासेट रीफ्रेश करें", + "Dataset Creator": "डेटासेट बनाने वाला", + "Dataset Name": "डेटासेट का नाम", + "Name of the new dataset.": "नए डेटासेट का नाम।", + "Enter dataset name": "डेटासेट का नाम डालें", + "Upload Audio Dataset": "ऑडियो डेटासेट अपलोड करें", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "ऑडियो फ़ाइल को डेटासेट में सफलतापूर्वक जोड़ा गया है। कृपया प्रीप्रोसेस बटन पर क्लिक करें।", + "Enter dataset path": "डेटासेट पथ डालें", + "Sampling Rate": "नमूनाकरण दर", + "The sampling rate of the audio files.": "ऑडियो फ़ाइलों की नमूनाकरण दर।", + "RVC Version": "RVC वर्शन", + "The RVC version of the model.": "मॉडल का RVC वर्शन।", + "Preprocess Dataset": "डेटासेट का पूर्व-प्रसंस्करण करें", + + "Embedder Model": "एम्बेडर मॉडल", + "Model used for learning speaker embedding.": "स्पीकर एम्बेडिंग सीखने के लिए उपयोग किया जाने वाला मॉडल।", + "Extract": "एक्सट्रैक्ट", + "Hop Length": "हॉप लंबाई", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "यह अवधी को दर्शाती है जिसे सिस्टम को पिच में महत्वपूर्ण बदलाव के लिए ले जाना पड़ता है। कम हॉप लंबाई को अनुमान लगाने में अधिक समय लगता है लेकिन उच्च पिच सटीकता मिलती है।", + "Batch Size": "बैच आकार", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "अपने GPU की उपलब्ध VRAM के साथ इसे संरेखित करना उचित है। 4 की सेटिंग में सटीकता बेहतर होती है लेकिन प्रोसेसिंग धीमी होती है, जबकि 8 तेज और मानक परिणाम प्रदान करता है।", + "Save Every Epoch": "प्रत्येक युग को सेव करें", + "Determine at how many epochs the model will saved at.": "निर्धारित करें कि कितने युग पर मॉडल सहेजा जाएगा", + "Total Epoch": "कुल युग", + "Specifies the overall quantity of epochs for the model training process.": "मॉडल प्रशिक्षण प्रक्रिया के लिए युग की समग्र मात्रा निर्दिष्ट करता है।", + "Pretrained": "पूर्व प्रशिक्षित", + "Save Only Latest": "केवल नवीनतम को सेव करें", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "इस सेटिंग को सक्षम करने पर G और D फ़ाइलें अपने केवल नवीनतम संस्करण को ही सेव करेंगी, भंडारण स्थान को प्रभावी ढंग से संरक्षित करना।", + "Save Every Weights": "प्रत्येक वज़न को सेव करें", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "यह सेटिंग आपको प्रत्येक युग के समापन पर मॉडल के वजन को सेव करने में सक्षम बनाती है।", + "Custom Pretrained": "कस्टम पूर्व प्रशिक्षित", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "कस्टम पूर्व प्रशिक्षित मॉडलों का उपयोग करने से बेहतर परिणाम मिल सकते हैं, क्योंकि विशिष्ट उपयोग के मामले के अनुरूप सबसे उपयुक्त पूर्व प्रशिक्षित मॉडलों को चुनने से प्रदर्शन में काफी वृद्धि हो सकती है।", + "Upload Pretrained Model": "पूर्व प्रशिक्षित मॉडल अपलोड करें", + "Refresh Custom Pretraineds": "कस्टम पूर्व प्रशिक्षितों को ताज़ा करें", + "Pretrained Custom Settings": "पूर्व प्रशिक्षित कस्टम सेटिंग्स", + "The file you dropped is not a valid pretrained file. Please try again.": "जो फ़ाइल आपने छोड़ी है वह एक मान्य पूर्व प्रशिक्षित फ़ाइल नहीं है। कृपया पुनः प्रयास करें।", + "Click the refresh button to see the pretrained file in the dropdown menu.": "ड्रॉपडाउन मेनू में पूर्व प्रशिक्षित फ़ाइल को देखने के लिए रीफ़्रेश बटन पर क्लिक करें।", + "Pretrained G Path": "कस्टम पूर्व प्रशिक्षित G", + "Pretrained D Path": "कस्टम पूर्व प्रशिक्षित D", + "GPU Settings": "GPU सेटिंग्स", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "उन्नत GPU सेटिंग्स सेट करता है, बेहतर GPU आर्किटेक्चर वाले उपयोगकर्ताओं के लिए अनुशंसित।", + "GPU Custom Settings": "GPU कस्टम सेटिंग्स", + "GPU Number": "GPU संख्या", + "0 to ∞ separated by -": "0 से ∞ तक अलग से -", + "GPU Information": "GPU जानकारी", + "Pitch Guidance": "पिच मार्गदर्शन", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "पिच मार्गदर्शन को नियोजित करके, मूल आवाज़ के स्वर को प्रतिबिंबित करना संभव हो जाता है। यह सुविधा गायन और अन्य परिदृश्य के लिए विशेष रूप से मूल्यवान है जहाँ मूल राग या पिच पैटर्न को संरक्षित करना आवश्यक है।", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "अपना खुद का प्रशिक्षण करते समय पूर्व प्रशिक्षित मॉडलों का उपयोग करें। यह दृष्टिकोण प्रशिक्षण की अवधि कम करता है और समग्र गुणवत्ता को बढ़ाता है।", + "Extract Features": "विशेषताएँ निकालें", + "Overtraining Detector": "ओवरट्रेनिंग डिटेक्टर", + "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "मॉडल को प्रशिक्षण डेटा को बहुत अच्छी तरह से सीखने और नए डेटा को सामान्य बनाने की क्षमता खोने से रोकने के लिए ओवरट्रेनिंग का पता लगाएं।", + "Overtraining Detector Settings": "ओवरट्रेनिंग डिटेक्टर सेटिंग्स", + "Overtraining Threshold": "ओवरट्रेनिंग थ्रेशोल्ड", + "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "यदि कोई सुधार नहीं पाया जाता है, तो आप अपने मॉडल को प्रशिक्षण बंद करने के लिए अधिकतम युगों की संख्या निर्धारित करें।", + + "Start Training": "प्रशिक्षण शुरू करें", + "Stop Training & Restart Applio": "प्रशिक्षण रोकें और Applio को पुनः आरंभ करें", + "Generate Index": "इंडेक्स बनाएँ", + + "Export Model": "मॉडल निर्यात करें", + "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "'अपलोड' बटन केवल गूगल कोलाब के लिए है: निर्यात की गई फ़ाइलों को आपके Google ड्राइव में ApplioExported फ़ोल्डर में अपलोड करता है।", + "Exported Pth file": "निर्यात की गई Pth फ़ाइल", + "Exported Index file": "निर्यात की गई इंडेक्स फ़ाइल", + "Select the pth file to be exported": "निर्यात की जाने वाली pth फ़ाइल का चयन करें", + "Select the index file to be exported": "निर्यात की जाने वाली इंडेक्स फ़ाइल का चयन करें", + "Upload": "अपलोड करें", + + "Voice Model": "आवाज़ का मॉडल", + "Select the voice model to use for the conversion.": "रूपांतरण के लिए उपयोग करने के लिए आवाज मॉडल का चयन करें।", + "Index File": "इंडेक्स फ़ाइल", + "Select the index file to use for the conversion.": "रूपांतरण के लिए उपयोग करने के लिए इंडेक्स फ़ाइल का चयन करें।", + "Refresh": "ताज़ा करें", + "Unload Voice": "आवाज़ अनलोड करें", + + "Single": "सिंगल", + "Upload Audio": "ऑडियो अपलोड करें", + "Select Audio": "ऑडियो चुनें", + "Select the audio to convert.": "रूपांतरित करने के लिए ऑडियो चुनें।", + "Advanced Settings": "उन्नत सेटिंग्स", + "Clear Outputs (Deletes all audios in assets/audios)": "(assets/audios में सभी ऑडियो को हटाता है) आउटपुट साफ़ करें", + "Custom Output Path": "कस्टम आउटपुट पथ", + "Output Path": "आउटपुट पथ", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "आउटपुट ऑडियो का पथ जहाँ उसे सेव किया जाएगा, डिफ़ॉल्ट रूप से assets/audios/output.wav में", + "Split Audio": "ऑडियो को विभाजित करें", + "Split the audio into chunks for inference to obtain better results in some cases.": "कुछ स्थितियों में अधिक बेहतर परिणाम प्राप्त करने के लिए अनुमान के लिए ऑडियो को हिस्सों में विभाजित करें।", + "Autotune": "ऑटोट्यून", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "अपने अनुमानों पर एक नरम ऑटोट्यून लागू करें, यह गायन रूपांतरण के लिए अनुशंसित है।", + "Clean Audio": "ऑडियो साफ़ करें", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "शोर का पता लगाने वाले एल्गोरिदम का उपयोग करके अपने ऑडियो आउटपुट को साफ़ करें, बोलने वाले ऑडियो के लिए अनुशंसित।", + "Clean Strength": "सफाई शक्ति", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "ऑडियो को साफ़ करने का स्तर निर्धारित करें, जैसे-जैसे आप इसे बढ़ाते जाएँगे यह उतना ही अधिक साफ़ करेगा, लेकिन यह संभव है कि ऑडियो और संकुचित हो सकता है।", + "Pitch": "पिच", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "ऑडियो की पिच सेट करें, मान जितना अधिक होगा, पिच उतनी ही अधिक होगी।", + "Filter Radius": "फ़िल्टर त्रिज्या", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "यदि संख्या तीन से अधिक या उसके बराबर है, तो एकत्र किए गए स्वर परिणामों पर मेडियन फ़िल्टरिंग का उपयोग करके साँस लेना कम हो जाता है।", + "Search Feature Ratio": "फीचर अनुपात खोजें", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "इंडेक्स फ़ाइल द्वारा प्रभावित; एक उच्च मान अधिक प्रभाव से मेल खाता है। हालाँकि, कम मूल्यों को चुनने से ऑडियो में मौजूद कलाकृतियों को कम करने में मदद मिल सकती है।", + "Volume Envelope": "आयतन आवरण", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "आउटपुट के आयतन आवरण के साथ स्थानापन्न करें या सम्मिश्रित करें। अनुपात जितना 1 के करीब होगा, आउटपुट आवरण उतना ही अधिक नियोजित किया जाएगा।", + "Protect Voiceless Consonants": "वॉयसलेस व्यंजनों की सुरक्षा करें", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "इलेक्ट्रो-ध्वनिक फाड़ और अन्य कलाकृतियों को रोकने के लिए अलग-अलग व्यंजन और साँस लेने की आवाज़ को सुरक्षित रखें। पैरामीटर को उसके अधिकतम मान 0.5 तक खींचना व्यापक सुरक्षा प्रदान करता है। हालाँकि, इस मान को कम करने से सुरक्षा की सीमा कम हो सकती है जबकि संभावित रूप से अनुक्रमण प्रभाव कम हो सकता है।", + "Pitch extraction algorithm": "पिच निष्कर्षण एल्गोरिदम", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "ऑडियो रूपांतरण के लिए उपयोग करने के लिए पिच निष्कर्षण एल्गोरिदम। डिफ़ॉल्ट एल्गोरिथम rmvpe है, जो अधिकांश मामलों के लिए अनुशंसित है।", + + "Convert": "रूपांतरित करें", + "Export Audio": "ऑडियो एक्सपोर्ट करें", + + "Batch": "बैच", + "Input Folder": "इनपुट फ़ोल्डर", + "Select the folder containing the audios to convert.": "रूपांतरित करने के लिए ऑडियो वाली फ़ोल्डर का चयन करें।", + "Enter input path": "इनपुट पथ दर्ज करें", + "Output Folder": "आउटपुट फ़ोल्डर", + "Select the folder where the output audios will be saved.": "फ़ोल्डर का चयन करें जहाँ आउटपुट ऑडियो को सेव किया जाएगा।", + "Enter output path": "आउटपुट पथ दर्ज करें", + + "Get information about the audio": "ऑडियो के बारे में जानकारी प्राप्त करें", + + "## Voice Blender": "## Voice Blender", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "दो आवाज़ के मॉडल का चयन करें, अपना वांछित मिश्रित प्रतिशत सेट करें, और उन्हें एक पूर्ण रूप से नई आवाज़ में सम्मिश्रित करें।", + "Voice Blender": "Voice Blender", + "Drag and drop your model here": "यहाँ अपना मॉडल ड्रैग एंड ड्रॉप करें", + "You can also use a custom path.": "आप कस्टम पथ का भी उपयोग कर सकते हैं।", + "Blend Ratio": "मिश्रित अनुपात", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "स्थिति को एक तरफ या दूसरी तरफ समायोजित करने से माॅडल पहले या दूसरे के समान हो जाएगा।", + "Fusion": "सम्मिश्रण", + + "Path to Model": "मॉडल का पथ", + "Enter path to model": "मॉडल का पथ दर्ज करें", + "Model information to be placed": "मॉडल की जानकारी स्थान की जाएगी", + "Inroduce the model information": "मॉडल की जानकारी का परिचय दें।", + "The information to be placed in the model (You can leave it blank or put anything).": "मॉडल में रखी जाने वाली जानकारी (आप इसे खाली छोड़ सकते हैं या कुछ भी डाल सकते हैं)।", + "View model information": "मॉडल की जानकारी देखें", + "Introduce the model pth path": "मॉडल pth पथ का परिचय दें", + "View": "देखें", + "Model extraction": "मॉडल निष्कर्षण", + "Model conversion": "मॉडल रूपांतरण", + "Pth file": "Pth फ़ाइल", + "Output of the pth file": "Pth फ़ाइल का आउटपुट", + + "# How to Report an Issue on GitHub": "# GitHub पर किसी समस्या की रिपोर्ट कैसे करें", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1.आपके द्वारा अनुभव की जा रही समस्या को रिकॉर्ड करना शुरू करने के लिए नीचे दिए गए 'रिकॉर्ड स्क्रीन' बटन पर क्लिक करें।", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. एक बार जब आप समस्या की रिकॉर्डिंग समाप्त कर लें, तो 'स्टॉप रिकॉर्डिंग' बटन पर क्लिक करें (वही बटन, लेकिन लेबल इस पर निर्भर करता है कि आप सक्रिय रूप से रिकॉर्डिंग कर रहे हैं या नहीं)।", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [GitHub Issues](https://github.com/IAHispano/Applio/issues) पर जाएँ और 'New Issue' बटन पर क्लिक करें।", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. दिए गए समस्या टेम्पलेट को पूरा करें, आवश्यकतानुसार विवरण शामिल करना सुनिश्चित करें, और पिछले चरण से रिकॉर्ड की गई फ़ाइल को अपलोड करने के लिए एसेट सेक्शन का उपयोग करें।", + + "Record Screen": "स्क्रीन रिकॉर्ड करें", + "Record": "रिकॉर्ड करें", + "Stop Recording": "रिकॉर्डिंग बंद करें", + + "Introduce the model .pth path": "मॉडल .pth पथ का परिचय दें", + "See Model Information": "मॉडल की जानकारी देखें", + + "## Download Model": "## मॉडल डाउनलोड करें", + "Model Link": "मॉडल लिंक", + "Introduce the model link": "मॉडल लिंक का परिचय दें", + "Download Model": "मॉडल डाउनलोड करें", + "## Drop files": "## ड्रॉप फ़ाइलें", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "अपनी .pth फ़ाइल और .index फ़ाइल को इस स्थान पर ड्रैग करें। एक को ड्रैग करें और फिर दूसरे को ड्रैग करें।", + "## Search Model": "## मॉडल खोजें", + "Search": "खोज", + "Introduce the model name to search.": "खोज करने के लिए मॉडल का नाम बताएं।", + "We couldn't find models by that name.": "हमें उस नाम से मॉडल नहीं मिला।", + + "TTS Voices": "TTS Voices", + "Select the TTS voice to use for the conversion.": "रूपांतरण के लिए उपयोग करने के लिए TTS वॉयस का चयन करें।", + "Text to Synthesize": "Text to Synthesize", + "Enter the text to synthesize.": "संश्लेषित करने के लिए पाठ दर्ज करें।", + "Or you can upload a .txt file": "या आप एक .txt फ़ाइल अपलोड कर सकते हैं", + "Enter text to synthesize": "संश्लेषित करने के लिए पाठ दर्ज करें", + "Output Path for TTS Audio": "TTS ऑडियो के लिए आउटपुट पथ", + "Output Path for RVC Audio": "RVC ऑडियो के लिए आउटपुट पथ", + + "Enable Applio integration with Discord presence": "डिस्कॉर्ड उपस्थिति के साथ Applio एकीकरण को सक्षम करें", + "It will activate the possibility of displaying the current Applio activity in Discord.": "यह डिस्कॉर्ड में वर्तमान Applio गतिविधि प्रदर्शित करने की संभावना को सक्रिय करेगा।", + "Enable Applio integration with applio.org/models using flask": "flask का उपयोग करके applio.org/models के साथ Applio एकीकरण को सक्षम करें", + "It will activate the possibility of downloading models with a click from the website.": "यह वेबसाइट से एक क्लिक से मॉडल डाउनलोड करने की संभावना को सक्रिय करेगा।", + "Enable fake GPU": "नकली GPU सक्षम करें", + "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "GPU की अनुपस्थिति के कारण प्रशिक्षण वर्तमान में असमर्थित है। प्रशिक्षण टैब को सक्रिय करने के लिए, सेटिंग टैब पर नेविगेट करें और 'नकली GPU' विकल्प को सक्षम करें।", + "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "ट्रेन टैब को सक्रिय करता है। हालांकि, कृपया ध्यान दें कि इस डिवाइस में GPU क्षमताएं नहीं हैं, इसलिए प्रशिक्षण समर्थित नहीं है। यह विकल्प केवल परीक्षण उद्देश्यों के लिए है। (यह विकल्प Applio को पुनरारंभ करेगा)", + "Theme": "थीम", + "Select the theme you want to use. (Requires restarting Applio)": "वह थीम चुनें जिसका आप उपयोग करना चाहते हैं। (Applio को पुनरारंभ करने की आवश्यकता है)", + "Language": "भाषा", + "Select the language you want to use. (Requires restarting Applio)": "वह भाषा चुनें जिसका आप उपयोग करना चाहते हैं। (Applio को पुनरारंभ करने की आवश्यकता है)", + + "Plugin Installer": "प्लगइन इंस्टॉलर", + "Drag your plugin.zip to install it": "इसे इंस्टॉल करने के लिए अपने plugin.zip को ड्रैग करें", + + "Version Checker": "संस्करण चेकर", + "Check which version of Applio is the latest to see if you need to update.": "अद्यतित करने के लिए आपको चाहिए या नहीं यह देखने के लिए जाँच करें कि Applio का कौन सा संस्करण नवीनतम है।", + "Check for updates": "अपडेट जांचें" +} diff --git a/assets/i18n/languages/hu_HU.json b/assets/i18n/languages/hu_HU.json new file mode 100644 index 0000000000000000000000000000000000000000..c8b7e5bac2986b8d43f83e1523bd27b4ef2410b5 --- /dev/null +++ b/assets/i18n/languages/hu_HU.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "A legjobb hangklónozó eszköz, aprólékosan optimalizálva a páratlan teljesítmény, a modularitás és a felhasználóbarát élmény érdekében.", + "This section contains some extra utilities that often may be in experimental phases.": "Ez a szakasz néhány további segédprogramot tartalmaz, amelyek gyakran kísérleti fázisban vannak.", + "Output Information": "Kimeneti információk", + "The output information will be displayed here.": "A kimeneti információk itt jelennek meg.", + "Inference": "Következtetés", + "Train": "Vonat", + "Extra": "Többlet", + "Merge Audios": "Hangok egyesítése", + "Processing": "Feldolgozás", + "Audio Analyzer": "Hangelemző", + "Model Information": "Modell információk", + "Plugins": "Bővítmények", + "Download": "Letöltés", + "Report a Bug": "Hiba jelentése", + "Settings": "Beállítások", + "Preprocess": "Előfeldolgozás", + "Model Name": "Modell neve", + "Name of the new model.": "Az új modell neve.", + "Enter model name": "Adja meg a modell nevét", + "Dataset Path": "Adatkészlet elérési útja", + "Path to the dataset folder.": "Az adatkészletmappa elérési útja.", + "Refresh Datasets": "Adatkészletek frissítése", + "Dataset Creator": "Adatkészlet létrehozója", + "Dataset Name": "Adatkészlet neve", + "Name of the new dataset.": "Az új adatkészlet neve.", + "Enter dataset name": "Adja meg az adatkészlet nevét", + "Upload Audio Dataset": "Hangadatkészlet feltöltése", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "A hangfájl sikeresen hozzá lett adva az adatkészlethez. Kérem kattintson az előfeldolgozás gombra.", + "Enter dataset path": "Adja meg az adatkészlet elérési útját", + "Sampling Rate": "Mintavételi arány", + "The sampling rate of the audio files.": "Az audiofájlok mintavételi frekvenciája.", + "RVC Version": "RVC verzió", + "The RVC version of the model.": "A modell RVC verziója.", + "Preprocess Dataset": "Adatkészlet előfeldolgozása", + "Extract": "Kivonat", + "Hop Length": "Komló hossza", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Azt az időtartamot jelöli, amely alatt a rendszer jelentős hangmagasság-változásra vált. A kisebb ugráshosszak több időt igényelnek a következtetéshez, de általában nagyobb hangmagasság-pontosságot eredményeznek.", + "Batch Size": "Tétel mérete", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Javasoljuk, hogy igazítsa a GPU rendelkezésre álló VRAM-jához. A 4-es beállítás nagyobb pontosságot, de lassabb feldolgozást biztosít, míg a 8-as gyorsabb és szabványos eredményeket biztosít.", + "Save Every Epoch": "Mentsd meg minden korszakot", + "Determine at how many epochs the model will saved at.": "Határozza meg, hogy hány korszakban menti a modellt.", + "Total Epoch": "Teljes korszak", + "Specifies the overall quantity of epochs for the model training process.": "A modell betanítási folyamatának epocháinak teljes mennyiségét adja meg.", + "Pretrained": "Előre betanított", + "Save Only Latest": "Csak a legújabbak mentése", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "A beállítás engedélyezése azt eredményezi, hogy a G és D fájlok csak a legújabb verziójukat mentik, így hatékonyan megtakarítják a tárhelyet.", + "Save Every Weights": "Takarítson meg minden súlyt", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Ez a beállítás lehetővé teszi a modell súlyozásának mentését az egyes korszakok végén.", + "Custom Pretrained": "Egyéni előképzett", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Az egyéni előre betanított modellek használata kiváló eredményekhez vezethet, mivel az adott használati esetre szabott legmegfelelőbb előre betanított modellek kiválasztása jelentősen javíthatja a teljesítményt.", + "Upload Pretrained Model": "Előre betanított modell feltöltése", + "Refresh Custom Pretraineds": "Egyéni előképzetek frissítése", + "Pretrained Custom Settings": "Előre betanított egyéni beállítások", + "The file you dropped is not a valid pretrained file. Please try again.": "Az eldobott fájl nem érvényes előre betanított fájl. Kérjük, próbálja újra.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "Kattintson a frissítés gombra az előre betanított fájl megjelenítéséhez a legördülő menüben.", + "Pretrained G Path": "Egyéni előképzett G", + "Pretrained D Path": "Egyéni előképzett D", + "GPU Settings": "GPU-beállítások", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Speciális GPU-beállításokat állít be, amelyek a jobb GPU-architektúrával rendelkező felhasználók számára ajánlottak.", + "GPU Custom Settings": "GPU egyéni beállítások", + "GPU Number": "GPU-szám", + "0 to ∞ separated by -": "0-tól ∞-ig - választja el", + "GPU Information": "GPU-információk", + "Pitch Guidance": "Pitch útmutatás", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "A hangmagasság-útmutatás alkalmazásával megvalósíthatóvá válik az eredeti hang intonációjának tükrözése, beleértve annak hangmagasságát is. Ez a funkció különösen értékes énekléshez és más forgatókönyvekhez, ahol az eredeti dallam vagy hangmagasság minta megőrzése elengedhetetlen.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Használja az előre betanított modelleket a saját betanításakor. Ez a megközelítés csökkenti a képzés időtartamát és javítja az általános minőséget.", + "Extract Features": "Jellemzők kivonása", + "Start Training": "Kezdje el az edzést", + "Generate Index": "Index létrehozása", + "Voice Model": "Hangmodell", + "Select the voice model to use for the conversion.": "Válassza ki az átalakításhoz használni kívánt hangmodellt.", + "Index File": "Index fájl", + "Select the index file to use for the conversion.": "Válassza ki az átalakításhoz használni kívánt indexfájlt.", + "Refresh": "Felfrissít", + "Unload Voice": "Hang eltávolítása", + "Single": "Nőtlen", + "Upload Audio": "Hang feltöltése", + "Select Audio": "Válassza az Audio lehetőséget", + "Select the audio to convert.": "Válassza ki a konvertálni kívánt hangot.", + "Advanced Settings": "Speciális beállítások", + "Clear Outputs (Deletes all audios in assets/audios)": "Kimenetek törlése (Törli az összes hangot az eszközökből/hangokból)", + "Custom Output Path": "Egyéni kimeneti útvonal", + "Output Path": "Kimeneti útvonal", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "Az elérési út, ahová a kimeneti hang mentésre kerül, alapértelmezés szerint az eszközökben / hangokban / output.wav", + "Split Audio": "Osztott hang", + "Split the audio into chunks for inference to obtain better results in some cases.": "Ossza fel a hangot darabokra a következtetéshez, hogy bizonyos esetekben jobb eredményeket érjen el.", + "Autotune": "Automatikus hangolás", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "Alkalmazzon lágy automatikus hangolást a következtetésekre, ami az énekkonverziókhoz ajánlott.", + "Clean Audio": "Tiszta hangzás", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Tisztítsa meg a hangkimenetet zajérzékelő algoritmusokkal, amelyek a hangok beszédéhez ajánlottak.", + "Clean Strength": "Tiszta szilárdság", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Állítsa be a tisztítási szintet a kívánt hangra, minél jobban növeli, annál jobban megtisztítja, de lehetséges, hogy a hang tömörítettebb lesz.", + "Pitch": "Hangmagasság", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "Állítsa be a hang hangmagasságát, minél magasabb az érték, annál magasabb a hangmagasság.", + "Filter Radius": "Szűrési sugár", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Ha a szám nagyobb vagy egyenlő hárommal, az összegyűjtött tónuseredmények medián szűrésének alkalmazása csökkentheti a légzést.", + "Search Feature Ratio": "Keresési funkciók aránya", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Az indexfájl által gyakorolt hatás; A magasabb érték nagyobb befolyásnak felel meg. Az alacsonyabb értékek választása azonban segíthet enyhíteni a hangban jelen lévő műtermékeket.", + "Volume Envelope": "Térfogat boríték", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Helyettesítse vagy keverje össze a kimenet térfogatburkológörbéjét. Minél közelebb van az arány az 1-hez, annál nagyobb a kimeneti burkológörbe.", + "Protect Voiceless Consonants": "Zöngétlen mássalhangzók védelme", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Védje a különálló mássalhangzókat és légzési hangokat, hogy megakadályozza az elektroakusztikus szakadást és más műtermékeket. A paraméter maximális 0,5-ös értékre való lekérése átfogó védelmet nyújt. Ennek az értéknek a csökkentése azonban csökkentheti a védelem mértékét, miközben potenciálisan enyhítheti az indexelési hatást.", + "Pitch extraction algorithm": "Pitch extrakciós algoritmus", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Hangmagasság-kinyerési algoritmus az audio konvertáláshoz. Az alapértelmezett algoritmus az rmvpe, amely a legtöbb esetben ajánlott.", + "Convert": "Megtérít", + "Export Audio": "Hang exportálása", + "Batch": "Halom", + "Input Folder": "Bemeneti mappa", + "Select the folder containing the audios to convert.": "Válassza ki a konvertálni kívánt hangokat tartalmazó mappát.", + "Enter input path": "Adja meg a bemeneti útvonalat", + "Output Folder": "Kimeneti mappa", + "Select the folder where the output audios will be saved.": "Válassza ki azt a mappát, ahová a kimeneti hangokat menteni kívánja.", + "Enter output path": "Adja meg a kimeneti útvonalat", + "Get information about the audio": "Információk lekérése a hangról", + "Information about the audio file": "Információ a hangfájlról", + "Waiting for information...": "Információra várva...", + "## Voice Blender": "## Hangos turmixgép", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Válasszon ki két hangmodellt, állítsa be a kívánt keverési százalékot, és keverje össze őket egy teljesen új hangszínbe.", + "Voice Blender": "Hangos turmixgép", + "Drag and drop your model here": "Húzza ide a modellt", + "You can also use a custom path.": "Egyéni elérési utat is használhat.", + "Blend Ratio": "Keverési arány", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Ha a pozíciót jobban az egyik vagy a másik oldalra állítja, a modell jobban hasonlít az elsőhöz vagy a másodikhoz.", + "Fusion": "Fúzió", + "Path to Model": "A modell elérési útja", + "Enter path to model": "Adja meg a modell elérési útját", + "Model information to be placed": "Az elhelyezendő modellinformációk", + "Inroduce the model information": "A modellinformációk bemutatása", + "The information to be placed in the model (You can leave it blank or put anything).": "A modellben elhelyezendő információk (üresen hagyhatja, vagy bármit betehet).", + "View model information": "Modellinformációk megtekintése", + "Introduce the model pth path": "A modell pth elérési útjának bemutatása", + "View": "Nézet", + "Model extraction": "Modell kinyerése", + "Model conversion": "Modell átalakítás", + "Pth file": "Pth fájl", + "Output of the pth file": "A pth fájl kimenete", + "# How to Report an Issue on GitHub": "# Hogyan jelenthet problémát a GitHubon", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Kattintson az alábbi \"Felvétel képernyő\" gombra a tapasztalt probléma rögzítésének megkezdéséhez.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Miután befejezte a probléma rögzítését, kattintson a \"Felvétel leállítása\" gombra (ugyanaz a gomb, de a címke attól függően változik, hogy aktívan rögzít-e vagy sem).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Lépjen a [GitHub-problémák](https://github.com/IAHispano/Applio/issues) oldalra, és kattintson az \"Új probléma\" gombra.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Töltse ki a megadott problémasablont, ügyelve arra, hogy szükség szerint tartalmazza a részleteket, és használja az eszközök szakaszt az előző lépésből rögzített fájl feltöltéséhez.", + "Record Screen": "Felvétel képernyő", + "Record": "Rekord", + "Stop Recording": "Felvétel leállítása", + "Introduce the model .pth path": "A modell .pth elérési útjának bemutatása", + "See Model Information": "Modellinformációk megtekintése", + "## Download Model": "## Modell letöltése", + "Model Link": "Modell link", + "Introduce the model link": "A modellhivatkozás bemutatása", + "Download Model": "Modell letöltése", + "## Drop files": "## Dobja el a fájlokat", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "Húzza a .pth és .index fájlt erre a helyre. Húzza az egyiket, majd a másikat.", + "TTS Voices": "TTS-hangok", + "Select the TTS voice to use for the conversion.": "Válassza ki az átalakításhoz használni kívánt TTS-hangot.", + "Text to Synthesize": "Szintetizálandó szöveg", + "Enter the text to synthesize.": "Írja be a szintetizálni kívánt szöveget.", + "Or you can upload a .txt file": "Vagy feltölthet egy .txt fájlt", + "Enter text to synthesize": "Írja be a szintetizálni kívánt szöveget", + "Output Path for TTS Audio": "A TTS Audio kimeneti útvonala", + "Output Path for RVC Audio": "Az RVC Audio kimeneti útvonala", + "Enable Applio integration with Discord presence": "Engedélyezze az Applio integrációját a Discord jelenléttel", + "It will activate the possibility of displaying the current Applio activity in Discord.": "Aktiválja az aktuális Applio tevékenység megjelenítésének lehetőségét a Discordban.", + "Enable Applio integration with applio.org/models using flask": "Az Applio és a applio.org/models integrációjának engedélyezése lombik használatával", + "It will activate the possibility of downloading models with a click from the website.": "Aktiválja a modellek letöltésének lehetőségét egy kattintással a weboldalról.", + "Theme": "Téma", + "Select the theme you want to use. (Requires restarting Applio)": "Válassza ki a használni kívánt témát. (Az Applio újraindítását igényli)", + "Language": "Nyelv", + "Select the language you want to use. (Requires restarting Applio)": "Válassza ki a használni kívánt nyelvet. (Az Applio újraindítását igényli)", + "Plugin Installer": "Bővítmény telepítő", + "Drag your plugin.zip to install it": "Húzza a plugin.zip a telepítéshez", + "Version Checker": "Verzióellenőrző", + "Check which version of Applio is the latest to see if you need to update.": "Ellenőrizze, hogy az Applio melyik verziója a legújabb, hogy lássa, frissítenie kell-e.", + "Check for updates": "Frissítések keresése" +} \ No newline at end of file diff --git a/assets/i18n/languages/id_ID.json b/assets/i18n/languages/id_ID.json new file mode 100644 index 0000000000000000000000000000000000000000..d636ca2cab9b6eea6a7f20d73fc769e5c12961eb --- /dev/null +++ b/assets/i18n/languages/id_ID.json @@ -0,0 +1,148 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "Alat kloning suara terbaik, dioptimalkan secara cermat untuk kekuatan tak tertandingi, modularitas, dan pengalaman ramah pengguna.", + "This section contains some extra utilities that often may be in experimental phases.": "Bagian ini berisi beberapa utilitas tambahan yang mungkin sering berada dalam tahap percobaan.", + "Output Information": "informasi keluaran", + + "Inference": "Inference", + "Train": "training model", + "Extra": "bonus", + "Merge Audios": "Gabungkan Audio", + "Processing": "Pengolahan", + "Audio Analyzer": "Penganalisis Audio", + "Model Information": "informasi", + "Plugins": "Plugin", + "Download": "Unduh", + "Report a Bug": "Laporkan Bug", + "Settings": "Pengaturan", + + "Preprocess": "Proses awal", + "Model Name": "Nama model", + "Enter model name": "masukkan nama model", + "Dataset Path": "Jalur Kumpulan Data", + "Dataset Creator": "Pembuat Kumpulan Data/dataset", + "Dataset Name": "Nama kumpulan data", + "Enter dataset name": "Masukkan nama kumpulan data", + "Upload Audio Dataset": "Unggah audio kumpulan data", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Berkas audio telah berhasil ditambahkan ke dataset. Silakan klik tombol praproses.", + "Enter dataset path": "Masukkan jalur kumpulan data", + "Sampling Rate": "Tingkat Pengambilan Sampel", + "RVC Version": "Versi RVC", + "Preprocess Dataset": "Kumpulan Data Praproses", + + "Extract": "Ekstrak", + "Hop Length": "Panjang Lompatan", + "Batch Size": "Ukuran Batch", + "Save Every Epoch": "Simpan Setiap Epoch", + "Total Epoch": "Total Epoch", + "Pretrained": "Terlatih sebelumnya", + "Save Only Latest": "Simpan Hanya Yang Terbaru", + "Save Every Weights": "Simpan Setiap Weights/beban", + "Custom Pretrained": "Terlatih Khusus", + "Upload Pretrained Model": "Unggah Model yang Telah Dilatih sebelumnya", + "Pretrained Custom Settings": "Pengaturan Kustom yang Telah Dilatih Sebelumnya", + "The file you dropped is not a valid pretrained file. Please try again.": "File yang Anda jatuhkan bukan file terlatih yang valid. Silakan coba lagi.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "Klik tombol segarkan untuk melihat file yang telah dilatih sebelumnya di menu tarik-turun.", + "Pretrained G Path": "Terlatih Khusus G", + "Pretrained D Path": "Terlatih Khusus D", + "GPU Settings": "Penggaturan GPU", + "GPU Custom Settings": "Penggaturan GPU khusus", + "GPU Number": "Angka GPU", + "0 to ∞ separated by -": "0 to ∞ dipisahkan oleh -", + "GPU Information": "Informasi GPU", + "Pitch Guidance": "Panduan Lapangan/pitch", + "Extract Features": "Ekstrak Fitur", + + "Start Training": "mulai Training", + "Generate Index": "Menghasilkan Index", + + "Voice Model": "Model Suara", + "Index File": "Berkas Indeks", + "Refresh": "Muat ulang", + "Unload Voice": "Bongkar Suara", + + "Single": "Sendiri", + "Upload Audio": "Ungah Audio", + "Select Audio": "Pilh Audio", + "Advanced Settings": "Pengaturan lanjutan", + "Clear Outputs (Deletes all audios in assets/audios)": "Hapus Output (Menghapus semua audio di assets/audio)", + "Custom Output Path": "Kustom Jalur keluaran", + "Output Path": "Jalur keluaran", + "Split Audio": "pisah audio", + "Autotune": "Autotune", + "Pitch": "Nada", + "If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness": "If >=3: terapkan pemfilteran median pada hasil pitch yang dipanen. Nilai tersebut mewakili radius filter dan dapat mengurangi sesak napas", + "Search Feature Ratio": "Rasio Fitur Pencarian", + "Pitch extraction algorithm": "Algoritma ekstraksi nada", + "Convert": "Convert", + "Export Audio": "Export Audio", + + "Batch": "Batch", + "Input Folder": "Input berkas", + "Enter input path": "Masukkan jalur masukan", + "Output Folder": "Folder Keluaran", + "Enter output path": "Masukkan jalur keluaran", + + "Get information about the audio": "Dapatkan informasi tentang audio", + "Information about the audio file": "Informasi tentang file audio", + "Waiting for information...": "Menunggu informasi...", + + "Model fusion": "Penggabungan model", + "Weight for Model A": "Weight untuk model A", + "Whether the model has pitch guidance": "Apakah model memiliki panduan nada", + "Model architecture version": "Versi arsitektur model", + "Path to Model A": "Jalan Menuju Model A", + "Path to Model B": "Jalan Menuju Model B", + "Path to model": "Jalan Menuju Model", + "Model information to be placed": "Informasi model yang akan ditempatkan", + "Fusion": "Fusi", + + "Modify model information": "Ubah informasi model", + "Path to Model": "Jalan Menuju Model", + "Model information to be modified": "Informasi model yang akan dimodifikasi", + "Save file name": "Simpan nama file", + "Modify": "Ubah", + + "View model information": "tampilkan informasi model", + "View": "tampilakan", + "Model extraction": "Ekstraksi model", + "Model conversion": "Konversi model", + "Pth file": "file Pth", + "Output of the pth file": "Keluaran dari file pth", + + "# How to Report an Issue on GitHub": "# Cara Melaporkan Masalah di GitHub", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Klik tombol 'Rekam Layar' di bawah untuk mulai merekam masalah yang Anda alami.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. pergi ke [GitHub Issues](https://github.com/IAHispano/Applio/issues) dan klik tombol 'Masalah Baru'.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Lengkapi templat masalah yang disediakan, pastikan untuk menyertakan detail sesuai kebutuhan, dan manfaatkan bagian aset untuk mengunggah file rekaman dari langkah sebelumnya.", + + "Record Screen": "Rekam layar", + "Record": "Rekam", + "Stop Recording": "Berhenti merekam", + + "Introduce the model .pth path": "Perkenalkan jalur model .pth", + "See Model Information": "Lihat informasi model", + + "## Download Model": "## Unduh Model", + "Model Link": "Tautan model", + "Introduce the model link": "Perkenalkan tautan model", + "Download Model": "Unduh Model", + "## Drop files": "## masukkan file ", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "Seret file .pth dan file .index ke dalam ruang ini. Seret yang pertama, lalu yang lainnya.", + + "TTS Voices": "suara TTS", + "Text to Synthesize": "Text ke disintesis", + "Or you can upload a .txt file": "Atau Anda dapat mengunggah file .txt", + "Enter text to synthesize": "Masukkan teks untuk disintesis", + "Output Path for TTS Audio": "Jalur Keluaran untuk Audio TTS", + "Output Path for RVC Audio": "Jalur Keluaran untuk Audio RVC", + + "Enable Applio integration with Discord presence": "Aktifkan integrasi Applio dengan kehadiran Discord", + "Enable Applio integration with applio.org/models using flask": "Aktifkan integrasi Applio dengan applio.org/models menggunakan flask", + "Theme": "Tema (Diperlukan mulai ulang)", + + "Plugin Installer": "Penginstal Plugin", + "Drag your plugin.zip to install it": "Seret plugin.zip Anda untuk menginstalnya", + + "Version Checker": "Pemeriksa versi", + "Check for updates": "Periksa pembaruan" +} diff --git a/assets/i18n/languages/it_IT.json b/assets/i18n/languages/it_IT.json new file mode 100644 index 0000000000000000000000000000000000000000..3bd46972af4bbe775f39633977dd84ab207be865 --- /dev/null +++ b/assets/i18n/languages/it_IT.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "Strumento di clonazione vocale definitivo, meticolosamente ottimizzato per una potenza, una modularità e un'esperienza user-friendly senza rivali.", + "This section contains some extra utilities that often may be in experimental phases.": "Questa sezione contiene alcune utilità aggiuntive che spesso possono essere in fase sperimentale.", + "Output Information": "Informazioni sull'output", + "The output information will be displayed here.": "Qui verranno visualizzate le informazioni sull'output.", + "Inference": "Inferenza", + "Train": "Treno", + "Extra": "Supplementare", + "Merge Audios": "Unisci audio", + "Processing": "Elaborazione", + "Audio Analyzer": "Analizzatore audio", + "Model Information": "Informazioni sul modello", + "Plugins": "Plugin", + "Download": "Scaricare", + "Report a Bug": "Segnala un bug", + "Settings": "Impostazioni", + "Preprocess": "Pre-processo", + "Model Name": "Nome del modello", + "Name of the new model.": "Nome del nuovo modello.", + "Enter model name": "Immettere il nome del modello", + "Dataset Path": "Percorso del set di dati", + "Path to the dataset folder.": "Percorso della cartella del set di dati.", + "Refresh Datasets": "Aggiornare i set di dati", + "Dataset Creator": "Creatore di set di dati", + "Dataset Name": "Nome set di dati", + "Name of the new dataset.": "Nome del nuovo set di dati.", + "Enter dataset name": "Immettere il nome del set di dati", + "Upload Audio Dataset": "Carica set di dati audio", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Il file audio è stato aggiunto correttamente al set di dati. Fare clic sul pulsante di pre-elaborazione.", + "Enter dataset path": "Immettere il percorso del set di dati", + "Sampling Rate": "Frequenza di campionamento", + "The sampling rate of the audio files.": "La frequenza di campionamento dei file audio.", + "RVC Version": "Versione RVC", + "The RVC version of the model.": "La versione RVC del modello.", + "Preprocess Dataset": "Set di dati di pre-elaborazione", + "Extract": "Estrarre", + "Hop Length": "Lunghezza del luppolo", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Indica il tempo necessario affinché il sistema passi a un cambiamento di intonazione significativo. Le lunghezze di hop più piccole richiedono più tempo per l'inferenza, ma tendono a produrre una maggiore precisione dell'intonazione.", + "Batch Size": "Dimensione del lotto", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Si consiglia di allinearlo con la VRAM disponibile della GPU. Un'impostazione di 4 offre una maggiore precisione ma un'elaborazione più lenta, mentre 8 fornisce risultati più rapidi e standard.", + "Save Every Epoch": "Salva ogni epoca", + "Determine at how many epochs the model will saved at.": "Determinare il numero di epoche in cui verrà salvato il modello.", + "Total Epoch": "Epoca totale", + "Specifies the overall quantity of epochs for the model training process.": "Specifica la quantità complessiva di epoche per il processo di training del modello.", + "Pretrained": "Pre-addestrato", + "Save Only Latest": "Salva solo le ultime notizie", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Abilitando questa impostazione, i file G e D salveranno solo le versioni più recenti, risparmiando spazio di archiviazione.", + "Save Every Weights": "Risparmia ogni peso", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Questa impostazione consente di salvare i pesi del modello alla fine di ogni epoca.", + "Custom Pretrained": "Pre-addestrato personalizzato", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "L'utilizzo di modelli pre-addestrati personalizzati può portare a risultati superiori, poiché la selezione dei modelli pre-addestrati più adatti al caso d'uso specifico può migliorare significativamente le prestazioni.", + "Upload Pretrained Model": "Carica modello pre-addestrato", + "Refresh Custom Pretraineds": "Aggiornare i pre-addestrati personalizzati", + "Pretrained Custom Settings": "Impostazioni personalizzate pre-addestrate", + "The file you dropped is not a valid pretrained file. Please try again.": "Il file eliminato non è un file pre-addestrato valido. Si prega di riprovare.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "Fare clic sul pulsante Aggiorna per visualizzare il file pre-addestrato nel menu a discesa.", + "Pretrained G Path": "G preaddestrato personalizzato", + "Pretrained D Path": "D pre-addestrato personalizzato", + "GPU Settings": "Impostazioni GPU", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Imposta le impostazioni avanzate della GPU, consigliate per gli utenti con una migliore architettura GPU.", + "GPU Custom Settings": "Impostazioni personalizzate GPU", + "GPU Number": "Numero GPU", + "0 to ∞ separated by -": "Da 0 a ∞ separati da -", + "GPU Information": "Informazioni sulla GPU", + "Pitch Guidance": "Guida al passo", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Utilizzando la guida dell'intonazione, diventa possibile rispecchiare l'intonazione della voce originale, compresa la sua altezza. Questa funzione è particolarmente utile per il canto e altri scenari in cui è essenziale preservare la melodia o il modello di intonazione originale.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilizza modelli pre-addestrati quando addestri i tuoi. Questo approccio riduce la durata della formazione e migliora la qualità complessiva.", + "Extract Features": "Estrai feature", + "Start Training": "Inizia la formazione", + "Generate Index": "Genera indice", + "Voice Model": "Modello vocale", + "Select the voice model to use for the conversion.": "Selezionare il modello vocale da utilizzare per la conversione.", + "Index File": "File di indice", + "Select the index file to use for the conversion.": "Selezionare il file di indice da utilizzare per la conversione.", + "Refresh": "Aggiornare", + "Unload Voice": "Scarica voce", + "Single": "Singolo", + "Upload Audio": "Carica audio", + "Select Audio": "Seleziona Audio", + "Select the audio to convert.": "Seleziona l'audio da convertire.", + "Advanced Settings": "Impostazioni avanzate", + "Clear Outputs (Deletes all audios in assets/audios)": "Cancella output (elimina tutti gli audio nelle risorse/audio)", + "Custom Output Path": "Percorso di output personalizzato", + "Output Path": "Percorso di output", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "Il percorso in cui verrà salvato l'audio in uscita, per impostazione predefinita in assets/audios/output.wav", + "Split Audio": "Dividere l'audio", + "Split the audio into chunks for inference to obtain better results in some cases.": "Dividi l'audio in blocchi per l'inferenza per ottenere risultati migliori in alcuni casi.", + "Autotune": "Sintonizzazione automatica", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "Applica un soft autotune alle tue inferenze, consigliato per le conversioni di canto.", + "Clean Audio": "Audio pulito", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Pulisci l'uscita audio utilizzando algoritmi di rilevamento del rumore, consigliati per l'audio parlato.", + "Clean Strength": "Forza pulita", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Imposta il livello di pulizia sull'audio che desideri, più lo aumenti più si pulirà, ma è possibile che l'audio sia più compresso.", + "Pitch": "Pece", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "Imposta il tono dell'audio, più alto è il valore, più alto è il tono.", + "Filter Radius": "Raggio del filtro", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Se il numero è maggiore o uguale a tre, l'impiego del filtraggio mediano sui risultati del tono raccolto ha il potenziale per ridurre la respirazione.", + "Search Feature Ratio": "Rapporto feature di ricerca", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influenza esercitata dal file indice; Un valore più alto corrisponde a una maggiore influenza. Tuttavia, optare per valori più bassi può aiutare a mitigare gli artefatti presenti nell'audio.", + "Volume Envelope": "Inviluppo del volume", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Sostituite o miscelate con l'inviluppo del volume dell'output. Più il rapporto è vicino a 1, più viene impiegato l'inviluppo di uscita.", + "Protect Voiceless Consonants": "Proteggi le consonanti sorde", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Salvaguarda le consonanti distinte e i suoni respiratori per prevenire lacerazioni elettroacustiche e altri artefatti. Portando il parametro al valore massimo di 0,5 si ottiene una protezione completa. Tuttavia, la riduzione di questo valore potrebbe ridurre l'estensione della protezione, riducendo al contempo l'effetto di indicizzazione.", + "Pitch extraction algorithm": "Algoritmo di estrazione del passo", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritmo di estrazione dell'intonazione da utilizzare per la conversione audio. L'algoritmo predefinito è rmvpe, consigliato per la maggior parte dei casi.", + "Convert": "Convertire", + "Export Audio": "Esporta audio", + "Batch": "Lotto", + "Input Folder": "Cartella di input", + "Select the folder containing the audios to convert.": "Seleziona la cartella contenente gli audio da convertire.", + "Enter input path": "Immettere il percorso di input", + "Output Folder": "Cartella di output", + "Select the folder where the output audios will be saved.": "Seleziona la cartella in cui verranno salvati gli audio in uscita.", + "Enter output path": "Immettere il percorso di output", + "Get information about the audio": "Ottenere informazioni sull'audio", + "Information about the audio file": "Informazioni sul file audio", + "Waiting for information...": "In attesa di informazioni...", + "## Voice Blender": "## Frullatore vocale", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Seleziona due modelli vocali, imposta la percentuale di fusione desiderata e uniscili in una voce completamente nuova.", + "Voice Blender": "Frullatore vocale", + "Drag and drop your model here": "Trascina e rilascia qui il tuo modello", + "You can also use a custom path.": "È anche possibile utilizzare un percorso personalizzato.", + "Blend Ratio": "Rapporto di fusione", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Regolando la posizione più verso un lato o l'altro si renderà il modello più simile al primo o al secondo.", + "Fusion": "Fusione", + "Path to Model": "Percorso verso il modello", + "Enter path to model": "Immettere il percorso per il modello", + "Model information to be placed": "Informazioni sul modello da posizionare", + "Inroduce the model information": "Introdurre le informazioni sul modello", + "The information to be placed in the model (You can leave it blank or put anything).": "Le informazioni da inserire nel modello (puoi lasciarle vuote o inserire qualsiasi cosa).", + "View model information": "Visualizzare le informazioni sul modello", + "Introduce the model pth path": "Introdurre il percorso pth del modello", + "View": "Vista", + "Model extraction": "Estrazione del modello", + "Model conversion": "Conversione del modello", + "Pth file": "File Pth", + "Output of the pth file": "Output del file pth", + "# How to Report an Issue on GitHub": "# Come segnalare un problema su GitHub", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Fare clic sul pulsante \"Registra schermo\" in basso per avviare la registrazione del problema riscontrato.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Una volta terminata la registrazione del problema, fai clic sul pulsante \"Interrompi registrazione\" (lo stesso pulsante, ma l'etichetta cambia a seconda che tu stia registrando attivamente o meno).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Vai su [GitHub Issues](https://github.com/IAHispano/Applio/issues) e fai clic sul pulsante \"Nuovo problema\".", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Completa il modello di problema fornito, assicurandoti di includere i dettagli necessari e utilizza la sezione delle risorse per caricare il file registrato dal passaggio precedente.", + "Record Screen": "Registra schermo", + "Record": "Registrazione", + "Stop Recording": "Interrompi registrazione", + "Introduce the model .pth path": "Introdurre il percorso .pth del modello", + "See Model Information": "Vedere le informazioni sul modello", + "## Download Model": "## Scarica il modello", + "Model Link": "Collegamento al modello", + "Introduce the model link": "Introdurre il collegamento al modello", + "Download Model": "Scarica il modello", + "## Drop files": "## Trascina i file", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "Trascina il file .pth e il file .index in questo spazio. Trascina uno e poi l'altro.", + "TTS Voices": "Voci TTS", + "Select the TTS voice to use for the conversion.": "Selezionare la voce TTS da utilizzare per la conversione.", + "Text to Synthesize": "Testo da sintetizzare", + "Enter the text to synthesize.": "Immettere il testo da sintetizzare.", + "Or you can upload a .txt file": "In alternativa, è possibile caricare un file .txt", + "Enter text to synthesize": "Immettere il testo da sintetizzare", + "Output Path for TTS Audio": "Percorso di uscita per l'audio TTS", + "Output Path for RVC Audio": "Percorso di uscita per l'audio RVC", + "Enable Applio integration with Discord presence": "Abilita l'integrazione di Applio con la presenza di Discord", + "It will activate the possibility of displaying the current Applio activity in Discord.": "Attiverà la possibilità di visualizzare l'attuale attività di Applio in Discord.", + "Enable Applio integration with applio.org/models using flask": "Abilita l'integrazione di Applio con applio.org/models utilizzando il pallone", + "It will activate the possibility of downloading models with a click from the website.": "Attiverà la possibilità di scaricare i modelli con un click dal sito web.", + "Theme": "Tema", + "Select the theme you want to use. (Requires restarting Applio)": "Selezionare il tema che si desidera utilizzare. (Richiede il riavvio di Applio)", + "Language": "Lingua", + "Select the language you want to use. (Requires restarting Applio)": "Selezionare la lingua che si desidera utilizzare. (Richiede il riavvio di Applio)", + "Plugin Installer": "Programma di installazione del plug-in", + "Drag your plugin.zip to install it": "Trascina il plugin.zip per installarlo", + "Version Checker": "Controllo della versione", + "Check which version of Applio is the latest to see if you need to update.": "Controlla quale versione di Applio è l'ultima per vedere se è necessario eseguire l'aggiornamento.", + "Check for updates": "Controlla gli aggiornamenti" +} \ No newline at end of file diff --git a/assets/i18n/languages/ja_JA.json b/assets/i18n/languages/ja_JA.json new file mode 100644 index 0000000000000000000000000000000000000000..7b03e82cd1af637296161dae7ad83d6acfac4bb1 --- /dev/null +++ b/assets/i18n/languages/ja_JA.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "他の追随を許さないパワー、モジュール性、そしてユーザーフレンドリーな操作性を実現するために綿密に最適化された究極のボイスクローニングツール。", + "This section contains some extra utilities that often may be in experimental phases.": "このセクションには、多くの場合、実験段階にある可能性のあるいくつかの追加のユーティリティが含まれています。", + "Output Information": "出力情報", + "The output information will be displayed here.": "出力情報がここに表示されます。", + "Inference": "推論", + "Train": "学習", + "Extra": "おまけ", + "Merge Audios": "オーディオをマージ (Merge Audios)", + "Processing": "加工", + "Audio Analyzer": "オーディオアナライザ", + "Model Information": "モデル情報", + "Plugins": "プラグイン", + "Download": "ダウンロード", + "Report a Bug": "バグを報告する", + "Settings": "設定", + "Preprocess": "前処理", + "Model Name": "モデル名", + "Name of the new model.": "新しいモデルの名前。", + "Enter model name": "モデル名を入力", + "Dataset Path": "データセット パス", + "Path to the dataset folder.": "データセット フォルダーへのパス。", + "Refresh Datasets": "データセットの更新", + "Dataset Creator": "データセットクリエーター", + "Dataset Name": "データセット名", + "Name of the new dataset.": "新しいデータセットの名前。", + "Enter dataset name": "データセット名を入力", + "Upload Audio Dataset": "オーディオデータセットのアップロード", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "オーディオ ファイルがデータセットに正常に追加されました。前処理ボタンをクリックしてください。", + "Enter dataset path": "データセットのパスを入力", + "Sampling Rate": "サンプリングレート", + "The sampling rate of the audio files.": "オーディオファイルのサンプリングレートです。", + "RVC Version": "RVC バージョン", + "The RVC version of the model.": "モデルの RVC バージョン。", + "Preprocess Dataset": "データセットの前処理", + "Extract": "抽出", + "Hop Length": "ホップ長(Hop Length)", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "システムがピッチを大きく変化させるまでの時間を示します。ホップ長が短いほど、推論に時間がかかりますが、ピッチの精度は高くなる傾向があります。", + "Batch Size": "バッチサイズ", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "GPUの使用可能なVRAMに合わせることをお勧めします。4 に設定すると精度は向上しますが処理は遅くなり、8 に設定すると、より高速で標準的な結果が得られます。", + "Save Every Epoch": "すべてのエポックを保存", + "Determine at how many epochs the model will saved at.": "モデルが何エポックごとに保存されるかを指定します。", + "Total Epoch": "総エポック", + "Specifies the overall quantity of epochs for the model training process.": "総エポック数を指定します。", + "Pretrained": "事前学習済みモデル", + "Save Only Latest": "最新のみ保存", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "この設定を有効にすると、GとDファイルの最新バージョンのみを保存し、ストレージ容量を効果的に節約します。", + "Save Every Weights": "すべてのウェイトを保存(Save Every Weights)", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "この設定により、各エポックの終了時にモデルの重みを保存できます。", + "Custom Pretrained": "カスタム事前学習済みモデル", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "カスタム事前学習済みモデルを利用することで、優れた結果を得ることができます。特定のユースケースに合わせて最も適した事前学習済みモデルを選択することで、パフォーマンスが大幅に向上する可能性があります。", + "Upload Pretrained Model": "事前学習済みモデルのアップロード", + "Refresh Custom Pretraineds": "カスタム事前学習済みモデルの更新", + "Pretrained Custom Settings": "事前学習済みモデルのカスタム設定", + "The file you dropped is not a valid pretrained file. Please try again.": "ドロップしたファイルは有効な事前学習済みモデルファイルではありません。もう一度やり直してください。", + "Click the refresh button to see the pretrained file in the dropdown menu.": "更新ボタンをクリックすると、ドロップダウンメニューに事前学習済みモデルが表示されます。", + "Pretrained G Path": "カスタム事前学習済みモデル G", + "Pretrained D Path": "カスタム事前学習済みモデル D", + "GPU Settings": "GPU 設定", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "GPUアーキテクチャが優れているユーザーに推奨される、高度なGPU設定を設定します。", + "GPU Custom Settings": "GPU カスタム設定", + "GPU Number": "GPU番号", + "0 to ∞ separated by -": "範囲は0 から ∞ で、-で区切られます。", + "GPU Information": "GPU 情報", + "Pitch Guidance": "ピッチガイダンス", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "ピッチガイダンスを採用することで、ピッチを含め、元の声のイントネーションを反映させることが可能になります。この機能は、歌唱など、オリジナルのメロディーやピッチパターンを保持することが不可欠な場面で特に有用です。", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "独自のトレーニングを行う場合は、事前学習済みモデルを利用します。このアプローチにより、学習時間が短縮され、全体的な品質が向上します。", + "Extract Features": "特徴量の抽出", + "Start Training": "トレーニングを開始", + "Generate Index": "インデックスの生成", + "Voice Model": "音声モデル", + "Select the voice model to use for the conversion.": "変換に使用する音声モデルを選択します。", + "Index File": "インデックス ファイル", + "Select the index file to use for the conversion.": "変換に使用するインデックスファイルを選択します。", + "Refresh": "リフレッシュ", + "Unload Voice": "モデルのアンロード", + "Single": "シングル", + "Upload Audio": "オーディオのアップロード", + "Select Audio": "オーディオを選択", + "Select the audio to convert.": "変換するオーディオを選択します。", + "Advanced Settings": "詳細設定", + "Clear Outputs (Deletes all audios in assets/audios)": "Clear Outputs (アセット/オーディオ内のすべてのオーディオを削除します)", + "Custom Output Path": "カスタム出力パス", + "Output Path": "出力パス", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "出力オーディオが保存されるパス (デフォルトでは assets/audios/output.wav", + "Split Audio": "オーディオの分割", + "Split the audio into chunks for inference to obtain better results in some cases.": "音声をチャンクに分割して推論すると、より良い結果が得られる場合があります。", + "Autotune": "オートチューン", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "推論にソフトオートチューンを適用します。歌の変換に推奨されます。", + "Clean Audio": "クリーンオーディオ", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "音声を話すのに推奨されるノイズ検出アルゴリズムを使用して、音声出力をクリーンアップします。", + "Clean Strength": "クリーンな強さ", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "クリーンアップレベルを必要なオーディオに設定すると、上げれば上げるほどクリーンアップされますが、オーディオがより圧縮される可能性があります。", + "Pitch": "ピッチ", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "オーディオのピッチを設定し、値が大きいほどピッチが高くなります。", + "Filter Radius": "フィルタ半径(Filter Radius)", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "数値が 3 以上の場合、収集されたトーン結果に中央値フィルタリングを使用すると、呼吸が減少する可能性があります。", + "Search Feature Ratio": "特徴量検索比率", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "インデックスファイルによって及ぼされる影響。値が大きいほど、インデックスの影響が大きくなります。ただし、低い値を選択すると、オーディオに存在するアーティファクトを軽減できます。", + "Volume Envelope": "ボリュームエンベロープ", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "出力のボリュームエンベロープで代用またはブレンドします。比率が 1 に近づくほど、出力エンベロープが採用されます。", + "Protect Voiceless Consonants": "無声子音の保護", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "明瞭な子音と呼吸音を保護し、電気音響の引き裂きやその他のアーチファクトを防ぎます。パラメータを最大値の 0.5 までプルすると、包括的な保護が提供されます。ただし、この値を小さくすると、インデックス作成の影響が軽減される可能性がある一方で、保護の範囲が狭くなる可能性があります。", + "Pitch extraction algorithm": "ピッチ抽出アルゴリズム", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "オーディオ変換に使用するピッチ抽出アルゴリズム。デフォルトのアルゴリズムは rmvpe で、ほとんどの場合に推奨されます。", + "Convert": "コンバート", + "Export Audio": "オーディオのエクスポート", + "Batch": "バッチ", + "Input Folder": "入力フォルダ", + "Select the folder containing the audios to convert.": "変換するオーディオを含むフォルダを選択します。", + "Enter input path": "入力パスを入力", + "Output Folder": "出力フォルダ", + "Select the folder where the output audios will be saved.": "出力オーディオを保存するフォルダを選択します。", + "Enter output path": "出力パスを入力", + "Get information about the audio": "オーディオに関する情報を取得する", + "Information about the audio file": "オーディオファイルに関する情報", + "Waiting for information...": "情報を待っています...", + "## Voice Blender": "## モデルマージ", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "2つの音声モデルを選択し、希望のブレンド率を設定して、まったく新しい音声モデルにマージします。", + "Voice Blender": "モデルマージ", + "Drag and drop your model here": "ここにモデルをドラッグ&ドロップします", + "You can also use a custom path.": "カスタムパスを使用することもできます。", + "Blend Ratio": "ブレンド比(Blend Ratio)", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "位置をどちらか一方に調整すると、モデルが最初または2番目に近づきます。", + "Fusion": "マージ", + "Path to Model": "モデルへのパス", + "Enter path to model": "モデルへのパスを入力", + "Model information to be placed": "配置するモデル情報", + "Inroduce the model information": "モデル情報の取得", + "The information to be placed in the model (You can leave it blank or put anything).": "モデルに配置する情報(空白のままでも、何でも入力できます)。", + "View model information": "モデル情報の表示", + "Introduce the model pth path": ".pthのパスを指定してください。", + "View": "表示", + "Model extraction": "モデルの抽出", + "Model conversion": "モデル変換", + "Pth file": "Pth ファイル", + "Output of the pth file": "p番目のファイルの出力", + "# How to Report an Issue on GitHub": "# GitHub で問題を報告する方法", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1.下の[画面の記録]ボタンをクリックして、発生している問題の記録を開始します。", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2.問題の記録が終了したら、[記録の停止]ボタンをクリックします(同じボタンですが、アクティブに記録しているかどうかによってラベルが変わります)。", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [GitHub Issues](https://github.com/IAHispano/Applio/issues)に移動し、[New Issue]ボタンをクリックします。", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. 提供された課題テンプレートに記入し、必要に応じて詳細を含め、アセット セクションを使用して前の手順で記録したファイルをアップロードします。", + "Record Screen": "録画画面", + "Record": "記録", + "Stop Recording": "記録の停止", + "Introduce the model .pth path": "モデルの .pth パスを導入する", + "See Model Information": "「モデル情報」を参照", + "## Download Model": "## モデルのダウンロード", + "Model Link": "モデルリンク", + "Introduce the model link": "モデルリンクの紹介", + "Download Model": "モデルのダウンロード", + "## Drop files": "## ファイルのドロップ", + "Drag your .pth file and .index file into this space. Drag one and then the other.": ".pth ファイルと .index ファイルをこのスペースにドラッグします。一方をドラッグしてから、もう一方をドラッグします。", + "TTS Voices": "TTS ボイス", + "Select the TTS voice to use for the conversion.": "変換に使用する TTS 音声を選択します。", + "Text to Synthesize": "合成するテキスト", + "Enter the text to synthesize.": "合成するテキストを入力します。", + "Or you can upload a .txt file": "または、.txtファイルをアップロードすることもできます", + "Enter text to synthesize": "合成するテキストを入力する", + "Output Path for TTS Audio": "TTSオーディオの出力パス", + "Output Path for RVC Audio": "RVCオーディオの出力パス", + "Enable Applio integration with Discord presence": "Applio と Discord のプレゼンスの統合を有効にする", + "It will activate the possibility of displaying the current Applio activity in Discord.": "これにより、Discordで現在のApplioアクティビティを表示する可能性がアクティブになります。", + "Enable Applio integration with applio.org/models using flask": "フラスコを使用して Applio と applio.org/models の統合を有効にする", + "It will activate the possibility of downloading models with a click from the website.": "ウェブサイトからクリックするだけでモデルをダウンロードする可能性がアクティブになります。", + "Theme": "テーマ", + "Select the theme you want to use. (Requires restarting Applio)": "使用するテーマを選択します。(Applioの再起動が必要)", + "Language": "言語", + "Select the language you want to use. (Requires restarting Applio)": "使用する言語を選択します。(Applioの再起動が必要)", + "Plugin Installer": "プラグインインストーラ", + "Drag your plugin.zip to install it": "plugin.zipをドラッグしてインストールします", + "Version Checker": "バージョンチェッカー", + "Check which version of Applio is the latest to see if you need to update.": "更新が必要かどうか、Applioのどのバージョンが最新かを確認してください。", + "Check for updates": "アップデートを確認する" +} diff --git a/assets/i18n/languages/jv_JV.json b/assets/i18n/languages/jv_JV.json new file mode 100644 index 0000000000000000000000000000000000000000..9e26dfeeb6e641a33dae4961196235bdb965b21b --- /dev/null +++ b/assets/i18n/languages/jv_JV.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/assets/i18n/languages/ko_KO.json b/assets/i18n/languages/ko_KO.json new file mode 100644 index 0000000000000000000000000000000000000000..a2b25326b6e469414fd16d807b5beb87b5f1c95a --- /dev/null +++ b/assets/i18n/languages/ko_KO.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "타의 추종을 불허하는 성능, 모듈성 및 사용자 친화적인 경험을 위해 세심하게 최적화된 궁극의 음성 복제 도구입니다.", + "This section contains some extra utilities that often may be in experimental phases.": "이 섹션에는 아직 실험 단계에 있는 추가 유틸리티가 포함되어 있습니다.", + "Output Information": "출력 정보", + "The output information will be displayed here.": "출력 정보가 여기에 표시됩니다.", + "Inference": "추론", + "Train": "모델 학습", + "Extra": "기타 도구", + "Merge Audios": "오디오 병합", + "Processing": "처리", + "Audio Analyzer": "오디오 분석기", + "Model Information": "모델 정보", + "Plugins": "플러그인", + "Download": "다운로드", + "Report a Bug": "버그 신고", + "Settings": "설정", + "Preprocess": "사전 처리", + "Model Name": "모델명", + "Name of the new model.": "새 모델의 이름입니다.", + "Enter model name": "모델명 입력", + "Dataset Path": "데이터 세트 경로", + "Path to the dataset folder.": "데이터 세트 폴더의 경로입니다.", + "Refresh Datasets": "데이터 세트 새로 고침", + "Dataset Creator": "데이터셋 생성기", + "Dataset Name": "데이터 세트 이름", + "Name of the new dataset.": "새 데이터 세트의 이름입니다.", + "Enter dataset name": "데이터 세트 이름 입력", + "Upload Audio Dataset": "오디오 데이터 세트 업로드", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "오디오 파일이 데이터 세트에 성공적으로 추가되었습니다. 전처리 버튼을 클릭해주세요.", + "Enter dataset path": "데이터 세트 경로 입력", + "Sampling Rate": "샘플링 레이트", + "The sampling rate of the audio files.": "오디오 파일의 샘플링 레이트입니다.", + "RVC Version": "RVC 버전", + "The RVC version of the model.": "모델의 RVC 버전입니다.", + "Preprocess Dataset": "데이터 세트 사전 처리", + "Extract": "추출물", + "Hop Length": "홉 길이", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "시스템이 중요한 피치 변화로 전환되는 데 걸리는 시간을 나타냅니다. 홉 길이가 작을수록 추론에 더 많은 시간이 필요하지만 피치 정확도가 높아지는 경향이 있습니다.", + "Batch Size": "배치 크기(Batch Size)", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "GPU의 사용 가능한 VRAM에 맞추는 것이 좋습니다. 4로 설정하면 정확도가 향상되지만 처리 속도가 느려지고, 8로 설정하면 더 빠르고 표준적인 결과를 얻을 수 있습니다.", + "Save Every Epoch": "모든 Epoch를 저장합니다", + "Determine at how many epochs the model will saved at.": "모델이 몇 epoch에 저장될지 결정합니다.", + "Total Epoch": "Total Epoch(총 에포크)", + "Specifies the overall quantity of epochs for the model training process.": "모델 학습 프로세스에 대한 전체 epoch 수를 지정합니다.", + "Pretrained": "사전학습 모델 사용", + "Save Only Latest": "마지막 파일만 저장(Save Only Latest)", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "이 설정을 활성화하면 마지막으로 저장된 G 및 D 파일만 남게 되므로 저장 공간을 효과적으로 절약할 수 있습니다.", + "Save Every Weights": "모든 가중치 저장", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "이 설정을 사용하면 각 Epoch가 끝날 때 모델의 가중치를 저장할 수 있습니다.", + "Custom Pretrained": "커스텀 사전학습 모델 사용", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "특정 사용 사례에 맞는 가장 적합한 커스텀 사전학습 모델을 선택하면 성능이 크게 향상될 수 있고 우수한 결과를 얻을 수 있습니다.", + "Upload Pretrained Model": "사전학습 된 모델 업로드", + "Refresh Custom Pretraineds": "커스텀 사전학습 모델 새로 고침", + "Pretrained Custom Settings": "커스텀 사전학습 모델 설정", + "The file you dropped is not a valid pretrained file. Please try again.": "드롭한 파일이 유효한 사전학습 모델 파일이 아닙니다. 다시 시도하십시오.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "새로 고침 버튼을 클릭하면 드롭다운 메뉴에서 사전 학습 된 파일을 볼 수 있습니다.", + "Pretrained G Path": "커스텀 사전학습 모델 G", + "Pretrained D Path": "커스텀 사전학습 모델 D", + "GPU Settings": "GPU 설정", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "고급 GPU 아키텍처를 사용하는 사용자에게 권장되는 GPU 설정.", + "GPU Custom Settings": "GPU 커스텀 설정", + "GPU Number": "GPU 번호", + "0 to ∞ separated by -": "0 - ∞ - 로 구분", + "GPU Information": "GPU 정보", + "Pitch Guidance": "음정(Pitch) 안내", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "음정(Pitch) 가이던스를 사용하면 음정을 포함하여 원래 목소리의 억양을 미러링할 수 있습니다. 이 기능은 노래 및 원래 멜로디 또는 음정 패턴의 보존이 필수적인 것에 특히 유용합니다.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "자체 모델을 학습할 때 사전 학습된 모델을 활용합니다. 이 접근 방식은 학습 시간을 줄이고 전반적인 품질을 향상시킵니다.", + "Extract Features": "특징 추출", + "Start Training": "트레이닝 시작하기", + "Generate Index": "인덱스 생성", + "Voice Model": "음성 모델", + "Select the voice model to use for the conversion.": "변환에 사용할 음성 모델을 선택합니다.", + "Index File": "색인 파일", + "Select the index file to use for the conversion.": "변환에 사용할 인덱스 파일을 선택합니다.", + "Refresh": "새로고침", + "Unload Voice": "음성 언로드", + "Single": "싱글", + "Upload Audio": "오디오 업로드", + "Select Audio": "오디오 선택", + "Select the audio to convert.": "변환할 오디오를 선택합니다.", + "Advanced Settings": "고급 설정", + "Clear Outputs (Deletes all audios in assets/audios)": "출력 지우기(에셋/오디오의 모든 오디오 삭제)", + "Custom Output Path": "사용자 지정 출력 경로", + "Output Path": "출력 경로", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "출력 오디오가 저장될 경로 입니다, 기본값 assets/audios/output.wav", + "Split Audio": "오디오 분할", + "Split the audio into chunks for inference to obtain better results in some cases.": "경우에 따라 더 나은 결과를 얻기 위해 오디오를 청크로 분할합니다.", + "Autotune": "오토튠", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "추론 시 소프트 오토튠을 적용합니다. 노래에 권장합니다", + "Clean Audio": "디-노이즈 오디오", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "노이즈 감지 알고리즘을 사용하여 출력되는 오디오의 불필요한 정보를 정리합니다. 연설과 같은 스피치 오디오에 적합합니다.", + "Clean Strength": "감지 강도", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "감지 레벨을 높이면 높일수록 정리가 더 많이 되지만 오디오가 더 압축되어 음질 저하가 생길 수 있습니다.", + "Pitch": "음정", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "오디오의 음정(Pitch)을 설정합니다. 값이 높을수록 음정이 높아집니다.", + "Filter Radius": "필터 반경", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "숫자가 3보다 크거나 같을 때 수집된 톤 결과에 중앙값 필터링을 사용하여 호흡등의 소리를 감소 시킬 수 있습니다", + "Search Feature Ratio": "특성 검색 비율(Search Feature Ratio)", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "특성 인덱스 파일이 미치는 영향; 값이 높을수록 모델의 특성을 잘 나타내지만 값이 낮을수록 인공적인 느낌을 줄어들 수도 있습니다.", + "Volume Envelope": "볼륨 엔벨로프(Volume Envelope)", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "출력의 볼륨 포락선(Envelope)로 대체하거나 혼합합니다. 비율이 1에 가까울수록 출력 엔벨로프가 더 많이 사용됩니다.", + "Protect Voiceless Consonants": "무성 자음 보호", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "뚜렷한 자음과 숨소리를 보호하여 전자 음향 찢어짐 및 기타 아티팩트를 방지합니다. 설정값을 최대치인 0.5로 끌어오면 포괄적인 보호가 제공됩니다. 반대로 보호 범위를 낮출 경우 인덱싱 효과를 완화할 수 있습니다", + "Pitch extraction algorithm": "음정(Pitch) 추출 알고리즘", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "오디오 변환에 사용할 음정 추출 알고리즘입니다. 디폴트 알고리즘은 rmvpe이며, 대부분의 경우에 권장됩니다.", + "Convert": "변환", + "Export Audio": "오디오 내보내기", + "Batch": "일괄", + "Input Folder": "입력 폴더", + "Select the folder containing the audios to convert.": "변환할 오디오가 포함된 폴더를 선택합니다.", + "Enter input path": "입력 경로 입력", + "Output Folder": "출력 폴더", + "Select the folder where the output audios will be saved.": "출력 오디오를 저장할 폴더를 선택합니다.", + "Enter output path": "출력 경로 입력", + "Get information about the audio": "오디오에 대한 정보 가져오기", + "Information about the audio file": "오디오 파일에 대한 정보", + "Waiting for information...": "정보를 기다리는 중...", + "## Voice Blender": "## 목소리 혼합", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "두 개의 음성 모델을 선택하고 원하는 혼합 비율을 설정하면 완전히 새로운 음성으로 혼합됩니다.", + "Voice Blender": "목소리 혼합", + "Drag and drop your model here": "여기에 모델을 끌어다 놓습니다.", + "You can also use a custom path.": "사용자 지정 경로를 사용할 수도 있습니다.", + "Blend Ratio": "합성 비율(Blend Ratio)", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "위치를 양쪽 방향으로 조정하며 두 모델의 혼합 비중을 선택할 수 있습니다.", + "Fusion": "목소리 혼합", + "Path to Model": "모델 경로", + "Enter path to model": "모델 경로 입력", + "Model information to be placed": "배치할 모델 정보", + "Inroduce the model information": "모델 정보 도입", + "The information to be placed in the model (You can leave it blank or put anything).": "모델의 정보(비워 두거나 아무 내용을 써도 됩니다).", + "View model information": "모델 정보 보기", + "Introduce the model pth path": "모델 pth 경로 소개", + "View": "보기", + "Model extraction": "모델 추출", + "Model conversion": "모델 변환", + "Pth file": "Pth 파일", + "Output of the pth file": "pth 파일의 출력", + "# How to Report an Issue on GitHub": "# GitHub에서 문제를 보고하는 방법", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. 아래의 '녹화 화면' 버튼을 클릭하여 발생한 문제의 녹화를 시작합니다.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. 문제 기록이 끝나면 '기록 중지' 버튼(동일한 버튼이지만 현재 기록 중인지 여부에 따라 레이블이 변경됨)을 클릭합니다.", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [GitHub 문제](https://github.com/IAHispano/Applio/issues)로 이동하여 '새 문제' 버튼을 클릭합니다.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. 제공된 문제 템플릿을 완료하고 필요에 따라 세부 정보를 포함하고 자산 섹션을 활용하여 이전 단계에서 기록된 파일을 업로드합니다.", + "Record Screen": "녹화 화면", + "Record": "기록", + "Stop Recording": "기록 중지", + "Introduce the model .pth path": "모델 .pth 경로 소개", + "See Model Information": "모델 정보 보기", + "## Download Model": "## 모델 다운로드", + "Model Link": "모델 링크", + "Introduce the model link": "모델 소개 링크", + "Download Model": "모델 다운로드", + "## Drop files": "## 파일 드롭", + "Drag your .pth file and .index file into this space. Drag one and then the other.": ".pth 파일과 .index 파일을 이 공간으로 드래그합니다. 하나를 드래그한 다음 다른 하나를 드래그합니다.", + "TTS Voices": "TTS 음성", + "Select the TTS voice to use for the conversion.": "변환에 사용할 TTS 음성을 선택합니다.", + "Text to Synthesize": "합성할 텍스트(Text to Synthesize)", + "Enter the text to synthesize.": "합성할 텍스트를 입력합니다.", + "Or you can upload a .txt file": "또는 .txt 파일을 업로드할 수 있습니다.", + "Enter text to synthesize": "합성할 텍스트 입력", + "Output Path for TTS Audio": "TTS 오디오의 출력 경로", + "Output Path for RVC Audio": "RVC 오디오의 출력 경로", + "Enable Applio integration with Discord presence": "Discord와 Applio 통합 활성화", + "It will activate the possibility of displaying the current Applio activity in Discord.": "Discord에서 Applio의 활동이 표시되는 기능을 활성화합니다.", + "Enable Applio integration with applio.org/models using flask": "플라스크를 사용하여 applio.org/models 와 Applio 통합 활성화", + "It will activate the possibility of downloading models with a click from the website.": "웹 사이트에서 클릭 한 번으로 모델을 다운로드 할 수 있습니다.", + "Theme": "테마", + "Select the theme you want to use. (Requires restarting Applio)": "사용할 테마를 선택합니다. (Applio를 다시 시작해야 함)", + "Language": "언어", + "Select the language you want to use. (Requires restarting Applio)": "사용할 언어를 선택합니다. (Applio를 다시 시작해야 함)", + "Plugin Installer": "플러그인 인스톨러", + "Drag your plugin.zip to install it": "plugin.zip 드래그하여 설치하십시오.", + "Version Checker": "버전 검사기", + "Check which version of Applio is the latest to see if you need to update.": "Applio의 최신 버전을 확인하여 업데이트가 필요한지 확인하십시오.", + "Check for updates": "업데이트 확인" +} diff --git a/assets/i18n/languages/ml_IN.json b/assets/i18n/languages/ml_IN.json new file mode 100644 index 0000000000000000000000000000000000000000..d20de22513a65792558614f31649db13f9f95620 --- /dev/null +++ b/assets/i18n/languages/ml_IN.json @@ -0,0 +1,204 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "അനന്തമായ ശക്തി, മോഡുലാരിറ്റി, ഉപയോക്തൃ-സൗഹൃദ അനുഭവത്തിനായി യാഥാർത്ഥ്യമാക്കിയ അത്യുന്നതമായ വോയ്സ് ക്ലോണിങ് ടൂൾ.\n[മലയാളത്തിലേക്ക് വായന: Enes](https://discord.com/users/1140031358006202468)", + "This section contains some extra utilities that often may be in experimental phases.": "ഈ പേരിലെ കൊണ്ടാടാൻ പ്രയോജനപ്രദമായ എന്നതിനാൽ കഴിഞ്ഞത് സാധാരണയായ പോസിക്കുകളിൽ അവസാനിക്കാത്ത ചില യന്ത്രങ്ങൾ ഉള്ളതാണ്.", + "Output Information": "പ്രണാമം വിവരം", + "The output information will be displayed here.": "ഇവിടെ പ്രണയ വിവരങ്ങൾ പ്രദശിപ്പിക്കപ്പെടും.", + "Inference": "സൂചന", + "Train": "പ്രശിക്ഷണം", + "Extra": "അധികം", + "Merge Audios": "ഓഡിയോ ഒടിക്കുക", + "Processing": "പ്രൊസസ്സിംഗ്", + "Audio Analyzer": "ഓഡിയോ വിശ്ലേഷണകൾ", + "Model Information": "മോഡൽ വിവരങ്ങൾ", + "Plugins": "പ്ലഗിൻസ്", + "Download": "ഡൗൺലോഡ്", + "Report a Bug": "പിശക് റിപ്പോർട്ട്", + "Settings": "സെറ്റിംഗുകൾ", + "Preprocess": "പ്രൊസസ്", + "Model Name": "മോഡൽ പേര്", + "Name of the new model.": "പുതിയ മോഡലിന്റെ പേര്.", + "Enter model name": "മോഡൽ പേര് നൽകുക", + "Dataset Path": "ഡാറ്റാസെറ്റ് പാത", + "Path to the dataset folder.": "ഡാറ്റാസെറ്റ് ഫോൾഡർക്കുള്ള പാത.", + "Refresh Datasets": "ഡാറ്റാസെറ്റുകൾ പുനഃസൃഷ്ടിക്കുക", + "Dataset Creator": "ഡാറ്റാസെറ്റ് സൃഷ്ടാവ്", + "Dataset Name": "ഡാറ്റാസെറ്റ് പേര്", + "Name of the new dataset.": "പുതിയ ഡാറ്റാസെറ്റിന്റെ പേര്.", + "Enter dataset name": "ഡാറ്റാസെറ്റ് പേര് നൽകുക", + "Upload Audio Dataset": "ഓഡിയോ ഡാറ്റാസെറ്റ് അപ്ലോഡ് ചെയ്യുക", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "ഓഡിയോ ഫയൽ യഥാർത്ഥമായി ഡാറ്റാസെറ്റിലേക്ക് ചേർന്നു. ദയവായി പ്രൊസെസ് ബട്ടൺ അമർത്തുക.", + "Enter dataset path": "ഡാറ്റാസെറ്റ് പാത നൽകുക", + "Sampling Rate": "സാമ്പ്ലിംഗ് റേറ്റ്", + "The sampling rate of the audio files.": "ഓഡിയോ ഫയലുകളുടെ സാമ്പ്ലിംഗ് റേറ്റ്.", + "RVC Version": "RVC പതിപ്പ്", + "The RVC version of the model.": "മോഡലിന്റെ RVC പതിപ്പ്.", + "Preprocess Dataset": "ഡാറ്റാസെറ്റ് പ്രൊസെസ് ചെയ്യുക", + + "Embedder Model": "Embedder Model", + "Model used for learning speaker embedding.": "സ്പീക്കർ എംബെഡ്ഡിംഗ് പഠിപ്പിക്കാൻ ഉപയോഗിക്കുന്ന മോഡൽ.", + "Extract": "എക്സ്ട്രാക്ട്", + "Hop Length": "ഹോപ്പ് ലെന്ത്", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "സിസ്റ്റത്തിൽ ഒരു വിശദ പിച്ച് മാറ്റത്തിന്റെ ദാരിദ്ര്യം സൂചിപ്പിക്കുന്നു. ചെറിയ ഹോപ്പ് ലെന്തുകള് ഇൻഫരൻസിനായി കൂടുതൽ സമയം ആവശ്യപ്പെടുന്നു, എന്നിരുന്നാലും ഉയരമായ പിച്ച് അക്ക്യൂറസി നൽകുന്നു.", + "Batch Size": "ബാച്ച് വലുപ്പം", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "നിനക്ക് ലഭ്യമായ GPU-യുടെ VRAM നുസരിച്ച് അലൈൻ ചെയ്യുന്നത് പ്രാധാന്യപ്പെടുന്നു. 4-ന്റെ സെറ്റിംഗ് മൊത്തം അക്ക്യൂറസി പരിഷ്കർത്തനവും എല്ലാത്തിനെയും അവലംബപ്പെടുന്നു, എന്നിരുന്നാലും 8 വലുപ്പം അനുഭവജീവനത്തിനായി ഉന്നയിക്കുന്നു.", + "Save Every Epoch": "എന്നാൽ എന്റെ എപ്പൊക്കാലിലെയും മോഡൽ സേവ് ചെയ്യുന്നതിനു വരെ", + "Determine at how many epochs the model will be saved at.": "എന്താണ് എപ്പൊക്കാലിൽ മോഡൽ സേവ് ചെയ്യപ്പെടുന്നതെന്ന് തിരഞ്ഞെടുക്കുക.", + "Total Epoch": "മൊത്തം എപ്പൊക്ക്", + "Specifies the overall quantity of epochs for the model training process.": "മോഡൽ പ്രശിക്ഷണ പ്രക്രിയയ്ക്കായി എപ്പൊക്ക് എത്രയാണ് എന്നത് നിര്ദിഷ്ടമാക്കുന്നു.", + "Pretrained": "പ്രീട്രെയിനെഡ്", + "Save Only Latest": "കേവലായി പുതിയത് മാത്രം സേവ് ചെയ്യുക", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "ഈ സെറ്റിംഗ് പ്രവർത്തനത്തിനായി ക്രമീകരിച്ചാൽ, G മറ്റും D ഫയലുകൾ അവരുടെ അവസാന പതിപ്പുകൾക്ക് മാത്രം സേവ് ചെയ്യും, പ്രഭാവകരമായി സ്റ്റോറേജ് സ്ഥലം സംരക്ഷിക്കുന്നതാണ്.", + "Save Every Weights": "എന്റെ എപ്പൊക്കാലിലും ഭാരം സേവ് ചെയ്യുക", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "ഈ സെറ്റിംഗ് നിര്ദ്ദേശപ്പെടുന്ന ഓരോ എപ്പൊക്കിലും മോഡലിന്റെ ഭാരങ്ങൾ സേവ് ചെയ്യാൻ കഴിയുന്നു.", + "Custom Pretrained": "കസ്റ്റം പ്രീട്രെയിനെഡ്", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "കസ്റ്റം പ്രീട്രെയിനെഡ് മോഡലുകൾ ഉപയോഗിക്കുന്നത് ഉന്നത ഫലങ്ങൾ നൽകിയാൽ, സ്പഷ്ടമായ ഉപയോഗ കേസിനായി കൈമേലെ പ്രീട്രെയിനെഡ് മോഡലുകൾ തിരഞ്ഞെടുക്കുന്നത് സാധാരണയായ പ്രദർശനത്തെ വളർത്തുന്നതിനും പ്രദർശനം വളർത്തുന്നതിനും കൂടുതൽ സഹായകമാകും.", + "Upload Pretrained Model": "പ്രീട്രെയിനെഡ് മോഡൽ അപ്ലോഡ് ചെയ്യുക", + "Refresh Custom Pretraineds": "കസ്റ്റം പ്രീട്രെയിനെഡുകൾ പുനഃസ്വന്തമാക്കുക", + "Pretrained Custom Settings": "പ്രീട്രെയിനെഡ് കസ്റ്റം സെറ്റിംഗുകൾ", + "The file you dropped is not a valid pretrained file. Please try again.": "നിനക്ക് ഡ്രോപ്പ് ചെയ്യിയ ഫയൽ ഒരു സാധാരണ പ്രീട്രെയിനെഡ് ഫയലല്ല. ദയവായി വീണ്ടും ശ്രയിക്കുക.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "പ്രീട്രെയിനെഡ് ഫയലെ ഡ്രോപ്പ്ഡൌൺ മെനുവിലെത്താൻ റെഫ്രഷ് ബട്ടൺ ക്ലിക്കുചെയ്യുക.", + "Pretrained G Path": "കസ്റ്റം പ്രീട്രെയിനെഡ് G പാത", + "Pretrained D Path": "കസ്റ്റം പ്രീട്രെയിനെഡ് D പാത", + "GPU Settings": "GPU സെറ്റിംഗുകൾ", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "അട്വാൻസ്ഡ് GPU സെറ്റിംഗുകൾ സജ്ജീവമാക്കുന്നു, പ്രശസ്ത GPU ആർക്കിടെയുള്ള ഉപയോക്താക്കളിനായി ശിഫാരസ് ചെയ്തത്.", + "GPU Custom Settings": "GPU കസ്റ്റം സെറ്റിംഗുകൾ", + "GPU Number": "GPU നമ്പർ", + "0 to ∞ separated by -": "0 മുതൽ ∞ വരെ - ഒടുക്കിയ", + "GPU Information": "GPU വിവരം", + "Pitch Guidance": "പിച്ച് ഗൈഡൻസ്", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "പിച്ച് ഗൈഡൻസ് ഉപയോഗിച്ച്, ഓരിജിനൽ വോയ്സിന്റെ ഇൻറോണേഷനെ, അതിന്റെ പിച്ചു സേവനേന്ന്, സോണ്റിംഗ് മുതലായ സന്നിധികളിൽ പ്രാഥമിക സ്വരം അല്ലെങ്കിൽ പിച്ച് നമ്പറെ പരിരക്ഷിക്കേണ്ടതായ സ്ഥിതികളിലേക്ക് മികച്ച ഫലങ്ങൾ പ്രാപ്തമാക്കാനാകുന്നു.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "നിനക്ക് സ്വന്തമായി പ്രശിക്ഷണം നടത്തുമ്പോൾ പ്രീട്രെയിനെഡ് മോഡലുകൾ ഉപയോഗിക്കുക. ഈ രീതി പ്രശിക്ഷണ സമയം കുറയ്ക്കുന്നുവെങ്കിൽ മൊത്തം ഗുണമേന്മ വരും.", + "Extract Features": "ഫീച്ചർ എക്സ്ട്രാക്ട്", + "Overtraining Detector": "ഓവർട്രെയിനിംഗ് ഡിറ്റക്റ്റർ", + "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "പ്രശിക്ഷണ ഡാറ്റയെ നിങ്ങളുടെ മോഡൽ അതിന്റെ തരംതിരിച്ചു പഠിക്കാൻ അനുവദിക്കുന്നത് നിലവിൽ നിന്ന് ഓവർട്രെയിനിംഗ് ശ്രമിക്കുക.", + "Overtraining Detector Settings": "ഓവർട്രെയിനിംഗ് ഡിറ്റക്റ്റർ സെറ്റിംഗുകൾ", + "Overtraining Threshold": "ഓവർട്രെയിനിംഗ് താഴ്ന്ന മിതം", + "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "യാത്രാവധി പരിശോധിച്ചിട്ടില്ലാത്ത അഭിവൃദ്ധി നിരയെടുക്കുകയാണെങ്കിൽ നിങ്ങളുടെ മോഡൽ പരിശോധനയെന്നത് പ്രശിക്ഷണം നിലനിൽക്കാനുള്ള ഏറ്റവും ഉന്നത എപ്പോക്കുകൾ സജ്ജമാക്കുക.", + + "Start Training": "പ്രശിക്ഷണം ആരംഭിക്കുക", + "Stop Training & Restart Applio": "പ്രശിക്ഷണം നിർത്തുക & അപ്ലിയോ പുനഃപ്രാരംഭിക്കുക", + "Generate Index": "ഇൻഡെക്സ് സൃഷ്ടിക്കുക", + + "Export Model": "എക്സ്പോർട്ട് മോഡൽ", + "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "'അപ്ലോഡ്' ബട്ടൺ കേവലം ഗൂഗിൾ കോളാബിന് മാത്രം: നിങ്ങളുടെ ഗൂഗിൾ ഡ്രൈവിലെ ApplioExported ഫോൾഡറിലേക്ക് എക്സ്പോർട്ട് ചെയ്യുന്നു.", + "Exported Pth file": "എക്സ്പോർട്ട് ചെയ്ത Pth ഫയൽ", + "Exported Index file": "എക്സ്പോർട്ട് ചെയ്ത ഇൻഡെക്സ് ഫയൽ", + "Select the pth file to be exported": "എക്സ്പോർട്ട് ചെയ്യാൻ ആദ്യം pth ഫയൽ തിരഞ്ഞെടുക്കുക", + "Select the index file to be exported": "എക്സ്പോർട്ട് ചെയ്യാൻ ആദ്യം ഇൻഡെക്സ് ഫയൽ തിരഞ്ഞെടുക്കുക", + "Upload": "അപ്ലോഡ്", + + "Voice Model": "വോയ്സ് മോഡൽ", + "Select the voice model to use for the conversion.": "കണ്വേർഷനിനായി ഉപയോഗിക്കാൻ വോയ്സ് മോഡലുകൾ തിരഞ്ഞെടുക്കുക.", + "Index File": "ഇൻഡെക്സ് ഫയൽ", + "Select the index file to use for the conversion.": "കണ്വേർഷനിനായി ഉപയോഗിക്കേണ്ട ഇൻഡെക്സ് ഫയലുകൾ തിരഞ്ഞെടുക്കുക.", + "Refresh": "പുനഃസ്വന്തമാക്കുക", + "Unload Voice": "വോയ്സ് അൺലോഡ്", + "Single": "ഏകത്വം", + "Upload Audio": "ഓഡിയോ അപ്ലോഡ് ചെയ്യുക", + "Select Audio": "ഓഡിയോ തിരഞ്ഞെടുക്കുക", + "Select the audio to convert.": "കണ്വേർട്ട് ചെയ്യാൻ ഓഡിയോ തിരഞ്ഞെടുക്കുക.", + "Advanced Settings": "പുതുമയായ സെറ്റിംഗുകൾ", + "Clear Outputs (Deletes all audios in assets/audios)": "പരിമാറ്റുക (assets/audios എല്ലാ ഓഡിയോകൾ ഇല്ലാതാക്കുക)", + "Custom Output Path": "കസ്റ്റം ഔട്ട്പുട്ട് പാത", + "Output Path": "ഔട്ട്പുട്ട് പാത", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "ഓട്ട്പുട്ട് ഓഡിയോ സേവ്ചെയ്യപ്പെടുന്നത്, സ്വഭാവമായി assets/audios/output.wav ഇല്", + "Split Audio": "ഓഡിയോ വിഭാഗീകരണം", + "Split the audio into chunks for inference to obtain better results in some cases.": "അനുമാനത്തിന് കൂടുതൽ ഫലങ്ങൾ ലഭിക്കാൻ ഓഡിയോ ഭാഗങ്ങൾക്ക് വിഭാഗീകരണം ചെയ്യുക.", + "Autotune": "ഓട്ടോട്യൂൺ", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "സോഫ്റ്റ് ഓട്ടോട്യൂൺ ആപ്ലയുകയും, സിംഗിങ് കൺവേർഷനുകളില് ശിഫാരസ് ചെയ്യുകയും.", + "Clean Audio": "ശുദ്ധമായ ഓഡിയോ", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "ശുദ്ധമായി നോയിസ് ഡിറ്റക്ഷൻ ആൾഗോരിതങ്ങൾ ഉപയോഗിച്ച് നിനക്ക് എത്ര പ്രയോജനപ്രദമായ ഓഡിയോ പരിഷ്കരിക്കാൻ, സ്പീക്കിംഗ് ഓഡിയോക്കിന് ശിഫാരസ് ചെയ്യുക.", + "Clean Strength": "ശുദ്ധി ശക്തി", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "നിനക്ക് അവശ്യമായ ഓഡിയോക്ക് ശുദ്ധിയുടെ നില സജ്ജീവമാക്കുക, അതെക്കും കൂടുതൽ ഉള്ളതും അതിനെക്കുറിച്ച് ചോദിക്കുന്നതെന്തെങ്കിലും ശുദ്ധി ചെയ്തിരിക്കുന്ന ഓഡിയോ കമ്പ്രസ്ഡ് ആയിരിക്കാനുള്ള സാധ്യതയുണ്ട്.", + "Pitch": "പിച്ച്", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "ഓഡിയോയുടെ പിച്ച് സജ്ജീവമാക്കുക, അതെക്കും ഉയരുന്നുവെങ്കിലും പിച്ച്.", + "Filter Radius": "ഫിൽട്ടർ റേഡിയസ്", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "സംഖ്യ 3 അല്ലെങ്കിൽ അതിനേക്കാൾ കൂടുതൽ ആയിരിക്കുന്നാല്, ശ്വസനം കുറയ്ക്കാന് ശേഷിക്കുന്ന രീതിയില് കൂടുതല് കഴിവുള്ളതാണ്.", + "Search Feature Ratio": "സേര്ച്ച് ഫീച്ചർ റേഷ്യോ", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "ഇനഡെക്സ് ഫയലായി വികസിക്കുന്ന പ്രഭാവം; ഉയര്ന്ന മൂല്യം ഉയരത്തിന് അനുബന്ധ പ്രഭാവമുള്ളതാണ്. എനിക്ക് കുറഞ്ഞ മൂല്യങ്ങളെ അനുവദിക്കാനും ആര്ടിഫാക്ടുകള് നിലവിലുള്ള ഓഡിയോയിലെ ബുദ്ധിമുട്ടുകൾ ഉപയോഗപ്പെടുന്നു.", + "Volume Envelope": "വോള്യൂം എൻവലപ്പ്", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "ആഉട്ട്പുട്ട് ഒറ്റവന്നേറ്റത്തിന്റെ വോള്യൂം എൻവലപ്പ് സ്ഥലപ്പെടുത്തുക. അനുഭവം 1-ക്കു സമീപമായിരിക്കുന്നതും, അനുഭവ എൻവലപ്പ് ഉപയോഗപ്പെടുന്നതും കൂടുതൽ ആണ്.", + "Protect Voiceless Consonants": "വോയ്സ്ലസ് കോൺസനന്റുകൾ സംരക്ഷിക്കുക", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "എല്ലാവര്ക്കും പ്രകടമായ കോൺസനന്റുകൾ ഒഴുകുന്നത് എന്നതുകൊണ്ടുതന്നെ ഇലക്ട്രോ-ഓക്കുസ്റ്റിക് കൊതിയും മറ്റു ആർട്ടിഫാക്ടുകളും പ്രതിരക്ഷിക്കുന്നതിനുള്ള അരികോട്. പാരാമീറ്ററിനെ അതിന്റെ 0.5 എന്നേക്കും ഉച്ചക്കൊണ്ട് കൂട്ടിക്കൊള്ളൽ സാമൂഹ്യപ്രതിരക്ഷ നൽകുന്നു. എന്നാല്, ഈ മൂല്യം കുറഞ്ഞാക്കാൻ സാധ്യതയുണ്ട്, പ്രതിരക്ഷണം താഴെ കുറഞ്ഞുകൂടാൻ സഹായകരമാവുക.", + "Pitch extraction algorithm": "പിച്ച് എക്സ്ട്രാക്ഷൻ ആൾഗോരിതം", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "ഓഡിയോ കൺവേർഷനിനായി ഉപയോഗിക്കേണ്ട പിച്ച് എക്സ്ട്രാക്ഷൻ ആൾഗോരിതം. സ്വതന്ത്ര ആൾഗോരിതത്താണ് rmvpe, അത് പലതരത്തിലുള്ള പ്രസ്താവനകളില് ശിഫാരസ് ചെയ്യപ്പെടുന്നു.", + + "Convert": "കൺവേർട്ട് ചെയ്യുക", + "Export Audio": "ഓഡിയോ എക്സ്പോർട്ട് ചെയ്യുക", + + "Batch": "ബാച്ച്", + "Input Folder": "ഇൻപുട്ട് ഫോൾഡർ", + "Select the folder containing the audios to convert.": "കൺവേർട്ട് ചെയ്യാൻ ഓഡിയോകളെ കാണുന്ന ഫോൾഡർ തിരഞ്ഞെടുക്കുക.", + "Enter input path": "ഇൻപുട്ട് പാത നൽകുക", + "Output Folder": "ഔട്ട്പുട്ട് ഫോൾഡർ", + "Select the folder where the output audios will be saved.": "ഔട്ട്പുട്ട് ഓഡിയോകൾ സേവ്ചെയ്യപ്പെടുന്ന ഫോൾഡർ തിരഞ്ഞെടുക്കുക.", + "Enter output path": "ഔട്ട്പുട്ട് പാത നൽകുക", + + "Get information about the audio": "ഓഡിയോയുടെ കുറിപ്പ് നേടുക", + + "## Voice Blender": "## വോയ്സ് ബ്ലെന്ഡർ", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "രണ്ട് വോയ്സ് മോഡലുകൾ തിരഞ്ഞെടുക്കുക, നിനക്ക് ആഗ്രഹിക്കുന്ന ബ്ലെന്റ് ശതകം സജ്ജീവമാക്കുക, അവയുടെ ബ്ലെന്റും പൂർണ്ണമായും പുതിയ ഒരു വോയ്സായാക്കുക.", + "Voice Blender": "വോയ്സ് ബ്ലെന്ഡർ", + "Drag and drop your model here": "നിനക്ക് ശൈലിക്കുകയോരോ മോഡൽ ഇവിടെ വികസിപ്പിക്കുക", + "You can also use a custom path.": "നിനക്ക് ഒരു സ്വന്തമായ പാതയും ഉപയോഗിക്കാം.", + "Blend Ratio": "ബ്ലെന്റ് അനുപാതം", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "സ്ഥാനം കൊണ്ടുകൂടുതൽ പ്രതിരൂപമാക്കാൻ മുന്നേറ്റം ഒന്നിലേറ്റെത്തിനു അല്ലെങ്കിൽ മറ്റൊന്നിലേറ്റെത്തിനു സാധിക്കും.", + "Fusion": "ഫ്യൂഷൻ", + "Path to Model": "മോഡലിന്റെ പാത", + "Enter path to model": "മോഡലിനെ സജ്ജീവമാക്കാൻ പാത നൽകുക", + "Model information to be placed": "പ്ലേസ്മെന്റ് ചെയ്യാൻ ആവശ്യമായ മോഡലിന്റെ വിവരം", + "Introduce the model information": "മോഡലിന്റെ വിവരം പരിചയപ്പെടുക", + "The information to be placed in the model (You can leave it blank or put anything).": "മോഡലില് സ്ഥലപ്പെടുത്താനുള്ള വിവരം (നിനക്ക് വിടാവുകയും അല്ലെങ്കിൽ എന്തെങ്കിലും ചേരുകയും ചെയ്യാം).", + "View model information": "മോഡലിന്റെ വിവരം കാണുക", + "Introduce the model pth path": "മോഡലിന്റെ pth പാത പരിചയപ്പെടുക", + "View": "കാണുക", + "Model extraction": "മോഡൽ എക്സ്ട്രാക്ഷൻ", + "Model conversion": "മോഡൽ കൺവേർഷൻ", + "Pth file": "Pth ഫയൽ", + "Output of the pth file": "Pth ഫയലിന്റെ പ്രോഡക്റ്റ്", + "# How to Report an Issue on GitHub": "# GitHub-ലെ ഒരു ഇഷ്യൂ റിപ്പോർട്ട് ചെയ്യുന്നതിനുള്ള രീതി", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. നിന്റെ അനുഭവപ്പെടുന്ന ഇഷ്യൂ റെക്കോർഡുചെയ്യുന്നതിന് താഴെ 'Record Screen' ബട്ടൺ ക്ലിക്കുചെയ്യുക.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. ഇഷ്യൂ റെക്കോർഡുചെയ്തുതീർക്കുന്നതിനുശേഷം, 'Stop Recording' ബട്ടൺ ക്ലിക്കുചെയ്യുക (അത് തുടർന്നിരിക്കുന്നുമോ എന്ന് താഴെയോ കാണുന്ന ലേബല് അനുസരിച്ച് മാറുന്നു).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [GitHub Issues](https://github.com/IAHispano/Applio/issues) സ്ഥലത്തേക്ക് പോകുക, 'New Issue' ബട്ടൺ ക്ലിക്കുചെയ്യുക.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. നൽകിയ ഇഷ്യൂ ടെംപ്ലേറ്റ് പൂർത്തിയാക്കുക, ആവശ്യമായ വിവരങ്ങളെ ചേർക്കുന്നതിനുശേഷം, പഴയ ഘടനയിൽ റെക്കോർഡുചെയ്ത ഫയൽ അപ്ലോഡ് ചെയ്യുന്നതിന് എസെറ്റ് വിഭാഗം ഉപയോഗിക്കുക.", + "Record Screen": "റെക്കോർഡ് സ്ക്രീൻ", + "Record": "റെക്കോർഡ്", + "Stop Recording": "റെക്കോർഡുനിർത്തുക", + "Introduce the model .pth path": "മോഡൽ .pth പാത പരിചയപ്പെടുക", + "See Model Information": "മോഡൽ വിവരങ്ങൾ കാണുക", + "## Download Model": "## മോഡൽ ഡൗൺലോഡ്", + "Model Link": "മോഡൽ ലിങ്ക്", + "Introduce the model link": "മോഡൽ ലിങ്ക് പരിചയപ്പെടുക", + "Download Model": "മോഡൽ ഡൗൺലോഡ്", + "## Drop files": "## ഫയലുകൾ ഇടുക", + "## Search Model": "## മോഡൽ തിരയൽ", + "Search": "തിരയൽ", + "Introduce the model name to search.": "തിരയുന്നതിനായി മോഡൽ പേര് അറിയിക്കുക.", + "We couldn't find models by that name.": "അനുബന്ധമായ പേരിൽ മോഡൽസ് കണ്ടെത്താനായില്ല.", + + "Drag your .pth file and .index file into this space. Drag one and then the other.": "നിനക്ക് .pth ഫയലുകളും .index ഫയലുകളും ഇവിടെ ഡ്രാഗ് ചെയ്യുക. ഒന്നുകിട്ട് പിന്നെ മറ്റൊന്നു ഡ്രാഗ് ചെയ്യുക.", + "TTS Voices": "TTS വോയ്സുകൾ", + "Select the TTS voice to use for the conversion.": "മാറ്റത്തിനായി ഉപയോഗിക്കാൻ TTS വോയ്സ് തിരഞ്ഞെടുക്കുക.", + "Text to Synthesize": "സിന്തിയസൈസ് ചെയ്യുന്ന ടെക്സ്റ്റ്", + "Enter the text to synthesize.": "സിന്തിയസൈസ് ചെയ്യാൻ ടെക്സ്റ്റ് നൽകുക.", + "Or you can upload a .txt file": "അല്ലെങ്കിൽ .txt ഫയൽ അപ്ലോഡ് ചെയ്യാം", + "Enter text to synthesize": "സിന്തിയസൈസ് ചെയ്യാൻ ടെക്സ്റ്റ് നൽകുക", + "Output Path for TTS Audio": "TTS ഓഡിയോക്ക് ഔട്ട്പുട്ട് പാത", + "Output Path for RVC Audio": "RVC ഓഡിയോക്ക് ഔട്ട്പുട്ട് പാത", + "Enable Applio integration with Discord presence": "Discord പ്രസന്നതയോട് Applio ഇൻറഗ്രേഷൻ സജീവമാക്കുക", + "It will activate the possibility of displaying the current Applio activity in Discord.": "ഇത് Discord-നായിരിക്കുന്ന നിലാവ് കാണാനുള്ള സാധ്യത സജീവമാക്കും.", + "Enable Applio integration with applio.org/models using flask": "flask ഉപയോഗിച്ച് applio.org/models ഇൻറഗ്രേഷൻ Applio സജീവമാക്കുക", + "It will activate the possibility of downloading models with a click from the website.": "ഇത് വെബ്സൈറ്റിൽ ഒരു ക്ലിക്ക് ചെയ്യുമ്പോൾ മോഡലുകൾ ഡൗൺലോഡ് ചെയ്യാനുള്ള സാധ്യത സജീവമാക്കും.", + "Enable fake GPU": "വഞ്ചി ജിപിയു ഇയക്കുക", + "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "പ്രശിക്ഷണം തറന്ന് നിലവിലുള്ളതിന് ജിപിയു ഇല്ലാതെ പ്രസ്താവിക്കുന്നതിനായി തിരഞ്ഞെടുക്കുന്നത് അനുവദിക്കാൻ 'ഫെയ്ക് ജിപിയു' ഓപ്ഷൻ സജ്ജമാക്കുക എന്ന് ക്രമീകരിക്കാൻ തിരിച്ചുവരുക. ", + "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "പ്രശിക്ഷണം തുടങ്ങുന്നു. എങ്കിലും, ദയവായി ശ്രദ്ധിക്കുക എന്നത് നിങ്ങളുടെ ഉപകരണത്തിൽ GPU സാധ്യതകൾ ഇല്ലാത്തതാണ്, അതിനാൽ പ്രശിക്ഷണം അനുവദനീയമല്ല. ഈ ഓപ്ഷൻ ഇപ്പോൾ പരീക്ഷണങ്ങളിക്കായാണ്. (ഈ ഓപ്ഷൻ അപ്ലിയോ പുനഃസജ്ജമാക്കും)", + "Theme": "തീം", + "Select the theme you want to use. (Requires restarting Applio)": "നിനക്ക് ഉപയോഗിക്കാൻ എന്താണെന്ന് നിങ്ങളുടെ തീം തിരഞ്ഞെടുക്കുക. (Applio പുനഃസജീവമാക്കാൻ ആവശ്യമാണ്)", + "Language": "ഭാഷ", + "Select the language you want to use. (Requires restarting Applio)": "നിങ്ങളുടെ ഉപയോഗത്തിന് നിങ്ങളുടെ ഭാഷ തിരഞ്ഞെടുക്കുക. (Applio പുനഃസജീവമാക്കാൻ ആവശ്യമാണ്)", + "Plugin Installer": "പ്ലഗിൻ ഇൻസ്റ്റാൾലർ", + "Drag your plugin.zip to install it": "അതിനായി നിനക്ക് നിന്നെത്തിയ .zip ഫയല് ഇൻസ്റ്റാൾ ചെയ്യാൻ ഇവിടെ ഡ്രാഗ് ചെയ്യുക", + "Version Checker": "വേര്ഷന് ചെക്കർ", + "Check which version of Applio is the latest to see if you need to update.": "നിനക്ക് അപ്ഡേറ്റുചെയ്യേണ്ടതോ എന്ന് അപ്ലിയോയുടെ ഏറ്റവും പുതിയ പതിപ്പായത് പരിശോധിക്കുക.", + "Check for updates": "അപ്ഡേറ്റുകൾ പരിശോധിക്കുക" +} diff --git a/assets/i18n/languages/mr_MR.json b/assets/i18n/languages/mr_MR.json new file mode 100644 index 0000000000000000000000000000000000000000..012b0b6dc50f281dc89ac2d90594beacc072d090 --- /dev/null +++ b/assets/i18n/languages/mr_MR.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "अल्टिमेट व्हॉइस क्लोनिंग टूल, अप्रतिम शक्ती, मॉड्युलरिटी आणि वापरकर्ता-अनुकूल अनुभवासाठी काळजीपूर्वक ऑप्टिमाइझ केलेले.", + "This section contains some extra utilities that often may be in experimental phases.": "या विभागात काही अतिरिक्त उपयोगिता आहेत ज्या बर्याचदा प्रायोगिक टप्प्यात असू शकतात.", + "Output Information": "आउटपुट माहिती", + "The output information will be displayed here.": "आउटपुट माहिती येथे प्रदर्शित केली जाईल.", + "Inference": "निष्कर्ष", + "Train": "आगगाडी", + "Extra": "अतिरिक्त", + "Merge Audios": "Merges Tऑडिओ", + "Processing": "प्रोसेसिंग", + "Audio Analyzer": "ऑडिओ विश्लेषक", + "Model Information": "मॉडेल माहिती", + "Plugins": "प्लगइन्स", + "Download": "डाउनलोड करा", + "Report a Bug": "बग ची नोंद करा", + "Settings": "सेटिंग्स", + "Preprocess": "पूर्वप्रक्रिया", + "Model Name": "मॉडेलचे नाव", + "Name of the new model.": "नवीन मॉडेलचे नाव .", + "Enter model name": "मॉडेल नाव प्रविष्ट करा", + "Dataset Path": "डेटासेट पथ", + "Path to the dataset folder.": "डेटासेट फोल्डरचा मार्ग.", + "Refresh Datasets": "डेटासेट रिफ्रेश करा", + "Dataset Creator": "डेटासेट निर्माता", + "Dataset Name": "डेटासेट चे नाव", + "Name of the new dataset.": "नवीन डेटासेटचे नाव.", + "Enter dataset name": "डेटासेट नाव प्रविष्ट करा", + "Upload Audio Dataset": "ऑडिओ डेटासेट अपलोड करा", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "ऑडिओ फाइल डेटासेटमध्ये यशस्वीरित्या जोडली गेली आहे. कृपया प्रीप्रोसेस बटणावर क्लिक करा.", + "Enter dataset path": "डेटासेट मार्ग प्रविष्ट करा", + "Sampling Rate": "नमुना दर", + "The sampling rate of the audio files.": "ऑडिओ फायलींचे नमुने घेण्याचा दर.", + "RVC Version": "आरव्हीसी आवृत्ती", + "The RVC version of the model.": "मॉडेलची आरव्हीसी आवृत्ती.", + "Preprocess Dataset": "Preprocess Dataset", + "Extract": "अर्क", + "Hop Length": "हॉप लांबी", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "प्रणालीला महत्त्वपूर्ण खेळपट्टी बदलाकडे संक्रमण होण्यासाठी लागणारा कालावधी दर्शवितो. लहान हॉप लांबीसाठी अनुमानासाठी अधिक वेळ लागतो परंतु खेळपट्टीची अचूकता जास्त असते.", + "Batch Size": "बॅच आकार", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "हे आपल्या जीपीयूच्या उपलब्ध व्हीआरएएमसह संरेखित करण्याचा सल्ला दिला जातो. 4 ची सेटिंग सुधारित अचूकता परंतु हळू प्रक्रिया प्रदान करते, तर 8 वेगवान आणि मानक परिणाम प्रदान करते.", + "Save Every Epoch": "प्रत्येक युग वाचवा", + "Determine at how many epochs the model will saved at.": "मॉडेल किती युगात जतन करेल हे ठरवा.", + "Total Epoch": "एकूण युग", + "Specifies the overall quantity of epochs for the model training process.": "मॉडेल प्रशिक्षण प्रक्रियेसाठी युगांची एकूण मात्रा निर्दिष्ट करते.", + "Pretrained": "पूर्वप्रशिक्षित", + "Save Only Latest": "फक्त लेटेस्ट सेव्ह करा", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "ही सेटिंग सक्षम केल्याने जी आणि डी फायली केवळ त्यांच्या अलीकडील आवृत्त्या वाचवतील आणि स्टोरेज स्पेस प्रभावीपणे जतन करतील.", + "Save Every Weights": "प्रत्येक वजन वाचवा", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "ही सेटिंग आपल्याला प्रत्येक युगाच्या शेवटी मॉडेलची वजने वाचविण्यास सक्षम करते.", + "Custom Pretrained": "सानुकूल पूर्वप्रशिक्षित", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "सानुकूल पूर्वप्रशिक्षित मॉडेल्स चा वापर केल्यास उत्कृष्ट परिणाम मिळू शकतात, कारण विशिष्ट वापर प्रकरणानुसार सर्वात योग्य पूर्वप्रशिक्षित मॉडेल्स ची निवड केल्यास कार्यक्षमता लक्षणीय वाढू शकते.", + "Upload Pretrained Model": "पूर्वप्रशिक्षित मॉडेल अपलोड करा", + "Refresh Custom Pretraineds": "रिफ्रेश सानुकूल पूर्वप्रशिक्षित", + "Pretrained Custom Settings": "पूर्वप्रशिक्षित सानुकूल सेटिंग्ज", + "The file you dropped is not a valid pretrained file. Please try again.": "आपण टाकलेली फाईल वैध पूर्वप्रशिक्षित फाइल नाही. कृपया पुन्हा प्रयत्न करा.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "ड्रॉपडाउन मेनूमध्ये पूर्वप्रशिक्षित फाइल पाहण्यासाठी रिफ्रेश बटणावर क्लिक करा.", + "Pretrained G Path": "सानुकूल पूर्वप्रशिक्षित जी", + "Pretrained D Path": "सानुकूल पूर्वप्रशिक्षित डी", + "GPU Settings": "जीपीयू सेटिंग्स", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "प्रगत जीपीयू सेटिंग्ज सेट करा, चांगल्या जीपीयू आर्किटेक्चर असलेल्या वापरकर्त्यांसाठी शिफारस केली आहे.", + "GPU Custom Settings": "जीपीयू सानुकूल सेटिंग्स", + "GPU Number": "जीपीयू नंबर", + "0 to ∞ separated by -": "0 ते ∞ वेगळे केले जातात -", + "GPU Information": "जीपीयू माहिती", + "Pitch Guidance": "खेळपट्टी मार्गदर्शन", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "खेळपट्टीमार्गदर्शनाचा वापर करून मूळ आवाजाच्या खेळपट्टीसह त्याच्या अंतर्मुखतेचे प्रतिबिंब उमटविणे शक्य होते. हे वैशिष्ट्य गायन आणि इतर दृश्यांसाठी विशेषतः मौल्यवान आहे जिथे मूळ सूर किंवा पिच पॅटर्न जतन करणे आवश्यक आहे.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "स्वत: चे प्रशिक्षण देताना पूर्वप्रशिक्षित मॉडेल्स वापरा. हा दृष्टिकोन प्रशिक्षण कालावधी कमी करतो आणि एकंदर गुणवत्ता वाढवतो.", + "Extract Features": "अर्क वैशिष्ट्ये", + "Start Training": "प्रशिक्षण सुरू करा", + "Generate Index": "इंडेक्स तयार करा", + "Voice Model": "व्हॉइस मॉडेल", + "Select the voice model to use for the conversion.": "रूपांतरणासाठी वापरण्यासाठी व्हॉइस मॉडेल निवडा.", + "Index File": "अनुक्रमणिका फाइल", + "Select the index file to use for the conversion.": "रूपांतरणासाठी वापरण्यासाठी अनुक्रमणिका फाइल निवडा.", + "Refresh": "टवटवी आणणे", + "Unload Voice": "आवाज अनलोड करा", + "Single": "अविवाहित", + "Upload Audio": "ऑडिओ अपलोड करा", + "Select Audio": "ऑडिओ निवडा", + "Select the audio to convert.": "रूपांतरित करण्यासाठी ऑडिओ निवडा.", + "Advanced Settings": "प्रगत सेटिंग्ज", + "Clear Outputs (Deletes all audios in assets/audios)": "स्पष्ट आउटपुट (मालमत्ता / ऑडिओमधील सर्व ऑडिओ हटवतात)", + "Custom Output Path": "सानुकूल आउटपुट पथ", + "Output Path": "आउटपुट पथ", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "तो मार्ग जिथे आउटपुट ऑडिओ जतन केला जाईल, मालमत्ता / ऑडिओ / output.wav मध्ये डिफॉल्टद्वारे", + "Split Audio": "स्प्लिट ऑडिओ", + "Split the audio into chunks for inference to obtain better results in some cases.": "काही प्रकरणांमध्ये चांगले परिणाम मिळविण्यासाठी अनुमानासाठी ऑडिओचे तुकडे करा.", + "Autotune": "Autotune", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "गायन रूपांतरणासाठी शिफारस केलेल्या आपल्या निष्कर्षांवर सॉफ्ट ऑटोट्यून लागू करा.", + "Clean Audio": "स्वच्छ ऑडिओ", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "ध्वनी शोध अल्गोरिदम वापरुन आपले ऑडिओ आउटपुट स्वच्छ करा, ऑडिओ बोलण्यासाठी शिफारस केली आहे.", + "Clean Strength": "स्वच्छ शक्ती", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "आपल्याला हव्या असलेल्या ऑडिओमध्ये क्लीन-अप पातळी सेट करा, आपण ते जितके वाढवाल तितके ते साफ होईल, परंतु ऑडिओ अधिक संकुचित होण्याची शक्यता आहे.", + "Pitch": "खेळपट्टी", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "ऑडिओची खेळपट्टी सेट करा, किंमत जितकी जास्त तितकी खेळपट्टी जास्त.", + "Filter Radius": "फिल्टर त्रिज्या", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "जर संख्या तीनपेक्षा जास्त किंवा समान असेल तर संकलित टोन परिणामांवर मध्यम फिल्टरिंग वापरल्यास श्वसन कमी होण्याची क्षमता असते.", + "Search Feature Ratio": "शोध वैशिष्ट्य गुणोत्तर", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "अनुक्रमणिका संचिकेने टाकलेला प्रभाव; उच्च मूल्य अधिक प्रभावाशी संबंधित आहे. तथापि, कमी मूल्यांची निवड केल्याने ऑडिओमध्ये असलेल्या कलाकृती कमी होण्यास मदत होते.", + "Volume Envelope": "Volume लिफाफा", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "आउटपुटच्या व्हॉल्यूम लिफाफ्यासह पर्याय किंवा मिश्रण करा. गुणोत्तर 1 च्या जितके जवळ असेल तितके आउटपुट लिफाफा वापरला जातो.", + "Protect Voiceless Consonants": "आवाजहीन व्यंजनांचे रक्षण करा", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "इलेक्ट्रो-ध्वनिक फाटणे आणि इतर कलाकृती टाळण्यासाठी विशिष्ट व्यंजने आणि श्वासोच्छवासाच्या आवाजांचे रक्षण करा. पॅरामीटरला त्याच्या 0.5 च्या जास्तीत जास्त मूल्यावर खेचणे व्यापक संरक्षण प्रदान करते. तथापि, हे मूल्य कमी केल्याने अनुक्रमणिका प्रभाव संभाव्यत: कमी करताना संरक्षणाची व्याप्ती कमी होऊ शकते.", + "Pitch extraction algorithm": "पिच निष्कर्षण अल्गोरिदम", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "ऑडिओ रूपांतरणासाठी वापरण्यासाठी पिच एक्सट्रॅक्शन अल्गोरिदम. डिफॉल्ट अल्गोरिदम आरएमव्हीपीई आहे, ज्याची शिफारस बहुतेक प्रकरणांमध्ये केली जाते.", + "Convert": "धर्मांतर करा", + "Export Audio": "निर्यात ऑडिओ", + "Batch": "तुकडी", + "Input Folder": "इनपुट फोल्डर", + "Select the folder containing the audios to convert.": "रूपांतरित करण्यासाठी ऑडिओ असलेले फोल्डर निवडा.", + "Enter input path": "इनपुट पथ प्रविष्ट करा", + "Output Folder": "आउटपुट फोल्डर", + "Select the folder where the output audios will be saved.": "फोल्डर निवडा जेथे आउटपुट ऑडिओ सेव्ह केले जातील.", + "Enter output path": "आउटपुट पथ प्रविष्ट करा", + "Get information about the audio": "ऑडिओबद्दल माहिती मिळवा", + "Information about the audio file": "ऑडिओ फाईलची माहिती", + "Waiting for information...": "माहितीच्या प्रतीक्षेत...", + "## Voice Blender": "## व्हॉइस ब्लेंडर", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "दोन व्हॉईस मॉडेल निवडा, आपली इच्छित मिश्रण टक्केवारी सेट करा आणि त्यांना पूर्णपणे नवीन आवाजात मिसळा.", + "Voice Blender": "व्हॉइस ब्लेंडर", + "Drag and drop your model here": "आपले मॉडेल येथे खेचून टाका आणि सोडा", + "You can also use a custom path.": "आपण सानुकूल मार्ग देखील वापरू शकता.", + "Blend Ratio": "मिश्रण गुणोत्तर", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "एका किंवा दुसर्या बाजूला स्थिती अधिक समायोजित केल्याने मॉडेल पहिल्या किंवा दुसर्या बाजूला अधिक समान होईल.", + "Fusion": "फ्यूजन", + "Path to Model": "मॉडेल चा मार्ग", + "Enter path to model": "मॉडेलचा मार्ग प्रविष्ट करा", + "Model information to be placed": "मॉडेल माहिती ठेवली जाईल", + "Inroduce the model information": "मॉडेल ची माहिती सादर करा", + "The information to be placed in the model (You can leave it blank or put anything).": "मॉडेलमध्ये ठेवली जाणारी माहिती (आपण ती रिकामी ठेवू शकता किंवा काहीही टाकू शकता).", + "View model information": "मॉडेल माहिती पहा", + "Introduce the model pth path": "मॉडेल पीटीएच पथ सादर करा", + "View": "पहा", + "Model extraction": "मॉडेल निष्कर्षण", + "Model conversion": "मॉडेल रूपांतरण", + "Pth file": "पीटीएच फाईल", + "Output of the pth file": "पीटीएच फाईलचे आउटपुट", + "# How to Report an Issue on GitHub": "# गिटहबवर एखाद्या समस्येची नोंद कशी करावी", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. आपण अनुभवत असलेल्या समस्येचे रेकॉर्डिंग सुरू करण्यासाठी खालील 'रेकॉर्ड स्क्रीन' बटणावर क्लिक करा.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "२. अंक रेकॉर्ड िंग पूर्ण झाल्यावर 'स्टॉप रेकॉर्डिंग' बटणावर क्लिक करा (तेच बटण, पण तुम्ही सक्रियपणे रेकॉर्डिंग करत आहात की नाही यावर अवलंबून लेबल बदलते).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [गिटहब इश्यूज] (https://github.com/IAHispano/Applio/issues) वर जा आणि 'न्यू इश्यू' बटणावर क्लिक करा.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. प्रदान केलेले इश्यू टेम्पलेट पूर्ण करा, आवश्यकतेनुसार तपशील समाविष्ट करण्याची खात्री करा आणि मागील चरणातून रेकॉर्ड केलेली फाइल अपलोड करण्यासाठी मालमत्ता विभागाचा वापर करा.", + "Record Screen": "रेकॉर्ड स्क्रीन", + "Record": "नोंदणे", + "Stop Recording": "रेकॉर्डिंग थांबवा", + "Introduce the model .pth path": "मॉडेल .पीटीएच पथ सादर करा", + "See Model Information": "मॉडेल माहिती पहा", + "## Download Model": "## मॉडेल डाऊनलोड करा", + "Model Link": "मॉडेल लिंक", + "Introduce the model link": "मॉडेल लिंक ची ओळख करून द्या", + "Download Model": "मॉडेल डाउनलोड करा", + "## Drop files": "## फाइल्स ड्रॉप करा", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "आपली .pth फाइल आणि .अनुक्रमणिका फाईल या जागेत खेचून घ्या. एकाला ओढून घ्या आणि मग दुसरं.", + "TTS Voices": "टीटीएस आवाज", + "Select the TTS voice to use for the conversion.": "रूपांतरणासाठी वापरण्यासाठी टीटीएस आवाज निवडा.", + "Text to Synthesize": "संश्लेषित करण्यासाठी मजकूर", + "Enter the text to synthesize.": "संश्लेषित करण्यासाठी मजकूर प्रविष्ट करा.", + "Or you can upload a .txt file": "किंवा तुम्ही .txt फाईल अपलोड करू शकता", + "Enter text to synthesize": "संश्लेषित करण्यासाठी मजकूर प्रविष्ट करा", + "Output Path for TTS Audio": "टीटीएस ऑडिओसाठी आउटपुट पथ", + "Output Path for RVC Audio": "आरव्हीसी ऑडिओसाठी आउटपुट पथ", + "Enable Applio integration with Discord presence": "डिस्कॉर्ड उपस्थितीसह अनुप्रयोग एकीकरण सक्षम करा", + "It will activate the possibility of displaying the current Applio activity in Discord.": "हे डिस्कॉर्डमध्ये सध्याची ऍप्लिओ क्रियाकलाप प्रदर्शित करण्याची शक्यता सक्रिय करेल.", + "Enable Applio integration with applio.org/models using flask": "फ्लास्क वापरुन applio.org/models अनुप्रयोगा एकीकरण सक्षम करा", + "It will activate the possibility of downloading models with a click from the website.": "हे वेबसाइटवरून एका क्लिकवर मॉडेल्स डाउनलोड करण्याची शक्यता सक्रिय करेल.", + "Theme": "थीम :", + "Select the theme you want to use. (Requires restarting Applio)": "आपण वापरू इच्छित थीम निवडा. (अनुप्रयोग पुन्हा सुरू करणे आवश्यक आहे)", + "Language": "भाषा", + "Select the language you want to use. (Requires restarting Applio)": "आपल्याला जी भाषा वापरायची आहे ती निवडा. (अनुप्रयोग पुन्हा सुरू करणे आवश्यक आहे)", + "Plugin Installer": "Plugin Installer", + "Drag your plugin.zip to install it": "ते स्थापित करण्यासाठी आपले plugin.zip खेचून घ्या", + "Version Checker": "Version Checker", + "Check which version of Applio is the latest to see if you need to update.": "आपल्याला अद्ययावत करण्याची आवश्यकता आहे की नाही हे पाहण्यासाठी अ ॅप्लिओची कोणती आवृत्ती नवीनतम आहे ते पहा.", + "Check for updates": "अपडेट्ससाठी पहा" +} \ No newline at end of file diff --git a/assets/i18n/languages/ms_MS.json b/assets/i18n/languages/ms_MS.json new file mode 100644 index 0000000000000000000000000000000000000000..c122b395a424174b36dd2efb9a88db4a26c522bd --- /dev/null +++ b/assets/i18n/languages/ms_MS.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "Alat pengklonan suara muktamad, dioptimumkan dengan teliti untuk kuasa yang tiada tandingan, modulariti, dan pengalaman mesra pengguna.", + "This section contains some extra utilities that often may be in experimental phases.": "Bahagian ini mengandungi beberapa utiliti tambahan yang selalunya berada dalam fasa percubaan.", + "Output Information": "Maklumat Output", + "The output information will be displayed here.": "Maklumat output akan dipaparkan di sini.", + "Inference": "Inferens", + "Train": "Kereta api", + "Extra": "Tambahan", + "Merge Audios": "Mencantumkan Audio", + "Processing": "Pemprosesan", + "Audio Analyzer": "Penganalisis Audio", + "Model Information": "Maklumat Model", + "Plugins": "Plugin", + "Download": "Muat turun", + "Report a Bug": "Laporkan pepijat", + "Settings": "Seting", + "Preprocess": "Praproses", + "Model Name": "Nama Model", + "Name of the new model.": "Nama model baharu.", + "Enter model name": "Masukkan nama model", + "Dataset Path": "Laluan Set Data", + "Path to the dataset folder.": "Laluan ke folder set data.", + "Refresh Datasets": "Menyegar semula Set Data", + "Dataset Creator": "Pencipta Set Data", + "Dataset Name": "Nama Set Data", + "Name of the new dataset.": "Nama set data baru.", + "Enter dataset name": "Masukkan nama set data", + "Upload Audio Dataset": "Muat naik Set Data Audio", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Fail audio telah berjaya ditambahkan pada set data. Sila klik butang praproses.", + "Enter dataset path": "Memasukkan laluan set data", + "Sampling Rate": "Kadar Persampelan", + "The sampling rate of the audio files.": "Kadar pensampelan fail audio.", + "RVC Version": "Versi RVC", + "The RVC version of the model.": "Versi RVC model.", + "Preprocess Dataset": "Set Data Praproses", + "Extract": "Cabutan", + "Hop Length": "Panjang Hop", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Menunjukkan tempoh yang diperlukan untuk sistem beralih kepada perubahan padang yang ketara. Panjang hop yang lebih kecil memerlukan lebih banyak masa untuk kesimpulan tetapi cenderung menghasilkan ketepatan padang yang lebih tinggi.", + "Batch Size": "Saiz kelompok", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Anda dinasihatkan untuk menyelaraskannya dengan VRAM GPU anda yang tersedia. Tetapan 4 menawarkan ketepatan yang lebih baik tetapi pemprosesan yang lebih perlahan, manakala 8 memberikan hasil yang lebih cepat dan standard.", + "Save Every Epoch": "Simpan Setiap Zaman", + "Determine at how many epochs the model will saved at.": "Tentukan berapa zaman model akan disimpan.", + "Total Epoch": "Jumlah Zaman", + "Specifies the overall quantity of epochs for the model training process.": "Menentukan kuantiti keseluruhan zaman untuk proses latihan model.", + "Pretrained": "Dipralatih", + "Save Only Latest": "Simpan Terkini Sahaja", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Mendayakan tetapan ini akan menyebabkan fail G dan D menyimpan hanya versi terbaru mereka, menjimatkan ruang storan dengan berkesan.", + "Save Every Weights": "Jimat Setiap Berat", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Tetapan ini membolehkan anda menjimatkan berat model pada akhir setiap zaman.", + "Custom Pretrained": "Pralatih Tersuai", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Menggunakan model pra-latihan tersuai boleh membawa kepada hasil yang unggul, kerana memilih model pra-latihan yang paling sesuai yang disesuaikan dengan kes penggunaan tertentu dapat meningkatkan prestasi dengan ketara.", + "Upload Pretrained Model": "Muat naik Model Pralatih", + "Refresh Custom Pretraineds": "Menyegar Semula Pralatihan Tersuai", + "Pretrained Custom Settings": "Seting Tersuai Pralatih", + "The file you dropped is not a valid pretrained file. Please try again.": "Fail yang anda gugurkan bukan fail pralatih yang sah. Sila cuba lagi.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "Klik butang segar semula untuk melihat fail pralatih dalam menu juntai bawah.", + "Pretrained G Path": "Custom Pretrained G", + "Pretrained D Path": "Custom Pretrained D", + "GPU Settings": "Seting GPU", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Menetapkan tetapan GPU lanjutan, disyorkan untuk pengguna dengan seni bina GPU yang lebih baik.", + "GPU Custom Settings": "Seting Tersuai GPU", + "GPU Number": "Nombor GPU", + "0 to ∞ separated by -": "0 hingga ∞ dipisahkan oleh -", + "GPU Information": "Maklumat GPU", + "Pitch Guidance": "Panduan Padang", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Dengan menggunakan panduan padang, ia boleh dilaksanakan untuk mencerminkan intonasi suara asal, termasuk padangnya. Ciri ini amat berharga untuk nyanyian dan senario lain di mana mengekalkan corak melodi atau padang asal adalah penting.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Gunakan model yang telah dilatih semasa melatih anda sendiri. Pendekatan ini mengurangkan tempoh latihan dan meningkatkan kualiti keseluruhan.", + "Extract Features": "Ciri Ekstrak", + "Start Training": "Mulakan Latihan", + "Generate Index": "Menjana Indeks", + "Voice Model": "Model Suara", + "Select the voice model to use for the conversion.": "Pilih model suara untuk digunakan untuk penukaran.", + "Index File": "Fail Indeks", + "Select the index file to use for the conversion.": "Pilih fail indeks untuk digunakan untuk penukaran.", + "Refresh": "Refresh", + "Unload Voice": "Memunggah Suara", + "Single": "Tunggal", + "Upload Audio": "Muat naik Audio", + "Select Audio": "Pilih Audio", + "Select the audio to convert.": "Pilih audio untuk ditukar.", + "Advanced Settings": "Seting Lanjutan", + "Clear Outputs (Deletes all audios in assets/audios)": "Kosongkan Output (Memadamkan semua audio dalam aset/audio)", + "Custom Output Path": "Laluan Output Tersuai", + "Output Path": "Laluan Output", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "Laluan di mana audio output akan disimpan, secara lalai dalam aset/audio/output.wav", + "Split Audio": "Audio Pisah", + "Split the audio into chunks for inference to obtain better results in some cases.": "Pisahkan audio kepada ketulan untuk kesimpulan untuk mendapatkan hasil yang lebih baik dalam beberapa kes.", + "Autotune": "Autotune", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "Gunakan autotune lembut pada kesimpulan anda, disyorkan untuk penukaran nyanyian.", + "Clean Audio": "Audio Bersih", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Bersihkan output audio anda menggunakan algoritma pengesanan bunyi, disyorkan untuk bercakap audio.", + "Clean Strength": "Kekuatan Bersih", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Tetapkan tahap pembersihan ke audio yang anda mahukan, semakin banyak anda meningkatkannya semakin banyak ia akan membersihkan, tetapi ada kemungkinan audio akan lebih dimampatkan.", + "Pitch": "Pitch", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "Tetapkan padang audio, semakin tinggi nilai, semakin tinggi padang.", + "Filter Radius": "Jejari Penapis", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Sekiranya bilangannya lebih besar daripada atau sama dengan tiga, menggunakan penapisan median pada hasil nada yang dikumpulkan berpotensi untuk mengurangkan pernafasan.", + "Search Feature Ratio": "Nisbah Ciri Carian", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Pengaruh yang dikenakan oleh fail indeks; Nilai yang lebih tinggi sepadan dengan pengaruh yang lebih besar. Walau bagaimanapun, memilih nilai yang lebih rendah boleh membantu mengurangkan artifak yang terdapat dalam audio.", + "Volume Envelope": "Sampul Kelantangan", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Gantikan atau gabungkan dengan sampul kelantangan output. Semakin dekat nisbahnya kepada 1, semakin banyak sampul output digunakan.", + "Protect Voiceless Consonants": "Lindungi Konsonan Tanpa Suara", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Lindungi konsonan yang berbeza dan bunyi pernafasan untuk mengelakkan koyakan elektro-akustik dan artifak lain. Menarik parameter ke nilai maksimum 0.5 menawarkan perlindungan komprehensif. Walau bagaimanapun, mengurangkan nilai ini mungkin mengurangkan tahap perlindungan sambil berpotensi mengurangkan kesan pengindeksan.", + "Pitch extraction algorithm": "Algoritma pengekstrakan padang", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritma pengekstrakan padang untuk digunakan untuk penukaran audio. Algoritma lalai ialah rmvpe, yang disyorkan untuk kebanyakan kes.", + "Convert": "Menukar", + "Export Audio": "Eksport Audio", + "Batch": "Kelompok", + "Input Folder": "Input Folder", + "Select the folder containing the audios to convert.": "Pilih folder yang mengandungi audio untuk ditukar.", + "Enter input path": "Masukkan laluan input", + "Output Folder": "Output Folder", + "Select the folder where the output audios will be saved.": "Pilih folder di mana audio output akan disimpan.", + "Enter output path": "Masukkan laluan output", + "Get information about the audio": "Mendapatkan maklumat tentang audio", + "Information about the audio file": "Maklumat mengenai fail audio", + "Waiting for information...": "Menunggu maklumat...", + "## Voice Blender": "## Pengisar Suara", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Pilih dua model suara, tetapkan peratusan campuran yang anda inginkan, dan gabungkannya ke dalam suara yang sama sekali baru.", + "Voice Blender": "Pengisar Suara", + "Drag and drop your model here": "Seret dan lepas model anda di sini", + "You can also use a custom path.": "Anda juga boleh menggunakan laluan tersuai.", + "Blend Ratio": "Nisbah Campuran", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Melaraskan kedudukan lebih ke arah satu sisi atau yang lain akan menjadikan model lebih serupa dengan yang pertama atau kedua.", + "Fusion": "Gabungan", + "Path to Model": "Laluan ke Model", + "Enter path to model": "Masukkan laluan ke model", + "Model information to be placed": "Maklumat model yang akan diletakkan", + "Inroduce the model information": "Menghasut maklumat model", + "The information to be placed in the model (You can leave it blank or put anything).": "Maklumat yang akan diletakkan dalam model (Anda boleh membiarkannya kosong atau meletakkan apa-apa).", + "View model information": "Lihat maklumat model", + "Introduce the model pth path": "Perkenalkan laluan pth model", + "View": "Lihat", + "Model extraction": "Pengekstrakan model", + "Model conversion": "Penukaran model", + "Pth file": "Pth fail", + "Output of the pth file": "Output fail pth", + "# How to Report an Issue on GitHub": "# Cara Melaporkan Isu di GitHub", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Klik pada butang 'Skrin Rekod' di bawah untuk mula merakam isu yang anda alami.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Setelah anda selesai merakam isu ini, klik pada butang 'Hentikan Rakaman' (butang yang sama, tetapi label berubah bergantung pada sama ada anda merakam secara aktif atau tidak).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Pergi ke [Isu GitHub](https://github.com/IAHispano/Applio/issues) dan klik pada butang 'Isu Baru'.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Lengkapkan templat isu yang disediakan, pastikan untuk memasukkan butiran mengikut keperluan, dan gunakan bahagian aset untuk memuat naik fail yang dirakam dari langkah sebelumnya.", + "Record Screen": "Skrin Rakam", + "Record": "Rekod", + "Stop Recording": "Hentikan Rakaman", + "Introduce the model .pth path": "Memperkenalkan model laluan .pth", + "See Model Information": "Lihat Maklumat Model", + "## Download Model": "## Muat Turun Model", + "Model Link": "Pautan Model", + "Introduce the model link": "Memperkenalkan pautan model", + "Download Model": "Model Muat Turun", + "## Drop files": "## Jatuhkan fail", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "Seret fail .pth dan fail .index anda ke dalam ruang ini. Seret satu dan kemudian yang lain.", + "TTS Voices": "Suara TTS", + "Select the TTS voice to use for the conversion.": "Pilih suara TTS untuk digunakan bagi penukaran.", + "Text to Synthesize": "Teks untuk Mensintesis", + "Enter the text to synthesize.": "Masukkan teks untuk mensintesiskan.", + "Or you can upload a .txt file": "Atau anda boleh memuat naik fail .txt", + "Enter text to synthesize": "Masukkan teks untuk mensintesis saiz", + "Output Path for TTS Audio": "Laluan output untuk TTS Audio", + "Output Path for RVC Audio": "Laluan Output untuk Audio RVC", + "Enable Applio integration with Discord presence": "Dayakan integrasi Applio dengan kehadiran Discord", + "It will activate the possibility of displaying the current Applio activity in Discord.": "Ia akan mengaktifkan kemungkinan memaparkan aktiviti Applio semasa di Discord.", + "Enable Applio integration with applio.org/models using flask": "Dayakan integrasi Applio dengan applio.org/models menggunakan kelalang", + "It will activate the possibility of downloading models with a click from the website.": "Ia akan mengaktifkan kemungkinan memuat turun model dengan satu klik dari laman web.", + "Theme": "Tema", + "Select the theme you want to use. (Requires restarting Applio)": "Pilih tema yang anda mahu gunakan. (Memerlukan memulakan semula Applio)", + "Language": "Bahasa", + "Select the language you want to use. (Requires restarting Applio)": "Pilih bahasa yang anda mahu gunakan. (Memerlukan memulakan semula Applio)", + "Plugin Installer": "Pemasang Plugin", + "Drag your plugin.zip to install it": "Seret plugin.zip anda untuk memasangnya", + "Version Checker": "Penyemak Versi", + "Check which version of Applio is the latest to see if you need to update.": "Semak versi Applio yang terkini untuk melihat sama ada anda perlu mengemas kini.", + "Check for updates": "Semak kemas kini" +} \ No newline at end of file diff --git a/assets/i18n/languages/nl_NL.json b/assets/i18n/languages/nl_NL.json new file mode 100644 index 0000000000000000000000000000000000000000..1fd29e132401f6611ffc02d4f44d45d4d9307a39 --- /dev/null +++ b/assets/i18n/languages/nl_NL.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "Ultieme tool voor het klonen van stemmen, zorgvuldig geoptimaliseerd voor ongeëvenaarde kracht, modulariteit en gebruiksvriendelijke ervaring.", + "This section contains some extra utilities that often may be in experimental phases.": "Deze sectie bevat enkele extra hulpprogramma's die zich vaak in experimentele fasen bevinden.", + "Output Information": "Output Informatie", + "The output information will be displayed here.": "De uitvoerinformatie wordt hier weergegeven.", + "Inference": "Conclusie", + "Train": "Trein", + "Extra": "Extra", + "Merge Audios": "Audio samenvoegen", + "Processing": "Verwerking", + "Audio Analyzer": "Audio Analyzer", + "Model Information": "Modelinformatie", + "Plugins": "Insteekplaatsen", + "Download": "Downloaden", + "Report a Bug": "Een bug melden", + "Settings": "Instellingen", + "Preprocess": "Voorbewerking", + "Model Name": "Modelnaam", + "Name of the new model.": "Naam van het nieuwe model.", + "Enter model name": "Voer de modelnaam in", + "Dataset Path": "Pad naar gegevensset", + "Path to the dataset folder.": "Pad naar de map met gegevenssets.", + "Refresh Datasets": "Gegevenssets vernieuwen", + "Dataset Creator": "Maker van gegevenssets", + "Dataset Name": "Naam van gegevensset", + "Name of the new dataset.": "Naam van de nieuwe dataset.", + "Enter dataset name": "Voer de naam van de gegevensset in", + "Upload Audio Dataset": "Audiogegevensset uploaden", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Het audiobestand is toegevoegd aan de dataset. Klik op de knop voorbewerking.", + "Enter dataset path": "Pad naar gegevensset invoeren", + "Sampling Rate": "Bemonsteringsfrequentie", + "The sampling rate of the audio files.": "De bemonsteringsfrequentie van de audiobestanden.", + "RVC Version": "RVC-versie", + "The RVC version of the model.": "De RVC-versie van het model.", + "Preprocess Dataset": "Gegevensset voor het proces", + "Extract": "Extract", + "Hop Length": "Hop Lengte", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Geeft de tijd aan die nodig is om het systeem over te zetten op een significante toonhoogteverandering. Kleinere hoplengtes hebben meer tijd nodig om conclusies te trekken, maar hebben de neiging om een hogere toonhoogtenauwkeurigheid op te leveren.", + "Batch Size": "Batchgrootte", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Het is aan te raden om deze af te stemmen op het beschikbare VRAM van je GPU. Een instelling van 4 biedt verbeterde nauwkeurigheid maar langzamere verwerking, terwijl 8 snellere en standaardresultaten oplevert.", + "Save Every Epoch": "Red elk tijdperk", + "Determine at how many epochs the model will saved at.": "Bepaal op hoeveel epochs het model wordt opgeslagen.", + "Total Epoch": "Totale tijdvak", + "Specifies the overall quantity of epochs for the model training process.": "Hiermee geeft u het totale aantal epochs op voor het modeltrainingsproces.", + "Pretrained": "Voorgetraind", + "Save Only Latest": "Alleen de nieuwste opslaan", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Als u deze instelling inschakelt, worden de G- en D-bestanden alleen hun meest recente versies opgeslagen, waardoor er effectief opslagruimte wordt bespaard.", + "Save Every Weights": "Sla alle gewichten op", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Met deze instelling kunt u de gewichten van het model aan het einde van elk tijdperk opslaan.", + "Custom Pretrained": "Aangepaste voorgetrainde", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Het gebruik van op maat gemaakte voorgetrainde modellen kan tot superieure resultaten leiden, aangezien het selecteren van de meest geschikte vooraf getrainde modellen die zijn afgestemd op de specifieke gebruikssituatie de prestaties aanzienlijk kan verbeteren.", + "Upload Pretrained Model": "Vooraf getraind model uploaden", + "Refresh Custom Pretraineds": "Aangepaste vooraf getrainde bestanden vernieuwen", + "Pretrained Custom Settings": "Vooraf getrainde aangepaste instellingen", + "The file you dropped is not a valid pretrained file. Please try again.": "Het bestand dat u hebt neergezet, is geen geldig vooraf getraind bestand. Probeer het opnieuw.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "Klik op de knop Vernieuwen om het vooraf getrainde bestand in het vervolgkeuzemenu te zien.", + "Pretrained G Path": "Aangepaste voorgetrainde G", + "Pretrained D Path": "Aangepaste voorgetrainde D", + "GPU Settings": "GPU-instellingen", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Hiermee stelt u geavanceerde GPU-instellingen in, aanbevolen voor gebruikers met een betere GPU-architectuur.", + "GPU Custom Settings": "Aangepaste GPU-instellingen", + "GPU Number": "GPU-nummer", + "0 to ∞ separated by -": "0 tot ∞ gescheiden door -", + "GPU Information": "GPU-informatie", + "Pitch Guidance": "Begeleiding bij het veld", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Door gebruik te maken van toonhoogtebegeleiding wordt het mogelijk om de intonatie van de originele stem, inclusief de toonhoogte, te spiegelen. Deze functie is met name waardevol voor zang en andere scenario's waarbij het behoud van de originele melodie of het toonhoogtepatroon essentieel is.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Gebruik vooraf getrainde modellen bij het trainen van uw eigen modellen. Deze aanpak verkort de trainingsduur en verbetert de algehele kwaliteit.", + "Extract Features": "Extraheer functies", + "Start Training": "Begin met trainen", + "Generate Index": "Index genereren", + "Voice Model": "Stem Model", + "Select the voice model to use for the conversion.": "Selecteer het spraakmodel dat u voor de conversie wilt gebruiken.", + "Index File": "Index-bestand", + "Select the index file to use for the conversion.": "Selecteer het indexbestand dat u voor de conversie wilt gebruiken.", + "Refresh": "Opfrissen", + "Unload Voice": "Stem lossen", + "Single": "Ongetrouwd", + "Upload Audio": "Audio uploaden", + "Select Audio": "Selecteer Audio", + "Select the audio to convert.": "Selecteer de audio die u wilt converteren.", + "Advanced Settings": "Geavanceerde instellingen", + "Clear Outputs (Deletes all audios in assets/audios)": "Uitvoer wissen (verwijdert alle audio in assets/audio)", + "Custom Output Path": "Aangepast uitvoerpad", + "Output Path": "Uitgang Pad", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "Het pad waar de uitvoeraudio wordt opgeslagen, standaard in assets/audios/output.wav", + "Split Audio": "Audio splitsen", + "Split the audio into chunks for inference to obtain better results in some cases.": "Splits de audio op in stukken voor gevolgtrekking om in sommige gevallen betere resultaten te verkrijgen.", + "Autotune": "Automatisch afstemmen", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "Pas een zachte autotune toe op je inferenties, aanbevolen voor zangconversies.", + "Clean Audio": "Schone audio", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Reinig uw audio-uitvoer met behulp van ruisdetectie-algoritmen, aanbevolen voor gesproken audio.", + "Clean Strength": "Schone kracht", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Stel het opschoningsniveau in op de gewenste audio, hoe meer u het verhoogt, hoe meer het zal opschonen, maar het is mogelijk dat de audio meer gecomprimeerd zal zijn.", + "Pitch": "Toonhoogte", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "Stel de toonhoogte van de audio in, hoe hoger de waarde, hoe hoger de toonhoogte.", + "Filter Radius": "Filter Straal", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Als het getal groter is dan of gelijk is aan drie, kan het gebruik van mediane filtering op de verzamelde toonresultaten de ademhaling verminderen.", + "Search Feature Ratio": "Verhouding zoekfunctie", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Invloed uitgeoefend door het indexbestand; Een hogere waarde komt overeen met een grotere invloed. Als u echter voor lagere waarden kiest, kunt u de artefacten in de audio verminderen.", + "Volume Envelope": "Volume Envelop", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Vervang of meng met de volume-envelop van de uitvoer. Hoe dichter de verhouding bij 1 ligt, hoe meer de uitvoerenveloppe wordt gebruikt.", + "Protect Voiceless Consonants": "Bescherm stemloze medeklinkers", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Bescherm verschillende medeklinkers en ademhalingsgeluiden om elektro-akoestische scheuren en andere artefacten te voorkomen. Door de parameter naar de maximale waarde van 0,5 te trekken, wordt uitgebreide bescherming geboden. Het verlagen van deze waarde kan echter de mate van bescherming verminderen en mogelijk het indexeringseffect beperken.", + "Pitch extraction algorithm": "Algoritme voor het extraheren van toonhoogte", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Pitch-extractie-algoritme om te gebruiken voor de audioconversie. Het standaardalgoritme is rmvpe, wat in de meeste gevallen wordt aanbevolen.", + "Convert": "Omzetten", + "Export Audio": "Audio exporteren", + "Batch": "Batch", + "Input Folder": "Invoermap", + "Select the folder containing the audios to convert.": "Selecteer de map met de audio die u wilt converteren.", + "Enter input path": "Voer het invoerpad in", + "Output Folder": "Uitvoer map", + "Select the folder where the output audios will be saved.": "Selecteer de map waar de uitvoeraudio wordt opgeslagen.", + "Enter output path": "Voer het uitvoerpad in", + "Get information about the audio": "Informatie over de audio opvragen", + "Information about the audio file": "Informatie over het audiobestand", + "Waiting for information...": "Wachten op informatie...", + "## Voice Blender": "## Stem Blender", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Selecteer twee stemmodellen, stel het gewenste mengpercentage in en meng ze tot een geheel nieuwe stem.", + "Voice Blender": "Stem Blender", + "Drag and drop your model here": "Sleep uw model hierheen", + "You can also use a custom path.": "U kunt ook een aangepast pad gebruiken.", + "Blend Ratio": "Mengverhouding", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Door de positie meer naar de ene of de andere kant aan te passen, lijkt het model meer op het eerste of tweede.", + "Fusion": "Samensmelting", + "Path to Model": "Pad naar model", + "Enter path to model": "Pad naar model invoeren", + "Model information to be placed": "Te plaatsen modelinformatie", + "Inroduce the model information": "Produceer de modelinformatie", + "The information to be placed in the model (You can leave it blank or put anything).": "De informatie die in het model moet worden geplaatst (u kunt het leeg laten of alles plaatsen).", + "View model information": "Modelinformatie weergeven", + "Introduce the model pth path": "Introduceer het model pth pad", + "View": "Bekijken", + "Model extraction": "Extractie van modellen", + "Model conversion": "Model conversie", + "Pth file": "Pth-bestand", + "Output of the pth file": "Uitvoer van het pth-bestand", + "# How to Report an Issue on GitHub": "# Een probleem melden op GitHub", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Klik op de knop 'Opnamescherm' hieronder om te beginnen met het opnemen van het probleem dat u ondervindt.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Als u klaar bent met het opnemen van het probleem, klikt u op de knop 'Opname stoppen' (dezelfde knop, maar het label verandert afhankelijk van of u actief aan het opnemen bent of niet).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Ga naar [GitHub Issues](https://github.com/IAHispano/Applio/issues) en klik op de knop 'New Issue'.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Vul het meegeleverde uitgiftesjabloon in, zorg ervoor dat u indien nodig details opneemt en gebruik het gedeelte Activa om het opgenomen bestand uit de vorige stap te uploaden.", + "Record Screen": "Scherm opnemen", + "Record": "Record", + "Stop Recording": "Opname stoppen", + "Introduce the model .pth path": "Introduceer het model .pth-pad", + "See Model Information": "Modelinformatie bekijken", + "## Download Model": "## Model downloaden", + "Model Link": "Koppeling naar het model", + "Introduce the model link": "Introduceer de modellink", + "Download Model": "Model downloaden", + "## Drop files": "## Bestanden neerzetten", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "Sleep uw .pth-bestand en .index-bestand naar deze ruimte. Sleep de ene en dan de andere.", + "TTS Voices": "TTS-stemmen", + "Select the TTS voice to use for the conversion.": "Selecteer de TTS-stem die u voor de conversie wilt gebruiken.", + "Text to Synthesize": "Tekst om te synthetiseren", + "Enter the text to synthesize.": "Voer de tekst in die u wilt synthetiseren.", + "Or you can upload a .txt file": "Of u kunt een .txt bestand uploaden", + "Enter text to synthesize": "Voer tekst in om te synthetiseren", + "Output Path for TTS Audio": "Uitvoerpad voor TTS-audio", + "Output Path for RVC Audio": "Uitvoerpad voor RVC-audio", + "Enable Applio integration with Discord presence": "Applio-integratie inschakelen met Discord-aanwezigheid", + "It will activate the possibility of displaying the current Applio activity in Discord.": "Het activeert de mogelijkheid om de huidige Applio-activiteit in Discord weer te geven.", + "Enable Applio integration with applio.org/models using flask": "Applio-integratie met applio.org/models inschakelen met behulp van kolf", + "It will activate the possibility of downloading models with a click from the website.": "Het activeert de mogelijkheid om modellen te downloaden met een klik van de website.", + "Theme": "Thema", + "Select the theme you want to use. (Requires restarting Applio)": "Selecteer het thema dat je wilt gebruiken. (Vereist het opnieuw opstarten van Applio)", + "Language": "Taal", + "Select the language you want to use. (Requires restarting Applio)": "Selecteer de taal die u wilt gebruiken. (Vereist het opnieuw opstarten van Applio)", + "Plugin Installer": "Plug-in-installatieprogramma", + "Drag your plugin.zip to install it": "Sleep uw plugin.zip om deze te installeren", + "Version Checker": "Versie Checker", + "Check which version of Applio is the latest to see if you need to update.": "Controleer welke versie van Applio de nieuwste is om te zien of u moet updaten.", + "Check for updates": "Controleren op updates" +} \ No newline at end of file diff --git a/assets/i18n/languages/pa_PA.json b/assets/i18n/languages/pa_PA.json new file mode 100644 index 0000000000000000000000000000000000000000..249f3ea4e876288e83775ae5a43eb379c3a79899 --- /dev/null +++ b/assets/i18n/languages/pa_PA.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "ਅੰਤਮ ਵੌਇਸ ਕਲੋਨਿੰਗ ਟੂਲ, ਬੇਮਿਸਾਲ ਸ਼ਕਤੀ, ਮਾਡਿਊਲਰਿਟੀ, ਅਤੇ ਉਪਭੋਗਤਾ-ਅਨੁਕੂਲ ਅਨੁਭਵ ਲਈ ਧਿਆਨ ਨਾਲ ਅਨੁਕੂਲ ਬਣਾਇਆ ਗਿਆ ਹੈ.", + "This section contains some extra utilities that often may be in experimental phases.": "ਇਸ ਭਾਗ ਵਿੱਚ ਕੁਝ ਵਾਧੂ ਉਪਯੋਗਤਾਵਾਂ ਹਨ ਜੋ ਅਕਸਰ ਪ੍ਰਯੋਗਾਤਮਕ ਪੜਾਵਾਂ ਵਿੱਚ ਹੋ ਸਕਦੀਆਂ ਹਨ।", + "Output Information": "ਆਊਟਪੁੱਟ ਜਾਣਕਾਰੀ", + "The output information will be displayed here.": "ਆਉਟਪੁੱਟ ਜਾਣਕਾਰੀ ਇੱਥੇ ਪ੍ਰਦਰਸ਼ਿਤ ਕੀਤੀ ਜਾਵੇਗੀ।", + "Inference": "ਅਨੁਮਾਨ", + "Train": "ਟ੍ਰੇਨ", + "Extra": "ਵਾਧੂ", + "Merge Audios": "ਆਡੀਓ ਨੂੰ ਮਿਲਾਓ", + "Processing": "ਪ੍ਰੋਸੈਸਿੰਗ", + "Audio Analyzer": "ਆਡੀਓ ਵਿਸ਼ਲੇਸ਼ਕ", + "Model Information": "ਮਾਡਲ ਜਾਣਕਾਰੀ", + "Plugins": "ਪਲੱਗਇਨ", + "Download": "ਡਾਊਨਲੋਡ ਕਰੋ", + "Report a Bug": "ਇੱਕ ਬਗ ਦੀ ਰਿਪੋਰਟ ਕਰੋ", + "Settings": "ਸੈਟਿੰਗਾਂ", + "Preprocess": "ਪ੍ਰੀਪ੍ਰੋਸੈਸ", + "Model Name": "ਮਾਡਲ ਦਾ ਨਾਮ", + "Name of the new model.": "ਨਵੇਂ ਮਾਡਲ ਦਾ ਨਾਮ।", + "Enter model name": "ਮਾਡਲ ਨਾਮ ਦਾਖਲ ਕਰੋ", + "Dataset Path": "ਡਾਟਾਸੈਟ ਪਾਥ", + "Path to the dataset folder.": "ਡੇਟਾਸੈਟ ਫੋਲਡਰ ਲਈ ਰਾਹ।", + "Refresh Datasets": "ਡੇਟਾਸੈਟਾਂ ਨੂੰ ਤਾਜ਼ਾ ਕਰੋ", + "Dataset Creator": "ਡਾਟਾਸੈਟ ਨਿਰਮਾਤਾ", + "Dataset Name": "ਡੇਟਾਸੈਟ ਨਾਮ", + "Name of the new dataset.": "ਨਵੇਂ ਡੇਟਾਸੈਟ ਦਾ ਨਾਮ।", + "Enter dataset name": "ਡੇਟਾਸੈਟ ਦਾ ਨਾਮ ਦਾਖਲ ਕਰੋ", + "Upload Audio Dataset": "ਆਡੀਓ ਡੇਟਾਸੈਟ ਅੱਪਲੋਡ ਕਰੋ", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "ਆਡੀਓ ਫਾਇਲ ਨੂੰ ਡੇਟਾਸੈਟ ਵਿੱਚ ਸਫਲਤਾਪੂਰਵਕ ਜੋੜਿਆ ਗਿਆ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਪ੍ਰੀਪ੍ਰੋਸੈਸ ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ।", + "Enter dataset path": "ਡਾਟਾਸੈਟ ਪਾਥ ਦਾਖਲ ਕਰੋ", + "Sampling Rate": "ਨਮੂਨੇ ਲੈਣ ਦੀ ਦਰ", + "The sampling rate of the audio files.": "ਆਡੀਓ ਫਾਇਲਾਂ ਦੀ ਨਮੂਨੇ ਲੈਣ ਦੀ ਦਰ।", + "RVC Version": "RVC ਸੰਸਕਰਣ", + "The RVC version of the model.": "ਮਾਡਲ ਦਾ ਆਰਵੀਸੀ ਸੰਸਕਰਣ.", + "Preprocess Dataset": "ਪ੍ਰੀਪ੍ਰੋਸੈਸ ਡੇਟਾਸੈਟ", + "Extract": "ਐਕਸਟਰੈਕਟ", + "Hop Length": "ਹੌਪ ਲੰਬਾਈ", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "ਸਿਸਟਮ ਨੂੰ ਮਹੱਤਵਪੂਰਣ ਪਿਚ ਤਬਦੀਲੀ ਵਿੱਚ ਤਬਦੀਲ ਹੋਣ ਵਿੱਚ ਲੱਗਣ ਵਾਲੇ ਸਮੇਂ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ। ਛੋਟੀਆਂ ਹੌਪ ਲੰਬਾਈਆਂ ਨੂੰ ਅਨੁਮਾਨ ਲਗਾਉਣ ਲਈ ਵਧੇਰੇ ਸਮੇਂ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ ਪਰ ਪਿੱਚ ਦੀ ਸਟੀਕਤਾ ਵਧੇਰੇ ਹੁੰਦੀ ਹੈ।", + "Batch Size": "ਬੈਚ ਦਾ ਆਕਾਰ", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "ਇਸ ਨੂੰ ਆਪਣੇ GPU ਦੇ ਉਪਲਬਧ VRAM ਨਾਲ ਜੋੜਨ ਦੀ ਸਲਾਹ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ। 4 ਦੀ ਸੈਟਿੰਗ ਬਿਹਤਰ ਸ਼ੁੱਧਤਾ ਪਰ ਹੌਲੀ ਪ੍ਰੋਸੈਸਿੰਗ ਦੀ ਪੇਸ਼ਕਸ਼ ਕਰਦੀ ਹੈ, ਜਦੋਂ ਕਿ 8 ਤੇਜ਼ ਅਤੇ ਮਿਆਰੀ ਨਤੀਜੇ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ.", + "Save Every Epoch": "ਹਰ ਯੁੱਗ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰੋ", + "Determine at how many epochs the model will saved at.": "ਇਹ ਨਿਰਧਾਰਤ ਕਰੋ ਕਿ ਮਾਡਲ ਕਿੰਨੇ ਯੁੱਗਾਂ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਹੋਵੇਗਾ।", + "Total Epoch": "ਕੁੱਲ ਯੁੱਗ", + "Specifies the overall quantity of epochs for the model training process.": "ਮਾਡਲ ਸਿਖਲਾਈ ਪ੍ਰਕਿਰਿਆ ਲਈ ਯੁੱਗਾਂ ਦੀ ਸਮੁੱਚੀ ਮਾਤਰਾ ਨਿਰਧਾਰਤ ਕਰਦਾ ਹੈ.", + "Pretrained": "ਪਹਿਲਾਂ ਤੋਂ ਸਿਖਲਾਈ ਪ੍ਰਾਪਤ", + "Save Only Latest": "ਕੇਵਲ ਨਵੀਨਤਮ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰੋ", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "ਇਸ ਸੈਟਿੰਗ ਨੂੰ ਸਮਰੱਥ ਕਰਨ ਦੇ ਨਤੀਜੇ ਵਜੋਂ ਜੀ ਅਤੇ ਡੀ ਫਾਈਲਾਂ ਸਿਰਫ ਆਪਣੇ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਸੰਸਕਰਣਾਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰਨਗੀਆਂ, ਸਟੋਰੇਜ ਸਪੇਸ ਨੂੰ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਢੰਗ ਨਾਲ ਸੁਰੱਖਿਅਤ ਕਰਨਗੀਆਂ.", + "Save Every Weights": "ਹਰ ਭਾਰ ਨੂੰ ਬਚਾਓ", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "ਇਹ ਸੈਟਿੰਗ ਤੁਹਾਨੂੰ ਹਰੇਕ ਯੁੱਗ ਦੇ ਅੰਤ 'ਤੇ ਮਾਡਲ ਦੇ ਭਾਰ ਨੂੰ ਬਚਾਉਣ ਦੇ ਯੋਗ ਬਣਾਉਂਦੀ ਹੈ।", + "Custom Pretrained": "ਕਸਟਮ ਪ੍ਰੀਟ੍ਰੇਨਡ", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "ਕਸਟਮ ਪ੍ਰੀਟ੍ਰੇਨਡ ਮਾਡਲਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨ ਨਾਲ ਵਧੀਆ ਨਤੀਜੇ ਨਿਕਲ ਸਕਦੇ ਹਨ, ਕਿਉਂਕਿ ਵਿਸ਼ੇਸ਼ ਵਰਤੋਂ ਦੇ ਕੇਸ ਦੇ ਅਨੁਸਾਰ ਸਭ ਤੋਂ ਢੁਕਵੇਂ ਪੂਰਵ-ਸਿਖਲਾਈ ਪ੍ਰਾਪਤ ਮਾਡਲਾਂ ਦੀ ਚੋਣ ਕਰਨ ਨਾਲ ਪ੍ਰਦਰਸ਼ਨ ਵਿੱਚ ਮਹੱਤਵਪੂਰਣ ਵਾਧਾ ਹੋ ਸਕਦਾ ਹੈ.", + "Upload Pretrained Model": "ਪਹਿਲਾਂ ਤੋਂ ਸਿਖਲਾਈ ਪ੍ਰਾਪਤ ਮਾਡਲ ਅਪਲੋਡ ਕਰੋ", + "Refresh Custom Pretraineds": "ਕਸਟਮ ਪ੍ਰੀਟ੍ਰੇਨਡਾਂ ਨੂੰ ਤਾਜ਼ਾ ਕਰੋ", + "Pretrained Custom Settings": "ਪਹਿਲਾਂ ਤੋਂ ਸਿਖਲਾਈ ਪ੍ਰਾਪਤ ਕਸਟਮ ਸੈਟਿੰਗਾਂ", + "The file you dropped is not a valid pretrained file. Please try again.": "ਤੁਹਾਡੇ ਵੱਲੋਂ ਛੱਡੀ ਗਈ ਫਾਇਲ ਇੱਕ ਵੈਧ ਪੂਰਵ-ਸਿਖਲਾਈ ਪ੍ਰਾਪਤ ਫਾਇਲ ਨਹੀਂ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।", + "Click the refresh button to see the pretrained file in the dropdown menu.": "ਡ੍ਰੌਪਡਾਊਨ ਮੀਨੂ ਵਿੱਚ ਪਹਿਲਾਂ ਤੋਂ ਸਿਖਲਾਈ ਪ੍ਰਾਪਤ ਫਾਇਲ ਨੂੰ ਦੇਖਣ ਲਈ ਰੀਫਰੈਸ਼ ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ।", + "Pretrained G Path": "ਕਸਟਮ ਪ੍ਰੀਟ੍ਰੇਨਡ G", + "Pretrained D Path": "ਕਸਟਮ ਪ੍ਰੀਟ੍ਰੇਨਡ ਡੀ", + "GPU Settings": "GPU ਸੈਟਿੰਗਾਂ", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "ਉੱਨਤ GPU ਸੈਟਿੰਗਾਂ ਸੈੱਟ ਕਰਦਾ ਹੈ, ਜੋ ਬਿਹਤਰ GPU ਆਰਕੀਟੈਕਚਰ ਵਾਲੇ ਉਪਭੋਗਤਾਵਾਂ ਲਈ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।", + "GPU Custom Settings": "GPU ਕਸਟਮ ਸੈਟਿੰਗਾਂ", + "GPU Number": "GPU ਨੰਬਰ", + "0 to ∞ separated by -": "0 ਤੋਂ ∞ ਦੁਆਰਾ ਵੱਖ ਕੀਤਾ ਜਾਂਦਾ ਹੈ -", + "GPU Information": "GPU ਜਾਣਕਾਰੀ", + "Pitch Guidance": "ਪਿਚ ਗਾਈਡੈਂਸ", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "ਪਿਚ ਗਾਈਡੈਂਸ ਦੀ ਵਰਤੋਂ ਕਰਕੇ, ਅਸਲ ਆਵਾਜ਼ ਦੇ ਇੰਟਰਨੇਸ਼ਨ ਨੂੰ ਦਰਸਾਉਣਾ ਸੰਭਵ ਹੋ ਜਾਂਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਇਸਦੀ ਪਿੱਚ ਵੀ ਸ਼ਾਮਲ ਹੈ. ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਗਾਇਕੀ ਅਤੇ ਹੋਰ ਦ੍ਰਿਸ਼ਾਂ ਲਈ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ ਕੀਮਤੀ ਹੈ ਜਿੱਥੇ ਮੂਲ ਸੁਰ ਜਾਂ ਪਿੱਚ ਪੈਟਰਨ ਨੂੰ ਸੁਰੱਖਿਅਤ ਰੱਖਣਾ ਜ਼ਰੂਰੀ ਹੈ।", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "ਆਪਣੇ ਆਪ ਨੂੰ ਸਿਖਲਾਈ ਦਿੰਦੇ ਸਮੇਂ ਪਹਿਲਾਂ ਤੋਂ ਸਿਖਲਾਈ ਪ੍ਰਾਪਤ ਮਾਡਲਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਪਹੁੰਚ ਸਿਖਲਾਈ ਦੀ ਮਿਆਦ ਨੂੰ ਘਟਾਉਂਦੀ ਹੈ ਅਤੇ ਸਮੁੱਚੀ ਗੁਣਵੱਤਾ ਨੂੰ ਵਧਾਉਂਦੀ ਹੈ।", + "Extract Features": "ਐਕਸਟਰੈਕਟ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ", + "Start Training": "ਸਿਖਲਾਈ ਸ਼ੁਰੂ ਕਰੋ", + "Generate Index": "ਇੰਡੈਕਸ ਜਨਰੇਟ ਕਰੋ", + "Voice Model": "ਵੌਇਸ ਮਾਡਲ", + "Select the voice model to use for the conversion.": "ਪਰਿਵਰਤਨ ਲਈ ਵਰਤਣ ਲਈ ਵੌਇਸ ਮਾਡਲ ਦੀ ਚੋਣ ਕਰੋ।", + "Index File": "ਇੰਡੈਕਸ ਫਾਇਲ", + "Select the index file to use for the conversion.": "ਪਰਿਵਰਤਨ ਲਈ ਵਰਤਣ ਲਈ ਇੰਡੈਕਸ ਫਾਇਲ ਦੀ ਚੋਣ ਕਰੋ।", + "Refresh": "ਤਾਜ਼ਾ ਕਰੋ", + "Unload Voice": "ਆਵਾਜ਼ ਨੂੰ ਅਨਲੋਡ ਕਰੋ", + "Single": "ਸਿੰਗਲ", + "Upload Audio": "ਆਡੀਓ ਅੱਪਲੋਡ ਕਰੋ", + "Select Audio": "ਆਡੀਓ ਚੁਣੋ", + "Select the audio to convert.": "ਕਨਵਰਟ ਕਰਨ ਲਈ ਆਡੀਓ ਦੀ ਚੋਣ ਕਰੋ।", + "Advanced Settings": "ਉੱਨਤ ਸੈਟਿੰਗਾਂ", + "Clear Outputs (Deletes all audios in assets/audios)": "ਸਪਸ਼ਟ ਆਊਟਪੁੱਟ (ਜਾਇਦਾਦਾਂ/ਆਡੀਓ ਵਿੱਚ ਸਾਰੇ ਆਡੀਓ ਮਿਟਾ ਦਿੰਦਾ ਹੈ)", + "Custom Output Path": "ਕਸਟਮ ਆਉਟਪੁੱਟ ਪਾਥ", + "Output Path": "ਆਊਟਪੁੱਟ ਪਾਥ", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "ਉਹ ਰਸਤਾ ਜਿੱਥੇ ਆਉਟਪੁੱਟ ਆਡੀਓ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਜਾਵੇਗਾ, ਸੰਪਤੀਆਂ/ਆਡੀਓਜ਼/output.wav", + "Split Audio": "ਸਪਲਿਟ ਆਡੀਓ", + "Split the audio into chunks for inference to obtain better results in some cases.": "ਕੁਝ ਮਾਮਲਿਆਂ ਵਿੱਚ ਬਿਹਤਰ ਨਤੀਜੇ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਅਨੁਮਾਨ ਲਈ ਆਡੀਓ ਨੂੰ ਟੁਕੜਿਆਂ ਵਿੱਚ ਵੰਡੋ।", + "Autotune": "Autotune", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "ਆਪਣੇ ਅਨੁਮਾਨਾਂ ਲਈ ਇੱਕ ਨਰਮ ਆਟੋਟਿਊਨ ਲਾਗੂ ਕਰੋ, ਜਿਸ ਦੀ ਸਿਫਾਰਸ਼ ਗਾਇਨ ਪਰਿਵਰਤਨ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।", + "Clean Audio": "ਕਲੀਨ ਆਡੀਓ", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "ਆਡੀਓ ਬੋਲਣ ਲਈ ਸਿਫਾਰਸ਼ ਕੀਤੇ ਗਏ ਸ਼ੋਰ ਦਾ ਪਤਾ ਲਗਾਉਣ ਵਾਲੇ ਐਲਗੋਰਿਦਮ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਆਪਣੇ ਆਡੀਓ ਆਉਟਪੁੱਟ ਨੂੰ ਸਾਫ਼ ਕਰੋ।", + "Clean Strength": "ਸਾਫ਼ ਤਾਕਤ", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "ਜਿਸ ਆਡੀਓ ਨੂੰ ਤੁਸੀਂ ਚਾਹੁੰਦੇ ਹੋ ਉਸ 'ਤੇ ਕਲੀਨ-ਅੱਪ ਪੱਧਰ ਸੈੱਟ ਕਰੋ, ਜਿੰਨਾ ਜ਼ਿਆਦਾ ਤੁਸੀਂ ਇਸ ਨੂੰ ਵਧਾਓਗੇ, ਓਨਾ ਹੀ ਇਹ ਸਾਫ਼ ਹੋ ਜਾਵੇਗਾ, ਪਰ ਇਹ ਸੰਭਵ ਹੈ ਕਿ ਆਡੀਓ ਵਧੇਰੇ ਸੰਕੁਚਿਤ ਹੋ ਜਾਵੇਗਾ.", + "Pitch": "ਪਿਚ", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "ਆਡੀਓ ਦੀ ਪਿਚ ਸੈੱਟ ਕਰੋ, ਜਿੰਨਾ ਜ਼ਿਆਦਾ ਮੁੱਲ ਹੋਵੇਗਾ, ਪਿਚ ਓਨੀ ਹੀ ਉੱਚੀ ਹੋਵੇਗੀ।", + "Filter Radius": "ਫਿਲਟਰ ਰੇਡੀਅਸ", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "ਜੇ ਗਿਣਤੀ ਤਿੰਨ ਤੋਂ ਵੱਧ ਜਾਂ ਬਰਾਬਰ ਹੈ, ਤਾਂ ਇਕੱਤਰ ਕੀਤੇ ਟੋਨ ਨਤੀਜਿਆਂ 'ਤੇ ਮੀਡੀਅਨ ਫਿਲਟਰਿੰਗ ਲਗਾਉਣ ਨਾਲ ਸਾਹ ਲੈਣ ਵਿੱਚ ਕਮੀ ਆਉਣ ਦੀ ਸੰਭਾਵਨਾ ਹੁੰਦੀ ਹੈ.", + "Search Feature Ratio": "ਖੋਜ ਵਿਸ਼ੇਸ਼ਤਾ ਅਨੁਪਾਤ", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "ਇੰਡੈਕਸ ਫਾਈਲ ਦੁਆਰਾ ਪਾਇਆ ਗਿਆ ਪ੍ਰਭਾਵ; ਇੱਕ ਉੱਚ ਮੁੱਲ ਵਧੇਰੇ ਪ੍ਰਭਾਵ ਨਾਲ ਮੇਲ ਖਾਂਦਾ ਹੈ. ਹਾਲਾਂਕਿ, ਘੱਟ ਮੁੱਲਾਂ ਦੀ ਚੋਣ ਕਰਨਾ ਆਡੀਓ ਵਿੱਚ ਮੌਜੂਦ ਕਲਾਕ੍ਰਿਤੀਆਂ ਨੂੰ ਘਟਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰ ਸਕਦਾ ਹੈ।", + "Volume Envelope": "ਵਾਲਿਊਮ ਲਿਫਾਫਾ", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "ਆਉਟਪੁੱਟ ਦੇ ਵਾਲੀਅਮ ਲਿਫਾਫੇ ਨੂੰ ਬਦਲੋ ਜਾਂ ਮਿਸ਼ਰਣ ਕਰੋ। ਅਨੁਪਾਤ ਜਿੰਨਾ 1 ਦੇ ਨੇੜੇ ਹੁੰਦਾ ਹੈ, ਓਨਾ ਹੀ ਆਉਟਪੁੱਟ ਲਿਫਾਫਾ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ.", + "Protect Voiceless Consonants": "ਅਵਾਜ਼ ਰਹਿਤ ਵਿੰਜਨਾਂ ਦੀ ਰੱਖਿਆ ਕਰੋ", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "ਇਲੈਕਟ੍ਰੋ-ਐਕੋਸਟਿਕ ਫਾੜਨ ਅਤੇ ਹੋਰ ਕਲਾਕ੍ਰਿਤੀਆਂ ਨੂੰ ਰੋਕਣ ਲਈ ਵੱਖਰੇ ਵਿਜਨਾਂ ਅਤੇ ਸਾਹ ਲੈਣ ਦੀਆਂ ਆਵਾਜ਼ਾਂ ਦੀ ਰੱਖਿਆ ਕਰੋ। ਪੈਰਾਮੀਟਰ ਨੂੰ ਇਸਦੇ ਵੱਧ ਤੋਂ ਵੱਧ ਮੁੱਲ 0.5 ਤੱਕ ਖਿੱਚਣਾ ਵਿਆਪਕ ਸੁਰੱਖਿਆ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। ਹਾਲਾਂਕਿ, ਇਸ ਮੁੱਲ ਨੂੰ ਘਟਾਉਣ ਨਾਲ ਸੁਰੱਖਿਆ ਦੀ ਹੱਦ ਘੱਟ ਹੋ ਸਕਦੀ ਹੈ ਜਦੋਂ ਕਿ ਸੰਭਾਵਿਤ ਤੌਰ 'ਤੇ ਸੂਚਕਪ੍ਰਭਾਵ ਨੂੰ ਘਟਾਇਆ ਜਾ ਸਕਦਾ ਹੈ.", + "Pitch extraction algorithm": "ਪਿਚ ਐਕਸਟਰੈਕਸ਼ਨ ਐਲਗੋਰਿਦਮ", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "ਆਡੀਓ ਪਰਿਵਰਤਨ ਲਈ ਵਰਤਣ ਲਈ ਪਿਚ ਐਕਸਟਰੈਕਸ਼ਨ ਐਲਗੋਰਿਦਮ. ਡਿਫਾਲਟ ਐਲਗੋਰਿਦਮ rmvpe ਹੈ, ਜਿਸਦੀ ਸਿਫਾਰਸ਼ ਜ਼ਿਆਦਾਤਰ ਮਾਮਲਿਆਂ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।", + "Convert": "ਕਨਵਰਟ ਕਰੋ", + "Export Audio": "ਆਡੀਓ ਨਿਰਯਾਤ ਕਰੋ", + "Batch": "ਬੈਚ", + "Input Folder": "ਇਨਪੁੱਟ ਫੋਲਡਰ", + "Select the folder containing the audios to convert.": "ਬਦਲਣ ਲਈ ਆਡੀਓ ਵਾਲੇ ਫੋਲਡਰ ਦੀ ਚੋਣ ਕਰੋ।", + "Enter input path": "ਇਨਪੁੱਟ ਪਾਥ ਦਾਖਲ ਕਰੋ", + "Output Folder": "ਆਊਟਪੁੱਟ ਫੋਲਡਰ", + "Select the folder where the output audios will be saved.": "ਉਹ ਫੋਲਡਰ ਚੁਣੋ ਜਿੱਥੇ ਆਉਟਪੁੱਟ ਆਡੀਓ ਸੁਰੱਖਿਅਤ ਕੀਤੇ ਜਾਣਗੇ।", + "Enter output path": "ਆਊਟਪੁੱਟ ਪਾਥ ਦਾਖਲ ਕਰੋ", + "Get information about the audio": "ਆਡੀਓ ਬਾਰੇ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਕਰੋ", + "Information about the audio file": "ਆਡੀਓ ਫਾਇਲ ਬਾਰੇ ਜਾਣਕਾਰੀ", + "Waiting for information...": "ਜਾਣਕਾਰੀ ਦੀ ਉਡੀਕ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ...", + "## Voice Blender": "## ਵੌਇਸ ਬਲੇਂਡਰ", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "ਦੋ ਵੌਇਸ ਮਾਡਲਾਂ ਦੀ ਚੋਣ ਕਰੋ, ਆਪਣੀ ਲੋੜੀਂਦੀ ਮਿਸ਼ਰਣ ਪ੍ਰਤੀਸ਼ਤਤਾ ਸੈੱਟ ਕਰੋ, ਅਤੇ ਉਨ੍ਹਾਂ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਨਵੀਂ ਆਵਾਜ਼ ਵਿੱਚ ਮਿਲਾਓ.", + "Voice Blender": "ਵੌਇਸ ਬਲੇਂਡਰ", + "Drag and drop your model here": "ਆਪਣੇ ਮਾਡਲ ਨੂੰ ਇੱਥੇ ਖਿੱਚ ਕੇ ਛੱਡ ਦਿਓ", + "You can also use a custom path.": "ਤੁਸੀਂ ਇੱਕ ਕਸਟਮ ਪਾਥ ਦੀ ਵਰਤੋਂ ਵੀ ਕਰ ਸਕਦੇ ਹੋ।", + "Blend Ratio": "ਮਿਸ਼ਰਣ ਅਨੁਪਾਤ", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "ਸਥਿਤੀ ਨੂੰ ਇੱਕ ਪਾਸੇ ਜਾਂ ਦੂਜੇ ਪਾਸੇ ਵਧੇਰੇ ਵਿਵਸਥਿਤ ਕਰਨਾ ਮਾਡਲ ਨੂੰ ਪਹਿਲੇ ਜਾਂ ਦੂਜੇ ਦੇ ਸਮਾਨ ਬਣਾ ਦੇਵੇਗਾ।", + "Fusion": "ਫਿਊਜ਼ਨ", + "Path to Model": "ਮਾਡਲ ਲਈ ਰਾਹ", + "Enter path to model": "ਮਾਡਲ ਲਈ ਪਾਥ ਦਾਖਲ ਕਰੋ", + "Model information to be placed": "ਮਾਡਲ ਜਾਣਕਾਰੀ ਰੱਖੀ ਜਾਣੀ ਚਾਹੀਦੀ ਹੈ", + "Inroduce the model information": "ਮਾਡਲ ਜਾਣਕਾਰੀ ਨੂੰ ਪੇਸ਼ ਕਰੋ", + "The information to be placed in the model (You can leave it blank or put anything).": "ਮਾਡਲ ਵਿੱਚ ਰੱਖੀ ਜਾਣ ਵਾਲੀ ਜਾਣਕਾਰੀ (ਤੁਸੀਂ ਇਸ ਨੂੰ ਖਾਲੀ ਛੱਡ ਸਕਦੇ ਹੋ ਜਾਂ ਕੁਝ ਵੀ ਪਾ ਸਕਦੇ ਹੋ)।", + "View model information": "ਮਾਡਲ ਜਾਣਕਾਰੀ ਦੇਖੋ", + "Introduce the model pth path": "ਮਾਡਲ pth ਪਾਥ ਨੂੰ ਪੇਸ਼ ਕਰੋ", + "View": "ਦ੍ਰਿਸ਼", + "Model extraction": "ਮਾਡਲ ਕੱਢਣਾ", + "Model conversion": "ਮਾਡਲ ਪਰਿਵਰਤਨ", + "Pth file": "Pth ਫਾਇਲ", + "Output of the pth file": "pth ਫਾਇਲ ਦਾ ਆਊਟਪੁੱਟ", + "# How to Report an Issue on GitHub": "# GitHub 'ਤੇ ਕਿਸੇ ਮੁੱਦੇ ਦੀ ਰਿਪੋਰਟ ਕਿਵੇਂ ਕਰਨੀ ਹੈ", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. ਤੁਹਾਡੇ ਵੱਲੋਂ ਅਨੁਭਵ ਕੀਤੀ ਜਾ ਰਹੀ ਸਮੱਸਿਆ ਨੂੰ ਰਿਕਾਰਡ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਹੇਠਾਂ ਦਿੱਤੇ 'ਰਿਕਾਰਡ ਸਕ੍ਰੀਨ' ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ।", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. ਇੱਕ ਵਾਰ ਜਦੋਂ ਤੁਸੀਂ ਸਮੱਸਿਆ ਨੂੰ ਰਿਕਾਰਡ ਕਰਨਾ ਪੂਰਾ ਕਰ ਲੈਂਦੇ ਹੋ, ਤਾਂ 'ਸਟਾਪ ਰਿਕਾਰਡਿੰਗ' ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ (ਉਹੀ ਬਟਨ, ਪਰ ਲੇਬਲ ਇਸ ਗੱਲ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਸਰਗਰਮੀ ਨਾਲ ਰਿਕਾਰਡਿੰਗ ਕਰ ਰਹੇ ਹੋ ਜਾਂ ਨਹੀਂ)।", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [GitHub ਮੁੱਦੇ] (https://github.com/IAHispano/Applio/issues) 'ਤੇ ਜਾਓ ਅਤੇ 'ਨਵਾਂ ਮੁੱਦਾ' ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ।", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. ਪ੍ਰਦਾਨ ਕੀਤੇ ਮੁੱਦੇ ਦੇ ਟੈਂਪਲੇਟ ਨੂੰ ਪੂਰਾ ਕਰੋ, ਲੋੜ ਅਨੁਸਾਰ ਵੇਰਵੇ ਸ਼ਾਮਲ ਕਰਨਾ ਯਕੀਨੀ ਬਣਾਓ, ਅਤੇ ਪਿਛਲੇ ਕਦਮ ਤੋਂ ਰਿਕਾਰਡ ਕੀਤੀ ਫਾਈਲ ਨੂੰ ਅੱਪਲੋਡ ਕਰਨ ਲਈ ਸੰਪਤੀ ਸੈਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰੋ.", + "Record Screen": "ਰਿਕਾਰਡ ਸਕ੍ਰੀਨ", + "Record": "ਰਿਕਾਰਡ", + "Stop Recording": "ਰਿਕਾਰਡਿੰਗ ਬੰਦ ਕਰੋ", + "Introduce the model .pth path": "ਮਾਡਲ .pth path ਨੂੰ ਪੇਸ਼ ਕਰੋ", + "See Model Information": "ਮਾਡਲ ਜਾਣਕਾਰੀ ਦੇਖੋ", + "## Download Model": "## ਡਾਊਨਲੋਡ ਮਾਡਲ", + "Model Link": "ਮਾਡਲ ਲਿੰਕ", + "Introduce the model link": "ਮਾਡਲ ਲਿੰਕ ਪੇਸ਼ ਕਰੋ", + "Download Model": "ਮਾਡਲ ਡਾਊਨਲੋਡ ਕਰੋ", + "## Drop files": "## ਫਾਇਲਾਂ ਛੱਡੋ", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "ਆਪਣੀ .pth ਫਾਇਲ ਅਤੇ .index ਫਾਇਲ ਨੂੰ ਇਸ ਸਪੇਸ ਵਿੱਚ ਖਿੱਚੋ। ਇੱਕ ਨੂੰ ਖਿੱਚੋ ਅਤੇ ਫਿਰ ਦੂਜੇ ਨੂੰ।", + "TTS Voices": "TTS ਆਵਾਜ਼ਾਂ", + "Select the TTS voice to use for the conversion.": "ਪਰਿਵਰਤਨ ਲਈ ਵਰਤਣ ਲਈ TTS ਆਵਾਜ਼ ਦੀ ਚੋਣ ਕਰੋ।", + "Text to Synthesize": "ਸੰਸ਼ਲੇਸ਼ਣ ਕਰਨ ਲਈ ਟੈਕਸਟ", + "Enter the text to synthesize.": "ਸੰਸ਼ਲੇਸ਼ਿਤ ਕਰਨ ਲਈ ਟੈਕਸਟ ਦਾਖਲ ਕਰੋ।", + "Or you can upload a .txt file": "ਜਾਂ ਤੁਸੀਂ ਕੋਈ .txt ਫਾਇਲ ਅੱਪਲੋਡ ਕਰ ਸਕਦੇ ਹੋ", + "Enter text to synthesize": "ਸੰਸ਼ਲੇਸ਼ਿਤ ਕਰਨ ਲਈ ਟੈਕਸਟ ਦਾਖਲ ਕਰੋ", + "Output Path for TTS Audio": "TTS ਆਡੀਓ ਲਈ ਆਉਟਪੁੱਟ ਪਾਥ", + "Output Path for RVC Audio": "RVC ਆਡੀਓ ਲਈ ਆਉਟਪੁੱਟ ਪਾਥ", + "Enable Applio integration with Discord presence": "ਡਿਸਕਾਰਡ ਦੀ ਮੌਜੂਦਗੀ ਨਾਲ ਐਪਲੀਓ ਏਕੀਕਰਣ ਨੂੰ ਸਮਰੱਥ ਕਰੋ", + "It will activate the possibility of displaying the current Applio activity in Discord.": "ਇਹ ਡਿਸਕਾਰਡ ਵਿੱਚ ਮੌਜੂਦਾ ਐਪਲੀਓ ਗਤੀਵਿਧੀ ਨੂੰ ਪ੍ਰਦਰਸ਼ਿਤ ਕਰਨ ਦੀ ਸੰਭਾਵਨਾ ਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਕਰੇਗਾ।", + "Enable Applio integration with applio.org/models using flask": "ਫਲਾਸਕ ਦੀ ਵਰਤੋਂ ਕਰਕੇ applio.org/models ਨਾਲ ਐਪਲਿਓ ਏਕੀਕਰਣ ਨੂੰ ਸਮਰੱਥ ਕਰੋ", + "It will activate the possibility of downloading models with a click from the website.": "ਇਹ ਵੈਬਸਾਈਟ ਤੋਂ ਇੱਕ ਕਲਿੱਕ ਨਾਲ ਮਾਡਲਾਂ ਨੂੰ ਡਾਊਨਲੋਡ ਕਰਨ ਦੀ ਸੰਭਾਵਨਾ ਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਕਰੇਗਾ।", + "Theme": "ਥੀਮ", + "Select the theme you want to use. (Requires restarting Applio)": "ਉਹ ਥੀਮ ਚੁਣੋ ਜਿਸਨੂੰ ਤੁਸੀਂ ਵਰਤਣਾ ਚਾਹੁੰਦੇ ਹੋ। (ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ)", + "Language": "ਭਾਸ਼ਾ", + "Select the language you want to use. (Requires restarting Applio)": "ਉਹ ਭਾਸ਼ਾ ਚੁਣੋ ਜਿਸਨੂੰ ਤੁਸੀਂ ਵਰਤਣਾ ਚਾਹੁੰਦੇ ਹੋ। (ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ)", + "Plugin Installer": "ਪਲੱਗਇਨ ਇੰਸਟਾਲਰ", + "Drag your plugin.zip to install it": "ਇਸ ਨੂੰ ਇੰਸਟਾਲ ਕਰਨ ਲਈ ਆਪਣੇ plugin.zip ਨੂੰ ਖਿੱਚੋ", + "Version Checker": "ਸੰਸਕਰਣ ਚੈਕਰ", + "Check which version of Applio is the latest to see if you need to update.": "ਇਹ ਦੇਖਣ ਲਈ ਜਾਂਚ ਕਰੋ ਕਿ ਕੀ ਤੁਹਾਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਦੀ ਲੋੜ ਹੈ, ਐਪਲੀਓ ਦਾ ਕਿਹੜਾ ਸੰਸਕਰਣ ਨਵੀਨਤਮ ਹੈ।", + "Check for updates": "ਅੱਪਡੇਟਾਂ ਵਾਸਤੇ ਜਾਂਚ ਕਰੋ" +} \ No newline at end of file diff --git a/assets/i18n/languages/pl_PL.json b/assets/i18n/languages/pl_PL.json new file mode 100644 index 0000000000000000000000000000000000000000..60399c1e1cf41b7b319a45f069f45a5537237be3 --- /dev/null +++ b/assets/i18n/languages/pl_PL.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "Najlepsze narzędzie do klonowania głosu, skrupulatnie zoptymalizowane pod kątem niezrównanej mocy, modułowości i przyjazności dla użytkownika.", + "This section contains some extra utilities that often may be in experimental phases.": "Ta sekcja zawiera kilka dodatkowych narzędzi, które często mogą znajdować się w fazie eksperymentalnej.", + "Output Information": "Informacje wyjściowe", + "The output information will be displayed here.": "W tym miejscu zostaną wyświetlone informacje wyjściowe.", + "Inference": "Wnioskowanie", + "Train": "Pociąg", + "Extra": "Dodatkowych", + "Merge Audios": "Scal audio", + "Processing": "Przetwarzanie", + "Audio Analyzer": "Analizator dźwięku", + "Model Information": "Informacje o modelu", + "Plugins": "Wtyczki", + "Download": "Pobierać", + "Report a Bug": "Zgłoś błąd", + "Settings": "Ustawienia", + "Preprocess": "Przetwarzanie wstępne", + "Model Name": "Nazwa modelu", + "Name of the new model.": "Nazwa nowego modelu.", + "Enter model name": "Wprowadź nazwę modelu", + "Dataset Path": "Ścieżka zestawu danych", + "Path to the dataset folder.": "Ścieżka do folderu zestawu danych.", + "Refresh Datasets": "Odświeżanie zestawów danych", + "Dataset Creator": "Twórca zestawu danych", + "Dataset Name": "Nazwa zestawu danych", + "Name of the new dataset.": "Nazwa nowego zestawu danych.", + "Enter dataset name": "Wprowadź nazwę zestawu danych", + "Upload Audio Dataset": "Przekazywanie zestawu danych audio", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Plik audio został pomyślnie dodany do zestawu danych. Kliknij przycisk przetwarzania wstępnego.", + "Enter dataset path": "Wprowadź ścieżkę zestawu danych", + "Sampling Rate": "Częstotliwość próbkowania", + "The sampling rate of the audio files.": "Częstotliwość próbkowania plików audio.", + "RVC Version": "Wersja RVC", + "The RVC version of the model.": "Wersja modelu RVC.", + "Preprocess Dataset": "Wstępne przetwarzanie zestawu danych", + "Extract": "Ekstrakt", + "Hop Length": "Długość chmielu", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Oznacza czas potrzebny systemowi do przejścia do znaczącej zmiany wysokości dźwięku. Mniejsze długości przeskoków wymagają więcej czasu na wnioskowanie, ale zwykle zapewniają wyższą dokładność skoku.", + "Batch Size": "Wielkość partii", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Wskazane jest, aby dostosować go do dostępnej pamięci VRAM procesora graficznego. Ustawienie 4 zapewnia lepszą dokładność, ale wolniejsze przetwarzanie, podczas gdy 8 zapewnia szybsze i standardowe wyniki.", + "Save Every Epoch": "Ocal każdą epokę", + "Determine at how many epochs the model will saved at.": "Określ, w ilu epokach model zostanie zapisany.", + "Total Epoch": "Epoka ogółem", + "Specifies the overall quantity of epochs for the model training process.": "Określa całkowitą liczbę epok dla procesu trenowania modelu.", + "Pretrained": "Wstępnie wytrenowany", + "Save Only Latest": "Zapisz tylko najnowsze", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Włączenie tego ustawienia spowoduje, że pliki G i D będą zapisywać tylko swoje najnowsze wersje, skutecznie oszczędzając miejsce na dysku.", + "Save Every Weights": "Oszczędzaj wszystkie ciężary", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "To ustawienie umożliwia zapisanie wag modelu na końcu każdej epoki.", + "Custom Pretrained": "Niestandardowe wstępnie wytrenowane", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Korzystanie z niestandardowych wstępnie wytrenowanych modeli może prowadzić do doskonałych wyników, ponieważ wybranie najbardziej odpowiednich wstępnie wytrenowanych modeli dostosowanych do konkretnego przypadku użycia może znacznie zwiększyć wydajność.", + "Upload Pretrained Model": "Przekazywanie wstępnie wytrenowanego modelu", + "Refresh Custom Pretraineds": "Odświeżanie niestandardowych wstępnie wytrenowanych", + "Pretrained Custom Settings": "Wstępnie wytrenowane ustawienia niestandardowe", + "The file you dropped is not a valid pretrained file. Please try again.": "Upuszczony plik nie jest prawidłowym wstępnie wytrenowanym plikiem. Spróbuj ponownie.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "Kliknij przycisk odświeżania, aby wyświetlić wstępnie wytrenowany plik w menu rozwijanym.", + "Pretrained G Path": "Niestandardowe wstępnie wytrenowane G", + "Pretrained D Path": "Niestandardowy wstępnie wytrenowany D", + "GPU Settings": "Ustawienia GPU", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Ustawia zaawansowane ustawienia GPU, zalecane dla użytkowników z lepszą architekturą GPU.", + "GPU Custom Settings": "Niestandardowe ustawienia GPU", + "GPU Number": "Numer GPU", + "0 to ∞ separated by -": "Od 0 do ∞ oddzielone -", + "GPU Information": "Informacje o procesorze GPU", + "Pitch Guidance": "Wskazówki dotyczące wysokości dźwięku", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Stosując wskazówki dotyczące wysokości dźwięku, możliwe staje się odzwierciedlenie intonacji oryginalnego głosu, w tym jego wysokości. Ta funkcja jest szczególnie cenna w przypadku śpiewu i innych scenariuszy, w których niezbędne jest zachowanie oryginalnej melodii lub wzoru wysokości dźwięku.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Korzystaj ze wstępnie wytrenowanych modeli podczas trenowania własnych. Takie podejście skraca czas trwania szkolenia i poprawia ogólną jakość.", + "Extract Features": "Wyodrębnij funkcje", + "Start Training": "Rozpocznij szkolenie", + "Generate Index": "Generuj indeks", + "Voice Model": "Model głosu", + "Select the voice model to use for the conversion.": "Wybierz model głosu, który ma zostać użyty do konwersji.", + "Index File": "Plik indeksu", + "Select the index file to use for the conversion.": "Wybierz plik indeksu, który ma zostać użyty do konwersji.", + "Refresh": "Odświeżyć", + "Unload Voice": "Uwolnij głos", + "Single": "Pojedynczy", + "Upload Audio": "Prześlij dźwięk", + "Select Audio": "Wybierz Audio (Dźwięk)", + "Select the audio to convert.": "Wybierz dźwięk do konwersji.", + "Advanced Settings": "Ustawienia zaawansowane", + "Clear Outputs (Deletes all audios in assets/audios)": "Wyczyść wyjścia (usuwa wszystkie pliki audio w zasobach/plikach audio)", + "Custom Output Path": "Niestandardowa ścieżka wyjściowa", + "Output Path": "Ścieżka wyjściowa", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "Ścieżka, w której zostanie zapisany dźwięk wyjściowy, domyślnie w assets/audios/output.wav", + "Split Audio": "Podziel dźwięk", + "Split the audio into chunks for inference to obtain better results in some cases.": "Podziel dźwięk na fragmenty w celu wnioskowania, aby w niektórych przypadkach uzyskać lepsze wyniki.", + "Autotune": "Automatyczne dostrajanie", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "Zastosuj miękkie autotune do swoich wniosków, zalecane do konwersji śpiewu.", + "Clean Audio": "Czysty dźwięk", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Wyczyść wyjście audio za pomocą algorytmów wykrywania szumów, zalecanych do mówienia audio.", + "Clean Strength": "Czysta siła", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Ustaw żądany poziom czyszczenia na żądany dźwięk, im bardziej go zwiększysz, tym bardziej się oczyści, ale możliwe, że dźwięk będzie bardziej skompresowany.", + "Pitch": "Rzucać", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "Ustaw wysokość dźwięku, im wyższa wartość, tym wyższa wysokość.", + "Filter Radius": "Promień filtra", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Jeśli liczba ta jest większa lub równa trzem, zastosowanie filtrowania mediany na zebranych wynikach tonów może potencjalnie zmniejszyć oddychanie.", + "Search Feature Ratio": "Współczynnik funkcji wyszukiwania", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Wpływ wywierany przez plik indeksu; Wyższa wartość odpowiada większemu wpływowi. Jednak wybranie niższych wartości może pomóc w ograniczeniu artefaktów obecnych w dźwięku.", + "Volume Envelope": "Koperta objętości", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Zastąp lub zmieszaj z obwiednią głośności wyjścia. Im współczynnik jest bliższy 1, tym bardziej wykorzystywana jest obwiednia wyjściowa.", + "Protect Voiceless Consonants": "Chroń bezdźwięczne spółgłoski", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Chroń wyraźne spółgłoski i dźwięki oddychania, aby zapobiec rozdarciu elektroakustycznemu i innym artefaktom. Pociągnięcie parametru do maksymalnej wartości 0,5 zapewnia kompleksową ochronę. Jednak zmniejszenie tej wartości może zmniejszyć zakres ochrony, jednocześnie potencjalnie łagodząc efekt indeksowania.", + "Pitch extraction algorithm": "Algorytm ekstrakcji wysokości dźwięku", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algorytm ekstrakcji wysokości dźwięku do użycia do konwersji dźwięku. Domyślnym algorytmem jest rmvpe, który jest zalecany w większości przypadków.", + "Convert": "Nawrócić", + "Export Audio": "Eksportuj dźwięk", + "Batch": "Partia", + "Input Folder": "Folder wejściowy", + "Select the folder containing the audios to convert.": "Wybierz folder zawierający pliki audio do konwersji.", + "Enter input path": "Wprowadź ścieżkę wejściową", + "Output Folder": "Folder wyjściowy", + "Select the folder where the output audios will be saved.": "Wybierz folder, w którym zostaną zapisane wyjściowe pliki audio.", + "Enter output path": "Wprowadź ścieżkę wyjściową", + "Get information about the audio": "Uzyskiwanie informacji o dźwięku", + "Information about the audio file": "Informacje o pliku audio", + "Waiting for information...": "Czekam na informację...", + "## Voice Blender": "## Blender głosowy", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Wybierz dwa modele brzmienia, ustaw żądany procent mieszania i połącz je w zupełnie nowy głos.", + "Voice Blender": "Blender głosu", + "Drag and drop your model here": "Przeciągnij i upuść swój model tutaj", + "You can also use a custom path.": "Możesz również użyć ścieżki niestandardowej.", + "Blend Ratio": "Proporcje mieszania", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Dostosowanie pozycji bardziej w jedną lub drugą stronę sprawi, że model będzie bardziej podobny do pierwszego lub drugiego.", + "Fusion": "Fuzja", + "Path to Model": "Ścieżka do modelu", + "Enter path to model": "Wprowadź ścieżkę do modelu", + "Model information to be placed": "Informacje o modelu, które mają zostać umieszczone", + "Inroduce the model information": "Zapoznaj się z informacjami o modelu", + "The information to be placed in the model (You can leave it blank or put anything).": "Informacje, które mają zostać umieszczone w modelu (możesz pozostawić je puste lub umieścić cokolwiek).", + "View model information": "Wyświetlanie informacji o modelu", + "Introduce the model pth path": "Wprowadzenie ścieżki pth modelu", + "View": "Widok", + "Model extraction": "Wyodrębnianie modelu", + "Model conversion": "Konwersja modelu", + "Pth file": "P-ty plik", + "Output of the pth file": "Wyjście pliku pth", + "# How to Report an Issue on GitHub": "# Jak zgłosić problem na GitHub", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Kliknij przycisk \"Ekran nagrywania\" poniżej, aby rozpocząć nagrywanie napotkanego problemu.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Po zakończeniu nagrywania problemu kliknij przycisk \"Zatrzymaj nagrywanie\" (ten sam przycisk, ale etykieta zmienia się w zależności od tego, czy aktywnie nagrywasz, czy nie).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Przejdź do [GitHub Issues](https://github.com/IAHispano/Applio/issues) i kliknij przycisk \"Nowe zgłoszenie\".", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Wypełnij dostarczony szablon problemu, upewniając się, że w razie potrzeby dołączyłeś szczegóły, i skorzystaj z sekcji zasobów, aby przesłać nagrany plik z poprzedniego kroku.", + "Record Screen": "Ekran nagrywania", + "Record": "Rekord", + "Stop Recording": "Zatrzymaj nagrywanie", + "Introduce the model .pth path": "Wprowadzenie ścieżki pth modelu", + "See Model Information": "Zobacz informacje o modelu", + "## Download Model": "## Pobierz model", + "Model Link": "Link do modelu", + "Introduce the model link": "Wprowadzenie linku do modelu", + "Download Model": "Pobierz model", + "## Drop files": "## Upuść pliki", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "Przeciągnij plik .pth i plik .index do tego miejsca. Przeciągnij jedną, a potem drugą.", + "TTS Voices": "Głosy TTS", + "Select the TTS voice to use for the conversion.": "Wybierz głos TTS, który ma być używany do konwersji.", + "Text to Synthesize": "Tekst do syntezy", + "Enter the text to synthesize.": "Wprowadź tekst do syntezy.", + "Or you can upload a .txt file": "Możesz też przesłać plik .txt", + "Enter text to synthesize": "Wprowadzanie tekstu do syntezy", + "Output Path for TTS Audio": "Ścieżka wyjściowa dla TTS Audio", + "Output Path for RVC Audio": "Ścieżka wyjściowa dla dźwięku RVC", + "Enable Applio integration with Discord presence": "Włącz integrację Applio z obecnością Discord", + "It will activate the possibility of displaying the current Applio activity in Discord.": "Aktywuje możliwość wyświetlania aktualnej aktywności Applio w Discordzie.", + "Enable Applio integration with applio.org/models using flask": "Włączanie integracji aplikacji Applio z applio.org/models przy użyciu kolby", + "It will activate the possibility of downloading models with a click from the website.": "Aktywuje możliwość pobierania modeli jednym kliknięciem ze strony internetowej.", + "Theme": "Kompozycja", + "Select the theme you want to use. (Requires restarting Applio)": "Wybierz motyw, którego chcesz użyć. (Wymaga ponownego uruchomienia aplikacji)", + "Language": "Język", + "Select the language you want to use. (Requires restarting Applio)": "Wybierz język, którego chcesz używać. (Wymaga ponownego uruchomienia aplikacji)", + "Plugin Installer": "Instalator wtyczek", + "Drag your plugin.zip to install it": "Przeciągnij plugin.zip, aby go zainstalować", + "Version Checker": "Sprawdzanie wersji", + "Check which version of Applio is the latest to see if you need to update.": "Sprawdź, która wersja Applio jest najnowsza, aby sprawdzić, czy musisz ją zaktualizować.", + "Check for updates": "Sprawdź dostępność aktualizacji" +} \ No newline at end of file diff --git a/assets/i18n/languages/pt_BR.json b/assets/i18n/languages/pt_BR.json new file mode 100644 index 0000000000000000000000000000000000000000..aac7395ad769c25c5c9128b1c639c0bdd71c7e24 --- /dev/null +++ b/assets/i18n/languages/pt_BR.json @@ -0,0 +1,113 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "A melhor ferramenta de clonagem de voz, meticulosamente otimizada para potência incomparável, modularidade e experiência amigável.", + "This section contains some extra utilities that often may be in experimental phases.": "Esta seção contém alguns utilitários extras que muitas vezes podem estar em fases experimentais.", + "Output Information": "Informações de saída", + "Inference": "Inferência", + "Train": "Treinar", + "Extra": "Extra", + "Merge Audios": "Mesclar áudios", + "Processing": "Processamento", + "Audio Analyzer": "Analisador de áudio", + "Model Information": "Informação do modelo", + "Download": "Baixar", + "Report a Bug": "Reportar um Bug", + "Preprocess": "Pré-processo", + "Model Name": "Nome do modelo", + "Enter model name": "Insira o nome do modelo", + "Dataset Path": "Caminho do dataset", + "Enter dataset path": "Insira o caminho do dataset", + "Sampling Rate": "Taxa de amostragem", + "RVC Version": "Versão RVC", + "Preprocess Dataset": "Pré-processar dataset", + "Extract": "Extrair", + "Hop Length": "Comprimento do Hop", + "Batch Size": "Tamanho do lote", + "Save Every Epoch": "Salve Cada Epoch", + "Total Epoch": "Epoch Total", + "Pretrained": "Pré-treinamento", + "Save Only Latest": "Salvar Apenas o último", + "Save Every Weights": "Salvar todos os Weights", + "Custom Pretrained": "Pretrain personalizado", + "Upload Pretrained Model": "Carregar Pretrain", + "Pretrained Custom Settings": "Configurações personalizadas do pretrain", + "The file you dropped is not a valid pretrained file. Please try again.": "O arquivo que você soltou não é um arquivo de pretrain válido. Por favor, tente novamente.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "Clique no botão Atualizar para ver o arquivo pretrain no menu suspenso.", + "Pretrained G Path": "Personalizado Pré-treinado G", + "Pretrained D Path": "Personalizado Pré-treinado D", + "GPU Settings": "Configurações da GPU", + "GPU Custom Settings": "Configurações personalizadas da GPU", + "GPU Number": "Número da GPU", + "0 to ∞ separated by -": "0 a ∞ separados por -", + "GPU Information": "Informações da GPU", + "Pitch Guidance": "Orientação de Pitch", + "Extract Features": "Extrair recursos", + "Start Training": "Iniciar Treinamento", + "Generate Index": "Gerar Index", + "Voice Model": "Modelo de voz", + "Index File": "Arquivo de Index", + "Refresh": "Atualizar", + "Unload Voice": "Descarregar voz", + "Single": "Único", + "Upload Audio": "Carregar áudio", + "Select Audio": "Selecione Áudio", + "Advanced Settings": "Configurações avançadas", + "Clear Outputs (Deletes all audios in assets/audios)": "Limpar saídas (exclui todos os áudios em ativos/áudios)", + "Custom Output Path": "Caminho de saída personalizado", + "Output Path": "Caminho de saída", + "Pitch": "Pitch", + "If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness": "Se >=3: aplicar filtragem mediana aos resultados do pitch colhido. O valor representa o raio do filtro e pode reduzir a soprosidade", + "Search Feature Ratio": "Proporção de recursos de Index", + "Pitch extraction algorithm": "Algoritmo de extração de pitch", + "Convert": "Converter", + "Export Audio": "Exportar áudio", + "Batch": "Lote", + "Input Folder": "Pasta de entrada", + "Enter input path": "Insira o caminho de entrada", + "Output Folder": "Pasta de saída", + "Enter output path": "Insira o caminho de saída", + "Get information about the audio": "Obter informações sobre o áudio", + "Information about the audio file": "Informações sobre o arquivo de áudio", + "Waiting for information...": "À espera de informações...", + "Model fusion": "Fusão de modelos", + "Weight for Model A": "Peso para o modelo A", + "Whether the model has pitch guidance": "Se o modelo tem orientação de pitch", + "Model architecture version": "Versão da arquitetura do modelo", + "Path to Model A": "Caminho para o Modelo A", + "Path to Model B": "Caminho para o Modelo B", + "Path to model": "Caminho para o modelo", + "Model information to be placed": "Modelo de informação a colocar", + "Fusion": "Fusão", + "Modify model information": "Modificar informações do modelo", + "Path to Model": "Caminho para o modelo", + "Model information to be modified": "Modelo de informação a modificar", + "Save file name": "Guardar nome de ficheiro", + "Modify": "Modificar", + "View model information": "Ver informações do modelo", + "View": "View", + "Model extraction": "Extração do modelo", + "Model conversion": "Conversão de modelo", + "Pth file": "Arquivo Pth", + "Output of the pth file": "Saída do arquivo pth", + "# How to Report an Issue on GitHub": "# Como relatar um problema no GitHub", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Clique no botão 'Gravar tela' abaixo para começar a gravar o problema que você está enfrentando.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Depois de terminar de gravar o problema, clique no botão 'Parar gravação' (o mesmo botão, mas a etiqueta muda dependendo se você está gravando ativamente ou não).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Vá para [GitHub Issues](https://github.com/IAHispano/Applio/issues) e clique no botão 'New Issue'.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Preencha o modelo de problema fornecido, garantindo incluir detalhes conforme necessário, e utilize a seção de ativos para carregar o arquivo gravado da etapa anterior.", + "Record Screen": "Gravar tela", + "Record": "Gravar", + "Stop Recording": "Parar gravação", + "Introduce the model .pth path": "Introduza o caminho .pth do modelo", + "See Model Information": "Consulte as informações do modelo", + "## Download Model": "## Baixar Modelo", + "Model Link": "Link do modelo", + "Introduce the model link": "Introduza o link do modelo", + "Download Model": "Baixar Modelo", + "## Drop files": "## Soltar arquivos", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "Arraste o arquivo .pth e o arquivo .index para este espaço. Arraste um e depois o outro.", + "TTS Voices": "Vozes TTS", + "Text to Synthesize": "Texto a sintetizar", + "Enter text to synthesize": "Insira texto para sintetizar", + "Output Path for TTS Audio": "Caminho de saída para áudio TTS", + "Output Path for RVC Audio": "Caminho de saída para áudio RVC", + "Enable Applio integration with Discord presence": "Presença do Applio" +} diff --git a/assets/i18n/languages/pt_PT.json b/assets/i18n/languages/pt_PT.json new file mode 100644 index 0000000000000000000000000000000000000000..487bd045c960825ccd47ca597731118fc998d3ca --- /dev/null +++ b/assets/i18n/languages/pt_PT.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "A melhor ferramenta de clonagem de voz, meticulosamente otimizada para potência, modularidade e experiência de fácil utilização incomparáveis.", + "This section contains some extra utilities that often may be in experimental phases.": "Esta seção contém alguns utilitários extras que muitas vezes podem estar em fases experimentais.", + "Output Information": "Informações de saída", + "The output information will be displayed here.": "As informações de saída serão exibidas aqui.", + "Inference": "Inferência", + "Train": "Trem", + "Extra": "Extra", + "Merge Audios": "Mesclar áudios", + "Processing": "Processamento", + "Audio Analyzer": "Analisador de áudio", + "Model Information": "Informações do modelo", + "Plugins": "Plug-ins", + "Download": "Baixar", + "Report a Bug": "Relatar um bug", + "Settings": "Configurações", + "Preprocess": "Pré-processar", + "Model Name": "Nome do modelo", + "Name of the new model.": "Nome do novo modelo.", + "Enter model name": "Digite o nome do modelo", + "Dataset Path": "Caminho do conjunto de dados", + "Path to the dataset folder.": "Caminho para a pasta do conjunto de dados.", + "Refresh Datasets": "Atualizar conjuntos de dados", + "Dataset Creator": "Criador de conjunto de dados", + "Dataset Name": "Nome do conjunto de dados", + "Name of the new dataset.": "Nome do novo conjunto de dados.", + "Enter dataset name": "Insira o nome do conjunto de dados", + "Upload Audio Dataset": "Carregar conjunto de dados de áudio", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "O arquivo de áudio foi adicionado com êxito ao conjunto de dados. Clique no botão de pré-processo.", + "Enter dataset path": "Inserir caminho do conjunto de dados", + "Sampling Rate": "Taxa de amostragem", + "The sampling rate of the audio files.": "A taxa de amostragem dos arquivos de áudio.", + "RVC Version": "Versão RVC", + "The RVC version of the model.": "A versão RVC do modelo.", + "Preprocess Dataset": "Pré-processar conjunto de dados", + "Extract": "Extrair", + "Hop Length": "Comprimento do salto", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Denota a duração necessária para que o sistema faça a transição para uma mudança de tom significativa. Comprimentos de salto menores requerem mais tempo para inferência, mas tendem a produzir maior precisão de pitch.", + "Batch Size": "Tamanho do lote", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "É aconselhável alinhá-lo com a VRAM disponível da sua GPU. Uma configuração de 4 oferece precisão aprimorada, mas processamento mais lento, enquanto 8 fornece resultados mais rápidos e padrão.", + "Save Every Epoch": "Salve todas as épocas", + "Determine at how many epochs the model will saved at.": "Determine em quantas épocas o modelo será salvo.", + "Total Epoch": "Época Total", + "Specifies the overall quantity of epochs for the model training process.": "Especifica a quantidade total de épocas para o processo de treinamento do modelo.", + "Pretrained": "Pré-treinado", + "Save Only Latest": "Salvar somente as últimas", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Habilitar essa configuração resultará nos arquivos G e D salvando apenas suas versões mais recentes, efetivamente conservando espaço de armazenamento.", + "Save Every Weights": "Economize todos os pesos", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Essa configuração permite que você salve os pesos do modelo na conclusão de cada época.", + "Custom Pretrained": "Pré-treinado personalizado", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "A utilização de modelos pré-treinados personalizados pode levar a resultados superiores, pois a seleção dos modelos pré-treinados mais adequados adaptados ao caso de uso específico pode melhorar significativamente o desempenho.", + "Upload Pretrained Model": "Carregar modelo pré-treinado", + "Refresh Custom Pretraineds": "Atualizar pré-treinados personalizados", + "Pretrained Custom Settings": "Configurações personalizadas pré-treinadas", + "The file you dropped is not a valid pretrained file. Please try again.": "O arquivo descartado não é um arquivo pré-treinado válido. Tente novamente.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "Clique no botão Atualizar para ver o arquivo pré-treinado no menu suspenso.", + "Pretrained G Path": "G pré-treinado personalizado", + "Pretrained D Path": "D pré-treinado personalizado", + "GPU Settings": "Configurações da GPU", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Define configurações avançadas de GPU, recomendadas para usuários com melhor arquitetura de GPU.", + "GPU Custom Settings": "Configurações personalizadas da GPU", + "GPU Number": "Número da GPU", + "0 to ∞ separated by -": "0 a ∞ separados por -", + "GPU Information": "Informações da GPU", + "Pitch Guidance": "Orientação de Pitch", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Ao empregar a orientação de pitch, torna-se viável espelhar a entonação da voz original, incluindo seu pitch. Esta característica é particularmente valiosa para o canto e outros cenários onde preservar a melodia original ou padrão de tom é essencial.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilize modelos pré-treinados ao treinar seus próprios. Essa abordagem reduz a duração do treinamento e melhora a qualidade geral.", + "Extract Features": "Recursos de extração", + "Start Training": "Comece a Treinar", + "Generate Index": "Gerar índice", + "Voice Model": "Modelo de Voz", + "Select the voice model to use for the conversion.": "Selecione o modelo de voz a ser usado para a conversão.", + "Index File": "Arquivo de índice", + "Select the index file to use for the conversion.": "Selecione o arquivo de índice a ser usado para a conversão.", + "Refresh": "Atualizar", + "Unload Voice": "Descarregar voz", + "Single": "Único", + "Upload Audio": "Carregar áudio", + "Select Audio": "Selecione Áudio", + "Select the audio to convert.": "Selecione o áudio a ser convertido.", + "Advanced Settings": "Configurações avançadas", + "Clear Outputs (Deletes all audios in assets/audios)": "Limpar saídas (exclui todos os áudios em ativos/áudios)", + "Custom Output Path": "Caminho de saída personalizado", + "Output Path": "Caminho de saída", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "O caminho onde o áudio de saída será salvo, por padrão em ativos/áudios/output.wav", + "Split Audio": "Áudio dividido", + "Split the audio into chunks for inference to obtain better results in some cases.": "Divida o áudio em pedaços para inferência para obter melhores resultados em alguns casos.", + "Autotune": "Autotune", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "Aplique um autotune suave às suas inferências, recomendado para conversões de canto.", + "Clean Audio": "Áudio limpo", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Limpe sua saída de áudio usando algoritmos de detecção de ruído, recomendados para falar áudios.", + "Clean Strength": "Força Limpa", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Defina o nível de limpeza para o áudio desejado, quanto mais você aumentá-lo, mais ele será limpo, mas é possível que o áudio seja mais compactado.", + "Pitch": "Campo", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "Defina o tom do áudio, quanto maior o valor, maior o pitch.", + "Filter Radius": "Raio do filtro", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Se o número for maior ou igual a três, empregar a filtragem mediana nos resultados de tom coletados tem o potencial de diminuir a respiração.", + "Search Feature Ratio": "Taxa de recursos de pesquisa", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influência exercida pelo arquivo de índice; quanto maior o valor corresponde maior a influência. No entanto, optar por valores mais baixos pode ajudar a mitigar artefatos presentes no áudio.", + "Volume Envelope": "Volume Envelope", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Substitua ou misture com o envelope de volume da saída. Quanto mais próxima a proporção estiver de 1, mais o envelope de saída será empregado.", + "Protect Voiceless Consonants": "Proteja as consoantes surdas", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Proteja consoantes distintas e sons respiratórios para evitar rasgos eletroacústicos e outros artefatos. Puxar o parâmetro para seu valor máximo de 0,5 oferece proteção abrangente. No entanto, a redução desse valor pode diminuir a extensão da proteção e, ao mesmo tempo, potencialmente atenuar o efeito de indexação.", + "Pitch extraction algorithm": "Algoritmo de extração de pitch", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritmo de extração de pitch para usar na conversão de áudio. O algoritmo padrão é rmvpe, que é recomendado para a maioria dos casos.", + "Convert": "Converter", + "Export Audio": "Exportar áudio", + "Batch": "Lote", + "Input Folder": "Pasta de entrada", + "Select the folder containing the audios to convert.": "Selecione a pasta que contém os áudios a serem convertidos.", + "Enter input path": "Insira o caminho de entrada", + "Output Folder": "Pasta de saída", + "Select the folder where the output audios will be saved.": "Selecione a pasta onde os áudios de saída serão salvos.", + "Enter output path": "Insira o caminho de saída", + "Get information about the audio": "Obter informações sobre o áudio", + "Information about the audio file": "Informações sobre o arquivo de áudio", + "Waiting for information...": "Aguardando informações...", + "## Voice Blender": "## Liquidificador de Voz", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Selecione dois modelos de voz, defina a porcentagem de mistura desejada e misture-os em uma voz totalmente nova.", + "Voice Blender": "Liquidificador de voz", + "Drag and drop your model here": "Arraste e solte seu modelo aqui", + "You can also use a custom path.": "Você também pode usar um caminho personalizado.", + "Blend Ratio": "Proporção de mistura", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Ajustar a posição mais para um lado ou para o outro tornará o modelo mais semelhante ao primeiro ou ao segundo.", + "Fusion": "Fusão", + "Path to Model": "Caminho para o modelo", + "Enter path to model": "Insira o caminho para o modelo", + "Model information to be placed": "Informações do modelo a ser colocado", + "Inroduce the model information": "Inroduce as informações do modelo", + "The information to be placed in the model (You can leave it blank or put anything).": "As informações a serem colocadas no modelo (Você pode deixá-lo em branco ou colocar qualquer coisa).", + "View model information": "Exibir informações do modelo", + "Introduce the model pth path": "Apresentar o caminho pth do modelo", + "View": "Vista", + "Model extraction": "Extração do modelo", + "Model conversion": "Conversão de modelos", + "Pth file": "Arquivo Pth", + "Output of the pth file": "Saída do arquivo pth", + "# How to Report an Issue on GitHub": "# Como relatar um problema no GitHub", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Clique no botão 'Gravar tela' abaixo para começar a gravar o problema que você está enfrentando.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Depois de terminar de gravar o problema, clique no botão 'Parar gravação' (o mesmo botão, mas a etiqueta muda dependendo se você está gravando ativamente ou não).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Vá para [Problemas do GitHub](https://github.com/IAHispano/Applio/issues) e clique no botão 'Novo problema'.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Preencha o modelo de problema fornecido, garantindo incluir detalhes conforme necessário, e utilize a seção de ativos para carregar o arquivo gravado da etapa anterior.", + "Record Screen": "Tela de gravação", + "Record": "Registro", + "Stop Recording": "Parar gravação", + "Introduce the model .pth path": "Apresentar o caminho .pth do modelo", + "See Model Information": "Ver informações do modelo", + "## Download Model": "## Baixar Modelo", + "Model Link": "Link do modelo", + "Introduce the model link": "Apresentar o link do modelo", + "Download Model": "Download do Modelo", + "## Drop files": "## Soltar arquivos", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "Arraste o arquivo .pth e o arquivo .index para este espaço. Arraste um e depois o outro.", + "TTS Voices": "Vozes TTS", + "Select the TTS voice to use for the conversion.": "Selecione a voz TTS a ser usada para a conversão.", + "Text to Synthesize": "Texto para sintetizar", + "Enter the text to synthesize.": "Digite o texto a ser sintetizado.", + "Or you can upload a .txt file": "Ou você pode carregar um arquivo .txt", + "Enter text to synthesize": "Digite o texto para sintetizar", + "Output Path for TTS Audio": "Caminho de saída para áudio TTS", + "Output Path for RVC Audio": "Caminho de saída para áudio RVC", + "Enable Applio integration with Discord presence": "Habilitar a integração do Applio com a presença do Discord", + "It will activate the possibility of displaying the current Applio activity in Discord.": "Ele ativará a possibilidade de exibir a atividade atual do Applio no Discord.", + "Enable Applio integration with applio.org/models using flask": "Habilitar a integração do Applio com applio.org/models usando frasco", + "It will activate the possibility of downloading models with a click from the website.": "Ele ativará a possibilidade de baixar modelos com um clique no site.", + "Theme": "Tema", + "Select the theme you want to use. (Requires restarting Applio)": "Selecione o tema que deseja usar. (Requer reiniciar o Applio)", + "Language": "Idioma", + "Select the language you want to use. (Requires restarting Applio)": "Selecione o idioma que deseja usar. (Requer reiniciar o Applio)", + "Plugin Installer": "Instalador de Plug-ins", + "Drag your plugin.zip to install it": "Arraste o plugin.zip para instalá-lo", + "Version Checker": "Verificador de versão", + "Check which version of Applio is the latest to see if you need to update.": "Verifique qual versão do Applio é a mais recente para ver se você precisa atualizar.", + "Check for updates": "Verificar se há atualizações" +} \ No newline at end of file diff --git a/assets/i18n/languages/ro_RO.json b/assets/i18n/languages/ro_RO.json new file mode 100644 index 0000000000000000000000000000000000000000..473bcf9d5da82790fa50eb5aa8770eb13c92b2e4 --- /dev/null +++ b/assets/i18n/languages/ro_RO.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "Cel mai bun instrument de clonare a vocii, optimizat meticulos pentru putere, modularitate și experiență ușor de utilizat.", + "This section contains some extra utilities that often may be in experimental phases.": "Această secțiune conține câteva utilități suplimentare care pot fi adesea în faze experimentale.", + "Output Information": "Informații despre ieșire", + "The output information will be displayed here.": "Informațiile de ieșire vor fi afișate aici.", + "Inference": "Deducţie", + "Train": "Tren", + "Extra": "Superfluu", + "Merge Audios": "Îmbinare audio", + "Processing": "Prelucrare", + "Audio Analyzer": "Analizor audio", + "Model Information": "Informații despre model", + "Plugins": "Plugin-uri", + "Download": "Descărca", + "Report a Bug": "Raportați o eroare", + "Settings": "Setări", + "Preprocess": "Preproces", + "Model Name": "Numele modelului", + "Name of the new model.": "Numele noului model.", + "Enter model name": "Introduceți numele modelului", + "Dataset Path": "Calea setului de date", + "Path to the dataset folder.": "Calea către folderul setului de date.", + "Refresh Datasets": "Reîmprospătarea seturilor de date", + "Dataset Creator": "Creator de seturi de date", + "Dataset Name": "Numele setului de date", + "Name of the new dataset.": "Numele noului set de date.", + "Enter dataset name": "Introduceți numele setului de date", + "Upload Audio Dataset": "Încărcați setul de date audio", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Fișierul audio a fost adăugat cu succes la setul de date. Vă rugăm să faceți clic pe butonul de preprocesare.", + "Enter dataset path": "Introduceți calea setului de date", + "Sampling Rate": "Rata de eșantionare", + "The sampling rate of the audio files.": "Rata de eșantionare a fișierelor audio.", + "RVC Version": "Versiunea RVC", + "The RVC version of the model.": "Versiunea RVC a modelului.", + "Preprocess Dataset": "Set de date preproces", + "Extract": "Extract", + "Hop Length": "Lungimea hameiului", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Denotă durata necesară pentru ca sistemul să treacă la o schimbare semnificativă a înălțimii. Lungimile mai mici ale hameiului necesită mai mult timp pentru inferență, dar tind să producă o precizie mai mare a pasului.", + "Batch Size": "Mărimea lotului", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Este recomandabil să îl aliniați cu VRAM disponibil al GPU-ului. O setare de 4 oferă o precizie îmbunătățită, dar o procesare mai lentă, în timp ce 8 oferă rezultate mai rapide și standard.", + "Save Every Epoch": "Salvați fiecare epocă", + "Determine at how many epochs the model will saved at.": "Determinați la câte epoci va fi salvat modelul.", + "Total Epoch": "Epoca totală", + "Specifies the overall quantity of epochs for the model training process.": "Specifică numărul total de epoci pentru procesul de instruire a modelului.", + "Pretrained": "Preinstruit", + "Save Only Latest": "Salvați numai cele mai recente", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Activarea acestei setări va avea ca rezultat salvarea fișierelor G și D numai a celor mai recente versiuni, economisind în mod eficient spațiul de stocare.", + "Save Every Weights": "Economisiți fiecare greutate", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Această setare vă permite să economisiți greutățile modelului la sfârșitul fiecărei epoci.", + "Custom Pretrained": "Personalizat Pretrained", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Utilizarea modelelor personalizate pre-antrenate poate duce la rezultate superioare, deoarece selectarea celor mai potrivite modele pre-antrenate adaptate cazului de utilizare specific poate îmbunătăți semnificativ performanța.", + "Upload Pretrained Model": "Încărcați modelul preinstruit", + "Refresh Custom Pretraineds": "Reîmprospătați preinstruiții personalizați", + "Pretrained Custom Settings": "Setări personalizate pre-instruite", + "The file you dropped is not a valid pretrained file. Please try again.": "Fișierul pe care l-ați scăpat nu este un fișier preinstruit valid. Vă rugăm să încercați din nou.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "Faceți clic pe butonul de reîmprospătare pentru a vedea fișierul preantrenat în meniul derulant.", + "Pretrained G Path": "G personalizat preantrenat", + "Pretrained D Path": "Personalizat Pretrained D", + "GPU Settings": "Setări GPU", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Setează setări GPU avansate, recomandate utilizatorilor cu o arhitectură GPU mai bună.", + "GPU Custom Settings": "Setări personalizate GPU", + "GPU Number": "Număr GPU", + "0 to ∞ separated by -": "0 până la ∞ separate de -", + "GPU Information": "Informații GPU", + "Pitch Guidance": "Pitch Guidance", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Prin utilizarea ghidării tonului, devine fezabilă oglindirea intonației vocii originale, inclusiv a înălțimii acesteia. Această caracteristică este deosebit de valoroasă pentru cântat și alte scenarii în care păstrarea melodiei originale sau a modelului de înălțime este esențială.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Utilizați modele pre-antrenate atunci când vă antrenați propriul. Această abordare reduce durata antrenamentului și îmbunătățește calitatea generală.", + "Extract Features": "Extrageți caracteristicile", + "Start Training": "Începeți instruirea", + "Generate Index": "Generare index", + "Voice Model": "Model vocal", + "Select the voice model to use for the conversion.": "Selectați modelul vocal de utilizat pentru conversie.", + "Index File": "Fișier index", + "Select the index file to use for the conversion.": "Selectați fișierul index de utilizat pentru conversie.", + "Refresh": "Împrospăta", + "Unload Voice": "Descărcare voce", + "Single": "Singur", + "Upload Audio": "Încărcare audio", + "Select Audio": "Selectați Audio", + "Select the audio to convert.": "Selectați sunetul de convertit.", + "Advanced Settings": "Setări avansate", + "Clear Outputs (Deletes all audios in assets/audios)": "Ștergeți ieșirile (Șterge toate audio-urile din active / audio)", + "Custom Output Path": "Cale de ieșire personalizată", + "Output Path": "Cale de ieșire", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "Calea în care va fi salvat sunetul de ieșire, în mod implicit în active / audio / output.wav", + "Split Audio": "Împărțire audio", + "Split the audio into chunks for inference to obtain better results in some cases.": "Împărțiți sunetul în bucăți pentru inferență pentru a obține rezultate mai bune în unele cazuri.", + "Autotune": "Reglare automată", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "Aplicați o reglare automată ușoară la inferențele dvs., recomandată pentru conversiile de cântat.", + "Clean Audio": "Sunet curat", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Curățați ieșirea audio utilizând algoritmi de detectare a zgomotului, recomandați pentru enunțarea sunetului.", + "Clean Strength": "Rezistență curată", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Setați nivelul de curățare la sunetul dorit, cu cât îl măriți mai mult, cu atât se va curăța mai mult, dar este posibil ca sunetul să fie mai comprimat.", + "Pitch": "Smoală", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "Setați înălțimea sunetului, cu cât este mai mare valoarea, cu atât este mai mare înălțimea.", + "Filter Radius": "Raza filtrului", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Dacă numărul este mai mare sau egal cu trei, utilizarea filtrării mediane pe rezultatele tonului colectat are potențialul de a scădea respirația.", + "Search Feature Ratio": "Raportul caracteristicilor de căutare", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Influența exercitată de fișierul index; O valoare mai mare corespunde unei influențe mai mari. Cu toate acestea, optarea pentru valori mai mici poate ajuta la atenuarea artefactelor prezente în audio.", + "Volume Envelope": "Plic de volum", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Înlocuiți sau amestecați cu plicul de volum al ieșirii. Cu cât raportul este mai apropiat de 1, cu atât este folosit mai mult plicul de ieșire.", + "Protect Voiceless Consonants": "Protejați consoanele fără voce", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Protejați consoanele distincte și sunetele de respirație pentru a preveni ruperea electro-acustică și alte artefacte. Tragerea parametrului la valoarea maximă de 0,5 oferă o protecție completă. Cu toate acestea, reducerea acestei valori ar putea reduce gradul de protecție, atenuând în același timp efectul de indexare.", + "Pitch extraction algorithm": "Algoritm de extracție a pitch-ului", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Algoritm de extragere a pitch-ului de utilizat pentru conversia audio. Algoritmul implicit este rmvpe, care este recomandat în majoritatea cazurilor.", + "Convert": "Converti", + "Export Audio": "Exportați audio", + "Batch": "Lot", + "Input Folder": "Folder de intrare", + "Select the folder containing the audios to convert.": "Selectați folderul care conține audio-urile de convertit.", + "Enter input path": "Introduceți calea de intrare", + "Output Folder": "Dosar de ieșire", + "Select the folder where the output audios will be saved.": "Selectați folderul în care vor fi salvate audio-urile de ieșire.", + "Enter output path": "Introduceți calea de ieșire", + "Get information about the audio": "Obțineți informații despre audio", + "Information about the audio file": "Informații despre fișierul audio", + "Waiting for information...": "În așteptarea informațiilor...", + "## Voice Blender": "## Blender de voce", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Selectați două modele de voce, setați procentajul de amestec dorit și amestecați-le într-o voce complet nouă.", + "Voice Blender": "Blender de voce", + "Drag and drop your model here": "Glisați și fixați modelul aici", + "You can also use a custom path.": "De asemenea, puteți utiliza un traseu personalizat.", + "Blend Ratio": "Raport de amestecare", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Ajustarea poziției mai mult spre o parte sau alta va face modelul mai asemănător cu primul sau al doilea.", + "Fusion": "Fuziune", + "Path to Model": "Calea către model", + "Enter path to model": "Introduceți calea către model", + "Model information to be placed": "Informații despre model care trebuie plasate", + "Inroduce the model information": "Inroduceți informațiile despre model", + "The information to be placed in the model (You can leave it blank or put anything).": "Informațiile care trebuie plasate în model (Puteți să-l lăsați necompletat sau să puneți orice).", + "View model information": "Vizualizarea informațiilor despre model", + "Introduce the model pth path": "Introduceți calea pth a modelului", + "View": "Vedere", + "Model extraction": "Extragerea modelului", + "Model conversion": "Conversia modelului", + "Pth file": "Fișier Pth", + "Output of the pth file": "Ieșirea fișierului pth", + "# How to Report an Issue on GitHub": "# Cum să raportați o problemă pe GitHub", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Faceți clic pe butonul \"Ecran de înregistrare\" de mai jos pentru a începe înregistrarea problemei pe care o întâmpinați.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. După ce ați terminat de înregistrat problema, faceți clic pe butonul \"Opriți înregistrarea\" (același buton, dar eticheta se schimbă în funcție de înregistrarea activă sau nu).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Accesați [Probleme GitHub] (https://github.com/IAHispano/Applio/issues) și faceți clic pe butonul \"Problemă nouă\".", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Completați șablonul de problemă furnizat, asigurându-vă că includeți detalii după cum este necesar și utilizați secțiunea active pentru a încărca fișierul înregistrat din pasul anterior.", + "Record Screen": "Ecran de înregistrare", + "Record": "Disc", + "Stop Recording": "Opriți înregistrarea", + "Introduce the model .pth path": "Introducerea căii .pth a modelului", + "See Model Information": "Consultați informațiile despre model", + "## Download Model": "## Descărcați modelul", + "Model Link": "Model Link", + "Introduce the model link": "Introduceți linkul modelului", + "Download Model": "Descărcați modelul", + "## Drop files": "## Aruncați fișiere", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "Glisați fișierul .pth și fișierul .index în acest spațiu. Trageți unul și apoi celălalt.", + "TTS Voices": "Voci TTS", + "Select the TTS voice to use for the conversion.": "Selectați vocea TTS de utilizat pentru conversie.", + "Text to Synthesize": "Text pentru sintetizare", + "Enter the text to synthesize.": "Introduceți textul pentru a sintetiza.", + "Or you can upload a .txt file": "Sau puteți încărca un fișier .txt", + "Enter text to synthesize": "Introduceți text pentru sintetizare", + "Output Path for TTS Audio": "Cale de ieșire pentru TTS Audio", + "Output Path for RVC Audio": "Cale de ieșire pentru RVC Audio", + "Enable Applio integration with Discord presence": "Activați integrarea Applio cu prezența Discord", + "It will activate the possibility of displaying the current Applio activity in Discord.": "Acesta va activa posibilitatea afișării activității curente Applio în Discord.", + "Enable Applio integration with applio.org/models using flask": "Activați integrarea Applio cu applio.org/models folosind balonul", + "It will activate the possibility of downloading models with a click from the website.": "Acesta va activa posibilitatea de a descărca modele cu un clic de pe site.", + "Theme": "Temă", + "Select the theme you want to use. (Requires restarting Applio)": "Selectați tema pe care doriți să o utilizați. (Necesită repornirea Applio)", + "Language": "Limbă", + "Select the language you want to use. (Requires restarting Applio)": "Selectați limba pe care doriți să o utilizați. (Necesită repornirea Applio)", + "Plugin Installer": "Instalator de plugin-uri", + "Drag your plugin.zip to install it": "Trageți plugin.zip pentru a-l instala", + "Version Checker": "Verificator de versiuni", + "Check which version of Applio is the latest to see if you need to update.": "Verificați ce versiune de Applio este cea mai recentă pentru a vedea dacă trebuie să actualizați.", + "Check for updates": "Căutați actualizări" +} \ No newline at end of file diff --git a/assets/i18n/languages/ru_RU.json b/assets/i18n/languages/ru_RU.json new file mode 100644 index 0000000000000000000000000000000000000000..641127eab84fdd4929afba7865a2905bc505b17c --- /dev/null +++ b/assets/i18n/languages/ru_RU.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "Идеальный инструмент для клонирования голоса, тщательно оптимизированный для непревзойденной мощности, модульности и удобства использования.", + "This section contains some extra utilities that often may be in experimental phases.": "Этот раздел содержит некоторые дополнительные утилиты, которые часто находятся на экспериментальных стадиях.", + "Output Information": "Выходная информация", + "The output information will be displayed here.": "Здесь будет отображена выходная информация.", + "Inference": "Вывод", + "Train": "Поезд", + "Extra": "Дополнительный", + "Merge Audios": "Слияние аудиозаписей", + "Processing": "Обработка", + "Audio Analyzer": "Анализатор звука", + "Model Information": "Информация о модели", + "Plugins": "Плагины", + "Download": "Загружать", + "Report a Bug": "Сообщить об ошибке", + "Settings": "Параметры", + "Preprocess": "Предварительной обработки", + "Model Name": "Название модели", + "Name of the new model.": "Название новой модели.", + "Enter model name": "Введите название модели", + "Dataset Path": "Путь к набору данных", + "Path to the dataset folder.": "Путь к папке набора данных.", + "Refresh Datasets": "Обновление наборов данных", + "Dataset Creator": "Создатель набора данных", + "Dataset Name": "Имя набора данных", + "Name of the new dataset.": "Имя нового набора данных.", + "Enter dataset name": "Введите имя набора данных", + "Upload Audio Dataset": "Загрузка набора аудиоданных", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Аудиофайл успешно добавлен в набор данных. Пожалуйста, нажмите кнопку предварительной обработки.", + "Enter dataset path": "Введите путь к набору данных", + "Sampling Rate": "Частота дискретизации", + "The sampling rate of the audio files.": "Частота дискретизации аудиофайлов.", + "RVC Version": "Версия РВК", + "The RVC version of the model.": "Версия модели РВК.", + "Preprocess Dataset": "Набор данных предварительной обработки", + "Extract": "Экстракт", + "Hop Length": "Длина хмеля", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Обозначает время, необходимое системе для перехода к значительному изменению высоты тона. Меньшая длина скачка требует больше времени для логического вывода, но, как правило, обеспечивает более высокую точность шага.", + "Batch Size": "Размер партии", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Рекомендуется выровнять его с доступной видеопамятью вашего графического процессора. Значение 4 обеспечивает повышенную точность, но более медленную обработку, в то время как значение 8 обеспечивает более быстрые и стандартные результаты.", + "Save Every Epoch": "Сохраняйте каждую эпоху", + "Determine at how many epochs the model will saved at.": "Определите, в скольких эпохах будет сохраняться модель.", + "Total Epoch": "Общая эпоха", + "Specifies the overall quantity of epochs for the model training process.": "Задает общее количество эпох для процесса обучения модели.", + "Pretrained": "Предварительно обученный", + "Save Only Latest": "Сохранить только последние новости", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Включение этого параметра приведет к тому, что файлы G и D будут сохранять только свои самые последние версии, эффективно экономя место на диске.", + "Save Every Weights": "Сохраняйте все веса", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Эта настройка позволяет сохранять весовые коэффициенты модели в конце каждой эпохи.", + "Custom Pretrained": "Пользовательский предварительно обученный", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Использование пользовательских предварительно обученных моделей может привести к превосходным результатам, так как выбор наиболее подходящих предварительно обученных моделей, адаптированных к конкретному сценарию использования, может значительно повысить производительность.", + "Upload Pretrained Model": "Отправка предварительно обученной модели", + "Refresh Custom Pretraineds": "Обновление пользовательских предварительно обученных объектов", + "Pretrained Custom Settings": "Предварительно обученные пользовательские параметры", + "The file you dropped is not a valid pretrained file. Please try again.": "Файл, который вы удалили, не является допустимым предварительно обученным файлом. Повторите попытку.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "Нажмите кнопку обновления, чтобы увидеть предварительно обученный файл в раскрывающемся меню.", + "Pretrained G Path": "Пользовательский предварительно обученный G", + "Pretrained D Path": "Пользовательский предварительно обученный D", + "GPU Settings": "Настройки графического процессора", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Устанавливает расширенные настройки графического процессора, рекомендуемые для пользователей с улучшенной архитектурой графического процессора.", + "GPU Custom Settings": "Пользовательские настройки графического процессора", + "GPU Number": "Номер графического процессора", + "0 to ∞ separated by -": "от 0 до ∞ разделенных -", + "GPU Information": "Информация о графическом процессоре", + "Pitch Guidance": "Руководство по питчу", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Используя управление высотой тона, становится возможным отразить интонацию исходного голоса, включая его высоту. Эта функция особенно ценна для пения и других сценариев, где важно сохранить оригинальную мелодию или тональность.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Используйте предварительно обученные модели при обучении своих собственных. Такой подход сокращает продолжительность обучения и повышает общее качество.", + "Extract Features": "Извлечение объектов", + "Start Training": "Начать обучение", + "Generate Index": "Сгенерировать индекс", + "Voice Model": "Голосовая модель", + "Select the voice model to use for the conversion.": "Выберите голосовую модель, которая будет использоваться для преобразования.", + "Index File": "Индексный файл", + "Select the index file to use for the conversion.": "Выберите индексный файл, который будет использоваться для преобразования.", + "Refresh": "Освежать", + "Unload Voice": "Выгрузить голос", + "Single": "Единственный", + "Upload Audio": "Загрузить аудио", + "Select Audio": "Выберите Аудио", + "Select the audio to convert.": "Выберите аудио для преобразования.", + "Advanced Settings": "Расширенные настройки", + "Clear Outputs (Deletes all audios in assets/audios)": "Clear Outputs (Удаляет все аудиозаписи в assets/audios)", + "Custom Output Path": "Пользовательский выходной путь", + "Output Path": "Выходной путь", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "Путь, по которому будет сохранен выходной звук, по умолчанию в assets/audios/output.wav", + "Split Audio": "Разделенное аудио", + "Split the audio into chunks for inference to obtain better results in some cases.": "Разделите аудио на фрагменты для вывода, чтобы получить лучшие результаты в некоторых случаях.", + "Autotune": "Автотюн", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "Примените мягкую автонастройку к своим выводам, рекомендуемую для певческих преобразований.", + "Clean Audio": "Чистый звук", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Очистите аудиовыход с помощью алгоритмов обнаружения шума, рекомендуемых для проговаривания аудио.", + "Clean Strength": "Чистая прочность", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Установите желаемый уровень очистки звука, чем больше вы его увеличите, тем больше он будет очищаться, но возможно, что звук будет более сжатым.", + "Pitch": "Смола", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "Установите высоту звука, чем выше значение, тем выше высота тона.", + "Filter Radius": "Радиус фильтра", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Если это число больше или равно трем, использование медианной фильтрации по собранным результатам тона может привести к снижению дыхания.", + "Search Feature Ratio": "Соотношение объектов поиска", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Влияние, оказываемое индексным файлом; Чем выше значение, тем больше влияние. Однако выбор более низких значений может помочь смягчить артефакты, присутствующие в аудио.", + "Volume Envelope": "Огибающая объема", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Замените или смешайте с огибающей громкости выхода. Чем ближе отношение к 1, тем больше используется выходная огибающая.", + "Protect Voiceless Consonants": "Защита глухих согласных", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Защитите отчетливые согласные и звуки дыхания, чтобы предотвратить электроакустические разрывы и другие артефакты. Извлечение параметра до максимального значения 0,5 обеспечивает комплексную защиту. Однако уменьшение этого значения может снизить степень защиты, потенциально смягчив эффект индексирования.", + "Pitch extraction algorithm": "Алгоритм извлечения высоты тона", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Алгоритм извлечения высоты тона, используемый для преобразования звука. По умолчанию используется алгоритм rmvpe, который рекомендуется для большинства случаев.", + "Convert": "Обращать", + "Export Audio": "Экспорт аудио", + "Batch": "Партия", + "Input Folder": "Входная папка", + "Select the folder containing the audios to convert.": "Выберите папку, содержащую аудиофайлы для преобразования.", + "Enter input path": "Введите путь ввода", + "Output Folder": "Выходная папка", + "Select the folder where the output audios will be saved.": "Выберите папку, в которой будут сохранены выходные аудиозаписи.", + "Enter output path": "Введите выходной путь", + "Get information about the audio": "Получение информации об аудио", + "Information about the audio file": "Информация об аудиофайле", + "Waiting for information...": "Жду информации...", + "## Voice Blender": "## Голосовой блендер", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Выберите две модели голоса, установите желаемый процент смешивания и смешайте их в совершенно новый голос.", + "Voice Blender": "Голосовой блендер", + "Drag and drop your model here": "Перетащите сюда свою модель", + "You can also use a custom path.": "Вы также можете использовать пользовательский путь.", + "Blend Ratio": "Соотношение смешивания", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Изменение положения в ту или иную сторону сделает модель более похожей на первую или вторую.", + "Fusion": "Слияние", + "Path to Model": "Путь к модели", + "Enter path to model": "Введите путь к модели", + "Model information to be placed": "Информация о модели, которая будет размещена", + "Inroduce the model information": "Ввод информации о модели", + "The information to be placed in the model (You can leave it blank or put anything).": "Информация, которая будет размещена в модели (Вы можете оставить ее пустой или поставить что угодно).", + "View model information": "Просмотр информации о модели", + "Introduce the model pth path": "Знакомство с моделью pth-пути", + "View": "Вид", + "Model extraction": "Извлечение модели", + "Model conversion": "Преобразование модели", + "Pth file": "P-й файл", + "Output of the pth file": "Вывод p-го файла", + "# How to Report an Issue on GitHub": "# Как сообщить о проблеме на GitHub", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Нажмите кнопку «Записать экран» ниже, чтобы начать запись проблемы, с которой вы столкнулись.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. После того, как вы закончили запись задачи, нажмите кнопку «Остановить запись» (та же кнопка, но метка меняется в зависимости от того, ведете ли вы активную запись или нет).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Перейдите в [GitHub Issues](https://github.com/IAHispano/Applio/issues) и нажмите кнопку «Новая проблема».", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Заполните предоставленный шаблон задачи, не забудьте включить необходимые сведения и используйте раздел ресурсов для загрузки записанного файла с предыдущего шага.", + "Record Screen": "Запись экрана", + "Record": "Запись", + "Stop Recording": "Остановить запись", + "Introduce the model .pth path": "Знакомство с моделью .pth-пути", + "See Model Information": "Посмотреть информацию о модели", + "## Download Model": "## Скачать модель", + "Model Link": "Ссылка на модель", + "Introduce the model link": "Введение ссылки на модель", + "Download Model": "Скачать модель", + "## Drop files": "## Удаление файлов", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "Перетащите файлы .pth и .index в это пространство. Перетащите один, а затем другой.", + "TTS Voices": "Голоса TTS", + "Select the TTS voice to use for the conversion.": "Выберите голос TTS, который будет использоваться для преобразования.", + "Text to Synthesize": "Синтезируемый текст", + "Enter the text to synthesize.": "Введите текст для синтеза.", + "Or you can upload a .txt file": "Или вы можете загрузить .txt файл", + "Enter text to synthesize": "Введите текст для синтеза", + "Output Path for TTS Audio": "Выходной тракт для TTS Audio", + "Output Path for RVC Audio": "Выходной тракт для RVC Audio", + "Enable Applio integration with Discord presence": "Включите интеграцию Applio с присутствием в Discord", + "It will activate the possibility of displaying the current Applio activity in Discord.": "Это активирует возможность отображения текущей активности Applio в Discord.", + "Enable Applio integration with applio.org/models using flask": "Включите интеграцию Applio с applio.org/models с помощью flask", + "It will activate the possibility of downloading models with a click from the website.": "Он активирует возможность скачивания моделей одним кликом с сайта.", + "Theme": "Тема", + "Select the theme you want to use. (Requires restarting Applio)": "Выберите тему, которую хотите использовать. (Требуется перезапуск Applio)", + "Language": "Язык", + "Select the language you want to use. (Requires restarting Applio)": "Выберите язык, который вы хотите использовать. (Требуется перезапуск Applio)", + "Plugin Installer": "Установщик плагинов", + "Drag your plugin.zip to install it": "Перетащите plugin.zip, чтобы установить его", + "Version Checker": "Проверка версий", + "Check which version of Applio is the latest to see if you need to update.": "Проверьте, какая версия Applio является последней, чтобы узнать, нужно ли вам обновление.", + "Check for updates": "Проверьте наличие обновлений" +} \ No newline at end of file diff --git a/assets/i18n/languages/ta-IN.json b/assets/i18n/languages/ta-IN.json new file mode 100644 index 0000000000000000000000000000000000000000..9da9bdc4320a486a202ddb515a9a680684440f44 --- /dev/null +++ b/assets/i18n/languages/ta-IN.json @@ -0,0 +1,204 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "முழுமையான குரல் குளோனிங் கருவி, அநாகரமாக ஒருமிக்க, பகுக்காதது, பயனர் உருவாக்கத்திற்கு உயரியது.\n[தமிழ் மொழிபெயர்ப்பு: Enes](https://discord.com/users/1140031358006202468)", + "This section contains some extra utilities that often may be in experimental phases.": "இந்த பிரிவில் சேர்ந்துள்ள கொடுமை கருவிகளில் சார்ந்த பல கூட்டுத்தரங்களைக் கொண்டுள்ளது.", + "Output Information": "வெளியீடு தகவல்", + "The output information will be displayed here.": "வெளியீடு தகவல் இங்கே காட்டப்படும்.", + "Inference": "கருத்து", + "Train": "பயிற்சி", + "Extra": "கூடுதல்", + "Merge Audios": "ஒரேபோனில் ஒன்றாக்குக", + "Processing": "செயலாக்கம்", + "Audio Analyzer": "ஆடியோ பகுப்பாய்வாளர்", + "Model Information": "மாதிரி தகவல்", + "Plugins": "பிளகின்கள்", + "Download": "பதிவிறக்கம்", + "Report a Bug": "பிழை அறிக்கை", + "Settings": "அமைப்புகள்", + "Preprocess": "முன்பாகவும்", + "Model Name": "மாதிரி பெயர்", + "Name of the new model.": "புதிய மாதிரி பெயர்.", + "Enter model name": "மாதிரி பெயரை உள்ளிடவும்", + "Dataset Path": "தரவுத்தொகுதி பாதை", + "Path to the dataset folder.": "தரவுத்தொகுதி கோப்புக்கு பாதை.", + "Refresh Datasets": "தரவுத்தொகுதிகளை புதுப்பிக்கவும்", + "Dataset Creator": "தரவுத்தொகுதி உருவாக்கி", + "Dataset Name": "தரவுத்தொகுதி பெயர்", + "Name of the new dataset.": "புதிய தரவுத்தொகுதி பெயர்.", + "Enter dataset name": "தரவுத்தொகுதி பெயரை உள்ளிடவும்", + "Upload Audio Dataset": "ஆடியோ தரவுத்தொகுதியை பதிவேற்றவும்", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "ஆடியோ கோப்பு தரவுத்தொகுதிக்கு வெற்றிகரமாக சேர்க்கப்பட்டுள்ளது. தயவுசெய்து முன்னிருப்பை அழுத்தவும்.", + "Enter dataset path": "தரவுத்தொகுதி பாதையை உள்ளிடவும்", + "Sampling Rate": "மாதிரி விகிதம்", + "The sampling rate of the audio files.": "ஆடியோ கோப்புகளின் மாதிரி விகிதம்.", + "RVC Version": "RVC பதிப்பு", + "The RVC version of the model.": "மாதிரி RVC பதிப்பு.", + "Preprocess Dataset": "முன்பாகவும் தரவுத்தொகுதி", + + "Embedder Model": "உள்ளீடு மாதிரி", + "Model used for learning speaker embedding.": "பேச்சாளர் உள்ளீட்டை கற்க பயன்படுத்தப்படும் மாதிரி.", + "Extract": "எக்ஸ்ட்ராக்ட்", + "Hop Length": "ஹாப் நீளம்", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "கருத்துக்கு எவ்வளவு நேரம் எடுத்துக் கொள்கிறது என்றால், அது ஒரு முக்கிய பிச் மாற்றத்திற்கு அமைந்துகொள்கின்றது. சிறிய ஹாப் நீளங்களுக்கு அதிக நேரம் தேவைப்படுகின்றது ஆனால் அவை உயரமான பிச் சரிசெய்தியை உருவாக்க உதவுகின்றன.", + "Batch Size": "பேட்ச் அளவு", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "உங்கள் GPU கிடைக்கும் கிடைச்சதை அவசியமாக உள்ளிட பரிந்திருக்கின்றது. 4 என்ற அமைப்பு உயர்த்தப்பட்ட உறுதியுள்ள சொல்லத்தைக் கொண்டுள்ளது ஆனால் அதிக நேரம் பயன்படுகின்றது, 8 அமைப்பு விரைவாக மற்றும் நிலைக்குப் பொருத்தப்படுகிறது.", + "Save Every Epoch": "ஒவ்வொரு காலமும் சேமிக்கவும்", + "Determine at how many epochs the model will saved at.": "மாதிரி எதிர்காலங்களில் எத்தனை படிப்புகளில் மாதிரியைச் சேமிக்க விரும்புகிறீர்கள்.", + "Total Epoch": "மொத்த எபக்", + "Specifies the overall quantity of epochs for the model training process.": "மாதிரி பயிற்சி செய்திகளின் மொத்த அளவை குறிப்பிடுகிறது.", + "Pretrained": "பூர்வதயாரிக", + "Save Only Latest": "கடைசியே சேமிக்கவும்", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "இந்த அமைப்பை இயக்கும் போது G மற்றும் D கோப்புகள் உங்கள் கடைசி பதிப்புகளைச் சேமிக்கும், வாயிலாக சேமிக்கப்படுகின்றன.", + "Save Every Weights": "ஒவ்வொரு எடைக்கும் சேமிக்கவும்", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "இந்த அமைப்பு உங்கள் மாதிரி பயிற்சி செய்தியின் முடிவில் மாதிரிகளை சேமிக்க அனுமதிக்கின்றது.", + "Custom Pretrained": "கஸ்டம் பூர்வதயாரிக", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "கஸ்டம் பூர்வதயாரிக மாதிரிகளை பயன்படுத்துவது சிறந்த விளக்கங்களை தரலாம், குறிப்பிடுகின்ற குழப்பத்திற்கு ஏற்றதும் பூர்வதயாரிக மாதிரிகளைத் தேர்ந்தெடுக்க உடனே அந்தக் குழப்பத்தை அபூர்வமாக செயல்படுத்தலாம்.", + "Upload Pretrained Model": "பூர்வதயாரிக மாதிரி மோடெலை பதிவேற்றவும்", + "Refresh Custom Pretraineds": "கஸ்டம் பூர்வதயாரிகளை புதுப்பிக்கவும்", + "Pretrained Custom Settings": "கஸ்டம் பூர்வதயாரிக அமைப்புகள்", + "The file you dropped is not a valid pretrained file. Please try again.": "நீங்கள் பொருத்தவில்லை என்றால் பூர்வதயாரிக கோப்பு அல்ல. மீண்டும் முயற்சிக்கவும்.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "கீழேயுள்ள பட்டி பட்டியில் பூர்வதயாரிக கோப்புக்கு உருவாக்க முயலுங்கள்.", + "Pretrained G Path": "கஸ்டம் பூர்வதயாரிக G பாதை", + "Pretrained D Path": "கஸ்டம் பூர்வதயாரிக D பாதை", + "GPU Settings": "GPU அமைப்புகள்", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "மேலும் முதிர்ச்சியான GPU அமைப்புகளை அமைக்கின்றது, உடனடியான GPU கருவிக்கு பரிந்திரமான பயனாளர்களுக்கு பரிந்துரிக்கப்படுகிறது.", + "GPU Custom Settings": "GPU கஸ்டம் அமைப்புகள்", + "GPU Number": "GPU எண்", + "0 to ∞ separated by -": "0 இரு ∞ பிரிவாக - வாக்கப்பட்டு", + "GPU Information": "GPU தகவல்", + "Pitch Guidance": "பிச் வழிநிரப்பல்", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "பிச் வழிநிரப்பல் மூலம், மூல குரலின் ஒலிக்கோட்டைக் கண்டுகொள்வது சாத்தியமாகின்றது, அதன் பிச்சை கூட. இந்த அம்சம் குரல் பாடலுக்கும் மற்றும் உலாவிகளுக்கும் மூல இசை அல்லது பிச் முதிரையைக் காப்பாற்ற எளியதாக இருக்கும்.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "உங்கள் பயிற்சியில் உங்கள் தனிப்பட்ட மாதிரிகளை பயன்படுத்துவது பூர்வதயாரிக மாதிரிகளை பயன்படுத்துவது குரல் பயிற்சி காலத்தை குறைக்கின்றது மற்றும் மொத்த தரவின் உயர்த்துத்தை அதிகரிக்கின்றது.", + "Extract Features": "அம்சங்கள் எடு", + "Overtraining Detector": "அதிகமாக பயிற்சிப்படுத்தும் அறிவுப்பால்", + "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "பயிற்சிப்படுத்தும் தரவை மிகவும் நன்றாக அறியும் பாதுகாப்பு மூலம் மாதிரி பயிற்சிப்படுத்துதலை தடுக்க, புதிய தரவுக்கு பொதுவாக பொருத்தமாக மாற்ற அனுமதியை இழக்குகிறது.", + "Overtraining Detector Settings": "அதிக பயிற்சிப்படுத்தும் அறிவுப்பால் அமைப்புகள்", + "Overtraining Threshold": "அதிக பயிற்சிப்படுத்தும் அறிவுப்பால் அதிகம்", + "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "அதிகமாக பயிற்சிப்படுத்தும் தரவு அறியப்படாதால் உங்கள் மாதிரியின் பயிற்சிப்படுத்தும் மொத்த எண்ணிக்கையை அமைக்கவும்.", + + "Start Training": "பயிற்சி ஆரம்பிக்கவும்", + "Stop Training & Restart Applio": "பயிற்சி நிறுத்து & புதுப்பிக்க Applio", + "Generate Index": "சுருக்கம் உருவாக்கு", + + "Export Model": "ஏற்றுமதி மாதிரி", + "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "'பதிவேற்று' பொத்தான்கள் உள்ளீட்டிற்கு மட்டுமே கூகுள் கோலாப் சேமிப்பகத்திற்கு கடைசியாக கூகுள் டிரைவில் உங்கள் ApplioExported கோப்புக்கு ஏற்றுமதிக்கும்.", + "Exported Pth file": "ஏற்றுமதிக்கப்பட்ட Pth கோப்பு", + "Exported Index file": "ஏற்றுமதிக்கப்பட்ட சுட்டி கோப்பு", + "Select the pth file to be exported": "ஏற்றுமதிக்க வேண்டிய pth கோப்பைத் தேர்ந்தெடுக்கவும்", + "Select the index file to be exported": "ஏற்றுமதிக்க வேண்டிய சுட்டி கோப்பைத் தேர்ந்தெடுக்கவும்", + "Upload": "பதிவேற்று", + + "Voice Model": "குரல் மாதிரி", + "Select the voice model to use for the conversion.": "மாற்றத்திற்கு பயன்படுத்த விரும்பும் குரல் மாதிரியை தேர்ந்தெடுக்கவும்.", + "Index File": "சுருக்க கோப்பு", + "Select the index file to use for the conversion.": "மாற்றத்திற்கு பயன்படுத்த உள்ள சுருக்க கோப்பை தேர்ந்தெடுக்கவும்.", + "Refresh": "புதுப்பிக்கவும்", + "Unload Voice": "குரல் அமைதி", + "Single": "ஒற்றை", + "Upload Audio": "ஒலியை பதிவேற்று", + "Select Audio": "ஒலியைத் தேர்ந்தெடு", + "Select the audio to convert.": "மாற்றுவதற்கு ஒலியைத் தேர்ந்தெடு.", + "Advanced Settings": "மேம்பாடு அமைப்புகள்", + "Clear Outputs (Deletes all audios in assets/audios)": "வெற்றிகளை அழித்தல் (assets/audios உள்ள அனைத்து ஒலிகளையும் நீக்கும்)", + "Custom Output Path": "கஸ்டம் வெற்றிப் பாதை", + "Output Path": "வெற்றி பாதை", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "வெற்றிகள் உள்ளிடப்பட்ட ஒலியைச் சேமிக்கப்படும் பாதை, பொதுவாக assets/audios/output.wav இல்.", + "Split Audio": "ஒலியை பிரித்தல்", + "Split the audio into chunks for inference to obtain better results in some cases.": "கொலுசுகளாக ஒலியை பிரிக்க, சில நிலைகளில் சிறப்பு விளக்கங்களைப் பெற விரும்புகின்றது.", + "Autotune": "ஆட்டோடியூன்", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "உங்கள் முன்னோடிகளுக்கு ஒரு மென்னுரை ஆட்டோடியூனை பயன்படுத்தவும், பாடல் மாற்றங்களுக்கு பரிந்துரிக்கப்படுகின்றது.", + "Clean Audio": "சுத்தமான ஒலி", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "உங்கள் ஒலி வெற்றியை சுத்தமாக்க, பேசும் ஒலிகளுக்கு பரிந்துரிக்கப்படுகின்றது.", + "Clean Strength": "சுத்த வலிமை", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "நீங்கள் விரும்பும் ஒலிக்கு சுத்தமாக்க விளக்கு, அதை அதிகரிக்கும்போது அது அதிகரிக்கும், ஆனால் ஒலி குறுகியாக இருக்கலாம்.", + "Pitch": "பிச்", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "ஒலியின் பிச் அமைக்கவும், மதிப்பு உயரானதும் அதிகமாகும்.", + "Filter Radius": "குழப்பத்தின் அருகு", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "எண் மூலம் மூன்று அல்லது அதனை விட அதிகமாக இருந்தால், சேகரித்த இசை முடிவுகளில் இயலுமை குறைவாகும் என்று சொல்லப்படுகின்றது.", + "Search Feature Ratio": "தேடல் அம்ச விகிதம்", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "இடைவரிசு கோப்பின் மூலம் உள்ள பாதியான ஒருவரிடத்திற்கு உருவாகும் அந்தக் கோப்பு; அதிக மதிப்பு அதிக உருவாகும் என்று அர்த்தம். எனவே, குறோக்கின் குறைந்த மதிப்புகளைத் தேர்வுசெய்வதால் ஒலியில் உள்ள கலப்புகளைத் தவிர்க்க உதவலாம்.", + "Volume Envelope": "அளவு என்வெலோப்", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "வெற்றியின் அளவு என்வெலோப் இல் மாறியது அல்லது இணைந்தது. விளக்கு அந்த விகிதம் 1 க்கு அழைத்திருந்தால், வெற்றியின் அளவு என்வெலோப் பயன்படும்.", + "Protect Voiceless Consonants": "குரலின் இல்லாத ஸ்வரக்களைக் காப்பாற்றவும்", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "எலக்ட்ரோ-ஒலி கொழுகு மற்றும் பிற கலப்புகளை தடுக்குவதற்கு விரிவான ஸ்வரக்களுக்கு மற்றும் சுவாசத் தானங்களுக்கு பாதுகாக்க. இந்த அளவுக்கு அதிகமாக 0.5 க்கு அழைத்துக் கொள்வது பொருத்தமான பாதுகாப்பை வழங்குகின்றது. ஆனால், இந்த மதிப்பை குறைந்ததாக்கின்றார் என்றால், பாதுகாப்புக்குரிய நிலை குறைந்துவிடப்படலாம் மற்றும் அதுவே இந்தக் குறோக்குனை பரிந்துரிக்கும் என்று எச்சரிக்கை தரகின்றது.", + "Pitch extraction algorithm": "பிச் எக்ஸ்டிரக்ஷன் அளவுத் தொகுப்பு", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "ஒலி மாற்றத்திற்கு பயன்படுத்த வேண்டிய பிச் எக்ஸ்டிரக்ஷன் அளவுத் தொகுப்பு. இயல்பான அளவுத் தொகுப்பு rmvpe ஆகும், இது அதிகமாக பரிந்துரிக்கப்படுகின்றது.", + + "Convert": "மாற்று", + "Export Audio": "ஒலியை ஏற்றுமதி செய்", + + "Batch": "பேட்ச்", + "Input Folder": "உள்ளிடும் கோப்பு", + "Select the folder containing the audios to convert.": "மாற்ற ஒலிகளைக் கொண்ட கோப்புகளைக் கொண்ட கோப்புக்கு தேர்ந்தெடு.", + "Enter input path": "உள்ளிடும் பாதையை உள்ளிடுக", + "Output Folder": "வெற்றி கோப்பு", + "Select the folder where the output audios will be saved.": "வெற்றிகளைச் சேமிக்கப்படும் கோப்புக்கு தேர்ந்தெடு.", + "Enter output path": "வெற்றியின் பாதையை உள்ளிடுக", + + "Get information about the audio": "ஒலியை பற்றிய தகவல் பெறுக", + + "## Voice Blender": "## குரல் பிளெண்டர்", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "இரண்டு குரல் மாதிரிகளைத் தேர்வு செய்து, விரும்பிய குரல் சதவீதம் அமைக்கவும், அவைகளை முழுமையாக ஒரு புதிய குரலாக பிளெண்டுகின்றன.", + "Voice Blender": "குரல் பிளெண்டர்", + "Drag and drop your model here": "உங்கள் மாதிரி இங்கே எழுதவும்", + "You can also use a custom path.": "நீங்கள் கஸ்டம் பாதையையும் பயன்படுத்தலாம்.", + "Blend Ratio": "குரல் சதவீதம்", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "ஒரு பக்கத்திற்கு அல்லது மற்றும் மற்றும் அதிகமாக செய்யும் உள்ளீடு இரட்டிப் பார்த்துக் கொள்ளுதல் மாதிரியாகின்றது.", + "Fusion": "ஐக்கியம்", + "Path to Model": "மாதிரிக்கு பாதை", + "Enter path to model": "மாதிரிக்கு பாதையை உள்ளிடுக", + "Model information to be placed": "இருந்து விடப்பட வேண்டிய மாதிரி தகவல்", + "Introduce the model information": "மாதிரி தகவல் அறிமுகம்", + "The information to be placed in the model (You can leave it blank or put anything).": "மாதிரிக்கு வைக்கப்பட வேண்டிய தகவல் (நீங்கள் அந்தச் செயலை விட அந்தச் செய்யாமல் அனைத்ததையும் வைக்கலாம்).", + "View model information": "மாதிரி தகவலைக் காண்க", + "Introduce the model pth path": "மாதிரி pth பாதையை உள்ளிடுக", + "View": "காண்க", + "Model extraction": "மாதிரி எடுத்தல்", + "Model conversion": "மாதிரி மாற்றம்", + "Pth file": "Pth கோப்பு", + "Output of the pth file": "Pth கோப்பின் வெளியேற்றம்", + "# How to Report an Issue on GitHub": "# GitHub-ல் ஒரு பிரச்சினையை புகாரளிக்குவது எப்படி", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. நீங்கள் அந்தப் பிரச்சினையை பரிசோதிக்கும் கீழே 'திரையை பதிகம் செய்யும்' பொத்தானை கிளிக் செய்யவும்.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. நீங்கள் அந்தப் பிரச்சினையை பரிசோதித்துக் கொண்டிருக்கின்றீர்கள், அந்தச் செய்யப்படும் பொத்தானை கிளிக் செய்யவும் (இது நீங்கள் சொல்லப்படும் பொத்தான், ஆனால் நீங்கள் எந்தவேணையும் செய்யக்கூடிய நிலையின் போது பொத்தானின் பெயர் மாறுகின்றது).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [GitHub Issues](https://github.com/IAHispano/Applio/issues) க்கு செல்லவும் மற்றும் 'புதிய பிரச்சினை' பொத்தானை கிளிக் செய்யவும்.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. வழுதுணர்ந்து, தேவையான விவரங்களைக் கொண்டு விரிவாக பிரச்சினை பதிவேடு செய்து, முந்தைய படித்த கோப்பை பதிவேடுக்கு பயன்படுத்தலாம்.", + "Record Screen": "திரையை பதிகம் செய்க", + "Record": "பதிகம் செய்க", + "Stop Recording": "பதிகம் நிறுத்துக", + "Introduce the model .pth path": "மாதிரி .pth பாதையை உள்ளிடுக", + "See Model Information": "மாதிரி தகவலைக் காண்க", + "## Download Model": "## மாதிரி பதிவிறக்கம்", + "Model Link": "மாதிரி இணைப்பு", + "Introduce the model link": "மாதிரி இணைப்பை உள்ளிடுக", + "Download Model": "மாதிரி பதிவிறக்கம்", + "## Drop files": "## கோப்புகளை விழுக", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "உங்கள் .pth கோப்பு மற்றும் .index கோப்பை இந்த இடத்திற்கு எழுதுங்கள். ஒருவருக்கு பிறகு ஒருவருக்கு எழுதுங்கள்.", + "## Search Model": "## மாதிரி தேடு", + "Search": "தேடு", + "Introduce the model name to search.": "தேடுவதற்கு மாதிரிப் பெயரை அறிமுகப்படுத்து.", + "We couldn't find models by that name.": "அந்த பெயரில் மாதிரிகளைக் கண்டுபிடிக்க முடியவில்லை.", + + "TTS Voices": "TTS குரல்கள்", + "Select the TTS voice to use for the conversion.": "மாற்றத்திற்கு பயன்படுத்த உள்ள TTS குரலை தேர்ந்தெடுக்கவும்.", + "Text to Synthesize": "சிந்தனை செய்ய உள்ள உரை", + "Enter the text to synthesize.": "சிந்தனை செய்ய உள்ள உரையை உள்ளிடுக.", + "Or you can upload a .txt file": "அல்லது .txt கோப்பை பதிவேற்றலாம்", + "Enter text to synthesize": "சிந்தனை செய்ய உள்ள உரையை உள்ளிடுக", + "Output Path for TTS Audio": "TTS குரலுக்கான வெளியேற்ற பாதை", + "Output Path for RVC Audio": "RVC குரலுக்கான வெளியேற்ற பாதை", + "Enable Applio integration with Discord presence": "Discord உள்ளிட்டது உள்ளிடத்துடன் Applio ஒருவருக்கு இயங்குதல் இயல்புநிலை செய்தியை இயக்குங்கள்", + "It will activate the possibility of displaying the current Applio activity in Discord.": "இது Applio செயல்திறனை Discord-ல் காண்பிக்க முடியும்.", + "Enable Applio integration with applio.org/models using flask": "flask ஐப் பயன்படுத்தி applio.org/models உடன் Applio ஒருவருக்கு இயங்குதல் இயல்புநிலை செய்தியை இயக்குங்கள்", + "It will activate the possibility of downloading models with a click from the website.": "இது இணையத்திலிருந்து ஒரு கிளிக்குட்டுடன் மாதிரிகளை பதிவிறக்க முடியும்.", + "Enable fake GPU": "கப்பூ ஜி.பி.யூ ஐ இயக்கு", + "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "ஒரு ஜி.பி.யூ இல்லாமல் தற்போது பயிற்சிப்படுத்தல் ஆதரிக்கப்படவில்லை. பயிற்சிக்கு பட்டி செயல்முறையை செயலாக்க, அமைப்புகள் பட்டியலில் செல்ல, 'பெயர் ஜி.பி.யூ' விருப்பத்தை இயக்கவும்.", + "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "பயிற்சிக்கு பட்டி செயலாக்கிறது. எனவே, இந்த சாதனம் ஜி.பி.யூ திறன் இல்லையாம், அதனால் பயிற்சி ஆதரிக்கப்படவில்லை. இந்த விருப்பம் மட்டுமே சோதனை காரணங்களுக்காக உள்ளது. (இந்த விருப்பம் Applio ஐ மீண்டும் திரும்பியிருப்பதற்காக)", + "Theme": "தீமா", + "Select the theme you want to use. (Requires restarting Applio)": "நீங்கள் பயன்படுத்த விரும்பும் தீமையை தேர்ந்தெடுக்கவும். (Applio-ஐ மீளவே போகும்)", + "Language": "மொழி", + "Select the language you want to use. (Requires restarting Applio)": "நீங்கள் பயன்படுத்த விரும்பும் மொழியை தேர்ந்தெடுக்கவும். (Applio-ஐ மீளவே போகும்)", + "Plugin Installer": "பிளகின் நிறுவி", + "Drag your plugin.zip to install it": "உங்கள் plugin.zip கோப்பை இதுக்கு இழுக்கவும் அதை நிறுவுக", + "Version Checker": "பதிப்பு சரிபார்க்கல்", + "Check which version of Applio is the latest to see if you need to update.": "நீங்கள் புதியதாகப் புதுப்பிக்க வேண்டும் என்பதை பார்க்க, Applio இன் எந்த பதிப்பு சரிபார்க்கவும்.", + "Check for updates": "புதுப்பிக்கவும்" +} \ No newline at end of file diff --git a/assets/i18n/languages/ta_TA.json b/assets/i18n/languages/ta_TA.json new file mode 100644 index 0000000000000000000000000000000000000000..6dd0b5908c041b11a57dde93c2f4a54dc0e2697d --- /dev/null +++ b/assets/i18n/languages/ta_TA.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "இறுதி குரல் குளோனிங் கருவி, நிகரற்ற சக்தி, மாடுலாரிட்டி மற்றும் பயனர் நட்பு அனுபவத்திற்காக உன்னிப்பாக உகந்ததாக உள்ளது.", + "This section contains some extra utilities that often may be in experimental phases.": "இந்த பிரிவில் சில கூடுதல் பயன்பாடுகள் உள்ளன, அவை பெரும்பாலும் சோதனை கட்டங்களில் இருக்கலாம்.", + "Output Information": "வெளியீட்டு தகவல்", + "The output information will be displayed here.": "வெளியீட்டு தகவல் இங்கே காட்டப்படும்.", + "Inference": "அனுமானம்", + "Train": "தொடர்வண்டி", + "Extra": "கூடுதல்", + "Merge Audios": "ஆடியோக்களை ஒன்றிணைக்கவும்", + "Processing": "செயலாக்க", + "Audio Analyzer": "ஆடியோ அனலைசர்", + "Model Information": "மாதிரி தகவல்", + "Plugins": "செருகுநிரல்கள்", + "Download": "பதிவிறக்க", + "Report a Bug": "பிழையைப் புகாரளி", + "Settings": "அமைப்புகள்", + "Preprocess": "முன் செயல்முறை", + "Model Name": "மாடல் பெயர்", + "Name of the new model.": "புதிய மாடலின் பெயர்.", + "Enter model name": "மாடல் பெயரை உள்ளிடவும்", + "Dataset Path": "தரவுத்தொகுப்பு பாதை", + "Path to the dataset folder.": "தரவுத்தொகுப்பு கோப்புறைக்கான பாதை.", + "Refresh Datasets": "தரவுத்தொகுப்புகளைப் புதுப்பிக்கவும்", + "Dataset Creator": "தரவுத்தொகுப்பை உருவாக்கியவர்", + "Dataset Name": "தரவுத்தொகுப்பு பெயர்", + "Name of the new dataset.": "புதிய தரவுத்தொகுப்பின் பெயர்.", + "Enter dataset name": "தரவுத்தொகுப்பு பெயரை உள்ளிடவும்", + "Upload Audio Dataset": "ஆடியோ தரவுத்தொகுப்பைப் பதிவேற்றவும்", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "ஆடியோ கோப்பு வெற்றிகரமாக தரவுத்தொகுப்பில் சேர்க்கப்பட்டது. செயல்முறைக்கு முந்தைய பட்டனை கிளிக் செய்யவும்.", + "Enter dataset path": "தரவுத்தொகுப்பு பாதையை உள்ளிடவும்", + "Sampling Rate": "மாதிரி மதிப்பீடு", + "The sampling rate of the audio files.": "ஆடியோ கோப்புகளின் மாதிரி விகிதம்.", + "RVC Version": "RVC பதிப்பு", + "The RVC version of the model.": "மாடலின் RVC பதிப்பு.", + "Preprocess Dataset": "செயல்முறைக்கு முந்தைய தரவுத்தொகுப்பு", + "Extract": "பிரித்தெடுத்தல்", + "Hop Length": "ஹாப் நீளம்", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "கணினி ஒரு குறிப்பிடத்தக்க சுருதி மாற்றத்திற்கு மாறுவதற்கு எடுக்கும் காலத்தைக் குறிக்கிறது. சிறிய ஹாப் நீளங்களுக்கு அனுமானத்திற்கு அதிக நேரம் தேவைப்படுகிறது, ஆனால் அதிக சுருதி துல்லியத்தை அளிக்க முனைகிறது.", + "Batch Size": "தொகுதி அளவு", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "உங்கள் GPU இன் கிடைக்கக்கூடிய VRAM உடன் அதை சீரமைப்பது நல்லது. 4 இன் அமைப்பு மேம்பட்ட துல்லியம் ஆனால் மெதுவான செயலாக்கத்தை வழங்குகிறது, அதே நேரத்தில் 8 வேகமான மற்றும் நிலையான முடிவுகளை வழங்குகிறது.", + "Save Every Epoch": "ஒவ்வொரு சகாப்தத்தையும் காப்பாற்றுங்கள்", + "Determine at how many epochs the model will saved at.": "மாதிரி எத்தனை சகாப்தங்களில் சேமிக்கப்படும் என்பதை தீர்மானிக்கவும்.", + "Total Epoch": "மொத்த சகாப்தம்", + "Specifies the overall quantity of epochs for the model training process.": "மாதிரி பயிற்சி செயல்முறைக்கான சகாப்தங்களின் ஒட்டுமொத்த அளவைக் குறிப்பிடுகிறது.", + "Pretrained": "முன் பயிற்சி", + "Save Only Latest": "சமீபத்தியதை மட்டும் சேமிக்கவும்", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "இந்த அமைப்பை இயக்குவது G மற்றும் D கோப்புகளை அவற்றின் மிகச் சமீபத்திய பதிப்புகளை மட்டுமே சேமிக்கும், சேமிப்பக இடத்தை திறம்பட சேமிக்கும்.", + "Save Every Weights": "ஒவ்வொரு எடைகளையும் சேமிக்கவும்", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "இந்த அமைப்பு ஒவ்வொரு சகாப்தத்தின் முடிவிலும் மாதிரியின் எடைகளை சேமிக்க உதவுகிறது.", + "Custom Pretrained": "தனிப்பயன் முன்பயிற்சி", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "தனிப்பயன் முன்பயிற்சி மாதிரிகளைப் பயன்படுத்துவது சிறந்த முடிவுகளுக்கு வழிவகுக்கும், ஏனெனில் குறிப்பிட்ட பயன்பாட்டு வழக்குக்கு ஏற்ப மிகவும் பொருத்தமான முன்பயிற்சி மாதிரிகளைத் தேர்ந்தெடுப்பது செயல்திறனை கணிசமாக மேம்படுத்தும்.", + "Upload Pretrained Model": "முன்பயிற்சி பெற்ற மாதிரியைப் பதிவேற்றவும்", + "Refresh Custom Pretraineds": "தனிப்பயன் ப்ரீட்ரெய்ன்ட்களைப் புதுப்பிக்கவும்", + "Pretrained Custom Settings": "முன் பயிற்சி பெற்ற தனிப்பயன் அமைப்புகள்", + "The file you dropped is not a valid pretrained file. Please try again.": "நீங்கள் கைவிட்ட கோப்பு ஒரு செல்லத்தக்க முன்பயிற்சி பெற்ற கோப்பு அல்ல. மீண்டும் முயற்சிக்கவும்.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "கீழ்தோன்றும் மெனுவில் முன்பயிற்சி பெற்ற கோப்பைக் காண புதுப்பிப்பு பொத்தானைக் கிளிக் செய்யவும்.", + "Pretrained G Path": "தனிப்பயன் முன் பயிற்சி ஜி", + "Pretrained D Path": "தனிப்பயன் முன்பயிற்சி D", + "GPU Settings": "GPU அமைப்புகள்", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "மேம்பட்ட GPU அமைப்புகளை அமைக்கிறது, சிறந்த GPU கட்டமைப்பு கொண்ட பயனர்களுக்கு பரிந்துரைக்கப்படுகிறது.", + "GPU Custom Settings": "GPU தனிப்பயன் அமைப்புகள்", + "GPU Number": "GPU எண்", + "0 to ∞ separated by -": "0 முதல் ∞ வரை பிரிக்கப்பட்டுள்ளது -", + "GPU Information": "தகவல்", + "Pitch Guidance": "சுருதி வழிகாட்டுதல்", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "சுருதி வழிகாட்டுதலைப் பயன்படுத்துவதன் மூலம், அதன் சுருதி உட்பட அசல் குரலின் தொனியை பிரதிபலிப்பது சாத்தியமாகும். அசல் மெல்லிசை அல்லது சுருதி வடிவத்தைப் பாதுகாப்பது அவசியம் என்று பாடுவதற்கும் பிற காட்சிகளுக்கும் இந்த அம்சம் குறிப்பாக மதிப்புமிக்கது.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "உங்கள் சொந்த பயிற்சியின் போது முன்கூட்டியே பயிற்சி பெற்ற மாதிரிகளைப் பயன்படுத்தவும். இந்த அணுகுமுறை பயிற்சி காலத்தை குறைக்கிறது மற்றும் ஒட்டுமொத்த தரத்தை மேம்படுத்துகிறது.", + "Extract Features": "பிரித்தெடுக்கும் அம்சங்கள்", + "Start Training": "பயிற்சியைத் தொடங்குங்கள்", + "Generate Index": "குறியீட்டை உருவாக்கவும்", + "Voice Model": "குரல் மாதிரி", + "Select the voice model to use for the conversion.": "மாற்றத்திற்கு பயன்படுத்த குரல் மாதிரியைத் தேர்ந்தெடுக்கவும்.", + "Index File": "அட்டவணை கோப்பு", + "Select the index file to use for the conversion.": "மாற்றத்திற்கு பயன்படுத்த குறியீட்டு கோப்பைத் தேர்ந்தெடுக்கவும்.", + "Refresh": "புதுப்பி", + "Unload Voice": "குரலை இறக்கவும்", + "Single": "ஒற்றை", + "Upload Audio": "ஆடியோவை பதிவேற்றவும்", + "Select Audio": "ஆடியோவை தேர்ந்தெடு", + "Select the audio to convert.": "மாற்ற ஆடியோவைத் தேர்ந்தெடுக்கவும்.", + "Advanced Settings": "மேம்பட்ட அமைப்புகள்", + "Clear Outputs (Deletes all audios in assets/audios)": "வெளியீடுகளை அழிக்கவும் (சொத்துக்கள் / ஆடியோக்களில் உள்ள அனைத்து ஆடியோக்களையும் நீக்குகிறது)", + "Custom Output Path": "தனிப்பயன் வெளியீட்டு பாதை", + "Output Path": "வெளியீட்டுப் பாதை", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "வெளியீட்டு ஆடியோ சேமிக்கப்படும் பாதை, இயல்பாக சொத்துக்கள் / ஆடியோக்கள் / output.wav", + "Split Audio": "பிளவு ஆடியோ", + "Split the audio into chunks for inference to obtain better results in some cases.": "சில சந்தர்ப்பங்களில் சிறந்த முடிவுகளைப் பெற அனுமானத்திற்காக ஆடியோவை துண்டுகளாகப் பிரிக்கவும்.", + "Autotune": "ஆட்டோடியூன்", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "உங்கள் அனுமானங்களுக்கு ஒரு மென்மையான ஆட்டோட்யூனைப் பயன்படுத்துங்கள், பாடல் மாற்றங்களுக்கு பரிந்துரைக்கப்படுகிறது.", + "Clean Audio": "சுத்தமான ஆடியோ", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "ஆடியோக்களைப் பேசுவதற்குப் பரிந்துரைக்கப்படும் இரைச்சல் கண்டறிதல் அல்காரிதம்களைப் பயன்படுத்தி உங்கள் ஆடியோ அவுட்புட்டை சுத்தம் செய்யவும்.", + "Clean Strength": "சுத்தமான வலிமை", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "நீங்கள் விரும்பும் ஆடியோவுக்கு சுத்தம் செய்யும் அளவை அமைக்கவும், நீங்கள் அதை எவ்வளவு அதிகரிக்கிறீர்களோ, அவ்வளவு அதிகமாக அது சுத்தம் செய்யப்படும், ஆனால் ஆடியோ மிகவும் சுருக்கப்பட்டிருக்கும்.", + "Pitch": "எறி", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "ஆடியோவின் சுருதியை அமைக்கவும், அதிக மதிப்பு, அதிக சுருதி.", + "Filter Radius": "வடிகட்டி ஆரம்", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "எண்ணிக்கை மூன்றை விட அதிகமாகவோ அல்லது சமமாகவோ இருந்தால், சேகரிக்கப்பட்ட தொனி முடிவுகளில் சராசரி வடிகட்டலைப் பயன்படுத்துவது சுவாசத்தைக் குறைக்கும் ஆற்றலைக் கொண்டுள்ளது.", + "Search Feature Ratio": "தேடல் அம்ச விகிதம்", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "குறியீட்டு கோப்பு செலுத்தும் செல்வாக்கு; அதிக மதிப்பு அதிக செல்வாக்குக்கு ஒத்திருக்கிறது. இருப்பினும், குறைந்த மதிப்புகளைத் தேர்ந்தெடுப்பது ஆடியோவில் இருக்கும் கலைப்பொருட்களைத் தணிக்க உதவும்.", + "Volume Envelope": "தொகுதி உறை", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "வெளியீட்டின் தொகுதி உறையுடன் மாற்றவும் அல்லது கலக்கவும். விகிதம் 1 க்கு நெருக்கமாக இருந்தால், வெளியீடு உறை அதிகமாக பயன்படுத்தப்படுகிறது.", + "Protect Voiceless Consonants": "குரலற்ற மெய்யெழுத்துக்களைப் பாதுகாக்கவும்", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "மின்-ஒலி கிழித்தல் மற்றும் பிற கலைப்பொருட்களைத் தடுக்க தனித்துவமான மெய்யெழுத்துக்கள் மற்றும் சுவாச ஒலிகளைப் பாதுகாக்கவும். அளவுருவை அதன் அதிகபட்ச மதிப்பான 0.5 க்கு இழுப்பது விரிவான பாதுகாப்பை வழங்குகிறது. இருப்பினும், இந்த மதிப்பைக் குறைப்பது பாதுகாப்பின் அளவைக் குறைக்கலாம், அதே நேரத்தில் குறியீட்டு விளைவைத் தணிக்கலாம்.", + "Pitch extraction algorithm": "சுருதி பிரித்தெடுத்தல் அல்காரிதம்", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "ஆடியோ மாற்றத்திற்கு பயன்படுத்த சுருதி பிரித்தெடுத்தல் வழிமுறை. இயல்புநிலை அல்காரிதம் rmvpe ஆகும், இது பெரும்பாலான சந்தர்ப்பங்களில் பரிந்துரைக்கப்படுகிறது.", + "Convert": "உருமாற்று", + "Export Audio": "ஆடியோவை ஏற்றுமதி செய்யவும்", + "Batch": "தொகுதி", + "Input Folder": "உள்ளீட்டு கோப்புறை", + "Select the folder containing the audios to convert.": "மாற்ற ஆடியோக்களைக் கொண்ட கோப்புறையைத் தேர்ந்தெடுக்கவும்.", + "Enter input path": "உள்ளீட்டு பாதையை உள்ளிடவும்", + "Output Folder": "வெளியீட்டு கோப்புறை", + "Select the folder where the output audios will be saved.": "வெளியீடு ஆடியோக்கள் சேமிக்கப்படும் கோப்புறையைத் தேர்ந்தெடுக்கவும்.", + "Enter output path": "வெளியீட்டு பாதையை உள்ளிடவும்", + "Get information about the audio": "ஆடியோ பற்றிய தகவலைப் பெறுங்கள்", + "Information about the audio file": "ஆடியோ கோப்பு பற்றிய தகவல்", + "Waiting for information...": "தகவலுக்காக காத்திருக்கிறேன்...", + "## Voice Blender": "## வாய்ஸ் பிளெண்டர்", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "இரண்டு குரல் மாதிரிகளைத் தேர்ந்தெடுத்து, நீங்கள் விரும்பிய கலவை சதவீதத்தை அமைத்து, அவற்றை முற்றிலும் புதிய குரலில் கலக்கவும்.", + "Voice Blender": "குரல் பிளெண்டர்", + "Drag and drop your model here": "உங்கள் மாதிரியை இங்கே இழுத்து விடுங்கள்", + "You can also use a custom path.": "நீங்கள் தனிப்பயன் பாதையையும் பயன்படுத்தலாம்.", + "Blend Ratio": "கலப்பு விகிதம்", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "நிலையை ஒரு பக்கம் அல்லது மறுபுறம் நோக்கி சரிசெய்வது மாதிரியை முதல் அல்லது இரண்டாவதைப் போலவே மாற்றும்.", + "Fusion": "இணைவு", + "Path to Model": "மாதிரிக்கான பாதை", + "Enter path to model": "மாதிரிக்கான பாதையை உள்ளிடவும்", + "Model information to be placed": "வைக்கப்பட வேண்டிய மாதிரி தகவல்", + "Inroduce the model information": "மாதிரி தகவலை அறிமுகப்படுத்தவும்", + "The information to be placed in the model (You can leave it blank or put anything).": "மாதிரியில் வைக்கப்பட வேண்டிய தகவல் (நீங்கள் அதை காலியாக விடலாம் அல்லது எதையும் வைக்கலாம்).", + "View model information": "மாதிரி தகவலைக் காண்க", + "Introduce the model pth path": "மாதிரி pth பாதையை அறிமுகப்படுத்தவும்", + "View": "பார்வை", + "Model extraction": "மாதிரி பிரித்தெடுத்தல்", + "Model conversion": "மாதிரி மாற்றம்", + "Pth file": "Pth கோப்பு", + "Output of the pth file": "pth கோப்பின் வெளியீடு", + "# How to Report an Issue on GitHub": "# GitHub இல் ஒரு சிக்கலை எவ்வாறு புகாரளிப்பது", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. நீங்கள் அனுபவிக்கும் சிக்கலைப் பதிவு செய்யத் தொடங்க கீழே உள்ள 'ரெக்கார்ட் ஸ்கிரீன்' பொத்தானைக் கிளிக் செய்க.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. நீங்கள் சிக்கலைப் பதிவு செய்து முடித்ததும், 'பதிவு செய்வதை நிறுத்து' பொத்தானைக் கிளிக் செய்க (அதே பொத்தான், ஆனால் நீங்கள் தீவிரமாக பதிவு செய்கிறீர்களா இல்லையா என்பதைப் பொறுத்து லேபிள் மாறுகிறது).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [GitHub Issues](https://github.com/IAHispano/Applio/issues) என்பதற்குச் சென்று 'புதிய சிக்கல்' பொத்தானைக் கிளிக் செய்யவும்.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. வழங்கப்பட்ட சிக்கல் வார்ப்புருவை முடிக்கவும், தேவைக்கேற்ப விவரங்களைச் சேர்ப்பதை உறுதிசெய்து, முந்தைய கட்டத்திலிருந்து பதிவுசெய்யப்பட்ட கோப்பை பதிவேற்ற சொத்துக்கள் பிரிவைப் பயன்படுத்தவும்.", + "Record Screen": "பதிவு திரை", + "Record": "பதிவேடு", + "Stop Recording": "பதிவு செய்வதை நிறுத்து", + "Introduce the model .pth path": "மாதிரியை அறிமுகப்படுத்துங்கள் .pth பாதையை அறிமுகப்படுத்துங்கள்", + "See Model Information": "மாதிரி தகவலைப் பார்க்கவும்", + "## Download Model": "## பதிவிறக்க மாதிரி", + "Model Link": "மாதிரி இணைப்பு", + "Introduce the model link": "மாதிரி இணைப்பை அறிமுகப்படுத்தவும்", + "Download Model": "மாடலைப் பதிவிறக்கவும்", + "## Drop files": "## கோப்புகளை கைவிடுங்கள்", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "உங்கள் .pth கோப்பு மற்றும் .index கோப்பை இந்த இடத்திற்கு இழுக்கவும். ஒன்றை இழுத்து மற்றொன்றை இழுக்கவும்.", + "TTS Voices": "TTS குரல்கள்", + "Select the TTS voice to use for the conversion.": "மாற்றத்திற்கு பயன்படுத்த TTS குரலைத் தேர்ந்தெடுக்கவும்.", + "Text to Synthesize": "தொகுக்க உரை", + "Enter the text to synthesize.": "ஒருங்கிணைக்க உரையை உள்ளிடவும்.", + "Or you can upload a .txt file": "அல்லது .txt கோப்பை பதிவேற்றலாம்", + "Enter text to synthesize": "ஒருங்கிணைக்க உரையை உள்ளிடவும்", + "Output Path for TTS Audio": "TTS ஆடியோவுக்கான வெளியீட்டு பாதை", + "Output Path for RVC Audio": "RVC ஆடியோவுக்கான வெளியீட்டு பாதை", + "Enable Applio integration with Discord presence": "Discord இருப்புடன் Applio ஒருங்கிணைப்பை இயக்கவும்", + "It will activate the possibility of displaying the current Applio activity in Discord.": "டிஸ்கார்டில் தற்போதைய Applio செயல்பாட்டைக் காண்பிப்பதற்கான வாய்ப்பை இது செயல்படுத்தும்.", + "Enable Applio integration with applio.org/models using flask": "குடுவையைப் பயன்படுத்தி applio.org/models உடன் அப்லியோ ஒருங்கிணைப்பை இயக்கவும்", + "It will activate the possibility of downloading models with a click from the website.": "இணையதளத்தில் இருந்து ஒரு கிளிக்கில் மாடல்களைப் பதிவிறக்கும் வாய்ப்பை இது செயல்படுத்தும்.", + "Theme": "கருப்பொருள்", + "Select the theme you want to use. (Requires restarting Applio)": "நீங்கள் பயன்படுத்த விரும்பும் கருப்பொருளை தேர்ந்தெடுக்கவும். (அப்ளியோவை மறுதொடக்கம் செய்ய வேண்டும்)", + "Language": "மொழி", + "Select the language you want to use. (Requires restarting Applio)": "நீங்கள் பயன்படுத்த விரும்பும் மொழியைத் தேர்ந்தெடுக்கவும். (அப்ளியோவை மறுதொடக்கம் செய்ய வேண்டும்)", + "Plugin Installer": "செருகுநிரல் நிறுவி", + "Drag your plugin.zip to install it": "அதை நிறுவ உங்கள் plugin.zip இழுக்கவும்", + "Version Checker": "பதிப்பு சரிபார்ப்பு", + "Check which version of Applio is the latest to see if you need to update.": "நீங்கள் புதுப்பிக்க வேண்டுமா என்பதைப் பார்க்க அப்லியோவின் எந்த பதிப்பு சமீபத்தியது என்பதைச் சரிபார்க்கவும்.", + "Check for updates": "புதுப்பிப்புகளைச் சரிபார்க்கவும்" +} \ No newline at end of file diff --git a/assets/i18n/languages/te_TE.json b/assets/i18n/languages/te_TE.json new file mode 100644 index 0000000000000000000000000000000000000000..e82fb12309d966d68fefbf561cc788e705749a80 --- /dev/null +++ b/assets/i18n/languages/te_TE.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "అల్టిమేట్ వాయిస్ క్లోనింగ్ టూల్, సాటిలేని శక్తి, మాడ్యులారిటీ మరియు వినియోగదారు-స్నేహపూర్వక అనుభవం కోసం జాగ్రత్తగా ఆప్టిమైజ్ చేయబడింది.", + "This section contains some extra utilities that often may be in experimental phases.": "ఈ విభాగంలో కొన్ని అదనపు ఉపయోగాలు ఉన్నాయి, అవి తరచుగా ప్రయోగాత్మక దశలలో ఉండవచ్చు.", + "Output Information": "అవుట్ పుట్ సమాచారం", + "The output information will be displayed here.": "అవుట్ పుట్ సమాచారం ఇక్కడ ప్రదర్శించబడుతుంది.", + "Inference": "అనిమితి", + "Train": "రైలు", + "Extra": "అదనం", + "Merge Audios": "ఆడియోలను విలీనం చేయండి", + "Processing": "ప్రాసెసింగ్", + "Audio Analyzer": "Audio Analyzer", + "Model Information": "నమూనా సమాచారం", + "Plugins": "Plugins", + "Download": "డౌన్ లోడ్ చేసుకోండి", + "Report a Bug": "బగ్ ని రిపోర్ట్ చేయండి", + "Settings": "సెట్టింగ్ లు", + "Preprocess": "ప్రీప్రాసెస్", + "Model Name": "మోడల్ పేరు", + "Name of the new model.": "కొత్త మోడల్ పేరు..", + "Enter model name": "మోడల్ పేరు నమోదు చేయండి", + "Dataset Path": "Dataset Path", + "Path to the dataset folder.": "డేటాసెట్ ఫోల్డర్ కు మార్గం.", + "Refresh Datasets": "రిఫ్రెష్ డేటాసెట్ లు", + "Dataset Creator": "డేటాసెట్ సృష్టికర్త", + "Dataset Name": "డేటాసెట్ పేరు", + "Name of the new dataset.": "కొత్త డేటాసెట్ పేరు.", + "Enter dataset name": "డేటాసెట్ పేరును నమోదు చేయండి", + "Upload Audio Dataset": "ఆడియో డేటాసెట్ అప్ లోడ్ చేయండి", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "ఆడియో ఫైల్ డేటాసెట్ కు విజయవంతంగా జోడించబడింది. దయచేసి ప్రీప్రాసెస్ బటన్ మీద క్లిక్ చేయండి.", + "Enter dataset path": "డేటాసెట్ మార్గాన్ని నమోదు చేయండి", + "Sampling Rate": "నమూనా రేటు", + "The sampling rate of the audio files.": "ఆడియో ఫైల్స్ యొక్క నమూనా రేటు.", + "RVC Version": "RVC Version", + "The RVC version of the model.": "మోడల్ యొక్క ఆర్ విసి వెర్షన్.", + "Preprocess Dataset": "ప్రీప్రాసెస్ Dataset", + "Extract": "ఉద్ధరించు", + "Hop Length": "హాప్ పొడవు", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "గణనీయమైన పిచ్ మార్పుకు సిస్టమ్ పరివర్తన చెందడానికి పట్టే వ్యవధిని సూచిస్తుంది. చిన్న హాప్ పొడవులు అంచనా వేయడానికి ఎక్కువ సమయం అవసరం, కానీ అధిక పిచ్ ఖచ్చితత్వాన్ని ఇస్తాయి.", + "Batch Size": "బ్యాచ్ పరిమాణం", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "దీన్ని మీ జీపీయూలో అందుబాటులో ఉన్న వీఆర్ఏఎంతో అనుసంధానం చేసుకోవడం మంచిది. 4 యొక్క అమరిక మెరుగైన ఖచ్చితత్వాన్ని అందిస్తుంది కాని నెమ్మదిగా ప్రాసెసింగ్ చేస్తుంది, అయితే 8 వేగవంతమైన మరియు ప్రామాణిక ఫలితాలను అందిస్తుంది.", + "Save Every Epoch": "ప్రతి యుగాన్ని కాపాడండి", + "Determine at how many epochs the model will saved at.": "మోడల్ ఎన్ని యుగాలలో సేవ్ చేయబడుతుందో నిర్ణయించండి.", + "Total Epoch": "మొత్తం యుగం", + "Specifies the overall quantity of epochs for the model training process.": "మోడల్ ట్రైనింగ్ ప్రాసెస్ కొరకు యుగాల యొక్క మొత్తం పరిమాణాన్ని నిర్దేశిస్తుంది.", + "Pretrained": "ప్రీ ట్రైనింగ్ చేయబడింది", + "Save Only Latest": "సేవ్ ఓన్లీ లేటెస్ట్", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "ఈ సెట్టింగ్ ని ఎనేబుల్ చేయడం వల్ల G మరియు D ఫైల్స్ వాటి ఇటీవలి వెర్షన్ లను మాత్రమే సేవ్ చేస్తాయి, స్టోరేజీ స్పేస్ ని సమర్థవంతంగా సంరక్షిస్తాయి.", + "Save Every Weights": "ప్రతి బరువులను ఆదా చేయండి", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "ఈ అమరిక ప్రతి యుగం ముగింపులో మోడల్ యొక్క బరువులను సేవ్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది.", + "Custom Pretrained": "Custom Pretrained", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "కస్టమ్ ప్రీ-ట్రైన్డ్ మోడళ్లను ఉపయోగించడం మెరుగైన ఫలితాలకు దారితీస్తుంది, ఎందుకంటే నిర్దిష్ట ఉపయోగం కేసుకు అనుగుణంగా అత్యంత తగిన ప్రీట్రైనింగ్ మోడళ్లను ఎంచుకోవడం పనితీరును గణనీయంగా మెరుగుపరుస్తుంది.", + "Upload Pretrained Model": "ప్రీ ట్రైన్డ్ మోడల్ అప్ లోడ్ చేయండి", + "Refresh Custom Pretraineds": "రిఫ్రెష్ కస్టమ్ ప్రీ ట్రైన్డ్ లు", + "Pretrained Custom Settings": "ముందస్తుగా శిక్షణ పొందిన కస్టమ్ సెట్టింగ్ లు", + "The file you dropped is not a valid pretrained file. Please try again.": "మీరు డ్రాప్ చేసిన ఫైల్ చెల్లుబాటు అయ్యే ముందస్తు శిక్షణ పొందిన ఫైల్ కాదు. దయచేసి మళ్లీ ప్రయత్నించండి.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "డ్రాప్ డౌన్ మెనూలో ముందుగా శిక్షణ పొందిన ఫైల్ ను చూడటం కొరకు రిఫ్రెష్ బటన్ మీద క్లిక్ చేయండి.", + "Pretrained G Path": "Custom Pretrained G", + "Pretrained D Path": "Custom Pretrained D", + "GPU Settings": "GPU సెట్టింగ్ లు", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "మెరుగైన GPU ఆర్కిటెక్చర్ ఉన్న వినియోగదారుల కొరకు సిఫారసు చేయబడ్డ అధునాతన GPU సెట్టింగ్ లను సెట్ చేస్తుంది.", + "GPU Custom Settings": "GPU కస్టమ్ సెట్టింగ్ లు", + "GPU Number": "జిపియు నెంబరు", + "0 to ∞ separated by -": "0 నుండి ∞ వరకు దీని ద్వారా వేరు చేయబడతాయి -", + "GPU Information": "GPU సమాచారం", + "Pitch Guidance": "పిచ్ మార్గదర్శకత్వం", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "పిచ్ మార్గదర్శకత్వాన్ని ఉపయోగించడం ద్వారా, దాని పిచ్తో సహా అసలు స్వరం యొక్క స్వరాన్ని ప్రతిబింబించడం సాధ్యమవుతుంది. అసలు మెలోడీ లేదా పిచ్ నమూనాను సంరక్షించడం అవసరమైన గానం మరియు ఇతర సందర్భాలకు ఈ లక్షణం ముఖ్యంగా విలువైనది.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "మీ స్వంత శిక్షణ చేసేటప్పుడు ముందస్తు శిక్షణ పొందిన నమూనాలను ఉపయోగించండి. ఈ విధానం శిక్షణ వ్యవధిని తగ్గిస్తుంది మరియు మొత్తం నాణ్యతను పెంచుతుంది.", + "Extract Features": "ఎక్స్ ట్రాక్ట్ ఫీచర్లు", + "Start Training": "శిక్షణ ప్రారంభించండి", + "Generate Index": "ఇండెక్స్ జనరేట్ చేయండి", + "Voice Model": "వాయిస్ మోడల్", + "Select the voice model to use for the conversion.": "కన్వర్షన్ కొరకు ఉపయోగించాల్సిన వాయిస్ మోడల్ ని ఎంచుకోండి.", + "Index File": "ఇండెక్స్ ఫైల్", + "Select the index file to use for the conversion.": "మార్పిడి కొరకు ఉపయోగించాల్సిన ఇండెక్స్ ఫైల్ ని ఎంచుకోండి.", + "Refresh": "రిఫ్రెష్", + "Unload Voice": "వాయిస్ ను అన్ లోడ్ చేయండి", + "Single": "ఏక", + "Upload Audio": "ఆడియో అప్ లోడ్ చేయండి", + "Select Audio": "ఆడియోను ఎంచుకోండి", + "Select the audio to convert.": "కన్వర్ట్ చేయడానికి ఆడియోను ఎంచుకోండి.", + "Advanced Settings": "అధునాతన సెట్టింగ్ లు", + "Clear Outputs (Deletes all audios in assets/audios)": "క్లియర్ అవుట్ పుట్స్ (అసెట్స్/ఆడియోల్లోని అన్ని ఆడియోలను తొలగిస్తుంది)", + "Custom Output Path": "కస్టమ్ అవుట్ పుట్ మార్గం", + "Output Path": "అవుట్ పుట్ మార్గం", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "అవుట్ పుట్ ఆడియో సేవ్ చేయబడే మార్గం, ఆస్తులు/ఆడియోలు/output.wav", + "Split Audio": "స్ప్లిట్ ఆడియో", + "Split the audio into chunks for inference to obtain better results in some cases.": "కొన్ని సందర్భాల్లో మెరుగైన ఫలితాలను పొందడానికి ఆడియోను భాగాలుగా విభజించండి.", + "Autotune": "Autotune", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "పాటల మార్పిడి కోసం సిఫార్సు చేయబడిన మీ అంచనాలకు మృదువైన ఆటోట్యూన్ను వర్తించండి.", + "Clean Audio": "క్లీన్ ఆడియో", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "ఆడియోలు మాట్లాడటానికి సిఫారసు చేయబడిన నాయిస్ డిటెక్షన్ అల్గారిథమ్ లను ఉపయోగించి మీ ఆడియో అవుట్ పుట్ ను శుభ్రం చేయండి.", + "Clean Strength": "క్లీన్ స్ట్రెంత్", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "మీకు కావలసిన ఆడియోకు క్లీన్-అప్ స్థాయిని సెట్ చేయండి, మీరు దానిని ఎంత పెంచితే అది మరింత క్లీన్ అవుతుంది, కానీ ఆడియో మరింత కంప్రెస్ అయ్యే అవకాశం ఉంది.", + "Pitch": "గొంతు", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "ఆడియో యొక్క పిచ్ సెట్ చేయండి, విలువ ఎక్కువ, పిచ్ ఎక్కువ.", + "Filter Radius": "Filter వ్యాసార్థం", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "సంఖ్య మూడు కంటే ఎక్కువగా లేదా సమానంగా ఉంటే, సేకరించిన టోన్ ఫలితాలపై మధ్యస్థ వడపోతను ఉపయోగించడం శ్వాసక్రియను తగ్గించే సామర్థ్యాన్ని కలిగి ఉంటుంది.", + "Search Feature Ratio": "శోధన ఫీచర్ నిష్పత్తి", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "ఇండెక్స్ ఫైలు ప్రభావం; అధిక విలువ ఎక్కువ ప్రభావానికి అనుగుణంగా ఉంటుంది. అయినప్పటికీ, తక్కువ విలువలను ఎంచుకోవడం ఆడియోలో ఉన్న కళాఖండాలను తగ్గించడానికి సహాయపడుతుంది.", + "Volume Envelope": "వాల్యూమ్ కవరు", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "అవుట్ పుట్ యొక్క వాల్యూమ్ కవర్ తో ప్రత్యామ్నాయం చేయండి లేదా కలపండి. నిష్పత్తి 1 కి దగ్గరగా ఉంటే, అవుట్ పుట్ కవరు ఎక్కువగా ఉపయోగించబడుతుంది.", + "Protect Voiceless Consonants": "వాయిస్ లెస్ కన్సొనెంట్ లను సంరక్షించండి", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "ఎలక్ట్రో-అకౌస్టిక్ చిరిగిపోవడం మరియు ఇతర కళాఖండాలను నిరోధించడానికి విభిన్న ధ్వనులు మరియు శ్వాస శబ్దాలను సంరక్షించండి. పరామీటర్ ను దాని గరిష్ట విలువ 0.5కు లాగడం సమగ్ర రక్షణను అందిస్తుంది. ఏదేమైనా, ఈ విలువను తగ్గించడం వల్ల ఇండెక్సింగ్ ప్రభావాన్ని తగ్గించేటప్పుడు రక్షణ పరిధి తగ్గుతుంది.", + "Pitch extraction algorithm": "పిచ్ వెలికితీత అల్గోరిథం", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "ఆడియో మార్పిడి కోసం ఉపయోగించే పిచ్ వెలికితీత అల్గోరిథం. డిఫాల్ట్ అల్గోరిథం ఆర్ఎమ్విపిఇ, ఇది చాలా సందర్భాలలో సిఫార్సు చేయబడింది.", + "Convert": "మార్చండి", + "Export Audio": "Export Audio", + "Batch": "దొంతర", + "Input Folder": "ఇన్ పుట్ ఫోల్డర్", + "Select the folder containing the audios to convert.": "కన్వర్ట్ చేయడానికి ఆడియోలను కలిగి ఉన్న సంచికను ఎంచుకోండి.", + "Enter input path": "ఇన్ పుట్ మార్గాన్ని నమోదు చేయండి", + "Output Folder": "అవుట్ పుట్ ఫోల్డర్", + "Select the folder where the output audios will be saved.": "అవుట్ పుట్ ఆడియోలు సేవ్ చేయబడే ఫోల్డర్ ను ఎంచుకోండి.", + "Enter output path": "అవుట్ పుట్ మార్గాన్ని నమోదు చేయండి", + "Get information about the audio": "ఆడియో గురించి సమాచారం పొందండి", + "Information about the audio file": "ఆడియో ఫైలు గురించి సమాచారం", + "Waiting for information...": "సమాచారం కోసం ఎదురుచూస్తూ...", + "## Voice Blender": "## వాయిస్ బ్లెండర్", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "రెండు వాయిస్ మోడళ్లను ఎంచుకోండి, మీకు కావలసిన మిశ్రమ శాతాన్ని సెట్ చేయండి మరియు వాటిని పూర్తిగా కొత్త గొంతులో కలపండి.", + "Voice Blender": "వాయిస్ బ్లెండర్", + "Drag and drop your model here": "మీ మోడల్ ని ఇక్కడ డ్రాగ్ చేయండి మరియు డ్రాప్ చేయండి", + "You can also use a custom path.": "మీరు కస్టమ్ మార్గాన్ని కూడా ఉపయోగించవచ్చు.", + "Blend Ratio": "మిశ్రమ నిష్పత్తి", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "పొజిషన్ ను ఒక వైపు లేదా మరొక వైపుకు మరింత సర్దుబాటు చేయడం వల్ల మోడల్ మొదటి లేదా రెండవ వైపు మరింత పోలి ఉంటుంది.", + "Fusion": "ఫ్యూజన్", + "Path to Model": "మోడల్ కు మార్గం[మార్చు]", + "Enter path to model": "మోడల్ కు మార్గాన్ని నమోదు చేయండి", + "Model information to be placed": "మోడల్ సమాచారం ఉంచాలి", + "Inroduce the model information": "మోడల్ సమాచారాన్ని ఇన్ డ్యూక్ చేయండి", + "The information to be placed in the model (You can leave it blank or put anything).": "మోడల్ లో ఉంచాల్సిన సమాచారం (మీరు దానిని ఖాళీగా ఉంచవచ్చు లేదా ఏదైనా ఉంచవచ్చు).", + "View model information": "నమూనా సమాచారాన్ని వీక్షించండి", + "Introduce the model pth path": "మోడల్ పిటిహెచ్ మార్గాన్ని పరిచయం చేయండి", + "View": "దృశ్యం", + "Model extraction": "నమూనా వెలికితీత", + "Model conversion": "నమూనా మార్పిడి", + "Pth file": "PTH ఫైల్", + "Output of the pth file": "పిటిహెచ్ ఫైల్ యొక్క అవుట్ పుట్", + "# How to Report an Issue on GitHub": "# గిట్హబ్లో సమస్యను ఎలా రిపోర్ట్ చేయాలి", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. మీరు ఎదుర్కొంటున్న సమస్యను రికార్డ్ చేయడం ప్రారంభించడానికి దిగువ 'రికార్డ్ స్క్రీన్' బటన్పై క్లిక్ చేయండి.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. మీరు సమస్యను రికార్డ్ చేయడం పూర్తి చేసిన తర్వాత, 'స్టాప్ రికార్డింగ్' బటన్పై క్లిక్ చేయండి (అదే బటన్, కానీ మీరు చురుకుగా రికార్డ్ చేస్తున్నారా లేదా అనే దానిపై ఆధారపడి లేబుల్ మారుతుంది).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. 'గిట్హబ్ ఇష్యూస్'(https://github.com/IAHispano/Applio/issues)లోకి వెళ్లి 'న్యూ ఇష్యూ' బటన్పై క్లిక్ చేయాలి.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. ఇచ్చిన ఇష్యూ టెంప్లేట్ ను పూర్తి చేసి, అవసరమైన విధంగా వివరాలను పొందుపర్చేలా చూసుకోవాలి మరియు మునుపటి దశ నుండి రికార్డ్ చేయబడిన ఫైల్ ను అప్ లోడ్ చేయడానికి ఆస్తుల విభాగాన్ని ఉపయోగించండి.", + "Record Screen": "స్క్రీన్ రికార్డ్ చేయండి", + "Record": "నమోదు", + "Stop Recording": "రికార్డింగ్ ఆపండి", + "Introduce the model .pth path": "మోడల్ .pth మార్గాన్ని పరిచయం చేయండి", + "See Model Information": "మోడల్ సమాచారం చూడండి", + "## Download Model": "## డౌన్ లోడ్ మోడల్", + "Model Link": "మోడల్ లింక్", + "Introduce the model link": "మోడల్ లింక్ ను పరిచయం చేయండి", + "Download Model": "మోడల్ డౌన్ లోడ్ చేయండి", + "## Drop files": "## డ్రాప్ ఫైళ్లు", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "మీ .pth ఫైల్ మరియు .index ఫైల్ ని ఈ స్పేస్ లోకి లాగండి. ఒకదాన్ని లాగి, తర్వాత మరొకటి లాగండి.", + "TTS Voices": "టిటిఎస్ వాయిస్", + "Select the TTS voice to use for the conversion.": "కన్వర్షన్ కొరకు ఉపయోగించడానికి TTS వాయిస్ ని ఎంచుకోండి.", + "Text to Synthesize": "సంశ్లేషణ చేయడానికి టెక్స్ట్", + "Enter the text to synthesize.": "సంశ్లేషణ చేయడానికి టెక్స్ట్ ను నమోదు చేయండి.", + "Or you can upload a .txt file": "లేదా .txt ఫైల్ ను అప్ లోడ్ చేయవచ్చు.", + "Enter text to synthesize": "సంశ్లేషణ చేయడానికి టెక్స్ట్ ను నమోదు చేయండి", + "Output Path for TTS Audio": "TTS ఆడియో కొరకు అవుట్ పుట్ మార్గం", + "Output Path for RVC Audio": "RVC ఆడియో కొరకు అవుట్ పుట్ మార్గం", + "Enable Applio integration with Discord presence": "Discord సమక్షంలో Applio ఇంటిగ్రేషన్ ప్రారంభించు", + "It will activate the possibility of displaying the current Applio activity in Discord.": "ఇది డిస్కార్డ్ లో ప్రస్తుత అప్లైయో యాక్టివిటీని ప్రదర్శించే అవకాశాన్ని యాక్టివేట్ చేస్తుంది.", + "Enable Applio integration with applio.org/models using flask": "ఫ్లాస్క్ ను ఉపయోగించి applio.org/models అప్లికేషన్ ఇంటిగ్రేషన్ ప్రారంభించండి", + "It will activate the possibility of downloading models with a click from the website.": "వెబ్ సైట్ నుంచి క్లిక్ తో మోడళ్లను డౌన్ లోడ్ చేసుకునే సదుపాయాన్ని యాక్టివేట్ చేస్తుంది.", + "Theme": "థీమ్", + "Select the theme you want to use. (Requires restarting Applio)": "మీరు ఉపయోగించాలనుకుంటున్న థీమ్ ఎంచుకోండి. (అప్లికేషన్ ను పునఃప్రారంభించడం అవసరం)", + "Language": "భాష", + "Select the language you want to use. (Requires restarting Applio)": "మీరు ఉపయోగించాలనుకుంటున్న భాషను ఎంచుకోండి. (అప్లికేషన్ ను పునఃప్రారంభించడం అవసరం)", + "Plugin Installer": "Plugin Installer", + "Drag your plugin.zip to install it": "దీన్ని ఇన్ స్టాల్ చేయడానికి మీ plugin.zip లాగండి", + "Version Checker": "Version Checker", + "Check which version of Applio is the latest to see if you need to update.": "అప్లియో యొక్క ఏ వెర్షన్ లేటెస్ట్ అని చెక్ చేయండి, మీరు అప్ డేట్ చేయాల్సిన అవసరం ఉందా అని చూడండి.", + "Check for updates": "అప్ డేట్ ల కొరకు చెక్ చేయండి" +} \ No newline at end of file diff --git a/assets/i18n/languages/th_TH.json b/assets/i18n/languages/th_TH.json new file mode 100644 index 0000000000000000000000000000000000000000..de1ade140e2f422e3ee9adf1b78403e98fec2f94 --- /dev/null +++ b/assets/i18n/languages/th_TH.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "สุดยอดเครื่องมือโคลนเสียงที่ได้รับการปรับให้เหมาะสมอย่างพิถีพิถันเพื่อพลังที่ไม่มีใครเทียบได้ความเป็นโมดูลและประสบการณ์ที่ใช้งานง่าย", + "This section contains some extra utilities that often may be in experimental phases.": "ส่วนนี้ประกอบด้วยยูทิลิตี้พิเศษบางอย่างที่มักจะอยู่ในขั้นตอนการทดลอง", + "Output Information": "ข้อมูลเอาต์พุต", + "The output information will be displayed here.": "ข้อมูลผลลัพธ์จะแสดงที่นี่", + "Inference": "การอนุมาน", + "Train": "รถไฟ", + "Extra": "พิเศษ", + "Merge Audios": "รวมไฟล์เสียง", + "Processing": "ประมวล ผล", + "Audio Analyzer": "เครื่องวิเคราะห์เสียง", + "Model Information": "ข้อมูลรุ่น", + "Plugins": "ปลั๊กอิน", + "Download": "ดาวน์โหลด", + "Report a Bug": "รายงานข้อบกพร่อง", + "Settings": "การตั้งค่า", + "Preprocess": "กระบวนการล่วงหน้า", + "Model Name": "ชื่อรุ่น", + "Name of the new model.": "ชื่อของรุ่นใหม่", + "Enter model name": "ใส่ชื่อรุ่น", + "Dataset Path": "เส้นทางชุดข้อมูล", + "Path to the dataset folder.": "เส้นทางไปยังโฟลเดอร์ชุดข้อมูล", + "Refresh Datasets": "รีเฟรชชุดข้อมูล", + "Dataset Creator": "ผู้สร้างชุดข้อมูล", + "Dataset Name": "ชื่อชุดข้อมูล", + "Name of the new dataset.": "ชื่อของชุดข้อมูลใหม่", + "Enter dataset name": "ป้อนชื่อชุดข้อมูล", + "Upload Audio Dataset": "อัปโหลดชุดข้อมูลเสียง", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "เพิ่มไฟล์เสียงลงในชุดข้อมูลเรียบร้อยแล้ว โปรดคลิกปุ่มดําเนินการล่วงหน้า", + "Enter dataset path": "ป้อนเส้นทางชุดข้อมูล", + "Sampling Rate": "Samp อัตราลิง", + "The sampling rate of the audio files.": "อัตราการสุ่มตัวอย่างของไฟล์เสียง", + "RVC Version": "รุ่น RVC", + "The RVC version of the model.": "รุ่น RVC ของรุ่น", + "Preprocess Dataset": "ชุดข้อมูลประมวลผลล่วงหน้า", + "Extract": "สกัด", + "Hop Length": "ความยาวกระโดด", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "หมายถึงระยะเวลาที่ระบบใช้ในการเปลี่ยนไปใช้การเปลี่ยนแปลงระดับเสียงที่สําคัญ ความยาวฮ็อพที่เล็กกว่าต้องใช้เวลามากขึ้นในการอนุมาน แต่มักจะให้ความแม่นยําของพิทช์ที่สูงขึ้น", + "Batch Size": "ขนาดแบทช์", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "ขอแนะนําให้จัดตําแหน่งให้ตรงกับ VRAM ที่มีอยู่ของ GPU ของคุณ การตั้งค่า 4 ให้ความแม่นยําที่ดีขึ้น แต่การประมวลผลช้าลง ในขณะที่ 8 ให้ผลลัพธ์ที่เร็วขึ้นและเป็นมาตรฐาน", + "Save Every Epoch": "บันทึกทุกยุค", + "Determine at how many epochs the model will saved at.": "กําหนดจํานวนยุคที่โมเดลจะบันทึกไว้", + "Total Epoch": "ยุคทั้งหมด", + "Specifies the overall quantity of epochs for the model training process.": "ระบุปริมาณโดยรวมของยุคสําหรับกระบวนการฝึกอบรมแบบจําลอง", + "Pretrained": "ได้รับการฝึกฝนล่วงหน้า", + "Save Only Latest": "บันทึกเฉพาะล่าสุด", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "การเปิดใช้งานการตั้งค่านี้จะส่งผลให้ไฟล์ G และ D บันทึกเฉพาะเวอร์ชันล่าสุด ซึ่งช่วยประหยัดพื้นที่จัดเก็บได้อย่างมีประสิทธิภาพ", + "Save Every Weights": "ประหยัดทุกตุ้มน้ําหนัก", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "การตั้งค่านี้ช่วยให้คุณประหยัดน้ําหนักของโมเดลเมื่อสิ้นสุดแต่ละยุค", + "Custom Pretrained": "กําหนดเอง Pretrained", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "การใช้โมเดลที่ผ่านการฝึกอบรมล่วงหน้าแบบกําหนดเองสามารถนําไปสู่ผลลัพธ์ที่เหนือกว่า เนื่องจากการเลือกโมเดลที่ผ่านการฝึกอบรมล่วงหน้าที่เหมาะสมที่สุดซึ่งปรับให้เหมาะกับกรณีการใช้งานเฉพาะสามารถเพิ่มประสิทธิภาพได้อย่างมาก", + "Upload Pretrained Model": "อัปโหลดโมเดลที่ผ่านการฝึกอบรม", + "Refresh Custom Pretraineds": "รีเฟรช Custom Pretraineds", + "Pretrained Custom Settings": "การตั้งค่าแบบกําหนดเองที่ผ่านการฝึกอบรมล่วงหน้า", + "The file you dropped is not a valid pretrained file. Please try again.": "ไฟล์ที่คุณทิ้งไม่ใช่ไฟล์ที่ผ่านการฝึกอบรมล่วงหน้าที่ถูกต้อง โปรดลองอีกครั้ง", + "Click the refresh button to see the pretrained file in the dropdown menu.": "คลิกปุ่มรีเฟรชเพื่อดูไฟล์ที่ฝึกไว้ล่วงหน้าในเมนูแบบเลื่อนลง", + "Pretrained G Path": "Custom Pretrained G", + "Pretrained D Path": "กําหนดเอง Pretrained D", + "GPU Settings": "การตั้งค่า GPU", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "ตั้งค่า GPU ขั้นสูง แนะนําสําหรับผู้ใช้ที่มีสถาปัตยกรรม GPU ที่ดีกว่า", + "GPU Custom Settings": "การตั้งค่าแบบกําหนดเองของ GPU", + "GPU Number": "หมายเลข GPU", + "0 to ∞ separated by -": "0 ถึง ∞ คั่นด้วย -", + "GPU Information": "ข้อมูล GPU", + "Pitch Guidance": "คําแนะนําสนาม", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "ด้วยการใช้คําแนะนําระดับเสียง จึงเป็นไปได้ที่จะสะท้อนน้ําเสียงของเสียงต้นฉบับ รวมถึงระดับเสียงด้วย คุณลักษณะนี้มีประโยชน์อย่างยิ่งสําหรับการร้องเพลงและสถานการณ์อื่นๆ ที่การรักษาท่วงทํานองดั้งเดิมหรือรูปแบบระดับเสียงเป็นสิ่งสําคัญ", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "ใช้โมเดลที่ผ่านการฝึกอบรมล่วงหน้าเมื่อฝึกของคุณเอง วิธีการนี้ช่วยลดระยะเวลาการฝึกอบรมและปรับปรุงคุณภาพโดยรวม", + "Extract Features": "คุณสมบัติสารสกัด", + "Start Training": "เริ่มการฝึกอบรม", + "Generate Index": "สร้างดัชนี", + "Voice Model": "รูปแบบเสียง", + "Select the voice model to use for the conversion.": "เลือกรูปแบบเสียงที่จะใช้สําหรับการแปลง", + "Index File": "ไฟล์ดัชนี", + "Select the index file to use for the conversion.": "เลือกไฟล์ดัชนีที่จะใช้สําหรับการแปลง", + "Refresh": "ฟื้นฟู", + "Unload Voice": "ยกเลิกการโหลดเสียง", + "Single": "โสด", + "Upload Audio": "อัพโหลดเสียง", + "Select Audio": "เลือกเสียง", + "Select the audio to convert.": "เลือกเสียงที่จะแปลง", + "Advanced Settings": "การตั้งค่าขั้นสูง", + "Clear Outputs (Deletes all audios in assets/audios)": "Clear Outputs (ลบไฟล์เสียงทั้งหมดในเนื้อหา/ไฟล์เสียง)", + "Custom Output Path": "เส้นทางเอาต์พุตที่กําหนดเอง", + "Output Path": "เส้นทางเอาต์พุต", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "เส้นทางที่จะบันทึกเสียงเอาต์พุตโดยค่าเริ่มต้นในเนื้อหา/ไฟล์เสียง/output.wav", + "Split Audio": "แยกเสียง", + "Split the audio into chunks for inference to obtain better results in some cases.": "แบ่งเสียงออกเป็นชิ้นๆ เพื่อการอนุมานเพื่อให้ได้ผลลัพธ์ที่ดีขึ้นในบางกรณี", + "Autotune": "ออโต้จูน", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "ใช้ซอฟต์ออโต้จูนกับการอนุมานของคุณ ซึ่งแนะนําสําหรับการแปลงการร้องเพลง", + "Clean Audio": "ทําความสะอาดเสียง", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "ทําความสะอาดเอาต์พุตเสียงของคุณโดยใช้อัลกอริธึมการตรวจจับเสียงรบกวน ซึ่งแนะนําสําหรับการพูดไฟล์เสียง", + "Clean Strength": "ความแข็งแรงสะอาด", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "ตั้งค่าระดับการล้างข้อมูลเป็นเสียงที่คุณต้องการยิ่งคุณเพิ่มมากเท่าไหร่ก็ยิ่งทําความสะอาดได้มากขึ้นเท่านั้น แต่เป็นไปได้ว่าเสียงจะถูกบีบอัดมากขึ้น", + "Pitch": "ขว้าง", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "ตั้งค่าระดับเสียง ยิ่งค่าสูง ระดับเสียงก็จะยิ่งสูงขึ้น", + "Filter Radius": "รัศมีตัวกรอง", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "หากจํานวนมากกว่าหรือเท่ากับสามการใช้การกรองค่ามัธยฐานกับผลลัพธ์ของโทนเสียงที่รวบรวมได้มีศักยภาพในการลดการหายใจ", + "Search Feature Ratio": "อัตราส่วนคุณลักษณะการค้นหา", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "อิทธิพลที่เกิดจากไฟล์ดัชนี ค่าที่สูงขึ้นสอดคล้องกับอิทธิพลที่มากขึ้น อย่างไรก็ตาม การเลือกใช้ค่าที่ต่ํากว่าสามารถช่วยบรรเทาสิ่งประดิษฐ์ที่มีอยู่ในเสียงได้", + "Volume Envelope": "ซองจดหมายปริมาณ", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "แทนที่หรือผสมกับซองปริมาตรของเอาต์พุต ยิ่งอัตราส่วนใกล้เคียงกับ 1 มากเท่าไหร่ก็ยิ่งใช้ซองเอาต์พุตมากขึ้นเท่านั้น", + "Protect Voiceless Consonants": "ปกป้องพยัญชนะไร้เสียง", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "ปกป้องพยัญชนะและเสียงหายใจที่แตกต่างกันเพื่อป้องกันการฉีกขาดของอิเล็กโทรอะคูสติกและสิ่งประดิษฐ์อื่นๆ การดึงพารามิเตอร์ไปที่ค่าสูงสุด 0.5 ให้การป้องกันที่ครอบคลุม อย่างไรก็ตาม การลดค่านี้อาจลดขอบเขตของการป้องกันในขณะที่อาจบรรเทาผลกระทบจากการจัดทําดัชนี", + "Pitch extraction algorithm": "อัลกอริธึมการแยกระดับเสียง", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "อัลกอริธึมการแยกระดับเสียงเพื่อใช้สําหรับการแปลงเสียง อัลกอริทึมเริ่มต้นคือ rmvpe ซึ่งแนะนําสําหรับกรณีส่วนใหญ่", + "Convert": "แปลง", + "Export Audio": "ส่งออกเสียง", + "Batch": "ชุด", + "Input Folder": "โฟลเดอร์อินพุต", + "Select the folder containing the audios to convert.": "เลือกโฟลเดอร์ที่มีไฟล์เสียงที่จะแปลง", + "Enter input path": "ป้อนเส้นทางอินพุต", + "Output Folder": "โฟลเดอร์ผลลัพธ์", + "Select the folder where the output audios will be saved.": "เลือกโฟลเดอร์ที่จะบันทึกไฟล์เสียงที่ส่งออก", + "Enter output path": "ป้อนเส้นทางเอาต์พุต", + "Get information about the audio": "รับข้อมูลเกี่ยวกับเสียง", + "Information about the audio file": "ข้อมูลเกี่ยวกับไฟล์เสียง", + "Waiting for information...": "รอข้อมูล...", + "## Voice Blender": "## เครื่องปั่นเสียง", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "เลือกรุ่นเสียงสองแบบตั้งค่าเปอร์เซ็นต์การผสมที่คุณต้องการและผสมผสานเป็นเสียงใหม่ทั้งหมด", + "Voice Blender": "เครื่องปั่นเสียง", + "Drag and drop your model here": "ลากและวางโมเดลของคุณที่นี่", + "You can also use a custom path.": "คุณยังสามารถใช้เส้นทางที่กําหนดเอง", + "Blend Ratio": "อัตราส่วนการผสม", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "การปรับตําแหน่งไปทางด้านใดด้านหนึ่งมากขึ้นจะทําให้โมเดลคล้ายกับครั้งแรกหรือครั้งที่สองมากขึ้น", + "Fusion": "ฟิวชั่น", + "Path to Model": "เส้นทางสู่โมเดล", + "Enter path to model": "ป้อนเส้นทางไปยังแบบจําลอง", + "Model information to be placed": "ข้อมูลรุ่นที่จะวาง", + "Inroduce the model information": "ให้ข้อมูลโมเดล", + "The information to be placed in the model (You can leave it blank or put anything).": "ข้อมูลที่จะวางในแบบจําลอง (คุณสามารถเว้นว่างไว้หรือใส่อะไรก็ได้)", + "View model information": "ดูข้อมูลรุ่น", + "Introduce the model pth path": "แนะนําเส้นทาง pth ของโมเดล", + "View": "ทิวทัศน์", + "Model extraction": "การสกัดแบบจําลอง", + "Model conversion": "การแปลงโมเดล", + "Pth file": "ไฟล์ Pth", + "Output of the pth file": "เอาต์พุตของไฟล์ pth", + "# How to Report an Issue on GitHub": "# วิธีรายงานปัญหาใน GitHub", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. คลิกที่ปุ่ม 'บันทึกหน้าจอ' ด้านล่างเพื่อเริ่มบันทึกปัญหาที่คุณพบ", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. เมื่อคุณบันทึกปัญหาเสร็จแล้ว ให้คลิกที่ปุ่ม 'หยุดการบันทึก' (ปุ่มเดิม แต่ป้ายกํากับจะเปลี่ยนขึ้นอยู่กับว่าคุณกําลังบันทึกอยู่หรือไม่)", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. ไปที่ [GitHub Issues](https://github.com/IAHispano/Applio/issues) และคลิกที่ปุ่ม 'New Issue'", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. กรอกเทมเพลตปัญหาที่ให้มา เพื่อให้แน่ใจว่ามีรายละเอียดตามต้องการ และใช้ส่วนเนื้อหาเพื่ออัปโหลดไฟล์ที่บันทึกไว้จากขั้นตอนก่อนหน้า", + "Record Screen": "หน้าจอบันทึก", + "Record": "บันทึก", + "Stop Recording": "หยุดการบันทึก", + "Introduce the model .pth path": "แนะนําโมเดล .pth path", + "See Model Information": "ดูข้อมูลรุ่น", + "## Download Model": "## ดาวน์โหลดโมเดล", + "Model Link": "ลิงค์โมเดล", + "Introduce the model link": "แนะนําลิงค์โมเดล", + "Download Model": "ดาวน์โหลดโมเดล", + "## Drop files": "## วางไฟล์", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "ลากไฟล์ .pth และไฟล์ .index ลงในช่องว่างนี้ ลากหนึ่งแล้วลากอีกอันหนึ่ง", + "TTS Voices": "เสียง TTS", + "Select the TTS voice to use for the conversion.": "เลือกเสียง TTS ที่จะใช้สําหรับการแปลง", + "Text to Synthesize": "ข้อความที่จะสังเคราะห์", + "Enter the text to synthesize.": "ป้อนข้อความที่จะสังเคราะห์", + "Or you can upload a .txt file": "หรือคุณสามารถอัปโหลดไฟล์ .txt", + "Enter text to synthesize": "ป้อนข้อความที่จะสังเคราะห์", + "Output Path for TTS Audio": "เส้นทางเอาต์พุตสําหรับเสียง TTS", + "Output Path for RVC Audio": "เส้นทางเอาต์พุตสําหรับเสียง RVC", + "Enable Applio integration with Discord presence": "เปิดใช้งานการรวม Applio กับการแสดงตนของ Discord", + "It will activate the possibility of displaying the current Applio activity in Discord.": "มันจะเปิดใช้งานความเป็นไปได้ในการแสดงกิจกรรม Applio ปัจจุบันใน Discord", + "Enable Applio integration with applio.org/models using flask": "เปิดใช้งานการรวม Applio กับ applio.org/models โดยใช้ขวด", + "It will activate the possibility of downloading models with a click from the website.": "มันจะเปิดใช้งานความเป็นไปได้ในการดาวน์โหลดโมเดลด้วยการคลิกจากเว็บไซต์", + "Theme": "หัวข้อ", + "Select the theme you want to use. (Requires restarting Applio)": "เลือกธีมที่คุณต้องการใช้ (ต้องรีสตาร์ท Applio)", + "Language": "ภาษา", + "Select the language you want to use. (Requires restarting Applio)": "เลือกภาษาที่คุณต้องการใช้ (ต้องรีสตาร์ท Applio)", + "Plugin Installer": "ตัวติดตั้งปลั๊กอิน", + "Drag your plugin.zip to install it": "ลาก plugin.zip ของคุณเพื่อติดตั้ง", + "Version Checker": "ตัวตรวจสอบเวอร์ชัน", + "Check which version of Applio is the latest to see if you need to update.": "ตรวจสอบว่า Applio เวอร์ชันใดเป็นเวอร์ชันล่าสุดเพื่อดูว่าคุณจําเป็นต้องอัปเดตหรือไม่", + "Check for updates": "ตรวจหาการอัปเดต" +} \ No newline at end of file diff --git a/assets/i18n/languages/tr_TR.json b/assets/i18n/languages/tr_TR.json new file mode 100644 index 0000000000000000000000000000000000000000..d5c6a81bccea22acd9e2f3887bce70a9033fe892 --- /dev/null +++ b/assets/i18n/languages/tr_TR.json @@ -0,0 +1,215 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "Üstün ses kopyalama aracı, rakipsiz güç, modülerlik ve kullanıcı dostu deneyim için özenle optimize edilmiştir.\n[Türkçe çeviri: Enes](https://discord.com/users/1140031358006202468)", + "This section contains some extra utilities that often may be in experimental phases.": "Bu bölümde, genellikle deneysel aşamalarda olabilecek bazı ekstra yardımcı programlar bulunur.", + "Output Information": "Çıktı Bilgileri", + "The output information will be displayed here.": "Çıktı bilgileri burada görüntülenecektir.", + + "Inference": "Arayüz", + "Train": "Eğitim", + "Extra": "Ekstra", + "Merge Audios": "Sesleri Birleştir", + "Processing": "İşleme", + "Audio Analyzer": "Ses Analizörü", + "Model Information": "Model Bilgileri", + "Plugins": "Eklentiler", + "Download": "İndir", + "Report a Bug": "Bir Hata Bildir", + "Settings": "Ayarlar", + + "Preprocess": "İşlem Öncesi", + "Model Name": "Model Adı", + "Name of the new model.": "Yeni modelin adı.", + "Enter model name": "Model adını girin", + "Dataset Path": "Veri Kümesi Yolu", + "Path to the dataset folder.": "Veri kümesi klasörünün yolu.", + "Refresh Datasets": "Veri Kümelerini Yenile", + "Dataset Creator": "Veri Kümesi Oluşturucu", + "Dataset Name": "Veri Kümesi Adı", + "Name of the new dataset.": "Yeni veri kümesinin adı.", + "Enter dataset name": "Veri kümesi adını girin", + "Upload Audio Dataset": "Ses Veri Kümesini Yükle", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Ses dosyası veri kümesine başarıyla eklendi. Lütfen işlem öncesi düğmesine tıklayın.", + "Enter dataset path": "Veri kümesi yolunu girin", + "Sampling Rate": "Örnekleme Hızı", + "The sampling rate of the audio files.": "Ses dosyalarının örnekleme hızı.", + "RVC Version": "RVC Sürümü", + "The RVC version of the model.": "Modelin RVC sürümü.", + "Preprocess Dataset": "Veri Kümesini İşlem Öncesinden Geçir", + + "Embedder Model": "Gömme Modeli", + "Model used for learning speaker embedding.": "Konuşmacı gömmelerini öğrenmek için kullanılan model.", + "Extract": "Çıkar", + "Hop Length": "Adım Uzunluğu", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Sistemin önemli bir perde değişikliğine geçmesi için gereken süreyi belirtir. Daha küçük adım uzunlukları, çıkarsama için daha fazla zaman gerektirir ancak daha yüksek perde doğruluğu sağlar.", + "Batch Size": "Toplu Boyutu", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Bunu GPU'nuzun mevcut VRAM'iyle uyumlu hale getirmeniz önerilir. 4'lük bir ayar daha iyi doğruluk ancak daha yavaş işleme sunarken, 8 daha hızlı ve standart sonuçlar sağlar.", + "Save Every Epoch": "Her Dönemde Kaydet", + "Determine at how many epochs the model will saved at.": "Modelin kaçıncı çağlarda kaydedileceğini belirleyin.", + "Total Epoch": "Toplam Çağ", + "Specifies the overall quantity of epochs for the model training process.": "Model eğitim süreci için gereken toplam dönem sayısını belirtir.", + "Pretrained": "Önceden Eğitimli", + "Save Only Latest": "Sadece Son Sürümü Kaydet", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Bu ayarın etkinleştirilmesi, G ve D dosyalarının yalnızca en son sürümlerinin kaydedilmesine neden olur ve depolama alanından tasarruf sağlar.", + "Save Every Weights": "Tüm Ağırlıkları Kaydet", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Bu ayar, her dönemin sonunda modelin ağırlıklarını kaydetmenizi sağlar.", + "Custom Pretrained": "Özel Önceden Eğitimli", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Özel önceden eğitilmiş modelleri kullanmak üstün sonuçlar doğurabilir, çünkü belirli kullanım durumuna göre uyarlanmış en uygun önceden eğitilmiş modelleri seçmek performansı önemli ölçüde artırabilir.", + "Upload Pretrained Model": "Önceden Eğitimli Model Yükle", + "Refresh Custom Pretraineds": "Özel Önceden Eğitimleri Yenile", + "Pretrained Custom Settings": "Önceden Eğitimli Özel Ayarlar", + "The file you dropped is not a valid pretrained file. Please try again.": "Bıraktığınız dosya geçerli bir önceden eğitilmiş dosya değil. Lütfen tekrar deneyin.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "Açılır menüde önceden eğitilmiş dosyayı görmek için yenile düğmesine tıklayın.", + "Pretrained G Path": "Özel Önceden Eğitimli G", + "Pretrained D Path": "Özel Önceden Eğitimli D", + "GPU Settings": "GPU Ayarları", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Gelişmiş GPU ayarlarını belirler, daha iyi GPU mimarisine sahip kullanıcılar için önerilir.", + "GPU Custom Settings": "GPU Özel Ayarları", + "GPU Number": "GPU Numarası", + "0 to ∞ separated by -": "0'dan sonsuza kadar - ile ayrılmış", + "GPU Information": "GPU Bilgileri", + "Pitch Guidance": "Perde Rehberliği", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Perde rehberliğini kullanarak, orijinal sesin tonlamasını, perde de dahil olmak üzere yansıtmak mümkün hale gelir. Bu özellik, özellikle orijinal melodiyi veya perde düzenini korumak için hayati önem taşıyan şarkı söyleme ve diğer senaryolar için değerlidir.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Kendi modelinizi eğitirken önceden eğitilmiş modelleri kullanın. Bu yaklaşım, eğitim süresini azaltır ve genel kaliteyi artırır.", + "Extract Features": "Özellikleri Çıkar", + "Overtraining Detector": "Aşırı Eğitim Dedektörü", + "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data.": "Modelin eğitim verilerini çok iyi öğrenmesini ve yeni verilere genelleme yeteneğini kaybetmesini önlemek için aşırı eğitimi tespit edin.", + "Overtraining Detector Settings": "Aşırı Eğitim Dedektörü Ayarları", + "Overtraining Threshold": "Aşırı Eğitim Eşiği", + "Set the maximum number of epochs you want your model to stop training if no improvement is detected.": "Herhangi bir iyileşme tespit edilmezse modelinizin eğitimini durdurmasını istediğiniz maksimum epoch sayısını ayarlayın.", + + "Start Training": "Eğitmeye Başla", + "Stop Training & Restart Applio": "Eğitimi Durdur ve Applio'yu Yeniden Başlat", + "Generate Index": "Dizin Oluştur", + + "Export Model": "Modeli Dışa Aktar", + "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive.": "'Yükle' düğmesi yalnızca google colab içindir: Dışa aktarılan dosyaları Google Drive'ınızdaki ApplioExported klasörüne yükler.", + "Exported Pth file": "Dışa Aktarılan Pth dosyası", + "Exported Index file": "Dışa Aktarılan Dizin dosyası", + "Select the pth file to be exported": "Dışa aktarılacak pth dosyasını seçin", + "Select the index file to be exported": "Dışa aktarılacak dizin dosyasını seçin", + "Upload": "Yükle", + + "Voice Model": "Ses Modeli", + "Select the voice model to use for the conversion.": "Dönüştürme için kullanılacak ses modelini seçin.", + "Index File": "Dizin Dosyası", + "Select the index file to use for the conversion.": "Dönüştürme için kullanılacak dizin dosyasını seçin.", + "Refresh": "Yenile", + "Unload Voice": "Sesi Kaldır", + + "Single": "Tek", + "Upload Audio": "Ses Yükle", + "Select Audio": "Ses Seç", + "Select the audio to convert.": "Dönüştürülecek sesi seçin.", + "Advanced Settings": "Gelişmiş Ayarlar", + "Clear Outputs (Deletes all audios in assets/audios)": "Çıktıları Temizle (assets/audios klasöründeki tüm sesleri siler)", + "Custom Output Path": "Özel Çıktı Yolu", + "Output Path": "Çıktı Yolu", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "Varsayılan olarak assets/audios/output.wav'da kaydedilecek çıktı sesinin yolu", + "Split Audio": "Sesi Böl", + "Split the audio into chunks for inference to obtain better results in some cases.": "Daha iyi sonuçlar elde etmek için bazı durumlarda çıkarım için sesi parçalara bölün.", + "Autotune": "Autotune", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "Çıkarımlarınıza yumuşak bir autotune uygulayın, şarkı dönüştürmeleri için önerilir.", + "Clean Audio": "Sesi Temizle", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Ses algılama algoritmaları kullanarak ses çıktınızı temizleyin, konuşan sesler için önerilir.", + "Clean Strength": "Temiz Gücü", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "İstediğiniz sese temizleme seviyesini ayarlayın, ne kadar artırırsanız o kadar temizler, ancak sesin daha fazla sıkıştırılması mümkündür.", + "Pitch": "Perde", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "Sesin perdesini ayarlayın, değer ne kadar yüksek olursa perde o kadar yüksek olur.", + "Filter Radius": "Filtre Yarıçapı", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Sayı üçten büyük veya ona eşitse, toplanan ton sonuçlarına ortanca filtreleme uygulamak solunumu azaltabilir.", + "Search Feature Ratio": "Arama Özelliği Oranı", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Dizin dosyası tarafından uygulanan etki; daha yüksek bir değer daha büyük etkiye karşılık gelir. Ancak daha düşük değerler seçmek, sesteki var olan eserlerin azaltılmasına yardımcı olabilir.", + "Volume Envelope": "Ses Zarıfı", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Çıktının ses zarfı ile değiştirme veya karıştırma yapın. Oran 1'e ne kadar yakınsa, çıktı zarfı o kadar fazla kullanılır.", + "Protect Voiceless Consonants": "Sessiz Ünsüzleri Koru", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Elektro-akustik yırtılmayı ve diğer eserleri önlemek için farklı ünsüzleri ve solunum seslerini koruyun. Parametreyi maksimum değeri 0,5'e çekmek kapsamlı koruma sağlar. Ancak bu değeri azaltmak, koruma kapsamını azaltırken dizin oluşturma etkisini azaltabilir.", + "Pitch extraction algorithm": "Perde çıkarma algoritması", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Ses dönüşümü için kullanılacak perde çıkarma algoritması. Varsayılan algoritma, çoğu durum için önerilen rmvpedir.", + + "Convert": "Dönüştür", + "Export Audio": "Sesi Dışa Aktar", + + "Batch": "Toplu", + "Input Folder": "Giriş Klasörü", + "Select the folder containing the audios to convert.": "Dönüştürülecek sesleri içeren klasörü seçin.", + "Enter input path": "Giriş yolunu girin", + "Output Folder": "Çıktı Klasörü", + "Select the folder where the output audios will be saved.": "Çıktı seslerinin kaydedileceği klasörü seçin.", + "Enter output path": "Çıktı yolunu girin", + + "Get information about the audio": "Ses hakkında bilgi al", + + "## Voice Blender": "## Ses Karıştırıcı", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "İki ses modeli seçin, istediğiniz karışım yüzdesini ayarlayın ve bunları tamamen yeni bir sese karıştırın.", + "Voice Blender": "Ses Karıştırıcı", + "Drag and drop your model here": "Modelinizi buraya sürükleyip bırakın", + "You can also use a custom path.": "Özel bir yol da kullanabilirsiniz.", + "Blend Ratio": "Karışım Oranı", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Konumu bir yöne veya diğerine daha fazla ayarlayarak modeli birinci veya ikinciye daha benzer hale getireceksiniz.", + "Fusion": "Birleştirme", + + "Path to Model": "Modele Giden Yol", + "Enter path to model": "Modele giden yolu girin", + "Model information to be placed": "Yerleştirilecek model bilgileri", + "Inroduce the model information": "Model bilgilerini tanıtın", + "The information to be placed in the model (You can leave it blank or put anything).": "Modele yerleştirilecek bilgiler (Boş bırakabilir veya bir şey koyabilirsiniz).", + "View model information": "Model bilgilerini görüntüleyin", + "Introduce the model pth path": "Model pth yolunu tanıtın", + "View": "Görüntüle", + "Model extraction": "Model çıkarımı", + "Model conversion": "Model dönüştürme", + "Pth file": "Pth dosyası", + "Output of the pth file": "Pth dosyasının çıktısı", + + "# How to Report an Issue on GitHub": "# GitHub'da Bir Sorunu Nasıl Bildirirsiniz", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Yaşadığınız sorunu kaydetmeye başlamak için aşağıdaki 'Ekran Kaydı' düğmesine tıklayın.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Sorunu kaydetmeyi tamamladığınızda, 'Kaydı Durdur' düğmesine tıklayın (aynı düğme, ancak aktif olarak kayıt yapıp yapmadığınıza bağlı olarak etiket değişir).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [GitHub Sorunlarına](https://github.com/IAHispano/Applio/issues) gidin ve 'Yeni Sorun' düğmesine tıklayın.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Sağlanan sorun şablonunu tamamlayın, gerektiği gibi ayrıntıları eklediğinizden emin olun ve önceki adımdan kaydedilen dosyayı yüklemek için varlıklar bölümünü kullanın.", + + "Record Screen": "Ekranı Kaydet", + "Record": "Kayıt Yap", + "Stop Recording": "Kaydı Durdur", + + "Introduce the model .pth path": "Model .pth yolunu tanıtın", + "See Model Information": "Model Bilgilerini Görün", + + "## Download Model": "## Model İndirin", + "Model Link": "Model Bağlantısı", + "Introduce the model link": "Model bağlantısını tanıtın", + "Download Model": "Modeli İndirin", + "## Drop files": "## Dosyaları bırakın", + "Drag your .pth file and .index file into this space. Drag one and then the other.": ".pth dosyanızı ve .index dosyanızı bu alana sürükleyin. Önce birini sonra diğerini sürükleyin.", + "## Search Model": "## Modeli Ara", + "Search": "Ara", + "Introduce the model name to search.": "Aramak için model adını girin.", + "We couldn't find models by that name.": "Bu isim'e sahip bir model bulunamadı.", + + "TTS Voices": "TTS Sesleri", + "Select the TTS voice to use for the conversion.": "Dönüşüm için kullanılacak TTS sesini seçin.", + "Text to Synthesize": "Sentezlemek İçin Metin", + "Enter the text to synthesize.": "Sentezlemek için metni girin.", + "Or you can upload a .txt file": "Veya bir .txt dosyası yükleyebilirsiniz", + "Enter text to synthesize": "Sentezlemek için metin girin", + "Output Path for TTS Audio": "TTS Sesinin Çıktı Yolu", + "Output Path for RVC Audio": "RVC Sesinin Çıktı Yolu", + + "Enable Applio integration with Discord presence": "Discord oynuyor Applio entegrasyonunu etkinleştirin", + "It will activate the possibility of displaying the current Applio activity in Discord.": "Applio geçerli etkinliğini Discord'da görüntüleme olasılığını etkinleştirir.", + "Enable Applio integration with applio.org/models using flask": "Flask kullanarak applio.org/models ile Applio entegrasyonunu etkinleştirin", + "It will activate the possibility of downloading models with a click from the website.": "Web sitesinden bir tıklama ile modellerin indirilmesi olasılığını etkinleştirir.", + "Enable fake GPU": "Sahte GPU'yu Etkinleştir", + "Training is currently unsupported due to the absence of a GPU. To activate the training tab, navigate to the settings tab and enable the 'Fake GPU' option.": "GPU olmadığı için eğitim şu anda desteklenmiyor. Eğitim sekmesini etkinleştirmek için ayarlar sekmesine gidin ve 'Sahte GPU' seçeneğini etkinleştirin.", + "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)": "Eğitim sekmesini etkinleştirir. Ancak, bu cihazda GPU yetenekleri olmadığından, eğitim desteklenmez. Bu seçenek yalnızca test amaçlıdır. (Bu seçenek Applio'yu yeniden başlatacaktır)", + "Theme": "Tema", + "Select the theme you want to use. (Requires restarting Applio)": "Kullanmak istediğiniz temayı seçin. (Applio'yu yeniden başlatmayı gerektirir)", + "Language": "Dil", + "Select the language you want to use. (Requires restarting Applio)": "Kullanmak istediğiniz dili seçin. (Applio'yu yeniden başlatmayı gerektirir)", + + "Plugin Installer": "Plugin Yükleyici", + "Drag your plugin.zip to install it": "Yüklemek için plugin.zip'inizi sürükleyin", + + "Version Checker": "Sürüm Denetleyicisi", + "Check which version of Applio is the latest to see if you need to update.": "Güncellemeniz gerekip gerekmediğini görmek için Applio'nun hangi sürümünün en son olduğunu kontrol edin.", + "Check for updates": "Güncellemeleri kontrol et" +} diff --git a/assets/i18n/languages/uk_UK.json b/assets/i18n/languages/uk_UK.json new file mode 100644 index 0000000000000000000000000000000000000000..8683eae280369468de7cf19b0e48358a0e856081 --- /dev/null +++ b/assets/i18n/languages/uk_UK.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "Найкращий інструмент для клонування голосу, ретельно оптимізований для неперевершеної потужності, модульності та зручного використання.", + "This section contains some extra utilities that often may be in experimental phases.": "Цей розділ містить деякі додаткові утиліти, які часто можуть перебувати на експериментальних стадіях.", + "Output Information": "Вихідна інформація", + "The output information will be displayed here.": "Тут буде відображена вихідна інформація.", + "Inference": "Висновок", + "Train": "Поїзд", + "Extra": "Додаткові", + "Merge Audios": "Об'єднання аудіо", + "Processing": "Обробки", + "Audio Analyzer": "Аналізатор звуку", + "Model Information": "Інформація про модель", + "Plugins": "Плагіни", + "Download": "Завантажити", + "Report a Bug": "Повідомити про помилку", + "Settings": "Параметри", + "Preprocess": "Попередня обробка", + "Model Name": "Назва моделі", + "Name of the new model.": "Назва нової моделі.", + "Enter model name": "Введіть назву моделі", + "Dataset Path": "Шлях набору даних", + "Path to the dataset folder.": "Шлях до папки набору даних.", + "Refresh Datasets": "Оновити набори даних", + "Dataset Creator": "Творець набору даних", + "Dataset Name": "Ім'я набору даних", + "Name of the new dataset.": "Ім'я нового набору даних.", + "Enter dataset name": "Введіть назву набору даних", + "Upload Audio Dataset": "Завантажити аудіо набір даних", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Аудіофайл успішно додано до набору даних. Будь ласка, натисніть кнопку попередньої обробки.", + "Enter dataset path": "Введіть шлях набору даних", + "Sampling Rate": "Частота дискретизації", + "The sampling rate of the audio files.": "Частота дискретизації аудіофайлів.", + "RVC Version": "Версія RVC", + "The RVC version of the model.": "Версія моделі RVC.", + "Preprocess Dataset": "Набір даних попередньої обробки", + "Extract": "Екстракт", + "Hop Length": "Довжина хмелю", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Позначає час, необхідний для переходу системи до значної зміни висоти тону. Менша довжина стрибка вимагає більше часу для виведення, але, як правило, дає вищу точність кроку.", + "Batch Size": "Розмір партії", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Бажано вирівняти його з доступною відеопам'яттю вашого графічного процесора. Значення 4 забезпечує підвищену точність, але повільнішу обробку, тоді як 8 забезпечує швидші та стандартніші результати.", + "Save Every Epoch": "Врятуйте кожну епоху", + "Determine at how many epochs the model will saved at.": "Визначте, у скількох епохах збережеться модель.", + "Total Epoch": "Ціла епоха", + "Specifies the overall quantity of epochs for the model training process.": "Визначає загальну кількість епох для процесу навчання моделі.", + "Pretrained": "Попереднє навчання", + "Save Only Latest": "Зберігайте лише останні", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Увімкнення цього параметра призведе до того, що файли G і D зберігатимуть лише найновіші версії, ефективно заощаджуючи місце для зберігання.", + "Save Every Weights": "Збережіть кожну вагу", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Цей параметр дозволяє зберегти вагу моделі в кінці кожної епохи.", + "Custom Pretrained": "Індивідуальне попереднє навчання", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Використання спеціальних попередньо навчених моделей може призвести до чудових результатів, оскільки вибір найбільш підходящих попередньо навчених моделей, адаптованих до конкретного випадку використання, може значно підвищити продуктивність.", + "Upload Pretrained Model": "Завантажте попередньо навчену модель", + "Refresh Custom Pretraineds": "Оновлення користувацьких попередньо навчених", + "Pretrained Custom Settings": "Попередньо навчені користувацькі налаштування", + "The file you dropped is not a valid pretrained file. Please try again.": "Файл, який ви скинули, не є дійсним попередньо навченим файлом. Будь ласка, спробуйте ще раз.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "Натисніть кнопку «Оновити», щоб переглянути попередньо підготовлений файл у розкривному меню.", + "Pretrained G Path": "Спеціальна попередньо навчена G", + "Pretrained D Path": "Спеціальний попередньо навчений D", + "GPU Settings": "Налаштування графічного процесора", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Встановлює розширені налаштування графічного процесора, рекомендовані для користувачів із кращою архітектурою графічного процесора.", + "GPU Custom Settings": "Користувацькі налаштування графічного процесора", + "GPU Number": "Номер графічного процесора", + "0 to ∞ separated by -": "від 0 до ∞ розділені -", + "GPU Information": "Інформація про графічний процесор", + "Pitch Guidance": "Керівництво пітчем", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Використовуючи висоту тону, стає можливим відобразити інтонацію оригінального голосу, включаючи його висоту. Ця функція особливо цінна для співу та інших сценаріїв, де важливо зберегти оригінальну мелодію або висоту тону.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Використовуйте попередньо підготовлені моделі під час навчання власних. Такий підхід скорочує тривалість навчання і підвищує загальну якість.", + "Extract Features": "особливості витягу", + "Start Training": "Почати навчання", + "Generate Index": "Згенерувати індекс", + "Voice Model": "Голосова модель", + "Select the voice model to use for the conversion.": "Виберіть модель голосу, яку потрібно використовувати для перетворення.", + "Index File": "Індексний файл", + "Select the index file to use for the conversion.": "Виберіть файл покажчика, який буде використано для перетворення.", + "Refresh": "Оновити", + "Unload Voice": "Вивантажити голос", + "Single": "Одного", + "Upload Audio": "Завантажити аудіо", + "Select Audio": "Виберіть Аудіо", + "Select the audio to convert.": "Виберіть аудіо, яке потрібно конвертувати.", + "Advanced Settings": "Розширені налаштування", + "Clear Outputs (Deletes all audios in assets/audios)": "Очистити виходи (видаляє всі аудіозаписи в ресурсах/аудіозаписах)", + "Custom Output Path": "Власний вихідний шлях", + "Output Path": "Вихідний шлях", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "Шлях, за яким буде збережено вихідне аудіо, за замовчуванням у assets/audios/output.wav", + "Split Audio": "Розділене аудіо", + "Split the audio into chunks for inference to obtain better results in some cases.": "Розділіть аудіо на фрагменти для висновків, щоб отримати кращі результати в деяких випадках.", + "Autotune": "Автотюнінг", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "Застосовуйте до своїх висновків м'яку автонастройку, рекомендовану для співочих перетворень.", + "Clean Audio": "Чистий звук", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Очистіть аудіовихід за допомогою алгоритмів виявлення шуму, рекомендованих для озвучування аудіо.", + "Clean Strength": "Чиста міцність", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Встановіть потрібний рівень очищення звуку, чим більше ви його збільшите, тим більше він буде очищений, але можливо, що звук буде більш стиснутим.", + "Pitch": "Крок", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "Встановіть висоту звуку, чим вище значення, тим вище висота.", + "Filter Radius": "Радіус фільтра", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Якщо число більше або дорівнює трьом, використання медіанної фільтрації на результатах зібраного тону може призвести до зниження дихання.", + "Search Feature Ratio": "Співвідношення функцій пошуку", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Вплив, який чинить індексний файл; Більш високе значення відповідає більшому впливу. Однак вибір нижчих значень може допомогти пом'якшити артефакти, присутні в аудіо.", + "Volume Envelope": "Об'ємний конверт", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Замініть або змішайте з об'ємною огинаючою виводу. Чим ближче відношення до 1, тим більше використовується вихідна огинаюча.", + "Protect Voiceless Consonants": "Захист глухих приголосних", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Захистіть чіткі приголосні та дихальні звуки, щоб запобігти електроакустичним розривам та іншим артефактам. Підтягування параметра до максимального значення 0,5 забезпечує комплексний захист. Однак зменшення цього значення може зменшити ступінь захисту, потенційно пом'якшуючи ефект індексації.", + "Pitch extraction algorithm": "Алгоритм вилучення кроку", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Алгоритм вилучення висоти тону, який слід використовувати для перетворення звуку. Типовим алгоритмом є rmvpe, який рекомендується для більшості випадків.", + "Convert": "Перетворити", + "Export Audio": "Експорт аудіо", + "Batch": "Пакетний", + "Input Folder": "Папка введення", + "Select the folder containing the audios to convert.": "Виберіть папку, що містить аудіозаписи для перетворення.", + "Enter input path": "Введіть вхідний шлях", + "Output Folder": "Вихідна папка", + "Select the folder where the output audios will be saved.": "Виберіть папку, куди будуть збережені вихідні аудіозаписи.", + "Enter output path": "Введіть вихідний шлях", + "Get information about the audio": "Отримання інформації про аудіо", + "Information about the audio file": "Інформація про аудіофайл", + "Waiting for information...": "Чекаємо на інформацію...", + "## Voice Blender": "## Голосовий блендер", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Виберіть дві моделі голосу, встановіть бажаний відсоток накладання та змішайте їх у абсолютно новий голос.", + "Voice Blender": "Голосовий блендер", + "Drag and drop your model here": "Перетягніть модель сюди", + "You can also use a custom path.": "Ви також можете використовувати власний шлях.", + "Blend Ratio": "Пропорції змішування", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Регулювання положення більше в ту чи іншу сторону зробить модель більш схожою на першу або другу.", + "Fusion": "Злиття", + "Path to Model": "Шлях до моделі", + "Enter path to model": "Введіть шлях до моделі", + "Model information to be placed": "Інформація про модель, яку потрібно розмістити", + "Inroduce the model information": "Ознайомлення з інформацією про модель", + "The information to be placed in the model (You can leave it blank or put anything).": "Інформація, яку потрібно розмістити в моделі (Ви можете залишити її порожньою або поставити що завгодно).", + "View model information": "Перегляд інформації про модель", + "Introduce the model pth path": "Ознайомлення з моделлю pth шляху", + "View": "Вид", + "Model extraction": "Вилучення моделі", + "Model conversion": "Перетворення моделі", + "Pth file": "Pth файл", + "Output of the pth file": "Висновок p-го файлу", + "# How to Report an Issue on GitHub": "# Як повідомити про проблему на GitHub", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Натисніть кнопку «Записати екран» нижче, щоб почати запис проблеми, з якою ви зіткнулися.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Після того, як ви закінчите запис випуску, натисніть кнопку «Зупинити запис» (та сама кнопка, але мітка змінюється залежно від того, активно ви записуєте чи ні).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Перейдіть до [GitHub Issues](https://github.com/IAHispano/Applio/issues) і натисніть кнопку «Новий випуск».", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Заповніть наданий шаблон проблеми, обов'язково включивши деталі за потреби, і скористайтеся розділом активів, щоб завантажити записаний файл з попереднього кроку.", + "Record Screen": "Екран запису", + "Record": "Запис", + "Stop Recording": "Зупинити записування", + "Introduce the model .pth path": "Представляємо модель .pth шляху", + "See Model Information": "Переглянути інформацію про модель", + "## Download Model": "## Завантажити модель", + "Model Link": "Посилання на модель", + "Introduce the model link": "Ознайомлення з моделлю", + "Download Model": "Завантажити модель", + "## Drop files": "## Скиньте файли", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "Перетягніть файл .pth і файл .index у цей простір. Перетягніть одну, а потім іншу.", + "TTS Voices": "Голоси TTS", + "Select the TTS voice to use for the conversion.": "Виберіть голос TTS, який буде використано для перетворення.", + "Text to Synthesize": "Текст для синтезу", + "Enter the text to synthesize.": "Введіть текст для синтезу.", + "Or you can upload a .txt file": "Або ви можете завантажити файл .txt", + "Enter text to synthesize": "Введіть текст для синтезу", + "Output Path for TTS Audio": "Вихідний шлях для аудіо TTS", + "Output Path for RVC Audio": "Вихідний тракт для аудіо RVC", + "Enable Applio integration with Discord presence": "Увімкніть інтеграцію Applio з присутністю в Discord", + "It will activate the possibility of displaying the current Applio activity in Discord.": "Він активує можливість відображення поточної активності Applio в Discord.", + "Enable Applio integration with applio.org/models using flask": "Увімкніть інтеграцію Applio з applio.org/models за допомогою колби", + "It will activate the possibility of downloading models with a click from the website.": "Він активує можливість завантаження моделей одним кліком з сайту.", + "Theme": "Тема", + "Select the theme you want to use. (Requires restarting Applio)": "Виберіть тему, яку потрібно використовувати. (Потрібно перезапустити Applio)", + "Language": "Мова", + "Select the language you want to use. (Requires restarting Applio)": "Виберіть потрібну мову. (Потрібно перезапустити Applio)", + "Plugin Installer": "Інсталятор плагінів", + "Drag your plugin.zip to install it": "Перетягніть plugin.zip, щоб встановити його", + "Version Checker": "Перевірка версій", + "Check which version of Applio is the latest to see if you need to update.": "Перевірте, яка версія Applio найновіша, щоб дізнатися, чи потрібно вам оновлюватися.", + "Check for updates": "Перевірте наявність оновлень" +} \ No newline at end of file diff --git a/assets/i18n/languages/ur_UR.json b/assets/i18n/languages/ur_UR.json new file mode 100644 index 0000000000000000000000000000000000000000..0df96313aaa5d2918c3d3eb0e22181c2dc6dc87a --- /dev/null +++ b/assets/i18n/languages/ur_UR.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "حتمی صوتی کلوننگ ٹول ، بے مثال طاقت ، ماڈیولریٹی ، اور صارف دوست تجربے کے لئے احتیاط سے بہتر بنایا گیا ہے۔", + "This section contains some extra utilities that often may be in experimental phases.": "اس سیکشن میں کچھ اضافی افادیت شامل ہیں جو اکثر تجرباتی مراحل میں ہوسکتی ہیں۔", + "Output Information": "آؤٹ پٹ معلومات", + "The output information will be displayed here.": "آؤٹ پٹ کی معلومات یہاں ظاہر کی جائے گی۔", + "Inference": "استدلال", + "Train": "ٹرین", + "Extra": "اضافی", + "Merge Audios": "آڈیو کو ضم کریں", + "Processing": "پروسیسنگ", + "Audio Analyzer": "Audio Analyzer", + "Model Information": "ماڈل کی معلومات", + "Plugins": "پلگ ان", + "Download": "ڈاؤن لوڈ", + "Report a Bug": "ایک بگ کی رپورٹ کریں", + "Settings": "سیٹنگیں", + "Preprocess": "پری پروسیس", + "Model Name": "ماڈل کا نام", + "Name of the new model.": "نئے ماڈل کا نام", + "Enter model name": "ماڈل کا نام درج کریں", + "Dataset Path": "ڈیٹا سیٹ کا راستہ", + "Path to the dataset folder.": "ڈیٹا سیٹ فولڈر کا راستہ۔", + "Refresh Datasets": "تازہ ترین ڈیٹا سیٹ", + "Dataset Creator": "ڈیٹا سیٹ تخلیق کار", + "Dataset Name": "ڈیٹا سیٹ کا نام", + "Name of the new dataset.": "نئے ڈیٹا سیٹ کا نام۔", + "Enter dataset name": "ڈیٹا سیٹ کا نام درج کریں", + "Upload Audio Dataset": "آڈیو ڈیٹا سیٹ اپ لوڈ کریں", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "آڈیو فائل کو کامیابی سے ڈیٹا سیٹ میں شامل کیا گیا ہے۔ براہ کرم پری پروسیس بٹن پر کلک کریں۔", + "Enter dataset path": "ڈیٹا سیٹ کا راستہ درج کریں", + "Sampling Rate": "نمونے لینے کی شرح", + "The sampling rate of the audio files.": "آڈیو فائلوں کے نمونے لینے کی شرح۔", + "RVC Version": "RVC Version", + "The RVC version of the model.": "ماڈل کا آر وی سی ورژن۔", + "Preprocess Dataset": "پری پروسیس ڈیٹا سیٹ", + "Extract": "نکالنا", + "Hop Length": "ہاپ کی لمبائی", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "نظام کو ایک اہم پچ تبدیلی میں منتقل ہونے میں لگنے والے عرصے کی نشاندہی کرتا ہے۔ چھوٹی ہاپ لمبائی کو اندازہ لگانے کے لئے زیادہ وقت کی ضرورت ہوتی ہے لیکن پچ کی درستگی زیادہ ہوتی ہے۔", + "Batch Size": "Batch کا سائز", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "اسے اپنے جی پی یو کے دستیاب وی آر اے ایم کے ساتھ ہم آہنگ کرنے کا مشورہ دیا جاتا ہے۔ 4 کی ترتیب بہتر درستگی لیکن سست پروسیسنگ پیش کرتی ہے ، جبکہ 8 تیز اور معیاری نتائج فراہم کرتی ہے۔", + "Save Every Epoch": "ہر دور کو محفوظ کریں", + "Determine at how many epochs the model will saved at.": "اس بات کا تعین کریں کہ ماڈل کتنے ادوار میں محفوظ رہے گا۔", + "Total Epoch": "مجموعی دور کی نوعیت", + "Specifies the overall quantity of epochs for the model training process.": "ماڈل ٹریننگ کے عمل کے لئے ادوار کی مجموعی مقدار کی وضاحت کرتا ہے۔", + "Pretrained": "پہلے سے تربیت یافتہ", + "Save Only Latest": "صرف تازہ ترین محفوظ کریں", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "اس ترتیب کو فعال کرنے کے نتیجے میں جی اور ڈی فائلیں صرف اپنے تازہ ترین ورژن کو محفوظ کریں گی ، مؤثر طریقے سے اسٹوریج کی جگہ کو محفوظ کریں گی۔", + "Save Every Weights": "ہر وزن کو بچائیں", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "یہ ترتیب آپ کو ہر دور کے اختتام پر ماڈل کے وزن کو بچانے کے قابل بناتی ہے۔", + "Custom Pretrained": "اپنی مرضی کے مطابق پہلے سے تربیت یافتہ", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "اپنی مرضی کے مطابق پہلے سے تربیت یافتہ ماڈلز کا استعمال بہتر نتائج کا باعث بن سکتا ہے ، کیونکہ مخصوص استعمال کے معاملے کے مطابق سب سے مناسب پری ٹریننگ ماڈلز کا انتخاب کارکردگی کو نمایاں طور پر بڑھا سکتا ہے۔", + "Upload Pretrained Model": "پہلے سے تربیت یافتہ ماڈل اپ لوڈ کریں", + "Refresh Custom Pretraineds": "اپنی مرضی کے مطابق پیشگی تربیت یافتہ تازہ کاری کریں", + "Pretrained Custom Settings": "پہلے سے تربیت یافتہ کسٹم ترتیبات", + "The file you dropped is not a valid pretrained file. Please try again.": "آپ نے جو فائل چھوڑی ہے وہ درست پہلے سے تربیت یافتہ فائل نہیں ہے۔ براہ مہربانی دوبارہ کوشش کریں۔", + "Click the refresh button to see the pretrained file in the dropdown menu.": "ڈراپ ڈاؤن مینو میں پہلے سے تربیت یافتہ فائل دیکھنے کے لئے ریفریش بٹن پر کلک کریں۔", + "Pretrained G Path": "اپنی مرضی کے مطابق پہلے سے تربیت یافتہ G", + "Pretrained D Path": "اپنی مرضی کے مطابق پہلے سے تربیت یافتہ D", + "GPU Settings": "GPU Settings", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "بہتر جی پی یو آرکیٹیکچر والے صارفین کے لئے تجویز کردہ جدید جی پی یو سیٹنگز سیٹ کرتا ہے۔", + "GPU Custom Settings": "GPU اپنی مرضی کے مطابق ترتیبات", + "GPU Number": "GPU نمبر", + "0 to ∞ separated by -": "0 سے الگ ∞ -", + "GPU Information": "GPU Information", + "Pitch Guidance": "پچ گائیڈنس", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "پچ گائیڈنس کا استعمال کرتے ہوئے ، اس کی پچ سمیت اصل آواز کے آئینے کو آئینہ دار بنانا ممکن ہوجاتا ہے۔ یہ خصوصیت خاص طور پر گانے اور دیگر منظرناموں کے لئے قابل قدر ہے جہاں اصل دھن یا پچ پیٹرن کو محفوظ کرنا ضروری ہے۔", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "اپنی تربیت کرتے وقت پہلے سے تربیت یافتہ ماڈلز کا استعمال کریں۔ یہ نقطہ نظر تربیت کے دورانیے کو کم کرتا ہے اور مجموعی معیار کو بڑھاتا ہے.", + "Extract Features": "نکالنے کی خصوصیات", + "Start Training": "تربیت شروع کریں", + "Generate Index": "انڈیکس پیدا کریں", + "Voice Model": "صوتی ماڈل", + "Select the voice model to use for the conversion.": "تبادلے کے لئے استعمال کرنے کے لئے صوتی ماڈل منتخب کریں۔", + "Index File": "انڈیکس فائل", + "Select the index file to use for the conversion.": "تبادلے کے لئے استعمال کرنے کے لئے انڈیکس فائل منتخب کریں۔", + "Refresh": "تازہ", + "Unload Voice": "آواز کو ان لوڈ کریں", + "Single": "تنہا", + "Upload Audio": "آڈیو اپ لوڈ کریں", + "Select Audio": "آڈیو منتخب کریں", + "Select the audio to convert.": "تبدیل کرنے کے لئے آڈیو منتخب کریں۔", + "Advanced Settings": "اعلی درجے کی ترتیبات", + "Clear Outputs (Deletes all audios in assets/audios)": "آؤٹ پٹ صاف کریں (اثاثوں / آڈیو میں تمام آڈیو حذف کرتا ہے)", + "Custom Output Path": "اپنی مرضی کے مطابق آؤٹ پٹ پتھ", + "Output Path": "آؤٹ پٹ پتھ", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "وہ راستہ جہاں آؤٹ پٹ آڈیو محفوظ کیا جائے گا ، اثاثوں / آڈیو / output.wav میں ڈیفالٹ طور پر", + "Split Audio": "آڈیو کو تقسیم کریں", + "Split the audio into chunks for inference to obtain better results in some cases.": "کچھ معاملات میں بہتر نتائج حاصل کرنے کے لئے آڈیو کو ٹکڑوں میں تقسیم کریں۔", + "Autotune": "Autotune", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "گانے کی تبدیلیوں کے لئے تجویز کردہ اپنے تخمینوں پر نرم آٹو ٹیون لگائیں۔", + "Clean Audio": "صاف آڈیو", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "آواز کا پتہ لگانے والے الگورتھم کا استعمال کرتے ہوئے اپنے آڈیو آؤٹ پٹ کو صاف کریں ، جو آڈیو بولنے کے لئے سفارش کی جاتی ہے۔", + "Clean Strength": "صاف طاقت", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "آپ جس آڈیو کو چاہتے ہیں اس پر کلین اپ لیول سیٹ کریں ، جتنا زیادہ آپ اسے بڑھائیں گے اتنا ہی یہ صاف ہوجائے گا ، لیکن یہ ممکن ہے کہ آڈیو زیادہ کمپریسڈ ہوجائے۔", + "Pitch": "پچ", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "آڈیو کی پچ سیٹ کریں ، قیمت جتنی زیادہ ہوگی ، پچ اتنی ہی زیادہ ہوگی۔", + "Filter Radius": "فلٹر کے دائرے", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "اگر تعداد تین سے زیادہ یا اس کے برابر ہے تو ، جمع کردہ ٹون کے نتائج پر اوسط فلٹرنگ کا استعمال سانس کو کم کرنے کی صلاحیت رکھتا ہے۔", + "Search Feature Ratio": "تلاش کی خصوصیت کا تناسب", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "انڈیکس فائل کے ذریعہ اثر و رسوخ؛ ایک اعلی قیمت زیادہ اثر و رسوخ سے مطابقت رکھتی ہے. تاہم ، کم اقدار کا انتخاب آڈیو میں موجود نوادرات کو کم کرنے میں مدد کرسکتا ہے۔", + "Volume Envelope": "حجم کا لفافہ", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "آؤٹ پٹ کے حجم لفافے کے ساتھ متبادل یا مرکب کریں۔ تناسب 1 کے جتنا قریب ہوتا ہے ، اتنا ہی زیادہ آؤٹ پٹ لفافہ استعمال ہوتا ہے۔", + "Protect Voiceless Consonants": "آواز کے بغیر عبارتوں کی حفاظت کریں", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "الیکٹرو-صوتی پھٹنے اور دیگر نوادرات کو روکنے کے لئے مختلف عبارتوں اور سانس لینے کی آوازوں کی حفاظت کریں۔ پیرامیٹر کو اس کی زیادہ سے زیادہ قیمت 0.5 تک کھینچنا جامع تحفظ فراہم کرتا ہے۔ تاہم ، اس قدر کو کم کرنے سے تحفظ کی حد کم ہوسکتی ہے جبکہ ممکنہ طور پر انڈیکسنگ اثر کو کم کیا جاسکتا ہے۔", + "Pitch extraction algorithm": "پچ نکالنے کا الگورتھم", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "آڈیو تبدیلی کے لئے استعمال کرنے کے لئے پچ نکالنے کا الگورتھم۔ ڈیفالٹ الگورتھم آر ایم وی پی ای ہے ، جو زیادہ تر معاملات کے لئے سفارش کی جاتی ہے۔", + "Convert": "بدلیں", + "Export Audio": "آڈیو برآمد کریں", + "Batch": "بیچ", + "Input Folder": "ان پٹ فولڈر", + "Select the folder containing the audios to convert.": "تبدیل کرنے کے لئے آڈیو پر مشتمل فولڈر منتخب کریں۔", + "Enter input path": "ان پٹ راستہ درج کریں", + "Output Folder": "آؤٹ پٹ فولڈر", + "Select the folder where the output audios will be saved.": "وہ فولڈر منتخب کریں جہاں آؤٹ پٹ آڈیو محفوظ کیے جائیں گے۔", + "Enter output path": "آؤٹ پٹ کا راستہ درج کریں", + "Get information about the audio": "آڈیو کے بارے میں معلومات حاصل کریں", + "Information about the audio file": "آڈیو فائل کے بارے میں معلومات", + "Waiting for information...": "معلومات کا انتظار ہے...", + "## Voice Blender": "## وائس بلینڈر", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "دو صوتی ماڈل منتخب کریں ، اپنا مطلوبہ مرکب فیصد مقرر کریں ، اور انہیں مکمل طور پر نئی آواز میں بلینڈ کریں۔", + "Voice Blender": "Voice Blender", + "Drag and drop your model here": "اپنے ماڈل کو یہاں گھسیٹیں اور چھوڑیں", + "You can also use a custom path.": "آپ اپنی مرضی کے مطابق راستہ بھی استعمال کرسکتے ہیں۔", + "Blend Ratio": "مرکب تناسب", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "پوزیشن کو ایک طرف یا دوسری طرف زیادہ ایڈجسٹ کرنے سے ماڈل پہلے یا دوسرے سے زیادہ مماثلت رکھتا ہے۔", + "Fusion": "فیوژن", + "Path to Model": "ماڈل کا راستہ", + "Enter path to model": "ماڈل کا راستہ درج کریں", + "Model information to be placed": "ماڈل کی معلومات رکھی جائے گی", + "Inroduce the model information": "ماڈل کی معلومات فراہم کریں", + "The information to be placed in the model (You can leave it blank or put anything).": "ماڈل میں رکھی جانے والی معلومات (آپ اسے خالی چھوڑ سکتے ہیں یا کچھ بھی ڈال سکتے ہیں).", + "View model information": "ماڈل کی معلومات دیکھیں", + "Introduce the model pth path": "ماڈل پی ٹی ایچ راستہ متعارف کروائیں", + "View": "منظر", + "Model extraction": "ماڈل نکالنے", + "Model conversion": "ماڈل کی تبدیلی", + "Pth file": "پی ٹی ایچ فائل", + "Output of the pth file": "پی ٹی ایچ فائل کی آؤٹ پٹ", + "# How to Report an Issue on GitHub": "# گیٹ ہب پر کسی مسئلے کی اطلاع کیسے دیں", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. آپ جس مسئلے کا سامنا کر رہے ہیں اسے ریکارڈ کرنا شروع کرنے کے لئے نیچے 'ریکارڈ اسکرین' بٹن پر کلک کریں۔", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. ایک بار جب آپ مسئلے کی ریکارڈنگ مکمل کرلیں تو ، 'اسٹاپ ریکارڈنگ' بٹن پر کلک کریں (وہی بٹن ، لیکن لیبل اس بات پر منحصر ہے کہ آپ فعال طور پر ریکارڈنگ کر رہے ہیں یا نہیں)۔", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. [گیٹ ہب ایشوز] (https://github.com/IAHispano/Applio/issues) پر جائیں اور 'نیا مسئلہ' بٹن پر کلک کریں۔", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. فراہم کردہ ایشو ٹیمپلیٹ کو مکمل کریں ، ضرورت کے مطابق تفصیلات شامل کرنے کو یقینی بنائیں ، اور پچھلے مرحلے سے ریکارڈ شدہ فائل کو اپ لوڈ کرنے کے لئے اثاثوں کے سیکشن کا استعمال کریں۔", + "Record Screen": "ریکارڈ اسکرین", + "Record": "ریکارڈ", + "Stop Recording": "ریکارڈنگ بند کریں", + "Introduce the model .pth path": "ماڈل .pth پتھ متعارف کروائیں", + "See Model Information": "ماڈل کی معلومات دیکھیں", + "## Download Model": "## ڈاؤن لوڈ ماڈل", + "Model Link": "ماڈل لنک", + "Introduce the model link": "ماڈل کا لنک متعارف کروائیں", + "Download Model": "ڈاؤن لوڈ ماڈل", + "## Drop files": "## فائلیں چھوڑ دیں", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "اپنی .pth فائل اور .انڈیکس فائل کو اس جگہ میں گھسیٹیں۔ ایک کو گھسیٹیں اور پھر دوسرے کو۔", + "TTS Voices": "ٹی ٹی ایس وائسز", + "Select the TTS voice to use for the conversion.": "تبدیلی کے لئے استعمال کرنے کے لئے TTS آواز منتخب کریں۔", + "Text to Synthesize": "ترکیب کرنے کے لئے متن", + "Enter the text to synthesize.": "ترکیب کرنے کے لئے متن درج کریں۔", + "Or you can upload a .txt file": "یا آپ .txt فائل اپ لوڈ کرسکتے ہیں", + "Enter text to synthesize": "ترتیب دینے کے لئے متن درج کریں", + "Output Path for TTS Audio": "ٹی ٹی ایس آڈیو کے لئے آؤٹ پٹ پتھ", + "Output Path for RVC Audio": "آر وی سی آڈیو کے لئے آؤٹ پٹ پتھ", + "Enable Applio integration with Discord presence": "ڈسکارڈ کی موجودگی کے ساتھ ایپلیو انضمام کو فعال کریں", + "It will activate the possibility of displaying the current Applio activity in Discord.": "یہ ڈسکارڈ میں موجودہ ایپلیو سرگرمی کو ظاہر کرنے کے امکان کو فعال کرے گا۔", + "Enable Applio integration with applio.org/models using flask": "فلاسک کا استعمال کرتے ہوئے applio.org/models کے ساتھ ایپلیو انضمام کو فعال کریں", + "It will activate the possibility of downloading models with a click from the website.": "یہ ویب سائٹ سے ایک کلک کے ساتھ ماڈل ڈاؤن لوڈ کرنے کے امکان کو فعال کرے گا۔", + "Theme": "موضوع", + "Select the theme you want to use. (Requires restarting Applio)": "وہ تھیم منتخب کریں جسے آپ استعمال کرنا چاہتے ہیں۔ (ایپلیو کو دوبارہ شروع کرنے کی ضرورت ہے)", + "Language": "زبان", + "Select the language you want to use. (Requires restarting Applio)": "وہ زبان منتخب کریں جسے آپ استعمال کرنا چاہتے ہیں۔ (ایپلیو کو دوبارہ شروع کرنے کی ضرورت ہے)", + "Plugin Installer": "Plugin Installer", + "Drag your plugin.zip to install it": "اسے انسٹال کرنے کے لئے اپنے plugin.zip کو گھسیٹیں", + "Version Checker": "Version Checker", + "Check which version of Applio is the latest to see if you need to update.": "چیک کریں کہ ایپلیو کا کون سا ورژن تازہ ترین ہے یہ دیکھنے کے لئے کہ آیا آپ کو اپ ڈیٹ کرنے کی ضرورت ہے۔", + "Check for updates": "اپ ڈیٹس کے لئے چیک کریں" +} \ No newline at end of file diff --git a/assets/i18n/languages/vi_VI.json b/assets/i18n/languages/vi_VI.json new file mode 100644 index 0000000000000000000000000000000000000000..0fa26561bf6e9f81e5ae3b656d8ae4f0b77996ef --- /dev/null +++ b/assets/i18n/languages/vi_VI.json @@ -0,0 +1,175 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "Công cụ nhân bản giọng nói tối ưu, được tối ưu hóa tỉ mỉ cho sức mạnh vô song, tính mô-đun và trải nghiệm thân thiện với người dùng.", + "This section contains some extra utilities that often may be in experimental phases.": "Phần này chứa một số tiện ích bổ sung thường có thể đang trong giai đoạn thử nghiệm.", + "Output Information": "Thông tin đầu ra", + "The output information will be displayed here.": "Thông tin đầu ra sẽ được hiển thị ở đây.", + "Inference": "Suy luận", + "Train": "Xe lửa", + "Extra": "Phụ", + "Merge Audios": "Hợp nhất âm thanh", + "Processing": "Xử lý", + "Audio Analyzer": "Máy phân tích âm thanh", + "Model Information": "Thông tin mô hình", + "Plugins": "Plugin", + "Download": "Tải xuống", + "Report a Bug": "Báo cáo lỗi", + "Settings": "Cài đặt", + "Preprocess": "Tiền xử lý", + "Model Name": "Tên Model", + "Name of the new model.": "Tên của mô hình mới.", + "Enter model name": "Nhập tên model", + "Dataset Path": "Đường dẫn tập dữ liệu", + "Path to the dataset folder.": "Đường dẫn đến thư mục tập dữ liệu.", + "Refresh Datasets": "Làm mới tập dữ liệu", + "Dataset Creator": "Trình tạo tập dữ liệu", + "Dataset Name": "Tên tập dữ liệu", + "Name of the new dataset.": "Tên của tập dữ liệu mới.", + "Enter dataset name": "Nhập tên tập dữ liệu", + "Upload Audio Dataset": "Tải lên tập dữ liệu âm thanh", + "The audio file has been successfully added to the dataset. Please click the preprocess button.": "Tệp âm thanh đã được thêm thành công vào tập dữ liệu. Vui lòng nhấp vào nút xử lý trước.", + "Enter dataset path": "Nhập đường dẫn tập dữ liệu", + "Sampling Rate": "Tỷ lệ lấy mẫu", + "The sampling rate of the audio files.": "Tốc độ lấy mẫu của các tệp âm thanh.", + "RVC Version": "Phiên bản RVC", + "The RVC version of the model.": "Phiên bản RVC của mô hình.", + "Preprocess Dataset": "Tập dữ liệu tiền xử lý", + "Extract": "Trích", + "Hop Length": "Chiều dài hop", + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy.": "Biểu thị khoảng thời gian cần thiết để hệ thống chuyển sang thay đổi cao độ đáng kể. Độ dài bước nhảy nhỏ hơn đòi hỏi nhiều thời gian hơn để suy luận nhưng có xu hướng mang lại độ chính xác cao độ cao hơn.", + "Batch Size": "Kích thước lô", + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results.": "Bạn nên căn chỉnh nó với VRAM có sẵn của GPU của bạn. Cài đặt 4 cung cấp độ chính xác được cải thiện nhưng xử lý chậm hơn, trong khi 8 cung cấp kết quả tiêu chuẩn và nhanh hơn.", + "Save Every Epoch": "Lưu mọi kỷ nguyên", + "Determine at how many epochs the model will saved at.": "Xác định mô hình sẽ lưu tại bao nhiêu kỷ nguyên.", + "Total Epoch": "Tổng kỷ nguyên", + "Specifies the overall quantity of epochs for the model training process.": "Chỉ định số lượng tổng thể của các kỷ nguyên cho quá trình đào tạo mô hình.", + "Pretrained": "Đào tạo trước", + "Save Only Latest": "Chỉ lưu mới nhất", + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space.": "Bật cài đặt này sẽ dẫn đến các tệp G và D chỉ lưu các phiên bản mới nhất của chúng, tiết kiệm hiệu quả dung lượng lưu trữ.", + "Save Every Weights": "Tiết kiệm mọi trọng lượng", + "This setting enables you to save the weights of the model at the conclusion of each epoch.": "Cài đặt này cho phép bạn lưu trọng số của mô hình khi kết thúc mỗi kỷ nguyên.", + "Custom Pretrained": "Đào tạo trước tùy chỉnh", + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance.": "Sử dụng các mô hình được đào tạo trước tùy chỉnh có thể dẫn đến kết quả vượt trội, vì việc lựa chọn các mô hình được đào tạo trước phù hợp nhất phù hợp với trường hợp sử dụng cụ thể có thể nâng cao đáng kể hiệu suất.", + "Upload Pretrained Model": "Tải lên mô hình được đào tạo trước", + "Refresh Custom Pretraineds": "Làm mới Custom Pretraineds", + "Pretrained Custom Settings": "Cài đặt tùy chỉnh được đào tạo sẵn", + "The file you dropped is not a valid pretrained file. Please try again.": "Tệp bạn đã bỏ không phải là tệp được đào tạo trước hợp lệ. Vui lòng thử lại.", + "Click the refresh button to see the pretrained file in the dropdown menu.": "Nhấp vào nút làm mới để xem tệp được đào tạo trước trong menu thả xuống.", + "Pretrained G Path": "Tùy chỉnh được đào tạo trước G", + "Pretrained D Path": "Tùy chỉnh được đào tạo trước D", + "GPU Settings": "Cài đặt GPU", + "Sets advanced GPU settings, recommended for users with better GPU architecture.": "Đặt cài đặt GPU nâng cao, được khuyến nghị cho người dùng có kiến trúc GPU tốt hơn.", + "GPU Custom Settings": "Cài đặt tùy chỉnh GPU", + "GPU Number": "Số GPU", + "0 to ∞ separated by -": "0 đến ∞ cách nhau bởi -", + "GPU Information": "Thông tin GPU", + "Pitch Guidance": "Hướng dẫn quảng cáo chiêu hàng", + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential.": "Bằng cách sử dụng hướng dẫn cao độ, nó trở nên khả thi để phản ánh ngữ điệu của giọng nói gốc, bao gồm cả cao độ của nó. Tính năng này đặc biệt có giá trị đối với ca hát và các tình huống khác trong đó việc giữ nguyên giai điệu hoặc cao độ ban đầu là điều cần thiết.", + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality.": "Sử dụng các mô hình được đào tạo trước khi đào tạo của riêng bạn. Cách tiếp cận này làm giảm thời gian đào tạo và nâng cao chất lượng tổng thể.", + "Extract Features": "Tính năng trích xuất", + "Start Training": "Bắt đầu đào tạo", + "Generate Index": "Tạo chỉ mục", + "Voice Model": "Mô hình giọng nói", + "Select the voice model to use for the conversion.": "Chọn kiểu giọng nói để sử dụng cho quá trình chuyển đổi.", + "Index File": "Tệp chỉ mục", + "Select the index file to use for the conversion.": "Chọn tệp chỉ mục để sử dụng cho quá trình chuyển đổi.", + "Refresh": "Làm tươi", + "Unload Voice": "Dỡ giọng nói", + "Single": "Đơn", + "Upload Audio": "Tải lên âm thanh", + "Select Audio": "Chọn Âm thanh", + "Select the audio to convert.": "Chọn âm thanh để chuyển đổi.", + "Advanced Settings": "Cài đặt nâng cao", + "Clear Outputs (Deletes all audios in assets/audios)": "Xóa đầu ra (Xóa tất cả âm thanh trong nội dung / âm thanh)", + "Custom Output Path": "Đường dẫn đầu ra tùy chỉnh", + "Output Path": "Đường dẫn đầu ra", + "The path where the output audio will be saved, by default in assets/audios/output.wav": "Đường dẫn nơi âm thanh đầu ra sẽ được lưu, theo mặc định trong tài sản / âm thanh / output.wav", + "Split Audio": "Tách âm thanh", + "Split the audio into chunks for inference to obtain better results in some cases.": "Chia âm thanh thành các phần để suy luận nhằm thu được kết quả tốt hơn trong một số trường hợp.", + "Autotune": "Tự động điều chỉnh", + "Apply a soft autotune to your inferences, recommended for singing conversions.": "Áp dụng autotune mềm cho suy luận của bạn, được đề xuất để chuyển đổi ca hát.", + "Clean Audio": "Âm thanh sạch", + "Clean your audio output using noise detection algorithms, recommended for speaking audios.": "Làm sạch đầu ra âm thanh của bạn bằng các thuật toán phát hiện tiếng ồn, được khuyến nghị để nói âm thanh.", + "Clean Strength": "Sức mạnh sạch", + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed.": "Đặt mức dọn dẹp thành âm thanh bạn muốn, bạn càng tăng thì càng dọn dẹp, nhưng có thể âm thanh sẽ bị nén nhiều hơn.", + "Pitch": "Sân", + "Set the pitch of the audio, the higher the value, the higher the pitch.": "Đặt cao độ của âm thanh, giá trị càng cao, cao độ càng cao.", + "Filter Radius": "Bán kính lọc", + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration.": "Nếu số lượng lớn hơn hoặc bằng ba, việc sử dụng bộ lọc trung bình trên kết quả âm thu thập được có khả năng làm giảm hô hấp.", + "Search Feature Ratio": "Tỷ lệ tính năng tìm kiếm", + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio.": "Ảnh hưởng tác động của tệp chỉ mục; Giá trị cao hơn tương ứng với ảnh hưởng lớn hơn. Tuy nhiên, việc chọn các giá trị thấp hơn có thể giúp giảm thiểu các hiện vật có trong âm thanh.", + "Volume Envelope": "Phong bì khối lượng", + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed.": "Thay thế hoặc trộn với phong bì âm lượng của đầu ra. Tỷ lệ càng gần 1, phong bì đầu ra càng được sử dụng.", + "Protect Voiceless Consonants": "Bảo vệ phụ âm vô thanh", + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect.": "Bảo vệ các phụ âm riêng biệt và âm thanh thở để ngăn ngừa rách âm thanh điện và các hiện vật khác. Kéo tham số đến giá trị tối đa 0, 5 cung cấp sự bảo vệ toàn diện. Tuy nhiên, việc giảm giá trị này có thể làm giảm mức độ bảo vệ trong khi có khả năng giảm thiểu hiệu ứng lập chỉ mục.", + "Pitch extraction algorithm": "Thuật toán trích xuất cao độ", + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases.": "Thuật toán trích xuất cao độ để sử dụng cho việc chuyển đổi âm thanh. Thuật toán mặc định là rmvpe, được khuyến nghị cho hầu hết các trường hợp.", + "Convert": "Convert", + "Export Audio": "Xuất âm thanh", + "Batch": "Mẻ", + "Input Folder": "Thư mục đầu vào", + "Select the folder containing the audios to convert.": "Chọn thư mục chứa âm thanh để chuyển đổi.", + "Enter input path": "Nhập đường dẫn nhập liệu", + "Output Folder": "Thư mục đầu ra", + "Select the folder where the output audios will be saved.": "Chọn thư mục lưu âm thanh đầu ra.", + "Enter output path": "Nhập đường dẫn đầu ra", + "Get information about the audio": "Nhận thông tin về âm thanh", + "Information about the audio file": "Thông tin về tệp âm thanh", + "Waiting for information...": "Đang chờ thông tin...", + "## Voice Blender": "## Máy xay sinh tố giọng nói", + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice.": "Chọn hai mẫu giọng nói, đặt tỷ lệ phần trăm pha trộn mong muốn của bạn và trộn chúng thành một giọng nói hoàn toàn mới.", + "Voice Blender": "Máy xay sinh tố giọng nói", + "Drag and drop your model here": "Kéo và thả mô hình của bạn vào đây", + "You can also use a custom path.": "Bạn cũng có thể sử dụng đường dẫn tùy chỉnh.", + "Blend Ratio": "Tỷ lệ pha trộn", + "Adjusting the position more towards one side or the other will make the model more similar to the first or second.": "Điều chỉnh vị trí nhiều hơn về phía bên này hay bên kia sẽ làm cho mô hình giống với thứ nhất hoặc thứ hai hơn.", + "Fusion": "Fusion", + "Path to Model": "Đường dẫn đến mô hình", + "Enter path to model": "Nhập đường dẫn đến mô hình", + "Model information to be placed": "Thông tin mô hình sẽ được đặt", + "Inroduce the model information": "Giới thiệu thông tin mô hình", + "The information to be placed in the model (You can leave it blank or put anything).": "Thông tin được đặt trong mô hình (Bạn có thể để trống hoặc đặt bất cứ thứ gì).", + "View model information": "Xem thông tin mô hình", + "Introduce the model pth path": "Giới thiệu mô hình pth path", + "View": "Cảnh", + "Model extraction": "Trích xuất mô hình", + "Model conversion": "Chuyển đổi mô hình", + "Pth file": "Tệp Pth", + "Output of the pth file": "Đầu ra của tệp pth", + "# How to Report an Issue on GitHub": "# Cách báo cáo sự cố trên GitHub", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1. Nhấp vào nút 'Ghi lại màn hình' bên dưới để bắt đầu ghi lại sự cố bạn đang gặp phải.", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. Khi bạn đã ghi xong sự cố, hãy nhấp vào nút 'Dừng ghi' (cùng một nút, nhưng nhãn thay đổi tùy thuộc vào việc bạn có chủ động ghi hay không).", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. Đi tới [Vấn đề GitHub] (https://github.com/IAHispano/Applio/issues) và nhấp vào nút 'Vấn đề mới'.", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. Hoàn thành mẫu vấn đề được cung cấp, đảm bảo bao gồm các chi tiết khi cần thiết và sử dụng phần tài sản để tải lên tệp đã ghi từ bước trước.", + "Record Screen": "Ghi lại màn hình", + "Record": "Ghi", + "Stop Recording": "Dừng ghi", + "Introduce the model .pth path": "Giới thiệu mô hình đường dẫn .pth", + "See Model Information": "Xem thông tin mô hình", + "## Download Model": "## Tải xuống mô hình", + "Model Link": "Liên kết mô hình", + "Introduce the model link": "Giới thiệu link mô hình", + "Download Model": "Tải xuống mô hình", + "## Drop files": "## Thả tệp", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "Kéo tệp .pth và tệp .index của bạn vào không gian này. Kéo cái này rồi cái kia.", + "TTS Voices": "Tiếng nói TTS", + "Select the TTS voice to use for the conversion.": "Chọn giọng nói TTS để sử dụng cho quá trình chuyển đổi.", + "Text to Synthesize": "Văn bản để tổng hợp", + "Enter the text to synthesize.": "Nhập văn bản để tổng hợp.", + "Or you can upload a .txt file": "Hoặc bạn có thể tải lên tệp .txt", + "Enter text to synthesize": "Nhập văn bản để tổng hợp", + "Output Path for TTS Audio": "Đường dẫn đầu ra cho âm thanh TTS", + "Output Path for RVC Audio": "Đường dẫn đầu ra cho âm thanh RVC", + "Enable Applio integration with Discord presence": "Bật tích hợp Applio với sự hiện diện của Discord", + "It will activate the possibility of displaying the current Applio activity in Discord.": "Nó sẽ kích hoạt khả năng hiển thị hoạt động Applio hiện tại trong Discord.", + "Enable Applio integration with applio.org/models using flask": "Bật tích hợp Applio với applio.org/models bằng bình", + "It will activate the possibility of downloading models with a click from the website.": "Nó sẽ kích hoạt khả năng tải xuống các mô hình bằng một cú nhấp chuột từ trang web.", + "Theme": "Đề tài", + "Select the theme you want to use. (Requires restarting Applio)": "Chọn chủ đề bạn muốn sử dụng. (Yêu cầu khởi động lại Applio)", + "Language": "Ngôn ngữ", + "Select the language you want to use. (Requires restarting Applio)": "Chọn ngôn ngữ bạn muốn sử dụng. (Yêu cầu khởi động lại Applio)", + "Plugin Installer": "Trình cài đặt plugin", + "Drag your plugin.zip to install it": "Kéo plugin.zip của bạn để cài đặt nó", + "Version Checker": "Trình kiểm tra phiên bản", + "Check which version of Applio is the latest to see if you need to update.": "Kiểm tra xem phiên bản Applio nào là phiên bản mới nhất để xem bạn có cần cập nhật hay không.", + "Check for updates": "Kiểm tra bản cập nhật" +} \ No newline at end of file diff --git a/assets/i18n/languages/wu_WU.json b/assets/i18n/languages/wu_WU.json new file mode 100644 index 0000000000000000000000000000000000000000..9e26dfeeb6e641a33dae4961196235bdb965b21b --- /dev/null +++ b/assets/i18n/languages/wu_WU.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/assets/i18n/languages/zh_CN.json b/assets/i18n/languages/zh_CN.json new file mode 100644 index 0000000000000000000000000000000000000000..78feed4dcb2fbf5028561549dc1d191b35c35288 --- /dev/null +++ b/assets/i18n/languages/zh_CN.json @@ -0,0 +1,113 @@ +{ + "Ultimate voice cloning tool, meticulously optimized for unrivaled power, modularity, and user-friendly experience.": "终极语音克隆工具,经过精心优化,具有无与伦比的功能、模块化和用户友好的体验。", + "This section contains some extra utilities that often may be in experimental phases.": "本节包含一些额外的实用程序,这些实用程序通常处于实验阶段。", + "Output Information": "输出信息", + "Inference": "推理", + "Train": "火车", + "Extra": "额外", + "Merge Audios": "合并音频", + "Processing": "加工", + "Audio Analyzer": "音频分析仪", + "Model Information": "型号信息", + "Download": "下载", + "Report a Bug": "报告错误", + "Preprocess": "预处理", + "Model Name": "型号名称", + "Enter model name": "输入型号名称", + "Dataset Path": "数据集路径", + "Enter dataset path": "输入数据集路径", + "Sampling Rate": "采样率", + "RVC Version": "RVC 版本", + "Preprocess Dataset": "预处理数据集", + "Extract": "提取", + "Hop Length": "跳跃长度", + "Batch Size": "批量大小", + "Save Every Epoch": "保存每个纪元", + "Total Epoch": "总纪元", + "Pretrained": "预训练", + "Save Only Latest": "仅保存最新", + "Save Every Weights": "节省每一次砝码", + "Custom Pretrained": "自定义预训练", + "Upload Pretrained Model": "上传预训练模型", + "Pretrained Custom Settings": "预训练的自定义设置", + "The file you dropped is not a valid pretrained file. Please try again.": "您删除的文件不是有效的预训练文件。请再试一次。", + "Click the refresh button to see the pretrained file in the dropdown menu.": "单击刷新按钮,在下拉菜单中查看预训练文件。", + "Pretrained G Path": "自定义预训练 G", + "Pretrained D Path": "自定义预训练 D", + "GPU Settings": "GPU 设置", + "GPU Custom Settings": "GPU 自定义设置", + "GPU Number": "GPU 数量", + "0 to ∞ separated by -": "0 到 ∞ 之间用 -", + "GPU Information": "GPU 信息", + "Pitch Guidance": "音高指导", + "Extract Features": "提取特征", + "Start Training": "开始训练", + "Generate Index": "生成索引", + "Voice Model": "语音模型", + "Index File": "Index 文件", + "Refresh": "刷新", + "Unload Voice": "卸载语音", + "Single": "单", + "Upload Audio": "上传音频", + "Select Audio": "选择音频", + "Advanced Settings": "高级设置", + "Clear Outputs (Deletes all audios in assets/audios)": "清除输出(删除资产/音频中的所有音频)", + "Custom Output Path": "自定义输出路径", + "Output Path": "输出路径", + "Pitch": "投", + "If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness": "如果 >=3:对收获的音高结果应用中值滤波。该值表示过滤器半径,可以减少呼吸", + "Search Feature Ratio": "搜索特征比率", + "Pitch extraction algorithm": "音高提取算法", + "Convert": "转换", + "Export Audio": "导出音频", + "Batch": "批", + "Input Folder": "输入文件夹", + "Enter input path": "输入输入路径", + "Output Folder": "输出文件夹", + "Enter output path": "输入输出路径", + "Get information about the audio": "获取有关音频的信息", + "Information about the audio file": "有关音频文件的信息", + "Waiting for information...": "等待信息...", + "Model fusion": "模型融合", + "Weight for Model A": "A型重量", + "Whether the model has pitch guidance": "模型是否具有俯仰引导", + "Model architecture version": "模型架构版本", + "Path to Model A": "模型 A 的路径", + "Path to Model B": "模型 B 的路径", + "Path to model": "模型路径", + "Model information to be placed": "要放置的模型信息", + "Fusion": "融合", + "Modify model information": "修改模型信息", + "Path to Model": "模型路径", + "Model information to be modified": "要修改的模型信息", + "Save file name": "保存文件名", + "Modify": "修改", + "View model information": "查看型号信息", + "View": "视图", + "Model extraction": "模型提取", + "Model conversion": "模型转换", + "Pth file": "Pth 文件", + "Output of the pth file": "pth 文件的输出", + "# How to Report an Issue on GitHub": "# 如何在 GitHub 上报告问题", + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing.": "1.单击下面的“录制屏幕”按钮开始记录您遇到的问题。", + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not).": "2. 录制完问题后,单击“停止录制”按钮(相同的按钮,但标签会根据您是否正在录制而变化)。", + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button.": "3. 转到 [GitHub 问题](https://github.com/IAHispano/Applio/issues),然后单击“新问题”按钮。", + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step.": "4. 填写提供的问题模板,确保根据需要包含详细信息,并利用资产部分上传上一步的记录文件。", + "Record Screen": "录制屏幕", + "Record": "记录", + "Stop Recording": "停止录制", + "Introduce the model .pth path": "引入模型 .pth 路径", + "See Model Information": "查看型号信息", + "## Download Model": "## 下载模型", + "Model Link": "模型链接", + "Introduce the model link": "介绍模型链接", + "Download Model": "下载模型", + "## Drop files": "## 删除文件", + "Drag your .pth file and .index file into this space. Drag one and then the other.": "将 .pth 文件和 .index 文件拖到此空间中。拖动一个,然后拖动另一个。", + "TTS Voices": "TTS语音", + "Text to Synthesize": "要合成的文本", + "Enter text to synthesize": "输入要合成的文本", + "Output Path for TTS Audio": "TTS 音频的输出路径", + "Output Path for RVC Audio": "RVC 音频的输出路径", + "Enable Applio integration with Discord presence": "Applio 存在" +} diff --git a/i18n/scan_i18n.py b/assets/i18n/scan.py similarity index 50% rename from i18n/scan_i18n.py rename to assets/i18n/scan.py index f3e52cf4f9f06d78877d77d2353f666aa759e36f..7cd584fa2af8480f443c51417c442fecf5197d11 100644 --- a/i18n/scan_i18n.py +++ b/assets/i18n/scan.py @@ -1,75 +1,71 @@ -import ast -import glob -import json -from collections import OrderedDict - - -def extract_i18n_strings(node): - i18n_strings = [] - - if ( - isinstance(node, ast.Call) - and isinstance(node.func, ast.Name) - and node.func.id == "i18n" - ): - for arg in node.args: - if isinstance(arg, ast.Str): - i18n_strings.append(arg.s) - - for child_node in ast.iter_child_nodes(node): - i18n_strings.extend(extract_i18n_strings(child_node)) - - return i18n_strings - - -# scan the directory for all .py files (recursively) -# for each file, parse the code into an AST -# for each AST, extract the i18n strings - -strings = [] -for filename in glob.iglob("**/*.py", recursive=True): - with open(filename, "r") as f: - code = f.read() - if "I18nAuto" in code: - tree = ast.parse(code) - i18n_strings = extract_i18n_strings(tree) - print(filename, len(i18n_strings)) - strings.extend(i18n_strings) -code_keys = set(strings) -""" -n_i18n.py -gui_v1.py 26 -app.py 16 -infer-web.py 147 -scan_i18n.py 0 -i18n.py 0 -lib/train/process_ckpt.py 1 -""" -print() -print("Total unique:", len(code_keys)) - - -standard_file = "i18n/locale/zh_CN.json" -with open(standard_file, "r", encoding="utf-8") as f: - standard_data = json.load(f, object_pairs_hook=OrderedDict) -standard_keys = set(standard_data.keys()) - -# Define the standard file name -unused_keys = standard_keys - code_keys -print("Unused keys:", len(unused_keys)) -for unused_key in unused_keys: - print("\t", unused_key) - -missing_keys = code_keys - standard_keys -print("Missing keys:", len(missing_keys)) -for missing_key in missing_keys: - print("\t", missing_key) - -code_keys_dict = OrderedDict() -for s in strings: - code_keys_dict[s] = s - -# write back -with open(standard_file, "w", encoding="utf-8") as f: - json.dump(code_keys_dict, f, ensure_ascii=False, indent=4, sort_keys=True) - f.write("\n") +import ast +import json +from pathlib import Path +from collections import OrderedDict + + +def extract_i18n_strings(node): + i18n_strings = [] + + if ( + isinstance(node, ast.Call) + and isinstance(node.func, ast.Name) + and node.func.id == "i18n" + ): + for arg in node.args: + if isinstance(arg, ast.Str): + i18n_strings.append(arg.s) + + for child_node in ast.iter_child_nodes(node): + i18n_strings.extend(extract_i18n_strings(child_node)) + + return i18n_strings + + +def process_file(file_path): + with open(file_path, "r", encoding="utf8") as file: + code = file.read() + if "I18nAuto" in code: + tree = ast.parse(code) + i18n_strings = extract_i18n_strings(tree) + print(file_path, len(i18n_strings)) + return i18n_strings + return [] + + +# Use pathlib for file handling +py_files = Path(".").rglob("*.py") + +# Use a set to store unique strings +code_keys = set() + +for py_file in py_files: + strings = process_file(py_file) + code_keys.update(strings) + +print() +print("Total unique:", len(code_keys)) + +standard_file = "languages/en_US.json" +with open(standard_file, "r", encoding="utf-8") as file: + standard_data = json.load(file, object_pairs_hook=OrderedDict) +standard_keys = set(standard_data.keys()) + +# Combine unused and missing keys sections +unused_keys = standard_keys - code_keys +missing_keys = code_keys - standard_keys + +print("Unused keys:", len(unused_keys)) +for unused_key in unused_keys: + print("\t", unused_key) + +print("Missing keys:", len(missing_keys)) +for missing_key in missing_keys: + print("\t", missing_key) + +code_keys_dict = OrderedDict((s, s) for s in code_keys) + +# Use context manager for writing back to the file +with open(standard_file, "w", encoding="utf-8") as file: + json.dump(code_keys_dict, file, ensure_ascii=False, indent=4, sort_keys=True) + file.write("\n") diff --git a/assets/installation_checker.py b/assets/installation_checker.py new file mode 100644 index 0000000000000000000000000000000000000000..44cbfe72d620adb7add6a41dd7ce0499ef2af071 --- /dev/null +++ b/assets/installation_checker.py @@ -0,0 +1,38 @@ +import sys +import os + +now_dir = os.getcwd() +sys.path.append(now_dir) + + +class InstallationError(Exception): + def __init__(self, message="InstallationError"): + self.message = message + super().__init__(self.message) + + +def check_installation(): + try: + system_drive = os.getenv("SystemDrive") + current_drive = os.path.splitdrive(now_dir)[0] + if current_drive.upper() != system_drive.upper(): + raise InstallationError( + f"Error: Current working directory is not on the default system drive ({system_drive}). Please move Applio in the correct drive." + ) + except: + pass + else: + if "OneDrive" in now_dir: + raise InstallationError( + "Error: Current working directory is on OneDrive. Please move Applio in another folder." + ) + elif " " in now_dir: + raise InstallationError( + "Error: Current working directory contains spaces. Please move Applio in another folder." + ) + try: + now_dir.encode("ascii") + except UnicodeEncodeError: + raise InstallationError( + "Error: Current working directory contains non-ASCII characters. Please move Applio in another folder." + ) diff --git a/assets/pretrained/.gitignore b/assets/pretrained/.gitignore deleted file mode 100644 index d6b7ef32c8478a48c3994dcadc86837f4371184d..0000000000000000000000000000000000000000 --- a/assets/pretrained/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/assets/pretrained_v2/.gitignore b/assets/pretrained_v2/.gitignore deleted file mode 100644 index d6b7ef32c8478a48c3994dcadc86837f4371184d..0000000000000000000000000000000000000000 --- a/assets/pretrained_v2/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/assets/rmvpe/.gitignore b/assets/rmvpe/.gitignore deleted file mode 100644 index d6b7ef32c8478a48c3994dcadc86837f4371184d..0000000000000000000000000000000000000000 --- a/assets/rmvpe/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/assets/themes/Applio.py b/assets/themes/Applio.py new file mode 100644 index 0000000000000000000000000000000000000000..b171b3f639bc283be9f2ff150f60a9a50ff0d2e9 --- /dev/null +++ b/assets/themes/Applio.py @@ -0,0 +1,284 @@ +from __future__ import annotations + +from typing import Iterable +import gradio as gr + +# gr.themes.builder() +from gradio.themes.base import Base +from gradio.themes.utils import colors, fonts, sizes +import time + + +class Applio(Base): + def __init__( + self, + *, + primary_hue: colors.Color | str = colors.neutral, + secondary_hue: colors.Color | str = colors.neutral, + neutral_hue: colors.Color | str = colors.neutral, + spacing_size: sizes.Size | str = sizes.spacing_md, + radius_size: sizes.Size | str = sizes.radius_md, + text_size: sizes.Size | str = sizes.text_lg, + font: fonts.Font | str | Iterable[fonts.Font | str] = ( + "Syne V", + fonts.GoogleFont("Syne"), + "ui-sans-serif", + "system-ui", + ), + font_mono: fonts.Font | str | Iterable[fonts.Font | str] = ( + "ui-monospace", + fonts.GoogleFont("Nunito Sans"), + ), + ): + super().__init__( + primary_hue=primary_hue, + secondary_hue=secondary_hue, + neutral_hue=neutral_hue, + spacing_size=spacing_size, + radius_size=radius_size, + text_size=text_size, + font=font, + font_mono=font_mono, + ) + self.name = ("Applio",) + self.secondary_100 = ("#dbeafe",) + self.secondary_200 = ("#bfdbfe",) + self.secondary_300 = ("#93c5fd",) + self.secondary_400 = ("#60a5fa",) + self.secondary_50 = ("#eff6ff",) + self.secondary_500 = ("#3b82f6",) + self.secondary_600 = ("#2563eb",) + self.secondary_700 = ("#1d4ed8",) + self.secondary_800 = ("#1e40af",) + self.secondary_900 = ("#1e3a8a",) + self.secondary_950 = ("#1d3660",) + + super().set( + # Blaise + background_fill_primary="#110F0F", + background_fill_primary_dark="#110F0F", + background_fill_secondary="#110F0F", + background_fill_secondary_dark="#110F0F", + block_background_fill="*neutral_800", + block_background_fill_dark="*neutral_800", + block_border_color="*border_color_primary", + block_border_color_dark="*border_color_primary", + block_border_width="1px", + block_border_width_dark="1px", + block_info_text_color="*body_text_color_subdued", + block_info_text_color_dark="*body_text_color_subdued", + block_info_text_size="*text_sm", + block_info_text_weight="400", + block_label_background_fill="*background_fill_primary", + block_label_background_fill_dark="*background_fill_secondary", + block_label_border_color="*border_color_primary", + block_label_border_color_dark="*border_color_primary", + block_label_border_width="1px", + block_label_border_width_dark="1px", + block_label_margin="0", + block_label_padding="*spacing_sm *spacing_lg", + block_label_radius="calc(*radius_lg - 1px) 0 calc(*radius_lg - 1px) 0", + block_label_right_radius="0 calc(*radius_lg - 1px) 0 calc(*radius_lg - 1px)", + block_label_shadow="*block_shadow", + block_label_text_color="*#110F0F", + block_label_text_color_dark="*#110F0F", + block_label_text_weight="400", + block_padding="*spacing_xl", + block_radius="*radius_md", + block_shadow="none", + block_shadow_dark="none", + block_title_background_fill="rgb(255,255,255)", + block_title_background_fill_dark="rgb(255,255,255)", + block_title_border_color="none", + block_title_border_color_dark="none", + block_title_border_width="0px", + block_title_padding="*block_label_padding", + block_title_radius="*block_label_radius", + block_title_text_color="#110F0F", + block_title_text_color_dark="#110F0F", + block_title_text_size="*text_md", + block_title_text_weight="600", + body_background_fill="#110F0F", + body_background_fill_dark="#110F0F", + body_text_color="white", + body_text_color_dark="white", + body_text_color_subdued="*neutral_400", + body_text_color_subdued_dark="*neutral_400", + body_text_size="*text_md", + body_text_weight="400", + border_color_accent="*neutral_600", + border_color_accent_dark="*neutral_600", + border_color_primary="*neutral_800", + border_color_primary_dark="*neutral_800", + button_border_width="*input_border_width", + button_border_width_dark="*input_border_width", + button_cancel_background_fill="*button_secondary_background_fill", + button_cancel_background_fill_dark="*button_secondary_background_fill", + button_cancel_background_fill_hover="*button_cancel_background_fill", + button_cancel_background_fill_hover_dark="*button_cancel_background_fill", + button_cancel_border_color="*button_secondary_border_color", + button_cancel_border_color_dark="*button_secondary_border_color", + button_cancel_border_color_hover="*button_cancel_border_color", + button_cancel_border_color_hover_dark="*button_cancel_border_color", + button_cancel_text_color="#110F0F", + button_cancel_text_color_dark="#110F0F", + button_cancel_text_color_hover="#110F0F", + button_cancel_text_color_hover_dark="#110F0F", + button_large_padding="*spacing_lg calc(2 * *spacing_lg)", + button_large_radius="*radius_lg", + button_large_text_size="*text_lg", + button_large_text_weight="600", + button_primary_background_fill="*primary_600", + button_primary_background_fill_dark="*primary_600", + button_primary_background_fill_hover="*primary_500", + button_primary_background_fill_hover_dark="*primary_500", + button_primary_border_color="*primary_500", + button_primary_border_color_dark="*primary_500", + button_primary_border_color_hover="*primary_400", + button_primary_border_color_hover_dark="*primary_400", + button_primary_text_color="white", + button_primary_text_color_dark="white", + button_primary_text_color_hover="#110F0F", + button_primary_text_color_hover_dark="#110F0F", + button_secondary_background_fill="transparent", + button_secondary_background_fill_dark="transparent", + button_secondary_background_fill_hover="*neutral_800", + button_secondary_background_fill_hover_dark="*neutral_800", + button_secondary_border_color="*neutral_700", + button_secondary_border_color_dark="*neutral_700", + button_secondary_border_color_hover="*neutral_600", + button_secondary_border_color_hover_dark="*neutral_600", + button_secondary_text_color="white", + button_secondary_text_color_dark="white", + button_secondary_text_color_hover="*button_secondary_text_color", + button_secondary_text_color_hover_dark="*button_secondary_text_color", + button_shadow="none", + button_shadow_active="*shadow_inset", + button_shadow_hover="none", + button_small_padding="*spacing_sm calc(2 * *spacing_sm)", + button_small_radius="*radius_lg", + button_small_text_size="*text_md", + button_small_text_weight="400", + button_transition="0.3s ease all", + checkbox_background_color="*neutral_700", + checkbox_background_color_dark="*neutral_700", + checkbox_background_color_focus="*checkbox_background_color", + checkbox_background_color_focus_dark="*checkbox_background_color", + checkbox_background_color_hover="*checkbox_background_color", + checkbox_background_color_hover_dark="*checkbox_background_color", + checkbox_background_color_selected="*secondary_600", + checkbox_background_color_selected_dark="*secondary_600", + checkbox_border_color="*neutral_700", + checkbox_border_color_dark="*neutral_700", + checkbox_border_color_focus="*secondary_500", + checkbox_border_color_focus_dark="*secondary_500", + checkbox_border_color_hover="*neutral_600", + checkbox_border_color_hover_dark="*neutral_600", + checkbox_border_color_selected="*secondary_600", + checkbox_border_color_selected_dark="*secondary_600", + checkbox_border_radius="*radius_sm", + checkbox_border_width="*input_border_width", + checkbox_border_width_dark="*input_border_width", + checkbox_check="url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\")", + checkbox_label_background_fill="transparent", + checkbox_label_background_fill_dark="transparent", + checkbox_label_background_fill_hover="transparent", + checkbox_label_background_fill_hover_dark="transparent", + checkbox_label_background_fill_selected="transparent", + checkbox_label_background_fill_selected_dark="transparent", + checkbox_label_border_color="transparent", + checkbox_label_border_color_dark="transparent", + checkbox_label_border_color_hover="transparent", + checkbox_label_border_color_hover_dark="transparent", + checkbox_label_border_width="transparent", + checkbox_label_border_width_dark="transparent", + checkbox_label_gap="*spacing_lg", + checkbox_label_padding="*spacing_md calc(2 * *spacing_md)", + checkbox_label_shadow="none", + checkbox_label_text_color="*body_text_color", + checkbox_label_text_color_dark="*body_text_color", + checkbox_label_text_color_selected="*checkbox_label_text_color", + checkbox_label_text_color_selected_dark="*checkbox_label_text_color", + checkbox_label_text_size="*text_md", + checkbox_label_text_weight="400", + checkbox_shadow="*input_shadow", + color_accent="*primary_500", + color_accent_soft="*primary_50", + color_accent_soft_dark="*neutral_700", + container_radius="*radius_xl", + embed_radius="*radius_lg", + error_background_fill="*background_fill_primary", + error_background_fill_dark="*background_fill_primary", + error_border_color="*border_color_primary", + error_border_color_dark="*border_color_primary", + error_border_width="1px", + error_border_width_dark="1px", + error_text_color="#ef4444", + error_text_color_dark="#ef4444", + form_gap_width="0px", + input_background_fill="*neutral_900", + input_background_fill_dark="*neutral_900", + input_background_fill_focus="*secondary_600", + input_background_fill_focus_dark="*secondary_600", + input_background_fill_hover="*input_background_fill", + input_background_fill_hover_dark="*input_background_fill", + input_border_color="*neutral_700", + input_border_color_dark="*neutral_700", + input_border_color_focus="*secondary_600", + input_border_color_focus_dark="*primary_600", + input_border_color_hover="*input_border_color", + input_border_color_hover_dark="*input_border_color", + input_border_width="1px", + input_border_width_dark="1px", + input_padding="*spacing_xl", + input_placeholder_color="*neutral_500", + input_placeholder_color_dark="*neutral_500", + input_radius="*radius_lg", + input_shadow="none", + input_shadow_dark="none", + input_shadow_focus="*input_shadow", + input_shadow_focus_dark="*input_shadow", + input_text_size="*text_md", + input_text_weight="400", + layout_gap="*spacing_xxl", + link_text_color="*secondary_500", + link_text_color_active="*secondary_500", + link_text_color_active_dark="*secondary_500", + link_text_color_dark="*secondary_500", + link_text_color_hover="*secondary_400", + link_text_color_hover_dark="*secondary_400", + link_text_color_visited="*secondary_600", + link_text_color_visited_dark="*secondary_600", + loader_color="*color_accent", + loader_color_dark="*color_accent", + panel_background_fill="*background_fill_secondary", + panel_background_fill_dark="*background_fill_secondary", + panel_border_color="*border_color_primary", + panel_border_color_dark="*border_color_primary", + panel_border_width="1px", + panel_border_width_dark="1px", + prose_header_text_weight="600", + prose_text_size="*text_md", + prose_text_weight="400", + radio_circle="url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\")", + section_header_text_size="*text_md", + section_header_text_weight="400", + shadow_drop="rgba(0,0,0,0.05) 0px 1px 2px 0px", + shadow_drop_lg="0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)", + shadow_inset="rgba(0,0,0,0.05) 0px 2px 4px 0px inset", + shadow_spread="3px", + shadow_spread_dark="1px", + slider_color="#9E9E9E", + slider_color_dark="#9E9E9E", + stat_background_fill="*primary_500", + stat_background_fill_dark="*primary_500", + table_border_color="*neutral_700", + table_border_color_dark="*neutral_700", + table_even_background_fill="*neutral_950", + table_even_background_fill_dark="*neutral_950", + table_odd_background_fill="*neutral_900", + table_odd_background_fill_dark="*neutral_900", + table_radius="*radius_lg", + table_row_focus="*color_accent_soft", + table_row_focus_dark="*color_accent_soft", + ) diff --git a/assets/themes/loadThemes.py b/assets/themes/loadThemes.py new file mode 100644 index 0000000000000000000000000000000000000000..d95b4a39dddfa8eec7b694574f741269439d47f8 --- /dev/null +++ b/assets/themes/loadThemes.py @@ -0,0 +1,122 @@ +import json +import os +import importlib +import gradio as gr + +now_dir = os.getcwd() + +folder = os.path.dirname(os.path.abspath(__file__)) +folder = os.path.dirname(folder) +folder = os.path.dirname(folder) +folder = os.path.join(folder, "assets", "themes") +config_file = os.path.join(now_dir, "assets", "config.json") + +import sys + +sys.path.append(folder) + + +def get_class(filename): + with open(filename, "r", encoding="utf8") as file: + for line_number, line in enumerate(file, start=1): + if "class " in line: + found = line.split("class ")[1].split(":")[0].split("(")[0].strip() + return found + break + return None + + +def get_list(): + + themes_from_files = [ + os.path.splitext(name)[0] + for root, _, files in os.walk(folder, topdown=False) + for name in files + if name.endswith(".py") and root == folder + ] + + json_file_path = os.path.join(folder, "theme_list.json") + + try: + with open(json_file_path, "r", encoding="utf8") as json_file: + themes_from_url = [item["id"] for item in json.load(json_file)] + except FileNotFoundError: + themes_from_url = [] + + combined_themes = set(themes_from_files + themes_from_url) + + return list(combined_themes) + + +def select_theme(name): + selected_file = name + ".py" + full_path = os.path.join(folder, selected_file) + + if not os.path.exists(full_path): + with open(config_file, "r", encoding="utf8") as json_file: + config_data = json.load(json_file) + + config_data["theme"]["file"] = None + config_data["theme"]["class"] = name + + with open(config_file, "w", encoding="utf8") as json_file: + json.dump(config_data, json_file, indent=2) + print(f"Theme {name} successfully selected, restart applio.") + gr.Info(f"Theme {name} successfully selected, restart applio.") + return + + class_found = get_class(full_path) + if class_found: + with open(config_file, "r", encoding="utf8") as json_file: + config_data = json.load(json_file) + + config_data["theme"]["file"] = selected_file + config_data["theme"]["class"] = class_found + + with open(config_file, "w", encoding="utf8") as json_file: + json.dump(config_data, json_file, indent=2) + print(f"Theme {name} successfully selected, restart applio.") + gr.Info(f"Theme {name} successfully selected, restart applio.") + else: + print(f"Theme {name} was not found.") + + +def read_json(): + try: + with open(config_file, "r", encoding="utf8") as json_file: + data = json.load(json_file) + selected_file = data["theme"]["file"] + class_name = data["theme"]["class"] + + if selected_file is not None and class_name: + return class_name + elif selected_file == None and class_name: + return class_name + else: + return "ParityError/Interstellar" + except Exception as e: + print(f"Error reading config.json: {e}") + return "ParityError/Interstellar" + + +def load_json(): + try: + with open(config_file, "r", encoding="utf8") as json_file: + data = json.load(json_file) + selected_file = data["theme"]["file"] + class_name = data["theme"]["class"] + + if selected_file is not None and class_name: + module = importlib.import_module(selected_file[:-3]) + obtained_class = getattr(module, class_name) + instance = obtained_class() + print(f"Theme Loaded: {class_name}") + return instance + elif selected_file == None and class_name: + return class_name + else: + print("The theme is incorrect.") + return None + except Exception as e: + print(f"Error Loading: {str(e)}") + return None diff --git a/assets/themes/theme.json b/assets/themes/theme.json new file mode 100644 index 0000000000000000000000000000000000000000..f8c42ff064e327b1364eb90d6f73bc4283a7c1bd --- /dev/null +++ b/assets/themes/theme.json @@ -0,0 +1 @@ +{"file": "Applio.py", "class": "Applio"} \ No newline at end of file diff --git a/assets/themes/theme_list.json b/assets/themes/theme_list.json new file mode 100644 index 0000000000000000000000000000000000000000..9de2456d2c2151e7d6765a9b5e0664e09f2041f7 --- /dev/null +++ b/assets/themes/theme_list.json @@ -0,0 +1,81 @@ +[ + {"id": "freddyaboulton/dracula_revamped"}, + {"id": "freddyaboulton/bad-theme-space"}, + {"id": "gradio/dracula_revamped"}, + {"id": "abidlabs/dracula_revamped"}, + {"id": "gradio/dracula_test"}, + {"id": "abidlabs/dracula_test"}, + {"id": "gradio/seafoam"}, + {"id": "gradio/glass"}, + {"id": "gradio/monochrome"}, + {"id": "gradio/soft"}, + {"id": "gradio/default"}, + {"id": "gradio/base"}, + {"id": "abidlabs/pakistan"}, + {"id": "dawood/microsoft_windows"}, + {"id": "ysharma/steampunk"}, + {"id": "ysharma/huggingface"}, + {"id": "gstaff/xkcd"}, + {"id": "JohnSmith9982/small_and_pretty"}, + {"id": "abidlabs/Lime"}, + {"id": "freddyaboulton/this-theme-does-not-exist-2"}, + {"id": "aliabid94/new-theme"}, + {"id": "aliabid94/test2"}, + {"id": "aliabid94/test3"}, + {"id": "aliabid94/test4"}, + {"id": "abidlabs/banana"}, + {"id": "freddyaboulton/test-blue"}, + {"id": "gstaff/sketch"}, + {"id": "gstaff/whiteboard"}, + {"id": "ysharma/llamas"}, + {"id": "abidlabs/font-test"}, + {"id": "YenLai/Superhuman"}, + {"id": "bethecloud/storj_theme"}, + {"id": "sudeepshouche/minimalist"}, + {"id": "knotdgaf/gradiotest"}, + {"id": "ParityError/Interstellar"}, + {"id": "ParityError/Anime"}, + {"id": "Ajaxon6255/Emerald_Isle"}, + {"id": "ParityError/LimeFace"}, + {"id": "finlaymacklon/smooth_slate"}, + {"id": "finlaymacklon/boxy_violet"}, + {"id": "derekzen/stardust"}, + {"id": "EveryPizza/Cartoony-Gradio-Theme"}, + {"id": "Ifeanyi/Cyanister"}, + {"id": "Tshackelton/IBMPlex-DenseReadable"}, + {"id": "snehilsanyal/scikit-learn"}, + {"id": "Himhimhim/xkcd"}, + {"id": "shivi/calm_seafoam"}, + {"id": "nota-ai/theme"}, + {"id": "rawrsor1/Everforest"}, + {"id": "SebastianBravo/simci_css"}, + {"id": "rottenlittlecreature/Moon_Goblin"}, + {"id": "abidlabs/test-yellow"}, + {"id": "abidlabs/test-yellow3"}, + {"id": "idspicQstitho/dracula_revamped"}, + {"id": "kfahn/AnimalPose"}, + {"id": "HaleyCH/HaleyCH_Theme"}, + {"id": "simulKitke/dracula_test"}, + {"id": "braintacles/CrimsonNight"}, + {"id": "wentaohe/whiteboardv2"}, + {"id": "reilnuud/polite"}, + {"id": "remilia/Ghostly"}, + {"id": "Franklisi/darkmode"}, + {"id": "coding-alt/soft"}, + {"id": "xiaobaiyuan/theme_land"}, + {"id": "step-3-profit/Midnight-Deep"}, + {"id": "xiaobaiyuan/theme_demo"}, + {"id": "Taithrah/Minimal"}, + {"id": "Insuz/SimpleIndigo"}, + {"id": "zkunn/Alipay_Gradio_theme"}, + {"id": "Insuz/Mocha"}, + {"id": "xiaobaiyuan/theme_brief"}, + {"id": "Ama434/434-base-Barlow"}, + {"id": "Ama434/def_barlow"}, + {"id": "Ama434/neutral-barlow"}, + {"id": "dawood/dracula_test"}, + {"id": "nuttea/Softblue"}, + {"id": "BlueDancer/Alien_Diffusion"}, + {"id": "naughtondale/monochrome"}, + {"id": "Dagfinn1962/standard"} +] \ No newline at end of file diff --git a/assets/uvr5_weights/.gitignore b/assets/uvr5_weights/.gitignore deleted file mode 100644 index d6b7ef32c8478a48c3994dcadc86837f4371184d..0000000000000000000000000000000000000000 --- a/assets/uvr5_weights/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/assets/version_checker.py b/assets/version_checker.py new file mode 100644 index 0000000000000000000000000000000000000000..356bf32370c6eaaac7aeef3f22dacb1986468114 --- /dev/null +++ b/assets/version_checker.py @@ -0,0 +1,44 @@ +import os, sys +import json +import requests + +now_dir = os.getcwd() +sys.path.append(now_dir) + +config_file = os.path.join(now_dir, "assets", "config.json") + + +def load_local_version(): + with open(config_file, "r", encoding="utf8") as file: + config = json.load(file) + return config["version"] + + +def obtain_tag_name(): + url = "https://api.github.com/repos/IAHispano/Applio/releases/latest" + + try: + response = requests.get(url) + response.raise_for_status() + + data = response.json() + tag_name = data["tag_name"] + + return tag_name + + except requests.exceptions.RequestException as e: + print(f"Error: {e}") + return None + + +def compare_version(): + local_version = load_local_version() + online_version = obtain_tag_name() + elements_online_version = list(map(int, online_version.split("."))) + elements_local_version = list(map(int, local_version.split("."))) + + for online, local in zip(elements_online_version, elements_local_version): + if local < online: + return f"Your local {local_version} version is older than {online_version} the latest version" + + return f"Your local version {local_version} is the latest version." diff --git a/assets/weights/.gitignore b/assets/weights/.gitignore deleted file mode 100644 index d6b7ef32c8478a48c3994dcadc86837f4371184d..0000000000000000000000000000000000000000 --- a/assets/weights/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/audioEffects.py b/audioEffects.py deleted file mode 100644 index 1830b19e1a5e3ec1f431388d8444ef3a2c9ed91f..0000000000000000000000000000000000000000 --- a/audioEffects.py +++ /dev/null @@ -1,37 +0,0 @@ -from pedalboard import Pedalboard, Compressor, Reverb, NoiseGate -from pedalboard.io import AudioFile -import sys -import os -now_dir = os.getcwd() -sys.path.append(now_dir) -from i18n import I18nAuto -i18n = I18nAuto() -from pydub import AudioSegment -import numpy as np -import soundfile as sf -from pydub.playback import play - -def process_audio(input_path, output_path, reverb_enabled, compressor_enabled, noise_gate_enabled, ): - print(reverb_enabled) - print(compressor_enabled) - print(noise_gate_enabled) - effects = [] - if reverb_enabled: - effects.append(Reverb(room_size=0.01)) - if compressor_enabled: - effects.append(Compressor(threshold_db=-10, ratio=25)) - if noise_gate_enabled: - effects.append(NoiseGate(threshold_db=-16, ratio=1.5, release_ms=250)) - - board = Pedalboard(effects) - - with AudioFile(input_path) as f: - with AudioFile(output_path, 'w', f.samplerate, f.num_channels) as o: - while f.tell() < f.frames: - chunk = f.read(f.samplerate) - effected = board(chunk, f.samplerate, reset=False) - o.write(effected) - - result = i18n("Processed audio saved at: ") + output_path - print(result) - return output_path \ No newline at end of file diff --git a/colab_for_mdx.py b/colab_for_mdx.py deleted file mode 100644 index 274846d0b5395865a05fce0da86b96d26ac06999..0000000000000000000000000000000000000000 --- a/colab_for_mdx.py +++ /dev/null @@ -1,71 +0,0 @@ -import json -import os -import gc -import psutil -import requests -import subprocess -import time -import logging -import sys -import shutil -now_dir = os.getcwd() -sys.path.append(now_dir) -first_cell_executed = False -file_folder = "Colab-for-MDX_B" -def first_cell_ran(): - global first_cell_executed - if first_cell_executed: - #print("The 'first_cell_ran' function has already been executed.") - return - - - - first_cell_executed = True - os.makedirs("tmp_models", exist_ok=True) - - - - class hide_opt: # hide outputs - def __enter__(self): - self._original_stdout = sys.stdout - sys.stdout = open(os.devnull, "w") - - def __exit__(self, exc_type, exc_val, exc_tb): - sys.stdout.close() - sys.stdout = self._original_stdout - - def get_size(bytes, suffix="B"): # read ram - global svmem - factor = 1024 - for unit in ["", "K", "M", "G", "T", "P"]: - if bytes < factor: - return f"{bytes:.2f}{unit}{suffix}" - bytes /= factor - svmem = psutil.virtual_memory() - - - def use_uvr_without_saving(): - print("Notice: files won't be saved to personal drive.") - print(f"Downloading {file_folder}...", end=" ") - with hide_opt(): - #os.chdir(mounting_path) - items_to_move = ["demucs", "diffq","julius","model","separated","tracks","mdx.py","MDX-Net_Colab.ipynb"] - subprocess.run(["git", "clone", "https://github.com/NaJeongMo/Colab-for-MDX_B.git"]) - for item_name in items_to_move: - item_path = os.path.join(file_folder, item_name) - if os.path.exists(item_path): - if os.path.isfile(item_path): - shutil.move(item_path, now_dir) - elif os.path.isdir(item_path): - shutil.move(item_path, now_dir) - try: - shutil.rmtree(file_folder) - except PermissionError: - print(f"No se pudo eliminar la carpeta {file_folder}. Puede estar relacionada con Git.") - - - use_uvr_without_saving() - print("done!") - if not os.path.exists("tracks"): - os.mkdir("tracks") -first_cell_ran() \ No newline at end of file diff --git a/configs/32k.json b/configs/32k.json deleted file mode 100644 index bcae72223ec09dc199009d7cb5ed405a0c0981cf..0000000000000000000000000000000000000000 --- a/configs/32k.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "train": { - "log_interval": 200, - "seed": 1234, - "epochs": 20000, - "learning_rate": 1e-4, - "betas": [0.8, 0.99], - "eps": 1e-9, - "batch_size": 4, - "fp16_run": false, - "lr_decay": 0.999875, - "segment_size": 12800, - "init_lr_ratio": 1, - "warmup_epochs": 0, - "c_mel": 45, - "c_kl": 1.0 - }, - "data": { - "max_wav_value": 32768.0, - "sampling_rate": 32000, - "filter_length": 1024, - "hop_length": 320, - "win_length": 1024, - "n_mel_channels": 80, - "mel_fmin": 0.0, - "mel_fmax": null - }, - "model": { - "inter_channels": 192, - "hidden_channels": 192, - "filter_channels": 768, - "n_heads": 2, - "n_layers": 6, - "kernel_size": 3, - "p_dropout": 0, - "resblock": "1", - "resblock_kernel_sizes": [3, 7, 11], - "resblock_dilation_sizes": [ - [1, 3, 5], - [1, 3, 5], - [1, 3, 5] - ], - "upsample_rates": [10, 4, 2, 2, 2], - "upsample_initial_channel": 512, - "upsample_kernel_sizes": [16, 16, 4, 4, 4], - "use_spectral_norm": false, - "gin_channels": 256, - "spk_embed_dim": 109 - } -} diff --git a/configs/32k_v2.json b/configs/32k_v2.json deleted file mode 100644 index ad42f87b15e1ea68eff0a90db50fbc08d56c7aa9..0000000000000000000000000000000000000000 --- a/configs/32k_v2.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "train": { - "log_interval": 200, - "seed": 1234, - "epochs": 20000, - "learning_rate": 1e-4, - "betas": [0.8, 0.99], - "eps": 1e-9, - "batch_size": 4, - "fp16_run": true, - "lr_decay": 0.999875, - "segment_size": 12800, - "init_lr_ratio": 1, - "warmup_epochs": 0, - "c_mel": 45, - "c_kl": 1.0 - }, - "data": { - "max_wav_value": 32768.0, - "sampling_rate": 32000, - "filter_length": 1024, - "hop_length": 320, - "win_length": 1024, - "n_mel_channels": 80, - "mel_fmin": 0.0, - "mel_fmax": null - }, - "model": { - "inter_channels": 192, - "hidden_channels": 192, - "filter_channels": 768, - "n_heads": 2, - "n_layers": 6, - "kernel_size": 3, - "p_dropout": 0, - "resblock": "1", - "resblock_kernel_sizes": [3, 7, 11], - "resblock_dilation_sizes": [ - [1, 3, 5], - [1, 3, 5], - [1, 3, 5] - ], - "upsample_rates": [10, 8, 2, 2], - "upsample_initial_channel": 512, - "upsample_kernel_sizes": [20, 16, 4, 4], - "use_spectral_norm": false, - "gin_channels": 256, - "spk_embed_dim": 109 - } -} diff --git a/configs/40k.json b/configs/40k.json deleted file mode 100644 index 28ff4d91f2618497fb39ad27872151bcb0d51761..0000000000000000000000000000000000000000 --- a/configs/40k.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "train": { - "log_interval": 200, - "seed": 1234, - "epochs": 20000, - "learning_rate": 1e-4, - "betas": [0.8, 0.99], - "eps": 1e-9, - "batch_size": 4, - "fp16_run": false, - "lr_decay": 0.999875, - "segment_size": 12800, - "init_lr_ratio": 1, - "warmup_epochs": 0, - "c_mel": 45, - "c_kl": 1.0 - }, - "data": { - "max_wav_value": 32768.0, - "sampling_rate": 40000, - "filter_length": 2048, - "hop_length": 400, - "win_length": 2048, - "n_mel_channels": 125, - "mel_fmin": 0.0, - "mel_fmax": null - }, - "model": { - "inter_channels": 192, - "hidden_channels": 192, - "filter_channels": 768, - "n_heads": 2, - "n_layers": 6, - "kernel_size": 3, - "p_dropout": 0, - "resblock": "1", - "resblock_kernel_sizes": [3, 7, 11], - "resblock_dilation_sizes": [ - [1, 3, 5], - [1, 3, 5], - [1, 3, 5] - ], - "upsample_rates": [10, 10, 2, 2], - "upsample_initial_channel": 512, - "upsample_kernel_sizes": [16, 16, 4, 4], - "use_spectral_norm": false, - "gin_channels": 256, - "spk_embed_dim": 109 - } -} diff --git a/configs/48k.json b/configs/48k.json deleted file mode 100644 index 4d01946ed50ade92c1f85b548ab008a4cd617eb8..0000000000000000000000000000000000000000 --- a/configs/48k.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "train": { - "log_interval": 200, - "seed": 1234, - "epochs": 20000, - "learning_rate": 1e-4, - "betas": [0.8, 0.99], - "eps": 1e-9, - "batch_size": 4, - "fp16_run": false, - "lr_decay": 0.999875, - "segment_size": 11520, - "init_lr_ratio": 1, - "warmup_epochs": 0, - "c_mel": 45, - "c_kl": 1.0 - }, - "data": { - "max_wav_value": 32768.0, - "sampling_rate": 48000, - "filter_length": 2048, - "hop_length": 480, - "win_length": 2048, - "n_mel_channels": 128, - "mel_fmin": 0.0, - "mel_fmax": null - }, - "model": { - "inter_channels": 192, - "hidden_channels": 192, - "filter_channels": 768, - "n_heads": 2, - "n_layers": 6, - "kernel_size": 3, - "p_dropout": 0, - "resblock": "1", - "resblock_kernel_sizes": [3, 7, 11], - "resblock_dilation_sizes": [ - [1, 3, 5], - [1, 3, 5], - [1, 3, 5] - ], - "upsample_rates": [10, 6, 2, 2, 2], - "upsample_initial_channel": 512, - "upsample_kernel_sizes": [16, 16, 4, 4, 4], - "use_spectral_norm": false, - "gin_channels": 256, - "spk_embed_dim": 109 - } -} diff --git a/configs/48k_v2.json b/configs/48k_v2.json deleted file mode 100644 index 50f06421912e2cd1f69768c35272981d75d86983..0000000000000000000000000000000000000000 --- a/configs/48k_v2.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "train": { - "log_interval": 200, - "seed": 1234, - "epochs": 20000, - "learning_rate": 1e-4, - "betas": [0.8, 0.99], - "eps": 1e-9, - "batch_size": 4, - "fp16_run": true, - "lr_decay": 0.999875, - "segment_size": 17280, - "init_lr_ratio": 1, - "warmup_epochs": 0, - "c_mel": 45, - "c_kl": 1.0 - }, - "data": { - "max_wav_value": 32768.0, - "sampling_rate": 48000, - "filter_length": 2048, - "hop_length": 480, - "win_length": 2048, - "n_mel_channels": 128, - "mel_fmin": 0.0, - "mel_fmax": null - }, - "model": { - "inter_channels": 192, - "hidden_channels": 192, - "filter_channels": 768, - "n_heads": 2, - "n_layers": 6, - "kernel_size": 3, - "p_dropout": 0, - "resblock": "1", - "resblock_kernel_sizes": [3, 7, 11], - "resblock_dilation_sizes": [ - [1, 3, 5], - [1, 3, 5], - [1, 3, 5] - ], - "upsample_rates": [12, 10, 2, 2], - "upsample_initial_channel": 512, - "upsample_kernel_sizes": [24, 20, 4, 4], - "use_spectral_norm": false, - "gin_channels": 256, - "spk_embed_dim": 109 - } -} diff --git a/configs/config.json b/configs/config.json deleted file mode 100644 index 8e9c17669bf8028653fbfa5c9eeac23ec76c1cc9..0000000000000000000000000000000000000000 --- a/configs/config.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pth_path": "assets/weights/kikiV1.pth", - "index_path": "logs/kikiV1.index", - "sg_input_device": "VoiceMeeter Output (VB-Audio Vo (MME)", - "sg_output_device": "VoiceMeeter Aux Input (VB-Audio (MME)", - "threhold": -45.0, - "pitch": 12.0, - "index_rate": 0.0, - "rms_mix_rate": 0.0, - "block_time": 0.25, - "crossfade_length": 0.04, - "extra_time": 2.0, - "n_cpu": 6.0, - "f0method": "rmvpe" -} diff --git a/configs/config.py b/configs/config.py deleted file mode 100644 index e3b0205a1f0d62f674b9c3de2c5ab7ee90464945..0000000000000000000000000000000000000000 --- a/configs/config.py +++ /dev/null @@ -1,265 +0,0 @@ -import argparse -import os -import sys -import json -from multiprocessing import cpu_count - -import torch - -try: - import intel_extension_for_pytorch as ipex # pylint: disable=import-error, unused-import - if torch.xpu.is_available(): - from infer.modules.ipex import ipex_init - ipex_init() -except Exception: - pass - -import logging - -logger = logging.getLogger(__name__) - - -version_config_list = [ - "v1/32k.json", - "v1/40k.json", - "v1/48k.json", - "v2/48k.json", - "v2/32k.json", -] - - -def singleton_variable(func): - def wrapper(*args, **kwargs): - if not wrapper.instance: - wrapper.instance = func(*args, **kwargs) - return wrapper.instance - - wrapper.instance = None - return wrapper - - -@singleton_variable -class Config: - def __init__(self): - self.device = "cuda:0" - self.is_half = True - self.n_cpu = 0 - self.gpu_name = None - self.json_config = self.load_config_json() - self.gpu_mem = None - ( - self.python_cmd, - self.listen_port, - self.iscolab, - self.noparallel, - self.noautoopen, - self.paperspace, - self.is_cli, - self.grtheme, - self.dml, - ) = self.arg_parse() - self.instead = "" - self.x_pad, self.x_query, self.x_center, self.x_max = self.device_config() - - @staticmethod - def load_config_json() -> dict: - d = {} - for config_file in version_config_list: - with open(f"configs/{config_file}", "r") as f: - d[config_file] = json.load(f) - return d - - @staticmethod - def arg_parse() -> tuple: - exe = sys.executable or "python" - parser = argparse.ArgumentParser() - parser.add_argument("--port", type=int, default=7865, help="Listen port") - parser.add_argument("--pycmd", type=str, default=exe, help="Python command") - parser.add_argument("--colab", action="store_true", help="Launch in colab") - parser.add_argument( - "--noparallel", action="store_true", help="Disable parallel processing" - ) - parser.add_argument( - "--noautoopen", - action="store_true", - help="Do not open in browser automatically", - ) - parser.add_argument( - "--paperspace", - action="store_true", - help="Note that this argument just shares a gradio link for the web UI. Thus can be used on other non-local CLI systems.", - ) - parser.add_argument( - "--is_cli", - action="store_true", - help="Use the CLI instead of setting up a gradio UI. This flag will launch an RVC text interface where you can execute functions from infer-web.py!", - ) - - parser.add_argument( - "-t", - "--theme", - help = "Theme for Gradio. Format - `JohnSmith9982/small_and_pretty` (no backticks)", - default = "JohnSmith9982/small_and_pretty", - type = str - ) - - parser.add_argument( - "--dml", - action="store_true", - help="Use DirectML backend instead of CUDA." - ) - - cmd_opts = parser.parse_args() - - cmd_opts.port = cmd_opts.port if 0 <= cmd_opts.port <= 65535 else 7865 - - return ( - cmd_opts.pycmd, - cmd_opts.port, - cmd_opts.colab, - cmd_opts.noparallel, - cmd_opts.noautoopen, - cmd_opts.paperspace, - cmd_opts.is_cli, - cmd_opts.theme, - cmd_opts.dml, - ) - - # has_mps is only available in nightly pytorch (for now) and MasOS 12.3+. - # check `getattr` and try it for compatibility - @staticmethod - def has_mps() -> bool: - if not torch.backends.mps.is_available(): - return False - try: - torch.zeros(1).to(torch.device("mps")) - return True - except Exception: - return False - - @staticmethod - def has_xpu() -> bool: - if hasattr(torch, "xpu") and torch.xpu.is_available(): - return True - else: - return False - - def use_fp32_config(self): - for config_file in version_config_list: - self.json_config[config_file]["train"]["fp16_run"] = False - - def device_config(self) -> tuple: - if torch.cuda.is_available(): - if self.has_xpu(): - self.device = self.instead = "xpu:0" - self.is_half = True - i_device = int(self.device.split(":")[-1]) - self.gpu_name = torch.cuda.get_device_name(i_device) - if ( - ("16" in self.gpu_name and "V100" not in self.gpu_name.upper()) - or "P40" in self.gpu_name.upper() - or "P10" in self.gpu_name.upper() - or "1060" in self.gpu_name - or "1070" in self.gpu_name - or "1080" in self.gpu_name - ): - logger.info("Found GPU %s, force to fp32", self.gpu_name) - self.is_half = False - self.use_fp32_config() - else: - logger.info("Found GPU %s", self.gpu_name) - self.gpu_mem = int( - torch.cuda.get_device_properties(i_device).total_memory - / 1024 - / 1024 - / 1024 - + 0.4 - ) - if self.gpu_mem <= 4: - with open("infer/modules/train/preprocess.py", "r") as f: - strr = f.read().replace("3.7", "3.0") - with open("infer/modules/train/preprocess.py", "w") as f: - f.write(strr) - elif self.has_mps(): - logger.info("No supported Nvidia GPU found") - self.device = self.instead = "mps" - self.is_half = False - self.use_fp32_config() - else: - logger.info("No supported Nvidia GPU found") - self.device = self.instead = "cpu" - self.is_half = False - self.use_fp32_config() - - if self.n_cpu == 0: - self.n_cpu = cpu_count() - - if self.is_half: - # 6G显存配置 - x_pad = 3 - x_query = 10 - x_center = 60 - x_max = 65 - else: - # 5G显存配置 - x_pad = 1 - x_query = 6 - x_center = 38 - x_max = 41 - - if self.gpu_mem is not None and self.gpu_mem <= 4: - x_pad = 1 - x_query = 5 - x_center = 30 - x_max = 32 - if self.dml: - logger.info("Use DirectML instead") - if ( - os.path.exists( - "runtime\Lib\site-packages\onnxruntime\capi\DirectML.dll" - ) - == False - ): - try: - os.rename( - "runtime\Lib\site-packages\onnxruntime", - "runtime\Lib\site-packages\onnxruntime-cuda", - ) - except: - pass - try: - os.rename( - "runtime\Lib\site-packages\onnxruntime-dml", - "runtime\Lib\site-packages\onnxruntime", - ) - except: - pass - # if self.device != "cpu": - import torch_directml - - self.device = torch_directml.device(torch_directml.default_device()) - self.is_half = False - else: - if self.instead: - logger.info(f"Use {self.instead} instead") - if ( - os.path.exists( - "runtime\Lib\site-packages\onnxruntime\capi\onnxruntime_providers_cuda.dll" - ) - == False - ): - try: - os.rename( - "runtime\Lib\site-packages\onnxruntime", - "runtime\Lib\site-packages\onnxruntime-dml", - ) - except: - pass - try: - os.rename( - "runtime\Lib\site-packages\onnxruntime-cuda", - "runtime\Lib\site-packages\onnxruntime", - ) - except: - pass - return x_pad, x_query, x_center, x_max diff --git a/core.py b/core.py new file mode 100644 index 0000000000000000000000000000000000000000..3961b0aa5d971427126424e10b35af46215af68a --- /dev/null +++ b/core.py @@ -0,0 +1,781 @@ +import os +import sys +import json +import argparse +import subprocess +import spaces + +now_dir = os.getcwd() +sys.path.append(now_dir) + +from rvc.configs.config import Config + +from rvc.lib.tools.prerequisites_download import prequisites_download_pipeline + +from rvc.infer.infer import infer_pipeline + +from rvc.lib.tools.model_download import model_download_pipeline + +config = Config() +current_script_directory = os.path.dirname(os.path.realpath(__file__)) +logs_path = os.path.join(current_script_directory, "logs") + +# Get TTS Voices +with open(os.path.join("rvc", "lib", "tools", "tts_voices.json"), "r") as f: + voices_data = json.load(f) + +locales = list({voice["Locale"] for voice in voices_data}) + + +# Infer +@spaces.GPU +def run_infer_script( + f0up_key, + filter_radius, + index_rate, + rms_mix_rate, + protect, + hop_length, + f0method, + input_path, + output_path, + pth_path, + index_path, + split_audio, + f0autotune, + clean_audio, + clean_strength, + export_format, + embedder_model, + embedder_model_custom, + upscale_audio, +): + f0autotune = "True" if str(f0autotune) == "True" else "False" + clean_audio = "True" if str(clean_audio) == "True" else "False" + upscale_audio = "True" if str(upscale_audio) == "True" else "False" + infer_pipeline( + f0up_key, + filter_radius, + index_rate, + rms_mix_rate, + protect, + hop_length, + f0method, + input_path, + output_path, + pth_path, + index_path, + split_audio, + f0autotune, + clean_audio, + clean_strength, + export_format, + embedder_model, + embedder_model_custom, + upscale_audio, + ) + return f"File {input_path} inferred successfully.", output_path.replace( + ".wav", f".{export_format.lower()}" + ) + + +# Batch infer +@spaces.GPU +def run_batch_infer_script( + f0up_key, + filter_radius, + index_rate, + rms_mix_rate, + protect, + hop_length, + f0method, + input_folder, + output_folder, + pth_path, + index_path, + split_audio, + f0autotune, + clean_audio, + clean_strength, + export_format, + embedder_model, + embedder_model_custom, + upscale_audio, +): + f0autotune = "True" if str(f0autotune) == "True" else "False" + clean_audio = "True" if str(clean_audio) == "True" else "False" + upscale_audio = "True" if str(upscale_audio) == "True" else "False" + audio_files = [ + f for f in os.listdir(input_folder) if f.endswith((".mp3", ".wav", ".flac")) + ] + print(f"Detected {len(audio_files)} audio files for inference.") + + for audio_file in audio_files: + if "_output" in audio_file: + pass + else: + input_path = os.path.join(input_folder, audio_file) + output_file_name = os.path.splitext(os.path.basename(audio_file))[0] + output_path = os.path.join( + output_folder, + f"{output_file_name}_output{os.path.splitext(audio_file)[1]}", + ) + print(f"Inferring {input_path}...") + + infer_pipeline( + f0up_key, + filter_radius, + index_rate, + rms_mix_rate, + protect, + hop_length, + f0method, + input_path, + output_path, + pth_path, + index_path, + split_audio, + f0autotune, + clean_audio, + clean_strength, + export_format, + embedder_model, + embedder_model_custom, + upscale_audio, + ) + + return f"Files from {input_folder} inferred successfully." + + +# TTS +@spaces.GPU +def run_tts_script( + tts_text, + tts_voice, + tts_rate, + f0up_key, + filter_radius, + index_rate, + rms_mix_rate, + protect, + hop_length, + f0method, + output_tts_path, + output_rvc_path, + pth_path, + index_path, + split_audio, + f0autotune, + clean_audio, + clean_strength, + export_format, + embedder_model, + embedder_model_custom, + upscale_audio, +): + f0autotune = "True" if str(f0autotune) == "True" else "False" + clean_audio = "True" if str(clean_audio) == "True" else "False" + upscale_audio = "True" if str(upscale_audio) == "True" else "False" + tts_script_path = os.path.join("rvc", "lib", "tools", "tts.py") + + if os.path.exists(output_tts_path): + os.remove(output_tts_path) + + command_tts = [ + "python", + tts_script_path, + tts_text, + tts_voice, + str(tts_rate), + output_tts_path, + ] + subprocess.run(command_tts) + + infer_pipeline( + f0up_key, + filter_radius, + index_rate, + rms_mix_rate, + protect, + hop_length, + f0method, + output_tts_path, + output_rvc_path, + pth_path, + index_path, + split_audio, + f0autotune, + clean_audio, + clean_strength, + export_format, + embedder_model, + embedder_model_custom, + upscale_audio, + ) + + return f"Text {tts_text} synthesized successfully.", output_rvc_path.replace( + ".wav", f".{export_format.lower()}" + ) + + +# Download +def run_download_script(model_link): + model_download_pipeline(model_link) + return f"Model downloaded successfully." + + +# Prerequisites +def run_prerequisites_script(pretraineds_v1, pretraineds_v2, models, exe): + prequisites_download_pipeline(pretraineds_v1, pretraineds_v2, models, exe) + return "Prerequisites installed successfully." + +# Parse arguments +def parse_arguments(): + parser = argparse.ArgumentParser( + description="Run the main.py script with specific parameters." + ) + subparsers = parser.add_subparsers( + title="subcommands", dest="mode", help="Choose a mode" + ) + + # Parser for 'infer' mode + infer_parser = subparsers.add_parser("infer", help="Run inference") + infer_parser.add_argument( + "--f0up_key", + type=str, + help="Value for f0up_key", + choices=[str(i) for i in range(-24, 25)], + default="0", + ) + infer_parser.add_argument( + "--filter_radius", + type=str, + help="Value for filter_radius", + choices=[str(i) for i in range(11)], + default="3", + ) + infer_parser.add_argument( + "--index_rate", + type=str, + help="Value for index_rate", + choices=[str(i / 10) for i in range(11)], + default="0.3", + ) + infer_parser.add_argument( + "--rms_mix_rate", + type=str, + help="Value for rms_mix_rate", + choices=[str(i / 10) for i in range(11)], + default="1", + ) + infer_parser.add_argument( + "--protect", + type=str, + help="Value for protect", + choices=[str(i / 10) for i in range(6)], + default="0.33", + ) + infer_parser.add_argument( + "--hop_length", + type=str, + help="Value for hop_length", + choices=[str(i) for i in range(1, 513)], + default="128", + ) + infer_parser.add_argument( + "--f0method", + type=str, + help="Value for f0method", + choices=[ + "pm", + "harvest", + "dio", + "crepe", + "crepe-tiny", + "rmvpe", + "fcpe", + "hybrid[crepe+rmvpe]", + "hybrid[crepe+fcpe]", + "hybrid[rmvpe+fcpe]", + "hybrid[crepe+rmvpe+fcpe]", + ], + default="rmvpe", + ) + infer_parser.add_argument("--input_path", type=str, help="Input path") + infer_parser.add_argument("--output_path", type=str, help="Output path") + infer_parser.add_argument("--pth_path", type=str, help="Path to the .pth file") + infer_parser.add_argument( + "--index_path", + type=str, + help="Path to the .index file", + ) + infer_parser.add_argument( + "--split_audio", + type=str, + help="Enable split audio", + choices=["True", "False"], + default="False", + ) + infer_parser.add_argument( + "--f0autotune", + type=str, + help="Enable autotune", + choices=["True", "False"], + default="False", + ) + infer_parser.add_argument( + "--clean_audio", + type=str, + help="Enable clean audio", + choices=["True", "False"], + default="False", + ) + infer_parser.add_argument( + "--clean_strength", + type=str, + help="Value for clean_strength", + choices=[str(i / 10) for i in range(11)], + default="0.7", + ) + infer_parser.add_argument( + "--export_format", + type=str, + help="Export format", + choices=["WAV", "MP3", "FLAC", "OGG", "M4A"], + default="WAV", + ) + infer_parser.add_argument( + "--embedder_model", + type=str, + help="Embedder model", + choices=["contentvec", "hubert", "custom"], + default="hubert", + ) + infer_parser.add_argument( + "--embedder_model_custom", + type=str, + help="Custom Embedder model", + default=None, + ) + infer_parser.add_argument( + "--upscale_audio", + type=str, + help="Enable audio upscaling", + choices=["True", "False"], + default="False", + ) + + # Parser for 'batch_infer' mode + batch_infer_parser = subparsers.add_parser( + "batch_infer", help="Run batch inference" + ) + batch_infer_parser.add_argument( + "--f0up_key", + type=str, + help="Value for f0up_key", + choices=[str(i) for i in range(-24, 25)], + default="0", + ) + batch_infer_parser.add_argument( + "--filter_radius", + type=str, + help="Value for filter_radius", + choices=[str(i) for i in range(11)], + default="3", + ) + batch_infer_parser.add_argument( + "--index_rate", + type=str, + help="Value for index_rate", + choices=[str(i / 10) for i in range(11)], + default="0.3", + ) + batch_infer_parser.add_argument( + "--rms_mix_rate", + type=str, + help="Value for rms_mix_rate", + choices=[str(i / 10) for i in range(11)], + default="1", + ) + batch_infer_parser.add_argument( + "--protect", + type=str, + help="Value for protect", + choices=[str(i / 10) for i in range(6)], + default="0.33", + ) + batch_infer_parser.add_argument( + "--hop_length", + type=str, + help="Value for hop_length", + choices=[str(i) for i in range(1, 513)], + default="128", + ) + batch_infer_parser.add_argument( + "--f0method", + type=str, + help="Value for f0method", + choices=[ + "pm", + "harvest", + "dio", + "crepe", + "crepe-tiny", + "rmvpe", + "fcpe", + "hybrid[crepe+rmvpe]", + "hybrid[crepe+fcpe]", + "hybrid[rmvpe+fcpe]", + "hybrid[crepe+rmvpe+fcpe]", + ], + default="rmvpe", + ) + batch_infer_parser.add_argument("--input_folder", type=str, help="Input folder") + batch_infer_parser.add_argument("--output_folder", type=str, help="Output folder") + batch_infer_parser.add_argument( + "--pth_path", type=str, help="Path to the .pth file" + ) + batch_infer_parser.add_argument( + "--index_path", + type=str, + help="Path to the .index file", + ) + batch_infer_parser.add_argument( + "--split_audio", + type=str, + help="Enable split audio", + choices=["True", "False"], + default="False", + ) + batch_infer_parser.add_argument( + "--f0autotune", + type=str, + help="Enable autotune", + choices=["True", "False"], + default="False", + ) + batch_infer_parser.add_argument( + "--clean_audio", + type=str, + help="Enable clean audio", + choices=["True", "False"], + default="False", + ) + batch_infer_parser.add_argument( + "--clean_strength", + type=str, + help="Value for clean_strength", + choices=[str(i / 10) for i in range(11)], + default="0.7", + ) + batch_infer_parser.add_argument( + "--export_format", + type=str, + help="Export format", + choices=["WAV", "MP3", "FLAC", "OGG", "M4A"], + default="WAV", + ) + batch_infer_parser.add_argument( + "--embedder_model", + type=str, + help="Embedder model", + choices=["contentvec", "hubert", "custom"], + default="hubert", + ) + batch_infer_parser.add_argument( + "--embedder_model_custom", + type=str, + help="Custom Embedder model", + default=None, + ) + batch_infer_parser.add_argument( + "--upscale_audio", + type=str, + help="Enable audio upscaling", + choices=["True", "False"], + default="False", + ) + + # Parser for 'tts' mode + tts_parser = subparsers.add_parser("tts", help="Run TTS") + tts_parser.add_argument( + "--tts_text", + type=str, + help="Text to be synthesized", + ) + tts_parser.add_argument( + "--tts_voice", + type=str, + help="Voice to be used", + choices=locales, + ) + tts_parser.add_argument( + "--tts_rate", + type=str, + help="Increase or decrease TTS speed", + choices=[str(i) for i in range(-100, 100)], + default="0", + ) + tts_parser.add_argument( + "--f0up_key", + type=str, + help="Value for f0up_key", + choices=[str(i) for i in range(-24, 25)], + default="0", + ) + tts_parser.add_argument( + "--filter_radius", + type=str, + help="Value for filter_radius", + choices=[str(i) for i in range(11)], + default="3", + ) + tts_parser.add_argument( + "--index_rate", + type=str, + help="Value for index_rate", + choices=[str(i / 10) for i in range(11)], + default="0.3", + ) + tts_parser.add_argument( + "--rms_mix_rate", + type=str, + help="Value for rms_mix_rate", + choices=[str(i / 10) for i in range(11)], + default="1", + ) + tts_parser.add_argument( + "--protect", + type=str, + help="Value for protect", + choices=[str(i / 10) for i in range(6)], + default="0.33", + ) + tts_parser.add_argument( + "--hop_length", + type=str, + help="Value for hop_length", + choices=[str(i) for i in range(1, 513)], + default="128", + ) + tts_parser.add_argument( + "--f0method", + type=str, + help="Value for f0method", + choices=[ + "pm", + "harvest", + "dio", + "crepe", + "crepe-tiny", + "rmvpe", + "fcpe", + "hybrid[crepe+rmvpe]", + "hybrid[crepe+fcpe]", + "hybrid[rmvpe+fcpe]", + "hybrid[crepe+rmvpe+fcpe]", + ], + default="rmvpe", + ) + tts_parser.add_argument("--output_tts_path", type=str, help="Output tts path") + tts_parser.add_argument("--output_rvc_path", type=str, help="Output rvc path") + tts_parser.add_argument("--pth_path", type=str, help="Path to the .pth file") + tts_parser.add_argument( + "--index_path", + type=str, + help="Path to the .index file", + ) + tts_parser.add_argument( + "--split_audio", + type=str, + help="Enable split audio", + choices=["True", "False"], + default="False", + ) + tts_parser.add_argument( + "--f0autotune", + type=str, + help="Enable autotune", + choices=["True", "False"], + default="False", + ) + tts_parser.add_argument( + "--clean_audio", + type=str, + help="Enable clean audio", + choices=["True", "False"], + default="False", + ) + tts_parser.add_argument( + "--clean_strength", + type=str, + help="Value for clean_strength", + choices=[str(i / 10) for i in range(11)], + default="0.7", + ) + tts_parser.add_argument( + "--export_format", + type=str, + help="Export format", + choices=["WAV", "MP3", "FLAC", "OGG", "M4A"], + default="WAV", + ) + tts_parser.add_argument( + "--embedder_model", + type=str, + help="Embedder model", + choices=["contentvec", "hubert", "custom"], + default="hubert", + ) + tts_parser.add_argument( + "--embedder_model_custom", + type=str, + help="Custom Embedder model", + default=None, + ) + tts_parser.add_argument( + "--upscale_audio", + type=str, + help="Enable audio upscaling", + choices=["True", "False"], + default="False", + ) + + # Parser for 'download' mode + download_parser = subparsers.add_parser("download", help="Download models") + download_parser.add_argument( + "--model_link", + type=str, + help="Link of the model", + ) + + # Parser for 'prerequisites' mode + prerequisites_parser = subparsers.add_parser( + "prerequisites", help="Install prerequisites" + ) + prerequisites_parser.add_argument( + "--pretraineds_v1", + type=str, + choices=["True", "False"], + default="True", + help="Download pretrained models for v1", + ) + prerequisites_parser.add_argument( + "--pretraineds_v2", + type=str, + choices=["True", "False"], + default="True", + help="Download pretrained models for v2", + ) + prerequisites_parser.add_argument( + "--models", + type=str, + choices=["True", "False"], + default="True", + help="Donwload models", + ) + prerequisites_parser.add_argument( + "--exe", + type=str, + choices=["True", "False"], + default="True", + help="Download executables", + ) + + return parser.parse_args() + + +def main(): + if len(sys.argv) == 1: + print("Please run the script with '-h' for more information.") + sys.exit(1) + + args = parse_arguments() + + try: + if args.mode == "infer": + run_infer_script( + str(args.f0up_key), + str(args.filter_radius), + str(args.index_rate), + str(args.rms_mix_rate), + str(args.protect), + str(args.hop_length), + str(args.f0method), + str(args.input_path), + str(args.output_path), + str(args.pth_path), + str(args.index_path), + str(args.split_audio), + str(args.f0autotune), + str(args.clean_audio), + str(args.clean_strength), + str(args.export_format), + str(args.embedder_model), + str(args.embedder_model_custom), + str(args.upscale_audio), + ) + elif args.mode == "batch_infer": + run_batch_infer_script( + str(args.f0up_key), + str(args.filter_radius), + str(args.index_rate), + str(args.rms_mix_rate), + str(args.protect), + str(args.hop_length), + str(args.f0method), + str(args.input_folder), + str(args.output_folder), + str(args.pth_path), + str(args.index_path), + str(args.split_audio), + str(args.f0autotune), + str(args.clean_audio), + str(args.clean_strength), + str(args.export_format), + str(args.embedder_model), + str(args.embedder_model_custom), + str(args.upscale_audio), + ) + elif args.mode == "tts": + run_tts_script( + str(args.tts_text), + str(args.tts_voice), + str(args.tts_rate), + str(args.f0up_key), + str(args.filter_radius), + str(args.index_rate), + str(args.rms_mix_rate), + str(args.protect), + str(args.hop_length), + str(args.f0method), + str(args.output_tts_path), + str(args.output_rvc_path), + str(args.pth_path), + str(args.index_path), + str(args.split_audio), + str(args.f0autotune), + str(args.clean_audio), + str(args.clean_strength), + str(args.export_format), + str(args.embedder_model), + str(args.embedder_model_custom), + str(args.upscale_audio), + ) + elif args.mode == "download": + run_download_script( + str(args.model_link), + ) + elif args.mode == "prerequisites": + run_prerequisites_script( + str(args.pretraineds_v1), + str(args.pretraineds_v2), + str(args.models), + str(args.exe), + ) + except Exception as error: + print(f"Error: {error}") + + +if __name__ == "__main__": + main() diff --git a/delete_models.py b/delete_models.py new file mode 100644 index 0000000000000000000000000000000000000000..467ac6eb92be4e01e875a7259de2a644fb5826e0 --- /dev/null +++ b/delete_models.py @@ -0,0 +1,44 @@ +import sys +import os +import time +import threading +import shutil +import logging + +now_dir = os.getcwd() +sys.path.append(now_dir) + +logging.basicConfig(level=logging.DEBUG) + +def infinite_loop(): + while True: + try: + models_folder = os.path.join(now_dir, "logs") + + for element in os.listdir(models_folder): + element_route = os.path.join(models_folder, element) + if os.path.isdir(element_route) and element != "mute": + shutil.rmtree(element_route) + elif os.path.isfile(element_route): + os.remove(element_route) + except Exception as e: + logging.error(f"Error in models_folder loop: {e}") + + try: + audios_folder = os.path.join(now_dir, "audios") + + for element in os.listdir(audios_folder): + element_route = os.path.join(audios_folder, element) + if os.path.isfile(element_route): + os.remove(element_route) + except Exception as e: + logging.error(f"Error in audios_folder loop: {e}") + + wait_time = 24 * 60 * 60 + logging.info(f"Sleeping for {wait_time} seconds") + time.sleep(wait_time) + +def start_infinite_loop(): + hilo_bucle = threading.Thread(target=infinite_loop) + hilo_bucle.daemon = True + hilo_bucle.start() \ No newline at end of file diff --git a/demucs/__init__.py b/demucs/__init__.py deleted file mode 100644 index d4182e356427e1b05a79f8da641c70bb732514fa..0000000000000000000000000000000000000000 --- a/demucs/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -__version__ = "2.0.3" diff --git a/demucs/__main__.py b/demucs/__main__.py deleted file mode 100644 index 5148f20623bdaa827777558844796ded1876d7d0..0000000000000000000000000000000000000000 --- a/demucs/__main__.py +++ /dev/null @@ -1,317 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -import json -import math -import os -import sys -import time -from dataclasses import dataclass, field - -import torch as th -from torch import distributed, nn -from torch.nn.parallel.distributed import DistributedDataParallel - -from .augment import FlipChannels, FlipSign, Remix, Scale, Shift -from .compressed import get_compressed_datasets -from .model import Demucs -from .parser import get_name, get_parser -from .raw import Rawset -from .repitch import RepitchedWrapper -from .pretrained import load_pretrained, SOURCES -from .tasnet import ConvTasNet -from .test import evaluate -from .train import train_model, validate_model -from .utils import (human_seconds, load_model, save_model, get_state, - save_state, sizeof_fmt, get_quantizer) -from .wav import get_wav_datasets, get_musdb_wav_datasets - - -@dataclass -class SavedState: - metrics: list = field(default_factory=list) - last_state: dict = None - best_state: dict = None - optimizer: dict = None - - -def main(): - parser = get_parser() - args = parser.parse_args() - name = get_name(parser, args) - print(f"Experiment {name}") - - if args.musdb is None and args.rank == 0: - print( - "You must provide the path to the MusDB dataset with the --musdb flag. " - "To download the MusDB dataset, see https://sigsep.github.io/datasets/musdb.html.", - file=sys.stderr) - sys.exit(1) - - eval_folder = args.evals / name - eval_folder.mkdir(exist_ok=True, parents=True) - args.logs.mkdir(exist_ok=True) - metrics_path = args.logs / f"{name}.json" - eval_folder.mkdir(exist_ok=True, parents=True) - args.checkpoints.mkdir(exist_ok=True, parents=True) - args.models.mkdir(exist_ok=True, parents=True) - - if args.device is None: - device = "cpu" - if th.cuda.is_available(): - device = "cuda" - else: - device = args.device - - th.manual_seed(args.seed) - # Prevents too many threads to be started when running `museval` as it can be quite - # inefficient on NUMA architectures. - os.environ["OMP_NUM_THREADS"] = "1" - os.environ["MKL_NUM_THREADS"] = "1" - - if args.world_size > 1: - if device != "cuda" and args.rank == 0: - print("Error: distributed training is only available with cuda device", file=sys.stderr) - sys.exit(1) - th.cuda.set_device(args.rank % th.cuda.device_count()) - distributed.init_process_group(backend="nccl", - init_method="tcp://" + args.master, - rank=args.rank, - world_size=args.world_size) - - checkpoint = args.checkpoints / f"{name}.th" - checkpoint_tmp = args.checkpoints / f"{name}.th.tmp" - if args.restart and checkpoint.exists() and args.rank == 0: - checkpoint.unlink() - - if args.test or args.test_pretrained: - args.epochs = 1 - args.repeat = 0 - if args.test: - model = load_model(args.models / args.test) - else: - model = load_pretrained(args.test_pretrained) - elif args.tasnet: - model = ConvTasNet(audio_channels=args.audio_channels, - samplerate=args.samplerate, X=args.X, - segment_length=4 * args.samples, - sources=SOURCES) - else: - model = Demucs( - audio_channels=args.audio_channels, - channels=args.channels, - context=args.context, - depth=args.depth, - glu=args.glu, - growth=args.growth, - kernel_size=args.kernel_size, - lstm_layers=args.lstm_layers, - rescale=args.rescale, - rewrite=args.rewrite, - stride=args.conv_stride, - resample=args.resample, - normalize=args.normalize, - samplerate=args.samplerate, - segment_length=4 * args.samples, - sources=SOURCES, - ) - model.to(device) - if args.init: - model.load_state_dict(load_pretrained(args.init).state_dict()) - - if args.show: - print(model) - size = sizeof_fmt(4 * sum(p.numel() for p in model.parameters())) - print(f"Model size {size}") - return - - try: - saved = th.load(checkpoint, map_location='cpu') - except IOError: - saved = SavedState() - - optimizer = th.optim.Adam(model.parameters(), lr=args.lr) - - quantizer = None - quantizer = get_quantizer(model, args, optimizer) - - if saved.last_state is not None: - model.load_state_dict(saved.last_state, strict=False) - if saved.optimizer is not None: - optimizer.load_state_dict(saved.optimizer) - - model_name = f"{name}.th" - if args.save_model: - if args.rank == 0: - model.to("cpu") - model.load_state_dict(saved.best_state) - save_model(model, quantizer, args, args.models / model_name) - return - elif args.save_state: - model_name = f"{args.save_state}.th" - if args.rank == 0: - model.to("cpu") - model.load_state_dict(saved.best_state) - state = get_state(model, quantizer) - save_state(state, args.models / model_name) - return - - if args.rank == 0: - done = args.logs / f"{name}.done" - if done.exists(): - done.unlink() - - augment = [Shift(args.data_stride)] - if args.augment: - augment += [FlipSign(), FlipChannels(), Scale(), - Remix(group_size=args.remix_group_size)] - augment = nn.Sequential(*augment).to(device) - print("Agumentation pipeline:", augment) - - if args.mse: - criterion = nn.MSELoss() - else: - criterion = nn.L1Loss() - - # Setting number of samples so that all convolution windows are full. - # Prevents hard to debug mistake with the prediction being shifted compared - # to the input mixture. - samples = model.valid_length(args.samples) - print(f"Number of training samples adjusted to {samples}") - samples = samples + args.data_stride - if args.repitch: - # We need a bit more audio samples, to account for potential - # tempo change. - samples = math.ceil(samples / (1 - 0.01 * args.max_tempo)) - - args.metadata.mkdir(exist_ok=True, parents=True) - if args.raw: - train_set = Rawset(args.raw / "train", - samples=samples, - channels=args.audio_channels, - streams=range(1, len(model.sources) + 1), - stride=args.data_stride) - - valid_set = Rawset(args.raw / "valid", channels=args.audio_channels) - elif args.wav: - train_set, valid_set = get_wav_datasets(args, samples, model.sources) - elif args.is_wav: - train_set, valid_set = get_musdb_wav_datasets(args, samples, model.sources) - else: - train_set, valid_set = get_compressed_datasets(args, samples) - - if args.repitch: - train_set = RepitchedWrapper( - train_set, - proba=args.repitch, - max_tempo=args.max_tempo) - - best_loss = float("inf") - for epoch, metrics in enumerate(saved.metrics): - print(f"Epoch {epoch:03d}: " - f"train={metrics['train']:.8f} " - f"valid={metrics['valid']:.8f} " - f"best={metrics['best']:.4f} " - f"ms={metrics.get('true_model_size', 0):.2f}MB " - f"cms={metrics.get('compressed_model_size', 0):.2f}MB " - f"duration={human_seconds(metrics['duration'])}") - best_loss = metrics['best'] - - if args.world_size > 1: - dmodel = DistributedDataParallel(model, - device_ids=[th.cuda.current_device()], - output_device=th.cuda.current_device()) - else: - dmodel = model - - for epoch in range(len(saved.metrics), args.epochs): - begin = time.time() - model.train() - train_loss, model_size = train_model( - epoch, train_set, dmodel, criterion, optimizer, augment, - quantizer=quantizer, - batch_size=args.batch_size, - device=device, - repeat=args.repeat, - seed=args.seed, - diffq=args.diffq, - workers=args.workers, - world_size=args.world_size) - model.eval() - valid_loss = validate_model( - epoch, valid_set, model, criterion, - device=device, - rank=args.rank, - split=args.split_valid, - overlap=args.overlap, - world_size=args.world_size) - - ms = 0 - cms = 0 - if quantizer and args.rank == 0: - ms = quantizer.true_model_size() - cms = quantizer.compressed_model_size(num_workers=min(40, args.world_size * 10)) - - duration = time.time() - begin - if valid_loss < best_loss and ms <= args.ms_target: - best_loss = valid_loss - saved.best_state = { - key: value.to("cpu").clone() - for key, value in model.state_dict().items() - } - - saved.metrics.append({ - "train": train_loss, - "valid": valid_loss, - "best": best_loss, - "duration": duration, - "model_size": model_size, - "true_model_size": ms, - "compressed_model_size": cms, - }) - if args.rank == 0: - json.dump(saved.metrics, open(metrics_path, "w")) - - saved.last_state = model.state_dict() - saved.optimizer = optimizer.state_dict() - if args.rank == 0 and not args.test: - th.save(saved, checkpoint_tmp) - checkpoint_tmp.rename(checkpoint) - - print(f"Epoch {epoch:03d}: " - f"train={train_loss:.8f} valid={valid_loss:.8f} best={best_loss:.4f} ms={ms:.2f}MB " - f"cms={cms:.2f}MB " - f"duration={human_seconds(duration)}") - - if args.world_size > 1: - distributed.barrier() - - del dmodel - model.load_state_dict(saved.best_state) - if args.eval_cpu: - device = "cpu" - model.to(device) - model.eval() - evaluate(model, args.musdb, eval_folder, - is_wav=args.is_wav, - rank=args.rank, - world_size=args.world_size, - device=device, - save=args.save, - split=args.split_valid, - shifts=args.shifts, - overlap=args.overlap, - workers=args.eval_workers) - model.to("cpu") - if args.rank == 0: - if not (args.test or args.test_pretrained): - save_model(model, quantizer, args, args.models / model_name) - print("done") - done.write_text("done") - - -if __name__ == "__main__": - main() diff --git a/demucs/audio.py b/demucs/audio.py deleted file mode 100644 index b29f156e4afb5fbda32c35777022caeadf50d711..0000000000000000000000000000000000000000 --- a/demucs/audio.py +++ /dev/null @@ -1,172 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. -import json -import subprocess as sp -from pathlib import Path - -import julius -import numpy as np -import torch - -from .utils import temp_filenames - - -def _read_info(path): - stdout_data = sp.check_output([ - 'ffprobe', "-loglevel", "panic", - str(path), '-print_format', 'json', '-show_format', '-show_streams' - ]) - return json.loads(stdout_data.decode('utf-8')) - - -class AudioFile: - """ - Allows to read audio from any format supported by ffmpeg, as well as resampling or - converting to mono on the fly. See :method:`read` for more details. - """ - def __init__(self, path: Path): - self.path = Path(path) - self._info = None - - def __repr__(self): - features = [("path", self.path)] - features.append(("samplerate", self.samplerate())) - features.append(("channels", self.channels())) - features.append(("streams", len(self))) - features_str = ", ".join(f"{name}={value}" for name, value in features) - return f"AudioFile({features_str})" - - @property - def info(self): - if self._info is None: - self._info = _read_info(self.path) - return self._info - - @property - def duration(self): - return float(self.info['format']['duration']) - - @property - def _audio_streams(self): - return [ - index for index, stream in enumerate(self.info["streams"]) - if stream["codec_type"] == "audio" - ] - - def __len__(self): - return len(self._audio_streams) - - def channels(self, stream=0): - return int(self.info['streams'][self._audio_streams[stream]]['channels']) - - def samplerate(self, stream=0): - return int(self.info['streams'][self._audio_streams[stream]]['sample_rate']) - - def read(self, - seek_time=None, - duration=None, - streams=slice(None), - samplerate=None, - channels=None, - temp_folder=None): - """ - Slightly more efficient implementation than stempeg, - in particular, this will extract all stems at once - rather than having to loop over one file multiple times - for each stream. - - Args: - seek_time (float): seek time in seconds or None if no seeking is needed. - duration (float): duration in seconds to extract or None to extract until the end. - streams (slice, int or list): streams to extract, can be a single int, a list or - a slice. If it is a slice or list, the output will be of size [S, C, T] - with S the number of streams, C the number of channels and T the number of samples. - If it is an int, the output will be [C, T]. - samplerate (int): if provided, will resample on the fly. If None, no resampling will - be done. Original sampling rate can be obtained with :method:`samplerate`. - channels (int): if 1, will convert to mono. We do not rely on ffmpeg for that - as ffmpeg automatically scale by +3dB to conserve volume when playing on speakers. - See https://sound.stackexchange.com/a/42710. - Our definition of mono is simply the average of the two channels. Any other - value will be ignored. - temp_folder (str or Path or None): temporary folder to use for decoding. - - - """ - streams = np.array(range(len(self)))[streams] - single = not isinstance(streams, np.ndarray) - if single: - streams = [streams] - - if duration is None: - target_size = None - query_duration = None - else: - target_size = int((samplerate or self.samplerate()) * duration) - query_duration = float((target_size + 1) / (samplerate or self.samplerate())) - - with temp_filenames(len(streams)) as filenames: - command = ['ffmpeg', '-y'] - command += ['-loglevel', 'panic'] - if seek_time: - command += ['-ss', str(seek_time)] - command += ['-i', str(self.path)] - for stream, filename in zip(streams, filenames): - command += ['-map', f'0:{self._audio_streams[stream]}'] - if query_duration is not None: - command += ['-t', str(query_duration)] - command += ['-threads', '1'] - command += ['-f', 'f32le'] - if samplerate is not None: - command += ['-ar', str(samplerate)] - command += [filename] - - sp.run(command, check=True) - wavs = [] - for filename in filenames: - wav = np.fromfile(filename, dtype=np.float32) - wav = torch.from_numpy(wav) - wav = wav.view(-1, self.channels()).t() - if channels is not None: - wav = convert_audio_channels(wav, channels) - if target_size is not None: - wav = wav[..., :target_size] - wavs.append(wav) - wav = torch.stack(wavs, dim=0) - if single: - wav = wav[0] - return wav - - -def convert_audio_channels(wav, channels=2): - """Convert audio to the given number of channels.""" - *shape, src_channels, length = wav.shape - if src_channels == channels: - pass - elif channels == 1: - # Case 1: - # The caller asked 1-channel audio, but the stream have multiple - # channels, downmix all channels. - wav = wav.mean(dim=-2, keepdim=True) - elif src_channels == 1: - # Case 2: - # The caller asked for multiple channels, but the input file have - # one single channel, replicate the audio over all channels. - wav = wav.expand(*shape, channels, length) - elif src_channels >= channels: - # Case 3: - # The caller asked for multiple channels, and the input file have - # more channels than requested. In that case return the first channels. - wav = wav[..., :channels, :] - else: - # Case 4: What is a reasonable choice here? - raise ValueError('The audio file has less channels than requested but is not mono.') - return wav - - -def convert_audio(wav, from_samplerate, to_samplerate, channels): - wav = convert_audio_channels(wav, channels) - return julius.resample_frac(wav, from_samplerate, to_samplerate) diff --git a/demucs/augment.py b/demucs/augment.py deleted file mode 100644 index bb36d3298d89470f306316322e7587187819c94b..0000000000000000000000000000000000000000 --- a/demucs/augment.py +++ /dev/null @@ -1,106 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -import random -import torch as th -from torch import nn - - -class Shift(nn.Module): - """ - Randomly shift audio in time by up to `shift` samples. - """ - def __init__(self, shift=8192): - super().__init__() - self.shift = shift - - def forward(self, wav): - batch, sources, channels, time = wav.size() - length = time - self.shift - if self.shift > 0: - if not self.training: - wav = wav[..., :length] - else: - offsets = th.randint(self.shift, [batch, sources, 1, 1], device=wav.device) - offsets = offsets.expand(-1, -1, channels, -1) - indexes = th.arange(length, device=wav.device) - wav = wav.gather(3, indexes + offsets) - return wav - - -class FlipChannels(nn.Module): - """ - Flip left-right channels. - """ - def forward(self, wav): - batch, sources, channels, time = wav.size() - if self.training and wav.size(2) == 2: - left = th.randint(2, (batch, sources, 1, 1), device=wav.device) - left = left.expand(-1, -1, -1, time) - right = 1 - left - wav = th.cat([wav.gather(2, left), wav.gather(2, right)], dim=2) - return wav - - -class FlipSign(nn.Module): - """ - Random sign flip. - """ - def forward(self, wav): - batch, sources, channels, time = wav.size() - if self.training: - signs = th.randint(2, (batch, sources, 1, 1), device=wav.device, dtype=th.float32) - wav = wav * (2 * signs - 1) - return wav - - -class Remix(nn.Module): - """ - Shuffle sources to make new mixes. - """ - def __init__(self, group_size=4): - """ - Shuffle sources within one batch. - Each batch is divided into groups of size `group_size` and shuffling is done within - each group separatly. This allow to keep the same probability distribution no matter - the number of GPUs. Without this grouping, using more GPUs would lead to a higher - probability of keeping two sources from the same track together which can impact - performance. - """ - super().__init__() - self.group_size = group_size - - def forward(self, wav): - batch, streams, channels, time = wav.size() - device = wav.device - - if self.training: - group_size = self.group_size or batch - if batch % group_size != 0: - raise ValueError(f"Batch size {batch} must be divisible by group size {group_size}") - groups = batch // group_size - wav = wav.view(groups, group_size, streams, channels, time) - permutations = th.argsort(th.rand(groups, group_size, streams, 1, 1, device=device), - dim=1) - wav = wav.gather(1, permutations.expand(-1, -1, -1, channels, time)) - wav = wav.view(batch, streams, channels, time) - return wav - - -class Scale(nn.Module): - def __init__(self, proba=1., min=0.25, max=1.25): - super().__init__() - self.proba = proba - self.min = min - self.max = max - - def forward(self, wav): - batch, streams, channels, time = wav.size() - device = wav.device - if self.training and random.random() < self.proba: - scales = th.empty(batch, streams, 1, 1, device=device).uniform_(self.min, self.max) - wav *= scales - return wav diff --git a/demucs/compressed.py b/demucs/compressed.py deleted file mode 100644 index eb8fbb75463ba71ca86729b22baebf24598ade57..0000000000000000000000000000000000000000 --- a/demucs/compressed.py +++ /dev/null @@ -1,115 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -import json -from fractions import Fraction -from concurrent import futures - -import musdb -from torch import distributed - -from .audio import AudioFile - - -def get_musdb_tracks(root, *args, **kwargs): - mus = musdb.DB(root, *args, **kwargs) - return {track.name: track.path for track in mus} - - -class StemsSet: - def __init__(self, tracks, metadata, duration=None, stride=1, - samplerate=44100, channels=2, streams=slice(None)): - - self.metadata = [] - for name, path in tracks.items(): - meta = dict(metadata[name]) - meta["path"] = path - meta["name"] = name - self.metadata.append(meta) - if duration is not None and meta["duration"] < duration: - raise ValueError(f"Track {name} duration is too small {meta['duration']}") - self.metadata.sort(key=lambda x: x["name"]) - self.duration = duration - self.stride = stride - self.channels = channels - self.samplerate = samplerate - self.streams = streams - - def __len__(self): - return sum(self._examples_count(m) for m in self.metadata) - - def _examples_count(self, meta): - if self.duration is None: - return 1 - else: - return int((meta["duration"] - self.duration) // self.stride + 1) - - def track_metadata(self, index): - for meta in self.metadata: - examples = self._examples_count(meta) - if index >= examples: - index -= examples - continue - return meta - - def __getitem__(self, index): - for meta in self.metadata: - examples = self._examples_count(meta) - if index >= examples: - index -= examples - continue - streams = AudioFile(meta["path"]).read(seek_time=index * self.stride, - duration=self.duration, - channels=self.channels, - samplerate=self.samplerate, - streams=self.streams) - return (streams - meta["mean"]) / meta["std"] - - -def _get_track_metadata(path): - # use mono at 44kHz as reference. For any other settings data won't be perfectly - # normalized but it should be good enough. - audio = AudioFile(path) - mix = audio.read(streams=0, channels=1, samplerate=44100) - return {"duration": audio.duration, "std": mix.std().item(), "mean": mix.mean().item()} - - -def _build_metadata(tracks, workers=10): - pendings = [] - with futures.ProcessPoolExecutor(workers) as pool: - for name, path in tracks.items(): - pendings.append((name, pool.submit(_get_track_metadata, path))) - return {name: p.result() for name, p in pendings} - - -def _build_musdb_metadata(path, musdb, workers): - tracks = get_musdb_tracks(musdb) - metadata = _build_metadata(tracks, workers) - path.parent.mkdir(exist_ok=True, parents=True) - json.dump(metadata, open(path, "w")) - - -def get_compressed_datasets(args, samples): - metadata_file = args.metadata / "musdb.json" - if not metadata_file.is_file() and args.rank == 0: - _build_musdb_metadata(metadata_file, args.musdb, args.workers) - if args.world_size > 1: - distributed.barrier() - metadata = json.load(open(metadata_file)) - duration = Fraction(samples, args.samplerate) - stride = Fraction(args.data_stride, args.samplerate) - train_set = StemsSet(get_musdb_tracks(args.musdb, subsets=["train"], split="train"), - metadata, - duration=duration, - stride=stride, - streams=slice(1, None), - samplerate=args.samplerate, - channels=args.audio_channels) - valid_set = StemsSet(get_musdb_tracks(args.musdb, subsets=["train"], split="valid"), - metadata, - samplerate=args.samplerate, - channels=args.audio_channels) - return train_set, valid_set diff --git a/demucs/model.py b/demucs/model.py deleted file mode 100644 index e9d932f4d014f7b95b394d2e24ed5edc379ded8d..0000000000000000000000000000000000000000 --- a/demucs/model.py +++ /dev/null @@ -1,202 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -import math - -import julius -from torch import nn - -from .utils import capture_init, center_trim - - -class BLSTM(nn.Module): - def __init__(self, dim, layers=1): - super().__init__() - self.lstm = nn.LSTM(bidirectional=True, num_layers=layers, hidden_size=dim, input_size=dim) - self.linear = nn.Linear(2 * dim, dim) - - def forward(self, x): - x = x.permute(2, 0, 1) - x = self.lstm(x)[0] - x = self.linear(x) - x = x.permute(1, 2, 0) - return x - - -def rescale_conv(conv, reference): - std = conv.weight.std().detach() - scale = (std / reference)**0.5 - conv.weight.data /= scale - if conv.bias is not None: - conv.bias.data /= scale - - -def rescale_module(module, reference): - for sub in module.modules(): - if isinstance(sub, (nn.Conv1d, nn.ConvTranspose1d)): - rescale_conv(sub, reference) - - -class Demucs(nn.Module): - @capture_init - def __init__(self, - sources, - audio_channels=2, - channels=64, - depth=6, - rewrite=True, - glu=True, - rescale=0.1, - resample=True, - kernel_size=8, - stride=4, - growth=2., - lstm_layers=2, - context=3, - normalize=False, - samplerate=44100, - segment_length=4 * 10 * 44100): - """ - Args: - sources (list[str]): list of source names - audio_channels (int): stereo or mono - channels (int): first convolution channels - depth (int): number of encoder/decoder layers - rewrite (bool): add 1x1 convolution to each encoder layer - and a convolution to each decoder layer. - For the decoder layer, `context` gives the kernel size. - glu (bool): use glu instead of ReLU - resample_input (bool): upsample x2 the input and downsample /2 the output. - rescale (int): rescale initial weights of convolutions - to get their standard deviation closer to `rescale` - kernel_size (int): kernel size for convolutions - stride (int): stride for convolutions - growth (float): multiply (resp divide) number of channels by that - for each layer of the encoder (resp decoder) - lstm_layers (int): number of lstm layers, 0 = no lstm - context (int): kernel size of the convolution in the - decoder before the transposed convolution. If > 1, - will provide some context from neighboring time - steps. - samplerate (int): stored as meta information for easing - future evaluations of the model. - segment_length (int): stored as meta information for easing - future evaluations of the model. Length of the segments on which - the model was trained. - """ - - super().__init__() - self.audio_channels = audio_channels - self.sources = sources - self.kernel_size = kernel_size - self.context = context - self.stride = stride - self.depth = depth - self.resample = resample - self.channels = channels - self.normalize = normalize - self.samplerate = samplerate - self.segment_length = segment_length - - self.encoder = nn.ModuleList() - self.decoder = nn.ModuleList() - - if glu: - activation = nn.GLU(dim=1) - ch_scale = 2 - else: - activation = nn.ReLU() - ch_scale = 1 - in_channels = audio_channels - for index in range(depth): - encode = [] - encode += [nn.Conv1d(in_channels, channels, kernel_size, stride), nn.ReLU()] - if rewrite: - encode += [nn.Conv1d(channels, ch_scale * channels, 1), activation] - self.encoder.append(nn.Sequential(*encode)) - - decode = [] - if index > 0: - out_channels = in_channels - else: - out_channels = len(self.sources) * audio_channels - if rewrite: - decode += [nn.Conv1d(channels, ch_scale * channels, context), activation] - decode += [nn.ConvTranspose1d(channels, out_channels, kernel_size, stride)] - if index > 0: - decode.append(nn.ReLU()) - self.decoder.insert(0, nn.Sequential(*decode)) - in_channels = channels - channels = int(growth * channels) - - channels = in_channels - - if lstm_layers: - self.lstm = BLSTM(channels, lstm_layers) - else: - self.lstm = None - - if rescale: - rescale_module(self, reference=rescale) - - def valid_length(self, length): - """ - Return the nearest valid length to use with the model so that - there is no time steps left over in a convolutions, e.g. for all - layers, size of the input - kernel_size % stride = 0. - - If the mixture has a valid length, the estimated sources - will have exactly the same length when context = 1. If context > 1, - the two signals can be center trimmed to match. - - For training, extracts should have a valid length.For evaluation - on full tracks we recommend passing `pad = True` to :method:`forward`. - """ - if self.resample: - length *= 2 - for _ in range(self.depth): - length = math.ceil((length - self.kernel_size) / self.stride) + 1 - length = max(1, length) - length += self.context - 1 - for _ in range(self.depth): - length = (length - 1) * self.stride + self.kernel_size - - if self.resample: - length = math.ceil(length / 2) - return int(length) - - def forward(self, mix): - x = mix - - if self.normalize: - mono = mix.mean(dim=1, keepdim=True) - mean = mono.mean(dim=-1, keepdim=True) - std = mono.std(dim=-1, keepdim=True) - else: - mean = 0 - std = 1 - - x = (x - mean) / (1e-5 + std) - - if self.resample: - x = julius.resample_frac(x, 1, 2) - - saved = [] - for encode in self.encoder: - x = encode(x) - saved.append(x) - if self.lstm: - x = self.lstm(x) - for decode in self.decoder: - skip = center_trim(saved.pop(-1), x) - x = x + skip - x = decode(x) - - if self.resample: - x = julius.resample_frac(x, 2, 1) - x = x * std + mean - x = x.view(x.size(0), len(self.sources), self.audio_channels, x.size(-1)) - return x diff --git a/demucs/parser.py b/demucs/parser.py deleted file mode 100644 index 4e8a19cf976e3c6dfe411da64b8dce3e9a4548e0..0000000000000000000000000000000000000000 --- a/demucs/parser.py +++ /dev/null @@ -1,244 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -import argparse -import os -from pathlib import Path - - -def get_parser(): - parser = argparse.ArgumentParser("demucs", description="Train and evaluate Demucs.") - default_raw = None - default_musdb = None - if 'DEMUCS_RAW' in os.environ: - default_raw = Path(os.environ['DEMUCS_RAW']) - if 'DEMUCS_MUSDB' in os.environ: - default_musdb = Path(os.environ['DEMUCS_MUSDB']) - parser.add_argument( - "--raw", - type=Path, - default=default_raw, - help="Path to raw audio, can be faster, see python3 -m demucs.raw to extract.") - parser.add_argument("--no_raw", action="store_const", const=None, dest="raw") - parser.add_argument("-m", - "--musdb", - type=Path, - default=default_musdb, - help="Path to musdb root") - parser.add_argument("--is_wav", action="store_true", - help="Indicate that the MusDB dataset is in wav format (i.e. MusDB-HQ).") - parser.add_argument("--metadata", type=Path, default=Path("metadata/"), - help="Folder where metadata information is stored.") - parser.add_argument("--wav", type=Path, - help="Path to a wav dataset. This should contain a 'train' and a 'valid' " - "subfolder.") - parser.add_argument("--samplerate", type=int, default=44100) - parser.add_argument("--audio_channels", type=int, default=2) - parser.add_argument("--samples", - default=44100 * 10, - type=int, - help="number of samples to feed in") - parser.add_argument("--data_stride", - default=44100, - type=int, - help="Stride for chunks, shorter = longer epochs") - parser.add_argument("-w", "--workers", default=10, type=int, help="Loader workers") - parser.add_argument("--eval_workers", default=2, type=int, help="Final evaluation workers") - parser.add_argument("-d", - "--device", - help="Device to train on, default is cuda if available else cpu") - parser.add_argument("--eval_cpu", action="store_true", help="Eval on test will be run on cpu.") - parser.add_argument("--dummy", help="Dummy parameter, useful to create a new checkpoint file") - parser.add_argument("--test", help="Just run the test pipeline + one validation. " - "This should be a filename relative to the models/ folder.") - parser.add_argument("--test_pretrained", help="Just run the test pipeline + one validation, " - "on a pretrained model. ") - - parser.add_argument("--rank", default=0, type=int) - parser.add_argument("--world_size", default=1, type=int) - parser.add_argument("--master") - - parser.add_argument("--checkpoints", - type=Path, - default=Path("checkpoints"), - help="Folder where to store checkpoints etc") - parser.add_argument("--evals", - type=Path, - default=Path("evals"), - help="Folder where to store evals and waveforms") - parser.add_argument("--save", - action="store_true", - help="Save estimated for the test set waveforms") - parser.add_argument("--logs", - type=Path, - default=Path("logs"), - help="Folder where to store logs") - parser.add_argument("--models", - type=Path, - default=Path("models"), - help="Folder where to store trained models") - parser.add_argument("-R", - "--restart", - action='store_true', - help='Restart training, ignoring previous run') - - parser.add_argument("--seed", type=int, default=42) - parser.add_argument("-e", "--epochs", type=int, default=180, help="Number of epochs") - parser.add_argument("-r", - "--repeat", - type=int, - default=2, - help="Repeat the train set, longer epochs") - parser.add_argument("-b", "--batch_size", type=int, default=64) - parser.add_argument("--lr", type=float, default=3e-4) - parser.add_argument("--mse", action="store_true", help="Use MSE instead of L1") - parser.add_argument("--init", help="Initialize from a pre-trained model.") - - # Augmentation options - parser.add_argument("--no_augment", - action="store_false", - dest="augment", - default=True, - help="No basic data augmentation.") - parser.add_argument("--repitch", type=float, default=0.2, - help="Probability to do tempo/pitch change") - parser.add_argument("--max_tempo", type=float, default=12, - help="Maximum relative tempo change in %% when using repitch.") - - parser.add_argument("--remix_group_size", - type=int, - default=4, - help="Shuffle sources using group of this size. Useful to somewhat " - "replicate multi-gpu training " - "on less GPUs.") - parser.add_argument("--shifts", - type=int, - default=10, - help="Number of random shifts used for the shift trick.") - parser.add_argument("--overlap", - type=float, - default=0.25, - help="Overlap when --split_valid is passed.") - - # See model.py for doc - parser.add_argument("--growth", - type=float, - default=2., - help="Number of channels between two layers will increase by this factor") - parser.add_argument("--depth", - type=int, - default=6, - help="Number of layers for the encoder and decoder") - parser.add_argument("--lstm_layers", type=int, default=2, help="Number of layers for the LSTM") - parser.add_argument("--channels", - type=int, - default=64, - help="Number of channels for the first encoder layer") - parser.add_argument("--kernel_size", - type=int, - default=8, - help="Kernel size for the (transposed) convolutions") - parser.add_argument("--conv_stride", - type=int, - default=4, - help="Stride for the (transposed) convolutions") - parser.add_argument("--context", - type=int, - default=3, - help="Context size for the decoder convolutions " - "before the transposed convolutions") - parser.add_argument("--rescale", - type=float, - default=0.1, - help="Initial weight rescale reference") - parser.add_argument("--no_resample", action="store_false", - default=True, dest="resample", - help="No Resampling of the input/output x2") - parser.add_argument("--no_glu", - action="store_false", - default=True, - dest="glu", - help="Replace all GLUs by ReLUs") - parser.add_argument("--no_rewrite", - action="store_false", - default=True, - dest="rewrite", - help="No 1x1 rewrite convolutions") - parser.add_argument("--normalize", action="store_true") - parser.add_argument("--no_norm_wav", action="store_false", dest='norm_wav', default=True) - - # Tasnet options - parser.add_argument("--tasnet", action="store_true") - parser.add_argument("--split_valid", - action="store_true", - help="Predict chunks by chunks for valid and test. Required for tasnet") - parser.add_argument("--X", type=int, default=8) - - # Other options - parser.add_argument("--show", - action="store_true", - help="Show model architecture, size and exit") - parser.add_argument("--save_model", action="store_true", - help="Skip traning, just save final model " - "for the current checkpoint value.") - parser.add_argument("--save_state", - help="Skip training, just save state " - "for the current checkpoint value. You should " - "provide a model name as argument.") - - # Quantization options - parser.add_argument("--q-min-size", type=float, default=1, - help="Only quantize layers over this size (in MB)") - parser.add_argument( - "--qat", type=int, help="If provided, use QAT training with that many bits.") - - parser.add_argument("--diffq", type=float, default=0) - parser.add_argument( - "--ms-target", type=float, default=162, - help="Model size target in MB, when using DiffQ. Best model will be kept " - "only if it is smaller than this target.") - - return parser - - -def get_name(parser, args): - """ - Return the name of an experiment given the args. Some parameters are ignored, - for instance --workers, as they do not impact the final result. - """ - ignore_args = set([ - "checkpoints", - "deterministic", - "eval", - "evals", - "eval_cpu", - "eval_workers", - "logs", - "master", - "rank", - "restart", - "save", - "save_model", - "save_state", - "show", - "workers", - "world_size", - ]) - parts = [] - name_args = dict(args.__dict__) - for name, value in name_args.items(): - if name in ignore_args: - continue - if value != parser.get_default(name): - if isinstance(value, Path): - parts.append(f"{name}={value.name}") - else: - parts.append(f"{name}={value}") - if parts: - name = " ".join(parts) - else: - name = "default" - return name diff --git a/demucs/pretrained.py b/demucs/pretrained.py deleted file mode 100644 index 6aac5db100cc7a9084af96d2cd083f0c8fac473c..0000000000000000000000000000000000000000 --- a/demucs/pretrained.py +++ /dev/null @@ -1,107 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. -# author: adefossez - -import logging - -from diffq import DiffQuantizer -import torch.hub - -from .model import Demucs -from .tasnet import ConvTasNet -from .utils import set_state - -logger = logging.getLogger(__name__) -ROOT = "https://dl.fbaipublicfiles.com/demucs/v3.0/" - -PRETRAINED_MODELS = { - 'demucs': 'e07c671f', - 'demucs48_hq': '28a1282c', - 'demucs_extra': '3646af93', - 'demucs_quantized': '07afea75', - 'tasnet': 'beb46fac', - 'tasnet_extra': 'df3777b2', - 'demucs_unittest': '09ebc15f', -} - -SOURCES = ["drums", "bass", "other", "vocals"] - - -def get_url(name): - sig = PRETRAINED_MODELS[name] - return ROOT + name + "-" + sig[:8] + ".th" - - -def is_pretrained(name): - return name in PRETRAINED_MODELS - - -def load_pretrained(name): - if name == "demucs": - return demucs(pretrained=True) - elif name == "demucs48_hq": - return demucs(pretrained=True, hq=True, channels=48) - elif name == "demucs_extra": - return demucs(pretrained=True, extra=True) - elif name == "demucs_quantized": - return demucs(pretrained=True, quantized=True) - elif name == "demucs_unittest": - return demucs_unittest(pretrained=True) - elif name == "tasnet": - return tasnet(pretrained=True) - elif name == "tasnet_extra": - return tasnet(pretrained=True, extra=True) - else: - raise ValueError(f"Invalid pretrained name {name}") - - -def _load_state(name, model, quantizer=None): - url = get_url(name) - state = torch.hub.load_state_dict_from_url(url, map_location='cpu', check_hash=True) - set_state(model, quantizer, state) - if quantizer: - quantizer.detach() - - -def demucs_unittest(pretrained=True): - model = Demucs(channels=4, sources=SOURCES) - if pretrained: - _load_state('demucs_unittest', model) - return model - - -def demucs(pretrained=True, extra=False, quantized=False, hq=False, channels=64): - if not pretrained and (extra or quantized or hq): - raise ValueError("if extra or quantized is True, pretrained must be True.") - model = Demucs(sources=SOURCES, channels=channels) - if pretrained: - name = 'demucs' - if channels != 64: - name += str(channels) - quantizer = None - if sum([extra, quantized, hq]) > 1: - raise ValueError("Only one of extra, quantized, hq, can be True.") - if quantized: - quantizer = DiffQuantizer(model, group_size=8, min_size=1) - name += '_quantized' - if extra: - name += '_extra' - if hq: - name += '_hq' - _load_state(name, model, quantizer) - return model - - -def tasnet(pretrained=True, extra=False): - if not pretrained and extra: - raise ValueError("if extra is True, pretrained must be True.") - model = ConvTasNet(X=10, sources=SOURCES) - if pretrained: - name = 'tasnet' - if extra: - name = 'tasnet_extra' - _load_state(name, model) - return model diff --git a/demucs/raw.py b/demucs/raw.py deleted file mode 100644 index d4941ad2d7ed858f490db441f5b46b12bd61ad78..0000000000000000000000000000000000000000 --- a/demucs/raw.py +++ /dev/null @@ -1,173 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -import argparse -import os -from collections import defaultdict, namedtuple -from pathlib import Path - -import musdb -import numpy as np -import torch as th -import tqdm -from torch.utils.data import DataLoader - -from .audio import AudioFile - -ChunkInfo = namedtuple("ChunkInfo", ["file_index", "offset", "local_index"]) - - -class Rawset: - """ - Dataset of raw, normalized, float32 audio files - """ - def __init__(self, path, samples=None, stride=None, channels=2, streams=None): - self.path = Path(path) - self.channels = channels - self.samples = samples - if stride is None: - stride = samples if samples is not None else 0 - self.stride = stride - entries = defaultdict(list) - for root, folders, files in os.walk(self.path, followlinks=True): - folders.sort() - files.sort() - for file in files: - if file.endswith(".raw"): - path = Path(root) / file - name, stream = path.stem.rsplit('.', 1) - entries[(path.parent.relative_to(self.path), name)].append(int(stream)) - - self._entries = list(entries.keys()) - - sizes = [] - self._lengths = [] - ref_streams = sorted(entries[self._entries[0]]) - assert ref_streams == list(range(len(ref_streams))) - if streams is None: - self.streams = ref_streams - else: - self.streams = streams - for entry in sorted(entries.keys()): - streams = entries[entry] - assert sorted(streams) == ref_streams - file = self._path(*entry) - length = file.stat().st_size // (4 * channels) - if samples is None: - sizes.append(1) - else: - if length < samples: - self._entries.remove(entry) - continue - sizes.append((length - samples) // stride + 1) - self._lengths.append(length) - if not sizes: - raise ValueError(f"Empty dataset {self.path}") - self._cumulative_sizes = np.cumsum(sizes) - self._sizes = sizes - - def __len__(self): - return self._cumulative_sizes[-1] - - @property - def total_length(self): - return sum(self._lengths) - - def chunk_info(self, index): - file_index = np.searchsorted(self._cumulative_sizes, index, side='right') - if file_index == 0: - local_index = index - else: - local_index = index - self._cumulative_sizes[file_index - 1] - return ChunkInfo(offset=local_index * self.stride, - file_index=file_index, - local_index=local_index) - - def _path(self, folder, name, stream=0): - return self.path / folder / (name + f'.{stream}.raw') - - def __getitem__(self, index): - chunk = self.chunk_info(index) - entry = self._entries[chunk.file_index] - - length = self.samples or self._lengths[chunk.file_index] - streams = [] - to_read = length * self.channels * 4 - for stream_index, stream in enumerate(self.streams): - offset = chunk.offset * 4 * self.channels - file = open(self._path(*entry, stream=stream), 'rb') - file.seek(offset) - content = file.read(to_read) - assert len(content) == to_read - content = np.frombuffer(content, dtype=np.float32) - content = content.copy() # make writable - streams.append(th.from_numpy(content).view(length, self.channels).t()) - return th.stack(streams, dim=0) - - def name(self, index): - chunk = self.chunk_info(index) - folder, name = self._entries[chunk.file_index] - return folder / name - - -class MusDBSet: - def __init__(self, mus, streams=slice(None), samplerate=44100, channels=2): - self.mus = mus - self.streams = streams - self.samplerate = samplerate - self.channels = channels - - def __len__(self): - return len(self.mus.tracks) - - def __getitem__(self, index): - track = self.mus.tracks[index] - return (track.name, AudioFile(track.path).read(channels=self.channels, - seek_time=0, - streams=self.streams, - samplerate=self.samplerate)) - - -def build_raw(mus, destination, normalize, workers, samplerate, channels): - destination.mkdir(parents=True, exist_ok=True) - loader = DataLoader(MusDBSet(mus, channels=channels, samplerate=samplerate), - batch_size=1, - num_workers=workers, - collate_fn=lambda x: x[0]) - for name, streams in tqdm.tqdm(loader): - if normalize: - ref = streams[0].mean(dim=0) # use mono mixture as reference - streams = (streams - ref.mean()) / ref.std() - for index, stream in enumerate(streams): - open(destination / (name + f'.{index}.raw'), "wb").write(stream.t().numpy().tobytes()) - - -def main(): - parser = argparse.ArgumentParser('rawset') - parser.add_argument('--workers', type=int, default=10) - parser.add_argument('--samplerate', type=int, default=44100) - parser.add_argument('--channels', type=int, default=2) - parser.add_argument('musdb', type=Path) - parser.add_argument('destination', type=Path) - - args = parser.parse_args() - - build_raw(musdb.DB(root=args.musdb, subsets=["train"], split="train"), - args.destination / "train", - normalize=True, - channels=args.channels, - samplerate=args.samplerate, - workers=args.workers) - build_raw(musdb.DB(root=args.musdb, subsets=["train"], split="valid"), - args.destination / "valid", - normalize=True, - samplerate=args.samplerate, - channels=args.channels, - workers=args.workers) - - -if __name__ == "__main__": - main() diff --git a/demucs/repitch.py b/demucs/repitch.py deleted file mode 100644 index 8846ab2d951a024c95067f66a113968500442828..0000000000000000000000000000000000000000 --- a/demucs/repitch.py +++ /dev/null @@ -1,96 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -import io -import random -import subprocess as sp -import tempfile - -import numpy as np -import torch -from scipy.io import wavfile - - -def i16_pcm(wav): - if wav.dtype == np.int16: - return wav - return (wav * 2**15).clamp_(-2**15, 2**15 - 1).short() - - -def f32_pcm(wav): - if wav.dtype == np.float: - return wav - return wav.float() / 2**15 - - -class RepitchedWrapper: - """ - Wrap a dataset to apply online change of pitch / tempo. - """ - def __init__(self, dataset, proba=0.2, max_pitch=2, max_tempo=12, tempo_std=5, vocals=[3]): - self.dataset = dataset - self.proba = proba - self.max_pitch = max_pitch - self.max_tempo = max_tempo - self.tempo_std = tempo_std - self.vocals = vocals - - def __len__(self): - return len(self.dataset) - - def __getitem__(self, index): - streams = self.dataset[index] - in_length = streams.shape[-1] - out_length = int((1 - 0.01 * self.max_tempo) * in_length) - - if random.random() < self.proba: - delta_pitch = random.randint(-self.max_pitch, self.max_pitch) - delta_tempo = random.gauss(0, self.tempo_std) - delta_tempo = min(max(-self.max_tempo, delta_tempo), self.max_tempo) - outs = [] - for idx, stream in enumerate(streams): - stream = repitch( - stream, - delta_pitch, - delta_tempo, - voice=idx in self.vocals) - outs.append(stream[:, :out_length]) - streams = torch.stack(outs) - else: - streams = streams[..., :out_length] - return streams - - -def repitch(wav, pitch, tempo, voice=False, quick=False, samplerate=44100): - """ - tempo is a relative delta in percentage, so tempo=10 means tempo at 110%! - pitch is in semi tones. - Requires `soundstretch` to be installed, see - https://www.surina.net/soundtouch/soundstretch.html - """ - outfile = tempfile.NamedTemporaryFile(suffix=".wav") - in_ = io.BytesIO() - wavfile.write(in_, samplerate, i16_pcm(wav).t().numpy()) - command = [ - "soundstretch", - "stdin", - outfile.name, - f"-pitch={pitch}", - f"-tempo={tempo:.6f}", - ] - if quick: - command += ["-quick"] - if voice: - command += ["-speech"] - try: - sp.run(command, capture_output=True, input=in_.getvalue(), check=True) - except sp.CalledProcessError as error: - raise RuntimeError(f"Could not change bpm because {error.stderr.decode('utf-8')}") - sr, wav = wavfile.read(outfile.name) - wav = wav.copy() - wav = f32_pcm(torch.from_numpy(wav).t()) - assert sr == samplerate - return wav diff --git a/demucs/separate.py b/demucs/separate.py deleted file mode 100644 index 3fc7af9e711978b3e21398aa6f1deb9ae87dd370..0000000000000000000000000000000000000000 --- a/demucs/separate.py +++ /dev/null @@ -1,185 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -import argparse -import sys -from pathlib import Path -import subprocess - -import julius -import torch as th -import torchaudio as ta - -from .audio import AudioFile, convert_audio_channels -from .pretrained import is_pretrained, load_pretrained -from .utils import apply_model, load_model - - -def load_track(track, device, audio_channels, samplerate): - errors = {} - wav = None - - try: - wav = AudioFile(track).read( - streams=0, - samplerate=samplerate, - channels=audio_channels).to(device) - except FileNotFoundError: - errors['ffmpeg'] = 'Ffmpeg is not installed.' - except subprocess.CalledProcessError: - errors['ffmpeg'] = 'FFmpeg could not read the file.' - - if wav is None: - try: - wav, sr = ta.load(str(track)) - except RuntimeError as err: - errors['torchaudio'] = err.args[0] - else: - wav = convert_audio_channels(wav, audio_channels) - wav = wav.to(device) - wav = julius.resample_frac(wav, sr, samplerate) - - if wav is None: - print(f"Could not load file {track}. " - "Maybe it is not a supported file format? ") - for backend, error in errors.items(): - print(f"When trying to load using {backend}, got the following error: {error}") - sys.exit(1) - return wav - - -def encode_mp3(wav, path, bitrate=320, samplerate=44100, channels=2, verbose=False): - try: - import lameenc - except ImportError: - print("Failed to call lame encoder. Maybe it is not installed? " - "On windows, run `python.exe -m pip install -U lameenc`, " - "on OSX/Linux, run `python3 -m pip install -U lameenc`, " - "then try again.", file=sys.stderr) - sys.exit(1) - encoder = lameenc.Encoder() - encoder.set_bit_rate(bitrate) - encoder.set_in_sample_rate(samplerate) - encoder.set_channels(channels) - encoder.set_quality(2) # 2-highest, 7-fastest - if not verbose: - encoder.silence() - wav = wav.transpose(0, 1).numpy() - mp3_data = encoder.encode(wav.tobytes()) - mp3_data += encoder.flush() - with open(path, "wb") as f: - f.write(mp3_data) - - -def main(): - parser = argparse.ArgumentParser("demucs.separate", - description="Separate the sources for the given tracks") - parser.add_argument("tracks", nargs='+', type=Path, default=[], help='Path to tracks') - parser.add_argument("-n", - "--name", - default="demucs_quantized", - help="Model name. See README.md for the list of pretrained models. " - "Default is demucs_quantized.") - parser.add_argument("-v", "--verbose", action="store_true") - parser.add_argument("-o", - "--out", - type=Path, - default=Path("separated"), - help="Folder where to put extracted tracks. A subfolder " - "with the model name will be created.") - parser.add_argument("--models", - type=Path, - default=Path("models"), - help="Path to trained models. " - "Also used to store downloaded pretrained models") - parser.add_argument("-d", - "--device", - default="cuda" if th.cuda.is_available() else "cpu", - help="Device to use, default is cuda if available else cpu") - parser.add_argument("--shifts", - default=0, - type=int, - help="Number of random shifts for equivariant stabilization." - "Increase separation time but improves quality for Demucs. 10 was used " - "in the original paper.") - parser.add_argument("--overlap", - default=0.25, - type=float, - help="Overlap between the splits.") - parser.add_argument("--no-split", - action="store_false", - dest="split", - default=True, - help="Doesn't split audio in chunks. This can use large amounts of memory.") - parser.add_argument("--float32", - action="store_true", - help="Convert the output wavefile to use pcm f32 format instead of s16. " - "This should not make a difference if you just plan on listening to the " - "audio but might be needed to compute exactly metrics like SDR etc.") - parser.add_argument("--int16", - action="store_false", - dest="float32", - help="Opposite of --float32, here for compatibility.") - parser.add_argument("--mp3", action="store_true", - help="Convert the output wavs to mp3.") - parser.add_argument("--mp3-bitrate", - default=320, - type=int, - help="Bitrate of converted mp3.") - - args = parser.parse_args() - name = args.name + ".th" - model_path = args.models / name - if model_path.is_file(): - model = load_model(model_path) - else: - if is_pretrained(args.name): - model = load_pretrained(args.name) - else: - print(f"No pre-trained model {args.name}", file=sys.stderr) - sys.exit(1) - model.to(args.device) - - out = args.out / args.name - out.mkdir(parents=True, exist_ok=True) - print(f"Separated tracks will be stored in {out.resolve()}") - for track in args.tracks: - if not track.exists(): - print( - f"File {track} does not exist. If the path contains spaces, " - "please try again after surrounding the entire path with quotes \"\".", - file=sys.stderr) - continue - print(f"Separating track {track}") - wav = load_track(track, args.device, model.audio_channels, model.samplerate) - - ref = wav.mean(0) - wav = (wav - ref.mean()) / ref.std() - sources = apply_model(model, wav, shifts=args.shifts, split=args.split, - overlap=args.overlap, progress=True) - sources = sources * ref.std() + ref.mean() - - track_folder = out / track.name.rsplit(".", 1)[0] - track_folder.mkdir(exist_ok=True) - for source, name in zip(sources, model.sources): - source = source / max(1.01 * source.abs().max(), 1) - if args.mp3 or not args.float32: - source = (source * 2**15).clamp_(-2**15, 2**15 - 1).short() - source = source.cpu() - stem = str(track_folder / name) - if args.mp3: - encode_mp3(source, stem + ".mp3", - bitrate=args.mp3_bitrate, - samplerate=model.samplerate, - channels=model.audio_channels, - verbose=args.verbose) - else: - wavname = str(track_folder / f"{name}.wav") - ta.save(wavname, source, sample_rate=model.samplerate) - - -if __name__ == "__main__": - main() diff --git a/demucs/tasnet.py b/demucs/tasnet.py deleted file mode 100644 index ecc1257925ea8f4fbe389ddd6d73ce9fdf45f6d4..0000000000000000000000000000000000000000 --- a/demucs/tasnet.py +++ /dev/null @@ -1,452 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. -# -# Created on 2018/12 -# Author: Kaituo XU -# Modified on 2019/11 by Alexandre Defossez, added support for multiple output channels -# Here is the original license: -# The MIT License (MIT) -# -# Copyright (c) 2018 Kaituo XU -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -import math - -import torch -import torch.nn as nn -import torch.nn.functional as F - -from .utils import capture_init - -EPS = 1e-8 - - -def overlap_and_add(signal, frame_step): - outer_dimensions = signal.size()[:-2] - frames, frame_length = signal.size()[-2:] - - subframe_length = math.gcd(frame_length, frame_step) # gcd=Greatest Common Divisor - subframe_step = frame_step // subframe_length - subframes_per_frame = frame_length // subframe_length - output_size = frame_step * (frames - 1) + frame_length - output_subframes = output_size // subframe_length - - subframe_signal = signal.view(*outer_dimensions, -1, subframe_length) - - frame = torch.arange(0, output_subframes, - device=signal.device).unfold(0, subframes_per_frame, subframe_step) - frame = frame.long() # signal may in GPU or CPU - frame = frame.contiguous().view(-1) - - result = signal.new_zeros(*outer_dimensions, output_subframes, subframe_length) - result.index_add_(-2, frame, subframe_signal) - result = result.view(*outer_dimensions, -1) - return result - - -class ConvTasNet(nn.Module): - @capture_init - def __init__(self, - sources, - N=256, - L=20, - B=256, - H=512, - P=3, - X=8, - R=4, - audio_channels=2, - norm_type="gLN", - causal=False, - mask_nonlinear='relu', - samplerate=44100, - segment_length=44100 * 2 * 4): - """ - Args: - sources: list of sources - N: Number of filters in autoencoder - L: Length of the filters (in samples) - B: Number of channels in bottleneck 1 × 1-conv block - H: Number of channels in convolutional blocks - P: Kernel size in convolutional blocks - X: Number of convolutional blocks in each repeat - R: Number of repeats - norm_type: BN, gLN, cLN - causal: causal or non-causal - mask_nonlinear: use which non-linear function to generate mask - """ - super(ConvTasNet, self).__init__() - # Hyper-parameter - self.sources = sources - self.C = len(sources) - self.N, self.L, self.B, self.H, self.P, self.X, self.R = N, L, B, H, P, X, R - self.norm_type = norm_type - self.causal = causal - self.mask_nonlinear = mask_nonlinear - self.audio_channels = audio_channels - self.samplerate = samplerate - self.segment_length = segment_length - # Components - self.encoder = Encoder(L, N, audio_channels) - self.separator = TemporalConvNet( - N, B, H, P, X, R, self.C, norm_type, causal, mask_nonlinear) - self.decoder = Decoder(N, L, audio_channels) - # init - for p in self.parameters(): - if p.dim() > 1: - nn.init.xavier_normal_(p) - - def valid_length(self, length): - return length - - def forward(self, mixture): - """ - Args: - mixture: [M, T], M is batch size, T is #samples - Returns: - est_source: [M, C, T] - """ - mixture_w = self.encoder(mixture) - est_mask = self.separator(mixture_w) - est_source = self.decoder(mixture_w, est_mask) - - # T changed after conv1d in encoder, fix it here - T_origin = mixture.size(-1) - T_conv = est_source.size(-1) - est_source = F.pad(est_source, (0, T_origin - T_conv)) - return est_source - - -class Encoder(nn.Module): - """Estimation of the nonnegative mixture weight by a 1-D conv layer. - """ - def __init__(self, L, N, audio_channels): - super(Encoder, self).__init__() - # Hyper-parameter - self.L, self.N = L, N - # Components - # 50% overlap - self.conv1d_U = nn.Conv1d(audio_channels, N, kernel_size=L, stride=L // 2, bias=False) - - def forward(self, mixture): - """ - Args: - mixture: [M, T], M is batch size, T is #samples - Returns: - mixture_w: [M, N, K], where K = (T-L)/(L/2)+1 = 2T/L-1 - """ - mixture_w = F.relu(self.conv1d_U(mixture)) # [M, N, K] - return mixture_w - - -class Decoder(nn.Module): - def __init__(self, N, L, audio_channels): - super(Decoder, self).__init__() - # Hyper-parameter - self.N, self.L = N, L - self.audio_channels = audio_channels - # Components - self.basis_signals = nn.Linear(N, audio_channels * L, bias=False) - - def forward(self, mixture_w, est_mask): - """ - Args: - mixture_w: [M, N, K] - est_mask: [M, C, N, K] - Returns: - est_source: [M, C, T] - """ - # D = W * M - source_w = torch.unsqueeze(mixture_w, 1) * est_mask # [M, C, N, K] - source_w = torch.transpose(source_w, 2, 3) # [M, C, K, N] - # S = DV - est_source = self.basis_signals(source_w) # [M, C, K, ac * L] - m, c, k, _ = est_source.size() - est_source = est_source.view(m, c, k, self.audio_channels, -1).transpose(2, 3).contiguous() - est_source = overlap_and_add(est_source, self.L // 2) # M x C x ac x T - return est_source - - -class TemporalConvNet(nn.Module): - def __init__(self, N, B, H, P, X, R, C, norm_type="gLN", causal=False, mask_nonlinear='relu'): - """ - Args: - N: Number of filters in autoencoder - B: Number of channels in bottleneck 1 × 1-conv block - H: Number of channels in convolutional blocks - P: Kernel size in convolutional blocks - X: Number of convolutional blocks in each repeat - R: Number of repeats - C: Number of speakers - norm_type: BN, gLN, cLN - causal: causal or non-causal - mask_nonlinear: use which non-linear function to generate mask - """ - super(TemporalConvNet, self).__init__() - # Hyper-parameter - self.C = C - self.mask_nonlinear = mask_nonlinear - # Components - # [M, N, K] -> [M, N, K] - layer_norm = ChannelwiseLayerNorm(N) - # [M, N, K] -> [M, B, K] - bottleneck_conv1x1 = nn.Conv1d(N, B, 1, bias=False) - # [M, B, K] -> [M, B, K] - repeats = [] - for r in range(R): - blocks = [] - for x in range(X): - dilation = 2**x - padding = (P - 1) * dilation if causal else (P - 1) * dilation // 2 - blocks += [ - TemporalBlock(B, - H, - P, - stride=1, - padding=padding, - dilation=dilation, - norm_type=norm_type, - causal=causal) - ] - repeats += [nn.Sequential(*blocks)] - temporal_conv_net = nn.Sequential(*repeats) - # [M, B, K] -> [M, C*N, K] - mask_conv1x1 = nn.Conv1d(B, C * N, 1, bias=False) - # Put together - self.network = nn.Sequential(layer_norm, bottleneck_conv1x1, temporal_conv_net, - mask_conv1x1) - - def forward(self, mixture_w): - """ - Keep this API same with TasNet - Args: - mixture_w: [M, N, K], M is batch size - returns: - est_mask: [M, C, N, K] - """ - M, N, K = mixture_w.size() - score = self.network(mixture_w) # [M, N, K] -> [M, C*N, K] - score = score.view(M, self.C, N, K) # [M, C*N, K] -> [M, C, N, K] - if self.mask_nonlinear == 'softmax': - est_mask = F.softmax(score, dim=1) - elif self.mask_nonlinear == 'relu': - est_mask = F.relu(score) - else: - raise ValueError("Unsupported mask non-linear function") - return est_mask - - -class TemporalBlock(nn.Module): - def __init__(self, - in_channels, - out_channels, - kernel_size, - stride, - padding, - dilation, - norm_type="gLN", - causal=False): - super(TemporalBlock, self).__init__() - # [M, B, K] -> [M, H, K] - conv1x1 = nn.Conv1d(in_channels, out_channels, 1, bias=False) - prelu = nn.PReLU() - norm = chose_norm(norm_type, out_channels) - # [M, H, K] -> [M, B, K] - dsconv = DepthwiseSeparableConv(out_channels, in_channels, kernel_size, stride, padding, - dilation, norm_type, causal) - # Put together - self.net = nn.Sequential(conv1x1, prelu, norm, dsconv) - - def forward(self, x): - """ - Args: - x: [M, B, K] - Returns: - [M, B, K] - """ - residual = x - out = self.net(x) - # TODO: when P = 3 here works fine, but when P = 2 maybe need to pad? - return out + residual # look like w/o F.relu is better than w/ F.relu - # return F.relu(out + residual) - - -class DepthwiseSeparableConv(nn.Module): - def __init__(self, - in_channels, - out_channels, - kernel_size, - stride, - padding, - dilation, - norm_type="gLN", - causal=False): - super(DepthwiseSeparableConv, self).__init__() - # Use `groups` option to implement depthwise convolution - # [M, H, K] -> [M, H, K] - depthwise_conv = nn.Conv1d(in_channels, - in_channels, - kernel_size, - stride=stride, - padding=padding, - dilation=dilation, - groups=in_channels, - bias=False) - if causal: - chomp = Chomp1d(padding) - prelu = nn.PReLU() - norm = chose_norm(norm_type, in_channels) - # [M, H, K] -> [M, B, K] - pointwise_conv = nn.Conv1d(in_channels, out_channels, 1, bias=False) - # Put together - if causal: - self.net = nn.Sequential(depthwise_conv, chomp, prelu, norm, pointwise_conv) - else: - self.net = nn.Sequential(depthwise_conv, prelu, norm, pointwise_conv) - - def forward(self, x): - """ - Args: - x: [M, H, K] - Returns: - result: [M, B, K] - """ - return self.net(x) - - -class Chomp1d(nn.Module): - """To ensure the output length is the same as the input. - """ - def __init__(self, chomp_size): - super(Chomp1d, self).__init__() - self.chomp_size = chomp_size - - def forward(self, x): - """ - Args: - x: [M, H, Kpad] - Returns: - [M, H, K] - """ - return x[:, :, :-self.chomp_size].contiguous() - - -def chose_norm(norm_type, channel_size): - """The input of normlization will be (M, C, K), where M is batch size, - C is channel size and K is sequence length. - """ - if norm_type == "gLN": - return GlobalLayerNorm(channel_size) - elif norm_type == "cLN": - return ChannelwiseLayerNorm(channel_size) - elif norm_type == "id": - return nn.Identity() - else: # norm_type == "BN": - # Given input (M, C, K), nn.BatchNorm1d(C) will accumulate statics - # along M and K, so this BN usage is right. - return nn.BatchNorm1d(channel_size) - - -# TODO: Use nn.LayerNorm to impl cLN to speed up -class ChannelwiseLayerNorm(nn.Module): - """Channel-wise Layer Normalization (cLN)""" - def __init__(self, channel_size): - super(ChannelwiseLayerNorm, self).__init__() - self.gamma = nn.Parameter(torch.Tensor(1, channel_size, 1)) # [1, N, 1] - self.beta = nn.Parameter(torch.Tensor(1, channel_size, 1)) # [1, N, 1] - self.reset_parameters() - - def reset_parameters(self): - self.gamma.data.fill_(1) - self.beta.data.zero_() - - def forward(self, y): - """ - Args: - y: [M, N, K], M is batch size, N is channel size, K is length - Returns: - cLN_y: [M, N, K] - """ - mean = torch.mean(y, dim=1, keepdim=True) # [M, 1, K] - var = torch.var(y, dim=1, keepdim=True, unbiased=False) # [M, 1, K] - cLN_y = self.gamma * (y - mean) / torch.pow(var + EPS, 0.5) + self.beta - return cLN_y - - -class GlobalLayerNorm(nn.Module): - """Global Layer Normalization (gLN)""" - def __init__(self, channel_size): - super(GlobalLayerNorm, self).__init__() - self.gamma = nn.Parameter(torch.Tensor(1, channel_size, 1)) # [1, N, 1] - self.beta = nn.Parameter(torch.Tensor(1, channel_size, 1)) # [1, N, 1] - self.reset_parameters() - - def reset_parameters(self): - self.gamma.data.fill_(1) - self.beta.data.zero_() - - def forward(self, y): - """ - Args: - y: [M, N, K], M is batch size, N is channel size, K is length - Returns: - gLN_y: [M, N, K] - """ - # TODO: in torch 1.0, torch.mean() support dim list - mean = y.mean(dim=1, keepdim=True).mean(dim=2, keepdim=True) # [M, 1, 1] - var = (torch.pow(y - mean, 2)).mean(dim=1, keepdim=True).mean(dim=2, keepdim=True) - gLN_y = self.gamma * (y - mean) / torch.pow(var + EPS, 0.5) + self.beta - return gLN_y - - -if __name__ == "__main__": - torch.manual_seed(123) - M, N, L, T = 2, 3, 4, 12 - K = 2 * T // L - 1 - B, H, P, X, R, C, norm_type, causal = 2, 3, 3, 3, 2, 2, "gLN", False - mixture = torch.randint(3, (M, T)) - # test Encoder - encoder = Encoder(L, N) - encoder.conv1d_U.weight.data = torch.randint(2, encoder.conv1d_U.weight.size()) - mixture_w = encoder(mixture) - print('mixture', mixture) - print('U', encoder.conv1d_U.weight) - print('mixture_w', mixture_w) - print('mixture_w size', mixture_w.size()) - - # test TemporalConvNet - separator = TemporalConvNet(N, B, H, P, X, R, C, norm_type=norm_type, causal=causal) - est_mask = separator(mixture_w) - print('est_mask', est_mask) - - # test Decoder - decoder = Decoder(N, L) - est_mask = torch.randint(2, (B, K, C, N)) - est_source = decoder(mixture_w, est_mask) - print('est_source', est_source) - - # test Conv-TasNet - conv_tasnet = ConvTasNet(N, L, B, H, P, X, R, C, norm_type=norm_type) - est_source = conv_tasnet(mixture) - print('est_source', est_source) - print('est_source size', est_source.size()) diff --git a/demucs/test.py b/demucs/test.py deleted file mode 100644 index 4140914ddbff3543b4056ca0cb1b5e887434a40a..0000000000000000000000000000000000000000 --- a/demucs/test.py +++ /dev/null @@ -1,109 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -import gzip -import sys -from concurrent import futures - -import musdb -import museval -import torch as th -import tqdm -from scipy.io import wavfile -from torch import distributed - -from .audio import convert_audio -from .utils import apply_model - - -def evaluate(model, - musdb_path, - eval_folder, - workers=2, - device="cpu", - rank=0, - save=False, - shifts=0, - split=False, - overlap=0.25, - is_wav=False, - world_size=1): - """ - Evaluate model using museval. Run the model - on a single GPU, the bottleneck being the call to museval. - """ - - output_dir = eval_folder / "results" - output_dir.mkdir(exist_ok=True, parents=True) - json_folder = eval_folder / "results/test" - json_folder.mkdir(exist_ok=True, parents=True) - - # we load tracks from the original musdb set - test_set = musdb.DB(musdb_path, subsets=["test"], is_wav=is_wav) - src_rate = 44100 # hardcoded for now... - - for p in model.parameters(): - p.requires_grad = False - p.grad = None - - pendings = [] - with futures.ProcessPoolExecutor(workers or 1) as pool: - for index in tqdm.tqdm(range(rank, len(test_set), world_size), file=sys.stdout): - track = test_set.tracks[index] - - out = json_folder / f"{track.name}.json.gz" - if out.exists(): - continue - - mix = th.from_numpy(track.audio).t().float() - ref = mix.mean(dim=0) # mono mixture - mix = (mix - ref.mean()) / ref.std() - mix = convert_audio(mix, src_rate, model.samplerate, model.audio_channels) - estimates = apply_model(model, mix.to(device), - shifts=shifts, split=split, overlap=overlap) - estimates = estimates * ref.std() + ref.mean() - - estimates = estimates.transpose(1, 2) - references = th.stack( - [th.from_numpy(track.targets[name].audio).t() for name in model.sources]) - references = convert_audio(references, src_rate, - model.samplerate, model.audio_channels) - references = references.transpose(1, 2).numpy() - estimates = estimates.cpu().numpy() - win = int(1. * model.samplerate) - hop = int(1. * model.samplerate) - if save: - folder = eval_folder / "wav/test" / track.name - folder.mkdir(exist_ok=True, parents=True) - for name, estimate in zip(model.sources, estimates): - wavfile.write(str(folder / (name + ".wav")), 44100, estimate) - - if workers: - pendings.append((track.name, pool.submit( - museval.evaluate, references, estimates, win=win, hop=hop))) - else: - pendings.append((track.name, museval.evaluate( - references, estimates, win=win, hop=hop))) - del references, mix, estimates, track - - for track_name, pending in tqdm.tqdm(pendings, file=sys.stdout): - if workers: - pending = pending.result() - sdr, isr, sir, sar = pending - track_store = museval.TrackStore(win=44100, hop=44100, track_name=track_name) - for idx, target in enumerate(model.sources): - values = { - "SDR": sdr[idx].tolist(), - "SIR": sir[idx].tolist(), - "ISR": isr[idx].tolist(), - "SAR": sar[idx].tolist() - } - - track_store.add_target(target_name=target, values=values) - json_path = json_folder / f"{track_name}.json.gz" - gzip.open(json_path, "w").write(track_store.json.encode('utf-8')) - if world_size > 1: - distributed.barrier() diff --git a/demucs/train.py b/demucs/train.py deleted file mode 100644 index 6bd221279dc986a6df1a8d7b4d4444bb822a1cb3..0000000000000000000000000000000000000000 --- a/demucs/train.py +++ /dev/null @@ -1,127 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -import sys - -import tqdm -from torch.utils.data import DataLoader -from torch.utils.data.distributed import DistributedSampler - -from .utils import apply_model, average_metric, center_trim - - -def train_model(epoch, - dataset, - model, - criterion, - optimizer, - augment, - quantizer=None, - diffq=0, - repeat=1, - device="cpu", - seed=None, - workers=4, - world_size=1, - batch_size=16): - - if world_size > 1: - sampler = DistributedSampler(dataset) - sampler_epoch = epoch * repeat - if seed is not None: - sampler_epoch += seed * 1000 - sampler.set_epoch(sampler_epoch) - batch_size //= world_size - loader = DataLoader(dataset, batch_size=batch_size, sampler=sampler, num_workers=workers) - else: - loader = DataLoader(dataset, batch_size=batch_size, num_workers=workers, shuffle=True) - current_loss = 0 - model_size = 0 - for repetition in range(repeat): - tq = tqdm.tqdm(loader, - ncols=120, - desc=f"[{epoch:03d}] train ({repetition + 1}/{repeat})", - leave=False, - file=sys.stdout, - unit=" batch") - total_loss = 0 - for idx, sources in enumerate(tq): - if len(sources) < batch_size: - # skip uncomplete batch for augment.Remix to work properly - continue - sources = sources.to(device) - sources = augment(sources) - mix = sources.sum(dim=1) - - estimates = model(mix) - sources = center_trim(sources, estimates) - loss = criterion(estimates, sources) - model_size = 0 - if quantizer is not None: - model_size = quantizer.model_size() - - train_loss = loss + diffq * model_size - train_loss.backward() - grad_norm = 0 - for p in model.parameters(): - if p.grad is not None: - grad_norm += p.grad.data.norm()**2 - grad_norm = grad_norm**0.5 - optimizer.step() - optimizer.zero_grad() - - if quantizer is not None: - model_size = model_size.item() - - total_loss += loss.item() - current_loss = total_loss / (1 + idx) - tq.set_postfix(loss=f"{current_loss:.4f}", ms=f"{model_size:.2f}", - grad=f"{grad_norm:.5f}") - - # free some space before next round - del sources, mix, estimates, loss, train_loss - - if world_size > 1: - sampler.epoch += 1 - - if world_size > 1: - current_loss = average_metric(current_loss) - return current_loss, model_size - - -def validate_model(epoch, - dataset, - model, - criterion, - device="cpu", - rank=0, - world_size=1, - shifts=0, - overlap=0.25, - split=False): - indexes = range(rank, len(dataset), world_size) - tq = tqdm.tqdm(indexes, - ncols=120, - desc=f"[{epoch:03d}] valid", - leave=False, - file=sys.stdout, - unit=" track") - current_loss = 0 - for index in tq: - streams = dataset[index] - # first five minutes to avoid OOM on --upsample models - streams = streams[..., :15_000_000] - streams = streams.to(device) - sources = streams[1:] - mix = streams[0] - estimates = apply_model(model, mix, shifts=shifts, split=split, overlap=overlap) - loss = criterion(estimates, sources) - current_loss += loss.item() / len(indexes) - del estimates, streams, sources - - if world_size > 1: - current_loss = average_metric(current_loss, len(indexes)) - return current_loss diff --git a/demucs/utils.py b/demucs/utils.py deleted file mode 100644 index 4364184059b1afe3c8379c77793a8e76dccf9699..0000000000000000000000000000000000000000 --- a/demucs/utils.py +++ /dev/null @@ -1,323 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -import errno -import functools -import hashlib -import inspect -import io -import os -import random -import socket -import tempfile -import warnings -import zlib -from contextlib import contextmanager - -from diffq import UniformQuantizer, DiffQuantizer -import torch as th -import tqdm -from torch import distributed -from torch.nn import functional as F - - -def center_trim(tensor, reference): - """ - Center trim `tensor` with respect to `reference`, along the last dimension. - `reference` can also be a number, representing the length to trim to. - If the size difference != 0 mod 2, the extra sample is removed on the right side. - """ - if hasattr(reference, "size"): - reference = reference.size(-1) - delta = tensor.size(-1) - reference - if delta < 0: - raise ValueError("tensor must be larger than reference. " f"Delta is {delta}.") - if delta: - tensor = tensor[..., delta // 2:-(delta - delta // 2)] - return tensor - - -def average_metric(metric, count=1.): - """ - Average `metric` which should be a float across all hosts. `count` should be - the weight for this particular host (i.e. number of examples). - """ - metric = th.tensor([count, count * metric], dtype=th.float32, device='cuda') - distributed.all_reduce(metric, op=distributed.ReduceOp.SUM) - return metric[1].item() / metric[0].item() - - -def free_port(host='', low=20000, high=40000): - """ - Return a port number that is most likely free. - This could suffer from a race condition although - it should be quite rare. - """ - sock = socket.socket() - while True: - port = random.randint(low, high) - try: - sock.bind((host, port)) - except OSError as error: - if error.errno == errno.EADDRINUSE: - continue - raise - return port - - -def sizeof_fmt(num, suffix='B'): - """ - Given `num` bytes, return human readable size. - Taken from https://stackoverflow.com/a/1094933 - """ - for unit in ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi']: - if abs(num) < 1024.0: - return "%3.1f%s%s" % (num, unit, suffix) - num /= 1024.0 - return "%.1f%s%s" % (num, 'Yi', suffix) - - -def human_seconds(seconds, display='.2f'): - """ - Given `seconds` seconds, return human readable duration. - """ - value = seconds * 1e6 - ratios = [1e3, 1e3, 60, 60, 24] - names = ['us', 'ms', 's', 'min', 'hrs', 'days'] - last = names.pop(0) - for name, ratio in zip(names, ratios): - if value / ratio < 0.3: - break - value /= ratio - last = name - return f"{format(value, display)} {last}" - - -class TensorChunk: - def __init__(self, tensor, offset=0, length=None): - total_length = tensor.shape[-1] - assert offset >= 0 - assert offset < total_length - - if length is None: - length = total_length - offset - else: - length = min(total_length - offset, length) - - self.tensor = tensor - self.offset = offset - self.length = length - self.device = tensor.device - - @property - def shape(self): - shape = list(self.tensor.shape) - shape[-1] = self.length - return shape - - def padded(self, target_length): - delta = target_length - self.length - total_length = self.tensor.shape[-1] - assert delta >= 0 - - start = self.offset - delta // 2 - end = start + target_length - - correct_start = max(0, start) - correct_end = min(total_length, end) - - pad_left = correct_start - start - pad_right = end - correct_end - - out = F.pad(self.tensor[..., correct_start:correct_end], (pad_left, pad_right)) - assert out.shape[-1] == target_length - return out - - -def tensor_chunk(tensor_or_chunk): - if isinstance(tensor_or_chunk, TensorChunk): - return tensor_or_chunk - else: - assert isinstance(tensor_or_chunk, th.Tensor) - return TensorChunk(tensor_or_chunk) - - -def apply_model(model, mix, shifts=None, split=False, - overlap=0.25, transition_power=1., progress=False): - """ - Apply model to a given mixture. - - Args: - shifts (int): if > 0, will shift in time `mix` by a random amount between 0 and 0.5 sec - and apply the oppositve shift to the output. This is repeated `shifts` time and - all predictions are averaged. This effectively makes the model time equivariant - and improves SDR by up to 0.2 points. - split (bool): if True, the input will be broken down in 8 seconds extracts - and predictions will be performed individually on each and concatenated. - Useful for model with large memory footprint like Tasnet. - progress (bool): if True, show a progress bar (requires split=True) - """ - assert transition_power >= 1, "transition_power < 1 leads to weird behavior." - device = mix.device - channels, length = mix.shape - if split: - out = th.zeros(len(model.sources), channels, length, device=device) - sum_weight = th.zeros(length, device=device) - segment = model.segment_length - stride = int((1 - overlap) * segment) - offsets = range(0, length, stride) - scale = stride / model.samplerate - if progress: - offsets = tqdm.tqdm(offsets, unit_scale=scale, ncols=120, unit='seconds') - # We start from a triangle shaped weight, with maximal weight in the middle - # of the segment. Then we normalize and take to the power `transition_power`. - # Large values of transition power will lead to sharper transitions. - weight = th.cat([th.arange(1, segment // 2 + 1), - th.arange(segment - segment // 2, 0, -1)]).to(device) - assert len(weight) == segment - # If the overlap < 50%, this will translate to linear transition when - # transition_power is 1. - weight = (weight / weight.max())**transition_power - for offset in offsets: - chunk = TensorChunk(mix, offset, segment) - chunk_out = apply_model(model, chunk, shifts=shifts) - chunk_length = chunk_out.shape[-1] - out[..., offset:offset + segment] += weight[:chunk_length] * chunk_out - sum_weight[offset:offset + segment] += weight[:chunk_length] - offset += segment - assert sum_weight.min() > 0 - out /= sum_weight - return out - elif shifts: - max_shift = int(0.5 * model.samplerate) - mix = tensor_chunk(mix) - padded_mix = mix.padded(length + 2 * max_shift) - out = 0 - for _ in range(shifts): - offset = random.randint(0, max_shift) - shifted = TensorChunk(padded_mix, offset, length + max_shift - offset) - shifted_out = apply_model(model, shifted) - out += shifted_out[..., max_shift - offset:] - out /= shifts - return out - else: - valid_length = model.valid_length(length) - mix = tensor_chunk(mix) - padded_mix = mix.padded(valid_length) - with th.no_grad(): - out = model(padded_mix.unsqueeze(0))[0] - return center_trim(out, length) - - -@contextmanager -def temp_filenames(count, delete=True): - names = [] - try: - for _ in range(count): - names.append(tempfile.NamedTemporaryFile(delete=False).name) - yield names - finally: - if delete: - for name in names: - os.unlink(name) - - -def get_quantizer(model, args, optimizer=None): - quantizer = None - if args.diffq: - quantizer = DiffQuantizer( - model, min_size=args.q_min_size, group_size=8) - if optimizer is not None: - quantizer.setup_optimizer(optimizer) - elif args.qat: - quantizer = UniformQuantizer( - model, bits=args.qat, min_size=args.q_min_size) - return quantizer - - -def load_model(path, strict=False): - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - load_from = path - package = th.load(load_from, 'cpu') - - klass = package["klass"] - args = package["args"] - kwargs = package["kwargs"] - - if strict: - model = klass(*args, **kwargs) - else: - sig = inspect.signature(klass) - for key in list(kwargs): - if key not in sig.parameters: - warnings.warn("Dropping inexistant parameter " + key) - del kwargs[key] - model = klass(*args, **kwargs) - - state = package["state"] - training_args = package["training_args"] - quantizer = get_quantizer(model, training_args) - - set_state(model, quantizer, state) - return model - - -def get_state(model, quantizer): - if quantizer is None: - state = {k: p.data.to('cpu') for k, p in model.state_dict().items()} - else: - state = quantizer.get_quantized_state() - buf = io.BytesIO() - th.save(state, buf) - state = {'compressed': zlib.compress(buf.getvalue())} - return state - - -def set_state(model, quantizer, state): - if quantizer is None: - model.load_state_dict(state) - else: - buf = io.BytesIO(zlib.decompress(state["compressed"])) - state = th.load(buf, "cpu") - quantizer.restore_quantized_state(state) - - return state - - -def save_state(state, path): - buf = io.BytesIO() - th.save(state, buf) - sig = hashlib.sha256(buf.getvalue()).hexdigest()[:8] - - path = path.parent / (path.stem + "-" + sig + path.suffix) - path.write_bytes(buf.getvalue()) - - -def save_model(model, quantizer, training_args, path): - args, kwargs = model._init_args_kwargs - klass = model.__class__ - - state = get_state(model, quantizer) - - save_to = path - package = { - 'klass': klass, - 'args': args, - 'kwargs': kwargs, - 'state': state, - 'training_args': training_args, - } - th.save(package, save_to) - - -def capture_init(init): - @functools.wraps(init) - def __init__(self, *args, **kwargs): - self._init_args_kwargs = (args, kwargs) - init(self, *args, **kwargs) - - return __init__ diff --git a/demucs/wav.py b/demucs/wav.py deleted file mode 100644 index a65c3b2ba5aacb1fcab3753f1f85ff7b8db7fc11..0000000000000000000000000000000000000000 --- a/demucs/wav.py +++ /dev/null @@ -1,174 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -from collections import OrderedDict -import hashlib -import math -import json -from pathlib import Path - -import julius -import torch as th -from torch import distributed -import torchaudio as ta -from torch.nn import functional as F - -from .audio import convert_audio_channels -from .compressed import get_musdb_tracks - -MIXTURE = "mixture" -EXT = ".wav" - - -def _track_metadata(track, sources): - track_length = None - track_samplerate = None - for source in sources + [MIXTURE]: - file = track / f"{source}{EXT}" - info = ta.info(str(file)) - length = info.num_frames - if track_length is None: - track_length = length - track_samplerate = info.sample_rate - elif track_length != length: - raise ValueError( - f"Invalid length for file {file}: " - f"expecting {track_length} but got {length}.") - elif info.sample_rate != track_samplerate: - raise ValueError( - f"Invalid sample rate for file {file}: " - f"expecting {track_samplerate} but got {info.sample_rate}.") - if source == MIXTURE: - wav, _ = ta.load(str(file)) - wav = wav.mean(0) - mean = wav.mean().item() - std = wav.std().item() - - return {"length": length, "mean": mean, "std": std, "samplerate": track_samplerate} - - -def _build_metadata(path, sources): - meta = {} - path = Path(path) - for file in path.iterdir(): - meta[file.name] = _track_metadata(file, sources) - return meta - - -class Wavset: - def __init__( - self, - root, metadata, sources, - length=None, stride=None, normalize=True, - samplerate=44100, channels=2): - """ - Waveset (or mp3 set for that matter). Can be used to train - with arbitrary sources. Each track should be one folder inside of `path`. - The folder should contain files named `{source}.{ext}`. - Files will be grouped according to `sources` (each source is a list of - filenames). - - Sample rate and channels will be converted on the fly. - - `length` is the sample size to extract (in samples, not duration). - `stride` is how many samples to move by between each example. - """ - self.root = Path(root) - self.metadata = OrderedDict(metadata) - self.length = length - self.stride = stride or length - self.normalize = normalize - self.sources = sources - self.channels = channels - self.samplerate = samplerate - self.num_examples = [] - for name, meta in self.metadata.items(): - track_length = int(self.samplerate * meta['length'] / meta['samplerate']) - if length is None or track_length < length: - examples = 1 - else: - examples = int(math.ceil((track_length - self.length) / self.stride) + 1) - self.num_examples.append(examples) - - def __len__(self): - return sum(self.num_examples) - - def get_file(self, name, source): - return self.root / name / f"{source}{EXT}" - - def __getitem__(self, index): - for name, examples in zip(self.metadata, self.num_examples): - if index >= examples: - index -= examples - continue - meta = self.metadata[name] - num_frames = -1 - offset = 0 - if self.length is not None: - offset = int(math.ceil( - meta['samplerate'] * self.stride * index / self.samplerate)) - num_frames = int(math.ceil( - meta['samplerate'] * self.length / self.samplerate)) - wavs = [] - for source in self.sources: - file = self.get_file(name, source) - wav, _ = ta.load(str(file), frame_offset=offset, num_frames=num_frames) - wav = convert_audio_channels(wav, self.channels) - wavs.append(wav) - - example = th.stack(wavs) - example = julius.resample_frac(example, meta['samplerate'], self.samplerate) - if self.normalize: - example = (example - meta['mean']) / meta['std'] - if self.length: - example = example[..., :self.length] - example = F.pad(example, (0, self.length - example.shape[-1])) - return example - - -def get_wav_datasets(args, samples, sources): - sig = hashlib.sha1(str(args.wav).encode()).hexdigest()[:8] - metadata_file = args.metadata / (sig + ".json") - train_path = args.wav / "train" - valid_path = args.wav / "valid" - if not metadata_file.is_file() and args.rank == 0: - train = _build_metadata(train_path, sources) - valid = _build_metadata(valid_path, sources) - json.dump([train, valid], open(metadata_file, "w")) - if args.world_size > 1: - distributed.barrier() - train, valid = json.load(open(metadata_file)) - train_set = Wavset(train_path, train, sources, - length=samples, stride=args.data_stride, - samplerate=args.samplerate, channels=args.audio_channels, - normalize=args.norm_wav) - valid_set = Wavset(valid_path, valid, [MIXTURE] + sources, - samplerate=args.samplerate, channels=args.audio_channels, - normalize=args.norm_wav) - return train_set, valid_set - - -def get_musdb_wav_datasets(args, samples, sources): - metadata_file = args.metadata / "musdb_wav.json" - root = args.musdb / "train" - if not metadata_file.is_file() and args.rank == 0: - metadata = _build_metadata(root, sources) - json.dump(metadata, open(metadata_file, "w")) - if args.world_size > 1: - distributed.barrier() - metadata = json.load(open(metadata_file)) - - train_tracks = get_musdb_tracks(args.musdb, is_wav=True, subsets=["train"], split="train") - metadata_train = {name: meta for name, meta in metadata.items() if name in train_tracks} - metadata_valid = {name: meta for name, meta in metadata.items() if name not in train_tracks} - train_set = Wavset(root, metadata_train, sources, - length=samples, stride=args.data_stride, - samplerate=args.samplerate, channels=args.audio_channels, - normalize=args.norm_wav) - valid_set = Wavset(root, metadata_valid, [MIXTURE] + sources, - samplerate=args.samplerate, channels=args.audio_channels, - normalize=args.norm_wav) - return train_set, valid_set diff --git a/diffq/__init__.py b/diffq/__init__.py deleted file mode 100644 index 2b997ee4ed99a90cc43db7812383927e6fe1a3e8..0000000000000000000000000000000000000000 --- a/diffq/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -# flake8: noqa -""" -This package implements different quantization strategies: - -- `diffq.uniform.UniformQuantizer`: classic uniform quantization over n bits. -- `diffq.diffq.DiffQuantizer`: differentiable quantizer based on scaled noise injection. - -Also, do check `diffq.base.BaseQuantizer` for the common methods of all Quantizers. -""" - -from .uniform import UniformQuantizer -from .diffq import DiffQuantizer diff --git a/diffq/base.py b/diffq/base.py deleted file mode 100644 index 9bd5276b51fbed3d4b898a45b93479ff19e62a7b..0000000000000000000000000000000000000000 --- a/diffq/base.py +++ /dev/null @@ -1,262 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -from dataclasses import dataclass -from concurrent import futures -from fnmatch import fnmatch -from functools import partial -import io -import math -from multiprocessing import cpu_count -import typing as tp -import zlib - -import torch - - -class BaseQuantizer: - @dataclass - class _QuantizedParam: - name: str - param: torch.nn.Parameter - module: torch.nn.Module - # If a Parameter is used multiple times, `other` can be used - # to share state between the different Quantizers - other: tp.Optional[tp.Any] - - def __init__(self, model: torch.nn.Module, min_size: float = 0.01, float16: bool = False, - exclude: tp.Optional[tp.List[str]] = [], detect_bound: bool = True): - self.model = model - self.min_size = min_size - self.float16 = float16 - self.exclude = exclude - self.detect_bound = detect_bound - self._quantized = False - self._pre_handle = self.model.register_forward_pre_hook(self._forward_pre_hook) - self._post_handle = self.model.register_forward_hook(self._forward_hook) - - self._quantized_state = None - self._qparams = [] - self._float16 = [] - self._others = [] - self._rnns = [] - - self._saved = [] - - self._find_params() - - def _find_params(self): - min_params = self.min_size * 2**20 // 4 - previous = {} - for module_name, module in self.model.named_modules(): - if isinstance(module, torch.nn.RNNBase): - self._rnns.append(module) - for name, param in list(module.named_parameters(recurse=False)): - full_name = f"{module_name}.{name}" - matched = False - for pattern in self.exclude: - if fnmatch(full_name, pattern) or fnmatch(name, pattern): - matched = True - break - - if param.numel() <= min_params or matched: - if id(param) in previous: - continue - if self.detect_bound: - previous[id(param)] = None - if self.float16: - self._float16.append(param) - else: - self._others.append(param) - else: - qparam = self._register_param(name, param, module, previous.get(id(param))) - if self.detect_bound: - previous[id(param)] = qparam - self._qparams.append(qparam) - - def _register_param(self, name, param, module, other): - return self.__class__._QuantizedParam(name, param, module, other) - - def _forward_pre_hook(self, module, input): - if self.model.training: - self._quantized_state = None - if self._quantized: - self.unquantize() - if self._pre_forward_train(): - self._fix_rnns() - else: - self.quantize() - - def _forward_hook(self, module, input, output): - if self.model.training: - if self._post_forward_train(): - self._fix_rnns(flatten=False) # Hacky, next forward will flatten - - def quantize(self, save=True): - """ - Immediately apply quantization to the model parameters. - If `save` is True, save a copy of the unquantized parameters, that can be - restored with `unquantize()`. - """ - if self._quantized: - return - if save: - self._saved = [qp.param.data.to('cpu', copy=True) - for qp in self._qparams if qp.other is None] - self.restore_quantized_state(self.get_quantized_state()) - self._quantized = True - self._fix_rnns() - - def unquantize(self): - """ - Revert a previous call to `quantize()`. - """ - if not self._quantized: - raise RuntimeError("Can only be called on a quantized model.") - if not self._saved: - raise RuntimeError("Nothing to restore.") - for qparam in self._qparams: - if qparam.other is None: - qparam.param.data[:] = self._saved.pop(0) - assert len(self._saved) == 0 - self._quantized = False - self._fix_rnns() - - def _pre_forward_train(self) -> bool: - """ - Called once before each forward for continuous quantization. - Should return True if parameters were changed. - """ - return False - - def _post_forward_train(self) -> bool: - """ - Called once after each forward (to restore state for instance). - Should return True if parameters were changed. - """ - return False - - def _fix_rnns(self, flatten=True): - """ - To be called after quantization happened to fix RNNs. - """ - for rnn in self._rnns: - rnn._flat_weights = [ - (lambda wn: getattr(rnn, wn) if hasattr(rnn, wn) else None)(wn) - for wn in rnn._flat_weights_names] - if flatten: - rnn.flatten_parameters() - - def get_quantized_state(self): - """ - Returns sufficient quantized information to rebuild the model state. - - ..Note:: - To achieve maximum compression, you should compress this with - gzip or other, as quantized weights are not optimally coded! - """ - if self._quantized_state is None: - self._quantized_state = self._get_quantized_state() - return self._quantized_state - - def _get_quantized_state(self): - """ - Actual implementation for `get_quantized_state`. - """ - float16_params = [] - for p in self._float16: - q = p.data.half() - float16_params.append(q) - - return { - "quantized": [self._quantize_param(qparam) for qparam in self._qparams - if qparam.other is None], - "float16": float16_params, - "others": [p.data.clone() for p in self._others], - } - - def _quantize_param(self, qparam: _QuantizedParam) -> tp.Any: - """ - To be overriden. - """ - raise NotImplementedError() - - def _unquantize_param(self, qparam: _QuantizedParam, quantized: tp.Any) -> torch.Tensor: - """ - To be overriden. - """ - raise NotImplementedError() - - def restore_quantized_state(self, state) -> None: - """ - Restore the state of the model from the quantized state. - """ - for p, q in zip(self._float16, state["float16"]): - p.data[:] = q.to(p) - - for p, q in zip(self._others, state["others"]): - p.data[:] = q - - remaining = list(state["quantized"]) - for qparam in self._qparams: - if qparam.other is not None: - # Only unquantize first appearance of nn.Parameter. - continue - quantized = remaining.pop(0) - qparam.param.data[:] = self._unquantize_param(qparam, quantized) - self._fix_rnns() - - def detach(self) -> None: - """ - Detach from the model, removes hooks and anything else. - """ - self._pre_handle.remove() - self._post_handle.remove() - - def model_size(self) -> torch.Tensor: - """ - Returns an estimate of the quantized model size. - """ - total = torch.tensor(0.) - for p in self._float16: - total += 16 * p.numel() - for p in self._others: - total += 32 * p.numel() - return total / 2**20 / 8 # bits to MegaBytes - - def true_model_size(self) -> float: - """ - Return the true quantized model size, in MB, without extra - compression. - """ - return self.model_size().item() - - def compressed_model_size(self, compress_level=-1, num_workers=8) -> float: - """ - Return the compressed quantized model size, in MB. - - Args: - compress_level (int): compression level used with zlib, - see `zlib.compress` for details. - num_workers (int): will split the final big byte representation in that - many chunks processed in parallels. - """ - out = io.BytesIO() - torch.save(self.get_quantized_state(), out) - ms = _parallel_compress_len(out.getvalue(), compress_level, num_workers) - return ms / 2 ** 20 - - -def _compress_len(data, compress_level): - return len(zlib.compress(data, level=compress_level)) - - -def _parallel_compress_len(data, compress_level, num_workers): - num_workers = min(cpu_count(), num_workers) - chunk_size = int(math.ceil(len(data) / num_workers)) - chunks = [data[offset:offset + chunk_size] for offset in range(0, len(data), chunk_size)] - with futures.ProcessPoolExecutor(num_workers) as pool: - return sum(pool.map(partial(_compress_len, compress_level=compress_level), chunks)) diff --git a/diffq/diffq.py b/diffq/diffq.py deleted file mode 100644 index b475ec7f55227417b014c69b5cf55033182113e1..0000000000000000000000000000000000000000 --- a/diffq/diffq.py +++ /dev/null @@ -1,286 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -""" -Differentiable quantizer based on scaled noise injection. -""" -from dataclasses import dataclass -import math -import typing as tp - -import torch - -from .base import BaseQuantizer -from .uniform import uniform_quantize, uniform_unquantize -from .utils import simple_repr - - -class DiffQuantizer(BaseQuantizer): - @dataclass - class _QuantizedParam(BaseQuantizer._QuantizedParam): - logit: torch.nn.Parameter - - def __init__(self, model: torch.nn.Module, min_size: float = 0.01, float16: bool = False, - group_size: int = 1, min_bits: float = 2, max_bits: float = 15, - param="bits", noise="gaussian", - init_bits: float = 8, extra_bits: float = 0, suffix: str = "_diffq", - exclude: tp.List[str] = [], detect_bound: bool = True): - """ - Differentiable quantizer based on scaled noise injection. - For every parameter `p` in the model, this introduces a number of bits parameter - `b` with the same dimensions (when group_size = 1). - Before each forward, `p` is replaced by `p + U` - with U uniform iid noise with range [-d/2, d/2], with `d` the uniform quantization - step for `b` bits. - This noise approximates the quantization noise in a differentiable manner, both - with respect to the unquantized parameter `p` and the number of bits `b`. - - At eveluation (as detected with `model.eval()`), the model is replaced - by its true quantized version, and restored when going back to training. - - When doing actual quantization (for serialization, or evaluation), - the number of bits is rounded to the nearest integer, and needs to be stored along. - This will cost a few bits per dimension. To reduce this cost, one can use `group_size`, - which will use a single noise level for multiple weight entries. - - You can use the `DiffQuantizer.model_size` method to get a differentiable estimate of the - model size in MB. You can then use this estimate as a penalty in your training loss. - - Args: - model (torch.nn.Module): model to quantize - min_size (float): minimum size in MB of a parameter to be quantized. - float16 (bool): if a layer is smaller than min_size, should we still do float16? - group_size (int): weight entries are groupped together to reduce the number - of noise scales to store. This should divide the size of all parameters - bigger than min_size. - min_bits (float): minimal number of bits. - max_bits (float): maximal number of bits. - init_bits (float): initial number of bits. - extra_bits (float): extra bits to add for actual quantization (before roundoff). - suffix (str): suffix used for the name of the extra noise scale parameters. - exclude (list[str]): list of patterns used to match parameters to exclude. - For instance `['bias']` to exclude all bias terms. - detect_bound (bool): if True, will detect bound parameters and reuse - the same quantized tensor for both, as well as the same number of bits. - - ..Warning:: - You must call `model.training()` and `model.eval()` for `DiffQuantizer` work properly. - - """ - self.group_size = group_size - self.min_bits = min_bits - self.max_bits = max_bits - self.init_bits = init_bits - self.extra_bits = extra_bits - self.suffix = suffix - self.param = param - self.noise = noise - assert noise in ["gaussian", "uniform"] - self._optimizer_setup = False - - self._min_noise = 1 / (2 ** self.max_bits - 1) - self._max_noise = 1 / (2 ** self.min_bits - 1) - - assert group_size >= 0 - assert min_bits < init_bits < max_bits, \ - "init_bits must be between min_bits and max_bits excluded3" - - for name, _ in model.named_parameters(): - if name.endswith(suffix): - raise RuntimeError("The model already has some noise scales parameters, " - "maybe you used twice a DiffQuantizer on the same model?.") - - super().__init__(model, min_size, float16, exclude, detect_bound) - - def _get_bits(self, logit: torch.Tensor): - if self.param == "noise": - return torch.log2(1 + 1 / self._get_noise_scale(logit)) - else: - t = torch.sigmoid(logit) - return self.max_bits * t + (1 - t) * self.min_bits - - def _get_noise_scale(self, logit: torch.Tensor): - if self.param == "noise": - t = torch.sigmoid(logit) - return torch.exp(t * math.log(self._min_noise) + (1 - t) * math.log(self._max_noise)) - else: - return 1 / (2 ** self._get_bits(logit) - 1) - - def _register_param(self, name, param, module, other): - if other is not None: - return self.__class__._QuantizedParam( - name=name, param=param, module=module, logit=other.logit, other=other) - assert self.group_size == 0 or param.numel() % self.group_size == 0 - # we want the initial number of bits to be init_bits. - if self.param == "noise": - noise_scale = 1 / (2 ** self.init_bits - 1) - t = (math.log(noise_scale) - math.log(self._max_noise)) / ( - math.log(self._min_noise) - math.log(self._max_noise)) - else: - t = (self.init_bits - self.min_bits) / (self.max_bits - self.min_bits) - assert 0 < t < 1 - logit = torch.logit(torch.tensor(float(t))) - assert abs(self._get_bits(logit) - self.init_bits) < 1e-5 - if self.group_size > 0: - nparam = param.numel() // self.group_size - else: - nparam = 1 - logit = torch.nn.Parameter( - torch.full( - (nparam,), - logit, - device=param.device)) - module.register_parameter(name + self.suffix, logit) - return self.__class__._QuantizedParam( - name=name, param=param, module=module, logit=logit, other=None) - - def clear_optimizer(self, optimizer: torch.optim.Optimizer): - params = [qp.logit for qp in self._qparams] - - for group in optimizer.param_groups: - new_params = [] - for q in list(group["params"]): - matched = False - for p in params: - if p is q: - matched = True - if not matched: - new_params.append(q) - group["params"][:] = new_params - - def setup_optimizer(self, optimizer: torch.optim.Optimizer, - lr: float = 1e-3, **kwargs): - """ - Setup the optimizer to tune the number of bits. In particular, this will deactivate - weight decay for the bits parameters. - - Args: - optimizer (torch.Optimizer): optimizer to use. - lr (float): specific learning rate for the bits parameters. 1e-3 - is perfect for Adam.,w - kwargs (dict): overrides for other optimization parameters for the bits. - """ - assert not self._optimizer_setup - self._optimizer_setup = True - - params = [qp.logit for qp in self._qparams] - - for group in optimizer.param_groups: - for q in list(group["params"]): - for p in params: - if p is q: - raise RuntimeError("You should create the optimizer " - "before the quantizer!") - - group = {"params": params, "lr": lr, "weight_decay": 0} - group.update(kwargs) - optimizer.add_param_group(group) - - def no_optimizer(self): - """ - Call this if you do not want to use an optimizer. - """ - self._optimizer_setup = True - - def check_unused(self): - for qparam in self._qparams: - if qparam.other is not None: - continue - grad = qparam.param.grad - if grad is None or (grad == 0).all(): - if qparam.logit.grad is not None: - qparam.logit.grad.data.zero_() - - def model_size(self, exact=False): - """ - Differentiable estimate of the model size. - The size is returned in MB. - - If `exact` is True, then the output is no longer differentiable but - reflect exactly an achievable size, even without compression, - i.e.same as returned by `naive_model_size()`. - """ - total = super().model_size() - subtotal = 0 - for qparam in self._qparams: - # only count the first appearance of a Parameter - if qparam.other is not None: - continue - bits = self.extra_bits + self._get_bits(qparam.logit) - if exact: - bits = bits.round().clamp(1, 15) - if self.group_size == 0: - group_size = qparam.param.numel() - else: - group_size = self.group_size - subtotal += group_size * bits.sum() - subtotal += 2 * 32 # param scale - - # Number of bits to represent each number of bits - bits_bits = math.ceil(math.log2(1 + (bits.max().round().item() - self.min_bits))) - subtotal += 8 # 8 bits for bits_bits - subtotal += bits_bits * bits.numel() - - subtotal /= 2 ** 20 * 8 # bits -> MegaBytes - return total + subtotal - - def true_model_size(self): - """ - Naive model size without zlib compression. - """ - return self.model_size(exact=True).item() - - def _pre_forward_train(self): - if not self._optimizer_setup: - raise RuntimeError("You must call `setup_optimizer()` on your optimizer " - "before starting training.") - for qparam in self._qparams: - if qparam.other is not None: - noisy = qparam.other.module._parameters[qparam.other.name] - else: - bits = self._get_bits(qparam.logit)[:, None] - if self.group_size == 0: - p_flat = qparam.param.view(-1) - else: - p_flat = qparam.param.view(-1, self.group_size) - scale = p_flat.max() - p_flat.min() - unit = 1 / (2**bits - 1) - if self.noise == "uniform": - noise_source = (torch.rand_like(p_flat) - 0.5) - elif self.noise == "gaussian": - noise_source = torch.randn_like(p_flat) / 2 - noise = scale * unit * noise_source - noisy = p_flat + noise - # We bypass the checks by PyTorch on parameters being leafs - qparam.module._parameters[qparam.name] = noisy.view_as(qparam.param) - return True - - def _post_forward_train(self): - for qparam in self._qparams: - qparam.module._parameters[qparam.name] = qparam.param - return True - - def _quantize_param(self, qparam: _QuantizedParam) -> tp.Any: - bits = self.extra_bits + self._get_bits(qparam.logit) - bits = bits.round().clamp(1, 15)[:, None].byte() - if self.group_size == 0: - p = qparam.param.data.view(-1) - else: - p = qparam.param.data.view(-1, self.group_size) - levels, scales = uniform_quantize(p, bits) - return levels, scales, bits - - def _unquantize_param(self, qparam: _QuantizedParam, quantized: tp.Any) -> torch.Tensor: - levels, param_scale, bits = quantized - return uniform_unquantize(levels, param_scale, bits).view_as(qparam.param.data) - - def detach(self): - super().detach() - for qparam in self._qparams: - delattr(qparam.module, qparam.name + self.suffix) - - def __repr__(self): - return simple_repr(self) diff --git a/diffq/uniform.py b/diffq/uniform.py deleted file mode 100644 index f61e9129c04caaa33c66f726bf2433d51689cfa5..0000000000000000000000000000000000000000 --- a/diffq/uniform.py +++ /dev/null @@ -1,121 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -""" -Classic uniform quantization over n bits. -""" -from typing import Tuple -import torch - -from .base import BaseQuantizer -from .utils import simple_repr - - -def uniform_quantize(p: torch.Tensor, bits: torch.Tensor = torch.tensor(8.)): - """ - Quantize the given weights over `bits` bits. - - Returns: - - quantized levels - - (min, max) range. - - """ - assert (bits >= 1).all() and (bits <= 15).all() - num_levels = (2 ** bits.float()).long() - mn = p.min().item() - mx = p.max().item() - p = (p - mn) / (mx - mn) # put p in [0, 1] - unit = 1 / (num_levels - 1) # quantization unit - levels = (p / unit).round() - if (bits <= 8).all(): - levels = levels.byte() - else: - levels = levels.short() - return levels, (mn, mx) - - -def uniform_unquantize(levels: torch.Tensor, scales: Tuple[float, float], - bits: torch.Tensor = torch.tensor(8.)): - """ - Unquantize the weights from the levels and scale. Return a float32 tensor. - """ - mn, mx = scales - num_levels = 2 ** bits.float() - unit = 1 / (num_levels - 1) - levels = levels.float() - p = levels * unit # in [0, 1] - return p * (mx - mn) + mn - - -class UniformQuantizer(BaseQuantizer): - def __init__(self, model: torch.nn.Module, bits: float = 8., min_size: float = 0.01, - float16: bool = False, qat: bool = False, exclude=[], detect_bound=True): - """ - Args: - model (torch.nn.Module): model to quantize - bits (float): number of bits to quantize over. - min_size (float): minimum size in MB of a parameter to be quantized. - float16 (bool): if a layer is smaller than min_size, should we still do float16? - qat (bool): perform quantized aware training. - exclude (list[str]): list of patterns used to match parameters to exclude. - For instance `['bias']` to exclude all bias terms. - detect_bound (bool): if True, will detect bound parameters and reuse - the same quantized tensor for both. - """ - self.bits = float(bits) - self.qat = qat - - super().__init__(model, min_size, float16, exclude, detect_bound) - - def __repr__(self): - return simple_repr(self, ) - - def _pre_forward_train(self): - if self.qat: - for qparam in self._qparams: - if qparam.other is not None: - new_param = qparam.other.module._parameters[qparam.other.name] - else: - quantized = self._quantize_param(qparam) - qvalue = self._unquantize_param(qparam, quantized) - new_param = qparam.param + (qvalue - qparam.param).detach() - qparam.module._parameters[qparam.name] = new_param - return True - return False - - def _post_forward_train(self): - if self.qat: - for qparam in self._qparams: - qparam.module._parameters[qparam.name] = qparam.param - return True - return False - - def _quantize_param(self, qparam): - levels, scales = uniform_quantize(qparam.param.data, torch.tensor(self.bits)) - return (levels, scales) - - def _unquantize_param(self, qparam, quantized): - levels, scales = quantized - return uniform_unquantize(levels, scales, torch.tensor(self.bits)) - - def model_size(self): - """ - Non differentiable model size in MB. - """ - total = super().model_size() - subtotal = 0 - for qparam in self._qparams: - if qparam.other is None: # if parameter is bound, count only one copy. - subtotal += self.bits * qparam.param.numel() + 64 # 2 float for the overall scales - subtotal /= 2**20 * 8 # bits to MegaBytes - return total + subtotal - - def true_model_size(self): - """ - Return the true quantized model size, in MB, without extra - compression. - """ - return self.model_size().item() diff --git a/diffq/utils.py b/diffq/utils.py deleted file mode 100644 index be6ab5253c38564140bc202077292bb99f9f397b..0000000000000000000000000000000000000000 --- a/diffq/utils.py +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright (c) Facebook, Inc. and its affiliates. -# All rights reserved. -# -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. - -import inspect -from typing import Optional, List - - -def simple_repr(obj, attrs: Optional[List[str]] = None, overrides={}): - """ - Return a simple representation string for `obj`. - If `attrs` is not None, it should be a list of attributes to include. - """ - params = inspect.signature(obj.__class__).parameters - attrs_repr = [] - if attrs is None: - attrs = params.keys() - for attr in attrs: - display = False - if attr in overrides: - value = overrides[attr] - elif hasattr(obj, attr): - value = getattr(obj, attr) - else: - continue - if attr in params: - param = params[attr] - if param.default is inspect._empty or value != param.default: - display = True - else: - display = True - - if display: - attrs_repr.append(f"{attr}={value}") - return f"{obj.__class__.__name__}({','.join(attrs_repr)})" diff --git a/easy_infer.py b/easy_infer.py deleted file mode 100644 index 5f32bc37e6702cd7288df66059d4a09bc0e3d6aa..0000000000000000000000000000000000000000 --- a/easy_infer.py +++ /dev/null @@ -1,1398 +0,0 @@ -import subprocess -import os -import sys -import errno -import shutil -import yt_dlp -from mega import Mega -import datetime -import unicodedata -import torch -import glob -import gradio as gr -import gdown -import zipfile -import traceback -import json -import mdx -from mdx_processing_script import get_model_list,id_to_ptm,prepare_mdx,run_mdx -import requests -import wget -import ffmpeg -import hashlib -now_dir = os.getcwd() -sys.path.append(now_dir) -from unidecode import unidecode -import re -import time -from lib.infer_pack.models_onnx import SynthesizerTrnMsNSFsidM -from infer.modules.vc.pipeline import Pipeline -VC = Pipeline -from lib.infer_pack.models import ( - SynthesizerTrnMs256NSFsid, - SynthesizerTrnMs256NSFsid_nono, - SynthesizerTrnMs768NSFsid, - SynthesizerTrnMs768NSFsid_nono, -) -from MDXNet import MDXNetDereverb -from configs.config import Config -from infer_uvr5 import _audio_pre_, _audio_pre_new -from huggingface_hub import HfApi, list_models -from huggingface_hub import login -from i18n import I18nAuto -i18n = I18nAuto() -from bs4 import BeautifulSoup -from sklearn.cluster import MiniBatchKMeans -from dotenv import load_dotenv -load_dotenv() -config = Config() -tmp = os.path.join(now_dir, "TEMP") -shutil.rmtree(tmp, ignore_errors=True) -os.environ["TEMP"] = tmp -weight_root = os.getenv("weight_root") -weight_uvr5_root = os.getenv("weight_uvr5_root") -index_root = os.getenv("index_root") -audio_root = "audios" -names = [] -for name in os.listdir(weight_root): - if name.endswith(".pth"): - names.append(name) -index_paths = [] - -global indexes_list -indexes_list = [] - -audio_paths = [] -for root, dirs, files in os.walk(index_root, topdown=False): - for name in files: - if name.endswith(".index") and "trained" not in name: - index_paths.append("%s\\%s" % (root, name)) - -for root, dirs, files in os.walk(audio_root, topdown=False): - for name in files: - audio_paths.append("%s/%s" % (root, name)) - -uvr5_names = [] -for name in os.listdir(weight_uvr5_root): - if name.endswith(".pth") or "onnx" in name: - uvr5_names.append(name.replace(".pth", "")) - -def calculate_md5(file_path): - hash_md5 = hashlib.md5() - with open(file_path, "rb") as f: - for chunk in iter(lambda: f.read(4096), b""): - hash_md5.update(chunk) - return hash_md5.hexdigest() - -def format_title(title): - formatted_title = re.sub(r'[^\w\s-]', '', title) - formatted_title = formatted_title.replace(" ", "_") - return formatted_title - -def silentremove(filename): - try: - os.remove(filename) - except OSError as e: - if e.errno != errno.ENOENT: - raise -def get_md5(temp_folder): - for root, subfolders, files in os.walk(temp_folder): - for file in files: - if not file.startswith("G_") and not file.startswith("D_") and file.endswith(".pth") and not "_G_" in file and not "_D_" in file: - md5_hash = calculate_md5(os.path.join(root, file)) - return md5_hash - - return None - -def find_parent(search_dir, file_name): - for dirpath, dirnames, filenames in os.walk(search_dir): - if file_name in filenames: - return os.path.abspath(dirpath) - return None - -def find_folder_parent(search_dir, folder_name): - for dirpath, dirnames, filenames in os.walk(search_dir): - if folder_name in dirnames: - return os.path.abspath(dirpath) - return None - - -def delete_large_files(directory_path, max_size_megabytes): - for filename in os.listdir(directory_path): - file_path = os.path.join(directory_path, filename) - if os.path.isfile(file_path): - size_in_bytes = os.path.getsize(file_path) - size_in_megabytes = size_in_bytes / (1024 * 1024) # Convert bytes to megabytes - - if size_in_megabytes > max_size_megabytes: - print("###################################") - print(f"Deleting s*** {filename} (Size: {size_in_megabytes:.2f} MB)") - os.remove(file_path) - print("###################################") - -def download_from_url(url): - parent_path = find_folder_parent(".", "pretrained_v2") - zips_path = os.path.join(parent_path, 'zips') - print(f"Limit download size in MB {os.getenv('MAX_DOWNLOAD_SIZE')}, duplicate the space for modify the limit") - - if url != '': - print(i18n("Downloading the file: ") + f"{url}") - if "drive.google.com" in url: - if "file/d/" in url: - file_id = url.split("file/d/")[1].split("/")[0] - elif "id=" in url: - file_id = url.split("id=")[1].split("&")[0] - else: - return None - - if file_id: - os.chdir('./zips') - result = subprocess.run(["gdown", f"https://drive.google.com/uc?id={file_id}", "--fuzzy"], capture_output=True, text=True, encoding='utf-8') - if "Too many users have viewed or downloaded this file recently" in str(result.stderr): - return "too much use" - if "Cannot retrieve the public link of the file." in str(result.stderr): - return "private link" - print(result.stderr) - - elif "/blob/" in url: - os.chdir('./zips') - url = url.replace("blob", "resolve") - response = requests.get(url) - if response.status_code == 200: - file_name = url.split('/')[-1] - with open(os.path.join(zips_path, file_name), "wb") as newfile: - newfile.write(response.content) - else: - os.chdir(parent_path) - elif "mega.nz" in url: - if "#!" in url: - file_id = url.split("#!")[1].split("!")[0] - elif "file/" in url: - file_id = url.split("file/")[1].split("/")[0] - else: - return None - if file_id: - m = Mega() - m.download_url(url, zips_path) - elif "/tree/main" in url: - response = requests.get(url) - soup = BeautifulSoup(response.content, 'html.parser') - temp_url = '' - for link in soup.find_all('a', href=True): - if link['href'].endswith('.zip'): - temp_url = link['href'] - break - if temp_url: - url = temp_url - url = url.replace("blob", "resolve") - if "huggingface.co" not in url: - url = "https://huggingface.co" + url - - wget.download(url) - else: - print("No .zip file found on the page.") - elif "cdn.discordapp.com" in url: - file = requests.get(url) - if file.status_code == 200: - name = url.split('/') - with open(os.path.join(zips_path, name[len(name)-1]), "wb") as newfile: - newfile.write(file.content) - else: - return None - elif "pixeldrain.com" in url: - try: - file_id = url.split("pixeldrain.com/u/")[1] - os.chdir('./zips') - print(file_id) - response = requests.get(f"https://pixeldrain.com/api/file/{file_id}") - if response.status_code == 200: - file_name = response.headers.get("Content-Disposition").split('filename=')[-1].strip('";') - if not os.path.exists(zips_path): - os.makedirs(zips_path) - with open(os.path.join(zips_path, file_name), "wb") as newfile: - newfile.write(response.content) - os.chdir(parent_path) - return "downloaded" - else: - os.chdir(parent_path) - return None - except Exception as e: - print(e) - os.chdir(parent_path) - return None - else: - os.chdir('./zips') - wget.download(url) - - #os.chdir('./zips') - delete_large_files(zips_path, int(os.getenv("MAX_DOWNLOAD_SIZE"))) - os.chdir(parent_path) - print(i18n("Full download")) - return "downloaded" - else: - return None - -class error_message(Exception): - def __init__(self, mensaje): - self.mensaje = mensaje - super().__init__(mensaje) - -def get_vc(sid, to_return_protect0, to_return_protect1): - global n_spk, tgt_sr, net_g, vc, cpt, version - if sid == "" or sid == []: - global hubert_model - if hubert_model is not None: - print("clean_empty_cache") - del net_g, n_spk, vc, hubert_model, tgt_sr - hubert_model = net_g = n_spk = vc = hubert_model = tgt_sr = None - if torch.cuda.is_available(): - torch.cuda.empty_cache() - if_f0 = cpt.get("f0", 1) - version = cpt.get("version", "v1") - if version == "v1": - if if_f0 == 1: - net_g = SynthesizerTrnMs256NSFsid( - *cpt["config"], is_half=config.is_half - ) - else: - net_g = SynthesizerTrnMs256NSFsid_nono(*cpt["config"]) - elif version == "v2": - if if_f0 == 1: - net_g = SynthesizerTrnMs768NSFsid( - *cpt["config"], is_half=config.is_half - ) - else: - net_g = SynthesizerTrnMs768NSFsid_nono(*cpt["config"]) - del net_g, cpt - if torch.cuda.is_available(): - torch.cuda.empty_cache() - cpt = None - return ( - {"visible": False, "__type__": "update"}, - {"visible": False, "__type__": "update"}, - {"visible": False, "__type__": "update"}, - ) - person = "%s/%s" % (weight_root, sid) - print("loading %s" % person) - cpt = torch.load(person, map_location="cpu") - tgt_sr = cpt["config"][-1] - cpt["config"][-3] = cpt["weight"]["emb_g.weight"].shape[0] - if_f0 = cpt.get("f0", 1) - if if_f0 == 0: - to_return_protect0 = to_return_protect1 = { - "visible": False, - "value": 0.5, - "__type__": "update", - } - else: - to_return_protect0 = { - "visible": True, - "value": to_return_protect0, - "__type__": "update", - } - to_return_protect1 = { - "visible": True, - "value": to_return_protect1, - "__type__": "update", - } - version = cpt.get("version", "v1") - if version == "v1": - if if_f0 == 1: - net_g = SynthesizerTrnMs256NSFsid(*cpt["config"], is_half=config.is_half) - else: - net_g = SynthesizerTrnMs256NSFsid_nono(*cpt["config"]) - elif version == "v2": - if if_f0 == 1: - net_g = SynthesizerTrnMs768NSFsid(*cpt["config"], is_half=config.is_half) - else: - net_g = SynthesizerTrnMs768NSFsid_nono(*cpt["config"]) - del net_g.enc_q - print(net_g.load_state_dict(cpt["weight"], strict=False)) - net_g.eval().to(config.device) - if config.is_half: - net_g = net_g.half() - else: - net_g = net_g.float() - vc = VC(tgt_sr, config) - n_spk = cpt["config"][-3] - return ( - {"visible": True, "maximum": n_spk, "__type__": "update"}, - to_return_protect0, - to_return_protect1, - ) - -def load_downloaded_model(url): - parent_path = find_folder_parent(".", "pretrained_v2") - try: - infos = [] - logs_folders = ['0_gt_wavs','1_16k_wavs','2a_f0','2b-f0nsf','3_feature256','3_feature768'] - zips_path = os.path.join(parent_path, 'zips') - unzips_path = os.path.join(parent_path, 'unzips') - weights_path = os.path.join(parent_path, 'weights') - logs_dir = "" - - if os.path.exists(zips_path): - shutil.rmtree(zips_path) - if os.path.exists(unzips_path): - shutil.rmtree(unzips_path) - - os.mkdir(zips_path) - os.mkdir(unzips_path) - - download_file = download_from_url(url) - if not download_file: - print(i18n("The file could not be downloaded.")) - infos.append(i18n("The file could not be downloaded.")) - yield "\n".join(infos) - elif download_file == "downloaded": - print(i18n("It has been downloaded successfully.")) - infos.append(i18n("It has been downloaded successfully.")) - yield "\n".join(infos) - elif download_file == "too much use": - raise Exception(i18n("Too many users have recently viewed or downloaded this file")) - elif download_file == "private link": - raise Exception(i18n("Cannot get file from this private link")) - - for filename in os.listdir(zips_path): - if filename.endswith(".zip"): - zipfile_path = os.path.join(zips_path,filename) - print(i18n("Proceeding with the extraction...")) - infos.append(i18n("Proceeding with the extraction...")) - shutil.unpack_archive(zipfile_path, unzips_path, 'zip') - model_name = os.path.basename(zipfile_path) - logs_dir = os.path.join(parent_path,'logs', os.path.normpath(str(model_name).replace(".zip",""))) - yield "\n".join(infos) - else: - print(i18n("Unzip error.")) - infos.append(i18n("Unzip error.")) - yield "\n".join(infos) - - index_file = False - model_file = False - D_file = False - G_file = False - - for path, subdirs, files in os.walk(unzips_path): - for item in files: - item_path = os.path.join(path, item) - if not 'G_' in item and not 'D_' in item and item.endswith('.pth'): - model_file = True - model_name = item.replace(".pth","") - logs_dir = os.path.join(parent_path,'logs', model_name) - if os.path.exists(logs_dir): - shutil.rmtree(logs_dir) - os.mkdir(logs_dir) - if not os.path.exists(weights_path): - os.mkdir(weights_path) - if os.path.exists(os.path.join(weights_path, item)): - os.remove(os.path.join(weights_path, item)) - if os.path.exists(item_path): - shutil.move(item_path, weights_path) - - if not model_file and not os.path.exists(logs_dir): - os.mkdir(logs_dir) - for path, subdirs, files in os.walk(unzips_path): - for item in files: - item_path = os.path.join(path, item) - if item.startswith('added_') and item.endswith('.index'): - index_file = True - if os.path.exists(item_path): - if os.path.exists(os.path.join(logs_dir, item)): - os.remove(os.path.join(logs_dir, item)) - shutil.move(item_path, logs_dir) - if item.startswith('total_fea.npy') or item.startswith('events.'): - if os.path.exists(item_path): - if os.path.exists(os.path.join(logs_dir, item)): - os.remove(os.path.join(logs_dir, item)) - shutil.move(item_path, logs_dir) - - - result = "" - if model_file: - if index_file: - print(i18n("The model works for inference, and has the .index file.")) - infos.append("\n" + i18n("The model works for inference, and has the .index file.")) - yield "\n".join(infos) - else: - print(i18n("The model works for inference, but it doesn't have the .index file.")) - infos.append("\n" + i18n("The model works for inference, but it doesn't have the .index file.")) - yield "\n".join(infos) - - if not index_file and not model_file: - print(i18n("No relevant file was found to upload.")) - infos.append(i18n("No relevant file was found to upload.")) - yield "\n".join(infos) - - if os.path.exists(zips_path): - shutil.rmtree(zips_path) - if os.path.exists(unzips_path): - shutil.rmtree(unzips_path) - os.chdir(parent_path) - return result - except Exception as e: - os.chdir(parent_path) - if "too much use" in str(e): - print(i18n("Too many users have recently viewed or downloaded this file")) - yield i18n("Too many users have recently viewed or downloaded this file") - elif "private link" in str(e): - print(i18n("Cannot get file from this private link")) - yield i18n("Cannot get file from this private link") - else: - print(e) - yield i18n("An error occurred downloading") - finally: - os.chdir(parent_path) - -def load_dowloaded_dataset(url): - parent_path = find_folder_parent(".", "pretrained_v2") - infos = [] - try: - zips_path = os.path.join(parent_path, 'zips') - unzips_path = os.path.join(parent_path, 'unzips') - datasets_path = os.path.join(parent_path, 'datasets') - audio_extenions =['wav', 'mp3', 'flac', 'ogg', 'opus', - 'm4a', 'mp4', 'aac', 'alac', 'wma', - 'aiff', 'webm', 'ac3'] - - if os.path.exists(zips_path): - shutil.rmtree(zips_path) - if os.path.exists(unzips_path): - shutil.rmtree(unzips_path) - - if not os.path.exists(datasets_path): - os.mkdir(datasets_path) - - os.mkdir(zips_path) - os.mkdir(unzips_path) - - download_file = download_from_url(url) - - if not download_file: - print(i18n("An error occurred downloading")) - infos.append(i18n("An error occurred downloading")) - yield "\n".join(infos) - raise Exception(i18n("An error occurred downloading")) - elif download_file == "downloaded": - print(i18n("It has been downloaded successfully.")) - infos.append(i18n("It has been downloaded successfully.")) - yield "\n".join(infos) - elif download_file == "too much use": - raise Exception(i18n("Too many users have recently viewed or downloaded this file")) - elif download_file == "private link": - raise Exception(i18n("Cannot get file from this private link")) - - zip_path = os.listdir(zips_path) - foldername = "" - for file in zip_path: - if file.endswith('.zip'): - file_path = os.path.join(zips_path, file) - print("....") - foldername = file.replace(".zip","").replace(" ","").replace("-","_") - dataset_path = os.path.join(datasets_path, foldername) - print(i18n("Proceeding with the extraction...")) - infos.append(i18n("Proceeding with the extraction...")) - yield "\n".join(infos) - shutil.unpack_archive(file_path, unzips_path, 'zip') - if os.path.exists(dataset_path): - shutil.rmtree(dataset_path) - - os.mkdir(dataset_path) - - for root, subfolders, songs in os.walk(unzips_path): - for song in songs: - song_path = os.path.join(root, song) - if song.endswith(tuple(audio_extenions)): - formatted_song_name = format_title(os.path.splitext(song)[0]) - extension = os.path.splitext(song)[1] - new_song_path = os.path.join(dataset_path, f"{formatted_song_name}{extension}") - shutil.move(song_path, new_song_path) - else: - print(i18n("Unzip error.")) - infos.append(i18n("Unzip error.")) - yield "\n".join(infos) - - - - if os.path.exists(zips_path): - shutil.rmtree(zips_path) - if os.path.exists(unzips_path): - shutil.rmtree(unzips_path) - - print(i18n("The Dataset has been loaded successfully.")) - infos.append(i18n("The Dataset has been loaded successfully.")) - yield "\n".join(infos) - except Exception as e: - os.chdir(parent_path) - if "too much use" in str(e): - print(i18n("Too many users have recently viewed or downloaded this file")) - yield i18n("Too many users have recently viewed or downloaded this file") - elif "private link" in str(e): - print(i18n("Cannot get file from this private link")) - yield i18n("Cannot get file from this private link") - else: - print(e) - yield i18n("An error occurred downloading") - finally: - os.chdir(parent_path) - -def save_model(modelname, save_action): - - parent_path = find_folder_parent(".", "pretrained_v2") - zips_path = os.path.join(parent_path, 'zips') - dst = os.path.join(zips_path,modelname) - logs_path = os.path.join(parent_path, 'logs', modelname) - weights_path = os.path.join(parent_path, 'weights', f"{modelname}.pth") - save_folder = parent_path - infos = [] - - try: - if not os.path.exists(logs_path): - raise Exception("No model found.") - - if not 'content' in parent_path: - save_folder = os.path.join(parent_path, 'RVC_Backup') - else: - save_folder = '/content/drive/MyDrive/RVC_Backup' - - infos.append(i18n("Save model")) - yield "\n".join(infos) - - if not os.path.exists(save_folder): - os.mkdir(save_folder) - if not os.path.exists(os.path.join(save_folder, 'ManualTrainingBackup')): - os.mkdir(os.path.join(save_folder, 'ManualTrainingBackup')) - if not os.path.exists(os.path.join(save_folder, 'Finished')): - os.mkdir(os.path.join(save_folder, 'Finished')) - - if os.path.exists(zips_path): - shutil.rmtree(zips_path) - - os.mkdir(zips_path) - added_file = glob.glob(os.path.join(logs_path, "added_*.index")) - d_file = glob.glob(os.path.join(logs_path, "D_*.pth")) - g_file = glob.glob(os.path.join(logs_path, "G_*.pth")) - - if save_action == i18n("Choose the method"): - raise Exception("No method choosen.") - - if save_action == i18n("Save all"): - print(i18n("Save all")) - save_folder = os.path.join(save_folder, 'ManualTrainingBackup') - shutil.copytree(logs_path, dst) - else: - if not os.path.exists(dst): - os.mkdir(dst) - - if save_action == i18n("Save D and G"): - print(i18n("Save D and G")) - save_folder = os.path.join(save_folder, 'ManualTrainingBackup') - if len(d_file) > 0: - shutil.copy(d_file[0], dst) - if len(g_file) > 0: - shutil.copy(g_file[0], dst) - - if len(added_file) > 0: - shutil.copy(added_file[0], dst) - else: - infos.append(i18n("Saved without index...")) - - if save_action == i18n("Save voice"): - print(i18n("Save voice")) - save_folder = os.path.join(save_folder, 'Finished') - if len(added_file) > 0: - shutil.copy(added_file[0], dst) - else: - infos.append(i18n("Saved without index...")) - - yield "\n".join(infos) - if not os.path.exists(weights_path): - infos.append(i18n("Saved without inference model...")) - else: - shutil.copy(weights_path, dst) - - yield "\n".join(infos) - infos.append("\n" + i18n("This may take a few minutes, please wait...")) - yield "\n".join(infos) - - shutil.make_archive(os.path.join(zips_path,f"{modelname}"), 'zip', zips_path) - shutil.move(os.path.join(zips_path,f"{modelname}.zip"), os.path.join(save_folder, f'{modelname}.zip')) - - shutil.rmtree(zips_path) - infos.append("\n" + i18n("Model saved successfully")) - yield "\n".join(infos) - - except Exception as e: - print(e) - if "No model found." in str(e): - infos.append(i18n("The model you want to save does not exist, be sure to enter the correct name.")) - else: - infos.append(i18n("An error occurred saving the model")) - - yield "\n".join(infos) - -def load_downloaded_backup(url): - parent_path = find_folder_parent(".", "pretrained_v2") - try: - infos = [] - logs_folders = ['0_gt_wavs','1_16k_wavs','2a_f0','2b-f0nsf','3_feature256','3_feature768'] - zips_path = os.path.join(parent_path, 'zips') - unzips_path = os.path.join(parent_path, 'unzips') - weights_path = os.path.join(parent_path, 'weights') - logs_dir = os.path.join(parent_path, 'logs') - - if os.path.exists(zips_path): - shutil.rmtree(zips_path) - if os.path.exists(unzips_path): - shutil.rmtree(unzips_path) - - os.mkdir(zips_path) - os.mkdir(unzips_path) - - download_file = download_from_url(url) - if not download_file: - print(i18n("The file could not be downloaded.")) - infos.append(i18n("The file could not be downloaded.")) - yield "\n".join(infos) - elif download_file == "downloaded": - print(i18n("It has been downloaded successfully.")) - infos.append(i18n("It has been downloaded successfully.")) - yield "\n".join(infos) - elif download_file == "too much use": - raise Exception(i18n("Too many users have recently viewed or downloaded this file")) - elif download_file == "private link": - raise Exception(i18n("Cannot get file from this private link")) - - for filename in os.listdir(zips_path): - if filename.endswith(".zip"): - zipfile_path = os.path.join(zips_path,filename) - zip_dir_name = os.path.splitext(filename)[0] - unzip_dir = unzips_path - print(i18n("Proceeding with the extraction...")) - infos.append(i18n("Proceeding with the extraction...")) - shutil.unpack_archive(zipfile_path, unzip_dir, 'zip') - - if os.path.exists(os.path.join(unzip_dir, zip_dir_name)): - shutil.move(os.path.join(unzip_dir, zip_dir_name), logs_dir) - else: - new_folder_path = os.path.join(logs_dir, zip_dir_name) - os.mkdir(new_folder_path) - for item_name in os.listdir(unzip_dir): - item_path = os.path.join(unzip_dir, item_name) - if os.path.isfile(item_path): - shutil.move(item_path, new_folder_path) - elif os.path.isdir(item_path): - shutil.move(item_path, new_folder_path) - - yield "\n".join(infos) - else: - print(i18n("Unzip error.")) - infos.append(i18n("Unzip error.")) - yield "\n".join(infos) - - result = "" - - for filename in os.listdir(unzips_path): - if filename.endswith(".zip"): - silentremove(filename) - - if os.path.exists(zips_path): - shutil.rmtree(zips_path) - if os.path.exists(os.path.join(parent_path, 'unzips')): - shutil.rmtree(os.path.join(parent_path, 'unzips')) - print(i18n("The Backup has been uploaded successfully.")) - infos.append("\n" + i18n("The Backup has been uploaded successfully.")) - yield "\n".join(infos) - os.chdir(parent_path) - return result - except Exception as e: - os.chdir(parent_path) - if "too much use" in str(e): - print(i18n("Too many users have recently viewed or downloaded this file")) - yield i18n("Too many users have recently viewed or downloaded this file") - elif "private link" in str(e): - print(i18n("Cannot get file from this private link")) - yield i18n("Cannot get file from this private link") - else: - print(e) - yield i18n("An error occurred downloading") - finally: - os.chdir(parent_path) - -def save_to_wav(record_button): - if record_button is None: - pass - else: - path_to_file=record_button - new_name = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")+'.wav' - new_path='./audios/'+new_name - shutil.move(path_to_file,new_path) - return new_name - - -def change_choices2(): - audio_paths=[] - for filename in os.listdir("./audios"): - if filename.endswith(('wav', 'mp3', 'flac', 'ogg', 'opus', - 'm4a', 'mp4', 'aac', 'alac', 'wma', - 'aiff', 'webm', 'ac3')): - audio_paths.append(os.path.join('./audios',filename).replace('\\', '/')) - return {"choices": sorted(audio_paths), "__type__": "update"}, {"__type__": "update"} - - - - - -def uvr(input_url, output_path, model_name, inp_root, save_root_vocal, paths, save_root_ins, agg, format0, architecture): - carpeta_a_eliminar = "yt_downloads" - if os.path.exists(carpeta_a_eliminar) and os.path.isdir(carpeta_a_eliminar): - for archivo in os.listdir(carpeta_a_eliminar): - ruta_archivo = os.path.join(carpeta_a_eliminar, archivo) - if os.path.isfile(ruta_archivo): - os.remove(ruta_archivo) - elif os.path.isdir(ruta_archivo): - shutil.rmtree(ruta_archivo) - - - - ydl_opts = { - 'no-windows-filenames': True, - 'restrict-filenames': True, - 'extract_audio': True, - 'format': 'bestaudio', - 'quiet': True, - 'no-warnings': True, - } - - try: - print(i18n("Downloading audio from the video...")) - with yt_dlp.YoutubeDL(ydl_opts) as ydl: - info_dict = ydl.extract_info(input_url, download=False) - formatted_title = format_title(info_dict.get('title', 'default_title')) - formatted_outtmpl = output_path + '/' + formatted_title + '.wav' - ydl_opts['outtmpl'] = formatted_outtmpl - ydl = yt_dlp.YoutubeDL(ydl_opts) - ydl.download([input_url]) - print(i18n("Audio downloaded!")) - except Exception as error: - print(i18n("An error occurred:"), error) - - actual_directory = os.path.dirname(__file__) - - vocal_directory = os.path.join(actual_directory, save_root_vocal) - instrumental_directory = os.path.join(actual_directory, save_root_ins) - - vocal_formatted = f"vocal_{formatted_title}.wav.reformatted.wav_10.wav" - instrumental_formatted = f"instrument_{formatted_title}.wav.reformatted.wav_10.wav" - - vocal_audio_path = os.path.join(vocal_directory, vocal_formatted) - instrumental_audio_path = os.path.join(instrumental_directory, instrumental_formatted) - - vocal_formatted_mdx = f"{formatted_title}_vocal_.wav" - instrumental_formatted_mdx = f"{formatted_title}_instrument_.wav" - - vocal_audio_path_mdx = os.path.join(vocal_directory, vocal_formatted_mdx) - instrumental_audio_path_mdx = os.path.join(instrumental_directory, instrumental_formatted_mdx) - - if architecture == "VR": - try: - print(i18n("Starting audio conversion... (This might take a moment)")) - inp_root, save_root_vocal, save_root_ins = [x.strip(" ").strip('"').strip("\n").strip('"').strip(" ") for x in [inp_root, save_root_vocal, save_root_ins]] - usable_files = [os.path.join(inp_root, file) - for file in os.listdir(inp_root) - if file.endswith(tuple(sup_audioext))] - - - pre_fun = MDXNetDereverb(15) if model_name == "onnx_dereverb_By_FoxJoy" else (_audio_pre_ if "DeEcho" not in model_name else _audio_pre_new)( - agg=int(agg), - model_path=os.path.join(weight_uvr5_root, model_name + ".pth"), - device=config.device, - is_half=config.is_half, - ) - - try: - if paths != None: - paths = [path.name for path in paths] - else: - paths = usable_files - - except: - traceback.print_exc() - paths = usable_files - print(paths) - for path in paths: - inp_path = os.path.join(inp_root, path) - need_reformat, done = 1, 0 - - try: - info = ffmpeg.probe(inp_path, cmd="ffprobe") - if info["streams"][0]["channels"] == 2 and info["streams"][0]["sample_rate"] == "44100": - need_reformat = 0 - pre_fun._path_audio_(inp_path, save_root_ins, save_root_vocal, format0) - done = 1 - except: - traceback.print_exc() - - if need_reformat: - tmp_path = f"{tmp}/{os.path.basename(inp_path)}.reformatted.wav" - os.system(f"ffmpeg -i {inp_path} -vn -acodec pcm_s16le -ac 2 -ar 44100 {tmp_path} -y") - inp_path = tmp_path - - try: - if not done: - pre_fun._path_audio_(inp_path, save_root_ins, save_root_vocal, format0) - print(f"{os.path.basename(inp_path)}->Success") - except: - print(f"{os.path.basename(inp_path)}->{traceback.format_exc()}") - except: - traceback.print_exc() - finally: - try: - if model_name == "onnx_dereverb_By_FoxJoy": - del pre_fun.pred.model - del pre_fun.pred.model_ - else: - del pre_fun.model - - del pre_fun - return i18n("Finished"), vocal_audio_path, instrumental_audio_path - except: traceback.print_exc() - - if torch.cuda.is_available(): torch.cuda.empty_cache() - - elif architecture == "MDX": - try: - print(i18n("Starting audio conversion... (This might take a moment)")) - inp_root, save_root_vocal, save_root_ins = [x.strip(" ").strip('"').strip("\n").strip('"').strip(" ") for x in [inp_root, save_root_vocal, save_root_ins]] - - usable_files = [os.path.join(inp_root, file) - for file in os.listdir(inp_root) - if file.endswith(tuple(sup_audioext))] - try: - if paths != None: - paths = [path.name for path in paths] - else: - paths = usable_files - - except: - traceback.print_exc() - paths = usable_files - print(paths) - invert=True - denoise=True - use_custom_parameter=True - dim_f=2048 - dim_t=256 - n_fft=7680 - use_custom_compensation=True - compensation=1.025 - suffix = "vocal_" #@param ["Vocals", "Drums", "Bass", "Other"]{allow-input: true} - suffix_invert = "instrument_" #@param ["Instrumental", "Drumless", "Bassless", "Instruments"]{allow-input: true} - print_settings = True # @param{type:"boolean"} - onnx = id_to_ptm(model_name) - compensation = compensation if use_custom_compensation or use_custom_parameter else None - mdx_model = prepare_mdx(onnx,use_custom_parameter, dim_f, dim_t, n_fft, compensation=compensation) - - - for path in paths: - #inp_path = os.path.join(inp_root, path) - suffix_naming = suffix if use_custom_parameter else None - diff_suffix_naming = suffix_invert if use_custom_parameter else None - run_mdx(onnx, mdx_model, path, format0, diff=invert,suffix=suffix_naming,diff_suffix=diff_suffix_naming,denoise=denoise) - - if print_settings: - print() - print('[MDX-Net_Colab settings used]') - print(f'Model used: {onnx}') - print(f'Model MD5: {mdx.MDX.get_hash(onnx)}') - print(f'Model parameters:') - print(f' -dim_f: {mdx_model.dim_f}') - print(f' -dim_t: {mdx_model.dim_t}') - print(f' -n_fft: {mdx_model.n_fft}') - print(f' -compensation: {mdx_model.compensation}') - print() - print('[Input file]') - print('filename(s): ') - for filename in paths: - print(f' -{filename}') - print(f"{os.path.basename(filename)}->Success") - except: - traceback.print_exc() - finally: - try: - del mdx_model - return i18n("Finished"), vocal_audio_path_mdx, instrumental_audio_path_mdx - except: traceback.print_exc() - - print("clean_empty_cache") - - if torch.cuda.is_available(): torch.cuda.empty_cache() -sup_audioext = {'wav', 'mp3', 'flac', 'ogg', 'opus', - 'm4a', 'mp4', 'aac', 'alac', 'wma', - 'aiff', 'webm', 'ac3'} - -def load_downloaded_audio(url): - parent_path = find_folder_parent(".", "pretrained_v2") - try: - infos = [] - audios_path = os.path.join(parent_path, 'audios') - zips_path = os.path.join(parent_path, 'zips') - - if not os.path.exists(audios_path): - os.mkdir(audios_path) - - download_file = download_from_url(url) - if not download_file: - print(i18n("The file could not be downloaded.")) - infos.append(i18n("The file could not be downloaded.")) - yield "\n".join(infos) - elif download_file == "downloaded": - print(i18n("It has been downloaded successfully.")) - infos.append(i18n("It has been downloaded successfully.")) - yield "\n".join(infos) - elif download_file == "too much use": - raise Exception(i18n("Too many users have recently viewed or downloaded this file")) - elif download_file == "private link": - raise Exception(i18n("Cannot get file from this private link")) - - for filename in os.listdir(zips_path): - item_path = os.path.join(zips_path, filename) - if item_path.split('.')[-1] in sup_audioext: - if os.path.exists(item_path): - shutil.move(item_path, audios_path) - - result = "" - print(i18n("Audio files have been moved to the 'audios' folder.")) - infos.append(i18n("Audio files have been moved to the 'audios' folder.")) - yield "\n".join(infos) - - os.chdir(parent_path) - return result - except Exception as e: - os.chdir(parent_path) - if "too much use" in str(e): - print(i18n("Too many users have recently viewed or downloaded this file")) - yield i18n("Too many users have recently viewed or downloaded this file") - elif "private link" in str(e): - print(i18n("Cannot get file from this private link")) - yield i18n("Cannot get file from this private link") - else: - print(e) - yield i18n("An error occurred downloading") - finally: - os.chdir(parent_path) - - -class error_message(Exception): - def __init__(self, mensaje): - self.mensaje = mensaje - super().__init__(mensaje) - -def get_vc(sid, to_return_protect0, to_return_protect1): - global n_spk, tgt_sr, net_g, vc, cpt, version - if sid == "" or sid == []: - global hubert_model - if hubert_model is not None: - print("clean_empty_cache") - del net_g, n_spk, vc, hubert_model, tgt_sr - hubert_model = net_g = n_spk = vc = hubert_model = tgt_sr = None - if torch.cuda.is_available(): - torch.cuda.empty_cache() - if_f0 = cpt.get("f0", 1) - version = cpt.get("version", "v1") - if version == "v1": - if if_f0 == 1: - net_g = SynthesizerTrnMs256NSFsid( - *cpt["config"], is_half=config.is_half - ) - else: - net_g = SynthesizerTrnMs256NSFsid_nono(*cpt["config"]) - elif version == "v2": - if if_f0 == 1: - net_g = SynthesizerTrnMs768NSFsid( - *cpt["config"], is_half=config.is_half - ) - else: - net_g = SynthesizerTrnMs768NSFsid_nono(*cpt["config"]) - del net_g, cpt - if torch.cuda.is_available(): - torch.cuda.empty_cache() - cpt = None - return ( - {"visible": False, "__type__": "update"}, - {"visible": False, "__type__": "update"}, - {"visible": False, "__type__": "update"}, - ) - person = "%s/%s" % (weight_root, sid) - print("loading %s" % person) - cpt = torch.load(person, map_location="cpu") - tgt_sr = cpt["config"][-1] - cpt["config"][-3] = cpt["weight"]["emb_g.weight"].shape[0] - if_f0 = cpt.get("f0", 1) - if if_f0 == 0: - to_return_protect0 = to_return_protect1 = { - "visible": False, - "value": 0.5, - "__type__": "update", - } - else: - to_return_protect0 = { - "visible": True, - "value": to_return_protect0, - "__type__": "update", - } - to_return_protect1 = { - "visible": True, - "value": to_return_protect1, - "__type__": "update", - } - version = cpt.get("version", "v1") - if version == "v1": - if if_f0 == 1: - net_g = SynthesizerTrnMs256NSFsid(*cpt["config"], is_half=config.is_half) - else: - net_g = SynthesizerTrnMs256NSFsid_nono(*cpt["config"]) - elif version == "v2": - if if_f0 == 1: - net_g = SynthesizerTrnMs768NSFsid(*cpt["config"], is_half=config.is_half) - else: - net_g = SynthesizerTrnMs768NSFsid_nono(*cpt["config"]) - del net_g.enc_q - print(net_g.load_state_dict(cpt["weight"], strict=False)) - net_g.eval().to(config.device) - if config.is_half: - net_g = net_g.half() - else: - net_g = net_g.float() - vc = VC(tgt_sr, config) - n_spk = cpt["config"][-3] - return ( - {"visible": True, "maximum": n_spk, "__type__": "update"}, - to_return_protect0, - to_return_protect1, - ) - -def update_model_choices(select_value): - model_ids = get_model_list() - model_ids_list = list(model_ids) - if select_value == "VR": - return {"choices": uvr5_names, "__type__": "update"} - elif select_value == "MDX": - return {"choices": model_ids_list, "__type__": "update"} - -def download_model(): - gr.Markdown(value="# " + i18n("Download Model")) - gr.Markdown(value=i18n("It is used to download your inference models.")) - with gr.Row(): - model_url=gr.Textbox(label=i18n("Url:")) - with gr.Row(): - download_model_status_bar=gr.Textbox(label=i18n("Status:")) - with gr.Row(): - download_button=gr.Button(i18n("Download")) - download_button.click(fn=load_downloaded_model, inputs=[model_url], outputs=[download_model_status_bar]) - -def download_backup(): - gr.Markdown(value="# " + i18n("Download Backup")) - gr.Markdown(value=i18n("It is used to download your training backups.")) - with gr.Row(): - model_url=gr.Textbox(label=i18n("Url:")) - with gr.Row(): - download_model_status_bar=gr.Textbox(label=i18n("Status:")) - with gr.Row(): - download_button=gr.Button(i18n("Download")) - download_button.click(fn=load_downloaded_backup, inputs=[model_url], outputs=[download_model_status_bar]) - -def update_dataset_list(name): - new_datasets = [] - for foldername in os.listdir("./datasets"): - if "." not in foldername: - new_datasets.append(os.path.join(find_folder_parent(".","pretrained"),"datasets",foldername)) - return gr.Dropdown.update(choices=new_datasets) - -def download_dataset(trainset_dir4): - gr.Markdown(value="# " + i18n("Download Dataset")) - gr.Markdown(value=i18n("Download the dataset with the audios in a compatible format (.wav/.flac) to train your model.")) - with gr.Row(): - dataset_url=gr.Textbox(label=i18n("Url:")) - with gr.Row(): - load_dataset_status_bar=gr.Textbox(label=i18n("Status:")) - with gr.Row(): - load_dataset_button=gr.Button(i18n("Download")) - load_dataset_button.click(fn=load_dowloaded_dataset, inputs=[dataset_url], outputs=[load_dataset_status_bar]) - load_dataset_status_bar.change(update_dataset_list, dataset_url, trainset_dir4) - -def download_audio(): - gr.Markdown(value="# " + i18n("Download Audio")) - gr.Markdown(value=i18n("Download audios of any format for use in inference (recommended for mobile users).")) - with gr.Row(): - audio_url=gr.Textbox(label=i18n("Url:")) - with gr.Row(): - download_audio_status_bar=gr.Textbox(label=i18n("Status:")) - with gr.Row(): - download_button2=gr.Button(i18n("Download")) - download_button2.click(fn=load_downloaded_audio, inputs=[audio_url], outputs=[download_audio_status_bar]) - -def youtube_separator(): - gr.Markdown(value="# " + i18n("Separate YouTube tracks")) - gr.Markdown(value=i18n("Download audio from a YouTube video and automatically separate the vocal and instrumental tracks")) - with gr.Row(): - input_url = gr.inputs.Textbox(label=i18n("Enter the YouTube link:")) - output_path = gr.Textbox( - label=i18n("Enter the path of the audio folder to be processed (copy it from the address bar of the file manager):"), - value=os.path.abspath(os.getcwd()).replace('\\', '/') + "/yt_downloads", - visible=False, - ) - advanced_settings_checkbox = gr.Checkbox( - value=False, - label=i18n("Advanced Settings"), - interactive=True, - ) - with gr.Row(label = i18n("Advanced Settings"), visible=False, variant='compact') as advanced_settings: - with gr.Column(): - model_select = gr.Radio( - label=i18n("Model Architecture:"), - choices=["VR", "MDX"], - value="VR", - interactive=True, - ) - model_choose = gr.Dropdown(label=i18n("Model: (Be aware that in some models the named vocal will be the instrumental)"), - choices=uvr5_names, - value="HP5_only_main_vocal" - ) - with gr.Row(): - agg = gr.Slider( - minimum=0, - maximum=20, - step=1, - label=i18n("Vocal Extraction Aggressive"), - value=10, - interactive=True, - ) - with gr.Row(): - opt_vocal_root = gr.Textbox( - label=i18n("Specify the output folder for vocals:"), value="audios", - ) - opt_ins_root = gr.Textbox( - label=i18n("Specify the output folder for accompaniment:"), value="audio-others", - ) - dir_wav_input = gr.Textbox( - label=i18n("Enter the path of the audio folder to be processed:"), - value=((os.getcwd()).replace('\\', '/') + "/yt_downloads"), - visible=False, - ) - format0 = gr.Radio( - label=i18n("Export file format"), - choices=["wav", "flac", "mp3", "m4a"], - value="wav", - visible=False, - interactive=True, - ) - wav_inputs = gr.File( - file_count="multiple", label=i18n("You can also input audio files in batches. Choose one of the two options. Priority is given to reading from the folder."), - visible=False, - ) - model_select.change( - fn=update_model_choices, - inputs=model_select, - outputs=model_choose, - ) - with gr.Row(): - vc_output4 = gr.Textbox(label=i18n("Status:")) - vc_output5 = gr.Audio(label=i18n("Vocal"), type='filepath') - vc_output6 = gr.Audio(label=i18n("Instrumental"), type='filepath') - with gr.Row(): - but2 = gr.Button(i18n("Download and Separate")) - but2.click( - uvr, - [ - input_url, - output_path, - model_choose, - dir_wav_input, - opt_vocal_root, - wav_inputs, - opt_ins_root, - agg, - format0, - model_select - ], - [vc_output4, vc_output5, vc_output6], - ) - def toggle_advanced_settings(checkbox): - return {"visible": checkbox, "__type__": "update"} - - advanced_settings_checkbox.change( - fn=toggle_advanced_settings, - inputs=[advanced_settings_checkbox], - outputs=[advanced_settings] - ) - - -def get_bark_voice(): - mensaje = """ -v2/en_speaker_0 English Male -v2/en_speaker_1 English Male -v2/en_speaker_2 English Male -v2/en_speaker_3 English Male -v2/en_speaker_4 English Male -v2/en_speaker_5 English Male -v2/en_speaker_6 English Male -v2/en_speaker_7 English Male -v2/en_speaker_8 English Male -v2/en_speaker_9 English Female -v2/zh_speaker_0 Chinese (Simplified) Male -v2/zh_speaker_1 Chinese (Simplified) Male -v2/zh_speaker_2 Chinese (Simplified) Male -v2/zh_speaker_3 Chinese (Simplified) Male -v2/zh_speaker_4 Chinese (Simplified) Female -v2/zh_speaker_5 Chinese (Simplified) Male -v2/zh_speaker_6 Chinese (Simplified) Female -v2/zh_speaker_7 Chinese (Simplified) Female -v2/zh_speaker_8 Chinese (Simplified) Male -v2/zh_speaker_9 Chinese (Simplified) Female -v2/fr_speaker_0 French Male -v2/fr_speaker_1 French Female -v2/fr_speaker_2 French Female -v2/fr_speaker_3 French Male -v2/fr_speaker_4 French Male -v2/fr_speaker_5 French Female -v2/fr_speaker_6 French Male -v2/fr_speaker_7 French Male -v2/fr_speaker_8 French Male -v2/fr_speaker_9 French Male -v2/de_speaker_0 German Male -v2/de_speaker_1 German Male -v2/de_speaker_2 German Male -v2/de_speaker_3 German Female -v2/de_speaker_4 German Male -v2/de_speaker_5 German Male -v2/de_speaker_6 German Male -v2/de_speaker_7 German Male -v2/de_speaker_8 German Female -v2/de_speaker_9 German Male -v2/hi_speaker_0 Hindi Female -v2/hi_speaker_1 Hindi Female -v2/hi_speaker_2 Hindi Male -v2/hi_speaker_3 Hindi Female -v2/hi_speaker_4 Hindi Female -v2/hi_speaker_5 Hindi Male -v2/hi_speaker_6 Hindi Male -v2/hi_speaker_7 Hindi Male -v2/hi_speaker_8 Hindi Male -v2/hi_speaker_9 Hindi Female -v2/it_speaker_0 Italian Male -v2/it_speaker_1 Italian Male -v2/it_speaker_2 Italian Female -v2/it_speaker_3 Italian Male -v2/it_speaker_4 Italian Male -v2/it_speaker_5 Italian Male -v2/it_speaker_6 Italian Male -v2/it_speaker_7 Italian Female -v2/it_speaker_8 Italian Male -v2/it_speaker_9 Italian Female -v2/ja_speaker_0 Japanese Female -v2/ja_speaker_1 Japanese Female -v2/ja_speaker_2 Japanese Male -v2/ja_speaker_3 Japanese Female -v2/ja_speaker_4 Japanese Female -v2/ja_speaker_5 Japanese Female -v2/ja_speaker_6 Japanese Male -v2/ja_speaker_7 Japanese Female -v2/ja_speaker_8 Japanese Female -v2/ja_speaker_9 Japanese Female -v2/ko_speaker_0 Korean Female -v2/ko_speaker_1 Korean Male -v2/ko_speaker_2 Korean Male -v2/ko_speaker_3 Korean Male -v2/ko_speaker_4 Korean Male -v2/ko_speaker_5 Korean Male -v2/ko_speaker_6 Korean Male -v2/ko_speaker_7 Korean Male -v2/ko_speaker_8 Korean Male -v2/ko_speaker_9 Korean Male -v2/pl_speaker_0 Polish Male -v2/pl_speaker_1 Polish Male -v2/pl_speaker_2 Polish Male -v2/pl_speaker_3 Polish Male -v2/pl_speaker_4 Polish Female -v2/pl_speaker_5 Polish Male -v2/pl_speaker_6 Polish Female -v2/pl_speaker_7 Polish Male -v2/pl_speaker_8 Polish Male -v2/pl_speaker_9 Polish Female -v2/pt_speaker_0 Portuguese Male -v2/pt_speaker_1 Portuguese Male -v2/pt_speaker_2 Portuguese Male -v2/pt_speaker_3 Portuguese Male -v2/pt_speaker_4 Portuguese Male -v2/pt_speaker_5 Portuguese Male -v2/pt_speaker_6 Portuguese Male -v2/pt_speaker_7 Portuguese Male -v2/pt_speaker_8 Portuguese Male -v2/pt_speaker_9 Portuguese Male -v2/ru_speaker_0 Russian Male -v2/ru_speaker_1 Russian Male -v2/ru_speaker_2 Russian Male -v2/ru_speaker_3 Russian Male -v2/ru_speaker_4 Russian Male -v2/ru_speaker_5 Russian Female -v2/ru_speaker_6 Russian Female -v2/ru_speaker_7 Russian Male -v2/ru_speaker_8 Russian Male -v2/ru_speaker_9 Russian Female -v2/es_speaker_0 Spanish Male -v2/es_speaker_1 Spanish Male -v2/es_speaker_2 Spanish Male -v2/es_speaker_3 Spanish Male -v2/es_speaker_4 Spanish Male -v2/es_speaker_5 Spanish Male -v2/es_speaker_6 Spanish Male -v2/es_speaker_7 Spanish Male -v2/es_speaker_8 Spanish Female -v2/es_speaker_9 Spanish Female -v2/tr_speaker_0 Turkish Male -v2/tr_speaker_1 Turkish Male -v2/tr_speaker_2 Turkish Male -v2/tr_speaker_3 Turkish Male -v2/tr_speaker_4 Turkish Female -v2/tr_speaker_5 Turkish Female -v2/tr_speaker_6 Turkish Male -v2/tr_speaker_7 Turkish Male -v2/tr_speaker_8 Turkish Male -v2/tr_speaker_9 Turkish Male - """ -# Dividir el mensaje en líneas - lineas = mensaje.split("\n") - datos_deseados = [] - for linea in lineas: - partes = linea.split("\t") - if len(partes) == 3: - clave, _, genero = partes - datos_deseados.append(f"{clave}-{genero}") - - return datos_deseados - - -def get_edge_voice(): - completed_process = subprocess.run(['edge-tts',"-l"], capture_output=True, text=True) - lines = completed_process.stdout.strip().split("\n") - data = [] - current_entry = {} - for line in lines: - if line.startswith("Name: "): - if current_entry: - data.append(current_entry) - current_entry = {"Name": line.split(": ")[1]} - elif line.startswith("Gender: "): - current_entry["Gender"] = line.split(": ")[1] - if current_entry: - data.append(current_entry) - tts_voice = [] - for entry in data: - name = entry["Name"] - gender = entry["Gender"] - formatted_entry = f'{name}-{gender}' - tts_voice.append(formatted_entry) - return tts_voice - - -#print(set_tts_voice) diff --git a/environment_dml.yaml b/environment_dml.yaml deleted file mode 100644 index 0fb3f222554eb01acce5313bf81cee4179edf0af..0000000000000000000000000000000000000000 --- a/environment_dml.yaml +++ /dev/null @@ -1,186 +0,0 @@ -name: pydml -channels: - - pytorch - - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ - - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ - - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ - - defaults - - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/fastai/ - - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ - - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/ -dependencies: - - abseil-cpp=20211102.0=hd77b12b_0 - - absl-py=1.3.0=py310haa95532_0 - - aiohttp=3.8.3=py310h2bbff1b_0 - - aiosignal=1.2.0=pyhd3eb1b0_0 - - async-timeout=4.0.2=py310haa95532_0 - - attrs=22.1.0=py310haa95532_0 - - blas=1.0=mkl - - blinker=1.4=py310haa95532_0 - - bottleneck=1.3.5=py310h9128911_0 - - brotli=1.0.9=h2bbff1b_7 - - brotli-bin=1.0.9=h2bbff1b_7 - - brotlipy=0.7.0=py310h2bbff1b_1002 - - bzip2=1.0.8=he774522_0 - - c-ares=1.19.0=h2bbff1b_0 - - ca-certificates=2023.05.30=haa95532_0 - - cachetools=4.2.2=pyhd3eb1b0_0 - - certifi=2023.5.7=py310haa95532_0 - - cffi=1.15.1=py310h2bbff1b_3 - - charset-normalizer=2.0.4=pyhd3eb1b0_0 - - click=8.0.4=py310haa95532_0 - - colorama=0.4.6=py310haa95532_0 - - contourpy=1.0.5=py310h59b6b97_0 - - cryptography=39.0.1=py310h21b164f_0 - - cycler=0.11.0=pyhd3eb1b0_0 - - fonttools=4.25.0=pyhd3eb1b0_0 - - freetype=2.12.1=ha860e81_0 - - frozenlist=1.3.3=py310h2bbff1b_0 - - giflib=5.2.1=h8cc25b3_3 - - glib=2.69.1=h5dc1a3c_2 - - google-auth=2.6.0=pyhd3eb1b0_0 - - google-auth-oauthlib=0.4.4=pyhd3eb1b0_0 - - grpc-cpp=1.48.2=hf108199_0 - - grpcio=1.48.2=py310hf108199_0 - - gst-plugins-base=1.18.5=h9e645db_0 - - gstreamer=1.18.5=hd78058f_0 - - icu=58.2=ha925a31_3 - - idna=3.4=py310haa95532_0 - - intel-openmp=2023.1.0=h59b6b97_46319 - - jpeg=9e=h2bbff1b_1 - - kiwisolver=1.4.4=py310hd77b12b_0 - - krb5=1.19.4=h5b6d351_0 - - lerc=3.0=hd77b12b_0 - - libbrotlicommon=1.0.9=h2bbff1b_7 - - libbrotlidec=1.0.9=h2bbff1b_7 - - libbrotlienc=1.0.9=h2bbff1b_7 - - libclang=14.0.6=default_hb5a9fac_1 - - libclang13=14.0.6=default_h8e68704_1 - - libdeflate=1.17=h2bbff1b_0 - - libffi=3.4.4=hd77b12b_0 - - libiconv=1.16=h2bbff1b_2 - - libogg=1.3.5=h2bbff1b_1 - - libpng=1.6.39=h8cc25b3_0 - - libprotobuf=3.20.3=h23ce68f_0 - - libtiff=4.5.0=h6c2663c_2 - - libuv=1.44.2=h2bbff1b_0 - - libvorbis=1.3.7=he774522_0 - - libwebp=1.2.4=hbc33d0d_1 - - libwebp-base=1.2.4=h2bbff1b_1 - - libxml2=2.10.3=h0ad7f3c_0 - - libxslt=1.1.37=h2bbff1b_0 - - lz4-c=1.9.4=h2bbff1b_0 - - markdown=3.4.1=py310haa95532_0 - - markupsafe=2.1.1=py310h2bbff1b_0 - - matplotlib=3.7.1=py310haa95532_1 - - matplotlib-base=3.7.1=py310h4ed8f06_1 - - mkl=2023.1.0=h8bd8f75_46356 - - mkl-service=2.4.0=py310h2bbff1b_1 - - mkl_fft=1.3.6=py310h4ed8f06_1 - - mkl_random=1.2.2=py310h4ed8f06_1 - - multidict=6.0.2=py310h2bbff1b_0 - - munkres=1.1.4=py_0 - - numexpr=2.8.4=py310h2cd9be0_1 - - numpy=1.24.3=py310h055cbcc_1 - - numpy-base=1.24.3=py310h65a83cf_1 - - oauthlib=3.2.2=py310haa95532_0 - - openssl=1.1.1t=h2bbff1b_0 - - packaging=23.0=py310haa95532_0 - - pandas=1.5.3=py310h4ed8f06_0 - - pcre=8.45=hd77b12b_0 - - pillow=9.4.0=py310hd77b12b_0 - - pip=23.0.1=py310haa95532_0 - - ply=3.11=py310haa95532_0 - - protobuf=3.20.3=py310hd77b12b_0 - - pyasn1=0.4.8=pyhd3eb1b0_0 - - pyasn1-modules=0.2.8=py_0 - - pycparser=2.21=pyhd3eb1b0_0 - - pyjwt=2.4.0=py310haa95532_0 - - pyopenssl=23.0.0=py310haa95532_0 - - pyparsing=3.0.9=py310haa95532_0 - - pyqt=5.15.7=py310hd77b12b_0 - - pyqt5-sip=12.11.0=py310hd77b12b_0 - - pysocks=1.7.1=py310haa95532_0 - - python=3.10.11=h966fe2a_2 - - python-dateutil=2.8.2=pyhd3eb1b0_0 - - pytorch-mutex=1.0=cpu - - pytz=2022.7=py310haa95532_0 - - pyyaml=6.0=py310h2bbff1b_1 - - qt-main=5.15.2=he8e5bd7_8 - - qt-webengine=5.15.9=hb9a9bb5_5 - - qtwebkit=5.212=h2bbfb41_5 - - re2=2022.04.01=hd77b12b_0 - - requests=2.29.0=py310haa95532_0 - - requests-oauthlib=1.3.0=py_0 - - rsa=4.7.2=pyhd3eb1b0_1 - - setuptools=67.8.0=py310haa95532_0 - - sip=6.6.2=py310hd77b12b_0 - - six=1.16.0=pyhd3eb1b0_1 - - sqlite=3.41.2=h2bbff1b_0 - - tbb=2021.8.0=h59b6b97_0 - - tensorboard=2.10.0=py310haa95532_0 - - tensorboard-data-server=0.6.1=py310haa95532_0 - - tensorboard-plugin-wit=1.8.1=py310haa95532_0 - - tk=8.6.12=h2bbff1b_0 - - toml=0.10.2=pyhd3eb1b0_0 - - tornado=6.2=py310h2bbff1b_0 - - tqdm=4.65.0=py310h9909e9c_0 - - typing_extensions=4.5.0=py310haa95532_0 - - tzdata=2023c=h04d1e81_0 - - urllib3=1.26.16=py310haa95532_0 - - vc=14.2=h21ff451_1 - - vs2015_runtime=14.27.29016=h5e58377_2 - - werkzeug=2.2.3=py310haa95532_0 - - wheel=0.38.4=py310haa95532_0 - - win_inet_pton=1.1.0=py310haa95532_0 - - xz=5.4.2=h8cc25b3_0 - - yaml=0.2.5=he774522_0 - - yarl=1.8.1=py310h2bbff1b_0 - - zlib=1.2.13=h8cc25b3_0 - - zstd=1.5.5=hd43e919_0 - - pip: - - antlr4-python3-runtime==4.8 - - appdirs==1.4.4 - - audioread==3.0.0 - - bitarray==2.7.4 - - cython==0.29.35 - - decorator==5.1.1 - - fairseq==0.12.2 - - faiss-cpu==1.7.4 - - filelock==3.12.0 - - hydra-core==1.0.7 - - jinja2==3.1.2 - - joblib==1.2.0 - - lazy-loader==0.2 - - librosa==0.10.0.post2 - - llvmlite==0.40.0 - - lxml==4.9.2 - - mpmath==1.3.0 - - msgpack==1.0.5 - - networkx==3.1 - - noisereduce==2.0.1 - - numba==0.57.0 - - omegaconf==2.0.6 - - opencv-python==4.7.0.72 - - pooch==1.6.0 - - portalocker==2.7.0 - - pysimplegui==4.60.5 - - pywin32==306 - - pyworld==0.3.3 - - regex==2023.5.5 - - sacrebleu==2.3.1 - - scikit-learn==1.2.2 - - scipy==1.10.1 - - sounddevice==0.4.6 - - soundfile==0.12.1 - - soxr==0.3.5 - - sympy==1.12 - - tabulate==0.9.0 - - threadpoolctl==3.1.0 - - torch==2.0.0 - - torch-directml==0.2.0.dev230426 - - torchaudio==2.0.1 - - torchvision==0.15.1 - - wget==3.2 -prefix: D:\ProgramData\anaconda3_\envs\pydml diff --git a/extract_locale.py b/extract_locale.py deleted file mode 100644 index a4ff5ea3ddd7c612c640544099ab98a861b8fe35..0000000000000000000000000000000000000000 --- a/extract_locale.py +++ /dev/null @@ -1,34 +0,0 @@ -import json -import re - -# Define regular expression patterns -pattern = r"""i18n\([\s\n\t]*(["'][^"']+["'])[\s\n\t]*\)""" - -# Initialize the dictionary to store key-value pairs -data = {} - - -def process(fn: str): - global data - with open(fn, "r", encoding="utf-8") as f: - contents = f.read() - matches = re.findall(pattern, contents) - for key in matches: - key = eval(key) - print("extract:", key) - data[key] = key - - -print("processing infer-web.py") -process("infer-web.py") - -print("processing gui_v0.py") -process("gui_v0.py") - -print("processing gui_v1.py") -process("gui_v1.py") - -# Save as a JSON file -with open("./i18n/en_US.json", "w", encoding="utf-8") as f: - json.dump(data, f, ensure_ascii=False, indent=4) - f.write("\n") diff --git a/formantshiftcfg/f2m.txt b/formantshiftcfg/f2m.txt deleted file mode 100644 index 40356a80ce7dd7a893bca233a41306525193f2f0..0000000000000000000000000000000000000000 --- a/formantshiftcfg/f2m.txt +++ /dev/null @@ -1,2 +0,0 @@ -1.0 -0.8 \ No newline at end of file diff --git a/formantshiftcfg/m2f.txt b/formantshiftcfg/m2f.txt deleted file mode 100644 index fa69b52dc8e29db4697401ef2766dd0b6c6f4b47..0000000000000000000000000000000000000000 --- a/formantshiftcfg/m2f.txt +++ /dev/null @@ -1,2 +0,0 @@ -1.0 -1.2 \ No newline at end of file diff --git a/formantshiftcfg/random.txt b/formantshiftcfg/random.txt deleted file mode 100644 index 427be5c80412098ecec082b3a06e867ddc9a7ba2..0000000000000000000000000000000000000000 --- a/formantshiftcfg/random.txt +++ /dev/null @@ -1,2 +0,0 @@ -32.0 -9.8 \ No newline at end of file diff --git a/get-pip.py b/get-pip.py deleted file mode 100644 index cf68a2b3426decf01bde021a50c47a2115af303a..0000000000000000000000000000000000000000 --- a/get-pip.py +++ /dev/null @@ -1,32657 +0,0 @@ -#!/usr/bin/env python -# -# Hi There! -# -# You may be wondering what this giant blob of binary data here is, you might -# even be worried that we're up to something nefarious (good for you for being -# paranoid!). This is a base85 encoding of a zip file, this zip file contains -# an entire copy of pip (version 23.2.1). -# -# Pip is a thing that installs packages, pip itself is a package that someone -# might want to install, especially if they're looking to run this get-pip.py -# script. Pip has a lot of code to deal with the security of installing -# packages, various edge cases on various platforms, and other such sort of -# "tribal knowledge" that has been encoded in its code base. Because of this -# we basically include an entire copy of pip inside this blob. We do this -# because the alternatives are attempt to implement a "minipip" that probably -# doesn't do things correctly and has weird edge cases, or compress pip itself -# down into a single file. -# -# If you're wondering how this is created, it is generated using -# `scripts/generate.py` in https://github.com/pypa/get-pip. - -import sys - -this_python = sys.version_info[:2] -min_version = (3, 7) -if this_python < min_version: - message_parts = [ - "This script does not work on Python {}.{}".format(*this_python), - "The minimum supported Python version is {}.{}.".format(*min_version), - "Please use https://bootstrap.pypa.io/pip/{}.{}/get-pip.py instead.".format(*this_python), - ] - print("ERROR: " + " ".join(message_parts)) - sys.exit(1) - - -import os.path -import pkgutil -import shutil -import tempfile -import argparse -import importlib -from base64 import b85decode - - -def include_setuptools(args): - """ - Install setuptools only if absent and not excluded. - """ - cli = not args.no_setuptools - env = not os.environ.get("PIP_NO_SETUPTOOLS") - absent = not importlib.util.find_spec("setuptools") - return cli and env and absent - - -def include_wheel(args): - """ - Install wheel only if absent and not excluded. - """ - cli = not args.no_wheel - env = not os.environ.get("PIP_NO_WHEEL") - absent = not importlib.util.find_spec("wheel") - return cli and env and absent - - -def determine_pip_install_arguments(): - pre_parser = argparse.ArgumentParser() - pre_parser.add_argument("--no-setuptools", action="store_true") - pre_parser.add_argument("--no-wheel", action="store_true") - pre, args = pre_parser.parse_known_args() - - args.append("pip") - - if include_setuptools(pre): - args.append("setuptools") - - if include_wheel(pre): - args.append("wheel") - - return ["install", "--upgrade", "--force-reinstall"] + args - - -def monkeypatch_for_cert(tmpdir): - """Patches `pip install` to provide default certificate with the lowest priority. - - This ensures that the bundled certificates are used unless the user specifies a - custom cert via any of pip's option passing mechanisms (config, env-var, CLI). - - A monkeypatch is the easiest way to achieve this, without messing too much with - the rest of pip's internals. - """ - from pip._internal.commands.install import InstallCommand - - # We want to be using the internal certificates. - cert_path = os.path.join(tmpdir, "cacert.pem") - with open(cert_path, "wb") as cert: - cert.write(pkgutil.get_data("pip._vendor.certifi", "cacert.pem")) - - install_parse_args = InstallCommand.parse_args - - def cert_parse_args(self, args): - if not self.parser.get_default_values().cert: - # There are no user provided cert -- force use of bundled cert - self.parser.defaults["cert"] = cert_path # calculated above - return install_parse_args(self, args) - - InstallCommand.parse_args = cert_parse_args - - -def bootstrap(tmpdir): - monkeypatch_for_cert(tmpdir) - - # Execute the included pip and use it to install the latest pip and - # setuptools from PyPI - from pip._internal.cli.main import main as pip_entry_point - args = determine_pip_install_arguments() - sys.exit(pip_entry_point(args)) - - -def main(): - tmpdir = None - try: - # Create a temporary working directory - tmpdir = tempfile.mkdtemp() - - # Unpack the zipfile into the temporary directory - pip_zip = os.path.join(tmpdir, "pip.zip") - with open(pip_zip, "wb") as fp: - fp.write(b85decode(DATA.replace(b"\n", b""))) - - # Add the zipfile to sys.path so that we can import it - sys.path.insert(0, pip_zip) - - # Run the bootstrap - bootstrap(tmpdir=tmpdir) - finally: - # Clean up our temporary working directory - if tmpdir: - shutil.rmtree(tmpdir, ignore_errors=True) - - -DATA = b""" -P)h>@6aWAK2ml*O_EvJ33*7hs003nH000jF003}la4%n9X>MtBUtcb8c|B0UO2j}6z0X&KUUXrd;wrc -n6ubz6s0VM$QfAw<4YV^ulDhQoop$MlK*;0e<?$L01LzdVw?IP-tnf*qTlkJj!Mom=viw7qw3H>hK(> -3ZJA0oQV`^+*aO7_tw^Cd$4zs{Pl#j>6{|X*AaQ6!2wJ?w>%d+2&1X4Rc!^r6h-hMtH_<n)`omXfA!z -c)+2_nTCfpGRv1uvmTkcug)ShEPeC#tJ!y1a)P)ln~75Jc!yqZE1Gl6K?CR$<8F6kVP)a}pU*@~6k=y -<MFxvzbFl3|p@5?5Ii7qF0_`NT{r7m1lM_B44a9>d5{IF3D`nKTt~p1QY-O00;mZO7>Q7_pjHy0RRA2 -0{{RI0001RX>c!JUu|J&ZeL$6aCu!)OK;mS48HqU5b43r;JP^vOMxACEp{6QLy+m1h%E`C9MAjpBNe- -8r;{H19{ebpf{zJ27j)n8%0=-6Z#elILRo@w9oRWWbO{z8ujDS!QAC@3T%nJCf;1rX6ghzu#Z}<GSE4 -4EG}J&ngovyJ$%DCh>R@K&*?Hgj1WFD91+adaM4G`4Xs@*hA^t@nbDYdL)-aOjsW~3}QVVby(8=@7U$ -Fzj5Y{w!2hUUH`?e9j7WDA;>-1aos>7j{2$~BfyL8p@__Y98dsP#Bs7^<X<wp+-f{6%mc1~N!0T>lWF -=e_gr;(4^?am?Cp93+7b-!?~nb}-$cPSR1zckA*zNp!)$;YjlZrfn&RWNM}=QA7*cb8A{(9@{5!vBfq -rEMoeu5FvJZngI@N#4#(2v$WnMGCAVD?b9t8W^qDfcFBe5ZZF%dPAPaq#<aBs;+HiVj+9PK#6heH_-Q --kVzlI0rncJH8Q{ZFBFwrpI^^9n>>ikclG~yPvCg`JUGb_W2#PdCXxx}7!|T*xc9qdnTILbO-nAJaF2 -~0snMF<S>DU<%E01X4*yW9@|}F2;vY~;0|XQR000O88%p+8eg`F$&;kGeqy+!~6#xJLaA|NaUte%(a4 -m9mZf<3AUtcb8d3{vDZrd;nz56RT_b?l9y`mj3AXtV0MT+&(WJ!7$x<XKFy3uA!t|VtMivIgZJ5Ji5n -+}O2laG&&&kn<Ivc;_N2)LD*FI(_y<sdV43#Nct)d~Djbf-Z=u8IOJY7eM4${JnKJ`I8;rxdD0pnokZ -%t1O(o{kB4L(#6WNXXLn@Ri9Miq52d?_ou0Rc)-Nw2hL1)Vnh{FFp1(!Y~Yi6Zr7%Cv?>|Xq_^eh*q` -qYNbl$TgcX!{RW4b=Vw*pI`moV*K|DJ2bY*KQV<MvTF2m*rdGtEu%;pm-_&W{2D2Z_Z_^twpM1Z)o=+ -AqhUg-JPjL_gITiyC;k=D@`*;L!0=}(r1nNN>iviHGglIK{X_)>pN=IEr427|<0g`vfCSX-CrF6hnx- -fU6^LzLVM{GttvQ!RX(K-@qvQ<9nZh3{TwCd*xxj~wep|+d4YrpRGd3uJ(;$x#MJ^wO(dX9-I(W~SOL -|!j@ev4<Eyb3wu9PhFEUCh#7vF2;?78p&2>#PBd+t2O-3Y4TDlA%@&y9h}l?d7(gvc*a&O+atWdOv5| -XtFg8N1I1Eg2~6T^Prn{|GZSIw2~Ql9c?>!a3=lwO6eT!TZzV{RAoH`=gPAEk0OKF^-L_LxAV)%Ld>V -rC7Ea!84dqJ@cSb~%=6Dm=^V^deci#%k)qhs`k`mikNs;GRv|T<cNgr(f&zrAF^e3QMFK@rmRukK<~h -DGnzmlr2lU<HA7<r6E*!Gq-55ghPB?mHgq@`sC)hvW;?&?lxAeg2z~=5)lly_z!5`Ee^4m$72}H*Uhu -#huJ3^d6GO{;G9x1r>RB1+w&XWHK8?pSmvO+Mn5HP0Rg<yXP5hf5`O3iN%nTcXZlvCP~V}zj31%LM>& -0e2!{O&s!2A%Oz`W5|6)QOoeMptG0vVbf-p%MA<(l*rGUr<W}1QY-O00;maO7>RG$G|nf0000U0RR9D -0001RX>c!ac`kH$aAjmAj<HU~FbqZae#PBbp85|A3~X;eVm7U5EhTo8IEDN@P8ls7-*bu-NCRQBoJn^ -iQAVkDRLUzpPe}~%$w)4VGpq9sQ9OsArVq@gW&td8ktF(xhi|JBx9SfJ>&U%1)EvFVxRjSzi=C>J@cM -k87yJyz4~-Qcqlg}hXv}1CF`fEox?~SG{pae%Dy$pBG>tnWs3{>FohpTZSG@fe-hAmws@4PFv7Mv`H@ -JnAXTbgKqwrl)IWaYE>+%OsO9KQH0000802@m7R+hDJp-}+<06hW#02u%P0B~t=FJEbHbY*gGVQep7U -ukY>bYEXCaCvo+F;B!W42Adn3hP*|5~K?fa1xA6Cs^1JI)&D4jnX98E~x(=w{RdN$P(+xdH(X;aUMbE -La7HDOJ;>ViJroJQOYSq=f31Z#UCgsvZ;PjisC7~V50}YW@1zhN!C_4fs|i^>lX7r-W?|$V(y(g0ZOD -x-5bTWf^iasXM`rih^<v!W`vODRRPWL)$4oIy_Lw@%52^TY6ciWDVPL;9>?Sk#%z{jZl{Ri-7?Gn9_p -NH(fR_VZQx#ZustU5xCHVj%1=)fT*F;XSi#wiQR~iuoy}(RFp&L9pfC#Zn^7Ax<k&)!ljMjX4O3A89S -m#?Gl(S-mv1t5$e0@ASnWu?TZ>z>2yIKB7|@~y3-1&J5eC&FySna4hw0fjd92G^LTzc+Br>7Y7w1=({ -s_3<|LwzLQl3jT^=CKlyadUgD7M{+)3>-rRJjjOO9KQH0000802@m7Rtz49V_OUW00Srh02%-Q0B~t= -FJEbHbY*gGVQepAb!lv5UuAA~E^v9(T1#`|xDmeVS714ZB@>eSIHgphB=gYhxH9p$W;~m0sZ?Bwghq@ -hk_(WwwJ!hnbT<GJASv%`Dwoy462V5JA74KJ*z>%XT~X$2UELO<u8zEFStohU_O)Pztjn}5>Wbx^D5} -p)=7nt84rjpQ!t=bvqBu6SXjxf*{)}V#v6kjnleUMl*qKLJw7ma)>Zw|O-`<I|S?oo9WLaI7Jj0bG(* -*BD&IQk37g?)l+Ec^(x7Q-g_%6+Eu3@x)k0Kj_pRU%)tGDY{|G2pPA!HXV7wN9#A$tcJh3tKUi=}1AK -5}@x?izfD%tH35f>#U0v?-c6x#d+}i#X$=E%t?3;qCzPO{p3XDn-l0g8$MLf}@FhxjzhJPffk$LZTb= -tRL0mAd`8KB>SS|Ny1Wz!%10Z<UfmdQGx29X`GcsEWtz-Ff;S(hF6ImoSS3#^%FkxHfaDO;NVa_bb|K -}GCP23bBvC>P4l!(Z9X~Qr(M}5e1M{2V-3vl>e`}|vFvt@s535m*|M}OlVSM$)RrHcBrimd6?lFPUdh -^8oI-}L;caqLRJjDa?_Dr07Ysf#%z>QWYbSDW3_SKrT&dAFG`Lt`@W9KJiJ}<Pen(?|l2qvtTpBDE3$ -PFaGv!_5r%NVV5wab92Q2!l!s&*fyMeK-hVh2zaA2!M6};_4#rzaz2Mp9n*;gyJW4x3cM{%XBOu>-Jm -Eim0UQMILLA#<&5?}IiA5v%!>tEItSETqsiWmt%EBta_NRXj{H*Zo{ba+L0f#Cr>zURR@B*qHa1TLRl -QIY3XdTuN;Q8cY|sQ{2jC4o$vPgD13HO~sl#?~l?=&A}cMFP(CNl(yMsR`-t2i}7DFz8rYgPveC_)gi -?sXaiv@_U|jtx7a74!l@<;4JHe05F%Q2)SdHLgXxn>Gh!i1WT2K^_-Mqe1LMOvU4R{fH+QfQ%eQYa2d -+e#MFwQ*oaQwvhGC2wTnRW_zJ##J9Pw*x1bE%az6lfqS#7Kz)e-Rnn7GhG_W5G{(q)4xvM*<E{C*%%z -|@dedK@>rJ>eb1rMlG<Q#PU6-U6LF}px>rLDy?OC^}{4osL<Xd-&gathY+6!(-G<KQY^Nf<0_?AJ2h% -baI*&h>lt4f7K8F}Z|`B#E1o*9RQ|@+2V@Bv`<7P)h{}C>a!R4k{Eil{;q0l?<O`2W~qlt?@lZyUjHu -vR&7*JrH75V}PZft@P>#-&mQ~4}M0|c2#<t7A2yM82G?A2D5@m!TT*N3NT=q;Asoc+MTS?=ih&;4fKH -wB*C}hn3lz_KnbzR>OI;L{3Tudz_N!_rY+hTGzghD(#5kNVHprZaZYt##W$uR8%mb^&)N6ivKk8Fogh -BMr8%*?0wS)XN@6p#nApa&Y-w9Ew#Zu@h&NSzS79U`3ykgq8X+X_$OD4A`np9UQ(OZ&?G>pd7)u100h -6&Ehk$^P1yyq9_uwBi4bItZ;{YLK4idID%pU;f7}zm-6NU3Bg;MsQ)C_Xl%pd#APfelK6ZX)4Meva<t -#WouD^v)6>rN3gu`&(XOy?+-ilBrvl6uD3dNNZ)`pUd=i?WZkc;yu4_~oaIcdwK6<&R*Ivfg2cB}&44 -buBuR0s5klsH#FHwVF%6r=l3b;v1Sm=o@?fr!Fer2uDL9L&_isoatz297jX@o{A}`XCC6WOfkP0%87K -kvdJZNsFYvO_uCPfDQ#!T$k!x23L!YQl05fIp!Qum#J6eLAwB~uW~Tzhl*@BpO*0iZn3-W@i=nr-W|( -11<!9_wC)@f6`9@{Twzk7R0$51^Jc}CuE!GAA9Xvvbt-);$WrHdL_|lAeLBQZ_CO#8e=M(+dKloNd^C -?t#NN4$3mrXN;--92d@3I`3A83y^SY1a{JrSlpYTf<uyg@8?u9hn^MyFZ_gLeQ<UO`!eB)9Uqb|3x48 -z73iihbh>w{K!f#O~7gF*~{#IxcX?lmI`bj@X}m2N^O|Q*fI&p?b#N0ES?Pkc+y}Zj6*0Av01gLhWTd -nOTbhdhE1BKPS3Fg`Z@s&2l@TrvgBPRJC~P2NN1QqdwS}`bs=5XEmp~mF78qqjMEpthH9w@9Bbi4O^< -&W#%iuEa|8!D0@I9@+SrhW~?;jIcMk1?8@}gUVbulb{fRenF5C)Hq<sU(uBiQ1*0^E^hAIe0Dgo9vdT -jSUSyEebQ=m&`3&lwsT_taZ=b~|iRqr6=hHb3s!ZBEizuku9O4FbAG`635jgeYT!aSk9!nV%5DV!m`y -pgT+?87k+yw%=72vpWKHm%I43^$<JP-gMJvgke%q|fRx&y(^Qde)}^Hg2FdU5?0tMb)P*KglnUcUeIa -sA=r#r1j^BZ`5=<A4T}Kb#V2XOX(h6NkuXuu<y{ln7@{>^fLi3aX)oB9={Aw5B1Eya}ud)zI$Kgq)lD -w*#4Ftggw^aT0%+Vu2)HvSC$KTnIVg4EflgOXhv&oh3ZSz1L>6#^bnq(m1-OmeK*vFp=M92_79T`!l} -{9`kKpLiSkSXPgGNTXzC<Mi#wGI%2)E8QZ6lns5f$h{oGgD6pb~sS%_2br2JS3y;ztwFeqDdX60Np7C -{4H-5j|G&bD5*L40y&&58oUwE*8cHr4fVjoD1Jb{N5(5{*jSZY}Z%cvtO+)<AYufl$xy&c4Z?4)+A?0 -c+%a(ELlNY48bI{NVe$<pj-eZ4#3ki+j%$Ub>M!m$>YmKH1A`kiHiQ*43y-)7dhX|M$wzbh0!*8wWuO -$+?!aMXV))oSMbZk=4=^~Bzkn$82y9L)OTJZ?WBo<WHOe5LjrV}0-gqo9*@{_X22Q$e1wfAO!OQu2Gq -d0EkxC&m$VDOr%ZU)X{|-`&EC`&Pg%8Zn9OW0l#*U@lWj9krdH$|>qw*oo)B@x+ciJET=1kF<^8cqPG -P!?R*vWNM|ELa#g+A5(FI=e?5HVwlmM86Sq%vDSn84<7Nu4Cy@v^93Go0~&XH@{(?4R;W-+{wnaSX4h -dBLaWBKHJuX_r9tZX^)!C5M>y}CCk2Bg3Q180j_`3MbCnUAON=wR_Mw>=B(2!qdobEOu2v5=yT@shGM -~r3jQ4Lc*S5nc8W7-2G(!r^M~cFZ6m}#W&xX`N#98l}tUwm`Ct`*ss)D%~d2{jaf3BD8RZT}pLU*I=( -}#C|8y|~WONGYELk8FDK9$3V(nS{-09xll!z%G^#&nYYK%@=^l2j(@kWt-j^soOk{KTUk>+MW2)n^^6 -(IL-fyvERX*?qG*p`hD|5y$?@0$n)X&O2H<zEKt*HL*`y7(dgS2e<W6b`M8O4cy!}N&|O{PSEhrFs!? -%zk_gXksUd-UHQ;gJuNg|85n^_?)!gYWND7#{zr7A;`8{Z%ssd|;b~QWY2#YaQqg_mY1@oiTQ7==&v- -%=^`ShasOqSbjyd!TrLZ^WNp-d~!|4uMvq)WmMdkv>;^6Ex)SV+1jP-txm+iOw9lzzJAF$`cMda)C%T -GVJkVYGtLqIROwK@kZ{Ay>IU@jDOX%0SdYm|x;oqbm2$vloyp_(hz1t7I43OljOG#o7wOvTf?rAeARa -|#tj9{cl%Yb<zELjUf235p$gGdmob9D4eQtrpNi`bG(`#e=u35Pne6XC}{Xg~>U1ah!CbL`!H33}dzr -htU}qX&Y?3r~m~9(#^Nq?X+Q|_9G!Gbecu}-EupvSfdppnjX=t2xj3q;=s^aZd#RHI3bE@&IndzQQe? -i1`zO-;MmiOM@SbDofi_1tz~EAd#Gh=@ohyX!HEeD{|0MK8X+k#$FHr^$7_}l_w`+ZnbT?no-_f_d2^ -gF__@%r^IIH%GBQ!NI72pmqqVd1vE@1Pr*4|@_{B@EF0PV~*Do$#zj*ila-F<df4GJQmTtZLVA!4a=h -Nn2OZ>feF<f3hVA_84=y+KZxXO+Gkz*ReDEu_Ovif+0mK(M&GF$CE_X^#<oYDeJIcRBC`g=;?*kt8Ah -2!YfH*1&m`(}K*=8p%0{=V%6^cPXx&?$FBn<+|4biao99nbt-*K7Fy3cuq7ZbJS?J7{qg$RHFe{9lkS -(e{ts6pOTgz5Hd}UL2c}*5&zHh+4ot{=ZO50|XQR000O88%p+8(ZR!S5DWkSy(j<x761SMaA|NaUukZ -1WpZv|Y%gPBV`ybAaCzNYZI9c=5&nL^VynOiRmi;5aNJgain`7vcHx&GcHj?(1F;fU(%KZsaF-`5MgM -!BnO%}gk-S`*rVT0>vbZm^^FGfkZ#J7flbgK~uVgNF>Y#FaF`LaUF7%-+Dl7KV>@&S?9zU2OZ+>URZm -08I^H`XRZB-mZDJ|^~e)wBFx(RzKvAh|7nx7WpE4{G`@lqRnzbUOQa+zItGP;bDTa~9p6_;}JQPNqll -{?c=cqexYp>wOMvQqd?a(Phwky}+65WS0HZFSa?+{nDh^+sm;N5$kqW|%M-jMb-&VrJWYFY;ULN#F04 -%D&c_;;kb)4@Ign6Q{aT8=KTs))4rLN4~GJJ9cF{|Jba5iQjiDJrX0$TIOnOF^e8sbtn^X)T$NFj-8@ -{iD(+L$w!^1W||6QX|+Kfkl2FcySN}PQI%LV?h@~meaT}{!YWRZ`NhSX?_PZK;&t-(w{Ko2ub;lU!un -ZJX>5qe<=~GOsoIK!+!4%fY?Ln9d#;VG76M;4bMf#m^kaD;@PQA1r)*v2LSj&^GbPMkK6><66k7}t3G -%k;6qC2p4udo4tT?R?rHN8dg)qrSbuz1WRSnNFs+5(4TFfe%EoKWbTh8VSp>k7KDv@TRHLsjAy~-W$1 -1NT<M<!PJ21bfzynZ&H$9wfD)jMTu1VvnIGHHz9m~16^3MtkQO>W?#JpWLXRdK6RW#F?EzNxpE#>lp) -L@KQmY%OvdbHSvR#Q(wVAd@e}J8Z3r!je`je)Ck^oa=V6;$d%XlO!@K+b%*1V2d^Xy2w4ltjxNEf#-3 -%Z{ALUeFZ1U3)_(q;J7d`IZmt%WR2RXZX+EXcUxBd?R0*?FT5;q^X!cf+#1h3DP+kJ#Eet+Auqb=xQF -Q9DDq=$BF)ebs7G3HsErkC)iV2`(78&*QQLjTPOCZkd?wy2ag;d-6k?}x1rJg}=7ORhL$$#ZPN^$zNj -Tg>9AVKS|J*h^19BgTg-Si7jbyU#zk3OeHj<t-IMlm6rR`fViD`s2A{e2W^WtqKcbwxpdNNPD<2JGaJ -L{q*c?;uRfj(f%X%UM5#|+HRmaIvN{DkDko}?lF&vu*Mx>X#w6z)PBwmsR4&u*u~na&oyv#<NKZYZrZ -BZDJNy>6o7)N(dOcowdnwS-4$gvNc5Z?Za7Vbu|?4jtqNxFtz=&^dnjT11v;4IL1ID{P8VIaktI_HeD -ph^a6s9Mm}XTh}^EIel%nssby5GkriNRV6AM)!D*Xygb1)d3!pB5HAL~sf^1LseG+ybyersu{iS!=M* -kuF}3F4jbb^91EN5$b*Ak}P;HI_0()yqv%I|AL85vcWASBqD&-~0$E7x=R_5}LkN*5*=wa8h^Qz7UIU -fvi%EVSL^kBCir+nM7d*!60Km<7sPqu|i+!T_ZXPIzO$7*Xs4&En>KIlwV0X?HObwzqXrbaTfl$l{<B -KPH!1x#rjeblEt3Jv_m7FK3pz?PVcp#RW4_O%h2Lh5I_Y95Q{#ZleTww_&#H`+mdM0}y@Qf?0&q_ZH^ -2@;pY*hqXKT?7$NK?VO?g;lpz^n4=2<)~wxqpl#C0&$N?sQ;Fn7LH9mCoz_D<tfU5T82egZ~u`Pqa@{ -$8~bX_H4E|CTM2q}SU~OTx1B^y{<?OeT`wQqEWDW4kCu<ShsVn&-NTdR%}pn*FY8QdP;U@<D7<P|X%- -!{OdR%f__C{?T!sLOgEE9I2@;~KV_=(-<5>}e1zjN>Bi_ss8)0_r(d{QhFWq$@a3>XM?j}$soOk6IBI -&u#!le>AE~2k_cxYGN!FNPI=l!F}8{4xeyA%X@jh$HDXDyZ`<-I6shZfA>e12}YZck^uA^W39p#_)p2 -?1tXA~?YD!vm?bE50NhSCj^BGD}h;>RuQ2#i7i&_fqLqRTWi}nLKk*4+C{cI`FT+ETMNbO%(&2ZV})a -A$64|l(d)5`Or`KCEg)Hd?>D=q(YqtM3teKWMm{m^@+;W!hw$?$yfP(7znro3iP!<JmY?<@gVuFra5k -J7%xZsJ?~(%FSN)LTqYed-qv7;91LwihR)?bi*p0q`d@IbKr9aOcKhFab+Vi}3Dms`7t8!42!AoQV6^ -GmiSV?R7(o+OB&fm6`GT<l9tZ)T`N=#u?)W^?TvikxDb3eqkV}ZnURwZ#b`aI0$g>k!L^00BCW;vx+q -NX+TzEJ+U|VJoPE$|UH24jzygsZkM7^8isYA9!ZY7WyC6|sYS73jlUte`zO3Aa%^$)d*#Z|nEMSSVQD -}>o;@grJ5^0LOK=tx&yb%(S`XAOR9&=~f75q}ZKF-<~5a7#-pFZMQ;&TtGsIz)hE2gRavlZHtiLkZvY -{ZwSV!k~w`La8T+vQ`*YDPlDZwC{UD=Zn-1a&Y^0ko|)NIqvml?~u<C=(JHEyVQ6DH^r6<#CSi}FA}~ -n>{qy;lD}oo_g+kf^F0msufq*K--n%A)TfOG-cds<|N9Wt{C3jrdGQS^DtTw`*s)69PYV+`VKuz?ioy -k*jhrh$Xa2Iy{pQ=Fyl3ea31xSnpR<x~tJAQ?JC|O$Tdb%%d)`~=uH;7V;YMHsQi0BE)thj*=u8QGT+ -GLb->s%F+~5Fr=M|@FUGJj7EPZA#cIXKycEe0A9=P<3{}8VzrnB+QX`x)Je2|u-Qb7SFaxVx`#8w*J1 -?3mE?gP}g#VDb`lB4rk&&9(}DF1N9{N5@jA)J!i*ogX3G6MTP6My3*$(1bVg<Y$ADXY!?QrXS@m>6Qn -!M<@5_Si=GPt~X7Kslz*{=cXBHm-h3x${9v=mfe)LP!=9;k=?-iw;ej0gk3T6$LlFQ7_SU{0H>s^A5X -RmB11KbUVj#A&NVnbCr5iDb9=9evaaM%=xCes3hP=|4Q^Ujqt`09VfB&Qhe3F5AVAI-HESy7v%BPx6i -L$CGVeKUA;`6J$?54s&BwuR;+;#PRW5^x1{c7xm^-ibAT-SjIplI?u)PTHiPyg{W)cffQhkmQ6|<!k@ ->=OrXGd}tA1a}6Ww-9cMttV?p{AAlI_b6x~JiL+-AL7nso0=65n;wTcxPwCEg;}^VA%A;aqSj&R;3?n -$c0ZvFlx;`;?_X60p-s5Yv@=La!0Vlg7lsaAl+m^~pwj*M_>Vn$>pu@K3X0Djh9+SIsLaDjd@l=_sol -#DA(LX;(&l94T@u&$%E?2W2XHVCECWWn9$hLc>O!&WNLBrg8u29`Jo7%R#nbcs<A}+;K=jh#E5Tm<z{ -ugnIqPEGv#q`duYAYFi_i5p8%tnuPur0VG#+s;}&<N~XrW5jtmJU8!9@Zf?G}MNNHxgSCeF3%5i0m9f -9Z+nK4iEs0Cs%>~q;;hx;bqPP3bll?F3jeP|ga5#Al)jQ3x_KVI8q`TLdzllbIEagHuxU>s~JyP!>yR -(CO7kVK@`0wzoO$a#7#)7?Z2S^$Vg-rb~G}mtJs_M<eO<1?0xy=9RyD?<OmKbR*=C(V`wLlW+G8o*rK -AdSBrRisgkphdn#LlTInT0QNJ>#JrkmB3!{49w2^?@W>4O@Xw-K*(-ps(;%|1m^9fopm0d{)eQjvRPV -r~Jt6SOhBZZ{nvUJ`3Uh3yHs$nK=`gHg#{t|7t9X)aIbjC#7x3p*|N?nxw$cSpgj43U}16A`8*Z>wH@ -*JIFIqUwr8gv07It?g!0&E*`rRiiI@qfLgyEvU*n3S<0rR<Ik~F`$pJBKVhnPs`Y<Qmv7Qi8^G_|id$ -73D@|`q>{Oc{i2pONRc`?tYpf4{_vWiNOMZXYsa^e0Yj~!AIh~K}y6eSo2|#uEhcCW-@|c1Fd2C0wmF -F~CKcT-qpqrVVbJF0DTl(C`SoE2_aTcP#tr!~U0bTI+ZeW_@dBeEnnCt@+J2Z)Znf|DN9VPual~~t1! -M7Ri90X)lJFnw6<x}p!MA;=mKWJ{XmB`gmz!o4d;TrVmG&#MdyEC0!GBCmT()n1Hh?#X4mVG+5a3Rcp -XLa5h{R>b_0|XQR000O88%p+8N-^Lqfe-)y4>kY*9smFUaA|NaUukZ1WpZv|Y%gPPZf0p`b#h^JX>V> -WaCyxe{cqbg_ILjkoQk3{=BVp#INS{Q?y|-01xu44>Bk1c&=iY~d66Z7l<oS0+~0ohJ(3bB$w^l1hck --SmdMBV{l(WH2!1Z|rMTV5q!LBW)=8e+@-@#Zrg*g}2ZQTk%~{3eTI5Am-0sJNBbFy?K49!vv7HoE#d -9Wdwje-kDKf4iShP*D4X*lx|FT4>Vj+@>r)(#x6-zXbBX-C4u;?6q0EG38$n6SIy;6Y0g76B>mk4(a3 -Az+XULh7tiTpO>Y*)yXrCcqf05G>~x8f2|UvYz)r4dd%BIH<^2+0<B^ime<K@bFkfmoM?tjv}&k%~+E -EGrgC#_g{{*>7sE1_*#v`w|Z}kB{^Hh@FT<HDag0z~m<5BX%Yf{66Qq5Bm~+UX+MZl8xAhO$o3yoKlo -gEOOWcuOj|s!D*SYkV7DwF;8++DGNF3K7R}1__^3*>3LE8#LtQ(<>_cJ>^o;uiL5>%Da%wyb#Pq-!YY -%>F8_Rbesb~o`tWj4om+=Dx4b%oC&1f-JJv!i>~fx~jpQ+4G=lG&^<Z$7>@=O1BqBEPBo?(_vlr}o1& -~%ro(_Hyc?uhh5W)a|2P38`IUEdrzBqq-`Y!(I_<DMN{C*1S0>n<_B4A=^31vJ}T))9{gTeItQ;h4c< -I{KN7gy60+_>dZfeZk4u;N(>+Vz5c0DZiJ0~ITlzG5oWRnXW(@@Sx!Oo&=7?vK~gt4Xi{Y5*S4^AYK~ -F8M+%#e!D6JG=Pl_-qo~X2ngC=~dTzRq-|ZEK*Kuu1`NqCxH?b*Y9Vagse76HfPg(D`b(A?R#K>v`N7 -8t=>TLx;(v%4Wr(ko=xqt_|x$fEd~3M&T<#@Cp26z1qDiY@o9Q>b$T+5FRo6eS3oUM9cem7<`>d!za# -ecJDlfy#iIwGj?Yd{;<Jn6llbEN?6(@A3&IDE00)DNR1ucfY8l2cdYU)}jR2vYUwoL3+52RF!x>0`oJ -v79`GqA_1rBFZ!PA1}g<L0@_zy=fgAl+KrhLib`USxa@vkvy96S0u{yQcff(Lq^+;QU_Q9Ts+3uK$*w -~0)FZKOA<*vJKEA$J&CNb<cy^kN8$AWY~Vu)ZD8G>jxKvt$7(AEQnl1w&d1YE7$DmB>n=^9_R|c&Tw} -!J2(Po}*xkJlnHU@+B}XE5NdWABr|e2plrk{(YdSPlbX2z}F!67#PzcAARBse$2-fogfN;l@*2+T3RE -*(apucRs~@SFbeB8#J*qno}~p>v>CWpB>*8UFqna3py*>G3OE9kQN#it#3h%jq*QEQY}gJW3~T|pqR? -MyyNd1~UIAhtmL&a0vw0XTQN&fKBb0qC69HSht~&H68MYZ0sWKB)2z(f^H$%fl(9YQN7%>IgkeG;pW` ->?@)bP_VRO4;7>OH`^S&d_%B5>ua=--9NL;N;kEiX7^KpewYC=wGJBJ?5_Dn1C&9~zyS59l9v2_6jRd -Z$6?j8KWhm+qMaAOpQ$>>mTsA%lM@LAdBB!{EQca8xfK^tw(w!pF_378?46MkeRG$1t&c!J{3%7`7ZB -&<Op$KHqgy<38DqT1(M~joGZt>Unz|dO=v%<>;tQnA!ROdbh~HaDDx)UDdyU&8SOG(%6n^kye9CS!^K -!DX=<5VSWi-2<<9aEWiRVF+h7HK={K?*i1@EkUp%0Vj3w}1Oc{E;Ds9K$Cszzogp!)z>g{x*t`*wJ~X -TVyv{z;u@IgqI#*SN<P?5&*4oKd1tdfOtO2sgQ}BDRL2J43DfYC$MK;O6`zkV^1Tg0w3n)hglft8K3O -EVBxGu^bVUNb_0NpOA*cPxuYs?u>)E>F11%XGcnE~3vNrGo!voxs^O+NrbWEBK4v49N32w77?UK}zsQ -N=Oj;@NTptBVXdGzP>ANMJL_En|!d<2tJ)e>BHbtH?QdDg4rSbG0ccEY*;QgZdqqX$=uELywNT3G?QS -i4v{IKlXh3K_Bd`B6{BuI8XwS8dX5KHOCz>wZd$gK_Y<2fWF^91lIL;;1NuSwAw$clQM(|3^{BI-Qlp -a(|^+ZLf%J~^}t#C)nCvcJZX?`c>99=#1{$1v>hfYykwP37I#REE}G!+EpVb%5Gs$n6Jnict8pjrP$7 -fiXT(}r_<WAKaPLuO>NxOAb7HmmjWYGK!+O_43lXj19v<|SFn}8Du|w}4zVgs@kwSjV(}oRC(vBf_-d -Gcgg)FJZF2L-tQd4c~#az0_pvfehRM2LC4Z5TQZVU;BuA$|WAvucW+m8doIVA?JDQmGdJwf1cRm41n? -4_oz_6JRpXUM#w=%-yTg;a94D{;HxsscYJ3Ms06(_S!iyA)z#DXX^LJ01h<@0{y24y;z`(guDf`b7O0 -5r)VUG)7X%eansLNUgbn#A?|ixug#Ja5(#J-lVEjwzE@+6ko{Q^g=@f8x}$cU#o_1wr$|*6=`%Y5B<J -|Vwr$SA_Y^3G}s|S=L3-=M@ot18TA8dU>=X%BL*$3H4hLr%2n>|3BEEAGA3F8a!tYyG<X!e;}Bo1zok -Y>J90%X5}*^eSVmxdN8Ka+(NEfy7Caq3Q>G0)GuYLUBor4ta(uy>;)d7?$Uy-KM#<I?Rk3ndZZciCFk -84_9|CgYb(!s3z=HDv!s23u)C6@9PpIZhv`0odh00%5_BF-(MX`qPpGLYY^`LgjFOMh0hC>l@>EZ*?@ -80tMA#jAP4hVasWjaQI_q)0GWH`0(`;rz<^v{s7mZj+!t&%N|Yp>wu7rkzye!E1tBUakx(ql&N<t%20 -<9^z{lyq!lOX_~vw3Nbd30Y&{+w`s9Vht{cf$4{>5*3@HZ7X%?BZeQdI7!pa;z7?k5PRs+W904N?}q4 -^&+9oE8L+@MirpRSMBc@KvyHQ%ClE*VHu)jt>sPpsxc>S2_VupjPf<e<A|7Ru+{c*t%#8PGd;UMr{vI -{%rq+)rHd%*xFZsFv-fOSuYildT?wW&c*6OWnmuR9iz%=TtetwmKpWrRz)fr?5y60`;!%U=;H}i;HLY -WA_AYM~19)rov<~9mCpgOMNgHu1QlRc$2>k?9^WLfEo)g`Ex7~gZ)l;jDYVfg&0+xP>fjh~cfPx}ui2 -!V|~l2Bj6Yi;ZsDLEzkM{7V@?!j3=&Kq^J<|mC8YX{#}YAfv&2p%VN!#NW9vIv9EQs{)NU@sL^i%YGX -Ex}F+8AvuHuokiAU!dYpzUZ2JlF)Xh;5#`d4fRQ|uM{isvQOc~MVL2vGv4%ZOh$c~b}}mbP!eC1Jh!q -9cEJ$Uc-dX+=nx$dF8u>c@^x`d#)Lq4HwnYfAG5z@aGV>XD;A^@Db&7Hfi&XiZ=kTQ8ET04MC}8Vl?3 -?Vpt-)#f3r&|wxD`U78^LybY@;S9hZI$JfP%a*;52{eegj(QI$k>k*SduZh@rzJuoH;8UYzSPC0ldP- -Ky1q$-8HqYGG6gO{o<uMsD_XY-IWEcs_CL1ARIZ-{Tw@rGi*viA)9m^B*?RXUGEdV9%pVu1)Otid$M7 -Z&A4cU+8f)Zij^U5pSW7LQoqDhHhYSO~f1Ep}HLlZEO7@(^rKJorxKU_+u)y=?Kmv`hiF(DRiB!rU=< -Q|stWj*@ko1Ak6i!sTx3?g1sG@db;Qt<Hqkns8su>f65g?7Q(B$Q>ta27WH(+kBH{^IjjTb+g;)yS@` -8-PR-d2YSvd-H`fs4LNWcA>cAw_n}|}2(dxU2QX|45ya9f|B*qXZhvS#*lOFSw+=?QoYwVaG^a~_%Z# -%X*2=B6VP*__f3I!xciq)xUQXJ;qKdReH8%~z0^zG}e$?xpysoar<C{rqWq;K0olh-K@>#E5s#h$m`+ -P6e&<56#J*L}p#SdN@ihRQdowu!Qn2^J>!bVs<fm?Ix7tTxF958Lxrj%3IAxJxWye4aH%~4W9R87NH& -NOUWGvTGnp_&J}HM;b#URzztaoe+Rxx6V94}-UkS3>5Fz`KLDhwxt;5Izn@tj&%C{KLELN^TamrU={I -Lw&ZHENEq2bJCNJ_LE5f@ZPMoCkt)4N#BRobzO=@iE7FQ0z2&bR5K^kNTEZW7RGbAU-Rm*p%$ly+t{@ ->DqZ5~yS=o)R?!WaCE%-NCE&@XVhi|P@%oZUgQ{B$`(3ghq5oSIS#w(yIZICp9be&4p=_&bx8iw|F6a -xkWNS@RjhZ_KLd^kZ)6JTDkc$}F-I&l^^kN2V6sPU{aa0TPr$s^ZPRx@Cida3g012Oc8@`3e{hYkEu6 -2^SYOydTtrL5b*pIn@xBP_T-#xuV&4p{u*{Z5aHGcj27E-9q4GvqqF85{fx)kMW$jvugz5e0Hzy9SpN -pRl;Sbt6obg3erECVw+q3Wx!`xbQ%Y_UqfmqGAW&egg5A^uD>mwNKx9`1O${#3UAd^Y{<$FFA-9X_GI -hfmsk{{_ic<WlZb&(@Ahb<0!Z!n_fv+L86RytY>h#&FQsCgj-NF$bHQorYpJzO<ouNR6z=Htk>Xm*d0 -t7_|AR#Qxl#sEn6yc?c)%r;4M&kZ$;+##_^UyeYQOVKoz?G^zz@+XAOu>$w0--q)ZA`c_^Ky;>dU8OJ -*6%^^XJ9f3wJW%YLlWhw^jbBuv?V-=&IW~e7z-HWu5@>`mn`nGrA%(uGcOs5gsR`O<%f3@Rj%A@yH&K -#1V+TK?s04awJ6%eUsf+3-BSOpX#c>PWf2~nc$G7cF8*w_4l&|o0+C&{{@>P@;4$ezZQX;H%R*$?Bn9 -ii(>YiXtF(RSuQ`*YX5;1E)4(VDgZ`}Nmf$68C_55%~|O3!$p{#Cqg_n50fd7x@*iJ?6d=1b!@#H6Xw -QSE!Lm^%|OZM$j)BPz-&QhfobO%{yAHPn790H6MTdUiHu?~83cxUEZTfUv1_;tWSEH#tFaCmMR4CR^F -AABxYpQSK{D^*EPRAJB5G8%|vZzLF+c4iu<|``%jI&fMzEowll%;yl_@8|Q;Q+?5_)?H><x*<|hzZxT -KHLHvPC&&-(}xKDDiu=BG$g}Ht;caJN%Ji>9fmQLmTOOy9$#nIu@8J)v<)An2fsb}{-z?A{6XeEfwYd -5AjLOg&%`=%G0>w0|7{of8Kc2HO;MG7e;yU`bQIp4X94oX$eCiid?UwFJ+iX1%To^AESHYjSxQYEN3g -vB)#o4OG16{4P_?l}}+%zal+H)SdoxnW9QUHMc9#|wT9hnc<{O|H2NIyhy}s??lRr1wIq_JWVh;*1@x -o^bu2TW}UnK+$BXADpHmfc4VHZ|ZC@KWSC&tvd@>>6%Lx)m5~{q2jU?)&01MgQD%h31WM-kaw6rN^IR -{d%xrI2WH+5-b8)>+?y!R!+bRJ@tq-_b|vTK(Q0<|X8sjnuzQ`<uC#5JWZYJRo~)e4m#j*m{@{pt>we -0SV0XE9Q~UTGQ2!d+;pu>ObMP43+h!2c{|^KXUzfqXJ|d=Z**K2u|7my#@7n_}-^hnyF!&!(O9KQH00 -00802@m7R>_yM1-u&o0J&TM02=@R0B~t=FJEbHbY*gGVQepDcw=R7bZKvHb1ras-8|cJ<2IJ>{tAS>T -P-CLdoq_)%DYaD)2&Xs(igAoPA27eX^Mm-#uTX`NV_#ERc-Az%+~(K{=@!BzGTk@0Kto7b&{7^SJIM5 -;Nalk;M@Vv^Cll6xhj)9Q=(Eb7UiPItN9|YO0f!~yKpZ3qob=uqQo+ft5k|N?=P>!+jm!@EY_mTMY3G -wMJZ-Qz7%1$E*D8Q7Y_-3irZDP@`EHRWs!yHEi^yMSF#98=?j7h|H%(48I?G4E~Zk03#TxW0r@OUQ!z -_YsSMn5A&*ow)d)hHcm&TXH4+LiPh*kgrHJK9X0gbr`O-h~Jn!g8V;kk!ESayuLdn8;R>}`$noP};G> -^hm*1zU+n49^z3d@Dlwy^EgS{)JU2~4}p^HdocMT;=WMq&;WUQO2{=(Cbx$&JhP3JIrMUj1-B37)^2J -pcCW?KdOwB8ke8I4hBKc`*{N69vED(Yl4{NW9PB%Mk-2lHbG3^TIFWUn{9f<-^*^8jlNpJc2K31uHLm -dM44r2a2dXHESZC^Usm_!s9Chlf|+CU{zY~0JRK@yJ}@1Nfm{wU8CY6SUSLWShQJ_Ajd}n{;2mNRJaP -Jeeeo?*KeCdeT@qerbqSr27CHTS%z^~hNk`3p^`6v(nT_@aHhNZ0hRH8c%VvTRo(rJe<HDyLM~+nGeI -7bg*Y+H<j-aKnw|}UAPbi=2!=;TM^BEPh|4IP&GIxxmV0s(%b5rg72L^bI1M7eY@m(>;5HQFuf!C%jE -PdnvMMt80E(B<Vo-ShejSegcJtX_%%8(g|H*@GGQ_QiyX0-2Nf?pfuL?O!J_NYQU@|daJRqPj5^>lyF -2@K*y&2I9%^=5?HR$Q5{K3!&Nq)c}^#j5i;W6H@#EBvTW)VznM6ZVY4*!TLPK2Tdz{;}oO5*}6fy@}d -AOkf#a*5K@f^i&){9YEbG=Dhpl6jUF(i@7;`r6w;XWoz5h9|W3diqntq5o5!WCKLdSF1EB2fz>cLoiL -l?C#{MsN@h=J4!>P#Cfus6h&SPtVGt+2f1~%kYWmJj*KTHw(?1u>8>x55JpvH5?LVTOAX^R<DMuf!xC -3V0rE=3wlgfyEH8j>5|o)aicQoBh0jzZfsH~EgqRYcm{wV|5cv#wIf+KtLuMqn0d`rg%@7O^+T~TjC= -j@%R0@Q*^2H<sIP^lmc0kZomVktUb(={bek2=hqA(L-szCE(QCh{4poMXqurxGsd<1YnSCpt7o<X+|* -<Fh9SUfC1%!sg%218Ij$n&ID2sN0Y9!z5iV*vnU2#^QR19*6yN|!M39|(^X!eY?_#A6VkN>>&4AYlY* -QLO;84`b9zay+e)6!`1bH!EeBR!^Qb3_qh?3R^QNgP`U`CDYl+{`$23dIt=8ES_q)ckK~Az^&dxSY&{ -Uck>iBj(KdmIU^etbB%i*+M=|m8*1Vh>45v1_U%pGL@$N|somCTjLQYvY<XaFT+c_FcaVlfxZ5`|5={ -8BmM~AmBvTdeO9&i;224#NTz7bOpTsiuZ3mEMjTTLC#IFiAR*C8>EKyS75(>|D@`fY5E)F0R*Ji9wya -u?s(Fw7GZyy}BMr<h&+pcfGWu;2A$*BDp+kc{&)3BY7ECyrZNArb?QH@NqjoDl$hLf7FHSe%&FUb;Uy -tnHQE$sJZ6U$N1#C~sqL54t$3?I&$3YK{=^zCk&dH=eh=0QM0Hwb*AvA4%!)1346D{tuTSTOVofPsyO -y@2VCo$W^2Y0y~EeZvjBR#Q9fNehopiY+W_tF@-JZmWOww$x<TE%mS7mX`dwt^M8G+OC9dZGS`SW?OI -gRsEnzQjp<+*3i3!VZVWbe>oek$8BS_mI1C+d+b0=QIDPAW{o}E>CQf|!jw!D;jJa=duPwA6A9kQ%)8 -z&oGqAcX?(M>Ft*pvZjQyZ^R#9vc;&Sqc@Atq1to-@m>;SrNrF5}*G<XuM4YqMBNauePV>NswO}Drc^ -_uhA<}l6E8p~Rja};4lg$BZY<C)%?LU_@N4+hg_IkR1Jj{th=9~ZhZ=jy=`r9)qjrKqP{Xchf82%=cG -e*j9GP$4s>wkX!`+t1(aWjOc2hFf)Z2y`$|LO(xu3^s|w3MFMKe6tlctS3ozn0rQZ^sK4P-FYHw3;)9 -0KME&Xge|Jl?=N<_jNvKU7H}g)ZV$Gb~TqkW$+JJ1|lR9emx6UuPXkv8Vo!0JeWv_&(nhZCG(8d;Ihy -p5zH@~WM`ISw>-`T-G?*pHQB%$3uf!-pu=fYR^URB>!{!f`<KrtT2>Y0$?ftlzmXYw8A2NO6+NBE?di -I#Iymx?5aX&~7pm^;0tMs$*MP0EU4Y*tN<oYB^?8y1B%|_cblG%ZM-95}cRkoem|#@(VIecITCcdfU* -^jcZGUk~&fi$A!K+-}j=-lbVLh9VDT;>!-TGbU5Dk$fV>h<&$8Ptr>F)LTknDGSIx?}|I;7O(sE#?@U -@K!$&b;Tq=-N$*;Gx)Xq;H_X54SD0HWnuOYTcdZk!Nk9yhyJQx#~VllekSyj1T)iW?h*}!INv3A~%BL -%NWyU(rHsDi!r>q7Ppq-;QFlnCd^@T2DRnu**E|osZ=FxP{B?CgMh$Vz!2dyzXyYhXqBw|7FlWonF!- -uN-54K=i*PFe<^053J_*2%Mj)a>SQIOWR^t4wZ7-zH*~fe5$(5SU}rHtj$w7L-;7}~k{+r&`v>CQ9Rx -#uL%G>y<C)i_KJfa6XTAM@z@NBYZ*=&5m)v$aF^q75aOZ}?4beYU!h18hI(>0^b?Twf<eh)}&G_u?%X -gj|tW(K61C*p*5*ycx)+2_G6L8@QKr>k?jBzf)do~S8W|))#iXSmx7Yx`DQ5CnhFX8FiynLBgSxmFJy -(Q%(!+6NTKH-Qq(m5pEo2~^3Cm0EqJFYN*RC3%E7DuPemf;%XGI7Q2WI=LFXDG-6Rjp{^A(6uvCJdHI -JMH1Dy_qgWBAm#6&z|!f)8lv*7U5FEKW!2=pAt*A+qOnR8IIpDjNG96R1y;qJIJ`fqyr2T1C@3$#L(| -WmW(1q6(kjYv_n=7UKF@;e!HZGDejE;JQ44aJrFwbgA*$@5wWR^!b<VdBeAl%-9Zi%9RSDFY$4s~{Ya -$Aog}#TvOvzjC^+RaX%n_%PagRgo2|po$g;GTV`sI%X54x{57QKQUE++o?-5kr?gwfVu0g1^)u3Y}I@ -t^{9%F7o*rb~hI@>8J=L>5uv-_mTGZbnh>M*BGeN<9PzqK{?t(Tz^;>mfK7^HPXwt_amwUCps*Veh05 -k~o+=gVo5(M)zu>v2S;a)v7nDs&_~PA*|qDjd>Eg~&@p=&+cp>*Mj~H^cTENXZexvJ@MJw<YG-)IFi& -76i*&0s|FpnyKalBh~h;QA1!i_y}`2hy?6TW;Bpu3P7kCNIy~38B^B?cM_=z1?xFx?^#(KjKtj7{+yY -KqN+d@U1(L}jI3CsgLfnwxwfx?!@lD^b((?#j@No{89$=4NN$0ZC92i9%*U`%>fH%qEwow~RWySpFo} -WR#3PJ>r_g47WLVe(s8?V!2;z~5dl|+h`n!NN)I+o|vWL_b1yht<KI%V4$_Zenim2(1a9+s!B(D@1p) -Zo+;Gv!>%D`}M@-5RODskz^nyPoDJK9@WKIFw6_^=tg+~XI%y1F_?pt>2)=%W-U^$3<~?x;rIdt7GWq -@7IVMK?dCrC6gaJ$W=u<!Z4rKr{jI^EbJJ0BroRt0PelAy3>IOmFKrIq7G$M^~CYl<3j*B&`NC1ihzk -&DWM{(7=9oqa8h(#*XP$F}SU8HZ1091Ud~&_RT<}3>-D}YQZ@??i=3BsDVvqppN5V=Qk4dpt{%aBh`` -8dBd839e?lpg_J4EN>s@Eq@-?-drh)0jXfFy=Y0mV!NL~FVE2J@+A_!nBp10ukQzvT?!(S3ifUC3U4S -*c8t$R7bF_14ja6qUIrOF5Q9Vw}y5i_28+jjN+gUwJ(-TiO7SQ%7kAmJ+X@YNh*ex=$_6>a}?xYQ>v) -V-|_fZTbYFQg`wphb)aZ1-tY!xsRZEe*71PB7F>J=gC;6Bn?Y^dELm|dLH?xPwc0_B#L7zqxpPCiArr -e;Es*=@Lw<s2GpW8|h3j4N=dp2+$91l%aXWJD@0vqqq!zX`j;oge|-{tC`dw`dDYtr><*H8afu7+HT` -+V8tWGA%NK1}?&n<_m%gZ|Jl23PIy5{A{@(`W1bCBwMzV%oo;V-dI$(6su^k%%(<nd)!Iq+6vB1jXLF -h(ZRJmgg`g-1RAN{VQ*acvYP5h46E#Jm}=CGBfBnwvH-x~#2QixNbCqo)s4sU12_or7&YXWt$<%texo -g+06es)NLIB(stpDhD2VbH#8Z+vt`V0E1!zJk#}L4>Pbyfs*=YkLvqtCs;uGBhrn_9B603ta6!sx!g4 -_7szMNSbPB#XIkbT_S0T+M{W}L&j-oPFoxR?&Nf-%m`3~sKU-Tat&-F)k38e#1LHK6Qj-9X}kk@)eN> -Vw_!TB8m36omA~5W5tB3C{~Dvl|mk?BR+bruM;lWs{|-K(|*E(U?_fy6%l?<E~3EMUT9*v3#^Y7HHy? -jdj}<*=t&*_*aJ#cLh7OTU8`;^mSn|xrE!<h$EqW4-8O%0-(TGPq@>A_R~}@*-WJn<gS?wTlG9W1f~+ -A&eN6|YG{aNsQLcUT7R<(g{@$z!V}swhun5mK4+=0=Sz}WgFTXQw-{{Zi8Sc(+`=BSNc?5;P5Y|>M|# -!%cp&eey^|o)KC;2Q3FxH?E3bi+%x(`0bkxn9z!|Kg**xEN^xABLW^~_7W4LQWv;?GX-Uj}g$J;;FEw -IZh>SY#onKhSTnLH<X_nDJ#s<cd2KwR5gm=bL;7ITbApx(*_Mh|CHI*3L;R+jFx&UYC}9JM~CqYc-d9 -neFs_xh#=7OwDAhc@)76Bs0Q^Znp`-J5<LOjy=Sghn4s1ydf}$@NJZE~jxQKp;y$FJf8L$^?lMrAlM0 -f_xT4cpf7&hd~@q4qCa8Yyn`)5hbk5gaDYoz^p<~6JT|kvp>z_^?*Z#RM6bOrBOw}hDQUI;Vw`{tae% -7cDS#x?szW2C2M_7!Rdkz-RTdzT)K}*>GPC097}Y88^Ik(D3EB+2hGuWDaBouKV;*1o|Egpkcx3Vj_y -O$TCifr;uO7!QYhwQYUfl65MICx(>18;*(`}*hkzF|bLJG`S%9?|r1=9zizP!Lb^sAqSJi`$Bvtmbg! -yA|3sj{naYzdaL;?n^vsIFzgwT^w?4B(+qZmtx<;Wynl#cp;_x#er;4@I501|u+w23A74k(9waf&tcc -L2cXZQi}am7xQn#Pm{@&<Oz|lJ8IrnGSP0N(asGH_ljR4pwQn)-rRIqbre6h6|MA+A)Id2{g*?fW)-r -#K#E^LarI6fV$opyPG9g9CK0$r8PtB2{T7u+2p_sCdFx&x>`kP;RZNDvyqd7c}hVh3kOdXMVzU-2d<- -ZoeT?bP|Z;Z$HVxmW54%#mnN!5&5?SjshO!YM<P3(i1Fw3#-fefFRL(Y%G(O9F0euhWKU2ujTNb|vX$ -nq*UPVMD54sS5&~=EQKppeWHqAjHy-RrGCHT>npm8ftBJ%*g1q2(<<2-d(f8=uV#RxY*H~IERBebSOq -5YUl#ZMOyRE8}f-SIDai)b-c?w$-7Bes}(P_8?qyEUHU)QL^AG#XbnG0pP2E*;grjd-1h@{{CnDGym% -?((cp&noH?s_yrBCWl$lm{+5BMt=4VKw{5Xe|i^|Fdd2m4(_%TpPp$7(-jyh5-|<psq3!+D7`-7R+~% -LiON88V6QgxG?|{;16MaN<*j0bj)gu#vqt7ruGE0d$CJ2ieeDB2MHn@1vXXy00gkJ7CD2%LAZ=4S59V -;HZbhn-?^K+wrepJ2jH~2VvS_VCsbqQlodu6iJFq0#^)hibA19#*yNS;>`1h$qy*0l^twKr=H&Hs+T? -wa{=?Ap^It?$j4d8Nd)7}|XtH+cy2?@XqSDj^>LVT!NS6mbLaa>6npEz#<T?;glUSACo$2p)%=8sc4$ -rY^XlRX#v8kUL>)GSkUyjAm1hKs{NmBvG0oZ)m<U3!yGATaT(_li;j?YyCM1z<i2?^`zXdK{cf)>w1m -gXT+AuOUrau07DIJN+05yoJi#Id%#O)Y~W>u!z5FFJ`@D$Q}%u8{X6^1|hcw2&_bXEW?<<1G5HVuxNX -al(u+8u8gdlAj3xC25FuL{;V()MjgdbIjS=+MSI(iX_Al{GnwbE9#r+i+NsxsT5%2T@`IT)isS?SDN% -jLJwg3t7J;1SDHi^eIJ@NfKAv?r9a`RuX?F^$0RB3j0l|R{5r@|c_LoqF%T(A3b3NV%Hw0xb)vE7q;* -xI$F0{%AG3aW`rW&Wv#Uw)>h$tet!vC0oHTQTj)rL;i#g+@2Oe`nvc11}-IZKmL>n6l+v-SHij7;)l$ -4pN?dg^kfLp#G3oOhU0fBDe%oF1?=wqb1sEI`qtY?(3661#Vj@3N1Q<G&!p*tRCH`5~XsME|Lp`WOLG -3m4-dJ-*Bs8E0a<e#End`ASb7!0()qp{U0iF-i6oVsS=Q%d~<FI6a${Z2PB9OkmL2P=KDPf$#GBjSd3 -kk@=OJ}iFUY(X+0r=4uJ$GfVY3^lQ?tZk``nw&Z6>=`%0<0zB&+TrWhCa&H9F{x!rU4BGzp0o``lE`x -eDu%WSlR#-j-PJXJ*r99AcIuT@+D-AHQBvnD^c^9nhgAkK(h?^p=&7M_=cM5-4a@f#^bmzU8#RTr#n= -wwd?ni$1VNj;>{y!6Uw@IIS>29{$-wQrmKr%<yrk@TAxTj^6iF%h96jpKewULgMa#SvP)jtbxbm-26W -Dew&653b$C6#Wnp{rA`RVg-PrsR5iWl$b(v~-;SI=Jwcqfo4;rYvpcW>zT#pK`KpIuDeOx|8yx{LPm? -DfPKT6faAR;!pCE0;!QX-5J)2i*1C$OTlJ1HO2N;_o5B>IeBDT%xz&Letf*n6@h<B|-khg=8cOmccTo -k(PIk@h|<ylq}uEAmd}YTZIpdJLxslX3Bl%(aj>>&0)IO0zU;o9g)=(rgIRh<zh)J23r7)OR{fsvaA$ -0qJGT)wEO@-=6H=ukIGkvj-fYgOV?YIYo3?&y#;Jgagab&YJ~<v);nLW8Dy-1{o42&k*C-`PzM<XO(} -c~9&#;xcRAr&x{_QCqI?PTNmQN<hAsoNU+(m$?RV=~*S(0&d`b#4SvL3Wh#SYNo&a;hhB!VxYLK1Y=# -FX;{{By2fb}26^3Z=eI?w$Bk@5NO|M15@9r{l%uy24L^dAm5JM^EXv+qO^XGEa@*eeV2Vn9FY!W>)$k -FH0e4d}IPvzIU_(5|d*_;f+UDv-FEguoYL08lXNQ>67llC=b;Knq%kt}=-V49tSNN+C-H(gzDZ>9P#f -v@6UFGKk^e+9H2r?r<7-OnGnUWFvL@-inoG3c>ieTr6!FN!3NXyqSDJXsHIR=s%w=#9Iw|sk$c*&{^( -*XTDjU1mnlqbQxybc|h1`a_FWI4Awg=s(N&tsOXIDHGVm4x7lK<!QJ;LK^)rqAQ@RO4u+3ebnUD~Pf^ -?X8XVh9m-Zf7+_s`lb&-7(fm+rQ*Bq}JGi0OO2uz)tY*gMlhb6IU?>XLO_BJoSmaoYb8*~q1)@XfSSL -C9L&$$$x97Ru#E1Vk#GD*;XRE4W^&I;qyk-cnf%7e(*$z0BOfA7CTMyK#>Bll)DpQiX|-D`i9<*+dYp -E0KzRQ%F>In#xH^x1sHHkhtVJv7p5TqK6O^Ng;x>;jlAhWKY5ZmCV(bL$j6bgOUlg)R=3yNY2u<M<}* -O#QZQfk}N%pu;KlmJ>R4wsE0S0YmU&^78ck>#Jb$m#fLe+tb&te+b^3z6JC1MKHOzcy~c#d)|*nXld( -R;U3api({kK%4cyyWs%D;gJDqBaufi=F{pac`eW8Rf+k5T+)o!*iF0j?q8q9mAc0r%*@zeE65~5y?aJ -(^tdVoi1JhlH7>EGvZ|qD=NI3ZGqh0!{LA|Rd7VS4YkxAWS@5xIfQdAWMLT-$r98wtSJW|PdFdQJQGE -7c|nLy54Jlglg7hm26<f)0<+j@b=dVz0mTcQQ;3R}qNPFsVxU^;T*;$``ET1}@|PEf6SZXVO-t`-$no -zqg7@!{p{M{U>5T6Fo9CBayeVC)cSca3pdZlQ4Nug9}<><WPTh9jzIdvpWsE5>WVYRkZb%GY!i*JDhw -qn@VsPLsVwW7?~n$~2J_Fwg}v=u(&AowVL06(GaDqu_5(wOHSN1){&ZY#uw(`3evWJurR%OweA${Cxq -f2%QnuYExV-QFmzjPl4I)P<#+7dfXmpT~tQ6msTN%+s9)9WKtw1xxfFc`L1KPus1*Q*e!niSz&rF;*? -9x=4k&0^_mBI%>zDVa3|Mbiz1(!+enG?-LUTK=fRuF<t0TOD5);a-(8;l#awQ{<a{nL)gFWS%`$}!Mq -$}p<A5WGixMqBQ&cWl!P)dAa}3th&-Gcn?~^Rf9~2$qEu;ggBC>O-h3=5()R4L6)QA(h_BHvNm1AJXA -thX3Sph7I=>y|v%+N8J!YUf^#dpV!Q!GB_+f8jChorOvjW09=p9E7;Af3h%{m8JakF99{c==q8<tL%Y -<OB4fMJkhfC&*hCt^1xVbxt%+zOz8JJfWbJI4yaz@VUBH!BLpa`>nY>QVBbaL{JY7-WY!y7{r>DM<L$ -tvHwz&nMc@-H`usU@j9c6a#qN718<DSBm=MII^iE5d>rxVH;o?v^U;=}dn7^1ue!Cw`id>;)dfn_&N1 -Rrbv^VJ>iXnm=RU8AQ*QoeG9X&}lj@jR)z$(POUvpX^wM0)sIMvZ&*9U(x|Ln-ea4C7gtIx$7xC5BIa -`Qy46_)JX|&2&;GHz1>>Zxe08noa7$hjvjQ#KvuPSHbFI$z^roQMz_r2~>+}=%x74&rqSRQwfVCya_S -$g%=&_4Qp;MA$Xw{q<oZ0$c2F-X-w<9-c8I0tg|jx%7|1X8Nqa`5g_7s|rQV%6{qiT~<njg>j)6Rmyt -?aZnLX>M;y{%&&dHH_8_S^*jX9^=us7sD`#notfkewh~o-KXXIb3=XK=)mJzW|Wa+v;DL34CW&X|HOR -hxba9#=B)n%P)h>@6aWAK2ml*O_EskVqo?Qq002}0000#L003}la4%nJZggdGZeeUMZDDC{E^v80kil -xhFbsz8ehQJ(3Y~o!Yzu71oyK<At(4*>N+NJ<At@Vq`?)Et5J*Vk*T+9dnZZ`3JOa&J#Nd<E_VCR{CC -B8P>v4cNQhtasYJ1-tE{6v-IUeB+zDmX&JiY^EYaP^Rn&xLBg_<m=D8JalPy|Zqp(|NSLeNf#O~IyU^ -~nlqloFf~1P2t%T_xM($h_N{k17%So~{(oqeV)(2StR*jI|A6B%7AA@5&r_<rtVakm`aOo}XS{{0(rc -!^MMo;ZKzvrHcBcQmDslvT~_Yy_s|RlgNy6MG>?`@_o1&v~&MZO9KQH0000802@m7R%wcA+pq}$0Qnm -L02%-Q0B~t=FJEbHbY*gGVQepOd2n)XYGq?|E^v9(S>JEmI1YZFze49eWDLwWEpWwU2gn|Fv0Yq%-d? -aRun$2n(Ae^f8js|Y<fMb5|ND`YWJ~j-+kL#CKw_JuD2n{}QI-2%8^<L5>g1*xoa|=)k!d??jo!0bcb -%x6)XD})rubeoZs<GVMckp6Y8$`)qz()AURt+c|LIYWcQY^7%f4Da3)N^7g`M7a^5kpP^ZJQz!DwZ~e -+OyAUMM%Nf2W>#C!61=PYaejq^n8ggaHpK@wpa#wu||U!Oxwtj&~i$Pw$M;W)WV~68DFDqd&p+e;#BP -7qnjF-_ly}@RCS5o6Q>0vbD794x+Kv?b<ps*PBl(j8Vy!KeCP1-HNOk;Rd6a1e4&9ss#!z7;2V`tA>G --^W>{^V!vQuuw*TU6CRmV43y%+d;TQW{h{~Xt$Xfv^Fd)`MYFbgFtu1W;A`!)Ijp=Xa0z~A9%);lYV} -D=by<JGigBq554AuyC?p>a7M%M<I4(QOZj<csCs3S96$|!Igp<dIVuP!y2LG&gqJB!=(Z-6$G2Wf#O| -otD#ji712#4t3zWK*$Ow0#7fX4;P<tZ2tTnIo9rotomvqs<PaYnHk&75xG(Fd_8iud3Ub34KE0I^nfq -MDJ^JvU$&GSzym++DV0|KgTRz)ORU3<8#F*!{bEh5}%>7L<+uWWQ-8MkCqJUT~F|*>S6`921}WPS(<O -2WERw%T|h}8V%%u0Z-oRnremV)^EyxzOv`GH=2o|{H6gCsz4}HjbR7Xk04He2Gs-`*o(L_A_)YWLs^` -QgTNvORm1?0EBy)lPRX8xAH&FG3wD{^>7i>dXtZi4w!A(7E;g_p<lcg5cx_%JeCN!=Vze^PJjk%jV^k -KiMJ6408V@<-`{J_6$yX{8#vvlo;~OLkZy~`j$hhs3$P7JgZi9);gnE`nD+1G0Xe@WyIOLKZaU6BMgM -Mf8@U%q9a&fYr5s10Z0&OH|z>L;zO20A|5&edYohloUBtnz4m@)G_SIbd_^6FGP=48kKIBTWd(HaQ6@ -h!<u31T=N_(}W7PrNO@#Qgor8Z9hY<9#o<!JTg~W$q7d2lWuvT(RQFgc1@Hj9tY7xdJQjm?zH_^npP& -RgnZQZY<l>w1pS2%XBZ)QRo(s0Fd60Cbz}l+T~3FEeJApl{wb;9usbT6R!|>?YxDK&6{~yj<S?eYfIn -=!a=Rt3O6t4+tPn4yo%_oSY1*kaHEf}2n|{wC;A1;z2+98yC1BhLJdU|ME?+>BCu5^z`7Brs<c{Cx#M -ZK9M(U;mzw*6=gtFXFg3zwf}0Z{FPBO$;q%fjP%-insKg-HYlvYmqWfN35Qhx-71smr0T1hXFzjU~6f -NSFq{X~=mJLWhOAamu6G@4JsF8fr0a_S<CDqC;K`1OkKs#@SvCI%Ho&Z&X73gG6V-K8{q2FUbz!~ICT -i7K~3gA%y&fe}|Ja!}amDSnw`c}<=Y!ZFxt6>a1J|s;#$GPvRHo}Tuq=i`EHcq=EE-5{;J1#TQjawKi -b;qBvLSy0ODpQIlo4REm%^*T1!+x^_#$AS-kBkN*oXY(F1uL=!3xV?OBQ^qPUSGbRQ^l;x*<uBix#w= -4hT`EURFCC%hd-qE9rbTKL}WTI+5mNBdT>}}1gTIJ30km&aEqXdG5!`+avbZOL%c*Q4B(}Rny_M{nbm -lJX=ei?D1U(^y~5)4d;`D$Pd9W{$~^}qYEc3l2Y{?*6R-hbbr>PsOWX&62%<ag^~gYYi=L4&=4Y+ZeQ --R{Kw#QrECM$HJev=l%a6MX27ZNA_L`_ii?#xqzhXP*db_&5ZltXT3(c7NUZu_U+Fb+6EQ4>$Y5ir5b -Y=<8E+P2BNDTCHBbE>xfJM<<zj<@>=JoXtM@wwM(y*y&y}yQlbF_X9;~Jp!_08M2KTPGBR~S~;Sq6T4 -#N;x>%f7(or^Aagb=683RIpIy#k9Gi{A-$YT!~T{v*0H@PV5vgqQNK(DfFcD%b4Vz8gDh$be{13$hd_ -ZcNf4WD<!lu5H_4A!nm9W+B+0$2ZQf|4c~py2PhB}9XrS+Gz&B6<j66io*ddM_Rh1Vw0KYJj;N2)EF~ -a`4eM__7I-L`Ay7Hu>|nyzHgsF452+F}31DFJUZ&I_5xesppKmOtH^L@Yhf#Ti(*U%7e8OW+Ou!iqdq -1Bf)f+WEi_yT1>JEqpxFhxhbOu4=U}DA@-bg>w2C_d*W#Y4_2fs9eW0*Vwh`^iF8}<ydY#8zqf5;Cz^ -qAq{X#|f;l<!McB-5?HiajK?^yBT{UspHPYrGinb@G_c97nwbI@+XM`6Xcj=d1PFr}cVWOa{JQsDe;N -i`ZoXAjaHOzNrxh^Bg`F!kO6*Q!U^sq|xR;XGyiiH-L0ygxBA+3$&D<ls%LcRuWZz=sr^k)NTL>KSY? -1vp#n1Fj+E$-|a3#h2v^F#)Wsv4kkD>4v?XsVi~cMeou4~f-|z}*t>4V*7kuMJVda`>^fq*Sa|48aus -0N6Oi|bxJ1mD(#B)#CC=rU(>HJS=AmES#=&lcVIo;XFJQ&dp%61pS9w$q&VX?n?%0CVEz6nD=<j0+k; -iw5QK~#0OTTe_nYXgz?Hu1PaI4jAapx{>q)G~9iUqHC+5HSnW*Zu7B(VtS=KjoI-;hqLO{M^66t_3+& -Y43_b(3q~d7?cvNq_Hq=E@j-pu3>+-1)oX_vbN8;@Dy!A@>~zM&;)$ACScN75kDr{mpzWa&x7J5AxlI -JHmXPMCpVbVXsW(>E`sjQgU~Lcd>za(+s_$yZr|^{72Az81pkaai$~RB~aAJ2C1}%pF;{hfL~J=JFpk -7T%apygF4&bD)uvydZNx(lx6{xzz*TERCPDN4E-HF>SZS(b+Jix()Y({l@B`ax_HG7h7>`v4tERz3Ly -?zI^!TOEdHsX$tOl)?*Jd-EnG6(r##^!8ijvg)#19GraHvAW?CNWi1s$#=hk#NLNPjuBtS9%DdPIVyN -!b6D(px(iTxt122^?vv0BD)#<%Y@o{c9!0mqr(29(=Cp!i01(jCyvc=XxTrPCR0LZ%@`>ft$-60j*O9 -xEH*jxYiX(F9J5M(`-dPLXajP!F*O=JPCUMRzjV$gM=06aA%DyW`jot=!9wn-EZ#Nz;7-KkvwCB6~Ot -$(ANSNI-rlr}LVs^3SQpsN|QtJ<n|(XQ62jDL(x_hp`_lrm7-?i>&0!+5Z4gO9KQH0000802@m7R(R! -C9=Qqt0Oub703-ka0B~t=FJEbHbY*gGVQepRWo%|&Z*_EJVRU6=Ut?%xV{0yOd8JufkK4Eve)q3n9Sk -BbJVFsH+QO)}n`S1vL9<Dancbir3<O!CY-VIp6{+zULH>Kc!;2)!nk2jRgDsIfhv$B?*w?brEKfDpV$ -Wy7z87tkX(>zP7j~)Im15&xKPp-I=TdIBqT2dbS?fA&REJ8cxK8!XzpA5}6^-1}m1$O{N^!+RM}=LoC --kufUcdRgIxg9Zv@Fw2$(QUxWO~Wo)>_CaEoT;@7ImE5^D37OF3s*zA}qe=jlwC9$WX^pWgil^dy1eD -*)GmxrDVxH>`#qs>qn06)8?+N{YkE}wC0Z-)%-#GgV%T-k}oRF8?Y3MD(4R%pe#9b(fISPMRoVWFFp= -u+2=_?uO09^yZX{BP66+^PDu?OV9Rxq^CE3ao$%^jG_u<BN`DD7-lVD%*o9EK5u29O^xKJ~dsvzCQpJ -iBTR4-{4KF&oxbn;Iu*w@=Wn4{RsklDK<_>7oP~q=HePvgsfIu2<&g33e>LEV7dUNsi!`0)*A%f;uOR -RQ8Ml*&F$!o)v2Ee_{Qo~Cjn?&z~N`Ptk4X2KJC#&Ub@%Z(HC^;NS^S!@4%|E6Ys7my{PH20{vK`Ov6 -7s!79xC1}S;OlRryj?<7b@!vxKeGylUy{jS#t6G`Z9U>%QaiG`PskE&-UkM`Ssb)tFvELXIKB3&t@}< -0<g2S4+k-Ld~MdEB&pIpPm%?W!IoG;>?@6sLxh^m=#C#(45qSR=ReTz%E$?;$>yjLA=dN^v1c%pXkj) -94(l#5#cG#6d-i?Qfh^)3f5^oaVs-!x*KJc7I8b5&4VhN)f&_I%^w?VsjS!8{NfN;%3&=8sG)Wdck#A -(>&eMmE#g?g+iA^^+x1^wT3mQLto;ql_C;i|AVViY_p0MlY$h3qo)12uYXZ!(<MA6Vdb_Yc<Agx>d!a -Xh;#~)$4Q2;=n4%d>+34t-8`EpWY<^o825nu`5;3TV)OAZ2*$eLHt6pc$}lnhqa^Hvw<f158TR(FR^@ -r}3zla!re5?$1Rg>><UjMs44w^x@<Bf;%&Y1wl3{4ahqPm9y5p0LY@x)hnv<&mkjMwCKafmSR+xUpI? -EM%M=ILl@ARI@``X{d4n7pGg8Y&EHolx)P$h+HNRSE~E86nT6CSyP5It3TEa1lj0gXSYy@5o_p2^l{d -Yun|*m6%Vrx2-@{_-ZqViBB%vcT~!eK2ZPn;T(a=n9{+qkH;zQifcaf|k0i?~sn5Y7A;_6e#H1R$re( -v^{1^jrXwU!&+$rGSaS^%;fadUKomhJ{7)134kkqI+d_nLB(I}2YpXBLLA%Y}|qkzaMeEpSu$DVzUuf -P1+d<~ubf+Gs=Ma7-$Dh}zu`=KTn*v{BS==VLhKz*X77@Dc+Vd!BuLlND=r+rLc3}`phCdPu3;Erf$8 -SH#Oz#`UCr=@2#S_~!nD8?VA1@#RA_I5nvEYRC+Z`i6c?BNL$!@tee!yx~Jy(+9@8{2RuZXzqRWxZEa -OXv6-3B5H;rT3H$zhL2A?3?0#XeZXcaMeD&gGC@c!!%H}fFxviV<w2*rZ7B??;BSGk<SEx=;Qf_pvB^ -AB)yRbPs3A4!xjyBND2irx-(}RBsG*ctW{Kw0HiG0Ru0gmJ46JQR{5Ak)cuH*O@~yVCP=ZFA%q~b^y2 -NymT%;6;JPk-d<uAm(yOd&b8eVId}T^9p`R+oQ)QC0<{<8{Lt#%v6+1Lio5LeCbY~dM=fE~!F`r47;p -V_ySAnsTdl$yNdmkRb1`e?btiM0`xo6!pBrb90?Y>qvb0V3c6ih&yT3<IUy>oO;DHNdA(R_*0V7{6UW -oVN7NijMtddllXXkbNrXoThw(bH9X1N0{a#S?br)2(+$libc#%`;Jm%xTq@#0Sc;75msKJ;EX(9dk7l -iSzf=GAUAG1F%YVA=&679yx`ns-q$%D_c%_b{`a7>ESAmF*E-}waR#bUO<PJ*qlH6v2T%W{rYRYZIDd -gp`x#~#U{(#L^xX{^MidERJPQDy2{oBIn&gxh5^I%KOuFn?IhdhFq2~b=^HwjXz`hyn?9pY?`ZP)V_3 -h|Iz<CJKtvN6`Re>;1AcFBZjdOszP;I?j=QzH-4Y$Rb#FZ>E{_=I!%CPs@@V8yv=&p}l-M@^w04G2?7 -g4aa}ql)C^>b)vM^x*=9J#2!i+CgY(4=G67$<n#(Y5XXGbw<=w{n+Ub#Ks{(Qm>ef}SkuO(~i+_-$xR -*%r<sIa4r$Y~B*78R@=G4TAnwdNQqeMFmY0}m->egnyK^lV1Q_1(5_u{Khc)>?dVso<X6q*WXw46MUI -$psj!ja*Zfv56)(=?|`(3k63#nlSF^+@pR^x8(G^@>)X4SEQK@5CL}Aal6S1GE{{h<T2GE@`IGTDj2H -UmpqqE8hg5}<Dq+VCO$Dui59Wh8O%yZ5JA^!Fn~H@hN=>iB<Cb&wqBdv*c00f`)r>$8oozbA{qNcVC} -)pN>+m@$&zMx)XS{8VP0$+BsF`i0eHe*b8W;Oj+jX9irb)S1Yg3$zzB)D8_Ow!q7>C#(oehA;h-zFiN -3dCM|W>lj^?%d?Kga%mQ*q^voV{>X3iEZ`R^#0LU{6!9MkHK=j)d#Vio23u9H*kmZk~Lc&P0Icd0{Qp -*&NulWjQ8T2D^0dY(@2Uyk<hO}JcWQSQ*VG3CbI&EAkpHws*bDmsyDsEBp=IuL8f+<Nrx<xAftsw45{ -BDWQmr6i`GB;1UQNiX7X)%s#FMg(^V3-ptQ!8Z%Ki9%RE6z*nH6k5G!*s3cj<yK@?F5g*p+<Ye-8riL -{bQAVaiM&?!ZOFuMw4V<;hwTpg(f7^G?J{)1+vUhFgQCEBXowEw2^oUnhhk6A-YvYiCtxN-K7sd?{;) -0l7Q|LwG(e1VzG=77{Ec*gLHH<STjld`zB9Cg&Rz|#)DfQE9yWuE*@VQvRq%ho1eV3@l;-!AV2{Ms0x -Nc==F8CqQ_!!;UQU25bYM%4WQy+NlnTNpGp%*BiAz7wUn7(XN162>_TH&GI*Xy~G<9IoMJa5(t;{5C7 -+B2|q|3!24e{*Mj}nxJsFzG+8$_|;5%%|yu=}uzEE*g&|6X)(e_D?KgY7|x1Ig1wop2sFXM{6ricX<6 -msCKmrz~tXlA#M<B=ge<7X7Z|J{ov*^E}kx5R)qp&0DXC*J3YhVlNv0-xm4oNM@SZS`A4^Qgc>AHwVt -|VrBv+DOMquK&xDsVoq355*}1u0(~56Bi*JYiX=vVec9m#jSbLu|9W-#K6&x{#m|??#jE$!k^_@0><r -b-HVK_{D=;OMHKNvLR1+3vy`ld85^dl?&h$fUW7S)c1ud+zc%)3S23-G@JQM`8b(n{uZhG%)ptxHZwF -bjzw>}*owmPfiVcY@*Cb|w;_31Q(I86iV?vLddrl&<(o^~Z)DO;Ca>E|u^@kYZxK|Lc$4=U-&lygX%3 -Kd>7zoFU@l$=x7d}~8sh|6B%`ua=%N5E?K7{+TFDwy5{US<CSFnTrxWnUtPQ9mAJxG-E_p}gL36o<w& -4L*<vau9?IX=>fY?0-;80|XQR000O88%p+8=?eQ`WDEcRLM{LR9smFUaA|NaUukZ1WpZv|Y%h0cWo2w -%Vs&Y3WMy(LaCzMtYmeNv@%#P?Mn+Hx(W!BeN4vlVXdJsRki>!Qq#ulfz>~PU%4sD<l<vF<^4~i%e2A -o^y-VA)Kn2*hB00l(&v2+HieB}_QOKd^L))`G{JR;ex~!T5yFUt1OSbRZ6MNanf!FnG@$*>q;v||uW} -7IAHk<0ywf(^A_HY0o^V-U+<HOOs_QL#<$8o6Y4Iv%Q9qyxNUJjz?H?>IFH<cVx_Np7Iw&8Wk-i}=@H -VUSzx-7pFP1*LaLvhP-*9>t=gQ(z5+f)Uwt6xOk@DpJ4hVDc!0rMq%dWj{ixdYJhM>U!<{lg`xYJhy8 -HY+&D(*XVhMfeOymX?b5g&-znun~d1sA{38|Dlm%hx0<sEa5tdftP&X1`|TdvmC^UKvH%PLrxmaOAv2 -g-Hd}Tgb7t!g5I;bYHkg-Z{YWZrG(exd1-Omfr5$MjBLyYqajUUC%Vs`e(`u5xhSgvZD$FYnfo2+YH{ -Gjc?p@CSwhu|pYb0Ikf%%<4IO6*nCv&xK4d_vriA4=jIM*6Dp{EI0?ecrpx!=ZM=p=~zFOv5fl4uq-O -#qR%!xyT=EQGB?o1Z7;7!i^gS>!iyy^P35YlnNy3VKJbx^R-4rw-kZ{huG5LE&3Xi?A#Z0sk8$4HY8Z -4P5g0C$C52|qU*6tn2r&cv(?T;m%Wi*t$>d7f-Gxi}mE$G**b0c(4a744}5iN<{tzvEZGe0=rSJiGoV -xtiWS_~;4-q7+xZ{QGyWUO#{Kw>QrL*;gpw*Fui<0Jtcgy~8N?Zf+jeD*i3aTyHj;QtVk?w9UZ5&@7F -y+%j<Lgk62fZa{0>4TA^b^Vb4|aH<-C(R?@p+wdPQMLVn8_ExgGx)qE!%;3s41ibBd&rb{xznvh47KG -hPk+J95A%k?$UVV~1HJj1j9xSJCh>F;iA=n#-R1?c2F>J_VJA!AC^~D<a=k0>aq%_$Gq1|vx=+n)d-` -8q)!z{2h$HvsY>_(7lqoV;|T;;pW@KNoN8c=$J$q|;QJ@9z~q(FvHfdN<9oCwn81LI&ZC((=g%qDPY! -L@{5@LCFYt4eC_>`It$n6|_CC?n2D`Q8Kx;>~T<QEvTErmP$VDvsB^;N=<Ew#hw<(itpLLTSgFNtUTM -<S$YAgjE?B3izVhEM-kQ(5nuSA<DP?s4+faFQ`5^R+4os2rpH?L7D~lv?L>TFu}y>#G8_}O?}oF;)$j -m5u0Qax$QuF%69AvikREW{NZAgM_dl?1#PJ<;rr*`v(G>OnAvRPnnt(*?XS|h%)2wh$)6zR*=!Xjo6S -r%<TkF?<WR8b%%nx|fFA`Oqp|y*2*9bM(H-uctZl9}@CR<Mlo!Mds<IxlnW-Y*;jY(PFI0uWLWhHehy -nE@h6@QfNkF1(lmTKD2o)Bjbi}5r86qrYT*~o85%VbA83tC&?|4<KN*8U`=UzD)q;FQ5&|R9?L{gFH% -O-SX9zTJhGAQORS-J^him*o+?c6J<N<=oy3x+XBv+g!OK6}Gpi{iE&hm3vQ5>>RTvuJE;Djx>r@x&&_ -3j8!Gy3oR47Au>~!hxIx<aNWQt@VO=Uj%j*=*(}R=!fzj(lWeZDPTs(yd@BM60v1Yy(b}l2ay}RonaJ -<<pt8=U2Y^YA&2@U4M<J=sP9IDb=5dbBVHQ2;S%gkydS8RG2C=@HNcp*x@xhsK*(ekAKhU63f<?v!VO -ACx!Gn;o^oQ8GA%(CACdWWghPm}bEeWR4hc5Q|Gs;oBVd`?_Pjr9b1zMaiO3;eBLumW<ICu7+S`=p`| -hSVu-*)UrJ~0nHnU77tBL`khlt#$paLC0I4ZDMVM}*66f4!jXt}t7H7&J09M#0*u!s)K{30%`R*S@_7 -6MAOKj&>jL@%mT?}pf?s`Wd7*lMxrvpUt{K-}y+ADbEl6&pp0pnF(JrV;DjLxzS+%cuR4WRiJ^^qx>A -?1NoEf@Av}jC}Es?$=-u%~2E|8}YsaO9M;7;}|1^%#Qu~LH}FIA|Lty9)uH72Esq_A@=D30V-0b5>2s -%2YZmh@<~4qIs&d#(tzU$9W_e^G!ghe#u3vSS(c=pj2&2CqVA%5i|c<cVuxUquOTcHv1zjy9&(^_L?b -29gtJCOD^O4iOlChZAGUkq=-Wz4EGE9yc&>B<N}K-BpC=sQUO<~(9WRriV*~Y~f=-u%RUQD*KGO3uO1 -A9RW$eF24{-;mlQluHFDL4wr`ab_LctMJOeLxGgad(RmbN)Jv#Hs}zC{?07;M9^l;wkvRMLO?>Br1s5 -9|nhi|hz>2~;haQ{tGA4w9;T#u)i<?t==U8waY~&<E9^in8Vyj3XMQYA0@03jvm2tJy={-hgkfP1~c5 -d#<*XGp@4<mO2@5=+RZJX%?t-pn3&+?XaxfPifVh0U=_e&7-o-9JnoHzA(G;eyH}mz<?GR`XU6gg({{ -q77^ZP?gvvhES^N@+4`$D&-)(efe_;OpgvgN^S%L>3ykC|(;NR#Qm-8U5bay|862h!1ODjp@mhp&MlG -cji{dhsmNpVCwo-IbH7};>W~ysqwB661{za$9YB<v7%1}geH?cfr0uc6OoOrgYN`Y(RkcZT<%hWf%G_ -bam&8l+i@6OKX*V?S@I!~ea1m%TWN=$Oo>Wv@QOiu#+FW3O7eQ<PMq1Xwz()*<ANx#fFC4|~^-X{iT! -C@x<-ybLbD^Y<=%WK=lw^dW_v}=-pO_z6)vr`MByxe0Gj*U|2YXDz04wy|A*5=n%Dnzprn%*uD!>l8A -DI%CBdU<GCYLQ-DDSTH7A1b(+?$p3|MoQ(%IlqX~xdhCUgoOIq{I}^ObbkPu^G2C@yg;*bN3%>cZo69 -!oaWK0-OaVVynb#wyJeGF21j!)cgCpcxG`Vo3&uZuJtz^y#Q&*0=CW9ogSv2=%i#eT(EU~3oe3qa^F| -f`Y|DjKj}2Z1i!z_a*ZB9t$1X^Iv*n%>@BGX;Tl}D0b(a_)Kb@+2G&o;OlGaD-OGjl7suXfC>M=k+wN -(?lWx#~m2cD(zi4N@Mr3`ZOfl%9P%T+>1SM&`*c53h3b?HRp9OUA42|m%YUT{1vs@9K6^jllY?jRycI -J@pXEMa^8$!DMMW(A*lE_>!Aq~&=fi%YQ70X>TMWpx0C<K&^p6Y?Luv2AQ?*1C=fD`lT8Dp;(L{phA@ -uIJ{9hJ~WaA>(q2vPHJ5iuF2sqVJN}7ltPmp|HlZC^U~L-s=>+`O|>?Ox~P_Ba%bs4X8`@W1YEPXPVD -zC5yg6$BIrzGb&yEK(SKx>-*jX1k0_p)sil_d6_Qt!Ryv<{9}iz)e!oK0I0*1XN9lF28}?4>a05}nzX -u|f@7h_5qw<W+tEaQYVHMdFxp}lb)ZNvO@Bk!skm2(a^Z$xrWV_J4=sLnf)seTjH4H1w`wnBS0CM~ev -MOSGq-8(-;&!KnyvkAYVlhFRiLl6&vEiU*h(N9b3Szlng;57vZanejg8B8zjX6P7wU2>3L#3}jVEN>s -pE%7pitq%!p|<wv=dKq4R!JEI)#7cAg(yFmwPgs*|&uc;+Z-`7HwUt_N4mgOvoUzfmuW<!`fyy!ods1 -ZI{v{MS_NN2g<D|jJYmHhqLKRqS$GRDLs>H;ix3dF&-r~_5uTg=Gg$O5U_ecn;jS2D~I3`$T`i^pr3! -#1a)_Jv-X+$Aez~r-DN(dtp9;3?V*})`6CM3r!u#r9bV^7H~gx=m0>;SzS)uvIiF|KC+xK-+FsdV+1@ -vG%S#5wy8~!QUsC(mtPWzN$iUD=-+IY7?KcBBjJ)T~;9Qi60sa&mlA$_N-V5uoD@YeyR^9UgB7t1=?R -Yq<JH1|XyvI*(1Q?@0lO0yD)?)Y*VgL!?{l_S?#f9$8S5MN+Et5);@nk-8q0P&rC+vp~d&fE|HMit8` -1#750DFPHqc1FD=R>x5Qhc&hiveJZ*EP7n6z29`*AC7AgBwWu&C!Yj*x-=yu7krPT|_?OSnEd;4_F6K -urzQyrZ@PrUTUIou=^~x&g=N-jam%Fnf@MUn3sx?iK*|Ff@-ko^-5sHC-Dh2j6R0W7k(o8*N8M5K1|~ -i^OXy?DRTb7T96!dk)gihyPPC8{{&D=0|XQR000O88%p+8&UflGXaE2Jga7~l9RL6TaA|NaUukZ1WpZ -v|Y%gPMX)j-2X>MtBUtcb8c_oZ74g(<!1bbewB1ImQe830hVx6%O_=@~KNNHzAlXHIE$Dnf2$tZ3?Vq -zyq72YspJlE#ElU1k~Lo9eUDvZfW!FB7(Dd(Kh1MiP4G|_)&A#Qv1MRi^<4@e(A1M5Dz*IRj|A5cpJ1 -QY-O00;mZO7>Pjj$fq)2mk;S8UO$z0001RX>c!JX>N37a&BR4FJo+JFJX0bZ)0z5aBO9CX>V>WaCx0r -O_SR;620qJVCln<WepSis6?r9B~!bu^=77Qr*crKNDKu@h$(^#fHTs+Pd7eDfTYHDbddz08|c^F58X( -T<bycyis&QNq!rIhDndIgDsgISrnzVcZ<MBW&35GRLdvq`Eg5FZGG8P~vRLp_E2Ji()h(5Z_5YRsr7m -i*m*PaYW>O1LE8=FVBjt^q)0dVv2S4$yxh%<hSWX{nwj>|8(o1sR;=Z(ASP3{zUhoDM!B}3^JU@Z9!W -=^OJ4i+~D}tF>VR1UqW;dM6{V#UBf{mRLH#(=_#5CPeO}&Bx)5VVMX;<rlHBVfM=ENGkSS(;Pgqfuox -&4LwE*iF45cmM3ca4@8@*qGv*$Ww9PQ;#|DFlu|RQKpkgxJHZ%F!RF<Q4f%G&kByGQ#(yLsX7b;kXi= -tkA7g9g9Hyp4Til8bBa<c>hqm`{VO{@$3En9zNWCzDr0WG(-jXHg{IpL*qv>-O0xMt)7JhFxSDlO@c~ -_Kkq;O_9@xss;#+Bv(1~;c8~x8FgcwF{fbh_HZv;$nqkkXlM-MBLA&L~>bWIvtXg)iSgXnVX2;HVQVK -aIiZP5ME^yW}F_YT82gK318iF#7BE_z9&VUu0?ZUZZkQ^y08hT=@KD0MV%PmM^JeZZ}e`6D%ZfzV)03 -Z3O;AF%6%ub*hMWQ8-VD6X6IlUP^8pevaGQlteu2aymiqo1@RDoGHM^?8tp;ib$kc*UG*<cNxLGff{& -;`Qd48ijzySgoUhSZ`0?z#jdwu5115LHL<Y;ve;+;p!Crn-7ppo(G;T^nOv%;YdCwR-0Im?pPLHp)ha -PeV4*!4upxS;k}i{=vjHLS^naF(QyGaK0;ylV;J{y2AK&X4FXfqXnVK@%izC2<8=SM8g4GW9VcJ;*0A -L0XRsGq(2<Jz$wWeJLCV<IH?d#eOZ5&9m^)#0D_rKLl4x|R0<t3Bj)MLk%cFpDe(Atg?sBGlZ;S_qAq -@VQ<h{8-@u{O7ovSg2V@=Nx+hoMH^%IRW%y|&awIOEnjPlGO973SD)LhrY53j<#{~7!+bhbx61-;X*f -KP}rTU1*<IU(VBv#<4O5K^3B*FhlHpRtag0tCGt{Ctb$Y?#f+0&7UffODRJREavZf}R&y58CeHm=5=h -xr_-jQnfemr41jKOP=F-hKL1{O9h&!+c1<+5)o0+_<2ks6}%q;Flt=?EnBQwHcWY7GD?8wq;;m>J%=G -bVKDqWr2;a@cxHvC8C3hP_id3It2`B$aT+Ie<u)A0nsPQjXx)Bj<WWgKq6;%*(d8H+x)mShMmJKBr7s -p+d~cp*JyfPlBdi_x}O#iGY|NlePZ_;Z)c2h>!FnOcRz31PS0-mrQZ;Ljkfy|rias&g*yTlheaEdwu~ -J36Z1BkbQ<8ha_Qn{&{7yJmgh0ji_uh^%XXjTbSxhFYA7#f5_@7FR*lMWu4I)Kk~0HTS&j}_mQXhYip -uh56#k_wm-rjR;U@vq;SU-K|3W?)X^UgtkOctrB87}J#B>n`0Lm@Nk6FY{M%i}E3AR)6(yOt`0-Vfhv -UUp~1xDA5O-^#Nz8S6&MV^nmIzmzX|Bjm*=%8j;1@*nzk|A<H`)2iaYq<ILHkq=*aG=+)WSzti8XoPJ -Saeve;tCIIC)0$ug4v%KZ*e#_M0vw1rWBQzMVMR$SRO{0L6DPPm7hCE(X}d~f}X>saXL70UsJ7F1679 -G&h(c#vQ@!dGl}M@=$5*2=S?pu$N%vzQ;7c|;o~Q4FkY{}O8UKy*hkh+-$p`Ez+C5X{Co!kInr@NGr} -nwhwqEYJO;ycTi=!2!Odm^J0VH_7j)I><~-a&;VyWU%yN6?`oFNAFrEC%Z0s5~^L$}CJBQ5*`&@Gg!= -!)Z*t}~l+l6@zh`Pc4S>WH`P^d?(C&k{fQsCjVERjqtmjadAAGpeLDz<74lNCfHJ@w~PSk6IXhT4PP0 -s5&YD!B=bvK;z%N6Mj+@6ln}`B;ZV;xmX&f)P2fI<m@ks4M%*u$mZeK>0QV9Gt$fwYA63<Sni+HE{ft -@OFEh8SH7|Zr!m&%nczYtiO#DD$!`(bVGw>l$(&%5?L(sh1CyZvhr5NMnqK@9%7cd5CJ?YzG#8x5ER; -6(pkDP36$Eh9LjUV9=`$kBpWg;&=#C{qHw0J4<HVdEXK$Wk7`%AVMR>QJ7ydlHTl-3V3cp~uN5%Fhnc -NZY<w;4s{<0MWQVQ>=uBN?w2f;c6Hxfvi7|z{*mIWUPefqL`OFow_o-1Dh*}=HCZ5OX?XAbeGJycO^v -L>G!Cka?49;AJMF}?Kl}olPPSJP3jtu~-F>d!UDu~Drrs<6>^LgpVFH5uDJzWWv<EAc(JUd&ewSSD?g -O&7A;dk2W%jVxlZSiOue&`P<P6AT2!a~LY<&y(S5i^{IdoFSOV{!lA2|HL~m>SUtdBW$a)X({&^>Jj8 -GVk-o<KEp~z;P)4wdGXU(Fa!??1<BVL3HHIu+sQ6=PabV_-t8Ea(hz<`HcsYk^BY|&1D;-v>y^5!7ot -994L{BFdDM35$XLG2bU>A?bD5WrW~3Jx*wXsIZa`j#(GB0itA4x{^N$m?lZg1wCceE(eS0M;hoW3;YN -nzV^X|uR__Mjg8DCTC0FR_Yr?T_ye436pya;+P)h>@6aWAK2ml*O_Evldu6ol7000&u001EX003}la4 -%nJZggdGZeeUMV{B<JVqtS-Ut@1=ZDDR?E^v9xT3c`9xD|f)uOKwoj$Jqc`Wn=2bDLRXvrdpWGcAIEp -e5R7M;295isLT!zxO+&?v`g~`mk7GF|o+QbH7p>1i_`Sl3nTDPNXr55@GF>(N7~2kxTs5MXpk5gCH1< -)GpH|XX_%3a;+0vEhKugQR$}l8b&%@t9n&uc_xgN^?QBX9_pXD5s_Sp=*wtr^sYX`%I!}gDWvs#`5^< -5YUd(7Oxcx460u6;l-(+uPuX3TE1imD%9cfz$dNyosVwBLGL5wfjf%FcPn!wLXoEN0v`(rtmj+0~C{f -kXXcuco%boy)E}V)vbdt-rygFEF{>rcZtlsA7DGW{#ra4Hu^#b0zohf_DVgX}quH{-3Np63XN%ldToy -dXa6k3~$ys+RambOAZ9x*&O4-a<_Q}^@!;pWr)?&*<VKFx2h`StvPw|1WvKP~P)FWO6=<`2uKi`$#UC -%(8_@(*`Ui|grVGQ@;@i=@|Gm;9xOOYL}+<;#sR+W3`gB{r$Hxr**p)>@yZ5DK0^NL$MbneVmv0?nl| ->h0Yd`KokbFAJ5#*UGfEo>Fy;Z%`6MN@BycN+diwm%G|Kwley{Gm&q(-lxN+@Mp`&sSaKm{Y9pad5j> -u^;@1kvobF-Ud7!>d^=^M3fV^HJTrPTWhwbYqW&u#Pp3~qgp9|k_PHhAp&KYqo5S*u$p^VXoS6d!Ou1 -PteLL1oqE{l}w2V~_8;cEjbG2Z86XUBgc_9*+zE(I*k-};lUZk-!yxAX(IEN)UXEXL3lpYnlj7FqM1l -O$2UC`F8TN`tpik;+qG8&Csf~-7oJP^E-bLTUKg$(BmYy%}SC#@;?s*w=qKLvD13F!5lt&m0m@<Aj>j -1DZ8YsMj=$~hlfnXF+i(09mS_W~r%p?p(TyDZ(sGht_cV+);1&kH@a$RNoitPxK}%^qlkL;~mOPj{mv -h`sVxce_kVvw?gxt|4oU%-k9GbK2P@znrauUn(CRPkv>;5Hr69UBGpf&SqatcH>F+n22M(1pxP1dgk= -h1tDrP`lq{$tQZ;PPdV;6k9EX(7pgMEtoqSx_ch&j>+`xwJ@-QB1!^TTHVEETu4kFu>LQ6rFjiI`mTQ -)8l`Y@d2BkZzk7Cg+@Y2#yc5V1D5}C?fMj*v|er(X?8zqjkXK}Ww%Atq+NO;FBcbImmP1*unfZ=>Ak& -TcDMN%<eLtwok(-hTkC%(wicHANEI#&y_#OtBDMrw1|GS9$vNdD3xSFzQ%W&>!en4$n~FB9BANM^_+& -4De9njjym42i*5BJ8S0nE^^%=Vb#lfG!9cdo9Te@Si}YKhqhr<QM{VsB)gwfrwJruvi1g{UNJ>J}c?h -*c>0>Afb2cXBY;V!AQ2314#T~rq*slAsfGWg&x`c9TPy38EIvjH`JgciF{5hZiPi`n{jz^%7RpLhcak -s9+`hwXJ~8925;0EJ|nzdoDxw<8XX#;&}uGpKHs5R+<_74+l>aj^AAp#N-9H0U9<UIk*)V$&Rf#11yx -Zr*eLCk)llxxWUN%8@+QR^RC$wjJhR0B{nL_sCsg_sraF>R-s!}~UgcX)htO1A>Uh$H>hr`MP0vTQzg -9?PNe_KhRqeJwGqX?IvBJNH@ptUAWV^zmfkq)yE@%0yx02AJbbeN*SXQ?Z8mnec#>I~oE<d0Y#&vdV? -=mX6+DbAJMbcV@VS=K?VO2Zl<xwI<%HYCXTs@*;H&67lKGjoNCm%Dly8BS$$)rVL4xrSRisV2YAhlgm -n8fv8nJ(EywELDSIh=WBV#k~|?dtuG#bqa_(Dzg9iC3ZA^yCYPgr%Wo?L(KwgPurT)`z<|5};jzeBhF -mD+LVuv*+*;A|jEjv_(+VSxh03!2qyPVIi7CCEvrmefFAzvx;)LCfQlNf?iDK4b4Qp%7mxIZsnSqPM6 -&+IW_uOms+o>&`?mK&8(tVEp)*kh#@kZW``OU3xjQhNcQ4jxlGAeF<(mzaIlr<w@Qy;wOqkX*q_|~sl -s`2`}yKukNjqFad~@l%|F~+ET0~39tR2~viS)Xj)NY7uooshQXf6R5{|XjNuu{O^VD)UXLJNuN#LCQU -_;hx1sw`hf$-m&@(0>}8IMmeHtF?)9XD%gnDZ}k_p`I?kZ+L_;FARv0+iGAea>tqBehm=JF$lM_fmi@ -R%M9|DNT`=<}yj9@YP5Zbc?ZWFz*qwHM(gF3sOwk-02jdZKQ~{KE-7aG$$l``5xSsLk=>b4^cou1zmp -7Oj914vi+8BI#5F$EWe-M^M|L!V!rsu=L`P$bb0@9cXjjl2$f@8(kThuLiH+)a=8I66t+E~a-T|HY0Q -Gt*aMed!LYVrNode#&~js{7s&~ysg+o^x~?D~A!Lb&V4GGcpkAagi)-?Oo+q^5Ft>;DP32>EmC^B%<= -yq&Ia?xiBRyhHA@ndQwQ*zws%p&NOSyFE=>5HQ-ak}lsp7*Y;jnZN*cxTf+g2yBM;;y>cby$(7Y+YgB -YWF=@?a~vxv<Uv$dKNH!qJeaT-%ftc~|od6VCzJZ*d3H-9Ie@8bgA=1cRucE1O#`+;z&=@!kA${<wVP -7gx*q-NGZSVs{YRWRPHcdUmpsKe-G%G+uWYLIFkMV(uigSOUgPi&_>Igb~%(73HQPjXO91MFdY>FAVi -deUA>V>NW$d5)ui51_Hl2Berfb#ubB;Fqj-+tsQmfqHS1p5%P$ni<h3A`rC93(77NQAAwAUl+wTD8aQ -@RJ11)dJuc*{Zsow<|6t!UG|UR#kM4nzbF&G<5--F6645X^I_tsqFp6lkcu`>-KB~tdBeIV7Q-~;=uB -1#s-@1AevMc9IF7rsUQ`Wl4oE+8ZgxaYS$XxBI1qsPn<(rHOmn0~S`4+v1^^_fSQPqeO*r?hN?0d`3e -q`%JY{G%^Nzaj$j=_%IZ^&u7R~6LRyK6eS+_i`lKjFq)zC~R#BbYdSQ8=%!@1MgkoYLu+ru(2t;CR35 -Q2(euOoV$QGCQtNcLgBUz(v*9ae}4mu|NCi<03sA&mGlsG&og{zea}|Dw-bMvFhk4r&?v*&2k#au|Mv -F8a`5uT@LOD!r!3}T!_07;Vl~GxePu@faBn~9KO%!)5i-sE;Ls-I?PUaG?uGkGY)R5D}3<pZ|JBT`17 -2WW=m7F?|}v+a~1cLV1w85-y&O`b}>$kNt)kFoKs&+PDwbN`c8bw=s$y>D24$0-&Fd~*FKT7pUEFu_g -__X`!mvaNfG>^BI4Aip<!9xvC9K>s!SKA<kS@<Du5WaQW`Vp8is1k4)X$Lce+nLfy?G-drUpmSjPkkD -ln&nnOw+*gNHMN3<vd)Xy*)B%H1}U7-%F~Ik})HHwsgm<EafR9j!-aWdCdP0q6SW^6BHSHt4B8?S_se -SC)=Q{@>R5Ngh^On3%3?j485#N<z<(i`}6P`OBz?%0iM*V}Ee{$Uqa=Lh-w~ov^Yd@{K|@@ZZNs=d*G -bvV<6@;tkwUsV@7}s&{cJ<2xP8flJOJMJYeozqo+|FkO?-P1Gq=)rsTn&i`i+mU(=P?rsm!pg&t`YCw -Ft>+W2t{l+b<W8&nOh7!|c^gmEb0|XQR000O88%p+8O?S!EGavu}PIUkP9{>OVaA|NaUukZ1WpZv|Y% -gPMX)j}KWN&bEX>V?GE^v9>J!^B@Mv~w8D`w%kBDqUq<Mrio#fws>D2nY`$5u&7_EI_(79@uvA`svLp -k%Jg|NZ(kFA$VvDz3XaS6LE)nVy;Mo_<aDFp8pHy-X`TSLM3N%A!_jF;_QLxmnk}-sMuOb(IyfY@KVh -)Rk6Qt(sEJ^&%^@?Nb&rJyO$6qyAWw%^y`()J<A6S=wmTEcL2)lb6#p&$qF92i+>2)@7llIxBAAecD( -+_gS-4=?p&{_0#oQ7xTWFr3L)2s;vU3jqXi#bFX!w)@fDiI#%m!Eq|*UUFa&!ExhJFo57rmMpp%nKce -N;%W{*?i+<Bvr!~%=0mtgHgh{Cx^vvo;7Y#Jeb8m9+VNvFJc@MJ&M9g)a-4t;z0xb5PDa01P#&ylg)e -1n!U<kL;tMU#o4ePDT6=1f6iNWL$MQX8WHkFP6%xb&dPGCk=HfzQ_cA6jknC7+a^|IBvte_M9%Cl*_X -|mir&C8n`7}|U+Yx7s5-#7PFy6!Eias@*bv!*QbTEHOkfL1xbg%Jsv=H<oDXJ_Z97Z=H^(>G@$^^PWF -e!oOUF(1ybTQyR@r1?hI49$#epw0ChkRtE4Yeba1IWB-YCxGvCngcWa0IN5E(|n{ZH^72D?g#{rlRMy -zvWnN~>^8+!6DI7EfM?1go27a7Pn{I$D(GtXA)e(~OpC2dzmu|9WH<hLy87w&Gc8PE`>j^MTBlW2cJ| -22SsHZs`Qr3EIXOOgb(;L}`g{bO+az^0OV$-^t@m9ZR^?phb-XC6RoW!Lq)k=k2HcPI^n@Qi&^s&U`n -~CNwmp0OK-(s*a8~PWvxF@oeJ<(Y89nRjOH_!LX}#2TtrwT)@7}&lUL9Y&I=$H6X_eJ8(*@YSDW|}sy -&iHk5a`ITcMRjdp=X1HNSh?XUatotNmXf9>xB1AqLCH@Chw%hqTFO+xp`IJ(3Tsj@ptNNS?Ebm!9U#C -`1>5;g6NQbByEs&X$ZBUzj>gTM;*pJ>Udn;)C@`~GZO&gPez304E8>^Gjp@;c3RMEQE2e^xX0pPzR&> -hwTM12tdHDqqCUWjkA4%gJ>vz)wn3z#_%{$r19%zN>pW`)!{M;!CNHal*9POO^wuJrw8nsbPH6vL0Y* -o-v9CvV^}8F4aPEnd7V0&~#lj(jny7O6o1Qh)fW}j5JXRpfH!F~@4N37iOn~)CADN_2lD{vqysvKcw) -R#={R=1jWbgYk@mC3`^QI$AHsZNlML1q`&4`2TYPbd@y)=+nMAwElLg;Zip9@k4@=M52F*f|hLWtQ?& -u)`B=&hvEtUO%zdLlx3B<*->PZaJjSPLnaUEco@6$Q>57ctkcSyx#>A{)lr)D7<AJZ(@SIr9N*gcNn4 -p35GX0CrN_U_xp#*Z}e-_FIS3{M%9kyF<%Lfqj7lruR6H@t7N-VZsK*rpBRt%C)hQ)X@G2=)E0S{9oC ->95w2gWgqAo*zX`Gy4wf}>h9O+G~4qAL|v}YMj*}L+Fa9LL&n}TE7EG4ltsQpLiu8T0LvH*N9sc~0gO -+gkIW-AEqAWbc+z0H={gaD0DwWSJ&Tq;`NL5#ByJi+xt;S(QC2#D?$7p_dX2IQl(-m%z&GW6k(cSb7C -DKtQywvDwE|Y6LBM2!v9&;|%S|=Y)V|8VwzSqMJ{i|*J<Ar^Ox-UvC@ZkkY7~iEVn6^UKyEg`PM~J2S -U^P#h9Hi$hDn00!Mp;j)X64fFYd*t+rOlG0yAI`5Iq7OF5J3NVVJFhLy#&2-48#>{%inV(HNXXA*k_~ -`EqRd5_W-shJORgjS%(Yaf`*;fOJONYCJB=F)U9=0a${S3k2kXF>}Nbv6*etf@P3Jz_^2>EQ3@70O<{ -ZBxymJ6exg(v3o3>l`TS<VBbGPIG=OHnwe+SBpC8jgrjMlfNnrw8!`j7p4h7tU|U&kG-7a5<QiOyXct -t*8wAOEm!+z21Xw?8YZPn(T)H$GmM}1A8!zygjF*wRLm}@B8TdU3)CLGEfClF48rBMHsRq=;8w-tTHk -f~>F?S4cH{>iw@9QjEGtdG58glo`U(Zf2teTDa<Db+Z!WBfo$^KlUq3x4^MSb$u)AO*ac^c2k^>(n^` -YHr>4ZZgxqq8?mN_w@(1q*%V{(*mISmasoytmZ(I+<7x=qiq5<NqLF@zIz!g$k_X#()m_Ym7kT6F8^M -QRF=kx7vS%e;!2_OK@oM&lnyLkrk$!n*^PJgQhd4{=qC9#MWHEh5&8SR2yyEFVaoku)FI`((TFU4Q%d -Bu>=mzL8^PM*t#m$=?%sl%1u*ebBaBHg$j08y_tfo1Y%eFGLZJ7PUosz80Uh*6)2bLW)8-#$e|(OC96 -x=_ImyV)EE!}b^^G+1A@*s1;s=%GMf!_h0sTe6gc@V#a&jF1;r@t(kjEHuzp3s;A3e<Ci|u$9TH%q(* -M|GFh79QY|<P+9)=cyGj?#I-FNOOqs<QPUOWYB#}wB=yaDye_Ng{xv!_a?<)iFBd<5zDnYbE&Z}!PbR -IK-)Sps~Ops*`o%mmyniAW`&c0kI^4@2Cv(&_EE-U1u1#v-ul080-H`6;BabO`VQJd`caDpaTcb$NRJ -_V~@4U&lWkzde3=`hz-?K!IlgvOr;L<**fU-(X3>Bc7yTc_IStdQr&0_I6g*z!EVBh?$o4VH?@wPXQC -mFnneZJS#Uv(_+Z4{8hZn?m%7v6;Ob!H%)8<0I)IV^Q?jQ9KpnpDA-Ww>ZlD-=7nmqm9AxNMF|FdjxP -TpI0plcdIxJVAP?PY(ZyyB_y>(oU@+p$i?r0Jvjdsrmw*~|*5a4&*(cbYl%ez>RO9BBIfA@FZ}fl}{= -?0XfCTgNpFEaVJi$d=L)PX2T;oYGW*{|~l@*X_T^4iFho$=4@%h`=Z(oko>G}D)a|U&C{`&Iu$?+SbH -+?v{z5|bJ7)U<Q%{NH=WSSnxlm@~WAcW$;11&F_?OFp4mt{6H)a4KL(N%<;prUfIh^|BYMlGRoK{8~E -9wxa-4V{MYU<wBFLi>c$D>951i)%FykP}cOL*^a8(<9ey4Pv`==o|ST#)~Z1{u3~-y+(`{_j#q86g2# -in9d%Cya&AGvlQiLi8_x(nBqei<OBfdq)S!+ryW4ZXX=Nt=!17w-%?bG;COO}KDXtL|M2tW&JS6QQ$* -6O*5rBHfn`0ndW$Ae0xj-9RUXKo0%dHV1gmHdvBQ<=rYVsx=RDgv{>`y){0r<?=m{<B9j4`uos!|Spo -Jsf&MG>1fw==6%Ujs}=zQWEnVHJ7X@x#J_|qE>O9O&PhDbEe-{Nj-WV0nO*bL0^tR}-5UF0jXijl<gN -6M|>I)LQ1is>_K$&L5hg9XO>ZCg^<C%gf`TWzsV)F}c|MSbmI9lHKCxOXc(`SYKz5ML8KO1z){=QTBq -;mI97gtZHkf$33Yx<1rErp_(<*MG+A$##^+*Zy*TO5bOz%}N!U)fB_23nf65PJxbK=ogwJz9QPv1`Nw -}BgSrIh^79;{6RWnC`-f-<w0TrmMEQ_Sd$@IFRU=D^(;U~*o@J!$jh{ikmmtLE-(s(_F_4^)w~=4qIM -Sw!+}P$OQm=Tm<DxICoGZ%-Z@4P0g>p2<@skuKi@Cu5F6cw9PIe{mI1oWF&^^>V;&)LA!1%~FuwP;L; -Z!qrY7lvKko6z6n~^fviQil@}3#V%NoIhYe}**5fQ+GLVnH5PCFJ3d&83qgL(+o{A@W=gKS7qXZY)Wn -62^mbO^o<o;(lI;Z*h*2@MP@>FTj8xT|WhbHG;KgB_jOrC8fC*l5(V)1St=n1K%t#?!Gvuoy7JXvK7c -p^VsH{Og4hO#vd*xNsEUHlzufUudoR7Z-2Ti3j!<UGbl=zCKDWbdcudY-8iWJ_yu_<a%TUp9r*l{aKz -tzvOAyB^Vt@cCh#1+HfQuP<;aX7Uzf&2JPb;3|NIxb<m7xN1@bfQa;y0{EDbsSJ@q6@mBL82q{qyyMR -w1sbXA-P@u#0WK-n_Nx;mBJ_0lbK<?3cyUx5P5;-yhwi)v0^EWNL;aPuN(|G`P@X_^s3Mw0VpgzE5ip -PA$;RN-XQU-P;;?QtlbcwkzqA)n8g)GQQugf|EGmQ^h@+>VRN^*93roR5_h1Dt~fN5%er{lBNLyE8Sn -GM(n6(}cslcyPZj|PBf<vLyIkRT$Zn<`B#sva$;N&G_B9cnoIw?NljLeY`pK_S{DahW`)I0(|GMgmEY -N710VHWnAgsmRv@!Ud-)J~zecf~jPam;`CnhGKv9zJ8u`C375}9~@br-n$mQd-(Yl{%cYXA!^isVt8o -m;?7PRH3qk-n2+<UxUCtT68;TzI<`ru&1W#m!XsqlkF&!u4*a1^VHqoANWsKHrM#6ZR<O7e3$<)kISI -QF(p)m<$PHp_gdCGrvt@P%3{h{uC<Lyc^G`LvBeeMDpR_6I)D<4xFY_TmuG{*{Y+ITJ^uR`7EYs{T=d -TY8=k|0EmZv!)<!Fj_I<n0@IRMkbgdo4~8?&HaPA*V~Vx9<7TMmX{RckcM(W7x}jid)wt1%3}EbHcTq -=fVvW4|4O`#>K>b4%Y>?=CLi9{+UuC?WAvTHSI|A`XQ3#@`c3@5?GW9_Oiyl)lr5%5rnFR9WL=Z(ahP -5lPGRPUF!Y3fhW}JYQX2o?Wz2<{edk2F7OLc5y&<u;;;l@_zAxCJt{WW&jiOGe_>oX*U@n%0G@r7y-M -H?vwl;KfJbrX;9Lvjmr9HlcNhX#6AaaRfsna$`0cE5xxxOB+)~0DyPMkKk)B`E)9weHO*(BN{6U25Oy -`Vym&g2P|p3iLngP<Kn&VaE1ZD$%q-}P4*Z=MuvWv;)|{prW(M@5IR;qEHMNe0OaUuy1*#FdDG5SU;( -ZHc7@{}fvs6q!?K<aA@JPRX*6$Mfc2fCV3K=yAi@@X^q|+LIn+yPK0;^1$#-wS+cao*X(}<BqGAd3MC -U~&x0ezh@&8bE0&tuRmUC&tC1SSh+>blnZ9Yfc~@J^WLI~caY{;;?ym@y_iC?AhJ5{02nqY7<G9Gb<J -orD=sbvC8hi2Y0FMF!`ay12u5U-T`Ws1gHx_h&>~topkhQ8RN^zd7)$x$|sORp@cS(xrRfSyu@zKg>8 -|ZtyY`Llz{KIxe<0De)!d_NZ3Y8s~$?CgD%S!i_Lj2UoRuA8b(0Sz`Wq+BWF5_5npVP^lbsBA}D^d3y -x;ezDATwLxkn`u!~5z*?MuAqY<Vm|<hPxQ=&dB?oWYnDH9?f5gqs`X9oa!HwgV9gWmt%snZa^eaf|?X -W9t9^I}N5e(9yx>|CiQ<ijaMLQ_&3$Ad?ofuzf^W!A<&txOS>Vy?N+TD4!qwM)S(W$sTg`)8ldbDK9Q ->we+6Cz}+j%S$nQ!7bfloVKO?ett<jufbhr!}pS$u*=t806lvKa6RLuoSEta*!el|CBkHf<sD-EV24Y -B4)<##6&SEVZ!2{6cduUQYrLpRycrx7Q<ekDk)nPBoicm1v46NS-O|2HAbs^KMnA<O1El}W;r$yIm`j -p#<R4tnysvo9H>>>yz+PWm*i(JmGsMSbmw0FU3gk@k^ispbZc4<@U&%GkEb8czr-~rAQ(i6ur-<-vb( -}$Z7!JG%bgyWPcy2`vOn-JP`Zcbfd=MIJU?vR=@9G&q}!qYcNl;|?%@=5FXfz({H+=0yI9E?iDeBBH! -jzh!?V?<pkOs;eZ}hMS_iv5WW`o&r<Mav+sNX;#YNPV*~S!B_?c5o4>stq;t__u2S!<?;J2i}Xjr|`X -f83#q;h0aWX-tI%<Ah+wJx!2lZ_16df<4QA~REHF=!<fQ}N#w|IDx~6DWV}sspjk==wUW8#-aYoXJ4R -Jjj`J&V38$eSt?_FTROrUqmnBZ{imbS;^3$!Eq4V=<=H)78Yw0b*%m}<^}@+oZyMci1YpuER7l=!C_z -h-9Gv|aJHoZ?9eeX4W6{4n4maiMzn=ah|M%CFbj)WvIR*c#*hWd)u+7WWuaN^0=y|lb@)t);-MmQEC3 -PP17c^g&m{34cU29$i`#QmSQJafHB1KFh5@x1s_)c`$qqnN4-qK06~?8SWu>*H2!r-2h9Z~j?}0r!Qq -Nl}E!4fHjuI1`;SmN<4Cu-P{U<Gj1q>yZY+dzK~(qzl7O84=V%A%CD#abQJ6M>iOjQnkU*+Ti3_u2 -du3_E*St1(K?2-74R=Qildc@0gOVQy&oz+*n>h+AwK48B}K~FjW@b7_%j_t4i%yX)_rT=eE|dC@a-!a -kmDY7u<*EIvz`UVHW!dJ7MU4$GacN5)&gO$`4rs3<Eq)Y(0wiTdz|>LdL87)iBM7}IIF7DQAttb06 -kWZhS#YW$m{QZNqyj=0!T_|f@7t<p5ypdPAvCh0bLN?v6P8=>wD!0#x~uD6d3al?Mv5bX<sfc_jG -U+{WpEMbmy9Wsg=Q=oT4r4$p+bP=N!wd$J~=S(rEDv1mTv0E_JBCoywW(D#MC@8zU9n&D`nfRhpmaC4 -o_w!psqA&e&uLIxm~CQMPjn4J1IV20F$Q5fFs9niug`@mC|#aOS}`_`qpB@Ia11fB#li<5gCamA~z1D -rsI*<s8R%Nj-^%F~%Rv#*OQbGYmJg*bQM(+JS`>0gUiayz7<a%sm~SYRd_4`L!j%K<eA@^LHT35MTZE -x<69=-?sR3hJX9Xae&8uw(iI3H7k9~5^|15s!!r=L0OCA@YXcM!j2W0js5kuk4yywo9X?NAE!43Xm49 -=8JdAu;CdJlp=Urjgw&>&Yx9MyaG@Ml@qG(F9AUQWZSt?r`|WehPtn0gJ_2ph8;5ld)Thn%9a|mo<C* -Cmu>BUhddXL!01~$4hF!8k%3;j_;i-SCWYjM$<@(N+jwFZ99GZ2xbs@W;^?~*6!R->F4eP;dMV0Thu_ ->s&zGYFEHh!7Bbz@8zqO(zGDLl|JM8ZQYktX=wyAB~(S-S$C{Tc5P4PH}t*TzxM!ZEX5rC11^#pl4bz -A50E?x|(R71%~$wR(sK+o-E>J+wT7<p^%@#6wqm15NwmM%-~<<R}2!5jfgOBk{$Cmr7z~M|4IIRhfhO -Zifvi84otlJ^XA3h5Q^uFxEBI8Xuf0hY-g8`4OFm8@Mg;*Sbw66rm3sR7nynqDcIx8J_W^O^RO1w|Iu -*C&zf9V>^?*KEo6Jg)`0;H=e3<8_>GIxpJM7L6bS$>4~|Q(Q%Y_rAPeE96PhQ`6)R5T-dwjc>rfq1|^ -G9u#1c@-+}|9V@fzoSTgMe(u^z3F+T_#Z4jF?M!l#3%)p=m35o^U(ZIx1ufRnH?i&f9#!g8LMnACNLB -u#fmEnCkST2jYZHg(40;Q`Abi_fDv)5<I+jowwj&Kv%+Y)%_POnN_bj~uO7zEpk+yxX5Dk+Oc@_@!<N -aK-<g%bGI_|M)6<okH|Z^wm3D-|Ag6#75f?SjDu0Agq_ws;3P%;XZWS~nETYGX*Oe_kd<^zD>~mi*+k -vI71}4LBUNKsm&ri=vE%Kv9Z=+D&HfwBZs7fd$q-*Ck=uDb;$+0bqH9h8pGh)hXKrIp*<KVCe&4HuVU -DCj!djCE5G-NEzw+8-^H+A6)aAgsi2y1a{zC-v$fu8=fiLTK8!+uUn21-}wgWkKBoUAW0s_0_t_aWwf -vufQNUn-KX1{PH3{mw%+A-D=9L=<aDqyARnLNFsr!3p?1iY3voExkscpjNBJl*{#ei0m%CveK<z4huz -@So!fQPao;`MsS`X|UD52A}doRr41zS`hX3h)D>4Xp3<XiKgl5$ihPpLCzSSF{c?y5WP9_~}i3{q5)K -&_}km~d~%Hr-_TJmK2?gPmkNKt?!Y3ny4lYmCl?uwV)aM*F^l`z$1O2?#vLnlVucY`cydeQXl>_t-ih -vKIgWg+)2z&;Q*8J*9F)*u=U+5s8DHvroY+Um?Q_KYV8p6hZCY9nl`@;O%fic|FKE(_I`9rU5r!KmVq -+)V9F}uadQ1L&N`Fiw)*6=6M`$vIWc8W3gS3Wz`;XpLsR%%qjCw0Cn1V9>^U-FEH_pGBd{8;bxmruyp --Gx7mjH(eG2Lq=>{g0oNd51|j<`dW-=lVeu$BmR5KwC5v2?RT~AK?^%^on95e-0dkN{MJ4UobS}XH5< -*A8IFaJ3NVslC$WDPQ3{$T0{+EjGoTW)SSPMIYPYiE|^~SVdcE>ga1kPqP?1%pj4f8+4Xdji}8fLxE> -ZJ)$3&zoevv=TmsiGL6kq9=Oj)`y-!1$K$yW(3)pl{X)3mB6~{M;ioh#Xuh6-2P^+z+`1U=PBpXk#jH -K*>E2Q0Cyv)MnTrhHZWePgNGtYcn;qF6){ic7lZV7K~awO<?+i-1^A3TH1j>I>ZDQjXj-m@65F?qn$Z -=TWG(W2rW`i#yOMJJ)B@(<R?^>$H=~NazGxdmRbQ;3SY8L{)Px_wSDKceWuc@i+DEvoa>u(wgr*6Oz$ -#)GIZw9=Pf!E8jo7{BP?&%_d(2r_a*OWVwNI_c#!p%IB~tz<f5*rr#-nRgi&lQI&!-hn&Fj?@W}1P;I -7w2bZm4aQtE?D?V~lsM7mOj%3n`^J^JPN4LGo{7mD&9sYN|Z<K~m8-gZ{h1NMHXl?2X*kM_x9vd06!S -k0Lg^enhRFsscSy90c81?{d!R9`d<g9!F*%*PPuRC<93*rI#dV;+GA8oF^FLfFM`4oxtU81l<O2J4CQ -;TYW5fD0|wa40`!h`je%`=te|6_IQWVM}q`HDe~kQcL7RB&TFY8NtH_F%Ar*u&%^~?V8@|9p?P`luZV -Es<ML=dqbbVgF)$@c-sT-4mMLUgR`h&bKi#i54zHe+zJNK;jRhn_Ay!bxbvvYuO?0XJ?-Z)Vy+>n{df -(Mm@d{Nz2BDwa?1bHR>&~AmKZ{RXfb;h?ypg*6AUqT7b>ZdyjG$0j8cX5!Z_<D3V|BVVZ&%{@3yU6r- -ys#)cc9?5`uwA0^%h~9M45d*42SwEa-T6X>LJ@_;~m;t~5-MjCFKksf3BGZ>hYC)%RNi$((~ncxeG;$ -f03b;}<oc9ca7o(j=IfKx2FMMb`0w7g#d5F@Q6tob2-l%({2bClYe4tE`-7a!oPW_*lHpU%SC~aBF)f -Rf=a(HeEw-hGpV-|0B2qcWFk;=PSJBD&|<dUhyuV6L43SZLX>*%LdJzO0E_;@Xi{5f_7LHUSA^hiLD` -8sEO{=$~<$|mheL*fjDztiCk02`KFm&I^Nz$$tpM$`BNc(r3%5J#k$gUO}+`;VsKw{1yEMHy3q-Kt-% -+{k$cJ6HR5lB1I00|G`}e)^9;Neya$R!pj1KQGd^(0&8;zX`vMC$D(s>=@Fh0@AyJBV+{z>keGdNSh8 -<%tc<YR?;EV=G7@3K+5=JL5`{$obcnmDhz>aEJq0anF70!tkrlP>?v|ahO0}dk!g5`v3JjTvP^)mg-* -Z($YT}7QvXLAkwZj=6m#?IWcW+mgcq}0yf%Pt<bG?^YP1VL4>D_1pbSy(AL@*h6BX>=}9crqcD!#%<- -Z!no*(4)PKE<(qk9%aJ}n7UWjLu2_ep>d;N<HKYG_KeJd<||yk91CHII#zOl2t<zG&~3I-JA3X*j15E -1>0D9ZBnk3;k|@0FnKGdZC3lbE)eCwcX=!ppGC}xEchHH0R(c{{h3JbVx`b!Tr(AS@Ajcr^@&mrsKmk -c-OF9U%xid5;V}-c;!ee#HvAs!)afwqG$f_*3%+0v6m!EVcZ-Acg;@wWnJzm=h8O;v16|9u#?3IzL^d -?0laClQNROz)&*%mP6r?I*W<NldZa&+NTvGs#csRPuiSI61FYsRo~B?Yl4Xz7OUgVQ>K8;vM^<$*gHA -28$3<+gik$J(<J|N3370_S@^xctIcRVK_g*k6SoT#Le|8Fu~Qx08g)O-`+WWVFdgblVr~WYZ<42xsZO -{e#NaJ#V|?UVglW-}{~jygMJ^_T_6{DB4x^DQi-0#q39xY*G?>Fy*9wKs-}s`Y2CDaNZ)eck6uU!m!= -!=xUhP<`VO5uR<emLBjm5M68>GeUdQCZ!F+~<?kKzV3}|M8xW6e<{BJ^nH(lEOxA~+H4vY&p$nG?$p@ -*%8R$JzKZ0!7R3^KCFMhc<`2%=naBPh~$`@d(iO*m78$|d^WRBnb?fBP=<n-<F_is*rNPav$zWn)|zL -tQ$E+(=ix?|427?XR*r~aUYG30Irl~kX<yojIot~rbgrhBsBsUAiqjB*NqfH3l`P9!U&&5B{42NP?}T -^H60w;MECq;=z`2+%{iWQGVXPdUu>C$$Hc0n_t+rRdR^0<sj7M@CFXtaY7gn_&Wy&ifJ<rafZS@Q$88 -9k~ux==$vp@r6;%p>a^kb(!DU+hctPXkf7C=GKWsbDC+sj4=HA!N`>M`CnMU-v$|cUq!Dc-?W%?e%%* -32(m#?uuW7XS;&H8n^a<=Hxuvsm*|Ty{8UZz-4X6t@Qn%X@$T0Vcqfx2Biv`X-#B;>=Ec&r-0ovudc{ -2EQeyX{eZg;VCi;HsPm*q2br0muQTHIY*3)a}-6Z9n;+=%vCwGye_b^NulKIn956%0c8DS^9x;=Q(tp -Hq;mYfS;?CvAW*dNVxijQQl@V3H7u$jHJ&qsW4onMRG@YFqV_qcg8{vS|F0|XQR000O88%p+8B1cUvD -**ri1_J;9Bme*aaA|NaUukZ1WpZv|Y%gPMX)j}MZEaz0WM5-%ZggdMbS`jtg;K#zgfI}j_bZw`L4th1 -CTmQL8V`Drc-d^43d3$=X~{6G@b|Wh6hY$7p`kNx9`C)hL|gIP8iJ0r`rxXnEfRm|6uptmKa+7-Nh6P -dtn>@i*UB76@cn>z84wA70s|<?y3eey;awtQBICR97Hvef@x*6|N*dZ_*h0)0%e8D8M_0L@6(g(ap3R -nVR|S+@2xSxr5jCL8nBUy;S8HIH`)b-6FpATFi>Hy>NL^c0(j7mxoT^8u8(5$gkPwHXyCCltsf_Y|?@ -bazAbT%1;nR7TlsoI-!ZeoFm9ncwe2f7^*iYQPz7(BS+|5D0dIh=&-BKB;^@8jFC_@_H`Z$XtJSS13J -*xt6yLdi(ksU6fiR@1{S8_q17R`#sbS`8mA!grDO9KQH0000802@m7R%ULjxDo{b000XB02u%P0B~t= -FJEbHbY*gGVQepBY-ulTVQFqIaCv=JZExc?4F2w4p}83542g^T8XyA>cQ>p+(K~cE>_br)icQ;E70Hm -~q}j0lzK4>XG`-#ew9pGlkq;k|&hz|>Q#<L7LJosgwG7G{K_<B4V3i4Fmgjk<c7t_6Xj@B7=Uvw+)6H -A!=aoO6mIvt!WPH{-yA$C!U?ZlxTjj%2d>;5ksk0<9sG+RzE;*c)wN|AZgRSju&=g&plwX|E_cV7>nQ -D;ElbhAzu7cuDn&wTtbmeD-+K~+Zt3l5-#TZUHU)1o)IqTk%9)r>+!G;D$3GyssIN|7K#<lDy+{Uw_s -*K!GRV}hCyAmI*FgBckFpU^J2@bYch(^I;(8nLdA3kCoPDes{A?u*_q>nJuC|}#r$&MPaJ+hlW`Di8J -kDM>X*PaAFyo`yD=<{n^>g8TpCu|Edp@-RaG<C|37k=FSh4)0TqVA>Xpzg7hTEF2B0)Y(<L~b>~J!id -#MB9=B3E3;LhcgUs$-&>iho({d*iyLBFuS6ZGONManxGE5qw(XwW)WOO$avWjhotx(hDgh;b&>^?K_( -Ej7LvW`Lm2$}`kE6r90yq{drjurM;EVwwX3>OHFSM7GQ=y$tvJ)GBj98wIwyA}41Mh-qP6w7<4~jq47 -lAxl~F=weWFcZIp5n+H{xL3lV}01A?aeC030XSO>)wasG$Wb?p#c~N=)F@D=tLfezOMxl1p(Q@nq~FS -*yu$x~B&Y3U9$F{69z&Q>e_|J`p1f8)uA5anlOK3t-^~pfL$&S#vSKHnC%KKk=Z-<l1Zq(icfWbs6@K -HManU+mW-f?m3(AgDH-54@cg}y;TiUm<BQpn+5e)lb%8FGh6X$q-ShrV(MoxF$9dYwg=XQ6890#z`={ -2p?US*83gv6frF7+dRk{!Sn&@%uavIaqkbQ92<A(M2La*GFGUYJKTe|2Y>EHX&Nic_Vv^?*F1JlyRk3 -wd`6AlCvw>2&Vl**J^sExhGwEfE4l`H864+`5m*qr)=r7a|44W>+d(WkqDo}83@Kpn7&2csvITfu=#S -0^>yi9IPgk}9LaXOXvBQZdO<2F+hu+AE46CD|c^{LxGaPxog!96|#u{&#MAy&UYIjl3rNVO3-c91XAA -^+m(<^=b{yY*uhFR#S!Ad_P#A}mi`g$+`GP+m6Lc_d9r5!)3P1!r7}loDo6`SYa>?q?PiG%4~U#=4!< -kqM%ReSQx<T323ZE@EXse$s3xNrClAQ;IED^`%l2p2ug|Dvd<U+u{sIY`dFWb?}8iA_PgDb;r%ebI5- -twdEAtCVv%L9?dOg96wmos&0fwxPA+|hy`-)xvhoX*|F<I8ecxzc%f4&gYKYpHR)DKu9#kXImYKR)ap -6k^{%PX4C2+4{fj9cnU&y5qxdv`h4g%MHpZ;+0S(KQ2dD62n}52$|9rm||3L2FeDQrr>r0dXc^WQ-xD -JbVC+zNs8swE5c=}l4DGo3&&X8|1wdHnI{EA@!#sfy~_meJH&bQwR<*XDxgsO(Hqi=DVUh@>vs+bOLK -UD8;Z<iv^FCdz3&oG@WU5S$su*q;EmOP6wuxlrM&$T&SGiyg=72{ZH^*1#y+~F*j4Q<D+$ZwdPvDL=+ -enb!J$?!XIa3yOXFC`zR#3Ip`Uth(U49Z*0vwKtItJS>88N!(+izz3L!syIwGky~mCz<R&P)h>@6aWA -K2ml*O_Etc+9(rX4008n3001BW003}la4%nJZggdGZeeUMV{B<JZDDC{UvOb^b7gWaaCwbaZExE)5dQ -98L8urkW3tu`7zP+~fh}vc0EHXm1^eI`0xeMv7l{-|Dv6QizweGBCCX8=8E7N%j>qHObI+ZkDEgIXE) -EqVO+|A?N~uULg*K|q4G0Jo1z}H(L@i?O7^x{2q@hYPHH)HXHsf_8l_665C*AHFC3B{Sm7|`OO4h_28 -?@t=KXYvo@})6c3R)%Prfn)V>ognQq!|~6DG;UmmRCi_#Dm{@U?x+o5OiO$40NY9<rVkpd0j|*jQ)mV -+TF<OpGi^jL+9D0l_cc0DJX{IcUIE2GWt(eHRn>*)PR{uv$C!se7bkSy=Mi_;of)!&1+s!m3h&W8TOR -3&iBDPtNlqSIeBnvc%{>t>pTn>=wuH}X|U8C4oN!9W?4q7D$B^4Y@=K;YFLIT&boj^35o2JcQM+{X0w -8o<h5?RAj^*vp<B%e`~WLwc8j){Qp~gpu5<z^3qbI6uF2Ww3yUw@?1bwH>#<e9U#sbXt)suicX%`Mi} -Uy+*}B~CqNG=*MUmY>2D47KKBtvtgShmGUB8+3crk1dw1(3UmE6-RI0$`N`*3^xMR2RM;M&62=1({9j -};kJ2OTfM+ovvh5QUR;dcAjeD;v=R6HL*Hc+jI1*6^|#_7CNd*7Tma7-R<}+a?Z#&P*proF60KF^r?# -{*>M&Ev-iw>mjP-UdTrs8nPHzlN;4C+yz9zR)imfRLooI5a-K?RKOlcCWx4V>0EK^hgA;VEwG~<`JQZ -t>_*R+t<{e|zmR8V55ix{RJZV=jxSM&1e@A~go*^b9o2Kn4XZI@xMw#?@5mQ`XO#XUxrl>x7p$%(Jh^ -sd#tSA4FOOMsG<OhX3z7yj0es!kiU3>N((_EZg@xV9MeU-r@y9C^q~yT#><J>L6Q~zPxJd^+ZlLTaDY -#;}k?NQbsv#iE3m&*KEuac`m@6r2@C<9&8K|VZx6#7m0u|VLX&r@wS>77NdUq%<p=$v1n!B{~$=ztN> -Z2d1a1D;V*60r3bMZqbvM$^T{*;hw8(-}Na7NeP{^FwW=o>8Ds3X}+b7wP4Av6+>hH}DZ4Pd(m<Q)%> -T%@CoXb=s<t~eUJK;C?Pe01WsMadCR;qPdH(dj2>cJWGmDrOT_LpU9KDFcoh>-IW$q%X8H*;WM+(g0p -WM<@a82vAhcOU{ZAv>PdygY2kZ#7JZ-+v+VWEl_Qv$Jb;KIKcKyKh<BngBxjp9h_<o{Y#TKNHp;rq?i -T<$HbaDu05;3cEX_%Nw`?Wjk_*49FUF%@a}SoRmq+~_8E#i*R^}kPIhhreulszNnzxDrJY;I&>CXki< -ERx+Rm3t!)qp6v;JwGkU57*4E)2#<r3;u;nT(D;zr6!&v$;e=V|BI*brFSg~wzT1)%bOjGtIe1`CiPM -{r%fZLIOXK1<7`gO$VWiLKPtD@H2HE-x;#tJ}@yV)I9KvB|D)f4jW;a`x%^I<i27@&ed9Rv94tj$E-N -7Y`Du6B;5=njcepkb3e75InF;fa>*|R6FhaBIK#i7~lyD;-uCnhp>giTl}hS%V;RRO6J(_Ui(j;r`-v -<7XDl!Y*oRq0DT>M;YcMgnv4Xe^L04r>`u)B6B*`8Jvj6oxn|HHNLkT?FTwl{26<9Qrp4SqLHguzqgh -o#kEJ$+fengRFR>sQwwPw1-vJQYxA3#WuKQsKO-ER{ED*x)`(>k!<8<LS3}_5rGbsclc2{0Zu&6VM+U -c+|kguKNNgNow?jJ22;9Kb0J}jW|qW*v4r;N@iwDbbm3%u)UKokg(Ahj<m@(k8qqQPtUBE$Y+;=$3NZ -rxn@t-^KU)ySGQ1+Y!}s31}Ccw$|ATM=?taltfeCVcBX!fSo~YX8_d5?V;3;DUC7cQY6GiA6K;6R>RD -zir<G3;+kXA+nTHF)@f2DEtugQBQ5Br%d~231{GboVBb3fRf=0pd$2S<{j?kj^aiW<>1Vr1%$Y<|MZJ -7_BMjTtMvgZy_~lK=j`4tiJraoOEe$K7*mW#jNt}WQra|F*yX&Y$2}uQ*^-)382h4Uy93Mw=S~1LB1_ -`tU9h(pK2)ITV$^JdedNGitvLx}A3>|rMR2>?jh3O#YWcuUgWzToznb*=vws0lO9KQH0000802@m7R+ -NCe|H}*j06{7M02=@R0B~t=FJEbHbY*gGVQepBY-ulWVRCb2axQRr&06bk+_(|{?!SVNQCP~!O438WE -G|LQyc#q}g5c7k*jos+#NFjtE9ykb&erh%-Wfh5QlcFv=!Xh{qX#)0&ht0JO_JnqR5Btu#YIax+Dq0G -$<)v#Npf<+51r^0X~b^F+nsxa(R!qNmis~RW_&tIcdOV}b=}kMWZR1asYHt}8h%0C(4p&kCZ+kVjvXx -GzP)IVIeEn^m6NxuWj$4*&&hi(;l-~**RT^atK(f!a-iI|v?;2F7gA9*$g&bOlaAV#5C8b^@n0Xx*Pl -Os{2ZMq+AZG=unY>q&U)#;%)`gmeJ}bLC6t9M4qR4_OwVdssge$AU*d#v=$o8K)hlr!M00Y2@&&m+bA -m2*Oug6d(z0ynft6);a&l5NR7&!xXG$Ia&YJFx=nquEvZ>QZ@vf~IFj5Dfv(*WK3pDzIbU2%{{&53xC -s(Y$5TO4(3@2MR9`8ma7upbTe$BR|gne>VmZ@aTHYbm0zmqGYt4EJ6ugAxXoIfWYM9a+5c%7P6Iw851 -@nMjPTrff#zH3=cuDRNe^b5T<@E{A&V%2kPpd&4_(mFZNuO(6~9o1w5QvCVJVj$OY0peB94sfT(JzWg -D=C#`EZ^ouk5hY0Ez(KR6<o{u5wtli9=j6}hTrgtLKvs;R(L$NzkxkMw5-yFmm0$p%YiUJkUals&f7C -CuAYtSrM^NC<w*+SuWt^gU^cKEj+_Z=LSjfrYiuT)sS|KAKn}qywbNf8e6C~@#*EvZv#U;;ZL+<{w;h -#c0I2`CX5TM{uU;qvHHW6DFj4YFcwlz60MS%xdoQz~vIPEa<OccfhoSw?P4N^Jy69g2v%W}es-HN1V= -i9TKoSmN=ft+P?dgE5@l2&Jyo5<=~0L1PBB0_A-I1B`|-c0Osx6h)~{Gw{)BrrFtpk2q>I$e$hGt6St -aLW%QHV&QBYFLYdWJaEorx7~5g*2hkr_KVh*uE6KWU{=X%>Ygl5`i$rjEZm|IJhEQl2#}kGJ>H_4bR+ -Y_rioIH@|4aHG1Kld$xKlj5<?G#ZAk+9a#TLlHzy4tsE9Eyl1oqd$7K1pR^+^jUPl}2asprCB~^_5{h -J8b<T&I`V&c3zqQGNlR?rQvwZ0LJGk)e@pUVQo)NWY@E0U6+U5v<7-`vc!{Pr6rmh)l4MFXJFqUk251 -O(J`P&-_wSsuzx`-}*kUI<(zqMZsw>P)2EvFY9)oidvPGssZ1gII`rkW-2=LD!`*<4ycd?6u^BP%EG% -^lJ@1s|YSu;rm?G;rxfLj<Hte=bo1B;*UiCmg63ZGcM1uD#i!L0Yhj1LbWpa}T^4dchi$(@Tt!Z7q{v -2x}y}XVR;Qk8s{8k>bEeEvhlT?s1=(x;Sl|0YLh)<JvP75b(GEEKqiX1iKUzn`94KbBjrJTv1z@>}d5 -vi}z;n`NGC#ax~BuOvD)0JtV(ve%^Rzg!j<fCO29qx8S-r-X}EqnES`D&QjG=teBfR>o`D2YvtzQyA9 -k-TiUiI7vscy`aX^WDI11S)|%bie!YWtFc~usbE+8$;ZX-JM6UXVx0+lbyM`-cl$%9}$H1e5{77+v*< -ZREaDKac#kO>4lneoP1cXm0`z0V-C<`K>dXSnkQ%IOZ@JUAk3v7PfLlA|311=8x!>C(Z1|TQ{2}ao04 -qOFO0(?E>fS)0WxqytXP<4P4u7L_@w(nV`AiSeM_7>?Q(!w&sEc&96!qzARYZRi38mLjQB6GE&beo$r -Xc#Fif8PsZ?KA@rP?JIG2Yd74q>m1wNP<g%B#O2b3&ZPD(4n__gNxD#-R(#ElnVDUi>>|;9JAPNj5?M -ZsYh*EO&2+6&^Xf;95eX`px?@Hwkn3$8H_?i^5ygUWRb2sk%m-s<r>LYiyf}RHy-%K>y*5MMU)X2)h3 -yfYlfCPG&P|Y2;!09-?2`#9y?kviek<&61s<LT;V}%&lp9&g^%b!;n*cDUrXbC(X+0Bw3foGJlYGuFA -)SfQW#^B2`s)jr!zmZM!xdGESjh*{C2$<x_Q~h>#r*qr|v1|r?PIg-diLXfXsJ#LC_rWMi7cR-tj9)! ->&{>d{C$vb6!E~I%GIrQM(-!{#aRb!p8xT0k(R9ZRcj)rReo*^Y*V@FTmf_aTKYghW1oK@YQib%LbcM ->zRNyfpFe3XX{w0!ekd+G2>OuV8gmFX~Gu5mhB{{4aN}SakE}cDGsfcBax*5=BZgiBvDu+ai7>yC@^x -e#6@6Dm&Uosh+&)Yde5u<nCdVTOsVcjsy(YNZI;ty!VcY*H#VTL_KNqS#jXx`Da15RFW_6eZ55jS_~a -S>gfi&C)Kb$cE=7Z_iWR}W9cbVU1*qeZ@qH$roF>d$S|dmu2;hI=2eVE16m%O?x3s4gn|(%dKhlxXQh -rzp&&ee_T6hKlYijes|I_AFe~dyun|924rYQjAG^NQ|+1HA7YQFG4akOr?!j^GNxIhObg-W-{3&5dzk -f^EwP)|+j0jrJBaG>4<3b!-VE|2I002F`rn`YSj6MYS}ZCwULO0L*p-aebuJ@%{Dx>3E>A_FOHa%~Cb -@5aaCfv$C&lqhY94h)fWXe}EAN<pAqkdOGR(cV;KBYN+7%?!_&$&y_oE@+eFlaWBpvI37;C0>?0C7;l -oF}d1sgy{fEdA{Aks(`Ld;PCcaO=4K-F1^{Lj)1dGZ?K(u6NuZm)_S9(l=cLSb^-h2_}d_)xs{#mj1k -W0r!b0{rTJ6BcddrbhfW=d$=)&afM&fcs&ykC@Yuz$OBY}9O5P#)g{h$i$=RRe8JaCuXVR>U5K%KyBz -csazsJRZZ1Dz*H{K2`L@kzxc3Pb(Mw+f9g5}B6Y%T^naH)``U;-;x+oz3dxJ~Yz`Ih!?&H&vp3X$LBd -{dY3eq4@(`uDW{Ev9g2Xc#dDmm4{1p4?0?0K_VSe9Th5;iI8z-w$5}$^VO2)EOu=<~x1%VG*b~3xhE> -6O5T|im~v~X1#*E68IG`g;EWm=Z;m_$JxX91}ze0QbC%aC}$|=Bmj>oVpwlaG2zQ>I_fdHdI5p-Fksr -jUOhPVSI05IGd5NP0k9Ym^ccT&<hF&>vVuawB|}}IeJT&MokAhZP=6{2N?J+=9nE}rsd+pc`Bwa1go( -5B^D`*3D~fe`=*xIi2^ER$mFjZ^3|wIt5kVhGFK^n8$@zIgenJ+rMHOU1liMSPAv_bssH<HAqJ^yz$? -IZQz<~DLgmw5ZsCl4k$=ZC~Ac%r}^k{GZzprVl#`XaCDC`1n0D|HJuMjlNh*h@rSj>Zj-6ycNtjO_-h -oo;*%kf1DI=X(E0Ep~asrrH8S(AC%A_R+dP!~wVUDo2<@oO4D5O-N9GGUK6Ev;w`JL0JUujJ;|ZIt5T -ytat|trors3$GHCc`N>)cT)l%#N&GH<=Z2W!woP%2!>$8FBv&9`M4GCEG|k0CHPni4v$fuK7N8_qGGf -z#zwp@R<*sxD1>iWvrred6)G{bDp|@+yRkd^PbUdSbcol3)b&F&5jRGuEt?5i956m3wj1yZdGh~c5mt -YrWiXCsGC&=}May;&#B`TmG5n#yJ*I&m`);ek-D|sfj3#s+9aG#P)cIrJKnLR)#2c`+|EY}`un{pbqh -a`K;m&dmGh%JfV^9W(sosH%l9>(=Mj)87d64BpSiPXtWrVLV2)coHwhi$b^CUJ#;_X3q!N<}Z#@k^w2 -iX(<JEh>*5$zRri%flH=gn#~cb$?q8mQ1qR+_CZ_X@S9N8IkU)UQFL5pGO<8ku81X!nTi+8;dX&)+~! -ykD&NrEsXu*r}RBDBrLX6jH3^E7zXNHpVEYffl)-b&Yyn#mT@hoDM3T&JkU6Gw`AijRiI}o--Mm6V^p -T3EP`fUu%Zv0#N(W;Bnok5m25&s2J?YNqBlew|EF*0;=K$RC!Qz!g;Pe)Cnm$fRcQP!!uF~cRIp*DCw -?6e;G8$Yy>w=_Fhzw70Ua%x2NP|Q|E}h&avrmNuCye0VKGmS6mEz2!N)J#(gN)1GDc1tvy6P{+<j}Z# -x!)278tMDc%+<e*OOLrix$kHb6aH^iY<+RnyIrzK;;nosZxba=OQ#!f3yE8&zqYA%0*oo@G>`JEmEN0 -ss+)Slt0gAE|@)TDZJG=HGwLqK}8ab*N$uWqD?B*Ad6}hu6DeK%^ZuMk_mK@!N*E!Od(<AIWLlVIti@ -dS}0p4y5jzxu1_5Wg%6K3J(XxOk<ne0PS0S&i`LfO9KQH0000802@m7Rt+{9PwfH#0I&xD03rYY0B~t -=FJEbHbY*gGVQepBY-ulWa&KpHWpi_1VqtP~E^v9ZRZWl6Fc7`xSB%UhU9u4$;!-IbSYX8k(C*%<Dsq -!aYu2?R+o2T1e`g%$d&>oh98!Bc^E&f9^CFJ5HV&#r6;5kuqsr(bxN|Mk9z;02;ZpLQ!~||pq2W%O1U -@-hwZ?YU+P>6IXvJj$4^1sG3ShOU)BHQCQk&F>;*i!x?+sep<Hr%u^NyPvEt{iC+U<LNQd0ABYWpZ8- -ix0&wSDct=DVrKJ=H>KPfZW_!_D^Mh#w@cEtX639Ui$*#K!EvaAhkr_ce|Yt7*ML5i3MR+BhL?D)oLp -VRVm<JW5oKd&Z)uueQ(sj_5*z2C{+u&8DY(vpYMq+wDkwZ;7I)#0qjxbKcXO@3;vRiw<B73#d@lRrn$ -IoEm_<tTVx6iS#v4O;jaZza9G^#3%4sD-7@Lx{cu0A{E+WL6!m2iY34v4#I*x=th>Hl{~`^p&{Z49^3 -(e3gC@&aMUHHEDDKNptK8Vv<Ck;?YJa@Dk9FsOsI;jhQp%06uS<cxLNcCq-naP(0K5lcSX!LJ$q@1wl -JdY?Cmed?c>z)o2`-=#;n<5CWS&O+WJ1pUZ!sr-t&fz7pE7x?1{^=ai<P}4V3l*X`ad@S^tHQVXT*_& -j<WpYM*3>jxYcC!tl<?X_tc*WrKFaR~;V-7_7)bql6~6SZGyduU`aOec`z%DQ+N!mu2qFF#`ry5HF@Y -UcqyCwMxPrWbHd(orF6KFymcS+CXt=)T1AbVRmOlo(0kvwN5kpkW*8a++o~hn*cArb5&p_QN?Z8YSoE -`&$jIDWYiAR2~pfB#6lf9W$1-}LlWWV$_qhIioXe4D1$L}iw?K~z59lRBLUzJ3flLg;5393f;Mz$V}0 -Qk@6a`d8kkdT|E+4F9DhXX@q79_AUhdev$W5kSD2+%jZB*se*8$LH8)Oh89x=;k)W(!1d=lUx-^j;xK -9w^8R^`$t`j&NP(kfgv>ehWy^a0=P)h>@6aWAK2ml*O_EsNWs53qk000O`001BW003}la4%nJZggdGZ -eeUMV{B<Ja%FK}V{dJ3VQyqDaCy~SZExH-lK$Smf~S0NJJ*&oGuU06ak|?X+dDDViG7ZDgT){a)Dqjx -wOZ1OlAYec{P(LWk|HTlwv(B|;)KCO&DUbFUY;saj-u$auDVQAl670oPV3z+s|vQxBxiY<Ny)Jy>sY} -X4i$C9u0`{KODXCqUMz06ww<V;sgP_}7k$ZD)^aS$nB+~?W*s*bvZlFmHJ4;n-7PB43sK#%qJFH(IxE -;QyUz0a?2i9QR0VHYo;BH8l%m^1o9dureO2)s=*U`8?wQy%b=%>%3%}nk%eSK9?VjPfva)2Nlk5T3Qn -$R&%i>ioxLh&b<?$klqQydwSJroTK$iJgOY<i8a<OUa9ozI(-qm#}4GFN;PGqI3t(y*h121*uU$e63x -@Wg<aK*aj_HWnc>FL|^(?4Il|8d2>ul6f;DP*@|S4{`J&dL?L?VFM>RPRPKaVn~gw@?-5u*zYQk6X^m -Q!EKKErn^A?~0lRmop7xl!H`nl<B2qWUh;D4ZWcBb2sXBs!HF9&lgo_1pYbailkA;^R}(q6}xWvgQ$D -?LodqWOte%S8VGm)GZ0gj9QLO*qg{&X{?ruC_iL04r5hzgy0a%)q0S)Syp*xzI6f>QZCbt=R`S6V!y- -1k1)<|X#_LhKti9u1+U&b6Xq^!gD!it$P~VDok9B(wB#?#<ln*)^>Qpxz^b?sLuaU3n|7q94dhP0o<+ -rNrnNeWb4XMBCdBgwFi<a+r)m^Ka-~cWE2W(g+ySB&O8ThtbFnGX3b)dc}v`Vpa3I?Og)+Jwst4q-On -JQAr0)HE_W*XuPkOOMES{%-iOsz%99RmPL;|w0$WYbg6X*yr1pAN^uon>A2$ZOKjVTa)T2CE*z3<kN} -q;=mFV2nXQw>-Zeh!#ys)zB5iMAe1{foV}V`L0O|(fWII3#Fixq+I*ewCHx<0D*U4)=V{y1H+{Epi^> -&$!f+2(RO`S^6J6N*@6pztx0=S$JEw?_1^gQ^n~W3p`{#n{o%u<Hb;vE8hQ}*#8~_owCs|~mT6jLJD# -S8i^Zbg8<yrR2L^(A^s<w%ES|!k#@;Ot+0lOuHv6Z@P7-}mWB_sCJz~RXQEh7WpKSTvihc9uP&L7)&4 -lEh^;<^hZSAyd19bGLW)l1|IKk{86D6ty+knMWMuL48fAi+wBOspG-R|uS#+AvEij?VP7gS0U+NO#<@ -nhB^$CuHWkT4IrFNYi{z@ia@W#7=y2nGb0o$3w<7#7BX=!(6sD?U$@9rjt;0*o5!@QH3~)<cUf$h;Lh -u!RR~2d`|+jVS<x0Ag6P$R82p^FXq^Z^4Ln3`9<}b%n|r+lHFsdbM_r*h<6_cokpYT-{!sUR|cQmmkv -8%Zu~(w<u`@s+cy~dU4=2MYRlgQV<)O4517D`@O<sz<lUH!eD&3!D<F?rOMQ6cd<N-hjHkI<Q+s*bZN -Ro`#{o-TW9$Xn+;lW7!U32R%4IY41Qv@!n&hRpmJ6c{z&BQI0$ZG=SMF{ZaMASQZDlnkebFVCmK=tN{ -6`VC$KS}K3OVZNjGXMGFC!8t2c}WWjLs^4Im}$QPb8BqJWLpQ^ba;%0n13fbO3@+42pdSO%14UDqyk* -A<JZT9F>D*q^dea!0}OfstUKX}4h>=!fh%^m@T;Q00&0Qx|6q;@Ty=+pe1I>1-fIZRW6eGO3zS`ZGGS -!2o(TX*<1QH&)X@OF{oyj3r<PDh6gBkUVb0*e*CM2D!Defuewt0RLuv*$pC#G8UExD`lP-{Kz|y0X@t -SXazvJg6ZM>-QM^TjP}fz{fUqRf9W?z=Qa2Q)x=jdP4S_>wXe`jfg!@E2qOdtqbiUr!c`c2A*|qFNn* -XS6-HB{JCLJMvc9W#&?^Tcwr9px&|2G{Ah`HM;gC=InuC=9+kmmhl&FeryRMNZ$H#Y~+xBY&`o{{K9` -E+e{um5Bkaqls-~Y$&*}cf`F(CAYLCb^wX3SF59NOoRBzO%Sd*t)cGd7m)kwC26!CMIS9BTv?-k2fVt -P?v9Q0cj58{qF6AaUB&X%4Fs8*#$c5D!92Qh3#LRvsyEBOsLw24^T6T4~N9qihGzjvAmg=v9o~7!0GS -(ym8~aAbW?gaNskMms>6@(M9S;Y+pWlm`}DoCEYe2ZX%t+Jm2)_%2|*lno7WbkdeK68-)&Bzj^6LDg7 -wr;QzPG74??%?B35@5JoE-)r#A!xn&5MRkb|aanfHkc5#0(NdI5Ci-9OGrU^;P`%Ce=?1IOuEACSw%^ -vUBZ+D1mHHj5wM~?|jhwBqQmZ+>CC<BT<VfHv_7+SHVA33j04JMgN9!I7w9`dchK|=2*+COv|HsBwnQ -1`JVzYOZ2AT#Y1+WE}M<7ho!jyx^2Irzy>HL&f<4$PX2j<o0LxyJ3b*R9`$^<7g?Gn=r2N_=H<U%(HZ -9rXZ#9fbRF9128L3l#cVbwlNknRNp{XEe-CGIEwFspDg`E<KqT-wh#IMN-&@<`(&ECRp-^a1!VNDcv9 -aCqRO(BUap*-~0@yaH?$tL}(?6XKyEg|J%F&-A+IdrSnR8Xvj_dt7DdA3T}%VH(z7po0C_)_tSFyaDy -A5aOSp`?bW>Oy^{2U5qc;BRFW{j#A`1oM<3cjdhEOTJTRb^nxfxHZ^waMwwa4{5Hsc#chatn2uW+B?t -oH!j^<B#e{;FOLzjP`IyQ@U}trBUgInZibHu3Tb9$xYG~cUR;aAD#(Ds7w%LO~zo~oI6v5((?PA6xyk -hUNdkAYW(4OHbrMes7B1V8?r@hVOTuk8mX|q9kO;Zk%$9H8F#_$zYiJPlFR|qE`!BMU(;~x1zi<)B=U -xG!1fXFZyn1lQtk_qux9}LEw17i4?)dt<%n~~E}7ApZQU;b`2He`omEJ_;;|4G2{Ah5g|wuW-?NMKQO -slkLO*&~8iC-N6#uq+#%gJ+;%A1%s}Nvy1U1Y8KfF(-iM5+G`dfL`_ltqFyI1dN7s(-8`4Z|g^B#ww9 -3t97)=a@+x~65BWxot_MfP!@hPZf=qiN;d(e9cg5>E^AkW@d-ew<hJd(>!-~d*$g>`r}%_ZgG*@w5Ca -jwy8Ze5{QCPJF3;23^LN*07dI(p;XYufJWck+Km6t5@+>`n|JOh!Fh0M2d;Tu{`1bt#GClqN^zC`5(a -rh)q%_KE@kuA=FhiA!P1^QVn#r`SYn_p^HU^aYs_($g!*1w=7MV}k7nCS!F`LHzQi;#ns$5{sK&KboW -Y0=<L1mGhC_&I#(Q&e(HW{gQ<f>vHfn*SYm7Zdk?J<F=R1IRT0;C`Fq8T1m;ASW%k0DiTEw-UorTdzu -6ly-Cmf>Q}0swk|`9obElVWTeV$7KY>e5X^DwCpnpe76k4Q&~~#a<LqxWg-N-4xi8sf5rrl6!!pJEp_ -$$Yd+^!HbMdCLC9rNj;p;r3aA_`-Ie9tHm@k@Mw?g?wcYbC$DF6HcoT&l^*pY+W)!+Uy6Cz2FxLd!;X -9iQ@Lkwh=B3qj~DOHu0DQXv=A~qlx%$m(JwRI^q8b0;N?urj1e+G_N)L(i#nIFsE>JdEa?Q}7#%LAg4 -K3!yIpA*?opH^EP52xci%?n3MN(g{tjxR$yS)LAW~7=1sd^h340T6I7;<epLnCB#Yil&`~XGnK!Gp>X -5a$R&w_PYxAi?(UBV7zCnQ-x>sBK~qov4ci?n0zTMJ$Eu4#GDa?-}`2p5EcTg+PQ@DR7aJ;6+GP+KXb -3mb6a4q>(j4;-3(li{}LmCNG?=&jnC)IU;}<|WUnzFDH7KEY%O*%$bCFfV67k`hq^%RsV$uObI((c2Q -Gv?TJu9MjrayH^-WAC?HC_#V0%FnnrEVXMzmmgePT{>&wSwva;Fv9RqP;|n!TEGZFJ0ybZECbMaYd~7 -lO*!roN6ZaT!fV<-~4cLb}_(d69OjFtHiI<15WVuPDF-wBUB?oB%h@#E(7x@H>gR?j&Zjv<7_#Z{Z$G ->W!*8OTH9z5RmhtvQFJs_Gnqei5Eb)KUR5#BMuQKJ(6m~;IM{vsD+NI@uW5WBrn!3^;%Knqx*@{eVK+ -IOLGM~;yPL}Nug8VuR}m{o+#vOEVLRCNj`@f{dcCc5}nGTUP>rGOR=r?uz}k=9h^mXqL1JFm%E$BMmH -(nyyvUcbJ7wCeuM5eRiueGV6%8pQdoNI?i>oE7wf(Ai$Z7-VvJs5|~qV)i#59f}ktEKXZ};F~^VtpLt -1LlG9R&I_=Hs2U)}R^(e|MnRm~gE*{7dO$%j#-wXMC{T9-Y-0FeWW%D8-(~s!$PDEr8w(Edl+(HM(|J -d|k9x3Z5=uwkzWMfzo#TmfqaB28?lF9-ZzVW(36GMj^5T)U3TZ&%PC|#-_{=7jy-O1(-gSwUBLey?%q -A6`WHMbWIq~nA*lO626jeHv05esV*;bm1Q;PP%SmG(zBxwzdTh}lMxC$_)Q2oZqQU@+;gk$ql%Kn0-2 -=q|rr+6Gp{$&syya={K*^}X5+uwr}6RVj1@=7V)I=26zjv?!>#A;9)lcjgX%vUF90a6k_uW#OI*>sd- -EV;hem)Sq}=_6j;f(fHdCc7h08Tn+w-cRIioH3>e^Ep)KK9L5~Dl-71;l(;5S6~EaXjA?6_V#*oEIy3 -WW)(m-b5w<{pkCu0Lwnl}TyurEm6CPw+&JXuz-#eV?8uL}Hy$(-K)Aq^-)-l{I686y`ea}%p;0lUQ4y -K%NmgfuY1+EzDK3wvEgUyKIbxU!97f>td#}XNtwz)OGJ*KYZMRH;&<=w$zS&S9g*XDefJNnMHG_Buc` ->%w0rTJ!GN^45(Bjd-Lz`1W!vX!<Z{(W7#Qm`fOe<g|B!$D6qjJ9!#dU^6VA;@XToIZ}`-a5(HCmwZ3 -5gv027EvW?|}6(U1ydBZlT{?xszlwawBSMXirku@GZBC@QeK}p7%+-U#l5$PVB4SWN<*q@V0tNYm(9L -$wAXo06=w_ary=moP@;m#h!T<6VTdII{$N=vb~@?_00h%?;j=OBkn3ZZ5=Kt4ek8wo^GahRqCsxbAy8 -Q%dxQ@b*@?8+_m5iQp&>cJHQa|hEA)ik0fY}-0Y7qJr((DYIyUzZ~ovg0Y{%MzuBkm#W<%uU4F*kZ^h -y`{^WNh<l<g`d=|23bNrP!g+$A_E(*lxd*8lkd-6u9*O1H&F9uaK1u5PJo@%0EXJTJNIo;m?%V4yLnQ -wbh9WO(Y_bhr0Cn=jDs)t%1ya{!;Or<y=x_iJ&fzEK0ETcPhI$sAE1Mj(z{ltrx_Q(SL^CLwgn13rXN -_x9vMK?pJp`yJtM`+T*^q{bKDm1Y7D<GM@85_QNtGktAZC;&&KgE9Xe_t{{d^0gugJx)>lr$6TWS%Ds -K0b~yN}Ts;!?AQH<AQ0I7kdZdtg=h)w-;9Kr**Rf4E8S>7tD4U*}^1T9AK?)9Fx)S07FJ*G8q?4yNqm -KGWzXzaKepe<W%|2fQ&vTpQDa5viXc$J|UAYlE*KU#TU!ruadzpl)qmgdtW4XUnp}gmbXLy2B!OI!`$ -^dCyk3Kh!;SmXCT&W;)Gm3O*H*>;!_v~T+=66`j*2Hekg+U_Ou}7n}+iwx)`CHid}RV6Syr-W-0RT4I -}EnZ%4?fI+30F3<f-2H@b9-9qi{T*k$^;$<%k4DW*2ZPBc0h_P1r$r)YwW>P#Cv8PFU~BUS`RU7cn{0 -i1flmpkE@*0!5cgwL12E%PWt($k@9k&ICBu%gg{tl;Qt*>;gmxQtt?_ms3}9I!pX78KzrBZ8}^E56h# -nchSE8rC>y)bt3U(l8gpGN%p&Qpr0!e2~fX#`>s*xv)OxBENPY%!16PW?!@^rqc^I<|T~zKi->vE#F_ -U_gA;)_GX};jGzk>YfiU*0L>pA>FOh04RME;Sevt~o|XPBP3y=~PAuct68^t7gkK_6y34b|jn7yDE%~ -vT3WRbwk;AFkrNwR7bbw&XnS0sz{0fWyid}3VRNlKiD94I2YfpmpH4-Wu!eBRag&}Z)7+R1vq~_kCW2 -#)DM$$B+P&yOsPK2rOB|0DXs^MV#+`^})qbtG@szr37PCfDc7atVcb9hu4^kMfhpa#!;-DjTYZ*{M}- -op$I%Q{x_3_tU#xW|3~cRv#`GnxK_B^Vm8GkYA4W1fJHMRcE^iOOH1|2{m3)%iu38hl>AE<{c#71(3y -mqaX5-w8}tei#<vY3b;*iphb)zlLd&bH%7FFAcXM%cR$@kqx26jH6NSyJ@NnAAn=_oTuwdikzaAWiWn -t=6W$6&vHhCxCc@!Ti3n5@jQGDxc)oO=b-;9b|z#~f`@vfyJ6<f21r)c^}V@ZXzsQ-F-_Ly+f?Rt!$D -(Iuh=aenwC1hCh796ZGh%5RfMC_9-1w^<H(_SbT*|<hlqVc6DQcy#~J<~L-^tkuAV&d_WsC$o9%V}&c -QTGJeSyhBDt)-z;b2dnG~_Pd8YRg?0j1{t-wkO5b5ffRS_LcIv3GTD2Y5v>&GouUqsfr2}q#2XDGnfd -ixaV08$<)hD7Xvc#L+Rj7QAQ)D?F+Y^Bg7EU4HzwSN>N@&6u1tUl<PT<tY(-utlE`wJII@Q+*gMhEaq -{h02v>OKeoln~RWL~UIT$igpP1x7?%1XQ#fZI_e9fwJ-O8B&(6MU}OCx0x;dP4YHVqvpw-;j*ua-o_; -U&+!qV$NOaTdvv$n)vv_+<r4hAP)h>@6aWAK2ml*O_ExFPS;?LT0090I0012T003}la4%nJZggdGZee -UMV{B<Jb8u;HZe?<FE^v9xSlezJHxPZ_uOMUumKtg0q)iYQb=o3v8liy=#0mUh2LiQANrWkKOLDEKmw -)f!WiMJ=a+4NC^`O;qhBL$AoVkdv3Z*T{l(g)#6?~TPu);0VRw-es1)&xTE*I6S+0+!vS1g%pwIX&?f -Q7{M$@!4{%p}v)Dm^6Uh2=_8kp$j?7wMEkt;SkfS}shQsZ~L3wf}N*_WJztVmEs<sp4NS3yz#gOP!`9 -adf81No9Kqj(2{oKb=atV$<m$Ns>%ZW5@+ehpiK*Voo!5oDh6+HYWy@zF}fMAfuP$Ovy-dA5FPoShJH -=A=nDKS$?Xu(tSv-1kAbQX6Z!?-3t{{0~<?oOpMiEDmB{c4W*gow=A08?;c^$oM8&ja66s$YaQO2`fb -IGp$p~>YF6i5V5z#etI7El$e%vJqt4!j&v|H?EvXJC0=+l7zW!s}Ygi7*>8jwGXH<yIkh~yekyFde*f -0cNjw@0(hDe^V#wG|2T;bwxo!>k+)XarKq@0kW^vTm_LCxTJ>u~8b9tvFXS54=0e>TER$Me;xu?G>J8 -k?)qcEm=ydvqw;*(&(Tfd?G#@%k>j_4gcRa7Vri7nVc98!8M-I`rV}P3Enrahm#-esdLr?mlO5y4Kjy -?~xw)rVE(<fIRMa?lJh%G$p;RjccCUrE`B1<<lTKMEU;sM*PBRB9-kNxg9Q=0t4$MZh4KTR+f<&n=6g -ShRkSoV+xu%_*+Hn(h-4iiG?9?mbhHiNOQc*I97Gbw71l6QX(fV^9>0_5Mo7ciKYw6Wi7^0%ECqW_00 -LN<%->|j+>k(JA1Geh=Z1)XKL-vyQH^_P%;x#-Vh_GGglFs=R}n{dUv<ZK;Ly|g2^2mUc_9KNLF1^JG -4{H472SFw=YEkYulH+jW*3}sb!nH35$+Wns54py}RQ<y%Qv^wcka|;Gd-BFFQ%wmbUbJogQI%E$<+0& -z-aq#Rpv?Pb3HAqrp2+Lh^DoLul)jQ*DOusvPmAW)Lo6ju3|QCGcZ6gCSuyOCjQt;rv_(QfO?b5;aj- -MvX57Vng~$W{fakX+xeLk(kLGGT~WT3Ohi&LKc((?TF+X#)=UYPP4NP$<?xzA%fp97*B7x8NHeSfPlN -DSQ9|TNX<t`zeVX}IAIc2=O`gATLoSUZgT^;7=kw8Hzw0q9&vMDSs_C_Y!$@6SBjn=rAPNf%|o?lN7C -O7zpt+>fvw-e&1<w2y%rcM+P{;&_vDO<B{XL#mvhzcJ%X-BrZ?PnR%OTkHqkWxba2t7FF&Z4z5hDPL_ -_AiI*isFxjrZ&hrhS={&{#$j_D?n0HRiy?FPz&(AbTM-CG?_c2hfYV5^O+t;Vpqf^eaA)XdN>HKs@u+ -!H^;r0%N~p*a(lg623zcU3jry1$Xg{_^DE!?i7Qpx6=5cQkhFOp+g)xh;)9S5yKyI&sof!KAN!F7>q& -npakjW>?*;I1KH*|Na#0IcU!tB+4WUg}RV)%`%IcfCi=MnK8qlo6;^zqorc5nbKH}IpP58cwH=g6IRV -}p(qT=taS6Is~xdG;KgNlfqEmz<m}D)FiPPmOF=zEb&{|k=cW*JgFps|*6a|yB4VN0Mo@WX%sP-q0cV -}6xOK99HX7xu!u&wRnr=*Gj|79v0{W^gxS2U$l-ifApx9x&c2&v^MFB?pP5mI`^CEil)A^ivtKPW-fc -$+k$-2|DA|+UTd}oM7#N1N_V<?13XDBvzB!vm@p{-VLnw|d0OP*t#m}aFm7*?Ajc9Q9aGxXh2SFqx9# -tKV*VVjwvI`^7&S=c+4r7@rOGKvmF_###V(T&Y*ai{(PukRMa+*p0TjQbo@@5_M=m*$hVlh>!yS0CSB -oWJ*z!RIHls~?^|6TRf(?fK<Blx6Q><Zk;hjNx(m?qIh;Y6q_$5VV(Qm(<$SZ6L{ASo^Y97U91ea6uU -xn<cVb&_{kcyO<zqb7m@>Apj-0<rJ$zX}Y2*xloWM4{e|!6za&1|JyXa^Vc0Ep}7p())c)ZQbs092go -pug=Wu(lJkmIg1A{0G03#3K^;ZKDbEi^ei|P-e1pk}D$$}ic*dd}WR6C^mYmrN{1*&|x3)0H<M9IY(% -r>sTx<$DE_gBK#+1yAzy0pXix?5HY4AOHjan$(1KO86Fxxm~JJ4F=Kr6JG0Nn!JwxF=xH|Tf&(TFlzK -{-hN0#Hi>1QY-O00;mZO7>R$dH_pU0001V0000X0001RX>c!JX>N37a&BR4FJo+JFLQKZbaiuIV{c?- -b1rasJ&UmofG`Ze_FT~ups+GP8$<;pC~3-=|G$6*Hp`aPQbN@*g$_`J<)t2scH*1-GZ9*mYV(2AoVfb -RM)?f`T!O8zsV`QJ?77H)jX><@T+@d7A8~*OP)h>@6aWAK2ml*O_Ezha)iII;001fv001HY003}la4% -nJZggdGZeeUMV{dJ3VQyq|FJE72ZfSI1UoLQYombtD<1`R|&tEYL545K?@LXw;j=e*y1l&p-@UU8S-N -b3EI(D#~_5$L6XU0xir_CPZ`jTcof1a<5(=<&US$<%94!Ks22_@7Xn3T|n21#|zRAG}8<q}ah+BgUgD -RxO|bd54n^4tlnY|jG4YF@aukvxdFt|6;E_pRzy@J{4z1s@vHV=@VH=rY?1<+wpwmP?WCnC06Z#h`y5 -UX!H%^Pox%cahUY8gbGUq_r+u$+r!2)e3UStlg6I3T%sVrc0Me@)dlngoQ%*qaYCq%`Gt4wJNVbmr!w -b>_Cdr(P2t$kRlt<t!rAhK?7@euh>qK)=`VX2eK$cI3g@^ZJq3v{V}Y!&=_vH@&;elYqIx}c}pKF4%! -sl5UXYmV`48p3t=0{Iuu3W_eZY4Rl40*_}~yu3v^nrj*+XAaDiv>*pObuxleM6wh&J#KCQfL*-{mdm6 -{#!P>x#<lrt;1frV{&E=rMOv2<{%5CnP_Wrs3o>18mxrI5aWP~HGojyZyF@P(N|pVTr-Mv@y}8c)`l6 -+~%##ti?R0RB>;@KjQ!o0z}wJkOs#T{ft#E|L#{)SH>$;PHKL*sNzR!y_f+QnO+%h_hbg>s?QqfHAOM -#nGxSjK)PVa`)RnoPcuXy^5tYod3n=0_n9PPd|9d1cVR1)1b$}FHxc5GW^e07+zyH`9{H>xdw=eShDU -53dgIB%Y#VMg+m<QKuw2Tser4aFj^6^YeZ7m*>Jp0<nbqbp8!JSiBMf5u$4Z|Mc{QJSHI%>1Og%>f{+ -WGfxvcpGJV&W@`~q&xuAkl<o=!r6R>{AnOb&JRaCJfeFbZrc>>2c6ujZ8;3^jr7_}<Jel|$2)fyj<5! -je90s3dA=o2k9PFtXF;a=(;{v8>-$t{l9yqcZepcN<5Q>HTP8SvOWK7_B?YYAnTo!PPSN^y*c@R^pQu -+$+=X!2`I-z1J9BDLF5Q1DOl2LUOKJR{*Vh(^VKWJ1z*0AbbXmo9JfHew$7Tzo+(!tn<YCh&dV3R#5k -*Z`-~tr?BbYd{sVvn$E#L~eh?_X#ve!m-YQ#IXx;(;9+9)g_Ko%~#`^=X+>&1D-Xn5CrN3ytjVk!i8s -8LtBeOgUWp%T#VkV34GVi9uh$*-U5j5e+Dcf!==q*^G5c#irpj<4>LQFq!T9+-(SPy_tPjkaq|92lBD -1z<c2eM-s=~%i*LYhd~e<yPR#7>hHeQ<SbsMF-30V_4WZ|~H-H@<#<<Ekl?{D!?}wbwmVeoM_kxyWa+ -Hk>{nyO^x6aXa`b6C4NEHRn_n|EO+Xl`evc2>gy`^oyb_aXzaIrVNVC;V+f58wmeZ1~QFz@>3C4hLNA -rl6-ZKDSLKK$r+YekLY$P78Kmn8V84;M4q!=KNwAA(D=z*?u*xi$tTT{gti4->oulo*cTzDDkHsqrF* -Ws0-d258<$xVB|dpSW4{n1k#9EW~MSU=a>K%1n0Pon0(@8=|~2vpJXP5Rwu5>D!Q09Ekiz^cSso@-I+ -J0|XQR000O88%p+8nG}$9g$MuuogDxG9{>OVaA|NaUukZ1WpZv|Y%gPPZEaz0WOFZLVPj}zE^v9x8Eb -FjHuAfF1);?vQfn*Q;(!B;^B#)a-d%x38f<d+B^M~NMB8d*QAbkox<USXXNIIiJ)C6Q0<D2q7CG-1XP -9DN3#pk<v%>t+{IfpDw4QCG*fUY<I+cnuyZhg?Y`8Le`dAm$*6n;(9p~(0q4dmAs*5^Kib``?rDfdcq -EzvwD7iW+&G#%-ta~#Q`xseS#OqY?Boq66TIG(@g?T-NqI9Yo1xPtp4&}qAPd|K`v+Ms{Tzt5`p2Fmx -GhXXLRBFKHgOozf*;P@~uPI!kS}C?$&mLQ@Kf(%^vsp<`w(8cxB&pIpPm*Xhn`LFH6uU^X9k)C~`;3+ -|2A?1Z==pu6YMyC^wt($)%TbUs#SS~pOO_#pct)Vt&DvT`EzQb;<%L|b>zz0-z2gQN*MOps$JhcD)ka -t-{3-V-8il26(dZ7(L6_j~C3&5Ei8?7JHmpvwpFljt6wv12xoV6n`CdHmCHq8ACMx)oY!C1botZEjBG -!%Ec6e!7vH~JVji3qq{{C-us?kyJ@9$x!Vr#%*+fu9<|6EJ16zT_@)0Qo&5x177AH}u;!4k>;-+;xE2 -VOmZKW}8iX}eK~w`x6wpSQIXTQu-s1<g8GLNl`4R?s_kyI2_8uWok@cySI6P_VtbyBnYyE3y`MuuZn= -tCI5#OY=MtCfq~C%T2@<@7X1|VA<m1a-8i6PQ@KU*g_ChCulJ5t*05nt^)G^U=Q+AuL9ILnZyMF)20L -vQhl(Q?L?7rwF=!X3#@5^s1Ld0WxWcnd5I~5VF3|bLl7IDEZvK0yJSR#g_dVTfne!%<f2*MEL0L@TvY -I_tzD9>6ipqzoA)gjbw-y>MaG^pYx<=vr{G<=RVI&am6mtp4k$03H+GQ8C6@|f?6L0v2(VyjctUweDE -1Rr>>DG%s2juK>HrY^;sD7<77|lz0BT~-0h_mHz$q3TG`$$$4(zG3bFpES(9TkEtJbnd(^S@&V`UBlD -2BGIx!Okwk90OoMG?tVQDv_96$;W*rR$RCaS-(gORgJPnRBBP>J9q`hb-F{P^(OY59LKiQVhZK_T3$= -LGg3$dq(=+4%zFHL*)ed4JQ`9RT0yI)m&l-$AiQm6v&47M^QkW!4bss(D981x$zohE!&mT#Ww>Tg+?n -p@^)!mb2vG7T=Kco8B@;CSU54_mV}nazAYTctwFg9t>;Z{+<vpX>tr@(b$cXZC&8bwERU@QuhH7Bx=x -`@-d=9KB8{OPx|^t~5GDlFmn1Eq!}9x$Ft`x{&-f#PH+x=b6?j$1>WAqYj#4C=lA1vOXtAqipX{`*6K -eb*w4h}mp<-C6a&OOR6-7PdwyzkWQVXQIs0qFbB9AjsHkK$wmfFZR_?=rjY=rkpf}#E;1Pq2p!jnK1K -V!4db-%GWlajU@Bam=H=o2Enmg1xyo|&M1vz<)89=V|)&Up?_ohVjb<Kus>Y)b_$;-8_x+Pd27m@nDm -gqlxZMhtc96T+2gBA3m64b3<-ssFyYxiTgL+<s_IqkaVG%JRt8O;Kv=0AG<w>wW<#tH#K)FDX(^5Cb| -kSzr=sDm|t#bXmVT+5j4Rdcs?)iM8?JH1N)9@IFT9yJXdW9fMC=e>J%}M(){a<(HZl7?CQYmFG@d7*J -(Vhuz|dx^8pPtLDRY>^IeOte*%NvG?qo-&)uw&j&k_cpZe>0b}t~uu!-=y6&8KrqEl=$d|<(iQbICRz -TW}41LZ-+Ez<=Bm@%@<LDWIhiG<aaEPtXMwE@uY}x5|{39Px=Sq-M-3>)aa49D9-&DpEeXZZ_C>VRt# -J8P$K-hMi$4+iS1asrCVnW5JHr>-8c<Au@Y)_s~xMGf`X+$euObuopZUUJ9O@Vx3;Ug8t$WyUrnF~7# -R2su|`M>HEAnf$IX3I2+rv2z#{X2N__j1S3Osy?{y~5*h?oU;2+_3dBsjHGhaI#v8ha%^6%|jK#C-{m -w)6NiGLn;yoiEIZGP_kEBtX-EVwOMNKzye=vHy5s`(Dj9X!+xkBi#Hqy&}nJKB5fI7{S})cYfI&}c;H -o!fC2xyr^ZA}{Y+JR!@kRNn%o>07&tYxYg^YG_7H|P0On^Duns?Xd<xE7GcmT|i$(5`$_j{w14h2@UQ -Q3FQcVSu>Q5)CjOF#f<yt5n2IgupXKz(7XJeFJF8z~?Zn7m`8Waq6a}an5<=uGv;e(i+a!=gbbU}X$L -3-!u@bU<(nl;@sLn$Qj;kg{Lb%zF(pwam1X!vZ0p*+c)__cM|yE{WXAowK%pOw@<uuufU-4QfX=1@#q -I8NBd=0#_q34w{iixRgJrgtxM1F33`<~Act>do<z#Fh|qAAj}Xiv8u=zs_0VMbjJle#{H(QP&O4FN;U -W3%n$M3Kx&qV&qTJ-xrVdQSWFsT^I0Om#IcpPw`<_cJw^TP+1Bjh^-1<5><<|tamB&+FU|edmsb3iz8 -nG2x0EgsZgO3PW~K=Qv<W0RGEMyjD<-whbom;bSHJJcX%g7H-P*BC#5WFq(^AYH~7zn`%c08cvA9zVW -kDJQtkgw#JAdleZT3I%>zFJ(o~|U14#=ICAC7aZ~=lMc%wkBLiOx#4k}au_~F@QZm+G3G5ELv_a8WE_ -G1Iv=G15RU!m>qd&IOokcb4>NaMU%==im==Yp&1OgkOMD)hKnb(p|&tkVOD)BjXD*`3G>BQwa^Bh<-k -*;!wChJeB>%2FI44AxNPDhNm9g=gBd7j3{VsUE21`T5~+h)op7LT=A<{%~INTH)8?9YCJ9$lY|}etpf -tfJ6_lBnOKC1J`Y$46tVQ$5nT_sI*D%jWoXiP)h>@6aWAK2ml*O_Evr7<K9gI008y|0018V003}la4% -nJZggdGZeeUMV{dJ3VQyq|FJowBV{0yOd9_tdYvV8wz57=Tfr1TQv*$wh5_&7Ukg~mmAQWZnXd_EnNp -8u%-;uu}Z_{=UT@i>qGjBfL8zr)}#syHOX{2tl+L;!N4VF8PAP46YR~`Dn7tWUACeMTPAsZZ4+KNdX& -}ptJp=7n^9+@z0%k^ObtcTaPAU^QWc>*2KPmue~=EtUl$Dix<{o~^`q_OCDkVgAT98sJmWS#+?-oz{y -C*C0Q7|OxykOxfdET*Qc)Pz!a7{Xq-(@bH*#hE>$^RWt}37EGiWG%^5X2rFxx*(OWTIt2q&x?~((R9I -f#9E{r9o$XaR}F@T-j*|_d5eq{S(XXKy@z!iVk9pgzl+<x!_{i_gih9Hm|KT&Di25gj6fP#;%BcA4ro -yyPz#B^B4pO5=sX2eC(!`?xv|bPu%%6i1MlX@1J>X=oqJSu38VXV+>jEuYv?U*#nuP6E8xpF>MGohSp -iZRATAjV&ZySjQ~3`i$%{GBKj@Mti7r4ABo-}+6<sSSLR{y&*ITkg&+ytfpniX$2)#%&-jwn(Wjte3l -sZYYO`*GLj9K7ffmx+<l75L@7V8;Fwkv<-?KkDd1AQF+?xe%`T*AvyiX%u5+JwsjRjcx9hO~w25#vbL -otL?`Uw5xVKA<@f>{F>8rs<!i?juKkmHagNk9?M(MICw-_FaIp>4xjthy5o7sPLQ8ypuEK<~`YDJ#8x -xx9JUwdZyQXNua~fIX(Q;&kj@`mthNzSKkfnojIXS>GY&(r)hzUYXzo1kv~vN0|XQR000O88%p+8q@a -j{<pcl#k`Dj?Bme*aaA|NaUukZ1WpZv|Y%gPPZEaz0WOFZLZ*6dFWprt8ZZ2?nrB~Z-<2Dd|_g4%Qqf -51xcHOtS@B)eJ00Gj(u$=}A$50iEcG&1vl5#Gt|Gh&>vaa6Ux_XgB&YYPu!{LxDh$AjRyonA=KP7#YF -WikgYaRs<#WHreppeb};ra;`>70CvS-8n(u9=XXbRuT4?XXZ%9=g80@|peU3hJz)AaFx3R~V(g$5e!L -Wg<|?qas(C-Hk@$*{n?^k<1r%z{DyS-caepJlb?R7w5CFGrIkKay_13-QK_u48!Q0DFoPwC+hoqK<8q -gN*0BHmbu)C6=$*BAC;o$x`OExz|L$my_(EtXkga?d<^9MWDK-9$Q}proC1fKhnd~(@Tne!I~`B1zYG -a<iT-u&Z>PV_hDLX{D}EP0F86x_9v&*%wMUDOl>D$;e1Ah}ay4<z@8-98?8d`Bbo=o0=Z_xUehd@e2N -Mea_xr<V#*cy(fk)SF;!ChD>)c_d@{?*|h<fSAdn06LN(EuSny73nK3Tum%d?6x*Yg@ddWpCvFgnL#Q -;rECqr2&Jd^5NDrg=oZH5{pt{<0dC8l^RBa9StfO2@!))NCFVszOvTE+~f1e=Si1l2ww=LKR^XO1KS` -G|{AuQ{c)c1r|z|g#s)FmQ@3nCUgtSrq!?Gn5~u@p@M!@PI9$%h}dTm5kVWKTh}jJ!>AVMs@%#6PgmF -41%tFi&@{kWwJ)zYdZApGb1frm4TQ|8kk&-S<uXgq;NfBJK8{~wHx&45f~EE_D~u%kS>e>KTVC??!d* -QlF)pxLsZVL>2GqKeG&p7#T7cRr@35}Q%A~8Z*@Ld{3VDw!w&8)Ex$vXaGj3iBPB-**IT*}Tesbjxi+ -_GyelQnSe`(J-3ubDYB-Q+@7#2{r77_PMJ`p2L1{h8D+Wt7)4ocNqfP6(XtKE`4?XPKH({O`nuxhLBp -xsi*4MFllwtmbUwjna5LA1@%R`vh;M796l6m2+L(I}-}J=7OeCE>f*Vp}rK;L^oi>=7kEb-Gt<?W$a* -`-nf;nrdjZpo3mI#j-o*`My-7`%b5`LIt4?2w9`ZjtV4un}b~Z9I%jM${{~n$Os-OB!YUdj*8);=h(V -uD|NOBBTgMo|4tabw=~@1+Mn};rt_-dU|VtU2!wiq2<oq~`ai=>6w<-LcQtIU0xc)(LV;As8kVKc0=? -SkV{OFMxf&WmD&KHx7P2Ox$A(4=8XlBzBHh}mGb%_!V;taSTk5{*Xr-f6!!rLnxAzum@2660f}PCl{r -?ivox9F#eJZmSw3DgTuukAs>V$QM@u>`tVxG*i718We>FPTQxA7E1xy<-F8y+Pw`P8dM#4M_tC!wzD9 -%MB>$nG~iaQO!R)SYI5XO*R{d%SBDWslp)1kW&1fPA72$D_3#-Z0!%Aa%ZU($E6}H=E|w!G5N1qSR`% -Xubuh){J>G;HPw4$0z+_Xa+Am)FUalxh$V+GJU&{)k1?x9?}aB+Q@H!wnsf0%IdmNPm9}l*&-DyJ&cf -Pql0+JB&v@N^ZOVvtDUs^7ptI>+Kny8NnISKuU^VxSTS3}=2Rv;Jlq@eVbvvT<lhiLdX#hfg)>Q;q>b -@(dOID!mneZC5fWn6qjvj;(8%300P|tke?=@LmBf9Oam~kn0Z>Z=1QY-O00;mZO7>P_Pr^AC3jhFDCI -A2@0001RX>c!JX>N37a&BR4FJo_QZDDR?b1!3WZf0p`b#h^JX>V>WaCyBNU2ogE_1(XMQ&B_$WVPL+a -eaX<O}k)O6C};ugBJ+0McZ0sQ6r@!Mv(u$a}G&Klw_yrMHis8C7$muo<lm@l|oi57n@C1Y$ln06v}>6 -^|F*=#g&?@rPwi1R%Id;XJ-A6B(J$ytM(<(uqz*neaJ2{RfX)btTIs~`9#B&SsBGyQE>_HqE((n%S7> -bC3d@{NG<-UemsPts-&tFAf;Scl(XyW%j=Nc+@7AE-Q0{~iejB@YMG!w7R{e9_&e<`h4ktlS&`~*8(z -f@ZoJNNuJqz}0E4f=7(@QJ;-q~e<W*LlNh#zQbX{e+ii|TX0#N5g6~o)ZD7#FpEIi5zKHG%sL1q<?MO -~G3HJKn;F4^2VI|9H9dgsS+k?eRJ2b0NUl_yHM)-bN{&1WzpwLQ<H&wnOGvf)5=mE;T^xXHy5zB=}bC -Iov^FO8ekOuw139Aacfk;1AiXUVF{?zxN2d?A^RF@QkRGgb0cw$6AO7&1J~fXo^EPe3j{p=1S!M{r<$ -jRYo`u`gVs++!>=&|a*vq~a-i$f_+f@<xK(Xz&!`-EhmQ3o$1$2Cgm$@)kc{%OmB>debq?P$Na=CXx! -k*I5AsYX}#K2)oHJuGx3KS4?e1ou_QcSt=mKIb<}+Vlxo`X;B!)g^qF(6y+exgMUj293Ppd-R-etz2@ -LM2;8LDH!88u;5z=8?8@8_@*seXGH6E=E)j<L<FuAJ+g4SnX7An^tVqbsJC8k(%+?6nz$gykF~nN~rz -FoUYZbC(T@Bc!;-Sbzl15dw<B%Kd!+RaaJq9d+6~KTODYLMm$oIsDs9I89!_tKL`I;4?;7qL9bXqGeL --;glfySLq6=Wt$fJ+Inz|#=8-Dk3@p-3VDUci$mc98g^k*pX{g;Kd@$Oaxw)*x}4BAU=6gpZ2YCA^gn -nc^XtXeUxgo>ihN(>5tfUa(3KF3PLfEcZkMA}gu$Dr&NxzGRz1NFGc6-#UZOdk`6F%QtCazgAcj=1rB -rzqeSH*y1-NKGgyC`yJ)~3m}W>RHrTbO@B_yq}sv)K22Ugh8!PDu)_#yfWX?EK8!}W{yI*S;;vc2*ep -rYSi>k^@q8Vy>F?|-czV{*!`IPjM{p`?5&Q;%s9L*uq4OU0%xdn9E@2=+5%Ux*@c|kI!W>0$SGGJa=P -qyJf2O?#kp)qOAKcbwG(^O16;!T2&Tno%UNC?=`*i;8@|t-=LfwS8Ph^%XvHWG2XBAW;ai66;ja<Z_l -`)vS-g2g{jag1FQ4es;d~pTYaKMJ2lU$7%(Yr-MVVT{litnZmpx9Umz)Ix(IR!D%N7ciHU#lF|m|vq6 -R@PCiaN*Z#wW_7W0DYl)zn~=b*An(a_`fn*#v3W>(tjVib_m*<A?t!_MQC<zH8Z_A6nwc+x{p|>O5Ra -5f&Q^ACR-?2IhP8`^^<E(tj*p`GsW+*ZZ=#aP$98U0(KJUPGenMdVo-hEgW{KZFA8;s1`yQ2+gwxN5$ -4c(!&@vs;`dx+8qNmo?9QhVV^kk);nmXOlUMqrre-Cv0CBh;{6@HgWl3wapuUNyY7f%%Rf>ezjBWKmf -^(ww<^FgS#k+o#xCkbBB6xLi~b`ra5r@OJoPQ#AaH>L=SlLamW3XXT4fE}xz%Od3=i9EwH@z2B~|q$w -*LuK;0`+cec})dDcGt25*#~_ZoiCe3-uv;97Y<<O78m>Od#5^@tSK##;KKz(s^iAlK~+sz`EMkbKj^6 -j#^M0hC0|n8%v>y<GbL174<0B%x}=dGk(O^JTf-@5kI_P7oa6HfdzkX4c#k%jt}N;bMG1=QzFN%er~K -0*%vVw9ooRgtn=nurz9Qb8X>qJbY<7}pg6?#U$>LcR&oh^Om^7OP83rcut$7uK^7Y2&Tm{wM*T3m`~U -dGytO9^O||WZ;DO59#@~!Bg~+M&+S8B)9xvRrk|H77_JL~`j(9M)InOwQz`M{4lwjat8u)ZD5#8RLT{ -p5t&E6giON&AHa&h^$j~6XUr`tJ<baVdgtVL<|+M_iI>Z#jUcj}L+wOymk`p5{-G4Vh&<2`Iwoi(g&w -56NI6vnf<fO4iVN+mymy2fZgqbAis<vH+$`F5n}s0fFWNKafoS-|WzWQYL*y08z0jy!PI<Ohq^(s!;^ -531f`^t4ci&DBOtn_{SS&I`Zmj)2YQ?89s<i@IRWt|Ai{L7P<V^=`Bm!qC5}pw{DDOBMkaK~I4P6s#_ -x=(#<<=eGkk8nYd=-F>v*ZDA638k*O%P9uX@Ox;Y3&_4bbn$8I-!2EruR1UM&?BOG27L?h6(|f+{9_j -hsTQz?REqsS&M?KqN{k(2Kw%K!s8sc2NKn8cD=Z7}JwRZEd%>&8MvJb>Nmg(!|4fS#R!9S%{=!!U^oN -AO~3xd^3{`Kh2sJhCz3bdi3l6&svx8G5+ZDoIz+w?KTxZ_52(gKaS>_^lY_S`?OmgjkN7HZD&K$xlaV -wq$TPr#&r3J(3`n#*?b(v52O6zY&+^svxRSv`_Tn3rN0>p%%<6=}`(hMiZsLW%okuI-%A5;|^Ju)XZ{ -kz8nx>N-UF8kLeOR77`AyM{n2oPt8fAq7y>3|}fLvb*2BTwrFDiNwL(!jSbEqX;<?t>KPBXU6UQg+H= -U5h>g*^u7s!+uKNq$8h%?lQlHQoij#Nkubw9^>H#_*AC3Mh`mtgn9znpW27ed4}$6xFbFfcW*U!oyqV -}ng?kMm)_8KPDRqM!y`$A{x0)l>SmDU7*BV9a4%CZ}mt8stAx8DQBhJ7`z0^8z=-Ic3>Lm(x{$uBaUB -isUw`bUUZG60-=4&=`G_ny3nG917|BM6>{%h~*{3?C|>QN1Il=Oq=;d$tI8(@eGjqD!E{Co*Ehw#HW+ -z_^%VW;Dv3URO%psc6_;dcruW~44HswV;d^_ocUlrC;?7)aZbo3fMwVk@y-e8;!c&7OECRJf3hOa2Y} -w$1D%S#eUCdA6Am9yn-&*F)HMl9YM&9S;DLD(VqBU(;(l5r=?#l9FtkuK$2YS?4*!OBAkf+IhqQx&r> -uF_nk2#K~z=kO|P$?KP*q6Vs)FL<JXANmd{i@887}ssDV^o6!!><?YV_qScnKzQ?O1&;9kulV<nKJVV -ku3BiIq&*yj}G#J)DgFs(J^;y(KdT44l10Ii1`k|YMTC)Zr*16bq%+}}K(cu)N=joMxIwZ$SwzroYHw -|6fhMK!w{Lb)a3he3Gi*OoADxXJsQo{HB^QQKYq0^)2l<j3`XfIZ03?8Av&hT89^7dn~ck1Tfd0uk5h -}k6&tO_qUyJvA5p|53Rw%Ni^UGJ6vjhl<y)L2ZN8fu0?lqO(*nFC)(g`L`fJ4Ouk1(?(Ye=PY5%`?IU -H8QJD&(X+5(23uu>^(i(Rtqc}^n%!08uHfuAi@tCg9XPt4Dtu=LB!!n*Pfd;F*ca2JAfV6j<n4OHoZ6 -OU+AwD2G$yi#U8{3a_!M+d(}<@G`JXv_j=3Tk1_1RFu_Nr8ldJ6GWg8?ux0$H&906_!EJ$?awDh9j9u -kC0cS`~zh%Knh$)#c=*|1rdq+2gbMpfkeK?8bf9&w?*oH{HfV`S@L%|+!neqzKVT~HuqqNsuaCZmt^u -4Et+Yt1;rbQSh(=0D6)?JU7zB+v^F@tq9et%%M<=tyuwDtc0P)h>@6aWAK2ml*O_Ev&T4d9yy006%k0 -018V003}la4%nJZggdGZeeUMV{dJ3VQyq|FJxt6b!RScd7W8XZ``^Oe&1igstAq*Y=q=>aW+6|J7@tn -=VH4ru0hZewaZ2lRg$u^F#O*;!;3^}cN3$2uqATl<IHfbvgih>3=#HED;`V5wH#H&^~$Z0R#vR#^V@D -G`dxUH6PZ5fRik7_<X{G-H20X~U#uOu-!q4S>#*@pS&uEhg{5f|ki+ih{;(#OqB3i8Ej0Z8Z7@RitX+ -i@2QifNiTAZs4j@`6E3S-aL_mAqbH$IT23CDzs89LCl?M1g?=)cAJy5^9iV#F^xB_v?s+~@$x>{N(^% -=tQkpWsIyN>mB;JR?H=U8UYz|gU8oEoNf+|c1*_8{09UTv5eH5^#aX1}?+xVXBxImsgXM(jq#Ok|3Sc -<~fh#|^8QVSxd~;{B6QvhR3rPO*$ew7T@Z6!=761387&^DLdvReTQ6%$I|BT#;>X(h?}H?OIN0&pJ+N -v0ANa-VnW)&-4jBGsle$(MGL_UD%-O73BRV@>TYHvm)^0kW0}wGSA-W4SA=tH9=0#l;A=rP>`|ZsJ=B -@{v$jfFH`bOR#>uh)v5s69n+V%V>zCM*++)V3wIv=L@H-U4+@;X4~kTZGsAtHQ1ji;jtx!?49a_JFZl -JaiOxMvBBdO7PYwTW@+=BGI6Lzp2+&!9k=D$j{+0Ybf_IZ1yf6f&9(X011NuuVdO(h-Ket-0iQ=7nf} -rgWK+Gym2E`lkok&IW*uWFSKrZ^K9cx6vC<N7YF(X-Eu<-q~5>_FSlmPupJ+uOJA)vv>;{L+}X#gH6! -0My{#aV4pz*M3k*>;=Z1};sQ537|E`&O}D1Ahl3Mv|<v2{A((2d!(cwUbYAGb*=`JBgemZ~}^w$YCW2 -H;G~5kST^$c*e`lqh}ie_I~HQyzzp%73=S$Vm*1}WE=*rDyHpu^Ho|gv;;b^ga*$no%GQ`VBhEslE5> ->X91QQTDY`4dymdReFT6fe7?Q-I|v8r4@Sxs@|Y&9G9zo-1Cc%a8our5>~St~n)Jvm$!3IX_Ow*4EJ4 -cLJyGiXn$o<9eYkvym|sEYT`M113pc-ZHPb!uC*E#96!9IxjWA<W9)Yc6N#dLH0qFf9zQNO%7pmm_9G -i{~)O({RI9Y=SZYOaa30}@54h6L_s}-wY^<J958prdkIuLO222#_6431Ot$FZ+lUI!sDBhK;2wB}gv> -|RM}BS1uo4uHqt!4oMI9Is(idh&azp~jniSql}ZIYAW<#e`5pmjMvKj&+0Ls}hf+P2We>@!BHMCP@~v -*?>LA{m@!?8+jj?iq>2<oKr7uT<1{=4r`l54qjB3EX$zm5wqt$P$sFc>lhSd8v+?wF>7wr!(e*^cD3w -`U?0%J379(F?h>eyV_Vx>cnpmmugh?{{fn6(vfCPtgcJ^BG;)9w%9X<KPREtY%1S$~HQU)R&1Me?HjA -9~jWLs4Bx;gkrPsO?Ay0O#+9bd0*(3Nc_&LVEnT+Or+XJu3sG<I3ClI1M>dKwqQ@9i<Ly^24nPF+`*_ -JJ6n>4j~%3P4YY!?Jeu;Tx)&BbqDzg++0;&ziLIYJwxjh>7A9{uW+X~4~1UW=^6a>>lGNN0?*Xxz5jc -iOgYiDRY)Sf>i59pfT4f7I4FTDU-Hh!lhTH$`veQ^5)62lJijyx!E_y*-5_Y8kfExgRn%eqdXu1|+l< -oxl|N@x#imMI#87^`p5YfEED*6-+2>uC?bEp)I-;(AuzrO*@X3gaOFx8O(B+tH1#uLkWZBU&$v?hxFq -d1YN`PE)R4BbSJ<n-mI=YoHGlA$Py+pbRcfPt^Fo>S<-{AI(<65Ltq&4pb!b0A3$5+czt=D+_?o&a2X -l~2VWfd6X48M*4qP1%cF!I>{s&9=JpAPe41};79F?T8o1>ait@;lJ!`9-zTZr|4=a~6G(U^-1v(wR`k -8xTH2_A;`Bwk5!;bXCvI!K0SJo>WpPBMH`<}=-(0cy6zyBf>l=YWMp;xCUx_w`g-=V`G@81VALgvN|0 -<C5Fu*kRJswSlE^i-Tx#$B2ls2Fv<4z)XO)ZV1iwT(G2fX^n_I^vx`=jt65t@w=})`X%V9ma9Jbc`jd ->l}!~pipKwucV!tqntT?bCP|PQ3djj>}V;5AcZ+gDTq1hdR`ovGSO=ThQsdtdC$3hsKLsuWOe5J$WaG -wD1y|2CKH!ivD1uw!g0nK0%Tq+ofO6*J;Yj`Irdm>N0?0}3JddzM@Du-XC5e%J|8Vm{zr;Fcf{xlRf{ -fn34QO*fA`7#-(qUs?B9?Du|?k5Mh)E$hy97nK8#aS6dd*)B*Y#0)#r#$VMFYCC`T~f{C5<})|aP{1M -EIJDYy*ve7WXrvnT@iGk=ak2TRj^!iyiSa6!-EVV7-hf$@R8z2~4iCC4HEuqJQd^lp!S6^aJRuEyS;y -C#cD1_fSW#>LNw_fxwJO>lIXE@q#Z>cKtIWRl(PVc?j)*=aX(cAWKY+O-#CKR1yyWn`Dqy5ESI1u<-T -WTTPpA}u%SgkK{N8w_di844e;EWm1*!bA(o0C~l2ag?JOMq^n+fs~CqDu~;G2Q7fAJ?p_^P#6F}2}Q- -rnJ6-P^u-8f)zHA;sGELz%Zt-Y_@!!Qir&tX^Y6SG4ffHVV_rDV1mb`Pu(36~uOvpeXFlHek*Gk8V<9 -{m{3^CYI^H`2mfG8WKSu!k9tA0g*E9B_a-5~ii}g<~2!(`%VK7g4nZxUX;ne5J)k(}>@GJT+zRtK0od -CV4WXGX-#>9VK{c(47b9+NCKGVP5eZ9QC0x%fR{lJcTpCmd1cX9XU^$(#I1ZQAQ{L`Sc|1HQ1!1PZ)X -T7{~$6Nx_$@L=>FGq>Re%zBsd%m=UkNE!sP)h>@6aWAK2ml*O_EzczR>S%Q007q%001HY003}la4%nJ -ZggdGZeeUMV{dJ3VQyq|FJy0bZftL1WG--drC3{U+cp$__pcy46q5m4+a87iK@|*0H()?96ie5aAYf_ -f*k(hMDoHt2fBg<AQW9-Btvv&YEuIT`zH_DczE;{2p|)Etw=>>7Dl^+?wI`~!HPZ%2SpUF81A%7S8YL -p-EjM=75o%uNluHX*GLe^pN1k$Dp+c^tIm4I_98qS^o`71Ww_s`A+MSZ;WHo%IrP}YAtfKHg@VVg{_8 -{$DM_H0*Zg;d4z+_XOQ)Mi(jX`Y{^ar{B_wMeG`}-*oRfA^!)cLyMqU!!rt6BL3Ix27$B!nqdXoNR}O -FV-RJ#srJpQwN>D_d&7HZ_7lUjVbQT$p^%O&L{yG>ryYalIr`={*ztE6|$R9b%%n1*#fbH}<?X3;Wv1 -M~(0C`3=HbTBY0B%!LqITf|t((crg!Eu&PjJy5!s&1R)w#*jDaSqjCf;Fj#vQ;VA!!Owg?_uo-~)QBD -1qF>xOZ)TpjBJbLFf04|&UfG?)TvqS}%z`w=1*sm?6H`OUHypIdgYbvDds1ul2`wRw7XA8LRWi|2s$e -RIBL<~W|6W-jMm4$w!gRUg2gm055KF>@QN%R01I~~t7~_uS;hv8Uh?a2yW{z&z@p9+(Kky2?Dkcdq(~ -@V_603qKEnfY)(Tr26#MDiN?ouJBlIQ@^tAc*L!h%X_paHB1G2toBoUQdE{OCEv;RvzP3&!6Y{8 -BHslDC-QoM$zj-X~v$qeTi2j-gANeB71O}Q~OiT+{0DDhOnxNDVG@#n*~|jlE0ONo1l{rx9p0T<1_gn -kPU?`FYzB%08B2EEfyDvjzPRsRw`OSeX-b9s5KM4-Is5==9205Qb8p}d!=ZtVFUU~VWZ0{_Pf%LbjQp -NE(X;_t_EZ1n(1pC;(HJ`O8B02sfNa2*MR!hUw*q{@9TxT4%nUjnmFcLY<fTg@+Qm@PRqB|^c?OpUsd -zv(aH+v1UtQoQRsB6uzP%yq3fhaY>uax$2v|=_3Xj21JlTJLc*%W8et2C_%+(K{)D^(Q5W;m&Wfc;k= -Mw6n~xNZkQ(9YU`ocbq(t^`j)Z-+_lwwmMw<Mj*FDg!R!yDaKK7;8;CWJm{FZ)T)syEQ(NPKhx9NsIF -Gr_aTp~7Q?C;5_8T>(XBRw=r63n>?Q}q((hAlq1N%{dh#G~&o=!>Df90hY25}`sM-|Gf?z8?rw+_JTB -0{|HLqs0jYIa@zY<6+SVvcb9Kqnk})Y<*mkb%TS$4#-+PgD@j~YU9^OW7<97Sc(I3oUM?~tZTP84BIw -8IdeRb^ZLW%WGr<#UZMS%r-%SAefkCR$d6HAoE4}x9c!~GuED9pJbZ?6<bGq2jvII{yHF2_MFVN#h)G -VM=;=LX5Q;Jz7koPI6N+8PO4<?AoCq3<@O_*N{%l3~PKn7$isUI}oUWV2%Vl*k`O-^KFcRDq120<m^~ -Gi<SEQsq_Z8BG`}ppW9ThzR77D3sA1By(d>W>vJt3k)Wj!jL-Q0si2;M~y{;F^ZHfa~yZpN{Z3~4T<` -%GU34=<x{2G_rM!OMDix7TQE96his4QTox8|_acLyC~U$c0wQb<yLx{Qlrdyi_Dl7erwPM-fm-y*SFn -Vk$vXb~jkypQZ+Hvc;cx-GY?i0D7&E*cKkC{_%`UaXLDj;My&wSVn}4_~W}Rd=cOOnRXG9Zr19>hNYA -hLk$gc{=uHIQ9Xa?=z(^=r8>_8j-!T`UP0E`n<hyglo;L!Y=kopKQb5F%a91+rVJH*-T`(ZpMB#}&|h -mu{jzH;J@Woq{uvwS@#e`jDnIz<n=Niq{5MW2H#nOay!KXf-4bq&ZhP^=jGGC(fP2s37+v*o%qP4tOi -=X!sNnJmm5&bOU|5_;jjr*mu0d8=+-#y6<l)DJc0>0VH`#XqvN-3w{F!MPYgLF1Lz%4T@M<L+4}6=kz -Y^QVFP^gbeN&cLCN_<mR0a|9%DoJklX?D0ahVN-MG|1P(XxL__a9J80|XQR000O88%p+8pAhN|5(EGM -WDEcRAOHXWaA|NaUukZ1WpZv|Y%gPPZEaz0WOFZOa%E+DWiD`etybNS<1`R|?_Xg>LP|xO<KwL&NNBl -}kP!E<952f%a*}Cl*0GJp>D_YN|IXNs(<JSRJ(fPSwdeac<Czhi(bh41#MR#Fj%nizw+Ku`!f#ymFwo -qi5$cdAKh)?fZ`>`o4f|Q3TSYD-Oi>Btz$z|_Mv5fRbS-HYTHzCnMa>baMt2=oZIZf)$EQTlan~aWwS -Y<F_TA0R>)YFFBHDoE!G~gR0sb1}jHhcNy%Q1(^2%_RxY4yz)RlQS;A*vMVb3Z&>Rz@L_QqI1tm<CSv -F6PKs21}z+kVe#t>tdT=wre4R(aTq6IdjN$lzYH?^yorhJF3bI;m~p6wE{g6U^`E-+ff(>8xZQGjcrp -v<i3P87@WXQN!O}1(IXNk)N1tSk_Wnt*Cnk{`CF`Ad`V1f&qd?azyqffH-6<AAScjS(b(0x4knx0jVf -+QbNlN`NI!Bdy16)*$WFDD2HsXZO2^^&5c~#0+ZwxNs<6(4b{w+w1Gn5#0eNuf{3VX3$_?dhd(`%3PL -LR!q^wa>I1tQ>heAjq&`#>Iq=Q{n`iLB?Owg|*`myYwH}R&yLB|;)5hDj8g%9eavzfSi&k)k++P>;Bs -?D$XMud=2(E9**5YP6L1{sxN8rkAisFKSYKLr;88?P%;6i%Od+Ex%`}utbj-R+Kv%Qe8kU4@h<=p4s< -vVI2?g%jrK2!d1p!_V8Oe$G;?sUj5_4sZO7^(OaJAexBm%5M+byTolj{;eQj%q=%8m_77kxHVY;DjN2 -PIQ39oNaxMYyH_tl9x%6y5Y;~n4W8tloxc`Lgj3~#5v{W4VMVdOTkb3_(D#?x}Hl=CrSeKup>uykh<o -Q%r?{*Hmuc5X*Xbc4Zp}QAGeq9_W#6jOL<xrd<5+Z;l-F`Z<TyZK~LIHijdIrX1CN>pvXQeuJf!be6y --(b{zBde*lC$xr#@eSJfr?Ur~9gTz-r-fDgj>$4c*a+L^;!4oK~;ln49xDJx>X&V6qz{?J0@li@W9Js -|j^B7qN$>|5AED;%#cT2cgPV5**AdLB&K>!^h#EeR7Am!;T)URD}|qrN)k!eI}yg`aKK4bs)Y>fYpEZ -RYwXqsR6tjGWET6md7~a2pz(2RivxEi4aVDAAfTnMpqPC8>7#WWzbfL`y|z6K1+W`5N5Kpz~^q-n87o -tOiz7MM=pJK0d8t$vM$8!Lm6*^H7bCEulS-Co)u~v_L5ERUIRk7uaMxl}Y(@WX;PYH1kSRBN>^))tt+ ->kvWsUne%wBaisgxoGwsHf}<T-(nZzL^1Hc!uk>H@>*bp$7toG`NkK3264xCn{NlZ(wwMPbzhv3(Dm& -N7up6d5{2x$D0|XQR000O88%p+8zsURG;{pHxrv?B39smFUaA|NaUukZ1WpZv|Y%gPPZEaz0WOFZQVR -L9MaCv=IQES^U5PtWs5Qc&cj@WaU3#DZ1ptO*5ed&r&?6a*^mOM#rSH}MPPO=@xX}i4G(%pT&`@Xx2X -gh5jX}E2q*hgYGN?q4N)zi_w+Nd(RCAxDRHx|ffxaYEm(dJ$|44Ev~!n$ZMbfTk7C<jJyNee0Ho?Bpr -Zd<O(Dd2KAeiULIcfG}+66_SR*=}#Q8QFcmyxi<|??v`bNK1WjbJUlM``hieyA8X#*j-`t-S+n8YdCE -FgV73GOb7;e$%>{|Pc|bjMmS))cU_MKd*Z;5d}5H+;I6}6!kFSMFqTG9R7h?uxx&20vXk+dt|NlKIF7 ->;ZxI#<4+0Tg;hWS2m!#vx6R*)?ibgyGje`Fj)(NEGitK^(7E1CWTtil?5H1vk8~D`=11%_LNhKr@r% -9>tz60*~UP3?;3K^GJ_#vP0(p&%0oWy6H(KUI%h7elWNAlT2ofAswkh!RpHo(TOv1d@v7<OlR7=TK^T -FR1*0Eq=zrDSzZZnT1d1po8bv}l8$rE@@X@CfOxc$}TwthlT-YSXkQCTt*=#~)dXMvDS$zG#c33om>I -d2Ah4_y)Y<y>$7q$rdgR$S#jjsX^02B3=iSY)y~=uk@e4F|D*|xmy++%F9She`=wUMV{%xF`d7gE(r} -YY$$3B#*K`!+UUMZK4nYJ(^)Rls~}TGM$y*e{AbvOHJ<#;KUilTgOE5tvyP%7O1r^tk>qhcoxvCuS}e -hpgEL=(G0UP1xZbE?^rM4iCNZCqqldeL7qW?S<Ay<algaTQzr*;MUH?$SAm#XeW>EtVmdzi}2=iv9E9 -R#mIWeE8b2yD9O=~QQJlSuN)&!|Nf(z%sG(Hb&V>^Jksl7^3W4{lZ!$Z+&wS>i>J5XbqvDwEd;da_6G -dTe#pZ+4Kf|ul-nmoB-Cwg{|He@p5rAxLw8tuE1J4k}#fHZOutPT7gvQN_JA5cpJ1QY-O00;mZO7>QX -!<0Pg0RRAO1ONaY0001RX>c!JX>N37a&BR4FJo_QZDDR?b1!IRY;Z1cd3964j+-zLz4H|#swyC5QO{9 -#FVRY^)LYtKq6j%*0JmVfW3yRQ_1`-N%tDm)#aM6N^PA_PB;A5G&IqyyvNf6<{1i=xHYz>ldLva8kZ; -nuXatNjSuT}BQliN&jm*x%Vt&zWD^w8(`|<c5#X8|S%cKHrpd5be_s@sJJqo^F&^W1;z0rRr(iBC}r4 -iP`7i`P~B-5VmBH$Ir@uAjNsJQ}4O)%ND3`9dkXGMkZ=qraaz(+&6g3nXsQvhV8G+|Eor<1(Dpn752c -j|ByDzF6VRAR9yw?1NTdpBjf1wj>`e4a<^=#;|46L6oq=~94uiA`oh^T}N7S3vVZUfgyK5ehfI%^IuF -<yN+`5flpSTSXeppN{(7iunOH>~F|&16S#4P<rSKq=lMw8Z6-4k4<nF(&c$J3>v4Aq-%$5kt@;q<h{c -2)5+_*8be!fMNr6s;pt}jI27<z75F;L!P+IE>qyO0HDj`TyHsh%;ja^1t5p1Gmd)KuD+xM_u>5Lm#f) -RQ>C|tfud_bHe*@!Ryg98n>}t4befy-A31g6Fy4<v)KO^+IgBFEytT?b(?#2TN$^Z58FG*r}fH?c5rA -k;cT@Zr5$D4s!G<Z`wJ||^{ct~^qG|58mCi?$SO9KQH0000802@m7Ryj`P6y5~@0J#zX03QGV0B~t=F -JEbHbY*gGVQepBZ*6U1Ze(*WX>Md?crI{xl~`?S+&B>azQ01}Qn11GwO^NWp``5*C}~LA!m%tyv9-Ip -*pe&BNtclS-qEYAwG*2CkX=bLqnT%3725S&DAe-(p0fRFCwPZ=uX-#bLDU}p!0kY!JyXXX=={kCcFfV -aA_CvEBu8JUR5|+EE6N#ebM&3TkCkQYX<t-#gf(0gJ+5!DzOT3=LIRDK_l4|nef(iJbL4(ZB~S*pf$* -YkspqP@hMPO(6NH5zKdYK|9cGPZI%f^}^{?PVe`XJ!;*|=kK>~Y2q-Xwgb@lZsN7vua&OTjVFLGL;vX -BIe`rsLR0TfjOH~}e0Zd<GshsBOBi6OsgVomcBoVK5Y;37vKL6V?1gC@D)>N6i$lcP)8oAV`!RND>ew -JoU?7Xf+7ZqNMY(|p!*q}u6aV7|1wpUvhHa|htH8VfC7+uIAW3npFr?Mv7tg0Pw_deTWzSnP?a`lC9G -k@L-LUYflnUPjbC7q_5-oCX{qb!~T+m;hF|ucNZ|^!I`)Qt?6cgIcY0)&L5nPoDx*_+s|bs$#e!Rh6w -)tGdNf+JJN3OJ~uStyc&>Ns^fFb0&Mh1nIaCorw{I?=Wq3q9LoQ1sxg35LpC%^Mmdg7o>u~A1Hi7;@y -Fs-^4)7@gOy88Sc}c*S+9-<T6sCf7}J{W5EsCA>1^T%eWMLy35d;_vnH%vJS$=oGdhT<g<vk07|_fvs -GY@_KWehbRso2P&(0Rmc2*{#NkU>7_V+9!{Yc-M$X#fgf;LQ2O36j$b`Pbx5SC5_BvG3z;c4Hm0)P{h -{mX8YPlE>PJy=PAO!xZ_`<jOM7!)IY)h`yp(6%n+@2$+{Mxmb96^Y{O81Zr6t%4hDoDjKrVfxNErch) -^bnbu_@GVJ_F^4tAzdn8v^>=a#p4Kt&E?`A3kI1SL!Cfbus|RxQ9TH#QK~&6%n<q26G1yz;}*H1U!Wv -rKUb*3M|4AwARWIW&EGZHvM11tAg$4EP=nBCEy2)rPnhp11omKB2b624Uy&@i^A-9?pmcSV5rj=e9fN -F#7*_^k1Y-2}=Iz$(fes$ob#%3Zgy>ch17Z}rAYcGMU~fX{YndU%5#XU~R*~d$mK-I;|C~YyKrtmv>h -I06m^h18f&f0uHr>%!cWvoynZjVYpS4O)D+k>71WMWgnoI6&RtFE#8?QzYL@05LvG61t%d$;f_}Z}Dy -jyQaoo&+&T^M1B$TP^2!ddVqR=Zt4d4#;GZU)*mRotJ`C}T&6Pg8F~W_saz(ig|WsD`h@n75g>-Yxh; -H-eFCxlT{mZ#ZvbHk0|$OfjN2ZCGc5U<FPLt<X&+;BCPnUGyOYq;|ATUZ0<f(jZc9t8p$W<B_PS&1I= -WD3q_#eMeb%srx<5cKp6NVs=ZK@-uFwQO3f7>~?6j#ne&Jh*U04M{zdJZ^{?W;jfnIs!UK^x4@Wu*<< -DM_F`LcK^nQx0~qH)gn1b+XRT}sOnI`7iK9?0qt#4dojuR@i$7>s@DSQAOhHg}Tf$OJn4!N)^e!#~0# -k^J=|rC<|M3AaU0ESm^bAOMM<^&zb)esHUDw5a(CsFf;2lrI^C2QSPea6d_MZb0$E8B5TaRt1uDrPD4 -<dAF^ED%~%w=L3aX(d@{O2U4=KaH6Rm#)S^di3p=Pbwh^8@B-pNf_~VAkPHyfIJU&GNf;tIOUTh8lu_ -HjpdfbqxJ<+||9yB3S4zlh@%;rpB4sb6UDlV3PmqnGUbem6=q~q+-m7!c$?%iV1<yKfLtW$mcY1>w?N -jftm@-7NIsFrc%FLHZ}NVCe&u&(kpt|qU3_ZD5vU!9xIv&8`ua;#?pt!q_D5HC1+Su;$$(zFb`D|tMm --4&B{D_8aX#Mg+Uf7t^Q3){jkfnac$M%pg_`Ge4ONyCvBQMJfigBF^et8ov_J+C+7MPo~C08Okf!2zP -T>hMCfz>9XZit^&3!20|XQR000O88%p+8<~jzZP6Pk|bPNChApigXaA|NaUukZ1WpZv|Y%gPPZEaz0W -OFZRZgX&DV{|TXd8Jn0Z`(Eye)nH-P%%sb9ASGk;1yfa0Ue5FK)SsI0l`RTnGHp%B$dJ_`oHf;iIil^ -55@9goA=$Xk00+M+D;n>Qa6oI&E{Zq3%YY1Hx@w*#(%l&(GE6u>IfGtzpK+0?nLFb@IhF&88DsbO7@D -X)~4)u^}>DVvgPIljg77~9(XSuL-i_*RxK)b>1{-Hj1HX<%CXN@t0_&iF>)|gXvNqp2;tEvF3U=ah^* -S0+9RaB0xS)FVU=!MuIlJ?JN&%nVI6n9C8ruwdk_EI-oATySaWI7@tQjxp?`3Tcf_6%&%Li~3k_c5B? -Td*v?bNqaTfzwS4;8Cx|e3PxxuA3G8IX_N9Hu6v(3g!01fP;7D}q(LpaMBQ@lmSip^$INp3B?SGL2-j -l|^RXR+G={bgAeK1UF^BSNLA4CO!{fWzM>chm}IErMseGrI08B!IzCpHT4E!~I7%Xw!06rr_a=Xp}a{ -=(>7ApQM;qD*lt{F_?SH8>E9+48Ttmzk$c``kzuDQX=rWW}_juC=UhP{01Mj!rkZ$;Ezj^kH^_^a>x@ -Rly`F@b;V`2T^#euL-(0=zGg>7o&m<^u>X@wi%ZiHWw&2u37Os>JV6|YMAvia`*%lD!;xEPq<-d-(pG -5g7HSPj(<>*HL3SBwK+DsOP^4ukk?tbATeRg8UQDGGKh8{V(OmRx-9B3}{BOpxdnHexd)M_YwF6U!#G -OxjV}-*q`=P$3AyRrunSV!lapo9Cs3|ES8aH~f#^}Dwf7vc$7n2Z8uYv%#FlN||<97?(H1x~Q*+&`{P -eG#exF?0q%Bqf7y|7eVEPOOimDYr?^h(YqP6U?TxhRPt!xD3>o((IzyyT#LriuA|V#psY@5l4L1o@LC -#=eMdZ_(wmskW-V@rL*CZ7H{LBV;?sem#>;MuU+}_SyD0!=;`H^%$-!H1B6-O<OPbKMFsd0+C))fzYS -3Ff(Q;(8}h^i>1dK_;i1F4~{qXEm*qD7T+eo_w;RAiMd}W`+<sy8iTGkD(#{qvSky4-2Bn*ViyIG`33 -JKxApt}X*UZ`dR!VWuOV(b-#7(M+b`tau49?kj2kW|I0<#o>2SNk#2dmH+BJTal{B~=4zutp((F?|`= -R*izkXFx^P2g1kaIr{!gd<(IfS3Z9M(_)Rw!Caf-cyGIZBzdsfQUd4U|}YIeT5PCgLSDGMyxlILvWlh -UMxR$$rcxVD=P3rk>+vPM41~7I$Z=de`>UB+e6h@k(rXbpot~<IghDVatVkG&9<xpS^p$kl5T+z#<Iw -dp*+C_ODU!?E)2)<juSJ|2O&7oM%rjg`h-1ClqHrNkGN0g!2D-tjGF(c|4bHl#rP;5l<quE0DvPWkoK -@7O1+6;T8Ucc8kOMYTTNA6~tng7@m%mG%3g^O7gypJI*3<*!%}jO9KQH0000802@m7R?9v%@LL=J00w -aY03iSX0B~t=FJEbHbY*gGVQepBZ*6U1Ze(*WX>N0LVQg$JaCyx={cqdImB0J1m@)`Vp%T5j!1W5FTw -I#C-SpDLh?DLWUV}?fBbghDR5+v^A;|sh_daIG8FDCpBxp}qY$S3%-n@C=@69;h?y9;GvaZYODCZx)s -j4*JtDUUVrmDN&%6wDTZIc(>ue^~*>$=)Pk7k$FN(%kv;{Eyg+p~*{<fpS&=X3Fov}mQ`rp<nrmmAaY -Rj!)3c(ZHrs!WR`ZnDdFQF0^8RaHlIo?V;9yE-qMgdnvV!ZTSz=O|0F>kfjSuca)W;}dVwA~y}Q?W&^ -b)kMRnZ(;gu(+@If(t0DCWVdgw0icP#wfvZ5)pnbfE7LhV67YE|Kel--x3X-W^ZPkHzfJ2h$=6BUmPx -9Tx~dxeB5$sftdMEh?&e3csR>n+Hm!m=SF!{5?Csk(Z|ATn&!5Ad_<G7unRJ(^fjX<}s-BCNC5&4XDK -?=;zCnsAOPw(gJqmVU>)nH`Y|>TQq;_jr-sE*vB38UzU{!^RatoTImegAhVgve?-uT900!L7zWt$f({ -(sWcY4$<ZHbBmcJBEUlW*>U|mFptUnisIjyijvNZxanV><_>85*-kY8OF5V<iHQG){j#ih|+Xxm(ny! -EP`W#Vt@*{Nwa;TWYg||mJ?0s6BLHr4-2ifyR<|3&o5uUc=NNDtho6)FQnS5Ms7`)Mye*ct@9>b7BX4 -oUd(dmqS|aMc>#O!3ZD4)f_rRpmAM$;mC8@ttk@?&+37}Vj+3QoYl4D*6I16q5J0s8RPe)HT{SY}7dU -eQq?oUBCin#YyUjsd-73wiur!%eZL@2egO~)I>~LlS?>qSY0(L0_>ARoq229elX#w2gE);}D3CK#?aw -Y4eZ^cmczmu{`Hbu2eiwWp%QF=1*_xwOV=b!_s7I=a=V_nr2O_RttIx1*~MBMLIm?UMol}R!?Iy%aVR -4GH2TF!)Hc{n>IsDmJ|$yn@w6=Cy~K(J4b=-on`@6TU~5T$I@TqDSUflpG+M5~Z`>V9;gb~1ylgWZjE -=YKrEzzzNl&@S4#=$^j<fmU>HR(fA@IcQMTF#Z<kL#V2)Gbz$Ky9R!RW=uQzPNapZglcz)NM*PhAtU4 -m7JRTU<d<MBZm&`I!SpxzO43MaDP*elpd|L9sq{+rB88?^A%!J9@%2)giR3Eka7kZU1t^3KGRPI;Da^ -AGmzw>r#Gkw<`%zqK{4WT@i>`eXMH3?}YG*KB-(v>4Tu6ZHCR6ri{di}G!r4U-T-S&C{7G*fj(yTK?h -v<<Ymu&2MoflE7VDW<{3u>mr99PR3W1N&Zoqab>N|wJEfLu`31_nh^#%2zKq=*q=nAaAlDh|Y+tm`gJ -gARcv4p?ZTwMzy)Wu>|?-wA?g1Pe|&9HGCC}2b|!Rl5H8i3i;!~t|p#+_mF(za;gzW_H%_tmv5cCiZs -!SSLhj~kq|Ma5zG2^bNqK49Ou_^nmiFa;(ArFe_N5m+x0!FaUiz`($jt&(63mI4IkGA~Jmka;H-i+oe -U!WJFh`bGiPKCY#ziW_+>K-$^TO+{{pS-;GO??E%bAM6Sny<VJadl<yz;58b0H)##KGJ0ip1i9ya8!} -P@fcZ-N35NdBi}FA3%_M-TTmhb;b6GWjv|W*cu$G^|1tCd{V)tZSp~}NyeWU4l-h-#JShTxMovtK`+R -<PZcnq9xG}`l0-U@AM+-vhJ{=%Jeybwn$bvt|?t{v_(kmz`?aF^jlf-e(v{vOJlcWo+Q66yJz7K3b3c -N}N5?_Pk(A@-nXeHevZXyE-e67Rsx%!p_I_k=u?;$)7R`suUt^B2$FJ$w4gFM68FyVF0jJr{}aLP{H| -Rh6~KY0S0=3}PaBe{uFU`SY`jGv8p?YTe>0*c*su-;hfeW%Vt#YmGwDw_mO=|22T3GwX#CUnHn(znSF -dNJ;{4v8)CrMZfSyGMRxaNDDG|!Ei$WdJ>C*uUaOk%60z9yHI}hZI?RDPfVgbCuk>GOHt&@xd5djdQ- -Wnc8dbgRQM^E#bFA4NyM!pFm)Q_h_unlM*(o;qS>=<!9?|p2Zjr9Kq*vK=YU2F4Af|7Ju7YZ0@MI-nK -AQuhSK~<J`1c7{x7OE8ryRk6=ggD2@ik$)$Gczzk0O<@;I63I2X01!GHZ#@E(hNO|NjWk{>7}BhOH|S -3#vEuQJ?KO65xsO91F%T}wIh4PsgHhjhY&tT9z*_p{&z^!$Eo1!&FZmpI;ck5&!uwUR}Y8aHIsBUft- -P@*uo01nCvv^ae@)k+pr19Z3s5+VN!r~}Ml2|h@ffoG?GDAWoQbf*`%Km)vyn?0FxU$;vW`0b`Rgy>| -l5lfArDvSLhUoT22S8_FIm0edk@LYU3Y6e6I7_Nh>dm75ffZMzT6kb=iJx&2V1SjH}BL`>!6Z-wu?WG -3%R6Nz+u6!(etib~>+}S@AR2nlYkRhA2hKZEIeLnVBVAqmmAZ&Hk)*x@1-pYpoG|dPFLQSo4{0X9P9N -db9MF)na)=<s-D;c03mgFu2-=q8{k_3CUBH`v)4uiQLIR%Fx`lf^nhE66IwbU5&(k-<~rrO+3Py}yf= -Ze{~7Sx!L)qBEWTGTRKArUT`YOw-Fah3anm-uol4TnCPch%e|nQHWS)0xKA%E^$e!3S8pK*1P|MD~L= -Td($ehsIEbz9}H<0~^;SV9SIv^lQ9|kH{<qGiptmyXm+Gtl!&IiGxlp`9gMQGZV*Z>)(AVHK;d2vxm~ -2(<7oN901M14=0P~p(CJWzLUHE`2Ig1G56y;b1a-;e@q+*398OP?To|e4~`FE5+vVX?g44*!Ju#iyYq -P;W7{k+l>vVL<DyLd&PMURgKj?2^_+Vde^SScDf&QB+kGQ3d-ru>3Z26Htj*{39a<bO;RS1;>|eDKOo -}epWmuRj<0F?v`Bfe&nHcJ>4b-d0kytBR;e6xQRBfYxOT_uJcRzidH))pNWemS&;pq|pOQwc;$iitPP -#Dz*K!9z5J#4iDk(!rjy??Ms0`usRU3cVVKC-h`A<1>BuH_>F>eUAHk4lzl{ot7~UP56V-hD^*Q9gxw -i`b49QqcncNH%rV?p#u{RV0l-ZCo-S*r?E>p5|$Ok4bu2H|~Vr%`NC=59#*R0ZlFw@Nxzgl;|>oWIYy -nU1Y}d?%|=CzseE|2EZ~Ef4g||nxrMd0dixB0)&zXm@!=CD-@!}%=P5~z%bL<!Ihf>cwFv5XIv<H@+~ -qE-mogl%LPVH2#}PsfdZ4mB5ycxPRc_yD-bZ#V{}HXX*w6XLZ(XUl}TO|0<~BGP_i+h9RE7fn+g!V%| -DTq3-~vM2b{&{(P+o`!JU57f7t~)N19kLLr=l^xrRoa>f)$5xGNj@g#}TU;L=}FRxvM|KB)+{xNSUkV -O<WQ={J2A29b>7+RaSjr%rRglU?Bx5_xEyPS`u<9KbORerysy$AQIrPsDSoc(I*mI|Y3!fjDgCNRcpr -sy7|2u}n<{(nKHV0ZKhTI~RZW!yhAY!Rc-siDSugVc^2hzBQJK_5l+q3<t5>PNpx2l3WKBYk7<q!nkl -wK_i`3C$m6W!(r#M|9N-z_Vu$@ul~9C`?J^2{(AO;DHlWgVErK70r3IRKPyF7O(iJEtSV=jU=`@~aee -|v=<}VT6IJvAR5iG?ImSUFOTrtJV#P+4=*Wd#Jq4oQ6+XDPp&=5T9(4$3C<SLuce`a5t;gjdbxpQ(iS -b}lD>6Q6JF{89UDiENF`5!laSwN<pWfx3scNFoVvS*J4ofYXYN6vZ3$$1QFJE&%cS6r#gZAC49)gj}2 -dvP*{zA)~Z3a{6r5D6|MYf-{5H973082}t@i2H#<up&RJY`TPW!o@*F%^RZ%n;Y~Nbj7xo!*YFVzme* -_7IQTxF^7POp|WYj;iAkox2U$<CiNe0h3*0=c(5?(i5AKuhXvT_0p;Ox&k~o)IaD)5Lum3R}8yY6xA> -H)Qjn1TndIl67aUQ*cnI=&<>D9=~Cgp;kc12K}M{LpC@9yZB9kCUXNax@hSAAe8VF%kGc_a>#n(iW_J -Q+!%@0Q{dCmOqdG@z@DseF*{Ixzqi0Gi!Hm#4Iqj2;^S&ejlVf?=%4lq&SaihjKCdNPk-V%yew?e`It -xg*VNCcKq^m=W-4ev`1K8`Pv?G`u>dK-!9zLd>7&{RXvv%l+HXumDK_6?eZj8s0e1jLT=F2PFEl?DBj -CnTNcQ(}%{mPKVm_a!p2wlfj-hC(2XN~?$ZRXK&H66N4_@!6E8M!g^uL!nS|Lc`y3`y+#8VD$Fgfkv+ -{NT0EYj>-nW8cn=YNQ=kv?t0TT@AdbLN+qC^>SIU>FlnIsnMS}V1nq?@gRy}?{mE$*u(OpvPs3M%tN! -hv)1Q&!{=tJT$VUkQr#<DoNvI;TyV=L7-H-2LMOfG)qpwh^F+MqvO~71t<as?VM?w6t%PPR=u>S=e-{ -mgcv<Qse3sW)yM<9oOvH!i2N7g*c1f$-vZ&J43`~1a|Ln*PhN|VJEz(+qc_br{YG4iPD!`fOD*n+5qj -8lB$(l-OKcdx-IP!>J`7z=}C1%)!2QqqVXe;c}x~E;@Xlr*9(_k#bNfzlaIam+9xE?F2LmZ7Chd*NH* -SPUP5kNR10*o~sj$S*KQ+yA53O{V#<;^}OG<84Sma_rVkl#PVEk7LN(_lI_Umm=&JMnDsP;7nwMmQQ8 -N<(?ty_oF!Sb^N($4#7e{RhuI>m7Ir@$i8kMVw%A@WYRWWHDCnNZvA8rYg?>G3zSiO&v6~IT55KP?Dj -aNPijA5y}PQvgmqxFuGX=I2xok_YOg8S;|8P*e8AH97OCnWfTt9;#7Ah;F#*o8JnI5AP_OQjf-Fm2!8 -s*a3RXnnEORA)e0Ou+Z!_<z>sHA_#s2F+R4tq8G$kv!7ccFvdk(h<%ol}Sug$=%qW8A9~3`0OtfmZyK -o2|Xi^RamreY`+#JG5RhH*mpFO=%I(jjll@uAO91}|+UyLkZ*2!I=Eoq?sAPCcwXFM{^ml8BzDRHSFx -u~GbWKgi6Q<6I!`6$()2ui?c+rYq)031mVM>yUzsweM`*nni(lBq&u?{_`Ix;t8T8DL;FxB`>IdZs52 -uEw+Bhm^2Z!S^9)kFPR(0-NVq#{?}}XQ%uN#82=ul@gig_|su3%V{fu=(j2_L*OO;g454vp*a;fls@o -g{t?HktHIE#%kFrkYqSq-P5fZg1kIdygyMnq83xdF;C69vQT(^ullwUyold4<loX>gFb8pyJA_vd0Qa -nQ%(kzOM_V#2yD}Q9#3bL1@$<y$-+=)*9y7-fNR5)n6k4s4<=z`JyzfE0(3v52evQ=-(KA_Q0L$fghk -d&EZYGItD75e4YG8=Fj?smKFvXP%bTZd=<vPs^5S=I$=z(8lcI*2JvkBw|;LwvD#t#EyY_!X(aSPXDk -KLaKO$xx4yVj|=%;=c%L~!Og2@j-F-gE6j;HG~5Vh-K`_36!A`AdCisIJ_1uTPkPirW?oFny3o_>l_G -M%$)`<k{Q^sXC%$SVv&)%4d|1*ze@2wkq!_qXro5rMGQ#q4aUiR#!E~F9sw&4n<KGNM|d!umAz4^rSB -0LhEjr4swM;*VPJb4$e@I!kqZgY~-tM80A3lW1EQD@OJA*t(=5!&;uS(&(yw-W16)A<?zwU6w&tGLfd -v6Af6AWS>+g9ebQ+~>p=c`(A6Z)FmTpo%dWw~SxQ;<`8PL4;VGT5B67ahQzo1hNd^EsVf-<+CT3^t=F -Vfqvd8D=J+6L-;k$&^_&w$b?n)To=epX;*cUM!H)Sl`o!gi~O6+_1jhx`!Ue|ne9rW*m^1H~FNl%M(E -IhHFB^%I^N_w^iLAft%4?yvKckLltVG=-hWrP?%_Aflf9}lm;2pyyi6=HX+8y$i0gWSjF&Xy=`8bkpI -l8~+cfhTBOh|4Qa=naqZpzQ7@81o@n%&~4ux@yc&KBL!xo3fEG3M`m|^Eu`vmn|hG$vXG<Uk`_vta0# -wybeC&w=av&?jVtNh`x+fyf(JaOhSLc6;GA&;z>p64t0xO(oh;&>hjPsSU31|ir=2-Ui%#wqwbTNw9Z -p-ziIql^$g#4NssYxQ)HQ7K@;Y@h2?Omk+yW(dqn=7u3&J{W*Nv1JX~peCzJl5JEd<$=9}L7Hy30`qV -q4u{ub!_TZ-k%C0IH}k9YA?@nbB$cX6}@X!-7ij52shr4kxA(Qn2JrPrQFu`~B%y!4RRbazDO`f0jQL -o-J_PzWz}=OaV3tUjhgUy6KTx^c)VNxVBB4J;(_W*Ap~k0Xl-A00~iamEPqr22;g&xa)x6L_&89~NCw -bPl<45TNti;ADA#zF+|sh8<cL7mQh$6Cf=|OFDH^Y;zO#Jr&EU;wX*hri%Xdo6t^>cki`%kAD2JYOck -u#d4`7*~xg?8oygNqi|5gFqt)qePVAZ!T-Nuw`!Qa?z*7<Lk(WArm(ZS|2CNTGApgD`9~Ol>*g~(DDm -CzyM|FG*|~3|ANGwH_(3Cn*fqi+p4$SSxXk9(PFQmfN*Zh=8(n3$J~U_#>&(VHf%d!DUhqBUv<5pcr& -;<vR?#)>5rbr400bMy?&XeW2L=HGY=HdXN1=wa+qSsdAiuG&a?58(J(?bKanSZj%YCTuhPS#=7_tvng -nYV#V7Q{o)5Z5!9#GB4)S8TqHzs2QB=LZ1%TzzG<82!ZIRO>)LmS9j0%w1;nnE!P5@0%{f*(_c(-$H< -Rb4QXq3h~OCn7xEP|k%PlyfuJe(*8v=>Rl-1~`~*?B9L-Ol}!|EUf3M$jcA+#5#VyF-A!mfJJ);K2w2 -UMpRkQl|ZF!Q*FWL;nG-ht;!uE;W(<R|HiwxZX_ba+MavB0|p_+`u<;Sq@|Ycv5$N^XH;*STFOyBZ@1 -~3Abu)5<bv2759TpPX>w}qNDM8Nw78fL5jeAKAYc4zXa#k_8eJ<tzTWVvw{<2%iT#>A)j(vSP2ATQ`f -|C4-9%$oo41}*A?#z^USrZXGq#NrQH{holQ$)XQ!Fi4t(>^L23YD?=@z=u<WyWY%}$-3oNPdIv`Y-!o -b2|y^aL88P*ZhM%G<%Q1|Mc92HS7iVaJqr&AdqT1vsbU`!R=ZCmFd@R;#J7Q&{>RZUKC{jLS>|KW6A* -4Q9113rbOOzpg0U>h2?nBWwD)vCnF_;S`cQ?qbMS;N0)PTcDwg(K5A@I(uzhs?b&6tSYGt@Oa{|wp;l -xV9_xLDj9?Ak(qO272c1LV;uN8y~*(;cs_aQfj;o5FBe!>MN!@2P!<F|{Z0|qSORHR(2K(#zWd?3g?S -S^9FvDp*xdlpq#vZdxFyS~7AE&BpKh$`lN^e#n@MZ?+QoknGA*a(^_zERr+CK+!l8r$*F>z^U7=H?0$ -<Fz;zMT|)d`85XxBSBD0+1AD&ezPrQsHLugnqu*k;K~yX)2EcjHK-wWxk%x0@%i-Gxpjf<d3L;}`MS# -Pdx4PKnP}4(rQ&Dwo&g{g4>?J@iy#AI#?=6tTS)zm1@wjGcRChaU^>xJTOM_n!RfSiw6Sp|LmchlZOx -DFPqA(ToE6W|nG-JgwROb(@c6_@DPx`$Yg#PT7{hX9GD5X@UNwPY&lL--Dbl3vb2#zlBENyT6fHPTcL -tWHU3Vy<^_SfW$Zq;Qzs-&U588344J(j*BAj29$?S?x109TV;3}6nus-_@&e#XX=Q>=tpR!98Ni5RFA -`CCZoupVO+<5)P~<<Z12!}lLGRM&B>&x-emK1_64(pFZ$FWBCy;R%9^##A#I9K;s5$almzSVm$%`K&6 -oa_PKEJ5{FpaO8-<r{NNYZbUR~*Zz!<bSAECM{z(Wrr=L75!M)1q2J*{(sY;>)7xSBcAj?R;U+zKbjp --0LX89I?>NNVyhn-g%iR)xS{*_(ghC>J-gL%xTp@Xn!}Y~+w02e=J_{yMMzbZ><hPo?gyoLuIj?@G%{ -JSc6#<;<fm*Dg9xaPp*h@-|(qat4^a9=^T{i!Gzc-c){shZ}NTwg~{Rr^LcIFEH`K6|D$34b%ZOH7X& -BR$*?7?QOQfm2g&)mQmYjgzhl@lCR+6GZnChEti8C<kG)XtV-4y9UK-R--g2%f;ZJC@RVIBGd{qNr8I -P*AYDed(F=Sc>Qo=X#&SK{OjF2o?B9W7E_%cg5@3Stn!&?kdZYFxH_3tCkiv9!8!INE1@cNR+f5iir- -e%}7$ibtG;c_60mlZT<cL+%kq`FDISoHqFLIw#dUu|9=h2Tb^GDZ-<=b81b*cJ0tDGA!yX5_p=L0M7U -CAHLe2ck9X<N6VovhLJ05a&-q#>iLi}}XdMd!BoTpL})d6VO1m6FT3fDn3kC;d5>0Ny`%^ZQdgx*(Ng -0(&hsDJeGJsE7}1mdwZ$Hl(rT>V$4}&^aINR(e_AOz6<6ZQz+ZGMFe%O!<_dQTy~dUI^exa^ArhtCr% -*T`d;XWjW_I5Aw+qE!8aam_3vws>2l?nyB!ef)q>SoypBAur*y~eD?a;pI@CNbf@vfOYkS}&E7Ig@tj -#ZrZRmM!|Lv3+)CbBI_SmcI8nfl;hv*LLZ^GKJCne@MRpmfs!qBcut4Iz6lkpdNpU_v&}mG#NT7-aob -MnO^w4y0rZ@0juwv4ep4gMIyfHJD=ynv7JRWFy-h(nW=9mY`$~jo2z!eduMq)lFNjTM7hz=v$77^v6$ ->snvr87DHLhcg%jSGr~8jp|mzBH3)v!bC3hN~=VYr2d-rzl6QuQ>!^ATuf^GVv6%Ejr}ks$y~#tQ_+b -@ppa8FO5ae<eex&<ZUW*_Y7Wknu>1C{dmS_v5JjHR|9LN?^mbE!tkPtPB;A6jejaEVsc&qc0+<*Tdr= -X%^f8&H@iF$7rVS@?4_406Feg0B&ExZWWPfp=O$<U;x8B9Uy0v?{|D|^H*5=3tw;c`+d|)4*4^MsE|_ -j9!tc!=Zt(~bfGGT7rmNA-hWD~U84MEe5&e-fbVcb)boLDEE_x&oRqD&8=x|Sr)!{ml${^5{(5y$zb< -jOGS@ZV&sUCU&Rp2D(>43$=AL|KcT|j!sIi7eY-b3Pxca9G+_?GMU>jT8`L>g?k;Hao>@znRYwHpjN6 -!3K@aX7&QZ3odWrA4xuwhSd9Rk7X^uPWHXbCBtZ6g6sS!19K!nbEzse1j^m;SYcKuCs!>dCecVGQV+m -{KWP8&DraBo_3hCaVjP86+8;v*E8{B2f=KDQ60nuKfQeY?v!K9T4?5*>xR`Q2}eA<z!x65_F6#ZoWA6 ->3xHEU{g)4V#0|UZW0%ITh{Qjumb?=@<S9^Vp&-wFe_A0xaoO(;-@-o(t_LPlg@2O@Q&dr2o#^DWI^n -L10-#&qZmM4_cGLu+)mY$!f+8$2-2r#~p2gDt0Z>Z=1QY-O00;mZO7>PRIjbaK3;+PBFaQ7^0001RX> -c!JX>N37a&BR4FJo_QZDDR?b1!UZb963ndF2{iZ`?NW-M@lR5kxwyh4$5e@=%|f3odAaOWMQ1Fcj{Jy -USQBsifqO7WwZt!!MB%wYKBrUTz<}YjS2dobMTlAG%ib<g;v>6Rv;P?QX}L-N{z82hw(ZM}=g>Z2nH` -fl0mB-**6KcRv2-{Y82HkBjqvzWMd_io9kG6SQx|ioE5rUy*lR&)bI9EAoN;F|cOCR^;Q*)$p~UvOm! -@JKp8x4Qr}a<Q?5yQ)DF{dR|L=(1tc`!#A|%f3mWn2j-*lre^|9$u~832#2awhsy=PT(CdNO?x=drm{ -$Hnu^`M7VXfT>y0H`+0%ZIfL<}j;)mbP&o4fFh@r5%4b#k6U_<{xh*rcfIC7G2+PY>Nkf%j^%bV+SyS -R*}g~-Y+{_Bw6>(yV>Vhs7fdRoz*T7;jeWPb-e3cenY`xV)-zGTe}7j1K3O&=u!GO1-Q88Qh-WhdBn6 -p~$j535X|MMM?Uu>Q6c*FZ)}fOc2l-3PrALsAw4LOXP{w-~aoYQ8SJ>s|C5jdI{}V-b3~9%|Zyh29F@ -v$7rfZU9T=+tAw2P6&LCNHJg2(S>|5{?3HDfg-S}sg$I|{eSa*{}xV`{hManrc>!>`b7LBN%ETCFw*Z -CsXP$Uu0Ml#2_>5ry^OS5!tQ!O$(FOalKF`v@o~?9yIWq@WX(v|cIwg<sRn`m{pk~`8tz`<YMOoelmi -L}JxVxH^!Ef#bi@wy8vFpc5x_m3ioel2$YI#*;gXC(WXSysjI7k^&JX~USk9udn!s*(%^(u7GtjTll* -;#_1!Iz|LVQUI7jiBm(!Dx4Il-6*-ci`#m&29cs<pIKF{Ugt0Mi=6cxIe7orMXb8oU*LBP`(!1PSoei -WqN{D_GmqLxu8X6$eABnN^ALO-ZO=qy~Jz;|(ejtl$)Au}1P9buPi2V6zpK6{r&?-!-jZB?PvC!#70K -8@Sy^F)+0~NH_r&ESrS9=tR3CmnKkNIYJfN5?WQI*+{{ew;4HoMSg7?Hku(W=MZQSPUa&*>L3(*r){# -DtejfQn(R;&8;V5sc#$4Bp8x=7bg28{7g|deZtYp!6^W9)rS3%UQOTan{xD~M==v5<_&)4g>feU_DG$ -KDwZ8AezNJpUx-cBc{8{|hbN=fVDuHj!e0Z)p>CIL<Atbzhpf&nazlYqir;_aIc1>$I7K6@;R4r-RUb -!ww=9DyaeSbO+3wa2hJx5ljgJfcMZ`l_~WaIhje%I9ZL?=jh9WU^K?C{uAh+OQ6HZYcNIf}G|jJ{8^u -Mh}SAO8zOQGp#To}CIPaWL~^U0JakR<|A2O2p(hnUkOI?HQ|>tw1?JT9ho7ZxS+`awdm<#9W>(o^2}* -v_B@Hs5L2_L~*U~5~y8=Ln9~Kn|;f{VTyFzC&^YY_9w$%*pejK<7BQ&NmXeW6Vwb5dT5*788HWt)UcG -Th(2fq$x}5yc})6H7?GD6@TH{)-3K~16iQ&v6;w_AUY$GUF{0)BZIuIOo|<I-6^Rn{1Qf~z3SPi=uB( -C@Rv>uWignPEK>@{Kr`<*hn$V}8em`i7&}$x-j<)EH(M#&8ij@mw^hGc9SzdC|m(UfwHlXL_sZ+zpGq -UTWZ)4-lV{fC$YtO`b@L93gsLc<@s_j&WP+xlR*cccx<qivGpO{8c%PW1lnmUN7De2W5i(t`*)P7ufM -`uq#3vQc@WpBA2cwLoY2b~6#SH{`pnVF0rHK}_SuR&GP#iBXryMrdq{XQ2A>peQ^QFrdNgBq$695?$G -{1e(QRbrUIMINPA^X9r7X9q<%Hpn;Xu+;GEZc~_VPy9as@6h{z*SELjJ#DU8rL!V3qq_~Fm&f$viz=7 -^6w&5C^rHDmtH?h5MVcnjI>vKYiv}dY`av|I9;_4s@}c00@ZXS=$?b~C|1&<&w#3k+3kF2R4*tVvd<h --xm9iV&^rN-#twqXR&cO=9F4~^qEZ|a54$AU}O=<GZOrpHxg@neY#!Gi#W^3NCDo;FdKE#Sw9FU@L>H -R^@=DAp9Cqv2Q<gZS~;|;tZwAr)Gb?ItM8}sJAAg`e;D?smk>dln0m{d%Fl;Mq$0H_H$OlRZFw8`+Iq -`{(jO2^~ErrtA>Oa>kaFn1Z&T2%IF5*dC#rB!7CC?2iq^~r!Qb*=@n$#SUUMd|8*(jPs^x%yO>R$?XV -JX9^MW{}t=gn+m*hjUYt5ZEry5vIv>j1|+JIWFp}z(1>r8QEV~exO9b`PCLV3{tz0u9>!6$R28XR4<N -hFoI%`N6+!dY<Ueb#te?JF08>etq>4n>ie9$1A`a0=s_-JctpUuUaGS>p!R&r(Lp6Ktf^*X%{CNdOk{ -h&;z8h=wJo1gJJc0Y(tM$74Tuc(!t$8u`yvR<-xZmK&b?ECrQ?`v?tGDu^DuQcy^K(H7FBzs<1sWw+C -m;>T0!et%+(VZXn3<b#*)ca_HlyC9>J9+1<8@HFiSRLVKRd~n=%mw6!iCb*wDjHeOnbEEHkAU)^Z3r^ -4N`yhLKVp4ui=ny?Qel17C$=aq9Sg5euZ%$H*n{ukS4zh*jk^yGK9yYm$ei$qqns{1Hh)Mr^ZK<N#QQ -`>DFVlB*vh(+qoizccyb2WeMkLl(yX48gFyVWb+m8u;@Dt}9j0U;-svK~hzAd!%6PngK8Rp@*^xd>{c -4vynKyhj^+g6W?nmvEH}bsfFQb>0eM`s7vFwCls^_SjwGXl~h&J4p3GPU%blmhyi{Rvv3c7FBj?!d~l -%uUX2!`1f(3qbX}$;an%=QE!$d!mZ00CBEX*XY=($y&b-KM#o`HKUcR7(p%h~G2`d7WfPK;(7r@ooj6 -60mpumcw`q61L+c|!f;ifkBP}|vzAQ%N&fY%Jo57mbEFKzZ-3l#;Nad;U8!;b@7gg`TPP-?0kP+!C|w -{nm+<mFs?Jzy05>SVUeZoqJ<Zi<b()ri88FCE0(An;=zX($yG5w*<A$ho4{Xmg`1ijk`vAMTamei{lY -s`m*+E+-G_{ErDR2r!oq2E?9?X=XxsmTwk$$gy`u9o_C3tK*zNyu_!G3SvHpWzhT|#gi!hIbJkfPA+y -7$v#^KEcl9uNXbtn{l)Zkpk3+(mocnn^DCJYk6J@ZU)J0`KEwA8#t61hUVf9H9&+NB!Riro=pZh02CI -;VikcqQ6*b}XsLMo~>FG4VJ~vPq+FdLR?X;&WvS(E12#t(1N`w4R)pewDcO?8n7W#=t4MJj7Pt-^(Rj -}c83$5F$g8URW6#vDQco@S^@<JBH3rW%!GQ)`gYDUmot&^a<H2-1q-p9Nr)ZHkGB?k`pGi)5^;E@7Wk -B`DLgR?wKK+uR8WDmKP)BnW9&>YMF&rR{JtbKTsy(Rbhf#^ZCDkzQVs+qwVxrNe>LG_3wXVcy)2nn?` -K9tei5R{noy{Bf4vd|1Vs2}IvVW#3Z2)7nII{Njl#JNth!`cbXL6^60MQNh3ni@wLRi$d{j;dNPe<VZ -RftIhIRwN-w{<-B%s$;2&A$JhKP80Gsa%VWpGLIMZB*>)7kw%h7%mIM$1s_y)Bu1PV-X0e<l}gpCjh8 -bc7=MTF37xmija9iF{OkAc8qhV4X8Jw8EHp@*P$`u4{R4KH2Pe1~c$t{#H$G)GFI6R`KoUdKAO+W^6t -iK=iP7Q|bQG>WDQ9=k`c&y<qKjWV?IYyU<jUx2Pvtm_gM(;upWe9vo>JkRQJ{&*aB6@wJCb(T|E0;r< -h2uG<CUFVKNv$N1mBMMUxWU}%t?hkU#S*Up<{sR>wr^x+aMHd!RcQLM(`a-v;e4K&`4fdxxZ8m;>!A( -dIF9R9*s!}g#L+D&Ddx{BmriS1uy7=m8NRR2HvY+2)C?%L(<;f(FxhevLyr`*j8ZS0C2$yVstE6Y0Gt -M3OF4|7M^7+=hYdT6Kc;QX2<D%2v#B500F$&v6ZJ+c+8_$kk=j)xm4f+b)7BP=yGj>mF;ZUlb{_XXOm -<ef*4~+)Z3eBkmpCpFHaLIGIN<Ym%k!KShQ$eMNpjlM;x~lV<B$(=J>$a6+w5yi6bmyTkH4k5N?dM(4 -v_e#6<xAVv9hr8!iGXZXZ6+w``=C`IfET$*G1zCrz30Ur<W}1QY-O00;mZO7>P)uJbQq2LJ#;761Ss0 -001RX>c!JX>N37a&BR4FJo_QZDDR?b1!pcVRB<=E^v9RSX*z~HWYsMuOL(ukXBphu<ga03v_9^1<MU} -vUP9`m9=S`t4ygRmBb7D-**l#k|-(d%M`$t$#ds-E)3t7h14W3wp%W?BW{1HU8Q+m|2ioDs@a3Sm$dZ -1ANIK{SLrI}Oz6=@7JITP@|>+SFN7kF>PoJeWa~G4<!FjhmsBd|3I3#c#gyIChY~FDJ2!t{pJpe&pPu -}2cKO?wpolR!=L$ZrN>oDgk>x9SnPzuPtP7czboH5{L+Krp3aGp|tCcGIlDXZs1THj_AQgQ|KT#lB75 -hCEYcJx&{(Oo>vM*hZIa8>`F<$ToE}r66n(9h{fHkY5cX^dvyuN`L%(J&wx0i3mWPW>cayp+631JT_R -tCX$YEPvs<PgW6X}YGGdipKX*_v%=mFtX&J1z^cuMfAw3TEai<zmeqJp1+G`fP|+FnwRhUBP0h>q -X5mIsp>S!47s04fhf&XpT7}MF^=XzpSGB5p$u-N0N|%)$jrb;n)^tSR83N#;bjURntDGuDjJ2CW?%Dc -xuH%{}v10HMbkC+lX<4tR3JyXZ!bOKbH8r4Kz}9j!8lkI9l9|uT6b|Lwti@S|lCvxUGHcA7QMuZ=V~* -YTcnEdQyeNt+4*?g<ff1W9fVul!0SSUC2<$nNA*Y3=95D6Emx{^5s}w}ocvK45z))PU9z8E*u_cSbqH -yV1JOST|Lb43fq~a1YP}~9gjjWgz2+$*Rz0MqetXRHD$mA8dECg%9i_7V1Z|GFoFvK;5@pQtYac5;>; -M!S+bknnFXb02dj>=hd`|iBQWU^$25ll-!O;*V~B-ydNoJGGv86m(=iVcKY@1P!C+klfZlRL2!MV`Bt -q@^kug<hM|B_ZqJQ#-e_tt_fCemM>UlQc1vl`yd!6BpU3tGZ)C<+hDK6KzPOCfJZHqR^Hua8FVWp0z7 -X99?k09psNY;We^VSV0KrH>fj!NYW^&WtkO#0cxlhO+<HGE7&kzS@zfv*KRaI9I5uXX?WvWN-K;|Bla -AsM0U^DdIvm+t+uz&@t_p1p;)9`QLPVg5<1?KU^^z}X;$wk{x6G@#mi-*xs(uC0KbAWRxz42?#P;jKa -;juwJ)7hV7ii`?h2jdZu@8;;o@mgVWQeXK@TSe7G@hO9ny@kk}a1loFJGn2_PVj+ct+bf=yNON7`;SZ -Y!=2wmC1~9DuFgG2&Y7*o#jB5CK;(r=)Wxq3&MG;^EL{uGJ(h&4)174rD0S<MA=Vav4pD17_r^re8V2 -QXyMtw>`RJ(_54OFqxQOOglA5`7-<d;{4t9iAgRfSwPHlNU;SD3{&!mU&rMK@dyV4Ie3gxOa!XKs)!F -#&Wx(me4fDXagWN1Y17TkN=TV}t0p-68#-uP3|lx93Yd7rin&zC0bWTLz_<m?4iVeQZIcRvm~6lrg}p -jj);-XC-|U#tYFocS3s<0-=J|n8y9HI-x9ODp#mGH{Vpi`NF-`yEP!6;g+TsMe3ao})<Xo^66oVe<tF -RA<0uCdmYl_eXf!ajw8Cg*Q-Ik?+`CjjoGy&*&47h1c;IR!bwtk2os32iQF};6=iwg_vWp{${yB_Baf -uFV=f%_S?3Lv%;RDk^iRD1i=&+MSOMb>XFkORGV>;crL9)9)V+sZ`uHbCPK2#6N$eHoG+o6OA>`<ji5 -M%pr^WeK;D*sZk689vW25*jhU&FMqHwmZydM?MA&mN{LqI_P+zP%FStAct?7pwGMzf3Jz3wyqQEAy?| --#bRyWtq(3Q5v#R^^v*PiI7wWp+D^9yn#?45o>McZaIq=kdN_uZry49aKRRQcoeZD2jyM#fd?11i+e$ -cAtWTAh1W}2lf*=_}2sPp^oFq-gHkXMm2pw<Qin24g7r^!nBaY54=Qpp<&rjb>$#X?w%LH>>ATBJOeR -zFC>{q2Z>w}xFHzO_OfTo_dK?;1L^Vc`0^P4HYqjw-~B3aI0(EXXX^Nyb8wn6_0S2j;fCKHhHF^T#a> -K|+R@P6O(;aK)O3>}F)9zzuSdCiDxHJx6iwZ@qX+N#K_y|6>vwEkbk0>mxdz-fuYaqlV0PHMP;JS^Nc -E$jWR5s3Z}`F)ZZ36FeFANm+r3`R9)B5w7JguHM|VMPKG%+$CkMPssvCcu#N&k&zZpX$*pgOyOm3-V+ -47WIF&J-i`D4azNYNWThy#piZk?A$2^ixoZ^Zb?w<{E2ngCIiPhAwP9%S|H>V`Tk`;SDq34PoL>Kwmj -B>fT3i=b*;HSHd?w2CmnMobN@9=@gw%FIIy9A_)XN~=!1yhFeCW;j>LWcUXUM>B>ku0A`VoydahxrPi -PZ8;=+-{k9O^tw9XM&8yd$nee9_{9wD%gPT{fP@7)=Kf`igSXTRAgo1)}d+zsMZaGc{$h55u$yE~jHK -RI_XIq-icQ)A#|+HUe#0X*%Pz?3!%`bjeS4^T@31QY-O00;mZO7>P&AVkH%2LJ#Q82|tt0001RX>c!J -X>N37a&BR4FJo_QZDDR?b1!pfZ+9+md5u_GZ{xNSe)q2+1QaU)ve0LvUZ5vUdKOKyi)6RwAqWIUq8)Z -+Nu{V{-J<{f%nV79lx4R@5KH9TIG1mRmWRGmnl;^iFWdcUr@8~{dfjt12qw+uZ@d}BVD|K}2RgU&vuK -6lx>Gs(pyBDc5%!7JZsnkJcE=B*{yg@$_p#TqYk9LW(t6n!<*R7xP8B_`zH&687`1E$r=sF**UE}F@= -sB=ASz^)E$9MqMb*gSnGd3@y2F9Dwd1}rujg0>&Gk3{Q!OTi*Z21y?{oI><?8DC;bDpMAT+PJ=8oe(p -!g>^s*=wm9xrEmq03tA_}J)Dw69Wi?LoA9Nf;frILM)L;@*_hqU=W9k9xJj$Oy%@E<^>$zNNLaB!84; -wpy*Kh7SXKc<J8kkyHDfZB`6ENs`bvQZU)>I(6V^E91|giFK`DonnVhLDXAtOVfy&nUIK~SP}2%7a$_ -Dm;`sV?EdCz4G!-c$y?11TsG`Q@EXiD@{36|J&XeggOfO082heQ-JU&mloi7h`@w2_&x)dOWOCnvS)~ -$xj1s;fU0y-RXEh2V797oZU6)o$I*4YMvGsd)2dCOtO^o4kQ5}eGC_F<tQIN6gU6RjM);rmVVYUnzqq -oV@4zEz`HW@UUt-;O{R?3X+4Q~b!Z@q}7-zF3!4c^|3O~V>UE!ORVxR6%#F%!IcabYR~HQ6dYH`TK$K -!i}*9=zPEZtT<V^Vl_+_o^CO@@CGgZ#NbTa>msj-mt(QA@QHc-;mSZ-Ezm;P8+)Dh$f+nH?CSp=QN>u -+ptfKfHGo`5U;WpjJs1Y%yG<3{2q!Vi-akmN7b5|oi_d$g*rltpl<I6B?fT%0PBO`s(LA1c9&QVDKTY -p^Lqt{DlKa|Q%#FG#iyi@Y^|FLddu0XP|w{Ure*u?qqO<w!`MX!N3PP#PsaKWXuC&PD-nIQVGtO41GN -L__X|x|QSti~QA>^JU4s9A7nLqOiGys4^U9b+l^Di9T(8UL<9y5IuJS4!ik2tl(Fx^F!unj!FaoHlqo -;l84x$G?_!W18Q8g#*eAF*pV1s!t1wvQg9$5(}l)yW!R>!jMAQw(VQm6wjO}kGJD=eb(**34Ashd8A( -aj0R%>Snt%zx$p5(-LHbL^PZT|7$EK}#A6_6butTBJ0|!xYJ<)PM@dE*e8l!9L6|$fW|~#`m&^-bbeZ -l6MokLC`{f)9<ivAhbo+v3G^o@7L&>cLsexXa$})7SVwX^q=XjsYNbt^p^dFYKm!wC{1DDBEcs;fI%R -ofTpWT;434`((Lcmgek<12=aI`m8AGDBcTLXAe2~4l0bVOaBKqXfetTfk0g&o?bveGf88VRpRzYOl82 -fzge9avXacI~q(+NDFCek%Ji5#=*QQqr5>eEy8{2xrzJpH2@UQqCQa!a&vY;W9=z0@#*qL%VtwyCF0_ -3{Q$vi~K?WRIXcW;@6w-{O}XbvA96NI<q341{D<?ffekN>+%BJwbjlS_(M>QrgmFTgpWt+ULCNn7^UX -_)K62O8_c*h;xmiykIf(N<DSX=B2&a#s3SP6=Wn>m33}vpI1FB+hiON6+>&5sGh>=r#LA9IurEgo`9p -U8`m5#wFu*Teed|rm$2@xd<<p&X(out2k~Ul10<K36;$SV+-)I&t(mYKNWS}6Cn(jT6{ydkckS0PFhH -lkOuK)HZO$Rz<naI7+{#yjcmcZuYwLem^m$*`}zhT?XJ@|SUU?&pJ{r0@&_X@EYYv-0M^IQ_|SLADx= -hev<;YG_>M>0N$6r90wqZ9?T6DW@cMXpRY5eSOV2hgPfu}_qN(G-B+`P}wKehLZ>8@&?qhop<^rWgVH -dKP%ylRu%DoXf%;xN~LyciQyB$k$wX$^&i`$s-+u%8$VTm1ojOOVzrkYPg+sM&wb?KzR#I$wvcu~ZDm -L^xzE`a;v)6AcCq>A{`<iV_BH%Mj-ZseMA{1=wjxW2>_4rL1#elpwZFZZ`gCYmvArte2uTv8TJb&E`E -+FD|@qu-3{)~qfugk`=BU-Hum+nQ@Z*cfO+T)1RJGstH8aU~iIpK?2`y6eY=J$GF*4Rm<ba7)yJ@i87 -C%}j{nSoo8`r8&~f3h`8CEidUDG<FeUPF+vt!JsuBXgW+IsaZG>%!ScS-)#dDO7@<89|KtUlSv8}_H_ -~<SG;*g6CjN`R9@81&(QwnZYG}GVbU3n2X{a59JapBaZF_s^0*Q^$MmDU$9N8t^Oxz@_MS86GL>?U_t -xEpJe#eOvmDdiF<`N4QBS)J!`SC=Iz8=mk-BJy((>9$bf^>DcfCPp)kgBp9r1p;0?&qKJCB&%>>t?c_ -4Dzf1neYPkjmgQSJ)Tw|5poM>xKNCca!XboDcre?gdP}>k{WxaD$&sU<e4lT}@MFc;`QfXe^u=Ydps# -ORf=;*Y@hZU<yI@WJPq*|955(OMzI{r`aV-f*!YMNzfuEd!pYm{+&GmOH^w?o48=)4G|<KmnO2tjERf -W=c%MC-eU1mRS9-~ef9DFCmdZCeiN9_=qK~3a}mzvlW!Kza?vr!9LLGtJ!c(f^?y)H0|XQR000O88%p -+8i=lKQ<^%u$E)M_zBLDyZaA|NaUukZ1WpZv|Y%gPPZEaz0WOFZdZfS0FbYX04E^v9BS6gq}HWYsMuQ -(7;#0DIq&qkG(tPjPyVL;XaLlDr6bYv5eNR6cIct!vF4ylVJQ*N6H32c$)e!g?DtZHo>lzO+5YPTqiu -0YqW7RDmT_VO=LHfY;BcdCi5zxgb!TeKIotQkL`%C%v&$X<k(#~LR~+f!#kX(cmJ%72k7QQ??XDu+gi -l4YeF7^<9Xky_a+gzQ;Z<e9E2q4J*VzJ0yMV(_0!jt8`sv~-NW$yce?a1=&yS#Z-RE-W`%yK5q?6Rxo -&HOIl(hcEZ{A0Hm(SnxH&)~%lSlOhpiDg5C_W3-uLBg1?8kRDD4jWk%Ha<c)VdzO(FXPV4uGiX~bfF9 -ZE^isHI=A~4)p1%tE^0C78Vl}5S<eOE}W>aO^9<vvYuPs@5;uL7H!@Sj38|^T2oMg57DxJ%MkmBRP>F -+2BS4ZoWE<9AxK-y!L?a+M=XG<PX#W_(evQk(JUsUHym)m9cxt`1UY7?wUk|cZ%ywKtqEnBqa${M5v@ -mwM}4b4DTY3usnVSZ+VUzI*880B3U+_b`O;g7~3<Wxy*vGiOcK}YHKu-(=tx7P|Rx~69JsVCTO39NgW -?Snjk62$@G8TS-4P#P+9A{S10TXUogRFr7q5Dp4ilA<G$0fRQyne~tvSvxoyQP*h3<~*NfjLGqUrLMP -IHUu$zX)HNI+3KST@Q%{GgU7D2pWs91@f|S6uF%{X_%MchuskpfigGMK<T>wnmKMum1-EzbyH>dA<O2 -9(MvcYOS$1Yv4iv%sTa&CWPHsmATwGG!yEGXactIdCuOm%-EL9$H7osU$`uH?G_lY|QlP2ET3!Xiebv -m^<Sa}Am|95*l<EbQwQTC(?$2&>Q8YVGKVsTzG1Nd`KcyHt6yEuW1@=CHQGF#TZ3}i((p9)x=EndAj{ -HHklC%lYm8}|6TkG7?*hn(8qZ1j>}w7PL1><bjy0Cmbjnkw`h(8Z{%b1X4niY0Gy={&xepB|h-W_WAc -a`iTTeL!Pmjx#MZ5*3=YVPriT*U92Lqnmp9em&K;I+qTOxll6eF3)z;&HXhss~x@hS^r40<S7&tb^LK -ng<eWk9;8!4<{hSaceU(<b_)GN(6iiWevWerU%w64J|(`Jd%Ok%CJFSjFr6P^aZz|N>*!QkO#>J6w2y -Ir;HS?8{c7?i3$LGfv71P2<kn-f_AGnu)e|{EFB2hH+8MF!)MI`rp_v!^=%3`1I*^upT-6(RXF%>06+ -#ZTafJuI&=Agf=(i($t!XOT5WoBy>$rokBo4EG<`b}*<l1+dKHo#tjATzk;yKPsiRXz|qBuysjsfF+? -$<qp)9!Pc{n;$f;V<5k<}-DsTmJxu--%lPd>4+LvHu^EBwcA2%ebgVA?f!*w8qY)Ao*K2G&g8b@)HPX -388(3-e^dVvE-MPuc4cGtG)sCCY%{i#ZBV3G2hR}<jLyhqJA&^`H99l_3+vTyBx{>**$g|mOyl(s`h- -T_b2gyjv_u9J(J4m3Lv6qhtR*57w{eK39W8V`&*lEHk`*v6Aj7j=HmcU8oO~#Q#7Bo#WbX%eUa`2cku -oP4K=bVhH^y0e4~<Xxf&<;+QfyFc2M6wld0sHpLrvJhSpo7h97hP0Z>Z=1QY-O00;mZO7>ROJ13D&2L -J#}82|tu0001RX>c!JX>N37a&BR4FJo_QZDDR?b1!#jWo2wGaCxm+ZExE)5dQ98!MP|Z1Gch#7zPAYG -4u^6P;9{3Z6AVwV5GCng%(wka_as1-I0_mT5?(kGZ0%M`P`Auz3|A$U89X-N^dr@-ppip)wX-G+tx`n -TN}M&x^ay#7Fg{2OQ;rX=yQh#@m<eHY27SzG_uLLtR0wIsJs;Aw#Way1yFCOWpb#J-N15Jp>C;bduCv -6;0rJHZYS!h1N{MCT4`VhwR;nKmh3^gEiV;_x^2#hvQD_xqO=NZC+pLnZ{EE7^l1tLUrPvc>jp<{?~K -uA3ZWY?!Xxs#R;ns|b7w?(52ll{0mqY$DN(p=zjRsStd;7p*^J@mLuefEu=MT7cX`hhY(#nB7F^r#=D -;Jt%h_T|5jla)chZ)f4ybKwfLGEiS*^`ZDETk&M!4;Hyn|gsh)%|5e1D5`E1fonDcA#fNTA`!jDKCCX -X+N&2^_7p;bCy}g4v8*8bL+p+c`4&(YIxs*J1~pFJ`k@sf4xB6$3OId(Pt8GdG{l{qJki88A$kax3@f -DmVpp(5+$S2)B$JvVsQc3hGjV&1YUhz)I}*%W<m)Z7eoGQg*^EJx;IJU@UVOF{0Xw+R*^LM!KCBg2d@ -vBNYXn*KGCLJqQD=Y7I5Q9?XG7=g8T6oZ(JWH#mXzKn?*&yqD(bW0fxLHQPGZ*z2n+--aG0DjY>!xzt -xsUn$|hx~s637ihD9e!*G`VZz=l%pNS-oOye$MTzUMsN9xD-a*B-U?33N=_Bhmhekv-IPW_JR|b#=qz -|sV)K!ogwUbT!Lu-kiqBjy_&l{sR>?V5lEqghz46_ZCaxKBUVtJmQL99#yLL*BBj{$C0fO__&W!Ui#I -yP&K`Zhr6Qm7t6LG&2rW%N0cebo={iKt+W{!(=jomo)p1zWvhzv(*iO&@B`F|*P*n;!vLKf=?ydYCUy -T2|iJD-7h5E;Owx<{=Kpy*u=}y)eam3b+=na)q{e*&50zN%t01Q>63qGYN6%^;vQ<&0Zq*)smWw_v}t -Gg&Mui$3jq{A%}R-=AMG4>Jn0(4qhDRwD>lO$1N+bHNTU!Fo$e$8Bo{i@I+|iW9Erqny}BR(rV>*s!J -tc8sH5yKmYX06Ldcv9Co%acTBqWVmyA~Zi}9DF%&B4lhviTVRpF`YfX76L~d}e1|GFq-1y!0a`U2*o< -c9BF;r^#oiK#GI2EmGy}~U`t`C!m2d6dJD@qbp%&nufJJZ6M^z&XQ3lphl{#Ms791FskT!%e7?wFWa_ -E`K>`FxllF7>;$+)yp%Faur8YjF53-CqdaD19f?5Pi8>Fx&j!luu;)4|S>93UHf*l>sc`@gx$;t34>) -_+1@MWc{+(>qDnwIhFOPW}*CwJ9=GN7AlP+{E^iEl<?+TVYiU7i+bU!$70bkfb7IQL`i&Oblap<41?K -A@MBU2{mlGP&77Zk=tm*=?NWt5E(fz)Tmnlti5h=RPF>OX%(S(yOqMJz=Q^GzvGz3^e4{hu4W{E;U%O -yV9+oba%!IsoeRNccw&t-bi$VvBCPVx4fXBpLB9`4ebatp^r(po^Nbjo~l$4%(veA$ub;r}v)Tn+~dJ ->FN1*)F$T!TMfT{b!wCQj8CF9=RfSJ_GQDR5BWL84z5CQomo)RV9xs$xZV62KvEV1a_?BV@2DK4Xwid -K<=o9hxfH^2pY`3oN6N2K@JK|Jb4RXgAU|P#uqi{?efs+&A<_@LeZH!2E(ve&pW=<Y3ag8<2A954W-Q -kf!J@k<u0w7yWU2*qPY1NZw8Z+|yIU-?TGuSVSsQyX%KqX%S{Pa>R5jm0|d2xRvNC6L}hw<(<aPL*Z% -aU(YxJ){^@Xsi83?vZJ@?9=>~dkCHp^g<|lW4w|lyda9<o$GnB|wTB&>&ZlFtGhk(8Wyxi|)>&9!8b` -egVgw+Q9e;Uz$jJSdF;;Bb&~*t^;bO%406hsy?qaDQ)9v`m=oZ!7+#Zvt_V*i@j!&nPRI>Trr}AuZow -B<oR4#3pQrbB*eQw1bxRUifPJbYn7Pv@Ipit=JS3w>$)|IS37Y*If1o@*(kjICK8Cgy@D%p3Du{dYS{ -6UzyOKx2a!g1=nzokI<abC~j^-3`8$?jp>vc$AN8)+m&NQIjZ<zU~CMq5I|6Cx%Q#YJ|qmxSiURDL^& -(zJYK=wLUuQ(Mglmo}dQ7gIia!cgiI!cs}&J(TS1Ys>DX_t~=uy20UeJrwRhhr^z+Qa4y>(*0)Gi=1W --cRmc_ew#@55_1?kY`BWgNme$Yayc$hPC~`sRI}ed`I~9Fii5F|aBJ!v5|1L|Dx5yy-i7W;!U>27er_ -508DJ)PZcj>u?n9HNi`VJiiRQ(qCH3eeYP%tr4;0i{I&DA<qba`B*#Cy3!~eKvpZ*Fg3O5vFTk-K -}Yewt135U2E$8zXSgPP)h>@6aWAK2ml*O_Eyt%4K6zY003G8001Wd003}la4%nJZggdGZeeUMWNCABa -%p09bZKvHb1z?CX>MtBUtcb8d6iPlYQr!LzWXUecUTKu9-xQ8U_10Q=mt9mCsA5a$8Ke3p>IDWX*Q1- -N)0*4^7o@pso6DfqEnWW4aioTtRf$niZ+n5J}b0GpyuQ_z)K+=U53}_g{p5c_`aMdK3vNs-bc_K5Y0s -J)fcz$jOYH73m>%k#cs!Phv$|U8?-?wRbdT{K4Kn==C$Jqo%7%Or2;uoW0N3Vs}(#wC)3&t_{Cze!_c -zzpdoI9$U-<E?CBeAf?ALR!vnlk6m($_B6l7-l4-T+^u<Gg;D@x~f1L1nzzejpR#CdL8Qkmg0><sBgw -_T!&>@tJI-q!LTqVJRxUrSyYO>j6V;psyNQPHu<E;JRVc5j(ml1BIu3ol67asd)hQ+U^YQFh|IQe`)& -BSNur1rZ^#T|KEi(ukky<?gmP)h>@6aWAK2ml*O_Ewaha2N*y006}V001KZ003}la4%nJZggdGZeeUM -WNCABa%p09bZKvHb1!0Hb7d}Yd4*KlZrd;nefL)od6@$={(t}-mhJ-dVZ|`)-JmTx)+$S?L@({%kFsh -f?t;!h087-lkUFs*ybBE2v_;VcH-Oi^s<mYb7EPtCqUXwE`-n%XyR;0TGv-I${Wfi00}sTgkg;ko(u} -&3_b)nf(9Ou&*=xW+PxJA68ySuHNl&8=G?3+@C|ZLt!l4lsZ26L{Oqx^qR$8hKcb~t@#&%zTJe$qt0F -#$Y(76CTT4l67g3dzN7y=BeJ7JDhF#&(|1mWx;BhkKa|1VO0scwur#eIgu4o(Ea7#SKVr*rH;k#sv~D -~mNfSR5z=0ZLI4aEtZ>L+e7Imd#7Hosrhr-RO@2RXP@FTP>=|=Ih->IBD)75|4h>%gy2qO?0!tS^lk0 -9oB<Lq;BMS25B6qlulQHW+quIl*v%?9Hm1c!su)oR~YS%wQMQ!Bx$m(rnr4?c&&h0mT-Cb;F{ku9-wF -MVzMGqvj=S4AEB8OIp-m3DC(e=_-U@|GLq?TQkVNH;oHLQBRn`u`<WQx=qZ%jY9ZL3OF}h;`8M%otxq -YJ_!?dD(>t|zI1<;h#adm)Ix$V!Z~s1L9|5%_`@!-3;LT)~)YlN4c>BMy59B4gE78SDxoYTUS>?~ce* -Gahmzz-=RqN;sPEMh5&Ya6_Pwiu!56Qj9%lefuzt`ShP)h>@6aWAK2ml*O_Er~{`FBeJ007wn001Ze0 -03}la4%nJZggdGZeeUMWNCABa%p09bZKvHb1!Lbb97;BY-MCFaCvP~%WA_g5WM><7M~JG^#M5)T1ugp -QcCY;ZLQ;_vZQKdsQ<pQRX;+alcbp)&5Yd!*Mn!TDz=e=MWZxJ3|tS9ofTE15OD8Zi11V=1e^G>V-)S -J0$WYL%47457pmIn7#59>eET|I-W%>IqQ;2Jz;iNi^<Ysn21Ve_N<?Ew@6p3OkH>QXX_aO9Nj{K}jRI -(a7X|qDs*0KT)v<tfBw$?xONoGXgf!|g;G_sB5IcfEKLdw^vu$1IGu9;#O(4|cELRg*Xk71yNLnpc@> -7~xxKON?)YZQIgOF*D@bGw3LJl;o)C8rLCZ<Ymlq3(*GU=)wfpda)XXymxv`x(nDe|~wFITBRaR~Ol) -aEv~Kvzar`-fF*QaP=s{12S3zy1c-0~=kjI5RhRhT1u^!A(caca=$+yzKG0o+;o~iBFvre^5&U1QY-O -00;mZO7>Pk7Wwes1^@tF82|tz0001RX>c!JX>N37a&BR4FJx(RbaH88b#!TOZgVelWNCABE^v9(SW$1 ->HVl5hUm>^{-~(K5eP}lX$bfC_hGJb>tR41H6t2$ZUDWt2Pm+@!g8cW9l4VP_@4B|@fCUH=TNFipBtK -FX`&KH$YPs8qX1CfZxo76k;{QyzrKbiI-_($?mtZpXs%vXlIl)%6c_A7UXn37(I#E{zG}nITkM!b6b1 -jr?_RyH6O_k6_iA`sOY;?Zi8vO1bHn_q|^Ei-L(g5#EXzljF;zk=@*PLEHQA(<%ZKA2*ectl&itnJ<( -xdVUUbweE+m}n5_h5L%4Iey3yFX+nF4Q{L-KJHt1U*=*x~2hD+z4}7Xat@f_PCA)tX32kwCmglDBpp3 -X5Xbn(eOPK#d@_`l{H6&FJ-67$c}Ug#P!*V;ZKqzzeB4)V`MbrOxxWo3`oARlCLg-p<v6Eg_LOnE!#@ -P%q8w-4M3&Y07<{VdT2E>l5M~$+5tMp4OAHebQc}#G-cY0CokB;2j4R3U(o&<cDy{Ww;D{>=Iw#OZii -@Y<=fob@64-Ui<(X0Ehs`4QVsQX&F+6ci;+WteiWXd&@GhA75qgQTOH|oJiz%6k?!HdbWlY)vf;^P)m -fZR<FYFlp`}aJGq#bk9+%5YD6a}9R6(o5b?ecEY+&@_9(yKv#o7br*E=XpZsfks2>l8$1^1!>c5?|9b -`QAdql2(R6**yns8L}tC@e^!$Hbk8jKI3qhRfQ?24^xRw)h?oKt-KUKm@?_rR-1&4|Iazp?0Z912E$U -E6}#0g_i8)O*KVrP=M#fI!0&)W6@UL3}-VKxyh;)jyM8;HW)d;6?|_*IZ+sRhSiLEO&&>D4+@_-&hB1 -e>QZAp(fAXE9FOP5!3Pm~2qsj*I5HN-*O2a7A`)$*`smR&SVj}Im)sV(FC;88|5R>wIo3C7E_u^PL!q -fKtr&1s3sk;=l4AhajjQvCVoV;ZX8|!>x&|e-2eNc9vF{Os7Y*8iCr{Lh(GCif%0e@4I6{Hi`Lz^7$c -QxD`C(8dYRQ2bnYBLT?6I^h&M-s}7_YTtH&R_8PD*wZaB|CFy=l){)E;Afe_Z@}@%+z=9Es^Z5fhbHW -BHtP6N~i5=mJTxPXLsGnjwpFq*{e#CDmb~ms)}B%os32X^huA$EZqtQV-x3nm5863QHsDG}E32sa_qh -lZbKwz@>cd5%1kWX+2A3pU8a<mz`3SzhSu{r(BB)`iww|YB6b`DFx^$B{&`=20XzEQ?gv3g;7t;3?sq -$aE0g0SEJ3?cLAIDf)1=HDkvi9Xh$iVZ7oX5r;P1|whb>ha2TU<XK)ygG}5$ed?XTw9kB>bKbt9Y0aj -cfwq8)Di7oEFtiwPhS*UJyRPWpAV|pQ%NBzTk-ibVk4jngW%|{s4w&LX$yx2XT_MJyiX--Gi<@Rvjh& -==<mP_Z8^Xs4G)*P&H5I>(ek}iNdW}L6><2mQ>%odEwSR#?}Ykt7IxI(e>WM13Jplr0`-z$h=ODKY4i -!1$wqfZsYkz(jar>`GA_|CUAh)MHUSsW_~H{<6wTv6Ycmw579kI9^$DOuxz&yL?;={(7n%MN#ECm7;` -wz#{1Jr5f+xIEM?l+@{YJOgC5YLdAUycqd;V@m}^^203Qny&AG%dR9&bN&vyc)I6piVT2BsckR@8d<N -Wu8y2R-FfI>u1DL>Jl+@lz4tW^{BOpHkzotD8Hd!}=`e{;T<+537ci6|aYShzw;)<`k~ln`g+u<ZJ<z -k>Qg8B`jx{9fQ7;tSPYY*z>i(?fG~QpE{LWMJPWl1p{mk+oqCd~6)8X(YCMT-re;A$t`7lBYBi=`M)4 -o^o1~2aKjp7S~p1bIT(*+p_I&7Zz-0fuF>G4irJG2HQS-kEdipVqCeR7DXFwha5>UH&A0^LUu5PP{mR ->EK3<9p~r20zkpJdAOG?LA^h1iXTqaXPnkp^wY^D^qa)4q`RrUmW)_U_J*=R@<ltO@U8Q<*VE8`mA0) -9{E`v`eVn{&zggJA947>OWK~-<Lt9!K`?@h)i!k?{+JZnY?<tgAtlDI39>W#zVX_AoqcTuh&bOI`&hI -kV@*NdvTT52=aQFl4@(70!^Ld?%H5>9C*CT@TDMc%@6OmQUiwNU>=)a+d}$s8`ef^Q8f}Yg&D~RMZ(z -~+@{}_*<b3)f77uJZ$B6cW#*AXO$?ZTQcSPW#DdoQ9MqqXI5YXoeT%Aurgypb1V@{5^t)F710ghWuFx -rd@Hk0O`ztafOdFn-XFqd?GP_;=#ne-)d2=8v=fw%pCUo<!TaY1lTOp%|C^xsfR0|XQR000O88%p+8! -t3Ay<^cczj06AxBme*aaA|NaUukZ1WpZv|Y%gSKb98cPVs&(BZ*FrhcW7m0Y%XwlbyLBPoG=W%^A*;d -K%)78ky@!$wWn28wUzdW3^7BrA)!gwE&cjB$-+Q)h7+;<Ui_Y&-q{f*HHqehjI>Tn*gfM#nTwc%(jL? -}Sr?!~V~y%itH0D39H}V!4XR8aXHW~Nd~m8|q%~f&=xN1&ZaITp_`0jO#h{F&KW|M?)5oJ*IlkxULki -vkj}%a1z!gvyz~2{cV}EU(q7O=wUwokPX&}-$c%jg|#$zK7fT}2pPNVmbiuY{gEoId?(Vb4GA2d1gWP -%5TL=AgtQKZ6OgYqCPc`!DBA(DV*0ftWKFct#(4EJ#q&=S))>VjTiHqkDUV!bnSO6rrI)s%yz(v$8h` -0(kSJGt{Wrbmm?Ll_7)Ym@CUlEw6FBk%w$SB%yz+_wZrVRnWUZ(REu7>xmD&uUeulVV4D;gy4wJWyM= -aX9)tv*wY_6#FK(f1VHV)T1=P#X?)&*Cx_56NaIN(@zS~NH#Tq?GOIS*~Jc|eKnd@-)D`>&s0x&80d) -S^}<U!o0!=Fvx<-ZZ(4b;ziOv6`gdm=%M_~LzsT~?VpUz&AnT+9&9)cic5TGh+bO@j^YPVP)9tLZY?Q -Y;`FDoaT76A-19i_$E|N6)eLn5oH*4s+YZJR%`~y%+0|XQR000O88%p+8LqAK-AOHXW9smFU9{>OVaA -|NaUukZ1WpZv|Y%ghUWMz0SUtei%X>?y-E^v8MQd08FOG&Lz$jmEAElNx-$;{7FNX}15<x)~o;sO9rO -9KQH0000802@m7RwQoO3CR-x0C+$E03ZMW0B~t=FJEbHbY*gGVQepHZe(S6FJo_PY-M9~Z*nehdF4B4 -bK6LE-}x)L;PRT>fna-6*(6LcwG&xBDz-;u$-9+OR2T?oiWq?a2Mvhkx}4vhck~H>mS*Q;R8wQH(f#` -MyN^Z`MYGF|6x*z<#jbC6jgq2Si*8dYv2BXJk^-K(M#wMp?tNL`oi<e^^R8)=oS#zF^ldKHe38r|fH* -6+yQb}geqA=TGD8w}s*<f#D!Y|taNXAcuBq&-vXgBv@QZ3{^ISEzw`F~6el~Ve-&R$5lkBoq$-!7Ff9 -<8}X6v@uicPnzcvdU)w6~WZ-k;M5Pib}?O)&5OnpLo#-*tx_Y;WGoX9E5%|NHzbJ$-w2`d{xpzKLn*G -^?uYrjq>YRhf7E^bXGE#^0ApkALVp9R85)5Im24%(k+)?007NPdg-LR`IV3JXD?QciyzmHOz`<iy0%l -D|bnHFYBVQ=hgI3qX~vm%FO&E)eiV4kIzixms}EJ-lDEOoV9J!#^U1QJw5rzlr<0m&M~p{qwMxg3o=& -MEIPb+Vl9ZLtW;8gM4H7Yo!^<NWY*@JROQXia`uA8E^ugSWzFcoQl$VHv+BIuUGT{F7WG|O*@LxNsbs -ot+EjH}*Q=?8v>;iRl>{M^c4?_nM6$ex_3-Za%5AA~$KoOb)y(>Clj4FDRAFl6eQx)GN6n=~YqWWDn$ -<;FWSvy6;q^J_ZcN0!plPwV>C39nW&qTG9V*0<q;f)e&fBJIz)H-3JCbLaA+Zw8%`YGVvl%KpsOrjSe -sU|j_cS(7(;8GHO+nO+puUw^AzKC0Lyfvp9Y`bm?|L?y6>=@oZPtM_z@b4RHgYTHK%phhScsGVu)2op -t{FG5ZSR}rP5=|dUr#RtF9RagU@)cl{ONr%qlqB@eG4+(k!gipWZ^A{1+4$r)F6XsX=N*)DN#2(Gch| -c&0r=k!c73xMDNK6;UB;NypyWg13eZA2v^&wec5g1Jar*}cR1y$lC>GTMsU#&%gDjOzn1XUJI=fj#1_ -bwSD8{G{n&Irp1%VX?PT4}&x{T)7#PtO<g4t`bgpEzj=>So)D)$fC>$FLlonFuj_A0LLrL{JI+KOw!w -Eqw+#=X9@h5^L_&>vmJ`9-X|1@GEYt^?h&30wFA=#R@TGW=-Iu4LG>^t4a{EnnR6YJy>5n?dpRS7oDF -hB`eaK}ny;sW%fVvK>{b~htsXi=2-IpoLBTB^*U1<{~H3F`pleO8r)d3S>ELWvtt&R~@=&I)yJ9{Hz< -ViA3=@9Jh>M~m4AMp_N%ZzOf5g*Tk+%dh3sJP^{TlV7^$=)|Kqd;yAHm3fA;`24;uk{uYEL=g>>`<Fl -b14}UO@Rl&r3n!th9(-yt@I&PoO01@)mNN*1x=m9o0@ZqZd3ioksvW$Y5J&^inl7+#?3b3Fk2)fq7vR -T1BHo_;_{s=A%A_`BG1-j=1XMj*K=D*oGy%Mo$a@F~(M*%A3$Z~%Nq~Nbh>Nj^8!HTMx@z(mXxnXK0X -w#b7`#+=yTx^@Af8O%hXPUQkkVFmwQ0s}!JdANHeI(veZYTJ^v#nKD;vaJttUuP*hh1WR1Cob<ttDUU -~W;i-~rX@vhC%<37Ho~kS)^Sj##RNksDCmlo|G0<i_yS%Fd5D1O~wTTAL^0ycG`AT=C}YlEp{64_|z= -Y+Pc70X$MA2Ah;}v{C{uK>L?G<z*t?IeDqT^D1x&YFFlE)2r$rs`5@E9y&O}GdPJ}mo3S&;XyuaivbG -^{?R47<HV>3*?j|IRDfNpnykR6B{Q(9ti1(+g;*?MA)k=(KsNKNMj^S8;2k0E+LpB}taKj{@Uk-^Z4k -^n6j`MIl!zbmt_OKJ2=J947h6qiwl5kxL`-<GHUzRdMipyNKM)$l@ct=z*k^4spgLKFy%e{kaT9`IjV -6hKqmh5e27{k{sRsIqXAdLZImVi#c@!LD%;y>5V+PU6^h*D$^@QWeq>wlL?L2xTyAGMVgP>MCRZ%<{I -n(CTYKtDx;)2`SAKGWGzJ@*r6=>H*OM#{$`K2lA(81x~)o6s4{x)~@Tb818{CDx|>P7PM7zFEgdESeu -iPyo%BAoC<{0$VKsh@RXpVj1SZXkUtKzP|uK$x6o6fHxpk)cNztbfi3KZlG%=2;Iyg<NVN+`pAI<khG -L^2-i0M__5U$+`i6ZV##_AXNsH7Jv8y=0ae)!IoAPm@fDq)gmx`hMWcza6MeVk%wpZbPCuzSgx}G@Z+ -8M-<K~0D0vSF(*OWy^&TmZfCcQ8xH*6vbsAf)wESJR4XPHQ1L{8jU?@h1uMa-KVzGhP>K@e;5V--0tY -N!mc!pl#cH8XB35fja1swn+6^(G+oDjU2sy;wIgUA4c>JT}I&vl&#vO~_6Y-ItI&z*v%4?qBU%5C{~h -%MS|y)JV!-sDE}41<O}=0$W4Qp`=JfM^2{`6jDx;p~7WFd(+u{n9HO*=GmL&GMe<(KdZu4B6QN12OQ> -7TX>JJQxsT@6)EKtHWS<Q|A)xu5j#522)-G@NLs#{)W~$W7z^3hEu|kVfkT~JqI~@^3Q+%mlxsc=oEQ -zg7&g)Dl{0DX`bqR<Hv{NgC_z@ee4G**kTI{uKcC}k;d~0^a;wiFfe8i02Ydzx(1;dj9HC#X|FtR#EE -!o<uJ2eEYlEBLLjc8APdL}%P@ZxpX&<4iaoky)yrXE3N8yF9yAa{ZEyW5W*;KkXhwDAmZM2>QW&OLoB -<Vs##HbEYXF=>pLftC%hnwYf%<C@CN=;OEW6}^7!2PAp2spUdM&v`pk0v26geU<%Q)hY{3&Yp$Q;dxi -=W@)az9Lzb>3je!`o@NbN#PNdv&elJN1%RCfq?j>`{;J*=(5|e7!*JZ$MkkIlO>C4^cD`9t{^6#4I_s -;Gct1bMk@zox4K8_A2tz;OH9GXh2ut7S5@G#erl1lY=c%IfZaF+s-3B968{a*z(|Xg{5of`u*Z)orSa -?QzNXmX@riJSWtGrK)kC9`9;r-CQ2#*SAxaH*$G+t6zivW4s;4(ZG^;eMRRA~w(?iIDFtv#U8tkoZkn -bVrpKUl<RigY&S^zVK{3HtaCyq^hk2G*tr)T$@wW$0u+a$6j%D4AHpDse0H#Z^smzb@q?(&rV^Fxt!I -eBrRa3>kLP*yRfh0+^9-+-l**OEJV125kZNA1N%VI&`+|MvYe*@MO%&Lt_*q~BIN*P#)2A5cI*uyvG2 -muW`mlQRqX9~5xuR1ZmlLxRq5Q<Dm+#(h|n`U$gK4ebKkwiZu#rbhUs*s<rvr5UIU7Sx3f3c09q-uL6 -)*M`%g0NtPa=Wm6*|!kCf-%hvhAFdV5@Vz&Hdcnr(b7@DD`3I^7Kw@p@jc9NX9d$oxTFTBqe3!;0~m% -QWSTS-W{;_J&NaqIj_02zgk~@YN&U-FF(n};Nh2)P@ncTuf)QX6>>xt~xg!w5$|o9tLn$ltqA1ll1oT -2y6d{l^M7Y|>sDTKLN{vk1f2iL0sO-wiJ1Iw5QExKAFn~#9Hg|l%Pz2Lf^i;Tp{WFeWwt02E2suv;tr -Z<QA@_?L%yBx~qr_IAJelGym>O7n^M@!wcq)SzOmbW}S<ciA(iK%75E<@|&O;Qe8`qS#zv0YL->pynH -S(Y(YblF>N)QXd0y#J9jKGo`u*apL8;F=wGfvR#2yA9%QDDm=ge`5J$OB${Fru**w>i&bLL=xE)e+1_ -EAtRI`s1`8(cPoD@khQsS>5?0cVL`J{xQ+C0qPu%MS6`j!Uo7p<u+8C&!65~r3k`<z^A)_QPY13W*@S -a(YV*Dv9An|mSL>tCfH)4gEqEu6e0lav8Jg*(Q%k!%m@B0Dai76M?Ylc3=(D*AsW6Ve`#cE2!il4^+f -WO`%Rf|XozZTdoVUGs2{DLIt}Eh7^)CY70X+pTb-ECBeTHb8R>lBPi>kW<l{!_tUeLv2gpyzE+Y)3XF -LWLMcRY|2CP6Pa=|evi2Ra~QJbW<-#~M{o5|M?_t!l8U>?H>tk6Dvc!P;3VuJp@yo2ERaUuL1dH%^n% -Anyw#DT?gmqQkzb8{~^F1wR*$6*o|pV3-~x1Y{llZ(s9GgHc2RoX_e4b`shnaH}XEpJ>IVOpa(G!2^7 -5BE(Wo$XRgIa;|k4TTXW2;dYujNKckK1`*IC75fBEr&mN@r7IO!OCk~dv)zjw*eACBu4JI%Wm}{;Yqh -AkTeD+U3HlRIzbGqWn>hCMtF+I<r~(0Oxo@Z5Q?h2FcVWf{5>ZuM$VU}>MF;y0}l6F(F$i*D-XwP(31 -B_nqbsc7xMyWs!>@u3R)zYbiaXM6RA7?p{2l5dyE~mp28OfIy^s4BII%VXncCDeFSBwk~-rh0oO9%^{ -KEs!5$2?en}2H))8%{uv<lUo%m?BXR2Ki7JWQ{H5an3AV-U7-)kel@oXSCa41|omJAwQ1%({D7uH<Re -4`kwv7|$O<|#1YsS+nb-Ia6^1!6utOstQvaMw}p<RDYjCmr54h#&H+e4KG);aTJFlzE0d|DZzQ1D$)! -)Jrtx@%YV=(#klzSeb_)uvl3@L5pQfh}C$=R=iw+E2Oh0T;h+%TcK8z!X!wm3~M%mLKGA37DrEj-7gn -cFRo1u_SDv2{VPP|KZ=HA$CTBvw%YG70ouzOiX^mKa95U)kyF>0Y_{Wuz2KLHcb~O25NB|?;*=|@xHs -0-pDHcHw&7ADo>D!C>7Y5}5DCXCtI^D(N%O#zyUc)a#JB{zP!JhIRD*fZ^7(VbQd4o)l-yh5?s?Oex( -Q?Y{;6sCr~KbUtDhdGTK#C{a7%V0jY<$wQYzSM9^N%YFn_|gXdUPHu<#PSCn75fY<-j!>Z5|VV?(ACs -H#JMY@h%P><<#fv26z7!PbMZF0ogkB;8o>JsyHVA;juE=eEzIL7Iu;`U9NidE^1S{OQ$COVDu+VtQZ! -wt}!_rQ_1N%&C-%jW5l8h<DG=&c&bq?WG5Z|5SIVT=rrw%K1DCdRF=-+yoq;cGec0M$0dtc61w)lD&t -M_AxwcO+CZ*8swuWDtWWTt{|sVu3gY@JsL8C#J5Eg0z+L~$`vCgp<X>W>^U<9%rzJzr-vAQIQ0Ul56v -+tuI}2yGO(z|fKOcKnCN=rD(?Q<D=3e&1{d0A+17+-1twcRT+PvKnJ5Hyqnl4$Ys~mog5TsB+KegN;G -M%=B|ysqFMjW#P&S_`+j7FY4ZgENKb{N^g)KGeoH=dq*C-&2e2k37L%@&d*E6w?U55*)r)d{lcpSeCu -B%N`e)@v;hy%xhISzebY5>$-82_Ds%x&`#7!I~TZ;)encO}F7YrD3Ah;WMuETn8(Zfi=RR3&mqn94PB -0IQxuIAA%khhw*Y7*k#tQ>3`k@`=5#0DXI>{`Zl0jh!vMUPuJ66klQew`h8|%W^B5zI!bA2s^Cc{d&{ -!a@V(+MC7`s0$MawQ_<^+!lv=~cba4TZHX){^tUJOTM6yxz&RFNx?b8(C9Z4;=WefGb9;{w#Ujgt(+v -*6$1wWRnyC%wSiLki8_l;cAYpzvTeob$6_E(ug2OGqda>T?vK-J6mzf(|_6rS=3G`oBsG@n)-ABa0iP -8r>e7h7~3|0t7AM5D%-zzm7DIQJ)$o@<BmBrHkzT#-Lk8<4L<BU}RWjK*P#jrQ9bjya0&PTEb$wBKn> -5h?C>XD~t_^RAefBNIC0y__4tkSw+;kKC<7ueh(qd-2Q?^ZW0F33cU3<f6Tmh_!FtFEKPW0d};%aX9R -ysaC3mFDE6ZcezG$ma_jz<$HEQ!s43xj-d-25O<5E*m=i!OD&%Ut&kE#Sez22{^1aOWguLay4_zQOL! -aTq8VW=<O!2R#-&eArbhx0W6i2lTTb<i(-8t@932aQf4X|)!vZ@7u^OGqJT2juI%<ie6V*ZowcG%DqJ -hPk!xffUjEj#ZY|IY#{+NS%2Ll81a$p92WsYVHyJ8R2z})q<0HpgxyNvdVcBZP-Korv?0;_5Mt5nf8i -nW$Lfv@q(j9f>|M*V68E&pE3q%P!hz1VUtT<A*dNUQ;!UCGP>@hTN9($b4rHYY@<hh7vJOLLc!XkuUg -SehHE_AU7qjTzRP`Ilv?{oN@-{BA;GOg6cl~0sRG-iIf;f%9amK?gBBQ6DKjJAco=NdJU%*SV}il*~F -`XtSn-eGj$C*Ejbe`*T|0t+lo3%u|FNti5p4!A)f^~Z0JrO-EBBS|-hq1K1}#x?PvhGOb}9yc~l_z}W -raO%*jsloA5>Rr-D5E;mDz?Y;{sggO~Py=&#Th`;%^2-i(Ng*j+c@8Z^Z4|yu%nWTHT1_}7TFtRKIO# -&uk=pQQ?hA#3w@9dxth~EiPNDvvu*P*yAK=V*;`bTjnWhPP`<~k5FzT$vvU>3vjI;Sd^VQjZett8)*F -bC;Uu|DUe-vN&OWtqM_$}V#BzJ4R3QzJ4n6UYn>G4=a7bAFB%=5c7+z?7k7vBsA>#iStlCSucB~4g-v -*vrQ7U;ZL=*7elBRu52Y!!c=u@+x_(f_s#mtZVKTO5yoqW`INB*VCPtkX7qlt3Nx`+T2hMC--TD1a7> -8R2`~{{v7<0|XQR000O88%p+8Z2uE)ks|;A@sj`mB>(^baA|NaUukZ1WpZv|Y%ghUWMz0SaA9L>VP|D -uW@&C@WpXZXdF?%GbK6Fe-}Ngd^rj3Z6xL2|>u$NB_Z(YJT<djQv9h@<uMdXEp@cOFFaT&-arwVrKju -9Hh*Er4TUVz_#S$>n)6>(_)30evCX*kVeP7kG6Rq5oy<CaD5ihP@Je`TEUdi{en@lE0N7Z)Mw7rn^ey -e|9@9SmXG@DL8sCwCY4>ryDc~zh5KU;aUZkw&>uXgZMsHdm@`QoH_^!>@BzdU{Z-Ap`bn_p%9QuZ_P6 -yTL-8#xotst*4CVb@npU2bNAUZ3uF`0l3~9v(5|UA4=Lcd}kJZN4j)Z_9IMpl&CZ)w+^xH_|xo%k$2l -R-TVF1-fla+htidb+s%v)vvOs%dH&i`3{f(taabw+p?2?<7YSMwkz9Cin8Nh3iZ|{MO6a{fnvFQzm!B -hgKu^u;OAS}^=jaUn^u;qtEY9>mz#}T&8Wd+pnO}M?XmCkrhn4xYxU-7{SGF(`uRf2&68>)anAhar@G -tka1hCFXGhZ%PQ+gMvVp;Xk6Mk`v#NgkNI#sZxozNKmjbeFR&vwjK>by<0`}EV)HF)O`;mS*0$|;=+p -;f~P2IQ6Mnic*PapBak=}@&i~mT|PL}QRqUe^*&LI1ep1s6Jqdk!(FrQ-A%5`TutH&?kscdDvlw*|Y% -l2IM#qO%Vu$**C4`0x;k-nF>nz|1yZK`oAe+gFMNBPUXYUNheeX0ZPqr3oVq5A<c&p>v_cDVT(SPle< -G<5j+`;(Jr#mRr1o;-i~^oQreJuk}c!gl+f{u*wrWSDM_Ok4Me>u{HC)h%`VvwgK$6}9X)&2qR$B&(J -ea{0DsnQon0t>OOr8X-9SU;gys#ScH8o;<b$c?m*%?MvG^ZP!TPuzW7$`(D<aD>F`k-rw!Zc6D@A6tJ -#EAr|7*#M>p4nV6tdF`Mp3+3hzyK7K*7luwX`?d0{*(b0w$8Gx7t&k7QrMKL`(`W9&iG8o>IkbgxI|5 -Y}9t%Uz8Aj3?6fO`G<$c*<AFa`AgBCnvI)6D+Q6}R?O!BzlR4~pom<XRNG6u85~^<WW-Z|1b?S^6n43 -`?|b<|zbTbGz!iZdw__oQpF!K>_n8<)#C9Iu*wc=n=0Kp2hg@kFwvlwSW!TUjPB&f8xA?<rBPzg*hoY -v23<G5QA`zip#3M5G7%Jw_|u}Yj(%naUwvd?`3{OZ|5L<%WW{DhvMtw9%m(*HBJW=2M|adYzt&SL`4Y -_p?<dIKbrP<Th;XcW!o6^K-D1f=I(Gqg!x%dwoy%JtY`*iSel6do*$u3eYbZAlzTMp+pD<&R&|9#$VG -aCW~RAjj67&D^IEusUATYPW>fl&k8ekV$<^umQa`bn@}A09@@#+ZBQ$x6WFslTy+uGfk$v7y1ssKnsX -y-~vl~unWA=fAJ#ex^$+f7P-Y4ihMHZm)B%kE}XsSBfmb(o0`OG8Pbn11}fYa>bHFf9&0MD9EX3=}17 -;bB!LBZBpRckt9dtoTn@u<L{K)eLaf?1_sUQgIGfqg=|KP^iL5+g_c5)Cp4P1!KXx`ZP(<`LrjaNc7~ -GdlUhCLT|E%5ze)JZ<+d$)n|_>^c&~cv59(tmG%~zbUW2RT39u$mHd|Z!#vGSy)i6nty;om1uKS)^C9 -z@e8Fq?ycTC+(>V|xWNvzRcus%{s1kP7l}3jrG}ciq&Pu2Sb{D+KMIbJZU<*O$unF%$?b6EN!zA}CF< -XOwcKyYRw&9?DM`NoD%$jbO$UgyGRK__%#*c~<K0#E>i$<>zy5pv=U4ZR|M>dP)89?h;@uIC8x+7*z1 --|qV9C@1l#1rEP=to#w*=Ke333qo+w!dx-5y4fCCnL&t&IZIf$a%`9Hs-RMQ6@M1qdu#2}eF`VCYIi$ -W<;*FW_{9?Ez;{xret3RDV(SF!Zw0C)AmQfdM`Fez&QX72-=r3J#CdT7q&sgCQ$G=|XOH8qiKQcuE2; -wLsHKpN`m`X-N77a75J?h24pu=dUfZE25KDG)G;>zA`3f>Ls&VH@61$D^!$h1J4kcdnSNw<gN#+CidO -XIc*dwZ2lS;;(1dm%aF7g{L_kK&5rn^6aat9r$91To>t)I+ElQdtSw7{@AI&8NR(4rDfMi;t05WoQGa -N5q216U$0!iFczMz6H!Eb164tEu#1m;+ch9Q2Y_IML=z6zn_U%&A?`I9X1SYEb2!(J_01<wq&l^(wLE -Y+E5dy*xgL#7oJJ~2W)u!sN6yL*t(04WCt^dB<k}suiJU}e!+3NFv%+Tv_DK{JX7a5$I4(NaQqYnTf^ -Yh$kWDa||J(H^y5E=->Dymp3uYw0CLwwKSbZX0UG$^MaHddlMFDtM$QG|Sd`qyVl#TAWWMe*X~h4{n0 -uYGk0j)L-7v+wavDZpjV4v&~W{LP@%QN*$X3DKgY0dgprlPM_ydU5B^0Muqe=Z{}aNg(ZHyRCZVc{`K -#m|_uJu?-zzbGVue^3`Zs9wv$^LzE!7+u?#3ns&K(%u>1YAi-dyY2?X$4VqaRTVz9D98mLg+eN6%prF -hP@5oqqixjl<MFT4F-h-g^AQtHtL2oTS7Fv)5?|nDS!r%D86kT};P2E3_%sHYqJ-f;>Izt@Olmsu^qF -Oy-!#OR8AESH$gH4)~RBcH-F&#b1;ZO3k<recft7d2~vbC7C<OrAnwmoQ;Q#>+3;}T!+^DhW?%^qf#8 -$9dMHF&j{1NyDeE$L!56Ad?lgSQJr(dEUJ0G`9~P=lquxp=zvW>$6lVkW*|e7^vh4)X4dtWIA_>P{eV -v@}DfX?^}D<os}`8OVK9ReF?I5irJ=P-hufqK_H2*Drfe8`oFq4Q4GS+)eJjBmEj|Eww*TRw5?x)|sc -!Sa5%CQK*MN*~vFGPK%7{2a}*DY2=w^Gu0Umnu)>znTA2l#RvZ7qgDxBtU<~bTFU#_;TtpnHGXbOzv2 -7dw0Un|`39*AaprdEK;7u!?<{F&!i(6bjAkF31~W0i?j;=@lL$19&xTdfi8nlC(pntDBiUg+ajh71OT -!u~83xM**nLcxchM{+tols!RD7X`Tu5|YgkIa!^b{wqC(q${M6eYcO7_r1cKQ&>$&ZuUtql(s&u3dMo -9_MndlQ@uaR(fz7w$|Z`LES(a$A<r@KIc(nc@&)c`hsWhjq9GJMA;VUu##f>p*#%QURVc^idYXpK$KV -2u`yg{!Fx)%!q4T2V5)h6o6(?KrSO#In7yown!=kL-R8{c-b~^3~3($oyZyTc!C3`F$=oHGBk-?50(o -f0ET4>ic>C9+C+}O;_EC)7sQq+VSr^m*lC&ycYq_<P{-4WK){K|@zUBkY}Mfx8WR>wSAn$wXBn_-vj? -5DyJ(u8EosNbfJ3tb^)pY4DPRaq0t_v%myoB0(`P=z37MAJG$x0)xWnwbp3rgEtmBzyAItzBS)F&>#A -ya#h*`U@G3p}74=0X~l_L_*dLYQ93x^gZ4Qyym0gpw#r4b&p$^_HX#Fce}J8VLB#{S*!#Mzayc7Pq5w -*`xTwhCtgtSNXSc}2xn|9bD9T~!pWY#U#5SbTPk{PPbA26^Li;znmg=+ah%8ggc1K&>rdT<tBxz?;!q -V(v3KNh}2tk}GtN9)g=gvcJOGRE}iRX#XavX)zyDOgk-kCY}dTMaVPt#G46q8=|lJ?bV!{<zSYypu4^ -Hn%kkE2e&&1DYVP(M~AM{^s}^}wJmO|mc{!r*?tm-_0XtqTUd~!I%W+>W?RR6y*8k!e`2S*7q1#8NP= -_IcJpG)+72U0YGufR@h3LO*dG)^AEQ9Vhg9t0I?f()z$bXzi?d89bB1lY&pQ*x;&2I*S{RN$8XVp+aB -XXfQ^PR?HaiF^<*+O`&4HKHx|HUWOZ6(59;2MY+|lvla*Bj{oA5`Ib72ImAG&@*h>B+4yPmGg3q1Q&Y -6cvm7#C18nb8rTNKuMfULG-fc0C@+7Krjbpe5f6^!WE=d|RU)z?&cgoCrAD438~(<Y80w7X(XI?EUaN -p$S|!{Hu=1uITV*EHSzue!!lWRi`Ag4MIEPcwH3sq+^*_fsa#SRPw&|<Vhjt3~?htB8>6TW!cuOkl|r -XY`Ic#anlR^ggZ(gYT>0BmH?$k&UF?7f)40sA|xGYO*LzRgc`ivNI2F}^=T!gm0(jQ>)M|*$6_u?&1f -_^6_0{ddM0J9-B0LoCD*b#@HGJ`a)6<uhN4DYwYdUy#Y_#FRIQGx;W6BiYROZ^{wvv4ty=b}pC6zEk= -iclZSOmrzoYe6l$4!Ge*hui#N6}|{CPVMG|0)S>Xv0o+)+0U!NV}UtTX#^>c4b1a7w=35q~vdwo7>z{ -*SY4%~GG0fUxCel`j%VEZm$f3P&yj6ir*yO|h!ZWrxm|SA0a@5i0GEpo4C6tQm%a%PJ3Rw{LeKDwJJN -qX<^53?O<?EJ5HR^n3ISK{(z$cNaQKhthdrUr}CPc<|7v0Sib1)<1T3WoP}oa^tw)ux+74NXDzb;C}* -R%f<c6g}6WBvvTI1m%E*;SC-<wGK1d6s@}^${|Z(j0Yvk;gO$aBPaJZ(r@$S>SpPQGa>h%u7t$LzU$> -j0%Ouze78kXZimmKAj0i49c2{C5<J~`eboqDw_gcWCiBgNRXs<de8En=Gc2(9boVA(Hn$wuA)1VZA(x -Ped2xSn^bwCQ4;2OMFg3F4f2_}N50cV1eLIkgWm<ux~l+pr;N6Hx%v);^S-|!(0kYYqoPtqNNHB=#LF -R?`PlF6trT8)!!8zfeo)XQ?$?KgB1cFoo}4tBN+k(hzg@d*k}$9aoN2}tNsqB%o4bwU2cVMzoyva-s< -6hqyJqXC%K3C(rNM5^&&QTzdLPI!`9km>*}j&+lCgoCVvBuEqU3!eL3Jql0|&H3A`ZX$8jD6bENN>xV -#%+ot(Mu$T;$Qv)sHDAL&#ToIi?(jybdgMjnf#H{?2Gs<^`}N9%f=Rgn*-iH{0Jg!+B=x8~&Nt{S+V? -UTDVx3#TcCHdx&_nR$Y>x2!u*US-q<K^+}Fq3F+RpR9>$0+E)QXjzwB`f;u0e3mG8=GgE;$fcZ>-}9G -#vYCTZALo;?x(2q%d>w+%?vgyyY-g&-%qm>&L+CXyZ#&ec|i_`5^_Zj*Q!M)p~9K2!0{g5E~Qs~Xv#L -^^`62BA1tYLF4FMs*EGsRsc0ySzv?LJ2X7h4H7^4ueAkh%Ew4?e@akP$-iq7Ehe2?=y{>$!fi*Em=Tq -vp>HG46NK;QFT<|cv(1;X^4-Z!>2*3ALRXU4AZO^pR$K0FD8%DflL}s890M8f)hj<%%cZ8ll=K;k(1L -h5Saf?h_Ng+Bwe-=g{+mBo9>{*y&%iW$T~L%&rh6VfS>XZCx$lJ;}!=e#~iOom<00}pCLa{obfk_*K^ -{r)gvOLC=&~>v>rFJ<P)aKnY6VaNABsG<{&cm0Z_)%bOs1|H>F%ijHXEv!Cch7-7hKfK$jjdKDMvP&f -)IS@!%}S!`kMqDaaT!BNqiic*6|;#zTP}AaCq_L1!(^I=+<sn<>(RAvn9&gQdKS@foI9-Nn#Xj9gFIk -UEFnC;uW^>KF-=q+H@>o=4csG!4kUUWfsrWU<rSMp*~rtD%Sk3E-P|t`u0LEuDD8h5zR)J(q>~Ep+fW -a$@2A<u^>qibe9N-_dhmL{{c+%xd=MuGB}okd>5ML*nXxQfwYB_^#DW!^xr)!>r7I`RWgR9@$(R6=7v -o^p?ZOJ5Ux^=vrSprl!aO4Rc+!U=xp6S;cQKvsBap8uKr~+i@!_Y&)Fw=(kMn?yyaiIN?2TTvRVBq#B -Z%E+}i`9a?F(b_k3j5h|hD0ffN@K)Y&M%9w_^DkF`&^gDGdl;oGEp?<F$v-RhILdZBe2jt15#8oZKsv -;tJFlB0tFACT3un->t8GAk#)#^QKNUQfVJyT4?BxNtm4l&(7+Wn3qF{#si665l)08_}!>W<`~ipmR6C -Id++cz4846e1_ZpsLq+(Zn3>&H)4{%F?mEc-#0}X>6l~7N5u7KEs<f`nZmk7oCRhd~Yx=^gGJ4&|q@b -1>#us9q}`8zNVs%K5K=fMjsB2ASjS@Cg~nc5UKIOQM8I(zvzXmR~WeA^pJkPqv8>KD|4o$8YxtrOaY4 -uBjoB*FB$=<_HWONR;tX9;qnR=N@uTyCBV_`b9J5Kvb@4+0jfv=CJOC;*z#Kdg$eeokS;IE`aCrob`F -#3c?tZ~H#>l(!&n~bC=1_J=p~97!NMa$2vZ;w80agS%X)^;fz`#Tg%MPguBWUcV3lc{ZpD6QO&sNN_9 -G~P(;9zbjbc!nhy)7b{}8>-GgPEuXi|EeTf<0S_-7?S`=nT%;wD_iaeowsiI%BJkQ(VvwK5qO-D``Q_ -6ZL<8%9I%`p5QIB;h1AF87Qbj_NJq12j_7@JH#a9p?a!PirRL$}0sJI~4GztMBP&>gIvt<VuQclIV#m -`)Nu31S`#`mB$zxZY|{8H!$EEFxk)dXcv)7nQr9~hw!YX`ga2?iBE^>l|3dMYm-kA+{%27q1!JnI4(_ -pcgEQOIGvLj+o}!60_?8UE%bdxvNhX^a_M(?#NtKERt7<M2ZvKHct8<*^k`6ge{P#SLCuc#J+QY#1!3 -lS2I=;{GR`<s0%%U1qzmWB0)f^!N@D~2AcTb(92$x?_Vnd4$FIwW0-2`jE<Sm>tqYCu3NkDzeUZv?E= -ff^4K7PwY=lcIVWVP}7%xHFLjS3%e4|h_cSLFVJC8mD$|M#TK&ks&(H$;DFyIH5Y5>u~NsWYAE|kT<g -CO~2?X2ii4mqR3r*6N<O-Cs!S2S#AOapT^18sA+f1<CN2&P`J!BBM$2yWuq&-ZhnA}C2*Ie>PLd;9CF -TmffjfX}<C<V<s&VqB1ZTWm3knNY`F{p9Oh<!<WB2c0_`-+;J;ZO~yUD3imZ5OHWzo&oRbbWn#so;N6 -*s-A#ouHe86T}9-}o}1>pTC%2tG<)Xe1E^(<H*?1suY{B>7|^Xy&*VZzJ_wU+(xItimVxtLh#}R*K#Q -fs>p)3aNzO|@JAA;@(Q5;GzTiN)?Q2(r3)qmA;M8Mryf3^Kj*Ve*F7W5tlnR|8K`ZBbZSIhs(w3k~CN -Cp+jSs%zkh~)SmKXFrPG@V5T3y3g<CdDUF^eqOKThlRpQtMuf5QxkleTTzL;@<&Ev&^gQ0L;qM}0@Fb -X*SV@`btitddnhN9_l4+b6JMB-7OP%T3aQCgRYglPLW*;W3COnPR^CAtWB!FtVO$>?Xt?otfOqoPN#P -$$w>kUwt{v@-L>po6JIJ@k~?%ivc-f&BWw<U$$^~NtW4~7|bbjBE?iS0~M5~-1%wCsXHEaq6<8=`YZ( -T>fY<=ECT%M{%Z@1;&OCX1Ep4=Y4TQa#E0#Nc~P#`i`QiVgJc?%tIRrgGw>)Zxa0#2b6<SnLEwXOim1 -UmWKDH+hFY!9=pkOd@@$9npGVx~zqUdxS>6N)6@b$ePr6J=gAT&?pUio3O*s8p2MXflsBAlR1()*^mU -#2ksuLz=4SUbPaucdZfnA~iD^1a*aBP)qm&(#}7TNQYM3LET`98bOf(ZZ)1#<_|D?Zu!3?`n0ba|v*h -;B;sn?(0FW^o4c00xX#BG9lqFPRk(QJ#RL7<wq~8!SU&K10@X5YkA&Kg7WH@m%<Sdizy{sJ$#7lO#mu -4{8dgPDtk_`@nx&sjL@1A7t5G6-uebJ7sctQCGk0rOJ72C^!kf6ATS<hNp)vDYL^T#1Bq$Bt+YQ1j6; -;!VMb5!-F(*Ma0zSoClRTO|#!zNXD<d>BLpM!h&%C+N=*3#B@5Qvh?EqpT2+%XLRY%Z$p+9EW#EH1Tc -Bc(w|B8=&O*9N+XzZE|>wv$p&oClbacMvWw&3A@v^mRZEq(cE%%O#<{9y>T<ujx@Tj!$^_F4Cw{NaLi ->cPzQ9yrZ|bx~7aRvqN_FQYjw25&Ugw7DnKI;D@!*eS38Yq~T8E>hqr_pOMKasdjrs;vV;A8AK+Ic=3 -=^xSGs>@;PNU?dn^ZChFb$pr?SES>6JHLf>In8h(E28oO|GGzf8|u7XC31VT%L|om95jJ<od<zPf?d# -F#GnRxeOy?{FaLf&#{>FD_a_6W-jNc%A$hP;r_p78B_7*iBJa~BSCrNd9twaZ^@zJR3yI$Z8{6d&)|( -DZiMNncWKEAQpd`tidnuCOU*BmWB>P(oj!RQ(2zbbB)<bA%}tgGR@ToNKO}i31aM6<%>fBS!K4<!-*N -R-yVVx{pR-}2F1)`|6J@D1Fu%}Kk3YU7k2?CV54|Ytfw=z4FbgbHgk{@b8ENHB*5<*wY&8$pC2_V5fp -;ssTj)-W_W|JkYI%j?)llvuc;ELb@S7ZU<~^Fb2qd)FYf+$MFv2LBJb6j!V6{^x6WA{{Ha2k!VrUSKC -hXhI;e&Xjv;7BIq}_MuFu!O(=T4+b`valDbwQqCE)hRO&5qIwcGa%X@IjS12kXz5cUP6fx*AU9`0NV< -evqq^qQ;_bYluhm4@62@XgQ85bPkLUmg230MnUP`?gzQclgGE3TX65koznpDL*^3Zwb?l!@UUh;_qN* -YOg**hc$nHmc|BZ|E|j>Uz`ICpnLURa9i`V7w`<i0?@L}==)iRS7!jN!?h0eavxzD&Zw9IDH6@{<G*C -qbuWGR#W;s~C(NuVH;Z5D`scJDMj1Km7Dc7)SnfXJ-r?iLRtrC9y5f=WRsgtx@sDH<f@x&=LewYVV=O --=LVf{?x3ABd-*Si3{*@#o5=WDwK=+7~qbSLCSUDt2c$`aJ+uQR%OizQ;!Wme3Jm<jX1*~*+D09Fu~J -aSWQVf&J|VYMfJp?gKh#Q{KdI7)%P(6#fKzIx7ZWzAM4&BNG_&U&h1nzbTCxE<-ODTX8y)n)K$UanRY -7fF`+x~7DpI~RTNI}IzoqNRTn1=8KsPSI5Ql16fP0>qIKgvpYnT9VBjgPdiWl@z{ghDnn2%{ESVQ*YE -YI=H1*Zp!lsc+<TjUT`#@*QMm&CEYV}%buZg7c+R?ReUcAeP1g5C4gsOsY+>-JG_UDNJ$u1V$-;3Z20 -5Xl6i@A(>@TqX06J|@JyMA{zArcB<>+PI6D=^hH^#^MmdBp$>+W>bXU+?-M0!qJzZNu4cDDD8G@M0ff --=dQcd5Yb|NQLpF3q*+@Mn0Tn&!aML>$&ufglDf<0wFb52>CCzoC>e~XOswX^FeE*5UZBsu)Ui_W58Q -p0B$He3u=iCQRbOq~cGp~4*TLl`VNJS?x>I8XeM;vdJMNOk<2e68k?8~GtzKj+k*53c-o!jVi0`u}vm -FYSis;%(}aEhPn9NBDRagp&(DP!+^stnjWZYwFDs>>ZPY3dUBr%+4z<@kdwwhD$tBhv$h@S&O>J1;)_ -0jywpdt6z<KIq@|U2kT^YGBPb&zMg6pEHZHs0n;jTV0r>00G4!)sWo`zBq-x-n4NT~6z3y)nGe*BLQo -!>{lHlku%Qb57|1lUp`C12!Dq_k`)*+|PJZRZnWu+@G84^*DDzFbhYhj3klD6;-+@`MK!Qzu?}WE&x@ -#<v!(<71ii2tbX@TKXR&naL;}3@p(L>ug{tb@)8Hb1!G!J1gbLm5sKX;0W39fXOMgm#F%aoP=Mhng{P -WfkP-tlc|3>(mQ4-62BQczBZ94I{CbAsldlx^r+aaNx4_JPAt--8&~UFtX8?6&rqVh}FVi5$AHj7DF@ -DHGXrx>RN;{L-9nC%qWkC~+kpnhEX$2hR$tU72sN=F5w+s&hiVQb(naE|Vt@z+~}dAx&<)E)lN5Kw~= -F5-lndT6T_~gcuEwvT`h(vKx%WLcFw1Zc7Ra;h%#FgioBEGbVG#*vMY=uyjIo66J_opwBAJXlPCHVOn -)3HBxW&1h%QF$d*4o`Sz#prb<%zwNZleqrV7LAx$o?(8nkc{80&(eok=?n~ZLlNl{DAbl|YC`02-I5s -1M;>4apY^W-L<xWER3CDTvzXLfH69M68lzv}PmMBGh-pDe;rM?T;-d1hLvgFqRBwk$Rc>mKxXOg2)<k -;7VD<Tn>k$&=!yb=Z1X9!Gu|?$p5RXC0+7c9$J~CH#M>PDQHhh=y`dl?oMl&68$;iApAY$RVZUG4e3V -9#U=OIJ=>n(2t6adb<yaiXP<pzhRYw@frj-)d>&F>-;BR(d!aLNfUMJX4-O!+Ss9sq2}suoZawGS%t) -6X}>FUo3z*XG)>tA={Q0{n0adKsIUw9XRH{=t$APn78>S`J7*x1Im*U0Tf-@i8(Q%2YM%JU_e|_}=WV -%?oalKwH{fY|#r#1Zc0&8aUN(erEkm5V-=Pl%AI=<`$H9j<UZI3(Er^tK{Dk(3XWCu@{by~zdrv*^Zc -Qg1R~>&V4w^r2dM@z|Oo4o<E|EXvthA@5N^yKU-epfyJ_BZ>K2)AjtXO^VTlNboM&ew*^477?kvxaDh -h!Tw$}jmC1LFJJGT}9q(iEzBD&-!3OkrnJW8d<R`vq?;Bwclt(1um)uuyezb~WtmibheicYDWQz@P|* -iX&<nMO%pMi}`gW)o3#S>x6Lz(#l%7!($#lbBRuycebPf-_Te7Zv7nqRCY<-4PafASX{xmf5_zyaQkR -WMt}I7VEe@p0${hQNnk4w1ki3@k6`el3Rc-oD&ETSNxs9M4`VeBXiY!H2E6{kYbD-VrJG)N<qd!E(`x -vs8UGrXZ;HhntNem0;B<X;MrA)NLDR>ObAp<W=<2DydJKZmlwLsZxZWF`ihfx^`+1kR7dXj?(eyq+^J -JR%Xa&me=wY<U(lW%<TAT)@D1y)1@SVt%*iI1Pd1FtUmD5GJ+vv+Ewx~0pKOGvHgW&YJoU!m4{@8%fV -I@#$BuZ?>c+z+KvRw_dpG0BiK~5U{nhE8#1W*p)I0poO!!z;1hokqRco3r*eRxNm?X&@slNylyW2@q$ -llUao_-EAdXL1tUn#Zg03aJb>fwPg^O*C+`mg{)!cgKBmOq6!!m)=n{$B-Q9W@+NbZG&6L$<%;PKo|< -8`?JNh9iU8-jJK!90TI>PbIv$%CR|}k(*ne4R?ADt^{K8CpogyEjby5=7aNP#1eu1EIVvQ@{<zu}lQ5 -+YXyf*sy=tm=`t@X+JUy6&vR!FGC&_pXcYFfMIW`)dMI)wy`mj$yN<1p*=G#i0++`-Mhx`z!Z^6^CP} -R1AIr#?osu!C2R6ShX)1qp)LVb8v#n|AbfvP^3PLTAyGlRfG@r~;8;LC3mjt}hZ_K9ve!CF#sI~C5IA -@@_>xeGp=(CPJv@#RZhE6D1`ovG;OW(=<Q>y4{M^7&9pjM>mlJ%YxCH*{4Fn9DhqsbL;PtnmX^=&HrH -7!JzOU826EK36qd9z1wpW(S7F-F4Fx#aY=N-_P&eH7%mVMr?Ns&1{ovm>^t#=CXg&3xC90@P+%;O5Ad -K!)(F8q?!%P7ko1jHA<95XheXGmkS-_RM48`a^LD(D{E>ayFcj~KRUCiMk}Kx`BnACG3Bj=f=6a37n- -O#RVT=xq-~A}b)>v9S12iH#(KLgUTD4(KX;|~60>k7$AL~{zLVm%jFL<>#8>m`HGN|wVAYgdtd8uKw? -#X$_2h$w_R(@8-wgiXgQZU-vp^XCj^KfU!Fnl8zA<ph3$$arVt;BORjtIajm|I<n?2a%X(4iInTD!-0 -Uo(HL02MfhOhGb*9nKj-qzpUV4R7!9Pb2X*<o&v|5Yb1GGz7|)zMqrcpHi@RW*{4dM#lo1M7z{jOL*+ -=kVFkcO64;>Ti9Z{x?ud0|XQR000O88%p+8mqlXa?gan<oEZQB9smFUaA|NaUukZ1WpZv|Y%ghUWMz0 -Sb8mHWV`XzLaCz-mZExE)5dN-TL3kJ{7qYg`-dwEc7R-Rx6<M|~fg#HhZ4;qIfuz&;-|z0IH_A$yI7x ->M69Pvf?~eES97(Y+m9|W(?N$`qK)BDn*mHX<xv2+K^H!#IC&fD0XtifR16-_{`jASQt|gDy+;Z*Sel -M+1MJgk9btokd9A7EQI1vR<!Bo6gIhQ8R(jpgmYI!YhUKooaQNo9M@&N%-6gM^R0^Wy64^{x>K}*9r1 -|?P{FcvZR!FL=R;=auqHerw>2+(s}vsvxJc+2gA#=;~i(mhX-aS&XnLy<Q&7$C1*bUkS0(s7^_9x)Cq -gI3T5==dq!a-gZbf9;5(FRic)knyin;-}I>64pw|We^0JOpPIz{-F*!<I{k_^HZr+$+bPwSI##K0}vW -6H)A$=*M#0lb3FKrMx#q^54teS?l=Q8xt2%FBjk^m*x<P4ZwylfkAb{l)u}L?eN=Y7hh*Awh)e#9)=G -!q<64Un%u1SMGOa?rAb1*eVzWUqwmyO&ZBVVWV5!b_;+BJk#^TVgSHCUTM#wYNL#_lZ?Q2HC_LOqrZ} -c%G&%}m2Rq10`E;P@qJU(8J0F_7}eRp;*6VxUol^~m^%vendVdR}EnnKkgLcBe2V-kFC_#)&JnVnsv( -(v*1_e(aLv61C>_B&i<)Z|cd0crR%>8$k8WmDKD*4V9Cna&IiR(1<cPFSrblZ`0y3Au3gBbMsKstGva --D(v(KVR*Hfr3;wF2ynh9w-3CD6=Y`!TJ$|Hm@uM&lBrgSfQ6etJRdbP+<5$4OK9nX1g{Em?(V7aU+X --<jZ<r2XB}QBiUq20^lQTl7vlgF=?XatCgG}UL~mdl$`=Z%YhD~K)WFd_eUtSskcI$3`qu%7#i+z;tD -`nb&B{C{126h@jKQ$mG~0k&$ud!bCIOVP1OE5<-Y;+Bb^~0tp%|F{Djbi<CYR1$oI;)s%wPc%i5eSA> -de{Y_HUSz9)~O2ni~R1NSD5g3Fvy7rH+pR6Hd042XF>!=Gt%V^j+q3zenv0;D|v8iUxN^aLaUHZZUjD -XsyQbUIlAA-}`9K4AqS^9@VcpO*`0^~@Z~QUU@&cY@u~!C1EDFzd>D3bKJNb{x*3Eeo@X#9^f?N@NlO -6yShc$a*5Fmf8qyZ0zvsEL?(K)%K=`K<En8DO54(QNJ?yU|^imuZBLf3!KqPFM=+u)aPK#AQ-fw<I@s -x%Qr)hLxWc08E|k?w@=rv>#VwRFZo_s{>0M#V##`?`k$>Avf#GfqfeQ)W&f&W<!eHXpgZtyD#9Uyx|Q -=!*Wvx8G{^jZ%=Y=AKIb;ePDHPS;LpMi4QoS+8|-kJiWhs+4^S6FwnCL+Cr?FzTkfsMNE~i0EQ*9Jds ->zp_~6*GT9Gm_LJaUh+rzF%0P}zMdBw#43Q1e(+ng}h2O;yso#0#qCG6nP*3RMMt^4=1NIn7+`CSRj3 -8eXyj<WSK+0NOLR7d-ImaL)+s_P~mpyV?0!{e%KSw+bmq&#|vJRL@Gn$FYr&H@zGM<RX)-N=Nsd&X17 -zF~6%#fL+Z)`=TGpYFmNM(>D6H&SlGxkSQ}^+;@Ns;&7f;2<`lE$qlG`<~)GrR{8QNl#j5mClt}PZe6 -y-IH~!yH9NG790lL@XK;<wm{n=0Y0Ne#me4%Yu+G_*cM9je9A^Xq1$eAf!9jlR&3+sbc7_b0>Db9*$w -)<x@^dpfn?e9xE0m<*WLNWpHp3ch!B*E*l85%ia<*uvS-{FSsxO5;Nx!BIyY@#^y&V|Gj6DMW<!IK$L -1H&%>VRBv0!HPi7XnZqS@)tI2v$U?GSfk<T_T+uLfc8=t-wauW@%u+SAT7ej2)3Iz4or=Pu_myPM&UK -h@gDrQ!D}H`uvfQoCnH=@F4~CVHWwQ$jCRt<C)-`%C2Q>n0<u;1_qp@BrL6d?^}$p({a{gV*+MZ`9d` -RFbM)NN}Q$1B<@_P)h>@6aWAK2ml*O_Ev%-NU|;x000F%001KZ003}la4%nJZggdGZeeUMY;R*>bZKv -Hb1z?CX>MtBUtcb8dCfa*bK5qW-}NhSbUQ2U%2b?W)5KHd&Pm+HyN=_Dlct@VhoU4%LQRo6g0!ve^uO -=(0)QYz$#&YCyG)x%Ao$>Ue}&X?mF0z)mFc9&vP5?jFC^J~uF|>vnz;w7xL71=Y`^NY_C8Lsbf)H=S) -MILv0ecHVICf(>%MrSCPiQTC{vloMV9x)`&FT`G*0^BW4TIXhu>VORT!zXkU2aGm)TS%I@FVeTuKY>; -`Q6(cgN8`kAJ!7iwk<x_HJ1ycy*F30c-o}=aaKH?>}E`-#(SATux%d%)Von<aGOM*D5c{IFaeKeJd~1 -6j%_I=~U)X_1usd+I>-jbKyAFj?!*Nz@JYS#~-5CM?iJ-=Hx@4*5<N^mhrDy9xYW0e_zX71J2b$olhd -bd!}xAP3b7px6v$*m+~gduXt6fLPo22auv^|=A}{tzPR4+^g5j=ijyRY#87;pr$HT=fZqx5#IZ`viOp -36>94gQ?mu27aRFLZTPkzeSYn;1tvHhHYK=U*=m>;`%TA|*+AedT(5QU~uuf^M8$~IwD~f;-o#_1Z=; -P_hE1>#N=mKAWjd4-rT@Ybk1P1M?0$N3Y*dqUcU(v-c7q8!+{c!SQ^yc`7qfe(F;azwqG_-><%`)+FD -7sJj;@}Y;HkC8bj73%^Q{-NyB;B6ae<{Xbt%poa5PV!H%{GimJC&fAz*?zAv5?|APD&{<fL22!?9kh< -*06sTmkC%Vs5Q!7SEeig-1)j#z&}sIgGYZ0`JJ+`t5XGhP~#HJS&K=WiVP^q)l|aKfYVe?6w)WgYoTR -P0B;#-(mZ=g7@eP-*Rccke9Qsuf%qX#w4`@F#Oy7=Hd3)Dij_Vb4Cbm>lw-8<!D_vV2SCF>X<bS^IC% -8z>32*eF$n&PD=y8lToh6l@mM9Q0Ph4u2<EpKO97a{vlMK<%+Zg<=^B{9h=5^-mi4?Ki!x71CS6Y>m^ -#peP5MAT+V!GGiq_=C7DecE)J&vV(SXG)-V-Ordx4C|M~Ni<mrB;6$V7adsj2W?-A$aMw=ynZkJw>+k -OIbJutla>IbVQeV_HL&reZ0VS-uATOaW-Dl6VXPVx}2LF)3Cq6>>C5m~{;o=y2?G_QWd*L@5nG#~EUg -vIkcrDFyloRFit4y@4E;8tj}H6rkuzjc4x(PXa`Y7V>tLsEI0o2iXdhQ6PLoo!;>{g}BOi8X|+Y7%;x -JjrY;JlZ$spA78(XPLF>&KJ`4y=c5m2Cucu)Ag0N?_P#lO_320J3X&|l(ov$WWHer7(bK2TpFL`I1rk -`Tv!o=cf~aBlKJ6AaDoMm-5vOxwp2*o8G@ua1a~Y>_A*J}<TG+Up>u^Qp9%lKRt&0G@tXlzz)Ugmvat -S;Njo7WIPtGnr9-W>>9KtX7z#?B)exXd&Ed>l427o1vx4r~!Q*imk`rY7?V948vTovM<a($fVSzZA)W -?Fd^v(R$jPz2xL3I&N45#(|jff+z#DIf?<?Ta=_bvZO0Qp)oMTx1{P#brZW6?we9NeJj(F!-hlDuVzG -&U~-Ps=!z&<`O<lWVi8lU(ABRZ(bDpeE<Q<odnySJ%uw+soT!kU|*RU@>`EK;Q9>Np5$0=UaejrR5A6 -TcfR3IJrsrGj!6M9WdD~-S;HhRqe%>Vy36=htAEMi8F=d6R+*uEHVx+kknuLA1Q$SQ$5mzYgVPFj7Wj -RUEhRe^<d;D$tcM#6zgY_2<|bZ?6N---Obd*%kYEw9Fo*72K5|t3)6B{+8@6?w6t9q?=5G5Cse6c;H_ -h_uvgcr7fThE_fyY3Ut>d53iQd=Ab1KIwPE8irBGEVWT*T8UNa7~L4~jDgqft8i^LQKpHW-=<xeQu3O -q^xHlWY<vZF~NhR&QlPQ?W-QOgvc{qY)v-OY&CQ?0GaYnrvSF3%>T~(c`}#>~s9sN9VY2__L2BA!kE6 -1Ay`-HUP7Uz!}C8xCREb(<wz+tt34G|3NGRq^xBTur6p=QKnFqCF}p}i7Bv0{7(rE8w?ZzzZG@@xt-3 -$4disWgw0@fCgZi}5VUOkD+a<F$R{}|SPRY`$~?BA6f<ksgR%2#Y}DsO;|=^|x4p4BHJr*)m@KD<SVD -uJH88sVrf#oiw}mqWB!jj@8P(RhTXVaW8^FCD%hAowg5NTYB3y(}mSM)V=r;7C_q&lr&0`>}yTP<U_) -5#y5HYSGVU^pp{=#l?dS4Ya=(J}srg<P!dhBI>NDxMSn+iENR;L{t&|<U#<4h11d_{ew$Or1mH3pafH -cTi|11~scOf!Ilfn%D{4jnTD`iv^P%%)``>skg;+EuO?UXVG5m|=fHW299C>C*6Ud+4quT!@zDg47gb -RB+>}No0n>D$_RM>SG=aY#I`{UTe<vby!(n>QWI*Ll6xw_OmB#CM%9FU#Cz@ApJ46Bjz{TRq7oi`H!7 -CH8jR4mr;XQd^$V%c^{!01u+WsHoK8fBliV^b167v37eWa8l?s3kpUnuxkoEA4iJIEYx4|i7tHk0*-n -yj3Qik%0=lGfs@s9FiG+O0IzlxE%ao*SrtAw{-cPI;yn`C$^S<qy?7et$@WSBFXw!2r0Ja`#8YDniK8 -c+PpaGaN3cC+@SgA`0z9l$z+Q_9QvJaGb33Ub0K{R5J1~4d5hXn?Jnmz2&+aN7k6}2rT3QhrAm-e!PA -pzA_O7TJnM;hZpw}DqZ=UGwC!)kja*O#0K$u*}!uCpbaO82TPi1ZR99K~ZbOX9f(IC-HDxj*{F)ex?S -%C!Y5HUE9d+L}yFV`+ms{4u(Y^KNkZ=BMKi7bow}3<dVkjlPzB5bz<rj;ZV&fXbg?$VMJfcgwyPihq< -4-wf|j!pI&B)8td9p>=Nvp~4;bMxMi>Wxl%&l|by4Uggx*N+wedv&6%O*RdpAKoniokmYwAY5Q1+Oc` -P9Lje70VZuL&JI+~eNKoz+AO=?|6dl$cj;zG+{*eCpawxiw#J)&mT2a)yY><RIAK>NCz`?WWC8zM+EP --6Ybn(M;3P`EEX)gV>k19)DPEt4uHKvOU<$qM>2_PNZs|$DV_XD<9$hb8a47}*s-cQt?L{5IID>Wi)L -vc=S3q(eV5%ny<&wc-`epzK8!GEXD7aszU+7qYz)f3irZuy4rPq)#4>03OB1^tTPz5w14x16aGbJfi8 -_ba(ug&9yA0D)-~zP3G5wuzOFBFIDdzvk|+m-?W{I7dfO$lHP?_19`Ja7fsK3<()t$6D^tO>@Xi!3Oe -5j763eyPk7uxNS#60m;zZG=k)OR8@8c?L*V*r^l3~4aK*)zlb<*EFz*Ci#D~bmM=SZ>JaE&5dI30nLT -)~Pt5BJZX4h^eM7cYrfQ<WJV&Lb;RET(|E>U(&JrANwZXoJaCid8;sG6`hIK9K_;l51tJsXB4T(o?38 -@+q!zx1nLWab>%F`O$hxSADh*2N<LonCxYHQni76W9kkjWgq2KE0tdgvdM##yT+`?z#5irO&V%(S8ws -Ee*C{8awQjWEckT=lB-2AHyaH#?u6LCA2~z#sCf^~i^~suUfQUD>O3;Jw6{22SUgA#=(lXr_vN3qKJX -aF=>C@&IxkjO_+0V37MRq2^MI08iyL<lV8F;_fx(ja=x<8g7UV4m(m)t&IurdbO@n-B4Umid|r@fg@I -obEk1R$JE^eXY)!Fot<<PA?4uIvVZdA(RZ|osTxf9-@V6ApFMtF6;b+1ts=xB(txvylZbL~KgQBF$Z* -sWlE@{bFWjslDzMXyZwIyAcq}<c#o_qOj=ua2SKBk%jlHA?A-F;~-Km55zGX9_7wQ7NCnw!Ze+zI1*0 -LYSs&@B$y=>>&-TLVl|D#cDoKD3tD1ysjOf5z#f|&mt{z7`<fn(J)8{r|%YE6g0S^}N40M&x@(SQ%dX -Ze>Tfkd(JfW5XeSs)0Gy;(>ApPNaK)j{wEGtf*Bl&@+po;EdVleFFXg*!F`)4Xxe-IU!GX`mr*Qwe>& -d6@c`ckb4rO})5-_Pe#@eQF!0gb<LXuHpMB?7OW-=GdO=`yS7f)3CG1JZRWXFg+!|pym>lN)S7|^9W( -STHD;(*r!>@y$EvG0ABp9Uo(TMGh{nqS{Bv(B%a5Jblrx+YAm&>?QR@bive&RU{y$6<BaVXQ2)$L?1( -Gl3@SE<1^Q7lqv0kpH-o_}Ja{&rM%zgncv@FTY;PEg8_3?zEb6k^bZ1$0OR4#6+ntdYo0jFx`NV$=8S -l+a?PKK~#^H9|tu<Bew5`kK>5b``k&gQ+4hww`o*lM1F~fT-FKV*dAw*p^Rj-&0nN{?ja=L$j+a<K!t -?M1UZpHm>zQ01vx6>~;zcvA~hK#Lm9K5pm(BO(Y&y-qu&<3T>xo7W-23JFONTLliEzHam4caAUwS3Hh -sO4_#1`rqTJfL@SWiRDS@M;mJNOk!p=v2+*ZFh)55p_x5z&lWOgT9lCJNUHix?Z=pBb_PqmxIG6muS# -ks5ANA7tJ>|U&6MI3tUhVikISGOD<y|6I=qjv9G%U?R)WrI%FPz$CqsRTM+8*oFf9P9n;obYP(e=4+} -J${mM8`6jshvS9~MGs<rPn60E?bUjcX9OgGw_#<&<v*;T`V*mG@DHo`orEx)cg=I_ZbKYy5~FdoOIL) -DeS-Oi`L?r^u>IQCSu*Q@1BUN5x8<+M?Ix7_Mefl5?ny4DmJiKX5|_kcBp<i@_<g{7GK%#Z_*X(YlE5 -5%G&J%6&(CO0FAyZrrzA8(r&?O<yIjk_6Yl6hd}`TL8LpY7ZiQmkC9kdfEf6$VkY65VSR3z=%b6~6Xt -#?`1^>AEs_JNTPJr5h3not627N>->nP)y#~o@b#X0N<=~g{?1;G+Q^e!qf!ed4sS8-5a3MNiH>J?j|m -9AH@UL+D7(^-oZG@#)IdR#|JN-9!#h4Y;dZ^gQ~~0TJN16eD{3+6rR`RZvX((6*Y1;tkyt)QpMldrO- -p|f+03f|EL)o#kUr1zwT0*8s>K?Otb$J^6iN(yMaC%Ki>Z`qr~5?eh+M`#>`!sAU0ZJ0Lo5HUQ=Lp*D -!H5;&Nxqt>Y4BCgZi|S&dfARD$*E$3<p3*?YXi#++uLNh#jN#?nh<DX8TQC@7R}nB`^uolc$c>3OWQ% -j5TIcUtYh!OY>8taIk}N3_w|bD!?p->bLw>Rr9fhF-Ie=k1_*tewpfKS=8uEz3AvcRl34Tv2#$bn99h -eqM=J{g$C_3Q!K|EFIPt@lWvDT!W#XbFf!n_L^Lp#(nLA7QrSsx)yG6sQh?C^u{%%5dOui<bK7;Osuo -A4JOtYTnxtIEr?>A%NtB!sN$wC>`wcTrP4$Rui*j8lTy>9u?=L==9Vn*!NPplhkzvQtn0gH&mJGtVfF -eAE>oI}O}Jszez$+-umagb<4JFaA)aU2S*|u+M6wEJjymI8DtP(O&Cwv&A4A}+rkHg%VW!pFJwn^~ss -4U7f~rlEs;;=#4fnd>^%i%pcEyg!cB7K&w<dg5Ll^mu0ffKXn$sVe0JH+!7zfrG<p8JGulLSzmdNZ1y -x-1v)>>m;Z#OrPtqoq7z3tPOAmE`C2e^<k3*B<rxw_g&OmIJ^=~BD0ZHyTNffpj|Z%{xjxnP8};OPA0 -KGKzENdj)5RxX;GCT{O&RPnxX*MmbOb+NFwT5E6{>a|OR?6p60j-BZ{Bp_Y^T8#@@oWar!Nj{ivCo;V -1?pBqeYPD2JoZHJ>m~)~-Lsyq)WlBlcXyl0j5NBJ*V;9og%dxmBBHsz1ey3(Ms&16x?Z{6_p_X(Xk^t -hBM_?dbGK1IwegPe1<s(e>4k-4yjNqT_;2lR~ANcv~2Jg68dND2WFAZ^<ER}L<uW)!b)##@Y+v~?2vu -${p^#zMx?gl`z$D)2RsA)>D0fr{s8(=F#u{W3Nc0$)=-Q^UgC$M+ll%v?za2+N~W~-}lC;TaXW)s?d3 -=>^VYyS3Ucq&&EJ={&1(&~QPH$U##*9!>m(}zgFp7Kx$Z2wWxcKK|a^?xrPQ@`F@KK}+#O9KQH00008 -02@m7R&}Hfv=Ipa0Mr)%03`qb0B~t=FJEbHbY*gGVQepKZ)0I}X>V?GFJEM7b98ldX>4;YaCy~OZExJ -T5&pivf{;;Io61@Q1@4M1+~Sb<+MsCy)G3m}Fa)kd?K0MiI+F5w8zjH|p5cpL)^@Jww+4Y%B8S77;WN -(+l_beqRdOp;YuI5Yv|tCp8l~=7tu!lDTg$D<m~4&ZO~Z`s>pEk?mPwK<7H90kPC&A0)Iqje$nW=}wa -n~P-&AZPm==3=FDk|{sP=+&N@8BN%+kW%_FCjnvp;snHMDD4+6&c@J-oU6nKwqzE^lhq$?n{+t)gwLV -!aWpk}${0hU^>mY?Y;bd*cMLNvXOc9>@S;`_3xW7}`;8cb4t=y?`~JMQLFqOjB-+Xz!&~E%}neMQIrR -SE?0kbM!7n?QtzMnw{Lkk{ZUq(l`O{Fn28k+gaP0^=h@1cGqum#A?+YJHCQvD``wG%<7Ln{_xTTo>VI ->w-R9>Kg-@2#DwvdcGBDjNI2QUj{KY0c)$jTF!bgNtB>mi!@r`C`%Y<F6lqcnkt=q*yi1n3Kc<3QNS6 -!oP>Rm7^o?6_rM1!-`^n;THoX<@ed)D!+?d6}YX)q#FnAkZm5ER0Xco0r`|-r`a*uHP*;fD!{9@d&*K -t0KJzC|5^9aYF;ri9zuKsaV{Qc_R*Z<{;_=-KpScJi%e0p<u;qxIX*$P{9N4ryP(a4P#x5tj45hPv%& -KY|P6&ZUUP@S=VwRp%_$&Fq3RdiI?-U<zYe6K1&`;|L^jEO$Fx2MDhM>}9VNPm3u?)CeR*UyUs-?j&W -+WWXf_iYQ)i@vRdF2?y_V!q)<Og-Q8&q^12+2ZfL&;-xLf*>F?yNp=KA^FygrA5*5y(o(1VzH=1J&C( -_G<ATYQ77owAai5Lb-iXABrX&?PVnP9MPf0oH;})Dz&oUXpVvy+@6Ai28jciwN_VG4Eg!zO`bAK(MF2 -$Mkx|sL5$06il3o1SL4lNH<kzjw9^z2?{U?Y?Be}<zjD+iteJXtdOL`jdW_*&m!x-Yp^%h2r7B~R<N5 -ZD_?Uuazl2GWA^>_?ly_5AAEH^MyeUq3{%g(<fq~|8NxM<Y{9o$7(Z<E_#45p?grh|%Q+=l4;sgMr44 -um$Ck#}61xp=x9L;{z=<q~Q2TF_s|U~?^~WXDdJ9jZX3gz<K?Wz$z6S=m-6>K*aAf~EyGs?BH0kcc}2 -U#tA7rPvEB0pxl=XDfaF<Oi-P7t`6C!@wK2W&)H@qN$|*4rJB~s*a+Co5VwcJT-ZeJ=T=5B>#+Znkti -%!7jn+$kWcd*O5-=%5uKk2Ul%APtxO*xnr(GQ5OxOjX<si#?mC99JZ8*qZOAQbT7Pm6c#~61WTnqjzO -J-G9u6PS?bPco!4{5-o5{DwWi{4DI$bPlvYO`DF4QlS|clQA?g|xo2l9x6DzzEtfUUwu+*t=bVy+eTZ -bO1>NPE_sc_5xh{E?W5s+sL8$tM(q0Kt49Lqo#4{6TI25$Rig-mPJ)H0J#149u>oh4K|JzXs`Rwp!e` -Gx*|4a1jT{O{M~kpk!3i2@qC{6c@9Q6O`-@8u9nKM+%R8sRa?WbSofSrXL@BjLfR^3OrS*>~yBz|GQA -m?L_}ocnQe^c3cvh`*Z&aR$?QVxt4R6GuY&q=^`<_VPCnAwUDa99>W<kvkD_3Hv>12>Q<=9H=8;rW2* -CrRywx_nCtYW2YJ^{)IsKJW|WHeK9EUjVLlbmAS~NzqR}hyoBhKqC$Qn9`^)8Wp}JY7ft(7)8Z9$z#~ -SMIYZi5fwnZC8itH|!J7j=nipgj<FyqL;EzN1C%O};wmGr`NAnKTXlo5*GG`*roDyZgz?lQDc<35gO5 -0G!{0q8U*I@(L&UoL*Z_s_R&~tktiy%rS<|Y(A&mP_;^sl8I*<*QnUU}bDV3X8|h2UJyB9O%h&4-ua7 --7J3?NB<|4PtYU)4u`K161iBOz@fUjPPg%2@$zWmYV0bm}ScZugOkunC**k<abB*Pw1JGdlIVNNy$iz -w5MZr;=A83&$NT-^6SZpp{*E)L&Rg$DVZmHf8saXC|XriTHcF^X9h^KZg41Od}HW0eH4)8^5*63OzUs -PjEu_Wo8P=#-v-OIZ{9+q=6hQT$p2qg>-toG&zSe8e+5NQiYDHt1i7lUFr8|va2@wo;jXs`lZKz56O+ -4-14E7Wfly^nw`x}{VGb_Rl`t{?t$47*^_Sms+3*c6xqjEs1IAl4G~tXK{&J<at3Rwl0^zq35BbjSn= -{_HOOF*7(<<%HZS5?b9u4hEPt*d?a|d?fTh~zGkhKI)`)<J(k(zGBIK^rNu>Y(PfE48jIMW^d!NW>f! -ZH)TX1D;;TrzF?!x|5Yr`OP2ToY>fB&;(kK^uccLh0iWWy9wid33onbj-&NJ6Z0SqGB{Gm(a~M^}ZLR -zM3i+;Rn)}_r#g5WXvuERF6>AD&-O#Cr@pT9?bl<!pTnV@Ti$-rwsZND)ir0k0x8yUIYO+cEX0fhn?C -O)8OfN`q^hAI%szt;CCV#vuEfz9^H6HI&`4O+%ad&^Gyt77JIWP+gwk`#U*yAW|7OndvZGxZLEWXh<~ -4o1mIpiV#I6`Qo8AlBH?{1g3`-}d3uSH%LzMfWLtQ@Qb#)=qIGB<K7IPMW^Y=i&?8MgQ-q>oGWwhpTg -Q^OjyO0{?>x`X=?f%i379ikP-hgiFReiLfm1H2<3f$1k0m>IRca)P76MI&x6dauIVl5iK{{?d+*re>m -a$Sf*N&$}B-C1#T!)B_SJX4M>19(XuqR+(*f}(uqv2v70Z?@ybgI8ht0W~&R4yI>B9r<}m-Bl08<t>t -VnslfUlU^Yv(n|{gX^j{detbza0M}c2e!x$t}C|Z<@;+^6Zs#MzKh+h37URta1OZLlB#d3w{oMoKCa% -Xtywueq@KQ8x)geaV^)pGdDpo$_fj0j`-M9L;2X>KH|rlzzi_314F|Y0xy#(FUxvBW^%2eIe%LixpE{ -k)Jxivk_PyARcn;Zg0_LD%{-H1><BM=NDE&w7nJS;V|AQ)jd;S$rO9KQH0000802@m7RzRbstI!Dm00 -15U03`qb0B~t=FJEbHbY*gGVQepKZ)0I}X>V?GFJE(cb7OCAW@%?GaCx;^U2oes7Jc`xAk>H0Gm5gE1 -@<987RYqdo$O?rplPSOC<>XD=$MTx3L+K9DEi;`T#}L~TTU{&vq78K7VjbNz2|<>a$Tv~utMG4$?|R@ --CL#GS9%-1%v8CQ-72%KNM^FE)tXhZN>W)GQJ1_(#A7BZBUP!HUwm0U@IvOd*-EU%8?|1@lGB2iebl1 -9EVbc9VL$OJ$6(hg7llr=1!<9Q-~4j%&x`cei+|t7%;As8Hbz49LDr_>g(x3d@wzEXsF5~hF6y*@?)6 -F*Tz6Y#D_-7-v{uT*>`s_;&A+NTUCR=`A4ILKLQ<znKc>r?uf;~y_mc^kSJdpRwQ~a5EBo0rO-n3G)7 -fM)dBxr-BQ#Sb!?~9@&JS$al$kYTg2x}rC63X+a-!I>`J9fBizROglRBeJXY)DBWnLZ`CLX0WY#|^c* -q@Wve~Ot_%&bH$jx;M305^QgjAC5h<8vHLvqIhr7HwACKo45Xj?$_YOZj-jyxnm;EY_@ozkt1t682#w -v;barT4rj8T<Q%pH-xv5W`z>~VI`UxXOo#`o0TjC<5{Mf(%=LPh>YjQE0qDS-GYt_^DEd`<ZQ8JZ*I0 -`rAp}G_3!CP&MI)u(pWkr>~cwZ0L{VfJZHHQ4u07buxj_TM~vA<92Esyf}(7}GZ>4E$Jx#G?d89`S(3 ->lJ^$_e^6LEOtBcf;@)j=F!c03Pa=iDH^}C+V;P~|B{l(jh_wO(M=H=4!n@fmdF*l~31_y}<fczn9Si -(a^F^E$Nq7baXQoT}5k*AFoLn3-dPG{`+uWX@IaXMl6iK6JuN<b?z{dooTVb=M4C|bxx&Fd}L)u~Ie& -JAFkHnm(d#(Ad&L7cC7nX@Zd3ibgTYPRCqu}4=Tlf3Y77K~T|DV#e8FGP9j_V@wxf&l(;)*Xl~8d>Ct -U+@VO0?DOIBSa&_z2!Q2(Fi01tGYk6#q0d;$!FD{&yh7+9Cm!{#Gv(*7YLrU0HKKu*bJf;EZB5x%UMh -u&%k`^71EA&QCdExEqV-X92gRW%ov5J-)lbisi5^8&Y~JqHRcH)CG2O9r)8Ph{aQVw*ZG0Vf-ewyPU| -5<_j5{Y(VQYaFKClvLskm}Y33rvVeK6_CR6BUjr}|~92(h!64e6UqocrlYYzQ6#i2&Jz-9|!HbRt7@D -T*FaJxoLMr~IM)6|sk4<lMMXMG7PFT{#JNN5JVVIvKyldd2rrBaZ=x-_uJFuzzdNUH|_Hz*Gj5D>}*$ -Zu2PARIDVZc3lrgQQM06WlW%A#49SZP?Vlu@6RdiU@H(J9ScYBx1#(S~#5zmhKif|G3LPL!(o&L3ZeJ -%?DQ*mJ&$Z2T5C6h(Kh?tU-E%k=y(q#w`+!&|PXc?<{wiA%yy5qVn49r>ofJq0lyDNzS}!7;GbJRg$y -YRCGD4E<dtsv?VsBVZWR0&6eutCn&ErnoU94ZM98HGoQ~6AP`3o@uN7d0C|)E;`$aFN6xlUFXpS}P;w -A79l}2v^bX_-KvAU{1qsyf8dzx*+!FPODO-3E+o;=&d;)uhHFQ5@2jrHZ(pY6Y?a1iqKe}q#sz2+%o~ -?^}$Opp7Ar9P>>ShTHnCOfxqi@Kk$xa_aR{WlRQ`)`ibUcJJ8nSyQJRseIA2`Pg!4F8g$}-Tm)ykW)Q -|@<avwM6GdqA48SM0iDp{+8@M@rLQiM&)suyItHDB0b|<Aymj3aJ<kQyCajKbOd8&9iCjkD@kh))RX_ -AHN`@_ge*?+~K?3#;(KIB}OGe-}lS^ch7rwSV*hMVG4W<ERWf!?Q8<4bBUsQV9xZ#Ysdnp$$$eZMTPi -j4$zwazw>Dq@B9Ofuq*xuM+~jvU};YMSml^ONlh5`UTigOL`u6T5Qcj73{i*)nxv9R`pdN+(s9<$&V0 -Ue#vDUKcI0}@D16<oAS;GX_TKwi=iZ4&k)_>7UnVXS1|6<@nLhB^1(SuEwcRmIQ_e8`u@hcZqRhkPo* -+S^W@V_yu+!ZsQN^8zgih_u1@+%zmJsf9GR~>LNlC8ll?g9CL+lII(J|aIx^Z~HGN~2JBJ#1FoHd>Sv -HW&-C>_P^-@gmj4Mcw8L?;Y(>q?b*F!;z4a|x?BB@iQO?fZdK`$=dQT5J=$ZxJdq1pLlU0H7Qiya(S= -clp%yA01g`X`ipq5o4crUB%5R+|gMbv5A?2E>-~F_UbN$hSR5)aUL0$u>mk5<J?2PnN75QP*Qe4$Ym` -uqo`}OLuxIKi9UG<&^u1vl?s!+od^+Gl^d$aboK%Zc3(qFxsZi4TQ=R$sMuM>P7<KDscF=1CzLiWkF` -Y1R@)9N$(DCSd31BM=PW!?OP6s&_|R(YPSvKW)q~81oejGK*~_!m0NXA#>bCX<DbZ#Q2V{5N$=-+V52 -w-bv2|t4qIO*GE2B-w{~f6H^$>J`x|b?!KJKq}5L1K7;mfGk^cfM?aEw*nvDIz+>JIpd-3GJdDf>hd% -<j!dmz|xgjV=~;Kpx6ZofM~|t#HC_g?K?{?cs8j(fsAF`Ep@6(Xh3vp9KTUTHg(H-s@4?p8SxFcKf<# -eTbSMsejNA{&s)b7xjBvLA!$Rz4z$;!4JdvwNC)*L(<>f=_$+6`(Z`1pH7|bXMqV~!q8_OP{)$1{;CN -Fe-MaIUN58}YsUVLD_52=E(r}%PmE`Dcf<94;sIYL>_%1$If$~IyTt(`s1;~ubeFHK2BiDQ7_D2hpW2 -JterBg>*o_0u(D$XiQ0bGS-R<b(yI<d3e|mS6uusB+;YXD?POiHA^YY1_Ekwov-D6d<I?{on1HIf8-c -$<;C<GgOJ);|WyOrHv_Kbf?d%l-3y2N_c(}O4wv?j3~-TVb)Cpe_mVVEZ%Dm(k9k6YVux_93Wd=oOA` -60I>?PoM}S<&PoqLu^gDt(%Kg_WkXXUw|icuCa?f4d!n3~Ei;branl-A5Gmo&`SQeW5z@%}sw{Mtvkw -$eBN%e;a*?`xQ+s!WHgqxWacKX9I<H6^{Gk&Eg<e)v_|W1@~`5a5UPyeN3<0XI+i6ZO3Tpu{lO;iP*u -HWJ3m^05)Wo;H#}^_x+ap_Q6^#CZySHAglLR#13#UQ~7?WZ<bMJ$8QH;vA3$ud_zeU>7>#1Nudy8ClI -m<p^lX~uXDEM+4XJkg@7+{eQ;U+`r+&I>0iFs;sMc(EF)J~I)Z;beeIv0+}g|glPgzNPNMxgq2Zwh7q -Me0c^0@eFoNgNjs>2^>9`l-IL7`yoR;O2{{T=+0|XQR000O88%p+8sh&krfdl{m{0RU69{>OVaA|NaU -ukZ1WpZv|Y%gqYV_|e@Z*FrhVqtS-E^v9BR@-jlHV}Q+R}AC_%dI2tVjl_^NYNnc#Rf&z3n#(0NCJVD -Xq#)9R7uL02Ko0MQWwjc1T7i_iFlcrGiPoTn?h+zi&CamsoVsj+EDG65tg^#2h;gXm0XBrvtbW~kjo% -gXtkk26mcS?<yx{l=KGWvRw!wxzI-K(WqHor=0t0yUlS{>$Xf|k6q(TG&3o}yXj`(J%WWf~ODO><DP_ -iWay$=$9$gegE>drwJ_^m@y%yXAcQ=z+a(Qw2d6Im*n$dY<H!clyq%2+W1nVdSgmB<AeY*PNdP14vM) -m<SO;ssDsM54`SaKoPJR_@UnX5U=J)dU<OV?}(dv299t1%g?VYB5nUUG|5yMnz^^IXiG%^>3oawi-1U -Fl>aB>rx>HgF~y(Alp}%{U<Zgkk9a&$unMB)j6|h0eSX)k35e{wOWA<^ccoU{}~>hL}?Y4u{0!Wn8KJ -5dRVqgz@qIT^OI((UqO>={bIS4r8#eVK({+4#l-Cgl(Z3C(;#@OP*+@Y$W;4e|Qpx<h+(_!~ODwQ?)< -+=2o9}!mg;_DCtw7dBG9*EDpTT)uMY_7(jLDx8*~)jwOEiU!~Z(46!a;%Eaz|{9Oszf;-|GRE|%<o8A -cnH3AvuRA_EM@*1plEjH$e$;^>0$tiZ1u<)wvP7P_d66wl;0qyDfKrTI}H=}PtW@=}=@HI<mdQ-b~TV -tOqRM8HJ=If&hVBdf<NHCot4d<Ha1GX|@Y*kqsm6bU^4WL*!#~oxkKc}!zM(o3i_WD>V+j1ieo13Vm< -an=>3;)JrE5mcc|Br_I_v6Pw#Re+m6u-0`@KL6Hyq(|xW!C65Xa&}vMK4i7q1(KF_vjTqJcOqh-63@O -I{*^=ckC_ZuG^X+mtMBV=)~qCypwCGc9II*aYZ(!r`ql32N|AR4lkMXL92?59DoWnN@OASF2%|p)Wt^ -?-F{<qnp8qRv>A}}R<n&dS#gx_u<x014Wc?3QiyBe;1zD_UOT2W=Y>;7LQ=ZRe6t09ico^61?May%iR -<}&f_=-rejF0KAgtzZCqHuaoC6kC%`;7Kh;o*K0>D&dk7(=4594y)t%D5EoAk;InW9{cFxfZaE{<*uC -Hc1=ay%u2*D5E3mb*E&{sJ`2UQZ&96)%AiiTngrK$m>KIW7wL|nrHL=c!btaGkMK1^s+>GXzvrq1j<M -xvpz(5m1%KLDdq`L;&Zql#>!HXIEU#&faeG;-XHtQr-*1&!uHj^emG8ybGmIs9ZhlJ8QjjZKg4z#hnV -gV#;TW=OhZYdSXM42T`NQ3W_$n$mS&yJEI&t35(bFS)yperpBGQDIr@RfWw@cV}f>zhmO5f3UFp9!dV -_W-<=rSKvg0piYDfi=I6%E$`$*tGChM-xoJmw-fmKTl?yYb6r-Ci)h34M*PjszbJ_=<SI{?M45fE&`1 -!MK~?R|Avf;w>NcX&mqYcLY#H7wU;n)QJpJ-%c5yxVHl6(*4hF$LP)h>@6aWAK2ml*O_Evl&QQ=_)00 -6iU001HY003}la4%nJZggdGZeeUMZDn*}WMOn+FJE72ZfSI1UoLQYwO8A2<2Dd|*H;YkQaM!w1dA4h( -Jh)}oo%q2#Aw|XMG(leL`Q5SQ6MR2-LLNqNy(BgNp`pOi=`nsmvhL&ktl1a45YF${F5ofA`s59Y^u~q -S?JavyC=QY!BWW*%(@oU19<c7ujwSY_+@hO;p*mn1RsSq5!}{B$chya%+@uJAZ6MFZgnl{I1w0E;dtB -_QRui7I&J-Fql{c&3VwdPV4Ams=lJ{%BPg+GC_-c{lWHZDtV&*C=u1&>Ox5u6&zy72;F_0Gt^JGr3j( -nm<~<Goe|xH%Drsbj$?!sRH>)+lTab&td5VQ42`h>uLCc+;a<rZ2QM9r5vTe;<Ik)Cs=B;V)^1w}!@g --{tlki=yG<?APL~fF7PllQoSW>cJ=_9W)wB83nfI%S9xonCoX*5q9IJj++k{gyW!@?1q`~*as1L^39Q -Z+eOU?kugz-O4xyOnXfay|#CaHM{GNEFwyQ7PAG^clo~^>@AoUui@;h&<|p?kbqBO^$zW;?vV_BVbi# -ooof6D3Vfq5}L;_%Z0{`TET*YTydpDmT`Pr1H*&T)CHQC@Wj@7>~cDWt0nXRh80tSEefhLnO;qk-+!A -VSJ%_qUuPe$&XeoO?Cjmy><pt~AkDE7VXPy7Or(YxEa}OEcAzv|h?Qp%DE`1yhPy^nQm$O@3scufXzX -*m-A2Q|b>vIs%C4D7^8<msYowB88RGF!$OS7%KeS<3`LhM%vAAS-eCBfpvUgUpM=aQrxn~1}O=at&je -|23L1tgrQYub>W0gGf-uCi<`5w<y!;eRCyDRPglQ4Nt{9@hIHHOyV2fm&tB~=7}u%hAic{KJR08uxMs -_ZroJDm!pj(zmIqi0|^x*v_KClnt%?6KzwwQwonM+o0UaC*8M%tGhZIZ4{($8E=ca(Kp>F)G}h8^N<V -qF^Ilm}n5B1w-`D-7ySX)$<AV#cgaw{%%|I?(M{$+V$r3tfVhLch^o_s3u8Sn)9$^pS1Xgzr8`0M^=J -{+T<k1=QnPVeMzP^_`2I=2i0Jk0J^(EA12z&8wI;g23vT*%FxMR-pC8=0X1*S9Dvq|?0bJE{6Y*z8yR -OXq5$xu*x|HMicUt)uNPLUdM-(gLfPjFggxCU_ZK7i$)zSu^xBN8yU^QgZ&o`-NLCk(z#Of&`JB!GYE -F(v9R(WYU~Pqf$j1vf@Oq<jrg+a6$t18eMb#qNDsamTj<&~pd#l8~%wnH$*hjvPIAx{BT@!OhJ<T0%? -ECu{xnSE2pgI$9eR<L~PsLL3jP4fHJ&K0f`1O1MwMrS?e>i5nJ%|+!x4V-9InLSzWuuK{g+zUcdFPuT -T_GJCd5b?5Wv3MdhU<3`_5!2uScE;(1c7iw@$B=NqCyj!w<Be6R)oTZ*dPu1n6NXCsg>*q8wl3U>FEt -Zs}<W!ipn9-vDZb~OWi;sUr$|!w4+W|Cz#wLZj+djJfX`14@@ugYas2X;xO$TZ1C!1yW1az)-(p+M`O -bvD}l5o6)X8?K)wHXY(TYPzR~+B`5%F9;~oauE*RHLv2v&U8>vcG;BA#btt5RE01dR|^+J3pVRo@2VH -^EEaV=6q?rf}X$TmKeL4{kavFCJ+{}MkzIx3xM564mP`UCYM)m?u`v7ycCzu?&2tl4JVc1gBFs9?SW# -C%BZ9-uD#6BWU>5~pSo-7;HrL?1KQupp&s)itMwek;LXI+?=v-~ABxGuV)E>7Tlr+#+lBbyuf!{MCDu -+<)m7?Qo;?JMh8|gB@I>O)uul+*pR$JNqd37f?$B1QY-O00;mZO7>PkZ6D*(0{{Rc3IG5f0001RX>c! -JX>N37a&BR4FKuOXVPs)+VJ}~5b8l`gaCwbZTaTMM5Ps)ZSnNYV0#<!nMcN}p&8~Xcv{g5IUZN;+U<h -u&c5Ra_Iy(RTj16oEBuBNB3p3--GvoPYxFHX}jiRZ6jO0pGq%cP6+3oF~nWEk$si<ycUJ0S#Rvz}-3J -lGtp`Pcgp`xrz3ZNM%!YV10As^jSL^4Q42HT>0tmvVC81Ah=Yr2Pi^Rj(xEleXB-}kCHZz8f_sfoxF) -A;?unc$wcd|1sF^VNL&`03$k@l5W?+9SAb$X8lHM3!}Fm@FZF(clz;zwDxj{|2QI#E-}$Ej5HuXJB_u -gx8E04W|`LQNB|3N&LN}CKsw2%b#m$<AE%`Zc$ZKHPeGYr;15)(TS5T{vfykZsJuVr%`-?=2fUnPZS? -T1+m2BPqD=-F9prwmmg0P<-9h9P*=pUyX1*-Nf|fzf$6@J>dM|HmIBvPCqI-_YnC&Id6v!}@T+DDbiB -Z_xvKo$pu^L=zUh%Cpg1ij*Q~@(NKKcUvFgaOcCVsWwU^xbw$q{nGtq85&&wbuKeganEISA=;xd~NZB -$6&zwGbKVJI-Q;>4+wQoMo+!bE{AX$pZKBc#9e!w#;}`>hdMiyGknS<gcUX*st>+{jXJ)1v#nk5zUA< -R$HmiP+gp5WGNv($CM|zQ));BsFYT0?7~ts}l=5!QGyNv1e<_nPIwb4nZ+%nZ52C2_C&UkIgQY6Q&v0 -hH?z3h`PQLo-FK2i<%#_?FpMRIns{o8q9A*fMcI>eTJX+te_Zyb;rJKxW6Yp!gHiYe79r9pPJicRC8H -j*A00Fu&6Jq$M}vQH4pl#vGX`-oecci<nbL|;Wg`%pQN+BXbQhmkjCcR!Y&;6gHl5MpVOam!UgtV>|l -()C)AJ<s5a<7e`iRJ#Qh_;+U--n+G|Uwl)$qf7~NEO9&=aeSRKJ&$OJ9Mz;<9)gkDDyjne@=`R8BvY| -Fwi2IrL>8@47!^X04povqD;HMGPzFFx$UjMwlcJV1kIjkp^Q0o|$RC`Ve>&~w7k(2hU*Z?kzDcEdF$) -G>5%9XlVBJ(w*m%kk-Uok#-M1TXl32ae%8$PVrt4<m9h<5eH}xic-R8!}H_4eo>~Fl#vdVhxfiYF|qz -&xn@TwNA1N2zHKQi8x+^!B$QB*279>8uE(oGeqEJ*}0!wqO~9SHbZT?FII1#f%P%L>@yh*66<t{mUvi -zNa1FJFwN)~cZe}8TU(=R%-^QBX^U6V#!h7v_P5$ey3H6<Czy@F{A}<lVPQMNo)wNLt*!STP)h>@6aW -AK2ml*O_Ez9u{x<s=006yW0015U003}la4%nJZggdGZeeUMZDn*}WMOn+FJfVHWiD`e)jVr++c=Wn{V -Pz+O-0H{%w!+4dz$jyc@t;WyLtE$XQpmbJ_-^cnPZCNl2jCJHuu}F9{>pOA=`0guhumgNhHu{H2RGOl -1-79wOCdkjuQT=HZn=WjjAfSR_5Vqn=R`+Pb>4_=PJ+4_cULxlWc8%7P7udlZE+NS|EQ*idB-Tqg9!2 -M7=MdkI=71M*{xNUQg)r;=j*Nqo;p7efsCKS3mHhlWfmlp5|$)mUWV6=66=hBvU2-e3mS0{&rTYQZ7> -E{Hk-^>P1rNR<Gnn#TVPcw0m73Xqjq6niuaf8ghKZ=od*5Mjuob=Ve&P<+Vf#gr)lHHYwFcWp!ny_NI -AusB2ZIWwJ_CX*-@}A7q-uZ_SH|uwUP*gRr)Bl3FmY@^S-k{-$D_>!EHRU~rhE>G(pe<#PWcKb#2t#h -rhW0abxmq58N~L^x;EOubaKjAboP%Q7$fx~2J2dcCToRuLnls)^WEs*LbiU*}C8tF#JZpzX4bwq@$`( -zCNSr%x}UcW+)qFHbK{o}FBrM6XU>o*Fj6Uhm4Z_47xhIN?M{<9hcDP4o?y`36|sqF%?q^igrWu7r3X -E?z%-JrghU4@$&pm1GIR6j!QL;V?wCUPoz?T^pF@cZ4DpVYjH-SM+Nb$R??l20&6pNaJ)OGQ$No^tRk -!=OtGvQXlJ54tE0L+a-kWQJwQB+#`%oS(x{mYK`wne;g$%U)E=|8a?{qyv*x-nWsmv<ceFFN8(uIi=S -cnj*gyzSeMCSi?r743U5hr-}iI#<<Zeuw#v@|TiX&~OpFo>&$p$*x6lyPoGPK2)_37r)i3DTD2g(Wtt -bNRaI{QiRf#{yN}XnPxj)Z=SR;e%m~sElqRb0b)_eK|3?i`qs8Z=_ET;bs%v5qi{3~TrDG;doYy;W|^ -@xgzJ4Y~FKQvGr+ph?2UFO^3OTZmr?`WB4pjv9+nyQwdz2gYY0P`^mt3pc6Slu%H!!W#L*-T)4dS3aM -1VQkWM-ft_wA8{5H>Kgi`Xk#Wcv0s9)km2LP!g}-Jfr6!Pygad83-#B8WiokR28+Uz?`L^A3&@DMh#6 -7J;6#SFZUC%yMn>+4FS`m+y;<Vd!o$qdLmS~4lNW^fm5Rvo53`~vqF|~V`xaM3{SuS<tvS0mk!i8bh| -T|yS+gNP5n7~n7deOc%`bhWme6Il6vh`Y=)#Z&+}3&R0Vzq>Cj}6q)ELOy97qB_8ZiBp#JNt1ZJDVl( -W1>V<6^pxu}S3#`C!Vqk_QZbHo~KZ<VJX6uy}V&;bHe0dxf%cX@fuunRlA86)x}6hF~|&F6$4Km}sq^ -r`)P9)<`G%r|OsqQ_siG8J-@Z!;zmfivPjs%t(+g3agO3(#-o2k2sOt%@30ghmjuD8K-tj^j~ios^83 -ioXiQpFnfakoC?`Kh<jn>`tG|Y=pUxnWpjkZ!g91u?WI2Xv7pSK_b#h0`c+l{q#vsLnCtHUysEIUrom -LU88)xmd6Zk2Jo7ugwwIc=*f)VFl(ULj;w;k)qI2iCgKsb9yeN4`%V>U(oy59X*KG&TQda8x&&=i^K& -E1YgO`ZS2?@3qNARv*+$h@d2E#+nO`deqh$&lYJU=ZQb|D@xI<f5wimgKX;EXR3A2q98|^T4MBI^6XG -juO;P1YUT7v*<;XqU7!O+Fz4hCV69A;cn=&0vw^n6DaG!n`Fu#HW-nON*=<+MO3Xb6d#&10}fXy2pOt -9z2WX6;0npd3qK{6xaTq5K8vA@~n8P>l3W44uUJ>ACpsx4(yZh_%Wv!a#YJBB-uF<L0}7#?}4_j0iSh -DKiUrp%^BZ2SMtK(L>dfg93~5U6#TG5GE?jZIaS=#9S_G)I$V*uj($J^iccarWv<DG|TZE)eL?mR1G~ -@N0OE{qjg~TYljkS42yoFwLF3=RRL5$?7ljq?yi(dS!U_$OawpSXD|_#tL`nnYp{tK!|$$#9`*!RU<r -Cq@e?OH=+LfBdri2`07RF{#EU=iK=6?%FulTZkkcEuaEo1}r_5)?eg=`;Y_0?K@DDQnOHv>Lb74a~lz -;`=!V=gs>|pUOtF{ID?8;zr<_-*NEd}9;=>Rs=5SXBYq~exo;TXf%ygPFP`JNFnRTK?5uWXN2!6$qlm -U2go`dRRA9T0yOBmQmT)z9O=9Rfh!cZ6Wb^)^E`;7x`Co#9K5Ie)_Nvdf)7a^wNjGr*?~<D4L>$Ql$b -U^{dXGPT6qPno3PQ;-gTn6p+Ja-P6>NwTFsK-H*wnIUU9qlp~QDMgiU%OytiWRzsNNWeyee*i21zm`` -ZI29Tz%o@z+j>V8!)jJ`OAc;<8l1(?@n|X%vSx)l+Wb!OoQqapvhNnqNOB+Ym32`0B5SZ4&tF`)<=$b -C_G+7FCP(hObFbP%w-C$H)rFIdme@yP?Le)E^8l|7q<f;*2h4%2=>3ym0>#&ZBlNu9Xk<r0-;iU^lLz -{l2{0&r}1$wL{&&$LNJL1h^uVIFDzDd!jRUjWlSnQcgm$;}60gxTgbM4~*_GWctgLJfrVa(M}M3a`G6 -*criU}nXD<(GK{ZZ@td#wOcZO$2fnG7+rYe^^*f-sxD7EH_VFue*8L@|@jQp-I$4W)`Ed-`vq9PKIUV -fPjC8JoN|StwK?wMFcs;WYd(AO~{Gp!R%yujoJXjJ!Dyz70!7ls}`gf*JYsq5_QC-iC_i|?xEMgOJiY -7Fr3yJd0KMZrkK~WOCYnpYgP9!FRG(Tf%%P5e#xBLgd63hyWse5bXC_yHGBMc4XR_iz{KBU;AHu@NQ% -cvRc%%E_{q1w`pvJ$LrdmakG5?<E+3NNCS`J0;dSNZVI=|!DX=7I3vC5nXBuly7VIwSatT_}OFuxM+C -(Qt*e#rGwWXf(IgW3qj4?Dj5X62uy%K|elIF#<5o4SBwE$Ufbif$}!-fS!HCA?76Vk6nYZCxRmm@IC` -v8czKk*fq(n|vvS@t27V>0Pt1PTWO|75vMWjXOP7dl-KkH4BK$MEe=9Pq-Rt-ZeRJxuxUNW{x_HV4+D -74N)FHVMp%wcvd2E~32IW$>ao$8~7z`xn}EOd3g(QES3lBO`jg8N$5Q$s^6t3uF`w3vidpfJ>8W<b_Y -xseAm%dS}y5#xe85=YKLEgPpHm-qUEb)M6ju2(&HG@aZDY)3&EdsM*-h<$*>W5E+fKFkp2u)$?P05Pt -svRyA<C<GKOSmRHaKj2Af|ytUaVF`yTkIPi7XpdCm>K<Lh?yvWf)uqu?(ZQ@_?69j9D@&wJ|B2#OI#2 -q}+kbvkmb6K~4HM|jxr{O*9OYzy4zKzrd=eY#$plyY`e4GbkjNS>-;5G~(!3|ii@4ximdVrGxpxQ>tS -ePV>6Lc4Q^vF)SkYJ5Rc?wEHXqj#nItLt;toCMSqJIh6)E^@J-Dz$OvC85KnROJPX$o#ZXKWocyo*GS -aMiw&&^dNer>{Fw_hqZWhO#Sj^c+?kRtmQm&03*#(wTS`#;JZWRUb`yV7ieRI1RC<ph15rPPox@RaR| -vY;1F-EV-m~9gn6_6mF&tR?iw5;!KY?oW?+wC0#Kgc93m9$<1fl$m0<)#v`3qqx@i{LUDrQRZ5Z0=~J -#l$=qLFU-WfrF))!O7=Jb81BASd?jf1rVC3scLf~!V1)X5mGQTuU1J5hbc@Jbb^qnjRvQ4(Y{A7K{&6 -Y)x>K!c?cqKM6#yHHvX~av6Xd~>Z%(v?+lq+UUvzauW2nq)G<Qai5>+Es^sRlPfmNEIflz$craM5A4I -X$<M;CzoT3;x?DzZ-CO|NlAC67?U&lGZJZ{B3=|6z6_B{Hz8W*gdrm_Zq;lEoL8JAjRqJy_>L`64uD6 -b>)DXn*CnwRbi{1)RBaMuGnMj0`BwmIzq3R5{O})H`t8XD*1cJ13s-2h8rgzeDNX${v8F=U?PHO*y=V -(mY&edmJay=*y{yWrNK<>d$a4*QaR4_-|)uyaN6riqWdc5PSywOXy#U<G;uTT@veGWlDeY&dq1VHhQN -~%y<ubo7hKsms=@e<h6=2lBos&dxPJhw_dMTb%yhj%NLi3UEOaAF%#gB1IHi$Burut)1Mm*y5j68Nh5 -y&JUG94X75?e%>sNy<hHJ!3i!r(Yt+X2#4TU>dg0sK&aU$9i49q2v^8JRw8~B*PzhKg7ez>a5{iD_L6 -;ZcQ>(O{{VQ#R!<$!AFtfTEfJk({X;Oy1gi<1{GPTvIG1%3UN2`+xbAX|U$6dLyH_#nW1-gB9x5Y>SK -!5nYm*T-<AjLI9W$pT|+=|~ABt}t(yWUXn06&U6k-&O6j?J`v|!|WY)Jf{933Uo2*<Tl-=gSlU~QCqt -OgPTZLC!s3P`9nUDs~=6U7rZ(BuXm?!FHWBgYet*#Jq#Bga%OjMPhxNgN{b)x<<3?IJUE^7SZ>P_b=Z -fbq+N5B!M8j^JLskn(w*E_;-cJ=_T8z65FW5&fqRzR7rG9(IV<DYv@^Dd5_0M7eGju6FdBe(z!#3NW) ->5+LnONyPqZDj^7ih?4?qvOu8LeTzZi972OA%nm{%Kozu9@9{t+|u1{^#4(?-}3Bp02|gegev=l7>qY -I%)WZHizpM?#fWn$ugk-Nb~X;hlHR0pqd>H=}9^N{h=l9O9d*`fdXHIRr&cEd7xCR}TqYjAELK5!($! -xoL;VvMohCB*qZ`>zzUjw;RAP)4Yr^?T}Zh9Z)rjptTzU(0Cj-%$jIg@iwPiUI}h=kMe`YunjJ7+m(I -;T?`_<i`uFD=y9-+l$?3S37QH@^%1LVY$DjgYk})nR398csrqrFM2K$y2dwFr@gwniRA5PUn+w6Hy!V -T)FYgflP$7pcnZg3E2E2D5CVa`CcZsd+;h8Wkx6u+fON}=2V+HEr_{q3ud}<Qk8iNN^?1NhcG3ZTEKs -XQj?$_b(gf7LI2wlFKRHoY4<{)e`3O5Y4j<S2u9Qp|vp{Pk*aj7asXm(1?+FID!y=xJ+@qGBLjANU=j -C4t7H8Oq1ZS8Ab44De^{?_CJRy6F66Y{(X^vg{t3*~TZ#T@8}^FRMEJ$v>1^}s%=#ursI*8K{NfN?u5 -mGlmz*k<wrAc~yaQ{B}smA!y07|u(g{ChG<J6C*cN|$1F%lC$&=MIw&nrz!JPL{Qsr&!ip$A6OTeVaj -fr0>3?fIdxd*9!x(DR>77+EOa+ur-2qd-EPEf|&i&E{AiFhW*4wVs2WIPV#7YBbh=iB(s%~smU&3j?< -SGn}$H5Hq;y9B|FWvg2=B8e>mze8JyvKRD(4o+J-R=TjfFC{s1%0tJ5D(-=G28B$Y{!QX%V1Tr0MCIN -hYCJ?5)?=fK0Yo`@CrAe1*X%J(|UcUhAq6r2XTnM62hFzE~JhiRqtX~b5cA(?xYaDaBE`hI#&eGie*b -K+=<YTtG|C{;&nPCF<%4aGa=6DyP!kc*(Rk#8z9`elQ+-;eu<*P4x!Ur1I>Im2Ki;G*N0uug{KfiTHX -+8i$F1C&*@+Vf$KeE|U}I`OLfo=vhYo0Q^@U{k@V=W=nsh6*>1VO|~<c#MJ&A9r#k?X#mjnJHtAjzw^ -;5Al3cQi{=8oHh$!R_aiGO9P$wsn&^5y{V-Eni>Isx9xaD;h7ngEfXDuO!&A*HFM4dlM;hzjmExr=p4 -lLb=)%tDi_QQ=V-AArCWmH)k02eH3uItFn9szW>ia9%-e%xnXqVB!ur_#_MS5+h7U;$J{;4l$9e9k{! -?lxOi$cM|3^^foX4xCH2yD3nn-iiGL<FLhDYL(M2;+bY@`?TULHtx4x~8w$YD3X`2~6M2khR^n$mHgD -QcXh1Z`_G5S1Zd$HI&{=dj9r_x{^UkQ+LYlJAh_%jyGRugXy;**U%?ExCs07ocU&*~YIzSU#c&I;0>{ -6cp~ZW`C_nZ&b&WBpRa`DI6u1=k;*K2p^j}ycJ3ioU9cWyB#o5g!C{8b$o^O%AL*4acBz4z^5GH$Q># -+N%t8tp1}s~yL%wCIS6_XJ9p0(x`%uy(*k~!RF7^8%5byS^6;T!Z~n!YN1wE?@lBRx1Ap*N#;nEvci? -$UX45NWckEZ@cqi&V1DaDWUr`Zrfnb_cwN05@VDmYvtNGjyY(g4F*XB6|2R*}BSP<92IQEEaM{+T<$C -Z<M#!kU49XfI$nQdfSq@mAP(}B9h-a*`p-iTLb5PQ;c;WFrroywe1PS9nCM?<@?etOF|w3$jMA?wf!u -pgS|!NAUEWRALTwo^X0(#eV&I%=gn?&D?dXM+boy35d(kG)g6t&kq`CsagkU@-w`PbKR)T;5j=kcqQb -XVav*GHc95;ckC@vflL%Lvi9Hn%K{vss!*Ymav%0*iEjIb@qhxnc>PD=BHdRr5+pgMQAk#nRHe3hzq| -U_?dD<QOKkmH%SXV9cr;`;8E?EbDY@$Xs{XkCF-Vh4LA_mZkIJ@$@#tv)NMvwf!Iq<g3sq~nGRShN7Z -H)Acblhee?zE>d9;8;vp+q7^?728l98LDsa<K9~EWt0kqbA3km|4MZVCAJDqT8k2Ucy$O-ri3=v=ol2 -|p0HP0T_5cz-s)3om2_0^ak*zUc>HZN6*CT!7lJG*NXJP5`!4k0(l1>cKg4O+wvc3mna*;ci|cR;=m# -+2Hn7fn&rr5@?T%ElG>c-@hRk`ob48d^H@3*G}HvX^v*brj5k?kSjFWcP_m<JJj(M*@y<5FOqfYaAGX -WB%x9E1N^UeTeges&xR_oC)vINiIKA?nVy*r1%sBpFL)=+i{Nm?bV|#*1^+FbVCMnE&y;x>J|j_($wt -|$~Yc5Ajdt_cU})tvlDaQf~H=a<^niKW=Fr}SeLC#S&Vj9v`betSG+Wu)Y6^qL!eCZx4(BRYg@C1;su -}oIJ83Okkm%iVp)*mzz^wKD&iehr&N9kv->Eq0Mo+TVXqw@9dN6dp<lY642@+IY}Qd?(h>)et>Z&_O< -1$7$p$4gQ;JWLv}r?j4@{muB(BAte6BL791jQ}tgxbHp{S{Km3U#b)rj*3J$qn`%|}IsAaTpAQ^&;E4 -6@J_rl$B5EVE4Ujs$R#ar$nVYQGiwijryXSqb&kA|27RdUEw}^vP}dnN_j2O<<EgHMeVdqWU>_=s{Jf -kHo<-?*;zGIl0YRK-x!6y?#N^ChE{oteRGVCY{5dpT+m$lO|<wi@{wb=YVlkUH{%AXBLg1&H6VGbwzL -H?<AhYaiiK?hlYYn6bOBVg1c1|whD=mr`_ar1adL*Q-<wQW@K>ChAsB)SK>WKi_K{7Tccne75d(coS( -Jp!_L~ZKK!)FK8RUs2t-X=F7M7Y>&Dxg!A>&IyVo%r>On7B<-+>9%rWs?)0z;3-djcBpWLQ3UMbSt8{ -!P^TpMzaYfC8Cz}J@0*IAQAz$+{{gK+Qh>54a4NS7K~2K>uW?BLy7Qd&L$-Gt&tG`ta@V_ffEvIAEM= -$lVAaxZilNs|)@>Ak&-hb3#Xt^8w|4eRQ&$9aCeE$*K)c2Vw$iEpA%JJWL;Vu0DCk_?<@vmur=xYBvX -?Sj}zyBl-`499;>uxIWP6YsRqF18Ciatdxndu~)^ugg8OU(it0j0_%G94E{hxFZCh@P<7J4wgN3<%^n -xrw6LgZ@;erGrMsu+DmbGCC~>MSPgqKlg##*1%saGO12%1SeIG385j@6mYRDYUJjB<U-U!)x6PiJ8+3 -S6t_7>P!PCnRiu0s+Sc#MPXSoD=UZ_p+%+?8}3W8rOJ;!sB?b{yoIp+VBb&=-eg1V=aOy%;n&?o(1y5 -+X0wS2Z<G2Y%G5m0P+l8=&+Kn8tLgZAM4aMZm_Dq>K_pi#gZsh3yX+WIp1pV9l1>0iE`{@dl>%@_R{M -$^kj=GpjPdP?o-#(|p(=vS#+SI2<D*$=N?zd3z+^7iylNxe3o-FbBF-c1Jw@Gm&S^Z+^ZdcW3Voo^~J -`lcH9%<b0mvkmR#3Y{i*3ilCKOM;sOy)PtA@(wJK{l(X$<XO6(QE@DA09I@_4XW#;m^Ifzo84gNe%_{ -Sk}cD1tnAGt)c{QU-XEAYewtQP$2`>FE-LAbu2Z74H10^>(mKF@3yJyfJTtnys~=IJ^J&{gXIoun;pK -dtbLbqT)ewi)%fKc5SgyBZ7~F*EBVheU`u<G1SYjAKbIlZ1)aWZLoZNr5O4i#_AAVFHX$kGsA#@=PJ7 -?WX*j(m0TXCuXNVmqrknqCR;JZgGeeN^vd+S&M_?T4qG<aM<Bf$)6b|5gk%~zhw;wwn@ODPZdy(du`? -}~}(@VC3aU~hNrFgnbi*;D5~OT~9in-(1yZ6VMEv}C)XyCWUFJ^eGSy1W=WHIj|z5qj#Dz39m%mWQ~@ -jb$8u@bxr88S%x8v?Z2MjaN)+F!ez2E@qp$w}D2fAbTRl1KJ|>?QrXb)KL9)K%5gKor0Xc_Pzlz$7PV -kn_FDz9>De;tM+^^-^{8RTF5HWw+}XsoVkur-$i)ayQg{Z=k^vFMuYyZap3Fw@cKo4f8WGMt0%<w_Ve -j3aJ_N=g)?Bvw%(7tQ83w+<~w-z-EWRjZkoxxq&sr%J~6z5xKwfjqWJnfUBY^Km$`Zk7!p}n{PGJBf& -urC;r{?oO9KQH0000802@m7R`n|;v<M3T04*i}04D$d0B~t=FJEbHbY*gGVQepLWprU=VRT_HaBF8@a -%FRGb#h~6b1rasts2{I+sO6ZUolWnlv>E#?yCS7O*ZSo=sFv8(*|f@&=fh6r=~dU3~8+#<llSFnLA0z -X|{Su$l=Vn-^XI#N!2sHFGZ8@xz^>5Ux;|IE0yNTtu=DD6Yb8uO6{JWMYk0Vzt}3dXZ^8*P0W7!Q8o> -)dLi2tyXm<qHx0K>y;Ljqv(WvD-Ig65TCsQKp4T6S4mbVM;jyy0FmOB3<;4?kYpERY?r~QruH~RAt|z -;I`s%SnigU&PGYG}^yzR9+{P(bS?q#-Dj7)xK=RGp~`*6|2ftwxXh?qJ^b%ke;~Gz>p^%Wy?x!9t -!(4W>&NyCJ;c*f2%kN!xM7TJ^|AD;{)dnNKLl<miJ{{_T^7Xp<Msb>Y>A}+-#ZyORVL5w<{XaK046uz -39sRp}=EBBdZe8p9ZoQx^e(&p}VF$()kr@oyh3@G=u|EnaHL%8157=Yx7*}Et3VAn*o+@N|2*Hm|ZaV -y@8dtU|33Q1~NUr`cvDh<9i9X<FzNDWQ&Gi7UQG;G-@#)ZrZJUk6h845&p&U;sPCmD|Y2PB;WD=XIje -&GK->sT^ChTYRv)(S+Mrynn2>-H3RJQ1}Yw+*PW6>XI>qwoA#FPr8+w08z_s#;>NAKSMo{JKwSS&_9R -NpoD>;KQ8SWa32GxZE!8o<ATS>ugl1)<CEJ%>bgJf+tkK0Iv+N}UFJw-q;S+`fo;$J(;F@n)0s0qxQD -mAo+m#2tcA?-Cu(@KJW6$;7iW%*D=`7jhpULPAzxYEixwj8cg?k+B2#{b;cnO3(l-h%_#HDyQQZ@mv; -{Bjn+5+5<$OuruAkIUD{{v7kknj>=Nuhs22zNQDgJ(;Bz{nmVfWQxL=`%$I3^qIk{EEFEc4+xv9~>zy -hXz6b?LLV9ftIBbVAV`+=?#r0PpK;fc;GnVWXT@<Z5M_NZ$QBiVfFJ^L0{JFGyj58{Y<Zfd67U}&Py2 -M7uU0Lb~y;`>u#dPB%$O-!J9gQl_y$6xXXwDk6h?lsINDjYj80>1Ezr}bP5n=&3O(!-33r;XbW8_(e) -OHc?o`Gz-mZQC;h5}Fyq5b92m24khLLf#<?LO^y`sqlar_184rS+;(vy#zYrZDq6b-fY?PuvQcz|<D9 -oxxBTD-k_!`q2kRf~oK&b4wT;a|xlRDSDvuZXT^JWlD4FMA~feW)tZvG7iS0<QZro)ivbeXgD0Wxa9h -$#y(t~_oRk^mo`&LM@0K677#b4L*_6=+ONHie&X@RoxY?7^<dp)0A7=|sDhpD23cPi#HB9I6|Q5h7b) -1#u}LH7=HEaG|}RjtQ+Xrs;_}N$}r-FlfW_)1U4_!~+jXQG=CmQ;JNe#WhRr*Hep`|Nlg_Rqf((K|CZ -@XpJ4oh;-N~iOL`dR~}hNnpf^&IgSPh2M;V?a-XEIDk=$i97^R7!qKTFHt6@QO`;Av5K4$LA(%vrM4w -)8Pmc~O6p+y8MEHx_pFX^P`})J{#d=CuK>cMb=a+SyCNNh6Upd}Z$!D*NaY>dX<gdJFmg)IK$MH+p_U -+oGoN59iJ+5u-I?5`iRWK<?s5T&2In+zG|I3zGVLWfst@uNCGqzly=tFg%J=@&2oSZqYb}zROEEnG|R -_ur6r^_Gi)+d_=LWqZ^2=Rx72t{wGI-a*VQigdro8Jxb(BSV&)tmUTU3_-Te))beJr?ZHmT6XY`J1x- -m*}qHai&Z&6;|BzWk&eUDy<Mr`r*@3FfGkaVwlu$z>cZCpe$x3^sa^kW?M6;&mtawuV;-|`ZoVcft>T -Q|IxePYzH~z=v~X<pelzP$W1KfOS4eZc=Aqx7A=@m)9||ZY9zjmzdF~!n>tpNhaz=4uw-{?J*%7uY?O -B47y)#<PM%G6oypr)R9Fm7TC8M{ka-QCmLa&|@6Zvli!ff+(dI}eXpRvOrNurpTFh^{^k-?!7hTYAcc -x#jA)_)32DiS1#CALa*SW@?Jd-U@C<|8h1{w!(^{|I)?Cr|-2yUS`2|NesQo9!c+i>t)Xx^37otf6*C -__}xfe$^7YY5AR^On^TJGUNZ0~jnz*og09AJvJc`d1W57KylUOyp@qwqfhFV}{zsS%^{dG}Vxw&XKVP -&7@Pji49DKdNIjy1UYGXc9s_~&P<f1y=OcIj8WR9sMQqO<TBG<q3qUvHg&quj6kMCj$UOX{}=-_2*Id -}sBw%e+)Z&uu0(CK$wU##Nng7#K=mR*OIe%B=98=?gA!YGdk*4wh7NFwWzybU0z{Vs_qdirTa(pgX`H -l$rHg0=^mHr`)8USQ!=ycKz&e@VMos@TFBy0vU2&W$79EZi#~Q+EM>_kAl!ZP_gT)m?5Q6J4#`4S=;Q -O-6mN{VC>ue-EgkpM<hz<l~Va}g&8icBFWrm$rml2R9-a+(&V))`}rl2y`77bN>ZqH2zzqGKg=-;qNT -wl?@kp+foQS7@WNHV!3$#2d7fgPM}y5}`1RZq3LMsuJ!TO9Ni$AU|<`@}+*_X(#T6bJ`n@qJ=!%X@1T -23tN$kHCOI8K<q{Sho6#N^PVuFC6Q5q4_$K(<g`C|Lw1rH}9^035O;LBN}s<ip2+p1llBJO#C+md%j* -F8!(p_kmIP#Fb%oC&d8F}sWDC&pN9wfR_EZD%Y^(;suoUVi+3`flLBApSAWop)fo2jlmsJN*m9^>%&i -_)bkQYWehr`A(__@_MEi4m&Q6XR;+<6^HBO{Q>4bN@t$AAsKbr-Gs#33`TSCeuKw7p;16Xuh7ey~DTP -+AIiDGkR)(d55TFllJ(~=!H(`5@`<#{yAHhX{o$Y0OA)x6Kl5=1_{+|Y*1I6vF(XVR^`e$)=sNHDJEE -6nGa@cm+~N(ZAWCV!)qjc&M3PiYT&Jfr<6)gu_!ue?7wp*^6e4*JXh!rm$1^uZ4qB6_CP7u3)x83#i~ -0lIi`(t&=U&7^}K*P-6`GxNJ|q$7xfiVYptONB3(T;!aqlg0y<Q68rL*=JwSM`D>K(Istk)SeO%nwP4 -2NXVGIKJYR*Ll9(;YthzpF&Jg5ec4wJrUT&Y{vP4p-y_lZ&VxMjFxaGfL_?apZTt?JpYIaD(8D}IFhX -mefwp434D&!Ffp%>8L-`~?a&il_q}swfnFwNee?Ole(>4L@dD;M^xn`m(Qa-RWGJxeI`H-`Y@m-B5m? -jZxl5`I;TBA<cTfl_rZ`J-Q_A4oDTCPA}+DQ3mOaO|fo!MiZ6y(tdDcgaNvFADCoD|D+RW#S=g*zZa- -pw{8tC9nF2iE)>Zqg+Fbw<;$D0;X!92?UsHgu5B_?U?mG|e^EC3ugsMMs!OqTH3D%_B%;=zFny=%HQi -AlZ?n@O+o!RH|i1Ik>3-xRv?C5I}qo6_mgdinEw1Z3!8=ygPz&pLioXB8u>iH(0pX+#d*A1WOGqmJ-y -*53QrX;zhO`DPTU3H~C&ZaofP9V}eLN&PlgIfsQ>?mt4UwQOvB9-OyO^o&aRnfn)R+3P|H)D<Q9x8wv -HU=#3%*m72(mCn2JG1bPP}9gH<Y1rb1Rho(6O(zt;F30xvTu}1>snW4oi_7OE+w}0&E8WdSB+oS958I -DTCR>0fJkPoQAlUWP8QX@#F&r2he9R&O++ifGNKCMGs4sbS`&6c~Tuhm=;{MF;Nmz?y!P)h>@6aWAK2 -ml*O_Evy0b3{%6003(M001li003}la4%nJZggdGZeeUMZDn*}WMOn+FKKOXZ*p{OX<{#5UukY>bYEXC -aCu8B%Fk8Mi%-ccE-6;X%q_?-Dp7C&a*8sON=q{H^SII=3R3gR;PS3{Wtm0!dAX^1C0tzb@rgM(@$m| -_3eif)8kKYul#moE#c}}vP)h>@6aWAK2ml*O_Ev$8*Y#Ng003GC001ih003}la4%nJZggdGZeeUMZDn -*}WMOn+FKKOXZ*p{OX<{#5V{dJ6VRSBVd5u*~kJ~m7z57=TbXj?!3N3nDAVD|%N>L=;L(?9L!X8WGHM -<lkkhHx@kpJE{lx%C84H{o8k>Z;-Z{7?|*ZYvj<UeaRbtj2iPQ2I#-%%QR<L;+zx^+WEzxBy@$F`!o; -FE7Wo*Is6u~;;gW29HyzL`MEKiKZ&#}Is2-Yf{eR<^WS8E4XJRYtMfidqxX%`*(@AFvV3X0P!ox~?b) -NAGS3%S-y|CB5}dMp*qRTCHI8B4a+?7|&vBd|1rb0B$0aQSo{K4U+c3(Y8QVbYe!v(T8)mk5qn`h4{E -EW>Q4C<FqSJQcWrpMR800v_@&ii4Gi$-$&~4Ir+^$(xga@cUvF2dSv_i&P0+&gp9P2hWAmPk&Up7eGi -!RTG4b<NvzkzuFXj6^?TEAjg@Jm(j7VqIgyqaak~y;Z9tzuKy4tjGY)~vcMj#C)+31XqsT`e9&p-Pip -Dka2|R&!@*e2N4CnWOEYKvNHfi54=Lw#Wp*A}lL#jx6hisEMNJa1id1nU|C$VvW2DAG(%Gd{q;znAiQ -kEgt0-)FViz&<N`c#QA_ID^pFCh(QV>s^QbFN?mW#0PqOV?ZJ5K!9e@^bk(w4MV#yWkZkZxmk$yHJ#S -Noby}Us>O<_C?wLZ|mf6r>_0$6!!146Mr(OecH)rJqWJP?F`^5UYy^W0B8CzOeK4L`~9ysW8s2W1C?Q -pPYD5{59Yv0&9UkyH>NR!)S7dKV|ZvDdh)x1V)>z>=%2H^(N+n{O!=Q|DUZE}o|?`%6fv0WH`X*Yy@H -c^(_iV~Rz|l2$=f!!gL)8OHx@puG9ZG(J*_H~9Zh`jrllPpbV%Yo$T1iMQL}gKhRK>Wy@ngMdkfbBpk -X)iv!*jnHOY9<cL3+%V$9h9Lg6)svaP7d`W00ke{*A~aI5UvFB+*&ZH;(8OM0&Mu(D30+z;nQ)jI0Jy -o^~q?MyzfvAnUOEqFJi9m@A@{ms{e-nYm%)buAR5hQ~p4q&ee$|E<)4!M)ZMt?K(!(}2oIDgDqJ(Wm# -V6f{YROTy66Ij-|JkEh_K5a0ZVqy%aQn#vnjr_Oy=9ibkoGzUgg>eVAW_AgnJ;Oj(igi^i=f%pA{{>J ->0|XQR000O88%p+8BE&_;v<UzJ^&bELDgXcgaA|NaUukZ1WpZv|Y%gtPbYWy+bYU-PZE$aLbZlv2FJE -M7b98eqaCya9ZExH*68`RALC7B>;nqrXFTiyHAI`0lLs29#dhQiC!;oo-^0JXcMdZd_8~*Q|8Hy4qY1 -avGz~w`{qR8RA&od)gx2iKt)Ld3+Ewtu$;z-&>`=^q(@WSwd8}8mH?S8e~Y+#3be3We|D{)kIs%B=_% -I2;o!{Q?b|9(_eC2}KGv!ds7nH&4-CnGw3TM6&UsLnpU=Pi=54<B1R&MW)$Z}E96n!G=ja}DH@Bg;T5 -+cf(knnHDH%kxkC4v3^3oRFQUMPsyM?w4`x(9x}t)o|v6>S|ueM^Sv>wOGO3jcR00OIZU;hbVm!odzk -`pvF!M#<l&C^>2MKWCI!jsZ;Tg3(~;A$WP4|xU~3fBSf`gzczZ?;<~UaOEjE4(_0SL1_t^8R?ek1oxI -(SX2R9Cjp=q53Wzw<jl2G18SZV@l<ETf!aiBHz$OcPkUrB|>fABWIHhLjS^Linnsf&>FGVIEOvm>hGN -Nv?LU!)VB|M*l*>iBT-Tq_uC_!MU?B43S6TGm$GpEvw{NEBwvs~36hdYZ}B*m~hVSo{Bte+em<rUZ3s ->)YuJP*Otf1j*L#ZeTUHSFf*h21wd#4sb?I3vE(BcgCtnT^`sZI+23&l5sCM=#W{zYlrZbaP{EE^TC0 -6j0odqibfAVo}8(cM&U9hpK+1StCTDS$r=reqI^&Nr;x2jbQ(k?K@N@(%bN+s0353Xy_=u2g+bNR>@K -rS;NbcmJ5$hrfz=+<0ie3mm4`_OF+KssvRjt`*fY~K(KcZ25zBn3lXbDZP&Dcqbmj+B7cyygti(s8*W -l(AIm`@N|u3pNt0zZ-0+_kRk<3TP?>t|Qr=acVAG3jCoYth57vQhcW}@3cuGRdWtGZFsx@0aMY|Jr@( -;*ejaUZ^q~y4oomvLMcL8<S5<FYc{z)zjTHB~%kQMci^$s%1n^$^d{IOiSs*(04A75g0tQi<|TpDE@m -Pw*$7Cg~9)D9SO#WLXD3*q>&T+uDbuoqQ_Y8d&&e{n-Oeo?RVF4b)%O&q<BR_sl3b@JvqNdgM!x403Q -0ijd;Spm0kxJ#DIQZu|W`d$L{GJ10SKfjK~?Mdh|!17Z-suLBmyWX3nNceJF(Y86W?#;?kLe5D$!`A0 -z|05kQDavhF4Hg-%?S$EO4LV0m@~lFd$rwQrvNIfwDQ=jR(bXLC1qU9MgXenmi(~e&f#By=rS6F=Tm> -b?Y&uGYm=5N7ARUD+_s9uO7?V;H)R`Av>xqR(WV|@`HhDVX66!O?#0O>Gsclod?K;)d9u-0cHc<R}l^ -~TNbVwr(GhM-gCqESQkRy`x)aQ6vhq1dNxgO42V8VVDJ7RKCRLnd3Z$}Z}cB(mr$W<ZYXlu%ozk6Qa- -|{OUEqH%UyXZbdPa>pe3-{?l4g>tqA=dME3!(z~FS7KA19XSM1u!a}i0Jd0J&9*D?vvBRGpRiar6&7L -5m`((%{(8aAD}>h0;ZU(FZ*9pO|TrU7m$29$9Uw?VHp|R#vzxW;y{i9FkgJd{=GE^*+YxNpUIoUC1<* -K$_gErF1}Q#h6s<bLX81GhSAgz>zDH%2FpMx3G9MQ9yUzMO+3kh6Q{v+iL@r!a`M=_d-9S7g7N_16>u -;#NqZ{yu-WZfTT~K4nS~PGb_!uxHhJ}ehL735L__$BA&y7$0HS1gIfpn5ay4FTA=!N=@c_KUHRf0ybN -J8`Ol%g!anLBlpJY><M(#4G_ji@L1y|c;HE#e<7N?ipRwOBPFpfkr*BjN;(~*PMEPDU;^6dQV@+?~3o -su{isX3nMKk;<+BlL%++vdi4T8nKPl{P}KfV%IY?&VN8ASo@Cwy*ckkU{5Yd);(t`-*bIi{5Dw8^tF5 -T=%^t3v1ne7n&6u#8-VE#PtAF6D%cwOM|VRQf5dq4REf5ls%W}Ja+pU=3ws+yy%hdLJhMe#BcHAkZg} -%ZO<X5cT8)~-Wz5`3Sg%#Ya2Mi0i{?LSl{|W`HK#i8UIfwDQOu=OqArj0FnfBQ)V}~fZIVB=Mbm?RJK -$?p!W+akjHlbOZqj$a0_%MsdUC>u=)SY>j5UGweedxofX?}Wj7r1#6I^^+KC5qvtVkHQP6!g|ImY9Lc -b3A52)B2h|O5vsW0~X)QBAo6zupwvwE9vSjnO9$3X-{2EuP2C#L?T|1(p=ef5gzZCT0(NJ2_eeX(t)g -Z@)r4Le)pz#eauLF^hwDXQ}X4?!7=QgL@@AChlyJyE;f_r&(T-(BzXyJ191794FBj#9_F$waOlIb{8W -0W=Rb#3R6*r>W_rHnxh|!*xH69ob!&e6FW=1cO|U88`X$`&n(<@xA@*ty0zO0*|EE|9Oq4CNq=Gg4UV -N&}1{yc_&+|FFlGkw9jD#9kVkw9CayVaAIEF^POf<2}==+dk+)oUCO|#uyv{va9`z-lQ^-1qyEV5m8J -~Jg82A&$#{UySPZ*~xJS+(M8Z|lpq&BffWilq$eW!fgB4!~4LvcgNxCK%OHs87SXqpe5dni+<{McR;~ -XH2(BA==Q4)-LW}+l@^Nk7VofJTasHJvn?5sNN{})^cG(1x40pk!^d!5Kvj61ZPunrC?rr~EPO}tXz= -Y@=b>eLr+D{&Qmfe74k4pPC3#=Xn}VE`RWb1h9Ng`RxSNDl;;&zDz=1{{k6<&oduLt6UY{`HxChXv<i -2k5q8e@Wkb_ovkY|2TW70B2}+LEkyVd-sCtVFGRGx#7XC6{#&zkiU$|RfU$?f)8|N+W^eRIT!lAEnJP -dr~asxT6@#pW7uPGa1M|g-A&UJo81eV(_>eeS6eD}kZchs0|`vKE#Fm&7jcrZ-$L%-T4lSl$>f~~<GL -NvQw{+uVIKud^qNCHS024BbTJj%wqR1hYYK26+o><M$8(~mEN)4~uXFqN`1`+p|F=Ic6asDHMU$<37j -R~o%pfzoSQda*=)2RB*M=FizcuVF#}8LA{hv_Mpr1q17?1_(8Z;C~7xrp>@)kEj-MzZ@C&QD3FIv$Qq -RC~S=2w<JbnN5zSmG7u-bpBe_i6Ncl0qJ^=XW1qukceY5?NuuT_dThr-<%})`67CvlWpF1o3elB+O2H -&afij$GyD@=-JXISd6Xw(@gvsSn#-yN4oQwJ7j%$oz}ejB)WO$XLB#?2q%VBf7D7r(J)d;1vE@sh`e} -ILliwH-$We>R=h;A*S~d^{sFb+>~ipyKLAim0|XQR000O88%p+8Y)E<&7YP6W3mpIeDF6TfaA|NaUuk -Z1WpZv|Y%gtPbYWy+bYU-PZE$aLbZlv2FJEPDc5^OpdA(U%Z`{Tee&1g)-5@YGSj|K8=0ZgpR7MTBP7 -oV#5kVkk$>Hu)Tn@__O5Ozh@BPjhUWOMbG7?mPWiEH-JNK*1xwefLMO$Uw+R|-IcoF_9%|V{ESGn@4| -E9FZqp6PlM>|}pl|SJ^|IuBBZ+<a#VM-l+3{RV)v1j2gHSju$;;q+>^0wKFcgFd>_@Va3R;t{K5Bfi? -t};ze_~K(*12RC=rk3f0u5#PRT4nc&IFzk7rR#Cu+vcoF^NY^kt1~b%RoTj9{3@;RDuyx@xB$^XczIA -x_fX&C`R`z^F^86z+w+^7>cKR&I_t`>BH3J*PClNrE_<L)^kMBVb1rjTH#$>9qQB9<()rWZNY&7(9z_ -52kDHr!>CL}B-n{?t_J{YKpfb(u88#cG%KzC(8wC0h_S}o3_Gu1bSx4ccsS2BxHgML1(V2l_tewq<JV -rO-x_2E3kazqpNf|axcbm;7*M$JAy?1G8?sdwlN_sl41t53g>aXGeKYhIs_%Vg3EO}%&BH;k;(fCs`l -Xw@7(@&#)+f?F>DxHootdr!w(l}DzK=lPT*@(feDcwyQEzinlr=-Uu-ytza)aPKk7hTMNp|pD(uR~c` -shksOtmrqU%5@Wvx7%&_D7+2&(ISt|I=SI<A5U7Gm8nGCHnoL|+d}x0aU$U30r$`PY!M}*ux*u3VO|L -m%<YA<jAyIzf?rc&1QVpvIY1hrRdx~~PBjBa@i#J~C-QJ<ks(+Z4@|Vc4?HCYxPD7<=n2vRvgV}q%87 -$MsRv`5-Cig#NruTSr4<he9fdc+A?QVIJwnu|5}XD&HRHAdE00heg__PO<#28zRoDmJG$zL##ygqgX? -l=kHw9BgZYl94I3;c})##!vJH6i^S^1WEcm#T559&bAs`9LHb<a}5B+eX4P4Ar63%-IMR?Y*7UBf|RK -rBm%L<+S)JP;LyR!~2}R~1MV0;gr~CV`(fWZIv!YfFzf<<xq+ECF(w_4?F&+h>cryMV@#j5J|<nkG({ -1;_1s=w|eLdM#6SDb4}zHKq02X_~$RGca?qi*O70bqd}}M&65Mg6K=gZ6wv*NV$uRsUwrs)tE_0G5z_ -k#D{zMBxNS9Q<Y-}5FGMSd@y8pHTd)N`_B9km?|ID#fb+<nTsTE*|?I_3yxq}FmB-S+Gi5ZY>-qXae7 -5rSHNqUO9bXlwk?CZAK-D8X*UQnRrP+Mr;^Iyws|hyMj2{MN)h3YR@_(iQRvSq^W?dR15Lh6=9xv*p5 -7xoS<*s-At)OW62Vb?IS!r!=Z`&euT@SNA#cxhAIc?g31-DP2RKSGM4!m4oSWD^A<Eacz1Vj%xhJI#& -bTOl38C#KcVM9@2rE!MvYU4pLq%P=uRmwHp44LsYQ4k^byYs9rh<BsEx9Qx>T4%Dzxvv3_fsMELd!-g -M`dIV2><b>YW3ucYKX{QfJN(+^wLcsxj;@Y!y?PTe;FT(ds5|jG9xf$;9_(cynm*IF`baR{&pgncYI% -%O*X@6s<&KAs1hM!HM$i_$V2E~_QKNVpWpr{RFj>|gO)L^g_F-Di!?ms$tPkO=9yh}vm8B~>@!I^>S& -q#;Td#&>dWYAUV?|a6JF3bHPlEitr?pkSy8}#1${TQH}YL|uYb4Mf1>mh>s=p@R|GAnTXWopbj{qtIm -qgI%`duye$cT`{6$#0@MzGia3>UCxw4$7p~ijVBG)L<C^&IKejb}7^h13kMZOc7e{(RU@fXPq6sAGaL -~LK_bM4161DSNk^e7{90R<p6sla;DXlKg@Dn3U=Mwnc9HS$N{jRTaa1`){{8%<5jgWk!Bm0j0(Dgwl> -V7-yM-U9HLq0L;68D{gkA5<lIZPZjpaY6O88wZf8o8<Xw$m%?qlIvQy1`k@f2V_1cU0W39v-s1s*vei -(+ZX0R8gM!oTk9&>kqL^G>Hw=bNSn}uBz4v}OT6~>ES43(tA@%GEP<Pq{_GRJKDicvAqzdAMcHmw(!P -(NUMN_1Axa5gn(MRtH(GgmNJh}zl;{_v!x^33lD(H^8e(bDn!=tAJp%j9@5wOB#m4<Hr4VbIY@F?x<R -rapRuC5ZjQ;u*6OL5sqslHL274O@S%-o}5)E3T!^Xc}7=b%f?!5d;;t#IDXCx1P!^qBouw606ll~H$o -!xn%iX;$XGpz#$O9!Fl!r)KZ78CjZ%eE28Ki0B~HZ@%2Ma{6Glf#p4R#Iixs*cBhHuYP6x@j8Q{ASji -m@ZasPjgi8%z!U8+yMQDba@2yOml~#h;b;)^%%V!S3nC!znPfh8*#v}2+K?HiAI`xJ<k3E+OX;iHQQO -5qNr`u<L;o*XG>!hsLUwDFd(F>>_TCOa$BO>f3Kl^&E<68!H2#hv;g{SJoO*r{&CC)Vc1~nIg5_|K{t -+zG$z0bLidAO0R~A*;dnj{2Bp1mk2F^aF@d&)k^PBwQI98!rlop?o`i=+zh2dmRL1SyBuA~e42Mos65 -@2d+6z3li2D)(<ks;9@4I2=F3YA(GnJima#o)mhM8+>q<1tJe}cZ}3#xwRwot4LYg4iqQA#75B`eK3Q -0`{Sm~o|?L`z8;5U-2vJF9ZCD4?nT`n8ArFPUq+DYyIRZe6NO(;obKixHGIY_!uOyGA>bVPzHHJ%TIf ->U#U<Z{@e$`*GVDZP=69#(npC%+&GXDb#4*ErmZGtZ9ILg2BQXB6NsdA^nbNBfFk#KG48F)s{ZVO2=3 -;ZWh~JoJ-s#IO*;gT=Jd31VInX59XskiLeBB&y$7Q22oZ=x>crDzGR5F22xu)tFXg%??q)Vtfa5k_SV -U6QW=&FT+qc+0T-YpkMqkg?os1<)13~r;hAP|J+=r*t`izLqeGLgz6v$s+=7jx74QJs+l4JOCF56NXq -(n<Z}imx5qa<A3#9Ld+m+e3Upx(^GDHaVVPiF%%=J&$k^j6AhKmVDG5D(P;~hI&l|2fXVCGeefnu`39 -QIG$LTYUzHC+ZR+?z+6PK-T=$ZqpLP)h>@6aWAK2ml*O_EvkzDE>PD002J#001BW003}la4%nJZggdG -ZeeUMZEs{{Y;!MPUukY>bYEXCaCuWwQgT!%NKDR7OixuP$w(|wNY2kINzBYER>;jyNzEyS2o|Ll6r~o -Y=9MS_ab`(oYOx-dl9Cb^08mQ<1QY-O00;mZO7>P2FrZI)0RRBr0{{Ra0001RX>c!JX>N37a&BR4FKu -sRWo&aVV_|M&X=Gt^WiD`ewNkro!!Qio{S~Yx8*udjL7kzUiav&}MIi_=9SD&nK~jPSLH@mz<426R=u -{0dZSu%Fo*QplaLRFUKvP@Ko!so?R+%k7pbyF#P_45*f|EWV$Z!cnpUtvn?4V3UZ=~j}tx*TAmDvsGS -BjTP_fb*h1u)dU;PFugte<R4v+zxQE1HvSv<v~BO^8x!8EN>FG_|T_#C!=-tTLd(82doyF`$V7Bsd!> -Qc?rk40r~O^`Nd=bAn|ZUWlM=3_?H!pUlV>SqZF{pTZ=QeO-!cYzUx?ibCW8byGq@tRO^RLJ#WS5^mK -krhxl3yjz18#_1$1Pf(hg9`nRtO*J<o@1MoIy7Qsx=4Df6@6hK3AK8wXbar^G@{vP1n_5m?i*kk{_0- -I4MQ2sDXw`%$u2<&CqJCxFHfTfBGCan;H^3g2%|G4wa|zR3tQjXiTN&q~COx;G2W_{Rr1KZjMDkD0i4 -crG8VnY}=?pT`UHm84A5cpJ1QY-O00;mZO7>PesT-E42LJ#Q8vp<z0001RX>c!JX>N37a&BR4FKusRW -o&aVWNC6`V{~72a%?Ved9@i`Z`(HT-M@m<2F%(NqkS1L1Kw(^*-&8ZhQQ5$xt_{MRLn(|G?H@a1^Ms0 -BSngo?4&I+Kcv+0c;8=SqbMT3pZ`w2d;W|>Q8eMZrWT6)E$hmz1+%MGlqJ8KHB?A8DMY;^>d^4&nsoc -i>X49^JW~mIrI?^sB}>R}jpB7h%Y>{B4Ksf)sYuA%3gDATn$ogNQ?elI34veqk_(opx1x-a0pOCBJf} -$RT!>nD`>(2^wx3IpZTX)0pvz2lpPR{K1*|$DrqL>jCzF@2F3x{irEf2OO<$j{mM@p9W%_3M`Wz6WTr -*EW^%)u^nw-D6OfQ!g=>={JHp}W=!%H?5(O>VrdUv;8p8ZMB{(W}#{aL#C_TBw-eheD__!TmqWF?i7o -KkRl{vl)9eDPc>(f~G`%2`3uYo?|en9sG%*HVE|!3CRyun!FoWO)kyVRNnRdIj(sc9;{52P9})s=0Fy -?1MgU>WWQba`uA{H@qP_eqoC2Y1uNOou30RKVtDNka;Kjl5#@Jvpj43?L3uI2JS`l7>$Qp=0!Bi_ -MD~|>n77LQE;mF1w*GDC<q@q>ErW$FWY3z}uT(Z-Kb$D8{yD!8&*-}Z`Dv+KOwIFx*Wa^-I_i;1>=#H -w8hLc+xc_3GS8BfAhX8?WJ^KB~FKP`x#|DR4?%>#q$n92u~JB2!0v2}+z!=<M7(RMGQJD_$?cCA!k@j -WBdP>N0)gMFZxDi0~}N$X<DA(7?W6_~ZtEy5H>D@2=()~*K_`SeMwGq}*c)eDG6vjbWgfYiZ;iiOdqI -e%V=?YNX!DS;-b3qnneN|7YkmWyt+&!k>OgCGG3N>&-&WAX!e{<&h*f)TZ))#nNV1&E2x6zgXj-&Vc@ -?Y{M4!AtO0S^?Vhn{RGzskjCoLL6&Hg^}&b&1-tYbdiC8%*r-L`ynF}9@5p8j_2LYob0t*Z$N%@tKl= -_itXey)=}#VeD4Zy*B=b$itaEOqTU2115pnEaFwRLRV6En#C^dLlX?yU-C+kOcs_t*b~A}NCfFXzT3v -Zr3Ya!e%?WL#Fwv0l4EO;a{0+fl;<{B0f#D%1Dd4)bQT>Is(vGQZo%goD9+0AYrdcTytWZvY(4m{Kp} -20m>9qmZ<l|!EIoAc42LrZYc!MDpVeN!sro}*KMsX5gJ0(w@aR|ecV^c0{=`<(D2tJ9}3n*0^6QT=F= -7OhlkVzxuZBRTa?ujrtWuP!X0!_LM@`kQ3i~Iuf37G`lc>7RBSR5vgh8^NRnnGU!Pt{Q&SFFI=h+lA= -!-xTO(tINt*qq$*vLr<-04_*VH*HB3>&}O{)X`j=-0Zfx^lC)iKvg|B>)>7=5`h&)5us_O9yMIfjL2h -xi7B1~(;hL7-{Nh-3^VgfvTRj-<_uxY1&ZUSr)ttR*MjB@m$+H6TViG>Lg6I*%QKk$53>Q;KcMQ@)z^ -w#(d;IqU$SeO9gJ6yiJn6Z(~yc1hfrD@FewIRVwQI9(f`h5Q*t$p7EwZ;$H7^q$8d6qXu7M8Nq<Tgw! -b3c)gBRpE^Ok%*lAAgv}`b+Mk5lTjNmUn^p4h2{Dtv(=S(v9OmZJ;U-F_iogLvlI*&2&zMzOShiUxKf -wg0`>9WKK6(&*IWl=XNBK(QFlz)wUicW<B584ERpfPj->^5_KgN_U|il3}qXbGI99b3=#!IgAe%k6mh -33Z(1T;Z5LCs%b{0+F9-DIb|?>>0qe%m2m0_TAtqylVv=&l0FNc+(<8?kcs=rg%E{IuSx6!aR&ZqigM -b2n?$qU)ElXC)VYOorX8#_lfyO`@IF^aN@<lfooeQLJybim3d>Sp=5u?3=EtA5B`Q=eUn>guHlBy4~v -uc>3Kr1T@3{p`qb70SjALXXI&39A6h{z7W^B;Q1l|Qb+SV}7E5NUHyPZlQhedD^uevE1A?dqYWviSuu -lQku*-OFCC(tuw_ydw*BggpE)|gN*IY#-G*6x(O8hZOf|&gS+6-D;ww*efA4MU61|~W+O+g}3{hR?o( -x+D7Gq_4(9NluY)hf=B-fb;%(op>biqQbtS0w}0Ile^c77Z{w)0ewy&qZDBScNZTf@20sxHJ>lu#6WR -@F6C;2iF91)6jbV9!&ZEy_YO{+{vgkw{!yA<n6_;Ghbr2Zd?wy=UGe(6DT%GdY2p1*~WY_)RF4UtYa@ -*kFshj!z}Qhp&+v@!->mKO0=+WP;I*<+(E>lTNi>}qwR)oWS-wqfId(6X3k>0TaQ$TzCq|uTV!qJJ=# -^qO(iVF=7FhysvebQw-wq1q(61tgstI4(=Seg*}>l$9>X+V4ByR0GuQg)Q0ldWnb%qevq^BPiwErOuW -Kj|kZ}XWDH2_|dVqv`r8!1o6F`n%!9StrVi7)l0Y}$%_v*ghJmAk!H%g91y<GRD*-phh#ElH2M1hl!# -W((khKX<4_p*nA8gRXA!sD~Drn#KTIJBsye7w|lr1asu-8FKMl^{$lR0_8{xmbyod4#!4p@h&fwZl!% -0;jAIkK-+{3(I)W_S~rXA5cpJ1QY-O00;mZO7>P_=#67&0{{Tn2><{l0001RX>c!JX>N37a&BR4FKus -RWo&aVW^ZzBVRT<(Z*FvQZ)`4bd977TZ`?KzzVEM?vKK9)RgtRz7X^YE?WH;7(1T$Rv^48wO_2&odE* -%V?;TPvQr<W~5FHlF;mkMRJbARH1OL=ZeGjthjrDMC%~#Z)(3kMB_tI#gN}%IzcMQtC>?{6=x;3`yMe -`u;$+jB2RBlFSgf?0>LdmblwdgQ4mD-~v%nH9W81Wao52ovcZvV8_*xhc|DB&Dj8`}y0!Dw%ds&_yiW -9%<fJz6*#3uF>Ggac_hh`!Dz*_=SYND%`kxI>WId7%`x6@ly`8s|<K?>L7mxMAAxJE?_zVkI!6)zf^u -9kp9Ll7-aLb6!MA_#CQZxttb^ddc7oCGf_1dwWY>{xKR??ZnA<_4jc2Js#`DTpm|{Al>FRqeD;*eX&n -%6YrO;Q-#?+i@Qqkm;bp+4w9VGq~d2vY0M-Te?nV>x%&?rAA`O#bM=>?JrR!e)D0HVq8z<(9$Sa=eIA -NMKUhsM`oFtgVTaU;?JfnK%;$#q<!WTIiY@|P3*~UdnWWTa#XWlAy`7?Z*u&Ko%(96w2}2h@P-|}7@6 -+U1?Cq4Em=EfWdh3xrzZB0eB|N|ESv5{Wk@3y5L;u2Xa$augSiUOSf--UXgR<^r)1g0^c42v<;Z?}H! -4E=lnr}6<=!!?72CM_)61=b!e+_ecFQuLZmpeQ{ROHlpcb5KCumjr`S4fB13dv&+A3GehIZS={8ypTH -#QALE=us{|57MH8_dr~S&?FVhkk<Lpc&2uq$n{G4f|YE&rX8dZSWTT!vru2s-wapmu12A-$ykPOOw?O -fqHT)_JHKyH1y471_^qUF@yntJ@8JDyru{4YO9?fDr)8<bqJcBQS!fU5Kr3A%Yzz2^_Q{{ZmK6>n7Bq -&0w7Y!<N5x`wz@doah+c>~mMgaGA`T-En(?B3nD%f-!!u*Q27Du7;cMstk$S*<Ge*?c?^O|g_7^HO<> -SJAQk3y>nF<nfN|-rg%cm!5+6Rl@=rm49Z2#p2juVlNxf_%x!q04dqnsIRgX|?8mmGN6Ea^+L*<%5Ci -EhSRBSiIW)b+J{6LVs`!AyqZXHeY2{V2C-p&nx)!kaf*BvmEbSkw_;qFYyUzP%!kZ*0bl)Wp5agqy|u -`YuV>db{8K4^T@31QY-O00;mZO7>RYm#NLd0RR971ONaX0001RX>c!JX>N37a&BR4FKusRWo&aVX>Md -?crI{xg;Py$qc9M?^D9Q)3rH!sN6OxNsiIYHtCi)#P~1AU<r&)M-**fl30tZn1f%i1Hy>|ok1-^MAvt -HC>Sz*SQ520cL~t<8t9izI-{Qxv0C|*Be=sH_^h{vp2pB`a_!eRcZ?;7OG-NS>X&MwN4uHOm!3s`Dij -hrga)C)}*u!5XC8!N3kL*H|EwabxP@nzr6zyzxR{X>vNp9VSqp@E7n>btSgx7k@T9<^b+vMJMK%6$Pf -*VgNxcdzc!Q<3rerSl8%BsF_Ro5e7t%X#omhaL%RX?3v2AYE@I?JUP)j4K~yY?#B(UWc6g`}h5zB~^@ -{a3|2ly5-!SRfb7FL>-NfxJ=|L+C_8#=HS0ouC&nVIXX?T2E5qD_Bo#oTD6iI34b9nBpWo!Fz9;UgjP -}U<e-YgE4vI@(2Xz-3dJACCE7j&(@7p&=`M1H|3*2s4mRh<5AjrLt1vdBBKmo#e1_7i@{8Lk<F|8^1r -H|kcZ^Ii1;G=Th8)N1Tx)XY-hi?E~V<3Bki`^tU(>p^H#0y-+o+X5+%70z7NFM=5Uei5sBBRr<*wQvq -aTDCdpBE-()JP;uBCy0|XQR000O88%p+87j9e000aO4F$w?xD*ylhaA|NaUukZ1WpZv|Y%gtZWMyn~F -KKRbbYX04VRUJ4ZeMa`aBp&SE^v8;R&8(FHW2>qUvW^r*nlL*D4Mkf_6BqV1`KPFt)GHGV5F19nI>71 -vMUt%?>kbKEHQ2-Ac#dCpSyeR;hk!u4&XY?<qr5kE92l-*`@G-moA0B@k@)c#KofacAD$FIHIhS$u%q -YY)8lP12cOxb~s*P&066Klt*rqJfL)!<AYH_FvfBvi(&%Jr9&f`$PIq+f3#p76Jj{^NB??HQE`Jk@}d -;X+F^@1!n{Xsy<Gr36b(7!lDnc<S`>8(XVAi2VC;5G_2H$H$5oHz9}kfi*C61>tH_IR^p_Cj0bQf2OI -#EC!l|Mn&X=XI6e6u`ucW(z?59wg2kT7gEA@B@jT|76<j>}nI!U2eMJ{TULY@4jV73OeGVsmYJ|`oBL -7&C9@!dZ+@aeZtaJRXIf31??m}_tZgU|PW=5y$rnX=(W>|YvY8-hKsE`ohRU{98kf>VPsfKGUW6SD)K -SV7Q;Hz8XTP_nYY2#?7sScE+w2-5`+t#nJeAdshyj6jJBP0-?5f^>?JY<UGzxd_x?sZ0gRaFTlN8OUc -A$t?3^dxiacsO&0@z`3Oj@<27S;7p6a>#IC4INK4~v{|F^N`>XA;bjwp%2KoyF^&~?>`Bbf>?#dB)lA -s$d5iFdT!tdBpoh1&Z^%=HUx^yXvYLKpg3G;)=owQSs2LYxGJF(heVP7;46Cu^HSg=`4O)^tEZLq#h) -!t`cqF+@AYuY|thAnP)YRpO<PKB~G4KQ~hsHT=x9hb=ZFAkx1(&%pJO7^DzWL#9eKTe@r)FFpsPTCew -$)ltaxp!D^t-$M5>jBQ@*UgXMrtaoVlEDHi0gDZO~b127((siBgFNMhs;WK(9}FhFWFVVWLO=d-JzpO -T9S1>Yz3KL0)HNVd7fWn80rv~@vAe;ZleT#_nqci38_E&vI}zVt8)=fkCS?LOm=f6Qfqs-P+s(=$s@H -pkF&HiFtA!q!da~*ZPB$xdWgl?yN65d=fSI8`FwcZRFiY-Au^LqGOu+)t*N-|PbOt#ch)S~Jj^!y^I} -Ym^TnsQ3c~TfNcgXev>EJUEXh}u|MvFX`eyP8ke$C0B8-1Ne)zbBvNhDvoaoZ?jkiir*8XPOe%kck6f -gm#3IHCNXsNYFpi`@}+Z3$o`#g1*lmCD6e!^EpL+v!DVH-TvEtLyNL-8cAjcNsnR(K$`r{*Ck0#=r)B -{xd@4-aZiZQ1x1l4U(1*)U_2iSWpRrV`cRkb*|jFm0igel&$JXg#zZInAa}1ZQ|f`y55}^LGle<F09+ -a=OxM-D$QaL9My9B>nYfvw8n+E~5!PN$JYh+jMX}Fa85iO9KQH0000802@m7R>$3tSh^Sh08>!_02}} -S0B~t=FJEbHbY*gGVQepLZ)9a`b1!UZZfh=ZdDT2?cigs>-}NiF)F$ENjA%=V(?s2A?K(>B*0FsoXS2 -Inm4b#C4I>UYAxKFRNB@2A15c78DQQk~R_$>(AaHSUao@OLv0B$n8!ftO-qv-gb_#ANTG<2*Wqol`R2 -SxFZC|WwRotvayEF}rG*4Yqmc@Cx7LAfSi>6*hxoE|_6iP`I=}xwZd$gN1Ok-XqI}!Z7|L?a)+4C1i& -;S1N^<Ssd^sL(O!`H>U<)>GL(of%tH3H!uuf<B{@4Iy=`S+W3Thx^(`Iq<Ny9(N;JChwoWL>P&tf+tv -&^hheqEu-v*NvPD1YptEO)}p;Y*CaF*5%gx{fnccSJ}~jy+3+={PNA~?IV{$E#0se^lN+XRiWk~<<_E -Tt_!7C*vMSW+e~!rGD9F4Y!JUu>$31)RI)AWx%W=qv`CumQ`fmHEuw#yo4*Jp^XK&nHeY^Q+!WRJv4D -jgiHwxBHDQMQgU`fVJH;a8gF`}Y1ZYv^@+O_vWhsHD8w2?zHb1YSSJm$9AUn$@ni;-MFJ$|Q+LA1*fM -v1_7-45Odeh|4ZzWoQuBMR`O<6#L-k7Dhl97mz1!OL(xs2*7cv}KL*ggxu;d&`r0Cp{->!K_H;rV6M) -={Tqx|1D$_xA0ZckhqB&R#q_esOdRSS7JqiYNOA@ifAx&%XRzKOH>z!aN<Awtf8XDt{6q#!sz0B|w{> -WHo!=baJvoO&}xHC2|oHFOFkuP>9N$DFZ9r@T%nMT;{pVX&KR#C_Aar=>4)#5yK*}hOx^US3v;JkaB0 -ys#9%r4uq*T(F)--QN4)H1`9pY!#tpKQQ=6y2IvSvg{X-t=Y2kV*36g1m3&z(>a#TZehG3Fd2JE$K$Y -Wq2rdBn+wq&%drCHiD2t!OIrQhX!ltb7@$J#u=!^ZwQ&@(>0Z1W=3YR94KZ-f-p_Zpcp?VTb6<jW%N9 -3WMp4Sa9Lt9A&+=8zFNEOYOa(;;eua^=U8fX<Q!62|2A=(HLDd@ctz$xuAI!g<cVZTh2WqmF4WOA0mz -A@o&{=-PMj2t1sKj}A*Lm^r;;$j86n>7-ctC1ibt2Gdhl?49nMz8;Ji2Rw?QB}7Hs{l@tj3^R9Nx(9X -E}FVqM@jnWBm#m7?ielQjRz_(E~IKx5INOKkxvn>0x>K%(WR7Yh6!krqOUyC_bCQu$O9`ba94~PL{e5 -n!aYk}fKy2j#9T8f{9g)%@(P5_<#~63b5|bBbyI^%1pWcsa!{Y5$!UK<zgKo?dO?7l!leL&92lvn^j> -R0_c4W4tVD@>ss#v@c*S%?o>`Y-4nku_H1Wyq$EV4M`LZtNQr%8w$;m%HKK*nOrwBu|Zlj1@xZ5oLIZ -l75iz<N~m4N$NCbZ?q78Bw|`x9p$$lt_5ov^B(FyrKM5oH+|_7=1%*o7=nvRq7}y+1{->q;KlVQ9!fw -c^`!>nsfODQ)lyxWCT1!TKC&*>u@lz%C{$aifZ#<P4{oSX>sM(ud5P%u7W!f>@rgGq(LCHi|Ajb=ZQ~ -9E1LzFHy#r`;bP0c};bzNR$_K17f#wk_}3|MlD!(?Ye7O#z+7SRM;JWI0FV&>8Qk|iY85<*%2J984m; -&4Qa}Ty6u{ZUf6cTXsQ*>j0dMAj4E+p^+3QS!TvLE(2V}|c37w^2j|J{ExJ-CK$s~~$D^AD`oV7VA@4 -W=ybS;{t2>Y^s=*e#V`##NF^aT6%Xz&lfF8UTQC)#R;_jfx%sY^?isdYzy~d0oB|d^D4#U%1Z_#~iir -uDKLJuAPFvL?@!#VJ1umbz6mx2ZsH?)r`DM+3tI^RTRJj+=+3Jb;?J#hy|d?QLF`^)EX14Ch{F-0Agu -@0L#y4>$Ad@Eal9lilmVLgVI6{{rlfyFt91qx6NhGnIDN9gXNYN+Q0`o(O>1gcjMy7LZ4IukY^eaMBU -zfdCq8EJ)%mT1j}^wgRQXq9YLT*QCotp^nehX|=|jh>~<4cp(hmQY9aUNU~Wz*MXHihZZ9vQscaaS*| -A5-{6};~X%w3pS#q1kVkZtYL-2C8*23X1Rmy`dxLuS@fYgjINkCpj(hQh67u<0&Rpqt5J&HnmKV(mOb -6jpD*BUP4a9GORPx4QltR>SexKK&IZ7LEw9plpW_hVzZm<)=!uHxyLYcB)QFNIm1!gv=&w_t)1p}b){ -dXXpo>HU-T^rNlQaOi8+|WfcYf?@@Q~I`QIms#KXEiXuEZr+`VOQ5R=U)#NnUs8fYPWu_1EYJ$|=21f -+jr`t#mR8X@Sya3Gy&nAnz=SMq#*xv3x)ga?Z%JQR|wWX?P9MpeQ-wg89@29J`fI!5+xpji9^Hvr^Sl -obY?_8tQBI;t5m2Y*kz=TjS!RR%*cc1Hr-gj!lq}on_sXIdST_og;cvVGPyXp!W&L_@kBfo%MKmgZT( -H3UvwiXn-CtSaXApXKgv4kv~G1Wk8_QS`&nZu;zv1#ADo}$ELVe)LIA7p7h?q&ja(`aTB<~vYCU~+SA -_7VKn@Ev;)2jD9tO-cesyg5KP3$)1N;&_+}ELnn_>&_4S)~N6()fA5F%EH^G01SEp!}iNi8(Lz8<S1M -`-Gc0)sCSUBXWV$lO^b&VDs@IYY+V}e9IB^cYg#{`OKM{nCPvOR7p?VP5W$NP@K2?*|~s!8rNfJR;w3 -YW!RDuoXJ`TQ6c2p&a)5>msC0q3j@_|$}_Eo$iDPNgJ^L~`v7(cI9(j5#@F@g~f8c~gfyU|@1diOmhB -03D(af-sFv;`nqj>Cwwfkb<d#&^&QOOw243=e|M|ioOMe>N5K1<|g8xMn#EC!ODGfut1(b7Q1^AOB67 -FvPmX-#adiq9W(_)Esx3ywM@n$nrRWbL!*9c6%!~)2s%(NExHo+##c+<09ECUSYfge+42+kUp)tB(T0 -VvxA3Or{Lne_4aJDsdx}3gcpP(#hCvCoq36X4aL?$;no<jn(fT@;8B@=O$&y-gjF^MM&$X(>_ZPB~jV -N)s-5jVUHH0(DO~}JXk2pj42pQ^+00i_2&iH3gGtFk#L_cRnPpPhKfyY9l)|B+%0;64aWI)Fga0=g7> -vl8clz>6JkqeX}XP5dmiDwN&A0|gl&X}YOUyBUA?CU1o5ubb7X%_sNY&GNXqpNs<8d#?Hl%#M*qmk`g -W-b}an@%jhy^|#F6>b=3-*RR-atKBAR?IKOh2%`<CyG-pL^A7bXPGMNR%ICqyo*CJhK9@6T*l4)-|UO -|O`!XwqMWhcisq&OT(k8C7`5_WZA5hmGc{7E@P!E<SP$b<Fb}2&GF)w@b8!A!d2wMQZrvUP4mxJA11R -dVzl?yp7Pl(TnWysscGzP-nH-;<0yWWXbpUz<@SvctKj<D1<-X2CLU|+nkZm}0NJX}_&=KQ4*KrWZ=p -z*`UI~DYL}Gq$dq^6B2@U_Cxz@I^?!fT?Gme>CO7<p85O31~F`e|G_?u&s2Qa|j6YZWE7}2%BJbYK>Z -i)B@TA593+Mi^wfybOM(vBmkN&tTLPWRh;Oa0CQ@LohL%N*#omh%Fh$(&;5`LoZT=u9Q1-9hWS9_O1d -UZr!gJ%iRBqZNskLuzTv$cy*izTzdf;sO(v0hAmJD)e^<JbC=tVCg+(<c-2-?c|r30abu4sATRt)!C0 -=uJMjQaby#dE-{^|Pg=iU8bC6sTpYmpFU=k?(S(P@juwQDR+aEv^$4leA}Hfp6>Z&Y9MMu^fX0xI0Co -VXstsX~y}&2CDso&Sh2qZJM|fn$46jAUG9(r4#8(I8d#x~)QusL*&WIb<;M2#!rj02DN)Z?q1nQvh=f -=WgKYu&=D^uNk=|&fBeVSoKbJ4AszzdsWL2BoSq73<tVoIRAL}c53s)!;bo%<IMy+yUwI^aZM2BR!`; -Jkx1f{aiG6dBWX&!R;sE_e{Ep+gIbPQKO_ct!wT%&Mru{V|6&Mqep3_)Q_vG1kc#OunGhxoxNUfm&}j -Z(jz`$cxwgw4YV#GdJcO*&-^G>YLIcwdXikqS4aNOeP2g!yZhLhs0Swc9t+N2x~T{W9HAU*$7yX7r?9 -(Qb7P+m9@yjoTcZlzo+olDCB8hZ}O%NnbWcl#WNl}%KOs3oNprU$Uw2ohX+N1(*fMSz_fRPhr13M2D3 -l{JftZ%sgE~WA$`^ef#d7v;8Jt8KrMZQfVZJ%3PuLpWc0d|_<!Lqo`l&%gf{cfuGyyz{EgIevPN8Cj? -aQK0&v*dT3az3B*^b;iYpW$r}@!~hlmla9{BMfqF|wbqdYKev(dgi@|FPi`dS}k^f0ujIn+sjh^J=u^ -f=veAQNEE%*o{hBpS2m!z~ijLDVTn5<%CTnuCepwB)YjI3sWKll_@(-!PsZ8TsMUPfeoKJUKA8z5R4- -kEcKON7$(+50o$oTVQSdCZb1h_(QM)!wisu-(lAgiJOgxp|_%rBIVTj%9nC8qaqCOpvm9KNbqK_$R+D -hVxVe~B7??okngiYcisuVF_~;RIiw>&+?5|--Oj1U<3RhvGlMSA{;b-Zx-M&om9o(HA2~$q9U$80=Uk -zHC&lZ{x`+@LP?vMkY9=BZx*9ksN8W<OY5XwAq@sW>b|F}ylEfI11#)4#-g}Vf$2%DDj%GRnokVF8L# -C;n%1hX+H=1{cnD$&%59>Z3_XcWzuCGak9ZfU}dS&A4c66uyu>biXM+7jE>QTT*aBcw)bnw7x&&b0x@ -a%TA8L>86AEMCU8Z*LlG>p1<0ebcvf^J>-0Wo`9oEM<SH*Q<4(4kK^Ttk3JxU=EN(e1qlIG(ue;VXZJ -p7C}r9)e)^S_dP7VnfOU(lI$IW#eH;mHN0A%0yyGfYX!)^{gdNJaGN|k}7h$weOdYFWJ{@e$<-`j^zT -3Jm!^UpUU^*35<e#fZ0CsJ^G~|55v$^H!vD~tF+6`A5tCN8y(6Vy2vE2B_C`OUiZ%)%0I7*v`;9C@&; -lIbjhk9V4)~mikw|S%@e`)hhT6s5jl@3f)12G=<!5fCwR*6UUWHvaX1q3(r}v*pD?h!bNY~AUR6ck?F -;h>&I_1Xwb|3hfu)~W{W;x^&MYL}NF+4VPRl)vFdH_xA@>?vSxU0X<MtMId096Zd!@=Zx<NAQZu5(O= -R*B9R+%x1G}@mi=P^^xeXDW4$23!VYSvq?wny+PRN-{Y4XwYqQ8rYX68J3!c?`#~EYcmOc`FEOq<@*+ -rLn)C@!h(d-_{Iooo3V^yS3kAk0}ep8aZy8PR80U>$ZB~fg)3ZHLm0(Q7srg0K9nn;$|}q_;<2{52Ln -+&abkAZoZ-2{U;m~L+2@`xwxbZsO^VcxFnS0wm?;u#4~U6^?txm+J#wf3m!(#f#>tVAa!W)xt)Y_4vD -~oIBFW;t-Z)(|E`-FGnel{GqfmwcFQd>(g75%u}`V)HW|FdKR!p%3XyU+TywicSWJcUNB$AiD2d4T9C -Vrd3Ys#H{y%U9ex1GN^D)pMeo37@<i<Z!QP)2a2^X`*=p&Ajo@qJ!FgEsf65k<(1S_nJ?B!cV&1wAMH -cBY&hH&u1?Re!h_aEMZNo@XWGVRYc1&jh9ce(BwnejQ=#+xVD0B}OK?|_E6i2noK60XC&{gY0^KIK}F -c4MKL<!l9Hao7d{*@Y^E#=+<#a{@!h?G0L>brL`F6dD=onY$g9qRXPoj?A&S-d$ASq@;Sv*p*h$y#zc -Xg2>}CLaGKwB!yo!&;wFb^Rmk&dJN!+G`6mL4Q}pr-SpI!zV}33Gwg!v9K9Q*%WLU*GR6WLn?6BC>-w -l*-}%y9o65#y5o5{22fJtg*4*MzOx|H_2xwumSA(KxY`klOxz6EEM)B@n@p4^OdkB*&Lmt9;E)Smapl -u*MN)JK$PB~v70;k{B_4Qa}+?U^mmA`dEtR6(S;T{iW@oKS%e)^i715I}m?<mN(BSwU5R5&MFH!qlX> -(1E;Cnx)-cc`CC*C)AD?l^4T{i&5YuC}2PB4GS}ZrG9TZhB+g4WFhYcTNz;h8{uMc~I8Kmvf+ty_7RC -m40t!qmR+QWDd)K96w0V{B(tI>uswh{zr21Z0~;_?|pUpvw6_}O|!kzPfgq8-}}Xs91(lABS@KBItNj -=qqw=OGR(Gn7gd~%>T78l{(xY1H+oh@0Nrh3S=X0%M0$y7MNP6u6H9A4QPy}tuF%Do3<qS|oCYJ4HsE -@i8i^*wgg)2A(uoOH39tj{#NFSI@Y+nWKUkjTvv3Pj8k6{~z1)?%0zBqykl(h5*=oDHg`!6weMzFKt3 -5*=QtLx6R#%bXs9DUHNOh6MkI_@gBd85ba>Kz(!`BI@2*I0g1nvcFAvn&n_~1$Uc;tPdR3~Tq`(Nz;A -$&P>k9}fk5mVhcAH>$p<~~{T`}T!y#PEzk{)LjT4ZD9@BzkQ<{<CYao;seFjo?0(^s*PJxZH=!I=pK) -BbRa#Kw4CrNg9v%*CVmegD<DqvHH-8**zVz1-EvhhoF$&b?&P%q0&hogTZ~cK@W4~Yj*dv;cdD5F1Ph -=qg@_GCs(JGp1RccWc=f1b6e(iD`R87d->RUn_!l)Fgpq6;A`8-1fm)*kR6{Y3tj$SGv9sFsAYYf-5Z -~5b7$CNB+DM}f?eF7oIE}?4SzNbTPH6R?XR0Vyx12wI^;J{CI*MZ!Tmu>4dH<}XpDyd)AN!xt`$3Fg) -)Ov>x<uo`1MlC@*$JKwjkR54@_)_d^K0w;EsG-0eYM7DZt}E@B739c84yhD9emn)E!uGUgIGP3^UZ;{ -k}U`I}0Ug6gW19y!@}bG)fA5Nm*^Gi$P8)+JDvcQ7{O}mMf&Fw<h;$FjvH$(e<2nRPLU*53jfqc5^<% -W$So6^J7<ll9JVY!&iU(PePayy~19lsmm+A%+H?(uwPTSuCc6c&y~;Wj1!fZ5kPc3@xlyN8XIFtSMmL -8sYH4A2?|x@vcVETgJjFaj|9-ioIesFuIeIJd=^0&d8+iokcmqCrsjq-!*A=FGWT=NTk{o{Sj_f6KA# -=L(Upo~c=#9^;t6LgIO?a5MU({|e0CKdf$HKeOj;;Szvp}p8CFb1bCf7=myMKsi43e3b=yy)uR&ml8l -Y@(5uLs%=RTp(%K5S?=2WIgdEiJDSaXd9oel2C+<j7kT7agDg`|7X=CdNG$#c9Dh4A_O0LunigPCZjn -&q*Q%|Js{qg0_k+i}r}MgTZz_FLJDFoZQ8MYye+GL{Au711e178nZe@;fXC872C*1Q2|+ri*&VwO`)6 -#_Kgmj|ljY`KI6sOYo3a>}wN5TpMPs1k5vU4G*t@vGnouK^ncqpp{-xSV~}!kNCt3KR&~k9l`fbL9op -iIqaLR%IR|=7CU0<OSv&p!(fp%uiv~k_oe<A(XCBlH-YSi3<kfL-~5_PFm+|=3xlN^FX6K^I=TT9JTH -*ha%84ety)u}ZQ~ncsVRhTbGdG#v$Md(KRd(u&5YjnX7nB+XXx`lI)tfe<P4!nYHC!;<t1)oLb;u%FP -NYd0CrqPjyFbTG2aM<H-LraZ_+nZ2wX9(DXzl1lkT|3gslmEAA*9?i4ksdRARsOK@twbK{6_==cSXg8 -ZWd~wnTF+Ydnd@J)+YTs@6nlsEF>W)shTqPhhl1#d?dft2@O?k(kgxv-)9**9xyCelDa|e6Wqx)x|}n -t4deyf*3t;hUGBKr_iM_R_WA<_{l%u$M0_O;Xb|hch-HI#u&@+(tCI@lwu$J=a3wBvZKC5IrNakFE`; -CeLpLtZ;s7$H=W8$8|@`NWiN4W|5Rsip7}T5-hJ~t`ttFYUrk*F%o2GS_7c6cLkM#Ogzj|v3t#AaW(z -Y}-)*#&FpPyW$rj7l!eUeICB1@8pntO;RibAy{U!zjWayX>)o<Kn!7*I?5_g|cCLjTBJ{XCoYTk{T7P -ikz#PG!kec-!--6)V{{mr&AYZ4NC9~^v<)PtjMyFeH$SrpGD$TZ%E1&u*v7o)MbSE=kz=~i$O`!C{Ch -y>V7v&Kp2q>)ZFr}%j?dh+r(J*f7|<oL2Z73CB#YhL>a8A}HZ$x-70G$1d`E75ip${-we$(OiFcF)E? -U;&JA=`#g?e?j|wfwSfkX2f7K&1d$?B6IA_BvMHU%;MOkY2nAjrG@zYoh(dUydi-_@PG7gr3KYa^bwQ -$za)fO23Z@TH|rpfs@Z2<!;F96DIVv*8*=rO)cynoz2AB;+4(<EO9KQH0000802@m7RvR4h>TCf30OA -4w03HAU0B~t=FJEbHbY*gGVQepLZ)9a`b1!paXk~3>E^v8eP))1bFc7@!S1f*)783i=TcCyVNO|yhrI -1r8#cZT?B&tY8yZLzkzH3J*Nvey+GxF}tG)-f^<pT0P5(6@48&Jr>DTs%VSTIJEkQ1==v?p%O`~$*{5 -*3V)k5rC<PLKz{BZi3ENY~eZ$$@wZ1#C`2XITIf880&Os_R^~+>Y<!b82(hb)UMrQ*TG-*2_LVVH7G! -Z7pvNwWd+?#%!Kn)^F?nb^UV#pW#<CsvN_%SwJ%$3RUO{9TlD++Y&~Zp+mvuw+^vUv%_XKy)vLjhkva -E_#7R>h~gPeK3ES}2o9`0Ay4sOi%j4`AuG8A%{}BYkHI2gKr8>3i|}L4t#j=k+);a7Yi7{*9J6rWYp9 -!u7tzt64?+sk_aA0vI!tj`{QIgstbnE5u$M|6*xJqmTZ?*Nr_OGukFfj#-*c+9U4685y}GaHLB9By<O -{l&t09#ux|gdnl`FcJCyT00m-!1&O9KQH0000802@m7R`}<9!Dt2m03#9r03-ka0B~t=FJEbHbY*gGV -QepLZ)9a`b1!pcVRB<=Uvpz`aAhuVd9_$=Z`(Ey{_bDFsTg8oF1vLo1_bc1uGoMAK@l_^_Mr<@TB0pB -5~-4u6K`05`<^2$>owbeVM3Ei<ni9`xnopS8|#_!(t2Y`w@`7RH2b~M`}WhEH)`Y5LoIyKE;P0*)t1- -7I=R?cQ!#(6ag?3*uaxtPxKXQ`rw6HXV?m$Y2@=5@uS(ZaXF?mTGEu7EWvWFb`$v_Anp%{+GPx`rS2~ -vu?aAxo_3Js>z@BHOg3>K*AzbQV?4#tBa#>5Pjjf_SWcHd_nTyP)qVYva3{rStu^@*@%Qmg&_+I*}u( -nKtA!)i=EEZWQoMSgq*sQq8Of4@L3x+32lJNgeIuo^PO5vqrzK~#-39pQ%FBkx2nQ|;MdZ+dcRAJsQ7 -ufMLqwtcZt~B1IDRg?D?BJ`kRQk>(YnBAZk>24;n=~vWxAEi;LCH$`!sKBgmphhO37wYVo1Uz6>+?s) -{W8S+z4P|A+wR28ZnyF;*%m1n*H`T6_blo8DY-n;x4xq1RZxqGzDt?eew3MKVuzTX!$&De4*k$6`+?8 -$e8PTgRGIgz;_UT~3C)DvH<i?$IWMet>|XhTeO{w{SS5~ZD|<Xd2we#-r9{pkqUs<iT7ng(k}OviN*a -6Q?8Y!}k9|#he85}ioT(kX$p^U4ty$w_Fy@?_IXg(}kSDx%^j(2e!9Ns>+DZ#Yl}Ab)C+#7s^E9Zg_J -xP?WUyo(8|R^BkIfc7$jeSYxLY56K@JUmpqJnY!9H`|DX@hXeL9;Pl#{nz`WVZI0*TU3rSpEsp<N*1( -eos3nS4%GL!yvP@;;o0h+*X}X>~QB2V>(n5%B2UWy@iPIXx}&6V-rbY%&*h4ZJ&v?)en?bdMY``hw61 -k$87?!=x75Qs!$4t!BTzeEWv9gR|>WWD*B1ECGVK8)gWSO93s6CMKQxaa5Z#)-6ZY^nHFtf1VXW>19{ -1>xo4(P6^PT!zKMz!0{1Y9(Q{@$6Z!P)Wc@OlEVAiC6Bm0fGNKhR>S<|EDb%$6e2@%j)2t4PYo)NC66 -<LH=o_yT&+>B_Y&n5D$co*q5U){YIyD%bpXFZ9J%^$c!`5hB}JFd6HOgN&lc!**QJe>zOkC1cW8bWoy -|C0>tPX{1H0+PctFyE@uq$0woeI6-5|xD@@d-X;bgh{-y6akqvhp5B=0040lSYOQ6~>X-N%rql^TE}z -IFzqo2NU16YnKNw7ImTlR-6D&}jx0q#I&foEmU;pi7Sc1u@o@aDTk^1rE`u!yU$xQqtn>w6d{E={Y() -Ev%_lP-<?#S>mS$VD0mST~iT<%J}8&)f5^c$1yOtx>SBS6+SBge5t_pQlo{H=tD{$fa;+op0I-)rKLw -$h!Vq_>my{x3TmR{1%5!%$WsG96)`a(S)?V7ubD$zrVffx%+D~xj$m8#&&)QtL>HHmZEN%N`Pa|C`(_ -<qzkTub3*HLIjdZ~K8CIga7e^NX@oXM+Ar!MTCcx^@s$F3kOeR(+CujJ`hfLNH<R}Z!{3vH-<TVGugj -y6M-gjiX7Crjk(D>qAA!EgboJ_uS39?dFt~GPbki`OK*VY_VPNQ7Zg<q^6<vPurdD@wLnyJIKN&jO$h -O%y{C!CY3*qK8|B@Pnk_Q#(IkGQd<QJa4>=&v(6tcDGsC%DCh#|EQ+uha>Tdn(O3ZLH@E5KJ(pHy=!R -jxFmV5xQCOn?8vPmaK-D+j(dNx@$@p8uP>D>XPs`;PAPf4DJhWgRJq5YG)ec`$35@P<GybRmkivp2J3 -vMS~W7R~VJpa;GfjWfhl72w$Dj9i?>U632A_#+e810nk5hFxCOnI-Ld=lJf_7qq?KRHSX4J7&@Z|%_k -%UkZ{x8)uVqWk)gU7V)LiQ;F34FgfIKPo}_C3>k0cg0MCP}nu^6+x7sSe{V{?qYW;|)VvH{#Txy32E% -+|{O<~9i8BI6=Nbo?sGF&)tH7z(}FH1mbvoE4s72#?d1Xs&!#Ar#lMqQKszJQ4s*BME0N*bBQ$795K1 -<<DmQ=^D+9B~Rwm#%=P6gu6VXilR_#kpgg$8$=PzOff>#A+)s_$y=iVEqKj2p}i(<3;D$+(jqGn0|l7 -Krz@q)fP4<)8qSTB2DYLD}~#|Ur<W}1QY-O00;mZO7>QYf~e-t0ssJW2LJ#k0001RX>c!JX>N37a&BR -4FKusRWo&aVb7gF0V{~b6ZeMV6WoC0OaCvoAOK;mS48HqU5ZPfZ(0agt9TuPihCYs4um^T13PZ8!MvE -+IqTDq9ew1V<mYd{|*b*Nf`F&(sXFBkEEA=zT&Kl?8yY<p&p^BmnmsZ-clG>x=v$8V{Dk@v!I^nC@Xz -z>~Js;xfZ8|K9qE><kexkxUgj_jn(V?!9mId%<u~@|4dtD1ly%HV?{05;Gx{(dP0*%gKkKVxPp)otHj -A$5n48krTHF=>_D5jMPsXU~K4^>6Vc&aM6fya0fui3-ws=d%#Y!+AZbN;S4w__lJkfsKC7p6A}Y_*nJ -xc&4(K5OH!a`>;84ym$xzcG5ScuFwe!JX0XJy%n!zCo@GrVydQR`klli%>m+H_(YKcdB;?DC!M&PpKg -gN$w%zBiW!M*lm#8>tF~p)&zoGV+w3a__dLIqR4Qdo^OXxej_}mt|bLFIO`fYF~h@Gt7I($-hsTtK+R -IQ;*^phZBW@UkVRt^1}vHpL;{l^+b6=fK;}wn>8tAE&^wkwd+g-2BTHBtqvm%r;*t?F|G>53(Ksh@d6 -55OrsgMh{ATpTFQfQe@Y8fpk_5Lr_9a|@iLc9}Y8H!I?i5ogPEHe;^<O?Li-X6~3MaZ*ll~0s$I)Q!T -+o1^Q4JRZe}tOw5Gj023#<DTeER(HGD^jw>!kPWlVorh*EE^K6qa)|^G<)w7sgNpaD-5P3BM_27#uQ4 -3Fx>R7$BM6)eKG4Tk*_5K0spTcoGE{W`SpCTpH7GQaAV-*9gmZOK;%M2p_x20MkvFQ=^(ISod)@Wq6F -nS*k`7*Z30bLE~-&9**CnJSU$??qm{nh3TyDa;<Xi7C#2(>s4AcX>CxL)>J3lrF}vnT-0wlRo+p{?HN -44`yv<YdFhWMQe<OYX8Y|X)9oq4*=Qd;X6L!<>_6*frpMekBb#lr_uTYsp{Fm3|4>T<1QY-O00;mZO7 ->P!1xIDS1ONaM4*&oq0001RX>c!JX>N37a&BR4FKusRWo&aVbYXI5WprO~d30!RZZ2?ny;n<b<2De!> -sL&jLv27ypxO3fzy)&H0tJe0(B@_YT3VuPHWVq4R19^o|GhJmB8ifc&8a%XHZ{+W-#j9#+E@>+bxCPW -1-`ANK7;Iz|B%k7@VWNVXs%LtXlf;rPO_FY%btZUjAb>?pZFOSndfKsqW!?nQ(39KuxN%gUMk0OQ`Ow -dlT^~T*;MZ=eCC>(zKbG-XJH-sNBz=d-elSo#=ma2k}iL-q>Zh(lK+ZqY9vXLTyf_xK#RWaTYoWnpCo -|KX0r*OpLEV^*C_6V1Ah@vTT=_`CH^!eaOkukIIpe1zhJZgiPFI;f)Nar#-elw5Wd#VbA?D2=Bkz9n4 -a)C8(fDkS>}}SF3aEm$8Zu}XJ?6UXLTDTvq?t@ev)qb8&OcA654aR!0DSB6T`@=NPM)se!B3NJtMe9x -V!%NvCE(kC1xSD^jWqY<egCEs6B+R9|(3Nz8#&nkB^x8pNQu~JPu=`6i9i*i%5YnwxUX~yw6Dt*hGiK -Bk3J{_%;08k8t$Vp=V!n%d2UQcc9QOaR+T7Igmy+7+~;w*%?NFxXmxfFw_}Lh2%T>5EHovZUqeW0jD< -bGjFWLz^RhGs2F_4Lwl7D&0eKak-1XpVrDbv8cqUEjZ_$<?kN8fJ<2+VuB2x0fbog-;K&c^s+KIh5FF -L01PV!MpPCL=wB9bm(#DT5D3fEMv}^(CoCkLrOn*(_i3)@<vcZ8BSeOn$p^k<wBWHd6_O^g*VXq)N;0 --iRz*ev`gD(gun|eI%KR$lhvB=oN1?!$5yzplMO6aq{z)vaMrgY06;d&98I>@s`JQgW+{CtBT!Mq%<! -JEkWvXQd7{n5p3bi0GH(Rs*^ld(k<bMD{uar|FlOv~p6{`Ll0PAm*vZ+`88Qvua0QXh#jcf+Et!`6Ez -R`l#78CyZQ@QJC%6(88YFu6vUK}9I{T?6Y=YdaI%B`duVwKr_T{xMQ-D_(E$3e&lV<No$>H_;9N5eHG -3KH?WKEl?yrh=s?FaTvSDOk^7C_~SL9@7~kRK+C2hCDH+VXrK;`<;G%-bJc{dKpY`rF6l82viYFEC1w -~D<8bSmMaQZwnF#X$(Ow@1zXkD;&MDrp{y-*y`>ro`U7z|S0@tpWMgMXFV2El$*|*4!5K)I+Qg~^0;7 -}wN;PQ5h{lf1;wDb*I=UZ+g3lr8oi8c!t<DxBxp6zr!nGtK3&P3zgWS+}Hyjzh*&MyS!JJVVfOq9mT? -#Z@+HR#ICS4{ZZ;cH0w2m5Uk@WZpTrzfH~fdsFzKOQe_Ft{6eI52wP;6U1SCjQk$NlYA9i2G0X@bm32 -5SDPNpo_?#sJ#kBQ>~CiScCbQ)BeiFOMIY0BPCi%Isn3&fHR|@g&2FN6{Wz%B*%GL8Jut3fu*%TTIYA -`OdqH`7Up{Uy@7k$<ooM(hfq_ft<9pbUUA@b!^BC9XJ#h0fW5?lt3@txt3aT66IPP5%;Uko(*56A3h$ -jS^t@8<^epE|tg!me(;K6No`CjYHc?;map*tOg}_j=hq#27l2nL?p(K~@srn8pb(qeY%k<ZRK8KK3GO -yRUT=E}KO9KQH0000802@m7R%rwAy#WOP01yrU0384T0B~t=FJEbHbY*gGVQepLZ)9a`b1!#jWo2wGa -Cya7Ym3`P6#edBF(`$|t*uQ;1I2WAN$Caxp<Om1{jd))magq-WQ~{^d+nt8?>%?MdU>^5S_(B7<hhSI -_uQ8pMbQ;ihAfrN3MuYaM1@$Wf`lw{Q5n5eIYE+TWUX*oxD|=5G)ix*sHB0FUhv_llxxC+bYdm9B-SK -LRW6fJ6h$MouC#H&&}d=wTDW}$kvN?GqB1uTZygyqFK8m(DeFc-u~Jo%ZmG<*Nh+Crl1p~!<kHs0ALO -#Dt4g>jWs%S>qsl2=HkxnCtt?djJ4g5i0W#jvXp|Kaf%((fNZ<p!uRA<2e1GnbQa(xziBklVWO`lUck -Jc-G0?t?&o6&s=UXyo_4C>F-Hn~zes?~e@)3)|$+zd@abq6GUOL~XB0syyukV8V+@Dta)~fa+=j!OBD -x_<V8qYV${i^u$Cdt9=RFw-o{svGdEpSRcUR?eB+xv@fHV!f8v=AvsRW40qOT}X1IpK(A!a6e+(=+j_ -E@{?yV!rC<nUTt(dWNW<F`=a|r`n}ZNLEl43vKFh9CRJB!I2;pj4bKpCs|9Et>W5qON3g8QoD|Mi`?_ -TfCur$i|9-3?kgi@H&O(&ZMm>GiQ4--v?jpQMyIcE5Vok2rO}%zj#v<l6GO;rMsbuz6A?{2{-23^dR` -O)MZAFzDEQ8^tR?adamxmDaK%k$vlVr&e<tFUbCsQ)oGg`FZRT9mC)K`^Cupb>1-E2RUcP+w;wUB*qe -XiSqK52A(B6Ts@)W&1=)y~nO?(Sj-_%1kUW|)vRVWun57K~c88(FA2{Ue~M=pe<Z`k4WHL}9h%@Kmrx -hiFtM_~l6fQ5_UVWp&gzMYCMy~@O(i+2;TpNP+6-yJ*j$^%+hux|uDU_ScX>T)oR<F9R-FUh4)Mc+8e -(*}p{df(<emaozCx4mA!BDXQ2jXgilt?=+AZxf5TOSvdu$y)-(s6d-^``85gpcz9WhIt5(iK}5Zcshg -0ZYmz^$Vg7R6vcg*P^>l!a6#Iw2amn*80<pd6YzO2VSizs9hO=XQ+<CglZ``}trW&RPcLt^RM=T<*a0 -VqU}Q;KBX1BS?c}=Rt*88j*env?ACHXuGVZ|g3z`M(Tw{#J#}T5!<r97?Yl>fVZk}Ot%k_aNR=>Qs6h -D0bDqMz<fgzE7Y8eo6DOJfH;a;1ZOs_WYF*(Fq<957CEXWwZ_Gr3S9(KV;S#0RS7;R?aEf3>ivI7!7# -Sek^Ze;aiUOVY+o}Jkr4fsGtNjn!SUuFt4aadGhfEwv2_I2hHGE{%Hr|^a$-aB3ScNZ>+p=Htr9CwO$ -fqF}svb3R${l~p=@Sv9cLFzP&ls3xkXa4PpWt<v!8<zLqRD5k*^L~^$F7v1Qpe6Tsvi*}j5F5+us8Q> -B?M8?isQ7Jh!Wc|wS5t?e_|?>K1cs(f1f8n;z++bNWw;io{6^}4X@`eTwZ;m~qzw`HI_GAPTdnf8*-< -LHib@OAh^-`PuvBphuTm7!EU5|ksNw%@+a&`Y`c)unnhx8AQ>c#;jf^^3^VloYz$s{A9>oxk|4;WGnw -3X;-@YIIHGbbdzA}6#2f>kH<MiQH;bqk6!1~`wyHVy^7efsO8hDO(k_cY;j{<rG4#KSL&=z{+KQEL48 -u^8_&rG5${t*13F)PB*8~p`PO9KQH0000802@m7Rt_J5N-_Wd05Sjo03iSX0B~t=FJEbHbY*gGVQepM -WpsCMa%(SNUukY>bYEXCaCuWwQgY7ED@n}ED^@5dElSO)RLDy$DbFv;)&+7BOHxx5N=q_xGD|X3i}kp -al$5vtP)h>@6aWAK2ml*O_Etk!O8<-%002Eu0012T003}la4%nJZggdGZeeUMZe?_LZ*prdVRdw9E^v -9pJZp2?$dTXmD-gJ@mfWLZJKl|B)iJeR`LU`vvd;D<l~So-5EzPBffxn@Nanfx-><vpJs3!`cQ;{`We -}L@>FIa(G?=F83G1(UcbPmJ`VDLQx-9ydx5-be*|AO>931hsFX~n#b=$LUU6d@D{cULa`Z?di{T~Zam -pFHx6m69hLh!OKdR8SD&A^h9S1eic?qJvPtGcS&i=^yWg$or8!c1UQ7zMCD_6c7ntwN_`{~DO+MRt&; -=|R2S@vcuAesKXH^j9wQmDmh@-I#B~3YIIGu+R4b)>zkOYQNt(fQGJV>Q%NYI>8Rs9p5I!s!Y_wXFnb --;JfI%qU^V<-|$L~Sr2X5bB^0k=ygM07Uf34-~u4_8~wE8+bwT*9b4BQ<p6vN>*@ig@KrvL*ck-c{UU -i@m;EAnT?_boQfyiEe%Li^k-XU<yNYI!(2WBHx!z^@6>BTrWrmW)V39$N0qX$3Pw(HK8YbQ_dkdVjTY -W2UFW^G#c&o`4or$b56E9ew1CP5hM|50tNxonwa(t$E?aX@(cUU()V_OTuwAn!dpF&(N^aYIG4ZZ!k1 -5pJ@tK^-IZTS@=oN`<s2a%9Z#IC7(`2g^4c<DT!$B?-yMRo<M18hOL?s(%8{kUE8gM)^)k}U1EW_jKM -Tl0K=aPZd`|9pFV@+yCR{O;M0uU|ZeaW6qzfVl@{1865lR)uC(80LqBFkp6=fV9dl0+HG>dq?kE-q8^ -M%Jy%8+9(pIq^W=r2)+UdDhLBQWXB3dBs(?4+5}Wm8oDV&eksQuCM(bmdHaVzf$(0%)+7!@+ZyOH6Rc -S;%mx+?_FBx(;QskMx&Ie?M^p7&;)<Uv%Whs)6q?z$tV>@#lF{NPyk)_1J|RzrrZI$!5O+-27G@a2#> -i=<;P)k7$NHgbX^RKH6T!SCe8QdXfl=+3k<NOi>rGv55E}u$qAZ$buXGRm(FaAx4->?F-wn=&bJ!^8e -NJ1AY(c5CntovJ<M7M^^`8HJJiC{?8+I;2-w0aC`q~kZgq%R*dPLE}ay|5Q4g47Tq%gQ;$@@(W_FN>q -1^O0OMcovuM!I<mL?QB*<)iPjKV}azOSv@?zUcdI<`Qd>q&~*!-0lxQ(q?8ATMZYp^p(Wg!<CG&rafS -j{Fg|Hx^oW@P65`qi)a4QGqmnz!~SeQp8&xATiyp!5ePUA%ruyV{Hk^1ATr+SoLWiGon9?Y6}`w^Nn* -xF$fBR!LKLI(Q^c@z7?I%LU~;@|iOFqQK=aTt9X0jc%#yz2S|ek8lCr7g9*<kmv!cSF7cCVs2xDQ*tX -)xF78k&I7zU3););g17Xlz-z(F9c8BH~FxDKbcTMWhlrq=fB8iui!^b}?%J=fuZ8o;i|ozq$}0|2}<T -#!CT&FfC|Fq8nCK70RDrZ@hDRuvRtdnbMY7#R8c+fZ%SkcO~M0a*^(`G#%5EQCY}Oojty)Au`Z_~5|> -n9gC90XH7}Qa}*GAE>DhRt;Z0c>3f|e}4M-kKaM6v3~eyRXuw0^l|mw(}#b0%$}6R!$<7l<LXKE@QIx -T5&@xgw%gx({pj&`_u<deFEbXQn&)4k-*+;6|5;sEOUNzWQP+)xdL)sE!1$}WWVwTahmkK@C~OuNP>a -9ST?dvIrRrvBG9(@ZxwfW8rE+-SDFyIh%!8;S0p$UXpN+k3>hH~N>)gy`?G?<0R2DAkj<+DryZvnLK0 -ixO|M~u>Hz&t$UYs1gc@CLNdJc2ap<mzsbLwzKpxl|<JnM#b<~!!C%Et6Z^i|z1ohi>>{QczT*RMyTA -VP76ogSaQ@W%j}OZaDR&Rx0!YMG=Q)+?qd8r;Kaa&hp#ICG}<Jcrv|y_*5q&;|>(b0tiCxrE&=^LLdq -@!QMUZ!ao02}vl%;wCZng@7sm%XRum6X5eF%c0LH;O#N-774;nxnbqy5`A1uvivmX2U8xJZHteh{y(< -FC-VdC($t=EodnMGh2?o9?vQ*@VIVm16&J7tof?@;T~%Wk2oQyU`hgNm6R)HDhKKB`=7WInehqFPV-E --?R*bbtRSS#)q&){w32PNrOw7{2Up*_;)0_%Ia+b<u3b0DS2k_J}pMAIY1rH?~AjY#r-)Y@S6A+z4mB -^*@n0Vu2R(wB}Y}Y5pH2wvu+Ss{<gI~~psDeOMxaZHf2QeV2D+FIHRX+=Goh|#gV<l#+OwSHxLD(lCD -Ql|ay67YXlz4B{R$$na9-HV9mC=pqkg+nov+JN}jQqY~<5IC_?Dgeh`1ijP;36=MqFD~HBG!b>n(QMh -hn}KHphp2XGz~^IX^d~UH<&a7unR<y{!o0dR3mEff+E`LCGTdcUI;GY$Dd!#=W#)^h9xF!U<lDeQ7t* -6uy~d#)Kkx2;6T&}_#Z5N0a-NCab~K_%A3QjRFvQddXdiOA@4D8r}8+?r9wDZTB<1{C*WH2yaA1)6wX -B|u<jn%A7tq`Yk3Y=EGGlyjX-OIQF{(yx`dh&)VyLn>$YeN^SYmrxdF2?W;WHdJv$G(ouvp9h$>B5IE -Ug#tUkwliT;dqJ-#ZE7!aGKNAGf4bi5pXlm^b8_27zEL(fQM7s=m?W{}tO>DBJJ3(XVos%kME{hD;>4 -hRFq@ylrBy=1lH_aA@%<ooXrljpqsrl)+&&OoxEa?`?!*vR(es_1IcqFO|tf>}e|16#tjyMB*c^h#9v -ql_Hk<_A<#W&wLVlDI{z4+10DZ*bz-xpx~Y4{}HCorEu=s{2fxpkVwIkwc9i4jIe9q%;9hk%PNTK!mU -c?>1ALxj`NXi>%n~Ape?JPs!U$0C>Xtmwafeh?B4Y!C8zbC*?(LIs1jzEiEPjBHv`E76fQ1aSUu$v~q -Ndd$bl)`wC;iDUJZJQP&wMn$Xa@MJu$l2^!=AK47oFZfiBMlgXJr>{1N&3K3qx!3J@F3FwYF#88C{`y -Bil`-q1?!YMQ0=^Ukh7}KJiv*W|qjzYRbdsI1YstRIof$`?rA7asgG4@Nenvy$#+2|IS5A+)l7G1QwV -`o59xI&|I9w4PcXxKj<O`cJbVyY?t`qO8pB=V09vvCUAP`M8XOTbVutW0}_T=cCr{czwIv%A0`h>BW# -y@uHU25Sho#x_fi*LJa@M7<OX2MT%GEA#{8W~I5L!kL2ueBVpdSd}Hu)`%nAbHJ#OIw|bQITH&B2xG2 -JM``%YnfKuXl{=ipK74RDAXw(p+8vtrJja2K*g2<xTJY5A7f^Y}x_)oOew1RE(~Zf@!co0wk|Hq-Z!1 -OrA-s?IXRkulNrY^6GL`LOt&Txt#F&kkV%SkOBl8wW&^zi&Kr`k5GN<?%<z^&2=sHbI%*%4<s8zvTfe -zFAP0>4`2!NEz705uticY0YT9~y-11Tvk8O_Io8IDp49>WC&CVS5Zi11qyPkBHsMHdvj?ilSll$3~$> -&q#b04>qetT>?2bIJV=*q4b=^lq+EtMA`$`F+Z)Nw2{yz@CS;VZu|~L_ktguj|r@$c4>Hfna5Uu<JhA -))$+e9>Fdh7}9p2Mi!+P_`3BzYb<#;MH6)YlnzMa>!hdWK_SrP_LQrjGNo7jbDqU((T=^psUn@G>07x -qv?)EF@sqKkaH>cyYDgP#dGC}bb89*GAg;viZpe~i;6vlDDaR*j*ut!ei*P%)mlQ|QmCJ*X()$Jbi8} -M0Qsy8x9K}}lOc)INWeoval~iEoRXnU=%Oc2VHb(m}CaC=Q@y$iUS4A_bdw63a4IFe1;=zfSD`|pqvK -+H$Sml?^Nk)yk56b4ZRHYrs;$01?Go29wsO0Cjuaj-jmm7T~WwjI@WmX7|5ZekBt=a=GYkA;)!CEFQt -?N#=#Xh0NuHpi_$*iTDKmZ_Y$m0Urei^{a;yBrW<6wYZKnpTSw(__ebfuf30&^nlxd>X~$aw@BRy<wn -SW)dw@DSjHz!6{&BDC&4_Qv+tZP^TnlWK5N+@qMoL0|Gf=EO=p4dLaosHtnrB^F3#7^2KAJTp*mjIyq -1NcSf8$y|O%^c+FrWe`H%LH%*^GTJnS+C9%YS^rKSq;o6@J+P}&k6o2Z0B+x1hD%e{N2k-aC<9!pD-5 -k<T4^4j5tKx#+ncu_N2$R02HYI{^prS;(T&rTdF0&8Zg}Z|pFBO2?41UbNj*sZ;KNh5$6&Dyt!@VvWR -aS%liQR#icd1xu({)>n<!Uy@Ldk6EM&pEeiqEYjye`p+VKM>blDW!RaICBhhDGc*h!pCq~wOam_3iZg -NNnB7{BZRihvbRk~Q~$AdFl>@(-<KfThXV!}IWvvSrt9VlWk+Xgijh<5ctLTYCwXn_tVu%!!Owj__Lh -bVr&K&gdw{b2Tri3Jm|8wiwg1qfV@>0Ye|-$1v}Z7^4IY0V+k1O|xkAfO)QwTBs4^6?3$SxqAja+1ly -Lj7!2O8v#YE0?P_Xh$q{wSmpQv05XaX7w*yg2vt|FVu$>mW4mjs5LKwcW^4*3b(fH&Ni+-@qv+5=vOD -x-8Z>1vDxw&dQ@qXu8`*dbOF#wlBrK}OMI|mDc3})lZ<YtM;K;sP2xG%*W-XF@VZV(8(ZU#kh%wC)l= -$S}=5Rr#u{NM`A_)lIDKIjU>Ch@lWfHIn^uaPsi(FK`Cjf<n{S}fvMYurPeZicRdHlGZIfA-F_gAc^b -(GYRNyY8pp<R#RVMTfLMpvs`g1c7OL&0{;%bszkg?{E*r;&8pabHCtiTz!v<M#D?f(Uzec3oHw`h`BX -yeDe`*_b-o0|knYnSkXdz}oVT*`fpG5jKTbB!Vk7ko{}{wDq<>#LA){YIK?d<B-A{Ew5zY7yy&-CcL} -rbmP3DO<D6O(rqXL3hl4r|EP2H770*mjRTx<KbRlPph|%-+z`-=0~s52(CZJf1nt*Z{I8P<u$R<vl06 --lnC#L|eUFtmVku85i7U#O?5-#WqXIWy;Tu$5^|<66R`A@FBY7eEy<Bx*yQGQsuw`Hfd%FVF7O}BFpC -X!s7QI2K-|F(9qHnhOl`gE}ZWJGjq^hyrj)#!Zv^t)0dXZRuv#0gVnOpG%bp>Kxuzu{@&E9SeuB@ho@ -$=-u$7^pvbUDhAqM#Hlp0M&RsCSr9N7pPYyysk%an}i}Rh5HTa%#bIyxg`H*s0|Lp<Y#0HFl!tx*ufA -7s#7z7BB}P8@Ej0K=Kw>F{-hoi)1zQK0c6JF~8T|v(huyZ<EiavtPRz>JV_Fcb&f5BPBnEXn}#(nssK --nVfwd7{Oy%hUP#pJfkEnkS8)!tMU?vj;TuOSg02PSVPVd-+wXyb-f8oK6GGKWuf_vk;B|uLbTtGEpt -3AAUfRodO%3-c!YE>IpQtk)V<GsKfEHlvHu3hM2DH=Gu;ypEk8!eW&I0ia-9r2tly@R?5XpjXH`p!oD -?g5#j*g{%b`P!2wqEs=z$50ALL=4MF&p{ic5xvcrEgU2jC==aAkSiCl6dia=}%DlCsi18kRktR;FR4$ -gsv-%28oXg4TiTL{ZY2M&+A*cXV9FG31!+TE-8ax|p{f9Ui+c@-Py2uv^}s*%yV`VaPFBz!=9MfsUAk -a19^+e37ivBT_De+3=wDO7@2$flsdC{+z~&D=~lRzLbE4Yx7b9<fe!E{Z@)D)U|sY_9}EjQ;F@w;+`X -l#XbNh3;obL*6Sn|8~L2dygt9CvmO1y7RXyHuTzj^o#A$Ca<_yFk%NJV!wQvF9#g4uNQ5j35kSJz^O% -q$DLgVf>wC~@u-Y5WFLCD(+E-xezkB!yJF@9*WPiIIyQoDE`5MlcrFsyx4FeP8{2b<wD|0YiH^{y$O6 -lg2x_F+1@gH%X6=IKVH@e)B^!VPhl`nZFnZr=q_Z<Ycs&pF*Yj28Z7gUFH;#$XanRlLN>-1*~01(wra --q+MNjf*3-uBFtHG=s~-TJgZA7oAyau@2ad_~onO)EHO%svE_P<>VYgDD|Sr{5ibi=Yx=??1YsLg8#f -!C2@?;bt7=bzdN#rKhGhKOHrHk0pBHyc6|nq)LV!)C^*9!S0Y-&hjxt^J@$G1Zdn_gdg{e$YJB;n9-T -0^FElh?om1N$*s8}KxN-y-5|))bh34}e{gbsh<(Rr=^jt>+w^=+-OBsa8hNYa#>|V|q51iOMe^;pm)A -viArA5P7L?tW&w@S(dh4~s;1MDiV47!l7HD_naXaY}b}6Y24m`zlAW3-w^Vsp>LWb!e3Iha28koy6yo -asE{UCB`8ver)7mkt<#~zF<g6Dj!#=4gEe+Sm>y_XPC4jr-|-d(Z3F!_q;By8BLx9g8nBwISi591*Uu -gIa1=TCs8g^FCLtr1uyHNmD%5NQf*x;A;R^u1#?jde*TIy^|1sR1?m!fcd>@@Oh@PDd9rO)GC(r@<a% -rUP`p<vg6a(3WF6{snu8**pbSN<hpZ$~|Vfz~sg~6hF)2-30b-)n+{a1x;ua^gza1>2%MWv)Nw}3I!3 -ox2@X)d7pQ-C(zqz%mml+B}zh4z4&;Ge~7d@-$bILo3xd<-Ze{axA7BHz5Qi8)z%-4@zVdD7Wd-`38b -@P*s7lrYI}9u*f5>0n+g#OXl3u5b+>%zP_{hl?1a`G8x#~lsbI_eN(|Wod|6mU<+f=S#6&gCfeO_9H$ -wKZw2W1<G+0WsgK~`8gk2@4ZVS+I^~7<KaI-6}Gqu+ow>R_S<*L#foK_wunQ%kr$pBqux{Dz5ol8@s0 -J*WytwA_;bmhDaqVRjkn>G<ciT&s6q0uNVtX}y2IFQ{_8mcO<4jf&oN@iFkRfPbjO<3ZCTuED=%Ho79 -h$dS+Cv$(=Lg_v>4l6@Q4qrF_AZ}IWomWn`@rEhUZFCA-hl32UwY(15i7pqRIijQ#Arsih0po2HG#^d -NfD~Ye_qy)`?~U^%J=z9d4rA{ed5vCe)q|;(8s8X0nWdNCWDHifv4VQg^)!m1mXR3h)&@fi_tdLIM?q -Cs<DgGV;z5n#%Q(1k8azTS|HhOPVK~i=mU%>rmX*FB%E#ApWr4J%-<RkZX6_r*P+g|b@2xnEKy-MzoY -tAI^5_z(^a_C({0~UMLthG_FAwRr4zY(7Gm`M<XRK$Aypk5DTJXCEQBO#ileFkd?+0Z>{1;`UK)K(-{ -@Te6nl9N{`cl6A8xa}U;{O9sO9KQH0000802@m7R!m7DT}}f40AUCK03HAU0B~t=FJEbHbY*gGVQepM -WpsCMa%(SRVPj}zE^v9hRl$y=HW0n@6(w>AWEtObX=$Qlqn%AI*(kfWQ41L;2G1DVu}$~(-=}Qcn3>s -;a!EKeG_HE}UcIs@%ksA`U;c!i_Y;Dcjl>z1=U!;Vin1(=f?jItLAzqKdWK#rk6*nM9i)}?X6A}Npk1 -T<#R&CqjrfQPE%(|s@W}*dE{iqJ2*cVFszF;8IRr4PCEEyv{P*19ui?eNNpjb$J0ai7viSFc&O0{i0p -*tQ7doSr!#z1c;w%wnix<+dkwD$Wd7Q6Fe0bzN^{n-?X~S{@7LBBLZ==k@_1An<Zn4-7!WKm_;0VICA -+e2WDw{YRHg+}K`~;oW@=yR>7X4xsJRrH|?H1oanNi9H?zp5>D)I9Rzd}j37(<B;hc&)MYqfP%EVa3J -|A$tDn}3fh0~(XxM>r!*k@}t*()R=fe!?_X^rX@<JTA_IdlDwDg&E;$0AqE?NqSaqfRiud7Ix+?fTQA -_#DQH4$Gf+el}WfR0_70@;nyCGhfkkB1T{Ira4J<4y`(#Q<|A&CQf-q~AD&hC1%k8C(ejW~ohQ*xWEM -C=0Iy+j2zUxogWe$Db4#`WS&KdO?*cQwL^!2AbeK9NNDycXXDfUVm$k)*;7>~fBz)Ue4&~TnzymmMqe -;PztdNAE-4`aBq2_8`85Qnn1yd5I5W>n0i6#SWRkMvjotKCU%OJNIa7Uc<r;#$;Pl><cGiK^^&&<Dry -LigH-qvyJtypX`jJ2a`ptE{;m^{!f)1Vi-Lt9NAsl6TVpU&J4?xxo>krADc!e8S2Q5rvKF_4FGB&iwd -#w?u_{SIqJKj}1j;hMOcXdG_yNyAX}bfQ#2V7;3+OXGYCQaE3&N%w~zk2So5`}OZ}i%q*(I~MxI9<@- -_^F}xDLj<gIm#N9Avro92iR)Q=-(5Vq<9-A9iTFg^mktp^W_}hF_~zk|0k>FfP*nkkrp$I_9X9d!JZ` -6Qq=T3b)lP|frKEuqmkW(c6w%P8Hq;4s$m+=TBdH04`;D#epJ>fzc6D`%o`dUAe4P|MgMRg$SVQ0F(8 -$7ZfK?R#0xo@Cs*#0?O_aFnA$`%1GQTkp|3hb}9TsPOO6rP#08mQ<1QY-O00;mZO7>QwD<0_m1^@ui7 -XSbu0001RX>c!JX>N37a&BR4FK%UYcW-iQFJy0bZftL1WG--d-B@jJ+cpsXu3y2aC?IdDkOKQ;zy-E6 -U4nLL(6}40AP{JYwz){6M$$>VqW^t&q)1V=;xySlO+XO6@Q(NL+;d0Aar{=?HI<+xS@Mc0a>w<Wv{I} -jQ;P7W<OS72sw|4*IO26Hq$aGUyvk}=L08PZti)=?o0WU4dCl~;Wy-w}Dq2cW6L<;BNcZ+kGf5W}OUc -JpbJ5T$CG$;NvB<7&d7I_8tSN=eB>QW_lvY_SN>(YS;`rnF{N#L|AD@0cf1h8T{c)0#PfWF<Q3EZ!fx -TdZtf+YAT+A0#dQB^)^RkOa?pH|Iok=FgRI&Sl8N0oXbEfZvyg3$4!wURzBBdCWwO(WpV|MSPFSZwF2 -i8`+xp7NB!2Q_L#u|_nv{*B@n5!I@=H}%gDFq&b(cT{3UfMT@gf^P@={P<4>Fvp<%almU70Z`G=1Nn& -QSheAN?xot&5asUX;fu3SB29D3Tmoz#s6lgp`?Y*=|-=uLmLTzQEkOFyVp^KAY_uv92zr7=?C*J$@7N -REYBxV6qRgAa?JKx>o)gh;T{P-O+A1n<kcGw%_}hTdKwY9wA|Voyd={b2{CK5k<QkP0%FuvTnO;1(XT -4jtn@m*o){4e8j}1*s|_>oNXdJ)?e6AKH0E})x52q+n6ti>tfi89ye5%d7#g3NcL<uPfs1_(p+6-`%Q -P}xx>CGaY&BEPPoZg*Tl*obhk^!yMG3w%J0dtLQIOfpfI35Z0U!tolmSKqgEYN=kVVWHimA1@!>rm!R -f>(Sg4-OaN^CUXfUatYvfbVwpv>*sF}Nh~*P9yp*Y7k?5`Xzhk}qE;ab}^I^k35uok^%`(r+=SJsYW= -og|RJQY7(bh0JKymE@(0)4-6)NI(X{j>u8Po~+M|m4GasESJbnx9kJEWmPgEZ+y+1oxl6oZ(<VSJHm{ --qhLd4%wyg?BHIZ4Kmv9J=W-Ls4M6#ZBtIUJ@5$?<qoV^`2O7c<j$3FxTaq#;8qk(;G976<eVEa)f#$ -tZ?ijEuTH9b?tHT{Afr`zssm{V02L1!|%?9X;f~~x?-P7@(q7By|n0F+VV}&9`Cho?NgP{iaZ#}>v0R -LZh!bC%liJd@9ZjsW6;dM%mJNA3aA%2P@hZ0MT*+5xmr%+i-^*UQnHMGN741A}0bIV?9GV;zc8v!}Gs -e0!Q_;i8lpXpFaXj6vHpqg%P;<OpQf%lL&e9aXMQmx(&gHZzt2J=<+tNowYq}F{`K_tZ2uztjSv(|4s -BQ@514iThv(z`ctfc4?=IDJ8WXQW|3L|S;P81ubW_yAo9hBHk{E`d#i+(Kidx6u1&6=>pscdB-z(P(G -_io{tK6U;m&7^XWf7?}SsSRsu)PzJd7;zI7h;Ncm-E8c0PK^xtJ&o4|v{s}J`t@>^4v<oh;fMpwUI-g -&7DuKp9s|u-lL5mxRq;0ma*o=4~VvtLq+;2g9IfP0OAJY{5GlU$~qw2_J;1rSq0Ir0%Ayk`<9tJZuHC -Vi08YTj=f|*-cLfnU0$Bu5|L69XLpTW8wX=9~2mhmSQdrEq)FdTocr~T9hslqC8Q(_O7tJl{dW22Ne1 -s<?$+$knAVaVYvYj7M+9(LQ5WeQp9;Mnaj&^~bXhZ%m{u>=Xl&pPD0F3xbjYoen~@19%e-Fu1wJGJBL -#MDUGoRaRKFb$3fdo|*UryC`yL=D3!&YGRXFCb#CCs#+;evHM8S-mE_y>!~aRL%TR12W8LJ;NT~QNYg -GqZ?2MT~W2*T~Sf!`)+n(T}>OG;ZVYLo+tgRz^Y{$JnaX-e;k>y@wJHxPVv)$(kyq!F7NZs_fQ`eNAM -U078g+UV6ibYocp2h;TZ3_qOrmpvad{!#QNwBii6(-9AS49w%A&Ff`g9mDl<n%Cdc8iD9Gd}fC9&@wU -Yqa=7=<Ym?jiD=WrWHBEughGDoo3U9pnPkttl+O~8c&;(%}^gOA34L)6S{^iq+#wecUg&=1!AE}2Ca& -{WxVh=IDvFcgT%XpHL~YeT!y!H=e4_SOHV;7#IE64Id;^5g9O(Xrnn9l=|_ulaFEw5&;-1weCmi+F+= -2|M!+&p;&2?q(1$W=!|O9*SpokR4{{)qZ!k0{L~c@3@XO_XNB<b@yh6$~+DHOm(sTpK-y^Vv}Sw?a%s -157#^V(3|I%S+=lTvcnwLk8p<?l7~9L9tf0<U^+twFxev)o7ra(3|>zq8N9xoXz+TJY)sG|Bb-sG2S{ -jiZRLOa39re1EQbt**S}yXC;nun!s|a^E4-e`SjO~kVJ&0oqs$eqdJcQxwdJfTJFk;*9-Bn}08mQ<1Q -Y-O00;mZO7>Rus?7n{2><}r9RL6$0001RX>c!JX>N37a&BR4FK%UYcW-iQFKl6Yd0%&EWo2wGaCwzk- -EZ4C5`Xt!L1-UV-jju7AARe^<<j&TT(>FG6bsY{1X`kOHnOB6r6$f||M#02QX(bGX_|*bw&wfeH$x@} -g7^ISz`k66WYssJ*t@&Ck3kU3W=X<}B1zbatpoh>mX}*`EB@CC-Fz-}Ti2CpL>5FW$fRzPTvhwzaVJE -Pw5ka1XEXeUZKM`y!{i>x?Wd#=c@uRXl-%wbL!4G+Bc7T<ZaN10&7PNhE0m#X#J<jDAv&55d@r&)fgi -X!yoEQG?oi8e+fiMVhlstADJcGrD23upr6TqoOpn-2-N>rsMa1sfx?_Kq11<mN*%w)(^oZF9>tZeIIQ -b^ZtWt5!(+9o<wQ<|XLicX)vMOcD3;8UP66`(ZR3@}K-dCA$oR>Er?yf%EC716$fB0|m>H5o6#BPPIt -5Og2ONf&K7vjBWc*Yy<?AGE9c&X&3MK2@vhuBx@@F%7!Vq4MJtYse2l;Bb{kCl3ewa^+!I{6=E{mFdu -64M|W@2)Q1T-|<(nBq_ZNnWW$H@s;zd}Ccp(p_6V=-F(R7F=ugLIs9bPpO~;&X+R=KQ%A_V<vJoQJEo -zf62hth`~quWSv@i?#$WZ_oL_;4bULBqG?shIP=5Cs?Ardc2j;k!L|~z%Sbo-eEUA05&PXvYSw~Eato -pWez7k9tf^R476+D#Cf$(~^pm9L^pV7oAnXn<ORVxP?GgLh>V}E3YPUNEp(Pe;7l_^n<N}l16k->XnC -qPB7IgI{a3xq-HLQ<u^il#y26#l-v?38g@b9B+b_@{)TIL4u1;vCA_CDfs#x;A+O<eKkC-xSMR)S{>3 -Iie&_Mz_E&V;8FBGc&hu7bZvA9*sg5DyXk<{RMPWd^WOfLe6R1hIneuWwkbs-{Y-BJR0Ox>kOlgwJ`5 -brXT9bCeI*0!1XZWu=6t_9BP6??8)L)MDaE0?3e9lHxHy*f_LO`3;~UBR|>Zz_5KvOt~{knR=UU*YMF -a^AXHYvCrpy8;vs2S2KonQOJkBQue&AMTP~#`wX}N@!C2r__G{TGK%?Gn*f!KN!a5~!ds9;1*MHvDAU -|L*`&v(%ao+_)rj#!Raz)8*J8|f%QtHk&5BYs62r$`^l2Ir4FF1#AW4#hePXmI^6wxCBnHte(U6uUCK -rn97}rT6fzF4j6s{q5P};y?<;M8YbPzrXrB@bC=dM;puo@zzdkuvk0EO|(*bpQs%pA5_v0u;529Cvv? -p!b*ZR_Hr^T}C9f$-fONh?IT1wdF~5Xh?7I<XEeO-(G`6G?DCAF)yet|o?kIHCk-D^uQx&{sK@h8xI| -rvDmDxyLQ%endih$w?ZSvtV;*gboN&WXXJYV(8N_xJYp@EvW7^E=tgyBAC0>_Q`s2z6FEE!cG}rb1?Q -T-HG%ef%OF<L$Ce?7*|8e4}BTqjzRIEdV{)kHbJ@H)WXaZpo(07^5T&n0BSdJhwdIQ1!@zV(nd&hQrk -xk6#<QoP1}|bz2bn%G2c^)Ts0Uh?X`4Z?=)?ysu-xULmSW%lqm$P3<foaGyyht2xR76@AaK(C+)!Ro$ -|B*<Z_ya9Sq!;_`Zk0fjrM4Bjse)=ympje}7uXIz4E=Vfs!a4UuyP$7yJg%?GW;xzUStKME{hR9j;j2 -@r_FtwDCE;1ssH;oH5PBKUIw)rC_5wk0Xb6sivTizMNMDRnJUnM(k7SPd5EZqUOK#p-HdUKZ@?<}FPH -qXpb%?5%jDi15-y+?lxN2b?t>J*q_+k~Ruxq%8K`?4Pshu`DW{b?~?6Pa!@YW24uc4Og%R^blyk3YL; -^9u45p<EUyNv>aVTeq(104hVwnWf_uC_K%@KosyAmYv);H1TTh6V-)FLhSqM&b3T8ej7-^(ut6#PSX= -tl+j0MJLn0d33a;{8i-u~LwlJu#uAtAzAb1`&>y7{yfJ$&U&{SH|`aLXPSU?{c-{`7n8_^SaHT?-Jpk -<!a17`tC#WzO^YBPz0idGhDSI_+mJ6p0(lr~uVttlbu1@CxUG;^qJ5XJPaYKshu_;>K<pPqp8CA(~uf -}!ekE{MlgeJQqNlF#((l3jtHPN(5$bql?A=vk)Q;<zFx4JHCz?7iBc>hJ4foQ7K$>vZJDci_x)m8ZvF -2|7sY4*lJ5N6bE92lX8-l_n;3TA9<GfvM5}ikJWEX#`VNS~cxh&wl5<9ao~%<<AXlSy-l-r}B1Kozz6 -A?X}r*aT@mUqms?*diX5|WSYtjz3}&FfmZ~uNcSRx(cvUmju44Vbc~ZgG|=!wo4U#QFXAa(;w8|;d>) -E7Tu9#y;?X5kuK|$p;Oy^jmDVUdV($0-RHXRPG4VkNy09`w{v$lOFb7v*x)UEaMU~o9F5B?bpbf085~ -_NlqWr92PY*^=|E5ug;evXQqR9Ghaui;SNJtK~I>`0v##=>SSdEZ|z_lAWc9{EffHQMKhO_9Px-c56; -o$;il(QE01vC4gL6v~Y!Uc-<X`F+=Ju$K86V4rtLtvc`$mpiSo|&*NMp7n2+x`5|oyQ3YgPV|3_aE^j -v(;g9bn14a4>?`8dH12yKG7}Q5ifwiH2DVXewg{ag^-tY_krW{Hf6z%bV!AL+Hg4c+9TMKE_>JJOx`F -&czaNG2kq`6b*ewjm4+oS7a_xQ7;U$vxZo`qF(^!H1!(n+iqon-c+J+Ie(CHNppm&bR<8ac(SI-g0?B -_nxj(VHn>RO0K$~Xb!i8@4U}mHZR7*+=?6Iy({C<JwZB-Sd6Aq>eqCPPky1NHF)q3{;-35gG8`(Lv!c -ELafxS@MS7y+h%jwaczv0;>%wa5D)USyU=l3h%cH8kHe9{FqK#J}!n;Nt2JGfO_JpuyCbqK6;Z#Bc7# -DjwsIN(5Zvh;STdWjl+@5ry=ApC?3xl~YVc=J~9n#MziL?8w)e213_7_*@aPFIozf29<^h6`OtJc}v% ->)~wPtSM2X?mqG_O#Bz_vIKd%BM6*Y*7V^X&Mij8dU@{M_ZUpaqskf{k;)jbUYsvIGQ{?;5qm&r#|bm -Eb_Bn0c>2m<wL1nM8gEQS@ZO&so!Jkd-hB&VB>Qbe1$#UsQ3|}7xN3S;xbT9>1SVqSxz|E&{G4o_>FN -5Wo2lNB+y^b-Op8{-CR-c^0QQ}EM#Z}F|DhLpZdnWG6UDh2{NFEhF`AgE{rHZosn#F^DDI8H4GS3)gS -UtARqxSox||y7K689@t$IxB7NH6MJCA79Fbm1xpIu@1d15D-9-7|biYvMZiDN$dKTt~p1QY-O00;mZO -7>Qttz_hi7XSdSNB{sJ0001RX>c!JX>N37a&BR4FK%UYcW-iQFLPycb7^mGE^vA6JpFUqwvxZ=ufU_{ -CQ>WYPTEXc&*)}c$H~*H6MJl@og1Hrfk;R~O_6*AX<5zWf4|)YKmsI{kDGh%r&Fi0h>yi$vENuG2!bn -F+z6#)o-v*!Ow~n^mzB&`EY1@#h3~B5GQ$R*rmT>~p(;cymogq@qT1%=11rTpYoRI}yOgWC<dp@t5Nr -M@^D-O-K`<K04FYFk!(|%Ql}wdwl6mv1;7L*fO19xom1p*Mny*%XihbP3ji`2oXvXHvuOj8uGA}pwS* ->xs=BZv3Wga`Ls9p23F4I&l!h)Ad*tRV%kp^nCEb|S6HIX2uZ#-h~x&5!J^XTmF=V!mo-@Tbq(`mNTK -VHeW(!bt_OaOiIQa@fuWjfyS0%7Wh%K|CLQ~h*<<jrECpKj|SH9y~HFlsuQj5JnoHevKAvLr7pYUX6r -)NJa9-pDZK@mk<1mw9TZonhOVZaYnQQHhdq#iC!i5(9mGpmyDm>k-OAes%u(^!>$cbai=o@$1Fq*>6* -ZK))T(-*0cPx~MsApMkUizD^rBSEYc17Rj~lp0aD9iadjp-w#1mWgS;FFlkFLCFU?GQ?ine0?)fY-yA -^*#Lh&FCtTzX&70OMXx%?sJjH_8qgfmmjsY99g+DZ_woGBiMF6TqNsl52yv%@Hz-u9h5)irKcKAwEQ6 -iSSPOC^{kFw0OjmWCOsYKE+mDz)xeF49Rh8mp_^152vv2S4s`6>skkijv^_!Rm+H<wt}PQKww@mi*uF -Gr&THa7yTQbsW1d{c0E&RK=CGB_dLP(6=<azM$9<ypFeFM*mP7U9tPq_IK+&j46+6;-L)KYRtJ7TeMI -8&6^X@QqZ>=tV8lB!YvFaCijUPxE-nNHLkG{eWOv!yyQw$|FE~4N7?F>#7sdB?Jd)X32VUfkG~xs!`i -N#E;0s8=mo%XtWM8@LSz98jVnAL*L9Q?+_U4g4)JWl<|#-BG6zr#KM=Qgds4NwA>vC+LY0k)rfbb^X_ -1;)Ny}*KcX{VWqB#AmS!cFN+fK%78$D*wj3UU%&JNxhwEHb;mGRqa4AzDn|&Myk{|_O_;@8&dAXYnix -;3gx;a04e|;WZUeDjm-`$*$HotQ>at}MXBk~<Eus2m6=joIo2DooHNuZYLzU2>qEK&Jv4d3FK0&W4Ln -lG7NpXCHovGI)%Cv06+#mUjpLRMkAJ9_@la(DCF*@U2t1MF0=iQqf^HJO?YdIrAXDPl3y`TWIC;W7Sq -^z%^n$;tDh=P$ZlKt*Afdj~>fIu3xNK*|-k4qLucW+S1Q1bse=`YdnPLJ0;snK@dAJ@QiWMG7jn0KJP -Xbh>4o(TUet0z8I;@>&6qvpHJyN^Dff*lRF|0@OnT1b7E1><j|c03uz(x~L=UFo1(-$Sje_4GDk(<Up -aMsn*oMaEir1Nx+2k3jkT##o*vL%j(Snq~HLbioB>(UfMOM3`VDd;~9h6fdRPo@ScH$fLsz1d8FYC)5 -xkEnd?y|LT}69i})c9;D)977O1nxfl7#<rcYJ!C3tZ-{c3kLr_I%Xl_bdd1K%;Jak8src}3c^6l=6}j -{@;Q;%-p*7Ce4fmAD3w*K()=7G23|T`y2?9u>QSAAuG*l1hOv9liYVmtRI_^XUBD@AK=+cW=+%-A2Ek -Ue8Z|y*R%C;Tan?I{ga;0DM&eHU`{1Yz=;WKfibt(f9mSU^(s|B6|QSafdj)r$zC**n#`S&SV*b)tJL -CuwH5{iz#~}tCTMoHr_x(p?T%D1RqvGtA=?tZ=jt&6{(DYU_+;-**v(KUq$nqh-RVE0Fw&mkw2&?l@B -6{<#@sl{}T=;PqijSPZ|GS3ve+qWOF!!5|4$ZF`TB&y6Uk1**x?h9I!tGOY-bl%i3V%*Li|`fnMJO&P -9ghtg3cwEW%Z26sA-hn#PlffwT}YM<89n0T$erJiYhqZ6<idb4>nFKTh?eDBAPO1gN90~~+co=wD -G-u&pU6^+oZexnX~VPK7&R%`ZxxzTpdH!feavN#0`^o!V5zc7p92_`!DHaqL$*a21%wYsQiQ+=f=_+) -rB2B8*LDn|0kj7nsgni*n^q81i84509|Ob~egtr|s1c2?1}%=?_G#MAE_Ogl?6;v#s9Wsl@x&PnmN^y -3o<vw&uj!+Hvv?PjKh1?`F!`jt15gyW-Mj8O_jejHY<vcib7fF&pzNDuH;)9{yFG#e3gN5P1{Jq+76w -JMYsiW$2MYm9hy8Y7S`0BynDz`B2(WB#FoX!G(BbP*q_ixsHBX&&_pRM)yF2;e{+q}YghBXcF0-+>7P -8*>X+k3Lg!0f^s9ojT2>OriS%Oi?aY7~7n;IkQfBzxRLHc_<_AkQA@;z~l9R>1SR%#16YaD>3s-J>Mi -^#qpJpuDt=A&jDO^m2jE^1PQGczc}&4L)($5zyB3ubNfpmv|sLx-&f6cRWKmCrQVC-&P2F}_(OoIRbe -r@QC((_a5yvKX85a1<E)lu2+u9oW~zhcOxTe^K=Ge~%=9b#Wx@bZ7=9@5@-hx#M_Wu3b9Q3Nf(|{%|L -H$KeAYhSdGReRJq~=$9ET;pJ9l!Gv7CX2gb@ZQUK;cNMR*RBL}=!sU%`fd+xKs=vjCoPzPhUnf+eGKm -Cm`e_J&|M+Rr%5EP-AGp!2-vHgr@E2&n^jCo0t--zQu5cH`MePG=Mm9i99>ASz(=HfQL!1DAMjg0$0e --YfBUj_Vb9i}m{tg20==byMoB8ECJq`9*7ZtdPiew0e?#a-MCn5DXf(DdnW(SjolR6NMi;n?ZmjcdE4 -_UA-9Vk{OIU15uui<trW8hK@!((95!NnkwUuuUm+kvOW73jVXGy@`d1NZ}5a+yM)q9EwZs&r>8GkC}i -oT}XUqD3&GysnBGDc9zIL-K=7PhXqd8GJz;8U#>VDB!uWoH=lAZeLx#zn!v5ZUjJ^9fvRXs1cpPgW$m -=@;crDcTAK>mGHZPp6*^;1+dV#GS}v`gvH2Jd)Dav_lYXi(5w%OXL{uG@a2o}IUE17h<}cMe6d)t7so -H2A0EFvJpN_!-`TSd1Ct^85Kj<h#ufV$fam~3CP^yTSi_rOGOOxM)jX&7>9U)@bBMhv*fi`H6n&ToG< -{Yg57>JMR*<<^$ti+>AS7e2c}g)1$|G_g#J(#GIx3w{EX_@b6R=>Q^^oOTW#VF-wGb2t)L9#ML7YI#* -zg%6|1@O~Yilqvi}Nf_YmAzKu@#6c%sEX}K4n`BRG`ns?~gpKeYCUOfYDum^@cwn!!r;OiKB8tQfDA= -GsM-XlmJ<sCJ9F^Wn)R?ye$Ek?1!VsbwoQ&OA3)FGdy#mEYvY$if-TEoL@($Z!o-~pRZ1DPg^C^&i;& -gX$BEq&C|#Y_JWTzwh5Z<@6dYOe>&>58<x5M#6IHX(WfBPj6e2Po#9t&>T%=@zrv*66lzSppdx`m@xD -gQ#=(>lV8H~_M`aZ~h@F}t4UNNqA!VF`__7O3u)V%9cM)UfhQo*^MxGEuCM`w~G%Q<W%vHll?|PygUx -9kuoKW5XNJfm^_8KL0(#@ML)0|gRlU+3r^ymH_36Dq90s%70<?cjZGu`1rI_GLQryUrJvcD9$n0^{}X -c17KPf{pny15B+W_gn+O1GCZPCy6ZLNWi$&32CsAu(G$89C%t1q`%M9A6oGP^VV4icp`xs29h_emB5E -UDQHu0r%_<f>K&;@aNc~*|P?hH|J%U(_I#{_&^S<;-&<lH5)d|%~9LPJp6T62{pfD`QlFzSJMsz&=59 -h0xF@xYcoL$Zb0YpRmaK<km1MUANxa$iJno2JO<Pzq0Q+J4CY%H*<w0g1|J<LpHA3EfB@1eGE(J1T`h -kOCJw23)^L+2aw&lbGxt*2h&xEI7}Ej3R-z5c#1wVQYEx;k^+4ejD7X_5?gYR!SIglFgGOp@PY>K*(C -sY1`;jB?3c>B}?{_VDf;X14q3glEtMRedf}h|_<8^oo2!Jc@qS+5_ycriFTUBeA)6hW4zxGYK;Ho-&Y -sd+6EM@z{KXu%ieFu%sZ9_3ooaG{z^vA|&t^|pbo~RpKQ6;9u?op#UY0MZ^CTRoTqL2e+HF4D5V;K$n -RzAtBN%7GW3I|UT60Z**&>@fYln)<}-uk*1WwTt>l;VZ)c-PGArF5uKLl+C+NUg});b8cHBe%RvfKzo -Q6TH?+Ur5p&u(?1Bb#@=j7&;ua_5)#DvI81QuqiMN{2a`fZqd@i=HPJA_k}^2orN|q^_tVk-*ztvnoN -fV3v1^_=fbY(dW>MfrZJTd)~U^BHk6Md%+p5EKEw5$W1(6)I@&#G4<zVYgYUk305Yw>95l5P11F42hL -HnbhfVgW9ak3^tA-8I7W|~$5cN2BnEN)?UfKh4c>UP)Z1@w(Ri|~4=J7*gp8I7F&X#fYXn5a&bCv3(v -?zA#(qPcNB7tb(`@wQMIhghVPP#H^$=M@WH%EGhm)Q3n4i5Qd&Tn747)s8}U%!(GI-_sD!y{nZ)p}!2 -S;%;gKA83jNQ|TADU*THmoESum@x#{UNO6v_HiN22d-A69kb7I>Pe@Zr0oTF<%F)(zv$-uul&3HGHaN -}-2h@r+(6|?Gx&dMu$gIpmR6qO*Q7_Qp~Kiu?*FG9(ylG`8#l#FroqsuA2@(kvwHd)%s@w(;Rm!xNuE -AH1c1j5jquo<B~6gwn+8+A5n<f|0I@}JcCdRlB_S$*!nzqZtf1nIemFt6|H~|uy$i(82}Y8e?ml$cQ< -IGl8`%~cQYMVb9I%(}Wj)P@D&i&_T&!>UNISBQ1;oz*dj}4hDtN5(AiUCPL+~+VwWj;XD9{NUaFt@Ng -swOckJgpYP>LKFX^{#l15LrjRT==oT;MF?!O-KF5P@5YnEDn|N8^Zx$BT4+clR#-r&UD-7j=nQpOT%f -jFW~-8%Fn+HLm$xfa4Eoe4BYNx50Z>z~VH#{WTR9Yn~;k&cNVmN=uW!8r8bZ2Fu*WEw9enpWfPM5FWu -{;M%t4>Ka68$0*|gB49kdtxQwxIx@U-&shv)%{O339bjwd-3o)X70IwGqdJIgm-2&^0}wtPi&l9B&ZD -kz!K|X4PH8Akxjh+E%}Y}v%(D)xHGdSL*G5oh239wYJ!LPCe=wmdU8rI03KisP_jn_CrrJE%YY1zg6$ -DdPWObmmt_WM@$lqWw${OrOg1k=IxGmp>-m1{CqAK3B0}LFn77vUYz)vqRK*v%WctWPsAXE;A@C=S?1 -%U_hB3{{apq2WJt8jn-$KWdMn!2POc);*<!~cR!-Tcs>{o)uy*OxDTVuxP@bC%|H@){0McyLT+0Mt_~ -usCRT2RKcUMpJ~3Uq9XVPA)-Gs125p^Gyz63bG7_8t`|CNr^3{DlxeaM6>pZ_0B9W6D@B>1px<bHlno -U7$CuqGVZVxt^$ihOOAou>^OY!((x2~cl?gPT!PqHm%}SMPNdScS)_$AGb<BP2_c(TRN#VI+ks?C>&e -<7vJDep;3jq97}CZR_ObWZ7mj4o&4`@}oMx6!D1B^1U*!%gSLjV47F8Y^;ee$d1)P8Rpi@Y+bJxHeu- -l6p%?a8Njok`LHEB_khCGo8he3M`Ike!_M@FcvaC>_050o{nw<9dZjkI4tp+9En6a$9VU_ri?qJqw(D -T*|f(t(G}fT$w1%qt6et7adeu8x9nQrYq*XF8A-l-0A!o~$s|L?fds>zb{nyCdLd4cDUPz|u%g>0)+k -OR{LQsABMv0yez>(~IU4IXjn%t|5e>fvX-4NH%1Nr<c{Be+BS6sWAO+LNf^fE#;G^LgdmoTfR7Vk8jA -g?&X09(9A2p9#dQA{v1C8XWt*>xM4Hr_rBYBjX4Ibu1ht*g#Z5Cd@g0#BlZ_$WV(+o-$043gtlTw(?} -VcqG3=Ilnii(PxcPiqr2ceu|Cg;tFb~DRS>#2gW${n0N1%anK<B34{4dsI*xRo7(7WldW`XFN@^JI`6 -5$}Zc@QbXj2y`>{08CQJ!(iGO>-^z@mvKzRvCMPJbu1I!+;qQ2wrHv<&xrOmAz}-$d7XkLzz;&ahn%c -)&-X-EWUfen>~;)=@7gs~Qaco<OZfSpRP78zLmV;=C<Gb_$%iK7KM`c)N){0G51%MZk+rk5sTTk%V37 -b`z&roBq^orowYdTxK?bMx_*uE$Mhc<aES%>x8Oz_&7l2V)WLdj-UBbD<IS|!0a*lF~*W;N_@mWe=9% -vR}7c~)M)Qb{8`A~BWN}z^YBqm`ZV#O>6bJ@tTY<K6i4LfZ4=EJQ~N-E%*=Zcg`~?Xka8v>ihcCx{)+ -vMSK4&<HC_g{&c@LJVjCTH>f3R1_!w3=RPh!a??ZP&G(x9-U)b5#AOoX9UKDt5yMLX@pmO!S(V_Qxta -<{Ivk^1WuEB(T&w`^SIXk4?oqXrOvin#13eb}-4?Ei&pw_@fzkRbO!GK?|7sJoF1_$gd#TeilCowM*d -f7&MvJ@tu)arME_Uz;fv^)6%?HUCu;W07>(r{6Gb=ABN>b*BKH7XUqoua*+6ltQpJpa|Bo_*A>7JWUt -YsmT)A3Yy_k`NOZExo!fgqYmfo$~i)tR=o;M72%yB4FnY2Yo!R1Q2E;GofEI!HcRg)t6P=zVbvNseaX -0#9;cQ+H@3Cld90~>*94h{TO3un#IDoL)KVE?b}$ULGRl3YW?OjvtBRMJUbogYF_Lb>O`2{?L<onyf? -H6*_%B0qlB<;;55A(j<JOo7rvrsA|__nAxe=e2`sgvpcW$@)R^`KBMa)pjjRtSuLp5b9j|dhu#(mH`u -!|=FA_1L_q9Sco`)iwvP*2%31`Mvn8I{pU3zN>-)z#<3ir|<?}`1Eu+)WJ!S}HE^U2-eb1&EDaSi6g^ -mJWw<-I7!7CWkJ(usjGuUC}7bK_!A3s`B8?0M5}ilo?zl*%`;BGI|r&FyPQhJ5DLcZ^6g&CORle&8zz -C#XiuChI~^Rz1;a#C1qxOa`NfmW@q=(W|Ccv#|%M>qB(U<8QMrZ2j*7blPATXo$YMfw76qYT;J}^vYu -JgRl8xY+~Q{4?#(ppJPWTsm`KPIe;Jgj}LSpnC7uV4}Y$yw`tvup|Z#3y(!F2g666~Ds&=%nY9?bHKm -)(n&==8z|u(`U64nNVNTmfP4haa3VV~$q3Jc^$Dz+)KOUJgCZrbt#}nst-R8X@oU!J_dqW3mP4Uz4f! -o**hBbx$5Sq?i5+e!@ZC!<E|BZ+~Fd(q`H!JWBV2F~WPNdkE$A^eatZ4j0Gwuu9>bM$b`gDDrO=hdBu -g!}6V|7iBBZT=td8{jtX86$2bcZ={g6}tdtr$}dQYQ{qc~yywVQ@6X-DVzZn_cT%R9%+tMUe*NYig4h -Q|r7=6I*V8ak(EaIPIhTI8`R4SLF1TxIs>|h63f<tgjb#vwoOKMJn-_)P$^beVt}Z>rd#D=4HI5BqB{ -(gDgD?*StVX1vBkC=_c!{-zYZ8RxdYaLNGJlXOQ65H|&H6I!YD$4`mOQH*sTQS#-dJyY$&3pp++JKpF -2OL^2ZDoK?`KK605-0_Rb3lj?>|bfA?Y&Nmx~i`Xu&$yv}NQNIbEfD?hW%v%iiZ~)#qQ1O1;gG4A;k| -EyuLJN-}+ihVUT`4~EU*`uJJPSL4gX`9Pxnt5RIMYds#?3X?5yrdKZ?T%JNK+Ny-g^7@!+UC057;T~P -Kk=%Cgsf3=Gbd^^d)%jPH~`=$BefjiFurS#Y(3B_N!Mi<Lyf3(Q{{CNmZZ%(26>)Fh||Jh3%9SS@LSa -5={*`-7D+=0Z>Z=1QY-O00;mZO7>Q?wHpV)1pol)4*&oj0001RX>c!JX>N37a&BR4FK%UYcW-iQFLiW -jY;!Jfd8JovZ`(Ey{_bCKa6cplY{N~OCNY`;U6L)ufNW?|3|LVZlytH=OQJ?naor;SeRrhZ?KErW4~| -0W?w)&p9BY+=-R3e|f=qLzEnLaaj^S6#Pz$T{U=Z^=xy+}F2h1X+ryBn$&{#7~RfLJD1TTNTy}!P_Ut -HdNxczN$_wKLjF}z2UtIS|qi_9$QOe9nM9Aa)I-B&7Z(QcGpU#cv_kZ-QFW(Y6feuWULBvBiN8mctK% -o-3`1UL8hf4~YwgxbIcHG<M|Dak^z1rbFUL9itiSBj1zxU)qZTaXznrFEL<&(TqM^7`o2(Ybj2G6+sj -U!ES#j?eMc+3f7}I1Y}E&!gxpoE=XGFG$m$2!%m-8#4aMbr!0KP|ZO`1WMX1p&=9jhJs(K!UYk=qDbh -$DpDexbm>j5(HH`%%Xpb7c`OYC8pYZ$SOE`0OC;qghK<-7QW0TJ8DSMFgO%EVr6?KH52%5JLzTsHS!j -$1Hca47rPVbBN+t<p%E}N)Ojsuy%LGX>JFsN0f+d5*-;fe;5qGi)iU(|@M4~b*Z|#a60Mne%QZ6k;rH -<0~AtALCfoR)~5!rA^o<uR`taDVvj`cY#zsS6-mOW4uyIx`u+19R{8j1#)sy(-2O}9-*81z8{H9*XIc -<X<GYE3MK%*O86pe;4vvrvED^6Rc(ESH8=Rb^53snS_TU4U3Bp?)}^Qe3Irhn|EmktsEY^-&{Ln&1h8 -Q-B+lV_YO&8Hq&-4Mzj;vou^1K2D@(vy$P8zLC3##zGm6PA<vSCllymMtZiYV0>&tm^A~Am2TA@z3uZ -_$DU0_*or4<36P{Xi@q7E#*=ZC8upZZgm>f<r<fDFCgB58iQFy$r!rS%wNsc<PO=L$Po(MK=KAf`_4~ -WIn~xuj)nlNqPjCTWhrK~CoWron#PD%27*OMb7SiB?a4w7$wlIg>>hpR)j$rZ=+*0w*2UHKRvNm5J55 -GlfmSki&bm!!fG%_O<S%^*rO=Dpc)l;ywXhvR~KW<D3Yq<^CAr4wZgUiN~GYYDvgjRtvtsZE}hbyIw3 -r3<sk;pHuWTXaflKm%dX;i(7{p4}~w-oqE;w+A-5+UX`3PiYOozkeu+1bhY<fYF!T`4ZRmV8ykW?COw -y=`3NPl@FMTEUolUk``Q^l(%Q_>BV}GRgN>?k%@szC&k&yHrdo5F7b@vV$sjuVyoNQ(pNpSh%FTfs@& -+(Xo^L!w$T7__eR$5iS!+6$joM`05Qmy3iInaVI1~kB`Gz*=SHYK+sN}g!cOXLc8-D=|`Xuu&%{cpt+ -%*U<`*{p>e%eFZf|pwPbm?2v<e6Hr|u!uxZUPxch~n2A~~JLB80-bq213YufbDwd2^ewEzC(p$~_{U( -1PE6NAQ5uGIsL4%beRu)>=*(_z{Fo$`MHcR7YqB!0G)@l0fJ-1G|{Ivva*D&MABY$!#Ph_su&#?f)-y -rw+92`H~_S6%!fsP?;TXM=vk_T)E$;#Q(_<CTZEV+!ml;qmi}#h2I@cHFVyHg4c-u(Jj-!(mf#PqMbi -Yh%MpAmd#_N@VO;X1Ky|ZHlxfSh>@F#c!a1&G_?rN%is4%4!ohu`D;EThuBH3+<N^_5@4rM)bw(AulB -t82jzp6ZKrs>|uf%(WZj)p4|7+!k#$n(!_65#2xwnKpB4+@vgD`Y-A7GJ)#Z4Wi}W^Px8wh*^<P4+mC -0s=Z?}o7k!3@?hX77FRf_lp5laOC~D{Jo@}4IauYV3L=;w~f*f~0**1N{#9pz>Txm>FwWX~IVn|a~64 -{RUzKPWgw^6qpwi4+VqML$#GkU)8))KP`3ft!jG=PbSMM8U)I!PoYLj`}+CTc)Xvr=yEb%FEUSzGdid -MI<|4x1@F>PXPY;JCT#t}gz#N%N#P{{m1;0|XQR000O88%p+8Ew6iDx&i<I{{{d69{>OVaA|NaUukZ1 -WpZv|Y%gwQba!uZYcF_hY;tg8E^v8$mEUjEFc8Pz^H*4wCZ$ql-Yb=tX=4bODv<{eLY|vkTZ3Z<+u2$ -n{&&vK@21d)EjizPeg1r}E~WHTDO(px?pSVxcD1pd$f{OQf%d{nqZ3MLl3*+>DRVeTedu2st3qiltb; -z*Dl*hWg=B9{Mf|zOBGM(~U$^)C?(zQa!~3Uq8Oa;mEol>LSu-xR2djl*a4Mh<Ex5k)3H+<EKktmzP= -u9xYmL2DtJ_TGz&Xt81-7#O+(!Oa)Oe|eJ*|)q_}*CV5J=;Y#eRN<bwcnH^=60f75JlZK0nux5&j8L9 -feY27Y-e8f+d@tD?5Py7-K2tT2#RKDoK(;3FkuZU!wfrR65&kba2&ngvM>Hd66X$L7uNT{d{3Hd66Qd -j+CCGklFn}+^iQ(;zJ30!jYZyoTo7oJ`U7ABT|=e;y4{^;=IjB=fZlzKO+rdErka!D_E1AF$zIE2!*2 -*lvd>SEqO8;)}we+BbgN&ww+3>hO~Bf97^v{aXO<6U*bbLbhw(e&bTX%2n6dUDy$7&W_F{s>5n&ZvGA -(_=P$4fZ%3SmHKD^?(8-d}r2^Y>8={>a-<k4^sLmeTxcCBgXWRwCY-AX}VBhF$^k_yHW8X)#IA9RI`c -7&bb6r3hn#@8QBcUE?Iz^R{HnZzIi=IvYj`fK9iXn||Es5%5vbX24y@&=x2{!Eio8k@NacXZPJw)l@< -lo?g(?7Ek3pnT6LG)<i8LQ3Iok@S$B8c-PHd6zZDP3oq?*B3YDT1grxou#+xSF?nan+=K|MRqXl+JZL -S@(2taNk(nW=6Waml`yg6|bXid)NNsg2m|w33EHTiNQGQC1>mH-Np(ly)1-U(x#7jz9kShxN+q5C>0R -A0DbtaxN&reak>|45%I#5u*_UIc?ERx7f?$B1QY-O00;mZO7>O&00002000000000a0001RX>c!JX>N -37a&BR4FK=*Va$$67Z*FrhUtei%X>?y-E^v7R08mQ<1QY-O00;mZO7>P*l&{*B2LJ$;8UO$x0001RX> -c!JX>N37a&BR4FK=*Va$$67Z*FrhV`yb#Yc6nktytTR+cpq=_g4^J1d#wmXcM3hF5H)F0|d>b$Od`YE -(BVlZPmJ!q;}&j_TM|hn@CCaZju^EuqHWYhBId_^m4iULaVZ%vTPgDZb`v9))cJCOD6DpNAm;SF|k-K -my1PNcP*EsYInP`*)6ubt%*E#@Ha7AuW41$O~n#&S>`e!?@9sxf1ouhKKC82f9y~ftrBv@U`wqoG*nl -1X?6?xTb^pgfShvnPhWCYvqlQ5=F_ltPE>R(FSjM*PVgPu(foL2*Ut&}vaFokhnCmisDD|3cS%T2o3< -%)wUjlmbPnkj3_$+|Hhj^G{?*GyG7hdu3-B5*H$8gFnNZUM%lw^e+j5W*5`3QVS&ulxnn?;#rWS0+WL -B^(?JJqF=C<T*^O$J5p@LcYOV18_lNnjC3jbLvt@K;{bv}wtSOp*jMsk*Gf*NtV#EQiNxyU$KTT-TQv -v+DO%2Z&oEM6=Yc}0aFe`+>g!i@kr8fY1>76d*fP^;PN;Q>EAR*Kx$-X(58(FM8MgN=LI6k=iY0nx!g -Oo;0-k3x%X7Vk?TFrC&qF(&5&ZLiyATLJ1hftj0(P^?b0@06M9rsmvDp!iWK?<`90S$_D$1n|z8?CDR -)2zt<ET;!w%--6J9iZK9UlbkakNM`C+CV=lqG0Q|&L@{~s+YHvGZL1qi2dH_V9Y_I%hms0zqe^6$oQ- -T@b3jP3Qlhk{8jQYw(2Kl<>R977-q1=gwFn6a-%q4u6st3k>q;{y#PewhNitj}s0$*hTBuA}+f>K3(v -lEyD7$qO8=m6_a|5)ZVCt%wE@k$J<j3LsnEse@AR8$FWsScJssc&R8P}-e2E<3%sDN%QMSZXViha#lC -rR}2>UYjto)G9>JyU<jgbKn!doRdk+dP**1}gRh3P|4oEedQ<1pK+-?SVDK6}UiF7nbyn@&>pVEtL|u -2UqzSG$oA9GpGm8#4=HSO$ZxZe+c_$-fItYCVSrao=My}OJd};&*5mytQGOOEB0+)6<N7!TFzFk)n41 -Ke0>cpxiK8a5PWDGwor-SrO-frTqETc_-#}YBy%Z94lILkVc}MX-)=+Qc&3Aj%Zh}Q((I891Ek#8LZC -)UBB7~4a{1TN%!K-BJcPN21~b~E)-tUXW0O^?n`VYMA_Ku}==+i9t5{3buEd(0%!4uti!R};u#TzyRw -%+^B6{GM0yWTnAm9bGxh>R&P20;;b5)pc#xhJKU=u{tm0Yk3qd$<!v)McD*IFmyWXf@n(8s|_<eL?Tx -da*k7r5(I(L<02z9Y12(x6QSD5mO6#-|7;1*LT{%3w#rQa%^fMZp=^Q?N}dM?nd7TNks!Ps0%s+EG(} -fSCd~jF6ZkQ=kBB5K7rCR3zv;(fyKrm7FeDz}JU(PL&ov4Q*qa(xQkW%|Xx<Pr;_K8Tn4`8E4NilPqz -9lXgH|PwTX;$P<r)XYkrC)lxKqLPv^R4TmX>Gss)P#2Wn_PwzVBv42;Gqc83AILMR$)a+dQOjfx7Lm4 -!EUoasDc3eY6jD6@yW{tDJ?w(RH2JqDQb>CQ$_>e)_x0Aiy7m;l3qM1FXbM%ca=Hblb3i=z!SOu<LY> -E~`Wjc}_r`?|1*;+jmc|y0);K^SK$C!W+yAs|yK`(R#S`+X}Qkd8EI}vo{J?97q0FsScSwb?b43E!k2 -HRYIc%tI6GCtd|;XGhwqOAK0Va=*~O=RuX^Jqe*o#KLggb_-$8C%BTp1G`!FRa(3Q~#?m9dhh$56!@i -i*WB+o90%*B6Cf*7EKMGv&e8Ka-8)2H#CR&v0+XotpDqZ)|-N=a=HqNsx#Cf#adr%ID6X1>ey4Lo17Y -K^n`*9E_`A5V|v~75?U*=%vLk+=L<t%kGg|F=|I;%80%o_1))G#O)7T`#~K?PKNA$kyk2`j-nT`$J>u -j;g|F1h6!k37sTRSY)YrJ*w1nZ9DTbLJr8CoIJtw*_(2YQYrFsE?9Z&w1AhO6q^)nCwB)+FJJ0S<a-Z -b)rx5PI;0M0)y{B~fYpn8WlLzrY4VrG~+$-NVmV>L&)?<J`vQ%1L2C?SqBQ?>E@{CRS;DYvK24a&Y_l -*2#;9q!Cjhi&upME3-XW<8|h8BC-TnGJ;U5JY=|Vxs<yZv{WHDzL*8r~<>=zX5&rVIUrT8Q?H0RJ@yf -n7NJgkO9H(gz@AhZhiubCQbpLh_+czH<b0ud*Ap6a(_bq16iH`*i#%NA>1$U1_kAXE4fWyZ(tOhO2)~ -InO#M5Rf|sADqGTbFqRbXT*RMQ8U|(9FYu$woH7~b9vn||sX7Gh<sOy*QuOf37t%aN_w0BQ!c4MYgjI -i6%DtJWA>*-rhi-V17hnqP+4|>~KmGD*y14_=L19=gU%pCTEyMjdNM7K>^c^P7rz~xbk;g+!gk<~!d9 -2WJ3*iB782D$V`E#tq&sk<_H~%0zHOLG@y)oC_fZW6C!wg%Mf2ZNlS9pxI+Jygyxf<(-*{flm!r(bKi -EnbySwiFI9H|xV;y+MJ0|XQR000O88%p+8<~*X@H3|R#SSA1fA^-pYaA|NaUukZ1WpZv|Y%gzcWpZJ3 -X>V?GFJ^LOWqM^UaCyxd+iu%9_T68>QBXv}%EHWGunz`2SZt?V6zF7%w$pjY1_CY7iKeosCFvw?kbmE -Ec#%k1lHKhtutJgA)ZyW|-{@-Ba-m4U>zWm+;*DHXW~t`4w^eiNzH+(P3ce%i(84OQt1o$@Xw@*0l3% -JqrQ{zBzEH(s;f;b%o0_HMZ6)E=72UD&<G#g}-&#D2)+zbG)WTqHt2WE;SyOV6wY2z5@%U`7s#?0^3f -l0dDrjAOVR-}i=62pQA>k0W_mlbRA67L$B2baB$AW2!x|9A+%a?q&qfH5nG*Z#JrU>v#2rkA@?3kh@R -kTMS*)PDis5X1tn37wja@O2ef;T(Xs4*mh{VOYg3MKXh$gra(UJ!UHLq`r!Id0BbSt%{y@z*sdCS4>` -2WhyfW}Pm7`}NmXS0D5Duf}$0J!EAiz)bSJsPj8kx2z}8dqZX3vi7H+zR&HVU|S|wQ?SJXt%?b<cIK6 -VRNm^fIM*7@^JKAD6g8ES<gYA)Z<;NSd;3XNnqgpI4+o$yR|I6H7YooDEXb9%x@%az0emIflC5Cu3yY -7pI%B-<cH97gSG=);tvOg+&YSwMA{)+Yc=?*v(!SkGCMI9DRNcwbCsdMyd9iW~1=wc2FIlJTF&O!|YF -E88>JtDWPC)%+`E&1;_$D<6>%TWE-*mKv1G(tR2J*GwUs&_LmlmRZdS2*VB`_o5`@pbc&2*AgU^%(P% -*wp<oIx5bgu-3-AJgtNa<)c3+(IYrb@$1<O!VI^7n&|$$<Vjzc7o1PYD11P?JEcy<DaC1ueL|BClC)1 -Pu3};gEqF;sH)ks9)&O0Ywg`Gf@xz%X~L=zC!FV-WryT~s5?fujZf;1g0u1FQlZ?5+KYyjaFF6aoC{S -Rdmb8j$M<zfP-JAo2-{T(Y!1E`U=0l7Cz60?Ng&N02&Rdm-0f>sf#-SHJX$5eI3iObIeB2DVSp9r`OH -{Llz@Ot_?A2%;dfNR(QuMI+^3Ek-T;AN4?zh0qqktxNLr;XC6TyWFLiq@uH1@fg*nB!fMhC8yi<lWRm -Ghlo=~47%eF@oD9%H3Tiv5E5Ly&_a4be1sAzOv+zt@Ywq+E;q>~^~)sD%`w@Mv_1GfvpgqNE$h+`BGl ->iynfwiLHJ6t(>Aksf-Pxw4k0Ki+;#KE3~fPUOcxWk=+NyVa`fU>q6kG{aC;Yy>)Fd(#^dWMfZ&cVU| -R49qG$I(S}&b|(Q5*DBNxA;U$5v6B9Ej@{!wPAZ6+HKX8OW^6VJPW=$4=W&Lk4s3|=Yh9^od*cziv)* -U-f?-J6aY0Zn3T(sflZcBDjdFo+a-GhkN#S2Abl*ij6wiC#nrT-jlW68eF7itJ!@l~;*|M=6KQz#m#R -4mbF(xLfHPW_F(R8j4WC2BAVDD9Bv_Z@ru=^BdC`(Z$(T!`;%pj?W<)lHa-M%r(APh%Zcc_82DQ}r7; -6Ze0r{jqBCE}ZXgw355KC?flF6!mJ}Q~weh$JFm23B58ho74d6~?yfbZtX@0*QG?l*B1r5a)4r1)QCZ -OTwx8bY!&tj1<|)g4M!VH+|_So8tvRox(ad9teobhmZ=Lf$|PR8R;&B$~&jD;}h?sG*23B@|Rd54w)C -QeTl5r@~~A<L5#BeEYTbqW7OIDM-5zl*k3Uy<NZ4O*_L54+}@EL4SY$7C+K^UX>@L1n^L<*$OO~2L2W -+&%?qU%d+7tA`Xn{WLO`=Y9oEvj?FTEK^R0t=%_nW={l|ygKlL@S-W-u7j$QRiEeW;)bg|zjFyLamoy -I5m9y7@G;Zd(z{gsSRpaTB44>%zsCN~n5tiT?spe_kfI4hucErdFfkF#}c}7iv&sTVwd%i6ax+jqK=` -HhR!0BX&&y=b&Y<Ze;&{=##<~3Cbh$9aB=?O2oNluqm_>`<B=OH{RxSlBnuZjEvOr6jT->a~hwk@Z?{ -GsO$<)C{cAP7SJ-WfawULLjNIs)JzWUB{oYNTmT`c@R%J8eF;BlfyHiPM~&j0aU0hB7FH3?lL~`QccR -=eTv?#xLX~+vwaAjyP@h;7?KZC$E}Vasj16j3WU<aWdjuo`#IwL92N|K0-#?LLbf_Ft-O%)QW;k2IOu -II5f3`##Pi$q<k|oa|KOFV13y=t@jK>oRZJ%u&(KDQ&RG{B9GdhGB}%wIPo-qBM}cnHl9rMY%pMR+@C -zJG4s+KDBn?q<6J$Mwexg6C0iZMxAmM6zOK5_pxXes62H26yqk4ZQlH)wEcT&OH>gki$sLZl$ToV?hy -;Dm6g{ukPyW{DXfY3c1a2AC158_W=el&6;V~FW8ycg?ocxmS+P!j9LQREHD#0j_cC+b38wJ*Xc8WDOl -(Y`&&gkfb^!z6d*Kum9JTXrK=<O5|x=_<tx`DSv$z_IdD{H_O3J^!^7U)Le|M4WI#Cp=mUBZ3QT^qb- -JFeIjSFicLDfR72+An^B>dGy`CW8<@<QvG;5L|&k_=a}~ZUv1NuN~r!jBdE<?}PM?<L}<YKy+<Q4}fs -a?E8db!&=EU`$15<yyE23%MYMpU`Q*vn;!eUKm=7gs2{3#aT!J-OG>!t*y&f3p?ie4CBbg*;Po*ke4J -^nueZ?!ahP0uG4sNP6X()cVF_N7_{mcHoJ2Q1ZJnlUwX6;;i#-h_nY->Wph_HulX?$YYgmdR_ZaCkoR -YxLja<x)-k5p)=Q{r%%K6EO>iJ0ILbEU}=`n75zrlend;EXl`FNsyLI@t$Mj*D^p;)~!yuCOs?YEJ>N -OFSH>GvK50zKuM)kyt-L|i_x$80a^=gR@Wl&t#;;?*!HjMh34WM|CCB~UGPI2>@k#J7EfkbEx+JvV?d -C}b^)VW}`j>fCMu41nswGCCD6@bO(Lte8${d{oJvVs8T399@_jD=a1@6&a|9J7_y05@3x5y+7V>1>+L -{!N@8P5{gkh_CT!m=%9@_$wZKkHT{b*x?bu@OQ<)&S}rTa#i37>phHd0AnVL~&%EdK#9;yY-FM_nT3m -GKuhEaH3tOXM=>ti*QhDAJC0V`giO^#)EbCIA>cL8QGkwg#s{1L3e=)6T#DXeJ#CU#YlZO6<NATi|DN -Hzg(Ys7O!Hd>lx%0Yp$HL$=%YeRwGarp!|E2}IW9p8Voh<v3t*E6*N)shybfl4JbtKJUJ?EGG<JZrDO -=E-~uWNhZ9Jk)y?(4Aa?SJ3l2<umdJz@XmxF5VgfOoInk-z@%J?VcmBS|Zmgriea7ptR<Mu}(r%p~ri -MvH@K{tbl)xn8^YEJiNVL!#zW=`bjPb;JQtsnJ~bYo6ZqyM|%mc`O(cI4l}y*mL#tIHUJXCb0M;yMay -HXbCA8K0il8ilcuvwuQz!=Q!|<g#3k|TVr%hZtxpIFa8ZsO9KQH0000802@m7R*Rxwyv!W{0K{+r03! -eZ0B~t=FJEbHbY*gGVQepNaAk5~bZKvHb1!gmWpH6~WiD`e-97z}+cuWJ&tJjyAc(!^Q8wM~-rg*HMc -O3S07)98Nqaz1xUx;ps3S{SQ69%F`oG`%B1KY^XVRdD!x?R2OXMT@-sAfwGnq`@w7SV#ZB(u{h3VR2w -eO0$Qro&!MP<6YEOUHtHknM$&d$}lYYp$pvOW~mm0H)kovu1%uIqidQ7f%ly{m8aM&<CZ-f7j;1-vgR -)nUhdw{LX@V0Opmc&Tu_b$3xWI6_`7p68{}XJ^H(soPGK_0<&&Vt?+6o$ii}Hugd7zL{&7ba}RI>z#r -oI5T<k6yVR*i%z%ss?>A!64p3Z-^hSx+@&d+Y<a7zP2FZqzP`zE*bG4$3um2IbyckMviL<Wt9+;ZuCP -Mg0=Ue_pzFHJZ}ifCvjp5O1-Hvq|7%|W(g2HhLd>KSpjTkOun(Sk?NV^`hqZ2kX-&@*e4fJC>#lB(@7 -wb0++4q}%)Y_*dNZd6`0!O>c6qnH?w`D`0LhhY^TOkkXKh=z{P>mb@=f05FRC?+3loGj@|)MXJJjvXS -2e&`N4<a{Z;N_wzT6ijEUWcieYZA)InGk6Evk+FAf(jGE&gony5I2A=kzeuc_-7h9lp$s_R%|6SGrr; -Rsm&`;OdPo4G<C$z1+8@h5MvkUl+IfMYXL@^ec<%#`bs#-%m6>Tx;#1e~&*>jVs1|wy6(QS?8O6nLy# -E@=&*P)qg()rp$jiE`yPovA%xy?#<i0y3%if!L{iIjD>hxB4F-~m>Hp_9m;59P&8RW7R|T(B-N>IV9W -EaSs^F!pUbWV^7qU@O!khSrJ%s>#Q*JXjkev}(|eZ$h)4M4wJu>+(GK+9qg>FNq9ai?c!{V&ZWzH5k9 -H0FL%R{areAXf8`ywI<DcW5Mc~@rxI?OL2~Wqn><Y7v*JGM8KQ5cR6M=zqf=y`GbX{yTQyYI3#v&J24 -ZEp5xxP;C8f;|8d<Vas3>)vZuTU6xYvTtrt5mPswZkENJv&3p0M{(6PRc+8yrgH-C8>kua&~rhw$WR) -MCs75R^0^Bf$;<EbeUiv#zw%TmjQcn1D0i%p%nA`7N%xFe5qD-El6HpYgjBd*yzUCcQbYIp9A@JNnIw -+G`Pz$$j~ytF8Rvf%sW~%;OgFrZwlXM1maM1*C7%z`kPwt#0Dc}g6wc8E1##XQ;)uRjH~$oL$23Mhz5 -pB6^%Qp2Bwx5gv)@1Xy;Dxk4qBcbKs=4&<Q%u)vaz<wJAEVihv7=Ft6)M^O_OB3eiz*0I%?i#+E09RR -asyX&NBo?>zC`7|l%V02D@5bw|)+;IdDqc5ZV8`*dM9EJKGcGjF;J_YD`lE@43R9Cj5?oHhiIyy%w8s -nO+ju23$>n!zkUn_!7n-K8_iet>sBMhL(UcF(XkpaB1JFN$pd2^SdlbiIRSi{7Hlu0TZ@dOStYvmgHQ -qw5W-^&YVNpF(}4(RJ4~ggXM@(Vx*HD)!P-w&5F;brEV{FkD_QTeb08u#E2;5h8nnIQh8<MduWR<7P2 -o`cJ^bDeD#N(&KWMS0HCLi+Al_Sn6E8*rH6Z_5(>{qfDdM#kK(Tj=#v-hf!5twmRP&U30Kq;a#i0VD{ -v<%l_?BDD2o1s2d=o7XqVwm%N+(Zp6Fu0McBL2Yf5zj6m#%Bpob+j5Ky_BmQvf3EAmfmAZRqdTe$z;I -`W}h}Pk_^BAn{C+oB1rF}B<cZe`bz{mV7V{GMDIf`Z)X6gnM<cR!3KAMh9X6A7{Qa;J`_u=cicsgcjP -(S~rJK;8vZ`PYEk1W+y(HVm26xHwJU}9Su;TGJ$&Hrl#4w=;NMLK}!OO1PcUR;Pqzpyr_QS}xC{!je- -Cw!m_#G(Q&?T&NAsPspuunY8Vr8g)du*+P5p%GZF{{&JZ6d4FNi}WY=G#i};D6#{P4#;OfuNkDVS{;F -wN9m7kF-YO&N&sQtOW>3DZ(m-lz)0HQgz`!lj2}sVp!GjNt131ib$4OveY=*0fK>yo!%F)DWR_&{zP# -6-Jh3H_?IQDIRQ-e|$Q>FfG*JEsE#=<gntpVf`#r5fu_Ii8eC(|gJ3blqTgMj}v*jgNh5616{zTj%Rj -+>57!`t%fkV~dx;8pwJ!rJsn@)LA5Bvc6{cwn*YnvCq3dDXWHNJL?CwvZ!K^-v4)@ldNPIpd1WnbaQ= -maUUNpNbOjcgQ1fE%s8`|4YqI5>5O>tfxjn*#;l>K1U3w*|;Pnv{y-B{SLtIfm~LO@d)z;tH7Bx}Rtj -qVZ=epVGbuXAPeB%$l-q=N^5MR${+=VqlV!zO9PJsU1y!0J9pXOA>Hqr45PY)a15KDUjI0W{XfEjZ4u -*AWT6dfaTT?5(&f}a%kY$PwDoU{n#PXPucJF-vpEDU%BZq>WSZS4kV%JfIrEJA)RIkktuzvD_|J-qpr -%Mzi$Mbz%V3~k1#sJ1Lo#|NZ5ke-2zX6f21)qur9DYM-~+YaU4N>8q%8q&umF<!5<mRt)6M<VPsi&{6 -a3fxY`LddD6~iIpu`im{{VshrF$p;7L;WVkdi^J!iC@!5)s~7Ro&*w!R|U!ylPE=SIStWndB$Ly_~lu -3I$8X>J@`MN`E-rFI}#w)GxFhF}Ek8`93mq`lo?H@2ICXz<z)%Cn#AqMC*~!6|nPY4m0VQq%UL9ciWk -P|q_TY-+Z(22KF(L6nhVnz4NRLbMXbRkEVm*3-#zLQHN_e#8SanTM;JjcL`cJ>J*!O#mbTz-;cz{}3X -Kn&z0GmA61_4I6Mecu&N8<M`wv=9346GquWDS!L?2zVLQ*Hkl_u1`8WDnFUX3jG2*4AHhdVZ0~o_!vz -JrSeFEr+BnjLNhq%wWt?c{eiR{y2lUI3&`q$vgH;brl)jN^*NLtt0&4gf3#x_PPsH+g5fs6`^rG4Q%c -iZbS`19A@_241;($yE!s60OxNv5B1IiF|?GhBSj$ifx{rFAF0;C@LDqkO$Fw?rc#Yy$uQem8Zqd}Kvj --VoEEJ-sV21qLT7QS|bh6e6?s)-HtFG5O$O_w&Qu&|_v-a998;aS8}X*&-{G>f{faQpiJq7=)$ph)s+ -Ar$X%b&e?>^k_P;LN7!|TQ%+_WDjl8fhq;{O$I8v*reorTlAcSyaBZ@<|x{U8(r#-l8rmC3-eBc(#p5 -s;V2hR&%)UT>TVHiK7Zyfj94jdb6K18ixegMR*QI3`cS{+HM7$%R*+|^M4;pCi!r=72s{Li8|s4Eq0d -42ZZ_g0=-~zg*x`c&WS3&9aDTQ6_vVG9Fypxg8yJ8GzZ0<8IK%0Bx&$^l_z4NfUP^D_i31<**Y!cffw -ru+NA@g_h?WlaKcgpt?j#6CvF&#s?i1iT@YMH)z<@E!vPD_h62Xfk4^B6H;=_KWcXja#EIiVuV8eno- -Q^9{4S?4L*8C+IRN06u(C8i)>+T1NVvD!?>u>&GR(-3<wZ^?Zfjy4FfejgfIayi~R7fNf!(pw-=%-AU -3>L<nPQVJ9OlF>{1Or1dQ0O|57U$UeNbV^irAaB*x5Y+tknclB6GxJGvj7Ss&TO{J1=#Sz{&?oQW+Yf -p&fp8{8E|5Aox`RIO{E<OMBsf`B2HzkDG-E4UubrLnb_{EbO2gR{RHIHO~Hk%W}Zzqi0pe~epQzx7AM -?mOvw{tgn)8czO36aN9&D}R&xM=5r_bj95A9F-fdn`GE_~w>%w@T*vGe)Fa?y><sSLC2nLa~ae17@)W -DZ{#WPvguv)_Yz>qBrNuz45r(sLt_Sw*+^<WLcKp}*n>yQ8;utD$4MY^W5c+z9*i7EDPpi3u;VrJ^sz -SD2B$(fI?sqn(w?>tj~THL)W6WOA>HgR&WFr?tQMd{WtvG3er<Z$*`{%L}+fiw1=b|3)~?<?3|p3_KT -NLOYL8V}#&s+VHUMHc*MLL8$FSld*xMiwh}%&Y{_^NhxmokSK$y%kZL6tjW20$mBaDd<g+V=#G)X5r^ -zV}4jJ8xwd@*n`LT9yM_Fuv3-hh>C=9SV6<?sxeqdFIi9UbRsAlo3+b=7wmqyM-ooMIfaXI{#s(zVZb -e(J{wgSswv$h3UuSEi>}o=noTh7LJdW6YWBW;i;>Dhel%i;_Ms?)*>)qgXj3$*-B%tZa3o<qFt?WdET -+Sa>0F4=BhL3-&7&?j(&N937;_Q*9z^SSIULAA)3M%nisLA-gE9NJuMQZj1%9~Ex=~j(TGr%n1s=&c3 -Vd5ihbApq>9j@Boa?x<p#v5pExQFh;&LpuzgM^6J%9e<zh6DORH$!2%OHd9o2wRt69)|`^#$|HD`gqP ->nuiUPae#3gyjFpYyR$=r{Bm>lAptZgabN3E7)E~pf-3*Ye2uxq{BL)X*fj0tQ`JM784F5E)(RTb&l( -9(A0o6kZcU%?+<_d?V;N2iA?z<0i)Fy7CU_qmN%-J{`%W2Q}1xm@E=C<VW9~i7QTxU1|$Ql<xE$YVMd -$}&=O$SE(0sLL3UYrrWZ(s{f_b_RMcv>7Lp@NL3&f_+*nr-J0YMBRzyLwY?848nvz`;Q6zxoYX%IQvs -fm@z&_DEY}Bu#u->`)lJc^uD|WmF#K)Q{V&}23`p|F=$yiVB*54T`4SY`gi1MXIa|+P|K5q$o0I-e)5 -`&x!+EamvM#dGf9#uc@>Q?tk`c^BA42a2P%p>Bq!j13m#OZU?G#~O^gXPLH3x+r>e-$NxIidG&UwTm5 -obs$RjD##vcV~e?NFM*tS-nh%WumN*scZM9TiQ&g6o!Oid+j;mFcE{9^wxChGjt|Ei*g+@aOOsPNy-R -~7>s~%8{JU{#C_kJ1zm^232;P)vA=xH1>|5RU4T)%-It7bYu_6}T%U0Zy7uJ70tcW2@HxAqdFLb{Xla -UDH|!*BM$LdAUq%QWq2+X7tlvi`Gqe*`+|z(Iwr<<XY}O#Tp=bs<cx}B$aY14~2TSCT(n6rI8g_(1ON -mfJ;R*JNUhi9U@QL_LrGf)XhT<B*W>KJ{!7nDWlG6Y-wHh55==)HL@6n@2$nZ3K656mRuJ4DP%LbOEo -XS@<bIQ(xf~+sTE8!!H_l4NcEWl&GmHVU!;n&7bW9@$fTCTdds%w{IM&$2!Yl?f_S2y%Up$x!W7du2H -DW)8hz#7#v=dzhMDIJXrS>NbBf5g2J9s5o~ZPkW%4$nFFC4_PZ1%jdZv<FgzVp9j%3QRN?YxFI!JER7 -k^q37QJf^;u*lLWQx(Z9Q#mA!mCyQ#sBwbwY`s1Zf`&3vdB(!)$8@<{mayJuu=;4A~2U-GYTQ0gJ4_$ -aW3T;JMo70&Vf3~Nj_oq)bmjs=Qd3yCXA3bF-{=jm0^X!fK```Yd+(8Rc4s+(oEyh4sl-jN-_^9M?0h -Y74(8z$(*vXDKhQf&Kf70)~>muV1R?-{m$c?AqxJamrDxKig(_{Y;+za09bDV>RS2_;`tVT3OpXmZ^k -qg%VCxw78lCV`xZOB%P{Nm~3nZg1);#oAHq|U%2Unu}Y8Deb}RU$}Lu><C?LvTEoFnAGa!mv-Wwl~FU -p7+Z}T3Gb#Z4QcU1n?%`tU6KpE`e|iVn`^g9~ee320{j&FPg(qWYJrO?;(1K{%q!QOoTrvf}m0${Qc_ -LyC+Ydyn7-THyCvVug{}17Ty;fG4T-TcUG;8%+WGz9{^95ssz0=@ViCw&r+);Emi|=r@{237-Z6}CNm -U0+c-QcZ5?J73I$;9TTg(<zaqz0nvlb%7u3&K&n1Yejg)p;FbQPI8HVv1|I-s2azqd&OEOFrz6n<J`A -kW83+enC8eYN@G^kxi{D3=L!5O|mxUQWC6+brZ<XIh_xfL~j{pBSX4F@{$!sbRGt_NeKpu?VypvEhby -$T+%p*SGhkYsdsz4~<X*wkwzOAwM^u(=pUVxYW!_T96$z^zS#wrzDh<j2778=Uc+29(e2h!g}KHukBQ -w9-@OA%{wt9O((-L*lEBGgNvyBRW`wV$kPKb=9l55mgmeR(*nY;v`?M;!o+I3v}ZywmL_5V6n|XlTpr -=sx((R?S?u3HcV>XtvjNMLbMA`6todqPTN^8Jv%0}tsb;o2t^D}N2MwHgQuuF&0P}ZJVW_BZhQ42S2D -VEGISb6?QJ94Q7P`G-dWiAQxqs`&Y|)gN=F`9ywH?*#51*0m=0ev)09Owot(q=c^n+%85DupdZpn>)G -2Q`Jf#@ci3|(E#?QH)V3ElK)6-o#fRq3*Bq{+8W>@g2)oHqN6(qX4y2F@y+ZB0mw9breWNBLl_5aY(T -)NZpKMYOM9|Hix><rL>JiF2AAK2E;!~qc;M$@RGSsk#drFTf!oU~FSk_)}LM8{?{9@)&n#pp96cwvFj -u2g$nH(2~%W3@o;$09K2A^|l-2*@y<@6<z!oQHGukhtR^m&ZI5&GwM4K!7Kn4e@Dbtg`-G1<&kN-YA^ -|VtnJ<SE!`paL%A5CB{tEG#GHf_C|LeIEu_u3TNpOF+ZuAl`81Qwr*Oi^$CWMOiNC#x*x$QOXn9Dyz` -;P92!;WN5xJ(dZ_KPtC!oo&wf%;!N-IWoW~^=7RZ(}?Pv^)b8@hEJcj^h5bn+Nlzy;{C5_!vWl-9cs` -wg~geS(xZuBv*k$nzINjqFQSFuz1G#kvz8Db(F{*?H6+LwzmTRk97p`0!Qx3FUY^e+*$DRdF4hK6s*Y -gEd{u!E*HF+}`}yAiDa;)9KhamFw1AOU|&OYL-fMOp?rQIGS-kN@%czsoTRi3n5Ry^ElPmv(@`ADmS@ -6l;lw_V+><#cv}(q|<U2-oOHiO<v+DlfYHZ)VI2$B$3CkF{t7L+3p2Ls%?50E#VairW>~F2`Qkf4VH@ -NA%5^#Umb5JG0W5wquw0fyr5*szHMQ9fwYxecYEt^aR$`S-<yn0w@_B8>Wc*7nc3?s0`Z(_iPOeJU#W -NacY`HkfX(`blVTj;>>UP`M_{b3g9h82($8G8g>Zke2f_Q)lG80q%*6Z@0fRkJtXZDFpnMR=u-E0DNZ -wK^4#<di&2a9G0?b>o2M-Z2hCq~K@14+~{)~?2pFPBdh>1!yh6NaL<(ZR7XzTpwZzey=hNJ=ig3^PP# -@Z>=im)0^i<8{$EpHA)H(X?;{X~k{ukjh}a~sw9T{`jO<+UrD86hcW93v~l3&@@58Ja{NS%6|qoZiAo -U!Z`W;1Y#EWz*4`nyh3kKD;BWZ{mz;Eyhlw(9d0^fS)@Ge9jdgQYp4#Q<VBPuliFaw$jXnU8COOiTme -h<suHhoiF(VH%s_`SUBtj>s+<k3FiwxuFjSblTI)PxJgZK^gvPku`^1av>2=?-7G%a6(aY0&cKoO#LW -jRD5tFW^atjv`4|w8foifSUCh}pJX<mXm-At5aAd?)d8CfnxG}HEWf=jB1d~&^RxPjeI^P@JCyK1MZq -w{??k0#zg-}7hUlmneicx}tP+*ix(1<6%U11BD^q{wf5s<@ES8|BcUR*{DcVT@G+L|<;nuaGXL$C$tC -925r(k1=^1qSTI_W01q!m^(YxRhBEWb!c4;zadq>PSz#*Lr66_SkSY$u)0dVt};ZE^lwB9>k~-GX_8R -QeVSjuykQ)I4!a}`YGidTFoR{iFRzySj%MqD-QG~6F-!4OiB$uF~L#yQ~1OWh4Ij=B~wJiwyhyX&u^s -HSQM{E%4<2uj9i9i(|5%$eDjsUYqPKthV{2-#MpmKMHv1#<;%-YsNlN-5BJr^i8^*(w$y<J5eJ+L#U0 -uG4^%JC3BV)A`sNEg7PBo)&)x-!y2aY}DHyWt4lDpF`>u{cL=#q+azJD#m<NXB|8Yg?bY?<7x|=Lwp! -b(qmYIHswDBlDzD4D3%AR_buOeEBQXU~1JG1pJEIG;z9@0kPMm1rsz478!?DuS3*01!E7bk*wc;RJgK -Otw|lTlAH`;ZW$lgTLavKewuTH1e#3}VD`K*6O+$zg5Co7+n+(8Gv5l-k=uw~qrN$r&T8$Lr07KSdV# -J!7#a@$_lM#uO6%qnw}nI6Y%7OO*5P33Y#w<GQ#b-cGFDdDy|5mJ>agkw}&XcpU<Hd8z?jOyIw#Qb=3 -q53EyckJjd=X&<zN3`k(aQC)GaXeAL?P!kEaU>I2#`YzGIo&XV)$C>-rk`BeO#rCkH)OjU)$YFb|#Rn -uW>+Q(kSxO5e4yBx{C!OqON|^y7v9@l2LcBMC5hS5Gcf(5JSOo*dJ&A!OM<JqHK_Q(yWyq7YZ;dbUR! -+cmd3n!f6HbP~^oIr<=&U~`5^zllZ0ulcY%bMzzJko7KhdG*;r8NSJEVp5z3wu2*Dq3*ET`S<%_X59% -eYMxqZ2Sj4ByP7imQr4fU<bsOCISj{+;jr@@%qUhv5dW(#xJqqhUqzNagz=yFhpv6Mii7#*Rweq2jzm -^{FD^J^~*TR+kn8CQ*?+ifUj*g}??`)WHbxwNoivq@x~faDL!KaAl+tDQM#k82=$bn#h9TWN`XkYjly -J!4PX)7BaX!dt?`VMMW%3qhVFeufMr14|@!=(qkKdE8(F%8h!8IzJ#ygDGrz`XMu+7f9mY4Z~qSrac6 -|bIx1DQ+T%TW51Kp4JI>_K?d?K|iwYNVMVjqMwb=uc!03+RX;(EBu)B&TmMygJ2Q~i#AVW{(Ts@Ohgh -oXC6()4sdVh5-`JR16tfQtz$BN&Yb@n8pZ`eg)B=0gUoSN+sIs5UP7s(r^<<_ilcg~`@y~=O2qU3_LY -jSt3Ua0EjNVH%!w>J595C=R*_ME$%5CNsQr&G$Jr0I-|rW_XKz`wC4Yv5%BkqhB<K+`BBI7nUb;W(_B -G?$MaT@~H+euamUA2r7&f7BGsBg*xdM~@%>$LD|j-?73hVL#3i>o>_=HWra?(cj%Y?Yn07irnm4f7ld -P+H}+5B+2@1>SkY3PS8$_qz)Dgg2}KUYJlKd6(z{&p*13zETTT1$i(6ywtI(wwHfw5fglV9Ou!oa>~D -Wx{E82LoA@FDPhp`f1?HuLl{PyD8rDCQK{bl)t?q9NB>^ba6v>*(V(U>Mu188`%Ok}1vy{l?T^Ejf&= -WPi!QD8C_uJ@Zp{Qejh4!#Te4R?Fn!zi<>fKj7EtGOyKlTy}k%1@UVq<P=x?()C;(VI+=e@9AaGJKuo -C9U$@gO5dVl-FTFGUj?%QW#rA5&VxUtJspM9^YXPY26R)sp=VTk>S3<LeraUNuKoSOTu^Mk6$iqxC0Z -6K72goxtZiUh}@`<*-W7665Y7$XG|m`)fo?zplee?+-zmBY9XWc^JRntd<b=qQm$mzC=)Tq(<|O8~N- -25#jjX$jOj6(*z>s!x@I?jIR+4u35RGZ*Ysmw|L1^^71|>08ZICzyA=;{qpox@}7sWq`dp*I@AP=5Gh --ignw|KDn?h)50KxUvI&sW7tY%IH9Sl8j&%Ng4ulb=KFaMt=RJiH^dMx(D_7{x@rP>6_2BOIv?s>Fyf -8&8Sv`eHwiI;=;$s9B-{|c*E~mT|VUUqqA^dCShJE(U1_Z6+#mLl2-m>vgR<`$#zR<?B*C=>1WH}h6b -3ao3%T$JP^e!{NwMm%*5r7eMz_l7T3GfpwkOC~!q1Y}($_=kS^ExGs2`ft+hkmj!q2@P5v*g5$cQfNh -i5XGk7yZ_`hrDt3moHbxIc+HaJ_GiSygSbE<P4t79>DVE?^`<a$Xl6g3U)QHEE4-jvWmVpGD1ABXva? -2o5rmiMjC=n{jR#t`2vq7ASls5P}2uy1`^X-*qqPO#3N<#f%bdXOWjw%p0<%_0pI$jj#zY#5!`L{bZD -B(CX@Gk5GZ^73QisqTm4C0`|lp8cYWdC7!;eh!kfc&1EwX(dtKcYZC!CjsK22QtL;aHJY9OOpkKGo!F -0L3Gp;JzHu-PakzhahFYWvfP)h>@6aWAK2ml*O_ErD@0006200000001fg003}la4%nJZggdGZeeUMZ -*XODVRUJ4ZgVeUb!lv5FJE72ZfSI1UoLQY0{~D<0|XQR000O88%p+8rH;n*fdv2nB@h4rF8}}laA|Na -UukZ1WpZv|Y%gzcWpZJ3X>V?GFJg6RY-BHDb!lv5UvzR|V{2t{E^v9BS6gorITU`+udt><J3(O{&_1j -pb+teXs;F4hmZzv1IWtaTI<W`a(<UJP`+mosYcc_rk=kVJbN$XWa$9QSSf-T|J6Fi%M23?Mx0~K;q1S -7v*3GN7la<k1=JutqtUkOmJQGWvJ>226y$4rAa3M1{WAB6#hC6L$?BCK!t#~nGw*oiBH)Ed^&L)Aslx -31i*k(YLY;`UQn-o$#G$OC@eT>wIFZ724>v&N#<X7SKMtrHH5nG|$7<1($)Hty%(_EU?J-lClD}(9#$ -%GIQhMhOiBx~WW{aKu*if=`lPA8MeKOMA5{dLO~2iYVSD^`^`cOn()F|BXY`Z|98Jlk-!7Ix08GgJ2B -?+&`f2dw~A_y2xAVR#%jFat(un?R;Cgd|;@v0MHq*ds401T4g6BN}?Hau$@)={E5!N~=`tq;)_EMwti -itzLcx0`b(7Sjf!NAaw4-yMU>62p55LM%LfogZ0~Y&$QBp5k51f#8Y5qQq}rxB7wV&r@<fZli7DKhgu -gTiG&AF!fQ({c9|$0doT8v#%S{kVn&?q4C$#L(#HCL@W9Ny6h$7qmB^@~cXh^YghdDi(?+i8wuuTr=w -gzz3>{t#LkC*lhhyaEk*gy%JLct(iyqY4II14m!ir-SZmmG2NbAc^Wg;Hxo`p;X2ISOsU+#}Y9DqFJ| -9L%uH(ge;$Ww=I1i#{g!iiqf?OnKxMoP$NJuDz9>^S;(^)Y?@>FW9-y}Nn!=KbYO6iVPpx=pWrCYL+u -ZXKjUF}EypyACGA!b?X4NZ}B_S}z!&7>%gu2l1fq#1B&C=aF~uMeSlVohBuBn}N7vIX`GMN6wv-HPh) -pVrY0tE|%3gj;@q+k{9x;$eFi>d26WKbH|=pK<i~pS{WXxKKijIAe3rHhJg4QYOWCZtU!7V1O$2tdy3 -{QU7E&L6sw@Q>zYHXi6TjBwCUsE2A~;9?F=JnaXc?5DXnN4;4v<5i~!05OkijLq*GnP5=;+a3buQLhd -DYwq3M#?enC^4V8T^K`Ky8Uod<4!!mQsxQyTK~c2+NFN-th>D=vL^#o_(^kO8&YqaTtUh+g&u_xFdI@ -KgY^LU2`;aUV#E+&-mBsMCNJg}Gl5ycpy|Cx!MKfOp<3I*HxzmoNW}i6^N{ky5(q%B3sA*A#eEQ-=K` -MzL+gE|-{9{Vb@_McW_)lFwSIxQoK9*4Hza=XsN@;>&zwGZ}F`ilSF}j&VIg&YV6d#02DB`PIFd79;Y -pH;>+71E9gPl7%2CPX?0&(*-?x%PBUDFM$MT(6~&eu^Ukx^1eEnGOB~osO<HEGc1dH$l^IQjCLI%3le -s<V$v}`pKMr7;P6s-a!)&BJh<AE2h(^#6nmPBrO|66tVJbg5MOKkP?dfMAVR~X6?td=(T3q$l`e&fJ2 -!lzT9wB`&o@&AQ_pdokO{rCs5g+eaO{J2Z*`^ekyWHba5|Qw(Yl2v=+jUTef!?`bSVfvf&%UC+xI95A -!`wzwZ;uwxd)(+N?fZLga~nX5`SP(*`Uw(G-VbgfeeFo>@-*-9L2?l!Z-e4Rx*-vo>r=1kL@eN%migS -Lr&+~SZro2dP3Lp6$<Y2sB)_pe?_AqLyUZa$7lxxRBy@+j7z9M>Atga*nd%pXdut*LE&LbenyK0SWk3 -(c%&c2?-c)y=R8sWzKVXY16+tgIKTU|te#)K8Bp>0Lv2t^rB*)74M42`G`&iZ$oO>apF+6?<3~UTuRY -X<KK>l+W>B=lbqFf$p_HCJHC;Tg?O>DkcmKoO!?|q6Hh>?jvyBH{!Y^dYPk$V?PPCcboOVA~MjibRP) -h>@6aWAK2ml*O_EvuIe@k8h0052!001fg003}la4%nJZggdGZeeUMZ*XODVRUJ4ZgVeUb!lv5FKuOXV -Ps)+VJ>iag_KQi+b|4<@A?&lcbE;h26h+*1jr8Ex{t$#V%yzNEGA}aOM)b)&A%Td#c8}Yoi4UM_>y`^ -swj#d7^IRx!VWb$8OUfD%#J$P8VBA?u0v4dgQLw9cYPy@q7Z^cYg_>1h1fbXf+gFud(_If#vZIQci4r -tH|E~M@$B_PgSwX8J)io<8=vGbpgXrG9nfhxG@E#|MZI6x-sn9!qes-?B_n+7(54t?t5N`u@7f1;l`i -*t+Hh<gdVk}badkQ{L-=}P@I}&qsutBtewf4H8-G%oy}3!VefvP6Z@r~78F^ps@Ul$6(YA`*Eb@ovpU -E*i;|@Xyh1)qd$Z9#ze6JIv)iXRbY%=H71?n{@*5UwGz_}F_Tz!l`t0c?`KB7RFUBcu^?|9nvQj;G&3 -;2$!0u_*k+nZZ>|L#L0lE5zvljAgm9#6rmCn+`GubJJY@4VlJ(MBTcC5-Z(v|1OVQOxgZK3vqW8_b3; -b!bPanYCK~aT8WzshI`;anV>A`g|~E?Tlzzi{lOaG>jqi@=^iE%ncZ+dyuf@wa7m9&zXpIXr+6~V9VQ -WcK6UD4mI~0JaDTS{Wd@^_w3S~*>_yk#1~IUt?`~VG*CF?z(P+RVz041`lx`9+_TL|AeSZsc%??m;x+ -}D(|k--dFtgRm~p6z>ZF;8Wg2JQ&}J89{!~vS;|T7sT!<q+FQm8Tn4?+pf5^)7+*S+K{1Uv@_#i!C{C -OUZljQN@n^0N~k7>2X{#hTt6{HqVnz^D}Y65;CQ<XJ$hV&xjdU5ee`~^@;0|XQR000O88%p+8fF~@<Y -ytoP!UX^TGXMYpaA|NaUukZ1WpZv|Y%gzcWpZJ3X>V?GFJg6RY-BHOWprU=VRT_%Wn^h|VPb4$E^v8$ -R7-E$FbuxyR}kJ|HsE?Y^$;LCbn7064aK&*AzMtW)|LcGPMd!}N{ZZgZK{i2<VW)3qbQ1>=(*sY!yXk -{?xj{R>b>k?r!6==+a5tk=dJAK@aq~@6a`~)GTM63j<KE96Bucl_JB%g+nA%V`W}1V4q87rILY43auh -ebe;}#v^zoUGBieI)sXSW6$EFLSEvmyx_f{RG)oMcJUsJ-T9!>NyYn2RW{ZP)6sTka!xg+0tbnez#ZR -;qIN%*#K@RiFEMa`<$><|y5YutjAt=U<Te)}l>&^jaIWukw+$ICDtC({aPGss`Mf035R)Aq<16S&K{! -4`$|yc>~VlgBB*g{{pCo@(e4;hPKe*B}UsJlOyxnN@K0DI7Ktm@<9h1R<M**-5phYd>%$-Q)<s^;8}x -Kq|Pqy@TuPj}40eztPW@^5F+uq7cteA_v-Jb8*lAt)EPwX1ivke2_|Pi%AP2@+u1#HS9;-QBcQr;)+N -Y+rM_kimfpd;D06>!~Kv1L;B7bjc;MSgI}6x@B_b8$svU!2G$*L*wI_yJ~Yx9h_Pt6ea>J@-)%DYI3S -K6a*k{2K6s?&)9Ss4fgi}WJ_G8h&LuGrxi#83*~wA*WAe}s(n07x(nl8%@QJ#(SpZV85)*G!ZMjIt?A -%4yL-Mna&zUTjo^QOK#;RCUtL2oKO{|@@Pn$d_(^hR(M!h|*AHoXrNUEJa<uXIQL2Y)pJTHT41)QeGT -f+jl0}O|k9$79OUYsMPArFbq_S9<I(_TRw3lTFFpN;)OQ#BT3bFZaZxm>Seuh>6OO9KQH0000802@m7 -Rx-2@E;0iE0G0><05Jdn0B~t=FJEbHbY*gGVQepNaAk5~bZKvHb1!0bX>4RKZDn*}WMOn+Uu<P(VPkn -NaCwDQO^?$s5WVMDSVk))Qa6HYrEoy72ni4ZZU}kZc#<`n*pcl372>}$c5El5-Q8T$Oy}eI&6_c$^aD -69xZ|V;1%^AR6&Z9dTheJm2IzTvBv#L+1tO$%MjmGGWb1-bS`>1ev~fP9m#R;n+7?A;^hhQ-)l4b}M) -9FO%yJM6)K3!qUU|bC^-~(HMo{ijP&>%lPEsK}o8t5Yibdn482H`76kw)^vLN`pQ`Yfe2*-S5j5fP7^ -OyNB8Qp@l8;8Ww+f338mjj4hQC%vJ3=Oun;O5C`Jy;eFo}i5U9@yqj=z9$9G~=eXkEF}MQlb_yv(@}? -sDp80LYfr#6~A9g1Fh5MSQNf_U`Ug?Soh%G2V2RQ;v+Ct6-6PSBdn83WW=RNN%jP#QIYGH{=E;Jp*(K -TnQ%pF47m0I1kvUgA{DvKU$?c_lMn2WSzpy6qHkT$Vds6dtp`*fMyz!!BGID;CG0Qh?n;_V(dv5<(xH -RWZq2%&^N-=u!nr2Oj(*e|%q!qd&v+n&@+aH=(khq10%a~!k(cDf)3vfgpzMP-K-?WtrWHH^;V-R`nv -uH=8#!A9Wl&`%FgI~`SO3sbt=_wplW)(zrw+$G0Bnq!Um)hu-JcEZG9p3HY&tSuDaaw(!|w3v+Zd(QN -CJpGIp7E^Hi7j}tkLUCOL6poBwS>+sMV!zJsqzP+=9R?9mmt5SBo@CJK~}WDLw}(EV2vvjABieS*cUO -@Loov7I2vRwO91>tkkwRDZ{C+u<L0yf^H|?-t!*Fm8H8JeZtggj^|$tv443r_~C6%=eE4Z>1rs>`*qg -*j`V{*pu&!9<O(Z`=Bt^Z3hiG~`Xz&@9$iA^Q&_jSn(fExqBNT=7}jdl$-YS)KRKQs*^RPtY_M;4d`U -kUn7Hwr=a!X;{fbtETM~WuCnM!>H=P*#^WWku&m0m_yNmy{zeKaj`T-w3Vh02hU|Vd`(cR(2n&pxxqn -Cr@Nt*aRcdAY-%We1AE#~O~|KpsCWidT;!Ie?LEUL4K?}~)WCgfat`7BOY7_bYQtKKf8|E`g(f~w*lP -)h>@6aWAK2ml*O_Er%7#bxRN001)t001Wd003}la4%nJZggdGZeeUMZ*XODVRUJ4ZgVeUb!lv5FL!8V -Wo#~Rd3{n%Yuqppz3W#DhJX!QK@X*{kRH;cv{0ImYbio&kG)D{NtMRkE~Wpy`q*{6m_`?AM)PLgycsn -*>j|_S24x1OifIGuy&Zv$E_&hQy?3Onk(!lHryLi*&~(;wcXZx9VM}6f?Q=LIZYHI>8`(a`sL%1^qtq -Jx60Z!Qk2(27N(UaMT};$sm{a)481&+xXfHx!lZ-L`%K;fnw9&)$nLi(pzGh!7gpnf((J;n3>|vLvh{ -GOH3y1FA+xIntcv93B0{KlgcZKZsKh#Umh$K5nQgq74o~=JFG7yfgJJ}7q`7q1&J-U8ub4*oLIX_r~@ -Wlj*$sh6O6w{4p2&Rx^r#-^M-2+6fg+83L;Vfr)M4G$_;3VyVEac`u^$?~uh4qux$BZNn_c5D4sDK;r -C)~GKouB#STZVv9^L2lq0vJmfQo4*i=SMna47|hLG}P5C22w_*rePt_Rj4*aoQBQFGTk`9SH@h=(dqO ->xuj3&x3?btq$&P|dR{|LcGOKZBb)h^Dx9ahST|7!)a7cn7d6Y)q#BXw8M|1hONR3jY*y~Iu-9wXC9E -*V-z_?VyL?4qSK6cZ*4Nc1sWf(FTP`Ka@~0MFq$qpvGSic715X>ppR6)<X=I^5!~OwKO9KQH0000802 -@m7R@bMf$36l80Eq<v05AXm0B~t=FJEbHbY*gGVQepNaAk5~bZKvHb1!0bX>4RKcW7m0Y+q$$X>?&?Y --KKRd3{t(Z=5g?z57>;kRpM!wR*~7rSy=Gs+HO%%C)L20|PiQHnmN*tE&IK{$L3kXng^XJ#Xf{c_8{h -8wXOitxzoyX{#-1jPAi52OotgdOtX!6_+F(4q~9}1y!vL9gc(1PgptDY5i<Z8P}tb^);`a{jE>_;D$? -yW(VQ@tFShdT!0DX(D(v$bV6Ec$I_!#XlFb#Dusp}gzK2~t%XhR&v}c41P*B6>O_XN=)S~Q&Y0poGFA -{mYHXkkeX&D_C>hqm@ls+=z^`y`57wDo+?J{L{lA#ROFcSXbH`aNjF&*0;{w59Kh)E{fOj8e6~Ft?kA -1w8Wm&`rtq?vd>pb`){v17AkIKOqgaX$gJls9N<>mWC048-Pi71cgMx!hY+;!kIM0y|^uwxajHKUZrn -CU3odo*(p7I$E#yl=ibJ@pfx+*<Uiula$nptOrAiKXWpU&2a*pf#3bn`gIZolrcGhJ`>EHrpj}3NmM= -`T7z5XVCe4JFF%t7xXy|5*lsbcNpX!$Y*0xr+Zmsb8<1ig(9axFFeOm4|#eN`?IoVd}pBOr%>24H~}W -Boty0KiZbjrkJj2>twZb7;w*x{DjeMMtMj7;Tr-#^hsJ2L-D-BjRhWD-;4Jxtg%T@1T8uVLr`a~bqzu -#=lZ!h3lF~d%_<dyCQUqbQPd38EDw1seYS~GYyZG?tT=_StkbUGrVx1_hY!+P{8hfqxw$8NImWB_LK5 -3!yH1LIC3i20FO9KQH0000802@m7R!2;OAOQpb0Qd_404@Lk0B~t=FJEbHbY*gGVQepNaAk5~bZKvHb -1!0bX>4RKcW7m0Y+r0;XJKP`E^v9ZR!xuFHW0n*SFkDyNQhQwuLhJun%!O&4bY;e%|ei+k<5l71(I6F -Soptp_#uh3oo-N|K3EoKIGlO&9>;W?gw%wIVW50SsCyNvoEm*ddMQStPZOGmH$76N3-W2wRPcr+&Sj! -gSyQe-;#%1<S}NSbL8@h&n1I)Q@z$PMQ>ID<dY-fpOx63DvToTuHea9)jU8rD9}fVmZsef;CE~oFq-a -5{nY0aK^|oA)UdXZ0bt}fP;hl?@7(hUhYC)zPKtI~Gtgd-8LS5%cl625t?w6ourn7|LCycqX&^;+FpN -q&SW<AY%N6=CvIk|gpe(kJFnx+pn`r=F|cgG?6=HN9w^o)XbpjyoSMr~R6lG{xhzG~x~{_0Ob(>wy#n -DlEH@%)*miQPhb!iB!9!J5{H?<%rJT#Ec%aB!Id!x#=`1MYp_L#ycvJi-gGEGO^R+CJWY`0Kati2XDx -Aa{2!Aol`)X+hLM9G{ot6l^hWre6Z@)RF2#mSUax=6&5Qd%gkVGO7MDtIzy3-g@>3N~E*ocB3Z}qEIs -!n)c+_?+I>{=;&m4cg-UW<5YK4dIl|y!Rvpd;UaSDyb|&cpZ5WX$;`lPe%oA;p7zD0BxEB`#K{=5!{! -QkT6y{-`O}EeP`CqB>_|CPW4V=yd{pQGU1neNkaZ4+75h;Q=$)mH7CV2W=zU7&h}R$FnY0objE50OPZ -_AvG`VyNv4`YQ#CKQf@yZU-EH2>NLU?8$8_AKw8AjY}zV${6tC|>aUnw&Gm#g9;E`D#NqmbB(L&FK4W -Q#6C&e~89xat7U+Jg|vT=hMbO6REkbLbvnRgj=9|086fRQyyb{}z;I3+sI%Pd`5|_i?BlC#UR|DC{_? -r<2uJxGrYd!iAs)CiV@hg;m70hTM_gvYJ%8w}th=brU-^^QmdSU<1vg8F0b2#V9Lv6{WuSeu$M0Cnrs -{>e6enCu(kuTR$`ASffkw3B$=FRoF`D_ZdQ#OFH(sjaVe%TT^%=X@qUDF2^WV@$2Rmp;<+5n-h*BO}Q -O}rdO2(*_l0S%)gBqsi6#l=4Q448z2L@7*d=`W)m)_Q|`;gArSp#$--bcX%z8>-6eZF*v~_je%#XAZo -eJ*Nu`D3gHO`(11*s#{fwzD|Et8eK-{0=$`%gpDxFUHfVnJ%lAw9%jlIXN+Jtaz_tjVa89Qu>hOaG5n -%vt5LJ^ngH<!J+`*G-kltQL?<l|AbrYwDE@V4q4LE=VQVB<^Ne6DU<^I7H#-X{z}zydShk{DJiqw4Lk -9L25dcMQmKSA`@EH`zV$a(H7_-|BLFkyh@pxm*pLE%D?ZP)h>@6aWAK2ml*O_EzED6nixQ001)p001l -i003}la4%nJZggdGZeeUMZ*XODVRUJ4ZgVebZgX^DY-}%IUukY>bYEXCaCuWwQgX{LQpn9uDa}bORwz -o%Ni0cCQ7Fk*$jmD)NzBQ~%u81&NKDR7OiwM=<5E&m;sO9rO9KQH0000802@m7R$jL1pbG*300IR705 -bpp0B~t=FJEbHbY*gGVQepNaAk5~bZKvHb1!Lbb97;BY%gVGX>?&?Y-L|;WoKbyc`k5yeN<hKoFEi^= -T{JuO=cR`A7El1n)IQ`cAK=1O~W#BRkFyXfV1`A7w~JGnOze_?mhP+=N!zk><L<4j}(OT{G@<N?L1eC -dx@GFi#0fxQ&~VkUmW<s6lSCX&Y;k|6eP<sB71|@Q-y6SbxRtHJ@umr?{rT6FtHt1IsFBH2hcT;31*} -znA9F@$QGwTD#1XXm%1-8@Kv9sMcsq;_lgEDl`H1OmqMvUfU^*Nza;I(BPz$z!b@$>Ux8gD=gl&1TlY -b?;WV?g^r-`lYzq?-zY#307N&|8{8Ne@7}LB5#*Ty#0nMTUTVy#98m>=y8d`-Xt{5g#UAc1l+j;wEf* -1>p{8z5TU!*$h;cjAZz`|{rlRh9$Ve?ZWep*QbaGEA+m>HSjzPpG^hru==E=yNM%Ns4{MYZAeD+uOru -r)9tEz}<EI5$4h$ItW`HIxY+?DlP<hH@G!c^fUe*|$d#ocbM|r$MhFF66=+1h8|DzOy*AU25f#ZXy>; -_cTsI6;d~N$bJr5M`vA|pEhXegUj;7PY^CvMvnx6KeEsy<qeVf8s5uW?WY?|<D^!Nx{+<Qu)hH&4^-2 -zg`@sed~Bhe^3`rOf#%)4N#9)@t;4ZgTcp&c_8O1Z)j>Gyk_&73O|-_o=UN2vTwP^m^j-KPU8|7Yse2 -REySCcHkK{j4O9KQH0000802@m7Rt==d!N4E@08?uK04V?f0B~t=FJEbHbY*gGVQepNaAk5~bZKvHb1 -!Lbb97;BY%h0cWo2wGaCyx=YjfL1lHc_!Ch*-EOen~9vfdOo%AR8@S=Gjmv*b;76&C`MLlF@OAOI+ta -XG*J`ZX^Al<nQxt7BCx5}4`f>F(+2*G!@)I@{KD)pTlAH7YOLE-Q+>yi{4aRP$|KEb<)+)MLYh6TY -o|jp(Q+2ku$}Tl_+hkpG5Jl0!LB1hSi>fH}qRXqYb&oc6UT6UBo|K(_(-ryLK54JbSN`L@E2_&&z{LE -l+N939wfWg-^Q~QPyWEb^?koZ~SyKXl_F&ai8#T{b{qPGJMs1s-%~m>{Km0<Mi)yL4k=|r^k!*C^;zX -tGQ~t><@=iBhRTZsyyI5y=IaRB?fH$kGX!TS9Nr6N)_vm&t5>%SU2MRu?&!_bF{O>PL(#L-}dHmPYXW -#LoN9B&cd_z<>Egu6Nvw5NU*OPqF@we}Eshg~;8vc0-NVsP7%f9<QZ>7^SeRIC6rP1>m*_IXj>rDT;1 -&V0%OM0AdYXkIE3C;QIB14E1p673Q4Meb1`$t}X3qPm$<+NN?2i&U8>m<F_<+5s$B_IS0PufM3*PW&4 -8U1{kUFl|jALO~|aH+dgzrnAmF1uzo?8TxBY@mLQcUf7L`64Uw-*j4L8|@>RgRnM0mqfo=Xrhtrcgl+ -<!-pqLQ#E7VifWMsy%5b!_Dj{Io4ka7uXWSH`?0<o-DS(H%R;I721NJ?%)iO!+s-lpsSHxz>CF$gT=^ -l6MXNVm1|24&qk;SvEs(Z>C7i<2FvC7MeR=ZuJbm@@`}FC_`J*R~&L5@E9z8vof&gOMS50vXymqnH8! -HcIAm&d`(!ZYk{cH*>##du~i9gB8&dGGomcL{R;BMM&>U2ed)#$o_XZxXS@^;}^U3c3?FVnVLR@-i>b -lJjhAWt(@>#SW1&^l|nyxYST2D>d$oCa%pv27YeaJ$LcE9OGprZ;)F&dZc(TQ#z_TawtW$rc@;gd?Y2 -l`i!v+ZG@sK)<vuwk@>Li*4r?G_0`{G|(o^!*`=>Wo$_b45l!<R<mG$>RyHVXGTMe=&Tn_)m5P34|tw -M*0v;dv3W7!t~9e|k-}7~W|^Y8o~h_1{dxgEBHL=I+fLqtblS(DOUp~WoT+(bM&s5i)n?Z^ZgsJmsKc -+-v#Qi?O#IY<)WN|4ZW_8#$7c6PU?F@@&*GF;c$!WQ4jf9*Qj}rrBZ?}#nH<PE*UQIee|uToKx5K_7p -^5WoU%^50Ls(v*RKH+M7q%^S+SkyRLwyvT(zKXX0Y>i0Pw#0>MQl&9?gn@Q#*vh6NFv%r3TS0Rm?lp5 -`^gz=r>h`E-$<Fg!XY9Lv35+8jeY7b)7x<!^3!j`!qsYn;tN%m3TtV!)roKc?4(|F_7a(eKy=P<8{If -<H;mhYI+o*RxIyFlcYhtQ^(P9#4sC~g~1+P$1;P7&<o6gG_TSt*tsv;7?%N&jfjI=9@7SP$N_Dx^zH^ -&qM+k;1FNuAU8U-#s&!NB6#OYwrhtpMPitPACD}NaIcyOMhe`}cAKSMPzKUklVydE2-+--z4<Znfi0A -+`$KTs-b@*lUPNuTT-=w^+Irh^$P_#YlNrkC9pVYf<U6l&e1^ha~K1W@3#E+@D%=En3f=*r0M8L#p&7 -uj>zoUNq@ka&P`}xZ!#BALH?4nSm)=Q+#T&ryjTZ~>(dssc%8Cgl*TG^QJIwZu9jv_EoGmj?FP4Oh%V -qE17?$D(M>EU-tqq8MGi6^!dOrWef*Em6wscUhRcpe#YM3Zol3sb&DE6ctBJ%|e%hugJ@(~5}*DLw@) -;I<UQG?3a+tZ{slcLVq{Bn!T4b!~t~S-Z&d$N^}0y?8U0*$xPIvxjif^`-#@A6tAT<L_~}U|FG9i0JX -Y-&9qH+e8h!9B6~sm=rT(&-SEI;FxAeGEj*C<nXjTe8E6a<Y8qO)eY#=i8==T(80Ko3`}+y8enw=%B_ -vj^q38-7Ejf=HI4dis>0v0$iZu9E7%~7m3XY)zGE9_n-3qNE+iaMLIRgLqLHB8o_a6Z*pn@gM(<T}*; -Lz_X4e}#3dOPa_QHpOlJgqS@}FI2#nzMCV(+lt%z8t5Z$4r;;cXA!sSiz9D6UVM&A~`A?^0N*X;r2#9 --aRsmS;2TDImjM6H|>RaS`lZPc)EzgG&qMo0U6dc$PJqlmMtbgiQV?`<9@q#d%9S)z`Ym%DQMP=<o -eNzFrJ)qfmszBd2H+iecd<gZW=p!>ZZ&?%Nu)~2U*6)Z-W~BL!wh`KX;mc0J($L1M234E0@+RKG);-^ -$DLC^a9b7D;7jn<@q7yL&m(URG9$D-t-Do?pqg4*^1p^OlP#6Qi8Ep=~P(EVQv#(Q9(VwP0y2^Vxg!8 -y?!@W+j<udl*O$@z$&}vzgchMh*^$1%J@{ngDMsW_CQ@2L81L=fi%pMdxY>p$~BEPVR7+k@T+JGCXWB -&nuiSvoILEs(eZcp1|-~;IgFLZgGH&w~{4o4Ox*VaYe8K}1RYnjw3in4N>jcW6*WnCZcLQ@b3JAavX- -X#JCKj-TlHt`C*K@ugLjjC1(?2>E1@!GnP2pv|X0;eIrMk|Y>G}vy0T1i&Jrn8Jcf?|Dn31>2q?NYWi -90w+|Pn6$|h~&)3YrqKieri`0uqKo=)Zd#nG$7tTAqRRgq4f=L10oT)cfJO&^SVt1d~39ns3Cg1X)jZ -<5>QTGAB;^8{z<(lnz78}JX-+VF7#E6uEo#|krqu1dKY`J0;+&X9f#d%qrM;RBV=x+7>y$%pBlmz3La -~eunz74xw!Y*4Flf2em}ex0mAGp#GnU$aH%D~z-HASY<74bwv^9QM4JK{W4#9OK7clH-lFBhU<J^S=d -fgOqMn9Uci+Cd3uaTkSOWq4jU(BQyPNUU<8cqE9(v$8cZ6HI+907E)aWs+@O%lbE2vRi*?=ObO4=7Ik -Q`v_uG)e}qgT+zInog{YPU5!Z&7;y_Oe4x!5P%*@UW~7@yQ_*?$89KlE_=jA~lw9eSsNJG?<5>P(;Jq -Ku09%B9xU61_j2pzds-}S$vO{;N~HdtU+PNWTuE7{yorBX_psE+~lBxBYO^FO%~Vh(Lc8-APRX%%5X$ -Cb^4hKdr}}oAOOV7XV1@1W(p-#f=Mg@7&p&AV9Cmefju-$loFcg&%ggX^+bXou`qA49Z54dd-_ccO9{ -js3>J`k1>`Ss*;$gv6V$z&8sKj^V$3t#jhKV5RMiHomz-QGUrUNMjeaU+<vXbp6EsEjO(EH33fo;%-L -y<5`7yIW?u%Z0=JoV|>`>B{VK61|D8T4@X2$S>00<m6-pu&TX!;}vCX&7(ovkyVE3_nA1sDU{c1KDC7 -h=~W>Lo(KmjJjFwS`N0lU*?dXwOE|oK03(x@hB(5rHDufz8#*s3&Hy9Btpv4?CQb5=RofdYBf*Y)DHk -DiE2ruF53^KQhH(IG7Q8`2MUEn3P(*IC-Hy|KmgIjo-g`@JF#QLEMUVk|^Bi2w|iRfx$Q%Pl%TLYFm= -MI;B>K3<lLv;NV}3L}D}!oL&Bfb~;*Qpq`kc3|w#OZYMALVGL$ev7-Ud!Uq$mfJv3b4o5-b9|=@z4uM -T+UnSuuI|@1ppcbeB^TfFV=0F!+XpR)Ib+)K5R*h_|3s^QchI<yLJL)gs_X59Z420gAAkqyi4eSB<W$ -X%U^2>DxEW)LO#HtpsqE&a3o6O1`-!4SE7|BO@t{QVTKvJS{lT$nsZB5KGs2F@`pcF=Ou$zEdii?%E8 -)Vv94sIDi3}zZ~#^VK`B7hc^ZlEg(x#>l+#4YLjb(Nz6#+WJPK9~q-!vaYRsZefkCu4_D&9lW78g%6n -Bv$LgLut0|y1Jbm9bJMR+s+f<!BM@dv!gn%kMg$N>h|alUq1ZO*BoO0SUnYc(PoL{b8L}T1_wt+o1m< -swr8y(I$Ttcbm*#d)l#=Oh-v%r-y)xjZ7Tsj_!~r2j8#h7PFhcWl<cT57L4e<@gv8BaU2peq2}{a{g9 -VSm<^bk6>0u8$U7|eMq^m^n*G!kcPa8!=enqvtIK=^hK05gRaBRl7sJ@eRcm%OGZWecmkq$<2qA2ueo -SbjnIP}C^nF$eNt<qftDU=@w(K?1RN7JO)LQ+p9m6(w6h@mdL)nY$`y|JR6$YJA0%*^+W}$33#nQePE -8LpmuO-K0dWa|F%ZB?djctMhU8TX>OU~uudpioh@tN;$a{Uc(7HH2I*rnOV$M6wsLp7&(vSzVHiI81^ -0~nQQ%o>Q_1&r#2O$=zCLVct{e~7lTGNf$Ze}RV+^|ksu^f5TMlZXWZTxHD3#DGQ3+i3?BhJPB^-i(5 -ussC(&?+Da6!!W$J&@lEgloaR@xILx5>2<R6PwJ|UdqAiCQNr+d4;bz#A|1i3!(<PPDM_Uf9n}Nr7SC -;-n@#oLZ12DBvEV-SP*G@JI$WU7gMOa}gFc~{7=v<%Z!fXsVqPnX2-xM(R~;jobLFXy_mOfnc^{_lLC -@<Ia@5HOS$tv8d3>l*SW`|n8J|j&TL{5dX+fYjZEL+~V|h61McJJ)38J?2_dBwS(U1VOK^bALlCd#<M -Ug{L8w*pOVsIm)5mw-}u~KAs3Gpbxsc-B(A$w@E?SRV!Qa5*7W$Gk+D97d-*bMb9mhHjBt3eiwu(0wG -_-8O^4!atehG1imHP`~eHJ9|jL~K796>Qy`26-dFqB{Z#oiwsg&^D*wWs3%6-BiDTFWQ2Ejbp8F6Gh{ -7IM@UobZd4kIh>1clX^!KZ8V}0Sv(@9yW;ePIz*Tcl0Q<Y!et5XD0oKWeV%;o-YNJsRk~Xw>YFWDn?Q -j89=a@Z@KM;85m;p0QUQUjNP(GBkr?>18(=q0suGJr+UBhnUO^XCpk?Y)YiE3F2#g+=;7GoJj}v7q!D -77uU;Hvbnp=W3=<;Khm7ONEKXYQBE<uZm`D>BpgeUn}XzXYdl)3c`wqWf#cKaAi)tsmWlfEI@G!{J~_ -S8Usklcg8%_OhEccT2G2^Gr<(y$VUWL8EvT|YiD&t2!}^}wjt23aueW$ybhW~XW=>0b8!?aWOc&VY-y -WsZQdB4Xx&<mQP^ralZz8E3*<bhLzBg1{sR7REPvkzwe`TUIC|v;a`VwrG&DSg4eXaLnSk&YNzVfp)$ -2d?b^wMwk{^!8K85)s);zP-Rtp3AW9)#KJJ2HJ*EeLG~tJYKfbV(%rapG+V^VYJ_eeeiepCOaOmLs({ -k1J49#=j>;kWWypG*<_K<vsqH{)jGC#?jUtRdmjXtxTGrr9S*NSzd=WlhP>BNCRt*LcB{B$D2rNhJ&S -FdqE~@H^mJygvKmUC4?CjOclNYBi(&sPEPoF<K`}t=j@vx0^5U#T(C#hm*o8Vxas;LTjWY)I{2E)eW? -T5iE2SXlbMJH{gi2{Z99G!l^|HtI-#2Fy#&RFb+_|WJJYbj7OJLulghC}fvq(^_8e)K?zdREybh9A-( -MD>btq@=6#VqNn7fa-IAl_KtT47v4y;hG-M=gG;pk6wL$?o9!AC`lp$s-Qx0v{YKp$j8~4DVhoUQ}xC -iBRBI9I*Og)ZOUj3NAL!W7R;O2*r;n9*!<C8@{vi`xL|BA;V|6ljR}PVV-`Yv=8fki2-uSiLcGKA$=X -t%02oK==z~!hW;y_qx9_M-!6jIBZ6b>V$hxY)*O&$v`v5%rZy9$*<LoIkjVFYF8{wT-zXB2j)>@}2pi -Y@`PeCF<eI@DaZ-Awd*cYroNG};1Eyn`51ZKKe#|<JD|Frxp{waZfCx4#&`9FZhR}+`UvHcln&r8vTf -qQYqeSC4;BY}RCz9^1#|98ryKb#2X2nHX<<uKGAEX%%(4FqwoY)r@S>51U*+pS^~%z0FPf+1Ouf+624 -RX%|D5F|^)i-pU=8j-Tz(6@@4D8lbNOTgk27!P9fb5_xs5&L|TM8D~fpK@Fvj(XgiT4|O9u}OlNQ0Nd -OIDuTB`;WZ-2J8gA#6n%39K{%6%6XTjPB5^hb~-HE^}|?UweFOvkTHueGe!O!JRKJ1BJ89G8Z+48ld! -oR3>w<+VUyG#08Px-u!TfY;62w0y7`0rqpo$O#Bw}gknayiO8kEPDNP*w+sc&hc!^5#?!*u%vfp;J!D -cHk7dbz}$4T(`i|b9!4H=R)bzm14Wl*r9;ZNRo4EW#0&EEq8CUj_n;pf(>p^z(HD9IMk`*juv-dI0i4 -h3+f@>^UD)wZj*9nTPB&o@)j8~P2nB@|ttvL-N5nr*qTwW$nju2&ULowA<_>mW@DOsQ}9a1pFQvBxnt -MKxzw+}m~@Aj;gZV}}V5_Ex}N*OzQ7v6(^<#iGiV<omR1n4ynNHAfdt#UL072Sw@~PP1(bj6PP|%eBI -aAU=NrFt$xm<nzyc&FRuK4Bh|*)Hk3G?xIntFqaApH8B>Ic>vnoW)9{y#+f=cNh#;ppHZS-l|^1&8EO -T~<ql?pF=c7!S*-$cqA?Flp+*J(IIs(<H>iBFLWjKEYU8UBzY9!D);lL@UKWA4-uA^S)Wa2?wm{qmQf -QmO3dMzqYK2y;S*TtUF3SqnGgahDUn<94g(JJN-Ed^DfES;Io$$lQ(I_m10|8Gl7P+K)U7rl&M>#A?J -<H;w&x;HRCL05vuG+IJ@MgfeJ;FB8KCN!_?@;%S=zH6t|8l?T_xkMF1@`Lr+jOvx3O1YUgXz`p@1x|? -yu|>HIhl91T|uXKa5ikRm(E_Xu1o9n@ZHv!EK7#_Hh!Yh@;WQ>r3tEfw#W=Chz`{w8=37_h_r+*Dw{_ -Cx`mAiyw=Ann~`-V=C~9;shZ29J_r-yq$-jl8vT$hp`$yX0}erB9~$?6WomSLKv3Gz*rB2%W43yf35u -vBJDcULmUJD>->W*01Ej{t%0xOIoEi*!IzNG$OIa8~VP6=ZCXR+7*9gHq@`0&o>OFCi^dhglLyxid-4 -h-xAQ_l#gUL=M!qCoKId*t-2J>-L%t$mHiT>l~BWUcOfndu?WR?&Pnp)&6D~$n8b~4WnjSfk4;!i%!0 -BX@%oBnfWm5Py#=L%<XzL1~QJ2{EW$I9>!SF<%huvSa5B&IZOq?tPz8BkS@KpKKh#Ww$S3%bIbVl(PV -vbIi6q9_toVPdON^dnhYCc`t#uT(3u?UH@q0yutqk4|K739)G1aWHeP=}cb`4U^7>Zg@_EPsqyQO)5> -Yc9t<Wy}~>n3QRra*m})`Jmad7ZOaZ3pLLSih}OZ7;uMjzQe@73dw@L_f=x+YCPwskoj#NoUcy15({$ -b^AkZkUJ$NwV#g*i8ymJI0!AL8VR1@Q@d8roV(P-tgU~@_IRWIpWu3KB5a&Zw7!GTzVtwd!~e7aOGg= -u7mV9*~cn)A80*(ybF5C7(+$9mxDwDcjFM`+tGE6r+*yyu>O>Qefvic3^%_T<<<HyT?(n<}r)KY!o3B -hR9d#4H_`LMcn6Evx4sLp^K?J1aI7mz>>HQ?X`bi+B&a&9#mBdg)d%S}*`!qo>XXUTw&qD%&&}Y<WpS -VnO)U0RfQTY$AI%DVRet>dq%zo`C0RDbhQ!z+C9qfWxzeJMZ~&+w>Qn0JbSf*`+?L1jQYa+E<1`c2_4 -x(O5N#mrdpKtz^mdie^X=Hw(5R`*8$*N}CawtrRN>73IEI0?6mntR5>{Y4_Bv@XI9f3K4+B`%4B4dLx -wsc7_)+F{Fe5^No5trNG89Cp7VdjCArs2C!DJmfx%Qay09m(Zi2yvg|^YOFlA5Wlt6&ALdNUih!ozHg -MLAW@rZ!E`T$QmQZ*|H6*<pjTkx29zqO&^*k7JV5?vAOsqY(tMBb6%{y|vGY$sOZ?HS0_|U|1hafPv( -3;d9qv2^+1QT`&qw8$24NUhTsxl2@r#d4fn7f3`3|&Se`LupeSF&Pbr*1>`pYPj-fi?#04$Tv@jDdL( -RFsMT=Gk<{h)ny#?kjF2=nN)gCRS)`>)s8H-HetzF$T`T3(6vwR9EAH4g1|H&|ZA9$5dV^K_oP+7WKS -(Lu$`SHz#7pNalEmd)r6yFtk!Xo{=&d>poEGS9&)?cP8tw?3GPlJQ2^uukZzpFYo@1cLzh6=uhMSOeS -D)4}&PFAyNw13!mEUT!4E+g(ot&2J}HV0AJst{)Pouw5o^0-KL!I6TK?IQ`8uIQRe97+jlckD+yRxXe -4>DT?w5HwG_cJCG2xe_R|t}n=258yI+aP4Kx1w=qsGg*LRa4jLDep*-Ksg>{D(sYfs|$^23ujYl^Y_T -{u3y9wYl-^==Q**{gKjQIz`!!eW1@$#7~Pz__cjx+#^Tt@TETf$vmI^@V1ynFu@g@ovavkDXY-wVnH? -T8Y8?V3BE`DHFl52*z*UO+JwC{vru9+km+Ls#xq*-5!U+h5CUieAxfrtI7L{E;Pivm;a1G#@Yz1v8lR -G#qQ2RW3lq;*jrO{OxAUv@vVzR=lYABZdjp?w8NO*-koEyXGL;}yKvm!xajdz^(Wb~gU8n%#UoUhdc( ->DMmI$&2p+X)JfAVJt;zA3*?Y<^z7^9Nv!SCyOotN+O=(l|`f)t0>Db`$fQb(V!L5QW@@Vi>Emk^HX& -e3=Ww!VFKA$r*w>mJ+lrZmcXE=e7Kh7#2o9qa8*}m}D)?WdbXdO3VJht)6$q;S!T|JidVNFM->2V)d0 -bZdO)350W@QKU6cjB94YHv9#De&()lL+td5;RA_-py&AW}QrJqrn|<F-1M5LRM<RS$eup!vvOl*Pz(T -PXb|ety1ym<3a8v6x2KF<i!;J!*ls0T_-Oj!j5IbnRf+-izE2KwL3o1pfer^b(NaldLTu=C;hVTx`^Q -!2Y71E`}nH^kndmZLm?>vjDId>hhI2@g6>M$1I^9<17P02_hCQ*TK2Ih_D@#y+j~qny)5av5=;3*$FB -Yz33l@`(7a+8%&GX#K>+<q_+T0BQL_gQ-O<H6qK`b$9~o!3F%8AM4_4Oseu#*v%Us^leN?B6w&v!>_{ -$|?>|bOxOcD+PUSmnkX>Z-gZ;1kV8lc`S(ze<*3sJg6+?ZCqz1EZSHk4kVe_#8$0Iycjhs!M=<<?;k% -<Lzo%Am1FbFmD%$ZD=$@W2^DutNhRr^s51vSkA1lqr{H9I?Uuc;Z7j<3qC}$dHJ&SgfG4Hs_#wqwA(x -ZWpZ0mU_PROJ4X4C?8+sGVmG?y0$G{h*Fhd=}7C)2v6mh<2c5t(49MGV^8Kxddq#aEsC@U<9N?$&ahc -%yh`+}ceUCG^vTdiGDQ_*07oE%3aqcc_5$4H8XTArc%i6r^-k|#YIx)oKkiaK|6(MBAa~Z0yM#v?Ko+ -q;sL8vIPDux$T64z9Tnn6VSw#kGIK_~?tQ`N2x;yHzWP>nPZn9=FZYu{x{8W+45#=i{$z*XL53P4|Xv -~+l(f5&(5p(G<U<!KKT$d0W{Icy$Q&yL@X_V9M5Di^6d(k5%)5ev@a2Wiw+XYqZ9DBDiC-T+51`-BX= -wnKJs$aLc?&$jv5h0m?9Ul`vh@>o>F$o$6jGx|pgi<SH!0qpcEk@3D?ro2s-tk}=<2~n#$3FYt4EBv4 -o^DtNLyo(WN{m_FunLjXRXp(wdd!aXDhPPLkd&FdB}f*@2^SG!ah9Lw#9cwwqB**BruBy$(ZB!Yy?YL -uWKmS}Ibp?@5(cB%(nWi$1}gyRG)XB{BKB%EIZ0#=cV&gG<h!Fvyomv}AUSw9ua-Ny5uqK!eV%vo?cz -#zRK-H*%RSOOg`>~^aO6$EVsotCM$tPn15;OM>SZi~?qWHCDu?%4I~9Ao87OXn=3P|zPhtGP#~ACwun -Me4^U;E3+-JXgb^5OqE{l_M+c8s-Ht&YP9sr7J?5})=j{T}<Ya;gsX8RDyKqf5RJ5yr?+;H4pX44d4? -}gkS*>o5iZqHPwAVcsfnh|H-O}u>hSV4j_$LWHg_ut2O3+@IKCME%zSHpDc!FqSKkAuxY0hX|P)x(Dm -)qknqgB!0+!R3FuTmBRIy2(nILt~8zOB=WKNHX%%Px<cO8CELw3}Jg8{<t;F(bWDe;j*t8xMP)`V*S` ->pzjxJm}<PD=-YIR3cg3cyM$>RBzM69Fy$1tn2y}QyG@Bo8t71D8yGB1LHlcOCM|U}9MS2sv-3yae}D -2a@~)%pF(8CUG;)ttfkhNPm&<79c(~`MGU~4`Ij+(J-<u~+5HBBkc>kV6*VU_+-z&Q446he8tHr;aeo -T<v`wyYZzMJhQp*-~n)f<DWfZel@R6V3Tdby_wD2iWNJbq&@7UpZDy<EqDo_#Dv2>SBme_oxOou54M? -z>)jrD>k{%A*ewCJQ#|(TNJBLs(KMJ#tI?-id_(>{%DS=7O&l^kZps%QC$%cY)ZuU#JV+=Or7>qP?c( -U>kV=In+zHk9mh{xZC@#hUpD79W0UMvHj*n6FCTQEPtm%VjSCV?xiS;W1}?uknUIw6uLj`^Mu7~p=JC -YRtrJ*YK_2r{q)oD?)K;gL>QNcv<jC7Sc7jcW&yO{k%3NCSM>iJNKT(~r4iMD+*Hj~M)yWp?`^ZIcYG -O^4=<vX)kIV~;+M-ISgj(nc|?CwHj^8rKX4}}%k&$a1`rqi5%aw;f>kv2C*&<sZY+K9#=5av?C>9|`n -_e3<g%(?Q<`BaFXKUFrSZJo_UJanU~3H0xwO^MFUighvVTZ+|GGw-UyZ({d$fMVoN3~pFzlf=RXRZl2 -rkZfU#d~A6_KLg53LDyc7xcd!`k05y8XYd3Z{i7g(5+wmk!{-i-%vZOOA~Ct!MqbS8jURc&z%`{~*<m -$*dX1E=*?V__uv85$|Jf3WH|Mu;bR_m;bRGI=0_Nh8khj@z}#*SI53%_jTCJa_-oE3mZ)i{ufY70|XQ -R000O88%p+8y}5(Hivs`vvI+nI9RL6TaA|NaUukZ1WpZv|Y%g+UaW7wAX>MtBUtcb8d97C4irhF5efL -)=UKVWd_yZce5J(6M!v>PP4UJIS<!&Wv$s@@<X+r*eOR{9ku@kbehVeyps_N8rnqLQ{Eoqey&|0pf$@ -p|6)cMTiIqS8$5_=!;odnT4kf51Wx+0I<*owR#oGKF)`3TP=$QCN{X&eM(lls7insRADBd8uN7p4yOq -fIV5ke1?U(5W>%)1C{6h=FMX6i-L4;fi3B0J$`l2@$b>PoEzaaDp{pBQ61a1e;})q86p3Ax{~>D_;Zh -YC7GTkCH9PC<zSdncqM<gp(Yz%;f<zdJGAv&tM<@SwX2}SD>`avaA)%m>3sx>HYv_6!ze)chD1xN#K^ -!!hq;2;#3dBSY48bzsNsI!UT1fL(~p{ZrvkGjA$5iFyb}Q!lJ0bj#`pF-x4XDq2}9c`j!4(=1AOIy)n -T%X4jc1vdQFfa`651v`z1^$~>95^PYTrJt4Vjr`X5J2Rz-66a8Lk=L;Kc?Q)I{^9$G#DD?a*jFL-FoL -Kd6f`?E+=u!g*@(sVf=d+nR2hk-~@GWFv+X4SA0}gu@>cj+9e&7%t=gnmzK(tcGDvo3#xG2{VJAy$&& -%f@9UYM5Dw3-iYHd|ls134)rCi#fnj(?gOZXp#6_f}m89N&28>z4+X^iC*Io=<5E00KAAcYE<$LK1rc -;!{TiTB)a=EvzCZAnjBa*5isH7j|<hoqCZ%vCf^#j*N0(?HBxTcHApFgDF>jt(x~pldi=2z3xCm_lCE -&_(?CPA7wd_<9%XsX|!qLYc6|L%!lb-aqNS8<Qusj$e(eU%nB9B>(7eIV)0Xdfx9WnazREmbNk|UJ5F -aW++LE^Ta*jSFfVlO;uxN<#o`X@el@9Lh&<7#%|(r(!-Q>ev6qwlwMCoQi<pK{Min3Z%&6R0_(dq`H5 --JE4$NNMKZ9mPc19Fz#5h|ed#<m|Cq4e)6@-DUlYIwn5oIf^)%UG($|JJa4P(6rs$Gm*1dY4xi`_bC+ --+YxErn)!>_hgJL$i0dufEzH&FbqXl;Tcl=C>{IhZ=otVX)+_f4JSX!T;f!HI99U%U&u=%-FU79rhcJ -;Ry%OrQ^ocXqNhJETNsf;=ASJZ0^*S20zgKcC*%zQL!BX&A5TzXwhE~{hvr;b*|hN<+|l(T+N07WLNC -`ikJsH=!Rb$vugG)P)h>@6aWAK2ml*O_Ex^YvKb8$0081Z001EX003}la4%nJZggdGZeeUMa%FKZV{d -MAbaHiLbZ>HVE^v9>8*7i_w(+}v1*>gpDd$rjNYTQD)3kRv<bX6eB$xKXuA|TrZR=JR6;axav)KRMnI -S2WlI(SgrbTNcdzLsH4(B~XItYTl^7J+@cPu|tg*b?^;Y}_}wv{z|U8;r`#W&)|Hm_-HuGk%~bJ;4EN -*Jx%w2`%%&ED<>%QL~*UexeSv1ZR3_#>1+R0okU&JO$?U`_XJdCTN>8okPY7BeLm>>%%uEI@H!yv&$t -t4h`lteXjzi7Zcf16UiWL1fz~AOP{w(rLk!n(akV0jaeBSVeo<h^7%WYs*a3uzZ>EO<v^9kp=-1tA%P -b7C~#pv^m%Yhm9QsFB@EQBUr0oc~K~FPkX-4n|)rgDz9){FUfM;Vwu9)ayuLEH=YGSFq;AEac70x?O@ -CHQ7Zeb7PD<F53D&>MpF3pWu7(*_GPZ%@7EOyjTZ~{t$@e3Ey!}gzANG7OwR?n;^a=0nXKaqM9y)k_` -vI1;Dbf^H+nobq3((AX1y-&c#&t$z81`RIEPMEBF(qCL&CTAjZ1f4g3MrhvG^$!v{h$uVk#-^=XEXXs -c8q0W1-?4g#MGA_~!WLHE;@~jo;49DsoU)GwDnCeg+gYK@=ADANVi@3_QgDlWkszjv8KrI!$wJG%?qE -9<bnv$!(JZg}5fDk?8oBtAy9-KED%0&*_<mT&2z=Lj&IwBFXYeuIqW7u<hiXXp;I8THCtl$gFs?Pa2u -PyQv9xsk<QnS}=Gun<WX*m?Uh)u4fEBfgw8~{sW!_97%(l2o@&*K>Xccg;H{-tY<T{T5u>UYrZk;?@M -|YCP~Q;B1xi|tVGSxQvzJ4;c?Qvj&H?Lh0$y_%fyx?;8^o25kECGS0QeF$>3GQo`0%M`x>5lqsOQ9dP -yW6V1ZhIT{r1Itb^~v_*oR*Twi~GvtB>DSx3JO7R1Ylp!Etc<tteVdXsP2L1V%XalMpD2X}~fwQQ^Kq -o{)!jeTrzgJ(R0317@;xE4)Ymjj4}!D~1I!RAiXjb(}cXX$f**aPm59+q}DrECnUo*1*D5=|JnBn&h& -461^sVlNAb6#;u@@Wh3@2jNCh?2+i}Mrgkv!lCp$vKNemX$d!!LtG%2pdj`!i;FqLL1<}Yzoq98Ufoe -tJa@2U-+l9?^TLqsys&FX?O$o=FDbfP2y?F6?-x~f<+FX$RLc)O*c5z^|9@7CyDPEVtzJpF;q~=~|Gf -U4YB%5_1f~kd706M+0*QXv;fk-71Y04x)|LfYLBO0rVO)ml_gC!o7Pd`p6txG_4jWK1ipR_<6B!i5U> -(+t94+#(*1>YV4FXg&vnnOgsWtmJSFnN5LlE`MxngfI2O!7SFs^jsLb=Hvo_GPH*%1;6Q9?>2(p#Vzl -9+D3hu0X4@qmLhJHouzR!w8@XLX~H9btgHS_YA8m*|}ZIVxBL<J$mx4AKNo$amzd?L1g*XjP6Oh2G2I -I*ZY$FND$Xzh;*{9>-yMj>)0gqj9Jh+F8&v%oME_gJWuH38A>efU|V@0|=&MunistlOH{a^cp__`RoC -P9s>_}1B!I3DWg=SmtwCO=ml{QbT;wm+`yh8DMJN=$PmQuWL|~<5n~KgpqB@sde+rEheUXka{1y0vRz -w!M6<;8Iioaj(woIB7~pu_FtwL$0r0>zfr&d{ATx*bnnScrdBLh$z5~C)Kq8#|{l&NF<wmH&jex*hq9 -u}3c(9v(jN%^FFl%5C#I%tG7>>HI%U{N%;05gsv1FpbEeyRksoDJDaSj2y5FAiy-*#jWs|R}wXkX-ak -Fu>3m#`ql`inPSM2ehkpR<5Y?{ySLHw9@T6i%)^LK;T7V~Br<7hSx=yrK(eFK{~YPA9&KLMCYf`a>_q -5J;>g@^%lP@ZVnWySxC8$+7T)67`24s@ok9qF~EVV#PWFyJ&v+VZk=Wrz$LPb!Y$ude=ggNBg0OKzpL -<4zy(37ASYS{*nZ$Cd!;82B4GES;|Y4??&j{AnSO}DXP2b-vvDUmxKwaVc9Vh;!+9W1CXzRw%I=aBiO -1yrBbUP-<7f!L4;VhZuohjOHdBN5LHEd&KsR?f><THCki1Ll^G1(JVzgsmn~_m369362y_p={^DET%s -^Xd*Wd|5;vNOiF!DyWkv9o+fkv>tH!eze@#+fp1zY*{7NR$#7vSB9oDWiYAOXii^Bs~x;J$OcVlQi1F -^hsd$J_}*@}3wEAsAT(mH^d0$M}qBI69ViNPEDp0=tO6hGmiVAmVzdx3+}}G{jladO(s^B;7jUMtvN4 -ELes#=TKQAuXqL8k&)_^5TJ~<PH;9xH>X*7b2E%GBO;%FyzZp-j4+cVA^HV@FF3~t2*e-N-o!YKOk`~ -;670l)Wh4i+3%!&W{_Q-(H#8AVoq!ntBY#u$ek1q5GAWeF@39F&NU*;&Fgt6;@Wc;_(c<5XkWoEi$Z& -nUP4;LFg``KLLSh@RSBPW&fbniVAk4%V+zSL*hMh7BV+5rkj627a@rd4u2q#IW)@SC8R*eZSiBp^U*p -u~?pY8&HZl_Fnw%+`yl#Mg7X?J1pLi1MBH-Asf(d&#z0`Jr>;bmLMgl9uvvJH?Yyxz4G{2+p1T))dfb -H=fpSR9cB01>7Y$A@4OY|<vi8{M1~qZz1V3vB9<S<Ro<bG9w`4p%TefzgzPL`flYSb2cf=8czKIQjxy -0OOzzrK^c=(C=wpQ5OK@l{ZP!GfRnLyKt1x2}E5<>EK)Uu$aa;K$svpqoxb!0O&@b17a&~Tc+v}#}tq -@w>wCEh`!0=ftfTF|M3TGJ91@7@`t-xXrk~QHFQo?;M4qe5+02^k&t@V*ic@btL&W&8&fuu>GoL<emv -7Of;%BFSj_dTh|_JfJZY?i{Y3f+DYc&IE6)4@S9zQVQ|1bgwmEdBzA#!n<Se?G1x;BHiV<rut-ONp3j -vrMK-#pB(!1vh5XuWEp$NuE`(y)8o5@J%T2Ud`3q|k_=czq@J?@@TyI{RGJJ$%_*Z+WfNGehN{-ZxQc -s5cNK6I{Rfu|EohGQ`FiUVKu*shQpUL>Z?;u)nfEg%mUW+oHR*!|aSz<!=TQ8SX~DCIF3u#-B$GnFEr -rn3_D0o+f=Q0i@~DM(moo9_~+6tLSdO{C`aklvnPvdyt5mZl~Hb?OZ9yrug(ImXy~Q^M-Htlr!8>ayy -;_QM|UR^F52F%40xw{`2ZJf_*Yntts&@Rg>REXpC(N_o|P^++`eyXwF8!&XsO_DetH>*>mW?7>|1T)7 -V(iLQRE2G7GFW47rwak|EMA?2+~iu@L~0y$LZSDUDsezmC>Fp}B_7^^Y2Eq5#+EDW&(wx<B)q%PzNp^ -i{69o*ux%ja}9=AwjJWhWZryP!DLY2pI#!Na>Y+W}5Gy4&k=N#`wiBxn|}DKEG@fpLVFM|=9HogY#R9 -0SGB$6gv#Z}WXiz7m+-g3HA5t!yE43{Bs}Ca?g4*|B}(MFVf5KXrIA**KH$_j$SpE2^NprW}fnL)*H> -(B3t3BfoHUdZV}+<UoVYh&D<zh#|Zt#|@yA{tkyPz=!}|4H*aHjJ=y+p2?e8CBt?jcK^u9keYQzFbn2 -uoY%=;ddzr*>GuNj_SDxz-e<SAYYk<%bDq}omy*`p^qkbfP^(Ph34GBy1VCGI$9=hAAq;kN#HUN0P_- -ai>bb=C`@#qjL-4jOQ#$=OBo7hwnY3BY1=ySO1X%7f+V_246rijEbM8j3_vZ6A?2}JEq&A(KETXK9DE -hq(RBO`sBTr3qN1o2NyjJY^ymAQS=z`m5?~lsx1NGV0FTY+AtHvl<gEt4Lh(F}JeZx!@T8dOC#p|PkM -}JC4ZFEUOrk6?6vyePXs-x*`0x1Vzqm+Gte_<Q;rBx$FIo@yTt`+N09<#5EqnLw3ZmYOD&WGK_5<8I{ -K`|0E*N$RT;h3s<aH>4yw&ApU>e!3$%!Fytz!T;KHcQYB0HSdd2A@GG`cX$&A<EDNj@YLw_HoyJ8Y!3 -yd;Q_sJKTBgXg+poAnYnO|7=d!^hk~3-%4!iG<^)gMI1c1n(^WbEEVWN%Q>4N;R&9_C%I`#_IqAqJF? -e`z)6GHdo}CBps{RS1#Q}<i-m($M$pIV{vc=2K^{tIvPi?8Q6IdiN)U<e<4&FGP8V(3uyG~w1WuQMip -K;a#)<`hGU`0&MEEeBmvP>YqK)Q{DNPfoWK2Tg>0FPXQ@wsYf7a-o?Y_Cb3z<Ix^c`1UHg`HO-mnj-3 -;b||c(Q3TMsH3>Oswr`MghA!>?V+%tU4<Pk8&Ur>jL~n^*%jvi_H#&sUAn@&+CF)vi9}#;BvxZ3i<dJ -MlTnAKsS{s=nTP=AOcTz28Q(YCG{0p|6Fy)Txg05ObZs6!r>hlgPQs}jyL&2H}h+OVZp|Ga2(2|ht9P -0*&bVg@>9#sgkVVA&~b-#a1-Ce9|XF9$E!HeX}Vpbe^SDPkGL5{ZfMnar|1sSkXDc^jrtVm2`hciN~5 -(-j1CR(aKlDQYJ3pjD+4m@$atdP1`mWirryYEWuDAwtaJW4HnA%_F*6qle>Arfnb_@^JwS|!@=^;Jb% -Of-;QOJ{7+|6VY9p`&#jI-HmPk)FpX{tn?PGj;X|&6~EYjV=n{EM(Jl)K(M|d@PImdM=1ddSv6LRC`! -v^3cP63SE?P-t=3R8(1Vi*QNkQ}~#WFeJZ4-SsUDCj9k`hcXV484s`_6yIq^nek=dkP-PU);zWS5rQT -9x#4*mL=wt;dSFjcft~!obhaR;+STNe61sR{Iv>3RCUP|)Uo4RAacA7I<3?1yW4Qyyop0AXQQj(?E;G -=W-s9h&l2!h7X93xgTWStraM6GgX@>B0-tE8K6u-Mq&pa$d74GWs~cHtgPZaT>f1dS(7~0DQw0D(p1b -FA#a?1Tj~Az{_3|y=hVHN7E+N|o3;%TWQT*YxhFJ##B-9fzy@2A#?qv;%wmCAMrcl+EnDwR{4^sRH8t -Ei(=;W~BVTj3f^@m5BrUl|CRkN4o61L)ZP&?=40MRf>^s6DMcWLymzj!<r0uCYNAa3{@;$t)d0x4QJ= -Ztkdb;N1~i*o(k<+=$cZ2n+TJ<cbL^kRV<7uem80~&o(n@mE^o<=<3CNDWNxZrfaB$ze}i%zxrscPu* -&&%5TR9=kR!2j><{nG`NhvdmqfM310kDXfc^9(-Kuh;EUZfY;xmelPPJomLlM}KtF_0DWnj*8#6HWp5 -y3oe0fbr2GLJ;3MNUrKWu7E*9yLYYu$op0za8MS)QOX<rdiutDmbPYw{31?MXR}wD~+1m_qOBZ|5i2X -*_iL;KbVD@U|fAe9-1;-7>RLz(*+`caQUpj7h;^^e$X~f8IrjCG4Ix)wWb|tfube?f&6JG3Mw{)RrJL -?b5+Od}spH7Fpxbbuz{EH8>`!(oDTj%@ofZe$SVjun-MBYR8V1E#TAN>6fm5wk|)_DI>&*-IXe<gGpY -HcHK=rSR;r8<7-I!`Cp6R%_MQpChqT#BZUl*df$ORJvS5%~NkkY$=<qL$@~z*u#x^8Vrqb)YjrH_9Lz -0Zpgh)L@%IJt+t;TM6D+oJQ+`(d537clKUZzfwoR@G>hodCc@Eu`iTlkoz_I(kF@GrW{Opcr<tw!oX8 -^>(ybOcAtaWua`PdOjpjj%rn0239tCC`x1S@%`-9^M9ll;_?Kn>8E2u{^eZP1`PSJgwu$Wd`Op<Tacj -hW9AuNB(wF_p0iV){3q)_YWW$h$a2%1IP_v74$yxQXC}~V&D#<^Sp#N7n`UH;#sm9cgRXQpR5dNqy4E -%|~f?cmCE5q^p5fri$ru&@^pG+^+xtvIxCXl#?$7q@uz4*i9xy65(QaUNA3+}xB^|ciLx)t!r67n{Iu -$q7-{utU)>2^tt>;=ooWlsE{_N*JaEPSkTV+E7<jPg@D-`yi32>Uch)u)qmnsF{iCxG*bx^}EjWa|WV -QOZt`m*wq-BPRsztB~EuICB0IP)h>@6aWAK2ml*O_Ev7YiIQ9t007WM0012T003}la4%nJZggdGZeeU -Ma%FKZa%FK}W@&6?E^v9>JZpE`#+BdsE9OwyW3Zth+v&E)OqD&3Bd6N+L$%bjU0H=8awsB(02BjA=5h -Sr_dezc3}rdn?T1Aik(l>=&V9^qI-O45$ba-jE3akMDX}g}DVn@hMRhfqLhYouZtAuZWqoypW%{*lI& -3BFyE5NeTc$Rp{9s=Cwk(Uwlsm24`q~a5bc>(zvX_eMx@`lKnVMuG;5qx-$x-&~k4Mk`>-g1=b1HgTZ -TZWyye#v}Qu5mm#j@jXKgvqBc~`gmdfdUAZT6y2y4mZdE9xpQ`R%N4u*qz~YiWum&58=TLW^`+7G_z? ->s3u1Rji@>u#{YD+8<Y{!*yceQQN|zgpd2@fcg_e2-U@gyslTWRH>4AyWC`ISvMAWr&M-|MX{ch>~8D -!J#<wHW;eY~isqC{?&{QcMQMR(^FqmNUAGwk)Ado%sY5EOWxevKnD<?stt1pim&l!fP3%-xvdiEd0Nn -tFfD_jt4=jjUd*W67Ms|G*P*q)9ull82!B_E3`n&Y;w|X!rs;hD<VByGIQoxwY_qe*Q7S}oSg#Yz;ur -9HzuNxrLWl<L0R@@fdM%3j>wjdkbawBeJtBADqTAXaVO-<8L{|Nt@1x{Rp5cZ;4$qyhK%lG*eAQxX-O -Cv6QPKA?6mH`W8nK%^ZQxc!7^>}D{F+q7oR(erXQb9Ar^XJ6Y=P>77sII+$me_<iu7!3+gwD^gcFt0O --{)E~vBxRk{^e2j<_J2pGDR%GR7pGid$Q@e<`?{<enBNNTTJKJ<ajoD_WI?^qgQ8<Udi8od8@vj?WMo -@Y6{}ECtf0UVcD{}DcZV1n8Z!q7Pzo|)onpJ-Oyr?zz@Fq`0{VrPfy<*KmGp2QTFK51140rkua3$CaU -}z$PL5-aYv#6$%qyDrjhM32L)8h4v?hgVpUufpahXeHc~vu9>6$BkBA3hYvn8zXPW|)WL=i^t)fOJuT -PKv3JA@sRo<?|N&@wm|BjE2j>KuV5|17}{3d-ghp`?%eDsYtS{0}P(#g@QpK$dty!^+>A7K68z5VL#N -BoW;e0TnI|GyvZKglk>p1u7vLwue7`Q+sFo3o=IvezeP$FE<VE=Z@HTT-TJI=6Z@Wi5AcfxJVU=oA=p -AWGYOSR+4lZJzC}uWGIwRUpctD=?fI)%iR-o)Hk_w6s@&f{~R)^?uw3R&iNWdAl9eAgy=RHLYCBc2}) -lWVXo_@MNs>sH|&y1-d5N)Mjh(Dti#tO5SE`35pXtUm(ltTGT_Axb-Rp>;o@8ipG=%ruoyar}kA@U*= -_|Uq=f?fMeub7gw1ASpg|hdi5kHE2+8%s8mqASU%$`&VD#LJ;Mb-+oVorDfXO^Qm#>CqMcwKG(Jd4X) -7d!t>FcgC0T~Tk!2tblVu6m6Qt2r-p<PV1W2aHfK`hw%h;g6N6B(Mw{ITK7YL85DO6_Iav?73x^z__w -o+xN)dzi?01UfmoGz^4agHVnD_gK>h-k0sO1d7v^)gd+-!7%s3pI7nbSCz{qt`_Mp)YTwYwTOt%!3k| -d2eAe2QjpAFJU9Y*M|n$;TQ%vG=_Nz8+lM8@!i{i*tn71pUSvBA=3=Vg~M0%0<8#Fn73DI&<?<XBHj} -}N9<knFiQZa%-1pGRjq-p>Je%+Uhj!i$Hr@h$QJmd51Hhw?Pau?$05)2Qbiht1L1_WjVxgaxNxiG|7n -XEwb>JYkz!R>55N_H%^r=Z>%Qy?uxrG=1S0_cNkZ`FKnNFn{_w(sN6GsDz?hm$kUz&}8*^%eFSWhC@G -SMYZi`llrwXQloj48E!dTzfZ9?02LGvLmoArZFg#2uss`HVmo%1O4_k!^PP9!xGd9bCirwLY**cP%}j -kPw&AzD>SsZ!?O1uQtf_OJxcNsfkji{2&Lb)yMVzo$he^|T1J6Q$uaj9_|>bqkyWEqAup1B?fqExrkx -;4zv_)NkZtSsbqg*baa>?Rx{ZJYgnW0m?TLEz`V;ZCF0Q=(yu2Y0So0_~=i0B?*H#qn5T&)FW*Zjk~! -&<V^cBb<5q!Hj}uIb3Hrzi6PkBgJ|YtMt22BV0M6QRZ1Es38c!KU~aH^XzUkFtV8~o8$uuIPdm`e*Mr -`?VA5B0H_+4gFl)M&Mu1z{v^8+1N&uwJSPLW^zV~GX;IsiZ5|>$axIX0ipKHJqf}{AoWfwLVjKhv4Y% -*XNo(qjG{em2cuOmhn@d4<{ss|Hg;2vTj&Ls^fslvrlk7S0fV%~O#k7k2$peI6*aXVKYX;)lT;5%htC -$O%&v$6cp05;(5CNmD)xQE7-E7o+;+~eWG<0SmH@a%;z){I2n9meGz@&vH_jpPUePz2V7Q3ninV9;RW -1Trw6rXN2E_(w3pm)SIh0j~4TvHx^`IYoxW7XA*8TMtyW)6j&mw#A^B4GC?QFkhjsfuTLD4tFfBH<S9 -tuN`zxJO@ba{u_97;&!<4f~&nBGdr#S1DsZipTT=F)I}V!<oRQ#p6a7!BZ7o_!|QrTuy_UYprr@o;Sl -PurK8{BfS$v4hE|6I+RX<lDYPQ?P*W59);HYboyeP}+>Sg$575k++#f$VYZs`5Zq`o!ikz}g?*ZXW7g -{;lKUuZ{Cnd{BU5$&+vByO?&R}8OL>slS-jjf3o#nrtvUqrm{0TMR$AIBKP5+-U2R>%6^UxSJ@Gy1ge -fL=`(2hKarx?fnOvDf!IY<Ae2B@{vY;$L>4HUB5w2foI;Tp$?96U&G^R@!RD&&CazbW2u;S>6a{eA2$ -F8dBF0-ry4lfEs=5~DP{rLEFwNQ$xMb*KyI;g(BS@gyHZl648&v6cP4ft9a(%Y~o}gHwwb&kWiaKPD_ -44XmS6xUnL4ui`@wTVa?`R;y$r{%cY|Yg8rC;c?zInP1!@I(jgw#@`-rNvGK`2r=M*%$%ObZvuzpaFf -06${Y$zkkf1C%4{<e@pO&+jEoJ4jxcNcfxU^&YKU2H)R89}EbRPZG_tKHE=6RT(H3`%6LuYsI*9zLdk -=1yAv(%z%yE_y;ecRa9RKy@5h$Hb+}1r<;vjle0XqV0g72klz-0oRV@zNj845?xb>0-#B+03CpV^|Um -wD;zG&eviF=2N@b4EPaG-yt-Pa|h;PCsCP59;z&f!<cFQk*k|H&h&ndCxBuep=sYHX97Ui^{qhtv1+S -3JQUk?r54PdX_n_DjWb&uiMHGg#xQQI^=A;of{CN?FZV>z@LKYg8ZNt;xmBJ^y9!yB{>e>H!D<!NX5J -dZ=W-Sl^8mA_~^2f`*=*3`26R^%)CVEp`Sxdc0h7COhH&s?D&W7>pUvphhfG9pIM-(1_}jM=D$ux@&m -5NVzgcwq{C!keM>1rXazKrxkA4#I*3b!>>Ms=mE41rsQfV*V)ehDA)!p$dBkRn8h*y+i<o;u`sb@v=1 --JRK1L6F$R7i<=%45)I-K3tJo*BA$F&&Rwl3cGM*<1d6-JWEm>b1b&$pb;T;>(jslG%iaR9J|4H)_!P -yhtOQK5T>5jPYu%AafXiXkvRTES@4&zW=Ph@d*z#X%IX9(D%Lp1nAZ2G4@<+?id1*w^|3_KGb?T;)5R -95C1&62xK50g3yJLj!SUANIyb1hc;USuQ)24MY+Lc2u~FP^soH4Da0*N^0*#5!v-L=xfuo><eP727HA -9S;%F?)OO%EZt@!pv<kUi!)n;^ZzUf?h&qI9>%w4LYDij#R52#jvAge&i`NvDG&9CW71#Ne2`&{G(`a -DB*le$9V>$}xswRu$SHR1THNkubyr~wbT`Na?;Oc3#2n2TZ$URExr6agz$u{NS+o(xicAL7t+6d4^0O -XPmy&xn64l{~2ROD*L6ag(x&9xvw5fhVP^yN_Nfl(Bv9mcKji3MOsA+#Xy>b5KGXL}J+!g>(S*yVSc# -|8t&Zc`+dWvhm6mD9RW2RbZNel7){5lAR|Hp>_fir+uuxHFAopwSU^%;=jVId>-zGoz>uM}`pBhoOJ( -ZDLo=;rVdM1K)p?3UZ4YW`Ss{9H)Qq@lrrnU@}%T$z0gY#oHNFYGT&-aQvMllcD0&8Aga(x$Jjl7aWX -{9{&P>*IJ3Oo$3~jbA2u!f=|I7aYSrM5sbZT7f=f}dA$s-@y_Ff{`A=X+GCOcy>t{io?aL%IlhST==h -*>g6>BU4D`DVeJ1npg0djfJx)X8GfvIkIk|_PFPWQs^#}s%wzvW-x#Zj(X!H68BoWWY#ZYI@)oIJ$Ie -u{n_Hbj&DeXy#Bvm^{6(LgsPi}q=c>hc;p1dTt(Xpp#Ir}Vl6c}Jm;rCWABSI9-+arkWY<EKZzkoJyj --!q78G7WF5c8c~%pCC+voUwvL#^2{$4nQJBhKYK108J`szTC1{{kJD&25g7Q_na_ri(l-3%0Xam;tb9 -!EwgbYiYD?25m1fziL#km-Y-W)D1mceDIh`M&Rq?HKTo$jGzJb>5#X!Ax}7UPsg`Ku0(_`djecj@M71 -pqMdJa_ynJ8bw#f4adnfIMWB2a><WK+TYZ!%w2Sz_bU^!#gXIZy8}Oum0^`NVJ|h%I?Jz?ogZSMz9o3 -BOJ$!a0L5!~+Kf!Q^mrYFTY$|85u`F2A*5&WV$DaN0{P%rPqN=+!2PTmBWWL-m&jI<Dn7kMHa@m974- -TXf9Q+DS(d~skEk4#%yTmCBfR5W>(K&b$$e8+c1tLS2W_;)}(%cITa~Q#o*bKwuK}SwQlfbrg1jxkAg -L216f&3tB_=51XGJl^@t*+2=WP6Up(d9Ae3JIS`NW5VkoLT^hRJ#O^C1Nb2$$I*X!pgWG(Ht)J@X?#? -({#ql+S}-fe?{h~p;b75X%;%Sxb$E($2<aMGnsf*jx#mW??7ObW${3$4Fi3T9Yx=G(T577*gQRL+6L2 -nb~hCmcqJF~HV3^8jrk4_4w&emKxK~@&-@(qoUlkyS{OWKexT5jb%gWwy=>VexZM;WGiW9(>$dG19cW ->4TlbZiqkb=m706O!PMC`6Y+`uMWkej?aHsPHm(z(1EWtg2s}{Z(P*F+;T@+p*NT&NhanmWRfSQoGh& -qlPN4qg$L&v{qyjhIZ)242chr#I<0Fq4=9AP$h@74)7-f4uhkIdzxS;R@@Js-9K$3hVglXoHbYuGT*O -W0{})ZACGhI((zsU}ZdniFoLh+5Fo>ci+P2}XD~vTU?S9Fhy5<xEE!*7*_)m4XtV<A~JP@mP;#m|&2t -OHR6B7n6{P_N24v<f&t=ByiQ-MpMz|GQZy%ZQ<_4sV!#D=t4?mu_lqeAYUM;Mn-SjywSr@01VgK0|d8 -~u$R!%aOZ0?9GEy^LAU5ac9@zQOH&8rPA%%}i9PY^_1V!vTyGlyr%*XxlK~zrt}1=kDi_zX+te%Ffgi -dyv^Y4p0wL=!@qGC~L$|69aHxYqDcIc(9{=|7?>*ii+*k!n01*nd4d_M=%Z(LltGPLPcr82}xBEEXe? -n(vj_PSk4(}tqbr+D(V!bKqULP+=^geZq`jf8@;blr3&zy^!r5u6AmDw<P{$3LGaYW7z+k|GTbbuffo -3;QwyUjea%-{I&`U!6ybah1EA2@e<^4@l|AEE#hX#M#1Eo)A9<tx3$D_y+hkAfWcX=WI^z*}JoPX$<% -(FT&2xA_)Bu6T0{@CG(l8?{pLupRvO_1Ne}SPWuDT}_Qq;$tTOAAOWAhJNpK=?*_F(hKyxR`+K9@tme -6JQIM==bXZT!gp+5n#jA66K6N?E$9(LWs0Up!<=K)2yAQ2TE=)#;_YN7rM?jNUxahLptILMyk6)?Hkg -VzSo!%H7!74U)hcE8IoJE@75Y3yeE2+Gt@OcRA+MWm>u0e{pD&VJ%`%?sss1vVPPx}?*v=zTaCBqL5W -Dz`(es&;z4yh@8`+eE{<4hT5;X}jFg!0QlLlM$4d{iNA{Xy!g<cbMd#AHaXC{M0TNQ?{$h%>;E;_n*! -84K$v(dhH!@H^PaPwmYCc0b9rQt2Q1ux@KN@RzEFuey${^}iSIXp@WK4r0jIbf+<k-%=&75H_gF>A7@ -k5h5P)95>|vRVRs%eDqn5pdTbh>9Q_E?haRz*gVXh0(Em!kjY1u>a(^w=a9nKj_Wr9dF&D>C4h01&@& -Kee>^+ek=YE-Qk=3pedRI>~nz4zI&JH75qejkL4zB!IT200nr^?=rxycdGhcQE{#Al!h}tKsnQzM%~f -0XO<K2C2S9KjAyynb`Q4KzPaZw_{gWpLFga)0T6C7Ki%uUqqa!HcO<{XcSi3~xUG^@#C;aQBQ*$252% -g+&>3SnJcDIG;WD$@)wp-d0NQToBGsfru5GqD$K340<e?>J6Z2JnKWid>=rG{sF?p6k)cwpa_I`|mLm -EGy({wO;&yb+NTJAaFj7@c{}T?mW5EySPSyugDDGz{?ymZUDBpWu<Oj_$mekR#MS)02RR_f>(1`%~@c -s75YfC3|B3H~WHr`CtLs0$j8<XTMa7iqlEH%;^IOga`9H=O5#+SDb#uZ6?Em{2K~766=0c0r74(IT(Z -v!6GD}TI@kNI>3oIJ2*fb0cu|0X}Ra8Pggm3?yY8bJOaeC0Jok`5vQ=H(5J#LIK<S8rh!6fT>28(l~- -fy2fs9tV24qj77H<VG3Rfc{LmSAo`TzOE!lLWa~GE;FTo2A;!gY%51=O!8f@BLf+Y*cSclT#LfYQXSt -NL0FkdD5l%5F+pSpn5hvm?b8vPhZ5RJlxjFWB)@exM)G!5bev|PQc$^QUQO9KQH0000802@m7Rx!*+x -`!eF06c*J03ZMW0B~t=FJEbHbY*gGVQepQWpOWZWpQ6=ZgX^DY-}!YdDT5>liS9X-{)5#P`N~|NyKtu -$2&2cwRLP%rPx}@O14&|f-pdng9ro|0Gts$HUE9z(RVjEBiE*OmsQe`=<e6o>vzA#gXHH+k!<?5?XR0 -|n^gU7C%P#aFZ)AVCl?|a#IC;*byC8^ekYQB-#~fOB@;G0Oou^aXAhFyaeq8d#%XA(Y2ELqrtiu&e^$ -1mI6G^0`+k_9c2`Y(-;U}*+i$nftNPjNg7NY&HLd=2)CGq_Q>*X4H2Y1{inGno?-J;8Uk;;4WZ_@S_8 ->+sn~r;&n=JXhJFb$)Fk?~SC|Ai781gE4K8c~cXvHdd(Two>Cpm{z@>=}kAi4@l-gNNjjDhZ(eO6qFu -I`6yUsfMVoJqDThYw;HRbPLhpQjoO0K9=UhDFz{UYTd7nvQ!>HJirj?zMXITAXZ&i>n(|W!HC2RkqD9 -qUg$<IMwnBdV@94tIR(?p#^VJIr5j{Y8Jq8KlFcxEh;Yi{(~Ou4~M3$e*oZ6>(5Z|xP*Ni>@5N86a(y -Ac7at3(Oo%hpLSQx(091DtK`T2r@j9)21<Oa1fhc-$MbHSpz9JJJ{^XBh&5~bs&ray#Z-*drEu0*SKo -=LtjnoXwHIdze10fL@ub0nb#WkkrKbp~7Mt?WPB=w9B~u6p1cz-n!nauC>q{Y8uWWg0RM|yoPS-OycW -^2vvHKgsiMH!&(T*99qc{w$YWswqyctflYMbtZs{aDM$Ex;wIIy(5yw$<_ZAFJQM4<{k2}&XAW<r7xf -Kvs(5^gKDWp#8nIT$LQkl>+gI<rw$j}2pIrbim<Q&uwbgf9JOpWGv%mFh=9yPm@leaI8d5X!nRM}O*f -K!11T2Vp(jm(yho7*JCDR~$OouLAl;J$MN%UCO8%6GhBwu?O6wDXGTlk*MdJU6$je(1-lb^lQHMt{E$ -LCm#3Rrr81`t>fg4Pi;AVpt%>~Bb?fiA6`J+!yZpN|Aqs-Z_6W9<R_O+E%5m9FX*F$H7pMR2S>;y(cR -_IYC^7tJeC_c0w1R#iuT-SJY2wTRbteOG8{TU=Hj}6en;TO_+tm<<u*zR84QpYnwkRgGyHy{=-Mj5Vk -j*>G+ljSy@5DRhqAR80S*Rc1ej98Fid$2##N=~0AJ6}P-GE9k}KII17iAuo-GREo<*@dJ3Fh|5+*OXg -vHO#X&2HorN6Hbxkh6BC|gaJxX#lhh+4byh{BgdToAv2)j+o>u3*t+d4+|We%KMVGJ;(6hbe)>Hi%^E -lZ}|FOOnzC(Tb}Qq&7>~NXiamx_0bA<m;vqI>H$>707~vO&)ke0=B)W?e>|T2;-gDBn7NmGZh6RHGW3 -XZdUpiv_98j)mv*(-kCZee~OVX)2d2h*IVFJt0WDVG<|2aSA^?4xd1^EwuvNAQ;v+qf{eW79n|`<@2p -Bvh_mXk92eF+fC#e}`>!7T!K#cshgF-g$33j)M)oh}>$dGL%C=xBdUS?6PPh*5Lhwj~A}vt1<&`sS!^ -Ra6pkfr$1p6ItZ*77FDhdmV0HLP2nG*4UPK*prz@Xw{=`8I~jEDWcZRQsZ7|;$-PO~fGG-IsxGFg8|B -R$uR;e?8T4h3uul_fpUnvpOc<oyMdtZZR?xx&g0b|c4uj)KPqkD=83@GGgMqDtzATS>F$TqCzzA-)Ds -Jzj98TR#Aza~LYYBzB}@jv{NDXyH*&6D)zFA{-I`Z7f(M?23AYYk268ZHPJp3JCfI$c_Aj*vOc4LeyB -Z8bpZ*hqTCowD0$amJ8eg*0@C%M;eZ`EiVTF%7hp)*ux12>x>Kg>nG?F*-<$(Ew}flsO5_cg$|qqoQA -_5M3m?>lQq+691--;UmyvE$5&0MXJ44nb61(Wai-WhaPlM|HX72gaZ$mbu!Y9BKhAS#h0n4EP_OYDMF -s)A_Q>z2%d7*wf?pQuL3uIKZvu$WNWfSwZDi_)1{fmHEf(HKYnhWbuU_zaU8CkV^j9F1)M_j7q$AtG9 -~L|d(^iQ9!2xP9IM_m{jZ0lx$7W1$VA+{Be|@%*;o)hOe>0GL+%<WSynOmH`Ra>rXt-AQPA!6&lUA~j -V3zK_${O_DU6h=6$(kgnPaR=wL{`9&mkCSM8o}700jpM(phzbDhL3D}w1A?*F>%9j#n9z;@NV-Qs(t| -BW8Zf*@%Y|?3Z0{Xb$!`Xmlj;yJlL!nE7$#XhtfJNCuumQea(G)=*~q_@swzHf*sqd^xQ}~Qp!=ZiXO -ot;O}ynnhi*|2Gi6aVMJN-vr88M3xPmRc)XMCp&URy5<E4KyWs4ji3`@JZ?6FF;0tKlqc<Z3zCcOLVV -Y9Ijm-s>5bUMwj`sKfq01KNVSQYae2;s=vbXShrTs4SA-pH;pe@I}(!b(_A=ZULX7}`;*?mZ!9)jWmW -M1^e2mvj$LW%H1lN+OJEa?9wkqP?B+w%`u`PPCv#%82p!p<(1_Q<ux&LtBr3{{CZy)^Q<yJBj{Z}y%e ->Lr(bTk|Qj%{g$gSpnYgK^?sF&p2Te0iTD!2^cpZAr%)#3ln^!QGgaid5EOqfEvr1l_<?knt*{4Ai5f -@y6h5#p%ysXk_0CR_DQ%ZggZBX8q`-Y2-S&{-Rw0KsD+g<8m2bt^t*rx(iz$G=Q37Dd5o;bYdG>S&!2 -|_;J^lzt?^LdLTnDLvp{Z#%Em#JQLLF!1ni!qP@70`-390h|Ipfd0Epr}L6lG4zH`CY`TziNegX*RHv -zc0^~klW6R?D8Ke_MP?MXbdD7A|To-oU@TpdAxHzUE7Yv-u4fNSC-Jg*v*4X{XzD5N2^h;H2jNA^HT; -_-{;0B3t(LwrBj9k65ptQ06nzu))F0#_C^k!>?H6^X7EUDaS+NpS#@C8Bs}@8~!%W#{*qhiFoNglg)m -TS42q&jU+0;b3U$UO4jGGZ-ofK#%^gii*hBLM<&7E7P5}f*Md;fffyDiYmb01PT1S@qi_Jw2UB|rSXz -DumZt^U|z84%K}v)x#`9OX(1)|%pwuU0~MOx@QF5?E=IxX3eH5CG9-n9I!!w+y*<#zRXyDqj_S~J5D_ -LosY((f2U!+uMsgGiPee4<Oxg0JmT!0cL)agSJFqMb5KdT<>I0pK@(QLKs*85hV(JTOaBg&Z=o4s(H( -7}nYJadd$sPb@^=8^=;p?bqBPnEan^8p#p0SC4&lq?Zk)5dVu-4!blt0;xh!}ag9ne1DP#|}+=*7t1c -R)F=%C@QTe?W3tL!@XHIFt>DEM>_L%;FFP3~0r&0}O;gEOw$q6JwIn`ru(=XH9CMAJI*z|7!Zhy(<nX -!TU3SevnG^11j8(;6F+Fs~XbcY}#^bd2}aKyV0YI%LWoWPCX<{(yql+N&X0A8k-8^As>?+4%;UAN){k -TBX&>PiQ64DEwE`}H&r~qvM>UM7R3S^kwFK38bM8ox}j8wa^Ey8RO!+wwI$?;lAL^=Cn>94H@9iVipU -~nM_(8r8I?lQ3(2}OeXvY<C$LlUEkH=W4b{i*(qLt5X;B$QT$|WjZSBjPZ-yUTD|b8*i+OnNUWBvrpr -+sM1mMZhnw;LHO^QmvjjDYc&fl^w`!lx8eqPlT;?6Q0Rn$~1DX0hH9&>aIhF<fGkb)L6K;5}1*{i|~> -BdyOU7EES#B><CWVBBioWc2HCL5&R-rP#%<s43iHcsX@zZq`7(+4F~#fpNQBSn!ZhsjEx&gIIrbm`Vh -Gdu=d)Z*f>of%@9rr&p<vaBbT1209pmo}!YB)Q1G#flygB=Y4bzYKoLiS-$Q=j*B*M(#_O<Ist)5EWj -S>XuMNouFMiy}6}z(aVC>S5_Zy@#{O*Z}BT)vV=?>S=7X=KbBZ~aC1Zb-QLbEKi1FZ_Q2gJ1eB+%B+d -TbH{F7MTgG`gN8$pg9FPct43pU(%>slG^30*oZwnpFpZ`tSU-Z7>ILv-JCn`$gmB#Mky<8nf<x(gv8) -g*b!lTe3Nm)A_3NleGmN+rw+tOlXEJdIkAE!$oM8C_v`CJcNvf|P5Q7im4^FdwEnFbP3kJm<L;;KQ?* -c%b5bQScm`Wk@?n0&Fwcjle4i-4G<k5N!03;srmdrBHq3m`>$HF=jryOhfe(w&9nIxcv43;q)!!0I4) -z0%Q%KrXb%RBS*10*zu+3Q&lQI=0H}pdDNlP(zJdy5St;W|W%79Bu#+GPW5{#zLc}>VX8f(z38S<jWp -cV3}78{KOau9qJQfe8nAH%b|kyjIMKR#MVuaXweoc1H3Xr6rYg^uiWi1)(+j?YiZ}q^GDg2I6MaPN2l -;RSq4MT>|q#MYog&K12tRWElMkZqUq|(B+rvaB-?kOv@e<ocij{(Wt<Dy5|W!VC%Tx!pIgI}NEt1p>5 -o=TSpW)cj<Cc86>R9JdGmB4faIKo2gytJsPL+zaTIm{ZKt5p2-GLaiIos#nsi&^Swx#U&4JaCBg1j!7 -H<&5*V2_^Om$45vy!6R2IwXvGd6@w4SsQxQt#<GkK)!d1p7mqAv~evB}YPP-ppA5ZLzSeW%oZ4xQrjV -{<>Rl`@T+Oln`=B=Lk!<)(HWP8)GD^sky?PTdySvSW6HXB=<)J&w&N1(}eui>>RqX>Yk5H^xViLz{xB -E%b_K9ad#56r{OS8GDt=kM?bD3Ee*#&#TKU|Kx>di$!E)w16s%ce*tH9N4XwrI*>5>HO3v99hI|YH;q -|cYjS^<(O4a}9@lF?zcCTJ3sIw=MFuVh*1Z+sD%RD2Ebj~n&~Umyo)I4bM+YEl>or+f+Fd_R$zI^-iK -|h6j?|C(_lOQCaZFeVI)<CNP-xRInQwO5plO-0EHkIVk9tXZKX0<Znr6z9UHujNd@jo`zx+L+9@H_y1 -V(-Hn$QrX$4{9Gx<kDMU0(D+sbRsd%b`vPlgoD7k7(GlAYGToG5P5giG6yHwlpK4gjb?7>q7ftZP+;~ -{JQ|BG!yK($RI<qcmOlYvn*T6zMMnt?;CqK7%bUvLHU(22JC^f?V$G2z{wVJGI?lL2Muk1be&1w9Gqd -<Zehn+Z_EQ)HZYz#Hw<PLpu^%%5Iot&cM)puAQ>ERl5R6=C9+XW(wMc-wMmIsC2!v?vvQACa8nd0E_^ -;07D!vU)0*yGngDFnGtzN@q;yS%TU<94v1#Ofm;JR4UI9jwlJZO7Q)iEVl|nIZQ2HlZ8vbvY7Si>1Y4 -Uk2yeTv)unk{&=9G!Xixf;Oza0gdm4^xA!Nnxw`Buo_&_diYAQ|aJP(mw!)Ri<)NAmSI%yS&h3oo_?< -~5>NnHciiUHMKle2~1x>>CccA2|T@x6^LVO2ByB(Gh0)jgC5?8)H%dHS$n|qeDO|UyKK+3az`tZhu@N -dpaNo5P`d85M`SLQ=`Z#o}cZNR+||tXzqsZhLRr|3vwr>H+%K;KZ+mTJb&?IC4HXl5oGKR)PXv8O!I^ -QXP>t8y0)}s%MclI1b}2vHe|rxw`C=a0}OgU;4sjegyD4^3)ar+JW#<*6rs#MYZC*OJSWFKb;E&hEXz -vub>zM*V9lh4#;ySw?Xq5vLnVc!%$^K|6sdEfcAH$J9d=N|v8sWGCvV<7f1<*ESfAH}w4fnjNAKJY=z -W8NfCMPT4Ptd0S{#&pL<u<6Bil9@f!m2t=uD#<+0Qp(GKk+CI_e*Fm&Z$>2^u(W)UVs(1{1_G{O|XRW -p*h(-lmR^^Z9@N<>`6yoYoViH;^JHauLxs!)j1WqA-hs`0}S@ak=F{r(bN3qIPRK<0d&$#?5i4{z60Y -h&u<9XKcz$AFFUk<9PjSOf9PDQfTM{Gb7-+-GQNg6-Ko?2T+ZQOnSOtr5AH)&Fwvsp!bTY3gczOm@!c -?Wl)E5UFi&lgy^;FYgZ8iO1^9m$r&1t5{|+(#;0E+>LSr!Gn8&?p%L+cq8zqTe!;ai41$9gTw|Hi?&j -$ZE=TUKlxqrQ@VV*UEj~%LTp21x!7P)iMU}`3535#KYKjqvT;>4642EAg@et$!l<7l=P&$XpF>qUq%w -jvya+6vWVWD<KH(=MbGchterf7%*%D8qAuZn}x61&QNs>1*SSBP>F2^Y?A-=;D_F@3jOsbod(4EB3;E -9JRam{5vRb#jZCSkd3sG+gvbrTIMIb#H?w8l)Nfk8mW@cdKaCejk56H~p~oJLicx`j#*b8edoRU9oFM -Wg9A7E4_<~I+Q|E<{3)w&(NWsGi{XFo{V))Kfajs6foh)nKbD71`h2CCrlKa=u()ecnI78S;C4r!$Xv -+)V#CgMZd*RTv!jXk5LF}V;LePA(s_AB>4C6AQH=$mQ5h?iEAoP_d{PFDhu_wz6`jb)%^?<@Mq1(<Om -1OZ~j1RxA|wN?UY-xaAc|H-cbzKeeA63oh_Dk9R&xRg;o@CQZyTx$R<rn=mueBw^8DLoZ3BWFmtK1a- -*EsL*i4))vV&LHf>W)#!5i4if>$BNu^s+GTT?)d(oajydr45L%$yyAXs)V#jnsbEmIE%SyGZN#sS7te -nHIPd|$H$-jVTz69;f~2>O|%ss)+rriRl{LSILwa>!iFcREsu;4WV62Z7mXC1@)?KlFzkjwKT3>+G6m -=a8^mL<{I51vA^@ZaS(SuWdRGBUl3sh1P`Po@Wve7fZsypnvSUkmO>F4`L`Akbi=-^pN$a&nEpF#*48 -K&qJ2V0L4UNmmnNhB|1XUB#D*N6VO0_{($N!i7~jZK)>+T1cZ9y&S)sFSzJE}5S=Y<yGUe*{kcyl$-V -X}Y<fBa=iY$T=K)K)R(!Np|Huwa+zXb_qyk8jthlngSq7RkD$fk+jw5kuq1>j<Zg>#@#_=!H%&;`-S) -}s&IL5<Zsi;fbR`gX~181DyF$RvcVxRxaaHKX(lnGA(hV_lgGIAnmhtuddP8Gci((Pcu_0xBpq@64}x -w!<IP|}X<%7}Y5w=1(5Yo|ki9DOoEi#4#-Y!1qJxG*<WD0u~$w#7K-o%EQYSL~0T!8m3F3<k7Gf9zE{ -6lyEDMmJc?A}$KPuR60~es0ZHNvcu@Q_Ci$camYAo>R5i{&Ob<9sJ5!LCe``LD}5A+)Ew)S(B5aiQE` -*$Mh`mG;#;U3Elez=D?8&&<)Y$Ttr=y1Cc8y8wQjJ&`wt5GE*sRCg=>rBGP_=eadKO4NL~eAf#9TG#i -I0!Wp)Oa&XZv+*F6Q999k;vf_Mo*D6j|XZmSNr}9wh=x+^&FObrK_XrOLCT|^CsN=8%QM_hjX<S71kc -2d!Jh~wvwJ}p!`7!ny<7A0LH>}`8pW@)B2~bzrLFNNz{dD?(xtdEw;_}%50&(Bvo0M+`(FQa!<2Kt46 -Du5*kk5gy<{5Bg-bCEU=LNzPv%E$$EW`h6i4_>gN7mwbNiB_Fz7i#6!Hm2XAMF;_wP?CL{qlF&?;<l= -p4$5$Z;0pbYBgaSM@myE87mdwwqli4|5izn5yS{|;xN|&4I}v1tr}*8aIztN^{P5?ZBXs5`(wh>5>f8 -wDZf)!ElKPltxInI2qH#V{^Il{b2GtMcFlC;<vBrXDFRW(ns!=bc2g!dmdu0LOsc-5Nx%K-(Kk+*4d! -czp&>&-0G1wHl6%d=aG8v*!yXa**I$330pp<|ubjF;03Rfpea=}2B1A2SgT{{?8=w+1{BkWsp9)T0Mw -=<2040AJ!Rk`XPi>}z8H>JpV*Pz}*G>A;A$W3o9=iMUkjB)gc+?2#+NA3600!(DW~E549=frl4->q6E -=yiFsK_=LWFuJCj=?0h3!_on{t#*o<^e3j!&S5)=f)sd=gObPLPiYv%A$=Q%h)NI8C80*xoi&eFg5c- -bB&nB`Iq|2u@k59spTg2a{);UQu$}rk$Zy%4=p0#HpvmKNH(%_0BPwdUyz67<oRVDL@8+)!AQc>Cs1s -+Ys}J*%N=o%Qy0t3L1p?P`z!41Cgr>et<BiJMkNc(MR(5!az}kE668$0WRy%$FN##m+yygR|Ndkn60h -P|`3)l>8|K^{dU3f#N3iE^Kzm$rkPDbc7B${LZfq|9-X&|Cu#}vh?f;ia&Rm{wzsbqF0>e4pe|`>|$s -@9Q*g~Jy{8OYD{3tObm!Wt3E39{N{hSQy?<<TTB|_DS>-HG&VWJF)dX=h%qy!J04wKiTvkYOOn~S4bd -=K%R8#(LHTYADVQzx~EGSgc7SZ56~A=mi6I|jx*VA`l`O21F45hz{8CaGD9q`u18u~=%nj94S=mWI3O -wt9U2MHykHQ6xV+W|N%1b9FHTCYm4WUA&^{v9ejt_8s2m8XiRN*49O=%jN2R0XmHQdLSgheNR{u7vDC -KoBM1juIr8PV8{#$muwY1_r#w~3IlyOk+FyJV9eCBz<7wee;TQ01f4rX19iJ`?t9*^l;=G_D93YVAAa -eJiPVZl4Mm;J_(@;s6phbNi9JlVr$Kdwp+!+%7Cw!7?oJUKC$1?R-)lDFH8=>`d^08;g03C7wssdCb0 -pDN?^DFY5S>hX?mEj6Q<g4z%ve+AM}uo4yX=(zMq`@{c*XP)GoHDtF;T$nCKLH;(9es2ja-2ki-^7R? -n6(0FTI=g&~E4{%6z*7N5_>`WTOrp<SUFMPm}h{*gY@Jh^LlPH<F{%k4yxx7XvS!0PO|?P@BC~qC+gr -xZN-h4!S_c$~aWIg^9A%*Ouur_K+AT=S*GCXU~4jx$iDxXd?70NxE@IbaaR&A^I9j$<5cWnujjA_xr> -FF!y0win_t~!@jl!`#E}g+QD}R;dsniGIxb$&3<f{Patjhqy5Cbui(%Tw$0Ex+sQCP;qc={XV`opP`~ -bA8uo1v8Q%wwVNEGA;WP;Q=6hz4y3q}o59u0txd!#AAzoFZWh8`OBs(ed9H6|si+<q`#*PDh8nLpCCe -@pSTOi~%SFcorUq6h_Z702qu)_Gg=^@?&%7(O(W+$yBY`**J<JXw)v*L<q)UZN9<?>qdL+{X=PAB-P= -9X@bw`f?7qRXbPMMu}t=lY85xjQ$kjxxT8(dRR(1RCT9=nC1)1>)i{|H358_xp7#u0)HPf_r$>?P`8T -1Rmvr{0YO(Bki&ak1-g6Z(pD6+<)#S(O8xg9S3shvbdx=3`lrdoxT>o(oKVUIrO_d+TZx@7kY&VHh~S -^^>xGT=}s+}Is9)75%1sIGk*Ubk1rbME#R*NCpVC5ib8)iSP8Q~OlT5ACiMP2g`^B((|iPIYYk<(Jd9 -@9nN*;yxWN=f8IhA%VOHc7!=QZ)L3T;}Gtxk2y-B8MUqWtXEAP~WnQ(A0Mct^3=W!-s(~H|RR;vHuFt -IQ?%o9A**B_cay;%jsILug_l<CUcR+z4m8Ra3CS0y_@L){{M)*q}`D2MBub6`A<(9&G>ZVGljU?^W6- -2TrQPoxEM`xDJGe)-M9#z}qdg2c8604tmuSHB!U=f1L(s#U^Qcv7|#b9a;dH1xgx6}rg@Xw{0cD}HJA -3{t0AtP)1~nYI=hVUr9-Jxn8_e?;aWK*{IYz(0z;%O;WdlF&yNlKf`4B{MlPDuT-{7zyTv|Ke3B4iFh -JjDOx@dOlZMLbs2S^LKMqGwIn}SYuly>2K30s+ns)XkP5Yb3!2W4)DIXm%Tt`f4$j%EcYqE2V*S$9LE -Izn-P#c%Ge+gA$DiwNO!_SL;lMv$|WZVY$aEhD(fsK%j`Z%fALrn9kw!LkyE;?-DHu!N10pIegCUW=j -yJId5PF}&a#T3j*9P_wNDVn<lo$`Z*DW#5Pjo~iBz6d$(I4R7&2H1GIp<SY=D>OW5e^ETy)p+h@<x2< -Pi~c>7`ugN5_kms8W_Jnk9MuSIOdf+3ZEkmy|9pmh?sts8lX5@U0bkVH`c#8E8aHUZf4)a&e9SUEqIZ -x;!Nv(`CMDg0L@58XC%joee$p@>XCA&~*fm&xfAKWFgHJ=H?kdg6&fz-mZAZm@Xn?s>L{w6%FQPUdnO -;Y-A!qIeyX~<i+`iJ@Q#N>QO5QjbV1?_o%NY5UCuFoL|tE1xvRw3vt&fmXTFNVGZzoTC5+r=M1F^7k^ -Gu5hT$d2JR0i0>~G|W&hRe(FE$Qvom_91hL<Fpy51!Sv-0A?8Wy#KlO6F=tc$T=Ih_jMza$)G{Xzh8o -g`y@$Cu0HT-wPvbifySDZD2+?{5i`@~j6Uic2Ph9Wty%l5+}Oi{ET5Y2_k3PwB-9rNH|O(lV5OMD>vL -|e+%Ve*On(JVSwbDFIx`EnjLm*6KvYy808@HSXzgBQ>*?3sNYN*Qi@ym6e~AXLzGZh7*>$45_}B;S6U -Jo*}S!7utheD&2_dx;y__0ZrAcEf^U0vV3<iMyjVldkem8ynvrvh@G@4N}nmH+M+S*5lY3%T<Nh4RRK -Eq37f*jzxeRy#z(C`fgUE#k{y?uYb+H>_@$Ja^{6UxOVZIimjId^{5Y=uA>x%)3wNRI95ZmpR|3_x%S -6>Cz6-Q6|q_$F^#9OUesiOL?m8iB(vV27>Sk&@e;?8I|Fjdae;FD&wY$*o8y1(<NJ7wc{y|b6NJAJ6f -c*=jn|4h`exqC7amg=oANvFj<;e>)IIVMn{j+jcPye@f3x(bHUdB9ddfI~`Sj?3`?~n=AE7YIbU!KlA -QHkFyhk9GJLF3_w(_O3USfrwlh;B<`xTA%I#MxsUJW{*IsfqvmiR{j0wU27z`xwNM8`WwibCZ2n_D49 -lJeL?FP~q(kd(K~d5McYoaQDbIu$N4lrv!;Yp%k)%r#B3IkK~xe0F9f#&%=^FU)HLis`tgw~?Jk5{_K -!&Vz)5WGVdBGKixN$acs5&;tR%tAL~yFQsc`2Q-Aos`;kFqB?W}(3NBI8nJS;Uv<F1)oWfNnR6ESc_+ -jD;d?Kjv7kS;UJ)hZEGblzo5+|wjPvIvwuvnsrZ2<uV-6~-D;z%E@}kC%G4U9yKrhaQ{h*8bbQX9-nb -*-lrS_1Ul-uMd@}1DeCf9hGiMj&}x{Lth2tax7d)XyrRW&swTd{>2@0+8A=QBfL0|Yh#>(JGGMX$=h7 -d-sT@lGBD;{ulNQ0n>^sJ8F6b}aQocOTNM{3uob0GgzRlz*rwUhBPjq-~WpUU@p*1324w`wRJ^RsN!m -;WDGY5PXA}G_5-@RK`L`C7N+Oi2R!`AAJ#s0@6q*kxo(o3KwABywDOMzsj86Jvho2HH2i~-AdjCWK6y -$m9e4FCkncfP*rVyae<}t**9Y1?+w2SMZRunbR4+~CcP(d23`!Nlg4S2K9*_<&DGVFo7Bo*4+-kznw) -vEBrY#=ck^nT$eQz7uhiAT@~PCluzK*4o>M^F$`T5{gU1^TtaS+e-t;J4uL<0m8xrMMuNjzrHV6xhpD -@Je`smR&U;XQe!>03uIL~RVvXeYub9p?5C!V}D<2g_h@)NGtUBA8n!UjUtIc)HGQXi}YBYb~uMZP}o7 -7TASe(SG=9Zqk?r0#Z<x6I?k21DOwpy?4AFK8eQT^;@3P)h>@6aWAK2ml*O_EsmISv2_s003YT000~S -003}la4%nJZggdGZeeUMa%FKZa%FK}b7gccaCxm)OOM+&5Wf3Yu)0)2U7<~Y9^5)8(DYDrkp+^VmqkF -((%5EJCKZy}t!wzdXNIyQ>S24gSpmDS$(e6n-;76cS8C%}p*I_;HnX+SJC^C9fXqp)ER*&9t;xYa{#I -tLmT~(M<(q3dpR*fj-K@SYWts8^P`Nf~DYAP(=&3CslWPg4#l3-z$o3za^GnK=lSQkS38j_HL?QnJuE -Y*5X+EGq45n}MpZYNLS1Jcai6S-dh5qosI#Cpj;$QXG_wc2X26mv_l(P3T&7m}q2^ZLHjv$}SDBob%v -Ppcp0e9oiV(#PNJekdASs|=tfx!>p7BhxV4r|8IsC1mi7K-(pWn0MZxvfgF204G+0u*+^R$3Qm>7%J2 -VL!fM@3ev%gq|ph{xE=EF)=Wd;?=B`BO8>IMgW1S>UY+e`9x+up~ZkSanc8x_7!!eF9vQ@ic*yGzB@# -}yJ=7EKFxxxq06VF`F!BlE*&8xDq8PF++NcYqYPVXL$XY&ac0s7QB+{#gvm8i+L2(I=^a>3d`ad#xO> -<y3$a_}g5(xsYLmT`J}|TyMS*$}xa}&VSj3|Avz98xnBo(QlhD`D%_Pi;L2`aeQqCvg1*2_0VnjRPsE -{;-mMr@1;9G_Cj!dsU<M{fO9Wq@hcMRQ+ZL(koJg~<%(J*^G)U^KAkFqtg^zm};4>(VortJso?Jo;Za -WC(EA#!FJ&7W1dQBtUgBG36mXPl<PX_j%H^>LR>Oa_b$aBLBQ17%;E>+P6|vcx$Y2bu#{U)<4=ldV8$ -G%>=Pq!}~f+)y<+KlbiIFq$oaZWrKI*on|cWkIdwgP^&*c)E|ZUqjCJ`Pl=R8cjWEp>ki{D>35e!Vrz -XU$`mS;V;+KP{(Eb|AFI7y&C3X&|yARSHcWZE2IVXH|+m3Mw@sYz0-|J_9)$!xh?nr*@6ClXO7Xyzu! -@;L@w?-rq|49ZFUp(+|SiwSmLui#(rQ0g2d-%?^(A(Y3_8h={(0f+z#H?4pKVE5vKdVcp-3p0OZVRwt -}WrAWyqwf4qHri&{JV04OglYkWl=q}CR<q&DY;-`r5z>H?R#IkQq_P?rN9do^!`m{!I9luG+#_ktjY< -+$tF3A;Z$r^y}MwJaU-p%1nmP1~;b+I9`EEpC_=H|LzM_AOMf>^usic%3$WT7xY|Al|LwUCsMb_0onD -P^RB%&8ofhI}eS9oEVxkJNPhMX*~>9F+NGm`}=v)$FJjR_UL$YSJz2ct(Mc5KC%cmb{f$X7&bK#fGC8 -1lP|e2c^k;#^x?>&3wTI;S}KkyPCAdZu8=DyLN`#45?>{dW|x5EMrmA`@h6Q*th80%yUr(EA<IGvg`4 ->##9*=L@=+Ed^M$*Rl*odkm8&XqdKu_=XQ?~tL?H#W@5m;k^Pxltg&0nt7A2&98^f23%5CuqA=mO>f7 -4*8YPSOOtjMIb6)b;#_0un}rv*01Xe8<~di6Se9gSs@QO_c|PTN+<UWxB^9ItSr0hLJ_tz%vyorT)R0 -i~(Q=EHZ~daI)=GK8SrYw-jqJ=X|N&sEa<0LR4lv<+DPxRu$~i>QnBt>Ic~wz=7}HX3%oQ*4QAAQxJu ->8mI7PL1_V{X@?grqT1XKBDJ^d&xt-Xg^(v^lD$xbFH_$joDXFO9KQH0000802@m7Rv1kPWzrh}0A^q -S03rYY0B~t=FJEbHbY*gGVQepQWpOWZWpQ71ZfS0FbYX04E^v9RJZp2~Hj>}{E3lkOnVLv+vRjq9^VQ -sKE;G5Ex@?k~B$wOrxM)g*WX2T9B`IrkUjO&&2i^odPB!{rOC-=}H2RGOs(sh?qu3sr&Dgf}a8~hy)_ -faI?$=G*Y^&Ybwr}@>pVrknJB(GWeu_=8xs^FK$cOgOZzMM!PhHjQbfYhu(^7m@)OE40<x;$^HsezKm -uzHTjBURZZ%6n>ufC}Uc=cU3R&7(%OYwt*pFbYDTAnfBuIjS9YM=wW&*X=Vq_%?|>Zhh^h7pIt$8Y++ -?PDG5c2ju$c5=+uRg-tU+*Ti!=J#QcQ2={67G*IOy8nL`gM1Ch_tpA<fMb1-ZbP<d_gyjSem}qc_Vsr -^|1jTN?sj=yHFvs${+$DmTPD1o%sh~~-R+$9fXRIWPb84OYD(FR0Ae@adtVJ3-L)9*mZE9<eNk8cCkc -tA=w(yv<p5vyV=v`Aq*3m>ysUb|809a;2FCvpp1-bo30&C&t9U=>q1{*gcqnSw+-rFKp@H?^<p-EmpW -F9mXEn`Nys~po^Bl3x^TpZOSt++7A2xl}jr4R#&jfss0|4Di0Smhn&U^Kw8uHztx)f^=rn7}u{k!GrD -{Am<+erR<eMu0LB>AeB#VEyiD?t$J`Xv4iNLJfQmI6VGcFXUoS`K1EjZ3jUQTGRs$e{&EfngsN!h_hh -J$2bt_p%W;HzhFQ%}qu<-pTRM1E1sj8lEF~1WjWN8YlWMKS-J!P^ld<T-xlHwrWyE1&;s=>T#-MU7CL -MsM-R17{2C7<EJM)oL<}HL3exvL6*rA@3MW-R9iWWi5^2y-hiL>TQRm-cRH%+)q{LqheUJ4p{f3Ukjx -9)=F;e}t1QbL4R%Ee&ROegW`<`sXSDuo^m2CWi*87_4U-vhQK-Bu`rUBJ8ujJNyCZ!KI4=ZmCp}0Bvj -C-vZLVRR2RWt-^BVc60vQFZ0Mq5Mc$kHSp%(z#;YveW0_!!<gJnforr2~bdCd!e@6OIFgQ$7J0{mG~| -4hx^QR}33h7{TSa-w;kD~9y{Z-fNECHe425i|-B1xFHV7^oER{N0<czI*q2b*#qQ_Asu1VXijq^_c^Z -dycJv%)(shzM1$Mph~cv0(!GNnwLufL?d9>6W(t`(Ukb5#YXsWKq)P?hRk?qWBR^_(P52=_6so<cc@2 ---e{IQ2bg5HbD@w|Al_~j4j^B&xZ4&~Dd_d08URSdxGt$5l0tOtFjQ-r$rcR+(U83X81(J8Km7RRH{Z -N@N3&Jq-Hu~7TwYvs#pbR+3kB!^QJbvocNaq^H=q`kp}v60wtWe0RtgDOuDG8ZF1$t6_7M0R7tR=adR -Yu$(MQ`xO_Vt#VTM-V6Gjs3Q(wXC6*S=3J}>2_28x!sdZ~m6<U+RwxCqmV#eUcUh~%rH!9fhGi3f!Gx -YUGa-K<HUB^lF_nEe(0v67?_?G0-Bfo-xC?v#3g5^lQzK44fAUv^8`A)*hDuU<VodgEt(aU@;2<niuh -KcK{U-Ep3uz7pv~;1lt;_8|7v?iOT83RH|JBDk&qNOKC%?Y=55MKbMw4!COU#cBnJZRDz#_DR#O0Qo^ -YJf1s*lbw&C{pDK(2l+(&1$>Q5@gp#<;xTb72Fn^?k6{!$h@q(kPBIe{nG^<DFl(W1L54Y@U@OkC2%# -1UZL#LtCHJ$#os8mf7oR%HrW{a0(*$i>pvp@CwQZbXhOVy06u<gpL-hyEw$0V$>QC3+s~DmPm%4l^aM -(@aLyMsMOi1lKB(~b*U~hN|U@CQRftKK!j04&~{9!#Z?jZ^uAB-Y0Cb(K-p%m`EYASGfMRVA%QHq$d> -^?PeBZr}YMRYnLL$VdnDjO6s>eq|n0-s-?PN(kr!Pvq#(v9N>Kn2wGx&>rx_ob+1aSvL&0iO|`QSadv -{9eF_$b|}!pOOfh6_uTBn=7(tB6v;!@*|M|jXDA@nTktsCr_`ylXjQ~pdIQmAMPp~t7uN?WF<4;{C;H -KqrvH6kG8r?lb6ZDUrDrb*y0KXinrI_VMdF^HR>-tH~qmGn65MpJ89E!5$Z>0F1~a)y~&(fu~6=c3*N -F{4-An5Dmh0+zk(IDyIv3%DsIBiZ6sAhZpAHxkBtN+1pEeyl*cHQN&OKuDE8eKs8u%gp|q|78m8l|WR -`-TU~++}2MKOgvynbqtG?jggLYOv3fN0f{CAmWZZ{yC`My9dc+f0|5h6ZMyTzsGn6Gd(2>hcW;9gCQI -Z%UP@`5LPD>rvA{433g4}peSTzz(JA?xnheNi9KAU|5BRX$2xf)`ZAc;9&0h<8p}=Vd`L9<37m4+9x7 -nW?9<UKR^S#rG}y$!1cQE(4<IOrT+xg)2YD1%Wyu95a<bm%rfEH;$pW1)EjW5JHwG;1pQ*Tad9DdByF -9Tvj#cbQ?*m>zrKH89kxf42Lxg_EanOo_ls0RP&{Ehhg5wqQ2wl`jc_sXNRtYC^)sNgYB0VaLL3eN#M -E9Vgif?{V1p{gW6IIggq>v7pT8|kNzmxPa}Pe^EvbmW1|?Va2ulm2N1LYr)P<f8ubIe@2$TK4g>0S1c -7=Hln>|xz3>hs9s4`cK%m@GGkLMH$OY6k&$F`HZe@@9AXl_9{e7AmE+oxJJpL&zC@N<!q(hDX$utt4< -@rvI82RP-(!ppU{$YW}v?)Ye-C@izjREcFwJIeHuQX3C4R^-W?1*h~mHvo$4*2bOTR~uEVmQ!vU0slM -r);27v&aHqj$A!GxElJ1CI$6#DQgM(3t~Q60~nytP9;YqJv;nBMNoIR*tni!+pTI)y|p9GDt^-*DM`0 -De|gSb8Q4foz~zI*28@Sl*HqgRqlCO$jpqa53;yFkV>A0%`+?2|G${R<DJHfvyG37wlnR>7PL|qLDb@ -f^>At#z5W$)Yt%&Pf@jR;wqT0f~R6d2Hn_r06K*Ju~FsY#ur3fo`EZ?0WoaY=I2M<plPkrW1=rkLRIo -~bMfvLwlCzl(;t|Y^lX@$XYqD`R>Rg(+FNgD*Em)P-e)GFyR>yaoTb$z=AQ8;lN1>vWOuy=seVU5Y>3 -l6a__NVT2Q4Iqa%Zoq#>t_TZ*Y>B(UD~1Wh89XGaS&P<cRY3SQUI&9y*vw+L%ZYZiNTdj6)JzuO=990 -<O|iNG78APC>MJ`QpgWuUudWb0x=`UlRK&8Co{{;ZAp!DFH3A?lsI{vlk%TfB<{2bR|w!zinMA>uW9B -BxPe-Igo`HJG<l2g^GQ6UG2hxmY%uyX_{NWhQVj?<CE(NU_(9Q{xFp<O=lnuenZTKu><jU;B(+0YgFV -}d)k`M6EHNX93$H__C=8<{NCMP6BD#ea^&i$PCHnEoE(Hb@aZY*k%$EamX@>^;w5bc=%pb;LxRqs?eK -V%!OV<rh&bnwjOi$7V6e?*1p*@OQ_{Z5l(9qBZOu)&ei&QAEx3L~2s+F>Vz^LAm3G{PMFT`I9CN}vOy -i=zTLc0w(T<N`-Yk&8}f*?{6j<mhP;umo{5Qi)uz&zya9O8Z-=V3k2=qx@wIs>Gw3gnj%-W=)Mg6%VB -VJTm#T&02o91MdT2pkXrdNBJCA?ygq;11&zI|#g~gMI;Ea&_&H6L<g2%yL>DBJGm3c04eE6=7aLs~je -0@$=e=!bk#`b3k!1<rUvoy$#K5nsRH?LMqR?M5}@+ETTzyv1z-CtgsRvbXLID<DMI$V>yPHt3L&iu3E -24f02MP(M`G_LBt!e;=3Ox!xe`NpnMQ_Ra3r73~M`ioq&a|reP(HPSJ*HV`rwFPW2+=%#gRVq%nTWsy -eA_{Jcd6n<WT+F>;2$1m9O+h?Zo2QC%QQ>TSG<x9%i!V~eJENQc_A{C<keCy8lw3o##{P?tG=bJ}|j1 -@DPivfGuS=jH_|C4wpb@XA2-mwCcb0mN`k5yJJP!x{*6=RH-d_22Ro;VmY};9H-M&K)1a-0|NNxnS@) -tCCak6-Hpq31Z7?q`Wn*`DDyFD*v<6K;2^0o8kXDU=j5sWz|ZPcO6&V0gb-?{s-H8bLdem1ks|G10l2 -O3EWacT0B!Of4ww%VkDGpQj_4|u7Usu4T)Bw)*}3c(ja0u?Xi>sB-_L{ttjqWSoVDjaqvke-c&;|7Cq ->XA#?HZ1T(J&wYb*Vg5S&sgdFmdeTPs3CQ+e;g5=X3W|OPMWrm0usz5VO_&N&2QHf4OVL6YiX9i9LxU -^|%jC3BvB|h?=AIXF;eL`6SU3!$~JsC43yJJF^m}XH4&!Cr0od6eMRzU4KQe>{pBY2cb4+p);ZsMAQ% -z@74$oT_j7h;|b_X7X*mji&;I^EC{yec5pJr=?YtsXV#yjJlxY7rkW(5c^hByvQDYf=KThoYrlSgC^8 -YhR6XULo&%>`_d--EZ97A|xq?rJNLwI9+~6TL!_CQD{^M;Att`E8P$2BJK}ln_3plp-V%%PrSx1ng7B -7X3x<~vv2EqU2N{2nCMU76UxXuW3v<pYckc&PLN$mZ&F-elwowACVyq1z*wIQ@6{goCquFnFFQxD5U5 -_VrQLR!8zE|6)v%>pA9iW-PIh&%!J$7HoKgKjq5)$N8X6Wu849%3j0Ecsv_3R`!$~_?dqX~<7xae<%b -o!FF%h9*Jtq~FzWgvtQb}92$=5|yvySLNzqFvAJd#ck@mJ)HE>OJWe)2=8S(S*Y$A1R*5kkZ9WJS1W@ -+p5~!P#U>0w1Oh|13<5`pn?eq&(LqD`@;uzcdDum?}p8`vDZ?9^!*1LQ<|5n5otAWtH)NYLn8o>g5*v -<&QS&(4DYBs3pdD`-b=2gHV*aQPB@qRzwt3$v8rTnFK)UZXBqZKlDUuu9-y=`gN4ZVTT&L3vNwDu$e5 -K0~A<8^}$uTg|N4m<#2&jNds73N;Sh1cwRJEsaw|r=hVDWF+b&o(7L>ci@!J*etYP_NC0C}xkIy=1lK -;yoMwpru&rpT`vX5t7pdRc*?!AA%<+!6+ZS^MeXe&EH0SfhkNrWSI<v))tX4S}dgR2D8N+oanB6bf?O -Tek3v?V>fYTqV!HxOcQD2DSuE0`6TGyojrl!Tkr89FZv5-3Bx?<N)LPv0}UNtnCy`5et^pkz|`SnOGA -`6G;m_v(E+m}lYszy+UGqoZPRnT422+&$kbi_Ke1qTTR>M`G8-FNMYGYy+|3^)?U1y`fOUFxGMfjAbN -GO_mDLP6qkDn+^MbKx_GE>F-*#fp<~8!=iqvsNpr+mRc|<|w+BZa<}^4C_ZaIa)EOL%`3}$9MH(xJ|% -Rb&CL1sc}K&3`cS3M6t!q$8%e0$L`<wVLV4^Qm*gPfma@=nu`mu2X}fNv&avMU#>o<`VA^cir|hoPtF -$TT@aUbQM+sQ#e#UiQx#`Zfz%v3>$WBcim$$Iws>;AbfZa;tQo}=%4&Nw&6Ma@SGp4#rHHMH;55^ph! -~WKJ%?2ceCuG7c2s084r80s$&h}}rSE_!Da@s~m;Jg$lk7f@d*tspbYm-8VcELF<Tp25Q>unxry~W&Q -aZVwn;RDu=mMOHDsthcI(3bY<5<kP?vrJ~dd+jUT=V>s;XH%cm;!)amjJk`C`*<zE9}=%dW{w_Jz<_< -M?SHj$}Z8oCJzy)k1O}7YW--<mKUr1<nAndGF&Fh=}3;^pjEMlMnXe{<t)ycVEDkOzyR$LoF;e&F75_ -``Bd>r#N%hr^VQVbitLb?A}h7k7?xf+%f5(q4-4Mxex-)7m<dXF+dP(ZaX*UMYPKo!J#EEMMOE)uK?) -H9P3>XohKTUP)H=oS>nQg}k{bc&alsFV4Hhx-c@)FNun2_G97B-H7Fk)=6P_-J`){vRX$5<kN}__g2` -&o+BhZaR1Xm?^a!%N&VhyaZRc2teO2pSl_)(f7q9gDV3S>w`D(iJ$eneKxs>b<`S$1Y=-EjkkQIpWr4 -={>tWrmUyl-YO^q#?!9<!>83DyC1lNSv0}ubJXf6i}PHR%J;hi8);|Gl#qi^rD!Vrqe1C{1^^NekMj! -1t7`Ng}<0>PF_3XkeX6<2#LUN2g#ulgoOcy7(5RYkeo7*Sb@n7Is$P`v*&?C7uSK0*-qdgMoQ1`W7=` -y?jcZYQ4Du!@;wW+NdI=xEdE0Ppfoupcvb@cB#Q-Z7Ql~Rm5zI-nh;xTZi{9Ii~-o)R}i}*&IJ%dry) -UodD%G6pgYzfb8{t88_!9dIU|o<Dfb6j@8782-#e)x%iqnY2WYVlMw*~N5C+!a0G1#n92qH=IMuW;i{ -RH{KGTGd>97!<pHNm_9qwPYJ=Vly&Q{RAvWCaW_@;%~H+Uu!1W0dbd&?YIUq4qyxvjk%Z`;x!NYMfkD -c#h=lWC_U%&a(J2pPO5j}Z|c!m>?Tc@JHd^<hqq2Zih~Wzuh5W>iUDj)<#KA7groRS7*1k+!KeMg2@x -6+p(6j~$t}Hnow5gz}@P)O$Utx;Ip<|5-ACLHPt$TWe9-+*f_uU{aD~=hu_sscA-(fXS=;HiA~$d76T --KKP>P{W3cf59YXjhWmL${$v=-x>_fTrHH)+V=?L$j~-MEUCo2X-)VL5{1h>&KGHIRXIJ#400dA~#A2 -r3aiN~O7^G^@n>DV6ZDi2G!rZpY&Efo4Po2w81EuX`O<b+Sq|uHyIgj?10WiiQ*}{S)0<Q$1GEz7DVm -2$eu5vGnW^nXEK^_@Q*cPD*H=z%!(>UN@1gb8o<*wMAge<x2!Oi-PhmI1vIU<#Nn*-tDKksZ}nd8iI2 -LMven+|@^>G$=kb5L{AGRV4l9sPBujb_U113W!1Q*><x>%cV~xg0>;+!%`A+$;lVDyNLKgLr~Wv35W= -I-HVCux5qrpla(yA+RT^xpW5SSsjR1*f=F39#a{^M&k~!kXWu)w%}FKnS#QIAin3?chzH1HRcX9+6+) -7=S#eYfwtlYKl4h!4n1ad!FwygdEa2@rou%(c{a~E(?jNS91yDl^2C-8p3n1vWk+4;{L#a`9$tR$Co$ -VPXKuLzl0N`36TwF&71RQ|`Yr&v2wDH@xBvUsH<w&WQGky&jH)0FWdZkO*8u7+=+tgtVF%Vns}&Y#*K -(y6b|pXXjU4r91wjySNO`eZ@kwoMjYDu-<RR}N4b9|dHcyiglq;Qnz?5^WZaTUfjvv|v26jacgb#=7w -Z&slIVGTzX(JwI0#R)l<H-%MY+qxZZ>9>(8#}08uoDeqwrI}?c9c5@^8(CxCnXl)46iu18f7;_zP!8J -A-7${*(>_gxD+APf<<wWil@HNjo|c+PJr8aPC8uAi@>x3-s5_2wsA~if;6A9i?s%gjE^7bJjZY86`p{ -8W;fLGPS(Xpijnm7iM$@V5+~ScnmvIYjevt|3I5POX5uZ`$wHVB91o@I+h0J<$4=_AJw4F*xD7)tP>m -F$ROW$?^0;}wwZwQZ25sbGDr(Ew!CLJn(mo)brs~J4sNM9tKA0aR`4izfe!}Ylo+N)k4osK|(?_(t3j -<^^oV2|Q+W&0m1W3a)TP1zy8&Pt5EjPu1YuRX@uEyLGO#Z%bYKR$DmC4L8v#ZatFE*clzUoeY%)UT?; -(iET_uhLy+K6!HOjJh{a;AuMnd}w&eXl;hp6}jG1%I+sVZE&ne!8>?j-W3P$zX)!sURUTdD?Ca(Oilo -yGX>Rlj(nicgPbal+ja}9yQXL;n~}7B8G8Z(*>vmAxy}@-@o}@eDTF+I&LtoET{u@h*&$3;2)cy;^u~ -Y$^aIf2&AG&buJAUmoEJn^f@2RjKg?>F{bebe#ir9!S<yg?h7j5jclrNK-SW|VX>O|?Je0iv|%Zpw#K -^!7E?9t1egKDklHib$Wblig8GOKQkT{kQ36&cKk2!cE@xw8pZk}QlVjWD4a6H1<vxUje-tTb;Rko9$A -zFuORLMK8hx8sy=c69a10;(ZA_6CBR@0fJ}#19C$Cdp`JEL`2!0vSF~5t73AC;w&7o82l_17bG{XUcR -;=}Kqd2Tl6f5x+-cfKlpE!#@oz1$0InYeqsyINb<>RgHnd3|P%<YSgZ#kXnv<v6qQZFE;^BdNMQP<|Z -(qBx=Nl-zziBKcs4|9a5Vfl9kK2se(b-7+d`vBc0x9R=1A+TJ4MtRKE#pqtYqT-x%66oLwq47&|N`;< -<dj)v@CZx8yr_fwch#ukYP~{=XF=tOCRWIy3ra7c(B7YfU2Hy9zsgdX02j?z0Rm`wD^H<$@5nXF_`<H -5x?fUl6QH@hTj3mB}>PA8=+xFSYte*>=Z>yMz0m;J0ad8&mcf^CrZv4`AN;1tXEvXT`UK4hjvhy(An+ -%#oN}Wx`6vK}cC3^*9bG68-N=&!)U+O!%K30N^yI^FJv8}$|_KMD;u1}*J=m@GkbLW?3K3T}d*M~)Xo -1pOPh4`)!KZ9tt$6;E|i1G^lm^ul<F!{a<2LNu~4K<y<%G5<eSPR(ps2q&wRC<fQl(_J8(;IOAVRS)p -)t9sDjn=?i=f_o`I<H7oxC7#XV;ueKPc%NxBQM}6`|6&Y*26#^>o8*I*t*9L06iOC;V%c)h=q>m%rq- -K3xzv*qYS;4lvdpr{aw}U25{`|fS{M#wtc@YdIuWb*Wp2-02@TOwLTLj&vp$K&i?f6SGqcma<ULOx6Q -d*8B14i?D0?n5WEq|`}YH0*7Sb3Eqa+`;(x&7!|Pd#eMfisP=nsIc%O*YMK65Kr{NRtLK$U=CP&#Uu@ -&Q8eHN%z&8YMr+-^LoB2yR>%Lp#Q!@r7?+!9738BR4~L?CACt<b&G45|*tm?8_O-jQkX)?UI(YlHOxw -7amx0q`oGqHnlFzl@ah`ltNJSGVIty)^|d)tMNz`{W@EY)ClZz9wO23j?MFp#f4hdNS>S?)^H622U@b -J*f(mn?anv@837)>YC5fpYB*d)hqkrkJ$%*YN+q9Owoo}VXAPV9-%q?cd3atWUUj#fo@Kz`4*U-zo-Y -{U0AZA@$e=~>iC2c={9W=Prm4wC|*E9l}de4(Vk`_kJ!OQk#W~jLBFn6pI_S@9W@9%*g!;`CWmpm`j; -fE?=l@V8R+|`Vy3reaLq-Mo@MgDKXry|Dlp3K@WCbDnt1r?B10Bbi|t}ES)c6ebN&w&pgiYjcbtQdGa -L*&ckIEaFw-%IJXNCP*Cv`OZ<jNls@YJ-#kBC6N+Mm`L}vk)B*9!Wj1^8F6JB=jLd~WR`?Y3+ohzwYQ -$U4V>*Eace};+^l1z@E(g~IS2T)4`1QY-O00;mZO7>O&00002000000000a0001RX>c!JX>N37a&BR4 -FLGsbZ)|mRX>V>XUtei%X>?y-E^v7R08mQ<1QY-O00;mZO7>Re8_TKx0000-0ssIY0001RX>c!JX>N3 -7a&BR4FLGsbZ)|mRX>V>XVqtS-E^v8`P(f<LFc7@!6?;s;%>xYSp{0jFX-jf6#whkW5tY5l?k1(buWV -zt#A)e*4jO4@XQpOqKtF?P58#?Wtng^Pw|kEXJUh_@UV}Pntv9CbJ_i?8g=-Z#Vk^c|cOoDfd85W=xN -h-uc8m?S`WIPHN8%604%L{s&>PdmRmiZOoMr~%WTO1-Hk&i^Jh^2oH^!9Siok;v+@g@bAg8@%g*EViE -P9|DL0>1pL|R1mlJ-5_+Lu6i#PYq6bLhfhReT%~ePry3e6P2JyZfuq>9mNg6NDGiO%r_ojMWn}@nUHv -dk569ecMGZh+{i5w?ob8b-|N|-!lBq%@<Hh0|XQR000O88%p+8000000ssI200000D*ylhaA|NaUukZ -1WpZv|Y%g+Ub8l>QbZKvHFKlIJVPknOUtei%X>?y-E^v7R08mQ<1QY-O00;mZO7>O;&nGf68UO%5UH| -|q0001RX>c!JX>N37a&BR4FLGsbZ)|mRX>V>XY-ML*V|g!fWpi(Ac4cxdaCxmfYmeJTlHc_!IvV&!0y -GS6_x8gLPJ3|T7-wAK7>;xK;2kg&*%~pXNQF(#Sm*VBzj}1DpOh!T3D}K??5?h^cU4z&xm>=GC)rlAE -zjbuR9!O;b=NKy?+#K__EkT<5_Kz1^-0u9oMgZ6`lGBwp~Svxn(k5EE*9`i4BhFbkq@$gnZJ*9FORYv -;H7|Hk%_Kt&hURysFN&3finRLz!Rsw`%RX^2Ik!tebq>%M7I}Z*Y2CT9N>>$wB3*qB=~j1LH3WelA;j -HsvCEWbeCKT`LUEIMqG)$fRPo=-DLu%0u~Rl@9PRs8Fx3{jxF99?a3QZOJz2*+}FJtfB<7#ZNy{Us-; -*x0$LJR0E8>p7c9Q(Wl;?WLBrRJ<#M@LTnQvJ)2?psVV_4_QK&;VHkH`nW{!X&kQg3zM=4HS4ex;o2z -x&cV=prRb3C8Uw?Yj)5b36)4HwP!Wzi_PSk%W;*AJrU?(bm{^QSti#lG*3uxQf&&0&fX`duaW#n=oLK -;tp>Ap4=~nrTFNDC(Bq4d)Z$u3x<1sV{2e;wzX|08cjJ`&z-@KWfZ2;wK4zz8g;s;73qEsIvS4sN40~ -sVF}b_YP2$lX_pvUR@ZRxjZv7-`Z#HLO?{>10q>jlt4&5_?Lr}&A0d@HFOfC3HXX+;2Wui{{htC&GQD -Ce16rc0i;@18yfJUM#k(&e_nUPOOh0N^IwHJeAo9~AN;BKZw;rwiO#UspgKRup{R<Xa325Ms_}$)$?D -B{ICQN>YO`3Uwo`*3f7H~I`5yo5&BosF)0gxxHTkHQHxs@olytY5oYPgZQCU;BAI!Ax;oldAJ|aIn=A -;I9U^s|GDm(S^RP-{z{5Sk2xfzff{2x3Za{JuXJa9lUwLwVA4>0ASXzD5l0|lE0l^AkR2RTD>vyhTQ0 -!2`X^dw_@vmH>`r8rq^FkqVmmT&s*p`PI$Kyx&?JDz}iySk}|b3PRJYIaH%k2O&4<&aO}HxHl!?8+e@ -`zAlg1{h~ej(vl(^JYdg7>>4OW-`htkRG1SPdV1AG~-+FTfn#fm0(0jM_};2o1YsQB<8+0I4VDpzAYA -r7HHAd*xC%p@;yCU<#}5iWuC7W3s962{f?|&IQ|4?IkxjXh!b1Q_c3qp?iPy$*l3Y69u*7=kzwh@H@A -^?vIM(Zzhzte9`?Nv=Kt<^TzwDZk|F$Cu>*eqNRyKRffqM_C(FcM9^D)M_gh3zfFh%#CZ}~@gW(ozp$ -rb_AB}8*2Y;-=PZor{LHU~f?NU=g-7tWq0R0=m1=8DFQ1RjzZ0x!C>&<|h!$6`&*8rvfAOIbap@<U0G -BJfX7Qc1<&9QFj|I5Cc&>TAEeC94UN1tEJraL`^){1s8ElWEQ_5Ko-+Uvm~l-V}LHEPxY5Gw5#z)onm -;9X8)tO9JRtGZL?wnUR#f>@q0I0HyPS6tvH<Eg=#;m(1BqG&78$U#F%st(SDz_RGkzzw3f2UCj7>O6p -%_+|vCfQE)u^P&v|izZ41R3K6kuda{cw^5<0gK_GJ(;bK`aij-5D~GN}4JAlJf4-dv5TdrlO{`EDv*6 -X5=5SmfUe=8?-krQMhQ-nWi%g1rHv!(z5^}wcv8h$=XvQ{8zST55v4M^E(p8SF`-dIoZOevU*(-K-6G -v!+A4`iXo4@R_=vyGIkJM7f6yjMg4luDm{t`S9XvD2}rj{GQ1TP-RZf<a)072d=M8GYp0ceg#tlQ)$B -lKIb%$C`2AQ`J;aaxhNb;+T5fk4yx9qzi4yD{AJE1Zh5w=Y0CqMb4`1!fngi8{D_l3LJ!XZ_OWo==n% -V>eF|g)|9SM(6B^-Q2{?Pha()r$xwQ@Au%?AVo2}{Pfvu2FETlOc{$|bzxW2PD1Ph<iV3J%BFw}(ZoS -3Hz-<9jz~XI;D+k*U`P!_mcSCU3Se_g#QyczPXEStI>{CPV9h*mdI=Ffyq*G2a#$UhCd~0Z7_Z``Bj9 -_A_H5R+mX-dI>l8T07;=#J91VP0N*D?fAeNXg-_-jX#8_7NWaw@btgZIv8+^I^%#bK30Qs$lJhwDfve -{eK>mV5fEfF8vVVn`%`niC8O|f}S>C^3$*S)tH)SVrAEIvpRT%#J@UI<t1tWn7v{@3RUl248{>`SeaZ -azLUWa8$``(#+-P@(Hf9Hha7ugBAUUsTdCj&pE_)aTp}MkYcz;Z~MqcXz;VbPYT;h^2^yBM94SolVTO -3Je+m?l(dORSp@SC8TR%sjv@`M5pSno!ALF#k0!XNAGX{dN)mh?CpyH(n0tt7`R?|Vw~kMpx{X`!H7E -!G)bU0K&QT2E%E+KN6cY_^H;D+MEz~VkYH6`uyA?*i9b9c@GvFuG&#+hv~8pp$q8``lztHq!BttLfct -mA#?UCh@bFQ{`D)6W0>z(AsGK_1s;RN;Hd#p>ECxnW^j$}(6hNIzzBW1ro1A1$VxbL?RbW50x7uJm63 -A0ASU2K%qzY8f65u&HR|N+0MuLMa2lOWx2a6-*7+tj?hch|06-M0fr0#`FD92><xWHrEbReKGdu(wom -KkB9){=_ilG-UjWt0H~exxwPRYX|q&f?c!F@uhaGQa+s+5P<3mY8<Ec}1}xECI=cTX3H0OT`03PFzBS -yx>unMJ*1UQWO{i(Xdd;bZ`(OVwPAr1^Ny01Z<{vxIM`BCqT(!cjode%ny*SRLR)}oL;5HW1D_#nS$g --MF6{PrO>mXHHz);nJqT?ukm-WEVY8!Yj28n5LK1CyBa#&*ecj4#bb^+z7o&NVWbq$)ZM5k4Uw+ekR< -8KGDSYNdYXwJI!Mfb@dpQ%Q(Y~K7DGl*0@@9V<v|t|$$X6gB5<?-yW-5wPu*z*DV0<=TCGWwlvbsZP2 -W!LF$sUf2Q3*J;Cfl3-%t)HEV98`t)N0BlFf>NV}UN)2oQ?*)*Iqhb4i6=cwwu&t0eQOv>p;a(>8I6C -^sQ8YhM_=BytA-Onw|d>Q^iU+9Kwl$7$C4qNDS}X*W?e=nTx*z@tqM-#WC(iW4f~3MQ<*2*nxWgXet3 -dA)G76w{heS)C|(M(AgP<^axZpz}^xc{$E?V#5OSBpgR+j}se$%KGsjQxOzd<x}?Ij5nt&G%*oLa;!P -;&McrrrP1?S&#TJaAhNu0Nkg?Re(xB2T_=k+jAvi?FLq|q2ZWxH(;ZvzF+X6PtTH<vyw9je!^tjSm<9 -?Cj=#pT-`L`y%FD-sB$>T2AdhG$1j(5w+6r<x_M8y}6e2q=QCg?r!9&BLcn5r32dN?YZi4>S%?eSm9l -8L{YVdc;2TEwg^rl~TgJjsqWvoXx80*jziU?}t2}WJMp$E4E13fB0rmgERkhAw>^c-8KxfaVE&d?Hvo -Z|t^0HC16GG;+IO5a|z4|U(Q#NA`jf53{8U5wTBR)B=nERBBtjHN^{+sJg-DC|+zRLXmQ2L{47e1Rm@ -Tumu(|0PEfV65IdVtl8IuBpn20b!?;XTzw4%8NS*qQ<OA1`Ai>6$`iCGK5Kl&aoKE!^Red@pRg*n7P) -E%O?}I8BNVKyj94bzzyi)6lGSC?X~r(XW+{WhS$&3HAZvS8cT8R#@=OLP?I7w9sJ_bR5(Jf<PTa0<R| -m}9?a8gFA|;zst*U5yHixP(LMo$lsrP_O#F#Y)w$?KBro<L$QZG}e~=7R!!iCpA+R8Z4m`@Mb%FGZ({ -1&OV>=5A5q98x{o_w~!XgR>ngR$-P&L9>%990`iWHxqFoqAaT5)jcivkmD%Ll2eXcDf4tn>LmXMEelA -z|j7_^td|9H@HnOFH@`{E>n5XJ+By66-jYVCF{W;<0GsZ~5u-r2SSxG#!X3*u?^1u)>$6OOp`+CpsmE -t)r)2z)UA7EvT&6)nrz{x?}td=oKwc);(RqpDykAD24WbGi+nusg~?HT2s)m<<pH=vWxKCg6=v&y+0H -Wm@qM*rMrWl6V8;<Nwm%_hU#>5qZ3fiiawG_*|}jm8BUHOoCIuahq}?aNnodQ8vG?JB83xk)|;be2=; -Uw;0ArJ7NqTu>n1`|6ouIGBg9yMEC+v6SQW`c9A|k$?l@HTHh|hTgLvj^t&Yq8Tb@ZZ<}uWPqTLTTwc -K=C=`j=Ywt*0SNyhMpLf|eKy+l5`1DwqEBA`si9NVoY2K@B$%oG|fjMV!OKsKF;iLbWdZ2QvcTae4l5 -jmCHJi*j0UqpRxe9lXUFDny5;t9;>4F$GaJc?OgHh9jqHXa2wk?JLEp8uDl@pKa1b`wMoYkG*agDSQj -Xe1msj=3Nff_bT%2IJ(w5TO-`jEASFUo;$lz-+(<<u$mNf^#9rEU?xPhIaxh75x+JO|lqzC7vra9x1} -^<uy9Esc?wPZM5};IQdatqakMraEmQ1q&3*$qO&V1KO{}9%WJEhx(#zqc|(#;p`2$8Y*nR`DhF`6KGA -Z@R$`kDd2sR7tYy0p8bK6uK)VqQr#ESpy@21JRoQPT5~awMVG0YAxpDpJ^YyJ*##7yjtl*9%+!IV0`^ -KrAC8kbmu&@;7q;;|c^IpX#3I*XHT;TUx2!Zu9ROiCk$cDmZj(s(`9SGeHJAHNG3(`HW((HJ%q=cEiq -bFe$MLKaY<|;<jAc*zpu{_Lbg%^I!d)pvP+lqJnDAU_C-c3;3k}o}q!(*&eCFZQfKe48;ioK#!ytDth -(7EuF90pDdO@cpk+?X-D!}&KFhgA2$m3YhM!6UtED^WlST@^4T8je0t!`%c*+b_2KmS4vHxELjE5tRi -YcQOZe`rLG-PlnP3J*u$b!OyKLATwuz+xXx<X)Ar%md!<o+$E5N<I7ldCacqndC)=ML28L)1`@<_mb! -|=SS+?q2c1u#uYVrx)>p92EGj{|4IOi3nHQ9eOx+$NRwgcEqwg3GGf1a34j4PdB%1DoDDX%elWKCYPy -qe%-8rjU8bF;7VR({pn&urHdwdR|d2zneHL5<;CwmMW9fUHMroM-noQ2rqRjxfgar-Bi0~~P91qa09g -lw9oQIbs2Txn+OU=WEsA<SWp=`4Me2BsF|2^`UPYV8K6G;oU!br%*T1wz6|Krb8lfWaGavC{`u&N(b4 -rKNT)Ca!aLMu^h|7fPZ%MkwluoPcowciNo`r8Z|*dN<YA(;h&><WOefd21s&ZfoQQQWFPr|11D5yS_3 -#N#)r0TwZ4qOr1^;Em{H4IIA!ScL-t2&}g3@N`=vfn)3dp{$Nhpt_QL+N-?W>UB9N^cOzJ0DQ<|3Ski -`c1v|QH2#j<fJB7HXQS*xTfXCR@u}~W+Mb}v1;Tj80fT=i8$Am-QVU{-NFo?0!l>XY$BTXMg1b5Cere -d`iu$BYii^5n82=RD0Q!Y{{BiK}Je(hD(T|;Cnd(^FzvbBD??u(2ru+{sVv#3>UYSy7O3Lv<$`h@ij> -S2qNAFt5SV$$sUt0&7Z(Snl=P5J2nV03o=WIvavJ2E~?lT1&f+E}U9kdt0Ap6FH8zMc9&DY~Ji1}e33 --=G1V3GoufV7hWcrDX?%SCD&@Y<)a+>7{g)fHc6$zXJ+Kn>N|24R%x41EiS;n1_n=Seyw?<lF*rLNuR -nChhcK(SN)|+XuNZgxI3POCCpGxQrDqP1o-@^xVNb_clTzewbtFc)Ee0t^#RVrZ7s~{z{?py7MkPm<x -qKeKd-{kA*sLkW9xKLcHRVM*<RF8>E|#+7i-n=p$P48{mL`2#l{dn2ur<3+b1`S)T;KbUN?SC+@PB{~ -3)xfh2`JTYpINBdw=sB@_y7@%VDkI7KCR%ghN&v<zVj;{{7%u|m<v!I4!p^4LtfAhDB}Mh4dh^#mJxC -BE-43e_$3bVv5hcW=bs{{1fmQ<k8*MSnKUEeymf;!rJQ8!S!A>0)Qjjm|~;A@)Ax-?lu6N96h;n4{%? -v>3=x$?@;L3LMpaR5|8t{lMuqp25+1bz7Gm-ohPveO2Ss%ZIQq&Qq5^^Wg7V`hO~Ni|ay_b$u=HQK`c -YNdvH-rZ2$R_i;t!3PTayi~kqa6ApQ3ZxGuLkiTGH-`)^>3rof7vc!G_D<>c&9AcnZH_dj!w$$-KeWF -Uk1UAO#R(zUZe*Q<B82{FWA3KTE(>xTPcpsnrIcrnwnZRy++1Tj)Z}~sInGLRZ0E5?2&kf0z)nC6g>r -W(m-?eJ&b+iehTChlCVRa|jOlsFztBoE-fgim}#;j9~@Cd$44LV|`c>KnR$h`)DponT?XH$<f-6~$(? -jHeb0&$?;*}jF84O%;xzuHf|%jOPJj$KcZ+C9)2ZnT}o_7{6PPMykezZ^Z*2ccMQZ@{H1u^a0KZ;8{b -t_=qe_C#AR2jpwL6qwrmoMuukNwQz5<VR409<O9^VlX0rzIzmVEO7WOfX7-<yMa`hcscf%(Hy~~ZG3F -;BD}u6#~1>OCFtX^Zn2zW?+BstQY=)B6bB)m;@H84>Qc9c)<>ykqw+~alI`%*TjNC1POA4BCQS(H_LO -VrXcxS0^?=POSK+fWhei9d!N*yGjt-q6zBNWPw`Mnf1<za!rxT-eV~0J?$MgDa&=QcU_W=!DbamAvCa -_nUT>h-+>j;h@5aRl#m;;cuk?KX5c!~e+`ue_x$RMB230x3(D;Z=dI*>DbXEeBhAy?gq*^ib5vrveD3 -!WFB-?>@FsFb<o5X11J&8WJEKZqarZX`<^6P-*T9%>K<q(uxc`%SsEcMHVF1&t<XE0+g~zC3{Er#G24 -5|H0C$-p_@RqEPz`ap6LQer(?%(~4TIp3yv7{Lk?%}J3%F>+iO3N~G`20!xz4;J3H_Pp7<;safki|3L -gvTk#`KQ#nB-(jj+4hT?RLu169OU#9B+J7ke8VgvurxKePFWNX+)kERkmSpJUsC<*8|B;(1VchE-^m> -Ia5OykwndZO>FAA6{TCyDJ9?eh!O1+Vjm&ODnYLkfypJ7u1Eipy2Y`BxP(8z9wp#K21Ca7_m;NasQl7 -psVQ6D?&b?~ICYAF677bV9rkd$L<-jeS>FM&Fs%(dI}rmswS5tx_UP>paqgE|h6@%B)C{o}juoIm}~* -`OoP`7{N=#!+Jl5aYNKxQ2)H=JIRpRw3-AZOUAo8=5Ax(udHjHMAB_KvH4REAtQoBy@%N)OS0O-!p!+ -LX?dx@H})pQA3{orp|OlJaadzTRbLlrpqb1QHih6&^~{D`@J*i^x>X9IUo!3*@&q|hsaJR5I2xygthA -{vAX)#e~Z${Csho8e^N#8=|ZlL9Vmo4C$qYAeeJ8np;t83gg<k4;KFgUm)M+v)5*R9LL4O(`Y;L%(xI -qI=<ai-Ts2$P2x?MEpM0?;7k^97CxnGVvBDVt#>fiEkS;eQ4rt9UI-m9Tt}Pf^1IO*TH$ps<@+a;^eE -B@dxv?;JSHW|n`pUBPlwJvxTW3=>d%OrpbyeGH9xp|@2}w#9m&g2b#CH;sM>;Kf)CU!OxsGoA>#Wqp? -ADpv?a2JCj6+@9YVroH6c%?7&We&UJYj(m=5t+MGsOzO69!%aTR@zz3HUu6(J@@m(G$EhA;nBL&+I|O -6pH9`Ne9h0^nni>=7{9YRo5r^q1RmD@X9$fy!;J=)b~{!Fmqp8;rkvq(f=q-_(caRC13nBkGtCopXf+ -ldiKYsujXzq+~;*OGn;_xfnU7VW*H?(i*V9PjXMg7U4>3u9`WufCCWVxH^1<u8P`ZAJ~U&2MK_ISzcu -54w4a(0!R4c?|DR9Jm><wBxCWiRAB|rq(L`Q{r}Mto30rfwp@K#|n|SrDEZUq%LG70~TsPSmguZlN&i -n$85PO|q$MJw*1KZ&5ctR*<+wj4qn<n@Lgn(iwM;;O8!ho3@>F)!8cjjiJ2h>Mn(mr!3(_@OGreuli2 -hUdPP<ei#yJBHSfj%Ipu_ET6N(W5(h&_OV1y&GS{ROLm%j4)Y@zmV`k%i>cXMtWH?Lo66eXz&PhN<$! -weH%#4h}fc(qs6}HwZ8teEMYE7{%{&FP!R?TsY@qL~~AnI`Q{OC~=MR3-hyysJl6@J!(dho~m8=3pFf -QZxbm{)R~VzN2DCS&3$Yl=1m+;u-3&R@i*UU=>C?kY~Ln9^B8v<e-Fu<ywTrtN}{z+PmC|@U}eiR=JR -)cwx;Vc2|?eKPpl|z=p}vK2yaa0Mu>7Auv*8f$4@Yb)Hq>=8liWQ-pNmKc|?1ru*Y+%25J;_J0@}fuL -EA7`h_o2MZ=PxsB(XLb91bU_04=8;tz4_5<|qlTwv%Exy4=@nPpdUb!nAAJ7N52gI;tM2UOb>sOUg$@ -+~&E!?4=zxX$T2#i=I1L{|3)6SZ$4gVhx*uX&x8^cw$C1GpFN)PY1}7zj$`8FTvFYg7i%-p-!m>2^Jc -zR*9?ce+G*F7fQDz!DO`+0{VX{>*o_tq5W;Kp%@}JKbk@KNfw_4s!1Fh|6H6)ehU)2v^$EMt_9tQBoP -bJQOYDX$5~HgI0FHO#NrZ<4j-Ut9UcYd<mK<MM=%ZG@hWpc7S=G4x(Zzxj$L-P0c>OC=a!yt|3cp%_9 -Sb*YQ4XL64>nVt{naBo3%nYd?3u!b~+b^tp*A9tYzuQK}O5^BEpKiRjcjI&;8X`l?D|mb(nz5{j!oT= -G2G?{LjUi{@<YE)ixL3c-YRyuOJm{i>|<-JV<%MJuxRiR_Gyp;Z__PD>^)IcbYRt1tc!P)h>@6aWAK2 -ml*O_ErD@0006200000001ul003}la4%nJZggdGZeeUMa%FRGY;|;LZ*DJgWpi(Ac4cg7VlQ7`X>MtB -Utcb8c>@4YO9KQH0000802@m7R>J@y-$(@j0Av&Z04o3h0B~t=FJEbHbY*gGVQepQWpi(Ab#!TOZZC3 -Wb8l>RWo&6;FJfVHWiD`e)mZIr+cp&aucshXV2}Y#4`3iefug|z1nH2b+YiH#8R;r!Ba;eAC3B0u`z} -93QMThHn}cCNg4mSq*ExsxQfj2w5WVdfzawnZ38~4s6yJb<2Az`&4U*orkdsfHW`ff;CpUd(7QS%&o+ -OR2?^suqkHBjoi;h<J^bXw>s)LF(45S)7e;!uQ`7z60vo;uA3Av#y`v&zD-C*E~a=}?;mr9OH$2>h^b -j)+`bqRO0+WzhqbK*b5RWObvW1YoD)X=J;W&A!^<L8{16;;AR&mL(DTpu!)@L>LML225ygM$nA_1YLq -*gRuwt1s46ts#K$tNoTFA1JR`O*LE!ao>03%+awJ=vk!Uj&wP)w%CunT#n8>4(QFYx;PBeGD(se8qyd --w1qzFr1%Pzo)e{IPT)^1shW=pTHx|>Mt=UqT%RWde^^7f(8H~E$^1yrz2wCEv&(_#(%p>dDZ~QmY)= -9i%uHGY2;<)MEQ#Ev-+wH=|5&Dl%Y8^YCuyD*Uj^gYZm`)5tF2n96!{<!JV}usm#)E}M7o$R%PbV2pl -xyzG(Vq+JtvONxhK-AC`QVNYiYe%ysiX?`Na9Sp9~Pg=jkn8G-p2C^r8)k*X;kqUVCpV+<;z-I@AW6P -H(fSRW^}yEI-|&YrK}l<z}<o7ivB=wnk-^XGg-Colv4UA57?+m{0QqJLX7ILxE$!h4EqwM-`&-!dHTO -8{*84RA!9=;4U+dbf#smwBNd*&(0~joq2YBu}&_xLbNCsLxioseBXo9EM`-#X9Q(EuDh^1i~G@VWBXt -^5qfRp_$nm*CS}StFkV4sz2t|yj8;)4S3+NGurZlCpdNJ?OL(g3pIoBFzOsX;V~G#9ALC(97$aJ7rOu -IAo|ZD%FGX)UW40J?ULMm-B$su(<0F=sDizgC;azokyY*~ULr<QQsFfd(%sX-oriYmdOin<k`Qux%VG -4U(wT7B}xxOS-$Vw6H@p{b^aRU;H7>1}vU|h>TGM$yyS7|O}tsQ_NMb~rPgyfO^VM$m{qV)d&<B2HRK -)c0IPjstHMDc`E0PAUiDkR#LhB~Z({N}PgXS|N&@eYk7(0XfTrBj?Th(umUEACj8+q#}a-_}UVBW{1z -qFxXt(d)=vWEV<R9%j-j)M_no!A-HwP=FUU#jYBr`Yw<LjU=cn_#6%=d0g+=jqG8ZJ<&#UpuWe^)q&L -8pd&xa+#C%3WqN8F2}#rR2Fpmj6){#R5e=c3cZgLa!QjT|1%GSSG?*pVwo#MS%2=*e4i~&0S(BkwKZ^ -5FW}G~&S+z!B5#8X!apJ8k%&XO+D2gRs>!`%>iB>JxKoQK1Ia+FA4U8vKh9lnAR>Vb*W|U#*X@B}CrI -1<rxxaO&tF=u?AVHGVxc!o6u%BWc&Nva!HZSzSHEXu!ki7?%uULW-Ee3oE^fBdsLqTxnsX!#nhT8MtC -@`9So`#bHdV)4MX)eL(9q2N+C|i409(me1M9)uEia!|RzY?s~VP*WoDE92V+l}Y`q2xt)p-#r;qeL$& -D5qo3qq+Ntv)lM%<H<SO(=Z&ILsD<sx{OlC++N?hg6;pcaeeYKv18av==4o%gz0oGYajamv|+stNI$< -1G#3BF{GvVox|rB5{YwRW4u0-w;)KDVX4<>~dh=LOOBrK@_ZRl*_+Ll0HQ|x3tf2!uMDmK^vxA#BPfV -{%KSA-q+*D~(7+!&muUIB8QBIPR8CRawG8*Csa5(TD=Oh`t>FD|kP)h>@6aWAK2ml*O_Evl4E<S4!00 -0?E001!n003}la4%nJZggdGZeeUMa%FRGY;|;LZ*DJgWpi(Ac4cg7VlQK1Ze(d>VRU74E^vA6Ty1aLM -iTz6U$LbTSOQpHlcKnT?o>3FIv3+|i7#=kC=7$4#FfRG;<8-Ij%wt;-^}bgNy$#)v_<dyA+h#lc6N4V -_L-TLi*+rUmX+e-qNpxLh59JBa<pv3nzh>+nwf4s{qf`|ee&$+$v=-@{3B+Mt8L7lHsTjvz2<Gqj$7V -j^ODExW!)B{%F39XZfb0JQ^Dt$Ei&1T6y>_8lk|#LxoDC)TU=(iezIwcQkvynh-RIY#V<U6k*zt-u0& -NVs41<WX&<F4-bh%}(E5-1=r3MWz%MYF@OKMN4BM5*BL+XuGPycx8qvh`@wk$0R+br#e7%|1jaYCgy# -fE?ZI)+kc3drhRv}wnwee^&wB%Y3H4FYdll*&_(G>Fy(jS~7a$d@$EUHU0?K%7&Gi;G5|9MkfWhJb+X -Y%!m^U}=z0Y3~4Zurj$ZlP^9i&iupu@p)UDU3>Sa?10frE?$d2KM+4G2lWtPR}vxXi2}qEj4_-V@sqf -Ne&|xZMtd7bj8b>J8r!m!^h=rI_p9%%*@ItUaGYS1}}xyon#JYWkx>9s=R=M1nsoHYE_Gw$A8S0NV8R -HJ1Ul;Elo*siu^J|nQzSsPu0iK2u+kXY-VgVx!~<{Y8$6SHccm^5h{}91O}7goe}xyaoO-J-)iad+>V -RX$wf!{AbTCCXMW@PXmr3HUx^}TpeM_+ShVOSu8VfX+7)Lf+mmCaY>~6*WZSMp6(yrrNB@3v{Oag+dh -+AxvzIT@<L{4NoE|?tK6(Y5qHh>?O+NaYnyh4_1uDN(jo(JF;Ze?)ER!joO1dySj_q$#cQ6z7<+s)~o -duFQS0@lf(J8RsY^t_cb7p*qSh8Sr0^?|WxM;d4Gby=*%_vL3pPfRF?U0_>T~{D@)jUyFwq%7Qv#A!| -ZsQ#+O{SJ)!`n?$F*{`BHNFrP*CJhKmpmP^<x90U{B5coP|MeKNwOZWT#|afT``2rk-@c=NMhXyi%c8 -rm6_(q?B7lR?%ej!+rR;U?;869l+?fl^4?I~NdjI%(S@<lHt590!Ay5Z8`wiCH+5YWJfGQBgJw5+A=X -?HQ8(1J1ys|T*WWz+b3jtJxp9RQ*yk;5TKqN9nP=eg{54IR8+TEPc~+)E-G**#*zU%!;D+pv_FDrUmc ->OXd5gY628{R}ftKS1A({gG9V|~b-^`tR(Ba1GVPPYG2YZ$NY}MjxKMvfh{YC{pg9Yr>el(Ac`tMNFk -VC^IYWE*eUE#K07p>iNO6bPZtl|FOxw?O#rl!NHngf_rN`SvjdjRuORQ6+iuRo8Br#o>O-5|G#1^R?* --m~x6O)wGl`F*t8qwk<Io2h1ft-s%IO8@uxznKY0h_U1nWSGvka5Q*m1KLl}hNXQi{W}0p4`_`Y0JJF -YvBN)rm~c3QrLu~>ecPw^_H8nviKi>TAq}qqf<m)onZ>xk(T2;`A>cM^0H2fRo^!;;nZkiOM4~agx+) -q`srUfcVHM}OWUYWHY{}cj3fRK-!hpwwAv{HfF<3`Z!~8PhQ`Q)Ug5$&BgRKSd2S^rIE;)d8(Omu&J{ -8KdC~5L{wLk=$)ezp+O+nbJQn3pnVc-qt18q@)8ELsp>#WJv`a(nw=?bp#YRk=(9fIv`XwRmu3kVUxA -c$$T1`sDf(Gt1m-x8lODK^c5ryc%?ic^C~!-<y5h{BCTowt^ca;3{9Z-5yUj=X(~bda$XS0}1sa|!a^ -(6LdYin$jV9B1Nf(aaT_GH0~_t2CnWCdBZeDD{qMkkq3rCAAg^Nwk`QF_>?nSgf~o0XXSmk{Hb&?YR_ -`a>~@|8yMfy3_Pr!gx3vp!j+mj&nS7hjD0_8K#?2ai$Cl_Qy#j2+z1^GPg$fR;mGx&SD(6wE({*efq9 -H)+;Hvpy&2t@J)A?AAby+%n@!R#!gM{}R`DWqpE~1AkUul~>-3vT2|ZodgL{S^$|Hn5CR&}DjfVYr<j -50^1s4XU!N(K-WI++&U~vHL96t7<Mz~ptfV!8}@9sMFXrY(9jaYO;PDfqN;~Nyy7tQ-glqi4WR1AOI( -3#qT3T@LgG1-qe7?0Fuh(z3xP27lJ-*kI<ycP!Nc)a46@i<&L_S9h#Py`I2=*3Kctu|B4l@jf_5Tzp? -M)5S%5H*W<k-NuEH|6K;QZK35>h8lc=kL(PL+r7&jC=a(q+yK(E%&@9n4aG6A`T5dVLlEI%TW())=}4 -)7@dj3dxR8U-(Q**{q8(?!<U%;YlTVAXc2pc170*V=$>I&Tj`+3;eD%g-tdOQjSd+A(eUN6i<CAoN3H -9)rv3fe1o-YPJCEUZ-Sr*8c1@>cOlLLWzm#Jl{5FFJpYfiJ>1w*!W$D(z#QkQ?z(5b_Ub2MCGOaTJVO -9>*4wo8sQMll>4?6_y98(`pxQ%r$O>dVOC@KiMJqDah*BH;KJTQ)40^?1QBbZ`xGbh`Q{59dOUtFf9E -Rfm)!eXoa$ncFla7BUgKS5#y`aC*lJH~EE*AZEI8BRL=y_SPu7T2PgUe^~2qIV3Y<F`mQLlu(n@ZEXh --52-zA|xI4+Z{Xoz5(XKL6g1KGq7#bYj%FswZePdvZg+?YkR-xF_YmjK9iH~-g}CF7hP`wk_B{z;6-R -bPRgp_=IU!KgUBN!cfd{>afKG+MxnO{tjn8nOGQb<NbM?X;R@K`4N<fTvUdp8ijYKOX!*OA3`0jTo01 -9_<hvL|<Pw890N8RRt^<^<ND09I;CNvMWg0YI$FM&MMpD|tN+UpV_(Ph}mBya(BFX37qAMZ1AjPJwH! -Z>w2pS;@(XlB8jw;{;JRw*vs>7D$o4N!Gz>u!(@cV9&80pMd^qPaR&&8Dr9Muv@G_ZvZ0^Q@pP!oD!g -aUi3enrchH0L!)7^W0lYR`u;HKt{#^fM&{rP5Qn+<ayciWfkf2S`QD4eq)AY7?~nU@>)Fc#4bSXwZjS -b^@Vn3tk!*p>cge>AA)+rjkpt=8G{}W;2OBEpaQ|MoOkN)xdnxW4F7`D9^|*c<W~igSjEz>qlj~&|i> -{2})Mu+tV`|;KB`U^0fC8b?(b={%*s|AbbqsMoI^yz`GwcVhvbjwNtNu?2(CS7r_PRQ}V92P?c4+Im! -8ab1{zINc4F$G1ut{CGrO{ihY7f7<8Dkq4I7xC`bW7|DJkd8I)KYbzM5~ias5gVR&Ua5dtdCDbps}un -W;)C;>Hird~;m-C!IU%G8cFF+}g7%9y&7{xnnnq<J%sN{pd4{sIv(!i*c&g)Qias3q#$30l)YoLilIG -*<%6IXOCE-+c8K{WgNVdG$QJEejiK>{bo8T^B#-W%WJ{(&$ao+qLs%A)y!|1hd~@mk=xr#|q}h66nwi -A~*9h8GW!hbXCo2)2*XWUAiLnZ2@1bC{##_8PqwDpW$j}|3qj}Wue+5+@6aXU`MU8|L|$4TwGVB$Z~o -b)3I+wBt#fNoyPneu;=_DgV=;-Gj#|A>2kpp3#$xZh$5K$Bu!#BBogw1s=qGaCPHkMHH%eo#i@tN6hL --~cWa-{;I@Vy5e=(g;B@idlrpKld!7v+{5}Ph8yGj9B>fu@e<;Zn2C^MiW<Fct!NYcE{fI-~EHnLo*h -%TPe*C1(ZPts<?<1<#^BN1M&E01@x|qbYn*p?Uu!<g1Qt=kU8bMjY8O=9EnakN}v*8m9XL^rwJ{Hm-+ -5bUA^Qro~Lve3;pwWR0zjGB2z;su=ts2{B48w}-RCec+vtA{%Q|loW?HqtU;Ja(?j`s%lq{X{xGCKWW -OU1Uslv4J+lfZw50Os9lH4X(iLE+DVsUNbRHqt(^2H67E)2RkY(fKtcvEdej5SVdjZpv*Ekl|WI;FM^ -is%Qw<j=uwz$}L@Wl9GDTlgFG>W&{@Ss7c<kpui5-{T|^2jJ*8*<&?d~2M$}{D1+;m-W%o&UuX(cnTD -IUyohEt^+l8A94kv8*b8r0^0KH?O=89(ovd(-MO{tk+k@5Iou1uW<U<QxHnXM@7vAKLsBHQE;QlIHKG -m7!_4CxYR7m2d;D6<Um*oP3236p)No=1j*S({Vv9|#BVKpkBwV{g9jz#|Hb)i0+9uRV@hKkXXrJ3-tw -WfWQYBsia<0SeO5|AK!3}r$(16tnCGw#h--h1-#GbIW2t8$H}=`rJ-A7@c8h}rE!^$PMZ2C?Lr#imD9 -IcNzn!hF%_XGtDY^w5W%Rbe*W*1_nxmOnG5>$zR26#u2VH<v=3(dy?3qsv%7(NtOWY`HY0XifG{#(vb -xFMCfZ@lrrpZes?X+w4W}6Mz6d0o%DP_5&aX{2~txCvtFqLxfDSs36#Fi)FDWU|vVentqejDlCrh+K! -x@?E^R7o2ec>N%fwnrPo@Lo3~9%QI_JGzWb4FL8pnz!vsu&4lQGws`z=snYur8^&Sm55bCLViM7F(Xa -4gtqexh1for@)d_+_wA^`O=I=8%7QEeHZj(VlQ#-ju?cooR@u;HlKq&UIDfkPSUfLS)1puo{uisjax& -~;X+(<bhNnaJEVFG~w^=0pLGlVv`8qH==tj=<S67GUNaB&$<kTlD}8vofF`TqiHSCWY{f%vQF%D%k+Y -MmEj*W>IHx^vX`x%s}AkWg_fbX}j9JV4TpMHXu`1lAapfwq3Uwguo<R|LAexVXGa|0$HIUpa613;1{e -&tk=kf)ue~#HnaFJ`HJ|qeUHwGmg#?#e3h_g%5d71@EJ48pfIhNd8B4AZKNC<YDHUIaR9;ud_%=W2_b -_QRUx_AoI1eFeq*ZpB<~Kf6^d{geizAgDz7wk-^e@zAAi0-Y@#!n1)88b>??Hr`23FOS=o8RRV~<HXe -2*LBxp%Hj#w14hrLo@bo2h~=KZ;!=vB0$I7)sJg~B+Rt%+LV6Ja@WHM_xo0h7miqq7_J|NX&qTE>bY? -9*#{Te~0lPAmBb`CFiMrCSD$(<h78je410?<)=-na_mPk(E2a>pe*Q-rlDfxaz(hIv!>+JkNWG2zny9 -hu2+b!+TzJ(K0=%6SQ(>%v>}r&&Q$ec5GrW!mu#wE+Gan;!nD#(8bUVqnCSpX-Nz8UR!?F=*8u~90w- -C@UvZycfcIVQH58`0UIO4sqo4AqqzZaDnQ7^0`nTxMfWkp{-DNv_19fFA0B{pvTpdYhw4dGg;Gec09) -7Y%c2%%<5;&cz(vu)?*oBO6ILrOz+s>p+yX??9gZA0LJtLAfnUi}dk=dCk<eGyB?1s_>FQ8ioT%ZOnL -hSRsHpZ3HeYa9@DC-6$WsAgj9Qfqhf8&C3jM&~I%_I8>wZZsdLY>Y>FR(6kvimk_&^@+dI?C355ET7{ -f-oWi1gqKIkQU_mv^KS*xsI<d#dZb<k%Cc_qX83?#doj!qZ>1vj_hZn1i=czbvcl%^Py>nSlee1{G0g -?*=xZ!fv#J*h^irti;&To9gg+Kddm}${_?X_ysKg4c~zY#e*Zzac$;hx`*->=5G(EKRs~gl8S;bbZB> -}sVJ9SZ-YNP;nm;h	c@H~3hRB<JS?xE>C-Gk<qAKNvOJ@pmuA9dh0~&R$W!Lr`vI;y0a5zdjG+jDa -^KQDUF~sQF@|-Z7)m1x#qG^c0CwClGiQ=JmBfx)ag~K<Au30HR%xA89BE_0;PCbgIOAi|;yaWFu2yp8 -gtbk?@4{aE0HmQ^ONYjlSEqDa!Usm?q{3<&uCW+ooB|g{|mZd+CPcgTJMt|7ylfAY=0loqNL4yZ@TU$ -7jAjoaRRY-cS81Lr25|-+}s!&sm9s@#oFg{ufY70|XQR000O88%p+8Dt&gR=o<h4#cTioE&u=kaA|Na -UukZ1WpZv|Y%g+Ub8l>QbZKvHFLGsbZ)|pDY-wUIW?^G=Z*qAqaCz-LYj5L5lHdI+dO66MN@Py5zyWt -U==QRcnav>C$sqA=E^rKnl3EsHid5K?JzAgt`&CuHACxq=i~F<$l2~MSb#-^WtGZKfcU?cQW!Db;!_d -@=i(0-}@7v|jb&b$3n(pqdZtpJEeYa)9VF!OR^(nt#@Ld1&{&o54>({TodHe29Q+oAPy&U9UZ~E?Uy# -0ZzpKk}=SBr)_zlN@tzrL-7YW3%8hr`Gp@2V|dUGI0g(|5a}?%Jx6zkcAq?RmT8`j>*>w7)*=_+KkE# -<IdOCKqxxyLwlY54>G<eX*;S_Z3dG=mBKi^DS=&p=bKGeW;px^}YRc41(D4WxcL>Z~FhB-vEZkdhUn1 -F`eFZ{T4?38(-lXOab|}YwIPwDqDCJL+ZKcng<U1seyctZ}zxkZ{dXyHLSin{Tc|Mhvh7m)pEmiuUGi -vbvyKjDf@B5c|$K!-S~$kryUVKReS}z+1Cpi`CT`>>GthP?RqPQs%a|x^1AQ!_Wzj=)v6k*w=EE*fZn -jk^2=XZvELzRzIuNcHeLHySXt;CeI-nBdlPup?TUX;E6vL_{_Hiz@8#P!^fJ|Xt8mjD{#Xg_PH@WZ_) -xC+y4p8G$=ipz@7jP$EU<3H8&NcMd#~Yr3x6MJ`iS$=ZE2FJ#@!CN33sB{^?X<L+|qy{+xPNIa+W~&1 -+M+j??D7u;;rR|mGHg9ZY82#R_&?;pudel!q%#%PZ?_e9i$X*Zus&Zx)7(85|Ii(mLPQa$gcK=x{C$u -iDlPti1&T>P><{`F&)f&yMyIh)J;7c%AvY5^T)k4G&T-kQ;7{XoxY}D<E;(PyQB0;`4aR5;u`i<15~E -F_WQO4NaY^sx3u3CpL<L53ihoAS_XMy{?z=$UYSLovPjl}gi!4RR{yf;d9^yIMdvF!1bs$k30}Qk)dQ --5@bw26Tm&zXH-c9RH6f)z@Uapl&bM6J*NSwCH433Jo(2gg14c}Nen4257jN5jry!(sL#}Y&HTAL{BC -__8jXoRA5Pbo`2J|S_HLjHR74%oV_Vw<Jx+HWo5dP3DyXHdjSW^js+q?#3hga2J@Lac;NErAy)0~Y@z -%)mRf-TL8U0htC*#HuDuI+~c==)oGmzSix$`YpW3K}Q{ooBDI$pz^dc!?Io4Q@RU<t>2Ihy#5sfeXLy -I(MZ-Zmk404R@zzWLw-g9d6}n7;=XuG$Q<Txj;69Me2z)IVh!-+mf1S<la;$H4k!l&;_gn&aH>C%*{d -x-mItQmsCPCU;Wt6N{IKfl>D~Mw$(i^9T7b{BK>SHQYj_r{FyPSZmg=mwM}9AB`txd2WY$i<ItHy*Dp -B?s}Kl3*LQ8#8}xATlHb*4iE>9Y7Pi_Qz`h|71(4RAgD~y*4auvbC~j|oa^7{Vk^~cW^`G=}=50Wswf -|i0fd5r5JABrE2Hl;tgGSD;pq-qIl{e6ML~`Z93?~7kaF3-LMl%y&h985z-u6Lr?{~N`{%+z5`EP>u> -FtAV=?@n{_r<<$R^_^?n>{p|NvrcFvJY`rpPqxhWP_Nc)s!qDcq${=n=1u01|d>VNhpS_V=z`mjB3X; -Vx$5`;F-4gIHYf!EFAInb{Z;D(@za)*>BC-Ziu<m8wd@J`Iv#5PrSC_x~xF%3LMmHg%5ryj7LKnVMZ^ -bmOz5^0i-SBQUKZZ!4TRG7kSemw61Lq^EXu^xR0J)Z7{3(>^#)fdi~d~M+<v682KLXMvf3j=AiU)mFc -kW+cbw=SY?51P}XZn*tGy-&e)t%;t>2P!|yY)iW2foZ78-W00#B*rzx@V^#IJ0B!5o*)-~9UupJW@Dz -z&NM!73Ui=pa~JS3B&q9^k?pG=Mpy%l#TV6rD~)Mr);nnT6RXbMY^EW-xA?m#xcI&O>1u5nd^i5t3tI -SeszmY5`E$YFtYW@tRl0;845PP2g1td<EF&d!_Ix4h>Em}*|Ha)dt7@azf?+HSD@tkO6p8E(t~x0bfa -C1>C81BuUZzya2TT#TD#j*}<=%w;5W6#d%|!G>6Hq}7n`#w;fMHjBM)XXdGGvfl^3MdINp8_BU568ji -!5cyQ|Q;OgwA?D89C^f*S`p6OV)J$p0*3$l*lNdTG+Ri}|hDHoR$)Z*`!PkCsPw1uj&ZoBHM1dk=j3} -%?{6`W3K2j+eW7ChvInb2p<}?jm>syDq;zqZ2Jzucv@4osD%n%HQuu5(|Gh1i5Xv*L(H0D@6;N}cqj8 -aGmUOUjVp~KcqbqA*6u-p`${+D5>Hf@o4+x&w4$PGroe1Hv!V=GY>9K^E146s^tT#9mnS_Htp>e@^A) -B)l>vKRWS)g5?UMT)pk&3Sn19W3+=ePs2_$h>J!S$&bs5wW{VdgFj@a7<*K$bQU|(C}$I!i^Bo>^<7T -W&80~NXm2k*LV{}#q$R@x*9%{=&cfBsqihU1WPO~J~BK|ptCc+G#N<wW!0~cG;S8no->MY!HV(QPsGj -3+Znq#@TTb=@h1>0A8xbp2_9eRBP&DFWd4+GtNwn!%VzAl-}C2l7YLsecNt>g$u3F4$0uQ+SR>&mVIH -x5ll+qOu|AepQb5eqJx}eQJmNq9<dKiz5%;}koQ)G;<Ou&iSU2RohJolY(+2Y^V8!Sp=S^&^I97<sI? -lXwqirA)6f>2Y@B)o%pywk|x>hGgK(f>;!f3$IgKO64)NazO(SZh<PilGdiQNpafxwuF=ZYcihW?`1k -Ph(*u!7jovAg<#jG@W_lxf+J73^!?bN0yDuX{1D<)-U^M$l?n*FC&&;>8H8=R4#TC&>MRVMMGWOKV#= -ufOhge7$d)13`P=cfa!Gz$kTxwh>!)eUER*SlZTtj4%|kH25B-&n-BOFUHVtv2H%MQo9m@_k*>3;QN$ -iHgCa*tk6xSWGCC=L>GY4>-X$mKmRxDEu)N+u9}}u&Rx)ji~*c5snLU{7a&)hSP;f+5PzIzV$;=3YLz -Gazs<s<dG;@J1J35(y|yYpryI(j`OpJ=m15&VDrh7p&i==pDM9d<8y{kD41XkCt^Bm@k586mf8qm?hP -A74HR;X1$3#nWxUvp`(nJMx3=HhIYj$--@un*q(FGC&{HMqVk5wxNQXo|J2#Wx4;R9$004)D06CHNWf -IUEctupL@nP#%|H<WnNxcP=Wh=61WEY^KvQax#C_yN0wM^16P8{hGk+j_+LK8A*NUG_?T*u8K=kvQLa -5N2_WGqkRU0GzY6KtelMRS@<EcGp+CO|*sx!q7LS>j!X|MDEYG(Dn(+_MSH!l#!UDMxLBM&o~5iI$Wb -4d^`7XicJB@KXdt?__G#9^R#_830CpiV;P{wiru%}W9w)yO6?cU_SHkQzV#|MP$ne4Lgjb%0;U6Bv^* -S%gTmOrY0i?OttWD;Pr+)viIdT{p$ZlI#*)4Y%Hn^@1qb1l2zBabC$&|1#Pl`9HaCC8jifN0Zvx9A-X -~BuEk@NFBpZpi4Cq%o%%7tHkxwQU!QPVW|M%a|*iTh^4~(Wsno*GpWiM7>_cmMz;-<6$cmWhAlk}jgc -R-y$BAPw(hq_{y^Z6wMSquN2Urqp0HIN2hgaSZx4F?!1KM!Ls4gl-mA?H&T=H}G*IsV9TAqpL*S6@hL -;($nYxKP1D5ZQ<lP;W5=pSJfB83_F#e6b_{&h$;%)hMfXs-Ot^%;zkFCCSo_@lm9X66PF$zaxN0;GtZ -r+oQm=;sbFh9_wL~XT_&kLcE;?@)-W=8(9Yae#nhLQ!U<<n1<afzXA%bUj?oj{8qCO(i+uTw&(ahASI -VdRD)G6$t9s4rN+n|`orj)#C9ShbulHTS8;R&v1SwvL0vjp?5cjKt0wKWj_Z<f=M%ro4Wj8bC)5c(Cs -c}lP6PsU5P<L*jReF_?xE(5T5hACam_5HXj1d*k^E&G*Bd?#<A$i;F7p2T&!PIWUn8$pOIOFSmHUdm@ -R*BBwOW3$j`1YZe(tf@zOOk`MmE^V;G(VeOK!A*)zHG)z!XA2m$C&Wkz-x~^QZz+Cx$))Vz0KTdAJ2i -$`%375`n8S-M&DpCD7$gAJlGldjJpK2}avH;^j^Cz||rYAr^XV&=^vF3-qd6a!J9-k;9vbyQ5vEjX!4 -$*Tp~~r2M;h<{qS`>+bhEqKPRhK}?|QgtTd?S2hVs2{0mQyP`oyscsad?<iCw=TJm!mK0N%ytssQLj! -%cgT+*<V|^Ylx(8|9kW>_#ZV%jAHILOn1fT$WQ1^ZW7QLXUV}tbk677q{{*I!pkNC#N)l?~>MGzJ(=F -Z&xby2>v?XB|VRQJTPw$oF?5q+Of3ZPR_E45W4p{tO$of^8)D3)2;8Lq$mVEfM8($gpyaw1*(ck{b52 -Zyn*DY?~iYL~5Hy|PqLs#_p)327}N$HE$7PzCJ6WdnO+iKoLd3TTu`+R8Ahfuv_sxZpZ6v}M2ut?%l# -YDgub$Bt}FI(n2Fbt2DBhID1XjmkwhS!;q{CTWRq)E)E_wfadbZKbfC_|Xw3@OTkA;cJuO2|%RN<A|4 -~%|suq=xs@%ej-t2mLWEsB-bU%AIL*HBM3akKEAe5hh}8aSyF}GrXsrN6W2W1-)E`Y^ZE8@K>2jA_=T -?Xm8_)H07Dz6-^$Rh5!>z>Sl&ojA~I&}72o+GOBHLUO5sGD9opaAdJL!3pNqkb-K)Symok+?q93CHLj -fOCS7NF~wUR-M2%HSb9s@_KPyi`_TSZY$FE0Of?FFmsY?%&3DW(P;x>}_Kt^<tr5CHVGmc!D@A`NOm+ -g&BeXiuzBH5yn_B9BjJ1)dNXN8lv6MvAIvbl$k4AP5x3E4<&O<0&fm_z~8y`*_3*=;blq6qTQ{e3B4X -_*h|@=&MwE!dD5Uo3l+{rZ+OyoLC-$g_msA$y|r5N&$@sTG0WhqH;)RQ&5QYa$~bCzWqyOfU4lc*n2> -P4lpwSG&V5#CHyw1QDKRMa+S1vrw%-c4<NsRnPN;A)k%*9h^=(U$wBjs=#;6fcr8%A$pH4pkQY7<iJf -JOg^y$C9*dPkLOpz}W>$HskzDU7&sfFb!`jVwp-B7$dn>&no!qEYp{VP#N~tky;;01>57n&#^(;5Ao= -eQcO_7cqDu1j2E(Tf9SR*MDI~>Ur<_~}br5oir0YuMB>WFC=m^M4JBpv6#k}*iOtyY`?*)H!99WXDkc -aP*vY$v^#e1d51Jz`Yjp!<#m%^2dIkP2J+0d8drkmzy!A&@rDff@iiimPO(&$E<OB9A#_kEvV@@TbMS -&%x>(hD0gNO|9edxmrDNo}IM(iA1}BO)?|pL~1MgNZ8wHl?r|1b0WMF?$4+o)<ou86;WW2b~Le2ktIM -hpsIab1bkl;tPf|7;3=4pceywKgs3%!w$Z$ao1SAcS$I)FsMAFXJI5giOStQiV^C9OPH~kwQerGozo6 -SBYF!&JS<g^VKEK4e7ue@K9AOehLypw+WN$H*feif#V5T6l%TL55=v2&E$<l#Cx9^#A1|w0<Q|ko&$R -`E+m{XI=YPr*<vfEUT)QLuAO1j&0ju&bMvRzfc<YPQg1I3?i<bJwIeZQ%v>-<k+ex<3P(6#{mqF4}%{ -mHba>7BsvqF_Nl>RQE{KzBV>2Q6nM17c?CFW-Ob6}YH+VOc4LmA3&rr}Uu03kg8S${JqwWedG<CMyD} -i!<;**%j_y1N@HJivZxGgv5Atha(o+lRy~gk03ydy8&?L(5s7cj3FI-^TMgp@`T^@-G=II+Pf*^HB}f -ds^vZG?DC%FZiTdjwyh2esf7S_*d<w%?3Dy<ssR?5Rsm6)V4hH(I;jF+sT&v2glO?pHq1Q~#fGD(+&s -1}Xpm%aoFVMn6d#VAAI^_at0g&CnWiPM4I4^l(@5;4bl=Oq>pT}L3~?}OaKiDnGI{j$uXEf+Hvthbep -vYCcFLZf@t>e#X=;j=c)Q<X2!!Vr$3T>8zILJ^2^;e@2sK%EMn+n-Bx{!}N!NQy*bN<Q+ZM~Tj@^q82 -v!F-1t6WulSCDrw9HkfB)}1cH<EH4O%}SfU(%V)Yz)Z=6p{#8)OoaW%~Eg@b?ip5QAHAkd-Qt*|3p(+ -Mx;x~VplFIt3C(X+=-zT(zHRFCf?XIco|Z1^x=7ylD9&UR&#)R*33K=qfIWkiZrF8Omay^2t@OhJfy6 -23K^G1iz>U-u4-^Z|HK~nt#33~+=@D3<Lho-ct(ZDyiL*tKe~sNh^GW-AQx>k*|}4JmRcS*jINr9PMa -p$ICV{@5JQ(|EFA5Wodn68t%^f9=b(-jET1sO@x<gLb#7|JB##&&d0^gFXiOcH(`xSwej?V1W-_wC`W -(C$c09ezaW(guF3Pb(`bpE>GxmccT9gT+Sejd;h-wqP{q1fznA;7m<n;!T0}s3E6v&*$K)usoqYFsfy --Z)Z;A{kjd!4%)N{l=oLdJ8>5{9S$M*Ks2Q<k4}{I=`v*?wow<*9;i8KEK+oLnQA!@vBZuba?<rj#*- -Uw%PBils?Y<p%1?QwNq)P{EgYt&4oEj!t7do)Xz)z~Y^5l%Sl-T7p%*UULfQ%K;52FnU#$dfjjVgFm) -SSFNy8%_|j##p}`hMj1V9uo{2UcaLE4H_n*}gl)>-xhUA1eUF5-r6YqLwyYYM4hSQL1_o&T6$cryty{ -1b>!r*FVAyH3=jf#%qF8!wqG)WWw_`O7hC|#7J(4=>2ysRbRAwhZV)#%YQ|ycCd&x#BkE~ye2kYnFg; -cIa4#*wLZp)zq$J)K3Agx|}st%7>Cr+q-*>e?r#~s9*^|+96|CaNWkcTKtRox%Vk;p$7NXH7cDF$iqE -ZjO(&nuP}Lj<)UHr9q7v6;PhYGifBF;glU=}m>VEN;h>CQY}f8ip6B6teDEC&b)=(3EvRp_knHm;ozb -a-l}g62yZ73lbF#6aqgr?CeIcU)TozkicWeI7^Pg89WYTN(nWV#qs4ZNt&lCIZm#K!KVOey@hdQd?AT -t5$<16w}iw$3I|z7;g{ySDFFwP;ya`uy8&_@KT;3{rLEpI3IfRLphqeWYPh?>IAF^kB_7_k0CJhwR3J -YyEIDU?1oY%@ME;Rv`eWC-QE|XV-Q(s)`h+eF<>;-kZa;X7Id%_RE(<;NTI2jmHS@sx0a+<<J?1R-6x -P{~m<(wxgXwZMyU&_h>p^Bt8VtC^ZrnN(2dokuHZHjWv?s!`uO3Tv7f7pKp~k|seD;9_A<Gf3R?R9h@ -+`MgoEg+FNYuz!qqUALbeN`lG%xcmRm&VxVeI-!yYk8<mN3B|4(uqk+Y&ugl9<t=G!>3y8AI2y&qs_Q -U3Kc8|L1Kk2cBS^_ZLCAkU3v9C+khNy!rgrb%qM3==pqNQuWa6$-<QP$dNDhyZ+gp@2eaWB}Gi{)vaM -qYJ$(&L3}cp0lcG>V?t)ht+EtkdfCaDsR)g+hp@7RBjjd&`Ih3FR#R5WJfO%2eANpj>tXOfl_Ju~>CO -9?jr$BI_jBv5BFnV`#T4X|!t8mHh0Jy4TDqJkKzKF2!?jdg6-5p)!{eoP^d*FeBX*V-Q@7H3E|Y{ZW( -EF+#>q}Cr|0^|u^FfJI(vd&uykZLKRINM>t;P@Kv*P?@u0WqBr!2yk+z7$Jyo}si$mg4HV<wn<#bQ*@ -&sO_H3`KEVunso{vcC%4|I-1nxIe1!W<&hNl2Q_^Ta=7J&s>8O}6ao0mFP_sWQ5P1kXp}`F7N$23M-a -OtGU{jaZCi<`$PvL?WY>{Rhj6U%R@^$LByvfecgQ*;r=n=)^#WpjjbL31TwUh;*8cPN<47>kb$P6Urp -1>E*yVO#+-Wefn>+sh+0po1BzqgKK7>b3$H_Z1^x_ACv$5`t7^x8T+Z*Q$-J2$J-sn9K0eAEe#t?@l& -B~yqlLYM-`*Pa#`X7<SA<kKq5>E3c=zHnd~ygYA*-{So6!P{!-qg;~<0|v^7QN+Q{5YQCNgbKqR3EO- -ZYKoxSU1A{epqj-1Mq)5w7&Z?eE0bZye4Rb!>u42_UDjdkNmTq|HRHw<{{PF1%IG&I#Bn}`?2Dsmg2Y -Z6hdic_jWIYFTkq+oSZ-VmjI_Q=U^RqC4kckz=msTYy~p&b=)Qz00RTsS-Ci&Kd;icD{h>9zO9)BSq3 -UJHze3)(xdGh-z_9gmO2<rzrwu^A8+YmCLxG^AUX`_nT|WT>fLsplKsl1Qr-=q6%#R4_`BAul<|Gd*S -D)elN=qf;ga3H-84L3jPj<?Y%B-qvWQC!Kyd-Sez}yOCnZGh_XG#y_yb$f_Kxv-}Q&DUY>~by5_VtEl -q7TPvH88Oe1y&}uEXJ%Z{$0t)SDu5Qc*PsP&x8F={x-3KmARU-}dDX__>Oa~j}$ybd2y6&<Wjof3pNJ -B20?%|$QRL+H_>6Cjx!E<GD%?<UtcV1W`3o<`P(s!wCJ!V=uSok~g4Q)l+J?ia1>5lv1RlGTiB{wCtV -98DS66S%oxFSet%agL(@MZ_f*T%^>UU&9kC`m8l*-D)*$Cxw;Qurgj&xxzXsg-xuiQ3?rr+CBK1G3rd ->I)e0GnSD!$>1;f9$x#$+gDtGk+a|>s3*GhJGvx%1aX<hQ8u!pw!EZCRN1bR(`c-iM75KW8k;<r=B_z -DpX;C6Tg#5f;$V<zqU3D+z6G?J0sx5w_IP85RMirT=uCquxidWGsF;Xcj(I-#ypRW?=wbz|iC}#obyd -}o5(s$zUyb+PG=~V3!dIPyIN`;nv)&fO2%-5v^a|0@2=!y)c_z9=ur6Sy!WfqOl*6N2PmXzjs&l5Tb; -=MLQ_-<f<W0DtFCYz6ZDl?^yP;rVOit_a1Rem1EG^^6RMc5JEb-0MvgiJF<KvDBU8U<Ioc-KNwJyhCb -QdHbh>?L==3282f2gFy)l&QKB2}XePHTdAWFmodwTPS+{`)hW94%v-P2!>4zJX9-p-fR*Az0*yritCd ->skj~ElFjgvpB(DxafE{F_q-TOBKfgF#_cju;87)BeyNl_%eQkKNDEz7Se=00jOsRG(DeS40z}Lrmgz -9&BB-0m<{|OGg1feD3|105B&jrw^^e77X=<P6I^CI`>MSoy&SO_z@mf1YSya+sNWYbP0E5qy}@s+Fj# -^AXBX|@;!Ej>M34{_C)=)B%^lMbW3F>;ufE3Tm_zA{jg;FrBSJy5ggt=z3xlxPW*By2_VOkE-)eS;T~ -*ZGOWwZ3idiwd9J*b-6ff;GuI&G{=Vbut#fn#$(YZp0?#k(+XD-}{|1VHW0|XQR000O88%p+8Db-rPy -aoUONfrPAHvj+taA|NaUukZ1WpZv|Y%g+Ub8l>QbZKvHFLGsbZ)|pDY-wUIW^Z+FWM5-pZe(d>VRU74 -E^v9}SWR!+Mi9O8S1go6q(C7M<kAYU(Zo$!qi7toZh^uOXo?(KTd%n6?ozf=^uPDbE<Yv5(WyugT_ml -Bv-9!h&5S0K$!|_7=_Fa<v{30ssdgeWlsXb=nTxHo(uoWoWsWl|3SF0Z97Sg=Bg>m!%75uag|ztkY)f -YMOk~<RDApAjJf+K6oI4@QtyWvIQ9&+S<MFwmduP(j`OlShR63a|Jh-Z*%K3tg&TGYH7`+iz*CwNRFo -BFLb`XhjX`PX)n(q-Caw)7y!-a5iO@<0>2u{`+l*1t-U>4psX_*m+;g+b1h%I+)mf&YNHah`hScSMtc -Out!<s3GMI}*BtkxtjydKfFWP91)Y(v{V!b_AJ{C=Ujg+KCD4P&&<nQf*W|5qE1UJDn_#PsILNc1RbI -)$oc9i=)Y85=C-TY2!pumzmRAA)XwZOe;kh2f@baDie*=uk=?<@G}UxUBwPIzg_<E;casE<J+^J&fot -q7q83RT%5t>bfpmGbH~ZkW-cx&R-39hw7I#stSd!PP*}+-PPSC$+Qe0w-KIBeXKQ?OPx2<U^m{mKo{L -vFYJWd#Ll{NpWls0q_w%yQ;v`&nHPq7Ed3Cky4ZP}}TrQUgR55mO5edB7h;*{Jp*<TYh)7uqPdpLt0G -dp1Du8*#^|M=u4*&~XTm^K!jK2jyfB{aktt;<WZ8_LiOC*#N-so!Y5}8V^jl*g4+v(}4I4YaHcxO7QV -A-5sqNr$vbcpE&l_(5lC@nx0aK@!>*7_yHJE=%aURj57JDtphk^tX}If_-h3dMKYD&1A|));LT;_2%* -XFsFTo(jGC6J~Oy1;<x5GqQ4=nUQ0c7vEnj#4ohbTa?@y@++lbUs?cVA~(A7z-)s0GXACwV*J^hMNyP -fArc8q2@{8#O5nyWIs{)GqG~x4&rf@SKJ6hgsI&GrPZ-zN@0bTWF?)RtPGreT_C>a`_*`35u&-&Z@lX -@g1}Iga(R_#KT8Cs%9{1q4UZ2mtWP2HKOhX(X>9t7%C7>-Ow8_DL%m|IO{=F$Xn|RV*aJ7!AW{Id-a? -@G33HEN=a$+*!TSDag@BBgqb+ugX>+huam1%HySyOkI4N}G0n_C;LqqgxLg!dV3J4q_<pX$!XCdFx<P -n)CJAuf_T>DEbQr~+Y8KJ{9<R4n>b%*7E1ivA-A8M53q(Y4UY;F~{efb_hxJ{rfIJI?!yOYUxUbz{<; -V%$T$x8n?SZPKer75beGF^6O!jdh`k4F`iqf$H__ftA~RMipq{R#w%}#SUZkfeINxJm6sL^)ayjyVuu -<|MOKB0m4DX{f}#)!!>Z(fOfAUTJ9ZE>=3o7VZE+4CFRHA7Q~^@SdRv7<C&jx6m8Ig{V?44=?6xm>zl -PNEuUN~G?(I_&NvO6DxP#%o%=))(>>;B9=Un4XoeCDl@P?(;B|9<)hK8K$Gj@^Pq|H1m<;;+5dYAXd0 -N;vhhdAOosS+1lypbt3vNSC#Ch?_pz#<&4!+J?VsU}(;^EZ?)FDn!S|i4{Kg3Rt6zPHD*_T8d$3!pS3 -42fZAX-8g9}FQ+LyzQgKax@8r)9CnAJc=uaMm%;>#)MvcH9PKR7P(lC}X&@=@G#Ui?(!rOaK)%6C7j% -VT1|RbIEl9Hc2)qHd>f7yXFOPsIcwJZP9l%&qAGTn_4*uju1|6xCXJ!hJ7&2GP1Tw0a(kctJogTK?Vc -0>!wT_sxou6U!r-J<Owry>xP}D;p!U(POrz-($DO}$b<^tBQ;)SuyEh@74JXz9)qSLU6M?@BwA9%y!& -=TE@@iIXnA|AzbyO52R-V6b+4CeIz%#%UtvogDrz@5MTyL9ASh(JQ8HVM9Eg+7aMWV=c~7Pf(8&Y!A7 -l<JgY3cCf!?vPUj6uJm;smvoNbT<ANzor1#kAgQR96vWX85F!4zQILZ>Zu9&A|f1Q4Cww(tr2OMsME? -Yez7Xll_OrbN5ewF>`utSEHy@I+gHMv(MWF)f;26x0m=mjUoBh+)=Ku}P&R(48CD?HAJNB-iCrhXvdh -=43VkB~Lyf9*++z0UIIBdx;;juitdXSs(LnH^-bDZl%2@Qqc7YWE`V!f1BAeshQt~_gOk#Z#N)*PHn@ -8)694B(7n4k4$PlVvsugb4`X_iE{r3?Y@sZ_BE){z{ihczQzuypho+nK-pY@3@?tg!6I0qSPW*i|FMW -z~ytj{mx5?+F8O#sOSz7MGjnThQO9KQH0000802@m7R<*OmdWZ}F0AMBn051Rl0B~t=FJEbHbY*gGVQ -epQWpi(Ab#!TOZZC3Wb8l>RWo&6;FK}{ic4=f~axQRromyLS<F*xk*RQ~6A0nkPo3_&zO_kQ!bsA5aj -l1h?oAG!kNQ7k66u|(Ly~?lecMd=Tq$KYqepw1UIQKhO?`mTku{LF?){Qom8)<*Elg-0uW6e%9hgw%# -5zZ$gfxp|IZ?5v!-(9`_{`&1dXMFTVuN(h#-6$(prAmG^#`<4B$eOVEAMe#KdsVFi;O(JSA7p_0sRA> -z(RAc_sCAv?PpT@6&8%{!d{U)eWwkX=x=_}&++D6*W97QJ2`|F+Y$cs)VP4Cs(1mQ&OuUA`fY((s6Ys -!`wrZ!UCR|##fF1gGSO5O$`rXz0{O0G|?|yunU%$C}dwc!u_0_v@WdqvA9$NTs{m;=zZ~7{mvyi_@v> -U57%96T1c{e=9yNPVq)y7yD7wR1`qKG$nB^GDy+$G1esLFefD{uAw4e5JvWR5epX98gNBUL&z|13PC( -JS%RkYT`T^Pq%PC9~%qbS+k@c~;85Xw^95U%@;x0m^g$G@X(8%trpix|Gf-myKQl>^8wAv=dSkfLk}D -;gaFK-pnTO(;CC0$q)ukSW^;7TyKmh@D?^=@XMQP{41OEp88k=e<1%3(a5l}63@myif7$CAZ&?vqsoJ -jK|^Akh%jcE#+`^`lGnh}HJFhurB)c_X5>%e0WS#10&%N@C?#bAumY<z&xT|vl!SD*K?sPSn3&0TRu* -RUKaxmDt04VGSE>-&n~CC+nDgXjVzqCC!XpUE65{P-4dZExN3VB0K!<dd$UVuD$h8Inrk!dYOhJ0DL@ -jNj*ZUH=MJz$K$l=Rt2(e@am)hkH)^i)JihOlg5`#dI`a(eG9cQ^!O<t%Pafh(cgoiyMx{?Qvp3|iT$ -1Ee?D2p>iGC=2FIDb^h5?9wSvUWT68M@)%TB?LLX23@DaR%$)un?<5>TZ@_Kd7=G>q^o`t!#5>y|UF$ -z|1nb8d0N>tp#G-<0Tt^(u!Uc0VAPu%0B6}a^5b+MSD-=8s{zwOEw71)>gqh%1*P<X!Hi59;(1({AN5 -IeMk>J;9xX@<A|ILKoO9GHe3XTv%W6ve0iC-b><FHF%uu|eNl<fbILgW5D4YIZ06z(%8j`A+LxZYH+0 -Qsqw#qBPX&cFYUk4~G%MGSa;roocS@ATJnrk3whv7iZ4#+wK1<#{z=G-{;uTl7dQAqclqz7)=ZBED8f -hV9hZ7Kw>fj9?XfrCJKf^7(ejxX&OoQwfLxecPB{1iisuE_z#9!OV1EWIBH>iZ{_R5iSF^g`RiOZtUl --=N-9mBF9eqmBsI>UsBj1&mPz2^<Aj@PAvGedxVJ@(PcIK3J<6cXhGU3*h)QdYrMYgv9vf5=aJ+nwJ< -=z9ivCBD0S{r#N6&j3`fIgdOm;U3H$0fP8nKa##fVueU4LFYx$ML;%wd-=oF-PM0@-(9}H9}8a(Lkvh -u&W?;l0<lL>#_=lm#v%<E8&Em3qln#7LZU1WM{!VYCcXg*r;(mRm~<XwDzNTqjac$ztWp8lBSOhhd`I -TpTvWtfsegrqZmw>`U%&bb^M#;I-tdX2%e@P@yluQtA^zRP%>lt&%}8@_Fj5=JloTu7AkkQrC2ojhQ{ -^jEp+^PP<cQtGx}1c`i6-Ma1ah!(dWGq-`aZ+l1m_JMUW714hTtM1Zgkyt3zJ?uG3|o-hP524dcTrWI -!t;hAG&jhA$MFLL*oc-Uv^;%J0x#lGPNe@yF9&jlzhKe2iM6(#Sn@$6?rJz1q@N%^!CYmWc3#IQ@z?V -7ys#e*b_*|E|(V<mAL@CTQ2*k_Vw1vLgmD4qqYZ*6uy5E?*|~!0u4|AIPcO0>A}H@q=UXZNv?Fh&1qT -fwBYu2T@ppoI&~pPEE<YL(Ec$n5%WWvwnd)nN;i2viFj1GnRUNH*`2q2czn~dA5AX4P{euQKEj?<`pT -Fxf*dQeD=++dpr}YNQsUC{)>LZV6DG^s-eJ*-GkBjm+#(fh0Cz$RiqPZJ!M&kuxHLQ(-sp)-@V$cp^k -Ze7D`KE|=-FaZ8rj^lNZoLng(xooH7Vt8RmeF{s+q1f)94r>?;IxV4{0Zt8=H51+C0?yGcygF1iTz2p ->y~$a`DIobt!c>U7d5%lTC>yhUBwnxd;7BWHIsRZde@vxAXU1yp=k49PLisLtl6|J~<(dQ!FclIE^2V -&;^VQ7TVGN?Cr$s6OeJ#H6>_kiapAqM9oA&MF+(BVT-w`X9OM}3YrC@x<kUIKT2$+c@8Nu*pT}a)OkM -`?hpjwvZc0$+JUV#=xEF)N!8mukwYGK3HsN2+^MMDqQpf3=;wAGIN`hInL9Ylh8E}Zc=5|Hds88lRoA -6+K&0XkJu&u8-FPNcw#`IsIN+)Osyc*%+KE!HQJa5y_pdA=biJWDNtUx9WJ@wtA`yZ4F_nRc&Q#X6gf -1aK0|j{#O3PxgST03)Y|G1#9Et!<UOZk4xR*5_^^SgyIpW7*>gF=rlR2TeE)A8nFz*dYR8LPEZC#TQd -4gmLp)F3(p%xdIZS9T+(22sdQ0#dWtBl~uknBZM2~bX<3RX>P*Cc;&^iTy-sq8<Jm0#pCGz07o^mO1R -paXu%ZZHu_>%|5Q;JAl$U@?Iri`Ltr99Qau`DUoN=>5@&FPC3;X8hYZD|%LCSwF~C*Gu!fNLoQsuhs` -K!Qfdt=ytW=Zskgsx;ad<G@iTX21PmH3JoNB&j}Q1CrLs|d;00LgI6DEfg#>EruMmwa#s%<58YPrTxH -S}$2<>ueW-#R%c?IJoWpN`E+*Hk_vS&mT=%wS-(nn!3XdDD^EYnoUd5b%xEz4=@B3MkD)+=@RA4&Ra{ -p>F^_?p<;K(`W)Y(J2j*B?>(=UYmS6xrO48*1{$aCT<H8C?WnMR>nucNnjz3Z*h+pLA@y(URIkes?ph -%_NWS$E7pbj0E^4>UaDVR{}H!S)b$p!bpOu;E)Iiyii;hDGeae9i<I66(a%ck@4^Ygvf#V!?AFr03+{ ->L7BpuPBajk($X#0&qS~x+W_3#UwN^yuj`nrc+(m(R|G2^pS*l<jPuOUnB**ZKKr#`;^17hB%jo9*<o -22!eg#s2#lX7rCvvCrbWzY6W&l@m2QKNtC4ieAZn%8xBX8r$;Ba$-RMRjkKYwiJw<^i`kQLD*hn;G~n -qtc21)mD*5={(Vdjk2`wgqQpexB9ewTC-lzPCa?T`8o`de2{$35Y2fS0}B?einzj3EZ=yx%&D*8BITo -POqBb=k3aiM&c2b35?MVX5|cR)`@7ra5EEves+QwnHkWn3mHI}}Wp*Pg9(K|vw=!snfYq0qE3<J|31< -JNV+yaw<)Jn7tiS96;0rd~8a=&5%JI^X<+y}IZIG4u$O9JKS_HvF#5f5Xt_-nNr8b5JDc{5Cx@bFN2k -?W<irc+)fQu(O}04#SOfKbR>l2Wp-j0r<pveC{*p@%ey>*$dGydntz<WA-U{fG~>RohP$p`T^m0%yhA -3J2$5#(`bKEqt87^UEEpe-!SL#kkyTI@pa59yi8H0-qMGF967C>`X>WP7!{SPenvuXcZq&0TtfFrQ%~ -6DaJv<DT7Mt)uJIzAgWpd}!*!EiMLs9{t#&u|%n3#Hu=O@e$r3DlVuJQ|gs#-op0wkb{}Q)`m_1xA&A -2aadDEM&S(L~*G*!}<Rtj?YgwP}%XMHgz^r_Ob2YiL8zGygGiTGWF7+hXl1R_h+a=AtDDfagsGK^6}H -BtT<H|D~B#5!D1rX7o&l2u3&3Ff|((ihTBSJP~0)?uwbw-Z9YqvTfE@o|X@d4l`g^c?>7B0du1LT@ho -r;!tgxiYoI>ijpM;oqsUHaiJ<DifrCVH>sJj`uTqh@gpt?^FF`0_mrT6I;vA68LC8_~|^CN)?x(nL-& -mOr~i*9B|s(Rc4$c<IprYLw9kGg)~hrdSh;X_~<xX#K%5J7@PC3OjgBWLJI#>vYSqaMP`tE7e^;2i^b -s6^6@@$E_%zyWHs64=@U8kcn_HkDRr2p{e@(@=?(0hCE6|V(vlRpVCQR#Jv@?A$+=zgkoP-3xbY+w7p -SxX=(E@(GNlyMi<&U5{ewP|>$U&xo@#&C+ng=Yzh{RTt83ppB-pUsf|y4XhRL<xjSj%G)Y>!=eSW6Zn -<HdlB;x;0@FLY@1p7RKz0~!8P)h>@6aWAK2ml*O_ExMKo!sXG000~e001ul003}la4%nJZggdGZeeUM -a%FRGY;|;LZ*DJgWpi(Ac4cg7VlQ%KaBp&SWpXZXdEHiBYveW*eV<=(aS6<@Q-{!(Vn|_|un;KQvMrR -7E=FTt&!~|luOufOmi+fU^0yOD+O+hgCd_0c-E+?UlnZN0%8XK+d1<sGSysk+%DE7=^100Xst9M4+3% -&^_xpSHKVXGzyX%kDWb>^)Zt1#3xDE*Ip-NV9de1sHHn!}Hx@RSK_%|4_9k{<2jz4sZooT$oTEBlKbS -`t@c}pMoQ!Oo*tU;n0L3BBaTc@cOC8z0TwOVCLI7dIps>fbWi8jfK@W5|MQ>mp-)3sw&Z0PIn=)KY0? -uREVL-ijBS(=$z`*e3qE0NuaJttGYZ=JVWlG=ZSs7XZESc0M%URttq0C1`B=@cBMpNFI2xkzX|TL@2t -;F5Gmler6-5S~h~$x1QZBeqR$O+lYKolRUG$s3BEW95v1lu|Q29AtLr0Rnzz%1U^-1MGwJ2QvPEkS}1 -^F*7cvUk;6Jt#b0>j!6V$#qr#5vz`6?_9aK1mrDJw+`af_(ccCOe*g-eDx*V@`-9L_yIQE2els<da)0 -oone*UeWzD_Jc}XZ7Kq*$}Le|-lx<0h6d#G2GCw^s!pSJ>a>H?nSyv`QkEGkr%9MjLtbnw1%$@zI`^y -*lNSeo+(VKsES^Bpn)$gJ_AFpE*#*XV1V0q&-tBiworXaEQhyU_SPgaV9PIEZecD{mFOp{vtzeOwJ)- -S!m7)2yE#O@nVKvl2cd<4HTYhW%t5HLn~4w*y8TD(@q`xulD+<NL;b4a8t9i_TsfkKytc<0F}c#<H)i -9))yPy_AzEx6S9Mp&hlc)P-3`H}Bv5n9!Mvwmn{q{FcJ6r`>ls_h&O1fTi0*LG)|rXm5{bms}PFTQt* -{j4kCghgv{w77AsWj9CxmgbqxDo)D5Dqm9BKC1m$WBtD^xM8k187{`-7-j1v7xtaY}bfaB`qdD!4^iE -{n*kg>F2Nuo?r5etZtu=OL7@S2lM8E5%<Y#+GZA+Cr>y6H=h(5O`;&!6-zq*<A*!4DspMHYP%JE59Oc -};F;U<hVI}f*_CE3{SlAGeIb#J|SS{FI*>irrfvwQbCtcI6}moDHair!NHN)W~z-bD;M!nkX)3x+1$4 -3CfD6Zw-K<;yOH?bz=~f(`9{>K31sa4#YrtTxf+IaX@X26;C&Bu40;Nx0r$jo#s$*-g~pOvsSF(^T7_ -B}^tvs=rM;Lp-w`#%b=3^&c~Jj<qZ!xX4=>V~ce}la*xpO4m2&%X4^H$pTsMyj5nOb8P;@n_^kv63r- -apqj8uG~#tzkD2;cI(n#%cO?4)P)h>@6aWAK2ml*O_Ev(dFx~6~002%E001)p003}la4%nJZggdGZee -UMa%FRGY;|;LZ*DJgWpi(Ac4cg7VlQ%Kadl~OWo>0{baO6ndF5AaZ`(Ey{_bCKRli7>ETkU>3<f-`E1 -IpqPy}m-eFy@9mQFDnic&}_iEH@3??}lK<(H&cTwuTq7?w%ibH{sm?o_C%gqqh$dWSNvR8q6-hFx=co -#+}fUT{<zcv)A<z^CoXCp44dxMX9v=!HI3s$_zH#rz{HF@}uEO7hGtrIMB=9u$`bm1H7Ocx%73pbZmZ -3-+P?`zPKuTw#gQbkfO!Y22QA$7IfPW=LEA_(xUUG<6J~Xbgq5&2&~wGQqTl_Ybw;88_a+(0h(%6QEC -y1*BvhH)$Gb6otE3t7<lAjbQpSc|c+-Wk2?C(w~L-AUE-lwNV|ggP^|yf<n_MY1hIrSmYxpte=Dk*6z -;E0h@5$1HDq4C`elGguRgc4Cm)gcbc{<DLvWMG>ymSw~+I(sl%zx=wE78)u_y>zXC0M!K{tWaE);~4L -5pCJ0KBrFx4o>U<zi5gCRgaw8HhCKSu^8zWQS(j!heR_~iBsc390_=F(4!N>%EKR2f6<344iijVA3+r -ovUt0KQXBPbi9A>JQjlr<xhAi9+&pv3ja*7F8woG<cOW-%;0>aL-fEu3<WGJ3GKK2kMv<Q7$-%L~waS -w{s_A2tHFZ?Oz6VBL-O+dhYo&7;`~tA&3X;&(01$7{xU05yyQ+snLW^U%MXtTf%S}Exo>!Fx23o(@}; -8IzM3Y$(f@I<X8<wvCpFEf;t-&vWt@qtGH(?4Hxe(;K#F{f&&>kZg4v{aFu-2_D3kC!}pq2i|k)F9%W -ASY{GaA?<#p`{gG8=$)*}>rl_`Z@W%m3oEE%|;nx_FB#Gf1s0QJ;z=Lr$P_i4;j_!JCDue|$P*w^dST --e-bT5{(g}@+&dv2ChV>}$i^$pDwB$h3iyrv#6p+qL_oB`qQ<h`O1V)cr`OGQSL0_NA2T{S6QvODyk7 -Kjv`CE8#{{W{&x*b=+c33-CoVPt&;_LhCcL^KQuZo(iAqN`q#7a&lE4j{60bT->b<hEu8x1iXQd2>+4 -?O&c<P4)_q5;OTy@ebm0Hhpsy!4D9)2n6)huG8|VIK3scA%{=I=Uv&28(dH7Z7z?AqzFEA;~{C*jgN2 -3(z2|Lob9DPi9oP}vL5T)z@3J5uXPi61T!Sh->zkYW(A7XmI5f>s(YdvR4A}bIeG-mWrlF!=3zYNGDq -bhF<}#aWrtPa3~Vc8Kmk!*^DK4|y{{UPyF`Y93%Wg3;<!LOx&B_-=B5R0$j6XZ*m?&as0xkUD3jCEpD -l5i?*I*N5qsT;Hj=E8hS7{44k01((Y%te@7DQe)mX~x`g_-y^~H+VLO$N)gCKZ2$_Cr!P}7rTl`Yb=g -(7A##6^ZBB<A<V(U8zzX*PNziiz$_w)}?ae;~s-?E9y6p#O&8aG%-ii=eyGdaQC2ys+o@NT=)gJ><~u -`=!(Odw*0-Pd4u#L4DEGzU@9QW^!VKu~&z}+co%j`5kOjJL28MzjLVVASZkmc)WM)xSzPp&IVmM^n1b -of!zHl9SHujSobg41<cNB&m>*5WG-CR&;|K$8~I0h)&_63Q^v<AHElBh#`X4%Ot~H)HV`(F-7zlgEu) -u`rTsY_PqrufS0eWw@qOv>6lD0{puq1%MIG)r6B;M~08mQ<1QY-O00;mZO7>RL>tC;k4gdgpEdT&700 -01RX>c!JX>N37a&BR4FLGsbZ)|mRX>V>Xa%FRGY<6XAX<{#OWpi(Ac4cxdaCx;_e~;TX68+zwf^~4HU -3j%=f#Lw;RG{6Yxu8KCY|<8oy@ghmXq#ABQbZ~nH^_ItH$zgQWO<wWWuVPkB!|P9H*aPrt3zEiMr_+M -GgVdSnX(UxYPVD6&VQ}+Y}-@^VU9JP3itHwKVCmiuKxb~>Zg}KzgUT9Dl;qbN@@K6m)fYROpBFxBk}c -ZTNiRAvQ(Ryl~k)bO5V#dubQY%v-^~`i&~=!?ZszlS(PeF3-yOg%Jd*lS2j{t#d}$(jbHRbs^zt$KV` -EL*EHUeDlajtwb~S)CFR;aX+)~U^(+7Fv6YcFO`Dlc`Ddz;nUVR6Caw43nN<nRV3{aOv%U1wf8R@4T+ -x%MsjAH72WKXkZ0T#`SH8ASf8>W#i>q2TDVab=btCJvk^L#(wNUdQOY_=}ObTe^JNgd~v`LG?uYPI22 -0|WNtfiUQ7T}m(<lPo+;Lo9NtuIy+`@e3g_v(xl0+E5!YPX^@rmFvaA&rBZ7qXZMd?4zX+_W4<9U%Qk -|6u8`F*xW|TIMQGja-Qn^G4egq1qh%+#l`N*-UMR0lDVQ9)qm=v(W+U+ro69$KNv+;-1Id<C{RORj4k -a;C42f5q-cQvFDL!C(SE<wn#XXlLQB!WksrW7i^2rze}rr0uNUYGEX2F8|;+Skos{h0r_UW67#Aoju& -csQA(N1oSvBKLIdx5d%U2*`6qjZTy8}IS1OYv)<g8sve>S=Z!SKX^;Br|(`*2)hoRRGKTs?u9Nz1W2y -glbzwM_U(tGLSDnXd6A3=4$s?{>Ve@&v5!4?}3cR#3hW!1<emo@w?%M2DfGsW#I^E2a()j=oq(d?^oJ -ZoDu8BKCx#=~vBYtmeL#~s&%jlk5$gpdc@K#y$|7>aYnjUr%0QFMC?fB#&S(k^wdVAr)Ew#72)oVx6W -fGP<%k5v$=WQRu+sG1ER(FIxT<Ew{EkAQeP@_dM)xIV$nl*i-ogW>c5OL6e`aMAz|@!;EV;>cz3==*T -;7$x!e!Q}K2XyWO|Ba;oW5Rbn1lb1s$O+XzEn|L~0b^?p|1S!J>(4I&yz^G+G56zxn9HWl-MKo1q$OM -Q)DvxeXgZvi7(Ozcv2~f?cAy3%dE_N;U#l?4{<k?3<R>37ya6qRJ!I2wCybgY~UUXV50|IpUFb-4U2> -VuW9PTpoXNFn>hC~SKxYH{No=zesbXa`Oza!v}+!jyz_as;vwu98rD$s8@Fa<hf*!k<1uaoQNZ+?08+ -w<$>+4CQMeK99msdOaE_o@L+4tDdk!Fo`bTJxTi2LXe@^Kx2}T|2SFXY+MXu|AroeLlCzcSK_2oD-@L -+NS%{G{>RBg*t$i_tis^RR>V|homo`z+z>xk<j3qr}P<Z<Eo7?`0&*qFgl4c|LL6>0(}M2#pYF8<~sf -itp;L)6Uq;ntj%OkK_%13U$SYcW*m$tgFJt7NuKbmiG!d~TFj?*I^)q>R6cUKdc-1U!*4k>eyUK1TII -QRl(PU~wvLZSEVP)Wu6X)!zaP>MHF@>~6h+q6(IKs=&5Yis1%h$092yq;zJm(g!qBK8!7YXdL-6uSrJ -1wW6Q(MSD%;?^^m!t#=oGZv>?QS1TBJoI)BGsXQiRSFE%#-ZCNxT1L3QqGBn(OmGGQvVMY>}PU@=xf% -ns?xRFKj&TJSLTwWVz|JdIDnNsfdv1v7e{m@4VSEjo*x8fGZ%tcjk8x84S2g?PYZz77bDaB+b#v#00b -VWJaZ<c&!0tG3Ad5`+sbaNjVL3g|dE;JEgj))cz%#EV`$TOI0?51?r`@cHV!ZQ2R#h8B!m`69juaq1q -PQ+8lQsF<tm7RD|OMTQsnztp+cOzA}C%A~|(K;-B!e(1d7pi=TT&2H4D^(XKPS0pq%&V(R87mb|eFc^ -dC|8Q(wwFIL=mG>N&lOtrDt@;m6Z`pvCUS6K+d`1!4j(PHQKf5RK58CQ1Eo^f@w#h3WbEn3kk8Q^zDy -C0!jsML5qC;})Kp-BJ+4rpGk%){(&*talxgsLBdPd?`Jr$8~H9sOYeMHy*4i%HJlRH1ndYzF87^gJsK -g-Fd(|LeC1LJF^N&ve~VV)46{|!FJRo{7q7`5><h{pWhA>1SEn3nhG`_Dic0MM{9MDyOL833>H;`=vO -FJGcfNgJ>*P_PoemMW`qIc+GHigQkKuet3L-<;y}pm#XNG%V+&O<y4(1=tpcB<9saSyX8r5SDe%G>GQ -*$R56H@sV)xMe`|;zwp@p=>GV0PFQNhN3!Lo<v+`7Yc0}gBZ&x{am7b#$4{p+mXyE_shK`CDHivBJ&# -|fWqguirl*s_G5v3P*lNoYB720y0RbnQ{|yL`VyE8A^1F$MI}IhrIS*-r5@5H0o0mfXyJ|8@^PH~)^F -i@OF|!<$o|;<#w`N%CjT(GkCHNZ{{|Cp$a37r<&|)rzT`;+lOU07+9rt1Hyu5rWhM96uv02H9ooZ=oT --!9#v`y&`)!!nVbO}{6=)&Elf?c*A->0)X=&In{RYQNC`F#FD5{Yr9>I11`+0asCj^S2O?;lGWbR0=6 -17>v0K@k~9L5N@<BKwNUY0x-A$u{^}RDEHfOaz&T=e;ayR1&3bv5IFC^SfS~C1TP&^<~uHU}Jh@b5nn -dv!j;}T|NVlFE(^JEJp{(+Qt?r)EJU%YljSBU?d&HRCNVh(>p0^Gzxc{j5<NxZN*XS=-tnXf`;Z19K? -fEyS<^L=icUMn_df4J)H<R0_FAK+5@=`g@o8Zm3tDFmPe5tGb|&wkV$wmk(&MzwAm;$e9ckR6?J`)_+ -9e#BMINN0A*<;9cxpyhH@zzSX#0DWj19kcnw=u_p(GO=lzBv$B3_Z{HuOK6oPAfAv<X3xrs3LZdc3?E -n$X8+;{g&)J}~y^WI0)3t@#Pfe@U-7<~e%wgtf^h1{B;pj-)E!40lv;^vA<4|ZoXiewJYo7-LkYvke0 -M8pq!gRzH+tSF2F#3XKH;b4IyET)bU-OD4I-etgk+V;=N$O8$sUl)^XI*`N*7Nctch>yGXy%EUCsI*u -lP5^I`X!riqsT{k1m*e{&$~Q754xG9#^9JO;o9HE3xgNY69Esi-dET2c*sL@CTFeJ8R&Tl+S-Q}oOOW -9F2^n%tFQ9pJ#-vCusfVkeQ%8!x?Dtx$UD>%2z>#UT2Uc=GJk`t}VqZOoc`ju=XQDx@c`jkn8WG4LJy -O|J?!bG7Lzg4cNA9*YL~g_b6p3}Cs)l6&pDOc$5xg7^LX&j0J@VQy+lUQ>H`H}ojwodMo?;xepQ9nHI -<P=mzQ-XYWZKiNL2-_jI&DbE;DX)Ou@vwfqp~<w&XG2CuT(CiJE|RNbNiP&F!vD;>9M0m!Vy!TQ^e|5 -@#IoI6i1+^rSg?e6ERsARaFZOxM<=os!+Sb!k85FIF2jEfd_0)J9VtP$5iqL)=(K=4ou0E5%Oy1TuI3 -2D)PQH>UVI_4L=x5)ihkla)+4|13p(274U$qxqZM{$<PckzICI!`IWsH_pYRg+NMBXm8SqhxpQpIi_H -TNBNi%>k;@Oukx$INsoEVf1s&MzFC3_3+GKk_*x|z+#wMS8;GGYI`v2bdU|xN86*O>`x|+yMj`wXw@k -yX`k;RoW2u0CbtK98~YN=vzc9{BVgd_@o-Zm01NjwggAud;BZ_aI~{^$+;ME&q!Ed@J#X}BoRrlq?*v -Lsu}#~S%LWg?(`EhtykljJtn^jR|(X|rSal8cvQXViRKiBcl(Lzgf~Z=(hOmVn<dc;k4cfk8WTvX}Xn -8f6EVF|$RUvG`w7$a39~5;<A<yHK~)`Ya35yY=9GIeTM44hr6V(QKyD;T<6-=bSZWT}BD{cOo0(?d+2 -9mq_<q(oiWu1;|ta?$aQ;Qw8P#+E_7LtpF%Fs<tn>Squ#{6|DE@vY956hBl~yv?lQa?DV19_WV3!Ig} -4SRH#wx7AH2K!ooHW!(8;}=?V~0a$f@72{jj3lY#W;Zr8buu623Gm3Z2#;|6bNfc$qzKP=9OS`kPWq` -xmNo`^SLHgVzZ6Nuwe1|#$3s49(|49_q2qS{?*BPgsqEfyLHup*BC=IPT8<V!?#mbO}U2!A5(*y4Bg_ -h|kW@k0%ul~ko5el)$fXBI72o?#E*V$-YhMgnWb)Ovk+xdTDBn<%Rem-VquFKbm_Dy>_oFTZ~J?YDoO -b?AIh03#<ASV|Q{^VqpinKIbcqSUy&V|TI~Ma56=SZA^@=sfs<fDU@2HyT?z_@{3s!iQW>Jql>ZTuxu -{V5fsjOG>vBiI4@HtYZs&#%&eV-d4ovU60G(6r7~oxUjdw6U;$O$jQssJ|{PwL+zf3tF*{kdb1KxtWU -pQjZp~Eua#gmwj}sXd_C|U*3d2gq>gmMM#G;K_Vk%_s1IZkb=yUKaHebKoZtkuR0sn1VB<l#A~9@e{_ -G4EK#taEV#g4_bzD0ta(ukq5o+%UzFk+D6G?BZu2jmnB!3jaug`e3Wmpo>Gg4YAbF@E);1X_de?SHu) -SzJwT{#g{ae}LCtNQ2)tA&3zkx3W1e$=&MQ9ofZ_O3;-Yj6nx{oGaX_sr#R?ueXt*Y-@cUbg3<2W$J| -SxUQ8zj<^&Ci~OOzOwC4@Z%~P>$;wwz&{=7w%R(7RO#+k2UkJkyCPTU{NVc|eluWonhW<jm%4i!lgwC -mcW17-mUnlNueST&0C$ZET@~8vWp~@;UPNe#sLH`>hmHN+ZYqqD7qgBXC~H*xO_CJ-Jp>B29CowsszB -?ggy{v2mfN;qz@T6o)myAaeEJ*Z1^Mje>FsjD-#0V?{@~v-{|it{0|XQR000O88%p+8000000ssI200 -0009{>OVaA|NaUukZ1WpZv|Y%g_mX>4;ZUtei%X>?y-E^v7R08mQ<1QY-O00;mZO7>RwCX#E|1pojS4 -FCWm0001RX>c!JX>N37a&BR4FLiWjY;!MPYGHC=V{cz{Wq5QhaCya6+fw635PjEIbeRY2iXu{ZB$cfQ -TP)fb+a-%76i_gh#@6i08r6&pIA5RBBiq>QC7Y)Rsx0;NoYS}I=}xC}zN)fD>B`c~=+&ZVNIywKbEB8 -^Nf?popph?4;CX2wt)%%*Ul>W1Zpg0cT3eY@qiH5-#jnq*DO5#|wW@;$RW;I7qI?Xf#lTLlkY&w0-=T -lp<9}pyS&3OG=}A_(HmX`sC7-47GF>ZaNzcLedGTPR)hm-p`{>NjtA+~k#Oi=(_r8G^RZgn0z;6^x%V -iBMS!HX=bR~ZytCy1f0YV{Q;mYjUU}dwaNm&<*Y-J2kO6(N1Ggi;N0{A6V5yPR%WQ7PASsR_NGK9*x3 -aEubh^RFkaV+)osps`|y~Yy4@<CW#Q4&yJ>*dUP-b9+EvKFyp@<JLpThqb_1UvVEDw&(ILYRg0*>zE^ -2_a_~J!^!j*m?mM>$L|>IA}pXZ=N}^91>xz&XfQi<vLp};h5lD(Oi{?ceg1db*7sgogR}Qc5nij=e6z -9E)B>`W0cFc52dVJ<!r-txl~KFVZe6J`EA*9l$7u6^l7PcHRoUH+^SczQrW_%Tru=))j()j=;G|NA1B -&)R+c5b*2%tgPKQ})4rsFpk>h<XkeUNel=bE-Q-QLr_go`nj`5Ss8kVs7T$e~6yN3G7m8<VlcYsLDP~ -Xm%HmxWcnA)1a38-JQx>>S?fbBR~ZNR{*Do^aWW0>AHNW4PqYi-)|^u|p-z!wos$LHyFm_!s$X_AaT# -)D`;op6fpj!)NddNICA2^vW_N^fX<PT}Z={)|ThpQ67eNi?0(IPv1k$uN!}i%0$8)gT_dr!(vujZ+%N -mvIWvbWBXRfr_IkgIz{R{{o-kSv-u>8{a#R(-C8yj}r=M5+-TfzZ!-KO|Fv3cp8Cz0N7DHI#0k7T}Go -c04rn^eZ&V%FT&xFsl4zC)+cNq^~aN&Bz}L9(#3c<h#)+RU|D!Jj9Mx<)gOlOrB8$KGJGGoU1Ojm9;> -z1(e*{dBIXP6-%sQ5h~4OqM`?mjA6_QuZtHbCjeH7|cnVX!^JENo4kvbu9SHV~q85ciO$Ql)3V&Zsqa -7d(qHqYTsfW$`%7NGEbUaTjIo)j&)w;A>fkMM=1s+c1oE|D&%}P;y?&6g6PCde7(6>xQ5V-1doxCvt3 -duB<k7T!V)ae1>j~#qqQPZWwS*t~p6%Kl>WSKvpy-C|;T5ft<2DXu3Zdiw&M5%Ienp~WM>G+JGfVUe_ -q^$q$-8<;nrn?V*eBA4~)!X}TE8QN?wLbRgcqYv8{dU8F@H-4pyQ^5~zizy%+}0!LF~Hw+l<6h+%da5 -qE&iJ$tugH`_k(cVRs8pL-wri5@Y^J8^1UmK09S*m0=|A8w(;*SMZIr^zspR|Rl?p<VB`WuOXEtat+F -m(r-$W*tAcfQ1&GcKinh><s&QxVaAE6GHLc@4$HZ{C(e=Y7R9#-&Aa5NSV4XJWcCT^{_HlUVh+I;ghK -pCL9AYl8#qRn+LDm8dcPZ9wyM^Q`8GaMFXqx);<V3!RWsTB>`~=uXdsN@i_*!b%$DqdXb2mn}LpXo8z -ua%a@ky%+<mmF%%3YE!Cid-F`vA4gA=@b9#=vACs4+tE7=mDApKS@(-yXLwDO`Ec-QAlCJE*>W`TvZ! -d;1cyg>#~j8(MiTDKJT3W(b17E${`+1Cz*5vs4?INtw4}pL~rPk6WU&7)R01Wd0*TT;MD_%kpx)XW2r -#?`<`L6eA2~M!<>#!{Rymv&*U@e?lVNaEW<in`Gb3;h3<jv$j2>KbGH3@OH7o%VB#tY$R=Q{q9=BrUs -pS-Zt_jZ40oiOn#mV#cp9Sz}&pKUGDBWy;l`}8nZqW@Z%sI+w%7G=U?yJ#?kH3PZ<ASntcnlk9^5w-O -#krb<F*XUHuZcJ#{;=>urw4`v*`<0|XQR000O88%p+8N_aUx)&T$j_X7X`8vp<RaA|NaUukZ1WpZv|Y -%g_mX>4;ZUu<t@E^v8mlEF^nFc60Ceu`1{l2oZB4qPhjN(&T(go*@Ou4&p#Q)?YNvK>%)`W@SGXz2P9 -+wuJK%|DZ6+3jGR?!+g8)NLzN%h(+rghC7Z@GIP-fxWD)g@ZQWjtJX$%iq!Lw8flrUTmR5chn7MOeo> -1Q7|u{BPG}&>}x5pp&iK})anG9#0+%086;(N$J&KQ35K`mo?<4JWf=)~y*6%QJs1LXr=IpO{`##>C23 -g4*pIUkK;k>fz`tECN9--=!S#cqmpgPHhzjo3H-8=ot%1kQ{WE)8zuY{(uHh$KT{Fg_32!kvg5?P{9* -Y$NT3K=y;&lm)chz&&FlP5y%Yel~Ov)wfMB^C(Ou*tvI=&~xB$Zo~hY~v5uE09Vwx~^OSJ8~c;_t_FE -MWNyHd<li^vj?di~=vg2`L{rg50R|B~p+JKJnC;T-6<htU-F_&E&;JJ4@IN4p7;_P~Y`n=7Hn1krNRP -8(;MqtZ#5W3n?#WCZH9G_}fg*Y#{X)Y=w1{`Vz)BAT?(iB_5mbdenn#{y*IQhK5?7nN^e_N^s-^1ik2 -aB^0Gqwd7S57^|tx{+p_@N#oXAGq1gvy{wz&$rEm<`mbhY<1Q=MKTt~p1QY-O00;mZO7>O*azetF0ss -Jk1^@sa0001RX>c!JX>N37a&BR4FLiWjY;!MRaByU4a&s<ld7V^EZ`&{oz3W#H?xn_38(R+pf~CMNJN -35iR0IZN)3#RI5=6O4F8l4H{E_CP>$>G)$KoUT9-kORk$R{#Lv9L!twYP;Yl3I$3gf5%w6@TWp*2O{5 -O@P@h6qQ#cO5)q(-Q+aQn_g@dcBdb(zqcg@13L0gVlDdutBCoNl60Tc{$Ri11T?g9c`WVFPNUOlFXIE -qQ|D$FW`yD>aH3xdt%REk$Iu8D}bb9Kg2=djFlM4ilrw9@^MZkZ9-mSS5c9uNVqHATH`zzp5J)Ss&u9 -WzaNTCpYJt$H693=BpU^qPi=!<IJbjT$dFC4DWwW3r8>DR$GoOYzFx~=hb=9Ey^G=IE<BeC<Tr^r!;{ -y6i!c@JeQn(88#YYwR3~dOH=K<q)0MiqsJ8%TuoYrU*cj8m3Lacfr(ImZ4<`7PezmsIISw=W-rK-574 -i$v<uC)uO}RI25400`I2q95fm+g@awyQ_n-mUxt)^!@B$G;plaMme9Pr^a9@{(;EPPc*y`#*l>vuPee -hNgAQH-(qjW~o#>>EG!+l0t0L}pX#(F-D)yO=dRRKA4Gjs7&cyFNQ!%n4$3Jm?uhJ1Zs*N}U7a6AS(S -Oof6tJDH6NE1_AS+v+a5Q1fjY9jcvDIrHo*u)j}SsjI{4C^Y9ibMT&{3SAK{Bg=v~$_<Sf?a2aUBKT5 -!Z+V%fmG*VNktw#R-CGQkPc^fws`TUM+uOTA)3a=Rc`?JSf0RG#e;4ubAjnYW9T%V#OX@K5)iA#GD6e -2-#~xp(v$o%#@sAvY!0o43D2%n&hnv;u-OWD0J+%qk8}lSv98&UmSbAG(n&j9LBRpZ*BK~@^I+Kmz13 -X3n6|L28P)h>@6aWAK2ml*O_EzL$jcert003ME0012T003}la4%nJZggdGZeeUMb#!TLb1!3WZE#_9E -^v8WRojl+HV}Q+R}8cdmH|iJW}60eu?14>rf^}{i**1u2m&oFjU-|zQY9(7LYjZ?kd%ChUrdUe%Q<sq -7{~F}c4Y~+W)=!wmZ%MIIV@3Hc<ODfBpm2~D`|kq0$RarsdN(++*r-`opncP9LG__n^tKHLRA%))woq -=T$$cPQI;_wvJCFwOI)GNT4w94<3&7!*w{kweb&BK#%*`Y^}}YjjlV`w<eZ`=tHFCpwk!WF$uh|r%(5 -w6E3kx`nam24OySM%uvbbfBA}nueOS2PkWprg0Js6E{$UIF`19>gZpSOBG(smkgGF?*(P%p@;gjyrf5 -U%sY%MIkt4FPsKKpN(F~PFbs)3fbX?8$aD4lj%5Xiffm=j|j%Wd}bdGqwR-fmaHYzTIJ;Ne}8mbk?Ns -1hD5mo}u}%HjT>gBN#eVt@?N;Qc|NA<z~|C4@RsWg5Zdt2qOxt!>R>KCif~yM3CgX5RKKn-h|G+X*rM -_3qsbX&~>66Gx`s-QB*wy}b+mp9IUXAZc*}WhZkd5~nS4(>k?v2v(hxmQylx{$csIlbCn#mzUlwh||= -n69pg<Xgg9*50wITWc`3<p&2*iW3vrafL)CNG*Emtq64KNXL4d;kHjw{GA_B|UOCKKohU=<+hps_$IW -WB*~QZ{FJ(a*R3=p|O3(hx?Kau-!)Cqu4F84QXgNLGae=O4!MZe-*`zF{sj=?s=^CBoLK$>tL1e<<!i -jQVXJF=Ja09y!&+Fy-&jncCAgB`Z8uM2;bV8zLdoH-`XF!cgu#JTyIuf8zaGWa`6FoOZ>2*PQIB+R9j -yVtXf`kxQiGn)vG#w~%$c=nEl52KAcp1UITp3@p;mPnJex$>r{~@d|_E>8Yu%=3D!U#u_>NWkq_UeFF -_E*+P8GmzezhCL(H`s9@JPkt^x=dZ5u}$LXWsi<vs6THgm;9Ag=qIVI5yD6dI&N4WSmBZ&3!0>^EgH0 -}V3vg%4O(}>_elP7qLvfS)J>DY42ww$p|>akO)ATC-xawxC2<#MQ8!$Y(Vo!^qwXSCZepiG<sod+_HW --WUT7v$h?4t(>gNg#&M%XY_T=l!%wg)^{<65f7?#<AX_HJ=%Re3-x1T1{X~0k-)2D|5=nfx{vYxy(>= -i@ylpqZN8V(1Xfl<VbF5cv-aF55uQ$Qm57Pnqn?o~LNifb(0lIe<SZ!rGuxj%9mut($J`;jvvN}N6+5 -9YpsxK=W3qv3&}0E8|bGj@8^);KvOG5L(AZgM1-SK$60;#~09dnC=d7s!8<mc;QtP)h>@6aWAK2ml*O -_ExsEiLrAA0003M001cf003}la4%nJZggdGZeeUMb#!TLb1!3WZE#_9X<}(?X>@sCbYW+6E^v9ZSZ#0 -HHW2>qUvX1DOhO$cPTRCK;11g`3<ZX@*ouAe43&{+n~fw2B4x)2^51ty>V>qOw{^=0N2bV!ch5a{JUR -%1UwO%Era7=OgRQKuVJq|+KK=3uUR}I~pJh=oEv`f^^bS6=m5N6}5R68msAR37=A&gT3(&htlq+aQe- -lcN;bWzRELlE=&rOx{k)2tIDo!@M%w!!`EWKtcTo`La?pB8*z`svBy_V%)yjBP@Hbc0*eMnoYa-Pt_c -Ca!loRJmzCQ@fal$zI7&G9oSS-}rSH|~Z7OOq;RdMWDy5u(v3k?JO4b-GT_0GOfwF&QIr9@aq^zlf6X -?`-(QfdE&HGQNZsIT7VjCR!$?%%l$8(WxbBj`oZpj^jlHr|&`OdTOjWfsbXrgGO;^D$o-2n!{4mN`u} -?D4XI6!D2HPooVV4f*}4XMHv>X3K3`Q88M$;ETYc3#Pc;I7pJtfF@fSa$1jU%ON&m|=)6ZpY(~w($g; -Y$6YU!MGmPWlSBaJsqNIN;)eXxH3L=^X@v4?hrNXFRNVc_><D?Mz2@Og#2J=i%(J-CBxWbw9e#r9orz -lenTMlcsLB;1=wo@R9R9ui=^9(7)uoABw703arwb}zRITD~*$Ura#oCsH_<t?i-b((rPgS+t?U8A3by -N6@F2h`qD+~7aC5gA%>wKFzgq-%5#QidVNfn7gi4@Sv?>op}{F0OfJSlTEpizJBQgGLH>aK&LIWk%Ae -c_BCZ)*yrerl7&(Oq+sZT4aE(WgHDmsYnP-_88qYC@>y-2*K@La(frV#2eG04L1d2p7SzntxAFjri;j -1Nc<TEAh@qXC-R<FhV={c#B;?5p`BPXi~^=~37N>s?{zEN@Q3e?DTSUEZtB=qU3Row7OdRmqHJ!Snkv -UOuo+`QZs|!BuezsZNlKWRZ&)8|EvSfw0n*lGm9rjZGm3U=)W!MaRp7GFznPr5lg?qg=ExY-O^Nb{LM -ja&3aFjZyig97kvv77-=y4Bc96>s2o-`Aodk%(W!lt=tJoYOuiw3+6w+Kh!!EU!O`efnQ&}n$eC<g7W -Y1K)#&vtGb)}|fXWQ*IwueG2>(yDtH)j>E6n&hYqhV(!_ayBpIeY4vc51ijcj@BL1`LIJ8;Hxdmskyg -o41$A<*VRs>WSP+A!Zd(6?#!S58y?wg#OVWM^D0-JO;q?M}%{Jk8mE7%6TW1ULX$4Go|uo@{m*>5(gZ -U(eowoX7W@?O!oEguOoA`+^o3nO3pJ1&9@en*q(LdX;-a-XnI&IkMs)ns0`C$zE_{d`?^~k+u@OV8yz -Y7Pp;+srov`7VR<gMJadryr)l52&U>0|Gj?Qr+EG|a4Fg1PS8K!Xvcwjc1{CMi#wf1CP6DdQshgZH>< -l^&D<ba*9ByP@5sF`6FdZ~<H6$R*G81S+N@`G3T6$bwRYcgSaihgw^icFIZmJBkGwfj_$4BxY#zu$K? -@Vx`U?;f}Z#(w(fbV+YLF3*Xpy!#IiFRrP?_qL4HT8t;g!%cRZ4$eIN!NV%>S>pT`)i{kDe2r7>|F&f -E;*-uiD_ehuM!dnl25Vkd++0~M}Du5Zu+2rtr^X8gy6rQ9b9h0KDoQz`2b^Rs*l`(La#tAgIj;cyW4i -&UC?qw6se}7OB~NEGY|S~FIf*~oi~*XcnFGJiAPX|(utSJHg)kn`$t<Ruz$w$4G*i{4KO!TN*&Iyd+Z -2P6;H)d;CoRTkT2~U^(D5VpJJV5#Xta~;L@?zx3jp7>7?nF5xjgEP^%rhya>j9cyNHsj^Q)T>$cvCJg -3u-DTO_{>E>H&K{hq~_|u2jHK3z++S<HxyzHrmoorysN(~#9i=o%*oF5OSd|0+}ZtSH5a+%^4#&!Wcq -Gy5)TerRKA?ZG}r{Hh4!O^h6_KdLFIOKrF|J$t*G46zA3w|f2=^#C)+WS?|(XUtj`a*G-(^Rqjy!IjK -K)t`*wnf_YV0Lf0BU<}P)~*~>G<(Y7+U=*3_7@v-rAJ&M`LKpXrd3U=ps$Pl!olC3;qD0X4@T#gA^*) -GS2O?X_+UEeWkw%|uX-0}&W}d!gyFzEb_6}_g!^OGp%V^oGw1pLHUEBt_kN)B?R^H}Pjc%)yRD^uBhu -SF`Ug-;0|XQR000O88%p+8Y!f}Mm;e9(@&Et;9{>OVaA|NaUukZ1WpZv|Y%g_mX>4;ZWMOn=bZKp6E^ -v8Wj=>IsFc3uV`xTR(AklsRi5&e6Qem}?(2}xB_<PGrJh-RH?Aw_&##~dz>N#Q#GgcR6fh6>v`zORR1 -}BWdNSN4?F@`8ibIPKd-6f)d@8xQ6TNjpYEPn39yI5`Pa)S`%gegVwhc2M18s`?bl*WcoMiX%P1>0R% -b*oy5M|hV{{|Ie43N*VWg)_@5$0N1<-qHt9O9KQH0000802@m7R?xP^j!Xpr04ojv03rYY0B~t=FJEb -HbY*gGVQepTbZKmJFJxtKa%E#-bZKvHE^v9RSKDqIHxPZ_uNZ6|Di!h?=%Y{tFk-hgkj6pcA}xYoLG6 -wtHWaxfxpD+U|K1sLFO)15El|HmBIkN$&J3OBd3FO^Q@0AiZ-fWAZ4_=%dk5YaCH0y<0kv3?1PZr@Ct -)=mI}l6LdZ@9nSP3tUc14zx!HjGe>p_|Ingsiwy<WDmW($7bu<h>dM(=0v(6AAqX7GsL{QU!c?i-xJZ -<>y?sMg4)D0ir9V~a*qUj=(8c4!^R^wt_-9gYh9aane9WeLJT)mlq=_J;tk;N8RH-5fkR%Dxf4+7Kqv -ffidVvh4Qm{fE0ZH;?xZ@5*04{#??ppYDH$1?0)i90-7{Qo=cSFPqyDoli0UN%uLOXFz`q36er-tfW+ -gD&59Bbx_S27qb7(Xi6u01)qB8f4q7PZzH^LuRX49aFNxxg4Dt!_}HRzVvX~N<mb-H44k)LW<i1?#I> ->ed4Rl^=q^`MAww`{g?L1Lf!fSLYCp=%hYEg<1^m**KI$YQ?0mSN0wu&>BPene3<6_sd~(rUo<-}tH2 -<9ypLD3qhU8~Mrn4@=coKh2gGp56UOLw<Ly0G&?%85b$3Uoh2(3d9;2Nx?P--7Ks}4j#3r`zK9rq-af -{oBM<xetTR@8);m`MoNSJuJG*uafJuCux5Sy-&mzYS-TJdlV=hn6rYQUd4G69dHwT0IIbf%t!dHw)b> -weysA*_kP07?YC*c?EZIBAM1g0{g&_Ak|Nt!iA|u&OE12ZbYkmexYVF5KTi9X7OlS4vQ_Vm01dPKGUp -k*^6Cy+>z(S7D=>;?Oy5JCFvZ;5diGViFG9Z_mO>;X1CD^g)KHpRAJPgurl7SDQIevvv(^LzO`7clvr -P)bO42jl5(DU?jq-DbNqs;p`N9EGb91{O*+rXu3BA1Gt%#iEKO=aiN{V$b&BV};Al2S1Y+vhZe=}f_H -nQu*(B1r!O{{@Cr}pfabsFl(>d|CGTcrSoFnj1S6IA2^hHRnr9O6{M=ys(`&XzyOD}gL=a0iAtv!)Sv -ubfvs?jMK?$;X458i>bp($}DX&3XN=|J&s&5p*A)Z-ZWAfzKj@`l#ZjFG|Gcf<A^+>qfl!S1<!G`)ai -@h?u?o52{nFJ3m#aR0_^w>0>!cpd;>b;FOR+ZL{_DB-J4bMc&-IE4AfdpqS!+fbp-w9eR>gXlf~1l?| -z6hCFdPQ9h~MNEfk6HuaB?U3INg27+43PQ!%`{<Q~`0YfqP1l5};{JhJx~g>nDasHUYj(0GMZ|hZZi= -1)SvTHpslDu$ad_GwMPnII-fjVom^x!F6oFpvLkm#hVuib!^qH37a?!U*x+h~W{9KxxJcp+6dePl<df -h1O=6XqY^h#R5=OOb+q#aH5{Q3M_>G1q~IONmWsB*NYJ4dslL*7>Ke29AyH9=irOmm4Fv6H+3D(bj37 -Wt7PwJN9C<$rX=`wQ}qlBf&O{4AOb(9r7BygOan@Vk-NpN}D33_fB1Ndh;}7%Dxlt3-%>Js<v+>9o~P -Z2w`}eip>mVAh;4<q&2Kks}VAo)rUp{}H!wy#Hg+fng`n-i|EbpqI>?mO79Kw(-7k^Xu!i^qY2BP>k2 -jz7f|{p6g)BT|XaQg7xL7Dful9dGV)_dJKk#hwvpWry_ox?1XA@nhHQTnkBMKrlVF*-=C@237LYS^fc -&AdtQfm8YW0GQBS&=ek7Zxe_eF-7-yCZrq2J5F}&7}-$DH4<-=@o;Tc2^vFfYB9je6-)9i0hO9KQH00 -00802@m7Rwj=1UF`z^0EP?z04V?f0B~t=FJEbHbY*gGVQepTbZKmJFJx(QWn*+-b#iQ9Xk~10WpZ;aa -Cx;>O^>8D5WV-Wuox);4M92VsU=n$ZM4!zQF2JKm(>cnp%|P2o7kp1t5*N_R2eXa?w(bYgbQ|2pU+j# -)LM1Se(8mLW}@qrw(OVQ3MF~F+tu{37kyR;X+fhb>r@4;$tt0tw8fy?+3E*fHsT0RvQ{bk(S811w{AJ -gK9+_SuQ+Xme3{+-gzH<XgB7TWam}pRbK4YFQ7*R(j-}Vc<!-mDpk_<@1vf<x{hK%67n4v!4H{$#@uI -a4E0Vl}Ju_A(?7O%0-tQPbQ53yb@(37+FY3%H++s>h!=D36JCK%)5bz95oaquMJMvak+(Mi%_P|8Vgm -j{m*+yU`X7Y9zo}FpvHFv48M;5VnZ1h}f{!HHte*E;=iO8oB(pbK(F%#i2C1X+B5RW;F&X>pY<=y!bW -wp{Bx3SmU)Itsk|1=a11mRYxR9z=*Au8`GaVu!Ql5Nm+_cLBc_gbR9%A?_?*{{m+0A{@JK~~!ooXMQ5 -fyI~`L#^;y^3!M}{~+&m&Sp4_JEgxYk*`vYLcKh~2D#%SnPYet_q*VM{6ybG*&j;C*c&8MSK2|#(B^v -Zuz3oogyn}8VxtCK0*&A@S$>B0p-(Se+77+t0Sg4ql5{z3L^_`kkLS4gZ+d`9DY=m%(n&$AG{&OU-Z4 -|k!h~nS{Dhf*#zFg8Nl2Y`Aq+B6acThCqU2?R#BornMWqiM+hupFP{f~XGqlCwSxx{q#etVEc%*2LyX -+b4EOBre4A4RBtjBe-?Z?1Lh+pc?3XFvc3Gj$rt7OWGG0tq@;t?*WQE-gO2ivTt--RZXldz2%Y%w>+X -0YjbU>}rbAK(A#tdJ#6z$8FLlvxWb673m=VZ5rCXNWAE-#ZwuQhH!dHIgSR75bRyRckQ4l9d^W+Sykd -d*?c3!m<vyG#h6#T<pY=oaM$=blu=uZK{9~U!+W-4}B5_$m>ZBZN;Rbk4M-zH~`2gt&BZM49+d?(Gua -Rl>BzI!rYgZ+~$vG;gY7h(NXz=$Yv|0sXMNlV5Q{`0sG<=)in{W&cH$GkfL(MR9S#67Ig!JhP$qqb7$ -_Jr)p4m7zCn6eKOg;3PmHzh7?OKF}&$<@K*gsNlqsf_F90^9p51~+nJdW3YjS&)_c504{;mK=St|fY` -Un|>hxgrJj{T83eqbrpKtD0*GkuioZsMym07ahuCAVum;#BXhjhaa?&6<W5dIRz;{Oui7O$@PuOWArj -&9&N-wpp&0pSeL&`%e`N>;cZwtTGA3qpqT!u3E+4(sUb6)ySNySYUF6G*}TR!o6%_xtm&5&IiZO9KQH -0000802@m7RxA2Smkt8}07eJ^03QGV0B~t=FJEbHbY*gGVQepTbZKmJFJ)(EUu<b^Yc6nkomEY5+b|5 -h`&SU|p*HFmYkOLO4H$+F7*KRT+g(~@f?~^w8bvZBIa&JaN6H_GhooDZLo7?=6Z!Z^%T;Zx2je2yuB_ --+ZtJ4TnicqME%h9_?HlQQ20v;qjpiz9O=?-^OlmJI?&Zo9oQ_@Z<D?g?=EaiFh0CCE!ZO-B<lK0vT) -vjpH(Uw5?lF=G@MjyXF&Nh95;1mGSvcLjGi}&hnHg7EltvL_Tq(xj6FddOSj^{4Nxj6V{DM&!4D$_da -dy<CPYg|_Q52P;0ydawz7mP$o3OY7=WPm;&-A=%0pmD4zZ$(3m=K3sG=!D#yyTw4nyW^DH+YaE=!8Il -urio!f!DR#V&(zDF9bMpcFoLr=^F|PxPy8*XI41V*h08dhenkM@j%t+f~@iYaBDn<xDilrt&OLO(9&p -Ga3x<lpP48)ok$N01m{r7suEUc56aACk&p7S!Z%jqBgd$c`03Y|$s?b<e3*R9r)O~n@dW>Reo{Dtct| -tu$b6+L2bk?O_=FqNF~>K?ETJ-X#APLw2%EJv&!X@<ayMKpN#b}}PM3`n8&w!3bfn~IFb?<>J<59pQV -*DIfctm|WxD&Gjnv8DmW{7W2TxfI9@0@dNpG0$;P-0LpYGS^)@X5@?q1<<qx-IfCRq|xAc0=~;vU0CD -T&`WL2wEfw6GiLumluS9tEfe+!UzXOK^qI+)CrxyUtS}r6Qwzuh09ez1>plR8p6Lbfhu=d4GM!?!P}= -XB3PcPody=k+yi+Oxj`bf5>By%MN5K-1|`W!rR5%J0_*kr_^sKXmso@=*yJ0q<uraPtJiO_{n8}v)Iq -3Q6=^;n6kv?c68AuocNAo9u(3R2(d2$)-b$>f=EY0YGF#)NTuMpalRK56}gfYH?V?Ob{xy&-l3%2Rrq -KG-OvP{MxB<A4fAAA%>f|C=_hoVjA$FR1xe%3^iR^j%J9V*x5)^6uxWvXa(mWz#XB(mmB9PP3xV_^a- -*?wXsVFa+Xl+3^W@+-`2$c(0|XQR000O88%p+8#v9NV4gvrGkput$9{>OVaA|NaUukZ1WpZv|Y%g_mX ->4;ZWo~0{WNB_^E^v8`l;3OHFc8Pz{Z}07i?t=DNgxzM_RuaJgRBi*_vDx$+j1i6NJf$g`R{j<9XDYy -Oi%XR=YD;4wm8&ETgX+xa}$X6tx`Fw`1wuuPv&HTQmX^lQ!V5UI`c{xJA(J7#+cyo_1Ev%n-XtHvXkX -z1jgz#g#{!5;0fD;5z^Z~@6Qh-AdM}@4}^|x`6u%Zn9K)>?c=hC#u*>xRu^0~#LcE1G@A|*pA~1*;fl -zuF1WU08U)Lir`PX4Uw&-gmMDwnQLYZPsCcL|f*DZXBwnN&^Ce8in`4xIrGy4SQ1B91W7QUGV4bjFmc -`&jrZE2IbdG%+gpj8_&p&{*UgvR_Rw|7qY!0l#d)J!hwmLz<Ek1zVbKtVAANV}atg14Gc@S?GBieCWY -hH4UEzWR=oZ%EI@xejWT!s{sg!Repm7HNSKA9_?sl%wR0YZXb8Si#Sl;CEHjAh!Iqp<rBBj_jKj^?(} -(t}BbwHyI)8g-(avr`{*2P<w3<X#OoU@5f0QI9x~kf;nZu8s9_J)O_`Hl53v+h*!Y*f1j-NoW#J)2nt -JncT+{T<-;B<c<K71zg;3WH{6LK6KzegP5kWxBx@=70ry{{)_ZM!hlp3UX<ilRIlx#Bcq*GO>IJ&-1i -a@W^y429g_97lsAAr!GA0V%8LIGhu|7B?5qd6Z-)kd0Z>Z=1QY-O00;mZO7>PfWM%2m1ONc|3jhEj00 -01RX>c!JX>N37a&BR4FLiWjY;!MVZgg^aaBpdDbaO6nd7W0@Z`(Eye%D`d&>ms~iu}}v2Izpa3)TW%8 -Z0T&Aq!Mmq9S$@DUg&MBgp^0?@0Mq>~-A?1XifK@4mbH?r7EZ#(Gj-T5nA25)}{3=E*gKSMBD%l}l=C -I`XSt=?5B*KPu-l`qX=6v}luP(yKl%lm;};^0HNVCzM{h@bfV{j^^^xbiMFv+uIM9zkIsAPLkr{%f-9 -TH|K9ZUKE$-zg=9@8@fvfpA;x*79MMUege~cA*}-=fY%1WzZv`dBR2Vw7fMIx`$W}iK4$@{5N&IgvMS -`GmzrH1SUsg_Mrke|W%?Y={*ij1pXT3;(vx0T@1~pM+E@xl#D!ZoDetYRhSE<CFtcN9BHVqFB$ceGSX -$Bd(oTeZaA%vI-Ej-=oVWM)Aa-fAoYLvf2<u~(X_~&1+FQ}m2oT628kx2tezoe6fp>Wl9Nq)ZSXIJe# -Vw{rIQ&)QBq|G-9Tx&IrDc`VTUm<1NisDl=LYElmaxjP+JaoJ&TrmlEW{iNX)@}D)~mjibhYvg(#^;> -QdtU$5+$dHGodT$jPn5x=&<QPXTh){@Kf4(kd;+NU|=1&p{|i8(_N8Qodn1ZYkH7A((B9u++*4|hHD} -hN_dGN%AtQs$M|U5LREmFPL_?(%5|ZLOJOzhh+$zFkSb***yB8K^@hWv^49b=p!cmPWdLYo+h??tq|I -`yW$a8H(;e)~CJ~x3_R$3h#GrDp7B+<D=j*12Z!Wg;m9#crTF7v+)$Q&1@0TAge?5yObTpS?E$D^$OI -9>rF=>wNN~?Omj+xU9mu9IzGTnmJLba@PLG|DVD`}iTZWwQgKlP6BRVxLQ;-sX;``(?+W)I3Y!<?7Lt -Y7tF2A^4!(d^Z$*RP{utA#?@0J<AkJ&uK@K_kz06|!L0{h-|5g;CYmT5IMldb2VEl}I$EJqi)o`G!tT -!-6{r@{*80QrW??gAT3d>cxh)t4+i>xK^SRI_%3Zv(s^qA-`fSoi8|QDOl$P5-gZm0lY~VU`+I8fNxm -GhHCY|wKane2{Q&H7+#GD#BtcugwzXVjqdQAuVpb;TG&+)c^iPgq4YZR*`>5ylO$X8DTVc(TW=xMNBE -dH$#DUOxejl#1N><mv7cy6gck*<-hH{t|G?VPqLY|(#lvmz3cI%)yg-N65=YB+^1xb=BOqs5E9+SMVZ -p@a`383o!^Ux7mPK60Th_Q2x)MU1;9vyL(V9uhFnkB3(`oMdR{6>3;$$B?3xWkWpn*k*c?5K?R#R@um -PEinwl84L_HGY;$r-Tg!F91UjpopPv8@{T#LGWlHmYnUYpCg-*T`_sZLgzyDP(jU1!+w74vrBzFyN)S -jwK&);kd~Go#}VI9GKLqm50HP5y*~O9fUkI+b1zSJ1`iBd|jNi&_6pFwE6Y4`%2q6A4M*$JaO3hlxnQ -BbjKjy-5hoL^!;5C*41SCOmSDGKeS**r~kcUc9%<Bn47(VDzNsj310MmBj&Bd=9m&bVs#$d4<Y(!6Uw -GMYPOyCZG>2}|271`J8(EEuLC7<;2j<OOaJQu7v)Zjn9Y3rv4o4iG(%hI6OXJA-kDCKOSo4YenGdmZ< -GBX$=^^*0|XQR000O88%p+8l?9u(>jwY;0u%rMApigXaA|NaUukZ1WpZv|Y%g_mX>4;ZW@&6?b9r-gW -o<5Sd6iggkJ~m9{_bDFb3a6GwaRAOw7ms<xHe6C!4=tJvq1s`fj~)=&0U&QNou_=?#JIVq~83pTht$H -OPU!D=jC~ZlAFd@&uYElzFf~_yfkk7mo?lE4=mS}+4NU#=VrAv8&(?a#e-L}VBMqc&W3Bg5;jVCv1w| -lL@)D>Z$xz?=z`nb8$9Xcc8%1lUg{^kOWDs-L*(sM%6=7ESniEY*>BSMlzq_B=#-V*`B~I&WRvCh0-o -B;3(ZUEcfB<$yoEjIO_TH53!7I$aopK*>GN7Xh-zv@Vi#6(m9<_fmz8FNX!N#L!sis6yp`4CIveTAUZ -XY^an7CmQ_N<wO4O`ei}Eg7F<a~`p}&{#&o0>6zgS_6x|}h5zG81{wiT>0`k7~IelHk@(>vx(G{XE^F -j3c{^b!x@6Eih#O2-;&O5t2eBD%A-70;Anx2^MxJJ)Um9%5@)0e%Eqm9(&B>@Eu`vZj1zjpClR!In!l --%9=M#he+-v>~S)_ueK3E6ouc0Uzdz=stZA`_^i9V_WQ=ZeU?C)>tMTFI)(~B0g`dxR<7NY{}jkEyBI -+nktBd*guwo#JC9D?CmM>fC}j>juLVIuR_cq9ZVreTPr;;V7u6{vb9!d&szAG?I}j{-R6=7Md5tkbTt -3I5vAk`G0~NxYDUbMH743*QX^;;{vdlnL{O3%Vb$)0G1RtzgKJ?$P<QmrTw58om40nn&(8kCYQ<OCkv -7Wx*uN0mu5uCFX(4y<Ka>^^rD#06djHy5V^3S`^81D>CyoTVhvTXU+@6qt*0J4A4Ke2>)o^exrR$IR) -qh7nkG1>KNMnYVY|sqFf$G-4pUHNo?o-sewitS@?~8zkv)R87Adb43SGT-G;pBeP<OFqNJE!dHukW_p -uG}R-TIlWp%RZ0zMui@~zr_8_=kx368E0hjOvyVmX>p6@WQ_sZP<f$_IK!$zglYIix57?iFWtcN2)>S -$R&XyW<^&2|s2xKE(tV*Ft}D_kL}&=WCtX$2-NlY2$P7{Fc8{oWz>j0nlYZ5$7I%v31jZB;GIV;d+jB -s64E_PhVAUEGY|ttJ;PC5v!MKOsE;>ewD(mAE0RkOyf?ATHH~{!)-(|>iI^LCbd9pS}5mXciVvs7(m8 -Zm9Ta(y4LptW;?LPhS&I0Ad>M1t5R(Vt@@mMmJLp_%GQ77-DP*tZnJgA|n)PZD_$!gWQb+X^w*iG$rx -=eZ*#7diF0SKOb#cq1~v|JJfT@!r<2q2h5$#dwWK!-+2$f-^+<jh#PB4;}6087tuE5IM6$O8>yx8WB{ -2dyPBL*(Y=AwefE7LlWuBT*;k*~Lq8w6h9(`wM`HvhGIQju+17J<#V!bEy3M=yncbW86}eHxh*#$o-9 -yK82A`V6;Kr0(<Q<$N0($u_3~sHdGFc7yN<HhP9e-9+LqC5hV1O$O2d#t@<eUqqGOQ;v+9lS*z>250s -=4EEmjZ_WRZQx1YfMR*J6m10NyJjvjxM7?iedzlp-Mu{Q(&1cf6Q45XS;omCMCl)<8aA|5C+Oc5lTP3 -W4YgOTO?txh<(Q(is+&-4j&9VH{4@0WRj&D{m|1t+34w75s;!ETJGGi3#cQfhcEy<p0i#)TvoyqY-Da -Rse1>jxirMc#y&r!h`G%#Ws;M;U6$EvGB3A9+GmJRx#=EF2adGPE`JZj#wcw)VcceEz&>SBUNoMXNJo -SI;E~PF%da__4D@y#Tf=IT@h|qX+B1uyFC>{D)woM??g09(@X%iGaHi=vuc%^ud-cFEM#?TjjCdxN6q -C5I$%YB?7Tp%iBA((Wd#sI^W)JA9jD9zqt7JyO-bp@Z&$D7R^*S%~Cj)tVHtSd{R-JAA?KZptiGH&}9 -<OFj=`a=*Fa9d2wj%`^91cs!B|XGnk2KCfiRybX`R?BC3R}gu=MWuYdV?&Hfkvzq)??(@lTz`qQi5CR -0tEx`@AChgtT-^hMlysPMb6ICeNd?g<5;Ivoni&>|qwLX^CXm~922*`(<QtaB7Y+H7`U>u2gI54E*it -%3iorujtePMRx0O*97pBhmvq0L^$L>Bg>LbK+Xx_ypSUo)BfkzDKtQlHH0pD?Dur$Wf84L$|6n%q80B -v&PDMBw~dPgc&|ocy>UvCr04o*%YY`u$k1=5gStg^<5~I#VOn4@u}OXn}QuS8Yi*{X_1Y)sXdv0z+i} -j3C(_(v?@uY9C)Zdp$vzhA!qX*m<aI0OzWmYE&kGJcZ4Q7lz+y>;q*#{pzw?ir8wpp)%rL}JGv9usK7 -Kw_#0cx(sb%@mQ}lSob1AUf;y!0kSy0MytfER{qXMXr!(hw@ZPN{=__T5-odPAwm9Zoj((y+KYtnEgp -Oz_%hS#y8GwDu)!iXug>?lTO}lp|G&y0VkT^F4W-;N3FkfM2#+aP!K}lS+ju2GSqMh}<gGo2&_1OS9( -0hafW(aRXKI2dTd&+SCW%BkQv=qlFenS<O_IA&Q^ZiKCp#%?h+>1|r>NUWzgEK?H#Frh9d5Yi5sj11k -kz`+I(OVpf@^9>%B$1@^?EEmtu;%_c&mkpU&5>A;KLC01wi_Hy<+an^@8;mwH_J&P2QzzFpS&yTBJ^Y -wo{H)TMTGYMP)h>@6aWAK2ml*O_Ew|SPc2vh007Ja001BW003}la4%nJZggdGZeeUMb#!TLb1!CTY-M -zLaAk8YaCwbVQES355Pr|EIPzqf3(QAh12-xP!woIlP^3mpHIODHNvG?t-_=@d=Yz{ja+mME`@Z8Sr9 --KN|H%YMofw;PFO6n|Qc6f-O$zuY^$uj38S5d+GbPSHnao%$wHH=%#d0r|W2tnT8tXD8y*PS8K1X5r8 -i!v|IGK&#Ch!Q99rlWn=Xvjvp7ksGh4Z!xjIkvGJCu2D*}CY_E>`(<K?CwNzg0y5PgQy>XtxfVZ`F7s ->?%w-CIT`azu%Tv$PDHEu^EtPF#VssT~WEKZ*I}$VEQr|e}oMNENIJtJ7|v(6YZv$XibX{vK0wP7jwJ -W%Wn}UxBwl^Q_%-h7Qp=ztc_9qY8aGGh0m>q$mX~s39L%!3JHM2#%L$E!ip_$j5VA&q2y%c4wW3Z0w} -!RhEuCx@vvmd9E9xzCkzsoFsb3%b)}>{_9BHe;vrW~kY7+s0|XQR000O88%p+86k2`I1qA>ADGUGr8~ -^|SaA|NaUukZ1WpZv|Y%g_mX>4;ZXKZO=V=i!ctybS}+cpq>_g`^P2Ur3W+Hw}8&5!|WniT<zWN6yH6 -oWxYlud*pHIhoEm;LQK{;;DYN`L{&gCkLQ-yM(leLUWFN?TB7#>0~t%&gI>1v_+HZXqt;be1bgMGjy4 -PO#Z*R<j1Sf|u3io@s+0H^yr8NHaM4^<e)47ymq)0sbXlnC-PR!3&}n1g{*FhHE7m@CKx^&>I)so07! -)Ywtc8b5kkV;3LLHm}v{#4>M`@M&=`wS9b7+<}KBOD~ez(la@LgP}6vE56X}T95?cAv;^G1Up==BD3s -hnLyct`?2bwZDU(m@HGwNTH$a6^Aeb>A_#G2NM6(J?2BlVaOuGHI+_=C5zU~kmgHX%1gNxJ~Rs)v^&v -2c}n(7*{N{yR}V4a}0QM!dz)xBV6ad~HLXU-OjEw{VA#O&KeH`tw$iz@yvg(??K)fDw|d0aL>H_KwVt -UlDs538bSj_cDUD~i==MT_#ZSgd)u*oPwB@NQk4o*b=<_s2dS_5k)FIplJF4#@+T$EzgdGinFdGk(qL -;ql{E_M7pE!1<`=X>xJ9`F#Ctv%dOxvH5=a<@W04I>`>s82yDm7SBa`j4+kL^TT~5Q1rv|jLq+l6OzD --6)8?f+uY>vxQFLy5z`57(~vs*yJDS%^f!y3WpCM~)=KAaa~mJNQ_+XT>})z;PoIgLJtOHo<${)iL5f -z`uC#`G2bmE<UOkrh9ut0(eUYKBk?(gZL`kc=|Hi&ZqGa~6Nusm`i*X6B{0CpD>3)l(h}aj%(A2GG$S -q_q<}C)O@Yg^sRL5j`{cXL@azMrbHJ*OqLj-E6?C2IbNe7cda@9b?1(UR8zVXmGcTR!0ArT}pYD6u(1 -(L*lI-nuNJFT{wwn<ch2Rgt5!=xk%i1j#v%R7{sTKTsJrSF`QG<@4@2CBCa?P15O9r)H%y>_^jQy|2o -mF@jjeWgPS#LpX-yXk1fuxnqGX_~KFW}kER1sa($93S1&<{!8D?a-D=;C7jjbBp%eSl4Q}dCjnZEO!N ->xOdm=zBn}&WP}hdqqiF30?RSEmpqp773QzVNw^xOe2HepRq(Nr)u!4}z3IHmsOzIbJO_ySfZ9H+V1d -8Kfco7bdrFS-5sx9>yByEbT@4jWN65L$ccdCmgO1)v%_>#1G@+*A97T0P1e_fT!Q)*+_SvH0wii@mPw -gw^GR2O?+YZx{hDpPbS>Y@YB0?GhmjrJ-?3#A)KG*`7_2C9_%sQLBLl1y|eu8jkt;i`HRWOf2us8k%` -woemzDO_4vbje{=RW>ChdE-*v!}4f<m7*V{or76`C}jGYISdScs!$Bh`NTOqdg1UqFYHnv63UtKRX4- ->twY$DvHcMcvr6nZWxf5h3zFy2RRN96~*ZQa0F=?l}@ARK_=La_Q)J+sVnfa$_L8_l(j9B%*`4#lmm3 -UgZHE$D=&Hs&y+JAXAnQa;4-4%tRfh#{kU?gMDG;+3|tH1s+0Dh;`^HA&fV*f>#`7fFGGmtM9dI>#XJ -_*k=zfhKlY8hzfqFpD-LrgdNnqfZgHc2$4}<d(7;~~ytNL=B^C&5AVurL9i2s<V+L3<>#$kd*<o)Tn1 --VrH6fNz>aOo_?Bl|aeO5sVo@wFqti7l1_U&mU5-?2?yk6p{!-Sc#@JML(1TmZa3s6e~1QY-O00;mZO -7>Q2YVO4#2LJ&66951m0001RX>c!JX>N37a&BR4FLiWjY;!MYVRL9@b1raswODO$+cpsX?q5NuA1VWm -fVFEec*w9UP1|5=Qlwdj!7yZ6rffEnsFGA%qv(I%-I02;l&-@z0|_LGynF8Mx#N*CFO{}z$IUL2>q)9 -r&g`L-#g<9;>GsdJ7xDS)i}PPEuU^gAFS6kJaCtprFJxk8?9vL&*O{2H-=u-}>(WY9@ND8_m9mUtS-> -P1i^Qiy(05Zye+`P?NRxA$>}K_w0reocFqUT-$N3jpD?KK$vNAJKE=^KP)Pir~WLFh;W-^g!AOC#9;7 -4-2$@Q`rbx-K?BX*^3gspVJK#x|NDiIraWKW~#(UTwj3K&vFc3`Q}=rO^Pok;G`aaOUM!%Fz`@&GeSR -9=EDYne%VV0&qIOl2FPS&6o@d!Y?EMy2fS!R{2PYvJ~TQUjb!CXd+dPJq=QKNrOYV4-D<XIq7`EPTur -e6bNb-|=EAU`QIa--$wiQknpcwgP5@Fnr~pA)&bjthH>fipRi_3WnD_x!ZHS>6;TxUY@<bzPY@;h+m( -*d(BQ+V0Qe;v*!T;yyCea!)l)+I1L`i4LoLQ51`ivQhjnl=oPVq@nXYPEA$?Yu2vxHywVzs$qqA^uMC -0}v{DtIgIksfZY<*l5N4S~pPp!8fSbIaVFxUlyt}=*zIsJ?FWv#-MGbjI;Gh2Ry?=W4-IHJmb|e`$hA -1kG<53U<XKb%|S&|<?`MQ$X#<0A~tSmD@upKN_B!cWAnizzfGrk3m7)!$L3bijzwn}Z-J<lp(CbbUtu -n{SXf%wwKacD%A&b;(_lXDA9$%V1nB_lp9mrJni3Y;@#CqL1H!(Pj-pXVjlJa0svu?@(=m^HCt1%<Ix -Ky6QR@UJy)5=F6*hQFQo1VVsA){JVbBY(<1e`y9~TKfz*S}1#jn9>0f4nWP=oj4dwOSd4BR^%p}_9wg -id&BR5<P|W*xt2)7vpoj^#^rJd<^Xd96CW#1De3|>9f<R|7k~kM>(++|rk#uNiQ?A6+CQC00vDP<Dqw -@2v%rxnpitE>^R92uBfx2_jKHUm*3CR8k1W@&f?X+lnFAHE0@MJUQ!Y~`Bnqg@gcHNm`h!SN4TB|83# -f4-FTo+9j6?(w$l)D9rWA=xB^U}k2TP|j{9nh>RWD3Xr^`uq0U)PD#|AoYj2VO8I-ZSVqmxNY*Wha$* -h?c^;r93_Z%Zf<U@fv~t*|l^N;3|#5c@u98%BC|Nw2(Nz&JN0C6|k7(WlIi#EHVJt3>YuAgO7%xF;C* -D5{2$y4Rj$n!jwMcwf2Dhahk2Joa;`6;w5QXc+5KIZjknSfVYl6l%fzSeU8uFcU@SlYdIU{L27O<iLj -0X`39<#2B1<N~hYzScB$_N*vUe*h!@Ug0ogC>(w{EkHc<9>_Z-I<-I66)d`tigXz{MZ%wOah<z(;*ua -{x#j;}rm5<n0c;AqCOWe!6>75qqgB4~uUZKxX4x@dc-c6iLx8vcCV_lL-FAnqBslYA07PaA)M{PRXa7 -=`5`{fd<fOY}jI#at&*(!+Pfc%XQhAzUocuah&4?}{Z<V7P0Deb$32w2&AxnGZ6L&?JTNFr(yXY3Z5F -?t-?3N%?g=q$rD_`RSF*fmd%WuF_RUxMkRXE3=JjrE}%Y)~WyzN1wQ#fNxsT2z$~8xfMIBRw5*ZC#ll -fe)1v_!t3S9bLoeF!@{mj`+rPl=Z7yNDd28X@}Z=)R7s#%~{)d1k_0fj?F>csCKq7Jz!qg1L;IQm`SP -3YSs8SZ%!otG<`U&KglHY2Cm-!>+I-kQ_*PtcMc~ZYM(x6CN$SOZzevrC9ZFwJ4cjIZE+TOU$3EkfHs -$W^Uxj|jkuKHv}nLtF=&cadem&Tk;eA&o2o7^4t0;=i?5GFXLs$o@re2T3jDQh4`M{-9d96`!p6#j!+ -one`>Y>($ulFm{TmwX8@O+B!X<V1<cm(L@2wdj5z6Z)MmGav@$tBObQ~VR@?Z3gV<c+(+tZ_drwf#PA -Ah}Lz&T+LMKBAZ4{*{52Ql*f_F$Y=&Hbv7+A$yJVGEDHrfKty4W4C&+n1-=gA!U^cEk*3_t&>?)8<&| -Z#{e;)(ea~Wh#BgsZ^m>->FvyoR0^2wik~fmvScrDjRJ-WFfftV+CD2#?gi4($e9*vef)S1|}9xJZ_2 -4(#{$>vr@^1eC=M)kgVoH2aeThPZtyx4~8fN(CO&!4zc4!`vqM%s5JF0+iK<VWVK>=`>^fh%Omy{J*X -<pQhtwTRncs}0A(u*Xp3Nsvj8?0>&s6Nu|KeOg7}UkchJe`CJQe<B%EX1HHp8WG722R1U3!st3O4Ohu -R~8si1idr%_|8!+-j@cTX~hj`7R?v#(-=Xxm=&G%maC!F2K$P)h>@6aWAK2ml*O_Ey(_5u>63000{U0 -01oj003}la4%nJZggdGZeeUMb#!TLb1!LbYGq?|Uvp(+b#i5Na$#<BaBp&SE^v8`kx^^gFc8Pz^(k)d -O9Gj2wzokG+sL5M*`rSPY83lCYn650Nluz?zq9LPZE0b`hC7|~|NrikB*|xJ(e=pCQ9U?>*qR8||Hdi -?D6kqBw`_dqiQ@{$gYCvpE46KLP9U^2xEgi{HF*RR01dn281xi^-8o!ABtRcT4~%ob_-DW%9>&)ypd2 -C}U_lHAA;3NI5{#U!7$vR2G*KWQ!L0xF5>0qAiZlKJ1yt;7k{nN$gk8SQRC%!y6ZBKjS${9`d5^v*Zo -mfNBt_DV@U{XcGuhr0`?da{Rgxr1oq9e7rBsd0tY3zSD4vKGOL%_;natyp0$CT3k4%gX_r}LF%T%<@s -Hb~pVnf`)yGuxF!w2h=$J^r)@qxXX^2o=3g%eS5(-uBd*hjdYb~nt#uWMYu*A}b$0AhI_z*?tzeP#+y -=RY=?6w05Q+u}OU%Ixm@m(49)T|)Y>PSaHWZ~wvAFm=$|UYC3HHL)JpIlKF)EAo-;?%c%lDL!pz@uZ^ -_<i!*$U-y0?qvtoWK2kY5FP8FtZ@r!R3s6e~1QY-O00;mZO7>Rya|@Jr4FCXeEdT%>0001RX>c!JX>N -37a&BR4FLiWjY;!McZ)ay|Zf7oVdCeMYZ`(%lyMD!jhEXz==_WlKdO}s4lQ^kysU6t9`U;&vti+YI7m -CzzNh?C(|9&&G4=yRvc6#mM6vQHTXJ=>UJ+qSQO;J{CQRJ2QTxD`Tl6pjxWnS2qthl?A`CaEVUhzE5M -5*j};hxmaJyxqy@Dx`s%VNz^Uhzf7l@f{>2sfl5WML<+fuysGo04xfqSTXSYYXvCW|f_)b{lWzB;SqM -8^roEFURb?$VJJk0v<m|RgKxjrjkX@v$5F)zIPij(x^6a6DRi~Pm3}x<zf{Be^ikPi#!}L_`K1BWB)~ -?Rjsj0Km?o5Eok$OTl!;{Le*JiMquAJ97r8S14OOl-716szyV9xd7WiHHp2r8J50o#e$=8ISfIq+TI7 -{oaHU^|fU8}@sVjW(xhg@?O5l53S29y^0<>7zpHDAeUtFDz*`2690EsPfI_nn2dcz$-H)rQ>FK(`e!B -ep*#e$=3?3%ZyA1_beoLrw>oF_kBy-(on-Pu2eQLLp}*tH^8bt#fmmZK4#AW;>s1e-R>4m@7)ER05~o -^Q%xA(TQuI1@m*^MwKK)PNLa5RFD7G6wd#EIx_+s!EHRzya%NSr%n@`gtKp&7uiuN)QBEW4KfzWpZhj -ev}(QD_F5u)TLrec&t`}DZ&X~K<t`rR}$o9ZQ5ZRjZ(2>iB!p)uq8mMNCZ(JJ}(j?aza)!d(D+_RNam -l%uiTrFk(kPuz68rnq;8S;b2mA3D!XPDMeM6IlC@v&>|c-U>7;Nk)Uo{HD;V?;!t9OEqKn<s@Sr6!?< -FnXXihkd|+VqD}e`x+0&0_A5SL+(W<I8YI1x$ukTd6*;T6|kBjo|SSnSEmw);5%U90<{Pvqaz5LD|Dl -eQe?w#Qs&y+cY8IelnpgH+MAV<L`UD4?y2F8f|iOC5wnX{0dVtt}9GjDhp)R(_D?mIS*Yo2p7Ae1363 -#=8@FU;%p1l}u9!dD~`=ND(^MJ~py`Fq<|t`i$0m_dztvskgM%ranntpuqSnltFu2Gpx6*j$*+K`l}F -c)lZK2(<=%2Rw?2wX6^Tcp+0*P{pl{57;|WTQsaA#h0SeI2yZ)^&Z-~$+{A61Z?mT@UN!~ctQ|Wxoc# -$lOjv$Z7IPAWZu*OrX!6>o6Q~#$ZO#H#1}sR@v17r2H}_m-l|~CzG>XS8BKtR0z1~Q4!no8SvO)F0#L -vqjwF>_i)2ZYz?b0gm!re=(P4Uh_~Yd8r^(?}FtXq*0di%PB%wQ|64`R>-d^zX4y+xcsvF~JN?QQw>& -=9$8@3@e_ZGhRwC$`VW}u2SJhj5snznZ?G+szA=3=Kv%RG&ax_TLp9Hz;Jm*C(!be?ER0f)qhkUNFVW -De>G4y4XfR9y%eOZi!(4j+EDvRWYxvIH?MiZcBQNV3S|-UA^g;}#LXrq+7{T0^E2MzIqI@qO&L7&Q_@ -6*D%3%2QS$NsKKG)6xk#_%X}Gy~y%{%$_(8qy3D()M}|C1jl@CNiPngZ?`N&U$-b~(n*AKcr@S8{^5} -LB{(<=<Zjf@AaI<9O7^`I{>{nd`PupVNsIf&a@uPheKC=(P()#Wc#qoX4%qcd=o8yx@eCc!j;$boaC4 -NHu^YkCBLAvlTaI}UdbbXytSCOgAwLNgSknC*W5Qzi1W%u4pA)B-mlv1)d~iDjjn>;ay^MKAt{G+YL~ -HNF?E)#rB@I2UByYeODyt)T%FER8ACzqlW<(J|TPScdvs&cojzgv`ZoUHxEE%LIB_)}jQzd5fD@~)7Q -)f2jfcj{W18tcJf}=t1+mFL&nG+jXM7^7~v3}jmjk=aF?TC2aA+)9ImMw!{309-N255V>2Nra9flwB} -zZU}muuFar#Q!Q}9?tA?k_LrodVs9MGptP}E0R`-saSLyb=A!~{phbvMd!yZkv5f&4TSE!Qx)liik6Y -*@*@>i8HuUL_97ND6BAdSu|n5mlTMA+#3H}=nt14_%2B{8gEQ9jk^#jH?QVytqu5hhDQW&Cnt>K?ODv -A(1k+Xr%0(=yP|KJ|(EN#dfOV}5s2)S~&)lmvun2_w`-*A;Qw@e*WoSI--%fwIxww3LHF34|%vRDfEU -ahXIBsum;pns5p6o)4NEaRxSA)-V2@ZurUVvaTC;%u%_aq8?0kU;KBd4hmbhw1dW~z5<a8K<65K=6wW -Lxshl(c%>LWY$DS?IKr(zr=-4}-H%pRW2Qy|R7Usn<h~gvix9<Qr855-si_^T#9^TqDW`at~cpjxo%x -`6o=m!I>+zEy_<=18oJ%1=u@y;5ER+P9&IhKPwV+_>c9xCpoI`QQQdDIKBgRw#2=8DcGI7hZxIQD*0V -rs7fvvRgp+C_#OqiIJOTMSt-Nv{8!`tv1<gb)+?KgpVmoIRc|s8`Ht31uhku!g2$VgU5?O$+_FOzP^F -cL+(#54?8{EPMVHf9Je=2CF#G1V1-wsYYq|&Dn1%bjqNW3c2Gh3kXpFI;gXIA$Y0S!S{K(kCQ8Vx52t ->o6^M&K>d+cW%LJMs=9DlT4+b030(Ppzv!c2%B2<L6$EwCQ3A>Aw*Ta@k9jcV9z%W$r(?8D$cOdre6> -_>OPrn(6hYUdM_A`PNFaFIQ_NpCXz=r%i%WyLm#8kx81TUv)~v!QKMLX-_#K@FVE5^zid33giwC`T7% -u`w=9?>eQwo=B<R!(7{^XG7gI)}1UXS?87f$uD<KkRD=s3hr);X}xQ6Dpu#DD&TQ24OPWjn4&MHR+mS -<?nzM#3pHz}VjPtDvIwKu<kfB4#kKoS)MhJbdu*vKfEL_;Tgpm6p$aZ<nbm5Ak9n(NI_R|Iq$3_Yya~ -WDd2BHJ3eQ$zuaDAZwGj)+GY^-r+=qjr6UMffW-Pi_z`f=YTN3D=pw__z-Lk4plz%quve8{)y)E<FH4 -BY}wEctQWZN_9zSiDYOA|3@qs)-^nk{?qPjn?odW}+ciayP{!R~6bS4r8NqgQinvsPdMbXio?QFsSOu -sKxsvLx;SYWg-TDK-#}kRhbttt*h`98Ci{EL4n{Mhwq6hXR3kIp<0sejJJRa&?zP(O%6Ve&U}$pzqPQ -Dxv=JX=|r(<fodxLMKr`G6(|9h`zl#RO5e+fj2E<kN%FI{NCHlodsM_R;NPu*}DhobT+N_>v`R55_-K -dn<<@AbCYke5R5@WZLk1KPr++OUgP|~J|?v#7|PI+q|e0Br7LhA+3s<&JWL$|JuYIrbA_`ewb5#%Ujf -`EF$9MY4d#WC)s7_IP1VP&hNOo&nP|UWhKL10yZwo7y2zLE4pdkf`v+EH)4tU%pesjOp*vH$?NEw;*H -AR;ZWM`)1V6@X7bSw%Hpq&5p4Flwl>_!xz&Y1gYtbg8pSn?Pv2oLX2AAfJjG_2dBOh9p<n?+^*Ev?CZ -%<$U{XGFuG;db7^U2O?bL%y*?r3;nCpQ>E@HE|&!SpTv9+rRm<nlL{XV+(MPCgh6eoi;A;_Uq0g%*f& -5M~B%#&GByJ(<7SRYPbQL0J@4V0GR!Y#~!zP-m6}CXxgO{fj!!APam!1xW@m5i25t&SV7Gt0WDkH`HL -G1UY$u#40zC+R}4BZ?sy|UDL3Gr>WFd(IDs`Y>X6+m{|4%q*_4_hx<_m$EmnK&Y`#r`Vo2#8Eir-%8q -!xb5<}Hcp0OZQ7)!gh#Xw;d%=hv!(MBt8kwL>OJDcsTVb?RIWKuBh0<KL<3zGMquDBOO;Ai#W&tV-q@ -KE+8QjwO9Yf5fSF57L`@K}(ae}vml*?T;B|59Ze$1~;uBcOsV8Q|jv6JKDCfx|eEhtDX_MmV~Lp{)66 -WkN~%ZAQQxIN<NyH~cV-`9ZgDM8Ubg<~)a=_3}YoH<(=JG0T*l=4TK8)^{1*IueO3#|6SM33%kY0Y%j -Y;4#PyPy~VdCQ{G;h;g=FprK79!cSS*o3`ow^D*st8OAbONB=^ckBv4dpa+H4s$r$-hn1f#80-o%&~{ -k3q_D&^pqglnN%?D$3t2kOuC+YANpZ`2<k}CE8tyH6~26)AlhB6JxUm+jR3v(+l3e>o=2YL=JQE=jGs -N(+#f^xLsw($-Nt~@=sw32N87);9iUzBhRiq&ZR0}q9JG(&=1vs5XU)CB|C%rYZryCa8tkopG2^Y1>S -w$4T7$=PrbW47KMXl*fay5znRVE=LmFl>Us&o|$^DSd^LtTfW+TrK`o>Ak`mAW&<EaKwS+SzzjH*6Qn ->w-JNj|&i{r|^njMcx9*S|Yo51`sKEPz5rZGg)XQ!ly!vOSoBvRM0*L;E|K9$flokC^ecenMsv<9JxA -&vD9sqy_yZSv_ABe5nqE$=}~%Tq5+et?1<SOL<BO;3JAGOyuh+2?iF4d{N+!6_KX8S{{8jL{lm<z8m! -9nt*-Abz{*N#{eqxdi}p;WmDAjNW=>v_VMxkn&k1<!24M%z1to4YnKNP&4Zulnm&tP#*Y32P)h>@6aW -AK2ml*O_ExpAbZ9pl002i<000{R003}la4%nJZggdGZeeUMb#!TLb1!Xab7L-WdF?#?bK5qSzx%JiGB -;;3OVb}|+O4+ACQY5LXVN5-xZCY{JuD?c7Hf)B3DUCa@&A7B0|3DfIqBYZZg%c68Hpl*hlhvvjR$9|b -y?M7UKX{yt@CWQm+>1}RYhrjT*-Q!C}n;w6SZ`@X0~5mUR`CymHAoP5$jTAx9g-{nip!>)LCwS)k$ri -x5{}0#1@$a*i<>p8?BQ{$-PBYu3&DV+dkA4OnvrNzprIgmu0R@^CHXP)gsB23`H&B<JW8*=VfsvRn24 -S?ONLY=T$P7vt)jK4sUHc%wRhBdjkHwD7GOze4Q0ZwLN>wzg{MJp3HKoe=&8xON!)5R{ZXpY+m!zx3Z -8`QkS~n4A5+c(l6WgI#YVk+jX6lMUwNcbAWE9K5y1$FrwZ*{VmZ@zAs=XKh6^b80_%^*V#IXZ)A~{Rk -Yr&tMX?#uj6G|UR$z!-DG+CHIM~*{S_K;p|TnduVs<UvwCaBRkE(OA#8NHj*|r}Do$mdz?)5y)$t;`m -1&EF859GwN&&KQ?97k>F)LVlByZ=E$Y8O1S*}(|k)Bo+P)wZOa>snjluu8Ko2)8}l`QHpczHQbI^clq -<5lu=S;ecYfKQFh*jVId70t^PFu582!`Yi}-v01mcXz<1ZjxLUH<nCIQ2>v{O_2hL+V;J@IEID9v6zY -r+BvUU)s>VU@1vJyY7O*^QO3+W<lbf-r&(p*B<k8cLiY@r()?bO)helDmHldAW(p7n(PUP3;S|_8hpw -IZD%kUtROTmA4|wRx{GKQ4x~XIut2!+kJFzSjymg^ha#h~QIBDu-jI@hE>@AR`oL|S%?kwyNZLMj4N% -{h(8Rt~!ce%HRdP-J6ORcaX!1Xn~^Wzv75yv1C=g>h5j_;j&!QScZ{H$1%_!@=m0vj*BPLw<~oOl_E& -hN0RM=tmN#w^qU16&ab^KrTNM%KWI)MUG;8u*zXjpXAyn6C5l64tht$^~&QaGc>-KM)7cK=`T&Q3+et -*H=h$n4we=?qc+FnH9eI0Zm8;AO|Q;Bu6N`DDwC-cmPT=Q~2#Wtw2ib4=SLk3gMxE-`xw63i$Td+j?0 -R@ECXzb0Mo%{O4$Z(7tp)w=Z|dsvmHdKoh3rTmv|RtpFT4zbEd_L{W4}^c&kPCaC9mM$rS9S|p;T?JF -19Nx{<Bl~ka1(0(N19j{o=DC$y_1$72dzXBVHpz0+^cf^#NfWb>Zh4hj9P1CfbDl72@Cxm&`TF$e@7R -X|{MdExZHQaepfUUogA}O{SH-iyxW(NiCz=(@%A%5!N`;*8NOjI1;<dMbZZM~G$CPTBVIb=AnDdx)rE -OjdUERqqSA4DC}XM{k1BLnf3crs}@r`sz2I2HaAaWFbE5RZj_6f&>Nd>8y@55b@I-&{<dTy~@Z4Y2Py -S^-3?KZj=BR#EyWVH1>R;!C84<wGNftK?cjS0y$Xa6wax)6>77eK?N{y}%r|c*7vmpJ3}nlNJ+iKaf2 -Yi4w9M@<{xUfu-Ll;*u(X4Fqm#s;q33IDPZ>{Peqb=RcwwSyn0%AAlzweg4_W=k3M=MP)>8ruf5@{mq -Dx1b$0L+6>SZ2_hs;?W#R6IX!*XSu3_X`f3L1nlv3an^96--CP`91}=`&KP!aq#h_p^&_v)Hp&~q(dq -EEs-qVG5hrr~moHsR^&U<k{4uEHSOK?L+$Kq@*@%<My__ed9mfER7Gol~Qz)85JX9o}R(;a{w&AYevN -W4cEOh{m@El72~5K4k~oeI#oqFJLhc%ok^=zVS+IHIrO(aZ?5tpH*tO%6Ix-hv+i{c_zA#2=JFm4Q`F -a$!BRz31cr`jw<!)AOp4><v!)E}{P<V6Sl6x`zHy^fU-)i`nh*fmKNWKnq`iPM0w=+C<F2>4)uog^qq -tI$$$#Upf-{3^hO~j!zsCa%>W{Gxa8!c7BDZyl>}I?#?ekS*74?7~SFS^*;d|pT@!OIV9;cu?1a#-kj -K2<N^#?hye?D4OW5R4$ieXp}62eJ2^c^=5lYSYTgz`2ZXfk=qV@^l}OzbBB><sV3Hn`MUI|-DK<-4nE -eYtC^P6?mzr78<wGc|5Tw6l9JCo=QOXS%Ch-HBq<W4v2E1%A8)P%gNDWBOC=w$$A*qvPxt5CtJVuIjv -!an!GlI+kc~)v%H$t!*Bdi!f6XYpaF_28qAQ-o@!i2|oRi;w>Ck3<7hxqJ=_h;v)W17@eqFKEUYW0^U -yFov{CSO2nCV30dp0a&ep7#tV572U<&b1!`(6IS%Q-QDVYWw*TkR{B+F?<<H(-&vtr&@a~;A=?O1ZrP -njEYij#$rdukT~cM1;W+eZWPlqa#oqcCViXTAnU-?dVm1x!G@wHOT-nl7J}CXR*gb-3_x?h@rJyf`6e -}FT$f5^u={rJahziw&|d@_E&YLii>nJP7;FMUR<%N|!rowuU>;!fKU!c)t~;8VX7VBry5NrsbTFKeft -Xyns+{sCOsF=rb2K4DMf5~KXUVlUAlxeojRZ11QV;DOdTt5Ov4T*)1j_*ALEvN&pbHZdU3@L6ev+n0Q -k)>9&l8xro(G121x$aexxNOU1^H!)&-8Ay%+OoxusALONMO4=G%C<VJ8sQp7a|OT)%iu>QmF?_6AU6> -;;L9r32~}|xKUHC<TS#>CSNF;>XMI`i`gGk9IQZcHUYQG_uieoi^+HS5WjeNe)jeadI%n<1q`!&XGOp -)4ir7_m?yx!+?Bx^4Bi%HV*_FijEfR<`MRk)>l<qB_hhP3&yqpUFfI}_5cMtCi*h5=$Z@U5miy*yeD> -zu_vfw`#6Ezv8h&SC3-67YWrNP-Ed(Dm`t<+df&(9<4*o2DX{16B6LF{4a^Jd7LA$H}#7@GxUZ`tgZ# -`I0Vg@OGBhgr)3_I*^lmu*qS_5>c3~891k6Qxl*aue+G6>+{kM}T-pjxVI?FSKVOyzg{Q`;Sl(k`A_S -FpnFZV)AYESsu@;NShBx({e`5SR{1kq&mRECnXQ8-lyLw;{ag2x5Rq15Pezo((!9+h04qVgt+(<{fO_ --(-|p&Dic1Ti$+fzx3?A7FVGtwJEFg)6htS>Hj~#MQ7q8{oTh3=B-O~fqk%uEjlotMW@YCD9V_(Sp%} -+wBuES{9ob&aK&+eDFaHKLqr_t6ac#LY<Cs;di&e`5I&^BubMuf2Y#2uKKo$%$NPWQaCjgAqQTf@zbN -r@K_A$Q1}_$7^wB=}fbTgR`5TTu)!K`|>;uSsQeVZkUgE-#ow`W^=mJu8L%H5okU)sAfnq$0?6#Q16k -bgqun7Dv3;aCpC_CPg<2FNJ!BFP{gL!X3AGjO>v!LHcBXEv(IY-W7{e_nmFiV!|O=8FA4!%HiJ;Mf0G -S{DNYn0YSUM6*yHvwU46wk!*(b183OkV@Myt_$syto(NeQkxChaFP?=tw^}nUWUlZlL$#x&?^Z$pspW -0($_t>s`o=#b6E&)Om<TU?>UkdjpQ6^dSUst%`lXc*;!=;t`Eb&C(+#3EM2;du_=@4s9rEJTYlj%%vc -ow~g~MZ&roCZB$z7UID|)+hhe(O(y*6*|TRYnim)Qi?W<06$s4<5CG7)IJ!+C2$)H^xYVf)-}EAKU_T -VKCto~y`sK-=o<99@ABP<uh2k?kzz7f_ITaU_^z&EA+9#_EufbbIB?nI^0oadyS3(|#tdd(A08Va*E7 -Jqu2?scbasK0qLP`iHb7Jo)I8qFZvMC76GbTl&5amBNswPB2o-zocN?Xlw#55BSNIgdH`S9GM7mJ{Rw -Oe|o*po-i<M`1SWhNOO<_LR~7S-h{M_mdoPP2~I+rRJ*o-O))*h|H*8o(0dcc<^f)8j9M>DJ~=#YT#} -EXl~QLKV5ZO6FUhhEG8uNJ6iFwiQ{53F5^TF*A5X7+OOVxnB#iK}0bVQgf&I;!4cqJi(x_Q97tH5wwA -WsB-XqlVn6af~0Zh_=@p|wSn&hp*(8;B*!QfX$F=FL;<iwr=v#`!fcTAB}YYv6PYr5HPo(@5OUmEJpg -kSe&+;)14pkrxfcu}q5=F301b^E1l2)SXLo=!;2AW<wbEG~m|@bMHxuhl(8QxlSw`QSzIyTf>+|^Q?_ -a$-eII`~`>#{Z-Pm*H3sP|*g#`TBDySbbnWti%$vH?ZsGu~d6F#a*XySuBy9TdthLjNvFj6i~-@b~v{ -xB}5T_fQRxZ&^!SK}kb9Um4qk-BxgzZvwtwr{qC8g&~S=5!MVm=#iGej{VGUF8{2&gKOXwSk95->qLn -;tbwTR#S4jEV6l$hnT9D2X@L7oRS$#($vx(o$Pf0_A&|JLW6b(@u{552>b6{RQm}60|1DTx2cB_v)1e -1$yB)9HOOsn5A8wfbK#!KbB-a=xLMM@CU!9S4Lvp#Gt4j~*tA%Ps7^3_P#VHu%AK+mcs^nZL!!>amO9 -wiIBO7srkq~!5TxruF)-|Waq!vXk`n;772liY$-!qG{cn-6;zozqewnA5mkPPr5k{NEn=t_|oO7^>LD -5m%yn+Z)r1B;Mv9iMQNSvV^Us>0CR)UWQkv9vR3z*g35`+hA0;pDJn>oV(NLrd<H}WK?CqB4JQYS#Ll -S4rF1c;iLmvy!pQ>;i4B8F~y02$~xj!ZjWC&j7};8d=ILc6=;=~HHU<=Aa3;m9Ad*7W_p)w(8mhn5Rj -3tR*|BY=o#k==&ax{>>s$>zcgbRiPa)@4N2fO9t;gS%Zq%%{*C94CQepuh&Bo%0CY$YUTclZF!>Wb|# -W71r0Rbh?v>S!#@z5T=7uSF~!7vznB==&Ht1tGTPz#Q(T`>Zdz<inyhq^`j{R9fPkxfvvilQ00_(oK# -neo_o^86&ev8&O>+I6QRv>pa@ob$z=6Im8{pG8cgk%#vBvYv7#OmT^q$Deoli|61*0s6$MLJV#2-sd5 -%Xe!{LOT*O}DoPzhuJ#`>LncjN#<8EJp@=?h<bS|wl!5g1C~nMgm90~&zj$y5ohodHcaFDVTRW{Pq<b -eK<V8V(k->60boZR5J}a`0%Ug@LS(+k^fZlL=fOSYf@jG%|gCCG&-~pJtwko~XYp?CcW3P6^xiye&D5 -^dpz@RKzc~SV*%B1EAWRR<c`<rn58So{bH?^lU;;hsPY`a`x(z4&f^+@KaXoSJSCeEwNH7sWLqAl<Pd -1YuN;*7kaNBJJ>#Ec}#45qDh~Cwk=rEzs_cds##+J*kKHzM^@7rGb$1U{8HC(z-(n#kTq!$Ti~xNS>u -5aN?#}(3<BfDkG6(gQHoq?aNz5JyrZ_+A$xe*MMh;>&iUs~Jlxr|*63{sAM1CkDZ5+WZud(b$_G@$L# -Q}WGchb3JR5yEoGCHF*0DF7NZnt`JTLdHv=gI)W&xQw{ROnBuf-H-LlG=`20Z2;#eVRwV*p!3(iIj@S -J;h_5t#Y6kdeNzcw<1IPsRjhBupNO57~;c6pD@>ie{zjTAG#rSjk@+3`{X?$)@2kvPIe&2dcKibPFSg -!!WUsX7k$r72^CB0{H(}Erh8C=WP%K7OL@w(Q`-F@Q$`=BCh3@B3Aegb#5(VR8<5Tas?XxzMcKT(-7h -nkPW2UyQHK&z3U_y0CnFxg)v?zkQr#W*`66zD#its{rSsM)!Okyewefcewaxb4_&C#5mXF=FyR_PI^g -Q-B&+%!09S4+$K*Qr;!xAkn|MeA!pru1B;I0}zX5ik78W7}ybmHbtFY=4f+srg&uE&ncQ>Eg(KG@ALh -s@ZAMY<aJhbrm?c@$|y!Sd(YO0)TLN&SgOA}1Zmr~mYJOf?U^;!)NK|3VFk^u4j``3nO3~%T!@#}dBA -+HY<39xYFg#23Xxo6xyO@DfO(R=IC?hK4i10<M9m~n<AL-L3uO(7UmTq}W;)fpB`(6)9;&%`w3A44iK -IqoNiho+06B^A(*kkASBc9ofS^O>$YO%7^@=N=*|Y$S$c4{WNgGDTEV=<3$~NAQCle0b=@w%k2JJlLw -}7l@M^;X2jDJILUa;dYn%4k6MRI&O4Ze<Bd1K#vtuy6C$1mhTV?d|o{v=mX3N7-ac?C>Rzu4%loUv=( -0L{RGCV{D5m_d=OKxw9DH1gy`4oE7-fufXMpzT0@yhtOiwx&Z;Ea3VIw*37?~g>r*7*b7Bw60)fFPYX -=)hIYZ-{Vsg)%h1ohCw9oC7`^v0~)UYN9k~nO+UsJZ?F+ieF9Ba1OOuD7f&>Jbz(`pFMmCPQUa=G};W -cmoHCL^Ruu9B?i5zK+b>DJvuqaAf=Wyd0C0atBc@wieQp2ONLow^yMUVmmH<{@kvNMZ3yQ`V9gxGja* -aGh`6Gc5#lbohGHtq|`B2BKpN-DH}~>s<mn(DCotJ!kJ6t3jy#hccQJqiZ%I73)2Qe;x(=zyO>h898# -Xt2q!JVmHAZd9GVAVDt1Mlx|0`opu*OGKb(n)g?HBJ7A0tx1}~cLK*D=gnm%T*}bAo-Q@&uU%RdL?7H -7wa|Tn;Nk;1a(Bkc2wLU}ixv39l(oSKI@UZv&o#}P|+?u+<T>|Vm?NVxL9*j<zI*YcYH8psX3ZbE)@{ -RS<K1bVV_|eu|YSYQ~lzdveN}ww#orJ1mX<EyAZs2Mw!>p`Xme?0?&>Y&wflrLuYCSH3ql&NALtzS1d -Xj<Q{9OIN$SUwoB&Q}>!(bUE75ZmN1KJqvi$k<eTxXSR`|%85d^?uUUKwys$Pl7k1R4u)4j}$Qk6RpZ -_E67ZYY`cSnSzdt`cyCwj=RQm&929|4!8aU!-#8r4W|#>M<|giPLHUb0-`5E-*8E+k5Z<BN3c&8cEDf -YDJ`|~Q4u{t)Pfi0=y_2kSGW~Ak{`#vDeMaLq#efyM}_*jfx~cK7ZuC%SV{k>j**$+VU?o+Kdi&8R9t -pI`(vYmFc^AtdNJnOSWj99qW8)7s>WPE5<xt8E5W?r6`fjImCWW7IT!orlq?(Jz8{DirVmnM*T31}8T -P&C-dNwo04+gJeGwZt+uLE1-KgL%YlVl`^L#_%fhBg*ZtJaf@t7X_W_1&@xaa#Cc<P*ym|ln2OVCXyP -Nd^+5H_TKGqZQ8mQ~qYEyW^Fu9SvAMHM<ZU&(oSRbZ~%WLHRyIyCqgy+B&K?#L$-qV-0cLNHsfZ0UkV -F6!k~Mv>|Wg~p4s<A2T4R2G=)o!AtvNi0zcH^iGB0NWmyA|#oPopX`O!Tc7FK;MEMx{U?`<v;jw&zTx -)%=FY<!nn5ls}^m6m59%*4aX{98XLGk;qAv@c5pMn(77(E0M3H&pKBek*tEEc9O&{FOREw~E!sp>d!U -5>z&E1w4&(8MDgUA&<JW`q;l6qMh)k}o#hXd|q>MBbtq|tO*J&vgmS@1&lJDdJ->>j8MCd@mA{Y(_l1 -<p!N(LT{636W7lvk;LYYty#sf;;;sS{*|Kl&V|LAI}XK+9TF_74LW@<3jOP<vc86t-Z;^dus7a`RxOU -svF1&iRfkL0gq+w#fMYcMShGe6hu+_gE`~UAc;2cn<uIq3P;Lyy-1(B}b7iT!{b7g&E#{_W})Gv9uQ{ -gq@bI!z)n8d5Xbd)!>1kd*P5W!+gCA-OH}01FNG0WP59zTJc6$%QXx9eb>Jj713SV`%mo`jWpmjTm#_ -JCL*L1l$V<v9$taAYw+}Eb-3QHlS6=im?_mrb$ER8<(DJ@6g;Pynm0<Ba(E_33}2fVL?vb-#4CmO`dW -X#vvp(y^o4wSe(?Su>Saqj6AWl!-#xo?Z9#70IsYvJBz^ZbAYL8BJTUD8mMYkpkM(^I;%KV;bpN11w| -v_>FZBu$Q*aP+iB%5BAaob2#3FuVAdSc5AI05BP-MZGf;tEFU1i$#SYgLqe19k*FR7|*vy`Y~2*G(%R -Ty2!_HQzvPHv&;^SQJ=V#i@W{dD^G^V9clUc7$&<H2_?-n{ts^qZf468vXEsKf}NEXt-x!(H?6PAc~# -emE^VZ%OgsUy%SPdv>$ZLC)^ePuS__DygpJ;6}dvBPbEwZpHI;JXHbT-@{A!LvnaFyzkb=QDqv>F+RV -!ys>+|d^*VJ7*K8T1=6$3W$aY9`=j-e6i({iZY}&@dR~t{t;-5GqeS~+TVP#DU2lDBR}!_PKUv^bgU! -G{x^~Otj>T7BiIXEI8ldpJbD>{5u0BEx_2qUhC8g>MPRi-OgcGS{a`N<ZpDsZW04&7nH&TPXB|p{W-s -JIt-nV6f6>KX;u8Veya86nR6|g$xfD11Eo7(mD91cC#AE$J6oqBa;dKoqA6w8L4Hgg1I)@+XqGO9N9G -hO-Y6hq^o9MRJJwVDfus8k?5dSHMcQT8~`@L;-4A#`6I!Ge#0>wR?sPfzISGkAI$gahMe@WiS}c(izT -R_T@<n+~C9yV~QDI&1GUtt<4D+ceKPgp0`HmtkjOhd|K74L#lWZl@lZzNZ)yXF~^qJU)vFCR^wNErp+ -ar^39Vd<oVz=@*O^7H+m)XS*a2+%iqgk?HYK0EhynN8&_$CO#K`g3bsKWaf!@D!ve3c5tkZLCv0Ef<( -%35<7o*$;Y)of80WTZQh);l|3K(3oicn>tH0(>4Ye)C&T(HUY2>P-TJmol}$CLk{g{dFb#ZCHREafZT -vQ7l{0qi(Dp@}fV0|O-Rs#@voai|os8CrcxW2;Dtoi0%E=)~x{D3F>kB(e3N_N<5DmvCaA_TNNQ|{n? -(a5+<4M6Skom67qQ=<P)%Pf`;VM~U_@*4H;NREc91mY>r$>7^<8p+?D_JLaIN(n90FehF=Uh>2++Tgv -!*LLW=`9+i#Rvt${-URI2p@*XPlvBu53aif3S8`Z*A`IY@4f}U6G3@py(Ns%a6l7KyTs%F&zU>O@%u9 -;db}0>b%aW)7~G(Ex5D@r5WJ<HZTy$f@WGWl$c#Hij!EplCk=Qd{|pUwNa(*O8SG*nqy+d&;JV4!%Fn -}6@t_L%-SkyVe?cGypD#y0qI3D?chXUxPM2|Nj3}hAGh{@sb=rGtp7wr+W9sbzq(5eS{txfxxFP!A-O -~RCP)h>@6aWAK2ml*O_EtNz46t_r005~30012T003}la4%nJZggdGZeeUMb#!TLb1!XgWMyn~E^v9Rl -TA*;Fc5|JKE=qZRth~pC6Is>LR2hZ6-AbtOcD#n6KsRX?XjKyBx#rR!VAyL_uiAnobykwwDJla)MTN; -S{Y>;=%_;N80VZZ)%9dOP>)u6vaGh$fgk$Vcc?v@A%kbBwcKmW;A7~KF;;5n9K7Q2Bpp`I)b-NhoBC5 -`%OIRUf4B6js-Rw`s&ZtYl)c;^UHMjeP!9GH0ii143y0(@B7|_7yb}WMA?ISGpolFQaB<8dk`-QzL*X -?HhJqJj<xtmIWNyb4^O0@JlJjdJc(I1N2iTFpF;6@Zx0(6~#=^a*&qYGZ{9$Udm99P5OmfQjvzkT!V- -3Wf)rInUiqYq+<Xf~UZ36Cz^aXJSTcwHYv;mtDH|OJR`MBUWxAosF{WrJu-z@#(_f7c`H{~BYmkJql= -v%6`r{9_9={a0Qmb8m2E>sPM;=fbId1=a%g=_1(KF>`O?8v`#y~YlW$BHcjj<znB_F#Uo$p27F0|XQR -000O88%p+8!Az~A&;tMfJO}^)AOHXWaA|NaUukZ1WpZv|Y%g_mX>4;ZaA9L>VP|P>XD)DgeN|15+cpr -r>sJh%!^((Fv<-Twfi1cSS|C8N36ec^v5{zLBy(3HRg&_q^XvOaeOPhQ_#oT-cr)|n&68?7V?9;9F1# -^~OVqH?n7UTFp8i@+Dr;Kurw*$$uHN$V-KpaZz3;p-S~eTH>$?UEg>*g{u5_vs*^zZ=tmtI%B<lr&>$ -p&rV(T_^#1kk#xFszA+bhd0YwsqAkLR@{xiz+xjrzjnpD*4@x}I`OR~K8W4LNVuNfIh$i<4u?qGtbhT -uZY|%a*eYr;?H@Dh^ycWn&U9>rVb)bea%87mK@@l6ypXn2XDluFP&=>0W8SAtA&=vZn3tv<LsY2)0_S -;`iGSk5onez*H;HK_4Rg1V^p(NXn6<)yRX}4o6mJZbcH&cAd1cy~yN--fVryhD=2&&}z8@3fK&7l4HO -K5I(JZG<Mr69iN3Yb1L2p{7}lG7L>b_6U$ilyEhN{ddkJJ?=5J`?`+Tc4{LPND~CE<JhG60n6rA19s8 -^tls5oV{+DbV=W{rTO-Jwa5fUgrP0Z}*T}Amt?{YdwFseaEJWW+l&KPZK4HCY%M#|Bx(Y%|pdPR3gcu -+6CtvRX^NoYfXkASHb%#Mi%KE9`@Y;Gr{dLA1w*Yb&ddU0nxR6hbtd|pq?Vz8{kWQdh`G)kwf>{6)pY -q74^>tvDM1(wqPpC^XqkJ(p5WBaU-Pzb`jIE>--uRs5?j$?&^%NA`7Rb<Em`rE}B4a2dR@_9zy8jbC~ -@Q~@*BNivg>>nB1&&nSt1jqi=z*qDE)d!6)Lemh|g<kSY$J#-V8)%^nD^Qe)%Z2AM==~r&oEhO_5D6D -~rcy<I{3#4osj7-?0GGDz2kS~D9G2mc2;M*jM~>RoeY*#5170yz$K_f;Nl2h&FkF%>%P{eg&5(xuw&K -EaR2Q~KIE<`nL3@~Q?4f{etltc?=U{bX{c)COasxUBA^7V6^)16rEH(1+yS<!D)X9o74i=oo=efrh4! -!I%`1D~UrQIuR+0!CZiQnjuv?X0d#48H6J!t<%pUC#wg(|htTiJ9637*-i0)7QY1i=<`+Q>{J3otXbG -Oz<<yvnXN5i7`Guprkreo(}-Jh{+wws_@nIr>fPR@A;4jG=_Zsv^=JUvGKdJ=GAsGrcX?<+(uhKBxf7 -@Zq)!MlmoxcL&9?3RZ{vg+w`k41C4cRGyOw8yVMi)+qfnu72%XV~fK3IlbUJc&BjvK3&~^zS;gGw_kq -R{wB5$ukor}Wq3q#*CJM%!WRAmP)h>@6aWAK2ml*O_Euc^VO#tK002`F001Wd003}la4%nJZggdGZee -UMb#!TLb1!pcbailaZ*OdKUt)D>Y-BEQdCgaCZ`(Ey{_bCKQ&Gh3EMfcVH3fzu+X{3`(WKaiG*D>iWO -I>8jil^&!~Xm3NJ*9ywGFy23xZhIy^!}j_ZGRUv~ggMb|%B4!v}XTqM8*(@4y`^sW#Ba-b(A1a9KI2l -_-~Rg@4wlGMvqx!PQohx(2odi>|Jc>IhQpbtYIJ4$^Idz-e7tGWktA1h*9q(zK8zrYT4ZTcPq2bJ$A( -?x5lCZ_GdNf?mFW=Vr-Apt7}TEGyx*7PKOFze|<tg9SmdOdErlE03MKxuh_+x-N5ABSf!PA3uJuXlw* -ZJO4d=T_m&g>f-vtyX(u#w^!-aFK>Q@^A43H#~hWL&wzfSDDt29fZ06LyNY6%pPilgm(SpOOVQBp%Su --9DeyQGWr^k$#4!j6Uz%8C1+_)XF`8O+C<cFx*BIWoh7a3=lY%NV1<ruqGi9xDgP2&C2$j))5Gpntm& -*WA;}}|&J@I!raa}uE+JvygJ5Q}P_kl)*2fB16vU{=dhdDx7nA|4)TheiRnNvIzW{JW88lw&D&|0xUI -BZe%BOs`l3aQ8&fszk=k)DM+%F{%c&Hm=QTYn?BMW|JdrabaB?%JU5mce_6#z_KJcLDbf&ox?gM(Mwm ->fZacnUR&_TiwOkT@vUNdo6S8<%KRwePHJYVHAC?I==urp=5#9r8{wtX4L@%oab;BXJ<avLeuS|L7*E -{XoT~qS+1!QkwkDv=M%qKv5B>!G;gU5z8WUAU2<u23f!ZTe^H^b)R|+rYfrUTm?5Pzq~PCp;f1G7*ud -Y(v@)_Sh4v@9c>n(L{R&<S<pbo>sHw{P_)F>-6TFMPkfl#ksURA9WxUt5q}oNbmqx1{6=4!B2U-m6Ic -JD<lo946Ty#$?#Ruu;-!B3bUE?{Y<}zzlniQj#tvqPUf*?(}<**m)?7WpPPN?t;C3e`iZe_lBS~3z{p -*neBfQ!{2A`enp9n(zb?5{`+ihLg8!P4U7snJVOI~}))l=rc2dd~^o@ez@){ysas{P-b!%oow@apN0! -T6Py&Ld0s(BHWtVBRq#WH}&O$WS?k`(a4Nj?IJPOQB6|(vssP>aBZb0+my>CCGKp<$?if-7?)s^5}Q) -5MVV?p#_Xz_XE*IQyCKzEX8$*>FxV)aQfD?4n=0gH1#3Ex6n+v!LeQwyx-JSdn5VjSRqe(~3y5F&3F_ -Ui1{36GbOV<3jv7c#lWbFSrrTzCay#HDRJEjrc5)iBN#JEw2_tr60IsQs_=y{5H=ya6#$n?$>06Is`Z -3RC0ICr|BN|wZfqGNGwW%o!Xr6F!Tc~KtdM~U8L9aH=^?RNs0PUQKylKKGC9s51wr!?D$nO?EC<*ptf -H<cKadQ(o0yinX-ECXuj}PxE##??%rcqo+x3kf!j52q;KP1$+cf!pFd@Q=NMnFG0Xee*3MnF$pFIGBc -otUOXb5lcCFv=@^qKMW!_*0smSbjw<4N54e_`dyF4O$VLR6YYzT1p!CQ}seS<K^|m3NH4<YE7+zrs4t -5avH(JGEq;ZrXjv+cY~r7gvOS5Y!(7iHrTk5R+n_B+9dG0rgc#{c1LUCn!4=0g?C4{)x1N{Dr)#Nnms -g2*O&=Hl@uF421|*&gVJbo*c4Sk%P3VFFKN06`$W3}lyYr^IRYh?rS+&w*Jr(Rl75nYq0c?yXE~zfeE -4<wIJ?ieth}?uD4~1lz&$z6>F<cIVGRuEeqzq?cBuY)woPTs{{TWCod++bjD2z;=D5dFS5JWD#gl7sY -K#R*Ww4MBy<vDV+Ugxn3dmJ($9dm6n<T-Kmh)TQd|(7T<-*a;LiV+Mb+13qTc<We;(YjZ+3+|bvSB1p -Nxe14$`YMzM{XdT?8HGvmf@l6{fuq90Q0snZQcA!6jQO03${6(IwWDzoW<eN;q>$N(qB$O+-y>*3jKs -E>{NXVpGcSK<ol|k9o6b*$$Ug(d(j?sgS$^+NE-24SR@?#$`e5T3s6e~1QY-O00;mZO7>Rqjg%P23jh -G{BLDy)0001RX>c!JX>N37a&BR4FLiWjY;!Mjbz*RGZ)0V1b1rasty=AG<F*<9?!SW5;SjrXv|{_PA( -#i;OWF(8UJkiji@`HoTB2h%GU<|%eL>Oxeb4idlt@WQZru#zY)KEF_m>~3lly}<HLLX9om6)d=`OVmz -wE9OpWBOOb1=FP)=suY?^*qDfJMwdolY2hZvXY+a{cDr<(q$Az5jMjw_d3S_u~z(D!!?NySl1{>8`$$ -wsyb1=Lcl#F0K!?)QVT`>XU+t`D8Y6@(=Qmua82N+T=zSyL`{heRBv330v@kh-sw)nZPYCDw$i5qJ*) -5{G+?RLYgfv#GL7aP-{;%#zlNC1nJlExKg%8Bk|_P)?1gx=urkuEi0RQ=La4?T;9CC{&+c$+`UGUaUC -3sy|hJG|4x>rP`Bc9J(<XD8juTe;|uUMI=^Bk4yvo#=&~t92|w9~hkB<K`%C_}+|l|Kx7Tm4FW8OP>! -V;l_4)q9PCKDkX*9(SR6md|TWvaye{~#3Qpc+^nY_{aJy+!`b7$Fta$-p_U)tKtBg<B+$z)QBE!*>Zu -`b-I=~o=qU9iy=a~APl&Di-r;v3E{S(dpxHG<cI@tA_?&CjB!^Mud~UOTy|^2?R87CZot(Y3r4<Xrk@ -CyIL_sK8L5u(jYN)7ylTm8uZQ9cd#bT2&A1Ug;BfzcJ`jaIH8mkT+cAEh&UdT9m<o-xPG2lh|3OQQso -S?;45=X=g2wsH{krykOV$PMDLlP%>mHC|w%{c6IL0AD05<-bx`VBkIPegvdu5e6{EGI({;ZV@?SJvR5 -O~hTCbBzaeHp3~Ju&g{mz@q?Gnh@rN|rFK|s{RJUdx7BFxH7*O(}hI&GM+2(;2&=aUEYBQbrx?-;?tL -N+_SgF++@H!kIl0?C39jR0AI7$*o6v?K%@T}?`_`KkX)kb2YfYb$t6uJ~|1^!D7D5~y1V>Y0sL5k<Ig -LZ)F!y31mp<_T!)s(^lQ>E28w}q6f*l~k4nw+ueEpWnRo(tt3C{b!*QE8!UV}z5Zl&-mJnP3t)-x#PW -s*b7x6RfcLEY5<AW%<uqs%e`*G?MaP8eNMix(gF$HkRI<vu2dG$;u?Ddqqn3XFlhQI0|0<zMN~HrI~l -*Op616Z5VGz!wf&oApl7drFrOGvxLRD6$M;=k@;w0&(hFFF+tbeym8Jh_T@81x~Xh;`n0xnshj$OZM3 -eS`+dVfqI+DNfK8a=!~~wd*UCTEYVGX7gu7s8eike<!=a;ObC#XBQTQ$Ilr|z;ox%F>lvsd?hOhN~#K -=Y>1JGE)q+6xJ-AbX3(r6Ve@fgGn5x_6KWsS0;9$D5(LMziH9!5mOeY}y<!^B^2xvWIFrZ}|A(7{N0Y -ns5CT))OiFhUna;;VTwwZKco1$G=jRHGg8RWz`YAY=DH@vMQgx_bZ3HFhk}m{Ph+qca=?r7#BjNLRna -1f>bSx6nVL@qzr_UcUbHE!=)9w!EpZ0cvMNm?7ighVCc5`*DOKK*CPg4ioHPp_R6}@B$GWp-?J`vXtm -P6!~?YXh4wxlmjr6?FEPawOj>-dg;*9#NWp%XGd-%-B)}sh%c>e^*I;`1q!#@iP1VU|A25bjE`Z0Kuo -q2YUb{SFuO(zZI?j4DCZ6`Q2msFS&~9+biMD0-cih5C-Dz9y58mNM?`*gn~h#KLbPB#(u9!XH1P?ci= -qMOO{g(V8XQ6`BXHwhDga}pm)vr8>tS9+D?!Eq#K0^(cto4_O)zXMcW?oQw}UmKR4t?fHc7;X>(j^W! -WZm&4L}cYLLsQ(1C*zfkBV#IQXRYssY-L*Wt+6;=LsM`XFuZngcefN<icVntMaV%!W81akxG<N4f;Sh -fZ_QtL=tz9lAuhR;U|nSFY{QIt8du~03LyJ?TVIFFe@tzilivOXczJ*A~sjsKpFNt9wA^+lx!;UyBz& -{etr~YqoaVsP6a4iosIaV5rCJ=*&K~ms4;pGK#K3Q%xZEA_}36NvanOCm=%OXI^(<akuD}i-x;j8Sm| -Dhiq8_d!bw7E17m^cijZ7rfqf6P(!f)fH#gTe-cvZWYfN|ofEBv@fo%ltq#T?CpVZC_h_uyJr}wk23Q -nCtE4{_AodBJ-XcK5#R;k93Fjk*rA<}&yI3vzhnnErD1ZOt5J){i)I=iH%xdF!HD+;~mV+55!iSQUFN -FGWn9yHND=N3f_M@a}VE{F=v&D1tQ??Fqy(&+|DIEsn^+Mmv{ktGjB3M!9wYTLdTPD9u5LWJC0< -q77DC*yD%LK*?(lljFUeM8AO>H^TSs5Fcc}g(lCY{GL;WqvB8s*x_8*AM?Sexjuu&E%v%jeBhwn<Gk* -h7Zg1L48;NG;B3gGyakG2{d3yfiTZN8g|-I0<2zIWc0_+)L`nr!u5mD7|0G>}*@FvC;>?dcFL68;o(u -LxsEZvximrP&g@JcC{{c-ShOr6MSA%d%RG3(k$<X=J?50r)6$-n~mllw149MK31V#r4)UXA2GbAtc;b -A&Ur&s_S-Plscyg8IGE~g2_tUZZ9*ny!*5lh10pbt|dbLHWd*5;ujLR*r!d1TT%6nLW*q*bzIbw?;RW -O1XQH&zdRW1OB4jP1Gr=FH{^6|@Pd7O^H*A1((Z*r%SOfhHZ(e7t>o{pl86O+oL_k>5x@#SQj53;0WK -f@c@-*Sm>>!!EK7FYax{?anvFtRwU3KnIQNGMqQ!h=qGyOhC~d9!w1!)L3Bv=mN-0qlTZ%9TvPqaE2{ -Ld=^Dh_j7iz4AdFkj1xP3+U>mwh|(4AL4B8uu~shvon_owOfa-8cLa|;k}AnwcPlR{=y}sl6BusFLoN -V(^AXgFNZL0xi<N|ssmojEFPw;}_W{TY+Gl}Tk+M0CdwdqD5SdJ?1|HqOqWb}NoJ;VP8xSH7J${{A!% --V8`6J8ztulY)*16y#f+(6XNF?`rQA%hi)k9jJy}pLTvmU2U)QRHWocHaF`s>hCAH#6|-hUi;;&)_m( -yH)79zSteM?_oLQ&d%t5cG+nGt?&zT|af&w9Wi!Rp<2CC`$OkOe-Y}LW4U;Of{QF8~~B;8(Y)-!#cww -JM8>358<VCz>YR=d@Bh5LFdJ+b33<K`#CnFke>;=NF>4zN(;bj^bPC|09k}NQY{dHgs!fzUnHk%SiLT -z6#j;&RkFq#cG^3E?qyb3*y%CMXC1s8q=7B1H2D4H(!#>0qyf!H;IaEmLYl01yj)Xv4=(LCk`(3sJuG -<Cb!6Y!ZaK$l<&hfksobg28wb90pbVtlO*10No;u_2uRvg*wQ%GyS@0-1-D8XP;4Wn!T=m53v*DnMhY -NH)T(fw5;E)*DwyjZ-MbH03QWsas1-pm_Q<z6X7)ZdNJHHE`L2rL*PLrz#vzoj!&6ZSZsy@e8ohyeN> -Cx;9czA?A^df$;<wjQ}+w(hM&sW<9kK&ytmw#Gau;r#|#OkGmi;>Aso~2i<)3Nt6h}ve4tip6({F=Gf -w%G;E&fkW#|8D~UosnImKqfK==<qF8wv-BXJhEP8|Fa<}$i-4{F^p<&v}))K{5epEM39w3ADsC^dzOL -8u+u4h#S#0LbnNlcp8YrY4L{Eo(EtU{o-@-Q@%JV;bh#&blk?&a9CFlkifwkKj=Yj3JL1iYRL<hp<nj -;Zw=8+#<oAaD<xhicZ;huHq4}=&;BiQ#ssAQq=iVm|4;R|=^bbZKWl0;%E^LmwJC(+cVx!Y5&pme;gD -(kSuF}gOn)q~{f)}qFS(UG00|C$9X?>4M;9I%dU1R6&ZKRVDj#as0uRdHkp-`;FP9W0f^%-s{4uW1e! -F+#&??C(Rgq41DPV2Iej;FgfNZtLXUkp*Sf8YBV3P*Y*OAd?wLq~|;j1G~<K<Ma8v4mh>K3y{lFJrVc -hMUBJ#f#)>NbJ>K`0swP#cAz=GWicsO9KQH0000802@m7R>e9LRN)B#02Uqq03QGV0B~t=FJEbHbY*g -GVQepTbZKmJFLY&Xa9?C;axQRr#aZi*+qe<`?!SVk;BYc3t4-fs)Q8*d`jVhYHcj>}1@;1gmMELIvZ# -{u?z%zpw|8bp>S4*-9&l~-A(6%5a2~&TapkU2+A^Vat!C2wkXC4`RAs`4N^Lf>-h`jZqz$**@Y9N2Q_ -4!rO09M*SG5%nwvub+*H;hHzOy{PO~T@i*L)+i+h7k3@D9Z1^&w%GGPenPCTgL%RXSl;jg_kARl=?hj -rg9!r|)X`GIJ~%*`%2S)*5Kiy_J<ochcm6si^n6gz25tLd<5UjnHfv)JiwPzNBw)meqVGvTQz^W!FIA -Pm81MI!f4D?dxJ0U4y=tQi~i!J48S_d&2%I>%uTqk};I#`oIcLB85rWRb3reEkq#-Rw~U@Eex|;ZW-4 -C_HQb+=2dlAIMWpA3>g87?3Oq$Nr!mG;Q7mUFJ4||tJmKzqxD`^#X{6~Q9?_rH_unEviHwdtC!iu`Ni -|qG7`;J>=yT1A*w~r^R4itZ&!cIh|@CC;vWm*1WTw+7S8s5I&1BJ)B5rQi1Zq?0P=5+yjqCT>vPN~p0 -mZ*onLQ|LBhI!Kb(<hZZkXHO>6hkZaYK)LvEPCSGN@(RTalulMyoze@sM-T0T}EI;Qv>q^OGaODSvg* -pOu6m<e&fXnDnrVFM^3*xrhbH0{Ar6uqJyhH%wF>cG}w%kQMpKrtgyG<pUxAZ?b#MpPx48jacsh@aEU -Y}Fn_Dnuo$IHOp*fg=&#szSGZ{M4~D!g@+#nlOap86)~TUhRPaZksp^BzsX8GUrw>K%d=$G5AnnikGc -m8+j*c;>?_IpkB*|@2y%m5g;mh+#gfx2AQEQBx9$}=A=5L0je_4;F++Pvr4(yYlz&QEUc{fhC-Qp`G= -}ORuf6f3eM*H%Cc*{7t=~;VfVV8(go8~jB+NleGs5Jz@>}OlaTs15qr$?I95;cod{r1?2T4;vH;+6W^ -&bl@qASKb67aXWx<@+;B>Y(Kxh>JJ+}ZH7x5lEy?oligbk1p40@bE!dbK9^w0{iJV87~dD0T`d^XA(l -rv5+A7zlK)2762^G9~+faO>;@Cnfo(6(&X<N0*TY2Ec)R1MhJk&s8!eGSfokjyK=;dS4DE63ICkh<u) --b&-Q_kGC`03K~D<U|Y_<jt<G00xZ~M%3VLz%OP5?u>Zyq;qSvT<@(go#Ch*>F42>Dt8P4OqgPFEdWo -&6x&{qB9sPf-h1pJi!S+&(1#eUnSiQ<T~ePxOe-T(cuUNkMz7!yRrJ&$lkXdkr|?|TVTOd6(qrZ&o;Z -)SB~H4O>ysD{wq)Qv%q|IZCd9`p<BaE-oH!Wwj>2$Ulm_`a8Mv;Oz5w1KQ6)#7IdeVV4QA<(bOOL}Pr -!Y*ug&hT8lmJ-w-!1sUy}=0$bj%$UKxM(yjMH-4fZc-tB&^_K44RCPq0LgV%Qe|2`Y*NwX#R0GCWV%i -;~?#xfD7SMUJp)Dw#{$85~+!VN`Y3x>1q!CivCrJ{^7bo4lrjWdR?i<hsHrxR+oTl8=Kl`x@HpfK*Bp -Mqs7qc4Gf1uNi(Yk4Wa~RJZ>ckf*SPwsME|VWtteEDx<wWlgnM6w>l_1wjIF2S${($3(i&p_U-D9*c$ -1xwl{1cW7Wd_7trweWiAJh01de5N^#A4sw%Q32Ecl1+>~4;V2)`A~i`%0`>rZBQy_0hO7(|-MBgJq4C -i!HWfHqWj+tM_R<~yO{1Z>YkO$p9o6j`P;ho9iWdWq9M~aYWdvCr&a|%l^E?-(O)5S`eC(|H=|tZ|rt -W1PEH3?acp#16Sw?^MoHHt4S(b(=@RL6i*?yrveLcu(&Locc8OyHefb4q2AJ+%_9@-W?f!NN^+{o*jX -?nM7dYNddWjVme$!yYMs7Kurhzi(@TgYh!Bf9jchfW>#JLbn3q-BNmWg=+~sflG*|2o6@NSkWg2X2Mp -b3vrj?TX7(@P^63_%QeQ!5{se{0Vz6z>T~jDoQA8k#nf7%qYl1=3w9i!(bE>m`$Lo4Xu|YqxCqM!>*F -`t;aWbt>4lfQr|#Xfx|vf;Lw5R&{*DQlWW;n1EZ?KGzhJhs$s^e<UdIQr_UPlqz0L^!3y3e;A$nW#?l -y4s>^#mWBL1?G^iej8=iD`Ti|;PJzFUsmSxn)X7Lfd@o5pwI~2Gp769IQzlps+CY!G__N9puI(U8@Im -2iUm^d-pg5TbXopO$tbbM$55dhe7S{(PS7*CR2b|%F30E@vEj016OtcknCGamxkDbeXfmrs52wj)0;e -&jj0XwaF*gJ1JU8g-|aIR$smoM1;_#=ECST4@-tHaM3Il%e|T7kbPQsQp;$EkQLN;%dO}ytJqUR4hcO -5A8V)29#Feqq{5QvUWwg+*d=12&%rhpPUr};s33xZ@XaEzT{i3c@D~Xx9#|$Kk;J4X_Yw|PACuY>K=L -~29ei5l7K@$6Ot`Tq7@<;-nH6qw)hQF2Q_GZKZkR$FLK8~qABqzGxe*@?Iy#Ha<8H6GR>jSL#+x~mXI -E5x*Z1BV1tzwfck~3O9elx!e7cgao2JXp#}Q$tHoC&o2;R#$%5^K<psBHuzR^WzkKofS$6UK{OvpJ%N -L*1<(I#D`s?5P_IJPk!yo^2>OL!J0qC!v!cfqT4&nX^6T_+7uNK71mR+iWoowRhmp}XvbxCN{@VoPt? -!VCfP#o@Pe(S{ExJwg3ZG?&Q3i36+b``6;Rv}eJ7bqS-p3L2%2)g+gTrm^>w5zFzGhS^#GrQg4XkGE# -4~)S#Js3jS!xd!Gav(nrE~lCEA*O#<?|Li}s85avGGoibZD@FY3(??YWHEwg4ONf5Ie@Wh!Uq%&G#J_ -!JczpWG6wCQPhXZHGl}wRUT;MFGy(PM7*CoXWnrX*B3Z}+0|a)of7?iNwOfP#>F5mg&b+~P0Qq>p1t0 -KYI>0W>(rm$=4hZMt;i(q)gad^7=ZO6R6iI(nvW{D^=I{|IZsggA(RQplfx{O|2cr=YKJKC^(DsKXH& -pKUEw()1R}6pr3kpthvZ{Rhq8tT>+Fj#pFo4C8!O_|yd;D)r|MQvs=Qa6H>Q%K;)}@AC*JWVbcQaO-t ->yzq42<d;ildA}kuW*6hC|2{?)c6igAJpR03X;6Euhr#uwlaoMj6pqcJ*#W#RBT0c$m6MxPV$IYnZ_O -O%!SGnkmR#V7THi<q`3a(%&f2BlME4R)2r-?t0oYRKxy*n~hTq?^r#2*0A3Fd1%b>3Hz36O9_3=8WI> -&wZCk0LqYhXP5PK;etOgWU+B931yD-^1QY-O00;mZO7>PegReH;2><|fA^-p&0001RX>c!JX>N37a&B -R4FLiWjY;!MlZg62^YiVw0E^vA6T5WUOwh{h*zXGMk30a+K%jv`&wQ|O7<cy|??Xlz;j};A#BXM_#cq -9vel1^#*+q=5}_<oX-^n*K7&cr$bi^XDJp9K>H!FwZfX{69hiJTjeF|N|Jyb?N|1wk;I$xT%%!}4;ql -EuoumfHW)>l#=zZ-yKH+i<m%x$v*IvZB|eDmTn*E8xc5)QJ&_FLE(w-%D-g>`i54S@7J_x`m$jqpVJf -WjV8xm8{}K7Qg`LV{wxTTB{q@1&EZx$zbqUsZvcX!xQKjHvzdsvo@SDc>ebBS#td0?D+NR$(z@wa~eB -)`EE4!;p1rN<H_6JShRcdjnt{%R}{KdBFUth%~0<`u_JGQcqPpDG!`aF!8amFqS<VA`u^?PH}B4lzwP -V?i~0hv{ej@KnNizA64h<JxP8Xh9xKX!@)?a!GTuKLXk}&<&rXO7>DjWi;>Vd-)T=N+?wc~J(U=-GF^ -pevnWO20s3XiCdsF0Fwk#EUyEW^wU|+>w?RVwOZ#Vp5g7(bvKskx~9fHm>v1DnjlqgJ6Z@9h;Blh?O1 -DjfQ5INroh=8^5WQ@qz^;)KDpt~w_2r;(iR~QDSWE#jNtPm&}S2Ewm7=Fl%79K&!#dfQw5e+x*_>Ub@ -!qlpu1x`p^L3Ag%;2G?L9u-#HtPdeh6-kWob`CEWR&Jbxt?*Br!?3Kv;7JfQzkmEOusg{mg9$i@UBZj -ZMGHPe*PA1TOIc*Zj{UVefIK4xrlwV>Yqyg4MTZSrcRE^1=R#(4c3>qEIm*=8_|Anu*IB8>i1-|-=U~ -VSr^z+fBR%TFCUub#Nu`Uj%o{IwN8B_ssurj;NJZoov>MGX=v6}?GsoR(4MUrlgfbTKoQW%;AQUKRYC -K|Dz_NM)qKMR#YKvpM@Yy@^&Xbm#O<5$B5=(glrhN_TXaa+ac5>>{tqLsh98{qVESdJ9s3C`Aq1EiFm -P<#OuQ;f<nIKE`<$@!jVEx5I(d~~u8#nofqdxULQn-OLFp9IT)XB9(^(Ku%!{!%-%N*+&B;Pi6dWNRI -*4mA+(XxD@%e*$$;;dXcE_h<QAyGA3_1MAMRveoF$cJGZ|F!}~4Y}h!rnM81&6SNxJ(X3S9S+ZX`_4O -jFM4Ulb2;h@>NAfpiMTO}rvNGvtgVSD6PV$3ZW2hYBB}CP1C2;)gCR6XO|3(Cef+>L1tTZ`TWd_J+*r -L*AX!d=JiFFHJz1%;uAW?%D$i^vrEA!i?cYQ;t3NI)2qUmVk(Jk)RZwRuTW+#4)xE7jQM5R;X(4=CK7 -an4eZl@ctOEaHPs@XYgUDA2056Gzte(i;Q6(UlLl0#J-h{dV+aL)58jBJVZj53tUa*6&U4;byB0@~BO -04RfE2|qE;KjC42OJB)g(gr0s&UJQ3i_sNS(GJgxFe>EPm`0=cgNq+Xhg#_|AjlQJ8fOyc~OiI|G^~Y -f+sIi!eH)o35d)Hc*CvWuo#Lvto|N(Qk2l~LJS*g^-q3}PZ5?-3M5EbvY?&VC%@;Xn6a06Zqptt(U2t -tyH*lKU<<AR^#Z-#YA_UYE~@E}wrW!j?kN%&5IdLnK$%w}iy%!~d|}q$nLVp)#AYFs4f?KmY&>>2hiI -8OBh$>WERuO5>*9g;;DGT8(lWyJC3py12n6TI%N;8QO&VbZ!GLg1KJU3ky5_|S)KP1!E8fRDhl2>QaX -~e!jg7cxp%$-(Ugb7XAabuT%~Yaj90H1}S~wWdAU;P8v<~gZ5F4-1kBG+{3uk!^V_*O2h<v44<*Vk=s -6xZa7&puT<AjlQTIYAoYE%sd8dgE1$KRH|UqX<Nk4b-!9>KDJ>Cq?zsgtPBu30gzt;i!fKe!lk_sROF -QWlM(A(V=!M+;0k#PEh3!y%O`+EaC}$9gRHMrh4fsEu$mhfi<@zJj*2;rjD0=(`Xxop&(1gT2zWXDpa -zRn|sJNHeaiwZ#zGjMqe?5yhnz<0de4hls)c8*Vzjxh&dT6^&H3EMie)8dYYIEVxf^48iPJWqa)9pu~ -5dPWTM1)Q6@M3*f);q4(IgW$~rK91lr|XCb9WepSkh;s{R%>L;|gkjAzfEJqzr@JiQpaf!$UQW&ZpL& -j(0FE!vUXk-gBc5fHVF$F()^@yey{@sVNq|F*&kKh{e1p^<#?7pm~m*8XXA^^=)Ta>O`{1jsDu*=5VL -;nHl*dfBQiqpK*A{?*7N8VZ5Cw!oh@z>)b?-e6?DK|D^`VtJma(@ZlS!`kT?<}^&2<q*Bsn%L-3rs%a -TKhQ^TTD;RL^0G#p~9$>nBvu~OILT$7$j=l%K_0q9m06qWbfwCzZ9C}w77ltAXdF=n@LVL50eQ_#nt4 -g{PJ#!b@xEmToquYet`@A&I|OxOc?Yb=)a+DLWe|W!W&K7dXNh~(!so6!F`2kMx%){{n5&VF?i(fPvZ -f4LTYgSA}tX!90j#mKK}C*p4yF!&TWJcIwG0vJAxqC6t5Uv2!+u_E9TvV{ftL|rL)WLMMaPThnUFSRX -q?DJqYj6y~b}uJjQ3A|24#8JKEit$5~Now8MmUIti(NFGQ1hmxJDJra0_`0qA4CSSFTBX#Y4{jfJr_; -n;r%K-2(Z)9m-yX}Q5DR;sQ{V?hly8fp{Rs#0ZEr<mBK-oYW%l}P1MrdXMwzCpXZ-Q=>k)YG`(t_0J4 -f)jf))VS3nP46xM;f<~VuXrxA!*ROlKI7Cgd^&-;n+Vi6Jvn_)#D%h`#lRh=@a#_e6NW@5a6Uk&#tOU -B^x;3mmOOsWUK*q10%|Y4NB{SQ&&n5wPn$c24J*a>m>t&u*$jGy`!Lg7Xm_8se{k3M59uI&ZTGOdLD* -yOtBf0aw{Ik*Uc)yP!OdlzQz1<)zC#27du7(yCORZ={u(*lllS(#GZ1vW<N9yM#b5VnGj{iiZ->r)+b -!>oeg;oF>}D#SUfOo1xxZ_B8XD?fEz*!{N)rTSht20?`bOivfy`%v4#+d^Knm!cbGkhDa}CgLW3{^zU -WEtLD_DV^K!4Vj>^re{|3humUF0vs0J^xJ19>_Xb>jZDE$z*%>k-CHBTEM<U$65Z>U>Un;4yC=uZAb} -*j3V}g9)MU)kyzKHQOJ2afX3@i!fHjs1NR-oC)Z^$6lR$_~G~vLa4}c@y&Q*!&fq8TCSkyg|wwx5|_z -S=m#<TPxlShmzxY8LW@}BCC@PW@qY_=1P!Cp^JD9{k972x0Z<Imwh2j%|J=tcs=K%6=!Q#wv}@q09%U -D-T#mb<zD#&?^t0dd7wA*|15ir?1QY-O00;mZO7>QMp^g_h0{{Tu1^@sX0001RX>c!JX>N37a&BR4FL -iWjY;!Mla%^)haCv=I-*4PD41V`t!Kp7ca`Cm<9y$XlFkCkvK#>4lvta0ggW{uWZ937F<Qxve{`Zlxd -_THie#l9b`0*q8Q8C+rd;|)GnN}fs<G#$h(OYYt>OuQ}-`G5U9WlhB^R$JyAJ_}>jk_Tla@rQtVcpVp -&~ZL}xVe3Q_wZ{`6dUZ|3&u4gu0z}77E4|>!l8o8cL$u$Y<O%6;LmiR8U>CR&Iy&tET6|XdIz`UusGT -CojMHG#F8Bs@TU6w`mwgOLtj>z1C#65k%UJn>mvjHodPJO((j7gGjb9-IYA^|b;e=?_a8sh0H1oCPIk -sxctY6f4T63OWXH%0w}D<iPXxb?6mc_M=L*MApM^^HYi>;~tJ;y5D)!}UV9>OeKUI}nI05!JZCcHnKg -qaKC6-)(^Y$eur?+@DC!e8?)yqYaCUK2Y$g?i}PmK<hnF^I?pIy}<;3TO!L@B|}F#MsVnRMD$3+UAEG -(xK#kh6P81g8)T5Lgf#MfQ?UfKo*AH=lgx|EW}wK-LRz7%jDnL}np|^$R7N1jCD}m}MtulP{2;SJ&5| -_*dJWLR3dBzJj0Hmi$JBf=PY+Wd(0vzx{CmfvIuUfZHMNL65N~Z{of_c+S9(D}<I~=aD(Zzv*CyNlRS -V``cB{XYe>6i%cw`*B*tpmN9xM#2@@AxX6|qFW|{cX%i5B({{w4y(fQcjeMPQ<StYGsqWnAn*cc|gmI -90XN8l4*qZ=@)v;q4H*;Im0WQ}$YyKOJ^7d-hX_?tyq`TSe72G*^Fm6M;kQAQ!2dSNbW9OOVx(C`KbK -$mF^B00zuA1dNYcMQ3B2{O!Pr|nKs3W_Z5SRrp@q}{ek<;L;y3w^#*f2pEs)<WqvQ7g@Z=&C4I99+0B -epTkzr3(RB4tr0g#@cZ9t>{wvBvXDIq${$M23uf%R6p$eRhQhV47rjcMad49f_IWzogrx5`+(@9E542 -SO3@R&7-`y)4zvWht`<2#TdDC0`uORXGus5FF0Q{KP30*4OY!kRpPZG%i6dAQ7m;Cd?EAI=99zAd3-y -nqdc=*CVtIhar$zJvG^BIO9KQH0000802@m7R!z3%i5~?30Duhu03iSX0B~t=FJEbHbY*gGVQepTbZK -mJFLr5ibai2DWo~vZaCwbaZExE)5dN-TaZ^7;9&EK6HZ&;a4ngJ?#j-YNQfxz4sI+vlxyqzKQg)4P|9 -y9)^<qa!8z6{89glbSJog+UH?=knD!p1swTfhT)wX>y*gje5`sclkN~1U6_BCyT!}681ZVGQ|C$$n)6 -tPz{FmK(bD|A<WEy*$^Hkf6TD0}t#^6K3$i|pplo7=^2+0ColMRt90`Rm2Y#ZC5h@pAD8c`%sfdQ-~^ -lL+X?#8Tx|Q{aqZak!arc(YpMpTr97U-sKM{U$$O|FjiVgU_95@ZVBY7AJ8uiK3{$5;D^$MPX%)D$rz -GRNG_%v*)nXx_ai1iR1Wkjrk`FvgEAOrLdUQ221%Fgev^n;dLWizD^^*?{+OMtjVB43)hQl_~FTqzzI -}RC<j|<Tq7!=6Q$8=gUZ>oJuu{lt}$xp{+l^a`Gj*Oq17qGgHYn>!1A8-DqM+tpB;|=np_Qvs?C+svF -OIK8_NZ9+Uu}@opfuc_q90d49V^|)kogoasL@|%4}GLwXlP{2Vuo+t|v%7l;bT?fiv9UnZb4=NM&V#A -jZ;}!V6{&XtzeQlNQqxl*Wmq%~wFsVnxtq^`3WTdAZ6esnCYt+je@--Syr&^Wj66%UcwMg@1bN|9c#q -q~yf&Gek&`GALR(kB+cVku%UG_=5tfZx5!gwZbV^NIKfmR0Sx_LLiFABG1uUpgKTFt$2*%AbkEvO{*y -^;nwNjTB@WEk}&L}BnWx4Gy9NLV8lh`*1B1(yWS}@QH|rUHRiJ1Pkj)}MpkYn6|gth=%S%>MYR*8Prb -99A#JdMi|=k<%+6CtJmqRxKRSQ<-P1{D>}_<7Dmlq!N`%ODL0Hb?#+9@4c*12Y`=AGWD7kftWRhCych -_P`k%+C91eh~IR?Iquy8r-h#?Lv{4&K}>jM1idd~nLJv}{p2TUB~Veeh-Jf{*v`<0F(r(IB62B%k25) -e`LjGg=Tr?Ikh;goE80)%bovo#nx5>RMaU0jFUZT6!z3ToOuteB9G+ABRD18tXiD1>x+Or>jcucv`VP -uHUn$E7n6(ff(sWK(M|j3K=@9A~w;4qG)!)1T`ojP@P{|w$o-=oyc_8tK|Eh9`<(Rus4;V$A*0W-HQ> -IjFJ=(TcI%atR`jG#5CJ%kRu^0$&GNR`@qEs0-;kA${<G%*I74+=!sY)nu-9Tfr68?a}y?ZdZ<HkMDF -;q6N7{IvmU22a%pP{VH{J4k6kU1D=Ts*x0u2Or^gF{)Td;$gEKvMPMmpOkk#P4v^SZYHWCkjKmq1IL& -8Px;OSxU1D%2W@(m^Rwh24v&m+)-i$ewsx)<eeQ&<_@)Jg0wD5NIyImDix@u;Tws0Z&a0+Yw};Hzgn# -~3R;3%ifoC3T-&OsYha!czD8`N#%oy&qfyHj>rKGIM0kg*+YRT;u{B8bX*cCe>gb4+(r%JX)1FwEPI8 -j{A^3WTgLDA<ba$&>LSfllEOKE&ok?8krY%x`GD8`Wkv?Z8)Q|tOICx?zCHdu%f|iGQ_g=9crCC6iIt -w=nLF~KLT<)(}iC~p{8B^`<qXgo__Ro!g7pB+TYbqFSDdB3Xz8zOFZPvDiZus8q5DP@b>{3p3lF30z1 -}`gS!E{JyVu+$qG*Bs<&($_l{Q89t6{Y&S<RH!9g6Vl&iE=+0m=momqO%0FCbPGSW_8b~$?4yVJn`15 -ir?1QY-O00;mZO7>Rn5-6xk1^@uX5dZ)j0001RX>c!JX>N37a&BR4FLiWjY;!MnXk}$=E^v9BS8Z?GH -W2>qU%{yuDglbx^rMFcXt#7L*0e?2wZMYFpe5R7E0F?8#dQt;_ucVD5@n}N7X*nd^6q%gJ@@dGB+2`( -ZKX0~)rrz@DKuG0MYd9X;bKj;+-%5p!&psLyk@$XB}p=y@y6QJa=nIKvz3w!VGZSV(J-y)ni0R_%6%R -0XsOang$-}*H@9wfEynaKAG)^ohTnLL(ZkAfTK&u07w{w}{=>{|Y<XKOZked0f;i<DipMKD!)qOkODd -$`C9U~4wh*+5Ot~;j30fEIYsp#%hqwDjXonQ5J|P~n*~iOw?_a)oz4-mj)!SzuUOs<yNuHAQJSUH{*= -&Z`K$=ejNX43&SN2)DuyGd)+*Yv_v4|`z%BlUkfQ09y&k=Xei8d-DXBQ5aYxtH2bZ_P}0zXih%dbY!( -hx47hz-RAh=X>+NUP*6uUO^knG*&XDGRtE4P!==CDpvNzO<pDqN;*|+wbp~=@fv0e(*R%uI%Tc;@X^H -I8t%NN+Z>dfT;_Jc~#`oUzeA!AcCP4HM9t4wf~LUxx?cRx><l50L{UG&KKe70F6T=>+OQ;-Yz^Cn*=w -5*)3BV0SZ?Bdm60WPRE3!@)N2F8;-6h*X(Fhn(Pl`13RgJ__x5h9{l|wDO`<GOeV+jrYy@chj+PQ<(E -Y%n-+?=<TW?D)SoY8Z}%x%mp-|?$HG(V6pmVUs$_Ta3;y?fx~uG^6ozsE#XUuUz!}6ulV=(l9GQ5j6e -tV)9%0E>L`aYz*@-GA7w6%VRMrvjvyx1Uhrm;6%1z8>JXcJr2bh}GE1)3gmuA333MbQ~>9iqBMjknqc -S|_51_tcgLbrf&nmkH!a-Lm3zOg#k0<^>dR$!nSvQ4vtOE4gc4z8VUYP;XNg|u`5Vx&<;(`0}u$!@#{ -mw4~!$AmiBa6NcQ*88oQNPE8-xgh61bl$I9Fq^J69Hiz{i8<3Q;CxJEKrSghOFj-fv|AQ~2AK7`0PT3 -u3MA|}66-W><9_{agFz}LVB6&agiaY(px9aVlW?6Z%>Ea3u-vtgZ7g@C;zEyG<Y){-K1ndzc!cak3%m -j-Myo|EiwkUxV;R6+8DwC&GtBcb5@{dB_XK)R(Qr7;gVFtLdt%K5Q?v%rP^z<+YEJ%UJ0}OYq2XHNJ; -Ve=%14gyB6-&d!y7j2ZmHHVo>XU`00wXd39zHdSgq6Xh!A4sk+1B23cgB8+0~V;A0`V*0oh_%F(}ZVV -I{LjZu{%!2;xYH2dw=)K9OB3bMfVg`U`gnbJzTEl>@a~2_P<OFNJTwR&61p{Eoz8#k4Z{l&q3{bi%_U -8~!I%)q#Ll1QZmt@dp%i%=09UxaMpOq}yN8!EI5oQdTUTT+$pL{$ZCKWA0gGW;a`($iz_OQGFc*FBq% -b$V$=<hnwZjkFeR$=Pn8rJ2H%s1^EEgbj`ym?=1|=4c)<*aEnsQRzPVD)oi<(!U1!#?2P6866V=0j$~ -)iSU|SSdn-Go0GfJ7_*zKCkUvc^mIimyG;=dJP8<WmF@?h{<mU&d*gUXwG=##qoRgv`h5__X4%7F9w0 -Q_Wo(a+K*+&=Ue^J(-FlGmayG|nK$xRUd$bxI~T8ev2a4r|v9#ks!?wK*nlH(|FyC~kKr>GquK^)VDw -yDL^8;4n>NU|&<_(xiIj@b9$beK4!0|TRdkg;xkXWX1mYdxJ82N+Sg+{|a&N#m>sj1_hgf;+56!NS|m -j>91u=*ff)PLe=u^u}thVk_u1VkB6>9a_Wi9h(5NsCfuuHgwWwoWdARDAo<#plD0vHHE6<u2Eonnv@l -5@}zi-Gg5J${bsKnJU5a`__@T!#q!g>)>1&LH5^*4f8?TBhv&r;@34p{G6xS&&TQQwu~sn+J?k9DIi* -*a3%ulE1jhmgd>F*tYq`A<@lDqP<jBy=4xvlg85e)9Ty3UIncFnKUlZj28e2PR!J(&cT)rU3FU0WtC& -#G$0V*^BVt>f+04S}~+L;Y31oV^G6+i?en!IK~Pq`5ld(OT@d+RJ3Rc+7JLxLx>8&Y#G`vsB)N;ygC< -v<?$E>4MHTev_bS^lcCB#$lcK5ITY>wi#70|XQR000O88%p+8FRk9iF984mR00419RL6TaA|NaUukZ1 -WpZv|Y%g|Wb1z?CX>MtBUtcb8d390EP69y;zVA~s;UFZq(ZrKi1Bn+8Vz@44w!p~Dbm?@6`1IBVqe7U -|B;Rk_0ZcwR&IAa-N3YaECIw!B3z#!yz|_L3B&VKJhRonF1d<F~H2ao}TMa-r1bdgEL$}2>LCfhzA(8 -nhgO44HLQB+<7#9;PI^WfePfC(7)TUk3<}-XVBc*I)FXWWv01*$6)rWBIw-Sz4{5v<7<?SiE9+}Vckz -rMPIC5Kp4P#oNwa=Ccgl+@#ry2Ov*PpvQD_t++<-29q)hXwqYQ4lyM7fTyy<P_+i7VnUT&LJLd)u+C9 -AE&6clZd?hr9c#ANi7hB0Ekh9DepQJQIVxSBk9k!aC)W+KC9u_&+em;Qs<XH$}qnA8|{K1vWyvVh4(p -^cOW?T#c$PP)h>@6aWAK2ml*O_E!B041lEs006%Y000{R003}la4%nJZggdGZeeUMc4KodVqtn=VR9~ -Td97F5j@vd6efL)o3WAjzTj{<Eb&)h^&;pADNVk1476dI(77<F+l9atp(0}g?sT*xMn-=whB@TykIXs --9MAay5iB$W&sP~IPtBTlD1MfumsXJlpihOLWP&Jb)a^E(RFT7?WnuLnlat%{SYlSpPB}~?@{Y~UKuk -ZO2SjdHGBs<ZD+4A~o)9xCrGHy(7qhg;q%~VyfI={ZI)pA&Y9;j6mWOEA+nMn>@8^|Y9wbe@Y3*!ZW- -`m!fzt@FYxzQ(HDa$`7`(Cwm{;SqX_Y(&Xit*#WyvcXoq?duK)nd6=AiP|YO^<W3=l0IYVoGaPaY{jJ -kx2%5|H8g7rsL4wGIa(~7tBPvFFJC9T<Bhw3_{HtMF&;Q>a6q=CM$Wx4TycJ_(NN-N^6^FbtyCFLSxD -cQE|C;MkFtlgyfwJvd708W0@6M#cio_pC2y>fJJxAaH{!%GQBr3yrjffy(H_O9YMD+ct{8Hn%h>_WE- -t@w1Uy$VKG=MxXnsh^WzAC;j#dNa$}v<6#?d?0eR80^1Gc*cb))|cFG8QN(m6m=Ym0fP&J>%bD$mn0s -D!u1Zdh##LGe5(<Ko=!ZAn(+q;rypYd?2){>Xzr6E?qbAl}XApB4;@gGi14`qx1EXVmV9#M>WlAku@$ -22ffNVZ3&t=EsO;5Hg2xeQirHsp4G<#dVRvpPkz{(5t``C%~k_qZsla>ol$n^uc6>@vg-a05m_s8Z}p -d*t{J0(7!E-xx==rDKC<#|$(`okX|w;IofqIWo>11yC;j&n%lE)P>t1@5p<MoC`=GJLVg=xnoRilQYZ -z*O&m>23Wbd3@+G*FjC}r1R<JI9jUQ77}>mMKmriC5mmK3ZSHl;$2{gK>is8BLbOEy$~gMNf)geoOcE -_aTD>42WezpD>jZ|V0{aAM4bSmVWtsy(5X4}?7gBDLGdobB!H6ZcoKZ(pjP%qayA#Qnlz4)%1d^So^C -&cUjm(kLMeaU!8yhUUO2mup|E3eqi^0w8iTDooUpRf^dfQB4heUi`uVE#0-Z+z{qhVj*-Hl`G=-FRGT -)kfnt$I@WUyxGSLOi+c`18|U*YgM~p#4KWl{z5$*nfz-9CTeRef=6{*DTM87zyT%K7_YIUT7$j1|c(T -1D$)B%*G$=4A2tB0Vln$b2@@n*VkV~<P{Fjo7qe#&p@l))deH;ph}f7gl|L^p6N7KOb%49AKtA$un+& -@!1i8e4sD?{fwRD&bvo|}G$UbA0xS#hacUd)05r8|;*kDm>Iv<{L!HMH?GIr}kkAd&ytbq0%tN<borh -t+o@Uhit~6>02*U==?d`*?E|^7BsW24LK*BWG!<0V7_<F^~Wb-FiTEF5-OimdUM)oja_}ne_S@IkN7R -K+QPOtnteL%BD{)Dybf=l7_Ij_QcIpNsc<z)cHhZt~dyS{z+1`e=an1--a<di?QtUE}Peu=m2G%QOFo -}E&1#3zcPxAMqNhJce6su32aq4VUbzQOMtY}u2mP#3rZ1U?S%vqkegTy~-M_-};e;vY~;0|XQR000O8 -8%p+8Q}91`vlRdU#6|!B7ytkOaA|NaUukZ1WpZv|Y%g|Wb1!FUbS`jt&0KqP+c=W{U!MZYOv+RuQE_H -(AG*^{GLG}8olR1<cjl^Whk-~)!h|9<1Sv-~HQ)WZ8vqHuY$uhiI#ta?B7p|b=*O?S0n6<!%L|rd>$O -bRBdLF8D%kO2V}IiJL@w>mT-a}Ap1^Zxo2&M-T>MrFRg6}7wq?a(2h^Eq@sm`=guUApGD~?fVHf2t5h -LAlCwD<8(?aC%DiEI|LCuuy`y-D}vh9|q@r1oeRl$>lV}sK?&+<MJWg!z4Y^91UiPtiYMS3AV!z5y<b -_qX(xWWnB$XJ9h|6w|+T<-EL5~`ZemVXjqq^H!^Zy%{(FLDKQjIy-Iv&8oFM+`pC%VP5;U1bycbtbl1 -A>L-i%dAXeT2$-B&peUM7kkY~rGNjd$2!qt>1QjM#<aw+$U>O^uOceKJj;p@CmiNtm(fq%8fH8hjYlJ -31TaSyY|+@~z&^(YWjfTvycvx~C|e?jCPv7DwJ3g~XMPx_d@I5bMjO3)a}oZ0dUpQi-P`c&^wsJALXT -Voz}lTmgl1OmeOSY2hM&x1>;Ze9i<SHwnD_ow{CG^y|HXgJa{Krys9(H*g|e+o>$m<7bJJk_12wU-$z -p5^oQpQLZSd$jYI0t#VAu(hX_S;PN;gjrY?q5Ee2LjEQ^hnFiQq~wCDvP!7K+^npqL&NEaJIfe3_L+f -UJJ~{QPy_qP-87e7br*efebi_v_#P{N#`CJZKGrpS)-Oxrj=j5@kCaH!HFzOU6uXK(;n8g@B1*9k3%{ -*fa5&Z$Zb9?tGPHvn9_1cz!ejLbov6^FGiwhasgB`NW}oL=F6_o5#<_KbXenBHuS!ZOSE*KGHn&FF(x -Y*N?|@)BIwC9KtSB1qw*k#!eoGn;D6v83*iNr79RGK4{PlkOpoWIy~9Iy34J|WyGQl&v^to$W+F-Vrf ->eB4bPBSGp<{UnauzXTN}YWH*WiR)$z2KM8hpGM^cC9kDFO-&gSa3V#Q7;g=ug*N?{Z>pS3>)*;{}$n -uZx&QD2|MzL6d_-CI~h=jupR~uh#_#76JkJ<DeY?)=r+;lC<Jf#PIEf>KSg%JCUkzSN=FhQ?m;Wzc&F -cq~5cGLrodGsKbxqTK?4@vLs<0#2ep`WX0Bep`pQ!NPiK~j%5MX@srY&=u#he~bQk8sr1qZNpnc{Vm| -2W8%armzBJ0{8w%F_G?No~5WjY|nFvJEs^~S~9XL*l*B2+DkCKR;p-T^VzHxzuE4v<1=V7lS+YanjIg -1|AbnDtrA6O2Et`~XpCOGIrAorzW(y=?4RMq+3BgLCkori%cKZ-z6R^LNB+G&eg485(c5ProrR3HqS$ -1yZO_2!g-fso*a15#AHLKAfKKreeq7HhCK*Y%gm%}XijGvF+-}PP`9QQ_x1vvANqi-e)dUSOQ3dA){< -lxU@DolL_RWlUT`=s7mKptD=)Cf+Q}p4#@wg%&SEN%;%K+C?y>}Myk|zKUS{-RTSPQyNS%fkU0Wk2y$ -4O7xWXDaq4@f@1`sFATngZ|zq<jU^fX_%gpyQ;~?`9*T4ciJ1YsQVc0n?x|+$oeH0rO;NJi#a!s;H@V -ujxVKF~}uNFh?UFp##97V1CPt>`fo(2jn$4EBG2M4QI=or_tuWYnO4uQ!-%@hYi<5@Pf!YM3y4rrCvl -~NX(FAl$8lOC8=q&mTcy`Dq#)IMyU|GhFKnJLLek$lqyMqRY|lxAy}n>eY<>eJ#Nc0?tYv0sG%mHv!U -_vG#be-p~OpAz=Q=s;HZg314f4PGPQWjZ|vNqXIgsKO|dYoLs&wz@Em~QHQRw}y$MwjgRU)Tqg$`(O_ --(0VR4a{&fA&=WW`~o9k65UyBWBnX7skH1R7QaH#|>aBYp3Lqm&T-V$K@o>>-$E)*<X{h~L?w0(tENu -l;DuRv?cN$_Py&Sm#-}Q$D&O?D33TQID-N>S;FEj}kS3IY)%nYpY~|Ma%SoBdxxlnK?NsuW3$DQ{IBx -LN1~G1+hXNfaqKOsfhT5Ct^{c_QceB9P|$N0J%3+hwU;;WCR#)#l&Zc;0-;D*zSsh*=ihC+kI4SUQu^ -Q(X4X76#ztxVX>5f*Q<a*5W{#JOXR|Y);Rr*kq#^T<&ZK`it3B=(bGXsQ!01|xak=7NEL#|EL*YTr+? -FG4Kr)m2t!1bJ3y<7h5?JH6kiK^Uc@5LYu=!%0*Sr!T$Z3?oc@OYr}bY~t${7O65|2b?_pI$noZ?_Xe -{Sp_9@g7hzn8+|9CR~Mk<J(=q6rR3G7o&-0Fo{K>+e7cfJvF{J>`8juG-y$b8>}-)go2j;onB?sa|8; -xZ9wt0|jbkJ>7Sa(stIHS8_vQ{~~w^440VZDm8ZCS<&CS22W_Xp>Wz%LHw-R-*9){3iHS=DgMt-{;AI -Pvrc}WC@F6+ngd;qnD_;-~d2_Q8jKP*eql~P_yMZh=|Kly;MyZf-6~M`2k@q1P1Uea9R>4I#U=@_V); -+(LaOeWAp}~v>;^_5Cf<p_(I7BH31PdDuTeRD}v-HznxTrJk&a~@Z=f-Tj34JH)`_le>ls3`|jd&&VE -6VL5>E&0|oAhOkvyfwnL0-AjJ*g2p#hSV`=vsYWh>Ak_?g(;EgzJkD3_Z6@dkW5NylAjL581$pHr>b0 -l>#hw%=%8r9hitv3aI6V4QET~l!bnxyYtrES%u_6zza$aQP)D)*YM(fD0#)a*^W2*H+2OVM~y<cDrcU -^!~*gua+iiv~8cV<074{+WI)o;IhTlV9v-o|J+TK3(z;z<pr)L6E#=z^9Z_5wt|K<r2bvxjMk)vJ&H_ -O_mjuiCgv1B4;6RBnDAf&aw#ntqQt};;66ny!@3{rsDGsR1x;l%D?6v`yK!JQ~rnNm{P+Tb!oYBP3Z? ->RozNkicnkSmA0VTh^SeX%e72rzk@{lQEM|o%0_c|plqY66%3+>Q;1^ydYA_4!d6n}4bU?6T6dqe7FB -XQNZ!n8+%fpNGpYM+Pzrd0Iv1`)VNukO)o(_4eGm#}s{Pnr+izqR?6zymwVK<YW5f4?P+O859OL{W@e -Iv6VhLa}!%zo#1*(BboE!wf!VkS5Co~ZUY+eHlh{m_t2!L(i$qhdMy*-x+C27p)%-1G_<_abbYzS&R% -o+v1BKGkkVqZ#TeEdk$(@%(fY&ylse*8E9{WNR3F1~F+9<b+nmYS;ZY_#QlVuAwFz!79wTG^n!DEC!0 -acy^3z!Q_SS}xHTa#T3Ias5N<Fx4F!y%!8<;_f<Z>kR&a1V9fD{Xis07zl=IQK{tO?twd;=#_PVqgk> -S70{_&Yg_Iq$>ApQoxpSM<ivGy36-OMHl!jnHYtUH4Iq#pYU0M}%d#b=BK0O9E6!g(KSsRmVs#sxXn> -QGmH`J>n9{!m;WU=OyMy-2tWH0<akoiIIeru~tTt7(%d?%xi^CCBFcN`zHA2MXOHtxPs>+<g4_>rl5F -}u>a*yVpv{9=9fWoPUaJD(@ub^tt-Zi8RL+OA_1FVMg3QZ_}hk150TP|;?S_4~3iPWJ!fpH1OU(*6s& -P*w1(p-xp;|`&b!@3t5U!iw|%{5Uw@!V<@Yyl;UK$`0O3~d7Ft3!!WHDCa-A*UU4V0iH5cBYj`=(v0D -g^Y<5mXVtHogF<?M-y$qakiD}XsHic2^7QU=EHHvG@=|d-QJLux}D|PcIilfijiO}?F?PZGK}Wk;-2p -jy(;nr6V%Li6`4-!j>mUl{;@O3lMPSTq8YD%;W4(wm=-c2V1a1{PJ%&Wjkey@>{@s)PcKehhZLl{fx! -Lrqiw!BeD1a4JxSfR`9{r}H*-JtLog7Bnp{dJ|BKSiXgHnHSj)Yzq2D)%D)p2(&L1UxIHWW}Ozm4P73 -^>d$R-1Qf<UNDQ-PIa4nsP1W%Q|E;8J@xf6NvOnn9gcCDEa+t)++R1z+J+DV?}Pb{*zegsHu3(-vcQQ -(<q(8R&|6;Upi8A(H7T^Su**aLDL~>Y+k~pe$ykbEb2%fUlR{K=IW)+5arqljeS`62O9UlPjV1V_uoc -Khx=Nr4)rXsfmfCK@RwP+(Qm~yM2@xXaqxOVuB3H6n1}&**LEmgxFNOn-L$ge*l4}6L$R9Uc|^@|6)q --;VA?3Fc5|p67Vv?V#MW7gX6!pdOG#8sfxB#FpIND%}nPhb#8S!-w6>bR_=&2ZrAd_R%IIDF59XcW=b -i%06rI{UY)HRg=;1|Zq4E2r(u*kZ}DS_nO)~YFQ+EQvsfnCa-I&id_=p|{|+Uw_eD3mgP$hWxJ^Pj>u ->rXvobq3tr14<TXD>AUCvq}rXXgQE6PP1*MkMI%3HS0P^Vtl0qolIv|VF!^-XjI(#?w^_nqdT5KbFdE -LxQ&4Pz=|u`JiV2bPK1nLUK=?g(Tz8pNHqot%%`6X0bRT59&aOCcbQF+8xvSDW^17bRn8Ca5Yw)sx<= -OCLVzW?jBP-PC@fZ5*1k{@u!iAI~mxKvSp<qN2gKy+EnI`MCFKM=$ImCKbSHrOy)AfVQep+DZOt;cj@ -}Mz{6Epx=g;Omr5cuDJHlF`>#q6k1|nr|IlZyJeB{=u;gLtvs9Pa^~qIyzIx>(8~dfc>4x=)8)V$XW& -75O0yp5@2;rZ;=1$Xi}tz4d=et=l&Jl#e0(toZom_hE{K^%Cq~_yAjMTgCoY+j>jTX@P$HRwKL+@>&E -hf<b(}{_D0eY0L|DHz>!?s2W~uO4(AOfl9?*8X18#YvEM3VpA{d<m3$(c6`9IBwF9?N(jFKa|Ci3bJx -`r3fCqZAxXWihN^7#RKDRX5rY!QWl=3EoH1arj5Bp2@q3Xdo3?;T8N!e9iRvMx4L9T|Eb>T@8s<B-c% -{Ojpts&{=)#k`$fFBM~d0c8j}wt`1s93RO58y%Jcmw_1vGL%~mCOIDpb-xa@3`!<VOtWIc^Z1(zXvKr -M5x%c861NnSQLgA<*TB&X`1jUW{NHCk+4RJUB-!M_MH*!#p3D<&w(|^&Myl_Cb6qj6BXGb><S;4a%-c -!;lV;lVl(~yio0Z*P1WSdkE9|hydrYxV-$8?_!YS-23x|wz_``<W=ClP(8_)4l?Lz}RTYYoV@#e6|or -UAtm`<m#L(^QW#pfN0ld-N>LGb8`Z0q&^$HNm;nL{NbIze4Ub|T_Vk(83+Mi|Kr6P3#+H83z`&^Ku;K -KGPCbuqF>tZLC)Q8toBkf|M_NrfUN@?g#4Ps^#Xb|q+V37uBUT<}i~30^dM))nFL<?*${)+)<G_TH#1 -p5vE0do0t|ysggno<AM#eh-yD$<jS0^Q&VVxB&81H;8+&!lsWbW%>b7XFS4<Q;rR|sMO_qmWVY^D37h -!qenpQ(IbLH1z6a5GqHXgu;*-5Vi6ES9RT8>)q37)qf-{{3HO<E!o5M~Dbk^$6?2Z1!yJ-W<a0K|9MY -_yzG7BeqYj<#13G|TowO$bqm2CVoZWKVzFyT!YK&2VIaR{dRH{Hff6BIa#9bd%N3Lrd_V2Sd%nY^#{$ -ZPnUc0THjKleJVa*$aL28%jV*;QC1^v&J4Ltv=<-;Evi%F|dZkbilBTy%pyqf7ns9TDv=6GZ7UEMr}9 -W&sto0R~LP)P}tB|cz{NydRbqC=(WtXyvlulh2icy-4a*4$zWz=Eqn`F$f=dB82VqU~1|WHy~{CEAj4 -(CYV=@?M<b5q4M)o*b$!p|mDtE>8vT!B@S<EG5n(;0hQm9m}YqU1(2-R<|+?+ptFi0ot~m<;0X()@or -UMM4A8oN(jfj^;=9=EKqKsCUlQ0KmH)x~kmMG_Q`Yp3bhm_gswj&K}{K02^h}3~XEGxxT%m7d4DgoEm -i(pWOT4!wJR?jUx~4F$d|MGcbpswLCc5-%GdS$8PoQ__+jcvY*oNTo*!v&dSvRzeBM3!DEkm4vi80Ui -WK15SoT~I6%Z9V97q`?m%<vPg|Gg?s0U#i|X%J*Kb7PgS*)%2Z0t)*01B0>b>l(`_@-6D$beAkA8Uv2 -6OkQyAl6k0Hr;BJ>BLR)IrVy@UJRX-{zP#nk;l9?;$vZFv~bgMpp!3o+vbXVXKss%)nPco0L78O(Y!} -xOw)9M7MJj#8b_=(Xx7pJ_{E9Wt)oFS{762*9Ou5iOsEc&^|FqT<e*n;!EY5g|wVgy*%6c*G#5<HHvN -EN|3q7>GT2mR2pm0Fg<}ALEw!$B6#2HqRw2ZXLkv!y<LR&EqGa&6KxF;>J;Q!Cz$PB*#QaGH$gF+E6O -E?r^;O8!<%H!Hkm3Y%}aL*al&+=P`kn-?cN-3cmWRLNN0H^o@TSh*LY%J2%TfYC+Fv{^$$9=A@Q^`9i -FR5-DLSE>v4^1)>rJzt%O&ycwH{X0sFC}qjwawa@z(VSVak?7;n(B*8&698;w~&7qRTO#!Mn#LEwGE^ -H>?bPdkdQ6&0_`<zToBv&3_J7?U7~;5!%%OBq;GT$XF6sjmP|+JYgL2O|KxYfwFmmDV%;4GVtu=JV8C -eMXMYj{p3Z|9bMoMLxLB2`sw+fuifSn+YI&ksl@yV{p1Vt8W<V7^w?~kU${P*u-sgv9P61GL=}y3>66 -GhT>El=W@=bcs`$WBQb}8XP^_!#B?fd$R;j2WFEKfyJM926x*Vx5!rEIz*o=7nyV``Nwa1`f9y`A@rE -`x+$AN2*?QHetiJcy8^ctN8?AMWsheHS>%P}|(&mD8cUHdXQuml&*Slj_(b=GJ8*jKf<RRwQ7rzLlH@ -C(d6r*jMyUlu*gVC<#CtV^%2AV6UILNr&hy3`2E|Z3o23lZgT;%>Z=(R@;;Tjm%j0Gcmx1~J4cJ#JA? -xAywmF=bj2QWbsKearQiJ1mm4_zWQ<Uv{bFky|q?zk>t=ZWmpbJuPfHBEoZ@uIr|$Wi5r?***x!lM@9 -YhU(dzzG_*wz5snl4@8gc-V`d;rVcAaVNsjjBKGCI)-0l;7a$RlQ0}+oBiB@hN#J{hzLKet0@!<_LK> -~B6_L+3`p-;Mtv@zYj5>6Sd{ZvfN|SO4NxCa)&cyU$SIX&|4>J_(CS$ju+}$@kyI5z_AafD!M(RI-@3 -<Zz9>j*^fb?`;^Ikp0)V-5*9Gsy+?p#ihc9^?hx<s8nbOGwpMYKiu62U%Hz^a6PU#Uuz_XxWFexWBv3 -N@VISiZU(zF5e5J*C69yE_QJ3;0M|DZ}P))MPHK46pa=>GsvO9KQH0000802@m7R+Gz(-}?ms0DKex0 -3HAU0B~t=FJEbHbY*gGVQepUV{<QUWpZP6a%o{~E^v9xSlzGNG!%dDUttAJB+y1<;;Eu&a0LQsY|}RJ -a(899$!X(}*qQCLw?h2y9NS51x9RO=OoF_$cFs9IAHVbA@TQf@kV1+L-?mI?P&4lLYPsEVu^pCD&o)X -n#2i}OCH?LTuFaghY7Liy)pPQ$YipQ!%9gh|<-&l%S2^4l;K=mA`y(rFWYaKF&dIMr8&=oM68xl;R8t -~4!)u*4To;3gUwB!9cn9~WM9Fnqvjc6JsV;NtZrv(bfF9Lo*dIU(ugGP-PSqoaJ%JiYac_!YSLl2PN~ -0<0SEFP-Fs3tt&l}izhv~Un|L$pTJgwi`a8c6X98~xN6ox7(4YdbS1+8>TPmL$eXW49KLk5bhhS=p>F -fZI*N~vHCP>NKuqGo9RZ=i}!aaO0X0@>2ZwB#r$skVt*ms|~7`LO5I7<P+V3h?{7sGtFjyWV2^prEfe -yoO{RZB@p!6I=RZPwVP*#~@gWMZk}y*`MeBO#`NqrB@v`1U*65Oar=ZN158{6#p!VHYy{F?;VbBadEd -C4^dz`CCF{EP{|xuySv#aZ3CvLsDS;^J`ME-K?vG7sdIwpSVjP~CrcmrWe5U-U|CDe&0$FpMBWyw)Jt -?|sLzh}7)Qqj!g7R2|02ysa*u_ai;X-g>6~|ifwC!FZOIe;L=z+NH}I}~Q2BTxI6Zz5rd?{y&yMep+V -IWMO7h)`JY7aYHZ|L#Q(X19b>7SK{LbPhSu8$w985Al3WGWlw_1^JCd66phj^Y{;K36;9mHp9cmxB%M -G5O}n`99(a@C2U$fRM#N&CEUoI-YO$&6in<-|J_c~oT&2#oZKrJo5r0gg+BEQ@1W?8}usGmPYjeZA)h -{`8aaJ_&8CBfbZrL#56wnDP&j3x}w=x45rBbDRFE2pl|ehHWf=!}d3B{o1VqEEsi&L+SZ)1*}X1U9u@ -64JJ*je%i(i9m2XA(P_=ccLi3Bm<_#E5!r$WB_roP$q3WERB9_@tW$90UU36yKpDW&bybqSdh5F8Ja) -lL`4;=e&{Exb$Pk~?*NHt-wkV{@jqK`@2x<C2ANzz06K0Q82VXOmu5NgUqTGj)rD#eAH4M@Pd?t&J$t -83~qR!Ai$exe54bbZ4e^#`fDR7&#U0wG!+=Xg<X7e9!`g7OgCwicQMjEiAOIp;(SIfc;UB_04zeih<& -gK;kKo{%HZK5l=_qel$xZKEx#JGzqizTJnl(I9cpBcjB<h6T4rKk_9cdCQ)vNY%$l%^at=4~1^8>=zp -np*Oj9)X*pL0Jq<Z(=ahIhxZkz@>M8&NUD3xE-e+<=-Sp#{X~pNv47z(-zJGQdCTA0c#H##1qjqYd|D -pQZr!(2e5fODH-!ufjFvmJ)~GbkU{&lWT3$oZ(#K&3i#_k327gNQ$wzX0%r$Ae8}=|!g7oP$GTzohI= -WbV!HB?Am2V+AemwX-Udb)72LBD3f^ESt!a3zx)LX9MSgOege>9z5-4ZM1A)RUwZ?Hnc}X!~tglQ#v9 -@i0Io>keobF<_ma>k5_CvjA2aJN&9bQUo$oh+zCZ!Z#+RGlcw9w_fzRn+4(1ce<96_+5+B$LpMUjqI@ -nnmRZKbadc$gslJ&(AH9cpH;!#l79Lrrk6@>5Z^J=vn?L<Ta@wOAJ}F^4*R;VzspWjviZc~{|RscZ*4 -huS&3B1k=4&FwTYOod#twN6K!PKtS`>%f8Z?s5{%l_QpqEZG@~AA1X*ly<c?4JF=-_-BAZLbOnKtsQL -hDS3ma$dR~t>Mv&~?q8mc)wQ@su|FSTCo9MBTq#P9<iWyZA1SCeq`<njN)+Q7l5;W~b?JuT{9IBToTi -RD8?2Ats3xaochx(0MpBGJbP3o88txMmFWZ=sohU)s+xPHwC^;9fhJtk(EERHCL2QSbvvoaf*pz#-sY -u&eacbn*$G1t0M4bKJkWxab#^spGmCxVgy?QT_%zkdN-@_DaxkgW<<830F{S8n{0|XQR000O88%p+8> -_e6=WDWoT(JcS~9{>OVaA|NaUukZ1WpZv|Y%g|Wb1!psVs>S6b7^mGE^v9}T6=HX$PxcvpJGcRFnN&} -+3_W|5a*f;5}bkDT^swZEgY3zlPig5lFQpAB@0ErduR4RE+2N%I}}CHAb_QP%+Act<2SQP^OB2-WPH6 -&i}fVcU%9lO1e>e`&q=i}VV;=L52>uC<j1l~c|o%&xvI;IP4vn#EyE}+DkfkmtgAGWVV=s^?)4`G{(Y -Aw2`jGHeKl3zlT?-&-A5&@HhLtLQOpa;Gp4E0xJtLInM(^<(JZ64FrTDCj{}XgifCPJBIG41Se5a3It -d<TP1d)i;4zcZGWeF~IW3YmVlAg6r*{naP$OeRwy_MiOh`}!a9atUb>(~myj&D3uKD}Oa$d0?c=evwM -e<GvF6_isYg6j)KWmb2HAy`NN1-GWyelTixxKV-&8iP-%#Wgi<}8X}RV24Xbf0HYEwV^3ST0xyf|O~- -{6iQ#_x$U>d&{SRcNpl^f^7#Y#UToxRuxNTFb|tPCC-)<L{q1X@BJjdf{7GGd2r_#f5LkO!>|4DtKii -${N#Z|lQ^SrOPBSnQMljLQm{~JLJa^l4-WB+X$d<PHiLqdJhH>_hQ)WhuJn|IuQ`)2;Ukf!Qf|DdqW5 -%DRi*n`+Am1gd|ZJ5$S#ulqhdK{)rKdU7q%jD!|N=GXp%&5rAq!%uvL2R#~E0hP&R_Y3nD8KklAZ;%X -y}y)4W%;D9DwlnK=erp-SW4IbasiEtO2&4FzlV;X_LkefS!_EC+<Iy_xWkk?rykF_65yT+KPS8bup!& -w#%zb<gvf&mZ+k)rNtG-KTk-6HAM%xFF!!1QjU>_z4(0C2Mg0qB&xe=m7!GVhd7%&jJ~ARte{n6=+X} -#)(6=UMu5sq&5eilli0>MJ`Z#Q?wrtE+T0GaWUM{?9R7r1g&%`EUgGABD4lq@CrBK{_Z+smGXMAghQ{ -FgGme}X;Cwjso)?*AsNAwF$UK*(qt?l5WbMoq)$3TGukrW;V0-UVn8BgGFqYBAQuMS@E4vIzLwhA2!? -G|dqH1bl+o^H_h3@eZz%^uu@A`mi@$#VZehHD>`*RIeDk0RCVkPsF|?^=aB;vpG8&;VVpP$=WUFKdCV -ggcl$@WphB`PE%$z~&*2h4aQS$x33pQA(Y1x%eiTBJy=_K7UW!8ejPMGQ{Ju@mZ+rY-!Zy|WGsN^oKH -k$w6Wi%BjDQ5DO;zpu9f`UjT7~H44OG}bg9TJWkfJ^%JYpd&^A1A=On`Ms$JiHv8i6d}8m7e{EmWmvD -R>h5}iNETLTBRb1LKxR-UVpUULxr#wi>R;5<#^P&+Q5y1R|t_N3}X!6Nu?fSiC|C=xiSn=adOK*gJ2E -`enHi3Q;LflYO`4_nf7!L3%=s=9Ty4VI+YW|D2yg}31&0->EnlRls7O8EjSvehdHNv{RhB3`+_rLS{z -o$e2uJwL_I1dqah=pc*)5fW97IK(qhQ6d;N6@kRu4kuGauBBa-8ZcJC-qGuu9AOUB9D)07Q$5~gD=Jw -vg8%rTJzvf&lvUn{M>2)Y80r}FU@<1T8>WEHK$#j|HHJA*{-`jU!Iz}^&ZKty;!;8L!#2K>W7;2J_N7 -<l?DuNM$7fM}fa)Pn%z#u}sL5mp`p3<~QuV4)SrSlptoN^5)0L<{Set?xR3x|INy2&zt6xC^?W4Rv8p -?*`IlH+g!FfTi&ZZ`y3>&}o?c3>~}9Yvo%G%(vb4S%750+!sNl19DM-2TQ;`yA2aMlSp2Rm|-#khomO -sv$*17KgImHQ7MN5ZGJ~;i0g$z4++>q0Xaa)gIiW91P@BKG)of#<<BobPGzjt(YZ+1QM2=Wh`e?iz-J -oc463n*01{}adX%VI)XrOEVSq?Wwx8MCJ?Gs+#t_I~*dc06P^=>$NP^BleNECfDO17EJp}Napcg`UFh -U9yiLrr_KkZ>nVU-yU*6OM)M6d%J{J}i_^WG{<ggR9>)TOB)X>;}Di6lM(twe!kZ=4`t0Dxo7E`Vi$H -yvHtx$ohUU@#(R3J7SVqMdX@Ve|-08{VgmerW87y1KXb1t+$F?-9owu<?Lvjsgv+{GHS>(h*?yF|+w! -cLFYqbKqc)UyGH|%KJFHxs1<ZaZuU=7#zoXK8VH)Xn_^oMF4%tY6Nl8iUMORs3&ORw@0!}LP9`1(Ujx -l^*K2TUy_6~jhi<X3m=-34wX|)M(6_&a;*kNI-nZ_#D$%tc<Kd+p9kY-4~!qp`w7%=g>eX!=I6BZ;f_ -OvO|rCLU=*4P4*1@u;?w;+{#1BD(DjCdWtP_Ud<p+iFJNN?V5W^Gho^@l$=liWybI{TELAQ9v+|Scvt -^*YA5(y38^a#lViJ(o<V?XqT(|@%0Q8)T8dKh@Z|?J~uMdEIF<N1-brecQMZEEm$Y}ki_6<!(yX((1t -C_NTf8~8klWb2k!mJ>2A;|^#2mbkk_-C)W)GAWM!?oab=^q7+W?9K)s^TC3wg)wrHygG7a@3#G>k3u; -2FKOH4Rt4bA*d4jv5Ycsf{``Yn*dXwP!&o{84f&v`YMZ>qCq=P!LTPuK|lloBlK=rOabYT8>~$bw%_2 -^TZXhn4M<^4F)KrAQUzR_Ifl6jQzE!677hi|1rOjJIGWx<+CyBZ@NW%(#A(HnoF`+9HC)uDc!K<umpX -k}NCmEC`EQ0sNI~`@ya1CaK}`T&Ku>$cqAqPruZ#fR+bX2~Yt10~4Fv>aHYo@+W81moIr!Q`U1BqDHb -Wn26T@;mamo$fMY2jjQ|Ip~Sj+><)QSkDImgc3m!#N^L-rb`)+=FTxY4vR^!~@X7-K#*bmTAcs9r0$b -uHwu8{Bk?9OlKLYuO4$nv5{T>cCA4IJfBgf7`;4!6VMBSI)=KgF5sP2%#P)urD5^Nd#s`4Zcsn{!ANV -q+}ZD<$9j?Cfm`y#5=2Voi9x+k;W(0^|-wP!>6*gNegS>3V@-=mn>VUD#(2}aachPmPVn9r7qOcMVGs -G9FFxDoj>qo<DdrQEFA9ZjkFhXpj$RM%WuKI;gbz1F@+Lc!*mA9fk7L8O}>q5fymdPbc2EN<_4lb3KO -9-b6K(&LJO8dHA7XR9#Q{pVMeqDFpLw1D=8+hJ?l^+<Q+u1J*f~mVqI(DJm7HI+-um?hk6AtQ_d}E^a -*O2k}wRH_QG1_*p@<b??Gz|Dx)}bl}$LHwjtZG#6Q;zg1%#cJ#9kpHH99C-oC>$Ds5;jw1qCn8?6e}n -}l?PSpn%`Yf@U`mWtbY>b0$IZu|hQF70m6hhQo|6yDr#qjc55!wN5S7(-AZ7X*-q={hXP#j4qCVr3)c -c(3k&yt}74%4I#ZYbii$+HiRk9?iq}`WC&y>Ur$J{a!M?3}^h(Hkc1w=GCdc!mvne?`Ssc$7&(9$ -Lk^9pZ(TkHAE#b&nLd7mEj$VfIaQ@h-FT<k~JoW37<D=*Ehfn>U3UYjkr=Cv9{B&`0wm5q3oLa^+0K@ -hDY+clkN_ia4XO~%ecL{jJHy@tq@yAZzo6}L|=Zlk*#n&&K)AKYIT=G>l1ECYXlP|*KhL}0rJfE3nSj -&^wUx<A;^f(s;V9&=)dr;mDv-u!%cj_**7VFjy!0vJu^z)7i-@elpZ5cG5t`XYzsF20d)FOe4Qtc`%V -p;+r`j`r1zBlu5gRNsi2WJoPtag~F<wyCis*P04a1V3JAd}Hsu>V<!%~1EeHh>{I{<q_o^Q!ne1K7oC -jLKjKl(>+%GpvpG5N=pO0D)pprbTyD=c>eHmtC4=wmbj-6EN{{qo3+rT-tx?_z9AwRhwQtMH+NVQ`KV -(d+RS&igBwgd%}vU7*paS6|W`SzR%kH987yu60R7+(iH0ztXx#uPAgqZjlY8Q<#L?b5!OVWL0;}*qo} -*bCEGi9aAL3J?ADa6_l&mUThFmIsDA!ZU<+*>NU1T${#7BXj5Mxvms-_ej!9o_80gMY#7YkHR~qB}sn -S8AH;#{RcyHFApp-VDS);wyhVW3Z83o6~?%VE+*q?CphA|q)o8DkuLbcCEolnJ3a5KXK!8Q=^z6NAoR -8pISRDTV>5869g(iq(BoBC{4@M7lTVa+qTM`P~<OgrwxpE+dr@TBht&VpBvl25S_pq>r-WjnduqruQR -t46IFvto}g&ndjH-s@R*KVZ8l|J&xUsmr2jm9#we^`Q7nR}LM>#Ay>ZD7m`&TSzXIW|TR?1Y~b)#{#) -6zhjbI{`|wV`yitHqW#gAA57JTyq1-|+u00^GiDuD;J#Ub{SSu_nlHXI;ft$^oT|%V8WXf>YfN>O`fH -sEH##B?0_F%!u$NJ(r`_SX+IvtrxE7RU<aNlfa2=A5-@W_r>@Aq+kC)`-6rX0a0YQm?9cX;xP)|R{^W -zi5IB6+WAJ{E|)B!KGHq4JRnqL&)3%Dj_*M;cc086-FYD-7MShPyIVi0igaTKMql9)saM4U9BZPf?8) -x}-GcSR6(Qio%0U^D*Fl$?%3Dm2@H7QNy7ooymu%v1$rRIr`j3B{dSUcD_lKUu`?fDNt-_s4rE)h%`= -_Y3qnMRBCW#_i@8kLrhS4Y9D|cEa%>^LB*!zT33&-eTCp@QHo8C-R93O;2R+jRzYV{mzFyraR&O4AVy -iI7zaDdmA~)t8+5%UdAe;YXsx78CX55+ORlm!PuqknmAANd+d4Vx0gM+n_uir2jsdVO>7!Vi@{JU&ON -AC@Zd9=L>-N(Xi#TZxtt<h2YUZETib|XeVO+3!QTIlrgX;sFK9|1{GZj-Z&Azye|Id{8sG{Oew$N+$- -e+lO9KQH0000802@m7Rz|znvV<4_02^5V03!eZ0B~t=FJEbHbY*gGVQepUV{<QdWpZ<AZ*F66Zgg^QY -%Xwl%{*&w+&Gfo{VTXKa?^cj%bVE)_FzoUChH_S!Odm{<IF4$UPD$(Y&X|xu_H=$dV>7-t16NrDN*fs -9*b)ru^wcxST9x;i%OE@o4hV7u2^1G?5Fb!HoN1E60&B6tlLIbbEdl8PBv|lBu7VLi<hjDH#efbvA0s -$E4ArbQT2EG{zcbRl~|>_yixpU-N-F#_d5W=%=_69gWtRV{r**U{>`iN|9SKFZwq?#qTcI^m!fF()ti -<#`KsdHT`L=X_pMN-)!*|S4xn$o+qE#KywZ2?x}EL)Zoe~EKi1G<aWp^D=<UQV%|s2rp<7y1B2@sc2I -5$hFZBHzY_rY_9_z<H6r6_cd;K*p&*gRtR9~<+wQ7OxIW~CJG_r|-K!U1tD^wBE>Kjp(yne?&nEB@FH -rwUxCgUG~21-9%<;88c%SvI$Qwp`K@;x=wPd1|D8F0tDyUVN25Jf0JL?a0VcW|0*+i;H5n#5Rjt6d`t -u2hJ(nf;6A#^6{0^vt!^57)BU=51E!##!FC-sZR5K0Y`;%&8ywhPOD!Ocfix<sioEP}I%{^f5>e3RA` -IbLfiVUv>pA;gWs7Z#SS6e@g#5)oo3Wci+AI?u`AwxAKm&>ml50cE8~@D;r6&XjKVk=OF%BLyRbeLFe -e`D9eyY8C$Z;<gQT36+A;F<PAJB+L*#DzolohEUWV^&oU6^7hSt~Q?DhoBeB1<s&J{==4!!$TLfG3HL -@MZHA5h03|`FH$=7TpWu*y)rU3u`z}v2=S=)4+!PMIgXV?W0lDCRg;+C_V{rJPTY0yhE0q_aALZi*K) -U9nJq1anlb3H5xo*wdbUV$C)9@zFZ5NOl3yJW%WufmJ9s5t$F=U4100}7@jbks?iNt0y3tE}PgJJG<K -n(&*Madr~#h#m{Ly)#!Jw*TTqoAtz60Gn5!DQ6*VVZu0-Bcdfdh?5dX2m~Vm$;lpj$fQTwB7!bhf;g< -OCp42Sr*5dx>|V4Rme+e$b6$cR<BMIx*Wv@4@$@ET$&F~ACiB!l3#Wn*XI;%zk?(jpw{MBXAxHVmP3H -H7srt7mU|E5IoFym7g)EsHioS=2>*S-I#HZ(QdH3lUz%4%xVSY+_(a_ZOMB+Vrih%w@zkwdI*)KopJL -u=j2{bnBUJI}*WH4LVkJL!nW~hl7A%(Y^{go`pO!w?JZ|Pq1G~jl~-PbS{(G&j}#WzEKp%}tpt36XZZ -;B1-f48HSD7UbNwtP$0fk0hbOs-R3XmBE|l|7RPX2Wr90mB3@u6vZPQ(xjxCav-Yok8`yJ_`mCS>$z% -r~+oPtIJRbj)|fH4BbFB;wH0LleyBD^zwcKb7VD*H(Y9Fw&mP0yUJBN3Cw2{ypt+LvZMeCCCGv68^gR -^`(+5+jj3n%5B>#GvdPgw0%bxTNv(EBF1a4E47E>o?EnlC30a&E<RA^&Y1^LO=S>ZbXTdun`nl|?lIT -WMA3`Go((3|yqS&l$1YnJBUNQy;ei;~;zK7syo-9Vq0#1gn=fPd$Wb4SPt>uOSRv?vTy>Km9gwZ1q=7 -9wRvW<Uxrg}OFtKLxoyi~L<xBRVaU!%N|i#2;?T{1J+4jPU-{FGN>q5~R_3}jWbSvFI=S}&Mg7d-r7s -fUGlp7t%FjUy6vLk|U{6#n;yztdI(41AzmuWB&DssnXKR~-%ciQ4f(tVMxKksyy9#L;Nb0{ARJ$od5U -I%q!V_e|<h%!)#OXbsMnmSWI+jgH!ol&w(gISdWrqmY$iyX{)kQfC3ilnLhQgypWt2>2Pf-j~TwI@~z -d(MEE$@Fd_azJ$6a;QTf@Ifq_L&%q3Pkd+SI2}@u6`Ri(kDG)rs5|<!)<tr_r+q*!<97K5I_wn)1!C_ -KlN9d_zQ4CkH_WF*!q!2cGjaNsZ>;-S#P1p#qhqv&5_}CH#-r38r!Kwji+88$?>I8Y>0&3eBMG9RbO; -l3)b@G){4fZj>A|>zO4AESEv}pgK`Si6B%I9DbK^5D5KPF5RM!j=GMpkY^<em&s5?kLhKnF(1yQ<C1C -`ZG&Sdfke;C~?P9X_4}$3@j!_ybd5;v$@3haTgE^k{+eM$r=DNisYjJnbYrk{D{>(le$A3Dnc&fF$VX -uX4o^l%6VF%#Wg-JXsu4&OJ0#GtumX>;SHaq@{P1b=GnPvIc9Vbeh}C)Tg;;<|tUG`Mp^HY&bwzBu-Y -7IRE~hQ)pDk-QHS?qHAag7RDAY*s5!d0SEv69*0OBvO{Ba*!rM1KraD~T!rq2k5^QnX{yLMW08<~3(s -aO2YhqO?@xug&=Idj6`<UJjcfL2l+C#$S9-Jpfb4zz<VA`korzK#3?3k0q0sII|6l#w;2*Wt@t(S?ld -H%|)Qd+bug9Q9hz`WiTiNh_G@?1I%9N`j(%t2akey<K)R+fJyL`?J`suE;Q(S?pwBV{BnRs0iN~syp^ -9qJO!#tP`VCv7tCcXw%%jaQF@U-tfpR$UWDgx9zGlaRc@d7;>374(eU^q%4so8vTG~<&GM~hD7(x7G? -dE$wAh7rGBa}4@dlUCma{09d$ZO+`g&^jI(JhU+elI6Lb#fa@e3d6H-jS){{V~T3hX^Kd<v3{Fe<!#% -{pfhL)QZJc@SPnvs<Xi`Nc5q4>Ji#;yfJj|p$p@h);17*$iB%NY4W)5Frr_PB?TTcF>)AYpZOK<1;A$ -1v<Teb2&m6uwr_@uls|Pd<GhAZ|<~pZz2>p^*!zmE@ZdASe5o#Go4~4dR_#mqgx*`YkF5(G{JXCGvaS -k~JMoLg1NDD*WVxEzbYZS-3g}9|v;zrzI($Yqc@udP2WmfE+#kLCKy&co9w+_Q48R9p}V=Vpt<UP14= -$y<rl=o!52Nc4`A6jlvcl>}%z2qPsTTydODF~g>exrODxpEPwkEP3A#wc{z<8&3y?r5m6ey^y@;{0d) -9kcU|l!{wl5UGuqv^8<Em8$g^$u0zV7L)^U1oc26X^l*<4QLg+xA7l`H4$uqOFm&b2s1|@P@+{H44p{ -;V}n>=5Xu1s;;M-zH~F2$mXM=2;I{4nSZ#MLG$fJolp0z=!bpKDjvTxhPSVZCi7UO%@O9?P);9kz^Qp -XGw|u{>cs;Vn0S9By4k)=vYHK~$H@};f120f2;)?o9)zM4B2b8eu*I2p6RGZG`3`iC=$Nx?$nY1;ft1 -EerZrB4J6<}|+ERK#~%Fx-lyED%R4sg+ko59TR)~o3ska&fUj>#KAZ8KX)u;N*NRXg{hABvrO?rHDM= -*=JUxYIO6D`aMP-0!DS?xDUDjjS<vB)6BIlcz@6Wt<WG9c<an%nm|VD`2SsabU<nh<qqV@SLc)<?Tk6 -z2Im|lI3Md`!%?Sq_;J+o1?cu`pufb=GBDM+;2FUIJ7Is&e%SQmk@)ofdxQ{+!GUPf-tAAw_-5GM_Yi -M());cxS<n6$cUR>$?Qz5P^J(aHm$-KWwuT}S|8`rSu#IBFw``Eb41hWfcFu)#1p9pyXP=SJ?oUNzxS -YH(Vg@*1w2rPb|B1Z7U>+J*aK3d{Rp?UXQN{)G&@WvG>#ZSGGT%QeS{5-^{SM&o|HVE>&Q@zs6o!+^& -oqj!k=AaQjx97N6fQ_+)q{F^cbZ|N_k&bGB4d0NDsv1HL88+U3xyL=V(r*Hy*Py*>`(Ki0d^8mpBZDf -E8F;z?9gEDsQZGu4M%Z2Gcq_@<wIsqvv?`JCwv2vrQRnQBE*c?{4aF#xU2a^^m>zGvU*;k+TqE{<9v) -w+v6+{%VlyGJ@-4710fcpY5sbh}SPLEaUcin|E?^-6FT>Q3~bM?xrvGpZO?XM?1Qt8eke*QABiOlzVi --A4vdAr~m?SWa~4mW~&~T43m9*OqMQ>?hr6`-tV+dyDUvE6uxiYY+;>6WVqh3avm1$soK37A^>;;#jW -hx!M@c3TC4UEtEFG^fzuY0X#h_i;e*YCAyD5DDzLtV$Ic=Ib`y*vu5KR5s{4Gef;x|d9SP%`QgWSqwz -V|<1PvlRBt(d-z#hPgqQ%33A&kuc5b;3tLhE7$&WwhKu2!+hF_7^h3q7@bjTsV4)CF#j?ZnQrd1!HJZ -77S}WD{|XIJgGr;+AQ1KT60tW2=q+)V|qg@0Srkk_3N8@_;<#Uc)}a{A<;~>+y>>$_z;zc6MP5Q`kZF -dXn%N=o1Ntmyd7@?dPZu_WHo`m6BE0Y7a^=a_My1x!)w`I~NMWy7Z?nG1?BAmJNDWGpe#G&i?sNSi(x -~*<F8FY6~HGE-J4sLhUNi(krsUqksn=`u?Ve+#I7RoaT)BKjfU~<ab7ud>udv1y;YcwNoxsc2ej?5}# -4THet)Zr+mJ3Cyn#*;}740x2`b&{iQ5JZ}M@wM87iLj?0vJ+v_kP5LsQY2v{7Ddpl8tjkOd4P#z#-+W -4|>DH6rpgy^Q$WDva!Z6BJyT-0Ef?1s=qx9T@FDihpEc+!XxS6-<dTAZS1`}(P3K@hG{uwLH@jEC+-P -GC<?fLJ=JMUtMJVBmN!o6;()2Tipc97jq_HnO|f*cv!k1z%&5iJ~&Q;m%E2;on3%s;^O9fyEAHh{cF8 -Y}+aHUh};TE2uPaV9LP2%&a)f>?{_{PGCMi9JJY<+TP;-59tOvcI2B_<sh91f>%%c2ZC>_J0B_XMw~| -i53f8w%t<?LDO+lqzEQ$iKkiYa(;~d+X-Bom?0v_Z{erEV{6-hac>8HhMW!n(sevUtd7AVa4q9nK2bm -nEpD+~Al|7>jR&pU59QETLnop=LIp|A;0%SHA&{c_*PraiM0_6;QeFYl$_0z9FD_U8|>g%)9)32cC*N -a$J$}gz9`YBecLd)$QS#=6ePXE4tvD;CYL03tthX|*QKX-R*OOc0$AS5<!@6&}|17<+D1$#EXeCD>fE -H{vk*-lq`SdV{b&TU%_(_csKe22nv>3M=28Yk#A<8>!p<7KdWPS_2zlR80i7s*2spGU>@V|MqvLzN(& -Q-oMEzTLHZ=abB|pZ9zoVIaY{-w3chB5+K3nF0<))s@`$Zw#m@NMP|A&B5oUBHY-iY3}3CJ?V?e0)6R -fP0HCpWlNIz$O&*N-AlruaI5!CDb#XU8EbGhG+@>^crV<+hAZa*Jf<YZb43&FBKFZ*V$&8NfN}-?P(3 -?r&@Trmerv6*>+Qu+4sXwBd#5x!ydI7=Q6kaoj@;_V1Uy5HCacAPoh`PgPFY`GG<se`HrpDY=pu!dP< -Ne=n7pt+`&EDG36E`knDY_4F$6kUgyaqD&a=!0-5uINDICo>6ynHA=36*R-%;nOa+y)A;fb3)jWcs>n -Fm}vq<b|Qh)VpdAp{=8WRCBx?W0d>kYkA3ad{&YSgX|@;^6n4q%Ak_xwO9k_K8ZEYqxm_QxX*&aRE1H -b5Ny1+eFYgSv9ctZ6kKG<n&-NTcbylRK2tG%!Chc`Q_&XV&@tNYwxAbF2m$?E(bVJx1t4eC~knFH1WE -ir{JxZV!h@N+!y?Cz)9)1AwQnYvC2I9>PxRmVa;2tp5*s~8d{g68Cje_M$SB|vB09G6}o==Gd$AdEb4 -S2>}wp~U$bZ-^6Ll|)`O;`hOQ_u0R}wn0j&jaR8Pk(X8um?WTd2Lip^aSI~YC<YT(bda!`ir=nzdyxV -9c?`b$>vJ6`?bj2lME#b)-4`Sk#6E(pBa69K|sU*j;>*R($;fyH#%;~M1o`ucDV<}>N^ND6ejGH?0sM -u8s*JUVH4)j;I9KcVxEsHQ{_lhD_@4A<A*Apd@HM9r5_nNBQbqRjaFF0Zr^^GFr(lpeo{Dav7KsY%q* -n98HlVB2I`7vq~YuBFC1w>w1cpx7@EBjemWEJmSydq8^L*z*sKkyA8eyc9Ztyp<(4JDbIAe#2eG3B-S -}6rzpmK}CxUJTjia`jT%SpdJpdg9n%QbjYPcVBSf;Ae^Tpo#-=C(a6t$c&yDEx{)!j(0V!)n)ogo`e! -z4sE;MjkRF4LD}v`1J#4WUjq5Rb*<VG=5CiATl!)tN3>H@E)s6=V1j0lpzue4iZACD*rpIi%^@Q;@_^ -8(~bft!YALB!!$y@Jw9Nq@yYVj!Y3GJN2|K=<>`E3~67P7(VkkHJYL=SoO9O=tYQgDYV?#CJa&p%SGX -B%(VpE37;<4D%8+K-q@EgU{C@hHKVNFJduX%(jv(TWxn)Eyw#6NMFilWjkDs`v{@INi<@(s-jWiF)v6 -sf{blxF4?+f0$Cq#jVh%)mOa8G1N2*Ef}SfR-TYyO2*KK+ULQYKE_Bi4`fxFFqF?ID`?(viatc~&*5I -6h7&n9{O!P--L+WJl+4teoU#R*i8)3L5Gc;>=VFI{S9AIR154mKp|j`$|GTHt3x2j`%$o;k_tHP!X?f -%;ya|wVE!k;=nj|^D6^%m*9Wy$9e|CC$0}Sm}XzosTR4H`2-S76NLaC0c(`V2A{9lu#eSn}LEpbe&Yd -+I~n^z=zh?JE71G%UvcyWs`uCh;*ztE24ae_{P==iAuwF9-p-0R>|9kb*g6hTQ=%D*u7@l&7c)3mt!< -JEj&=yLh&DqLb6*d<HyWU#XC@$`XcXD81N^tw+DN?!7kSKL@gp!Had2CFcA8YHsr{a(xba5}5Oba0?d -m#nzYp+xW-PW!LW*c`@xLZUG-{Y5{*V7~M%oD`F}X0j9QekZydvzHPL0DVzF*b`xfP$2A}KItS8Ra_? -GYiXjx(tZ)u#G1C>ztTuYJ&DP6G(v0>q))AzE|je?5Qv@C__cA!dBwrvbbYCa`wRgZ?x36wUCT(d{tO -$UpN}kopc%%L?rRAD4+018$iFdjkyHM}Ic+e;M>>dCCJuCmE?_E4;#pK7rsM8`Up`R*`#Hss$PudS%- -aaXf56x_`so3ugf0-YWk_@?A~yxUe(;4yR@UOCYk2wF<sgCz(_cY}L1w|F9H<5~toXDe{C2Zwy4rpTD -y%4RH{0?|f7t7?FZ5gZdr98s2GmC0XR0k_2k|;)TJVcWP3PID;=X+7g9Nh9v>7gB3697Y<_k`j3C)k( -6<A)#4<sKYx%vW&{LNeE4bm2Yy!C+j6<fAo{}Pn`YK(;aXclxTKJN<(eaU{`*nB-r7ahE)_mN@D_t3m -f!!M$Z`@k}it#c5LG9%tZ>8zQM$-3J2Ep#CuHF-cfyV`s?32R0)CHj}P3PuT#vOToBZ(yFhVR=J`o(A -U{O!Z4yDqDUyq%qSQLwH41fXXJr&0#FifjgKkGAoKL5WyD5T1mEry9@T8@HR+K_>7HzksxTXjD1CI76 -2WcX0+QEg99F;<rbhs7I&vY<Cma4kuS>l`mzk}V!_#1E0(c`k-<H>Ed86QQH(|`gS&_;;-7d~BI|-D5 -fW(?S(?A&2BC&5!`lcvrz=bEdddaT-y>wN0bsB+4L^3oo2HiOtGD01dixHKMM+&<g=U@kUltm4dsCZw -E!-tFX8=(T_y=B?B3+^CFWQJ!;7>0C?hA=yv0K~Y$@JADtAu^AJC<;qz@p0bveQfIxXi+<ji)Lf9q-| -4t`EmS*M@!n;@vlYNe&b7dpstplr1lrAmNMi^H&!@Lf0DBu3GSN(40&YCpSSBu&x62Xg9L|90VOBvh~ -&`yzh}80F$=HFRwK}a1T3W7jh9S+xQfyg$zMr4S?(%#^%VEE?n#Zx`Ow|GV!e(K-U7ohn%#*IQSMZMp -7*<2s^u}<O;9AD^|B)u(zU~>o1m3b$8FwSn<|6x!@cNbCp2(q{>`Mbm#FwZCV4rIl0^K@>IxEUZ2vZn -c7qEo%QxGzR%X+*#68<V_=TK$A$&=#L?kI%SAdAyJ-h#DpO4!9o1Jo{`_0+ZBEbuFDipOyz}FO3lCGD -BmMOjI>v=4lK3sMCu*LiX=2Ndkm=?Wq<?I`m#FZ|UnZKcxBrq59*p439}We=6Xn0jiMRwo(f4C^Clng -ZJ!+b-hE#Shi3;>Q*Rf&OxS(I#Fu~g-Qnsuyul-%~H&kx8g;0{RM=Ne?cT27d>8&r#)E44ARCeA1OyP -YmZ_Dv;gHT(|o&Hlo_>Ig#`7l=df^DUbrGT4LPs-n%>Z5sz1-zcs%n==Jfv|qp))@z$6TU!+E830}x? -d<JgG^-l6e3d*r}=Qn@Y{j@Il}(~P)h>@6aWAK2ml*O_ExVfyZc@S003qa000*N003}la4%nWWo~3|a -xY(BX>MtBUtcb8d97DXkJ~m7z3W#H&Y^bdXp<IcfB-o(*bN#W=%F9TAqcdzG?tj9M3to0>jwGneM3sN -HkN~EQ3JcSI3FCoc{4*T7K@}+ZJOOuQy43h6I*=6C)JdqpccQW$rU+awgSq+8_`;Vju#D4!D?|iiQ2+ -6!kL<U#Ui@%WE-i|BzdDWyr{;hf_i6%on2)*U5E{d+yn(ng-~_fdAZRfB;58YrqO%oC0$!c4<&?iOV% -lviLEuY=vwD3$vRCII9^!FvTf%(OIZe=t+8InjWfFQl*Q*H>DNnbHp6e@(pLIvcyxQ0B#*?U*)?$kff -yBjs!ivObz)bkyb_hXCE&K{nnEKy)7kqd_Q#Og8F<46umMy~+)CXM9|s_K+fge1;^m#v8qcaM$wCoW6 -ov9QuGG;QD8mu#a@jc&0d^;}x*@S}>Tc1yl($mp2&N0rCzn^R|Ni~*-PNUdCEg$&;^V#EBiya*v|kHt -%nkAt!z+}f9Ov8zib#P2B66fL-Bns_LvAAiI|@O=8A9dVIqD6Ss%e-JFaeYSTCBnuBJ!T<*0U7qLyDS -xI7`F<-Z%);1c+SM2AyJ@j3@W95dgTPjgn2E&l>{IBtm4^cgj@(GMIYCjFc7dCEiy=I#$6+=AbWC!GQ -GX<=~R{zg=Cu%P!yk0Tg@2q+l0+FNbGf*T|Zd;306zvehaHRHCiId8BZ)M3O7gEpogCu$<qppH|2gM- -uA<gsM%^=@<>;iUVlW1O<S$Vd<dC%YaBU#-k1aPERS6m*g~ryza1pmp9ae>VcQa`_{d@xG0scx=os!` -U27h^=wJ`e=jWk(~<M;qV2T4`04pCFH%(g_OR_TM#u+Vy-Wl?gCyfMz_j@M^h^5r*_TBMoNMWU3rn(W -Ek?FUu=REyo$x2?%QeeJo2*08g1^fZQ#K!dp+)IePglX1?s96qcpI#*tTp!N^pSXvt^<~Q>Kv*Z32Ho -A3^HPN0~fcb9rTZYdMlknt}F`l?G|JoIVu5k$O~|7jY5Z1UeqMfntUa_xW4ZFjanbd2NXmLyS^TI;ti -3((Dw{#uQ=Ks^;7YuYI0N?{eU8h;!s0eFGpWpi_CH?TnIz09oZG_+&a>Pv0)#4z*xpdM*$!{4wraIC{ -fU_?6kB4PQe@zQo|93x$s!#z5|&1$0JWD(+K9!Y8#4#By_M5!?~d;bfVZ;22W$e)h#qT#|?>aGTVnxl -XJ4<%8t?QLemYs*<cro2JltlJT>WIg>xK<gSL323iqu(x)1kA{SmAl3y<vlcre~b2d-8m3n<^SPOWRT -^2<fKSc_+?<96hcExR0hW-lM3oAtRZV|NMUWMUX}6&Z-Z3>eKO`0v^^qaHDmO`t^yW`r=Aef{L&3B$9 -88PhlMdtFJZjg=v(VAPJ#&G60hgO#_D6Wmytbwv^96+0Lv!FbrkImR7v=ux>ThRG;F(<cVkjeV=~Kn8 -RyvkP=9&W>g-Z(zgIPsKur_YCLx8ncrq_uLxCO_cX-we;MYT$-S#9_C~u!Xxo(&%<Fr4i}o^C_t=e?Z -tRDGMHf=R#f-RyLT6>vq$s*NHP$PpFX@~hH;-u`QKr%d_t319=2VJ#be%av08~A54OqIQOC0H@x7PD@ -wiLxweIC2mw811&0B*Fz7`TX&sLqT8;zk`%M$@-2b`H)x8`J-?=cf=AV13gyd>?cp4#PW1>j^Iov5`k -zmd4Ml;<UBfA{=`hHEJYHqbj&qW1Z-7pKcNWrksc)Z`PV8_0=E#e~qB5~inuVQQZhq;W>_J^H*(Jk>- -{CmKDnKYzbwnt?5v^6w1cU<OV$(dt1)t(oBSHx0S1%(qB!tEeBgS=#Q=!yD)3*v?7k!3Z?f#XJK|t#N -*a$$SnS7mN*WhFPKVhisWn^^xx}b2_W}T`Q|_R-Uo{kC$|DnDyba;QOtn8be9WBs4RtmJQbI469x;%f -hwb)EodhujUY!)gM;W!E*kQdb0<e3wC%znQO#Mm}}!zO{SZDE<8+_IHU1)G}Xp%&z@Z5jKFFF9~M@st -Tg`o6#G~~n{slH24OAjP1jD#&JQ$}Ix4wX&ItYfT)dv{&KP+sbJ_sP6EUueGFSdI+1}Lp^y+h*fBykc -O9KQH00008031s8R?_w4&jBF-0QH6d01^NI0B~t=FJE?LZe(wAFLP;lE^v9pJ^ORpHj}^mufQqOF_ll -@C3f1o%ha7Zj??HqzfN|V_VRgXii9lI6shuITm9z#_uB_Rf=|hEZqAd5NMLud*j+3Z4+1a5QM_Cw!R< -T~mNyi8uiw0WwfB1OwRkV1KiowSi3^#@B#on;7dtQDC0PV%8pM$ZQZbi_oUX)e;zpVDM`D&pDdL&%=5 -BH;M<R=b8?D5W@I^e$+#m{~Tj2^1N(FKNo6Uhx8qcx^H<1AD3pY(;FK~gP@MAAu$S89&EO8cuG8I-fm -tt_KFa|>^#+Pmg^nhK=)tTZU$mVgLiA1JZ5_m{u1VCPx`^bmR4ueIY%0P4yM+)SCaGpXvklT@1#C|Zt -UrCi)=F>1p=Of_<NPL=SkeFhkCnLmyy8LULh*XBi8qf%Ud#Z8CAwgj|OB8ITM3rL7!#rM8YZD+(vpk8 -QSV>rZ45Fh_|BzmWDTpwO!!Ulp3VLzm2UxH49jWgMa@}csFR4nb_9)JPW99>Ou`E@rveLO5hGHs}<e+ -Gfvs<ZEf;^-d*g@ciVi_k?XuY;JGx6zIT%Lct`f@lq7UN5CF**Nr{Neb67#v>0`(Px#jITbOf4&j`F* -!WD`dyrV6o+TOi@%T0K8(ciZx@r}%S&-S0b=9Ri<9v&q>j&yPCkDapZy}<1LoQJl{gunj<101)j1WZh ->edgk=*I=<meN;9=;!+jIVwl0jZDUt23ng@q8i<#l_*|YJBwh<ZvP`K2I*rFOPwR4?y^AeD-ky<s6?L -pIzBdE~JU$U*SbuemXok!NP#r;b*AB1i2JP=NG?E#=m^J5}(dbJ{&{h`(xnl@cqd#7Y0>3IyoGlj>Lz -<)5Bkm3F{o_U=0zFc@$qh9b+Pvc?kcGuEytQSec{qv#SZbj-alSs{;AU`0{up4kzPF6wAlS`6*Tt1q( -RmL<TU=j+qV$y{a1k!S~OX#|268;rQ?bs9hp5S5$-BJ3E8H;Byv)U~ym*GcbyW1fIzbeF>J}LQBliEW -oR*py@?okL+$A5O;QF2^hTN%<?Qxq~nNSfp!G;n#LhCE{ETDc2xQ-kGw37!&D~(;HN4HF_^NO#fg4TS -4CE~TFP{1$8p>o_(-6%12Jg0Jn`dHCH=f4e(gB9{b>Mb_mB@3&UkO^H$T{~p#~t0	c{Aypn=R#0;{ -Nu^Nm;45Y`aGKamu!Yz=7r*ZT3E<4uB!g%ce|>!|4i3Z~Wbb!p?_>7c*8F#S*W#xGVeOB^+aZW-CIIx -^j(|UOR?)3P5<uK68BuxwKKxcDMFzZch8KcIE|T$=(=+*)Q8H7Zv}q8z$x5eAR~bqfGfoeGyBz=bv0` -@NKBmE6az}=#Y~^a|rjnD|nX`~P5ysK&u!Tp9m}Di}N0@a5kHZGnc@&^!ws4O1;euzx@G^8W(CNYkAD -3h)b{y8=5BJ_344HrYdm;Xlt=bJA+*OKwM=JLBfOMAH1ym^ssDov_5kLMY_TLP}EAfUoEQP{E$Js7;< -rrM@G?eJ$=Po#KlwUlvNCe_v4)puQ%1QCj$%bW-Bpvaa6;n3>92YtG=gS#1yHJ8PThLj}j2h{`L_(X4 -gyOZx&XQFX7Km8CS;JwGC?7q!%)~iZ=M4I!<0OfbD#{Cx&?}HoC2_5cnsQ=VKfK+D)(`tNTD}a$Z@Qh -lWvb+l*k6Rf)Xu@PX`hrXrRQM26UMGD6Vs4uSy1j-97%8vBxl$69f)cy^j;&3Z<Msb10MSIfCu9z_H* -bf&`A<skYGDVh1?JPYU0eD1A$5&N-J^~vZOv{&N*+SG>X0%J7`W7?hO1MC4j+XKshT4bu@8@>FyY2K` -ojnq+c=f8u($8b57j9Rv%>QB{kb)n}cXDQ${xu2D>CjNVG8xs)#=(-mNUrfG)K3rGW{-ULI!Hh>?T?u -W@)Ut)W30<eL#oqq3ZlLL5??i|*q)XuXb;Vp(>#$zxCjQ4{=gv7w9nHiQ@vqCx17gnJ(ceu|x*5;cO| -LKF<Hu|_44i}=0(@=<2N5;`xt)>cE!I+y@^J;$g-qvaiDDmHCtdP~4Iq(-`A859aUg;>!)WqT@>xkih -iln_P(k$gBn(>IlxLziqBM49!WT~Mi3!tA$<G@y(EN8(Lig_+7^%w!S~SSjYohaM+l075m4ifTiu`A8 -+WTI17HhBdoI?G?hp7lV?*?Xlc@H_S0#5waZJoQYDyz{^rbj5@4yO{vx9s<h3WC%;hdxp~VaB^$KXD4 -8o;_%rpYY+GlTh5JF$?5ePq*!O=OC=3`!z#|p~&(}4$zX2dVv4_EE4c~BF!^JPqL>*T*p7gpdI3mMLK -?s~riCu6QDGVq>UjTZN1QhfJ+{PLtk=N^LLn|8V6Wbb^0kt=Nz!WTpS|6tuukDSoD0u7kh$Z*7Nk_H4 -{&tB_ZPZyiUE~2s*SQ-=^FdH8jNo6>8?<2RqMFsvq!sMOPNuEa>nl`1bV;?&?^;(@_@7Q^rXf`;(0*u -Pv~!z%QQ=cAgU3?<yKu8P#~`vE4Col+P%Hotx}|Kc0xgV2;v(n@9&KzyDUBH+rp7r36?fQ7iMnDg7mz -}Up%iw^7snU-ulK|(h%h2UbPmp7_@3z|JH<(n1r&~9Hc`VUzZj_6-}B^D7(&+?q%^EmV=kKKV7UFFLS -2m(YN5pH^h7*0s4C1|6hA~N8{No1|Hmi|15870G;K8!FJVv`BBj(Q5Z#_mN7q-twAgB;%&#S@e-i_H0 -RL-T7?@&-216LERT$Es%|7&LC6#5MUfatUku}vlA2cts-pyjG0x-C%bIhTAg%2D6v~mGqDo%@L--w&q -IKwInqgLI|sk4z<8o_S2o=UA~SQUW&U9MU}&%_N<DcB!Swl$!(tHw-z42B)WnZQD{TQZezgjI<0^qSC -IvFD~VU+qH0kW6b`jls<mD_M!J+1ab$#t?p4Bf}noG>C9E)sq%AUn63!jn0`Y{NENXHv1g{R2EZ2Tcv -kttE+0zHL+CMc#t|v*Sm9Xdo-Y(JpN6XMwaAYtpU#wBe<_sO`|DA(k^E!z5tk%YMvVUig`@4;2=$K-A -RH|;Mgn#cP}Y9@B&#m@_qZQ04^o=32(nQrT|O^RVC+cTEx*ETB9HnTQ>xmhEXCYPA&DyV^VLKESo>`A -i>p?z!WTsr0CM5Z!+7%9oo6P2aFv0trfSr)NFRGUIO2dS{mnxr-mC;8zh&an{v}4t*o<`NH>$!rikk3 -@bi^+3t)DwUCT#saP^+7+5o75?KnlOaL^uY=uv<Xlu&~jXL6C60~I46!9;Q`*w2HDpy*v2Ryircnx{} -6g|l#zI~0ym8kE->_7id~;vaaIG~YQs$AL@bC5Z9=B4s#g#h(QsRF>fNL^!@ob4UkoLK!8Ddg`S$bHR -T!2v%QekmhR#?I2p_84u1BZ#-5r8BN>=r-0*!PHIqI)Itt?Sr^X2UG|Gf0pL#u39x?e!AGDtE&u1#yn -O6OpSI(dPtzX!IM0-PAZlGeXi5|yB3>r3C)3W#CvJ2r*NFeI0OE%(QqpL{EhLM%(}5Z|zNH?CGKe_gc -T@LsuZ?W6@Y98v&O`a={F%oYp)Z4_WZ_^sK5$kCw%PJ(t*`^*b1IV$fk(<PpS?H?CC%M-vWnm*Fq+V) -`gucC=1(J+ZyTULenUg}D_GN@6afBolW=e?LvsClJWdVLd^KsSX{-t#W=-2*y*Qc$w@X~HBPV%8?-%^ -uj!?+iai?Bg^wn1zA@qWhxm>4L>h_1KeRQd>EOxm{q|)?q<=}H0oIhPSw-Ngzc*bA&u`#I&JSyQdI3= -~gJAS@ctek8P9Y1-k`g;|iwdy}o&HqE!T*I~%H_x&qgdFi*ApdX^t~|b=gMk;!w#)1_6jIhNKGu-iML -y3Kp@ZwTnZm^cdS5}XQl!`gNGFlfygpr>o?H}fgud*yHD*2xpajivrRJQ|hA9_r5ITzhVjx^sMHEW1P -sgXn?<*+?WE0RDLeNLv)+mjuNkodl*3eqy&?cegS(V;tGnr_X;A`kcanwN?!rU(E6{Ix<;97E(@Kq&+ -2og{mA(Z^5tE-DkncTApG*d{mDZjSSIQnH=MQ9|fqi{*1iYiW9+B!PkMd00W7+^du`Kb-z&s^pN^I!D -P29n5SqHG)=TVc}JyOUX3@=ouU-HaOk$?#M?ekZ%5AQQo^)MF2r;|FdSlW+b|JgGce<@KTCCbyErM|f -+JF<|;grCx#^iLcG{QoU;<)#NI0y#&cFO77TBn*3GZ`UqwL#ba0eqtP+77c09XaP_0H;I$76I(OQjma --x%ubM`g*sI~lXBz6E&~DUgK)^v5C*C}cmB-KSjxgm&r!;2x4ZaM_{vs9&-1Apz<cLzVj{1r)FngtcS -2fY>?pa1Uiz8)>AB!hNAnxeTH0lC|IncdKV`V+3{Qf?!Sd#(OU#+@zXLnWm?v~wJd(V>){1|urKw3{o -(400cY1lOgg~9PaA4!R`IK3n_geJ-F-6Z>n_2%_(nZ(mLD+8a}t76PdZKL(L2$Q8}gg~62ItYI03xgD -XTI=S1J3X0P9F-lNB2;#D*SMS0_r*gH`SC+ab6UYH@I<lpRNEwmd-DbWy}vi$xvJ(Q(BJedP=iarQ=z -@19#vhgcXrHm>IO}<{YdW&C}+5M2Y}k+Qf?HePBZf+f%bXkVuH;!SC<%Lz$Som^F=Ac9o$aEOO6H~%~ -f@ru&bx-?C=`jL3NU@VReJyPCH+es~H;%jTLrUPUDp|$a2gkx6LddE!OBY$!Y_}^}n4;0h`YQ(uiO}+ -i+ClSnm|f=?fSYWZR=Nvwx<~!40=T1{fGfCGPE($bZB^v?Zzu|5V%*#l0nN9zCbzJleYKVrs1L>YJlE -%P>!$j+;kY7OD`RSFDr84sAy6p@8oOlXb*yMaT%(L7vVVsSid$$!bg7tY|Dx#mp-`?~_nz$JiE%NWtS -`^IoXV`^grM1R|M*v9~okK)8#oTpOXAx_UZxf?GF(`?byey4ub6b|Te2zqf~Li2}-Ax)-y(-|ppWr=x -FP(+95!i-*k+Tm|CoF|?Vg<-0Z<pz!#cg##RHSHb~G+B_WiJUKb8M(}&R!MuTr6FA%A9>L%XTIy9CU( -WSnaciqDsI=Q{du=zfTf*JSZV9v3Zrk~Ks@*DM>9X6Zh}YR|F;HtGvDR)A3GOM)zM17JdR5z1iJMz5; -KfTBwHu%=qH}2%#wKCtAOYE7!)r+3a*zKU0=T}9%H0F-R`Xwj4^VrW#y0r3GFv9`W6%+~tihhB>}_g( -PD1+-;I5i353+^?`kxPS=E6{f{KqFZ^203^fwU&lCw87ohnIaWc%6L9x&ij%>N$+iT>mpGasdwEAx`| -$+iybSOOVZ#z9!NQ7hBOhoTgdgdKuI&@DB5A{@hA_6GEh}Z$e4e??Zq~&flVf--Z&^@Y^x<T>Q)D5Wo -rLXW>7O|0CC%%V*N~9MS&R=Zca1=JPxiKqV61<o#AX5I}jMbfbK^4K_rt_1^ahYIGxS^(+e5cdlRnj~ -fNI!l%&<t-Oc9mK`b6xRZb0Z$_g%j_!)QHjAVc_Exd9!tITwySRI5JY58_oe_0S*z00y4PK9`3o;wT) -#);hzTph9CRmTGId${U8pNr0bF`SXDx<?D0oM!TRL&t1+Li!r-+2yhcSK#HceRBMS#8=F7=6puz{qQw -LkELTZx7n|dKyGk+Ur|{f^RknO=x|aC|ByfU9&J&|Eevc%-FnfOb`jfh;o0`MvIOe2G_&FhBjAH*v{- -q{C>;p;q=MIXKK0I{+g?{YfZ4KiEeW146*YgWw4+l`WivF4NIdhP12?7=@V&WDi>4yk`6yZ(O-#_P#b -UdM<C+7{D2ZAZG4x}HczR}{J=PGLp(hrgm|hS+Yqzt^%$2M{Km+Ie<18qQJWH|suqd#e9x^u75TbL7` -r2}OZCPFRSkY*rs%n(zkB^eWA8Tb4UL+N6|2K#-Sawh^>7b2!ZV5%_{mafl-j&n7w!>6c?u$@%Am6%x -Ob_Y@-d+tE{4u8X%<xZ6i%NfQ7N_j9Bs`Z5{<9w(2;Rzs8ug>oUc#*D6m?XHHbi3xi=@eBk^4_5Z?)^ -^=OFlFh5Cm@S89PzYoA;nH+j@oPm*tM#g#ggn67vkQfr>iR66sQlK*gegwtY@Knw7dFCYLeEn91xeeo -~8!8a>f)M40detff3wms;0c7E0R|U-Xwi*;KT~(+gbkxCo$1c0D2iL#HT_q0g+{Y8R=%e_@Y)7g8476 -wHpPNk;!wRydGYB#p$ymc3`~jkMERzS%4MTTIpR?=7p7J#aewyAa*o{^eDjlbzodJdhci1l#R!*N%-| -=_n5uH0lbRd6`#QfozX{Y)N!91GAdE`6#h#yNOG#OACtZen69pkFcAP>}OSEuxfePQFnJY5=Ns1u01F -m0BGS&Tj|70AJxVX9l#!d7P8;IM_iR&~^?TEfzQ<>?{AX9%IA5I$1_F_bb$>sn4NM{Hr?WVJ14YZ*mZ -`rr+O)!pGvrzIB$NwsOf=&``-{~|L!7E<L3Jo1vhdRB*ut+Zka5Wqs4rLLR=P>@DLP{-=gK@R{zpI8= -dYiMFAXVs0twL}bEfZ@bi(M-oy$7J8ug9ZRK9K+>x<7uE8Zs`fTQ58&^2SBHFCs(P3=QF&#dua1_K*z -TUh#(Am#yr}Ku^wN6wNVIYcilPy4Aq8@Gg|BM8Op@J599+@%ak443|crK4KR0LKyxL!;W^*LAg;R+C> -!9b4sE?sNE}J2lc%YKu}zIUNg<4G=;KN1U~EGhn<_&?JV_x1%oCJSfFMrc<FvqGusG2jvM6E;hzt49I -;sOXHlNS>b(58i`$SDT%+eZ4s&4CO5vQiJ?W1V{d-@nI7$*kFditcPr_uk)tY7yO(ey-9tEK--ZQj^s -4RGI5^y-Z{Xv<qMC;<=EoMXTM|5JiKz9&m^kB?>yqHGU$)$u`_kZNDjk2Uz|{a|S0fLfIlnrMi!2e_v -BpbC`3eXaI2N4|WdJ$oh`z#u3?0JH|cXOqhyrZ@fJFG9q&ext1Sh^cebOTn!|cknQ<Bs+pmH9P(@cSD -Sp>uDTRw|o@&_06^T@j$#Wc3?B^gwAi6$XoeX5;PK*g9b(omY`1E%$v)!0elwM;dM$CrFyK$hP-XW+7 -nnB)Esxa4O7Ak@g+{~+=N3MJgYi$Bi{`nk`q&~wG=|Q`5N0+N5xvHoycYAdeTaE|M8FAk-#5#7}B0mf -^lT(xl27yQZxsCsM|j#m32@CZcSS_h!Y>uzrMaUeSTr<)-<1uM9_hj&%OrN!-nw}U()05I6S%ADn7Nw -FE^JX#2%W>qtX(LMp8Bkomg!&Jq>~;9gGI?G+W=;&Yxi8g%6&NFn-3miI5y_NP%&YpHn`5PFKlS6G62 -at3ym)y2)+I9W*{Eh1JeeW6*}shE^TBQkEf|tqU_~tSjw#<!n%b*38z0XacR}n4KV<HDjEs$#Yox=m5 -|%0+{_@B5AV9%9g52ABk*QKiI1=JqAVc37(y2`so8cv!!v2lZgrgMBIKN(Qn}y>3mF9Hf=exnP$@%2@ -gUl@vLlGC2oKg>9ZihGlQyhHG9P|K}A)k#W}}Sw@i|?c)ASqg2SQIQ3q2xVeF}w>cL3IfRtyFkB!H>2 -FlrZ+dTOwm}!db5}hULG(G5GabB9<tvA)mYYGPpZqM|XtuB9Nw_A5AzoY~2but(uP<A;Z8m=K-kX4Kt -bE(p^KpglhSi-bu#b8>z?2$CQg9sZLaK(7pKq|01twvJXf%1fH;SC*5kLNxN-?cD?MbW`_mMV)5x#PI -GlQlL>n(;2d+gYsGFmYM6*bNw{l?&BeLSL8ldJuvb@chvb#iCFuI>+)kz2UJc4FvD;h~&eoG+Tv|G0N -#3jBtumE8o(om3#L0m4-800;^2eUdBs0@CjFhQB`T?$9Yycjt;<EO_P0Zb*c-me2|v!X6~@z{Loby-y -9;)$T;f1<=}Y);ZXvUtN^?aV?H|$xyQrWa9~7(7Q8orpQMi5_%zQTv+GP*21hfna3nTFsWq4(ggX0*d -^g5yX=|ReyRLaW{YML2sbNIO&VW-3%V{t)(|Eln-xjn7d=t)~OVs$IM}7wDBSoRg000>JF0vln2qz^2 -H6iyAj{_?*Q&~4YNNH3L{f1nc0&7^4p$Y&kHPIA6ji0L|ul8Q#gKNe~B-6_I-1?83KF$fNB`V}}k*67 -+A&acyeK@YV(qdp7#~AswnoBxBpiy%K+_2^V`mJkDBsZ)%a=Jmyp%AWi+k&4#E{MRP20qT@;GSdwC^? -_ui&rF}o3n;hvdFtx$yxw_>?F4oLo`Zn3KL-Zgt>`8_1`p+?w!eKH<RGV!yq#5Be4emhz8Y$#`_fv2r -=k8=CdS;q*^Hfg_g$FG&gRpgw<lAO?WnP#X#BNfFgpC)`g5ftBISD#M5R!5wsXGxfx)lDi=-$Du(l+B -w%CM8GQVxj@wd8uH1hfsGheB^4IpnW;Y5xySE#ig?T!!_qvz{@Z=y%P-dt(W-%nh)Ua!x^*Bjz&je_h -lc_558}W7lZi3iv($c89XJptOxV<ig_g0BPU4KCb_R2@s%fc0P$#hKU1MaWEw|5wvyt`Sh_TQCr4*Al -@6}gART`pyEqsSFu43R8viYm_9=1WTU?L9ucTV}j*=jO&yq<qJ@(bS6FPe|$JMwfM?Rx{N};#5|&n~7 -2yv>yj#fcMwMGer%{F}7WyX9AY^KD3(~7;^@<@CMY8?9B~Vklqt1=u$P@4HqeDnjODj$1Y6IsS3wZza -ybgy7r_9p}9CH1^s1mcyVz&aSksp$G@E6wPlyx_=@Qk^v@R`4zG?cYX^wyy>hzTss%QN!1!0c#X{Gqc -8dl6ZE%YT{&_KIB5L$)ZHM`%l|qw_>oLrlDT!1`-L{b#Dx0=iYc>-9{GXxerwG$F%ob##p6j!C3Yh&> -)i#W)GrHPV^AZirNDcP3GMcBDim|hxI^$TYO<~~&Yc0L_E4bGWqk=W{%TlLGw~DKhV@_dEMiW#`Q_-{ -v-dRAK04#h0e@z3La!XdR5fRhXb^#iTxS~KU24~8hCVU9AzEdd1d6Z@7MszLIJMu$Q{Fq4uzI4(5LwK -}s@30g)a#7JL=#xETcoxcg8PXM<YO{*Evr*lBN!uZ5dOO7n7I5{xI73^xKM&86HaMp|rdCQKGxlO?lf -#`24~}DbVXCh#!E?OnNJ2>Qn_)ov!~vg``EM=pnG&A9YY+O+B*rsjeLU-1eE-91T|-m2EmTO{S>g&0{ -kHXhzIy?}rtXY7J6t$e2|iBLFE*Rl4O;3*cAqO*Y|>H5oNBSXw1uWMbk)z(OM7(cf8BMQI0<eU!*O=; -_;z~Uz%@3wZ6fN^-$Bz>acP!;gnBI1{xeC2S9oi-umn4EaeH06J+$wW!D4L_m(dIX8XIbCZE%HIj>K* -zaUBCM`lFQHk+6p3m(AUql?F{uMr$TZ_oWx}@+&qh+FGRUwe4@-+Vx_WUfpy=O1pPyhz>c$&N3Shcs1 -`X3uE4_qTwm<1g%pBD7-p^Cg@EE(Foi%^3&yhrHAWEJ}s$H@xTym?#GuVjgn`KehZ9YQwRjGt7WiTA0 -jv49$>JQ$XN?0R8gPePlg7-xRSz~eRpdWE$Du&f?XF%DHH2GTWK{6$xtJOr<&uaETUqsx_f6Mlo9Pb< -r^ujbX3e~9qi`W?A5>T>dBacU7pO@HS9B%cxM00m+8xwdZV#%wWYdD;iEA{s73Hf+^Eszjd=BwnmwcY -6>gxEn-U7&5Q3BI^!DF1Ax&De_GnP!ccN!x=>}7?(2;pfXV-FX1E;w1vuBe-`#e`;f&$wSbj5f$GhWq -)mxb<rm+s=8WZuL#99ETxGnd<GFnw9b{{Kg7H3Frg(EBwCDI=J37)CCFzf`R95pR;z(O=A4Rrst)x_- -shDpTS^X9YC7Rf`wq(x~klshDQK@S5Ew(SBRASqyz->r;x*+Z2pe$u|}jo@jFwNmUFmqphdUut4-61= -pKfV)4>qSVh+Vof$sSacrQ>%?(cBm?73P90}h%?d<8vL#Mo@%(|-vC-i%$f{-#sp{N%~1rgn7s_8gn@ -(#Kvc;+ZA6**mzR;(Wp$<JomzMe2a^PU6u`tCLSPGd>CM5>p2>u?BXKSH&ri~Zq9@dQ~_CJbvP;o$xX -x_fQ8q}ipQQaQf!-WZG+CIHT&)B(Kjs)Ba8Y1XMxfiW37$X+QVq0=!v7(YYi(12D|y8cXGG0IYw -P0)pq}sWhjdlw1_E*3bsC=%=OYp)b0rr<XcEDAI^{1CkYSAVPOB^<BEE=bgS{sGtHYDW|HuNyP&ZDY^ -~)D8>_3GpQ~a#&bQ3ON`V7=xWf$OZ_k=;|W8YMUH3cq9?u+3SH3>Z-2^{I!S$CN<=8^H^5=^7n_$zH9 -p@{!$95<h66;rArQ?BpWlA}hA;@3kctn)@D3!tK1%HW@PqhyBI&4D|Bxmhux2=Ss`e0oplD*)p=;sr+ -KFZ~uJi2TIzuOwZsN^p0|DIvQ82A|6F*~<L?iKkb(4U;2zVjX$6wGYp|yhBZn;ho<NF|@Paow<u;DF} -81NUVtu*0AKx>WxX+&cPAVgCV{0%RERaRaUMj``hk-9@o`nIqx!4Q@-UqUv$^MX}F1BG}Y0n|-F`Na% -9GD`YkiKx|r;$El9l0gN&a{KxxnaJI=C?SMVCEn90)AXG<j94rK?ZgLcUy=pIHnRwB=b1qe+VTwQ#A7 -?!K8P}cQh-5lUk}vip}kV`ExU&y+Nw8~-W}G&pjQ;v(2JoKLw}kgc+fDUYu^oGkSPI`KP%LdB3J7Nvl -%cMWu{kD9+0MHEDb*_Tn3$4+;)4`pmkxp__mVot1O#GZA3*ocuj?U4XR_ua-EE}&z4FDoB7CFH%2%rC -&`$Xf|5t6$x+~W2KG*+K${HNw~Eg}hdciZP)h>@6aWAK2ml;P_Ey1>u)w}&000`Y0RSKX003}la4%nW -Wo~3|axZjwaA|I5UuAf7Wo~n6Z*FrgaCz;$X>%J#vMBl;zoG|<cmQM&BgyuR%^5nZbw=Su3XArf^LQC -x6KIe<0@0Z6hA5hc@3+6)sw!(~5R~M5HY02i=&s7zva&L>aw#v?Ro!O!>8w}s*IBh(7PGdjR!!p3M3r -1@R<pLMmbP5EYSvKB{H)eRowrqOem7UPWP7zPnk;X!DScCq%hj3rb(z;I_}TP&(`mk3PN&&HcGSz@b1 -!?d0pNSsT$wMWUbe2wi?S`>70rZ-4IZzq24nvEbeT8JFL`Z$SF2gx7AyGQJbF>C@}>Flec3|qmv7n{A -e)D;^E$tH1C2%x9@l40^zb_vfqVR>ST4->Lm0LGt~w?^4>#+jE%NhfozLFFFB$#gCr_JfxTvd(aBW6r -<d=Eb=BEzC<K}8Ld)e}e#1B=;r&V2T+H&Pr{adk0)P-4Wi}&ph`6@pv?5ii6#lro1dY+f7AM&;9KF)n -zw1w(CW5mR+O#<rEY6Fk$&u7KIHii4K$T!ROSvhOXqaX8&V(!i2t9oA4#atJ{$u<uRX0`QZ)^1?!v)O -qud)th&eDZdZPXN8Dwt_C3ZUPP>o;Ht9-5SfICs%C|J$zbSKyTiMk6$dSybT||T+QQ>FIQ2ypI}nvuJ -f-}#a^{oWbHX_9J>ovRSS4NH<e*06m>gY74O`1%ClA>=4@Hy^|XRQ(8IYM&OC4P8SbWOTj#50QPmgrR -k5y%nQrQ=Xk!Qqz0t6Q-X>I|F3-wU{3KsaPxGem%9>S~UKAInMeV)A(M(|~TKg2HQ0=v{vDMWhtTmr2 -ED>5@F{`-L`_~Ll|E|lqeg8UWp@wOPf#{j80kg}C@aL59PjAgb*cBReA1}+ii5`T+<!_t3w!J(2_t(# --Pyhb>>31)G{F@t*!h|2Ip9;W#JN-YwMk{N#q(4@zdL)SVdQ%r!j;$B4Vb1e+`0FyiYO>R!Si#9)Xgg -!%X#==3Yu^-hI6$gl=UEB@Yh7Qxd}a4O(0`vs8N#9Hc?)z#(Fe7FFRB_y@%*R465tng^=q+G?ML*D9+ -Z~S|2=Qcbq`$MfPP*yzm&zLdf*Y%km`O{TzTccFB{tppp$EL;K)y1`iH!oo!cK9BJyD^e)<L}<Z4z#k -8NwO);NU@vtQ>e^i{1qphZ)vp@bk6tT*Ma4o47C-3$e1nOe19^5v%RCS#Vn$yimqgJ~ZmA5Q1RtTK~( --0R)TfE;C~a9HAc!})Tt&fD^|T$b%s@AdQ7(=Y$@0Jw<5dQ<ddfqy9493CM|tbcf3Fk^!!Dj@H&y3BI -G?Tcz&F3JL7u1nxus)gY?N<5Wd60`GS2}}u4U4n8&)mB9@hf1ec+0@VhYA|2Tfk;Ckpg-?`SY!<obm~ -8JH2c#Rf131qJtDN(^i8qC6M4B$b1*L!*>qY1v7Jtb4X_m>evY4-_HNeyYa>;@=>wSQMP9!xY8a;lH5 -|cng2Xd<#?vvJEnx$%k%fU1x`yw?vREAm0BNY-??1&#Fc~!veB=;;WKrK;O`M`U6R;V8&4$5L3A1u|U -N+eovTaa)RnCeG2q=KMD4GTs03;rO6$QfMb}q{10(Zg0bcX(xiww>=>aLoOyo8!a1)n3#;i7*HJ-NxC -MJ%lQ2NT^N8Au2P3(2@0KxySXZ(y&~JX`(g)D3$&?T<3(J(hyE6aSq9^ufKu4|VS#gMWu{8(b`RMchj -}K6?9ygJ8Dc#rA>u-B)W3ocWs9pO!1?lbN?EoUa?=W{2z1u?KCnxtO-^rY#Z+1lVjYhGhdXMVkY~8Lr -2fW{pR#wQzW9G(#WgH`#*`ZM`9l{~I2Ew&%AUjMD9@Em(C}RoV66A_sxPPVYAiy;wro!2(F!jh->=KC -Sj&`cZS{v*>4VN^W4oTqDFA*o^N{!UBqNjj(U}xQU@X5UnOetE<(tTrDab+VJyn_VB?-k&NcN+AQZ&; -ku_NKd40-wlNt|^Y3-C9cM!(f0L=uQDQyDBG65e4~g{Sthsd>^@`<|{(t?+x__r0kFZ-!@d?{bHO;7q -yP};;MU=HPSsJ3F?p=;eU@r+!0l&G^2R~M;LeXTd1lUI+agjm65|4bKo6H@}g%g9l0ADH;h=8n8{Y6< -fP<6cqrXPEq4MA2ZXVqDqug`%5QQ^@f16~TSFh@~lf4^r(o#^rKaGW7;bMywb?(t}p9l)Z(vp1uVZhM -15>WAZUGwQ!SFq0|dfQq%)B2poyDY&^>J64at`G_2?l52>T$H#hFEQCs}g|7qp)+#LbDGF7e;8d^Xx> -$KPM022k+d@!Btr~cO0Q>zv=7t4biS!NW1=18F1i0BYPmoD^Q(Y7pFiF570Uu9z<>6a1!Bf2ex`#Z_r -eO{U_#KOgwGsI50ZQ1C*u4ee7xF@rQSUHX?cv~XFd`ku>WW}Ydf%l=eJ90$*_L9zq>B9_#fTA=f`>5s -sdnM<U<@OmQLfqp<RZPUxOZ-x4Z~Z(JaxdtR|FToM6jQgZCm*-C%4f2hk_%dA2LiTtJI*ULfNQ<aF_5 -DnNlJ#3cr}mH2Z_OMCLcgS#|o)028rC@CtV?z)KvV!I|0To=pjN8`59lJkD~|RsiG8XmeS%=X#Tl`u- -U&*xR5wa5$R8-Nlaff+3|j=bZ*2+;y_={p~%IR!4g3q1F&~DC<)W%tEM60g-&;l$^*5&&wHzG_a)kDz -OD8w&ot8B@Dy}L2wMvY@$$il`IT>*jyl>%1H1_V8Yw;YTkH7;qf~X+;ojo>>STMvHk$iRr;}NVRxP9a -y9`W$WJS1p+UXW1xO?f?f(|AUeFebtSgWg5Y#)656v-!AFKr@5^p(NXWVAl<2Dn;$(TmNlr)R6NqT9) -v6^q9=R81|RdER`M=bGu)K$Ts`)^6P8{-cOIy>(HALF@aZHWrB+wgo#mw-GNZMP#i=82OjpIhV=41<& -X!tzM!8L&uoRS8YnSpprzdt{J(M%!yLUBS83!;|C{a3M?NLWGiO!5VM?aH7P6)(P3%d8|Lr`lPY%<01 -0-<g3qmN_=4uW24k(Rx6~KNBfVC4b}X!jDX6!X``P6|Idmglo_O#G;8U}OiY}cytAS$0rxFMRZ>iVQ& -7rvNGU&*TsQ6%A^gu`aP1c0284@Qv4*`@t(LI+Ga$2POF0DxN&HK(vC{t`_H#TE@@A${&5?J%lK9N4* -#T_5$60Wz!z6A4d@WEJp?`*$5F&H|bQ`NK_F%!vGo+HhUWkTv&WcGG_vVyVbkYS$^Sr%nQ~kr^f1AE} -`TsuOw-fO7g9i_GsgZqlkUhi$pC|+L7|(0rn-rbf+B&1<(`vP1-DpgJg3sa0AD+MZ`A~X$1e@#_y8Li -!hq;j#dDBWmK*wB@3E4T_X7+KzJv6joRT-+!br55agb+`;uJI1CErHPl%o^>;Hu)5QeyY8HFZ-5DfOO -QfBu63f8E2=PHoGiH`N+4S%**0|XNa2sI4$5s0o5KpM4WzG6l+iahlk&EO059nj`XYq;Bs68_gxg(dE -2g={XhQkbaU2B)>m*wuO?M}_Qw(q<l>7zeg4HGOQ#9WaN#o*q;s>%Q`{={ko0z0<)5;&?VMZ&{S+8bk -2wXk>)bXQ6Zv&T35VSIYipQ|Sj;C|_8ep2le{TnWaG7o9^*XBL8j!hD%<-ekTCUUGMOZrd$TzmVv`93 -?*P67cJI=BVnp1d?~8m9cP8EYS9q2VvBu~_`h`I4!#i(1(y3cqb6i}}HiSYaCl=XHP8_-;@|~RE*$Ge -ahS<Y4;Oo)UzyO1?u+geZ+asW5bw%a~u<_EoU0Vk%8k~!E*U2S;c~!i}lQJ7VHoc=696Mevzzf)=Z_7 -1vx^_TKxdc`hj#?l?KpjNOds*{M{UiY3HwByx>I)i@;{hs<ANd_170t40QN~Ad6F{kpe7;BLyR68S>N -Iy`fO_}SO}T7IbsHUoYrR>85m<<#itkg0cnr%7_?&`~bg2Mwe2+7^PK74VvP<ayqI}PaDI|!K2V?yEV -DgY?#^;l-Ctq#XaKiu6v;k~sw>$`yd5b09bFHRJe$9H4W|-u_kRw@zcRWO;O=~llVmfUzfotBtv|dzb -mSW**?BhnA%8C#$R%u7_g|8ByN?V>@F{TRKn9&oh0nbrVFjoZ@$(JdTDs@F&wH}42z?vg2CEOp)GKq* -&SVU%7v7e^Ye#eM|(O#7W2ykoG%VEo!`A!VHOTpXCgctvE8Vw|ou{cK>GdJZ_YUgQ}83O6|C7xp_=oW -!W5s4))#=Mw=bT`MFkD?tWr;mAevv&UCQO|aUM5VhxnT1XC?I6)ks9ph@be>kP2w*IL)=R$vJ=<}p$+ -iDb(W_jQtzCBzJN7dWFoLc+F$t#8T7V>qKz*8M>Ms1CvjhHyv$DIq7a^U#jiuezwZqL_oUSqI^*YP#K -neZY@5FEg3YG+62|RFm0Tm1%yP{*4=ZH|r!bQCB8w*GkpU3tjiy_|2Hmh?n+EAlTOkC6KKn3r?>3vZy -^Ez8rXQ+IttT0S{UoyiCe9CL$#_{C(EP?`Six;xqXh+#!>0vP3G;@k-AOG6*I9ZOb;>#LIs}HzaK!eV -iDqaV-i*$aE>@fiqj~*P4wpR68nbgGvNDNdnU5!oDXmfZq$NtY`U2o3##PT~HAi7Yh<S7&F-(J9dc=S -os8vke8Ogv`xn{*nxielT~5g@*9sq3OyR{#VU5!$B2GUoDK_C0WiXwmf!FPYn|fGgI_veC-iO~N*LE% -AAm*ZXF|j=n&p!xvlYpah{u4|{tKa{%OV&N68>0FVP@sl6eg7OC1kQ-w^$7jhfR2OK|~Z0(fkKS)Q%9 -YSnER@$mtF=7;Oy5-`Em7ubecB)AuN>%}+w4;u01B%B82mx%4L%KcIh4idp=5)TfxVTa}M*jt0H-(zj -zGvFmXSotNc&2*hje}~Q&}*-<E8{(u6W=pJbwz_0o`&Z7qMC0253_4T0X)RvD_w9e%T=+e_Q}NS=H`a -VyW!Tw8JuS|PKCCsp0jl^nuNOBV{83Bft6{2?HG1c0rCX@GD%bXv1xROfP8`DnbpfIL|cgkVY^wwv_I -Nw8C&lqX)@c*DacdH0_f8+pTVZNtWYYvKz$Rvgr<@GAyvE4H8om^YT97cXkA^7vm&3JE76;7QNA_Zns -lj0zx5W}413cqz8VtF?vt8C=}WZg;`Yj?XktyZ>DyhaBgYq1_NQ`Ht@iA6X2Wt)OmIGmvkfu<ll2w77 -$E~`ClPgkO0*$`1PJ;xVR(sQgaDEk`HnnzXl||U12MU8L7f)=3#LC^G}5aC^L17gO@>s~Q&44&V2}>h -VYM8uaK6`N@eZalx7UVn=E}8`1?ADB;mCqXE0pfBd?Jcax^beLN`BxF1IP;iCTfZR$<7YHOsD-ZHR1T -5h*^$_)e#CFOz@`DWBO&N9{!Gw1}reE=J0YdtEP%7dL{8p#;$}KFkdSbF3yi+wYUPl2TooyS%1mOGk8 -?ou2qT-9)l15I>Z!Hj8#zAP6Q4WgdPUm$2#{jVtpDhVxIiQYX^s>UK(S36R%)WNLGwJK$zkgf~@5&%O -5uGFu^o$fZf)pJRt$k)CrMm!e#)&kvi9cb9v}5)Kh#*>*Us_WZkYAkhd)Hc=_NTvNDmbF|4(0T>#d3C -bK{tpH-_ti|lk(ZQ2G+t#kH=p>w*25~OdKgK&Sz>$2K3>}YiXf*-SGfC>%UBl})g6Vhug3N{sQkVIYK -r6b!h;lYh}Ead(J(sqFg)?UxLXu0O?qn>rbQaAYKQO|SRQnmHtp6BqDDulXta-woC>1WS(ztSDh&wB| -6u%MZsf^yQ*P1=V&zGt62O5fyb_bovx^~ga~4+Y?ZJp!v(#AL-O`LB3voGLfYhTk2IvtJGo*~J%4&ka -538D}^3MxOM1H@aY|?DHPFPAG(gUp>!fN4?XJk)MD4)2qW*)5qU`|LPy#zkGvNtk*Q!L4dA<{mdN;%D -2XI8`OR*+J`0WHAs-0kBoH(@f>q}za8JdB=8zMHtrydLd)_LJ8d0@LJvXbQj~H_G{7Q@6oM)3LZKU+# -OMF^^!uNmJ%2WRe0ccN8#{+U=5uL6cyFTk_}GyX^XRh3-`2%Kekw1s{#by)Gvnpu-eFZFvj&V@>-1wo -d;^C3;@Bt7lru*G{qp^TrsB;YEmboO$%w7zRrS`uBIxYvCr?;)%HPQZ$pNsAc(`qCg_&R%zcx;KQ@oL -)$~Wmt`M=WT&R4R}!$tWIvnt&5Syi8zF1>F7!1SW7Ob6geotqzRT@<39mc=9ea(}F#iLW6%rH36I3=G -tR9!~Q4e2Al`xwER@+e{E1ZHFdGJXFy#tQc99R^5MRy?s2NNm?qjB9n&cx2Rv4kzs!-IrYe`gXZ>VfA -8TjiTo&zz_}D&$igtO8d|C``vLW@l`o`ou)Fa&5!~_RN~tu|{!+{r0tX<$_5--rH;w}%-XBV1<HP&XA -KqbTHs@-_D)=F>6i{~pd|=%+ILzSyXuxbL)?@_O@N~gs$0}2rSz1W^=9ym8E3-To`PFGL&FBBzG_5xL -c54Le(ck43(g-!AEQD^D>7B?%HG3MZNTA2lL*wp@R;I>?Pz2vYvCbxAOuEJgzRI?Md=1%+iWZ!zw3R5 -s7wCoToIH&$McfTm4Kcs>R21bGa5`kC=yMP_bOkp3uqXqc;0+v7@}er20jZmCOW+C`jzgGx+4n&H2yb -KzM~4r`D4ve9!__gWQp_BCFD44Y%LUKJSUPb5D~Tc}*_pw{!pSY$paxsMt6Ip{dW9Y@n~D{LjMgyWbw -M@&>m|;h^mnYPs4^G8W0k;u+F_B>5(@lL4+$T-HqT@ZQ9a;oDW4wbnT)rQy2j!y+vy3D)M3h=H6)ofv -X5kA+x<~u+p$Ba=T8`G&H)=~05H~|Jxjh)H#ui!p>XlK?TJF8-%ed^|0(N`%hfpytYt%Jy<XjpV*TV& -x>aXqi++5sV%Av3t(go>%I#3&VHya8woY3RU82$ZqLsr%98DrXw!m3jKrTiNpuZlND)GEGQ|T2RG?RZ -;<!acVEHP3JGCU;Z6(i8%Not5qh@hP@v@=^bt{FQDlIx7`ERzkdxxY6fq_f?tY(9%Vbs0r-ru)|hgKv -(mxwALN!D1VNcxIO=;iP#Gx&g5-8nAFhJ)9To_WZ!GD4yEFSf>MDgZ#w;L2~)gWHCKkR;M{M25;a5l? -^qZ!y9QoeCMuq*;tWpju=_tjz)ba(7YBSPc)YQa1BQmDn!7Hb2l8ESdm=ZfD#KAzGq`CxG*1x?`Sk!F -3MTXc3T&C^M%SKb<O+m(HKAjan{D4c);N+WBQ3rnZ1eUrqurH0p6JG#1q=uR{k?jLh~jvgqzkd9zd=} -cu;n7kVX7FFmPf;wa{rgHrUXDD-o6(qwJ=ggD{q{l%Wj84#}ruMwRW=h$%+5n9U5s^I*W8B|1GUm!4m -bcLJalE3*vnLfD1N^9mN{ho4^YMHa9;HTQB1ugcju@DW$W?J5k_BIAtIjT*B@%%P%q45(>`06!3YZj@ -ousv@>V?t!}<Ld3C=4Pho)4BYMoZn@;9!#89g>b5Ot^OfocFc^HIpbASlg-!gB1Z9JYGJCT)FPf4he9 -cjyjWZs2#SG6<bR#l$mjO<4fP=^b#G<SN2@o#I_jVh@E~b9k>1fbZ2wwE9pA@e0VhIeNQWHv3TQ-R;s -t5gqPkmaZ5QY#X?;uOGBQo_?_^2X${NyP<@$8s%(P324TSC%wx+y@?1SiQQ-VSeI-RpLPJ8SD&(Kbev -3vA=M$QxV`b?<Ud)&23+;q(3M*(?0QdsRG-=vHubW!%D8cZ*JDo<%oy7dm!HS6MUT@@48&t26>?qWaY -y5k?1)17=j>DB1wZc^5{;A?kuWqVR|r6Hg;Qnsq)aws~!_q1QpyH$5VbitKU-3>xV?N?Bb+#zO$?+5j -0x2y>JDKg8ZJ&={a*uc=I$rxaGGo0l{&u30P}XI)HlqKlnCrEi{0A1WQ`l$TOQ6*UGCuG<m_&5#{wq` -K+CTYO7)=CSd!=z9c~y`Ma$n@vFMAu`Uk^JI(u87#&%_WTd^O?TO(m8GH$lRIK@XksXKjXU@$`i*X@7 -j6`zf06hgo^CUH0c>8%I8j*5KtYJavqKw|kmE2Y&X-?&fva*}o|bJR*R`5gNK~WSa>vq<ISo0t;{Cqd -_K8w5cK_mjZ&hI;bzd&i2xlq|y-CAw%v6j<o`xztOA+K~+0FQk%QLmoVa_bxsjria2!5RTKJMTxpd(2 -?mM!(D2U9QDnxIOoCX<L5TbWqDS_0oX?Y09Ccm27Sy}>iU4?UDK^Q&;|;TW9(Mrl{Uh?DaeS=dk6L!} -O)=Yx0-l9P!a7gA^|N+#<vQ}0w|M5kl5|A>MfF;sjMW8cRrIUMb!tr>4a^rZqu)HuZHDNK{r<P73m#R -wSQxeU5#*4;++vQv1nCyeKWzD1SuZ4~~`(XU-5AbGBA+sM%=;zv-RqUK>_j`I(WamHMrEF>|SCCCx1w -7(=HNb3eguKocO>z#`ng`7u|kEC7O$C1)3ebCu<FGJI?vGJptnb@Xg##vllhhoUq)w-qYx0BvGVt-Qo -`tf8q3U_eFU2?l7te<V&E%8*{Wu7|`j64Iqm$x6|F|ec`1b*I;5xE3Yp2#vz*&JzTddGZ3O!{^((=wk -^5CUTY50iu)5M3{?)UABXt_`GpD>|oDUJ#OoWQtt3I$522+28ZoThz+20d;sU6<o{)bz5}lYj)9JaCu --8oc+9V4Y6thPqh7PJ5q)N!==Ef**<TH=P_9bC@3v1%Q_f=Q5M%4c)xbUkEO_A;K`%5mnbOEw}4~8h# -B5E6B}a~;~vX{fKD@IVtJ1ZqjErO(e$wOyzmFDulG1Dkmq-vJzC)bGkIwmW@5sV`G){=#6Jz?3^YLnb -}nfPC&!2?&BOgx845b3pktZRNGV55#Db;y;$(*cH$q$FuEa;{7>pkvUFxR}H;(fuPRE8r<0x^~a*vk= -2ZhmO>#NWQUB++v=-tD2>NmVnM_BhbeF1g*Or=UPZAuInI$zbS=CbAiW9P9=x43&|g5z<1gtdYie45i -#@{HHH&>B(9eLB3TjOl_u#Llu>H<OV3@bhWNf5)Olhr^CqZ$?T(!=g)L6?IE1A%mefkIsOi8(+_$v~k -3T?)cNBcX=3Fz`PIHGbk6FeE3nS9%omvi_Ql>I!>AoAPyoG*1eZK!+XLDq^_mdhtP(w{UuBLhyhO0f) -A#JZh4zYFsb?KYIy3MZ$#-FS+wRJiLt#Y+HB}z0|8Ggj&2Oea`Q;xlOr00vh={*E2k|~qQL~!Q9GvO@ -RUYOG-2v)2yYt6_0#lQ&eBweqZxE60v5pZRN9Bz1|ZcA>=haJ+TZoTzT9me-gBOGz-P6nJ%OEuq7~VP -Grh~ut3kL1pWh2${p>DGQ1eT4{T$<k<89WvsuXF~F>QYZu5BCu$vJq51gR3%M)P@p&gNA?cWTQ54bUA -9`Mvvt2e{ww)1?uYOs(a_;kV(G@Jht^J><=P!v9ju`p{l*rPmS(401OvoK3_b>5u0*g`YQ@*}2y<Ov{ -qjB}}!`f22bAF{=);W_7kIfA#5O<FazVG|Hq81<HIgd%MTaMq>#e8U?8JXX5E68M~ZK58_rR@X}^A8@ -}J?S>Fy!0KK13;|T&qu$}?~P8*-+Hk!j=9g4y#&2diVu&v5v3VnRvG7reNu?!Ro-1*FR8qOQ`fhhLiu -t2}XZAKRC^i18?Fo=I=5?nNe7;9jV_?6NmjoGtEytYaXDoZvSIm~C#1eh5OT%5tq3{%jWu>HGiCfL6I -emXil-g!$MZr@P)w>DhB&;La(BOPRNp5iQa(a+&0(g~3Rj$4_e!NXr}xq!1%RkpDviG03JElo`r!F31 -M40htTHVET->PxY1&H~MX%BRpVZK+@%TLOLH$Hopar8`yNQc{j~W2|T#NH*j$nrdNZ&G(}J+B&AAK^m -T+*USz$N3omGN4~gNw^xakxM<EYyo7hr8UUQ}=prLVdw(J(jS&btH)6_`2%9;^cESV#iA%>_ar&OI() -5rIt$k;8xwbyLn^pO*O=$d=zDSbQ!<$7v-jg3zD;~p^=pHa7-GLo1&(X^{Lc^o-IBIiyIFOP8S$3b8c -e$t!@F28pZ8)0nX*8v`-PUIgWv`*X*+a^>aczfulfX<G8%J+J`wf}y5$4daDK@rE|8FyJMyW)1(~>rR -Fn69HCPk69F6{<~w?{+m%oYQGJJOMK65M1oSxqlLq2zlf?*VTn=|cD*VA|8>?{`>++rV}~#N0I9D*fn -mO_`K?{sIZy+3JJxUqLURvR;Ir-_-*DEz|<rES`-LFP1axZi!w6CeYD)<vxWUV5xt|>$e(5c^QdUG~p -o3yRp4SDxI98!!$)n3Pf@03>PNZPyWu-_X7EPy(~G}6Neq~JLQF5#f^nmvZRRiWUMC0Tj{xLN#G_6sN -y`4O~RKQa2n)ym<Z#|n>L|NS|Dm>h3K-c)5&~O8Y<z_zu>IEY24vb-qs24O+s^=#AUIpBS%1Y3lZ*=@ -gRxd=Cc@NWC94C{6l@CY<kRYN=RLvbS5Vv6emZ8=NwyFC$nq(Y<82LLDPd6-8r=Wrq<pEw>Ua1@&@@K -Pl2_!vvY#VQ0jK6dgv9Rgr{*adh8XHgsE{+dEphNl&f)3dK~m|o`Ok_y@HQV6Y$`nSBMg@#>MEdqDnF -5^%y-kwzQq7lyZ(k&^~_hlnD*p%8M(yvA97Zi>IX*I>Xl!*yrEk6_M}DZr>Re%Y?^FYpuxYdG}$_!hZ -0;7Fhd}4NaiA!O??{8lE8I2M>_rg1rA^L$vVRAm!0V4U;y~2M?0sJbkhu3N$xB4kPt3!=vq=8s5ijqq -)BfAG?u&_9$f|EcCIz4EFo&>j6(-M9kDQDsL6=187>UO(2pjeE6(T%SsUn!}zF4AxitHrlm$;|49=gZ -HrskYF?f}gZqdysJYoXS?s4-teQ<-Sb2f?UbO2dRv7Ed@V{8JTmiQghS8F9J_u509b?v4>#Ke;jgAEC -_&VUefR`~*tFFBlG-YhVJe~IUy+B*ssW?YWpG{O`C~-ACPOq}>&C(iYFKov8v5aA*#<ssnYg!lWakHN -1Z85#9(Fmp<wpi7V`xOiQ(wa8{=!yE>)n-rqrd7Ko_nYzTWM5Ybkct<Z%ks2F7cd(Df}%xOi!{2aB!0 -eWF;b*UqCl>)hzJ6eEwtF-a)`3a>S~m|Ew1>cuabPylkD~+C7*xw)#qQ_y{}(S9{lm4>n}X4Hf&+mZ> -u(6_5~#L>9VRtHmjENy{5fd77i%NWIJS1dGz4RuXpPtr;2u7!4EqoRiLS<l}R;|Ct({n!#dCH<$19Zc -Ndd-9c3w%iQVLeF?uB1FJ71&gGXQvz=pytnMj9DvCCudZoD5pG(aEcIavy_w=){q<#VK#TJ?oOlLaL8 -;8C$6QRB40#NykMb5JTU0RK7L@U82Dq8_7@V^%?HluI5nKvT8_aS-JZN)~B5ii2oiRKSmZqQZW8Q -~Y)B>Ma}S(;>V=!7d=(GaVK8sS7j$~~_`BzCra!!T_Vf48@lu0L1p0K6h;6UEsZ3l`j3z2*c~24O+YF -zki~Mb2BG)@3&R$HK{E|~wR2{Sa?4(mfs%t{uXAR|h+>~J$exm68{!?5_^dBJiVZdpcZ?T#ui__o&_f -R<*;OUI++jHI>idr-(1hapVz@CW<>x;$-Hv!1zw`<FbS4ty!3~L}D%@v%L?=y}@FfUNGe#)K<$S};S8 -JzjJwjRVcriXkt=VeZGtr_P4&H-%=EX(lPD7+%x!Hd*5r<1#-xfcw!2=<J@c-MwPV|LR(4`vAs^l60w -an(TS0%yC5#e4>2z({&BMSSh`?jT|Fzq%SKwbN;&baD#eF1K8{?l4heLTkcZ(x`+Wf_~mJomyXUQFg* -t7DQLoW{VzwoNZR<q7edxLyI;zCuWk(WpW9zskZWYMpd^W1WfY(9C*96>!~A*g}pBKk!P%^3-DL>_3$ -MkHWG+Y3bJ!BK8O?iA>!I%D!l2zfod_~ZIP_Q;6wPtSeWpWTyGrR9wo5Ewc(wN99^gJoAK?0uYESPx? -D~D0xKIn<u(gqxk7i0&frHFBNkjd*w5Mrz^y)nzZ|^kX7m@1?%gWCL|oN=I49n577sn{am@4MXSJV7W -ZCkS{8-HB4%|c<7xMIlEbiMCY-hRw54tcx`-_xM@XZdJ^^*+eH|w)u4yVK%>S%qo|H4c9CGL7g=$^6I -V?6u4%efRvrtW-Ir?-OhN)o`~C;`wL<5qxPNe8fNKN?uU;*6r{b1xC{SpRN0S##F{Z<}igKE~by@?#i -)PTH!(ASe$pJuK$w<66~`7+2URe!acPxLK^%Z2}Qa&p}xA=s`M}&4<j-&J$!Ls4l}yjkOfM(OdMC<wa -LZN?c1f=415EjS-9e>AK%#v2c6uI?i&BJb0_#bkqnafEU-)d)LK21UudX;Jr)w0jJJ>n&jJ#eJO;T5q -?W4b)>MHE29X*tYOGiVWufI>=i9xAZ+a%?cpBt*92A6GkD2K&e_~R%Bb3B^&)QGvD{9(VI1|loO?A(9 -{Jp&SwJ|ZULddE#%a1<4Oo?jJP~V<lS<KLesMa_<<!d*xUn2FIMa@S;=sGi$YO%fVmWUPB<#~TyRT*3 -qzMuywI;o)$hkI{i_TgvjtIUZX)atoA(%1*uv0_&5R@X7|DBjY<2}Bl$<}uE*=4!J?8T^oKrz-SfUOV -;4O5JiJew6Y1yqx`rMP9r;?PfgBRqgkTM#hA)vR=BN=%+9@`1-h-WalQ#qyrW+T0PRW2BxiW^spgiVi -geKVyK7&^lY(9IA5FK6*B^vy|Ah?@6;BJ-$jmUgoF8lCqWrT*JO;3|Yj%`@wz&jP>9O{yu`gR1Lll&Z -=rYxFIdqcOHOKAHc6r_;X$HG^cv@b1!>=M*N*d|B@rk%)t8t=+4yv^o1ZE3@F{lV1&{Vr8DX(;Ac}2Z -e~##a|uiwkLs1|U73?yDGf%{p6RC!FW{FBDLv8-_ckQsmWb=Xg9+Wt3Kf*4s8iL3LLE(rGH&{n$RrPu -m!(C8U$U(H&8!a~#EqJ(Cm1%5@)?XtK}6iQ5v<seq2;_vwyjC_lD553&ANH2tkD_U)SX^&5Jt%hhBT* -auXfx4hDdd})NS7m3K>WNm#-Q_S<Lh)ij=Q}daSOD+JPpbx+q)Hv2nUP3)Ijha=F61ZA1~+4#ylWxyk -FsCO@djLwakxund*)u#85GQFk_Yoi*VKWh05C%`ySPUF2^I*60y?ZoNO)z1j7XJ<zN96=x7Kns;xjSp -7T#Rve!VpvihdoFr1pt5kn@q9|fKFW;4O)cf)Eit&A~)dc_&N%Q+-Nukje_22i2s*9O1>D?9f4()*an -T$Eft9?EGBWU8-wsFO67~?BO4A+0-y7Z?nza)Nz(wB+<66&P7Cb`p8%^cel-H1<aoIm|Ib}UcVi|5bY -R?MfcQCFmXK`PDLl&)y)L1<F04H)jgrS<bQE@?JA)e<^`;nx!!z=_!qDfoT^>>-DoasTAnu{bv#AyhB -^P~QMGyuP^^o%mffokB5yl~1v8`=Wmx_ML3*-9uVR;!H4jMA?v)Bk#f3oWJj`*}jB*T?rTDsgxQ2i3@ -p<$torw*_>ZC);)5=q|zVD(yiECMKM_8teBil0&t`3GdruFW&OYl0hq!SwA4)S%P^R;arVqT_y?C9Bb -Sb0cizFV{3!7AGH7{_F}G>ol0eAMw%bBF1!2|_`725a1j2kIZVq#UY6xgE-tJe?r--BE-~-}_vMcZCk -v}8x${;o6dV9#J&(%eXT4tTk&_}4mV(W|Khrsw4eB;!!bMK=0;pgUXxXQ$9DTO|qhZNX5Jf8uv>-iq$ -gS_%xTPOY4q#?27Q5lT_{#(U$uzoVq!|gMNXK-cYbco`td|(40dut_cJLB4uQGCn()^$zE1zZgs7#NS -$=wc5rZC&D+eA8kc$I-xPd<U3;j(@nJwrFY@TuEy2Y&g=lj`Xj}r8kc?^NK@?6Wh=2y=#>G)bB%IU%z -5nrf1JyK0TywZ`5^BbVK6(PR1Kf01Kd~)NA^Jdf2Xm%xfl)ORnR7u%|{qHQju_@O-KDVljDrQ7$jG@) -m8`E;-#}%pVk(1lVIQX}0ws5I(s)AAA#gvw9_eUcqRN&;t<(XMJpHv2UxI2m4(t4!#;Qd(FX$Ns)4iq -%sv;DTN7k^nEt_N5y^<Ss)|>`uKe_RzA*z9`6xC3>bA}<7L5*Cd6Q)dgP24)WcrjHKAU?rUHHi)gACF -P-U=$Ih0h;n#_${wqoXX%Ekx)?77Wma~9e^@Gd?Ck`=2NCsU(vdUVfTd3_s=wIfDxQL@O#9#s;l$hN= -YFcFlYm82&!@CPs<zf5T+>!N6foG;j9C`|_((*0r5L*)Uf5-~I5!WcqS?tIn2$uY#%R+=F~P{t2t??_ -6wCvygz%Xz*!6E4c)u+tohuI}7Z@TDT+<Fa>Pm|?OFdZG56F1-M18{}|y&pkt#x}dDYz)Pb|#9AL%L# -KI@mz21x8MZ$9y}@_tT4UTTanU7tu2C<L3iMV3T(>YeCrxt827ObhVn#_SG4>LQ355s~+L#`Xb@z8|p -EH;pJvbh953Nl&S_be5E)Xko4aDBlesj6RD<;9%HXW(Z15gL5Y<JAgq^^82tJYUjO1<R)P0lqT9r_6A -QTB~5mbcPWa`NA7HWIz|5OAE`VUFmyJfy>-dxC7C{|2+;40K`dY%t>Unln~Tsyd#Uh}H8`4LkBRtWN( -q&Nze3syV>JV4N+hnfg_(X3NdIkby@UHkX~4h&>ZazCDhO+)O^(YSGHkNNL4$vWE+mt7A^_fcI6a`BK ->s19bElgTXC|x*&}{9;$N=hQa1&MxTa(Jm(-uz7kdIQF}~GqB}cSzauAVfz~s4AX9KqG_@;QF<6~#>I -O(HWxf?MuWuIymb@MvlI_VcrvMf8(Bbg_h0cLi8R0V$;0K4!Hf+dtPT3%scVyHCqd*&HPe_#F$hd_ii -m^!@!*^^HrPAj1=9-C1O1wj3gfU@7RLn!-m5sNcXWk<nC4HaL?~x@}p`y=wD(&aY%`_~y&kbK=2jo~A -x!vJ7I{C`vz;V6Sp#sTxE>>t{mcQVpR+Tpb9k5vxfvUStp8w<VPtUWxJ?i0Uah|^`(PesJ_YIrI@~&a -G3S#hJD{Me?e^*3{i?(h!+l&071VUFc8k|>`Spj$`4z|VnVg_F?tNJY(a~~>IZ3D8!>>O5g&U$5PyJ5 -D8!u+f<la<PiV~-Q@v9M~j9vs4ojY&y%YFnH=gnE&qZoZ=A(ybQ^Mu1B;iPL|QVI3#AX0zvag<#^Kaf -KZMc^(j)`lOK5C!{qtfo%{Zj}0c^C8G!v6?Z?&!8#Q@bGs+)j=K;78wsZecfB`1bax@M!xxy;H?l55D -^D{xKf<*1IRM^XZk>FJ&LmeLTj7q?G%v3@mBJB+YbjJeIPlI(?bjNd5YaK^9~tJ0J2vERbaF%j?lzZ_ -tzFu&2R_H>btcJtp6e?jd3ODFKVsNv_1}&;&mLAXW=}WdnCyHxKBIua6r}9y&$FSO|4}jlxP5JmFzf@ -BOxrvXi35(4%w}OX$tCh^y*XW$v+VKfmwbp~2z$X=WmGgW4(MzUH4>Pxe~{)dUIkKvax3s(a4Pb>&nI -6giAYTB{gT5Jw+=j6T~%#pNRP~g$cS|zl$rH9l~(kK$UE_bOB9=Dc(I~RW+0C9V)l^!eI%zesfh5ls+ -4RPR$?Et?pP)QO&H*r((zeJRq0>=nzSt67G%I(Umz>Nq5P<bBYG-y1*LfLSRwx<z9B8_@=APK&;bFj& -sJv+o{7p`aBPxgQ(2H{`ru{MVV69{3Jx7R&!ZTXzSLz3Z<i|ZW55CGa3wT*m1iIzer5~AgvJ=c*?LA6 -@Y!`g=<C$>jsN;QIS$qDz=7+4H#<r;qv=V8KoWZd6(R|ld_O)E8uf^hN<uINc7R3z3igSqH;y|UCAGl -aVcbrWv~9TPw^67=w=u3gGhc)@lt!)mf76vFYSF)Ti9@NX7LMY+Q|`{F|0vXK9f1{iB=+1maSx}|CSm -`_cz+djrt8i@#o(9Ck<K@iPQ!Eirno(jHwusb2rw3xiDzz}bwc)auj)l&130j1VuGoVF!9~Xg9V1sq$ -ietq}{I)=DVnaozFQ}_xsjpHD`{Fkl9#3@1Khj-vK-#OBT<=8U%h$!*WdK2QxA(3nIsyU#)R6T6nwkY -ny8z(E*oYq{OGkW@Qt+sI1n{DMk%vAVBLdVESsCdz^KnP?utS7A_M24U(8*y!ExfTqQaq+CUTxRHiU2 -$38gU2aqmGJ}k4LzL8e)6rLLj>F9QCG#2h26WY>w=5erZF(n5HjHD`wq0zx<fT@l@W1EM4k5Q&XGe+O -tR;(jGv7<TRvzX*4Sc?_0)wVwq1?k6v5(v9_Adzc{63!|%C~=tMN%HXHA^rR4nErfzj2ot-h?MY#<DK -Ra&k~zNM#sMe7O(-`19-}PIv##W$I(;xtGnbTL`Qj|_0zE^nP~}IK}E_%`71G{-YggsMpIxoI!;$)Qy -Fg(^<MP=q#=BdfjD)2d~kGle1}d@jkqKB@pe$iN!cG=ArZF4m`z0SOGl3N)+!M?cB0SH?)a^Djoo@%+ -*VX5X{INcJv17Tn`esj*qqayq(Q(P(jl?YE%IAAhGNwlALyB2EvtZbfaVzaQJ6bk%yXt<)i!0THdx=M -IEBCDaLB(XSNir{W=)A#mf7R1vMGoO&n(09rdh?b-IVymd2$ZU@P6d?mWUl{TTFO**-j)Jz7${23UVp -@a6d?f+QHsN;zlyv=iMS<-Wr8;VIoG_$c7Tk*O+D8IHou-fAU28uSl}rB1@Cl%?W+|h$D1jt_CeYvn} -oAFqmR2N!DSb4_Z;WLH&tRD8R`m?(snyLF^k&{~N%r$9UC1hQ{W}cb7bC0G}*Soe|Ij4Uw3Ec{NEz;5 -gcUbZnz=JWyApA^Nyywure#aRtbx%V-R~RvH5@Y1lo|p*Xd_OYKdu9zgDzVlDx#N1(!zBkU!W2@-@wH -5B4UfbQ5E4=ns=G7sOagNaIAee^DM1QA2Kn7<XR=n!<kW)(Ou;-%@5#u}S@(W%GTQ^}P!&M3O}IHOCn -arQl5w+LB;azZDSnqF~Ylk6uW0Ik?)6uY+;Jr>{28J<4kK-6HR)uS&S9g~y4{O&4FW(i^o+f~MNoVWl -g9StR@VcqP@#-PA0MKO~84yD=V=a9@PxB@-to(yDya8<C*;qkEy0T>*#8|td|dP0Ph!k%`il0&1NT}% -mlRb?7bmo6}|2gdQ%jqM55$0LX1kQRn1{jB#|O36en`O4}k86d)s`5dln?a<xdwRBn}_bl-;mb+ojhZ -5DFHo(7a_$*l$H8K+3MaB!-PJADBnm6bOher?!(Q*P2yLEcS=tPn!dCH;62Ja&rOaoGF#Sn{V0B8bs) -L_0ui*iHrbCj+^d+{Jj@nGLG@{?fT?E^M{bErL}B2AbpG6l!(4Xk{8#Ab9B1iy8INP{!<@95|l_n7Jj -KJbS73HH#?Lr79#(UXJ%>!UVTxE)j?bcED5T<exRv8Kl%??;E%+FCtq;g?|-@a3tW?aj=%T*D(bYHo+ -0FPG)IDHCiow>w0-H^e&odk>FCbZ>Tq-%@j3D+>cRm|l<LAAOd*vO!LhCeU2j*av=;CU-@G%+4+Bl?g -QW?ew`-)xP2Rhpl~K$%h5371R_@DKIG$&m8d!5!Dwf7tqIPCFzMtZ^Sa0txm?{lCVfr1nU|#u}VXrY} -Cm}JmLG)1mvkBf6?o@V71)7H<5PFflLD=t*VwvF+l2~a>a@*2_!~$VOQeD$-Gu>vpE_chWxa8*Ks)#i -V=(cHBRx3!8^-IVXr`POx=Cy0i+kwNhb=A+?h77W(U8oUdQS=wvtxSEZ)e(ifn+ah-DAO^x`o8W9!Yu -Yvj{R>oYfOnYBggp(&#SgdsS%G<(C7{F}<fG6&-MOe~Co2sG({6R8hnx55c9y*H-x(0^mT^oN7kfvdZ -}iH@4VZ||<Jf9Pz0`5d<tEM3z|yvu96A+>QFDQ-V{OhAvUtu|Ir{u^_^f%AjUM`qDX2^jPsy44!^{gd -{Th>wv77yxupuBc_uKa}sw71zfY`uNNG<A4P4Jznj~IGc%80wyw6>8t<>7wI^8Dt;oyHOor?OtTJ~^d -0)e=Ghd(qqA5vRikk-iHc$;9Sq~xZOMA?9^=Ky6^9zGbQ+-8Xy4TtbM*Ig5BcQ8iyVWY90zVu)KiW*J -1f+Q#o{#iM1K7zD*C6dzm&nr*mNqzV7Mc@WTZ1SnR3($bxfmoNaJ*>8H=L+-DgHQM-vnzWSiBTO(dg@ -Y{TlZwd9yCv+CS`7}b)Aa-kRe*@`SLySz1s@E$5h3G=xp6a1x9N#RW?UILIOV6Zwa&$pQ!4NRsnn!;i -CWYND{g|^fb+Hc`BdcSrA8%(MHbDKTVf3e|4dgoy6a0d-tbmyw}fu;C&;(2~SD_GIi|6+i-n+NA&!Z| -^_MnfICOc~i_=yF6A{YOsw6&~F0P}Ls!U?&ch*u9OP_dFsPX_ON_FfsSX)<D-LY~PJp{DENzkqet4r^ -3--G3=Nenx57e#0YB<_NRxBk|Kqtw=iObuiJImn)PG9AgehNMfpWi`6_40%ZrN*4aAco_%NjVN#^pH{ -}gLXxylhVnN{l&ucmg08*XCyudlXR7vP()(!40vsv_PbTvWGJm#_hP;)ZU-zThMl)?&`?D#do~f8)fR -QIYKRIAi^q*a_GmLe;|WgaYO-HUnx*z#41wPKi^*dZDacCB>9;%bqt5>iB#`uepTAs23DLBpt<=C<@~ -4s<NRTunGqOupm=;Z|`V;7CK`DMli-2?9LWYBE%_J6StvpqWU4o4>kYs7Vv|Ne|%dVH}=>7D2dg)$G7 -4&U!Q#}W($-pxXoQjVYg7IkHT+m|91@E0mFH!K0S_q*Oig*(_;BHEu8HO9+x6kYRSWj8QGo@F;ctcb^ -$|H*rnGr#%Y{O!nX>!P2{lcZm}2<=5o8VK|}c<iGx-+A!Lk0StQ1ayGb6rCZACHzz^FSAW4enRM_&nG -ve`tI)?nN5I$B|F`pfU7W|~`L;m~DRIDVkW7$cr@Tz;lg@uz4FKl5EF>Kl7#esdhg8@s2%l!@_ha+-3 -2pu7JFGTSrJLQSCh0<A*QW)Jma>~y`$D_S*;rNy+Y|LLNL&>8_l6-P-3Qv``6Ww(Bn(fgKU&Hdc)&{S -26u;X*V;shkG;1YLv{K@PvOnLdSd`>x$Va=UJ#<GrS=nCE1*r*WX8ceoWvcA}dtp@MOXf7`W=hd`c_k -LX)|4WL>X<+T?_w`5B#h~X^kvz3d3H|Gyyk@?fyS4U?R@6NtRmBRua^WSRICHQlar^_3I(_o{C{%d_9 -_NWO+{aTE<+vZ?8(Ul&`684%r{Xl9jw;$f?QFYX-7%@sP{|=I=O^wycn1U2!=^xBr|DWY_K$)UIza2j -8rCQ3hPuka^0f?T2o$VJ8J=&9ZG~SRPGE82cun4P_}(OpHG+78L%y9!^OV4{dkSn#kBqXM-jCi3<exP -aIeW1h3h7v&K&(r2{@a<Tc=*A6#{aZu*hg`U*th&JhyK-XwJTsjEgMIO>oACi^286@s!zRZjzJ?lD8R -#FCB(fdtqTe1C)C4t(wl%Ot+WS@clk#IUHk1KKj;``A}vTCJ{|XR~vFnhKW2Yh~G@ip>*th_E~my7iw -eho780PgrpFSDm$)!^3hvuk_}4?%fG~Z)UC_2z`{*%NItbum^0dzL>I<lq=@pB<X~xv3$!er`A*?iMJ -u^9pgZLp?YCSE!-tRff{IP~LrHJzEXi1%7>1BB^jtvrRl<w|&sknxo=RG~gM-Ml3t!v0<06r343|+;s ->|7eAjlY<7gE;s&NxsSXY8z*RqXR&fnwxI3Ktf{cC<h4Wrwh)Z!HD%bI-d<#<+Xhai@WwZ~5}Kb;*Bd -8=<P8Td4F^WmN7qh`h;nf%%;(ndF{qy1;}W^btbO2T47VpWzYq?KtUQ*qz@+3V1k4mu^m7pM)48sHxP -+Elb4&lT0<Yi4h>+(L~25f&jHUE_Ij8Qbaa*LOe`hfIiqoV2N6ZEH*tha}r>SW$3*ssk>(LiSL}F3EB -11IT%Cg)>*Z>Rj=cG0K-L0$apo78_fG09Aa#46d~O<0H1Ax;9=o5D0?B4q-1J~|9^uNrI7cZ`TOe5&W -WPd^h@4R6{fUR6v76Je1IEk$3X67e;0k{S<xmom5H=F30maj3exTE&JmJJ)yaloItZgrQ}V&U+G+e2v -g1^><i&j=%bWe~QxG_Y3OLj1Em_~MNK0I@Hv0|-WWt!98+)<L5iI(7C;&z&9B~F)eCZR*5FH~iN8G6q -P84FZN=!R~*LpjX7U$?4(r|p1LR@72x4DO>)7vcuN7wyv)@Sc<RUf)5UgGtc@)MUhS~tgoXn%gB3$j2 -S-F?qxE)CsBZ$I-Z%{lqVyJe_saTd*ZyJo${I-1cf_QAp@DxH3ijcVjkjo8VMdOmYo*?1Us*`-2Pl;s -cEfOp@%8;327;tb?QQ4G|vtR(7%u|4SUTcnnZ@1ko<_af6JZwH2E#CpcI3;?g&mgujjbVQXm5a$S)Z} -D5~yE`~%;lw=^2S5e$2$tPA0a7Lt+-6B%KyMNluM#|+q<mu*3b9MAYEL0%CrOWR;TF^C#37`o%n~j2k -P3BmK#{qw5<n1E)xYxn?8R3PAAV|UZPn;4_S!#-q7HV{KSjO6dW4e`ivcGmq;}JKIYcTOBu53f(+WhZ -FOn437#eRZ;lUf!EC6%2YS`IT;YFnb<{7o+PDa62*QHUD+$~<SyM(d@PHPlsF08U|dvw>GXpoSyM4Te -kN3zdOuV_c8A|~I?w|dJO-@VHT^pARL!FyXLvM2u?yLQB`(e17uf7|5sT)TeI178C}kA4f+4+6ZS>j( -FTa<f>?qKQKxkv&`pPx1-XT6znSUZ2qzT{KBR6WblY6H<=xy%dTEXyYt-!Ca~u3(&=Y9;-VI(!R_kY< -YfVjz^O%n$#CXzEUXScOfq?B=;|0?cAr<S2-NVm(ZR27|Icjz+!g3D*v@9tUKJc`ybZD!VF))j8L4-n -v%xMO1XBEh-Afk+#`+IRp|Kd*p0e6gLN99kJB6@kyMuxyz1IeE@Z!xl<WbWW1(O9Dqmjxsx{!Sd2RkD -3yUKktk)7D<Xl6e%YxHo1xzg_nTIMtL`e-%je(pn&>gq}^nzt-*g&Ti6v7qmJFMudC3$0OzzSR%{sx+ -PSFB38Rze?lAJxp-T5NE7=*C0>rKV5=jS1k~6^KC-1gh|XLQR}d;uw%#!y|(L;z*Vl#w%splNsR>$O& -|tsDy>`Gnw#1b9jBCFt9C_O9|>0gJdN#TV7G{ZVS!~MNzqj9AZwoYs0>)O<+nsnwSWgVPTjJIIB)h#x -ArSAOVGymmO(=NGLisnF9JVFZ{i=n<tPYYiNL8LMQgcfs<S-=~m`AX&%ydjCNnGbX3xpWGIe5x_>5bu -Ov$(j`!pQio)99?K$lW#^I9_sC;sgtPH3VJ?~B+dM|rUTIBY&25Am(F1y-vo2adA`go5tpj=Ym!8HS* -K+brPo<M6D>e1NY=B8nFbBsp-b&d>npu(`^xVi-z`cb9Jk`8kyDFNNdMFj{kAlzKr!qF||W<~duKrzT -GhNDqooG5sdH=Kflb{LW<zIDg6I20$*LUMyUIUzrG*4Q00;~~$`VHX}yM_btJXXhLsmhR4FRvf*MoS! -x|Joz*O1_J8L3IWNhgZ^iv(3H+&bXCmdcv@lxI-PdyvMyT_eu=MV9iEaI<g!?_Vzfwft^16^dvVmAiE -DSO9anG`UnH)&QJ3N7jJTOE{+tbeMgsaw2q>XDwbG2z+%oc*Tf)7Fth^YA&!aiZ`C!)vy4L0U?(frt= -r^RGeWSFuq;g}TzW?U@_fC`0DT@0anX1W@6O46F*dS>?w9A}D9A+?8j`??dX{Rgc@7&<;+~Dur;P2ev -@7&<;+~Dur;Qvl;kk#+M6svh<b4ktCd{b)}62o-CJL6}r!&jJM67ehI$~>390Wn7yCwe*sc4RuGufnb -kRFc2oB2`ML{miVEJO|M7EqITuxtH$3-7m#m@ygK?-5m*pV|x^I2k8%X1TY+PRB|&sPRu1Ezi+nK0+5 -MNaDDU`S}adDt=u6|o4QjMbu|S_U6(~;J4RU_w_HReVjp6~Kh!sU4|e*}*w}K$wl5RS{SJIcX>*8<;c -vfEo$oX@6&tl<cvanL=HWBsa!$FD$KKfP2uJ*;$YjjNc0VwKKs^2D*3pV=<~*~BYh|ZwcN&iTk(+h*n -?kRI4{pkUbWNpW(B45h^N?f9l}Iv)p9BDWLph*~7n1kT34PvUC5wJLO{v_y(p@P5C>fSql5kdu`m}6o -OgLlmyK{P~MCfvlYa)8QF4vRkJ0j7OXxEvbll~|a2<$Y-GxgQ5`4@0qUO6(52HqlMT|9Oplj{99&%b~ -E^f0@hz4+<X519l#igH16;YCpTx?HU{?QnF%H7KXk+r+KRpTF#|BL0}TOlcf>162%a;CF`+`0G|gz(Q -Nr|7Q`Xn{|PyJr#@H$4Y&=d*cW&J0U^qg&2L~`N12#2?x_`@MXB7*kkBsV=kRBYTQ1Ek!`_7|EW3#6X -K^yZ+y>Q`O_@XkHFQ{W{v2FTO|5<>nc&HEz5+Q-D%afJj3LJ!_ps0W8wvz$XtfJZ)BmrU?qSRJqd=1h -(Mh`^*w<K&d3&4;j)qkHI$-urwBYjkqAc6`E<P~(EMtjOK!;m>zgbYKp^_!A&T-GLBUK-|8Yw`*{JcZ -^sr$?V0GDeB`sym(CZC4FzgWcXcU-;ZP+(?1>i?V>@5O@!`c-X7TyLcVIONg=?SUcj@cfL6AR<?1grV -!H=E5-XfCpCf?2!e%oE;@Dg~|El<wiDyX7_zZ@J`tY~A&RR@#83oTa^f3oG@uxRPMUlscU(I9*<Ftyi -k0)rqIm@V5bz-5;uVWuY>xYuMen!fpCT6kwx59a+Os(BbCNU=IdJ(0<6_bbk-RhwLqHYoVlqvw*mDQM -REozG?j6;n!b(?Q6bAngEIl5Xhs6qCl;<fP{7eO>690gf252*37j_eu;j*3#`7Rd<S-3Kfx`=?W*|?y -vx`LkJaY*q^N9XD9fEHb6t^Qk|z8D7<3%MT`~DX65Z>>roQD3e*Tm3_rEX#MR#Ck7XN2nfrb7*cin61 -=<#RDLUrd^bOHAJN%6nvq!=Z*l`fP~r9KvGekaPiqKdaxz25ZaA74Ly`rY)|tEXto-tYgP9%-*Pt2KI -Q*z|wB-k}kygIDAuz*knY^KvPPBv^97D@&6)T7oo;dkx(gHrWZ8y&suK^2aAEoso+Em%OIP@F$#Hda& -NeW!^<rZQ21XV^1&RJz7|5&v<0>dY-(fsuNs9_<Qs-b^R!4`1qJEj=X$eSlSlA1`Zn+p@6zJ92_=8R_ -|qRBtT=sTkPaXUel$<nRT4<wNmT@Z-fo<F1wcvLCjsz)$qw-bD|TwN!Hawb&LuKTXsXqH|}M2?oQwgW -ouwumJ=Q}b%|yYw-ZidHU}J?wXi+Jo2w8oCS%6&$plBpGYO-zsWfCF51ZrT(Y~lHo=Ex*1n~=cy1QpQ -jT9jY?_9_azSny}(PwQ;i-%*r<(g4m*oHmd@%r6_?1hosKe2cxyB8Pgez>6OWY@jE5B-(y5;|KH)=hF -K>}3T_a{33JRiXwb+GwM9VtkHHXob}+czL$U;e;)i+}Loxz20^zgU7fdEZ$LbkF_ASiQ@g50=QvFg*e -#2UUna0-M8{AU9d`8>wDRK1g%~|8*~$jtjwaShAvcvtTT1jPM!0~Z_RN-EC=nr=+rTp7cD74`q)GH`i -gEL`MO+c(G4YEbmBEAF*MpRB#Z#p>%5|qt2qv9%rUSYO?o8Ar!p<sEK84Ils0PCBWNmLofUJr(_hoBl -SyGL;~$Qr<KOB6plqg0F^9qR0`p)h6$8HKd@~GUXOUibSgxlp3qOF7z2zPdKanq`Ddv~*@A}k1(~CQO -=N#3yMPB$eo(;Ps{AL@Y{@Y6_-ndgN_b#}j0|a7nb`3No<orf+?Lq%vB|zP}ik3R)*%|P6VD6CDRU6~ -eEqzkIuep~#lQ}$gKf8PMMvo8LHGt!xHm_jT=8nM|b+fy~Z`>YPq<z<>K~r$PL|i%>A^TmsL-;x<l@_ -|+wPD}GkagQ{;R#lUzpgbh2!$uU`|2mCf;aLlapY3Vw>@-RC(mpPz2x*F4VsOhm8nRmD?G`UzC8|G+# -$-(_ar}r*`XF3Rj}d(u{9_5j>!UIZt;E+puFpXco;}5+7>S{KmM&1MS&A?dvYQ%rZ_j46QQ40Wbs#vx -fHTPxPBc*ev;0+uJfxTlWY5SPBw%MnsUY6WDC>N0)qjwO&AnrmiiEw^20~RI$#~AhyiF1t;6EsBm7zy -kp<OZB^fn~CVZ(?I`qc(O*}cFQQ`Vs7VJWOpXuR!cfA`7gX9FabZq%qJAna!-p4s$b56^od(C0Bm6;3 -OM<A%sk@I}cdEKta4h;@DsG3>@nK)huZD;s$B>|HfiSZZIz!9HUm&hNF)!X}T&hvFaMzq8tTX>s>118 -Ail|0>o87#o8kd%n<cs~$6)wJIQmu;#byID`H?0JGECkpq-yl=ML%n=Cn%Vj?T0tb`Zz=&6zRfv9H;w -^sO#1_bQ(KrU9?V?L699`jd?-9QoeiAHjgY&*GdFrHISdDr{d_+_l2p~O6w}s3<y=Gf2iU(+`rrYrhb -rPWI5!(L!y(rJl+u;{qJs6F%f0Xm~eE6p?9t1%q-tY6w9C2wWh`r_sBWQk=D~x(_+6>>1I6#dtMZe;B --zjij{a>Lz#uj>?k*<M1uu1UGF7@9}+^mfZ2v?u!R#4x&im*REWt2C;9H^R(AaYd}%ej$>n2-UN6U9_ -YhhMuTLfUP?&;Cb5?NY_u^g%%p#+8Mio6TEexBpL%Z}p+<B`o29WVHduVp(NaC=qS`!`aZJgi^z?moJ -I=H+D$sk=uUiq2gz8wCc@pI)xPiVjRX<C3`_EMki(IQ82nqNQ6fI$2lcrNV$>}t68;K5#y4Rp%I_!x+ -f#eK%p-V=KL-$$~N7D_S`vYg~!=@HvKus9tL>eT6?dM@Tbjc#rHO;t`9NnC$bqAS8HH?Mj07Jl}(iJk -2<`rD?~(89j`Yn@<AnVusGTQ&!;*D`lp+6*@BEZLCc?knn~?%Mog|zX_Apo<EaDHgg9QzL`de$q-3^* -a|&QsSJz?2$Tmca{!bb<^z_={%E)dZv|k=)i*i{UpaQOGfhCWV9Z{tYR7OOv+v!T%)ahpqnf22EoAs+ -91(ov5$MBnP$w1|e^Mkk4B3docYEInGaP*s1je&{+Y)=|Sez+al|5S4_Z+Xy~Oi8vT#k*Yq;CSbaSq4 -KUJP4@#RVXIQGWH1udI=$|?c7o1K31a^om?SNqs75tfPk?X<W@UhMj@yn6#e;o4iU^4!|{j}(il>{O` -k66B{YKNBgjUi;rQ?kNBw*FkRl^5bBtg}l%cMEEmqS=CB@q#0nKiy#LHl3B}%ya*!zxH!|^Tc?~}V9D -m3a%q2sp$X^6@MQE=a0PEn_LTQPsYou!bKoSLL?b+d1oQeu659hY{7P`s=8{&;nDJhnl-yqvMB#IdhW -)mF;Klv&KZcUMQQKEEaU5Vmx5c<hH`2ZVg)Vz1+7L7ul!w`*hOBFL84W$*-Hk<Ayh3cxP%9w{|QsxQ5 -*^E_z@u)Ec73ekMtTL-r9PY?SMqfMskm<UM)osZ;R{Cu0jS)XtrX3t=6wgocJ#S-<Qv=YV9RN~;9A2C -%+8K28R2Vneef2&(bh}%y$O<P?Q^$++yZmOK~#b)^2U4V8@5@p<=M(#Q}=H?Z8^aOzHhkh5yz7K8r#C -h@&!?2k95u;E!XS>E?d#|+gwr+Q|-((7&V?adVZck3UCQxT2`FU0RcFl?M3Am~*EjZTE87>r^_tC%JP -N3`q@tNW_-SifXJ0q0ivE6~5ozOVurl>c~)e1G6<*%rJ0`Nw%Rsdnv&#QT$iFNn%#;@J&{J_m&Mze%1 -P&q@v+&ZA!u{)#CmsS!*HhAJw#uFZU@h^DkZgo)k-89gRIiKlj0VQ1mA3N-6sVt2sT{$WkN%Wt19r4b ->Eq$SKL3dOKypDZDcY;%QONXT7Z{H>Vgx}I5F8F_;Ljf}ZEjHGg$qJ1Wcp7u{*pxD|i&T%)u_bKoyg) -yQ(}FpcW~?Q~lM}rcsQ^mJ+qhb{NoxEyZ@lmcCRe?!kNYt}PH}r?xpDMmf!F4HLFydlVzkb3Up?HxS& -n#1(@{KrQCM1p$p`K8Nk<=nX}FGPYTs@2{=VW&<J<1Ow-ceT_d8KO*eXyXc#^2&<1$q7AEaso$cA--N -6EfX4#j=RaN(D@Nom9E^o9bvU6~G{y#f)YF6UPHWPUrz!aPyp#Pmg+pSnMN(Kl%`ZsV@it-pb8Wc}$2 -;@PGzJO=rtmkT(TLnbrvQRYk*Y~Ni0pMQ#OZ&REAaZ1seU|$)iySO0Hzr%wu<<use2AYfxJD7`a?QHM -dfn?*xU`c9>0<~U1UGQjJua~97*O7KQm;eijY#QyNU}`hzd*c?svLbZhO~DeXa7_$6x;8s6mTMGjFx* -B9((zeiWTLCAn$0#fi}e};c3%`>N_&T)I#_q$tX#PikC82RL$ugxP0pNLgAtf0rg}*izUL};mW9(4qS -r&3Z002(#B?TbjGQi_Y~k5ZCdrhtDcb$@S3A(|w!R9&_2Vv_=q`)+@6-dNU&)4k<cP6Ti3eDHFMIR0T -(g4L4!tRHJ<tl*9Nefw$NObg%lQEOrhta6*TstNrxB{;2}WO97YPJS8v-c69MAVSrILiiSDogLkaA4a -xFL4pXRW0ds}Y46>maUk^wCGUH8<qdJyEI~`%IJA!xV`<)PWXUJ*UT+PA{4>l0uY%!hOZkXB8~E0sU& -t(YHKJ$v^TMHR#8v>3AlMKq-0bpaH9dDW%?lylXV{+Y}#D)O<_>)kjF#Mblwb<ghe|i_0n}a_`1`3oZ -Xv%?|p?XHUo|8E~MVk}e<b;*=c0JnMi-R>diGYyzekU3W`3wZew_Q;=x&Y{<7Iv;y!qKAzGI+PX%qZR -_6U;4l}2@yVeGGl-GoC4h?#(rcNYt*QoD?h11@!b%#6S?!gGMMbK6$@plwcjEd_P7IC%Ri(y&8!tpEp -cWh{s}^w^4a>onuOAyveWp1TYm}S6INc<Qu*}qt@wIXu!Z?L5jr6a&MZwYV?ACW=aNw8$p$>q1JP|u4 -x6{asN&*5lVwt36fE0|EhRB|rpas*ACzmh5d8wq9h2m;wZ1XOD6CzM`uFzkYj%qlPu~T|rpe{BwiGG{ -4v09qF4VKqonRl4FHa)e&t@4ezBAPpb224tW2xo!d_GDCUbq8n$13Z^aH1<n6Er`j0v1qM;Yj+--!Wq -S<<cHOKfjVqS4CN77I!G>oc=#BUCyRP{+XO<TVF>>Gpeui3w=idTa=uTV28laisSQ%&(x#bF!%*mDLp -usQr@C~ne5C3Z<QJd}fT;w>yh~77b}q=5Xdz2&aTmy5HYyB<HYu@GLDp#*uEg3r@Z;F5>02TeRRxoJS -?B9!sN0XP*&^fJ?dg2XN46-m0bhnRe`7oU2j<II9m)spYxY_8Fn!?%^Xg4kIB4o;_kEzT3sE4_gGxfU -m;F#8_r)PwSyRFpk;+xjg|v)Ccp<sPcop%AoHAV@=dg7`srzwY3+TPeJUbkTuOCont9I$QI_(b8xMiY -7F*<qZipF%LkP<;o9>+cC+-E#{pJW4?oEg0RQqpU<6S!b<3t)k@$r=2gh5dTGaq{3@Cs~Ga$4Qo2!8E -6ED8$m_Q2L5zRL2Vm;Hzr2hveDOYkNMqQ!SkkYS9;-obmzNOyaobu4y{ZZX~Ly<}RU!x|jU}?TX)#2t -2RYi|(RYp@Z)l4JRaa@Ei@6tOfynJ~L~-3_#cp?vL8qejgt1A@obkU@WdEtT4_qkm2XZxkv?Q7MYSWW -G<}RUAgL^d1b=s(}P?RJ8>Uo;XcA{<>G}rSPgh{u&+1ux@ss@JHaN?DIB5kmDLVbO~w2sDLF0+7g-0R -_Hy|#LD4ot^Qvf8gBGQEiU<aE+Opk9kZqX-r-?Bj#dc}Zm7g*6o}nc*PDrx~7{OV~&PeZaO6nCq^s7) -fKr?DAt{)IyJP~&o8}0`tW=`#MBxPki;k;-cO?qgRYaME#ti(`tQL{{|Cl2CCLwUumf*+wAa`11wgM) -oBD^W!;FB?+5@D1JPldtzMSr2<@lRDu%UoQ4As4AEE>j9;6yqCS=-jO+fK1UrTXA7KC08Jnec-sY__w -e^Tb3JQp<<F_I+Sp8*5;e9Nq<n4yoVnRNh-Wx37nxqb!8cu9wAMd}`7J<FHd?iYw9UbAq{ud3eLxFG> -|(NldUR8Pm7QU;vR_Bl|H`T)w0|2&k_*<MLx~$zCrB~ZaU^G1+ykdRUtLVwHCmep+LBue4s@=^EH^ow -2YdLjlVZM@`8wb~qo94voam;4&6&*$b9RRX)Nc#z9*c@ozFwfAYGvak2@RMb%b@XJR8@FVpz9gPDuO| -ck=U&AHWwKz=#FZ{iG2xV{Hy1`8_t31b;tPR9N`LlyiC`1bzYv9c-*>mn_2`k2<3`#H8Igm*5Ml+kT{ -1JW!IQzbDUirbJv@L!Oh6?3w4`H87z1*mL~w<dqy^*3~;)JY!DmGX~4K-RN5<t*nY~kh5R;QzOaxI%; -;;7NYV5=nLjxUJDf9i;Z5)}z<Yk8mnCQTWt*d1Qzg<EVK1b~zy*~?<dR47G`QjDp&%{e7txgXFb&GV) -(1{t7_IC$yS|CkY`Cup8;HyuM@zuiOt&3|>?9Y$FSkk*iW;1dB5FQ#Rb$de%(_==x3ydJfl1sm#)ocq -WI};mn>Sn1hkBFImvFx9*Jpig3DT}0t_RHkXKPukhTf<~**DokUh2VM_by%I4(2?;KDe9U7_kS0e-=i -~xcy5@JwboyMw<wlk3AcXR?X4sm=7mhdaobHaYZ>npq3^|KH{bNj=AlH**Hj$i*ga{@$GaYis)!~H}M -v-QPz#4^`p;{OJe)xRii%A6OnZd`A#;H!ul@x+pFl#1(Rwy>IXbQK{lZ*x<l``^!8r1S<}TSQ9umXPn -)d)KE1FvmvRGV72G8J*d1xl+?f7Tn4~l{F+r48+mFs|)FKENZ`@z7w|IS5Xmakjk3NXt&~gW<!aj-9& -6cwn&jnS|;~YA=+;B+!A(tIvbv#^;;O}wd!L{>Fum})(86}<HJ%%OZzzf6V4FjG5HkW$<^a`j69Yl^j -R}-Xy^bf<}{K7eGV;oH0b=8HjjW`Ls5D46Ml&t<qw>`3*bAX1^siTflSuEq#m(==*-~HS$qLh8xws)K -VJu_g>FV@TIswjr8BMH5dAA88dhItV1jy-xCZA;KrVcVwFZi!-Giol8<4NRhnay~fr1KLSi6YD=lm)q -pq(AIet$^&+rjWMwgxjs2wlM=bG0mZtJgPb{+)}%DgFc4Say+hA-iVjsegCb=9?Ot?Ea?q`kGVQkJVn -|V{$FE;b+{So}QK#CXUP15Q6?#6+ja$xEruloiT*N*Y<;<4(RtV?K@z6{%UTeZG!nvk|y(6{%y<nXSi ->1U;GNMNJ9%AvIIN+`Rk0U){vUF4q;diwMjp;AP`HG@h#hi?~wVHAg_6{xJHM3{lJu#6^a~JBXGenDW -&7$GWq=Si~+ivS*FX{(%O{x}+FT^J)ouK}eKCM&p_aZNsq7Yn@--D!>GWxXvFW127(c-p^Nj1oK{gZ1 -)lWu(6QE&cG-vIs`k52yUt;Jy_mfpVbq~aeuFiMyX2rj%_w1DHTIz0D4gD%$X6`9A5GxViQlpn!qZ)W -_ntgmo^j(feq;!DFVyK6T+xNs!YU%q8Gs*4y?x&})*?U44cZNZh9&z<+{ha&syoPu`V+VS5}{J%7cr! -YA39DiPt352mUm+>$MkNA~9E3do8bHW6%MGC1{I8Mh_wdYEzO&@RA=JrkLU%%akE)$MRND9=05X;A+h -CJwlfcRxUAti4!IWr%1&-bV+-Yb5lPP4~rVuW+2g>54NKgF|JEv}6Kp+QUn%|7fGkD0bOATmK~0+5lK -|Etf&%oVY+)kf(tmqBIA{=`KSYwafjD2neB-=M(8`v&hOO!B#9Id`YFyHEM^SU^Ja|3oeOvY@LvuK~V -|p)i<Og?q8(4&o~vTn{B42kIaj4BdQ-gn%eG&i<$*gn>q4WeTD(o)yTG7qa6IWAhL-aj?q3PrHurjjh -)=wW&h_?g8RdVmm?f3`Mn=ke|+gFg@8U7S4N~e+BXc6rAvjD6knn9%6~dPoDZh)e~ngtxVPg!H|woga -KUTQ*IT=N?Sq0fmv4Y*2FIr^bsREBt^x0y!J!~{OWR#wyK450TiIVGN90ezh30CVv;>678u!7-R+H)e -K5dl%2OTvtlHjn#Ow9O0Yryx@}ezt{!_e$Bcl`Jk7RDVE$k*aFWE~6L-m-BKV$V~tk$?L8Gwsryv!R4 -H_E73OwYn`EL7ZJ9t3B|)V@Dy9DxP_6-;Z^lsy=#+gsa*tWcq{j$GC_)o|pARfukvT#NcPfXqvwzi{s -I;aGAAlFcbarXaI!=Okrez+()$h6AmOGdNFcvA#SMc;<|hbW6AZK+#X(l+pH}tup@S$=>7TL8LR)Fx* -tlhIepG?a_+!fGr&3<CVQ6)P*J%8;m7V!f{(JuV|jc&5RZ#G{zJ9`<SAuRGYdjnyaylOb&^Q3JCM8y1 -2mD%k6wwo|;*=IlmkMnV70W-gxgyW0w}b$9!EmhNJ3!-HiO3dK=Q)h4sysQ@O~>-+}N(;mTxle1<Ffl -qXkH!l_&>_hTrA7{+gqx^}f4+-AoGhN!@ea_VusN+akF8uTmUT79{Gf@Q48pAYzfa#4yUDVkvh*)mUJ -r~7oWt=7xDCPo)ya|afe-z_<pIu;LYQV9>3=cj*|G>d;xRW81ti+dgx!-(S&KK@veEpI9N>u_oE>LyA -(KRauDk)@B1`l!w6=Y7`RjI&|?w9jgtK$H7sonOenXw1VtK7q2=P@B|xfMutBQvBTnHeRAEO&|-5aFi -VYFB1-P=lZ{LeLM8=u2pgLTsO&5Zm*1E=gM|McCJfq1Xxv!`qLV-$c4z-)UhR{=8GLa#ZE;2WkL|EHi -Vmi9fI8vG(p-$m#`SvSTMP<?4KF#+E~F!FeM}=I+)TRf;i&si>xh?&>xG-Ly5>_ZS1sN(*qC-KrSKL& -~jwD0%>WFxqZ%yAtvm6rihZBYDi}(w5VwbjX;1t)MN!BDF{B>YC81L=0;=)Dmx-Qh*(g0?vYhfnML}B -!---{o$_CsLT=zWZs(HDwO@<cnZO$(H@smwN6n&X!q_CODT4e=qR8S>c{#Y(7E)J8eb4VY1}*`&+>J^ -$-&|Z=Sz|~^!^k00U34zzr#-P(6&f2befCTA0y8ZR_=)JJy|R>65fSV3YFf^Rcw;!lI|{Br#`!=}ZjW -!m<%a_VFc`V#_cBznHfmnHYO3ik9(_<XX&7o#{K{9~`2{yfv8BwHs9Jd_@DZ{fZNm#^nMma9hYlwMvY -`ui2t5f4o(whVQf#NfO=9rC$$)Mp@lGjP2T2l+e<n5FlTaYoA=DWi?L9nBHQ3#l6d(^@GL@qso$C-`{ -u2UL?w&FnKV$`LVxI)nkiUWx3B56kwzWxsLVq0wQ)1vTx<v<85_NZtSiwr1Bu8k4CQh=`b+z}!pC11C -fj_f2rRYg7>(vor5<d+384`lDuXubr>~oubyQivE?SPOhzO%_yoQOR*#bjc-)UXWWHPBtWJG`nk*(C} -{%c`P7X@LQzx79qkRwKJnq)tC4E%dcF^*1S%G=2hh&0Jj5GK`}*q_@UGwYd;1R^ON$^J>GJRP!3}uF* -*y6bED5ar+?JBjn5d;0q&t25&*YG{)bk!Gva44O!Kni^{HXa;xJl{))^+9OrOr%KBh@UX-;sb$u{j9| -+e^W#5_LfigfGssO6qL*I?sJ`Sy&DftB65}<*De~7@5^R%k#qFGlI&#=n8!Xu>n^iw>RW=h7Lc;N=^N -o2I_8Truqc`f|?OpK<l(q@s@%VLr$Ky!E)RrhAWy&8EItX?61Ciq&0F8Ec-lJZv*2{p%RMU>3iDqt{j -gHj!!u|RQ|onYM);?G!{=Uey(Vly@LJxEfo>NiCTk|``Q30Cm!KhWw2zNifs+HKrH47QC(Av-C<zI_F -<W!N}d0&;Ne=3sbev!n2QNF)pg9B*<Y48KI1Ct6K&Y1L{pYLEo#Vu6u&+bYn^swQ2?SV<2q8R@cI=Za -VP2e474lA|(w%`S`N*4FwobMHhqYn)R^h39x>(+wAzNxP;dxN*~APOl}3MU7aJMFQr?Pk!KUdg95&=# -<G|y+QqpYkV(bqn8>44%^M4F<u!d2LoWO@wi)JsPlX|2_X3G+SAokFE3!Dlz`QkU#G!)025@zgj`nmC -Ub3LrA$!Ypn|du{w+qse;1X=KwazT9nVWN__uNP?{VdSv-*@SsH2o_5<eX*G{>G`+@VPB-bNS&lwUlL -6bWQD9Q8Uo#NPJjp7vC@Y{7n(bD6qFOe}p%6;b^*VerjwpMI!alr#o+6^${tfJxeCs;O{A$6iXA4lYu -qwID`*t^nM{T2{dkTk|eBGE+K*fVIw7$*lhKBokfgUIv7=Wut&nS+K#0S2dE&)5j;$)|fyATHAZOycX -;du|u^Rg^SBp5p3L-yR(kKPKx<q7=6=bKY<V2DcUbnJJKl$QNwA%Yry5Vb6w?fwto?OJ;$uL=|QDpb? -@3Ozm;^^fZTL7cMo&QN=8t9LFWmR6mJtVf<}ai#IXZ4(OncNw28(@L!3~}yy%DaKn6ZggzLVgM}1mWk -Mi&%y~X&6!S?>mj=f4NIQwoN4A_=ufTz$P#WD}<?QVztOc2KD!>pq2()q33B%@jM+mA-L)n7T59h2&{ -U9wQ@p5QM!2DMLc+d=fbgGbl!r`bQBA}DR_b(x%PO7aIH^BdznjHLA18~=?-wB3kX<|Ls6kDlNeNsbw -KS#SI56+2E%z3F%&m3wpqCD!-TCK%ZvkjJfRn?A9*@sSszw`?<%56Ci_l+fhjh5&rzRs-i-gEg#9VJ< -Q7AQW>15D?y#bYBo7gaSc)wb!4<ra@D|(jvv|ZOQx&Er)N0XVmLDeE3~dCy_>@#{5W$ZNz!B0SjT#a2 -_t!aL9`TIo(RI8A@FcQ6Z_iNdV#aWiS=AHY$xTTSS!07IW@V^*EM^5CC5b(bZv^K*rG@tM;X_*hr*A? -^f0j>|2#J%VLr0K(e<TWk0U72z0vw2>M{`ObjEW9y#TYdPs%vzSBIIUKE%hPPq)H-Ub>Y1rQAe*Bo@7 -4hu|Tkg_YFn8gyc@T`1StZYV>JbN9R*mR^M`R1E%wB11B?%%)~XW^(d4A%6#9-7j@;z@onPRimRgwef -{DSH}6M#q-)RK4~O057y;s(f@8MggBaku*RcpRjsCquRB^jPi=0Db<;HigB62RCQr6<~HL>SlE!O*Qs -d^3z=3d_L^G#u`n&#tW<e>rSLJtIzinR<iL(<F|;!1GH(GkA5Q>-_$mbbZ-t7<EfoU$zlW2_84ZwA#{ -$UFQ|ok~Ek=H#Lo8Q8L@A@H3w5tg1T!LaNCtjK%mMmD<(6Y}F+g+v^&jdR%M{p#l<&N@vl9GvW5>tn= --zQfVy6IWPU3ozZL_N3%`uhdL9qqdW6|ds{;x5S7T+N!aG76W@c&{ZN)tqFsPx>$WnpcaX!nM7E}`V} -m3V2KB#f)>pO|=tZM7a@Bpn-Yr;rQBr!Pf5#K>r?!Ug>$ABSZ@(F+~q$@;2ykN3@DL-x$dZ&B>r9-pE -`;;dygveZ)#dyiLFZ(5Zfi+}f?l&ieHdilz|Fi(0Ws;YZsp7fqtJ5cq~K7-e!3D)Vj?4usq2f62DGWL -QQqn}{Q*%$6v&ypMU);#L{jpKY)sxAAd_ct2|NWUs)y}#$pxj#1Zq^IWsX5l5G%`YWI`7=+=BYau=V9 -XPK<#o$E>3vsR1rW`X9;)lzWBk?oAz!cAb4Q-a1M|X%q#pKIGofC=&)yFkV&-G0-g8sz4G3Gr%7^953 -s<mBlxce=_^*3up7dVhReG&3NFMYs?On|VvG$#N){FaOJLB~Nn}0)>M(z>*>>a`xqF0%J_kyTJ9I%LZ -ME8(>_I^QCO0b0PS#Or>MZ{mdRi$Jd_s)Cl7n-{GYU$#xK=1ztP)h>@6aWAK2ml;P_EsMici}Ao007$ -o000&M003}la4%nWWo~3|axZpeZe(wAE_8TwJy1b%!ypX2^9p8quEyZR$%RwSeM5&}#iqfC0&e5qS2% -5T(n_mcNf+y8yilx}f-xN^4N6J*BH!#CWmz-IN^(u3t(?s$gLfDUN*`s~Ql<}d6)G)3-Y7G}7Z8pDWx -LoWcz{8SzSQ8a4fek<lQ9a;(21o?$+~-k9UMi=?d0QRj8@Q#6l`VXW%Rii)ANWDY;1GcIX&>0_}}DpC -c2lWRwpuku2?E#4SnND4u`q=o99}mdpN@BS)FYju^MxPKcXL_Z3c%OtvT=seUsJ$s6k}!W=7lxy))7_ -Ef}9}ie>g<-4gHlj*rS;^Ax#zfD<<}77Aauzol)fM8UeIN)(tgoc9BYf3&U|IA;OteBF#WgJ#S2^LE8 -P`;AwOjz;z>?aj^p2T)4`1QY-O00;mZO7>O(bDXyj0RRBe0RR9b0001RX>c!Jc4cm4Z*nhVVPj}zV{d -MBa&K%eUtei%X>?y-E^v8mk3nk!F%X6C^DBn+q6dR3^db~0+ET%mLVM^fgzOlD*~~H<YyJ1lc6Y&pr% -c}a9&cuXpC8-r`HK&<;pQsd9n%;6rWGz1<pVy8x41Xba)b#?dU)?G#g^u~iemByPqM;wW9*UUOSJ$fi -el6KHXM_1Kwmd333oA(9E>Fe@McbgJ|UU*iit<$AY7yEvUbQ`d^++uVc_U6nwr{NM6K#dKx=c(wrGuy -SlsN|SyUSzdWW*}<T(o4lVWk5{X^1bsRtIST&l7x0RA^n7coskGOl%d%|MvSH0eIE?yUhF4hi?!ECUR -BVCQ^vFucl9+UJpEs&#j{*0Wq&y_#6%*mT6+&moN3YzBW&O9KQH0000802@m7R?<DWkVFCi0AmFJ03Z -MW0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%gD9ZDcNRd4*HUZrd;ryz47i`62<fk_PC-fDW#mJ^<GUY6 -r-TAf&ZSR3cT9N}7IsmoHgv(nc4FyR);qGt`Xi?=}yMPrQY-?4K2HPUZl=%#z$(zyCmP6|cyaDJ?}ZO -J*Lt<rN4Gi?1~Z!;c))lB{}GonUcOTqg<ddZ`R)Wz%rcB*{_9j`X}Q=p%?)DiQz+eh#3Geu*e5%T`HY -lxz!Dv);g1wzj#o&#ipw4FY$F<r`iZNAXsXf4Aqxb|LKL>zHbK)Mcbysb=U<k2@PgP*TH@XfQ)hgAiH -1Ob9-nroh}59-+-by4c))y#Jg#$cc&CHZG%x#oj1j-4`Fv@+lFk>lhDpd1&8&p&GR2QpDy_%kniDGY7 -HHC{mWsiIatbVT~>iYJfTJr8sN(Z&2k<3JjcJP+S{cxwE73GurmpELvUc<2Yls=;R<wmY$61mseNmJk -Iz!ME`|3gZ!8i+scTVc<JB@ZBfEiO_V}Mb(G0jYZ)$W4P*PP72X!Pe3lNXO|1}ZU#17VZuj4}#7JV)G -eK9ph-p6UA86bwbPwZnjEl@hoSe}*JmW;?QKtf5SnWlbk#Fn=5EjL^(;&<RbT9D_4#Vgk37mwOc5Mq> -W@I_oS)~~NXW#YWVn?W57E=a;#GnRl>3=&E0&$$oeiUKaIq@g<G_vpHlj{)n;Ks%I@qgqs4SW~mK~d+ -W;?_NP+3R<~AZRtbfb6943)N(qrPeBJO{riVP)f>@q?B6YC{2B>b1_f;08mQ<1QY-O00;mZO7>Qh=}f -=>1pol46951s0001RX>c!Jc4cm4Z*nhVVPj}zV{dMBa&K%eVPs)&bY*fbaCx;@-EZ4A5P$byLD(237p -~y8+e-jHWQqF$v_a6g=-vccI>$t0Q6s51?y&!Tccesp(Mk6(0YN14c)Yvc?~X^$*xl{*pReDG9Ij+}Q -sRDZHt=LF*xTis-`QG;lzrw(%VIK{%$)FNkwT&2^`{I9BX$DR1-mSHx`)?q<K<)`4y9CvnNtb6`PfxO -YNX8lz>i#PCzG9$2UdzQP9CAiq>2^%Re?4-<{2*yD9vj5kDJZyr5mf4#i=Zel6elQ5xOEHuKe(V-LAi -Wxx885Y?80*>rY?TSDWN+bGi9;x4vtX(2{2TwMdQCQBUqLEJwx5vb#l|Z+ZGa5&Q0@CX-2;bFF*Z*S1 -C-yXO}ZhL0#7c`h<;L~)-S!0ctF*^2!=z5TYCF4*+;a&z^OUar@l*PHe9pNU<T!Hy+~D1=Fp$d1sXA> -S?hmvv@!BMTUeC1CiyUTsv>o$-N6to?(98k9goe}EcH?4eRZ8<B=~;@cb=uLkq4xVqP!&sPse`%%Zm? -pa|xqd*)N*3)_HBjA)-CG%c1YD8Bpn9-bx9jk%XjErKCYj8vT#ojkm;NJuKyKbWBcuXo5O+Ty=(fK44 -@g2u}P$ybDfPt0{h&(W$<^3w4vL#2~<VBAPo%cl->h{&EnYRSgn5B{B9IG>RaSnC|O$+UGI`!{&sD|- -IMa;e-7zWX)2QWo;QXMcuWWkKYU4al3#w&m)1O{tEVV5~*IqGz8PL(btRw-I|1XciKq{;~uanLO9$vH -&B`1|#^RpXMIA_KknMGqIFPW=IIK$dvhS3|&KFJZTd>i_eeCU{DrbQLxRrKI|qjR>=zSd%iX)L4xIQ> -nrkxvfOr%0_*9v=a+Pr8RMtit14(J?NP+oJb!S5`bBDTF7{oVLI~69tb;zWmm}(iE8>bH_@*}<Eq3m3 -(+Wuvd9FHi|0u#>Lb}PhfF32UaCnpDZIa~B25M%B3*474Pw===51yLWA>is8qQ_iu%33={ReGov#thx -dtwLvfTvKKibV2C(~!@rxb<bT$MSg;dCn+*s}cqBoP@Q_XZ&;CI+dj~)E}V8sh?q)H{t)v!a|x($ZE@ -eGBIcD$`g<mr}h-k7!z*Tfm$TynALD{pkNEQ7%0VUBxMuGL3;HMoKSZ4%YYY+k^lKAYUW27WT&n1@Kg -%r>S*i7(2hn=tPM969%n1|Zu#5To*DZN>`);~_WThDbc36)^@iWKrQC8Pl@(I$0K5n&u~9t2uc%@RP& -gZr6g*cL%@ZM9i!hB%SBE{V4r>7JO%)<$pYTN>VHF0NasyW$IU0wNM+^x5fQlNy_WZy|*nNer2lW6ld -S0&3PH!?0j7FLq!h=j7Ne!^A5gS^8CKKh)7ixMs39({SdB>_P!W^laQIB-QnA%WaPw<GrZOah>#du(O -DYX`qx^0n>2x*i`1X2(tPM0eq0R_$tTQY4Ev8^l-@W`f_EwDGs<u6#070l1zsvrkm_Y(+90jZ@w_3V} -qI9%dIWDKoO1M)7)Ae9-yh`=JxUDcgGx5n;D@<kK?twWdrc*Eo+1o9(4=}t5AZu!P*=%+8_)EE^e8YJ -<YD%>--pD{&(okrk1Z>vt<ju7q88@wX*`!TvxIcjm%+^t-`)4}3>4(RGc@wf-q`e}n`9k3o~S4_|WT^ -%5M2Hs>xr+VNXcP>ZUb&GIfHFw*%<cbcwu%efP960)en&x9W#?<T<_H<tr50HiHg6(gTrfiX9l0$Ki0 -IfRC2j<5tr^nt?1Jbq&n}<z!){JQETgOKi(OP_G=<r&e-^6Z2D-g^WuUitC9mrOCo^>5VV}IU=zu0zS -gYV}-4=H#F;s4%+p6kB@UBV16V9muy@9kObf0Tf3=hunzxPP*74E~tm`Ym0?@}UofqkE<Db2l5BYfO* -vy$^lc_{AC4TkP!pqMmmj#AE+H$$Q<PF^WzCRKQA*C6=R#&QQ|}dE7fL+m9DIdq=4O)jM`Kl=D+B!P+ -eN7f?$B1QY-O00;mZO7>O}NW;Nh0ssL21pojc0001RX>c!Jc4cm4Z*nhVVPj}zV{dMBa&K%eV_{=xWi -D`eom5S4+b|5h`&SUnB?c0sE3iv|9{M#PKu{D*4!b3aO~+bf$&lnMUeW(P(uxzO9g4O(*pNv+K0cBj! -2Id{*Z7B2cxS4{%1z-Hxc3vdy8QMX9;{4ZCag0$8bpKOJd-JEhvR96+RI#`oxn{c(gMd<$z>E>TwFwp -0wLv3VAj7e^>Fhvh1^(>Wu>s>K)nebE&=w=Fc-D*ARP$sg+-A?PUHwuk4r3#Z6K4WmqrWQByE!1n)2Y -vXasGnhnY#YQ52<0I0v`F;T>lg1|IPwihvGfgAMwjLzRzUiwzmzaIBCH;nDbM#}%^&YmFVor(o9)9>G -qi8b^TpN?LT+k4EEX5i?Zi@#~CIWn2jFMOGxjQH*=iFNkrJrLV_wDYf*=<$*$bVaZ=t!{$Vh%5dF^O( -f1tnec*4$9SN&KfioHcl5Q@Cyaz0TXkCkU)27O^u>wt>H8Voq^{_N!)F4V1i+V%wdOr|nX@wqaY}UVa -L%DJ6_*<y`!&Z(SfX`nvgS0%{oXMEZvwxkns$M<XD6%_+K=dlu%=L6DQ!GBZ!Bg|$~`@aR7;(mO7wym -j9^{!0!H2B1izu+m0UL--B`(Ox6(1&1o00fX_=J*Z(y~e{wz81FkY>apyHwsj2uW&rzpM!_h?1C)RfQ -DMU&IyFq3@RKSbiXL2yX5Dft((Wk))G>l=~>DcLZWrBuSIrl*N3Osz6lBPb&>;?mWj8rVreRcy|x=qr -7g!C>tTBHur|wVO9MJ%lbHpPyknjs;Lta{6ocJCgi2@I4y;08mQ<1QY-O00;mZO7>Q!HL1E!0RR9B0{ -{Rb0001RX>c!Jc4cm4Z*nhVVPj}zV{dMBa&K%eV{dJ6VRSBVd7Y9?Pr^VDhVT6qlW?X%j299QMlp~OL -y&{FX4wvQq}^R-rwISv0g6;3M(ttKosVbUdD{*=PVb(&_f+Do4_l_^Lgu)U0rYzpS1@F<FfkmxOFBvC -P&^@vE@F3_qZ3*Z@&Imvu?2SfX)j5Hw}S-qS+cL7=CY(k8We&+Rq!mk*o!BZ;KpJQ81JJ)X3w7+ziny -_Xfk$6c2y#n2x0$r7Th#6Rl3l~xLiA>K(Iz<y%orZE8}a8Q6f}6ueGF5`U25GFrusGARe3-jjvHbhcz -!@QSX5HUW?IDehH+I=xer^e(@$yNV7G%+;e)Ir%u_GdB&JFNX^9H-N}g2d_J8uv7aq$^M6JAm%du4Jk -ls;%aGa9N6i1O?JP+Ro?$4-8bS54(t|eoIn;boXHT+4|J_Ws0pS{IN7m;b7Co2>TO!((Q8;-AP)h>@6 -aWAK2ml*O_EujONHORU001CB001Tc003}la4%nWWo~3|axY_HV`yb#Z*FvQZ)`7PZ*FvQZ)|L3axQRr -y<2T_+c=W`u3v$pD`jd%q7^5bo%5AvE^(YH*JWl>v1fOyd>$1=LK4Rm$t6JB+O7TX*WCa}fNxfkt5wx -ZBob%<{rYq_e8jFlz5m<%Lz41~yx5n?W-D*_lRRUmi<f_5mt_*Mk6|hDY;rU?QiDGx5zhplU&TC=$vW -ZX8GBoV(U#9ogT-XxdEVq^%h^`SB28AOEKE0fnaJ%<up%!dkJ&meStU4ogr}_Jf3LWZBA}Vc4#%)G-) -xd>V}6$0e2c=AXK`4X-!j?p$-2yUjPJrE4Jw(Wg6Wq9Y@NrU<V*RFi5gWTMX-DT5_uWaD+^gxk*rEy& -%6i)zk*X{B9X}hf1gBB69^(asu_nbF7UyOU2|9t)_Rx6`*$#%9_u-Rmr0l=|ET9(n+N4&GQq?0lAW7V -2OBOw(ldX#%)%XCE~k^pZ=bJVNXdgJ-xVM*zx00h{oCKqPJTMN`+j;h{mDN$f#3M^yD9v-{hhw~|BGM -svm-yie?6f0>GJc>Z-2S`<!1T$^8MB4%Zr=k_08Lx->xsOVIBX~;^mCJTKoVbCox|uUM{OL@!`Me*@V -Fd1ojCZ3l=imUL|1nOagmKzTr=71FXwfl7W5{!1CmYy<_>Beg1I4Uj63}Z-NO?@dYqy2OJD5xkXLc&t -NsVoiPwk2|w0lxY>cSO<`Z|Hq0*Q-%XiUg@7@zm0%ajXiH-P_1ss3OAd0*n6Dn*zPy|1dAF~cudkc0Z -<?<^+#xTbG!%l7a4+&qmU)_jobuHlJdzDt-r}((FV|tjnar8sAo{h@btblXmBx%zDP~{|SuO)S2hB%z -FPBM{$mP<fC-@OOUC-2%^I!6e>+ef0!;Lt<DJytV>shIX2pP&sETcT;f*uh$y-!0`tMqxJ&Hfa3t2JF -PoXB_z7E6zMCaYZl3G0_Ttl1ijvVOqf8)MKya%qRFlrQarAOZU)knm3ziy1hrSE#cK{9moTNbJ8!YC8 -`46*nxd$~4Q%ogbxQ#u}~GBK!qjDVs%w{_XQelw(wKFmX_K5w1DA=X>&HIDoclRPp~qt?>gw0L@^ElG -c-kUb9`&>@WcVT|Py;kV&5T-mh7@XW>fZX(jOhS74?k>^)8MM;-@wVp#cw@YoAF{iNZ&TJKzc32=ffn -|cQ@r2bxyYVRHo?QRvHz*O(VYX%>&3$lqAjAft6@QJO!iN-9`VhHh2=slD)uGoqL>$x=_{UW%3?SbNC -1C|zma&h=CqS<eP)8G_oT+5if0sm9;PTA#Bv4rHq!YpRqPhRjxo@D;5CAqsPN&+9$^Ff_Jn0mVA-uKK -qJ2~;---cb^+bd11<;f{ER7SK`85pQ;pW13d@Fu9WyAf^U#ubrB`7d927BIA!m%^fUpXHC)GEPcl-vi -m*KOH$9QIHpKOqu7fX2Rt<$ji;iR_@Z1avlBo^wsMlp}0T)Q*i3c_IBaZJlt^ajQQX!XAFJVbk-dM#- -28#K7`<iI>VA|zJ~a{9VM3Kb7iJ5NcqQJVlYfd(5>f($ui6YsNwFJp*fi1JXx#N<7Wo%Dk0}3e*mpV? -DEX$qFSX%^xU8_c{qSnnLq6hUs=pSI3x1=SEJxjwAAVaI;6iL%JDto$XsipH*;T7ESg``FFkKMb*u(< -ib`p%gzgwttCbefN3(h$0FnaXnKyMkl6F=0OhkoA;kO3TX<$Q1R`E&8sg;r<phH8gcMh9>Idz6NJ3Lo -YZx?rFNtduJ_uW0neK8|v0%T$!(YDpw`s<xDms5OT|HJo}Wto><!U~KAF<(_1-@Dp?4?&k&WwZiw<kc -MF4CBbG`8_?5X`1hF8WY{jnYueu^0p2J$F3obMG%Pf@T-rBLsWr+uVnJFmPz+Snw3{s%%29BsdqGdCi -8K)J~#?L-p`33m<_wGxYBn=CLZ%zVi~1Zj~yO1c=W&E7DkSK*r~j$j6BZZi5gRZv%P?zhaM8*|M=k!I -2gz|Fd0_=sA(riD}8AKs&eT|9oKa%)xTUoS%3emD1`?9L)<EINH$Sb5(&&rASp%1RpZJT%i(+Z2nese -A9Bq>?>aS9AjDlmb;J&Og8_VRr0a<5_+y^mljRr4bkEt(@vI@<%#R|oP#?-LOB$SEL%(;By0g5JWWJO ->syr!y{2O@z*o~q)gRm6Z__7J<%F(-e=pN{^CaN~TwxO`5>jSaXz5vX{<6~FpZDu<Fw+1n4eL{^<bXz -|LcXG}aU%D-ry(FUWWARm6J7R_|;eCNA*8_@^3KEuLrCc5hlb=3<`6X}ykt6EF0*tFm$bLteC{FjNg2 -^7$44p!bZ~?L{eM(4(5PUy?MquLS9Vmwcd?Mh)EaHB%yMdxiE2OXB-Ey6zymPW8zUn(3=EB27C@9&9& -6Y>^>~YJ{hS9>KFhlnRxvR;1W6P{XVK&mF$&g%yu`o6?vzR+;mhR+@NUN9Wk71dCbTz`#Ja4w6a;-Ip -fX6faHbEo+*!3{wyCPlMh7Y`Pa|MS?E(2;XOF8G6nGZZkb~|_qqDuDx`>UPT#d&rtS;m0`WZ)8YI<Ly -cYhu74_h`T)Tb)EiQdm>~p_b@QBCv-&^Xke1*%%FGpUegucY0(|fK2kt`pFJReqPqe&zs=2mHyadFVX -~gf;xeGh9j0-IXkpc6%$u`cv$dIHuW`91d9ySQnjOi@Q4EqJK%tor~oSa31`ORO#{b#GU+2j165d=qB -k2U5V}gW6C11;b^@rU0v&E;Pz4$>dfoYcV&G>?RTuC~SXqM2Va`QbI(4T_hg}TpvR8L;1C8o7X-ZECS -h1)MU>5(-+RRi?M~~7cdJ2rxFFF~Ahld#-rDXe8kS#_>;sTJzd9%ieTL=QRDB}-c3*cWWVfmGY8nRIr -Ajt_q1mJPd8R+`wPgS|G1ZfsLgWWsZ^15Kr@~LXEK9Aa6u}(dPmORK6LDGVNKH2dA|7R7kXxHa;LxEm -zcD~&+@U={Cl|1jPBp|BF67(3OG!TJ!?L(Z##pXnK091JwY8u07s=ft|7AF8wPY{GOWF3HX^XvOx&)5 -w(IV#A4lmQA<JF4`7B7{<V1yQ9ETtS+mXhX+a;RjfrCaYJCzNor&0F;61F5Htc!qgR2sS^mN;Kw^;B2 -u2B%vaz+F<9q--c|gSiE>g1;$a19tZ1jzAye<7f@vuR49qd{Uvl<|v<q~iSdQb%K3o}tww1di;|e}zT -r?q}ezHuHHAm?K^+h*sBV#q1gCmEVUFbkzX0jBu{vbBgCveTXcMp1`g&{|*<b$EWY6^t#^jxi0-F2p| -Xf3sBVW<twY|uwy0Y+F*IsQ~6*duG5l&9p&)Jt#Bm6_S+tlz{8fxBtjPnwyaqNtu-DA|x-Y96+&T9cS -+^X$y-6@<2Gi*nbw9VQLE{9)2~Un{Lb<XE&9TuO!Bn+0}>)S75bHdz*MNpg%4z_c9VL78Bu<Pkl^V^} -Ab#sY&uwLM5<4^-A}fFI(Q$^V|y;#TZ;Pf?eI`_2JxmkMR+?boB-13<Wp|EM(NjBM|{r$;bP?aP^EM~ -Cmvo5e;9`7JF2ZqHssnX=j1GciJ!6*OF5Yf!5W$+NuLY;FGZ2=Ygp^jOMzW2p|V;VI4;INuYrkH;eYi -v*S)kZ|j`Hj!TZ20)k}mz*30Q44e~qOu5;k!0+W5LA@%kP<QgSB~yH56rp@=@fH-FRF8)usNU>h1&`R -rCKZ*MM;i<)2Y#V0UiM%!1Y^zbgAW$yHJQKRe2UC2pGcD)WZkMRbN^<IxK4)tQ$0hGX7|_3hc^0)lu8 -|?3cjx0r))zy{+BcdROZ?hMxJ)c(nivJFI?nc>|R0x+|oikn>$0<29N1%a;0C&zfH&3UinHh-A$GdtE -Jfi<WhxK(QMliEmvcK=#)PFsrp!RTcCl0v)|50@9;_y5==D%~bQ1sy-G<>Mu}!TipioB0yw#8$+*zTL -v9dGt>QlF>>5Rg@~p|!-#M56iaLzaPz)J3ak9t#!%XUYTy}yArnO|c0|}Pv_A*33?l~YZW)HfcF&u3r -)vqE+mdic4LTFiDPt+wjuo^1EeFLteBDVKk4F12G+k#lpv#>LF$22%)?8Yv`w^%f&0V#6AZ1RJjL|hH -GXkQqn_~5@a>PDhgf~~^&e(g3QYx`HUA)1{tWLrZ2I9L-PU%$M$)@U$iUt5sAipicY*SZ@n%w8$do?4 -saN3TUaHJYwB4_`^kwDr-h}ViBPGm1?!qjYREjk-mZp2KKyR_Y>qPToMtkA;U(1K21)qZr!XOnXeen| -bHO`)d{(Y0Ppc+siH9zS4W&og~5FC@E|xy4j$KZFch?tr=GA9=RHdoNgFuoGkFH6k6=zysHrp{imPN@ -b4C)wkL~(>^R>){f}X9w;7;1qT3T1At0^ADL0nN@3bK=ai)aoirsEZxIvsNr7clWh3SWn{@IUSIcNmR -%YqEq&q;7K5a^;?Uih2Qde*-DtAF5Vt{YbpLQmjV(d79Df^Fe20wh)o40~wTg9UYTa{nbr)#E;PjfeH -8O68tA%81kRZ>#I)OUtW?H}DIwkO?=q?1h}m`25MJ6}4v-iCNJ6?KJD0~khEe_~Y-vC4=`dJZR0sM^w -}=Dtv0qG`><`!OR)L>)0&4N67(csjNw3ia#P?d^;9En5?%8uAdDAIp?X9hsWkjZ{_Aic-ikte^L-kDr -5T$<{{4jp57gue}al+Wnum>@OkgS#u4LcpA@Dw<ZVqeCM$+eGK=4+GqlgM&8Y8EfHQu7Kkd^5_Hh=hp -aTF8DXa<ryF;6iL+{o<iP9vzABUxQ7%p2_C#u?Er6Y19?xvAnUmHN0Is`}RMoW`1Bp6TkNZ=%wH|;S> -XO!YySqork&|caySB8u^6HIaS<?{7*gfZkQ`@rl-?^|%4!+I<#{;$vNh!YCFD(${a>bN2d+w19R7AV3 -f1os~*FC5_+H-*CYNTU_$I_?+(b>z_>^t_uo7am)E7NvsJ=DKbkl0jA5Mcjv@h=b#Rw#rQsOFwSe>zq -_y3pu6uIR3PPaBHlZY99ar@n61>qL~dv1&xuktEFaJ)KQ~ZEU>GOf^__TbT^hwcomV^B!TFQ60CqZUc -g^>d^M{tGnlKW1HuV^Qpev<9Gl8PHsmYO9pi(!XiUztw61I85YbuMm&fDpxY`eTw$A(B-iG0rx2mq7X -Mzbt~R5A44y*P9lg58^kdhvJb%gP$MzkgVX5Qg2s)0wXNJVAwR;-4ZND*C?eEi>UQaYqK){btu7Q_Y; -d<Ya?LO=Mx+7Xn%k;$RPDE7qzh)RCcRb7l>Y)9XJn*7Lq%J36V|2&ea#FW%Hm-yC=?ODdco=p2-xOx_ -+6RZ4Hp9Q7C8t=_PHsmQaIan2p9Alq+7^<pTkX!EIegX|t_JD0w>mhmpY8om4>B|SJY#D388tUGV9ez -3Gi-MF88<!rSVg_6APueW)s7eU-16P8Sk-v7c#W1xw;%w5!IO+XVh0t4YGMwBT^t3LX;;(K>Z;qP;EB -TYn0C%ooex#STy6uEYu5s`N5DV%s3A9AIs;OVDsUlw71ZL(7<LZO1=ln-xs==-BNPK|+ON6h>rQA``% -QftH|dgX+U<%xHsX@F>BP0WW<Bt~d1uA*j~pVGB`YIVstzE_%!4}VM;*`yva>i$00;8FxD3~Fj?d;eY -L$q2@p^7`(dMUb?BuYaYSG8eASGO-zFZ-yqR55H$Uq6=mPV59?818+0a+KlRJBUomk-#xN(Moo+8k7F -MHr^)VwmSu4vxb0@J|`&o;B#Ls4v{m$~*kqZ=8nLdQ!Yx7imCk)7TeyfzrBsWJA@bD6Jr4w5q4ws@0$ -tntD^9r0P1f7|X65$Kl`4*hAMnVm^Uy?1)-ZPbA+7zc-J%H-Euss?6;J4OEh+ZueQal#rb+78FU0tI( -Wa4@uZabdVdmkbaJ2Z2E2gRKGd|tG5>E{&7QVz~uh`P)h>@6aWAK2ml*O_Erdizg<ZN003$a001Wd00 -3}la4%nWWo~3|axY_HV`yb#Z*FvQZ)`7SX>4V8a$#_AWpXZXdA(OnZ{s!)z57=X&LKAHDCq*d1n?ovC -cpy0cCiVt1-gYoOCyVGiWEpHj{kk%kg_d*v_MgyK5W+3@bS&en-5)x=Pw_Bzj{=f?rpnqYFURDdJnha -!_CjXhzF+%@g$wMW^^&SNXAd9Ami!kQ%NSMN|C!2cdaaHy84jaj7F8SjR@4V6;Oq0TI+)NEE_6ch`&g -;;rmAYlctgFXf!Ic^j_RctrxObvB5Vd+m_tKE`CrErne)3&v-nJf1evzighv((%H_GLW-&t$y}^!Rn% -gwU=@f2y^-65TA8JABuk-8utG+tMORhiW<mmCU6T=^mO&))UKHATf_+F>^iD+=2v-$7Rs0@moS_I-SQ -8KyFKm@?5_&d@Pw#*rLvU&V3=i5QT4&!CE&v^12)IE`Z<uFfki6-SztoWs2deWp-%zt4=Mw`dO4}`T5 -8(?7@JXIeg@(V3*E*`yyYTSaM>t~xUn`43aVp`@M)+Emc8yr<dG0PJQOY1WC_Vt4gNR$hHmQkl2Tf=W -7tA<C@=Yo&!7GFNUTABU5l;H(@8M}LO6B0M#dpPD{OW2UIsOxG8w#p{i3*p#PaOgP(<@E`l~=E?0iyG --ufiJfq)hidoh8aKbqgk^tt?Zt8C<BU$B1x<koTR7d9P6lp!{f^@KI}tA9Ic;JKx2Ct*yBX5u0fu;rM -kH(ZG}aPd6(Qk4BJ<hu8hRkP!-J##zC0T<vSy>5`8an@EwXtZSqxVlhcp!?qIQe@d!Eo-3n5o=-gKYK -AhH?ey6f4uAMzmgkV9n4hW0$=EG^8Y5(+DbW1Ibu>LbivpVi{`luzG0b=O4#_Pku$*@M4DKHAx`^U>l -gmyzMX`34(k<kYP)}Mz5DFP>NE)AtYEMS_0SXIR>b2ZJp%jq4UpGh#Ykx-}Dmu?&v2#LNr`}|sAqcqr -aq}l9&aPRocEt!?8|`-(psPEII8Lf~i8KS4yRG4abI?$1EU1dol4rrtyYgTdD;m|r;A#o?xOomxl&Lt -e1fiiWIv4NZ2z!=r@6%RX1uBIvazl6ap{k`%QUwzZ&)#TY&YssHwEp(`y0nGQT69foGV7MtAFk0sfDR ->I(|ary<i%%oX!L~)wz*Qfk+4roR7}s}FbR`!ex~0u*YRF=jzZ_m*3}6sJF4eE`yOZV)TyJw2HFa4v; -Q&x+{Gn}DiWWqq0!Ee-V18OQ4$YvTD0NOzqlsR`wv%Kh;Jl*be=`TiHx0tHHF-pY*<Xcef$k0xhw@YO -(=M|WZAGVvMf7}?4#742GNW>kE4h_c~t3#O!v>xTr%iYPo`o%7dMAyiQhxhhScv*pF&if4p7XZAN0F$ -f#o@{ugQzBolZOpZHGQkgw&w9<Forbl6dH+zB@Yu<tPna^qMbG^_Vkhe2cp;pJJ)=vND-w{oj<0rFtW -O22P4MMeBZ|fk?dla0p!b(=njJ8LVyF=);48FS}N&0<CL{fccZ1oE#*@6RjpUGjTKh`=BQ%rad_^;t# -u>Mc)U&?2fS$%vzvhnLt~ZN5i}O`-kV}{OiNr$J09xe>oD@Br%#Ei67;FCdsWbwm&Y}sOlM-S|JetVR -?wI7572zhp}(Ozz=}1|FJGmcExJL`xlmz#;3*^^K+lF&*#XY&Ea2^29`!`i`8)6Y;R4?x1WH#J6IhhC -&jK|GT*qu#1%9yrvo6gW*Fx=CNE|aTiG%b&lCb%ANacf{Z-mSicO)1t)2ziPc43YG(s_ic<Zrge@Z+I -FBS;KUO1=o{ID@zh<o&h#Oio^;{qbtFQzO>CR911w8;sN<%Ncg>Qj6JkS3(@$Th&o3ze2%e?p7pmip7 -6|MNcI?-jBMbLKnfT(K$42Yoo2!*DumZftefU83L`x#3L=$=5M$yk{>iFL9CRl_*0BWm@Jf-ZGA1Vz{ -}JV?Cs7nF(33pw@Kx21RS8v)R674BR|d9{l^-VI7z--|3m|d@u>8w`V{O!pEO}3^3wg3V2yjei+$*3h -KcAIJEfAli)*CLpsRa{k!{a#>cVhoYrcweaZ4k`SE>?Tc`C&*!N$b9z_g1-s?<xgb`o7p!&KqtHUUsc -=~^a_AgLN0|XQR000O88%p+8N_1|4?F9e;IuHN=CIA2caA|NaUv_0~WN&gWV_{=xWn*t{baHQOFKA_T -a%ppPX=8IPaCwziTW{Mo6n^)wI8$KM_H6kQr^SrrA#0PRK+<-NgKj7aftIM43ngkK6~`^|-*-rnvgO< -wKghc9T=;!F=Og#v;?ujo2Pcfvx1v}}cD2-VdaGwJ8I2F%Sh5(-h*TnP?X~u*!DlR{xuS#j3C%T28I? -0QDoDJfgGo4QwOCdNsUaqu<_VGhS+k6`TB#Hn(2Ou1mYQ(|?rSP!Msz|n?L&b9>CSDWzdK{|WPEu`|J -=6`63R7cwdU{7kE4_GIUGXJCVglp&|X0MA84P>+UK+O1^jtF4_d8OLQ|l(1(P%)siv}H9rUf&!w({-- -B}CpXP(iS{S&edij#<QvFdc~AW3y8^J>tq;8L+6{P;+VXh}(80%_;kS#1#Lc<4f7a+Tpwd#B5S(@wYB -MW-<*O2HpQ(NkJVrZkH?V(~AHjn^t;47(ySXZck}QJ(fOkSYW+=i-`Q5Crx8=PC~ZH-xhU#<#cL9;%e -hhmxXW6-%}-@AZ-*&&Yi3ge3o#N@ut-RM@KD&T*WN4opEI#SKen0$K<loQstYrGT?*3ghv9ZM@XFm<@ -+Gl&g?YorXeQ4VOCOLz%{JCi~Mph4W@29~^`S;S^R&Dk-ce<di108!ZgcoW)G@H7K%fWF&5Iev>IIMJ -e%#C*gw_Ij&xf$0Ha(@OjI_g+|tbR~zul!Y<qjJM|<7mv*Ryvrfv{!HVf6kbI4^S^1Y+(0=$hKb|4LC -WF(DmuK$~&lOo?VdXI|6ADUTt$b+`sYPvH{S>>(S-Qpyh;F8_BC4V|fyKHaoHL}i54q4gUT^@029erv -HOY0-Payi^ZUY=C3ch|EuL{@11B+E@hK4(E*M=LYSh{OFYfQkKgg)VFbZ5t?+c0wL)_shs5^*W{^4sL -HZOPJyjgd)&7EJS*?Ew6Ejz0oNaWH$(>)jR(4s!3R?j|2|`i`vM8nQc$&f>uLwAm5ORf5b{bely+a@S -H7jIr~raVeV7);29MHVtckFRqpi>wd{NECUxau;{V;9#l;*T|=)0rn5WzYhYdn-<qWPi5)goqn4fy&Q -~3dyG}uT-|zIy-PhUcZ{4Q9I+)M?n^Tz`wQ!#wF}4Ldh()fY;MPS@lnd;2_v*}<)SMqzevj-do+rK6! -*1Q{p|}4^s<bkyg^Ga$vfQ+Dqss-AOe7Cb97QZ=I*J^*z25a|i&$GR7DG&bgQp$!@@4V}Pn#g!dmX5z -VD=ONeb_;JR%3nl0^!wJ!3|B7kQ|j-p!hQse$*z{ZVj|;6+$gCnc1De0$aM3n%xOlm+dVaYm(21(&r* -Ed$r_AlHc3TEnN@ti^Ho1;Sz7weMm7)SdjP{L~flAym#xRRDN%;^l`v!-R#E~sQEOUgcECo+Kte}B{x -M&aKZ$4q-4QqwIy+Kc!J5M;uiB%0uq6V8|~9ela1X~Xrq$2JnKXhW|Ghw$_2g+Gx42qPHaLnA6#Ax6A -`Q77rGdp&gY+orUXo1JvsVodn)|4Y3l9=l5)(G4i#=GVmi#JUQu~H#6GD-Ecnov4|8>jf1ct~#5atKV -sHPqH#Wp&ZWDJd&7Ov{jOl77h{|L-Sjw=$p<O)&n`p6)a4nLO>j+njE|sl^AN9JKj7ELD?3>HfTweEK --@Mx&jr%Y)@1~;zyo^WYf{zEIv9-SYiGqBvXPXaU-Glu1M)ziQliF41#zw*0HH&e}8f7SXyhHx7X^}q -@#^zmt=;g)M*^^-ZRQ^_EyicDxR(`-uU1hGWc1Jwx+R5AQNn-mv)!7xgO-nSfBOkk=lC@1Uy)Bhw)oI -7H5VM6bb7{JBAD*28o~xV^*z7x-5OFCbZb2h*W#*WX+s>$OhYxJ%%|I_FHle{iG#YtrtWsoqnNy`A&e -H0vSx3oOUL6r(2&OFX$k2oR*P~IlfxrVUem~sK``OuV1k4>L@4I|T!7OY_%hW>WkHgg&IlRj3TQ6zdC -xvUPj$ItXUh98QO9KQH0000802@m7Rvw9Gffxw@0Kppo03`qb0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^Q -Y%g<Va%o{~X?kTYaCyC0YmeKw75(mC!D>E?lxl<|GrK4T@P{;yHo!I;><*FwgMmRy^q3i$Qbo#+cai_ -zb4g03BztC4v^9d*Baw%f_i^syjQ#rY%|9>R$x^(o>U|^c*XBliHP`Ir^A|s`w~fr%PrT8Unw`zg+~S -{PE|eA*?+c-fTuISfvsX3G*W%)3_Ix&zo4RTYTXHRayz2gvRrl))f%)IRm2x?ot(t1XYFTHCtx!ePF# -mR=?*aQTd7m}nU#-waXWBGvZrVoZZqI9+`X16LEsflYH!?T=fGn>zH8<VDzu(+^{6*-x!r~O@`9q0sg -S#)xz816DtPm@<SpImmC`4WrVzJyCq2pz8J!AMZ0_Q4!%M8ohs(6_RWq(9m=Tb&Vas&!;$9f1fJxM2- -$BbID`b$JWSh3=5X%@?>*e@Ev3pQuf@{7n#Oz-oOYt4QYjpU{LO*FB4=Z_*Wigr^2Ta>Gmc|FpPP7#D -V|4=F6w>Syi+r=8^iALkdBWjMjWtm?Fc{&8SvcODgM%V{v`kb-PYoQqLmZ)>XYFtAUOsbUa#CcgVdsV -X*y)YU3EJiTA)D>&%f*Ubd%68JMfv?1lt>Ecw%~er~hM9^j#~>Qs#H3+7H=1z`psKxJ(~}+kQeumJBu -qBgXGNbMgrgO)w`N``gGiabgM1<xZ0pxARyDTED*G#${{7D}0R{>@V;_FLd3()n)=(k-ai|0eBdLUJ3 -fQfMXPa|PvX$lDdpTDI7l6|v<PK2o^Kp->DfTk^O3H$koT~sE3TTxi*%=hYRAm?(Hf6ZGVmsJsf(3v* -qkD3xa2C$D&YwYE!Rn@3mSV%!f;6k0KwWH)ky=Hr1HlVzZCJ?F3j0(pU@Ef{kRX)JMvDEl6BDd8-&#{ -@VaU`Sl#%2h9U2bVq-<U7tYtf;Ot6YdSjT)&)ovtM#@<y;F4eu)BaZ4s+)3DJIh9N(>r_~2W%SB83f} -L9TXXox?*j*Fqt1n*>(MLsn*0c_=qsi3-)?HNcWN^Y$sB~HHdTY5)1u}LR8;Pd;Q81FWI-`MSwWw;XV -Lf}2{<+0CJ9@C-yc%8MQpP%V`S2ZjgFHEYLXri1zuuWlB9=mPmZmHZMCdaxY$2Bwi+>{?c#&zVPxao3 -4xF<%}^kEa%}C88^S%qH^aT(W`|#aQ@zGUn+aLfHf+nAJ@XnJc+V~LfOpXyxzV?foc)W?CLP%ixf;u) -D1t;VUf!RP>AI9Aj?!poPO`sSOQ#L-t|yA}E9ZeF+@r+mwm#x3?)_rR%T`zcZI0_*>|PiTk=k4|1%N& -V7>Ep_z-i(-apG81_hNd^z$CYBEtw|Vb+B?*Z$P2hmrAPmb{XaQ{3=R2`p8^rC)kv=Fv(IXE64n%!TE -PSolp@_R=k)L0dAu$EGSEks{mAgYbu;_+2k!)6>36i-V&37M(-sh2d<c~1VfZttt@2dXQW4ZHq@iLTI -kSkgb~d~DljM|3m>Y4NbIQl^2U)R5hEq%{&^8VQSR^mG|hhG&*TQ4S?SArEonJrFAg>nUvp6#_K9rrw -rQ$n0s{bRkmpf&k$><9;YtdZh7q2`MUl<ns9bHX=KTdJk+}khvlW#K0aRVNT8r6gmNS@2SOQlEEg&WY --(;c60eyRYdB^_b<%@=r`@7Qx{ya3-qxbq7rBs~S39j1B5^Jm0bVkCK53?Z-{_piWxB9)kcyZSkxxQW -=_<__Y*>jsI3Dl{~x-Z)Zr0T-*3B7U-=;b+Wa34ls0dA-Ww;>QMY(OlwzkiD|0B*R6fs`ciso)5t^se -y=a1vG6G50t-)NQ@Sb}(5*mbMiDcOl7Et;!9(h7>77Icuxm5!jbjL;J9_v4tw3Zlrc)kiQ?r?#UP<2B -;g#@?z2P_m~WF>gS3_=pc%sPl&hGev)(8#+r<z$@|2_ZDGpVrbNqk*`tJAm@h!H@Q9FoYLO$nA(?jN{ -rR(V1SHON#0xz@8ymruCgtW_5!-Y@7627Jxk&G-_O6F^fl47T97oma-An2|j|4#0s8$?Xk?YDg7DX46 -l*5~<q*lX~gVg8bWH<zF0K}aLC=21QzLwXl6f5J3W)flvhTri9KH~aVxs-^c{UFw(XEueq``Aq9vP+6 -|pFG96Z`FaPNcc~oNxLW;tIC-g9uNR|P4!O>89()=Iw@mU01jov&7RES#BUaSnxe;7b*(esfsvdPw}& -G7E~~3Lc2#o_<BvDK#0~Q))NNlZ-zA}y!aGE!fxn{GzpzsSxCImuMG2eFS(L9^^&pB7V|UxFpwsPv)Q -^hP7aDqYnk{{EU<u%O^WG_R+P#vBheeM-LOZ#;KW9v=H>hAvb1K3dQCHUpEC_3F?4vFy2Pl1PUogk)E -Ox`5WCYi0%BFo+%wF}sDXqrTGBMXPC0$>KKF?tlV4v|YqT7B+yI9<{gdQRV8AybVMap^WIgKx?Ep?D1 -uoai3tz<?z7%ijEL0#+|XPw*5)%EagZ6{xJ&a$Nj6M+aST=9IED^A<9pKZB;R5B?~Lq4~==C1QZx}gL -&oQ0(9*|VvS24!lOmY;ujsY-K)s*(3nQMn-QdA|1?YpXoxJ6%uT4K7?)9-v6&T!s=dT<DO^XjTC0lEW -a?C_$OBOV&O!+oTbA#hK62*+^y6+rIeD+fJg^ll0tAH8WT36UrYhXvduC%}au1lhWaI(Qw3;FTeA4Gz -g?=@|cGH!1Za;>@QD)W?N`(Aieg=7>!pa%83u!N$sdQ6ZHGZO#0cmgq=Cr6Ku%Y)aKHw@0;xCn7NQTv -@FM1+vX#p?CF&F^z!6U$S@I1M>+9$T1|tT@w06*ZSA|!&Z9?8<~)y!>c=tT`;!QdEuVt+(~tl7!nUId -CjvI9vF+1}@KcfL&Ho26cKJk%4XE->Ye$xSvg;}d+)`tA>c+}6Pu5yeNsPsIP)WC>k}<#%Ur}$Pqg~S -+vvPgf_R`k1lAz4G)gzXqiRqz*(N%!fm7;rU*KnC#BMq{L?J}`td({Cy&8b)aHBRk@EeBEsD&LK#`~N -R~{Wnlc0|XQR000O88%p+8oDoK1G64Vp1_J;9BLDyZaA|NaUv_0~WN&gWV_{=xWn*t{baHQOFL!cbaB -yXEE^v8mkwI(1KoEuR`zsc6QP60GUIICYwos5#sE6KUyP24Q&2E^TK-*tmO`_REbDDkco1LAPNPd3oz -80@&VC$-1!c)Nq_~AsZS5MFKg;2}ABJZq-MAX82)L=a<-ZHR^IRYheQz>1*VjZu9$jOy5R+*|8NMczz -V!6HeTW6V^*|b&%>Wg#5cBr{Qg%BC!gSM%V=g))p^QLMV(|2bfI3I!4$)^XZJJkcBGWZ7+pas-~o>7P -G?Gyua)JAz9SlupndNWad8#tE0h0CtqED^mg(|)VzOk&>2=;ei$U_7+a{j78E@a*Vel0oCRrA_Vjn)& -e9#TC>&5G2=^z1?SctAfkNVUC5-I|d=%DJ?v^{r|XhwdLugV6Kwoax%ZJ{21{grhy2!Cfl&$A5cpJ1Q -Y-O00;mZO7>Qb{)fJx0002;0000h0001RX>c!Jc4cm4Z*nhVVPj}zV{dMBa&K%eV_{=xWpgiIUukY>b -YEXCaCvQwO$&lR6h-&*D<0!k!-O_Mi#{Q65!oV$7zTaj19gVyEb`yiWEer)bMLt~fc&_<M0;v*W9-0m -uiY6RE`=nXFJQ-1K&H7jod`rQmNP1_>oGc%*g2{QIfa$gMU7E1i-oAzv@ok)ldA9(sI`V2yiYs`AxEo -OJ6xM`nD9qrEUEuBPacgOA(YZhqZBORDkoQlApef~;H%4<cmhyM0|XQR000O88%p+8I6yd<Z3h4VmlO -a1EdT%jaA|NaUv_0~WN&gWV_{=xWn*t{baHQOFJob2Xk~LRW@&6?Ut?ioXk{*Nd97GqZ{xTTfA^<gor -lU>uac&{D_|f%ce4o)AR8A+?sgZ4gFs6oi))z_NGgtt`|zD1DT%U^+!d`~ERpknelr~EggyN0)7SUcq -J~S=?6p`|_7R@#f}NlJ^#^vPMb2)yHcC!TCMTZwR^%WJyuT?xT2Ttn3-+Pmc?Iv!)3eD$Y#XI5tGKCZ -vFcuxnUq>>nMLV4%^Mch3m`EQznP{v$?5h!as!vNFlP_YaLp}zRK>nu?wORdTGch^j?-;l_REur)%(S -S;g4LsQ}$Z5vbfS(=?OgN&{%fIx8N2$-3e><=jqp%dDsO@ZkFzG&Xy1EVK$je3Mg4-Aa6BfssWkpw6K -tr$S+a+oRwQuz^v2o1(=fcp6$4_%qr%n>A_aQFyfjsqZmnI!ZINPg<~Q~PEJ|#wLy!NNtfA|`{mv3w@ -FaomM-tFK0LDD{L9tX%UiY+b<IjHY9>n51x^*?wFX}789WPPjnlmIx`H&%=d5`rVfW6lnRIZ*G?0sO@ -6BI9&RYW{qw^18gOR~)Zk<|kf%Y423_})N3&Pxv8jMRLPk+03#jnomPl`!pS&6AvJ7)IVTF8wd0~!ra -h&FU>3reDB!q1j(gj_S;Q9ApAC^RmJ;j+L4_}pUjT@*O;a2+hfcp~n(wK`E4!s#-*TV5}3Z<k-DA?wF -}bQGQWOUb?nS*V>s^?$~QZ@JzKkYF5RD<s$ZS2TXSx%+Vc?R9;Azti>+N~K*EoJ*?J0eDf~3a9~L$7K -Kqh0B@ZGAT?Dg~`%Bfqk{n50z@zs;8k2W^OOk-EkoetS9WTL+7?N)}_^1(1Eo>Y0f44P84P%8pbQ!Bg -4rhG`5#VK<mRic9)Pwa7EC)RW&h$G4wnL(>zBblq`f5N@7MDluk8ZcYtb0cpnA_C6`V_o70T4xD1lO^ -%tjW1t?b-C{oN)UrenPwfHwmVYSLPAq^<ZRI06uxL&;#WM+qVBtxXYws9%M0O1?YH|TgMu)_Bdid)>Z -2tQr(I!>?#+iFRCW#Kss1mbQrolT-d$65U#gP$tLdeTrZIuaT(iZXKjiFzIPiC3%dklPqdd94hBshAB -GP?)g)<~4Pa%pGS`nV-e8kY4e0I(?`(slp?ohAp-M?sA3jXDekZ)^o8Zt_4Ehq{!r5aE(0^QrIj@dbI -}Xa^AlcLZhKd?}sHSttZeI*St0mEu$ui<;9sg`|<2-B%)jYN4$=y&u}lJj9=VgCWkFr%ADWP29{7yfa -#Cf2?JC{MC_0_2#B|aZ1wSFKl8fvM`SX+<dR4UlOyQ|60KSTwS^7}N7!-Upf22lIh^3P_)Zyloig2SQ -0*b#XIeaB4!!2a(L|?w_d{QBszLDkaU>aS2KbED?v{^N3wDF3*9DFpSV|NMs`CLxd)4~3Rq>~>AA`}- -SdJ44miRZMrZyIq=)ivxoHe3Z99V-(Jyj=ZL~>~C?1f}Tp-8;<QHlWJI@WrCqC=Bn9AXs5Nf^;WjiSb -wJI33Qz++iddud;Cl)3JCOcF{E3BuFCb|^*K506JG!hU!fZ;z}TUc8<EG}L4AEtY^P`aS|OM={Cs?5K -l=kvTOLKR^F_@|*_J*(|N#xe#kGHkm~osg#N9LCl@1afkKze58ZHtMASSs@lBba_t5QIv8-i*rPaX+; -n;%?$St(|2+UKSY>Tv7N@6cVXJn9L-+O+`=>^qPu&<4rtni?Obh1p$G`Pr$S<Iy#f2<5H4Fmu!|C3-5 -aQvUc=}%!Km0mle__A)*I!>aZyIi^^t%#13<DhI?41)B#R~gSh}8!6QK-m_&N7N8?Y`cscIdmCDiVJ( -PBor#6v(nVMsTpRtWug)lDNKnJ36{o9CTgJPvtTAVPZe#cvN9eo}<79efLMeA9c>J`WuS(#tDn@<u|= -LiuIfo-0}rm?Jbx{Puy@Gcu50txXWN0Bo=?E0k#%6e>+j>i_9nNGvDAv!p~SR6m__jyq+0E0}k?l3?} -K2fiL7(LNBxVsGetsxp->~rQa|*_Bc3b0A3A&;kZNM^~m4caJu2SZF$X(y0(+~!tIfyr9S$jmh~#`5O -AK8A|I#I&+##QOk0-X`F9Y5HR$Q$nS%OA++fFM9Hl3uC|m@_wI5~ScPe5?L>Tq@!!|h>`sTyOgIPZSy -8lPb{gjS5=y?#*3a`F2MkCs2NR-$&x2}~Kf1Na~uzXd68yIV@*FJlAPm{IcMVO#R6XRjLqd5Bj2LhLh -Da}a1t@vxl8!o>1QRKkg&(4eYfceV>-F@Hm885*>X1EsNdYgAws0R2ZgaxMozJ?ck#y*>o+&|oG5na= -iIHs=`ch~U`8t?z9pB~sdcX9detv>FjPR{=Thc|Y;?(UmYtLx0Fj8c|Sr$}&N?lPE<A#v|R(0}vs-!F -)Ttq?$N0HDpE?r&3XxEmn~1^#N#Uw;F?@5+A~Ar1}1XdQfk^B?vyw2N%>u65^QXXbE3{RdD>0|XQR00 -0O88%p+8Uefd&!2tjO2?PKDE&u=kaA|NaUv_0~WN&gWV_{=xWn*t{baHQOFJob2Xk~LRa%E&`b6;a&V -`ybAaCv=GO^e$w5WVYHOp}WZj@d5s64*n#ZE0aCr5~_2qsrrCs3I9@oX!6Gj%>$vAgNB)%zIC7KD>sX --#<QYK9j{q-@XRg?fDm;cnkM;Z{NYEKn9+4h~BBSS`XkSGUy_1zSiiN8p5!J_pLU2+}xLUN;SbBpsJd -VyMR>%bZC8GsOd<NL}&oinvv;%Q+m7)*_PU}I-;w6C{2<!-f{4DxSTm3bi~ILP)ZrAV}u`AQ|v?8l+3 -qEft(r}u|<x!s<Mc-DL_=6q+vWMSf&^}^r@M*LmnxA@pZunC`G!NSSDbC%+$D~7I4(I!vgTsQo#7|%{ -yG^Q3KBNIXlNM+?8>7WE9IM6k6d+lU-!(3}&NDF*P^8R2=hC?fGjnLCcPf^DkL`+XJ2k7v%W-RLP#Tt -zw#29kV>Y;xXcX>N;yq)<^o(&Kj+tt`1`s8bOzXFcx*_i3`qZwfcg##Q=>D1BBcTw6(ypXrd6MKG3Nz -`j4zs3BM!43-Nx^FuG$|>^Gt{#gdwk6L+?i)Uy0m^*2oWh*wPaiw<3snI$rs<N#Xlt=KPQiNGP&z<yB -Zi<yDt(rPO|j`{~sO9KQH0000802@m7R;UvV08#(|0A2t903QGV0B~t=FJE?LZe(wAFJonLbZKU3FJE -72ZfSI1UoLQYODoFHRnSY$FG^L&%q_?-Dp5$z&nrpID=F4dD9=bOO6B5;k5A0WiH}#XRftxCNh;|mD1 -oJwVuA8ysYS(^`FUV9N=61o#(D;(dIsi7TmVo@0|XQR000O88%p+8FCeYqo&W#<{{R309{>OVaA|NaU -v_0~WN&gWV`Xx5X=Z6JUteuuX>MO%E^v8Gj=>GXFbGBOp2G4emJ$z8sfTXR4I;}SDN<uwK-%?7+@vZO -1pogBxYj~qBP}%&gE2Fe)mE%wd_kTHg#;uxqs6Z?l`N2jd;5L>X`toEUVn^mqh(vwb8kxL4@-#CG{!^ -g+>l&v-7uU$onjI!`RZ5-!6>wW^F|Y_^n=mbPGRL5ocF67PR7MptxBi|&RyrdfhWVi)?VL*4^T@31QY --O00;maO7>P-?UaibQUU;|K?DFE0001RX>c!Jc4cm4Z*nhVWpZ?BW@#^DVPj=-bS`jZZOpw{v!h6wE& -9%{2s`Jc+jLKfd5~E>FbgD*Kn#MHYs?@(NPs}_>#w6d#E?5Ov#Pu8+_cyk3dh}X5cpc_n>O^nzbRe!N -ZQReUjL_DHDOSlitPH$Y?}TX&we}n*mxcOPZxYU*#CS#3jObIr$=~6qW<3<z7N8r+I;(8e;oS1mdTU0 -2*6>S#s~_=P>RM0hJq=QWMG&;VI1_)1mc@iT(hLTwZ#=I1WPtJu_4e6LTq4WLm(Rl-6Y5+q&7sn!Ke+ -BZbD>3QyY}o(7|$=EsOj-2RI%^8;0D_;U>m6DZXLi4T)~hU=z?ACfLx(CVe{tvYaZwH%Ppp(G3&5&4& -`?&od^ki4b^$!<z)(gy9CPGom&)x`~)gf-N(~*ak_Kd6(&e4Nh-DazoM^;<c27+C<<ewuwN`bVEkVgc -ukCjxx~yS^nchS<%1oqG>6T!n2n6YK1gK5n_wy*$U0rQQ_E3*>mjcKTfjyU?hxDFg$hF_)0!RI%|j$X -RxC)i+hbNWr#&=k;^sSDD9_gv1cyR9gb}*QH;9~Rr65NZ$64=;nnLSRD6m8dwA>9SsbDcP>30s0gF$0 -X8pGVnkAM$54LM&h<Q#hEH;rwm^cV5p$XzsyRajq30wdgC(sBQvRC8Mrb*G0pIP;7QqN*bRnp9Iltxc -*3}Yugxos#j1?0I;D{$k7A`|HTtmm4^jzae8v=_(t6rv2Qh&rd4-6$Kcc5rU>HFy~dy#`C_@O~*{mWh -SN!ZLrl%O@qo1ViLl!)94r;e?T0j_=q8+-yS#gh${*mx#RJ@M@P1!?VD(Dp=i=?OMEd``QtW6GO{K6R -+cXe$Mgy?3LY$)C-Rc+Noy!V7Nig2|i6^7g<|&+gR{U(_rUfuW>9sX*Op^6e2vHJcX?f)rr1I3@&4iZ -t;h6sn2w|y+MfEUb?0volA*_qemBV74Aw*x*;b#RIXaRF6rrUW{T849aR;t`Y?)R(lX_(c>$lG?rI<M -N9Gs3(}%i)OE<S5qilCL43o;~#|SxDB5sp1H75Gr-E-bV#Q5WhKIyCsIu)`}(wMIu7VoRkB*emYH8%; -!XIqLjuVwy@k>q=Maecl$XS225^DP&0m2k=uiC}aZVhX9DR_$cpm~}}AM>f;IlPq713wWehTn0~SEQ} -(z9u0AM)VT|LT%L`s3Hqh92yqrGu*P<+aqwH`%y2o*%o5ZKOanbnO=avcSe&g>vtG~4X=ZgUEAM$($j -k_H5crNImOb#`C1H{4@tTSZ3M=TE+TV-eVo5t;hor}6cjd=+FzUpnnD%^c%+o%s_}yWKrVEl=u`ctWw -i-#{;vsfOx9!kc*W92=yjgieQFs(Za)vWpWqyG1IWqQ<B-<5{i4aEXX{FoFWSZPnGvnAb93f>K?J&ug -HLX+AM0jwB-iJ9I<SVn!RmE4^tV;Qsn(8COhN9COV|+`A+g>iqgd^wM^ZE21)NWFfPD0S#ION;B#_vz -bdsZ=bEj+tjxl?_%gBTKacb-ry6Fc)5ig=8dn0MTnU1q=;tlVlGNnGrfvFx?cl2OX^L&Bf&^T{wTVHR -p4wAJkNrf`FF5>zak6h6mXzd9Fd@uKcd{tajU`Omj4P1J=yZfMX?s3l(e_R;nKxF!HMlD03>A`1GVxq -f3GecrT1KYjZT02cIr0yz4yGeDwo9RHDgZ(8%m)Bn44{Z?F~roH{+TR44dlk^|o{-Y}DqVK*{MG*euK -iB^e{pUA?VVG|}&bME>B=Ik(`2WM@eW31-M~`h%7mxbeYx+|XJ=$c!-yvy#0b>RyVUj^{_$%;Dk_A<< -7kpyqhDsK&OaOQREF(54wZL%*U<=<+0GHt}!IywH7`%bW1-${PGSmx#iA|7fFlLz}3KuX0s7}SpAClO -h@iHZb{04l<coV(ONC74QFNg`27s8t`T|k|nH!uKiKo!zWf^I^36GY3hm$T9v3P3Zw;4&O7@EtOnh+b -Gkj4q9UC{Wa2fv>o`0Pub8KEPKz$j4+Q{JgQe_7#EWdO@@`PFXf5k<Ya~WV!?#U7b1RiHCnSo`%4#-o -e$@u^5Xdq6)9(6rXi?UlUc#GlDJYDS$}$z;ib!to0$fvH<#2LfNX7U*OqJe%?a2f}@G+0#_>bMfp@M_ -VR(+TRy++PVDnwl?0@S&LiHcNQ4=Wuyz1Wz76(W<EhQ;^8?X$<*)tpD!Q6C$giu5cQ$V!fO+HWz=6z6 -!Pz7fKASYbz;_>zZ;6w3F`oKtkGdtjA-=_8(5q1p5zSHqO_5>EG)6IdhxoCVe!6}^Vl@GOyMa$*xkDH -PF!raV?P1-p5&Cs@MXnwm%1jZDXWq5UqS~qV1>1yj)q_>e3b<E*KPZo#B~}`*z0a&gJ6XFaf(VvfX1{ -z(ne{ff@&$1QEar_v0q%1DwWEPLQ!H0?;OaT}dk71Ti_c~gV(Km4mf22FMqS8m%Y(!zmtP+m@g0n4b~ -(;xyB9FEHnP8)JGpz@FA5tuQf=I!9Xy!B*zYWl>a%T7`BaP>8aEqV-i&&0?HD9^Yy(gC4}1BB(Bj-2w -#Wn9cI!&zj0EaD`F1&@_$>E(b}jOPKD9TSE!iytS35c8`Fbwc0m-o>b|S1CG3p%Dr#3fFa^*bEkXCWS -F)Bzun=k7<ik~70E$q@?M|?AQ^~Imo@|Ai%WtYeIN!d+4hx*rtjo%p@sT~VCTeExJ?~gm<NbE_|=z3F -`GkbEpmg#C!6CNjz!_HyKtO#CmvfN^Ct8=g1<XXmOdkt+HKTfWVGbA*7$?d}7BDUlMYhVdAQ04VXOs% -W$@S{QK7)sYOt$B*8)&?fHNW^X-+)x02V7UfXM&q64ZVmcHF2Fkg?!Gq)3;8r*YvCCjYXdR}2+7RGOJ -8Vf;G&cnwv(JV*p%6!FVu%oT(q>#Rkm~=XZ9;HE&x8svBD#SE=Uk+huEsmPcjK&y<#FCJZ2P^uXh^ul -s$aq`h`UrT$ihKTSwR9WUcXMonqi&eKwFy2W*xfyj2_YXazHLL_C<>HY-KZsLRS}pK>cO(SYT&a6zJO -+tpN^-^42EJd5;FXg(unkza)zTLt;vd7vCj;&G6`?vprQ%Sh7B7g(IE18UP$Of$nhtSYk=dh;p_4iQ3 -+HGQGb%%7e+OGQRu@6zC5CQ<o5C+?7%_j`7|4Fr)zCQ)1Z`H}C&d&2RddfYiZwSq#=*z-!ix+Lwn=C? -Avis<CTBv)P1BoE6eUcqMdCh$ZWWh$?CXcC5SrbteB9M)nBr4kv$kIFAKht6i(^d0f<6Amt@`l4<CK= -M<VwAO;5Z?g69!!ZEg-w*%73I4qqK4AN|qkn{H3?m4fM5wP&8sHmHmJGfL2%uOu2(_SM3?TI-W|?q-H -2}K+f&&2E_?IXR&@l#J55~b8BH57SCXF@(wn>vky8;ZS=?xlfD0&lz8<buqj)Fz{QuuFB8Ud$EHw3i_ -0Lqgaid-N%2sa42A>j=J2tcr$DGZhqr!O%c0{M$<5M~pT8ytV(HnEA~4IXY7Y&kKI%b+I-P8|NVM4lI -ky!u3GHe=a`^%Y73-Dz|q|0WY<aa2{vw8RsT7$2~$8nx7c?Ysxuc%_-zC>kGH^Cl#&T1C|xVreI3R9H -`d-UMgG1F;DQE;2;5of%kF_-ECA!wc>uQZ)`g3)Z53ZJ>fhTo=4ilbSOmSPJsisLZ-mE{&smc~kHo0{ -&#%Pw~PU9|E4Yf&ShCV0M`a@-5NQ!2NlLx7|-?7l7L3-!2cJnE&JD0hlMe+L<8d4Pf7tyZ~+{xVB%mG -VXmVJF?4hqv2oM+D;Q6)2@YT0XdVrKh>>6ApEt!lfudN@`xjk!)~erUti_t1O<2A>Cq{B%=NDD1`;mx -=0why7E*kSHBKF8Umr@$XwijE$cI-TL3X`HtIRZZsX1%6;&Q^O%lN2meb?BU){ukSs$Q~#>YEqc-2^| -5v%{>blQ^w;nQ_MG$R9^;zvH?`fX7#`(cUm*xO9(HYD`g8L}t&9_tOJ9*TSm5d(wJu#T-)dh*WyDd_- ->UF)P_8a}E_b84eQp7;Kg#l3XCt_4C{Z;S6|$KS6QCV0MYklh1Y!3#+D+ZXKU=S@TlF5#?=&Jd!%ZkN -k3LE6luT6w=7Tc1#om9oAC<T`KsV-($Vh$E$oPd4N7F8-R^b)W)sxLZ$=9d7^Z1W7pz&6S-*Zu~8f$k -dyh2K%9t;?+i2+-?X%%vEBl4;49PK%qAv$e1kUtf|)4)XbFLY*Z2Hp3SkXi5+w9M$c!0?iqz;RWld3) -vj>JjEoL7_BTgEIv>JllsYVlvK_MnDErrSqeyF^gZsyS*7CpB)6?y9LEhY^DM<b6?Q$18R#C13C^wmN -0FwtK3n43MJOF5sqQG%(KK+ajL02Ms0pMI2U9Fd2av_7v^zA0Y>n&tare$wYsM1t~}<i)z-TNn~=SFC -{n4Vj+_<D*F*6-mld%1tEzr#AOtij1M#1s;WzM83l2L71)+Ny$_?*-Ab`Ww$TzXQ0;?g}>vthb5&UCd -5h)9!5LkW3_D!ZAP!Yu}0PknRp$uHTjV{hh5xT`x9g`3cl}!RThs^kb{l<GCS)-!fgSFs^b3c&GqeHm -B{b5)!&HFPxbl#d{eH`KYpV>zZKoP`fLDyNaA-1nzYF^N?yVfg<<mBPg8xZi2pCH<`)6{rz`mpR1t*4 -NfM^fFU2naApocmwn^f})Evi)jTeR&gDn;>24^5yk#y0tSo%9y4Y7Aw8B#A(F}4_bX?z2tn-~CJ^pc+ -V29Fm-3_g&c8?%6G%KQdash7nVpec@RaB%i;6Oo%3plQ6=wTW;8C(BWws8MPGY6_e$-Xz4*2p}1ZUGz -Kn{4z?T;ezTwJ_F%RCmTHaOYvJSmS?Q~gjLh+4d*xFw-bKGE68!Qr*vWM55N-aPaW4OBG7FU{#+E|hi -=ujKMP{$yCT-I;0%6T;sQWx1V2D-IpwD)1_0)RV*muxciZ3sf-dwX@)Ur#-VY*g%ub;5{v!4o-+iEB` -TaQeVNkB1MFIa#0KbDdssZ7v&)_5%4c4j#v?-r$kZ!#i$1G%jwslvIrJ3F+u^&Ph`7VTcP7Q1Ap#dTQ ->Ek>1m^q+@qlf>q1RV^7vw#SmKZP(@owsOLo-2S#0nEVlE1-(OLHoIV7c$G;mWr2^0H|md{lQ4^`OWM -twtb17#X6vV@9=5s2lN7v9slN`68M{WD58YKGT;hz1t->b1_Avgh1ds9U+Vm-^ZQ-RC>UXC2PcxKPA5 -cLY9RfAb?aNhT}Tn%9cN4w{d!-*iQI~T)rID$x=N>A*P7SOEc3uJtXnCHnNXqX?sh2-;roh>tW=ud=u -l0!X5@E{m!CtExgsz>tg~`ZTZ>98{b6JhyXL*S$R5U#zrfy{4h*yd8ebvo^Imk5ElL0u2y18cvO4WjN -rB_&JRlF^Ny1E>ORyIRF1g!X!tG_}2`lw1D^MGf^o4w$s`7ESJ**UG(I-VhzcP=mLtAGMDm#j9WO7{@ -*cpy9z2+WBSMcj@B#Na~dryZ=1_$}LVdOH{L{zj}Fa+OFV)o!&8(0~=X)i2j3Gm2Gw3{b6mXAlP -t>cA`7TK|&hZQrc#tf&fX0c9-xdRTsb-tV07`s_V5OTn}Yi)gbkxfeEl4L)h2EU<3InGIAP%<FCETbY -)~{@r>qFn~z>#Dvz{Q~9B;0~K5<d8%z(*yeRm(rLUm)(;UHTzFwY@0`?UI9Oyk4oL32Q=Cf#UYG{nUs -ynDPR6h9orTjt@1({;1b#$DE!*`1;jIc&VD0Sg(EfDoC#yd_QHFO{h#APIQR9!vG$?L!Ju^LYKz8%4A -FhaU(!8~IoF<Pe9j;>}+Qx4>JaUIb6K)1hnc35vN2NUJk)3oC*Q%ud2q3`1tu@B2&QD1{nU7g=RBCdp -U?5PZMIQmGQa3s=g-fECrf^@k6e<{3{Zx>5>NZ`E5aSvVUt;F4yLZ>AHP#rjMz7etOW;wBWD&hsCl@O -O=P^Zkr`34AMSZx8%lkuHt%fy}JV@zukB#ieU(e#*-dD6#ThEh`2zoCckF0$lugWpHpe#ircevj^9%% -M34%_pPnMe)6Lwt^eU>??E(_&(kJDs)8iM87r^xq~mEX)3Y*>BeBB1$?y9r&hh;%0F`e{GZh7l(e(h4 -*92=+6=DFS;A~iWvZirkD+kFN!t^7b*ZWD^ROA^)f?8i;7(w)ge&FKu~`zxRGTjiY?w@GG0VG;2U(hi -J1*bY)E_)0TO^Le}GyBM?p(WF9ZVr9WwxmKLCH=O&TtIg-R9%fFX+|fC49D77sL@EX!L2H?<HKB3<m@ -3#|zjLqF&M1U}#di%mRPtO!Z4A(;&W`s07e478V7{QkiVIQDC?P5mOax5h;bA&q;Z31D|RnLvdufE5* --?g3m5WB_imGyUM?-3n}M0c~9a;4d|^86o){HU&-+LKGQ%nO+>bKU!{qT%g~;eH=Zo81BQOz2G^toKc -aMh6TW!`5nw*O%O-zrO?@zG6!IegN<!oet<AX4o)*Bv$%(TWI86S{NNqWG_i~UACX}HtYnre0qD)E2m -_aR5si08rwDQ5xV2HK^J``T%MCOxd%GvuXc{Qfhp0I$PVFBJ_KNkkt%7}9gXG1wc={QK{S#+_f1`m5E -^YpE6%YN4!329v%?F;`(ERz-P5X2h%23J1ARbTcO6FDvg58re*~hlhxS9brGp-k;h~Mj{6JmSxgobr4 -^T_c&!DBh@pOf`ypHe`<j@q2~PA9vIp5gsnbyBTxkH-YUwDpkTL2*&d;}yM3waUpkpKjxJeVGNjD-e9 -^%Pv2P#due@gy%D;BJoWb#dV+bIOJuzODjzvu9|1_B(pk&ac1zYT9psn+G!uh&fbwLuszPMhcNR+Z=^ -cN@VnNX6Tvs3_E0CxHX|<)eMD`rYp_$hC+GtkQ^S?0RQiOa?bg&~qCiagT<zj5QF529cbirj9o0}WlR -Gs^S<J_3-OUU|MUSXXoksi=2@cil>GBhUM*zXYFJK2XoVZhF(xr{G!|(Ks!gp25u;XoS{6?+QKdO5PJ -c%#&_?Wzbc*<>!F}kpLBLtbQcvG-7;YetPJ*rP34;b|8ePJ%%Y55Ef(DHKp?8$JxKSUF8iRy9G?=0L1 -fKSUg9B)~2KQT-DLOFYAc~sxII)GW}=O@zn{*vu$u!1kt1N7mO=cSNl2R<Z^t8&%*)U!OXbGa6usmHq -7RQK&@pWIB0AD5b{u#U}`3~3MpybE+~W!nqU@)gyt=vXqjVU5vZd)Zn@3l}acr6`Yab~`h}mLKR75i0 -?@KO^m|?`O#D;o<q<?jx<i?DS-+9tp;byz;jz$9a!d;Men6Xpf-~JG_@BHq3SIVNLh<z6vu7g}}woxY -Rh$8|BkZrD(iVvFO~9CuyeCPG}MqYXjDil{NXu_J`Xv-9%37kb|wL_pX2{RKQD#fRWuUuqkZ1yO*q~D -IP(mXEUynVbwPT5>D-~zwG9W<UJV)@bh^nu>SbGV^CKg3kDG3tT*qhC>gX>3s>TN({F(nX8(du-gq=l -5Cd`k5eS9?X#H&b8kGO;m=84mWB;FU7^Ru7pqO}hk*RQz=PA8dlapwP+)7@6OrlE*fH(qQlsg)J3B^& -c!GZ-fqja%O1D%eMi_IAa0FN%B8GV_*X?Ouha5ez;47LdCl==-6)5L<q@ynkL;1`Ss@;szADZpD|Stk -}ROIp-7yu_kKuR}Po2=?^F1Sski)rKvO>@-;n5kSI6_yWZ=`BzXZ^~*+2eA>Qw&M3bO2{Wyq1-enfPw -1zRFiAo}#LxXjPyPTqKSh33KlG8lhlgc=`Y(RqQNJu<U&iww06Fj$`32DPvu)O9J<vq^Qw>A!p<nthp -<ia~GOp*Ew`k(Dz(sD0;{PSW>(vK(@AMf4wkZBAQ+^lW#lJ;(DNBSG*md{-lC>KUh%nHhw6OEqQNXuK -TaJDXfc;8#H&Z#!dtC0doHWdKb;%1a*bc;M%Vp$QeP)m}HDs)4v$jQYhuiL{V91DmSEPf}hR*`yv#wt -!<%$|xxqAvXOjBiPoyY6I3f2UnLhfy@wUt*^L$rQWUAx^j$k_YW^}VlcrSEq#+fq!NjdWrS3XGPizFz -5_DblAX#zGEi+lUVuiM-pcfM@6W;Vhw7$?>$6F3Mv(`$pmv<&a)zKj0tkh$BoAEWW~HEs?NwgI26L(~ -s-wtQHz`J`4e6uIAW`*rL}Ci9A)l-5X7MM#6((P;n=&w+WVp;z}vk@cE2DWp^+U@2<eA&|xx`6p>m*e -y|seBXiv|p>&^4=&D^M=cy;jH70dKIG^m6FxOOlTNjWWjifz36(S><DKt^8+Sj6akfItqMh8~Zi!PIm -eG~7ZwC^g{A2>vfpV!eKa!)B{=-A86dUp)Ap<s3=-Ns-O4HJYzHF;86-`eUlvW=%ao|-4YV+fI)!|5Q -b2~Rll=plpF^C1_grjyL`y`qk%rgc|zGr8ORe%!iK=~)SpU$q&GbgzZZWOq}`l3fmmx9gd(w@@=hCY5 -_eLOrEZIZd3t17F*j5v1+GmK#M&YZJ|;qb~u;J>U0=z&tK)#2or?l{yavnjDIn<!w~VItIhWq#ISisf -r6OK2hP6I!xQk>d?jR`0mNZ<xx|>lle{xpbu8?K??XcQgHla4?l&@89^@Z=#x0ks$tnwFQ5=h8@}1gb -}(~~4+ZbfT$O#%`Li!6sW<Z7|TUJIuej!9c(6FrOPt^V_Wr@L90+3HVMb(G=pUN7G)Vct6^Mzw#{8 -JBm7Z*hb#dgwWag5{CENy=vZVLFQwpIOk0KxVyT-o)vw*LfN{|*KC5L6{GL#WXg}2ZyukRt!(RbZ>fU -OPxd-TxiRKU!UMXR=hd6;T#k6L1<x&%O6#lI9x?64d$w+1k#k1NLc$rsAyz}yt4&-x7Y@5!Vq8NM!`< -O)&!eWG-461W*g>v)++70IMS^G;Brl!kD~Au=?#|g=Y9pja`&|VaG+eKRQy%SBs&H~h#kT{yui!19=J -4uf>v!Ygn=)=uV|9eVZMq<bRnFp}`Ec?kn`OqkB=E!Z)-LI5Yl0FxY;IkpnIkCQcSXnuIH7q2X`Ga!b -|6W_Aw!S%)uYp~>3~-hZ@a630jqe%Xr}9~acTFt(-=n+vTVi2jyd8w!DSWXYLXU%(3WPiov`2m!|>j# -y-OD4<BXF>_yH5#nj^&fHuhI%#TB4BWN}_t-_Apca4SpoYT}%du~DT7IjKW^xhvc=_Ui$wa(W&kJgoV -%gl6OF>Yetm4>h@H%Pu+PdEXq%43nDzJNtfe)zU#l6$QVE{#oBYl^7)@c*j?m%-OSiyRLo4YnchcgM+ -n=rkz?f>OmI{$cVC1YvMQSzO@u|cZ(glS}UEnuW5(hv#i7241$8Y2h*<(a{$rF;Yl$o^MV+6emZk%ei -iMUmHgP{#Y4+$5&Zb~X&Lr!(6Zl*`7JHOexhYKMSmH!54a1l!CnlE!I$U*5?g}p0>HCg!FhPHL<f-RV -q}QYFKHQ)F1`>1e=#C@F{LoXVzdCXDo7R&N(67hWSI}JH}n;+PZ5jVg(iL%l0d&qD$#~Y7ve>{C}Z%N -F$tGOuo#$H{z*`asRgVMqc%jaL{;GN;zyydg}0I6;%ix^N;Zof2U!kb#9z@e`D*bzr?}r~S>*lSpk?z -fwCqL2^q*;&#iF`k{*Ti#?O&i}f(ALT;yUVF*ZR@25^6<7Novg1&JT}`)MPL^B7S+cj%AyP#t!CBv)m -2}Y6g0i33<aocz&a-JdW|^jva|In3F!g(`t3gS6EM>*kwI4kwWhqIa#rR>d)A=7N!baQ<9t5b_;C@f^ --hWWoJ3fjg^i9X*~259S*C*QQYOz9m&rGa*`+QI=f8Mp%r=vFVp4Nw^a5x#}His5@6{=aS0DFrytf7v -l9eUyLDPVIIQR-kLQEHDAOcLDJC4&8~M0B?;DHZgK!+6!OaD!3e?>t&dU_7+mZtE)T}BY-j`W8aJrye -l}pHD53Z#|X4je3;aZ?nKe1iBx1ib|NviIHfI8?sAa+-62aur~q*hJ>p_4<BV6N*+LTTgeMidv-)&^= -VrRqagtTa!cuupwS#(fQ~uLu03mb7U(<{`JwIlJ0l)aF4@k4oh;0=Fr{Ik{Ek-iVaGTJ&xgUn0mN#Dh -r9NflUWLDZ{O?dIaJLb8Ac+*q}yW4NVmk=<zyok)9y)`&-p^5X4L-s3{(A(s`;ntHs+&5%Xt(GPAr`( -%@FYu}~kPAjzIs8ViLL}Z`{lAXKSIX~R!I~KKhc@TUkBKt1eUm6}gS&cera=Mz~Z0^caur1m{fuH%~o -^7kyMH)L9g5&6{iy5#_<k_w(hK2BAuk?Gfw3vWQ?QC_IOAVnOauikbL!hba$=Ra=!;+u0OyR1<1?Gz{ --wO0c=L*l^Z}A)%r)+&q*}CAz;<B>kGErnh!ed$RzC`wz`I-#zi>Goi)Qk!b2%juBvS7Fbp=_PmKXHR -!aB%S2AHEwoUp7t|FrTXqL&4cZz^ghdvUKrKXN={=E@@{W>SeK<SBmr-)-}CZ7@;3bj7Eq)Zyr`=`{@ -fepu|m{tHX=+NRf1SSw-kN4=CpGac_9aZuAy!%ofm5S8+ehNiXkabasZgmdfC)U*EEK-b_q;R3D*eX7 -}&jt546>PeC!@OB4YWGiHjS3g)WaJmjoD@Clq&lkry=Z>)^wRg+!z&pJ1DU79l|{bIZ3A<Ghdjf*}4# -S9xP*Lf{h`_c3qe%QC!r*`_W5A>NQbz*0**GbPm#00-5sAM8*k!ZFTXL3BM1B3d`ebQivdPFz0)5E^y -1vC~6KsYHH<*x?>$?Pd9>b0jRMSC4cZX*1#3@-As+%{JfH_YOc)KH8xI6|$ue3&0+??7{1XvS!F3{S> -z!fxGdOx)>l5U(Vv6i>938YJ{{umudKeWveYXth_-aXsQ9*=Sg)-gYQ89}f>!Wd`I{8u}HvIj%7{f}< -)=@Vd~&ihU-{WDEAGnkcX<r|YMJ=jK6OPk!a2#K@Qx>6`=+QElHwkKw8~jia&k0^i!TbCk;#acI$+xi -{w^)}fxj`Sz-@lipm|)rBDQ3idMIo+c$5Zl|jox_r=*esaFw=&~v8A%@rC?LgeKn61etBzT-S29%}Da -r(d=dPgV^a!XbPxXpM-U&9HB@7Kq6owf04Jsp@+ScX@Q4==|~^9c$n>1{c=WpIqR)+*GVy7!(Hg@zG{ -Em_j19HCk>&O64>c$gGC$7|%;tczxwnwm;>(7ZiAvb8&Um+LW<(!$brCO;C$j(Y^d8V-#0b{DTZ>VnF -6aLQaGGn0sKA|)=4cnDu0cS2x8-TU6N)FTGD4YIl&4jjCr_H7yxoJ^frvvYH$>r<-}o3h8fM{nPE`_3 -$$3BU!l$|`BR%t&*s5PT2houxl<DzL)#?i2ZTG3Ylyom`DoGL|KpNtj6+)NGx!Iz8_o{N&^srTX$peI -Rpu?lbfz_RZfkGamkV68VGn&H6E8=9Rg!#1HXJT|cfL(L4(m<yquMYWwdE|6sX)((#vknJ+_y(pQEIp -txkP@Iyc&Lt^p1rLXYSgjzyv7S~<8A(IXMb&@JZE*3vDTu5)qED5AcvKSBXX!)=t;Lsa5U7~%6m!lA{ -*Cp^5{k;_uoR>&mNiy-0B@2eZ$zmP_YY6ehoC(7Vp$+gQfGNTjCXBqSn}G3R%mzglN)026PY^I~z~OP -ggqekT0|HF`WvGzgE)KzR_uV1*Wtb3W{IaR;Y(exOjq^S>)uRnNf(65w^Fzvqc8W&zBMSFPSiY+xuQ- -zvxA^~hD0Yb-5NLrfQ!p%X+~$$40pfYEv{4g`C1-?im$u8#ZIFBUdTD=mWzg@I_Pdq+nu7}cJ_(hdyE -U<fQS?bYecB;yEj$OiJ^Wbv$6lkFcBH3@hM08y*gb?B8Qwyl-vxC|cZb5i*@o+@{p@Vz+w*z5G20s!r -}8Xc<oJ5JP<RxwzDkxVB<uobfFGK0yg9WncqG5ePnd`&!E`R`dM?h?9S9n^=1y+TsJY%gdld;1XGO82 -6f%(3txD9Rc!f#y`|;?hU?8z&ac1w4y$Vy+<O>Zc(<i5zEM6P)QSz9QTy5pt_3vvPG8|0lVEFFXLAzy -|1TR?zr4i=g@7Sx5#)9gX*LVaQ^=Xfx+eGrslN4}_-BtTLzg3}UyX`0X;CQ-tq<8(e(${<IOm)a`Z_y -B0JI7r`o&mVUKC1Hh{E>rtoLOeEjX~dyW2Y>FYd_E@$wkkXdddceSTPzkZcoA=iO5F?4fIP4&DZd5h- -@J8xBGr5Ed(LD(M2Rm&&1UrLuG|!aID|g!(&yW==wQ2y$jHBd*m^+F+H|Ek|!=4EYjXH@ZF;?t3)P|Z -GavRyqLC-ePQtHj?vrU;#l-5sQJb)tm^dCF~1(Ep&aE$S5Uh^R7#_s#%^v_b8-z%n&C{VD*<ui>ST-c -4zuL*nZDk1vY}kpJy*hB?Ff2xs8#Q2*S(h!&zrTo@998|OPv*;`t=y7Hl&)up0?TvP22F~1k`OHuZDF -Na3#+t@3O^a&roi;Pqy4{g?Mg+lAV=CMPsk}?YZe8^ORPaCM9&=SkvV2w(o$)=-DaJ6E+@*wVn_A%g6 -wX^M;uWAJdsFq&>zA^|)upf5F#vHiP>1?X7~rpM<l%b^FAP&j1qT8hr$}K3mYGd++g&sHuN3#r)5n=> -yt+J`4MY%n}5q5SV6QnualwKnR#28I+-61jSJdqi_O7aEACg@dVkxZ*DSd$p%5-#ZCi21po{aFJKkFA -d5kl_>vg;IzpCSAciJ4Zvin(w0sVT4UQ}UHc`4Hj{-<du>}YTbn&7k#FFG0k-vexC|N)^2CxY)i7NoH -z%rI-TL5yzg0V5W<f4L!u(#w>bcu?kqs0S=zOq6i_~og4IRxQ&$$X_>`7i**1N5)sV3r_?XYm1hhOL? -%#a-@*|I`sb9b#{lwO_`@@Enx=lH##M%x*7i^ckahenrIMQ7!e+R<AtFd4-<tYoO{Zv4k}KGubqBB{d -JvY-Xd*B|g6;Ali#tA4owTh>s=cRXf4sZhSY?Or{3}37DDZ-b*Enf0fbrj;F>`vw*g-q9>#aEc^o0*& -bhwf<5cANB}y({hiB${_Ohx&gDUWc71>6@}M8D@9$TJ;60Ti87VxG5Jo53?UbMgw!hJof4KAGLot!a) -am?u#xL=aNYd8a^<>a*Nh;&=u&9y2_c60Qd;AgF`KT;2btL$CALnf29?YuSGP`<Pr?{p)(}rz(Z)Odl -GxJ{9H;spSJIm1&wMSjbfP^P_5{WpqP${4f7EuPnb!$CnQUhXQg5mU_DxNtVXjBqsd6k{+wcUwWK#(P -zTooL;i(Boe8fKad%B`8Oyc>4fJorZ|*{`r>l^63hVxpZxKFj)fZ5fspdF9@*&&c<WW&o+Dov!oK#MD -_V)|ge~xQ%wF<L#kb^4KAT5V_-rD|j~&%E<fcy*T%#r{!yHtEReBK*yn-o+r#&$7c0`%9&4(nLm!==& -3KW0W0(R)8IMQOE{JjSW*1+a6xY_F8L1uG9Rw6pG*ase{3$W?BRxb)rf*%PaSk|CWH*VP!nF1FW!#Ep -z+{=BH3HRC$j4P9Q%@NmnV{&KNugByhqfyB2eb1x4;>Z{c-6w_r@2*FTGgMD-uf;or9rqGMZASd?xss -3!C_+SLmKlCGCpfYH8ir#|W3<j%cIxF30`({M@Fj2@PSa;7<V+VtNgCHF~ey^0aSwlp*|m?t}*dc2he -&>#JL8oxPLZb}2&294C5NGd+9g?&Dl~p>K1>Ti6;?%j-cc+*3kKL%CJO4sNf9G$IDgzgk2~owhe&<V} -+}^M}@o_W`7sj9#DX7?0@d^~r}@CDS|QRvMO!3-x5EyHj}H%Ew3BueRI}1`T^u!uf`h0cIRe6I77(lQ -^sbxo4Tczdr7Kalx%=ruT|@)fn11gfRi@Ow(s%AJjU1If1R#FmNMec+W7P!-^8Eqt&U{lOL}poi&X*g -@&Mp<KGsiR-Sy5n{Pr8$I~~tZ63GpnJk~}d=+%vH}rR4{<B{FZ<_J5=F%UA{IzankR=urCYO-YAY4E) -eZd_<EkQG3xU_@MXt3n0kkpp|4rDGvz5;K^MMokpJO`LcfpO%LpAx*1QNcecc+rmZ%lDEbpD8nc1aRz -ix^T($Tv9)iCENz^3ld*6HJ|}N#sV2kMN4i?6fGhb%!{WBL<30-;5~k2+W;kt5ld(K<*8X5H%rRuUjq -0m3i46>m2SQKA`TsU7IWw$#uNaQ=PXuKF&-4r%zfD;z~?E%obh`)hdAy(vN@)F8%~_KI7!NvQk11Rn% -L<V`|a<NPGGP{O$STFpyk6`psM!S_}(^p^B?i|dkAS`$&%SX{)u}n<$WdFsAiDpdydRg<LQrtn#M%w% -#@|l2iR+%&pg7k4AP3flMC{P#Q2XmRQ){;HG7Lg)yWuH-OjRD=k97apW#9#TPj|!tigZIu<sVLgUQ+X -noyMAtK^wyp`+t@-k1;Qu-9OLS+kW<IGo^h&DI{bHgm$(+nCl?$*v1n%Fcp`x$mg0RBS2n@gzrRjB`m -vS9cw`VEGiDQJ}Q$W`b=o1-0(p`G~q+*?0G_LW^~C$#{lX6CUi~$*@24=K>P%inWi6LyOR-W56n$QK0 -9YQyo}Ss!j6Z$sGK&<tnO`(Ch3pMCib1ao%=a@Mdcs6bw(CB`ZC}1z~mXgY`~gZ(8F^1366xCW%Ju5m -RWuTx)OGi(8*m93e(CSM$YWY*vt0<msanw>EM)if0^;wKKk^oLi}^#Q1PO%jA*(dbnf}ATc5QGaBl95 -$g1viHM^ag?c{CXuj^zCg`n;rpWq7AV}ufW9IGHWx%ifp^pKLo0Puw^$YW7?+f&IUYI|7U!bpE81PWB -8auu-g70kL_xLNQdz#wsj<+o>c0tbJ(;+6=naj<n<ZzD}i~49Z{>n>O(Isw#>YcSC4VSJyL5BmSZ2@u -F`bKjTwrJ9sHnI*Y&B=tOn-5<9u+8%U8Q`<3?$1t^?Ro{PZkMn?t%y28me$P5DvOHUJuYDBA$4U&cy% -&cLl7O~Reka@NiwQCO3Zl@go+RELPa^;j~8AzHU_k<Czrw_{mC+UL1K?=dN?bEJmp)3ASdCTtx#e1;| -IT=TdN4r2mm|0_O*54Kk-^Lp;&C!&hx$%Fh|*Uj2W0o#^!2X0h(;=6~j7EV#{&D?d~Rg?>gSC(PzBip -O&H#{3C_T#M7@+5p`jCcdMk=$JMYsufxHo|Gsg!58AXys`#6gMESL;nyg5=?}+*R_`d|g|DDr*8k7Gx -=C7d`pe`OPa2LMPFBV%e^QzsDydochSDI(M#6REwuD{MU4PIFvNVJ5JhVX)yNxI-I34j+{5D@?`f-k1 -t_?3$a^e;fikoc^d_{WF|e5uEj2Cr}lY_S0Yy-tx!O91{4FU1`gVo4n(h(&KF_{&E9im(WR1(Siyj?m -W?QA>CRioDWO(xqYrLH{Kb3risDko*-CH(%^574%u$C)XkyGxMnSZ@&9170IkTG=GHXbMVosil$F&Th -iG+u<Zu@G)UAt@2t;?p!{7)JVN?KA%G^H0R*FOlGqr3YP)>B^pBN8|L)R1#z6n-(!qY0{oV#`yyUL(E -_X4lyR68wTyu)s3!GG9G@(;;Cdf*(Zi0b2?t&DewL^~fmKPSiRUW(YCXgbnQq6faS1N2FyPdaA7%JNh -g3=<|aP1n2^|j=JdeLEV?ybPq7L7*bKYA=(#s0Ir`>JW$<P>gcjP?<W8!zN)G>dlKCf$vSlk}dQwhdz -uMPS3wndybnQ&0febQcyxHlWerf*X@C3|#Hh$*uEc0b56oNNYTi4i^NAC^hElSx}H5fOfcDm-%#M+hc -hg(ShIA{6p{<@-|y~c%Xx*MP?Oi*6vA{aCQzWVt4kh>b6PXtJ$&;;^LNm(i4p6(_^xB87$<<3rQs`92 -s@oa{2{F`rA;fRk2~^md!+=!MBp8Z24bp(CagmnsX1Q`Cx`lFh|H!;Dvjw5Hrt}Z|NZyPLX#2rnlL9f -9T5rq}1KyW(<TslEUxR!y0QV=`cW26+ARf=kuHm<ZTnyOc$c@%|C0O3BpSm&ksw^&RHD&pJN2*@ABE- -!87#RGD@r)AMqlFqcU&;xeL<c?8f(y^`gK+l3Q~w)m=Ye(4JC~S&I{}a|<~spDDORj@L*woV*xt!h5i -{>v1*B*h#9lbY-uud+lgHSyYjSm>>lxX&=RNZNm~y`JyerYks_2rnA1GYP>Jb7Rz>-oFmQ3OmJq8?tx -nOF&lP^XCh2{wSt}#Lf(QqZR38AIY~JUS!Ni0Lmw?F-V^Tmd?T2&jPpe6tB^t>f61kV(>h~!;Q6~j&P -nxH{&>fqs<3nVEw7`R;od6leyNn;#`UV5S7F7#)~OYlpda+PI9gYIum~jDi5}z{M^$N0$E)rnyFRJ<- -q?j{ff<}6*EvH7^=>T?X@~Q4DiOxtH=7GZRxHr?jRkFO5`R;KAIb)Q9{s^+9fP(Aw0&V2|1VGW0mXkZ -(N8vT3L$U`p%@HDP?(@8nnV$jq8OY(aF{}Hlz{0kQ$guh8DBVDQc!?Q25^cqiwQhI78^D7N&*EiyObH -mHWd0LY{SGWI`Rej@T)L!{E9k!V**Rbq+}rmak@bDG8417eR049u;0KomMmbr^m{95oGdH=r<dXr@GC -(z2^I_eQfw)Cm5M+XL<brk=w)zXnpyg!Z-t4O#c>R}Vevvi08JtO+VlI$Ke>J8pBTa+%?LB~%z-=-u0 -YFcc07EY9tvRlkAUcC+$WT4rd(YEd)Y*cHw*9gaKyd%<S^(}6k+M)zB;|ag|w3~D%nRoVlM`6e0yOb& -v6m9SnC{sla=^mq~tq}FL~_ZTly#Xd4qBB=e7%1{kUrA-&yvLtA_raW&c>p82XzQ>t4vu2SPls=e@k8 -sW@Am#nUaIB1pZRl>1;Em=jCvq&yRj1&iKGr?S-ixObmB<+KB|H|4WQkg)r)+)X<ItE{sii@U))Lbaf -vaW^NJH8stHxv!?}WY^pDItl0PYWGA_-1Bwi<RWXr<uYUtQ@yc5BEZ&mCuA#VGzZ}#9DS6hy>*ctJ2D -ZFPJfshm+QXguB$pKFuzCEa&a2rc0KkJdLuGeAq_q9amewatcliDXtc`dJU(kd@03Tqg#|Te+Q!QAZG -SM6xVCOnlZ50=zdF(^A#LL@${k-rtPMb^$cbsc4G1YZKeu=!v^)$5h}%)<RISkaZOvoPAX`^vXsk)uC -C5CKxACi#F|=5$J)jf6s%4!2Qp@<OQpOO+nG#9v21ecQvy0f<-s5_k<d{Y=MVS9kQQ;4Lp&vT`*6-Y8 -B#o{1J$=xp2)mWlevL(S=xGm=hhlg4$XCOJ#Mi`W59zGo_HJM570N|o`Sb`~V=}msTs1-h^WK=NoBO= -ht=Q++%(GG`9ZR}81h`s^*<hjbPPt;|HC^DhMBJ{bio(+jqowO9)MJuT)ZL@2sdKSPExM(tsD^YGNee -?pPtGG{4L7{ca5Y8~n$r7ch==m3HX9Nb`|8m1{rawLd!(R4!tklM8`9$w+M=DNXOWxEF@1OXJ{iQ5S@ -QxiMdDBnhl-*Ef4Vhdykd!Qoc)%z1k-!~a+!KhHi1?R9I7tTT}T)64EYJ)wYo96=QY5JaeWnPN5*zzq -|60X+xy*hmEEL0xgY6&CCBm;s@`3-|8?;EcP9D+aQ-~W&yHgT2cXFi49zUn`(cd283Lg(lp!$yoj8GG -IQbQ5Qp_S0fplCdA-$3$v0yPG1K5k;MKmVptGrRPAQ75;t#tto(yw0u5G)ck`ACoqU+5W=OHl=&c;8e -r`uZIK%qtHR`<>r-IU~JTtCvy<_;PlNUi`x-`LZw*OOXG9q_3mls~iJZDp>ZCWg0Kt;+Mf3NMFzg!<W -D+FlR(95KJO}37YK-G(WYj!3#s?+&JEB<vey<)%CaA(^t`<0+;_!fhId{KhY=t5q&=WryudF(0if(x3 -q$fdI>*fd;ZX-$>JYsA3>UFFK)f};z!RP&$bx<en=bZEb*-{RJru=UVVrQ6r%7`5!mD-144p<%0R1^D -O&mX-3H%lIdQ+1;D!FI1}}aYa`C)R?mNqBkmPRfc1Ipdj49YvRK7n{RmVa6NzhpTaJ4QxX0K!6DVMB6 -V8!LMkMq%ISw&Rm4i7VGoz7POG#`7{?;@$gysOkO6m-o=CrwD~1k@Ya2SbvL1dyofQw663m*RJddhGN -VPO%#fl&ciT1lV@e{Qy%eDcyPq$M|*p<kxF<i{|mNOL3lduMk-WBEKcJKquW9wV799sd&m@pDBaP_pA -I~-n7(O%#8@s#TA*I=ES`AV?or|LE`R*pc__msM$W3Zr!O)w01pFLu>Ky-o8^Yr}d479M(9L#V&PmvU -P6`&FNGWk={Hx9mBdjoGkWs;K)mVx*$n^UR_G<FsL69@~Ad~C*c77p&XI-=QVgg>L#!ZVdze1Le{>o> -D{rApMy|Q3IjX#xE<exF_(=}!+v)Ds_*ZWruK+*@}`JSWw+`P@hUQ>?r5cL26X1RRGP`~)?(K}0Py=q -eBQ1Hi`ycX{X<5h<Z4}O9spx_zC=4dpY2Jh{exDXh2lQa(QrH5*67h8*f@h=^02--ol3{<0Y{GTr9P5 -JG7Wn<OuagEVVB@8sRFR<hMjIJ&`W9Eh+~x%-0u`sf{xe9E{nhelux+}=|Jl~;c;Qo9<syilAXy#_#V -CnxNWa?ZHd}6P1<aT?H?D>fvXPkPNIhxr#=zJ?$B`UZS@!=)4HL`m3vruhu@^G7?|>Ljw)vsSa~{K@O -Zvqa7_21Q9?ZUnkXJ+c#4q*geUIlv8`G0)JBE!yk+nihj&LUydl2pgfaea0OhvG@;6}@T%+Wh==?We= -6`X{Kfvd2=liL+FF{~948s(OBQOx648l+-PGK;G;TT0D;1K;~09K5@Dhwq{z8VoNLAwk5VXr7EVyPYw -5euRMe8hkI%W;U8jW&6?fiY}>UV>SWEQl8$Fdn^^{0FlF4T%7-MHWblBLH>3D^a-A?qA?Iec75LWRb` -?xkyrqS}+sHWiU(f3hcsPwH2^%p##CIGJgy&9Rl*@k*1b7WinY#4-g!omt?`e0@CN=Uc7()avX!bKO? -nn_J;ZZTlRHoORtK*;==;h{Z9dDH|{>N;U@J*Xj8!FMiHes!klTTcC@%(C8ziSroLAde10g-cmMA5m$ -oq!e#y6fRa~@K>$Bpb_#-A(4{!b<f90te@8$Jhoi0nK_rR-G<3AHvil6Sm^7&JZzGV<WrsMta3xNKG( -!pA&5$9tKt(X%<oZw!&hbiHS>nVb(Q|Lc;-O;H8^V$Gm*GbInR`Sp1KAA2I@7;D4=UT0Wsg?^J^&UR# -%-t-)RW`)Co1>i$2Wkd#^I4vWOMidVXZld)$NcD3@@l1>J9I8i_!w5aDr(S^&p9U@_HI);>2=%aA)`l -G$qbhUx1}D_%!l65QEB@3Yb(R7BsF4BH5Q48yBa_Sq?APEc?oAYe4RLxisjYLVeAJ{!I3>ZSG5KQTpp -Cc_Go|`Vx4!=6Gm>d6ZeUK5HTp9IhQ-wX3v9dbC8IGR}^e6(JBgL$3DjCuG!s%qUCFgA5cH8Jd0~ic9 -J7-V6$BYiQSWXp!nXl3j9QW6#mmMfPH;YN9d1XQqY%iQhRYVqNT9fGg~%3d1~G$?1Q=Z{2;vha${vQJ -dF!j=ubO;QI7Ae8Xp_US#ZYmB!aH<r1+VqIMX&%>=fVC$$fZcQ(Ur!L(4lFYkkpm4|;k})}o7C`%2U7 -2VN$*uvf?#N;E3O5uJ$Quu^=3Lo0V%7iP&cw|dseNT<<8-%Gc8Ix5#|R_riNz!7JwxuQ=Y7YWKw%t1Q -_nPz&I>5vw_>CF>G2QtYrEA5sP^Z!TOdvvRcx8I_DK1DU}8Qyawhqp%#5+p0*bjV0h6b0eaUw-VoYwg -;*-hboPs9NPhq6?YNe8QZver7M4Zcp+_I$-Z(bLdPlI1#ivUMCbfFBir+ID3LWKls5t#WvR0md=V&j? -c>3ZGzM6%GdMA-}rE1M1*JG=-wq$KFS)I&!JHqPQ1H==Qkn5Mx$u7;+~GhT}|4X*iZCT-{pIiOFQ&vQ -euAB-0XT2iiK4*CNT3J+F8v@Bu$Lun8P2VtUFzXVRLYkZ=jON{`J5Al7WQJw>Mb%ClvkDZN3&tKV1I@ -j)~!*+n*pvgoa6mK~Va`>M4o?Xvvr@J&J%{;uTSfcvG#<HYvRV%zCF8fH(&GSdotgaEZ|?P;Sk^Flb& -{{{`r??tVi-Akjl?l(PUMH9$d^0^IHwMl~oPpDUQHj51-sG!PsEJs~XLWcp~3dR<|ArIy&1<W1vk@H_ -^^R8TRcx8f}hI-S7l&7=-U^ARB1%=~uVTzY{49P;Y`j>hUwRuPZLso6~*ef>U|_BPd@XqlIx?UEv&Ox -|oi{Z2u4Wn8U^#V2#|(e?@@mz5==TltYwdAM{I^;<?&0P6PTVh9HEDWm$+vYL~AhGM}LeuQEl%lZ{|J -{iG@l43ZYA5|M&jXdc4Q*}^gt3%l?`&7krUOylHm;Ni|#{GC`BY&mHK6c)#xDAa^X|H?0KBdN{nqEui -N0n8Y#*6cvj)I)G1>&R`h<%y;`xD*M5Jj%f1&&@3<>s|Fx)yimTgdXYL#J|&+x3BZG418K57Jqmg0v7 -itrZxU32yy@-iaNQBzI0x2)^c71ocg`I^IPTQ3ra$ui5l`jBjyFua`o9mOG*<vGCH*yR5%7+98;$T?& -zjK_BRGVI6B94twrt_bVQvNEbTZ>%fNty1!`G+^H?@BC?0VWOoe`sf(YHyE?gxP~Ne0{CpLM-I8OaxK -A3a_0>dw9#)Dc3ew!(4fLr#ibMSZ)*$@-X7w2@`Hw7k&sqi<-Tl<A(F;mnliZ7_%IgpB;GpeX?|MDu> -*+9oatPkBJ38#en}<2^W9B9X`HAC)><Jk{ZXaH5E(vBXRqI}Z7cwud){Jtd-F6knc=B+qY;>9o9-H)9 -R8Ft_n$>EJ-C%TvjA1!T%)@-rM0d?R<}~h@cES5B&vrekogcFg_r9VWlgadr+Zs#JYFO=p6ss;H$;^- ->H&&nff^fZ9+NI)YHr3A;){d4nbhtOd!rFM=C8MfZNG<kZ-HYsACDQUqsyE|!fmWW*)HzLK;R!y)Z-< -&)_HpmS7Tpt%6BeJn-8oz4wn@%u%_ngbt6GvOm%y@!xp^B<sWMoO^0D&Vp>$K`!lSnW89n2ce39=O<{ -NwQOz4C2?$$qC^jHS*tH|I33>Mt~ozU+O%sQL{3Tp38>z_#6DvoR}M>#1xuC#^!jah@0KUx<8D?8=q3 -3q{>jvh;KWm{G!n+t7m>w(s5cHqhqOuVnGJLOsDTz*k2gmg@6Q<+)fle6CQ%`5%%{a?WMe+yIHkDItQ -DIh*4A)Ih%I;L2xDmo&o114~%a_>@0fJ-^NE3z;ik5&~H<9p79Qb673MV@$KXSL;$E*9jUABrzXFWm2 -UGSBp3a%Lh`eBihx5|@KgU$K%Z579X(b4D*87jC_e4E5bCm(Yk~0<sWeKh3Tew9meIEz*<>IBOjTiR^ -I9$Y}O#6-JYj{zZiqPb2vtz81WX-aSM|2cCzL=}w8mMRDiU**W<0O&I&@^I2%!(?wnKKs%o7sBmyk^8 -J{Ro%|wSdht}Vcd>iz<`I&Q{@pKFqSEppk?~}jM=_H*LQB|##_WsJQzaHSVC-frhIz{0X_U>aPu{e5- -`(~xL{W$7sO^-5Qy<ZZ4g6Y+HG>%q*R&P<eXQrBkcm>QNa0N~;T<kX_OcffLpoc{W4(kby9o2VetUTo -*RsIBJxZCpqi)Z;<#dh_w=(bR-|598@ycFCt9w50&qF+;u&7p-m7Xx@y|lYYw+!l(1?=1mdU06Ti)*f -rey?m#vDcrXz1%7%+bQ6wg{?Ix8xC(gTFzqMLwZKGxtYpnchB90z^n`Fsik6%=p{d++{5%?eSPp&$CU -SQg{}uAe5UJn(HXC<^x92OWQg4Lbv@kV`&k(F=krk=-K1{pmx!BA0?#sWWN;}Y^?N;Dtno1-BfDdHYv -Isc^?X8hN^?Wr;d7X*52$3Z?hZ^hO%u}H1WN@6X4vtl(Ef{X&AqgrT>k!5!1lYX{vNXZxW)HD8$rP^M -q@C6AqYh<3_)TanhS2OfH49bbEyo>TCFdN6jTIK7!;i;Vk-*JAi<7&9J4VAXfw-+&-2Z|uMhz_dmP&e -=sAeifOSv-q>+owu6K<Mk@X14FJiWJ8*)?oiBV91U&FQ}1{slr1T$#N)&oawmVr15k{Tev0fP{ZVL<y -kC~6d-9Ub0!_3{jy#2P-*o5^tY`<QJ6bea6B5u|$W(bo}|(&6D_t)TBZx}i-h2rhqQ{L;6W40L-r-!< -K?Wd8hp6a}f0*(XW_q?f-%N?-F2>}+~0ZY(NnZmtH#&&wvr`KiJD-<}QhLs0k8+59GM10N#)C2o5kWu -;(D+$d6fE^49kE&9FBX>*rZY0~R887xZhesu?22uK_^VPk}(1ukZTxQT{@KdMGJyaiHMI)Qmzh*)m}x -^%>Txe|NU)s<1ccy2+QPcQPh3ojy-JfO2j*@>xiyM3Qi4hmoIEE1BkJMX#msYgnD>F<bVqvOqv!ZaV- -Yf5j_{sneu(!1mmbWPZx74-OQBZ?Pt{G-<tQZ-{=s{70BMVw+K#iI70EYbA^*G);CF%mAx$HZLgcd9@ -n>m4Zc_O2L@eU6=<o}Sl8zo3oZ^Ev9j4Ebg-k??BsWM0ntfX32+I>xiR3#2NKo=~nCqTbJZ;>G=2kQx -P#1%7_OrrqOna5~xvr;r|BbO}-2*;stJ6?t0fNG2P6P|ZD*(u!cg<-IKFs-tS-E}VpldkMor?s_fgS? -{i~N-3i074Dqw5nPGnf}aT~k{gkqG|0Gd<v<+S!{dDB31nCM*I5+%{Voe+{oT2@HI&otGgS*qCp_K?$ -GjK6kfw;I)m`E!km7NJW8Hca58YUf>2j%e`O>^#M3|KQGe7Hb-;cMeUC4>7=reP6V0UP*Z^?bRvR6R0 -DZK^`t2mrimA*^Uyfx6n33J|Rk(rWny(P<ZS8JPnE-3u!2+WXcLoUfwiXLJ@Ld0c{FPNM<9ZI~p(6p3 -BaQu3FOW29GNX2pw@=(IZP&{I3+^YJB-I0p^X3zivxBp4p21%q~PPxN9>prpQr*uu=bn0ueYRkXHZ6B -=*eOdV*;x^%*;x=fLnf@QdZ4j#*<uYfl@C82Nnm^%v&lLzeoDk-6jypN-nzNud8q%U7*+{M|Gv`OZg{ -u6JN4M&sP*c*z5s|xh%SP_ro;B*MV2sp+*Qj_r@pKSnVSZRO9<0&FTrTztx7;?Y1kI`*0|UMJM})kYn -HmY_=4#w<68ZD{&JXh8acWanVfH$93fE5&AsTf`a7pN}TG@5Vb2^cs4WS1NXCKiBqe5n{!Q0zIpVswW -$W^a2r)GKG^wj7Yq3!U(-E;5#%e<y{{yieIP8{zMqz<|Ga$e@jDE5?lDi<`Qm{1fc2F{1J=hXIIT@iR -7rBO@b#t@Xt{cJ>GJxQ@3UuY<H+Vu`(cI_1I-+9yc0p%n9)1$Jc4(qcJ#Yc`M5zaW8vW$oJ0}T-*Q5v -az;+cb<RuYIrclUnG8A_<|#_s%f$&Hd30};viM?jy5UY_riMZxV$>*M1|s~S00sB#It%yyuRect!wAn -Xrj5a8FHJG@@uJC)|+!BiK?vrP3F*E{}ohShk?a{J`Grnj`?$f-YT;vTY${v@&}WAJ;W&m-<;-e24~k -8cO3O+a=)?Z}sD5tC*ejN{!TqW&S-k`<AU_}rd%P{mdqJlJRvr#taDtGMa1gv~Se(X_a`NycM)NneKM -?OusciZvbWsKQ**gp*HNqR-G%Hhj1|-y?h$n3TG6%q5O1Y9QD<b!e6cAF{+U^cR#T{#?TGlQr`v&&RF -E^uvPBMp&2I_2<Ct&o}!);^ylnKXpGc3`OAt%^)a&QWUikRT8DvI1a&4lB7u##?TMzPn#_?kdC21zr` -AC5frEntpO6ufDXfaQ)UFE9rRZM05k<;X3{N^f^m@C!nVQt3<c32gMt@p{DtKpNW^iF<il`~&qIEdb} -JB2b4s>s+Zr0iTQCNs2(WE(aI>RK(*K}1I53uh+7d}^iap!;gJ2KeM0>U})f$oJn@=^6f&>bXzpX#LK -t<!uf9rlc^45th!#+m%VlO<jcNM`O4>G79)t|~W0{fEmI(;5?Z@;)R+TR?WKr8io4PV&cOFm9$KTXg_ -!6zT7pUO!S7|RFEjMgV#3j%mrK<gWXDX@qc+$Q&f*6?pF7B^2q{&s*7O0V3QcAv)n3@4qWFFCpCixy7 -s#RK!h>Jap6XUSJn=3%fDCsa}?-lHEre!T>t_U3RKjcndNS&_Iv(W~3xXKOsSvj!Ja6Qc5hbE0EAQ<j -W8{@T}hkIQ7=)bjO>GUJWxZI8rT3-0BoYe8^nWbBT43SpWCOe#OphsqSV^+3<9%eo<tp!KUt1YX=b&R -F`VqpqGxIZ6stUDWsnO(FfZySIDnYMp*JFh;!;S&CV0@NCTBMvNiLsTaeWY&$OO(#n`zcil0M?r*eL< -Qk%c*pHPS>viQSTy|XkIw0vS8E@T7r`df1Bh7wgptQrgDUMkSLoz2FR=aE5!mpBZA-Wk&AA2kO60d+1 -_q>*d=1MK2F=z1|G6hEN;XHnmf=+oozS%-uJ)Y}o)`Pw(51v&_V%7EUkBh8mu(tP;*3B>aGoYWt5xYL -1(s&d11(CVfL)aIYVRJ}qlk{Y=pRFpubp5hT*O!oXKG#2aReT<;5572_ZPWEW;(Rz=4}BZ2|0fq_;px -GTDinG*ZC^-#H(U7-Q@;1aATq-4Fu|m_7_|9>9m1V9`TD`<oHa;HbJMm{Hzk~%z#G**nd|~(?eMB29Z -L?B-tHmn)Q_jkNSWhK<-(S~+rfL*^Fe!+uc!LH?=dBP>B<^NziBnFAB1$dypXhi^kjc~HytDp&5PHCa -UWifopaOb+`3-pQ8R0Y(sUE|H2>7I=T3P<jbBH_SuUch;Y%4iUZeTwLi~z#WK8PCPMjDa+wIfyj9$>( -5!flQa0Pp+@ZQw-_A$~KIg+{7?dV!Poagft6QcuRDlmMK2_)3*+g*U8DZme*5hs%u?u^K|5%;%AxhCO -Ox)R~T^r&v51@lz>FHD#}q0@IVHUAC?|8T<}vGChQ-=iTzfgVN@wEtrWOdte-qZo=H3{E3BK{6CgFds -H!te9176Y2nMa6tW6cq9o>@WB}Xj{s`o|0Km$QTn*65sLxDQCs$6g)Sfh2LqEyfK?<wBm7e@{w9=@;$ -V=j*y>Tpuksl<3R?a_=?Mqxr8K}dF!h%JHJuewfdj=RV@$xH=7lnw6Gj3q0ZBo61^_7ubmM@a9RkiQ+ -prk;YcRhB!*K&c_bV83$obM+E8D%bCc_<7`dHulk4FIx|8p?>)-$-Gn)Df~-0#$1e(3UNF~e(MqgL@x -f^f|nGHTFd(I7_6f@!_Ozda-9=TrKVGx}a~2Kr40|7g0@`60i9*pA+WW8T(>!Vxv5%GuZNvvAR%i+$| -Jyw9E1&@gF1!dHzs?u{oGsY2#v@eE2S*c(=qJJRUuN{RBZri*m;E+NefF|?PIXKW;Pa(8IWlwbC634P -gk;YR}5_m}GlZeDF}5C-a6%H1g%Q@b8@J=!-i5yYtm)mK$gZe!-CA#Xo9ZQ_uUHpP>!ogU2n#5MP$G~ -HA6%pxVn@nIg}D_f5H=Xh%!@2WydcOsg7c&7tB?V^(D&*xYW{AITum}Ad@BFHR7-p(<tt+DLG+IdEa6 -d@DW#<R3N3L2!vzaEa46NlAzUqepU(a&}?5$F$%ugXO1TTRC+eIIZa_;kG1STB5&oPj5(jBbCVIrHy& -DGrRt85&nK7XgKFf_*JRr98T2=vESEf03L4rlb>eh}r9n4`mhoQFA8!e8+t@<NPF!i<ruKBfZX;HUJx -Q-W}vMs<OGVPJ{LT!1#gvbpr-h%VotDv6K4~f}zU&rA)96`OaCO-W5Gt))==JPm+0OxOwSCBzM;NM$) -^OzXUL6Qr1H|*n!ZiNZ9n^sUc3g>&b!?xVECvrfoiUJ9$c|iz5qMzWDc3(nqqhEQOcs(kn0Ymh8}Ek5 -s8dGsF=eo1QT`NG0G-K&pN(X1n3Zn-{{`AAClLPYxQv<B`LcjvaFZPaNUt4^K(k6BvIsM>0|}HaSBVQ -zQ=_FD_4&C}lOd8`;TC-uEDou9AP>nRd}2r|@iI%_Nyae+?HYPTxups}n=NQ>dVIq2t~UuZmd`>+#4B -FD!Q-*LXRI1V?>o2ZBz3Gr4wD-}^W@Ood}9nTl0TNT=Z+10ru3mSFvZEZmnBer1aIU+v(lHR3;R{Noe -=ju9(NVkAzZII}_}gRgXwCSZE~L1Q>h;so_!0f0zB!+i#Plt3~a2$iNFi_d&=L`=6ias)6!8vYMOd<d -8%33?4zOl3AtLwtLYkbva@Q)F_}v5A53OR|C7x=xaTv3TlNfVpmfreJ_zh3n!|`(g2)7z6qJ71HyK*& -+y#rvY3s0c{)<v)MFljh4V;fB{?4o01(&0NRPH`$;y#gWq~Li3(su)7Juk?cK!n)7M&@9oCQvN7yE5k -H3_U`^h=rCm%xZcRqyBw&C0O*oUw(92;g#4|a|}`w(gi+kW*1RvPo@`Hbj&BnJM24$Rk)fqAo8Ttiam -^UMH{t(jMDy8h=Arq{-XDsvxMM}BpV<c!TZ68fEWq&WR(9r?vMQhZB-2O~$w5&vc#c{O<dON}D`?lbs -sk{S9c&GXZM!9UFxz#^|-FuiV^5rh0xOaj(D!(_Lg^7wG_UdoPosY{8~`a;X?$X^ZtA3dG}bqn$-lce -{OBYfi{-2T1-CMw_M40fq7j8DEq!U+GK9Ah7wM8L=1G`$sh@kh4uV&(j*TUyb`TGOz(e8=Z|715AQ3_ -(ccFH=)?h^%(97{|xm$n6T*4tB30FHs%E)G6+g02kvrHQzV1phZ`0G3;^bp&gn%?YyI{1fJ1Q<>^Ge9 -YY+uTIz^Dt&4UW<(Cu)7fY;<_mis$?cE^<7CFev-97Cf!P{Mx<l(KKh2ER@!LpdZ=WQwSW6u=nXB}fQ -!iy1nqYhjsy*bQOi1RHHAF$}9gaus>f%?#gj``+{WUV)m{*&R69$KOPZl=H_9ro_=y_yh;+4dpeum2+ -T&S{^f`DoFu*EI#QgpLQ6tm^8PDb8eF=n=s2mhcXlCPB^WQ}UbH?m9<g{`OsgzMqT#l~v-GDZXQW$-D -hIA+wZtVwab4QqPc^SqdRqYpl1|?qhg+=1frVk{cD*K**(m5lExKEJrVO(JQleLi0yU7S%gPa{R!Kkj -gXMg-}vg3~4$|^4B$b7<9?%EBbpDcD<%MwLQ|yBqcXZJ$EmVG)#|-Q)M!JWbcV^rMRc^~`i0<+IQ -H(eYsV_lE(-tkJ&2ow?=`c`3J?J%OwL%DM9HZy*HKt1yhZZexn?1M2+Fh#3g-DH^9-s=`TqEX)yJnCS -HzHmFy6~gm9>qI?O&`SZK{$&a5m~lAk;om7Tb+bkguxxkw`T-g(wI9sm9p3I?A|ci<nsD`5pQG7Nrpo -yxlWwV-es^>)(%DXzZm2DjGQ9R|Ie}e-|yrn{Qid>e2?KcLQphHV>C&@G)XcjiP0-AGAKgO3<XmRM#I -d9eV5ec@KY3<Mok8wn83i097zK;n-zg68WiYP%DO@{`imO=wl$uE8a|Le&px|2!Ufphip482O*Yl@mG -;s(NGJn6IPBL6;1zB`p&kWIn=5ria4=}VPynRk3=AWnn=B5tSql~0-pNg`7TaXn<82s!Jr5KC=YbGl9 -3t7&Y{2H!?;xDN00=L?jlU~!KHfW(O(o9vSUK-dD>~Hdfh)`Pt6W=05RorDSN-gk_HW_)Qxm{{0pB3y -_SJ4p{RZEX4I6(bcT-Nr!lIuc{L7sDy3iBxl|&<!=WhzI)gMGC(C@DCcb5qL?izo0iO|p2nAIySD$~z -@E|ud-|54gDtCr@4T{)kF4P%yeymUTMS?)TJ^mHHR{)!x1Rp$nRW0l<rw{OjngE`K^8TbZk?X;9x?vX -nzKO9D1IEw>%d7o?P4r@?aI0uHW?B|hG6&c?rJU#M3oAkk;8^rZ8EvU8&Zv#c?9{1|%4RwB+9Y@kQja -;syuMu{){i0|MN6m<<m;XUk8TziQ{Nt@UnKz)+z}6y5O=gncXDny?`H9!Xo(g1%Z4SG;&_RV=%knK}< -U_TLZgM!YbGGzdu^`jYu;iU2D0jAIeMU2AH%^zl=VXU6>y<Gj-Xj|!S;$#`Pi3mbB3+$0?@1<z=aSKT -I@5()7%-h{W#@nKbOsN@@*0C_uIkdwx94T}`PuvNDqo+hpWpt01JQu}z$ioED9m6aifnA<?|RuAXIM$ -eN*h2iYcp6tHkFQy26`bV38cG-&D5;;*cA<UMCAWLFd!C!6Ps8z4j2j&gV`?<{@k2Id}@5hL6&aa+2+ -CaE1L)mJODv~E&;pFHbs+_n9(?RPOgto&=rpYLGF|Sjq%9lUAsP1@dTs_!H_iqa+E;)bL)0rud5(HFI -K#sYxdg=;T>cMd;VLO`jJZUNj%Pez5lRFU9f-dQjgsAz6PoPPZscOE5>W=o`(z^pNzNYeNtKg9_jp-m ->nf5PzhVZOcwjBl8G3eF`2<u3j2B4Wd2kMb6WK+t`7z1b17^k2+l1I5hB5yK3zoTa|Q^Q&8wduFW02| -S1u2N8Xpx6dB%&W_+431!&9g3Crj)oM^etYd?~mHhiqPH&KeQV^09jBa@dUYISHE@cb^xA!7k=y=WtZ -3E)zB6$$20aM^D+Zy)CmMzppb?+Ue2K*a&_ryXxW1K*mz(6SI^T%UWdbIUY**&;{ZZZM)(9m{ljd)K* -W-YT&<<30k;f2#|e$EAMAMqv{j!9x<`5D|=-T_n5qrZxx@qnc3Sj*5dG3z44Q;B}<84Y8bU41cT=_GS -_wazOQTA7tc*8TvPw)p+2t`nC4Ky(6KBf)As`(ybd*fKEKoUxDcYsB`Bl~W&0?D!_&%Y{b(6dYwk|R! -I8_FbGk#JKI->$Lwf9ZBSSVRz9#pQX)2Rug8rnRMt)&C+w1Hn??hv%%>FZwnD$0soH#)d`?;S+f~OE? -|6yghvJN)-{cQ~HV(7oUjmxrO_s^w<SbMLzNBU!r`1K3OhrH~vvb+<)&9$kJu-x*u`S)*>qOy&=xhkl -A-&Z$O&dL3e750Y~G4BEKjCZkcW{M6kJoPccHeEqUK(>B&w8XI<56^xi7f^N5m3bL<YB$Dbm)IkU%3z -*QDb1Ue&(jfEZ^v@ss7|`3P?5%jz_-TDvo0i>lF`}o+L!*!nqaCa|ACE7jWq4+$hpY7rxB$U?CH$hQ_ -<$n!|MepVa4@ie<CI8&M~UYJbj-lUk;1;L!umza}=&;{UU_CKrqBJu~%|N%0_L`V>`Lz1U+H9oA`u%A -pUf%$H2VYBJSv<%D6x3da;L(sA6+UAi5Ui8f<ls?VDb}!A|F_!`_~ta8_tB65+8?#+*P;S+P5{DIbRX -{{DiK(`)BN`X38}tYLojx|Y=x|K;Uvp5D5@_}l;afB#xPl1-m7KOWT2BgKCrclkfx*%uuA?YiFsBuX; -`3DY!5qZCFUG(!>ujKKuTz{I)$rAQd3J}jys8z#Xpn2lP|5#FYVu?z&_MZV!40T2(gaI7)<#{`3<Kw= -KgK=q2s0fkt9t`JObUhgY>7C2xR_||rkZ!IAt13FR)_*V+m@FstWZxucaU?;%Bt%sS|L^shb<p|T8CR -hwon_2!jk%?{eV+F{SH4z&{$v604*IBPFEB>TOcmR+|e6yI4(hC#$S^A(ZCsv{w?s=fE9~af~pNndKu -!!~gK=~9vms4z`6_Rw>EkngJkb@x#L6(9Ok{KV?cp8Qx9)GX&<@Q;O!%)M(cH!ph#P9D?e$bZl6T}(l -1#ShlI@@GIeqLrs_)jt+&dG3%2~zFPk4UZ;VkLM*Xoa0!AWZmfLHz@?q3D;X^c1JjYw>RIpZUQwRZ+m -{kn4V(ul{Fo?O${oL*I{yed#vFUH?eku;e0`NJOJg1%pYiLo;}$eHu04c@nF*F7B1YDv&!z3GbVO8WH -!|^aUp5`kG!Q^<@{tKD(>6jOpBI#*a7~H^+U2p5&+V;ClG|RIh9WU20`+F<0XqwNo_efI5du>n$-E=6 -n9YH8>OTPxv&pdk<x@9C0h34;AzriqCR1ur>0DZk~Z0opaHWNS5IPaa)*)mzN4LTj4U^tvBwU_``|g1 ->aRL(SzZtrCQfOPvu!fAdkBaQ4u}fc34qO>LCxK(g@q;pG{*?_ciD+WkXnD*sM<o`gmDOT^|_tBs`jg -m@*A2mh`?mW%z=4&k&BY8_rsdf8>z%SxEZ5=x=c2z+5z9Dn8WFVD5Jj9Kcp+-yd;Nu+UICQr_C^<3V` -L<8;M~lD;j9doS?H?>uSc8dGMca?80~ke;suD<36Vx~EybbN4SF3Ke80de++>vrEF&;WD+i<CPhhiae -h0XnSS`t$))OyAkt*=nltcK^$R@%oDz4Bi)6r9;`~SZ?i7C7}xmL+UQDS9u)WHa53ChHJy{f?8h1ZXc -evEx{R)>-6i0<+hIU^1<JY;Y7M*Nxk{say4@D%;g)Z_de8HI9GNQCv#U%!aqo;-(eBhtXA)D<<Z_KT# -MCZ5WL{o}u6K!Rz8IH>f@|kC4Ik&R=9p*hx>vueg-SSGq8m~Rm%v1vZYHh`*3XA55JVpOJQjX8<nqVr -B!?Re6<z6<>}tRnQ1S`=n(po9e)(RY^J{6-vd>~P-;|XP1C97ew>QCF4RB?lG<dmOgLgKSxiG!66Uzc -|v%%06h;JjBYM;2Eod{Vva(%U&#b2d5*Do5MSb~o<+_4X|S0QuIYiv=Kw-62GU_`!0rbG;^bd0Y1LpQ -j#;>frA`yN_3r{5f=J<D(7e!6zab-LXn^4vnlDe8mkQMh!Gx|=&Lz-)Q$m;1pg@n}9j=qyBzXz1;PD6 -4O%Y4f}y=Z{gNSs*TZgtXK1<||HcW#3T|+!#BuTfeMJXPyGXxd!8u1@Fh;KBEFY;g<BeDjXWloOn7P_ -y@m-%D%wJ8Y6eF>3MfAzJ(+i+=`$xi{ZJ@$Pg87pK<aqjjZm(qj`EIkGk!7R4Z+sMWLG9Q|1eQ^5QLf ->AU0v8Y`SvnUcwQCsU;{IYoT9U8@}yO%b0`30B8-IG&l^LpD1SB3|u*Z25zL%AWF4pK`8Ftq{5=n?yO -1j!KnL8cEXi2Ft2kcllO5NW_DdADqp;d=9#y2B!LN@vS|b&JnGYnB*F<U;SL=j?gK=1;)m6Ahwohxbv -JdD;MHi?`;x?uW?Q5GXlDa=+Z}gs)(~fiArE$*9rh?T*N-JEy$%?Go=T;;z;vA9}ympR#k1m3<Ll -;Qyk;~(T@?`JkSkTxLiDh_$)kbzwD65`_Bk3yD`5=!=MDNS%bLe(T;tY|-?U|MBK_Qc3k4Cky*p3ryr -8kBjCNGJMc?!24wAl-@W?`4B*I5F`i)w^pbJ<+&aF4zhdnZ7ZY423^gt;~RxE|p<U$!QBQ*bf*bE^@c -C*!KJ2|}{3uN}+s{^Hpm!@1wA`6X8S`K=$dXHW!2Q3}Nwgup)x!8WC}HRQ=i&<Tshpe43ofWkOvEBaK -vO@PQ5j{gVw*d(NgKa0#@BuK=fn`j#F+seRh)*uPA<QAY*T5L5|Dh0b-<0R%+W!gLjZN=+eQXCBW<1q -*T;{tey<v556kxxBW#8ybofD!<mffO!*fk7^y4e&|Vh5~yaNw7CO2MH7$41WDKYhi&9?D92hA*<|JlC -CWOamHf!iR!i5(QrOFL4TU7uQst2A8r+|{!x)-lQ)x0&4KaKZ<u57qu3hAUf6GQQ71!iK8vmWxa{Yng -M&l=lcR&4UFeS`UG#K$ohViF@76PW!3XZOl1JeN!LGg%p@-M(YX6}|l`Z#WfL4AbqIBHaJXh?Cj=0?) -Ev&3xCgGs$$K5=Vd7&teg0&%kcI^wAXm|DUcp&$hwYuG_NnRmlQaYFOWk6i?gUCmT#k}2tEe4Nf7xN_ -K*kv~m8RTSVeDOkb7!>=eN{9Q)o!MZ@YGfC^b@{o*f)z=yYIzeD<6sIz&#x%%-`pHY5VEl$i=}oo{7y -PJx!XlJ@rozFYPmeG%PBMWX=O@+aP^6s8?Xnf$L9$j^t#Jx_4$&jX@s<!YU3}nZP}YRNfdSpMqIRX`* -rR09fM=+3e4eL*Kq${j`cz54vOZx`xADbmI0=}VmEKBWd0W!jKAl3({Co(&<6AtZ*<Jiy2<ffs7W|92 -Zd+2$IZMp|De*cgR5DC^!h~alv74rnf7vYX3uB_WYH{|fur2dnYw-^&BWNQYkTqAmeUul!K7T_FfYz| -dWMXvO}jFFyuzc;yeY52qbAU@I&Fm@NcW_w8T_pu1(h%@sSVJZ!VyUdR|-v!dNM^2j+gJ9)WqfbM{LO -mexrgI((hCK(2%_|@O<`+671l`Mf$e0She(>GCbfgFS<LSlPaWTNTtn2`t(GF6Jl8IdFG}#Z(nVnBj? -ou9>3^#*u6<sTMniQ=Ry)$x%*6aW7?P#blG3m5Nq=8SJLf}%xm`jH1(oo6kQS_Sl`xFexl69yOlx2ka -<>d7gZ;MI0^(-XibQDkyF?Znj<;q6MPW<IG=6iPyLoQf3c7FI{)?meDa$BVk-aZFX{ijV1z)P@%8_{i -+K3I?>u{s>rdngiick|JQUB3`g<R&)?DIjU5GX7j(_0zUo0s9*H5YQ|NqbC3*!BEXYxHR(lCMJD23BF -LLwikn5M+m9ZPNHPYfu%WE-4d_-3I+11`TJC6<C@1x<e}{Y`=-0ak1iE?Y7q-h3}(7^EQL%>`=(CU|q -~SXW+;w!$Zvt@)+qObXhBvv`}z+0qULywzo4u&*2j2%Mo?`Xc{qlEvTvih*WM25>#4LGSO1i0e6l8Y& -I|65l$2ncq8hNTBvPeidJnU0)oCl@a{>AmOJK7ghQCvu?H;c;9m89LSwtgXVnV+7z?DpCmQ}k!UmVJ) -Y5_bkPW2c|P#I^1l%MS0GETiRzb$MBr?&s^r=};!tWP%6zDN_4hP|v<Yv61;KIvsei%vlEELmE`U9ms -pFaBfXrF$vbQgOSD&P1n$j6U2g?3-)UO57x3Nj1`jaK7?@t}ZU>O+2`Mj*=IjH|>g4&h*?^3_1!HXIa -$<h>^O!#|k9)W#Z(aABO1YNIBe0CX+uQ33Nd`Z*jty3j~MW*x$#7ZLELV}3Vwu%gEiDz&*pK74ccXeK -G{gBX2$!>1mrpGQ{643g0pT2$4z-5+)&pso-wrNacyH~|TYEFMY>hJoZpzj-_-n^5i6rm@MC)^6JZVB -!Mvg}H|ydtJ;aPEF6=-V{kj<sqiH6uJcsFmorke<(R;f@twpw~B}jYb^tYXC3ogT0O0*cp-a{2okur9 -UrcGNDpaPE=<)Wse17Bevd)_;f!}m4+U#RA|#Tz19r$xRZKezv4K9kTpALj=)n%5XNyHJlRIUIO4$!1 -Qf7Hn`KR~5<%{PPy=(r-g^>h_7^@zkma$zp9@}g>kAeI4+p0XGW)9L)9rqzi+AV9kg8`>u`Ic3zCxc$ -iEL-b_>hK`5}(3(N6Aho?c`2kqV9SxRJbQQv@efzf}fc{d7}`gJs&%t%UHov^u9%|d8o2vZ|>NmYhM# -q27OV7i++Rs$zE9ZdogleVCBuXdZpXqN9yHV{bOllIri6P&!aDsZzqmg{5@(wKC=@L;{0=*sDB;3IXw -4NHHG(RqJ5h$Cr(tkIFE>q<}Q*`LCGi+@&P$K3X-#V%h&f$q~PhBi>gg|R&^#+-il1(XRm&gMSr<@&- -nbb{3!J*qC<IT$J1@9tCcoLv+wK--LS;QFyoqf9GOGb_WA1!7lSl35hA(fJ;8(8P=yJJ@Z#VsJd~^_8 -wRKyF0Y&53C9sb_RA<|C535DhnM}>R(^7;bnLb3ouIyDZcy#z{8d;Qy`U2G((7b=gv6n^#^(CWb0b@* -MDIGn#(Tj+UCR`>?>wX#;|G@y3>o{n+3E4ZMumBMq0p(8@x%DcnX6Jbe4M|nv)Lr}D~m$b4}0A>#MAj -Mdvr9Om%*tskBJ=WUyR-;w`<v~|NV8m4bQJ~r^pJ+KfLo3*8lldUoiO>Tm0Be41d^W6w{kAMgbH~DH@ -1!;22<c)Ydq>z5r6-G3XaYfm7ti@@^zR#dS|844B}Gp(_lofD8J3@NN3D0AnvJdXqUQr4uyxxspVJ{? -(i*0|+FwY09mzOCX?5v2xjT6E^*1mI0%H<C2>S`3lE51saTi7#*^CV#Avd>ee`w(VN}~z8O##>#=`JK -{uo6>T4B%XLsdqB|<ht5r;P<)vW(jl*6yaq{|)&N~}DH8v)e*D5U+j_e<!jzNgE+KhKmdEBpeK07dh+ -`Dv!~%QD#X)Y%GdU(W{m{&fDEvw^-pogdET58H0RoGJS_()jb$c5HL4Zx63(jxAebR|0<^#J)T*)Wvl -bS4YuXFvkUTI!;#~i)4iD7aOXBM-`-|T|Js!TOk3Bg?DTlxAg#$dO^Z|dHQW|zJw0FKK|+Q7@`;Rf!8 --(dOZ{I3LTf$<MaC?epT==XzfWQ_l05Nm4W8cxFC8%mxuCFWc#C}3~uaq=iHU3T4dv++Se5no$=)4nw ->>mTBB9e>VB{85wXvDkMFw~vkM`Z*)vW&Z37<-%99bhHe5lYMX!<?2D)AY`1vgPQ+>Ddf#c1qKEw@{Q -nbxtZ{r*wbe9`-$X{D*+~?yHi;3QTi4p?aWVf%NJK;Mg6sB*;+bofB9^T!dR0qBK(snzaCr$V}ynIF% -0s07D-XH1Qf38XkO%far)TLtDygUy))QO^6i!+Tr$Cvhg@dVmS6c_6r9+otvO=EBmUqk;&azehK)b(& -7!{Oa5B;^)&UBw`3MUIv_zn)!sMGld+UukS~igWw2Pt|UYy}cGoUiVJ3^x@~#Q_<F-&3(YPvqm9l%R# -q`!DT`fT&5kNclkwSZ4B)v9e$@3uI^5`=ZuwD^6PgtA!<jw64Jz|TwaMs{*Y+{BvxK?USlay<MT@5DO -!t0C)yoox*xp#&9N#!aE7C);AW!xqDuwb)piU<jbHxd-dj*%$nPClgikjeTk`qBIqU*E)1biKWv`RYE -m|n#(t0T#7d}%7LW_lGTze~L4xZOY4`RD93jd8?#itp{O$rJ;%Xt<74}UH0<Lh4^6SPmRiXYBz{#U#C -ahmgoUHkwlA0f(0q==2%<R~CH>tmOOLDOh~0@<k?2UxOlx%F2dVL*O7teF62#B9z=1r4%_D-B$k8?zY -`CmC2sBtW-%<zghU$!61Fb|m?gZxcv?79dSpY_`W303XoVl@WlL<(n?|dU`ao0UiZVa0RgyLRJz<Y^q -f&kl+PCN+4CR2`2y>MidO8BELtJ1dz8j{ARcKaSi$WQwjOt3*rO%q7cnj#>MTV=^Wx8wT^yADZY9arU -rNW1PCl3NS`O#K5Im6g<2cl93-}+r?t5qmy;>@s3~Nhr$ty8`hKAyl|N=Zo8JCThWjAS+F_-YRq~xzG -4wqZ{K5pkde1u3B!4x-Fuy1nd={z#_Dc@P%Zh&tKj2xmKjrt{nQhJ+bx#`>=z`pQC-$xlmpB+wxT?c9 -(jF@w=DFy1UQ!&30i#L*?Va;JK;}Z7_NPg@W?UHJlS)Gs^LovbY)zxty>EfUu)1tLg3EB<lUIG$5Kos -iw0aSe*sIB_j|#~=9OuJ)nJdY&0?5c7ti0D>=f0EA%WjWF#=Rsf^yL`ElO`<t79Q1C`jW>(z$dEo^c^ -cB#d3_Vvsd;E<R37Evk}RIqxaq|cm945Q64)*4sww9kE2Dg@2(DBvpUG|#5;6vtC2syP4>*@x9bI>jZ -_HJ_3B=itMNE?oyg1Y6uyeL(a32M6TSE4%%=76@??|VW%&?A2b95*#aI2~3J4YL?=JRd_<_~Q7JkyR+ -*hVY9op(?lkh0j-JRd@MRa;H_|`lH{jGcIr)kcAvJ3{q24W9<WpPob-?LDe<&+z58I?4bw^w$kNF1qy -xz95~R%2Poa9ZKD``jDhC@hCFkG(tSki<#h2CnN{50A$m$+e#z@3VzZ+OUK5PSy|!mDX@U7&Bt0z<N2 -Prt}^{@j=yUWkV;zPsbhlP#-}%;30V}claX@NEz>Kt3nwec~gPJ>M#E=1~GdsW2Ei!-Hy=a{aXzmkez -6L!c6UwBRGD;joNNCEHtUG>q7P--^M_T$P<jrbmh+19k+kB4|tzClzS?6RzX1hv7cLfW$p3FHmb_W+Q -v`V{ezNrY^?-BNn28PWQ^+tHVGvc8kj`dGS?5BmDF5kLbjV}wngQ{#T2b<uGD8tvU~N<A<DR<kK2%^f -93z%T~>IwePtae3^Oatd|d%_K>Y+v|9ayuaP-d`{(ww4jNlZ4QWS|W1V!Wc$Agk9j^GSvH-a%BT!Z6) -Q_vU~X#}Qzn|vb50Hx?6UE$_qnH>h?BUivHasU;@X4H$v0QLa1Y-YgJ*4ewVBnANnhA;x)gwB6uGMED -S0ia5q|0mu|f)g5yYpkcS;#j;PXP$zZT)Nft^3DFC*v2AP4i;0Orz<DGfss$sme{6@kZef$`%EJb)UC -(w)U6F|XHSmhEOhjXY$N{#xS-F-_0QSHZ=_@;F-U*Lv=K~Oe{F*LGV}-%VoLMf3bOz7u^x11j^8=+m7 -urD^2B1Zbp7u1G}bxWaY%Ft%(eQ-Bmt%*GjYqlAs%XYK%&5y46oV{5BfA9$$nk<{q_CH<w5^+eSdO!& -_7+@pIjc4{Tpux>x$QVvwmcE89fxGJ&s4H$;eI{FHs+w(<54uuQu5tM8o7RT8>3kB7ypLdx*zVC}sS7 -6DrhuRu`;ZUoZP-3Z=<4rjFFDxa}MLjm~!^R8T#y2yZ-gelNqS5fv$4iPan={sTshy!AZeRe3F&op2v -2RCWz^1jP<>{HAhMaEJ!4+Lu=wSID#@ja{*uB>$$f2eyA-k?Zpv_>*<Yr%c@wR|+!mTl1E#hR<<zeZT -kegBRsnLY%1A+n31(wjTy^l6LFfR`d_N<f0YxJa&lk&K}Q%hgK%ja<&pt!HP((N$iggRa32irh>a~D| -W^ty?9p$`F5nr>O~A%0cYiTvEi=VPcH=8J^ZigKc&F!eu;J;_7(r&PVDIdofLL+G>+*Dae1qfulMfo7 -~oj=*{$%~y3hwJC!hGDC`v1LEFG>-x@ff5J1_nG#nQV9`I|@v_?~|%PYN1r6S@9883Q)$=KaL%C-~Mz -hB)i{csX^rO$bx3QzQMNE2z^KACX|0c@aD%aKKulpGSGTjJG|HnfK%C_Ocbcc(hKH=fjH^ij%sxj4Op -_LoPQ^mc2^6wf!NvrH9x)Gu45-Rkn{WA~K7@{<&kNtSvZ2y3RX&-%xIFIjP=MT=8O{C<1!UqO+`@ba3 -UbqNe8Z;&RFzP36H5j~2|IvvbakW?|im`LLIyYUeW#Q&9rkWnz*_A@taxGOA7d0;999&&D$&&w1ja3% -160SFK}~Bow_<vRuXjtGycu$Ju(elNZtTn|MNsVIs~QN4PjaPXb&~Z8FVg^`f78|BeYl;c9Jp<^Np6; -FG@2M$D`qe(}Hm?F%~o@4p=ECk+0tcJKv<f3e07gO4;uP%wtB&`U5B!Qd!~!VL3qA52PY7Q7o4ugC=x -U<!xW23^o?W)aznZdksxw0vCe%Sd1d3=DOVjWxocJ7q=1b>H|lESVx8Gl_1Ez@SB$*x;S~Pn`X#6*<{ -*mz(QhvI+E{6eu`?_G1K`A-#<ot-D)~lx^8Xbd&FaH>EqENwBF6QCmzvZCZIL0~Ug@pWpYvoPcX#^VP -Lb=h*EZP7NxLKm6^{4s!pKCwvmkfj)PcoE-E$o;zvyp7DLLjqq#ZEiSC{B|XSDpPl?96Ce=&-J8Y_Z? -5lsuDmsqv55E=1H#YRKHD<r>%y8dzOy^j#dr2ulIQ&$!}|nty34ui#vYidfIc(c!w;8Ge|qyXq5bK-A -0ZF=XFsH=&3caDuH{7<Pi#rW;(WQ}dpkhIG<;qZorauJ6W-L}aJ8L6GlrMDlghG5D*rwhrJqfSi8OFN -BKpBNmNje~Nb-bGXTPdA;<XGOR4Tc_TapHM{Y8H>`L2&{7~Wi4?^1BjbT_9%7uv{zJp`3>&sO<9$rSR -^;nFGRrd!F%G3u>-qR;%rAtLl}4pQu)*gmFsrS&3aeJ0Z#!&BqlXIN_mjopPmkc8LQw=l(*46<#!v<4 -pTNu?i}ovqheNd|@fvRyZp>(=6<GD{9cw%<9DwR@@Jm45ha;F=;2oO+<s<8oSqXzYo)asFV6$vKW4s# -8L^l!4rYcl#J8uTE$%34M2+R8}efeeVqPA-4Sj2Y+aiRriyN?QW3X_|2n1>|JNY7lyiE&Wrvi3jM6Gq -ub`l`iIAEW|xs6A|G=6j%rI*v*UTaF=P3_rpw%oU8Z*=%cHNJeRxcvyaoKePtoj9(wUfJb@@PvA(@OG -s%wLAQp+Or_LLkRwAd$uPoJLz?+mZVsdvnJE6Z7Uyjl3N_|-(WxBWoHQ)}H9jXywS!DY^E4zN>yK5(~ -D$taT*GOpesVv=RvLCbbDnu<zwI$ipBB{PJfk&Yo_=8}!}3F=a{$V;l$?aPy|reVL#kHE%{&1rqG(&o -ucs7k*e^jRGRI}kmUz$|9b9xW^1x;z~q<4u#+d~&Nsu&jBObEB>Fw@XsbXOJ*Ekt%)7OW+%-=oXA>cH -~fxrq2Z<>y~HQD^Msf#UH~H`+D9Umn_cy%JOfy#uVflrOTs>`^T-whxJ#W5vNLju_Q`jI84$%q169mK -VQJ=zuw39a0aGmPzpyG3I+1582zzpAccX<BK67BC<Rp~Aa6s0o{$s;xzBvF8CroVg;zxT*nT$$_)sLE -Yh_(G-!ynq9Pl}O>*Its3wz)lNN=9=)F!<{t~Bvix;r>%e4zn!f_(weI~s6FAf8`<9c7#4E{1}B6^sM -`N28#vb4Ak?h1c@{CQ3Nauv=dP**qLr@e-R2aQ<7@Kv@FM-TnMkc;DYm6g9qPSNbr|Gx^?6!uw8Oyul -Fm7s_P$VC;pN<It%ho@*lahtZh&(`Zc8ryWv3siKWh7c5}mCmFa_Rz(pt>hod>ENTf~nIN*!EWua-E% -?;%DTp()0@BxohV+xYZWDNhuTJ)-$wEO8S}@!W26CEnXqS=f1EIQasoFETrE2B)q&-)<I45Y-reN6$V -k<6d&V}R5T1Ab;p3J(O%2NHM<vjmsrd0(qtt+qzhqilJ<XBU5tRlF=80bq7{Ab2M&q`3)mR#)lA$sV2 -o~w6u(0W{S`aTTu@#%6rp$<plxiXs4a`nCM5VC$Ut|E@wwgIK_!1yQp$T3XK1xr5?&N#UpKj~iVCjxi -WUr!V6(|MG1v&5S_wHGR-VD6Ft4|yR&I-@?rGeYtW8ODLi-|P5H9T!qk4a0ozwWiMY2rfQ})Fp5Mhxc -6pAG^eX_YS)t#04^0X5wnRl%<EoU}~a;vzKwMcf+i=aK9@eZ$_t?m1Mto#w(bLL!a%<^JC~$S~d0+bR -y|;ymM%QB`w9><+Eq(2<!zPN%mOZ4@BJUh-zM$P&li7D==|q=uBjU^1C|@FEoKVy0aNuG_ZHW2n&v@b -Tih|;;<v01X*OkDoj7%T|@85@$fXHEAXvNSDKW#>8$ZH6z%P^)EnepEY9%h5*p5qJWTK66m`!t-o_fw -p{TiM?l9S@_j`7Fov)WGay!Jw>*Z0$keCc7J?b)Xc4US=T~KXj6?A^gWF#J5)y%}pOXK*bzQWOdMq}q -HDPyA-uSrQ5W$!@;m41i8=*{+_drJBt=?luHeO2pr2Sy*6>wLKjSs>AGgH*Db%~ghrmML##_mxkh1d( -RLU4$lX@u;ygpQ@(!Ygg{&(J%dRX-z~UxaVybDxnoNOc$)-)jQU3jH_Sl#SbdTa*v7(yS0@2=}uFp*H -;N4Wi(V}FgW%5$UrsNGl&c}3!{${$UkTfIqj0a9;Sn{$Ls$`-J3Nzifu`w@BE5>=YB2bq0Rb%c?KaSi -8tm!2qXqE{Q3*Z%&N+)%u`i;`nzV=?3{=!g#<ek5!;uq?aQ6?Q-euH*_8S6dDl0NeSW<_vEL*!6e-^S -e`AZwPMw*fiFGzOO5(UdI!<HQeYX-T^EZp3BfnFBgiqkuReso1zE}ey=A3M7@||0M&D!!EV?2f}8QEY -$n|%We$1owoHpl1q_`?3#F4#9CVa&~DCq|-}wD|J4$uQ{GukRO7nA^-Y03*#zJReUK7=>Zxy}V@%hFK -Us`E^Vao6_C+0inrt|1lD<uIfR_yx!^aR%$~*`_4LEYyRCBDGDyUzToh9Z|d7BS!-jo`4xj4WM+j|q2 -FmBdf?Q9w#Jij4mvQrYuD|9xkXk~?~{rIZ*aN!3x_YI6~L#{>wY2OyV1W9_2yJ6q{D!s^PI3Sm;KMjp -YEEijjDi!w+FF_itvVB$Z(f7)XrYs+b`D|&s@hjSGYi&qqB=qFmPUj%}SSAd$PSEo&>K{t!ABHy^37X -d%bo@9M7Z1H&OU_;#k9jciq6nhHH8r@ofh{qZ98ISgtmhiRzX~ngN@bq_h8Vh!nC|w6~~xwSGC#imrN -lHQGqRa@XDk<DMZIzXML@t|*}ogSRnSiMFFIHr?P*R9Hi=mXU9ygCX^3fOn=c#NqOMGa^6SI0mZv@;Q -kBn!Z!wr6PrF(sVcrix8MNc~2^we8K4TlJs(xdTwjCXyqd#jj9jod^0+t<J>y&4IoU!xrhtwBpA!^zV -W7zt^IkZ*kQ=fODfAE{g_fC>c;LeL=L4;?fu>5rzvz0P=pG=8810b!d-@3SMfqR*6ThJY1ymVdJTk&- -23+%<%rGxzF4Njb@o}_&YH_>oMoJ<WCLu7E5vQ<iF%roS5!~lQ@@s>LhBl}Dyy@ENZ!i|^5z}Jl%{8e ->&(RFBPoY2?bs|(>qbQgBjqPi3cd_)LIN><;Af%5w6lu%f4k&Vwyb?-M_BZKSpThrf_WDH!}(9<$Fql -j@w9IR<L^)T&b$~VaRP-19HSwWq7e+nX&grn4}Y45F=(#~e|j9gmwqwy8I$?UD5ueJMsOGcV@GX>(nm -do<VT%FkpD&gyd*r#La3vUf7s}M1ke%rnajaHvaOGiFp?Yx19Wn9JC4ci{5aHx>0gwDN7N>CoWxVvao -~-9^jZ*d^jcE-6TulDb>h)_i9e#~PbUWX{Np&?z>glwUf$B5Lvi$DAa%?!VaE^<{Ff!6NFD8I`tf^^w -9cWy{(EyJPvv?Fba-hW`Jax+2a(|!?8h-{(c1*?D{dTP*1F?AMYmx^MKpGr`&}Eu;O-3pgaJN>&d1^W -Yab&y6vW%n@3;7`9>v?&$M|A3Hw6xA2K(`h;~(Go+l_(a&PQqYH!C|8LVJy0h~bIFo%rxyz>p~M#Z{L -kZ9zeN8$FmcnJt~G<g8JRztCs~rntK$FMGI{Rd#<4p7oMjRb@1;i7a4Ai$`P0p<@Z-dF-@gMC!-o8Wo -Wy)ABf}ZKehq8W8ik+Slh6KhQX9OO~)JMQ8~b&>y$U4Ou*JThnCVDE)onMjA5H$spiU21Pni(V4}@gD -Ax?VqyX+`C_0-wXtx$cm<}&(jLZnur^n0Jn@;gSMJR5;w^q&E(BBDRja%U@6B!Zy~%eX$o3v~%)#yj+ -TMfB11slK^OcXSldbB$-8$O*#u8^Z54C>3FRtY#HE9|wm@(=_fX&e0OWuFUO23X0aRvdk_k4=TsgiA< -q$VljUJsYbd8<+pVqdMn(J_Zsndot`CX%(9b!nip9V<UpP#_>1=ymT-yVa#jLmhcbBsAjkm`hZVhhek ->fd@WJF&VX$Xx<mgi|yo8maklcq*wkHRuf=rGwQl)bLWHN*35zX=Iid=@ltOONo?Nq9S}Hrh<NawDHl -pg=Nms5?fa2$%;ZrzP*ybv_3aCzU(F1qPhsNY9VEgEgvrEAICw&2i7N({yBH~WQL3_+EWG!4swdJ^VF -6ownOO|#8}vTE%9w33XLOYg6mi)b0=+4wfMGS8&pYIVv|z>K>6teT6QuJCepNw0HcIpaPZ3XM6YIqd6 -%_#~WOwoR$`08pyKS$p=5HqtMYJ=UC}4S{nSk&?Gtu?g#4X!=d>bQ&y}KM+*P?6)-nTz4@P|LHqglv1 --mN%B_7-C^(4EoEy07j$K&|yAe14&b!gxW%!>aU|Rjg<1EYEaUY3Eplw-t-MvFul)p}S$-MI@AjowfN -p8H1ZpYM}jMM|gY_udH}n@U}C%Fc1pEwf7Y;^M1hvFgP}dzR<o>_tNrkRg13O-yR$T4u`PsC&Zy7w26 -+Yd~#IfGp<Vu-ot(>&En5`U%;_xFgA-li#c$fv{CUrv(7{#wn#pCWiBa{dD}O<?b7tU_V($gNcZiI=A ->a|N)Q80WVec!a!$J_*4r0z-7xA##Cp|p(IKYuxQOn;+TV+_OnM5t6{p*fzpDEr7IB0VKr}yIOVv)1( -6ola+_PE;EPn*4%RHgMtoFIG%s17V;y3>8saNTq7+W)lAYVdfn>#=?CrG>o6Mw4+y*)E;zmjoJUkR9; -<eI4-$$&zMUB)|2ct4;AUT$~0;<5|L4F%lHfX-ioe!D@V0g)iDbtGtFRX&*)XNy|B1Z{RH@r|hN)uK} -aN<8%2^K?3|8FA0`7v}>0`p!!Gj7M&+w{7`iV^=h;l}gI5w#+0v+qUdo;&^EgdBWh~Tzk`<>lP%th}m -7b1A1x2CWAjR=+TF2ZeIoyZ?CF-Bch!pM6@HJH|u831b>~`RC>LwbG$P8D?cL~GN>`&)xq@OU*l8<u0 -kZaV?yxdS*?Op-=D6`ar@t+bQA2=XW^6ejKl%Ez##edlw!Q))CsU#Lu`bzU)PJpxLx?X(30Ec_B9Jwr -IO^+{y=F~Zl8vo4OJ@wj+<&_mmGHPW5<9%8yS=<>-*N~6tFR4Dn<J2lc*fCeYO<AC4A&Q>UZ8$avj8p -fjkA2I>TYmTj44-17NQ=)(p(TzukGOz22sKANuFhgm(N*PX!G2v5~_|`uy196Bq5j6#qaPDRuwBM`^n -L=#P{A!N2os%%;?Ro_W-9Kb1%Ro0t0SEbMPy=8v`HPnGzGflc&DPeP8fs*E^#fK+-^Vta9gd<wp!PK% -F@9rSZ43Pv8vl_);WnUF6s5$cGf*sI5*fW(fe?!9!RKNVbp9GaA4DxCN)>X#uG_|ffy;*U=qdCY(x@f -e>x_ZT})+0swG(_T!{9}95wBl?7>qfjKWqftqqN7wU<i)o4;u6fZ>m>!j98vW%V*m4w#FXVUK<e$tdh -L1mYvHdwt2@v=%TkYX~$wK0~qs%*g2!ANc5|?YtIz}&0f?Ud2@)oIPZr={X0KrS&7fHN_^8E|N|E5@U -g;}4!Di+sL-oZh*1($pFgZT~c)%~XV&Zy`6^iTYAiuU!e%=k$AcPKmL{YPY!>E7W(+h5#_A4bi6_Yc< -FiZG|_esLl`-1jcVEPSbtWk8sp?!I&=mCgGtSehSvx#bwTl%e!7L4L>1Z@SULX5>o)cE{H4f>6cR_u; -2rM4|JYr{@99vhnpe4)}Ys?DTRg>IH1>5WT!rNjsy3(A)?|;{kz)MMW@J3v(B|^VN3EUvy{3?u&yEl) -EjP!Vb0vvJg4Z=jU06@3XS+7?L0MSjWh~>1+h)jlsR^y8+z*Nd@9r-xL?uZ>N`S@!(4XtI~hvG^WqwE -fkrnMhsTRsy2CP=M~^{g9$5Lse@)TyZIvNxjU3gG4eIRbejdyu*A|kW1Yq{H%ba5ncgEDXD=2ms_mD6 -ba&XATc0+5t5ISmim<b^#7kaTlgfRRwKbzz3At1XPdYGa7}F}=?nYxWYM{>21sM5p)@phhvMQ+<k#1= -hM__ZjsmMvU(%XwH^UHg)7IxszOxruIm_%N*VZxW=IN%@8vj0$#03!d2N;|Q`wL-{KM6;eaDTd@B#VP -ysaU2&SFpR_b;|c^p!ryWcwC3BAI!LJ~_&K~~5KTnM+pM2D&Bwt+o>OJnM!w{b!Y4sSg{L#p3~4q2^q -6M?b<C0z+GUikV4qCdBK3EjX^V5)wQ&D5aj?ftdKfV8+PY|{3N(IqufcV8d!SIP{!u97c;O*L<z-ej8 -S<($o%YB{mFOc@3w<g&3w5VHbyzsrH{YbB80WQ`bn6a4BzMzg%scIv-BRd@MT#r3YPQ9}M4gHr6}0tr -J8M}DliYOHa+t#LZ2uMpACdU81?YQO<7y~6WVz)MweWzR9y|D_JoOYFRFYGRUH9)PqenX!?uN<>DDp% -mXy;nZ+P)M3n^fW5Y$#D~@ZTRO7^6O~_FuKXfpxz>*Ugf$?V7Hrel=k5zjxW+1`hu2CI1pmkC+Mi&`> -7CXC5It&f$np4EFxNBswO?vh>iJ<VPIh&mCbu7AFvKNH`8HN_=>-pkJmB@B?NK!))YGcjVb|xAYTk2< -1EE{;Kbi90z(yd?0H6nUgytqVUmr`I2%Se{!~Q_*ip-9&>VOdfautS(+WIA*heC6F%w!3O!Kw5SGTDW -5B<(x8u<RPKV$x;k5qWf>YIH>fhj07ES1ORUc8{4<UD$%9&mKpobVqpW)TmIaf2?R_vJEp1<i%H2?S4 -0Q-x6W-j-);T8B1Uw?;J>Tkg-@FTwd30@s<R=&BvEQ^~;;<~T0i6#56{HuXT!r!q(xBK_=`v8Qi%m(w -VoM^s#(T{Ko{1x8*72E<}@D?3s`%KZ@iDG*39pJQrgfNc1G?YQaKr&2u9CPjLdQ;_{(JpwzXxBxji%| -freo@m+dHQbzCzUN#-p>`~(y{?bB<S2BE+2U1Y)L7;{q#KcS1M4S7uKn~(5Lkh24pKd;YS$ssq~X3;i -SB{CVtz?RUxN4R69C8jA!RQoXxw5KAhQFq-%RBW8XAxuagPL^H@*YD+Nyr&ZuRX8q}k>vo%GkYgFFNN -78$Ido|3{q*sX;?h80wNiz>!9($6h38YPzr40tnRu%Zqhc=wp)6+m`lvkE~=i8V_T|jAiIsSHegzlxA -%sQAGWc0%d^F|1e!`M?tTVci4elVDYk0dpNbACSy+~2W|0sabaMR_)i5^NEdJuNcab%@q=3DL9g&>nC -L{2XtYOOSVsJDcxDy_1g;<Vv^o(jxG#lhEA}xVqXc*J-r}46=t&?&Z~HPF{7lhnL+3D7lUC(<_{(!jg -KWh3K$gk7TM<k5?<4Z@q4z3j*f#2?ek^Jt=+1bTdwR@3Eh@w*aBd#T^ivmJ(S?3hL5!CUZr_z)DBF^J -Wq6?hDHo>^Uz0sy%tHqCeRsgp#4#gyP*%<OG8@1+)|qZrU>uDd4hFSiWQ%(aPjG@8yMEk-h3UX~0uI+ -0E>0Z>zg$jAp<63&uI(0?{HZr}tpcn(~}78pG+-g1&VwxQN^~GDV)!Ij_UO!+7567J89SHcSu~H``05 -Mlu{0-jr{5|K;?gr%YBEw9x+mZoduI{olgf|Gn$~8G!%pwf_={Ve;?_+X-NFWJ4V@bvumhMDl=5`Y>_ -X>0$P9Ov#Tl<DVy4AP1GC@`Df`gAnPVXvv_Dm&(WDg@}&X??bFfeHbTooRu77?fEZ|7$=Tv?F9k!$uZ -t3Ekz!@HNyTYMh`s3KM9f9$9i`E7{iA@%yH-f9XEr~qp;YK7@-fq-w_@8n4Y28CyDZ}k(fNxon!WwNc -{LoPVoPCNNjBk{tbzDHu4=3|6$zlpQAGHuUPMIs2mo*L}lP#vEILf%D^9C`RAxS9LAepP<d0oM`grcf -pq^q_c!YwGvdD|P&GZn8tfP7krf?dVFQC!C0dKTo%9W-3ITzhfHf57+}+R!y<s={j@+~=zBV&c=*l~| -o{;i%Z)_}Xqs!<#o_v{P=bLWBR(y&TCw(9QwLF8qnvj%r`|UJ5u;oR_;cbfQ@zyAf?7yj|Q_b1K&QU4 -b-i%}!D-{Ha;Y?7%8sH8ze|O)lKi-(c7#*@5>AvpUH!tItJmzi&<p#FW7sd=-Xb?xAY!lo1Sy!dUbIL -QIyp(D#g;uvc$5(uvOpYLU+rkW*mI+eqYv&q1D1wDNUoxKIT+$fF-y6P+!yzHZJ3u@{wl`YOH$hpal4 -_`8qlFtUQcu*o>fVd!C8@_2BIa?v`_S{*`$3@kKV-zBy5x)rz5pgoW^JpKt}jRDxvfGd@&8JoYQ7>NM -cUL_9(lML3J}kDx#oy~il>{|$tJ>%tRB(@nj}%QLsHzuWyPJ(JD24*P=SWoN#(Wm-={KL%_|GMGs1~C -6{4OJr;`Y0x35v_lOp#JDr-DvF0Ze5p1v9fA5!&nmUVYsY^g3&c0Iq~4S3B{oZ8EHi8HIw)?*m4fE3E -V%w$a{=d?bdZ`&5pjmw_5&fBOuQAkuir*oXG>^%i4fj{ToEj=xyj3wkrq2ChN!M^*tb2yY-E;R|AVwl -vNh<pWNWv&&XJ3S&O;eEYwEdad`RJ*b`QE$<04f0b^p@y~0AR1^R0v92vWUJmj5v_bP-PrOT^zczRQq -CLeG@J<xPDT8Efoh&t{o`AZ@#B&8$qryUO#a~uKWb6`-b;Ryo&NOc-}#^s5QXA6O_DT$!H1;ur)Fr>m -ofV2m^H{g6Mt0n2~PY>_TiuTbqYIdKGVa+?B^z-pCpv{<C}uv2V~O8K{bz5Nb)ml2pxv&8GZC@cYHnK -NRW>o%&($NAoMdk5r54rN${`Pj0c=!$BTDRhu~voKl_-%e{vy@n;nZF4t$P2*iV0Y+{dgX^cjxGkJUt -f83e_<$5vVY7JjUxXd>;k|8uy`KOKy?@IPou4;&T0nrD1MMj-LA@9t~tU)J<v0QOameyBRxkPROnJ*j -u3qXWloA0zO1oHRy(IDA31BW6)JqD>%!zs+Xz0k!!HsQvcXXC=Uoi2hGk0(@J_pH}iu99rmdJco1Acb -6;7R=O_F(u$#`$lfoiu8*pEaf5BJ(AT=0m;264#hegcY0OXB8ITu3lA`Q2ItYH95p8~fqItcqdORezI -$sBW)Xqt7CjRMZ_k>3nbp|@B5*l&yqHaA9N03OJd!M7g2+vvjsSM<W@ah145+HA!CJPK3&?x5g)>R4U -fn+0+naPNY?4@UBe-ksMS0As~6|<@57;w7#1e;s*1G)Qs3tNhG7R>97U}s%5PpEtW$&R|-(qy@=4dKA -RDnD_=({|2FC#L~>xP<vA+~9rDpPpRKv+)R0yk6aF!&=!PYmi7odcSd~&L)+6^?*McmBzqodIeF<e8O -*xtWgHXjejvB--c(&!^UiVQ752XurnS${5R(!jY9pS?(Fev4*b;oORNT(v8^p(%+uV{u-*mN^+9Jy6$ -V1<j4Xt@SE}9jYYDh|XQ`|(Fd>yk?t$(rjs@-c>Xk6@hLkWMVp7FJ5@x!K_#$slar1ImvdBxp4xw2C? -|8#*H!j-gyJfe0^}0fmdWG69$KRxGWU9GiIP66XKfojZ4q+IYPdCA>^1aZi-XjoFj<tH$dX)yhvNh`V -UM#BjwpXvdq4`yL))}$DV!9Z59M;v-fJ21}pxD45v*zgnFmcpfA24`$xU{H>RLhhnZ`d(CQDmOCx2$V -X0^Q5OYvhZUK_t>aLeiLzVF^e2#sO{fw8A*>`tqG?F%wWR#k562h=>ETx>xTQr8Vw!%`NKhA65Pl0L* -NhyZ*j!pnn@;{>4jv1~I=s{X2-EaT28v3L%k0xki%sPsbJxr!V~IiSCfFZ`$-{x&Zqe)KSS1Pj$@Yr5 -}OUPUL=`p0)F!eP2gDtxPID#?X)M>L;&iCuv`Tu2T5pbe$f=>dP7AVe9oPh6Y7P`}TmS=s>`oeUYCjy -!~bS>vtxWqX%~2=^>}1j|AWY<c<jo{9uavg5yu4bSHTGf}rfk3O@X)p^p{VU(etD2r;=p3D#xv9uD+# -GqC?{h&fCr(Val_QGmC9hL~dgVg&X_i1|GBzYj6rujHRV%&54Au_RN3Uxo+~oz9x-4Sjg76?lc(>V9w -$!W-R&`)-ZFGwS5G_XBeTxk6Xqrb4qjtU{S7!?qCFsg8OBP2h`Jz)jiF=2Q~=So;@3d_}i+c+v-=Z<` -3t-5`ml2)J`*|L8L%RT4vPK)kI`;sqN$s*lL|Y3}=IWymk3md(qncQoQ*3sW3i^>=l7_|8QKY{6M1Ix -pw$%Ah54I%f#Bm(Pm=pOZHdTw}V$ZCNt&81Z3)06P(D6`G`<BlF-3<_QqnB2heCyf@m0#`$6UQYP~IT -dJ9}PZV(pLL=C|r<&>OR}iUEGO}O_3+6*UV{Iz!7=<FVs<Gx9jm@*T=5NCgdjt~y1;nt+$-(h0njb_3 -*t#=k4P$$<E37*7Z$Zp&HY|+NT!%6wUWQJ?<0F1-F4yYzDhf#ZG*83(m4Tpej_+=60VA(Wp6ErUha)y -B6eMn<Zt2f@m-F)l9#Lb0RodPQ2GQ}hrvSBQWnl*~^q<xJxlMq5gBAo#AfmaKuq_fW;$R`)nrnu<NpI -jCEh`?j#Gq18n=iZxyz*S!-%6N^S2^=TKrgyeY}OY#^VCsVb}H5vqKC+7fS`dIMreRKjK)I`r~>CLyH -9mo<Vq$sOXqhZHUV8T(fv~6cab*}vBgwmCty@ou-lV{oF$FfI}!FieG0{Q(Muqwo?}tSm#)s`ONddxf -@beft6cOHJ_}4OsQb=YEI49BN0iwcaxazyd`07%9{y(#bMCW8H9h_|zWnO>KLeMq&;28^kQ9xQ2c|$I -iXBM@@K1Yx33lwy(8o>Xh(b(`(K8e}@&KTZ*yZQ|Qin?kweygllb4kGa2@m@CK+^0!0jv{h7UpYPI`{ -8#{8JNCO(O@JB}eAnzP>r`4xE~KOQM)eoV2U<l)}Dvk&Owc)73h02lla%k1}nv11f&N4>*8EIZnTRCd -UwcR<{sXU8@KKTzrDW+I;mheMt7m+I%s(Fj_J-;gD~&EBP#9^8ceh%Cl|EcTBBaeuv^|L&;8v*w?W#Z -Dgn7+wAGPpIND+ZW<u|BfnO9{X(-z~4uepRWS=iYmXa;ul#^KZ}A|SUm?`{t2{GG^ImO!%oqFxeNB_w -;LtXM8_L1RDp_sz{VKNT*M9M=uw~RMygAHY*~%50ac<?P0`r~&TkHPcgINr?;e_$_Toxvm#Lb1u1{Q5 -+HalaniKT8+{h|4*XY${cpm~_U1t|D@$tMeR<lvC0t(ax%2ve^)i@(wjn8h3Q8_Desdq@LBKom_?MVa -gRB!eUFi__*Qdbp}JH{VL$PfJiB%gOQ&~$V@_QbK;xF~v%)9com#>j+(VHD3d2uW_3;ec$|i$?qTTQn -RIUqgRw9w{P}hMi2R_eiC)K2htq)OtWzcB-bQ?X5pGo4rA!j;16)Le|OLQ4%>f+jHGkNX#cqz#dl&v? -J#Jp3Zf`PWS0i<CiBbR15QJEukESQ+vvzNdkP(BH+%)Qu4_Y_wq!K6{sLk_NE0S7R!Xnh`Z$55pAEHb -c)Mbhp2%z6$jK6PzD{~C5KWgsLlChXS1E~!TmN)YQBwhu=<Ytp2o#s)SMJmuQkY1XG5t36;&uc81m7Q -4uDS(Mocp+*Nfuc@B0s6Mj4e*_<`N9fPN5HRW^9c#_fS$!zaf`o7l*BxhQ>}V@d>Ya4Q6^iVoybME(s -w#kQ2KTM+Vb`1b0tWNGl}XlJc2Ia<+BShVa+z((nfurcIb0c#ea=B^ivrA!gni)5<}6L|uO*Q*1~4H? ->pHa@-|iT_?!qoVsy_GT#K{Xu&{|J(}?VXuNN(Ng~%yBOg2nfmWLjy&^alz_3h&4(cScE<=@+g=m9zK -!av3{Vq!;er5~0^_eHl|=dqd+!LnScP)Ysat6(dSRfV@P-)Q_RA8IlhJXqv*F&>^EkH^jWwOI^RE%7c -;xO@nh%@LLU|5x-Wy~cm=Ss&34#I#$Tq90$bIa*p8RLNh240`SO&ZHInDx<6|BkoDHOHI5gdG@;mEkv -AYu1h!ix*2KfK3PG<VLgV)<*YjU2?BSj6fEXFdhI4H()^A(>0{O5D**aiRes%MuAk$IbZ}J(8G6X<>o -Er6`rb$6Epx6g6ufYA`xlC?x<?HybDB*~5;Y0EcXLk~v1JFj?q0uG}|6Pu4(ehLtPAS!eC(t3qgomKO -&dvBbI!OxQ!ZgH^oR6!An~SeLWd<=s=}dTOf9-Ov*zAd%R09CgQvhtH0IzfQuvnMR6!8X_=(@J2Z3C3 -V{?zPd3Y;JJ-~8N}N78}?^MZ9bEv<o$JH@Y^gSj6{}0ed@$QS)MX*>w;!u?@%FuThI1&dtymPLwzP~+ -VRz_cd#47K3FHqrq8<m-goyGF=waO7VN+I5d}zE1iwTADv+g*Jl<{TZJCj#pE7aea(8((EW))<IxDl% -4@2(Z3Mv{fm)iE`e2OgKGD@jv_Ob}tV$*Gcs(bOa*z$1au@1-CvY!P=nu3*kG3FULk#kg|el3<R1lA` -a1GJ1oCZ_46%Y3u{i7fbMg^j>*|F{_X*=znqL3BL-JGzZQFoIw-L{bF2e?o|#7Db1R8+1%n;rPdo8a@ -gPnm(v&{0X3r;!l)ydI)&2^yktf>M-QqE0+(0KDw|+4MiN|S3840rpc1S2`9pi0_Sjpi;wfsLs9fArE -i=blVnFc_Q%e9r`v~DYko+Eciv8XJPp#%2-?od_x0~37fFB8LaEObT6WOt!}K6Jn#*{0G^LMdDC8)j5 -cIE#BKC9?MYrJhj;@+C)sURB#-6$2rW{4lRzv&#Y0Q@&qV9peEJc1dpxH~2^t*!Ss6>EorHCT<yuE!K -0TzR27Nfo|Ca=s!{fU5rjzY=Ugx?-B1n+Z134DJ>Y0pCOEj(iU{%&6#dcMYAT<suy9A*H3FRSp!Z(CN -IIB4M5VMQA<=Co#Pwn)Ba#4GHP`B&IBqZDSvFt%xkSS*GR4?voTn{h&%Rh3vvFWCZpYq>CCH?;B3uNo -d^hj`oG6|5{N8s7T7e)Md~XWC|)ltlx>01fy(ucRrgCmxz~v=&_Y4e`XKb47oRa4&Vsl54KDVQ%XMdy -b8^KI+4o;Rm-eC+gRRm{|cfo$z8XJRiMr29C(!%zp{o_-0tmx(t8d*x^+T{3HuOV~gVJ_rBxYY_<%~- -kF-Ya=9f}A{+J8{s#55d_DOC5Or~}a4CfIr3=sgN!r|cslaV5?v#n6SDY**Do0AJ6?Q0A!xB1sUJ4S> -d|!isP=LHi=vJh;=;X<Ie4UHu84m(*3eV3Qej73jvB2>roAIm}nf(v8s6#-p?--x`BTK*a>kjKI>%YC -W+Oo0xPMPtUN<HkjzP|8pgb@E<z00?4@RxV^E|r+1N$jUqU;9p%ePo$OxIKQ1vVPHIV#Go3DEcsA-gg -`*KirkcUqt(mpR^t1_=tQAQ1+J|89(%~749T(=YG-0p&5;i2cs{VOya-jU&%6$kzDFn1NG%Z4L@ie_S -w`(?4u(^4y|VVX;{M0L1m9U@#C<GMaM2lp~r2~&rt8-Sw<d0%_H3hI&41ws?|6hVvv{hZSUh*!DW6Lc -PIZC+shh&;V856o1(w*<3~e;*UNk7navF;rx;n@A<`T&4OhPlli?(@YJW51!g=7(Eu;bTGfU||Y8aNC -q7~o7Ad>gddK|mdS3W2Ccjbt#k<)kb7!EtH-_v<`Wj!>G=4PN@J;Ihx67ko^fS_i<AEtV3mlrByuh_r -ZfQ5d5KeLAq#p|EsDh1%JIIGt}YjEDTfW7SV?a0TL{ufEa$B=^ZO@6sF{I~bx%Z_|$!ap=X5AU>}H9& -!1`A}o0k?v59nBTlADmfg@qJ;%G!;;TYh2awo590v$GT`}O|KzpD?Uo^N0ZLHK?8LLaMt)XGe3M3x3% -(R$*z@z^)FlNKuH&qAr-&5E61oAn*K<q}_<4b2KX_$9mG|2VsXYY?LzSXbm0X9o)p(g_R}|zbBGt=O_ -QJRG%Cg1x0G54U?d>u8PAy{Pi=++y-q)pSPzzFq6n;syd;3=QugX|%*<*eRhATJ(Eh&sp+#A5%Q&E?@ -s&~G8BPZSfF)VA~I|v7?g%@5&dJQf>6XBS{8@%eSmGq!Y7f|vJAbY<Hz$E7ZErn5pp?nhg%e8#8QHsg -NT5Fzq#h<XN`$}kEq84|)Z-9P41^5%HeCG~gE9rph?1{S5!__3?$$nd!U_v2Ge{FyQKkI=0v;nF`UGL -}?<06mlL|2edr4@{?z#x|bM$bt<x3mJ)#M|kG$@hfu!qv5tXB?*1kVR%ZpW?PZR71~2w!c0Si}xTo*8 -zn-pl}KFBMr$$!>0h0llVE9g$RheBEpV*MF@IIvhMePb8xHD#1HjkUK&_MiZjzQ}dlnU``wx5c^3` -r~dSPNK;+Z=R`5a-xQ?VQAcl>(a)Zibr)gqGkV9*?@Z80KYT0#BwBQR2Dn#-tP)>gEoA-Q)v}8b_!;r ->R1g7o8saO1Hb6@ORJDT1R31d7X^UOTifmwkA1}|$+ymnp7KXAv`p<i2aogdQ`@y-ph!D^8aEft2Mm9 -VcZ~97)Ls8>oa+vEZm=WU5BkLKfNO_6mr(-7{67Z-djI{^uJQ-e{5LN14Hp0M5`USS5PeeZsr;zFbNW -zA#GjOeogVDS0%wO*;uz?Qj{F0X{wXr<KtyLpE0y@n+8srIa&$G3Pd4lhO*?|^ANNW=f<F2U`U98fe_ -_8$;)(M^QMs=wgAd??KgWSlcIX@_=om)atN)#};KZTvgt7zN4-X0WATTj~EcKXW$PRT0{?Tn7)|=#qn -jCi9e~FCQfs7C9uW}ReAJD_|H^Bk+z2MvQxatd{>O-QXd;13dyRu*Bne;bPOvCAB?VFPqCwhPnne1== -l>ZtXzk%JyK*HdY)#Qy0_~InNd__ACwp<V2!S1Ka{n=`Pf3n=4trqyza`#Q_SMC$+7xxL_aGyAUjhpj -U!=8-g;jeuIbE}I}icCqQR1nx+MtT>)M8P+GWhOYTO6LlhSLF<fd&QoK!oI0%kZc%>U50Y$8dcgWT0E -Z`)o0J;Edt+oF$q$Vy-PtXi@;vQ*3RX^9uzhiL0JYg^s477IE|^4DqC7V>4obm#9`Udp05*jF5jwOIJ -ypNaUV4Sk;te0^R3)Cq{y=?aLMP;--bR0FEXt*;;BRzP|fO!g-}^s&zO8`9u1FmqI<fiETYiLx(rs&_ -9qG?PaDu*5$9H@v6dQehg*@2T#9R~6UKYTUX3<wsmB-a{8mnIzk=Sm+6t2_dg@eww|4*W18A@~VgAsI -7^|?$a%0HXMZ)efvvWa)k-ku<pNGNy9bmh>EOB_$DWL~%^_(>hFJ0=I<AcZawN3$kmiKcuee|66c@@8 -8o+-VkV(oiR%(jc*>cio=>eSf=ch$Iz0}P>8?<e|&6E`Nu8tyUPF1UZTbZT3X;wqdb)n53QlqXx1myB -xR3amBOdYXowO`8F@X0c7u<|}++zNYvDp(sqx5-k@rfjyd?cd0;MeVs0XL^v^4OphiZ`x4y}e2@u*2b -!{^`QG!ao4aV%ee7_Yl-uVTbk>#yr}uc?Z0_aXTqw>#1jd706O=}qcxoea{@nu6@RV<fNr0xc|MGyCq -PV5m*uetvnT0(!)I3R?x8<bSpJ37Cx};riB~%sLdR_8+2;6qc6gv79+BONl5vxZn>ekQmsU0i>=SebE -y!(Zc`@h}1vi{o<ILr9Lr~boPcT)8j{)4mr^Z(IZ{=>{Z89WCD9V)`9{RS*w@_3N%Q_KJDYke2|^UEj -xrR1MTJ}sg2=s)eCuv4m?jK#=7(o*6;kmG0#IdmK8&a-}QdW3&$C#mGXz#U``)`fnWPSnw8N<QL6_%l -hKeByzQ13UUqE|S=<SRVYDq)$Fws?Qa7zIG%i;74PN`j{ylkwEz&?N2_FcLa36-xn<Y67PCgEqxrOci -tC$nqvDmxFcXr{3Vv92bMM9Ur7Gh^d}iW4PbD_H!75Pkk7l&H-cgp9@-rIYup(g@2=S3iWlKWHUxal{ -`siUZG;}<t3Uk#9KK}%{b6p-TR)zdJhNGTcLjJ?`SHQ|`a>hmX_)T@4P?<2ZHP8^F1i9oBTf-b{NPma -&f08<nsx^2UA{|17+kqAn;YtX$k~o_?>K<roz&LAH}>`s+#dk=H%H#S=;;|BuzYRtdW%^62e*i@)7MW -vys`Rn(t@`+APpToLS^l)Z@%Wr4Mp*Ub_f!=W^*}uQV(o#1Ex<91YHa<HHMt?+am11d*9$|VO;SlY&A -R@U$B0S?2xhNG!E>p<=!V76P~^S_{<eGr;AvigBPZ8!VBmHZ877uy#+DG2>%sEF&aL-S3^um-AB)7>W -$3EJqB1T?lw@G>}zLz62qr5F5_2s19bw)uuAL2cVqhd7ANHKV=gauDdWiacIk;S_qBT@x8fLBKv%bUq -nES17N_d8FxQ90pB3XJJ)3@`@i402RJ_Dj`2=f%HCjb^BYG||ypuG-jxz(%Y}&H}QQ`;-CYMBMKK$}{ -OJrW+>zX!fSW>nkV?3S=fOQr$lHbn%3h@5i9{jyj0e%qF8`jGddc6^cBy;nj(7C&whgO%6O*3%%OT8k -!<~)Ne>nM3ipCXWS>cZE(vq@k(YC=7oZugcNuBUE&Y=iC~)M}n&nPS$KjYVkN;U5XzNsX5h$<EgV=<Y -=>xuA6i-wRmg)8>&i%c?#+UGHc<fb4avWS^9t<a%|Hf}pee#N92VhtuTtC@Ek(A$8R`MK5WfHa}$Z%) -Xd-iZ%bXR}Boht>!>^#A|FXlJHnBWbOK-`nuqd1KxRY1z_*a(S_d7?5WSqN8m^8iBx+0;pHdO@3>dt> -QytziSxL;BL~U~gnqpJt1>gPa!F2rQ@0n^yX#N#h8B^Z)>^k+JE6<9lvcrk={pGh`v)+|7&X=Kp*vYS -{t+*}G#|e`!THbUe=`4hg7!Zx3P&KCAb&iT`M0k0+hNVWyvldZ&Ikz~@jxVkA^S%Nhp3+-8vO|nNIxF -TA1bwTpB;GeFWl!dj~0K9T=K*2`R6M94^HhUc1)TPhpZ8yKBpwn2jkFBD>3`DG2;V#b}T#W`I4O~{R+ -|WLm9b)6!kfJp^2m8Nqm6t5b}Q$bnX|0;v=Ay_<S{wk7dUnnST_0IAMN#cl*^2h|LdAmt)H9FA+`r^e -u_s*qP$b-KBwa0i%Ad!jHBege;D~*Nin|e2d^_J@^?*;$%3+tbEOr<Jl*BLysZ0W;?vU5)NneikbmqG -hk~6B!j;r=Jq?>G4q_+feGD$<+(%RhxUX44*iIBz=uSAQNS$wMb=M>c&*IFH|hTOkA1iN&#}|Lv;1TA -z`wKnWA(s4k<L7+Sa>>*yKbEt$p~goGv9#cPC3`~>U=LSZcvhrEl>A2kSC8hp%=K5=Zc5-?W59otcIg -=9NxM6lL=s-QevgO0$8+CilHr-VqU7p;aIXG*m`0vGEwuBbJ_fQLeFnmzWXxjWH`r2`LhyI+7m_{+Gs -%2(4u-l)hLEd-GyF_o4l4{_@%9CgR_V&XK4Y>nQN-?5mXwBHsyu*jIDmBva50e3NG1#nLw*zN!cw?R% -COsds1EatGF5SRFBY$j8i%+;QZzbm4A8Hm+4%eQwF|0`xxjKR|yE&s4nmQry5h8I^;!^%JS^?-S%+UC -m2HH$tCWz-Lfs%bV+uWu1L2O`@43t0UWl$7ym?50c4frTJy7x-SLa8=x-2aNH@~kbdg^|F`2F}w<&^e -4pn5a-bd7VLPQ|Ws7A=Ot8`aO8hTv`Wm*I#C&HVw?tp!!x9udI-xB4&^dM8XUY;CCz&sajM7mfqKoh~ -4;AwHA!1n_=k)>&(!P9^Dsw1=$LCwPJ>^#rdg_A48^Gi>_Y{W9)T$sbr#6;jt7*b1B@Rr#*yd)BTefg ->AnGxIXC_Gl73Xhl?6f<ti{tS6|4~ZaI<@gBd*buiszL#bm6)>jAbitW%JXyFJdjH5Ii=uUHe5}*X1q -Hko34&WW4{axYI-hF4Lr@{RlR$memf1(rCo>uv{aB@Q0JqR@wMA|0#qf8vg{a>uzE@hbe2_cM2C}W38 -{^I~b!`7KVd9JWbqDKW7CXlC#!9h<D$k^N1ghL5Et&IHTj9)+`FSkU&j<VVI+M|X4AtaW;vSB-DuH!N -t8?OoLiIqzLgVk0Yo-(|r|!tsvQoJC3r-<Ys`cs4Ll>wbA)p@2TCdE<AZ1`o#*DBv#p|U&YG}gVNVIJ -PStZsuNwB}i>^<E}xJU~EkmkV%$@vWkx};2Qths^=_SirYoS4~7KnX%TTe{SjX4V!BRk=u8i?@eINLi -gCykem<61^MD2OI;sh;hqk{t6LFjh^dh8WEkAA9|L^g)IwZjP&c>(w{Bqd*HRnb9gVVT}8S>ce)0ibH -i~LmtwS*EB3lZA6N#th@@jZ31;A3Vl7y;DWN%GH|2r2O%CCCJiM?|#9`}t1+Eabb8VM6RcnpNw`dZO) -e^uMEMes)-yhifOutetB4qCDT>AizA&no0k;0G@v6o~(p1kGeDtE}sq?Sa-QdJQoY$yMm>e_lVobC&< -ohHv17`R1mr+5nN_{BZcmxk#&c>y%+N<WcWnF^sFf(4S}a%-}D8mXkA7}j8P6&#C6m(OR$Q?X{s7zM4 -v$7#zNC>}i^<Th0$ef{3z&51TfEN-l~4Bl-=vh8d3ur8-pJ6Sm-g>N=nUujF6q9rN_axc48)dTc(xTv -d#X2NobdVbr)G8NC_%VDplxyX>=2A%6>u`j(rzh~*@l4|G+324guz5K`p^!EG;s}kETkoP9Iv%V6T-j -S=Q^ac_86o{-TuU*ULp9B-L)B22t;Xk<M_=x<WDEsym#`!-qg~9}iB0m;(|M<n<YPny$@VoQopH8(9p -Cei1D0Z+<qQ+kP;Gdv+{A0UJ$44^(!;XI-KX0gG^r2HGKlTObr?bBQCq{nCKI#)EOdM4d5g)zwggDA9 -7o>0dc7)6plP3Oa-|d!<JvpCDuUQ2Wr>$3ft81f8Tu1Tje;X9Cz~YI6T}jt)xl37mot;Z1}cZG0# -@ls)k08^r!H+ffV-2OvoLy$SKB;^EVTuzqMlSnejIfWZ#mTGXE1`gkIV+fkx;D}-CTvFw}lX4J_aL*) -$-QsL~%mI-PcQ5ehTAI2YQnBO$WF0-14%koyt2K-Hf{M}<S;MU)lVD6n-WcN#^-68xDh2QUH`^IRw#b -&s-&Da$55CH*yPyuo2wV7{MbK6%jd_MEa?{W9X`&9k8w*Y)K)c?|4D30dB{wA8ae0}FEOJ7hBGD`aF! -cpc<Mj^)?cFS?`ZcbAQ7qH#~M7flrSCO)vYqdtqs2ZijU>5f-;xySx{31R%h&%IKhdS}K+2(~J-=a35 -#vJBnAJ8!i$)|HmheUrnw=NYTPO9{GS&fDO<DX-0FC}4KPDToL0cd$>?lqL?8@K{W91R1ohDc5_`8{k -)u~|q02FE8*cu0QBsQQadt`GYnvYo14@<}%?l+&=c$Yj^mK;T4P0Ha}Sw>?4S^E{NMWxa*zbY(<~-Ox -l-ULN;yU&(3Ey{vHAr6%~d&_llM=k8Y0q#XkGBdxA&UUbcM7{}%*(jL)6?&u6bhRa=>TRsdEy{=|?9? -gBsLx}6Xs$#ni6V=>VAnFry+JDLNZos6iesE0|o-?c@v@^`Jaaw^hR6pmJ%rL%)!CgVCbGsDEb`d)`X -?nmLP~p;@k}*HueALK@(BA9vlZ)1MHj3vVx~x?`IA@$4=RVgeFn^=s<MN0?TJ<8m0>n$%viIi+4p!KW -jSZ9J{u-0d2Scs!0_$fEj~HLOaJiln9eQK$Z2c<b`)M%Hw!ApN`Q%pHSuO9hOozz(>b-Ul&_>24*sJN -A7$u&uo2SU35np3`G%N<Ldr5nn-BcxWX9BcysMwz-(JH)?zUAuzS2rrB(NG=?kc8v-G8s~xt>*19$bO -cQwydaCxl?`24VE+T{prKsh~zRJObW8qz0={#bK8LFof<PuU>yPBzv$-td2{(N6M^wyss!lxHCv5>># -8=#46l+DR*-YNHc#^TlrN{OjH&SyAmHM~XJUHHvYHCIxRCvF#t38p7zCOUhj=fRHFhLq2vG)|px2r$d -(lRuS3B03{%sFI8p?uFZ;CHG4dYpqFIsvn=m=QNG&d$LV3446gFMJ-OuJ+pTxiDQsQ$6`KAEC8E5ii8 -kda}9(R{`u)(+@mFM>J%%!evT8+zDa=}kI9k2496QBL$ay~z?M`a;#JGU?MdG5E^;t_##@?6ubI*6tq -WB%mcBdF2p%MIvM*%2;S5akLxo)|T_>)x2){E#=$0aZ37^s<7*fCnu`SdV5v01)LCoR~$}P*xtT%%4| -(dM1!F)Od9MH`&%j(YEdALaV0EPfKO|{>$yt2>7K6NM6*KP0LYZ1cm$5}<0DFkz|vWyp2q87yh!Ht+E -D1a|B}(RjNNNg>4^EM(yy%}*5ScJ-KyJw0#07gKA)%!o@_B2BDk@U$O^H51Z!Kw)z$FPr<P{>TOCZP? -(l3RSvM`tqBCY{B!G`J6;~2B2L<lN&MlC_Y7<`ebvP61>@3;EhaSla_70z^4<;et@bY|}U$|zRo+r8l -(6bo1!MrNadFr)#BJZ8Uxl5WP8kprhS0Y8qo!}%&W(iWCw6ES@t9y^6Xy+#P^9I~tI0`J~jV<W?mBuz -Va@m{CST2{<WxbibS_J-!`JWa`=)Y4e{f!s@yjVj2cCoZq9Y@I5$G7)O(lq`t4^Htz#CtT5vd^p*`3W -*hem<xb9Z}Ued3+>@uRSS<IMf3$b{zJ^pPtr!0SZ2Ht>e#x@o}qP4QgfSak;&;ia+TVWOVej(7hr`kB -?-0oCjeaMc!U}9fpp`$EpcC?u};02s1(-{~2W;pNjauX!N5S{FG8y`u~?=Y5f<)QeD87_(QSu<+1<k# -gg$qES9uu#67*hvn-!#h%~KtR^7g0>cS!u!$qU7Ae(cM2bH=3p}t1+yZ5uSvTygf(rFAkr*ZMJ?ul-W -n6Q(nNEG~J$Twr>jhzVTSBt%}Yd6ygDgY*$bnd0P;Qh(>-teMd84#ypp_<OK#=N2QS(O!*`a|8hCp`h -xEwhx#>fE(|-}He7#;xV~LX;mq<hb<6gH2YF`6GRoqO3N9`_RTz>|V3EEZ5e%o+|Z*yveu5qT{<n&Q} -29)fe2r1AmsbxNfUx6DG@MTG7O?*_y+!yE%jkuVQK5y&-#=%SIP9KbCBf(i)xsCzNp+Yg%a6Bpf>QK_ -)OA<T2B+(V5NcEuy%&!Jt#FEh9^U!}Q!`$Qy1?#x#4>70}9^K^lEWoZ$Yo5>dM%TwJ)GS4ghzBGO4FD -HNnRISPA{ycf$mqdP70Pf`A;9QOun$_&MpQtR~HktzxIL-EbwA}-nMXe))DSSkS(<Sh~^vM3E)5bGzx -b@Ec`abUh3z=A#dGJAfAsGuZSk4sIdd}FWIo-%K3*OD0DA#|g&O@{{6)#g|gg(XV$)P!DHlm}335e+e -xAjIjz_nEmq_nn+_-!r=O)%L`5(p0w%t*Q_#3}F(daP?IAan6J3c?pU$pwaw-l-s^f)|wNj<7%??ZG; -ORu3j}EQEcQtx`B$*UK2uHG%R0d485OgVc-TmLjQTOBxKl@pPCpXv0<9ufLoBb8gtfJdh`FZSYkM)25 -i?8?uN?T9{d}teFNUW0jnK*(!_WA?gH_3QOtFF-VJ>{p9`&}D;AH(7^%Er2VWmZ9DAjQLZ|xW1*+CC6 -ghXrPw{3{+N;N3F(|5nF)uL2krP$lx&puZ;H#n&?P*-D4xmW=aN-nJGeBulnCz9zm#4d}VsFZAzBvUa -3oFgai6E70XM`NLj8p@ot<re{Z6koJ>N9TNP*jT_cXeMq{Qr{oUdxVZTd?3eUvb_Qw}m(74TKloL-Y$ -C1VRWS5MSS*GG|wvs%>uHHqjkX6-x_YCR%7_jxoo`Tn7P+1rwADqvS*vva%>Zkh;^WduzqwyJh)HajD -D`REuK_=$MU&{-v9ut-Jbd;P<nWH|ioRMi7n_-9HC1(yc3m@eUoAWi8-o0NOjbx-go)z5ozGVw*n?lY -AkSxJfVgl0vckkR+OeUhnnxJ`whf)9go>;wK5d+6e?tH;(MQYD4fD$nM%TZ<w}03sihu)N1wx=t1gdU -L8Zd^h4`e8;wS6PFs4y0FjU8PWv@$U!@IK8xCj^$<i3^gij1BSR~tEw0ed($~#+3GK<PXA%?eaXi2&? -CpLb@@;;MzaFBAQHkBv@AUdZ8$y~aTqZCy#aQ5leG=b!ZV)Rn)k=tg10<p%+@p_5{y{(K}g(gqbL%>_ -*#R4-ywYhc`@`94}^~tgZo9Fr_kqx8@6MnfCH^!faiI~GKn5!L>z|@Va#}jmJpfo)J^js1%wQ3OTyxo -MjKc7>KJL1d?>-Ji;`qH1pIZFRQA?N>a@;0~g^j}}R#lO&&uN+3--~Lw3!gbS!9gO*Z1S*AlA|BN(|J -m!S>{fp4{By16|D{*@UJm*vSNY3I&@}$!a=;@~g?@ykDfn0<+$l_vA4`Jp#}F1KKJ}o#mSZ{esqw>fe -5XO_m+tiRqv3)a<(`K_EqJ7#sO;-1Aq4$9M-E<=LBHW*MRu%S?i?>eK04Isu@qWB2fac*%4Fc@0!Ql@ -esq$7AFGIr`gHc^M-Lj2A95`Fg^7=L%b_-w9Xi+W&hP$`i?Pe6M`HeyO3<%P5I>O~i*r}ty3zeN)+4p -%^oNQWKIyDB?U;8QXsyH_y#j}Xqqh^CYzlWU6gN8i+TJy){Er8J*Wfx9=%PUSL-C8Mio7{_f;UE<)&k -+1`DT0mjm&+cQGe)@px1-M>5dD3sT@_mHlZC$g`d*VU*F%~xjo>|?(gs19`I-P_h+~Ft<)6wt6Edqyi -i$WEMYCb<SS9;T|5>E63Lp6PUlSnNKPqnq?WuEPwuUmIp+IHO@@&gmOW*)!|0k&bv$F&ujN{=9!*8ka --uO^N8SOuoB>ODJBBX|&IoF+7hTFwsaqn+36H#mu+Y_d*0lF2FDu44M)dWh;{C<m-YyleJZGao^$g(p -J!0@v-8`+s(`rDZ%1vvT9||~W7x+n!7iUAzh_4MWDiB{3*V8I2{U-A>21GeMdTLdIa2OaTQT14DYfK6 -6JBr9|_gchaSij=XTh>4^!m&yB%Fd>IFlUFLom7D9Xf@%?^0|s3#dI*(ueNq7@M)A*9UNR<zEA5qK!J -D08KNRt>+F{+zJ22_z@HJAU#@ulP-<#J0DaD29TqNeb$trFG0<<peVqyY{W}7)^BeDmy!P0if;;^U_z -FHZS2&ch;zTFH;+7ZG$<0Ix%%m9EIk-1ZIi^ymLSnG%WD-kzREkBUv?BJ*M*t+)yp7#ovT5dTH||>sz -l_zibl3(D2)81^$oKZ<%xN!D<M5{De45?z{9<Bc@evTf%lnHkbO>Agysz-93yFS%ifSes@SHvGvgv`j -*Pl!lzu524QU#(iKvA?78iI<z0Vv2kmCjBj{AWC#NYluZA)!P`Y6@jjNk)y7NYK^#RW`YB!{Twa29~$ -*!qxOyy0<`1<+TyT!e&T!?E*cU9*%{HUeFfO8HFk8H*?BJj%q{2vib*Mh&7tvqRIMpoik_;IK9F4yy^ -P?q*0pvACBeP&cA*@y$k&>_+KyxQak?bJA4rBK)Roh^Pe934GaJLxF2hA5FA8)35nUK*$?|Duw=)INS -q$<LQ+TH0R?`t4xe6w!zJ@KkVt-HCzGRj8NrVg69oBqEPakX3@?)dkYMUSxZ)!<jTJ}3UjhEk9Em#o9 -%A%pvDn8`fCnJs@MoFm(<+FepL$X3Q<H-qDUcjJbg!xWI3z#%E{=lO_><H)dK#$%6%Un6=-(;ySCGi5 -2PCfFA(6d=#`dfAX_W(iaxJ%bK(*Y3TfQ|ZublF=Rr(t&{HG#wpXr-@rsrkPh5lnm03@G$27M$1m}BM -SW1jAOGgCh*YTUy&9nzfYXq|rlybbu(u>Q%YfL{&k*Q5G%ohb0@LQ(x~j}&g5DCqt+aJ@eJF6YadGYB -#DI>8I`c<MCES^J~v(skju{i9|5&7}l4#M9Dyo^v<2jn^Bp*<58B<xp6yugEaMavZ2Np3K5hQ3fsw1C -uRYgRP|*p4z9r_ie4`-eibKdpN#r=(c#X1nJ^1Jum2XHN0Gw>I17iTd5(^A!Pw?+jyi;9DMPiT&#*BD -#Gg;(bu;Zs4S&}!VHO;*I$Wf-I$ALJ_k_c2$z1>(YOku3bg#wYqj3Izr=HIPj@wTWc|t(qIE(qHnH`m -s&k*SC!QF=nCfOB`*?K(8t3Y`!>k@SS6v2+8d;`KA9)bdxJi5znjkhOl($}>0Ey2Ev4ctaO?Y{S1nY6 -2zJK5l@RyOafyBIO7pjI<FAKZq#d`?fnv5C(_nWry3j=;B^e7lfR8&cnR7s#8B3>3!geQVkrR?LSz*e -8$y&G^CJLWdlD8ZMfO}S%jcA;431|3hJ?RlCjJJRyyA#>mAS9Wu3Q{V1;f0Q-m^Gkiyb4f?#*ywD~_s -92m&w`=azO1a_TD$@OD3yNb55NihwZQAX_9<d6CeAPq_9Pg71!f|RD{l(PkaUhN5cq|dVRICiuMm+(K -!MFE`_iylq{lFM>h}3AK;#zeCk{5b_<R>^?3UjDyF3s0-q|Rg0(fI31h><|=J8Twb)J#?nz6l*GnqkA -dX+mRt}5SQ5!Y13ThzR(fjBL;R2xe^OiZ@8oCcbQDiu3*Abg%+n&=GUD&}$?YxS**iq;fZTdTzrsMsh -^^&s#-&Mrb+Li)MBVt5>7+j>9zV3xh1#coPRPN%^xhOH5r8@xCX2Cd;)2;7z+)bj<s0^7xXYNmsRGUs -Iu#GK!1A*9uaqq4(Xlg7Eo+AVzJTRUxpV7ab<SREe_ajL=#`X&KG^6&BTxU>1ixeJ%M7{jJT`zpW$J? -bU7+7hikyh&b>1@WxAV=+~p74<4kPIX5@Kz>vUbb4BwgJbXUVkYe%1UmtTpzZWHN&hQ=n)CioVfAkh| -7*DZdgy;4_AeX#cT7w1qlN+gh=IV_C;CK>HjNZKkP!WpF@W&#BKdW}>>fy_)W?B(k0n2bgAjPwRqxnY ->~ZL)Hv@)`Dv3QV#=&D_LVbi#kl!sR<cI3Oj@x*0oQV8rUX%C%(fg76*g)#v@Tau|{*+$qk@0?+oiOb -2D)gl(1U<swJ=Q&zH{v4z-rveTNKXDWVw(qIzkfh%@Rx|q)BhZ?uQ&Sf4I3r*Zy>hig}*^<chT7BC)9 -Qq;Mn-9q5a*F0lypC???7eEED8ztypWB>l310FZwH3xQ)Q-m)uchU)XuscR+h9WvXKI)|R(>xC4ugbW -E{C>HCV@`jURJ3pHH%@kB+K?9LOZt_}PsPuHY0E}04fh+{zEBvzZ%^+Z(}4qwk`MffZ~dj3@6vucJBL -)=v23e`cTv&uPYh0$qY(te!r2zZ)~%I9ktv&nQ3XM{>l4&jGuiEcvb*rHPv&jFpSo3;98jMf^2B4mX` -pbcsY+*&|SVE6v<z^?-$3WHej#^t0}Ft$PS8ozLGbi?xT8gm_CUkz4KH&OS=F?dzMWxCo435cb660dB -?l9OG+GD$opr;RSXhbzy}48oI(aPqmIhaABmNJL`%56Eqs%V8l^{;eFirn_~s*4+CMDdYQ<K6*-<@)! -`cwfl7r{K6pScjWeV<hFO@79Wzp?f;poqsB<!7eKGcS0uFW$k)IGkul}|4gSnIxqF}jYP#{C2d!0aU) -InLAU@XBfD}>pjr0e?O^`cYzdtDLg`d|dOJfR0Qr6|0O3(rOpT~JLcVq`Fhr0dX_z}o$cBj5dOkiVt$ -PRIFX<eC1)i9524<3(EXFG-;qXm8#F08$i3-z6V1jy0GYZc*V2~aCkXg{$>z602UgYCmFX5hg6-}_9^ -AQ4QlakbrACu1&fMTIa<hVjT<I~l5T*aOJSu8<lwm%L*($W11ejkanyF|BatV{;-1S$VzbhwScD<rX2 -DUNs1GUAZ*d@)5*<ZoE!6k*mnI9|npfoz{Pi53A*+JC>2-Q%wlt0V75N)~?z_FANdX$2H~zCl$$3<AI -Ak3t6xg0o(?(HqG!gdP~h@?%{aoO(#S!DAt57bKY14DYg~_s#H(u40vW`hv;Hp?Q;Q?6c*#;={&G?#G -$%8XS8;Sp^MZ77eTw}mkbhb#xr@|vJPvFjDwjvWE3QN2Ef%@Uatqw%;9#%JE&xOLW4HMQJ$*zy58>c? -7bH1jnZ%N*{#W{@b=#~Uff}mt;f3j0;bmC!}R6%_<tLJc6IuzeZLFv{IuT>>0}TiU<3nk5Jo5jK}Z<- -Wri8XkG7CK_B{ZU_~;7|AI)#<2w4w7*7$&K@Y65}{<=SN4{UMhSews3jgVP>#I`$*qRA1Y?<d&tHO7u -$7X7UGAHYu>`C#IA8Ri^5qIWd@NW5mB<$dtL=K}knKlD*D01vo7`Y@?O6CvBV!ydR7pXmByH-RHZ%6n -%YWPD_|4`T}Q=-2`OQh|(*53qs0ulCEdeBEc?d8tSK_G^%qz9S*<MUF>PezGCDq<0?Nr-D6Pi2i6%bl -u<M_U(Q2W-6sq=N;Xfh5zO$yfUn5Gv9Xjl2PTQuf3VvJ~^eUe)MQM?)Jqz$=qX*A2%-UPl;j|9Dg*3Y -UKAZS*80Nlij%$_|Kb<{mtWzw%h03Ienw6;LyQ0?H}#{Y3}R$U-bsun{>c}^gB&~%a=T_bmVytNy_>` -n)D@$`M`!I-bgMBqUV5?%BvUP%n6?aS7(`mYf<buVLrRXXJkn`st)L`JjEc#;jTcvN_E^P$ycP=LlA2 -sVEA@|`*pmIOJWeu)A$%cy2eA#>d2dLdInUlZVkvvu@Qnd+wuBDap;BSZ)+iphy<+g`#xmq+7sIY%lS -Jr?V&4SF;Uu>Ly7Vs8PoB-S<aa<H#(`w)Tw9#14Qj0PM9PIOs53#$BP8>lH&z#G6Q^EkxYL>ynBLhTV -O`czu$y+>fqC=mv<$#u0-K`<Vto`u?O_;;8ZneqqL!#b8t>u*ZUPunaIb;u!6ZtJ3p5_s_*TmSCX2;n -d>H+^V{lK%e)ObU<$Z56lbBmLUW7Sdf}h)`ax^94{c~S+u~?!OJNL3>Ahg<WoSsqy%j6Qn7n&a5DbVE -9c6PlGKt}LtP{4=T2&awW1K0eq!`a;)k0VNt(C|y-)fxI{iK^`Et=qHqhc8_i;!y`kN)aIgI;Z27J!% -3B(_D*srTAtoqu^R_o$o(jw8nIUJds+YAz3K6{pg5S)e{gouA(rrV=P5J<)VSwWe657Q{;TQ&^P2tFf -+CQbj|Jw1c;v8{85i1!HBm(5(^Z6je8@ydH0+4R!eY$=wMscsxu6uled+U~F1&fk8BM-<r6j6-Fu0p1 -TzZt<8o50mIX~c*p{C;YtLf$#&t2b-z#?`jw2`L27`XR`!3;XP=@D9f*rd<!T9)&uMEgzu$v-a|Zv5> -3((f*k`0mxQCK#7deJh-ifGVQd~g#`&f!_&Q5($pPy%tz^<wuUhljLOc&FxJ80UcI;2yAD>l4y8O2l~ -t@~Fn(9jm@N$9<ISQH+21U_}ztsvGpH_NmOp9LU1dZ(Xi0(Lxav_$@C>PIsdR>^7|bOb|HvR$7ZV?=B -xt=ZY9dbURJZtIlVvwf2Q?JKKh_QhR^2u&38mYi7%B;-7^PEi}zBQ*`x>hQ#g;)RjAk`ZCmp7M|>SYI -0a8Uv@iwUx(Ia?ck@`HWAjOj?uXPEFpd51aa%@JXmSGX=ZOH%r?I!)s7AHg)1N4<&I6IQ+D}^KyO7CC -W5)CCthboc1q;SH@?Q*2^xqPh=w|H1RrbxAiWH+=P%ipV4i+vlgJUUlUVAf`xC>Vz91$QbwYWl7`WAu -?=yYU|;Pp`_d}lWTOk2V0-UN1tBX4&69)x<yJX58xkA5^(TMSL1W}_jzS>VWpZi%ir>&GeDUWH;na6T -aWGzXkIp|O5AFn!>;MQ@X{383Ha-S*k=zj9adSLp@x#o|Pxoq*FkQDN)7^hhoGzhn9YXb&K(tQCSw!> -^*i^m6ee!zir*>&C{1oe@yDF*|W)+DFGsi{M%QdT6m8eXmPBI(dBAx2@4XocYxdICM9=QQ|nU@=R_48 -t^G$X1V&Rx4+tQ(IwMbjvfQ*=hQgqa}gX|#4#^u3lUf4_tHa`7x$ilC##cYl2>vm00Gc=>aO@SpDay# -x5$UO%KONSMUHofn}5O5zkwg1`2T1`j526hP)jB7f%=Aa!(Sz&pc$j+(<`*&9Am1SI@#@HdW?$Z;qUA -LWw}_Q{15M;+z<D_k6z3JN+h3fM=f{?N2Y5A9YQ-I>_$J4f*RNS;9Op~iIdwtOf~k{{d(qK>M_ooem8 -CnG*yEuVT$7(RI3PJp1#u;DM_i=Y1B3_7}&k8;X=D1S+hL~y%YnB;rzLJCG5=^O3b>+~=EP|VwZG>rg -yS!C1ISg(~C+k31(X&RX}*fJ)l`Kk#nm+zSb>+8000sc^4$-CbKT0cq@?xG*wkz01;E4Hr!t>3q)oV0 -Q`+62C3MlLSDhZK=*x^2938T0Fm&0Us7bh+uvC~usm(%;KBxnmpP{k-t*9ZTDPoAD&TGoH_(`wWKnDT -w+W3@A2gUx=~C`gdX_3u`kj*3~HP6Ix83lkvgYYZm{S$x^-DA0Z%4wE<f($#Eqd7|d<Nm^iqY2!tE{d -ui9X;F$DbFGV(KrHYUse3nnz6J{TZZH4{=5a9Y@<Tua~-qa&i6q>+Qqf+Tgqpr5f-lTGP;7;BN+<U#4 -;LYnu&dHjfV(Rv-^)%3m#;}!GV9+|F_u%#6Wo#U;K@!}}T=x%yr|`wSwd+;r9(az^4cdbCb0%Vxm4<2 -nB$`~VyzLbycHYYV-eo+k_-H*~V7!=a1m4dy*`LvzP%q|dGM^SWH4Axrk_p3N${7H!l1F)}oLbx2vUC -osqx_^_B#|CSeuy9G5~HM`bM%uH{CVdd8np~hot5*!U$I;S8oUtd$75?@8sS(xFz#s2XK}?+f}}9lBE -g@{+9-n=E4S7)9C{B#Z^KBCZxvq8C;^~Xu4TY_c!w=`UTULM&UAYZHez0tSb?)zRo4+@S6n^Ax-zGj# --AbG3-8E=Lx!pYcf_|arMH!;J%L4_`Bg{GWdfg|>%+zx4k>QfBu(Z6#Ok`Zh_dly%~23flRI7QJ_gdD -Z{leOX+hQY2~DO#uxO;_&7Z5yByP6f>q3|%Rb~#)+>hXzqgH$|Td3^gyf<24cE`Y^PwO;v5Yn7eRMAI -$-J=i5x|%Q^Nh;l^=0Hc^7|;GVzmL@Am@b7GO2Bmq4?$9K|E_bX!@N{(5iXbg3uC%Gv(djuc<{Fn3Fj -zKU(vlCfyn2Z#BXN><liA&_1T@;ls_(t_|_|ZQ}57k@zB?9*^Qe+L<Uuc{9Fk5dL^c+wC`6+U~Nk;SQ -Ww=tlYir$I1oAt_bIbY-!g(0StKalfj%sy)o$d<@|=tF<)|AJKqacCZ>7qDo(mlXz$zsydv`PhuCW4T -NQ67>QMbmzpOfy%>Ft))M@;1p9A=sDJ@U5>5np~&wg^60`UC<TcpeJ2G8IZ+M;RGWFT5J>11Kvw9wGe -ewVah(h|)ywBQ~;+2bdWmJImWp=5emQ0dUzndbgGxiB+*p=r0=57a?AFX{3)L1Z33mwmteC&$r%x$I} -+!~Kl(<Jb@_OiK$W9WKWSxj$afJ${DAi3O5QXy!!=DGd<jeue!?`R9!4euaI=`_N;PxgR6h52%ij#U{ -HQC*DuQA0vp4k?#BLxA5hS_%n2lR_HG$vQ0+#+=5AiG#k<?O|LY|(V9uaH0RP+lm6V|aSJBRtH+t!uU -B{+XU=G5q1gwmEcA;OQ#xB1gub9(KO>dS%KZeN4{@UxrYr}hJYXx`{{mqXix&7<Alx6_?ERkyN`colg -4-<-_*?8#a{%vw`@Zv}@*nMnOk6B||1K={laU@=ELg&iOLw0~xyIW4(Z0w2+U}3}1jIi2G7tYop@kDf -eT9Ee8jOVfdx6MR9Q2=2s2<fsfi!=~{rx)D2);bZ9Cz46m*)C8&=kIZ1OE%Hf$uSfoUU|#?#`~(**of -Cm%B)~%OjdDhL-hOm}J)$gdrGXOU6d^wd+i>&w79*K+dA>Czx=1xPL{%^BzH&N~*E}?f3OK)3Ih5&Xw -;yQl-|q#!KXMDZ+~lCInf!fc(Dn5$BwhDT1E&RSWlr(RMXAq=tG^`a9-QT;9H-_`waPcG$mgdlb1zgj --t$d%6R(dgiWyx(5NcAUJqNRQIbu`3n)ERCgI@HY=%UR!KHNyq4c;^qE4!V$#%&if?((0x$0*i*d({I -}Jx0kiJZVEJLr3!<ZB^-0jhN6Qa|yW1m*J9lOk=<yDZ8t63FYdmn+R!>0~17pXKDvE!Tbt3fY)7$T<R -4i`gVswMA5SYtD^GxK_aD<2szMs~$-4qW>pK;)HYaj>-0f>R~;=wPI}*EBkGQ(Nd^ndW^dxe9zj2~Lv -Th3Q46e3d?Q$575vunLgyt?zAH<-&{WKd<%dcJ`8OR(}Fl&VJ`YoXn^fREs_sZ0IyRk=MmF$UWN?h;g -HV3R-D+e0v5Ilv<jjm4bso3gP9#zlle24_0`d!a$Ix^L>eiUMyv?dq0l~*JL}bJdh!$P{tnbz#eXuPV -jdje6=;be~WIcOy$d|Afh5g%nl_Lp0BL#eNvXKoRGOTpa(1hz2W)h8b^v@H{M`^v%n$mR1QmKE?ZnA{ -SfK7BC%L-@-!}d)@VrlGr8C=1-XCdsQSACv48i#A0%OaJm`<H2m<53?8GXlBmYU{AK&>yv;64!CXlbq -Pt?b#>d;Itj=EXuHw&lfkrqYCBcwR=h`!hZBS*Bczs|{{32J|R*hGMb;Y5Lb`pJub<Jj+%hNwd?_RH0 -akGT2a>-BM2#K5EAX%A|s;>gn;7LnKyJYmT(LKHg!Ci1gPihq=iaOh~Fr^tWfpQ8?A#=kUU<Ubuo@B6 -pl<H9QcWtH_&7;=9Sr1SW61-Ore!q>#6XYBz<#yB;^nt!DKt1AAdorz0T=J7?1XOA)fkI#;L?AHp{<q -v&NUjvaF4Xd|w(QXo|ZrUFMkyUeC4A7iC*x<RJ#M`ZXzLFO1n|Axsx_eL(m@Yb*Ah#Z~_cuvAfPud1y -6$g?EFFK(#X?rFZ!0Z$eT8>^{I35Baz6woz+Xfs3zNMh9NoC&@u&zC(>js6ijcezK78rqf(IaQ)h)ME -OzsMCH)|A98SGiUsLX3X9HnTjVRzD7pNI;B-!CtIUG->m=Ig?V&17!?NGpYFMBV_0`uoI);e{O3TLZb -b$D=$~1V4u1EGWM9_O0zjM_dC>;W=;E1Fr2<rDc|PR&&L_xxwi=k!ua=3P@%I#(GT5pFg)n63Eq8 -KwKKY(K3$TzNMz4W>zt8(3ut^mp4%5iIPD#9>0U-#_G}r_&RuDUHyvf=8hc7~0k@CrkP+UUn&qr~&Ci -}EsCn<p9*GJ<&ilyiIn%~;HQmwt^M(<#SxO81Ij-2i*Y*_~6U$5+GMx*E3=+g^yOV?(Cf%kQ+;XpO|! -iwofb9OMaE@!;Xc=c&`Y8PA3c)LksMAP>W=3wWk3DZVV;~O56=u!i1tmqr{ykJWT3Q^L}7vXsg@Vl<y -`qh0@QP&hBsY4gP$f3y;t(W?Q=djjbRw<Lv03P(Yf6Lza1^E^e42EF^bV8x>PM%n3Gn0+Gw4_oe5#@) -CGk29(d-BtYFGe|J%Ffsrb}MGa)^Y9B-~6>}ZfdqDg-ytc^eXRX<<juUA`jhsB46((>646k1NkKl^S6 -_v9PkY7oBBM>#C;5E;<}#iTh&N!=_zN@HdfmEtO^^n-(z!K#R@|d6fdz}(wW!7OOtd5P=~h)M@iY`Yj -pBf7s>gJgXJ&WE`js*`%bH1vzcr@`C=BdQ`THU)by7aFH>IVC~y_Ev{V4-T~c)*M$enZ;FXyqmz{eF> -qQ9gBKF48oK7`34O}5-$}M3Z`*S|`e#70(r`<ot4p6FIE0YrkiF7`=#p&!mGxfy2=hWga7w!t*+df4k -?R9fbtu#-|ib4>6Wr>rEuDH(wBK|ToeK}tZR3*J!aK_f7*3E^l9>sM13(80nL3v&B{dJnTAdftr8L?v -1R-yK_2VhCCLkZUMVBzda2do}k(6AfJbM7R#Sy!`+QkOI{PVWtEkcdHAr9{2L?o6G`FyaJsb(>QpZ-v -Y`hs*h`1U_PdwS%1_Y<*Z+$+u-|tms`L$p#W9Q>H}(wr;XI>8a^g0EC%w%_^(Znf37W?=U0xj&QlrGd -d8Ob!*Bgf7KKm<2o!4Z-b`FE4hc})&OGR?E3(|SvPKfmfAv?h|@VO`AWjw8O87Zh!<~qN&?9$?&A`jq -dD*ES|T{oomuXQ+-ubFfo@cWa;=Ma7!z5bw^ZH6oo;V|)?!6|+CybRmPoZBD&HO**mB;n@baTgW{hWl -#cse7LsUhpBq!E_fONOjFy4&pmP4&yRz<~W;d;hyVS{=(zOJ~LWnN)mUUeloV$1yvhy~HK>bRFYxmWU -WUQZLUJwtpl)y+W?3xigd_7EjE9GO+l2KPV%#nv9Jo)72e{k;d`iOHzoKj^f|+d8%%T|UI$sm$w0rT* -cKpV`mfJLEg>`Q`3EEK^eyh(Z*O6DR~yAOsQ=j_#Xal7JzCAaN3eFzlB)jECXMCw~cjvYQxwEL+3)R| -b>9M;G|l<|*vo=&$?KQRLt}$-$nEl<3jojvw{kDRi`3;UBl@L)Ygc#gCw$nseev^&-DZ%^pg@AOGtjK -a#`+dDMav#BoL#IdaDFM>Y8P75+Dj9t;Zp(62*QI6wGaOdNM{c+?=DDs}i+M?YL}kbjfZU$P_pNGZH8 --`J5w%l?UfvWU_oYrfqt>FcR%(J$RB7C_rLS7oGc$xh{H>4|;bN#H$By>ox)4^maWwc12zD;K8rNK&p -2x&eIU8)bI;X8Dq?JNrQodzT|U`=ymh`f=NhM!wl(0bhNx+{j=1(9>SY-Ft@)SA5Oi9EynkPow$|1+y -6#P=C{Z{>%1r^?JhJ#UjPV7Tb|m^au}lR%`_Z@{$tDDaFSG_JSI2;zC@UWx)eG?G`gBOk_F*_d@KRH^ -slyI3`Wcg+>Gq0*Fhm1*9NSHq%~F;bCpKEMe}#_skjRQ_<GbXc#CyA~-}?!smG+ut9{`6NK-lIR!vOV -9M<QH4K!Zp5K7l4RmasGSEr8i%-W8hAh`^hC9(QCD0<3p_WN=0d(V$heWI=;Cu@z!efZ1bJ2uMm2dZ| -3lfrS*UFjSZM~*_o{pl}PEMl47f^&7me7aVH8|BUE+arf>O?XdMEDD)2RhA<mA%KO8p;wW;;iCB8KHW -<hOsoCu!MROlY;j-XcNUd6t2x3$fo6CuXHJD+L`atiSSP}1>TAMuT2F0O@!16;%_I}f4mSLEL_JB?K) -^qjsu5JLCgWYBJ2~7vZyM`qO>_T7jarA-n66o2^%-wpeOl0IfZmr)lr@a7OZHtlOO)Ab|rNN#vN+OEi -Q-4xk+I0;+hR+JSJyOrVgG~XAYuB>me4i*>ayz%gUCmiA=Yd0zCz{P@pd}qI5%;k&-NT0<pChV!Wz>m -V28>SgD_%W4vP892v|4J8jeDf#}FZxkEE{C5jOkTh4AFwf84y;VL$DmMg*a(kq<IbL?s)n<b<#x=bxY -A>X|6d8et?BFM~rfCJ)c0`Z_;`tmBh2u&>NA%cqjk+Yumt$oYbXzF*RcgMmBaI|mzx^>H0Zcu~LiUHl -Qr_XA^aO&nKe<~gB51m`U4=w>aBYMqNx<gn)?X%1I%sQ-aYZ|br4bbcoVw#YLcHf>il`S^tUM4M&t+s -_@5R+s38TH_NzKBdvu#E`iNEY9#V3F=;st_rV$er^I5xIoU_tPsE2_l*M3V_1YDaz%6?zg3F0bKEGis -IBIH}LLlLMC3qT=t4A0@a+g8_sMS$;yMmp>n&+kaGhZvoF)TqBUmW_sLnh`>$zby89D6@^jux&E?rn% -X9Xi@ANzDQ8t08nsLxITQnxmfDkV8__VQ37^B=qzXCVZ_RrN5@IGRPHocjVGz7L7kOisk5hZt0M9IW+ -ltDE#WeC7TeRB=_aJ{?NoG;#Mtr~RJls1JLC+x~+cAuswH067+^PVw&C?kd5F@N-06TUqqK!3Na)#AY -wa	yY4)7^r-548=BgA1_;_fH^xi3E>As0ar#td^8(1y8*UBEOs3!t=d9NW0kp3d!g8E*uY-#&G?8p -(hm=zKm;QLCLBTl8uSjzQa-Zy9wYir!X41QX<4@@MfHLqD0uJ_Q+g#3JGxU?29AxAEhBd)qzOU=cCJS -LvDmxIQZ)#$~1o0Wbs)wBad<;;1lfroHllIx=LFK?*YN)t4vVMDy_yxBs;uyOZD?fQB}6ZVFnIWgh9j -Ox`}0s9Ig_*6x;W}B}y-r)Q``abWznK%9(#VeXLr6ZAegWlVR`aXl_2<k=OPrUH&6C&<^ICHsEmET+c -9DDrlGYCP&z8l8~|6=O4J~m)QegBt}H;0?vZKuOS{jXR4FR|Y4`SkgX{@*^k<sb8fZx^z^T&Ri1_kJN -YADVotf1+IfuNl-gQuh}F`oS9h;B_bggE#>qFoq%+_A4frkOwh3O8t<dz&^<ihD3b&!^!xtc;7i15+5 -{;pmxId>y|#~SXj@Ak4oal%LvbpL=*L?)5p?}K4Nwh6Yf0fXw3Uqpkh0d`<*=FF_Pk-gz%?NF#A+2?q -l1}xNpa@W05`mbQ#7U0+)iH1_$)WWbNFPL=IQLJpME$QXe^R>}Y>DOa%||#=l~6f_*Hqv;R@lj_>8E< -Avl6{a4!llkX~%|EfW>Y}F)>oj)~*EFCe)eX0&7w}ZmzTbsBBx|1gcT!-u|j`J?oo4Ek-PQccP>JL}H -$e%vef$_Z^cdFM*V$@1p)#rDp&4hI)VNGe;1mD%@D&Oel>j*|wbdNK8-G`-pU&`1=fPA#8wf$s66!g7 -nmy7&eV2I)s&w_yHGn~IL?E6v$xv8wWXrF4x2K=IdByGU4QQf|8{NV%oJD(5mXCKht`Fwys`+)w==L7 -uN2lRJ7pMN9@j=tP;vv`*H@M@38@XOf^0S49Q;z^MdWnW|5yP4Y^v(E*)-fh{4%-NF|TX!1K247iaW^ -hHm&kE+Ln+SJCvWftURm(|w^I~V~%^gfkO^DcJf|9ZBV{D)+R(QP|L)oWs5Z~!<ya)+oV%N*HPnyo=0 -h7|{;VDQyj&FEND16@|mReU-Ydy9JH`@1%`yhQ`1v6L_-`R3;<={kT#qI@0+yi(*r;=->C0+0O?X)u? -Tw!N$Sn!JUo;uoYS4%iCV@(jMZW51CR&Kn)Z?0%mS)?E=&_L*;-^h*((HwmDCKGEOoW45UGw8dFtDbO -G<bg$s5F#-(&Z9>5%BJYXw$`FoDgwm?-D4FxHK>V|RsUQy88#wKN<jn2o!0Tho@?Jac|;?f<`{mc4^M -8v<YaGx;g9nKWL#R{k$@oYl9QgS%R)$<yXR*j`NAu%@7wI)%SqUV2_@Z}P&i~^3e?mCPjI_RRe`C-Tg -Payl#O2P_?TJF^44^~1M_-AsHnN|&y6;p{bcqce?Gq&mww)!yrAEN5VJ%Q*px~3c1k^GOm)9gZK5aad -&3~Rz>WTNl~=zAIyZEj8xQMmd+RE`t)A1FSP}Q6Y#lK0eLC%!9PokeC1#y^Q*t@826APpNPqSaTwX)G -C|T!J4wU``JL2WW?A^5|uc_PsaLE~oO6=|!H!O4CCbr7U3c9}+1-}qCn2=>qUfrFu<AD4gP8&zqIET4 -^R}@^Cjbv;(v*Y(KQ(!#0>x)pGNqIP}`A<c``8~cKKqtv~wDBNWI>8yFJVdQD8#vg=wh?+3&9C{If!S -p!bo$zG6-u~xNMqgUDqJi;bm(jrH1es3&{Pag7$kS7%#`>29*++T&oGVW_dkWKT|#bE&NEKWXBShe^G -y$~&kzunprpCzx<|mRijI580-_*wZjHG+ouDoYL(2eL+vi};F&-y6PH@K}T*##4c;28CAPDVZks#q&s -xZ=Ba`p{af0Wm|Po2;dO<cI=c9v#c#F_M=Ykf9DMCX|520r~+rV-#IBw{YpG;ia|;Bk<<<c}Dx=aY+) -%sbI8w6|<*bIu011>y8ghw<H|<Wfggwt)OA@RHqlu}jQhC>HERFm3PG*-J=+urs*3q*?n^O^BUuH|Fh -R=d)cD!qYFJBwj9DF5v)Q`<+kUlmyb4jw?|ME;leM#2aOSQs%Hs#NcNV_iKgot{!-MQcU@<WCMAb!R9 -C}@ZRGH6GtfJL9D|`0q@4c7T;{RTvN45eUoCxsjcHxQLrPsy@HQHhLO@?S5)qN*Z^pmyuhP~i%5@OQt -OI6%4dt6<oXOE0Yu{4t%|B<ex>FN!iKy!82RQ-`qD#13r{@@yipS*>l=sP5%4;nnHWjp6M_?!v)L{wY -p+hMtW2aNIMp~LAU4?Rq#mC4znFC?$PCbw^GU)|1iW>)VeXGC;Uqe)4+*qnQ@2los00#bl*;r!kd*in -sU!IRHtDAS1y}kT(oOJRN;e%#vdOV#o1;hn3Z5RlDIj<VF+uUa)AZnu1o3HMDgKSezb3WR!CB$#vu;W -rWuu2$cz&##68Vuy+=(m#A00b8)l7@yMMi$a!+)ze4jsyvI};_ykE+GT`z%k6q+=2vzY-s3wH!K#>`u -PPk6crl9SuMzb}ZE<=||f9qpAs_pXBRD;{x8<E&Tsq=_cuC=_XKRIq?58(oNDol5Tni)FTN_)z;)e92 -j<uHAPFpl^4=(2GCD?yF=Y3KAtb_ijZuoL^jjSad?&`W2v5H8W9PT4niOXC-72;6RB7)e;)4iQq>oLe ->iwF(9+tPw=#FM*=^2LL(LjkK6Lubzvk?b8X(q!h`nO9<z5HQQq)`Fv?A`wH2_stCm7PTZ6yAL#GUvw -pyjpo`RI+$fH&}QLSMq=wNk_mLG!7&>21>6EXg{!6u+Lpt-F>6?&K=}dQ}bdY`uxKuBFLaTT6Qde>cQ -CQ`gqBX88$H@2;!AFRS4Bx=6D~5&??@k!7L1QyF`mtEUcoB(x6lOB3HGo7>sotqWioLc9JX7^RjA;lw -?rK>S}N-E;<gn}%uez7qj?xM{&V%&w@S&KLVnq?=SzuS0VzGQD~O+89kI7tT-h^?`=GzmYJ}ot{HuHR -yo%B<~{I^whP!uyv}j`~Fl`Z4931oyyk+eF5gzT1lsHyKf90Z&97&ASa<#80AWGMTbuIR3vP*;-x*9u -)f!QovqmIQ5Pfs5+iQ`B<^t}n4jm>r?F%R@~KL)VBzz+6^rKbP%RDFT$-48Ud(IMLc!ERdgu;HFV7Pa -94MjSS*TK9TdzJL3>__f?roE&T=ME<Y>OqRZW({0ZKhQ3PB--G5>G)J-z-0c8B+tO?jd?)T9=DE8S>c -5H!vLWmMzqq^n`7Led_0qnKM;;#URtn&)c@1Hhm{?jy71W0Wfy1b2vXQ|HOQQo*rK@E6+Zd1cT701!C -X+bBDyA@A|z(;#a%<&@O?a2uTnqMUW7JKsXBivSKODKhB%zfl6p{C?OG_R0)nBh_}Ptj!j8&R4?tXv0 -qm#9qE=&vIO}gOThH#S2&tCp(B%X2sRVP${dOxS2%XS59x^gQt)r}3Xx-VFv&k_Y3Ol${An3YkYj8Za -zGsQ>6IYyug+^b+>sxt3glD9bS&e2Gzt%_CJ#Nu0zF{-u>JgN=jxx_KBa&)l(1flar>`zs!t}zV7Xjn -mhbHno*5h^&|fEV!E3&(cpaVT-1>8yL?%$%A4RAEZjtvveQ%RMjx{-rby0O={#c!~|97!ZaT2?%;*Cz -fYb)_C4<?BE)nn9ZqpyWU>g@o!pV}jik^bzBwu9T>Hksbh!>gP*NZt=ZxxI}3rS^cfe>sKga(Yf3>cs -R(Xmac&4+XggV@6Xv@;<r95(-h*Mm<Xkm8ASTtaA##zXl8)RKR0#(^XG2BnJep_!o$A_-UWDWv@s^kA -+8pY5bt?w?#*i1wOrR*ees2=krECQ}}uU?1-;+a6GZ4`lR4TiO`bAdZ-t_wp%$0&>BI_#ed)Ys1#)~P -1<^@GLaw6vxsP6V*;p5j9$zk((@`Zv^!b|42nuyU;Xg$9*U|t`%O#h(Hva(DUT%l0hwp5%Qt}(*$GsD -w1@ZUJrrAqe6TNs&s@rZIy;^&=6ox!)`lefeZ{;?UQsC#7p35oj#Rw1DhrY~Yao9t-{GTh7~&^H=z4R -HSgxTQ>V(yv+GQ9PLh!dla(-(({ZmQ&HE)@L8~d^?iAf0X;4;71F-o+tQkn9LIFm%1){a}pbFX|_2WV -kYOqJW8{a@ggApD8jCw<R0CuzA_xHdwju&B@oEO)yuil>yt9K0N6>zdOIBgPw~6A^g>UQw~d(Dou;5Z -zCws=>Ky_1s>P#$a>;q14)i^3L1#QQhatkC%6m!W?OAdjNaJ8UtW^e#oq(l8P;q$4s2?#PCIVEry|TB -2U!G`zwhBaLL~?HJFC31a+h>?S>}_j`b;Uk465X5fnBJ9@O?ctJ=sixGq7M)_Fm_sR$sLj42#?b|fFx -PiJjCHT0eeEOg^xeSNR+G!$gid{ubGB{6+d<A@l$M#wEzy65v%ymTCepRBmolw?g20l72hxzG$tR$jn -$NJHb9MzA?iqmwb_aKS?cd7sP18jXvX<9YVCp~##cUYynA_wo+tU&0}t`+d8z1NROpKf%&JIP4ol{qm -3>JNgI^J*r1=7{_r6#y|o&EImPlz(E|tP#i`<f+S!NME0rTmn#wR$GQ_s4twe%KhpTr$I0NZ$^<`=Q+ -&iahso!TZpkn4YmbO_=*Z(k?|{OOHoGI<`z!+N8x!&<c_pD^Bk^$oO~IqmV~+#z-_?{HaTtEAgJhp(L -jpgf1or?C`{D`;e?)k(qbz0LbBE9T6WASc3Gnf6j~w?gqtM3}oA~Gyp~n)&KBfbd{}R9W@Ti#p>u>nw -=6qEsPjD36*G*eeNMqE;6eVsH{rAem(NM71?2m|GHsBv*1Rf5@^H2gsRdg6*a%-RXEg1Rc2Zp|N>p8s -lhn@aY+ghqNBdXi?>f0TXq;(Hj5RJ7Cd;@`>H>zCulWdW!{Xuf!%B_r*`IH~}*5SIT0<jPE2kfdAx=* -3sbQ!!q?)2T2L1MYm+SGqkaa+Dx+Pux(JK-)MBft6C5wFMvX}GxI3}*6xCC~OL7HlTfcvTs$D!RxR+3 -A8cr^!OIk>DqJaR+Zk&trwJ=dyna1PiivPh!BEp96z7EH2sJ4b2|uQjGUICZ4n`47i!1=W6rC7@<nsW -Rqao$PGWGk&31IKK(v5e*d}vI2jc4f~SiFizr&6m0#e-m=7qUr;JsH8)iUbbOp~B!`Y~Slfka+ZtvuB --KRkNQ30s2V9(Zwi(tp{vUOfO$TRAxvL7cUdq~=&xY_G!AwEXK3@Ri>nc!}V-PSmy&(EL-+-kC?NW#) -mmBRtvu_K!M32c{AyCa3lfi7D+k6ECEb6etcSMeyf6u$X#Xlm6@4<Jq!^p4w2JMlGq?`S%T=Qn9tn*L -CqFS5GrACKK`O&C2paBiNt1X+gj@Q9}z-JWd<AY*_vmmRb@Z$%;@O2lVjIB;0-1pKO^$Aib`%iAFR^7 -NFtaC*m_Ddvu2U39aS&jN6rlYokzo6n#xRca&wvg;`-Zv<T-qU>ei&N=F6EgsF&y3b_wY#RS^t*Ov1* -LPq~Kvg8sng|M*yQbPeMg696gKG*E^&&QVDVM-w_kf#-5uPHoGv|ni@OTqa8+1yFUv<D~z~%%I4WnRh -0S`OHZR2||1OeTY6LNBA_q?*!n%A6^a7ocM*_<ba^+eD`xYPOsY?s@scZ<zk{=NdjADfbZpA`@uSmBc -pUURxISP@C`ut^dnzjW#^je}X>Q@O?5a32XsqZ`BkDa7}5HUd($SB}Xb_WGQKA%HB`v-<MZ=dtOpb>! -&!WIpu^pgOU%<sGrowr@)#v!WogLF2~s``@%PGv|ab({Kk_UsOYc2$U{Y+iH1Aa5Yq31_LRpI_H@;`d -UK-;}PHVnu^lSFwTz5Q`@i-8_itM$*QS78r9@>CPrg2uB}4Bm)g~UXE0vGYiH^ZsVowQ8@^M$@N{wpN -L#hCUu!7@Rewy&>&3ty_+yWH+fB?ag285%jRE1MoP79J^3V2O)|y4-lLNCtlArEK=e~xTNsN;RqIJ_O -w-d7BYX@fQV-+~4^MvIEByfPi8!}4ynp1|YyzflwY5W=)4%R<)M%}_KEiO&YQ~D696>_uWTV6$jjJ&h -<0Rv=ZfWwKFSD1SyMp1S#PE^g~k-Uj{5<9J74R%BloGO^HGX?Y1<0jRw?+q;CWj!~5W-|`iIy(;**uG -S1+1bzUNK?@1rrSc7RYfWLBw|8nW>74f8z=4*$zfkvBKuG621MnRewi+=gLz8O^xZLh$xTiV2_Zv<pc -Nt<?+@Q`LU$Mf`J9h9)zO4nAU>4Ee$@j{2*n9;-6M>Ys9ZeflRL<}XSNOc5F*<V_um-#Zg0V0j^qWT2 -(NF^Ynzy=EZswX0=kM6uD8XWq|vzJQbS&24eEx{CZeXj>t3bG*UegHSxUE157_^CRt5jhv8vx6_FGm3 -|HP^g3WP8mBq$UkDQss|1d8IH6acl;tbO}Vw?G&tVU&Qe--sy0A4dT4Q<9N<$zf+lVqoV`dyEgkA491 -4cySP`UuOkC>S%t#Kg~mAa{SBEBU6oGM@&v&hj;-9e-&HKp(7n#VE<0Ze<S$sSXJ?nU``G`cKBJvM?u -F?B0?N`3E;=aGx@kC99CDvk?G#Ay`Oi#@J<r5>?q#_^P{i?{d7$2oGU>OUIvl-J^o`>W$`H}^D|RNBS -elkdfld^e<w?3m;X<&s`|fKmCm}Dy2(GXs&5<rFJ@KJKW0_cQ2TG%x}_dko~`+X4JT!g5V5{bd==Gv0 -X&~%=jPrltcj}xkU8=i@(M~k)a7Om56P;3`N9LA&MWB^l<$d^qF|NHF{)T-gX#kvI^5pb9PVT)RM+%j -z24osVC_lsv`Zk%r{XH2co!EjPsN0U%W*rojXj<eY(7!%JCI_68O9;YU)VQ>=C}F^PY-E3_vP5Sb<pv -p=)H*&D$VyzKeH8DtZ|Uybm}9h9ginKC!Q#T(##1D2A?qa;7&i)`0~<DWvTb4hgvWDU$MzR4A+BXRqr -~%3-^j3c>RuBCImdFvsTJGbQ)ty8N%5fZa5UKt39U0P+-h`(Al84a^8GuJ<!mvF|0lz|GXMgLTBI&km -93jd?%a2!yzo=#?>>82*tfk6iuw<`TD9D$WX34oojXL+Uvc8W+{3okd}|y^$AF+5Mnp>7D0h{hw)K}E -3a={0lcU<e45&wJz88r6Asx=6zg#R2Xo)m^(NYEdC#xt%bBG)N953VL=gmt9PWq$1PB2V;nxqyq1$e| -ZFiq<)_8e2Ab5DtD^=~P+O;dm>?1Aou&<z1Ah|0*W`;3X-V+KHf+u+u<=SZ6toRrWTM#W3I;uk0D&|= -!JfEB-<tDh?Ojp^^&jm%Y0(fbTc|tZkIaOD~cyai=J*{GdaHRD8L28{k=;`}?5Lg>~ffD;#Vrjk~uW? -mS&Vtkc5teK1Z4mZ&gDCAF%^nTi28N8xxv0(9z$x_HuPD#+ZtV#)+Jn{N#eqjwlXj!eCm>-_rne^-`k -z8oM3%nN`f&{OS@y`NPKj|5+EYAp;NPGsS<J5-#j!p%Pp`Zm(DH)1r{%>#(7`Iw<-CLqGNzB`_TC#kf -}hWJOF^yb<2XP^y|{%d#7#3K|14jlj+>V4XA!)bGm(!^Wt>j7J#`#<^UAtVE&6ybPU7PtDouJYS)jj{ -l>rr4{vedjRkeo=O)rZMgUB58%gm`ykui@)l(_JwR4HDoo?#DeylkOW13X25cMQW*P-Sj#MI2*9efpl -=!80{uu*8wvlF`!5mGxH{WYXe1Xff-JxWbBa6%m?&wm|)Y8jTx^4a&_zJ&R0j%Cy)8d`~L`>Qh5}T~q -I2i_CfR|JY0PkFvO2&c*4Ji+7m^4(?$LYUkF}N<g?`d-ri)e+Dmc79$6xha$v#&E#UKrXI74`_55X=< -98|L)G?E5nUh|qB%d+#B_9EGntFH#?)GMv;KM2{rmGsk;s*ZHmJN_o-R`zID&ZPce6JR+SF)c3Z${5c -}6A(mWn|yF@IRW1-ez@fCnXItBBWa+d`iBiE&>?DsVzclfi4(O6hRXJnaf7?7133k6Qz;K`iou!KoGZ -!>jOD$Z9X`Y!md$;y3ViB*#gU>G~zfSzNkY1!X~|0-~!gd(gyGm3Y2X=pZVZoVkeeGB}Yh8%H=u630B -ryUaaS*e~=Aa4#ZbPh{ELBNXtg9yV7nELr4UWT%Xf94YFBK~rxj!C!kFsm5@y^vr8Gq&=wr991Fz3{` -#qvhSiQ<SSIQ0Va?F2^@k5aD!8OY6?fF4PRj}gb@f#z$gqM1V~aaLSf`L2?jgtN%wL~l<viP{6l2|+T -jrSo*V%pzf;66-uY&)e!KsP+)>vDQtJk<BJy3kdDCYz;&%jmPr-Pnv9fpXc#^-{ma^^6-$Pa8J^*T;9 -+mA1o!hC~-FHBQ?f>33laqTkjevJf?w%ye_uE7HTTuHg=ecWTA#a^dYA^ew<eoFbsl5dX#eW%9onKx| -mt_kh{Sk`vj_5(|u98+%{M8WtKR{K>Ur^OPBmn*zRee7AA4XN`FQck;nNTA{iH9I(ty<m{w+fFDzlsA -);?iuHz;UjRUGf-+UV~e|@5=evN2?eguA^-$N1-!2>>_pQ5nppT#dJ8378bO#Wqhi=qCElOt`c2ip4E -Fx2t|PA&yhn%4YUTiWLs51oMv??Wn%AMn%HZ0CttMsQW@Q1xYO#JfJ5jrF?e<qNC%;J?&d?x@cT_B93 -5qxNGV?K-Z2u#6JPM>mU^VpeJN;+P42cf91@_9AUYLqJzbID@p!*RK4KG%2tE5tt7<eNq2UrZPG<@AJ -w~$Td_Nr+5PJ0_!JDRT0)j}Ns`-!~q_i6h;x(bS5I@|LAfNGA>J#Xyp4&3Q`4MqkuIc56y5g<Jz$Kz_ -;1(Uzl=u?DB#tmnpgYzMuTn8M8-&3+<$A8&itx%a$$2WANBLm2BW?0Hm=joCV$`%wK(;*R?E}zFAXA? -0QHs*3y6{z>O*QuLkm$j&!HO~qjh2lEM$e?JNtRZNFv1bkTxwvj9;KRM4RguqR4-;^*Ii5&PcD>m5xV -~AG4`o3@)wi8U&OH(56UG3k2S%~Y9KKk;I7w<cAuJ?RU$%iYPzVP<+~)+T}^yJGQ#1X0`0K*fjdb00A -cfKkOs`Zq=c-VKm(vrUnBE_D)c@xRJatMnB$E<xYRKidxOWA$;Q)wp<ZBZ5ZO_l#VNs2<^U71ftZ&Au -%vnd5sLr#1+~t<MOAZ=8!x4L(6`HSnxfFRo`!U8_msuopeoKRU^jyJd+ORLTxqs&dg6wd^m86~=X;kA -XKe$nV}HSw5IWK?@3usxJtEx<D5vI<90cp8_3o?c>k$bb?wu|W2x)NpkzqCg-<wucu8--&=ZPdTl=Dy -zp1(5Bp_Kr^VTz?adx^4I<B?7<Dd<R*ctxj+F<Pu5c&8}8N5QDJZ2Ees&x-a|MJwjkurcrT0`9Z_ppU -3s!uAa$MGKc~!b*9=_Ui`6dy104S!`*iPuDD*waucq#p|4hH$R<Efp7($M<&>;WWpY^i&Q)9#1BktKS -M4x(gxPrGsQi*q-$QXdFdX=c+|0~7m{OW`Iq4yT>y}-j!!Xg;*qH3!_sGG*M7#q5ob9Je3Xan6{SEIo -;<em{Zz(Mfiv><wPR#qp6DP45QVd!Zq%aKb<9ycMbN2lIYn1Hd!p^BR62^AN`h;+o2ZK~(!Vn7_K8^J -w&99PTmz&knEXJW#j8<qf>qlrCC^T8jtzF@ycZdvPeDFeNNM1`?4<EUr4Ck%h`7<8;8%J8xFV52u=GL -kWRWz9U8>C{iAX?}%JT`gph{ScCHN+{XQ=fBW*4|EY+pONt<+MY23+cUr=4$9q2hCxn&B-Jywnnz6eF -<gDO}rB9~q_sbA8NiC}mrv)Ezdkbh*K&UKo$SvVB}Vj|;q$=T?qwQV4aBH^|Z7Ifwxl_|na@E8lqQ2n -C0*0)KuyNqH^zR-oVL?O30sze(H&*mL@zTmJD?sZDmy<upzIoo>gH?bv@O_vY(iCI5D@&!bDezt9)VO -$;G11SKIHBvEjKTogj$C;}n~4sYNKr9cdYsBfXK9WaqQ`r7dfvZsPbcrU{3EkMLRPAq%3fNwyE%zvlS -Z=$aatf6mho(=eH$Y_@sjrNQZ3hwecXud<T41D7*a2E-skX_jvOMgf5@1U;@5N_~kPh8>eE_GyA;vti -rcC%f%-+<a1+qV<8z2(tfb;RCX=@9xJmk#fxL6my`#`Z?0=sj3{pE9~V2=+s!OT7!-wfHCWWw4l<=wp -C|hb_b)j$DuRp!F@u4UVaSuSTc4&dR$gqkiC)6sl^T>NawA>Z5VBJgoW?4mxi*2m#&`k@l0k_eswHrb -gA;Ww<`!pplQfv@`Zr8<t@bM1zvXy-9q{e{Nql*N;?ATb=Ybm2+=Xr$4r?U#DGY=ku|OslVph{PMQ{y -ldc}Z2Qx$cZv=0a~vBk#Fp#JsYp1vHPUUh*Td<asjfu>Ee<(G?1~5$-67>bpW~adB0g0{E+t?3O1e({ -OLlyA)sH6!VwjGmU&gHQ7gQXxBmv@5c2&>wU#aSY1y+*O>k$jAdO;1f9uCMdU9L+57Xm-UWr~dSnXz) -^V8&-2<tecP_-jSeXF5@~s5wPwxWNfM3-aXJat-U7lj}9FJ6z^33Wl@zva~+kxw+LJF}EPeng-$-F<+ -g&g;v+c6N8UQ-Fb;U9HGm_WMAl=z%NfYY+f{_UxIVK+#aW0GD#L!PMh%H2?UkC*;E-Zg}%KScd`SGXB -J<N%y~}kQeK>J%B%)tIA417*dUYME}I`R+uA<8yR(5GO$Yxb)8$Wm9DreLeF7g?<NC`}8?P_CKD;&%Q -Lj-8{S8BNdAM$+UnIcruujHPh|fr}sKOW6A*YPHrcoG`x90ZLPfMH|wo^vl_7TsN#S+yAylUmVL{Lvj -09eV*6!bK?kT^kZ(Y<^+fm@VMQ{$S#l%l(r5h-JF^x>BRp0@zwTv_G7&Jc4(Pi+a*&7_;Bz%Zr5$Yd` -xi<ahexFVVi*^762+-v1!wX|0Z626>yJK^GBJrE#U*{%n!6u@9h`5bRdQm?C>h$+|e3744F>w$p6<tY -=2%y73=U4(S|(4*XA0M+W=gpIdO7mj@ax<<WTihfWmx_uz_kzZsK=~Bxzac*>tD}BJ96Hj?am8%nScr -a{6fJlZ0<KXA=bO)qDTVs`MsNmjVzcgI)yY2`1pLB{px!8}L;+K=CF%;WX$te;7K@!6d0)Z%)L`amvH -r$D!FiyPH=KkUoi8tSK^MVNUuK0XNMx=Xj2g!b?sGUKxx8kPn=G<@7XL4+BD2U#}!1g&L<lfhty#4HU -5CnH|l+CH7$vYuH?hbczQV6(<qkP9HeyHHQi$-X&3uA9y5d3f%z88?7_#>lpbFJ}SyV)}-+v<Bw3V*A ->V0*<XhTi=f(Eg0*Thkla(-uE+imbUi#RUGtDdIwOD3JVqc4bpJYO=x%1V<~(^}2nhw{P!e^Xc`2X95 -0=L)<+J@NXRA?pc66L-0=>;=XI(-#Em5*T6q>i0YKS#r~29@ZnvR80PBqSHqyCt5(vq5n{wLm?wW+H{ -0%Ap4#AMoymfNke^@dku*~I00p(217VBiSUSa~e><;gXtN!x`NnyR#oCOnd$_jldSw?%d23HEHQ;nQ& -E2#+upUw75McnOMPEEWFrY1VBv~ZWUh<&W%}+ZC;9Fi|a}sCp40mXF6`V-WG+g1b1lL5XzZGA7pa6Q( -+6`vi=!&j8Nf78}uq?y{ZSq>72)CsEIm@MXS}|b>LM-EDIduDmn`f@o^*R9LDx{#y0E_Czs^SDYM|#3 -Mxzf9~93LvttTrx=cjMLy+0E2jBr>13VOpS<Q-nkE0`M-ZqQ(_&ox_a3(pUD`Zv9z8^IwG*|74-RSkW -&R`LhK@VG1G8%~FCOic`d9LEljZL17>QgD{M3FMTtoo1wcUBBQ-<jiEcK9fS8-M=1WTQm1>~bkEtoDf -B4%O#_;~<Az;Yih2te;5+-Cz~2|)`-o!#+0j3U?{vZ>c@I&}_h=zPzhgi*)48p<{kb#m!QHrL*dCZb$ -R6Bm*Qdx^dkfibnP$6%%|FO1yfePZJG?;O>0X%FN&K5h#iI9Q<M?+h|6x>7y`zfgvjL^oe#Rb&`G{CT -Ia#x4v^e(7Mlz=OPem2<B!0F=>7T99*UF&cp40u1@Lg&2&DgK#%~*aQ-+wTu&gWz5>1$<B*ZyMKBR|c -5zMC93>YvingUyR?o$A|u&Rad2#VR0%!CB(y>~ne=G`kS4xqWDz#HT|H%SFt7N(?8<E<rB+RS4*#Y=H -5W4Pf4~0UP9euDPaZGZB%^63Ognwf@oU?*)4;HOj1=C4Wi)eAJ(0^^kA&jAM`CbZTCgo<;8d^>#DQUD ->pRcgKqZDwvQ&dxLY%l3?xzRa+x*Ze{?QiR_r>*9EgU4JQT>)O5rj2CxU8oproD;&RkSE9}lejfZ1TZ -&6Tip)Qhh3n(}<fCtQ<TIskvpACqI(h?E=>K=;pM8c{VJzYk2WpZ`K`l-or3L)rmlr6#<TqEl$%v*tx -)d~9q3FIZ}hR&JB3#7Wi)LM1o<dTxEzHWhYxLMsrb+pq(yfy~`7aJ+*sq4WpfS07#>|nOaC0qr@pv*S -rirJDS+tm7r5;!H4@9~3Z)eVxPYFB)fwgi4QZ&`emwzNyxk(km2u&4IKu1EaP-z>ri{A#^@GjI7Gp?P -9jMK)jDt*G!-Oz|cOfXy3H7u7pk?Xi1}LoZN=$wxFqsU%wugx0tl6?t=8EnB45vAhf?Uey%qDe=qZv| -lKoWdaPRhsNk%qDhyhd<{Wa=%bhh9nbbC^46wfag>J%5|s)L&%~HK3Ez?QQ|Lq52@ulp-W<7A)trNxD -Ow>DRXO%iU7-+<yE%EOCr4yN!xa3JL(mnDo@Uvxg@uge&4B@Af6|*sc=3e5BsnfALvi6*#)XcmV`l!< -yx5NdbC%mg92_vl&oXi>7X`DZn`}mQ26X2wX41eoca^-VYp#?|x3-Mk7)Mer36MMkxA*K-ryFP{szsX -x$n)@X7&iE-*?A49{V!+|ecRjon<(O+EcExj?~CZ+U9?2e&F_H-xcNbtf(U$zBanRvA&DY53ZdT&9(H --0bWe6+Z^gzueviY+_C~D@i-YOzt0;WWu3=k1@a=|a;@y+Hxge6-oy-<=Y`zaq-<&Xfmu}oV74n|BlT -!OY!(IP6-Ffj;_8s51IlJiHzqYyE{M{|R6Y0sF5Vrlf3k+rZo)P#xA`#h(r#oXT+H0QMhQar2pgr25e -&3=a_}vMR<vYo2TRHt9ON_njy<>^@+4nK7>%A^=)^QFr;l>4uMj@&G5<C?Dso>$~{oY>Z1pbZR+ua`U -Z~Wfw_JCjTd#fr2y9T$o+rza2ciCV8P*9$yS&0j-G>=4i_(UHldmPUBB3k4bKO{$W_00#V>3ueLPZE@ -Um{eDTCAz|cgcFc==-3``J(wn+pwo#;4*dDXZm{}#G(3>#Q~f3gH#n0)&N!e356=toz@-is`q8=QKuA -s1aZ;1}K|1_u4QuxWz@MGLK#fv&X^J^5pW01Sc~9$tvLP)pnAmF|eSCI)|G7joJ%xre1GEB@WHTN4TW -_B2mSeAtpByboyDySVyqZ#ij3P>_Lx?U&6WQERR0pHEAl}j+n(+wSX=&2EFrFGqd&-!xc?{Qz&f`q2r -sb199amCur}Ta9&_jN7<=~t289`lLi7<C0fniDfUpJZ`TUtNbDfC}h&40AgU(DuLt9)TMQ4GRB5W`4{ -AP@p12!cX3ySYy%10fuTP#F1k(uI8Y`6T<K(_O<q-_!Lmx+nSfuA>ja4#=CdfqhRsElqcOyN@+b_uT( -xnzl=~IAPDYyagflOb7XqBfI@~@811TYWQBvfW6BH#G9s@zekis`ED!mWVgh`+g$E>lzb<kMDebJyT> --*Zdl3e9j`<?CuF<*7N&e;hP>k<iu#=-f5-#5?K}{q{KIaBL+oO>F4^Z&H!`Y2Qpo4Njv1ysW+?wtF$ -4cWUg&K*i$7bl&yBr*O1c=ol5{EmQ%RSf-}1iWUm=nlv5r}z4a#Ezq+B?<R8O~+P?dH=-5VrE7N8u9a -C-7xw?e@KiJ~>ah!bjPGq)MN`FYcsxOa!hk4?BA+ICqA(ZYnI$Jn#QK~fIP9qM*IerWO97wXzg9@PDY -aO}``P~&y0+Sw-0Z*RbOV96=tvDP4BUo6kY6cZ)q0*ghb!Ezhd=bYI?X&+djXjZ#tk}xBLA$sXAc_ra -N<C%Q$yM}0U$x@2Og|gfgN*&<XCt~Bt1iSHbX~z`B5!r@_TFa7op&qtBE_#J>(b$~=LuRlEsl>4t`O& -)vI;|Q&l~#_18&AfEB`S~(yev!)$YTxr?8B3}Dh+PZ{#4kSMfSzOr7nbq;|*6GD^fxB2(VfjS&_|RkL -DUu@J%L`!d@GQcdtIRn2C9(ZWJkWr5FWi1%<vN!v)&-k>5$A&XxdQj7`(p3UV7VY{IJk89M}~SbB$22 -+iG0%ag~h<4@Ljm}CnC8)3xPOE{<0nV~rq$j!x_&?6$n%EHGPksr@)CDMc8v5&!115<XQw2=?got+Mc -;?`9cvo!MJ73YnC8v*cCLWIuvOHEIO7|V{b-7(f3-KhmJJ)=#34w*E?@Lo7*7qTHikT?1IRr3PZtBJ1 -wNfDH6N|Cnc9D~DD_@r@lyzw<e&r=B=S?K2Gt;LadlMp89u=yTTk-HYcPPbRXfFnSqO*a%sefp>L+^- -`tLd&b`D9^rUs>p)1mqUg(3Yu^r`E@|1{y`);j|J?*U3^CUS?1#jKb5qERN?7*aR&<NTMj#hozlduoC -%w05RNyjFgo`-z<}jKd~jgLRt|!&7%I+&Fx-QBsJ2nCS{VampQ6h_&TBDr;u$nv-OuEyeVodhOf4yJu -(GErc^K8CnqKWKOSjSi?S2tJZh1mR)<UIZJm^K#8Ze@TKsesJ*lK&cLSoxXfLwSe&_hC-TtmyFse$F@ -;IH<xl1K6COWMR33$Zfc`9WNhT=uZj!;dl9h{H&W#76`SRp4aTc#+RHnRhv#J)h9hfAA74uuA4tYb0H -bG&kFm9pYtFl(X&IOtUz=Fkfs+0}@t0aeSX#)3d5}7S9=1xt{0Cq+`7#8WZ@WF^ypb$#fW2FI;uRW-G -nj1&GnG9@7BO_Xbey2_r7JF6!-Ra(R21;O20~(VK@#kTx(4)w(`)8lCAFmqnCWvDGO>SyNI5pif9Ci7 -7rhslugH8@Bl3fuf-wY*0TM+fS%{O|?Ng5vwRet7q!!;`f9<oiBP1HWJVub*qV^6>Inlcz0+Fq9crXx -~<t1&v2O=f~Upj(cnOejn$j-(lPE(b#s>#n*4Ae;26~DOL9xmK3jKobcnF?r}TyMDjAOGsGLxe8OzLd -4kcWAQ2aVo&i0i!JCW=ia<&1k3g?NvPI41vr&ja83k|_ET)kSSk(n8hk6`g)<YpSL7ZMH+KMmSgUDY} -LH`Aj3M(g(DNi6*xvhF`#<P%i;@d96z%0P$$sSTuI2!W9>NFm5h8-WlU!C;i!3ug%Q9^?8K*apQr%!= -Oyr49BVZ-tayRtw*$9{U7?x5QSS{+?~e$!`-#@;wuqzEw>katBKL>{ocNhUNL5hNbd%(>l2mf#Y~bcl -#LHWP^v_gKhA;(H+|FzAe4Wf4y7S;rEz@56R!XbBowh(%a7C_w=V-jEvkvbnHD}7AD@a5|ABsqVXOZZ -*X*rgpnV&n!`J6BR`KXFl?pAmT|1&1D#VKvBj7Asr^f;cY14v0mWAnpG;7iPb(dM2>-4&e@mCp6LyKO -tL+IJDl6(;&?Koo41WUN7w*%aU||RwY6&?$+LbFlf+*7fDa{7W%bPs=C+_bj<t|_kGNqe#u^nnN42<P -~{MGo=48QH~UD%aLee)h8a+iv?k1&tkAsq(nc<w8lhwj2*pLD~1^oYQZp7BSI2>j?7fAomJx1RAAhU1 -z5E?5?L?YtqHG+9H06*SvazV#ZeQ4&JaNj%#KY2!+vTr7k%+#b#oQ9%O#C|eWh1Ko;L18o+>i!^I82a -5_-4i%Oh!b_uxeJGq>ZF|;*yCmc3gPLzzJ{%1MZ%-?Z5G)H&jCnZ31mBg^CCBRHn9uDNvQiw)d1W^CX -YDdp*fkN9@qlI8^Qe_~OqOo&P3wccaDijiGq2MEmq%5v!v5C4bJyerYH^GJMM%Nfvk+XSrLOt*b;`M= -#Np`Bon|t*-p_mvgefMm=f}-{w96F?kV1dm*X`S4z^R^;kJvv$>S-wzpOuMG*?!8|KCIxvu}-MRHXZ_ -p&hg=PT3wJQD_0y@B24;au1+K6FWiB|U4(CNN@y~r@=6PQK5FlhP_M^}lD#uA0guZOd@4w%9iRB~Vx0 -9?dpAHSE7Ou+=F1GnucGu=v|<adXN<I^`!>m57j6WpM;H}=b>2)Net<YjRww4f5JEsuqh6x*6B({X>2 -w}_gWG#`n`<)UxwFrJ^z(5JXQzu?i3Ofio;#<`HT%Q$z7$2ieQYLNd7RnP!z9srONT<*AJ`L{fl!2l3 -&b_i(Nv3;pYSNo0pT8B;R{70`O7fw#qqwX__>}k!#ptoi3W)`^n?;A<0>S2(}}36VO|<sPmkjgb>#y{ -`q{Te`P{~XaXd4sk@=%&LzyDO$$CDlPWouggU5f>4F4JG0Xx=v;?#kz5WIWwWFg@rQI!Fq-4=EHo`UQ -j<zV28dhj=Z;Tspy{R}w~KjN7AgqOv3c!!oXwN+m=FbVeM&U!liYN<hyG|FOw3!{#`5S4=#9{BLwo%= -_2?z&}&!O%R-g%&B%$OKm8K2!irlS9Y!_w#fC`-V?>W_Wbch|f7HbkEHt4b`E2;1`9sQ%zn4$y5hsgE -#HP_GL<U0l3Pzq*(3bz?LR<<8%RWE&oO<<|-2Ma24s~7P%=pR4u9Bt?L-hWEGRo8!WZs+D3pdm(Q0y$ -<gJ&H|y#`*MUQ!EE6udiGxS!6(rS2gtCD&f`9J&+x1z@&*J{zCvPwxA;3Nh`z&u8G;Tp^%=JTjoh2fP -rm_^K`E>-@u_SPlV8c@oqLV`>(4A?zO7b0UGh7M~-^EjrD_zGTEu}a&p3k^tK)}kcgTaVmY`#C>5M&_ -CqzFS(mKPV}%8j|aT(3!P8BpDB)brrT&y2ZPp+pIHnO@a7oSy+sn9?({=b?^8>QO*Mjz$OZiZ15sMer -yE<=}D#EHJE&R~j@#j+uz2K%#I$uhu@Lt-H$NBa~+xwIuGbEg4T(ZNrPWt+mDv4of311`NH}BG@do`j -$?YlXgV&1?d-+nDcxDZ)Y%<pDH~>+zo>XQzWUZ_J$Td&M>Il(4_`Im4(F^#qG{2As8E2Qc?2D{YsMd4 -NE}np+3!9FOWsHK*Ht=xcj+X6GA#ip_wlt18A-;Ft;vkahN!5u<56Pp<`{YzZF{l9@g1K_S^eh)3NN| -v}~O2{p~A!_;1(x1QUO1oi97SP;7&T1db9U1Y#sX5*P)M1hgH;af~3he|`@q=Gor=w4u8V7{<ho@epJ -mV?e-f*p<KKTCp9k#n|^G^~ih&a38428&KQ8U<Ci3f;%3>lbsx#6Fc=ddn?YS(Z{|r@_S{GjM&-83AF -=QINzJJqG;y>WN$Gd<UQSre9PQ!Cy;MkilckQg+PC&lD#}bzK_Jvegsc<IGG?jHz0{OK>I_Si0qUA@= -uh292(WjQZ4oAej?@@S2^7IdpNQDs>RE7)tO&u^Am_-Z&;l!j1v0t8v3_c;C2Pb{k6nq!ER^iYISBY+ -<OGUAB|QDKf6wJa;~nc2~KTV+ux4FZ;OfPD`|%LT+zd4oG81lZMyO&b=F_PiXZyKet;GK?lFO%dCtFk -OyFmp^Y0!L_`B!)8N3L51dKG_IKFlzICv^oP?>$skH^)@ZCiniD=e0elF?WTy0Pi1m*G*pMD0KgM+QJ -HqCKP`p)FTa0rN;tB2q6J(8nVx58)~R6*zq<oxVKHgD$^7eexukmM_oqJymZ3Fv_A6G<KZh>WK`lLDb -RZ<-8vFBP$Bx3&xm(4(X;j7eZ@Z3v)pO$KAk}dc+Q~ydD9e1A~`)(zPgR!=YG0YAC{9bQ<K!Z68(~SJ -w$SFPVM8UrZQ4B9uns@u(kc7&)I~7;rU2!e$A#BTOy(G--MZkvK%j7YXcJl!#6NW9kWG-$J`twJU{L2 -WQQU1iY;3pxFRHJs-!`)T1Qrs}pM@gDrB}u}~j`dRs>`lijvFpp^SURq%AXoTlR{TVb!l2om3N9N1Q> -^DAD5J>TV=!UvEi&osi^AY(e2`T!yz(jCTBZzjmsMh2SC(Zji&5vruiYhwe!9f!h!tV<Q<pJ)EqakmR ->C>cJ>YVEIUG<lt0MBI8VTJ(9f+hmTfqoxiAC_Yle_HD$cN?$<wwYqLf*D}o4!Kpo1+A}n7S7Mc0FtN ->yT(X&yNA_sA6#Z~ao|4<vMY9ZW7|M5*>*45|)tL~C&}bWvm!8JlspEyNO{m2g2DhONAXqia3?qKX&N -&&*ezCY24~SQ)f}VBx9K+nTh=;ER_wA!u>+w}r@OH7~Bw<!kb6);PEC-hR3NL<9pmUJs=soVeHBin~7 -lVdmQ?i%1a2URe7lCi`2fv3Gh1JPv<U&mXWrTIji5CHIy5sqv9zv!iWB8`JErxCeBlCodU|rZutl4T5 -*E^%(GJF&?W0I_RZbtoip9*_dmU2DCB;lJ2pBD)wtp|HVUJt!KyVm_Aogg=3Zy`~Wlg|$~-rYhqxqJH -My(hMxWs4jUfVN9VklhX6v_zn^Pf;1HN?{}akp)p*kL5~A2eLBFhztbJGWaXCDl8$OrKul<Y5>TKDI7 -~>#g~H)j<paNK2yVod)g|O5}n|lAT=hz<|>Ptc&3J~70NlSj4L9kq?edLX)Fm3&WolUNXQrSM=PdiTn -`mDS-$5-FE_EqEyOz>{LJ<O)7c`*{yF*MhBt4)ngLc$q?&&!1uJtzl`7CBB4S)?WlKo05lq<yyPwu4+ -aDG#M17|b1aOF(@G7;(9Jz*oFV;%H;+COcs<zyRB}vPL#!_kx<K?-1wv7{rn0K)i6Z%4N36xC~ba@aL -auJ}0Isy+1$)Cpd<qETCwEbv;v#9_dog$-E^`a6PeiZ|MT$uw(pGPw+$k8%F|3UG&Pc$Y2xc;JfhT<Z -gl1_d5^vVJ(6fYhzPUPr3r-B=ta%WFbPt!oZt}VZEq85`V+(0H6F~AvD*axLmrpWPCPL3+^7%SunB~t -mk6z#=etKg`X#uI`=>E&8jT?rz3os9!7iD`ZUs%qw<0&Y(lMqSK!4qmNtQ!45o;6<Kg|Hts+KU?dsc= -2!6`69CjBOrv3Fhal}L{TUSZ8#CbsqMcgicl1R5io?H-z3sRJAZwbD5Bm%k@=3~@^nXQ(5|nvkEVj(> -=bx|ThO-)!f$S761^$$@OuhY^yc=zX)`#n*MT>@nS(o#b6+*tN%F*YAMiVf5zTjoJr3?`q4668;%}gt -?_15^ZF3O3(@N3zq^=J-mdN{6^i5HX(;Z}PS8eCu(Oy_i;a$l&+OwKJB+^tnk*4^ANaIV-aCRTgoXWF -15?UE>s{9us%?A_({2R2mqbT6tpv4_U0bju=!2s2t&n#|W@rRkkAAw@v-=M|)F@b-87Qc8*;Cs*ciRb -?vnt#*_X7tGGJ0KlW9J0)pLx#}?Hu`z=U@!~UBqGvQ3)CP-;=6R?p0wi-Laq}vctp$7y1sI!Y}+evN4 -3K_%#9$i=O&%%o2U2ry1PcMoN<0_FZ%IZ&-UOR*4&nlWo1{H|B>d;fFJzy2kO3oqegRrR5F~p5Kj3TM -symQ8?9=p?+-8szMf!yT)+CrPTGC%rlczx4sqUNwe?m{3?n-D0rgY{Sl8#nD1_Txh8^9I%*>q$G4F2A -4E2m&KbC_e&-!{B9FSEFu2UL8tOQxHKr~1$u?Lu1_@n|IkKK}zwc4}v{xvJ|=^7Ld{T7>#aMTu0j6fI -iqvHDWRL2jTLaV&Cn?e2af1E%6Z?~VHWL5s_Hxv8HVE^MqK3VF&IqM5uJeVLcf`UP6`vqbk0mC>>f;d -Hj&@Pxqp~T)pg?`gQQ*V>J8B*xY5QMTlR^Gdfh&>uc$US1-8<gPpw3Tnyes-P@x>siqaIfn`=*~FI@? -CUgGt&9{4x7<T(_La^i>`M{V!Xc;Mc=W|(7Rp~zpGH&evov}4}kf*zLf1v!U(!++--hi*ObY3PEU@#4 -LP*852WvzhY_}?0djn&AMJ%J@ZAVTZF~Kpg%<aiKC(WKt`3A+M%m!`gnW!`GbPDu1wKt*v(zSs<8Oe< -ejHmptFa01?VQ5kz;(OXinkH@V@NbTZg+-MQ=NF@6SuGvfsb=f?8r->e|nMIU;N^=4<iSc&3^98#<xv -Xg}V=Mw)&<y>NdTqwlQhY{k^rH-5Kz`t^MrIfN#+k|IA)AK}WA&Bjv}(PEYybAd}~DbP2JOa7(x)0C| -$;bHd=t1&umrS;t}VG0=CsOK+wy#N7v03~fUZkv_%OX}u?2YDebF2pu#hZy8YNFSEThR)JX}$2|nAiS -pKMY&%Q~<{l~^1D;<pZ(k56E?Ll7^6SBn_rm1w4bl)9c)u7ebbEg;fN#+kY2EGkp?<<-Fh8#~gN8YJI -KmOyg4U8jWT;)vjOCr(vAF^mgr)ZN$+f}=D-kWrrSJ%@(v+kMR6*-QKM320(z~ajL@dHeSvskuta4{{ -`8hkS4$RX+cCgTqc|xF8e?C~RHSB2Qr|qDWX6?s`RQIOI`lS5Cw0^6e>wlc^mF@eb3qRSrzrW}UNQ%G -|Nx~3_pcINDD2!}|4+cSSpA14!IEhdw{7s5tjO?ZCecBbWlMu7FXl9E1o*{eb7^U`F@%AT1y^GY}ma5 -w2u0D*tiuM^D>08KPgR~g-JBjY3K>RH$x~nN<Z&j&eN2i<BgR$?`y3?IWzTKCKcO}sD4L-?u7rEMiZ~ -7iSyK}k8J<+;ZLk!%1Z&rJ|0r9r7+s(4~yw`0Ldu<%t^PC$j-q3ZF{i;-z!CnRSN^id$r&@Rm+W$#^t -Jj-jly6ZKtu5^TRL7Mq&#dFxTvA^HRV$g~Pex<L<nZJ^fe+I>j165;W9+$00M~!wLcfK~KLSW&$BM9O -UuU(F)(`m6n1C-1R*dqiI|9Dm($DPZR~Uw^!?f82yHOCQok))|gFsmx&fyZGby{e(4IsvJhtqsI;<#% -dN_dFfG?#kDc=EF&+UC`O$Tb{_2Y4xa1<HzsSlQs7dzC`npHBxkWJSV0*JGn8uO!w%2cz`juzlmt$Y8 -J1RPuxG*E#QyXPE9X4fdq|wHSGDNAiidc7O%e=tb79C3_~D^bRkoQbO$P(5D27Tm4Aa)zoQ7Jt$I>4g -FPnIHB<Jsqt`lUO)~4V)xD;6BJxZJ4snJ_U-NGQX@QV`LL>itREh)kdslPKE(HUl&!SPz3IG`Pvdse% -@VM|Bh#aUo-)}T^c5*;?~Ii!pxL%3fe@pHK}9d`ASrNbBxJnx_3S&3O=lUwoSr=cuOP>&WvJLvgY{#w -qREXW;TE&-^VRO>!)<LgJD&21NE{fbuZL(gPwKj8nJZgHr2y`5qYe`p<iS8p=7qI`qijzof}4keYx+D -WiL+*eW@fFDY**mn_H0XcNx-M7=|QLfskpjckh2#MRej+MUh>qszQo5J-^{aZM9M|m!kfEIJge-8-BO -?E&p1OYPnWq)oM;2d!GFCT+^9|?_$uk^d`btBzH(XZ(K#6E^&<zxiYTb@Dx<b`Q{aoQ)_8tM7=lBJ7f -=(6-MpHF?-(?@v!alu%N|#zVmUvb!ZV>Q+{RfvQZ?eZic_+JRLwqS7UcE&1=E1?<o21ZgI@`Ne%Dcc? -I(e+9VOuy;iO$A=Kgwi;`3lUlg3p`U2B8Ck*cEM=Z!nV-EAaIF$e<_Z50*DT%D|6x+>i+w+_Ow&DWhA -TBu&<5<57MqK@?>0{Feen_x6*En}}5Rj>wY_r~^>7zl=}GABDTd3)B&geWgesG@5C9)@#8OzL4KpVJ7 -O&6i3jk7&TV>$Mn0oz(e@n<;gHCuv;SstR3MNjE?gb4UkjCIJFzkgbTjdzcCe0a`k~Pf-&1uHq6&o5~ -?J9v<y@U+*9&)CBy540833L^e3KEsDX#j>sTO&|6i`gM$EvDKHML8-|r2DrpBd#oApT#H;CRlR~dm(= -={St+gA_Fa#Ow@p!`ggm5JI7?^>n03PhWN@Gn0CAlthS<A7Z9Sm{0k7tlp3$S|d4@<&oc)svx>G*l}J -QUF2OM+?Mz|IEf={5MteI>jzWhTkXqvqf)(HQpX{bQjz-E;fk@Ex0KHkU&6x(3wgRXZqg?C&@G`~Yg` -%1a}PPUJ$y$!*n}yAs)l>!No{h0aw`>QrnmUfcOs%UK@x{`NRw6MXfnaXJ(y04>AN6rBwAy)6s}jY5W -sKpoRVn3Q&a2iQ|PQuUMQ2Sl;%LhoN+tCI<!a;Oh7o`*o=)cQg3Xn1ih;z=vZ;kJhGK=RV%w86&vYDR -jM)1ro)a`N#ajofF-!$fNkC}R#z1H|z$``q=^nWKWH6MDAS<S`$N)95O#PMFDQRf(7BAD9v^PPq6FfY -s$0*JZLHn`FHAzlg1V?%Kb?tM6R*V}u1!1ipooB#KZ7vIUsmLRbi~C-%1BD+c#m+7@t8Z`qAK<reRZK -j=NgW(yS4?VN8n&uyo})ZX5<L79D28~JXPL-!`PEw0>$)<bX6i+JxP$)b1FHr;ii^6!a(Zh&ZqQPiF! -+_gO3aV3oJF)9VU34+*OC{Eww-nN5Vv>0Q1hL4DL2)4_(C;Oz*?e-M5m#|ZG-_VB0sJ+YOhX^a&BT5k -eCc;|5ko+5jrTrqpx=+d{warEN5@9)_TgIol+Q)VVi1|v&ze8CGq^|0+qby*DSzjEi80}Yf1$=8;Kf9 -|PX?;&k>T9G0OPx)2eEGupv}a#Kn?CL3g5C)ryWI!XdZ<;*cGD{K4>5%cHiCOeU^%1eUAH8%S4oCGvf -NMb`N8L1&;}Wwq1(nz3t%!ah>sjDmQ)6l<7z}WNuL=-0okS3dBP&4vCXWaIZTmW5EFa87#M3n40cFHw -YGpb9mM5+fV?Bik>F80N50f2PghcmSrO8}ds^BFd-UxURLSdo)i?XhcFB{3H00@+0&ooMvsSW<XTebn -Ly~n86<echFrus%Z{?4L>aWQ8l?GhIR2u?IswmiE$~BrBH9<@Osc@0!;^G;ZH~}-pFuatmj;|Vi=ru; -g<m`%tPb<hCcdL=-FuVtcK0i&Hy*_csYXW#@K<>ObX5{l;i6RKao~aG%BqTwP)Vx20sp@d>T)Q>N_~0 -m|4*i;h_FiK|SFZ~|E$8`0!#0d}yyL}c?gtzWKkiC(4QnLOBD5<G@d^`dOeO3qRqPdI3oJH@<?NP}3! -LVqIQPCNJY)1xE!O4<VLCZMMF-2=G@!L$-|=zDE|y0+OFTl+fISA6wgsyndOHN*yz-NANM0wH3f<$Y< -eW!X9-maN)g-5Dxm+-j6I_gW?hf4(0#CwYO}aDeEQYzQ1bC4ky6o+FU5Z@XK=K2Te437QGh5DRrBXR{ -56unFCc`C{hInyDJM}SlAv`Fjz$*uMM?_E_9GomV&ocvq{UXu=zL%0f5%JoNWowLWoP<JO%a?w_FQ%Y -;ISmW=qq}~yMtqJV#$)0`9_<|{r4Ei>Lq>SLm7*&xk5Fy{?}bZr;s#yV%o1c&zzE+{Nyuy3lNo_hWf< -|#acvoCjz%rYE7OSh)YKXtBDolY%25Tb<Z_Cz!aek^=mMO{jk$BCs{=td*UB~0FyTs}i|<Uq6+Zn`kA -h{&)_O+qRWqJC?PppJ<}p#yk$j~9JK_}M<XZ`{LM3%mYWo;m7HvF@{6l8iu!vQkK#J$XtxSo!i2MOsW -S>e0Uz<RYJOTC8@JhfGV%}v(L?7<DE<c%h7LqtqebPd7VQlbYi^~+0@k?)3&uHyQ;UqwsU{4;<6t%&~ -kELm-x`gEXB3yZe_35zT=Y0DTr|~U%NTQb%**Y8QteFCuDd#J0vuciVIpAp|`7ARJz0+Wv=>Z5EZO<1 -6MNE^qbPG8z1@7eIGbg>e@G4-J>p7eQZ@w$2TC^B&h-(aCjvBsweYp{gVbH&2&xA!gH$9%($=Slz+IK -M)!d$GnCbd$BDn>|&Z(=!gl7VpxD4!fBMODSc9Z_g={9rs;^=4Tlq6{3M!kfW%&1d<}+QLkp5Y)cq1a -$YGvs=)>DKgUTSf7nGPa>hatcMpHigq?Ken<(Xb1KOM!qVB5Ssk|6)LF*k13i{_#gYz}zW~z7pxmDZM -xXC(Y|19Xfyr%1LOmz3=4l{aO+`6KyAKcP&(S!N_XC|BlAlIed^>(1$GuU`cdDlU^+9^)<GKH5@1y<i -Jx_0C*>8I@ZT8`X|8BGKSZCL${;x6Xo8kDslK=f141&~eUtalNzvUaQiaspAX6bLwA^Yv#*2`B&?*F& -FeL{*qy{|9J#OQ_yDFplGI9@c~33&<i77xXDVKy+?0Th_M5gD?}zDM9&S}6NHhQEml$@dj7@m3#t>!u -;mj@WSgT}n=O4F%{ui*Q3}alEg(K{{eXb>HhTL6Kb+4tv)+Hn_TH2J`)5>^+bNO!p=B>4@(Fa1Ol(24 -_2rMd3YxxNQi{cJR5uzzwW!m~oeIh~DLhU4P+6sF1(xsBrnr9ptTASCzlC0)Lo8|N3f9JFu5Ug^G4Q$ --#4u`%FJTszKuGXRx62wpjB?mq3KHI<!9a*Y5MzKU6lcXXqQR_~dS8ej3x0yTrb_mky9m7piPgDb_yY -m&PRikDCA=?{Ym`OcNv0bqjaF=tM1%-_;?@Knd(zV;CE<y-2}*K!)_JcII~X{pLXWM^3FyT61$Rbrtw -#7sKe)_`H~jNi6t>8Y*|2w3S9SD7pZe?R=bUzfZM)AB5h=s=vNr-+I4*UwOm6^?m`r@`iou{Q`dF4g1 -#n1^nF`_A|4NfsezE@!}jVFovqpK?!l2W;!H(sD0@gW-r5ypnKx^a(qQ>7E^0r1WIS+!2lg?z;w_g8A -Dxt$xC@XBG<V!qB~2|yps)T-ZnjHxl5AV;p>aNXH?V-y5IP#DCRCCd3!tL2^`jQTjFPT7j+xr$}&mfw -m2=X<9T*~Ov)vQ2|p3r-6fob{L+!Ho?2+h87VwqN)%@}$`Qt9QM=gw{9KJ@@mQ2x*_ro+N=|X686JFi -=-396bodxU3?CY=?7|R72ymc7a(Nm4Sr5COM;H4fBY2<Rv3LMqOmptL*~EzSFuMAzF6TN<sOiG=INFW -vc)x%^6?w1VHfyL*4&h$gJC<-2nw6}W^QT$IA0+nv+LX&w-;-4OLSoN+BxQ($4Drgdgos?xi6uC{F>> -=*X$|<E5Nj5aX+1=6W|L(V<aRNsd~oXero_V1SIwTkn3Q=r0+oI1r;9?_2&+D<<3k{gvnvzM35x=CUG -BZ7l(ZQ2o>xDa0y@m+ny<q0#gAqIPxlZoZ~2NJ(`s^P!BBi_JX%mwMaM@_z$I<E4Esz9gp9OxKAa;bf -;CI_hX>Vj&;Xy{7XalNyoE+Y$z99VTkK{qs23{5p?zpL2!0%OZxNCQ)F%;nNm(A(@28|^G~Jfb*NU1z -OFwUIcrVB!8?!5e!lalK;N|c->CrOytf;nPm6HTtUnQ&$C_=ms_Up;j1FBw5jkrb1`Yj<9`v~zy&$te -qRwNUj<h#E?cdU~kYSuHflVWrfsOv8%2mYi_<yq*TJ9`NJ&jOMEcboe~B(iPn&rk$|F!arMAR!6?ag> -4}6oU3yfe8Lh3H2C%%R8lS78$wEdf6+1Z&n%-?@oPl{}lPAHKf1C$+tTjz`gfi10pE6g9<ACIQS2O_k -Zl12WU@K<-}fGB%_^`0HJ%53H{!%Wf0zP2kv<2oi{^wk{XKb;wV_M7YuP?hf~Cxq=vtB)l*_uPuX7D9 -wdINnLuxL2l*a;vz?h?y9Cs>zx;<1>g>VZ(8>LC2dqXb(K)kj?^KnevF5@4D@X0MesH?L-+A4iak{|Y -dELKvy8N;`-LGBy&!CibyZDpSeE@&wb-(L$9d-W1%K$zMCFCKsa#pRrZwFQ6)3FVu?8l~SOnyUdDwqU -%=ODa!7myIQAJS;&4{}pa)w)jd^^;@@Wrv<~O*fo!Za%-c&$!vZ#TlOK5Eh2BZ`Mfzt*X6&r%zfdD}4 -`^+x6YRQ8ItI$^JON-k2+GA#ZvrUP)8qp=VsTlWOTiJ!A2<^G@bZj5+1@`R;#ENp^v&$P2pw7Ph~sr^ -J6=49s?#3GZ^M&A@x+kXbgAqN3E!C1<QBvpLNYpkaw-B*R`(7LOf)K%3RTAvX`NQY2r@xb$ifB`P-0# -f2Wc{C){zC>TzsAiOv;GXl(FwD*WZAtwm~XQq};ZSmGn3Hac#IaU!OlWGsBO>shQ{n<6SM;SnTPGwpN -DYXbNE1^n?#;TjM{!yFcpIPss@jh1v7$)F_b6R0@pH|sT>S~YcbmrmkLd`p}tkU-r%YJzF?TzGUIHA> -(!Kx<#gLRh$Oo~kUS`P&xe2F4byylYw8oHEbmR3fVl7ev-d*X|J`NWtW)#Hsg9v^MfP159Htq&A-avJ -?XI%Y##f)D4AiFk*i4XYRAttrNYDqiwqD(Jop$0cOE#l7|;Bb}b;>E~q=1eX4dcYiZ=-QKkgin5J%ix -#zSCdYTo_t&xs|8$YhvI&1$;0q;OkiakuCcmv*h3+Z-%?)e@7k(%GiFc6z0pF7=(D(F-c#l0vXgl~#2 -e8GrG5M}r#2=|3+eKTfxH}a1Jw^lHeM*$Psl?>2&$nyVqQ8^K_h=!>yA$m#LxsNm(=KC+?Rvc1_CWNb -lHjf__}19nL+bY!jV&aFk~gh7+a(u3aF0i~JtgSw+xGAo+)E`tDq2*#13*3#mH89jtKXFT=NRv+Y5)h -=6+fx$hc<uqI<*E|baBI9&1N&l9=73SVfZ_X3VdMie%71iIC|#H+b#v*dXgYtZ0M6Pm9z^}p(>~Df#L -j)2dmo*sMThRKOL<8y2T&u5cts+f3!nj-{Q{;4sgEjy)>R9bH;65#sLvvFo>b~zs$W?v!iCWEqu?f@I -Bwz<m9SzK^7uN<Zwq0A_xRR=+_@mciZlEd)t0%pE_SvuT^RmJOoK|jxocS{Bn^jjJ&~*psc0WZb|~zw -^r$K_F@;kNIqIT*ELxezKNJnpLDvOMh5fvy9PMQ-EsR#plT|AU}C%GZFbFfsz+WiwRxYF7c!2o{l=lw -n^JdkrPJOUQ=TXP5|HPf0HEk{^At{ZXUiTp;*1f3u}C0zWyor~!6m{6L&dkwOv%a#f=Kkv7yNjeO$U6 -@R(S`gDvC70I?H1zBV?_>rLpCWR+C+2B=zP;!Bh2%X~So1(fK#^7URcDzD@~7qw3pw1LEC+FnaC!r?d -qg*ZLuIf8bfJcaR_}BhrT8nm0x6-(2eTPAUp5tV?zYe9Wk2x153MwaOr7hdU5>(`;bNlw1x}nxw`>iI -X-)ng$N%wXLxl0xuP~Nbhs&GR1vo!;1X80x^RjLSgeepV^`sH`Qw#`2FHb1I@`c@<@7`@Y(2AuCh?lh -H;zW?KR{#1HAd~ahQQvrPb1R$yAq<$wg*QA4bhxB$>LfM9)crKj%ilK^Lk{3D#O`OKES+pmz4Tj60(Q -oIaF0kz`5|&U|HPt4upZ7CtwRq?jK`Rp5iDSnfT$vS5GaGl8dGbwkACjuTFg!UL}Ab#7@rH?9K?n&kz -jxlF~cme)<^d8}M_+lhadGG))e@by{ErB^P2kTm6!5RvK$r2hV)t$1Q}#WRH|Mf8?%hzO<Tn=~-0uRD -4vJ~Y<WMOk3|l5-lU#u(LLHDFFgba>bhHx4@;zf#)!pQ~1JKT1d95Wc?|jmc9!Iggt7T;q`oHwWDQ)N -J-!q61+0Kwi4%RMF48Y&!p1aN-?Z#B{ypy**!-nuDIFdV3T3DiiNFg54Iztx@>-2<l7X0C@w=?(1seH -8bYvgH^VsJ2g8T3OjM_qpKmrb3|V+rWq@*qF7LF#F27_+$-pe`&$Mym-p;;{B~!P(OI5w{OTDJa$}r# -$8LU~Oeev%lPOg~=UuW;yO3rNmb=~ID4g3N5g^*-z(UZ|MML)P4zSckG-P(S=}z==$8bFQkVWF?ZW5) -L2aVbf-)a!KU3J3G(6|9t;#9s%IHBKcJSB7;SWoA<xssF1w%mhJ|9*)#dU8#%eUwTOaKa?$t%3+`g5N -WQ0ba_(5G}^pUgWmJks(8-649RuM^eb8CNBn6n5;VsYLM%fD8H8NguA(a9=N8DPfP~zHAM|@db!47lR -rZ4g+od(F>@)!U|rj!4vq!xC|3VG*$ytCGR!|OXWVj6?OUug10cFB)0Aqv3OvW%#hPrp8Le)M@=%Q(= -$~*orqj(R6yIt}u|Wo54X=@-*rJ%3+C2xLC*fb>lk!H$T=p$lG=|`oq*AGFS{I!eg49B8eV}JBQ*xhI -S0;6WYqgmMqi!@90W3SP{7d%GHj-GpRC}~Ak)V5x3c@BP#^*PI+^OfyA~emVI?7LpE0nRGyPiS}d`1A -#Cr_BaP#3Z#9*oPYDS94=@M<?f@7y#tOX1TS3?C%+SpG5mx+u0I{^BckuIAhKvdG*~-*Nfh-~P69_Af -h2!_sG8pp@8W!}R!*iq-$vqTk@z-z@n3^cRXEX<~mr5R#y29KmrEMF<9^Xoe&yVh3~-LH@J|CH{zxCO -e5ojuO~o_A7N%$L=Kli1QPl(Jk;%tGknC<mWTd;Nn12JDWcgK<T4Mct>Jn{An4Z4}u-j$4X58!Cjx}w -DAXY<$qO#LVlXfVERZ@kRL`~PzQ-mKP?g@aTLWIS4jSfB1Z%w|HL8i_}HiTAj%#89YUtaCoq6~YEP)o -P}+Ut-%g|z<^#{&e;@ynO=9Wx&RT_;{D8_vekT0-)AYkmqkcqBw(z@*6JO~k4{n{vo!gy8*E-LBYcz< -QeY+>RC17<7l62O$zA0&c{X9CgB0(H<KK#bJi*E<~wxIn*(HZ!oq_bIbg6VvjW?%?Mv|M}{M}ygy@wM --Z^KILX@!nFb%kT^MetfN==+;+4_o3NYV0%VuqaLB#%Bry6=yiMDx4V|j$v}d6OC*0Ivd3#?OHuFk2R -^=^llgYQZwr1?cm{qiBF^}uyyeI72LIi31C+}#;3N(=b&i8aI@PD=%v>&D$RrBUiFm(oQkFAH+bT6L+ -0iJ!Woncjm0~|b0VWIoDZc=Ju?VD58WohB9p*^EY2LBc237E&*+dqP*GQpG2qmO&#m!(Y6$n?~YD~G> -RbI^jfJlf5QTHC@FVTrEA)KM01evjiKQD{E!xr$Qnr?VegOj<~S9%Mj!g*#-i~_|eFmAv?Wqi~1C~^w -3;*R!<l&h|vZ3trz%h_|ylP)mJ1d|Xxn0*TMww^qukSRIy<nY85U>H}GN|cFiI#$$%kneuJdV0E=jhA -kOjk{@|YL1j}uyv5=snn~{<d<hDyZ2?;m<iBPE4-1&{fW~Fh3^>nTLA_luFjj)z7}A7DZU8*T;>Y=to -Xt(A;sv793QU_(3v|aB`kNjSX~1jtuSYG4LOdLdE@1Bz?ZTP_OC}Ch@1}M`PPN9S==${p|RaNtSI%Z8 -p%{vK<d>&5#yMo(jWolG2UZn8r2b}-i7Q`H#po@*Z!hAkyC=fNt~<j;$mfijOs~S6#^*j-Oa!JP;mrM -J+o|MoT?4F=i3#-MKPp?zT$6I27Bg|yK-hkv)n@v7Ok2;4ES^bqNjT`X|z|7j0)js9BaZxug;A7=&VK -@ZfjGekYiKl8!{3JJBv$wit;>vo)`0UDuDPZwN6UxK$LN!xNB)m4!9HRS>+`}3>ES;yYx?poiKO*+-W -XqEN9)PQ<~R!7*$fhND)1@JXgN+A+|j7fWBiddbwO(<KCa|A<UZ;_L|wY$B`*Kot$1KYfk^?F?%~=CB -^y@is0EJ3$IRbGpzA1$~%d7uk~*0^qu$hvB~}~_P>5`p8v`5-~8kc$9~uFM^NxF85E~>%tez7f};q9Q -WS>c1WjQyN#PhqQ3OGw42d#7&Br6irw9`{N+J*8oR9v^A;*XuvWe7ZY{Bl?cJIg><I?^r;BkmFeuk1^ -#o>~&<XDM>j|S=8!J%Kq5`3KE?&Egnm3)RCWPhdQ6MqI5Fxl~YKNyLBg+I~k-4PO>i3$5Z^wX=DQ-^c -LK5_f~`WgH<CGqJ5Jlezaqdx}550UOHKm2xj6c+rggG`Tnd^`R&vi&;TGY))taHDxMctL~pG-=uUhAe --cviup@?*1T(=!)wfqT7Rhg6A#t@6QYsOFOvNp}qS9?EZ*-g9IX<xF=XvDU!aJHvT#&)YsUmE+9s1y3 -yIKIop95_v1XiPV@QrIOnzk#@l@B?=NEwzHR)rO_zQgYryG$a9gUtF&dC|()hUou_bp-b9h_wsLaeeZ -`pkwwqLHJ-NZ$=%2g`A1w9zYze%#~DJ9_En5%d6Hah<-_xv^Wj6DUy9L1*rm|AcN^W5JiyF$ygeq2W+ -$3iy4SM80VL-klYH#f^`=;}z@Gz4Uh@)?Wa81JZMb^z>Zn@DA-!kML4$cf<rH*U?8K9Uo(lM`X7k)qU -Y{L>vXc?IE>*0^ZBW*E1m*W|JSSjpz2V4W6XnxOLGKAl)ZOSpVO_hch)zM{fJc)_1plJqU{CazBebbQ -9pKu{6<i3G4hWRjY12Tp~ZfG6H_wq5Yfx#PTe;<Iyl>k#O@c>Uv~Z|vzovZTu2lm0=*Cn8G-fU_S)3v -=sL8y}fBrihDXY&qFBF?Ti`o+Q+tdvsG+W3B64s3K!0OM*m%&PHvwlK}+sz;42dH*Nj=KKK03W`F{ps -P=ccXLFIpR+Y6tdtbfX^6O0iRT)9P*X<{O5%`vSo`WmSGOx&gAt)K^V@|Nc<A$+1436D&+Wn*1LuBW7 -DIw!BLOZI0-`QwA6jV4dUm**Jp>!yS3xwX1ZFbm;09}%H<W_1rS#NacRdd4?MhsOAo|Zx#>5AwsGSCO -Nh=OuT5PWmRr`cH{<jrZ(T_CC9x|XfST+cOaDY$XT%=G#sp4QA^cae3#t>dr2aNF=Hg{m718B;l(f?& -a1LvzDo@}%q;^mt}@m!-wQ=edg6RuKxSdEmOCIMr2=Hz0!v;T~2+)#cSSkKsU;(d+yK=dF>3GGFF&QX -6})DWaIyhQDq0odhAnP+m)<zwHvxp8lPGLvE0tuGJZ;<@8+Cb6B1h<30bI8K6hdeCd80`S4W}<e+bdP -jdVEozKHBPM%i%&<<stKR({*pmbjk{fDvp|BL7OExiBN=lCw#zr#|7fngXqWJ)j^gPEg`fg<tUdlCpr -FeLNyT<{kKxZUez%#pY~M)uIhKsh4$urK_O7D4jQ__*ZP;^&oWho|~9fMWUKuae@JId{ycppV%T2z;= -)W9Bt^@X*~e9{Z<9vVlSW!ZRkH!Fk0eBb>#@LdW2X^f;3IDBBg}F&Xa|Q1NlV*oXQS_-D|?XB>DEf93 -+k2Mva?!^`h$X7Irt;lEcyh7Zq3{pJ}>B}>d5LAC;Y+YD$MgGx2XKdIcoUsUc&;m=-iXFcV&oUrWe?j -^XlnM{|S>@~4WJa@*|$G-PIoFQ;{!}EK0S>KYxw@*+WNo-E|Zxf8pm!@~%E4NHO0v;!CR-`Yv&Lf@ab -RL|c%ocB-p8Rb;AQaxp`e~~dSX39vH*j%W)UV3j?y<0O<PC&yy$CvC?9f$LWcCMkY&yapSa79BfVVsM --HpP@#<`Ji3`xiAlrXzTfnK^B!D)@y?@#6%ZO(tY(y#dk;4c#p-;X2xJdezW%P-v(){)}AM1h6v<n=s -#X{k{DjS4aY1`STkJ_`u4omJK1M{)`&&5&oNv~#~XjqvyRExo2OI(3VywTieT=zXS^sLjx5VQnTCP5# -jXFj$ki_5gWn?Cm4&53{%RUYzbAnVfTQ;7dNJym9Qa^}gi_!h!SZxRbvohQFv12VBli3w%pZ19AnPh> -(EezU>PEH^3nn51pt!Mwk(-2!|7EB2K#DF6n%dLT2hitQCRcHaBObleNZ#RQF}q+t{xc)l!v?SfwX%% -KH9HVo+DA!J0<q?f&334ZSap74Z`&0`?Ospy^VOOqb*5vZ2&y%3k4!(%XD_ZMTYf$ti+IVOL2WXq)9t -rOY{5!(8BoH_`zEg2D2IRJITfEW3;J-sSZizn>q~#4a%s-aN>7d9i}lXGEZKr_NVeWc8;A2OEsmz~e= -kTsvjV{d)B<KVphemb(mpP@oSrPWsF<+gtoM5qJ~=%NCctvN*qZf_ot#<>CXE$fFX4i=CITz2=NjgS) -u2>P?+J&MI#uRIBCOKGr7L&VmsH>9sz&Pb{X$m!*~Y8*rYK$!GVKA{x?Lq8X*Uz-Hd9#=G8j#+O{AaC -CnItNN{akRB6hZP%}nZ~IAjN~{gUS$Xkqv36M=9avw_^Tcz{o5J3&&3+5)@?y?1v-p>+z_z#6n-%iZx -r!?nTt{Yv=mG3jJUX{|-Br<pMpO?6obX(lkf!bx5*Rf9&2$Xl&&72%I(R0*J}%`IC)MY5azSqEU}v~M -&YxQ{fKN}x_YA=Jt)t>3x59(EkqNy+PXFvbOg=1T{biYf7S2}}eVBj*z1m7oO*;~Dluo-FUUvKU&}Un -m7_RwsBx2-l8EI)*voOfJQC?K%5nb;YQlD;40q|ZA`&g<OV5cd1g7Y_g@wxY;Gs3m%gfseFSdAd`P_g -i<E!~jk%$;84m7rTBO;8313>>cB1ovPmbjd=9w=TZKLwQ#r@!};H!x`5A<BVX@@3gHCY1^SAt?E%7rr -EZ3K-T!0s%H1$dZQTonpGADZxJha_ftPn_Y=aYfoN;ZaO>RUlJDQYh16mv*6~@t-y8_=o40)Oop9a_` -n`FPqm*hWh*a|9`Fi&T7LxWUfnV0eNNxe07xN&FgyJc=SLGL|NdR^@_p8$<D`sg|C(J>+b85LtM$wFv -g73-Q-f5TGF(wmxJjPYtBC@O9qPvf5e|wC;6<V6^Nxb#`#P^SA!^8V<hE6wuazsb<svA@XBAbpn@86f -SdMy`bc=HIz<QypA>Hs8EOeTsUWHhSYs=Vsk8J8MF!W(15a;e+yy|blm2bsvgiSaVeUD9ZH^qfvIUG) -tRu$rnF)zdDEXmf(tJO$fJO{0V$c=22z#NF3I?LF_`y`X+jUMIc$w!BJIpUOr7T>;{PLn3-wP-d8`LN -KN~y2)%St%O>oRY6-+T=Lud^)d({W~(uHKi90gQg1eV+#g8|2$N4dYy0|-;p8cA+q|#SU)VIx@@{_-_ -t`I2{>bAgt$tDZ$6U|Lf#4pW$o_%NV1(Eq;J-QY0DAxRmr(Qn)ir#Bq5t9e{|HgxpP|nqPVt$Pv4hKF -;23j=-yO{p%%OjD=pf^t`i<l>)iM8h;^HIO1d~TxCMG|Hi_B3yxG$W1dK*&mK#a*}hy2rOyDxtXKO_G -tF7uJXW6+~@7Do5;9z`a}XDam3m5Y9cEPpvudUQ@4)sw}cuR?s<BaX)0{0QZs@u5|Me#U<gpXd=*{EG -c;;zH&R#XRWp4SjO#U-U@ae<=C45ak63?_=jL>Tuj`2Z^$`q;E;oMdcejqiorGB=QmD(06ZORFUk>$L -r81Zh#`4+Z6Sxv@?dIm~cl`_Z^yj&}O=QL7>|ALU6C$>wv#0<{5C+Ci1IIb_ln_(<VGRWBvWLEG;`c+ -o6!rhQYaskIK8=fOlAje6l3{7fmK0`wH81$NgIJ;(qOc_{?Mbl)M;+;98@vzin%Ne;&XeAIN|5Jb*tw -kpJX)0DpWS|H<<J{`f%t_&ok8l-*snz=P@ylJTCt3ac16sA){Q*XwU|)K1UDxpB5N!ZXc4j%_$Iv9Iy -cM^z19bR@C>zBP}jmbiBX#ZUm-{wfOs)vW>1S9GNcr3lN{8GKCO4t?auYl3(U=F0bC%u?Jq@b0eI+kP -#)6nS}84@Tz<t`8;JhFoY7hPhhE-Lp0GPhJa~@!|)~6zTH=B(JO)<p>PmHrN*`-5c8DUPKG}UVDYebQ -MynHVRA?JLzelBkaR^yYpb{jwD=Tg&h2t;?FS2149#J($y>=>Wm>_`W!ogIrByTdOSK}3BYL08dP)*% -(+LA(}ww7jnW29D~VK;r11cTf758d*$!6YPiLKK!Vj6`YQ;KTN+&`OB&e^!05L)_GMLojwXA#2hWZ|i -fE6YID2p=K2n7u?xj|2Ef`^Zu?C*+MAd+mx^O<NbYrvhb#4k!uw~0j7Z3%vvucB%6hy+3+(o~1LR3cH -!9!|gSxp@z0jwG-WRF*Sl`{6ZG(PDuj+LNrphPzE}qcG<m@l=k0QHf&S@{B&%pvJs5Bug{tR@^K!EU% -F5zhdyh24gE=_ZwrvVa0SyZ3JYci{vWb20$wmBbMY5Cq3*n+NLmySp60oix$uPWnLJpP7qw9E1r*Rt3 -$<G`~qRmlg6%z;w=TZ6&hn^EwnP)C?($ck~yOYEoq>$vW(v8V9u@&gdeOF=6?cZfqz;v^T+&DYI*&pH -|J;IWk5RbN62GFW8%$YAAeah!=8L9@hokuxX@~xEu2%|Xki5iX78~nIWzNwOgAUIxZL?U(tR)6DuGi= -w39#qslpVswij4Q&Ai>|I)q+*r$0Ph0d!nmz3KuIt(2nYhw8vf>a{vgx)3V(!sxhXk36l3VxJs&N3|K -G;<u|byr4FQp2G|<8gyn{H+eUusW!Qq#}^o1+ea0~4up698LPPlEgGx0+-ANRaeh`A5rJ6<+%gdLfQT -q=kJO)@=+Kac?cz6c2p^V)KZOvl+ez*@@GQ$t4%32OyM|?(Q#)C5JTdAHlVhNv<%j(6dK#r+_<4Va`1 ->hM{BRe;5xhKX>ZHOHR8Gb4vR7phz3c6HT?}tDUfm<>D<EL%cO%_kKei_a-Kf*6NwWAEZiHsELRAT6D -xct47O$fB98f6`W>v){LZGaB54R@J!WbsBQMR7Fap!A-j5cS+o>Ge#!N-G=&Ur(!R3C#@wA?}mIq{7G -@rjPSHq#rk0!ZG2_|y@+HkXUAfz5aWYx$)xQdzMAB*~7EkNMhg{L`Dy49++7B+T|xCG)4EcsdT;)0IL -`DW<FEE9yfQedA{{7=l+8sYcjgX6EfMm+_p?Q15|WuEO}dUFG<!P*KyLR3N8n8J*N?=ir&R!nT-G?g$ -BYDF}JuA{1lI<~}M*k;va~=hT?ItL<0lX$Q4I<f}07?3nQmxes%Jw<!s$ej@4rD^T{E2Iv24IQu_+9s -dcW{oxw^7S__pXC?@K=!zcGfYBoYnj;6Yg|nk~b_cYF{2h7##k}|_tYwO$1(!mOPG9CD1ihot;xiNY8 -0A47%O~jpJa>#t(g)s5;sfQ9e+6stFa0;fN6h(<=Q|3jiTG&k-ElZV96{Nm-8elGjfeJVdf?lH`6N8! -17VZI5ot}3W9LJ7G(Cd8$Gy<MV%Xm{*sKSvy^Vi_wcj_?>=17J38WRiwEO+%koG`uz`uoXmca4f5Zq- -)aKL{GX)V_fj#<4xf>~c8u1Al|m!=s+7t$Tt9z{FpOaJuDm`AYn=*;=HZ7t*Blgk8tFXqW?-Tah(9&y -l<xJFzi?;x|+|8UvE=d%BJ)xf{G>@VYnzYo3wx@)fHx9ID8RwDoPIP$pR#&IDk-69`3UROzX^u&1Y$d -|SdEsw#+?|oqy$UY%m;(heNnA?}?AQKipT{*^o(--q;i#e+$VCI!p?nnWDmM<~t<VeKNXB*5+n^vdBy -Jly9bA4-S{AYK?c#md1(ITVmB5`PIo_9Ak;zR$u&Cb1lYGU<tc=t{k(#vP)Yz<s&HVQJw?tCu~s@LA> -*j)CH?CqAED9#!U9{BXd{6q;3djDL@<Xd0Nm$n$Q26$YJ&a8OpwdYNEq7X==<&C(FKlH`$zxTxy7pYV -5VSLqAoZo@gc38R2Q@wfaB*-VnyudlpaH^cJm5j_7+ZV2PBD6Osh+g_dF_o3eC4|k0fwG4J*m=a6XR( -J(A~$Jk`Ya`+C{QYie$=K(>LO9%U2Dx9J=Mi!;C)`T{<+wfZOLCs9D|QGS3l=dpU;Q>*79j!{LRM7)3 -Drsl>7SENB<`H^@k(BtE;3?nkE^PCP{{3V4Nah5+^Ab#W4cL5t4yP1VMjl$Kj9CeZd_1q}dmhXzU0c< -k_K>g=dHE*CC|}9|aot&%+bDX-%?El?HQ2Im4f#N(?!|2uSwnl_Zb4%JdTeVX{Nw8D%~T(|=*d8S*gv -`6uRqesoliTp9M6=k!HDEIzVq=%=$Y{?uC@nYi7`!-whL{SXo#y*Rs}&+{WsmwqZ(vf@bnrGFcqkmAF -RBfo_wELKs>HznBS#fU8VS}y2?uh*Yed#!-;{<BPh>ahJcn{}AyPrqa5!Cw@zyf58`Us*Wt#fE2Ff_d -v7yHUjTb#{^S>DyRz|2KgzcQqOo)*W#*gdM|u5m5Mkqu+4Xp9p;2bw2&(VGbJx?~Y;tcIsKWsMln{$5 -VV~=q&8~%mVf$Ijr-|dkA9dxVQ9MF=q(qM`3EM{P=*luQcS!9{RN9z<(%-iVf$}6_$kJ-4XcYZDk5n6 -qU{ljo*~la=k>saB8qDRcq+!jma})ovlf*u9g$gcIHWHAj`C4iZ0+~cy*fu0<fdg%dJ7Mpf4U&1Bp+u ->TXZ29->$5-n*#Vu0``&pCo)&%H&PxLRYF(ZQ~%;1*8kG1msvmMt5%6xL}D-H(E__eSzIJXcP{f=ivz -pwUMvJs#r5ZH!KYf;DTlMW(Vs&;Lz$tbZ79rJ_m^MFzsn?IXsmPr?kR}H`uK!aZkTd+%=-A4iYs(Z3O -VV^8yPSw-dk-4jf{qhqj!bK2dXc*rvv*ePjzw-Q+Vt%*(B->F$-WCT>zWYVjB8xnK<0U@y?+_XX;!QP -v&-Dp*^>XckeF(5tUgw9qWnp1G{%Fw=+CIpWB8<+8i03QSWV32dL<?h{bC>;c~!Ze-hAh7u=(nl6*n= -J6SU(m6iA%!pGRBD&6S$JowUjI(%vU+f8vt1j_-;L=J<)hu}tsJ&QvxSzwI8<ZZuUan2XKDk5zb9hK? -OqayxTP7FI6tS0Z!|eCgJ3Y`;G`Byh6_MtbF`1|3v7-j*rOdcOb!x<f%2*Fu$G^3aDOWQY23;`Ylg|} -mvQEhgjHgY$!0}-7qk^5{IGgAq9$iKbq3LopZrG!o1alZ5s7Ub2;}Kpn&j?oS4ksiqUI8YT>d^2(zGk -?0eF}QY4x+=x^`B@!{G8i=uK_{KQs3oN(h{unF843Z#@$0^>5}AY88PrD4Tw@?J&Os)WZOnbFa_-t%H -6FzZ#QL<B_vSp3#e#qY(pN?MjEgr)mxN$M~O0!fL||=((F)$iIIJd(kA&;A(=wkPw$0`$YeT8IVkrbD -3;gcMn<v;U|hZvv00+!*n|7mb6p0CdO_EXiI+1Z-yeFtKmh`F&!OfnPY4a5@n%2jhm~F$NL2wtnnU!u -a+_xp%g$Hpp?ufwI#<HRV<72!t50g$6MJdJ$!Qk;*_;%mH{Q4T#Fwf`02hmWEBINzo<aH1`r#?T@71u -@9YNLcdk!wcd3AQ${K9*UFEb;#R9W-rpYQQ`S}1n{oLk`AGuyo{-nNz1c#nccici@6f}J%9Y(WTosI0 -O)=ZsoF<CPPv53gBnwFYgh84onZRc!BXuS?t!Kf7@$){7(DPVdL-beB|5rA8biF<VCrhOiJL$^7b(W_ -$uh?D_4bz_8UAhhu%?TufrS6d=N<x&M-p#Pl9Sv=sYeY<KMD)-Z&$&k9@{zPjSKQN5he@ihXtRgRCi5 -<>6koS2nrf@IV3+Q>3G(9xA~p_$rXseqWRhGh}QqZpqgR5O?iL7XcKbe6pI?uko#UwoEl&TN_fEY>a@ -?N6#qq5X4mEd$HKgAt=5xWOl?MC?)&-|LGds0_$=qxmY+@YO@Ph2xNV#zpP{ww_>N&wM*~;4Ls2CP5J -hY$_rc9thh9M6JwIF7xR>EO5H~Z)x{w|I6a_qmYQ*i7Bf@zkJ*FM>O@fdwxSsKmO^v$|9PeDH4NebVp -4%P4D<=XTStb(&!GP_7@cK)4HM@{S{`8n$(@9X4nT`Acy1?@=56I0OTN;)X}1Qj34@WOUe#$h)?^<QN -4p6q;ubWC!-|#k$e9P;oPwf@e!zEm_xI4=dAm0^si<i9c27dT)QK?9c96vBH$gzk<`Izk4c*7!Do-EC -G<0x^ON@>k)s6an9o5SjWx&Yq|YLU9O{STGavP>;%{dmN#y~Z(B&I+x(3n3(B%}}*rO*Ub1V6F`Z2oC -uP&<#k01Lv4&4Ot3lTZ$S=mZ<ZiuUSXTfpANawx+mvuEwS1;Y0bO!vI`@>G3YTEU35Y6VclP~vE-E$P -v>cTPOQv5PuL*U}$>^~6De}DGl<iPJc{R;%7-CyPDu2&ra0UKw`s~#~YmJgb3)fMVtb~pYmPx-07)`{ -0m6wxo2nouwI&C7i2lo&OMxmH??W?29nm)?AJ!0f6i2&Z>F2n$wwv)Jgge-TY#l^QyOi%0V&V3QgjhJ -qNEQ`9$;pd@eh4frQ1ov+@M%qHh*rBie-b%1+I;rivNvv*ncd+bR)F>^GPJdGpbd}Ou@=grgC>Lmd)C -j_y$lSWY>2`mlrCDa<!ORh#2yYqrPBSL<^vFT>I{CbYJY=3jab4cBuV_K|W1Yi{27_OVM?HioqI_c~n -4xW0wzI%k=hXtm?;w5k6%X*Eh>8To{No!of=N9SinZg4~aSP`)L7aR09MxHO^XBSujg-+P!P~F%tx=; -<djt~Jt^OnE2HJ`uH$_T>ypw{f0bTOEy=_76;6c75-T?6`NwvPN!qiAprv}pEsGB_=>?MQO!PBX`zlx -%F=1bS6p+o`ejX1SqfM$c=s0ws1Ws-AAZw{zR0aJ}I#&EF<5N{u<&QX`7-rp7S^+>TAS@C;r1G*}oaq -8ubeBs+5YEI#k3^y;*;u68qG0>@Z`%d!=&fm|VB-9%lb|HxpsN>EYbw`27-X0##Fbtc!2rlw%i#8nGd -xw@IXg&Mg>?7mE5$0naQnR^-8cf6~1y8i$n|eM2?x>sz8I&!2D9EksgHSK0)j20p9M^Dyd_zEGsIO)C -=a2#Lk7EYcjCmE9NS=ozL+zfi(DJQ;Cm=lEXI=P$trXV8birNqH5B&)%N<NjI)9US{vorbD{;HQkt$@ -!PS$#<>E|Jz0%+Y)Y-cV}N6Z;dwCTp&QrUQG@1NwGzd|dH;8YCK8|NtqKrcycN38X*1Iwx~-l{(vP<g -6H^VP5kEk>lDbrQs|)|I5r_nHh7aPBlaxos{;a|mDsuU5F$n?ZvQfd-8Px<w2QJx<T_+CK$#xqujig; ->@;(PU`e6RK>=T{kY>c#-5#2Q<%sJ=D#SM9UOhr0#y$oYC~$fD$&|u14gE3gt;5w1kH)@u^Zxj}Bt$e -j#rc+A08wQr>MPhBMvnsG_L`(n-OpAz*5Cx_3(&+T@tUlhlV{oVP{h(N4H%lu_5Xma3=$obTFldb*st -P7!j?lVsrs*;+{@eCVeeKeJ$wMLmTqHfyk8?StW2LWI5?SS~||rUQzI=u`R<tIyr#k|HTxX!t29mpZC -rPUOW?KuB?91n=c}0VR%hUay4{FA121l=5os069>W<HiQ<Ja6%1B*E>1b<h~Gb{qTBFym0~CMMoZsk9 -i{x`FH}ft}x=?*~?H+8sdV*QP^AM%O%(HEV;`4Yq#=Cf|2FOk%d87U*}_AvZZQ!hV395zcmF1LjY2kY -<Jhm|MNyO?q{M?jfpAmtu{M=*D$vWZS%P<FlEZbdg2_@#%>}y%}vQ`gXCh%Wjs|;RaZvs7y=}TUO^Il -AigvMbNr{Ss<u2v@1_{L=W#6WR(sM(;X`E9-9@oKR#MDRKh2)EcBXzmWxld*m*TORu|26?pOO7YxDFk -nxNP&eh>Y3>hfPU{Sc@6@Amr*SN*WhcTp)ELyv$I%^)O65Hvy36n!)~At;7WC<em>PGB@f?k4J|qs(y -ZQ`l1c8s|qWsK}3U8MOEm%8<X(^pO+5KAQ9?{cBGCTw*l)h<7qaVE+JH`6u}Qk=cTaBlu6|hkVyD!V) ->Un#lMgr<MPT{8f&D&W~c3{Br?#acGIrA8571sU4=pAAQjjJ5IB2#6HR_2>F@o^ART9&v7Wnd<Lth$& -uyQ?`6NiFGW4%-?ucGA7Iga16U5%ZN;1DpoSd?{K?_<?b@|Xlx#oIbpdvxN&F-VbUhH+*C>!|`bd>`% -%WSjRr(fsdU0IhOC)d<EB|5M+3WWxzq=XD?<32;O)N8hA7i#&oS%%l{JnT(I5Hn|7~G#p^E<%WPhoz$ -qOUmyv;4%<kLO_j6~Gd|04(zWSi8^B&Ukq`sksp}KpHcrQsUskr$Pj;Q0CkY3{qC%wS_BId`_$~SM#M -bcW(F?9n+Ww?m1wIt(Pb19q9mbAr*yALGoQ7v(@9aU$5Al6IoMcVMN}bK|$}ir+SMe;YH8PTta5Xn09 -ZM(4cVz6p59S(`1&K+JQ0juwLEO70MH)s;7(B;LGgaLAUDlbF#FjDo^mPaZ`4!y126Zm;}7b(yYXZu# -Gna=jEye@SN?ReFQIW3_*#$Pf{tK26S_lRjm@hDb2>m2-A1^Ce(-qFqo7ET@R6Wm*3vCI<+jGFi%SJm -E@JCxp$E;TrL!W*iH%)LMG2a`)5xq#TC44W(PFoZYs``GL|sEyLpz4zshO-!?Xc#wBde-0TeTQD=tiF -tKOc?g_pYYMJc9J4$9B?0&sMlu_hnVO%|IGU&)W%OWI{=)cR#w!eJpNyj2P1E^v?xt+&Qq;7yeSW=dX -pFDQUZTy>srnvM^y3h5A7eR2xLJx?wfXU@d)=y=Xgk!ZcDHc=3+X=bQ<JmERcOk{N*fB}|*O=9;jX8G -h9Y_#rgl(%5mb##MMo{OXhxg+Y)&)T^#q!vg|)o;&9sM0P2KcBz=ErogZX5DjWbH1Leif*RtcC}A@j0 -PT_X3}Q9EhK5PXf4m_xnu9|O^>93R7^5(0YZN$;HFz9SP5!yu7|kIg0gXMDv6^y?yfWE(L;j1&W4boQ -MGFQU}kxc%dC*x?i(<TfmI}f*$>e}#z(?;t~>9w&F51l{!@p7{zHd?{sV`C{=}isC`}U#i4g=sBQ%EZ -?gb_Znn4K|-rddq8bh(4GWNqw5J$E-%@1O|Q|g^zAM-%qBYQ!lzf$SZUW0y|4*7G3Lc|B5&Wj_<oKau -PF^Nxtg8KZ4P7a;1BZEO4^F`9)2m;{A?iT)PHfHh}u7ZA&*6HD>aQKtIK#x^+0>Asa;*<T}9oX(TNc8 -Y}JEf<w<3>{aNTDBcl+59G4n2wwnUC?KQZxDcPN0uN*}iuu@I6GTJFN<!FXz{4|E4dh@h8l@{?9v<?X -Mlmkv9Hr+yAsfY5q;l0`>b1P3_xD1<Ihcx_nbNbS_=%LOVVzLmI0z861i7bUK$Sg6iB;QFc12$w_5i1 -)rH!Qg86vDTx3dh8pKm%Ek@TcTC9$XLh>H=FYSEhXGqe70UeN4H(X1dLKu++b5$*pcrRJCesEbfMjZC -?>B0Iy;_V!+Pa9+HQ;`K_qjd?k)c(#e7l$rjd^fMhvr%_!WWaga%U%eGAcm#3uu`BU2L3&MlCq3SB4e -aSiRz#wWEK`cYC%MDfBjBCuTC3P4aFceWg^A$0KF}P&aTEh$|`(rZu6H(FV$?)7c}jZZ~Pqtk8J!q*F -9@qmk@EU%^vZ#7$&bbyoRcmjiEzue|`F&*A;4QI7P+%|(S^!?m~vh|tNCo55F%QynY5ZckeCAUl3cZ9 -vA)rw}9-Kwl{MJ;XgOQ}<c!Dh%yWosRC>J$3rgKRu+>ES=))QWvU#VjGU$rhK*SWF7^Fj2fVGw-!XGr -{Y_rA~BChalP$b+{4|!s#TJ*Hol<^p)nCoGF8U57cjq>wG2)~GfKl7p!69wiGWDt);1pLJ%L^xi>w7m -fQ$t`d)v)D9wyI9*`D#MSDl{w$7Hx~$-qSrl9B)zxZ3~|1$BXkaBhth()7~GN-D)B%vk!J&x7oQZ5~^ ->P-4!!y#}5*hOp;UuAeFZydX=_(GXmtoNu??MzBO{iFw8sAeJwG+dB;Wta+F%<sW*7?NzvPx_&h!pFJ -y(b8X#`(W;Bl0q&nr=lUD59><#9VGBNhe2wT>$3zu*0SA_)_&~T{Xn$-_KvP~@MRqUf#JnNjc;%{p@> -6=nP1t-?Mx2Bi5-%~^ldQy}&CNoer+5ZYC`h+-aYFzsdw4kOk04X^EcDPQ+HV!>Fx@tqDX0ZLjD|{|A -TXu7?tb2h38KC7th&DnjV5n4a3hTA4wlaytcjsiuW$Bj$<iV<{y7S%c%BV12Db!b`GO5R7t7B5**!sx -ZxbTEtt~(;FJ13*xPMJ|8-dGLHZdn9^<TH^fM}1dyLoFc-ZTTb)>i-Mp`4THp~K#yif&uk0m<C8n=>h -<Wt0rU>rzZ^i8Xj~o8iP=8ByOi%Z7QdBe;mo(6>z}A}_Qq<;%T;PA#xZ7A<MqWlO{&lW3f2Ph$rSkD) -rbqYd}+&3{eQ`I4F#>x+pWn~CPq$FRwnd%F?{6z+O0PG=%-dn33Fm+8FRyOTi_nghSJ4(HZw+rbI`LP -2GS_?}TG;)$jt!wp_okr>cZIP<W(XGDrN-Ik{8>4MHJxIFY|ub}~plMP?!S-qWJvjN>shFnCZB9rag7 -paQ~P^8)h$_rEDY*^)GF%5N?FOxwlh;})zQCB?%Ppi+j3#4YD2%etj+gVS;38o;6z)t|vc<tTLRqqKQ -5^6mtvaHW;=gc$BO3XbhT5Ne)%L->wp;*EREH313-g}M?UdW?x0Q~wmhw}O#6Km`r;vnoF;2`X0IB5T -2U<Rg05@m2|2S3<Or+0D<Gdszq_dgR1_S2$|V?r)|V3-|K6x0D!GWt`kM;tilpxU22MDb<(_RnYL9#w -w$(G<Ny7A*Zb25$dH&_|mHi64i4>2X2xW7VTq1v^qA<X>rpeEMIG=I7$0iB%w<SsWkP>l`~kR6-vW9Q -lX$@6;JXj&A2e2`u@{4T+D^K7{y;C?}4*2L2_rksT+F{}u;v^Wp!!<vSdN1a@F_A#_=n7|rWEE3cc~{ -8-e-5<i>h_Kz{p0fB%&V4(NE#Xx`3=l-`C=zu`L2LrvieJB090<~`iTRW9Iv9Q8&d>7p5h%0E;=)jVb -kwm6jb+<Y-x`|6;YjZ(vX%LPbT%`E^Z6>Pe60Glg>RqZ~x7%n{TVBRkQkgy8MH{Wn6wPD<{2NJ&pLnG -SnCEA}-EnLZc$p)l^+mizIg#-7$2!c?II{vLv$eR>NZ%e_Io1@n3E)QGnYb~GWoZK!xq`2cG?)3#Bzk -GlO<pnilwF`#d*0sdv!7n|gwORGyxdt=nsXfpH%mDg^jc)zaQQcq4nKV1@qcJM@PA-D@ShnEh9YQ~-i --&wP&o1#woPKke`$)^9R^C{H1$&@zC&N=Q$?E*AIW>_AXG=??57nh`=}A``{1AQ-Sp>a&w@NO6KMQMd -uHUpZuajm`I!p|r$;gI&dYY|a=b{6;282@T;%?J{ww3LTL>aM3c~P@z|mnC;G^{HP~!V217h?MwmY~J -bNt3XJaFe->8EL~_)OkD3dqo-o9(cRAG!biMyQX7!`~SX`Y;|r{k`#^Wl9v+y9s*x=j-v<xQP>fG#>B -&VdDY+zcU_&@Hf@1hC0<vwu2zufF81%!^@Dvkrq;14KOvFplkI~GKD4O3)9sFMGNf`<O6e0J8m3}L^) -SdU?mBZmu8Y*Qv7mZ0^F);jJp9kDQIV&S(l-%)R99#MP9-(5qBFyBz3o*p2HHTe;uU)ewwNJF-m1zAF -ublO&;$G?c>;cE-8&ivj_Sd@MqQclGSCG*M(723YjS?d4?}c*w&Cw5(s!x;OUJ<-nzXTRc%**zoi#i$ -RhDc&s}5=PJO=`F8uaO<;7m^2rJ^$OBh}8emeVNoGF&E-SIlD7fZM2#Rm{|(_(Z!i>>~ivf}ov9eOtJ -D5Cnb$o>m!<hY#Tu<9>r+%3P@`Y*Pv{h|)H!-^boF1Pqm|MI_fyEHA`Co$kG)2-g}U%0xhyGP#s^2~p -6^4p;b)6}<L*eQO@_0+|`sK+78e(bk1T-^Wt<s`qYyzQn-&!=1dKF;y=3VyJH|9`x`Z`Su;UE6o2`Df --fOAod89Zc;nj#k^^BSBMqR8NzSNKEz_xQ2W*<$td0wj-q-3+<SU`NWXYkJwFq=$anD3H#tcx;Pp)a{ -Rzo`(it=%ky8;zlvGmA7T9zJD}JXA^hyqL4kjS<958Yn|D0^NYP}Ual4<m7M&ciwH?ys@sSfjnd3BvG -#z=A4)5z6u#q}aFMnfh#qg*yftTMKE&ilb^QC_n{&8fOq`ZLNW!O?jfU`F2@9i-g!$z4V^u0&yNQag9 -W_}6p<ZUt95|PdEvH!XQNno@I&!PJUH}dBtL0`|fYbQmNwlFxF49;_Cb6OUhktA@BK_#x|p3j~rX}S% -sfckA>$7X4vk03`G@K;UxX<vXijJo3=XZ6VVGgD)(j)hzpejP=<z_-F%&9gl7*1D$q*e_q2Gn;dq{l| -sZ<94PW7QP?1>0;gn9D*|XSGiUFExz=|T`z)y7>;)o$iVv1vGIp(x^lAr=%#?(Pq}U*hC25}=#_ivR} -1y(y!+g*mY_xz?GH<LmDOawO0vFNcYh{R9JDQ<i06AEw{wbm59JiKie$Ah`q2p*WB*Z_!MQrRSkexu_ -WMWD-rH}FJ(PYvw+!s}{L&nD`lcat{`QcLwhp=NVt?Kj_(;<l(SFt_xZl6L&0n4q;2iUh1@oIzn?1?n -ZO`KDjr;bl82gXo@W<^uzF!!<mB4<V&gVTo5@G*B_;teERVPOZh?z^IaSB!)I-^9+!YI{4#B8<>X|`U -(Bd?Y|54Lf84&2EZu6SqSGrrNJ(h&8w172;sA_i!&O;xseXdtKe6H3%ZdbJ5YUr^OjFH<7E=~E`86k0 -QH&>r7U&SOXgMigTL3~Wu;CyB7&D|k;EJg33TvW&Ak7K0IKy@VF|O+Ud#B$*28`g)Us{xlUVnxC~Z8U -SIOnv3L{#fs18cLif$!Js$X#$nh~N=?Bp0xgiJiqNg=>MJGC!|u);)AbUeX(I@zZRM?jvBXbkJ8};co -3E)R!_@0_VSHPE5Q~3fm{Ozi(KJPSXp_Z3GM+WGNX}Wj0NAr3<2iK)^Ve1SzPa|he%Z)@PW6z;R|BR! -X+=O`n%(ks0zA6>S7Ts)CKUNa<dq*Fyb!l$q^eGOX~Bb;PTg>ZYxOQZvfRUvx7XQhbs8Ol?Fdmv3$-p -PfIa1)t(VBC$OWO5k1e1t596#E2sSR6s|AhCFem-Kf^a8AFOZims;^+Cy*0&}Tnj+CUI`r3cl5rctx; -VZ+L$D&z|y6jqvnE~y~~7OD}9VGhAvTZn)+ybL=zZYsA*hqpnb1`Jl%!YJtnL`!5?H^wGC?J7{w}{p; -sWb@rdoY(bZE%*QlSeBQ%67OhUN1R0`0IxOvO{2IeEuTTy5B+Ph#bFWtS;cLfh<A8tm%>Od8vgtc1EH -3CU%dVUOV%GLP-Xb0>%KVi1_2Dh7N-ns_ddZ+7PRIWq*FX|g)Vdp#_IXTvKPQO^hx6w1Q%Np`8!e#&U -hb4YF_PSV#6aK<q{_FqK9N|aR*Z+|PzoCPlFZM?mz`*cM&lr+`DI7*n82R~xo1G1%>7gfbj3~vA8dBo -ZD@kAnk2#7{>4UrA^sh*9q=EiI5&h`Rp^wT1`qMOXP$ula3D_t6LVp@3bLKb$NgnI%=R9Vs{?!21q&O -lyJDAuR*fDMg`}9v{2Ro$WgNnhQKoR;aVa5~(<=WZbj%SWpIOq{E`kK$eKAoB9LBf#FNLJ==J20jCNY -Y@xjW|;ZvkRancOv`Yr`<Z?9{>VyAOsV}kHMqsH-T5x%{<d3PKsz<om*O(uxEQ>E8DKY9irx@=ef4X* -t_G1cAsWkwfd!dqPdf`uLGkFNmVX7S%<{MSCzWYK|E(0_80Njubd4AbVoc08lpS;%kaLEHb;5y+jlp7 -LoVL%-6j8c#lXM4<R7mX_{W#5DE!a--4~_M^5gLMkHafP7L9eE)+;zW<q7rHjmsK=Ua=ve!k|@k<_j< -Cu0zdJ!MOp1JE>ug`CwbgT3<cmd$zb0()570b+<}#;570uri<w1WLf!juQ2oD+^YOjo9cjT0H^PFys$ -7si@xZa$g3oJzl_&MZcdNg$u&?8vR4&`yVp3?d_;Mp%2yRM8DS?B2)F>Mi!*aaJ*LNLJrm1<L(YRD35 -dZ%Che!`Ud)j*7E>Fp^(E*l&8)9)ZL=2fgh{&C0AqTYyPGFIC@s)*Y^S<sQ&fp`!_|xQD$yb;y81k>j -$@t~ek1%Y93Nbs^c8{j?!5za_f%Y=r^GFEGWU3FH3=5UI)%S)p#o-oW;tHw<+eegU|c;q_o|@hGB#fU -%SAGR0?{H{D2ks}S!T6KSv35$-Wid)Y8Q);N%SSmE8T5&yY_~K!QpznP<;vcHHn|*cDMrX@}XN~(O## -TDbhSKVy<f6cP_IET_qw+y(`se?!2t#`dFupX9oGFwH>=f(^E{o0U8F|rItCm809u%M*>=$?`g9sy3A -8&*urRq2VVmP=Wy9AOdFjQQ?RER>xGvr=RDBJr+m@gmPWiOfng`gn$aaU39o4I!9wwIU|C1e`bSTn7j -0b!o;Day&6{U#Kh}ZWKgyiju1WbYi|Dm7X%xV8;<W*BLE9#8S(l(ao8(?hHB>lrU%6TeB_)?KtQ*Vz# -smL{xA$sx6HTLq@A(yTPko=rp{vdXNq|TaQRt4GgM<*_*B_9*-L`vs+&wdOx*U2FUZHL6^{(}V^?YC0 -@<SBBP*2-GoW71l&|TLvU()q#HFA*G=J%ul_-z35lfstW=4Lx>T5g&FJvDcp+OhmH+*Ti%e8(Gv1TG! -1#UvC2kKKW8lR>?gCn<iO+LM9MDX%T{@{m~n)&RU2(?`|`VdF(h_yf82asQmVx@YcdWz(sCUsUp#bmu -W)i#)#?z6*(!DiQ8rU$FxYa7JUrG76it@-XO-OvIa^w<u2B)SlHz+Vaj+m<~>K(_0mamFLD_rJ`RW!J -l66W7$3jO^x}`Ms=FSUlUD7ykjKxkvG-L7{KLOm16KbEw42Zadk8rE(XV(@~|soQrX6BPM*A+7T?!8D -?LmMA&~dLPR;Yknv?vH6b0uEB|1(t2gd0^xk%4jfReFzFai-AUKy~d3u3&7Dt%oO|L)BNNG4emD0bOR -(h4#Q0kvZ`Cos*;?$D!AsK9Y>yxbj@KT>iBAQ5d9@Jse-lRMv;HL3iOp1RDeO)#janeva|rM+OctJad -kjT&Y0+S`w7qli(-vMvD8Pn8t73pK!_OP>n9ov#%swqb<C89Cf>&_fLL=s!}_G{ZTl65Kv|2iv^VaQL -`ifUAiK>zbz0J#PkoZDjHBItaNDpK|W8)GxJpNFa)uw^Arp*=N!w;CVrXUbbaT^WzTKR1ZcKq(<`6Sn -Akxro9{U35{uu_iVI-fay=py<V1ATr|FPY%|wIg^)bEQhqj)ZD)!J_)1le#G(!<s)gOT<COxvc$0*N5 -S91Q3;HMXb1h5#|D&$?_mf~vYoAE7M^L!#(RYvc`JYYs|C@!rx%2<cMZPC$6h-0$1|jrb-HO5xgnb&p -p@=<j10#Ex(LSaR-lHMG`&aaKy$GW{5WN?V!W%LAl&FQ|K6`LuQyZy^-(zPtaz&E69|ny5K|$~8(_p8 -6Vf;t%_R+`Q;{(I+S7ogDPUtpTh7)@ZErI?Blbt~(Z<FK*-cy1b@q*rqZd@&(_DIcke7Ap#cS?t+Z=< -<j=YxCgQM!lRx932^?fw3isG)n+5%p~pp`0vB2+aYb_0^|DE#-eAYVS~Wxq<7OsAU@Knsp)`*Y9S)NS -gxOkkwsdk^bJ|UIBKG`#nZ-LFgqC>E){r@2uI(>%*a6c}su13=!yCh0=#NG4T2HQ`T~zkDhFQ(l$w?+ -0km)8ve!5P55>UcpofT>XX>Np)u2!;1e?)UD3t-t2PV#m*_OhL>dd_FJLES`y>Au&Fc1{0(-QA57E=K -{r)nUrxa$5qrOBrwq4SJbxm#b7Z6&1a|-V9WM4k%W&(a$9CfbFXrMjP=yg$E8z5p{gD+S(wrP$XyjO3 -mgjFLZFdt(nm~%8h!{u<>?z$YfV~?q~LHFttcFnM>;f{ypxXD8Q<rJK2cQ-ROE@7M5P;dqA`AZ%}ytp ->ae5Hpw(~?xEJ=RNHJ|Ux|&d5<FLxw-H(1owI2T`8}Dc|bD8m`wS;s6duMAwt(WH0U<<r|~Mug+zQ_< -Etb^Fuz}6ew)FVm@R^mlz9r6XyFe#OxWYt?YsVgzr__@}jZl&DEvp)(d?%lS&7X>GpjxWP%c}FL}kKx -GHkagy!i&2luM4sP!=(Upa87srp`;{<85#_XLFvEAhr@2G9O&=r1&rw-ZMnC(d3<_0ftczdmH`fSD)z -dOxU-BjEGsEoDo0xVLtE&G@KL6=Tp+a#?Hj-V$xGAdVB#kLm0Y4cif&<LS+KButVSXjA}B`obvPkqvJ -ba54B(wtY_8nmDACBR7idtHOyH4)x36V%6?==<FXQOwK7HUybM0jR42OA_b*_s3==Ty_&HWUhxz7WH+ -MatPXtO(`q{0;^PC$Bbu<dSCRS1ovQoO{roB@;O2TE`f~Kb@`VHE1byN53w3%f?OJ#)czqbJmpT*_JU -?$|?xj(AD_6+S`g40e7*zv+T0b`^Xdg<m%?08{9F{d<sx?ykrf<Wih@Kzf-O*=Gw&j!QaTPX%0x=&VF -yg{{0cap1eH2Ie>jp1BWR~riWh$wAxkT!oY@t_NvMiX>1!+9{mrdSZXrMe@e2op5qYiERe^Subo_1=@ -s`~3_$V|-#x7*%54*c9co_{u$^=l!O%x=_!Yspg&MN*DWek!^^)a&y}fx8MW4DC*Z1IqB*H}et8-sOD -F@3h*e{VgJ&W?_yq(Si;eR%z`v0hI_b8v#-fHy9~8>@+P#5Z*<S#Ss>XBEc?;Cn|t9CoRgHKTqPZcar -w(1k1~Cir^fRt)30QIqUL;gVu+7IA*tMj<q8kMIJb$OlhW892};bk0a%au{TvR)FW)1c+y}T9Y2zlc> -wOXiQP`6O&4XH)A@9}+9dy|Y=Vf+eo!s-uqGo2mo{6FcZWy2qdCfQKF4NxPaYQth(@M7p>g!=`Fmct% -pIgwo*L8aK@{@&g*+`Nzz5|xTrX#k%4_DnZRt)LZ@WMHqRR&m5HpC5bE(Z9Do@3E&OrU*KH_rl@Dg;7 -XS58*ryO2X35*=*fXQMp)&xYd*R0y06p&CdcW;#{$AsNx4-&uYr`NU@9L5+O?krrB&NK6~>&@a(q-U6 -xs;!k*75%!x8~pizLZ|SlSx;<fdB?GzJhNMpYo$KB{J_H}`5e*%qMQWvc{HBr$%nAYu2WpNAIfVnKS! -Wdr=dH(+#us#*EP-Iw7YP45#?jlloUCUBB8j`$Y2n$ObT22H;!<<42{J*Qa#5M=zPC;Hcrcr3(`WT3> -Q=G8TTwl*>-^l;p^O`mG!!sOq`5GGa%8mCt+Ro#*v|{+y~?cnb`VDo>tnfB(7&!{CXm*|1mY(9n1bF) -bLje{Ud6)E%F03#AuvEPzpv7nnYj%Lq6?r+KAUa`vKdF63BF~-KNsLJ87eMd)Yy{r^{e+AKHWle^9@0 --$8fwMMnD?$a{h`j=kHv!@Y)UV~ratqwzh~mLPj<4@&mP8iZ`z?-$e%eRq6^;a=6Tw?skjGL2wgktX( -93>tZ741;%tN3v)9b{}J8Um6Sc=;L;Fcj)=@1iNq0PD`VAgE@i!)<x|-r8>91QNuV1(}g;A9+6F4=F2 -+)Sxab#$scIp&I*D5h8FIu5cqFs;m!(yPiW!s0%<?d!fe)gX8n;CemMsGH?(kPg}{G93wKrs{4H9z`< -tzwS9}29N<IX4yt};67aG#mRJZK|YF(VFGd&Y!j%u806p>{SW!2y;`;_Xsc&N9l43IZW)}yQ?utsy>^ -5J(6kU9?MU_DwsB#=df4x}3BVyr<dy^wQuJ4}`5lG^id=gt|xB@GL{bO|E#Qro_TKlU1_W`5Nse02l} -!?^18s(W1$<fPO;;y1w0Ss&?3&B&(bw+~FmIN4J?Ml0Xy7uzl~#R5UEf}%@KXwdtE2K+VH^DFbSLrcJ -w*^B(y4>>OZp(AKfHc-Xu6Hn($Fds$pp+)kAEk=^$aj?``yv6y;Gmc79xM%Vtkqg0r@^m^ssnBO#uCG -8KW1toHf^r}XvX4EroT{O(VGw&U5+~+QsGa+;KBTzU*Z&xt1^4%g+eH30ME@7d{S4H9Z>jI$nm{lLK} -d|oP#oF*K=DuOW|Mbg4GQl?u5hpyrfpD*zri$p1NA1S;V;&g@rJpd!u2MWH!M$~-7B3A_cRHL?5-gxw -qxg>Z;AKf+)dbTGJacW19s%y<U{`ou91&&S>hc~*!BSGZHl%5c=DyGh}dzPe4C6A@SbVeo_u$?Om?k~ -q`T&i-<h3V+b4TT@U{ie@Scsqqu(ldVz0%ZznP`U?!)g_+oF>5UnXk2mHdX_-v-wKUnbYNwszTzG~ak -9^Nj1<u6Z7<e-5PGNU3Cr^gaM*hpumB2LP8%=N-E?xOzn`yCLouVZMp%N&m=YaQLqFM<1b|8*F(WRcp -HeB=9ApuYXLj{oWxnbLu?-B7Za`?fwIMDhAW+%c{fg^vnXh5Axp*{_y_(&f5e2-TV7HZx8r)@9*!tJ> -XZ#oX>JO<$9|xhUD21e|;LYh%~P|ph2l_pKCe|30k$$2|>#|zh7@-R$l`HzMk*=g%d;`Uvl=u9?B@cU -KsO1UR$Qzpd|&2<b0kTQmh)NncI;Z=&o%qcaiV~lugMgx=O<|uf0#m*W(F&iAZYauER0U+i8jB0Kh^C -4Ob;y;tN>_V%MsudZ(YyWUA7xnwLuN9^837pO3b2o4{^`5l_6l1PoOlkN8Lfl9j%yak#wT*TWzV=S)X -gsP_dA?ZIBDC_@S=zauikCGRms$IP)g---!j38iE$-vokNde6h?TxU;p5%}CuyRjHvD35mqj)H+cpLM -E&>|l}1Nt+7leiZ2q_FJvb^-IJ6A$`j^R=SUm5+Oo8!yN=CPn2^T>Z_-}^c-oiqVp{VN)ESNM;=m4>z -sAWDD-;omkS{FRIW-i_CzcUF^Yzkiq(xq0V-7?QHZicq<GD8`;jd2fxT8uhBn(4fUebY9@&cvoINGV% -S>cM-@=bI;?-w{>5D?(o}DR;MiODG)dqJD6Fiah6hvp31jdUe(|UQM89<+Tt`&A&ffe>pULr&>-S81b -kWSp(?Fh}O8EDnbX`C`gN<%9f&#%$pe2HbRPiq7mzABDfs1D_GjgPLxq77>V*(5-A&C2(&&b9iIfw)6 -i;Xy+yNyjMg{_@zWOK(Kr0~))=>h`lDp4{tg2oG2J>CxBdqe=PA1%A<_oPJUAmL}}vDPwKiS6>cBI}r -USVYXxH9zBO<({$}mR_vh1k+5-g^>cs$^d(?ULA)Z+t-qhJf0+1TJz&5{mFwYC`2ef=B$Bs0Iy$!;20 -?ezo%e(?ZQ@QF%J~JFicgmXT|jsDvhh2@&Wi&MSPd#&U+xu*`t3WYfaXLYb4=f#^b?+{s7}dt_78cdx -*PvV6@5_b^NXJo2`$?`U@{<58DS1nG`gpWoFTNfxMC?<)@js0wJ|)TAGLFu`CJ_FtAvQz$SW)pn~t6y -s;8p?Bz+fKyuA`+@(K(YKlK(7sL3It&-bK>XunCuQ{pa!p;n}VS#&i#&Zk2^2>fastra+gakuCXv4jO -`c#S5?u5E*(`E!Do5>%>LsWC7aoQHPf+2~XoR^~H<!3{lhd^Oi6P}g)F^DD{O&Y0kneK3dfHHx2^-Fr -MWkyt=+>Y@zh(2Hk<iERBQJdfCTW!;8Lga%MjQgj-T7_R5TG%XSC&G(w8oTXyC+P7CPXof2^=M{pQ2D -KFRWh(k6ZcUEBkyufHOQ<&-{2)`ysHyxu9cUuV@XH9<hqQVm=3{cmTa;v>D(QZ%@)i3kPZ0*aL>i4B! -UdQP(NP?D?}3_y#l~pWG#B4oliFt?SEhVPJFg7Q9eP2B^IG$htQ$FVLRws+v+ZXPuxP<>xNE#jns%fb -o?&uBcMzoj(TVBJMitD%f;(-UCr{4ihG#2W!*00J`E-Ighy)tNogw&QBObrf&a<%(kC`kOs|>BdC67m -+5Qq5Qa^OGdboje8?Vkwz|8%W?N*#Za`6#^6Mr`}{CP*B^aU7xW&v+wF?<^5{Pi@>7-d^Ma@6<7Zc2T -^28Pac;@@TirrJ+xGBNpw&vN*iU>lofUoRBwlgt48_Ma1s<wtb19Z<Ag4kBHo>a<{dK_*cAfBZtVI(b --$T;=P`CFBgjTBMG@bVTkXnba%{s*Yi@;UYoOVMf}~{9>3eVuy-aZrQfj&@;#06iz6@fTbW<)DTDl*S --PxpP2|ntlf5~AmHF%c3z@&E@8z4!hyRrMrtAOh4AAFN-<JO(^?~=nl0E#t$N)haFMmk=$M+eaqg(vV -EYK%%ANWg$htgRl&iUfu^_n0?$`;n3Y>w-)(4=}r^ivg)y;5N`TOulr0bDtZ4(1_c)SUI}HHuh&L38j -1YwMAvGFd_dkA(#~btlOIHQ12XbiEyJY6dIMycz+oWdn9ZKuQs(<;k3s;1jujd@0xQnn0a+UxVy<JBk -Q$Rl*v)oq=B!dHyW-J*rRen6$Fsq2D>Ua>DQy_2U)5t6$Z2{4Dpsc7t3v1+Tc14!(NWJl}xjX+BP8V> -<h>=&_Gsi0Kyy2Sg;kBtu)f!Jp6kA)RliZ)Cffn@@2Xk0SDtHMVxkfE?GFhLmCH@$l$%H6@KCPWIA>- -KGT&n#CjQc=I2poG5V?WQ(SoBkP}}>czSXgW4*xb}xGT?hEJpuRhw%{=a{j#LpF!|H%U1DkeX_;>V^o -m?Q~;fJvG}F$|-3H;@gKAryiMn8s1^Q-7&+hty3JC)h5zcYJ<FVmFNsy-lKagOFfH+qXs2=l)XfQT5w ->P_l#KhI|41o;3mQhzP%5VIORf?)8;>&=r0AQEkE>{uL}od(bx7$J@U{!O*VjH=y3YHhfRA*ufpzQ67 -DptJBn;hR2b&(dfI&W4q>yWBT6Q@pkeI;&*T${X2>IpA0+=GYLor)7A-dYs&}^rYrm`>$P3h+q{r%>> -K+SczZRG`Q<mq!9nUa{1au^cMn48&%(->AAM$A6%QeD%7O5x_qPqx{yeFDJNfn8S9HD1TKQq%$xL4?& -o49Z!@-i(G>e&}>}$Kl97~}{7rr;!ffs-4UfY}3RExFrQn0tTAbfOwC_lV~?c~QfX8!rypXqVnx85Nq -M<S%Na(lJIQR~U`Inuea2$`2*$R4H)%;PgWD+E6Z8+goC6{3e;8CG$S^T!+pCnyS*!)zOldC5uP5sUC -cgu8UK?apOKxB_n3Xk}V2psnH9FQYB4^f?hVd0|hN&^a|Kgy4yl>rQ@G#EwHnUog_aQeL8|$>z)hfga -Ik`EeYY(5+5)RJ(-7*LZqrS<pzY1}BJnIjSI-HTq>kJ->(#6_2(sahFr&d71#VeYLNXL5A+Ru%ty3m< -T%{!4e}!5Hs%DS-C^~Ib3U}vseVBOI10o^tS6?Q`wWO34l3`pkatu?rPXx+T`k7p4C}oS2wZ1mY^KQE -OniJRC56aYp@uJHJtbWr3?^}Sp5oAWS9)EvdF`D?H(C?udWMrf{@Omo#J&|+y)y9%{4F8#jOpZobAGE -Al&e>r$kLY0$A5*dPxF`2jL)Ja`<4}@?%M(aNL+Rc2Pq8!r51wIT|Q!q$5w&nA2UXi33}Z><-&UIU5& -F)$?0c--nA&+_wLwGXo!@Hc(_J5d3(fAos3mowzOUB75Ny1mnF^+D7aRYXQ%h5yO4m!NAKASvy1NA=O -w3&m(HJ&f5m&T^v>FeVf)*PH2y{cM1Fn$Iq#^mRj!vkK4?d*Lvi;=yp9?^DPVx<>?g(V5Ns-HlkuYF8 -*LX{fkp%%q^02yt*akrghub8YO_1rT$UWC`DLaKcvV1jo<n2#`2CK<CWEXF1j%-;Cc1t1AAD+*zWi*3 -j9w2ZjHddx%ihpBiV9&61qg!uBrp=zzE&x*yHtj$#pV%1gA40#2DOo{@oqBvm8@Q_b|gp<VD~uosO0d -UoCKo&_cM0Pe7hC8cmLic?zJ~C7A>xZV7wi1^9Ly2xT=$7exhjc_`;cvpV2#$?`5qh07Y_+Jk@r9G?b -Toq6Tf7@BSja>AEV`taFRN8F7#DUVv0IeZHAN9`OI{;C@>^`Zq{FdOQrmcYyL8L@%5v2f!u5N0Qa9W$ -SG1aCZY?jrWMG{=O-FsTKv@c`bd**)Ak_wF6?{`E?Mi0AtW#5r?BxoYxGU<;SYdbmXXkz$O(e`GkOYg -!Ewl+rHj1GNXcoD~hLgus&e73ie6pEt3ZVyY~?a9>=q$6Z{W*9K+S_(VRzkvS9&ddQS8P-gBLoku!aB -kIV)P`Q!i*0_<ZPLFKUAZXT|tYae)=-~KLU)`IUCvi!#jmby7_2n#x)+EP-YGrVRZTaP;1JE<HW~K*w -w3(8Hmb0LOV*PAx-ov`N^HQzq;1;eysEl*QH7gNA!Pj+HYs1Hrp1~JzIypk3Wc&ycEFSl1DnB=%W}#D -%tmo<_tH*$zsq$qQr>J_dIE^pD*j~0D4IxWg(gdiAk~|kwRY$i7$k%E^f^Suf$F%EsGx$95scO2t(Fv -x!=*84Tj+-+r0$25E5<LvS^L`HRTu1q8XWIAxXX=$}5}tJ*r=Dg0J{>b;%NG9S$yTBy%fG(Rqc7A*<a -Tys{GX3=8^8K;@v$4*_=}ho+PHfRN&FK<`=2fPLEC<_;13S$7(`(xh7$-3p%ji$Ft$&yp`h&$j-dpMB -RKwP0zII2|A0+CBX4I=`pth*YOkjx=$(hrZx@n%co?~9<Ig?Vp`EQ!*xrAFV!N&llU?j?ge`pQ+C8`P -o<p-S!94+<?t*wbh5m}d?X{KAE{fszpfLn{8>$EIG(7Z{)ybaniNoF4gm_OugWtIyWOq2&2_;4BNgV9 -mN}Hm)%Es}%Ee59lpyJ;u>tIiyC*TK#yU14W@d_F6%9Ale>d_StLHxytfPL;t6!=bx@)rMR24>?!k_* --L&3V>|Efkxg`Jj3?dpo{&mY59<17Tx+WE+m#|G%PEuQ#~tG|vAZPwB@E-xjpkugq-v=4K#W7M8z!?N -QZN2G;m$GVII7Ma?fgs^!NqXFH|`nh5=D;;zfz1q2jfim#Td*B0V#7$HwG^T7-2^LE@ZEmjOscLZ+Yh -qiae+a`b`#H}<dn@%5t!Djm7hHneX!dI5ceM_Ln{LXhZ$)5zqm%hd`cK7R}f(Zh{$-JL2f^F27N%PN9 -UQozcBnGT4fW*0%$9w#6IXiUH!<}ZTYMO?krJnZ_rm%dhGLKcNV)-;K#r0N7UQETWOLIS|@)h%d9x*O -Z**b$CW7oOxc$f)wJ30qL7$K&v_cC$O!GQKw(d^*M<di?U9{?Xl-M<Ky{}BJS<j8p#XTI&(%y_0sk&r -g<@E6Dt-|zjTOg_spBB##|`(<I~rx=gM2MjaaF7k95;(pVyE`XD2yD*DZYUeodr_iUbC#N?Jds{D>i6 -z@U*Qbcpyaqlg9*YU!3ABu7#gqbrtd~uVWaXi$D(=~p$x)%>@Kn#G*&PZx&AKuWB_`pF_GTX<r63cU9 -Ax(FF|_Ke4gI&#*xA7GE4qou7l1SVkJA?K9>1SJ_IKBQVCP@2`$6p@7)jCuy&FA|7`!1Q4bw2Tfh0-c -(C!C?!U*}P1Lh`IH|$BFT`Xc>($LY{6b0EO>OKoG*i9=pSjD$1sZa3|p>}B7uG&CxuRMBtJHgbhMYlh -LF9E@Ksd(^?Z*H#;5_@2g`c(#-e(T*0grhHmzLGuqh><&%Z>#Ke>BQbTn7)Ue?{fByuPD5~b{Ow-F*d -l~ggc7vRY(c`ezIVH`Ar9-zt3QsyL?-SZ+Ll)!5OLVCFvrd*ErejVqD129OHS0{@J{Rw@cxp324vW%C -3j^u5^MU^fHSpbNdJ|3bo5$HrN9`aL-)jFHuJRE98~To^1X$qv8#Dys*4m^S{llfPS8up&LKVt#HGpc -B0l@V_pa~w)%(zTCTH+@eQ?rudpR)Usd`)Ne9n~{{TXCeVsC=?J%K2nuE%u&8@jt%Ty?m?}(;Bz4(9~ -#MxPTg*vv!MUE8^#TCD?ySAW#su{CxLW*>_+XE4rC4Y6}w7Sv*eVh}QAf?3aWU72*Siqnl2<!Y)ZO4a -M=;2{m8^D$B&ct;tr8W8>b>zvAu7M%Xn>by~$ITIfpjMZYqtw|Z%+(ppUGs*l4ERhC5j~iI+hs4Yyz2 -%zazesN+q<`N;zi~yc0P$urnSxXC8Lt+-(HDL7<YTRS|~U*i7`bU9|7FKttJZRUm`q@v6`IVQ6cnFe2 -m9i8d05UdsyxI0TrHni;OIt%BcZ_)yxoeu#`*S*?_2Za^%4=johCIroLn<4IW&GB8{HOVM=Ip_mYuXb -TGm7<vnOM8N{bC$Cs<9`T!3-6_k4s;bUH_0Uc(T?=H9SdcWdN#HivDyThYfSYvg!lxg-3KL6m(Y@&Er -C^5?mC~@QTh)24^v3%*O8>xfvG(R54*QO7u)eD~tc$}BZ5gD5C^(0i1GNldi)vLyr1YZMszy??~!_rm -C4Li3Jf!8wpeC2u~_ApSvjcaBZraV-sZWleQw68^eg{N1xY3e#AfI=<?vgHOao_cJWB4a)orXIBRgK3 -uY`6l*>85oaO>G&d4-;Um?qj(17N5-kAwLJp{ae<03#)X2G<|OHBq^0^cZl5ttQrEsdCT8w7&X1ne-$ -ieM-!=dLSVtxarMAL2&ma2BwC%f-3*43?#KfCY|7D7ov2T_Nm&N$p_A>QA)*U_=jKxDja_CAxMITT7d -EY+OD1!H7eT9qjvPMf6<@NK9VQ1S3&yR_GX7=TEu21ysh31iiJcp42w{JH9CuYi$kn5geXc-<)o4gY@ -DM+)h5KO1mN)IfypC}EA3<s%f4j<LKXcUFCM91-&)&P8Obu^)oMur%EfI=`c(6VEFzK9OaYjnDyPi|4 -`<@z1huhM!N*mDd9?1?_12HrUv9<&hs<Z}q$q|z}qUsiPFBZ*#Ec_JH77py^UW7~OQ?D2TI%ckB<#KU -SakbHTV>H_Cy@Jvo>c;(j>QBYzOpNE<EyJsf5MSU4smAOV3dC>{YIiHG6Mo&HKj)~<o^OZ_VV4<k?=4 -0@YjIRsN-!ATmAJwp%GSJb2#A&qoPLS99bZ{<rM(WD^R1k8hJ+HJ_Q(OoLqK}E?O}s9r?i?RZbFQ^_S -Q8(LOy$|F4#^`pShdjH4Z`xOF7OXm+y$Ske5=Cwo&mh($o@bu9nG(#SSGLXEFIzJA=6CFR>dZlAG|?k -r*$KdV_uf-F+vW{;gt$WZj@&k0Nso<1#n(6<;0%+F3?<c<bu;k`>P7`?xDY*#ynf9+7>;Ki$RyHc}of -D=c8CSaRK~7+~AvA)W){2R9U9^u{BNVco>a>B#mx3=ybU~kF?0?CPkr<5umta7~Ima9uBX7!-5Jph47 -TO6ZB8)qjvrx%+I8allWh5P#0fi;_unf-@EI3p7g6beqc-x0YeZ%k~qG}N&-h{65ZW1af;kv0pGrWNC -^7W?k<3L0fwi4e3?dpzD<;NIhXF9m*ji8=x(_X@6s?qK4nY+x@QGKXxDnkd)OB8)^wZt+vMSHLWk_3{ -xo{CoOjM(V`lN5PW=UAioaA5(z`yy-w}WE?f<Yn1NAoUgoyqA_-&NA4{v?bu#LGT?*Xs7xgGs3%f|L> -$951V_xuNq?3Ihi?>)o4oiRbmH^yYs@}t}~z=bywdo}%Ap>G7_Gsd(Lo`1raPJ6uPD`S$5Z^m>463MJ -LWm(@i*7Lo&|0dVI#Ph!mMctUv`eTA1n>RHv1K%YGr2ph;fbSpYcTbaLa`E$K05F#?y8*xHsqF%V>Gq -w0>$ywR36rwX3U>R>;ry}f*Wo5+u}yT~s9}us7z(f3;01dfhtsgh;=4H4g$PIDafA+HE3o?VAje=I{^ -tu*(=Ha93`Yg;Wk}7Db05mG`m%uGES?c%KAJD^enU7YM)A9}PQk|Fg!3h$@(UtBERArl_<q#s1zSzZg ->a9tahwXe9x#xV0A>1VM;VL~<OAjGF>$;$5B+1I6Y{2vsTwg`E^ZE9?i}-%c9O=~-~I(m3XLmZko**9 -8TdHA7XEP@dhT9Ehv_8E*dn@`iPO!hayYW>P9@sn_kw9VDoYelRdvBg3m}5Fmz+xT3`!J-Tk9#Iss5R -o5BzYb`v+WIN1sDeCmk~hY81G(+mbpQpZtW^x!jk4t9i_G<Pr;orPDoPxg%;8C-OS2CjsnE3fJULy5= -@REfvG-mE%@whbd-Klf!XPS3ntW1yVdh&yz1Fr@LpDr^G^<7|E#x_L`|&d)ZD#XGU55fuybzij2$%>{ -IIGzGn}BJ@PLW5~T-nudm&UTw!i$YU?#&4dHPpteuKkZ)H5KD&b%?tu3_`>!x9?R-S{wA~4K|>$|a+5 -{KznKXXr{5Qi01M42A7=?8pH$*b){H<K-HPmj6Im+ZPgS|?>np!)*=gY`?HPYQcGQ*A>(ZU<1N9HI`K --qNS*ea-_N8mt@S%MXL>;5dy<$1T@|Nn>2S@Id-+JeQE`g}^tJ#HW#kN_fEDs6;<KP|Uo13oHP?9Wm~ -IT1d>llWBaQ12r{sNAJ?>_|T|&NIr76SH&R^Uvc_;Rg!&d?;9VG$AHwv0w++7hX)R23<69e#xa4Qr)q -l=`p7ufydmAac8#p?#Y)AUrOlff^^)9`B7T29sMb8JSBK$*!)!=Qs0_1p0bDk^3Hf7|=tv9P2NGRNsF -o0u!^ojJTE<HRb6a^)v1rrL?SWk`Nxt5s>U?@+%_`$SL=1P>Yvtr5G};v{=9Qlhtck_5YzPNCKK9nZL -SiyH8pq|qk<^;&>WRT82Ia2as|T?0>J~EUsVevoNdi{n$l5;5<3U2HlIEn-g9$;h9`2x$oXsn1EO^V* -h1r4!?6N5l;E9xQ9H8fC8Xklz%2AwEKjJgd@k<ZZXw(P%%Tz279?KeM4ey8!;<;3xGZ}L)DJTI%bTDP -jV8;>+zM)2))fvosw!8={7n|{AxLe#?dpd#)g}%Ze3806^HpRo53bFSL;ME70t8==}=gMJL=OJ;h=}t -v!Jh20=6%d1-xycHcae8tR0qKwBwjjd-4urvb48j4kNsCTmM54Cn4TcU@@`N4T)0AVY#JnAp%#hz_@- -Bi`>0mnG#3pxe(Z^F2s^F`cfv9=*>!Ju8BA*|6bz@Fe5tpl@-X2f(ggx0tzUZ(V<ySd8fmdxVr9lVh( -z^|+bPY8iEtR0yG@M>5B--B6xT;T&D@flgZdoGX5$8G5!omEvnbf-wEo*~sr4Ppc;q#(dx@R%$k$7mM -HUD}C%u$HiI1YsVTzm1Kt?<FHe!lyAR)r8W31b*cQ6z+KJPN}IdZSe^gkvbW(JTZaaRUCd^a6VG5fs{ -EPrDaoxZ59u(R-pwvL6iJu2V6-JARX&JCGysZZ3(xOW-!rM8C&_(eEZW2;NNz5a=C5dV7jf`2ITEuN2 ->y+^<;`6~D_W(48^G;T{DGuzkEsg739=G`R<!;J5uT`JU=R$9wa|Ze33A)CmuEK1kzxFe`W$d~7ScQw -4tzzpaQ9y_Mrw;k&W(+M^e-c6KkC-hnqZjO?->|5ASOW$e87lP#24%d=22mygOY&M~{dgYj_pR9uBfW -4n(DruNQ-0IgskgBKvZ)V|D2<(XCg-uHJOb^4{FpbZ=0h6L-fFxz?87vtSwp@e;Ks;(=qMX{n#8) --7L+N_aHG3d<j_9LLk=9#G|2L`w5eHCiv>`s0r_3VsfVQd#9Ygal4Jr?Nn~{XVGS^z_-}iM==|M=ie2 -1d`iW>XJWvgRE*a}zOKc(nTh7&@!hifcTyRBJ{ndS@do9&7<xsNrM$Etw~VOn(Srdz7xZavJM8dm)`j --3PAhi^h8t~nN4P_i<fmSbpID)|t2NN_hM)|7zglHg`%&l78o(9ovt4xJsfB@RTw+yURz+uQs+tX^YI -0ZL5`1)y9ft_Z8T3P)e-!y$;8+3;xbq0ev^%X0Yz8JjcGm|7S@Jw}$`N{<+_+|`)Ae!6kCXb)Va_gIZ -FZNdA{sBllOJWWZvb0;7X7)ly~ZTdQ%Q7Ck?^=T_HzjZ<1{jm_o5^lQwEs0#v*8P{-UJPOna-AW^xX2 -IQ{B*5NzFZv7$(?O0zHaX@0gNR22OVs`#Vh-?eE$4F}6APrOXW!MkI+uk;n40?9dqS!wPC%%Y%JY}tX -@h-k^&j|pis;-;||dxI;A(w{=;wvpvF<KuL{=_Si1sJ{Yomy}blh~cZA$U7nBxD(FOoz~K`1C8G8K;k -kfUEzfF<G$tDbe+QPrjjd_QSji|0M{L0*Y1%z!f%b-o$70}G~J$Fz7REuIx0zC!_!zSE&MzUwF^fFK5 -=E4yH(POgDc?Vjg9OzVeo_@+Z(S*CDQjf#Va<J%QeK+_<BS@;+{J$3l0!rhQ|&sZ(4)1SCTVuAfHNZX -4<*N{JSEcMXd3`EUzI7D)|v^jnlD)w75SUZ1#!7YaWaeb^Tysn9Ks=F44?i=5KyGlodF#h2)Ox7=u`) -+p`hjT?&s<kzBFIU+fJ&xfb|#v2gjA;7V)!Fd3I`6I|ads6R|_E%f&U*J$ltfQs%zT%*zd6LrR0E5H1 -!3%z@oM0ZtJ_W7mkgc5EgTWK7asR8rIi@F0oX2JUCY4|b<_6sJc&23SUKfjK4C=>PVxW0tjQ+4|yzW) -FM$%G=ldu<mlA%|DrA=A6t>fbE#*1o`J_6@aKB=&(X>q}PP6x?0XC~{+$Vhs6dbafo?*~_tH)#^|cAi -`&SemtXdD0GL>v|aOj?ru!T<Zybc{FAnnId56lP2FB3u&-P^Ag}SGo#pv#i>3%j?jm7un_Qk^c$bK#h ->^3TRZ})XWUHYJVYXTD%(&Q29`t(Yl#{fuOn=rBJv(I*0YI#%f#&f}-YI&5H+>9KYho|rUDA)0JY~=J -v>q1&WRYu~oMe3yTMU6s8_flWyp33(W{?OUE4(zp#_^XM&(|mxS|OOvt&7n2pd)$(ny<;VzskcwzaqL -=y7SHGLQJdT0_c!P7f(_I61NBK<axB{w=z@Omtfy%p@}Ki^g)k%A$d`$OMXP9dsfJ|m|9=$VX0ssJI~ -bxw;ODpU#~l4D2;Jbs2a@E+e~abPo0uU31yM@v@C*qjrb~sV`gpwyxex*!wX1*sGujwx6|eXF+{++P1 -W}Ml+BkCsdzQjUP&9xYr^Fol{4>js;JTm{AWF)t45%JKBe^O+4#9-A3RIrn-PiIpscQCX~3|ohqQbML -*W=etx@zxF*?|Ydf>VUjf`8c<iN%;t>B7pAMI6=%Bal<Pn##TI%@EV3E6cxpkl@MFQ{3c2Dqt?kSH!N -qB26?oE&ok(2Ch~^5oKlYMk{r5wL|l&e?VQNt)xCAz;zLCo37;WvbmXSRfUs_;#H<N?0jX=<f&rlIEv -cU2%6{PqZ=4AHl!uB+7T&^{hySf2l=NJd=2*p<nMhEAmhL^?$J32buk3sUP?(iqj}e5d=X|C`@m3cw@ -y7_Gv3H9qrY@d(jBFhwGyE%!q*8dv)n|y=_SBal<`OxI2A)UOOD@T^hS}Lb?a#f@qJ(Men`~65rWm@E -!%2z5{wuy7z}{r>Nu)D*BZzJG2+81nGPF4Y8+j>EK<E9PbXQIKK1K?KSAP2mHpeqc5Xz-xot~&bzHZ5 -c?Dz>Rn$PQTwm>U2aT}znx9{Zs};34+5)b>9z8+dGHL>Lp~1&wjc2~;A;TxWPev^%gvf{^Wd-5x~yv1 -LalMyM?p$-b71%;=8JE!4si4IE^O!_MB@H-)iQen>)>kc#V6m`?zZFDe=hh#`L6_g7@`|I^KQ}DNb8@ -O*Y(F^ni%~=WNQP^Ol=Y_UyDknz7E}Y#d78d&y!|3ll(O+E6j6kU)?H@PWkS8?j!lzL>{;ybsa6Nwh{ -GxcdImWn#6BKC;FcY{yFgDDGSjz_i^Cw*pFAxND^M4kUbp2wq--?kW65bjN)YlQbflB)z;Pa2*dc0%@ -x$Y)LZAv4^+POp6))@__2|!+v8BdH??;wvAb!I5<{LYxduRWA~fSS<6%~=Q$4`5#KMt=ycA+^n^L3h4 -@12VFn>s|_vn0huCqYa8g6KLXv+|D2V&BAof%;W4dkZEubbU8{_sl9mylT!QSx~Az=QV_Q{`}U1aH&1 -ytdsV<@`~3^n9)XPrHIcu;YWYBV4gKhH<#4&_)sZ4ZWVF8{91qGBrw-@(aP=EhvvY+;)NsJAtLOJ^>@ -9IZW2sSO?2BQbb?KI}E8*m*G@gy7lq}#_jSVUvryVRS|u}F%`*=ZMiS}3-~M)27;8H_r!$JNI#~+wo6 -gq;mo4S-2J701o$WR<KNuJkL`i#RyarD88`<<D#9-ld6jl64#?{^_I~n8j>Qa}Z)6k4kL!3(s7s!<=b -QAvuV{Sk*LlU2Arwjtm<st2*stR=cV69k6@zUratR72G4!HGn$JrE<L0Yg%r%5Qu(L4om-}5fFr_s|8 -W97c?#s+ni)6!R=_3@Zi)p4;HhU@e<$%^pa`)r2OWi^3Q5@_BHOcmoJ}E&a4n)iN5<sNSvcg#A8Qli1 -6uLEA(v{Ro-Dla-TLm2*Sry~*i=Z5dxWdY$$Q=q|Ur5_|S-1e^WxRlQGJoOd@~9)K4~WHmS?bN<`-3g -A>iL3maXAJ=0`)oM_O}w<Uf9pC=<2xh3=}#+tSrc+Rrim#zrEw|yNw3@A8djD?UFxjgFi3#!&XR<6a` -@z1Vb=R!VpE!7!Ko~8j){X$+q{A$h$l;eOFGt2QcC9T_d6PG*?LN!#@b}5A5^q#(khI`bQe<C66ic-c -+M^`4GCBTW<T(wy)yU+ia5B2g0H0Zgdoe+jjY@8cbr}_>y-;6GZJ>-fpiE?~WJYd;STE?fE?T9ctPgk -K(=H6W!hmw$HQMw#Dtq1M0m?#(S`8d!}I91mCw4;csg&?OlGw-(oq+`Rq$~FQ545UCn<UN4Bz$pNDJw -$J^k(3j)8`2D6X;oNXJtep_(w>|1{9&jHN!ql+=yI~K9+@AV^%rte$e_s7Z~AAf&(;J<nN{po@K=JEH -Z2jX||EBg9fmRUA)9@*u>$eCU+%%$uv3#OVXtelN`c%lW9D@<F~spTN)VmT1tUF~6<{0OJm<pCC>3La -Tkj-0!2UkGX8@cMaw#>*N<gvvfSQ6^~-_ObJMvLSe0EFgUawNI(=6~jiG5Pb0>KeX)5-6Y7X=&xf~f9 -Q@dsq4lL1lrb$eq@0)k0Q0Gl2*vKi$B-wztH#Z4;b+66E^AnMz)&0H1hS*^L3Ihl4rRrnfYN?99awGI -X1a0IjGo1ri<u(e#9ONa8CL%i0v~h%~2CdPjgDGeUUco-Gfpqgn>Ts)@Lv6O9n;$R=T3<+Ap${UXR<Q -<pJ;%>LyWeRDN^g#RP?%b6IXF|8qIPeb4{pHu`7k;kS4HQY>&khy@D4ad`LsC14bV2?)Yy9Eb2vYY5^ -u2IBD^mqy?n<~9`DsCWqN;q487V&si+!Cq%Td|q{#ytPFN?{{o+V8cL&-V^$pF2LW8K{3ALD@y(m!h5 -KCQzRP%Zg2|y3L$sPU}9e-2=++)27nvj2FPAB8NSOpsrRtFZ6V@~klT|J>3its+q-y!`t2-^?XQQuO9 -wXKPTqQffHq0<Td@%BjfVBNMnjcR$TOopgmqQ13;CBh-0vv2TYfUI?$2Jq!R8wG`L*HjVnNk><QeN*l -Of{jv1fKsBV>T(;pN|B*V_Em{s+@|dE@`v-|HSO|1wi={r=!SQ_uZ*<kT;o5cu6A{_Y8ZA0F`^j2~LT -abuw34Pc|ySGc1>p&I1)rYD@e%w8r7J9Ktaq?h$j<6>*3(zU`5#}^jKWLDKGigQ=omCrXoiqEpwIfv_ -zAS{T1lSTv&V)iaYho7#z_aa?Vzas<Po}&#W<DxTaa2YR0JAOzT3<4-W^lq=;2kLk?dWfbY@oF5ijip -W|23pW~M2?bw29qPDnqKBxiYrFzg*;>jIexq(Ks;+l$Pd>%LEAB|mWS)f>peiKkUc*n%$4yFIUkrzXT -yZsm@O-~cuJ)7>#6j807k%UX?J>^@=)EVGDIGYhq~&lN}(7NSb^=_Z&!3<R!P@2L#>Tna2j7l<Fu>aj -;O!DK(N%)g<yLQv~d34q{0t(DT`R_&aAcNRSI}LiN_=_?tmRS|D*9k+DUO=ohx65t{dB0N?({7UGTa( -YQ_=`vpD%jpBEnry<tDqaG-_^21Npg%D7s#auaelL}#Ht5KkLaUu?pFLwht{E(v!f5BJ)ED?3gv4a98 -a%6h_ANp*`J1FE}z7D@rp$KB(F7dnJFp9mxy<U6dlz14+KOLI)?kGWoR7aM0ffv}f{I^;a(JVe01*tK -PwAVk?ReK|1qu_4?ex%$iVY{R^Bc+_O$PxQnQ6jQwHS>UT8i)N{R8K=Io0dSV?O(AQ7*-F=ZWF4ND>- -;q0)RRqdf$XXTb!8?*8D498{ytIqg>7U_(-_xMl5X4V*Zff^1(x*$f9Q)leA2K~N|y)0^N##q@_!Ef= -X=&aT;bocd+rBzk5dSZQ5&r%Fa(FTy$gb142M4Lu-X_gj=m=-qwkT<$)2Ny_vU~<VsziZwtWL8-|&xb -d(h|Z_3xMz_MWavzb6fCOOo*(tJ=r9hHrzBbpN$ySMk03eh)=$8wv5NF+<TFAKRPn!~F)BdM9G3J!QK -+F#MiMoxXiZ$ld64A1}D=lA9nP-t0cW_nj1d2h+BTx4WQZ-`1e_IKuF^V}>|o-@8Kb8@o?X5y|QR6WS -%Z|CQYbKePMY<m2DbV@G4<4|=SAM~_coqs_nuGRa4C{1N%K;qBHVKkr@ZKia!~&LRJId)J?x_uJkTf7 -`oEN9Tc`VsE_m3n$TU&LU@|_5++e<xEV3Q2}TQCepIF4$f(=?S_J2wR{i<oa!UEDsLj+C2kp3xHmQ=O -7q~dq48OLx*=wi!RuK7gDjqymZdGtRWPtBT<)Y-<dfqS8f`hFN#i&dBD|gt`Qh-oF87}X!2s_H@bfdU -bdHe)ez_YJ!y?r!Cemg)*yrChNdrIlh5u@H?1h66j^c_GL2OYWE)Zttk^(=TPz0dQ07j3&*%R16jj_z -;6n^QAE*&xJqNQFA9WWHz7GWpnW|&mnX=bbPrq>+RKBG?nH1SlIu2rAXhesSukQSpUNw6&JOb*95v>R -dEJ)51&KPdi{x;Cq}-~T#y!}EtJ_dlHZ3H1K{T^~UAi#vX3EG1wP+UtEOiY8%{!f}d1D0nYgArP9RQH --QW6eVGVLLll>{Da}0Zqx6<8YH?CWeC}=kJES$LhPl%)J~V9x6g9=d30mDWaHH_w1*>*xAW%?f#KVG3 -Eh!&_YZkHckT%QWJjg#OKd|W<QMq2i3cRzZ9w+nt<fH=-;kJw_K3(HM1gi7-S2;QMs1Xxh~9o6#Ez6` -yyGH;?Uga`8_VG@<3!RuOtS%U{M-4f$92a)GWozihhuMPQ7tve@TUsm(^(6~jVwmq{qiYanZln8oh)J -au3BaLBs=*lY@&UL>3CZOYsZGKV@6MaC2j|oeJCg1YNkIOKjw>0u)H4&koWmZi0aT!DD*xLe1F0BNVM -VLN4F`Wy`vm5uJgB#Zqskafc>B*Qa@z?a`mH>W%v0MruzMAvhdvB%6D%svVou8pQo{x54_jkZx4Cjls -O{3_ig<U`Pk0`KU~0l7yj5D@pok|dzB0Dwc>a!^z^=FRAxWO2F~;+S+~?wr>Wu<c{X8Spv9ecnj&8qP -nT)IVb)v7;b;JH(!f1<s0rJ<;o218&@(M<ZKJ@tjRXM++n8OBRhmQ1)8XLDk{2N37KMOv-iS3a;C5^T -s?cyYj+%=VBt$kYNxdZc+08LmG<a>DXh)cr(P_j1;V_90jHMyr%NcIM-UVpSHhqRz3#Y+~f;vK-c~qq -392^-dIZqqfpVg_)qFgbOLB+~me?$wnX_W>)N?qdv$g5)1EbMvyIl(Sd7pGQTuX;w)*Msh*$1a?cI|V -DFaD6OdmhczIF>|$q8nY-W#Rp!hEpkkW9fDlDoo0jyq1WA;R-VodikeZu<;dkN-cL~_E~87B&9$GNx6 -5VISWnP?0->H9PMKhKx!+sO0I@wk2(*HLNRL3}`lNLKi6(+eDn_U->*-v)s=$67qQaZ??iK<wN<RwN3 -9Z4&d>a`Tn9n)>4h}M1UR-VBjuq9gFgiAdnGD^<5xE1UCsgex=bE~LK#g>4t>~18Ik8e!1a!1=$gbx$ -g>o?5{y_{iV>)`Qi%YF4Ork2KPz33Vyj7w~`U+qRhp-zaRJ_wtZXwE*x<I-xF$c4-Z}ZvI!JGV)2XS^ -|QuKW#i3VnImDlA(p(QAmfYf%hqdZG?jNDClAf}x-I(Y=Cs^nA3g%5qAn?4ovbH6BT&wNu^h&F9Mc4y -#c+mSCD>ZiN!PYxrOYa2lcP|!ZEpuBz6t!!k$i8-&wZRH>I+Yv`~se5^b^_(DhbviXm2ZpC+PndvTmM -0%WH~GKRz1fnZ*tRYB&R67Pm8s4ZeRIt21AQYJ(F%B@muQ3#i0<nP6ycE(ksdoE_daD-H#5vljuuM`$ -u${c%{j+_iAF9Y+kEr^WD<UO(-ZWF7c-{XcxVqcu8IJ`C}gU8GFVq`lW@;hDm^K_m@YVc_YfoO(sMmf -{Oe*{0U{PJwNZoUWlih?7B0(HfcEe$TG_rtM+DJEMS1oij`G<d?g_O;WL&+}=|YyR<=ovvr82xbBYvn -7(MScB;Xi>Q#K%@?hOw)du<udHS#xtfg3bj8U)NMTN(gmD1uQDSl{>cMfw8ed)l(<xd^EpTfT;N><lH -o+Tq*Ka-iZ34+}JhG9N4%&XmWIglQBRs_2|I0Bx_9~mpqcWTIZ6i6Knu!aHq72=ICAeF*w9ve;6?|=$ -DyPVq71)z;P3T(p%q*ots{e{bY3aLv`OGZKo;?V65d44$X<WpZIYvm7|YhvP_pK)THB65QzA7^Df;4K -fM!ubMMzQLk2YDg|_Ysw%@)Bc#}Xr<~drNSr(n(uZp-&x<kA$oHpf4raSHQ#Kg2Mobz%bY(`Gqf(7Y2 -dKIsD0w}q&o;@@JuPfFsFucX)WbXT`^W>1mO@eE}KVS9b#k`&-L#Rndv21<!4Y1}8O_rYl6+7P3LAaj -A{`y)avwKj|LzQpKHNagV=P#gspD*5x1}g>!&mnxiWzXa=2NNbxCnf?^r61-frk~MOqS#b3Xz(S172% -FfyYb_v$CfTxdiKDbxS**kP7#wkmUk%=Q_{?fK=T;E-^P0Ueb`&F{<Uc4fBhk%8;<)r_W#-0>;Ky6tD -R+kOw;tgvM*2kuX{Ee>#T_C{~EGq(;xq@<p2Hy1|jT^AJ6=+Kl1kZNAzX-HB0|^_1Pcoy<UDol>dKQ+ -Xrs_?REW_kfRV1!BL9D(4DfA_y%NQ7(@t^*!|~loWRk~OI66X`sl`YzY2^Hdm#z=Zd}_BCU3i4a)+MK -p1u1N!R{t=?;+${2xZ@82KNUWt;eW6M}{Rk>LiFA;%>Yerrvrd_^)@LcczZ*_;VLC#dl~8N4tv4zAgT -?GuhU>QTc?}m0LFYo@Kj80RiqUa`0|w{H~XQ_myv}*}Lk%JtdffdqW%f_qEpcUTe*LS8J^|kck||&Z* -Ay{-5C0Pp|mA*1Cw%ze>FS2t<YW{>3;~W#6p*^__l*3h*=KgcrBi>l@X^+oJuu!R!?`9;m`|9l}Dd`c -|DZ(5gArq)%UqN>;iJmZ|_YG&<`x^OslIvtMCDEwcDcl@t#zX0eT_<qbE+QuQ_q{wS4pPVTo?|J2Upu -M(&4iW3m{y0HLhoV(~NKWomuLA~!QXo%*>?_>IV)4H8Ld%u8x@`io(egXgF4g2i<0{+Px_SyRd{F68A -Gf@TLSE>qqHudI<xPcCLe1wXG-VpB9*nXTm5ia(^DL$*6ScCw4I`FZ>OukR7>YzAHCLJV*2<;P<@+cA -?VQqC%ji#R~f6#f6RV?fxw;pn9)?<$FfOEKYXt!~>1U^QfwjgN@^6DL-#L|6HtOP|5^>%xVr^1H%E|y -y9+1RJi2EDrm-O&=j9%)bVYK;hjD!9^MyH5qVvOaW=83MmR`qlRJ^oq*cO@{yt3SRO!@FG^%SM?^+8o -)x&TBRk?J01P5=go|gh0F6w-`nUuVXR2kq0RbT0^Ty#1s}EBJfX9Zwd7+NZv^51+~Bx=gG=|Or7R1vd -}{=8v+D!pPTXSW*s$w4XOIWowS05MQAEDJlvwY>F(Iq7?gLY-jnoBM4rF&duuW>UuQl4(RXAk_RZLE& -D;4!6=Fhrzl`nejKKQr~8zb|H21h{}fW5B6@8|ZheS{VkA1)~72GRMsk(;TP`!e+vQg&9E8U+wyW}=- -uk9ZEcv7QdiJ#Bz{H$N&?mL!<R>nBk+)lp-dslB9Uh7;`eauKOTQZ!s&@+)$n?tB6Jk4wotD^wAD5=b -xclYVKk&eo^-r9IWvDB#WzAJ)k~2J{oYS}cm4sPm|#ev^Xgb&;*50{w%$bjnl%I=bKu&H6X6xkw{e-? -}w{hijUOSks>=9>Muweqyq^W^Q)Ad3H%1c?e4{IRsuSy#x}l`cYNkAJ&}%-&7S85}k#hoYs5WN<xndm -WCMx-pADaUx+H$0Op>W4DHXHVTq48EKE7m6dxa68(zMUA)S^JchKsPIvdZRN6j*}qEMdONo5vub!<SK -MpzZj_VQrVYZH@QtKBHMkK!eipHhgh>QQKf6;#?L%SZzYIho0+GlzKBfl$RKa1}f-MNM9Tl;^ct4J5A -XBNdDO;}G#mt)`dfA$m2wY&cbVe~RFCEtLiqmHLpv^Kb+hLU%INJq4q(nk2@YP@z*>_fiXIH-fe()eV -;FsvfN@;Yi^`%?<uBd_vcLxERn&2I$NqPkhfE+=k0l<(M1iq3ncXAQ*-hLZ;5h=K)KJSWZutkwbB|(E -5=H#0z$cq<8`(Os(+e#Rg%);x|0<pz3^vj){cpNqG_u4UuIa6pmqyO7)E!Sj5?wAg=P3|0vx00K^36x -)OPVAgZPdxS?b>gHNbvgWVl0g=QK{12b>UgFam>@w$Df+;yF+QP6Bxl3o=6=WNbBMH(H%jKA2A8^hyi -tJXn(qT!Rx5#f2v*@M}0idJ8}))rK^F-ux8iUcK$8jwxgo)kJ?7baiI9-WDFFvfFZsfD3kUUGToo_8j --J6?3vHrt>{V9&mvUr72C-?tTD0xlk$$VHHx!%c)XashjRk<o#As1Ql<TFwuzqOSzUQ(^Sr$P&pD-nq -Uiu;IB^0NjsfxxDtMcN01{JUdnL5aG5#&Yr=kbdlds%0co&FZ~nUeC?Jz+rG_*?{Yie&|~%;cHD3&v0 ->Uj$NySC|9@)E4{ZC7=KDdR0l`Ux0#O)45rP77n7}~-r*IsBQG5fp+lNGe@Td4TeJ6JIQZsz7@uJ>h^ -&6^;^EVo#c9fXJyQ)-{?nTU>;alomDZT4WA^SdPj_&CxD&LiusW(jC8wsi15E=S{G~bp?+u#KIm5Cm< -SDWR?J2CZM*j`cw?eH7N_uj_jotsMYH(bv4r#1|oM{f%!Vh7gvTY5Sr_S_WtcGkn+Nvge|4gT8<)n(T -JO#jpX3`d!IqIq^BgcDxOzGg}+@z+dM{j&z(o~g<-X8PEj^qfmwCJnX5a0vd@l_;3>ubq4xzd(9)(U% -y}$M9~x^FE(D6S+Ss&2#bu?EXey>d$ug#iLrOO?qiUU+T}~X+xL$v0Wq!yp&&-{r#$ee`nd>uNwGwmc -6g~qwEa$yzb0#M-F7oyT|a$SubdN!#DgGbvGs`hI&26r@MuXb`x4aTb#ptDB;63noE($at(>IC>Yo0X -e9Qrenfpsh#DV0?&x7WIXvxO3;W8VWY|(h5Cd0{Io+b;keMX0juLF0T_)4m(&HHWv;DE_PZGYspKi84 -*x||xRxgPlYX>7b^o8Z0?C06Ma)a*d*IqrDg6HW#MgYO&-!s!c|D{cOOLI(3mrOubNXMP)+<#%kDd}- -?7%y6DhG%5;0F^w=t75!dwO6!0773qF^oMC<;!R*WIR;sB&yj_=6@lFNxY)W~X-s5g`rwwL%K*1mYKF -Z$4{L+JnD)ki1Q|i*MLv_yAxkxmhZ_gc{+%%V_L2J^4#WT1oPQ0&zcJqr2{Vu)Fq9xjihyyHqHu7F$r -OT8`0io)Wyb;eR9SE@3CRB&eE&@HJ-X%O&fbY=PgCve{he*!j)VCYO+WX>L-x%4moSdR`%EOVYx(UHz -eC?{Q3vhWHwxT?A)4*o;=3C?`im&MyP&)cPWBg#_brAkD3j!VZ`f_~pgje*4S?Z2?}Z`z&+S68_+5LP -f2`&mm*ICO4n*#)<OsNLSY+Ve=E=IfAqHc=MPX?$eAYV#gQ`mjgLmVd68gU=3r>4uO#QP?&OeUCz|S% -5Bcy%tef#^627JV{A0x30?fm|yNW3>@uRlj(;NQK0e5@Mycb5IJ>OBnx{9PXGYq$65Lg223PLDd|FYM -z&S+L67aw7!vff6gNsR{qu#b9Pd=i(kh^eRPSb2xCdi5om!CyXD?vMDPLuP(=V9okBbST*xOAWS(ew( -eS;*Tj?W+^0!oHmIf7DYJQOqx-N48Ky&GS>5+Ukh_YBh8~k_?+7-u7YLA4*T?lxxTm*8d2**&VouM7t -&sQ}66cA4ymT44qrAjwX2T;Y!yEacFI1i6da@1;P>4<`cGK(NCIVSR@CHPojML*8mk4F)u7lE9r6M^- -D<9H|1y@hGx<1{WNnf~(ssfaJLkPm4FK6oRxRYIX2z0#P+8WLMqlXrSzFh4^B_O#OUOgt&VCrQkB`jj -nUKKY1B90pg@LuTtP+{0@s`ZC{b^3#snC%nF*ZcJxTemEiIwiAYqk1Gyk0*5XOgiQCibNoYEL&4+T;{ -2fTd&TtY8t=1&d{TyPJJ=-)=b%ubh0QxRuCn<9!Af~LOBfK(S5KuaKYsu^b-3H-!O>rp0#E@<VOi=2W -~icqG5WRqVp77omSG&qyXJ+N9e(DQ8#=n6M6z%v3FkGbk?B`;h&cc7+{xYo!qX&T>%HlcQfN@kfC?9P -y<BF6PR`#-ZW^v+|Krfwt$16aK`AIJjd<(Q`k+)ijl2!<(nsMrS-ihiKC346t;F;L9Mz@&-+6(>WWt^ -S#U6c3szt=U5HaOAGs2wA79&zK9leLrknE}3kQBB-^(ULn4{5>$Yiv!?sC%akC7Pk{-*t)-V1y$-}{L -N$d{DYX&KKo!t!CHl->DW4UsRzh0}H+3#f&v3xyXdWLw~BhvLk$ccPo`by#f@;+a+kd-eQ{64padEh^ -^?q*~d>VrI`IWUxS?>1U%)U%Yc{&^fZM=V7=?B$%FH<w4>YL}mF^wCxQFT%Ts`XcY2dUyqX;V51kka9 -{{6@!8Ht_@tQ1#VZOvj<spK8LO8d70en@&eg%tJ;8y|IMGfIMrESFdm*qhyV(5-*mrje0PY#n<Agp6p -=eyCTdeq(hYfdW;h*MI!TeaAyeKrvY<s1uuR_s5Q%Y;s6b76~%nu@%N$D9U&Le1TA5WYdkxS;@6hwYr -N8Nv|+@SDCl6w)+5@%GG8fD73g>EDSc#PBeHBUZ^V+`ysl!BirwR~C?X3xnCRyUlA<?Wj|z-g1^E<Sh -BMLS|n)nCQl5-nhU)W?#%U&4|vOpBFNbG=Lv2{ziJDvrJ5Q4&LPGhUv2<`}xyR+5+sPG|nrop1Ex0f- -knl%be-vh6ETv1X<ho;X}o64RK2*qPg4wQp|aa5<fE=b&Zfka34hduic@L~{yA4OMnleL+JLi(}A!5~ -$|f8B&A~dcU5W1T-&kR)W-l^$PiL@ts>moyLqUS*fC~IzUUp&9YO~s80L^q3QunK=%eGLi5_bI9H+t6 -)i~;Z7FdMJH_KL@snSRWtMwW6om|6(Fd_-7i%t&?pYl8->>idFMGWe_x4-G(GQp`Oa4%Y^nd+a(fOO_ -e5>L7Z2S*64T3hB4DXtTIJwL1Kp3(s@DR|aMNH{Cx0B<$NDhhaplSC9ewXwo*`6@L$er+}Zy9{*^Aym -=eRqAFx4#_vmfP7FGfM77m{`73+1;!N-FuFscUfoh_AcHXkbac{inBe71jaj@+UBL={olr^;bc$sWaz -sniTWz21LAKa_x5Pomc2JQyt~YHN>1&~W!M`SW^c=;-KqX>osL*@2WQ#k1Dt8JXUW7OQ8iTQlxd!RcJ -R_9{wL$&>gs(bwk&b<l}#_!H4)!p%YPR26qEjedcuoVIFeNXYRUT=<Gu$3=45!4;M#&aY*-31I1@CSW -R^-g`OvfxF7DtWk6mhF+))tlt!QaaZTwldv;(v~V}WRY7B2m8?Bg=Nlga=0E(6%F<3G8KAF4pVTm}<r -jP^qn=*K6p-MAzglxaqZlXLJ4dTAJe`Ia3lg`ImS*Z>E{DH0f6h5IXjZ_8Zc63BS6)ZNTy3_0!a%!~) -y1OnA+&x>fL2MM?=Gco5FnGM}nXPaLX-G5e~zp-NAJ7*h-w_F*Fo=iqB^OGdRCFI6&rMGwXFU~gK#sZ -%V{*fvdy0Xy$k-qWt;N>ZVK0J1fuh+`KA-!&aGA<Jt?M_^3j(PT236;|0Q^Cq6r#@oSKD;sr*Qi5vTv -t7yMyGy|gE|}iI4@m2guo%o6YaMvJdOXoKWodP{>R2G4flU18?$`>Y8i&J2P+Z&KK%XW_>a){=d)i!p -9ufxxQT3>6eV#Kgb)x!iS3U6dDc7Gx9tdQ4+_a!sD9&f6uR%fZFCTS+h>x*9&V`Z=Pwk--kS3ivWLp- -i!d0uZ_dSUO)vB<_>fWW0`&A<AD`}Z@Y!y}`HPUZz3%Svne8d;?PMf>H(!yv{sR0q_{fpBA3VI*Y9i5 -oJWt+sobP_GEyitQ!1u37y34r6_`4)O+O_XN?C+KC_qxsH+peI(n>097gs9&@__N%K#{V4hYUQk1=EQ -%q)EGF+Q(PCUCFjOCrt_V$*u2rXou>)9Vu5G@xD|Ew-nHqBw0+$_BG#gD!DKixqOIOX#QNdb$147eSp -ViKfPEQ1uHsMQw!igl(>MW0t;Wh-3rywwz?H8Hq8H4@;9mhI-C6i(7}Mh+-d7gI4{X`SzTZ+lPHERm4 -q`eePrz7n-B27JH@$eNm+Fd9JR<TKRi*C5hliNfWXzmE`0AZ77k1B*tJWn+3gCfAIOZ7wFL^-aCa<EH -X=i7xV&NfTBqAMNN1otcRMgr1F_~I7JJ<u;JiGN0IflctTF|WL>jStS?1W_Rj(@(3!tIjDq*hE0cs{R -Jx<BKr#ofBgwL3+y9vG_Wfka?MexG>;u8Fr(4<wJ|C__!W*xMU#rsq{U-aN9k6ZO@Ex&BBm236;MT$4 -!EosKZ*;w>CJW<>+xbG%%D`7HEZMAYj9y-xJTR-gXK^#@eYv_eIW8`bo$e0ZlIv%B64wG8UxQ{PC_OH -$i&37vr_yAWy{-&!O(W1-fq_~p3>i*8Txk*}gY(|VU#{h~_`Djt!ZGe^pWK;SY7!)JRF0InAme5UTRd -oi{JBKmDW!`84|yQhwjfTYdoN{Gqf+=?73L=TrCx6s-=1LD97NInCcGv*XFU;FhE+{$htxGB<C>QG|p -8Mb6M)LWCjddv|#^7y=zOWuVP7(Y;}4EwlP05$1dPT+z9zHr3GBUiE)F4c;QVfut>&;dy$@ziNaa0aD -vVUYS){)nPn9#+c@aTdrfR&lblLwkhINz*;i!Kq)Y<*B@--r6gF*E$|tTH?dE?cHqr-Q5lNo!i@YcQ; -nHp=KVk0%iQ?T1^U&l2&oAtrz{7HO5!1t3XGimys`lta|inFv}F3NLx|xtn7fwKZ+WJwW4W=2B<OXlu -j63WMOczuq%HXjxH;s`0Hh1l!RbC_5^DvbR)93G*8rJffy%HsFaRMQlAzrJ9TN3+h7y(UKUoBW+BgDe -Q2v+UMvdIK=Q;cVDpGOC--?vGi#u`u{6xq9(7=tBONqHqJk+`b7?q4QA?cR8<SfFgVL;6O9kBq{&nnV -o+&X9Y{nx97z#(cba73JSV^*onf?2~;vq&}HT8Z@Q|{hZ6=BIR8s<pNikXqpSShxZ6i&h3f2c2$H3TQ -5>(ELUhJ_O=ef650x{KqT9xb*kG3IvS+{M+7g2ZD_;%0=ds+`~v4E+kIhZGFOVRj0c>{@@7PdaD#VH^ -wGp?OTM)VS{LdZAiW+5W)lOEjF4{-Q0|MJn7yHh{<UQ1E^@NO*Y*S`OxU&u-`-KssMnkwXU=)nVg^y* -z2``4n}qI^R<cbcN&K+H+n4AW~8BWl$EoFx0zcj?)@iWoush=6*gj1tA@u4?hheUuue}MaVW(q9=y23 -J25Iuma96KXN2g)3rP16VZAS#QS4;b#~tAp<Np&+&d4<E>%w$GJ570>X@<O(P&}&31Sx>fYjRdB!#GN -zBY>Y(iTx2)Uu6;cin+8Y{Vk+03)H!3SdHB(Bf!Px8SG`OqxN2<^!h1q{<e{uU@LiMe_UEfVU$36ph) -3U(c@!`i$>}N^PBPsG$E+H24!&{GXZe15W+!Y(L~;Np!<lBmxsKfg!uI`Suv5U>L&T&!ARL?vkjx1JK -)qE&kHR{-xb6+4Zk>m8<xxDLMGLkM4FJneU)yqn3Lrl-yw%`lfmqwF9*X+js9b%DEfjQadBu(AnOy@~ -Z^wc0Tq-c^f?2TNBeANg;2Sa*}*I=;AvbM6rDs`nEU!@+%0wHT0qP1AH$z+<tCX0Y(1}$8QC$^f&Cy1 -$c)R<Tr_YjmZ<^Iy@8-3?TK{EuX?IS(HCZ!2T&nzs+V}=03V$WAqnKaJ}8P!$X*y0onONId<h&QTS5x -mcjxY+Ke2-bG1!yPnPN3sJBtLw+`c1k=NGyQe0;tfgjf2*_!?9GB@XY2CB_~;b@@dDBn>~ZT>j+ah?C -_GJ)T@&VO~8!0%k=zq-uNE#95qM~nci)~Rb>)iambV4xbKwO540Xh)K#^Gisvbm`c*_UV#n0$9q);=l -$tUQ+nHg8q63`sp>YG_73xqkghGxk3|Pl)2%ip1|Qs=V}_}UL-qyDv9_MUT#5ocyg!o=&c-+q%VNj8` -j%`yZiF>`e0w>WYmaqkWbpHtg7lv==2$FAl^Zlt{<FxOFtYs?u;4};P|<c0CeeLtYT&8-jDv|x2gzQ< -RM$ehr&Dh$$y*)J81=u!PW=w5YTOYgt<kv7ainjb_07PXsr382vfaD5~>QuN|JQx9#W#pnnbfI1bthM -73KEHWD#fO{JeJPD{l**$;@^*14`!~j9xC{=ZFd|p>wAO6yX`>4I#+f;NWRE-3f`JFIC)F#+lQ~i^{A -7lNEC9Ks8_u>ubH-Z%%NKPCN>-D{&U|hCt%bY&r;mnEM63cJjibv4Z$PUzGE+)uxxl8*7kHz*Ppl<i1 -=9a$Rnsh*M%iaPp+4Uc$e4v=dmA;^rySy6~pIum-)IP{w6So>f<EhCm=`+n#c&N2_m`8)bPlaVZpp=c -Dx)UyUmnP}!T6+Z?DeQhb%C3U-$74TU0e7*t&XFc*?qU-89)jc~qMV{%pHr*tp}`eh}?4Z*H~nOM1j6 -ye$C1xk0j@|LTLjSLKbf$qRC-GbdQT8uEZ&{v|OefJ=6r}1SEGkJ2MIZCl>c7Cq$r-%{wmp(|!y$~;n -9t;EAQ!Vup#`fr{wr1keN1XxiQzOnV5o06i6Z+&F!nya3$c3GC5``JR0HASoPux(cw%8mL=)%Jf`RpF -0^X(qT-i`CP?Hgok0%Vv8Viaf?#6lXS5xly>=;s;mS}Me(U1`EB`%XS8B<JH3HH++(X0;qTMKmad3fD --Z+qKbc`y)ZHb}CffT<7xwnm{cc4`^vi1r?t$tB2xL=FphdyA#`4w~W=h#2boRW7d{GJn9H72CULkpR -ajH46Y0ivA(O%8875LlMIW8)N&&$MT6dBNP&+y%?+m@t@H&Fozn<jm`8M%v9`3gmmA}l2YOX-*8%Iz2 -)u*{5g(mWe>qp9?}cK)Kp%l_S=O8urKP|+9IMNW*c=51k}`xZ`|JQ(#5TvZOxJ}u<KFdRG&u+6QP_kq -u0JDMMX!>BMn{Y5XpBpe$Mf0MSYd&(b+ceI1G*PRkE=c3Wy(PFlkLn0gT!zj8I2~pbjtRZttxXWA73l -z($v}Z5zWdBDyulbOy?`$-4Zd%yu}P8XDCFaWl21_-w#H~9?fi(f)clEG7mLBWDj{l28XFBB~8n%HpR -Ou30(1#Rgm?nf&6(Tk0gDfZ-s)L9xzGwys%+t^%U`?V0Ne17Tp(A#0<u}&67f3PMt{sJkK6VSSbs<Ns -2qTeTN!OlU7wB@08R8bk7owY#$754*SLc&5q75t8zZWl<<%Y=L9Sn3*U{qk@!*;bL8bARsR8E+$-hIJ -AC<{hmQZ*)W5`#e>d%qnTmaf4g^sMrHH+C1tCF-fS?UeVxNIYEZ$*X_TEgx(j5_gX*tQrU7Z2McCDlh -5k|zGGQiN!^(N50K!k*M(1*U|Bz8yNFCGKXUVfJ%d!ishcV)P3?j+r}_x3Wu{8wNS{c2FKO^RhZ7{$= -N9Ar<5KzlDZ2EF(5(!HP$&fZNb?+z8>U4a<Ao4&Wj!|zU+?dQJ!x2S7G{&)PheoJidMit-stu^lQ$XS -kTeGaqgluG}Ss*pwNXJOSJ5f-EU3P?IX11#V};o&!cB(8DAN2Bum0kD9d5Y`u=3QmUf+wXx&-~&}|02 -0z1=4Vj(KKA`J|9r{7KfUIkFB$l!*ZlJ(1HXUGpXWe;ACe#vLBvK-qKLMz+M~c~BYE9zT~ryg5>7PYl -(c<CtWH~;hmwef*6M(8QN^<0yD)@1WVJ1|l^BdOY%Osp*6Erv4wvT2Fu%%y0AGs<zU~sa96co>{gcd5 -3-aPqVFu8BKGVoM@k+Dyk*L~ZveB9!EPrLrn&`=*<$^hcE?nTn<#~GX;X#_?_!y;VJ&w0xn99}C&<>f -3E5LCHE3;rj<FqhdMvJOfG)xvTj*Ud;ujQ4#3#Fe#Xul+=ZxR1tR7Obj|Es9{Z%_TNqw>F)_J?*t0z@ -f_pkN#W5fXuL0wPF~gm8%b)UPFr_E?3#eS>!e&3Dpcw~zyOmcLQ$>@B|o6MMEK#ebz>m%n9%lDBFd{< -cvE(LG$^>0aQs%hzo&7~6BpIQdTcrtd88FI6zGJ<cQKenUv!oPL`zi+33d;yp|9t`UT>UA%J-z4^Wqu -;+y0UCv`WaT~lRwc)))8-KSBLh-Jow<`<%t=u(xe{(_mTU2IMSg7G8RB)S)_=Nab)aCz(sH~y-Z&Lm5 -qcW^>`p;4MeeC~;sQf$E{JB06@J*md93#$mA(j&)Cc=cq^XKg<U-np-nr)PMdv@}rkd0dq8U4X8t_ON -p5(Ox!EjnxFshRNpLfcPj4XK(ns%Gj=H+*~^ooYk!LUwGISLq7a-K>lCc6)&6V<4$e0HE_JxN_IJJ?W -gr^S^4mI{#1}W@;QW1@uoTY|HBcTLF818Ld){Pa8z<%lkdX+3K$a+;^H|D!QZ*fDTW-WhsaDtR0?Kg( -m|7x{Ai}PmBjEih0OOa<>j8)t_t(EZk#-$B$6(pM8KN&z=P|F{#-nulX<h5n#%Qg|vEXg4<H%)UA||; -)vnn%pOFx&&p%)kRDb@py*X62dg=GFTnmMjWjy#@zzJw{FhzW#@DfoYs)%s+kc!@+7S#(d)Hn69O(Zi -=lzKCzdh&o(VYSz1gBt<KnRM&F&sf~7{*}?K_H4iD4fC|9HU4S-Nr!3r<%^>E`)}@TeG+Dxff$&djdK -}_LlAJov_}(Zk+Giu~htd!O&aUEr<7#pzX$hMthnXLf@s;U%+$rwnBY-5G3#5yUU`czb+Ue$^En~Y^T -XyUA{Y|zSUH>SK1Xwq4!pAz9-<fXW?kyNY37c;@}&ICvTV3ZG4pOX>=mqRZTY%u-zzjmAJppp11p!F4 -}!lJ)%Q%k~&#Ma$nGvZZ<({KIoz8nBZT^Bj2h=k@J)45hTw_Nmn0Rn39VzUgg;`zXeIKHY`uyR>5edX -NiCVDf*XsY5Ju(@}zyOljhjkFuhQ4Z;bTeCI4AtGVm|AY@K2<I2YBq_m1uQ_1L1VE~Yzmq>0tfM)QNM -*}+DtzZ%Um(8nrR&(jsB@*H<zOota-tD<bjW;h^5lxYjii^kC(yRZ+Z5-ye}7ZyB^K_m2^S9sTBd}A0 -O^{w{p{3BJrrE>ID<Oqh&qT{O`4cyG`$%RbpipHx_EKmTw1-cLQ<yNZ?C@O5C7|px?fc?I@ltSIji4Q -s&4qH-Ua*+feWZL0&m|cPgf*!8&o#QWu61V!~skDbvzTO0<on%<k2Ah8QkyazzoW&S%m82V4^MKUaj> -vc5{ovZ6csG^SyU}s1&{z0SKqBGmPxQG3;wH~*@0@^_LvzG$4Z{zXQ-#qARNgZ^KA81%?kDT%pIADV5 -?@uqK?Cb!q*2WEgr+ogsV;C7C6B{$Hg0-h-)TnfPQe-I*Oy)Typd`bb>UZxQeMW3n;*o5BwUsXh{T>i -W{RWjJ~Q%m2Wz0~hZY*dq!ABo2aGJKv5468b8x&HF}5m{qh~VLp6FmC#(5l_ODQM1IVR#O7Y4$#-ELz -S;1r9dDCNLCL{?9V4R>vs$3tNV+AhlpzCq^w1of|o%qY%J*yqEQ&c2{eiPp%E8{$T=u)6GC4sK$(NXk -#NUA-5EFf@3=YyFXTF?U*d@I-*=gI>tn;mEh^lS*Cj(pDn8rYbGZ_|gJk)*tTYITc&&bs}F73EHXAC4 -LY_w<Oi4`s(QeIIqODPG+w^m^t337n%^^vq9@f1h5Ko8w__Ks@px9v(Qs<$$l9RzpylXW(H4>M=~py; -2NuiI1c9wfuxnKpVg@F2l%wRo+>Xv2qrPuZv3G->+Vc9>LZm+4F(}mHGi!o3qB4qfZ&p@sz^^cJwu1u -su1ck;QQa!k_A2yll`-bn^RAPYNTh+6p>W5)sd}en^!}yJjDS~ET@f7b}e}I(4%<1KTj|ux$g7q)~#J -%MCOQ@FGD(RAL8}GV9pC37I|dD$q}AHzYD6y(NF@(3rWV;DtU)sk|pT^%^br+E>p4(4&$YHT_3oMsYY -990_T)D{p?M3s0i>e;L}NLfP?DJ*l0mZTsw{LNpjt~LXx5)5v91fq9PK{*TBizw6zJ`x$#PhXF966Vb -;nns{+?2sFMO_*lR=>3!UF8<${`hG$NxZS6Xk$D}mV^7&BAydN>7-pjYhiWEaw7L)FZHTIyvbxz4Mc3 -Lfe^_ocqct!~v59n?tLHHxa_BGV)AOxZ7Ma<o(SVh{x69El@W0(cxrZtS3`(pwctu0stSqI{|rGe`8c -pQG4am#(@W!m)h7od4u*MMhM`XbcR-I#&{S+)iwT`6f-^2fCvL#HMd3Or|%^D&|*kdYLuE9%%^|n~R? -0gp7)Y!8NF54_tOqEkI?QBWGWi<Z+4p;vU~zJLoz=c_D&LK9BHm$*y{LK!<xKBTiSvVGmaN<oXVK91g -t?U~+~eDSL&G#DjR%Cr52=JUB+Ia5x`YQ9fS9_O^X+$2e_XL3bs@z&rCd3LXUXa58}O3P)vPilq}F!r -4eYu|djm^&TSZ6md3CPpHaBRf)K!s2;1X%aK)`AC(&-hvVy21C;M)w>({b8w1kp9~Lc#e+atf{FlXQf -7twX6XFbux3`C)YZ>;2(!M=wxVw*P*8ha~{{2}#@ZE3B@MD`agrV@p);C0lU<kD9R}wIZ5a`C=ArQl$ -?SJs|20d!uOr?_dP9(A?>eIJnM;z~}KuNN1mhSu)-t*z{=a3GE-=K?nb8B#~qTKgnk)3Dngd2Ga*}sJ -`;q=YrseLDR!(-^LjO_Q^`&$k;hTip+Z|99|B{A_nnD0Bc(A%^MjCL?bru&2F-H5kAI*i<lDe<>%ef& -1-h~Jgt`wl?--^t(Gbi_NP%fHD0nZXz=vElP5d`(1HP46t8*3Mtrq|u+V^uiA`zL;dI!gP;?Y!d`$uH -3@yR}WLh)$643R?R9VKzP?LT32qnTW=Uoa2LqZ%3{&WjbHKYta5bsQ8+Dw!rq6>*j`(FOuo_AjZT4{? -Nv3u;lphL#<ASgb1TaEru^&3JK(~!HCZ+2tMKpFW5CygQ^x(|9=j|5I$ucR+dY;K4aYMFx6*aZL?@2^ -s$|5`-i|WsWaR^m2|nt;&wCyCHp$>RGOCrqq;b|sv#04)e4tjH*=;)j)2$=<yV+$y7u-5jES|Er3HHm -AJWn~hzfcJNlYyTj+=I^Y(v7)ZJ#0C%eX!N<_mQdHl*z7SD)rud@xUym>62qI=>rB;3Fu=P7ik>ygJl -hC_^O{PSmp0A3C3g(S`UlSn`4>_$B2ZT1l``hbY5|)W75;jgxV9}HXEx3apQ*nr_v|1h^dDSv;<*6R! -7sk;Ll_}-oXY_{;CjM(V7_S-On5UeQ8fq(?LEzc~2`SkqXtsSC~F*D~mvjICAC9Azz7QC6>dOccpf*) -NQ$yG0ZzAZw%bzaJ!j{n{-}@=Pd}jyKy4b@YaQsX2D~xY_JAAiYO(mL6?w6OnWiVtk9SA!57K`jE8?v -HT8wh{^_q_q4*XjzdL##|ErIF3bwy}(noCl<b)q$DTcu~MBpTe;u|FfF_fS%lEeuNLUtcOjKnrrh{72 -0>6YlmVK*|1fP1*vI3<qn0_POE^G^KTfdZrZhT|4?cj4dsb75fQ9k||Fy-Bpw<rLpDRvEr~Ymm{qV;b -Fq>=sz#-3faqvD+yW_$vp%eBWW+f;gVO-HxK&iF%9j+brZ4`@ekO+$7#I65EUIMe)$CQL&BOp50rc!J -Y1B(H@I&<gHOb?R8V=Mxg(;r$)H!@f7@4^<?wuiFl<+DJmH4PhF~}T&`Sl>u2J|(Jl>WeDIT^t|DkwH -3{Er^FA2v{6#EX#9-CeuOBWMz*n1$9|wKqlWu9kUqd3M?QYb&aWwbVJ>Ns(uI;-3-yNK+pTyA3%6+>` -e{4eXANz>H7hUuC9t=PN^WRxkYYq?oIOr=ew{<S~l)wVNV6gpDG8bIcYb<^a<`Sfjw$iP*ecaSjC0)) -bNb)`FWeQ+Kf`?xcFrDTXCb+44^KBj;GSq?}0|F~rP3rdt*=LPjn9QN+)etSQ+O3Og@O+sfFp9E3U!& -s_FG`w-T#lGuv8Jj}6cL<phbL1d<P>WVD|@EAI+Bt(D!J1|kQZ0_D+Le;m)MFUo>u)l9P?8kml@oPXQ -(5*oHEJcK=?wnaF(M#6^a!%t~o?U<C*88(B<w%&N^fyQA?HNEl}bbo^(pY+v7z+_&X8sLwt#ts?9(Vy -5cKGo(@%bcKmB{U<VnUY#vx31Rlh04fC13*L)){oO-q#tjM5RD44U@*nU`)=TaKW6Un9r%UQ&uaEZ3d -R^^KTtbTzuuYrvU85CvBcOKT|phoPF8yCbu*6~gj>537etv^-WS`twA^Nd3wxIPPOzypV52M4KuyaEl -Dwo#Ae7W-CeK2ecM>nh%`##3%4hwCNBWe$pVIW@9^m7RSrZmbT-$M&8i_k6Adu;mfBvf{*Q=lpch=8M -m3uy|yLQlSoqFm>_pAmj^?`g2O0OIVoK9+=@iT#h<Hvc2?3>pt@=I99;q(VzzIS6avFT}zR%#)*0FZM -TT#sfOJ%2~+lVueu0e7U5Y0$9NX*IC4{IMp?_Q?&0cCP@~^n@8$sa<|y5B<lLMJaT<%R#YL`FlRD{K7 -C?V=L;2hO<e%G<fe*S%L(4NkMXA%4=`mbfw2UrxP72M2Cw@s_r5Oc?bHJ+V5a$p1xlyxZ9E!B9<kiXV -<AZGpORTb|UJEUVk`Jn=+*olXMK@-HA}Z7?0Oi#xw!uL!GJiz+iHOSWy_K35AC*&+Beg_KW2enNj>Nn -ig^~+-dZd!V!ytU68*TtxX^4GL#UZ;a#a!Vtb&j17m9z2uT376Lz}Gg=R%^zEqyT;1O4e0?dv`HS_B_ -ZH@VMU}Qjgy-QV4~ROwsBUogWm;vd|M&AHJY>96sWjm)%XLyKCtx&K4u!zRDlK*%AQ3y51D#Y%d^U`0 -|<2N7)=qT#n=N>OBq$@(3HlO)FKz^k<_GBg}wee7!uCQ!kY206Z^O@A$ak;Ob<QR$r$H7pdyS2L`HVg -u7g%#`5fiF$o=%kgiigG=*?ceI*d97Ip=Mt*+mk3ml&c*uGcSj8#qZxmqSCnr)2oEBUw+xjz-UUMzvu -$%St+>tK)5l6AKc173$9FP95`4M1Ni)PwKQyhk1nYP^oVMn@eH<%$;P34E0+c5*3>vc;EUFSEl1m-`t -&$10fPcD>Jb$p|o(<Xa%nOIRa?XmV^dSH`qjpLZTtrXW0w<zWnF-$yk#c2hCI0UgN_jDjl;3AwO+aOC -4iaJ+&Blyu`@ihxc$l`5GqfCXlzL2=Y+ygxqMn6yu?JC6Wk`|^9gm>uGL9}3M`Ydd}3yl|CB$e&8Y<l -Q-AANaowq4<9XLjCfjUqLATa|lI&2trcGhDHzy!blW>Nf^Z_976~KLg8)1r&)#=dy_VN=ZtB#7vqq~P -8fIE2=8WT2)b8kN6B7ZgMSX8Hk=f{{S8uVr-J0Wt~-nO2{ww0MmxXVCPt9AyIH<_y~J;ZN&ZqZ<~?Eq -OuNI(n@aAMkl8K_gMm9RLZH3AhsyU=q0~;7Q{tTpf%jKU@O?oW7v9#t{iEJ63wo=GVLM^{TT06AJ$j+ -|BZMmT7o@I@B9;Odm}z5NxxZwWH}nMjC-7-UPr$F>ljZz9eA<5p{uB7LqbJ}u;FGY!r(gLy0$+r-?1X -zt=izY6+<OY?=dQN8Y|yUNGSJyWAv^aqtu}k*B)Dy+dYUJGs+e*pJHR@0hrXqsYd*DH`s&A%E$RnoVr -d4#ADWsin0;sUR-QtRP~_1?o%jGI+im=s*J7Fii{CM4mi<~m`}aayKkIA(U(&JW%s#feKp&-GWvPXFx -nbAC%vWUmmo15JdRjb<K(+}G;W*wfldZO>(!}_BzpXHfiP{}(-98ViQ5{;>(lq**csJB4Ucq>DTjE}- -Q$m+C2^=iREqQ{TE)pxaOV`bys(B<K88Tgi=8TQlTHlUQJ)93LovpgOk>K!%NNxPOA@o1sf~vvLs$;p -f^9KyV;BIsEUrF0E*)z%hXxjU2XtytB@rT&N($DeiAD;Uyto?M}4>1j-ARMG96h>i?geizbF_c0v82d -DaeKB#z-+Bid=gQt&X&Xb^n~&edEE_ij-<i#HPn>=l!}gXIVwa+VkUggCfg{-)gSX@R+|j<#h7fz)f! -?){=v%9b*uv1SDr2^&15^8%yDGwan=eJ*HHz@QLgH=4MaBP3pnFbsi;COvZ3P&-$I0!){H@ZpO|mgh7 -~C6<H`=)c<1M^xOpuEHmIf9(4TQgCO4UpCqAufbzSSchX6~n|+K%&+x1;Hqv%J#RZ&e?SI|MMb!GCWF -V7G`b)GP9>J(sz=xk&Lvk@t89d<}Tq9`GEVVoi5;-P&_JcJC{er!R3#-X*K%pW@i|c#ERn(?I8^obB( -d3ixbUf4i#h1fqezcsTwf5dFMim#5Vy#4++poI%88bOQ9iJMQJiVN?uQ(GX@34<52bz1>RzxxB_Paq< -duvk~J_7Do-?l`_e(j9-+9x*4Yy>#!OkhTIA&1cD{jAIsD5&My@08PX!LBIgcEa#U$Cj!spZKwL<-?a -TBSQ9Hc4<0}^k?a>ZqUzP}9Ue2d=q#h+)7_}4EtJ-L6@=y^+H0!?9q$6~xOJ{?jYp1HXpf=~U>lzO{f -{)rdPr#zw9M}dg7DihIF5_}1w;rxOk3FlMPHdBBNoSTXwh)avn8^)GElb#y?DmC5;)8Mkm|6<0z|8p` -t=z^ISnx(WZ8pm{dFo!T*Z87Yl;_%>KhZQKc7ud>mY#A!Zrq|dQUE)$%Ln^9(Y=LI;_WnL7Op>qQN)5 -c1sfgGDlut~XZLVU1k^3;VF?t<u$0>%NlhgIPijN%hT}%lYxVD|tH_LWx>UOnMSpa;Cu~4-Vvh?h6e$ -jhzTCSx#NAB=JxJ(Wf&hA|MK1S1qm^Hvi1t;qu?=nz@q5qnLYNf{0zEE%Ta4?CLFb#5y9H8()3p=Hiq -bM5J%xSGt_VFXGN+AhQXAqZG9rmxyJ-}U=CPh+DL?6;fO(!$mR@h)Nw3}Br1W`~C!iy;QVY}jGa!8qU -Zvy!R<$_F1@<(XGF6z<YZm%zZ@bmd;gVS@>SDSNOt$?vpfVV^pVEWb+zDg*_`eE7mzwy?I;FqRMBrna -^xH0}KD{JLxa!EpQz_r;XJw8!sEd^8rZHa<og3o}G$x|=vA{0}|58nwwMbrOBc6Lra7hCmd&~(@<t7Y -2wH)7etzkTb=)zxF(R+4&GAOPlErXc4X(S#AfmeglB-SAnYjjdrz#rDustZXs<q1`1(C+u%n`0~v?DT -|J?wGt*%BKc;!9wo=4ytp}`XS_mWwF_QNC8})&NjkupsXG@8hm^x4n4LRb$c03Mn>mmj#34_kXi4sMK -dQ1#XhFsT3ALCT&*w%4)XCtTb!XJXDnb|#T@1wxGb_3ohZ#%O;Dq4GT|}w;6n#JJRy#wAK)Y795ng{# -W$cDleVuEB)RGLc_l3&RyQnjIc%Rk!9EY$Z9hL=`184ev!b9gSW3Df&K?Z!qeH5k31E6I2iJ830xoI= -<;vy6x%_JlA5N0$$O2Z$GlEp{Qe;%?OMz)e)ZyV|+jnoaN5^0QM?PZ6#SaAyJ}F)aqWy(?n2iaElN%5 -ojT}b$s98Z?fUeM{t^#8hOk(+$I4%4gX93MM4$yW(ZzK2xb$!9V$kQ~lnjHoZLJyGt6wZ)Kg4~tgzE> -V+WlhPaUEgANcDPq}0Da!a#ZY10uJQEz6mnD+f-X4W&27otM2tseLw@c$k11-G5Szin;W(xuK1k2<b& -!Eb7~3hW=X``J;z->s^cpBOdAM#DeZb4Q=x+TZ)gLAa&Nsf{T}-8Wr;3g3k6F{41?cjpNfXeb!^}lmL -vnN)i@JdNh>U(!{DUGmS{F9Rlf0hUj(o=K`Au-ect1zKcIcEw=^ttKXU$o%*PI#dd&D->if-%ADbfGI -dA}t|e>LY1MQ_wbK0yS9KoH!CC;Dl7$?jQ#?;R#swC`*0wxn+{mKfeST8!^dYu}I0_98dx^Fn4U-fPN -m@{P}uz36N=IDN}tLD>%Dwg=JM!Y@zuJ$?9X(Y-;$U&@r`@m|B0CGRXMwD&jf71rQ>@-EKx#(mqGled -3gg6%kQ=cI1|nT`5_@7%*qpVPgxIm`Esl(z=fd&0lpwI_DUNquWCk-79-j^c_%1pg^iD+2SIo!zb~=& -)`AYpaavtGgkpzortEm99SklT-<Ybz_+H3r4Dd;9?fxuHpGz#a95=V_bgcgF0)f>0;vB;!aSmk-y!cO -1k*E0?iTK_pDBM(V?Vq3wNKa@s{r-raoj$C&QsZ&DkNIhVC+^fVOT2cW=LsgC)ycx$j&DElsi3VAaY3 -(H(yJsi0Zd)u!(n>wajQW?z=Nm)cQFbg`}>%T%HLLp@&k);s+wVgtOrN~VEvs^G1L<u<}2EBV`Y%ls% -}4&RdsdL1C%vQ6e}lfj`ce`f~%4|<bneSAjC*o1=Z6%V!qHY^p=A)K(NkSAb+Kk#*Bc#NovvF9@;eq1 -+fNXdFJPtTWvrg`Nq0ZmG{p9cAZ>VQQQjNukDj*J`~g9Q64Rl{nHQW5+};```8MfylFP*$=lak*;9L- -uWAc^=_QbRP!^fW34fr{?;+hddACiRzlzc)m*pZUtvoqy|k<TC&i=M=~<7XVa(jwVbGyIGb+$41GX?V -$KN3XPi0fc?_UXZ#C&8^7cZh_Cf9y1sW=ldk(f?X#HcfQlq{3eYVa7egO>?SQEJA;OB`GaO_@XXHsuq -witrYO4gTsuF|=t7O;I)_u;J04AKYS7%B5@H5l_?EEe#9EX|wlUfP@mTy!&{fx2~S(!+f|KQFX=^rDc -P-9Ez`x<lt{3AR#Nso6Pq(*9<yz=gO$E$Apui9*f{SQ7H-@p!2+Q%&r#o0BH2RCQ)g+v1N<kb<07D^? -y)i8o=VG&%zI%}^<iWCH3WCCd%6rzdncy;xPkR>hH17S>Jz%F{<8g#A|r_AYml<IyVwskQ~>4yd|vy_ -t#5kr<nj44+^#@1D4rr`w^n7Up>{6U;I*(g`<qB9FOm+>uJv9HUV<FGhenCb={j_DgV#VP-8%<(h_%C -MZO7I8KtV_Jb(l6FXPu=GmS2v*sC62@Q*7Y3PD6z>93LaSh1Rwdu?tH6973YWI6u@%8beH~FpA_A}N~ -<{T8~5@?}=vpkG|J;B-)cY9ysk)PCT5}#uF0N3-1?3{+a4W*pb>i^5!n>9IVu3Llm{0iTz&&NESh`s; -;Vi1T~z#X&1D8$UKZ&0~vm&;Yh_CC8i+7ZsmM1WppO3%C2Gpr?SthOUi;2%^femcht92Cud5csnX^O~ -b~6xlFgwa8AlT@@I{ZmQ_Il9iR<S-jX#AGFPzbFS2;v+%<{T>)BRlQea_fP~<Dyso;0)Aud9-dl!Ivg -=J*x1}In0~=_4+$VQ}rVVK=D$`_W;*u7?d&XT3XJmh*ulMkZIH1UAsWHu#MW+^h+qotQnr+@I#_cL{L -&BXf9(OKIT(plhQh=8*bi(sup`MmE55`A}l_kd9pV3vOc8;gNp&h+AT*n2pIt#tUdfrn$2dwI;J5z*! -Nw*Br)SpB<aRs4n9L2wER=Xh&_a1xNnpYfB7aG;RFYTo;p}^g4P&&Sy6BFiI(E+!zDdplE;pVDzO6jU -?7?gQyNU(2VdUUgI3ONm<RyHadJn5(YmRA{a5YmC~7@h_IxV5m}xsFxIfrW4pIpG-Z(F)3%xPJ}a0i# -EPuRq#1iAZ>2P)xaL-TonedfVv8G=OY5com*K!CxQTP}nzU9`mv0u64g42`oNJdZ=)Iv`<nS@6;R0<P -Cf}Zx)J6f6XM|q(?yr&X(%>(ky7_H@+DvN>c2^EGDBmlv{LE-D;hAS#y#UF7G{{R!!VuIZWaU0;t8Jv -Cr#GNWG*Po;os+*1|QFfQkBz&)ymK81CkjHIU@I8&dDCY#k&m`o>S4p0+J845X{N`8}_uZd@vuY1D8n -^H2(I#<?Zzhmz2@RrSlZ&WmvV`vCI5Ze#r$fBvt}%-ILu^?e$*zj5IZ{${QHkk<Wg*8gGt&+m<I$LYV -AUibk-{-^K#6-fSg-#_I22nfM<<VYYCNs%y4qd1L`hoUNsAv8+k5RG62_0u}W7ubj%hIhm<Id(K)gzy -3Au#d9``jH3R;oBjL5C0TYW*@sdlKR-w$Hy3Ph8=0S`12$25wqEGAx?bqi1>jB_cM<PhvZjUgVE7~M? -pv9$KlY29^f$yk19k0ANuwCV!i;zBs^w268xC?Kt783`+{NkBYaPO#CM>Ngbwrpo9L09%>L3N`Wzf+B -ptuC)}<2FcoJ_p&vV6U%z#F(jsCL(3G`!YondqQ*I0jmE8p<6ZHIZ2#G8-gvSTH*+LDVq#4BrGOMX<X -cm`zSt8*OwL0!om`sql)cM}EQl_yji;CZcz8xxK!Rxnm*yK&!x$b8=6E~0Yrs&NkVMGIg3!!h7qe0eS -Z?n?o_zLtOYrF`@F`_)VNRR!gDrxG4eB;tM9_kpR#OAXP>EnVNYDO1}hzvX4)J)U*e2KI^}ELKYb#+K -+x%I(cX&Rj#<H6W~1*u&8Ij+KS3N+xS{&68Dq3O@5N2|?F$D!UoDhw?0YJ*alkS!X6IYJhJ8K`90Bqi -WqRB}gRb5;R7c6z}bsr4;;z#mqWU058zjUw8rkqJqM3u7%Y2qu{d}C<D%gWaar3KL~n+&0e}(5le~1s -geZ@D%#lft0!*uviN?LAt)e&W*j|vkkMKJNK6gTOru$?NrGP4NEOAKSL9(hloft@qkbUYPq%ld^@<n- -{un=<DWgG-r~ZMW#P3n<GZ366-}CMNa6JAGKf@1E`G>pz(UycFA(VpPo!=uEOyeZA|3vN^DMr9Bf)Y3 -mV?XVB-nsK0BV**yP|eaKq8<9zAJ<aoL;UwBi(>~lKRVv%pN8i6Q<pyYH}nai=~2s#Kl-wJY>dc*yCa -_>OZ+JXWB8|T9PVNISA0J`29EdL0w+J?%lOgRw}=0o(TDUg@=S(D!6u=Pr`b=7Kh<RXQzJS=G2r8JJU -UK}KF1;Kc$wj61Id!V<ookM1c~RrY)Rg9;9Lti=Mt5jvbXD;VAB2(+d_ve3Gt&X$v+Oyz`q;Q#IJopM -@$pSZ!yh@8~1pI^3PoV2-7^G+DDy--@b-v;1352miVVH3HaHT^G{w9@Z)RxJ1^<`enH?b{7lTNPmseF -b&;K#4Mf<l*(()8t+vN{rqMM38i>DaDN>9*7oDw*%{1zjl|yyKZw<@{Z)VN?mVPE|%y$UyEoDMxH~P# -l?WW%tu-m!rg7Klvu96$eiEj5}Ty2ZsR74NYERKjbig9oXM_H@7o~5cs<rS2W4Yx5#d>9>|&7-8N-At ->+xeW<wj<8n%drwe-15YPtcU|XFLeHd~BAHxEL*j6C0lAzF5uNf707`amvRfuw@OX{1uBv^lk(hXTdx -$)eubih|Rdr8uYH1J#j+}5%8?3twImjyfQ$_)iaX0KyEk@7vi4%sUu*c>Wd%qliW+g1>A6YSVHIc#5A -~U+zKlwJvF+|<}#;|h<fx3HQTGXnyN#-x>S)wVYf;aSnZ8(Se*=f1GVQ0hDAfrgDAFzAfd)|zSGeqC& -XZHk1H_@a~zSIS!m$p%6u2&SYgF?%DK3jbc?JsFyAf`j&m!jn?ZI=A-Ku*boubyfNz&a?5kx)XX=<Y* -i^)smFI^G9Rk;*zKlg?vR=}|;=CiRN_Gk^DawSO@*bkYKIgmj<_voya9VV9@KB_1gkym^w>s=YNp`Z$ -FzBpz(l@|(h!lRBtDwgrju;fPmko_y8-CUk|joI|*a7~reH?c|ot4T44_2YOzSRqGz4$L!QpI;#<wPp -~B_qPZC-%7Py>PXKnGAcO5n!yhN!{>Ki9-)X#hS{4|Xn5*4D*l1}D?h978Ts8glGeZ=^|1meF9l0^!l -Mv&dPuO6t*MR{ic5?^Ul*Q`xrf)mG;TaTDXD1~a`BdED#7yllcVCZS)9j_ffcsLj6r!GH3XclVnY>&; -_>JnBYok?_gj;urw|no!VZMfC-R5DEMcMCLko%=}o?2j2-%XgTViQXcj5a2OrdU^1KKO#_Q}Mj$FGP7 -DriYs`flakGrs|fe7X!H#$$)7lfUCAD(at5i1tvs6kQ#G{`R=dpY^Hg}>26SG$|<43k|pNnjyn5mcYA -0V!I`+D@&<6p8e3sW2XgsYiEd+g$?oF(D*E{TT1sj0m((GV=6ckh1QF$p<tZZ>vl_RM!O9>5@Kk3Rp> -9uUo=;NQb7c&jPcLt-R0LEq=e>y<m|v?T>u`B)a0+zDwL!AZx?Z1Z-2spj(^`|Z_q+L)DR7c0v5>F#3 -r*lBwM6FhUYNJ^Y24KtH!)NXzq0q1Zx2b$!eJvhKqsjQ<*f3w_K)qJ>K14h#9)9pbRx#^Zky&(i>pWk -0zP44=&1bw(|59>TTmPoTLn5fpaZ=x?`6wHmmXWjoHOt@>XP-Q+-rMBiX8Qx$h_`FNfRs)f0ax#`oS> -7w%h6eBw23D&5kig$~uggVMlvZF`EZ*nlQ*Qg?lOWZ|r^x;&Klu0(4K3b6Chi@+P2e|0VJWpH0}k9~5 -L@14GL9KqJuFa>F%4g6o{LSJRbYgi$?i<cjF;3*3y2{hjUn2fXEJ6Q{pvA7mC*=^rXGAGF3-I|6*S&9 -fWRA60Gs1NZwTW%I+m{@9MQ?;se2ACnjd&?7OFLLi!e5dy>a12lnA@cs=-!U%+rKP~!DpNdIDA8Ii>Y -C?%agli}5JJ5=#qY{)+$7~t;fl|@WHO1oWkoqS-+OSY|oW3*Yqe&(?G!hPhf$W%=z@kHsAAvps3D_}i -_jQ!+PaqIU4@?O|$Hd5?DjR<mgMA!J@k3FUN<Y&h^pOC_(4$Xse}WymMjscv{h5ybo=?&N3XegQovR< -CCdkqLh{1me0{f%rgMZ`a4nJRAtYp=)3@<{RB*S$i`?^1Ytoo-S&_~U{|DiL+<*`Fc0RB2Nb}fY_xZ_ -1&u{Yl{UlD>oqKosX^#DIXMnZIPi$vT3PhBm^{rh%7Rpo^p7*$_nU%t0L`Bv1?xPyD=u(mnK7ocbS@m -R61@ds}@$1ZqO<(#imd!unrs;Jf~iO0XJsuucv`9IcfKJqYt#Jl~D3Zb|@`j7-Tu=zk`<FCpFhAX<G` -@2>AS3!pFOEkb=I}Yd?1g<nI=n1z2cG%BH))`pZzn!xw*)beWr2gr#A(MaU94Z_1@+xk%T0c1>%Oi*6 -?BMZU;5(K|ly(hZMOFHGjtHpi^=?T3L^ingHbeN1cr_0t<r0dbf^`u6&X~cBzk^Md4O6RM%*ig<@mWu -ra?dW?8O@VhE&%TQk{ta-81(Bz3S-FCG6IfWBKq!1vKLZI^Gqgp%n+xf#YTxcWUAe9k1^aL*jEGK(t2 -hkXWrUr)frT=lc9`g7Bm}Gg0$cE=F$bx>}X)ZBzYlHN<1@nIo;pS3?p(k0jQqf)rgfVFWKDLvSg8TbR -?-zb9q|Tg^d@y<aC`xt1zJ*<-*Ke&Ar{{-L=H%Q8f<mra}t!g^{I)+@HvvzmQ?bh)}+aFTIl^iB8I80 -OPhneT(eQP$go)o4S~zi7QVZ0aBmJ>{preEv0gg4P0H60RzT(y?K<PAVR(n&?7kSdta#*+C75%VsQ&9 -%%zIxQYiw|itqL5nx$Znq|Y)aMo*gTV0pr@IzJ$AU+#0;;MooXqdt4F1lHJ{=cPEJ^-;2NpqN=l$W}9 -QpG{RvZwvRE?LIzRKkPYgaqv1&gX&~V&r8UZ{(wvRIlnf#wUKSM%`8Albh>$<rSKA4`R`}7L5Ad^NMm -k-rilHO!4&5?Tdv2HdOV#4&gDESxlR3<?wa)u;NY72A<RSb+52OS=6k$mT<TY!IVif&p)Em}e`-A~81 -#fc1gn1m_<ktzFkx6Pw4G%l{89`1Q4o(9t|5SijK?n$J-^hN?Q(Y<2FP8b(*`V04q?l5e!SG`82eip2 -CP8WlCj6KdNxf^uM&Z$NvsfJqQy5^EwAwrNfcS@(B_YT!IvWEHtBOY&z7<C7@P+!GE112#B%EqZ`v}v -VajPl*iRW0$(b4_48l{)8XI<e00{ly@}qspqKPN<CoJ;VDIh_?TZSQW;<n38-%kQ$T4fMolJ13=HYKN -8<1^q$@gjgA_X&UXYu#&3Ng453)%X)S6uhIG;p6oPn`$U`R#cR+Fq`r#Orncch!0Tjn6X-PV7ZN`+HF -{J=RJ5~f-w`Vb4nA&3y$vj<SZ}uru6&gnNIZVkzbxV9}G$Dj|9Ff?A8E@Q2FG%${W^aNuY*1Mz<{C{3 -77^#jsJKJvQld1!t9ZS&p*z0EfO*NM%ctd5gmZ2fP?sFaD?(XBLImD{l-dFTDCHN}rJH31Ba-8-xn-7 -}M5^F+h|<@{ypnCU0k7A|s%25vRMtIgThy(q1@DI;<iC8Ot}TQ^2?Hi92_apIw&3!DY>ac4@R{BG5)f -PM~i9=jk#RuE`aQMYJ0@VTC82JUfpzlZCGI7PxVK3Wg@FgI4AVCWs)THiCev@6)ITA~1r8kxBy_uf*h -<V0^>nHEL}ex(F&4FNk}RhKD7&T8_S%0DU93iGRoqIWzl8$D#ldy5me~OkJyBo^WB89DcjZ+#-Ysr{L -}1&kTypPP&-i?5p*i5%A$Ahrl~t6Vs|nn`itR6NgD!@85(?@|&6VY50yGze!C$JcscBZvB4M5BTpteC -w}J@PD}N_o$F0D43)^5(pHG;xtM^1h&IOgxKLCLL=lMiSSdi0s=q0-0A3$4xor*5aiGtfR0w35IMjd{ -ORI3l5RVE`+2PfLJoZc2tQh@v(M1%;i88fC=enJ%eo{z;2``#cj*VtB_9U^;#akr9pvH3??&%Qc-#U< -4yc;ZhX6tZAKg6r?Gog;BlOW$pbw|Mqt$4CR^l_HyDue54#;^3G|)%&>G0s&FZ}C-;Ojsg*!nFYc#At -*ywMy*g}0K*pg=0I>}P?LWBVTyg2&vzA3&9Lar+(G?F>xacLD7YT-@RK-oN8Veyajv#C^oI)=GRe#;E -y9ME8TR;`IPbe5szLub?Wjc)_xqqY21Vot3p5=t#$XMOW6Rm3sNT!FxHrzuEk(+0J(R(%=n$9^bwk)8 -KZFxE;>^p<fA>et@x$D!ME?F02ZP7YhGwR?&U`{vwRQnY98>s{r4Vi}1|KQKLbjXTl%w*r*3WU1W}Ve -uc3Y=)pQ=b(l{%wxE9VH2&VrZ&m+EACEMhae}UZdUl(tFE#nv7+h^r+bETn^U7yvVy^R!;ogswyzhG! -PL{G!djTbgbAK|0B6#X{&I6cxIfKMz4VNalj<eZ9-WVc1X<tuj5gKV@UU0%L@HEHN`X&`(BHVo1Zbn| -<Pslg{A>C#WbvK{FSU!WRnWv$8bDud}S6mk&zEeF$WPXz&MYpH%R(i!ti1Az`D(V~$m<qh2TlVhCWLS -_5lwJY8Z^A){!m4Z(EO<K$We?Z#Vvj4R;KDmtFem}#XK-5AGOwo@P#&k-8KxIcSVyDjUr%4WGQ=%d+h -=-)7}>D(2(KOl7!pCeqX~}o?MK5;N!?JThDN~kPMXwff-m)$M$27IC-$l+%=0EOWyFQ$4V30G(=eU_S -$(^|DHAd!(&eNV#+L8c2bj?@A^#c)2B-RV#wyJkV#%54;T;UOO5fNbc3Sl(GqX~xsIuIYu7hy<yK^0G -w~hsvi|UNFmZHWKwY(!<3ROPw2=tnjI?U|z-MCAE@7~|#bj37`$}A{cZw)CD+QS<B4&VtGwb|CMabCY -``NdW5-braeN$ToH7@%|)QR3}7MlWMiTFrPc@5;s^%;8;(k;FG}M~XsjQ8k4ZlV*+HxMHEt!bDv2iHN -AfQ+eOo@@|~<<vqPML#f_$$LGE|goYt2`v%&YX~>Bfae_2xK`&WQ`mXCYfkkL$?3AQR7Qb?(I_i7CPY -Zm^OOl8nf60=fo;v$ZxgPO!waL7WKf*rX_Zh2S;y(Sw?!OKEDOhfu&YN3EqueCfVCUJ?Xp94RFm6ou= -e<-6hYw$EWR&pDVPs@7<SS=YDO~fGReOn=i{k!<rFtxO&QZ}6Fym|>3S@YI@Tz-xB}{I?9HiO3PYZ5m -n1jgHIW^9u<PTNmI!gBzZo*r3?^+eUaptZrVG#oR-}5!Os=nx8ypGz5Dp%=ICYQ^kGPHj-+hO61mla7 -mXKvB;eHHYxgFX~{wj3kqbU@y&Ebf%S1d8k2j_tW97v*Zwe&P3aI%g^woDu{+Ir=%{hS)49%3o5o0iV -&t2B;2fTP8r_6y8YY{$OUJq{EXy_qv{ALCQ2@XUMBmPN;^4L=sy91HTG55@0q~@F}ncpkQ~ljB7OAdt -2AoIxF3sn&BX9Y83f$2eFGXt*S@#eVw{x5vCb(PagMEi{ba>szLyG#YK7#nVr75s`O~dejL}k&L?l8z -p=%`t2X^zv`;6U%qOXD%BG60lo7*KvQzS91MEd&n@nWv6ZyCe)>UFTf~m5ar1<NAvzLY~Uxl_zE&qCj -fraj?%0XfVw_GG8i==^2e@0a2>8kyRh45WhGq=Oiu6k{CNBAbF3zzmb)Xp7SL3@5Icrxyc#<pG)#<Y} -w2bLLZa}|q~iwRwf!Zt?z#t1OjC$rt(cwwdaylVrfDVnCtQ1DJi=sWZ$W*!C%P8@(h1N$ODW_|tlaNn -T{{r?i~`%m2ZC%Es&+x}7iio{`@rf?jiAP9#k5+gB)#4rMZU<}7`5=Ci(_!;mE(<4EK#YgiDLHsw0f5 -fjoP>}ja^3&*N9u7S+YZ3HwV}bZ+4v#;ADLby)@fVH!F7bbqaX)ULRPwvI^3n619@#(${%?%>1@J?&1 -FFUG0ZOrt$o8RGogB65Lx!3>U>@<wRPHD2w}wCPl|+vcH1a9;LfHWh_veel<F&x(kqV?gUd+&6CIQdx -0VR@uHR%MXl@wm)-;j4CO*VK>6>$5pRbpfNADeXkG3YxmAMkI2zAsAE-@2ZE4*HJb?xOw?^c~0MoBIX -y{bAPd-vNCG<^%p6&}TXt_qDJK{0sE`T;J-OycL&A;QNwSgG{^?TD}b&gQ+SBD9U?@Yq(<gRC?%ZDA! -|Wk*}U*I>~!vtLtZ!dSxK2FnxFFc;{5kNZ71ZV{^{F9{`pusx^=2yq~}jsyHQoiukkBbz(kDFP6Q_j2 -n09WB7%<74W@i$5+jc)!cVe^Lk=6=MIG(Ro5r9m7O5!+dnB(0!)6n{8`^BX4H#uR#`E9Pep9E&$-K(= -R1~7<3{JPg^tC1<vl~2k3l_)=pE-No@;1E=B{shL*7Wjm&ZDnW(7(^mWs@|6{s~I?-!nrTF{u!0Rc;E -t^v(rA-ZsT+D!1uvR7ZmerGveO<rRgvtRw+pR4)xe2egW*Wv5kW@-N^ko<O*gx?qfA$H>WX)OH19L@j -YKHuhM{@r{0A>`8J9#lybp(varNMtA8KMSu|dPKW}S7S$z-GkBLwES_1Pd|1n(MO(nkFD^|w9%jQ>gZ -s*F>*8^?g1I24+4wQpHb-Oh}d|16g&=dnD}e6OLi1;vh-K-g5*b70{;k0d=wfY<Rb`;9wn5WY45@J_? -jGjKm>L~*!?u}GyQWEXW~N(i$o47uIv+D533mHL(BL3{N)_<ML5DM_>EUf7nFNJ(`k&vpAXhJ-<4E=u -fsD3M*bQ~Zq8p1l}LQ>+5^HKUPXBdYIi#h9;(m=R9z&VN7TaKwEY8i<9-)_KGXpVb<sYmfXNpD=z@WP -J)nO(s0#cK;#{t+I?`->m7(UUZzDZlCwhQCjr2U(OX$gi@3Cuy1p6-VrN$!hntaRzX@!KSn=xxe{%Lm -s{+_@yr&RTLBc_6+LJ7up(1?s2=L`uA3=d9XDq=I%H*X`|x;~afkzW{ZzFv1Xod%0N<5I8V10B8cn{@ ->p6Te(Nwc#<uFjOE8d)o0Zou%o5b+^}qo6~I7=lN=fPQ<bLbsUb7lywrWT8@<+333lHqdS3v`ZT)$S6 -UkGK1`fT;vTxvxhq0{2dji2sj9Ysa#<uGjPU~=TR6sH5LjoBUPmSbn#=~{Pe5bnnJuvVBD`-jDn;^rw -G-B|TlBVYdz9wSTHvjWaB;FBln9IOUkRxB@BSrGk_tWmkD&6YW04GvDw6FkzO9~cbcA$*(Th&O!}^3j -)?hO3tMsZkI;_<z9jN!qQtSPQL_kf|25s;vx|B4xVVFdfQ!#HQGhvaN1UE>6s5f*fDUg_yK@}RWl-hX -k)X0ig`Md%FX!ycQB|tv&A@6xt%@d)_OXdaj;A2%NpIHRaK)Qp7TI#yQ8~x_lz^xMM&GWs}AwKH8Yfv -ZrYF=o{dm{4bmQksmT;Q-DA1fVhqs*R%>tcuCiiBn(h*NpZ##xML5wrnCqL#Zm*{h+{gK$-%S4J9?Bg -yqip|2C&tj~^1T!C6tLQD!Km1s8D=Crz4V>(X)KxifV<jSzZg3?GF@-Z*tDF-i;lRMK^X|Rm5LwmZ5_ -uIXsYnN^EC6qCgEk@?)>|p0+>EZ>l3L$mklPt~SS9vT<oK#8d|5z$9t1TVhnu#%bL%NB|#K0hGBKLTe -*Nw5hFO{4RHT8Wf-4O$;N|*Zcn8omUfX#W(@Bil)R&WwPVvf;0YQE0Cq|83c8jiSMbeE6^l!y#*U1>B -y<1whKHM$FPT+{UqbiNdB&v*eu2sHU9yQ#vw@74YOtd79W(peRl)Xw(+cHx<LW-I1GF*{-@nTvD$+aJ -gGf6u`2K$No&=7KTN%pzYNU?7HzKPP-{kh8^cVZ^Z0ah`85Im7MLeP2Dma6F^^LQ3-|0rht&FiTVz>7 -6We4LtAmP@u+WK31~R3+%ig+)#84!QT~@%yRw7T`{AG__@Fog@^n0yq#f@f#5JKY)#mq1}#%JhGx;1z -{78FmG`&wlJ{8<VQ45<270zj_D+-<*j^$ox=OE{Ba^9O;#3SH8F*wNt?3UYy+}sPb*Ief@jNUISPs|` -eC%|!PtLls^ioAo(~)hn^e6g+Z}78{FkA=R3`1@wMjfcOQ+YlgBu;xz3lcQ9_Fa>YOlvtpHgf!_6cBq -dJd3r3bKoJB<)KT!1N;sZpO;XNi>HlRXH>hA9+l!nQ6{*;L=**Af_!J5>M|A{@g$U?-A{%YqTNQ;yt@ -D#I=ys0HTAg|&1_pnDQB({eMTzLZElVoih^KZV|reB%7SMBWxK4F$Z)chH13fBIQNs<B59<EHeb_ms5 -7SjYL(<2Cu9Vkm}+dW;@;60nMpvX3`;>m%ax*-3OOhFU;_9Oi7uF9r!dp%Rdz_^HVb#y4h&84$}aD_^ -kx}saML`Ime`WM6Rva3&FtaMH@=&JjOKW?**`fMDBsSIbG<~6QQEcZ`THBx^+4*}yoeU>hQi+8PUHTc -6Hc#8lcL6ddo=LeIr<~8<@aiwuLyWY@7W0>S=XK|-zH4f9Tgk8yjytE$spx!No*{4V;l26SA9-XfJ@Z -z!5ZrmFDH{_I$Sy@F%x93>qbc8;{I*OIUUV2f1u5`|ND6yJ3pRH_}jVtKmXTtNPcuH`TJLWg_D1};(M -4#pwQttLc$n?&^Q4>1cK4{jwLZ1KIUeQp==tZ5R}6AlW6Q`7;=YdhY%`!44dG{0rGalg`uAbn)K+h#y -`G$@P`Rg_|NBPJ{s4D%Gal+bM)pQpY9*xBX5Ho<KH2AOj+;L8~)fk?*Q=djrx`A$kAC79qrsmd|Z#9N -0H|6qW*O2kl}#_N&4s>O7Ua321AaSntkQR6MVXO(&&?MKtH}E;Zb&q@dH4T$$uy4Us81LqX%~X)~6HI -9d!?1_Vmi}fVf&AVUTzY#qiM1e>7NAXTaQkP_Kco@AOGqn@6foud#tVUQx~G211Qjeu08Bwp<Fv|JMw -O7ko~Xc$YhLn<IpVj$!O?D$`uNsWyY|*b>r&-&LmfW59O@=YMB4!1v4f%hibf%rn0D`|se`76d@Sc%C -^+oS!p%;IhiQUGS>hffG}3EpgSrs=6CqM$0erJT9nq)`qRG2AHBwJL|kczyv-Xa_jbR>qc?ISzt0e2a -UF$B(j*o<7woLcxvc~zhx&wM;Sy_-|CpmuXkEY$HtptY+_+_W9z)}Ge3u#YqV*2u7#ei-RUyO3QcB;7 ->N}1VcWppRg?bV@6Uz%o*5X@47fO&xRWSiry8?d_FW?l7o9dPv%J#99ovux3)-g5U~5Y5<AHq<aJq#V -ZF!E5^bBw)ixG)_X{s<(`t^YnpcFhO`!3J<BkSI!|C(c#$NY<N_4C@iGaPPbJrruK{I>WDaFOlXKMZO -AJe>WrQ1+8BhEgPc*pwbIi>6Qv-Gdmp$2FS7s6!|kqA?OCFdF)3LsLI(H;kxbv<@XdLwp}q=RG!1AAY -%i?$eJX^B0Ne!;UEaxp@+H$leq55qkD$xYN$VejY!13XcrmM`-M@K>9Qd(jSfK{W)Q5XWhRtPYMskus -y^Q_%Z#mM<e26n?%GPdsY0%U{cU=BPcma+9CW&WqwpALi#9+@5c|3Gx*3!9{P-*Ft$G{u}8$eG|Lm*L -lSHwzJ)R4q%A!C-0r5C3>2Y)wns<gEELY4<-tDfhQ|LQlmSA)IA4PY_ceI@WL!ks)aA<r9|M0K7degr --wqZm_d~&(vkN{}+4k$Wh#k70K1D9PRHMHW^k~I;z!uH&TJU$3HNGl3XvwFcQT=Im;E#o0;7^s`E9_< -$(H>cd_w#%Hu2(d^nk-TFocCbBQfTAnHqJpi^p@hsfb@R5hI}1WQY!9oeVc?LeBz{W$)xEXhpG>EL_? -_8{(1|&Yio||^~GH$J*rpcv6c?Ntg9x=Zz+&&aM;cEmD87oo_pV(Lmg$^nt&Lm0d@A;oV2OinLs%D6L -GhB?c|!)3Ans<D~gpVsY5qhySWlm!OIQZf51hOC2yP>qPpRFy^aM+$HYBo>x$M3%fo1{SU>~RIZMG)a -8jY7IWM>mS@GMManGtfZ)cQ@uP^Gvxi)j}ytq{+%7kY^-e3|Y&ykvlKvs3m!wR$;`F`8C=X{RkYJMTf -IT&t35DRbJxwLwWupSAOSNXkMZ9KTWUzhwXabYn4GSxUZdBZzQdY0#yR>lWa-cFPaqR;cwYS7v#Ujo| -A`%VO*iE&~ezQzrN@pOf)o;9#X+4z*37aqPVt7D3zz~h%E*=jc#U*SqQHz(>fQW=9J-QDUd|D^}cQq} -r7c`AOO0k6w6g0y)XhdYF|xU?gK;GFRS5))>hWpBc+bh@T^1An=+jS0ezPJ6h95DD8J%FO_ruG^TGo1 -ctD-TCzho3VBh1#j5*0wu*OF9c1pn7uRn;+F7!A)Z!><&KDQ=9zzqci`q(qs?E=2&mMScG+rB-MZ;k& -#HT)Gb>4Iy=Hp<X;BwfhuQKf*wrvGloHdQ=0M<E<@b-2*YO*+pu9V8z|R|G`gtFR{pGzO&mWotfp6V` -|FGdti8{*)(*dA#VV+NxN6Dv`oVf3%uuu5Tt?A<RcHWYa?u^COIt3Z$Sc9**QBGteMvBbzIRCgOK(p` -zC{`tU<8nGdbC;^Cz6oYWu}{PNn&FUvD9`h3rzZI1vLUzi44(Sia;3|w2k%_^kzk|%Q%|*c7gd5FZpo -kCizPz$o)SBTye(7G5hk*nZ>+XjD8V6khszKp^!#H|0VRCnXT^JJi>>t0qb8T`jO!dmh4DR%vZ%ZBR0 -BH8dNLTZm!{-;Szt^YyL0GH(sKfA&JmUTs-&zrnCrl}V{=vN^COsV`PQyfFUrlri8o}kE7{O;*&CMnW -;2&{$P)f)0T$&3XC@V=-s7@UdPh<*R^;ryzjq3H|3Iw|*f3|;?$s8@v3vfEdEqwmD74Ws)?{x$qMlMv -^z_a1ALb<X-g?6bLar0fW(_^_L%FlDC-S<!p}1X0DN)1ym)GXqHex*=(LhAQnNzv2Kb^f++`O9(RXfS -Z>xI*wWR7_iDGZ8#);d1*mQBZAVY2_;=vu)oEYn!Pna0<(QSQx}6<wpzC$=qurYAe(KC8K~zjHCVEh$ -ym?$2eY8oqGm&GSd$eG8fr)&ctoks7Z*>KxNvm(UvrDYnYFSK9HKJM?ntn#2<a@~k=xXD1AXE~G0^)5 -G0C#gsNc&n}+Z3oD@@&o>5bR@7$CVXG5y$shGetkC}N7k(wnynKN*9<qZVsTtCDlMY|hvkvFUZ>89sn -U1d?Fw{T4`YWFL{>ty+6h&h6(UwQk6h%T54a3l3SOo3Z3MTe11WLg0&$%G_F&V;+X1twp9jXY#0jT1S -!3Fv83{If~@ubAJLE9h8waHO+h(7ie34RnssgEIi{83TeFU3DjkvmzW@k43#&;<LK5rx0<f!_fciF`` -N=~2xHsiT;%gRq^F?nDqLKjRtX@gtmk)W5L9Y%=+9StL8EBGhMYc&CZ`OW48Oz8dt?r?;<$g#MBXUJf -o8e$$3Fj6_Kw@7j@F%FNc%6V^#|{#>rre=OG?7Q8R@9Dju@hiNVpc=8x{#vz?mB;IE}bw?)d7Tkr^NA -esnQF%%{W)W=0{syM_%67{5D}?dY;!{)j;yA<^Uu0CdFOKcN=b#-ghriKrQ01vV))Xq&R`*Yj{8h1fJ -&LPl71wyR-`obisC!jVYW=GO8=hG)u4y>tc=s?){~cVZmaAFjS8gce>%k3yAIahO+;9sfx53Wbd7Ncy -QtwuQ#~YgV=#EA>6B37Ez5^$?y9(O$jPD#jmUox;>l=|r8NIf5QL*qPc2<nhbFr2Dn>2Z5k}F|N){K~ -uOeN5OG~`P3dPNBh&ZkoBZ^;6$buMx&*!|Ke!T6W{5b!grgs((0<CXh+z^@iJ5#{tu3zZ(8M73(T^Nk -w<Ka#@~t!`#@=I7E9&Bq|bI_=j934x()xuKt5J^QX*7q*4jjIokCFkG=FF~W&|;&3gY)WHp(po>PDEd -}8_Kd;*;$WWsZHtrCviJxl@2A_uN4(Dcm!vNS}On6IG%QztsJVZivZT^09%TrgRZ%psMe!CovC+El5< -c~T0%}%Q{ZtD-}`|T$@@t<G)twrTeSN<XY1<?e75D1DP(Ef!cDV!n>d3*$g4$HRBv7a`k5MLUEKiMea -Qz1>MkN^3{*!CFo&yF(ZVM(4I`J$g1vxP?|N{Ss3DgBt3ryt<}>?0hVeng%3=yX(6ljHaoSGGMa5x+7 -L%Ag~_#px$JAx9N9%8uITp*0vCeJ*<x+pmv5>9|9C0Qx9XhsP}1&JPdUwohyF(X)aavI%=AJn~@lXA$ -vV(#7zgi|{uiA>*1L{Z=bpr3f5x<+P-Jr9Su5j%5AEj%3H(_(DDNUz=0Hog%_fowNzU=kDb*#Wh906E -$h4jKC+~v@yZA>9g|ja`-|1jxy#~ixt)1Ep&HOw5o+P-#$wCW(a)o(B;>o=|r=C_t5=Qv@<=`QfJBdY -N7k$LeU)q<beV^Z*+qDQXSILhwJb4Ip@Dq$Vg?&udOkbb*T&sD)aAJp!f6R1^8Z0`mfZaX%+{aMqN2k -FDFxjTH2U_PCJhl{X|gI6@$s7@U7&<`ZY_M9PT?o<7QSx$oqrO%Y(Y4#C8_isWj~gLvd`FC%}z!R9{Y -eIA1qhOyZW0P6^nCEmw48@LJL5NLNBkjN^jiFijh^fv3;?1+VrDTPFgjg4_%`#M6=hW_&JxgBI`mvnE -zF^}vJF2*LN`^v1l5AD@hKvd;>MJg5$J<x9Xd8({Qg(B$jZi>VjL8$&DVDB_OTvstEUJ#&!*we^K7YM -6sVs5Ho=J*+xtK2Bw2<N=^aSIa260ul5+^{d>va8mq|4V1a*`F2{3DhUzf{o;cxd00<M<<~bxDT}!iJ -MnZ@03lEB(3964iW@qQbnJ1B&gnWC-8{o@(Bye9e?7wW6??Xg-W(O>&+WY{;Ns@lt55)9HR?z#q^2jJ -93~{*dI{gYuAVCLURYXo*<kj)vT#tn6#4~{-BO@&d`3ij-&$7g4Xh^xqeH^#r|j|Ir?s6FyM8Juw3w4 -tS+oe_fe=+&rwUYr?z@E<^d|hOs2MYBC<*}Zj>hn7V+IkadJO{I`t&$uQOTDD%{G+flHp5&=!l{8Jhs -|m0Mog*N2<P}_gcwSAOyo3U#B(omVKO&WPV#;<8p?ef)%KALm5`gf~<%YNOPwp^cDtmua^toHOd7XeF -DgO3CvQGx-P~EZ@t91oKP!;zN$(8Po8^!G!mkk*gI833r;>ACvH3T)rI2<|4lMKvCTbtl73Lz_?JR7y -KlBEjEW48fu}A>%%$CTsDgODc5n+Xu&v)7GhbUuzp&yHAU92UJ=LA*!Xm<DVnk3-2A$Y&b9KT~Dm9fc -987K%`-lt?)x%YA9%JaH({x$KE(R<f_s%Xfy>+V^<aoPl_Z^Ejst4A>sk#b9_B4fCPjF^tIK50_l)M# -XfU!m16T%h(L2pAZoxNXd^>wfBdw5AMRyXqVf;Fv4ndPf&l0elb&L=B4)#a*JM|{@d3pTT~9RuDLv_V -mG)ibW2eZk){B9!i+8@JIbL#|Z?k%p|XOs}!<St980hDk7jQ@qGtF6fp6&z)+<Z5S}=4Q!w?7|!>TTi --_k(JOHPTM$aC>BQHpZ<oD#p78k@bj*^<Ei1tKqXn*bsJ};95#{;LvD$Q#GGwH3$ipSh@v8YXfLA)Gv -^0iqlaOWxguk!P-alPlTXB60fR<8tSn~UO?$Wkz<-)=}vF`j;M;t!q<JA<;u3ZRC*q9N|yD;%SXVA@u -!IH?H)cgj@(v700n?IaLgTii3>d;Q`@RXAnHayLnoKGt0z3!Khd)@n>d^-!l@DKh<R?N7lCt&A&SmWP -W>-qA~!3hld9j(<MK3esvlfITTk1e(2wD*~8BS}+-eWN~)?t|d7=59EE&y{^Yv+i}Y;eN)wMHW~_o<T -zKGGdCrRX-1rtF!_!Mt(M1j_s9lhD=@EU2eud5QzTH`sWW8K{x07pT4gj{?~6N_G`nTe|D3f7!dt<)* -p?C4)k>h1i%PIV-$rUC{3UwPVb+_pYqEctQ<xc)Q3mHALGL>HW>IZx)p{8ve~f`lpR0*B1um~2keQUq -ZGK`gM<%&w3Ep2)4z*R2ZB1x7Rh63E5nZIEMf;m(SIYqY6p%!YJCZLoJ4<&K4ALD{FCSh+<kKJIQHp% -``C&=<gwH&IUYLvJm6!X4f+`2!syYpwv$m5Io5<6YJz`-x>)qcFZ<u@a5W~^t88+>5=5%Aby;6Oa?64 ->b`(EL-!zPu;g9w~KNRSsGjupHF8s!rUlaG|@{7q2@Vm>;cMq!H9{l~W-xKxHqT2lS)u!V})T>)Q1L_ -xZqNAY=y??i~zq>NvS4;alE4%Nk82F={-q&B0%CfU|W*7@wn#L}Wx#C{bcr(kGA*`_;9h{xZ`&!=?VD -uyGS!JwC;pbCxd(en`1{acLuJRbqB)F_%by2Jx74cxFS@_n@$@jDo_$Ll~U-w1#%93yAj$tJW0;l;ko -=9w4?X`Gl&JQ(3i8J?Gn2eN5B@M;zYDZ;a-6+hRb=ho&F%pPs0U}9^U9OmK3DqMnb|iWZ6ZfJqXp!WO -3QEWgN%9Uu>+4z+(4uy>@s4gFSp|Ll_d}Fz{qF2~khndh=T-VeM((2%|BTcAx9j!%V@&$nSA7dY|GMJ -OK?g-36rxFlz+e)C4j*m|gGl73O|sC(qbz|wUas&#){a~jaa7O_4NmyTXeHFqsE{0nt3M4o=|?IAj=# -*O9{s5(b==?!D?3Ev(}UjaF^Ec!+9RDD^Pm*`YY*=I;bZy${RojHhf>~`)?ND3L4kbkf`4v(Ord@xMf -Y_cvU=nZmC}zO$`^gpJ&ckcwtA$($Rp;(*<V)%kEGUi`a{qu5o+mKO@3a+r|>70<@um_;?I&=-vrao4 ->d3mdJ2%Gl7z3iA&0=)(I|U#4lJs%@ec4+VV+sks|g>=`|20_wJNwXjzU`h7;OG^>|++R2OIGR()qVn -1AM=n|7kTp^NT(DVS%6c#Ui|+T*dMBNbsISuO~-;r|t`4s5V2+Cl6ZLR$k~SR5NgD0fbz->nrtIY`LD -S3F)&v^03Hqitipeo^YzuUlXgyUYB-GH(}D6U0>Hr?9-E1d*uFCsK|GyM9@;bM9zT>^`zZ;^H!|vqqj -~Qbq=@#zPw~h72C+RbPLZh6|~NNN^VXu19p5pr|nZ2$+vztoBJC(%`ACN)$DSfV=lXP!4R?KZAcy``S -B8%4Vlx>aufy9vo)%Kjww#nm{Xx_+GMK|&vWlqdA(v{r(PTH-rUB<t*!l?MYrz)@#faj=j+1E%n(mmC -<6WF_HXuKWSE`XDq=w^_fpBlszYiWta_8J4%#nYvG`Ter|`^6Xxqe!^3+=_Xx|jzgC%?N3Oa=s^wfmn -Y232j!12mWp~;FSI2TP~@s$z7u0!kz&+7h$h^;G~{<X1n38+u^rc6R*YRq}--Zv|<y9Qmko@YrMy1ie ->9xG8q&a;>L%0Rd1^_z7%!^rh^Gh-S7<{Qi?AZ&Bwxq<Co>;3M@(Ae^h7nG=JQXitMv?L3ElLW$DDgL -55j(1JH#J`s$^a4UopKf*3vshcBi|)CIi^(*eTBgCYISbZZ{usJ?siJc=8ql3j-eSb(lyPHEocq=Qx7 -f^TzT+!24L4_u7Y?*sQyb+gcaO6-G)HfhG$$Br1r}k>zHYyzchmXWk_(j~alrq^FZS5YfMYwum7Qufe -5gQq^RQ?ucy1FVm3C}nzxIojPo43MBH)aVCvYL|<r6!#wX1}$Cn5C%J=<?T&)dr~g%#Sfw+9m7ZC2NJ -dF@V-SNpdtC$4-77$v`*x0v4AY8K)SmX$&eNzXFQ7k^tNXxk=1YVCY62qhB`3Fn-0d-bPFWu(zCuE2x -HC<^RY*EFB!s(wkiv*_*hP7Z^oUFWSzRPS=in|((j?WZ56)vFwaORs?<-Rdd^km7aby?e55rd6Z?5-! -;V#lrVaF=YjH>)d1>udzMR3RZ#W?4muP$~LI@4WrO2B?Cd8N&2!;lr{*eMn9kG1?F&+YoK>}cPnx6<E -J);=hq2R##9np2`1CBrQ+oJWOk+ksCkxLPUd+BWsG^hFoV(OcdNptta4XG7j%Auh6&uEJ+*{*onBSp? -I^Z~KXPaC9S{hJ;nENsXml}=!Q0h~*jcoCh)zu8Y;5n8UjjB$H>1}cg2_Y)gx;ifa~_#2WKm)R#7Hyu -m!WuPHnU4M@t-n+g5b@M5LH48OPjBGF_0#2r!xHp2g^vF@7J|A*lrS-CIBFwSlcN*kt6AY^c-Fj0@E7 -txuYGlI(w!iYEf%@O^;Vi67#|BIf(Y4or?)tRyL>sWRO%{8@HmbADqwV=@OvA6$FvF-aqj-N)mFHNQT -7#^^{jt237K|ilQ@IoQx3N--(e<sFN<wnz6;TS;DB6NoK9PT5}m)a76POjsFd-g#24r>94N(Ggd<WjF -m8q#-M|!eUjlcgzaRFK<J-}s>A7#bdI6V#1HW)1JZ}!#?Fl5@FS0bf0W#k18XEdCunqdOz~j!fw6WPl -tf4WQ}!`djN+rUY9~gAKnD2{&PWe+b%;Kw68$Tu9x6Gyu#P19XGCcSR|k}Xj^QNYBczU{hY)-mACwLI -Xv(F?M@Sv|prlU$GeHmiki*(B{V2bE293yc$AkYCR(kh$jXgVIxA0Z>r;P9aH&{vf{}on}{s~s%Zs>& -6r_<I8+`ik)K^O@Qda=EPrY?yazU|E(%M!g#=jk;7O%}}$pN(4QVKrML3@5C8-@t29=gyd%2Ijs7B4s -?q06fJ_mS2T&!Wj#+_s{pGuzY~vs+N?UDn-KwUf1};tanzro!%*g5Y3GOG5xusC=2zt(qoX&w1ZsIAb -Y3T(VLhNP|w5})H`ZmW5v4NrJA}&Ax+Hd+u$he4VBkN73fK9E9kyK1!<k6*j$hj#NLv3N|u1>jk24ii -ipV8gH^V<JbM_{W+r~A6X9*0u0o-(XRM!V%xw~;eTIG-M<;akMt!{JKt`Jn4i>IDcT$m2m=moyhl+^L -#`bDc8607UO7dt7OHwV{e71v*w&y{rTMMog-33ml&bo-0C_(`91R)k<tU5+%B>qF4Bot4#&5_DHQ-<v -wk^|qz{TAEu<xRi}<!>#Ja9xit?K8$WOV#7b=;P;Y>#cX-k4vv1EYaq}=F0A=wygAl2#vG^>v+%Fu2^ -vM4oGjhvrvqcBB@XZu&hgSxVu9_8|Pe<r%NiQTB)C+Rq3GjBA7Rq3{FToz;16gwh{st5_QLFtk$@%LR -WKTc+1x!x;`%=DZVpfJz@6~eXDJauwIG%L_z1`YS`E~BUEnZ4#;CNxeSXL&#)ffnre9XkBe8Ycw1hRy -RE?CNS$NeZ!^$wm5ZS3kRvm<^+DgtVg65Hr4a;`;(5z#yit&o+`c-;m6te0jQ;^Ev7oXIs0d8mB}1%4 -J=3#SvqJaOFdA=!d;C_?OG(7AHTtrEL?JrPDkjNOLRIG2`OVvpz*eOIsFokIVGrBL32U6&JnS{y<u(* -z&w@=nV=>;=vxo5`jvr!TrtP%n=2FW1NkzH!46ra=qatL0`SR%JyGxFjF*i=_NlkS-%nRljyhUHL+?a -r`GpFP{mt&sQ`}$qXWn=`j+A?==(Ozzy;>Q)*$r-=KX$1=Il>%9CygRgv6vlR$2nR<WrTLaUv%5#OB9 -exh11odA-QQ$DOvq}-#&n_SES)^;NkyY-x0U0%O>sBY^i-!arVz>#eTi>7x0vt=UeXB=SLqyseSYpvi -OY|VEu(XjWI!*aBKM7WQs58gK}Z`rKby#k)4E^C(K8QU?K_zZ0$8qmTb={|%x%xCdwcr*M5unQuxZ~6 -p&*kTE4boR%g8;D&if`#ZsbJ{NvEb%($`GDzEuJCWb-Bdf0}!*Za1;CTlk(|(f2y%C8xe42}BS%>5eF -b5JCbG^y?3cZM$vPcDt&p-|>B8xXLyg(2|AbnopWjZLW9CU}mlq?~iC~3nBG(mJ(ph`YmGL5@W5O2v( -i#dd>txYDN|#+%u$F`vZ(Q45E|Sepp{B!8rvU_2+XU4(IrGIzE$TB4CXVq=&?C%P1sogGG|3y|c_$0M -VewV7TzNq7h}WeD?IX(nghMu+*)oj%Wh=JfZhjE{p+^5^<6VJ(_rynRZUa9UF)WbuJ$1*bBmt7&vElJ -tI=F6twN<q)~@Toa+ApSHk}zuJpUB{>YW^Pq-3G5(tXo6d0I6XojR|0>_X~TL|z1WNlV5LNZ|7g(ZOe -Ecwx>O@d?%n5IrPZ$Ka(@p)b;2j|i#Nbg`P$J(?lQWmI?F<bvtzKzdN447*{wnl;k0kn*uel<8lfMiy -(IU9g}aRwx!(rq{g$wA8%MFOQ<cFSF@ylJINE74omys|u!1>|U5FtAO;!D>LOdb)XICtK(GZ@H2nfNt -uT`hhFG4*K(8of{QH*wY^yrM?jp=<o0(Kun;|nTheIc+$p|{tiz9tAT#clZ=0B0RwTIU3za*F_xQlkG -*1HvMQ8hm1>e)Ltgv2LJgIkVYS&W=}s%rho!Br=R5b;K;x7Q)#fsn7Z`p-axNd7JumHp^fErwc1K@1r -FQ2VMeg0uv2QaPE{>yNl0;BR&0(A<>KH@_#TSXFKlb@n_3tI(A)fbm#!aZZfW4|%u@HC#peIHMw~`%y -HXoXf-O813pq+_*N$19KXeiK3dtb?LWz>%p>!Y?>Ns=I>Eo&UH<n8GU%Ix<2D@b23e$w%dduK)=U%*X -ZHNQcpS0L^yQ^d2f)M>&uO@x0xrAV&!D3u~&y_|NH8L6?B1Ssm9hF#|9hm|E1MD!mZ7V#e;*6*(RBVv -70ek1V}s1TY$FqB+jizP6cVlWi>R4!uEtzLlz6vtSgc(aCRz(FhD=2Ny_CNu}Qm8<~9e2Q4>rE4Swq# -S4vMy)W1Y;LR{dfXr@j)Jx-db7#GQ-EhHEUqs_{Axx9D0b(YY6SwI6in-2Ah(WUTb`W-6*T~~<YwHmx -qG2F_?2y_xS|(R0z3m=U0cg(!GQIlDL9$_tqkL*h&9Re7|)L^>v;Q<*3SQR#IpZ?g;@6Q5X*b#irFTI -;rzUs#4!tbLm71Ugws=~nB+jpV>kw}b4H(6G0)&ay?T5?z2C1YS}u^S#PlOe2!}mCNK$i>*6RA`K(@= -Rymz%1p=4a$eCr-N4L>N^g=v+Hxfm;#Yi4b9ASHhMUBq%Z@0dPwi&c*gE5NJ;wff+}sCHie8^od{5k9 -ko2(jw!r9_Wbf8It9PQ;b!50x$DNZveFS}8o4ya*aHL!CK3T+TZC7BHROZ(W>>EHO|AyXW)EsL<HXGa -||K1lEq~IJfk*KEBrYi!<}HZYDurSH!dTi|lzk<gP#XjriyN2#V&Ce5>b=AieZ)X#GMqKs3x;>YptK{ -@f+sTm^nQ{RjP6jA2&lijWvf(+GuPIEi8yjj`KgABmHnrlgQ<2sz0>&3)x4E4DBs=rAt{P_F~^u?$qq -*iE#b_#Cv-O`CNkPaht9BmyucBR~ZXApu8XGf>}Sm~H5|*!n6{fJfP{v|}*>oB=x1iLJ-{!!tVFs(B@ -7O<>q<AejK5g>9ZyK%-|nX9dG`H7E+CbU^0=zI6_iU_5cXTgv<s`+cWo4tfUAZyGli7v`nPrn};0U7t -FkhErJloQeT`REA{F(2t5TC)IH7lgxeXhunh}$S!tyISI*rlMa(uGO7Qivkz@T`*P4Hq4Zr3B#(XRL! -V8c0#;vV!}HOj=WKoGn-bWUV-Pq9mhzvj1o}bp|I?NHdo@?+$Duymwx)t1+R;wPmLS@^BN;01IFmWwu -nNBK8wHu#=Yil})rqFw`~zC!{dX=`yZ!+yXsEr5nzfhvggJs!BX!z|hX}LrH1M?jIlGk?O*EV3EfePD -P#^V*g;qek*ed>Dm0o;?HPhes*6qk6)E#fi46P^1!thQPLcTpW&v8F%SGJ4X5PrbqC3&z=<K#Z3R1#y -)`2M7yZ<5w_$K-KP_2ZNX@8)@+DoHz*c^Ht#G+o0rDb$bT9KXGzXNpjZhn0WHE7RJateCV39VIO@@0* -b<Fk5Yg1DPSbgy1L!`;TJ9*CTxM!_z+ZqlN1{h?cGQEy9h&(d4NrC+<YSmHu}8zE7{W)a>?Fb5CIjo7 -#}PH=)MVb$O&~m}r}0NZcVxp7aAMcd8vdU8~Of>`A3u<<N8%r;?|sul;+zU*&TVYENCfXjww8@9ydF3 -ex$O0C|$tWMX0r^)V_s|8;(dNW=^8IJPkE9Ljn-4e4<bog0B(*??+XxHufEwCr4)mmd@qdWghFVSc0z -re5REDRJC0Oxp?T-0I;iQ;upXZWlc&fhqTtP$tQ3DG$S|^dptR9Z0-4zD7pWq#^l@cL)Q~WZ}`ghjKu -~G)oP>mBKTTsdSmhM-jgC=lyGxABuLshu!G_byD0n=Hs5<ROK?S)ETLw)YM!rO<sI9W|Q9)H8ruaPYZ -O&qZ&K%%T*7)s<}d++A=FzPl`wKaSauA#CqjKhx4+NF~KH(8US3Nr)j^7q}x|;%079lK>KX0hV#|*{{ -2+M&suc9oB+Iw!>OCr9lTB?q$Nf(3Bv}yJI``%8C+5!=BcTboJ&u-9qCirx3ZTSH9wxnM_)F(<uOTEc -~>a%;1tMX!U%b|%n_=KcXdG8(*;6GD%z>cRPr@B>{a|+ty>Fg<d1UQsm}tNMp0ZAB{jb<b*qSXr@e~L -g+wqsBGSe%Adb15<ogwsy|=dn4)d_Mp1cuC5wZ`WNFUc&?Su*!%jR}zZ-cx)RVhNTvJ&ct_nmhk*OB1 -Gw%utyGS>U0HABzbc|scwgWq4ARxEbHLK94xE0>ZYLbN%>ul#=QV<Wg1I}P$Yb+lc^^Y5CE&QHG3R0n -s5DNVCvR~8c?7f~<_OdJ?0x10srDBhTbWtsexHN)IPRG|-YXP)uvE56_D9Uo<UQ{(g?a8|1vgrYi(Xk -t=+bQ!hFAf0>)h3)5k%22Yxq$h;m`N&DxmN~tg=n-D&eRGgFgqUfOnh<B;t$^_P#ci4~Vbk;L)r=Nd@ -{iW<$51f_$Xjqp5ox4<@1A>`pk-gyI%6M6x6|xdokyVMGwyt~ZM+=G4ovV~SX0B|lU@)UxdKXX<MW=a -1Q`YSwR=YG26k?{ZeDV@vo1RGa{bdi*Qt}O2#!i#p87NAyzD(XQdn>ywDf)-9y6w3*h_Wm)==8VPLGm -4?y~#L*7h?Ay5<1ir<}R&_+ByMg2(naMhSK7HW~*#dF$o#c5ySZKi{?~{$J1WUGE>f^NsqTKt>f=+0y -#6Ex40!sqz!I`U{tR<yXJF<VRO!5)A%f6iYKWi{Ugy5e!AM3_~)&U>PF_;P3RQi~<RG7LjgoR1U;ji! -HLkHWo%>AQ4pJKto~WDPLWXe_~rJm04NN%7ID*T)p0Mz0JyOfOT>X;<Xe3MMQd2)Xz2*K!gPb$keYw# -DWBaIe-A7!0Q<#!Z5(U%I%df5(vetQR#Zeb!`X*UYOYQVb(BoUCnw`zFAIzPEQuBfZU3Y>pMc$Gl}1Z -h!`jU-h^*+F{N>{G{TGU-Q8NkFhP*v*!(d}Jp5b$T<`s_ak(`xGaLc^aGex*B@NYs;U1>L7i~XjZX`W -$Tqp>R{y|dR@8@8Q5B=5Yi~j1gX{~x3c@+KWLx0skzaE2*qKyIpR#*H{%)ycT@5T!6o+#PFSMMYTLoe -(3TNwE@NIik&`c2>k0x$TN@7g%UFLJ8l=W?phH$7D&)#s&lc7%uCUaYVe#LC8oSDxUEHklHtB%YcBal -3t!%=GOjJm}ntU1*II2a+1EmPEh~cUd{cX<q1^dn?^5`kw7zuh~_6BpNwy@AIU}9*Q0hQL%2A>^v<9W -Ct3VzM_}?Shpk_na*cP{Zk&tis?w&2tz@7OiJ$Bps7X)8vlIE?C|*{yui;NV-4jRQSXd{OdBF~hAfSv -s=B)8iZhuPW{h#Q*KhWafBcKT(p!M&*l|e(Fs%L&s7IK(L^$}^of3+%eQ5;D_POh~^+b^;?@Dpb<I_8 -pohlRWqmDUUb_;4CS6R5^w;Sm<vVn4e6}=kWo+|KAsq2GdH-~23X}6DZ`#U17f9GcK=j|gEX3O$Fo(p -JQCOCO}RCUQ<*9QoWfAACwmQ!>Zzq)m$a`Vo=3!kB%<L5@@1_^#vF<e#g?lM$S<zG(=aebe6@>NM}{^ -Z%`TGI)7w(k27nzUz3JGInnG-8eS?Iz4pU*@5I-pUv5r|0XPa{Z#Z!(^RaI5b;#d{IC5Ww_^+0LsH-x ->v(YnG_2<21_@6l~MT%I4=eN5zhaK%YMfBKV0$y&STUXQsXpBVJPUnM;VHu5Pb9LTcc`{W!Ei${nU{K -j7H}m??xj))tX?wgrqBYuKzE$wpO46i-2Yjs`$JU9|ctfa3^#t9k3wn#%|5DEAFl#HE3I<K-`;cmVNj -J^`KY&S2({$;wTO36lel^TPb3*+Cw%Oo)TmLK{k;Do5~uwgNnvB>Ie*+Q?NUv8E7V1Hzsg73a~xTz*W -rVA(*Fs8Rw%(<x%{hl+q;LsU@t-5k`Ja2mP0EJ_vu0^U}wJ_aAWHyZ+a4ejoftIB!Wh9-l<u1ke!C{c -wGxZxV|~+TN>us}oe})=XFwN<UwcoBDJ!W_?uwf{(D+`t)QhmW0$gs_0^A%y~YS!h9Lq@s(!&a%r^by -z5FlXk7O`onYt6vT>5LPZ65Byt3OteI|bu=NX%GVjMCb_MO~|L}!(K^42i;b^C>v{eKnb1MGhn=ba$_ -{}AVw`Ymg1Bt&g+F};|J_YZwKnWy)$O>M8IEAkqdY-D)M{lZcL2QBao>75~DBi)7h)&V!Umf3WDGq!U -X=I+SRjyiIhec1QcJ?@uBGVCaGukofms3~+V4J0{R?V+yhaEF{c#0dX9&R@<KAl?1V8o|OD;sc0f5`g -xXpZ}kK9NO&XVfVj$@i)x>cNhL>$be!jic$#1pcIY~EQ1gzO0NIWG>Nbzjp8JR|3ct{MuBlXm4Mj;bg -K&|6oBvI>u3ZR!`f=nzoPdvVA**A{1Miz1KGx<fCobXia;yf26~MYs3c<uNV0-)sRHaI#jgaz5p<LGz -yWWk=}mDB1A7LTzE3yD2z1i}N5OUi{(ysw@49DY)R!s~*sUlKa)2#|1ZDS?|AWHRx<`<|7x(}bpwqYh -K3gaR@07f8EW40aHR-%?e=+Yrz`pree_v$q{#V#H9l2=}AJkgx9#}5K3o)xTcl|oer1(w;ov>z86aT? -yK{SY?@D+G7^j|g$V6vV24*qQn+760`_gDD$>YprP17qI5x!@c8U!Csji|PWeLg~$T8E!nO-*zNaO2W -L`gv5pK?Gw1SDSq=+RgPcW6QEz(Cm4I_o-s~?3JHEOg`-^_5u=aWT%SukL%sKyH;U>)batS3=9?<8Aw -HPP>DjkTq94&$-mA26_E?{mg$lhH(n2dprdhIN+n0vv?6XM-dIurz;QsE0x+Prn=A-fbK%;?K1k0C6< -sYEl*gH<ZpB`_z)%Q>8ARJtXCxk=E?;n4ug!G+z0`y^@aOMoz7YtialRK)AyEl_IzKDhE`?yl#JmTtZ ->Ag|Usakg$<kocYe5}`ZY(x54t_nMGTK@u1PhwqmDej}!d{^a@dou5q^1eIgMAxmu%&Bf3_ZM|^ZqnY -oHM>bBATc_LwLp3c{w_tn2z~A^OrHJ#K90)~2uuA(i1#P1{S@$iy6y+OLs=knOJOukkPJ&BplU=QE6$ -NPi;>LAcuDfpbOtbS-YjT9k$IC;EHO~=P6>b%V0w!Hz6T)pP<|7m{R!_98We_BJXy&knFDG|Z_{AwuY -7Bl2AZ^69X<JIa^A}4D}LhSuPWX&V5lGT6d{2s<a+UnYhdPd6RrhKISg18TL9)tvw%KhDM-E`o8vW_1 -8}4^0bFX!uVkBUQ?jn_w|KWdf#L{4{R{7`8&YUBRSw<5co!<(zOBpWJ<Z3TWj_8K=6PKG74slP`WO6s -XDEmm;uZT!eVw=eQ30=4s_RMU_Z4vHD8}F*V$=p|dOjJ}{PC}>3i@nWe|A-W!5~3+BbKKYj-12gd^;D -Vffg=9AEX_W)S;<A%NBpYB#+>hq2dq0ex1f}j<BlIUdp96>)XA%UV6RNo3R*YxyRd%GdpXR5eO4@>VA -CroQKgmeD?TcPbdfCPDs)D3_B;84ByX|5S=32O;>$Kj|XPB``%5|^8Mr7LDRX<%;QoTQJ#%UQNu#f56 -g?q)jrZojmH{nB3vV~?v*B8ESu_gIes>x-dD9de=?v>#yrYnD7x;LmDS~}L|L%d*Nco1#5qdd=Gaef1 -wpB-3l5^?><1%#3kAcxbA@z7sP$1eQ@A54KAj`X_w8xq_UbXF8I(7bkO8Jar2^NH*#=@BT}qz6JZ|G; -Md{n3tUJ^j3QJR6<Ry#T%@;(=q+Wco*YR>QFzztCgK1=1c-)t^u}>zgw-itG*@qVu5toQFbb1!}`vse -{xioq9=!xCFX6Z}C8yBW{v$^iXm*9mS+>&Z_{5q+p7nLjs+<K$5-(@+ZkK^*DQihoAzUj_Yt-B88H0v -jDn6&Bi_K#s~PH8t2cOyPb_uXDg)0cvIX)mkl7(v<+!?1fFvoZ=*orH}OVWq{z@(`@H;FaACtQuWqs~ -X!m#~WRy-8#C!v~$+&Q*|t$=pI<_p_(qrXmV*7Hf(t;!L*@qxK7!fH~ro5-b=pC@3Pb28-kyP%pf|ha -th6>r9;E{?wIMrkg!P}PP9dRHAwhGG1>QwjP_34b1pqKL%YP%M##GuyB?8#A?5LT;Prh~7W$#dSr%?j -bSMM%p<>8jKQg;Mx(bY}U+PMgacdSWHKx@Oi4iQ5Dz%y?NRAH0ow+ISWBvN7F}3UsNqC<47vrpt*R7Q -KGu@x*_tCtsaUwPzWZ`waRORuN=j4%AAnQ2TW`fa{TOFHr#^z>3ro8vNq(8;yEVlQ%=$bFtOubOw#&4 -kW{4F*t*85Hn>3hf|Ug}P?hmJ3s{Vq9`o^UvL<<a0X_GM|zLkZ6|JMAw1%YNPvk>Hp5uEy#M$Le9Z+m -Is-GXHjJ+LKA%r0N^_c#-v<VAmzb-s>649{eJ*Hok;B&MuV>r$Yy`)EeZy4C``*xLn(t0mI);D~2?~B ->U;Ex^cT_yy8%fkgChZB|W;iCE`xS%BKH}eO7$y^%_g%&IrNQu_d{}!rk~p#Av#En4WYRyG4A8L3l~7 -uf3bs^_@r`><)ngnzmZ^V9d<nP!V*pgF0#$X%a3ygW+GY`Z&DtR`4-S#`~!=tenRgWPI4SemwCMcg=} -Kh#z%s!7Dftmu7+tKZEll=kLdRbvf(7<$Uw=g<eAUqL+KY6>cZOJRH$k50VG3$YdtxrzWy|#vM^S+(Q -rl;03R#$_d#E&+kVwH0tt@4osKP>8Y1w!IA2A;+bJ;ustQ;o)U?{p<~>hPS*+=bRWy2lfu3FI2ZLE=| -ZN`F|~VeC^<3f7cG^ByUuhzdw(a!NQ((!z@~B9{b`Z~$WC%;o8`M%_;1I4B2~XT_bZ9|!+Ae2Cx&5g9 -7ib>NIqgDO0U!jC)baHq)41#a0X*B^waj{HEaV(Gh%ZAz(4~_f`Bf)m95~^7OW9p{#vYb2K$^kA)wa= -xbdy5g#nzX-1yc?kyiReZOR<$2`e-EsNrN8i0}yP*IJNkc(^slfFvWenO?17EV416mFod%>=bk(QYpw -2QZ%^x8to#RdN+xJAo0Vw8NoKyHUyXutlW^=x*C(;YC-NDkRe>Yg^CV$AgtZ`t<J)#F;EXdC7T>}+^0 -TMkmda`Fq5{<x-Y^P8$od@(Ct!qQeyDuuN`>~h{d2>-goJ3CjT%lzy5v{*VDeENq{B&aIEIo&&Zn#BD -gO!N&T>n`goD=dU4i>aKAAlC=Q!fs(e#EbN`ZS@{z+Jl!qU9GG381z3mpA!yV(8wEabzm&lT<`c!KfM -~BDmAd6Ugo}>)U`pau~eeO)susvveICt-O7ZU!2j88r1P3Nf%2(DmUkHHaskCtGV=Bc{Sv-x6OmU(+O -_@<9%x-`-vhm!r`c4O2q(;XQ~mcGAS<(?(ueiBEHRECE$o0*5Z7i>{k<sy@}PQ4oxiadqq4NegV73ew -}uh{(RgJB5`bDSD6H7?n*M;7T3#wQ)sr#|jVcOYIQKiYe8*Cj^nWP+i4B=p43Nv+%1N*onF5^YwL*I- -uJSC<pnSMnk1qe*DIqnji!*S%dwD+dCvN2ei&EZ>t*#?NwuD&69hS%i~afhgs1Wqu~%A@}&M9XkSl%c -@Jn*P~`N)Pa_cmWL(q3FGNyv7t#BB=0$>1V?H?r!fm1<%LtI*PN^_k?TH8W2sWotP)2Lv;H|p7c&byo -2!dcZ3Zety?8%+*baYT^xD{`<1?)K{qfc6)%ohMrv$#P)Wy~sI_l?WeTev>@t>V>ZBEWH;klK-w&}A` -F>^sCTYYJWq=tiD9Js_)Ow<flgbi!>czaaEJY(W{@{PS{QfY|sBi}3v6fPxc^K#LO7C-EKG?)TdWr*l --m@?Q>Xsnhxx4=<>a9fXAIahzUx7PDTXpFLZ8xB-l_Li_n_HgB>$8w-}b<uBxD`(x)?Wjl^l+by&{ZF -pR|H=+P-)Ud}w!@U?z4N1Hn)<}9fr&&>0`-FO^>MLonZbT0sraRJ<`op<i`SEYFs+2^--><og3=8#(| -$r$%8?ZOP~&mM`06a_i-h3i{>~i3FdS&%tXX`WogOUO;Lj?!zR`i?qx?qQ-(E7|Im86le)7!5IB<bu= -X<%9E<<<V9%Qq!B^G~D*UNHY>!pgqnMo%rd^0O5$C4};QnE%u==5B!QTH@$Vl)f`b5HP@vKhhIb9l24 -SgM0DlYaP}|L#VSbOy85uJy@JgQ?Mu&m4L>9*gYg%i$b75lh1pUXQ|i$IE@<cEO#Fk-!>v5|uB9G16I -i7u?0lISLW;EPOV<KtmFvyrC*E*|OD<&EBu3I13few0Ns@V(j7Z?p#ktSo6hQ+b5Xs7xD2a)nm(OOhZ -FW=09NSq2k107I7UGg)$N<GUWDLA*v$ZJfnDj2<dJ@!l^tfD*vLYL`r!3#=W|rh8FMHt0xw2)5q1B!_ --m4Ik}FZxhF+tu6Djmcj2YJor)7Kzn`p<5~BLBQq+{`vWr_toAFm?jfooA9>)^o+#98LT4Sks(2#1S_ -a~q5l}1K;+4e=bi`4F=l>R%ozuH@_FVG@P?<;wjW`r_Mo?)N(l2!R4L}FYpZ}%rPo4R8iDh9bH1D==Y -4m)&;-k8oVXj8I<rigQ_bVPR24JVc)GCSCf@HaiF4P(0N{ySr^m=qRrS%Ldv2MbHt(UVDLIekp8go4a -qr`?i<5A9;oHRjLfoqnP((qEuNe>nFSlt}u460JcML*gibP&7uPIJ+_<j39BEq7e*eWs?ZWe40xF8mk -2ugU@oniNG*C0tm&*hRSW4D#1a2OG0nM^X%tFNn4(MB|aeYgMz{&m`o=D!2)~*2RF_(`B*v!JuXEGCL -30kgr&a{FC)Ov1X+Tq4WL%GWv8fZBz~n*E6YmIjjwIFD>mOIBNA}aG6ys8W%1861xa^iQxifc(6zj>w -T#%N<$o_;#sWeVVc&8|{KbFwekK}Ap6y~Rd8M$i`$Nf;V?WEC|0OB{m<aS871@80g<aO)5nws|y$JTP -{_&V0B3th<^n(bta{xX@A0pUO^X*mE7x~c#={uSR0a5IaEWJN}W`y*;)-`^EiE@6IblE5sk<6X31|7S -Dwr<=HYmvG_Yq3M3Wqe$@j;eH7`!J$1e#i&Uj(xtj@qxqLB~|25;3#hm>G&%K*~hr6rYm!ep4iA6H6A -o3zo)H*J7n_S;*Gpc4rU|Og@b)IxeWcPt@AU{GG;l)3+ABo<@%s@*z16v38*T@!{MC$$_Q!ZblD6qqS -#l>#mlM5W7!w723*XE-6i+;4SEffm}FhoQ`h})O58nB3drke7YrTS!N5Gvhshb}$AV%BE$YI_NhVL^G -sChHuQg?eA8PYrJBQ=DByjKOw2?3tXcTiU$*!1WR?my`ry)uDzuxQoO#bm9gZQog!g0BOj9|+2>(3=# -{s;Fz?*9N`#jnRcnmL35sQCYcUjN10eg(RJd&?h2FG!X|F^a(vhFYn@8UbPiMgVOPWc>+f6+|flCFnI -m#1Qh+j*%5#fW9;WihL_FmD`XNkRHPU`rw<|H9><gZ~cEld_L~Vf~bq!M$CW{0Jh=M*1NHyYq}{|V_R -_&+k_M|7DR=`3S#W9Is;4K@|JE+$LlTdt)Tf~)4rk}C=t?|MhFNgfgpB~Y<|Ss*jR~zZWA#1R)A%LQY -8hNPgcZCw($1%@V93G{ITDx+<no<_irb@G^hAbKF@kN`|{BmNJ+FmH&{By+|T;du3>K}G5|!1G@bbLH -dNV7nq`lRz8Nn`{s09^(5^o?JHDzMB<bZZ#H@H+`f*b4?bnmOp7XWgW5v}MsNaKvAM{<tZ?6XqdcxJ} -AbpWo6uxWx*sI<)R`LF3H1Gz_O^^wU=Dhp^WIb>Y=y87>GY&HMvnco)v05N|zJ<WEAwzaZKI2HO4Cgx -Szd8`i{CBGf1ZUxSy)j;fgG}=DRaw&6&Vja*zRtBt$7ZuGsHK}Be6xJY9e1VSVZOvJ|3!{+`Zg^Bt?v -tD`p<c7{8GW>ljQ#8Gz#i~t29KPTQz2N&t}nLq7uoJo^u_`^j=35O5!5sjf;g8EZv2&@$OEc0zWU$rB -wV^B=p$~y=ppwFJY(M35-2T<4hM_<XM@ah=eWAdjE*$IF}G>-L;Co7-y|$D^rd-v(nirXCS(s6uQu~f -L*X1T#0HRK2$=!SI@=ruaD5YaY^$W*$j5~aBQ(9;S5K4hLdNmbG8XX&+vw$Z~epu`GblR!FmKYBQ-)R -)8FciTM+b6^zw2&zG;L_;3tvqIKF2dc9GwNVy{EZF2_fAKWOQxofdRQ=O^-%E0+08ojxGLIN+(UC(V_ -<avWJH<j#&u$w}si`!<<WhNky(N)1zAG}qxv3&qmp!9QgDv2$nYBKgt5yu#KF^N*$>U6NDYirvKRZn? -G42tN?eyVYFca>+(B?S%YHAw+u{FC>mnl9rMwM#c!^1u7;tX_etb^c1ln)sC)IRTFvVO~`=Nomy)>A0 -tF(o-j*g?8GLAHrM%emw$!~^R9E*&+Dj-f=C&t>Ha`cgM9bZVBa-}l)4jskWd$K1L@qgU82C@#3@KG8 -aoeW+V{FATNfie6ghvvXL@Jd`0=?vRmT+Ga|+b9vfK~dn2VxyMXft7=plaL$~eYq{c$9Wj_+}8S_V71 -vflI-^YmQdS>&nMgmJe!BnBn!9HMFA++DOs6JjpRKt6UQ(jX@;H11!M`<OAs-XEh@=p$_XX_Q3QkmoB -N*d+}ftv}?~k&{uQLe>!K#}L<Dph2T=dYRqOq(k-Sq)+_d9diCa|4I8`=vyV=aJy&i&Y&3LB^$PV77$ -ysV0v#L62aSy*FEWWxxt5yj9#(&Ucd0SAzN&S$`22%pfWw1`ddow)%5|&3jAuS{%n^jTilKW&fKy6Wh -Y$J9V7X<m0$6L9@9^JK^e%a$K*MtHP#@0_n_~U@8<lCGIu+ca&PxRTPYCy+}XO~hwTJEnikp9UGH_i) -9*OThH%%aVB2t|bB)NN`zFLp&u58u*Dvd!M}(ZWx>r2v+Jsq#OVISBBkpZ)S0>)OxpjrcTYb}C#w?(= -E_Zr(9xmAZ<};_WM+SM<@7Nc*mruv$V9;-ex@ok&%Mn3-?8;K;TNYvmObMzw?u9vs)szwx(!E-Nz9Nu -P8vPlY;@y3Zh&hg3R)Uyn$-xT}j@=8|n9{Wk-Kt^1ZJ)2>(|M$vmVSnfnD1e-x<BJvD)RKRy-VlJG_1 -}kUu_A$2kv%GmNs*9D(0ZTJ^S=ARiwuuJ^6ZfEo$Am7izG_PfrqyTDfh7k+H(|qQ^^Tlz!n`EU8n0Wg -C{VhuDr(@%QU|P0SkZ(fDmX%O}R%O^WYs1l&J0;<<jCQ(oUI2W=NhHCZ=2B9RM4SAAwcxBCUoujR<no -Zeum>lp0WKbIBi&YF42SJ-?;^{!CFT7*Ttmx!Ap-up`w#}s17cLqwcgAyU#TYtmk{(k3AuN`&GIyb;y -FVu`J+#aZscophJwAP1%&*J0h?{ZAg_4U8NG5?d>{)S_I-12*liJ=UM5G=|v7>1E+7>xlza2jPvh6Z& -8YK3HKJ+?AU8l{O(T|5a2H1RSh2ufFamXctswxmIH&2B$JHy6x;22}*=bCSty&BDnhhr34Nz>I3sI7z -m~w_+ol)MoQZZ=ra(MaS!1nP2M9(LiWmT^mD!k_TOaeh+*rT438~%z77mTV76sWv}u2%8&^bR2)idGh -rb>X9v1@UJ>QioW_7WLYDj!{k<7+w<Xyh-$<r<jZgVosl4_3a2yEIkJB5f7KcMG{n3p0?+{GD9ihKNF -af`W{uIId5C;DP!35qe(9x@YBA7M?j{O;e3HT-ScL*jp2l_h%bLE$N2sHKOzmb07IM=)hH+Y`8LS<i1 -j+yTIv0Ayu)rPd}t%tE<)cR!&k8h&Z>DWZsxhLyE%O+=Mn6gnxc>*czaJCYX3g4$|-5ySz<`J<5mErs -0c^W4?RZ2Jwol9PL;zIXaD})M+qfSq2_(7|;Y0^*X_R!Wb{gEQ5*L6?(JLkj1Va{rroaIyh^ezRG^3F -vI?YHIs*m7s>1jvXEyItnoQf=jCgFN|bm~=JX=r8;v{~)>meeEVD&q17oN~34@;{r=3LB~TlkX^YY>w -t6Z>*<bOz1wMbF1k}^Qj1*sml~!ZIwV5wQsCewcyNz2JkC$P7Iu$0zqCz=9quVkK8uLS?V8@FnLXWbt -m8OydSBiB40h)0f$~nzM8f|x)_-&I6YjU$tG#5&aJjb|k_sF^WmghR<EsYD(htS0|A%1y&;QXq@#j{% -zk9E*sQ&No^W!ifM$jyV;RwwlEQ6v9`YCj;7|JHVPOB_8RnH7mSBV^i@hfN}Tj>`kx8R@sCq{h=-Pxu -rlQAGaKogt076}Ap5)6!!kmc41hk{NxAc3{HG6OYs<e&JjWY&QL0|^#`ZPR}%AQM|=6U@2Ln+iM$`s^ -?qES}i<_kd<84YIK7$@Df3i4)*W<ptPRR*+u-e7zwFB)@)}A1Fb704u&ix5}A&=7@-_43q88fu_j$oU -uo~p*8fOiqNf8(w`3BplkLV|7dwG|8=6oD^_GWh3I=lCriJ~Mj+WQ!_C(4-u@ciliqhOeqxHDLmrad* -Z%#Fda@(h-uF^j5@;=s=i^(#zM4H4o9X<QV>O@ugua?DN{u0Wn|sM19|=ScLB4GcKHj|7&0%Hgyyz{& -x`Q~9UQ4YZ_+P=a_}&T;vN3i@qu}*1cF>IJmvIyuk=}pCZ43Hpw?#0`;+ENjpBv`k3w(Gq5p%$(*xq@ -*Om>zS33M~Oul&$@g3?FtkTyNy2?;lGd|}A58i#o$h&{Pa{9Se%`$+c>+KeF2bMOq5T@|_2%Mo{cERu -d_zHJdjCGE{Y&9i9BHerZ)aOI3}l&N1os3>N`E0e>=E6ZVzDyPpvz)5>Dkp||XjS{-R{6fEBLx#NaR- -UYU*WD8N7_A#|%o|g*=R%&^-4zRiMbah;Zd7Y@7YQa>L}IafiB6Zth8^u`h}}I5<xng1VMGy^4VvqT3 -F{#?;TMGo7^>zS<@K!eyvVn<tF?nnGB4t?58;uMWQ~TH@!C2&*tvL(I3MAH@MSnqjB~S~JvLfCPg%ED -UX9OjF=UtaPFVJA@*$4&;K7Y10i96_NobNUn@r7p#||<ykwU2wZi?`TYgVGC;o`!_xDbM|f1t%~Paow ->SLoQ7@u`61z|uN;ukBqv+$$Wb5r<wRkwEba&VgCtW)t%oAMENKCMOO_%ZIby_d0W~jaMu61GK|AI!o -@)Vu@R3ehRqNM=wozER=ve2h%Uxr~P28-V_i=Ut<SU+znDa2+so}q%CehNWfO(LuSldcc3n(;830NXu -@IjZI&{3L@v$XuGHq~_{b$E=0JsoQMtd>^P>6#`LrRAZO!%Lekp2v?`_@VXr%G02{~Pv`T;xmxr=io$ -R>f8_Ha--SeE_ZwgvsLqsq2lT63IL$xXOik$uQK*2jf;QkUm1HdG7xyovpfDD>gBC1%{kI1n$UGW+Z} -EU62{o!NHoap4z1h>uK+qVABmq1z5u|4rUVe|;REw?#A2JGscy8mAvFsjW|OzeY@m#X<Yy6NzE*!79q -jyO(vAw8#>ajovU>k@ofDo=d^*#vXl?e<A(-PF@z7z3Tg^Y}ThZhuA2MM#ja?K@Be!drd->e1?Rn;P6 -Wc+h)MkxreES^FlumM$W%sR*-or@~rixwhxdWhi5ijkUd&Igl4A3(2~sy3^&*7sWQ73<J>teZ7xI}c& -kXb90%k`$kRL<X5LCW$h>p%^BjjAfuU3H=`bQR(E)1~?>S_5MT^ukgVeT|Pc_R3%_(xF!;A@Vr|jw1@ -mfIVC!s#EVAQl1?9$Q8I#-HHaaKC*bc<R7*)mCSnA;#EFYPrp5!)e_R(s{ct=Z{%30=6Ry6l*%H|$Rq -`t+^r=2^mUWn<~M?^68QTRS6!?^>-Q;^-JR=^l$U@1t4t91TB!+SlcDDEd~Lt{Mg_w~VjC*Gh55agFL -V+q*u`8F3t1B{0NJ&{}+txsv#P!0?nx{8NOmqmZ>>q$5J#8n#g!UlN<Qz5yftiUX)K3YHSFbzIFnC!G -=26wB5Tr+C^M>gfQ(5PEvtN`-r6s9#Y>7(Ub2+^P=+`Z%$=wZBopv|^HFMi+n4c4qJt?#laV--|=c=t -+`8Ualg>5xx3Ol%9#BgHkYSkm&Jr{tH77zhFUMO|JwF{jadIzjVLfFtqRP^`jUdK~NNp6D)?T(Kd-uB ->EXkTcc0{-`uk{RncM_Kv<6u85m<oQozsfEvBVG0r_(^Ee5z?VcR%GT5k1}O{y<LfECvoCV!M|GJ1>R -DKM;n<bY)n=&!0cG$2)JzHzlpdt!~5GXm6>z!-44alHhT)`5%{118p(&4+6xi665P7_-T3l_1JrIpex -MBHb3TvQPB40k#Rc)KcnSEbVy8Z}gEkyY%z>As;Z~W607E@ig?GGqirv?62|hqW*h^_MLIoN`2;!fiM -XJWDGji9BO#}Vtxz+6JQ|B6u%vt;-C5s-G=*a_Tlb9%Ko^w5%&0<J|LOlPLoE)*+!Vx8Vvi6K+G$f>A -qIM56!WO@nA_JhlGGxY8s+wdTZ)9a=H{FzD$gLC6?0fGz8si7qaUoV2PurAjn)~8sVT%Gh(eEf1#KOl -V?}G-YLE{t<J${?aJ#1X(zO8nKw|*v%RG2chYRfH1?O9@6OSP8+j$hA&p(;u?_8)6XnBVPj%S2#F>$< -`4CyG>dl=7`TCa@uOCy|vSOAyJqfhSRPQuip~lDYwv+jj{{Cxa^q<4o`x?zQT+IcMe_&xfeL?K|H6LG ->g6$nyldf-MUy0hy=vJ;h56a{6vJs*S(1SMOdfy)NJ8?eD(<B({{T>TqLTQ1-_hIlTH%bG$KKsVIbYv -+!KL)keHJ(;XrO+Ltza3I(yoa6}=rN5HNA~*XF_TvX?x$oRKs8=EsE4Ec{nh{Ad`~f*gBSk<lmFo@z9 -Qpim;X2}hLaRVgI*pQB^aDt(U3(LeEl;@;5g0T7(*eSiVYH*+%mg)SFEV`(d&$Df$NGk%;rMBLQTnnK -#~32D-0;-Y`O$=3Se~wp*3n<gWnb8R-no@b1-0HSZr-KI4G&FK`(~>lloN<TjHQoh$=UM!U9a7Aqn_1 -$bnLu<yQhSn)yf2T!OSIy`?GfVw2%X!P{XsDV+6W0R9<hp<Y3CU29VORk1-k2-${MN&Z#7r$WB(t)A} ->pW8zFKerr<-gl`p;XLK`HBjAaV>)X@=me_o`X|*!_P*otd=NMX$U{{%*k8ZPI~vAbQZ*ot;9&C@-}e -1?k_lg-kpzZ?rpLXZHJY7|=r$~iY%Yd1NF#2?rr;;3g!L=--GuJlP<(X{xqhd5*KECe;0977yZ(_6B> -!v&f$vJJ>juv0yVRj5@{ZtMK~nRp$KrRH&cD<#y)q#|$4}7g1l2;=lAQ$I5zq1|<>_62#9fv1R`Tb(l -*K-tkhqBJx|t-#A(TaYXt8)A;Ny-vL47AKPPMqb*H!QFfjb=`RzvnqUpVf>Gj?RjSJNptiWARjE`!TE -dR6Lv3E25OF(wI-Ox~)((Tb<8W^X6fMZ?y@tE(Gc-DbxdVs5B+@i3X=qns=)o1Mc$uNIUSt)vsr4wMY -EEL$hVyr_J&=*)b$-h<=C=sZr_@maV$)>taKwO1!6O!YQ|Cbr=HqL#Lq^+eM^<j$abSCi}MG!$IPUL6 -(g<vzREIQcRL(3~kOmW?8zQx~u1b-UD|q2o81MS>^cJ)qVoHP)sdOoMb4!FJjEw$m@p=(ut}=T4{EiT -I4VL$xBLXeUIfG$E`VTjQ>v0TpRbfT-O{Os{bPUktu79kmKl{3%@7^Jy5!^<Vw&c-Kb3mW$7wU%q>Jl -hVLjl(^re$^(YFdY76WBJ3YV++#%_zM1~K46PaOvsXm<Xz1nboqauD6%*24lw9)zic@b?z|5dMna~?+ -=k)6IsNg+n*R5oI#|ALf-MkRRW*&cu=;1Y_JPAv+HI!v_LR#zSaHD-U#xiQ5+Ks|<<SNc!cX^@;sg=J -kMb3_Rrzxy)S)3qvv+P*zBfC5Fisa?xnTl@#74soZ@1RgVE03a~u(Z9yC|5oh4Veu3PK}5)#^~{-&+` -u*(?2#r?;(1J8`uG<=4*W=*v!`-S$N%rG51M5`XfI5F_?wEM6<u_nD*~lfAH+`0BaY_x)INJh8+&AbD -XR&Iqe82b_D8P%W>$J_mxaFN)_;;$vuL6-HZE?AdS4c&*(9;)goH<`&g<nAtqJHkR)7dE>JS*lf6d8t -yihJab2>#GfaNT)K4302R9pY<cv0!Dr+}1csAIDTtB=Q#ojFHMbqR9+F>FF2d%7CJ$yhOzAAF<a=5L# -l6}4PJv(0Epy(-c&kUC-Zwuv2QZQo5$GyhH9>YKpJ)ZKX<Be+ZhVPvrU5F>cmL`$tFdhxl?)|E~#HqO -vAsW($`A9e?EPFZoratViN65X;ertsE`2-)!BpQXqFU*UWD%Moq<V+9-=k4%T>c=bO*vF9I_+8GWuxU -7plACwP!p?KFe&^?fGD6HcQ^%=5UUQ|4dO;R2c8gAD-Jw<ntjNN0UuIG@Q9q58^47`r^8oF-$V^=`ew -=&adFnzj+#MND;x2|1wFYuJ*3m8q%rhZQ?}$7VM6GxD+obvHqr(o)8+x~;J3r=`2$ov07g`wDl6V|fE -W6|3gC{iD^UGqu=u)jREog3osUG>ubB7;xC~dP)5xirClHLV-6MSy*_Egv7h9<lwH99_avAWzz-;}3I -={F5dDhV$jv|?#JSvu<RjY08)yCZa1zhoD`$g1!rQSW`a?N0K=@@B$yt<u#pGuDjfVw_)IEi{%TbIaQ -f!?<`a&=aQKnJ~S&@$k0@820xG*q^z@zad~h2tAYQgS;{@ioq#_W?39TS&~9YhQLt_M-dhwNeuloJSB -@wV2}bmgk%ZgJW%juHf1Ul6i-1NHs4HJfxP?YJ=WWZ8AE|nfY;aNHodYXFe*=j!LM?Q3;}c6^ra94<o -H*@l>Ew5gQUTWuB&44%@U0U!}mA~Zn1K_FQSO~KeG>U!maqbM$aj=HG1QlyV<5j2#6RCipXnp%WSgHA -Z-0@lcAsj%8-0(GPHF*JCvdQm@H~9@2~Qkb~Ngb`Xv6(J=TAjdjaYN{RQr|{LH-!@4P@p@H6*1FYB>C -#k~Oag8mNo0@Mro#=Yv#b*sMVm8iIWR^_9Q73eDvW)7|!*I{|+aK24`pvLH>M{34*oyyx^7N)N(rcWP -rz}RigEs{S=23s0ZKTE^I?eVVK@hj?TJ7{<9oR=tQaG?}3f6&-#fs=CqtHjf{{Ux+yVdXDKplF}yl^j -(K>VrMZkD_y~STk*Q&oew9P+f3-Ib!|OI5q^{>(9B2Z+a#Cg9+Jk_sCUWymmQq!)E*VMr<~6-R^plnu -LQ`!axWwFkKmuL^K0~g+re_a_(KP&&FZqjM1o2OD_iI>_?_OX;m8M;@%fqwkl~JBJi5%hLb*?UP?W|4 -ceID<NZF^$F5>gvu3A%o4WgdP)h>@6aWAK2ml;P_EyM7nV-r8006fT000{R003}la4%nWWo~3|axY_L -a&&2CX)j}Ma%C=XdF@wSYuq>#efO^r(}#FqVkmv+5=bG0!UpzZC|S0!6jx(k&nS^4Bgr#yANIHJy^{P -f&SXjQu-%0<rSa(F=<1$(&zV^)7D)ldiArQmm;5<ANpiarmesm!B`^c7HOex#116MpTuSbQR!r(5yy% -J*oRG2xYNibn&ay%)2g=zjS>QRMZnSaCb~Z^8QPE4b2V-%2E>xx2hf9{eTd}uqmlsLG@TrWhS=c7UCN -p4lYYMP&jB%S+Lc)sC|2FK&udl8@e!9)CZ$Gn3_KQ|<G`zmL{jneS6D3saumc0>lAV8G)|m@GPR|?Wl -YsxM6x*GX9dlre*wC4q*0BSy16PhYjX08b3?7`}g%fJ)b477Y(1gMyS&ZKwh`Y~>&!;GX63E#%(ezmo -t__)Ol@pR#T|<AD0EWl3$U}#aQri9wLtLd+XKskjz<CVqR9tupAQJ(KA{oG}rYLc+)W|3<EPwzM=1Ei -Rj_$-KP+O@tT(Uhkf@7MpVJc2c=y__2C>rLlPL8NUE{MC4qbGQ}<LbU!g@Qd%Kv(M<pBu|M-C}}fa5Y -za>u<^m30$=eWyR4Uq2R1fN2$S5mIo?ApG*=G;2Q3BE85Wa5f82L;NnRJu{p9OFw<MHhY%H>PCI8{2T -DK9V`l;N8RM!9TahHLx*_CYC4Sx$SsA-gGc<oiUDrC4CS6l$#}q(GMa;3_DSaG^BivlXFz;IHW?1p|e -SuMf<L*%-C{CKpb9fLg&#~hK<wEIm-DJmLGw9!eafwOa(M7PHcUqQMjrc}@A^-E7Vk<zwTMIL+{syH! -BABv8T|o0&z{=Qiv!N;|w3JXdD2ett84$31aG@tWlRWfUtZa$6xCWaPq&&Xpv0Oz#OTC_@i$*kAz6Vu -mlSP$YEVDZ;6xBt#7!`N1T%LrDa)+vxPEN{@0V*D%V3`aXBY#JIIA~<A<tJn^?t4Yh*pa-<iL?|{p{e -997u*&Cw<HP3zj2B8&ov1;m2!`q=AjXXL;rn_F#+-|^m@mbAVu$Ztz%4(hSq+qV@%C3c*lRzG3FwwU+ -WmB6_mf+F=jwh|9GKeoIslT#|s=|hV<A!p6eJhp#S}2e2&Gd*SOOvykbY<``ry=6#r+0yJ9CD!p6pqB -B<^3lj|C=qe<XLs?a$3o5BhU;jVdcPfT5g!9V=I>}UVm=N8{r6#f^#^ivdsVJ*&JpxS0@%==H`9u{8$ -Xq1==+kAugf#-uZ_pHL7N9)e*u)w3US=JbVqgapcviG3`ByH-8|IJBFioecCzYUrtj_A-#*dNwg%2%( -;Us=_vf;uXKkw|;B=Vgg-B!splmk}rzp!ULORTFtk;*BuaUmrv%zV)gToWg=j`i7+L&2u_F#ALIf4n~ -#-{+p2Ri$3wINo9n)T?~mH=X(Axhz-pDS?j9vAI>HVjM2sp)A&ae?#xd=u0elQ-GE95>lzBIe_2w`mE -7@T^N8h36aEWKy6hRhsYWC9Qgec}Rj|Xp^Sus6DIrmkdMk<uM-Gp~)Wl@4em#n1)Jl@bx>eD8yxy0>p -x(%C<lw2VD;4GmOP6+KxJ&UG(w@x6ecrF6?{aB1SCfCT@&5u)O9KQH00008031s8R@+IJ*2x6`0KF0b -03QGV0B~t=FJE?LZe(wAFJow7a%5$6FJE72ZfSI1UoLQY?N@DY;zkhu&aW6bUqEu)<f@adL|jD@l2|1 -WVQ3UZky-Ep+cUfF?m8Sg-GA?_-!RxTcUP%WrTPo(&dbg`GtYQ^a#H`mW$)G<K;OOU4ZI#)_J>!$!4c -h)#tDp9OhL$IlE^LK--V<UlvwBuk@Nz#B8EBPAZfsqmTVSl3QPmx!B0Y>{aOTUu{B#U52ysaqM)f<D- -erhaXXkmpDKm2Tgs^<Aw0yhkj>G!&*qdX3PeF<_SA|7Fxw_}Hzp7-3j}Tix+j_megTxB+?@SNrNSL}= -bY!KWgcx15}HJt_$7$Q7`8CzErbN4%PpNo9R#~f17JLHyAlzmwL*uO=!S(M%qYZ)F5=Ke52y=|?)Yvv -8AEsQ1drX(s5=-xU7)UB36#=TntEdEC}ijuvyz1CEe4Jb?t7!FJGAItx_x*2WTL-u$Ag~d!Od_4U3ln -@#_rXm-yOljWb`ofdJcd`X%4Xgvkv3};sv@~3q&%Yny^r%sXt+P6$Tgvup+M%%RHy-6~iMi7t!{+Y8V -Q>O!7sO9iSJ$7QltJVIvv#juzGGqL*ELZE*SAvEltWDiQuE#1eRDe!~{%`X&@Y+Hfh9Hmdhsv^{%wet -vd({`1*6z{JCyV-NHO*WbvDlSX49#TxWBVwe_IO-PNoDvV^pG0aTv%vVGzs+Us4Q6$9-A<C4mP~uU2Y -a|beWZ$G#dry(_7<rT_xIBurr?GuAsiZ0nb-?C2R~aQc*SM3Z#GIK<Cm|M{&b25`o8*G)OpqDmjLOu0 -?~OcnIIzL@Gl}mv8op1$(D$JO&sN2eWrLNTw)<!F&8p<ZEHm%cOQX>U=mJvZW&`k<Z8i0ghV2yXXR}s -zvTca7eX+B?^(EzGP5qEA$$Z;}nGhjHc0)o%8!b5fSVE<pxV9`S`As8Ex{>lZjxnrr*6&MZ=xPoFGYa -_9X(T4?h)A+71!tZy8l<Z9&lo)=Jx)K9HRIGt&9IB;ffY=rNlw$LA$z(=GMi4zN7W|@Udq{xVXTorDk -&0C4S4fOnaHxSfODKm4wwRaB_ZWn{aT9sNEjw=#5)T)2R0=<PEy8|CJ0C~PrX#YR=WuCEqzteHIF0== -gk=7>PabNvy$t=>V1x|wm8Sc><?39Q`fu($^c%(VZ&1BHheMS;@s9(YtLz`SmhenVug#HS)x{Oty860 -vku5k-R8b8XF+LjaE_!p#)=gx^H3<-Z0(WBFz;IlmDX;_u^W87!s)USVX#lAROfBt*(vkPxP0Ex@1>T -17-7P>NGQc-;f{>zhuHW}DES?{tm0%|TVWiO<4-OO=Jqn9q1e1Z$?3GxEzZ3=aPKGg{`hXx^X`WI>nw -=l4>MOa1Gp;ZSrhF(b^o6>|HWzZua2AQoXOBE1kBt}&;YL}(CL&eEY6*Kd*@$1je9$2vo38{hJ?9Ryc -BBbB`H_iyCfZGnhS1zr7BOw^s?pWj`ono=u3T&s@OFbw}X}_1?JGtn)09-rRSTYQ;Cx)wDv414#(rZN -E9W$(ld`_b~KR#jzeMPEHVGN;0qR*S=emB#~nVE5mOB>hcKajCwIEHi)UF@#Sn)cmHvTwdFdn?%~r+o -1SUwjN5%uOQM>C|;=<I6lEARc^@gV(KD__M<d4%yk&XGrtMP_ak|g(cs*tX1fgeW+K`ZL$tQxt4O(L~ -2-#1N*DUqCOnQzKq2j+?>f5W(+_^kq217=~0srZlXz`yT4n0i&m%yCfdJ*TyXbqJ5@XL<Swr{ahjm!* -A#g{V(7sKcvvVt-fu{oZZ&>gnzD>)Pjs0LWjH8R=@Rz8nq1%5kyUdxzV{Ep`k<n<LEp8}pFxWlWYO<9 -w&y=xb$nhk@yE%9|MkW*(d!y!6t$rNWOud=X@NHhiMnPDs|XfMoEs;WYj8Tu$#LdpTrYo{J)<x-X5t0 -8mQ<1QY-O00;maO7>QNb5|VwIRF4EdH?_)0001RX>c!Jc4cm4Z*nhVXkl_>WppoMX=gQNa%FKYaCw!T -U5_P2lBVzTSA^7BEl3H3e@Aq0j|4RIl!gYj0F8QYP*IgMsVOR%tfCS7>(`#gqNZ0GM%v{f$vSzChkux -xz4qGcet!46-~Mm==#xJ``F#8A$;Y33{?#YjN1uK1@xN^U#e08u^SkZqAMUm<9`FBl|LWPx?c;|Rcia -8z?Jp1i`~Kz2XYubJfBgB?{qtvU9v-*nFYoVOz1g0}d)~i!`_U(_?%&+UC;xQ!_q&%5KixfU58rQZex -uEJ|L1paUO#{K)7}5o?ES;5*YVHCpB^6lM>M>B`S6&pKYzS?_U7)z_T8_x_@5v3?2)#9`ZXT)!<+4$k -Kf(Oc^=WkZ@&Hg?ZcNZx2L@K_4f4c_1)v&?_T6cK7M%h=JEc!pJSNsyngrh@yfRS<=NxEZC~EM{M+OG -kK21&^zhC0=3)Et*Ec^ryt>98Q}y!xyT@mbzcOpzKi=JKuOGgD^GkH>58JN~KX1>Uz1kk{UfjRV=3^q ->Y|mc3_~79&KL6vxi~H|?<)xory@=t^>o<3gKfZoDhkyS3o9(l^*U{7M&v&ox9%D3L{`}p``{(iD&+e -b!y?TAOJ$t?V#A~mA_{U6rN=LrBI<kHG5Y0Qgf7tHs<L^BC?{|-{<CU$xU*10LYVmf9wSMQ>8~Pus`4 -b;}H#+_6_A*xE@$Dzy|II1*$4Fmn_pfaBhnV~LB^r!@{t{-jeRsG0{QB<upI_ca3-R9VU!Q#a&tH7=_ -4eWCf8GA|!>3O_{QT>`{vqBQGaY}8^~;v-fBY#-@WmFRdVKck&9Bk%Xy7lOJpK5e;}ai#^yITAU;mZf -fBNL>&p-L<tL@V-o^Bs*Uw-)X>n9(7^Vx?_w=chW`sEj2ee(XceRX&Dc8ZzI-<stAnBwoF$sZqLCSTm -Wd3OKubq@WnvAnONgD+ofKRo;UT`cqSyZf-H?OAM*pML%STEmwQum0wE<0Jo=&_8VV-*2xT-rR1#Jl= -=xg!TQW)s0sEvA(xq^v~bF-A0KwJ$v<UFJlS5ijRMK|9v$5>C1<Q$J_0rhu3d->t8;M&+fI9{k_umvT -fgd6|ekP|81Xq{-^&(r}Dd-X!xW1zYR9TzyEyq>Umh@v+rKg*D%nppWXlR?A3n{Cledt*<*C^%g2WwA -LxJV!=GP0zkeBT{2xEOdGpinKltF6Uw(Q2?#0jVzxn0&NBQ8#_{if2|K$9adTiT!@BP!Zzu#+}C0?py -zI|z|WAM@__3cZm=SyX;{d(y*+tK;p-jD00bB&|<fG02Ra360in*Kdynzui`ZR~@0%6r$Z?{0sr@9TS ->Mjs!3{Eg4OiVsG2K6q#Jy}TE{z5B=g{j!hTNWcCR{_r;+_v|}%K^^}Mlgds#yozo5`VE`u$Dg17u>B -BDO$QS0=INiF-rRij<j>>VumAexlaD|A?At#*`RePZPd@tQ>nC4){_WEb<9|7X!9sof!?Q;$E3E3@zj -)LQxmMZ2haY|R$+urU`Cp&V_qJwy;QJrn{62c}eZC{M-qUZt{^HwDpMLT`zy0FrpFVjS?|kPb{Aal># -~we%K5wJ<<F@oxZo@+#xAE6AejJtG=Iz+`c&)4z@7wEbn@4;s*7CL<l~0uYcEcl=dDD*4<3p|8wz}fC -SoiqniYIKn--a>s*AkyRd;BQJx-Esj&T-zhbMfXnZ(ASbw$9PA-Bxc3-HJEF)7#i@JN?*tJh;{}Znwr -i#~J--@xXFU9<v?vm*2*58!he(<cz<zn(g)@=3%yY*}s)|dMnYRX)jl_TWh?vMBn0p?Y4IQ+7I6xJsB -}+Z9fa|>rBSg?(8=)M^0X2xH~;>@yQ(Dd0UqQZzDc5XY{B?&yRS^7CW7pi^V9l(Vfb(u6a22n;1sS%s -v?I&U)}0&x&_Nr%SKV8Z%NVv%fpjixuhgH>NgcgbAAbM!V;{iH}ET2KI2qI>!%I9HTfH-|T}Q@z=Ry5 -5+Z#N4G}fi^a%4@XsUdA%<`h(;NS&?cl)!V>>a57|_{bDfY9n&e4w*eJefYAzte=9&hO#E1WT3XUtcu -Z^?FRtXo;}@_vTtIID&3?=hj}=#Fn^*>^t4Kw|XKt9Zf@t!*p*8E<wBOxoN2_I|US=U|YF(MRL4r=ku -1IisN%-@&3p&s&UUTXdo@HzQ`hw#DF1jg7epyRqH5-^A2n4`HEo#pIP1GqTO8c|`Y5`nI3Z+F;<ZaA9 -nnabZRy47TvGc)s0FJBy8TQ)16!oIRS1hGPA(A9i$@M)U}S-5E&1h*~^hYX>$mSeCGsn1Xm;XRnTW_4 -lkdVS`RBULou!%$aQxjYmT)G5dbf?h)2q>KU`t_ULp=J6pV&?pJ#^Y`5;QZi~KkdqfvzbSq|yF~>5N6 -7w4?v-l8i>25G)?ua&ySl`&RIF4BEu<)7f)_xNMr`;N}x@wHM#`_C49m`IqX>GcrVjss}3mpvGi(jMD -EL3BdM{(1qoz=eI#8|>~*{SjV#=ONsl~|+bpr+nfabAn5jjpnV>F;Fwg^lwuY%iWw4m>OEj(HQ#qS0= -2Yn_<xj0dyTV$a1|4)*bI;FZVphNp<%4!T;{I?mw{cHXf)+g-8WIvaA~ole%YOzbk2C!U27pNuaIr7_ -8|f3Wj-E#9HoA1q!BWJJ5M=2yGNaT9MKO1O{kK<DB1(<etmvF;d3;gdKCc4K2(&B=n|Q6?7euBkQWq3 -yA5GddU}U||_wFU~aYnw2M<%mb6$82D}*nC_0Jh^G><F$G4mu6FAl{;aZHV)82SrLkHupy-y4*(Q&Uj -l^TZ*j>vbc3CV-7@*@iSZ<tq$^F*ayoqjUx`YM1Q;+e*!Wtml_v}1cBeccy4`!Nxs-N8A`R7UasD``T -Z*A1*Z{uYGaO~1>1J!BK`RF^HM%>}Rxp$gez9oJe-F;z%3FFzXeH`OueqHfcfMdm!jd((sLUg)>&j{B -$=sE3TriJ)AVn)It5wv0j<DZQmKI>{XAQ`h9kE2^h)%oD?cyK@P1(V235MQ{9b?_|qN|-V;auUXMSJA -O`WV?Oe!>{YF=~0hajTsSdO#B~jCBz>r6hjIF!u+c<XD=}xJWxz&jJ2j;@8FUd-HHJTaPYNQ@>;&%AF -*y{biW*|V0CG+xEL&d#fu6QSj%<hzUYBVqDkg~NFErSor-xZmTa+P6Dwpvn=Xeq9|0o<5+jVB7yOfei -D-gHp<QrEi&<^NoY<9xuwZoG@tqi(fTi1HJikr7BhiOYjOkYQ&tL`h6to+-By5@B#hT6oFM>~;x&c<4 -*b6Sgy724RW5++>aw;<y55$4S`{K829s-wyfzmfjXRumyE2iMYW3hYbLWbf)*I?kmE8r7*!)gzk9Q+~ -oaSvP)!4}gYmaT&ghSP3NH%m4E2l)EH8JIX5X5c**jhBhnjZTC^GT5h`4RA>Xfen0DVa3<9@fg~SI26 -7XPZ*0Atr4wbp_-O)#<~Rz#3(wU&EVY<pN+sJjV^RNMnt{FMgS^Dr#m}39z(DdKL8e2OjW19(HfvD47 -M<b(Fu3{)!&YvbT@Q+2~q-Zb|x94XcJ&DS-}=hEf{uy%II{T?qlMW0AP3ZuXY2M6aZ&zVK6kI0uNsR- -m%2EsDp4m-8w`GVy|JJPREiFp1b&k0q+?%2e<_2u${UMB3L{gXa<}hbnk<paWJ7kJ{}zd0e>%N#9`7^ -Hf-2pwi~#l+8P52BVs^J*TCqbtMP=18*<?BNn%-ykZ>1M6|fq6*nN#%bK&X<E{S0Q?dj!kb%6xDU*La -`lvGSSmWF}jAF4Blds~KaKw5Ra(tZO2+;nz(EEM^W9>C<qAV+BF^ta+RTNqJv5MaD(Z1^~W9AGNYFe4 -l}4>NE{*b1`+bXY^@I{1*T0hr6?D6HyPjD9DZh^cLMf_x#K75flBGIAfs!bTh#_RY6yUHD&cNuh&eJc -Yg0G*fb_@DT@*K-7SZvb2S9^>)oe;F78rJAMD5gJ#P!Q6~Tkr?R<Zpx6pZuXz1#<jOG=XO5tJ#m(@J; -UBPq1=3#t*;(CwdO{#=6Yv5S3FmB>=pfOL=byMuy0d{=wtD5UYbU;)ECBOs)-;wAbz*GM!R}7gi{VO1 -PhxOp#kkVSJh1c3k7rN(umYEC_?Sw>tIIvBvGH`wKepc>Hy}_>Q*Ne_eQ_+E4}&ABO^kBxSG(X6_CUN -}%kN}kjLQ6}0AK--jUkaU$AaQxj7`9w5g&`?Zj1p>)zTi8xMcD&nO6i1-ftXYmjQ$}5{iST&OlT#sVo -NJ<JfVpL;@T>7@dfe`z?HJtXnK%0~R-Y=m7sVf!5gdUF3z8#ipyoi%Qxx2&fy#GCXT#$%w~q=OJ)O$& -C|Th<VUEu_2Q-;0b2Rlhryk?2h{;Wjfpqgm@-Cd=0;)ogLtkVUP(U?xqL*bPq7TqAS7CnSSm(!Qfd1W -F#32EJ&KVIuN7fK8}DA`Egi55p9X1*3z6<DAyh*XvAHo=3(xG2Q<tOLrBlUAw^H-h5L@ix&Z_*-S~}B -EmB^bu-P_Aa)2x|BeGXgv6IoPA)<@t!}$b|0UjKQACAB!@ge*}IQL2f4X;PY%rU!7v`ccj#_q+~&rXW -9YgnXMdL>pcfKj#^xP%~w!v)Y+9UiU$csX-#IfljB!wfMkC)3h8M#<i8-R;MyXYS)8a7nxRd$L;5(BV -Gj>3ThAnRs8!>Mk_w_MElXSs$`LMn3`RH4lMHdNsjgw;!Og(P^>)>cpfOdk<Dizr&apn0T_t9mAeJwK -7YYAIIjq2}A1OE=|FhBe8U1s}c@GW>_8KcG+#i2ugq=wJ58Z#(?W<_V<J@0gE-MiVfh+bXN%=5MYdvt -~RJ8vao1`F%T^!yG;Ixufu$Irhho$OJ@2L;srjYvy2%i2YBva_7AKOytQ=4bdZhMq;GH>6&Dh&De=Pz -F2P_MVYf1Q@o^wQw@H?Vkya-D9JmI-(P@OCmrc8YVL6QIX=jnbvTh5yL$(u_YAO#2K;Y|UQX;@kmKo; -FUx9qx#n1<kabZjI%3DtOl0JEBBStlLnI4nP0Rvh92hk)pb+QpUGa@@6kk&>?ONeHHF!X2az`&Ey-v) -Lo`gQPcxSW&BnxHI=12CP-?qjP&>)!P1vV0mPGji_PZs3yW414y(F`aB7Q&>K<Ya?4MI~hUM4K-;I%m -Z(;k?Dj#b<Is}Mz$NcBtAqWZOkeu8L34Pm*8XKN1<J*FuV=KK$E(|#L8}}u=ouySFZjJ^0(+^B$I@0* -bjh9ukv`#2yj@g13ww<GF*H(?yX64kn@yj5J<ixOsvvhDALoX`{08gKwkn+LSM)N9=*}QCgFVG$boem -ekUdaC)LkvH*iT9T`Vljc!7)wNI?G2-fGR6CJ$h^lk}wX7O+Bm!XNz83{}!(xG%`qZ=$P=wCi_dWUyo ->83)$IN2jsO`GPbt3bU5b26ZKzfs5_AZsAaF3gNNB3dUX}py6xT?TrU^1JA(q!jBHf!~)UTNJ|R-w}M -mKk^{^*A8(5Iwvh|#zz&(<DLF?n$y@hbp35gNH$Vr{lLC4R7$<!L!_wIPBlkrl_7UeRIFZo3K$a^L3i -h$lhurIwe;}E}sm2<COK`X()9p;`Okh}PXC-h+AI?K@kakONYF5FPC}crlx{dU2BPFf;bC5(vceFj|k -ZP>C<{@xNe27<KgAL+$cyD$OC6s-a4gdg<s6_I_4C0*$V-yN1%;RR628_@yyhC~raT7CX)iDDEa-@)R -zzK4RjZ#a4B_9SONbB$$JB|ipCmX${<;ZryB}LxIc*q<r04I6bW?f>MQR2;)DV}tDGX(JjHq2m=LGGK -0Gwn9&0c5XpO5R8uN)6H@Qi};7WR{{Kb}zep-!)2RHDMJd4n#h(9st^df9O0;@5H)wRtuz7alOv|f*U -90-|)`02<E!1Grm(0UZmx(`3+nWZNTOheJx`l*=p>l=87+!CEOPv2_7>#!K?x$@k-4s7e1lZcFk|#lG -1(Il!XT`Xb~KFBgY@b^qS1x*M<v4h|k0--vYvhJ1F&PH*iU1-8vNBD7oqAhhYgweMplf6kvnnfk4ci+ -`Zu+irK4Gyt#7STHummV8?0;7<QOc<D$ZMNv9F<aYIt@$4+I7zfw`^P>7>w``MlJzcDqD#}WYH*E<~J -fDs>1)ivvog=`6^zMw0yt_JT~stB;)u_0@z4Ahc!k!YTE)6HtXaxOc00AL2bq?%SzN-I_iihCP6jeIu -}wn>v>4+-a$?M~ubX9R$>aT-hL0tkhb8O&;QmGT`f(io|aBN?es8kJOjNZ?+4DkU7+#Z^~f80jBYi=Q -l~ogQukkeWoR#1GE8xJ`6);Hb=xkK7jxTmlmt^8hLXGeO>zmYgi9Ta~P(`@@|F^qvxHGI@okvMiS4lH -Y;#4L=D25^is&9srXhsRoPH<*Hg!CVzy`@2~?cJJ|iJ{!Au1<4~6`fg^&ujD~y{c@9QDciLD^hM5V#c -roXAJ4-|0j4HYi&qANrZs3v%P8^Y`V3K4_O+07g04y9iD;~pj3mX<l?@6A@WPS-a83Zo>(BVr8<7*aE -OdR#ZRwOMkR4s{BHP{m^XYNK=4@|rX+E3|_+!yiSo5tJ^5KVErg3lTuvj9woyS!#HNt0a{i78Iv%EFs -xIhhfTYaZZBhFi!w@6-y+0ZoP2V8h{3Sf-dlVIu&UYwxU@pOZ9zY(X-#8?P`AdXY)!cA+|e0SX$1qfB -Fn?#+Q<-6nfe!UN!jqdlyM_O!D>9jCbB5)`oYR458WSha$>6>Bg!3GE!DWQCdxrV>M%n`k$TUN|*U)4 -)5Vrg-|cJE6pvDRL(tTGDi+7KDoUEB<WB{c8$-)`e$+F257_ByhDTj?@j88oQd&!{$z7I(`zOsz9GK8 -2`q;Y;NJ**a+)uP$rPrZs3w;h4x@y?ABCWsO6lKRGWD&?H8nEO^&HGJ?dHpVP8rRirRJ$_S+y@lKZHQ -pcEUuH?5@m?hp_o#AS3<(8UA0on}wzpALm2+3ws~x5LSU<kp{&q)u2@0XL+4crlDPQ)o&Y&CG!;0nDh -|JlvdT&hMm-)3t)b#0s+X5Zkcghj^LsS%$|KS@S%20>GkBIV|)yVuq3KYBz96M*`A!OPdk{xVOc=pIR -v1nR;w3668cAsQso-21>?2sMU}#?&WG1zC>o6qSlZIBLj|Q2Zw{tEFEJ2qsVsR$|`skeM>p3DTtJcL} -c!_u%y7hB&jRy7e5IZLm6sVKx=R#R!avt_GayDxQTc|)4dt02p`AQuKE%j0_C0N?mb0ixH8_qNxed3R -|`DS0h7ERj;bXO-wZ~;nVI-u1}-U-HX~mnWM#1oAaW2n4!K3r0+LCfWCTW#8r(r_0^R}-PcqUh3SaSJ -S;xV!oCng5PLDe6Zg}$oh1W88EoR9T^fBz&YLy3e0%zUo6^|FVgxXxGCUK`F5e&wXPj+zd$;A(r_Vf= -Vg6?uju>+&9mO9g)E$cWkWIUZgRy<~<#L(CSoiX>TN8qz1O$O#y+@YbUFTtP9tUJZ%_nX)xsuPIc7{H -LN0mU`Ton2DZ3B^+gEWo5lYzBdHRFT^0F1XrV@RP+ih&Mp9Fs9XveP@T9<b@0zTDqgqY4D?6?ZRS3*r -qW!BGP%a8@OaJ=AmxoG@Q%H;%Go4jhwmQlQ&dG1>5VSiA}c&uoyKlCR|eL#A0Jd9?+PXqR*ExWk3>EJ -$f`$l}yXuQx-wkDDPPrIH(tBcH)Wm)PcmiI`INqg@YS8QplrI-$mMm>pP@&PQ4>oY+7^&yMkgnsBpQy -sRIdzMI9$IRRkK63)L#pL8qDI?%MlkaymI#p*lDYHU$|4&+-$w-wtpIf`^L!p<5PY#Yfd4z(P?F>U3~ -(R=e~c{I85WRuHdI(a8n9<`;blseCou@XSHY1jj*-*uwITlz|kPP(SHOnlIl16Aa9T>F-zlA{<uW$+~ ->Gu?hqu)J|5)59wp@8G*gwDFz1Ep_#Xa2tw7_WCbaI$B*pqNgb!DrGqJ4r~S2E+n`<G5;SO~(;FMS%# -_#=f(XhTD1iSRZ~em=xTF$aVsjXyPWX7A0NU#^yaX9wASTu*d^Y%+!8WPXd8;{^wS;-aw-dgEJge;@j -})yHo{oFLfoUFH#i0y7HN0I46VRn*3m-dJvc6yV;e;<CoHsqEo}vg=;bft%25fe*Sa!miv5ZxEb!7*^ -2us5T8or$e^d*>1>=_fm#qzLFSW=g>1OqjTT8EL*#+?TkfL*Qw+aK=6wBHkb$%5Zj7gR+0bY{!dvcCj -dL?(ETjRc`t)^3*hi1<|<DbWmV(}spPa7o`?03L@|X!@xsPkP!d)}C|~AX2Q!b#-Eb<wDRRRKP@ZnPA -!tT+(qC1B!H1QO;r5#cGg7QGh5^g@)Aru<m88Sbw_kHr6mxyKuFu?zO6p#Ys#N7`-%tlBphto0JVhlK -}aqFFKXErRg&9sLgujg=ncGzmRT*;#bWpy$SAXX!$lti%kXx=e}|vmfD>gq7S$e6L0(5d4Mm0<cJS}? -@6MxB#Q`uj!w0p4#5n;s~G#SLMlpKsoVl62mo60;7CiNUC9s=Cbk;2`_?TB?kah3^UKPe`$t))55!sS -Za=^>d`a!sJb+7F=czu5G|4I<KD<*f>1^=m2VE_AF&tg$H-W>Xla1;^vv^Ri`9=3yOX6jh2fw5KfOdu -NdzwG|SryT+FS>@}-o};Uz?(Id)U}~iMDKafEg%>3aF8LQ`71cfu5y|FHVJCjjG6`GNhDBaXHNi?BYE -12?zJ5<403B$GN{jpm)&`mEJ?*m(Yi2Vr56XhJ-%p=xYwcr;kepG_X@1p7DH1Vz)tO`aeB4x?g}bIqD -(Dm?&uHUf$R%$1))QP#WULtT+)`_W_N$uI6mCak_jfBm_ipIsk^@Lxpfz2QxyUM4pU>y$ac|}pgfQFv -t-mNs_^5KkGBTH_G34~3AbTBkCOo4408_UIW@z6t{b}7Uain7WCKLNnpHYo+^OUo1tr)Z6^ov0Ef8Bs -ab!4}4o1=aWoPJKJNT@ytw`rEL|7}TAxqE$ET{HbaB2-AV_0AzTj>Y|M^#S-YLa25U39O=IQo=-ZJIh -x5V$s#154h6Ng=sA^vS4Z;1)_D2Rrax`TxZ~RCKRY;qWYMCeW-*50I<4T2jz#D~iqh6%GYhV?ZSijp| -D8#)Pypbg!+N6_YK@s>fnlNQ$g!0A{w72+KmT{iK75Z++KoPy4H4;aWHNk}i#Y%Hbk&5X_MN$pi~RRS -^(S3y!$~YdS%80I;fsPa;g8c|HJ-b<+SYty%C&GyvhN8<;M;bx0I>db_3&2^TGNaVPOtbs&9Q?N;Jj( -_=9fT*=U1FFy`&b6dksU=LlcW7j(`-^cvsXED#@X;Iq6ej~nEFh(O?NI*KG%Z`$A2o3;A4PHCC&mI_# -*=mSjiXy%FMay`M?lq8-3*d)rlJVj2YQ9E}GBjcz!@zaI1hm62uD8SXX1&@CTrzaVjcOjQtW$Q_a8Vt -FP;rBGnE>3Zd2E-PDP{!Jh^b%e%4*h!s=8P5r;69>Xh8>Ftbxy}M6v>|WyRM+4bb=&YR&Etv@|G{M)E -&u@==tU=`XA+2D=q4L!q>B7AL6bB3rOCNFOR%!sbbZ>Jg2Bv(|wgE87iRQYaP`l>o(Bn}<P2m;0f@!Z -m^pzzM@QcD0?kqYs&O_2@7bnO{_NuaQ=&f&p!5>Zh!VxQ{hDJ*C2CB6XAYI*M8gWD5`oAjNIC-}*HVf -lIpd0Us~&XV^+rhzX9VgwYLRxG-O%n$tmi?`{dzt9F9703mHRa7jm-v2_LZ41Dp-gR0P}kI_%kRf;av -Z1hm4X2nCD8U<+ZdfhL3K=-;eYp)g&h*5|<8q41Bj;(3QE((kRE~G+})gmWc)&BTbK*5Dex^*1l5F|_ -IlO<29q*e$_Oe}+f?|c#{L*QZSoc<7l=^`Z^bAHji*5(lu43Wi-MS-F<lLM=;8%9gnp(jl&ER&EM)kG -Yr=Tc8_wTtf6vjgyxqos>9D`piAwr2AWmM%E&bcjo22*Cr*Ee!L>`T~<|SH6TPPyr?A*ey<z5vajGa^ -761gI+=x(l<Me$&6;@l5GD>{tSu<J42VLoDoaXy|C$qmDyct@>B*z@{)~{V_V&*KtpO)6AU!6{#Mbw) -~OCpZ3alqxkRqIp%Lt=lr21}7RT5-mE@wzD3vBvz7hC-*#o-QLPA`Dh!s+36C1<$2Smgab}0>nNS@hh -DnD)91%(`Rt1Ww%^MLNPnByWQtw=T6vI_^OUJ8bV+O?6Tyo&cV=gTbtdQ-CP#_G8*(7jgkH>u1$<uoi -i`wg@;&>?qEgbX1kgnF?J(2&Jmxi50M*4EWua7lAbiz78}X#5iot8=ACXoV`#uN5VLLqJIWW~wRqdiw -mU-2p$zva3?Fn4*~)zv0c>QX^=9kaMScqaKEArI0UF5cX*D8rQm^dmWjmoc0nEBa@<Z+?r&m4ixie43 -t`_r+H2eUZa~JG&&}FOaF`RwHyj_i_QvH0{3JJxm!ad6w|lSJSQQq0>Fax7$|ldBFaXt+V=}TpnL6Xg -erjw`YvpfMv{R#jZYH&x{X6Ut8qmspsH}AC_#y=?T$71GwSZKj}dUGghlkzbkKV~9b8RbrX(IK*iiS> -qQZmHALl|lG;<^#uu92$R&}qi$s4tmZ7JdOI3;P~LU}2Jep=TX4un0(hQZ>R$C-c!)gyKDvR`zsrCI$ -uJ%|a4te$Tf%p0>>9Vt)sJZ881{_t7QC)o7i_D{Vh3l(uljx+rq08+R=RY>}AJLqe~UbNBL)UJQXDz{ -lV>GH)BpnL6D`2c8D<%E6`2-T-2Qg)9aV4(#2W|apPwXsc!<t@##=?xP1p?j^n^%?C~AKv_pq?5fur) -$&4G+To}pgu(2Jt&I~>vV?-%?qC$;u0`GvRiUWL$yD_-ZBY<5>=imqep@;6i#7rb?5_FEk*zP+x}9=! -F>-n#?AVz34Hf}9=@Q-ElwQcbV12#hPZ@JWU+%aC+%yOJ)nEtW;#~`515Jcng!_KuC9kYQj)2Su-`=3 -Y&s@%$h9n!z2wg-y4TUttg#1ahRP&&p1`j3>@J5vhHe)1Y9)qj##c{`o^o~O7s-P|w?v!=uj6P2u57S -IT{w)!syB~(QGU^tDmX*qI<n9ur9GT(Og!uU72RutdMNUEp2Kdg^B~_NYM;s{gj&{U0mdFbLX%dJyl& -m8^6*2Rqe65Z@tFOo7XQ>tJ$j-2kZqH?HFbuRwY#UyrrciDU={d7A$n;0!qw_tQQ4QS;MM}65&`fICl -Cg7Pxlbq?vBEHu(YGeuVY4vS6arJ+{fr%M{{eE>|jm}B)km|R;GyoCCTKLIg*>1U7k|(!_BPmutUeyF -8UJBqN*e($P}r;A`yoc)^md%LE&&kf$6DmvXy#eDe57~_*8vd=UXbe*CH=RWvQWVELC@*@`&P(bu|h? -tz@UQ3?^tg-E!#AJ#^>Xul}B{8%R*7vDB-{$iNnnvr=||$V7sts6d~n7FM^Skb@xW5-jZuJ~8~+Vk1D -&TIrMzQmB%YJ;uqF9MZ>di-UxsfXdq8A-H@qMv?WxrtVb<2FElTTv;K=6ja#da*V8-XZ4|xRPb%nAON -T&3&K2ORXmrvXS?7MFw1}z9@73Bm}yF~r}kU@B=BR}b5nCNPgmMKh1*oNcJZD~-Rq(BK$A4lrPM8V;P -FTj{W{$ZMV>;U$oKIq;X$+Dh{dO#tD$?XWI-MOut{P`DUbjaj`y~uH>WD3G7<7~Ln~SEzni(@VKwG3K -pojGxP*N%Kx`vVX#nbEcr6;@8mfl@tz~8`B|mRjp{Dx@DrqHoL|E;xGjdkL2&V$N=NSmt<xoRmdhJP7 -55cj^mjJSRK!vqA`~kh2{;Z*Ujgey3Y`RVTc-8#DO!+`p%TKa(pqV}VFr6<8z$Vygy!NZV@FgU=6)Lq -3a|9O~jRAUsHcU$No#G;B#pa<P0`-w8EV+pZ!nJPbUTan!#G2NRQIj#rqlo~?2r}jO9BY%@IGJA{1~t -rGLGIyv<+`bRWk8ki)L@BQs(j>2v}pkV!~jg}pr#!2i=7)w6Cy+6S$E3&6dJnML4Le>hC{_{W+niEE_ -J5QASfz-hsLQoA2j%V_c)#!apf3!UqwUr+L)~kg-k7`=!b-kCjtp1RaT$9eG-KgE_uk1v|uDUX1|}ZD -d`{3y;j-W4D6;Br|Ajw-_lH3c3FKn9~vsD$YYXa6gmIlxem)pw97eR6}FyCgz>6HW#D1ooMf_(>W9dY -Jnr4qXR)e>C%O=3zzVdi$2N4Y1%hp;2~(aY5oZ=%b6Ydh#t<+byj2BabWH(3Ry=DBk2!kQV;j2HigPP -UZ%s|7rwXBuvGReOa<GD34KdkWNBdG!b+()5iIv!^$2Gs4$ASH5sJKS=h?qzCks6s0^ZpGItplVh8=* -no4`u`*37M}965gw>Y?t#m)}W`S;nfy-=(L;df~^!lN&;lur1WMAOSs!rovDnZf?G0f0=#c(vCPG~xy -!m2$at-QAt*ED*u8nK4)fp`%RtfJD0}pomdX6SZ8va9mF(|DX$d=;I!f0?7Jsuzf{{mVm(M35?^><9j -Cw2(Zco0tseAPVz@8WG*cofOWKATDi3+iwuGHUiUuYUV&?p(Cc9$5|TfN%lJkFWNX7M6Gm?Ir2PpCHT -NC`p3x~cM7xLZh*Je&&6(lzlsPX-SSA4Pa7E{{S;G6?EPlywH|dwkL*5Q$=JWMNb$%5n~YhH(DnIw!$ -I#lA4dMclAk+_MzWHF{?-OqblJfp8nk-pPGNw=&Q@7v&8@BuaT+q@jClCNabEhtWz9++1SE=Sei@0p< -O$gOnnGoG{Fz>(cS{J<oSHb+66SGRohzZCG^<@l;ZaqWebr+q^*uiE#7En?qLVP~qlv1z@FX9@M=mx; -!j}VkWub-G74bi6L;7g$%gvhKf8=VpwDe1h6v9d7lFJ3EZ?QtnnhKuBnsuoL-(pFi=P#smeZ9bM1M5Q -uzW1Z=M|n4UOKe`L&KiwxW<tiLU+^&B@3jr))B=X{0>HSrzwb1x||%5ccOazX$uxi;~Q?sV#GMpcOY5 -#T=v(?eM6n`xx)2@)H*_IDtF5`J3)4^KN2f_#MURo{DOosX?qeJteJ8q4G5QK%$`H+%!>!+nZuIeNva -1{eHEJz65x+odQGhO%IE8E5xKnsS*JRbAYTX(34c1<`;^Efs2|91y$Q^uA7~K-`;J=oC-8Rbnk+EH-c -q8a?2qvSIxp$2SBh#N6)+;rlEW7q|MFat>_en@EH~D=ER>#h9I|t4?~K$onmPHliDVak`a;Ch1b!&j& -7mdV;RL_ibpbm&lb~9?^6Kiso3fs{3a~nM-+8=L)9>=$^01EVdSwMEoApVP_*SvRqvyoYKc%N73xL3P -GlO990RPwuEGsI>}q#<e+lQacCCvbvyuwJlB>_+<Q`697;)WT)P60<BTa4O*4>klBl$C8?@dvIKD=W< -deh9hxNgn^I}h;{q(x8u16;CsQXo~*j*tkG=h2(GR~X0!en3VD>xu(WRpNzUsVq>HO1RNkLqe;JAtUJ -|RNXA$ZM;zTI^_hAs!a`+lgM2pK_=C68hy>#_cvzRi(|-^y!NSUOY@os>No)8(bc_H4=sC6fs<%eX(~ -%bXj78p)gBuvWsm8Tl^3cDBPU~~ouPXj(&HQv9{ebXHcC;{N?B6!hAS}2vI;?ZpD^1CRy<JvfgqF}SN -?|Xb@SReZwWdj=MZ922`hB4O(Vi|2DKLa8GxJPS``FZhCd7kSG(w52L}^2Q;S1UAS47yMy!!A*LB9km -Y?*u$zzDy#XMGtxe-78B)Zq3ESMNsJo!XQ*i=HOLTRoC*&W5mZkfVs!#vp86$Zlzn=7u%|Dt=XU8ka? -xcN!KuF8Vy?gdd%;iDGc30lP~3>0TNeU|WXZ>3y3LF!&T|BL5L#-IF{JfJQyCLnb8qA`=%W*uKG?7?G -LZb(P?>b|Egv!Q#f1gha(V`PIB?zDK1R<b(qE1;2%g1YFw<)*tCRF2if5G`EufWAc8K=+h=#v%L5vL8 -Ba(J}27XURS2KiO|$Fbs9i0!Z2ey4Ot=*I`3s*4<=Q3Va#ANd~;~Ci5)3f;gF2=4E@%P0{bA-l(a2&D -#b%(d5l1?jGFGq1Z+HMNr6+jqc&pLsP_O7#p=rGNak9{su1Tu#(l}O#0YMhFI}}6uWkTNLR~ebps|CJ -GV-B<jqB3V)^Q~?Sf07+A3wMru#%2S3QgeqUps%DaQcHB3@wyb>>AZ?03%|S^d0l6uQ^uSwa};hInsu -WdL9WRl>mR+LRH35ZugGmz(-N@B^4}D83z6o`vppI~1B$CrY}TM0cs`fPgangfyXg)1~pTf>yjx!^+` -dlgNZx;%aoSm6C8f<b(1OKhVhVx)w~AVh%a}AP#l!;<9Ry5-}>@=!XVbZZB7V(Y<aNWQKgTkwdV^YLT -^}VIHJ-9j#DrO2&ud@}ee`$kn$T{K$QQ?zJw@w|L<L<ecJ$o=^9IB-(%oMXEz>ClQI8GkTL@rkpX9BV -RZb-D~$`HYEmR3%tQw#{egCz4C+D&*@blm2QEVSjM8%Uj+>jf2c;KU39Nt=vqA)-nBtodUcX@Gz2+yO -cJvorKaj)R|R8FCO@32Yu%{hG(Be`a#A7O1(olP^0F^kK5q~uE$H5FH0(5Hv<yaACYbFyH^Twi=r6E_ -u~f80jZ$bi^L`eu&a=*|0TAwT;O6s`15q0kl?|R5NZu2TcH~3Os>Fw3jQS=!ZwwF4>a6gI-kzwPPs!! -!TO1M&saOkJ*)IAL9^5#-T-13hf*5&A8b`1#K6wKSoX?>bgD2pYt--0-=9wnsQvK55b#<@1b!@X;84l -c#2U<WGy_jryl?_MV$dM}N&NgW}$nY@)j#er6YksNY3{QN+og(O~6a|VDS9N)+KAdX>cCW$Z(OF}%t1 -yIzGe_Q%`=YCR)x&yglSfwQOqIIwKCv^80eHYvy(g!WHDXv_!#D?Os(|UzfdDRvn_8Z@nkg{c$dEx?X -6cQL0OV0TMa=9srnaM;8)A=UvX^?8j_$QB=a+d<8=>&nqfyFq4*d>g9irM`GdBe-Q?+YOpVzU0OD_9W -_ew_Bn`g0%z17ocl=q4AUb=!rt)R;4O)zIQoQ9?)FDxEny07HVI=a`2oO=u%bl0ZXpH8SZy0UBFEKAA -9_+~9r=fkRcZI5;Qj29i<>)>*Q;XNNz(}n^n3(=sQE;FxKLDE7XU-E|w1qL(6ClOs)H|^f{Iy{qxK!T -*C=P~2uvjUZQk<Vs92!Cq*Z+Ounh-wH5Xgq_)xaL=ViAQ0~7T7)BJB$0SOZ_i63SmvBqEdTa)C3R$ld -6SP&4Ey|_N>oyBWC1TUJ_94n>Wx>aXsxm@uE0B96oF-_0{1G4B~Z_7!WySS_LUryOn!-jkrUA17YQrb -xSM2uyNH}Ht7^Vkhl)k#XT{MQr5EbNPQ}I2HX^I36&z=N=dq@vN!D0kd9H`h1AKrG4u4QOMsrY=H(p( ->dd=2KN)^K`v!m3v~mIu`;BVTrWW-yGNUb0ZUTcepgB5h+#vlNO1>xx*e?1KwOh)Y)U+teSQbZ$|8yG -hqFq{#6o6bpb<LTV5EICXR+V;!?zQ%O7uldYMDt(zaAweXpy&)6Si3ROOQA?2S&YGH)WJd2zAnF`?iJ -6n5v>NNJiBZSjBO{GET>be2ZB)qQ4LQ*5AO@|N@H(eAcmcJ&Jx<4JWJ+6!|Jqa!2pAW4j`6R<y8`gr) -h+@DxupRnJ>^2Z;{A)3*-&=3hQ+Vw#sp<f-mZCBzEbv4==mJdwA|wa+##pQ+gwf9Uxz>d7zHtxdU$nF -PaVqQaziZAQr--Wzf)BS{kyeo)-7!E03QpeR9SNbgz}_bytSpa_&hwPsNT_UR*LDHA$54*#q!0#-<k2 -qX|o_pK%l2>yQOPE>uY{Yc<)yV|k~OCG0K;#RKH+G4g_R5O=|;U>;56N?m4G_X?%am!eBkO)I0zo436 -f(!cT;jxBi07PS&`v>2vwD6jJ6%8<)HpnDxmdlgooGAbr`c^`;ZN`Q{#<Gmjj`nXfC9A4_MynPeYEfG -2L-mi}CwI(a6&Kq{1>%g>CKm>uLThLsl_mB|N%8xEYuaJ+Swv)P*j_$Q0L)vEE%HkV{L$WXMuhOd=1* --6OBhMXFrzNbGk8RV^5Jk?J_05j%wNM=H3Tt@(K%8DtS`Ve;%X<NdIg|y5`fdOjnps}sG!(H0FjZH%) -{S$*MJOkG*wyx^Bl7xfwsl@AW@jKglI_H>pbdy>!_$1b^^-h*(b2s&^mWY(IJl=~gIOJloYh-Wh3(gC -_BZ0n6uNNTvZ5mg4COlJWe@0H8?}`VKUuvYn^-+4JGA9hbXeD}v;=l-StuX}B^VBwM=!d8(Ht}Hv*DW -3@aul*0963e#ag|YR8|tVnP{3*3D@G0xHe6ZP5>$)DL1m*-Y&d@?iJ8O->ADU&(K*+=Y}1nze@P6unF -(H^^81gN+58`wB_@~>uG1h^Ejub;3-otqsMAI1InQsDAF+n{@OIf-szR{Y{aYV%halaemf8FC0OXNU9 -bJ1=+Y=&Ht$lBnTHIoic+doZbO@Q#(;6<+`T#T((!YK_-2q(4Jky3!vV|JEec?(Lt(k2_ml{MvU(g2K -DRFqb6MD+J0<IdoZGwUe&4{#5+L^DMV5yb3_>6fAVj!RS+ZM4XNjBl&Rmkt>g}~7>)o7ni2jlfnLTPm --b*#|Hy4}nna&YGvFW<IO@M|{C7!P#mqBlp?ZTH>;sqFXNYzTwuu<!)URm#{a+3Ngsi}J-1?b+>BmVW -mw><jX)32j@-6SLE(EzCpB^8{m>7J=q<~EF=UPB;3La7o=(YS-9dHc|*AU4mFQEk836xQgrxC5#Hc!y -eU88Ry0RTYj$l#8h4P<ZDRS|FtSt__^Yg(ua$o^EuH#lf6NjN)d80LSa}@E+X@e@-t0&4Z|>XT}v|yQ -F>B{bx|GH_eL~J<&vZ(wBG1flInIe(&J~oVYwl#+%>aad=YTv`^GUyd^IA2ht?g&CYl~3|P!#fzz*Mu -!BGni4<@AFlS|7lpL4Ks1^)3bNMrLuZ5FJ!!sYGEZr+ROoRQ9UjvcHj2S5&vy^oGK9H5x0}f9gUj601 -SMPo<=5H#)(H>4YOTQ+d`Ue`yBa=jTMGY{Il-CB5w&t1He&HQ-uN5Y%H8oD0GMzdaH%C4JuRjdguDCY -`Sv_)?AT=Au+j%Pu?H=5Rr#m7k$}8(3=O_~OZf?uwhh*8%QMJ<xzKKJp;#<g9Hu&&c2;f9$7u{>~D5N -)>vAw(ZgLlJ?-_%gNI2H=i^W_|ClB)Ku_l$2Y5Cw%xXVcNW4&Zj{c{MB#UgG6=x&ngJ^jZpYxlQni&H -G-duaesex|A1O_wRIcuO;IwaK-B@y@a=ULmzcWpiV=^(u+3=D!P{pn)aMDT!y>Zc*cuEz65Z2>UVVHi -fZK!NV$vmoaW_=pb-fuE992zyI)=cGnHS*k?~F4>&(%!2P_CVTT3OmS3-F(&Lv~cmw#nnk_t@;axxMu -xz)Gp#=UAN5yli{bX9;58HQ&cc=(kBKr_GBgPOhHo-=hwVpknF6Tj9q4}3ok8iq0R{iwe3@=#oL)s?W -po2OJTMbC}<eI3h#lG-mhn!E9e7wBGV3MR#xWO5Yg+i5(c9<VG5c*~(zqBI|f2ckG_A>8u`Ua>m!KD> -_ZwMpxFSh&llp2BCx>=&A7BLE!d3!+}_f>#ob<TkzU#e3+lcHv8Q(TkVVdfd<Du>c@rYemNhnwnhjiy -{}ml*xd^55?x%F29cMwJ~p-A<KIN-00G#%73Pa%EKVtc_8`M9^JxzzX@dzs+nV6{sG-<qc~9f<^jb)- -6M6>Cdnn5RVfv)3h%sBfmt0(XGt1GknJXiYrp!-y=o$T5{2Q-bk+M-@;h^I^V5CAR+n7HRwXWRO(QSD -I{d6Z^bbSb>q^@`c^LzsLc#&L?)`Fk%Qwu4Mg#^KUJY}2%OR|&*U}diEN|O|FF`<Cz3U;r90o>DO4*z -Fr}5BhJRL6bz(jAvAvX*xSjVrAm42OXv$&~Rmy8cUcK9ttepScmojh{mj>ZcHBv+aTa@mrH&j(YS-oS -A67rtb9o&V_@*sdN}cOQGQYuY29#SWp~E@QD|c0F{;WR#4XSAVJF;K~Z*Soh3{=YN$DDaJs*Sgx-K(* -F}xEnsz9BT!31>$uw0-@qk9@^R$6L5zApc{+nwzKgAf!Yh!x$BUHEi(9%Fh~4Pzi7mfZgG+F43UOfbd -OF3riUkyld4$vhrZU%lJBC*Rl3NZqwILPeJ%6WPpLAaBa<7_408M5ou8oz|VAv1ScF!_$AOI?=f(Hsb -+fa}SNE-@<hL?)HZP)utoK<sH?=|zRrU!<ozv(U{pjLkQ8INw>$pij9{rUxx9Pb{<d%Q>9_v$7!4k^% -pQW)~D5D1>vIJ~GyrV=**^)Z&SuNfKIJZO<PiYx1)zZxehpXELKc>m>Md+q@DVv_8Q<=*=4@x;@?d1} -b>#FkEyPvs`Ez<mS*SgVd*R?|PpT@x$sM^t7eYllrW&W{cdbNBWvncY+(C*Q|4O`HSt3xC{i7_oGO*L -cY7o&La_On{`NT}I_c-KXLK3E5}*Gw#HRd~^78rmXvgYb-I@?sBo++nmEL`Gn~7p*U1cgkHf~pQr1y9 ->7H?oKw>s@~$i`dfS&LWmTAAt3H~1%xG<8mXkrl<cX}UO>ZVy*F10@$N4?-tFs_^bkO48-EaD^=M0=Y -i^OUyU9UP2VnQCqhFx2E?;<w~MBHTZ4t<9S9;wigYHeHd9yWsKVQV~f+6M5Jr9Hf;6m`#~f8fCSO+S1 -EGyv<{k#}{!B*7!aXt#P14#R1Qas)VD_<krKF)WcQuH<PsG#vZbY1B*&M$5_bOR2O1FHB)o^ZW7$Btw -hi%}`Nt4C+%?@-Q4?yxC5_1Iq(2@(SJ)sdM*IXipzHaK9m@`^8#L3#3?cGQ7FoCuDz{=Y**sa(=yg8K ->5GdLmD!cK8IpXwt?V4HFN3IJ`ZETwLF>Cw}0#RKz!45nR*wNLNB)<uw`rtRV&h@>LJ-_+^7r!`1`3B -_&Do{3eHJZff-kOqFY-mCCSG9>K`;p0nhNTNX5AJHPhVt}-Nj@)h6Ey}tV&U)1^P=KlatO9KQH00008 -031s8R(v6Y`a%N$0OJM#03iSX0B~t=FJE?LZe(wAFJow7a%5$6FJftDHE?ooVr6nJaCwzfU2oes5PbK -qSi~<j;P~Pm0$eZX;bg^5jq?{I8%3TBT3XpeDbgUR1nRH9p+D2sLGSb=?d}X`XIE@CuRqiuJdLI_9>s -%cI-ve|7XL%<)HWMUT5OqSR&Jygiei&9Nk<d&O)4euU6z%WnefI^rX*`m8EU$X6Lh4dmq0%93oEl@OQ -s-yg%kBt_AV1UenTsbcKEbAWA`5*rn#|)cxG96&S_om8Gk-X*ub@`an#mRD{fQo<HtWhakaclky4a|T -1N>xwlAC?I*E<;R<0|w*>dea5h0og`<3QWZLBQmmY~p+H#D#P*63sZuu93b6}Aqp6_%NtDf}yhJy2~b -%7iA%xpW757~x6i{5NBPFHJ6sI)o~nqn)7Ivn}1p!>8$z#_XV!o>;R*H}h((WCrk9W~?2PaI_0Cx4k$ -u3_{YQ5E>fL@7;YMmdJ;*U)VZC=tH-6I_=2VA<ViZe9(_+?gFq4(KRVd!=8}cs}@{3%}MG#?H1nS1%z -ny6>CLnrpj?qsSX%WOJ7Ed&$H!%qUkeziIOCmE}kDy3#XCA{0>aA++hWCLRVI3Uqd(uCW9pY3`Eo)jY -o^;pnf=7Ob2O7!&yQR&7)*7ikIUkq4_eI&(cAcC}lob9L&6C^4a17l%;`_IeQ_MJGB0c@j3`pIc>!YW -6T*#Y!nInBD?y3%}^P=+4l>`#n1<m1!?0u^lBw`2iy14bis0&ZwE`Cbvtz5Ly^#56-JN(K9mKhhsqe+ -p}uiGlujaG?>_W;celOY?|MYb6p{BH8cZMm<E7GUGzx1<>SkME&kGTj4Fe2+QD1KEAK%0yTobj!6>)^ -&x6m8sv2CTuwo>y681FM_$V?8IBcxo1vmE=KHETG1te;fM%YN-SMmA+X-)Aov=gPCD(bN4ZovbFa$HB -PKXk<z_w^w=qwXSpFuE14+#VBaClDKhJtCnL`wCVOQni|cAe0W@iJE+y}p6l9|6cER@SCI7SN~5js1p -WYhYw}72H^0GzPwyK2<IxtEp+|5Z{Tm)asjttS9lc#?QSzlb&|aFe>?^D3CY*Tl9*+`wQ;E&5IO5Q+< -D166P)h>@6aWAK2ml;P_Esz{)OMi>001y2001Wd003}la4%nWWo~3|axY_OVRB?;bT4CQVRB??b98cP -Vs&(BZ*DGddF@$kbJ|D}{?4!HOX})i0~j28H+EjCz{WO-4L)8f<x8bhLK<KaA+gdB!v6YudL%$d0>h= -U>#JH<D#kNCPtSBe{W8Pz=h;70Z(KK9blbdWw7Lzd-?lG4&=%R}x#!dy3u^mvBwf>?3(poL1G@A6kd9 -;G@5yB5O3PH9PnIKvtH^>(Ik#NebfuD5c`3dL$D0bDydkL!Ovtx{3M_LfVzAP41N`YvJzxI;V7mAGaN -P2Rsf0~~g+@%PGJVFHE}&|xD1T9)>e<;VKxB%SspdG;VcCE>A`t#JVTUKV@Lc7~!3@XD2ZeKt5Z#&nS -Gt$Z$d?l;5q79Zd33)}W6zDw4^ugE;G6z}tv2+9puiidIX3p17T%03(<NWnG6>;e2t}rAA9+63Pdr-= -7d$j`Z5)Spt%N@bmNvX@_32gw*eP8LSNJ&1{cPY!3yW{1CEP%e8PJr+g7Ml?SG<vKv=O@U0I#k4nuNq -W>;5ME03&o<t}eAjh(&_0^QPkc!<$oHSiq(i<iH#La%DNw1nZO9BwY<VhVAhIfH>$Jw4#BaSs;cprw9 -bd(#K}+rrqyRt@S`3Yn@K5)q8jiSy&pg@Lz}|CsR<+CY;JQUA4f*0dUvoT-;zqt=_zC_8xfmSIu6l(e -2VzyF)d)uXTFOi~en`L-+m8eY@Kz6Lp1HnwX85W#pBKhk%@Tu%s=NDV-oZ`UBh>V1tfLWAmGUn=K*1C -^8Wu)5SqPbUb&Y&x<8%gT5v?B-c|#n)?#m0sB(k1<KmLMUdVq7wNPLA=CZpzy)0_zmh{hUpb!V7pd+A -ibd~gSX()+Rx73I%Sx4~-^IwbA8NEN_e?6!bGf1KO-L=K632qqICOfmsRM5HUF<UwC=cZ56hZU*QYN2 -6+)=%GeQLm^9i!Jat~!l>8|}_zqf=Z@!q>MAqucyXBR=?W-@K^Z8kfy(uhXped(C#s=+yA5m@7mI#mx -HZr!_YE7auxXRfe-kozduiO4U45Y477MrI^i7%A<QI9Sx3OR*%zKuj@R%Rc$n#)VmzsL-7|Gq_w_pcD -JhJxuiZlwvRGzY!2e;-nVaRb=DHPN2>|ZbGe-5m;tKI*z_-#X$oYlp-3$P8Jvd}ZngW@H^ybHS2KDyo -ksVjeS1l7saiQc(E{Cmr(rxax)`gJ&(79kt+pPjRQ1qZv(>!o-=%?G=JdQRhGZBLHOesZfpCTeD!rqY -=ZbJ2{Da(PPIU|^bKvOs9|^@}=J%O!Eu<Kq%Z4_Eg;Pa;=R+ZH5(Byxs?C%6LSZ$^TFVA6G?ZsBs-Xe -S!&v<!U8Ih3x%?TsRy>kVuGQNz0{MsFqqCkae@5mr2Od(Qo{#N9R}1{(4Cw|6Ih?+k&P>pJEUhs<`%( -nqc^uOn&CHQL^zw5t289BmD~x42)(nM-tpw1av|$+$Cis~6SgGmx(b0T9FHgeWrtJBnqp9zG5ta&$a8 -~CCxrvLL=`ckCp)Q5OB-gsJnm92uE(pV!&!se~3FS@8aO%U(3_Hd%Lw7hKM-q0l;dV@1nNA>*CiWC?* -hv8|P0VViZJG4Z;V8IlMYnKZ3)h}Kd#2}6=s6q&3WeneaEc2*T%`mgVkT$~!%{VL%n`ekm%>#&e}*J) -FAb+#0zMpi9(IrA%yic=HiH<}K%l@+Ognk@{mr7u#X~v{ObdNVKp+AtBR&dygM)(H*<=uQsxk5T*yCE -C2rjP1sNUSbxTvegyB)By^-u^~o4Tk~oQHMq(_o=QP$d4vJ<Q^BIBht>JqMdrwqqEKV`jP6uv7TzdUF -?>b4O|%_l+E`FzM}EI$lGC2ACs2U1x#FK}Ul)MTd1<(i@9uKxA?E7w2!p3>j?Tg;shSngfX^Od)wjT4 -xIZ2cBmxD^=tB4oBa?lAF?LpT9sxPMmAyFQgP{Z%nSB-=q@PrlLp~ex`R@^W!J||L63|Oj_uju6V%~T -BoUXFb*BhREcO*GvAHnG#Z$k^WX^a9d6--hpx}u3`=Yt{<Wp;{!1-8QXRr6*K!61aCq$^bc>t$HB#@2 -5d<_wFvrCqW~8)J-f$!$HKuIvCgMkSQQS0Sq*%*Gbv3tJ?LXe8G$tS^EkQ?7YZCv-r@>39l?D3cu_V6 -%Tu4%JMZ;w)k!Dh41V0z^i0k<iFdOwX#)&+8+hb?Xxtbya<8oE4RQ^f9%ol6bDXT(ljFp};gzL>lV}m -KRrscr%oOnOdR2*Qql7JW%(jwpbpmRkuT<#cv$86u6$5MVdhH}M^31Nv{mkMM;;iHry&rCRNb9UBPk~ -2B)E%PuN&Wd6-vxnP^!7xjO3EJ42owW^+mg6S)$OhLYKt-_8mBmWPDnj|1<}DvUxDMGIu1phm6pu2#{ -K7`)I#gIr6S8bbGb&d_Lc1Zj;c-|AA0Td2-CJSKn+G(RIZC2oTfylU1#_dR3dWrOxx%hWUJOkq$a2!+ -$kxj)THi#n+UWeY{<?6!cjFt(rrfHQS8|UxtqAdL7ph%NYx0_PKpXeiU2Hqym|zAF58@s7oVZDrdLLI -_Epo1BFG}6z1ZtzvAsR|QP^59g1b<GI@74*GO87k#8?u1_5AB4kS<R4jy|BWDg~LT}0y;7^%hcsQ5uK -bhmf#hdys-J>$Db8|-jsGAY`C<<r^@Gej*rQ3Gw}W5B(p}GogfwGW5OjZTc8(f;Ob{RTC48n@`uio<8 -tPU#3NkZc&9jw%R3)4eiD~IbbgG>gUbIOm+O`Nxm>Rt%w_!m@;8_NEH3ZEfXeq*ueb${$-cqhWg@BZ_ -bRj@^$Q)J{<=wkEb453^WqCxo^gwyNU9l(u_k=qds?*F`ck=zH>vl_1BmnJBj-=Zf}zfRv)}<q@Gr=L -#YkyJI21EEjM&Jh(_=wD7UknudZtz_9GW@f7>{Pox*VN8tq9oiMaVAxC%zszfc=krhw>A+&)@$1Sp7E --=w(l$F!@bT@kxe4G7@Tu`k>!FQZcdh?Vx)4TSi>ePO{?ygTKDaimpRoPAWUXtNXs$eOlp_{iW2d=-T -|M>VV+d{e9L?h^^pD>@negimg{sfSe6=yodu@?RBUXX@%rHp-|I%N_1o#PG?uyuhdmEaOog;RgJ%JYu -H953$}3(EHGZs%j&Mz^L2D3A;aH0Lo=C2*il<HSW4APJrln;zrX)GsQ=6>^ZWZBESZ1tm3jA7DOTBbU -6W&lYwrv4e*sWS0|XQR000O897^_9G~vD>zytsQOAi15DF6TfaA|NaUv_0~WN&gWV`yP=WMy<OV`yP= -b7gdAa&L8TaB^>AWpXZXdEHfQZ{kJ}{?4x$U33zt#D%LWHRMv2aF9bK2Jxa(6h+ozuVHn|F4|oua({h -i{R-IRMe3(o{$P)1o|)&F+403i{ROwfyRi$C@nGmKhHyKX4*rHSz88%PSZ*my727aDI1FS!foZsx|1i -!8zVCLCU_LQYfzKHg27L5!8hPkgFvBqN8-1o+?x_M9f~mnof0r8VlRZ6vWm0H-RePzD7X*fxRH@xplo -%SoI!+L)sfe;z`xsMg4KxQW=w4m@fe^Ls4)i&Px%JgBr<$r~8l+4HQW(Y75z=hxRu3%z_eA}K8RHwpc -5n$;p#dXd7MraU8Gn?Dv$Y~BwyK4SQqVFqFId<$#4-Y(2v9U&I)z6e3=k3gDiy}>WWd7Mnj#S(9b2`b -YNvAz@7xtksK!d+jtZ)f%`94T=40@L`BZ2MM8n?N^tM!LWD8kjg}_K6e4_3(P=?=a?q{krTHuS*&9h~ -QZNOePiLv!#H}^KMg+<4}u^TFnbZR9inFhc_0=q@+@c{vm=nIY&tSLmAh7oTg0{X&_@$&n0wS>O=06+ -TkdEZ?=T%#{4jbE{UDH7Z5aRdWER*DD{W8nyJKb#M~V?_UUJQ*(^Z1tn@(j6`qFq+Px53~M!IUcMg{W -;85^VxJUbO08V<`P>m>qIUj4iR!EQOSTB!njVUKVW+`7RUqGl4pu-_9?@O0)j_mAAhKaT#8M?7eh)xu -YrXiq-n#8VmLcEeU<JaO4;8w4!!TR;rA{&5%H5_3l<nYVj)70xRk05w^AGHdf&&`&X;btbJ_i^(*;;9 -&~omAq5JKfOXZ@`2$kG{iT4a?Vb|=@nc!r!VVaB+;cZw6e8@Z<e@m36X0PNLb;=?JXk1V;ON^N#6%ih -f9FmAlL^gE9I1XkTtS4q%7@X5aqv3O+b&hhUWVBDAnn%ER+VQYsYeVonhC9Ranws*kjpHshUYKC_PIA -G`iNSHF?yv=ye}XFoO(E^2BV0VqmQz3<fZiNDx5^02?RdmDI7=R~#Z;Z+kEu$!mq_|}MCJ*-AD>RJ)> -IpB6X6VcX=tx#Lp9o#-zXGOxFt;@$1B`Yr*|^2XDM&9IObFM*ef+wun#_^2@rg#B6{RdDd3kI=)NV&5 -%<5)hU83KD3ML5C&-SLf)qO9)_W=mq{sHG{MBMNi0n%dvVaPop78w$n!OY?krFAJ6WbXK=aAhw1$Z{_ -|3CIQvvTf3N`q_*tYbqxB-l$g)}wvbsoDO9;-^H4!`0LK@UUkbj|RKS3?(v5oX)z<h_jo;CWYrE*9&= -E;;Y~olHuPRF?2@LmHW*bFRM7`PgnYICLpI#o8?@Olh7pceO0^DrFTE9)_l59Mucm6rqF|}a(TE_4wI -ice#He?&H4uUwAk9H^Yp7<ijh7!WW^y4xg_Rbsb{s+fPZirvRXRM)z#Y&b*(7?I;G6XU|AaWr{bLa7| -$>D-0i<TkV!n3n+^H|bRBJ)pFZm(Fpc=shMN7_df(a0NM-=9uE=T~l@zuxyh{j#{;cZ@ER6YHY$tI?n -3dI1Hs)*MT~+I_brrnVdw8-sKJrT_hv@W>6!kRz1yD-^1QY-O00;maO7>O};>Tb>2mk;q6#xJv0001R -X>c!Jc4cm4Z*nhVXkl_>WppoNXkl`5Wpr?IZ(?O~E^v9JSZ#CSI1>KOuTYT>3pe0|+1lDU=H-qdFheb -Y6p)&m%jSr%Wl+V)K1oi({`!4dHrN4@%j{9LTd~w?bwAzxbZbsdj{n%_-j~6M4F}!cXxd|+hvV*V>>1 -gU$_bmT1RHC)l!`~J8wY|(!!F`KWE63BrR2TP20Q+WYa=WRgcZJxHS;0rRkj)iN?HlAb8#=CI1!q~A+ -twRLw+Qz@p&S!v|gu5`rOJ`8GPy_*6ss}*=4M=bzci^MZgvtr}6MAu1Qz2!Bs2EYTY_}dv?}>ilgEl> -qHTokgQ=7VT8UHLFP#}R#wYJ3jb=R-o^@J7hK=5OBpS-T(c&Fg_hZvU2g0uR!(BN+TcGP#k3#q{B;QB -00GiSE;QF0LO0YxFcXLN0hYgKn>b}YS4@jQn(TfcWf@n&X{>R69S1Vp&{C=b_)BhCq1R>$@|V#S8wvw -g*cYLM#`Tx!B9cB152Y`Z5sVv_(3)8lQ1;1?X>JJX$58L!f6s)(KHW{>#|nGvwYInA8XNGH)wm`55$= -Qz)?xI9MF^MPp7f4FP<R?Jshrvsf`dPx5RN_|{n$dV)QB*R8qfe)_H8ixI=-5*&geV))|pH?quKZOkV -Po4ivVYu<T{BY6vHdcmEFK_D7ffNx?gdk^La2F%)XQL{lRS1n@(AOJYgMn*_q4+-K$||!Y;2Sm*Z*AL -vV%ILQG&D19=B=2$ky?NTNu%j7;YGcZAo#z$joVelHMaU!bZ2#*rb(=7(Y!#cJvN#gPKg_e_RN#kRp7 -v_$S8JrAM_Ek%4As0!a}uwPmb;_5C!2&OpRmmyU5qd3+L_Bl3|L@zoxd-k@~I%~FmK5H>{HO0zvKh_( -azmj}TDiuVE>M4qsD4ON=6V`?r)nqpbR$0C}b{WQ_2C))KFO%_vN>K>8%#f>P%9o-qBcx!1UFvuN6;q -3htW*Z0S#L7x%m(98XE^^ho}5qTmz^0cvX8jc^W$|QBT=iMs@bA?&6|I8n*YA}+x72{@6MXPKlb}KZ; -HkLWPcTV|EN~#l}g2rxB;7iFsH(j1wywgPUZCLcrxo=&E~VOlO8^X=eYOG`};51b|6AFpGy$dd|opm3 -L7XTwVa2}oA#b}IQn$K8;wW3I%|GnqgaWyQ%OJ4<joCXfHP%Cyz}0y*PRVUU!Dqc-y%aHJkzOox>Yg= -`=zfvF+?<z$U^Hag&n%J+I+6~TFmG5!f6c_w$9_fYQB^HXQGMV?PjMq?^^E0LjN|CuE9Y!#YI}!R4aG -;bNZqj@c*rgOVsNqwgYgHSPKQB>uC)--{}g42=XW|HdeqxgxIC_HGP|GnJ8>?<E|>Z{_2|!eQ-z?4m_ -hZ!=i+JVK_oL_hS{xKq$YYDU4!n4^*6aXSpS$M*3?3whjsuT=L9UXvcF0L#(1rZIOmAW8qedyC9!cut -^uSMYV>4J)@%hwSQB8Q^n~jqyML2ecwE+y}~>RRJGz+sOJx{4$SLpbf1Nt)oOM3_c!Vjp;Xjgh^fJL! -gcgL-*}X)_(Iq=6KYBQd$(fPmW+17PYi88{dCoU(neoqB}UtwU1QQAnn54cm~M!AMTFcsB)Z)Z8vUe7 -(0qYLh=Qj%W<egsDa~T&M9360LxpaK)+RF#9f0sYl56y<pa|n8H^O+?#1N*+C*$eFogsBO^>B;_nHD! -O>@Kl8U6J6%GSu>OAY^kOos`QoP7Un)Z%P^MOw8>lqM)gBClU9v@d@q#pa^qZf+b8>zLX{1C4|V0+~| -bn66XflZ+tBi1o2@d{S^yhYT-2SuwEYLB3|Cn49e8Po{vSY)pA;;Up{teu@sL?JSL!7H_K(`;ATnyMV -m5`Zbad>xr48y?O7lx4M+!2!*r+oD8;N#&}S$XqU8W(<GD~l;aq0NNA^Oa_E0ea(5ty(E}+2Z<t&gY( -^Aw=87WUZTHIJ8k?VG|byHH2*)+(ev534c%+5#D>;{A2XO1<tDUpq=n4S2Zx@~rB^C_PM)lV4jQ7}Fr -#_-I6=f*&B4YzDut|1SCeO;)Qh-<`)`#Q#mK}odjNQRyZ4u88sF1s-12lmw9_2KdynOOIp?2*%RavC9 -U2sK;nn<o<4oLLBZ(l|1z)!p@lf)Aiv;*09jIPBj-y!>LIcEY7V<;=YmeTlxcSjYEb{<x0jmM>q)+2% -N3Pu#VpG`8Q~Lf`FeRydkwer&sfqGWkOCwWO9kh+77nxDJ5%+O9LWdZ>X$p?Yg&4*7%Nuf+KIRj^06C -CH7EnO~Rr0l+FB^$`NED+GtnRW+*(r&{&$#AisYK^f2Zad#8bK%WS-|g)Xkx{K|6286tAuih`o}vI^v -(M3zcFUl&dm5ql27xugt~d8mJUE*0d}L9r>R0y&gA8|5L6(jHgdP)kdSO1IbM3v#>8^x-M>X&uenMdI -TA&{3STv;PB+Xu$mJot}T?`p4-lvz9wTWq;o-RQa>4F{{r-}QQgj3i4@isq|#-zfWzH7aEyI*@dQ$JG -ae5$q`i{c<U{ZirOc}*`EuBC}p6N#@Qp4=Q1U=A92&)%@s!TvK?|KARv-S4~b;V-%XMb7+BnKP89R3@ -3_hm@0<{+kd<dAQ*r)r(_#h0C^y-gJrHct#0HZi^RB|6Ms872jtwIDbtBx5@aM`ZHIIQ%e&S&zlD-IG ->a-x`Sm<zYl`liNwC{PEhROO}iMo7hb6+54PEz;R!1s=XpiZ<}KhD)ISRG9+-Q&jzjw_q&F{gh(7^PO -9KQH00008031s8RyngPfyo5`0F({@04V?f0B~t=FJE?LZe(wAFJow7a%5$6FJo_HX>Mn8bYXO5ZDC_* -X>MgMaCwziVQ=C%5dF@t7_}d+y`{ObtCMb9^>mcdF1nUhK((q?6*7qf);cj~J9N2Uf6sP8NTIv8s1n4 -Ud7gPQ^PC<Y?*Gtb|7I|x+d;2C9QWz+_P+Nwy<vOUI;6>h)4djRkuym>m2eV<GWD;Jl0{0-DaKmVs!R -vDumYA>e8r_&a!o2Fy9WdILvBsXmK;l2R^%dPR;b+IQ7@JD4*;eIrNerxIkP;W+1exS9>ui7TCQ=_!q -QRim^vRn{sD-+<`H$Jq>-~VG~$Nq6;DDYJ(XK6W`$My$Q++xh3Jmyuk;|~T#JlO2oYMciXPT>q4F|+P -$R`mGre{!rJ8dxDzz^N?3~uBpqS;Pc_K`J2N9N7p8TdX{4<q^bnTXkJV81xYRh$IDh_Xkk95loBBdLi -bB$~sikTEKoNq<UbHj-lTDmo}sF}KUfsD&Q=vo2ZvwKclVBej+;@V(^-bbD4v=XsRO4AXuE`C&V=^T# -{^qM59p)1d5F9mg`35ndpF2Fs001%13pp9t8sW3b(WE%*urO$)Or~AhVb%#&%xjPzlhm)ss*n(;7qJ9 -BMWJ@UkjI1=v?HYjt;I2RFeS$~#a&SACJh|wv2a{ocJf`dW5q0UIJDLo7kGI_sJv@#c?#KOzXv}#<u_ -JRI$s3AOKxPU|CfqV1O-TI-<uwRUCbVEHjxxtwpreRkM3(EHs-aZ*+~*6In$U9+Ddozx=|v0l4!Uorx -<IMx+eXvJQJa46z=-8vB}y=c`?W{`eJz#JZMsy(I@7x@d{5tZI;SU{52qcX$1zsk`cQv(^*=@Au+>7P -+_*?JhX%}BtyHUwA}9x*j71w|EMABlgArRQjeCA~>~`<M?iF@RSDqIbi_)^(_NJ{?E0)ZdJ?>{MOfel -C9Qf}p`GcuE*^!A(cJs$DHrO!ypMvLcC^w@eg9^okWSX$*!6Q(uJs1Z_@Nxw~TksgtQMG_+Z(2R&Xb9 -i@!CJX)#;CB^!q8(i!(uCR7@J8qhIsT|@MdI1#v?DeO^0~F@;L`L)@;Gen8CrAZ!FVN^OaDADfgg1K5 -UPTK&z-dI=b9x#)lfqxIt#G*>fp5Lv*>wAq(7ib%fk8sOU*W$yv(-jVGAF0C5&H1Algt3mox7TR#F`e -;7$V$EY+a<DnX#BN2fVMk^*o;%_GCG~zk-MFce(L}T(6P{|pGjEIEiR;0oSzlXc)S7DWL<%zqOxCtrR -9lmRX*NyW!yr6kteaT}u#MS(|unhNd=oFJ1F~=l?w#!4e>_WN1z&cl?+yl}yMxaeL%}Fl{fu?j9PK?` -(dG&>d3-L8v6>$`D_MM90BxgxkM3H3}PM0?h60TRVYF=<~T8=<7y3GufwDw0MXm6w7Tf}~kQ=Bd9+V7 -UUF{Ym4dOYiF_NB6mmE)XOxdqZ{$g66$JuLqg%Oc_4Xcul%3a?qHf<a>8y(TRAD!QxFSvz6!KN6nObS -m(=GMye7F4H!d?CcFaJf@RBX{ai73yjD#n&M@GOS*vTtBttOdg{2GqLeT=-M8<0aw;((Z|sM9T{NUO@ ->AWk4!Q=zi7t3^%UuTG_@cTMqB*y>e(h*F%~{5$)8nQGM1|X<<C>+g;P&36;YZPKuyX#*2E&r`_>8=A -02tpj?xAmsTJc{v&HeP^1=Za=TZXu<!%(L}n;`jZXV0Wj-pK=i=DA&L+<a-m9d@x@%P$9hacbRdaPa& -ke%`p?oZW2qrF+(B(jWE1+da_?t6bkiR%h_M&6?|YxAjX&lvg(&Z18MvQ|ZbPHa8HBQtssY>preh=4S -Qanci*D`n?WmU~I+a_}<t(e|MtZT~KFZpt&t{zH?IDcF5PSL-0Jo;IVG#M&Ip1Rm8tS^EwgEnU;!LL* -jM(4ahQSH+cuo0rIb<cK;~Z_2vMHmy3eUe+IB}0qB2FO9KQH00008031s8R<SU;UlIWT03HGW04)Fj0 -B~t=FJE?LZe(wAFJow7a%5$6FJo_HX>Mn8bYXO5ZDC_*X>Mg?X=8LQaCwE0O>4t242JLd6@pzh2)XRA -5$GxHJ{Vie*2@^9sJ7CWI<~QumHhkJ&6?3tXii3Yl=q|dwgv8;G8<5>vz}r3xtOi0r&;y#{Pvi`vU8f -UOx4GWGK2VC!LoNGr%EvFFn}`bt?UHJ_=H8zjWuvv+!q6VxS3DqCA?E>e+alCARP$S+KMfpk;g(H8jA -B>Lk6U`Zf`YoE_wa?Uv2%r*4?00p9yxbn(YapF$AcrjK~Kg(<_Qb8A`<U$mYP7QBNK)db}A@kJl^4wW -f0D=qrZLp(u*)6R1YP)|aWAaTAi@#q$RJN|U+78EoS=upcKH&8EZ6FijQB9V=^4!<PCiOMMSf&c}xd$ -kfv>P)h>@6aWAK2ml;P_Ev>a#sY5x002Y>001HY003}la4%nWWo~3|axY_OVRB?;bT4CYIW#$Na&KZ~ -axQRrl~mhq<2Dd|_g4(!7aMTYc-sQa23yo|<g5|jAlX>t$)M$tO)NzkB$Yt>^*ywFNxBZ&@=2P@;h8h -TX*Mq(x{n`+6B-Ts@g$Auel+br(Fd{3Mw8}Srm2-1sfD7xSu;sTh4~?s5|ObR%3zBc$IzjcULx{=Us# -zPTQWKM3mAx>uy>i*F-%2KYMBWyjdu98J7f1h0H&F-wLP;eJg;e0?Gb;zO4xw4t8mrUQ>)*m?(OX#fV -dbQQBNsKLad{N9orXP*Ol~*_ExS+Z*0r8Kf^*a7WO;Mq}o_n&^3XfCvRw0`K{51`XP;yD=TajRLU(gI -g|TW5WAzwl#~fgme<nN@DRe2(Cc4}MSfw{GOvQE)N7OzSbMgGJ8JkiS<r|bn9?I_wy0)Su9VD>Jdzn} -$0Qu>g3WEuN(};$^gx6L2Jm}z?}#P*;qDi<4i@?pb&t0l5IbZnwS*7+(al{*Y=d+~3f-{B%;=&7=StT -k^&WN$?ePIX6#9xWq7_r=I4@NP2#BR`!}-_gVotruGkxnNNpCWLzC$dOh8O*-kz}z`62Pd+3hgTp2f# -Q^`d^XJyC05*^XI^RFq}`~G^N2bp&re8$$Z#fjCu*p7RhXy#t~7<e3Uqdc}e7x#5o`f10~n&g;cIC{T -c0bAgI=~6)%i7XDl&MB=AIb)&J_DGJ3PG7b#~!??~pPjqlK_m6#n&-%s5I%DKNC41E@L==Uyyg#ND3f -)wcknFD&DjIkZMH_nI9aSypSpSs<f>+Y{NU7|$_%SVUe$-{qKBF#o4x2B*d+X{Och%jtuV0cCGqW_dU -ym9ofCn|>>amd5F&>QD5ZiUFUQu8shzxSlUGp;>{lwuVwbL@B4tRVFveq1Uq?<>!JcvJSXz4x5sTycV -)-TrpFOvlUd^dTNK8jVZ|=W27E*1C*_b%AYx*~n?Rlvp~;Wy`V3+jRXWO^oK+AC4=rhFb0D6xTkxkZ~ -w{2~uA!l-hbv@tljzI-SR#Yp&rHiuxwV5vCAwUq2-sY^MGAyz9tefLHtmtUj1KgyuP0);@aA^DV?ugy -#K#=3hQ;>^}>&*uEadz4b5j3~YUM((%yCr4|LBwFK;0O3S{qny&UWUws6mgx-{5^KT$ec-%r?HU0)rO -9KQH00008031s8Rw38C7UKc{0Fwp)02}}S0B~t=FJE?LZe(wAFJow7a%5$6FJ*3ZZF4Sgd8JfsPunmM -{+?fP;uA<)MR}2?N}EXA6g)ywHDMB;Qj=WU2-ogx2ZqFt-^Fgji$EG$zQlg)yL;~L@$K#H1)&h27GPH -hk!;q6R@?&D2#vvtc3L&dm1?ZJQm(kJ(87k7cYKMxAQ<q*u9P0Ym`fN6F5MN_uej{p?zU&kHLpdlRO^ -FakAemZt=51P59;+sY3pKtfr;SDAP7pqjR7V%jm<2#I0%5g*0BBOtJ-*5jT?;yr8SORRWBB(X$z*cGQ -gpc^*w6C1rTd2t<q2u&s&6A_ByX_F}<EeMVO5kgYR(YpeP%4NZ%nB?EIn_-sBM>M;+6c%Vk65nAF0e- -fy!w_%vs+bpi|L#lQnPu6(l*k6;yW=V?B_-sLpjrZk_wNhL{>mf+!^L!Za!f+bNF6&bsl#%#i(u|Ms< -I?ZR{nB^=@!q^`lx#OSVG;Gg3cH*$hbQXn)N51Vs7Neh+4(j`;VeI|%CojVg^bVb;_gHu{=X7WM^i1b -z%cASTRIA%sE}dfbTRnZg2c2#<<O@I6$~elSQO=U{PAZf1IvE!%@060Hd2#hxCRe;%)e`?x(ry83@9R -T`Ssu>vXCcpK>8zv1^6V|O41YH$ON{F~6!l7}>K_S;&Y+zl+zkj`l73;KgisIE5O<G^?rYT;P!iv&H9 -8M-_ABbxUMDfTjN+S)aJTh}oTeGu8XS8UXD*91(j=-JP~ifWXbWOolvJ;!(lwg>QkVny`h&`4eSTXa1 -C6%P(hMk31Tt!yPx-va?%4}jyOi2;^mYYmKko!ix~h(L#Ta?x$4__tMbvIStW|}=P<{1wAY@czfx}0O -Z9s!|>eM@*0}asUj<m$B>iLR=^3kr^<_I)y=1Ul*Nj^(sAX250rml!WMJ*L*$@)#xNbS*t-efyTj!sX -vZAzkINN@7efqqnEH&??ncEGWJJM7#&lcQ7L&0W|Q=?8xSP)h>@6aWAK2ml;P_Ey*v2=;CT005>B001 -BW003}la4%nWWo~3|axY_OVRB?;bT4IdV{meBVr6nJaCxOxZExC05dO}u7$wpPB;tddPP!zQ(-C44w_ -p$uRk^CN7JCe<nq9iPBu9V!&H4rNV%oIF7hrbg*_mga8T<Ua`U7|FgXcrv>$?8Lg}eT+`yNjCp4ZM{x -<D8zKIeiZ(3KGa*RYgdd6F<ksyT#Yb83aFC%EC{d5<rc$Q3G(F_;Pr^7ql`kgbqR%jH_|kQpw8roU<> -Rr-g3VI);%4;3<l5zICz;_+2XS*+EDu38wVcN@^Yy8444D%~CEBngbIuZA&dR4*81m2{;riqF<Ys=97 -mlLcVF)Mps+WUlxUE`TyLU?hw-W+6phKT(tLnPO^VS&9`RXc?PVO6&$Uat$F9pfKV(gC`;kFcJMK6~! --Q#N&-MtwluT*sKkzr7k#p@SmWMnlgn46sV}0(R!Bfkb?U>M4=IwhLyGHMafjpCNjwrfu1Dzl-(OZPU -rUS7gU-oaOt#*+j7JvNCkCfZ2r{El?`lA(i=#q8>)zODk&%{jev_3c0t_J4+5k@Ur9zVLs)B!*GZEQ$ -QM3%)5qb{6gvJheCUkF9e?_KL%zf`ol^fYB)(iFoPen+#e~^V;sh{o$K6MY=-hdIZ~APr?|D<-olKxN -976|2o$=J`KJ`0e7(I<g!-?wvOb`o-Etyp$Zz+xmaw&<)2o2+j&Pso#_G(HniD1EAklGv~Cq)6H5m{} -1sE3IZ^R!+HDG9v+9)pmk39pKic1V3k-6fQ=zfBT-=rrN?HaRizIiVIzD7?pGg6<_!swUh?ZLI5{L$R -&PcDr@a{;kypc$$#q)CXMu{*6oIyjF{qT!PuGIF&_Rv!gRig~XC3JPG=d`#9l(DUD{O<ct`~eY<3wpc -$pc!jXnW%(Wp6E?KzX0=M4j$;6%vvXeXn#hPX*_v$k-U$Z&(ctR?s@-x>otO@q20;Gu6p<Wiz^%`vic ->E`r41&S%-t9M2gEtvowk|KbezpDGsM`L1ykl?FYPB$7T7#>@y~^u*|7a~)h_kb^^gErrJqJ5fn$&k@ -H#F#QflE9Cwjyq+)>OqLU<{4z3W}W2EU{PG3P{@nndZsHYFW+&|H@_w0%l8_!u5iL1RB4rDcs(rtnAa -7q*Y>M3dJK7#_l!JDrtLrk+V%d{SjddLBMHA2SHt95;tkTh<OmF{kcBq7u+5g9DnG$4Y>FVd?_%a#(w -mgHhsO}Y@v5RZ+Ct-$_TnUS64s{zlD#Vwr4bd>G4h={BoE{_tB$m;|3FNFzS0f&%H0xIljQ5hM<V*$E -vOG$g9!#If!FH?jXIXns=R1$CmSxH5@DdM-zBI9J?L=|6RW`V2y)LGt&PH5=s!#-Za$j*1kiK4GBg;z -MHPMyXzx8+&)o+mE5VIB(LU8QRzCPquur6+`Ch^JN5jBeP>0}Wa^D_dNPAO`^Fp;QH9-Zfl}=BeAuUU -pY|QbQ`RWcsaoR+pTnz8(4C;D?_b*ZP6OV^c;S}%{Y_hs7%-bHT{&1F*b+<D_L@{yuh6WOIFZk(8;V4 -J61@m7J3Oa!Ln&grQo|kCIFZa8!L^*LtL=y#lZXjz<CfEEmH07Yl<(fz#!#0GE#CC;{L%i`nc2Q=Z9b -(J@9Ok=UsF~~TaZ14{E+1ACwuETQs1#-rayYxhyzjX3Ns(E5>4R0CNtN=M%Cr}k+*xV3XVG-567ocIU -1K9Bi1XOE2rb)7TT5GMOzO8{-pI)oy_)*>Lue3r@_EI8M&*_H2%nw9{b;6%9~E;it6mXky&r}<lhJ0^ -c!&%3!>yc8=5k&Ab(w~ANRTfac7y7klV?88&#Eao*n%MP)h>@6aWAK2ml;P_Exp?*ZFY<0059L000~S -003}la4%nWWo~3|axY_OVRB?;bT4IdV{>gTaCz;TZBOb*6vyB5DNgi_Ccr{@5H$M&5tS<fX)!n6H)JS -NX|}XvTD)O5``!1PQnZw|11h-pMnXhp{{466%+v2Q93RKO;Ieho?n0;CY<0C3Ty}cRJ4nzTXO3Yo;m{ -N2lW8*xn$DPm>B7|c+q5i}cf=FuSeDPMq;1>uOjKU+XKpz&F2FIsi}65xmwT?xW*m#A)46Tx%rhO^#j -j%K2>%NjL*Eh0a$Rud@iB}RzT@Vtm>{p&0&g|(;G}s9#d^Jl7P0a?G%O2L(z>8>my2gUUiPHv*q$&)b -I%bc?&&#}0NgY27xYc*Ntjc}0k+Ts&w>8Jn>cpRe+-Rfjsz16ijpBX2iGyYpV+VqSU7XgnGJ%EO?PRJ -f$)IY<3AjM*H4|XX)LH{ZjZ4$)M}55sk@5dP4@vh+{Ko{4Y#?#-t^}q%hd7Wj;V9o<-lB+QJFh=jnp+ -YL<<@M*ACkI(Y*j}Vm;manF|+7K*<+ZcMBY|0FHnY=1~W5IA?U_DYkk677mA4U7C-L!E0B?VA{U#1cQ -(Npdt43C(a`nahSW@m|IzNKrMW44{m!8188&~;d?_>8{NU<1!^(WSc?O=bTX$i%S2=BmSDEGz?P%IeM -@cL;uVd{cBegfq}E@z2i=yY!F5lC2J{>1pxu1vG*sw6sQsSS$^&SeuVPHmjEnM1j19D$IvC0^_n2w9% -dS7-_`29YYYY?i%yFD`ZsL>zhHGTD*l7?g$A0qri<i6x^a4x+Y{$bP`6*1CJvje1#usf~M;MiDThHT1 -rHC?S|7GDQXykBh8fbrQIgY?@myYZC^7{rF6qI7IkSmr7MSuqlOOjsD>RxTRmmFs@hH$2k#|^`@pIi? -o&y?vC)5i6ndo-A|q?&%MMz#0L+AFLLF6H(dS3{r-s(on&8*NOza}2VPx&1M0b~N}CPBOS|p_qk2+#9 -f;1zgF6GhY^~31l^r88TUs+=>ym;--w;ic&X)+!Sfs6mnCfZY6RnN!?21R+74v$*nAPE0bGU>Q*7Qiq -x$_ZWXCpmE5XQw<@_+rEX{Bb{26f`+qB0P+nx@c4n;RTkIQUHFB$+NoC|#le*Q(tuA$|lUrTt#>kCH- -59wssoRL$MpCyCxs9Z5I=SgmH=W#csoR*`#!|O2xs9c6oZPt7jguRfx*6nVNZkx_!>#T#L%W?e@He~g -hM3m|c*<qhHpzTTReNd{{8uSb7pLF0Ebxshqdhi<JM6alH<h&q+VH;h?n2t=bGXgF(PrD$rbN|$m6IY -#NAhxJ(B6|cvelHjO5`*7UbS3sL?vlfb<xi>ZT!8ILM}MxHZ-w;e$Q0hv5d~woI>kt#TT}};t(*^VW- -s{B4u`3wECi_N3b&Qhxfg!R_8o{Yw*f{{GK1_7IWR9$3_-EI)^2~WW!Yk(=i>vx@u7D6IA#LZLqpv!o -<+x_L|*Vivyv}rc`}&`y+RAnNvzd<tV7JnEf<oPkwEaTI+JG`ge`9+FDO3C`z-thFi*Sfm@}|!>#fcZ -b@Y!+)}df?+9+C$wIi5A`9bInk<A{DY7tbrO86Ll_Cq{R+=n?TPd<IZl%dWxRoLc<5rq1gj*@HFm9#E -Lb#P83*%Or>=n0OH@$$m=+eZqJW5$R^1%C!t|fUTwQsLPwqx0fyf)f;U;^BQ6<=xWBmH*_+_n(6U)27 -P84#kt5TGW&>|rM5lKp;>_>~H|Qp|ijM8LN0)XUaXs^v-%st(bl6t2UR9omrJ2-|BM8_(SJSmq9&1xe -_g)U61Cqbx_dT(kQI1pn6m7zBSg@D79EXUPa2%io1PBX~8$-?dZ(ultYxz7YHi!Cz!w2p*N~8NqSW`< -)Q{ld=5W2!8N~wfh0^{qehu$5-6DuY5p;-S56{l-0KmP?~Tr6u!6lyB7@KW6t1X_~$J79rs~Eup9zdT -+TrFyM4~EmNw8K^1ifT$=>m4L$Q#SH~0sbByZU0T2kKdtsj>+d}A|~mN?w0zvQ#~(z-12?7p0E(*r!a -uWZP^p4~@fUx~w4;_#`718#c%hs0rvUrqcvFrJV+e9D9G1o)0m7d{}O9|7)%dszQ5zl!j)hBy`@qS)r -g5uvsCKK@!F%q~Bb2yX)t{MzVE5`NvOarkxT2+nLDzWxJHO9KQH00008031s8Rwv=Ag<J&y0A3FO03r -YY0B~t=FJE?LZe(wAFJow7a%5$6FJ*OOYH)CJZ(?O~E^v9RR)23AIS~DyPcceV33P-DtxmcoYITH=gq -8q;MO9QqE3+8zb+M7{O-n!hJ?~EzHf?ivt4Lw(d2eRkjK_O=TK&*f@3udrLBHD@PJ47U7<E6=Gq$I-Q -}WiFMp~?dWFd9cf|D?`QQt)vvX;^-3b59yWu|>8tbpY;f8wFqa!qPUwt@rpLvBsLwj4{FO(aFYtWeV6 -Rd1D!UqDP_rIYnQb7uL1=DV2j*cH=`YrBK1wWWHuLG8D1{{%&)d5bz>NE2skXu=KGPkfPN(pA!GF^{a -$b<?=O3ei2&UuZ1Cl@=R1BSdJ)DjM(XTFEqjNE3>=W_ssTT58V8sHOdiz%FU0A_|x!%@@KX^bo=llZ) -S#27aR!V!3lmkz61h7q#VjV=@hIhcg;*gGlL?ORka4IGTqd0C*q*E)6GUXzSL@x=`xI1u{(op&JGISl -vtF0{hPQ6W0bS^t#o~yrqmyQkv?_y7*Detphd?^o~MQLubfVr36K$3lcJ>T|;~P03j0niZ-G-r^xVS6 -gI&CTl&=Z?nX0@I>QJ0)R{~=L+{}dwon?os9(Y)Hrr5u7+Gm1?GAy1;J!EM-T~3M>JR$fgNy#A?+ts? -Dcy`F)S+=_;`O_;L1#ka*<?JL_F6<!&NGRfm{lU@5-&lyQBZQhEfb+hQhz{s4FU`ov}R8nWe&JNM-js -j+3sFc!%)dpoG&1SpqC_;B$aK_S1r&x=)R-sf~BZ$6HOnqn)F8-MofMQQGzMpH)09un@}m;q$_2tGrj -Ksd;YrJK0j-}Id2oqrdWCIq2BQN7l+7ct+v!^Lw2_nNDEbSM`tDxV7k)^)=cNE;@U7Z>dm?z#@Blr9Z -Zm&!SqORI5Bc%EE;jcg0+x5Lw4hxsoS|vc2WqJ5e`&pm2SmmO&V)8&p@g5-`haiZ>4bDY~bJQK_r{G% -fWEF1qo`KIfz0lu6CApu{-5<9PbtwV>Tsne|qoVkFI-zTCEm@%$Q_3fz_+oFrP4<(2Ps+eSs<G`*p*^ -WrNP%(@;sC?7PQAn0xg`E4OPDTR^0G`UvV>g@W~RhzHpH`uWVM^Bp?8d%lLp&SPPZum^%4!Zaqg#bPc -(vhWiHGSm+vD0BaX(gJLExu>+`zGNF-I7Fs}Kh15VC7mFXvk&8w=a@n!R}owNjO7E{GKrW@ifoshFJe ->^)82C5;gZAk*}a=&*-gmZV@$l?<%I|4CXzku0?Z!Fn^?k1%j%l%qjH!Vnj#6t-30C!V)$8J&!TP=!M -F$a{==J(7kN^Sl_l^vnI>-5lnoo07!rfcxlN2pTv<XcWpq_J$(D2_kN4tO8YL(uZW;ZqG&EYh$z(JsN -1nG+s8%a9(SpyTRsG1sJtwaW;V+#TYg~w2YY2tQF;4B3IcZh`lN9#a?+0dCZ&jO!<K;$mI=O!P9n>0* -JpaCTgqY)7?aPal?0ZuXJtJkc@0-zVc<uMS|H1pz!&kwvb0@JM;(Oz$YgQ0Gh_vPs|6v8A`mu0uE1a+ -MW9lL|%=v`lbNdmFj@q|meKe!;0kB8Z%mY6TDQBuYyf3EXq2WJBt~%W8P=6Nql5W!lMEZ@|kN-97U!W -}y{5|Q<GwEZ3v-V?QiXz6=dFPax@Ve*qx?X>HdvVxs)dH-P^|@5hYVG4Ijn&<^^n#A(LyV5QOv$BKa2 -asezE9StccY2doq4`@H|gPJa9zST{@pP;yl;xEi~HsvqWr#EhKkwh`{V_;M5dPWP@K6#1rJ2Y(W#>ny -1HGSrARa1uy6JKSehm7M(rO^O9KQH00008031s8R%pw*%54|`0RA)p03ZMW0B~t=FJE?LZe(wAFJow7 -a%5$6FJ*OOYjS3CWpOTWd6k-Lj}=FfhQIf(NQo~-YM9EXtV@oyD*=X?)?i>8(8&7*HE=LT)AV6aH}<f -<e&cxx?3K(&yGSngsmhFujLRFB%v-m<{jc1A_?NRM<?-2rhfkhAEcYKjeek#PFUH<Fxm8}g-<7Aw{m= -WWi_7xh@OD@B*X75<fA23ZFY@<?51+2~Z!T^Q$MWWKzq`6AZ*t7tldn_HuJ$+kocY7<m)+&z<L+1v@5 -;?LXy*7QyPNAb7aw>3i|qbzb)7$t9}h==B;oSxaNOR%IqoiQc5ln;&r<y3QWr;Pef*qDy}v2nJ-A(J? -`x9y=J31a-sNREXY6%3-(ByHzwF*_J9%)px;gG&f68rscYXWM`KFW~FOL5x&-Rx;ANL>1ost~hl$%3& -_W9=h;p)r&Q&gAx*T;+FXQcM-xZ9QM!@HYbld<p1=fkJ+=HjXxcW?LC8~GH(O}V&w`=`S(=YKf7-M{< -Ht4~*Nb31T-vpasc{wl-2Jb76j@2->6@|WG!?wGrI_UZNI{!LDPynnO1y55zG>++Fz*YAIq)FT*q{)L -h9=#b=<?)PQ4&+n}L%kFrcZ%W*)UswA=@wB9_zq`1B|J3G3Cf-h_KbOnY#_{XSyWbSS?>l{4_E(a9pR -&(Cl3;H1*EFm0dRIPO@7{g7JWUEYw*39<#b2Mkd{OQ_`KkQ<-ud~xCog{bKF6k{^K0sFqqP6<F-`Do$ -z2^Uu5Laj<4NGhhvyIenltX*KYM)k;wQL&boS!O!{^V-qo?QPUU_!!{KeUWmyhqAmuD}}pFMs4@NOy3 -ce}45Mws6c@^2!3mn1(NQj%|XHy8WM>uu{lrFyTE!OOSh{lzc4RP&qNJ}s(Tq>Fs~{QuJ7<>BgQ_nT9 -G7wGq8|E^peZcfXu$9>vPTHhbEn^b<+?`azSo4coFsyXQ5>K~V>g6BE?(f(bMesp;_98b&r!}SeAf4r -A-hp2V9Q^%o}^747U`B(qS!zVxdA3^2TNfLg3fwFQ}?~aEL<>EDpjN!+$?|<Hu4;WJV=5^Z0o6Ap$50 -|;WM1W5z<aCb|;D?W&Ft(fBoA+0T%fru~AzEWC<<6adFT>rX=kJ*2ufKcb@2SRbzt@=wL$t3idT)(6L -tB4;)w{Ypd%L?RKYX=a{NfyemVetQO=I~}`L5pi^5b^CU&gxux$|T<H~7c7S2+lNa$=0ra3}x1ExlO! -7vK5(F(L5s8*@)i9=?3=xARvoetLHH;NIg`Kb$>(aej9H<%_eYPhOqh%l{>%`R?%BxO?{>KYaE4>^~p -o`&=y$)`RyKM@%No<-eXD#g~iMm%D<~z58(U=QPlFU*@O(B$21D9-Tk@k5^C6e|UJFbiO+&rH-fh-;j -?OPV3m`)6&*@T9?}Mk?+bF>uH&Xep;di@9Jq;h9$=h`8B%Z;<S`?IXy`V3%{W{w6xQ4KCQLpyBJ13wE -Sz%$@4n#SCXEFl@Ak-nTG^cm{}$00z8t<eB|=A<zt4CktxHJ1jiXNV=^NBwkGKk&KOxq0`2sq^p;D(d -;XqsOv}-IfUm`O@G$1PWywuMlj_QDQvxI6T2_R#anzGwt@*p>?#r5=lQhh&Ij}735iwNOTpIKn!fgn$ -F@(7*EX+zJ1$mOvWzp7nI1l>s%*t$3f-cXzR83L{HJAkF1^(r_F=QH2hRXy?XknRxRTwj&kBLPl7MYU -%yuEWA6ecLla6QBIoO9P4cTz@~n;AX(7Zl*ItQ}G1a;>J&)&bUsi9JGahO~-GeWWI4<TJTtmO=rw@_D -Jqo<$c#wXo8nj(nE{CpEf2Ukh0vy*RhC<rULakGc6Y5zPTh<`M3D#grD+pJY&fZY=p)J2Mujt{8UR2& -Qz$?PbFf*m4?i66`F}(0q=b6dEQnk5I+zV?f|2Z>a;UFA_{fIwrVQxnW)(7|lSWIpGEi+$=r#;7?@Hn -bBdPL%Kt->0#Y59oHM#cZV;T%h5HpmwzENm|Jrvbx29o6<;2a)H?V`JIv?EpN$7>ZeL~|3y&3Tb^hv* -c6%wBwzwQastAE0bUbCn>DQWMK%2rUIdA11ro|q0AqCO~v<3fbbs9(#uuvrpIIJ#@m#=;ShsNz)YHR8 -s5H7SP?i9%6zQrPk_yI95x-D8B0v>>%s8WSFd~F4M){#X<hK$h1XT&}QQkgr<j?3j{m9nDXj&!F@Kr9 -NzG%W#0Xca`Alm#d&*IgF!L&wC?M8Q2$%hlx(0kBj?tPgW&VAH5Hc{k!h-96?arA>gt%u3kZ1dIaHC& ->dw5Eu&%vErEpn_EHIF_lsp0Rr1hunAUTdpO*He>4E2v9Xpq$}NL#E9lm6)DdY8A%{pHt+s4>%!Lc+T -(n#OBj3p|HrB+tL4akCm<<sq9gfX|C$RwcS{h)tPO=H8D2o+7fWAqSK*GbymREdeoqS;36KsONSaOCA -kQks@1;yEMECPsh-Zg|f;zxYQEo-KzzVaCGs};;#XLyjp?7ImQ@dJAV4_ELIsn-?!Ta)xjA{D^XHBRQ -S(P?l42nd6X>W7ATL1ys-ECrCZs1&?EG#jF2xRhVC^TnU6EL!5wD>jfwiHSf}8Lln|eK)p(*fmrpTUn -8~K7<vmh_B!QBNzktl)3o<!$WfOggavA*k*nJ97+KaHd;nFc));y2-gSE5)Q>kKIlRtxFBMKADMMPF! -h^C!7B`k1!JkRxTCSN73^@v`Z~B4i)4Hx|Fw$C{#;o^Ed#4FRCVZ%v5-^bzHwP}q*_}*x+6#e#N?Wry -JMEyzEjK9l{;$fc)&nhHWeXcR-#f>w`{(;Tp9IcWr%;TGM8KK6)kt1q=9KbZ|aPYjIno6ql2xnh%8XW -jkRe4eF}+eh@W*eUBLCsn>woR(5e97FdOEG@u+neOh8;1!vp3JZkj6mZ!5uOstgXnCfubH0_K&^*e2M -Wf8o$F96lO+F^)A!4N|Un1~IpfTTH=Qg*bes;x52mCPqXh=9x`4;(k|Dp^bqbRS<zA0yh4aTLz`Xg_? -d_){PO_L<<Cijurs<{0l8ZtB+<!enl$yd?(?o#P~|QtpuM0Q;o5KTsTDcs}z`wL-Z!r!9S+j8&X+yk5 -ymBtqDj$=xZpYqlylco8OvR^@ggMS3$<9Iv6qI4;{$t=7*iY-@(TYDE3K%Mb)Z@{IIzx7n#f)oPp@Eq -E6TuK)7K>%MpG?UF>Wa3@rGJD2tml5TctdcI^q<glYvNJAwoRb1tb!2tk?%0Ne59KKm2@253eSv<S`F -%pF;?la8!K##u$lA^CJt6=*;y#<Z?liBF@W;Y&+vf;v{j*9O+HlYCGakj|y&07g&<++e~iH`7|wGJLU -7r$kdJ<e#SRW}WP|YMTP=j5!R%$O=kTriA|P6mo-U7ByIIwk(oinM1dPlfH=Oa9Bwq!U}IROK09-qKY -cIqY<gw(~m&eS$hH=jVWCjnqzk|#|~J8*3Aam_7@bk<T6*P?0Yr&#)GG-1E4aDs_I*AdDS1?fY_n+A$ -IJfZXAO2olLQJz_ckers2VsO6DKE>w4WvL8WM4geFvx$PCVb=jhE%g)42g$-=~e0vL=SW8f);2v>m6+ -%lL?J`y3y@@^GJfg!Dfl|qcq$PpV*5&~9}@1Po;fQ^w%jsl|&7*JgeeJV<BG(1vzRh?u)kHWtT!834@ -d}P$iXX8)fCdrbCy=i%l&JUy%+g~^@GF$|tkPM<B^J!Qc)o0ovh&`ul@-t@YzzPpln}Zf&D8|ypxQsL -T0K19g5pYz6WOAEIWZXi60d<rDbv$~s84;6J8Jntpl`0Dd3n#h+nR<}6=9XO`kunBDp9I4P^JLf-2kv -ObG#Q*HV*?zf+2jzYraF?~$OcA30F2C1pqSTUMiXK3dNHyKTC6lmhJ{sGbDtYQ<^@z68{kWTcoj#D?m -N6k+rfxuqoYo~7&M$K2x2z2XDSsdNLf@DR-5*O*sV~(iiV3;dnVQv_6ab{d0|hc{%}~Vqz1DWEVP;`5 -Jqda+7-n`8|NWwg{JzO=<i>A#Z&T$I46_@92b`FcAKj2$O=dQ0#SL?tsYPy&b26~Y*{gzrVn8lO(UCp -kb=#KZ+loUVeuk6rAz={)s<!+)EgCWXbrQOeb@*R$k-X!WIY?02nln7i0K2%VFT0Za-_i8U4G3iZ^~q -qh0mKK@p)0V$ZJ85m|$VclU=G!>c$K0Ndj9Kb&BmDB9K+h;%9`tAOZC#Hv~^|r=TheDxIJZ2}*{tZc1 -4pxH4IX7CSb`;e&mTS!9Huj7Sh0s1(gxYzu*9h9CfI8PhZZ@I;8NTlopdYv<ap^~{QHJ1lfq=*o;Fx) -D=a@)^~786>Vq4k)Qa_WXcICpU^(t%I=03RYBmElx8lpTc$@o`PCwNalmg)b-%Y1Oe;I4<JzYuZ4%pK -^m;9>4{PGWn3d4(5j41<cey}D1D&Hu1J`m;d*pWauJImjgc7u8D(%11j(pVg6gE$bX}}Th$+UpCLUTy -y9hQ%st^RvsES50j0CBIekis>&mRX!8)sJLiPNZO3bR7Lf_0kZVidylm`f>^GMwc>*l@J_aXmeS7(BY -154aimYTC4I89cN;CTR~ExIwy-4+!G<1+W_zizD_((5<K^V7-vgw%KW7JWVCr638&e*l|W8Hbt>%GyZ -0=VhT2EPn7zT3&Uo!QAY3|O$AwwwsVj%S0~f^%*ja3x(iRKwow7QD!46H9_$2MW22>M9H!3mC_yqi(# -LV|3!(zUs)7W*s@vNb_8kPlr|Rl63kx~9#Ux0`0pfx<5LL7xjh(l5>`|5$C@fG|l%aniBzt6rTe7cwN -l1pnMO!j?#Zg5Aio&R7<fA_!z1ru34=sxnY}7VaIoz^UXsvds2r)FaOa?|3Ku!m4rd**)T&87{Y_eMr -sCN70z?ZRT1_i0O^CvMFHu2WdRHi8yD1`(v5&~%!Y1BcB`3M>7XyHS+Pd890XxS8eab*ht!Xp4)6+_p -EQGkXw%Utd*$jHd^PV$MTpcxv!g&Z|F0f^W#GBC!dP3De&1ij&)hZUBCvqcmUnp_-$EC2+BeN&q^#F+ -*enngiVEa-RzEuo-M6IA}SZC@b`Dp61-L4b$)EGVafyg1Czi1uN`0pxQs9p}-XOvWUDv;Y?ZpA4KX36 -4xQJ5m@<Ar;xg;@Ju2He!qcE?E6|kV6l)(7F$r{rPaqBp?$#fwr2hvOJJLD31^bKq;Do8Ach5<^i8V7 -cAXTRC1bUQbvtM&(x;TLN&V}?^b*bQ*}*?DEqCOuTdLWk5d%jBN?O?8Nt%Fo&$MnQ$1ukZWR0&iAn)# -0Odh85h25PEQb*J!1aRQP)Lc1e`T`?6A%kZLV#!)ll7BzqYXl~10LE>;5;jb7)Et<y}Xd`0!t%u^?YD -ZQNpo00^y2jA0R@!DByJ2Olejr<V}kWTsN<o0=lCu8-ievMXg$g2~=~D1%hl;r$GM8R?%Y^)#HyQ8rb -e-%3?2vDFi8+lv$+VJzFcmjX_KQChH_gJSk)ZLA;8sIS81BMHCe5p)^%(<65KL$gn2h0RJI4Oif=Vji -T`oAvdd^QIxJ{J6R7SpQ3mS%7aj4B`h#7Uy3I3gUn!c8gg4Snow&8&!YhpJXlUqGMc;s7$dDP;J1c-e -i9W@ys`nTdDE~tgexmZGzxqby94Hx`mH92`UybA(>q((F1*@lU&YbRZZQ!&EJQ~7lYu#BnTPn4y%k=W -_+StO#TS2CGGI2wI#$WY!eiwDe6jCj5gzye!i^+ZqqStg6A^RqjMgG8fG<yAXEq8brvFj(qu@eJ@n~* -BxSRs!WN0n+^9U8hQfpzHBsjv$0-WuQtINYCCSGVI+1N0=&vYN`j(arT>~mljltnRarxPe4S5FQBSfC -_ujeIZ=fF&~K7z6^!js_`mlrnjai{|NT4cdTC?un0ZSw;yu8rc}8oAlWV3f7)xFksw{!2!I9l}NrvES -~626T>lbtfPWRv;%Z<I*H-Q>F7^ejCQj;JfulNwq1njnW&d9<pE)U@0#EUppSAWL2#5Kk)WFrfL7r1V -H&`(D|aZcc<|7ZNZN7vz>&;}Y|McyMk<rIaXZz*Xid2(;m9?UFJPO%HBQueW-p`JnE5nuc~my!VV;_q -iPD))^Wwv787V4>Vdf}+$U@;Wx|LZs))#C95e%e?<cyJ{8JVS}9Y`U8o_Mncu}{7!g@EMkgSIWtmue@ -`pFZG~Go04_%kq{*2qzr)#b~8z21~pxG&|Ec*%`<<>YgMx<6>|l715l#ZO&wg_EH`6N#M~F@6p2rJS8 -?yQJM(D6Y$Lhb%<38u%w;KIx_6a0^6BHl2u=(?=gahqsQBBMa_UfSVD}-VylDfGdlymz$b2T1h);6Dq -0pmIE4>R6oaFuu;ijIQMeEh9DawbPtN~RG-|%FN2l=<flORW2o8nAW2UfNuZ9!S%-N{Qhw7GR9@vT5X -;u9;W;_R@1f`i)X%SU#ybu>EU{vWCRh#o5Qg9qxCwC%CD9;mD64MMl(C^+Av43dA?Nu1}y=B%W2-ICv -#M4HGg*RFYkClh*X#}#>oaERX6b8qGvGqDVAHwE@NAm7!?(ZR&{nZ&z=g=uQ01C>k;E1Ax<t+yl!5Kv -u|LkPZ{0}fJ=x~OeE3<jfvTzTmSUh+ZXE#|~#%NE{n-JP$`ipwZFegd#6Y!z+7G!ckH!IWv$6aAN#!i -gwP?{E5-Xb(Hj1nTH<Q^G~xwY*C+4d!f3T)%I!J6rv(8rXB2nBdY%hsDFMk+wCHoIr#NzzjACp%Lh%9 -_Av7us&@GS~=m7X&S8%P_a0I1OscVl(2)35I0_Wtb`0?CSQ9$WHYKjz5Z72sKu<wMViMls0uz&a*#Bi -H(~!T$+<LTKFJ1&uVp1%O1r;YxL3>-1rw4i>fVuPvHrSb@Hy6Hb$;YY98j)ZM)C2ND%!1LFP8*3$r#2 -vJi+%*QT{sQZ++zGXt<LRfF4L?ksUhCJ1De)?~HgMKp^|^8}komK2Q%8nCKJ2R+!+14YB(Lh%I4x~^H -xNo%{^;NdY8h+bX`@}kKM%9=ugVTJBM@fOnJq5mYaHp$2#Cy`45;RchFv1AIl;=wA7@zS?ugtBn3N}x -2eWja|V0f61MFr@&u(8A1TCYE}$z#L_=$6GzL@kWprsI+)EEM1O0=w2D^6e-L+79M`EAOjga{I>Su^v -+tFBlVa(U$*5T*ojgC6#iGZAQm`IPJwjw0VBYpO@_&OX^|=mTi#+?p-revB?1qH6Q-D)CqbtGRh;m}v -{m$MXVlmk=UD*Ps4@X1;oQ<%NRRp&WT<=Xa&yx$xHA#-lkx#ouxL`&Huk*)wRkUbup0HS()tG1BfGQl -P)wHWgg47nBJCtC>r#8Jtl3C7z2Rg^IavylkIdU$CpO<~SU4KK2!aHzN>8S4o3}#sgw=Z4hW$L)a`ZE -kCum_i9)1%7inmf`Pj2Y+c@#8}V^w>>ct1d#XalU$(hjan1vjDcVRz0$J4v$=;O0?g@l4obE01UGRJu -j0Q4T(1QeF5Xt-at@T})f|+IJAdgSm1N-p=5<U{%#K-2v`>m2o48g^nH{c#F$WODZzSH8GNNn4pswcI -P+&s9vL@zz^Hn^pApwkOa+yObtEiFh3;Fj~bpFuId*2u=CTrcOn_A!L!l9v+2p}F@zVdF&0Z37$HW|t -}ZmG%WAX0Ya(GXsoy#dRTE+a7J_jq#cIx!%&w%zEvziT+3tYG(k+mH?a_;_v{5H@OV7uvH4_9mG7gHb -Fe%{{S9k@ld4YAZY^A}9HH3Gyl!aY9ZwxyP6sPx}GVFeKkASJSY{;s(0T|*T*-GU&Ej;MtZeCE6q>Rj -%Jizj<G6cE3Rt%#v`5{F@aF7=qW`q_`B~>uuFs<R<b8r<V-Ijf$D3aIUXf6o?S~MiXYY;TVLf89pKhQ -f%7?pi&>;!iSui{P~*EN5#lDA9;*8{`2-W;=-X+hHsnG8f!T@FJVbA~^yh2aRfa?v$8#Dh7pj9Es)a) -i`s*2!U5p?NAGVp9~X-kHF+yc{rdILQfRW?x>??Gp4e8vyoZ8#;uA+0)ML=*;dMlP5{DCqQxD{=x!pe -K|#+=9AmMU0lC9`5#bA0|XQR000O897^_9oK{>vJ_7&%*#-arA^-pYaA|NaUv_0~WN&gWV`yP=WMy<O -Wp!g~a&U5QVr6nJaCwzfU2ob-5Pj!YjKT{@goa*Ssl8FF8V6DozGQ={JfX!N!>a3Dw7X8^{`z~CkI)a -Iwtj+{IcH|h%ucg;`J?{eel(@=C>~7H0rkhT_<>%DZ8n;;*fPzm+(<1H#U^Kxj!N@QDkZwcZYYDT+c< -@ewDb~@cl^Z4?AVei$Y0<<{FJ@R#ExMq%Sy{kcxkl5U%NAQ{|Cf0H}+u9EDO&$t?NDGuc?F$T)P^nww -_vXn|klxzXQd^@GeD4Q4(SuCG6Nfaen9|HriXcuDr1=*ZvO{qKU9yX)e{q%95@L6?*c9=C$7%ee567D -7m)6)<LDhGLtife@0=qRGW%2p~-SC-GLrLcoI5)V=VBc$z@RoQ>AmX6RP%XOLx-ne!8SFJ5);dtl6TQ -d9_wD19&Vm){aRy+69~2o|PJgLegU)G&G>!t9wf<;Saf=*g9C~ZMS#Ic4X|3vD6Yi)Q@TI0<evuYf_k -oJt4anB{+AQlhk|KEwslE5Tem%tP!o5D#t~oI$%I7eHkr2&z1{{rjPU`N|I>0c)Ud{l!h1cJ21&|rzD -8cl@;38C>#WnK@xukBI=LEqs3#WemGi82Wd*fSwa!bqhv9Pm*Xg*`7)W$(m|IfWj;w9#JnW(i^K&eO9 -Lfy_ChLmX#El6btq8fv=vW`F=s5XQ6%t0cJ*J)P#L}1_Y25b&|8uPY2!QeY$bLF+xN?K!E&B&2TPxIJ -M?c4K|+637(oj7P!^ybDr0Pi`o{SXI*EY2dE4vVT=)LD=@BhcSYG>RFunW3BhqX%3TsO0W?Nxj79uPg -1{hw^U>QFoci%Z8+=<%ZMjUZ?7kcA7)~yuTR%$*W<Gm*hp2@*;gp})$%(35Dvxd~i_(`R_?AM-ScvJT -Cz4wf9uKb~>RXSNsW_N>eqtVEeaPD9}z*?8ta4v8yup0%fRuV^NwQ4z5MVqca($r`^_`~NaoS{~``x4 -hayMQ=0zCuwSF0|VEvBaOS-wVAGLC|l|;lt}<|D4?7B6=A2)=$t8wfg#{x1+u*ElNK32ikLcmVIS4T_ -NT5Lvr;RlM;GUiOug=9`NFXzH0mrP)h>@6aWAK2ml;P_Er^-^I_LH001$N001BW003}la4%nWWo~3|a -xY_OVRB?;bT4IfV{~_Ba%FKYaCw!T?XD%om8So56<b21u_cT%J~AW1o*oHf=thHqDL^gHA5_4>9CcAe -pDK))tDlJHS+N<Z-O`LDj!*5AJ0l}v#ai!r*GInn_CNmL?N1;4^GBcDKK|(a4?g+)gWI1z{`CF-ar;l -MefzDqZ(n@>aQpP>@o$eWpTD@h|LWU^+vDroUtaz1#}_Z2&wu~$!%r_Czj^-V)zj^p7mp7w-`u{L*S! -1I{_00BAKyIAZ~pn=?+-6t{rK>7d-dJz%|E#3y#AAiH?O~W{^P^{b=${RFJI4pKK=OWiGR!+-#&Zw<m -cZ!Jv@K&@a^sEU%2Cc9P0Vgy4R1t%%Q%2bNkKvzrCd~`n<(Iy!_qUdoNzxo~>(N-=00Zet7!(!?(`l{ -Z}vFJUxE>)12mSUjOzF^OM`{FVCO;?e^K@i@!ZR{&4%<Z9d_f+nZOn&whFH{i~NT|G88z9>0Ei{`AXQ -weOxD9&WE+efQ?)`Cxy%{qpLk+c(c&-ku)5eSGch=R&->J%9P_?_WL5@Bi@X+sE&ISs(rM^4mF`_0(@ -3o_=_}*YKY|`SSMh!|VB^w|{<k`S3Jn^Vv^dzj*v+e);3aZysL0ez-k<efx2J_WJu@SL(y{AfLyB+&+ -9YZ_n!f@%HdI|Gvil`@_@g`N=K6oAzjN$9HaXuYdFW&3gX1n?J5E{&qg}FSi$SH=g!4-~ES6@as&!y* -<9<w%^aSpTEo-&WZj!#p?F;!|kWn58wUt;+=VidF}0AKl<WdKK=5G+k2n<_4cptJ$v@vCtv*akMr8O( -(|u#|Gd-V4?j*3{Ps3y_4NGZn_uRG&l~*ZgJ<vm%lyWBfBNX-kG}ZpdioDP`r?xhKL7mo;iu1T@7+Fo -@7Wh0z5nIM?>)PH_T{tBKK=ZIcW<}PA0GA+uf_aFi+o?=@8&Ikcr{n@+lM#LA78w7>VKWv`+7d$i*Ik -=KmYr~+~#i{9;Zazp3ful<1hbTd-&qj%fB(-`ITQ6^pCg4?`|(&y?N*M^V8#$ohg0)VRz?Ue%;@9rqF --$?mM?L&5NGD{I?f#3qGG;|M2m<dFu~fyn6NY&h1aHUcXtF{^h;--6N-T{4SLv-ELogK0o=-{&)M}lR -y7IDwVh2nm7L7%lE(d*L5QP{ilbQ-%PQ5{`HFoPudiqB_7{Bz53zy_2b{p+t06_{%uLZFSjqAKmPpu< -$s+DXdaU1PxJ9Vn^(PBbDQ7%>E$<%FXn~+?fW-xe*DARKmYvmyAR*~^zNIV|IpL#f0*BR`u%@jW2fA2 -x8MElzu%5`YtC1iALaAfADykA>!UN}{ZXral#X2EqdrQn>x)P2@zH2!FKqos-#$FQ{dtS}dbnq6{cr! -Y@AdoNq~FD_zrFoaeix<mY(C+f@_+o^%lXCmG{67NS&#I)`P*;*>3BCCrzh-}AE%;x@sEak{`EQ@`TQ -?S*48t<xV?Hg&+qFu>y-WQ(>LGWzMt9-%`)}Svp+w3>n-->t1tfg*+=ic_wiSM{^;{Bo_+MEFTeQc(@ -(y7_TKzI=WwoNeE<9BPfO;ey#4#9PberhF>dkRpFaNJtIt3BUmvWeFYQ`i`R<1|f0z&RU0gHI<+HE8` -1Gp}pMCH@zxwpqpFemuul>ziQ@P&KJGa!2WBxpk>zz4?bN*V(`grtrZsVO>&+pvkUs_4)s@CR3$NZ>V -X<a%ubbio}d2L!3+~!ubnz?srWnNOs{4dve$0-8yKJ)ro=RZ=Ke@N@wV-1&6uj?M`@7FoUE&b~2JM*` -CtS?-(#Qo3iv-61ax^;C~x2wlBpP{Y?$#a1D@p{yA96axu(>1SJw_SHU=Pxx6C&ypcgD^s?jIgerf6M -$_^GIzybDCdn=Ncogg&PdK=1|wAsrG{}%&W?|*0vl>C0CYe#2Djnm9Di2Yc1B5y{%QQZQX5NxSnLK%3 -8?W&&)%vO=;^3<zQ*orz!JzKI!QQ{kRxm&XHX^=S|OJ{km>+buYfwc-(kBaN;2kw`Fa!lSs^c4sp$YU -u*FgAiL3xb;)(C8;rGs^XFPAq-m_>zv{VutW~}aSG=>cNXWdlWmb{DtO<rJ_0nS})}EHmb5z82EzjB@ -79<@bBO`1LbE*d)SB63A=5<R}=9Z5o6|vd<bhA@ie>=u}BGx~xb<D?Ffhn77?#Eic^?f#J{h_ZLCnU8 -MRt}M`Yn9V|4$Yk&>(+Dntjzr0x#pdxhFhD#9rD`HHT}7@^V-G}r8TE>ZB8z0>Uk))Yc0+YrrzD^xd- -!mYr%74oU)eeTFbN~eDJu(ShqbZ(_8yin8Z3MYs*thY(q}`bbxWV)v0iRk854%si{6S2V(t)6i&5yA- -MBTgVT(Ntt~)c=Mt?WQLp)sXO3Bn<YrHqUWd7%i)!QWHXa61U#pgumY5@Sw2}gz2g9$sO_4>q*QrR^C -l2i~ird|g37&Fo>V^Ku>sj6WgqkRRcget7uX&P}aL(WQ+UVLZG?@qIiUCfydoIlSa$Y-|*IwlHy>u+G -Qsu5ExHz~6&)HpZwB!0lE+^8vR-mmX$vI?pT<-UrC+9w)aWcn^Lzhm~Ay10PuMgRY1L<AI<yu1xbliH ->&hqxPmW<Ke^2{2~G1k+u#H`0y=VzX94r5gjt|K_Vy>@R-cB$GEVIC~s8Up=XjyM_1OF%=R0hZiM1&E -G7+SmQ&xa&z7SB=j8A53U{I=_)QR-A`JeRU!;ol)jD-0_0e%$(bVf<?_9Yr^wy6@|{DE<IH+hzT<{58 -hH=Xz>I6cA<(6jKChI#J*qa>E|TpO_1-pZZVg5J@+~{bHvVa@iZteZnn;%a<OdY$uY{6*|rvA)GIV@R -$-tZnx^Su(x}Dt3HR?6nOnn7!CEt4L$@V#Q@EYDQga}6G0YWPe{no8YRk&41(*WT5v_|!u49I><A7q3 -4pjR(*sL)Jaaq<m)D`z{J*H9oD{5ltkA(Of2oS0}5J#K06q~GhyS_^;R!(8TW-duQLYI`O`1fugIy~b -#yz^vW&43>%kj2T2Fk&nZ+uxSL)F?MTP{Ia-Yh%~R3zfAV0iA|yCA1*>Q@ckQSz$Zdx~_GGW-ct6C<a -Y~x@bKFYbr3O!rn1HYN}wIuM93rer0JVE@Q@XdpvI_bWGE!s#w~jfE4ET9x=|wZC7@;I*18@TxPW)#> -I_Z;E==8IUtBfLDBPPq+0m2>~I@3#t7^-@6JgB*r1)3`b=xcDW@tKh66Zabms3FbGWXHU1&>{a^&aVk -2oYL&>Na`PDb^Ruz4VZwI+euG~7Ptx^Yos0=?$<MgzE=fTpJ13IR)j-{zs|e6cVXqPTuuORXf~-_kP( -F2-ufA9lK6IdW13b5iqKsQG&wlpGLl9sthYveBI#sh;SiQ<tIzhYxnXtFYGggM`z?fd$7L-P`-e6oUk -eL-?`^kIkM7yry5oUhA<>@KavM<|-U15d67Ld|RuO639T=5!u$QRdQgt+(AGbY(Q4Kc)+!?=|U%W4Bv -^CJ_SU`WGfs>P(*UoR7PVNvJ&G2pqp2_z2Lf~#pWqoiwAD6I5Z9IP!THNMeFD_j9odgl#I{X&!-cz#p -%y&t9%dSLfBROQ!(Qhw!$O});8;m2)hOMW65J-I;F3btypN6qg)|wIS^g~^-m>(4~ESuZ1M?&5Nmbpm --e*#v!Le|>I5Ym9W;{xh1jI9$#b&<>4Cq7woGt@v&b>Qq)m(m>{_ESiNpiV>8@>WuA^UHR~O(-3=&8$ -qkINWS2+A&(S`?iVVSUC?mpXe0x43_y9056KEekr0@DzM5@0W1+74!LqQOp-JT_KylXO(^@Ho0lnF4O ---_U<c2@Mc(Ry_A8f%qy1eQvs14B-=pX#|&0*9wk9*%uyuxiE*qJ$M?t@e@PH>ALD(wLpCnye$C%6Sb --tVacn~vm^n0n$}(qwgc6gIgz!9rcV^?={J@4Jy73{-RUIIwwQI`_mpKoCNnr$GERR{F0e6~O-Sg=g8 -MQdEFc4GTf(@Nu_a+}@Ruo=qM$Kk8<uhyCkScj)p}{Z(Gn+fZ_Jvr#7V=Go1Xw|S`1Y0C~)Zw;7-HP; -9FE+U0ydiHDfFvYOGdv@6sn^8038E(i6Wwn2%{l!qdY7vp;7AH3$JO-7BdAB@&y$4s`$l@H=5~Qbws@ -Sdj6nh9<2615a>V^U+aFmr|$0lF$yIk%E)CM#mFQi$Yiy<8bb6dADrl*h2&aY|=g+KQ0D#VfonyEW}` -|@e{5LKEANnmykoD8%z&XzadAx1HlW*0VJzY<_uOa?Rrp1kHr149@y+P*{(m0Rn+!nO!nUPv5moC8G* -_YG#3--up)>`kW|1Pyc@jMTtave3nUx8hs`@;xz50W^LFeUyIzx0tFmZ_w5oxPZE^{MlqKZyIZHGP$9 -i6}9?pyRKmi8NHC0ee1svDm`9nD-l_0uTt$lF5(F|FP(g0J<Vb)Lgv;^`v0}NivUQNvJ>YZ3EEei6BI -DrF?wY2l(!Mzo3zV>~@=~^eUs#cMYjnmI_OTap==ZV+|_kwHGx-HiQ({u1Z2Ny5ffs4{kkvCQeL(t$Y -`<_ie!UVn3im(m_4AH%$3!1vBa}Wxv2Q9^}gD)~vLxotF>jCJ3Lm7LdfQ4se*OworON_4#p1K&l3mG~ -NhJrT`LiWyMjJ*N^Cpf$FigR-XE-YbLR3q9dmk^VBtnoQi9j1bbr0UFA2=O3$i2~=k`(&;_hI0j$ATG -4MOw3tvRf|WN!<~`7j56c|)FmqrW%DeqiE&t`<^<b!<hF-QUjYoKHo*b{RY9QhDN*z&NMxod!!VRd!9 -#T%MU<!}#Ud45U3|M9ruqtOnAz&IR_uhwsDiU~WH=uun<UselrfhLh~3;fS6clez=}}<7hY<_f)j?Xj -*kR>#*)l$yV2Ya$p!`BUnK;zV9&21r^3>1;C^jPi1C}^hy#niRR&PB_&YL!py&11Ar{uv7*L9Wj-q%j -p48*Lm#rOlK>*fbO5hEL00+f;0B~>=gz-QWjWO~ku_FDvj>3t{eFafEwOz<Tjbn%Ez^S>`d}0b1;x-( -BEr7EPE+IYv;S3gcAQ_MZ*H)vgY_m|c0$}#Ff2SnllEf=aKB#4Jbvi{wr0x=cBDq+X6c+gEu|qA8VfK -OQTITsP@zXg%$t@xEPle@0I3-hAHsl~-Kpcg?-PbK}VKY!t*b##sSpS|lsc@P4@9^$JALPPTcq}u2!= ->{wdF;^Dt#5(={f-l!WcNDHb+9RT70F0Kx<n`(#Xu;7J7XF(e(cN%a=Qy$z`_Q8oJw~I5&)wi{;h_01 -EX`Hy4H*v)>~4vV>2Z53dV6QU{;sMN$r6Or>J8C!K_W{ZGj?;wo~)WEIM84VqMg;&*FEX4m{OJMGO(3 -FcTTcV498>07S=dCmp|l9+|@o2LbvL+Z=*t2qbV3zEgq%W1IkmNvdf?%m{K~tvo7ft`e#jb#lUo5~^u -n&}3BMDukoZfIz+Z34*mjRo~zcqEEnrqQ2z04W#h%K)a$>BNoF5==mo5!B2g?f~nlTK@W5|Pp4iOu1C -@B(e=d2agx}kIcs6OxSjo8ShsTpj&_%&W?HCvMhcWz<(q~lROmv~reRpJ@<-Hhz}v5nA?h-YMysOSq` -VWPgZJ$bshN5?2t(-2%(-b;?gUL&Ww{O_0_|{VbyZP#C;aYO^47&i3l|*F_a3IO-D3kqSVBA}h^`6LT -o;DH)}j3eG6ikXboD*8L@?9k?2Hg#z2VCkD3D^3N^u|vk7BG5_=5kTVp>ZktsuN-HCf~Vzr{YTJ;m%Z -M1aKYTS#pp0f_2_4mu%-;rr&ADeM<d?eFZv#Y#)WVao|~_6P<}H68fiFl>S*Ih0<G30e&i8qE_5*OCc -R=nLY6;{rnbROmJwrRxgwGXf>f`z;usv@?)-95jI+-hao#ToYL24SISUZjzI0nAC;wj53F6o3`fKs*M -}t>#kGU^pa4ZM|NM)nw$@OsDfwNK=u<Qt^JmGhiigDYBi$e(~w29AjPhFrQ5)hhDG9NKwX^3YEpLBqs -N)T7K^{uWZ+${h#E}W80w%R!Gvd;)&v=E1_+XjHPjt&DdQ!g4Ut8{*|o$soeE1?S`4%!!UJZu3UoPh; -I{_G%7mYi_Dv;;9sto}{gUA%2$&}JAvT@Ued*ekgLUewvV-NwhD~FsiKu0a6QpP|qL@@j_=?pCJ8aG= -5JYzOochKH)u#cq%0hQPVcT4lQ}CcOi55FOrc$908z_*F6H*J3DsIjqtV5Mv6G$&M9nZX*CEz#&egvO -MABM#vWaHuGKs1~zx&INcXX1c>izObyvjLb8)T|RrNW^IB#cD}-o$e`46<P;;sosZsJ7SAc*`@)W9nT -(f2A!AKrulq+5wip2!RxOjP))<L^C@{Aw8N6gxmtUm9XHMf*Ma9X5?VmaC==YfDh5VJ^$XNSWRVaqHY -Ic4@M2JXV~cmX!$pwSsrkgd0pNvCqyo(wx<e>D!m4Pj63Pbx8n~2!kPX?GKjX-z9YY43XG3gQ2s{}gl --d38nNg#}0g4mnq~i+e9pM5HfL>HcjB*Eymyrd-+!sGl0pf1L46OP@8h90)<4&9k&|OQ&1ug@z+ofjC -AtIS}v2MRxZx-_pA+g+h(=&)VR9xS6RX5!N6}Tj=q4d^5Gnb-9X(0tU&|(?p1n6==oSxkNR1Y=ze*y* -B`4XC0=l6u|))i?9%dkdAL|ch*b|kqPO}+dp78Lb?n**vB!k_L3Od)#@njKw_4xK9?>Bds_IQLL8PUq -0YU{`cb44LiQ<ABCBuq11z_4S(JDNdntL#AqgglP!36tEJ*s4y-d8Ce+;DHAW%RKP5jE1XgyH5o1ecK -g!3QG-iw!~x2I7CCtd3|NWFwi;>#b7Zaqq4(k0WhFBZWT51ck_HQ$(0X9px>M;^j7sH0_C+y&=hR7&_ -8{&;h`A;$da#JBUiLv?%rp3<%bQjXzMq^iRshBfPHWn1wuz@Z1S1@N^cI2zT*jJbSq?P9;Qlx{1@@=Z -$dXv_Hg*ZG#tg15^mGM{O)R>Xb5rp#7xlDu$Y?IP5(yeN!JwowmN|B)>@c&88!2J~<r992`_Ey)DkX6 -wu9q1&0|sQE>do-M?<+(f)7V<OY`_R^nvXB#fL!5dm?k;&uH5axEwyp#XKpDtxuoGSu~1W_1Txf)IJY -=T9K#`G;8$4s!fq{gMF*eL1>(VOXEW50l1q~`Gyrjq>W(=Nl`OVHNq`ewXIJbCZF!h1v-X$UWkb`KaV -eY@xY#Ujb8P5S^W8MC5}fGBY9noe2!LS#wAx$_^a7683A0r-#Fu1QVecR^;6ZAvTiv*^U2ZRKmg;`3E -u42cBwf}#YVhGaSH%nFwge1FA8Ame#f*$I?<sBEm?aZ{pBJEj%!8Ulf=*KEsJH`)1Z;zOLYyF2xQgpA -SiNhj?;5}{dmv!l57UwK887yf!~<dn4L|N|lGUtim3}}S3W?zZ%t*`EUcF5+j+1pGM5g{A!_@?lY5=8 -jFNfw6b86yq18-~@#(69?cWu~sZrEu07UXWp#@F0bTzfFjdCKs(hiGok0dA_+j)WS2huCj;$&3`hv7r -Iy#5g0Df-Xq}NkO&<Arg@+qF<%#O*4caZl`%a*@!FlDX8rUaPR7Yb;6Qmx0T$S;od9)5lE7tM!Mt~1d -;ClSO$RT-oOc#WJ6Uk&JIE2I-aKetcMr_)}F`<=`tR64ofqCATl-xuB{83@moMsB2B3hCt#d=2wEK^G -pWlnbW8wQS=B%|j}(m}L(GCV^NBJ4=r~yR?6&2-aytfX7Km0BC%8aqG#my5w_y=0j^ioGWJ)<W2&Zp; -N44jn<M56>QozTabx=8}*&#fIOb;`dvs-uaS0WUiG%YY#*04BqYm3-tq;gHz9?pc;*r4D@ZZO9K=7{~ -u#&FQ$MJE50{p|+h_|kHaPkhH%_&811#*v)EWD?do9H;mP;!+<D>{pACJ1B4j{}Kel(*_L<h#7t}6ww -tpGH0`BktM_wvX+M@$tE>ZM3$U!R0;^DaPFEAVnhuBYY#KB_vi{38LmIbkA#}8=0d9DG;%&LhS`WA%7 -UcIiqO?$YP(mv1p$JtO*tMCfnCpugSoJL!x#36(d!@!LbO<|X<pa1lb<YfD4sO!d<?R46T!GwWYnPii -|B+IME->Fd+-VyFP)$P#297rzOqO&nXjH>J}m%blehtlm}daJjc`J8nEHL;XyB=mTULrR4t}lKK0viX -Tyc*Pz_9?6GgcsFU9<v;zJzr6)Y5hQ3bJFFt2y0xQ%UpQ864#uxr6myS29dD1N3l~liJmPqw1jO$)jr -AD<SG71$e+`M~#{Y;*!Q8{k6ViO;(3vn1vKiJ~-b?o3bOsLkoFgh0x~QktG&-aCkO^sET<zbu)Ck%w* -ocKrdSW_eUJV1HwvXI6V9sNmF<l22M@QArv2q5vOT{3E!nAjXdpn2R71F8Chsn{*=2V0|$(fJxcgA-D -PzaBom-vyTgSf?240S^qZ`!V)i%zn8@}djElcl&^DY-#1{3&6o^I5bA!Z_n70ERb(fu_$b2)m7eXJp< -&;Y+YAXc^A@S(5d}Q`P>6H|g0lI)MrOlM=>XS_Rb0HnNn0kVa%vi_ye2^rnFw~>uI%&S9M@42BVD`|x -?tBo?@m_?&S*s<2CyOgGmj|(i0IOAmhhBlmrhX?Iq9oxQrBU@i%nm*G+O=&Ku=m4~0f`aQ)&SgOz!Hr -~jzBUrd*oUYQE4PMH9|xglv;@fGSIF_=`zf6x(F=?!tf_{=`_oxs|Gupfri!nAvNPP27>yHfJ_XuD^m -*Gb^)YkBWY*kM|v}ifVjts0kjJd*JL8@Aui)Eq7NIUsBSQ~>r*luY9-p*SlV`~vX>d^=(y^ULT8ekT{ -sg7wjl#G=3muJ_=XZX=N@XajwzG^uACM{8+ify0so|acHuSNHj$?c&tIZ~41TSs=Pp^V5b|BGQV9wta -uyN@zfk^?jcGNr7xfKbMo3Ic!W`(MaKf{nU~aV}WAD{2TcPxz5^0{-gWm}jK|Ll=Xo&(PBcM%bVZn(q -L>8eQFH$Hg9V%}ZuYi6z_tmEY*$^J==m7U%tw>jx*RrS&!{>EOLMtSZ_p-+rJ8fksH_i#)iY>X8cC@k -rzRrRm{mh{nB4l@}RUIC|@X!TnJa+*L!KXwS8Bw7UUL_&bW<?@Qt=Sv8#b*8UY)PYG)r)CZO@*=t+Mp -5Rw$huqCGw^R;SEsDRBD>T7PJY<ZOsDWo#=9dv@9r!TqBY7++{3fL?SFxCjm@bhHcJ-{)uW8Ski)us- -y%YoQ_5od4uL|r(Pah-<kJN*IhlRyq97#OBLH?(jAqb%^(2!saVWF%0iMBH<@17kld#PWG*9W<j!5yl -E|hlL*z${eCV;L=s>*?D8yXmGCMdk?@B}ibrGdh(Idn=^XJ^vE$uXqo9UCfMOp$C6jcD(gJ^_nw)!)2 -``1QEy>QAE4gha3PUo&}Nrvt;#=@=+hjB{G6760h-;7HD;3ZM{fUL1fnnWRXR$xUMv0ets8#oLM0;D} -lgJt8XhvsSNV?C8~1!Cl;k#RlJg}gc0-35)v?zyX55;>bGhZnsBp+YS3Y-zzZcN<h-ajhB$;{DWNHxr -5TsB9D1W1KtnxOR*%a1~)w9*YN?P^nFp@33GGZUN;^CVDrj0Gfn1R&}KSLFX=Vsbc3Wy>LjeNgjgWhE -54W2rh>;JVoQy1(R>f^7?FC*UFZGU8hWHMYZY=mUBIdQT0J0F1EoW3t~;#I3)aKL5vfA&;VOz>-eI+; -oOxj#dH{U#{etUx&?1E6Ob(?X~40aCZ=+*PBUaQB=Yvy#Ov^pLdoTOxcc;SxVO`l!@B{jAO_+BjB2G0 -4xN<HE{*Klb{QK319jcEaK6ra!HeWaOX@H*5D!d1@-o~8=SXRFIwR#5Ax0k%G9b;IyxVM;BqZ)$?;^& -5A!|kpDFaQ=p{bdJt7C!X#my&zlgVbz7_3@l&cI{jowq0nJ%6otf%lOW9+52sF^_M_Vv>7N<kN^^mCH -DUc^FMq>!dl~7U-XQmjXXlvs#HrClE~|b+8ehX=Yds5kIj4SkQz@EaY2M%Fw4KK?j-3VBvnmB+gy(k} -q>z66X;(E6jpOb8WKpI*@{Z1Q2A%x*J16yd$ND&*^@^KxwlJfVgbUBdTXDA9aS=L?(!>1TZnL1rst11 -A&9c8mVf9CRB-0%1(AhJrfkkRG1ek!E-fE$vG$UaRM8h$4iG*A-)&`3K6qqnNn5dg>u-HFS(iJ13)?? -nVG=Qn<RbD5^F$=<OzOV4iX*YXI}$ZYKw_V)I6NK_@&^ux64`}eJd@GWFL__p<|b@fRi&)T6ED_KD|s -tL(933?XG@FFwS$E0UbmJBNrR0I0|kpdD5p<%fb|(i&`{@U;|){EWp{3#B*1_w95!%b!x~rCW2_?oU& -U;_Js{Kpk$Wpp(Cw(h8m!@w}SUe+Jd)>Us5+(<B7mRBuORfjI$tIox`3%<PO;jV6$}(W?2>8fkUAT@! -Lf(HAU1K2>@lArnA-@&a)9}m|7FphkY^!i46f93o631W^wi|?HZVbWLN9#t$Nhs=B}Xc#MU;m#|Hc(m -cpz;xh&PfVr@9kISM<@T?Ye8z-BjnNOL+!3TtLZAkx5Xg1e>pV36BH4NFv-;g^#Ux6je8gGt3AQ<e*k -m@`6Ds}zsDwukA;jK{}_i)i+g4=^)@=Zvht^Ii^v(^v@QW+8r#hsIGPVFKM&b+RbzNQ9M($@2r}g-$9 -tnfjzb4X)wbH8F+AQ8Q_n76x$}Ocazn3N>Y?rhtQgKz8ktcp$uKlLV7MM}*1GT@;h)Izeh?BN4KZgV+ -qM1m!?P3ANJ5aB5~zP*PAVK*33G7&$9h%a*$Hjv@h}dy6INF@Rt%Q)<<(#{4lJcmYI7%dn;xasvj~h~ -E(bopaa4R0?XFCF&NYTWMGI!BI9{QAho7@Kvl!3{2KEGZIx{Ie*!bw<}{VEsf?IJq_i2sQiF_IQ)3Oi -Q?>H{^lUhL4pb<tQk0KX!H?X7|vZ7)9~(x!k~-l1RZGML-06D2+di{|G11qGmQ0G+3*#xCU~cFSH@(r -ze*Mi0o@^pDqy}v%!F!hNfqoUb{?6aaz{nNiV}Zq5%oWJVN8)eIMmf<PZ7`1rw6qFPLMPibQ1Y9DRaQ -tjJAL`z*nomcb~f~rs^`0MmjtqmN6^aCi@ZOBJ~o#yW;&5xf-f)(gr!X$zB(c_i^r$7*DvWhvb=N9$C -x>tq%}3lW|D)n7ohgC`yHg21zuXzummz+*L8{G7it)nm!N-gxVV1^2^w=xY19TGepcOG&nuC94!!FjT -TYou8e5_o>NiQd^O_*coU#-QecZbTh*^`nkB3b$HnY~L!+fPxY5=wjY&9J87iX4uAmZ{hE#=Wm7~FHg -QHTf&A&p@*nWm16umhjZhh|hm|9J)(C)H7fOugo`qV6HPM{S75`vHpq*mjYHv89{u5}#Ldua@gSK|pw -Gi!eMoO}+0Z%i<7OVe^9DM7KqKrSgC!U=1Wqk+_UFORXxkYH(v0&f5%QGjHuJ<GM*AS?6&(NC@>0v}d -EP5?(OLLlcZktuYrX_wv>%L`$Knp?O8v|<J!bYlfg5U9<f)&p9_<|$bxr0osb1v11vbJqj`O7Ni?Y4n -9`f<`(~#(lg@Y{hY~M3h)<5y4Vzp0)V9R_bi`x@jv%$SNd{D7!t@x?6x2pD<IbC`DB+kuB4Jmfdb#^5 -|PV+$&_P1vfbiW0mDH3=Ns1aTx<exhgAqYyj*e1t1e`Q<Un>LP6|GnJO>VOpAh0wN(%BCed`O;0;#=! -8~H9jZE5I1}k-Ux%=E+7?QV(WeQ@PD3clLNx(0nY$g-EnrhXA!1&n;iq1Cq@{F5$g_#99CgKW=v<XNe -)fv>3i4~`issnR-dI!Xhzyh)F8nS|+;FA=Uw?;wqKHDCvZNlN=Sc;wr@g3qrrC-+^D{#qV;g4FcAzjW -NsWvMFdJA!w`s)JjiW$?cFO$VCd_?l6RSd!@WuNqeE24j(r)3{5XMit-(jbSqjBPb`!A!&WUgnr`RM% --AmUr?9uqmiKyF*cPlPv({nF=*Jsax`9?P0X?ICr^BAtxNvl1&v3-O3YMOM}2$v_T<NCGlIMWXU=o6t -rC-Z+vXtZdc1>z;!-ity~nMIi!Ia@4#(lN~K!(!_HYWNXwmYLQMvd;EBYobKG0)AYc%T1(lbR5eGB}s -pPfFlt6lz@M|gJfo2z9TC|H#r-+0F+%+=^KW#p*KXEY~6RW3g0>(=25mwfHfR#y61Bd;C`?m?+Hh;Tl -Cc~qrL%L5|Uz!;Spbt>9$C7=5NK<c3g<+Tos{t`m?L(t{M5OQ9wKIj)EZES7yOl^`h=9GtZ6+h|=u0D -XQ97{QN<w$7N$6tlqs;Nzr8Bh}S_Z9Pe6qo$^=*(cnd-#d;8v6QKWrYByO3;U-Gf3BrtdoLL2UIVL=e -Rbjm&{Wz%B>PVHO-mwb{Wk7LTp44qK|)Kx^~L7GwQdUY+<Hx8Hy-Mo3Hv<=J558q86#1&j<~kq}3-TX -#Y}anU@DFih9Ic1D(ke1C8#uC*?>E#oLiEM(uJ#xs%a5yO*s0Q3~(kO*5-WV~I+J^wKp%wVLgI1Lt+o -yJ9{sH#>w?3q7qp-qw#L|HTiU*-ThD5{dLT{)9U7|WO4$#8^+w|CwAYUeh1(yX=;Z~H?tt~`lw0)`KE -QR=m8XA)#nv7^P{jM4%Cim_S?W=#YsHYJJ&CB#Y9)&v1;EZdF}+E~6_K2s=~lcL9|%#lXk6(csz<~{h -$`1V67HED=2MY9u`EQ>Ye#~x|Nv1PQPC>RAma%i)KA}#AuvB?7xb=d2J{D9#JcApkQW11&2(_@@#=gH -eRP_?p-W7pk7<(MgB`q-(d#@X=vGhz)Zh4>Wp&vM$LIm)$*X9{T_sNZDsOf%7`3Q6#U1zeb<7RXo2#2 -K=QtAb|Z4{G-mtGVa2L)qDL4lmMlJ5{aHYto;df3&z!_e1??szOndp_5=@NdD;IFI~HYCX-{LpUm+q_ -O!A}cvu&2`#merl49)YIv%o6d15ICbaR9du6&1+pl%SciF9YUp6m;0%_M`CE4q~8yOVcAqDJC;C9a9O -9#v+P8(h1XChO|xAm~*oc@hbp+p4xkuMs0e_=o6R&)7^pd&tP}M3Kw2%V~-o4To7s!-W{jcyLEz<ION -=@ppJ%9-c^ZvUia6z7`Y!E5_D)yPT$4(*o{KW;$A2iw}VG4%-k7mkkpE$7{RAC3VAmCL*Q9hK12V@!G -{St(ge6?jo1ZVh~F*tIarsV9&NTheh%LyzU0NnV3R1J+^39(iGDls#pVA(?Ni0%rM270Jxp2q`Pe?j1 -J8`EH7Ise@E;u7`1EH(U@9ygva0^#XFMGHJ69knn^0yAxZ!<pPDBX40Y)1GqET)xOOQ`lF~FO->Ptl= -4g8iUv0GKGJSctO3)2UragBgrzj2>>Bwuib}>z*Y^d0;p-J}Gt*^QBsMKPpl9>`n=+<q)krIZ<6l_!q -k1AzAB?k<@${kB0u*QH$IB89EXW|QdhLRb;f-`e@++d#~yFGfm5-anMd#JJ1gLcgL!`jecMQCRrs4^w -NRe{xA=TXIN9LXMNL@1i7b?dubPSecQLv9+`cj>f9Tq1}kBzBlApK5k&lsUGir<Dg_XdOJ;Uu^iWOKR --#X_nitOuotnprGwcq;H|6vsVb24Wx@TlZosbeHxR~@CMUy?V6fK$fXkhG8NZ;Ty7J}vUD>|L0&LIt% -({n`g$Qc(Dps&^pD7Ox$3W&lI6AH(1ym=`oqMC=F|fIiV(o=Mo+z^%Sl;jE&A1PDo23vT~m`h(3ZGLk -&$y<4RmGmQwiz?(N6sbg?E({zyv5EuO>yW9GdFfH|pNZQOeBL4xCv&Nb!)cKf+6368g^eQGh_o@zOBy -Oj|4O7o7>OT~kwt;AI0b_UHmXW}AUU%5Ajffc1)>A{S}3hVWtCoA=Rbhe+(I8auOF83+TBakvYmjjbt -V<Z%#+C=qTLu5d<&V8mQu(=b4<N5p%sT~%}1$R64D5NiozvVt$7BG%v8s!7;oGJ<_ZA^+C$*?lq;#J# -2l)`03P0}s(3(%4^sIL`=zM~DKiwKePeWc|!#BJ1qZR<^xO_jcZ#Cbc(Mv}Q5<5b!l%h`P_e!UY+~wS -dF&W@~!vQIwV1Kt;Q*CJ(#QnY;_21jL$@WKgD?Im1M4Atwuz?Y&@PfsM)4Vfq-M`F356*u#z(*do&by -7I2*Nm0NIuEU45Xkk784N})W0zue~A9hJi!yD_?s~EwyD?H1tErq=*-P|A?xx<hp&ql}9Vw;M1t3r3c -z!1BpCYdp3#L!rB30hhqR&deKc+%a5&-fzn<LQt!;~G<Zyl_kSb<dDokE7W(AJTk4YaXo|lnDhZH;{A -%E!1#+?T2W4a}718w?|vv>$*4dkvLywvs;MG1h0_2!HwB|fVvHd$de|8xfHd1c5Hlb_IbO4_u3jfoSF -j{7``%yfi&ZCHB)h{h9l2m9c`0jZ3joBCE*@7bxV&}<FyNHT5L7AGn=%gg&BY$cFTUpc4u1;+&yLP3U -C}_Z5K6myY&shc6m)zfOE9<1>o9I0cbqTJz}@)r!!39GCk0M2RxGGr&38SK<+_=Uc1aD;YlY_XR~i@= -^(gf#trmvk|!1XxX{GOvJ1si31@vH2;r=<+gV<_)FulaE!l`_a%O7X9c4z1WW7rbZND6J5S@t%Y*rOT -lblnDd8fWj)ULM4R8E>M+@oi=(NQ!jF*JO|>`G%~mSZV9;j|nDv_}7p^Vp;8bV)O1$c##0hGY-1!@j& -GtKbrvHD}K`A}hl8;1#4h5C#%F>h_y<v5j>LW&|3|>G5tAG=;Ugr}-qAM|E~+Uo)H|QjY^jHZ9q{tw* -ElYnR)gSemWJh=DaCPe8mZ{bSX(UW~P@=I|3pw0{buST5$Y5=5!d5BTc$a5o4v`$mlePfbnOFs3}a*} -2_EQs=u8niy;?#<5!vXtv>Iadyc~VYibyjF?0^EKK%Y8bjm3D4GQ_I!r=UB0~+Uq=`Uyo<d37OK!*=s -M&&A)rlo}=2oBH_vE=T{Kd^@89}wa{pX6$K~&ANzQ<~J>YDA5RR_13L~JMO>RVor0owr(*K3w0SmM;> -{Rrn+!XV(No7&rzH?2prC++~evAfi;yW-&{qJHfeA2sTH-1!NS2Bsz>sF?V8Mnk~s{#F><AYbvG6mD; -}yp~=&z^M|GL8`F^cC@swg#kF<WOVx1Sif;kob-H<G(h%tk-4`^&^m0kQTF(AYBH%6zP&+IhP8qPiS) -$0huLH$zI2N<CI$x1m$tK&3+sfZRg5?oeXw1Z@gFujldhT!y!7a@e(j>0A?9&eB65jYgMm2R3}5TS&D -qO^WvtYuIILu&-!_SYY&_3B&aT%sSLg8HMSqx;2M~aancB_9d;*-<c(oRROZ?{M`>6l`-Okcc({b&Jo -2qs=Z3<*RR>QW`3sH;<^Iy0@wRYQH0--73uuKN)%762kfPA~~rWxQhO9CBRO(AFjUpRvnUs>)#x*PVq -bx{z}A2Nw9-)-PmgCuCX^d{S#q}!Cn<?^R_`W(vaHQmRD*B1EM|H9ym2eJDT8x^Rf-K%ea0=`p$U~k2 -rYxd@io?;3cR-V+AN-<;u^0yxBsWEmW>~zIT47D4G16ZPBjr64e3j)j7AXzJ9nNvMXQ8Chh-_>;~6(E -oCm13x!KuL7qv>%f%IN)H|3a%*MVytMr%o7NQVB8=zZJX$J8hYMJw(a_xY;6be`D6^${(|(9&JgkSu) -f3WIPEyP01CO;h25$}2=H>4&=mo~whM5wiCu^M02PHcY9!jkutQZu1`&xq7I|mevmq2#rIEUPn9>~HT -H6&k&4e9W9(7GD*OzEdu^eIhmKA(N<N0gF0~>OZ?e9cFL-c`(NMyTL;B--{lrC5Y$-?EA+yfOiy0%s8 -_KAsRGk6WN@|LDXmmI-qkD}+c>u{P)#mtJJ!9YUx>S64i@egq@_!6d+qeWVctr<;$9qM^bz&Q3m8(5m -aO5CT&>OmPbn=(b#LvfSPA%ybCph}l+w%EnaR^3rBBzvgc1Ss1{AJ?UM9l=_wcSAfbY!}L!2!?@0=Vo -OIp+nOZvz;5lFKoLSCtVV^(Xu{q4P30ZMEm+mI*PsuF}G%ui6qEHM?`P#^>`+QM~Y+H1v%9>6IqyrZI -ZyZxiU>B?9mQ%Z@xtkeUOsAJqbqiD`~!;;qXL7Gt72>|BP<{0|pd}+A(sFZxDwSx4e>v)rKOL{2hHoI -+1bR5z9IFeUG%krB&9a$X)o&<Js2Tq90hV!@A8Xyzmjw$nYb>*F}*KXkVZaiNb9c<y8A9oIaC22871Y -Ye1Coi>MB-fZUwz&4W<dNwE9CJSs4=hKATRIrXrqMg;1SI`D)noi$;;^1xnu{Ir&m!l7)QC0YB`R}|= -_)`+3Be6Q(_hV@IqHkGQxK=`d_km6?GGm$@>U1R%`VOmHO%M#|k1@s6T-|jUz&C_lZGQbVGrI?G*<F9 -ZcoGIT~gewd>s`!;DltZkjU)n?Mc0eO;hFldN3b~@Nh-iGH=E?U3*$k~2d%?3U3WACi@$ua&TP5wvoG -MigOfh|$!-qMS=`st{%cS9(2gsLt#IeJ^TjYbuJ0m-=?Yf*ctl#or;MEv4CB~U)mQnXlCX5e2hl>_9A -<gglS5*NH!F{ajE)~iEi+DOK7((O7$P8ZbWj1Q`I$!&8s9*6&fKtAGA*-~)vuXFj973b;2!vxANxIEC -cnH&KOAbpet#>^`ReHkNVqit{Jtj0n-)E}a!{HV+C)N%B98K=~7NNJQ{p}9hw#guZJMGHYd?5#PgDn^ -IiEGq$w_TZ2qhqZKfiyrXeT+^)W;e*}Y*Za5szQI2?wf<6VN7G47nvgY5Zx@=F3ibxSFv^S5lKzl{u0 -G`V_hs*9dh46bVcZHxmPzH3YHzd*)Z*~c6E+aAK7Ku#;BJ{9#$g^6n?E4PF8yxhd<p(_V#iRfglWO-9 -zmTlW+)$dapKgaR@Y?zK_!WxWFJgq1!OUUNH9F5|O|JnKL`$W_zg3V8Y5a60ef28Hp<7Av7|61k@1yS -ONxfoqV?$m6D}tMuZB8M~U>NwkvhAuQRp~lxRqantlwhS*W%R@bx*C{KAh{aTRCG_kzUhW)268p?0B8 -wzxFby1BV%S@nm(30?sV4#oR5_$y-)88H?Wk&|Rs^bx6oZ5QfP8^lNwfUZnq_I-|I2{zIbffF`$_YF_ ->c{?l`V()1C)ku$NJAtpAca&*cK>Y<(nJ^CFvN%vW2I4gP@<$rXR$4|0S!DAq<FOB5iL}JFD|ONpon_ -HT<|2a|?Wr#%?@NTV^pQ-uBt0p3e(ZXJw6u~@j^B2zPT|mEr>e~ZhEXM7Dd9V7NhmVST9ba-&}m8K8C -~9&iXdKMI%L|5w@Y=%M{4Hcbl=^pD&UpQr)NgiVO=4}ao-7Eo#HoixxHdw@k@?!w6?2tQb4z%&|((FL -6{@Ki2j-HcJ&Pp@h}e3vBO|1L9~ucFd=Q1>~sPpoe)VUo>2&+7jQCqwrGR*Yi`g*R`FqRN%(^Z$-e5; -s_j<yq;|q(Ggl~H3Rn4RVN~?b=@Y02m=8$Zm&+NGx5EUvg<V$NNZoPmu>xjxn4My>D9&`Xql}qKr-Yd -uTL4J$t~iR(Aqq-~7y5cVjK$i-orv9b`A(K~u%DX!XS0O^biaw$FIgaFn3qJ1=!ov?ePM_3_U!*h_`e -^)E4E#}lkK(vg$bUlM!z^|ndlsav;DARp=CiZebrn}G!)0BA4aVx`Pu>UwySsgApr%1;53mKS#8E?jg -q|w2H`PZ;_N#!LiIV4dLFo|XC57W+AiMd%1n*>u>RIxHj_DENu8y)aU~Z%p-3E0s$9PN)Ns+|?|V*V% -Y-oy_)1FqdiV(V8&qCZY8?6@eDp$$%f+V+Uk>1A#3No|vPZhV_^_|bf#0Y1bKe{jJYmacY-^;U$)Lgt -Thj<n+-+biTbzTeZ@Ye{M=L^XuJ8JBz~WD~?~;IGaI~@9r=3yUe_c7>2}kSNO}Ok5o@!;E?J`Zgfym8 -vNwd$=C34}#SoV&9$|>Yi^urDg#sgH%wkz3|W7qH$-_kNXwjE(Lme3X1b+@<;5Z7#=V(3q4LUEd$Yx1 -_@90zI_@pNC4WsS$_yD&&Hj@W{R;^GOa&M_y=LOx@GnjPQep}7W{#Opv>zX!>!qC+9O)tnPzcF0~oth -u{<7#9fnpl3ge)tOU0Z4<q=ZtQXDmWb*BF{XeZ+Sno)dWH9wH0}Nsn;1+cLgGtgE1PDkVHwW*SiAeAi -uiPuDg%PNc?2SDmBOihsNC^yv5Otzn`DV<c6K-Q6&n^c8}0ta8zNiX7iwA86rD#1%n-S)7BqHWU}w~W -hWdxc$Rm8ZTmB>rzNw^p1y6G*)`qtec$TDXwEAvHoGZ9C4U>U+BSYjVAn{Vj(YT@Q0-l=9R?|y_{)iV -nB-N`+!zKu$(Hqbg@TMIntJ;gpcO05Feb?r@h$o?AccVV;VhjsPuQ?Ftz(h|s$mmr}6(8PXjF&@+Uhd -JbsO>VI8XFyt-B}<O{^CA9H$6|Gk_wJ}J>w@)r7n%aqBoD2{@EUD15AC1E8fUS>IkObM3R*$##XAM12 -bB0I3D7m4u^)kOc9CH)wU~n@H~@LyPhpK>+zycNE=TuFE}`qpw3)XU%t7{_PLzED(c#F^RDG7;Oz=`S -mU@@r$M}oC{p*ObH1XlX#+iEG{rpZL7Ds(I#DzcE_UC=JeA->C(SuqYJJKBVtLKN!`G{aT@z`<bZFVV -rxkc)hzupgBNv*YA9s{V#DM@nC$+YdFIMq$60wGATqCiBL(kr2K&!@$*C4(ZhB@!oh4fw415s6o3<iy -7^SFzPq27HpIZNrgJ?!r3JNifgEj8XQCr8t`a!+Zu7rH{B!fp_^@GV?{jeTLy;X~@M@vA=_Q2G+Td&x -#m5+*_V^<C1_O-L1zVaHRn0R$jN_g?116We5g&{{D7LVbTv&Y5kbmD8wu^)|xH3b{tqnSpMTE&&_iV- -UYJ1>HBa2}s#ty7~85bP#EZsNULxw|@K9+qdt2c=LzbtCw&6A5cpJ1QY-O00;maO7>PvfZ%^W0{{To1 -^@se0001RX>c!Jc4cm4Z*nhVXkl_>WppoPbz^jQaB^>AWpXZXd6iV#ZsSG_efL)o@rw;OZoEZ-Zi6i< -D|XhXZ;)gJc{0WlWe;{VW6X>aXurN^e2Mqspsk)HlIM^-q}Xm>e`q**oXlxDiAVEvM8oMK{+r&3ZMWK -#?U)u;ZlxBAVpA|lN0s?1l@fhpx0J)yZ=FLYT6&4d2Yz8?_H4<N<gaibe$L+IV$U#DRjp+%yfoV3)9# -Hue1Mpi#vbjtW#PG?O><!UIhC-1Yu_N%&QmAu(%|FA-$8LTyibu*l!RDE2|KngTpT-zjrLY<YHw`Eb^ -m~cXeR6zT1vIGvZ7l;g`T{jW#e~7pZbS1N^Y#MO;D+{%;ZezUs2dSHKwLqXtG>Lcch09o`f!bF&6mB6 -tZlBsn!MB2~~Txl{;(rIA76}9V(?q)@;$uvfe0}13Z;EYsVxU?SswjE=r9<A?c|Q8XM3b)V(K`@Q2(l -Y#l80p+7ihJ2CdiSn3EL>c=$q0oX;+4Jk~+o{{~l5?nehNa_Ra4%*`dglO~?YeXBS+HqN{9vBcyPm}E -PVwF)ef2OA>Nuqi7e2-Wt4KL<*WRlfhNf4teE3|J=I0$B=B>oIUG@MK)*>k9VJjv#xG^Oz(p@^1Il1< -{(G)ic>N|uXs)F(=r&k_eQuZjF7aS6)GK*@r=kjfoff5vzn3RDH{#0z80IZJF53H&1a=6}sl8NEI93& -=&#dy*w-<9qaKC3Xkf_tSL2a+z-rOP}|9^xFVILVr;hK??X-mY^OhV{DIx#`zFBi-5iRFc{q34t~8G5 -Uo;J-g{^?fB26_q}^(j)>PEbcf!6cL|8TqF#JWMRh&INeB+34CmM$val+xh&|BxRZk5P)Qu7%ZA3SOB -%#NNDq}qgJj{V-64WvHB&uZo6u<;zjo3dXXycdjf)ptd$)7g5qco<DvtyZptb4T+L*167xbAfAt-6(0 -jmN+`=b;q$PyL9^}&5h=xKRm9+8R~TVZ*kp=3y4$WYZUeAN~@jkOZ)-*t<Y-`1pNvfKD{sYkI5}AqKE -Nd{R=vxR^Pn!cG7pPMa7r?KznJ=vahYC8>GC=o^IY_QbKQQvHdreOvqQEZ(9EVP)h>@6aWAK2ml;P_E -s>7j3jX<0093`001EX003}la4%nWWo~3|axY_OVRB?;bT4OOGBYtUW^!e5E^v93oZD_*N0O!Q`4kBl1 -K0rV+IiTgF3bS3ORg5iWqTwU4bP21OH_$yNpzER71U2Z>-$n_H&AY%#}_ime;@J?v0}xF$p4d1e*eGn -<>Nm;`L=xX<g3TuK6_lg{N}r_{&)E=uKncVlk)uab@}e@=C3#JuHKZdZeL!PoBQ&Y+kd}#^X4kQzkU1 -byPFqR54U&a#haV!cMs)7uKD8P<E>BL-8|gn&OcrM?fT8_FV}bF_EmZKooD9yZ?7NjUtIli{huCtbNl -W-zux_Fd*?5CaQXiBZvOqn-SySO^~>_}d!P7^ue!S9S--r`t6o2pPrv%C)bl*@h~K^Zi}L8roAQ)v@5 -|Hc`|G>EUB8?&`RexF!`;o#zh;`B-hcK_`AaE(xw`w;^8L-5zuw)vEuWW+@S!~1mhay`yuN++Vg6aFH -#a}uUERHB)n46QUzhvaR}X*B!2Vd?-~L)&T)iuI*Dr7G=i{>w59R9J%Rk)S<^H#~FK=GG=TE=BdztAl ->WAyQxAz~{@Xz1=P`<go&q&LkuistYWj5dc`tzHc7rFVHn-|yb?yt+$effpI-M{{ArM_k$&pr&Ke0`h -8ySjfY*Eji`cmM7B?mmAh?Th;HZ6BU^S+dukUOh1W?B*}r_*n-1zP!n9+<m<Bi{D*>-)8!<+`RL#ue0 -{~ArH(%{~og{KVO$$@2_9|`sOlE$hGBPo;?5O?|yh*9)0^``IkpepFaBb`Hz3hwOQ$Wn*Ezkx_SFcOz ->sNtnRMfJ-pAr^MJoRe)`ov=Z;5TKKbU!^B)=g*H4~*`}o<j^7VI5%cJuBqo>cGeD%XOkDiwAe|Y-+c -h4SwQOdLH>yJy!V*cJD|Hl%)$|K+2W+h)<KV03sxt~-2G245e0ls-zUSIv~I@|o>`X&}tuHquUy#N2& -!#B6@{_1>l%Wn(%$8z(kyt{q4EPubdiS5Mt{$Y3Xl;8IEGDiR6i_5asTy*vBU*BX4p5^whZ(ilmU%$D -%y}K-5-rhfO>0ch@-lf&Ld|vxfOZnkh{_<b_R~~=+r~f9Xd~%To|M|<-Ys<3TKj0Vt_G_Ty&3pF!WqI --X>h9_Vw)AlI^PB7Gf%zK~%;f&<yStYkKP#8H`}S>l{qNhpbsoItspa#}|5sVQ*iU})hkQ_%Ha>iCwh -tfFo)6kGj*lN4A3j*Ne2_=Z59$}o^6`V_aGt!p20A`kGoJF4B`*Kd*VVrM;nVv0haW%7U;7-y(>QmA` -;Rxi%QX!B59QOouWJA$zkTN8>bg%~djCrx@ps>P^)rsp*8hQ3&9U9Si>KZ{;7@OVeet@y4z7tIakQs@ -dU|m&ci^YzKYst@t4H7b^rt7!o<Du^<qyxFeE027PaoxfzWn^{!be|z^Z2J{PyX*?rn7GgtNrTj!$0M -nuRdNBPkZ{)^Y4E8`sw5U^V4@v|Md82F8=hQZhO5f`#3M_82z&KZCv)V<)35O^J`!DwO-bJ$=}A7OSU -t=uGN3mnC#vzd(GckTh_~qJRuKkc|u#)<FbrBkKS{2IdgNbTg%_Zaygc5xvXbyY3H`(pRr%|^;q(Jem -e7%evFm}#tJUWv7MKrWk}`Rxn@5u*R6S9-gK^8#-BHhSPWj2v92eBJC4hmVPCeRWhP@eFE2_PT*xPTK -B>o^NiBJ4-S@#Qnb}eMWyx?ZYp&s08S9d#)-~fA2k&en&)+hbtYP0WvznP5M`qiOEyG;%gf-)8y=6Ym -w&gLsj;zJT^Xsu@NPAw~w@mC<^C`o;$a-a2Mmt!HmM1J3;oh^(OKxtNI3FAtS5~f{OrmE_rDslkIdj{ ->9`(F4bI7KYy0*)@9eLH-bK%}Ivvti+Wo5v5bURz#nT5@LEDej4x#uxk)-`*yWWXz%o_AhkvTH8PQ%A -#qu$YmH7{kggZ<k~6{9c)NmZ~wmQnFq>KV~}Z%-}kUyK6QXc5nPMa&zT<8BLbB)hr)25gQm-Oh&UDdE -HpD7JD`?JHu0BAuIFDLiWpxzGSd5{L1SY9AiJQ2~50>Gt*mRhjETPp~mp~wz>is5LP-jp}KiBYq;hyr -L)yRpWK&Q>dp!*nLzeC(`(poUUfOLk!&#gmSu<uH16#zQrs$QkJ%hNM$^rs>yn)r3@O{QVR(5n+uA-j -W-hK8Uc<0inygap&6{G_*_7-8yVvvj%6e@li?QPYc<YvB>1TfGTZ=XHd=QVyBo3D0%<{!H^Sat_ikb& -D_9v@^5uZ$Db8wl!II|W7BObiT4c_@F`_FYNkIA!E{9%a!mCX@il7WPbVP~<AlVA03{B~ng_E<+O5>v -v{8#}nP3>{|;0%Qdi9G}0%Y_L^aHsLUDIpTyB59@e9#=n75e6VmIKFLzmm6cm~`+nf_dHcwsWmArP93 -uc!+=VPq>Dhph$6l@rCeHG8z#+Jqacvtzz|H}rbpdGB_)#nlJFF-B5nGB;v2q9Al);q(MlLMX7MrL`y -feOpPi8d16s!$^Em-7<&n&UF_%aTj4Z-PmMwovFUcF*k9WbrCJD+9fLT1H^d_F*SfHtgfTZOMtSzUJY -%;aO?@!)=l`T6IJeZ?G@BLl|MD@Y#<;|YhG68u=$MtwQquCoD5rDJJ%U_1<mV4`~#G6v&gDi}F<9p2C -LcMM@)eKf<2Tg486rIm@U_~RPWs%Lf~mR1Q;`P-<XhIqv?XQ{GCd1__THx}|VW?_eM55{m}X$+2eH-c -d2&0ROH#Ib|5X24Z99xE1!JL0i%!p=74fgQ|`*$56Ne#=xAkZZ>idGlDZ0&CZt^HjEHV0iIFV2+ubO# -bMAL&g-d(FmA;KDr$OVC-vQQ%1+l766>3*@#}9r8(G-Jv%rSylgx0<;wnSOID<3GlNo{xQR_*zm*U64 -kpKiI-uUQxt7=yD5|V_Y-e!qvJT-ZQ*m`cq^fnFd3_<q=b8l%0Bs06XKpDK+c{Q@k!4^y32hA=7yxYE -H;$NA2aFmazwP=hK<R}`wk+n9wcdca&YSW_>|`VEa~%=0LPh!xgl;Pvz@8CZ;>E;$5Q!CzUomAi6Za3 -Kfh4T!0@XPoFThn$17C)A6!5X^@to@ZL!cVrq&FPmaKC}o%1iLS#+=3(E3HJAY6#ezax;G5B!h7Qs{w -Fg_vw1<A=MY=U5-#0utva72zXhFv8+(3p&Hg?&{*ZK6$Ozq1QGfg!PlnJA$HV=QIC^`tDs*9w3Knq -owNR7~z7)@U>kBnb|9a0fj%w&y%#ZR`S*0>$Hb2biBXvGef{AO~C{7+)mx2?@kty!9lmZF)5(eh7*O? -1+WLA+mA+9*`L`#b;mu8$g^-FM`BG4Gf)+8#q0nO`&O+<w?{7A>uTdXsn@XS&1>MO8!P{2uz5}&8SD{ -01e=>4U>;aKoy3YiDA!ute7Rnc*t!4-MqM-SXLtx1)K0?zz(F$HJDZtuQHX>@SA~DFf2|dwZ*(di0YO ->`(ko2G4?IvzbMSM;$guQnTml7AY(N3bPcf+aZNm2<ZqBMZyTb<MqtbXV@3<u#4f|jI-s%>c{c)f16f -MPCmYtys%$y{{s3|84LW*gj2L!UAsZKbADDPTnpm+A#fgjnRLiphs364Z#f>L)LMv`tS?dG7lTTxZ*w -PwH$ad@`987?T68gGM5B9Y#I%B2DKd^Id%ipq){FFIm7cm>Qu&`8#2#nAOVb-xrSsCyN(cYMR%q{ma( -M=nJRuVpRQCR0i*UQ0<!n|vht+JU=+scAu{6MHI3YR?>XdlKw3RDNcl51jz<|!+{wt~|Q9GcsMJ1%&W -3}DMH7arJ*5}RxoN-<p5Z2D-@g)I0*<=@18?EWyM!CuUo80&_81q1*Bq6TKO8z2NE%ops=uy`uI+<?$ -VLQuFcT#2w<bx)wyNwEuB_eP*MoE#g_L<l>{)E2@AW|Fv!;Xz^INIQm|4L&;NOeh!WPr2D{^2k^TQtQ -gRVY<fe#bjs^ZOBeL3oF~MY`_`#O8g^GE+9m<B4m&Bu#r)$rUH0f?nqpQQLaJ<h%H=h!yJ)#4q2A9oo -v+N2JjE&oSh*9&K+Z8jumo$u%v|i4n_vPs<DoI6BMcNm~QHKl9=FYBrtKp{3@vE71E3aJKT34?dvLu5 -6ceRH?n}nEoGPLE|@cPbcPeGbTLO~g%b$KpD+oASvJXJMmS({L5&8FAwSyza00!YD?h?n78nPETiohS -ID|CFi#NF+ak&}wPSRF|0gZUF1l$Zv4poH55R%DkwR3ZxMh-#<>%^llR(2k;)LFE6FeV68jm-cnH>j+ -u%tRO>Yi*dw>dwn1Sbsv_$y&hff`??>oygTE?5!jw*zbX9Nj7lp17CxsHwbgg9O;5p!FG~;HjIM@l3S -J&aM-f9u?zAdvMbbqOcYB7qIV)Rbf~gEjSR99P*+~u*uhM(vME`cE{=9nSr}Twc?+}yUYux%QSp3v<c -<*^T-<k%9l$%dcp$TsrqiRxtg@r2iog^PgAHql)pnQpl$ms7A}}6@h9YI2<dTD2k4+kc_dXOJhH{1)3 -g`@SWy9H4UQEJQPD8#EV{x%8lDR?D4#&=r3OQ(!YxyV%zFg2Ghmf|wFn5>_q$kFRCpKI`b%T6-BfTNt -4>+J8fPL9eu3=eLljhvlVUraTFG?>*1~-UB6$GtP&w<5|c*gyR%NzT%HW!i{PIw_cRVY4`uP=rZ!tEf -1&wNOo7TC&0K8`yMtos1Iwn{W6BoM4CD-gS9NRXv*xWVWUfRENkz;4`D<wX_Nxr1Rlu9xsg+6_rTj|m -bt@*<{8v_E836`0WCyVgKR-dNnzM1=9<1(2$XavIW_Ye+P%(q_yQR;86LMg$~4binR1lb?-BOho1?hn -Xg>7cf#GWSHE-yz@}?J%Fs6kCR$r4PDj=uC2t2^E7iND<;R?55g#HwWA^xc~}Epc9F}KBiDnTjsqw^J -8q0D#iAu%06uz#^ua(6Bj~tsZ!-5q_eb0Wj=L5~{8&|Rz^l5LO%tI9N}@0{X+}I{oC;@JAN+7I+l^Qx -kv|c;7HoP4r?=pA3}}OBqpNIcOfVB5ZLEZVv+ACbAUr@}3$$rwH8V%xSD(Pr;N(S%Il8PITmS+P@F1K -EDIM0X)w*bNzrjO9QBz*rr78JN$YJSs*0oKI7Xu=uv|YNzR5~1D7Yb40I&lCtnVna}0Bv~FvC2-ft|# -s;CBokdnMVwpG_R8$;u;0JZ&R2<{aX&jC|6(yv<L=x#oF;LCa*D8$v5E85UC6CqwjJ^r79=}Sdr9wKm -(09EJ!y2F!Shn9mH-kQ$w)b2dc=9t0O!Wbcx(Y&VEXQNP&mxIdo1HY%tNOt(og}3;}x`x*i!lwlqkw8 -yQ$ZjjvGMMgqR}W@3%9tKXgyf&)C{O~@Xw`L5ng3L0MqtgBQ6yI%n7!vT}ct;C`oVVNK`(5x%`Iq-gf -J1SR3XyX9jz_XgJi1c0IZ*{6?vSB1sbgqyK(^P()!2mu2%R!8Y<Kz8R=AZ_#$@9(BNt5t3rB>3ZWQ+2 -t7y^`~wn;7|Uc_%C(wW}w=r$^474b&wP_ssFjm_=26i}sT3_PAn@T)=@K^EU4kIO>JqBhNj$P50i<|& -vi&#z5((UjhJDgeu-bf{Xk8cP<#7{Z=UR|#iBgD*fygM~K5)G4z-6(~<6P?{}La5#NCRs;kP4znq|1l -%EcxX50+A8}dq{DviG7g#DX1ye>Seur9BnGd0<4^e}N27ng=$-s~=0!EU3j10uyrfdXb7Fnzmu#fC=B -@&MAej@~cYlW4neQFv(>;~d>bnUza3I^CI0iT9|ll|V+dswP0O)LVS1ldnSc4&T{g6|Hb`@%XyW*Zt{ -W5pBQ<E_&K7pOFJYw2dY8Ypy26`Hcuq1I)n8yL1F9#tf8CzCf!gY*QSjSDf=h5{0TW{C~MGeRFK9{hu -FvYDsAV>){Nil+>yVMn8>n*tR$S`C!!cO#(g1pocSj}$S?d#$}?Fc404E|Q6fG57~T3aO_Zs>Cqgu4> -Up0$I``3xRN;CspfNQ=L<3A{Wc_a6L44l*EGBlud{xJy;1gyJ_%rI54G}dxJI#Y)DlF{V;I=mlA|YR= -So3vJgQ_Rn^%Pi20QOaiWYN#1^=0u@b@GlHP*(r!1E+N~tDbX9Q9N03HF|54h7wWz>L(J&Oq$oDPSkp -cr4aHcCQcG&_VG0E&%jn}#7)D9;ctP8}L<bHZgQ+JrViXu1qmZIuyXru8uVGS(CSKEUY#86!}3INg9S -cXW;}d2JYWcbIFOAtB1BV^=}jIEaN_wZ58M$>Nap*ZPpUu(bCzl-r{Mq%gt%xJPlJ_IlCQ)yiY1# -OHM7N(R<v`n>!2lh92AmVHQ1&|0-^1uq!eg~6_o-+LI=_t`@e7cC_<2b!(FWX5J_sC1x&(iQ<kt0l7% -BIBwtn--*GtTDT`g3`s8Llix4~2UdSsBLE5rvN_{5y-~whpR7F<A!A2ELp@vFuBRIzxmFby0-~$$Qod -mRL)C@`i6d}g}VjvT=sf)=3Znha2DP!?TMc0f&6Uy-l@ydvUh(Cr_ijcfpumob}8dfWvZ2e$a3VHTwt -yj6P;q+FmXLW4{KP;jd7Ss>nSe4>Vol|y%O8KHQ>M!JMQ|+BNjeijOHW){hB`hXn)??N4Q1Xe(U4A%I -RBlnmLtqWgp@iqD17AqOM+SLX`49;3Wku<x;%MzhUq%5TkhLbmRLN+T!LezkM}8KYhND7%anVEt+859 -wXCdUU(!m243|0<&PDu!!uMTCh(llpcr2JEfAEs+f7?G#rRvjfKwm-9gm4OhPPh-4hYASAxkVr_trdl -y%9Ox+BB6c&_P&imEFm>`2RxW`tufi8%<^Z@&7}T<;9#v4Vvzmb>$mK@Cg#8!<2uM#w_wDe{izXRZoK -KbIQilPwC?2;ageo7$c?VwIG1`i2R8pso!d&R1h-0#bP?KimW3f?#kHLWKo-~uT2b=`zInb~METIE{4 -MH1&No-(5PI({)B}_0gmTIsV<nhh&cJJy{6v=l(j4c6p!47@^iU-LS=u#AdsvlDWsS*%!%RoB_ggRg! -g-mM@agZk4n3}lhr^&B50=TR%_r>yuDGCs}GeU(w0-lx4Vg65aM0OrijYWZ?zoSAVG6H^DW(dHrcgdf -v1$f<|#)#kA8N=1Pm27)thV>x4z|cpw>za|7!yG6a!eD11eKRGJ%n%IRN1%$(TA*(2I5cO8Jj<udLK% -i+C}c^6ezDesU_Y@Ozh&o1v1+#*%*+TKL-hn*bEsYpw4zy~-BxvMyBi3Z0;f(%rbAw|QU?wAKt)LA7X -@5Z=uOwgXLz8c_XJor#WJ#40F2*VChzL(X#86pIE%Zh;HYL&Ekx|<*kMJ096}7GUh<TMG61rXD`$5OT -8L_+`RoQWndZ#)1H{#mp1h(>nvV`a<*_o@T5Uc;IT^a_tfyFo$D!>A+SR6T!e+LB*_b6`cl)B)-)u`D -_`uv}XACnt4y7t`S8^Uau_{=gj3wPM9D@Foz!rr|$|TD~n_)Wxy#w|ys9f1(VA&lZmQ1RkmNtaz26rk -Zl$0Nn$C2n-q&vXF9qG!_X$2I^p%tl$;3>^!3RFEfDZK*)$)=quI50|wN%}MhPZy(GkS)Y>Ary{UZ4* -JJ7-a95eYI+a(9|TkWLE?F5HhilL>Y0K`XNM*9CuTaXXA*Lp?G#Ypz2`k7B8^hrt2Z{b+v5^GIWI0O@ -6rAtAIn3FUK>vPdVd|46sL5tg6On#|C*RS;o%aP+kM5_CCPAXg8=V@!&BXFzV<+nV!rS{?^Qm%;*U*- -7Yt~?aV<8N+jyGY0+g>$#MHWnLH$MQ5q99kjT-UXauNq->o!MHOO&WtY;aNP8-Ko;md9*d^@ppwYo}) -q)^`M)lw;}Z8b4L9}y_Y1Vc}pUCah~uM_RV4>gf#wQQzAiVP3yZV>rODYjbh0~{JFP$``?<iwSJw_*L -73Pys|DfggT13seCek^MIfP)gVMPLlW{tohi-mJ)&%n8=S6f{3nV(vrQJIJ3_i%B%9ZN3DrJA~S9nrD -^QQa}5q5C<5*@ar*~@yv+Lq>%hqrB-_r<l#-pL*Qp`iMh>IBw^b$Z#T0s>`;aq%Bq;I9S@{*ZBx&+e- -AP?l|D9Lz_t$n!=?zT6@^`{r^`igq1pM^O&pjbS%0JYvg(O88&#{;NH&nH3bu|eNHr^u_|akktJwra( -9%)4MLZ#rv|~0QN?gDuq%iAx){KVAF=#`wQjl>PO_~?OVj_V!&qo!rp9Ika<~uBbLO_ZF64GQr^ION1 -$J90L4>K>FX$1pu7fd>>9GIlj6J>McVQKC(&&Dhvgu08ZdZ#szUD8AOgAzj}V;ykFJ~Rg-)oGKDowU} -stVsbcr(KO&7KlCf4M-+6>z4YZ&8QJ&v%AQq7%V|SPp-V#8V2{E@uyn7v!J2wblMYj;ChF(KP&pXeF8 -ELk^-u2!|WX;U|@KwZ77ycWrZkeih=a9Rl{h7yvEQi*D5NZrVxm`speso-+oQ{LUQr2E@}U-_(Y3Cby -bKVw8y|+Y@joi8e;6p*)&EX6;N&uoT70-H>C(s_gV2_t@S^38;obr{56`gmrc!`dNySl!bGEaxRG5IY -7_-gp}HxH@)DD<iR-j_t5BmG%x2Qr76iqB<=6;9XdSyfaCS%*o1jQ#7FBN5IMovjdooNb8bq5}7M*I4 -p@R=dIuQnn**mq9rinuct3<-0&58!wOl|O?PUIREEBUFTzi{jZQjHivKHgQr6=4v|6*~}-`l;-E+ABg -q>$K3lC~wHNiN?(PuqScYt$pHfa6dAlaa!Bm^EW$anwhype_5gF8@z0_mxEZniUxWLTWxJgw2@|5pn) -Vb#IxE>@He^5W>HNR3ZWu3C)G%TVajEMV^iRjLpjtHrjf;@$v8|-8~RQdJ+&&;ad2pztWB;);bpf(Ws -5shdbV>JJS|JJa>KS;L$^hLdz@Lru0_&!Li}jpZBgnOCchLH$j2M~FMYF=$*Qc@Ag$J0pgAXmQfk!0s -23DpkHHea3w=i2+<vug2;eoi20Pfh&AiwOI^#vLgUZCgS~zXvm10a=tTp&(RYPVn+Y3kn$zlpZY0;P0 -&0;j9eau!B%v73IZ9}mhL72dZ<5(Cd0f{VsnA8vii;A771g*qplBZ}B%?lwju04Pu>6wQQph#qWMKzg -vZ)vufvFTM&36V#BSXETJ%|L~!wF+Ug?SZ%>)v;UOS_b|>6v{HtG}M$O0FlkG+3nPIj!+ZKd0CXW)X8 -xOdxKmHO&6)VS#(59u~3gEHVQNa{&~?%uWVRYW&$9<Vzr0b4lY|Q&8b=904%uK;hw*(Rff;5lDu;+zy ->bW4v#NbQnwY&_7AF<j(<^>u#g}lBdxHntXaik^XRH-Fu-<tumP_&Y-2kOfwi1A_9^wOcD7PO5Weg#n -jNHELdHmFO^`Bl*n&yKK5Y+G60%gsV%ugxmQkp~G`6fBb`&yEn{rLI7F*rSSfSDde$}XU57eh-m)k5> -4wVx6jD#0+!rjcAs`X+HVr`cMTobWpLO}ruYV0<9&I%kMZC7it;%ZVZG|BFWPk29yN`W<BG&k64-f0y -Z`3IM6Ou3<T4#-70XYK;7@y?TBQe7LfC%D?xU+u*3umf-pwl-tR?0GfJf!ONgL_(ytK_`2)S%Y+~!wT -zRh(!CUq{^$pESOeMs;fnt-O4t0D5X%(RRSEeQ!?AW+I%TOvk4x_sdNW~u#pukDr}eoCcfK1ekhhR8e -1b)Oa1o4XlSgp!h?$Af!Pd|jn&#B;%PH+u$$L@G28wW1Cc@Kx7i#LL#KtX%<>Ae<7`tNXoY(9{DooxY -<t$;$%uEB-I4`y0DY$&dI6A7kj**PGVDbm`Mv12=hLa(?YaPUE0MhtnhNFAYQ++9Xl$12?2`jqm2L?i --MZ@B6cH6ErepGj9)Q9KJH^UA&+{M<n}*rzgsIkD-c5iYm^DjOlVcB|aGsXILhTjVExQ7oi|7nR@{o- -d!#msT-!e}mI>J+{?29I)VsFZr^no?>NDB~$iPU2j%&<A)h4Ig3Imx%@Ev5~~5AE<hbq%^&G5Ol{3JN -=TPq#B$8HAe~tZ*#0%X{d;egcwfTqx=7>@@Iv5{$+YCE#GfL}4nSVQ{?15JqseNz6`Q&kGF|e@d6TWQ -p(ssV<a1+B)-pk6zdgMR1e+?fQ%kVK<~DNr0b!R*!g9lE*RIMpSeZ0eI;=AtC`$_*2e@l$a<`riP<5s -t(~JI0e2dKkV`(C~<*Cl~bL$dpJ(f$EH(Hv+$B#AsG;{)1%v8rSKzd1rOWgS7x4A@+=-RB-YR#I2vUN -nsxKwpuL`}<Yg8;Aec5W&;CP+5yFr~dCauZq#Irg$a|p5wpeo|syjs5ZcEP84y3@8KS;_Eb>RW%ro#X -Wlz5OqcWmmwT|og$BXA*575Xj<havl751Cr69pjX&>S>pzIuuArm}qwTc=(R{nl0!|r!-{`b?n*7N>> -Uj3ayzwSPaUBx|u@Q?QW7oOaUuw@uN1=k-D4y?HZaC(8sjOi^(!#HnT{J1`AA3$L++(+Qh3vvzPo4Mr -~%Y#gEX0z*bFQ=(BB9H7;t^evRy;BgJM__zqmT(Wu>Q-SgB-o2>+_p$XDyA(b-2BCVunsZXr}xvaS<m -T*ndkjQ<BY|_p1)WBx02c@@)MZyg#6=cUu*(M?oTL}$2ESPh(G&ft^u_7B~93gDD9=41wp0P6#^?(a) -30Pl4A}R>8#l9BkTw83c)pkxN>IpFI1S_g`cR^#OE67$n$z_EaA60JORPxyr>*aJMjn!ih3d?GWp4?k -Jh=^usH?>`QRD3EWq^i1XGQ7z;EjUcDHm0aZ*>MCT+wGS|PlrS!NVVN#g!InU*->hP&8)|>7#P1IfK! -IocUsB@NqJFTs*_0z;Nl<JielPWJfg^nLS|t{kj&TerfK9c%U$Mr*wgG2what80Spe$77n}aXIGU?46 -4@#dMBljVp|*GR}I#xxRof@)l*2AZ$}lW@UV+UE?(>f^z_H6E)U;bJqZP&^%ykKvB7-GIy>1tR!H2ph -m#DO70w8SIAv#h`pg+-xeH5BY4_mD?A(NA?6zm?QQ(>dO9Y*LSqxIp)5C5l@(2%|nsPNo8EcS`KTGec -@-g6PUB`x+Mo(>X5~oKYJdR;^fJT7y1_Gf{brz_tvxW}wvLxx@7E6C<AI++w=kpF5$vh^x+m-@CNY13 -J2q~*Pqw7buS<82jM{)c^AQSSTg7CbsuSp_oTH%v!=O&cZNV0i|%d(6(N~}gbQQ;!j8^iL=X(XhZg`1 -1gA)C~w4)^Y}tmAr2&NgK-5tQR@l0!+deh^_8u=NzB`(0JKd1hXP8`zdF*lWMbJve2$OIZ}4J&vYW4* -Q}YcT8qw&ytNGyRE>a#Te{qKUy_I1(>azlQh$AJQh2}Jbh)i0hVjS2)(Kt*=9v{o4GyXrEWt!N4Ht#k -vkJz!Xf*%dEmvq$l-YrRIpi2t5Oj)Mj+I{;>qt>1~)V*AYkVlo>}Z9VFM6?+To$SN!mRjK#=0JQ~?)S -wY%2RwQ7nfqs=ss5}w*IiMG$9%NjP&<k>$v1jt6Kg>E=rW2*~FeyesVtSY0PjNzR+TvbuCF_95^+!z) -zS3pnkD+dlwSkJFHAPiYK-xO+~wyW(#q=QN$D&eQ6f;?hE^tF1v?KVzSgiJID0LlsgG<ooAL&&P)4wb -udc&uK54Kh|XPn@VCV5N49)3j1KuwHC!q!`-GB|V;v=@w6Ao)V~n7ZC9LA_n^oESK*#`>B0Fdb?ukW( -UV+-=FwP35HGvwBfqV^S|u3N9`9;7Kv`^TAp<PzHBVwR76Dxs<YVYHylj8he+tzTZ?->rYczYT>*;Ab -V{$DI`R|}FNIySsSQKMCIQ*)U1fUJgJeMAApp|a(anRXfxsgbw`e|(FALG9r@bu2D<jy`M~&XhaQAST -x}%MvHnO-3_KCyFmB>{%Pjea83npJ=+nzqQZ0YIX!@+GH;Bc5|`sS)?YXl(tuhFKH5MYr=YBD<wr0Ra -n1@X`F9Yr)NqGLAWnLpX(hN)6Xv!4!4DZVVfD(3OL<+RiR<Dc~oc*ZWFHDKGh2cu!t59QFsTBzk4lE* -%CWAWY7OO$y%t|GF`ud7g-f<<{S#w2qwj@gkwg@;np=Fza#GqogNbrvP;(zKjo7mQU{1ccqzUr&C+Y8 -O2g)@jSOJ(Zj7F}8EkYK**JC`?vM(pF!FXFa=AN<s?<5+gk!J`a0YaDZ}K3m7)dLsIOE^q8`V9IZBev -8lvXf+hlyB?GIZPPKXl)p!I@q5yNO3A_SN#*AV1w|bPvVhL>6<WT^hQX5+B=7|v3+ONa#_=4Zsaq3*e -r`?WH^I06)T+j5-gKAhL$zvyQ6{9bS=UC^_PsY!&rXnWK;@I%SIC$lxHv9X{g9*CB?sE@Vc*a$6rBW9 -GzE)Cdn@`N7DW#R_;o;3TEmnZO4Non1i%@b#=`}9~dB;3BroEC{LKj2l2<p^M3OH0iw_*YF^t6FmOOv -3BeMDnV5;W_LB%%;svjx1G11~(Lni12$)4bYr!FmmT#d_IzRn#4aDK-88w?t#;)h<21af0YvnoR~Xvf -D(&8dB!9^1s{vq<C5ttvos8fpG?>Ja*U+y?8{?Y>^Ifsi)$E9m?~BDkpV84LjwbnT?QK&)NGxIot1+L -AyiKAPcadMbCsaDZ57ejt3x(tg?T=FaX?1fQPf=p-Y6A-HZ*S74u6Ttg$fxWv^<tn%hHbBfU<2pJ!D` -6zzY)$rp(>E;?H}Pb-fTPplyO9U^uxT9ok1YnYFb7k-G|-8e4YEQU7M(DU7#wz8+a+B&2NKC8FPmd2d -nsVz@s9)6R@As_Jsn5hyb?%6NPfmSQJA;1m@zjlJHM-C`<vlNo;sgqNTnctP;NlGw&v7tlhc6OL~G-w -_~RV$<%d8$&e&T1Uh25ALuPFUM1h@H3jolSm;2fOUIv<%NbP&GU3q_q(es2xi3^JqVH9(&=95-`l!vy -|&Lx}!E?-9{N^1D7|89OaWYSN9K8;4eP=k1wQpck%xKP)h>@6aWAK2ml;P_EskB%N;%g007?x001KZ0 -03}la4%nWWo~3|axY_OVRB?;bT4OOGBYtUaB^>AWpXZXd6iV(Z`w!@e&??kg%^+r4XIALUexN011TyP -gh5rF&|;5a)%7mgT_<w?`umn2p_h`o)=&1#eBaD`GoEJi@<aW>!ziKgC>|u~fcoQU{Dt0#Z8n;;*fLG -6+(<1H#U^Kxj!N@gDkZwcZYYDT+c<@ewDb~@_x!}l?AVei$Y0<<e8S#kV#hF*Wu;{%yfoV3)9#Gje}I -@~#vbgMW#Kueb-ic&IhC-1YgZ%H)>A8PQ}4rvKS6OZyi1W%G!L<k=Iq!$aen9|HriXcuDr1=*ZvC@qK -UBIXeQOh%95@L6?*c9X0_iMee567D7m)6)<LDhGLtife@0<<RGW%2p~-SC-GLrLcoI5)XDslg$z@RoQ ->AmX6RP%XOLx-nAz9Lx9V(><)@;$utXeCX0X&u&YsVxU?Sjp1&q@tLA?dLY8XC~=)x9H@@Q2(_Y#l6g -+wGmQ9T_`hEVYCW^<$d50Bob^niQsCPsr{?3C^A7B=w$l3+?d&LNxk}HKH|B<+!L+2Mma%ucO81>2g6 -)@<?B!`8-M%k9UZL((qz_2PRqWlms!lvO@bBg@a%+n8%-ii29@PXz>`TAC4BuAWdmFol``!XucT5%W* -WP*>XOcrh_g~%6yVIh<Qom7l{i{mIg}Z?1fbB(E20B>rkM|X)B%>W6oG&qe$Qv+10-_LuK@4-!C9%LG -MTwq>b;;vz6E#Y~N4Q1<QH99V~s;?a&`R1PT33VFW4QLs@`&sEn~4>Ko@n=p+L6=C;?nx$eEc=@BhcS -l)VQklg>`5otCWg*7F0v#qc%3lWwL0}OxBL;v=D@Am!&PlQ8JI~<845I=_AIFEfRMYffiPtbVpNrPu{ -@EjrKI%IR~ch;<-^)Y@@DKGoA=NR6U{cP_&W1K7hUDYa`tR~a@!MM?AWJ)-9v>$-2%Y3*PI2c%uf>tY -uyR%xg9IK*D*Pkdcnh*Z)xC)o3)$YE;wa+dfj;*gy*2fFYwq6za3jCwkD-ksP4k<qVhv2W%TbxA?<KF -r=v_!SOe(CP0@k)!5&mDsH+@NJ&Sxr}moL6r#DWNx&*!&+$9J+RV)%XWcO9KQH00008031s8R-YF=nH -m!S0LeH203!eZ0B~t=FJE?LZe(wAFJow7a%5$6FKA_Aa%FdLa&KZ~axQRry<6{d+s4uUuD{|ce-Jq(S -xKqe)Txt~k|~=LiPA`NJsyom0|G}96$mgmKs5W;_u1V$;6Q?kleVvC+L*xI-u~Wa_uyBr+W)At(fjd4 -U5?L3le>{RySzUCS?yW->fn{SUubom$MZN15_O(MTE#|PW&etkBv2pI_*v%$Z^A{88(pYK7dkAmT!mO -VIB*okX<Wou_D(<RBwOiRWiwT@kjDDz&)s5!{{>05#M7HBFXAjUD$I3I=txaBOkkICkZVv|Z9sWZsLp -v;ogN>*28q_?12s$%bxUiFy46PK&pHyu&$G11<7o+TI;Q)ES-T4ICv_7i^E_UvzFL7RRb=XBQ!KL7iV -FoL@iY(e4e4r@YpqN+E7oA_2ervc6$Yuwbrc&R54j5!q|u+U9Q&796wfyFs7xb>LtGa+UmB;f_mhw6Q -X6op-s@E7kmjbGCUJ<(mvN|5qg7zkik_K8t*HxQ<jyjpE;5i0NTok09pgQnO~%9%bvih4r&)?U1)Fw) -g7}B=R<yATrZ*~qHFCFe(5ix3(n!TAlU+df_zMU^&^4S%O|>eGo|Q=t6tGr(8sC4o{&=s3lh5kY@b-2 -%x&QnF)<V;G3;PMBc)3bq5QbEFkQN&-4gy!B+w%|DF+3Yzj_*Gc_ZQ>)$>{D*U0mO)p}HB~-jB~eUJh -^7&BxoD>$}ka9;dZaF)6c6$(4#{Ai2z-Nw|CvCq_j74D%W=m_%w3JZqRa)QFKt1&D~%<~P|e$<jH?i! -HT6e^BvErCHHa>pX_<!25Qr3o5mJdvN-2&{MBZuqa5M5}4o)+b`l7NM9sbmiN?IW(rz*HN@WI)030q{ ->gX8CrW+1!;^h~)M)bV8&k=vgM(R~Emg5u#SjZtqtLl#M+%Z2r4j^?tQpvBvdXh5G-TJF<KdkyZup^H -sM8XGVHeOF(7r3+k@mfrwvxKTvP7S43f&~?eAljyGHuc$#AaBOL6U69n%O*!{{`c~@6&l1%r&`I;PM} -wK#dFX`9LjnLg~oTB6lG>!N;8we9+TeuPNYlVwaf%Qg-DNaijyYwcKS|%M0mGajF)h!zlw8*sd~4e?{ -<7)X8?rVu$0q>;CuOzy4eQ`$Ocgf5ZmT+4uB%9j8&YHvN;+*RN^8Wj2q)#)_Iif84&}YkwJp{RRJ~6+ -iv7wFpm`<+BV<NCXdSo=Ha(FNkcE6X+d!NDJOfl0zR<U66d^v@nPRBroV`mv!XSZB8il73&NsX*R>Iv ->?TknM{fQ=hHcVK;dA*J7%DK+6ektoNAakiehnLW*?pcDlW+(+U69C$6voc?jL{s+XdxilP$Gc#wJ9D -PRX&@f=kpDL$B8wxzH^WRrSqEhw+S)Llg%g!afcSOXnSb^f|^4vp7Pcm<L4(L7}}JcEC(X%tU`7U-gw -!$z<YXoCJA8wptOKn>i~5wHB#v1uKedNrOYwJ)%HdD&)bO0>v7>&|fWqH1p*_(1ckU>O9p^57{q4%#> -7>D!(A()vmxKa!tzN8r(3}l@3zMGhAY9>@ky7B;bVABADu;K8s{vO_>17e-4ro+5lyGfBILq&uSIaI& -m5%Wkl!97{u6D-5U5r*%EKyW=>V1Mx`s(TB;ZMn3E3j<4KIP6C<`o@o}*sGaX8d9&Wu-OGs%%Mu7=mI -rn5afCJSWL$!iUuL(;~0wlgsJygIb0HGA9v+=vJT|uG*$vlHe7Rv!kP;E6@oB9}dAGu>5tPPcLPPd7k -u_YLJ$!=k(Fglr0oTe3TDY+;oRWOY3C2G?kd;(h$>^Fp)k-~_>MuJjv$&J{E%JoEL@rm#iC$@(qK(br -o4B9t~bNoWN!}}G&ilC4?;fs1$FS10-YsXae8pJ5P+O`SRZ#n~19-uv1M=P+o!Jk0}$6I+d7z~sy!Xt -G^XGiQ*I|-tvQ17TrFn1#qF$BEm7;1kOJy|axJ6Adm5|gRJXX{0@xy4}Yw1+lL@Ab7^H#@A(0qHQrV~ -)JcLT+A0K4J|$uoY7L(yRdL<7v!iWLw@^P=YY4B-mJ5d^EEz=pGA52J#p7;>vgF0F;r4R$xD(&iV}q{ -T8*_)JcE0L5;t0Ms1`{ilrb~W>jhcF$^S17@8q3z}BhlJqk*0;PxWto@Pyf3&9Jl)z6gKz~>l=jNl{f -?2+0KcT3~2vT<^3nFrJ$v9+D$G(%Bas&d8o%c?e*X3qfg9-deUYJz={iPG3C)l-TxM=O!&Q7gR+OhML -+#{M>%sJvhF*H@o1`oYnJ%uOP4B9}(5UcFw#jc6ostY1N2)KIqIo>iGc+1hrEBvg|?nF`>e1l$>?s7W -Exy_AEPabu#F;L74;>M4YjglG#HO6}W7roRiB(kx#Rs;wi?1xxKoTPTV#qba8r;WW?&Y0rVtREt+ntq -L7DkX*{uaTaq6yN!M51j+;TA_g4ZK@>;M?ftz@zi>gMtb&Rt9}6Aqf|xAds_Hg`sYgR-TCNG+U~85F9 -8h2Ap(pfDYc51a{elWylOELQ9CibULJF{cL|84SfB>n|@NQH&0K*2nX4CtE4b;1`YN5zGJV_e?UU1k` -m_vbR!?d(tdk>1qR+TSt3x^n=&8YhzYXWS}$VVvR7qNH*A%Ciw(u}BA4%O4MiY&BAnIfuD1kmi=S)-4 -!*wFf?Jfp7K<^hCSxL{duK7bk0j2)^VHb5C|V}Q(){!+$_BFOnPA#pcK04bb!_dd_cl~A|EzKs>@ZJS -+~5>v2|(#0E|Vkwovb+3vtm`rkx93n_7g7@*LLednA1Zr8z^C>Ad%K(7T4nKTV&@(g_$a)oW>kD#I24 -2MJ#J1hqK5^-@RYEE;c@~u+buGdkO63|_sm!;fE-8h!^d&M&pb-fpXj?SxT#S`PTDiZvq#_v1QLbExs -)ME~VLia2b$@twJ{~t>(_d;<D2NW@qy%XR_j6r_!As82=?3{4;YSWiSfvd8;}{hy!)>&X8(2v#Y@11v -(gC(P-<2vzs!(&%h3C{OYFBLL0igvVTV!x#TNU4Fw9Z{54sP!pfUi1qUPiU+Q=C$oyQ1HYvLLuE+Jqe -hp~w-E&k0D0YBD=8+ulY=y2psBniTl?wTEg9TSx$M2@>*a?p~*5oLJawq2V@pLQPr1nq3A@BI+uL^L{ -q79t<)Bi=kYr?xqrah|Reat5#&w7-rUA@fXO5{;#B|9(#yGm5pJAWLP5KC{szZE-tN_t)d$tNYx!(h) -dO*Ek0!`i!dgI(qa;d!h|x0AFvf{GUa?uwZih{a*T{Nw>d+&iC7@_!4-no{F9nTZLx7}eCuC5hgi#`* -c!^%@zE=u*=b3w(tsw~K-CS=gJd0SDE<KrfT)iL$H(MWF!)Sl0Uf9%<gsuHOp@0X+ti~b%3{)3A#hVu -09gx%+yV=DmR!B9_*GymGTxDq{o75h4kr{vvhR?><<r8>T;KcQYe$^45nv28@mW_4hmw3)p=9M%Rf}l -kZGaZsTr8!ttWuqX9-2{Od1cQ;V#*1>5TvOjY>3j^5sr?s$dt~YV%V-CKf0RLhBUon_MW9tl_Xbs{9d -Rg)^}4GTUlr%L5Rv$TAGK+Er4egSt_YPN{dtw@}PRAPJqIx&{JoP-#vx)Tx4uPS6IUb^n-(ggAh%tX- -M2@WToz#1HP@f8J>^STXp>P^q3#KY9@z2shVzMo&+x0VG+H&?_xX|UOxUjykKIZAwQg4-(LAo&%C8qq -bqs%&R<$R9eGP9A1Ctg!e8p1UL1Q%Z$y}j@BEeS;h(*Q_jf~dp8WW=zt(&HmjkPjD`1W#nljr&Jy$JT -V}K;~_C`hnyWIwXH%o#WOf@P#SCbynCAA1S%}h;}(0^?2xl7)Xq`R4*I^t?Pc@(M6KMZdl-;M9?hZ8p -I>t7c^eD=S=JAfi%)zk~(mzlo0emA=G`9)ei5tjckzWWG)K8((8N1q-i!z+62J2|hqyna7E-(A*-4xt -z6nR<ML7K+Em4&~pj>i?)FNc<8A+}_YMxzim~>$>$T%Gi%=k4K8jM_Zd7MRDMK|57PhdsnV<{fx)_gT -ry_{Zu1G=wDst7?SMsrn;ng*mG_21;j}FEi#tb|BMQ<f-a!FO7rqypW6Qyx~%~yPw)IjmHIE6d`YQsR -vHU{d*1ft4Jn+G`|^w}AirstEw|BtiCm5uNE1PsJkS#h#XM?(3?~p0@iL}pwq4a!qha8V#+CqT<Nn(Y -!n!cJh6^-9UZ?dXvk&YCwbfv=M-F4_4yMyMxz^UU@9lAxdc&5Ny|{j_$23oc=*<T&IW`tIe%CU`M%;^ -?6)pA~Ds#-jG|Q5j1u5eyB*Q;cPpjjqa@gDV4wY{2JCwG)?`}qWUvcfK-+pOGm1gO;NhXmay_32(K@> -aOAE<ejMP!Tqg<qK>nZ~SnW=NBLkJeG5!$nr;;z)Jqx@QsKOgoN}E<yzWphcdo2qw)6_wfWBEbWdTM) -gv;c(QXSX>45}UZ5k>`6v12z;@l2_Wq})6$W)fRExytGQHJG2OOth(cTBxDCUV{O^A+}+s@ExO0cTYF -3&Uu1A{G9J7{^MIo<pm%y?FXifU(YI2S+V`x(6mkg@oNg$|l(h|tJ0ttJ}Sfi7RW9NlEAqn<iKUmYx0 -M||kfRXIh5d^+-I5y(e(N#j<KnR6#iim=y+^%*yOoesXyGi7V)eFR<Cq^3I6v$(KH&eSrabJ^w<*s?6 -vI-W0#&4^2Mm>w}{vxJWL93`}0O8TyX6gOxOQVx_Fk@l4TfTFSSfI_hG;AZ5-(@g8g#?cg6>k&@*Mm~ -mkpx;Iw)3+^~FC1e2R}OxtHR341-!~?f_R1!+zU}0zX2#omY1`|%pRT5L)fX&wva_$L_NZ0uwQH`o+; -o;DiHvy3vqkCQLWfT}@+CUys-c7leF?+Si~u^ZGWN)WV)uni&_K9uxZwvW{sdI5BiEGf%p;Q^j>uyg7 -h08zG)Xn^bgpGK#Bpw1K?ZvR^~V$61Oj4xb)5bt8FzzmoHqHg$=1zK#i@NFh^?Nw(#xKjlxfcf9Ovd< -lal?4iBdxqs?7vf_nUN$Wf>ZM4K*XZE!}eqOigQ<xB*E@%c$+8J1GjR*nl|G26T2Ngw>jqzR85%oXeW -P4t$z2Ry~D0`tDb(fvzJj_WB%i-aMe{^=oC;)nEs;Nm2O!liYK}tq8T@D`1$idc%R`x-$$*0jDUMi<} -A<Ul=wb#eFKkJ6KzY6C3I(n4@w7QS*>k?oi+a?{#6J8;zgf2p+jfCYyO~56K!|UAPLljH4*w;fHuX-I ->r-jw88IZ0S0SOREJXjr73TP!iqFO~iKb^{9S=X38R428F$nn=yo7(@;<Q*ZwqaG!dO#%LO%#TFMPsO --&~CUAlDQX)C$rl)voDH}+dw;uX)IjQx@+*$mXf)$qpF81|c))E`4NL%n_5s3E9I_b6I*;+2#6yR5A# -R6rBQqY9TS2V@ZX^okrZV=NY@rRP@k$5zgkBWng-<#SDk=<JcM0Ur5XmL{8yTh*;Ml99ra{idp(jng4 -Iy?^U>GtCv1*=VG|cl8ec^&Lw4XK6SI>S$-DQ*EPl`oqho$%!dks9$9Ls;Q(~01J-gd>Gwp+nkf`A?K -15bKJVdvD)ZMgm|}|NukUk(m^qP=%2nJ7MQy)5B-xje*ArTfTG{XyS>zYr9uDWTXoX97tL<XeY5}gW( -iK)B-pN~UmjkdqkfNsjk&^(fI2a{%^xSkB{?LQhRP?~{IAo>OQ)ry_uaDFx{D&9v)4;r*h4|~hnMN^F -_AORcVeEGoU1lnE2ZD4`n@9${?W43t^p?pUW&fJcDkdn**Kk}W1;WaEd->ZQ6euU$lE&^RdS<8tR+jT -4lqcRIGj}LwJou}8{Lo2@5ht(!r}i(Nhmf|yJ2qv9_fCdo}x9<CfyF@Mf+sLCZWchuCcy38}XNWQeL^ -+71xTqv6uEch4v?JmmMIt4$5U5ET!IlaH&&*Bt01@)2)nGu$hJ_r<KL`W~BbhUgekAis+A)>YibGGYq -U1c|*$#y7hp+zg7L;cf#&0+_%fv755z_7JwUkt6kqHcvE?TUVH&rYnb1PhC3~x)O4%C93ENUe|EZ++8 -ge)v#cWA_0?1z{bOy0=Jmkuwm?Pt@16m^mG;ZJzvHBlW;}K2F^ad}4|>xv>*qbS3^r4`A3nk!L;udC3 -A>|UGidi5x)=GqEOu%SSI6~N|6Ts4L2`RTpAO1rjr8ee)}@>ilnMQ8OdITHir;F2J;}^{Gq5L-S*nN9 -3?J^J!l<|=(LP`K-zUXe%^#=Jw;0d-54iZB|G4i>W^H%%+=bEdhOs-XA@&mX?@A4CiPL8My+osq#a8! -vX~)Zj?B7sJ0|XQR000O897^_9>m=F$Aus>{#AE;f9smFUaA|NaUv_0~WN&gWV`yP=WMy<OYH4$3a%F -KYaCw!SUymKfk>%g}QzRfPV8Ja-MMVA`V;7)g%0sU#X-NtL?~BkPn^t3*-JE9AUhb#g_?;|{7qAA{)k -CW9<;|?B%##r(PDIvcpZ)rO<*TQEc=lcS_Sx4@zkBhteD&@3U;p>=pZxZ-i_gl-U#`pd4>y0gxx2b8U -*EsJE;sMXpYH$n&F$?~et!G*!`;oRtH=9?^6K{H`tGs3%HMo>@u};xyPL<G?D_lazh2+ozq@`Y_ixJM -uZ)?$|L*$n{i~~Y*Z<eBH}`k%^W($2`v-l<fy)o~5BvL957$?Z*RRXZA2s4XUh3+BvEF^mOa1a#e)IL -`#nzfR#IOGR%kt#*wmj#z@5}S+_ty`9y?(u)<m>yp$A_DrKjdTn=KbgYoZpo4r>lp5D?i-a{^jB3ZTX -_)9X^)F`|`ub$6xO6&gajmy1n`N;p*Wdv-alU`ntTofAjdays_VvkM|$StE;>6aQ*t`{T@Ci;;~%az5 -b{BhwT6M{`Jk9k9_sv?sYy6cl~(%@b>+uIsC(SKbCK=-{+l{KV08kKjhQ=@Zsm%n^)QS+nZO{cki#u) -%)^}@819N_nG>J8+mcwNcrYIhu7@>u3X>bzjN)sUO&9gZ;F3upRRU}cv*6-e{=Q7{pV`FqvPj!(;v%i -uExWso?rgz6#V^3UzeLZ4f{*Zeg2UH=7at%VO4&<E+5`szxi-`nIq(H%fCK*`7hu9__93t?$704pFDs -5<hz%D{$2hyXFC5i*Kdz>^Y&dr@O8<jdbqlK{FpbM1N`af^RNFUdp!B-*|*PL{+YY~=Gn{dp1ycdzWM -%nc~X9O^8DqquYdgZ$@B8VkI#Sj{>9TTOL=j9{b`Ds%wL=2|Cr)8Ipo{>oXOYMk5@Oh@AsqsIhXf+-r -())^2^m<uXCASUEd_4%2jTWcOU=1*6{ZJ?k{@Y?DF>s{av|vQ||5`FU#K^ZW23*zJFNV9Odupdzqkr_ -2p%0mOr|>`?uR%f*0BSo0~T|^f$Nn_YarltNZtl{Pa&xvhU$$#}^idmGa|@{N_LVuRQ(k_y3PZ<+F<% -_{9~Al~48N;r?y8`k96F<4=k2|Mghj0;JrV?-L`hZa<`bxXtHF3-BQ)Ik!hn;M;c}0NdmBt6%Q!Z}0! -|QFH#st9Ms-*DT4y^}m0(zI&B;zxw$$F?;oHV<YG2=lguv7hnAG*$a*J^vAEi_~Q@TTz!<uc%NH&<Ma -L@_uZG=ulX$Hi!c6LIldg@ST(=$)<1nU+pr_QYUZE5THd44@$mZTtC15)$D__qU#%LZTYvWY8e{Znf3 -WwSvuNeNej2R&Q~8a3aenwbzc>G~Va=ZBW8@_MW8b^{5x0~bef9R+?!TS!+u6U!FF)77w)WLueteha_ -Sdd|na}xO0PC~gKfk!hN&D&LpMQAv^^<RZ`u(#PFP}gA>c^MQzW?s0=TGu~Ib?i!FkN5&a`nJmCl>$x -`v(~>)}dVP5uSYY?bDxLJo}$dvqz0S>GJ07<3Hzh-sl&(W1s)@^825@dH(c&{Pg|v-#>kxzx>TbDfPH -a+iNuave@)&8qLgq@YOEeeB@uVU6z=38GKjcsF!i{d0G3>FT;AfjAq#bLvH;dKiFjs=9fOQXZ~tjnyt -8W_kP)qaq!*D%M82pwfd!b&CBFv`EK!(yr<dnA9}YvZuo_Hcm6GJu-nR?=DkI(I9K<)w>a{uYhBtnxc -$iAxz8MYRhr3zRGPe#qn_i|d66Id(vG}RHrXk^qggbSCZE1W(BwczPMWDZcV5OEJVQRAH_c7k<Mw*tc -4&_Bj(T3$dXAg7A2gMw(P%~n&AiOT(_bsQ<%G5)*C7^<x$;3Y?mRB?Yb{0R>3PU?<kaR&TV+B`W8_+T -%kDls{~?ZiX5-FB<n7daB=0LniE-ZV>KCSOJf9^WqtguTBcHS;DDtPd9$>_C=W(kO6fAznb4{LW@?4Y -WnqA|XIrpnO(yv(E#iQl5vSC3NJr_L}Jr^^w=&|UL3!30MXpF}9xIQoPL-0+dX*8W?&`cV7GL2^ROpH -{GYeqMto6*haW@C?AYmRGlH@Z9Bo$d+eZ0PCqbb113P?!xpoE|}sphwUH+%Rs>b+e#n&@<>6^bC3iJu -5vcJu5vc*Q)fW^r-Zx^Z-T%JQ;WN9JkT4(K8n+myGU>?v3t^?v3t^?v3t^3wFA7y0NjW)1%it?#gvzX -J<ptPR~xyPR~KlLC--?Fl}JkhESMm)YxyG9X)dna~?O&{FoOxMPM-R(q`U_fwLS|192^OgAJ~QEx;CK -!?hB7#@rZq%(cip#q~9=*NX&xV`mHMn1KXVPHzHs<qejVOXl@p3wO4wws1~CE(2RQxbww#x$wE<8xPq -b$L)-Zd8rAp{ME`mkXNWesDXR~`3Cay*EBpsB0k-k@w=6FGKb8E+4Gy<V|Nz&NLy%O#R7w;(fEDGxaJ -H7wkww{yE9r~i<;#o3NV^$*RVj_KKSs9{JjiFjy4#hV;@G|R({7_vhz&Sy);nG`NGVWgmW+%X$~Bdg9 -Y?$*L}{5z&@loOsl|#ETz$yEO+kqk~5e?U_0eBavk!=aw(1PDt}>58JGED-1H?ESmFFygPZ=s2q%6^E -R7o&ZEmK}1Q!IRoqH=zx7<JJA>_z5&ccritOP^yb<<zmQDHQBpWs%DT%d-`znbF*K?d8&FmDCy<rAIb -M%u}yTg_!J?D52V!x?4I2>h1j&3I;Y@0u#jr6z-G<%}3+zJzW3M)Qk;#mYZ5gWRe!hG~-d2knNXaSea -WZeUjPR_Mky!FHN#+=&P1Kz_)cjtzBesHY9hCTJ>6qhY2s$#Q{%adU&^E@4KvON><E3L1Cjx;buImZ- -3t`1ykAE2DFlRYNk<tYv4u@?Ua-7#wS!56GQsM&`y@Jy<uqTCl{J-n4Fvk#m{w(L&+L0UL%fu`Wl=jO -0wm0rtvZ(mEH6?dS6`;5)26O97L}_2&n4Z$ONVke#^c+!y&o`IpRqZ9Fm$nk8<!^^J#gz&Q`1OIV^XJ -(WPDr{_Cvzi6u1HMoi#m-%8};Gpt$^sm^ndd@@glDrak)C6#irl(If0EH@88^^+??doZt_HLM<Ha`ZN -{%BhGL9_8tlb7TNzQ!{;p3(6aj#K2evH=e!bD_WJjz@GnqT>-AkLY+r_wC;*yu|U0j%O6nb37vqEE{@ -)P{%Vu&9dQwctqARn~nw4N4mv%zsXDT1Kn|t80~E6j(hZUj}Bo;G#mE|Ysu#dc@s}~1XMErVsMPLh~{ -TZs$b;q2eeTHl3Pf}TES&y87os86AH&Bt)^Xr)rWReRx5|(#_+!0HqIKn#2Y`w0Xq&DV%PvhHar>**t -Ie^VAj5g**d1*J3Vl`j^p)y-Y>ia<C+aUalo!e!vQ-E*m1zvsch(p8+F{MV>rNQHuRYEn0wtCyaZa@A -duP66X)g7HLPxfUS>m2%_>d<O5F$s8Z@-A1kE+SYx9x@F9}ReU~+=VgM>DMhXzY-aLk79Zz7Pmz{cV= -X1_7#+0X+}gzf#-;3WZL3ve0WGQeekOI$!U^n|Gecnt6u;4#2sfX4uj0UqPD4;hc-xZpCtWq`{7mjP1 -?AQ>>V0Ez(=11JVi44@b=wScJwOf62F_2eb_fu5C~U?pH`0Y(Ch1Q-c05@002NPv+5BN(-8=mAEe?{( -|ROByCJ8+wA3fTRT&2{001B)~|3kpLqBM&SGnHs5ge+0bL`b?c3F11rRPMVISUkzDSwnLo|H)FcOD9f -Hm5EJhF>rGvqg<vpc2g+#=*XB}R$*lH{EH8(RwR=L$gW9?c&pcp_gfMNi}0Ez(=F>2ZHNNfAej6(8$f -n)&50FtnVZ0HFjgH2k2Vg-s7C{~~d7tE&7beci4?aoMEk{{>^BrA}Fv1UV0AX%{)xW{bh2^1?&Q+bdI -6f01yK(YGfJ0p2XexN6itU$5?$qFPZkR+mQ1a?hCk6F!z9zd}I#R?QFP^_oF7|BcW13iIc1(Fp=66$3 -`PlAUE6f01yK(PWv*mO4Z0E!hT*0%lpNM4d3=m{h%kgPzm0?7&_D`u+##R?QFP^>_)0>ugxD^MgjZS~ -~q171>rWCfB?sBGv7BrA}tn5_yFD`u-=wklk^f{_YFDj2C?q|S5QChG=PDp-NgXG2dgQo%?CBNdEPFj -Bz?l)g1E(!fXqBMpqSldsR@CHbN8O{W<&lZKvP1l6OVL^OzelP{BBX<(#*kp@N@7-=W3p2<t{13ke?1 -1k-))xZdJG#h$?kp@N@7-?Xnff1-nHuL}^E%v(2<R$rmo?xYcm4?}BV5EVO21XhfX<(#*5eQZ`^Z+9b -j5ILP+FrMryd*!+6Rb3_(lA>Mj5ILPz(@llL@U{FEilr+2*fEHdVrDE_qt7ZNdqeltTeFFFk20bG%(V -@NCP7cj5ILPzz8x&HuL}^4UDuizL@Zm238taA&AO`o?xVb5!ie-^aLXfj5ILPz(@llq7HKQ{W#YRUed -uz2P++{bnHn7Bj{ocI^58?8WK>Gpo5yy6rU5GHN|6MSx^_oUFaq7k_P=~vW_y09gK7^(!odvBSe1La4 -j&>!AJ)q9gK7^(qpgNf|qo#(!ojxD;;~%!AJ)q9gK7^(!mH;KO1_0kq$;W80laHElcCVOFCHTV5NhVj -y>sMq=OM?ZZ`A;BOQ!%Fw(&Y0$(=t03-d>9~Qi%gOv_eI#}u0lMY5Y80lc7gOLtKIvD9-q=S(TMmiYj -V5Fb%#e$b~u+qT_K}kcL%Z8p{L>e6GRwFcTM9+=Lw~17CFw((D2P6HAhZek~gOv_eI#@x5%*JS(CTJ> -6qv<q*X423Dj0`X`c3hYdL#`WoTQ>9rD+7Bnz{mh21B?tXGQh|HBLj>KFfzc%03!p8jIAT0qvyC_Wq_ -3dRtENDfRO=41{fJ&WPp(YMo<rPGtvW$3@|dl$f$LX3ojX9Wq_3dRtEM2y(D)qJ;BHTBLj>KFfzc%03 -!p83@|dl$mqu&7hW>J$^a_^tPJc4p=Lwo$cCO^WPp(YMg|xeU}S)i0Y(NG8KduUlb7TNdV-Y!RtENDf -RO=41{fJ&1U0)Mq%_!2g9tT<P+B2+fRVAzb%U26KxIQuurjbG1B?tXGQh|LBNL2FFfzdi8c{Zlrqc|X -y>13CnP6ptl?hfR_GE&Q2}ULunP6mskqJg77(s~3h8|#Kf|0p-Ne1}2Zb-%1&=ago><MZ{T2y+1kqJg -77@1&Xf{_VECK#DuWP*{od5IakWP+6mRwh`P*pmrHh_SPwCm5MvWP*_iMkW}UU}S=k2}b7TC1&uF309 -C0v!N&UWP*_iMkW}UU<Cax8?FULCK#DuWP*_iM&{-vX7G{;R!}J#iefhO1S9a@Z0HF_CK#DuWP*_iMk -W}UU}S=kInQ;2mrSrS!O8?H6MHhj$OI!3j7%^x!N>$7q%+b<9W+McG(of1&EX{rtSqpyz{<j&EHJXb$ -O0n^j4Uv+z{mn43ydr<vcL$sXS%_?ZVoS5U}b@o1y&aJ1Qj(KdV&%15)GxW!SovpzrpaE82$nyD64I4 -USbX}Szu*>l?7H7_GEz(LWXSU2}TweSzu&=kp)H;7+GLsfswU&i8;Jvft3YT7Fb!>lLbZ=7+GKh!8aR -vf{_JA78qGzWPy<dM%Lyf=J1jQRu))UU}a%Xkd(8bCm2~^WPy<dMiv-ZU}S-j1x6MaS@T>sc*z1Q3#= -@#valx$j4Uv+z{mn43ydr<vcL#=r$)-Dq53uiu%spDx+O2k55_l66Eu~k(R7+YGim6V80kc9+0eu2Ve -~M1Y+hm+j_0^WPot;N)9LB-bb2~Hot{ol=UPq=r-#!c=n?eTyu>mb&vApELC>IP&@<>6^bC4ddRBT?u -2tz#=~3xX=~3yid5L8>p5s<}HhMOCHhMOCHhMOCHhMOCHm=p^(dp6Y(dp6Yv3W_Fvm?jt^z8KP^z8KP -^c?gY^c?gY^c-Ak&|}bJ&|}bJ&|~uw%Wyo$o%Edaob;UZob;UZob;UZob+5=YtduTW6@*LW6@)s>$X_ -8MbAY~u!0QP(YZRBR!7e2$XT5%T1VsTWYIcVw2mg-5h*)av~DLa$vF9<lSu0%(wwDm=B>h0%g%=)(Gu -dBDffW-jd=+KhfeCPlX@#i4`!!-%Q*R>BKtUG(cvJ073pM80>@XNt$})2hz$&!1*|LxlASFX2v3e4Rc -+^;EaT*hf*Wy+j}x;NWCJH|a02*3j6}S9$>z*UCvKeZvnX$>42hy`=$a9#Xx!u_1)k~zlLqNAv@#=-3 -++l$YDR!i@N_1{iO9^Dr9uc>h$M|?a8v}1o4mv@IgW~2a6E?eS`gTbeN?bY1+MKdDwL+Y%N#dQ+*}#* -LTVoE&DkazH+hM{qYRfB<Tnk=9Z=dJQZ4XsgG?11aKXg~T(_V+7XHEE2#yqHXTIASc^sUVk&G;mFC(V -uB(MrGvo+lZ2|^5w69yN!m=g;-R@4#J9LG=*{WNa!lE8pCd%#eb4F};Um7V-ou+=L1pd%3*TBu=9Ln% -Gt(n4CY5XluxuEq`3DFB5W!->EREhn&3g@CbeABICSET&;S4A*9a3f(r6$=yjR-#U0+&T}4c&P_Q##z -j$dWPb-@M()*!o*g3?@VG+E;g~^}W0zO!%B61oH}N(v0s*Kqq@#lyd)%O-4la#&-tf@{$72veM}03)S -tocgs7oOPuyx`rITv|7Jpnge`M0Kh+{jh}wn>h*ksG9n0G+~c&xHjoOKA`CtEe6hab(<19*2<Im0d-% -Gn|p(D2>pxlTmkcBRiBm;?mIaN<`~Q!iAougPYUtB&IH$46$QP4Y{xog*XXgL)|j6(WY5-CEO0>V6=O -cr(>_OlL$J!?mSuE5qTVPpXAA`s@4G&^H8=a@57sNM*A|Ing}Kt`#>;TVE?5_(R8Jgw|&T`LiYsz27X -C>A)2^S!UT+l8#UxjYf8Yfcmz2{5NFa|$)6PDN4IldWSpG#0W*gZ8cn-Q+e${oF)ywiWuOq$HnPh?%Q -jb74}OdeUf4AnH+f0n7Mz-Z0>?s20z{Y`mXW!PLm71jA{7zZ%*5x8-E&N|xhz}k{nn{3L18VrRbux7H -FM+uXI6_+9S9^&1~bGJD7Yx(Wn75`sF@Krd7N=T#>v=qmW*@_>ZrljjeLvMT>t~HU@c@zI{+}^P3Dk- -0BvT$ZlZASb<0h1;mYJH+fOAz=^LEb2kx9Cg1fw5y5d5fA;@QuW6Mc1X6cYKL?EvlzZoZAIC>^bnC(p -tm~BN;tDv14B*IO?I~!&Q?2Cj{$Snb}+&_*WP)K%Y+~g$=5DhkKgu#W&I7JACyK~mr37G;B%V7-x7jv -ZQ+P934p~ZI3dd@@g5=Z{3h({)0LQ>0EY(v~|MDE~moj4?9)L1u%l~w435w05^rlLM++~g(JW$Q3oNE -L?qT!=>s5t@^SG}69KfKX5%jf}4mGn*>A2w@GbU*hDclll@!m8&8x<mnDvRz7`&);O|LklipcHHJKIR -OZypcQ9axq((Z<wDTC3`VuN{yy<3C6NY^t7Iw@)RQZd&IRF;9U&8Q!ag?EQ3{`~eEbv~pNqtFE0l~uD -=YDe}XxnTH^Nph}ByNn<s+0J1bnr^jrH~RaJV%fZh-23&q<3fCm{nX$A(vQG4}+`lrp<&EL+~g_4+Tl -POc^9HKM2lF9g30lD~M7W7hXarZ3s(7U66ILqFt{snO|&u)5e9~Rk?E&T*%rb&yc^`C>+~gWSpFKoyk -Uos3Cizl06c^xM!}N2xaZ5p>VAmN~IyWnj8rltHE}??fSl4k4oJj_JIf#P07i}8d8aGu5xJOvY-c4Ae -TKt9-LwuIc0(;N4_p7X&N_qi4kBr*}v$UYid>(yFptb{{e1eeKR%o&k)(jYfWuV6-kBm)HyEoC8}XSk -1~){kmL+wS;#4vwl$Wbh(xGX6M->ASdgBLK+RZ;ZYO?|QCt{yJv5hVvvlr=q8K#qLRQE~of!JFnIOY1 -CsRe>gDu2%!W5CdHE!|}!ygAaxKS8ZNyR$((1IH+WV-^OR8;4%JtY4sp4!!oQbY<`&N`-?n94pT+s-~ -FD-_s*Lb|9^WM?QG1&!WOrfkZ9@*ogtJ5;};^3OvR6Pn*#$@Fi`krRLvG*L&rvmL1DyQ+1Af#Deu;*3 -;FCA;jzyCr0&S&_Nx6q2712T<jyc!(;sif#5ozDeXu&4Fd(aRtCCK06?viVcRa2kltL9+$dTk~#sS2t -^g4A~Z+@g*}ucaYr~skyVgP`ooED3X)O5`*~N`xAWZ;O<%b7tbBv2om4a@2Q1c!)@-Ea1HWmi>;mjY3 -N(Ck8g9DEsKy?bx>sV+z-T+dfN@PDXXHelj?!aQwYwFkK|vqsdMB^fRZ#_jEl6@6{hZ(AC4T-MLnDas -%!H6e%v{j<4cRHUf<wpxEwqTrQcmee6a|0few_20yd<Uq6(UN+a8s}Y!Eov|OmtK+6;h*<Fflluu|tc -DJMy0+z&Y4sT<Tr}3C0kkP35rUpba&_#1$xgaP;D8;tE*8x-AL-kab4Vz&BajIxS&D@*QwStRE!KjV< -AdGLbI|5wMZJa4OfFauY)vDH@kp)i9-n8iO*ozi{eagWX#c(aA@0O{dP#LZz14y<oM;d{;~vi${X8EH -(J;q3Wr5j@z-5L#3YV<0(&bFpX?YgRk!(0}Bhf`i_jCQ0&=4$pIB9Mql&oFPys9g4Syalh8|S?C7RKk -}xkclmVD9Mb^!!@F+;G6ePgG@QrvARfREb@)8e~SMj)tFR1=-SHz=fBshz$1T0XC_W@3LccZG%Nd*@X -g|T&ISKTWqC&w8%RXg4!n!pRDLbpTAu44oV1_)26!l_-?hZIn@U@BG<m1f-JB^28LCni*rCvr_WIfWF -(_S3+L4+R61jU`&bw85~L6n~L=WX?B!se6shKNUw}MY=*3>Yn(k$iLNXb@3rGKALz?fD&!clp<eB<&n -lsUQ!W}3{PrQN;ya_s0ohScZ|FDEyiGDuuqCN$s?7fGXpSu(zuRu(YVP=To#Mefl;F1@>}p2R4~k}%$ -CkGFgMbYrWTn>KLj&Ow3A+Q-+Yn<fS<8sRsMoI$Ka_laBb=!5F>>lILytm3?`0f(!@Xs#jyJ0v^&(jI -!@G7Zj2yEu?2gU9mSR)C2d4k4#BEy7^l9wvzDPUw<+BU(?B*+<HAcs0-<d|^2eA)?+Sxeth+GjOa{a$ -ngV?l(y8E0a>ya>Dh{-9M%`-xPQE06Ns<exW;)rR^A`$(Ww9V4gb`FM6lD2|g)a(51kZN*&0Y7()02! -06dad9aFGry+o33zO^Uu=hC&ud1g75)1z^a#)Tf&7^CI{S>U6P0L|1TVCzlyi#uO?RN*6(gMM4(4R6e -;Bs@{wVb*N66o9pj=Ox>%qFI<K+b|o$n6WbM&YD4>;n~@4O6y8(Y3EzpW+z?&KhX7~BrS8?`6cGW8Y* -WZHqQRL$2I_*0jE+&6Qo6*7B_G0aBacxqWQXv$c@*Wl7fuDA;ol6pRFQ2f8_cVUY8evW8@Sev@Z#Fm( -qu_QR{-c#krk-F#!X%l3jYYD!{x-;pQHti#0?TLPb2k5Kanh>0%_vBrRsfoaEVvv{U$FlYLN=8EDk;C -5~-{-4Yo%`KLztTSwPk=$ZBF-n0;u9V!tYRZ0|SfUY#<e!cPtA>!i?qXx}T&8k&7X09g+_9lYAnft-n -V#9AZcTXc(zE4@Tf#ga3U%YsVck13Ke9aB<aFoAYa(2KljhxQMn3CYwk6;kaQcj4cl8shh+x?&kYG9= -JTcg40eA*n`kiwKUyAc=mI|Ie+0?fY$8FM%Q+qH>in2&c3)5wQ^7ZHuK+J)omo;}mpV@PJI=nU5U@IC -Zb)s$XY9sk3ntOV$Y`0x)!1S1CBghtd(23@yJ(FIkMH%ZL(fzC+!sQ>$L6(>0YDkd>#BgXd$)rc^W0F -a^Yt`j{X?opr_dnlyIpI>+tA0ooE3a*M&MIv8e>ipAV<8c;rp)=bsfb)P%axFWD{FnP02_nW-LU=+dh -RH{u4#mh*)lqs8`AQh_*NwTKyTQ_1$@`MNtg^Gnzciz;gd$lS5Cex=nZyh*utR98%nEBAjE{<8)(qXm -WB#2BN>{!9{lG3yDyiVO~2?gu$J}MDNuH!uUDQ<zV$EK=5m*V3FaRVqa+dxe2nQ~dT6A#qA8r6b^`fO -G4sqPXoqlkdSW5My1B{9YoxXL<9zQ%d$oSF>i))8@q7Zk;yh``9XEy=4@M`3ozO&kk#!0x#60aztx=U -Hgei=-XeD|>#ado?Di#t!<>e~I-a08t_q=q09&tNVp?nRY0<tPlkmHml&JLSZ%ICNC)zs`%VV7oCI<a -Uoja(ds^Mfh|~q80zpLaSpIAS#xa(fq3JLx>sL<SV*PNfj&6&RF(yL$!$?l>NGZ#N0OahTCxEf(OF7J -+R3Y_do3<GcF!u$BD!Q^jNB3SVd`iLk#&<!i^10c3KAhsIeQ`QHb3nob+3*H5QyhND!(Wy)~Tqam^Cz -^L=a8qvnb{d@lO2w(&;U&D!caN)zrO)PMygrG#$!e6<l(QPDW}$$#L1%*P$diwZX2jA&yHdgS9g%LNs -pj5^oBa6bNFpr($f0n#g)40KllK5-}ZlQ*c&LbV%U<EnMN$`+SI(pu<RnkfS6>E>wyZT&!W?3!<jiy| -e_URcr)zfFF_!JN5~?bKR1cbdCoWsAt*v0|+O&LQskrlp>naOBCmXyidVtEG6;?6_`~c`tiE+g-+e8N -nyYu$50wmx}41SfgB;xM3D&wR4I-s-pA25l3zAukQyS-scTU8>XJLCh^q=P5eZFY=hR^sbt{gBVuyC4 -WL`;Z+W`X<(OX2RIPoxbPFVh;DOJa#q3D@5*ajO<BNd99A<jZ~!%@PXw)X+z0_8r};ncmBs*}siOlYT -aN>3@LDFvr%`{86*0=AARGIE(-dgx%ZHWrynjoUf@wqsFv3G83$;h}|6wB2PQC7WX7@Yd&+khhd#Acd -Rg`HbJFdyTFTXOk~N0JM~;!`P~~uM&J=N*JWQP>M3ewYgP_>kRG9j#D?H?ln~Rk0CWzl({6ghy!7Fbc -T*OCq-7}7EnM<yJ4#203m&AK4%<D-7CpR?37l9pKjTS<60n2lusBr6m#g17?I9UN>R=mIt~#lzR#mOb -+4u@l5&}x-!Y7<D`bHxqgmm2kYgEA7M5&unF_@S;*`DFWTS2SOWmu9Wk4&;m6JMj3or?$R=N>h)i^HY -L<Br0QWVcc+`^?@rOIcWqf_^4L#mZ25lpH>R8D~)1X8I@N}vr{#Hrh^D#vx*j`EdFQKPu?UN`Dqi?T8 -@QCfR^lqui6w~3Y=Cr2r7Q3Q+$u`|&RPe#2&!76R%hn%|CLS323AM=+}Vb&!k?tGTaJfakb2Ms3dT>< -gVUt@pqNIDN$cN`nky?WPic2g)M9>Wiif~FE7lpmqsJJoEQm}4U-z$A<zlOpwJ>|=??9v8iYys7Dca_ -B57_@O$?iB_!daUqZcg0-V<yfqNx^lT_)K(fJQl^7SjgqYE^#QP|(=Ao$^0aLAPh?0S91c-k?!vd0KQ -*wxAx+#`A@0UCdg?gp!9E2W-sZ|-vp@fu_2)qR9Pgg>IDxU`VRGh^F>sg1L<HAcwp#-`OvMr91l~H=1 -(>-0)HJWZ6V+>WWD60vkCA>p6babfAb6oV2r7SFS>AS=RI71An<1gBS=wj7&x{;a)CFHTJOUW<oXiSr -0+s_E-6bInnl!1pDDWfiZ5)M+RYH`(5QP4u=9$KB=-Jm)UwlF(SnR*IDG%n|aT?~_e4YOtY&?%-Nlqk -S<g`P%^TBej+MK38jMy|XQjx2NtnQ_VEV6=^LSi_+aBjLBu8k$^12T5$<F7rl;L(EHMN~|h{Q-=OfwI -vxBy=3e+QsCm7vi-;{S{@9!Y`sj59MsOJo5VqyE_MNbk%qnN5y{G2R0*AOipsw!gDOW=l{H2mbSW|+i -b_UDV%wog7oK4#LrwU(&ih3#Az@oc3p&Ryt7?|u@FDX?F@|AJLa)2P;|E;9G<Zl9Q}jGlwy@`yx>pm2 -=FJA3#?cVmq=<u>Gb=>8(-l~06KPzGAAXR!+i+!G>N&3RI9*yG+JqFykkYNH9dyqrx{tf#8OWBpayHV -JrbP2S5BQoL7jjB2@gO^?IDPYQ8C)@8<*FsOD4C;!;y6CN#-nS8;QO_LQ<~nMU+P}HYg-{bNR(I2=Fr -Lzi>s4_Ko=gRE2CT=avzY5x(mo05^>%yyo57?MO=u|J}0MZJhO4oz)W00N2;rsJ`8*4y$f1FC~8-Mid -H)IxXDYp^0#=wpq8$%GA=mFXrs0UXVM%u>e|+DF>^^URdbG$Wu|@eYTkxI+%0WFn$n_^R$R7LOcW!$l -}#15QBb&RWaPY=`28J$&yE8K?lbP5%JGX-YWDzjmpkVGu@onX_f3gM6`{eN<buE%lVJ+QRB^+&)R%B_ -!$ax)Ms%f2E<BZYbU4Jn%J)*&Q9~jyrU9kjmjI}GC++uLPaD*|2H8rN?kJu}NEVpm&bT2YH8BKYOXV- -n5ltaK$%e92UxEp-9R~z;uLZ~M>e+M@U5RLbDAT|dysH4RYBC53vGAm;O5HgiQb@eLrtSBl@KPD>S4y -*dpEMdVHB2@0fX-iS%R{KRUDaOl!t{{4RXtggH8|%1y@Z5#QTmMVuT*t1rC&tB)sqB(i>%5SvcB*>*} -}DRR(gra<|Wj<7WSJ_FKpBdRh*X}TZ&gkg^jBW5J5&L=v6LCw2J7J)TW_Vhi@Jg)V&%#4F(p9cvQuzm -l~)Jj(OmmXFe(0iukce4})As+s22Kza+sn_qf!(Dos2@f~y1|{=z;e@@q<Pqick8do0D&aeBRgiAY%z -fkeM?@)GJ^V{S$Pz!iBe3Dl4t)`-x_n!+iUaEN??e?7Fm$_HQ?DDC!f?qlj+i}G)ryR{|Kqlg`>g7?r -Xh$v+!RGnGXk$mN4@K?GMP9>Nr?Qq(4>Rw&RLkbgI#j?uMar&;PN?7y8yAVvJg`5-!<)RKnuUG{M4a) -P@9cP8=Ubl)mFcPY&?%Je!yNC2X5j_<tv8`#eXZ0$Or9!Wee69Q4^FZBe4JnpGWz-AkVs)i^l0Qb7cL -ZlA3(--jD-Tzp`5p1qvFjm^IQRRQfXRiM-bOXF;t&_c?IKCS)W$F1#H5p2jir(=ge|@M39Zic7OH;wH -|kz(JN7|riGqV15!CG4*yIZ)tT$cYFI1?F%+Xauq^z4X2})Dr*l}S{_iE${ib|EKn=UFT?jju%?LdjS -DyJbYp_&L~d~=qj<f*Q`N`P|mRO((0t*i{$bqttF6xgIOv>ULnRpmcZASNKE@?JG*QgK}+x`N$_2i3h -w_!hO73@P1)YPQfTJEZz@^2wWC%+obrJkl<IQt&Tjm89&s->7>vj)nMCfT`?_vV>g*7hAsz>{WRQhgW -%l-jmam+*8RF8^DzkKgT7Hv$WBN<_PFW0174lSvR1AcobNLP;iQ-6-zQV$1(IGH%<gvJNGelueMadC- -Wl0tH4I?4ugxguE=Qty)0<5h9C634pM()yH)*tob#K!B<7~RS}pdhT$}vM<lRIr(E>|2R8fzb4A_U>I -8|k*^-3yf!W(C*dv!^8;&{AK1-!e;hbf(@s)<m!pHvT>&LFI<A&E^}T{?jZ1W$iV-D_#u#}FqGbczMM -?TTnQb_pIbP3)D>Xy|<|2@}(=+^DASj4xF8x+LRZwongUK@`PAWD9_T^6nC-DaqszhA>SIx`K04*{%} -0Yv<oWb+1+L0Bo`aAVY%sR8+xkfCH(R({>792NDR9m9SR1fG(r-<=p;_x>rMqjiq`Nfk>5IKpkEkNST -#eEkm_0t{Qw|pDwTwAV|Yu$hPZ^g1Xl-Ra{0%gWl&wknCvmj=tmQFl8w+QW>ncV3Qf*qa<x9Q=FTzT@ -Mq~y&CE2*oH{~JaVN9RUqh9bs$xyR5K`%XQvAFh97McIZyJSJFgeiy_Tspm6S>4hTd34E;Y7d3b3c>h -iI<K_&7R*glXV0n)V8Xwz2DtLUpgwMpQu}7N;{ZdI=6C^hK{bQXI)CvN%+rr}^5u0Y}m_`|?-&ey8e7 -6kZ=v3MD=001Tdk8Nq|OqHXb6LN})hC+05VVf)D(!|2X)YB6;lM^+3!F!p<vbo=lfRfKdIOR@!o=DeT -A&mt|9F&B|n=>=#x_ZxMuMP=V-Nf5H>=Ih$H;+Q%bfRHiuRwc9~ZR^lYW3DI*Ii&B@a~_83C#AjsfGP -i?+lM-6rg<9VO;eftv2g<xm`XG$j8WNw)?x4CDZON>lvYHKTU|<P3v9$**asM^OSL0__gy=%WEHd}3D -m^IcU?tL_v(kLX!$qgopvfzIo+v(Sd358qR2<<jDeUi08qYVDQ?jlAoo6A;w7T?s$o+Nyx#Ug>_af%h -t{o&Z7Q^pdI@pEeIRaxDsc6_tG4q_9FahWAre>UPvWntWKiWau3R5cn+`!Jj~;qeoYEwSG1MaHMNKNq -kl4n!;w9TXA<6M8mCcSV0;{+T^+)ErYsnxM0JbST!S1D!$A;8~)1FcHN;J!(seVT!SY;L}%vH3lBNEa -*RfUK_+A=6XGF7H*zvxN@uk(K4CFp&IG9U6oiXNryDP+-6M6rO7A2R88s%RAhB@sgf7Q3rUQ2LD0L(W -lQ1XXXO8qBVsUMVV6Nu}?oEGURl201aEbrV@$O2oKwsZuIqj|(qh3|GcewGj}3*eWV>(^Vy>%m<D~<q -%kkAVRHOa}JXr-YjjM<0db09U>1|b5(lCr>oRnK2InR(?>bsfRnq#Wx-Ard5X*!;H<N$s(S^ip?3>z) -%TF+;1ywnWaMLQml}!9D<P$AQk6!~aV^!O1CPyjDs``>xu=9QsQs%t@}<HH68EknZOWjkyw;VO)wqbH -rerViG1W*BTPLX0y&5GsMoiUJ9j5FxqH)pL8<+MaE&mYmVJ%bCS2Blcu>>*E?6t>T=*m(PTv-{_r>cr -pM;67Su=Pt-XL=CbAgd~1D{fM?IQ!?!lTq52_E&`olFoEML?Z02YQ{Y(ktZLbBYj<IRDAl72&`HFs0% -7`+ja5GCFfgoQVORmo{H~9HFL?`s!d*-nu)pVRfEEr^5|?L)I&stIM0(+Qyyn0f3N^9$FA2`3Y>_9RT -so9sP-H+yGpkwdD~PKpm7Z@xa01+>t0!BZMC`gEQY@;J&KW#2bJcoBVURQx~iv$FS@Ec0jgd+y5E0RP -4y)zo06X=8jNlKbUFcB!09Q~rI)4El2L<yE6P<V12<+;D(iW_=p}l??=CnPa;%a_VW+AM>7tF&W)K2Z -J&HOD4Yj61nXMS0y6pOgO5JNHZN>X~OkP-NNu8WS3#|%8(4k$oDm<u0TgNNJ>$S^7k-eYeCNFV`7Ov_ -g#lq67A?;+Nqsf#F*)A!(ghHk&IgI<#K~%kQnl<0~w@TfsD_AE1T2<dCzC*=fD8$nF2UR*BTkF-iI=% -5)^hayXe2HbPb6j`{=X{({)AzxMp^^px0Q|5<L$Vj%Z>LUhlq4g=bk0c0NS&kFb@5g2d&SZh0{E)(e$ -~!W(PW(IalDTYg`_IWL%b)^AF99=``1pgE$3~!qxZd1G7>r(B}IBFjFA+-<8%^_O3%u6byYO+YH%r73 -W}sTh4$(mm%3L|?V)m%m>k=5f~ObdQmwk)>Z#IHn4PJD5h2bcH4?2DfQs{dHk>)hxCIBObhYpJNwrXt -17LP4@N_LB2^M8}T$4udzw75E{A=Mi&h)-lYO)Nm)KvjX;2L5BqNqyGa(>8QvE3vWc3lv%v2&9O;uMg -d^FVzGJ~hyCc)cTTLGDJ;4V6don>x_Vr70jYaVw6bhRS}r%IBn}$2o4FrF?dK_5M+>xcvM-UIl-5@qY -kNO9KQH00008031s8R!US6?w>IL00O1}03ZMW0B~t=FJE?LZe(wAFJow7a%5$6FKTaSVPa--WpOTWd6 -k_}kL1RcrQh`{67Y)+XtWuTWRM|aA9#aITQjmGv?L7tWVE_VR;^pz+Ul0Q+Qt6&jX0;Y{DAQQyMiBF( -Us&$#*O&0@*W=k<~RTRze^l{`0R_z=byFXi?5GMeEwzox66O>yTAG9H<xdIc({D|^!V4uw=dsZ+Pl{e -m&f;)KfU{(k8j?*>_7kb<Iis&U%mYB?&<RC&Evz{50_W{cRu;(*Oz|w_VL4Gf93x0_lGy{etLMiy!-z -0;h!9{|Na*bAKt%u`O^aq`}pqd`~Kt8Pw$@eLqG84t9MTxfA#e6^25XH%Xh!%i2w0aFQ3M-e)^@K>W2 -@P-?rafQmt!0#6SJ@PcGY=H<uUVci&%LJiLE+`uoFczmxXv?T4qw?|$xY^SAGR_h}!wT>kX(>2H^>9^ -d@+>G8+Qzg)V)50?+`E?@of;fHr`pWlDKRBs-?dwTiw%eZRaKRrBL-oN|)!#}#P-(P-t_w(h|%eR-Oh -u4qqefWMMK3rbDef?kFJ@wcB`0n-N_rHvxpWnXjZ)d3f@bL8G`(Ll&AHMkZ^7+I2uJrPUhqn(;{oQ=^ -^LK9^U-cJ%{`l(Q?fZwz%lDU`#@PEG&MS2vLcV?$a=E|jhu78p{pI1Y|NA)i-yfdd_mNBfB>j4}=Occ -6>2v+tmmh}yKAS&{7yhn`{^jzf&&JcQul(enUV`(TzP>!Z)nR|=*S`Ose!%`l|Iy3p^4-Jb=l2ia|NQ -3TeuVzJmw*54n?HW}?KhY0i$7ofeS7g@`{J8F|Gxijzta6*`~3Mxk3as@OYrrjzpJO0Z$JFfh4%ye>3 -Grp*k7^5XP<xe&7X(*`)A*LaeV#t<^JW1%Xax{d-2U@?c2|{7niTTeeu<oUmu@bE?+-9{CbJU#r$U%` -Tt(x@B1NteAln!>xU07AK$$9TmN&P-uGSLo7a~gUjF@|PxGsX$6isFmwk!+^vnO(9KLz?_OE)s{UzrG -{r%<f`^(#RA3nbP<LR;2POrZIFuVOI=lp)$i~iLoA7AFwf9d7hzrE>G@O6Lr{qg&L==+;@@18!s#Jl$ -&#;^Wq>#x1$l&=4hZr60VeEW4D`Op5l9AE7JkDJPGK6>68`g-{9KR>*E^~<Hpd)cS|{llB@N0p3s@&4 -tHD&B{mU;WG9o<8}tmiqtx+t2U&BDwtd@~593`(^p?^1C;B@4x=$NB{ceAGi3+H(&nc__qDqi@$vNVn -1H|rO*H8$K}6X{?|u+?Ov|`V_i%7^m6_9{4sxeN%(R8^pf%8`sw9{AM2-=2|sS1US|9lpI*xO<I+#G; -K$pimlZ!wpI$0{?B`98wUqudbS+E&8N!w>EJ4}Ql_f}9x|RfOOY1*V+}?kNy0wc<khhM@0)6YaF3`93 -^JVC({q-68YJayG`s#Q+^ws|UGW6B{{xbA!<9N`wbv+sSwsAb@+q#|`^hN*o8}vm#{tfzCKmHB++W39 -wYvXv(cZ}bMzN728LEkZ64}Hfd9Oyen<v`!j=VyYxdq4gJefNI-Cg{8O<4@3c@7HgFzI%Uv6ZGBt`6u -YRkMlv_z1PD8efM4u^Qo^+UC*5Gb3gx_@pFGa^Qo`S<M${0-1W~hejcwc__^z!7yR7y&!@gRR_R>vbH -CmN`bs~3fxfYB3-pbJTcB^O+yZ@LaTe$stFu7gSdRtz#(FH!H`Zf;zOmjG=o{;4fxfYR7U&!6XMw)4U -KZ#Z>t%tyu^txa8|z_#zOfz_=-c}HU!ZTSj}`j1u6KpLt<V1oeR1tSLtpgsuh17`H-o;h-d5-v>urU; -=z3P@8|!a{zSiGQg}$*KEA)-^SfQ_V{T2H5e!L2Od)HT?Zy(2lzP;<K&^Ok1g}$+#EA)-^o30Qz7HGO -c;aHLB3W;M$rt7J38*3_ECk%{D_Bvxg6et+bX-}QotYfSgkdBIhaSWhj8%ryJCEHkA2{74;UIL|KwIt -wV8_OesC!2T$plkvNh_Z<wK+3l2B~ZE!h5;(uSQH6V+170gK<PTL2Ci)NItHM0fGB}1+gMo%XxYZnN? -^-Y#a1Y-5(cGX^(EkC8_O?&FWXpu34qzgf=eLG7Nb6Zm~AYP1jcMlXMxgP2Zho@zX7F(bU^8-+XT>TD -qN6e8>C4<&8A8QYqq<NaViZJE@%^~Q{X04r{GPf#sHkq=PVE>RCGX2j4eBXIiV^9bYgtoN}x`RT|5Ch -p*jV3LUju8gg!`tJfXq`dP0*8_Jk%I@Ci*e=o4eNO~6lR_Q9VR`)vY%Vr-}h1d6evCLkz6XMs``3?LM -t(?V&CPkF#l(=>oXP167nwE@xu5;e^WP}DRHU{M>Na}!|HG!39p(=-4_P167#HGRGXkecQNL~8m33nV -pvM1@lAFo06i4g)GRZ79G})9wH+HSG=nQ`7DMGPUtZH33ac+XdLvR4{;3Q^9~vP2~VQH7#WDsc9htQ0 -*APK&Ymb4Ma7qY%r>gm7T$;Hdb~9quO1c;-PdvD}zyOKr4e$`=o=;7#N?#!Ki)GK~JUote319&~H=>j -I)4I`>4|lM(z4L42;@~{@^&3?u&i{N=Hd$Flrwal)<Qd)mflae`SDCyZ+1oqjvqB0Y>fHkPb%eV{S7T -wTJ!`g3__FGZ?jp4hp5AgF@+8*%^%5LuY}~rn5ll_ym=~sC|57%3##Kj|&7w?c+mG2BY>-mKluN4;>U -rRUcr~q51%$4wVBKbxhK6Dm_#mVAL@_!(=e(P<?<=hw1~2Iy9AF)G;=L3`QOLixrGI^d~DAb&Ssr8H_ -sgM=Th1=&x8X>d>FDVAP?%TfwMfe0IoS)S(&!qYf1e7<GjH7KT!l0~mE^vcafBlMO~4<MVO`qYlkJ7< -G(K$Qg_}#z*7~MjfgTFzQe_fKkVxvq0&gvp}i#ATa9C9t1|+RWM-GU2_XY-3OyG7<JcX07l)*xIkdkU -AqGqbsvn%VAOpXlMP1Q7oB#+z)%WC-L=DjQTM^93`X6x!+=qDO*R;H_xBc1stpB<x~m+(sJr$LFzT-T -1B|+B{{W-zDwvZ|^{Q)nGO7;@9Vesuz&Pm1s6L=?R3;3JN<JCY2Zqv<QGH+=0}BSm^*9+-ue!)5qx!& -Yd`|<V<09X#P&&5p+Z9U3Rli-KbbR-9yF%%rFMptP%**WxrQ_?a+Z9U3{&BlP>DWJRS14We4HA@&{o| -IPbZi&51f^rUxFsm9ItG-E4->ZprDOlNB`Do=P$(T0bW2dW>7Y=m@4hmWjtaVEDD}5rP^z!9GL-83tP -G{cGzOql-*9CpJ#<<q9p7o)GL#-|3_$5!-?~BR*d1;+C>@_rZZ{|$pHOZ$C>;d4-Jo=Qb#*%#Rnw%i6 -by_vcQUFE=qxJ+#(Oy#RnuV9?POFR7)nn@^#Ofjm@zPvo{Z`PL+Qz=nu-nzrDIjzCMYdBD3p#hcblMe -(J`P@D{6*PEua}nwSZ<QUA8d*rCJR$l&bh=C{<a`P^z+=p;To#L#fJghSKpj(5*nJ>a;-V*y(NsO7%5 -vfl^g+fzt6O&#gddjB+SYs;_zrl<K?Q0;T%0w?OG2;q7Ep%_^yrQGH+><78AH7{@pnRkJGSWK<s*Z|- -DNAJ8#QrCIfHGO7>gTjmu5dP&8=IPD6hDu)$HwZX1Xs&ZJNRI|TAsrJGZN>vUkl#Z`%ZYz{(b6lZRo8 -t<l+8n{Ctj!UO%GwLTsH~y`qw@HqbOWQZ<`#^~+StITtZfU7%G$QTsH{y1jLQ1%9gMn-*`L6u+t^ShF -zPnx>-|&dZPrUB4CtUU2F5q`VAQSXB?|_0mK6h|2>?dj)Q<wAZiC1Z7<DV^GeGIsKPE8hHVS3}qi&;M -CNSzY3T6VMZUev*7<C)nr3s9>tvU;ojtZK<sM{!*35>dJ>VQD$*kL9x>bB_^P`c?DP&#&)35>dh4hp4 -Xhnc{rTj-!rI(C=|jJk~-W&)!oO%xb4X`;ZWsi=E1VPKpEjGD%Ws|k#nG?ie~q^Sg>CQT(6HI*R@jGD -%0+zE`DG}&O(q{#-OCQUXNH4S=9VAQ192css<J{UEPk6#lQHH}YO6BsqA9Kfh)>@X7;HK{(ps7dt!Mo -m@6fYPy{OkmVhbqpx2YLY?e*kL9xYEsdGQPbEzCNOFmAB-k2Y8qe6OkmVBc9;o_nnv$$0;481|G=n8- -9IpD8lRLVFltgi5R96%DS=UwI)Y%-q!u6;HQmQ)!Kg`1KQL<6#s)^s+StITdD2-526WI<>8za&jGDF6 -fl>3|+yq9=<CD?^M$Os_!KhhF42+t!fWW9(>jjLORk&c(tilDOW>p~=HLK{rs9EIzM$OuTz^GY!5EwO -&uYM;mYSyL%M$Oukz^Hlj+9oh+)-DA`&Dy2Fs9C!d7&VVwY6hd`@deQgM$Hjp07?fdXE16WpMz#FYHm -6PlpcBsl#Wm1GZ<CWCkCU68pU8#QKuM;DryyjQANFCFsi6o3`P}ogTbh>YGB4d9s>mfItG-k(gCGa$A -HqYq0C@ZscL#d>DWJJFsh7#nZc+sKB3HDRMAxjqsp#hK&dV=7*!6P7D~tdF@sTMYz8wJRmNs8gHdH{1 -~VA7XrjQVMH2-^EpF+bN*7HO7`3QL4@NDT7cgoWB%HyhWvts7j9LcxW-w|Q3wZ{kmch9hj9M0X3!rpR -YzCv2MQ4H1vG!*$YEi*}QHy2{j9SK0pTVeQEcF?TTE<eJ!Kh^{^%;y>#zLOKs3l~BfYQ)Gp;QF}MlD* -|VAK*i?Wt4_rWuTqhiL|*<YJn^C>fV#FiPg68H|!WX$GU@NSeVYS(0WjN}i+{jFPEn2BYLEn!za9ie@ -lMzM>h7lCfw8qvR}_!6;daW-v<Lq8W^mxo8HX<Sv@QDA{>tFiL)&8H|#lX9lC>;F-ZFS$JkJY8?=t!6 -=z}W-v;wo*9git!D<K<m;KiC>eWZFv?CHFv?aPFscrS&tR0zJ7AREJ7ARUJ7ARkJ7AOzJYbX^JYbY9J -YbYOJOzxhi3W_4tEGTZvb7X2O1_o?M#;!hz$iIQ3K%78Ndcqe9VuXx%pL`dk~5=#Q8Ho_FiQ4@0!GQ+ -P{1hJ8wwaDH$wrV<W(qOl)MTBjFJ<ffKjpp6fjB-fC5IT;a|WgHT(-0rG|e2qtx&(VAM8htbkGK-WM= -R-TMMYh5c4528Q7Zj8gZ$fKh7J7cffA`T|C&Szo{?_2vs06}re^ROljuQK4%JMn%<Gpj1T%MyZ`&z$k -U^3mBzleF3A?tS?}cn)L;YQnS8*QEJ5(FiNfX0!FFxUcjhk)7q)D*|m1Xz|a9ksnK4*C^gy(7^Oyg0i -)XZd#->{ZTvM~z^FF%^#Vqz6<@$8wc-mHrB-|aqtuEoV3b<%1&mTFzJO6`#TPJ2t@r{)sTE(qD7E4X7 -^PNx0i&8G8;ok2IWVee=D;X5>kAmAW_<yp)SEA0lzQ_8j8bpDfKlqr7cfe_`2t3%H($Ug_2vs0)dmU* -7^P-?0i)EcFJP3K^#zRD2MP)prS5$JqxOM<0!FEwU%)7}^9vZIc76e)cGWr<rT%^aqtxFoVAQT!2cve -?Iv6DfKmnuV04QM8ZkHyMs&K)mUA{~(YL^icjN0YI1fygcSimTm1{N?%rhx^Fl1E?xqvR1-z$keH7BE -U4fd!0`M_>V?<N#Q}sD1oBw}4UV?=N7~K1yl<qtv}$z$kU^7cffQ`vr_r_kIDR)V*K8sAHDb^@@R^1B -_BTe*vS8qL<t-Fis0b9b@(vFzQ(J5-44C7ATbm7mSieU;(4#5m>;e!?s)~9lO*5M#&PefKjppEMSx@0 -Sg!<2fzYGso}qXQR?q6V3a!V3mA2bEoT9v)QVrgD7E4jFiNfX1&liGdI^+{4P^nN)SF+xsQaYTE*Q`; -Rt)I0r_#IX1B|+>KESBE>I00rt3JReSppU?N|t~HjFKf_0i)yqSimUt_ZKiq{rv@uQh$E|qtxGDz^MB -`;{ryh;lF@U_rb~qjJn&X4W-&0z$iHY7BET<fCY?_17HE8<N#Q}C^-NYFiH-9<z&<*2f%VNYLf$CIT^ -L7;lG@W>H|7P!N7R?C!;nw0G5+cn;Zbk$*4^ZfaPS=CI`TBGHR0pU|FG5)38FRreTFrO~VSMnuZlh$0 -w9!g;K5k6-u@CS18rmuTZMBU!hcMze1_jeuYx4{R*Yy6UtJdRGUGC(kf#<l&WAVl&WAVl-j!wr83uFp ->%8)>lI4JcClWebZi&v6-o~s6iUaRv+ET~?>Z=yj*l$s6-w_qD3p#3Wlc~zZbMlUl#Y)q>&d81&HD9Z -)TU<rdNOKLvwl4pwW(RZo{ZYmtY1$?ZEDu9C!;ns>(`S}o0|3O$*4`u`t@Ygre^(`p>!;uHACrGKx>B -5u{_ocrHg(8N*A3LN*A3LN*5giN=GHHHz?gS0Hvc~)*F;=(-?r#vE{5cC{;<_pj7vR+@Mr9eB7W^cYN -HSRJVNGpj2f!L8)%?n4olgLRlv$9gX&Ng3?{bIF+jNzMhQQ)OlY|Ms4c6uP386HQLvcQJWg=>&d7-Fw -Sx^YE$QZJsGvB(Y~IH+SF)YPeyHOw68OiYO-f2)y&OMI`*J-hSF8XfYMdRfYQ-uUkj9uU1}{*I_{BJ3 -zUv~B-R3@V;@@!l#YFDEl@i4v9&<y*tXUJrBw%o(mED$fl`&_0;MXt1xi(PU{qE~fl*l{1xBgAzk*Tf -@2_B#`ui&wrT+d3MyY$hf>AeB5E!NI{R&2@d%uEFH&qZArDpvKMyWTyf>G+tuV9oq?<*LkM*9jzsRh1 -*QEGv&V3b<mD;RYf-$}1vlzQST7^R;03P!0XzJgKeiLYRkdg3b>bsHa8S1?LV@)eA_jrLOoqi&=9RKX -~9%_|tCu6YHc)HSbQ)KtbjvS5_j=oO4o8@+;2YNJ;$N^SHCMyZWn!6>!SD;TA&c?F}?HLqZly5<#(Qj -@%bQPZNcK<TQ3Lh0BHDj1~}cm<=>0<U0{THqCoQVYC-QEGu#FiI`(3Pz~~Ucsnotn3O#sV82+sA*JT1 -*4`-XMxgDK^2Tr8@+;2YNJ;$N?r2`MyYFF!6<djD;TA&c?F}?B(GqUn&cIXQj@%bQEHM`Flri~P%0Ru -o_GbL)Dy2@lzQS7jG8AMW5&Rc4o0a-Uco3e$txJ8CV2&;)FiK9l$zufj8c=lf>E<p6d0whc?F}?HLqa -QtkMRfW|cM=rM`LvqtsWgVAQNy2cy(zuV9oK?G=ntqrHMrYP44{YTkx0FiM^G3P!2XUco4}(JL6GHhK -l4)JCshl-lSOj8c=lf>COcS1@WGA6Y6Gr6zd=qtqm?V3eBV6^tq>DKJW1^9n|(YhJ-9b<HanrLK7eqt -qm?U{ulUgHh_5S1?Ll^9n|(YhJ;qGCqG)FiLIo3PzRj`J;kSWqkgqV3Zo|6^v4&y@F9{v{x`njrIyg7 -41@BRH<Xv2BXx9uV7SBeSlHw&8I6MrRIDef!4z#5UV@0uHcmV^L+$zpYINaUf=u+R4u;y7pz)*w=ZC| -_;z2=YVrNPz}2Grd#~V?+VXwm)U3XIAGu*f?*hnDXTFcj7}41QEp^`e2sAIg?HQV#Tmf#WwVtj3mwM} -c1e$dV<rU~sGrf;Mv+kL^0$%E`_Yr8;U6WVfOC9z;0?oQ_@(O^drQS!NIdpa)Z1pt+!yFZI1;kcgLr` -q>H3Y_#3erbT&8x2}K(_j-f@IHmAV8TDL9Sq#GeNF^nNvNkpqX<$uE3d-J+9!HdhmS&nswjg6+}}PzK -=k&?wq`WY3jrG5op%ElUGnpo%nPG)>c;wxVE}l0Jhch4zjIYr$F24bqcnvUZ;SYQaSnvG<)R&Z))225 -op%^&{qI%^}YTe-0JlX#8t0%Fs^!?0&>+g2Fg{}7%*2|E#O>rwE%S0)dJF0R|`;AT`gc;^_2(gs;@j~ -SG`VwyXtic-c`>IfLFaLLA>fU2;@DdA%J<#CAb25n>B-ajv2TDd(IiSf_n}cxB`3*7Px|ZjtRH|eU1g -Vf_=^fxB`B@5&jDLh36Fb^PTTk@XvR;Ujabh*?t89eJA@B2=uM&S1`~wre6U;-<f^|1$}G!6&Uob=vQ -#ix1J-+V)MP{NVC{{^Eu)yHs5`YJd4dYmm|<(^WEi0wCE#~MhZrJ<OL(EMpld{e*zqAy7eEi7Mt%vN3 -O-@+t3kgvH3o9BwK905gpMMo9{$Nw#DXK(GhO3`CfFSTWr1=9q|^M??y+y#pc`55pc2jesm;UY`!5K5 -f_{9NJqxS=3CMca<TcIbfjEtz9}6s7n|=&N6y9O+tLwqv8frJkaV&6PIW|GY|YgI4mMW{IM`e*;9zsL -fP=01IMCeuDrjy#J2dZp6*TWYGBk??2))>RH$74>Hs4N<*o!`*$^-{}hdqKX`iLqM9P~~1h`#6}sts_ -k4IfxS_{FB~e?t1jruKhA{KcmJe?tDnCIdi10LCT<KtcjWAJMtML3scYGB7ro01`qlHn{*2QZP2z01{ -#_Hu(S&axgX-0TO~Rw%u7X;NU(>GdQ?Aeg+)ey>EbnyY~%naQ7|&4({F)z`@<?9UR=f-oe4$>m3~2z2 -3pW-Rm73+@Hg2pxJ8~9NfK@!NJ{Y5FFgS2EoDIYY-gVH)#e3cdtrtaQCVN2X}ooMm)y0d!2%VyVof=x -O<&~gS*!$IJk$849#A-;GnVw5>hg@-D?>f+`X2;!QCqt9NfKf!NJ{Y5FFgS;=sY(s|g(3y>`IC-D?LN -JiIQzL3te#0y8$59TE~VHn|-VA~QDG9TGA#Hu)VALNhk`8xm48`bgGD!H8eAV8myK=EcW>W>q+%GdB4 -k60$S4!&!mgpqvm1=^2}>5DD=ao4gPS`5ApgF-YLx@f^?u&5m0F2M^~hfrEzwm%zcpiA&(%QFUZ+@Ti -J<0tb)rCx1ea#wKS)LXyTNYehno#wKq?LYBs+@PvdgjZNtZ327Re;u8|$G&bcYB;;xI5xom=P_~VPM2 -$_pjf6;zO~#FcOpQ&>jf7B*P1cQsRE<qB3JI|qo7@};xf+}790|c1oBSLJ$r_ss9SPAI+ubz}4&Gh!; -NaaA4i3t)kr1!3-CgtG;N3M34&Gh!;Naag4-Ve-Ne>wt+uf@G9K3rKfP;6h0&wu|RR9j&T`l0Cycr2e -8=K4-2~it;M5_QClwTtuY-78JQpmtTSvV5nHa2-U67n`SnK%*xH#WIA5)wE1h-&`iU|fBjPY%Y_*ZJg -NADJ{#F`{#w9E_{4{K>(%`Z}K+jH|En$-z)MLqhaMTz#ES4u;Ga3E>-Y_5QO!v-h6`n!W!l(Cpo2g=X -(ID>QqzS)o~<jgi3-*XMjUX!dnpq1h{Ug=VkZ6`H+rS7`RiU7=Z@1`)*(SFhy?&0fnDnnf$5am3YY`Q -%_EujP}2k<71?gOR+JPYy=%RXsTv$*bVxU?hjxog9qhG`o|7eMEV)CkG=r;O^vL$U~42%n>pXBqVc$T -m%Wx9FZJ@cZFu>;9a4)Ss^rQ$3{Fy$V!lq&k@OKc?p{D{+&~^>;(xC9U*@~LPkf(V2}{f5xTcOA*Cba -IY@}<2w4geaymkOfP|oqkRc!;sUu_nNQmkPHT)B@Izs*Ygs_fKLq8#{Bh<i8i0g>#48sh~P9)6G>?@z -4+1Ky}%~}P>><Hb-o)Fp*H^29jgQ0ub6Jk3;4fBNDj!?%uA-E%S_j*EdN8H9O&I!>Sp|*NLc1P%r_Jr -_`xcSOY(Cq6xL9?&(1kJwA6Eyo8PSEVNGeNW0&IHX~DHAk%T};sIbumM;=ztuLxIG6(o|-3L=aYjm`8 -uB*jLFye<X|7syq_HGBR=wi5ota-7;2;^<axy8**Q5FlV|7TU`(E!0?nSC0?lGKLOnt^p(mtzgc|G#u -^yogdqS>9A88taX3sk~IC;f^gOe)(9GqMU;Nav+00$?pIB-y{_k?_pQ13k<;3FolN^o#;MS+8pD+(N( -Tv6cQ<cb0Zr%mr29GqNZ;NavM0|zJ97&th&#=yZze-9$-qmS$wfoAU;;Nax_862GSi5htyG40X=4o== -}z`^M`;1rs@|A2$jq3a9|%1e-t`Vle{B*cF75!Ev|D1Sjh@JCF}N(Bcehoypp(|ytiG&?^P9Gt`*q<@ -5b2nq2YAtORU{zo6#Gy=`~wg(9yF*}+S9F$!lAp<04r?rBEv*TL9K^YVhVn9L;g@hcCkVPRO2qa`lNJ -s*S*}1Ra;OyX6aBx=SD8fKOK81udkdRR!Ar7REXm-HCx#((ugR^!UB!Yze4GEDTeMIvG4$AV75DF6VJ -S3!ogiH?!u^=JWLqaY{ACVq#aMmYbB!h&k5ed;CA#X%NHb@`Qdj|*S>Q_N?b!aa%S04wOwf`U>BxJit -NC*k}E)pU_LOzRxjF6DgA|WKCkEk-iL4_P7#Ds)W4ia)gV%A?t2nq=~HWHFTLY9q$sF09nBOxm!WZFm -w3kiiEB&3Ced>jdJA$>&e6daVbBOx#(6o8PB7!vdD<3RInh0v^+W`u@>JR%9HA$>%e!9m$Z5^_WOh!l -c@v(ucx!Pz?!I5>N^0S9OAE#P4BE&&b}?-Jl(@h$-lmgi9CQ*-ey0S*@L65wF*E&&b}?-Jl(@h$-l7V -i?^VDX*+4i@hT;9&832M3GSJ2+Upy1~KXwG0jxuS#%G&X|NaktklL;9&7O1qbDYNk|k4nPCzlMWT2ug -M-Cu85}HL%iy34F$u9EQM{JH!Q!<H4i>LvaIknSgM-Cu5F9L8g9sN1J7<tC(nl7JK(kgH@<sYc)(A9f -#UWv&k5r97^X}t7^KL!Ry!-6Xtkr~=k+5$EIU`};4uVF)z8xfuM7jGo&@AF3Ya|r5kq|Z#cKaZ0B<%J -<+(;j>o{AA22OPBj2Z<wL{|_QZ`iS&^gLVWVbR_HuLh48#@sUr>_6Q+&B<vAF@JQGrgyfO1M+ng)edM -kYXm%<)IB3@p(nrFsA;gcw;$U`gaM3ev5J1vLe0FGF90?E2e)0`CxQNRLA?YK#Mxfa#@ZjL0^^P2pKB -BXOgG=?Rpt<^0(Cj#QaL{fjgpq{ZP)H*QyP*(A(ns`8!9n|@5J(b>2#Z9Luwx35Bw@!CGD*UYDTI>5; -`I&=+Czm{lCXygxg>o=*BKnNhYHCgVGk9eNx~i~WRvs}oeLaX{b&Gi&^{}~lZ1U%$R`Q=tPoHV_E{mJ -B<!<7L`m3Zg^ZF|pC1_j&8|#v&^{}~l!Sd&$SDc?tPoTZ_E{mRB<!<7R7u!pg{+dW&kA8BVV@P!O2R% -X#Fd17R>&&}`>YUH607SF99%aa2bx`(;Go@E2rY@#)dCK#rUN**ng!tCY8HTlc6lMWB<%7+bV=Cdh3t -~BrwidFp{SOG^pdd43-KkfdY=ae?fXK2N!aCu1e4HnmJ%XN!oDwLn1u3J5<*Nufh-9rCZR-@gcy@hBu -he$Nhp&gA;=^Y%94;|684xO$|USDLzYSCSxE_DCZVSzC8U{zU1x|h3A@gaXA<_9A<!i3F+-wB=s8FUk -tSi+88S`6t}}$1gk5JyH3_@U5Ni_EPt*Vh?L$MbN!W*mWRs|Vs0KJ_XBx6iqWZBK;9w1(9h&tW2;xmb -u`>zzCZT5<B?O#=l4ueVPD0NqN{BcKJ*g-m<0SN~qJ)r>P=HNB%1QX?Lx?#EKYj=~Ct=4Of=<HE8$!} -a_<=)+Itf2<2w5lLM-CzEB>c=Fq@9ExI)u2Bu)7a=Cw)ZM2ORW+h>&;^b^s#sB<ui0=1JHAh|rU;0}! -bvVFw^$Pr}a@LhecU;X(*L3A+T5d=h?|5TZ}QzCmQ4gnfeuKM6lS2<a!`rvV}UB>eOr<e!9}_JaVF@Z -)}vfD(S*4<b;)5Bxy}O8ALC2tf%y@&_p>;b;CJ1|{ruL=H;$sXqup2|xA+NhlGn7I4shNMxae9|eRkl -(0h*X((ZbB;ruQ4oT#pgdLIyL<v9b2Z<=*$NeA@CG4U^CQ3X%-v=Cge!ven`22()aPavNKj7f=Gk(Cq -=ZE}&gU?U-0SBKS^8*e(Kj#M={PjUU(5!D|5swmn_7Cz=!v0JIq=fyMNJt60F%gl{M|}2*k?~FulF~= -~oS{?m^CN)3!RKcHfrHNv0Rji@y+l$<*n5enl(5qhSt((sCBjm|PD`Yvgq@a%O9?wIk(Uy7S|Ttd?6g -E;O4w<M$ds_t5}7GsrzJvD!oEtRriA^Fh)oH*7Ll70b}b?}CG1E<a!S~Li0G8Cw-DJWVQ(SAQ^MXtq^ -E?vg@{iHdkc}D5_S?IKqc(uLxM`!%ZCV+u)hu&Dq$BKLR7*oIHahAJ#UCn347j<qY`$wAxI_ca6^(x* -x`mKm9WDNSt_At=_G`ygdJ{3QwclV5T_FMvms9<^gNw}K$Wnc4T&mY9~vT6!ag))s)T)L2vrID(2%MU -_MstGCG0~(u1eVVg<zGi?+eK)Vc!>`Rl>e6WUGW-UI<qSyS$LD5_WkZUM1}5LcU7aorQpvusaJ0D{** -sz(ISckg*bWF(G6n>@`BlO4uWWn3b?22stZZM-YNm;{L3#Vno*m9JC_{Su0`x55iW$ZXcwrgxx-fTM2 -u6khjuDR*gWjK2;)drP=L+$dzWd4>DJpy*&tBX-aZQNL^`m`yh6u+3kbem3Do8YTJYnA9==zX7J=-v; -PO#D@}1N3E?Zv{vV{TH2Z%LztZggLH<g!{|5mq&Hf)Gur&LB5W&)}-oq<2dk?SB>{_kR>`JK6?0K)yt -iOd3#L|?^l90sG^yrm@D3)fg5wcjCy+#OQY4#c+jiuRZggBOFuMzTCnw>=mWNCI5A(5piq9q}crP*tQ -OqOP^5kgs-y+%l7X-Z{Dh-GPZA0d~e*?ojymZo5qgk+YcWR`?zmZoTyglv|kD3*k9mZmJ0gmjjs?3IL -gmX`cP!3@oQU|@!3KOitebM?8PdGo8FS$hIPTAKY)NNH(yLm{T6+53c?mS*o0f?Ap)R1%U}n%z){YH4 -;uA*-d?`-HHTrU#fLq_s5Vs3gR-G&`M;*V62CLSRd?(+P<!%}ysowlq7PklE6*XYk};%bvlLgUxOz#J -04&c;wV<e-wgST7G`QBQ!rh;t`ttjK>+8{gB5Qn*Ef=8Jhi=#~GSk2{Sai5@u)?zmVY4?3hA?OCRx(q -1o%bK(kkOfo8An0?l6C1)9CO3p9Im7ijicJ~`NKp7)c3?dEwuIoNKV_mhL|=6OFk*zEE`o=daK3xO`p -E-xgyG`qYI>C)`-LZ(ZzgA1W9%?>W4x-?~_B*eP3n;#eo4%(fCV3%fh7Lr|>-C2lsX-ZH@$aZP=Ya!g -Fk8B!&X0L8=&<-x-yEHqv5b)CM;6lPnvx5r}FU<}vWV|#xxDfKv?9M{UOS8`kF)z(NE9AU1`>YW3((I -~2(o3^r3Q;f3jwxilG&`mc_R{Q_LfT8SV+wIE&5kMLy)-+f5ctxj=Vz@#vmdq!4%#t=%$H`z6hdE`T} -()QX?7MN_NCcbgxr^AXAy#5nten_erfg*A^N4+BZTaiW{(iUUz#03NPlT|1R?&V*%5^Nmu7Dd0$`fGJ -xG9Q_VyqGrrFzr447tb4?<v?y*)^QY4-LY2Bz8DgB+M<Zx4cCnteM+f@${cAPT10lY=anW={^nV458` -NP}s1;2;jB*@1&Rm}V~x0%4l{El7lE^Yf#4p?UMUp!xafywI%GjZ~OsUkYMjntdtAg=zMsAQ-0Eg@R< -5W)}*gVVYei$cAZlp&%Tl*@c31m}Wl-;$hnS{77MFc13}M_JJTFrrG0xh?r(?1~Our-4O_hX?8~-C8p -UOftZ+PcLZ``nw<{_ifMK}AStHV`GBaHX6FO4Vw#-~2#aa<IUp^j+2??`m}bWU@?x4D3kZy9_7xy8rr -B43$e3nd0WxEneFX@OY4#N$HKy5DfY_L3UjcGsntcTbj%oH4AUUSlSAgi4W)}gnW13wA2#;xY5g<LLx -%-d!nC9+3@?)C2{|Jz2?*1b|rn%RT2$|+yKQd&RJNpQcY3_+5MW(qYju@Hdo;Y%3ntS31l4<U4BT1&Y -yNxKB=I%DKWSV=~2$N~<QzK2LxlfHandUw<@?@HN&>49$ePq+fsaZYfj69j99&|>YOj8d!BTuHO2c3~ -8)6|2`$dhU6IA`R^G<BRa@?@Gi&KY?!O&#ZqJej7Bb4H#_Q^z?YPo}BkoRKHf)N#(plWFQWXXME=b(} -NuWSaWI8F?~I9o~#QnWheJMxIPlhc_cnrm4f5ktfsC;mydCX{(=x4i2t<96C6-K0gl~n*Bg@aB%e#(Z -Rv$N1}s+)z3r+2df{74i2irn~^8es-Ke%4ywbOktfrtADs>ks>7R+C)3p7&B&8!>hNad$+YT<0tc(>2 -OO-f7I3h72Ejq~YBTa=ntHVvc`{AC+KfDzrp|0eo=j6`HX~1_sWY3AC)28{1strS$B~gI)6{j%$dl<K -Iu1BkU1Q+j_WV%$8%F%9Q}gC44-Rg=^5Ed+D-RBCzN+Bh=2Zy}Zobao;O12c4sKqR;Na#}2@Y;vmEhp -!H3$xFo<VR>oyUwknYQ^Ff`gl{7&y3jRf2<?S0y;Oc~ydgo7W&XxOokNgPYeEI2fKCa4<YO;9z()frH -`I1P+Gh3mgp37dWV1WJaD$3$Gn;P>(jr$dhT|ogW+wJ^31WGA+FGgM;Cn9~=zt{NP}?e!#(SwSa@+Y5 -@ns)dCKNs|6ekR{}T~Ud!NMcrAm2;k677hSxGUsGep<o=j6uGb2x?si&EdC)3oO%*c~z>P}|l$@CE)d -B%v3Trg5KvS1`Ma%xt0G9yo>sXLjGC)3oO%*c~z>P}|l$uxB*GxB7bl3_CPWSaVw8F?~I{mP6ynWlba -MxIPlzcM3Frm0_<ktfsCugu7kY3f&I<jFMkD>L$Bn);O)c`{A?%8Wdjrev6mJej8MWJaD$Q+F~WPo}9 -mnUN>c)Sb-8lWFQsX5`5<btg0OWSY8@8F?~I-N}qRnWpY!MxIPlcQPYSrYYwnBTuF&=OiOfrYYwnBTu -F&=OiOfrYYwnBTuF&=OiOfrl}K}ktfr3*E2Y{yH>%$-L(o1?ygL5aCc>bgS+bx9Nb-p;Nb460|$3k6g -arMe!#)q^#cy>t_^T-cWr=!>eXiC$u#w9GxB7bdbJsOGHv%R0S@loCBVVmy979>&TK}WOjC+TMxIPNT -nXUd;duuK56=!bczAZe!Naoy4j!HhaPaUh0S+F%^5Ed%^$rdmUhm+bvNbaDWZL2R0tb&(dkZ*tcuxQa -56>w$cz901!NWTMICyxL!NJ2<9vnQp1Av2v*E=|Pc)f#zhu1qeczAV#gLlstIC%GbfrEFiQ*iL^bqWs -Ny(+=MyH_PRc=x=6gLlt6IC%HGgM)XkN^tP*N&pA%t^{yU-Q<isnWk=XMxIPlH#s9urm35pktfsCP0q --ZY3e3t<jFK;M`Yy5H1(G=@?>`Pjx+LPcJ+=k@?>`Pjx+LPc6Ev~@?`qRp^<!!==vZ}W>@bxBTr^m?> -Hk*W>=>;BTr^mUpOOAW>;T0BTr^mUpOOAW>;T0BTr^mUpOOAW>;T0BTr^mUpOOAW>;T0BTr^mUpOOAX -1{t)Gc@};XJ|hBJJ2jvB2Q*lKQ|*!W>-HqBTr^mc0@*=%&rb^MxM;B4sS-D%&rb^MxM;Ber`sd%&vZJ -MxM;Ber`sd%&vZJMxM;Ber`sd%&vZJMxM;Ber`sd%&vZJMxM;Ber`sd%${7CCkOZB%ABCtl{rDPD|3Q -o*Wm=suEQCcU57I?i>Jtw*^?`ChGtjh49%{?8Jb;(Gc>#EW@vW(%+TyTVTNY!2?d(HClqMjv<3?_dzU -EC>|LTjvv-LC&92@8&7rC*(A<1vXl~M6pjm%qBTr^m4>}`HW>33+2b#rh<jL&GYiEIGubl;&y>=F8cF -ix)?3zD0xM$b=$-zFNBcB}Hvupn3;GSLcCkOZJ3O_lxXIJ>i!9BaePY&+c6@GGX&#vc_gL`&8uh8u3U -7^|4TcO#NS)ti`W`$<gYK3OkYK7)i6;+|xyJ&@G@0k^vy+c-Lc7<1HRy`w6X4jKHGV)~htm;LcOdnY^ -0?p081I?;K<jL&nwrAwY^bwy6ns*-=nhzftnpJhkliAgy&&ZS6)uYeIliAgy&&ZS6)uYeIliAgy&&ZS -6)uYeIliAgy&&ZSMBi6HG#K)-^ksfeRUHgnYnOzSq$;gx0)yL1sliAhB&&ZS6)yL1sliAhB&&ZSMBR& -o^>w6O9$?WR&XXMHBk?{>V@?>^(|1<Jrc6I+V@?>^(|1<Jrc6I+V@?`o*Xat&99~qig9|xMXE|4d)EA -=HKPo|GZ4>)+!DnOphF7H7`p3E-qK}Md;e)GBj2X9^%;NZ>c0vwdDAR|v^m#-irPiDV)?F<h7?~ncuP -)h>@6aWAK2ml;P_Ew<ob(cQ_007tq001HY003}la4%nWWo~3|axY_OVRB?;bT4XeXklV-a&KZ~axQRr -l~i4C8aohu=U0rv3rJ*dXjQ4bQLDQUNND-eE~v^AGP|>2)oUZ$n`ry%?=c^tA4K<dpI~Or@tHGYH=CC -~>J9EkQyP!@gK0XT-gwskLa)>|8%<hlnPygQq!x<$CTEh4O7mSRB_d-tlpz*1PNgF)y+q|5Kd~}9wqy -$O7dTKqW$!YvV}#1G(lQfX8tw4c?u_040Wr;uJ;XE1!gEgRde8X#QNjkUU5%r*o?87jbw7M~4~mQB5y -eVT5^5bK?AShWe(0ocw6}6yd1G6y{Wl^+6Jfv6T&j(gC0!E~dh&+mwci?j>>t)BxwgXA!KK17lQV^Xh -Ok?zO+}f|WI31aKo28437!9CEbyhtWl@JvrE|0sRC~6iJ9&6NUDB8xl+rzGw&-SFt(D9G9?OiiV-k*b -A?CJcr-ngDdK5xK1NyzYx5N_paP|{hhX}oix~J2Qj2$wTTEYkYnC313+Ynuo!Zhp&8C|sC+-Xiy?`gO -29zQ^cMxU`pv}URt7nSOO0k!mXw0M{;7Zgt)>1&)M@pSQci&{91EarD$lI2cG5Th$Aw67r?1d~D1e*h -xxjmD$JV^BXFEvADsrQs~0nC5Y^81<LqIHCD6na|QeM3ge0EDmN~GWo^g0+gkJlR0}Kl{>Wli19iIR5 -@+M6JyL7OKcPgT#;S<M>AALZ}$BHayImqWI@{a4n13m-NE+#HeIls=i9;3XHkdVbx|brH-!<TfDdH>> -Y*~mcBp5Z52ceB*qb-q?#*@g?M;_xnIiJqM}z6z|9nK6jYeTjNl~^H_GKZ$vSEPX7JZ&Q#J#&85;5M1 -+To2j;&3nY#(At;DYC89d_wm3nKWc3hs+UDuESxD{mz;-tUlIHD&=Lb_S{D{Wk26%&lu;*pG2+F$!ap -Y8;l!`My7;whwuT`y3B^>0<Q&jqoCDF;?Y^HT8>rGrt42MHJT6k@VN@lP^%ri)V0qkAdZc%AnN0VR$D -(y`~~}?(JK)Q{SF^KzHaufhg-ae9>IO|ANUBZzJBTL=<iC4lF$8t_S~LjUs+98pUqaRuU;ckLT@Uu`7 -e?$xNt&WHU0%qO9KQH00008031s8R;%8m)9Dld0Iz8P0384T0B~t=FJE?LZe(wAFJow7a%5$6FKTdOZ -ghAqaCz-rZFAd3lK!q=F&BS0>5kT7W`MiI*`!X9C0kira!GRKTrL$0B0&jjiqHX|745Iz0YEgK=^oI^ -Wqo^ZE`$aLGd=zC^wSMUfuB7K|4~03y*fEnZ%z)6PA`tsPjAi+|D;CdKHGVwE^jk+R^~VPDqX6>VxFn -IQg4gD<jZC1zTe%gSNSZhi&D*&dA6$6%+1-~>6f0Y@;Y}bUuK`PWpSUCs#vHxAk)o1&FX5F-e({-FIJ -WNTHY6B`^5=X?~1Y;pOsl!XLEJ^*h-XJrDY@Q{?To9TdUo}J*B_<?pr4!IDKCoESKuMnOmvztjfyI*} -Svluvpb)e!X^P?pAv*+=x<d)AEygmoIP1{7yYrPQzN&g?jf`-xjNl{mxa({JKob$Hr@mGRss|Eb0fR* -!SwOSgTpOQe`&Jt4_RgM6J@*{0~Lx*54KLeDT-}tygnrPNQ|5m3LL|!&j&8)tjtxnyOdXDl45e@7CAL -eC8Iv$!FQB%2ZmZ`(~`V9Xxg1C~~n;L>(7SeCyrsRhGN!&EB80vT`HJ?CXBFjl_v^vEEJVMt>L0`)1* -uQ~FUYT{Oym<$llwgQatouUfIU&iC%b33P@&I9RFcOs%VIv0hG`1UFaxa&r0l?ER%WIQ^i0IXFK*IKB -Mvy_@Si?XJ4`b&~SCdk4X}a#oe;s(y5eI{|Nx&JSO^6$d|^yg9l2&}e^ra(Q}maiNaS&eef>cW{1ra` -^tu!MS?({`}q9#nHY}7g^T3xN&C4$>idN6M0uSPtLPC&6ibY`Ue-@$|<;<tK0N*=E6M7a)&6Dx)iy8{ -7o@j7OR`qUbkd$==UmLs8vx<)I*s&>^Ss^=sGDwd?ya{v;B!mw40Q!J}q4cF5L3teBneNFN>m_sGo|e -Zl=CHaBCx@b@W`@NGtXJ!i|jmQAejQpGYdtc6JtJai{9X``nr3qSmC&8;6XEx?JBc9m3wPoVGhXe%x` -Jm+4KqN|kv&yG=_~W&g3xRx@XFdfhB&>|U+!uALX1O<6j-RkO@Nsm$(6m&q%a(RtlwV7u<oC0?D~6y> -AaV{uo%aM4)o{Q2HY8|l-TOZV*8TK%AQcU-2c-Dsk^!}KTr1&991GQTKa?@c=Moz-zW(tTS0JnoNfn( -YT|J3?RS-1ajy%y;KW{}n%zemmPwF#T8EpIHAy_m^UEDTW|+0_h+FNo?Gk|MkN0wZr{;4g=<Q&Pm{t+ -?Djvr(h+0G%=JIQw%PyP5hwXU<~KFhY-Op0$_9}q=4z=u;|m)N&iU`x)T=t|8obJ&+;8d5{T)R$T9%L -a3lgD2?QnSS%Nl-fH5$yWB*bDDkVaH3CO6=eI3gEuYLS?%l$~?K8t(gN6qv}XL<)}9~I<k4M9QAcP9u -Z1{+FJ-KQ{}7#N9qIiwQmPjvy2X?r0<)%d&S{@))ABKH}8YQN%ZIL98q`sWsAvJpx>YzZj1F?_{xuYF -%3oJ_w<uy0|sLzg<|Q|@bjITIym4bjV}4`-r_u<bE^Jz^D#_BG%@${nhS+Sefg>!>~=!J<){1cd0zia -*Am=xWLKEc!9bPXIz_vh`<L02}RS02s{kOeNGj@s*5vv0e174}L}<*mcCdQC657`!kIn@fg4_D`p~=Y -mi_-6V?wWzWI!S>0rI|;B7G9fZ-ZGabKFIfgCWq4d_M$YoOFxKYR#a)Gf%6@^&l+O(<EIRu~a<o%PL^ -;6d;+-?Hd4=rS-f%v;Du3t34>u%JJsKjBb|EuI4Y1O|h*JVqE!J|~xAEZAg%4Z4?MgU)d#Y0gMK2m|Z -ufM~J)WOA1k03*9B-0<R6L^uXogNAf2i4ko{U@d_#@kt4(jF=x&hV?&~S<I`}ze=G`eA6~pMf6$VD6L -RFI-kO1K~*f%F(AhXKVW6i{=V9`RGyRh8a#s-V2Q~(Mwa{Ju}CyOu}}DPB8fMKRAq^YR%>yetAPht+o -M6Cff4O*A){{v0B}Mx__W-&z77$<5>pIm-})m6Bm#Eq*EKX5Q7VJZN+H%1<F6&!p~qPkBv|pVi#_PT= -*t|}04*%s32cq*#7KZO0~XG;k0M&GeJ_nMKR)atfU)dg(PzQMPwUsyDCBBJEVvxg4dWR5gD9UJ!9ns2 -LmeuBfx}IsP|vUZ1R;mWhg}#cM!(j_He-Gg!p<f0BfuEzQuJB*Kp-Wduaqy*2=g=6jeOIv6(@Z#n=sZ -4@N^!5sv0I}Fd2a)A%VrqLISd<Qn5H8jBR`<%xC-%L7BF`lUcut3?LgbWXK3a5wQ@=XdyY1ikkLWCD` ->@-}B^_#Lpum%(udP?W=8lB(Uh?985!+9D$|Uj}#ge`zB}*h%JHfos23m*0K;UTDw_3Qumn?tiMsvK* -S+77}#=<X&7aevld)LehaohM15A6kKQIwv3A0a*ZoMCj~R!+z?@|)jWEOch+brGwngk)8a#}j8bQ|5A -<ZM7`6J(Z3CyGvL$K){z{Dhp*a)+j@c><A9SboGhDn2Su-l11xb<Vix<2DGKPe#VzRV!&%V(^p!As2f -Mu66Wf5?2<D+Y1Sut6gzL~2et#BeFd{MhxOsMvoXgFo296lSHt!Y3;n7E+SUr;SWMLMP}kR`0B6=?TL -L$V6JxqV7x58z=%$M8<0W9Iql7THi(3Be7?&<Okvt4Iz$1h$EP9ea*4(p>L5=?0D`YV_?)U#nAa!9S~ -g@Da=Hs7)F!v43a|(4lzQwo$z9cYGY(c`LX+bJg~?HlTky8NeL{MS!5#^#FOnQ&lVa#Qc~=gU0T%r;A -8@)_Axegj=@S`6=r1wcVUt+W$DKg-OrImjd>}2N&J{Y{;+@nNfIC#YsDe)%t(($v_P+g$YLU3qT&6Qq -(19!VSUr$$!OQdT*so%9v#SjBl5k6jjQz~v#en)t_&YbKr31T1|(z#rkkF4KjTY!tTG?svtk|kiER)M -#=lAei4QR@vP5Ec%|fsJEl8g&Kc7l`9VnW1<cD0ceAqr!5uCBuBJpjELgq)XFcx&p%%=!43>cAFLG#I -P-hD2eJo$Hfl2Cl*V-W0Gx74-R2Nn68S`-X1i$2;lR@O~O0i@{8#$=@Jp`M@Az>SEI6F6u1#0+8%!RV -7@<XFZM#@~XSP*G+NawFe+F?eP`_0~t7q^fLs*{2cMz@U(lB*gev;~wV;xCl{dd_SOzFmagqh+FjhP| --y0BL)mmpY=bPjb_5Zul?X+d}Zzva*)c{fq_HnvtT}g(}L%b^N|o_;j_YrSZB99Td<G_5ol{*5J}AVs -zzWJ?j8Yap?WMqXlr)EYsD60cYOG`16waLL5u9h%5H=QkfzXY)I3;!FoLV7rv{_6FoB4DtnQ=yh+Q24 -f8z6J0+@_JAl?ZwHX~$W>akQ!KsW=xW+?TeiOj#H?k8eN1ino|<_F7%%zD}}76<Axc5`Q8GIOkS6q&$ -o^iToovz7(T=^!)`k#4`=Cx9j5UfT!^$G&1LwK04w%_Y|vaDMOvsQ~W_P`yZaTh>$gTb<Mu;DJrJy#2 -&+nPNx?jEA)t+;VUGpF0Q@LCMCaKE|I|WspU+h!^F%fg2fYby)czT964v2w}>gZ|MY)%m9X3F-9Ghj6 -Cf@oXBFQea{&Ggp~kdewxp6#0nQlhL@jYzHBnJP}{<|7uKi!Qmge>ZJ9GR&U9mj$dvh=fR6+!!ZSm4U -;8?<>KXjB{zB{%SfG)tSlfeK8VNOm=|GaD&QXu67|?~%SoD#*7(rRcYtoGo8YYGD=dgU#&?YgTAPoi~ -Vf{-;HOyDid|6N=^UM5VU&nx|Aq~e4BOLoT#C%YuhPZDBe-JzogwFsBSf(&|NB(jHo=56qd4X+Y1dzb -UY9C`P2N^sp0Dx{B@FX6&<zc0q?&-8&Mh)y9`@-p*k#i>>e@cS1Oe161V1u!5Eb5Gbi~YEedXo8rn~t -?KPeE^xc)tehg9nBq(2|WrA6s7|nA7-iXSak5u^PO`SekBjA~6B|7VISPu8<b8NJ(C$OWo%f^)VhmAI -AO!mUK2G1m~bp#wSd26tj8@RItxPpyC7z2ScDVUzU#uBFhXMOA6^p*@Pfwwii3;kl%FRj@&aN&-&QCv -wXmX=XC2zH?Vkzh!1ZQ$fLwxE;-5yr+FPqFPv2z_KAv7UJqBd{(1u<79ZLeUsUiQ{qgY#^B6PV_&4SV -2{uARgwIh~_8DKS^lChAKI?O2fu>?-U<<r|L3rcVc+Q$$7JcLdQU;la{D9_TDGY+jYnZqGQfp8vG6DM -ymK3O4;?K8z3xT>NFm8PvShg}e;9WL`Z-{R@f{%QW#N_|Ug$%%iSU;NBylK#!^p62}nENCXNkjK~Qin -$U5@~KhbK}DjH^orKA}%pV8~gwGFa^+Fj9{=~!!m@(G%$zd1#*#v$r=ELh-DE(QJ5Ez*n;IXD|~1^KJ -r3#V)-6K0y^LL?!w?AR9F&WM~yrm2^hq_5SF|K0D!j=BxJ1VMf35J2JZ!rFZKYz691I;{`VgNG8y?X2 -Vy`&lxffau(bd@GPZ?%EqEa4Ni1+i#5w}WtWmTfIT0Yr3ayy=5sW9}TA>`4XhA=tnXx~gl2O+BFCJEm -jG@JhFOg4su<OGN!kR^F%uu025HbLg1ax3D5`i=W`y#ZoKooML^^K*giOBuo>d3D*Fd7X0lnS{khQde -u#u_0FO&w~Li1P$|t6@3PJL6ksT@2GmG9i%WjQx6p^*>nw#cEEUSoaMCH}>_X!9;irZv-O0s2K<};w1 -6UW53*Bq_B<*J;T=MlNzKd8Xm!pTDS<^lK3j=K8X@BfsjCYVyrbhal*Ei)-ui6ZzfRmhoT8>4@+45On -g6Mz7xD--!lXo`J)^IX0qSDpsyHfq;UiLM&LIh3dC&;yTrcE8|RGl{D~j^*!Qy$u3+@YsEoqLT!)#f0 -Yb9GXg_eq7f5MEIwM0O*C98?lmCBh(U%`|YXM-QHSL3+h>pO+nqkI8lnBU~2I57^uqKBNDyh~FE+HWX -l`x|tQTU#C1Y0%iZCE=OgOU-z61x#>9iQI$L_XBXA*fjF>%cXCg85o(5p=@XOdC?q`0m2^BGEl17Iq{ -ek=RHc@{Mh>`XfgfKxqWfvQWj43|WUj;gI#hiV<RR>?NoH!1+}7rRKr9Pwtg<--bSA;X|XO=4={!;Dc ->X;#X&EFj#%TJ`jr??iGQ1Bk&u0=0I85fPar(XSv$h*_kcVs!~6v_vtFDvcvABmIteJ`B>%Ei`G}C@8 -3?(j;DtQmq)M8&OfLh)W5XjFV9Xdr++#<`^Aks*X_{J>Dl{NuczlnZ>E>8&yOx%pS^kMuIeaiFTXwb_ -t3S?#go&Mw{EMK2bTxljCiNLKF=0vI?Y#kJ)Q1W*>bU`p8u#$i&fUC+5BmS_osDHr^{)XE#2aXU2~(; -D!sd3W-r>;iGIvi^_83V@rq4cW!c<GnpU6k`|gdOtMy$#pz~kdT`$V!1-#^oVanX;=*ExJWtI7tn)i; -@yL*Fy-N4hWQ|g&&2Zpzu_V19TWzXnErfOEKU4YAK(!KuF*`D1vo!jAR5RtFiH=)w|Psd!?_$|6p|I} -SzID!51g=*ZSt{>}G_-tL4&1;~q*Na8-HrA?nLv8zh)?r$)XkLQr{F=_3#uJeCkf|m(&8uubt%?VA>; -AiI-Ywj$tD4~^X3ajU<^`?YCV#`|Haaw~t?ovgp7&+;IWN{#t1c*dvglsLyI7_-jgc<2jdqviI-4}_0 -nTR43wPUB9ybU{S92GM)oi(L->Q6@Rv_y-%T~_HdA1E(1fzvBuSL<Mb;`7=%NN}Xb3e9D>V}(FAU|GB -nwR2E+u;`tA_Bm3@f&s<hMPZSR<Fy|4rtoAW)oN!sT&tqXJ8l7vU&M;HlMVnLUf&BkE(JM)C8@4OLBe -dzPQcM1Fg(zU!6DrrBycIrEx(~s`{ZIgmpMVcwsse4R~u8goid=Tp)cAwfO1~*3a$UK1~{fw8oYea84 -hmRR_Y`tjzY6`Xy`M-aWf5imHA0@@BXCwxFqAm>-%K61U!IDY!Fo@Ke!dXY0|yi019rRo+}l(MVd<zA -w8;u)FkArta1*@#lHtnI_j8B)HX1)?;f$^SWh_(&Cqi+RSd=?7b{*@>#2|8!L;?nYz!)MNv9W&a(XhK -MtW=@{Z;`+~$r{a`i`mq=&XP<tD8{)1^y@jo6#4?(%cDNBhTIIWVh#R_1EYli<dFp!NQhg}eCU*v>=7 -jZsIgo)3#h)^05p&7aJrvE10Hw%aZEhi1iI>+#*N$Zm#|F(@$<5a$XVoJa{j%>A(&5hXml)3Doypc>K -}oq1hm>8C9k4;AO*s0{vM?vFwDTz%~R3W~W3J7g?$?cW3EI;NXut73g~JDsO>Iu!BiqF4@I>Iiepy`c -sQws1Ii<}LDhle)tWi)E44FFX$JUWxwa^@biF9KkkhmM&-O<`w*E5aS57Ru4t_sp{CLeN#Oq?>H8M9b -2eA^k5xCJeQ%3uJ+U)_+CN3QRnHqrlWwa>`h1OUF)&-9r8`@H)%@Vl?c!C=C+L5<BOk9E?8^4JJK?5G -Ve*v>e`Xz?%qDl8<?tdLW4HfGfY?MU6VrJT)aLxzMMK;zUl1#H%GZnMEyux;)-G0ruv8Rhx5mM`NbAu -yGy%&fMAdk!bj)t0l<sgF<kQxH}tJyqv=0x`UuC|H}x&eUgYH_HJy{F07O@)z;5*Gw_5%22b}D_MZbP -`yx0C)716IpQRw>dA>&f0J%-nhT~wu6{q4W@(vJ_GBz-*ihwr|#<{O$U3k4{qu^-!bxM}D+=4uLEjsI -W*I?4&4BD&`iUHh9<u76q0g|qe57hGW?v#DB*%NyfSQs;|M)grVGlb^Ry8=8QfQ0@*FHz|Dd{_y8_zd -eWlH>QFB=}`~TgJ6mrA3Y@nvZa$PL?4f?wEt6~?A#O+mOGD0EZe7J`9MDv%YOw>O9KQH00008031s8R -&z>e++Q640CJcC04V?f0B~t=FJE?LZe(wAFJow7a%5$6FKl6MXJU11XJK+_VQy`2WMynFaCz-r>6#ox -cKxrXC<}W48<@(hrK@Diwj>w^TgzAi<3)D6q%K4at*&-=2_(z-6CjphFgwFK4C~CmVD^2R@9QVXnn%! -+I3p@f#;vFfJ8x%1Wp;Jy59lZ=DsE)t$y4Xvh`eKCc(%4aSifQU?*7`!aN~y4clI_``lA~*Pl^BA?2p -zrhNt=)wZYl-;l`+TVz72*wSVx!sDCK_=M(+Wk>N^zb<duwYK?uhpA0t#qru(%_;2C9+Tp=n{nZQc{| -EbOx2>(>Z}ok(qx~~I*>2Cl+YaA+;P@>EjxHZQaP;QoBgbyM>2Pg-?c$zV{HGmvd9hZzs&;k%Y6$=gt -~1eQYhSHCK~J9Vt>}Mf1j#={PZBuP@KXfV-9%55-WwWzhO}PN@Ux_KQ^U_`xJCN@1!+w>d7i*^4ZlD- ->1y~zG7>Vtmq;gV4ZloUcQpJ8fl2FMl1|7BzDin?0se}>WPq<}I3!>BI%!R&>J1Vl`N}uRNJuAd5tw} -C+oTgRC%+~z8TW4pOh)os0+Xxr4q1d`fbSBR^!+~RgiP!Q8YX>wNYGBQzN3#c+|}sEWLoPQ{)F@qX!u -hy+Zz3h^g-ayNgpi@e?eO7L4Qfmwr>0t=_Aze*90b`{)WI!4S!1}RiodLi>}e{Nf#uR-)nd&LC2Rgsw -aAUAGuf>y`OZf*Vy<061ToA<I4mlojgcjJ$d7Y2&}Kx_+bK*Q9nXp9r^fYWPp01jvpn_kgt4<%pQRsC -!OfI9zQ`k(f8e$@LXGWa^<pOw0p0U{}FV2F@=rW`ku^5-nhyJc>~Ty-e~QEywP_y@<!`y<c-$Z$Q!K< -@&;^>H(-Oj0sA0t^t~A54S1Tofg0ou*dTAf)8q}*AaB41c>~Tw-hd7A25gWwV1v8?Pm?#$Y4QeYkT>9 -I@&@@#lQ+<5@&=lXya5~J4LBQl12)JTutDB{eULZcT;wfS_u>rc+NnFRQ8(`EY}6g5Q#V>0)Q#2#bpt -l28=V-`jn>(y8*n!2M&H?}8?CcZH(DFi4cMS=zy@^#HmDn4X;3#>XQOVw26Y2As2i|B-T2B})Q!HUsT --(4-T207>IQ01H(-Oh0q4=(=pz$#qp?BVfDP(yq*FIqPg6G<XQFO&F-_fJDs=;$rf#4HbwiOF)Q#5Jb -T{B!y4xppJJH>OUN6qD>o!z3E~Y`<fU~J?9(AL&59;QrZos*y8*nbwU3%)asBW}2s2d|Os2i;_Q8zfr -gX&JVOz?$yR5t?8rMl5c4%LlVGO6x#>Q1*zEUFt_WK-Qd%fyN5ZlqH;Mq*GmV1v35Wj^XoEE7tj?x@? -RVPa9;Ji`Q?%#peQ=Q2!qsvDi;qHc@ZZJ}-_h6(!4M%@^9ChAUiyFF4jOLe1<Y}9RWyDik6?slW`G<5 -^b<aYa0-A<?*Uzv-#(Mc}qcH?#@c}mKc-l-c)aE{cCPUfh((Mc}qMkhYJZVPn-o@1iYqPi{A&GNdjO! -6cuJyN#|)$M}1(-V~z>gK3!me<Ww-9Ei;OQNzo)Ge6t;tVl*r*5BKH{fj4T^`kKF-$C8H_tHPscs&1J -26b0sBQ;_iN)(?r711c4LDPc2~Txf3=?#nLv=eaOm--BJ5k+e?L~Dr6Y3@mxDD#|nWnU;Zl2f8Q{9#{ -CC2R|P091R%af)=>s)C{i|TffrbOdRs@p={Xq+ici7%XAd7vdtX;IzjY07l!wxlWZ8zx|{Y=#No;>!a -8XG>H1RNXD@brY&{N8PyeKD=%Vb@RM#Cx!`H&(SaeoU5|iLfvS+7?s@?!^B^j5?@$&ni6o1G$qUH1|# -KA-8`?m0M%`wZk}O+zVoSWZI}>FD=JOtM0J<P>*lF$UYe5Ub@L1p3w2vmcL8Zimg;7uDP5>;7u1a}^i -g5L@w$O#GE8<cb@NoW8|tnn)J@3CdtJ8^>Mo$Jn`f8+_CeiF3=`ae*}QHZbr)cmq*s`r>rB)Qp3hd-o -vylpW}|L=qlf*JWj0JK6((S>T!snY((b2pLfwL<F3zx&yWNx)!vt{gh6&)})09pO6Q1g}P`4Aq#7Uac -qu1@iFaey0y3<v+g}TdPn53(2P|qUorsSz^pVZyZ#esy5wxPOrs$t@@!o=cr^U{>%sW2&zVFEal*UhR -hLC<-p+hUkl(v%*(ZU=SUtO^rsSJ_!xaxALbLfuX(OxzeI?S#4s?`-1$Dks#9PUcwGT>y1kR5!1}#EI -(m>2*6%-8||}SKX{Mr3>mV&2GvasJcsE9LP&k`Ya9<40CaYV2Y~i_Gy?DK;1mU#OFqMC#u_GnC#Frr9 -Z>O1$8^A>t=0)cc8i*q$x{J-Q}t4ZfMm_m}F<1VZuvO@~E4arYt>m^Xj?_NK<-L-7csbJ?|{)cA&ah) -Xh=dV6WmUOn8O~;A~#Eg}MRfGfec!frK(jwk5|x-4@l&qi(>(SD2J%OAe2^aT^z3VUkYWKs}rsh^~u1 -v75IgC*A7?I;WEZ;fwp&k^?x`87635-jf4$aUkJ_Dot4)!^D!N<WaZ9FhT1%ZiM%#x*en`d4@@PUHAO -GZp=rvLtoQXcRF=@OH*1@x5Y5wQMW~PqxBrqlz_cZw=NDOBv2G}Thf#~!=wP}M(g6wFmaNm^l6yPKTS -DzuX|_irgT8v>4r%<bz8h{uzzX2ZcCcdqPl%jcc{~p<Zj<ag$b^4Hm}=>VdB&4worEgUbmCtKqrQYMR -i*Y6Q5~H7u1c$d3IB#8z%Gjx-EtY>s1RZ>IS_1<EJc!iA8k-_OT_0N8L`&>vp5M_3=~Wwk|47iIrK}^ -SaBErgUPMIH7Kf>h?+9EU%kI-9U@3FmYm-0G?NxGTkuQ6%{5t)$Jrr+0toBa{n&kMtEMDvH-6eU+Lov -lhSX5w@^1PO_}a>Thf&NR5x!+PI{WsLfyPHrG>iF)0FAOftI>%bdjYvFg;Ca@wx%e@l^{vubXF>Skjb -$^HrE=!-U+ZC3{N_U>_Ud%d;g1aPhk-G4A3G6BpFY+LE(SUN@_*J6(0Nw&ZXO6N~ERQFnQ~Zk}P{hPr -i{lH8F+9s0^s-A<^Rr@8?b|AI3Mbz^|l8{sE^ir7tA8tP`L?s8D~PBlylpzfAF!-U*=B|ERXJgVD?*N -wij876>pscs8(SE}2`TXJ~R%`!}Q)D1X?>c;4*Ltks#F-&}>DO<X(o7`h1dpD&M>Mp?Rc4C-Vs2gzgs -s+_ac?^^JznhY$y1f}D4ye2Is+(t+pc5~uTUVHno5{QCUNGuL>x#M+ykn_*{;Jyrb@M7r(hU=!#l9uS -Cv{_Zi$dM{EjjeASwQNx7$#1<ZXR_5E}pspSJW;4lqgM!#ZVb0J41D&^&B_Cw{>wKy*-@0YQaf`i6u> -m*13uU(Mc}VZ8^ilXK|pVuG>-^XsIyaQMb?HK)@cT8|d7q8))ILT3{I_>8cxT=SAIsOH18=i!TmrYp< -K!2i}jLvZ!ueg$a+kEvnlIbvyC8E!1sM-Ig?^g}QgM>b6ifW-3#K3G4VN3w5K9OleA<>h@=tSg4z0m; -lXG*Uh7Dbh0a{yQL3(B@4bN)$N43d4`Ek>UN^Kd4`FFx_Mi2D(cR)C5NZFS=0?U7j>s^giqg+W1;T!l -LL1qb)yp>)a|o4Q2QlhW!sN137DcASH84XH;=gi`>?v5FgM^zbWi@+H&dbvB-2}k0UOK>I8%WM;7o57 -wj5ys*kEqJ*^V#)Jk8udGi52$k1$E!2M;vU5hj+?rvMww4cK6Azy@;zHkcc*!Q6m-FgN<n$J}}|C0WD -UIDN_@x_wf20iwI2?wv>7tb+qB)NK*ntTSINwSnoPn|Jz@MRc=HpGv20%Mm8&ehG)VK~uR74n#SMj~B -vQsGE2C6b9&ny7gX4vRJnvx_Nd<#oT3PZd|m5X6|&m1YKlvx>=&z!rUy;ZDDSn=yt%|>2`?&(akFjv@ -kc|Y@!>j4dw<HmzKFhounko(w);?iS8Xp-Md0`r&BlY@F^EBTA07+PES&L6W!^DPXWy)y1|S-UbKMLJ -MGBVKwI5p{Z)QRMcs=|-Jsn}eu+hOv#8r*b)%2@scw$d%{r}{qq;3gN*;CdR5$P3Kqso(r`4?wFd++V -8z;V2%v~{eIhotCAID#k(y||im87(6rJQ?`(i?O0{F3q{DS7*Gd@^^ashcdR$}g#?dts>CBD&M5o9CC -XtZs{60@%YVa#%&(tojmfMcqzz!Sj-oJimnZo&~^O{E}8e-DK@len~~$yOX*-mIivPFIgPbU4UQ0%Th -Wy@zu#Ia>9hU$s%!AU&3Q<%XXadFt=qpj!)*cY=Za6+`FQ_q$=tzBXgJDFLCm6GdF&T-bqQ8L*<uLqI -+Se+p-@gJxS@JzJz!5RC<z<w+Y@t-Ih1xa7qJNeo6Xk7Fg5`uFLgGVV_A#p4IKuFVU)-TzBt&iDeUf0 -o09=RMf3TvT)SRDh=e-m!xlk=ULq@>PvRuejF!$iG{i?s@utXDV<bxyP<Af)lDvNQHDvSy7N-E<@}P0 -y1f`CB`*zRonOMD?(_{g4pg^=x-F`^0IS<V-RQ)iZnXBY3tqowfnG_z>Mq~_lZv`4)jcQbW*t2>|171 -Yz{H}u9c;)+_qx-moAow$9(6l0Om^yCN^NzMOIFpFl%Bb9`&G=XI&rff$6|H6$WmI)d-W)~EmpU;t(5 -*mw<Swy5#78jrBBiAlex9#CKspLk5hW)t~7U6=AQe0oJFcHnfIZArLQk3&wiXh@5dpRp%UE{buSEcvy -zm&`VtpON|s%M#vbgF^pm<BBq`^Aeo1*Y!COSPlcMhArId8OE9S14d(oM@ETVfy9$&(F$AZTkB~Nr)n -A;+{OK)^12X)h#t(d!F?nP(rxgR{`LUWgexjA-8`X2bwSC@cBOKWr|Tj1#&R?J;7_o6d5OLMzm?$T_5 -FY`g&Jh!AgM+O$a+(Gh=1v*>RM#_r1E9%CymgvktzzdtB<ZYyM@{R?IU4l-0<S3o&#tAiblWD0`cSYT -cPTlD_N}$<tl=#Auo*Bq03<R1<bz>acFX^`AD0ycFI(f$eZzHAU_!5ii_DbE_Fd^|*s=K1@-AUaR)s3 -Drm6!02FL7a*SoXj>IKIR|c}cp}%_}eQN!@7e<G5F^)SVn(LIbT-cSYU1le$Y@8OT%JtdqLaRd-2F>g -H7j@=ogJdELC@UO~oQj(ZIf>Lw9Y)Ll{c?xb#u>ULq6Skja(3=@mj?N4=c3=<HN2h|NYo9YJa!!Y5gZ -nVxv-MXrq485Z6in<q_y3sh3>Sh@x^Y^-W)XmuhZ&BTxs_t~^cA~m@)a}zSv8ZmZ)Sc{tr(>+ByQ1#h -N!^w-rG>g#s@o%VTfA<xHmDnLj;)mGs+&XIK2^8HFtMm^9(6l8s@sWS5@^*;22-UeE9zbt>ISdvsNz5 -jy6ECS2Rm|H6bCw~>$VgJT6W}E4ln_|W}|LPUAGg}-O_1F@~sthSJb^Q)D1L~>IRxeb%S>EsBWP1Q{4 -`V13^7G3==dit?K4cw@<^Qsi~WEUr~2O-3vqA7S)};58h&!uy#{gsGD`*t3`G5&YohWDbo!Td|{3QUs --kCJk`xRd&;7^c@-v33==2CfkARsH|?i7@wKAvg`sYX>UOaao@JO=Doj|^J$J*zLfzh8ki(;H%i&WN> -gE*(T6R<NRJTv+Zt2sf=m#p*T~YUfQ@20E1nB$>6To>46QI-74b-_|0@R0L0=Rg?#6sPG^SvM^F-($w -k#NP`6?a$Mt){i&?uxr711t@9-@9keRq+hOQ*hhbO8<_*T7RW>`p(`)@ARm@u~{44*&EeX1}n9-;i%R ->KiC}A25Ys^MsKh-SUXc2_0Nyw=i@LB^)@yJy)*qE9`BFNZLCQ+zQCIo&Yl{s)~;DUw|07Tt~VMC*RE -CF4*Q$3-&6h7q3CQ_yJxtuB0newTf4s2m4At6{LpZ1v=MishbG2-2!E>`>8-De0o~d=wc5XC^V)rTZa -HymxzlNNms`sRZ##VRf#bIvIJ$i3#|Mrt-+FBM*zp^0I$qmfyC|nY{2Fex@I0#5CzBIQqrn6Xr_peNH -m1?W1Z_^E%?a9?Mq3lKJ&m>}=+ZR0G(kJlXlH_UDLPUy$k3V!TvMPC*(n7Zp`BK6gLbi@KqEBuY!8gs -?ojY_Z~-QGI=Vp3a4;QSpr$zJPQz-B!|96`s7Vf|V+_<Rhtn|zYMR68>ldhb4yU6G)I^8VQ3hQF8&UQ -YY(%MMJ2awHvmF{yDs9v-qEz$UFrrlR-H=f#C!waW2EqPFVNHVVRalE)S1GJbus>GV62bmNVI6|~Kw( -{t?Y(;M<i4nrcGswTB_P<f3ZrrSslsR+f2J@R$8`#$aa^x38pjO^qjCIDVKNTomZ-(r>=I0^)K;BfYM -HhIf~hqs4>$n^7HAMmt<F}HU}|Z$S_D(;vehP-T9mCNf~ghRqSs@e!pQZw`p*^j(ChIR3ZvI!|J8}cP -q4pK7`+~Ur7(Iu{#s#i97{_R=zxOaFuLlIbWlNY6y5FwI;0@6b*`?O-KelQh$R*4O^PYSrn$QM=#La8 -9J0Fl(wh|~oXEOztA4DoIEE$l(OVQGjKYq(v;Ib5aR?pt$-h;QaK7qlB!?9i$FS6%Kt~i5$Iw+2dQ?G -i2p#poV~W;A2!V?9CkhiGbX0GDr!W~pXM!D9SR6uEjqQYj;t-b9m)@!%k?sgoq_-(74xyu({k?+3RZ! -n~yMn}32-Fw+gTjQ1*-_K`kLn>LV^H(<PYR<;>7Nxwm(t0T3Z!f4Ulc~y(!VN<-rLIxqxbf|DJ+hot; -V9*xEsgORuiC@xGNTunsq$$>TwutH3KWa;xO9k3-G+F$6>V9mB7QUE{yR&UD`7M#d@l%Pu~eJj-#s@4 -uFXjg|+fifWp(QEATFWVo|B+R)L9CrN(_0Py09)T%|+-#IY=?t2qQFmQ|oWybe$VgKznFfN?OmHy{Ya -qra=-+XN<VaP`d)Br;bRsD|eNiq(Y`cQ-(>yzudRpi#v7>Z%z(4^Z4Bpp6Rv#R>y&{0Bg~!Y%@&OYA= -Z(lvH3K)T5O3m|=hoIJmTbr5#Ql{|UA1JxtV|8DZo?m+f5>SPjP9J)uo@E!9I;|<^;nTi;10&kGni18 -NiCYg{JZvz*R){`t~X9>6n7Tgx&9pEC~dJ=D^3tT*H>N?&YaPh>c>v$nIr3$F)cyaGZB~aJ#;{KCrps -wS^Jt!4HUB`?0m#QF0;_YJor7{STc)OT?sSbi9-Y(`}Duf`3w~P6gDj`VX?PC6=QV5cGyO@8e7J?++F -6Lh<h9HTzi}{zTAxPrwV*aIa2$Fcan187rLLD#WUn+=D$BX%wDk9YJV*aI)2z9)ef2k%y9dDxfMZBSo -Hxd1H{kS}NzK7|T!Xi}D5Zwn<1RJVJi0%g}LJidvL=OO!fvO3JE&~-|Hee?_2vk0x)!?FsfQk?sNCZ9 -%R0P;S9`F&MBD@AtiRw3eAmm2aP?Hfo3RJ|_z_<MzsEDnBh#vzQ$JR_{4JK$Hgh$xGL_7{u28W4w0;t -GwB8n#giZX8m@f1Ljw8Xfc1{g=yL}1D&4TK0uzW!N&aa>IV`y9YHEd2I>MH&bl(!|G~2N=iHH0;qpXp -t5!;)?)9L>SUb0ON?7n7)?*iij{FuK*P3ZnRXUXdom>6SMRxK#}S;4ADS{k_LwK8bGlI@kOr#6gg*1$ -QuAfMEIgN0mczE@$t6+iiq$<Zv%`Y!eay$XduK%%P>Ggp-%9N9QJ1@<Vg!N{|-Q*PcWo+0g8x{IDZE; -4yldLzXwpPyX4aS570QKw&9$HLZh@W_a6Wx=U#jWOv*+DD$g_&A_XJ*7?^wzDDV@2Ql%*HQ-HJE@j_` -)7&|&bd2|uh>=yt@6~dRm1VbR2uK<c@jGD4g$`r#N4W&%M75WyS5ReM{4p<xx+I<g9Jiv|p8=(*>>gv -E14TVNg6A4c=6cR-R2uC!OB>`%7;fIFOfB<+Ip!{{HK*gb<G#`utgiu-!M)^S~jR%bK5rAU3sTkpbhC -+<snFj|n6iQ?X-~MxeA|T^<&`@d++|=X$1{#OdG&XdELVn<>3!5|)+M}&nCT?gbl}FOSQ$R&f;K}jRK -xI@2>lvVNSS?(VX93Ea2ys0JRET3VO-3N&!f2ldDlQdRb^HQQajiftW5uAMR2krw@k>DEPcXQ`F9Vf7 -!Z3@k03|;qw?H{l*2MT#pj0G}V;a48PrC1V<k*cj9j@)Kofxd0S?wRZFzO5I_C$YlWVq5_y+-yXtliE -2XnC!7w!eRG+|Bi(o9kP9Cke*Y-rAXSy)*GY9Xz*srnfQZt*L(zA6y;{mxmiG{f*_bz4iV7zxO-c=ki -%GjQzUp;R8o+o(y`@aCBjPaJsj;ygu9<j0Si2mp6owy}y1#x7}^TKjCDfyZZh0<=*D$!C-l{KN24G{v -Y*LH~W)+?X9lg**n!A?cW<c89fy}9X%608$B2OB6>c0A$l=-DSA12CHiIbYV@n<wdnQejp)tjt?2FO* -U@jH-$w65??&%M??)d*A4VTVA4i`=pGKcWpGRLrUq)X=Uq|0W-$vg>-$%b6UmD*xzJL6{`11I{@k8T> -$B&GEHhy&c*!c1B6Y+FiyJyesw;a9k*zG5l<6k&I<%}z^a>grXTw;|oUOD3etDNx(RypGnsB*^f*sPp -!1y;`ZRXLpT#Q9CkKKXzLCnaW|e7@tBzH$kkkbJ&_)bR65TH=Z2d*u?$9{GgFEqdh=ycPM7$8x-K35J -h+&f_{<xdh8cJn9435m)Yi53qEHn`r$ZU}+A+X@F}eANg2FS1x@8$tay+L=H1iKKB!&1h%1k@`I=ni% -~xN6R!mRpnUo#Khk0QiRb@PGNG{JgaT+MVZe_Q8laO*1#Gsa^g)vOgwZC1KsV_au2@U*-V$J3s#ZXZ* -(;aeG)h6B%!Z@GwZ1}Sco@g!q-z-;euHDo6Tds@`D?(^?#54RtfPt9ji1&CaAI}ir!_3ciP4QU2h&j6 -+=)v+ZF46MBYa$`6JXimXY|D8o;9AOfu(}pf^{g=LI5}B4={a&VCblkZDD=4B{!;w@k?I0-0++d|6RJ -=YSOlpeW+Y++^BHcCoZ>|v#s9&m7%GL*uw4cf4bZl@cTfg+(y{)LP;!P8gPFJDbZ0aw>|<WAH}$1VD< -|=5#SCTCq{LhI7okhPu`&p(AH-_sROk2IZ)~VZG8c>NzI<5-&Ts>B;9V)Es}0`VgYS^12oM7l74q$0V -O$)?vw=tyS_VR0l}J=mbaNg5Ncy4g&-|&Gld}Z#!L!92#%Q)g0#HN6oRz8%@l%A9cBtaTHa;~VPbh3D -FkVGn<)fod7CK&>3Ewd1nGF2DFkVFn<)foc$+B%X?U9{1nGF2DFo?wn<)fod7CK&X?dF|1ZjDjDFo?x -n<)h8dC#N}gaDaIAqWLBlR^**WG00$u^fORg&-uzObQ{SKl_ptg3ur{DFmTGW>N@b&vBAMkb9iX6oQZ --W(q+n5Hp1!6Z2*YA?(hk5Ty1nQwTC0Z>A6$WV1O^2vT*JDFo?zn<)gLIA&4^Qg4_k1fe#}6oPcU6^0 -aoG`-Cff{+<z3PFerGld`|hM7WWHd0auQeT)Ugo(YNK%@|)zhI^iCW&<gB84Cw1~Y{)vAPwA6oM2MW( -q;bikTFG5EU~igccRNNeV$oikTFGP!u$UaIe)x<@?<C4AxeL_iSD-I@*TQoyE=FwO;rC0#Hi>1QY-O0 -0;maO7>PsLtEjW7XSdXfB^s{0001RX>c!Jc4cm4Z*nhVXkl_>WppoWVQyz<a%E*}ZEs{{Y%Xwl?VW3z -+s1i@zwfVLrM9wLOCdml2esSQmK4Rc4yk0<J*Z_VEiAEKEw^0Cmb!H>#gP@;b(H#)*p83&x%DA-V#nu -P*M8`?g8#w4q!{phh!+sv6jK7^kURMj>(OX{cL3aY_+T)&Z_vM3+3al|=se(Wtn~*6&RysZ*8Jgtt+V -RCw*2AdpnujMRC*UT`-5TSbZ_JQx_`%&p?@g+>(l=5cz?}bUs>5(sU56*zrWQR_8#!VKe-1h$9nhs>s -P}6b`DnV*;vP)ss}44{PW$Y-OABZM~>XpId=Prqn+a?4<9*JS*>iZRKou?!e-l*%HGO8e_td(bZ<+mo -_Da~jMY9<Ta&iKSgkcCZFhdnIu3WSI+la$v0QJ&@}sQldMrP|`evOx$yzh{Db{x_mY-%aYyAxCn{D!0 -*18(YKVzG8WBEDOx*5yQGnw`M0_%kB;Lq8fv|{;1)=4{-Ut*mw`DNA#lV4%77t61*zS$;UW35>^uQQq -L_ZzGe*7uui2iYNhi^<i=c@n(MWVXq7W7%QydrW5g{eCRF?C5;JTC*Mekjb(75$l5u;Kxj6=ff|V%sT -lM8>v|RgsE)zK4tsCTC*$1WqbV@8>m?Qob|!>;|nIUWAG)DSutO+Yc*ECW_!&Vf5VP?to|le<G~wUjn -(*QjefxPBJN`Ja4g41eDp&$8nJqfb;0CESYx(91|2sZ=+Tc@C9D(1BA4ynV{DVGM209g9=y?ynarxWF -_s^?E&4yj*6lP}8}V4DFzi|kTMUz26ow&N3`hH65QcGsTp$cP3yR?uFw7vT>xP|73|B3NErusMSQLg` -i(xa}Fqm!K@c#qDikI6r<5IN4)l3doEr%_K(TTOgyOYCa*x?1`uma=uO<c4bwj8z`j{1-}4F8wnF#Ni -q9LDa=io=Krk{os|hm#zxPy8?kpyjaTu;p;nM>|GWio=i%^~2b`X*gWV<}mum!(kA23JwG1Ne-ind>l -sW6o+f3a9E*k`zF#^4qFae4o7_~TP`7R7;=)sP^a+2*&GIpa&Z`4BsmO(PUVNu_1rmJi*pHvw1wp`PM -j2nA*VQuUzSsG7=5QW3^~PN$SDp(PH`A=io=jo97Z|$IE+qG9EP0YFys`6A*VPDImKbf%faE<`(Yg5Y -5XuOZY~ZN;D>?BB!{7<I1DW2;V^iX;xKy7=ZDcr863tY^ZDVJ!;D?#a~P*W8Gab2dy2!5^Z8-4&gX~G -x(q*zp;{6@EX<dHoZ>L#TpUK@68tc_F2N6@>v`wH=sC}GI-3ut^WoZr!wgd9a~R;t$6>(_3miu4sW>e -7VRSM>4x{gU92Wer9)|@#EO1zOivyjM;fK-pGH@8CwFC|qkV{w&=i_kfhZ&8`=dh4V6yk>k4nv-b!-5 -}%Z2d6FMR8d0!`U3x%O$ip3|QvlFm|s54ntm6Ka8Hs;4u15aTw1L^W_qdQ~7ZGoQ`3~d=Bg75`rIwT* -h-cn-AyaFk0v1Ft9U~A4VtBa2S2$nzx2yQ$jv0<Pz9DBlBS`4rk}X!h8vV!*j@of#-aFc(S+z=ZpCq* -7L(Sfy<aLAv~u;>wFv*{IDK}1wT9o4r9FSe2MW$#j2_EC9?hS0>0L)mrH<^bI&CdNw#kSiTNBZ^Eq81 -xrD%B<8ujIdQ;^RbKtP>oKB0wuz!n{59@Kbyj;Qz4wsor=y6zUzJx-?_D#fCSPlaK`TVeuOO(msGINP -SI9!MyM&DD-TPyQ9T{edcc}|y|OBmyawK%NhhjsE{Ee>br60ou}d`^c=mhqe}&W9Nq7M8<$epr}4Y>p -qs4$jaI>&=(I4o;O13mit@W#q%l<cICNwMiHA@x$2UG|%b0c-|Ugz%Jo%nYo1Cd<nr1&mot9oX-ynxk -Mox7W}Z@{9%E^%QSBd_p5p55~ca!<>GL*AFfT7z2q1B!g3h$qH$R8!$K}m2#1B|bOMJ3KP+%q$R+eR4 -7rT=IA+e_T{~|rd%nbO;ILjU(VlRaUDfjX!-jKsQT?#MVRQVjz+t_7xDY>#){Etb3z@f;&0(l!a(LE$ -81fAB;UYNf#T;grular$va#<qL!Li}_1>p5-VYbTVaUsnOPIo8sLRV?!4E^8YMq~$!|Xa;SPl#GCG_6 -o5d5&fVPXF89Nyy)I1G9I?{Nt8C4~1l^f(N8?(>IdK3_t}C9oexuD4deb2`2EIACRGIDc3#AD(=jj$e -@Gb9fH91X|DVIo+bpm(cUWdh1IF`7k<3aTs#0T%yGJ5+&xtCC-=7;xJ0g<A;Uy)(Y^$digL~PxW52UM -_*sQ~7ZGoQ_?2%f?}0{&1P|*2>I>=P-X*kHdQJaR?k1=B*XthqF0ch#$`8aEX4{lw87$@6!qEUKWx|2 -plfN56ACuuuE*&I4t<#IdE9WB?JzaIbTBHFl1xbm(b&I5%VP=&(05{^)!B1$R*0-aQ1V$>|CM%4h!qR ->v6acKdi^$?D@mBc>XZEmShfRf3JB#IjomU%z?v#A2vRhDCE87+0P#~<~@!Qa|waN+4-;*hjnrZt$Y} -b7i`{|z+oYmi1T4~(U|XtA(yfKurOaj;IQzV4t-Cx4*VRR(+TTK==ou6a;jVctrzS$o#DBJRz9r7VW{ -(+KMZ-n=1X|-cS70KVLpfT)`8da!;s5Z2VUT?Ieu8kB?LbVdH(a(is0~K&RZ+Q50{opWc%R)IIK5cVh -$V@*1d$B;&8m~CA$oEH;0XXPKV-+{T@dlepq-;C*%^lm&1B~*bELAFkeF8aG8EsFCW(P!|`)EcD|d>V -aW4ee^}r!<TAcbS4b|Q$Kf(_31j>))Md^k%HuH9De_^+Q{=;X95!bCVJGG=JF$!5uxkv5_5AQ0IIQP~ -A(z2n$h$F@5IBqnQ2D;c0Xf%v3CQ_4jMgQ5j{|b9?{Ppb{CmxilN^ScYrcfQVYE(h7;=ikkZ0$Iop}B -*JA;?a4_gjf4(H&oFkeELx2E-7B!R<dJPn5hKRj~|XU~_g9L~jIH~t<6J5`I}uwyxFIXv0H1>msYhap -enhtbDWxkM2h7UoN6aTt9pkRJv@^KlrhXP8UG^VZloY5lO}@Gj(VA%3`sTtaw{!}{ULXy|fSSYJYq!) -RRwhbI_jC!dXnEru5i!+NiAXnn4^h<I3-E+JqTPi=EySXky~<`~YNE-`Bi3$N4Z#S(gUSno9sA(n`jT -Vto0wZoRfrgB*LERw)sv@YRwI`lD3JS@Z#TCdaTEdwub7_DdYI$e3o{0Md!av9Us^f;XTTC*EZA7<y1 -<*?=Of^isfJ`QL5VLc8Dei*H1w!DNXe%K5S>%GPy_+f#=LM#D!n%A1$IG122j^(iBu&EptUgMZOhanr -vVZjeWURFOW<PwGWVLc8*&c)$)l^=G7*m&4t*i;M)b{MUviHC)^=}L@;i<q@$iXC45cv!%&5K9Oc7FJ -t}XRWbw!P;TVVN*G*x7u0}t6myzhfP^sLdOn6E#3}eTEq<Pu)tw-l8eJm?1wontsk}=Hk8AVO`ScQ{g -@7Y%zgH75q?-__Hg#<!*=#?Iv$Q^53{3d{jlY*sT?jO9-jH?!^XtJm=TwY!x$zT50@Pe#~5aZv6w~R7 -u606iw|228-d|MW=mw-VFANM#KQuHg?L!Nuqk#}XST$w<KZ&xupWj5JDiPSC!Q_A4w$vWmcvWU;Sy&{ -XmME24uje=drVh=9oC8^bnLL+V>*GudLKn9(GENDBJk|USPokbTMkEku+^LMy~Tmn^X4!b=i_kpN0AE -PaJC-?=;qB~V`2#>ev5-2f?dsFn@d;@Px_E^3BeCTHZ&fFJWVcP1c#yKdy7MuwkB}6kX%CRZMxVFv$3 -|bB`k(5hNC{pjU|eRhYNX1ht@NCN~eY4B4!VxXH)HPEw;mKRCl)>wj4H@!*;fWojv?pI9%qp=>!hzy~ -UCJZMymd!)*Ah9kv)Y6~mCHTH`0%4wv{cT_G6Ovco0LmdKtwy!<cI32XcStkb+qH(6?p50rJo7Q?1u* -z{Cl=5AOol@KsI<5WVxaQ2t!wA`>>DpBTS39Ti5CLcuNLt-&(F>Em$^-=Bzk!J6PwO--Sa>F`v)`Sm) -W``2l9|$ee4Htr8y}1&TRDu_8QwhsqQ#mZ85|HhOnk#b(hoR1QX$i<>gu{?ac%`{H!7!`R+F^@fQ!%W -!!q4odtQl^HwZ2QIh2hestj#_gF4GPR3&2k>%<7Rb>{<+443oTDQi&qma3NFHvfZ$NVc`vqSz|cc4GZ -CLc^EeS4UU+@Y|pJ7wj4H<!-d#ktto3oq{Dg(4-4Nz%C^J8l(iD)N<iLiD@*8o4@pQR1Uno*rDMBjIc -zy>Du<WK4-2t`z+tU7n$dMWKaAE%4&#xYi3_di`C;KR&1L#wz3<XZ79QsNVmWL%ykHzIF&^Fx9L`=@L -h!>2$YJzh>Iy&gIG11>wH&q_HkHGAxda@Y{SZf`?Aa38?{H*u80r)p20~}}Ar2vzK<lX%fRAUbvED6* -Er(6zFvyy3)|&7^B(%;oYpsZU7+sg}Ar3tbYdxpa^21OUDIeDJ!;nkhuoJ&b$GWi`wj4H<!;oh;dsvv -ZCU6*XlEb)rO!b^DJC~UKb2=1b;ycZH9M*eIS0abq$x>^)z2&gw@Gj)AkV^=DxWtu*wdPBpk9n^xv54 -~}1V5}dU!o8W$FFhRupG7=-qjoy{IIYBJX+`S!+N;{wm6L+E-{zL_QTn^gdraY73NDoo@*}g(8|i*@c -4#@@}7+~|GwUazg9VSp*!fF8~TH-%J4#WSXt|>RW|y=ihsGcHLUbDD#Jmyx6#`;Um5zBhta<eckobmF -z9v9``<a`4=)WiA~~#b>&nHm{q@Q%o0m4u4KH<vz5d3n)NSA2iuyh4ulH4F{mO&=!CLeW)i_l4SK84Z -!V~IHe`7cZyNP#A?e`)4sdBu#xv6&O?(W%j|CX&=53byM=ZV87?>*gd!oBDmJ$2;BU7bVUyZuz>?vtI -9rw$)ERavcUM}wg5?VdLtm@}8F)$!0cN!1yvZc=r}YAvbO#%evO*2k)sRK2m<NUDvo+Dxj=vD!+it+C -qXD%}gCXW(9)#0?Ttm7OIyRoXd{YrKmAiK)`)HtnQpyN~2#aSjGJS)D^8>?F%`Xo#J5Ql>F>lLybCL3 -WchIyA~|vPOr7*-ailhsN1WR_V|{yU8k@Hp!_fyZa^<hs!kDZmLQeZ8ufr8l7LMDrvlHsVZr_qo~6pL -RCnsG3|Fqt21p6X&%$|lGb3_?~>MJ+V7FpV%qPM){eD3`}T~liz;h(3tcM?({3e=*YO9W@jCvHG+xJT -r13iTlg8^fKpL;(JETQ*(5-_`)_R+1bf$V$rqOBYIZUH-)N`2z3e=cJXQx+Z8l9TaTXWFpy!0AOqm$B -WGL6nij~|bNq_N|%?~jN*{CNB^Y5aJslE#n6pOD6n$DfkMkH?>p7S_?C-MgJ6H6^l2H>5jAQ;&YCM4L -mTg=Mr!I!sbnMY}bYju0x9GpN!X^}D30AEr)YtQ{pyJ;klko_voqbuV`4-`+`@`Ups?IoAH1H1$zdhq -Sv$3#({TcgIKyi)hi_9Vbbd0EdR;1ZiOrExLG564}Edn(eXleUhRYsJFi$EvkY3=_%5}8d|i0(<Fr@G --z+{CMl|b2J;@$)NycVtA9yaSVEgNa4$*fFi@+%B1zfPDrtXBw;^>LQ2pPK#!sfdC5@j<XU>qw&!)d4 -jh{__Pa40vJEZZe`yWUP%V^TUAs)BGGMaSK5sTaEK#+vHUNtPEMQ6ksw6Kgu@`q`7CWWIyXBcjG)v$^ --?Z|m(VHGVJsSD7;DjGCWJ!tA+xU`Xfgs6@N9mxBksX9noho%alow<mceOO3?Hasx^VIjC}^r3}?G-+ -oxp+(mPHT)-t>Z~FSc0k?u8?@mqXkjHDbqG76Zuw1WcL|!hG^!*%05LkVXbc~OK~cwqO1=zDT^>~uuR -v7SheOBxpCR&dYa1dzx&8$rKf4}+$WO0-g~;z7XD&B!1|;t8-#+{vWOjEy(ckdNVDX##w^v_)@8UQ2| -9%Rpn`rzp<XS?03vxXnzY5t)$ge?eWbR%w(fAi=+{$d+PBi`;cCnh(xb9@CZl+qxRO^{)vb^W86ODxY -Jmh43FG5Zn!mBSqP8RqdFuuuS_%viEAwL5-vqUd(46jYP&aBZ(*7yY)XC6YYnW<(TK`-+hO<068m%Fg -=kxi)Khx#K>!}=QdnSLE2zy5Y!hsrO&oj0KJD{$vcsQeP#!8zXG*Wk|EP`UTnc?T+YKRXodI89buTym -4&w08arZTW3$2N$+75Y75zba2CHCW`w2DlhKatItACRENu~nW*j~sEO)6hMK63f+0tF3b#.Z><RQ -CzgM0KA+RY^Vp8gZ(l%tf6<q^6Ft7fl@a#~_A<HF1hO4lz;Jmr%pH@LLm^tJ6x9MPZN=`HU*vUxFJ@) -$PE=#(n}dx*s4R`gf?REbQ!)5W})Oh=8uL8+CMwYg_q^I$Gk&R)(X70&rxN<!GbjPa%d?)l;Fat6T?6 -JR)6J*^bHadmds~QXLz50b*DY1`1)WtDHv-<Mbj#RS~%Y1i7yA9v;M(A*zZXz5-E&XapZbxUO;^b!>? -4DegFds3xy1H+oWol3qts6{}(I-+&mFRL7Rygs2V@&b_xFh9!BaFxOQkq=jL62Vz)~hpoR0vBiv6@Sj -kX4{>qq2m-D$BKR4AB-o9d2+DsSqPn0`v(wxt`a?}0LR7yuT<q#Epn7rM`4Kb)3LKG-A*$;sl?l6%4M -{zjbNL(#y6)ZRb>P(O2v->p{A58E?2i2hiJw7K=N)OELsRu&+h0Ib<>0`52{HN|Na9xz!+Oy0YiR1ML -&I+%s<VzX%6?sCH)w#6{JP3)(9uEe>nf{(A45oeUF9_B*dp_F>+CVuHE61q)TcGv$YWqL*CDE7lbZYB -Dt}Q=J#lj*cYz%ue!9wAG$1|>F)XJ^V?O#fh^ihG{scsI-=(2M8XU#7E~>l%(M#P2A6m%@QIDTIeB@Y -VwQ{<*aem#u<I2!iDeP%~c)Y*nuip~&rBd20f7sdRUi4S@JlNY<>p!@)Uv;u){N!)FyK(+f_k8%5M+d -%tKdI`Ub%y;;f3W5cIv2Z}tN&Mso9wM~QSHL&xZSbaPaGZZ?6}eJ%4Y9ecfGUO-|7u}5BQyd%A!}R2i -h&S6*50+bieO!cDh^VdcDrNKU6XE>UX>ATmJZOyX%`5x@Z02>Ym_w@M!Q@@Obb<a3lCh@MQ2*@O1D@@ -NDqY;Ag>e!Slfj!Ow#igO`GrgI9uAgV%!BgExXVgSUdWgLi^=gZF~>gAalagO7rbgI@-}3O)%w4SpSb -7JMFj5queZ6?`3h6Z~d$b@YSL!=oRLu8kfUT_62u^yuiZ(G#N|k8Xs+b?eH?ou^NBS}m{LY1(+(#@iJ -eZ`*j=#@kG@@iu8T-nQ}fShDf<UK?*08*iVv+=Amt-QHWUJgNJ83!W!+gKyQKCw)w-4n1jPS|0SIlW8 -@eC#_7Y2|ej$S}o{FGt+8APu1Ino~jpCv!1FKS6w|-FRr|Ls$N`u^;EqW|9Z0CHpai6thbHvuP5tmWB -lvMdfOQPda~X&#=oAdw~g`llJ&MR{$8@)Hpbse*4xJTd&zp+7=JHSFUH?X)r;}>QuSi|y;Qvze=k+<# -P6r-of!T+X?XnLK^cp76)K)P<jBM0Cr61u{M&~=ggk>peBb}z;X=WQIE&hiNyI1lB_3t8vL0pFK->o6 -W6=iUk!l0+v1kMFr4Ph!3SIT%@UV;hs*C+i%`p782fn*F3jbeFO9KQH00008031s8R$MqzrP>w%0F-| -L044wc0B~t=FJE?LZe(wAFJow7a%5$6FKl6MXJ}<&a%FdIZ)9a`E^vA6o!OV%#(Blx=db8cNhl=}jY9 -8CCW*LMbj-yer7#QQPLl(X9Syt3Jx!7HL^+I-lV@wOwaeNiD>;cI@3AePGd?FTekb1fml%cqF7Tm<Qo -7UyG|*G?BJr|Vjjsy$;m$=B`pN0!dShp_b7b&zFy5L>k6gJnoNfiPBfFR7|Lq2|o$2IqFl~&k?@Xq%# -)Z-N>UMDK_AEFa{q==lc4o2_Y;SBl&}bfQd}FdZnvI?gqCfdZ8>dH41>3iy{})FaPmH(mC+}$EY;biL -x7#>%^4R&47YC;wJ^R?;%()XMPd7FjdmD}DryaH1Ycw8c93CEy1&H3ms@jQEF;}lJRV3<Gs<!+@4OqX -;L>)1;bF|^l)orG>5_Qb_?I%YzVQodycFNkOpSH`?wBH%4B5ivkRhzBk(=Oc_dh7$+$zSaMi1pn|<zK -RH(u3ar73-v%%Ad2=>EPe}gtbmPx%(;mNRi5)u}+$)%nq=be&pRBGr5z>KVdTK`=_bwvm^N#Yn_hC-J -i3O^;7v5tdn%8?((5Z<?vrwm1*DMv#FdONcf#pWnDbSJ}@2D@cC30Y3bn$>^PFsA$*bbk+%IVQ`55~{ -2uF>$uF_itdo~n>r{P(HD-0c${I8IH8x7A`Z{aOx_*PrOIqQZ>;u#DCj36@gB|o+OlA}CHj`N=@36kv -P`}Gsv-x_DwN6jf@O>t;YCd3{bklM^Ol8)`N33xQvhWA&3QHS*%+7?g^m}*M8PZM(ckd3HvR0S1XVcK -?u=Z>o+CA2ujcv<g?Wxjd9*+OhNtn$z+)mps#B6VAW{X^Ad%4UOxy%-h*$0u?xb_^gi)J=jSC-k37h* -Q#rI?-QB{N%q*^Ib)W_tzs?0ja6TxR=AGuv~_UKeINpZ(>T4RuX?c5%#3*jWvqE#bO%A6pH5w!bv9O| -p@EpPiqL_)Gh2;h23enGMx3yLe{f{#Y|+`>SEL#OU6A6xA}@U)pDT20lBV*(N@Fd1h;Uws6dL%#KyZ> -^1k<2~(H!*@?a&vlCrmb_dMnyfpOL`ONlnne7|+?EGvb-)DQd%+Ak7gbijppY51ER~@q*vln8vEuY;2 -vl$ufFuSNcdwFKNXONEB^yBhu$87pBXZDJ+5edP)`xsaeW-p&-JD=^CO&{odwqrImuDj1p){QXQwbSI -<dNxvpbt8`1j@k6%nC+NNKlSn1$umgCH9PCGi(<B0pY51E|8dNA%%)Ci;j<IQFUahqy~6Ay&t?QGlG* -vsAj{oTW8$;jT0h6^qz}hz$85A-ozLzhKAW+sDtUIk&-M(Moxj#EpV^-C*^b#b4##ZA?D(gGYyFyu&s -L~pWh<m-fNjqJ+eIz+%g46wuw7+r`?=W0vJVB@kQHo0US#PAR0Z3R6>LLRunjqjZIrSYw$Vox+fWz6H -a>8v?dy;gY(p+$TMb$-^vV&a3%zm#YC+rAEn!>IXYW4v=-(5S4{gr?+MWTlJp-?80&UNE?R9}RF0-=M -`)QzU!)u#CJKt*?K^u(~XhU8K+LiIzM$k6&+AD&##LV7(lvy8Wdk)$T+Vc;z6Oa@LZK$O=Z4I<FP8+f -dNan3q2kmCENIQcQ2krTUIcQfM+E5Q%s%-(<Q0oS5qj+Qup)J9&cON$#v}wW|v>mi73T?>lQDof7fpX -f(YqT?faL}Gl*a3pJumNp!vg!wsP!(uHR-g?z3vH-bXhT(?4OxLUWChxg7s|9DE6|3Vg*H?L+AyKZJc -vYV1=^4mXhU8M+GxEPw9#6DHsma{p(@aZoP{>jYD2r7#3P&p4%#$ftAaM*=bScGY3Q`gR*zV4+M3lPM -ot@jEEA7tpq=lut*joYy3=0A2a(Apc7Dk_Xw!rpAg8@n(AGF@4Yc!}cIiw0G|+~;YG`Ymww2W*W=sAw -PCGx-HgekaSn}6QcGuip%O!s`g|-!^jZTV)N6>mHXrmMRt4D0aBSz5H#3M$~ZW=+`C?0{l5VRpL6_1# -$)7Hcz=)}b%S!gE@BKbw^piL8YfSk4l+K`KYwhgCklxZ6|?fgvJ%xP;fZ6j!FGHoNLoeyozl0P$OYn- -+w(?;vXoVEtqMyp5G5!%W3AMmTyL7OJbLEAyQG-#VWh_nFh6*z4(Xrpfj?JTs@Oq*Sn4%#$fwT?%uKw -A@!__c(#h1DZw@rcptk+q6PG)^0`i${`v%%Sb4t4G-N=b%j!c7U8V<i(t}6=>VYw2Ol_7+S!RKO0WFD -$uqPk2q)>Iql@#Bm6>h(54A<(AGF@$n{#MU3xrH;Odd8K-<h|J7`;gw!EbF?z^HKv}wW|w9TMhemnxT -R&V*kL6^2pJAZRckuQvLZ}}@Q9!Xvp#V;KPZJMxELAz-LZTMRS+UP`qHj)hm+K?4!qZ0+%kQHd769w8 -hz{Q{q@F>v61yz>Q&WE-p9<kxH3yepMc0_8R?N*Oe1=`I7+WZ=E(54An6|@1rrJOc8Sqj>a7t6FY@rW -6;EjVqc_TN3Cfi@bKw<8jAMc+MQ=CmQZcaJOr?N*X$^NYbjn<i`>p$&pA25qwkk>zLF`I~Dr&^Fq}Zs -fEz&@M0@F@m;HJfeZNCLXZ@ZL@g92-=!>Bp=%Kh)0seBmAs)%%=JJqVI?l`OJn~M5GN;D$ItwdZTS69 -Wi2dema7M9}2S}E6j$x$l?*G3bP?A%!aHm8}dRc{va#NhMZ+KRE61)v&@F7FdMSMY{&|;AupDWptZtm -$cv>TXss|Ca+cXp6=p-uG8<|^%oc{sPTFUgorWXq{5EB_aLk_fT?e0C9cCjIUxwMZ%GQ_Jnnc@(+4*Z -niextA#S(1|vo%|5N@sS$&T25*PhQN*&tzw`X~Mn;+J4oc4OA``j%c>lSV^=s;Rre@&1h>@X%`3W0=L -%WuN^7hXloYyX`pRoYmL!k$Rdq)0@Z?`tqDg&vWcCavJTobVe6P^SI24FfObWkw%I0jBWN3~9kBsz%_ -{98p{;S+nnYW(O8da1BgrfN__^uQ5t^?rGTItuTS>Gvd)OhDm}qO(`&n5!vPR4<Fdfkt?TRPb8fI&rL -RLJ{)}<pw8*M+I*~!Kleip8~&lWbAUF1{96|5Yw5{`iIi-jXD(O!hv^?VAcVYb;*NXS)XcF{gt$Lv-D -ZFat`JG8BYBh`5fso7YgNwll8M!Ptpt=U+kNwo7f))+w>T@>(IRvSj!=rN?(7WN`H))W|y<nM;8*v1- -7I3iMLvlGifn<lJcYe!a)j;z&szjb;HS(QXv<Fqwvw9OtvR%PwTsvbk?){dm{2s?uuv}wY=M5JB$$B< -Uy5wu>)X+vIhJOaSjciNhGq;zQKJ8jJt_Ub%_)I{1Erww@_Xy<QXFZeN}EvKC@n|-chHqF;MM%o&qZ6 -(q^uuDf=r0pVYnuHP}?Q{n_J1HErX~Jr~-VbsSFZk0y8?9IU^^j=0%xg#Tcd(;v0Xx{CF0+FjAGpwKN -6dDxL$28uu|uun7qRP%b_#7a`wrSPVYP<#3L<T@bfomfBc(^$Hqw!LI_)C2u-iyStVG&HLp#xxcSR-4 -X8k*6(|oP!F(hbKH)gwZWFcl(I~}p|7}83jU6sd>72Cot(ny<k<e)vDuvI;V1cob{jzC`d*B|7kBT(( -X-w$d<zy3gzj@0!1em1tSYu@jdpN>GS$ZkkYq@C_yXEW!RP4iWcMcU42ud~tC>|n2WIHEDy8fI7AXjd -%J_R}rwY>phXX~I^uh20tLGL3frdOsthje{%T%ONXnv^6_xG)CLX&Kk(28SRR#9TDjwZT1fwv}wZJW5 -{}LhjdQ6qE5S>k@l*bcA_iLPQU(ujk<$2O<2XYLt25hW@n8Vw9R(bpp#X<m9;o%Ya;EcK-<P1b`7-6c -Gj4!9nm=L;`Xo?3~gJ_A=7w-4X=YXP1u)k+E(Hbz|ZYrrz)!sZH?2`#3MGKUGY8aW-lJ8=^pkKLEBFs -M6z*o(54AnRXpM{?d39Uw6*_@zE(1Av|eUwjZvnJJ_^`cqsg?<x?Y(!dag)3qI25mH;u6YbI_&<TgTN -SX7LDG*DKT3yy8#ew2OPiU$x^A&5K7?kZC)ooeOPErY(nN@4k_7(54An6||kxuBy|9x|q|3T+L1FP)l -^$kjvY|u5sFET<Nc2*Tp00-WoOp4%#$f>*%zLd|gykoVF&@E^ZUM*@H+MulUQ4N6LQ?seyKpt4C}+h| -Gs}O;(SjPMg*0piL9Dj;luw@H_sBgLZ-ONX4ODoh5(ezj-8a!sR}QOqtD!a?Gar`XXlg`OLPmc*Km^K -;l7MJhJ}Fv>_kBW!jJrYNV~(TjM3r=7;Z~J)f{uy?I2l;?K-zqm!k+073H{(rlTwnbF3Tqd*(idnKV= -pwTWJ+C?tYHiNe2%_BC_ky=1oW3<!Pva;iJ%%=IWw}~BcWy6sJydSdkwIfD}cE$HY9t39VHnE$ABc_S -A#%MQ_P3+ktstC131*olk4q2qr28Z3^5vp>%UOj@=rM-FteU!IMTl4A>bh6YkZM0ry@rco@M{GH5Q)( -x=;<OpHl`k6;2Gkb0)E2qa7P-_GOM7jROKm@w+I}vzg`;-;s13E6n`<DKw&V}0``()PNB_Mwkn2e8Ry -U=#@+AoQ)E1>uJKt*y18R$0Y70m0b)k0tKK9bRwr0(r#%n{amDfh=%6e@JTOw;h?M_PV1N1Ej`P6m^N -e!uOBOx*I+E5Gd+7+jEb-cEXge2c<L#;No+r5<9?(M9O+V!J0RJSS8JRyNvH)=z+pOCDG+R0PL1--VH -Qd`*-S#Cm-Pi>Q@k;^9}j@mV(cD~oPL2Vle$vSy$O+sRY+GYuf5w)w7kXTr({mjP31JP*_9qSY0t>DS -gIM`}jxi*{*ugrq!Zew<BIBRT;wi@HftP$KA?amsbabq?ej>e<$)y6EiHH-g!bgCR5PN$>c)!-}VgV~ -MgIF_S{+r54L@?^X5;LeTlmD!EqY&01^MBPq;-MHV&!S+OUHfh|POt<2HC<mkQNTVPBA)2D&lksdCb( -0>NJnrN8Q{&8VXGb2;<HO6_!GpUG9o@M2wX-MAUA!<5QE`J)Cy$*!d2w+3)T8GIkDnWyJAdNj`Nn2rF -CGOsFzq(5>=BklRuyyA&#L}hZD!TxTy165)?968)%INNWYx}G?Pk^PT<vAm-dyc-mF`3$F0Dl(-S&i1 -*=3TI(&&~PzhyJ&g6@VwDUEK)LaFUZlC#AL3~;tOK_e`(<p~;M(a*{>#(sA41P!vEtx?b@``H==4YQw -}KSAT{XR8!6(0;Z`(I;7{l8lb8R7s=lD^=2H`%0DMfSO8`G~P|6N*eEGTqP}EYmnAt+V7FpV%j0n+Dv -<Zv<}mLpR_L1{(!U|)BcdOeySZhd?+!ANxKK>S`kcph%{cuACboE_+!#|9S@Vn>v)7TUdIvAcpYCMEv -|!DNhfQo&onwy+aA;CG;Ir}(K*`onFb0pnMP-4yTvp*HRD};(CEBucbG;eWxLBXIwRYBK8}*c=Hu|65 -PSH1{3&UCJ~m0?^YLe-@%i|3()fJ*1!++oo&H>Ul%%MPKHb5NkrY+YrB=sDii+sb{p<uuQ4M`6^(28Z -DxpXJ@T(+674*Av=`oU`0{Ya~DUzb&@AT%<*GQ7KN6>-&C28_rF6cAAPFi&QJ(5n7B#)m8KSNS<{C&D -a&yo}!e~+Ydg!Jh6yL1@eAW1qnpAO@%NQ(;Sb>`A}lA;2-)an9BQ2`yQ{Be@x@q2WzPmm@Jgh%cEnzX -2Z9>M-1NzzUU(*A}tX_P%G^l$0@BTbN?vi^=Veir>bY5Xj@bcsZM8vO%l{51L|Y5cMtkj5|Te<Urcqn -*tO`%xWTDuW>0kILv|b3@@pWpuK?e+n-uqeX*<Tb&n`(WR-tea@3}LH%8YCMSbF_8PRP3LNkVT09#xe -E$S7Dx*&gpMn<E(WVdHh9(Q4e|sHw`KS=wx05@+EQBtT3ACt?4)wPKP5!zfsFH6%j4Ekoe=8R9j^CmK -+=UiZ(xMNB50Ur!4z;@hO<vj5-_y{dLb`NH-h?lS3hC3eaSK{hNS6w}4Nd+|;ZehHL*ysc9z=d-{WC; -<YCQvypIiR|k>4{e-Rffc<vl&>d#>Mm_P-!Y<kGcwb}|mgR!QjM61sQiRk$sA#dy@m|2+>?UNbm3?%j -D4a#UPPO=5(+t+#tn--0U3^E!~<hAayN1b+J;P-TT)(#I!|<qgH_tCh(5L~<BEheebH5=PU;@qJ#XgA -w29MN?Jf+!1-0DkqOP!_=s}UNV|5;~1jq+Q~0HuRx8eYjvT%4mB#Sm5k3DP~{1k^zaURuG}<`s4qa3c -N|Rrofo0TwNb~v#izx|mB0c2d(v@STvsVBe*FrKd(`v)qOqJi(Ni1CxfALn#a_VoR8>x$ug;P515G&o -B&HH^Fo#0+aRSArz{iUQP)EE#hz{-W{<~1+oz=sc^6bZu<*Dh@SnR(KRaS?qX&)!IbO?e5=<xoBP~&? -P4bc8aP~*E4dZ1s-g|rIM#XeVm^Ac2fUP9gfPpENmC>a;D^bEajGCsIVNZ-)MG5j~gxHcT`|3HmlkA8 -7^N%tU<q5KqTOcjjIXHesr!vOz~RB0pd`v7u8(ThvNf&Cb&EUk&S@F!5^ym{E4_EV_xtZYL48B|#su7 -Z7B_OYv=6YcPCk{;wq*+db)fGRIJ)bLA)aw8XxmeNfj%|#od_&G#b7*5pvUqhAKla#zuNPp3$PLXyBX -)s#Yj)sAi4x>lMbQj|)Ee4Jr@u!d;qe;hv@KZ>a(WHq*^eLpz!0;jX^rg|jtRVLErPFBA1S0hGy?Ck= -;`!2Sbd>L@@}=9rS%DbT_u`4dLH!D9JW)_ThZ;{5s`@olNslJ=8{UB`%YsPZsxNIviz-00>c^1-CN=y -wsIo5Hzrs(TO6p@;!cU>f!r;Ne&!Ec6;6K72LX9h<8p0nzm6f%WyNMsC4J~zS<FJ8l2B{in4Xv)K%Gz -2zRgG)wt7_~<JXMw8prfVO*_UnvL;D=G_+Cxo^AII8XciGT`+o1fEsH+esfn=Jk4*?&K!}?Ccy~U;mm -tO@B=Kd4EY*GmTI{Vzd=;X+fkAu?qV$QRy$&tLJBe>VjH*F}Z$gvRD4P@gcxy8b@-2w691QQ<5T#dCw -k7(p-@pgG3sK&)Fca@Vl;<5zu=gRxw__4NfG7(>%MT&SUqwj!2wHrzB9ZP@zVsOwwvVC3zf&pqY@cTg -OqCM^9$dN+F(*JT@|^3izjzXV!EA8c(K8#lQR<m<Cr+MjY&I^8##gt4W4C943}Y_@von*eVEe(iGa1( -I2D8C<cs<xWbaOP`n%vxdMD}uM{<v^^IKFygcs2UVQ^DnFaFb;D?*_BUU^3kbri1Iloz4F@%+2;UxGo -Q3lNz3W^z38v<DIvf-QF2p8Ey}DCcC5A=;>fEm8tZmcckBId68d;8$A^SJA>iwmC<Oh9n56ly!qAP_H -Ho$+u`=kwc+Jpws|Q0PWW8-eE356V))(gd*Msr%i$~GtKn<m>){*Wo8kAvx5Br>cfxnW_rmwX55f<_k -HQ~>ABUfWpN5}B<vz6WJ5Wml1QY-O00;maO7>PmV^x|58vp?Fiva*B0001RX>c!Jc4cm4Z*nhVXkl_> -WppoWVQyz=b#7;2a%o|1ZEs{{Y%Xwl?VWFz9LHJ3-|JHhGGH5Qr>c7X3IxcKBPo$qMzUfEhGnE3OB1b -TmfevoMVKQ8^Ct%a@o@-=;}9GI!6zid$H4*P@M34@mA{2P30>XwR96qTaX+c)o}QWBH@2=ywf$6g|N7 -3Y>YA7L$G01M!@Xy=?+!*g<Nar@-|X-23?|PUT+{z|FqrJ^kFO2(8^has<NZnF%5ZdJckt}}$>4PO*H -;FUi{qWa?y+N!HG&h3=f?-b$?)zV{F6G-xG=mm*u5YAzdX^nI@+Z_i4%>j!Hs^@?%27jTW3#QK7VR!` -@*TMv)dOhoq6s;<7DH(u}1i#x+fYB8jZ&qkDq!x5=azJ&8y9@R~f6%CTgo`)zePf)`^CS)ia42DBJcq -r-!89Pdh#IY!7Fh9=f*eIY&*}o_G2UY}?N`ZQHi(XPw_Bt$M*}o78sEQIp!XoE|#1?IlM|e%teo8d&w -R({G|)anz1gUvO$me%n>2-(++?=d^8E^>-ar*?vFooOyfV`-v!%Zm&5_+g82qv`r3o$5Cz5fzv@!!^= -+7<Qlo*v`wy&n~B=9;?QZDbnt~lO%Cf;A|@wi*ExXXG~9NE){3J<Om360^ZS#3zvuKSth(=<1be6l&K -bAj#OXB|!aGi{$q3wa%1TDyp3}B%kM_Q!hW!Sy`bFoslHWFc%^8HI?PB_6=l40Szv6U~4A1mUNA4x^* -PTv8BERLxK_b8H9JX^L?>KTRk>7Pj)am<&&X_u_-*;rE?+=_#WFmj)w06q*$Qi2SPMW>p6rY@g*?Y14 ->Qm8wG+iIe!&QS=d4pI&5Gx2`0YNMvhy?_(WPn&g5K9PR0YNMwh!q5}fFPC-#1ev7dV^R%5DNri1wkw -zhy?_(Kp+kvhy?_(fFKqK#410C1p={zAQlM30)bdT5X<}^76`-wf;fO677)Y&f>=Tj3l4}$&Ie+W=Ri -#I9EeGt12M^SAXXT}B+r4EI++78$#Wnkc@D%R&w-faIS@+>Vv^G!)*O8>k5QEj;le?T9We*Q{*IUfV( -f?o!x2jch_NH)fLJgbu`Ch9*b#F;%y7hF$siUG#1erx$PZ%di2Xq<ivw|yj+lPs9EeHw0`U?Yaf?9g0 -Fg|{Qd(S$4&#DW3hRddA42XR4;*cZgY6U34MVqZtBRu9BQI^rThT%;q$Al7VrFptLa9kG8#%!wvA -8L@&O=48a!5mzB2h9H&@#1ev7LJ)gr#DT9PhS7vXATA~&W<(PTfmkv?TyjR70b(+RULekJ#2FwiG9%6 -aae<DwWiw(2g4rMz3`Z=yLClFJI3V_qCa@#MAm%t?;q8by(L|XUv0{LD<ul@99I<~ifkC{8jCctk<~d ->>h$(0;FC*5xdoYi?@+a&3qlxN*7(3!}qY0JY5tj<$rAHH+1!7egh$|mWWPrFj(S%*T=74Q6Am%vYqE -<}^2x7qiF<v#nnXD@}BldR0!AgO+7)LB~gE(M-SbBoEsEincm`vduh)G^Ph%;7AWPq4jFCWC%5eL>0I -|wV%5p$vmjw7z_I%19^_FpxD9kGBQE^{5RfFQ=vgn}T38L`L@V&9BdA`lmo5i1B{0YQv2Voo$67vP8& -5>4<xTx3RE{;CO0s|WM2$_6pci2b7pjw4>RXaYN8QK}=xAg-f{Qddogr90w^XT(K1;tUW|CtewG28em -lM4LeDV5uq@F$cuut|P`EUbW?Gt2J2%9dY0ZVn#Fp9r5xrVvZx`L=#13#KgJEzR<w~F}3yqu_n-ic>q --f#6?9D7{r`tqFfM{x_oW5))BALs)^-0;ss>H3jy&G95D~X85wa#G?9@Jv!aQ>zFFs>W-%{x;K{mmcE -tV}ak-8df|xT|hcn_bLG0^@aWs+N5pUdNUFAVsomZSQKukt?4#f7&ItMC?am1=rM_k>E*dN6Hj+n80t -)NvCr8?q5GGgy&!q*YwXo3UcO<2BGB#3#Fb-ZYzLm+nWQI$9AiUM){X5Ie-V*gbW5`kDk5K9PR2|+9o -h$RFuj3yKUF<v#1-w{g)VhKSEGh&HAj8{!?KrA7MtFmf>TGzX;B_Otwbq*-j9mE_*EDCbO7{o<I6IER -`fkDietn+omvP4ImAH+pD;)+KT86eJZ!~x3@XMlJijyNNl;5lNue9b|^W=_`mM-zCmjuTB(z!6t=`C1 -_$W<(Q9pR8L!5K||W&4@FWuVsLk<RT{PEQp<(zXq{syXGJcd_jz(iHd?)=6A#}nqYt!M-%x$EEyn{-X -O-C{;cX`9kpKmWL<_MCV39THY0X!^BTmaZGj->L=&|mUJFMo5r`SlL{Y0IBnQN+`ie6T#JqLHivV%Ug -4nsC>x|g6Eq&Dl=M`tc05KyYE_JdFgBZW!3|CDE2x3`;BbErng5iksgBUwv;SFNWWF6(9^;adCP70o^ -vzz`nw=VY;XHk$N77)auAV(}J0AlQjF^K&gu|ObRhfRM9nXFrbj2MHMl@S-|h<THB3(1HxK%5ax6bRy -$T}SNPq^lTBtcN2m3dGnED+FTc4PtLc%m6WV#N|a3lHrJbL5v--EC|HJqRM8(>*a`B_8U6f+i@emDyi -Iz*gu*mC?oa<F?7TQfmoIYVi-+e5Hm7jwPKFAIv^&wh>hVh95F8=W`Wpp*tzjka^o%h3pxbkuz(!qBo -hL1SU?U7$YGpJ2*_apIV>QD1>~@R92Stn0&*Bf#DZanVKRX^96$~Ski!AuFis{E<S_oGqyTXkzu_Dp4 -hM+C0pxIiI2<4j<76U$91akN;dh4yki+;(oCC;V2|0{ktiy{Yco8wlYx3Qp<#Slth}gZyY7ob5Hxa}* -BE}$Q%+=vHoFxRYgdmprL97sneP66o2*h}+37kwo5JN+Z=jt$sImv{CAYQ~=-4Z~Y@jeI1`SyjU*7+7 -qkeqMxHHASeu_3lE);V_*7sNOs_6IReCTb8D3Szu^4KJEdWrCRDh~c6M2x8ww6C4o37we!S#&0;|)oc -DBR;vkO-dtS<h^ym>?dmn>zNsCtX}gIa#*SDq9I+|}#410CVKl)2u|gn*(S)}nE-0G7AjZ+eih`Kuh) -K@ph)FKb5!>B}-8-b_aNKqiIgAZ)K@o8PIb27?3`2}LtQZ_#(TF&M!z&sQD{F|Io1q4=X}gIa#)cRt6 -W$Rqo~tV+B9{3Lv2QXV@`G3+5aWorsANK{6^JtoF%QHUhByPn8HSjgZ$3k87fraAeGTHcZ4F}mlkJFc -M9fGg%3L%7lL_pI*EN|4Ac!|2nW+3+ogff97kCX~)3ye&{^2@eksri@;fNU#F`TPgx+BiNinypn6F8d -K2uGX|5oheZ#shIiG{JJjJ>sx?Dc2m1+twV`KMRS7F^9b)V*GwHOeRW<h}F^!F<wQClZo|;h<WcfXBg -s)h?vJ=!7{`)nQ*S!8pNh;4PyPnT{FP|vG<w@{90W#R}sU-YtRsLK+G}30)luWk_jG&Ga_P=3y6sARG -o8u)*Lo%YYyulZbDqpB4S1`;cJK?hbx*8D+Y&gFtHJDbMS%*-c%j6_TjL7nZvmh*PX-Co5OO`IE?-9@ -`H(GuU*3&#=%7XmpSU0IxDa68sdP%VQIgd!@26#9mKUE-b6zTXX+RrW&{&>5pn)t0>4$~A55&(TXhRr -GO>`EI$khAD=Fr-A|?(y*H_J9)3)ZY{wZ*#uArrB`GW}@5c@7&E7K6;U;@w7VMDxLGj$8$FwYQY1QV> -KYj(RI_fo1k9Jgh1Sgr$yOMR)%o5RaqF(Da#*f${Nyi~UVD<(4bUE{5osLo4uHkfd(ni|BWZEcA4Per -!-@eL*z?{fIAm|%d|JDA|i)YZX+UocVROLg{L4(Ix)L2TOAAl5$>NhW-^`&s%_T`@~0IF5J|wwd68cp -*#Ic*z7#i0xM-Iafl>Vbiweu>L9i<!0r}VfaoRBOzWT4*MJ8jo|P?mP{;!!`KkpV8T7=HHYK2HHY<2f -h#6ByZw~7bZxUXnb?RW#7pqQ8B5o&A69n%OXvL7AU16`5yTRL7_TA5AZAR};e?nGOjL8Kt{6is86f6N -)vahkOlU1)|4aIn`4VDk?X@Ai-DSc#lQoD<+f4*9cEp^Qn+uw%W9)yq?A?B_BhJ6u51y*SYbN}YiA{F -Im6@t*+g&D{b5?`cwB1AyV@K@0?V4nOSU?a91Y*3)geVQf*by^8ED?zDwrkiC3kHY<1hH665N9l2E7B -2@T!bUGuQxkqrv|ZUyNMt!)e#poSLeIk&nmsm!O4g*h*vb4sLtCQi+HO}+Kkva4>gEQ+Zx3Br}TZ-R( -{b0W8bxU(S+$_6&6ht_*z}dg4iALY!XXIVhKqs86=jF#0rvFLJ~_zVhKr%cl=S1#1fKNF-R;Si4`QVf -+Us<5=#b&B_gqaB<5rj&=LzsVgX6a2#H0062okQVTlDIv0#wcH=7WU#QxdDB0^&Nj9(&&NuDDy$#Wzo -d5**+FFl)R+MOocp)HcclHrMK62~M~HHph5asD^!I3&*Ri8&;e-XvzF#Dv`Cd*byXaXazE&KOq36H7> -9PC9`}jME9pAhGl&v4kX+RrSOIl2||z3ttlBbVB4Ou|Omih{Pg4i5Z?)<oCp4Jv?zuVowsc?5;oVV5# -Jet{{o4;E6Ym#HD&-0Z9yVVg`vBD<=dZF<d!OOgbS-^~5X^*Pgf_65F-J?x>XSiE%o?Au-1jV-nY%nC -*#6C9$t3W{?<qVg`w^Cx+>ScTQX~iEB?>42j!z-ygU9bx$YCC9zmv5?3{yfQ#4|>4dK*W~37pn6VQzi -7P;2yW@mgCzr&c_QdN>Vw_H35*IXM=j(|fiHk`m$|P~^iPwU}GFdy}6jZM#Hf=X?J+Xu&_TCIrLK1s# -hKcu_C~q@N2}xYco)ety;W3FNB=L%_C#J;OYkT+%5>xAZB&OD0B(}R@x<_7<*tD%ltbe%MurWw186<| -=uvK&SpP&#DV^8e=irspVnB)>Y@ghhZBssBrh&74hwwp*|PCCKZ5EG{p91=6q35iGyXY71mcE;%hUON -Fv47dL&m&7ajvh#YS6Dsk<?y=M)j@xb`i8)_h=k1BTx1A`)6Xz#!ndyXtB<8&ByuqG$A?XCkMSOW(k` -p_>v?j4>yNM*mo*0uDuVRB=*1_?_n8ec46Bm+BU{72OiR*MCMdJ1H#6j|oo!fg&;<)W5k{IX2-syz@j -2$Gggd~PDb}*g5B!=sWz2A1uPhz||G4{m%YbRDTov2PuypVJvd9%amrY5mzTa#G-aNn_mp4flJ4yF^B -#J-*wlGr;ZhHrK-wu#4{*gu_EQ4(i(;uR%v({2;*wy#NS+SVl2Kipk0y-AGM6Ei$9Br)8c*w+)|oVXY -g*Phse#JrrCN8&}~#4Wo|JpDz~drjiFZB1hRvyeACmQP}sPB7l=V5AcQlDMjGcB~hPNnRmO{OYk|kA+ -7Q9?sR#&fw+YXt2|`ezU*dzdjl4A2cR6`;*4baHlaEPa1=J!-Gj<IBHDx`@_+2bfYmD+?z!IK0NNz{r -&x6|Hj}`mj{zO`=dw>NATeO?Q7%R#uIyYM%O2I`jg>!^rY!_JUEE@y*Ah#>(0iFSH}B0(LdBBG@fqsq -CbSypB|4U`(Zc9q3Pp3O@C@!?C<UA1A3u<ZFlg*!ILMBy?B1>%%vBvY)jP=+vl!sojrB={Hd+&)8|fI --hScI_NB{bp1a&Q*?15Qg!U?}Ry;T_-4h}n9+_5Utg5uCVl_ysL98~@YBN?_X|)xr?X=pC)lORN#A-L -Kc4M{Ys^$icY*?#lL<0~xSD8VpoGZ<+HCjhtyD$imbEO%$%DLJMU1hpBNdug&PMQ&x>GGr*V%bZ}W{g -$(<ViEgDqW*AqpZ?3N;AwVeg32wXO*r}nt@j7DrL{eb5)w>n3}87jJBGq(u}s6tI|Bmg1IWqcn5P;n( -+>zDvi}|7%gzLUocwJ(T*Ff<!Fx?t?g*PXta)_{gTnTj`qt&>m}Op$B)PNg>c$EVeS>_Xipl=t>agW= -GO76Msw?U%4lvKPaDmx;~As5b$rTbQ61*tWG>cdhhEammD&=HW-il~bTo5~wv?k01p-GiS7)o~Xy(#v -wH(b{m(iDgkY+B*R>#rI71?sn#|fi3=i~8TGwgBC$FCdBJs&5H=AMt=Fq(Tle$!~~`S>lP={mY8Yu^s -bXr_IAJFJ3OV@!QJETY*;Ir_Gqq*f_A-w8`-rM-M7tf1LT8TpQmJ-aCv-_eufy_ALTgojT@Z~S{l&*r -pK=DnkjKK)L1N9Ui-lx^?ml@6_xXYYhZ-|VCedpA7#W;^B9yW!DyOpU*7r10pQ=D3V|@9LvBlCkbx9i -p1<jc@OUN8d7%G3{M_^kyWCWABDX-!@18qLIR*Z<|)XW2Erti8#j8_w?ACLp6@R=UzR(XEgWfdFdr1x -|h%I8_m6Z{=jJN?YwO?_jdk6qb0$I;criWhA=f4_V)BWV1}EXazfi=Ge$e4{hv<{Qs^Q~GkUrS?VHmp -Or+2?nCtN-X<-fKN*j`-OGvNslOim^{Dxa3>GKdvyCi7?o?cZV_0!&*K>Mf<OEATcNzx^x-*%DuA>TH -?^p8l>^KhmFdhF{5ygB&?B(>*Pm&oYBo=$IM^ij@Kf0wkdhPLVM6*3`V4Q(?b_ej&{!PI}BH2q;K{bs -mS?#1+gME7d?V-nrV=~WWl>*-HObe|6|-Rsavk9Npxn*(_CrGFz?pB8icTjSBdSSWpQwM{3F9==7+Dy -pkF-&j{h!}93iKTu<Rm9^U>{|m|bEYYcZ^za`^)*tZb)_wHw9g_72&vtMAH|o!*9YKwMOpSGk9aG}W_ -N*%;GCg|uUt|cQ`^S_xqY9&aD>~+yoPCc}U17&mIQto?y1<SpaAy0}^>sRPM;z_n(Xr)ygBt7dIz5uV -NwTi5YwLTP<gmV^k8hKz>+8~qefV7?>t}u2_WUNPy1uR*jIWWb3+x7S2OVwr(KUnd=ylt(uCPm^L1#) -o_hr|f?hi@U6?V<(o_&kds6bQ7?4L=E$Y+ju_CKWR`g-(HkowgYK=veE=6$m0(f3aDOo1Q&1*y8eo;l -ec)97m}AbWJOUn5nQ*E8iE(j}nnfb5y_j$S8KSJyMu9nvMPO#xjOhu<eL;)yBw@Lx%diZdl2nh)Yqn* -$}NWV)fWKTyJyeE0)WH64X1_>gXE?Glu*6zJ0vq7z}>lzjLjQZ-!!ozed$H7t&<t3$fSv}I6&ihGY#Z -QO(zhmYwjYvZ5<o#ihXwHp;jCI5s}T^!N-@IOe^#St|RKOj{XM-Q;WpOUIeqbJPaf0C+8lcwOKKO<F> -Q&Pd-AvJmoP;E2}+EXZc(jL*xuWf~*$MnZ^FKTC@=&5l;S8!x5=;1p1h*Vu0J#}VuCu)DuqP&_eNo_E -?^wmx@j*-KlXYr9$^+}_Yg)Y;`WY8n@h)AW4hEg;%e@?0{OqrpXnj1)Ix1q>_9Q`$^+Oe7rDCSa;;~> -j%^bJz=IU_$k{VP)SIa4%VZ;={SMo%h=$yDS#0;=q9NY#}ErtOhcb!B9@kG@K(u8hp*>`#pvB@SeQXH ->7YAuT%EH%W|)2o25GNYz$^o&xl{v=?cax+uF-QQAPReERpKMuia}X}ls!Le_uwBT}`mn#=x_b|v&Mo -SFMnMYe=4nYT&Q7b1Oln0}j7T^4<=nSGa3eZuJT!t^_&>MM~3>+eX^Y^2NJ9TLN`=#e?Ko$9KZbYkcf -Xlp``?dkVO46C9C)sdmTied%&NO43bOWP89l25-+VpJ7f-E<X2ri6~_T@rOsMm+i^iD6OnWS;(jM16P -BUGOau^{1%0&{SzJVqC!EQ#yUxiqNz0=x>b}g$wk7@#qaw^{JwdShLqjjf$dc<u6H%Y^3>J?~@o7MMh -@&6B5IsX!vLLSLq9oT7E!cbf)MI_$jIS#-h)tGa9NmYM=|~-;Jsb2;G?!14rR#i>i8$L|qjP^+zN|Mb -W?i8L4jKF#9J`U3dI(cv!C<%L-I4UOMyKg~rLomEq{d?%>(`lYvfUuM8#^$2)`FC!+pzYI`u4Y>)c42 -PcoeG92xUUpaVMcXT|S3*7CGZrthL2><fjozac{{;)qXf205D_GG+0-rpJQZ{P0koy-&LrhDDKtq<j7 -()Plst+Vlg#|<a<_lDQ|yW4x?gW+U&cd)&$bLx}gnO?IKgdRF-bZao!+wLD+9}c&72NNAZpL}8e&LIB -F{_ft*{<Xp6<ndF_o<8&3r_Y`{|C!HTxVUxc`O8;cxca%z_pe>w8N7Vs=I{%*c5jcyd;15IJ9oc0eQo -;X=~t$2PQN~VYx?%|o$0&NA5Pz&elY!T`qAvGvo~fxp1l{2!;{C3oxgHvyW4H`wpE>F8?nx^>nuCc>M -Xm?vb9!c+11XnP4{({U1!;KmK|%A%ChO>^-K4<<Z0qCTUeb;O&n+2u&_(6CeE{!)dSL%6Mu(#lk_0Tz -qQ^Xz3C+2q24CF<wW42-XXp1WZ<FRCB5T>;Gy0ly_=-qTJMwIb8_%dCo>sm+ey82pT+5RQZL<WalW0@ -OE+Aca3}TB_{SNyt+z+xAE(^5-X4vA9CO=xdo=!0&fT%~_GtX0eV047-X4vA9Ch1zdo=#hcMo)Jy*(Q -LRN5WtH2!Yft#umzRNx)zH2$f?JJf0XQ<-<D)A*-C?@*`lPsQG$PUD{nzC+zQdN=wGb!+MKgx^U>z2N -YhBG6R$ZD&xT@S8edgx_|)CP(;fCuUONx1EB?6@J@kob2$Mu0R}q+c0^-;kS*AQ{lIrI!T4!c7h{E_- -$uua)jS@N+uP4+sT(4;rDE@;Wvq&9DWl{>hL>KHzE9{Cu1q$H^JtU!*3FEgx^$ED*PrM<OsiMXW*YV{ -H9J*;Wwq%sqmZn{N(VPPIW5$rkJ~o@S84x4Gh0w{>qQO!)~6|-8`*+j^O)~GvIZLz5f?bO9KQH00008 -031s8R_91_uy`i`03-AP04D$d0B~t=FJE?LZe(wAFJow7a%5$6FKl6MXL5COb7^62ZEs{{Y%Xwl?VW3 -v99MOQzt6Ae*hy?B*mPA-cTX!(5?MB&pbL?32#J%)NNVH>qZwspY)es;HMRvvw!zqp1Q=rOS938}b2V -#;weq=|pD@29b#|S1pG(!jb=;@=ro$KTOSz_YUEbRL?0t59WP9sk>(ctAhgP2&Zl2%Te(2m2Yuo3CyA -SQ075{5zxO-`P>+Ep5wSMu^*7k1e%=+eqjp4&rc85pv|NG2v_r%uu;l|R^y{*on)(5tB)_2#R8s`6$9 -%>z5|LAbzO8&o-L#@X)H}FsGL#>m;3v0C9(&@*}oH=&n<m&MwC*Qkz;?yIL9&a6PU0rJB|LOD(wXU{W -_qOiKK7Ai4P}}b+$;-=!T8Wfj*0$~_`4w&Jo{~SK$%&HpHF-tJx0Kw~c5+*jwVixc+exbA&ndarR`Tb -y<JR{5s<xAXlE0vBtsUSOH90?$RLcLW$=a!UO_RGy{*v}5HTlch)>=4U(YDsY`KoqKw5`9U$=cQVx+Z -IX@*A40Mfpul*8b$TG`X+jZ)@jU`;*_%<W${NuWNFm<nL)wYWLvxwLhs{ogZjhYk%^G+8I>p8%j;JYx -W~0Cv7GFSd#}z{)r}cl>Ad|-|DD;rm5QP@N-SpPV1XmFlrya&^FeB`K5LoS}?y-a(*2<QvJ2IajG`{j -doI%`de*dbr^4Hs<!d(l&ntDXiuqqr9Puwaiu=1?RZ(q&uN!X+w*npY-l_Am?p3AL61JJ$?Dk{eL|B} -ETbEmJWxBishuTtT}IDq$F2Rz7c^PjzoQqmaMUFqeNy|A+SZ@acG6SwOND&xUG!hVi?5cgSbHEX<Hn^ -N%eb+Vdd7{dE#rn<&$zL*W!#X*GH%HAj2nNlo^fMq%eW!eGj42c88>9hxFK7{4cRho$d++Kwu~DGIF@ -lku4UXX8Oyk_56ieATgDC9GH(1u)3{-nmT_YrmT^NijT=X888<ezj2p6P+}MX@+}PMOZm6blBNWTHv2 -h*ahVPih4Yi(eV{6N}A=fi*$d++K9?Q6K+?H{}p)KRa)|PQ&Ys<JHo5n3n_iD*=JL*k2o^fOAu`=!^j -XOxj?PuIm$hey{Zb!!LXWWn{XWZD>GH%G0aYL?^ar+rJ_A!oe<M3)3w@=3HFm9iWyAvSeb{ID-%`$Gt -mT_a>mT_b2dd7{dE#pRzV;Q$2<E}Pt;jULp=K4o6ZU-vC9W`&pJ%x<h&$t&X;|_vK9L5cKoQ&IH+>VU -9+PI<4XvU2YP2+|dGwy(>#9`bHRN~0E9jGK><JMd>7%FiXw*!^nPOHbbr;u@DClf>^j*PoW<Mw0RK~P -D988^JAo^d-Ex5Kz0*D`J#NG--4jhio_cg8&h<HnIp4wVSMyjrqL|BO2pC&$gWu@lR<A=g7Cc%teV_q --M-y^I?hk7e9m#Yu;8hbT^B*Wpn~wQ=JxEaS$;rg6hz>Yx&baYMF@8+&fTxE-hj=GsJY67o11cUPej% -@_SM?kS)WKjZd8C6FhWaYK%%L`K;xDseDw?4uszt}agc8FzE21Zu5}8ylO(jl-ywaaSAn-Hb~7j2pq% -Gj4@SGy`n9tK_a`+<vHJ!Hl~}R8no+4pibWZa-8q+l(6_)-vwu;^d@_8@re{<947DKjVg650#{B+?vx -(36=OU?%6>lO%^AEpb~7|1S)YDcax|D`<~H0Za?F$?kd4iPr0iEJFbOF0`ze^jN5@q{Q9{4PzmH&MJ2 --1u9hv$y#S|4RD!L?%D5p<zc`7l$3i8J;^Y(<_ne{<KgR7qC60_6vT58nf8%7_P#Zuckb|QVILsIsH{ -^NCxPutCBjc_%?v7&Ins+tb#|?RA8Fvul#u=QqKJLXbZojS)#NI$x$;45K*8-gC;$(oXk`OB=9mXA`I -N2mBfjm}MNwskcm%3UuDR1L;WZVu^;%D3rRN~0E{fs*ZD#5<TLM1^m?j{+xA1ZMecM!(yg-U{~oOBc? -y^MR}#YqR__A%~BXWVzSaXX5W)r`BN+5vSp3dOja%(!RAxSM3$L5$mvaXXAVNXG3jZb!zAttZ#V-Jo% -MW!yOGDHkWbGVbc)B-DlODhaZ3(vfjHj9Yb;=(f{v#_eF-K~M>fdo1I|)-$^Rr%B@uQk)EuanFo#d!d -pLvr0l3cL2s6z_`6KZW!Q#WZZD*u~tqxj9U$v(*333>3}fTnO%T`1DyT>oY~2^9mWlLRu|wvt=CoJVB -B*#9nfp#BrJNm(*a>pV|A5a>w2?F9Mb`@lbJ0}cG<W!BWZd8&g`HP$P--hJ_X|r!nm76C4P+C%eb4I4 -%i$jnaAQJ(&aj+1Zq80;xO(Ys090-e#Y%EZtTP=PAcQp9m9=Ef@ItdR1#!XNf1;LgmF8%N~VBH9L604 -l{hl)CQ%9G22hD3;|^imj*PoG<DNrQGOvu=G1k?Qar>c?YUA#x1vr{D%+{=uSez^yHy-S0+;ZzcV_h8 -!aIp0_V_m&aiJx(Mp%R}3IF7CoA5>DEaU(k)E8})BZU-uXJeF}|C(|D?r55059x$cpfD2~aGoNw$p%R -C2PoX#&BIEWm?ui#C{fryIjL{AlAmjEi?wQZH{TTP;yGpt$<JKPb*~+;6PzmG(S@P~@+z5WGjC<yblM -ds?)(tFq_sY1jv1Q!Yc$^O@VAqqH4(Q0Zv2pO?Bz&=njN4J1bTDo|<Mt~~hFE~pRbRl-p6aGQq%b=fc -aY*F<TzwXp6^*&IT?$SlUnj#ZQRw28zwcg8Mhzfb{Mx`#_cFhI*eNtC$-0SN~i?#%o=x)jN4({kjFA^ -zl=K?_ar~0Fe}E5+j6SL?LZ}Py2UnbM{&~6xYf!@?K!=B+5sJ?1Y1uq;|^lnGoNug7<Yrl?LZ|C<Hpv -DVBAp0$he_SYRUV&8n>f3iLIOXkb){sY7b;IZZG3@WZc+#tXU-v<DNosvdN6wQJkE7#tnH9j5|Pa61x -cA4(QiaGV{jmmvK9c+b`qpvvF%r-d%6pevEr|P|3U+cY_(XpK;Gh#*O1>U><ihD)A~#R<{HC829W<2X -quCgBZ6X;|_sJda5|7Jz{r{aYJqbl{hl)CXE~Nycu_c8MhxQ36XI-x=I=}?&^#i>ZCGmILuv$O8ksFM -8@4y?SR^|<o_WBzjnYTjT`dx+W{TMJ@f5=kn0(@qaAQ&GH$4oGj6C0@F4}L@k0u&Su<`m9Z-8{f(@B+ -WZZsz+)ZZOevEqxT_q0V_RF}jlO{6mDHyk-j~j9{?p8GJMK|tc#kjSnBUr}mXWZC2X54b?hBNLU#tnH -^Gj0bef!x3X9EWjZALAG|{@|pRygQ8BX8{iAN3G(d1C{tK!0|KgDKPF3#@$t4z|kIqrWfE$!MGh6H{= -O+l{hkPzXdo`FmC+G>3=NP%eWmGx5Ky{8Mni@Ay3S>9T|6k;$#5ht}aei8+VY5JBV@5YsRgLlluKW$B -cXC+W~{1k|r7V%o}$IRN^phM^{M*<947D>|>mH+||bIXa|hOZ5X#B<Ayw|#;tr?yRn=8$h*V0gCyKjX -ew#aw;c&L<VZ^7*1p|<n4V<$He}1UAzQu;xz>y+$d+$IuJr*N$d+$IHhmka<=c?!d`H324Tz2FjN^t{ -i<CG%fCC0&`8Kw;d>gXm+mJ2ahHUvZ<Oz-{!Jo8z8?x!!sj5wCx9~h0w;w49l5j(g#x2kHEE%_BIADV -_rX0rYm@!qIaQl6^tQv7UjJq0fR~xruIAC?c?PJ`IHg3N!m-&4F2Xeg+;5dvMTh|*7==U83Y+cK^6SZ -(syI1cX;|`K>N8?^}<92+x%q!z|Aa1XW+hN>Z8Fv8Vo^;0Ts7*SI8*;tjfR2nCTaRVjkjMItg2T8~ZB -n}_qj5*$UU1_M(p2JQ+&H`i$hdJBb&T6<s;i%II}o=c<Mx~CiX?xmQ6-SaGH(1y%eWQe*6zM&+|jrf+ -_)VXw}WvzGVTzlq<S3pY-ilnE8b@%<90A^hjBYliK8~zWXA1<O4PbZ?KX?P9esOIe0x4?la3Knlderp -nv^&ul`L3oGKg<4vvF%TR5b2r+>2t|ehIgu888Imo_KB2tBc#Ksl;dbO*JWjca4>B!xzUQCD_UIzwz! -MC6F!SR<%j(&WXkyjeEh3d-56gtdNob88;4NQivON*@SWXA?_xdO1x^5D&f{{ktvM^oLAqDUEI;PdEX -1w#T`k>%yx0B(xi4X#DqI0+>2t|euGLvkP^RP+|>y;j-vrm;!~OoKuWxf+cBubVcd?M5=S$j!?^uQlR -=EzFX6@kT0JFd`Hgnfqj5*$UKHc@YX)>=++OS5Cr?VengM+fcK}i{GhN(%%WoW{#9`b`HUm~8ZuPxM? -ea$7j=sI%zU{aA#z9KFdI24zWN~@{tLKzd`?eq9b|l<>%O;ylxP$ZpdXbVuH3MoFG8%U@?r7YQ-K4}T -;dU&WoX6ES)yC~ZN}4oozh#p_22A;tCLM^|t2EhV-`1{J^zG=|(YGPbYfDLhUO<O$H%7RF__kkZ(vfg -Gmb=4Sr=M`MZ)?{k`gZi~Me*(VTznH-O863bx0Lu*Cg-%JBvA>sb`_#=N8?@;<MyjeVjtstw9H}L*tp -gw6lS|J>9g9s!7(N9#d!lIA$quZyp(>rqi;vwUU1*`n^MwX!aZ?N5+LCoA8-c&C4LEakhy?<zU=@dj) -dE5wL5=nQa`bC;oHa?qHoJ{5`DWd-)?ZR`#i3hYz&k%>Dxg%N`g$63IR%b?AzKYoD1KM`F8Z}Df_lpC -t!mOC9}~9=;Pb7(@^49m~7Iwz4GmZ7rPrLD;jq+?gcUK`K(Mj#sWfK)K8ZAt(m+#DwEY~COe97YiA`I -cQo!rG43FhNynN=Y(4GDWPp#mLk->v=vA5YYbk***84`VW6flc4=CUO>#dpeYvFc`1yra+3qKlnH0}j -AZfxAZVt2nOB_U9WmvIL`B|hJp3}M_szI+p8vAd&(+mUfM_~o0FSG((RM&pjgz2L?j<dbDyizXX1?&@ -AZ>^XeKjl-z3+8w?#&LD2=W2||u*t&^~+rhXU#*LkfW!${lT@NT4cQo$1)3_aT0kP|GP>G{B83L7fH3 -J6tf<m=%SECZxQ3K<p92vJCDhV=P%8_w9ijxlGhFs6MdG(Ec<k7gJao?TB?U!+T8Mh<jZqB$T-Bsda+ -(EiZf}oNh8MmKt2SFvOIH?_CH125J3vS%lcybwcgT@WnG;XN1GH!UWY24U$jEoz;V;VQqdW;)ek5!z6 -+{8D_9LDWfHW?!0?y7b`?O395N8?@;<Az$#xFL^Y+<wK$YU765fN?`MjT@?I+)!&7HymaR<A%H-#tnH -a#_jlof+|jGe>56*H0}jAZofY65DRd;7EU_)xUuU=^>I5g?n(D?JB+)@K5oAS??H^)k#ReWTdjE4_a2 -Qq8uwxwcaTxsAy!U$Ex>VP+||bI$hZS6z^P{30luN&$hiF&_Y@|T_!)PIk*;DtS4+Ez#$9dPc=nq3Of -Yt088_syj2k<N#!dh6?<#Q=C##Jc8;{ct=s+com6O%&fL?vv)r{MLN_>iw)qUJSR!;hLl{ipIlf_9t< -MvyCqcU!7`)J%T<6acw_FM8E;xoYx<Mu)&j?V-`o|JJrP)TF60Ua54kgrYp%_?bf$-Be29kWWRjXO~* -Ctr%jUF;+p_aYg$A1Y~ZIN&_aDhZHrhhW?e<Mw0Rvt!(l>lt^MabH_nx;H=e{NNwkJU{%%`sVO_>)aD --+iT}`hub@?-6z&|Tj$r$w>GzSTf@uiJG-s*&DQSr+WO}D=7rYo@bWJG`*}D=*S5FU*Deg-eR{b2<n| -`X`E9my<>J|`jn@5_p4>dQ`{dg0`qt(Ha<^N<9op~N;l`HO*;ec6t?l#lFN(*z^<Zm2|B&B2N4GY2xA -WboLleh+6#vvZv3BW_IG_)%o!uDTzw^MMrDG4DSn2gvPd|3%%&{XUSC78$$m!J&o?1P1`jJOZw+^?i( -g_gBPPbc}l*cc(+r?=~Of@Og)Kt?#?U-t(P?t@0xlp^N+AY+csrCxBZ>s%5T`|>_LLKPpu8e^~TbAOc -6s^e4O4$nSoRmBIF1Dp;g*KG3728Md<CH*?6P#c(x<sDg#0)Qyr#KmyvOLGBdGQi?l2bFrM4si;j4_d -?IW@0eBF}SbMw!SHotjZ511Vcku1VR7Ql9P9ic+5K)Qa-FyuYj{<@xSdQOfh(p(v%_w4~P2v_FyBvZm -c5wXUY!E47}c{i)RYn)YW>ThX*Xm)byS_uO|+@m#dE?e3S)N}_2GNKKF9FQlf&@t0E5<9L_U^f(@rnj -XhPQq$vjx6~*O>5}qhT^?wfyi>bvO_R52H_<eCk9Jc{g9~&tP2Qa}a}b)mHM?C+llNt}r)l!0?DjQH- -jQAXdK{9Pc0KO<E9pJ@_4sS4>DS}1)b#7|H&WBD$KOg#zaD=lHG!g*<?$Vnn)ng1EVp}DY6283OS?HL -HG!s=<!%0m)Wl1CxmRe9O1Bh0VV3)a_8zH;AB)Q?h4x;liQmG@gF<_s)Wnb2u6&OklbXmMx-wPxd#Q; -yaGu{UwLFf#Jmlk25@FyJoRC@`Mqfs8Qc5BUnCmI&?jj02)E|(Vh@vZ_{RgRuD7rG*(^8`-WVC0bMp4 -LUKPWX3MNdZinAF78=*ejRQEDQLo{aWGQWICBCqw%usfjpxGL8?+_mPOBC*$~Msp)sszer8Ls~&$`iu -!H!uTs-*tACT4{+O>yO@GY)U21tCeHoiH=7ET#FJqIgJjmnd$<vJYUt7e{m%BR;F%JZ>;pNvB7X<eKU -VZI6kiOjG1!&@m;7)h~Vjc<3;5syMN$_v~2SjmA`trJe6r#Adq_zPq4+imF#H*izkv9nE10ooCgKR;| -gXzf~UV<j>uD;yxKOyG9V28*KL>_=MwgXMXvLbIeq$jkdd_`WDCn1Vh<X?FTnz+GMWH3)7VG+Ts$iH( -LqIgtR<cYijQCyl8dB*<>qJEEEg{a?T{|!;U%dSDxZ?pe_sJ~7gzud=dK;O`mrxO4q5ifgK9q>mYUiB -UPc6tS39u&+D=pzxY`DK8xeTaEbusdLnM7-$X9)KQ+c+<n&fIJfMs)tJhcqHOo-?MN>B3||#?DJKKA| -iR|fI1TKy6@nSz6eqL$g~QJiFo06a6(>#D1H{pO9#Y}h*v(|2ml<3c;|O;@Lz!_BC_B{BHsEiaiEPvy -!LVF05%fw-iH|jYb4^u50?ehNW`1JYaxw9y!zqM02+yS_rpMeGZOLg@8e(pE<|ApIL_B0<`KcC!8a1| -{>Q5ibR!W70GuCeBM}(@Ub-L~Nl)VjZ$J}fZPgJIkpm<+%pXG(#(=-`6Ntj)ES{0{wBPzagC-s%T=kz -r6b};q&YKYPc(CCwpoxUW>eNdp6R@T~B_b8TMf){05sn3(6OjwxlK&Q(#=hTzM!A3#e+N<c+(2%6a2t -;`B?N;MG9GM^6C{HUWIWoG7Yt;m2m6v~B$OHqx{z^?Qg$$q&*H%?-1(Fs4Em69?^BL2Sb+>Xpfq7HfD -G#pnL^rbL&mcrl7+O5C~qOk6}oDO@)lf0qzq{rQQpGiF0zKSjVN!y8bsodwh`qm*a+ngZA7^b6Q%T_j -VSlwgOotD5#>JaKguE6h;koK52X>ftq=D3NJNylj}G?tAd4t**BtEQwh;+MnsAixFOgHE2}da%EEQ=* -nsAh_LZ*j~ujM{u5oN;H@;i`4lnGzUZ$cJPCVVZw3|T~(^0oXlWD#Y`*YbOiMU*LD%WpvzQKlT_w;_u -tQ;t&JnkfN@l%xCxWD#Y`QGOn>h%)6UKL=SvnR1k`Ko(J^9OY*qizquB<?E0|lpT)pyO2ec9ln<QCq< -Na4Ik{k2${?VQQnq>FC_?pchte{>ySm1ct;-G#!d)AAQ?Egjmtpk2;P$ixA!3DQOX!ctcm<eYR^CuZw -0A63ypqEN%1*|;>C?U@}Y{r@UKhynG$u72L$$+5_7P~XIc;kDdMaUa=;(D2~ngXIHczx3M0iIdI2IOz -f#1x6RAkYqMa#m2W<H%i1d?0ijs7uL>>@)hEpeUkskj1%Me9KoH*b-5q?0@HNw+L0D{vdoD@P3c+-wP -3zgn>c#Gj^2}2;E8NCKo1ctot&Kpq0wZgmp;07KZq7g{_?z{<ATrQ+!2RC3d1(Lu+a{V@BN{MB7ckmD -!T;kw1?4)aQu(kGmf+JhR^~9-19zEVV+&Z(qd0}Jt@Ri-6z_n+FyC=5J4>#_oJqet<Gu&O>T)Q|td{4 -21dx~n}#@gnEC)Y0I^64jccGlN6r7r%J)!nVtt?l!}?bVBGmk$3i(rfN(^`iLGhq2}HBPZWm9A>fE?v -+dH=hik>FKz9t@2)>JT-_G9`f&T9LBH3_UwO3AM~A~pt7|*w*4I}zhP#49AAZl;#?G+#f7doHJ+XFnx -O@1X?3wJ-*~{50*=Mr->{fO=`)u~P?DN^H*%z`eX8)VLmVGJva`u(%tJ&AGuV>%LzL|Y1`*!x7?7P|P -+4r*VXFte(n7xtxDEo2tlkBJ2&$6FqZ)U&9ewqC$`*rr4?6=ul+3!Ysqi06Xj-DG`AAM}}@zEznH%2! -{&yQXhy*T>h=u@MYMla{5?181F4;?%C$f*yVS<QdUB$0=c7<qW);iN?#9(lOXA`g!|Jo0d%MIIh`cp) -~&!<mw0;9K+!O+d2jIV4<dossP^YfdyqHqxQELS%b@FrAK$$o9Z&JIgvE+XG0Z-=mDk_5jrA7bzpMX9 -17s)z64*5BQYc{y=2eO{m1Y@LOsRz>-n`5VGufsD!-mTk%DxM7+QqUw}%$3qbxQsKmSQ+Zfc5k^zQed -*J+(4=^0t1L>!ffZ^C46MVv504jUT@CkQufS`_)8!#N(!{ws%fZ^C4=pAJU5{{kR+8j!iXcsQxb>216 -F2snVrbL0!*d8D-<qAM!Biu`rEr5)T5FzCY0AnL?NXi(PfS@2jIYY`f`WkY2${SMa=RQ$%#$x!nPZ*u -4Sat&{VJ;aSev=m<9dPCkfT4ua!Cda(E+>`_YH|mqi5?*?+@H@tCBh}6yMy9HpSTHb&+AZ$Z^_v1pgh -qhyd`71gNLL~bgReb2QLnhQ!os>gBnGj7#?8#C!i9-Lv(n~`h-pp9qJT)LMMps<4_5m;My_zCUPR9`v -bFVA}5Fr#flZeLWmC4iWR~_05vFAh)l!gN(E47dUKtRfv^xZ#&bYC9huo36fFp+BR3o2=_Q)Z1wF~|3 -Yd=kYy_%r<Q+g$gwjhzN|AY#ij*StC>1G1?oldIisYkIq!iglsYogEk5Z9RBp`N?lF+$bq$F@|7byvw -+eJ!(=5~>ikhxu?Bw%hADG8U`MM{F@c9D`$xm~0rP;M6~36tAJN`mBek&+O(U8E#HZWk#DkK08`g5!3 -PlF+zaq$DtI7byvg+eJ!(;&zdekhoo>Bp_}VDG7($MM{F<c9AmGd!7M9DHXAbl*GdAB4q)?ts*7CaJx -vEY73iDq%2stRirFfxK*Si7H$<O3lwe@DG7z!MM^^9R*|wG;Z~87NVrv`O!YOqZ$TTBi<HE{?V^H6Ht -eE;NHy%Df=Dz<MFo*(l!^+JX4pjqN;2%C0;L#sQK7&NQbbXK(hIw&K=pXLsL)L+iVEGdqNpJ9ic(R5v -I@JX(CwN<g=-G3>QB9&Uf(>w_4LkzVmIFG`|a6oB;ZA5qT7w^o5aYzBl{*TvhT>gg%;U&WZ#i}3oWwm -$i5440_>ZatjWGX#0~bXAh(Xb6(>(Ca8m)k@%s;yui)PJA;Z1nU5$n_<twN+_RB5heT{`PZ7P^IeoAq -tIWcdW#TCdKKl;F+3gnHS${>FQ^2RSb=GBC}5gT}EfxHnLLu^9chz&HpAl`@#G??-LaBv0ViFYG5Zf+ -;sjo1L=3)+p?m?snLMr^?O1?xs^V8I3JMr`251?om@V9y2WMr=U;lo?n*U<q`WJHl7WKc5M6m-^9NZQ -><rNa;bTcf1NEQi5Rd0HWKa275{oN)6@x3clFWhKz8R`JjS1iY&p#7KF7+>i{TEuv^?kqEI59M6>}O6 -cwjyWRqMX+T4+AG>fZ_T%%cBb>te&;;JLpXcku;xkj_N4P}UGmsUB51j6pN7YRgZeF!0K)#PjRh^r=F -qeomd`5Haqs>#>r5x3j>MLJPhkV5$cw*#B~;oJ^v_J?yju-PB3+JTM!aMccM^oMghu-PBZ?Z8HVcxh3 -B$TG@=n#wJF=8WEOZX7my!?|(T><!1wZS{sPb9=PW8;%Fb>J7&Qw|c{ot#hBKNIYzI*{)a-M7X;IG-> -RFP2dT4OAVBh=49AZUYqs6=#z#g+oYay51WS)epu!UX>@@v^My3J!13H$UEo~VF}lD@r2$Gp?CxYrLf -}zm2Y8u<cPrY$dlmHtk%g3c#aAk75F!DwS#PJRE<xFc4S+@RQ7TptXedGRip6L}2e?h_Mdo2wnTUIr+ -rn2WstuHOaO*SoI2XjBjkFAvNaEimUQ7Vou5A=~hZKSRMcPrSR2Aew?voLARk>xks<B<99Hn}RlYp11 -HQlOKeOi%bSAfjEZ&rQ#zBRh~&icN)-FMXY?V`GodM_=#|J1RS)zguBlNhOYq~4@O>K&=K&?5DY)H_m -dp+)K)sdphxfO;!dVqk9tugsor{PH%zw_-eI(>F67v*~-E$C(&S-wboirf=qDX4Ch6b<;QVBcthCp&z -sB8^7$$u5Ts=X4^OO1+(v)my?@~-@KgM?EF?}(QN%@v}m?|Gg>rTzhC4*D@N=0ZI+GJ?;G5SZM1&h;G -S!v_4_8G)LXxE8JEHA{l3YQSoGd+t?k<E{(cc1{6_aTcMu!h-*+(7#OVI!o?fH-`}aJUMDPA)dS*6%D -*|eCfAc&8!sDg-P0{_$C=eH>X#ciRpzQx<6bQ^s4d7~00_rkF2RNfZkl3OHoKYYio1zDtQ6R2v(FD$+ -<LVY&;2b*2B}E%JhmL2j=mO^`0e_1&aE=nSk)jWrqeK~msJQ~3xGRfJaE=nULeUCtx4##y;2b2+Orc( -I4w4BsHG|tjFJw132gy90$SVhlvWD3ZjyW4<LpaabFgwB-_L?o>Jl(?V3FlcDW>Yv*U9&5kd;cjrvFk -{KPPq_7*@<2Aq4dNq?+mIcIRiDYmWwunidhwe%u9{Dgv{+;Q<0<Ct+)j(mm*qmMUGNx#T7|P31@dJ$h -AmPY)IW!AG}~5EmD*cdTv+EsYojNbCZhx+@zvEH>v8+C0t>X*rW=&CRJlMiY!HnV55X7Yz$gJ3c00D# -!GOM0ENvl2~XI_Qlu%R_Fj>ul-tI;<yvHc#jUa<VewLTyvR}PVj^*IyKqQgywrwYHKnZp<92U8O=+`N -Fo?XQw1PooC8hchO=+`>Dl{6!uAk79HoI0LvXN3<gr>CFWeSmrlu8dG4=I%yXiA%1QlKeqcKJYLAf-w -HF>$*nKup}`|I1aVf4OQ20(FJkM4qO!+3;QD93{?PHKmP^c$uDe%~JWb5_R>b;bI35p7y5Ue~k7<8os -o2;>gjXA3lBT`0-;$BN8VuBJqgCNsCB4B5|QbBp#7?MB+k=NIW9(LX1Pf<52L{T{#q7m27xAPA}0)HV -n~eFgPkUY9L8RE7;t@Nu|-?sMn~0Bwf8+!;@nuAwao?CvH$mfNBk|DWIeP#TuR_LO>g}8gr%zmuh&L4 -DoD~YIq$6;cQfDc+CdUY%bK?Wa3Pv7u+9Mo<T61*ClZCHWglYm@6Z0Dlegl+!$)YRT{315X$B%4cA79 -WrJ#}VJB2}!PPUyngGeF5hzr2!Lx@74RLJdn4q$Ru^D9Y023;>;1<Mk4uaUs6O9gV2D@0IK?s{i^Ki2 -_6<lz?W6eU*0uFo#|Djw0$d?z7P%^<tl*gq|xdnHo(f-Xv7_MMZP60Ije>?_-iY);5T-T!M;9P^b!6= --HEx0#<u8Ib5)SehVQ>leVD{)6R5p90Gpav!zz!4#+E%krHI!8SIgeom?ZeU;P{>B?>#8XkI&SEVHD& -~T7^#uc-in-uieZhdIVlFtho9}VEH`Q4<LT>J+It$7#d)%H)brv2T#Z$zIb;}5U&tRI$EbK0NJ2+Qgc -pP)l4~`IdTdE}C24z-HKb~-da)UShd}4P2(oFSVf;@matysB5)Vtgw9!H?W5hzn1fx>u+hTvVR#;X3z -`^4J0qgS@qH#XMKd4un_1-p@cFD)HAb82;Er8`)SQ&0*q!tV&bNsI71!f&BP_#NSQgx^Ao@H@iqLYzQ -9_~VyXkOCPE;kk|+$mj^qbtFMXOL(q#pzA&1xxNftZwk-#E_A&sJlA{B^|tU_??c!7!gGBEy51O`>jU -U|XLzo!LDyTua~-*-(HoxYc=(Lw@Lb39XLN_>I-WtJJv`TO{*C_d$1e|X{*4ClT*vu0I>d7w=ig`%&v -l%Cqenc~asG`a@m$CGH@d`g9p~R@6VG*=f1^)4*Kz)hM)6$7`L{a72RQ#mr+BX8{2Q&}xsLO1G>hjt& -cD$vp6mPrKyMh&b^ZlVYhXB!<<?uqnM#`j!vUI&f#J+&je+6JJB@+i3Zv@-!<pKe1H*YdxjrzQsjWFM -9DLRo7|z3TjDg`i7N^$0a2||f4h+W#9Fc~U3Tz?~DHYg6CQ>S}iCm;qU=ztmslX<(ky3$;hN{>FHj$5 -%3T)1)Dy0IONJ&ZsHj$H*3Tz@NDHYg6R#GakiL|6tU>j6Stss(KDzFVIIzNe{mkMlyiq21h=%oUiNKQ -%xHX0Ca7uaY(xZRK`5|mPtCnYF$Kc~o0N&~G$hEnP#6)8%o?^L8HrN&We2e&(uMUGPHq!l@eO>+sD+c -cMwlv1a5QbBV?mQtd*L@cBRn(OQcFSm5}$~3q5Y^D@JbCZezH-yJ+nwwV5e-UYlO>-$rks4?&adDgG# -;;`F+iK=3ncCo#<n2C_IpQX5s?4DDh+2^GnN0QZOe)NvJcn|U@tMq#-Vv@olgU$7^v`6Xz-N9Y6NN+b -E14(}nqSG}qL}fKOfG-bn3cj6BLkL;+R(L12>T9(rJOnSpxDWS?_glc+d$w5%9s8hP)h>@6aWAK2ml; -P_EuwXtW6#p004H80RSWb003}la4%nWWo~3|axY_OVRB?;bT4dSZfA68VQFn|WMynFaCz-rYnvR$RsO -DDG01>yu$AeayI=uXc5H(#L6W%&mXUTW4PNaoyCX+Jm<N)Oi(@;E<JiUy<VJu5LP9RY%NPDiehO7Jb> -2Bs%GsyScGXPJZ2OC?*EQ93s;l3A_13A=FYWK%ZS0Nr&ThUk+S%IOKYQ!WaDQtwIeT!^{@1~1vbVo`b -F|+W-`(5YpERzGcW!Two_;VHT`>Rq+GuiVcWbnL>eOS6*15(fb`Qpr@hc<qr~F*w;`rs!_5<_Z*}2Ax -JKOZ9=DEh@(e0sYck24{=U>>oc>eNpo0qOU^X$dOM&seBhWV#+uJN$Zc&u^e=O6w38Hac@fAUed)nxd -mW_aFa_-AH#pTVDF&ASZ$JiDrirAhb~*kw)k8R4(7_8G&!IK$gL*3TQPy%|r7@HZLWW8?V}>u13Fd5g -7gG5pI6?=bvr)=!J|{}nb5d^+Em;n{$V^Q)|%HtYXg)}BxQd#rt*wSS+@Cu{zXteYO2&JWly`D*x(bu -(b?zc$0WIm7>nwdc3%pV_qWu)fZQ-(l^)F~bLJINxN$@3Q9KV#8;X`E54JjCJ!bteXyN{~d<&e*TS(G -H3n#JHxxI{dZYE{Gs?B8zvvmf3SX7H{WN&Z?R~9z`EhX`60V(llAl83}^6<*uCPT|1s;n#qgi7ZaDr^ -Hu@&JxBtWX;g8(U*me2vKVmpv3y18wY}O9{j`h!G`H(SKo2|h^&R}dUAAXu$mpv<ojM+L(*8a1seQ!1 -ohm7*rbRIIs<E=U2@zKA|uG*c=<{>8@MpTE4c)D!%4?U5*`lS1prE(&EHV=H71LDVR42U1?=ZPP1K>W -Z95<l>O_<<KBe&7M|179%lqkTa9XkU={F`sFOA9z6g=sqBR-~sUiFG&2r=ZPP1K>P@6p7=5PfcVi(K> -WZ1;z#!Z@uPh}{J;a^$9Mwb2VRW$(S1Ptz{?Rox(SFMctHG^oq+h!e?a_*HXwfB0rBIy0r7*{0^$cA5 -I^vO#E<p?@dFQtAN|Y|KbX82@uQbC#BV8^h@Z#Brnw;TD-}PwIpM@FDgMO7kB2cJel)K(@k@$dAbv^l -OT@2L{IQ51?dORfQ57V9rQ%2Pl8Rp<eo678pMdy*2gHy51L6lo79@U9Z9x2JpN9CAiXV6y;_uIRpAD0 -*{en&p+Lv>B@JIx_kM<><o@Mbq@RGcbcmv+Y^as3;_QiM~mo4b@059nDp#4If9yBk=`)FTK@Jmh)h7< -5UW<TJ4;N^H<68soWIl+(N1iX*#3-W#}!4HNk>GYs|L8k}T4R{|+TS)Mub-??;6AAwAjQBYP%N9RwOF -;a%Eyai*tL=mcel781nhO%Y(&CqhUvhfTO-aG8wfF_Wk8a9Y{9306-Io;nlEp7LJzC;NxM?hYE%9reo ->+n(cuA)RctOFhBYwb(C4S4bMEvZ^$8dTC;s<=fogRt!C5s<;L8k|JG2#at5I-KeM8uE&7fSr-rKIAI -Mf|{vIX!?25<iAnOz{IQsQA&oq~Zr&5sN>T(<2Z+;7Ta|7PI&{rRw)~1>%?Xc2g5Su6sg=Ka#~SSv|3 -cA9xyzUm*Tid%H^_{#aHI`YERP5p6{*ekrM^YQ!JM;!mykvl;O->Z}#N>t}_CU#a-<5Eb0ptr+nG4u~ -IkImM6J35Xx<tG%}?5r1OEuTAQavN<KiFA=|XZ+A(=54f1slQ^lzawHKyr$|}xD?R>L#4n}sOT>@Wc0 -!0>srUh}W;Ul}^{hDY3u*jlUefAODt;~T$Fh2W7qog(d;AjdOKJRQU**l+4$JD{R48xm){4K9#IIER6 -7koH|0t^`7V!fwwz-SuB^5vLdEy70Nb#p8eo$LQ6u&_HfU80LOz|_ytF0c_Pfh%8m^JY?7DN2ND^2{8 -$G<GaUladvte(M)_&K#j+uW^*f2D|j#W#1CMErPG(h$Ga>QNGZtb@D2YvPYU{E0n&%V9+Pyr)|6H%=t -+*NVSZ{O(>I;{aDp{4t3?@xk2=tI@`OQ4_!GXMKrZTd^S)@kctqRTF;&J^q^bSIO#Oil0$ZZS}Z*jv# -(8=V}uFswjR;b1CAlS{}c$Mw^!SrIWh?@yE*QS=Q$6ik#f7mg3J@aZW}(@v1UoRVAv*yy}V{ah0sqqb -%7V<?(CNIe{lq{K{HASZ#}~)uSbTWmV=_9>20i8}O1<nKAr=dHmXv4Y8^+YisoY4~QRlp*;R273a*@< -}Ra{W7O&aUQF?8t1_Q7;+Jam;I>qwDsyV$$2b>St0#5I2B}D!VD&7i9KV+MCB-ih|FUZJNW>pY@e9OX -t#bTrR<eOnNxX9Wv53EFR!=PAm#iL%_$8}HN&J%HPo34X9FJdX^+*S}Qd>O&@yAm9kq&UhD$=I?4h#B -OO{+&)jz6)-pE2TRlyQucyFyuJsa8)-{EcH(=hPBEZcCc7%v!~-Ez2wrzohsDt4C7&=%yg?OI8p1FIb -j2amj|nAK;RRU$T18zNF&U*6K-pa#te$IJJ6GD}Huzmr+B!te#~RX<HTImlQwnx>iql#jo}FfuD%19? -9dE6o0HQF9I*9_|g7EWc4K8++|5Ui~{0)hehK3SbMv`6Y)O!PsIC}wt`>Wl`MYgJ1m0Wmn{BR-(k@Te -oS+@y<Oq^TN3X}f?u-urSETP&u=OBc31q1yOPrr>-$^U@32VU-vS=+KJbEjyDK61Ggh&IJ?qCHej%wx ->+}Gx2=S*D{IQaHB;pqYzvT2t<@jR}zhv<%iC<ZxE!N&{tPd|LiC=PhB;uC@f26%#$?4H%bFO+)kJ9O ->)^}KPc7BUJ)5oaMwxqpXE%Bp$K>S#33s(Hvq#lX*BPI1nPLDRJ2l!$?z!i!3r7!Mk_jV<VKk)~+&`m -MoNAr?<yRn=ejHhH8zeN06i(gCp(C}5R%G_evob1_M{qL}>isE0A#jhp)idp;;@e5WDdMQc#u`GV&-m -cc-mxv#DH7Yhpd%I{~FsWxnEPlc20l_a;@!N-#h@U;9b;SnP&-xPo$=ci1W^)2xuf5$!#1Fh+Hm8)-B -Po7~_$9@^BE&CPJxe0~7W)7fe-`!GoPyO;XLC-8AMuv7dL-hP4(_6#G+$m!eSRyB;+L!*G+*$+T}kmP -t)9dlzeN18&TmPZyOPxt>-?71>d~h03m!k37bE`EHQHDjKYQk?r}(AK-Blret>RC7ehY9#6h9v7N+^D -b_+u&lYMtNGDt-*7WI2Ax>d|`qlH%7Ae`3Wi5dV@kciU`pmpxm@Ab#cMZf*6%wR)6UJ<B5g)i}7jrdC -fR#V-**+9#^fCMo_Ev3dmJ2fWzLUADK&o}qXp+5oR;8h>i1M>@9~t3+EQrzh6AU0gR!i8eGZmc}2;>5 -<a-rKBFIQV;NAY5WrJE0cO+IX&8>9&H-Gw709x<^*0cn-k1jDvf_hNj>&yA>wBb%Moe(lEp6&f2`V^X -kSq9qkTn)UlRNkBYr83Uz^PtOYkd+Ul9D-bGx|eg3oV7%I1u8eoG>LZ8oQ5@yDvvBN4yk^u$Wzk8^%Y -BL37xnP<Gu9*TI!w^H+dYQc~3m*jo)Q<C@5PeG$c;C=16U36dY_?DE#AL-mKhEr~9SL^UgypQ$)?*m` -#xm~Fk|B?j1l+zPS@Jr`*ftTcc?bfc4#jiZKo0#{zET@O9{_1V*o-~JFB7Vu?mjr*s9Dd*nJ-!8a!4A -Jf{7Z89fu~94OzrRkKM@W;@I+1z+uCKT{0NI5@7-csyOQG9CUdT9PETs5M<9MFi$Ar+uO)tE!3Lo;r* ->;sa(cAqb|X1GlHx}<X%xRyupzbLubR`NRs86u(v^Cc)x%cvF{~aX@z;C1M-zYIf(_ce-P9JpWc3J&U -$S}x;$K$51}*U`EA=eN;@4*JYZbpl{F36=mS~fRUt6$2+S?TrzmoV9@9nl3@v~LC`d?u|{}myAt<{q_ -i+{xnHUM61O=fLUk7V^EF4!PhJwg_Lti4^y>XB-5YONk^GUu|6Z^f~CQWHN*>S3#MeLa4xo`CrAEC$4 -n_K7xkmqh%4D^C1Mt4G+}jYa&xOD6RIPec5Y;*Ui9z)K$A(h|R<_@#5ZpuCmz_)}Xw>?<s66&|BDr$G -Et8vjWv*dQr>Z8d%=s|Wor*6K-3{1{I$t4B!V*IGT2#~-U;gGBtwte(VHPpoSEsk3?{k6$8w$?B1aKa -%2CmS{^%{5i|&VXN&3k6%grc!n0N_*W&3AM;a?_$9?3iTEYOAB*@So!d>E&MA5Psfk}u{1rRD6{}!_r -1+(R4Ztg&)e|S3GcobALOpC%r9Zw^C-odH_)pmJtw?G7k@j|Do!gaoKT;ZhV!<yZ^=OZ8NxZKW{F2in -?d_&MzNI|3i*71WsK>6KhmS6w^|kn`M*P4RTay`Z#Vvk8@B>bh#xD^++OKAz9^iEve@ekGI6Z(Xk;b3 -1q#m|R;wgT~>Ct9$VmNC?{921&Qv8t)?n;V3RvN!_a91M!I0tvNd%If2uO)tEr5-7pQ#!aSIX!Di{IR -k*wTgeGiQle=hmS6YV_5vkG=AWTtRD1VlK8brJ-BYcq#iBtONw84ek+#MqgDJ`;ujRZ(&~w&__Y-qw8 -UR4{xw$oN{c@=@y~dl-S%S~-$MH|ye|oU>G)RFwsvFjzE<#K9@2bhT@w6Kr5^NOX^UUl+ST$t+Amh{O -Xqgil=qh<_?5@EswMbaEQ_Dr-y@PaC8tLq{#8%r#5mXML+cXpqnm1%=2TYdiRJXfI=3qw-x7!)&1=D5 -CE{OcrzdB7yX-!uPwI)K_$A`6n&MxU#Sc7<;+JZ3O2n^K{K_o;#1_A#_<@(K&8Z}QN%7ajf2^b)>D+E -wr$<WaNqu~a5kI?M@rp9zZq?bGzmWK~m3kss{L3oQ7RlmAH^r<TE%9rQZ^g>y6iT#dEA^Z(;+KwZ#j4 -aJ9p6e@sVA}GZ?nB!c3<Kh-;xwRnpfQFNlpBc)r0nRHs>!Oex=m|_+)=}aZQOI)K>597AJmt10Fs)|J -6(5UsuJyB;wa*b5@M_CB?s<#IHTSRTF<r{L`x*vAN6A_}M(C&+197_?PAJgUA=0)uTMPD-ple>d|`qk -v4agm3mTd?#8OkDOf%A=5EvyZPlvOBYFIZYjd{PXIR*L#<O~smDN+V&0WM>@-r-w;!j+Z8LMF>6+b4Y -BGveniXU)I{2JodZtk8a#h=ac`1!mYLHxkWrE^MIJ-`cQ^`QTXTRjr-FX`Z}HmgS>eo67i%Hv1-N|b0 -zeSS;G>Zz@sb+CE>S0kNsR+O2~PrR(2SQQ)A)#H~GzeN0KUy%3(#UCr36YWc8^#CuY_#>rrO2ogUiVd -~ZQxpI6su8n#nBr&iaEt?7k<vMVui1weCE}M9zt-xBRIx!iz!l5tiBz0Z%IZl>{Aiyjol~%S>U7SU_@ -`HmsQ3pn;%D(5<1;KmsUC^=Qy<`3b>i3N@dHou85VR?4UZpivCUmHuSiypQt_jkn)qwtk3{^f*#WM(x -Y#pP(CWc$S!_Dzx+;Dx@hhz!zzbIV67ego9?9cJ^EBVzl01Gb@k?1fLOK4L_-o>yUNs)^cV-8;`1q@r -#}9nX6hH9#09ORXFA#s#6hH7ftEVRZB`N;d0WLnycpkqtt0xxmW0(~ue(3;L;&e{!=5ED^U)tPFZ1u$ -2+?5o+K>YRQ?ovOs9x0E%TEssq&dJ9UkN2hXTd|UQQae4%D$XhKex&nT+Pz)v`7J4%Q+s|(;C*FP=F~ -OXw7jn@)uYYkRDOm9-531uV%2!RuF8B2-e-EBUAX3b*G~oYzLxiudVg8xcBPyiCGSVd>Crm;v2uC@hd -*%^|ElwTtP*V}swi`dW%2VX=!svM(^J>xJUWX%aW#IaHm9~4zt-r9MEsG??E)`I{Hd$)D{FJsMVXgcn -{%a!zr&m!-V>YVdTTc&@dK~7b```AxZc{Wi67K<BDQw%Itz#&ucv_cfd|CTviR9AYT|eO)Wq+GSrdPw -CVt<2P5kbk<q<!Kydd#o10>kmWyze3Vrt@d{nW(ohFKGTqb7deeNFuCpVd+P=x0X!ubw*fn0czrl)kv -LHF{~hGumq0x-;A#-kOZ|4;qs@!%1Unyw%v*ois-G#|M+fc&9PhAC7m%JGUE?(fx`0y;+$ThWq>D;qB -4Ku8t=6_IDg?X6)d>-J84HjmP)y?cAE&8&1Z%J5Ts-cSi@V-<zZDUEA4i<CDAlTkePU);FGN4BQ{geY -&u_Gub!Y%!X#ieS!YexHR0`vje(5ytzGk{NRamr>?(nZL^y<H?Kc`{)Np8&!4}#dHu@fm8;J@d$qCAc -<92n?s}&)os%2)o6YH@Wb<e?Me}(ypQ5dKv^7QB^JsgDcIMH}6z$HV-6`6eM|)GWKacjO=zyaWAA<|6 -?ZF)n29e$La1h!p54U(1`yLEJ8+ka0?IjP-2ba+V&qtT}8P4Xz%ls5)gL&A`aXx?ZGC#@re2kf&<$ON -I%ujPZfB!N+&-r|mnV;x<KFVz1;ULPPhl42nZ0A9gezx-<$}PXXf++obw}L4Be79VbUfnf3)?(N%d92 -N_(;n+E>@kmZ8TQK_>oM$CJl1E}uX=1S!%m+$J$){ktli`OS;-jogvWRszveL>$FF;g$MK}ccpOi8jK -^`-V?2(JdCbM(N!2gb_JCo2rFNPO^UKs#iX_ah(N4}VVu2RJ{OWW^7YXxAv(sUiUzd*Z3G<7x(_@%lk -sW?N&UuX8k2Ak<27({hZ+eX1j}4FU`|(>I<M-pYJ;v|H?|97ami7Jk&U?)Mou%2GVo!U_?kzTZQ|yAr ->`qwIzqFq5n0>wV{WYHTY-!D`zNe~>d(7_R^!+39oX6}AUDLlDpZA!FW8i=Kf`{yOW8V+&cRl99@WcB -(kGU}VQ|zM0To{8XcFAKljLe5|*<&`0%n#*?r*{{I@9z^Hb7A=Ye&1s@jDhd(s>e(i)a;svOc(<{0oO -fbqsaWtc+q1vip)>wA9&10G4P}NLyy@g2L88y<S`q?!2kA-{p-j^K{NU%9^;GZPd&yL)r}h-<g4n>Jj -PempL>iy<(nSkPx)VX%mmW)WAVH^Fmd#J7@m^{CXAl{A-(;YHjK>wbc;X}N6%yQ>TBA&k@<P17hluv3 -TA!@-6qhktERv79Rf`xeLvG<!fYh8PXCfXdrvaI0$(Q31Vbxfn=pG*nm(Mn^y)X^^!(C-95B()letTn -iDux(y+@e6DKzfCBG9fbKSUA-RtEI^B0M0>#6piIi4&Jc(DdLv0^P&z=kXN+O)LW+^CwBJm{0~jl>3C -4P-tyFAj~c>nuot8kT0-@1o9R3Hw5w}_9}sVjr}cw{8e(}evcM`d({&c+_>K-`QzU8#0Lf^{o`Kt#0d -r`0p#BH^wb)>MYs(x!*%;@!Yvo{0e1+tQPPSwc$aV+Xa+IS?-6cer8R8uKH)Z8T8IW85N^ZGX4f4O?! -ui-1IbRO2J+c7(39tO;8{QP@HthG&!&eSK&K4y+4Ru#J9Us_dImK8P9fx&hXGB$RS5$Ob3n6ig+d>*G -oZ=0TA@GdoaWxig?!eWCf`Yh9FsYq$#=3L$7Bv@@||?ZF$n{jd?z3B*(ho9orGv%G6yvIPDZpaX#<*k -CnZ{#v;j@NlM}63Tr~MkQnY512H|hxZO!6^^0)D}rtx0h-5Gh*MC;qaOU$ggXyNbkpCZ%-+UgPfX@YH ->Z9+dosEe{s@IMf2g6!dXpC#1ZPy#<kppCCf=;sMF(RGkq<Ns2gS-H`|7+xdP#ujE7XHIg^;{W+auM= -#dYa_Tf2sOcVFtj%bHNkbz_Dh7C*xKm#EkaFf#6++oGb=zkn1{CsHNmyR&je*wgygsz?+|LANnGu#gq -q;mn22`?weLQl?-6QZYa_Pz3GF<ZVw^cef`C6D)Uhm~9};R)$1$+45o$u~;=Xy?F|*2~73P;^R-1G%+ -^-XAL&Md+L8ujr1b&l1`&!4+`4*u(L-N}Mn#j6gPFZF}N``BFhfw##;cEX%uzkCS=LvJGR@z~W@Z8Fk -Hb(YcLhX{oo%kN1_IV4_%W^AOdg$Rl2{o}{#=cLWjSWrzi%=`TaEE_DsErN7{UM=FxDe`n$vopJr9UF -jrX%BGKPJ?YCNB09LhX74`cp#fdJNsj+!+~IdOsu7o)p4xKO)o~d&O-#B-FkaFtYz8)Y7EC9Oy829!5 -J0QTs~pH<O_@HvhOX)ZVq(Blv&*axUFAJl>c)MMF29jL_Ulns%7+mOD*Di;qmu+$tJ+IluzVou0wNa_ -HGNw{oTv`l7ij(N8l>u4rzh3{4t&qPf*EX!!*KO=w-9uMujMC(thvYVR8Yew|Pg+5kbkL8x7lcvueKB --q7<o;~~KR=af3^IL>kDnS=tCe*~%!BoCYs0pr%Ir|EsHafI@hfot;H}r0Et5<qJ-zC((-GIJFsQpV1 -Zu0wtn&A3~&C_r0qzb6|@B@O~vc%XvB-s5mE?n7Dmm^%++~;5@6WR`a_0+t1d+EwE&t7b7G_H+zZf}p -CelQtX-}l;Ra%p#KwEej2#rnbrqsivZ@a|~iwE6i{=I5uU`<mOso!j?@w=I5WIQF3Z!RBOlb9aAhw7+ -?GxVIr2#`E25-nEzAaLq2Bzx>>EeA70Q2YcgN!|lzz-GlLD{K{x^-x}T<&9j5N+cLD^8ofLk?QISZZj -HyA+oOr~vNt|H+&&mh|L<^n@6Pb%XtHtINF<|&jP@}?$A}uEV2oZd;>0KsBRh=7FnYp>2cr~>EHE0ty -ztH2-Mq@pd)vIE%^TUge$Bhqyjjg_)Vwpz3(~v|&8yG6=gdpZyu!@;%DkP-tH``}%sa-sP|VxIyeiCl -!Mp?v;~RcAWNw(-(6r%X!@!1a4YwL1HLPhU((s`nKf`o}eGJtYUNIzM7{kzmp#t;Vn}^&y(&hm+Ppf$ -}&2wlTI`e>;hsiuS<}oqPgn0nWYBx*UtYfoi%?dTk(JVc)%*^e2;?(~GP)h>@6aWAK2ml;P_Erp3qb= -AQ004}10RSfe003}la4%nWWo~3|axY_OVRB?;bT4dSZfA6La%*XGXl-v~Wo#~RdF`F)mm9}*#lO#Afl -x^#B@$g#jg<)#Q<N;y;-YYIV#o0W<Ul0E;b4LRCD9Y*B+lZj&dKI1){$b_vAimh7s;`d<eUNZf2FHYu -eut#ebVn#SEB%qzgW7$H2PIHetmK4RpEu{<Zf$!ynk~0rP1EbWP0-E?csE1G&^~4L;uskXtqC{+!#$; -<GcHl>8y2iymxDN^wj;?=xq9*ua0IHCp)9vt*u8|$*I=!lY{YW{L(1>H+8CYVSHz_dq4eWd8&1NZ<qc -}oN8Sf-5O@E+q!oB%5&$hp4+}~=F+p<7cW2k%!StJ*5Otw{hvw?c-U$^(t7mFqnSXWcw$*idRBcZSKG -OI)_Lu~s!uz|&DCdewWF;1Ddz}Xt3K<zTgR&BoFnAtdp=jY!m6LnRhb|6Ip?_fnO$(sH$TEf=e79}E; -(vm#brnBTlINIZCmw<Q*mC~RY#Rpz2;P$tJj^^=I{0yXB_e~`%UK@@-h3YbKJbP&pBgus+BCnp))x7D -co?>{1k3F2S`srEz}+7wf3+h=cV}pUT|KT-eq#3-g4BARc||^V8yZX(tOBYblyzZ^Sa{<f<3^l^V0mV -cb!qR;-2%;{6bEgGsuT_KUed*rn%U+;z2GBtT=PtDnEgH&IsgJ{3WNX{FC~!qvqrNigVojlHYeq$dCI -)=l;s?q@(wp1Lq??|FR?JpQ-s*9XTJf`D>1xe=g^5ItAtzWB!(NCiyKnf7^Mrb0+UOHRj_n|Im4Leu5 -9)aISQI><8~SZ<(v_Ixo(T@zLwfJLc7VWDfo66WRZ1wjM5{m5X8JjbYU&hGnA|mJAF_ZwyNYhGlgOD+ -Y!Y#IW$iuz(mA2*ZMbVSz9#8pN<b7#0Y_0%BMN!mxlCmNj6Q2<nAllB;2u-m*CiON?QXix_TO3_B2Q- -VMtL+^}R|SbAev26DrJFwAkov0_+33`>Mz1u?7;h84uHtd3#jiQ%MC469f$%yYxFU|2#7Cv~{t0b$t1 -<%VN8UN;<VC=tjFt4Q524kZ$VVd0BmUpE{ol&HZC6a3aKlpx+#a>MlEYHk=~SXm4^U<`?22{9}h#c;y -Fu=K{T*aQqmn+-z@<7`+~$8b^|!wJN&@WilpHY~j{tRRL(4Q{v=43oU_Y`6|LtQmN?jKFdXONe0!F)S -Gv=48VPVpuXTj6(?yhH)q%A%+#iFb*YfHY_2ACB!f%lu*?%EFgv@#IS@ImI%WFVp#gRVdaZq0Wl1-;V -_{@1XFa<-wpFZ2^A2-bZjp-j6(^<!mxrE*0eiZhMmf9xk_#rW7t2GP=VaAVqh4D5{iLgPBzS$qQe+gt -9Qc~!!VR+G#kbkhS@O2Fm%Hh!`KbW5N_B%8<r5mIFw*z!zG~vF|nE(rh_bDm=4llD8a%o@wVC&U57C2 -V2$gBIiUo`Fm}Tj!_wOgV+{LG(Qz=0LkYDB7+(Dp9d^UQ7sGIhPB7ds#4v1F69~g15QecE4u|3Br|5{ -Rl`u?Eg%5^1wr|)0*rrd>`MY5OF)X|>EEpIT5W^x2h99yiI!31i#xQonFqD99n1SJD8`kQ;Fu~6Y!#p -<}dBd7!)!{O#j+bwk^F5xTTa1|%D`mq1VwjN)dt(?+(J?TL-LOCy4%0UbLkWyw(I|!m2g5|Ujh><_!L -Yy>Cb@`VX|rJmN+B_vtQm$?1Q=GU$1rxo2?N6k!mxxGP9TO8h~WfbIDr_(eZz?-hB=)QFqB9Th7*M0g -n{A28^gF$qK+xLcrZ+sdewcyZQHQs;wK=66$8T(Vi;$`F}Pv1W^S0Vd;_~-4u)aFS|B$ZC>w?t=5$I_ -&xRRObfMgE;|*&eJ0(g&36g#KhIyS57{khj5)Np%oe~@ji$>kBgc#=Z4aeYyal=}pZWvF|DPK1nXio` -@VeE$Co)S14_U;?5?uG@zu!0y4HANSB-*8fg8?GaisKpK2P{Kh<^PLiSiY}BJ_Mf7|oe~@j$I!6GaKj -OFN-&mh2nL3s8<y2E9L5bp42wV*#tmz@Z#bGxiCWw+55ug6HP#ee+b-X5;1PGHL?{e%8rC>&*njy32g -97@8{Tf%8^f`7N-$Q@2?mA*!m#kfaKxPw6f=ataL7)Hl2C$x>$8}-1jBv8u!D(Mc34|CH|*ax%)u}YB -?4i1b9Yz^(>JWv3BxKBhHF{AQHvW6xQdRfv)A&CHeuKS0vE%fR?%TMEW9zy$%g&iaJ+rP-k}6;SYxcB -i@*&-414ztZ-5)FA(SA>MZ0_>;1nIp4JURLo%7L;1;e4-Fvc(rCH(t_Lt)rIlvuB9xJeA-Y#3rVOy4l -XFz%Fyc)#J2P@)z$%$uSMxO}5zijL)m^{4!B`9r=r%QtYR1Sgb;VfjV`eZ&5p5^(tj#;}4IR@E_#mv2 -aj;U+sJ6vA-z{f2R;1jew07?u#jc#1CaP6=KpL2@-WTnB~)#xTiCi<vEkosV-YQ*_u3`-c*efngj<a5 -^R8b;I5m#%`DqN^smT1H*ybaD!X>L=Z|~H@v2u5+xWeal@=^nAbO4;)d-Mo%6vh?;FMqYyP1GXQNAh4 -0E#K#M=#H4C79Tjll4Fg%YB=8(#Gk9S$Wz^$o|;utu+5eWwJ*a2=sU*EXy<AJNSTB`}7Cw;OIYl)xBn -G?Wkw4C7D&Vpv3qVF58Ls$&?tVNVQWH!K=;!-9ihqFl70L<xok#xTkC?<vu?JFGb$#^$H!IBpnE(Mbk -|L+v+=G2Cq5@Oo`@*=VN(&W3$Mi3Z&;#_-1MH%zat=7xC~4(NtUFwEQN(ypR&K6b}$*qrY}>4p`;Fzy -@14QmWH90<dBF*C+6!wpM>Ved`}i7+gyW4PIDc(dGa9aD5A%QskV*v`<oAF%wvU%MIRY_JxpUyVay91 -S-+Lzgfp>>mv?DD1t#8m4fd4b~D!Va5h)FdD{<61Z(RK@|4gU=5pLyuq4cP&i>wST;}LlD1)ztC?YHd -TXvx0-IrFG3<VpA~D1MjS~L-YMZ>Xk9XT}qdWUx49n^mX6$nr=odjDhM^f&2*dvUYMe}hgW(mJVczPE -5;M%pBrt|+*<j5!N;sdIkiQ7Z+2>M03@eCXPBhGM!x+QZ4NHh&|7aMu4J(LYPBffU$FPJL#+d|;hT%S -!5@J|F4C8(^RUN}PlL+I6aWo9uhJD?zgc!z|1a2F~ZkV&(a4l}QBpT*r5+!c9WGyqvKEHv)bHkJvFJ% -(8QNsOvY|K8F3Szj~el?C8#uyIehH)t2?S^sNFvAUF3^PIr91Y`80<PZhcEdQ7sE%QV8^)nTC^sAs!) -qE1*W!kW!p<i_<u`Ke8~fmB7%$%Nr!Y3doW&cVqG3+gaHwe5JCit$h9A0UI2sD`GKpxS;gShDn@PAge -I(IvC=9P#G#u?xW=@|3!wlo4%o1W4M#B<fn9;5lC>n-l7)Hb1nS^4PVT@tCcw@7o;aK`4^!<JKvD<sY -G2HC_YRzU6jdl%lFf6NMSU?QpXc%I+$xOm~DKp$r0%j5%H_XW-{4u<)nFPrz&m`>rYR-+k=@|B3ywR* -17O}cv!N4$_q4WRk4LC!`!El&H2^>m53|9{&IMFb6!<-qq$lY)>7_K9fuuJINTb3CO$4g<{t`=&74); -m;n_*5S;omjPpm3meHJnMTRlC~CqhSt(BblJ%^-1tHlqjJvFB-;u61A9NyXU)ecW#auj-hMVfAL1MeG -;-dhH)n0-6!E44Re;z`R;NVCX)zchH)mL*3k?{6AjlgLnjEs&V9H!7{-|d#|_6YL)YvYItGS0ZkUlt1 -nL^bZa7T48pbem!_}i<4u%B-!~TmmRuB!7kqyx(!CJgg#~M1D3_EvRNDAY2wPq<S){MdtGz|+#VefV| -ymo`ruI5c)m`O-TVd+cZAZs`95<34riHBhcUCG*w=FPB;hMk)$<l2pO!*H`}H~h^o2g8i6;o}V@>gXC -?IfgkCbdh72<OZYRaAw#h!_I9K_X;}6pzyk_pu-f7wrRN06?8a~fE32baHJD-)stcW2|8?saWWh^g`+ -XUbu<l2n@PBLOe9+kO9qBH`$=F7D~MqMF{~hl{r8i=7#6W&SU?Qp{Uk(n3=4>10WmBPhVj}BjA7rk8+ -d{a?<XM;hT+-`fiNr>7#7|b77)XVgJDADy8Rkx$$k<f`~2_*-cLf=t%jX@<9LG3oNpw*1{y7f8(q8M- -6w%Fi7*%z5W_H&fNoeK49h?m#uIdr_et<DT;hgf>65T4=$yMCmLCK4r?7t}5yJ!>&Lm_Y3VU~}VG1)c -2~6R&$|M*RZn9~ZLt(tR8m90H+9X!cG>j=+N7Jy~PQtn1u_VJdl4#ZoKYYosce9#zGR&cHqzmXUg;&0 -G!=J)<>Bb7Ya4i&WzD)wp&kcye&b8f~M8baoUA$g60t$O~NpMzfcvJYH^1=y&!Z;Y_c;R(TB%*0nvuz -U2W#s<)5eLKm&1#%B35;RkZHDpu9LBK!0=j0K)fB>Tqs?lZb<B)rH3o*ohMHjoF)Sd4Ic*Z_x~We|Bo -T1s2F7q=cN%ss*ygxl|4ia|evaKH;q8WTCLth(1;Vg^81~-clF>7aF$~u+!#0Ts_Er;dyWv_g36fXct -=6#<bk3#ObPRLcu!t7Jp(f}chNU-#MRhmK!7yx-z!(<QF^t`?Kp2(`3=4!|fiMi)Bm~4T-f38PyI~H7 -*VPTz(I!Ev7l!Q&opTXFVpukcVgFF#*bTSJ7cz7DB;a-ucp<a58|Gxgz8L0ot3eD`cf+__O)xObal?^ -k!_i>4jy?%J-iIF>?noLXLScB_LWxlON#JZaP`jG<PQ%_)bd1f_0!`6X-&_s4;dpoTSpkMOYKl(TY}g -st@~wsy#4uh$ryz#$6dmpwRuIDqVwkgpj^l<oQ*;Vqn6rdVLJZ?6It4MT7#LR7F^oeAPQMz&FlRrBK% -1*Ersx>iFkV6zq*DUB;ZWQ9;3agmgc8KWB@B~e^>V{>?B;%wnHtk7Eurh$ZGGG!JPwD=`9>WMN03Sgh -8-4&!+}x>0XZxnhlMAH1;Y-*R6-yQ3&ddoIgI!9@lPd0+;+H@RD$G{hr_mG%^j<Hwv>?G91gXmL?{m9 -EhYS0)-Z?hBpqk7VeE$)9QIzzEEpWdYndU3u^+}94wDY!oqZsOVJrbT%t?p+{cz(PF7d;)aG1BH1dGG -Gbhu=*VY}zMJ18MJth_mlbBR!X7{|jBa@aqYSThcL=MtF1c!xFbJtZ)QVLZ&>aF|?z5f5Vyhw532W*u -F~T!Pg)TnmTo4r^}p&F2z$i?vX>gbd_|aV`<c593^d!(m1)ftPULT!OL18mDQE;fK9*2?;qY5r@Mxtu -g#?v$;ea942$xAcuK=xP-$vALiu}B^<U3n%y#E$%jMjE72^6MWY-RtLHGzCA>K-8ssqc!;E~GkxNwPu --Fg|ufPwJ+}s+Dl6gA9^U_i}J5T4<bNn+%=6oY*TjT635y%e<$YIWsW=1Z7mo#HP%vjQlIn3yn5QxLx -ZEG->V63GRki-7@@NxHWb8Tx~+db@_cr1Q61`a=bei-(xZGs=h?ZXT|yy{#6`(e&vy3O~)MAnu2VHSs -zykEjO!*UKw$YDHB$Kf!}hdKQc91i1U9FoCdJWq%FCH(t`@iGqoc{&D%Im<Y3J`DRM0xjc^ki(4CbP9 -4f%ujGY4#WOooDcgi<G>u2ki)otxP-$5#SlNi!P{G+WS*{s!>s<{5)M<NaHV`$+Px**Q)&LEkV5%kyq -u1c566&8gj!DL&0&roW^fqyOJEK|Ka4r-y`0W_k001C0sGb<hdImXaKD7~_QTQS62$nGFQ=<xRdZtd* -4+0j=P+kIT_`_{In3!F_FvY_Sx<-iB{+R+91i=hrxU&$4%9E<ol7u&3yI-}1>`Veo=zeTGjfSgei(C@ -<%bD#A^b3p!#qD+(l0^8t;AuLA8y-x*gbg2{$a`R!<==^oLoXMIIJLt{c{QIhnvkM7#x<6!`}VFob_~ -g>tV+B5;&J&^bf;)82e$&;p+2r3_mOw9On4p#^>pXtRdDlm-MZb%+r<R64(#d@jD#$mqFd5ly5JAF)Y -08FvhTd+nVyW!+3iMjNwqR1gBks6H73*muU3oknr{r3=HFTiHGXvknj(2U<^x$;mCJ@=f%S%u|&xZ@T -^#(j&_N*jV0XI$6|*$%jr0=L=1LVdD~&kVShUeIV>0)#_=$tZ4Gl6#}eM#{J>bk+YU3P>8iJ_VLOc5B -{)Bb6t^8N;V{n*m&6iv*x`~`qNIHoZ}TJVGLDZb#lsv9HyaOgVhQYr738q+<}fE7#vB%q!~U^^gdAqX -!<=>r7!UimOGw0FJWVGchhZ$?9S>taTs@Z9jCeR?yF^JmT++5yOFYbKmnh-z$76|Cx3(ThZ{>6VuJ7% -PUKsC<c3L-Y52wSMv(faRHM>2WwRXlkt-Z;tHF{-yFl&wXTC?eJyf@yv)tZf7nPq>U7I}6!osNgMMxV -Gcn%$f3WpX-F2lwyZnC!M5+rPJWb9Qey8&CEgH;0{!4zlCk80}8<!6vPjC)1tm5A{9Nda^ah{v|E`>| -}2?O%Icwnm+Hd^lz<;!~K1ILf3{jc1MpLJbr5H{MF0b{eEY#J=nf>{mOIaub$gJd+yAY?Q55}FJF23n -JcZ+t;1{(^exfpEC%NDuL!Xi8d+53LRCdoE!3o_CJVJ)RND)+Q&c+(wOdrX3$<5NdkeK+RQn5c;Hu^` -Dhs6<M#!bg3_j&jX@;M&P@AEITq?}~R4&zK2r7%kNgCi{b<&KmES4wD5X(VPHe;-c7f+f&R>c~n8D&+ -hQJP^^#p@@{IICin(hRgJRw)NYUaHbOtJG4JX0+8(m1eZnQkCX$l`K_h#yeT6(u{ZFR@pL|TjI|d&8_ -c*(cI!5F`8T1&l}Ax>lcjX*7S=;a|$}~=!q@DlYQM|=Ck6K^0?95I)2G$ZXLgDG`Ef?jONzyq|w|uP8 -!Xv;}b@6>o7NK+r2R6PVKmLnA^1D)?x0^j#~#&z^%jFogKFhb8B|oI?R39aqBQQWyh_<+>sr(j#EZ+> --ZJJ9=DEPHJV$;X`{Jy{F>3+I)2?~ZXKUAny#bxGpAi`g?j}@-%YD%_X>8ttG^fz3SPdeYZw%ad@n7b -Q*`k?Z5z7<3*So%Xm<+!y_cSUCn=csUV8f7qI2(Qr`Ijm_Fj7S?Lon__w+R=8ung#_U&%Lt@qNiZx=f -``svxX`vsrgPtU$<4*wfQ(r4dZNXEDKwJS6Q8Pnd^maLeZ^wYEN6zzInkG*+E<JJ4=*>}x(8Kd4$&%S -F8|64}VXK%*K825o5dsCxv?F0Aj`E8>W*!y`Sy0_2o7|p$XzF;)>W3X*B_haz8M$5kr8vYLShoJaHVW -96HQ#?K8gtkn@tVW7F4WI{{&|kC6pVHG!=o-vTdyBNJhJ|*Uw9axuBZV%(T+$aw(<PX@=niRV5$0&SB -xy5O{6--4<K7(2KI^q_G=DlFO<xIf!S+c@i|Cra{XNpsB1~QM+}BTdQ~m)-X$|H^CD)Nf4CY|>NYkI= -;-W&SpXnX*4lk1n(RY)1i&sd~MHJhoW%ej9ejAX5=lCIs?(OvZB)a$0t0cNN)E|&oe17-ns%JAVeL;G -kOidQ{_6AlbSCjerUf=3uYqFrT*Ry&;y1vtTU8}cA*WW#Q_I&ys()IV9Ufb$j(lxqziPd|g>#q(yW%W -Mk`r7rR)d!^OdV6`jL(+A<-Mn6Mli7EWZeA~a(6TQw-Mn7<uw?;8H?NmIaamB%&FiJ{&q9o@t#?4<pR -H)=+Ij~x{#k6&we=2Y{IdY5YwI1*_-D~c*Va3r@y}MabZor?8vksc7Lgx^#y^WnI(8feH2&Ex{~bFH0 -~-G<)bH4F7|{4<-)Hmta6sdqC5WAT9BBNrNV}7d1C4(+E!D}#fyO_ZnCj%`Z!Nv9SLEkoJ-x2CW5;Jm -<DY#ArU&EE*GbjY(j)HZO;UBO^t?a%2C2GIdT1VflT=+NJ-m<pgH&B5Jrs|=MQVmn3I*OGRaZ#QuA^_ -0s_UcY@zHmTs{KTIs~YvYq-M3zalc2Zu8l0p(f3K!wI%kt4{4mWyO3mij@~9!S4VE;=s!u-Xr<!bAu% -nExO4O_iD_*ED(#0PW{(IOvL6|>pWUdW{+Lu<T0-yj6H>F%=(z8Zs-G1kzE5IS7medjNzLk_ar`e*^; -Ju#hM$qDuNwKfqYp^cSB;+5M<0@^OQVPG(SI9tkUhj{6#s`*T^c=%kN%fbT^c=m=YL45zG{NhKO$8>2 -x;!}OC+YH4b0ij|Cq$IGJ^m7Pe{~P%)I~nPf5(`qJ#b!srrdXZ*O8NweThsA^kb2X;}j^F7v-2F|BGq -ul!3Aby4Jj=6^-1zF=fm=YLJAu8LmzHzexoCFoqgLaM%Al8XIXQnhC^r}f}<67}UG-!%U_qh`}k(p<# -(-;=8ABJm$c)K`lf`1~J9)rFC}ng0{1X<-B=%J`HvE&~$(nM7R|8I}3Jkeby+)&47~`g)N=oc|lCSz$ -C@Uo&dvVd%78BQdS3y%gao?P3Th6xAthWBOF<8ziPx^=YvGoy4>%dM3}mPGVXWJ)kJHRNBUn`<Q=&#I -z=Q)X%?3Vp>w4>NK2H+P(DY&%Z^Y{)V;m>px2S7P2$*Z<DBrK^1+6L|qXL{&z{#29u8YJrc9)M0I|jR -9zB{@()PVx8G6-tF%WM(AyihDs51RL6o#A?M}#?%-<zZ-+Y2b^oOLTHId(%|A<6g6aD><Nz@P&G^9Tv -ReuGezkiR!w59>o^gfAcO?|5ArzB?2Wx6DWtV+8OGL7?}k(d@mPH+AJiJ8AN;)f*a>tu$6s?UsvDV}2 -EEG|yJshB@cnfmG$%3Cj9e)^dUt<$Zm<GowEqo?lAMmn&)I+|Ua?2L9F%Z{Z3-Gk9=dvADmboxYkkSF -y)o*bN5OcCx5_io)A-b(+|wR_V$<Ad8q*MGJ>n`}>}JEQ6L-QoV}|1a+?9&h`uK84ft$_r;MJ-ayF#m -i>*_s2JfyW9JdgYj(q(rA0CgX`1c<e(?gXH@o@JEPJ5_VD25c)Yzkn(0XT^tI`|(c(W2clU1(Z;WQAP -n>z`?9<PD>e+MWKmFW=i<d4xf92}6>!11T=Y}_K?u=fzb$k5co!z^8ll|$z?A}ZFzc~NW{LAyN%)dJS -+WfWooAbBkZ_nSGe=z^>!Rrs+c<|1HcRzalqc_qaczo;s08mQ<1QY-O00;maO7>QuKO_ju1^@sA6#xJ -u0001RX>c!Jc4cm4Z*nhVXkl_>WppoWVRUJ3F>rEkVr6nJaCx0rYjfJj68)}U(G|Wx7PAQA;3W5MEtV -mnE=FF!*-E)wlq?2&%0j~(4bHN^eoyO-0oyE9$kKG5KK&Xo?Mh|;ht7Ln2O}B|oZe{Cqw}Hb{ErUkR; -&t59|XBt-pkMn$We1aGNMcMw+sT0u0#1GbOee2;OR&hnhPU*qcr(YZCIIwK`4!c+J$%$fm#VoYC&d?Y -3PrHiF|J*u(VvRL+N`)sxZQ%UMU?vz%X4Yoviy>ct*_WZWCMFrSde}T5Uk}V5sWUsMT!RFtJy?LERvr -G3!P&7Lm|TVxC0esL*J6w?=%`sP-8vM3<g^q$?TRYq_Kof`^8TqN|O0P+_bwdD!6V1&ZY=k2lUxnjoY -!kaybC8_w=R3qg@un4j?c3vJYzd@m#|<}yn7ktsu7IR8~?;FoGH7aLw$hjYZsVHu&9QI_PdqiY(92%* -qd5eg0ZtMy$VeSnA37hxpGi)h7b(L<5SK07i=9ihI0`8fSwNJz+;o6C<CYBlVPEwxxjtW@<3`;T(37+ -8bT8wyY^ogo{0Q&2=YCmF_OA5a|Jz#szsiT0yALF-5?)<GQ>pi6%arr+G_DRoCb=+EwW+#OASe1R@X0 -VxWcSdz<CAYm9$X)iPzI1U4sy|MERi0=7dIGFxm@B4%4s5hBV-yKtzuDavtz_}iF$8>c)zH%qM28t_0 -mSRrkz9i=<Ucls1A(Pl7o(!TS^dBg11P6mTJ$O$7W%dPj)to$Z$ZB&`4FeV4$MFJEB=if(1%=Ag>8F< -H9kl08bz!BbZymeBZ`A43hLRUP1}MP<@V;EYbU#o^*XdkEhE*@Sz&2a9-8`||O`GU?f|Wxb>Wwbm`0} -Y()<R>`n9WKeEL4s6))1Xh=NAulS0Znu@1B)bcgRkv=U{On%vHRYDvEH8O_3_F1a>C|-Dp|;aqo|r)1 -A&n*O&BP`e0et7k%6`i7N57TF6k$EqD42i#9K+cn5SR4i;Lx;6=Wa*r_XNP@F&*6U!%%w+nf+^nya_d -}p#)>Z67xhd-&GB7oe5{B(~zV`u!wk~}e=q9=^*>_`)=GlXwxxM!?m6dU#f4^0+XDC%NqKBN5>)(~A0 -+A~h+R5`2wOx41>jgXM~TP{q{Y~lsj>>Q6fV_g4eoXvdp@q9M(*~jy>n6Gs_UyJ!#$MdzBuYEjUoB7% -$J~Z)b7sh>Hz7GlC8z2Ra`9AcI#+@?X>0Z7U<2z-()2;X>uU#1Tk@-Gme6K<Z9P@qbAC2oUUuQ4hi}7 -`suTzQ-uc~?$se2fA#(Zbb`vvcq@?C7JxQlVjcb4!KRIm5hC+7RK!<V}l-z9u}7n8;~=KFN~e&{k^_x -SzLWxnq5eCNz}emvhf^PQ*t;(V{abSdY>VLqqxCR}!jam?prd~R;`03`SGg8439<#V6=dBJ=a*?wT1! -xuNbFs{dZz0R9(*(Js?UoYcxbF&8^d3=55>%Yq9KKHZFeEq&v;~&W;eI^`6#l08c$;J~7wi_H70{JL{ -4c1y%3zc5R3hhiG6(>Kf@o(xS=7AvoVXg44U_bd~$1em<HRqRIVn1S+oAsB!v6Wo2{ld4xTyNBbM|(B -x^jp@P9Mo);{#H1;x3W9#mZtrT-7c|ze^ImSr;Ac%#~qw1t@sQ?NokS;WOeH}iP4Wu<4{PmnZy7&n^h -wbENXP}8;w*b5;=dOHAc#6t&!{13K0;E8K}&RPp~sTJy>P6D0DCo{(t7<c#bpU=lBGCBSUiw-J9EORg -HPofFt)WSvcg}zw&@-o453y%4g=CfVVvP9cOban@#RldS;)6-cl6qVdyKo)55HENbd#{_vGyC^wWv`? -vS;>3-8z7{cD!q6?s_*F^{$D7<P@Av3@dD-0*XhEc1Z4xs45$$A!XjhDA=&{4dp$nEka3X2!dZs+qi~ -IuC(9&$KyhF5=Ht9d^&%H~#IGI@cvvEZ!nF)%~S?Px-08M!%HEwyk1ZOblcG*><n!h=>yb>T+HhBX>H -x?Cl`#wD2CST^r@Dy5Wag`UTU~9?jhzEgr1rb&erXGS_AGzDKY5DqP692>nu@ECS`3B1S}BpgI0M;ca -Im<!m;ZcHu}eN}(s#%j#~ZMKcs0<pWjrfx+iBNv!@S;VR2SfZ=}+(M|gnzf^nHZQi~u*s0O4iP_xV0q -2(9U)5rv&OQ{H6$&tLCjWRUp%iaSZcK_)@}HY{@=X2*f{ApkxkQDL;(v!;NXB~<w9-;(X*P|0PQ6EWH -ahL+)h{%xe*jQR0|XQR000O897^_9XAjAH2nYZGy%zugB>(^baA|NaUv_0~WN&gWV`yP=WMy<OZDC__ -Z*5_2aB^>AWpXZXd7W5kb0Rqs{m!q*Xn%nonxUZGw%fB4gE_h#Yl9bXPjomOgj@();i?i-5_Yq{eqX9 -CE*~rr6qJ-NUtUtB>fm7aht9g+&iiz6-tP8CT{^oMwEs;n$R3mqX#AiI`FbkpSr`iSRLzu}(k#{?1;V -Pxo5%W2#<ls9?v^yvcQl$y8Pgva{wr97D$+Hh|ExJ(k_NH5SCI&)%{rm`QvX*4fuQS1J;~T$#(xm8k( -Q>?O5f_((F31qIFFQ75bMY%8R$8v^o;Bd)sXK?YkV=67z)Ehq<mPcBZJ#`u48w@hF$468TVr;EZl=9b -|;mHS=W3Css~Huc7+=Cx(5|I#cR|G0vfWcp`kP~ev;F~leUg*tnL=@uWTw`F+wZB`$S?Y=9a9cOW_Z7 -C?b*(;-I2?CweL3N4iqMeXK%A!x<-hwX_d9auTD5CB7oiJg@W6xL}s@%m(T%7V(l3F^i=nqi6ORPM*? -IFUSXNET_sOrXr}8L^S<f$H2Q<Sn|*!n!;v|fR%A*vV45&U(<y&@S48KNXDSQTHFQ72lztyGBT1-Q*$ -0O4@J~_Y{)1zgnAn4U8YV+D$FxCR|-a`QS&mkRAUvsQdwBGAC)m@U<F1mxmsaKimdGnLE-6?ROHk?Ad -mP1g>dv4l}dM#7Dmn%K@}PxOMjn_zYng*)aw7Fzgxp$t3UpE3R$EAv#5nclM3enFCBOli^wivI22rVh -wbk`w9d{i&c{F5`ri4t-yMypHyBcju3E$KdHedJHKeQS;niT&ts%KmW+CQa?h0}q;u%zi8j-|$5-Ko> ->pziR0|SF8J%}fXH2V?@a7qFdGGFeM!$3#(&R;-^fS!_?QKW5^o@0gDL3wUv7g~z^R<VHmT9pnx2#M% -1Kng~H_tXrkdx6$*mCm%WEPB}jw%+i(`X{eh_lT}X7<uVK-G1ktd)`5*<Tf|EoMW+Z)_84QpfakwM`3 -j(^R;xFO18gDu8qNwv{!C06_n8eiy{@^8R#8ZRAZ^s8+QLQX}89c{`DpOi$0f1*PR~z)QJw<vYM$#PD -_LFcMN(wsND)^joKJ!@PIJBQdp^TWs#gfTI=RVm~R&ICKN$2+y231Zq`Q*Z4Q6Z&oaRL0P}}C<}-H2e -_5GN)TihXqmQ;`6YQYV!R#^5asY*I-PXbD%fRD6J<4FowIb$oDdJN50=}f-IboF5Y=|ES6s0Mp&jhH7 -?q%{+x^Pb=R_D|{OOn5^@_c2X7)A8xR)qXzCE`0RtT1jD2ZDDU6=6I4X94Sj<tOd?i#X<LFw5{x2d2u -qAl6A_RJ!wp&g9@(EDbgYXhOP?X>k|GTC&Zgiw!9#w)A`4@E(yaHlX>hTdYYSpeWn+4ev-Hs-KLqi{v -?0WB+HN{R-Hul&PI?5sr16LxiZ6OL!U(N~rpt3nE;v<B3r}+8cJvu-?8fkJ-Gv**s?R_GW7^TVrpw2D -3HxW@|EAb8ogLvo%-Pu-xCe0QQ;LJ|}GNK;$rH``p_XcF1gpJK0|I?U30H*L)kjbph-Pvwg|f-bCauX -8Y3H7k0#KM?2YG^X-V)j#9Svk7{-q?D)r*(GLeZX13#uEt}Z73|4O$#%#yEw_s~nz)qO$<W0688*C@c -cJl5O;3xrWF<WbE1#~*ur9k9yVHmTu_Fivi%y#yk^|t2Q8MB>ju@&~MTbi-8nXSE(Z8iIw>25Py`~AK -#Iba=T>#XLDmF_Za&BzY3b>3jxuoSQ^vvrTQO8K=5!<em`vax9|2BIhdz<SKqJ1SuBxG;>_dc9JGAA@ -!JN@&mJy$EpU;SR0-GH)p`*1%Y#<Io8-Gl6tEdw9C1<|WQZfqQfw5I1Dpe{svjZ5209+#qoi#H|jDad -y|MZ-1S(T)O$n*K^X~-9s7{?v(b@@22$VMd`-I?*V(gk0tHFnzXlJiML_Nk5{EP?JjhCZ+s72b}D(3g -x<a6I>)>POB(g^THB7(I1`}xrpZL%Oh1{FjSOZL`t&FDbtIE{{+I<$`Q=J2m#Y+0K-4B6vlDJHCw|(F -WjQTmxYL~YI0m5!{pwB{H!8BXkiEHG7mXzj9N@_9O9oyt?*FoYY3sN2kyg(pr5td;-85*8>saTp(rNp -iH?`<>1sNU6XC98Zo6dUJ(-k%DsK_rEaGsvRZa)1RD`LxiHaEp+ccCZXmnUf4i+-A=aCTbN1fFn#&KR -mR7PSxZS3JCFaBRJLX)BFu@%;;g7`Dqi+UbdJ5{Xb2K{qxoVjfGoh$H%tMdQOux&j<n7UKRbJs*l(&! -n6>=_*2H<%H#v6X^}#n`D?@E-Y`I!quZ@p*h1M1Zho$h}q;<7)-3VH|1=;sAN7a`J9fNHlO0pT5at*g -WUMHYXHv0ifFOp-jsKj>_^H^fff2~g>YT3nx(37eqJ}Rr~_9!AYYA5tv?t~F1uTZyI6|H(zcGZTH>2q -`VIB8LvnlV6*r~LTsufo+j-7$Km=1X!!a}RS88PzXkiN<;dy~(|97~z9+8x@UaNbBA<5Aib+HJ`+pZP -`QCO58FS8F6ZssJ>`bWaGIwu1oX$R3w^A^wb9pfHvOAY9$(C>-bT;B`Eh2mGa7^t!hm6e?%(9h|M%M} -z(;Q3x=bh5j+cNfXQT=2_)^$n<aQ4NR{kLkXs?6S7YtdFSA+EH^e|Aj>9e^5&U1QY-O00;maO7>Qnww -sbV1pokp4gdfq0001RX>c!Jc4cm4Z*nhVXkl_>WppoXVq<7wa&u*LaB^>AWpXZXd97A!Z`w!{{m!qrB -B}&h!a}S4lBkskfdnl91V&YqM%G}DVN^4NX2$8#U%zK;Fb|vTcD1NgVCLR)&pr2HUtN`d=&tuL7}0Rh -?TuzVx*LwWf6@iptI8F5D^6oAmO`?ax+>%(3_YozB90l&rFi4o;3ilxZMdb7TOL@YDS&CSvPT$5VFk? -Y`5TYbhHFw0*%D~jkGM4f+i)DM*NGGXvqDLOpL(No`UAi;Q93&hG-sBFwAiMI#ZXK;tj!joR+ehrI(= --l+JGoEZ&D|YY3ghZO}XLvjfYt#T_vp+iv;=AO#KEYL{ChAr-_J{TCC}sz|fLaG}+pflBvaPwZ(rHD| -fH*d{c!|gNaru+9)Ay19XDDYS1|r3(fS_Ngip=$*9QwKsvXyRS5-5lIEc>87atTiOKMHrQyF;p@_EbD -3KvVaJgEp*JiK$!)Q)JZjc{6aLF||O_D_{0yqyvz@_2D3~k(*SsnE4J0i0k5$Y?zr!~1HE^zN+yPm)a -eQdV((RPRp2tYMv9e?z|#yQqOdP^~CsP~@b5*#uONyrp-g^J+|0Fmeq^dv1fC5A^y+yDY>>FdCI9M3) -KjGpOhXFBbSyysikqCU7q)iWfq-oygH$VxM5w;&FHr{1*t2#?O)U^wue9sB;k8}(*0>W`<?p-E@z4Z8 -DTXG)X#bTXdxny5JEdx@QxWg_PiM}S-_D2d5oA~sp-&nT|}!8oK9d*di`z%gneF|^HQ`%5*9m0YIz!s -Q_7Es2PvLd*To0=<KtEmRjMhx%r{*`Pn#Fk<q1j1tV?-WL&|`>|5GL3henXZqBEZ|h^b-MVgnYPE^xG -n`!dP;YeqFE`Rvr4ngOlHG0u(n8hTz>U*JVsXQ5B#d2V({xKIZyMK-JM%8i?~l$qaNQa#pMx8A*+#1c -ggx?^aXU#5_lB4;xil87yJo>kNS<4#H#2whl-=xHxJ)pDJF6j+%Y-d?U&LsBsFs<gZVk5<7JHCNr4q! -<VDl!i6?a?9Px#bMeql3Vt5CICP5+j=<R<BtkVoYE0=v-nYlg>B0|P0Sev~r1Ib%wn&kmZS@u*j)>n} -7?l4s%F$0S&&wR$s$J_7xG^u2!YK<wsm&3xvH^V5;oSNY{q{a!)L5jaK5s^pvXF+!m}<-R^dx4vr#Tr -Z%Z+YZ~>qWZ1%tyQfb#M5|C*i^Z9WXOyT$zlS}80J?+_7}a&)hZ&D+7(cLE$xW&aMv%+%twTqYzAN4Z -__w<zox<*H}!!db1TfACG1u{7Sw4~jx9?QI`PWg+?Ev?8TaULQ;2P8d2P?Sek$0Wgrf-w&MG1KUpBi- -{p%;LD9fq$=aac^_NLSE^fX$od#sjA)FkAKWLYbixKH(iA^h9zrWKxgTx%qUCt#Y~2UBg7I%X+ko6VP -O&EGMLcf(z7B8tcL@^o_jj;oGc;rUO!g2w`{ao>MQ$$>Wm&;=>WWB14N(Y-(L{)gx@50Cz0a3`@J<E5 -g|HA@H|BwBNsjTVe*Md1)uxLB<s^dYx=JYU+cy9vE)T|W2u<Q}0la`r`DJU09tO78^OkJyXA`)`|Wkl -%0AemxF$Y5Tmi_UWYn*X`FzVg2RRIVtpg&+B!)!RX=Uyr}QcT`KEysgmW&$2$+Jxi{00ii4O!q~%mH5 -+RoXhwYc_eD*k=dfmC_dymr|ehlwV{OkX%UvnqTZKCB->W5`~#wdRnMX_SGeA)i<3N4F!LA^6UDt`k| -O9KQH00008031s8RzJEWEu8}Z08<D6044wc0B~t=FJE?LZe(wAFJow7a%5$6FKuFDb7yjIb#QQUZ(?O -~E^v93Rqt=&I1v5LUold@fJ8Z9Z>8O>_9VyxrAtGUfU4?rLMCy*t+6B9X_fu!?}Z<Q04v>Dij>T}d7g -PQc5ZI2FX|6QW1l8tZ{SA*>QAQLPx=k^rglTKHK(Z&E1{SqPbZv&rAPfsNXclf#2Ysjo_NiS<&F~Wc< -i*H7|>Sjz%W+A3BZ2vH!gL?4e6BJ6>8vp?rh954%23nD-km%w6gd#nKs)G5L2Md&K?`i98YLjY#A@NV -y5KE3T(A@RQDRxZMQq1xC(DkPf7|)tfi1!Zr*sZtHjgF8L`Y!U)?so!9w)N%qs;#u8i2wEg?fkPE%00 -wN_h1v@Y;4sY}29sCTQ-77!S%(@YEHnn));s0N*-SQ=)EQu5SrPFAPx9p&6np>v9vBEu75cS%7$M@%J -uXoL8TPDEOird%Zup{&($v#|%|NB*29+@d}jam5XC3i72CF@h%|=E`znma@`j*GGMaWg^i&5gKaHZ+m -h_T)<!MUCsn7)NOSRyX_g95P<5;mHA@^vNEuNqzjVhp*ciem*7}wLPBk6*XS5tK!`%$F_X09lv|$WvI -z!Y>1jN>pU!90^PlOd7lu85_Iw8{`U5YzzGD)bObQUAD#Mg3kT?h)2cdV5h+cm@8PA@}?1$r-KZqh4P -DAQZ&<kf{Z$9aT6wJe58Vy?LIOhk6OEIsB{2_4)%8iDSI5|v6yDR+}?X^fyCbVX69Bqy{j#@$tW0MvC -tA|pn)wW)Q90k22k&@CFxpyNlJDAyv?t<mm-`#9B>2n7lrd}ml5FvahQcw@2)}~2)ZCwd{>>;+@?R46 -=olor!(L93XcZ&x8kN<ch-PCHS!AWW@#p-ir^b)0`b>*q+!xC&Qd&vGyS{a>ZRj3C~#NDX$R70|_e|| -l~1~64XT;(`Md-sH?RnAs?D5N_g^7!R!%fZ}x2&y!B{Aw;hKf`m7d%pn9o+_Z#viqsit)fQ#(pG`J=r -vnbQ4iDmUcUmeFTz$a(Ze{ZKysIUsY2$n;g>z6R*NOG_(k-+=tST8rR2Ckart5HQ(7zpuHnU^Zn;dGx -C_*3k!}V3b|x@=KQpxasXu7Y?O)_;#dnnDvN`VZdZYD0eM0*E<h^l>z}~H0T^8H?{oyFrvBG+zS@9g@ -Irp5j{M>cgohxC7AvkxP%;LH0IQ>`n4)b#EI%)r@>z}G720uYpZ`A$;P)h>@6aWAK2ml;P_EsrY=JHV -v006gk0012T003}la4%nWWo~3|axY_OVRB?;bT4gUV{>zDE^vA6oNaTPxE9CX=Tm6vH|>nc#l{b~oqd -s{PB*RdFt#(DzRF-MC)~x53plCw&i(H92mwBT5E#d)cQ=8SMEdK11nB&HB&*R7|B%z+my0Vhx;PtNO@ -`!jbba=X6lfbq4KjV8<l3|DEyu9QnLDS%^2yTu)3R;j*!Av-32DbivGl^R0t=L%=@YfxN9qxGK>~pd& -|lHOH;qRMNz3KRu}mYdT*rq$y+_vz{{X|}#`So*=}{w~b23|p7W1bvJZ9^04X1ht$osPoq%|1mU_vNA -CMUK{#!TyzG4-kUMCZIFXRZ@?)@&8H-h2PUM@S*$((wKuH<o?xSxcf2xWa%0F1c9;53Uo{ADYItW}e} -#St~6(N{R0-f@ip}Ph{<`h-o;)qjSsW=Aj`1VmR}ExgL~Xx^ru>W=Sh&4%J~-9Z+xS$8GrK>XwYC4_8 -XQP=|U@o14|lwoE8IvP|mulo&pFWNH4xrlro=g-oIgA?Gfb4_o&Wp%&z`b3akfhZNF2ZpCMdEH;Vjk@ -rTxt{?8^BP;j;E_zLDxEo$v@>tjeo0`sv<%DJ*pzYxoFbEZWhR2A^C|UV*v9g<B0kq`%#q{^<+bKD@` -a!;*jK?Qe(;uHe3oQ+~aR0a^Yx!tfU>IuU8BVZ<3kL(2!|~bgP~znDVstV6!LI)NVtO^4Ovw55n4FNC -lkxQ8>~?fACO5a^o9oH&n2-sjaTBw~6g6_v#0xOFbfG2ZG%zgN=T-j!x7UXYwCCi(c%pEdO=`gtMGSa -F9@kslL)&%k!}>yzO@n?S)`B>0&?L{E1<wvVeYv{}RyOyy2@kz_+$7x=hz#cs8*ae_il18xFnw;juGb -`|t{*Vz<q4Ek+pU(Wv^2Fv$n6ADihjuO>T|_Tq;Yh#@Z2RihMvN5?)?BBo26ksSPr}hX25PEdza3_+z -HFQ<hh?AH!4b<6}$$KGRh96M{v=n7hk&UxL5`sp_vy)EaC2KG$Fr{_eb#Rl2%i^6R5EYFSFWbs)k|P? -lVz;LK?hAHob?N^JLg7T3|#CcV<LqMiyn~YO!;*`e~V(moaOtQfqByt=%t`F>CEoYZ|krm0Hu7HH}+q -H^n>1I?P(9Un*nPI;GaS%v!h9T9;YtmRjpEYrRryJ!Y*}YOT+#^(EGLyY-p1KDX9sig%Fd%$nXWl`(6 -2skH&KHYl|=VAckSHBGdG%wX0GZcV6(WXzheD3i^YwOOgP8M8JkwPrGFW~nukSu;zm&6%}%skJ$?HZQ -eCnKfE!jWTPr)Y^hsTS%;_p^6!Up76sF?+ho?q%Xw1=kahnz8*JINs}q~M^O^trz|VKO;STu6}4aKvI -I#N)5+cCaKCBsb?Qpgz1MEO{U$Y-+wQ~tj@_UW-FaZ4@!e>6bq7E+8nUM#aX8R9smTL!d3SmJc{uu5; -D@2$f5ZB}Gi}57?*e0H({~?9>}s1hb77c3&XC)Ul0%=LE;E_NMIH?A&ZbVrWa_dbsbege;N7Wp-+k9S -`X6)pXE%e+06YIMA@u&G?qBB7)pCz6bKz>a3omu;wTp9Ko)j<Y`iuMlciz~$bc^@=*}1n)&MqmN-xK% -Di<j#2XXpNy7l-@O+h$K3FfYDU*&gz^N%4M#U61#~#q#1+%HloosYS&HF_CBmD8rqooOmQ8#Jy(i;@n -NvD6S&E7<xS314J&bVcPz0;lmL6FVf<NHa}?m(BX$JKlJ#a&ks634A@B?J^Ez1E1!fN8u@Jtk5JKj%D -r!gAG#tlBzoo=BwxC&hdrRAY`wzNe7#<S3HFqhtszgYd+VyPL+zWg4XrSbwBKsHN)q#ohm3&LtI>V+Y -V75q>ZNfv0>1*@Z6i!e{6>4@Eo$;_LYra$ZmB{7jy+Tn0*k7WVc<{_L-6qSO!<0)DHu||-lSq+65xws -U<I;-%y5)TVhu;Ru#v0`MY$x_aFk0XLs2e?3`e<SG8E-11?5s}ILalF;V73(hN4^&8IE$vWGKodk>Mz -pOopOd62!+*E+NxvxhR*!8jf<wWGKqjEyhqB<&w}Uj&ez4ILalHp(vL`hNE0EnO@HEnJAY`hN4_*Q@m -%QTrwGoa!F)3$|clvGf^(y-=Q!UiGUk(vnIsn9kB?-u=a=8FMyXQhE)%ltF_avt;yq9bz5`Cvlo9zYq -WGFa#o~R_3D7zXsb#)6ZVT-e~yEams;aNtIb<elYJ7#5VKEDh(7U)T7*8LtIwbhrya~b-^LmC`8KW=0 -nEUUEFk!g9O9G6F#O152!13o3_mg%f**+t!;egc;720E@FSBU_>s6a3_mg%f**+t!;egc;76?mKSe`) -zY2Z|gP41RABhaZk4%Q(M<T=UBh;`^W|n@S$J=_4??oNi)`NWe8LF%6Z%M>QSy#$Di6o@3Y5e+5lshZ -26YUf^(eQptoM`U41y1zaICi36uYW%|#XdAl$ixrQTRw2G+0<s<X^P6HLj}BKDnAt?$d^wC2L$=4sDP -H*vK~<r<s(<9HCw4I?*j$-Dd(5ZPkTK<e#+hD^V5D#ke_mJ`TVqJ!&^J&(t1t4>Cu+;WqLEcWu2Jb?5 -DP@_v(xCk=qjGV}B*gM~+IAk3EzyAGsz`KK4n%eB_Mc^lr3ey->F~KwCHGeg@6-mi0TreB^LM`PkF&v -&LJ_#qbUx9#kWy?Za=;m|E(mB}i)v(lkL@N08PPr1b=8eL<QoNE;M5NFs6yFPA1dN0cUL31OO`b;7$? -WxVeI$Ga+zi)}S9R=wE|DJ@sWg5k|wp46(B^wLj$ltv`OfHklF7wbX~p9aPVn~LXL;iy8y^PA4KCPF5 -xw$&I^+@TjSq^K$xhWzS27&9D)nSRg2VW!_x3@Q20gHclOiANNMkyyiEiH&4sh%Y79FlNeRh&ClM44p -FB+f3`UtaPSzo>^;$VS29;hS3U!(J<Bu=ef0VbSsHVVaS!q5bN?pE&l&)rghOw>s%NHI=n5yFlCV$!J -)HFh~@PsYgHS7dUcfCW~c}aLA}gK%^pH(nb9cWguuNGpB2_R8jY&ba=&QW6lt_|rJaxRF-{RdTN3Ewy -S91B>xcU|6Ny=^Uli^O`xQyJFIRyKs{K^x%2a~qnAX0WwzXCp(;83N@@sQ{mr*l`8%W0pBd3_R_J(WQ -;+k;EkbGW#KZ-;a%Mh-WPSY>7hH*_I!?-4sAzYKlFs{jD2-hSsjB7F(!ZnEu<C;u{a7`k^xF(Y!T$9K -!t_d|cT#I_Vm-ud6?W73p-k5H`<9&EqQ6WXYKH4FUt5)DeX;1Qf#{!T$oH_eKkZX{s%T|*xOmpRdv>C -3C0HkyuJh1f_Lf9g`a1{=a@x?Dln=KL1VJnTCuEIqrET65iKpbjP-)9S11TI_1!t|`A<$zfz8$8o!5s -Kj1CBEgDY~=-BcIDG~xJJanqyJe^$6OP`G3>Pud9Guxn{34o@=U|!N}decVv996_fVcfHN*8(h-WzW; -er%ixT421we4dvaicT%#v)w(!KdN%2CULhyiJ(?I3c;RC?q3W)D6}o+6^~ugS1KCTg0@&N@SpxYht9G -JXnk1?(4+_Q|$!){)aNHME17W!=9M7m1Ek>2MR9Ja!f1v0D_rTBEw88lOd*Us6T;Sp+m83zSxQ75dYu -sH*{KIAJ7b!<MG`kC6C5E^~v0&J}+vzPGB(o3i_<s8v14OokE`peP7rg@fC8Y=dq5^_3o`F>KvD~@7v -`2tZe7NCyp!c9{5bn(ch4C*vtMc*O>Sf)ARRE!}Xy{u*wAYu<}(V_(VDWl+?tG*pY8D*F1VGix5L_<r -%<8kRoP`+p|eqIUQocU`eOL6k|w6fG}eu@x^2~SjZR>YnU;TbS*DKj3Kdx8AHvFb|f;y7!qrkF=R5t7 -!ny~44DiuhD3%LLncFvA(3ImkjW5ZNMx8XWU{}`Z1W-+_VzLv^7axL_VzLv^7axL_VzLv^7axL_VzN_ -;eFMv6Moe$?d_u;5Bz=R+jd><zx(l_D1ecC9dBz7{#S9~m3??9?uidoV@T=HR*^N4QQ<}8zUn43SmBn -VU{dNa(aWnVJZ}{FDZRcI#3RzsR7J~xPwe=Mzi6lOU(hR46Mi;~u?_wt?`aVL32Tr+pxf!W((0WKQv@ -{15zy$3fO6K}2q-IiBcQbGjexSUzYYP7hWX_N(k`f<`s)pP(!9~l9CjG3$`Vio(<M2@FqFQjdg@T&yh -Sinxf#la2BSj`l6Gp7-5_Zsg`{>0l195h(x?_BjmjV?R|6p=jW&=3f9okknx5-huSlL*kKA}$k-Th>N -+Nq(t{^Kz_=MlY?C2B1C&|iB`&*G*vZPafp1fFw@JS-W_#~6%@aZroUg4!>_4G2c7@sn^11v-M)MA}N -tN33Aqgre%R73yZzP7r&e`5J*nqr;fZlgy#LJ^6tIjkr~FZMHt@>?lqp9X<0hCFSX1;c+;QqeT`gStf -V^r!>;l4{Y6se`=K1P$wuW%^L@MshMd=x0sS6>Y~ic9$0Fs7mL+Td1QeovojnzW7k_lwDQn9(b#Cb*2 -0AJ$<d#>ZwZaz+0=QE4{6sp@H~N@sxd4=^uEj^mV2GDzva&%jv43A9%~@x}tCUJaN#=A1a=5pelm{Z< -T?r3|{Sds@`&jsu%~}a)z!LJ3mkLPd`(Y*@3svOjl;LpRHF}Q@&xUih0njNE)WDn3-=c@EBpiL^?bo( -aufp<iQCR21q_m*A1dZfy#oVL<(Z4`~!Sp1T|kVLHtw?gQx!oP)h>@6aWAK2ml;P_Er|0ik;;E005E! -001EX003}la4%nWWo~3|axY_OVRB?;bT4vcb9HQVWNBk`E^v8mP{B$AF%Z4)S3K~dAia1{7Cg13ir^O -MMMNYfligr86OycD|K6l)w^W?dFz?O0_eKZqkw$M^3)6cJ3A@+r`eXU9UOqiOZ?4h!WY`H?RYsp<b%k -6P*o~gl%E*Mhh%hb%R)Zv!TWrVFvBS;cZZWZsJI$)8@j^X+6H-SY8wsD5<rjog=R%Mj<@vrN2Nl>K+{ -VEdyTA7|hm+Rrq^1AKcC=a@7}AOuvx_*`RHm0Rel>+FMNYEHH|qHnZ!v}U8JFy|QJF<Gv}KWI#0u9Aq -NTr^RS7!@oV0NdRgC=rP)h>@6aWAK2ml;P_Euc&qVQ1&0000P001Tc003}la4%nWWo~3|axY_OVRB?; -bT4yaV`yP=b7gdJa&KZ~axQRrwOIRa<2Dlh-G9ZPK>?@rx=z|0u-@CnIgXMTb?m^8>*j)-K+CjEgciM -&l&t&L-$&|g$?5ih6_AI>nc;9A-^}Rbr2e5x=VmaX;h^t~rVd>W$Nk^w2<=JZgk~E~V=dOgXOjAA$w> -rsr~VXDGMfA1h3f!2-iGObhqUA&_d=z~18KXFN*MSe6d=3eFI=h}*Q8by)`$lEh=+m4b{tFFZR87&g+ -loOUiD6C`vSpquXMcbY0g5vq{ZG!tRBU*k+s|7s7*-C{wbYzI%g13OWvlQlr%B40Zn+o^$TCdH|Z-s) -M63ge$C*tixr|frl09v$h8(*dPmSOq)^fQKHMnZQcO2{{4lA^zRK=vEtD7tCY55Lncf@gt~BQqs8#q1 -%|FmyMdUG`G+&A!J|C6}iTTT4lm`D+EyZeYmLh+N`<iQoTyKNa$Ty=o4S9g8&<*#w#_{*jLJAMeL*a2 -h;KTyjnYCb(oATNyGEEerYX$Mv{2z!5?3=TV`>{gj?X&c>L}Ckfr6voF{&4rsFrGr`JxRDrr=0Ct6XZ -8tlJKqA4V;62AP^UQMflNzQxx!3BwLUGTKZ!!yB*JG)Ehm}AHB(>H<~?s04-dBT{t+FB(^&#AQ-pO%n -$ca90Kl~N&glcz01LHFnciCUk_#@XF8?p@q~JG-<!+^{rRvrq5Jvdemr&Ba4zSmiH$MqjGUQx1(90?O -Cm{_kU@O)2e>zYf^tb4_QK(2k0Yy=#1J97{onGTRQ}rD7c99!Kag0Fufi6+YJu26cvid%DY<`J$O^CB -qKh*SG5=Y@1yitJixos)OQm#+E>#d3(z_mbJLhL-op)!ycFu_AQ>+|&$QfOIBlw&&8Y_*Y3HLjJYr$( -Kx2}W-O@@e%7LC}JFK5wCBG|?@z?f_qP(tR#yzK;+c3Lf9xkN@Ei&Gxn+r@;C`w<eRK)^giX&<4wR(j -teLku;hAy!&&`<ICO9v_NlF2zQvWuwvXBntwXf=cqseaMqz?vUrQnd=JR04k)2>H65{62jfCO6IR4wl -1s~IyY3V(#UOh%XVFBgGb@R0{Hb*;&Zp=v?58FIHoox^_X;bDggSuaM!|WmsV1-&{8~ezH?dN3E@f}! -V*E37D`FG$>eUs7CelVJbLlizRl8Ga`|cR?tbXF)4_in`bhuyEnd8IozZxHbL&o=p*y>sIMdtl@CpQH -o%7#_5N7T33;L<Z{oixTifkOr2LHy|?RYZl&u1m}PW%0ZB^x<6y|>6Z7Y$3d<STMrfzsf*O}k>AfXh` -YdrJ&m@9vyT1g_==>-aLZAP%}_68M;rm<Vv=2<>KZ{8%#E6SzjoPnb^W-6#9n&2@`Vx|*l$OzYE<+U+ -<lAjSU8_JF*TxnuC*m6OkbIsk`6Ujvvx;~f(^#o$;7^8Y#79mr2Fi6aVEE*z9zj9BzlNMV3J$x4HZ#s -)CECrnK^5M8hjq!-=}=n#croF*VUzqmNq4)_<>1IER{Y!Jkxg|Y18(*bFyLSzRR0uvUsn<g!5Ha*iKs -H58`?O%@UX|x(4+?EAkykPd;@OR3U+u2Hwt$@;DY+{!zoc;d>Ggj(6ncS-&Uwds(EZVwW43>fimFW8p -20h8I6~ukPilHe$q?&#sV5Z2UY@mLv`I}y_oBu*Y!J^?lGk+1Eb1!7+3FLdq-GKzE#A?249?io@`&Fu -T@tj62wavOR-4UJBD)2q^P0x5s*Ni69Yz1twTD8zzhTMfZ-MCUen)e`HHVxVS$tqr~x7{LMjjzUCblu -PBr-X#_0eJZBv-qCwE8;n@<;(Oy{yH!bVRcKZR?!IPib{&tl)aKwQr!_amhHF-&6G4x1rF4ITb$-wg= -+kDE8UQ->trN4XEr?Qv%nZG+pRPa>4}BlD(z>S<;LQGt-P7>7(ln_1=H7Snu1Q{TmvRev)ZaQVeR?o% -DEnloU7B4uoL?H`Exg(Azm@ZOdswp$3wT@o4Mo3l{3Mh0FBVK+0K~J3zHEy;COz~X_>*{K$?B3r^jN= -bb|E=ShI(KUt5^eO!34dLjCb*HW?4=#G$NiP0V6;@uV_ceA0zy1EGl_KWy7^S@{r-p>D;s!P+{3=B^u -VrZ6+9n3#YP7Ola!7MNWzA5wyzMW}=+>f{wsco$*P4mbvsA|XOAcH2K|jFViw>}B&*ApU2xbI0Ub;zD -<KOk57&6={jYN`d<p;fMO#dR2Qua!L*#S&vssY946|Bx1gtG>?axK0U^NY6Vpx<XetN<W^34!vMwF{} -{`Cs+yvvjj(?kCE!V`Rt@G<3Sa6v3t#l{W2p|bubi3FpAAMg-NOi~xb0Ko@A{ddYC~koN-RybrD~eCC -SPry)`eMtD>?9uN#u=ylWM(2ZC&z3v~C{t?+-r)Wj%jH-9*~k?*<I;=KEa#&?*_dRp6)<T)kKB*~ANF -CtQz#!|q^K;X^-IvPhD0Zwy`E$07?Z)hni%H8ZoV`M9D(FA4#-=$1E1E<yD}>!{3<^^Q|zryi&ItLxW -u{%wbh#xwWM$#bsS24rp6K}=_Dq8<EmZ|Ha$KC7f<Im0>!?FYE3uBvxl4a(F^7HKloBh}C8_keE`HXQ -u!3?HhZs`mb+a@nIKF_hJRPbo1Swk$I{PHSFQqMN3%k3VmtGuWrCLLmM;Yz2~!gCYMKp0@12k_UN8*r -s5?Jq7ShMtCpM=qV0co+Rem6@O}&w^^y-?`np#(*v`awOVn9CHybg5PF(Eq4KmlRk(-)_5J(9*w>B!0 -Z>Z=1QY-O00;maO7>PFa+w;D1pojk5C8xs0001RX>c!Jc4cm4Z*nhVXkl_>WppodVq<e>a&L8TaB^>A -WpXZXd9_z<YwAc8{@!14pdVJjy0uI1_TF+A)TTAmsw7G&%M!+9)S)pWGn0z@>-U)?TBDI`KWyN_b<R1 -@d4K8UW%WlL=gA#V-|adB-=R)_*nOrGyq6c3G+uBTDlr!ci>WIkPD0a*{8z*=qe&t@xYD463#K$T6mi -2tBNc^UZC-2<+(Z}wwg>*fW4Ypr<cv%OH24SH=#Z^Ao|elr5g{`|CK^B0N~-J!fN3OE{vImM43B8K$q -<iKF=eq<8>m_ss&(shbA8<cL?wHZ+Hp*t<<;bI&D95wa!<N4F-lBR_*c{QA9x{pVd|YmBAzR;q$`4jh -K!`q#w=u#arlc3{;^nEy4?AjMW_f6LK=&yVrpZfJ5!vKmNT=4<@dCaDTOQ{#Ur6}{fLwymPEfx1^K0n -#B5`q(j<bv)-A);Qg4I&G?-AIYq&yBJmCuJN9i;cA%y!P<ca3QG_CBLUVMh~(Hi0xhR~w~d=~zD;sSK -5+om5cbkl5YwH1gB_)0Zqto=y$$_mzD^oC-jOKl~al_B`_G$N5?unQyy{{bKzU8DSH$|==+mc|VrfR| -p~ac?*oQ+x16uWiq355{lz;6*AxMS^oAv0TLh!0<}3#B5+V0A3ug+k-^A<M!S0o3;MY9S<Der^lg3Z5 -p+`vD=;W+a8T3-e~AMO(d7|ZHR3!tAe}>@eGhliAbVJn22@m`Ww=#VPG85f_-qLIppZ7h!`qlwfRyGW -0}k|e<AW2(0dXyN~CGfS_#w+%JV3@K>5sX16>g|8+6+O6HDG>q`-&xqnH8uF_uy_s3WzptS@cIUf;A@ -*H^7Su3JPCA1|jqat04)4xh`5i<v^xG>h3XS2A6#l$;_2NTF@CE+{@XPnI&uD22#^PZeL6nS0q=i7jT -ye455{rUXmSMm*j!yZ$h^ySx1!+y<RV|EcY{?LqJ|d~o^=l-b~6`059(o7>hQbq{!s_`X+z{uw-Zj`L -gr_{TnF4=i`6gtjMj8}yux=e!nTNXVXKnpF5#+u3px^d^IngW1&j#kZ&Y`VgSLXSYhVKGJ<*5!}wp9S -rv-zQ3n>OZoP#lJc3A3hMLFy$if5%1gW3ee>Kt3a^S>O6UQ7-x*9FQSxN$`oXuG>tNh#yGJQAsd~pat -*(IY!Fb|5yMC`Erl&=%mn+v7$vozrjp0SX7e#z=5ynhw@;hCBuLo+!ZGmNF9gX;mf<R#91wl>ocvh#Y -zi1#6p4088Q!K$+y}9G7??`zO28D4yOC7bx7Rx!7b{rhCpKznL6FkU8xvCr33xVQxZSd&lBa7{dN!XG -X3VxQ<?Jz&h!j>6641Z)J8v`-bFvlk3$|mIMuJDHPe66K=*Vr(|t}3iL=mLMp_t5fBnBO$9(4;Jm^R4 -+IG=30*x?|3t{?~wvRr<wvl;}+qU68q6Jm^|w8XJ|q90z&mJvbivZaj88pL&jmW$D^0F_~kv*)U0EZ< -P;CYrE6exIeIEmQ0&HW4A%ZsYBX&intoCahT1pKr<l7Mk2E74cWqm<xT9grCrK0#R+!=RjgXv4lCRQA -}N+(W)0HO$aJmwmM_GGDXgJO_73t9T<(R{zGQo~GUXw|ZBpDT+8#R_V5JFIuAnr<(fNV<c-M63#byzB -6vp4B3OH3Jr^i;kaTY+;z&um*)FeJr{NzABSAE5b_=4!+-ubH2rTu-T@Tn#L^?)Co9ADRebhR8nY?~N -={TO?%_O>Sk@dSUhK!K*3&@!K#H+jp5B$8`=We<Y-0b2gCneC6Yy>N|Uw%P5tX&&(Y(*L7-<;eImB5- -`OoEOC7h5yy`9W4F>@$#%Kk*ddWiKS{Ze{%d&o;C`9+8S)_{{T=+0|XQR000O897^_9`;4eQRs{e6rw -;%CApigXaA|NaUv_0~WN&gWV`yP=WMy<Ob82aGaB^>AWpXZXd9_w;Z`(Ey{_bCKNKnAW94~G$U~SN1j -$aaYeuE^V2#P?UCCcV1kp@X6Re$}Cdbcg7%diOnVv+YeclX@!sLRXd2X4oA(*?|?!|}o%!|iN2{1eXD -UbZg5*-=<Zwq=}zFcdxorXUhOSQwI?kX!I@t=B3{r<`eqmLvK^L$Rk4L;$*h1ML@7E063cE=5tynMX7 -eT;Z$S3z@zkF|35l);&pyrao+vl=0LRk%nuZpsSsR_OJu}_wRp4ibnGu48jmBW2?ZTipnSIXPFEI*OF -~wEo57DKHv(#oXBsmV&PV@2(ADl)Sv~d61@{V&mW};*+vqX7?lD^DJT)>XAJBH5)p$(I7sR<mC>UR8V -L7)6%z50@L7<UrI`Dej)_`R8L2|UyTux2RAHoWM>&<4%_`o6%tP>ud6X*(M8V#ysa>Vi!~|mJfxtu{e -X8yaP=@=)_Y;*0SKw{0UwF$IyC5XAi8k?LHTMSC!Jrceu^O^K_8KLqGWCJ+ly-;O;}0anM4z#ZU_&8R -G>F44GN3JdnL78&wF8621AG}+)?nd0+@LKgjk{RCjEP12kRdT<B?;FF295;tu{FF$#Nc*1n>r6B`pMK -;jBOhxOA7|D8d%PBxSkCxSgozq(jNB!Y)T7>jhIa$ml6j^83|O<r<$-(WvM@4c@+j2`miHU6wB;Uh8+ -b2kH|iGRSiSIw`slzsRX?N762Ez3(t~a?_l?xR2NyQ`gXDDy<Qi7>!T6j-$E>bjqnKzka`jdA-ixZls -2aG0b;M;_WRdY{dd=WfVGV)=N=d@M*nb#T((+)6cOlT&oC{lnmIaajsfO7J#R;3*(#<Db0hon)E?E=2 -RJ|yg~KC<;ep{>rLhkq;_Vox1#p<|*k)&*?c@;3V?0l}Rlb#)bzvpNrU2#Ef9*Z4zt^KNlYxHMM}b5e -lYydoj~rOpf<F#5yG=A5;;v2gD&4IxN=0>U*Pgrc<!C%>wOU?CluB1KP`jB6XA_PlY{URum*IqS-L|4 -((1EK@un?SP`{q$G&b)S~SK4)|EkxvEx){>O2Km|t0Ukl?rE`gq<_C)K@of1{U8kZRLyxpRMoApm8W& -3ivW1_dU!YzL;E?+dtSW+aQhLg(?Q#;)${{9N`IA(~lAock<InjB3E#$K`xE|)&ty+HMtf1|5K!u;s4 -iXrnz{y;owu*%U1iH=XeN&-alP{^55x>9ecT*4j&KB};x<|~_d*?2!pt0HSuo~uFh>*Tp{DI3>P{7md -5R!RnAjqRf%UjiINeL}odYNi&O`LagTvn&Th`J#^j0=UD7IUynNK(IwtZq^o{KjM@Gn37JG|GZl$ade -acOdI)J3-un59r_h8N6=erPsfr^}t@bV~i|Rqrj9jyoTpAU62P_3c$kP8}PG&Pdtpd$L?FM())454_t -BUhb#Pjl^z<pA9Envqj;(SW3$AKU$$t`&2k|%Z#t<Q|c-=oY)!1*Zw0qGL?U!=*J@=J+zJXO&;Fj7ig -K(hsSRD(#UX{P|4YNTzlmNsrjsYoYK)y(HEq7WwOQb|H|MO=pSSXX6apR>HkT+7Qq!pkh$$Y)+IQ+Kx -(DAE{dNLT=gF-Q*5Kuy6oM9V=x*!<DoNM+<iE1`DPKfLc5fUc)N4)bC0ymN4XEDvZm;?&jk;dPq|0Y_ -EWZQ-!Cm^xOQCU-Wub}Y;=I{{JVqPcnhYG>Xtf+sJ!KZP!QdG3%%lQDbz9^s#AZg;E^aLI(Kw{Zf=*e -6nW+m`QEO_(mmkrwEhNAO9KQH00008031s8R!S>wIo1yV0024w04M+e0B~t=FJE?LZe(wAFJow7a%5$ -6FLiEdc4cyNVQge&bY)|7Z*nehdDR>JciPDDcmEYz{H_PDpaY!b9MZei#^BJy*w5gXrb!+w(gLc5M75 -F$cfJ1Yo!QmLN?Kva<@H_lau<7dW_EYJXLfUXs{hDk?|LvI!$G$<8u!TM@V5ICDS<sbIVF=7Be%Z2v| -Z|uu4ge~b8_STY&#Am53c>hd=4|_iu#-d#9{$61J5TWfEp(;g@J1aHh^8RC+2t?<`Zv00u5<^AF+U&b -i-h1y$)U5q=D_Z9DemTo-cj@!sO2L<+$lH8Ze8@cY<PZDe5Dw%?_4Y1*F=ok#@7$0uowqgIqWcxkp$| -?ipwP6SL$=x}F>O_B@31Re7xgBZS;g|B>9;&eFHnq(NYZ0SP>Ew+mLDD<H<J9sEZf59ht)yn;g!gMg) -uJ@=`<L+&no#t8Qo!4`J@hU~nMnA9acvurNc2Tlcqy4H7|5BO`(vKKoX3SA4%i^mF>zveNMuSXAL$T% -E@Tr-#Xu>4&(cWe`ohqlRF&IsjXgJXP^va*jG8Alr-eGkYB_P-&_hIw2Y#SbH-ZM5RmB8qi5E2+`|_Y -dOUAYu(Ry(12Y%a1V)Eeq0<TEun**%b%}egJ}S&@HGRnKKe{wg{a%Pykr+ZZLU!`!FFFqxa<9#r^%oX -!8CIz=9}X76dFQ+3SsC17SFoPu*Y#8wUb6z5DK4z__>^3<s0<xcmNKGU|=Tq<?!)F38=*{bbO67+&0y -yNCO`+i}kT;W8Gp7@4VKa>C*TkX(DfNiY&>J6s<9J&2dX1|5s6=o14mn+&YVA`~=avpY(Lj^{4Lc>yJ -5=o?}$i0cJ)vh{7y9Z=7Lbb(4L-#S=@Y1GNf764KA(E$;R0ljZ8fOOySJiksZJsu$F%?02#+pSi!(K> -6k2zeO8NZChvqpJg*&*@2}QaQQttk7Y=3Kw|h+HgMHd*XPmVt<o59*1%cM_t+G3RMZgH(;E=h!Zgfj1 -9T;K(iV8EkK>kVi~}cadOh3At;UC$(nc7j+{l-%4;dOV(ZnMsVh)dV9l2fb;aVOx~Bhxefw-d@c?*4) -RZ%$sh|u11stG7x#<bMoSc9f<2I1C$>ZM~ZwZSo<6l9r3m-NU>^4X@8Xbal)yb_eN$S**o8YS?q!D@Y -rSFBCjqlBYQxRGhX2vYI#+f@YlSR=&X8@TSf>(+F2JR*d#sN5kIvG-T8PX-|+Yb1KIzcShu$YZ;xtU# -{$4%WD;9YFDl?5G&u?*Onn(#Muvw%0$yvNZj=-lKQcHCTc$3<TFjE7EO*=7*K-HVYc7>Pi*p59nXFAN -r~S7+@k=)<IsgAw3Kq}K(b=$t_KA*e0*H^$-FtN;Y6FVRKt0LLgzCNT{|S{8sULf1r<5!4|1fa-xpf{ -F)#L%|_Ot_q^jg89r1lB_`P9vq(Bh)0$%NMQ}+6K){2ZqRe)f=<hy!TUoLhUtZE!7yk_91S^o@tvUOh -i*qwHVk17o#@y23&{^f=2UB07-PYhRps8AP3Jo}QGVKVJkD}Rk~QF~e*gd}`ICg_;)k2TXmImzGo8G> -?~UKy4zB>TX|$VS^6lXI?ey~fq&L0lO?ur4gqa_}WDV0>Z)}HE=amm1Kc6=nA3yi|pDJ?c-nd%|UH#Z -RJNx&4eyK&U?*^m8$iGg=55~7sM7z1T1K?kh(^hQmHO|jpzHYQC9a4E`yOy`*jaK_*yHeLcwR2ESE!4 -{#R7(r>DhKsS3-x^t>P!oDo`ZU+g?gQXdZC4Co#nv3kHCHv|A$nYa?lOPj#fdi;hpcki#6Ne8)h0?NM -^Q6!}FKlow{_*cmou^;m|pActioS8j3Cv=s>(#(*S~+j5<W1h)@xe<-%fow)P;8Skn#q{Fsu+oaT@!K -SFNE1F%ILANH;<y6=n9hA?B>2MKzwIs`UvylOWQ1QaVm&<lAl%a`-^SxczY^=0e4d6v;87MhJmA1Awa -uV1`Yr@(nOTCW_2li)Mq=R`s$(ta0YI>o3yomLYx&YVR`1mg5^x)5=xlZ#Wpv+RIzF&w6tGNYJ+Cj?1 -N9k!(Au0!UY=Kx}#I*=m^*cxg4NJgH^I+-mPQwVv}$c0X&3+*IP`$InbeFCCLBu68PA4U933@Jg*F3v -k5bNEnL_QR(vp7ewrCGusoOG+)$Sr82_T+hy?9v|kLMl(0<L|iW*|C-&11(Pwab4Ocx!4$GxS~6{8ax -&$Ze*i?9su+;^_of%)?qHC^fEXGGh5`IM3c1OwqC_yQ{FVcQ>`g+*G|qrHITT~n=~QUZw3b_TMfr4Vy -E10!52MpVfYc2a<j4XDd1Cahpaf7J2fM^_6dqL(Ug)vy2B{kREC_wK$kH;3nZu+s(PT=9W-!Xg=F~VP -tWoEZb#f$9_aS+dP|TWfMbQInB?KkK3%cznfx>(zT7=B0`50AecB(0H5h6Ir4I+zY_+tVIS-j6?u~(b -T>V$hDYw}!YM_eW%NkR;9WU*-3P<aLb0>$2(1zQHyG6hGm<4iOX(yY$%%y11qL@^|PP{jqH*%vHbW8D -Rd{%Ur7fO&jHTZcNk)N^M%SQ%7eas`SxKdzycg(y(ML?NysO0+slHAg4Wc$p_-j3mfaU>t-MQ9^zYT$ -aPwTiJbj#wI585laU!(9nHEC8LRQ37f#BIQDyj6%<Cxm0D%^%wbQ|4N_Is7903oEYR<ws$*3#n;}^=j -JTFCR}2jeh(1v#Wbq16p1{s$vxE)};`SRDC1(t!gES(e5@n3-0s&kgYE>l2`qE4GgFt^pyUa%WM=uE3 -o5g?|8*KWeMHhb6s2?_)NgD$q$-ZjJp`jLXy#Q+=MW#x#i8@=llTHJRJ*;kk)OH1C4`=!ow}n<0AH^2 -KzDg_+mAy!Kg?<Q@1?rG$TIh);ehA}wR}pKsmC+FVr1L#dA(3pNaEAcf+;+jL!Oc`-JViHaSsF0}T67 -GOpw&{^r=)NDJcx7#jq1_$wl2B6y#dXK6;06)#BLn05PTZ87$g0dV;{>$H=EyT)|X{>c1i|OU5#!I4& -+0K5KTT<vre{5>;M%9cn?`!1{vtbhcF~6Vpe6-$N&OUz&OwGLay5DlgmqT*(XS}ah@z$0L?l4!n}~W5 -(Pvme%=@lt}Asta3(;s^66g!rUZ?OhSaZ_5$2TeBF7Bypu=9B6b3JQH7%R^ebVodW)uGiPMx*u#Ib|G -VGZV5Hg&a3JB?5Px8F|@=k{_R)}Gi}kt8bl_}a?H*GlC;#>^`pKlgjseE9ge*~I@UdJc#q#2o038!zf -4bVD9OlH!>GxMa`AdkHuYsh+)PwQFCbLZ@VMdv)89=}yukiu?@^H`p1I>5nXs4KkLVP8P&}d0sF7-oP -rg)qM5hRYRPkfxG=(C@IQ9%0SAa-_y$?QYxX7&&s0RdU5vuBMaQ^??M);!^pXc{Z4|&9z^UO$X@rLI0 -i%k$FL9nImdvVk3$@TCa+X7Y>egk@S?2zAzk)UtPG<<Xiq3dS$%;he)*6tf}o2CA~}O(MK;6mo(vMjE -&KL~$qEPaGLf@m-Ls$&@<pgtC}GfE*^o`jq5$!kym992Um<db7xV8-kx)`4bhNxFc6kjB`GvVk(~A-Y -l~*PS&7#Iu525v3nG=7=8-cF2o#XB2YoR}pG+$DQ9Dh7qO>Ssk;T0|Rq0#DmQZ>b8p94&b#3ixgd5=o -EF0&-M*}xHal#|KJY{<5yp@4@}h{>p$_&9yyc5HEm_YrFQty()NYFw_KOC+b>jTurVgVD8K_wqzU?Uq -QXK&^lKFuIx!CM5zpBFEFN9+#Wga5}`1Yl$p@Knhi@eGONiobYIuBpnaOW=Y<M)bTD^B<}fEZFD=WPz -t%IgT<v5lbs##Z|2H&MXi}HHu6hBb*2z|`wwBa7(d(1cB;Eded0y+3GPmK&GZTZFAB0dgMe<X(#4Epo -MU3i1^rB|=ecG{A{`AR2rJLsYQE!I)0>8-`|>|F56up~%tSPVjyIE1QZdYLvZB1TC;_-?8_cLjS}Ceb -(T3q<DPDHrgC@v&TJ7(ZL!6?6kNYl`C;KRPvFYG@F&Gvm!$Ez;MKZRHLZ7TbK6V3FMGH}gAr#bWVkYj -siW@UD5{E4UL*Acj;BvNtyrU-W8ZtJYuG6PX;;|a;mf_<pVc9E|7#{ir2Ip1j;k>ftcw@K>J`P&X@$M -a8UwI2<-O!Z_XHTfxO=`&^b9l~{lcZyhE${6pCJK@V!#kwhbBdxBe=5+5bqYm~;zm(Jj@an_?I+dg2^ -UrnT!C850rjrtkNFF}(d}po<csGjJ)42ahHF)G&pWEMlFF+LUwy-JG;;P`OCJ5`)^NnG-|97!Z9n5V@ -l(C$!M;);X8h$*-cg_{9`ad#h+oksCdb^DUEn9K=e5DA@RH-;5+Z*AA{I}2`SMXqa(k6t*y{WB<G|a< -OQE0Rmw0CAXD)@Jhe2yb!i{w1lq~QWTtX!6X)E38j?AujCw`|?Y;M=p7emn_M@Ammj_a5?i}htzC$m) -4@EdM$7R#`tF?~v|Jonpx%so*Wh}EKqV#h8gZgE@cz4>z;ZB^g1wT-GA$Fzr)i(|uL^Ke<MxSs44$4^ -QBP{}l~uh@d3xj`(Fg>qUKL7Y@#v@D>H3le43@V*9xd~I@Ee<Jez^3AN+EqZ>ja6RTV>c^b%K!)-)3y -RONzDfj?enD|4`PUTqt?B2f4zOu7OW<@=zSLEt7M11J_{CROg-P9(OPpwVh)~gg)N?|=tum$+#-71WQ -1aeY0YSe|)i3y?<a9xMG+tK?O0a55FB7hcjTU^_9b~bU4q5@;@wT|d>|*M#hJerrCBsK$d(TSqlsrHp -6+O{Po4#_ZE)T#NVj>zp^pcK}aJt1u{~BuSbKujMUISmm*$dm0HGxi*ibqzPvdK#_U0*z+poxfjSdAb -BuJSq(`BiMS?H5s<?A3wz)3N?uywV}j<DIlx7m<mF8z!#4({VU0<&VtLF|zbgP>E~MFd}_7xStQz3^M -qxN~IQS<^kOJvdalIwj5heD^HD|EtnPK*;gVfA#3Q#S~T)F>0(^^XvhHeN2#Pnk?|gQ-&-sgBvVgpi2 -s18S|fi>Uyoh&E+0x7gZhU3o@RX^!-z|_6{HSO&D!g5jn6a~D3)VYiju>~C0@NxkB(o_#?cw76!zF|S -u~3%DK7(5f_2S5aVYU7@rly2sDzBYM=9s)UU2*>-*EB`&-(Chc*(7p`W;m=<&gH*I~s(;t1JA9s)8SL -cu7ux-;u2QBDQ4&dN|`UXos;bgK{|YQpRa&i~j;pO9KQH00008031s8RszNx2vG<C068H503-ka0B~t -=FJE?LZe(wAFJow7a%5$6FLiWgF*Y+YaB^>AWpXZXdF@&MZ{j!>|Gj_3yH=-#9ZCu9R&$-}==ud_+3n -D((A%5qjUp2quxes9c1qdP{qOgl69OSgq22Ckb-J_?V88eA`|f9FZ?E`)^VX+M7p^)Nt!}Rc=U3MkKS -BxZ-VXl3g$hh429Z%=MORO71mFjzRRI5Fk8C6bvt<3T&>+PiWZ@j}s~>U>TKQ(iLjD2fDguuM5b~kWF -&+nDfCa+?6(avc4TV3ap(q&g5X_i^;o(Gs^6igL-8;DATI1X&9`KM!xQPZ*c*uMuJRWEcOv9AM^q3D} -Ft>bd5~P<10&Rux%m@{H04{Kz)_&xn#t~@NoyBSiVhvOX6=q2O5Y&_yt0?pwBtz*Iob^HzEHxd12rTS -aO;N2e0-~ZbAtekrM4J1NtRVu@!cU$4_t$rQIO~3apU!S?&$|6DACT6J70&WU9wUj#R0;$}twI)<ISP -&dpIf&V-y_G_dFQIr|3cEYJN<5}*Ms);Eu6v4*=@gbad&lg3paPSH`l#Z9iYeg!o+0EA|t0J_7QTT(2 -_%Ln2<VF{R_HRqkwV<WA@0=%^nwzC>{e(P3JH2p;W=h>WeH(gMI+vL!e9zW}(2?F)Hs}L|OW`2A#mG* -Wfz`iCFL;(FHwZZwnux+fu2p2Ioo}BK>@Zyp5*gH1?gth68Zd!;!KFTHVVnQ)q9;57h+Bd@4{Ybeakc -s;W_ty8xx!iRbIyn1z~~X{ZKhoP_QI2YcMy*ujL52NC8(LO?T!+cOx9J3Bj`WLm>rzwI0!He;?z1_RR -<vln)EckQPQ*qBLEJYiHT^`NbfmFGoa$ODht4E%+M3Ny-ZU89`Ec=j>$Ey`@nDUYl>d?7i7zLkNZ55F -8Xp(536p9e#M6#xeZVwC)<T7))^i9j2MtJN%qwvv#^q<G*^fqylU|NB4%B+OT+zO&3W-WZIO8UmS*4T -Kb!4;UbrTXy|(3i5UdYz}b3=EOOQC{Tw>9OwAFwNRe&o}<0UQn;Fte4*YW3k5fVV`3~!ZNKbc?#~dLN -{1Q=4?~}P&O9t5nikPi9tYf~-10e>B&DYUUkrI*$OTiXogRg@1^nFUx|r*?Jr^_Ey=?Vc7yZt47fzws -NLFNM%O_L;VaT`!Ldp!n;!jiVQC%X<HTeXsupj@xJi%fdNwq&!S{Pg22(R^z8(gAw>E52<Lby(&{+FX -zxgqz#bwwbI>sHV(eiimVLRSSm4mf&rG{tbN)>FFbatb->i^T{yJ7dLinQ>7poV{;+g>T^~OOrTp6Pc -?iRd9ASbLxrlx}UPdKSwMEszLJqHA{eTz@!+uk@2150l~JJ)chGDxtZv&xdqZ;vkb`>p*HTAN#E6&z- -ojFx>F`X7YnxaxmzylR?KB9ha3wSdNqxRcwj>~EV%yQvG9LaZ^{fy@i(l%=vOmOgCN=1+<;B^G8V8gT -808{?6K0?rLrvN3)@txOCowgZlW-NU7X&h`Q1$ras!0i1VQ$D4ua-4LOd@8%`YML$Y?B*#%>8}f?F$X -1U4FWirII|OfOk5irA>k><g6LWyZ28f;_osTddI5b4y-dDrR!r6ZTYb>KFmpygh)UdZU^HMsxjY;ARF -mA2TWLKq<L|O(d{uW9VAc0(GnFa%A{ECX8i!FEt01jHh!&i%QYK8fr|H-Cr{(gqufl-VCYvYmnB;?fu -~^!LYe6tdJ>Tx!dI*((UVp`JeOrZ|HWp+3mJAzufJsHR!F~UMciDdh1<Ts#MpEmVw*OfR(};^RCd@Z? -IgEzsMC^`0G_^`uqE<QR=TZF<^neoML~yNq7|dt2n<b0X2d)2i@fX)yiB0>ibUY^~Jpi%-4dpesQ%x& -)*X?>Wk=dz;=yz__WsubW32DqoXypV)dPrFCJJDBzI>awlf?WPmSb(efz^{wDC!q`I9H3A@xi#<>mX7 -5`Pe7N;)=Xs!t9Mcu=2-2QkItHLI&|bU?ojVkrt0Lw&MwM4D09{Au;PLJuCS?HoGzBg)|9W-ANUQ)IR -NTF|Ehji<}^@YmCL0_!z?#i8~x7uK4~l2b-MjQ9o(4xiDW`Md^)>l!r6G;m&{flM_hj8*42AFFhhd3~ -%BcP3U>g4H=*3s&d&*<iKdM?sni&NMJH;cM?bSwNKB-ZtASru2kn<<d2njfFRcNu&*3POYw)BE>80<H -tF!>?<kNEWQ=Tp^JFth3ViNm!(5mWVSq$X8nx-ix44FN{2W^&a-rBY;1q>%|tytT*j+i<X3B#td>9fX -HYpFkBjtq!3wWE$rmrbN$}S@PHu3V^CpgyTRP5pk>m2Hn;o}th1cGqyu@(@wa@2#n3OpxP%fS8<M#>o -$sIj?(3_!oT=-V6xRz^DY4NCfq#zk_umw3<G-K%j{Ld@bXsNumuoF2Jeel*z8snV8VTrcScO4eIx|uV --2gG7EPOxixJ$v)yXpJ2;^6cJLqE4oTi;eQ`6r62+zut3}AY{FgnNE6ROQGXeLo}SfAhMIomb^Gf7ME -Jdbty*6zcUx6-Rr*lxmC;FqPDN^x|eRJ|DUXqd-j#C2$-y)0G=4)hGb#0jqR!e@v=E-MjX!s$=eZ+SE -|&U)ZaG>`iSCd-i3fG#b5!Q8ucR_!METvnn&weAnA+)%0RbtM-KzEO7cFEUS7p7iIBi!!8eB9zR<2uu -e-moZ^mkCXp+;!NIY_grrRnIo4wHI?uygN&1<&WaPgMy3(=_Gtw(>Qq-f=DJ#&QA%amNQZbuv6>26D# -!>#7B5H)Npd)n&Ge*sWS0|XQR000O897^_9|3CY<UjzUE{0aa7ApigXaA|NaUv_0~WN&gWV`yP=WMy< -Ob#!JpaB^>AWpXZXd97A$Z{kJ}{?4x$C0`&VZpi7X<kFl<z$B<(BirZ{Rh6~aYgonJMZ4>y?yv8xZSW -b0uBqxz@w`0q%roO5=jW#%c(5O*4$P(_+wpC9n7O0h;hos?&N&1d3a(^p#z_hz5mR6aGVwP{Q(_6Zh6 -rs|XBRr<Of!re(^r~`EtMb=&?hi3-l1AWWJ}SMWjSXN(M)iKuW~D7`GUZ(5VEpIk`hg0SQRDWaVa7V* -0#V>8x7r24+gilHwbYu+=5}6f@fkCcvMmOO5>`Nk>FagRj!5Xs@@m00L+Pefdxy~l4WoS$WVh8uqgCK -@VbALCS@y0WMNcFB&DE4qTi6%9TXymh;WcJW~zcmAv6#k|12ctXCh`vVN5xXu^q!&Q<<rqhL6q?W>g_ -lc%+<4>}HX#QWjzIj75|y3Pi!y*wm&`YGR1^H4&HygfG>-1Io~EYQIvc&;r-iU{|e1?1PZdCED=EX>L -to4@no0;xyzg(>f_Z(`gKhm#`bu9{)f<Z1fG+2v!twMUy=3BLc?4w`uU?E&~`k&+u*Nc|#|7zQb5l8o -fBb3W;Uglp!#7B?;FB5=Vf!?Twx=WB4$gO@n8{eliUl+xKDOdN72=&<m!c<!tD|V(Beh-?jjJN_P?)F -;9uSmpDPlOrVl6)r6(0YW*3<tB_zC!-l+49CJh&ZWIvwM7G6;W|#`TF8jrlM$kK832>qN@Fp4V4sPGk -bP=VQZy%RFvik6OfI)=6q&NZ}(<dxJ=t(Ms?8Adl+Jw%Bn0s|S7+hTrK3xp}mOfhEd%$+a|MG~OcRGm -_8R%lmuq~XL`E-^X3DzDf+7PLz-b%4TUFwJt8hxr4rEwRCp9o(ojhmN|Xu~+&N0%Poc;=O-PN6)<FQ| -^HU1eAw4D>Fkj?Pw*QrVtlFu4i+c{q2+_N>$CL@80Kv{tOTEsl67@J@j1*dcD97cM;a0q)_-`rIiUF- -;&08Q!5V>?)cjJ-GY|j^MOPG>^*hGIe{_KCaieFryYAM2hz(TJE+8AEbsTM3}9@Qf$Mk?Ur}}HI~~`t -qeclxyw3D^0fPyNa_C#$B&@8*fXftBIG2a4H3L34G&3mE;*d#I=Q?#dk-ije4Uf^k3i0v<`YWeGP;jP -RMXJJS3CQMc~_O$9G>FO67c(7YLLyTh|J~NgX~@A*$HKmP>2KZIQ>gkzHZcO<>4J@r{1?V+p;~+_1dK -x^>@|2XKXoc5YFwRj1~UmzI>?kH1HAVL$xRF(iw--;D4y@2YB3%i(}e>wrgCgD3_9QUG8B@dAA2&@8S -A5yP@A&+@J1Y(CHkO*z;<&IJN_O6il7RFNf`vNhKS>6Bbh*QA4D%`%kVHjFv$dJb5<0%*Ovs*uzb4m^ -K@Kz+wNTB&i^}DVy_@z0mTk-QFH`-&W{X_@&LaPQIvDy>%%sE{+je$u;+Zb%p<aRY-?@)z*IiP)h>@6 -aWAK2ml;P_Ew(pokO_*008s=0015U003}la4%nWWo~3|axY_OVRB?;bT4*ga&u{KZZ2?nO^>lo#4r#< -dw<2q)m>vjL30ukLQv3v1c)|rl1;KY+Z%b;2lw|xr$eHgnOD5=-n-9*6<NlX2=v2h3MuIf6Da33@pMK -dt4t>@Gi)K8s47cAX}PBgnJ_G|j%04ClJU*9aDkGw)kKmamJyff%0XMd#^D%e(%{@7Hd~|~@DvLkQ!E -z@yD^r~|HX$nM^0goymx-{c3pS%=sMiP--X+7<K5Tu`^U@M>(>0+gKj@;=Y!w7Ur<W}1QY-O00;maO7 ->O&00002000000000Z0001RX>c!Jc4cm4Z*nhVXkl_>WppoNY-ulFUukY>bYEXCaCrj&P)h>@6aWAK2 -ml;P_ExC1H<bAV0062C001Qb003}la4%nWWo~3|axY_OVRB?;bT4CUX)j}FVRB?;bY)|7E^v9RR^M;i -HV}T-UvXej)E;c1DbN=I+OVzbRv=4*G<z7bK&B<iCPIlCN!c}m{O`LXC0UA{p#!D|TjCu*-p}vI7>mB --Mm7%iTbXac@dsf+*8;SGN*e*CR010Awib9@fDw&0j#R*Hg)~qICvqo>NYuG5WWBLb^vhRXHA*B&6ah -Z3A>VQn6v66BcuacHh+*i<>-C}p_OdSY-YzfRy?=)vZVS1tOIhF<0^Y{&2lW9U0d8|CPn0j>w^8(|gj -)Abpihm_JCqj-kgjuCqEE7JS_h@k6<CL^#8JdBKv5(savHa88g8uUzwN<BUfUfSbR4?nPfi%VR$>8{( -z*qFZk*ILS5Z)o<6be#cEVVcWmzw3Ye{Qdg=k?CI^92d!G}(OW)-5u@LQihLeb^S2S&+S*krKdZhdgV --Y>kY<`u@uIs+*%?<EU@O4hRCDuK1u3WXoJvLcA=R=29ijG)b#5*wZ$p6ktF`TgMO9pc|7elG=({%?e -9O%0rmrdS2L*Yt`hq>QY|R_Ln;bcxEoP|(-lm36cl0Bjs;E5VHLs(1Moq5La24IAM+_6RZ#doW+(d6W -p+2Wku(qIHG8B<`%i@=^+OfUeT2#~I-c5gr4b4<UT<%di&^BoHKn$>fKJ`S&MuqHotq7Xsrf{%+-tD^ -WZ9!^pN5%z)L3vbkDKQr2R2Ps(m~4kA6bIQJkW#)~3^&DBMG@W(HwKIq&Sewfk1d=R&BDMayX@fEpXT -#kLJTVD>8VWo9L8Mk~#k>ozxWow8WV2O=yoXlIrjXFSUMcFElWr#X2u*`n?{Chkcfs!^ZkOGrQ<kzVC -5aJT&N?S1tRvBSi<<O5d4zE!M(l^wAVnPc9tvlA|nBDg~P9-Os%Que{;->^2Pqm*;*l$oeuA$nSXpG2 -uM5M@|&N^<XxU6SLdb{M<*+gl+z3<WGD~ytF{Hq~ceewK;!$M&n=DMnAZun#)R$Ea``cZ=YiS@npWo{ -kjNEFki4o6>heLrkoAk|a2Y$I}6N>Oyfs6T5-XT_&&gHwR)Twt{$bH{{!cahw$Rv;~vMS(SHu@;LlO9 -UH6+%xg=75s`MbKXa<;O7N#Z9hBWA3OQAm&^t;M?{{^CdRYdZyn0hiF{-cHsFPtosVpbc~NA&(Z_?CA -BNp*pl2&old_L=@P3Qsf239HqrImwB_9N}AsJvQN&?KVjyRT75+>?=1W4gchp-UvEw0R%S+n_3t40l* -vhPM4JIM5ovKR*Sx-Cm#x)Jv+-Yu71d!BfBjnf5lT_aUYh6mA$!(ih@hNx#69PXz<iUSq1lR480_8)8 -+8-bPu`aCi0=EVsyVSX$V8~<;nExQ{ETMR(QmF_Jq+3Oh&@Xg%9<LFNF#75^(8nF$!<NO~TXg$BoqhV -H*G$=?A`vN=?AU1p%OUs=*%;r;SZYX8bp7GZIsat>DGi_Z{3P-n4+<;>rJ=zI%h~XNE&jLGz`1$tca` -^$=ULu?FaG&s8749c%#p{RA_f#KpgB0m?&OixlRNQpXtqC{Hm>3B^Vb8JRD9H;lb!_GtnB|f*|EfnR? -jK@>v}+1s%v9kxL(hck+%0l~yujd7`7QdfmiioZAB(dWi=YzTUod4(m+KNQ!hTx@DPBsmjOI?3v5;gx -gyzvdP)h>@6aWAK2ml;P_ErD@0006200000001Ze003}la4%nWWo~3|axY_OVRB?;bT4gXbYWy+bYU- -FUukY>bYEXCaCrj&P)h>@6aWAK2ml;P_Et9qQrImK008(j001cf003}la4%nWWo~3|axY_OVRB?;bT4 -gXbYWy+bYU-SVQy!2VP|D?E^v9xTia6;+17vOuh<_x9H<YdqmH9e#aD%Z%8V!q;^@>=rju+)OQ$=hFK -}?mD!E?-6j9`&2;T34c<F#T58XXA^*uD5rzCHC{*$wIcP^cz2@Ge>%+az;r`KM4t>0ezx7NO-w6wIO3 -Cm27kr~AJ1w}?2!*?i52bPc`;UMz&AVCpPSO{Vc$s)t@EZ>0w@QB(4k-jTwfp0i`q({beAx3P$a<eG- -u_#p`R3|7L=)jIHyMY|SB9cSUMnWtPpFoi!D<ZBcDQOL{lA{~`_cOGO;E1HHLgBQv?V=F2Unv3THHc* -t5rvC5AXk-?f>$N>dr20lxokKhh%#cN0L%I~EX!b>BOv!gTmmOpNv=SrA~GxR3|CUJ2eqE6KUIxtgF$ -q*({`TWQQ5br8V^;TEiWl432=-gp%W?Ns!I_3f!^~VWwPc24($qOBas2q##Sn^8&|VkjEHz9jH^*AI2 -TgF&?9|z+PI*opzt*S^sE%BavFm-IMo<DcPV5g!AEheM*Auq|50PhDfIRJ!<Bmx+m0fFB(Z)DbnbV*w -}-+Wv2Iqv6}H0sKVTI&g&5u$*#NlB2_1m7?Y1N%5leur+rq3hxmJQ6pFKv^=v)Zf>OeavMzt+<jg2TZ -a!3lL!;0ktoDzgEp^-%K#6eFZQy9CAaCPPv1kPm!jVB4qk~0G7C)ABmH^a+F7LcSwoPgqkC?H}+#>k0 -DL3DSKRRm)sBcVOdUxtf>7(bS?9WephK{hw&|0ZQbt59P*`Y~hskAS78!#}o)3jVPI^#}?~A+87U7*G -P!83<)LB*2JKTvHu6@Pess>$BG7THVcdvOY;>MA;XiJmFY>4!(`xAj=^8OB*FB<IGbCv2Oe~5u6m6ZV -rOpdz4atvbu8S35D2gV4)%TFxx~xKLl|*^7%lG?DLgn`j#-)o(*be-lQl0_n_kkRD(_myesgtky~6YF -Sy`69gpn$Y-D8gQ0}pn6>7_lMDbn=0ohJ_Ija0W`>{F;iW0$MS$S0kuJRnbs%$Q*vC+zXk;VpIra$Hi -WIzFl%;#K@%w(&{K$OM4Jx@(_P7uNC3{C~nm41W%w<a$OxTSz0aFMoKHN_nCO=pvL{}8?~+u9gT!40A -)h-IZs3WO=;5SW)4?VuwI5Tw7O3|Lc|2foXe($cDn0?U_Ca>c<ifT}G0w!FOD4TtTQJ<7St^1}s`=6~ -g$JtB^X5Dv7d9X1e6Sw|zlU14Y`Qp+k(%C;OF+Dm`xyj=5B*Z+u@OYMo>S%JDJ1KGy-d_gt<;a0`UI4 -qUf4p2-xt88<mZdMMJmHJ$OWIu@*>Ia^7kWyu*WzgmG(J=M-E|>k3G4OIZa6-w6+LOo5)*fqU0egRPx -T02M{A{4KI+M=Ja;TvuEl|h?HKmML>M{9i>@m!~*n`ethmF$-1oP0|E`{U}Bio4-lyZ<zg05BoR#>Wl -d>3G-1ZC`iB8r%&$u%H^!<Ywdgo*CX274TpR2U?K*e-;m9tq$@AxK;t40r@`Gib5f=J!{H>}o8G8Q#u -)5k-V5fmScnejsSnc%<pj*I!i?kXp_6rBFOn9y)a3aOKxD7|u1GtUq<GrE>4S1NL)W^TB<8cRqlE(jN -+$uBJ4xoVcHOka(DQlz5zYl6abUmUy0ck$9PSm3W<alUPZtCf+9267Lf46CV;E6KW!wSWj#uJ|#XUz9 -fE5UP<;Q`;z_1f#hIvC^?)QNscDRl2?=C$%*7-@>=qGa;kJ|;sg&8Pm%+P_sL%9@0rhjSWP@mjwROM- -?OyI<<5VlM=-~TiUh@Bk??T|d4-T4?<9o0Fg}on@m~6D4~~s?6BDTG5m}Cd*!6_kx^7KbH>_#vrgh8e -wPvi_){r%4&07oB9qX>OXx+1xtYz!I^}w369$JsA$JP_;srABoX}z*uTW_otYt?#dty%A^_pvGKgY_{ -sV@0iXYs30veYU<>KgX`bdSiXD{@7w{AT}5qiVep`Vpn71v5DAZ?Arf-Dn1lo*$U|T5?cgqE3s=nsti -6{0o9+Oo0Wp$P`D08+-5W~GM<Cc@rMt_fde~0pJG3|1@>9wpIOfV`#j_+?v}a*?pf4FV`G3jpuP>}cL -CsG8+X9mMjY^7fd@4<RET)pB^(G9LECxng>>MOC(_>Kk{jrKc|iZ&8(wW$pU|&q&-4ZDl`*2N8FR+6@ -km=Y-e{kVFIulYu1{*C`n)z_3~STItg&P~)aH%X+Fj#wafps{Oc$@cqB(`(nS4a*86MVUMIcEDcwrJ` -c8Q4-Y?-J0SlpMQgEImwDz|{^v8HN|v>|O)8!YbrQ9+d0AkO#u7#71tCtgax({FDI{8RjXsD02rY4?6 -xU(^P)8SPGS=QAsm>f?+OktGaOO92uh#+}80u-|*(fVthW&%r#;_j`M5u9|PnHS?YM-uz&GG*vTduA3 -X?C-bxU#r%2m%4Y9o|7PFjz~<oQ(B|;w$mXc|(tKsUHs5THZ%%AZnp5TtbK1OV-ZE#*+vcn}XU>}o<{ -k5{xoF-qm&|4J0sMVvJ~AJhPt2$0GjqrsF-OfYbKIOXx8WXhX>$Us`B-hvLub8U+-g3yscnxU=%yt+@ -#X)WINM2Jd3e<Xt5{z%JQVmM!Geq7Wucfi85vK1++XiOrz_C83iMrty*+W>uA=SjH-@fIxZMTT7J<b0 -1NtZ|4?6U_A^j11QGegbg?S+&O2%DTF<y0Dsy$MtkJL9DJ*M9|u0L%2Mt}G1iKdgMn$NTtcUsRHFWW8 -@4~DkXOcSd05!@bO^t(bnfGv^jxHc`}37+)Vk<O~NtUc3SX=~a#kk6FXtBq<C+O#&mbN*?DWdsu}NIw -mdEbzrEpp1woD)MeA=&M{<_UFNJ&<({NR9AtHRv=@kA{({mE6@e_>N8@*)M^RVBd#W#!0_FI7?eB^tv -yoTaO`;FH|ZE_J=><;atNLA2XRM;y_gPAS?SW=JG5UM>jsJCa7fNa_$bS76Lo0`FMQkCzb@(qDIieie -1=31{zE<VWv9{BAj1NtODVttR+vTWzm$L{65dPaKLZJ4T3gcYYfrSNFbiL6Z?vekp*=TlXjim8ZCD$D -**K|P)8@1VZEOb!Y0oG`wSj<wS<V-M1$TgrFdVhxh%v3SqcUKjFvFGS!*?9}MciEkzLbC$e4$-08xQ3 -Hw#E7+emy=FzY(8~-;Cdi&%|%XXXA76`S?QoPW*0sF@7(;6km?tk3Wb%j6aG$jz5V%jX#S&kFUg6<8O -<D2CWuB=d=%+T!%(;1*-~CVC3Q?mJ#v9M)b~$=d;w3IhTTenC;+^%`8>BLv)8r5}Gt8^x>dB1&PzeNX -9a7(k0^yO_}5RP`!Q~(x!{dj3uD63)?MAj?rZa<E%>9KtW<SuJGHgjk7YIs4D-hs0MTKq-bUm><43tC -Rt+@(5=tKm7<zSy)(vjntqLy;wXQMF9nS$j)~;s+bA<!adguXUf8nUY4=Y_3s-Ey8`o|C3Ufe=loVfT -Zvne#aV(&yWg+4+gjZ1Eo?zvW!faEHxP-ir;dWh+c$6S+tiH-ENStt{mGgI7R?e<^Lm!}%wZ1{0)n{l ->>95b{%va;B@tn?CMjxcJK8W=>{WgtK{Y_8K#5dNA7j*J(3pJn|WTCF`MHC6*kCh70X5_AIpiW76;@t -IT;+#txlrf4{clwnS+BaZ5aUalr{>``ghZFin(@A4619=MY-W1@|usV4FfWNrdsek13Phs8|%Amdj%v -<!{P9+Rb7jP*|C>-3b%ytQR;T`VWE#96xjqc6foo_t$r?wsktyyct-h3Rjw;#t`8<69!Ey!!u)9lt`Y -}(m;jNP)-*eu<CjLp#v$k@DV3-XR@6Y^ecWZMnj4bcB~M_Z5eid?kxbl!VG&wFpP{AafTjtfG2Fk&-i -z9-GXHhUT=0WV)7Ty9cMG1y<4ksWdzqU4y$w?;2a)c#Z2G@YvRt!K}jzhFd-4Tl_uDLJMRxX}l*bU@J -7=saDJmF}KP#=5c1LM^*YX^}+%GE#@pr>%8+0WHc(hk_+s6zq(UC*Xf!rtXF1Nk8Q4VaV5GcGYqdR=M -*~>)h8KK<0h|nftk2^}K^6?)r|GF3s9<ZYIwM&Niwz-DO0)Kof;sg0{nm)B6E|*T2sFx}f&~Mw7qJ{y -P8rY8Sn~z-L9;=3p-^;pwsR`{+IMmEE_S>vP}a@_z0+`+C}${BLtILtZzjv%<n}54bz_&LRbee>*&c$ -{hcB96#>t2rP2|xlJ~?4K}W2GfL_Ju~<%N;e;-x*xr3gz-z=M?}Yvb9%yL~og*#nmA<Zjp@&-9JL8sf -tmPbPX#>u&mNubB_0RNROS@^@bdI)mda$)jmyp^r-&sJP)OpMo<Ic2%Cq8+Z>c40CNUO!I7v%N-?qWO --#yzM7i+*~aGywnn7<G%REMuPDi17<@2*8!$BhBOKd0T<}ihZL)q*nrYA*DxR!x4^NPVAw#?mDn@=_A -!VeFw<7;bULM%U-XOL!zK`gi?C!n}E%Y6-W|n^m(D1Ui`S2zO6(rtfWn;N`->sLa|UtNqB~Wdw<5WFz -w5niEmYwUfr@Ry^%f>-?AuO*s>`7<Ld3-QQj8NP-}=`i$H6?_QF*T?RHJE*LJG4v8D3s%nhA`TinngY -A;dyh}uuo0iq5Pb%?0LL>(dOC{f3VdX=c-M4ce&BvG#s^*T|fh<byl(?q>V)LTTIA?j_S&JuNwsPjZ! -AnF~W-X-cHQST9TiKxp&y-(B!M14rqM?`&0)F(uJO4MgWeNNODM14urS44eH)Hg(3A?hko-x76=sPBm -So~R#)`jM#XL{*6zCF;*4dWA%LNwkkd`$=?wL<dQ9h(w1;bc94lNpy@vuaf9EiB6E{B#B-l(d#5SMWQ -!IbecqOlISfGogvZNBsxo?b0j)Xq6@{Rzis3kRZb0iVS52a_7)7ZB6b!p{nHYj!|k=rnXUgbyBPi+lv -1<1;Mkv2xgO4&4qHSC@T&I2J|Vmp(pOX5s(qmBdQVogPhCBiXw9Z=0Lf~@_CetyEbLbtqSa<7)h@Q4) -$X*Nzd%bmZ5zmIfo@xvp7w&Q)y86(Vp+84cL{kR-Q|61Q+Umf<%2@EL}58Z?{ZRRwKE&NtS9j3P^F)h -UGmv(GdBX$jO&bBbB`Pn_$pVEqd81o?S2E)?cDQA-74gmKxc-)DY2jBS?Z75;-GK|^Af!~ZQJIy$iCC --qz?!uR~x2_VL8Un;i~WV{$O7M4-1egQa;kqYipzz%Uw;%TI<?Qq5}u_?yKH=`0)Pn3e?uz;smQ3v#R -g+|KNs`X1vrTbwE?Z|4>*F2O&`@fe`(rL3aqd?=ONUihbQt#7vO!vm7h;(6k!i7<%Cy|5HY|G7QF7c# -lE)cLsJr(oS=-Jt{eOGMPXCiW1rh<Xl(V(~1CNR(ZzmnRCNc*4B9XOga5UL!0eM6OREWHUKZ^b7j-Xh -Nkk0@4s?;4x<kF8A6Tzb_50ov-Yndy6EmaXs_&MgL23vF9kw4j8O<M3E}`pe-D9zA`^yMAi!|;78}P2 --R=wcPTpsNf_+t-c9IH@^iOZj2_i>_C+K$O9QJ!&{B#k*p)Cl3F4Ft~ditR~hic0qgm=FzNB%*#?0;G -5`e#oqUA`TuqbDHR7*t&j7u@`1srfYBuK(pt+jr-S(?DJ5w~aTx)5>ofQvn~}0S_)dxLootP)h>@6aW -AK2ml;P_Ewc%k4VM<000UB001BW003}la4%nWWo~3|axY_VY;SU5ZDB88UukY>bYEXCaCuFQF;Bxl42 -Adm6_yyfgj3rfHU=7s03ntjF`lf{X-zNZ%D&L%-*XkM#Psw&J%7G|Mh=tmc9-Ez66PHyctOpPCRolFw -TD&v1odqbaWsO+9VMd*j0oOeoApP#hMpsN*Q*TRIdNu;T(&$ML^GU81snQHy<{g*6bB5MPNja2mP5~{ -aOAX+qlHeANu-MvlkwH}EL#4ru-jMA<|&rajB29)wpog&US3Zg3;L9=GjcA3A5vpUA;1I7=Kjv#&z$= -OP)h>@6aWAK2ml;P_Eu8at%iyN007zv000~S003}la4%nWWo~3|axY_VY;SU5ZDB8AZgXiaaCx;>!II -iI5WV{=R5b@fEz8*8B$Y{V0OQP%FpvVKCaLU}OJg@!8zXxqv4p?hmh8b8;#B4k9{}~!d);omwz(pHmL -CM$B#L~<I8_Pd<c<oJ!h!T0x8EhB<(TyU^i#T%KvEU~m(U>+fJ`TTFk1#>%~I%EwryLhgh{f^;#~@40 -~`cZAjxpHoRBD?f<_7iiLw}jDkHgITrs}ENSX-~LVU|OO=Z_w0^E>9sr=^p8hCflzOfu)M!T8VT<g`f -)(t^MG>1@&ni4D@lMRUdm(%ZmwXONme_s7<TccoVRuuPHF|183p~^yCoowk<`^F-82~a!1i5B~VNF@p -kf7@HTph{4oV%Vsb`K<GFTHM=vXXBT_@f)+3SyP}Ql#u}7Eo>JIdQEA!&uKr{r`(ir_*LddeX~(YC7u -MA%-8L2Wl#S=q)M*V4MWD63d5F!bX~^vbwyMHMDCu90v=op_)7pO6sb~zJ?-={?-Ld!L_>VHeFA}JSc -yF387GWOMe)d~Vz}CaPK-BF#v?dU>zv4$0_YY_<ft^!iyH8g>;=uyDP+%7Vs;t-6+XdJ`*#PJ>ZrBO1 -mP%-MUa?@^V`=KTN9osv#X1R3MI94%MR_cjr#hJraM5BZ9wU|j9$lZ+ZTJ~#h%WYBaK?ST|dB`keRqV -!G}-JLId}tunS{w<BFkuB#!5gvzJgu74`jm@i<(JU&8h)_GsvTd<k`2Q9sR>CG-2h?U2LI=?6nM!>E_ -v&GN237w<Cxt>b`{YNIKZcyeL`(svB72*$OeM8Gw`?IH+fb)aW}FTr#=f2;xhGRH%3CgmC6es~+qR>M -=^l>z)O!`T_*wE-UQCaa(hyeZ3F2CF*o)-uQyStWo^c0Fio%0zm=!Aw(}_&m>qg1BRbN)JGe)+gDzm` -5Dgn2NZV@#*CDZe@BE2A_@mTc-lBS4G$WZUvZL9T~j}D0*cO1p22r9)eN}0j~neUTF-0R~4XpRWV*yf -a%pS`J0*-Ml|~N3tsS=yx=u?!E5q@*W?AS$qQbS7rZ7fcuijLey<l?r^yVi)8q!%X|jXsH2J}GnhfDO -O^$G#CQG<Z-4jc7NPqBvSZHFYWg_Fr{jssdJ<R5d`{A^V^r|xmhg1D`#IY>>>@o21LDaUi2ahph$hKu -_c#ahXwXNcPPzKAFL)-cvP)h>@6aWAK2ml;P_EuDTtY<t7004L^001KZ003}la4%nWWo~3|axY_VY;S -U5ZDB8AZgXjLZ+B^KGcqo4d97M)bKAHP{_bCao<E36CB=3+oz_=PDl58+@0{eu_SH>omjhFf#S2BS1Q -<uX-hc1z0wh6@qIK7LCL_M=KG<C>o?U=BWOJEq^Z0SC*>^JKdd*YzmghPVTXu4E{A$9^uHLX$<9WghC -0G(iB2{9<lo0IVe7<;pwP33_5tD;>lgV7OT$ER8tIA8M4h~ki+^`8xRm|+u8C-uOb3ntZGah|1S66zQ -z(f0Uwz#mmPjRY6zA4p3${!LDe%4`@%Sb2{r;j6c6Q|c8L>F_J$egYStA=@XQi8zEGD$}G%d<GtLg|B -pgL0%PdoNRPXl3PCtXL{FJv}{O@K;OPfrBCFM+sL79LNRV+~hpVL>|b8pG2gGMr|+{&@aAJj59@|EKo -(XW?aGjQWknRVm#8|7Cz!k=McS&=OWb%T>i3UE15H%Bm~8^&f|wd3(&!6Fb<-ck<S~U*K)}QPkF3GFd -Trt>lj7?ca|a%k6eo-(~`*|C#<<lKZ_h3V{xi9Pa~LL*X*TOu`rC&SchStM6v=va&tLiQK@TP#lJ%a? -!aV?i*zY+6~Ux40a9DNM(<$cEQfpW3nRA{3gW8QEae-xlq(0P@)Dk>Os_>ba2Y}q=1HZ3)=k2&l$w_E -zJN6w0y?c-IB>ju6dDJw97f|D7jvPDJY`lYXbx+oT{wYxQ-QtU`J;lL7oVQ+su4Psi74htIf;pspNfn -<Y%|C)2!mtU%j%j!6o#};9jLX|nL2&>66Q4eB*Dj3BA+Ia+`Rl(0hu4mRJ}Yt`QxjTKmGX+FQ3-i@lp -zv>aj%~Kgs;l7^h||zQo!A*6Tvi)NAoYC-DQ@@W(i^CPOO1eB-*otc_t7KF8d(+Ye$hc#}F<ewZ2o{o --Wf?s)DT!l?I+poE6NVO;Gfbmw4O&}AF}6yy=T_j1TZ*lCtQs5Q;HHG^V=+hbPgJ2A2(RRhEdBE9tow -M%B|MWcETyf^sa<NWRH@?H4$!`1cT%>W1i*nA?=&v7o(8p?`WM299BPnW=J)pMu{Fp}Xn2okKfj&~x5 -*&a60ohV)BMV-|;-!=seUT9pVS-|^=xvwO}mq=t#gUZFS$a9%Df$V7C@I=+a3ApJLYYZFM*#8wW9?0L -0i!%`=Qi<iSor#u{jX@^{)LD;Bw{X&sDkBah97?>VJ3A&V@d1?UBBP4<Adr$<h=1crVbQSa?1WomsY> -8-xdkYZg3~}YYgqJ8Yq*2thlR%SB31rW1Wlty&XB`S=P3=!VvCK#wY<UF-d$?XH(4S!z$92ot4dh1D% -Hag))atP$|r>_0Tg`jD$dyK{na^();x!DEKG@10w@y-qcRm1BY<meMEMRY0n$4ww6^69inrccNV`-~1 -+qTXvTP)vD_Iq3gftAXO%l~Cx@bf=hkus~NR(V4Z)ebY1%tbzqvO|iN3UMp-Q5Pk>(jft<$t~&z8D6# -eEjd(_#gK}kT`ig7}88aao4#_*p>Bwo#Xwoh^%Kc&WEdc?>P6t?LY7MJ&bY39rXI|kbQu}=M;det<vD -@Ty8cH9hVS$TZk$0$H+{9z2*f_oB$%8(yDCK$?JAA5Tr8SKqR+BErxW6a?Bmj%&<wM?KZ(J#A{h3kSc -<a31B9)mkOsBoZ&@+nYF^EiCP<Gnb;el@&LxDuH8{0uv`mDDAVMTB^XBN&TLv)|C-1Zhcx@nDyl>|^+ -+-epG>NQ3Q#(BC~P`qgH#V3b8axNmBy4tlVEksemG~?2*46~5D{$)uy;cV2o09{dKEc9@NUDA6Ih|Br -DfPSL))Dg4)J-Y9?by>#N=_p=G#Xwon2e~;RI3`<e`EPCB=H67_>+*F=kmBF}GcjjbY64mP?`PzR~2M -g0&c0QA!IZYPisyZG$t>Ew)}c88yM}QYsyB%YO^{iT$cdy5r+|u4yraz_TIj*W%A2q&?M?Dz0N5q<Pm -4DOfG*k=Gp5O_fA#Cyi`LAt&9(Re38RQX!UM9jvN*_9BNkG(@NM-K)&uUXN|-mGIhaR*V9qLA^h#qDH -T#Eps7CXjU1B)`}t}`rTopxhgr`GZxw1GCL7^!`f1()86uB+hUAlx4E^By>d;)mJ+s7jFN?NomIA#Rm -bEsY#V_JVAUv(8&NhSKgvc0`q|KV91PtNkqMqeO<#s^UpGN9N$7bASu(I~2hGd6WSDqUf8_U2Wu3%7Y -z+)$At_LU02ffb3#tYfQ&@@Ye8pB+M@C2krbjYq<u_(jxG_<HzW8bd-34vxAbaSIGsP$oD^(EV$_mGg -0u~|LAy*dVkTY?PHeI91g!(8_sG#`vq3%Da?jggbG96o%Wm&>CbY&Z$<RVRQ^Dl`>fLqJC<w*?dJc&Q -mP<1K7rj434Gy}K{;%`XW?1C^;uu?nA-VL_9cPVoai)_7w$~&*%;e`4r<V`BBY8Tg%E^>NjPxy0d&rq -ExO)eK#i|cT9adFB5i!mW<LXJm3!%>g!+2#4SZ?7FiWlpEcvn4Cgi}B|CT@S$f50~#|7rg*R<hNqrQQ -PF~VmANYL0HlGTX|MyUiax=F5c|chL?T1-(D^j?{{m{>puODi;Ig7H@gAM`+o0#T=Y5r<DyUd-R#@N` -|H_m04vakG5<L02?4(C)4q9oe%<2$MDSz(<iP@HsrPAIU{X_3gp0pFlQtt_-DlAtNqVv1{hmmaFuhnL -u_v0zo?bX3vL_y9(=$Q)aj_?sO{`uxE3+peW?C;C3haqRS^3;NeC!3o!~YgHJ<u0{y|{_=o807S@8%} -b^|{H@?&BuXZ*h|c(92EM`vy0)oZrb!q}}Ew51^l$2*cwh51@yeNZaS8b_92ElbyUKHyQOlja}T-l{U -{OUpF_klW0$*4sPm7sXfuUxT!P2_QY#*Q%Ab(iPgzX-O0BnVw;;fQgKhL4sPm5%ucXh{00}dP{DAoQ~ -9!OZMMI*iS>4-X4eByuoW(MdfFb~mqP7RXLqyIIP>2rv`PxKc3Sw-#;Pgr7@%s8>9c0(c>T1$TkinGC -g1e?!C*5OvEXPlbln65_ap*>SDhTR4kw-sh}ZVJF0=#QIgjo(=LS`1kN6nlc^8V>kEY(aqdl{v{T@%Z -bSmI%dwUL!%WWI%`K(=ZfLxvwn~i3DMpYjY`^H8^uIO9lQGF_f_D&lU6iO9&X@iIR8?N!=u-(!*=gyN -AY&anbdEmu~9Me1pH$;jDRs=Co8Bc@Gl*H)6t~E|WL<&p<jL{>5)S*^djb|9a3p2!HE{jYB!=`xUK3L -<Q@b(U!h}8JjP8LU}&Xtklwzm-QIr|H~*lXq9lENv7-|w-AYvUS0F^16z4yGXfhlt3Wy6?M6jc%DIU> -AP#2+h;LVl_tSnx}e^dm66c9=0*PbA*QJRsz#=@OCxWVZAQ0L<F#Af^3LdIInQ^J6I4zrtFw9Jwq60D -9G3(*1_QGftOHE>o^ex#W(^pd(!?ud02f4Xuqp$vlqW-!SSe%;=7%B#%#~orWfTq>%tTSew`0q{J;Bt -GiVDnY)67`Nf6JwK(n*?n`e<QT7FG7Z{6ik=U!(<bte;k_wZezK%-6_?9PBxGX5!Pw?B9w7t*QPw54% -NSob^iK&4W@J?fUT(6!w0X}6#~+nbucraFk7HqT|-lUEwk{=X9C+t&1c=Y_Ux#YE1P2vwAeDl5S){0# -e?F|8rK?;RqEQ}I6zfLudw4$JD2Nfpz_+A-q~N+yLCohD$jWK_aZ#oF?l3^8kEhatI0=(9@0khCHlKW -Prx43vs&#LnP%DWB32o5L04KFldBnm2HR4Rb^5%ZTA8qn`&eumcu28>hn&8=ToYx|!n*pdH~2+8d1N? -w4EZ%YA38Y@GP=r$Xrf2kMJay9#1M)7i=G=xfY(?*BtyW4kM=<fo)^4-8MY*a6&kFnhB=SKwtw<1@Fz -RcDKf-Be^tLL>_)7+-z;74iJ>GvwMXCaBq|a|k7LjQ<-VeT3FE)`|H)J~2!IY_f#;b|F)2VI7%WSjRP -1g|L*(55ck8rG4UA(kWI22C|=4(9y|`T7!S?swK>lH;$dY%vK+qUMC4nbLRiop04)ozfem91QY-O00; -maO7>RFgOr9w1ONd23;+Nk0001RX>c!Jc4cm4Z*nhVZ)|UJVQpbAX>MtBX<=+>b7d}Yd6ie&ZsRr(eb --k^*AKA+TWym93j{FGZJMGfitIzSn}@a#XlrD1OOXOet)jp0kh)Q_oMZz8k;LJd3(uTk7I3SITJyuv! -XHX9dt?%RXW9y^;p&GUuVeV-@mILs+zM721i|+x4X(i;!k_oIcMp$uka2-=#PdRF3(Vp(x82)bNqV<} -@47FhHc^yml|#&=;Z{{#USC1G`hh-uQcvzv6h$d!kW{?DgcFRGOeDsVgCtWrv1qJWu5KcrpMy|4CO}a -pWRj}VuKO3%+S>$+u!RRDarBwYy3ZkGrCCv6+M@>V9q`yB#2y>Z!8hef(r!oaPUgQcVaE0ue<nPtS*j -|NP<f3K&Cc1CF^1K3Q!e+j0I4>r0G<K2P%$GfENDD%L#4*Fw`(GbOWCb0H5#-D6Jq6!@Oh5~9i6qB?@ -EhzS}Ps;DQbIE60UB@<0)JWACFL>5L8=)l&7Fd4LdsBxW_1%F)bf@=iSj$`~ho#8}ed(p>G=Z_r{b6i -}yd>fZBb*y)}?~!tZdea`dJY7I@xv9s|f_K%7+^_-`ZPlG`OKt@2A-U+=YJ{#Vp?>(HrPs5V9W>`1Zw -q)Vg(x(r;%?mIA<(r>-|y9ex{T9kiRLv1zV)Rdo@D4VJ;FFd#p!EMW^Un$*++oMATWsj(V>4W!wvHDh -~zt(0meMbErH!m~Y)-Lv2sS<;|J4%0yeY)ox4JqNlF2LBHZu+OU>o93eBg>bgyv9{uLvSE&&uS8|OX# -J5gZ@7oaAR|_>Ggog?hOIIq&qDKgU>fp1vuCLr?Tb9)iy_pzCDIs4cQU)>ippa)>DAC;Aa7v+Kt%hBl -=Prn~+#erE)S#=7lyq^g=L8gD8jZw(!nRv3EgdqAj)T%xA&Q8BYis<Ve{}*)dyz1w4|ld07+0le8wGk -d02Qyuy&+JE1kU%rfGOa>`pNHvkN2qD(i35{&^;i+mbn)HwJkL1IN>LX<O{5(1UMQ<LC2RL?j`oZ}=R -6%xYDdD0|qMGYv~jwTd2X))>g!M`GWczC=AQx^V0z@;;QZk#a#3=B_kgIPvW9>Wt=MG~4sOu^E8+1rw -+S+|%P>6rEyu<HA+a#U%&(Ac?9BHb8U3v3(7Wd*rPu^B^@?I0oHbQq9d68*`1=+$F@joZy<I$<yj!)Z -u96HcfI-yRO_J{wNsaxjcuynQrM@bhpFjN8YYNp?W(TXL_2(ky3*TUcJwd?F5AUjA3Pr%pN?d#6jMx0 -;%xNZW{{<H4}hNl|~1m?+cvzI)STnSptmL`~*w6J4nC&7ao=ew4{{2%Yex0UeE&jxS?J+o`*4|1=DMK -5-qJqbdb)fnJxvUB&0^o%T7Ct^W`W`qG+E6&CQ9aq2(?B$f5&&q<fbYgsrQXs(RZ@pM@&_pWPGx;~ap -UPwojj9&ZCA^IOsO9KQH00008031s8R=Pbn$=n4103{dz0384T0B~t=FJE?LZe(wAFJo_PZ*pO6VJ~- -SZZk42aCyyGZExE)5dQ98L8Ry`b&BAm`xGo69LH&0D0X1EON*fpWQmHn$)Z70vAtivqa;hztDAHKDg; -J!ytn6gcRcD1n$Ycmk*83gPc(K#=*H-y%S40^=yG)N-b6R{EqZ@GiQI%^6cG={92<yZjI7yYI=81NAQ -3hPgEuH(bc1#zUb`Hd;lN(qE<Uf&H9EhzkT28aGJUxm45st(jWu=tm@QYI$Ck62F7Ib^_~&7{m`rVZH -va&eqy1<!`fV@}>~J+e@Q}@xGJ!mC*kYbiQj6L9an&Mg=CXrDT_3ZQ2|V(n2ozS9v`ox=B=N0f>0RnT -I5UU$9^MM1jfG%jod`T-j4}hwQoi&>zpC1s(-@}|8;c2zIgRiN??s^jSR!|`_FeSOxhlCq-rW*MU@lr -XaK!Odm$&N!!-0Wp!4gj-3^vMhywC+V9~QGYgn5ukP8N&hE$BXiGo6%@Eqam5Ik3#_1#FQ$Sx%>O=jQ -X>-E`^9=64IN(4OO!&)L}-PsxbHQmsd0Gc<u(a5w?Mk<T44`)5Ivk9OwoZ1N92Gcvz)qp>_m7^m!kav -}(gI~jLHWI6B@;2zs}IfIS&=}u*|@5h$qET@xIix2nio@|m$Ce`8Zx8gq^2gq?CB#xtT90f|K<ijw;F -GfS{t#9=H=|l7uX%$)dNR?(5HuI}ddHvF0F4n7IR0L}aohp<7cd;DfYOd(EPO@+y>a-gw1l`oBOWBdS -fi(6)!O~o-!qKxVcRpZY3;&}FwTiP+fTA`3#w^Cs`%6<@ZVH$#d&&w=&E_JJZe_}4Y4NQ^m_cO&pIU$ -)$MaijTDq3E3)^ED$2Un3U^a^b+U{rv^C@K~Kx8hJ$(?r)t-CYmb;w<YTLN&iSXepy?rvGf-oe?c=7p -#$U8I7qOaJ$Rs}@}^x+-hGq8H*zTUZCKn&N(7cO;5(xkVzjiI~8-<9Y(KaSOH{?vv_Xh%i3^d#kh-2{ -qlT?9~+SbMl4J>Pz!(=2OakJlX&6h`qdSRs^Qg$Np}Rva}1H2#NJDd9+u{jzZ5g^m|(Ny?g3+94!h%o -6sveb1m@g%{bNny|L~<V7DN!e*{6*^Y-AMc03)rl<8Ru)ALrDy*$1qAlozC>IE-PJP&gTpyw#7j%JxX -BOAjtX-qHm<ul)!(n!m7>!shS+ls@vkQ*PgDl#1fl%WvD?Z%h{k5(BtwCpCP8>m5sJDIL4ZuB69VHUd -^hxpgIy3)(=I7L<U7ZUo<v;mS@0`54)OWzIT0+GK8ZEmq^RM3v@W)|9<svg0rSKFKh(*9ow7uPG6sHw -g!2aB{%YwwPf(!V!o79bJgl9_Ns6M<-em>WNVYd%FW6(NbA%tDL=g@E}L{SG&E1i4s{zNDnK3y)%WoI -0H*aW<;+VJGY>MGl?|6Rj~gghuD`O9RAW7ZTWz@!XzC02dkAtV&&)2=BMp6H-#!8wb52mvHD++QHcCr -Cb(R>^qHED)7(Ig`r}HcU_HCrlcB;3jAk+ck=Q+<cNEWMp2=yBEuP2@2P{lD2qE(MYw?k9RKwibjoYm -3C=G$r@Xx>AzfmgY%nAT+qmE|qq0^Zw*N_))Y87Fle%+C&2-OVYSm;PLn0hMi4d-g!e!!heGK#fUp8B -6^2fxn2Pc%KG@Q(gdRC>!o0ic_zBt)9J4S@Sag%wZmg}6tfG9#&zz<|P{DEcvTpIS%WJ+^cd*-0U$2# -;uI4#V!j@mQ2wzt%l$Q}Ev;(xQ<DvRc`8zs1B%R1X{_m&NZ!#+JI%omKb@2g)hpttQ{QGOzTMM{~U)s -%sL@nkUgW4<Li*my;XxYdci9IQ3D@)Kvtu^fBC+L|E+;O|P4wi8&6*P4*O%@L?EhUbiJvx^)Ro5SCx7 --rSTotQTiRYx3Bk6!8Va6%rXYsa2TI7a1{=JYeM)~FGwv0fZ@y9=rDt2Uqe1b)cbe*sWS0|XQR000O8 -97^_9L#;>D?FIk<-Wvb_9{>OVaA|NaUv_0~WN&gWV{dG4a$#*@FL!BfbY*gFE^vA6SzB)!M-+bNSDXe -ZhJ;YC(=>`iBpVZl)`kdh6F;q%-N9_L?4X%hV=Ak^y=N}F%q$l}5?6gFFYN4``{kQ6P=+?0FIjXu74R -EPd@=PC_~<hclO-HCnkRKQ8=k|-t9I<CoIo4}B;lk6oDjI|wmZFH2PRQW>LtOJ?@EB538OQZ@w<Qth- -Pz&U$;bfluuB27?TpY56E0VSM7Beqf9e~Wa3g*ysF-jALd7BK!2zhD$hpKh(pAaBLRyj3F(6W^sHJcm -6Y~+rWm(Qj!UJoHVRh(P3qH95c{0N=O}5@7=_XCpCk}Q*V*N1`*-|qLBp)CJD}E0wZ0g1Iz6>MR_pf7 -X;1H;sP&+84to7st*=fmI=#^;u76SMo6hBB|FhhGlgYc$^uO*fbSRb>56946e{gkr3C;(NzHc<33}G| -_LGDFOJ&pa~>n)>c5^9$Q-HVT-4V-V0bF8c35oYfUqjWLoU-!-p^IKP~5o0m0oEZ@|Tltdb-t(d)5}s -G#B%WBAm&>|`6n+{D)TNSIzaXMb6Ha3?3>YEFSvr{z)=eg~q6vnh^ZxayT3?(B!J=_02zNzttTi9^c* -W6B-K^M~P)1O@ekm7Q=%mXzom_08<1(c=p<3mXW#}eASx6WN3S^eXzK{(kBj5P~QIZvX4Hg8(6nkO;V -oI{qDrt2~+>qk7FIFM~S@|5W&m0~IDI`=t5YzD(wG%&>0!7KJW=TVxf=M@VV}=gQeTMeMOT-1NT-#6% -^p3Cvi-aHvjF<2M1NZZp9hI_e#5#kjd^9&Cyk3Z8tV&Eas)HY^oZ9d~M9LB?d+^dq5xjur8+=o-k^v9 -4n(9i2TQ@bh^W&7P)vGBNwF%F$x!rA3B^AB@{yn^|ZlKC)B$HCfprCHz^#Fx8R%2QwGop-+V`DN+P&8 -H-YxQWdX8V4PA*ll0ffYsF+Sx`Mk|jfA43dw^mKrF+)(1b9=gi7b^}@0=()_YwB;RU7ew<#l8+db)oS -iasiv6~T#5AkWq0^{ng|gRGZ+raEDyAqWCFs$1#^){gdmHCk0#<R#pRDxDVl#o3j|T@@73;=8J78xc; -O254yN$mq(Dn)Q{V}(seS7#f2{|wms-aCP)U(OO&hTp#*cgBJ5OI!{El{#y?*Q{HO6`R1{5_mdgqxkv -TgHhMg0B!nkAwNquTOScc&^zMyw2Ad3~~zdGM^(xIJo4qLPhf$2dnN0Gp9Tf5lu`CG^yoow!hD?Vwmg -UqMb5M*(bwmwaFO?)b#yXpZRzg;%E@zv`+8<M*wTQ8vC4t_6aSI)S`c`d?5F89Kbj<HFtf@`uZ1mnN7 -XU`y2PYIa;&rLbWKR#fW9geF`TJ=EmB=N$F^&N0yW^l8AVzXOk$oRTELhj{PQQAfk_qgo0_7dO@6(yS -yHA>#Gj2cKlziQa6ivnPw(hm1;uohkvGAn84rHV7V*aPvgVRn3@L2iM72X^enE5U3=04yGG%@dT6xPb -Y!ngKvqE{44cE_s%uRQXE=+t8oQ!ch6eB{P2&&;Y2q_|tCQ8Jb0UX&xgyx5bfO-$276?0?j>SOZlffT -#lBV0u`5U`77@#6YYHu9ICopJE6rN-sR20P<LCg0v|PdhQhp@qOx{w^^<av3kU-!fAaTs)70Cokf&z? -{w3TK_gV#-ySTsV~f*3rE{vudYFP!yFLGyO4W1=R?Osfg!ya?%9y(TsYx!nY}gjEA<-uYrDL>4KuaNI -5o##lw3IzLtlx12jGLk0Cz8%UNy;9hO=#hS1zOPV_@(IwFC_Xp<{?5sw0A1n6IdHkbw=AQ4EBFk8Ocw -vh|WyY=(qbz?ri`P3+&%xu^PrmX3w0%GZ(<l8@%u~_MN-zhvBRHxR?5|m_+kKSKg*>G-lBgCr;%eg2z -n6d?1Zvc{jhBzvu|7E!$GQEC+MYc;n^R#!;6k0|2_Yc~9m+jV0mL|HR@cBjjuP^eP%q{G0H805*$(qA -<$nvypAf1XIDPdfXnreLZGq{>;N%c%4uG-mvPQ@1e`x!`(B@o-L?rUdvwF6`WbH<(Xf;)-R8kO?_~V# -(cQ`;Z8W7IWgUTc{La=7E4EggghTmM70AWO4k@7u%9(fo9QCa_mQ~{heIsZ#Xe)9Hr|Du^#LD%KFh5= -Xjdadt^t}3DpcvExUDGd*Xxzjs6yX<&>bO)pB(@SsE8C-RH`0#1aZ+C{nZtr5nY?5%Om01ry-&^Io4N -U<fmg;6HL)%Z(3^`iPiTW!`O{$m*o<@S0BkgDs9?9JKa7BZ!=GJNcHmjJwz-lWI+miSXP)h>@6aWAK2 -ml;P_E!DIPZ3Q3002t>001Tc003}la4%nWWo~3|axY_VY;SU5ZDB8TWpi|MFJE72ZfSI1UoLQYQ&w=! -FQ_caOwTA$@XF6iEXhdBQ}9SED#=N$R4_6yG}cpa3U*O2)^*NFEG<q|$jMAj%_~mTQ7BGLRq*k2cJ&K -(RY=RsN!8;508mQ<1QY-O00;maO7>QiMV_qh0ssIP3jhEo0001RX>c!Jc4cm4Z*nhVZ)|UJVQpbAbY* -jNb1z|Tb7^06Wpi{caCxm(U2mH(6n*DcT&WL9qzpmBI<-<C^1<3{G?kK6UA0NbO`OIn!5KEq`1i9-0# -3%jmBv$I&bi!s&pC)Q7}9N)ke4-wFEmDcjbgY(36F3F=Z@R6VK5s(@53-cDZ>zv1&$f+0>c=B@z9^ld -{~hP+ZNeuX~KbJ%vvRM18Gb+$Be`N#$5a!BFWt#5?eXQwo%N;0Wv^~*Didfi2%)b7GWL4>5jy`^8>ao -j^^}H9$6OSOPcbKib3F7wqWNc@&-<llN;j1vaCgf7|Y9u&f16eI#-qj;#%UB7?MA1+YCo5aSHqE3>Xr -lWw2P|#p@O1PXe~4X|#lA3`i{mXd-4vNc=Ls2m1UIFSxDM7<1T>C;}QsnIviB09gSMPiS{wjTmeb{6= -WX1a6n0?G`VA@S>7z&K85<gik2<f2AmD^K6UT<q|qwy?V!(D%NyLEjGh3N=9@SpDw3-s$6%e$|*q9&H -)E?EWI}4(gS@i*7ux>zkfZY>^yH<!tFuOAAapZ>xa|peeXG&R^_M~Vd{?xxZ4cBnfm^uAe=W7p8O!Ve -=HciX2u|R@C&@xjKAyO_>+0RpnPnm44?Yt5Esq($J_C|?CF!qR%iaaAY4j<=KG-x4e+&mm57&47w~V6 -<E1e58%`LZF|!-$2jiRDxzalHza5@)X&|>E3e9zzf$WN=wAYCS@+)HQ0i9`JgZ+pPzRokSgW~Nyp;HZ -Pp{UXuI?uo!il;oH6O~Pl6D{BE??|+SA1B(Ymsk<BM0@qpD)>>Ny?RL%;W*J=y_EYA%0zqh5-R*jqP= -?Q6h%+8S1*~uA0^tWPxOAPTB5!GnrKzOGSRMMpm#;2UB^K9%1pbCfdi^T?K%cls7kf#7<l3zv34B;b5 -!Npbqrim8En_7NVfV?dq=bt-X4wb4pr;dp2H{i)4P69Fia?esT`qbJ#SomTZLhaHaHC7`WjkcD8EL-u -$4C~|Fk>SA5cpJ1QY-O00;maO7>P3YWLnZ2><}LDF6U20001RX>c!Jc4cm4Z*nhVZ)|UJVQpbAbY*jN -b1z|Tb7^#McWG`jGGBCMb963ndDU83bK5u)e%G%+*$<?$9F`7y4y#<X9!KM7D?TdnOdcE;3!)&4Ym(p -+kdK<mf8Pc`QX~jc)Htc#(L+KD-Hq<APk=f^=QMdugNHRo|DrMGYaF8wIOQREMWexR?4n=i@6q^&^AK -+sL1EyNm=OmtLeR(A`SfZ&MXMkrZf}*+2n7@cQ9@IW<~$AJhuO7*ZpjOuU4Kq-l8{u9ZQ_7)!gx-63( -x0R$c=Ci_jvkx(nIi(#6FEVhzNs4PCk7J_?%<^u}5Bfl5jMW-%rz&ri$?pC9ix<V>B|!8Px@8d*%wd5 -%nK)>P!3(_?Pg7gVetX=Ki`-2Pvonzk<Ydam)fvpM!W@=ywKR-O|tED@Pzoa8$w3bt~l4tFvD}PQ5>7 -pKgCY`{><HKV8nQ;Nj-e_4#x@pIu#KY#SbgEa##u#u4fDdVYu*t8OD4W9Q!KpY)_*OR_=&oEba2N$Jb -0%}BWFE2G6n*sP?WQ)#K)FV>!wTv({=V{dsJbVXyb<q*PMP>iJfHr)_A7vZKjUed_JoTn&YrClp4{i@ -FINk|?rJbg|BPWI7Utew;N3G|Tq{{_P;B5JJevsB4ilQ5)KGXNDSiplkH7<xE;U=Ff#2~OWZe}3&Z0d -TI;!305znM@fdQ@d<^z}K4LOt%+dhE~aTCz&HjX7y&L+06Ar%E(f)M@HZk&8)e^F@6x6xA`?sL(REa@ -OT~pQK{#-ELakctX9P5z;*`F6f8EJ$Q0irFa$IuV?N=45oTA#NpPT$1o4Vi5i%g#98y9`7EM(tEn!wc -(^D9GY)v=eGUi??wDo9QEXaLzd|8gIAvDyQa$bjgVY`aJ^gkOM+PN`GEod?jBAsnn5~%s>-PTk(m%X* -EW}FiE-K|pvy3`cf%QN&ab0RG1hSviXZ#Xq1d=5rwTYD?Uk!&epgrAD17Nat(lx<6=q|0umViUDr=IM -XR25MVA4QYxaTyCMFGeSy4RvGMF3^)lq0Ua=fI9e<*dgq;F=$D}tp^(g&Sh$V>k|lj+I@B_8Rd2Pem| -Oj7Mz(pP1MV8JUMm%9OsJ`4MW*_1IAr8{wd$gLLRs*#TYnX-r&98_u|<k%Ge$OXX%Q2m_lfq-I#t8AN -sy|l9t<9yugY;Fr8GoT7w}ZiD8{z%!p}={8zz}jr6EA{M+29Zftsq?_#ien4-XRW_mr?Jssicnhq}bC -)|?7vwft7EnDFi98Qq_|yrP77MSWD6?4WGta(R|z%+Te^u29(3n|Fav_M{WY9X!yt5&uFDpeUYeIIEh -y6|%P@DsUEBWezBzVG8WCDu`vQwi}e8&cHa`Hi!<yT7B#wy6nXLxFxlL-C%pX%*IIhC%XyZAbx8&AM6 -u0wM4LybRBBR1hii&=;u4ln5;L1;U72*mZoa8R~iT{)QP(m=1a^me0x{vWkS<0gYoz-0{tw<yf$cC9J -O+`ueL8AweCCEu{;^J%bpy!@*fW-<H4kTkF&P@FIpCdlM(1Q`uRhZ=Dv7Z(Ny?r6QLlMj;oF~#t2lkB -x)MeOtG%EXq;|Tyz9rbI}zn~gL|o@cosUg=Y$sqjNdyoNoboXwk5IXmp~Ao9m(?uxigIt{yL8X*w|1P -zftnE)Qdb;)&Ik&p?IhU+zb@V5begE0}+!3e1_Tg2E*}y$<-(Vh2CU%(LCkEw?8aUg;VTvFOf>+WGUg -BH1?iwxFM&OTC-~P=udNsU=a={#rF^>aO5e3H00G}vM96J)}jN`z^`ltXRl5>4JMO|g3-1vIxtnz{sf -pln3=xT>wtsEOG11OQIb^z7lI>VcHdYTwm$oAWx=pjk?&9)N($?@9>vhpe2GKT;K5^Z;@;;b$1h!SmE -&IVG~W2s`L~0at!pnb_nRx;bOj|2xnC-NQ1=4|#`^)vTyY*gaL_@_51^=aXDwYV9OPFE*}X#jo~|>@+ -M$07Z+28R5UMh{rOci>dLarJ18j3|i2HTp#lhbPQ@Z#!WKpGPe>YU8s*J1F@|PNlxu%!uxcb-wN3W5S -iAH6h8R>%TkwFejm1SWD8Yse5Nw60hnk0=UlcVDwGjaCVLGYJOH-xf2nvBPjqoc|3v8e0Ap@T*v2aN^ -8k%Nwpzfo~-I7L?5uWgAdMJc$ym8`j13=`6Yzca!<Qu??_bcc(Xjl{-RET&M%$?G$dSoTD3V71T~0$R -mAri0$S^SqN{W5BVm`)<_AFdEeu#;pwFafRWluKTvRDO5!WfOCKO1srTnNyE&1hoK)91G8{(zJL3Kd? -(^Z#nOGPiBjf6!(NhFp1$F7tGJZW?h9ne>~fQ>Uhk+ss-bH<e2R}8pYI1>UIsq_zQ)fX%F4PpZEPYEb -JiqgvZ543{cI9-h@MjlLayiMV5c0K8^z>S%Hr+ufQKa4@DQoCgPv*n*dSooE<ouaZkpQl7`;^w3;hG? -n1$Y<ACJUi1)4+o6A3_eL(t*q=%<Q|>M2YFt_U{sX;geFw_k#E$Ml#5i7TcoX_iU_pKf9<a!ZT$81vw -Xh)fjk0z7QECXqo}{9MA8p~%Fe7Kk7+v9W^|h9)fOUG;V~`!R;C;$AR7dVrCfsO+d3c!+M`xI^M4;uI -|iqA|)|TvW$}Zc|1lo|f^Vk^fDc(qV;!Wf)3zY5aqDebu6L&iX(^*;=h3;6qYujG!J5N8_W?7_I@j#v -IX2s(z`Gm9RB<R|N$+yPD4s+a%(rBAO002RGSsK{%YU84bxL#O^`urlO?l?w_z!xvRL$D;t?#tTn?v* -VNR+X%Mp3mv>?<dwpAb=}@8w7!1*`Zuu;)-xHLm#Sg7ws#6bj*It7+SNM^Lej}7e48JlI@UmN<c<xjO -F<S0eS>e-Uk{B;Ql8ly&5kaJ(B}FmiYtcRk*ytM0z_nvc{hePG==?%k-P?Gg^w=VXoet5l*So|nq{S@ -XNv?!W9-r)fE#<E0GYSc}7)r9_dnQ&Ys~L_Fg=Ui#wcK%z!h1;xi!I^4C!&coB&pjm+V!L?CE?(InN| -NkA!B%z-hpygz*MAa@zM)c$n!+6@;r2UiY(6)KZx`^OLbH62LS(HP)h>@6aWAK2ml;P_EuwfBWdOZ00 -31Q001oj003}la4%nWWo~3|axY_VY;SU5ZDB8TWpi|MFKKRRbZKF1X>(;?bY*jNE^v9>S>JElHV}T-U -vYCDEDx&ICfyza7+98OSc>%rnsj+63W1jCm@7?cB$dSf{f?AmQL<<|U4soHiXsv3j&~pLJ|3APIG4p* -vD>AA*HRF(Bm#aT%5b`d<L56<QuyWS6`VXf=cLpWILoQfGyzR1{C;_U@%HKh7L3z0Vyi+b1A48ag_0{ -M1v7?f1NFo;{(MfX?usyh7QV3Jqu^BQC^Bk&8Uc=uX1bF3mqxuHCSNA-20umgA*Y3bOE+_&lvJK}NU8 -EFO^MLV$a^MEjvKKnqbOP3C{h$uHF6BSV1zS_x)!rv68N*!CR?zF3{A}Cz0PtewB#5Ueko|igrQ0ho@ -ql2%@$H+HkcZfv^0$C#-h}MtWZ<Yf|HzPvvm|n+zr&7%hJHq!kJdTY$m8u?F9Z3MN!U))^LgbS(M`j> -d9&3aQV5#I&KZ7OcP_)@g#v!`xTf5Aq^0~xzWVw&*=g;+<YuzP5EL{fo;bTXo8EbAzxC2xcO|QQuK%_ -^H!P)*LggNHpUDk>Xp0~eS5nRj3@01t-n+75bFz6Sb4~`K2-iS&h;GeBDmBTg9lsUub05Mc0(^^$>%V -ma9^1mPxe|ve-huh%9{20Kx@~kq%qS>AW|Zy9WOgcJxMm|c8q6a4z=Ue0_sr<IA0H0z{b)p(8J!#ja~ -2`jJ-|U{rDdY{+79_mK>+V<6Ls7$clJ8kt&K+k`d19wYOwF?n&`~QZSd<;{-Ta&E^EY&rZQ&et<p|WX -5TBXR<=c97~&t+peKs3D<Pu6`eMgA}r?mow%v!%R!Ia<)MGi%(AAYcqGioo3g_O?3H2<;9j*qJzRk(U -rDNk^X8qnSd|=^Wd1}Uhd6HAk+-q~d&q%8YWDCnK3p!)2RgWVdkDo=X8-a>a6=&{Vr;<n27O0hNfpHk -%3bHsx8AdqW8-m4bxle?)Rjm$Qp|jvhN8A?Dty`t;?tEx+XE<_l}5Up#Nw!G<c#z8m^pX?t-f~0NMm% -`*7bmYJ2uay&SK%`(IH6`$YM)pQ?F(oolCVlmm-%dELeslbc5@9;O$`Z4+INe$A1uBQrEaOrF=SsRsx ->4AwsF>;fk8`st>!S59Z7m#b%|UA!hMd=nP5bTHaVI<1UTZkUm&v-dpGAbzq6>Fwd@UPL3bXAqQr|#a -|`iF{dKltd-_Slo?UCIzzV&Hf_gy)I+MDUVOIy#v5P8pA$I1ouIwvL3`f<{By?)_N?o}|7iYx+WmO>w -fG%><NY|<y&pYL{z=F`?NRT{+7a~m<$%w-S?aMX{1{$gf1YCZ@W2dqEVpQC(=2at)y;mWCoNO(^*h%t -ZxXhd^b)g&f4}SYwOlN8-U@dnt3Jwp^2~*;yP${7H#f=Gc*p&fJ=Dj{hFH5-%LakWt^aRc<wDm<7j*4 -jmyAaHddyLKFtw%F?Drr%{l(eBd0y201AI4yky~ce<))+Hi-LCxBzPNnCX0?@NG)8`;k(oUD*gLXt3o -lKx-nUx7UT=HqH&LltC;JSyzcj=n-_<qzBNwq=K(b%tEUDqOM+Kd3V1lo5viF({?9QlHRMt$nj5~YzR -9vT-BRh!r#Y8++M}2&l#o>Qc!ITON+q&8+tBP&vF~I;_ElbNi~AK(7sHUvsv^R{;QRr>SgGM)Y~qJBh -GRJn#Ztdnd3D<itPK#@M&8lPmLl>Nd~&{4XV&NK<Z)+xRmNL$c0A^~JZQkXTzZ~ui4Nqoi?~BNLlSLe -Y;UU_M}WkP<)Oej$>}po&yIKo#S2C61|JM}32!|j4hbK~FrCN;nZ|Q*SQW|AgL)X);1Z6RyugN+*k-A -q;r<g{$97=LG(~Xc;I_(UsND^h1P1reKB^LaPu6;n$(!+i*vSKT=*ddwa#6QFph}@(!Ia+dXus!(ZN@ -;W+>HO|o_TI15PBckt?D+d^I#HTnP!>2WMvslr!dYk`?s7d8&`#8e?jm522e`_1QY-O00;maO7>RR7i -?(j0RR9>2LJ#m0001RX>c!Jc4cm4Z*nhVZ)|UJVQpbAbY*jNb1!LgVRUqPUvy=2bS`jttyRHl<1i4t> -njF&s12#vZEl4e+O*4dS=vGjr6-{#<BdR;j3l@C?<>i6A~%gUZE7$`*1R`wW;Ejyn5(MM{NLKbA0?Sx -GYP+$wgMYC|M7F0!PVj#re|}(YJ(v75~aZj7)1DcJHNSG+(5wvW`viO(iTi(NTF2;wdB^KvCtjlZarr -nTQV+5Ym{Y78gA7qm(%m!a$z;H@=>#@LOp>?XOXK%Z_$Bj%Z2H!t7f@ox}1Q<O0Xr;=VrTBE;KHg2p? -PCJb&t!cS^b)A!LOGa6=ijwn<DlOD_nxN29H^97^geCgAXxX526jO9@#DW(?ehy$?6(V|HYL&HM2=q0 -Vh$P!ydP|2PcHwi+E@f8q@@$Bf$My2fOq)V=A}?3LSfpN%9UK7e8<PKLC+*XO>{SYw;Kk7fR1!bDCw= -;yWW<rxb0Y!4mTJJnxGio3&^u`AR%l6(k4)pksr%h&yjW92J6y!yik;%gp?cSM~dWo<F{iTiKqM>O^| -`^Fmkw%aFltlr@)k`~(c!&%WD4bkJW10ekbV3^5q=&+R0B^k?7JhE2Dv_&+32fnj*3~uJ%-d1TN-=*0 -Ee=yUIo~ZARCh_gQOF{@QfKtgyq!eZ|IHlD8z$iU!)8;p>72W_)O9KQH00008031s8RzS!y@qhsU05= -2x03!eZ0B~t=FJE?LZe(wAFJo_PZ*pO6VJ~!Lb98erb#!TLb1rasol;v*gD@0+=T|iN!jegxdowXn+0 -15iGs4Sa4C&x7nv|BbMdjbyauL|(H1>gTzRT(PnsbIco|l5`QiUEk!z#rLEwE4&N_2TKnY!rCpP}iwM -{ywmQ4#@@Fh&vpJubcZ%AcczP;jk8@C-$qDfm>BY!S(FE>w$TnBg6WT19xv`brSCTdu99mZfZexwI@R -qF73!0-OcG#%cAVD+}opLxPCJN|lZTnlz|60#qRw3Pb_JE-TLd)94;ksXN{5#W6lE8P32lpT@`agQ9C -qxCX4D`d_2pP)UHsd!%t5zePY!aRlL3Pgn)%-4#j|^FnFAem}P^1|$g4k-DhJPHVWTXCH4o9p245aP| -f`wD$%$9m@y_!}JgN!ln$vA2Nnb*$9T7!>pbBRNg^{W0?nSe$AbiQHn+8v?-+v?41bCUhU_Nx43<I3K -wfXn9uAt-Oiram5gx~>K)a{V3|i1`9W0LUz0{W8XtY+mhCpZ%NqkdIg#}RP)h>@6aWAK2ml;P_ExU-2 -ayf~004as001fg003}la4%nWWo~3|axY_VY;SU5ZDB8TWpi|MFL!BfbY*gFUvy=2bS`jt<yUQQ+At9Q -o?l_H4<s9nfT}O5gtS6g%hVSMQdRpDx#3cxItjI%QZ((q@9dC}Kq<7NRi)(vICtl}d!9R=;S1@+<0%j -BMw0xDBPvHUB4?CK22;|kH+F5(9-NTfoerak0Kx(fA^|lb0LXc-)4d#Yi61bqjUXJyToN%AhR@@WBvB -wG2uWrN2iF~{_J%Zw(8GN&zK$3OVHlE6j|_rOX{Q~=-hH<H0@pP%rqUZ3@Z`Z*lAhLdIgfc^_o_{4R< -=C}A_+XqOm2dx6SJ7t)M_B74D`xD6T>h(Muo`U6#_GZVI3Jd=6CJgta{1`4Qb|IeeX7_mNpuKPZXjaA -~OXrzoyf?Q6^TJyLy!DSV~S>I&;%n(%2LA8Qdo54XqByH?mK@lEywR4olYBw|xq-6GtLuFz`4))J}XK -crWr}n}bYv<UUfC0J_Q|<W4k6tqgl17nQ$_v;cDdkWgl7xUL^_r0!s?-7Qr$*<WiX(pnr^GoI)DVq%Z -kV@4&03~eE?UBx7jBeQ~>SF9STaCk@p4!Ux~cp@t0G9W7os?en<@V^APq)8#7zP=z<h@KH^044eJNbf -+pRHuWf*H;D2`qci_JwLy?d5zD7txFMR`R8UA$EV#(=XiC9T$B4K#w%$TVq=>whSBZ2lv74tb|~$3zj -u1(d}L0kycpej!;$ZUz;0t~o5#L^sWm_9*p~}~U|cVCy_{~TVRstOx7m_BD>W+08m_2wDRNiH;>GFH* -l_wZUom}NHZ1UAdzdN=YsBFRyu;M`fe_bDtTz^`zCgVan|qtmzW0e(YGZ-7&Qd<%%W@^&gr&6UJ`+oN -s%@R7`Hi=*RYz+!*E2OccFna1bRAc(8PS7$T5fYl*GmTP_j4?RHDqj_+se|tI7&;m<UH#+KMp*}9Hi# -mrTk8muUFG7Y;{hquASP_g^Vrw`_CN1zg6uDFX<t0{vT8?j_`;mtgS+`e_SoQ{r)DkGy<QvZbU<HUD9 -fis_Ux%e6CwfE23Ty=3h`t0|XQR000O897^_9fJPXFUI73AMFIc-9{>OVaA|NaUv_0~WN&gWWNCABY- -wUIUtei%X>?y-E^v8;QNeD)FbuutD=cxKoz{wV(lk}#GR8C{1QTVuR-tuEwl=9;v%%lbEoI_1Ut+&JK -R+iU2yOz%TyAU`!-0$7u|w2IjbP@Q6Pa?);LUu9CU;Q~O`-@sjMXPd^rvY;p)E~@w#6LS0q+ssPP}&( -5?An#CWIGvu(@U<m?TJ`Wu9d+y8}C^N<ysBa;KFb!g4X2uabGlM+R+kn5|da&En~OyWS)nC_H8A#t}p -1%2JFgm8RcFt&B)hn8J7x-iHrkrLs!5Ej*i+E3=y)Gi*8=-e2a&3M3j~DaCX;mj$`{A`Qc&)uF0h#Z8 -5zuy2P&e={d?6vGG_(q*k<uuj$!H@(!^z*Vz1=!Qc*IOrnB0`@)XwOAFmK$tno{rK$fnufLEe@PjkW? -Z`LtEUR3JHko;d83uHs8r`heq?%CH!P8tJ?5pU)itK6KafJ5=a(g}7xI1e3s6e~1QY-O00;maO7>QvC -dD{LD*ym1p#T6K0001RX>c!Jc4cm4Z*nhWX>)XJX<{#9Z*6d4bS`jt?S1Qd8#j{Ze?0}38ZVm;)wb-J -T(raNII=v^j$?T(Imxb~VOs2_*io~a>5F8JH{Z9fv9EWY<kST~186i!JDcz9oNx8RCfPutP*tcK3g~@ -t@bEy)ia5=0jzm+>4?f3V_V)Mo#c{D(m+8%-7QyjIJb8Th^Z@?(OnjT>(OR5GKc%Y>n!QYCNnRzfs0& -dq67hOnFN$287xVf)DiiUdX!1C!Q}_)&B&CR8yu2>c>!vQ?+fA7y%OtN6)_IbMm#4=kug*`x`duxeJQ -l}iuP)x4e)aa^?9Dm;2<`UfWw8{~>Ab0%GMP?Ax?B|{G{3Hjtf`YJf8X1azZaGIR3_?EwXXK|>T-RwC -*V*0SY><3yIHcT#VP%AQkF$|B*ea0mC?;IIudyS=-(wJb%XX|B3>1F0%Oe)W(bcenCmpn=f&mYEAdD1 -w7);i;~Z#_-<+N)B-D2vfxb-Z^(v`gsOzXo_@^;Fu9J5)J%ndXo&qD27BF{`P+z23a)Aw_O3dLi^)lx -^onAL-R;M}86WYixmD%LD$mi+J>!_@djTQ0{zOU$eJ8V;C^ponPzK`)!leeFLD$<-jRI4nl<zxD60n5 -^B1uB5AWdie0?f}HkO;OW)rt}E_<myA2Jy}KdB9E2{6Uz6eT0DW~W1L(KVt7#$=L^O8u^@DiRHHqD6D -M;XH>gHO8Zz)ct$<i{l+WPFSn<MWLd*m%Rbi6jqhLs@Z8*{`U}8;~%gF%vJ(KiIhbJy!o@mOvNq%lXG --&R{Dgna2ee+UI;_Hix*Zi@U7S!ges7hzgntJgyEW9j{JzqyvbzhY6H#gh*TixCyaaty`TK(AH6-6zc -BGO68<iNF5Wi9c1GsZE_C2*5ci@FA$U7J6>TV~~I=KT1tP12C`{EQ!3!hU`6%}XibdL;FWJ<c)%c}eR -v$OJEwGP;L#ziMjWv;N#dPV1zsiz3r&GKGa$^HSnZ+uP2gtV-Gr^pyn#G;tE$fo1?LoK_+#QSXX5sMx -%?AB!{>vj`VuE%GFZD-gG;DUm_g1)f&LG7<ODS^}FkFyB>K+$aUdKcoE9n!v}wqNr*^#`ncwFle6+@! -!j%70OS1^(Sl$-(WIV!;v^R_)^#nhGQ`_+k^nj0DY4c*HPBuWjq3LY0-tbBfj>^+ZU|?uzxq_StjAES -gt@j2E)Gw;lt6N@Sooe<x=Dh%c!0$pt0^4(l1O48!38lq!u=P3vYlgtKe`fo|uhg6GVJ05YpaW0-W7q -InrVmn*m?D#sYry!MT7Yr)S@l(Q2jTvTG`QwxMGSlu2DQb(*<)E3_;`u*F2MR_|9J^k*vnjzO^$xr<B -5s?)@VHK=86Oa;4xaZ!Jkk=fe%*J@z{%ttC?`S(FO*`;7dHJfb{G(=`gX{1_n<+H@Dh7UoVLmL!PkHU -A*f<~tOw5);w$ZIAX>wsFHg?9(@5R!dJVHFaZ8|}q5TVd*ZYQ?5wqAZ8u%n|@}O=VY7JX6#vB(mZdK! -Z7%MRmfo^|`z~dS{k_9CjcC-$q%(9}RPWdVQ~To2GGIAp%p@mvPRTj&WK>@22-4a<iz6tI44O1+2g~* -a6K{G@HQ^ARAYRH!qIGr-x7e0Bakq7{nK!hQAM=wz?Vx<LJ>NB4d~)^*k)fn@7lpN9BBmUH4_r1MX=I -X-uL<C3<;fI(vChi#WGUj8x$-T8qrxOX?rzA!(ps7#c2LmdxvAfl8%JmQhOK(S-Xz>@b#}4v(%{fSO3 -qP<02Z)#L#Bp#d7OY@2>*)7Q0)r&R^6(Ej0PUwr=fNJMu<8Ux4j6s95ySoTSI2SJ{=UIUu*rb7BJi;g -9&7f~+2fa!4s+K@R)5r%g{JQLt?+$C#-3Cl9N&eCd;#15EMk)^Y>h?WHmbAJ93r8uJqk%GtyEJ|??;U -+jTAOzRo3^@SGB&v!WpeJIsC;;)$=2Mh{<>^RpM<WhEZh&n0+MpvkQEf-@{METY@jVg)@d=E(DnY78m -bXx?z}XVb3YO3kX2d?&{iC7<>dI9Qm!x=s9Az;5G8l=;M6Vz9n>ljN@_?_+HE5TmI1G)}7ZABiO?dwG -+1r=T#jCRm5!KLeMTBOzCjzaIRL}|;5TiPqr>F^Yalc4s3j-jg0<<8^7Eu|^P+y^cRRRM*C5kM%PBKw -I%aVl$`=Cr8piuMU&?JwNcbqy1yDP@uEs`96M;9>Cf`?+8)>V?t$0##24;ns)b&s=Ki@2z>q^cZnT5_ -%5Q6Gfp9_4W`y!>l;^@*|QlFYy|1QCbjd!N>eVE8USH~_B~ET86C_pv*ntt@;RIz4_B8y#5pz?Y<tk3 -iyNd7Z>DK)@-01ONk{9Y~(Ku->W%b8MEvz-3O$Im*(%0f@Lj^+$`TpWNV{C)F%kC4nOG$RvH$@%hhCw -C+>%B~dIi>vPR==_`*#65fR3{{H^qhl~ym#wv>-;xC6kJjCz?<pGqiwGN{=CL*$iN8PCes{(<%$w83{ -OUtw#R>A5MmzTB=M>`;holGR4l^xvxzR!lJvW7o|!w{Y903nU|r+*)!Jql0%{Oat@$?>!ElTMBT8XHj -$a&2T7dfVR!P-C{H-nQ)DCS^Kb<La-)Lu~j^1Tfn;!4wHauK*0aCmtAnx?b!4U>wei*=<sXH%Se8wnP -BIXrvj9WPhjzeh3x_7u1u_4?m~GqFP<;<eChn1Nbp7GSsN?82n)Hi(VrWVZl`LF{){BMZjlb9L+&ms= -Foz*9;k-7_6k2M`_jomBkr^-VFe&KpYU^d6UyxcW7SWsOSWRCjDIFffR7;2AR9oKMMw|^C&N1TC=gkH -<>1g#K3~r`5T~(u80o^6u)797XnFA3?fNM!Eb|deDdaEdiMI_^z7BMmk5Y{cyscvZ%^NxJRh_oD7{F> -DXT!OOlUeN48agI<WHb8pJnwcXbb`!7`g&kcAKon;tt6|$&bkK=765if(#8<dB@bq2985Zz`TNP@q@V -8d8B5g7Bc}Gx$IS~Tt$a!U(Oh%tjM!9=;{P`5~CU?%L;Ovq7aGr)j85cfCehp4j?3jMLFv^(hVLfH^` -zilejx)53QSPKWX;G_uqft_3?4R^3ovN4<6MFMHa$D@~Apkw&0cxv<DBdfi)L;+Zb$S2aTk~kDhG*QC -wGlJ=|A++ob?P$UwCkfnR^<TkRd^cAyva1K&y<#6?o&L+Ko;6$`fdLDg;iKm={rhDML=$1++4=mC%QB -u1lA$1^gK2crKL*gq(@;H)r!2y3JN(1#5yAz)8gfFFxNKr1(>wLIwA3ku@(Bm=#ApOBqt@^~=n1n<_) -%{c`?*tc4Nvw_wSGbG>+B>vESOYE-t1_j||8)W_YnYh8+53IA9>OgCm)XB2R>J*UTMO~4pkkObj)Lx* -J2AF~uR8OY?yW|fa-rh&$P33Ntz{7Aljnf%44VzUAqz+`uZmxrJjEY_yiF^oQ_OY1}V=`2^k@-|61`u -}w9n6;C7%ag-nG{v{VtV!$@gD*{eGi|;l<%8h9@nPppVK>_TSU?V&Ik7&lOGa^*Uv7#)}E+zu~6S3EG -MwSG%GkomD+8+A-D((oeJ821z=+oMMMHshN=6((`aE~ZrAWvencog;yfc@FOATdUnqV=r0iDg-B$2b! -vft=;7-?FS{6Cki2>p@7!hVOFxDU{NdGd05F%$!0jL8C8~K?;rGY1oXy9pY3ml`FV+S&l)WCVEF(UG; -WROCbf_1@6DACM}fS<*2$`Oe&o(%Oz1otD;569p{YEgnoi_p}H@4zoF?kfY7YJ!<ROoGw4Ko3TSfrs{ -@;73z>6wGs$kC8V85C9}1N%AhO>IzzqNRIRXZGW$!!L~RR1tzTkUxZ?XEvF#u$*@!s7D-`bK4}_IhH5 -ObqPWH2x>?CbK*BOY!Lu>~5ymldWI9`Sl6!+#AviKAW?5!g6DN{T*tSeESeSQ-lr{tC4EL}g+BLXBp< -MW=nw9CQmB@6iCk$;lFj>Z<j@M^%LN9fXU6<^DCO$54QGfxM=;z&>q9+sof*Iq_AR*YM;|}7FUJ=n7b -_RHwI_DrIA*y6GvQWhO1qf(s)G%nC2lr|I^vS^IZFcA`>gX259lj>8qGyS*G(wliQv3i2^hcktI}?R@ -nC2CRb&tnw4+Cq)2uXGF{RJ)31lboMLWNw$eTX1<3{(812Y5jJ!C>SenmsyJt+1Xo6_A;2DEMje4t!U -P8Hpt@bdqDONY%~az(nrTEE5sNq2RybWU2-2v!&&%No%&lJltSKmJ0MiGH^k`GKR+JAu&Q@4i0ME79s -UUJC21)l)#!7i%2fCPIN%cy4-{r;zChLNFZg*X)Tzc`f)_g15#UZ8$SA?g*4;H4&Yr`PrLq^+g^M^@V -n!*fV@efT&5tE<X2){G(a+RDVY`+c2^=xZxbzPNS_241Wh|>v#4eXsG9jaeJ67Uz?@lwId33$RfwN3G -$GqikO~1?a*#TtwTaP&x=DhuZUusBhqS$GDTi6%!--ab_zR|@16oZEKXG-cE*P)DcwNfluVEC&fo$2e -HHZ=rmPnEEqNx1Q5&8BlauiPh$g%3~w__b;Eq9Xq+FJcd4Vjx!qouO<_Qk)as~3cIC5zQip1^I3ZaCN -dB>apsLr5w5{^=gqr2Q>j@qF18Re-=z_zI{kzf!H(BC4XgE(7Cth^3}eOv;wi>2TEVt}3V#3+N8@0$u -D*-qj9*@|Qg$VrYL2>_!HeJ)S+*s_o*{V>|t$q1qXwqzA$D`$PDo)9alXVn8fF^>{vPW?2Etz*Xs1Jq -9dS(sF`h3Jeg685zKswiHNHV?Y?)z<eCanPl_Q?C*4f3Kc97P-tLu)*I0wn{AN|H}v(<!H`3eEjJ9*u -8Wj!Hj7hx|L{XLyK#PAAb}m+y<z+!8N;b9l{FV*>5^C*M(Ct(hp*SK*F#dcZ5gRo9=N6B*|H9uh~ZDs -T{QIf`xnB)>S>H+ZAhJhFT`lO+foXc(ZW@v!(;Ve&#nS$Yj3$+$l%}%Tpil8o#>B>Rharv5&TB|HY>7 ->H_9Lsx}NE>RRvEoRgHit5Mz20eWR2Uo{x2ZJMmC)9Vgo@^-VtF{R{Pozp2?gtGV_$*`Ac(ZTT<0I6^ -0Z>hpkdbpjqrKtYbq%;2WNXe_%SOTmjJdrQp;HIT(%r1uhd-D4zp&xw8z-ZF_YPUvVzg_y(KVd-KpTy -TAOC|*#C3glX{8SNqXOS4MGX&l_W&C_={!gj2VWCnqVFVn=87~qdsWA}gl^S>yrfWQ&s3JK3j6So-%b -hYzrnnn2yD#YOU?D@(0$;HUch)5{DrnEJa#38TFsbnpVG}%a77(mwa?#abv^@XLmyq;CY(!|Fo1L)%o -QFY8}?rOWKb~Dh*1!`g5>KnE)twb<D<eXHrU7xHPfQep1AmCr$s*#<+^+M5gg_|L%!e@gj<92e}GqG5 -`uC}l!kYe<a?pWeT&e(%$ARhGke)xxYwj=_-gL3)Pkx58iupdIm9Z9eQF?V1|DDnHBN=PS{UEC&l`Zw -)$#z_rBP8H@KVvnVghw1C&_*ZA&Oy6F-_?&Z4&5D<vuJvWp0#DLpS|-jW_<%9EJepknP(2JT4}Q20uR -a+K3|W}MVxMA!6J<2NpeWND#NBoPPM0Ydbs(YB9Id&Ue;Ll4ism!gro-Scx-OcUcYo6o0>i^6ZK;J36 -vDV@QzQzPM~6?YbkMCz5e8GtS{w|lWD#|ohykgm0WunXG3`A+fnHw0ll@$XFu7nr3jg2`2TiNu;PcP_ -@J0JgJtXD$g9+LhU&A@D0UbDy0K*;>jlo@et_aq$)sevfOkbR(Zq8nR#)OyKWu!Oi(O5O|02H_4WRKG -PlxC?GMU%COLb)l)UC396l$Tf)O*u<AIWNR1it*1)TH^Wy>jlnngDxcQ6EMzgEpN&j09C|={20{XcO` -&;GHvNZbx|7W^i%2IqfexP0y@j+UAk<Rl)Ji5XVP6Tb|>@%aV8pE5LMa{9?AWUEUjuT{aFiy4*m<)(9 -kg>Qg;|+EU3yOieVZyc1+XC9&@gI5H4iGbR)o*C)lpx86GXmb$bnubpehn_mQyzDi^C{b@2Gfr%#dMb -LdZ5ZUn;<P`yeuUfoh1^8j&L(K$AtkvLz2Q}&K4K8UcmDMn=<4BVQA1dNG>+~6ZPK`B>TRSB}1)V2j0 -V7<cAPb6HaJ#~Oa8;dQD?3Wx==?xXfsXaQA&Y1RT@k$N)P#T6=E_Z#9*3#8!r>J52R**Ic>Q5OCQpqf -HU_vk!oK8dARC?X!K44bn8;CI_O2C5`x^kL;wl1C3LrrjExpMLeVLC0!X;l}iz|ljU8RDN@Eoz2N6fS -3W4$w|(T$i1I&wz0~9NK~RJk8@N%TM6wu3mih#dE1`Dgjm#o%xeg)?X&HG+7i|`ha%IB1WxyXkcF#e( -JMDtmjZ5Rt>C{XXnSKr{sHM>7^{kppiYmuv}O%Kq1gA+dwR*GSHsTH{}m?PShDhe#-~)c={d@!oOvO5 -C>}c0n*E~qH1R!Il4Rj>AaOhxn0=Z?6C(MzW;^tr0@Ts{ACz&xmy5_#u`#L_sQD8&;{7R*%DEk50lpU -2~l7`#|H)hy{TW>w^tIa1w$lm7gNVylEARmV!L>fYlloFS1wR+y$pRxZF)E<w@|K=MRb>fJq1QC(^+L -DV=(Oo%Di^!UL_$+Ms8!`pviCZ;=WxqTo2x{J$eS-t&9!uw1^yu_rDC3nCO^cqnqw0BL3|nN9nv(qTU -)fVi_l&{y{6vzVfbL#S}T<Zj5P(In+d4mBn?IEafrxp|@W@Yc@bM*u$V*4*B;ldg$LlNsaai3{587=l -^P9(+@e4m^enu^x>(6>4mFc%FWywX7r+LoSHy64E=xk^vK?|bM2{(zf?HX)qmQ7yN|Kb(`UO)8%R*xs -E3#1CV~NM>S=AT%?g@qKj{!{Zngz)7j_Tw4C~{uA4_bEk^HC_4fn+hti>tvJ1lVnl>Slt@!(7GkI{1V -Pa>&jp%cjC!6_A5bN0y>yBmS}P3koFU6F9~1n)=)o{q)urPwt&HwO~6N9!QMRlo1Gi?oB6ZsXu?WQKK -CcoC)fH__@N5)d6&-|)^ZKwIfGXjwSwh~<&SWd>z3Yk&}UXq;Dc*mi3F#JRv863f-)_CcMKQ4V!748z -b(-VcYi_CSA#0zy6;a+^>d7_ia7ZJT>yu%zsw7I_OC#*m%yT!lapZ%KLLsTwB0M6dqlEw)*e)3V8PnT -Ms#?@lYK(c{C*zWp@yM<u@^jk(R3vNp756ZGyhV;4Gx(W0?+k6F{qul@~Cw2=-&_=orUN-da*6|6-;o -|(53s2wbE+XT@-3?f@Rl+ur!4sodd&*O<5M_5P!*s)B}VNB#v6^sN`CSE7A2p<>dYZNtjrqK$ld(|XW -2b^Rsgo?`|ZZf?4WrFOZt#pe5w3)6N4ZFCvkm6#t1q`*=2!nH<8-Z|>jZmT-><XW9+ycyMIUIvq=<)B -EGZMVb8f_dpE79D(Rw^>E^_#J(V10{cx}BiQ4XU<0829um5rD?v5}PFhs79b}U~*=CAXaOEy~PV%1jb -xg4#5Qiv@3X*Cih0V0yA=Sn@~oZtO_n=Xuw*RoYmpXQ;5x@nzK;gHLjZLES*tiXJ%wwbfqX@%LB)P&$ -`kvA{e52h$rbd3qe5Jx>}xIg-KuoOO8=0S<gyvd`QdVKcGyrH8j9d=7<%JOysmd@M+GMCq-z<@5{7KD -n+J>6LfKsC2X6h(5qNsVnG)NlMkSwNem2(hi;a^t=2{|bZyEhv`OhGA7HMf;d+gFnp_J>KD%gH&fgC4 -IT2+s6x{4PP|xvLi-wTrHd7K=EcTN**l@37e$4Mw5P_&r=AfzrnhtXO^8GJYZM%IDW%tn<h6k}pqKeA -o5Gj{9GC`o}gKE;Z<?@$g%`QIaQ3nXD1U${T0SMY$NfNHelGEra@m^b@FCif)moUba^?V-}gH+T*Y3* -d=A(#D1PZEjV4N}-kQPcFJK=%Q7aFSI)EiI7%Hf~k3;>v;Mnp6`V?u#%tJjbM!(b*<0Rij@1<0`g -{i$CQfVg@i&SLRezU(5an$w;K``Wr6wO1jq^jzz|lxfuuK}9l+;~|s9LDA6<9i4z~poRLpyG|t#Sw(^ -p5O8lhp*(CSjI^F8Ml8BEqt1No5BznDuNUo(Ry_{ZFoUJ8~eCud)g9@cm;DEs~k(R2%AFg7=5NjC7pd -kyf6+?{JerKNC+HU<nqjh%F4!?*~d%!7RhmzL@2u3ebn10;%D#vVU5G%5r<D^l;@#BN?|FAPQ*c%?rS -|0rm?uCN2^Vw`Rp^?W5=LRdU}V#s>k}OOQzB@Ekj%ABP0O%kOx{XkKx2v7)Oiyl6@lAo<kF0ssjKBk< -B&*+no0+9<lKHF-?<!JZGGHJvTeOgj5VF00kwKG*j?|0&9EiXk79!usV^Q!SjZz$S$;ePWP0JB;QpqP -n>R(_Ix2z|SOS_V0f&Cu@os*5E;~zP4t#im(#D+A_ZlGqjQ$-3gMUDYEZ0fnHAWqOH32P96{S)h|jhV -5L0ab}mG4dbU_luU&+0-7$R0=6<{8nD-%k;+z)c%TmMZQr7gyPWB_J4uyarI2-ROe3LATyTsgzjY!Qe -K@8H;;1w(!@y0?9eI&Io>G}q6p&WK@+QhQfq(ae~n%|vTuL@*UwSijUuuB|MY`lt866qndcxaKtq+1G -+2?<k|PIK8+mUpX3e>|-M1K0oe@-+jO)|($09^(@=-!ZzrcQR6;m5llM2y97@Q%%a6V0VguIOT<Ra+x -PJXVGktOtHaKRz2WZ9^MN0aw49FzyF|PoLt%IfW(U}7U=n1H#bvx;xKU?K=dd}K2O!2UKxg~wSA$I4a -C0#;k22McEX>g{g523N5@7mWj<>O-QAdIn-!e`TsmL$iEOe%F7&K~s5FV6qieroI&^<uynp{*-LZw+K -p}_*IBFaO&x++E@ZHi?Qa$>^XP<uh#nVS3D8Cr(?TfFX*)3noJ2wXoMl$O_j(yos1S@of>F>wz&mZug -Psdbnic5L5Uaj%o;MW`yaASA~){Ra$RZUv6vP|<?QLZrAf#-3+EYpT}M6G1}9QLGb>jjskFsXE|kP^1 -~+tyqyfr^{uay{J*U=KFa=o%TQdV@ZwzD<++F<<c^Kc8ZeFn-*MmT^ZLQ{UtW`ZH#-=Xo1%Gn0}fUIJ -9&kxg7cbZ`Lsw*t8@p5eCMBEeim%pMX2;H3A#E#xT2y^6}|Au|A#87z-g;5D{l7tVq}D;H#Y{|@`<oL -eAt4<fv&+U)REdUJ3lRKB@R@xBpCd;{gp?z-M8;^$>@(_~TEW+w1d>t1Jabp27L1K((6rZOz@WNCg|a -V{$^n(K@TsPI}3%4|7+>1-ek-)Sm%n~#Wt8cv56cv2w;KPbr(`?4!}tBCU){9IW5NZ*Q6O#nZj3uh}l --hc%|yrUasHwAETu^gEoPe45rT2x`g!7deysS+{Z=nWmzE)zV>bou(t$+u(i>g4;2vG~i$zg>l!(^Ks -!l6Xs+N=mAfFeZH{#Cdv?M|i6^BIt0}@qD|S=0jn?I=rY;m+G~527y8>mhe;TTzaQ6;4mH?xwF<1Rpg -Y{X<Z_QoAX=pjt%lNx|f3x+D--VP@hSSYQA6Putj_<Zm<+M9*PGo+#TvTq+FLpVP}eVDCKgx<0dTscX -{PDqrd%DLUVQg!kRDizC6Of;SxWN1^<h7`>JnXT#pm+{+F(oGo8vaYqp^69^i~gUQ~k#Mdn6(S7eLWd ->W)<u^x#(P9|T9BEC$oCTpAhcodoQtsIY1T)+u~O8!J^k4v_0@KA81idAEENST#}0~ePkYu37>osA5v -Oq=Vw7H~wE{3G5u#0aHxc=%R2v@(I@kyz$`pG@Ij7F9}8zz6j{zC65YTeRSS)he*O%qXeO^3e$dO}2H -z)*a$e$$9xiab7p{a=rzl*p3k^uzr2zGX6QG{gLx{iVwI&sbb_m=M`JY2BU(N2b$MX8dCTALn`_#DUz -aG1~FG{hiJ1TOK@X4bx$?7vD(j|8^+?q$?uy~Frsy<4MLw{-ek-l^W+`##A2KZta|z~$94a1Bm9+xLH -F4`!O9Gh&n0sx+gijUCq=SZe({*4lFUO}=72F7-?X6039(gog{<*LA!>K|q$~Y$0D63Q<<77~b6zF!r -db+o<V@8sziPIRf9u&kzS=eJg=xybRUCXt#sM!2l&KbUw&~Cv`QOlVhdjVs3ct>av&5o=u*2(?54U)- -A-g>4&TR)x_>tyLhwbL$9j$d|SBF%aLF@kH)|gcD1Z&E=&KeL}XPJ;I!7XUp(YQ@}#Zo(gWeW^l>@hR -1;TQJ8^fi*emzSq6&XkKaXB&b(A0UJ2?HATlx_5iK^TlOhUMuG0acsj$xj3gZU<<b;%H5Gjr*ANZO4m -ufx3NuYHT{z2XixLGzmn2K?yzUzobO~I<UDO;-(KBr!C?$L6JS$9BRp{n7Bkm3u%5FgGhrdOa*^I6># -baxLEymwr|oE`z>G-ag0Fc@R^*W7(%VwuBFN^9Vv~addr{HGPLE=vXS9M;j76~}EPx{RCi7`y+_Q3}; -_4YjsWo#TwS(C^)MdNfD({I@3e!>Dq=5T|=7-kE9fhzF3vR7(8Er?V+(dExoKWKYJQvwv=8Sl{g#~io -w!;F$ery<9lD%*2ey-58`#o{Cyi6t!Nw)Eb8}y=Ov5cF3EQ)9<B$^HZz2TeB^vH%M*yx4n6}+VffS1h -ZfgX6Iwp7IlnWYzwp*Wqx1G-Cwl3D7|@0hM-GB@n><W7#z%fCh4b%M0+KwD7KM6GRBA1=HWnrycL=ow -kL6M6ba&!><puLVs&flUsUw(dX8)g7XEENILxB%)#_y)}B&q9~!gQ0v%)`XSklCp%<2BwI)FwlbCTc! -DJs^7cRBKN(;l(x!HT2Qim3jW9_PXne*_o`ep3(*=U?^rH~vI;1u`BZ9|jWP2zoSDDa2u5sTN-(Za|z -O|^-6=(Me{D$?%RkK|2wg8_;9#B=Aea?vs-6kUF935&|F`4*yp?VTtj$OA8!&6I+m-{aiCgp$){eE<7 -SSH-ev$vZW*D%R3vGS>Mi>7^}swMUDgL|(t>s*$+;}pAP#$8aT>+~A)1_M2N>?-SpMaKLAGeU_~jioo -dWD86Ip$uJ@AYJI<s7$R1b{UnoBollSZLoQ(R~2umetjWBaC<q9uSjR#ja7`$p7up9IwzUwO3-Rm<a9 -EFH-%lDE9)`!-Yei^9;HPQrqyU(rf2TF%Ok*BHJage__mj2vA5<{r-^c4{ZH*`ZD(k8SSK~|MM&ta(M -+HB>n)e7l3M=0V`Uz))#%i67k<b3zT0sOVIc%)1;S?IF(HQBs?4J6MQo?DT@2XKuWF^J8SXlHt72^|r -e>{u-`sT{oqSn&(oE94SP+lwuid0Jp4XVVry-_&$05>r+W|;7-Fz5A72x416zieY?@~cTY94M+tZWRj -&0!yamLrpF*Cy!_z;SQEJa&ChZtlzrL@HAoQt$Z+T$w#{?+QuW%#xm*oV;y}_Sr?6bDam>S`C_JmCkN -6tl70WNAC1QTwb=G@s;gMI|dnSG2O^V)}WMby)4D^JLJ^N+Ryh`84Z^eHD{(eQl?w=N|nQyu?W~t9gW --0UX|3>Z^t4?OcW9gD2x%+f-h)Qb&oyaoTs|+*A$QP@h+dX7!J>#x0Rmfm(Z3~B^LB`_d9u`hAXh>O~ -e*7G?Fq_Onz>_F~;3`5%6|_dH*+Ivc<CDaZ0R3^#~7Z6E!{0y6Javl&bCAj`*`yv1E<Cu7YgV?x;;Bx -C4A#ELTyPR+xP$fC%ijo;{}*Yf!a7h1d4h?%6k)zqWhpZDL)$uYlk#uLQH*Dd;-K#zO1AnmUu$D~=`; -{K%x>EgD08p})>Pt^C1DV&1Rn5Z0x9o@}JNx_woua6R-+*)giuz(Xx`bxvv&2YuGbh~asmz8uW}(^cx -ZTFFU$K;^OQipq);-b%%`n2dwf&4n2Q-<(t>jyH7%zxU^D6h3AO4eJxOV8YG4xU{uEec1FSYZNj@Qtb -n%L%qBx>5?RckzJIQ6*o6n?#cH;>f61dD&d!oH<T?R-IvC)Lh1t!?w&qBd3AC6;`HQ=`<ma&=-_YDEB -yEI!57o3hrg3AzcOEFWejS)_InAyTFCN^Sd~>WNEd4OP6QcmWE#Gr7Yp#MBkCpu{Z_Uk@t{Os#DFVFN -@wxa%b&4W=UAWR#uw?R&<vN2JOrp;3ysPo#y7gj;q*<CmAd;;?)9(f?T>UHxI8INw>V*89iPk7$wUsM -BpAHOU){0D{qV%M0#Wg0uyi_bOgURFOsbm|-gwQY#L`k?t!|LSYp`HAE=-}9(?#n2ZI#@_R&Td6hE%T -*D-$)k257v+C0ldAw=W-2osuM)y3>a40*~a2j#(bt^MGPeWU<;Ek7hO4%Xa#0d%Q%m;xp7Oj-hqtQuE -MPf;Sipo|#AXO<OLHk>a&Wj#A!!z|7j#@ON+)wGoJh<`hGTo%`-0B8I&FN;9Ip?K4j2biXHFP=Iu%4O -H9+!rD969O_<NRE4N)PH1@IT?vYAG33W1y3o$1|JdNiORRy}nj6Hww$BAhbnlzMaMX~GZ%9&ZYRGXK{ -OeP%?)mEvJN#y`-{0+j`Tuvr{|&h_hxh%vnI67>IL~)s)o;Or?eyP?_PuoX(A-tth-iS8ZG-Zr%}P^k -tA-z{wW${Pf3^1C_o~G|d*!C_yUD@fCZ1bu|2ufSE1Uj@^I(SsO7Mf)8O2?q^!&eNjS{5aZjt_f!Z@e -l&Wne+>xPS)-*9-rI<0liDJYR=npKjEZmXrM_rY(UH<?a++4r34FUM!EzQq^UzJ7Lbaq{MsbK~^zufa -dR{v+OHpT7GNW6rBjMn{hx;g5V)>&x)r=y&Fk$M4SGJnsdDw^sjf|H%mcH}-&^pY;#_L+I~w`s(?~_x --&tjb1-oIm4a)`E<j8@h8@NNJyv3l+c~_@9pdtn2(`2qW@L9p)G^M+5Co@!2g~mznICS?-H?0Zx&!@q -r6t(SJWCVe*YD{O+lYgZ2cGdg?1=0+n&xi6BSIS{KWIR8tXU;OPBYhES%<;xZ$4c(bvIJ2WtIT7{H<^ -vb#hg;MTU7;*WoCxV4U=@s*FXWGZ>}jm{IugbZDWtYTgpOS;D}+&G-PqqmZ8R2zm)<pSmPCj1t7G;NP -}IBTLVCghB!WEkF<6n8gx%onQTAbur9Sm0%gA-*CV+k2aByp>B~rEYMNTgLQac5kO0i*424F0=h8T-4 -QN*v5Le=@6lAGZyu=;J0L`R}uvyJUQHHish$f3hbC}v{K?L9$?z5;w?B>o}(_JcetT~r>1Zh2fx&1G) -wSJC3F!4q0*flrQVz}e?!s8W#hYx0A%^O+#lE4OTFR@L4X>^v}j$-iY#;m-`odME7W&##87A-iwc0)f -=X3;_fnQ>5t$}O<}|TW$KP1?U%}da>HOQA(uGDE@j*EN_Ig|ye`$=w8~?jp;vwx|<Podb_M4z3Ur7d1 -`1q>Ze18RcuNLu`;C3GKmJUAhuS88U!{qi-%%oiZ!o~^2+t9|pEjQIF%q+vc6}Rp9QHvOlom)6=Zr|? -NhnBY>@xj<-^N9Gzl!3OJ2ir^+^|w)Zn}7JGMGz6f5f4R`^jd|y!DG+z-i3fl2yuHP>$xM*Kb3s*L}) -Usbah?eZa8nD)Mf_nw$2E-jg;>0a&%R|_DW0rH++D}cDWT2$g`9r$WF3?@NaLSr;`;vT^zeR{yS)0>$ -~*a)D8&k6<aTc$2cqO-Q<7}$U%$V-$F<2c=y8yL!*q20MPXcp*WY`8trM|n=k1_B970fUUaoK_AT5!5 -p?FveG%OyE;c)Iazz{4(vl;#JIi~`-Bvx7ohnpzd}5D@(5<}=vDr%3-EP7a!`wbxog7|2u9Wfn?Q!Ms -8j=0Mzk0fz-6Ti<95^ZR>nG90fg=ohMV1?s;GecvPW&t_L=Q&&nk;S&R7|x<-c}rlleQf4=b>NKwQiO -~(+y*3(}Y3zYMKm$b)OB+y}H>2(BjWMXt}5<4_`;0{G{I~DGAU`10K&?0^+%OO9=yzqN(a)xhd`i9in -nGiBaAl@1ejeZV&L5#|&$9=MlYAyyLvi7*~vhF+LmyZtc5VK>GcTGmosz6cd#vKC@w<2Ctlf!l93?`{ -I~hFpj=A@7}lD_V$@beyge6X$dZ|@=bcEx9YeN2BoU{!7e$t9bNUL2xo!+g{gRFB+jDeU@E<6PS=G~% -l^V}{Hvs3@xWsff>%_0dF`m0k|Nq{V&B$jme%X`{&D$w8C5vIb`&cF$c%O*#H)O^=<vEv>sf;Te*sWS -0|XQR000O897^_9$~So0vM>Mu@yP%H9{>OVaA|NaUv_0~WN&gWWNCABY-wUIWMOn+VqtS-E^vA6eQS5 -y$g$ve{R+fBJ|Go}o_BJztL#;5&0L@B*V>-U+@ttV5ZRP40s#&HN@BA2zi&PI{QxP?WH#AdoMbEl-PP -UI)%EJ?>c`p9;ZZhk7G-^PoNfB$(I4^6!Q+F+*|TQ7ZOg0cJ{vt7XJ35w`4>m<pFd<Du0{5C+g~?z_P -$y6cSS3*Z<|fMDEhLgr%>~~5ZTKY&(2=IKb!XVeOA<q?Ae>wAKtzA^Y<U#ynBx?q1?fvM~~i~z0JP-! -#7#ET32Ev>YjnXmxF_4+pMzLY`N(-t(eWQOw;z+rY@nwVpf&CXp5>lIFKJMi%xv=mHLHc=AHRf_u{^< -%1ia;y6CR0pH*{p1xQdo8(nkVbmjfJ=&#j_ZmYljtz7e8va?gw$LD2-ZJpiE#To}R$y(7hn|3ZbS#sX -20H`YezHg!N7jNXpThVq<OMSf({j8f`1AZpi_jR{f<6E)#3zs@;+oqKjSE4Uq9tu@+^h&;%WUtOXoIX -GOa60?;#mlqTr?1W?*$@AIcJ^`>emKbD&&#v#PM`f}SYa$%-}GgrTV5A!CuXhqc~iDDvy*IIz#ta0b= -#~(+ixcsm#K@Dm;sH<<gladx1w0g#6809CfQvJlW%@Ld;gbr@Lja@=MVU?9UmMV%w|PZ0p*-z=Q&PET -V8H(I`T=D{~4&|McwsKLM+^mcKdmvOqQQrUA?H6%|KQA(_5gR{3G-U2~D)nB}s8pnBAB3ZZu<5%%JOM -KfZnQ?!$YHVkn=lw+jGxBu72{se=X&p1pbX>h$&VXi1>472s7BJ$U}&{Rb-d9tw@}7q8!cIDPr@>|Gw -Ej{M!(vp4Ua=k(YA{Qm6yhqLFoKR58{{hROKJv)03<@`=V&G-L)`VOj%x$zgTzkM@1`|$(zaY|h*0fW -%9gLzeST{e4$6f$Zqe-iV4d`xX2E5LtGvyPYqQ&F}m)@#6Ch8XLJ!x(@WF4r#Wn`~jtK<9v4h$ZlrvM -&4CY}AQrDVwv);PV1Xltoo`0vgFmB!+q}rpN_>@0DFvH|+}OW1BU#$d*l;3Fu$uPyI9s9NV4Z2mm2}| -1bA7jv?~;O4PvhVD-bdZ-M)X13jF1C5m=vEYGk&)?Z5;P5@%xBNEFVkyZ9xR`PH&7-lbabb87Sj>CS( -zYKJ}SS+aH6PmF^_fHp#tZ=3jd##6KdV36frC3qPV-i<>9cV5-wsJ{j8ToYs{JA!xI(BGZzdqMBKElB -8M_7)~1=xnM7MrRcQI#73Eb#o}cnYK}>IJ<V>$TuhP<&Oq6Kjwxz+GVt;B;oq(j|H(S>#_ppiqWJHtM -(Qa!ynW(v12(o(?aM3DrD#4OBh>nDc4_B3N8qozP6C2oAV*?<|~*Bn5Y4k~Jh8sUHjyiLnw_#eAC)I# -8l?Pc1U)H|xG>;GG_%7`p=w$bhDf$biNU)4%Cp3<Y8g*0n@g3%G6CQgqYo#geAJTZ?(QEX5)r4;AK+2 ->`@J(6EK2V+8u4-9Wqjb=eto+?7=YlAyUE)`4uSg)z3Z#6n6E)8o!FjOR`OF!&dAGhkP!4$-7b9V<!k -Y7jWLE{#hbq(&NLP~nG}8aQ?kO5nH?B>**0!1{II6=Y_Aq9nsO_E|z1E>ahl6>*+OZ&<g2Z${A?<#MT -_=ptm}g23+%JfGXj$&0jXLFuAUCfRLKZS0j4??07dX#OXqSdGGtP9n{YJ<-8mcM6b>SZ)dWbPG$@=e> -cXV5o74VCGMMxA3$rMYWhYR6f+X|HR_9767a1DJ-fffFIGDB&V>!JkEX)SuFsez$u`2^BY_vcOt(P&} -jja+W@U-bv`R9R84`CUy6AFd;nIQ1&a#5EbGlZuA*M7x@;t-S5yA*TwIn#{q+0GP2F!`W?T5xcVk2_C ->LN@*^suYs;qBdm0y>jV1P;jE4{&z*|Mwz@)VjFQQwwrQ=`T`wXh8xKSBO!O#yNoUi(QQw=C-gDXV(C -Q+_pr$}=oKBH`gw0(8lGQKmwa3+5OgMK~X@9j-`?jPg8yi+s7wpx^YzwCrXGsVG6Q*tZcBl7I=aphoR -f56o?g6uG)@Q7}=R5WL@ADn1U1*}ZP32H&C%K_+{R4?vICfEFTr7i9@`X$rbUcUQtx*(&%r4htW!c)J -o9#0=?*^=mMo_BRs~&qJ-v#FH{YKPKVeTq?s@j|nFs9B3LT_-G(X^eNZC^rxn*nE)nXQz1>*58G-UEj -cX>*GB<PAcp&n&n0lGn`9{gdfYG!O`6G4NM@F=1-Lq(sJ<F;52r;p1O6+D)o46MMTLLthjhS@a%PMWv -!D*2aDA|2NM@hptTg3mgt75GU5Lxg)hH*gRraI<)0J0dx+1REDOxGJ3X;$Q`Ef_9a7MbktYk>zME&tV -;s@S-LJ}}qO;iCVK+Pz^2u3*yMK-=4y8ir!K;`2Be)3x(y^-32hx9nY1i9ui?V&?*OpyPoL-jKMp0p; -^3Q*v?Hf7Pnh`>Y=?RBy4vc-nVT|zN6)5kdED0qpUyP~aesX%KAGm|XAJEV_IR_UT;)JFo0P_rl5$iS -VTi9f%o#I2}KzHpUXHq&>jgYV}B>m0-nk<EH02~705S#K&d0=1n^OhUt8Tcy7S45A}>iPRBS%%ES&q9 -F6kQZBV;!70pUL3}}Y5J&|Lp}>05t-|OeP)|jY!`50<RBw$e4**_v$`B-LcalY&jftgYBLEi(yAS+QX -|C=M-@x#-E`@^-PIMA{Bg=vkU@z8@01(yqH(J%OoUWUNCRXefaxv&$i=uWkuV5MCUtmtLH#tGO=npu= -f`>#8hqClxMz*^E<EA5m1YriBurpxskhiI9jRq|x{E_J9#Tv>0F@QKKr(z0Fx7o!-ew1HafEfWm=Ne` -!)>SdL=#0cB6rN#W*6CqI@Y+JRB9In*H4alKg`Jk4EiE5APaZw|L~0KCTkx0KQ>ZtqOJFx<l8^O>sm3 -vC?Pk>IEkjmOFN)S<dIbM+D~E%dCowXk2a(ZkfF(4j4cA9tzN}$@o0VwGxs4ve1T+ZHs!#>ik3_8Ha_ -P5gA^YFaW=d>)5(k4rRCr=2)9n4az+IbUSKtB553RXHgL@G;F|dT?G~!?rV;uxJlJW^*j&%b?cP()D1 -CgZAx!P2HxgJ6mJX{mUybyJ#$4pqJk3J?frhH_whod{zF0(CR-70|fRXuyfNk2EaLgfk=!7NTPAbZ2N -qz45)uu^^QEas2n?Dv^%#u&MUE|0x^1#jEtwp`H0K}Oq%Fc20(=!@$TvP_QMjFni@@kNwt!$NL@l94^ -53+)W-%=Q5;dYD@vp_RQ-C2n<(p~#LtK(_<J*sn7wZ($%g*_re!2}RcA94C4x!5E^ar+8v3>;X$DGS| -q5wyS+#eg%p|SUb@uNwpmf#~P23we%H|T^XnCmzshLD&}$R#;9x-X?;Mi^m0?rWtnQLsGUkL%N9n}iV -m0!>uBUaubXVuw1S0|Es1EH$YsU-8n}d5D6jf8Z8voa#>EBthd`XcD{c?{=mEhG6ZvG2q616=VpOwH{ -K-+Ckn1YSy{hI;*uKnv_^MFbQa56oop2}O6r}qeY(uHX^#Od^+QRWl7mB^K;@#3+@{1B@|9JkH>$n*( -Vk2$R%G$qOT|8`C${ns{mfu<miqsm^l8JW4QhUh6uYtceP?(ehSGIsKMz4?b?7H7%2c)iQ#563Y!qQq -xT@qGR+4H{ArJ#)|hF|r9_kMYZ-7j1GpgPQjv;H+SlwHi{NZEBbKu?>oN^zjwa}828sTOBkMb(N)VKg -<lQ70uhV6vPOx-GSLP&<-AD$oZ|kWhsu4Vt%>@h1U=e!V?=d-Ua3UjyIROYa<1q-^?t2Ikk~W_MT)EC -d}0#Fz@5=~1V!foJb;P37xR{-n!BPr7lA9s$=@a_vW{gZ>34lcJ0wtE|At2tV9ul$SM-Kq=R3V@=zWb -^`y0ruTF^1sycTm(NW@4bWqyw6${$tE0fh0{nS}((prD+?Kelf_p9k^z<*k%I*q#;~bgKq7hx4_a40K -;#M#;sZRECQ#zYYrvcAwDC!K$NOM0|74rzwcim>Mo9vM){pgteXQ9O(xAqlhkaA(F;Dml$+7cqyxU3Q -vGwT`8${ItqXb(6R$2D3fyjM$2p~(#*t1LG*EcetCQ6FPZ+7UkN1P^*cq#*~x>uW?f8SsWaxSNhDh#m -*tce7<sD=IMiZ~03?2)$zg*IRKAh2GX9Pe$DBCS7jP6*h9WH>8>ppH=1*sGM%r#7stc-GmN>1#kzJ2* -{pX_)<m_4P#eS?-?O35?r)#%$!)v&=FpWPGS$m#8rcvHrUXR2$$F+!=A;M0+~sWxN0!2rR~f4rYc$uJ -dk7h3rD4>UpOP3DBAh8-hISy6u&ad8jz(XK7~cL>IZoTND?xIlEX=<*0HfYoRPMQlgL;^pVR3f;pS<$ -6p#_M=c-V+ai{gml++6f0#T$_oLp_J^F6>pig>vt*gNbt)5vW!d@B{uh!Hv&7Y`f`6BJ0~Lb3w5T6X8 -*M&Z38jkA(U-4$C>{8pQ;XR$;P2703jeiBjS9TBno6XP7D9};^2>JM~bGv`2V)mi%Ea#Mn((wD&E7Xr -i8L_Oc?Kt6k1?*&B@qUV-;+}O@d-P}>+-KAh+Eg0Yt0?aIcBlMjT7@T?TUREr7g9i!_AA7w+4Ni1+Xr -cTJNN$=+kT2EI4Hb5ADPLUZ09P<Y^@bzzM4&+eC8O-1f3@`N-8JpPnkD9|^PA#Ic-q6|7Pau!?kCP9D -(SA4fdOd-72~NMT_hM!b@E|Rt3EF=n^PYsq(=s&S#Bk@<$3{~=;lD3>|8F*lDDaLAPmUb##Mj11*Czk -K29C4B9$QP*NUf<W;lL-%;XE}=?F$4>aIjdkWr9*TXv1*w4?e;ueRFr4FxJ!HFI*bd73$WTa;I#3;YE -1N!<5s(aBHz{xJrfmK^SwEk%K68ahL_Zhg6fZUcC12ljx<(cS>jp*`7>Cg=7H7F*R6i`k~Fx*+Vw>U_ -rm#`NjmRP>l8IVoHL$dD@)DMu<1D7z5ts{QQycQ0vTDCTiDq1e%LdR|N~<YKS}M}a)*Ga>2EumtbWjn -C&RfL^N-hLjj#ps@~&^EAU?Q~;*K?2Ns>u8M7E_FPaY)RtR~IswetH87Aw$eHqa+jf~I^NB;T<J3@;P -Cq<^NQAHzK`+}dt_0*=19K-g1C9;gM>PJC>g*$F^(Mx>t}NYBPq?;DG{NHT`(C(FHPD5m!ndgrFRZnq -U=)tJ?gIUiK6_E0);SiXJi@CP+Hw}MR||hM7VMvCxdAXT09OkOf-dFSd{4UL><VMYtj0+_MkT-sENJs -dX5mDEO+<E3Pl7=sk610H!C0yEBx8<tVsW><<3?1_isEYHBn`KlS~VWfu@hMv^fI@r=E(*SXP?@FQ#a -iN>q(#3hFdw^2q-Z9r?%nLO*gR+x1ZXAUDXbsW;?mFOPi&X3Nb0RxSHLdc?l>REjJY?X;n8SQ&vL_^c -?ucDvnhMwNV0O^D}bUQE6aYA)hlkt?I*s><894Q}M*_tVUNb9vQMK*Hm`I?i1`!#j!9=X9xb$YQJNBe -GN((J9PVNg$L75<BG9SjL0>-G!p9W$y<79Y6Koe%e(0M6)~7rH){Y$FJj{0qVJ*m@y8#f>^@pG3&GZ8 -O%b#hb(M1IdO=kAyxCM7<wMn!GzR8*1lqVdI7YU}a0Hx#J$$5|3h$>N_e;>M{4I<mg4mmJ;6YOEBUEn -@1HKk}V68j3rD04Qe6-V!gSe&m^hDk#dF+h8>vt*dTQpob>Xp{LkNL}j(xHp)A#_AThPC3eEPs1v1}k -OV4xa#2uAdBr*9NrrR-L&jc)!GBPm?GVwX0?HRd3&Ivs{+<sOe<qPr8q&=XmAKf(ke7bmiP1asJ<JPe -dlws3+Z@hBT>(glLBa&OobB)+brODUL0K=Gcy&S+a)Qk%o*4CqW5#HNA}=+hcQ%0|=+t2l6HW$AKw<k -G2u!KB^^eXU%v@bhnWGOP^{2mSQBRE}N-|sKl12um-+cTp;S87b8Zoa)Hq+k4AZtqZ}cm5M9trIr^{} -G0JF3jM=rARV51(L-j2COjkAU0yQ*Tpm<Jyc!53xvcN4DEXiKjyFwXfN>w0_Es_cvaHs+eT4D&vAPQr -S%o}BFI4|uHDGy-sfcYpA+^IT2Td|U0JoljS6uERfQZ6W!OF_mRaWK5^DZ@USt;SvMrHMSKi8}ny2KP -hVO{et^Z<92w+2_RbmzL6wb;>BD{cn9Vn^yTHo`EWLPg7J2k36I5IRb0xD@2Sqp@;S{Q=UV)#UghKps -)_z#Q08(Khg2`7h!;kH7>PN&Q27OvctItFiG42O+^|3SXUw0KUh4_0dq{1Hb+CAjvmZ`kZq9Ep!Osef -{e|dYU0ygP1jkKJZVbN{_-n~-re)jt8<buDKqI0(eZcay1tg2q*<~Hoh!4_=xp#%siL}ST98K=_PaE_ -Q+qSv=8y5W5^b?hoVvE~gD|=1<+it+ArcCYh2gL!i}4`L0i9GTD9WX}gx(yP^(3kCTES7%?CickSQKW -;+xb>p$Hhh7T^FC{7Z*ujT;z){zQRKC*O!0fU+^FN_VqXF+iLN(jB6eS_x0yrVB{~ylPPuvbZKpe@uK -5T>Gfsy>g77!5lX2RLkgZc2Cm{<OxG3|xw0y2w%jg-M)4$j_5AA{@c2MCgCi1D1Q#eB9g~A1-d>W}lw -*ZtcW}judoWz)Wsk@IhYq=Ov=DC{GFTN>1PU;yhwxTzHVOksHWUH3Y$|lw6CLI!xo>y7Hn*n}8DxgLf -m);yPw<-Gx2{|mQy@dvaH5gAs&%MdX)wyYr`DPLGETsJ(w%5c-|M*EUf}m5;)~L6Z+Y`|G0uK8MVEiE -6tl~3z7jR&KpJt0@w7!^UXLyT^#DiEx4h`)Wf=*-e$qYZ$U@-0PGmbqyNPQyNmlQvIh+{6BA-L#;)e- -|Y2=`GOtS}sVChZE22}hPZ1D4v(E?l@5?*i|mpqM#S#d5<)j++VS37;Y%t1-On6(KqL|BC#aenf>00g -C`82LDYGRsXxavI^WAZoWq?WWGykI})p!S#!4I;oW9k|!n=Gw&QBr{jodXYA8y7MqGs?|yW@=yTl<KH -$CMa5qPJn251aE=zCf;<hL&Izoq7V)6=L!%*ab#alo10i7n3$EVHb$f0#>tI;cWPFY$)=R5_Sn%r5@f -q5r%BT2CA;*YZr0uSjGK(t3R;2*AqsIt$dUwo+~vhQjc2#4}pPn@OR)d!hc<(Idg&II-Vm;tGPJbxnf -Nt|TKfqwCcaq|$lxqVEXSZ?<|to%s_lsy&sVd}AEm06GmSC89mYgwqwOBSFY4}(en<tgTN*hOoH>*!+ -Z3_dlSK86qUaM$y`S<mS3DJBEV9Uh>Hi+eyuH(Gl>51O%NEdUh2X)kk{on<7<h$jWRSu93I=24nM?~u -61FWD20?%fK+MmHMob{T4aTXZhb^ZcZvbHXjV-ooaiemG_SI6VNk$qqb%W}bA9cJCoudz*8NWf^j@D8 -oqQOESI)&OH*dPeY&BsjlB|lwHB(z@`-X)XKk!DUeVv&jhOv;gZLa*^2U0S{gO=gv>S-KWEHwI*wAzL -G2Bp(fV#$mhT+&4uWdLZiteyE0sEv(m3TjqQH7r+-kj41=Z1URV8glD#@Oq#$U#esJ2drIN~Cb4N)bY ->{(0S!!`4m+*TRIy-24mhcBQKhVy0R*IAUImj4*l(3!4o*1kHRYZ3I`b&Jc6G!f@}SRbdpZSE-OaCns -Xtjdl|dYG-(Ds^8;b&L8+j4I$S0Bk(Tz8uF>i!kL<hM;bPJRS-1gnICM1wC5vv5W;*!z()&;K&Qzbtf -g$xwxo?K0f(0pCFh{Btot2nhqCsP&vus6M~OAEh3{OMzK+k6K>p2o!oZweroO`qeu7HeBq2!d=>*~Lk -HjP9iXx(DXI~5p+>hn(P<<L1=9(~EvQ<E7t3XNMzzi`zlMF1(}|W76n6-Q%ciJ8V6t7wulNA*jo9+wD -9~+y+qfAbcQ6}2Kc^#g+r)-}6!a$h>S(9a-YGpexy3?F1xst`c~uVADJVYj1dekm@R!bN6^*?A2hQsM -ktzJ;s;%yzJEJU3c2R+oqgR@*@>hZ$C~>b`biu6h%ta|f6NdDIbA?Z(kEC^B(nUUqOp@>n`Rqq6%P46 -eMh3{jXv;0&KfjA=%kETZG%dYT6z+Ko6}q$g=*jChAI^?>Q{wdP3yy)gMk%Y6ElTliEpdzOgKTUn^wK -6ytr#ED6?CK49Wo|}d(v5l1X=wy=|RnauqmVLOq6R%wY|dzB^|jJt+Uf;Hiv_8sSOs>0PO;jw|HQKWw -&;zvNQjN3Z`@<CABZo(<GKBxLBaqQroQesE!XZJ2g)yC*EWxr$(J0GA$ZJk~88z#MZbXB2=c^q&WkVE -}qc|p1ia|`_bM@olZiQGSek#H4n;6_bjnGy?{0Z7(eO=kd>?g<5o6ydXS5Yk+Hd?{wD1vN<D!FZzya# -H|s<QBHCG=X_6tO8!yNfr>F1o8Jf5piJ^$~R?NGloYd`h)^6&-oWvw#Iv;ZgRBiH^ZQc$u6X3AXYpMO -e)9kc1CM0<&u$l*r_M|XB5N@;JWZ^h^QCql``v7XA2lJJyog(&1!<##ni8ixHMN_L?1=rmoQDZ05q`- -o`OfxbQHslZ1;PKrQCIdtSC6nV1N$A?#aQh%FG?igEF4jWpSjPEbkx@R!T?9luXOlA!-6M%i6ux>(ti -bVADb~jK2aIfZlwFx#hZ!A|PnxDCn!CXmdVp#+^fFn|$;r3g&M_Sh{M#fG>OIaD4Ox%tP0uDLE_Pms+ -DUQr<sZI@)}~+@PR?<n4AwkkVgpITWSu9()YQOW=I}!#7p#L@cG|K3Py6lGX@2eYR*?wp>o3>Rs~1hU -N}aMu6v>ZJJ_-qXV8c27_`oIoC+5pDzCjG=O_d2Pm2dz|XjA^Dxf@x`ma(C&Zl@}pFe2u~t44C69uem -hB;l!PJHS)S46xU#KNRb0Y(&9mobq{2Y$0My=t5SOYV<lhL|8r}HwAkV^_G069gUq*>U08Si-+6UmpO -_|dK*-6OwI&t-=dH4offtunN)V0iPgH_j+M<|V3nN=N}Fb9C~$R}VcN2kU%8svZkIBgwmMnbXmD}_5} -WKYN1WpLawPd22c2id91$uLTVOOf*hY&wmx1gW+=w8En)OdYI5~M+OjppOOhUl&PlP<4sMFAt<wFDFW -vjB(6?2N5rI&H(WzgdKPxqHqpD0lj3lA5V)>)!Dnzv3K;?qkx<YIm}m7kxqTs^=&<FLI>sSTBQuPnlJ -oqdL?_yz;kuKdIkj+`T0C)#0Jm`O<jmcuA2Mxu;e3p^Xh?^u*2-MooW(F&PJdbZ$2TBgw%@<`ew`ALp -Mv#TUNPT&a_mgflo$RztbI8|W!GL)er65i=QX;GX8E73!{F@Y$Sk~kjg;$g@J^t+S2FojQg7KyvLYu9 -Qc6f6eP4(D`t4H96XedIe1R=SQRuB&%Z@U%Ie?70zJj-8Xt9uH0CtUg$WQ1bN#L~D78Tzm~iqx=(HN^ -9or*JK&fpXfEsX+`98juVqrT9H+hU!rNjq*^yMaetkeE%dFBC@Cyo*wV^i7<k#)QQa3eBstM90}^Ia_ -mu0CbYY|u5(-joYFKz2KBLq4=0tx+nE?21gxeBBcIfV^BQ!?=XIC3KTsEF&FKP!Co|aKU&_Y2*m+Mfc -@8~EHNm1p$bImD76p#z1X?jjos^F=k{qmNDV8g*dIOofv@la8HUKsZg=W~H(<V5;<DsfxXy|cGb+NV~ -Eg~{N`cWF7%$nI_&2TASkYnCJ)6GvLU+IM(a>)2!U7Npp2J>SJQC8lE)Mc$KR7z1BGc%pXZ6U>OV;_V -H6XM^4@NwF>^C(fnsAuys3Wm}NX!{NR$;Ulx}SyVQZgwMY2$-n7|Z+dxv*~K8w0nSH#1&sMN;C_#CG3 -__m+h5{yG>2g2X+)1a4QWP0<$d>jq21<Y4}Q_iH#(5n;YP=p2m1KJA6*!guZ(~D{v}dJ<>of|6M#E_F -<m#>Z^IHK7AGJd?aR^4*{)qX_@AAJTpTc!h?D=sg*f01u~+0Lc|+7{vvhG>R=5aYdPZ7qWw{hkmQ=E2 -6$vPhCs<qA9nrL}w1y57E*Hy^hTT-_3gc;I)EF%}Ki~@oKv$wkKN{#TBWpQNvXO7byWn+E*-G76Huw% -scef{}Te7J<%Kuu+6v)(vP?NF1hv{P7eE_rQt>G!lLgq;@mqW%PI@1~c2nJ`HHNps~{y6O&x1an;%VA -L*Zd|A<8>ar;?T%E97=?R<tA>L!cRc_?Y1@%tn84Mj{YleeN6vY^{?HtaPD~j8(5Z|2h|>YTA`jMJsI -=viFl>gBahUU~%Gn*=A){=Yyg63j(Tk_~#l?}#FfZh^+k0h$C$y3Q-E`@ltB?J+G#FswGEltif_iqE# -*Ca=X+V0<Fdb=*gqQ|UILE1M;^ADzg>%A;kMl4x-NXXJ2Ol1@2g{rz4aO`_%;UXd(jPZrHy~#B@s~Oi -rHmKK{&bRk=AXW&WL<tE|HCQdU%4=GB9mB&l1-c+eQ_M{cE3KE?`k#q^*{f(cgoS|T;(oH!Yw<b5aM~ -4qH0W@SB}q&bFAD}_I)-LiLbPT!eeO>K-+ZQ_)>%$)c+!k*k^PpH6^ye>2SSYcYl*jO=tVkK8dIEU7{ -fdJ?*6nRECl$hN@3@#@T^!x3(%bKi-zxZ7%JbLwD_(y4I#W>ixZ(#$D+}9`3Wj%FF`!gJk4QD-XD!sa -Yu<Ai=OYf$=2Vuq>g60ikSK}E>Odv^hWL>mFMN&8IM0bO%GpOnWyG7%C-TignuaBQT1&alSz3s1?d -fK#CPeDf(Eqc?Rq8^L~fvU%x405VYwi6Kb1M%j4RtK&kx$XBkZngWQl{ty*%4J#~>cAC&Q@1TY@W7Qe -gLp4$q7JB+ODk-L@Ow>)wu*ZxOn)XWc)BgXa*Yr;YU1MJ?SFiCgtvphaFmurn;l9oisp=@Yz;J-bd4? -_7zcw86A1vOFnuNP4cuXc1t(<gMuOs-pjJk`<ngV@c`fod!om$R(oM2@lHGcXp;PG+YwtDZNUW{gh!0 -4O$RJE^#9Qw+UQ5usAN+IJ*7APvfi8Vn#vX^dblKFwF79CrtxlQ)Da8F;kX8<(z%yg@$FN=X(pLP{^E -i7g^Z{V>{9cMB=FZ1~_>tnjq{}{k-S<oo4b#P}IUA%qMyHh`tmpw}mGrq2jjgB^q%w#Fdl{7N(9Uwz% -?OH@4iz8G|Lm*2RfbhmBxJm?0)%IgWGZY2&LP4+JXYMVr$l^o;@;dyegv#?v6+iS44T&|&-wDR=V!r3 -xnIJQNOq|`9G&!8xj5+raMZaeziTm^pT~026F@K3*7vpA{3RgA8H~Q~+0ZnJ&$@Y0bE?99bWsEp-$#n -4ZjWa^i$hTt^6odf*OWqR-dxpXr;_wqZOH74>Ha3K^Tj9(nM!fLo={mg7bL|?TEvEXOZ(~ibYG213=z -37RUv80!X9LKpXer%uX2!aDxrrsw&yG|DeQ?fMSb#o&T@;!X!jy@Oyy_W3utnMwvtgI1aD_oJI;UZ2D -yuja``#7z45DY7zJN)8Ip^9N!zD!m_1lbG)r6H#Z(=Wn>CK-G7-Ban~O2&MBJ9l?e^l$KDpeIbJtf&3 -4y<)aQ1Ih;Xnu#bSE#b4MI605qptNC62b9ea9MTWLZ%X(U^gRM_HBTnyBZWF~-U#8sHw6Agh^-wQW;W -q^iMeP&0Lq*J@SC@xgWF(nFMCJkGv-@#CvA(9Y{crEZk%RCc1jm20(sgRD!Z8wkK)LFf(q!}sV;^<Sb -*gfPnU+)(R1`A}cHiTj%nG)Eob3~5SuYNpmch5W}n5^FMaoLv69$6O~bi<h8N9o<0(1X{1H6cCRj1`l -4VCru_=x%1&9FLh3`5w9VKH&BdEggfw!tDndsl1ol9)M0FY($c|apveIylUn4(;DLR7lI&>*XNu%0Og -K5IW8^^<wRC3a$w6lY{+R5k`(R3K_Hue=8U@BOhU3N_T0}v5Y$|WY^q8&?<yewteMBhBRAvG6hS+$Vk -VxX)7`q#4jYT)D_`7mys+0?4<av>PvRH&LO%RwYvpWvVtoxlA6{PkkYq;PH7)u=q3BeSTf5nX;FK>e^ ->-+z-U%>Lq?8xE}v2p)Nb2$9}sObOqqN3vw`9Z*lCW<4PoSmsw>?1GngD#V72LF3dWVCEbInW2AnDH6 -1nD>un_K50X5zUEM(O>JlUSwMS(TDepb-Lr|o?{5lR*SD=2uAhUk09P{T1wBEB|u!DWsNack@KQ-L{* -HU*1MIrZzLNSPp`$jPL$^k$i$aNBcO2Oxi5My0e@2YgI{;q=}1g#JwIeAMl5vuK+QuUDsA^+LhA41KE -%g1hB56dX{ad-k-IFFvE<S8=_9_+map6*mz%us=u-4|oW|G5Ka_w}P#!TW#@NZ|8?TjMG6Ofig&xEDN -Xm;|?!Qw+ULr+{Y;^tLlYr_;@=J{f+Oxbv#d^tizqQTgisNOLU?lH@2WjODbVWwJYDPPe+yg|RTy^8X -|K`+i$e0rw(k9u?L=&k9gNY7f84Pg!WgJ?E9~fQM3PX5U_<_adle@BeMIV>|E`<RKfIU>dD1PeV0)-z -Yp`{+{M6a^D12osSMcrZiFZG-=s=z=hH*9E{z0q_x7#s#h-<{Nq$Xl91zjH^t9xH`bnPJN7{vsl9zet -SVT(jzK%C+2q{uf~La;J#m;HOU$0r1wa+<OW9XOMMC4upWx&HP$oM>e?LHxk9Gr|EB}144$d43--{;^ -jiZG5z9Tn253aPZ<hRi#uZUGY*M4iAV7qG}Xc_78#$ps8!#%`CVJAuj6;MzEdHy?j4=k6;{z&iE}T5< -j0ig-BjS<KlprIuK6sONjq4erClt3D&|;phGGr49+~N@V$JNzz4}2XvqGK*wt<|^s<;#t+66MrBKyao -0DYGk(aTN-3TpR;GE2qcitJnhqe6!+F6bu!r7K#4i<ngY@0MIz-3BBIrW#lAL*r?7T6N8Yc+m>u9>j8 -4&P%$8t1S>xQBAZQ74Tx~_U_{19%YpoFU$xqN6~dnOP3wopzF8f-dtR?2m*85LFx1RkC-w3wC16aknv -y_h^;0-F?_kCD`AUTI!w4I&uEva5}aeb-a2{zoP9u?YD(loo`J15^%obiA`a0cos|92hh#J@4AFtJLr -gX9aQcCl5;*&AN9-}*X6uozqJ4|8SaD2#o@tk6y)$N<KF&-=<g-b|XopUruhqG1T;AmnhPlb!p33wGh -jx)e6}3i7)mD=DiUq6av5x7+w|LuU_r(;M6=gh$-wH6urGeCkAV#>-g*~1jB%j+I{}{>e?a==~;m7t2 -#0om|f$K-k!~G=NN>&rOQUm9rNUpcTdzu#a-S*H+<)z^rQY(kS<lTSDjAc#aZh}vqCho}gpQR&&sAFI -!P()od!-;YCCan99+9Ff)JGOT>R$zOT=yt`qWxiJMy$*E8_$BViwwMgx)`ss@aC=CbTQ9^vRzmg2zK{ -&bQIc(hGfZqYm^!tMG^+E!9$FO+^-*9BPIWoTzYY^QR`*$&a3x6^QH1!n&uZLIj8huDQEqOZe|4)`2V -os3M%d8a3|6vcHnK@WyCk#`L-#rGE(!e^?vfD58h5J<NFZ<Ah&%b*C6KpmN%4JrPd!-KBsy$FHJcvOF -9Cn#*iX}6>ZyBT(pJj!5{PhfZyhX3b2qZp04w!QNwmorxY-R1%?Ak&k)|#f97!b58h0x20ChkWzRI&h -MpyQGO4>mq^^&M>E;VN4GFC`eNRR+N4=U0<<*L3qi~ZL+kM>L4_jGkLR6GCt_+xl|i9S2Y6)ZaFo7tj -KbOrxI^Aa%&rf5xjH796^y96Oq#ueG~Hy_m8YX(6UfYdRxZbi<W!==qC(Ek!NMvfQ^1_l7eA4A(n=&5 -tGG7X7zx`I_Ytz`BYY49<9j&)6FdhOmvMa*G&j4pI+UxouhKd|=~7e`fjBhby?7H<1oF&GQ-7WBR(n2 -TN1(k$>%M_wN-N=B!nIsg5y^&|KE3zID@p)RqWrT}dfOVNW_y|LaH?bpx9;!!>ZcPz2xqra+kK}*2h! --%YRY%jVahAr!b8(*|GcJfEKC4BU!jQ%}m%?tnj_*XoXHYh}F25Ihm48^;8(jJItZ~j{QT-Y=+4#ENg -Y|}j8)Yvb_*`NILiMnmYlU<_vd%!Mq1xE8p_UO4);ZeH$<<-2Y8a{2jpkl!^6F)8MY?y2ubRm*7jv_& -3*2(Wgzy8bl<h{0d+!}g+Rn9S^5iIGU{mHkYMNcm7G@4o&)>513(r{80tnAz5UYN+uf6RFz_~JRNX^d -DKFy1&uA;%$Y>F8OT=S{Rzq7#7SMZASQfvM~^HJ|>JJ%PXG#fE*<d{blyZeF&0<)3TP(;cvxMBjWnuX -d$sx9zU%RdItc4Ba)U&)K|LZxzZlH*+(U7oq)3DH$f&?SmL0!8yO7R3hir30=S_h%J;t{;@&y>)o*{0 -TBozS~a&qC&Ots?m46$a}Q97An4fcFm_{9*!>(scapsFHW8Pk8dGffChp>000&Sb_vHdbD=9d!z|$Z2 -{`E>MY0>jcj7oC)^mu+}%(U)NfqKGI3wSL&VMwR<aVH%~ftYBQL|>7fVSKDvJ|BT`){dEPP4KFo8bQG -NP<ELfymt!4u?Sv)cEj6OOwqitnHD_fP9*+9Dd^@3UFwh9d~}OY>U+9WVoPvhQxqoK8jbh3xCd71yU2 -~+lJUjWepkc)M190nvOR^_Q?JvC?E#K$1-xWN{iTYXiMf;}SZ*BJuP9|##Eq>fk&WJ%H{04-q;~AUl2 -BPS)-e?HbLT(6Q4&qj`cR|T<mczU$<zy0A_sRPz`O8M(E;N%qnjRQ{A0xb@MJM6Pl9cQvFm(ACQjZIb -mmf88C+I~BMQG8>EJ=41L??DyDT#B>~d393(E+h{rnQ6K!Hf_m|;2RcRjVmKGDNMK5)6RhU*afTGgIP -*q(CBi`*O{<;dmWG@};{;W8TX<TkqV$Y&<<|M|piL1M@Ors~-)2(Dzg9y}E5Evy=3F)k;)71Hg(ofW3 -dDlmvc9jcxEFGdy})G#mO5(*2_tOnH=;&v9s8gqX2pY3yCUKDLC4vS;j=;{C>+^Kwl-k9jIobPLWRO~ -N|v_yP8=NF)(#r+Xqd%08!7aiF4ca0(>pyO!fl($b;RTTB4&5mTEcE0$yuC}`m6$V4YN1maEZ_?oqO} -d#x7i;kW@k2pbf=**2R{Yb~ZY32*8`~`}ISC=9tWv8XG#r2oG&Rd&tzG3DVMG)we3B<cbl0o_(Z8eMc -(naIlxF;<7zfc}cu6OgN&_)$jCLwmFe{8q;#A;tKxYF;77JB5sXxm4VdqSzl)sw$rF$cVJC&0Holey# -*ADUIPDysl8A__ld;{pc6<}IjiJC&0QbL&}JUO$wL+wVA3X<hUq7sLW$lpuco07-g-ZCCkUtJ1{y;1G -+UAbt(-3gf$l`l+@(n?8OnKMXfsy_2g92g087~~x4Y?$iK&I2R4)CF<W5%XP1dtd+3YA430uy>bI_iH -SN*z21`gK7m4OR#%K)fMVdL8LSl-8Jz@;4Bzt&TX<0htRC-5_mKM-b~kx9oPfi(XK34sC1h-oxF|p=4 -0Shqta@6L?l{=+E#il6gKFg9(^{((MgMu=9;$*#d<<P1U+Alg9-ukgwv(sb~MJ%H8L<l-|e!tR*)2mi -{D@YsitsS{hwp~I8Vum=~Tuy+mA8*zh$+dCWIRg{YcW2oRJ-CEw&Z2&uT+J9ftjIn?2|byeq&4?V=fD -2y%tW%NBPl<*nuLVc&&nYa^(nU_K6Op{^<M47-HlLvhX2wG1}V^}G!yRMz2>uLId`0z@&T*)#jOq7K( -PzV&;n9-9|nbB+iE__jq$J6@i;e|UHUD&ke=MQEL3Fd-0ONvCu$J#4e!V58!Ou6kp#W<vc54-yuvS>b -RbaCaqio7D<~ZcZ|8kme+pZ!tRiE#AR--Bc<wr251oS}p9;kh<6Mo6g?@|EO11;vGvxh7YDE>MuOOlx -p6_r)>d`R)FjO4Nyx11QY-O00;maO7>PNk{{Xe6aWBXQ2+oO0001RX>c!Jc4cm4Z*nhWX>)XJX<{#FZ -e(S6E^vA6Tzik(xV8U(J_T>mK=Q6fd2GArbvqYGv$Nd+ve{rVX>XARwk*-Mc4SGVq;cGf``!CHhonS3 ->~S`^7u&@OK}MFy!}H>Kk<>$R{>8b7@;J%XGf`Ko^WW2xvxjF7#f!Yyt7N^Yg#Th9o;`W`mH11Ng?sT -P{4ps4w0N0BGAm^)s$5hXDPHfZO`eH2`KsE5N{VmuI*Y?9!86=QB|;39RVrE5RgPb4CFNFT6~THVrFe -Pu;_}s-%b@yDi7<=BiyvOyTwnd^?adF@Z|EV~oh92MSC!a=<t9y*_Gg-}*C4_E%u9P$Zt5yYn_u;^P< -bTF=6xl%#VSeVS*7-~Gl6TR@-3)QG9;!5)9!{JoXHQ7EGluu4=<I<)l7(oqEO*_8_q<QgTOnfT0n8V- -R|dyz@2fMz&`yZDJu|l$%BAv=5>^Bi?Fhd{O@jVUjHd9ljwO}ZN3AaQmLlmTK=P!Wi=J_`gK^AyIjTJ -uho=s8C<nWi%^wvDwcJU#`C<88G$Jwooqd?_Ju4bW_;qH9sQq4F^>~8d?OVIeXa5j`?E7*Kg4@s<q)i -8^^%|Y^LZ9-<$OLlJNxGH+vjgz-psFFeRKKWXzXpOswiiV9~b)~339dO8?R}1efj+5_tZ{5K8sS2C0> -WoZMc?KP^b@nzWh-})kI6~!Gj0<_hyrnLN`{jP_l%ImC(IH_Y?_r6`HHbGL>SNR2wMo>#M1w#tg~~CU -~@<8HI0_tler4442+{bKPvN$~pd3-$`(a1v=*u=jiY%4zK?<|Ba_1#BwF(c$rl5xnIh3H6^)Ryvj3aN -OH-d>k4g?FilE{2?9dOD$F7ooHY$*kZQOkFf;H$inrG<MZRLP7>Ph!t)Qlu3Wbc4RU%_eGqqb`P7)VH -QjRK3jj0}tqD8m|7!$0Z{{g2X>ux*J{5kBvDp}Wxt%E;lTSOa}gsI46mFCeDGOIT9KZq))0xGWdQ_QS -zt%qVA_U-U3m}F)85H8${Znz)*>Oq(dNhW;OLvL#I(Q{Z&mkNp7{i*4DNp=T8#H3<*nZTayXW~)miAQ -3H4nHZ(q?~W`oCO6W>29O4Oy`(aB$@FB>tcQA`FxXus@_Z1ZJOPFUIwwe%jz@*sXK2X!cvq;cH1TQp? -C{&X_V!j6f~^U3Os<0C@2b)4zHd~sW07-3W76WbJl|bJG%v^VDd<<EbU#zqBo@$0f3PN2xeaZbT!twf -2jxrw`M(nWTV@86sD>F4hn;L32v4UnD?HHTb$R`1rdF~EFQklS1QGQC!>9#a)iu<cruPD18F5VKE>!- -VuIWb-Wt#I!yD~&Mtc*N9m@hEJSWqsB22gK7Fx$M<$!7Vv#i(>kj)~CUkcNS#gt@~RAIydZOo<U%;K` -O4KpRHT4gf^XuynHj-iJcL7TKK+Qv;M4V@mray0ag*p(yXUZb_K_8=sTNPD{U@cgI?LJA=c%?8VvK)a -YCFX}X`WGl+W0ya{S!&@w-_+`~z{{n*PcCp~l1}#-e_mvKZWN8DBcItMpIhlQF4mN21wUAb%a_%e5nw -|kSxT7gLkPr7g`^-CF%-pv2S-&mQ?Kb2GG~L;;_px9%;<UBq6&+g3+DN?&@8s!He}mS?r5=dC<+a$>C -B>L%Tw+?dVkPN0@@^&UigGD2XQ25oLo{J3(w416RB_CI8q=j@jCci3zI5E;h@4CCMD_*Ud1_?buxdEK -5l+3J#$@q_<afztE-j_Zh*eX5uU%%?x&&$6CRs_i-El79T~`mmHS%TbvO7v=UYzEr8*qeL1A-;IWcfN -8SdgCfB4|ep^ENP<H~)@DBE>ccW6U}O&u?c$3#&u*v`g##LBv=-;1}DDWn6<Rc&cMeXkv)8ESwz9UHY -QAHV_a+lNDq=CvoDRj+^UJE4n1df0x9tn0A<9bZXzs#B(v@Kz+9O-aK10Q7xg4*cf1;gQ*N5uTT(&4! -drWu<`dItG7!aOwP-?wFYhEtIH!`EWg}vw{d9{RTIn6sx093ByJ*^+<{`ArEFPhyrHmUo0N=<4#5W_D -xI|bM5E9!m;+HbBIg|$=H`8c{64DOx9_|eIdck&D8b^0bMHA0mhqx6g^-Y0l*e*zp89c+AZ-RFQ}OQo -#OY-CVR|9$ikm*>?_m^}S=A?_z=6S$;oInl!i8o^n2A^6A?785#ASWRFzVD@s5;AxdfD6_wjQ=0qGmk -^ov@U`ryNfJbtTnsLeTJ9vyeb1a2x!@CT<!n;Zy#_1DY%wvoGCGf<7?aT!S-RF*qYlh?(GJm!zpcnop -ypd&-WJ;^35khs=;?x0N1nsHiIo9(cOc4lvUEGz4O15tOh%PNE|)MolxX%E#xzZj&HSzfpD1=9i=&j0 -C5Z1jO%#=ZQ&ohY|BI&Sq#xl1SCyH>eusO#(%Rqv(OvBn6rZzwEx$<q!Z`)@$E;RNBPQH)=L<jJifXO -7l{>!7K&AWwOpXkvlS9u)zSqOD@<@BkL8W;#TfC1TaN}k1+5&b4ZLy6;e^ejs9s6HpGm;P=762TEvvI -v;G=op|{%PYOLd-$}%y!cfyvA^Ixm~{MP=`7>odDxL~m;%VMKK7$oZhG$8MA>ZPwjC3mo<#7oi4Im3d -%$d=(P>8#!GH*gCSwvz5f8!mi?aBYkTbvld$kBO{U*8w6EmX6kK4g;}X)GHCL+2Vj3rBV=OMuM*k54k -!kdM6bN^(1aI<$yOO0ceY1eY|5LUQ<b8F+SOm*I^>Qv&k}N@gSzE%kx!CX~Q#*pJn-ZRqeg^ZUAY;F& --i|Z!fw<lQ9V0p1>)PA1a#c?=UoVf`q+x!oBYlpE~+TxRB_E`1GJI!z$Wn+FI>3G(Yj25h`MkEnNrO+ -nDa%D%uL~^D-cH41Ua$%&(v?_Q4WRX@2^4+D^om!VAJOaw6d#YB6GoXmd_<X#_*H&6U1I3>&8B6u)}o -Wfg0y&{jJRO644D=1|r(ok@0=-}2G~3@G{oOQr_MO$J^c4+*Rj_SSv#$xV_B7|ba!I#y}Dt}|Y)&|07 -H4>+M%SeHI!1?QSRtyb(cTtRT#Njfx@KtWF|3z~d$oek_ti{*@_erMWKHfhoq#1#8VnzFq$GPDvhCI@ -pdipCzp)><>&A#cPQJQr16uw&qw9|s`DKsWQ+L#hXMkOQ4sJCU!3$Y^ih#3TbKi-oS$QQ?HG&L@JBN- -Yjpo7-Ke*5vvBrvuy52zWC$uz7v;`f@sG2H?k<{jX~nTCpCs3L2w#1Uk{taSyf=JrIs$EZ@7&fKc~Y( -SyPDV4e(Le4$5cXVXLRS7b{F%PVpZtfqBFUI_7t*dQr_-b5k2+DWku_sC+|$~yoMyoe~3@L#%CI4B-E -Wx>{_Jq40Fxb`ccB&!Ry(I!xb9stb?-^vBkFVMHPuIpHY>M7oZ%1wEyXD5Rvc^dGzof?k1;GYe^pD0= -enq<LFA%F4P9+S~lov2X1*o8@ls;Al@c5v%GG3K!d^o^dI4(mXhQ%)ntMRxiBI^cW*Fu%r=|F7|+9rC -~uU>h+W2K7myWVkHzl$tjJbwmKN$hKIvBHH61ZiotV=Rh4*hXBc%HMj}#`l-}?I(?5g`<IoNGvlKE1h -crfAqgS-kwbOxG&PYXQSBHb6^Z{CEJYovkP_H7-wVN>SlekyYfZvC1xt@`F?p_vh9wyzl-AN9mZ0Sb$ -JW?-)zIp&ap{RkKO04jy3-DZ3$LWI9~tw#DGTCJUMnd1z;cZ$)LTXp(@#mNK(@B0T~Pm7R5u-ysQEf# -6b~3xcMjeI;osP-T9wd)(p`t}r6fr-gzFMnQXWmQhYO|JG9${0>xg0^T09}}Qy~KfrT&Eom0-c5f`G+ -hNk8T=hcb0zRzpam$(j<Y4<N?uzS2nOx|-Hm{Ozn#4zDT?#J3on=Wu^x4COW&w#hwqd7Z{bph1N|5>G -RV-*ehKup`TZ%z*n+3*rcxeHA<#A@UdO1b-e&2c{}&D*{N`%BpPZ0jIeQg0P}ZP`19=^#2S?6pk0~>} -N5>71`SYVavRxsxz$in!*B-9TGnw-;}m6Vb`Q};T>EbSG3MGFb*!gZfq{oQVyZ_V~#eA{*1xKFwkf>_ -q4-!YN_}3th#7Y3!R-@2)zl*T}q07H;<FGUT`scD+4_An_iP(BR}XSu9P<6v)_F^?5dyN*E<gCf|a6| -dfSDeneZ5bw#&WZk_WL>d6e^hsnRrm+HYj-K3>|}KA3&mzq#+VY1xBD?T>ybz-0zi1l-?FJ-}Jk2TD| -Wc;|a$$}ms8V`aK&E5ynB-i%;v>q@-U4*UMFcCawf>X3po*xDrz-m*1sLiI7c?WmI@N^ZxTbcfR0b_2 -Dol$5@O4D;Uw?1q^qE*CNpKWW9#1gvo$)wF53-D~1Tu6RrPV?QDhHX&vQ?9VX59N>3s0sUYEY1lI!f* -$kkhodkTFB7<x8yjVG!BRkW5Kt$USS&Q_H`SJQX^k@B-^sxzh%lAkDCf!U-3hti<P|x23#2t-S%0y?G -=a5gx#-;+d}Kc%>|l)0^Q3@7`$wzaPVk{$v|V+JrXTNl*LKlte{VQR#RZI1yTc%uOk-o!ttSI3sEcuA -qXrR#(LOu97XgOK_pD!PaCVITsOQjhSahA%$E~AA_)|<Hm00v1lHP(#;~(a2fI_&nKaa&fr)22I7p^r -@$Cj>#7#=A)w(Bd$7hl_}0Y5Z_E*n1Am^x$?dfQcRz+d`Gbt~&%*Q!rmtM0Wm8^KPPxSws!wzVS0f;2 -;a1{-pU1^EjPOBST5JCo`7)nNRh4Th>E&7kgj!wwe1oW21Pl<JFb5m(9axqr0ga433lDHnCt)*S4rDj -g3wt>W(V?rz+0S3de~`I8*7bA7_9M}MKhp2K=F6;Dr$0X0=Wea+&Y)e3Wvr!`G+zRUW{6}3viI|M>Hv -({<8S*f5?3#!`W`Ry^wW2?-3EcQ-jiKMhm9~594WQT177_+xDqXT=bR=&#BmbP))0xj+B<jo;%mnNO0 -HhI0qw5^pw+?ej$06EuZ1PG@s@;8(B;Fq5SGO+L>48N2OawfTHpoH0;*YYNg?IZ(Y=mNAKY4b{&-0J* -nwyLveM(1I`eU->NiG&M}^m&1-V+&~F$DyL_qDvLhSwM3xifiq(5hqRaU1@~DrR;h%WsT`vL0t2$8A} -MKzsvw_J416Is-=@=N}FoXZY>#eeO!Jh^!`{*22MMV>8!XoL->e3kYmP2QtZ}d+$ACD0;imRzPzz<{% -}vQRnwl^XxCg_VG>@n_HjJNr-L^m2|hFao-Ip0l?ka7%G?@1PKS%P8%+(8x{Fzpftc61!ffAaJMSM`U -s)`ue&;O~6LWZlM}@yIu==v=QPfUlvmug?l9W6*##Fbbv16R;De*z?VzhWPJk;-oheYY>24t^t3#gHZ -<1U8vY}(3FS|971>ZR~0j-G0nOh!&<T9G!TV108!?c7NAg3GMlAtK?+$iMrh!aOzICcPSEm-KIXblZg -r4cFcCM3P<QWIS{N5%UzlbV{HVW|N#F=D_LtS82CEVHS}M(l$8Ui!#?%WT$PWwnnm}9uF<UT%!Q(LYK -9(7rrg!whqVJnNn`ND*9)5!x%nemD5=|vlmH!dI6z6>{b@iX?@tlXTgVFN1(iu`b-y54Ch;^{o_@Vk$ -dTuXjjGPNe}ZO0-sJnb!9Vph<C%=uXyMEst5>ae`pYvX&&8{$v-I>`u)@Yd^S?L=6B~$N6Kg+#Y0cVV -P^Gq^d;uN15;Nyhxpgk<^fG?gY5X}TZ2QARlaHW?!gNK<E4i2en=XHK&^!t1>C;(Ez;ALB~u=F2>8&E -i4OgS?Og0{ARav5OnStv4xexyKfJ7|fFQoS5MZYsYJ3<dv)LVYq)}rV`^$hGNT!8dWI6(`(FNc)R3S6 -sePYr?eypg>)EZfh0V4(*03VtF&6<^Uu49zlCQqf=YXDTW!Es#)E9ZYf)%5{QlEokS;YsoK06EVX!Vv -Z)BfFN$3c&@TLx+;YqnJ*}kWqUS^A6>57?3{_KH*`Q;u>R30UM!ESO)~d$`J&IU4cv6xGIEERflQgh@ -b~!OOPE9v}H<n8;avlCi18WHn&O1xN&4ahklyC;-qwr+4`uQG84^tp~k6Nqkk%({$-h{shgbOGi@4d$ -~e|zHW^XJ=IewAzYZO{mb{0%ANVxIHsdoE<a6}NY*tdv#geM6C)j0`VStUXb$Dh=-GD?Wp0r5QuFd!( -NK)Ht({wT(tC_>NWp~%LJ<r@fv)ffJ+qXGOHr8b_0P21y<OG0j^A?!?>JNRu#`y@4|AmDx$cuG@fCCY -dcB>A(B?Y^A*j-o{SB*>VXctX5ndhYq{%T0Bj~P(a$z(Yte|BhW$1wHR!Zomr1~^q<m?OQ|VOE0f&pw -7{85uh}PAX3r=Dx}buj#XmoajNvb?l*d9*0F`mlE~IjKH0#slrj-K{BEmR_L^J0MPesW{)2e!vk8Fx| -39@mh^$C#|j~GA<M^4fBW@UPri1xoQJCF>9zCWBi1eZyJ<kOyEXjf@4Fc3^sO!ze%e$+x4%EtFmQpBz -I%VxX~OG1Tx8_8!~RT?t$GiA8<XgrpL^oVhSYJ{`JRpM;1~Ea6}&GG2yD-(RPYC0k-K>CsC)o(J}&;- -Nq-;j_*hHtz~QR9!9L(gR}gaVZm4CZXqlva=G?=W`<e0)4EaNY(_#Mj9o#1;aB7rGdY(^uI^EFOCyQ? -B(UhRM-IjT*Klb%^_4mxIYA`6L_*!v;ZJkyLy?X4BZsA|JgS9TC$%A^Ep)5zuE~coz>*z%%O`&Z^$dW -n82D*+ew8xN)F~4?fb-=|;>M^yLbbNiNqKz@?h@|LKT<`%Zta5eAxsPr|!2sxdX|Ah>+=4ivm&9lKfk -QwM%?tYS9NIYFp>rsylC7jqJ$)5CagN6H^G{ptwcr9nXpcnNmg~VYIaQO<sJ(&XdmOlXRGj!1P)h>@6 -aWAK2ml;P_EyH=5KS#J000-u0018V003}la4%nWWo~3|axY|Qb98KJVlQlOV_|e}a&s<ldF_2`ciTpm -;CKBBL>e!^gn}*QG2QGa8MotfJSUxaY^NuC6gLGDAcYnQFaRi-Y3IN1eN~~VPyi`Ay^}p>aT1FJt8Tq -+-FMwO2~Iye4d!K<7t2YoZ5F40z&A%HM<>CPa<i-Q<#iK8Pe#G{qqFl<_~+B$Z+VgIf|toZ@=XlIzRl --ZQD<q;ltFWy1<!ZQby);2%SCgSR9WzKxh>M9$>AM*$f_WL_KK#;XWOQPZ_6sn)>+XYte069eEaOl)9 -+qBjhi=3kQ8a~<ooYly?FNLA6|X`;w8R>az{t`dQ(<Su>2+894)GH9pq&o@BX}NvijNgs>na;vQVE_< -#GuFRbR_mecF_D{$`Uj*Xl);9W~W%aumQLubS&BOK_f!vN!W=(*)1x{nM%{t4R=?1e+>Zu9HbnlrX^C -tTHR7+x2=k)gXeTHsDE_Usn0-h({BvdSB&r1FxS_i!g=q^SoR`Z&jgaTdn?4=EXRG51XW_Gy1eG+Rx` -WxFT7@H}&ZpUXQ7do#*FmwuO>EZ_5U&7g;?|Ht=b-%~$EP++;;o^;G@l)vM<(vNW%<dGie{-wGGJ4*s -0fne%!aG})VG+Ux+bAJ&TuI#M@d0!s5d4t{v?EqxlvOaNvjGXQQ*7@-zS*4X;?9L7Bk*2zsaP2siFUu -R8%FjW1&%J;GU^sKl|R(VRTN+p1|(vv?==GR#|-Bd6yRkIrhup72jHmz4l4Gq?tRo+Y&`6}b-UuF%K{ -Rd3Mlp6Alofd9d!T4duaC4016~dUp{7nJBY8v9ptb)(atMbjx3#urqHT3@%uB)a^s;fa@r)n4mcJK%2 -{s!M>>EF1NIrO{hEYoBEZ~QV2@_Nb$na@_)(Gl)4SoI6F-C}_LExn7TJb>xw=;)irFTZ*EVv2vDXq6F -8!z@Kr`1k0iyN^Z}(PeVFcy#*5*B_0-(b1D{9=~|`^p#uoPe0Wk&aZK98u)Yp|3~qMBlz=g;TTIk8y$ -V~>aX8Uk%~P1?$z|w|9<||h7lqfKD=($tGCGp7Hdwl>fxK{x*2`BUP04eJ^lLe58u9;KKt&gr$0jF@V -aR>_2l8h&2E#&WwoRa;n7i=Eodr})rxRTp&pI8#%+4>U0Gx!rYpzC$489j&9*86s1%r$0;&|;6y;qJ% -yvKvgB<ARo0uw103VVyZtY3%3aBpZi=bQ(0X9oj1bY%Z4psmfOJFk$v)fo~^($W>cv#&4J3Z0Jg)c7x -Yf|X9`6>rYg`W(R#4*E0&(~SGZ7x2JAC0J}rmgsJAEkPX{hV%+`AxEfDdXY`;5e(5QH9G!;e1urSvZ1 -XM|0S2b>PsL$U}FW*?$~xP2gU4WpxuI74j=!QnT$6rZT9@wdQFb$LH}I=<g~6u+D6q;4)NMShrPiF^D -#)-L?RJNAL)cREx5B8Pl8d0LuI@+ZN3>_`b;UDxZ(y;2Er0@NLOx8C(O;5Y}=cGgk)$;bAhH!(MEl$$ -V7@vuvJhkuEkto$PAr3~%uu45dCS?W|mG>u~_v8ZdC)Y;m5c&ULw6r2#^~niZ4cu$G#LZaA72YD~;qC -MvJ%Z5EuIef-%UKjUe_t%2KSnjtZne*EY>s<YJs_vp{#V6hpa5CYU^T`$Kn$a>T+IEV%~Z#7|79YlFC -FDqQs)o!E^XuVxE`DT^5lT{l~qPhe=UCxpj46_ED50)itG91beFP_0{2S31w7kLGng=@#Uc9GpN>f?6 -MZ?Wo4w!`&~!j-fPv?ttFd1#D4c9ayAo=rLwTQ?#lE}_EfPN^A)4mbKOfR$=$ul9-~_MS7hG|-c#hIW -+*5i!V-*@`L_3nE<rEe!23=>CgL62bZ+1DGzhKosF+G#UpkXaRqn)JfA+kqjN?u*x>8WS&j=jXRzANZ -Hsf8Nsaio5@yn)(eFu8~V-_T>|ByCGnvs?H6zcAGHaNsIJw}8RCce;$!#4zq>Ea6@{eDQC3koLlLAy4 -2fQGNyO|Gm#%|T*y_N`k&Yw{zs@WU;*i6-+*Yt0z*<2Z!k?i-Q5ZK#6)%6m?Li-BznrVj^cTc={;tZ* -ehGQ~X21ffT?byaTvEa8O-6t3u2)h4g!I)m1;Na%vPl==SZ4LaV2n)yqXXVa0sx5Uch~v+Iv{zc4tC` ->xJ!V$0h?GS&HOqht_xHx0jeXgKu!dz2cU2daxtJS$uh}{x*<|YZM3pdaF;jNOkcM}fvNxlVk%0czte -C~Livi@f-M4a5BG6Ouz~0$YS9#thsKj)o*{&!9qkq<B@oih?iNMyWR}A})%<!S<L(Zaz!^;m9c1bb^2 -DkHaTx|>Pk0v(KEg%7byACftYJFM3lNj1vV)kuT!b>e=EheDhR-volY?*zC`-~2545G&A|x@iN$_W3i -5jU_WqCtrzAkIj`Q|9U2(yN{g^AwvZQLSbjTc2JT0zC*g*3uX&=g_`(ByiP&GSW`)qT(qz<dh~4cdSH -^!X`trCfvD5BRG9o)Ry<x(Zj>GMVqftE)a>Ib)6Lp-A(vAz<kdv8`Q;81sDh{8{XsU|fxON*WHV<v)M -5e^6XNx@fRjHPe7-APd!6juHv=nyDu>ZoUT+-oSFK>#+grE~AkH9t9}1vi2EN32g(QMn&+CEv(+Q#<2 -m}#sab3QK@rbDX@_%D~?7+tIrmurWTEmwa!5}f;lBch$$d4Gwe9;^-80l0SK2L_9#_Sl9VWQpwrc2I8 -oqOic;d!9}qdsskq)D8OEM~N<i}hY*nG5GicQ(M_!@dh%4asBuzj5FZ?$$wj&Om%g~1G*?vlKDRzMXW -ZH3^+`@Xz387OzVpUlU`x-iM*$OvM8AxJLHfA5=Y`tlA(P+O&W9by?A?!4u!N8)g6OaK$oub^O7<53` -cac*-Og<*4r`WM>i)h=*i*088VAgAr`evHKl0+k8I%p=j3+*z@LD8rVScoTBuDcHFWXEeU%Rss(wY+C -JPJ;i$Jp{8uI4V%k`qo@mOyJf*a+mCEG&0a+<o23~hTCa_p2SqltT%0~5N<u0AFeLcrma`o^~TH`JI! -ixML%<W{Z5&0qN!;MF+jT=Rg{5SB-@IAalS?)XRyp~VGX1bS%Kgs$Qnq5L9l_f+HA-$cnjJavQf>4aC -@6}tX3cwVgr(we#h*Fb+;KA#a2XWfXW~Z-p)w0v#J24GYMOwX^~R;#x^~<%U3IejZ_Uq3JpjVP<o+B> -5vbB%u_EwEGGfxE@$0TK|>nVLn;z1`d!&PYX?IXsVIC-ig-IprF5%th7L*d*kleMZ_q&m+H0F3yLVnI -vEpAoir+EjAtKe*{y-RMsV5OlEMp=p#I*I8(Q1NZ0Xwovc7R1CPVB}%nIPeqlF2=^Ug0`i+nh``j;ey -$3Uz8U59Ec})MN-8mAJ%OuMI%1x=Cd%!ajPpK5AfQ!(`g5l}f_!ysV|3msLjkIHM6N%6=^R3*Zlm*Qn -MfTu=B*D}|5@GrulNz~fDoEi&Z%Xe4SS-bEJ~l_kx;$c<@?u=IG;QE725TE|VSUPeuf-`moLx^)q}st -nGY*HboUUucjq@ctULvdGjWrLd{xc<az|^yosCAw{)pqlVQ}%cvfar9DzDj)Ww)+E_=FfN3y{G-R+w1 -zB0FLn1P9ku^ZIy4DG2uw&ifvC+w~o&keE@#@=%b;d5JKH-JY232NM1MW(~8`Lxb(PqFb0`wvRuBCYj -e2MK6sgEq7{tEb2x0Xpn5~Y}-?b{~e5thr|BuIqXIS?B~a9hX0FZpI<(YRJk)1-?{jf><KG?Y3}t^pn -dQXqN-Z^pWR?Vdn}i`o|#1f?I1kNA?6d}U5#11%t`n*4l~H@hGLOlsLLl^BW8mN5&F7KxPY5yWwY99! -R+L%GfrRceU`mU2kaxwq7L$Jz(rzJStQ3EJ$^nOjSK{D3>$t<27+IL$!sj6&eI0b2%<u{@~Q;PL>CO$ -J^bU?8-?zBn9YANjSsg0fXwC!ul>4lwt}O@pctNmd99kXzNqy{$+r!&7?zkwZ-M@~RIjSl+gK+0#Em@ --GVj+u)i{n^KdIX<jVKmK+>3JW_*k$D*epXYoKNfUpt;UHc*uJ?N-mkC=vbjsA8ZeRFbekUCV)t7M~v --XcIRAt>a_Y-G#EFta)AKTBkS{_qSzeOmsTY*z=zIGp2ga4b`M+|ra|HFd|d1jjH7$A4-C;W1kb4Y2- -YA<RJsswokiu?%=Va)lFGLfiez6-LMtJU^U|j=FTgHXevxBz%Kn3CJ~_tZR%H$SRQU7a)T5@@`mD{5@ -WkcW82nL6EE(;kemyc@Z9<>D!y}K|Rs<4e}$2&)5Xg<_T@gK0{exAtHCY?dclEU^uB+|B37}Fq*YJ?a -69cjsaJepf~}5b-b*~?Zy=Hx&+3lgEKz1=e?}*CC)WUJQ$^7v`?=Qsqn+)>Dg;y_z%PV(`W#^oIphvY -DX5bd+oKiD0zzI6<ZK9z@w4J7H~wmaK)N#3;5UwKy4Ao79K1-$~*oJ_({APxq%X0-*=}%L0$$|vOKIc -8-TU3X$oQ=vF+)$!0B&DZ|HyaZwGinYz2_V=)iD!*?PK)3QQTUrRbrqrg_V7J)k8}r44S1B9|not#WU -dn?uFIa5UP}nGJE$({={P1w~%Zy^UXnu@ps*OmusBK6yPF5g)rn3dXZS-kH|}{rJ`TMXZ!MS_~tv4p5 -8nku7zXROp9_!knX?m`Gr+SYPpND^`}v#vvMm%Fum@JPL9qte%e4JX%Xp)2;f5pB9<Cs$`dZu*T46vp -~=Iy4$crQ=xDVb+hR*^pDDRg8=Z+h5|=a6UKZ9<-nC|4nvZ@wGq!GPL4GBP&UON9oB2s+mI!_0vOy5F -yf}4oC+qIL>z-|OxkKQeMbiMJqMCbd=&ZIPs*rtOF9lBn^eajore)ks`W1<ocP?Ec;a&sN}LzQfFk*< -Q9U1$*8-Q~xesnLM3VdAvwC=;FI~cpRyBg^1<;Ab5p+SB3?)0C&F~VW)+q~oVeo*8VI%xzpYAwiQ#KY -Ar3&?{KI@&Bdr7tw1HYlk%y#4iC;KlJJm!-1u~Ep7LRrxfZ!LOigAn_!hGJ+=FC;WA3C>R`)*y&XF?U -3Y07lx4i3G6yKX}5%l~vm&_745Tptd1-dHK!b^G`n;vxVcYUwyjAs9_1w&|)aVBl8!|n!PykD_Y;+w@ -Y2xroE(V!dN)utG-U4N67it>8HL3CDdZ2w7~OI8{KJZqUuXR4nOhihJlg21K~{Gr^^_m21-N+M}1?Hf -VS>r_Kl0C76Yvg8B^aD*ly4gprW8DkXi>{VbQ@o@dH%`)Re9n`++P66mF`1q&;Jr;YY0Uw}v;PI-4OR -++*G{F1DAq7KrO|mDbcnP{J)6=5m!KMeB>x@(Befik+j-c0Fb2G|ig+Eg?b<HW_cqO~j0<T>_;+n?)4 -;v-DjZIbL`%4SS-U5SLQe-aqS<NL}6N;QImHSm5cf{m2msBvQzTM;RU37`@e6xBk%jU4+IGCh1xn-N^ -I-nd)nY>KIhx5`OoPbu=2Ju>?jTxDPCN6Q}=XN$H(oWVe22H;$Lzzz@))xXv1hsfyYu%$jI4ijy?8O* -J$>;?$Iu-Lb0ml{s!VsQ8d|Jfv}sp~_SM^#w;_^f)hbHe_3|S(f=;1vzk-9Tp|;lF>)qtihNhCd~K|q -vK6qwZ+~RWf??g@uN|QTX2(A*U6?gjEf$w^2J2}wZ_5c!8!i<0Ka}b3f*oPvoS$y<JA?~5w5Pr=rJwt -@b^<Gpxv^Atv4mQ<aqkiIQYIbG2R;#x?Px|xHd`SSiyu`)RQaIPkf~v#3)t5n2-%$T`_|S>h1ix+pe{ -;a}~d!#&HiWUy<tM9G{7d&lWYS?%_Np559XKi&fJkU~SpLss|PFO>fIO?8FIq>5wodlB@kBLHF_^s$y -?DwxTA5Q6~$c2lXf%D}ZC<O<5%0Msa&iM?umt0T*rPk5Z_r*j6xMUQugRRYt)V!8yz?OfXU*5{#9kMe --yf8ek_V-L_(PLcxJ}c%&Y;9l+9Jov=#RD`pj!Hn+K*uj+Q@lzD1OXxovIZji01mb{|e4U14jPRFf0* -`q;vgTe6e8c(GO+;ghCY;?XEP*5?35U0vDio+DAEhu(S>D9h@7iFA`qncdd&PMP!ztF)rucz&=!}>I> -lnS)#=?Xq4dpg8r?19%eIft{D<SrZp;lNX35AG6R1!TXt(Q_C3Z7Hth?Qs3mHM~(!2)9NK#@cW&?pr^ -?g_FVgmAy$taATfzr&n#Hn$7@n(J}7S3n4o2vFpvnQv3X-43T2c#W2ME=u~T^Q7Uk0dMDJQ$-mmKU1? -J*<DFwTRh+$Ps>HL$B@C2*MoCsadZa3C{hJb9YkNXrriw=V^Vbo5cjPTw%C)1bX%*5AKt*f_W`}ms`J -ckuH7_NT@^yMRuBJ+&t@)F8PP7i)lINj#WJkl3Qz{q~@#6Utby!9II;T}$8Buo_g;WPW{`K2asMbbQJ -4aN4XB6NH;&WMX7v@QUR7{02(O#=5wj)^Q90nWFkry&S@GH{Fh_)lMwa>kH4l|Ho{^5r=u*EHp)*&Yu -TzSzt@5yHjXz^v>oud!j=p=ZqBh5Lo5CmDCXcz@d(01M%xJYFqdp+1shhl;ZRFBSHax|n*^>Hx!w*ya -$>Ph{dj^9)f$ZT_q{ijv$6(ro6m6=pbU|Sm^1%7Qwf-8SX`_lAOab;1DQHf~RLOYfGl8q2A6RdzE;-N -HdhhpKGd4DA`#&|2~!}b^YbbYi}ftP}@STOMOC0j3E`wO<rgUf0&uD|$-^H)f5rnK@d?CA<Hz`L?aYp -afW3FP_mbx*~5yI!N6$gC&toVLX7VX9S;0@Go>Jv6>pl)Urm%ST=Q*>=jbFZc`_W}o6i?Ic#E9xH-+l -r=%y5!?cZ!8Dw_=ou_N`$xbXy59hd4*IMp{q_?dfPJ<hha0xc@IPOE|J{ALA=V4)0IR~RG+DJsfTsWt -gqN@>b|8qYb2%EY*cNQX#K=N|M=>Sps5J6Oz;0lUbk6FXd0xv+i~+p^J27)?@T~uC7)5`eKUoTNl)an -?YvG0eI__Z~$+jkQjCTHqm?a0T6_oOY1I^pX?<lL#_C{?WK1@e{y67*&9?Qp=?Is$5DuAb=qY=oQ3sN -EPI+8GUCPv}4j=JQI47vw%59vU98RF)4SwOm<sicRplk`4}B)vZiN#B=wq}?(@bXlZ=R1rOotbf_gj+ -b(qR9nO8lI}wpkEzl0Q(J>c)mmLSjMDd0`F5cD$$c-WKcE*UKsfH`hz<vUE3vLKt-3b|qm~I)rJ?UY* -4H49dKEv7&=&@J58JP}Z^;Vx@GeMA{Y^dP{WhjlQ5#S`d5g3gP(F1_`4GNzF<zHER2*qhyWA_4&^o-2 -SW?~x$&Cu{gz3g8-^DZJ19K?4pY+Wj%XKF%eAfYH&SR(WK@zIJmV*<WLI-pep94BMJo!VUW)ReU>5V^ -F(6&Jt$CfwSCejJpqRcU1iJdQN-6AA)E;5P>1Cb|7#o}ksfgaNj=(GOpBz(k>3RRgn3~D-)#-aQ=gx` -~y3DyrCYG_ieSD4fgz3@q1?M_wvOO-9NH+(FSgHDulT?{>F4HkIlfiLFQm>(rCZpQl9driMIOoOuE_` -1p#$3d18Ezj5MEX|W9gO)ew&rGva;Fb2T+*KG5X8j6|fvg|5P&x5P+XyEDk+XOL4`i%WQYmv*T5eI^B -+(8thQMI;SGMA-FQ+mRU?VA>{uFRH39GDF0xa>3W^Zu%+w&t+9BE*sRm0hjpzA+TS~kqf_T}U_`tteb -@b2u3%fBDL{%~~sHk3E#@Fs*e;ahp}F}(N!s{K^J+Yx;DX!PX~w$g!zr*3R`cml_Q2QO@RM-f8o>D?! -t-hJx!?lTJ-^bAJJ>E?pB_~#}6`H^vbN=bF>#C1^Nb9@cmpiyz|y36qR^_LMecKpTbk47%g{(LE%v9S -LPr{BETrl0wt$Wbb%&C}w$93^90qnQh3j!YZ%mw~JyO7b=%E?g~+zIW||YfZecED%QwcZoFAq2m{B3v -&J<I+MAZ;>p`$TDi*+Uj98f{pHc=AOG!teKdYJ`P0Rh{}G=&nEv$B+tb%Nksv|%4=3NFUJ@h)hp3q{q -qR!LN4pE_a`GNpf~Ewr&4=w_g?w>B$*kOxEjzDV3Nhvrk{Kxc>%3@F8G+PBN4gu3;y@8?g-RuK@QT}o -DM1JUTx=`q5>Z=i18@ha5<svrXfMw3s~n`q?FMlWW*|Pcm+rmK7U3g2Whl^<bzBNb-W#LpX@2B8B}JU -tGPttaRUaS6O&%{Wy%a2qfy+*`lk!wE+G1o`6o&2y5wRnd_s_!DNW%Hcx%uT|`r;cO|Ne<t_*3)CXQ8 -8e@>XIEu5A#htoh|*N3b2VIds-dN=vHQ?z$QTL+@eGh-c9%S<li0=s*xYc<|u-4O%fkhmO?Fe>58PhD -DKN#ZCtpx0V0rzcccGN+JsmDZDPpvy34&6@74`lR8l~C(7Xhw6bVCSi>Gx1s`3kGMr`-G?$NFW4{n;c -41re{gTs5@>{)>{W)wce5_4{yx&=ds#_VVHl1jiK*-U{PPie7X4ST++boQn-?)|p5I76Z9)ABP451=w -hWrQ5bv7t%)JTtlWm&RB1fMtgCPZ0~+#47RhHh_3$yQc3r1Fv&mVoG4ZlPyMeXYBLqikhA<a$+`ry$L -e6%*Fmq{^}G6XtlQPYce3EwrdssVk8;Qo5w}005>YTfy9f6Uy66X00^|MJ-JUF+DXDkTso6C|`B_7x? -FE<T~g^1VQ&gGFC@3koDP0X22+b5?e54{Nt~^!hq#O<HLl-c0I*ugHc?ZJ$h$vr25@;Mpk9nxE{$an~ -+-4Gp;FL#!M(d@<=i78pW_tGG1OWNkmh}z2utkPgE#EIURHsfp{ye=saxcsM9NBhPY?&Vuoo*76HH3_ --tmz1H=ZT9_AvQuAM!)x0`mzHS68=zlllRDyio1Ld~ZA^Au@DZ>G3ujYqCsHpxFV<&@P#HyfE<Y?h?c ->yjf2JYX>HhYny>KoPJE#g^J-j5US=#y6)apn5krPL-fNegU(36PfJ6$kO)7rxVOkr_$}sh+pLF-M&+ -a7!<JuR6sIhKtehuO^rE`FOeqL3X*9eUTlHb12ICL1ZrN`&>m~MY5)VmN$1sR2hL02gL%Q(EHQl^`G7 -FAU7_+R^^HWmISPet$1tJ`5Hyp-^#&S>ZDF%_syJR*^7>5yJE%M@jx&#EXXge<b6Osft6#}zC`||tgQ -GQQ_RU;GI)@*pAYuU-%4<+F3Jk$Hl+?<kZSM#)#f^aGp09yx0CZSu+`Ise2qn;gAj)HdN)lF+_?^v|r -H%&lB{fnzf|0CF6xNdzONkLR5Z67DZ7l`QOVq%&&l<MG@=miwp#}ueY)$sn&Kc&0&*wWSimd*sIJ3so -PVW*RI)^M>1`3c;f((H{uS^ilcF<nImnPsRz-ADDIl~*SqK1WSDx1w(h;v=`<-7Y1bO6p}+vdu=LxHE -<u#E)76a0lYT%GJ#_%KB~>MkcRLyLWupco|`v=*>EE~@6lqqJ%|NR~EA6VL6u6Uc_o7I$c^iDT_@{kG -0Vj-fILglDuGpp&gi7qCunUIZQIz+R7LuQ#)u4P;6>4Pp1^mZJ?7a_E$^w|rr~c1$F3JC5`WJ&KC4b| -!utQqI8ud^(Br?W)$cb=-xp>5P@@(?sx<ruJ!ul!2qXEMv=0ptj}3_RTcPe@g%G+1odN_-y*wCvTH#j -Tb+>JuF<e3h!WiAD_RSChPRGPeyOo$-J!JOuzgo{b=;l%(mJPnq!D^r*C`npM8Z1;@M&m(778<q^uyF ->eF6IOZw6a#!O+^?S(RO*`W-$Dd(V4=uA3$JFC*>6m8y|dYd;CaG(?BSjlp{*>0+A2`XMznWiU|me6x -(&dgG4AC=Q)s?MP}XeuN*#ppmwl(`|AG0v);*GPx;4F#mjm2C>(gsxpEOSBAVa8z?RgP<dspj5zH!H+ -9lo0bGwSs|_6sC6mD(Q-pcl8AhD2w>lV4i`P>WXI_jnv}>XNORQPbD9RZCSr~6PKYC-2SO4#n?##3jG -}v?hl=!_&5W(1neN8Gmu5~^%3(SsjX<!TeJzq*uws)<&z2S2CnhRnJ8D9;`3NPStYkQJQUEQkWcjqub ->dYA`Fy)dIu=$V!zy(!?a_EGA<t{xobrFBNfSG2Etw~+hA*o+^T1A;{EzyHDZBT&dGb4%q=Z-7Dix*u -@abMSl^8FE12OYESxovKZSWa1UiIGsUM1Or=pfH^xy}#)=rE6LBlk4V-~{kVt`=U?&=m$c<KhCo-*-Z -Ls1ISrfuLLpgsL;jQG|V*EhGvj(805j8yt!^ag^i{rxab3PYU(d6}}C-vO`ZF{Qa;hSo(%@RK(c-`oJ -3RU4zCclF)aNnMo|L&AoZ~SacdvSvaAB7`w#3t#Z551wwLpn#!fE4XR^GHHkziZ(553dw$4aqu8^N>J -qn-llijihA|XjAkD<{F~R;0BYdw*HlS?_)6n3jP@I1q*Q664u1)V+xLjtgR_K*=IXJm5&&^V&XD6Wn9 -sj*?CPWCAX0l&8Ach8$WPzdzNC6b8&`a-n598sp(9V1$512p^;|OSV22aEhTan%0Y8At0)_M>BnUA5O -pqIkt3IiRAbOQaZ^hiJ~rTKs!n2eZbsCAg^9|k_X3Xj^)dMEd;zQ1plO0<85B;v()vEM`^lS+Jb&=F~ -THts>v_sGI^c)(4sCWm2qcX;7f%F)VXPET%27!pv0WgSdT_iB#5D+=%tX6)V3C-y48RF)dVVDz8n4cZ -~&u-iCi{Lmy=lY)J^&R<LlD~U0HE{`#jSDj<jy2|aD7pLoNU4p8@>U>KwfBf;s;MMnEeNU>#L|v{SNy -Q8Fy|p?A83FK6Jq6Iis&Ch5H3D@-gQM_q41BmNQC&eE00Ik8Rmty*p8f@$Xy$ap+AORhGH~~5XhnwGS -FDZI)=2lk-h`=C?=dT$sLaC~nBTa`R&=S%w#b_u>f#T-%5I-vczX5lX;SZ=VHZ}b6FE_IO1B7}0*kr7 -1iN(-ej16W(d88qTPthI(;eq^npcz|SY1rYuKAIV2`PI|$5#P@7GHaa_c(@zhu%2o=oobdbGf(0x(6N -IT)-$unDmUH8%mffd%Tx)=FfT{LnSzRtlDL=&j$5U9h$~t<6FAC2<kGlb{P2ekX*@C_A_)(E^lRxR_- -#p_-FWdj#Tk96HhB<{mN0e1*8mr?b3!`R%s95>r5Y)?lYpv+<DI}(1mTvV`_T4{9rt710fi0T4q2Uh9 -G6%UsA%ai0lXY9zYKFSB~mem@tjfto6xCol8$8m4FF-fPE8t5yv2Pc!_Af>gh5*-J>48Mb+Z>jZV4Yd -qyWCR8WRx5OLnCRad_JOI7=IfP@kwR26rltYpJ5CA5uUdCsWx3^t_uwfn7`822XE+$wvZwOm89u^yfV -qZdX<Twm$E0;&<*rw;U}76xX5<sykS+;eaCJz5S|=;Ay*3&mlw05&#D48N%RXc9`H#vD7T5x&3w9nPT -Zc&^=W2CZ+f_C#5$2XQ*4Fw74wf=?cO(!T`VXzQ<?Kx>oz^rx#(mucTaLj6se$Hz50?wNMY%SapQvLa -(t?;?2rCd2BL$=hK#a)rj5fb<W%8zq<PBO`1Ugq%T>1s!yxR6TA)YxsE*V9epg<=?+}{oxnU<=;Pl{n -6<2-_wmq{@6*cRlqj&nZh0C9bUT9Tu-j19}4n>K>tuQhs6vY1U;}lF`UL^x1pS5C-8)F8WDy@L?=+)- -Ua0#zOU#`LeNzXIPJ?dI7qK{?sX({PpW`n&~N6%#(6@=Sfu}LqQelD5gsNd2kaiv?G?o7-YauOZvd81 -1X#;n`tl)0Z*D=?zr{N?0i)0W#(5w`&BEJuwlmf7JfldHekR4>=u~x6(jBg37aem<3I#fpo6{9+_EkF -@{ov^SNSvW89ebBUTq|k}7cz64!co5u-J}p4JmzBC0dZrJo?7W|$*jh|POfa(nYNNgMcy~jnw~P1V9j -p0-OW%ikn0jOx{EPOlI3@=T}d$Ds?W8`J|80|=Zwxu)S$oMS)0UrNy)%HMPCMw>)?(eU^snY+Yx)G$Z -cC73gS(|L2jgytkI2o3q44&Qn_7TvxTPS(?jOHvi5~VgIP{gM-IK&swF4CZ6pcKArcQvhKu)sW50;90 -bboDtDDGLZHEApv7F4_RLyIfX7`ni6pLa^jrM3qi^4#DzTupDxG4N`jy7EA^9XDNLGA6(RNKlja*isP -yYZmm19ENi6LPbZpW82k-pf(F=SGUYjKKKxyNdl@Vgag++nTU-n>Z+g@b6Rj`Tq#d&+irCDJ<{Z5Z;g -n`E)R6oA~W9oTa08$rnQ*I?0M}%)samov(?UN^R;Axig$Eo6FhzfqMcFGpBQH`jAHxDEIYzhdnG;TNO -)`GJ}^Kwfa)_BOVeZGu3&n+XE;Pp{t?h`s}Md@s_0@AZOi`TY|O5)4ss{l4V{HYfTzeqh6_7v&~dC|I -?)5_n1IN%q|AdHqDnM_2JttS<+cRbm9^sQJm+*OQ?8{Z0Kf)*Ju!t%OL`RhL<$7_cPG%6cgi#Pr#?w_ -e&?eQu5Z+4PutcvSQq!r?&xz*JCd7u3PY=b^gq9G$crR8^E(7TR^pROVLK{e(->3cSz^QP9k(OXN_dl -Z*$WeKp$nG7u{qs?{Wi3_<WVjGt6r*BiET}4(ZAP$wCGaxwl0Q&t-PPZa=<H!p*{^p7zEFePINXJmYo -<Uq%~z>{JvHU9~WFYWhYQTcl0W@ze4c8J>MPKy{<pn@w3Yc3pYbQ%zDxQ0<|FK1Nwj<_fdAmAk@NhrP -y+x_J&f{vMnQ4KX!aA?Olwj}?TZ2Tc9hURb=?t^yUc3SE?Ao$#~DXa0D(tg<DYosmvl?M-@yO~01~#k -GMbfPIP9ajM#6>po*j_qdod#Rn+-Xn?6O>{B%qwF7l~<0#^)pdgd2jPGYrLh~$8vCE!4JP50KukO1S& -+B?O2QGp#k$*zpx^z#sX&1(w!h5f!Uav>Ldg>ef^nk$OLOrY6uYLPXHe46Y_uCukW&%D3Nw<C{bQCvz -hz8TF!dP0$@QiYx66*GDoex#X-)!$FfNX+vJM_CSJo0Rj(UA|tIaWuu302VZdOOEZ5TIK9%#??tVqSL -2;HpP#-Y$z)Ni+uz@a8tuU&0zty4Aq&Kpb^H#ZKo|{uzJo0B44dzwuny#!Gq!EQ_xRvCHe8T-cfe6(B -;_MePAvr}2`4eAq+dO8oo4npJI;z76xSJ8$EL(h6)i?T)GKyCTMN2yS9e%v9ekK|jAoKO8_*M!!?(PZ -YV3((wYw^Vsa`JL)9AzC*{;78$JjDY|AVWD@=M5yHD3V+a{!l-JJ9^WGx}s)XofrT$#*>cKM@ZzzgBl -M7MMQhrzEP38z;WBuKKVVOO<F&o_?Pj)=&?!q^`UZV$32wmy17zii9yEVp~gqmvfCn$8_(|sF5pxb_5 --n<Up0=5no-G8G*3#<=Tn)WPa?<^@Cpn39OUJF^T4%hHFxqAm-pQio;5qV?;C@L_;rqC8X>XLyvp|1Y -xfks-KI<>`24_JKzEcz~EXO=qChPSj(_*LFbrpT}o<x8!(6LIi0-K3hJjbqF=y}Q1s9#C>Jn=`fP>zO -2a-5OW0=mnzgXgY_gIGzxg+Xf(Kobn1_+<~%RlsqhcQ+MybV_;-bs<*QmL*9y}<&vUrVDg~cx{V21?1 -6PhJDtX+oH6DQDg6nSpbHQ&PaEkieWT<M0y?RH*J;_KR%g4)uKmr^FPH%`l87%dwhrs%az!I7a)VKBc -=Emn5D{0t`OBZqLsMb7FJkW<+>F)ld;_<t-aWlymy+9o26nHf_Xk|ybMP?C$F=}F9Uw^iEYX2^LB}xo -|L0sNhlvZ`C^v!n)|MnZ!*n8HS>E?pZM#ia2L@cVjO>xPD?y0@F>}6CA{SjsveTQE@=ocP3MBAil&8v -E6@ck$Bbauup%Z91U2X@{{QT+j;FC`t#Yav^IZUfZHSF2armq3$%84{Xqo}!w^UrV}qboVBk~=?b@Ta -fhlXMuxzT4z+SuG#(^(+tXWu`Rm6!F&+8)V2+ho*E%es$r7+cP?4T8I8hTXZ>3l|Omuw~|WBwC>TdFY -AIDU8PS^mOfBkr+aD0W6s=fp2fzim>gEycX3X?;?^RJ`b5bGtr@dx^j>~vD;|d8kff<?@@egDJ#+9lO -`Yfqor;atC}x8OCGTK~tIdwnpKkH)x>WHNxTBJ$V?0RdYO7Z+aYG)R_8hyjqshe>Y1O8n!_>McOXaOc -E6|ORnNyp}>gjApl<E@y=~#2ya+h*di)m0Ab;{G#?#gQyt2wY~n{_j5pl)HLfH@F3m6Jc(crypf@NwN -5J;@YwIhOy!v3ni7JtcZrs<LUD=9-30I<lb{$W~=*P_*ueZ!f5li*ov4=w762&6h^Ph4)7~9?KzkM<w -3}^K^m`5BBvG@}u7Wb)1v6qs4k>#8YN!1;80Nm5F&dy0~YSQXv3cxj|2!(}pFGsS80FW2@}vK8)pa%x -dP8u+33x*3G#NvLQ$b>ugK4h3M1@mjOI#-?ul$x=luAM&i<=Kq}9N3K$Ro@n0FhRgYP*Bi<R8r?zaUy -+IYHN|)DX73%F~Ls>fi#;qQBY~h4X7Gf}V(wwd_rXSW-?wX^tQAibh*BQw6!rsU^u+9mv;c?i;E)g%~ -#}-wPAWa32s(L@R=-ZfW_nJf|CU}3)YJqgkL7s!K$It^0z@IuJ!Pj#YwAqiQuL*Nh&P<y7$3_QrONA( -Pc;`K?@jR*Vpk$4KkWGGTUTWx%ZI_Mf5{s7lFSscVK43~@t-W>khgv_gIMakK@#sC$!*-bq=f+t@jl1 -Tj;f*oa1Z&tnvn!SGS2p6N)Oh`7wu5w5m<9~(s<I7+E2yY<fjeeX2)&qr64&Q~dfYVGdebn2B|w-%v0 -V<%BU2EtSZ8Gb%+BXJd65Q2NeU_M<JJlfA^iYZl1`}0-oaY3MCv=sTU|2xbHLY*D{I&jT}J<QHZnHl* -A%CrTuW*&d{6t;l^W0074)ITFc@SR-Mv*CW5I2BbwwkGYO)#YE*(&?nHID&$C-LzmBb^j<`<{5!-}Yx -4usGLpnEz&mUyBA^i2oZnC%ZFsY%>5iC+C0r-Fx8#9Pw-&FO5hK%%i%0}=m8&}?zNl>-ltnSfe?<POF -Z0+nk7^pFZ{uHV>L6P?vx=%{xgI}h3UER-OZ1giP6$e!Eb=_Cd0?mNm`s@JmZ3vCp;qnXzT=a>sEGmy -Him}4e?2C<UBw>)!OFl|e{wjzoVsk*lp5AcTCE3w%GRE<f?wO#6_`$fd9wn7;6Z+5j4$w#TlPJ2m!YS -1dLu##0C8+AHlZ@`=agy<K%$E=BT$3~9adT=J96AKykjX;*QtCCU0-W-J<G@x+|EV$7c)HapJcA^Xgv -i4}69Xo}eWBKzR^>8ed)LQvWZPhUaB~JNjYDw~KT+Yt+^&wf#(NvKrAZd4^r&RbZS{J>-oa#?UrV|^} -PMMq>&2-RoheI9*q=}gEMg2$3jJZGwQ3ZS8>p(8@1~zw%*2qbd!NQM&$!wdiK+W5i45uyw^RSHO9(t; -Yfm~hTQX>7L;27)jd2NEF<j{kSDfSbb^1eV<(O9ghf*wZ8gP^v>3b;C5+ky;{*>*ySOH=@{v7pK@ub6 -@_*sKjSV?U-UY)ZFGY|M;QuEwB;*rw2<rBPWQ@m8i=O19k2Ip*D)TnTceS7si*tl?zuJpD*H2?lzrS} -L!sFjrRwf<ozyj_|p<qHQ*!6=eR{-x0!`DO!}LZ7}apuZ*>54T_jcx~!X1iCkohk0t#H|95)r%&wL@+ -WA!S1D#E)Ir}$*Vi7{uzq$&yMGY<2XbTRZr%E<3H?lf?ChQ&;OjXg4@S-a5H0#}JxN<VTC&#u%8p@HI -KAs&MJ@1vN$@4o=a(>_Hd@ZdIdBA)FM8~{&69a%JA5JLx*CaBwq|pALEId@nCi*AA1Pc<y0TF2n@)6< -y`ZDr)j@OaNd7QKlI69>$&@W^nhR0fjjM2w5yPaT!t=W4cXw%{z=EipKpkaAR-Kpra^5ElSBIT|00P` -Z5RiI;~Z7u5x1WtpND}bF5R^JE7p64;yqVc&K5Y!triqHNN<>EKtL#alGhfI%LM{>tF6Gc`}x%ndNIE -MAUcV*h9OiOu5L8T@(GpU)X?L=itrx0t72*tZf_ya}f*~4<I!t`#yJ|a_2wanys)`sp8&pJX@*Ba}0_ -@BUD!z+C@>FiJV4~lqG*jRHn%^5x{mtJ_f<+1F_aJbF~JPiX`ARHqE1q*jf54N2oSEP)wVvE-wiDv({ -JryzSm;|Uzt1fddZ^29ztUJja^Myr;D2^%TTvHZSbw^Es6WNZlqaxixT1B0pl&jgTn;lj61~cYN9@G= -uPo}5A=~p&LoIT@vOP)t$*E03tgIZ6BG-i(;ho|O7R^qLi*0%z-qi2v=PS^B=0VwOM!ZODu>oIewd>5 -+BA*r#xD~*;o#sqr@WC|1tza>o@Q+kN;_%NEPo)eUii?$m&2uvc;0FzP)OQ<{gUkk)&XROQeWe<fq#^ -;$ZvsFs0qS6zaGJG$}+;1xE3=4ZYvNyetEZ`IN8nDo{8(cW)v8nQ#0v^`$R~(LzDll^MLJt55d}}?3e -O?S_=n+B~bt(OxG^xmH_S=1B(2U^+md7m6M7wwo--Dc4P|TtSwv125<t?fAn$iY&p9mMd9Io%vlcq@d -Rrk;l;pv-rfcV~*gR7^<&|+CwdS-DLSMSZYjlpRCy%}D2ypttsD@c^5uye}0u^F~0c!Yq>kOW`~Z0*2 -ezWO&B*#=F8$Q}eX1OP{U73n}NrG<t*LD>&wU!KValAf9>pHdoBqYD^88t=n-YP=uE?e-|>74z6K%kv -1?VpXAWwo`xfe*jQR0|XQR000O897^_9c&0UHY!Cnd+c^LL9{>OVaA|NaUv_0~WN&gWWNCABY-wUIZD -DR{W@U49E^v9x8)<XfHuk%I1rl$Dq$@FvGqby+#>r$IXX|NvjO`vfw#!f?B(bIll^`u^rayk)djLrAk -fX$HrpioA5x~Q{FF-qNv^!#vh?8tKW@RxQ{Tts5b_P4_KrGjJGMg97J@DAxw=eca@ZU>zwl3x(V;5pt -tiqhL_oB?=ut-Ga!>S9;*@vTp!;_0czql`0n8obi^yKpV=s!PRo}OReOPDu!`t<4GAPuEtIbY^n@~i+ -HSTW};O=Q8ulueVAOO|9TWHG$TlS!#|865szCU;>9Ygi#@5Jpnz;|g3oWH1%h-@|$-7Mv|}F-iGC`m} -GdSc)9Rvqe}$bMrM7vl*aZz6xoca&DgFS`G%&Tr8N+^s9HUU7Ab|?<2lM?DTLX7R#_OlcqA}z+|om5m -_@7iR_N&MF6wsgTWvO!ZZy6w$HAd<1kC6To%sFV1UT+9A0ZI{TVMl&^tE>vT(tJz#9PjLw3!kB2C4L$ -854z)XQZU0Vlp;ho>I~!NKW=4{y&d4ui9|mzRg<Cjd0(gfMW=b*|yF+P%)4A-+ELaKZ8M;mPIUyWqpo -$zf~yj=%fHeY1a^d4F7I@bC{$FJyn<p9{na@OoEr6cvg$PNq|yqwGNJWm=#H6lI<%gtbuoA`df}h6Nw -86=xaeF+f3K3no+4%5-f(0{H@k5;bTla-*Vq{=Z27Uiy2?_kGwskp#*Bn{YPCMTt5NYG$o`>Hm|74Ae -W8sI0-+|1Q5jJqdm~Jij<PMUH_c_#ih45)YDWDz3(RAf<>D+Q`inlizq$c;f+s4=CQ-mTFJRBrT9=*p -c5aQ;{1Jpz*aV_<{(4uLTf_3?f+Ja+$7i?p>HCqLd7@2PR|^iCWD;@m2@}Rst}Pf<a(F4>6yz0I*JqA -aEs5r(iCj<ohQg;~H5r-#j0|<Rk>_Ip71ll0}$B0JoYjUWR$NAUI=o2^8QH2q*^zh<uHBDGE6QZ^3iF -cN;{;r<MC)e?HoTA5J9xb<Ouo<O_O1^FU-U0LBolV%PJ$CMa+$-~>=y72t1hzU0g1L@+ufl6{6;Xbze -Y$qUz0B=4yI*;zSBlZd@NJJPQ!1|#<YD)G0;)b}VC7}82W>>!~Nekg9(h<*HMaQgVsSPrm4q-9Z~hkQ -Wem$gn!(Hr-3mz)nsu5wEk!O_L};eUtp@b2hbJ$yL%VX%=q*5lPpH7ggQu(@0>FT&^+=i-cd{!%P)Iu -82qT)!{nycz%{=UH5%vYNxjYOLm`wL1WEy~coI4XF|u9%!SBbG<=h7MeZIL>E9Sn$T%VnWi+QR?FW+k -`c5aEo#A3+VS>IBr)hcx+cZ=2>2)2XvBUi(Gg^vtrF0LSPVhHVRp;bqI}YUL`!LFd~yvoUT5M0VvOQn -0aF9~+L@C~joe)v_qx>L$H-Yr!8H-A-n_dzgx;x9B?X(bITMA^tA}<(*;}Mlh7`uJc2Wtr!wvrFZ44$ -w7GP{;p`CEoM<E#Hqm23B8ra5%mk=N#@Nf_qat_faxvK!8UiaG-P>nPqToh1V$W;RV$?`xgl5u8Rl`7 -lOboRI)A6e0HgEYIzuK<W&TTGJ=a;+JYwql=b@=sa}giP-9Ify1mOaT*A@EiP6P6&usoT*5a;KaDmj# -ZeUh0Fc-VJbJpv2)5a^ujv9tmBl(!5cT0R$mNr(T(6nLl(E>if;+exM>_JdGljFDQB*uVIVBP;hA(0P -*XpqEM`wEf7-PekOkyDLl#(iB$sJYwD-mjBqfky>NQGNGv+$5vGd&Nncg5$t+M=^%Gz{1thLj_u^mvH -TL@H;)-KmiYzr~s>2j=!to8tE#1zp~yLB1RMAEPTzM(?8)0TVEIRCLvJ6fcWI$Sj@aTgzhqFkonzz~o -6J0R3`&PoZJLcqs*aZQJJQ)_RO@-Xko4-W7>B?u8D@}QSSQ~ge=)XYp8L(M>4ZK@OHKxsS}r?#Hz`v$ -`~Q|qV{(=#z3M{~v#%rQ|Oy4KQp2qqh?B&LG)@uPk@!~`zq3vtK$R_j?^CsZM!98rxExEf8O_U3Xf$} -~oIM1>@X1nP_40K`<ymO!D%(1F)=C17&=_T=dO;l-t&WIzhxHSUId`pk=BIez{;77?ffl@q?mXU{8W& -!s5yh~syEUM$ib*caSwEPELbIcAuHPgR9+1_YCaftzIIa;VHrmbsds%Jr;VOh6*w(pTWlqy-B2K?T8( -0<+eBTF6s=2NtSU_>4JWgw?ErOTu&&u5B=&NPtN^1|%G*>y=!p#kj4(72y0#I-=hR+}wgw%ySOT0+81 -b;V)(z5(^?qcnOK`a33%SkfBmG3xp|rhRh|O3S^mA9w`^T)^EHz_$a_bYdOG$nPdq1rAcU^GzS4#7E{ -~Gz{2G82gn4)3M;Q${99ldRuh4Yyn_lVCLCeXJiH^JSs;4FXLx}OC67XYHBiVTB~*Mi5DdO#0>DmE;{ -{ZDi!fz8&qY3p<~+K^27>LJHMISG<|J8^mN9q69d~Tl0(NBB)^*D|7gCJVumU~Z)qhd@qPfWTFY|I!H -mE};RNxsP>pGdR>l;Qr0xW=^<xV9<OB|GnT2w&}{urv%rbZt$u!qU&mIInK1gpEn&IYO>fxN>KKV6SB -J5Ao=^uuU<oG)Y8EESV59equ0Xy<MAXM1(%VM`xZAVFTCCsf&A-CX<}=6qG9Qr!95XqC-zMTpJOErEP -C<H7HixdhMqbre$-Z~H1Vd@apX{h+!cu?^OQsjXP_b=0%Tqrb6!_VINqSljb{mWR`##qS3-4SS6h3#~ -+@%cve68B&t|sQ4*mv$oqz(K0WywgxpQYU{<LDC(1Xm	?k<$!zHla10*r%ohG7o2qa110t{(ooXmW -+n&8Y1H`4tX1P#K130%)#sOA`106LJNXU9}B)%;&DcRd0ewL4Y94>K1XspR6=T|6G$Z=AdWrLU)pWyJ -h_9t`uftHY<9c)?<d?DL0Sc1okDI=mECCo)*@AZjM-bJifb`_I4?I!)?X;8WO?60PnF`e&_Quip1Cy9 -L-l^4a&i2A_3cgF7%{<RSSOC3G^fs|okD#%gh$}e4VaGt@)&NAZyXwz(sBqpXn$I-XRs5fK+3VWEOqG -%svBYlr;<%$xvE-|4BK4px5Ijt<=Tu_tK?mcREKB#THBNs8Fe#fLOli3=W0twCpt22cZwS-`-<&#{ph -ytgZ77L$nTe6ACkS&<h^)ZJ?_26W73XS>EY9reQZtWscsi_0Dvos$1lb=H~q1N7}ukmeaiL;mc0BESp -rgj{RNDvw5G!q;K7aeI415r%*2Q7s>!S;`+ueag$&Qz!Ee8^jOF!4CN(W;1E-n+dYdo_`7*X!vIn9ft -yaCRt>TLnEZYg23YL8Zf0gu52DI5fCNjwRjNkViQ(SOt_cAPsvYBKq-is+0;UryC@=Hf8p6ZP{b^q6) -j!*@Mk{?h9g(GN2$bQU{`;jcx)YwepC<Og-(eZeO6syB}W)u|rau^bSFOxz!VTosDnD;;`!xua&)Rhe -!a`e58+Al9eT&9o-IJ*voS?7&okjq3ilAuIMn6hXNsY3)if-F@1_*4&B2W*mI?u5PDk?Ih_-eV@yP|m -SEhV*@h-EtHyy;Tj)Nf_OlNfoenrx(wEPO@06<aacS)*+bVFk+_{7AuaX*eE~|Qy;VdF*DbSMjok;YR -?(fRusbQg~;u5a1<$F{dCt~uAi!NUp4vZR0w*9mzI#@_~Q8_%<-j<XjE`)bf&04LpBkGX|PIefo;*Dw -38OfatWCck2Urpv-OM72_`1b)I2onDp+n(pz48EnWUPS2r{wORJups!)#qpI-cOMV6o!7mIh$37}{7j -X-sCBz<V!ArY`S9bcEO-%otQ9qG1hz^v+O@`mEuRdelrc_)@c5g2};->UNMh+|U9<w^f7*7A)|Nw#6Q -EXt^1BMfZNNISW~hxyYn@z%dm_s^^Y#;T7El&=;y|tPpp|ejweKqeNOnD=z^9#!nFU09kdQ2#8xp#`Q -9N^ohO-!-A@&ktYw_7};UJ{PGLKlMF?^x^xsy1Ssmt^tWwGCWvpU^`?hFzOJ2bf!M0{LUr3~Q~%4j*J -0&A8_oBar{NliPen+2h^2%%0K@ZbJ9ldyj{*PDWA_|5n;SgVM)p;a2AEFNt!eZn5A$g5(zS+e^lcsQ_ -uuO<d_>{3LmG`)A*)@H|Ft3OoX+mH3t3jQQpVo3Kucdw$?~YM<QN`ESM4Z-!f@IF8gCzhe%i(9rMXht -h?(S}<7ApB?*j29;{HY>X==2ECG`iO%%&KnE`#A+2)uyFxIgn5i36_*qE22M9E10rs55IChLD$8h7sL -{c)OFSBf>^!y1(lEYb~taMW4naAMG>$E%bi+u+po;UzqhMrSDSrc(s36@h{De7#!w2O-E^RYvoraA3$ -xWoICpbG7ak{6Xeo4-dhz}*Hfde+Y9-<-;Q_`?(A5aHG`Szg@7$qa0ne0d0Y?|9pIYiR*L|{O+l%;m` -gE;xhgnHv&@cm-p0F82HlRXB+^_Yt#uJF>CqQ0b?e@7r=v&Q>=X^w;zn|>F=*fGea+mLL$=pxPQ(f3X -_Oh6Y{yDmo1p_I4OuXxNyhpx*$xT;jBuU6@%$y`SgL*r>?TERK}{5T4B7(O%Z#nb!%uZXsJ33~A{#z> -_Srg4z;k*UhKE*Tbu;RYQ`4&N`64J8g-h;kx)0|#UZaVpZ}s9`Zb+89(c8!i1t2Ph)&lz!n_lg2<P%> -ki?vn8cBR{MpGx7oNp|Xj;MI79g?a<Nce90dZv%XzxXs#4(yqq)h24ik^?Zf&C}3l1LR2Fj8_^4d)g) -2!rM~BCUC`E2Qg7*0;`-X@iz&D^$H7MkxT&qbI_w*!uZ;tIrI|G$pWg<>kK^wm*m@^#8!y&Ctp3vFat -(GPn>+Aw=b2Rh{9XJXTPUvfWXc9>nvoG-LU_F)xyH^}47Gr@X+z}%VG-L*I&iaT8qV5cRYSdpyPqNP4 -l^23uSdGRpjS>CdE3L&UMb#myH?$}hvK!;AIsz$dCyiU3odS^D>_SgFgxihiL0s>5|wxK+Z=V1ug>#3 -zwUvAT^09G6JVz(7F@Y?-5Tk(iR#?KRTmJkE~wf=G=G{z8`6=6WV*<74@7sUZ$*8CU5#mrV-p_Xy+y~ -@)BJkg`QcDqlC;1b9e;m{p=*^3;20>n4Ii)CIt4XogjCs@;)Cj9C92gmw7^lDYYmbrct%wQ?7P;dk_b -vKFE{W~or*W$t+5Bj*oDA(*^JXoRP5NPC>?`{3RzQF;|NPFK-DJn`-f$>RiH3nZdB%Y!8l!y^^YRR&s -*~A4GNzK2s>=W9sI44v|BZVYL+ZZZ3OgosBX}ypO`ga;E$GwXnlR%bQ6nJ5;grn9enKYV>m`5FRp%lC -U4LS*mN{q1q9-9;^vO)zIpZJ`r305p112=`%u<uXtv+*+MdF4SN{i4O9KQH00008031s8R+l0`L<R={ -0KyXh03HAU0B~t=FJE?LZe(wAFJx(RbZlv2FKuCRYh`kCE^v9BSbJ~WHWL3|pMr4^NJ?bE>0NQfq8p% -1H?4tSW5kYeKx}MjiMz{0B2|*Iy?4ES_M72DtCw4#3ujj%e>0pnXY!n!zC0y`EV<Y%NNcvI-{DI1JbF -&v%I2W>Zf{8PHYMMjz5eDDzWzn7xu6GfNx$$W2iSXFFrisVj3j2y$i>0zr68AbYaXa#<eh9qNezcJcw -mZ9I8PYG?^+|_ZKoKknJ~!fk}>lB{OxLexysF>Ayky)?T7W%$MYXQU48g?iHm@XPEJmu3#v45+X4?fm -Wg|=q(Dxjrs^wGn$)~d^0cC2*U}v$CEIcVf^tDFRu|;kv+r`t2@YOM!xrS+ZT#b(-)5HQi2i}<pj{#B -26VcsSVpwdn`#4$YFV}wgZ;KD$sHrDw@ic55^i$xi+o`BOl3g^5XUH>DgY=OrYKlN6WtbjU<W7uv9xA -bE|=tC&x<_)ql(yAEvzsZ5v*WZa|05I9oV<z+bvUQ3EDJD(qf-S5w9Dm43RoKDHfjep<8S!YQUs*6m6 -BPN$wOS0SImryNx+COnX3Uconv}*xZ93GN<jvxxwQ=WsNc5p=&sUR{TG#y!IQQ>iRm0HXB-1n+;i#&o -NkrsYWpq-@?ZA>f`14hxO*-hpVgA$2A}nv-0tZB`QvmoAOn1lf!rV^5)@X`uj~hUb=~Yzd4yKo}_UaM -Gzfi!}X@(a44-3nJyv%AHF3*f^M1%ZKx<%BC~-ZQUW1}5a|f;12VTtkax7wEb1-D&u6#jx%ehNiT#;7 -W;WhBI??`A#dKR4w8E`@$1tyva%_eiV!A|;JJKV04(?~7OxD*)o$r)v8=a&eL7Mhu(##|d4^}8Dsx?{ -N)2hWlOyu1cRv6D2lLddT_FNN(gohB~%n>o4euO<X7?q$^-cj2J7v;DC`u(?)IbJT~1*vF#S5oqrk;8 -&KLfDf-)`$Ex=8q>J=%z>VW`KP*gMBt+_dOuSkne|x<qYI_;t>3120N7L&7ZRyf}u1_HNbk&2T3)>0I -xoTizx)6tq-wTFavYz0s24ZV~p$&5Q%2hHp6&;s)x0oJ(^yuhN!~ND#Q@&MUir0<l_~B?e1VJ?qb`DV -)3ghHj4e$a%FFlUpsaPus09LhZMSD1>bUD;l;>jrGS+0rMr`Rknu<1JsdIp)E)xx(<QWpzFwTZz8zo~ -REjB;XB}+prJmyK36#SXb9oSkKCYC4<c(YLRmcZH?y2GwE~^E3p=0vG@=Tu=(I4{}VMi&a5<&rB%1mu -lawr)Cq-=ubv25bovH4)zYlxwe9}C2c9j%sdU!T`aW!=q6uWjIR+z9&0CLI}juRDR@c_a~2y=^tw=EI -Ak$0fC?H{G;6(x;RexQq)(0baTeLvbwyD&hW6l>}waK%>lx38j3%)hTAJ*rlJN2#Gg<t2wxO5)PUti8 -J1k#Eoq~!rc{PNpY5&?pec3)CY%w%M&QEnXRH3mdDIiz|7Tp`-9)l>^GG5bjFNMX}IO!VJ57@t{U&M3 -iInJb<mYTLa2LLR{{T~1jCDdB21TkqZIfoo7=>Ca6sZOZ$|~)(NE_;pI=>$n<8j(Y^M_%9Qa28zwzEp -yehbbT^}`@Z42#}monjED|_089uAE4Lg)6+h9tuBntqXx`|g>G-ZM1ON4dXpY-Zh-VilvHF7(4yzxY} -VT*EQ+HnbWQ(;&pFrNv>@eTCK8NdX0k(`sTSPZWiYZcjBeKm(mG__eDT*5ZBt4tF+31I$?qnB_x)(Dk -NIF%-0B=<+Eg?nEv~`(^h@f#S3HFAj-gr+(Ai!&_+d^I_O0PShIX)rAx|))e~$sN9yN_U&YH7CK2EyS -;91MhNH~W>&K&X+kPa$oxjX#nIsesq+!npehU`#U3U=0Cn2?r6irhd((`<V==Ma5HQcn$9kXIFU{j2B -n+$jaJMp#K3b}ScMhGy`$-M(E_3W#k`Ay=w|;~p`{sU%>23FSLEud|5l@0353iwD?4@X^WIwIm{qX7i -)duJO)xWPGs3t`VN?A2tjUpC?79cqeFuw40qh#XxN^D12(b{P89F}V-*l5x@4`j!N6t4v@G7W)WGMuw -;_=a5U{ZB;hGHwAkIjuc|1&mMKj09s-Cz<O-7uaETQ1DKl!$fAs%)huv3@1gK@s*Tc+osQThP;Lm5#$ -~yZPejda9l?RdSZI_=X!5QR{+>!!5TwW_Qy~2y{a|S=X?^_kPZwGjG`?L+n&(B9i8S!S193DB<Bom@D -{)e<9Yn2hqeNT(!$`t3fmQWtfYqGB_B*ab1I(T4-TeY+9o#{1#2hV)Y6?;Ve)93(so;8<X|@MV!GF!4 -aTVG|4>T<1QY-O00;maO7>Pj*<B)aB>(_<n*abG0001RX>c!Jc4cm4Z*nhWX>)XJX<{#JWprU=VRT_G -aCz-LYj@kmvETVCP^mru9g>z9C%sjx+bTAl=){(NB;{2_g&|@kp#lL0041x5|NEVpePb6OrR1LW_FSD -dmVn*a+1c57?aX337(X2c^D@nftG!^=T#o+>pA5DK+rf)+d0%B$*G&+;7zWdw-Dz-o&4PFL&2?D>C*@ -^xmsBixRj!IOX|l4IK&KPNg4c&HW=AKpN%Nrzk|GUWygfQSKK$aF)3?Vb_z>C+wzjqo7t5S2SkX}Dpu -7wk0RM(H34lw2%d(PVEtC08a>eT4-RxaG84ONV%Vk+Lb&%wFurN9-5_lNxPIgAY?qnDLGsXXW`fNJcB -~+%9>2QLB4=$^65ybK3s##Smj)QE0AcIwr0X0~hXAP^8ydDh13w%1Sc{jF5vRw99u(}51Vtf-{W;v5R -{!y2O{5>zPu7Jey&x#EO9MnXDd70Hso?Xm7%-Is@F#_anSyjWYaV*--%f&KjWRH`k0+5GqM?p=$#m)V -a)uW(c9~$~y^jaj<4FHnevI1tdtXLynuNplU=vgK6Cce0jZ`l1PxMEFA&&0$h0wdWT-`DeNSj7>p&GY -9w@wc<%lf$=1@$qahz*(~@*q76vK>OG9EQ;eISpeOKK!|ys)U{gpH(6an+gVkWRn(@+aBmR64=msT5b ->u~R<TrbKvo9}-WylA4fsV_T;|!lSqr&o*kaiPO$kFJX#jk9R{=X1oR+aXt$|%(F>nja1>{wdPkbYPQ -&enTUKQCtS^6!f;5sC}DQ=4LuFzvj$``A}1*^Qn92U1po~7$4r-3H<iXquD-j$$k2g}t3OeZ*acgS}o -(zQ%iz}j&PTMl;1esC7bVZ%`nzWe&i`0(h}+jw^L;_b`Bqc5$8?~Z4$X2-{~my$cea~x(?aKRI-YFI_ -w?<fGE*BE;RxR>gI0~y8+Nl=A^YQ-*Dg<K#AGzq>cm+W$t=l8)~2J+zo*5^7Yu2>4qVNF3M1Z6R2$gs -hu&p*TI*Ib|g6b4}K@2(l_&~Ee*1&}X*K>YgfXhsbVzmIq0DZHr|?NdNL3V$pD{`2FHzl1}(HT=`pBf -$34=ezN%!`bVXC(tZX6dwyFLLwi*Ho||6NAL2aL17q<27&z(o~#xi4(_qlOIFXTjCjM-@N0H|S5|3_E -x#%kY`g>+hkqQbKqOcCw=oGr4}{m*oE0^LX$;~|cc1^(^AHO*){XupvxAl|a1&-A6R6)y*tL0?q~mXn -U*q3zFX}R94XZss-c{vomNG))m`k%-(d*5@@z=m^L@)zLN3Rwh?V(zD(HPG^`wv@_HwoxA_&;9={g>= -uteVqz!$lmUSoN>uKiIsH?d1}Q=6apF`m6Wc;<38SK7hh5l3cBt$r<ZL@_=@Eqdh&};3J#9E)XBRO|l -^N&!?aNKhOQ2;yD7G-6jpwi{wC(sHWpDi0CJ*SuMv7CnC_I1BAkUhUTVX7Ms;ucsRXAZB$$?U5naqAi -NkbB*8Y?-rf0p51bt^nKH2S4T($sgcim@IiIi4QY?!rFg>yYt&MAKG){uUVxF&3hEEspp56j7ISYid0 -j5e`-l2^GMi%}84FO7omJt|(L-em+W(~Z@CyGCUaZnrhKHr%P;?F)eHk!HZJ^?}+dtwYmG0eOfpMt;O -p_iXy+FD4fCtNoi+g!Kq;js1R&p)+W--Bb2&5fNieg&3MDBJ2;8FTz3FyTPUgV(Qh%bGRO(0n#oEn!J -mWY|~!_u6jhc&~J*|Gg%>|Gl1q|Gl0tOn>(M>G1*hRkp=gg<(i8+K=_q{eAdPv=yEGee3*_;npu9{1( -D*;Sd_3r<JnHKzfx^@?vt>0FihiT!idWIUD<A=<bAjiZQ@%TvbJ2P>x=)-08LJ>80t})obeOrKs%of_ -)T0w@;B@z{wAXy8CvJ+?H7yBq=!=G~EEb&Kjqf<mlYp<0b=Jzk5jFE!w2fCGEOP9MNPw0Cfqwv!UlEK -X@lNwTYQzH4DB)CyYC7N+Sl)5FL}dthr9B1ROz>HaLuORl=b$Q;D}`xUTVi1lDXe&}gl7UM1H^zPey_ -Bbh7WF0ytyUxIj;Hzf10okA*QOIFbOlw2YT-x^&)a&oahfxk}bn1?c=8+Koh0uk3RRvZ_IKgHD$@AoX -B2K3M^5YC<>^8{5+tChnSuadlG1A2;m(G5Ny$dM^xB0TCs%wqzQeNjgSj<_JQO>}k+Z2Qg8*GF%^I|2 -?qDhoEW5t@U*%nAb&9Cwl|k!nbXA;)G}f+ca0Gf96!jkfNH@5K?{T=b9HEF;bk=g2|Ga1~pWx8NraI8 -$9_6|58p_OK3`>K+vnDH_;3VmASYB2O-ps=-JBpfAIC0uPfoF2w;7K9{@4@ODYJBKr8knVd}`=k<ioB -O(Apt1XX6O;UETx{5%b(R>4F7o@NxFu^CN(1@-bNE)uJKyvrjBDuRElDnHDsl}H-a{6nLoNkEZbYmn9 -Au5pk^w%Q!>4r#t`e-Dln=QA1^1FT81KGoEby&b=+Z};aQ!lu|2dE{NU<n4-pqT)yBbmCVK6RL=d-~G -{Fp^<$iRu4JMw)KONYg$>+HRw17`Ot>jU>l*FQRSPvE7NPM|uqW@JXJ7gIEVYt&$vlKNYyFrSX-sB69 -E=qWa!-RJYUaZ0DQ?zQj|R;CI>z=!UwZq1qFCyW&!vSQOoiRXZpRmh~Q=w9xl0)5afq51rsPzzG%2xW -W;d235+c$bJI)O1)k4$#HVk@ou~;<FVc)CysEf2Q$Vt)Uc+(evi29gr%c03f7e4)hRH#U>WYyP*8-R? -F9QhjNJvzaH0*&ron#CUhaZrxL8BUtXa`Sd=Z9VDXYJx#$QwG-4x&bx5dhRtnx#-;>QD7!B4*sQ`Cje -V3F`x?-@!8&V8DN?pSc0+>)yu%&$xEBk>q;XM|@tbS8*05PpZgqDKJijb;GM8mya(s=Q%EAmT{E*tvl -1a9370+$yKD$EGav+Jdl){D~esx*paW#PS399ug>m!_mO`Z(vGE%J-SkhYl^%6c1l2FpOD(N0qhJU`o -TmEOYP|>qf2$$wj_3q~9R8+xT;8zlDV{eWyD-)>`Fh5jKE0G)s#6pkA^$2(7u;i>B7-IW1W)h=nxkhN -0MvCgq4hei~!8nflsH%{EgXoT-Gfty)=B(d_`%!0tJv1F6$%5>Tkm`N~wQ99BKKC}F+9O)qMUQli5{9 -t1D|w*xMS#{s}~(=6+~XV32L?j}o$%uUMb>RHNepDo$4#{Z0WKuA2>&eGjK4B~^+)8i>AKiJei6He&l -PSBvJq9G`>WuDAgv^Cxu1zYjfaF5=TRZhR40@bmH!N&prZHj;qBys;<kTgw2o$!~DbO5lgLO^;u9|r? -m!k33H4o+ugz}Jbpxshi(j5!=g4mk0`k)cc7&TOV4g>>|Ga%#LX!^L(Sw(r1ZZ2+t%R=a7KUWZ=SMSM -Gg-@XXvx_GM{opnNQM7`5*-o2igBs8(X@Z9Y6?9J@x^h7daWW?9;{WnL4FW$a1LFh2M9Y^m7;3JSXhb -Jfe6u7*=;Uj$b>hSgK<lt2+G!~xy{b2mJWc<&a@gFDWpXdk}rY%tV0f;{pvA_o-X^f4K(<z$+AMcaju -Y(!Ke9z<VPBTot09j6F^SGTzImp9kE+Y;vEpQ~Ws}+nUghvv{S7VrMvgD`X3l;y!?Ea=edIcNuqJ$9% -Fp6_&X`;NYR-nyG)Ca{l$(Pqjv0AVS<TvyRC!qmnew|?E2j+=jMuQL<sZezR=2U=^3di9j2oBOT!}%t -7#ty?6VCp6Gs%3OrqQdi2f(r&K!>oY`>-|72;G|w%L@>&T-e_}D#jt!$C9$QX3j<`FNjMx@68cF!22( -Y764*<vGf-Z$t7LvJ4UvfRmtJ*De#)tdHe5@Lg;XqONzKG!tK=kQPPOup&|koXl6gr{vTDk4N&zyK4k -rQHJoAKG0^lk%Nzr7W-nlhHn9{1~XbYH6Np-ctT&g;V=(IoulE%SPu$r!)j;K5SO6G}~%#t(N5`TwjK -Mk%ju%7t4ah}~UvDx^*sw*h3IS=Sd0E=X~gr$CpES|vT0P$dSm#uipkZ7csgdWnmONt9keERm~+aN9H -G(mo-!iS*@6(pqyp<$pfS>+9?)`5;3##xayaU9hwzZ?+>_A$~n3dD59Ujiuq%RLF<`0a;cjL?qhogr8 -SQ2{##VYC9nmm+(?pMz=3?jh3`4?~2xYeAu@$*JP5WFO}Fs)nU8JX4(1Bo<Lq(AFRAHzG-@CgEWOEOl -2Nfn~)!qxXoZ-9jwPzMz0PYhou61jLT^>;wWy8euz)GWnx&j_Z39>XB&Qf+DHY4@DfOh{i*=0r;P><Z -7i5hMI-E@3E)B1m;4VxkuaQD7&l>x!J)OE2d;K{#>xE;wmAyFn(-?z4_}2b&NpHp-=u}VTwBHVGe>i5 -Un+}ElA!v1~K6XO(QOjjsCT#zl)j)rWRmiD-&AE@;+>c7_m?moNgd^fRJ2|N4BzPs(YIW0J^<A8lK(_ -j56f{Fj;6X`ZlV3=Tbw4b=HtGk_NZ6Ys<=!HeGXU_cf8QT6?iT&(O8_y{?!N!}uczPi}=$vZ#5(I2=k -xqdiyCFSt@m-=>_9rZKU^daMmA-gI9q%hNj_L+nX=K%To8*zn+AoP!-2V`gFYL7>#;>+F&*Lt7}w^GJ -2>GW25OO9bTh%#Ub(i~XTE6O7OGV7wsg4Ue8%7l&HBp;pd2EcQRMHxJ(*2MxD{nX^l_g(`oiGE2qd!8 -XUx(m~6rTmmQGM`Wp+FGm3i9_x`YNo<XopT-U#wU=DlCOrN;!i>kC!%GG7!DhU<a$XmN2+K2|&PSZg% -7;DIb1`O|)s~`Yttkv_9A@ezCbJ9keYGhE7L$qQrlQu67VS8KiQ@vcc-DvMW5?6-K#xZjhhBZMJzDFY -q*iVY-z{}OIqrNF$+WRn?s5qT@+yD{uxAlT;IPxtX=Ngtd0%8F_voXxX|vRAFEeth?Dm(-$viJ>W|}0 -ryJ;glVxrtMx2C$NuVAiDVS}*2{I+L@$pfIyLOJ~SR=&|2YCHJuniVu1ARd(*@X)Hx1;9|GaEFK*n1- -RFPaS%UOiar7;AcdDh<nuUoUU6vZ3c6DZwt(LteJS6XLA+IJ-ZW>CyJmx#6)_YCE=diIT)Cs7xM8ruu -iMj8T5?ju+ZO=dI`o>6pp|_CSt051m67I0j110!b&KY+Q!>eQk+C0a)3nf(?l={fp&-1=@NRbngn#fD -)qRZ1YX>SCjVg_z-OO-E`!@l6n0RmN}1kc0fAMZV4T~I06zm#a+_p%a*^wq5&*sC%j6zYJR^GxooyLG -t}Wa()D5Oi{~~35?Tmr#b30MMf_@RDY&2Gl6hE&c=fw=%Y~luS2g4Sv0O}@N#^Pwur)IyS;u%W}$pV^ -Ef!SEp-aSIpN{@<Ut&Q*_B(DL@a?e1DK7<&$&V}mM0wN5BX1c`k+BG7KE$Qgy`f;nmmDMdnRY?xz0eW -N=TEWJAEzyK_u+D74M5i<LcY84WSucuvjC@5M%Xv1}MeKeMdXs;YSrG{l=E~lFJY>Q_pIT6j_uJVYUI -F!3SHinm{1@${kuP8u75V!6h4(|D|KfqJHIP&;{kqoBbS^>~n7xi2YRulrZi`3qP}{W<(IqYmO3Wt}0 -mY|JZ|;)ns<tJ-i7AgwdklpF#$93MF&!Mwx!)7G_q4G%EW;J~f`Q$Um6Q=dLDu&eZxz9=_j~B7$o~9P -`~7=7a(w?DhrcdU9pi*X_Y`2v%M!g7@PR8D^Zk1g7trk-x}o1t*V$FU@C|_$uO<rA3^-{d--<rQgi65 -aeWWubhuB2CH0Sm;o{f?kPD?z21_3$0wxia_HKdV~h8tio4ywI-vCN5))|-Mu2@{)`>!4qvdyE!>ftE -L$%XW>mwCms_1nF^TFg?gML&Tvyk*%GiL=TaYWc<LK`7}k$iP_PkB`lF0BZb9B$3G%4uwRi0+QNiVG; -xB|Xo5{5kG$bz5?p?EbKV!DAdoOo1+^R8txX8d>D|!8PH<9dyTFPFZf~Fx7y@e(s**g9f~=-CyG<VAA -)6D5B7dYx#jsFQs59Ila+WnIo}s~yg66`C9|aNW^AXQZ9}ZoXb$gg~;vTw5bNuXff-RSkkgG~!8lHn~ -sr&VZf_H8+WaJCywdedVm^J?Lz<HUgER681o)sw0(pO~_$-?*V4vvowkG^aTzvL(AW?)-}e{AKYj$m} -bePo=?I98b=u#<(MU8i2>(O!4IX@G~uY<{D?C85kvkx+E0%iN(d20|Q&6;sog1U##vTghX83WsMqK0{ -Id2y%lgD1gFIXFL4a3c=~w!z18O&YQ=-xK&FphFksRPv&BQ{Aiz0bBeq={Qk|1SIk!oo7eJea>O&WfK -+s+#$Q@|W-eMg<7LA&>!2*iCfEU(UJ>(RACH3Tps9y!GH@u3)CUmIPe;B-U0Qlc^4m~EdQJbvl(6gqN -dzl@#u0o<k@UM9Qh0I2<vH+ZTP9YJkD~t46R-mBmUb1VI{PwP$5ymo{#xDIp0)7GOiUf}$kYH>J&Bb| -9N9>YZJ$oLOe(_BqS-?i&0Y$V!oEQ`$>l?Pdvv*@8;)QG+59`nJw@YBTNwrTBOI+B<<VNU^?siiOO`z -WSl7|)c409mGr^Q{x=~0ct*sjd#{m^YJM(P!eCS<zOvvq6l%9CS=IiocbH?Nr!(JP--g`z?yP4Fw*v~ -lHyzxb{UXb$7F73!(hABY{7&a-I3A&&h06wQPC^D}3X`vB1Ey@7R9<+zQmFa6>MJ#!eV*219*mm&!_u -mKgH6}1CD~0KdtVp0uk+wTb!Y&gSM^i~$BQy$x0^oc;vP?di3(EsF?RyJ`dpuuQ+);FKFYlXauP}iyB -$&IT0vXAd*umBig2t3C#M@$E{OsHY#ZPrY*}}O#i7GjQCp>wMf-9nFi}9^=ee1R+7-85&AK&!~uJ!(F -i6LxKoS$MzOudhg9}32J(3x|D$jIBV^hsBElujD#@?;_g-%Sp?80vGK>2Ad#fa@Kzt@au!>n!x&#Ll+ -LUOg|UM%G$zE>T7loB(G!=Y_UW<ai<@|6GR~Sx!;gM&78`I@9=pWB;n5W%8+KRaHRLXUX7?r9H0n(H1 -2c`WV4~f`)(SW$LwtC0ol~xAh%fb0Od&&fGkHQg30-nH48B7`%V8Ap18ZhA^e-!J`GyxF>x>oFyeP;n -avCzA{Sw)m>oRoCLWCf?!qivzS$Z^_KIpVq?l?nkRVV*4!H>d8mfzHn_{+`hE#oY`n-m02FE(WfL|Du -0h1bDB{e<O70DH^pR>rD4H59vE1`P6(9Z}=4NL@GE4L!=R$^nLTO4VrtX%HrP<SAev>RR7Bp}=c3bcG -gYj2N{+5*~-W)z-Kv{k(ovc-rcO1arv?z`(Loj`iyUk1!j6R=O@fg}l&d>yY?raT&p?5=)rm@h{l-e! -!h55)$N%QAnI5%?OkIY{PMF1VE*Ob<L3L@fZK*c0f<tB%%yX95uo-%K-j7PwjXFz_P&k2$n1hkWw&sy -a)=fNlY7MWyS;2WJcE}l?sITgAgx#=w8DM+pg?N>uEQ9!(v@GI7gcF#jLl$Di-1B#Tq)<qWL#DTVjFC -KqSG_x|@c>t~h&ogzD(*fS_0C;G<0}ekYQP76#!NtJFOV2cACgz`?)B*kPzbR*#OM;k69pZQ*uL|X3P -AI~#PUlifqrl_M?DXK}!RY~2j~pGm!AhZUd5>v-6TGK29DMiHZ1y_#wo_L)@s_V=Umm>p!QWIq44un4 -opKWT_tf;AtYQ+OB<wqKL0{Ea7D|0pKf10`l~|J3MYnQ@2P0U{;I2xRs3Gkd7lI=lOn{TkuR#<PY0h} -<BCO<?EBV$fyAw4F`bE(~nnrI9PG5XAJ8oZ9^!FdrPof_u@ZaIn-^+4cq@BM*`1iA&@gEPye>;!FFY# -o2{!~63{^j=}io?mFfJEA%7n}*J50X0%&-J$0@Z_5}Zw`)s=ooPF^X_Q6^ZXAV<y_l@k~Q7@?U%Eo+3 -~^YTLcrP`~ue?dQuN@TbS1Yb65vQFR}3t@z=8-PE_$H{)D(mz#xkZlQxvecdf^@sI`N~Aun$VN8-Iu^ -oK_;XWz>~B7&`=o;fcR3<MPWQVa6(g3z;BL;f!2H!0tUGQnUe&cF;)YOabiYd@q^+?z)lUXc0a?A;8I -K6>$kMw{Pbj3seWsREB<J%;-0VwL5o{?j*_7?R!UW+F&Y(-zT>OL-Ap46c7SC~=)r9kb##1EZSMm7K= -O4@aj5-^bq`ygsCrZY^@#)Waq0+KD4rbaT}ugP6NzWO6_U=eS_~T@0>jZIR9{skr$Kx;Puz*GX_^9M^ -dX1dM5wW7#SQV|h6-_q{?}@BYV^go#o`Uqx3eEcwlAy|%@L-^=vkPxv2lHSn%*7Fpqwwe?s|f}Tc-9O -I;6u>d0LwMK#Ol+&4vXl*qTH9hODGV8)fk+4-6D%qli;C?Tja(Yo;(u8ke1Zj~ETts;#DCS7YRP+l>A -gF^bGnx+|>he5CZi3M~XCtDgC^qx-$5R#&1NNUH;N3@AlK~-WSz26_Sh|Xr%YZw6f!AQ9%sn`^7W!xJ -#C+0_y0s;u-*ybISi!2KDJ$7eDPy<8#}?UqE}^=GL&fhAIpcQzj!=u3B-xuO!z9?q$#RuH-p%CD3$4} -(YRH;U@Mi#aY(WjEdl!mLrmr#VI)*ta8@9K0GX`nNNP2WY$qF!c!J?&{IX!3)Wq8JuxF1sJfWxg_aYn -#H&R)Pq+{Olgw!1Mt*0vj&e2VJ8+H~5GbWNyU&F2)EM%fM?IaNReVkyv$VhDePukMnf3kuJ|D5-WTxq ->z9S>`UeCY7K3vIOUs%>taQary<KLd6h@)Ch>U01H=Ku82un+}=brF84M3n(N!wZ;UIPrO_c>Y%GJP$ -S#@&T%%K*SHHx7p?-;fiLST-z;+Xe7)F<AKa$PdzR9B%Ne*qRlDhaWA#QgxtxV{qCSx?Q?AMMqmRZ`- -hTF!3n{zQp8!i4Nh%QJJY^6&eI)@^ASH4A(8*g#_VH<S5*3JMSYu((^Mzk(h)tvFbA6_hM->*&PSBp$ --W7>B?xzX>VG$?aprW$Wg@g)^UDzg(aLA9*ptgr4hnRIjtjV)rR1kSJPdmDTmT9%s#;PCgh1kZ2Kc)g -)7x$yTC_-X5YQ?_{ZVSdwX8sHD`Cr`ehBMP!6Z;ZrOs)M0N(L;{^6;u;HIyT8~HYs6}r!9{_%D$yA(% -e1L`(UJZ)X3UCYsId$8#)j0tjUvAab>4EKY*0myhbX?>C{6cRLtH5&p-QPhls~o3fLaTWj$-K<Q@E$k -vk0(T>R3ax}&lIZPM->La{&?9@mnmm+lJHlp`R{YmAlcpsM^KBU=q>%Cp{aQ)kE&_IH+d&3m)?cg(7f -JM=vIN=E!BOP*hgGVYiS(Dre}Lx=k9sgqsG9{6P;!O`8LDCnL9FGG58vER-<5MBF)zIAsh!R;2+-O{o -J#l4cCQ_?ueN4%|}AC=!>UIU@&tQ_pt1=(6{(V$Matd(sIlwnmdk}(s0OSZqKSHVRhIs#J9%;1nKq`` -W!R`6B>KK_JKFrp3y63oBo5a(9zjrF~+Et#8&<u-*#O;zXfTWguT^|OUO41tuFG0@RIUyesO1nv(qM* -Bt?>w*ezIZn$@<^1B?k^kQ2RQ$hfN)e-g!>vBD$T*+$M!L@On{!7H;ZIu_{kEpeIzvWF6nVbx!?2_Ld -}D*9rA&YuMOfFeGDgAAA3F`b4eW^Y%rP1K6SBy@nXSMTu8DZdRPZCu(dwjZH+6f*)J*ZfF*i|sYFGBi -j2>NOP*sHwyxZ)-*|+#39R`tt%PXn6EQOx>8V@W=*?V*eubZpAR@7M1;eng4Yui%8ze=^D6oB_O95-2 -@`{o>;8DJg#k0?WN*fpd)x@!;ha0}_Ib;Ij<5BK>jC2Irei)GJ@3QIIrKq0I1;I28_>8x@W@j-ov$eg -~q*G&7X#0pVuM9rx~!|sc+yrk@<phqyYDQR$+rkcMzr6ZB5sYm>yx3xI&W5sRT$~4pLzQAlhUOtV%Rt -(kJ*HiHVZo1JP^Et%Fb7gnDjw5NZ`tqKFy<n>GOTR%u8Rx(JQq2#I4m|HIlPXzog!h623Uwj)T7H*oj -FDk5SS(~Zqyg-KYfJ`_Z5#abjyN4htPD&X40tmW1vLRodH}-V6{HtTCYZCjG0Uzcl;RdZbWGm(h!4Yc -6rYy%t;S~il&H4JeryRxL6UvrE69;}1}L718@eX^ku8*Q4k_PuxMDul!eg$X+@C4`aD_n#{i-V%vnqg -5<W;<W1tUH=w{L&VsGAl&2zDzMI@#gm8f&H+16$?y=F;ky-2s_?g!_@U0i-HIgx?e74w|(YTk{n?*H4 -q0rFffhg89R0mybkUfidGwSc1Vdmd3hwhb+{`tNLRWng;4y-x2Re^37|$_Rd}?3NnM!2uxUYoN(^)z3 -_Y@e(-^wK+10MA3Ut^nfHijxc8*qL#>ASj2`ruUOzvI{GI%IOGjj8JHW4o&sP;DOn^&}=Og+IL)OT1K -p@v5EAX;qu>9ssAl(5BZ`HV9ba@&75{x?h>)|w#2%fmrlUg6ra5~uPzk5Ao8Gx<gY~?06^wEwxszqd- -wKjrnVBs+cN~h}nfhLw&qlVYd@mB67qne7HC>R>?VMwfXp*!#8Bx=u__~ITT1NI?0{@zMYllG~JYTL| -mrtv^i>oK!2SXA6`)4uw~pD>_Oom9?%g`{}N+1@#J8)DYJH*v!^p|u|=bV~YcJ+HpoXT$_$IML3p^j| -k(yQ*SlUVSgGH(wtsG?2AE^k<TgzxLMmiHba<Boh(;jf(p$x{2#p<a&Au<d4_U{Rvh9oJe2K)KyBGGP -bW$(~4d5YF6$Cw${X`MUlPT<!Idmpw5K%)G7dJ_3-?ASnC9>gLPlHVw2n)r=qY`PW33!D<~+y*d*++q -t}T)olo3VQf;3Om>Qrpm!z&i+S_R@>Px9wH#jKTIb@H_9or~pOy`Q_i?q#~CS|G3HWf)}#x!pdRd+P4 -ONpuV*HhBI&z}cY=+#q=OQQkWUV(Pgib{3_C5xM&6})_a8$z9LoL77q&kBlG1Ab>WTB6_F@n>AU7$0~ -yjVZch3h_S+!&a3v^|x*dr?GUP5XZc^)8p|Bp(s*Dah!@z`dFz#o;0c`tT7QNb~?6FhK9D>EkS%1H~# -O}!o*6sYP1oMI_1r|OJ0kHXFrEVhLGs<(ItWvWFbzLPxOxDN&nWDC>HADKK66ZhL^=P2k+kTul%@04W -iUuKi8X9fALAZZAI_hkht18!#(xgBNMvLWY?c1(r;7i>z>x#D{FBOrHS-JS1D2ptQsYRjI#L$fTOG7< -`jM35l1luO@43b@t~++!+<sB54zH>T3J^QSQYzB$o@zdf%#}?h^Fk&4<bT2XEjz>G!<IU;$P=xe(9IB -BkZ{6xc|vJdOTQEc&PZSkb~Q-xHTH}di<5hT4biL?X*J7sJ@<>cSdqh8RFPdF%o`#2?;=nNs^{f^_Zg -u71{_pt6s>X??=LhBnZ48Y(1&B(2S)Az2J-6H9?ZiVktHr7<(r&iVsP_DDpex{fQ>)vt_J-0PY6M6aG -n<@=>L*=(?rmr^dLG!m^t9mz*q{iSH%XYHFnm>!FH;eR`^1YzLbZj?kwF@mk3n<$T$CpwszkrPw17el -wsyA)nwEK7&Tj6ICBf23nzVv>N(XG3Bj2yAwab+Y!lB#$0jZN2W8kUk+(mJr<TcA3u^`s~H7{Man+#W -cF^D5?%MQ5A)}uVu@>z(Ff|F`v!E?bgJ<CxNYG~i*MEFeWI^NRu7Fh(6kFktC~-MF_WsDi(e+b2&1%p -T8YtQ0nyhNBkwVQ?AESKSG}rTx3MoV-0U(nuWZNC^*#E`AHN`0el3Acg8FQ%_Eqkk<!@XL@Vhr!SDTZ -|(o^ncSGoPp`gS#;MS%ugJ`shp4`62G_wuuL^l32^OXi2d7)x2&u5|MhR$+#W$GKg5+|8fIj-$4L6mY -w0qr?e3_-nZo2=OH^&-MELtLrzw%DMwzRwQl!+M7JlPee@tf9SRw+YTinM(wOjqf(o6wOB@}QEmy=<* -H(FQqQxD*mVTr77w5Hr+wiW+-j81weN<E{8&>RoB6c@<4XmybgQQ#&&K}Ic>8cyyZuo&iL5`fpEz(Wh -<&jlQ^I#<LRb#8dmNJFcgel;%|iSklO2=+okW>XI*wvJr>?v^Ka{l&Lg|HnDHTH0#@oczpLpvT@7I~p -r{Mk^n0~rR>{d-;o5m9`k-+4Oz=h+$Heu`vlNh*1#5-9Bf59*G#=qh==4L-bn?ZLg0n~p<h<O=kAub6 -FqoU+DrD`8Te<Ie*hN0HbSjGt2dQsm!LWwo~7m%zq;PFRUD`r4ZT{|vwbp8iWO9KQH00008031s8R-L -`ofUpYy07NPP03ZMW0B~t=FJE?LZe(wAFJx(RbZlv2FLGsbZ*_8GWpgfYd97M|kK4Er|KFd2jd8Gi^{ -Ts<>$NbtZ7*q31W1!ZHYv~=hC*Ak&8#d5qP)A#;l6ukh7XZ?c)fQuf~+mh3}=S(_>t6@U3`1N)<r7w? -VKIz&BdSb$!I(pvzJAAtmJlAv*_iNeRp~F`~v>_6Z^N!`H|i5FS3k*?5$jjT#1y`1*><0{dBB%Mb2)D -O?}TR!Cn`KJms~7XYfT-jKh3+UCGs<F5uU;5@Ij%8fD!G!QQ@k`Rd)xtGIrs8P8Mp^8LGyAKtw9^zr? -N8+-_KqfJ%pS(0oH^`R0;!sNazsv6`=FhwMptVP8$H5!?Ll~iI~+h4M<-?C!61<UQvLfLQS?e<X1%>G -nIH&P!<;eLFTrT#Y3D#ccle@Inla`ozAElM=q45Lg-vgYfZNRzTEN>SCv8QY3Fp@+$eD=}j)@%w0mI) -c}(t+FxDy`^VSlH`03_D@Hn5pe?5yCN41K4Z471g~LT?sp<*xe%#HkuKv(u@6EOhiWZoj)?xB&PT|Xi -Vb*H=CV$bNQrDSW2nwG$~7eTksEr<q@o#{0X_F87|LPM?*vn@)cF>pgWnZ01rBu(ia|Jh7eCCI5-w!M -5MJM3#(^lB<Qi5cE_uC+zZ5c$LPtf@8O{++Dr3_HjZLOgCrBN@#Zh20@PKX8*qMr=z>n4iQYEV9nJ_M -}vS$p{@ci)X*)#Y3jiLn5D?!|B0}+nTw&01}N%`Bz@yttJ@x2?FvyVVMr$w57wi<tCD}g@LArrTmQ6< -fY-&nDsDXmB*^F}R?w-S&%Iq+2nfy>#b4r@x<$GujLbzp+nJDy3C*}%ftj#nvzcwS{<&*m46|MgTfQ{ -!P+#g=mi-1<)eg}^t*6dF=?cEXiE_Bc}JU|PQJb%b#s=G2)^^wlgYv5^ltKp<i*XS|VE_2MRIWxgpQX -S1JCT10<N0mC7yK`_d9BO+5nbV16XqhnoG=&PP7sf#3)RiuASO>hU|V3_>T$TLqOJyA#vHsnR^NTovQ -hG81&i65Zb^IHJ~%2Az?Cmx`zDm!ymp3b>z9ccbQ*G)b-dBi1rE7jZj5K&jwnB7;<btp(y#~KS<D}wx -}g<8I*#OcVnmzcq&$c>dVHo0F-ri?4L>CTFuO-wU8y<?iblYClSrvbdc3R<kbKzkf+06K(cthJ2fH$4 -Vk)L+6u6FT^(GjrstV5Hi7`jKhcN<e5T00&t8IFy<EqU7saz7<|YR)_Tt{lgg)BMy2%<$`2}ERu?(VF -=|#wdYxOGzFlR)EZYuc2J-_q6X-5hniKe=I{UpIPtbC$ZN9lGc;8Rv+j8gx~O2G<G>OKD?~e7=H#T;f -J#IYGcUjx07<C=4fYUjawP$~9GfD^F)E>t?`b7Y6v!ad$Qhb1ZtA0P3Auwai#sqbF$tN3JX_t#;(+Gx -8h`81L1DSLHv*f|1A)wHxgRKpChWWzp%Um@qgDHR3kW&eaUm1T!M5$&tXT0(XOdq&UH9r%Pm7L1+|x- -CUEXbHdQ3q|w6<~sc6+psNLBKyI8$gt+68tt==##E6_kVk&Irgsm2Kdi>x>qCM|quOVOg@VWob;kA%u -mIf*8FPP5W0(9*#_W07YD8yatwi3{{}26_(p*@`c~=iC@@mWm$ru;-QAE4U}mGUWz7hd0bDRAj98+{* -u-c9YtY_IY)wrHe2;}U!;euQ)%^6kfXnZgIU3K83zCI8sM-dg1M4Jk0lArOej9&Y$0sh-h1RwLZXxjg -6l?ko_;x~x=GazNH$?$r+^BO5wUKtjUcQ;z8JffNvrXU0cyi0f{p)pIj5Zs7BT7+6>K<ghlbr(gW=rn -E?~Fe3CJXrJgZPb$s|g@m`G)zVic$`(`i4QYdLCH9I_Oqf!4C)u;w{y&7~b(f{Ry^KTJ*_H%;Wzlo+B -OmLvsYRYFRFhstS47=yx)meJ*`Sy;cq_2I&AiL+A&i9c9Zi}squ!u&gHxeaP-Ep`hJ5AFnvFbv#goCG -(rJXMB5#-MU-SQBR<xxfC{B{elkZ<!c)6m>hXu2^|U5R_fWE+}b5b?g%u2<;Z~J_FA{xgCj*3(_pH@m -a9pXrW1eHNDn;Y9%eWZ59#=O0}A_Vxwu8y}|;V+!56Sm(A=OtUhVfn#?uQlZu;o1_q)JCT<A~J6x|+f -_GU~+>12YbV7?}j5h3d*I0R>ZBVKt6FL%u*c{jjh&<IjjUukwg{D2JUPp_KZlk!%1uHYiSKPRT24WmH -`Yyw>lJ!884q$;W75W?*P+;OhH<IhUfKr}D!T!=$1dsiI;gMS4aPoD7OiomS<_th%=PtUei?je?3ro2 -SMq#Uv38LvuPOAzM#AQ)Nm(vc}Q3_}>mbf$QDH;2V(Z6A|8+yk=+q2$yf}kK`*_>U)F0}il8-37GG|? -~>eqdjb_?yHby8hBOAPHKi?rw`pcWnHB+4ZXZtYLxDAQ-H$VIJIWAln)KwjWwxf(U6uyu;ETH&;gliE -;4xzp`v0=<w$mNZKtfE_wV_mV~WUxTie}vC@%iN2AWMt6_9}yaJo<Txx3Q8k?sfa5ZOG89=UUcEx_r; -9F!U8-ZiMe?J{rS_qX-YQSh9oHN3*u(1V%i+IhQ<D-UHVUNWDHiO6j^^y7g9TtAa6+vT9L&V1<ax!g$ -It?Lkw$LX1@FX7eS)Gb;0$-cjs6o`i*u4y0gg$@3dC@ctk&MJ&gWp5Ybpil-z+ur^s`=9QBoWHoH+2A -G1xI?l7>i`#+R?NZS4-@j&?x{YcT>sJ5CTV2g#r<;)2&gg|3r;L`%VVy>UaWrHM|SC^tYZ}L4vM~*c& -8%RaHe#QE_7FG^q_*^=QbY?~vkDtPa~~LMz8M9NeAG**6vZn`oP6L4=xP;S+A}lY3uOw@;IM0#lx|Lo -lc2rz=MLRGxyw77e427n?TXy)*qM!BZdX7>$q%4=7LK#xpUrEaDfaz?=6vEE|m+&yx^tuXlzsH-K`Kw -F~4}E}k!+41=FI^-~gEXZLkGy-VFOXyJqO^U}5U&IX@S3N+S}>@Os~p__KfmD^tqmW6KOuOK*X!yeHt -E{ihsS7TSqQz+Nw^gz30#;&G|%jJ||o1`NQx!;Qv&&D;hs6==}A<>;zk0ox1?*9)R;x{bzQx>mN!=GB -eAF15~b-R5*lW05!$+Lxx80~(3CSp9;iu65v>!@@_;|)ac@XWjm3rD|<M$XnTsB4eNp2t7Tps!cOSCJ -=LKqgo0;;-F@w5J4kosBx4Gw(MHv*7L=j2!tcBchhih6MTiZD%duL40G3&BR-(y-V-(<8^aQ)ys=qnr -47YzojDe0p!*9KRl)eR7drwDyhiGB;$_A^T&++SnIcC1pPKyR086MVA03#I4R7om53}PH9FyGm*wi{N -in4vrb~B=r+K_swD%`J|6=AeQ<>Yi&d!1&+Pk#(wiuilCcUX}?=a9aeGBj3z=y>4uD*M<Z!hNTsjYkU -A`sxN<u>*?!q33U;G96`YcRerjJiyPn8*{0^&OGzQJI7L7P3uDJi{KyI?;{0lYWmooYqym-UELe={fF -qfV=no0uJS|^WIW4`H$WSp*dT65hGYiH|fdEs`*T)#RM@hX|(%QHyD1ndJAR4o38Tw5D%OYFh9vDpK` -vUGaY@AAH+9+UiJ;^tf>nof7Z_Sw?EP}KEm#xCAIoRdf4xei3=KfLoNOn{rrfw)7w#rAxr4)#>?RZlu -nxKm?vg3VtaiTZf-){mA!e-j}Au6Ep+euO1~wuEw@#-dn7-G;LS4F>E}ls{JWyKRrIo*Vzx)>cZ!<(W -b^hP!D>t6wR#t+bfJj3W{HyK0=Xe~Z%CXOoh~xx-GUITb!#}bH+1bw9&<20X&0EdNi2H3ko)g%wBj|0 -)Gz}72T)4`1QY-O00;maO7>QZn{?EU6#xLXMgRaF0001RX>c!Jc4cm4Z*nhWX>)XJX<{#PV{&P5baO6 -nd96I{a@$6d|M?VSYE=MY60+<hmsN$%$~INuo-C;>IqN;!#{$72ITi?Dfq^KxuI^Fp-sAq>liZtJch3 -Nr0YFO522R-^Fw@i1-`&&50ULfdWMMKF@$!Tfaxwe~pY#rT2kdo{ZZol5N#?%x*z;${FNW~f59~J)2U -~U>d=aS+!_Gy><DAc#Oqg78cD0qOBxcviLT-YLv$Ld#=YbUP3~qSF0$4AWnV1zafnUpv^EHnp!n)?1o -ljnmFRsVFyq7G9=j`?6#m&3PtM@mT@2>G7jO#73WX(jv#5zqf$zE+G&nK5X{WD6IOW05OGs(-ljF)%0 -%!*J}zqZv7Db`$p|0>djh<Lfizln4bFOr^m>4(WW4J4}pz@8RjIbd@xc_^nmRzw}(#4~`S=Vd%kiY(- -LIdvhBDEe(7MO40Uan@zZvjE66U`q}_@9_=5mf3cIRJ`Nx6Yy9KdaQk^DLgD>FpIbXkw$@BB-whvL_E -FY@txP}A-#Yvqmpnw3_Pc2?sOUlYd)RAsOg*W+3EZ9o9Wxri^<ve`UWOAj??@3m-}_Z0FxY8JnA3&&- -$#~{iy%`=4|*=ALtFN45B3FqyCoX{a;@8eh%`SuV>Mg!TdNM^@}V%$-@<22l;R<!Ys)_goZ%qlOSLFc -gKCU4q~z3x%|ys>}8KtpeA#mjgVUl9sJYpu{2A7?0J%%X5mU8lZp(m`S8<^@Dg`9>L2ECE4L}!Zbbaz -dH?8T51>C84w-_y*pi3`X&Q-8$#f3%&2Y(#|DzBYiE{3<;SlixDa$2_%_H~tf_77a#CwDaJLdDNOx%G -$EO~A{9ut27k#l~>BNpM`qkfQ2;=AOQXMI+P(-8MP>Mw#Q=eQ;I^U)5lN9NK;752caqmslgf#*J`k4R -k*iUS6l32&KLlzK0676wrS_5gk$u@)lBK_^Ab*+$3}JcA)1$)E|yqTbo$-Sy4%d~z|Kz8ix~Wt@}?ka -B0vzaKpDze@@7=9iDphJW@yf9HN=pX6u%JMWi2IbQGj^}ET{&Gcsc_Uiofh5!JD2RrOq+Yo^2lkOe5> -ttR;+^aP6&{a320v=e11uNBojX?IN({%t!G<8l$`2dn1WXrpc&pxYN<i*U*9Cw(9KrH#mPq&-@_~e5^ -BH{zkoq;*WtAOx(A>BiFQN*E_yPnrWE$j8>d;xm(k0O!W&}z57^%Nd}rUQRO%<5Msm3cS-CA#G-2ia# -E&IlZEDpG=7&%pU%ki$D%_0E_N)&s@`>l6kZ6?t|v6Y&uYVf~}I$P|zBGys{SH(!W(eFK1qLGXe(Lhf -4t9yvb&OtXyu+%~HO3~TuYHeTZoA{t~eM`*5Nt>Snmma&9q17=VZm}i0kO_weZbij^1YhF!fb256YIF -aTv3zdFzc|yTl+&Rn{S|W!XGPj9bjRFT{K4~I^EC2q5%T?>AG$G?)DNSiYwf|SnQxcgZnv?ZpL57Z=x -hNlTvhfBi$Z-S+8Yn#Y%7_PG2*3rPDgFZXmlZjvClm5XZ`zh@<U{LWuNOvOiP$yi)LRhc%uQwpOz*DW -SE6#t)IbPILWpA+AQfgj0AW|^m^0FP<&3LmI0}qcwe>vZp;%~BpZnGdYR**hHTqOUw_%EUy%vctaQ9k -=@)e&2@iJG#P`js75eqq;x;c*)1C84hlw!buk?6hYKA6v^Q2^EfXq%62vVwPb|9Q5ZW<@+YL!&=n7|A -5*2-i2n0N3&BWdOnYhdroX9|qMw>_HY{FwXjI4+R2*NDxBLeicT^Y)0XT{qlfKq_R|K!EzW3Q77^@=a -PZ#=4>XAg)zIjyq<jU8@mLAY0!wdN$!)xq7hG%T--Yza^8CWCAbS5)aI_hYX1dbrcL-ZGIv2H0tge3; -9R;cx&r5e|98i044f*y!8m;bXqsW6tJ&=J8uLUxjU`Mow-if<w%KbS+upOi1(?^wUqx3St`OOb$Z466 -42ecL2_ng}II!K85^*y+O;S=aLp;Ht>4zARy3Vo?Kq!(5kI*#sdV&IyX2EhDoPhZOr3Z|xoz7!WgILi -7LuPH-yKF07G;|R|zz*sia@SE&2y#ltBaS`6QuK0-FNug<wQ@bW!=UQzA|=ZR-Ll@q8gKt5iQqsCFf3 -8jB5=d{msYI2-ay)ttuaUgG|;YV(+6>!85Dpa*M`rU?P5j;!4SSactXLRw|6;6VA|e@Tz``C*klTNkw -w}bY!Gsh0+)ih``jaWJ$T|Y7!&do@~O+~ah72!HMyjl4u7aJAs_PA7(A2foCP9MnJuEl4s*vMX=}blN -Et4hF$-}&Rk6%IHSk(4y^?Xo)}2G~I$(cGvRmzl(Z~F?ipeoDh&i9Dxcpqi#XU+Jc(2@V!O;OQ3SF=L -azQWr2%MLHO(0M`uQDJ}CbzDmO^TzqK}$J%`PYayD!xT_L>DC+@b;e1<9VqSv^@-|yMmho_8w!z46-$ -jAuBgY0{{IDGVf%Q?_%N(tn^zurUb#T<EGjI&I%FDr`p+fm_2Y1609a@Uux{Z)R$KX0rgJ7Ano$mL}g -dGpg^2Lb+_Ks04=>erGmFviEvfQgiI2UdKiMCPpQNz{PrL|;|N48fi|g#RMHFg6*$5|t>d%HGBzL3WF -k<$(vhIGZ&LQM6m-XHKU?Cg(1d6VwxbpyyMxLI9*=Q>OX-r5&OIrr8mO?chF1t>yfBu;>IS=61@SF~h -Q9_`0JObGviUOOv@eF~sfg1;`nBw1T?%wMIbka))03m4&1U0^cvwVhf6kBo6ViFggOAX&Cq;gwH*s_j -@pvg$9nz10a)7j2`s?JYfS}V)vgMJ!ABI@u38EwP`$tlwN9!P5b&3aiN$td+Q~`&r4T^)M5Q2Ncpm9$ -oallUJbM}JBf#wu^4hQ?Ck{iCETs|)r@W{3udV#6hG!~Q^w)`nQF-0C8y=a*{!wZrPnFk<KafcCE2lv -y~qCXrzZ`hIM{&r41e*Q1}3Fo>qO!`oBtOVP8M5yRCmiu|sfrMv-a!3jbfs=+M%8LktyczN6sp+Vnns -x<#&74oMvxnmrEUmTX3}ehw7}R$h2Ul}g|DknR|4+~Q@Yi4Zd*NXzv6g9VWYvg9IN30zRh`vXcr?R^T -E~vfq(>)}O)V&0ZCBBRrkUYgV`QVAP{OA$fSw(I1<VW3P%3_HK*QM#en1|BRhA5^ECzFQB3~7ieenJ& -=2YIqZB{T$)a;_K>)CL1(bs(-lx#t@;@KK8swfBOiggC<c%7B#>e8{Z@|QLobvp$M>N?{OV>1^bdHp9 -4ZlSb$<yVu7H<NcA+o&*CxVyVS{5F1fJ-NJih!lI#Py}cdoKP&vorxTM!$ScfnsDtMNp|eIhZ!&cP4& -PUWKM3n18h)M*tH*ED8#D3GRMjV))p}UNUI2Kf9+|Hd_9Ugt;-U$JrJ9Ou5-?Z)PHww+m+SYR{ftz^L -Aj<onM&Aicv{{fM*><SVE=15rss{0UNT{mv7&WFK)(f*yZ~hV^Sx>Vt|A&I`e2)$bW_L7H6?u5et3^R -WDF@f*EX$tsp#{aWsX=8jnvfM=2nqhp5Xe8-oSq?BMwM_dYv~V57xy#SjM!*DCZ;4wpQJ1)^w6yBk78 -%i~-~h%yHTJP04RI6QVF#CDqic*4%=+V%is9HEy{F(MwY|NEc+Vr~^c2L`zF)0@c!dwqH}xj8*&=i{5 -3@jG_?>*>2Ib`3;*|MYnL=dq{4ZbdT6EC2Vu_rkk=dwSl4<`B4N&)%GQinel-(7w?+0Jgb+kQkuPwg$ -M0J~_j4s=ENf4T@oCj~G4Xz9}ISRRsVY&e&Yckw~f{05prOKwd})W47qeVvYw*LAHgB8K6Q?k4zsMR1 -%~ZXB7LHi|7|I%7B%hS-Pp6>mJ?Qe?(&LP|4E|$0ux_;Qr8FEpiGdU|S%mAsvxKguZO;iq5^{Dv)Ldg -j}3+fI!%&`Zk?D)q(P^lLoc0>(Fq=#MC&7nPf?<tTY5X5s*C(7V6M}#{_bbAuGWur<lT<q;p$gbr=a% -?sJA8PR?jz71|onltt@mco9Xrr#!-hS#cu9ovcQpl?#?e&Q7LxrO^iIv`0&W3<X)4TFM~t0IDoyX+F_ -WHAtWokx6`sAr%$2^l{?-{XOg_xfNWgUx_4|F#wH$-O4mv#sMgBFrZTIfP|(E5f~jKIcFw-O(vuS^El -(cI#~2Nu|%$3x0XC~@&*LjS}lUD>RXw=6MzmG)Frg{vB39lXcX1Z9_Divpqu$Ehzd2M9gI095#7VgD{ -B+>c9b4b+^EKSZF8mhi3iN2O=MyN78bb#0A;SgTq<lB)7y;j2H#3!WBqC&nIyh#zVr*s)YX1$Ms(Ii8 -{8>@G|SJwn?;Xf(<52sbWbD>c9967s2ELwty4O$RWa8?nh9Zf5O*)Dq!8$6gu~@@ItXeU+Z}>?3#C5% -AJI%-l{+2|GL6e<70^I*fkYo5`;PbV+2?Npi46c2EFHp?T`*u3TRk~7X^=AI$hz!Etqe6`X6RPxU=Dx -c2)7*BNx^FULz-`J0}U0|{LpJsWHDeBb2a&A*s-OKCG`m4o`D!BXmxa0T7Ua^v2p%W%|tt!^Hl9h|Jd -nU%S>A<SXEip^Sn+giS9}dXaX|PZp=0IjT<UKSuegZ;idApRL6|lj_O#GfTS(uL)Veb1FX(E*#khDr( -n4R*9zf9*^}qmuPNZu9dWK2J75R|1JkdI4%?>>q$$NplW?UN%i}u%p^!QkyuN(@?)7;3=JaMf9ba9({ -?%!p%wX2l1l4^gLGQ5*5Kp?{AAh;Ve_RMI+!hGW`*`x>=T10Z_35Z?9CS-rA61P*K5%VNuQ#gh+UOI& -g-;3wWOE6)txfGo-3)DlYM`?l<X4g6&I6PL;v7={4n0PL$qiYrB<QIj_9d`tBDIZR5gQ^&G6^>3kPxZ -^=|-u*Zcb44rd2kv)bdg85W;J7Ei&ThUo;w>@@4niAT>KGGWK5L*8BRMbC}b~7MNN6ur;_dS|AP>%># -<l)0v1NGoxqaE*_L06;h1pA4u1`*E(SOloZ#YEZNKtAy>r&k=lr7#9UxT`@|8i-G{HV0~;u8T?JS>0* -=PzV8jOjRK&sYb6iS<9aaLb`NCj8Ib$Ce@KT2`BrE)0<T7^^m>m*;7mUyN8l<lrTG8_&k?Pz_?S27tV -Ax01Eldc8oOZ?43f=+M8g@_pW26Kx&AK_C6~MStWDzA<)H-1@PGwq;V43qcX6@8~iZmvLJ4ZfF%JE9E -p^PC}bBQH<CCn({OQ19C69eZ*xK#60KbBR?pr*HRzU`}19r=iKy4tg4KXm!C;v~ZALZ>0SrIo8tGaIw -I>C;r+>syhg$ZG<LH`Gi|9TYo_C|+1@6LHa&*gr;EOWK$HV2`k$xpksKv)qq*xzCNJp)#KJvFRY5*Zz -Wr>AtTiM2-RVZy}q8jvcgX{3}pKAZ?{I`oInw$gF_Yp`KK$&#ddL55sBKW&=+C@C~z_>M%r8zS$dwZO -skv{@=fKfm)2sRhpE1Y-ZJkV;APfpWEqY>o^h{5$$wGf0|+BH9Jlr&GHvkzZ{cHohJ|w<X|*qb;KzE8 -TM{X@jWQl$Iq?s2j8^iT*Gs8^NIr|mqIFh-qsr%UmUYDscIJO%tKo}*s9mnG^!3uDp0CeU_mmneU<0$ -MudhEA4(9N3Z`=GmM&;)R72#hKE!4v8j*!;Y_spMy&7c{I%$7){#;|<%AZ@Avmun&?raNXYmR|+F#l3 -eDWTDcTN1t<ZJTY$<|jxRVMA>m8?(2{4=qS#o?f>OTb`-3)G@~nv2wem?X`(-hbrpGB&AsLFlTO&4rM -aLM9iylA+KSc&=#0SC8u<Fq&fuE2QOIPofWc-3ow8yGEV1I^K3iB_9f~?9uBSgVIUbm8n6v_Ai4nZup -kVJ469TN&gZj0eQ2|xDzPeI+m&X8@18pEf(!_cD;hc3tX<~S{gIC<KvX=?oycuFLzTrA7HAIls0h`}r -&Kc^u?4kv;t#iF+i?AQ@Z;j7W~>5?$HO;BTh^)EszAlfbpW$V4!UFkuXP})NMU`}<kM5PMzm@xo;jbg -PuNvV9Xjn3f121~yi2vUdRWTKHr52fUuH>>y2sS%j_#(ZTMA;U{j{SbLy=(KO8QMjBpXCwSyLIC@E-` -q{`f$w9MP6JEf(nhU8gh(XlE2@w22tLR6(rX*v_z{VdXjn*V^4q1*%(|sOktDZG2<u)(X;=QKT-vb)U -80?DNx|ZB?Do^sH)!NAvcrs!03maGKS-oh7UeCt6-+lYiw?b|xJiuJ>d7*>Jgvx~|uDx(!n7)fIa6ms -EF2SMFMKot)y16N`p`Xh`}ODuvX9ZNeKcs?Ie(_-VicV$rbbBZRJRMjrW@$bP0DuyI`psH%ecsM<G%o -!3?VOdtN0?Xoi=XGM6+C3VZ*;iu?+j-R3*=~l@S?op%v-YQ!w>fDNW-qCPRpN9Kk5QVw;3Ss4y>SX`v -gmC-u`yt@aVl;hw1XTF(`^LuyodR5re(~HMT^`R*bypRphe5V>5HIuVZCCZyZ$yl*VNF_xIX1Mq5I|X -!E+)FT?E#@MXf9}rblD^EqH2*?1=$>9ZFH8wEKj0BVk<{@8!S0f=^4a54IuOS(-Qph7F)>gc=>+|fcP -fEP81EqnmQM`jKpkOE-<RTzxA`~SPj3+gdDD!LaP3@k^a2iZGiH8eC~F7Bs9z=fR47|oZ5h$_p03j%X -0v!UhyzjO*IN*GjZMJDVnHtgc;4VSwNyID6O#Y)oD^s(f_KLMIvOUR};2KsGYvf7BGV?vjp>7$DMhr* -?EqiUsg>NM)%MO=HzP|;E8ILu-B*>pL8>SfR;$$7e`j}O7}%sn+=h<z>l?wl`<Z|1E9)pK0Wo-L}}(b -z!^PNJ3#5UL9JW%Sw@LM(DR!_DpP%SO6SmUkNs0goqf^=62LYDs*zCrZTQ*%r$hkZL;^pvU0?~>R8qN -8nQ+-nB8}DrldF}J13CX#>y;w+sP+G$a4ilrnze8Wuoq>haU4pH$Vydh(WrCPJrSFNVpd^x*I!z-h4S -OEa;U8o({&L^kw%@`vAe8e67oh#PRR}%0{Kt%DZcqVGN{3Nuvd|Clf_-%C;wh)7<`K~&<D(x>S0mO#& -btN4v`ZE<hqpr%}=M{X_wz>PW?YnO9KQH00008031s8R)k7<66(AF004dg02=@R0B~t=FJE?LZe(wAF -Jx(RbZlv2FLX09E@gOS?7e$@RMoXOe&&(nBusJ!NFcl;28#wYGN7bGU=Sw6N^o#whKNagU>v8^VmJrz -N+9uMEQiBbd#_sUExl6et=9HiY~^JICk*DHqKL1wphin|k3(xHAsI->`K`6inMne+x4+--^Zow*`SBs -=vCrCT@4fcgYp=EUUTZ3Df1I;$9A||;P2;$Ioc_<n{m=gx{N+q}C5L-C^T=iUOiPYjc3a^7wFPVHzJF -icUEeFX=dK4H_`X<h_q_#m(gOweKTxpf7H`4#zQ5|;YqGPm3Jo0F9z3$H&AxM5@^59eb6Pvx-wX58Vs -tN^)=KxxX)nROIZ!<92*Lh*+K(wc+kh`I?(^t=>;3lx5MQ#c9yiA=F{N?l?7!WeOzY&#rV*wrj_ZJzp -X+HcCtU3C*JV%vpUoVX#+m4Q^3EMK5z%JuGy(lwjRc6Wse9^1|5oRkxViXnr-|$KegiQhCT?FQ$31(R -<0k$Snm;X=hW8EB^A6KLhQCI<cY_G`@gEr#!nRt6!xTWRuBlsfmv|S)-95u-`!(=)VmKU>>$*k<<5t~ -(8BIFQEYrnsk!$MK*4+co)K+LScN<pX5;)g2b@#6RJ^)S^bQ%!82QGoT@gKMF|Nr;@=HGJlRO2Zt&v8 -4NrY_(duPg3;xt`}Fci3(BXp$`)>hIOGfCe%mfPCX&e}$ndAI{Z3cmi{?7I3U&6r@F59=0t9KiYyOEs -yJRacV`s;|QCZ&2jBfy(H^DE2(dINuO6IOX|atHegBbj5JF6_xx`t>6pzZNv+`h4lP{P?-35BMXp)Ed -6uzdqbWxyB2L(kNouB(m&|G+Ty9d`d{J|FQE`9#9ksQl3Ngs1X88Ppr=iTSyWgP&I-P(-sqa_nyVx9P -kfYt%Dm>8~cora*u_>CS1<ig<>SybLK6rm|630EGxLI2NfTqcZ3zg-k6nDbeT5nP669Ab&pzr9w0V{B -P(Bx(RHJ0PNY8NZfFi(NARUE5!6-6!XL@@1{%5eSrXPyI;>fhs=4#H5e`dAT+7scJJLOC#Q`zkLj;>* -ja2p>>N>SpuC;#)Tq@gY=8?Q%q%y~2}`z^l*<MLOkS%Q4w~s>t0POoL)80r;80a@h^pNW>Xx#Ysy=XO -O$Hf@u=`@0UN}SiN4-YuFe+w&vY2M5ne1k%OIpzqiBZVP`LBTCF-_Uq2)ORcfIR(v+&M_-(2|s)x*uN -Rabj)o17k30DYksR^iV>x2j)`t=1OYk1KVEuK@W+V>;ITIWbHqud!?`?t77ad#n-=U@&{-CdP6)$Mw} -+I+!lG>LcgC{lvGJc8pYD}g5_`2va31v=~b;ImK5<AJZ>i&z$a&>!GNASZNtfEzsQSC{KlBm&=0e3k1 -QkZuaQ6Q0-X0EwIsFBpQ-GZdwii-3L~%Ns{5>1>hSk6Ro)Wr*$rtWk~HVpO-DH;Xp7TGw3(*Yx$5?+5 -@VLbb*>PHTWC?Ni{qHGwto7|ir&c{V7)5pfX@Lz!CM61^4U<%C&E?{V`MNeG&d8Q@zke5;BQIKnTh#e -(X-58&Sw_AclB>Kyf*@3yDO%~t2Tb$+iekeTb^!eWM%9RofJ&pjBfwgJn*px~XKt}RmgiUw2*<Q^j@G -;ySy7!Yl0YjeWvVb?-0RLW7S+-h}J@pXU1mOchJDyvu4P(xv`A#(N*F(|Jl*vK(@*K8Q!VQ)-;XSFMC -k>A$*Z24G&M8-(9`}}NAHj0ej!?=O0FCdpj3OsBlzIQ3W_)ldUg5z--S~lPgS<^(jb3kaq`OBFQn#^# -Q2QaZ$XgUkh(b*+5{T1%m96OBnrcO+35t?uoRcE_^eBNM>_F?d>+5y*YAcgiJ3_&)XYI7B^37eFx%f! -nuPdVhNtaSE?X(d(NQikI=AyD1@&IBa6yQQok7d)$dDBs%;Y?~OG+Ks6RWM*enGCPht-Tjgk;hgRSKE -S8a71-Oy#T>a$6EnTqN01HBJC2uB^^117zF!lwfb`l&UM!=eDuIa!N=#rP6tU76D2=C9WepY9AS1m#5 -UPH^5@Kh8h<S67)ldvR*&N6Rrr(L2xr~iIuW6N);m|1n@&wl$MAq~LGqu_HS<9QD^J9*D00GuWX~2GQ -81sP{fWpH*IHzfi*~r;kG4_9O&5*pv+<_$o_Zxr<E((W!3P}7OmV1veSKvDggINIC8)}0WE}i3qP$<= -5!}=@Ki7olitAtL%18eKov{q~3YAWGoC_&wg06z9x_z>7e$+I9?+fCrlVCpVPos7VQ1jKe@m<k4NQnt -SjPs;8NyoOG|HNZe57}fOqLA3e(+HRz$U(2&Y^_;Czsg}10p8We!a4ZWy*#%#3UFHE91j1g+D}Zm|P# -3k6at1n3;;`!ySh!uAjU^;0HW7fe-EW`8+8xC@=Rut-+3Rox92an2O*0|ZIRIE*YJunV*~S+w?>3~DD -X@JsAj$I}@n_huwZ#eSVr}**EGZ9p&L7l_g7fmJe$@NPq(bU9%6hh!vhF@bEQC|{TPS&ewbarjr(N71 -)&Q6nrPD`hSExsv7cS$0`-Ht*EpW{gIWbinALKpkXCrm#Albac&<HHO2N|-}Dqe2k)xOvf?DHx<XbWs -aoa`<hr=w5=rfqNFX&dtDeNdb5!}-GA4Eb<A7BCud-)P_#lf3B-oS@3j=_T1Ax0)dbg6AOk=wwyCtd- -|;YOgp>*qe?Y&fAR-P$6?|NxJl<@!>P$gUCA~wMsgC^|L#HgS@>Rf!yo`+ypJit!VrbXAhX1JuK2gU0 -W+Vr%G2q7J1%Oukb`9P@avo`Z;{n@j%sD%yQHW6$}c2$Fs53-_1y>JyUAshbK=J^OFc*+TTS8?jrOys -2sNG3asJ$WDWBPbDSD_RWfk|6r)2+U#f1KQVd#C^-4o*6lV+-8_=;@o)x;eR-Q9ev<3^}X~C&-#9Fz` -!)~x9`>-|iKCo0S@Nv8_yv7_KiN*av_=e(?-3Y1c7zaB^v;c!mrvggxeX7VSyH5a2Ji9f7_s=0wW@hz -Cd~vjgw|Bz5R<YgKqHBgM2b!;TI3l6rND?jw)0P5zR)%FP#?e!$zUk~(o40jj!})B{)^I*c%vj)TtNS -``R!>8=9?X_c*~VhFN`E-ijRUA9ohv%y^9K1q>;jIlVpLQ?<pR-t2J<YUJb&)iyRS*YOdvUT<Gr?IJK -j>f^uKbFEJM6BS^AQ?@$$eLKmxqrVgK2Uxr62!y|e0*8L}+BNIaM`7-hLE@N6<mfU@ZD72g0K4s`&nJ -U(SR-kG-_XIE&khP8j6YCnx?UqXNZPB0i&fYhL{((5NCWM5j52MeM9){!C&;sJGiq%H{53B;g!8VDWF -Y3$3*lc!2WLHo+^;)38*53_*{j-(@E`whl_;SBO^E^%nsTH`TLghMCK>Ea78g%9A1+8XwlYgJy3m}^7 -r(%GUz?<UkPm1-R>hc9;eatyvSznf4(M-wP8PkiH7wM`{%C5-v><+zT~(q;)`&Y(FgUdQ{`BCK?ZvE~ -XS|Nf5C2j<s^OSRot2Y+A<eD(RfY-T1>qu9$Hg5<YizXFmwvvD*@<}=ZlYckjgwt&YDM12YL35TZCpL -9e($~ixUGGOw^WgbXx<v@Aj*mKaQj!67rfRJpY=z~S^3DB!#p8kA{{pK<>Ab7}`&BjnpFs!(EJD57PB -~Gb;nNsM217UZUCxDe<h100h;yXaGwL`UkGa29Qiu+`%8?|_iWuo+TpJcZ{{wT<ERt*+PWmMHr*;6GR -#Pw+Qi>ZKiOtn(X&V!nyw!{kq4IC<fcCZN9C_`0C2d=b2J2IFE@G1v-AE5!2q*h&Si}SV4H^foU6T)5 -|ySJ;h#4du^u8IP!)*!7yQ;`r*szWo#Amy=dO-&JMBPwZaTKr~U<$9Y=n@<%`+1YHAQ9ukIlhKgqKx- -AWdz+8dU4fK435`#?0vkW^;+8L;YP5WnHPv!7dBv+C5v11a!kIWZuGVdWd>?!2GGuan_V=)|%dq71WM -h}1rsqTR14>7%9oHc=iuN8Uzr@`yj%Ldt3yxs61Tj_gD?Hf|Nn-ib(=BB-EbJZ@D}~yZ@oM>MB}Xj}C -`+wsjx#$@w15*wso4crf{jtWM#^AMI{_|TEweh)rcZ~DV^qkL`p&an2ja0pYL9D;S<02m*O;LYQ#?!M -0kg}BA3;+;WaV@MoU+4w>MwEIg{HUk2^xmac=nTmRA+n*7SKK*<mT9m2vBbeY2v3~ljVjhx>zx4^q{+ -M$mOI3MV|_Ltxh?ype|cZ+`b-$cY(0C3&e64&ghUl0+Z7zIRcZSR$&(x)q;{Rzt-6$M&omkp@qE`P$% -YtmbkY|f6wr+$L141>vJh&gZyF^=1jw!ZNgso-%`}vP~Xp0iy3M~LcVLwg_@NHt>x0&pldmw^bqh9wz -Lr&LOef~?V6HmX<D+S@q5$?Tc}<9yy!HvDCeRU9fcMh7517gX;Cw^2<mkV>vdF&QoRlpHOEH>jX{K*B -GU?lJ;_O4)R6i**MHyVmrIccIVqoASO_C=GFyBj#|1R3n}0sd2ggOL8U^DNOs7GXU4s)@BBV)I1Z~wN -X|K)!#>n<E(;~<M-1P#C)HgsNz_5<e4b_8qu9tN}A(ia6laT;64u|B*s^~thU;!81ai<^W^4x03pRo^ -@T;u7^mii2}WhZ_KT0QKxGOW?gMT^n?l_m$RK4mt3W6oh8(t_hxR7V}h_9NbS+73)sY-YK+Kt5z`Jl6 -o?YvWhJfog!T1B72a)SO6Dt)YUl1)O?b{&Gt5m+7iC18qLu*&<p2rCGTSvftQvZVhDE_;!sWQXOR<m2 -+G}X#>(vOk+Et4%%!ii;YGVdr;6(`<z{MQyT~FgtFI<SKlsbYd!~7wS5`O`wqu7F12wW^(y08a!Y|v% -M*dRLqwdM$gLkEN9-QPZbHFgYb@8{0mN-X(^Ahen1fpGY_6M9N(JUO-f7b|Yg$n=G?Wmvlv8#+?}j0H -D|keCF1LQPk%ubz<4eKcGXANH3T<8xIk&2}74nYbTkj~e^&Y|v1#!&QEcuXW=9^-j%uM1;JyrTjX4bk -<ezmXp&%EVRyxA?E#wXN(MkwYabGRUf^!Jrfg#C+}<#_WoZD3%N<(zz4bG(C{_!(z1HHw|;clrVP@|k -gQTyxA0k2ZKT$J=VcH)<=R;Ts2P@Opu+{cugv2kJXYW_;tEk3WVg!Dzn=P1dBGT{cvC1qJW8-+2b6)p -HY)Q`Ie?;KpW{Xr02x)bAkkIo*6+hOR1q03=j7)s+hx)Rk%r=xX8wn3&{qIC#(D;B79bRY(;n$(R1(h -{Qez%6Pp&&G#DGj9|_3fKzP)lSHXVINt=Bv2g+pnX7PIJ~#oVz}WwS=aLG3?MNz=t;E_*ja7j#alW}} -VX)J2Y(?*BIbp85A-pJ)FGW*w{b-hrhz~oX;>1?&EfBx)k-$};GgU%TW-EvEkRv>ZGqnSxayGM0NDkH -bqtvWrSWUmSCYP<c2_<Ac&~l`g2(fx3sRU|Q+{WG-57oJ<66T-NUKRrJQ>nIu?>z-Zg1%6DB^XjkS$P -V?lpRI;a#YkRc$C37`#%8LP`*}HrUa~!1!Wrvwm;|!g3)tfcRtD}DR)rvd1$#ZzbaJ};0N(%18cM14# -ZWe`eAYzFW2XCVlHS7W7(+jDd~J)8cHZKY*Z;9WWNnm1jn)7-V%52y325d#pVry5&873x`ovvHV*=<- -!1&MKDW2bX2WHG`Y!cTkyp#|6?b<$qt)GwraY+8O@D%d3?Ok4%(6hvQen&Aak}VpcGQ{GgtNY1_`x3_ -!LMD9maddw|GkXkuH0lb%`?>}iarI&er0{XTHh7JMGj|GcikOweK#jg*^e`e<Cyc0>oV2mUa4Dcj%TP -*e25kuijSa)$Jw#otVW&g{`D(?=m{VDPmsKoU=4VZR^!7c2v?chiK31x-Tm=GA6sz~uH`}Mtul0vI2A -fab0@Z#pm{fIpmeyqLE#NuK@)Xu>{Xn6>TQ~ceS+P?v-_42a`xZ(NNdoNxY!R7YN@S2Z7l-P-7DE+O? -rwwehQSh$5Dxk<fAdBNGD4qyLfGhlq+6UBIQe06LtZ0GDMzbAipU;)sa85U`Mjo^GP4e*N3};w9FsIE -g#X6a_$f%HceOM;*@Rs`IKBwWeaMU@pj_FT+%mpVO8_6s>hWo)XnR8XCG>mQ9$wX*i@x5Eu?bBUZ;7m -q>8l8sCYuD=l$%pb6CTw{+`7)m-Kx<!!;Tr`2<{49itv?KA#2x;<G8upQT%DPvX=SPusr%w6~rGg`1@ --5p*1a=BhN+bWUmROt)CWI^aG6bQLy;xoqlSjn+fg%M~ZJlB$!^<$m@b<59mveHX^J&CkLf(syy$dcr -sAyZ4SY^j+~>icrh;;jVIRiJO-|gKvk)-lV^-1(nJTn&hdg!DQTPT@asys%_8|cJm(G)Y+(O#g@x(?F -auVY?n8;4-w&@z}JpR)%_19q9zP<mwj*|+<6iVeB-t8)O5?Rg$dAt{5Xg+yzG^gNZ#i<VdCb3OTd1Fh -ajln2bXeSt75Ve>YydF;tRS-5;{SNo$#uJPvG^*4!mxEAFsQQ;`P8=Xvc4RGC{ZSDY|WMqg&`O-JXlk -?KiK&?WaGaWjEDr4Odu|Fk1huRGtZFri2)NyQyCZpTvg>n-a!)sTFoep}L&v#}&0LxMT;)nU>c?>u^| -Yn6(>pa@s*>vl)$k{dQbaujsFF99hYpKAjTCK5aIVP0M>6*A68fEs|~UNW`Q?cUAKRO$WzXxri@lW<M -kC5(Z!1(`dJ7c~7AJVvLg^s6dujs<h6F2i<R>)^9l?9{k5z^?_vYj_S7KW(nJro9gHHG+b_IkAh-lqs -6`o9>n$}l_%l7d=T(g1Q>gaL%n{aA64XQguU}1TP;ZZQEF?g^U%<RrLJ0e9tR1{kT4Q${SRv85>Bb;7 -w5vnC+wXAh9>6B6ZT$*nOgw%5Wt#^%-`lD%#4|&_v5s#XM%TV0!)JL{-WmIjtP;=-TgJysd>-lg;@xc -CTAZ=hM$Zcw11GGAQ|ojp7!}!CiZt1$g4z2jkVsQ)L4TiFPNj1B<FyWol#+1AC5sk=w3WzlK7&<*4Q+ -7QZv+Bc(tSGk4jZ{&mjx6<wKMlxg;^<FQznqk>0atrnLb?%Dc{^Ywc=R!?&{})505_AJ(0PJSgC$32H -Qk8y-!^Hhj(gJ}Ozy*bm?W0?H&by-cNBfol9^%e!OGkzJQir9@G)<xq298k7{CxE;$>V9Z;n)M6<0p` -aOOgaq5OLf;5;_e%xpVo*SMOItj%VNRB0(cHWXblEe#i*0yPA@0H)Gz~VcFy^R-($IFFLskQbmi2b^7 -F$m<FY>+3sP~8#b#XowjHOydL<z#-O5D@vwz&JN(QX6DeH114%26ba-8_h65;CS#gPHFFbxeFZ^6f-i -J42fsU#>zG=NlG3ZXIQa#JjpvA`uO7e<-q{(wW8qMb<7O5e=3+5NR$+XjK3T$#ZiwX|`O7_KFF07HP7 -~IMH4%^5xQKZ?HSgdxK}=7TiC|!(AmcLz$Qk7FB!<s~CxO#!9f|sFf9<Y^<ps)bhQK<37Lh&5bLa*;E -Iwinf7zn(CliLK#LcnZ)bmxy71TY*a;>RP?53ze(h8`Uka;ZRs%b;(4sqo~p$=xJ{i;l~_5{vKau*|G -k}R$evDtlOP8Q@j8X-#<L$9FybJ}c2HYE*CyK8h-~^S*RzO+Iv-K3JWa=4*r|`&aUFrjy~s4RSLb`nE -NW+~`y`$=aU3tH=B3%eEGEyzWtXacd><EhR)86x%mz~Jr^bW?le$*MCp)?r)$pp5;v~YIG#&|ac+ni2 -VVWT;EQUHn9mk;>P>9=^S`h*|z)TKRPqhOY5ng1nrEINWe!xBw^&df>pK;OeL~sNf>(tF{9)-nSc!FR -Ad)=uoS1I)!vgQ)PP80&O4j|f4kI=Lqs;fwys+CgGIG*-6<)?5Ymsw5HN_i8{Npqlv8xfJ?_(GrrrA@ -e$6lqG;iMR!bfun#;$BwH%!AWDo)i$r*Zp0~0@ahebTU>Ejt?y8!PQbtL+eiV*@I?!N$vIk)UeD%%bR -cGDnxzX=J-Pm*COxz`HUke>xPk@jmg~{nQrw*|o!k|+Q4Wx_#3%*o$i_p|rbBDTwz#aE%xf*Kv@H2f9 -`}ABQ~cxRFVmFzlR787qbpEGf3+av_!-X6NL4G6`r`5YNDg!&kU3N`xT1He!0UG$4}$eq8LmI6RCS(t -v7{;&7`rt)B{?RZ(?$BLw4i0j*~{4{P6Wd;pFKMWb~d4dJpnJR?o&5XZ!zewMyP}~e_bYUD=inLhpqE -L+-TCou-lkXJ=$`fR$z0TXGEVfy75M>;^c-b)!n%zUxSv91W1pU-GJ;(s^nDso<ZM}AIGOYrh)1nx1( -NqvQ}BNX+YQ>k(s%AaD@vjCJ>G%ZK=AK=yk7(f~>*@@_w)&?V%pYULx6~Q7{*y$qI9J2Ce8xcJ|9u=9 -r2Yer!XNdZOMOXWzQ3)Hw^izQD#UE{^?(l#G0o7&oy808pMYRjOjE;7OSizfH~e8-RfU+~mRCJY~tI0 -fZkX*MqJxmd!D8eT!X#x$@(aVdj|RXs=ar5X{cT+LGo7Tir{I8I)E~sf$d@vwDrH1{ZqNGTZYq;CW|6 -vRyb?+$VQ_4K*++Wi~0t$2cI9$!(MGwR4p|mN^^vq0Cm<6nTi3JNp49KIVCoIO=&`%y|LlE-9n6EFb4 -Jy<i{f!->ShLd$S36F2-4n($<Ec!5?;;%*KKiXV@-Xbvk))rkFjk3NUZSFv-%EP22rrpW_l=}*|G#eX -#>HJ{PSDaq3kmrQNzM;KGvqkm0JZE|VBVqEuBXRn#LfJ2QxzTOWka81eV03?X_v4XoeZs#e`3E8*r#I -@>>E<c@Iks+&jfW^K#Sx~#J#o#b<{+Bx`zeu(b>9gyqaDs&)rZejr0SAhdouDv{VJT#j2(Qs$*!iL -&ty^-C&M)16fueSsJoHL}sv`qXa=avR^mO2GH<o0X1`MR&s^sd$?UMos5gh4WRsiu4h(?fuNF|K*bM` -dq-%vs?p*6MEt<Z-h@ho*O-E4AG?L=6w7dE&Q@T%=FH?03fq&3OE*Bv_yn)d!|<pnDm|^zWmrlpmIAU -VN$AlAp>v>GQ9u4;GH$D7u#DNmc2fL<gDQ{Rnwf0G^8l>25Ftp9PQ%5iPt^~Lj^Z{6u87iRm}t30`Wx -=)N$=xA(kRS7l~!)zuMQR=zoS7v=CU(<ij&F#|A^N3qMkCFEY9(<(wW%v3HBs(l#hA;4t58dW1?krQq -kVg;-l2EiMXHZVPAg%RH~f_R#&Z!!{uS(-VNAIf8>p6E<!8jNgjS^u;jPT=scVaMZ3goLIH&O3qV9cG -5#va!)&fLTrER$KK{Ont5rw88n#FaR&6bwOhDP^*+JUGfJw^iX=s8hCQ$8RgiP#lEi#E?z~pfPXwU?0 -ok^z|pz9|3*cJHf(T_twjkEN99AI9vL-VmmaFe-ZaHUySLMmH8!{WfK0Q>r21{$HzEVItOL3`k7q(^% -O?UKlS1JVTcXoju`;jVs4S&CsLL&rg1nq=rpH3rzC6c~F3IwXEfjY1WYD&85r5^9EU5UL?}n#2|_YwI -z{r)KEtpUulYFx1<)!2X_|DtO5JXft^AZYVDbmG!cM-XT(<3kJMdOk+<M(V{8)?8@XW!|5w<#(~D>2K -HfNPo(1-PswZ-$PsCT59~~^D}MoW+*ffsE*zxcabPhG2j}%W=E8I1K1{*m-O^Y4N6_NJmV8K&PRRR2x -aX{U&(U78i@_tvNu>hj@G&HB_~1l_%cYg<TZKk~oh_k++PiVy?PrxmB%=7>1QrMNrc%p$7VY4<xXAw^ -3NnU*?29`MD4xBJP^_lfNXTR_V?xlxRBR?ljtmdmfk``19PV5V7mqgkPTW(OeFt2b?Q=uic9uvdrF0L -w5}=s}F7azr_bHWEGnI-Ho@MN%JCJTs^<JjBPXIXRNgTop2!HK#R3E5kV0vdqfM`+nF;qDAB%baZTn* -XD6@&Ja-G41y^AdQS)Q#8KU3e`$1=rebdHKb7%eK*N5~IYllXRQbNw=#{!0o3$OtS-s>gIM@>2BT07v -rHxerGPe(>h9Png>8}MPmnk+-Zfk*0coBG1JOLTGRTkSwJW3X`M!2blI_m9#5o}H+GgoCLpR6SKjgT2 -d;DkUOkP6lyIFxE=2&af&r!z*D3>ud)V^C;M((!0_OtGam<S<8J=WZ-mNT8D9iDvVGCIE^9n>f4IwA) -0s|;fCtfZm){A4=DN9NiE%=%i8t#HQ`VS^Zj%PcL%N6~mc;+86QTkQ%oAp%&NBaVQt@Du3^dTgNAKLs -19&8V_3r!PExJD6?6JFtm|AAX4n`KrYH1*&ZV<W^{%f*E<%NMVfS(bR2%&bCahY1bcgb;d*6vYHmOn% -cIi^6@xr=(@}L|sDYH<a$8ebiQW7lOr}p^s)E^f-;#e)-P>pn1q|nn$!k`(q8H#wR#QOyMnvKOnQ)#M -@<-Bf86h4p6B)nWYP%aRAU8<sv|A_lQ5m7vs9K<ZQgRUwaL@+TD%$<JVE@w9MuG$&@KZo{^1j;zm|n* -hkCZ9ir9I9ygEZNUh2Up%b)v+{Fn^&*BM$f*QSFO6G})pv4zB44uyQ-e+h4LTC$CxFvlM2zszol2TdH -0&hVMAM@$s3`YG3xg`s#0lHRvL68r0(B~V5ezxOhGZ&v4%m|#K&-tm(6Xcd0{A}We@QXvk!bY)H)1dw -jI#PUMpn*1x>|r+^S_9qX<61hkXdG`S0G(S)>%>*IihiZshKqa~tjZi^1FvkDsFd4jD*~p44wRI?!=p -*Z=>Q1u`H`!2s}=Q{PA6@P3gI_!AmNr|*t)AEUtEd1QmCSqzkp<y7KF<#$O-%UQQ<PXhqccjYf@->BA -H8@wadrW{TXLCdRMKxdR#Eq+dMvYgp$kRKT;D=f%rYaIcyCIHZ_~JTdglSqvBFB8IxJ{-9z1Uq%>(X6 -u`dt1Q6+av=ev5C!_$;eAKhf-328mHE1x6X}piNK9w4)Qo}1#l$we1E%wwbGy*xgm3_?NBt&HSxM--I -?Pzyek30_2L>#?9K6iE9>2Ud9<#Qv~=LEA?fR<!E^2AhJE>2s7#%4|>9$de?S&r~kQMO<r%@OJQ5|=O -FqL3D4*Cdnr^(332O|Z{3+Q(X^@az#%61&)|a94_9QV$$m;Nn(kpuj;@7Zuu-)rIyj{1tV2eSQ*p*SY -&0uX~hxnI<J*cp7a}+=;NeYt>GU+E&rEO3B8@${O5K`%Bfb<c6#v*79kSOI^!5W+P6&n%?5pIAi>UAG -YJxK(@NnYI(<Do5TL|I8=D4O)cZ~cNO2=e2>dotB-ND!X94E6mP$}5`-jEDo%kmBG!a&0?t~gE_pOJy -y#J|JiAc2O@K<7tA50=C@9nvifnLgUaYzkY6qHGZ#UFyoLH!)53fSLQ3W4W;oFR-Ds=0ui{geEok{|- -HkRD8_IsVum2&AEv^B(n0N$Cr3WpNzp9$)6ko>o5d6+IA=3y8?3VXsto987fY~rYZPL%i5HujXBtX3p -	dUYNB%UtR&{@(!zXGv4-LEua=wCnQ{uG=O}D^<f%Z+d06xXW;lehaYrU<|4qctAE-B1keyeBMvOw -3u6c6b85r>sUh5RaIn!y#t>Ixp9XE?^GYi#nsfanAqv*hywqSg8Lb=QPvtqb4rd%HRUYAio&<)pU)CT -zt*p51yc$L+^H#+Oy_65qAzhp6@9E+`N)3TUmp3#_1Jar+QXbU=ALG|17$p7^5%+!M&x*4VT)cHHBgX -Y8*M3^YSA@55dE=yE{At5<3dPShUE*B+eC@(jR3R&Ke^?^VCTLynGPjvj}my}OcZkgwF!YBLPU->yRA -6u!2@cTM{O52X0~LGISTQ;S^OGPddG97lHda&>hff9o<$EX-xQ2Mqi?mr~h%?CZavjnS~mIJmfxz4S4 -FMGBl<WO@p02fe%C{Z2>3rOQ@hw^dr|^@AQf5wtFOKKBQlfTRL1d+~CVqZu%+M~BODgJz|SSJGD~W%) -{(HJ+``S2pp=Jf%8cskSyQwV6lK4zX(`>g>toRkB{ch57^(g?PnrK2`vI+gNMU{)T2xJ||zn$+bLJna -l%n)g`9O8zAR+bQNJHYSez(JaaZnX>yKM71h#Hds!Q-mz>Rq0v*TwYCWz|gu~DG(TQ`s9_YmD_E+hep -zBe(cGI<kuKVcvK3v%m-~*OL`F{%6lI@5^x{CFlhe=(Z&z6AsHfQ_GkS=Dap<Qs7?_6^MO_6S}R-I?W -W5V7X$1!C)BebXJdKj<alW?tdz9}@lgyyz+rR9u#0HHW#cLZ+2wr3zcyr8pIPOMlj2z#4_gALO;T-_C -r%EG~>L*?)q%xF$nZ&yOkLLN}6eoz3pw8Bv3GIW2D!`L*a|I^e8YFmif9HQ2ShzcQWZS2cT)V`WQ<r2 -RmGmCh=%y@BHQ501iix6tV^O#|T=VPy?o~^N6sb^E{7x3Ij&!|1co`ly-B6MskJl4wRu99ZRtyaAw)X -n|M0jx_%6O`Z}#$M`_*a}=Dpt^oHk|peI4=>`6>UEEmBJgwAGA?#q67dzo5qBGiM-pP9LM)9?c3*@N- -(z3#dgBu}iGDc|5X<DmYB3*lTp{!hpKKJasKz2Z7C3LUG}dy)NX9jN>a*BRKG_U=?8m9+f|yF^L8x9Y -O{tYPnP*A)a*Nf--jK?^3bP~}I?PNR<~fAH6G#S(i(pm>O*hcP{X)|<^zeP5X&OC9ph(lh2BB#*J**I -#vhd+K<Po3%vhlL;Ze+Gr>U$J`Y$MnevClFLI;;|Ycr9r1LQ@1c!%-ujfJZYn$!vjW2d1cmKfWj`ggy -nSDmNFj5{n@sowN0pyJYGJF1#IG7inKg+1^DwheJUK|2w3#QWu~kj-7(nUSi5(q*$np8>AsB^Ml`{3? -p5o(JS|9QW~Cu*$iyZLr?`nxB-h4ntH8x)<hbyqw{Jsq%cu_?iA5vH@<|93y;~MIa|}4K>bUHCtZ99d -m_s`?Cjl!cr}%kX;l3Z8qXV##*X8$ZU$sN3-t%0km^_j7ETX{Yb4SuRwQc%)XmXTmaN|H_XmYi=octL -Zrl=T>%-l3EY+jZttEsTJe;=c*Ql}3caPx-%4Xh`TvZa3-8i`88MO+1(;@UWD!Z|ovFok44VoGy(2#G -d<yKHq96D8zyM@=F`!J6<>Y1WLgUk^-jfXUzd!L5fmw0?&kc1vq0ET~M>?ndH)(AgDYe{J8M4K;hudw -YPrQat!7Q<b`#Qoxfa^eATI&y62=kQG@M?-4}*@nld_%35$;MvFJ>J6zXv!BrlsnB#!S~6RKXscC2$j -P{<$Lo(udMk-Ks(H6H$wDr@h%D3!D519*$DYviOMQdbZ<Sm5*n2o9j;WOoAnbiomCl`Ht}QE}=S}Il& -}byyMoo0n4eD-6X{o}kYWBcHoIFE^bu!zBc7xgx&(cw1MksYQ9tnVgmC)n(d2zoIdSZ|VwB0zYgo9Lb -jSA6e0bfoL80PYNwAuN1zTiXcsCodKCLf;I_$3Nqags3vrCbB0SDRgEz*bhK+L<5HhC&piAR3%kgMF% -Z2sCb?K7PHi^Z}F}-A11&PvWc^FO=C@q3Qm9;`*j-sI1`JfrnCBLkRIL?xGGyH+P|FH9!W7R{-<Ag+w -4wIkF7i-|kCJ&9TJ;)Ma)Q3>AnPMtXCBn6DG0rx_Fn;kCv6ajUR*asM;%(LhT~v^)dT<*`Aa387<~$8 -H1#dF{yF4*3|@`=`Oy86)9w=$Z3shh%nW2KDM~L-=64OhUO=-)A4j6KZrstCW5j&933yeRyJl(lwfbL -Xpks2q9jrQsbYw)#LZF)3|WoT&!&0M*N|km(P`KO1FfO2wQTN#t(!;h^VNg%%~npQ4&B3i7l}Pm@GqW -X_!+i-loy;Rf*$tDb>Oi$4g1<olK2c{rlkfj%VFmE6?G?3^`&B9hd%IMBmW?1Tn}5a5MqcpT~hhb$H$ --7QKKJ6Rp9k<2lcp;9e9@f8H$S1`8@{mGE1Hzr(<<(nMc$;1pd+^&q}`-X;~sC+jm(ut1-ZZef2%??K -Xqv`Wz$(l&ph?Z!On0aU|OQp3W;DIf_EjCtoI*@~~M6tC4Et<n`Ll@cExEY@+W(OcLP7i0fiK0ty^`m -Ra>J#>82T`El(!vt|s0;8n%dv0dCSL&V~p>5Q&n+mnvzaY|5^{6;D9m=vCK!D27@y)y9*T`WiI6h4uz -Iux^>c(WdDB~kH&<3Qg5N>oB4HB<18gvQCUhBS?Wby$NKVac&yYYcN`ZmsXlvb(g8s=VLTGB#+f38)Z -e3mLib7ouYyXYgC)0I+m?>P=b_Q1<D0gODGdLF9v>cSTfQdQ$gs-<t?Nvg-cDtB@3m$|s~#V+n1_}c} -4ufm@N(ns8cXSB$j6PGW4O@6c>;Gb;XiRbIp=F~Y2n5HHeXL+4&+ggFG{Ti#LpPjFY3csxYEB|z;M>3 -Ux);rL-ezY&h4?U$1hRjU46c6ZgxJOZws~;ISMq5H+dJ+|wHWhX#EWOo)31F67{R^0*#Hli~ieqJ#E! -xUOiz5=<hY=j2`$o|f<3>dHjl^eF14Flq>`;umFwyT}jo(7d!rnHuS=nSo!)cSP`7`^7=I|!_i!Z*op -DSEIeqUu1i{5?>Gj7c_ZLzy<k$S_APJ-8i9HsG)wp8k^sZN?c6Vrwr<MRXSoX3e_omI=*1x=<y)Hq%C -Q`5FIQCI<&v$d{!Yv^z1QMJH?f~JUA9Nzx*c~o@Tggq8#+xjs@%`Q*)iER8HEVz{&B*z}x)`ccHYHo^ -1A3}Gn!$=j73Ci<8*$C<hnt~jAqY4+~ypRs57jUp7Kl>q*m(|~a$QBs@{X+o)w8M))D+s6%>9);{#q> -0r#GHmD>67eRx1}N4_{g4SvzUiT1(*bgwropBg2gko{FENBt*^yz)yW9+4WRiiJPy}>B|WQ8;x*iqgP -$!&!?zd6edE?=H7v=QWDhSZh-b^^$E~;FYe9Hf=N5b1(!y~IobS}NBu@(l+mXkEwm<?`BB%cqeWB6FN -bDfTpv7xo`rW*m6UVCS1Hhbouz>vvojKJO<^teoFq=&rhr3<4&9pwCNGF}M$-C(KP>(p?r{(R_SyyNr -KrRt8eC*&GxK4;b%Hn`Z(2xy4Uk1=&`+JY6(n%=b^RYvYXxP2bGkC`QG@wx?O-HMLU_hGOnud=ks<pf -bAevLvFS?Dx=JC1mzy)d4P>@#vBz{~T=$A&}GLXwU_%VJM^Jb{-1j&S!)Io_;1;fsq+Gw|tt)f5$jvk -DhFd*fqQT9qd?IYmQJ~Ye`DcM&HZ4{b*geALA%8}wyjLTE^WuwL}pz<IBWTO_N=KyUXw0g9>!$diu$% -mT^ZU($Zg94LofFv5B;e``@9`+gf4<5S_x0@ceDr;>e%bD;fj+ut~zX8hkQ0hxxZ_R0H7n)j7UD;CxB -c(m|0yhlJPcW=O#YsT(-S%Qd>I}c+()%V}w6)9xgX~IS&pa?C;y|*_tqn8aBfrQw39y+KI}_`^QtQ#9 -wP7A79fgk5+?{d@FV}Zk0YhC(ZH2nEF67BlyB|e=y0Xv~UT6<1vjEZUwd!@XO0nFGd)eQSPOE3wN2oH -rjIIMqER(D*XY;xqM865=ar7MvFPyx802|5kuA8KD>Ow0UiSzP8o8sl;7G*7O$Shq{J&d9%{>zft*v~ -@fHvMR3O4#4kLIWW;kUt6r!j!MzYelEVwx#1>Q0h-G+`v+60?_B|K|B-e=A8?zLX#i6q5uXx`!+g{qq -l|7R0fIraR&p2gxYuJIr(yOgl8|4TQD7Y5<=KPs&qnI7f6kgk!o3>R39fE_Ealw)m8_*YAKEk?W3NuH -D)376)K=<I66&22p7m<ggld%9D)n2JLllUvyk68m+rQmF1R})3NT(Gt=?X%E?H==Rc!7VknD;x`cjHa -P@lbZN&dtwTMDkg4>A1%j)-~?SotVnwrrXHE&TR{Mx!=W?a?%vQx*TX1uH%Y)4bY8$q{YFp;Zi(9gQ< -rG(JsEXi`CApPtLheu=qQ6-!RoajSf9Cx^S9A3<7FE}emk#L}qX1?Iy|?AA0)pc8))!yC@0&PGb%SzN -#Nq56Ye963>1JovJ2=*!DPUm}Aq;Tlh?n@3B&@!>=v&{)i*Fevy<ez+gCg@xASd(^H~@Dd<+AK=pvC8 -Q1>G{S12V~7kNuxd!G|Ieyby^_KqCFvyb>Z7<Efi6)|@%yE7z*-Um>Z4dSNT@E!mu^=d-KW2eg}2cjm -i{_);~vb#+VQ}7rTXa0!vOwrI0Z1D0JJ@bj~y9IKXe!efcj`e&$tLOy3|Jx!`sz3ls#+*0H}}RX6S2Z -{1vr&*khD*)Oc$kWSE~xhshaIeH0s7IvvR}q2y_-6V}G<18KYGeOlwBQp1~4MBJ<saip37l^6k)0IvN -O0+rPCi=))V*1=>uCd;iv(^eld;p?zIMxR!v?us_crxrVV#p!-!4hz!Z!ya*hkNpjo4d!u`I0-&}l|B -isB~Pl>YC0mKpZ7w!^UJ@$NXaJ;d3^#dTLYTgCYXRHG7~1RS#8Y1g}goszw#HHg>CGqk%kD+W~1w`+_ -KuoDm7i)oE$a=4+1ov!mR`$9Yw7bT>_$7UK`xVx7Vl5UQ>j_`z?xc00mCaW|z-Qp8i+6QUFKswWT_`V ->K3;(8Mud$9qzc+EF<hzi2zw7~gYXUV9&x3$h78Y!~PfK|Zho+y3H7O$#hJi+leah*#oU%kJ34FQD~x -hqhSRl&fr7)AA@TsV!`I^k%f>Tgw6{KR~KHWly#r<>^pWVjjv!8<Xt%d0LEeQMMXSiR?f^!Lzn*HTwf -vILRD&$TW9Bb)rx#)C160qtb(PUM}d$2nNHzQ$gBnY@wQ9hcW9>BG=MDt{J0%vDG86Co7Q;zU|W?wb@ -IC&<DeE1UVl|3{WhUyiTOeQmdw<$1{EGiDpQ3^gu}`ARWUbVZm%Og+d}eu(OHj#0S+;AY%iPan+yUD; ->9LO5hArR*1&6hb=~AYS|3^twevDrN0&FZ*%pxN&1^he-re#Mf#gbe=FDD&P3?#j#BI<O!yoVfLy$go -RBsJ&@InDL=n_<iSK8-BSUEJ*L&$5j9md~WOHv?4S6s3v)`b*ma~*x+H)H<8bdaDJ|_W^tA=*mWDXav -st_;R@wuiUJ5%@lS2pz;JloiR=+ByeD6^ppbS9g10X4UpC`jv*coJpHSrXZSjd<U=2s`e>z#4if*Ixq -kLS6cyT#68!Iva<@P8<f}7`e2Z+={d1(k1kOPRNBj-lD@Vkgx+sLu(ploPURlQ;0iu>O%+z<W6Jc2u; -nXJ<>1)agItL$=2sg<gAQS{cIe^+J`!fQCXeajLPam)2J+!!M+$lbId(zDe_~0t9BXKw2!o-JCmb&QI -em3%BT3bcsM_QM7%r!d3i?v#k`EMcQQzyb403ZbjeBHWb&z8^dJ+Oen4|1#ty7F#m2sd9DGV$n(H|3d -{fE;;TkS~tyVraZoRcu_m_{~Ozvkv6FHzwM%~KaPN%)m7p+p9p+5E&DY{luydb>1|JI->yqv$)vy83J -F`QiyP_&{)+MKEc`lWWGsZgEN_5;&<lFR`O%M0Z9(2=8)`g<CNH9DF)QOvV86txtIjRGMBd6s4)iNUk -WM;H=={SZyIE*RGsnT}o7j`678TZzvH>H7Ohy#AEjf%2;dk2K;AD7t*9IbhhEwRhzft5dSool5OfmKM -_n`nUkz*^O>m8o*FsP#;XHWagVdP2G4J`gj!{wAn#31K_;P=MOx$9a7My-FF9kJ9sBtD%FIuWv!rQ02 -(uh@m8yIpzgF>It$CGsTL;$@QHQkVFE;3kR$(}JWQo%9R-2sQ5b#n2`KtJJC|jM1K@;`v@NKBQ{c6oP -4KwYZT~s?-plni(954CHlL2iMQC9eG@%Zq>S*Y=7|>=H;#rmtQ6GO_sXBq45no&3+1XcjGn;u%(@HYL -zrxEr?FP)ora+RCp}nW$!=xmNlByF@T8X<u%t1U=M-_JmVO6V+#$Rl8pKJgcG}fQo2Dh~%Rrg7iGYH{ -6X^nr;>h64;06L#A06GT&Itf6RM+Lb1Q*Y;_D_g16DAj-*xTS~8!VaKj0N+JCa@dD6dX&XJhIz+uj@F -%Qe>*VLHyTng<R5z`nTksmL5?Z<JHFx?#=jY_l!wK1A9pqrPnziGHOX6#zB(dm1@E-I9vN_fCh3wBW9 -t5fov2!0KRn<X^twc$Jj|n>4%_b6?cd{-$^k2s>Fg7lR^!mLu+w*ttE)+9%Fq)!@6gw*vJD3$q3Lg^j -SckE68iOMN%d>MqPZ4O{~n)-q0l}%W*pEGLa2>WprM0@;FHf=yYr1%3yg?Sf9NyQ5uPc5w*Z0H$6iS0 -6KzS4M0+caw|Ftfxu8~a*IngfpTJAl>P88swiUe{w7h#Ra2OC2{n6`T_pUUKbV&ySuR`KMtd`HuI&L= -(sY%aiyRpfTb~u&xqkz4@#0Azs20vS%d-lbvz4$No5S~Wr*797WMLExiWf-Gyfg`fjws_07G=2bsMNM -2R@~%=mb5qB>;Sd(!35W2TXG>KdlW=e+6MR}8(?h1}M(j`bk`ZfR>sIQd7xUod{*^k}rzHKp#srY!Y} -x=uX~m}rq<#!K+wPl_a<<iG<4el#Qy{^YjHreYCsQ8zOMGGX%SOOHbnvP6vDN5;Ug>CeHtViU0=$PG$ -9=k;<n1#X4>>yzt-W53q{-!dT5YRK<Fb@;3p`BWvRYi1!HZ){`L*h7I%yqog*|<ZE#w&VVcik0zqX{} -3!y28PW~`wv(SWL?=X~;6*$xqJ&2GPNcEGAX7!U2I#XT$-Pa1?MlMKinT#FLWro{Pcnjsoa5k^K&Zv` -or-f^{b4r7Jr-Re$2iJlusNA)jDnOMiZ$qV=@75gyDXAB+@#pb$m7W~97GH-)rf4F)0}mznp}V$b;%Z -<;Pctu#@T4MpmXb#sc{B~WwNYjzU3K?w<+hYrFLB-yn$WUB-z|5-x>$4fJNq_1<~XjNK@>zbJPW0XBe -3lBhNaeq_=7EF*2d6rDJ|HuBAyjqsG&!z969STSTlj~G;ajmYo0$<H^(&O6lER-9|bI~c&41NNLF~{F -R7C_1L_mcLa<icX44kReHLL`0DYgR&$YZ$6y3CDWp#TLPs;b`lbzquL%u5eQKnRaPWG*mv<UFux+%cw --RK7WD1%Yx)DtbZfYXKR2yf_)2Pq_}xDxdYG2zhsmvKce!ewB(dj+lpRbr)Pl(=o;zlg2*5^PDgql1J -{uNq*q|Em}e7)}=UKpRf6;zyuXVSobA&wgal&yEHyHA;P_vlI`H*59V~((%iZiMvF1^5m!BVZOHwF9{ -1SN@}?qrw>2i*_AxEiHAEgcMmz-xj4S#Vjm*MM`(tc*!AYrTCLacq*B`&KC?KEH=Hv|t`~6qPb^W(c) -vQY2$b$kGyEPO>w1k`p~luE-Dm{J*A#h3kUKA+CshUpl#t)lY9OOrYlY!ZtwvW4ao7T52<#<1hgTWD* -2gw#qzj7VO*{n;Z@Hk@Tp#<vYq;GnqXSZJN9BZwaoQ`G8(>Jw=^tw3lX()|GEMA8vu-jDJBo|TIjN(# -bHr+uBZB&%8M*sVj5?0ps4VYK(o!wA^)$=kwI$1WX{3jJM>B{%8HgSqS5nVQxws1e{c)}FNwQ?RLAU8 -=xGh~4Z*qV#+&OrRcM=s6O?JR2QZaZFbb@G6-6z-!ALu=SdwrGofR10f#p>vJtqpido_qGyBJ%$YThH -!88+Z<lV69kg%})(s8%$1x8{Y#dUsD~G3keYSmrkpiSDl2+;X8<F(2*c1M$4P5CNbNuz2|2i{|@HfD` -5U<;Ts1!W`I0AL69}*(j{ghq-61E?+t$cqIxi-k2dS|eYCh>xXjuD_R-Ka;rFp?7GsdS<0X@DTTIGlq -cC*rWOheyaw1zzVGw~K!n3HtC6h&~+8X~}FrWP=8j7IS_DKTkeQ$8@E$#_su@#)*Dm+;#B3k%UzOiHd -%=SApC=aDF!C;GzQ0B$K{5<{A5c4xR7_N99yC92QsSR@#59=+H=h6Dq<vNdoNjj4G(Njmeet5vBf9#G -r=e^XfX854)XG$&rDR<Oy&NEUT8#xG8tAoYAOQB*E_ep1By+x@XbUQVCR5dAAk(dYAeW(xWY-e=iH~5 -(DF%9!E70AbQ%N_Hyf8b);cq~<)4-foLE~dZYhP#+9N@b>K1#A|)e}jwZ!8gH{IWXvAx|oeXO>oXssg -jxCNtqM(kc%k+KA{7)ESjfrLmf;%dRNagjU9m}B|knf6nSVuOFE~!m+pHP>q73O*$4hd_tJC2+)IH{p -~$8Y7;KS^=V+CbTH#4$(DD+4alFv^)3$CDDCiiELd<l@&1R?DR(E<ZaF_9KS$IhyU(_alCRmy$w2x@6 -jD2+<1|2q1Gm@$AL#iH>1DVCg#8+@L!-l@A&p!ffKYkP&M{Z##bb+_7g?@hCC1$h8(PX>hfA%_#KW`G -pDAm^I?YjN0F6HIU0VM|nHXuV^*)}sg0|X4L7wDw!4ED#DjB~xBjU9O@d8RiTqeMM2M^{rbeC&+?3g| -K$&K7>5se#t9cy(U5+@$2FOY@5oHz`Z4&c02P{1jm7lNHGb8u1FbtpG|zW`9Vnu*v5z(#|=Iw9_niPE -p@&KA%Pbbe<d*K*w4j<_67P?=p5TkmvG47%&j{dK#3vwSwQm$H#!|@nb|AEbjZM;!5iKL7?e$ieo4W( -vnE489F!RvCumy-v1L2Ja(R%WP4r~n!e_cyh7+pyqiH!qXtl%4!I4Tjdj|={Pz3%aDGcu@g%dhE?-;6 -``GS%G<DvWu2%`;P6<uugiVV^kKkrene7p2nUAUajH##C$2RNF17aaqaCPtkDyPqICS-TRJJ6~U>6B4 -fV-RVp%Ubxz+()Dg3~~pCZQ~~LW|s1>8N;2NF-Aj<w$v)@F)dJX;<=<=cG~5LJrjBc=5L_Zpp=`aE+- -KX99W^aPbte!0z*t-_u*-e0*)<tJH?K`iuGw6=f$AA8+j)wl66y9>DxF&+2tufwqd_66qlx9BvNRa|D -tFZTbC4DK>?R?8K-Cd;z%-cJkW?o0yeK-s#JA5-_uV~!VE2hE?6-@giV~iby0DlIdU|y#XTS#jFbnhm -EyQ^DMvljdlZL+{P}>g+^$yH@W&ATO;44^v8RquNgI!(7~x%@bNqVs(7Q~jusfUUEQ%WgsIk-N?%M&= -Q5Ois$?Q8vlJgF`l^%J67!O!+1uVHr@U2zQSV38oGacpjZ8<Yk!SZ&`0&BS%75{DPO=%71vcx)CY*?* -T*c<8xxGf`8A-vFJ_>#0N%1O%-J*u#ENzOC`b`$XYExanY^c)Ck)<LIbNz(}Q3IrWbpt(s<0JG>|S7Z -gba0Oci&GM)j+N^Xfuivm*Hdt`CnT6VgE#E^mx56&`U=^lim@2x%i_)z<T!YYrAw8gEv(SV~kfC-ltH -GHir8V%@xTT?>Pp#_0$S+Z)3Z|-VXNMra%aN1IR@2<^Lep>IWp1`;+hSR`0B9Wh5lztD<<7RX`QZg7j -7o!{e&AD!B`Yog{o~)$-1Z>tw_^k=ZFsGduE6jF)L}p!bgfOdmW#O!^;(v=zr~WRW^Ap{wk%0ci%)Y_ -b%CvfAD)GN()0*poA0JmSCni8_=Qj*j4b*{86K<3Q#16oyRebwc-mGIR9=l1xx26fppio8D5sx_!Htl -cw~lCP-;lmA_9!VcE@4l5T#ysi&7-04x}2MZJtJHV`#Wdg@*vwfTG;c3a8SY5P`i}PzJ3Gw34;;F|80 -S@O|n`#;x1L_S#%vVY1+aqw_TS8_TI+Kt)o?8%WXN+7NW_Qe7j;{QAd1KZ^tu1)2-y`@SJ{_7c`)vs; -+k#ib}60bp^R0L9;QWTtu3cjEwsPo&}LBPN6RjOl!D>@L$iPp5{IU(n$!ZWZ8GeWc{v=b+kL9!jsLG2 -q03Hj46({08fmlmH#<YkW&rN7-KgATl^6R(79}JWUVp+<HAPF(DSj~#5vt^^8i@?lQCMfT#_Ya(^`T( -m_-4okcrSmTXx&c2A7!e7eM|Im#ic%S)SyQ>9ulwB1`;TFndL<VnI$xAgAENIe3_+X0$9yzalGs6>?6 -74jdxZ89)Lrx|0a3r)TO&p#Dh)8jlP#4#u>YW9>;t2FfwVGiy~&2ZK%lkrw-RR8^^d!L({;3(WYjwv^ -;N-G<(6u^_4}iSG%a+wtMvQ(Wwh0oobCi46?TV${g{05;{#zOPLe*W25Mit9bxMc(W`GQidi7WwAy{} -pd`J;b5gJ|W_Q+4MUGnrquqrv>(US;yXs{M`*D%*+1$Tr&1Wd@MWPnkw6@<M~Ga_cmOHCI9z*L*onN! -gP)<Nq5mt9*t(d25fqi2J`PRE<n7TWZ@XlW9vrxr~*9eEY;TmTT_7(@khBZ<_E(50btkWu)7hH5wGEQ -!7(eUhpTw%ZG|@U`3fBq?{`GDE-K`kBGQ<~^Qauv<;bN8H;(bN*hgU8`qgvtd28Kuy?>NHvxv5$ceiB -7ttL5Ul6us(=1$(yj5j;n-jF}HG{?+h`k5C2ah4AE6~aLQHBq=)jSy}<3vDi++NEZI+9PJm4@2w09I% -<v<MZTi(c=B4Vo-p#a$1E=eUl|Tc-V=T=V?-oJpU@N=-=EmpM8$OC;@cy2e^F)W<$S{k<^tMPc@h?3h -QUncRy0DP`?-wk`IIDDWR9?+C|qkx-z=HMb}s9iUIoAp<lp7dmZ1OfOqJ{BG&bKYA$xageO9GT`*3B( -oYf@eo!}zARWpjRr}cD-vTeZvccFFGeS6G^hUL-c_58KIPNCJ(yYEg@f-hhX#7S!Hq?;#jb`-_25%HX -57MDN=O2Zp``~HoXd@C~m?9B|_rZ0`lV8KN>6p;;SQf`Ebo40OG2&p!ZUhvzJ%p}SH+IfNN2`N}E^)M -KPB~gtDxqzV!`Ym2wED%PE=~?3*?_iNh{8m--9*pbM9JMm;oV5dSPb2)4j#J5&8ocIaI<=Y{FM-%j~z -@sTVuaVJ)2_xO>S2BjNBXhaq5#frowZ>`J|f_MMy;d7p#kOKnSlM#Mny#7-P4SPZU0)Pt?ITbe|~tG( -Qs^ldxs6Sq9oGhNEQ$+B`x_G>ByqLUs{C!tysBvD_psZ#W+i7d4z;E#^0zUoV6{<df|o535!LbFP-gE -Ho0)zlypm_G>;_e|zlN)N?`X33%RWnR~r7x#3|GI#)%_M&5>0-ZcO-*Fg|7b%^H>LPOUo9bzd$tP+~a -@P5D0G!O6J7n-ieyQDi>&D|h0U4i!%Lepei?B0$1a2fS&ID{k2BkVckVXfDYIkq)~d{-$>Rl_*$!o+W -Ed<9l_p<XQd8tuZ<aYG>zOMnm<2nAUMow4?iQ_YH`GuA86@!}G4#sbzUEXQDY<wEF1(6$>66|{!7T+k -2R>wF*ckzW-ySNE&>88?jLKjemfma+yvsnn}r21;rB4eu%)(2i{%<OGcWDKrfv9jtUugHCdP=%o0ahm -8uw-b(sPO$BWg>b<$BS!lx6Vg2LiqeNK0p&+ps9Xs?h!p0AaghM#QJ<N57;Rq#8X(h2mCs9XlUEIGVq -{k2KFcS5Qdfj3h2VJ7D0LbptU7}{`Wv5)C5L(QA27lXPNK^1<TlAif&9J6?qB^NYHgvd;<yj4%s8aH! -n`SnAqAXU!Cu%R5n)izv(I@H}@`?JAe4=P{>!i>tPo7b$jh;czs5|8lezmG}Q`hvf%~$D~?cI1>nlR| -@QOHq-dlbpV^g$ZM=B1@5PN-daX}XgXCM2DtI)^$*(XWsU%@w8}X)zr9C>U($S(2~FKIlAycRV~64@x -5&&fh29qbE^6`Ag^-eQ5CBNOFbzs!CNtko2n>^Cd`k;%Jb=`z|ECtEjx)Sf1`(mCQcOyQ<-W;a$}<I8 -rqd*f7L2Dn{o5NPU(-FvoDuDs1X7&nnDCo>hcym}gbP0jy`ru__60iDMP@r|wvV?eNB$smqzs<w_Xm= -=fFSSoHvi2^c0#D~38&C7A@_boVOa9lalQ_o|ryzm)*2%UVJhnYVaL=mW}y^Aj4Sv78~^Rk_2ws}TMF -=v|cr8Xr2gc?@}1*?T)ie~8Xi$rc)8YKU{yaP~<0RuR`3zEwl{!tkx4DK#ve(I**=1k_N+Dr~mySoQR -khGUh^8Y#yrB!uo*<vv4RRmm}>P-bN}4fngrtLp8Bl48-Xkpxib+F~kp#pmBt3+d!8)h?YWA{Kl%5uZ -N9y>w9e#WQYdm;=hCi+*uOXICmoK7iv82#z5L^x=jyoDKbe8$FqNUtJv^kK3KbTT$GGJ02tTw*tKf>A -V-s+C_x8$k5=PC5$#{nwp4D8al!3D!7F`Q3m8WfNvVP41KB*Y1IR$;i=mRm<j<gOOw*fvq`yvURKxWk -5)i_0LzJw(@}$_T6_z;;UeUJmJgty<n;a#rBGzkgX(Ub6i;6uXCy6*51wE;{k&x8aeR?m%<LYYA>5_w -ODI*mM%(@P#WkfoR85t9p%52WSt<Q@{BoJpK`lOB&j16wliEhmRkY`!SC!j1(`b}<rO~KMs8;R1h-&f -yltkocg%51fGw5hVX_YF?@LMfgNDXL;h@;i;HmW&}m#s%*b!Wd(an=QO>R^K9$K*;iZ<C8F-RR=J2Y+ -wE-`IK=Hx>Q@@b@%)lc)8g6*IVY>SI57!PphEvjwjVu`S~jen_KzUXPZ?oi?_uarqo=Thx1T6U)P{dj -%0dh6$GjZ3|=U;(`mQ4OI`?wU@s##IEh!uUne0?;mQ{K5?;KyWar&SqhAu`Nh8$rETg9|Hx|X85m-<E -*iwVWdA?3T7SJiX|)Dl7>wNhk4?9QNz-jMm~O&ewB0;vl+8Q<CAfJrSZ|e*faaS$I3Lo-AHcez{dV-5 -?6={eEWm!tHS9NNky>vHhhHX_Px2byj(&Se=+}LNK^*je4&))Mhr1xhJUwIrGXn>)`TLTgEXaN<-j}l -9LOYQSBT0|GSNjI-x4&j#AUfxO_>Qo5tU~UFx+k+jeuc_z3b64cx((JkKNOmNLD4KKE$5U2=ulWfIfQ -K+bPFpP%;J!+r(suS%EnR&*LNeC!k(t$qmUlto0+v*ccI4L8O5kFaw0?cLAGvnO?=`T!dvVbLWdJWC_ -_ObIw`yb*<Iymcg-ql5eti&#ax<5F(PH=ZVFYgcSvxH7l#D5_^;u?Egr`l^co9M3<@xhid2gnwI(~Kg -Zx4TrFLj+3-V;XjclZjJ|hr?VI$F}k|D7zu1?~eHVkjKfj4JJXbbc3&=zkD32pHuuQxn#lei2+Tet>8 -Tf8+qw8a4mZ83kfG}3ZzFtkPNzlQ|1_{or<7LW0IP=mzv(zsfAvw4;@3Y3Pypcb+38R0DG>rDM?Dx5{ -^mSiA{vSc8O(qtfuS;;^aMae)GQ<H%##!(;(a${A=efid8Ad91huQB^QjN-~zSBBASFrKa>?fbQ)@q} -^aFt!{<vS=1>hd&;SkkDrs$>Pw^NEXD^Dv{U-ArL+=7|7zlU?7W7yP!NaJe0*J7lpED=LRWvfcxf97U -XM=VmR$JGPa_rP!`nn>dJoI`(9`|hnCjye-g?<6CN9x3T2T&p)62*=%FmGD!3$+#Q`If#fhYO_9=$40 -MqPAtT)RLnz}KTMRPKi1v2E&SQbZzNTuPiEMC@KsPXpCVp-Hq9ums}NAmv|%VKa${7bPclKf%BvN+oJ -jj=3ln=~wz#b3zmK5|Jci!U$eu`C`yyRGozSQel`V!3w@iDThQRTg@YeK1kC)HaZ%c5xsJODd3srImy -lRl9d+APdBwmEt1ZLVE_iSU*u0CRA^K>;v5N90k(jKFL2MbivKewoSYds-Ug$oF2R){E}{7?foPA#3E -`iub%JwhTs*6VZkdbhItiD2CrC{3SL2-o(x`b$Ov3P%^w!H!avl!+MWzt@#my@l?q%z==>K2uE2_-eR -X^Q*x{;<Fmi}ms9kBu9^=5&+H!1*%+>7oa&c(|Wfyy>S&`|54-8%C&Mfh(|N-Ll$vQQ!&$9TK=Aj -MGrekET^9DNltEz7LLVaiad<(&>X{)<QC~7J`{I*7ydbO`2K+WhDQf31*=OH27!1ERZ0&%~d$@n}b;( -Vg99H7S)5nEWF<w%wjGHzDt8yBnNmr^A-wbk#1=QbL`B;u`F;v{XdCiaiT97%K|6rWGsupz+%Z*7C0# -l24=Y8_m{@9z&y!V7Vr069LwSdXOrD~aV!fgWq2%$w%=VE%Yp>kH^s6TB8V@JWf9B&2eB-udU`C2JAU -_nCzgfYF3Pyau&^$TWkC(Pgk)!4x-^yrN+U9{@PWOe;&ex8l`5&3Dvb)zMjSm#NY_PMfQ^pE9z2UWDC -!HKx>HDu3?XDX`;F@EMFA|r3R+#^o4DVrF7Ee=i~9@wxwg8vZSeOr{Cxs{AHcViZ@pS&2j0wZL}KYCI -#<X^<5~N!Q)>3)r$KkXnLYLehcUwOr+Wb6mxB=fKTbkm2wOj?0nSg?<uQ2>rUPJT$=3KK&?{6u7^4eK -<nO4<`JxYnz1Eo*{dQ(s+^n`y46=)UJF~@nGyZaBJN|NJoA|o0_o%S9x#&>*2Comjt^+1JdY1N;8IC{ -FMArMF{)2RSeFlB~TjO>)GJszOe+jhu;-3N)LU@e8pv`YyOts3KYIzgwB;&7uetHlSN+kQbT=vKy=to -b{R$&cTNB>)XCUnN|p9!U3*B$)DWH<kAqCE8*iRhY)F|6?nale|5{=go!6!+@!hYUSlul5n1ppS|Rf@ -Tl<$uZrfv>y_RH7Vf<YTES(148erFc^Iv_Ny{oH`|a$QT&}zX^-*Sdvwsdq^e)+(WHL1XA7W;$5jm~f -WIT)cc4`_9!<9G9P06jQqi>7$4YP*g~hVu?>l|r4O$obnf(}@lBrZC(T@!rm*}wXy*jS=Y#%d0J`5UM -8Qx$Lrv}Y__VK$^dGwrK;PZP})3eFwzc;~b7M`^Ue>qBeT_Y514Af7ahL4<lIoFz2ka9P#Tv<~c)#yh -KSl15_3Lj}z;$+g><mXS2dyP-a<8f`G%hB#UjT^_+(b|$6k$#4{gqIS=y~|tF5?*13>8JZ>^5}au<h5 -en)|!>oQLoR>o|&R=BY!dchbqL$&-3DVZ5_|<fyy-2+IstNv%XSE$C#I8)*)=5a*cB+=;~GS2D?QnR9 -(5H1!?~=PRuL43~xE5Q}LEj%DJ8~NonjO`n6>Y1{#?3w95$4o%FZ&v9pJDPgJ34CQe36?|`wZHv3ELA -gUs^@P0g%>TIq1y0Mv_n%7$OpL3=e(!+<2k*GO~!|8mQWW!%~aYS6Playf6eZ*iOdDZGWm8Exrf-Ilo -!PJG+U}2@Y=?-~S2@jLCt??Y<-}qORQ#Y+DeT?HGQfBM_#ooIBL{)A7<9lF$QPIKFLem@-6~h$67mnm -0i~@n8C}=(qWe^a7h8Z8-6m*~%M@(<s-rX{-?D4&~m)TQ6%tu*jcFWAlO6$;g6O#lJ-T(F3=bT|cFza -@|-|z4Ly$9CpefD#$z1Lp*arRz&LMFCqyH`f7SKn9RJwIxL`i^$$o*Q+q`i@%{-IJm!)OYNjbKeqmkN -S>1Htr!&e^%eu;QfZEtv<?o1>QSFy^8k$ddH3tz9chO$3L3sT$$+(0D)8RGI!oA<sK(huYsS`gJdN&1 -<BJCaLba|vNTq12zTI!cZJPggE^7?2hj@J9}w&^(;0;}T*hth%PFL|BT}V!ico?EFar%hlOi4aP&5FX ->Km6zO?6UF_1Mxxn%erFh3<~MTqGb}R|dwG1p5zcjs20Kbfy%cvM*!*O&iqHWm8;9K`9ZHsm=h`Pp;{ -Kd$1P=cYE2|VUf+O(>lA5I4QZMuN{}vm>XZ|tG};u0=9CF<pCt;bZh*}ea1Vd2d=q6|5|nO1gV#Dys- --pz)}?Te@TIB{JA->Tr+_(pzKONx7{r6JA1a|g2Coja-p65aY{+Mdpu`YX(KZAr8Nwb%drNVc5FMl{{ -;8hN$zij$3aE96M|+L!62@Q_&f$0%_l^c+%nsC9@q}R2EyLr-ps&?37V48eeGITt-B*M;u0A|1krG)h -B|?3;zi~@v&R!b`|M{x3)P@)y1-FKDBL=>oo!;-=e8*Q_R3@m+)o;<oUH7)#-GTOiQ@rHl)5`g-IO4{ -<UwB311Hp^VwCxjEnv3~Lx~|mP)#Rsd4O*2EQEC!7}t2+TZh}jB71=ai31;en{)YuUGNy3uq*G?(}<n -;fh2`C;;sbeh-FmMB>J(EI6Bzw>$EqzrZ-{-R7y(4iaM!1ZY40|P)ii$I<6=I8>-IpqVcYVs_%U&w0d -Keb!4)n-!Cr0GoG~#Qlk4_N=roo`!1>p#BIVo3QlpSLPVw8SKejqg}N$Qk3^g^ektEjlNA}Eh}LjLw1 -(Sj(_B$OQ1+gh8djZpsKJz+lA7u?*U8=5ZrkW&spNfeDMll`-I$t+UX9!9C=_}%bf}F|`_=M2qbZ6=C -hlyf*wuSwdFtz?plG%oKWVKVpB0L)QeTflsJJVKQf@TBTB^g+Aec5KZO5eVOmDqKB840G*gBR~+uGG1 -+=MF?+?G_7A@61YZuZ6qdjs#*6S&pN$FN}ri+6D)Z?~?3hPnuIZA7iH-X5@hGNtSeDm!ZrbnWigc_L# -~$Adc5I)%#d`cIrAkc-!T{!_z=an6~8N>W|5&N;`*=Uj5mY1m`lFCUILXlv)3^YLyo52DGo`D5`Fe-5 -uOA4`^gh>=y(mwoBa*z1_}mzjg?*VLPXm??naNbWJ4wj_y{xXeM0<Gx|lxaO=9dj(2tF>$ugIGaIAdJ --FH9i6xo{-nD1>aGe5sA|3xTlDJO*As3eV2~`MWKYRj$4zcu=kz+4xod9F%&;okD1sXadJzOUB$NHA$ -mw;W*`9LWu*ZyxA(*=xS%lV%K(dIrnXhvW^`t>>Qo^j?&Nr~@IZY@kGgcKx*g~msgi!Td7lnDDZCVtg -Wb8NXG0VC)rjbP}mNCd8G8iAl{3zh?C`KhhQFqz~NsBhB6i(WxQn-1od<PKK0Yw$+u>!~<=5ywtJ?2_ -0Ih5_OUF+&NgIY}ep?*ohrTdlzD3?Xh6!Dr>Nl-hbU6oXaYYrSqr?k%srPjXfR@81W*xJedI(LUHLAC -(-B}j@VLGE~;J28&yBOQ7|e0p%+AieqoMzg^f%|1(37ps{k%NbWx$QhH^lU%z;R<>oAD$M(-Nu8org# -juxyyKKwA;|`u>8<Ry*SOanMpdS<^<QPF!-!c#r&tvC@`$5cBis6vb4lG;YJ37mcJu->YUedsS|D;<J -<e#4{na#ZQ2*!0#i{<|%2hz;?EfXb{W$1`%6|6~@>$3v?l}vY#B~TgQu+e?=<hm+9bcYXI<cXC<{Dz| -eVXz_AMIuS;<iAakP<^ldD6ua%f-0zByKN0S5=}f-9p?$1>|EZ%=Jm3^glnL9BVXQuy>b?gwv|g812} -S$@2`&E^4^gxp{<P7xNLgt~;m>c6($wRvhVJ@8a6?&{X)Gkas5%=k64n$wx|eo)BTl<;8PmPWgvY{yW -e_-w;=wtO&B}UFKu`_SpT}B?Y;C+nIxi3H$9aR@q{sz+ARLG=e0fZxk-v5N|&6o0f^urIy)m*loU~aR -*Zu^*U}_5nRxo+<e?x`ejPv)t9~?G!YUWCg+M1`m)F5t-wMs^s9<OyOwofL<uQzyRk}Nwp=+7yhndmz -F7J6Swd4R?UFD@gP*=^7M4V}n=eK1IDP32*tnxFn}~HX^9g<l-+pSY!FhF`v@|M;gTuwbLWiBU{b|Bs -$8hC<h_PB<x(=&nz7^&ZD96DElv2}|E)g4OeQdeJ7y2?RRjgWZ;`CcPn0*GQ7Kb|&1V0cPXngc{<%lm -tTK(N=I3_OVK2^<KUy751G6qqyW51o0QyIpXH36dAJ<%UJHKH!jkG%(ltGN$tpu=N|2yxmQYSM|YC=h -ACJ}uXW!u<Ig56(NWH2}qbi^ye}?BjlziUpYG`p$AyhwVwOh>a4|=JuC&u;Q4>-4xZg!T4427bGf(uP -?jGvm#a#vPO4v(xsBGi^Fwog}}c3psJdn%C7@TzA0}1Udf7!tXyaBBc%EDh}FvNn%WYbp_wFEDJ01<P -qS5JNv<zM39(LpNEqx+=iMNxNTPW5qiY`(?Y8xNNHUC+O4s1q%tkD;jC6hIMTL+cPHiU|z0^$qg>!M_ -UwY&&8VBcg%`U{3<$aGR$4hY`TClMmchK#zcagFmQKkI$yTro4Op^UH7+#?hA#7hpuIOo_2G_NJF&1K -vTwiIjz2{uf=zYu#Jm}gj&2CUGK0ofQ%*aJ@a}N#vs7G1zh)`=p`A4oeVGE61aa=B0&)wn*JxvrFT%I -q<Li2?8wa-!??tQpT=(^Afod6h!>#$hSO}|Y8{j43cj6QZ96#VV<aeqgS`fcsQs+#sVtBO*U>%lZOIi -2XSzE!J6i(A1?M|`B*3l<lwzi+2&XR{5`o+)nJSl_++ZP8s*QuW(z_mB7}ts+(z3{70F6@jj}K;wC9J -J$@I?`Osf*7oBam7&H@tdbbSwb*Yh2)>lPo@!3M>t!RABujRj(luT1(h%`(vgbAzr$wSdhb<d7nMpT_ -vVmT<X@u8J;&wCHCt3LD#8)3vNR`yPo_Yd}deN8HoiOsHDdN7ch>up`&a_HFIj##+f<t>p%Lu?<zKvr -#Bzkt}7IFW#bm|ty=BSCbyg%e-akWWYW5ix*nqAx<668t_o$5*snJRUKklLlY?D`N~iV_<VG(DLLDtt -@JyHH40glOfmp-`c?3kA2JaN8Kiogss{&EIGX8NB4Cis4IKfv-3dLjrLP%AK!J-*BCL4@&GSIw_thmU -Q&F+km!0t#T1cL}jK+ysuiW1rGKg*OWll)WFCoI=i1BtvY4OTeUaQIJtvjaUri;b<P;Ab5Y>*DakWt& -Y3xDr<U=9&2BW-OCLU<?z#XodR=6Ejr5AgOVT+wcYk@g)X;CIM&vkdn$vtl?@^x;h;8L*`m&MY<CVLF -+Syy`-tr--($Ny-kY3+Z>BExdXY{t0c%RX8`?#vtm_kB|$NK0?C9KR!kCiB={V1UgUI~@8NXXtsLK=P -P<07GHUJ1o{B{a50LW3_$=$uJgVw)pmQ(dkf+DWoBW0<<nH9%;9a?gq2kt=FfhVx0<W!Jd;*Ca;OmFr -xcl%s>4s0gF#Qj?{Gcf}Gsp|N+OaYgN&2eYV-+y=)4?WJWMU7fJP>C`y<ecT<P*NGzhm(V}$Sqfim#Z -tI91kd?4Ca$uFzAWe6u+!Ab!9%Uz(cDX(bM4hc?2GgZq1mtgzA9H08kA@+Rp5GC$Qq5K3JOst$qx3@; -$ohP%^_ZfOY<hbbZMpUK}Ri**y*UE!L~-T$|kv@8!6_^r6+75&(fHb*}6atE4TT$Kd6Z2$R(_*x+40L -$9B<UYgBBW<$C$17@9_Ri<}c=3mSa`wAt!t*ye}JaCH%tm@X)b>{Uf#kv(!oSNjceAb<U9ohX#Iwp(c -GdLI>~f6YHxf?h`Pm3;+P=gTpSah%tz>>rsFbf+QWqsTebKkb}K6+9(1w;eCk%16A)Dk(HI!lWRhh+; -L2o~t40TY?wLOkbKMq?}k@uel9<)WZAJb7<bkVEM}^B%H{p5{Jwv>0C|o-1KE*@Db-tMLSZ{D)>L-Rq -&?PC-jTeO53d1MnFA9QmxC0Lv;FW+UWk6j5b^O-&gHPQ75z<;daZW{vj3OvO}dklqv<cLIp;ARDZ^G1 -QL?WT32;_Cb{o*?S|=l$UTwlv&jX=cqq)FnnRx-`r*)#4*TqN^=DnR6sjwQAYoeno$n!QCnJShs<Y~i -6n06wNnzx1{j`v-5ucMyN4CKFqxDA|N15wA*J0OZ$Y<`(Aa=Q&aZL}FuZTaqvNw$&T<^t?4z}q`#`o> -#9Q(LyXINF7apww+$!QLzIeg@t5PJu)PV6#io#qhNh;Xss8#yO5C51YEss*r<_Fafos*ey^8&@q&L$H -!Nm7G_`$ZF2(X;5n&RS`Q*7lk?U(k{|%RaEV}i1B*vVf*(}+wYt#jVOX@ziL~%J?x7wh`lOxPIDdR*m -aR}>TEBhiJ2e98yI?o$cpcdqjimF5ML<d0HVe}5uYh!MR{UcUPhyjK`yfajxR9zp2d4M$%yy#jwp`yx -mGk7FRUEzh5Se$Z>(B+t@K1CVcuxGV9VYU0L&eGbnYI>(lTpH<mEeJDd0G6Z=ft{y>g*;)Hfw1a*n~S -O-XV4bGt#D{BKB00cG8=Mnx2)Nd~)^bk<4N*~MDe%nHj1^w~*`5g$lzE|%q(%FsG6^mhf&g%C>Z7AYy -|HVx8}rITXYcSvjOJ!Ohlp9Dq`T+q{-3wkzjfdO35Rd7L26BqOZ7Z3|z4X$|Q*j2n12dIa8*Ztfbm)C -vd?Uxnbk+RQiZ&ql>CFimfsr^1N13~$K5^z9IQH-6TFCj$?;O`V?N*hw7ABxn%I^`*>io8||>y3OAR) -{F97RBTi0;6YZ#gwY3)Lh_;C4H@QelhgM>!dTn43uhw86<rz%&yXB!VH!U!5k^QCteNGPGN?KYUE2or -I&>{Sb9#F;nI`B94<X9%%0Mpg*jSUBh0bV>czm&#Fv<)rNSvzDiCIzv{0CdQo1mcr8HqqlO_vuhBQ%_ -v!!vuoF|PEW~MY$nAy@mVdhD_g;^+FCrq297v?f4K$v$*JWod9H7qzuXXuT;h7T#ycfty-*V5<0x)#= -h!ivu`(!0Wny|dDr!ulYre;3wAVcjgOPr&++ux^HRov?0!)gi1xlkhTOt%P;4u%fe)<_jxix|AlY&;l -tXswiV=U%EwjV7@3t2rDMzQmC*VgSD5iLdr<j2rIrvNddx&!Ijjw2-Z`Aeqj|_hQAZmT0y_C)(QHBwL -#D?tU~qLo5G6aG3oEZidA=Mv#>(xh4j!O1!d@dkX*te2-Xr|?Fy@1Sc75B6;^Bul+uOO0P8ei4S_XYS -VLjGMOX*J8X>IVu!aija9Dc@D=z$&t`XL;um%XL3D(A3SYu&5Bdl?-ewVADoQSt0!Xp{h4}^6ZtUHBu -2CUnJbvCRo2<tppH;P1p=Qh*rWSi;oH~I-3)d9)U%3PszR%`SdtGMLJE;KebDK59kF5yPMY{ex`xGWi -N9FaFfR>3?HF3mI2mqNR`YeJyWFII^cB&QT)^ovtmF69W9u13E^#pRUj5^VHKR$PwCE<KHY(-fDzvWv -m!H$!oGO?C+}`ps5cHp?!fjedoS%b#VJu|_|e;!+~Jn2dhQ6qkJ2CD!P7r{XeOc8N3kl_)L=!evRKaY -U&?{pcK-de3+Ug`j-Bqlf1274dA1PkShA+Nse$uMKgZp)#T|1G&@aca6XB+O5%V(uNfM=&Ew;GN?PjU -DI``Y4{E$EAQzd-MvO#;P}EW7C0j0i|n=KKJIT^KZVt<(Uk}Kn@YtM_Gc+d=iNR`nzE+pK=f|;CiUj$ -p|!ZYvVNx+f{%6ijM3PK5K;riWN7UD+n=!Ys*-}nMElsglVj&G8NT))8ihM{YTKW%f8?T3W%c^&D-Ru -aRBEd0cZwNs@ERYYm6G|M2&72I>UUz*-nKc*g;fjk_>f$8BmH+N{dXKyKJId_@=L>boW{Mb6*^ay>yY -nm<E14!V}pM66O{a_^AMQUp6W^ME@`Qb@AZ!F^u|kb)9rpW%Lg-7zemv0wW`L)@r|$Jyv{o4>{C4CFS -V~@8^D|Jbku0AfsW(8zI%B{nU>snNCkVt#MYBpO0Vm?(vOKClc3+BHU8xRYbI#QCu-JA@S$YOC;B*c` -#ScB#P@p=r#kh76`?ea-9C;zJ_z-+C)9d53{^T1+@pbSxpx}hlkqXZeu7;DZxg&q@B+bR&=9-sgfsS@ -6J$zcN@SiQ^Awr2WY&^dM`j(F4P-Wu*+^z%g%+RInQyIcgIXFKMC%B;5`?~i?^(LJ>HDhJ14D1SOuga -)p7t&gDh@Slg>6`4#hsCjN*#nW)j`LLXP;`MeAm8-eCt1>k{<h}pjWMv^KzYpp-$GnA?gHy*FQn_T?D -5H)=cp2cc^@#uj5BidZ$I{z3i1Va8trG)zyy_Qq)4ZSIG5V;V4j3o&D(RI1QBbtMMhcdD<p2;s}xnW) -RFH$R;QxaJ(t%rYDtkPcnna3?{QHnO(^YB9o>#>jKH7$;&z&nL0AHWNMq&ja){L((h)1R|)pM=~Xuqd -<ko>x)ATp>%rTtS>3hJcXf60%Eg7C3RDHvnTiQqmQ=aA>=&^pJNz!1fIjski6zrA8e3i~bjTlc({#q< -waO-aF^GDnBnn%d9sZU{Sv}YkZj5G4YEy^P+osX@8H*p2(W6BbgXxZm?V?#~WU|(#cb!>uF3^{xX=R{ -sxAoMbeSyA7y1B-xB0qThV6BOd7;9AZu0oyiLEu_m=Fv}hL>y7-P<*Sco2xq42Ol*1%I5%VWVgpiGdJ -QB5e3BYO-!ZH0dEJ28}Z|w&X>-19hT;Z-BpD;m%n?8tJ)#yZ8tk4e_Nk8+cna`QqPXH{)IHfeq%du+K -3<bwcA1HM*O(jZwILx@w3N#LY@=|#GU5j5tWV=$2I!WPs9Z5xIG}(R~r5d=aJ?U=$O8G5i0JnRl;#WX -KPOs+58+AwD#*=ljk{;K6Xx=NAC7pT$3}MNeA~#%*2=yE`wbiO;nuDq+_m*v1IWTuaQZ|R&;kI9iswu -rOkH6cGhw8G4~hJwU3KK!(J=mNTWAjnwi3<AD`*&PKD`Oam2CW1XM9IsSs)&s)b*3v^u-YDo*|`^Fim -t%!o>9RH>@58B7q@tkyRrHoc0icI(A0Ac{h2SsgVLTsP7bs@8Z`zZ!d#T$jQwR7})58njk>igf=#ayd -fpGmS@z;$9cZZ;urDxT<}tjn!6tGWI7-eqPb%eQiZd5V_tWTq6}%+t4cRlUy<Ub%kq1=F~Q#gvR(!o& -Jv9+Eo7OCV`AuC+?(B_B7;ba}Cl{&k3!HwW(h5Mc}e?cE8-<8FQ;00~ofp<pyTgf=`dHh6aEq@ddI`E -T5p@y)U9rH6=Duz-sB!C)EN(*lk??#!-J{W*mBaW&Re@{E}p1EtffvrmK|7sK;b2HIArcDsAFA$-W}{ -)pkNTwAdknJ9#jAc0~!b{#)9Kn`y9?AoQ>a&H2gvlk5lKu?dOrPw`$V-luuqv&H)i^?lPkvf+q9cCwr -z+-9RG;K!9D$<=MFvQ3Qah_JSC$*6Q#T@BDjUdC;MY04Wa_D^=NNIEtp7fV!Aay7~PFs^kwXKv8g+pS -6pV$8tY5gUPv(Ja{pCCdv6{Gii(3UN2iP<-^Vj}D*B;mJn`df*l$Cb}o^WelF;+?wb9qdA_rvaFBMqk -FNNw6{bZzTJ=~??NDs#w~ML^uf9OFI=BwImR%XKaG+m+v|v`@52t^yN^@bo(4(y{6hn~A0sL$xt$b2T -2j(9w0lk+Gl~O)vLeWj>_L&!g(67tUB-JXY4jkoVUZY1ej)Ez&T{&=4|-wc<NnyS6SwLH(*W~~j7%p5 -nSq3iyRYj^*iZUxf&N)eWpAv_f3nT@R=XRUNyP$c8P}IB7b}oRD9Du*n46sCj7_*SqXyT0Q6|z0#U4s -(FpX)t?{C=+j`Kb%10Cmm?Oiw44uKdDhO?vmBHdo>5wE**6@8eVd&lh^@OkapdDL#^R4W^;I|}__bA- -fnC#AW=#dU$H<eJOWs{#j~QEs!C8|jD30&S*LDPps%4!4)%((xtlr%L_sF8#E!NeL=yRQh@)c4eubLN -}~Lll6ChBkgPEzFc;9?Qy@S(28AT#`l*rU2hmvq?hjVO5Gi;|9etUYMSdz<Q$!?1E{F#D=y0d?vjqnd -l-prx*ESM3JN=$n#+8@N|D-a6AM5%o~x?YeEmcZDz2bz&F@T?uVSN~v26HBoMsp;e#7ZEaz&6>nf#kS -cB0yQOZt^i0xJEy!c+E`8=-%6`77E2U6)cSddequeI4KTuKM18P2%VfpM3|<J0A<7G|MZ-(QnClADds -vd5wJ_F<t#3>;~*5y|h9;2Yi21^6qTTYkE=I=VC`|4K_V4O29Q4OS_6MA*s@ulk&wCr4K<Th3~o80Bw -oBbS<tF>+~>&C3zA1BICMNlo=?X{=TYYmoFb4;5x&*4ab(QeNcNok3t*I*aAlj)bypvK0@Idc;PWoBq -B2Pvt@%(DCQvjUH$xUZpCyGiWLy4v{GNTkYwbV4z8^sB5=w1_Sg<p*7GDjiu>+yEE~;i-PR-zFP~mlp -7gV0-e?BxXLZT$TlL$klBEwMna#$yDv)Q``@Ts*G>S6r)!+4$*icbX7JCvJDWoZqs93Rg;LlpdVz@xW -eSNMbMGllK-Q*Ppnhr76%k`^Bsw3f8QGqa1lKEDUrNow(Q048&QBaM@Dg?F3sld@y2BKVyicVIVj}mW ->Q+Oh>s{-8OTjeYR??i4zME%-xI4$=M=*Jm4=9MP4)ifo#+g#VNS;8-ghzP0CuYD0~hGj^fi_~kdQ)j -HkrXA~J@1x%q5wXv4iAuT(s^|nVKF+P6&sl+-m4H*ZaFgEZO${f@C<;km7LR;HqCN_qwn4caXCym?zq -GDd;GP1H(E<-(Lv!#*k)M9``HO^>4%!zxt?43%DW9ev?&{=>)sL<@P23c*53D&Fthte1OWpy`FlU9FG -*;(iPK!(;-ns}*em~+|m|%p8vN-xRCIuA@SkomY+W8nNt>l;XB;o`fyIDumgz_NMgjJV#7n&mf!&NIs -39ChUhst#*Tw1Tj7-T2HX$0!V-TJjgxK)P<fnbDoJS^YU^!K3dqc8iQInr@BUHcTugK(EI2g@Scxj;T -fzpab!m%bm$_&W&y9-6JdKeywoEN8GwIQ#C_Y(*0CZ<aI2clWAyV7&y&UjMC><!COaEJM?RvWcMVRuN -Ke>w{I2>_RICUKPT;$U3i(Wpw>TF#EP^G=l4WKLlx=WTM(6XA225Yh}c_)YR<h9dS0d)=dqvq5{c=RS -7*q$*!v8R7LfpXqiWhU+POAP+F0ooygdoTv0j#ky|SOTcGb&1T=nG{JuL-?tx_1CYRYRL1>sl^k}s>I -^b*IIKl-np?Q>VMF>88v?tkaa+x}wiWN*O;x<p;A^H$z&vU#Z!q{%g^_v?hnxMU_v~8*9+y9QG(3t2R -r!>#%r8v|wOr-_F+(h#|fn&+&9^w;8h_qD1?}_-uOJ!vadkF!TKqO2widpgvt#hTlDdJ9#pzNToG_t; -Hsh4t!7&)#Ky7Y?5DS9fwG)-8i&c8b46lGa$DW}M9@KR3k%o0z^e_zt3ati%YRXN26NLDD41Whk5@zB -&on!UuEmW|D6xkid=%IVJ;M8nZGY48^`e3&9tS-fcQCmM#ONU?CEN$Th`VmD|9rRs?ot;2GHiHTr$>0 -2yTCY^BVq}_H8R;>^=a*0Y<9n!5n7aeG#vG8&ovxV?@?XnK8&gDMT6TDXG4%BbQ`Sm|-R<<+PecSn0b -N{Q>fcV12mKqSZT)dJ7M4>TJ)__<^j3iyO2@M(-6%86c+C1Zwn0Yu-_`0gd<<*N#8Z<JzG$5Mi{u?zQ -o`Zx?G$0CnHO{TFJ|kHnA@tca=|OzCz0f)3tp(B9Tnl1z4ILFoMAp!u^VZM-XK3g+jlG-!Grcq;e)Or -VqeIq>DD)<(CA!zEjB7n*T=RXCZp0=X9dU7rj*fjoM+buc!I}|ip5pw?nh_mO3FTik5pAnRM7mwQR3q -xzR*m@2HdG`2qq%Ct-EFHzeBMhn;^SVb5%0YU)rbYZsv0p#QH^L;R3k<ysu4#hsu6EeR3r9RR3r8hYC -42=E5}np@l%CRZX_#5eC`V|)NNfk;>8QlnB=7#@h>fvBYuuU^>2A8N8Bc~G)(^$<%nBU<%r-!FXf0S| -2@hPFI<Ik#C@vvjh<f05noZ1BTBzhIU;V*^C(B$eDP|PBQC#8IpSDZ$Hs`OQjR!W%hal`32mtz@yE}w -4Y;$a9dV@4&(c@bj>uIl8?P`~JK{2E*|<??+4#1lc0^gm{fcHp%V$DmPHDogYerNH=;}2iegVB3ms}G -YTxpFp?OJL^RFnj^q973(%Kk9bh!_6ir5f>xi_KLdBB!fYjVRhF7kW)ESB?1K#owwLQ6zUI)re|<Uss -K|OHd>5sX)iAs716XY7u9tYCE=jsYOJ%Hq;`H5NZ(-pl!8?oxRi|UibUeBDSWdqiwy2O6mPZ#fW8Btr -)TR2oVA$9WrBhlysmdeqAx*f+od?GcHq%Xo?rQHx$i?KmC5qh-ioZM$L#1Uc7>4#5;Zl2CZmD#K^BT& -4|I9+tQ4Pe41-U?A0RiD``fAmP4T#Q7A)HH6uc4snCoV@8_i%5w6gTSl$xTCe4VqZ$j2c>vGMAk6vu4 -88K#4TbdCCQJ0lkY+Z{|a|jiRLTv{ul5ZR)jl%76&4_xr!A6{0bFe1!XOC`7XzhR{Kwnl-*Xj_vg|5U -;&5G8J+YXpm+6Oc(Avj4e>_ZcaB5)9FCBMt>|Ivo+y}q*kV86YtUHw@t4QuyW+q<e}-sfUYZAkS^5CU -b)U88LLQ`SwL<_4EJC@qyH9Ma$!gwg>%)40dpSvr)hPI_E>T%WoV#75%ADdK#r(71>VmwW78)Y}eh?U -JSHY|MWTw5@89GMi3>?!%pH$(a4Unk^qN#67IXm5uj3rR;2Z&YIMOL$&L$JRfY@h2KLmDdGBi!bx|~J -jZ=VoM@>SD`pw4T4i2Hvx3B7TF2Kkw@sFwO=~f??b+<wrcdSF!%p)t=k(+5?o#!_rYj2;%BLU&%FQQ( -$6V8oO9Kd*YNT;8&2w~y`yHp=Asba71>J+)I7vEZG>(9Dbi@bh_C$+obKITjMOzWwmAuFa0^Aj?b7W| -lQ!}SJOMkj@N(wGA!gavKuAPo=imRjm+bCtrd6vFdLl7N=9|L~E@ngbIGJfXar?A3_E-ub~u<Rq-DA! -J!1=;j&Ut&1KuZRzdv!8Q(qqp^R?Tq-m>IWa2&e^>pUYlTVa2)rw`ImQ(j<f$VYeu!}Nd4!I>Y%X05t -UP2haKO*PZOPB|E0=}IFyq1R(r#3HPfkda@+H6V~JxnVegBoKcZ;|J56tcjA!kgjTe@5l=r6lID;c9- -G7o_d>uNzierGfq>E(C@_hf9BEJ8ma(gf~b{>yaH@NG|u-`DtW$yY0u4BqFRxKH6JZsZa@*UDrQl*#v -D%LKfT8p~vTsmpNa*e$E+)MEb#TsC|u+$*EYr$t8<a#~jig0DhE_HFMYq`I&rCvVrDt5V#<?>N>gb7D -?mJ~Q8B`q~qQ<2nlN{Vw%pxDD6Bu=2&x<<|k)R&15NJ%>5`?hzS8uuG=!*Vp-p)bRUA>&znX%QD!?B0 -dVcp&Aw#{?-gv(!&dEiNCsS8#FHrd@7b%g(Lrh<hodNAH!t>blH5l^e-|rE=j`cFxuVTOr_->UA%fiE -wpa>-sQkuiY=#XNJ2&L}l4N{X>-%u}ssnkxuAEafhUdJ7IRduAVv#a{24GX_rB(%MJJj*Ij6bA&*a7y -Tkktr>eoH{s_`(dUw~#vMSBhKr{FQW!#n+8DMMYsM4Aok<4D7YRc6nOMYvGIsqKeFFR+~<+hXj??wy5 -!TN4tmy)Hum}THAw@W(;U&;UJ7=SbU*j1u(A};8|J&$$9-Bb>rEby$0giV$|524MZxPsH1a~h3b+AO( -IDN=N_{Nc)Y$u`~im2FByWme=;A8~}dVIwFo`q^+%VS8yLRnI2jvfI9FBh+O?+5>G7#@)7|(x)`_+9W -j2oOvDNo#km#hOpQsNs~NyK>Y!3Ux~CgP~*pO^WFCAbG6bgoJZW0Et0k!b%sZZ;<tApuV;mqoU3hzGu -$OK<q-0(gyHO9<00-`Q7cWjB#1Cx(yzUUJsJ`EQYd7p82%O?DP0pSG|6D+yg0>5os_c^B$p=Q94J_t> -oY3_TMh2R-7CJ;$<p#Qo-(<OJm9xX@k^7s%;f5A&L@Sqtc}=Lp`DoJ)KR1Jt*-y<`hE3>`t6;P#=B+9 -=d|^Xq&hB5oUb<2G^yA`sZlA|Iw9@bP2$k`Orp+QS927!Owvwtb|Um6{q1Lk)EK9COo9y3rYSmm3f8D --l#Wm<rY4MRl&qaFU*S{#RmDUf;~xFmGD<N@P6Ib;C+BLFG{WRGuyB-tT&Fiy1itR<?7Urz;u$8V`5A -79#v|RENQn@>RpV5ABPwgcE-8(+X?ObdCUG_;(3MoTW_s7sX_{X48^k3s*EBn=($5^EXgKzbs5G^DY( -*;$uH-W5Vcz^0OmIpnu9ehaE5FVuE(MZ)sK+IMk~r7woPG*Rb~AAw9-8on^-#6g?>*d!cb?m#vBz;mP -+0Btzv#<%6F$W{5=?htQ}$cv!cuZcQp^(@D!LVlMb$>!qA5A%d9E>AHV?v92-s}QK#@x~4bB=-!ztr; -wlCHi&sw#vYPXMTce3CjopkYQ^?RUg<U`1PnSb$NYVHSIIAzg*Ah`Pr_bE2wDtZNlJe*wkTwISOb)kG -6qy6k1q;u)&DSpR?oEp9R9pi=K+wY`oix#CcNzcRQI9D$N)R)GBnaDL@vb=blNlD8aRpK6Unrr**bWX -3slI|es0Z;PM<LONw&z=5+Yd?FP;}WF??anDew}FI2vzul0nYeCA@Q-|#uCfv=##I$v<<;)?@~Fo5!! -^+%K9y<u*OqJb+biV>?4gEL7sREv$z+m)Z9JJcm_Gof53}6>Q_Jj8CGpx4SNn>@VIgZemwdCT<ULJ!X -ZOJ7uB%Jl^KnZh8QNlZ$0nbWJ|$()$zl%>nmp!IqcHljO2+(<b<-v&s{d}1V{ViFw|I2nGbljEOe4*w -be>zpl{+bqPxQW%vb!{KuJ@gk;^1ISlt#Ig^2WKITPeTZqOo0v3kGo~CAKBDxRVlB4?>knu8-sR=~*4 -BJ(nvEmQ3Tg=VHp?!tS}4vgTd+rq+N|X&5eQZMvA!!8{jJ`Y0DuhQ05cL~{rAX3E&_l+PrM?n%nUj!~ -kM{|z@&c1yvIfhp2^bxkZn(_zYYjxNg??CyoH@QujMbwN1IX_WS#RP)6Zl^s0A<_>UG3pD}qRbD>Qv0 -@BS(_Fj7pi*Ck(^IZPj<1WWeh9Ex-2N4h$Ro=Fe}YLgvMflYk!8VLj4T5PCS$OfhQVe!ITd8lV6z~f2 -Ac&-Xs}tZvXDF$VgOoz0q9Z;K#L12#MzOG9r#VKZz|hoizo7bz|~gQdFNLgP_ZPaqBtnQe%kT1-WKAj -!c|orUDrCVt5~9~DAvZ?&*IyIudN++^-h==Z?B&*H+@d^n^+zRI~exf6xU8Qz_sPqi2zknvn1l|XJ^* -nlcBWc6Vd7Fa<7%vl6B@ezbB|urs;UDCc7JBrd(fXg;|s;*=}E{>bDY`b-GELXL;EB`~+n)PqU3Vvzs -n;o#Kdkk&?b-_mgnx=SI9haL7kusahE3Sr{nlrjVS86(6Z=-{8orBHdFWK98KE6JHafQ_~<ny1Ymu%t -B4BPpb4lq(?c3tvC6lrb!P^QHNo;4mnWPO~B3KPB-P?yV$>;;z|nYu+NqRQL`d&Tl6cpy=K6^+5zoPt -O>9UY+q^X=h&@r?9q(*-s(T*+oe7}-;LQrwraBN9&_B@0e6fYir6>ixUC&ll)2TX{xetAER3|o1`c2P -&nB8p*@N4oRG@%i6X>s2OTiY1Z$$ygvhs$eUBBY!d16RVhrKwxZEuIG$?Ct}8N^cRzgCW2W`=b2m2F@ -99-c*By#E$T<NwB^y;j4nAqXM3nIMs1F2NFlbp+25yiM>CfkdFaPQ!W-3?>*$kW4U-ppc-1U>(8J1lt -KF^whB71R(_N34(*kP7qEIM=+1TO0bUL1%gU~g9OJ3>Iih*DJ;Qwf*Ayv1XhBT1ospCjo@{HT?C&Hd_ -z!6aEU<IL&JI!3?>*)FpXdyft6ql!Ji49B={RaCBadGI)e7sYnXvx3_$|HJc2t2$_XAMc$(lfg1rRC2 -pR~c;sg~vwM6q#g2wAKmzA@#uZev%!^Bdyo7iJVO)ULElgF>}I};nz&vaQF_3`QW<9uNfBoQ3fQyEb| -+(4|KJT#gupuZw=pU$SS3G5~|+RHwSjbw?;EYg|ICb4)H!zQy>;SxuGW7uN)8$<DnM3_wFZ!j}ZUh<# -8<FZ`&W5Ru?a389;FqSN^V=P)RW0{38vrzi;>DMaUCb0sxq=nmL3S}dA)g^_@LUQpAMUxY@kf4a%@g$ -HvPstbdd<rM$T}a_`$PYMXkbMF4YEW5NC@m|6gqs>KgW@&0$oQ%_s(7jRs5q#3tNF_LEcfKC=BwtZ=7 -V%HC_Ov*WhyZc2G};ePa|v*qR7iFjnc^!6gIg|qfp-ONrZF0SDX}qoA-N$pheD4%|}gJO;1fnjgJp-V --_zSQzV!plb*qbBzg?6ET@MhB@NBY9J*X&l1$YeO%Q8YU|BrhA}V)M!4i*s@&a1{tSOd4o9Y;CUuZ9~ -p+nCTX(ZV5MMXvzT607lW>^=9`m@Zp+B2+jn2da3rF@V+(nXp`3+W&YinknTAU@(E4ok_f*{zuwB8>^ -w9ATT5ZMPOFZfTaxe2elj%`V%L3i5?Rid``?Y>10^2#;_G1AlfawW_JaJ!Wcg5$t9*gg7dZ{zQIxMH8 -$R3(ORYEj1(0F6<M%?9q971q;+RukrEK`uPXw+O_Wx*s+s7sPi>lx^}zvy5R0TuJ76FhTeugefx#<A2 -2X<(2Ze(ZyGW*eAvwq!$*u9H9B&PactBr<4n=xV`9w{CdS1l+?tp)X>#(EsVUQ@r>4!AdE2bnbLOVc% -b33)(~`9?J12Kh-s1d%!rQGyHv5vL%a-5qr#n}yEM_qUR`aqPTe7uafd#d{n0Rdg@rISS#6py1QVT%+ -SOuThh^H2lyFs*8s|aThbaZ6x6~0cS_LM?@-eF|l6p~7l*u++R&?YAnPezLnt@%$S`41U)w9qA<~ -fjVwDLLkvQ)7=+}o2$_c563GT?GKE`~NOQ3Wn@yAyku5_=L|Fns&Oip*Mcc_I8DOB_3_<l0kwQ~i@Xr -xG85A#v-Jyg-t7<P=ot%D-Xq`C}Gecl2=V_qa>>_>mL*5pMT;W$pe|er5a*9L9Ctgq~r@EM2i^MxZE~ -0d0+(8$xvx=M`y%45=C^v}o@<e!<vJ8>4T240!+EA8|sgM;07D_UI0lit-AW?eYfCV0$yvsAA)so5=I -D&Izxo;J?SewO+6*xhX<_J1l*7wbx`p%~qHo+VDqO=wgtp>`Wkm4>->Q_!Zk4%|bwWegB#a<=aGM{0; -!dI8qx5cZxV<??zO1)S;K5_{ch*Cpa`gia}OFF_mbf`F~<<=SnnJwbqOk)Z)zFpMle5DkxR0=2q;HRe -Lo!+S5S$|6fg;#E8t>riJcjN~y&HSDDjqv1GC~6AnE}`&NF#<put+gDrEjFd7rZ@a|;GZs1wXkIZ^Pv -hy$#1ARwH7bOe;A9rVtp4-ZWaY&xjh#s{*Z!81UI&xZgV~YHicr;Wm9B}$}_FWdhc{b{YpBE6)Be^TA -Wp+n(2`Ni+(lz-@`A>bIKIuouQ<zrrXpGQKkigA3}v3%@%!*L5z4U&A8$6_89I}KUa?*LdZObI$JE>Z -O!lt_o|<(PZy(IjLp>)i!S5ea4&hCCF($KJ#vpzNbfl!ra|;hg~G)u-c>B*IGN4L0uSay^DddNDU0dI -#A@G*7fm8WHknw`2_myI+#5~o8n~0$1@2@*73~ujOsqSZ$z=8*^Y||&c0HMeWMa3qfy^7=e%{1-lNn4 -VMmH}um{=b&E6<sT|0o?YF?K8^^A6-gCiHg9BNJZ~O=KpCwqX_hH2PoAmMUbwDivZ_82uTj<eHDH63K -=cOw;_Oy;2TC#2;g0#r&gy$`qj%D}ApV8)+>PrMZ-TZ&B)|c@Abzi|8ZLPHvXk7(sKWm@$DX2Z=O7^X -++gWcA0thRT%r`ZIr@Ag$SK_QNwGoYFx+!|3E00XjA+JUlHqfC|-sDr35N+4JaOY+2zldUO<m1u&hC3 -?2Oi=-7WAJci5uLOp+%`(6GQM>TV$ztUFznul2B^{2VYKkxXfz5aZz@=uLx_@6HR{{_$Gb(;O(%>kOG -zpH(kae$`j&*v)tnmFKJ{rffg@z<69yx+Y2u9{?p?&j}TOK%h1EnUP77_4N~YDa0=U3Zr|*SOYJth;C -ZhCknX-(T*3;K7F;e&o@|{`&Y68=u^?`KhO$+4Agj&%f|rfBXB3FTMQAt6N{&_WB!dzV-Gy+jmq}?X2 -GQ?(RK%_r3T2{trGpaPZJahd=(uC!Zeq?C9smzWDO1<6nRC?TM4$eJ|Dg;6C-wA5Yhw`RQ!k&*$nJ&i -`_u@!}=^FE32Az3^~V3lsm-^#4!i|8HLyYTN&RMfpRQaR)^r_9DAhvET1y$4xxyxM7`_{T?s-dN2D1F -Z-Xp?Du-vaXXJ{-|A(DBA<40dSaKtM2os+mX?#BS+F$4mSM{&$cOv%B8zqM{9MZdTYP?2fpxL)NR#6v -W)#_?7ua%^Sdt40?S;ZkewUMBNt9y7Ld*DqWoc|WOA#xLE!P<F_?ML2RkEst24cQ<mE5(uq^qAFjl{~ -z%BbMN!%LD&%4t*;I&gGyS_zG_XfT$X4BdN%(30{Jip6L+mYtog(*-OmEL>Vx*lZkzF9(wd@NEG*2PY -^qoIKWi-A`Vl$Ri(lew!_PF@Ee%<6L>nIw8ZBk!P@2tp!#?PQD>8!=Aq&+hQGK=wBoPSjEaY!sX;yG7 -Yu@LqVY>-(Xp0Szxzi%+JFj@$`IH;Fm>(WXQ-jWE4`MObU-xV=BBMUSX`3j7&q8wO}!Y7SUP1KKN!4P -1M9udCnk{F{4tB2?g^F3n&We$dDzF5N<h5RcE-}Zm}-U$zRx(f04yz^YUhkGZx{s$d*YI=j0Q)If4{5 -K$Cxg-PT$F=A8zWT^nKWOmAh@zCf9s+Ju`tS6Cp{n2MOZLaNTl22xGs(fdH9*7C&Hp#=r`HfuqiAv+^ -KGtXkZjJ~G2T4=FRRpr<W3kotVhJq|Zp}LMdM9kIYZ#6?jo>nsFi=2llGgLh0WrfsG<kaNarL-0=rko -8_!^oA&aNrQ)hk>vaWn1QFkYip>zJ+)wuc*~DmS*SJEJcMG3oM3=EE`cUaHze=I&^+c{!mN)l7VW(7J -SvjbI6GT=2#2z7hCdeo{XC1Ww9>K$<Gi4L-k0pZo1uGV59mWPH&!6Ye<j1tlgxGH7G01*=CdfG_U04b -eHDXvcWG!whXJ6^VMbNRcC@$B}^-2r_v?2SMRi%h0U~xD);s`*o%PH^l1}r8hv@X1N#j$WGL8!Q<|mR -3LXRd3?$m}@(PwBQN(VE&gF61E{9h5%(~Ey$}KX4T9%N+$;mQU78lx<54v(b^NFPtrpdr}oD8Z0m0?9 -8EVe8zur6nPmDbeP)2<AyxZ&IE?|*O-I6Np?^i5M!VpBHuo2h$#+dpGpT4X-yFr{J79E%w<8~sty>{P -1M<+G{JLdR4zyC`RIVV)&jmB+I)bBb)UZ4oyQDa;fC`Cv3-wK3F}Y-v4jY-)%3v0|$43vV!8(Lba2mH -k5pUD<!ijaT;19C~H{f?>`5_qOmK9%1s(Sa`Fk&2+|%ymCG-kGisd-RS222V3}08`Io>znA~>Mibj%y -mI`{OjpkT<7sWD5A*36SB`(<?B@PQTKG?&(^PhuUiOyZu1jz7>*r;!Y!UAD1y`omk$Yu&I_Am#qHGqm -U9amG|4O|qzp{V(@+;#p`02LG?ek|$?8j%?_D_Dx#HPK~+`nZxMZI(7dV6#GmGOV(y({~dynki-)_-P -VTe@mIWxXGJWNL}uyEVB525VU28P@9apM6UIzI{sFHQt~4@7B=VBS!AJ5~=4(W4*K~77VD9Gi=#u>~? -zdp25(lSDw|dEi48jW{WxjB1ws`abmdW6@#%~v}qYRwh0B+6zatDEOLDFGIlMCE-K1dn6IQTt)MA!Hd -ix2B%sWMDD|&^DNv80A%|zDLRTMhO)AK==UFDu*k)43VuXFlcM3-9t>V4VH_4u7%Nf7iW|>xymXm3T$ -<DB{1xP0a!xDQTqNTAixJ;wbfLsvlFABY$l&Ejalw)PeL^I~&qs;EinCdWgH%i3I|14+#p3{~WTG&nS -jVZ`4D#)|M*sOVSC@V`6?slt{1}3pNR?3RT5@}e$kI5@2vM7n&YMwgDoJf6jW?mj+E(SEG(y(KRD2Nm -qtfVosCdFo@|9FZ$MuecMo-eAIrNkwsMJLCL=m&h_EE$Dj%L;p6*yZghKQePZ4FzLp){(OyBQJ$e5j7 -g=n`p^cV!6ycM=lR5)iWrhTn=le=gTvQO!Kk@mO_Lh{A}0`^c3i9+uJw3DAqFHzHp(%nryWcQDLwj2p -^0%lM8Zy7kdx8g1p`<wd#nui9;#{hs&j@I)3XDpHHY~<mKGal8EU1%#^~M{Fnke<#$($))CDPi_&S{C -KwCWPPOGt&!<6ZCi_5yka>k>wjzaOgl4BHSHhACc9A7BKA$F>7<w}1_I4+NRQGJejgCoXY!u3MvN;L% -_EavZgn6cD2h=v$yV_}<{X~0U_v|y;i#N{>q}_NEl^opEYGiJrnkqtVc=7JLUgb6|8}sRSn)R7|lr@j -&%uK5&-~N7SRDy!(SV5BnkPDC<q8iGx*e+w0m$fN*7E2+!$u}`3i3(Kk3}I2}JC$-0iLorC2CG`VEJF -kI%}tXsIUWh0qe42g;=#IHE+MGpcJ@=7{<H#*JYdhrawFMd6_uO6KqiB-zE?<toCS*%x~eYcDk`4kg8 -!En*({5v<xoCFqOFsS-J?hkIHa+0zKI1H#8LCD8KPx>BzR`3MXtn$Wv-Lu0@e5nUhhN*l}wsuLY}=S8 -;Om#XJygIp88DU3k8z`>jVpSzgg6FlgWsQ3p1=1PdTTdY`w}WHN%>NDNPznk$o~JXUVmY;M26q1uSVa -A-4f)JB)?MwXa~8)_QmTpXYzcGY{8@E2c){<q>pwSbS^OT<+Y=-{%j+?LW`|{~z!ZE~tK~`;J)k9mio -*Uh-8;tnFj32ChuQ2{|Z^!Mb|@lh@sKirG#v+bez@y!@_J;=<G`=>{oo*dKC@0&wr6xQ|fYqm}m<<vm -%6GgWa<QOq<Y{h3PMd5ZgD#>7`_>?6mX603r%zY@Mg!FiQpu2%dVihrq+&ISVPy!fl~zEQzvvy$I4iu -*PNzYi7vPZj^*0J$vGGW+*FL2W*=zoE_N-;UaU%hUG9OxeHfk8S_6c>j^l|8*Wvp8wZbA%w;UK3d&o6 -3FvbFJIk9aen$M+1&V)Y_59zxVX#Kw6a8)TPS?hrlXq-Z6v$ul5Cn3bL&-xk5<grDExsZPdwR!oqSSy -a#q{vuiPkXQ>X)(a&+!d14}=ed-UeZ!yi8K<?-{34O=P4#QGIve%#L{7E53v7)vmkU^qcIK`4QNAebP -KfDts*nb;`;iQojmae`w6M+iP9I7qOcU@yTgf=Yt730@`GLhuB^gG%`I1my%J1U7;^f_Vhf2$BgB2}} -fo2@C}7v`yo*V0sTC&=D|#hO;JCOCS*(A=pdsI>Baw^#mmZc?6jRvk9gVBof3Dj3pROFqj~OpeI3Bf< -S`CpD0a&V+03(lEd#J^L2tP1osh?5)=~5CYVN$NHCfph@kO|N#J{>@#Vkrgba%QL*F&*a$IrMnEGtdM -6+=JX!c@2Gz+D;>u-!^TzOvbmF*?%*}wE?TA07py)FOW8on+6|2+Tt^K1Led|Eud%A>|N(a1HN0Q~qI -@twi%-tOM%4?khLDo~#x3WO7{hZ=t!ij`+Lg&%Be8_;$%O4{Ch)N($leoyc`xBB`2AqD+^{Lw1EV4QH -8j&ve(8JQTQttS(6uPyR4#VdS(sH;kHM?D=O6Y*=wguhP1N-$qDkcmnfO(y1K$(okwXvB_?>{i^f=(n -U5cjWtEEADt+^kN`y_sTZh54Pccybbr-Hr&0L)!RL&4R=Eu?%}Ptqfa-Hd-8k@lgK=wY<3%M(J<W4sl -Lz4(y%SMrgvR|hGqLTy%*ZZzkkzv@Wb>T)bw8Y9EI05y@&o?BhF8&@9XIuH$JHE55BBnw|V6s%H(;jN -now+$ZP!>GGqvwIB_CNOG{%pIXTR3x62h;QbPYF?7;^gWY0YF4142^H&|t5CHwT#PuZnQmzes=Q3R$J -T%Jl3+I#kw1Ty`erArTp*8}`?V@Y7+(xrFai2$eh{>B4*e?58cp?4j<oTj++zH}+xr33r-?-%drni+1 -FIn5ihg#XezYjvk6GT*JdFFl}ZK>Vz%M)|!M;rAcN$~v$|d2f{caeqW3-YNY?^2bAAiskg>_q=)$e*g -XhyJd%Zk^Wc6Uw)_jId>hvM^(51zs3XSzoNHu@E7>6Zd|j!asN4_f%i*OXU9{3#ym=&-u>R**LBdN`w -tKaStuXfk^frN<+MB=!8NnGi)A-=PTYThLaaq`=^CGXc-Uw;fOv2C;K1g-FYFg#0pxxvdMt0C=wdB_@ -c(erwEYc@2TCeM_ye3@oW7%>QFtRfm2b_X4P1DO@<$Sq?2Yh3U&j&ITcj^=3sm^HTzO<~*4VqU__%M$ -IAVd`Uf@fhDPgjpY6CP%IPZAl+JIsLUcxj4z61dTdV<~@d>*9m`mgc%@ZrN*Qc@C2Nl9UM+;K-U9$&w -HJ$vrC=h&;SzAAY9lTSWjCr_UA@OdGYZC<2y`{K3$)Wn|(|HNO*+QEu<oZgYOsDKqy6=m(<ym*H@oj7 -4p@sB^Jzebkgzn+}M`Gu?%`%X@uK7B`4;_&CmOkb36`()0yrt_7~fjeeRPiMt^(~hmvk=`5YkbW`e|E -#ZnkqIvT6JslT_vS$Xy*cw$fL#I9FaZka<#Iw9nM65VdBv%J|Nbm2ER2PRhqI`tC>9+Z&En(ZMcGZ6G -KHn4rm~qcXR<kS=CGBS6WGFq3t4V%E?c~KF|%5&LVm1Rv4U;1k7Li@5yf6vX=ILtX0~=w47;x&nmuAQ -vA0%@VgFSU&mLYipKW`vknO(bR(5dHA{M%xv%xz#8@8LXal1Gh@g8SmKjduo2b{%x%-O9+Ih*noXGH| -lzu|1w_na*_&e{A^oUK~5iaDK5wqe5t_P_%Vu!kOch&}q~qwI+%o?uTs^^~aJ7himlZQZ(6$g;QJew! -Vxevz#{!`aqa&fb0ZUAAxEKK8)}AFxA*4zZ6v{+Jy-dX#<f#TV@K$s_FWPn>=I_1A(gYHDg&-RU3Lx9 -2<*vGC_4R^R@c0a+{vw$%e_|RPb=vKTZ#qz8??esQz^`FZd>EU>r?BPxcJ?6Oz_#+2*vI^kDo<Hgi -r<&whg1A0il0dFXHxuy6n`1-%+^r+M=Ac_D1Ify|A^wB@QOcx;+rV`Z4}=|@z+uOXDR+pihqdWAEEeP -Qv7czehtMxP4Ulp#UDC=`Zt<F71A_*y^Z?ubu_nsmipUjYJ?wkX8g!7#=n@t_=(#Y|6v2;wJ$M#&MSU -bir<&w(*S1uEfhbA;!|3+ITU|6#a~15AEWqxr}$MA|09Zj(knjoYsu7<3u&;jz8%G<`Pl)IKeaR%;)Z -J&zlGw@rucVI{0AuhYZU)uulTGJOJ>(mo9#nmrZ8%@BiRAs{8|>zc<0*~A6Cftl)D(e{ZYm@yv+DZdl -^6Ul~;TN#UDxW6Dj_DiocBFucP>zDgG-Ie>=tBL-8rk4aX?{Ns3?Vi9eW9xRp}Kp%m_>6rQ3Kc2NpnQ -wp`6Is0iCXLVCJJ9j&0^&2=l{}N{x4slQX>nZ+C6n`AWpGxr;Q2ZqnzntPfMDd@d_^(p@ofQ87#Xm;z --Cpr^N(pqM_}5eXJ`{fd#UD)ZZ=v`zDE{pfe=Ws-n&R)E_(#3sH-FOQ$J;3;W_<McXz`tZCEgg?KcsK -p0TVsG(c=^1<6~nJV#bY&j!nNQbl|}LArmL|Q&WhICvW<XCrfN>de|TYm^jg(_$MUAm=nfP^5&T6apR --Y2O~iL{(bu>{_#ns=!EE)*cgfryoL-83%ez~3CV<{1ofG4eeiYZLx#vHg!JuW=r<AZDgA_m_;Cs8y} -EP{CVvVLsstF2PVvV@BXUea`t@D9beH`Fjv;*wgk-!Y{q$~KyL7oVN(2ZK0s0saKPDEw(eUrurPr+rY -Kb=@2a2CQE;?yaLV`IVy$2HL9(>((*9Ha#_Dn<$@J|vCrQf4jfOHfC{A0{X@d*h@=A_=u0+9c}8%6r# -lVTIhNwG;2Zs^fX2>|~=p*JNmIsF)sg<5LqV-Y|pKau`0V-gi{k~tws5Fv6<%b)O1j~!+L3JH`(j|mg -Hbm>9?JpSn;{nJfD&6L3;^1ori1c5?NkAIBbPd~a-xH%y<iAs4wZ$U(_2?~3R8xtLUv#;JSd|Y}`dQ! -Yu!7@qZuK1YY<70+uHSH%U9w@8$SkH=2e0t>2pmzQmP3Jhm5GW=kj3Y*B@{b-hB0Qp<ukM<7@{Aczyg -Yn(OiYu1diwb2$;M6rej~{mlaAEmW1I3%k3o>h#*RJ#CiusUBX&(-P5vk!VlY#O&YdQw$0Ut260b4lo -xc3U1$B;0il%am_wq*ivBI0&M@7UK<C}ZS{6p!-5+lZ&M~rFV?Ug<iO?>p27TzqO`IFSboAb)z27Sr6 -<1~<{{A0#*#jQZAW4RJGuElun%HtGuJU4afR52b|X_@F5dpxu37FM2PW)E6p*sH6}?8S#yvQc|!OhIx -k?o-ZEzmdlb%gDU{{`=V@k37O2d+af`apOj|dGls5R(R!=SHyVm%{Si^V}*ZIKEocN@y3fZR@k*`7yI -zT55?Hv#5Z5DZ@&44oj7rVx!rDd>eMOr)0xv^Z1D5XKeLM$FR~5woV`Tvhc0-@*`YZ2GKxAnYM1L5P) -E0%I=XwPqkEcl=C870d^?-M_p;mhVYY!EV=wWO)PL7{#itH2Ihf*8XS;qd#UDxWO%y+Y;?JV^w^RJPD -gI*=|7D85kK#A=bN?Bq{AZl<|LQoUhav-d^ynczfpr(FsXc=G4;?xbnx=agdh`hH(dWkAL7h6?Kz!D{ -Z)pGi1N#r{9HbxAk=}ds={Im7h3y>FduZ6uFxIp0jiEz(wIAA<0(9!w@rIs#`iBnf&_47A#lc_*y>X~ -c7Z^%$23^ysV~^nLZXDV{r)%HN&o6M0Uf)CO-{Zz!9dzyCFf^!lw*XB*-=TPVwev&z*9QA^p|=kG+P7 -;LM(wLl|Lc8wk}pN+Meme<SkJBl`-Kf18iwm)DE}M7!a~Br`h*GkdeVb$v3>f;U;K*ojE%)2p05IJE& -6M`!XP|0T=bULhluUjJQ2ijMLByFkGeI)-wXVdT>m?s-}A`>_+l$Yx8A*bqfh}jPC1}myLKd5gic~AD -WQUdB!$?{p_cd`_4q3323}=&lq<SNu)pE)#~)9le&?;zr%!+P<BvanPkqlf|NQ4aPm=jnU0vO2nwOq9 -cI?<od-m*cX*8O!v17*$RcH!U(!tgil*4Z+Kh!lk=4%EF7|@SQlvSszj2k>_)~s<O=^^{|pMLu3Jv5K -zJ9g~g-+%u-r~Z_G^2sMypyFSB^%bZ2H-|sbz^R}8LXxB!qV?;KKKkgdRaI5R<HwJWU~)ZSE6;UI-f9 -C}P_OM3fL+~Mge^S15O(q6#Ssk+4Y)vl@NdAsJC*kVYJ<a(#;8%F1^_?8OW^<Bd++f#-gtu(e*E><Ul -(|vJb99T_uY5=;K76Z(4j*j9OBRz0q!R#&f_n=^wNrL+qSKsA)DFZa7->NER0>ZZe22stAQJ~8HHVU- -E|R8r}MU(Z@w927aSWK8;W#)EB<HCp5-)_+0d_FzY$c1>wfs*2VPlO=_%&}2M+MhKKo4IN%bRehyD2R -<NWi_KNs(yNd+472$OiO?#!7p4a9dBC{5{?Uw+{~{q)n>fBfSgZ+!dhw_j0S=Mj$RyqDVB2*P0<;{I0 -rX*`9zJOKPv01YajPE-K?Djlj_g_g9aKsbAV>f8g~?ttHee|2^BTB^ss#1o~UVdu`B0)Ozw(W6I29en --u*Ww*GqD@d67Uto@hXtT*pgv%t-q3as=l%EJ7x<$Nsr_@*!=+1?xc5Wv7s$O4{?vwV{w?^QJ9my#Hz -fFf^ytw8z{ddK|G@_z@VDN2i&LF*8Z(PFjPgf)?Ay0b0C3;CcduwGM~)m3cF+JB0DeO|K^+0N*M8*Oa -+LFNA96l?ALm2g#qGqL52@sQ>U*3&carm;&z(C=ZKdaL!GHVq?HfWuLPpRSejUk6)Q6w}_@c~FuAm2X -0o-9n-GBMzmjYl%nWMacFZcko0B@8(>iEf1oX38`x#=U$jR!a%wV(5dy+p$<&Tk|d2E4<0-#0m5cZ~D -K#>Pi~3;rbQJplYwQ0qd4-_uUe4!|#IUvfV22<I{Xpz;R|R0kv9=lo`(A^%g(&oy$Mb%^uu?Ve8)SA~ -CleLZ-2ZA3&wU*d&Q&_MNY87;sCd;}a@qXXrRGDjVOZ@~YMyEJDL2u&vZZ~a`RVf@FO-$J;KAsR*y-x -MB^@y|KTdC1#xo48v1sn6i5{0IM2f5ZVT>qO;qlq>22d<EW6=|CF?pMmeuE>sik0#C}<oKGSe5{UmNd -@9orb&&JO4`dp`sVxlN$$99G-;O`Y;tl=#_a8y^unz4EvZXaT!0T=C7s?<0=ob(Va>n~fJwa_0G<?B% -Jkek#8eaS-znbR^!NYCgfByV=PW?<X01YarbhK6{t<iDe!UcZljmP*?cP8+MZy(3+FE9xtZu^e&>ECi -b<v8a_py4y6JrmE2RonAExjjQB4cIQX=bPS^+cZhs{cYh-^}KfY@Zo()o|giD@JUNL!1v(mmUO7JfY- -rCU+sUDKeKc!-(-*Ce=WL2(12%74d*iz8j`=_JdtpU`^>97g9fEN4}nY~ncAOZQXitB_v^B3rDs)Z`1 -kGG*TetR$D^OWtUl0w(I2RFf%brRl?LEXa*tO&kjbB4K9)bdG>Sh-G(1K$;K?BQIh$yhL3m92My5e+& -!9nV&yY#O_E5Q3b3O<(Q286)p!UC4B=ccw_>;UB{7-Fd9mYdwb1EGwEuaDYL0h~9{2?c|u8QV=`;(DB -M>IS|G;FlV_!ph#e4d+VkT_2}DYs|Hq=e6#+B0ZS+cRiT+cRWR=vyM0`j+^kouPlBah3-_g9<I_XswN -?wBXrR9LZn4a}5969Y+4_GNNHg6#u#Q2ma|VG7afO!>sR#2Cw#<ptR@c!?H{o{ej#+t1@XI(a`U$R^^ -hwpT_rVM~oQJm&Pciz#noECU^!kV9cY^0yp%v>bMMk=x;G*!1HEFB!6vXB!7u$_%EVi3(@fQLj}C<bj -?)>n;N2XG1bXvwLL3ijDg!*#~<=S<^M5b#tcARsDSngyn!2VS80LlhrGwU267X975X+j+gFd~Zx9VzS -B~K?-f8475DhKc^Iu3NZCD)5*De~*%X4D5V_^(0&Wz<Q`)&NoPY((jyvG<rlrctI_>;UB{7?9-1Kz+3 -CU64YXb-?!trN(2@9{DEU(g8tuP(oZze6;<PBgr_f@q+&fc6X;o>XXfNTFdpXviJU@6IL~vSRtlOtYW -?4`k99uQA4mcU$Lw$PDyh7)JoMY}vw}fBt!naghq%b#kS4a`ECte(<juyvi|(zrBiRptkS|(eQVrJwq -mKwBN!Xv);lVEF8!0%Qx|R@}jwmXt;}LSWPsnAR6$r9AnHq+`9Y${=^G{|B0_lLCalt-Nj#c;RQj@)z -G2Rg1FM5SNP7-QM{69c#CKd?U`tROj6tP6C{%!wT|Nt6q@+GM8i6wVGYqxMtro&BJRZ!GAY_?jPZ)Qb -@>ncRsJ^`jRSxK@GCDb_t4Oijw{h}@nR$Yy6R#6?%Ei>!!eq_rL^alz1s6;g@#8I8vaatv~E!}cjm}6 -;1OdC>Yoz{9{XPOzwfilpYEu0>VG#(nKC6IKR^FH;EMK$Hn4K#N<o7+fBjmWz(kvBImc@4`E=LcJYx* -B=L)4gw|K5N{sI1|`?$C`)B}I^*=NPr3u76l)5(`CS>mDLN_1SQPVhh`y}I%$+B4D6ikxZd>5g(*zkY -oc$xc3S;6R?9p3a|o>M4$Xxu~d!+iW(zcI{fxuD|%=3n6zf7HW+a;ElckvI=7%j7Kpaz=QUD;AuN={D -tNlo0fRmvpU9jNNLaOsV)2({%^niww}g1(^UL#y6L8oSy@^6nVFexlB1#?o_z92K6&zFo|2NnD=I4Z{ -rBI`@4N3lfe+^Qz!x;2FF-$`(t$Y)Xn;HgAEGZr9=lwz{G(@p|2h8N<|R#Ij3x3I1ML|y>EUHbK>t_g -Ut`CPbtWYxtpfiLuWz7v|A?(yx4uAan3Er0wrm-vHo@_J>#etnF~Ym=zAN|vxC2+zk;+$UeSkjj9_Be -1*P$-Z9?+&md!~BuZqLuQXwUn%J&tkUBUi&bk&%)2J@n8+VjTo|D{YyVl$79}M&7SqKR#&CAWmazfeY -|J+wca^ph8Pp0N^P#ZOGOS9-GhKE;CX8ERQkJKR>@BhHtxfA^-gS*Z8@ge?Cn0ebws^4?g%HFD)%SyJ -5oyzIyfQpKrVEHlCN4C(51Xm4cT*1KI`X1a6?CB`sKkKtBw=M<0#0g7pZ@BjJWI66y}LwDJ)7=f6Z5{ -nqs#M5ea;L}6j!SAY7`pDqE<w6rt<XwxbUH{N(7U%GUus0Z{J>e`M<2k-^{>Y6X+1~Abc&_>W6TDEue -+1_&x%%9nBTz^B`0{;^)ZCtf#)yHV32?+`O&O7fE^#B@x|M>Ca`HUGeggfd0G^hX?)Oj!FVi;e8?|~; -w@DOP8<}Hk=5T0bopF=`IM!x#$tM_0I@q6$GZvwzeSZ{_K@WPt2-EJ4{Hzp>An@lD?WXKRv5Aa8vmUO -hnTWZ@-P4E%q0r(2?7<H$vZxBxS+;+9!F9iNX_u7#oNA{&MEJb^M=bd*14JaS18&dlaG-PCC@WjMK!C -RX*Zx;BYtWoB$18=kg$RD_4YzqFtSR3sCZ2)Zo=|Tn*?w2T?(%|4=6V>~ZyLRo8nEcHr;A-(lzTV>>w -Oj$1F9IK`TTWvO>?#)Rf$EzRzX={dAB8ej<EZP2kfSJ5$p4pLewqL6Z+{bg;NSoLcM%U|P30t!Y@0)U -<eh~3PI9}O$=^M$_WO+(zhV3X`A_X}9p2I2U;-D^H`*-msTfNvUc6YyR%+{_e}k+6f2(|mc7S$?Isu= -c4j_}g$3w6qUDOfk1N}MCi<63wn|@b`y9a-7UiIc-Z{7xOpbI>Nws7~|cXN_iqM!DDfSU@4133d(ga` -bCIS~N3gRaLPe;jL!Px$!w{8rpO_^ac8D(_OzpvuM8=s<Zx22tNF<_X{_^tG+5=?nZ(H|iJy-*v$E;3 -bqf+R%g8%>UcVy&3-A{0|w?vX5;^3rwuB&z?P-Kk&c<g1^1XT?K>#FM-$bjy?dmtKUaxT>IF+fV;rod -;Uv(&pPlW`XJDuuJ=QJK-Qr@@}>i2``T--@rNINSn#vjh5?{kU7N?a3Gd(;_4@(I%x8Rkeg75QJ@|X~ -i{4`x@3GC5>ICq_6HkcvpbOza8}J2hL3V-`6?Yn+KK(oS{WAQ43$-u7|I~k%s`IZa(W0(-s^9NWH*iB -esNdvJXOKnsmVj?ipar;79=}J<ToHfo^&fREb)`DN_#WdQyyLqZ0K5fr_wL<7?xGCPUcv9cAMJqnaq} -ODyTIRj{gdQ`XZ;5>pzp-^1@aGkfc^-5C(0OePLw_BL0#WPJ>VTOAF>v5jOG;Ly9UwxN8>K=2k%~q&) -ed6Z&?I?b=?Bx3>v}f#7CECj37~6p<nIs2jh+hYE7>FHv{s(zK1_V1rRTx&Sl5arHw3rUmCY`>2b!!) -ygK>{$SHrF*S<G{vcD+B7LuXOBA#6kHEiJF}ZAN6w_BR0~AxQn7tKqoMIL$CYMbO%;x8I4D5G2*xwVN -fFHZUSP|=e1p5fiwU{sB9bZ&ht_QaDAg^E=`-W4WpJ1_ArqFmlmSjG*VPo4F#@yYQ7oQ^SFB&*s@(t& -4pUB_XuojGO3O84CKKnz?Klw@EawQx<YfnEvzfm-|yPeu}1LPTvIe#X3TSIc`6v?HdG(LZl#<saM2F4 -kNVFZ0?ym5Nr3Hdu2)<W@}�{Beteem17|oNw@c*z;}!DnMKXL7<=No<Jzd>vqOPASWByA7XG!KBCb -{`062>=Ed~d{eE_`3XnmE>C|53;J!Jn?`TW@d3>D8-OXWVz+eg9v3R~{clk?$J;Ib>ISin?!c$wO3Fu -0E!Z>aOl48ii=YEP)slgd`*+kc&*<0TMt#33u>99`}ua5I~My0l|mBD!N><E{h8yPg#^p@J8qTzBSV@ -L=g0Eiciy%neM9UU;XZHbyYh00N)Am1MDO8I&2YiHGEn4DfkVaQ64{f0WSo`1H2PCZQwh|$pd4%Qu~M -jC<ZN}c%e@a-y_aNyYQnylOX1S-xObfmp%4r6z>C8_S&gSr7kWiC#&&;Xg_}LL-jcipb6~P@&DT&SvV -qH<S{42a)4RKBat4*qPS_=;VAAK%pZv7N8m%i89ANbznCYRz@||Ann`|cdi*>Lj6Zx}^ab|k^(loS2Z -nqwa`Hj@IG#8b#XW(y34Z(_inRgb0Y3tx0@ewfu<JYG*6l(2u;Uc(7nPTn_ld{51Ai80_}0sY-Y0U2$ -mb%D7~ejySK!BwR^!KZF^mRSA225HW6KRu{SdSd|0f<Rt&YE=FDO+pd}8i^Xg>Dr$zzeHPG8&y@MC&4 -e)MCQsTSkMYB-%}pW>v<DO0AT$M*wmgU@kB0p5n3D)0s5gx5?ixgutG?7K*$l=|ZCiehb$3E-Xa?ZdA -aG-y!Kuwldc#AC1M1M()I1q$-(z?xo-;eEiFkPihv0%HQUF(QU94atrkFFl<v`XKmm=LPJ$di&L};OZ -DK#((oDU*KK9ijdPpZam;e<i&xn0GkjPSFHW=UJr=2+Q;#uyW`^Vhfg+o^ytiK)25|E77_2mKgV;UFQ -5U=yXWQ$+z@yb@~TT>x$T)Td;u~6d<0nG@SLRcG(d^h(ZFuw`5&@1c<|sN(*Jz|d;oC)Vmr_Tx(Bp4d --NZXx1UcHI05q0Rk8f~yf~Qv&NMcLlMRdY0Y&g5wcCx317BY(|3Q2PIfTz2kF&&Mcc9aiFrz(hE*BUJ -u)2}dhoLd7F|PbX|DpY{W5;IBm@y+A*bw}2^dpF?gL#AK2WSC(gx^qr-!2<`K_)K6k8!+qN&OEWd&rO ->MWaTIDg+%SPMj$89`r73AM`(X0rUVbqV0Ih>BQl^k>iK=kxW$M$AZN3SlQ3D51WEK2XeZgG2$zd#q+ -uJ>R4DXHW-VyCZ$GB9oZW>`SHFB{8)B@AEyrOismnA|Ed1#g7(wX(?9ZkU*uhZP3Pz5N5+g9BjP*sDb -NLhuEh9&HfN6RkGwa#Z{*J-62)AAfFI`!dLXj$#gfQpM-D_Hm+^l*&(qqqYc~kbF?8tA;;gK!ZL%y!` -u6QB^1u@&Oc1$?Aoc;xaR&W^xs9Mlb(@TWI_bLI#9Ke>|Fv%2x(ms@hy!8kfy)3}B0nqg_~Va@=e}I7 -x%$`yc08C{N!4TC^UuHFPxMFI<bNCkmWaG@a&ofBzoHNQ`t=iZhdu}}l7I(-9CE-9WGBuQ6cqF(UJjF -wgcrLJ^Is{ZY64mj?JM*0^0orwL5{vlmo5>E1@JYp%jfX|&^_S8V2(&|CR_C#(ep{FYbM3#$ED~i8&@ -h#f*e2UfNuwSBbN&vL@ph;2IM0iN5B|BFW^4(1+;+PhR#Gk-+1GViPF_!6hi*TjT@Iad-m+~Am+w6qY -u4%_l~q|*)r0xV@J`qAnzC8L%0rn6X*-fOI*2fC6?A~bQNuj_R%Kv&xjEt`k+4K<YDunbAT;$@7`Tt% -#aIQivk)1IbQh7z*OM3(=$x_1#O>izj_WUJ|_WtR9adpbOYw926;t{7if*=hECqIXU~FP*tTdN?U1e! -`u|e>2z=lbD^^6NPoFMw#n6q&IR%*FuWVbik9Gq43tqzW20l1sFTf?y2k;m$4&<NKu3a0<6a2MppMU< -V$$>)8K=)ystE#HNf5(Xyqorv6<kuFwYtryn9+0mq>9@<4b4`Z(hiY8(?k$chy|Wwt?(X^fr07w7{gq -$v-fqHW`$_h&$>n|{e!Oqy%$cvvnKS1r(orYo&!7L?f&~jM(mP9+E<H(g6fa)9SbR^{)S5eYZt|>Ivo -^l^>Z@Wr0~>~MCYjzBe?RcF&6_tP&-y*paftZuEaVWeG5B>E#UN?_jLw7d$-ka@SX8w(xF6Sor{Ti|{ -!AcK&}BXT9gUgbpYA5NCbaD$|5$<zMq7}zASR0U1v8IFW8k%4{KO1@Nyi%KCdd)`8ob}JbN#%?q~fS= -m>r9q5I-V*MXZ2WMW$G33iS(ED`Il=9sG}WUm2P#e4H~BgH1gftpl+*VlTvgi2D$CS`>G}hk;LpenW4 -eAcldzxa!4zqK^3T+4s?$4)O?y*+4&x6Kqg02le%5?-%|S{5|-3@HOG<BHma!ZM3KZF-HgL2ga{!*RB -HRh7JQA4sDqoSu@-f@g#hA`0a=r5IdFUv=?op9gIX45nZNEohtl6%n<>uhOq>{RQJVqZmtr3e|h$KpB -oRm8uTN(AoLb6Im{mjY$?i$p<d+Jp*@10h@qaz7ww-7#vi-~T@OCRSa#~vNzfE}8e{pdH|IoFKHXl-| -C~PXp~%~RS%~{r2lsE>xKa3O!F(L(ZTMUm59rhQzTh)#c|8B)`e6KnIZ3Dsb`tHw9wAOZ-O$Tq`-jEf -4?T^3qaM%#SP`BHHXHdQ+>1CHwtLH#Ef?L3GPKUp#D;W8HDibLGe>Yuo!D_BzONzGkrEObiq)R50$UB -NY%Ko5`fJxoSg#l>2VnKJni5tw#$Q-_t(GLqQSF44*J{VEOc3j?T_3wLL9Dt~N2*&B?q0f-CiS5IvCC -(glq~k$>_O*_(gXAvWkao#KStNVt05G4aQ0)*TZ{fxPq^laUZ+WAQfX|b#|P+)9U_zIuUx5^uDMrSBT -E(?jE<0$B@(9(l4-0V-AC6HN+nVzT|bC=6Wv`NB~9!iUlQAIGNsxch6z#^DJ(vrJR$v_>I&LU5<5_4i -$0Zz-RO(y&a0{OezB8eHho)mey>XuRjL<Pf4aCj99OR*wGoFb&LQ!gOk-6;(4kCRUnKT5z3_x(vE5dK --7EV@chdDK^trdV5|k++n&2sVQxD4|=@Q>z*Y^9Q7Igk4^s+?X9*NbHAM0E2d_|Y-V>|3xEv1TmK6_F -9*>uI#j~N1=dOx|pIyEmv%Ot^%=~Q3oB{&R8c(@y#=~wVkSnPNiKkoHvRn_8|;c!l2R>7czfrSM{VYg -}j(jq&YotIOX8E##epIurUF3v4$on2gLXNC*g3{aXT6lNCX=jMdV(sN3~`Nc(UQ>BgE)cZ~Sgalqz+C -MDz=ef$-wCH_wXE-Oje`$W%pxEE^O=(WQ{?tlNuhi1~0r>?vy>r6ne~kb6ezEB!btENcKu$qI0seQJW -`>iC1{C+rDQ%k2KR+=WTd25Ab2AIVIZZv@_A)nLXuR#^Tjy;r>ML)1{-Nn_-Zr48mztQGn3R;<v3*7c -eSq_HglJx0PLv;$%j6~U7Ws($wcJE$p(HAG)jV~O`i|N_Ypk`<(zG60v9?Ovpl#Q7X@|8RwYH&gAy@C -G@6`Xx;6?}IVI$ipFiMTF#$;oWvCLRyd|;d~8kw!kd(BdFygAuiWxi$ZHTRo`%zD-zth=n1mTY-elJ& -5aX7#jkt-jVUYrOTG^@;VZ)to)Yrn8Og0E@5;JJ%j>Z?w1B@7W*QKidD{Bs+ypx$~y;rQ`69Jd>C5=l -NRxA@A#sb{Dv7T+KV|mHQ+77k#*e!|54sly8$;$)=p4)KF#BQ14eqs$<l7>MC`Ux<fsneyo0>{;1xdw -bc@}N3>pAk@kYNP1~m()M|#*P$PYz)roCo@3NEZEB2H<#Xe}Cws$%IbdEZ=^2Yog-iklWJ5x`3^KaY& -uYo_*pXAT+xA{<@cq!{TxslvjepsF*Z<jxke~|yEJgQ_VmC6idq4KHnt)i=sslC;S>Spz?Y8`EEXh&$ -Lo@!(m`9^<Zyz!|q!Mc^DvF@xto56OnZ&<E9)_&QZZ?CX7*#B$4Z+~bXwc9!&$8!b}Wkxz<oQPAK-@t -F;xA8l8Gv1P`obh(NJ<%(jKf!Z}W>50r{8?Vfr|@~aim&Ex@wfR-zK?&-&+zNqH@wqcL%*&6oWI)tyM -NdhN=59Ge7oFS?j&c+CGvmEqvR>_4EYQBw~C@9DgBfQ%3)=_x`inEwc1hZuRW!W3!Ml_`UZW0vD(;a9 -A~mKm~ZCC`Hk)oPZFDHG$3QuRq3u|DmhBNQb@J*S4I+T_9+LHPn0Lsb?V<#Ka?686Pg^F9a<h*7kV@F -Rj7u3gWgPUqbKS)`ZRr)enjtV^fUfqv@koE8_d6&2h0=1XE#~DBQ8s}a;ze&%qq8@wkBEYtdFcOtm|1 -PHk<vMxwhoAaTYk6oLx?RZu3MM$u!=B=kOw4#>@F=K9Nu6)A=iWIbYAW@*PB>Z}@Lq%?-PQ+_~;6?sE -4n_d~a)SMJU778B<k^E99NkNBPaZhn@Z?-%<6{2~5Gf2?2WzwFQUU-eh|YyA!WX5x<>{%)e~C;mCmx2 -IS)mw2VV41R4aH<Me)vh2%A@`G}k9F_;kljKw-UFo6ZDiz8PN^SLa^-i_9YO6_VvYMk7tIw#F>SA@Zx -<P$c-J>2+@6hhi9@aV&Klj&WY4?V@gnEaTg|>!vhCU0O34I%?qdR&By}Ld^U!s4l-({p2U5y^bXk$5z -)<L70+0txhjxr~i>q&CIFmJUUurjP?tyiq&)<3Mn)(Pt_)`r<E%!aTE_7;1O?Pq7$E%qIDlKm$;-R@= -kP8P{(rE}1^o44jBPv$)ZT_^JyB(d-CU3@?B!cFd<-1$Vs>xtjq!O|`QdzKYbxnJ!@l6j}LDD;G$r#C -iQ8gr;`Bh3kB8>_&YVQsY}d%NA&8SN~0ZsdO;9`EQw;IW5plKg@4d$m33v6Rp}(n(8=D&sX{ow457WN -bBlFzTCsG?UB$<_xpK3bV0nIa|lixu!qZU*K=YcvMQ#5IU_;8ix`>%|gvXtwJ(6@m45X=SD|kgYlhF& -rC5NH8V-Wm77z{_f6=rKeO#jvg_Lq5e0hM{p=w&C!XrUAE#%}<-7R@{48(m=DB6=2)BaxXPLX#{o1YN -HS})x61-Mk7q7b~&5G_HQ(qn<e<{~h?opVMqC7$RVx#hWXf?@HBVE^hJzalNpP@fwWSHH}V$!m+&4p% -T>nYNswOJF^oaM7|YysOwe6HG0+N~Vbv78Q0n)3|F_;0;Oy;I&MA8U-(BEGZb?($diN5mJk_1p9o`Xh -R#9@d}HC+n~1uj}vX2ldl>O{0-<kFl7f>#X^`S<|X(HLx05%<4h1HPWiE##xot3)ailG;5Z1%sOSAwZ -5^=Sy`-*_+uh_fxXP8u?_4~_B%VlZe};PTiLQ5vMrn2&)VbcO8W)UYMRr>DRKHcBb*9nyz`thha~gwf -`eL;RQBQh_yCg2r%7|2=HGFNXgJwjNK{<o-tD#YLf(B|uGiNq@kWs>*7h6vxB7ScEq(4M`45szKIZrG -`}k#kxnJRr_h0g7`AbOtu#k0za0dTVo}tWFmXMvOqu#7OsAj3B)l}__c5|qv-ioMk#(3A9ZoOw6A>L1 -7AF-Ql$6ihLAY$u|@4W34^09mcZ{)Ui(_E@=XLP-rzH*jwMm4l7ZG@Jq?>6_59sHMh*!;viMtZ8)8e+ -X@t+Gy9w~<boZ7;CbI`2E#d<@^n-{Y0;OYR(ZiM!GL!L3I;(#-ptcen4*Q%v-wL(wGhc=-jnp>ms2s? -1c5D{IuZ$x5f`|D(^+m(kem*Q<;*#_PsrW4CduiAB00A9+fFQlgY814-LfDC?C?$`)^jx7R!19q~T*& -U)v(T7Con7QeCI%x~p~1O-!sR_o;#h+w0Jn1sF8|G<|T))4f|lPly!WaEw!&o);=N-DKbsZ=RDl%2{c -r6JkgRJBAMqP|SFcawTZm9z$0bFG7xr&Vb4v_;w$@-L2RbxGDbg!1rU2{k0Kb*x-hZcbi7D<-oLvlwU -Xi25B^3QJ|3SqAIIda_<Dj}@>IR>lUBJ{rzO63>lel`*cH#pba^Y$>Z^ud#J(J=?^#keu!yYkG(sVMp -2L>=Zjomh~LTZY{g6-N0^W-(ufxH~tBywj=G<!A`ML?ap?F-Hl|tmz`%9*d=zEJ&>e*xINOYAbb3cUD -vtYY3`&r8BRB+r_;;HbIP1U?h*H>`?)K5wY<7s1Csh%XiOWE<Tvvyk9+OBB(H;);-z|>y$r9Lm**7_F -PC`(y&>LkZ=_e@RgZ74m22f%xmK=~Yvq@e{|8V@0|XQR000O897^_9oCtaWPCfwu0LlUY9{>OVaA|Na -Uv_0~WN&gWWNCABY-wUIbT%|CVRCIQWq4)my$yU+SD8P4?wy(B&P)P%nY{4UnFMGj1JnXZNNQ_tLSGW -7?UJO`t-DJCRVRSj6j0JyGXY<QrfP?zqQN!LTFuN_rEQ`eZ6(0E8=BQEP;1py5@_9o&=v}mOxrNO?{m -(*nVZQ3Q0xBxzt3;;VYqMSJm)#j+j*Yz`r*4DVJ60y8NX<hv1gh1Q`zPJ6p68E&Yw<W-PT{`JuBVz%e --1|!$#M=_kHG*_tk&OwYL7#pZ?4y*P4&J?%VunSHq`WH{DU=`qXFc`S`V|skV6<jAy@n=KlA_It%pQ& -^NyAzR0f~?$7Y+F82jof9UUUALG|u?$`PC+wSxH`*++Cp7%Qi-@>)ZztcU&uXP1u{Jl~jp8uJ@uWnfD -rE=oy@^?2gc26jY9iREe8vWgAme1_+v^nfqRMai;cO`}RFHMk$zoC1Xu_XGB#jea{5=6zHiPg2}ne@x -#=Lxs0@*iY&1KsSES#B+^yKzl5BuF!{o03q>3Ypbjf=51lFOdu{UX)m`JazhOH+_7|CR`W(L=p&5-OU -rzxEQOu_P%@SH`O!toks;s_6=O0lP087@$XuZjFrsCfA^x`6kMz2_;kJ3-YXLFI-;&@8m|8|DV=)leH --svi+fHJ(1zWG>xM+>KEB~INJumyS}_IJ1C!EKOihXZH~y}Z*o$d03#7?v#L3b|${DNeHLZSm?17&L$ -4o4se_xF2;(U>AF@C3Sm4a0YYiI03FA<#RHg?$bUEh(lOCEpggoy<Q?NSi$0tAbGdU<DSei}UgF)4Uq -tsIQ3HwE9_Xbz4&U<r;bmjWCAP7QAUXnF8+brr!T@ABXS_udq&cdHSVl>widk@hC!S&qCFfKeViTk~& -S1p99RQ^(iDr2b|mj~ukI+Jh47&SSpFY8N|$I)?J0dTUr(vC9=rt#j>5UBi@O7sEZHdsdv!)KXkajqu -|CDtzpW$--*sy4K8U^IX121(VJkG_l&U6!k5rL~S#!brP#}xsKg755GLs7s;#hMe1Cgx7~wZ1(VO@N2 -9fC<m-x|vJRJ7eKJ3#{K<KaiYKq0z5K~MCI`mznAwwSQluyEamY`8Vz%kYwfIK)*IYz?c3m-*L2%bFc -d=_X?swC@tJrlf?(e1hT)I!eeac^3clrZvt$C+AM~S8;+;0U<9|PRHG<J9`elAxX;JZ>E1N=M%@9=Xm -ykjm=&U>p%*1YE|nW`M3>j{m%MCZKIyGDt=Ci6u4_JY27OhS3;ZFHSS*V8*k^G>&ouElemi`_=odvGO -sJqCJB2d#nsVWKh78nir2bSL`jd5OkEYoa;PUZ?eApf#1VRx6X>KL(oT`A|pvT)XjZH@$Ne=c#yypX* -+{yO-YO7U#L}&c)w>7cAv3rCIc#ba?Cm334w({!P#WGxWg%y+{h?F*P!1Vv)0u^>ZdEblxO~-Zq&+$M -G{qqdNyonV~_G1J7BZ6Q=A?4Rq~J=-Nl1Ykv=2`xtcXAE9dux<)WAUexkTS0UrRBWJbecQ@XGGH*uNH -vxy`z@-BETOI^%fy>E{Y*x3dNnwSr0lsQx%l2rx^4LOk$Lij)Gyeg3+Pz7=P3mg=bUwTKs(gtRKB2O} -6Q@4E!|5{pdiSPd<KG^OMvL(6@P3(nn|-tHb~ZcjcGh+8r)7MrP+0YD#`;yWua$5jo(v|p^glLF-Ex4 -j!aOrO^8@JMsc1BZ-W?}cpgZMZ@0GVvo@96j7Br@ib4D#C;S8BrRtDLh3weB8lS3W%hw+a1e!^txH`Y -OZH;VGM^*_N(t(12;>Nxkk<!#2g9Ed~<VNcG~1E)MilW)k&ph@a~!YuV0)2<nf7NVJS>|v~%aIbhL%I -njGyhi*vF3H<?o%16i4U0r;shkZ+`v=q=9>)<Q&%mFOt#-j5;*Bcm_ZHPJ1vYN?y;QHoqFx5x?7sKd_ -<Nl%^_(v*jW5>;zNE0~Ctx=SPb&8bv!MAnk5J#o9BN5LG&;_sVc<D^T55{jW>u1tEM^l5Cj83ONqpdV -ZZPt}fbUk~12YLes5&2RYBS<av>fMyZf7*So<Q4TOncnO2jKizWFjBNc>p~4_fhfPHyY!?ALDosUCs{ -kwi|8snYD}i&m^;mkw5h9bh6f_uf49{DW{LXS*=Aru6v{-1E#bPJSPXGCtERwZ*Pr7cao0A>*p#P;B5 -TB$mykzbP%lNnm>{Dt4%u=C#i?aP)?bgHnIn}()*L3yDLSyU7Ef7b{Rhteyd@te~`p#CH9H$_~E@-8` -hL4R%<JhoG*K_GiJ}oN>81ach#(1M_Nk3)p37u_CamzOi}aprK))>mC74`mRu8_%O%lPiD%<CLq0>ES -bCO1*Glk3k!-E3k==%Ow<WS$O0TbaHB&}TLI$edySc5v!p^9BI&b?A(4rzu-LZ8v+H*O3SDC851zD(7 -%Gu!|lhR+olzz3*e_Pdix3m$j;(xr1Jgp3ex})OVXgAS!!TD${l}+v9{&RvCiOO3Ix!#b=YL{Qd(!Aa -^C2JL>zm7R${*ilsmwVp+E~jJ~k!G{n6{)?yE5J{ctRn--oio`y-`xb;^hI^ljUS~O0RC%JdVi-NT^; -B#A>B>tvu^yx(<w-2O^^=q@5XP^`}eyX*g7|U&GeqqnUT)&|2;la;i2pPpIh#f<!NxH%zvfj{I&GCOu -heHIDaWWx$el^pFC`oec0jJ)sXo-v}wlo^(OJYUgSBm4!$3*0n)2ay@q?V$wu4<VH@y{+j7@A{ynf(o -~V0M>DW|tHtMtgSC4dm{*{iOZ`$w=E53aEyM3p0yCShi*nY>jzje0eXTkG!7CAm$4!)XW3jWDSG1WdE -6P|<3K1=@KL9_$#17T$&Cdl1!%^!Rf{@@WOYae@Hf7f}t8aZ3@i>?^lpL4i6tn=KrGy$GDbWDTwC%~} -)-m8FhqS<#u_W6zs0_GwYYgd>r!^vP}pYqL&!9UP70dI;0Gg%}a@3%ES_ALC^^C<IzNeUboFEfXic>- -l0N4bOWXQ>`(3Cg^XsYXPs_=~PTmtNnSf?nRgfL?8vq1V@)m#5d*1J4DIPnUqR44h58jI(IlqbAqk0f -`m8y3G|h0o(`hK7jI6=Br+u0=V!SBq<|s9Pc;deIH||l@F^C7rry8>}BK+409jhU%Nzq!sK#(%gagA% -1Ik9=b%<j&UiVQyqxbREGI4SpN4YI);vGn7ht5>+kjmnvAsE&L!~D{n*$l_a3&)<<#+~6wvg;)?Zl^c -#Q0nJdq;?6x&ta=l!ua7pi8#(Tczw)qGf(MJKQF>b)12(Mez%liShn}gA?({B;GyG@u0fMEt!ER_*sD -ayp{qklLPRla!}?6QD1`3>%1p3Fp$$Z^J$8+>^xqomhk&D<dL44jkU{oc6?rKqv!1z=2c}9Yh1dgbLO -Ba(}Os*{RG}`b@`6u0rmjo`73i-`yiEv`yUgHQCDT28XQ^60=6_Y?48eo-Y=+asAvDWbQWGJvDSIy_i -f#MqzieiTX$D)m#r(Q9HJ?eTgc0EcnFtUwK8R-7iDIJ){U2$75Wy+<aNt)1SlSCmf0DyQ%!j9y;|V0E -<+7dTEfN8ammtf$!z^VK5HNP{!Il`7M1Om6#K>scR$tFouIxeQFa!}+jGDX0A0@v?ChNRPbkZQcP&e@ -0u@@ie~0|kF;;W|_gA654WK2#r+Vh0epFss0{BY-pJ0#I1@Ld7y2#nBnHF|98L+4fDvRXgNt6TMt#D% -!JKQX1k5Hct`PCQjjmnGI!CTm&u?G$sY|Pa1wBO>Zj!tJ0;)Me^{?@|Ui&3}T;49aYbTvYD;a}w?0h7 -;HEi+*k$VVXE={2*$LgXVJbJ;A<3Jh*z0g}h7^T0RYfVz1Iw`cKOV`4>gpNX{fTeAYk!LMx4MU`3iZ& -2P)h8lsMhKywz%R_rxM0qGLy-P;kx{J{sqCug?(;uUpPMJ0KAwNs+>_|ilVYh^CI~CUGBY)VzRyi%mh -xXGgvD0jOMWhaNpnDm1suJ>T%J5a^Nxo`pQ$_}-k5!FSrLi#KM)rjCc--zzcaG|1@U(YwT7)RA4{<7$ -%lnR!)VCy*$<t)1k$k|(qq=~nl$PqI!#<l_KB~iy+4p_pc8cID4DIk>R$$03>=D8FchJelMwfjOI!|c -`CT!P^0obTNa+wh}=xmJv{{(grG_O7Y7$+d3Br}B9&+$y{E|o<#_osONJ)ZX^v8SjkqU}D}G4kDvns< -CDthN*H>0PIsHS$Hg8?X}%#Jgs^yC<Xe9o4SUV-D=J<jWvB=+C26PTac-)DNP)BYQ}AeiL{Up>BlZqq -tv!`+agQ%KYd%gG_^8u0~)JkLYFO;(ni;gESwRltwQzho{L#n!6^Y(Q(MeeKX1$FnzP58Su`Tc6N}yD -rR>0tmzva&Q$i4Tj%+Wu*G^^;_&f9&na!CAuaJNKD~~cH(~nBN$GVw6SX^J8_w29cqa><zlSz<xpLTc -1FKn`&Kl>r)pvHoCtbkQ@TLdVHvcq7t2G_|D16Bi@KN2p3tFv^K^J5&6Yp;U-9L*oo7RYSv=ek#1N<^ -gz9arGtD_3+oHLz0<pnM4E-r7o2|mZhd={W|CfGN!<;2H-(A(|;-lrJY?Go)bXu8UoYHsY(d2ut<8F* -9MzFY~s@-AfcV-=`Vd5~<uB>9Ftj4sbVtoKWB7*#^1h*rAo0l!|%-m^F$+SaT<?_K5yZxhh|kRL*JA` -^Ck=TB85y?5Odc@?&hYzFyhWH$&7+3%sbYMA8GSuQuKjE3KQ)xuB74*VNnc{7BqAsBjItHrTIw>b?N! -shTiE!lxE@(eu=TlOFe4)CiKbUrBKXTr~npC#yA%pyF$B;;-AlWN#$$+@q^JhiT!PoQh(47zq!YnOj< -QEQi_oWM86s87}r>eb)1<OBj^qM!C>`n$Z`z{7+ya5#T7Ie7L~7Ez?!B}1QNVXDW_$5@b;w@Qs9gZ@e -QS$I3+t0uo!v_m=L?SfBcMLd0xL6;Wuw#38pq8)j4xy;)W!PBkP<Mi8~8#sY)#|6CV+r~6G%Tpu!Wx+ ->EJNQA!)o;|M67oT~jm-!gLOQoajpS**q^R4>z@0h_=wEM=0jE+t1Ewr|u^3(dUc9Haa~#f|nSteFF@ -JRcGQ(*;p&d80FMnSiAs;mdc?T<I@t8s9(MGhdzebw647F)DwLN~;Nd2f1<jMxyNbPFZ-Q^L=SC=nvp -nPp;TiY1xCVe~)o|b6sywox)uvH=-#t}N_)P3yP<Rdjw>_dL11Gqm5o!>31O}&tLD(g)v+H2gC?2G<D -P44sN1SnrJ@;qaMuY9e#rBBN<U{XAT$fri5MP9%<3wawdeEXe%S>#0?FVfT@4Sjn_D+_*A(?-A~Io&s -=%js3z7VU%2#qos>55dm)k=MDMHMW2@R2F@sXCWt7aew-cNT<VW$FIjG{Bmi~891)d<VT<he1}5+hXg -#92wsaTK;^ywcy$IEeJ>7g%4e+aceL+%eUHj4LUo%MS0=D?Xvd?bIk0mqCNndHY${CPNn^Jx4fX@~E6 -lJt_?1iBXTooT|G;_(@9aQUzy{uBD}WJ)+vhag`ZV0gW;zg~@UrG}-?y5_MVj6cy{(^Dk5YNaS9<~9O -n|);^)9fo!-@_5>HP&;Jczq0)7_;5kEaEG`kuza{dp5&fGv2xF2fvXmTe<hfIkF#QvteLvwBO)idZA) -TU%Bjd_AXR8(FUT&RJ-GNDhP?=5wBW{5?(Y7O9cP<;<1%Uiu~A{wjP=vd2_k*Ylk*ogd66Ts**~k@DY -({N67#w>k5aGh5SH?J)8=8w$3Z#dT=uM4EZx_(}Y>Qf#+pZov6fz=O<{1D*xA>Uri&m8X7Q!1*PSr!X -#0T3nt%v~?6ml3gCr?Q;42alN2=%ms{5_|!sYt`0a&;{6<r2TYTB^3mVAinTK{{B!WI1u@RRHYM=u*{ -mIOd{McxJVMVzuP*4sF!B)3_kcg;kg?rcS>UHKw<CK=&vd@hxFD4$X*y?>eMdOFRppV#lB}(RfH`o`! -Qr0AwM*`88m8C}^>i=l-7<uFDyH71MTh}UnsWL3O6~m+(%vTJ_7B7E8`JmU{Q@Zm>9Z%KuS8619V>71 -SXx`lAzv#k54Ucze6`gF+xUSb4R`692{L)~T~4RHron3h{|$K5NAw!-p#GYz$k&q3cwD#kUC}=N9`*^ -k)lPbw!N+05_zV1*2>I4^>_ac<<0|7mxkPQE==<U0u_8TUU^Q$^Z;VIC{@#U{;71Z`|MooA9+Y@o;Ax -o8+A|sBz6l!1c4aoJ=`yjx8N?fE^Y(iJcOz{lejdbGy=ZsQp0xi&;`X7Cr`eMiXaMY2z_Z`rw*%jD0G -F-=uM+8QM%?=_p2PUTA1Y#T@y!69_ez2eI?j*q=U9xTzkdPmoAA4OevAea`@McXUgs}qb#mKTA#6nTz -U8d+9=yxMyF!UQ;;*<pOfg`cjqEimawCnuVp<sO{EK<zDP+f9WG(gp#qFd^15RIc1$2zwOZ9g02VQjL -*#pz@y;93d_N)l^Jtzx2_Pm1f8U?*W(A!8CV$4nrFZk_+8}aT<$O4!1`tpc~0ewfx$;TkyT`qh1<A(f -5*Zp-ZKglcFl86O7eJNkWf4+IdQ#Eq`Jffc(7JZYMA=rSO#Pho~z9``Ho#4eAz@7Suh+aQqJT`=hVh& -1shn98-cy=vUOTo*cKh70t#vV8@p>L3QSSFEg;j6w;5@}x7(*AZX@k;RTS19ArDD}Th<SX&NPKK{+$_ -On4Zyw4k4cOspRgSIh^Gd8|<(RcENcs)jnk8j~#_TB#|IT9H_kGaxYb6@(G0F~)r#1c3%R?LUNM(9cD -fuu3_+B9SXI7<`mL3OwKat1j%Vm|yyy|N4&ab`uInqP`b5cKmAwK6aCf{F5wDg)-5#ruP=vVD#(jVfz -#Hh`Dgq4>DzBpg#27lgD8t}~*X{fAJluz#!q$|L+0N-th=WPWn=)uosWf3qf!sS=KzI43*K#T8p<M|b -)>zB}vP*rO+?A%_oBLTMre?YRWmn^Jy;f-q8vwvZ$J>;*hln^sW_Vwk687dbe%_5}{u~@C0S^Eo+#$B -K`DU!9-R*&{O755h3k%a}yt`PKawUjbKK4(>`8g4Ex7<nA+aHUlZTP3TVp10w7#UA*XpdspVWF2@&bt -PY;a=se&ve9CCPSW~A%$onG`;jDn@pg{%`YO<te5+?PS}Kqc=U8VS$%WD881wOTkOj(LpxLY-@{{a_< -_j6FkVW4@e7}ql4)Mlaa4YZkfn9lu`g`7i9un@PgD&tdcfRPet&^#*Dh5l3aSFP@<IK#?yC=)l^9H$6 -BO8<0N1amUNV$c_bT2A{rU3QtS;vm`4Z!zsQQS9OjgXxx*l(gfqKF&ccsvN*C10#SQeNPB_m~31c9GX -*_&%_W>ZPS=nV4o6G0F(qn<4n2wifFP!^l%9Szk~j`wQ0R)g5KP%`dT!D$@22Km68VlRHGTwpz$e9~_ -rY8h2ju*s(?5TEN&+?Mgh>byv{9&#yvXuIIMbEtvxX7pHjNa(y7azwfR{bmw-n?+AQe_%&AQFN>V#F& -*kBH9rko7ctVA%R&~(z3{6H?_XqlV&h%>xh3{YZ7<y)iL*1DZsh_`#`}88UfzxPjC}AQbkHeT*XPNsR -=Gh9lg`<C-K|y7yE5oqy%f_s>NBkT67VWzjX~0-2<gbg*veQB-ZsNO;dIK2(aC6^sJ&=|92J;YF4~qb -;lg8~nYd49jd{3l$XCOaGRt*K%1Wn|HNsxhqCLnhla%$lwZ06at$AAFK1HMrad3}zKLQ<CyYW*4E=$` -CrhZErZ?6%j=(v#Iq}1OK0Q|j0EjI)*^Y9Kor<659emyGn;-)XFqupr#`qq@A%@qA&KD3Y2k2n|pJs+ ->)@z8;ZenEUWd$e-)zklVBJSa167IKpulN;jmq8nJv>lRkjHw`}1sn737lX`DVDQ5v&3d=}^9Z&11yF -J}jcl&}5<=!5WbC(r-NV#1}nN!m>zpuk1DJLmbs!H$u9r+esT&<FnJ}j3MKVsQ`Lpt(acm3W^E6C%IM -!OdSj+^e`XIPPz+K$RRw#wQ#rzSZ6P={NxpHweKYZZL60nYZ+6|H1r-6)&V7vP=yLG|eN)XG*@IXhfM -Wr{ZM$St^kCRM&Y1$B4?b+7_|YKJli|F3QQbT!JR@^1&M58yY9x==l;fX@olh48XVwuju3jn~Ph)u~U -zWj$!#puHQ?>bV*+x!}EM?IP-Hd{AxkrTY08lUu9P3e>4mn*LCgH0>eC<VfE;(b@ylzpueu$@8?fLMa -_^<OBC=G)n`%8CN}Z`zp|m@Tvsu2>(jlqrRMWWVb8h=+XeXEC5~Bq0L+^rLM1&Iy=O8%g-jxDV`e}ce -!9Pg@!(%21jU2_bSn+JpwywlV<dH$)c^ZHmN&`q#3QlOUg?t)7jy3E64`0#=9kdhmx#@52g6XR;=5vu --eg9DM<M`Wo3Ouny~$|>dk?pxc<1hu(dBq4X<AA9@&<JZ#HqCPxl#Wc*ufyeVWSsUKiy3gh!3!FL$>N -n(QHJGroH+y0gwQx{TVWPodpc5LXmTW4UA-_LFURx;#R%Rkt-Y@R`+U6UmRkJKcYMQ|o^gV;Z?3@?WW -38s|8R_QA!=$_)8X4!u8)G$s>`;bn$i%U2_>W~-4rr13^YJM|#aQN2cxm+IV}#L}tWTS13kh`DRrC#S -KbAK-f?Xxb^Ktlyf<YEPO{JU;|IhD|n4pGDANF44g%?hl~dB-$oPv+k?oevPj>1RwNA$n$;to~&Nb+J -$`06`&>R-enc{`M4iWSHoTD!e;J)ybY(|IaNGUpTl|!OK*lxbz&@9I}ALUrIhu9kYTDvALXS!AHe!oM -ZKTwza4e(qi)2Hp%pBA2(XAJWZ(0b7qr%Z4pcvaMKmBdow9ZPNt4xcVl-MSe3OG+@6J^t6X&OkxdCK< -jqTF!*hC+f#vY$Ayc@#(I|=;TaXYG|`!Uk}fyI2IME=Si#6mtZ>mD|<T-ZZSBZ*`ySF|&GKzqdn-;lm -bR^HAiCjLFrhqlrR9t=~wIa`fL`wLo`LycskOqx$UjrUQiVZY=mw&H!EL_gL|{!ylNJhs}a$5zx|M=} -}jf9UO#OPi~v*E56sW*-a0$15rHes}CWe9msPEvFUfg8?T~MyQ|v>ob`no^G(U6iasN`Ksp%zdXL3$_ -A{ynOsj7*Nb-cNQsC&(SAt*-3Q~(`_0srdwP*xf6x1MlGszE<BytI4^KB}4(MqR^X;H?)R#*AXS1m9C -=LDz?k`BZABU$WUslia4Cu=JSQ-naJ{0E5@ZQhD=kbo_MkqRd6U*T~PZl2o&kU`Ysljd$J_-2YadEzg -KFvw(x52;WJ`L;~e44%PJ?3#55Z&1f7IvE1Vwx|j@UfW>26S8~osRcz1Kut^zQ7z77VB$B6dz;)ULEl -Q@CU@W(_Tfg#L6dlGX=c(_`u+IoMzIE0{426myZjaYpHgLvF<_}(o{Cw!QsG1POoa19*)N^(Rh|oW{$ -4ABYYG#naXpZJi;}r#S+LtY=(GYRq*1mzPjq1U0imM7Uiruv~GHMDPm_G|HS>uq|ZMeA9sER?blMo<& -Pkq>63Yk97dc-cxF&+rt22*{7#b?bB4aQ4?UnhP5SXm(6Pmk*MWTG$C4aV+S_>^hv#+8pN=2*K8tv<( -U3o1l)d9Nz@Yp|Ggv!~s}a0Pw6Dz>jJH7&mqUl=IP(5C;C%98^e5hIHB9lL(=ziun#)Z2272B7rDT)8 -pth|e9~p7MLMb_5AG@V3HA~&$Z(2V(&FVW6%$v5$3tu<?wcgS@B&EMWgH>i>_rcGvU2PVAG^MAsp7Uy -Hh$+Q`rer==52Ps`bc}x=>@9r=_}0s6@J(*xrni0)bRIBG4`q=rromUNat(ZzqU#Ja=mo9x@8Em!apc -j<p?*f{A0~XL-~Y|A@}mP%a_i)I0EzsV7~g3=T*M@YewfSJFMzf~pbydJgP_e!(8dbdcptcb)CSs6th -gZ0whQ`pqzb<+ppi3~H5S9CAsTymjO_>!&#ds%h>jkjA?WP|9qyE@tzB$%*<IkZ5AjuS+RGgu5_4oUK -IVAt<?*zG&zG!AqA|c+kHoTQet$dBA{qD7@#8ehvebCt|0q#Yx^)h#0goCzfKy4o7JtW^Olh49_@tLK -Zb9%rO7P7hmM8hj!}oo%a%KbhLOL&IB-KzK|M+vB!rR8_Dvez-$7k|=;TTOIOQ4BoP%X7dX~k3GA}Ot -Uy@yj@?r=|kxx*@1`(2WwmGo<>c7E)EpN)^_Us!7b56zr+Huw+IUA`mpaE)&KK>t~7j@u2nLQh7ikBa -jnJ48M|;=bTaD<69$Kh9GCzIeu}T9szO@1@{(7WnNTe&4@&^dn>CZQJu_?#i2?M(m&&y^ElXhw!cn@5 -)Tpk@6(XcJ8+X)GU?vBbfOdN*0jW*6P8zqR)bXM}i00Au9U<;>SAk=ud{=Cr05jrNDO>M%snt?$(pI+ -NsTwMf*DqcKNFoc9{B~Dj*Y;5@fE3@%S13I``cwEqGVJ8uwEll!XPz&sV^MLx+Y+R=~f2?-pp5az^Oe -e)w-gD5DbfXYkLpSbIk_Sq(gYHo7yi{wC0Qc`!ETK=7e*Hp{e*nbJLgdkS<|4gR`WO1}b}U~>Z==wGK -Kjl8k#p$@_yao~|R;1~Gkt6QGLcfxOdR%^#TY1#;_1*wZPABE51pghCd{2k;EP`}wQ<;m(TS)t`&4qp -eKKdh~nc>1ESpO0wQTDMr2k!Ze;1b#EccVwko^fzyW{878^BKoLXk8F~a)@Io;;-fyy11#_n$yc2VTK -xC`jX`9G^!DsV4{LvRt8>&weePd2k9Jl6L&-jQ_LiUI&o24N68tJ=mni9TGP<f~m-HR*v{s?5BR|#|V -WnkRtZ^-H?*dGx<QT~V{i&|i?%2Gg_&F?z{3pUclVrkx_j&FE2pP;qo7i`e{EsXiuk_?g0h+f|&*z|I -hKk+V{Mt$V2}Zj8T%RxM*=JK5*8=u`z@KwV!X7_JeTI_gtBl8)=HF3YIn|43ybrdr1bVd$zu^Nnhxfs -^UjTU7rsP21{ToLs!Dr(Cj%aje@BK?h;eYkCO9I9x-J-4h6YT#G^78(H1C}t_`vA4m)P`C=ueR~NE$F -QWdRqX!Rhrg~+QD;Io_$w8Xwr~p35fndXTo{0)Q`>QLz_pJaaj9r4mTqfTLXRcYVAO=W*2e*zYjJbmu -y~s?k*4X9Xjxo1ljq~3~o~!CFlZth(hWYr@o|S8*8LKFPd*cI!SX;_<T5Ah0i5xzMO;mas;3JB7$F-# -Ud2LY%tJ&^<3VzhJ{a(SZ=O}F6C3vMev_^FmMfPhmV^9g$ZYp+~=?`@v~W$8y`YF9pK|Pez$S7*u;AB -z(e2fz(e@cd>mrG;91pvOL+4qX4XI^J?%)-1)AEZO-0@Xz=`_zy@RZj$~$=t@jT0uNVZ7ke*>962c7J -m&JZW&jO+%F{KxqiPVqGEBRND|lo#`3={smqJpQdb_N^xqu{U&t)+_qu?0zfgqof|{$eNL9Cp=Strww -@8LBCXdt8CgZ+K`t@ZGW{JIP1^U-?a$5`cJ@te5OAGI{gIqiTqiTw;IbtSvz2mwIcA$fpW7^X4n0jMs -rZ^3;8*_s?fG>H?iVM$Q<><yC8EJf2GXnaSWA1eO@GYhftPBle=H#$K-B*ew^H0dOqr6npfDZ<$2BkC -ztS$WA%sMy#6to<8TR?T>zPFK>ZuQ=Q`A%VzPhMU_W7ieU}(t-J!=6XKS9D;P)A0AMf!yxUZ(DVjRYq -${HJpuTS}BN|Nu0_xSWMga7vY)vP_2`o%9KN62QsMq_3dZly8L9xt^GTG~2%dm7*LbidcqdBqqItv}% -Njxt*q_0yhSMm7cMXrARJz#+e+l*bFAy{SW6wA(FU1TWsw7Rpw499`!g9lF0^v?_1rt_7fj*9ux&*%` -=xZ4+X(9@xg0^I2fy8Y$3@xTt$9IzBEv(XSHg1PC96@cF!Y)Mh8!VB00=HnH7Vh_>&V0v_W&LUC87hB -IQb7yI76HBz_EJ31d}=)M8>A+$lR{VbqDwrJiJ;qubOXi+b|KMJ}WdpkLjs2w8sy6&=G@|&Eo_vMq{$ -B&PXuQ4&no?7tds{B|S@t-2zJQ6>~d-h_qo93Q$U5pmeT%In-M4BPrS?KZZ<t&hl`aO<(+h`6EzAGkQ -^(emWgDpA^n?<oW*_fpZgrD&Y-jlDf8+p=@m#)9k){7t0<3B?@F6JRhh;3vZ2fmpX!-4$%Ufk0dww&g -xru8~?GK<iBrq}Ysn7DDgWIWza5MTb*0QVt5lZ;#~2BUbD`}#$xHSp;Q3D=Jo@G*EEzy6>=_$&8hvG! -I6_4$kzQyz-J>ax`c^#RQRf19(#oSY*Cq79!Mk0p+~pElsOmQ9Yk$77MjDK!M2#)`ry<89EhQKRiaF^ -`+$dmn%2@Vq&J-lAOV4XkD;+F4CwK1*>Ade)Xn=0@JnPI_^3dBob(u*D^1+GxDt1Y}_N8rDSdc62Ul8 -eA#nW1R4ac_Tw})h33t#<5(T4}6}{SaKw>zZDy|IuHK84gOy+nLMK=bEsmWSXYqwU*!?<`?ww$`lDYp -<%Uimo;!{<k>)SO`T-~V1%!iDLL7suckI>(Y<vcdfi7M2LPyP5v?mcP7NNCOwDpbeh>3}{6Z(8&YU>E -59WYaI?E=hofVlxM6@}(R+E!W@_R-kP3tgzY59K80zs%QibwdVROpQdf{Sd4sF`vhWxS0vwdW^DgIXJ -ItaDFDo;Jk4$F&tW#WsENg-p132DGz2Gep}<qInqnOA2nIH9wi%O^;y0K&6iOI-ovr)E{aCG2f;rYXW -oeNe<L@)6>XEA{jN=YCwf%cGL+LfGuq5bht{&vVVWyU{&o!uLjMCpACV(8r)@ZD4o26raP(l(Xmok<X -w)P%MceRPBbP?+K$;pk^7dR7IeWqqj6P$gemq{!M<FL@2aAD6&qgyVqA_oZIcT2RGt%g?&I3#N-1XVO -^&=+M?SQ|w5qeDX14)nd^eX&|ee2vM12q*9H)7wR6KW}yNqzh$(e_scmxrxQS7lTMO*GEo0j&bpf@Tx -rM$yh}5;0c>`RqD;ih-8mU6<@=b)IpSke{E359ycT!xOF;AMVolpeEo$`uoNQ&_DUoyg2gL^P*`IFYb -45Azu7q-j(s9|INRE7fIm7pmWQg#``BHuDev&=^akQ>SU|PPTm6A`!(N-Y~Bn$-cu1-I@)}c{GMhx?a -X$h^UD<x__-r^$H#Q0YyFv@KwC+D`kMt#d|r$X`5#6dA5D@YZL%C$s?8bu$~=9JR-*N;@pz6-z;pIgc -%J*h72$cq6nL&lfagD60?*Y7YoxyX)hVp;rrg`^r?`D}p%}At&t^5&uS%;<&Y?MHwskb#Zr0`r>1~P; -jw%Z{1h4WsvF@vZ;GiwDvoE~GVU2ZG6C4hY;sS}Cq4^(E!L?pj5dj@~taVZVe(@3Nr&ktMM3k}eqckT -f#ljAIXS2+dd5mm+^{^==q?CwxC9YT0`>AhOv9MK22@6-ikD`7)k8)sU)tBU1gC?8Dy`QDq=djG?*I4 -6MsZTm9)oz``(ih;JGLN@SrB+-EP>yvT>0UHvyJTHy{W})6;eDkAyqy=@yJG^rE+f7bN8J{sHN|>qd< -U)s-y2yC;TtsI>jAzi@t$z?;vR8J6X9>Q3cUZD;z`NM=h_nP+P8pJ!~Jq}PSxm~iuBVs-l?HG;G-LGf -2Y@g`yE=J>H_6II~u+;eHV?fx`CGs_}_+Wr$%po)-;a)LXF-jar7Pn-od|u-h^YSbu#WoyqW1Tc!RDS -Z(KVyy6boo-EY(A?oU8>vRhr3pnD>}3;vepm@L-vE(6}=Ly(St7<lIL_6abugx~3g-|2_V<?k$f4qEp -fnbvCMc#1y2WAVkixgAky3@UxQ%=lQ>H*vL+e_&yYX&jyU2%6>W^$W(tyqn4ErVVlHte9P!3fE5o*9d -&sE5`Rjtma$Svi7pMuJwNjzL8mKBtDj$YWxoEwTITSzOCVWUdI`>isr_PwddKPqEyySb0M4)%5<zBxv -0_TQtLwgobph2DzEe}DK9QwYhJ@jTR>CyJT>V39t+OWVtl2gJlscp3p6ilaC*R6pavU4ESO1g1Y-Jn# -KaW8DV4AvNi1T$NsTnvSmdW3nlG$I>MK~FANMq7<VM@x#gt`=<XqyR{t2}4>(=mj*rCbevf8>wq6ct1 -@H(w~%s8yivvx>g?PWK3PvcTqvxycgAmRNX_)hD-R~{r^iPA2V2q!hNQldGAG=`-{XnbNgDhH!0$saP -qAF_;|q_u|!SyOZ)-W`=nqh;`imdlZ$Tjj{eGp1m)%^W_>gg-Q}ydv@_tzTaY|7E%6znCWaFJg=;%X8 ->j(T)QDz&BBk^Rx~-ZvA6?eZM?KeYYg2?^pkt`ffu#|NYW+?w4Y9{^%9f`C&tyKbD}*ZkpfuAoYLsmJ -)uqNxh|zvBF`K;u$hoJ!Mh~pQoeD?k%Brv_{5mhF^<V-m9g3eHQ$nIk2Hw(yB5kbsf!F^Umolp|lNX2 -Rul(dOvHVF=Nlzu@buPjYezTV*F|S!gPO!H><Y<_P3-Dc?hpXz$*nf{ct<C%Qc4%c}vP3mH2w4e*vB; -vw8ZOhTnR(1fx02#?uT+eB3rg0d5Kl(6c?w-_eCSe#%1qWW<Nw(sgL3y0WNFDV`r7Ryc*aZP&`4I8GA -l2WkT^X)Le}ZOpglh(4J%=-6iHd^7A@1^hw(G&Q2HA!4ZCNjF~)68716Uq;W@kk5xae14C%29EL!^L- -H%KHq!$G!`-XQeIh%0pAHeZw4&h-!$d?&BXZLdnNdy&3hpZ-!*?Td?)rJ)fHDnTuH3E!>+CQNP>K!9K -VHid+)o6w<QhtnZspP*0_5bADeo_vELkMu4dupYgzan8XE_H*Ll=%1MoSSGP-O-(*9C^i#BfDAT<tAy -Y!&iW^G}I7tDC@=tCJS@TrD%&l29Lg!i>*vr<#-9(-Hbu<6<LfZLqM8fgth^BmULMSaS4mgcVdmlC&C -;rphM&HRAA4nko?*>hsC<G;TvVn<_N70rQZ{z6iL_Y27d&9YS5TrHIrX)(cT(C_PL>@q0&-0P2sbx{8 -ZyW+w7bs1`8$YkqBySu|9*;-fTvB3Ha7TM6U`q>S|Ec_pc^Sn#c@JUn3%5`|QN>?puSi-_Iwm|Jj^Yt -t|Q-e=BT7MjR4F6^-xL&}eHrtDQ<ZF4aSHlHQ`DZrZc|_Zz<%_7hNyDG!wQxF&Mmg`S(6fdlsg&*u&P -I!fKg64Oeh!|A*4BY<KL*SnJp1$gzxnOR8}ahtg?!L_Q-TFP_B=N`M(0mybbgTf9OGaQjLV8+Tvpb^$ -x7%7WyPz>ibC^_QWZPNOM#?Jk{8#zQ7$iDTpQx#Mbh@LaA-2q7l{_uqwF=0q5Xa=J)l7TuNP%Zl9NJ> -&L4xEd?10G9K9IbS@2iN$xKa7X8Z+mB4mV(%g8BBM%Ei-<Qtld_}`i=BMn9wxmNi1<{7u%zvpzcHlDA -0G?_8#R`8kdb4Ol!Z77j_iI<;+2Ko8JJ3@XoCXk=qsgrHZKal)b4YtNUx@`TI)h6Y=&T22@!Fr>Rp+0 -H{AwM?A$9BliZ4C`vep1G5O$wKt+aNm|0Jjseqe5mnAv=Ctt864YKbT-^iuHAA??ekPCnv8nAt%joa< -ch-mXqf9NlsQ7<m8W<oK&9G<wR|2_%dtaw&Wb-#5#p7d26y<JpGgBdtZKK_|%oi#rI~#<l-ZmT-={PE -_?~>%IY||SdsFV$;Ecag>F}jvf<KXgY1fEhhnlpemvQbb>Kf@UJu!lEZgO6$vsoZ$f>daf67RSK}MEZ -v~`znO_q^EXALr9uqD!&$+kpFATvMEY>8stU+QcDZDdwU>&_WnpA<fUvq!9-ckUPC<;r!mZg0*Kntvk -huUcXqzh_I5#_wk>F^%6lmsqb8b7HxF@I|%hf3iGd{7G#S>BI-)=DhRyl+cqpv{Ui@0Q8>v0fNw>dfY -1uVtp1~kLUwv@Q6MDKL6K~c>ZsE98B_42i@^PR(TmylzT`k_kP5-H1_7q6a5cYT6TQ7R7cVes>2AuN# -b(FW4D#Rt=r<2(lc})pwFb?aT%H%^jw}MTz(Och_;YLhC%ynGh?=>kdK=QANxw^SFhEhEMYzBC)9)1E -$jZrkb<~20WNh0T+%Ori;ja8dQ&z-;`0e<4WU0JciAxcO$%9=*2Oc(7wmzftW@IjN+^xjp1aH{i8MDE -$~!+Q%Bv-OZ&1T-#A#(gsqs`2tM%bmHXm^zjkPY8cprAzDyeZdV3zHX8fhJnHHG%H>n(NSnbx4VsSh% -RMQA<qjeuE&D`ei$Mg93VurSSMCOnGinj+%G)xQ+;Al)=4@{ri0Y=tD&gRK6on7hos9Tw@<;hP)w#|C -&*7Olmqtd~}C{}TGGm|1OunSInfzptaq#EJ_fVK2LY3ytNMJ*Cy*u*CcF%l;s7`&>3GHPSkmKBW6K?- -TY_AH{W8TN6B9*QX}db-TtdnvY_=A*KiVx(+FAt4lJ>x49Jm=F6Ao-%B%M{QJ`X^6!71e`rUH{OdCC? -<*Sr>f`w5H}LNs1OKu#{@oeJKP8#f?!FBF2FLk_c1`D>HO9XWY5cpvz`yG?{w*8lpV}1TAK*;MKYTOt -FFnS;`GouV&gx3t57T&92_7o*4^86XAFq&yFKIkHGKq)4<*AAFy%Z1s9R8iZ0{)%Ljq&e^3;)Z%|0({ -(&mZG42HIkqMOwA`55PH-)o#y(@Ba6pXRR`>as2|_h<oN~{_TfNtUXU3*G^*XS84aV@Sgf}$nUmFv$? --rF7dfE9ERP(*ONOM@ZC*oIcP1HG-HVu>1f|0n%l(J_&`3+;hyr*z8_XRd-1&?Ke=F3^S5UvX>nL8{2 -IBuv@eAfZ2;V%<+K)@HPM`Wr<IlZ)6F$qw71ucBwk*ZMeue5W5r&Jm=Ec<NZdbC%<wsuv(g2~`zg@o< -Sbux7xf?4Q~$AT-5x$ZC-A;jqxm$Zr2!o&Jz@si?eI%N5-S=8E=m$`Zzw3)S1<9stoB(T-_w27)EBJS -ebvLaQvXds$$E+jiq-IW#7N$1HQZ^r>ORC;D+{Hpl_Ym-AEUjj93BZc^8Oh3I`KXp^?4h7ydLh;Nm+L -C>8Q^4RIq@6ljWhlRf4k+eii3Os)^@!Tjd%W&lxW-NtAaAwpN#gUx4-m+bxYQ<Ge;5_`8MiI37cuiTf -K&oR0|JM!!U|sa@$=|Izc6{@zKDe!6zOa0yt(@>zoNS%N&dOdKudNKn4X@Ge8ke>uJLr^AkAOs#h>n_ -_zR89AnReoIX6o|iAJcZ<yLpWfY|#kPHRp?8(`|F`sRD`Yy69=)A(WqNd<L62^{LOuHU73fiuCdW;2a -!k)x`g<oq`sv#B!X;oC%a7NiCQT3G^BDCgzI>D6ovugm<Da+uiSLIM@*)=3b*V1{zV9X4uu_9A{hJii -rPs_cUApfwx^&X?{^?SK)|aSgZI~Zz*m}|>6W67%P3TgSSJNeLoGz_5=#tl{OD5JtYY{hqHpB0BR{Nn -xwD-gwKCegMyhxKL8ef7QuA+2S$!hyBWHv}TWD+{$Zt`sD)O4sbUWe=~K;Ku4>yVA>Q1fMUXxoLqvh6 -Yno%{DI)VWVyi0Rx8%a!Te-4`b6+|#d39-}7t-loa@wm7+`=PUialOX+c?Rw!7u#Dx$>)kd@Z{qV9^) -9}Ali}SYz0>xW_P#b*@4T03!#*a*^lpg7^e)+;ckR-p^)BUo)Vo%bwpXIohPmzkckA8Tae7xIWgGM^Y -h0$^d^@^x6RtE*B&JW<T%WdBE~QIZT$lL%^KZv=$$m*)66I2!!*5U2rDLy7-s78Oc8ey<TjFGyp0D)x -PJ;B)wd;jTz%rH}uS;7rU5L+P)TQ|HO@?=*OY!q|Nr%SA8mtq?8aB7A9z8Fy?(QTt(v9ny52<15H?5N -qvz`YJuV#^;tTu5OmiT@c)zlwd@Ss#fabk$E7b~Ut0WZ>3;p(2#TO#&Eolkqg^;7?ALv<`poUlgduf- -FxPk3hh&GC$_hoC)FxlMu$(zz1ru8-M}71C(2H>sTal;kUtKY56JN7w{Ux_{=n>q*}k3_mL(zufuHLg -#4hvvZEb`vW#14UJ<}ZnmUL52|f-Yox%YbJ3lAZ&J#)gpbwr=<{2>*NXYA*3FhxG)B~b^lnQ<1h(ajo -AypXeW#-7y)CQXs|UQ(nQRPY_m~YZ&43A8(j((tJz%a~V+~leZ^I@fG}m0&nvXP}%vbqbuXA=5{y6IN -iR-y-i}cThzLK887LlIPyb0K@qI&SJ?rJr12zokBt2u&Jw6;;tv)z#Pn@GFvYMMjVTiV>i8ufIvj(r{ -KXO(7h`qOvse64@-QN%m6*ODyyCqc7i&85<K-u2Ub)$5a_Qft%f3_b6#$rf5qwqBDBw`A-0YBE84<r> -$w@cu?dXUtAqFLPP>fXtpGJA66$K)NfHk5gy=FOd&hOg@%hMn1|(K6F}LMn2O1R`T&>*7Ux}N8GrS(Z -(J=OM8>65pK8mp0;!r)I>h4ZCSmA_|RgYx6TI{G`@%EP$32UPS);{HQOgkrL=b2$nS;VcOv-SmSZJ;i -IobQ8IuvJmr+h8jkhJ}Z=n5*H^Y{W%T!!hM!UTU^?Drjr}B85PkY>=+;fP}Db`(!dPQ$#rG$fvaA0ag -w)(<vTt#~aj}~u69ZBYl^6ZdUlM(;T)qLKTp$-QUtaC}Ye?e#+aJ^uXJRb#as~53G_jFcUl}2+8LgRA -|HXUFAn&({%U(5<0&YQu<V+*aQZv*OE0NNHoPkBGE_O7U9b;(jZQ(mGI<-beIFKCARlX<iy3vlN1e&t -DR;}&Neyllw;FF{+H8JAv9OM9oq&qvtY()lcnqfdUn`q^&)@9oI%CjS+AA7!IIE`Yw#ocHsltbVe8v_ -}z_E!ZEve<XCOoX&?q8nR!{y%pX0C}f-C(KIuI@=|+zET7Io&-EPVbJ;UPG<TNPP<|OQL-LP%Pr+G!H -bdAtC%I;r{O4-1U!M1BF|Vp@zgP!E&$cAKSJvSM$N_9@DW&D((3%btZvUMT8#DOk88K#%Xf450TLVu$ -fxow(c<PC%))h=8Lk<5cLw~jml~P*@Icl0hhVD!tLrs^Ep}7Vb`q#HEB|~b{BpI@f%TQAy8M@0LL&*j -iO0>RXZ_6Wlzl*=~-`)G&_<31Vwac)ZqYvc62Ex{pe34v%4z&%YiE_2h;|o6|qy3|{0<ja(itzJR_cr -0aiMJt-^_JqkRBto%I?OlJ;pNk@I_T}&skh!dHH^Q};Zwu$emu>)ekcL%t-#%HyS2c|_GWBE9a_)^`e -eTE#^NH$KeG)qO?^xFGH8!zU+$hD?SZ#{UcirUOK~MU_k00-2XA@b+CX$C)o(m4{CS=hS4u}|T!Yb_@ -HssGD~v;~7=N^5@%X=aM&RFdh4_C1_@4r9*;CYk=ELoiS>rGHIWgcB;M(E8_|Y~#47rQVXIa0cSxUdp -o7C2k3BRXP%39xgF<SfZ6m=H;E!w(HM{NCnmzfn+Al80^&Nxw6I<0?v9kG-B^K@P!t6evCOIx3m9H2c -!8nV<KDOTT+g?TBvDBk{oWDWRV>n){rT+cgIo&{Q-e?cDad9`$iv0{IEOy){YPo7_+<86Z<P_;)5Iwk -7}?Ll2xua=U&Rx+WBRV+5Is1o-yF3gZ7jpi>H(h!_VE3M&TfhsGD@Mq9cLfc?x;v7(~B)&IDvGscY1L -ZeODBn7<{P_Oq?+noT94+psE-!Ukgbkzle!n!c+Rd<Aw1?E=SF2kNz}7}hEKEKl?V(2NcHWr{ztKeJv -#8<Y^5pqkiTg`s-d~zz=r1LB)c3PQf^T0P+kdzGy=ZMVi_P<*c7x!pL7Muj)hjN`VknEs$(6)jvgCVz -d>}!eX&jwu<LE@^m*{k&b%~dw(_YYNw<PGa26)ET`w=#=-n1W_%}{UZ&!ak1KB~7~kF6|LkEIFfk!T+ -&y$*g0Vm_@7i!8A^<e<#aXlFI|p=n<Y+Is@<bsu^T>hd=14y}7!gt`;W2j;3xmz&2|?_%xFxs&G?lAe -B!=J09t?>SK1N;Htb`z-C-`^EQH$M+DPyr0#0Tw+)UWZ-vEB7RRrqnBpIXhiEA2SFcwjv(!)5ntCU<# -&kzf8&~<MC&faxze(S_GV}|v%*8vFUM_<ZG_JyfnA~VS!lhHRdU#A?g#BZ=z`tYiFU>*<&0!4-q}HGG -++Hgbmt4QurXFCtF;O?g+E)hXRG!MnEtV75uJBQ{SUl8@Ev#`G|CCeioJoaX}a?DqwiNe9($+x=+nk} -SpJsvNW9Ng#AFUFHPN~<M(2EoMo}+XGfZpDeluOHF<WY4k<kMst@=8%sGK|EgMQ8g4t=y%IJ>tbUf24 -x^~41x)=lRNzU>rqX7|9ibD6|iw0+aLtrlz1f~;{r&EZL~Ho4ERHkn`zB>Sq5I}@*^Cf)7OaLjvGoP9 ->mlh?2%-tQ{$KCpsTwBJsqNt_oM0j(|=X!Wp0t4!2~_J;keMyqAXN^6-ZXQWr7*SoM|wAR{njk;y3HP -}@qu?D-;8Jh!5bYmLb8c`ODquUj&=?2~A0cLZ8HQhR$2v;cq-R=Us&uVm=Y7bV?o<GZJbv)A)9Q?Wz9 -LQmjLEwDTbi@4L*Tp&v@*ygs(e9zOXm^s$!J!2#GQ5oi=xog4$1TC36Sy9v`=sCrlN30<TtfRK@pG4L -Z_rsveU~lwYD2ldc^}IC-Rl#}ol37pwSC5DFB)23egU!*F<C<In36)vl38~Ta3df2r6h6w56yAin8dn -k@uM??q06-wrm^<dOfy3c@cC8K4B8Wx_FoD;mIS=%95vuV`{?b5{XaF0&Mp&cI`_a&8p5-K_J;=C*EB -fUad7lAvJSmYXK{-?b_iZM+6UT0o#ybpY=Aq6=OcKA{}ZM)3O;GH7&2Z;d1zi^KfYC(#opq5(_(aQdO -fyoGLg>xt?Bs0W#~9!pkqfI9lv3qW7}ou_*<eQ?T-Ukv`3DSj$e$Uqi-@Dn{+xh8R+;~10AoqB05g)$ -E3Z}w0)60H4^KoH^9sohdHq?vD3yH`!0$-VdtKT?xZn(vFBH2XeEp7_m+Q3?4Ndeiv7xI-&ER*#+4k~ -H`@A5ai#~&6_4#f?z~S*5_^!7PxB<~CG9=W(<5FRqH{K;-1o7!w7@*N%!_ypv2l?svm$-Z^Dfj?HI4p -+;68k@`KYzm-QOx(`wPaJk9KNjR(Sb6{5#0XIg>rKE?*5=C0l=)<QU=mT_bPj0ryA>#Yd8(742@MAw! -&P?3NrWy%}uc-g*=EADcWbNOjivq3@+fW5(~M#`r=!p>q$`RU@7nTkS7snw?QKrue(Gv)+vScswfNbT -9np&Lqa?xYGN5!_l4O6K1ijR(gIQOYCt#d&2WNXtbv>Yw}sg%i4U^gtBOFJDpDjeBU;!&1uob7vlE*r -oA$~`7EsSPRH|>X<|QdZSSq|^ONG^_&o6X4!+NqwofQyXXfRq@6h_)XAJbY2XaUI9XiM_h5jR56U|c? -27OmB)?eAsu*E%}ZK1gXd1iLFB^vF4Zt-+`QiXmIoNB;P&6CfP0**Z@ot?$hCR$J9!Sxh)MrW$n@H~R -+u*vRehTM=0ZC|8r88KNs4YWrB&1+bwZt-8FbNke$lfbDGv1ow?gZ5!40E|>TQ=TCXCzZqTb2wsO1{y -;mI9|XZ{G9XH7ALdO85<EbU7Ww8)9E<yU2mYz>{DE?k5Eioj<$~c2E^-;p^MS(Lxyt*FR?#f_^DxP7w -GI<_zB<(>7K5Kq=Te?q=yC2LE6{-A;yZY*Y@$CIOo>X*uJZ@pO_E6#PQ*&_SX|<rl8#p>wCj4N)`LJ7 -8&4Bzb-S4F5`G;d&6#(#on+}*$5rK6%s2Rs-gJTR6uR{5PbR*@Bxma?H}C80?&&xuN~91a&rvj_KoOv -^59hcY@Vu<Xh$I9=Ya=}Z_=JJb7;K&xEdk7q<58h%c*~58QIrzZci#`&y8ZTC8a0D93d6=#V7e$up<L -wWP=@^C3yBzKh|LE3=}rTW#qK+Tok^a2-2Sfo#_mRpe)XAuz?=#ruC!LUsaWtva4*6l|IAx{+*tmrHF -krjXIEU|1`sXujdWzavf;&PwA{3_3n8gB_@LpfM!Q=Pi^Nu*qa*op{P^j9AuE@w-ktWBvc50cNouZsk -e#rwZO^(GzST`mG9G3Y+-?Ne(phb=xamKox1^}7iIk@CAMc<o47heTbvy_jhMDhVntLY{MHEZg7CaM- -LUtXAzn?ie`VFH;75Y~)PO~ci_EOsVWu;8=saG>g!6R?ciNjL3-}Mqtefg~(qxT0YuDPpFUimM=BF`4 -Wy|I*&hx^4i+ztAv_}^|gSFvn>gXGE&V?-EM3<G$4&eMcl89e)jy%<AF0KKCJskku>J2=~(BztY4VEi -x_QZ3KChxb{^ZV$|(YXCc&(T?=2DtB?6!v+87?<FCg--iDo$;78vX<s%!QY|zW)$18e^w*Cu+0z2YSR -j`truurh+V7;`8aFzlHRnibn54S=vsA)Co1+Vru8p+J;A#S;=SbZRX5BLXLMYE{k$4DRayj2b5q1VxV -Iu7#c2CvWki+)F0)f&ZNe{4iZ+4PqA3yh4CO39d!x8oIy>kLLnli+<EJ$`H}H9HBewy+p<|zadivN+M -<4qA_&F1SjdUK<x4u<Pwy-cq$jnj5W7p4iRa5M~u|n{W_DZIGD&Muo<ayLiekbj>3tt*Edd-yMc@=HA -UQePK)%Dsr{9OA&I<H%&^WuwQe_JZ|Pxe^-YjHhGYvbkB&jx`5okvABsjh+@E=d#n@H&C_&A(5)FC@u ->&=2M?o^z$|sZ9G4lU*%?PkDT;@U01-&%mw@Judo{PueH$Yh*l+ir`b9W;ELAABrCHQy(INHGXcx>on -IuJ1dpqx6pib%Yu38mP(7X$_W{%f_!*!e_PA;nGLw7cV684BxNPq)gs7YVFmnvii^=6W4p=QjF$4S7q -)_QgZ8V@Wq9RD(v7_tdK-EyD#qEsgCk}Ze-5*;pXm8<8%g{1P`gUDahm~lp$3~|>@L9G$YSx!AlhJ}< -LhX{N2aS0??3bNk9!1<>1>d!&~w1W&1h{D+nclh>cH-+Rrm(xMmozeWwv^B$i@QJrVU%R)11rgYQ)j7 -p@jPI9PkrKE(XD$gR@yX!FSxiYI-k|->T)e8uCA*<)?j;eX^C)c@yZ2`0H@nyV0IY@jSkd>Qd(jMl?G -!3Oc?E+MGoUI0`xbJ$_->jYXjA%b+X8Q-2&5e$S=OgnNe0EMvYMiuIL_W|K0qU5nFpYj#)6)0`1{{CC -lvOUI%U(ssQUofOBwKJ)WJNtdl`Yqh<3)~=JtKb*<JCx0Xb-vLaDD_U)=oAA{0+j)NbIv3*1&t=fqIx -D<jqdi}jjZ^^U1?c1I<;&nAvf6ssfa70Kk8Xucf&Yp2(-wm6c0cw?bZ0Ve_hxduKMS0PZ6dbZMgAM$w -pT3cr?Z^yUcRi~D&?%KEML~zpv3^NgGXs^+0KfBk;f7Lo_s)kx>L4|*dUu9X=$HHWA|0szL!I`Lo=;^ -u+F*wUK3u+&0-xo#TI%@@d?<T!Rd4!QI01I{*%kX3RT2r?FU@_3VgJ?54!q?Gu7}(q)FB0Fdv>R`tp2 -$_fyo3zO_S!?oMWh=?o=RVx>f1qNh!=wVs>~AL4wpXTUTo^kv##Jpu0uL5J_#VmAGL+M_~`Z=~5v^!O -&p7-LCumKft6I^S18JI=uS4O)ErD&+43<nTD;k<OA6ZE(E)|J=||%=-y>-v!An#o{|r$IbX<%B%-|;Z -r`2yMyDN1iYJUF+1TIm*)eMbcU}hf<Hv<!U@zJG!Kb=;<7^v#UAH8J}e#LF?xvhINy<#2;Z0wOZI9}m -Ua%#G}cXWvr;kzR!jB~nlskR*L;>g>y#YpeY6G>?-5&3fAo=|6xN+(Q6oLL?#pIps4v`U5qpWz+E#Zt -JA6U#>x_1;RK~|>JOwiJ*(4TmSP*CDv&I(4d)0mxSWqtWxnX61QNY_^`^X+D3-L&mjpcqeL!7DD2f3y -Fj}KYJd7VDQ1KYKG+WWRjyQjU*tlIrKQ?@71g1V&nstfU>c_e+fzLX~XRWGia@S}L664zS%NKgE@wx@ -~xfe$4a%1bhomt-g}DOMis>D-m>tL{!0`}FtW`ck@>qtFGI-D#rFrxNdK@uPkP|M>Z$;=CU4*Tdi=?3 -T-3{%i(~$09BSed5zmTTW>{2fBVwJ1;cR*g$}>-ml{KHT=Gg-y`_#z^@IzZkhG=;79U;c5*MpfqHu<o -|*Ca5gNZA!Fw-cK;Jvwv*?A6)wHLub~Z52XJLkY?qmH$iC~Zn>wD1aZ6w({f84pN#(nLL{sh6a(Vq5- -ueu8G8YJsVW#OR?MY6ph%F*|IO+4>ul=nB9Lhy^|ocSYeT+bQW_0PfvABEkcGc|H(Z9;Z$3GX|Ed`D& -0cp;~A=ACBVHaQfN7$3I+MjM@9_13Wx*vwKoujo<Sx62fpW_cR(#QCz5(#yT2dV1K$KoQdHd=Iv2tJs -TY-_@*<#waOm^IOgmvQ1=1vj{Kbbt66PMMG(w^97FnB+`2&q)5G`5!&xtVTHyzxq-t@JD+P7C;%P=X8 -~VVEo9Yy6+eS3-PtHL?uKqs-Dw^H{P<<RM%&>}>Mf;rr0;~YS;T^k=Rp@bcXq{tQjG_A0mdruxBGKi{ -fu=df8U34T_&1O#fqFh)@aVH;(JN2lvyFww+{Iz4du-<(2vTTiiXBADBU4Cn@7Z`lfLi8x4ZD|80g~G --V;5hnhQ1Y{Lc4w(Ake`WIk@Uqe9!$Sg{`HD8qX?+os_2@~)xjt`N<`D8RETm9^$U-mXp+wwT(0J5t5 -j8pgOUc8-T0pO5>Vp3Qbv*p(#q{T>GWPbjf=rTxD}Y+gh21f7V(p$jdDN4C1e9_6nfuJGe|nC9>V`JO -R*mxfh3ucVvi?o@&gZTSA`Hiqz03Q|9c9y=3`)c(BvmGWS|7PmjAwMP#4Yx|W6d#xXtfqGH=PJ1P8ot -E87Fi-IK!NJ?F8OVz^gYPLYG+o$-O;0g?h7Ro$eG<==e=mh;O_aX(CE0_Ii9IqsXQ`h9K4>(B$2cMS{ -$2|2*LRR_YNfLW$?l+i^Hcr4s*V<bzkShY50%vb*p!ECmrX186!Pok45#q3%&JAd!oj$4@QM8<1S7NF -9H>K^x7)&cD4wshu<qLtPpD>AxCzfMnZ-H2XxF+Y#<vRh5y%F9+65mE{?uoYM(-Qhl_K__r!xh%@|ZC -jF=G~w8TEX1$OnI_Q20q%p(S(0nK#c;U&`0iQU80<9>Oh&`(|0=vbHxxKO1L%T>WD9n`8(u`2K79K2v -`O*=lpe&efx{U{W-{?*rmY;2!;a7~VE~i$#22V|*?HmA4~B$owNImpUiLQ2vfs`NZF!Pf_;WiOPNyW$ -%cUy-_Q>F+tf=_)j6SFDD@rBvaI<PW?FrmhBz9-$!4kgDah3O6NksKMpKP(fS6!_qS2rcEH$fragcip -$20<_@X&TUv^&X>7OUg0u9a4_)b2h=>N(I{mzW~nOM=UWg)L*%gd1Noa|^F()y9kp)AB_h$WOziN=5U -zCBduLXF=`glzNvun(jd&LWKSBNFwWH65e=v#IDrec_G}t$Xj%=(OI_+Cls8PwYoa;eCJ})cawJt<^8 -_bC@{o>hSK5cC9bYB4|f&hd?{!MwV&2k<}#Xmm_$~kax94$8wF1{r1Up{9`1#GoFsGBVBt^PU~w4=t% -u7Mmiq13px(iV|4t3{m-N0HOD6RLvlM3P$QYNpDx)D$WAiv@An;<%4TeXE@r`IY=+GcvXd41nqBn4!u -RN2!)->EM~Cw&XkfG*8=Xem;RxmBi@F5?!;3mAupNwv^_}$nal3v#Q=<Ol34Y&R<y)u=Q~B8%v^QRjB -<f|P?bqXI+iDkmFjLtB4)@W^!)=O#yEzeDLwi1M!vRO7Gv1O^{R}rg-tsf*dxp%l(HUHjIZ7A5-sJv^ -lgCSSxP$|p7gPsX`w!|nqxYasBHUNR;eHFAdHP2ar~gn~`s?HB8gEa19f<Ey$II3E3tFA;GSu1Ep{=t -q&~ejvy(im+^L(GctbXepIwyAd(S5Qs^7gieI!JFmi@G2XezE(@>L`qR_s|;h{T<x*_rdQcf2~>09+9 -Gn_vTM@PAbLbbUrG{#Ww(ZGhoAK?e1F>i=!xpqJAw(N3h4oM-uLTt?$(>&L4V48%N8r3%?_o@xA-QrJ -UyR=TuD|XE=}8r7QpD(xD_)M0+z)EF;c!@AOmu1o;Svm%>4r74<Q8n&O<5h;iVnJ>uR&=l0lm-Ku!}) -Zam|lAm+}aTC=|voXA_qu7byv+^Xq_KnVEru7B<-JYbtLo(z>EAJ5KL2#tOl)!deUG*t}hogLaYOj=+ -D&9${fv?cJq*xxBFW!}JDfQb_zSophVx{r6;VKi^48{N}m&W$!EE;;hcH^f8VtV-8_&J%!zakf`F$sK ->a&hK8)6T4<zIqye4OX@CzHZthiuTL0hy2yHUUzF1@G6t+>uJBO%EfAvbCJUL=c@dY8g`b7b44m6eEt -(3CtFJAxUc2wB1?yI;1kzCXW?%S&ou=rQ6JhjYxr?f!HJD5aQt!jukd3BZe@Wc(%~GwCa{qD(sesPFl -8p{8@H~`^DCD)w{w7eUQ<R$SqwTpuZBH&N)2KwQC}%3c7`cG(=<stCpOdL;xTci2fEoVcrMQK9MHZQ< -&|P-X^)%x&BQx*y?{ggLB~-)l6gMfh**oKl?npnPjk2}Nyf29I&Z66moY<Z?jiZ2JiGPp<*|H5T@dmX ->mQ(b9OYX3)1vQHpgljR?N>nG@7Mb0bUio)IQ~7cxPLw3e$oeud94fkJ3NU0AJWQck;U2P1lOy<F^-o -#YKg^7x4bIGwUUI-_=sX%A?815=SJyc0^_k?n!3ulIqg1*U7XjcjRTraDS7Sy)AX2W>r@^vl(SGPM~6 -p!r)6m>#c_`;l9B^-?(8%=|FvnuXtLFJ<WOERALCx|T5stc(u@qg|C>u~bm8h&fkV^u`&8<$W95x4{C -w~kOXz%B(#arTyf8m`SLJK0G?mX)72imvsZXGC2Fsx5B*Qm7&uZlP4BuDw5kCI9p5OcVm{&7w$ac27+ -Krz}^3OEVh0DO6m<({fhnbM6{cPg<=S3f)alD1UueSsyJh#N2C&$C4P*0|?$In<<`##cP+V8pL8t9uN -giNRDJWhW;wIjk;IJDKq&;6j7ocfpd<C*WvkxzD<Md;j8e)cD9`oCJqrXQTtE^uB$Pr1F*_$}xlbngU -g2<aG&r_h*>AL(dcx}opO1^>zCX&ji;pFsBE?&+*u=~^CMfwTpDZL9OXDrx)7<|MY5c)n2<XZ`ZC4s4 -9e-3hZH{y!ncefb>krmMu>v66F%(q-avifMlF3!q8m8EbgJWc9@RFPz?ADi6o%qs`Ybi@t_FLs?B)S& -F7Jw)CVx<=AS!I%f4B()!xrn|LPi7xpYs`x-w_rOYb)=~-<29LI2-RUhZS;`1QGi!?Y*1~|7*31{*;+ -Y7LNLo%IpsYVdfb-x1orI^%6kgsb>c_C;~BdxGScP%3OgJ-K6xm~;eFs{d>)R8?FR@)_I_h*hRZ-X43 -v8ui!?v}O=tCaaKHnZ=@oznJ>eRAf=T<}#!3?#;UvqLZC2|u3NzF#P;ozAx1oI!mkh~XvCKhSST^BmG -Rl3DlHre(IK@cG}4&{wBrwNgCxrfFKJOPV(BhY?;w@WWtRyVoObI`t(s+AJx&FP`!ap^e{;df8xWSHR -9P-nOI8i(cqhiMsVmEJEq%JEf~anv>MOaqXcFJHGeju>jg){(XU#meLU{D_~IC1xQz^rLkK?8b8uhN( -zS+T-4X0r?FdEMC-Sh^8E8l&GV*l8ya(`b4%B2XEW2eoxcM=Z$r5a8b2Gr&#wW8I~V;*@H2@WE=y%k) -#AA_iPc6B%U%HeM?u?Nuxsu4>@dwqrExYtw<|M7;49Z!k@s7$C*HN?k)_D1x0}>v(%J$lbAcqvqBT@D -q^JJz4<qe9DQAS9SK_`-`sh0Y??r1bm{LRM@f$VS`MBe8ZH&yv=LKekZUpZMW}ooqA`A632Xqb(Xv^0 -#(Ahy&9`jaTYR>l{$-L$_(pZUZZ^^C=z}|8{NV9E2G{+i#6ZuJ%nvI*yZCs2mbsD|-zMTr6f5+`FwcF -IT)45BEiv<-$;AWhsGG1=796Ww-V!8b6&TC?R8kIeAk;)eRwH$VfEx>)}GiKi2#LW}nb$ms{W85eHby -V!nGjYC*NdM4#6TcblH<gtsiE&f;xHyCMo;+cD{!P37I3nIZHx`34@f<G!i)irM|AKv;&1xpjM=;F81 --|Pp-V`C5OZ}ylu)9Ic?$SORb@=uYaPn8A1*o5z<fJ>9`hU{`-izk(ws)#{nBdo)yeaa1<Y_)>j_~I< -Zi+lk&u?hYPpgqmdVZRT=O3$)UG)6pSlgbce&lbm@`8ZG%z>jWu}^Lydh>GwXsrnG@%*ikO4zDoyI7l -)q>UHpaLy!vW311%RMwuEq7t6n@i7zWB+Y-x*ZlTG^Hk|vV!iGA>ENV!s-+X>sScO8vsj6D@;uej3vz -7yx@$1;Jk{~@*YkLPW;d1f!90Er`)Q@1JY30?;yU)Bm+FwG2(r}6(w4a-R@{sC3fo&<h8T<D99`b=F5 -_Koyzo6-Cy$FgueF^LKR=DmQU4t6cY(U~1K(FrelGC+{2*V$?s$~eq1f0e8Us>b>&RY^P8P$zZ9@KRl -=H@Pw3o>&P-yBc{S@rrDcG()=*RY}SdHzs4O?Ddxy3&~yVEW8mc9;~x&dj3hMhlVjYG0?$%PF6OuDDO -LmJ!a{Go_l7a~s~@=*FAd?Va81D|~rtg#;U`IJcs`75+Dg64~PX8r?g75TvaFUaD(Hvi23Ptqzr?szf -w-v39os!CsrMg6prIG5?GD6<u1(|$nfQMPeUPKxJf{7XUF4HkB|2e=b{uhX8Nv`;wA14f!Hpe51K13G -R1o%kN0fVoMlk0Oh;)Rdpfzf+r|VYB{v=E^-;v)-?I(Ry&&L)s~2t(S2<Cfn8@Wa4U*R^H!0bDt$K7W -i_0)-2j5n&e`cl;c5L5^!kv{uk}bOlOwT{7;%6&FkvmbDnS1>iXtDbmwoR++{RxsEO#7VD3-@e2oSs` -n6!YcpI>o&zZ{h&>5SR+FbY{6Dz#Npg*5uY#C%NgZM-6cS=g}mBHW3$NH}@Z3gXA^AYIQ+otT5Q_X*h -&j;U(j~gW%N1Q_csPBq=2s-a`v!;I|5^Mjp%*S2A-v%u|BQeJ}$R;Mxzq{a*e+&6(%zCLwZF1WgpKC! -dGv}*Y$mjKg2ee1v2LVe(d(j15gS~Ei7Bc7kAzKxswP})dU5i*t#`960WB1RxkML-5Aoe)G8V^px^(1 -RtL+b?~hxbz3e!R1~S+=e}o`P>%XEZ*Zifd?wNV9dus!vk<cwkoJ3Hp9=mX>$cDw;>q+%dm#F1<f6U% -c;_zv^TB{WXni?ezW{?fo^Y?&R+a8XvdO`vUEK!Kyp>`vr|B{ttWa9v@Y8u8*%hlgnI^K<*)^L*SsvA -bNlV5_`!Gs13x{5~9`id`pmHog{kBiJ&DaCO|I<u`L7GwBfYj(%NLyR!dMuYYE!+fM_eAsJ)Ru)k)$F -5y*gHe$TVk-kHf{f_l#R{dfMzCwul@*LS_^UGMv@_hRS!8OHk=#CyD-SwBs_pJ}|Gxp;wmKdXMZjqhg -}?`JLkoP0m09%mii&oSQ5Sv*g^FRDMD!1qPQ`=Z6f)yDZH_0#yiwnV+3U$S_HeE*sH<?(#~8RPwD7Sk -@JaqVa8cf=7spEcm~*~Ko&AFY)zd=C6%xt-6py0zT5c<-^;Drj?H|45bDL79J8m0=q;yr(UW?fieTtg -^Kwt)N}2WnCrxc@`d5Yb48Ky_h4;qzSZT@gykQ%bM?Ki+P5ScGMVjL&ncqD;7&SvlcY!Z(=d`0{xFkC -yxM!E;8_qu^ho`H#qEqdd8r~i2umD8PZACVfk{qI7s|Dz`K3MbJv`8ly7GO?}_tAk1AU@l=CjZch+Nh -#<Dz;)*|WTjU#mO2<T+i<p0CZ|HDrcKUps&^~QUSX|&x@=UgbpId^7imOST(yTw|L+oXGU@QkylT+=N -U$>$czyaQUgJm=O4g{MWp)7Ol1?#JVtb1lXh(LCmyW9*+C_xFdx=iD74e9o=HIhP%A&i!bdb8c+=<DY -Xe%F1)@CY*C;tl8t9bJ6v9K96_Kk;itH&Ggc)=(^SV;pP*o58G?%cDsbVjyw}>jF#>a_0wqocOBO18p -XeC)l`lL+xwQq)Y&`mdq4KO?ro7d>|4-|CslZ-)OdEs(xZLg5Sy_!yY@+cqBv=fZ`&Yqrn%EK;s0|;` -sBC+k>wsY$~6fu%f!l;^w)^;!e|##qc@swKNMNcXje3a%SE66=Uk(FJKa0eh2QYOa5p-X-xTfC>A&<A -ZNv>bo6FJe&bXm@QZCqgji38$D(!dg*EeMkU%P2P-WO|$-btDI#>w>Sy7!wy1=A)=o$`Q1%q2W#{#E) -DZXERu`1WE%KRrg@3DPDx%k)unXBfUdd|vifWsgdIV7F2JHxX^z@pq{&+(@0<IhP)c%@>XFb9Iv^qCE -1}UzHyg?N1+yXqRnXqGZ7hw!KRCeB7ET?>J~{B=1br-PVRkpQ;sT;{;<M1HajB&v2-!25?jQh}b@<ov -x<JTEM4VvpGC{yyqJ2U%TG8XZYiY-)t;>l$zUF%&ojpA6X-=7uSjF!2USzf@#hzpUKpN#|#@cSAmj&@ --YURcFAn+1wPlh=)dW3{Lo@)r5?Y-k~Me=bEgjc7Mwv{s9Rbi>U(gGbS4OIX_1g|J8LYW<P_v3=7n)- -S%bI8vpL+)LQU#)4iSH8Cz+{bwz3Xwx>!%aJYK?-wh7eJ@Ggh;TD0RPoN52WdommCH;lP)UN(DEC2?) -3W~=2L#=wG}lBESox7{h_4N;<S(z(UmFG?7jC9pt^t=dv`R{GtcT#}UA<vq{FUTdy<8+AD-$9`Crw#^ -(rf1B;{UU?5-wBSsr%E>)%_9Oir|9M`y=92dzgm1YuT&LQSQ6cen9KG3pcfFHF);lR;y>Z5T+<GUd^) -}a<>%P{>_0}7>-o4-_Ag4#JcLUe$no;W=?uYB$Y^-;Ac)c4+F0kJ7qt?4RUadD{JehOjydu{-FpcpwA -%CJ@+F5s@-@s*}fqk(~Ki1EUIt%+14)kB&Q!)d;Yu+(&B54cPKL3O$N#k6`!HGNrC#a8PpGi?Tkrc*> -h7}Hl6Vpyd;zZJga6;DcSd{J2lm^$53*pAc>8I)2HUu1?UGiCLobQCPy^ua}%Z2i71Ma+31l-90?qu< -v@Sc@Jr0dU5oxEk?8$BfjPQd)RDXr;@A&EU-BZlUk#JX|)4$v-Ii}w~>ES6kOUH<<5;sQ++)!<!6D&V -*Arn5W9=bc|#%(!j&`vbIRE4+iYwJ6htdQQ|qJ4M%GY^MJi^}5XK=Apf?mLz@8R?NS=m2yBiU}v`*{x -n$UFJe9Gu#Y<I;LlNx<F5g|;r)Z01J<`AS>=`*^9^ggqU`bm@{ZP;RKeK7Q>D#Pw)<xo&k9RU#c`ZNZ -(zL{$KjYYN7_hDd8VT>CrkR%6?vlkYCizK^%7_``*Ml&I<d;N<N*32ov%5im$*Uasav+CcH}P9Z0?#< -%C=$r{r~aj`f1}lGtc$@VRcrX7!IFl%=@}CUY_eOjhyT8qt5l0#y!`qf;zyoJ*b0nRR@jsU&nvyFDEN -oN%xh1mgjz2^tu11h;ckS9C_|D*F;w2xzAV;?&W`0u_AcxKVg*rZA2UY{?~9Uit*3=So`8P=Dm%(4{$ -sRc-?THewZ-(PotloMf8)ViHy7R!Z16E`5&7is`eTC<|@Jqu*(6=7T()1lnl5zE=%50fq6gd8V$2=8S -Ot{zzocB#toN<!Woy?=H-P#-Q}6IKWjP^+F|MX8unddqOv(`bSiu1Oij#PVYG3t(T3#L0E@$D>qEejx ->oWnubfYu*LlCT#Fff>^`^?gS<SiRqkduw+lVti3;&<Y7QyH6Ouy1w(XMH4eG}ydJU<;i3wbx_{yW~6 -8*{Z!OWrbNk_d9{oHzF+xD@{xYr2p7lzVh5aICyvow47_)$f@?oHJr?22hr5RiGckS79;RoPj-k4)O} -W@wfXOb&kvWlo3(4)*@|dWPP(PVJ7Qi&og$)Nc|HL^(pU-Q(x8vP2fCJ822vD7=xUv9r)Z+;)olXEBA -a~g0~lVC+%p~L2kg_r{95`*8)+(bz{6G$Tjch15eDd@{C(9ylb&O^m~=|GTK-=()$tQiEKT{oa6mF<` -)#k+nlL*rcIG-6KCeAHdm<pDrTDjm(Can^^VjV?%4;Kz8~jjhGut0t{vyI-aa(91^CSI5;n)NpMG|}? -C>$G-KYF=v)s2Ce!^vvU(!n$<Gd5Fc^kY!zct%8h`*2}X>cvpM&|shQD^YdA{D!UdGtWX2ak!-yuqR< --oUQeTWc9#7Uc(V#+0JYI`Giao`g7tF)svO<>TBe$GPdzvgJ8hh;uSm$-HvBJAtFj?-vbISB4tT!ykq -B_)iTuGj||=XBhSeu5J~3KEv=|x$h%I+gO(OZKs8@^>!HdEUeS|k=mb|BHF+DFD9+}-N&5c(fV5zr%K -L2Q+6)Y$I7++h2GFfp6E(Fh%>S~gK;;+w<<FszjiqE`c1!X$t4~A$!nk!2JPy8wy>2nKWp!%+#|qKli -sua>}?h=Y0o6!MbmfmA<8ba4RP7T<CLkv`;~No{<Mgkd4cms_wjy<elwo)*KV@i>lv!a(l@&ECT(e1y -L4z_rU-VTJlBW&Y8U>FU~k<x94cZwtXQ=A<M<fPA=?=1q(0##{ug7+T$`)Fk2x^z&rEEp{2^s6j45!B -XJ|jhG$+ro1!D`kflo{0#R=+mJjclQPMYmGCQ972rNV#SGcfK3?}VzgrZn<nx~Ae>Ou_&BkeV~?PATi -S&{hj^*?4c>wQZ%o@gk9SSC$C6><Y(Kf4Q^&0ep0U50UyN`R?M`%ooe&dr+QbI3~>XG5e`6NPS3t!`( -x<lZ1+`nS#BHdG-w{yVY^|g$TVxFUG_;o9Tuf+$7)wZB%as@A@<R%^|OYzYY<ObrJRx3f~J8{uzKjai -qF-<q+==-+ndJ)>vCOv_jfJO+2w66sn4O{~KkmO1r**m44Da?Ji9lTnCzAyHDFvfVN*jKU-6-k#X(k$ -k_M5{k%kp`}Aq&9fOnyEMgbGW#C)jw2a?DyG!4;NjTH+%r;oQ8Mw+iT%(@zp>FE(9yu32<6_0ch=kuU -toKxl=$1N{<ZFU*JY{M;nqliWB?j&O$~mPA^5Q>aO#f)Oj<zqBur13bY%4kctoWuw;K>e)#aUaVt>K4 -jDj(OBpIWD-+>bq#+ISVtIq=3^7Mp*^c?I`40|zI{`{uE>$C3`9AI86NppPlo8?_ks!n}BIK5bz&*SK -*k@!_Sz==-oH@6F|SIp@qZ@!o8-g)uGe0<5bmv$t^m`%o6+Tf86Rn-dBZnRpQ^-sHIBDvKW1_<sMAK9 -o)I_F>Ft*IK-jz|%3-2>FsB$Ud}Rcp3Yu)uIP$m2c<sQ)WKjPC8eej6I($b{)0k3<}7$&C<7Yj+~!Ev -w8bxXkB%9zPBvF`|`E=?vvo_*`D;BOc0OvB#0{V)<q2~hb&@EWx2u)=`$e=Ti2adu}hxWz!BT9q8YA# -(IkJ+EN!9f-eX3cM<7=i_Op*^%fjy;%2GZRil4B_b}S=&S-3AVP6&9yU4fL0Ry*jUeYj(vj3a<=19(? -Hyma4^Vf#MQrmmTHj3H_BE8Cfa@%GOs>mp2+f!>&~lkH+ZNPJ(D0C+3@qu1a$z^`_%w~Y0nT{vM<t3z -`<?>5FU0pl>+d>b^7|7#-b!dPC$QotHHHRtm)jCvmzuOZr=g)p?tN|yh%vSev1zhI*9HbK_DUFmCmb2 -MW<5q8Mb@oh!_wBaB;L9=oq=^FE#OgH?UBk6_gZ=0R}H)wn9UiQVkxY+1R##D*&M>hM2wr#o4dC1r&k -oTnS#G*M&9|gDUH_rk2#_C=$1-t^<WE{jHYrLCr5YJf?eOF*CjFVAfi5$x$IhMd@^x#|8$-XzOxxP27 -Igoj?eaFF1F?Wp-XGq5Kn_?|JLK^`yPuU=2K(nnpo1}q}b<KLj50x+G!f`>P)^CGlnM1*IjYF*;=0zK -okIpNYrfXwiYWjG~yBis|B{9N=e0)D3+23BHzdi|93CAYR^ZbZkYD9k-Mt|vU`j#Y^{q-e|vY{W(Z$_ -=3Q}vhU9O)0ZSNXe7)8DoW^*8$bRWNmq=)o0ionH3agMJ@EzvOd@M)f-qQ$Wh<^mR!z``(*q_!6jZX8 -#`-7mW813f|7q_}iz(qC>u2XN={B7-La)1_~cXjc3`&c-$skitUH<3HR5sq|xJBlQgownk-}Y*Nx}@_ -xD%2xxdQ(H}+QyeAuhzcxq$~k`z8LCYynWg)#7uc|<rq;-XdQfPB?C%1<nM{UL8W=H5G%XY~f!%a)hL -d9RCWI<!=?4blhp?R5{d)0ev9+hT}v-!_Av9B<t6PE(WqOpm4G?60976KC{Fod4C3VL+U_<@rv%pCPj -}u5}HW{#hoy9Uo7Xj*T+Lo^<ev;2D1fxpIZ#(>9>+hMn2Mzwg-fQkN#;(9h{F1nsY{7+Q$4m-1-W1QE -<PVl6XvC;fa`MxadPtMcw?R<(+)klKkp%=%OI3U4iQ_pON^p<8A>>Sg%sdVS7Nce*b5LFT;Y_#Pcrdb -8*l>mOs!9^7>#)K*JBJ;TnoAWn1_m@%R;ZsrWgj~8i_X($ty#^>J2T$y&uO>;dCS*N6*x=_ZZ(<0(a$ -7{@Q#rWoo4av9)GJX$r<?OFqGx9=cMtt%V>0_T}$L}W8dGLtxYZxO>$n|;3@YgWr;!?Kx*A7dWcSAa4 -sQt9j?fZfM?i5?=PRP{s``gO9OtjsJweium9C&Sym}|K<cCOS9?iV-BiySZI9@-K3F#j&h1u}2&;pM{ -nFz86<Wg^%$1MOdl=Lz@*zO*x21b3_x-tAV+yKM((Jof4qoW+dQNB@D(4|A@67_)As&QivsH2ukFtGr -zKlTk+(3RwzhXAsM$tXtk)VSTbyyxhQK-9II@IoGsjj*i1S66@7~L0+7KK`-+qT%mVmXwC}SDt1^zJ! -3gBkHX2pP#g2oQU8>dD>ma>9d${u;wTw>ob<0Bi3w}BNSoYn4BOFhWkoExGAh5^CL`tx=R3imMT}p{* -p4Ip%yi0JOVWNCWA<iCTUdD?66psJX<tk_(LwvxsQyOU<i2M95cBt>1ewQ&u@Ub02>S|ia^^RsDL6PC -k@IT2Uvv?Mqxe4APdFws<6v@cZ$Mkb8PFBRhYre^T%>WS!tcryl$n{6N9~_Uie7bnq-?|G9x~dOb}#p -dE?bW9+rBKku8FAMqYb$-P(Q-&D2AN6!Dj5K0_>^GWy<$7KUo}n0{e^iT#Q}66SQ{;&%Oxw<YT@Z$Cg -(@ZFPW$2e7bf>9cEw9nC%i7X9-)?iQ<<$8v2bN4Y?ALLQ`_3FPRlpxxyEb1<jQwM&OE|88@x{B6q00< -`lD?4_M}7skKzQTWF`R-ung7Ull|e3kJzV)F^3?FZ<`X&1EBkvbkf&mUV$nV-638Q1M{eO2iiQQw0zh -Is)?zpcsp=hFRJJ$=JU|EAUFO%PRcs+GMt<^B-kzu_z;4V;q)83^xA@*Ubtwh3>Fv`ufSoFEv}NcnMH -O+S77T_fWnFg|dK`)%t4+Mg7<zNppji=z*RsA3$S9>}$>N0m<2^|+`P{GY1T^N!qAqRG2U*Fvp+nL|| -l$s&qYST35)JJ1!DNwcM0m?ihlZ3*-h%bh(Nzc1sR0{(v^K@?p|yU+yNyjq)>!|`s46LWZ%{{z8xCeO -aom`ev}4|7zz7Hjp4-{xw;e~#~ani`j1lRm7jgPPPsyZW^HKH893vhU;>xx$h)o9*-`cI5JGZA?hJQ< -MH{X|u^Iy^H=9HDt*6q~GVWmO1+h^vy9fqVIU4j=W2>q^h>EJ95c4t`OC8?S>9zg(X9NBaBN?uXAEYd -$N|?+W%pwsM8MKP>A|&t+}0d>0IyTEA&+^W4(Vte_OmSw~4~EGvPa$=YVT{pu4mSiMH=h{8qB}7AePP -_#R0Uo2Q%)6}99FFKxo4oy5#=AB=yIHyo-ew9EW?W5yuc(^9<KjrP7gsC0fFOUmqpTGOF4!>&auOYtg -yuMFQ8M#@Z>ZMQTXvYTbrq!{{#4BzKbraBlxnTfOaqh0_oYObx3{nF=Vy~W;I9x+baP^jqCa#8Z^h~0 -|0kHWD)dyRWb`oLcbTHQBI_yg<ol3tw6;5Cb=Z^+?2Az&Bx&rOxb<$Ym>v`gN1k=QJ-pP$D#%THYIA9 -NXK^N9)m@V<AtqvG`WNpBmozzcx(dUAzd(Z}b;@PUfgwHf@EYs3#TK@*#4n_w%~g8|0%v53t9r{Zr+A -IxZeE85Th;&U?hp5(RM*XThxR*pSltkv}YKNpMt8Q(84@tlgoO`oCaMKV@y_t(>L#x0U@K{wb=Tpgs} -4&%*r8h%WsACGOK?k@+-UjY6!E)qfVB$Ga-|LA$Wb#}y$KS(`Lp2ipudhjPkJcIa8+1}x^VK_|zoSHB -n+egYb$@Wp$HwkkqlJhB3en~p!^L^B1pMkTZ`y9UaX+_8B^94K$xP-j>2@v=24*!Gnt?iON`f&vkZfh -=+c|HQ*AsN%G|1$c&H&r_Gh5tBx#;z3f{eQ_`Hr>m(Q^$^j|JtN{%D~G88K=@5UqzSI-;dw<*Qob3)R -i@84XkJXwpIQI4GjJV_QUZV)In?BzMZPAZPEvBte)TCf4UQu9^ZHUSrxZ^w4ap0N21N%9hR<6<NlTNl -=)01WBx8RuV(4@W-YJ_8M^~==X4p@SosCoee=+MZ#HngSPvGSl`#u~Vx}IPWj@c+gIAc(MS5_C`8*x- -HlGXh;B@o(b9!*9`CNwio6mh^!He)LeV-%z^k`=%`P}0MpNn@_g~C31(Rv-ynkMW4-j8!n{5VbeJ<0v -R_aC<>5>b8=_QVPq8ztTM`_x$RWJb%U9_hC}I^H@M)c3b;obRU$#4~R7IVD>&P6^|CGOq~a%|o<vVL9 -5LZ8#_6q!elmiWhn$sOs?h%iwvb|NZVc75nobzR}*9G;-}Z`f!ONqn$(dpHsG!w3U|hJf!OU4t3;M*T -jv|A-yc;YVbr6wDI3QV7<}s#rWTEGUi1%enH)T_)HzSj`N;#YBJ{ZHS%+iDa|>3GpNe*`(a~FmByU@6 -W`M0-EO+?i^iOcb`C8(r}$enr*xm)n9~nXXQ#1Nk?U0Y!PxjnpJbiVKfyX(8nsUIW31D~#++`8Sf`w* -b;^iZr<c#GI$s@Uono!gD1S%kgKGEsu#bq}!fTQ9GUBSr7@1Fp<oUnLh%d4EEc%Z2SB<1MfbIL$27I_ -resz}l5Sr3F8!aPwH%HxfMZnwDBp&yW?-Sw#?LX7Crgk~6yhJbcD!jWJx$hIB?)x6&ec#*fh41@*o)+ -W2PmI3rd+fst-}jkkPj8~uRfhGQB1CYSVSmW-&z}g#R#0%gaQUBpFuHs+-($uTl6nif=zhhn>~O(v74 -5Xkn34?@A{^WMG<Zjz7w%^|D)W;m!#iXg8qzPTcA3|V|1a~qK=!6gM7xhEk2gu)HvcDj5c24*70UjTF -)bUWNSd#glqZa}#h=N2igKj2-^^9{cG>?lJ9wu!QU5*ZmuRi4kg+Fa?y?hafG1~cVa7ts1FRP(iOsA- -yv|3xJ<sM39@nVn>M3Ciw<&nn%NU{)7;h_FpKugt(`<)v=(e5>6_tKC+BWbY^8sM~uD&?K?|dx(#@Or -Iq+hBD|KE)G!yTU{8X)tX;2QkQp`YcN&^ExxJ0at<%#(6~jQ=h3=LPQ7f6Y7qj9D@H!!U3E!Xf3iJ43 -EnoUa$>QOhgp{3^hjaX$1-*k<HXWW4*(1SN0o1bmmMn52Hl;q`Yw#)|up`(5|b*2jjmv&D&Bv@>-LTk -H2*WDbH8Kg-q6c8!W-4SN4vsO{9rFr0M!4;(lAEz+aos{d{jyjEficga|iqJ*-$%8M-g)T1!Y8*RGY! -WnGFdgD6L7M^`G|3I%W?6E%z6`AuP411Lg&M5lo3TX9v&xXdG$CojW=Qt0;Pi5sH<<I=0AxF^GY58Zx -64NezG#{k-%yXSNHORA!oa-kR`t6+y{CHPO+V|Q-6`LiRPm0;z@W;3J8^<{9UEtn2B=fRrzP<{TE0FP -I_h9c5hZqZ-ch}6jc;q6n<g7K(-MzIV_k))~&#n-uA?&FD`dt+Ps{#X7k7M1a+bj>RJnR~Fomd8X8`u -K=+?wkSSw)b#gg2}i(x&yeHOB`z#;;<6r^}oHzfv(T3pt*jqOEO7>K@|c49KSGqI=&ZA{~5frMqVGl8 -Q1d)hR@YD@l}WWWQqQiOzUs-_9}6256r}ROVhR(igfWFPVF>NF8cyI@EyoOAD_1U~&RzC+2Z4%2S8BA -KzRr>K_!RcC=HL&reWoeG}zr8@-abjxc^1ixYdywpz&t`C3m&zE!nhe^KAKFhO)%*tXVth`P!<%-n~X -wtfb_d!|3zPG7MZdqrw3{x5w)`FxdYSx&}-ET1SA(?-zpIgu`71%Gt)VcH089}dmE#X2<aIN(WGO@#c -%y9ms&ur5Iyd}ne~<?R?tGkv)y(U&_};>W$GT*W+B8?|hSLmlXE-+)M^tkTS!)__lqrfk7ICyo|F#!2 -;@a20dxFUmcV;not=I(+xpP}_?6g{=Xc8;{1*7FyJo*G*nhm-gd!JJy5k5cap*g_k&B*K!WnthNKCnm -FO!*4)nj9@Oi6ygAnsFG`kfn{Z+a>I_<wd``w9U)^-5Jb8aRebXIX_ANGy%?>!VpiHBdG|2fZ^=c<rw -k1iGjV#ChX=BZ@SKAkzb;{Us<CiOs_}z%{kamnmyVM=m_%;Bs;_H8CjdwRYMCu^+m;?P)Yx?j~EpG6X -ls7e;TUOtKS>I~s8Qzp2Qn}yGV810!hHRg%```E)^Y{t(aeQBk@2*{<elWYEooh4jYDasg#c{x{IS-U -;&Q``x5n6idHcLzUFD8Ze5$y!unxU(`hj#v9&33E%yKsKCM4{sSeX_i)CO=_uqy2i%vmLqi>DXJCkL$ -UDLGqrAw*dO#K4p!UG=#ZmZvP-mFD^c)=!NvPi;*X=&zdNCkXH_e+U8nho=`vM-jBJvwT#wABS&yK@S -QRLJ@jKVV$kMmjsuo>`b#-{I{sUFz<;9tAZYwk#Mxcyex)6-X_YY<MSU`D<Kod4bD01a@{PUiM*FoFi -{gD2{g8d{oK{z&czh0Ez21@znCG<e?r-X>*<Q`s+)g-72ah-<Q502!UVM{rC2Wd@bV}VsPf6)s@JGC_ -OVItv@nZ2EVrcF=*5rzN5<q{wT74aTSQ11|=j!||_TlQo9!F2fjMee!x38{n0^cibT9Wg7yX=!a4wNq -tvV3P;MEMk!x5)A=>q!wM&Gsbcqw%&1Pg+ljO-puq(nLwAQ^?$SHqle!+N<mZsRz{Jg!hR(<LAQR{@4 -Us5-SGmL;FK*v`=w;dvNh>-}uHiM#rBD^Ps)bmn~lU12X1W8}Q?6SZ5z#k^?&PP4H>ufQ?Jbs$;CfQE -R`~-C7PDUs^M#I0rP!{KoN{w4XGS@Fi`!+$#CiA`|}PFSrJ}^0BRKW6o{-twbGpFJvJ;rAOgY`T>3?P -W2jjH17b6R*^=d&dO)=Tj|Hm-0#h@enwRN3<DoCeAwgOuM@t&vrUZO9)V};6`uH;EkknyR$B#Q^E<Q~ -?|FH9bM8ucml=C()z22Ts`k@;UqIVy@7Fh(^m_8%3$LZja}yPNYOFo5asNR3ebBGdGFM2vwBaEA;+^1 -e@Cv1?MVIoO%5=Xb_kW`Ml}QF2TOOuk^u6Gkk#FOg&cS{@3fh&8HQ#5kAJ}VAd+F{RMZ-YrN-k1ouC( -ndO%=2LY1<9=JTHBq?RD#E>zbwD(Rj>N{Kh;z_)nOd*_ZP3$ngCOWKBs6@%_>fS~v-`FvlHP?sw;v95 -tT3u*stpV2=5z!aIO@H458cFW|CWNcpm)Nej!c{iFkmH!gu3^SJ9GQB3?>9w!bqqYd&iGaFn>zJ$5`J -LpNjcBS`WdrIr&4Ru3|w=!VFn-0g=PCCH;0^bGQ#eSZFvH{eg+-5<YxOc<8R!7I#t55G!`iRp@wNbjN -W*M(T^L^#B<g>EYyTPwiOn<d~1^AM6j4?YEJmS2LT-q<cf3euyWEDlUq4S_Dc^@~*UWc+Bd5Wi@yhlH -K#uKB=ZOePL9cy^dtvS~(1+PVWh|sgjhizY4#d`ZQs*MWpFyz4+!KV#EMuXg)#=91mut}Z&9LAzSzX3 -7y<Xg0F7IBgWtPtvb`A4BA&AZ#vOJm%tMc7%87k(!qSKuJvc*>f<nEbo;ydRdg{^L(d-U40Es0xL;XW -%ame|zH8{aR;+wwU+UJZH=Cn>h9bYtFn!u)muPepuRFV&2OP*w8NW1@NtQ@QREf#`jGIkJ&uD;_!eq- -wk;;ty*)<ZXRwttN||nz}SuhPpNnKf52(xM+i*3`fw7;1i&wZ#JwM6rFP`*`Ic6HJ9*DIjH@B{PL6R; -2F99*|2bMcWvsvq+65)KPlFGqymg$h*bEv++n`=+vhUrGLTy)}?4He9J?~lf{79>3{GXA!));jYRo!> -6mnffZ1>InbGtvnc=)^IUmHJcEdjb0#a;9J90sxJ`dr2QIQ}ls)uPLDU7A@1+4EnGJ^x@yL!~6|>Y2U -zD;<)G6nR{O8C6=Op=O>)!hT%|~;_*h?u#CztNO}mI`N<wx_Mo(5%hLUskPGFV^Q@#Lopw<~I`YEtP# -ci&ed?;7z`kaTBEJ8_ah1!NK34qw>~UqY&F4LMre7Rmrw&>Yy`F~Kha4ID#$=fjGkFWooBbBMH~$Ts< --<n&q<B$pPf%_B>bSD)G5dNrs;^%}^!2k(+E*X?vJTDV9T@NS`lfN+g!i++3t<sO0jtj3sZtjB9`^ZZ -eD8VwWHHwuFT(DI<)jU{#a8FUzNem{H`F0><u#{)w%f(xmNent51vS^U#9yEXbfR1<D)TGr6w9$EXuE -9y}UcmbaTzhupVb7lXo4P4={hCIyVX?3jad1z4l`IfAii<loaqkXfR{<gQm$?yPYyes~+sa+7-NUb<m -;dzb@4rgJzuP==%>Hb6@(R%7x1NcJAx18Nbau#|r`LAEk`8`53FO9BmKtrkOK2K@_s=wMLtg*P#zW*= -1hp+1P)n@lA_2zAd}V>!TgliR;66lcrt7k1$@%R=drr>|`pw+*BFs&Qj4=>Sos-dh~3lt;x(Ua8lika -ZEPGS-(?wF-93PQRST${+g-E&yw$%Z;s`I5jmd5v!~&FNry+-wM@55yB4VjIBnRqe0dzZ7WB*e)mZT^ -)E!Hif1i;@vHZO-Z4bVvavk#inRyhcb6d(Y_I#*n{qb;4MQcP(#aQ>sr;MCSW*#V>lgv9hGor7*8+}c -qAEwb4<N2~LQ}^2TlHw7?kEJeiS7h$YZ(ux(ZKC{xtulX#)LR11t=KQreWphA$G)VEkxeYVP`<-xJ*E -jS-b3}Js`;zDnz83?j-B(r?IqePDj0B{yuWym{x`;4>6aRKH$284115~M!#Qi1Gh~xpGVgK3ypN=c&7 ->8HndBwY-ETs^1TFXRES!qD_oDpLOVs=izWYC)f2{bqN^fSBa<7p)(@mbiw8eb~^I8U)%JJU&41My_> -(b*yYWmhqxy)H%=)ewz?P$~8Mm}ISbvnTh%`<3hOjuKoYy&;)2i*)z6Afm5RMJt#IU)>ffPF9Zw&01@ -N}p5lm~H>1Ugt&nVS7W}D$upLGH+lD@T;b-m~@ylQ1S!xtN4i?Y|%vbbgbP!Duj1L=Q@Qlh28g5Nb#5 -KgK+J=Om7H0XTWvBSbcBIc%RDuVb^UD>y-1N>8}{34^g&UVVb~m_IxO8Ul*?}Azh#?Uo5-70mfpI@5Q -M1(RnhL8T9((#VQXypGnhR?+dlvGFA7}*6=Fugf^^cHRv4kR&{EU=dWiBFWN-TNNvs?&klq(Apb?(w9 -&6C-gW1iIMruQpJA74QNMrFr_SzPP5s{8r+i`gysOX1oedgapc(nIadsCN`LoNXCv73k>SC;X&F;1J= -_Ly%a(s4&%Wjdfe|U_ON5f<)WoKJG?|LF_3klni-+8tr9;pvqTj>GKWe(3;nfF;NCjE!}?$tGU=M#Lu -(3dwE|6M{GyhYssN}DPE?rl?N>uCNwESH=#;s+J-yxFev&Z@B5p$F%DfOBs<<f{8M+A{{fB>4pLE24- -ty&lWx@|PLqab_MG8dCRjybr8)(AKddm+MHLlm7!a?>#76lOlrD>CoO7JWd17<?QI3&b%|C|L^1RDt} -Fp#$5KJee>486KZ?-9d*aTy;_6u?XlPgYp~vtV?2LCjdAPQ#>0OaXN+Bzv124J_OA}+$FaMk$JL5)F+ -M-~*tO8`2m3Q)kulz7S~!OCn7m-1^JgZE&iQdt<qI9N7B8I`y%v><XKNU5Eq-T|=biO~pJFYxhS#EmY -Y{uAP=;}@lkNVu3#`d>tjD#+np}2)HTkhIR?_I&Pq8L?#G07nj2_>$G1lg_7;AF|v~`rf=!N4<_^6K^ -LYpb?glX)a14@Ri=f1Pbob!kFVc&)tEnS&BpCI3qTSfPh_@>HJiRy0o<O0sy<~#KTQ4*>UC25y1b}(o -o&**iLIrVJJ1-4n{UY0g?Hs7&z(tcOQ*H{@RiuQe9AMy-`cAfmn{H`ub`hoo61)DNJEAlU<-+j8zKD^ -*?qn0`N&bpTNNoX?(e~;oUs{OV;G@h>4rcG*n0BuadUkBsUgO6fPzdq|EpDAw<9#0s#)TWS!LI3>!=a -h_A<{o0q^E1|5UoY1EFBlhd)0GSMXNl_1ascb%U1-fd5Wv1TjydL`f9B@ee6h@rS41A>n{|alo2OztX -g6ESZe24Rs>-s4^R~sG;F!{VotCU{411J4wQhZTw(>{r?)i>BbPi|DnFR11_{JQz(*OT`)7N5rzy4S{ -pU?l!w4aHcM^wd>=bW>AK|>cpo4C>Q&yxAw0@gxb2z;C!XN0Niilr|LSTb63q~0{g$9!H}-dBEA;EB7 -H4r3B{pB#DjcQy0GCx{}=nsMMb;CT$=*oyj}$NMRGU$b5B;yoy3oN9}-$=k&oYfWhP+warnPRS>~#53 -<q?YvK3BfK@+MHl15Kvp@B0erKI_cwN6kK3422{e{^KiZ={VwZldGGEkBB#bkC953@e^4*W*yL9*Oxi -^zCTC1muE_+f|E5Fr%4s2k*;157&g5(|SdFVSq?lBn)GS-^B{v36UPlxpj%dK6(X-dcNt*5~YKIc4W+ -N)CUx^t4aNyc*mZrYv^i>3U(OT`(ixpZGU`09CT?`8O^05_M&ko&=o@}>PM1_kq}(#{O~x9T|OKC*u^ -e9Qy%2=6{4+U}%&6>X!Bxdn#oYL{^*G7f|q6T4`u9BQ<6Q6~WU5M*1S<(86QVsrbg;OPR1${xX%ta2g -C9GS}ve$hIbU!00^<VP1`f3OVWlf*1%*bl|}Mtl6e=QOFSe`i?wpakQU9<ttCgWmM!c6AmgJKJOHEMC -**X9)1)JrD05qTw^kh_(22^u6y=y{ka89he84l5=j1>*D=+s4>1PG)DwOJG7GNFNW<gM$LbmJ4SQ<cF -zBJ#QdYnMb1Ax#{8|A{~W7#0{s|g(9TfQ_ohGCF7JE%#@$aGV_}Ix{$3_yp7t=`Od;p2_GO0el=5|T& -%qfU*ilyEkv=S$zE>b$O8D(n@aqHoxW{Eqt23dZ=cnpjcF^V-fKABal(<HFFzYslS5MAvU8ZFp;GQd+ -tYSpSJN1b6pE28CV>4{dRNH~&^HmwFY4>|-KVpw~_dXSB3r-{bS<n^M0V!Ij*`za#C_Epw2S4o`%hQm -*q^!<!znr?o2wtYx<Yg=dFQbhvS2P&D+vL5bteZlcU6En(D(`+Quaf0nU=^DgkDwq1uX1)E)HZog@hX -{y&l>6BzH^}}#bemU;W4t@Gp%EJjDZ+D#_1^gG}0x)Xc^!eT4z5f$CRhWM3`0Gryt%vg?xhMHRB0IkN -brIDc4mND8JG}Czn_xtvI>F+7$w=3r*8XzV^a@k4}`n|39P?(uP;_-W!rKa}aa%Uhx#~Mu<Pr`EkRx; --_&gK4I93Q;*afVN+kWOzN6m%G`FDcPsT|;9s`kyqgL*E#0kh8Us%<@LT4#n~nZ{KA_$+X2*^DN4Iy~ -t#RImah|lIoww1>dM(b|JbiDcXZo7X4(1D!x$S`uc;C2sO(*l-?8Unc11bi{{QY6uc;-wQFUN*iW{M_ -l#y3RTw7>qY8Wa6z88esdc&?!zr3khdxmYUjyT<S*sELp#dn}N5-cxsKk@AIWLyGbT+L|K$lw2>T$a^ -5EuP96Qx?W4EC!Mw{|LVttmh4S1pZ6xoSn%?BO_DdPmmRrhcK0efu|vND&r3PDRCD+lr;hRXcn=KT(T -~0GQhuIY>QS*@XA$Q{eS_>AX`d_0rHNVFBHAFomkyjAPq$>|T#lvZCGFXCi;U&#BYqGce(9I?vKyR$z -X!O~F<%UIq-ntdeD8Qx3^}y)107kAv1?Wo1J;W@S)!Qh*z%1yuLro|)a(ZwDC?=IVczq_%-um>w`jeq -+}}>cYt;C;zb`sSy-an2?$5{mVs6782V<Vm4qw56@_^ju4pC^6ehT2-(Y{T_ON^`E0lag9{sq3KmkjO -@CH-F$Ug~b&Mmcx9UP3z0a=a&PU6^mwbJW$KUj9tIIB-5xbSwJj9oj#3V2v>k`jqAwd^7Xh-Nx^Dzbv -gR_{NSnZ^$bAarjN21<MqJzrHBCoNaVDU6nhB^XK0IH^z{B7yUW#E*WLsLc4FG&i?88s($c2HS;fTt* -E)JIDZ-ACtWl<f0-yDUiJ%{@$DPNx5@IGjM0iVD{8Kk@h7nk-bb+(-y3F38j(S{hHzqEo^Pud;N(X=t -Ht8l`T4E?2HtDoGR7ObXm<HBmGjOMZ;|ElBg&~VlV{gx)>M|e0`=H;iqyp?wWiz}M?0s~2aNt7{U}s~ -b@rYD9XjcZ_8T(kTtx2536`$87l|cOw+p(r#E924oxZ*4%-bs5wri;O(f#15>rC5j`c8>!nhte*sQCS -pIMYvoezA__8sItVT=Zn9jk?`E7WzVExHlSdVn>3QwFYyn?hnhYl-syRo_r@P`$W<b#?1fHKh&5U*Tk -lAfNv4Mi)-ZF&W8L5`nC=2%G{r{w@p{^W-_l4!TxlE7M@t>cVkcU-efP%+sJ%Porcd2^EE~Li`0XEy7 -6p?HmZ`g`q0)w%@TZZlzs4?QF`<i-vYncCv7}=Z`-^`<qY3+tscCX_o?X5hcWXvZ40SW-wIl~ld%%ct -GRp5hvyzpeoB(2%iMv6o^v_c*opd^t`)(W^9JocAEw>x=ZSY@oW~KLhDaTR{Y{>gqx>-*Yfke}@5lZg -OUD^#!rB8FiO&UP7klMcv`JpirK0PBlcBa_>K-j^`Fyq4d9Tg&Xim#7iH_}M_BH>cq?3<neV2J34Jp5 -)@$PG9?N;}-<XP@EVhU!Yi9(JeYfYYv>F!KuI&{No{cz{~&Mo$uyLXpr8FjkDi0htd#B~Q<?6BDCbh| -+p`xJlL^m(y_bg{_>S=lHf^`{BK-w4{>n2Y~ci3XfM{zlO7#w_Lk*MYGxm%}I;Yn66J(#K+JyePa&o) -4KL=fkC#3-3}_8g0|&K#K#fG+8g{pA33zVH^RyBmlZQL(@yZ57d>**vQU`TFk|Xzs^Oq#dY*$(=M6ax -ya3PBDIe4J!o(~XfWlx0$Hx6xOCWB&zNzYiwcUD0|q=FQZa6psYd^%JO~-szn}4EW!~3Cep{lv>r7+3 --fzk|WRJ|@)RXFrODxOtk`{g+@BV=Qf5Q5A&Q91em~3mU#n@|k4~V&NPS|^O)U|&R<JuD+S3jTp;i5a -_*jq@OHJdxIXl60XKgu;j`TdZ6YcZz*&|T8NKVr@)cqVSG+%5_TXT}vJ-RE3xpDnxx@GZsKbm+x2jK! -U@g>WMM?rQL?YMCxp5l&vi?<ZOL$W-#qX6uu&@1V!}VQ6kM#|?c@KeSriTlOp3ReOn8V%zI(wco0j0R -L)<L$A=reS#6+;`Q29ZY|S6m=kAfqwbSG&HWa};N}^)PU$2nj~M#-&hPw4p8d4hZ2tC-K!0r&uIZw_n -elzA!1GMsmkU}n&(#UJ5j2PEDSZYGx6684$wR%eMLySX4;)d?Tnn4QS5)KK<S`h}BTrnMCilQHZN%@D -Wo6&IW5JmEze_!<!sY034Pad57+14JjcY>0czPqovoK;j1>6%RpF@7m92>{8Do5TKa&FXb1k%4t+vWN -<)4$VR1NeRc^f1Ky1y-9+joUsl?pSf`WSKQ#UQ)&uN)X+k-3^1-+vJh@txliqb0S^p+h+ExQu;Qhj5A -96gt~Y~t4Grt_VM0J%RFGW3-3I9J8sQ(N6VF_UjuRDm!OSVko}HWNW-&yPko^L!x&?|8|MY>Zp`}hv0 -!_V^?$1F`wG*Ic&Qmu7n1IK8M3JPoBB#Q$8B~)UeEMJ`iRB0D;|CRMZ<_=TnTxV{Z2FFZ`$yFdRS#hS -QX(L?^N#jK>7TwFxn<hx?So4mCexUZo~g?Q0gEe=49kwh;a^%?{5*-tp>60QE-?0t;oCSrZgY@91^9R -jy1{hl}{0yr4Gs}PQ<0(c(yuSR6Pxvy7C8lFgLNM<VidS+VvpL7{k6K!?!|Hxhq!wKm<3(iCw!;=5@y -W*(iOmx`RhUZBtT3H`_4lmRVKZe~qY1y~0xyL?QL6yqCF>zV|;+dexio%=%RmfVUf^?6=D-Hyz)$ZdB -#IglB%YrKtX1PFDF<vaMMM7~9_lJXAg(HklXp%`?gmk$jB3=1g(vDN+AVlk|JI4?DlF4}Hip#gcI#b9 -lif%6xo2HKF;yUDlx|*>1j7bT{2|*U&$s-+RD!G~*e(UUy4MW-HFYAmhL?w~PEuxiu8p70yeW;kzO(o -O9NNHZss2Z4rnYKfI@Ch<Oon6Gh=EYvzG%%s(J92d5=cpY_qkQt*$@Ca65OY-@5vTS;i^!+6Xc{j#mB -)uM|q_Q#1rQ_mi$TQAhI4m3F=|8wZzfa06)Qg;^A3ouuSZ;eCo0<FifE^&le)&aYg(@LCQY8CZMPq>Q -vtn1rZ=5&tqQ7roYn_=H9#YboQ-az}5U-*1%K*krAI=FRjj^(-kJYe$N<Hz@krQ4qR+Zgu^(tqH$BYW -bEu_tbQbM&6r$vYa%m-~V;D)D6VZxu}T(0?lp`yxYBJp~@3YLgz^ouD`P$!E5W-WP8fIbEtYseRGSoa -^7$gHOs_hNAlm+!tx0n{AkN&3*A&L|yKS-4nr!MBuy!aB2F!!g(*A*>3(s)mC9dxv%4!zDbq)E}r@QL -+p*0Q%L`_4om`FYL<B_&Al;cWN#ci9kDkW8diPMz44&2H_DB@Q8OUz)j###xXl{I=bJcow3lP-jS$v_ -`-8A~Eoy%pkJuk;6T|ysNkn^BqrL8g@cv+X+#`hdSK{R!X&BifBQ!qiKnCE&eNu)xiBbC`D{7x)zXte -WpX4Wke@n2nmdo7jb}wjaeQBR-RiCw`J@UL_Ox<VSQ2T}Qapa!K8Bq4)e9jzD^0T>bcD*rn-y{u$W1_ -|Kaf!8OZg|G<6OXWe;8}H8*-{;fzN7b8WZbet11bk>clr19A;z-XCv&s{|M2|Ves$hg#ffg-i|q%F{g -8LB(ze__%C`Il&3<5Of}%l>p<Ykz92xuQb@{wvXbS4yf;P6HOfB;Q12=1chh4)VIle#jD<ASB<J@;$j -QQPn%%ltdyYu{(G0&C8Jp04*Y#5oRfk)+-XD0c91cgU;Ma=c5G3NU1SHp8{G3L72nCmO!%=OrBLTzQ3 ->)Bz&SO3<ye+c_ir1=<s$v#UDx>NOFg<ba#ilKRw3+@<@@__WwApffy_TrKH8tM|t?Th?&(Jc8i+TZ4 -D%t7ez$Fe8gWW!#QcB9k1)hXZ$QdIm2w!I8<sZPVYwD7xs;kzun%L>2y3g6}8U2gbYCEs0wcbA0UeUa -~`;@#BnyK=s}6z?t#zgxg}bMbC&_}%CE?kc>yD*Ud5?>>)rpAWw)<h%KJH$VLDO1`@m@2(BMbMxIIyj -v80H@)A8Q!-9GRtYa_1iXL;q^D;6OtzVTcM0Kl6Zy`8caHEoC*NIxcUOepCGg#Byqg_<r^Ou4Sp85-i -q@L{zP^$4l6Tmr)-|`2_h#(;_XDA}71Ezg*$P}JzPOwpc#}S~Lpx*suRbQc$ML)d`>Fa_&D(1}&$oL2 -hG*`R>SyC<H`G?W9ef@7tA0oi9^!wW9(*Zaw6iwed(dq2mIUt~N7_mB9vErg#=WcBobT}do^4i^1^2M -68_R;v@c&oKf=~1R*UN(bz}UDlw;1-Nl=T+IiGz^sx*bAqa4?P{{!{)ZA0TX?XZQoXIA{mGU<@^WpQ7 -0+l)mVx(f99lab4$TD812+oz#nqgJ<y^H05?{uFvq1cAvAx`RL<$(wgA*{T}==XheA;&IJ{ppuT{4oi -N6{)aG1MHdFpa%oma2p8k=vO>y6idOS;*d+3$>^-Z0SN9<)n#=e=drlWl;Xpu`yJVBY<_F3k%5QEpzh -W6-vzn(CB_2CCO&J|Z4z`A-N3v@UC_{Z{GDt%AMI@I5FKD|Zy)~}c^yk@NKlW3Q+j~Vav2WUt6VWj)a -apuWy8Sb;^RQwBhh8ppyj?rJkI@$2wp5!*<Hn$-cR?4{3mZiJ9(6?!;T0LJJyawx8ZrtrHvPR#RWVn~ -omSCOmR$x5mW{~H+x@+{^?jJ_>i9<K+7^C7?IsQWrK9Bxmep_{cZ!0hGt!eykq!r0|6TOaJr9&#$mJY -eJWa)E#9eAr3P_M<P*Ah{$e9hM-Pj=m!r9<PDS+s^Styo+)94ZnU^xzHB4tuPgLB`R%Uk}z8w9Aa2M7 -t)>ozxYJZkwk2sh_RBN7|Nm+l20Kradp@(rVPblexO?9{ufg<J*(`hIU>tejmnv&sr7Bl<hV%=H++vp -a@zIzQAwm>1Sa%xS!A8SI>W7UDWv<|3glk4L+M=%?9l5-X7;&2|Dx&b-xzEPx-7jSw@d%*ITq>(}O$l -zj^J~hxU;Mu3b9RWRwAp7CnM*N2Utz=Cv{x$l?cwRV>Jd-cqzAS|_nplRAv|ZEI%BdjZDZar{TT*SJe -ajl4_fwc6Y&Zs%iZ<HZGC5z!uX?zDmMe7($X;7ZYdo>wu1*1k2GwtdVv7JuA0dJ{nh!+T=!1@^?^3+# -!-7uXYvFR&*T|2Ox<;!m(A7GG#j{2F{%G~ZM5j^YV<r_yZ1&fuL2<)=;H2bMriqrcr(-ctH#jd8i=Tf -9!8@>TKM-EYN?>Gb^3vGJ&QzrZ{Nq}LgO@?`p;X;YpmX|9kq<%hBMD?=d}=V~*~KKeiL?z7p514cQNI -#Pa52&tG&CSN=%zIv3Mw2^03#w}O5PF`teZp3FXh6j#~jz^SX_+_w<|Cg!eYn}_c?$6qye4R6WwV6t0 -W89Q~OS|DL?{2q)ujZN2WJzze{95tB(L8&EUT=e~FRa(&97S?GZIVv(CU)eS_cna*!h7<$W8*1|o+Ir -l8QY6G%&(yRyXm(||B_o6BRosS2=B3!9-%)G+AZXnN4{t;V9Nirv1dGP>V{WL6$d?_9mKc0(9SC(?Wl -O~<S`iM9c>)+Oy${|F}McpMEh|?)06S+*ohPLpS%&{z6<@bzkTEM$1(PukBAu_0bdEn)cD|dapxu)IJ -`vBlMS)*6i}}_MU2EC9(B(aNzeF=dZcE?8pOVxktx#FqyO^MYl3dg_WY8W2ijTY;Wy2=ztMheX57edj -KzCmwRf><uL|vf=k~X~Y2sEmj-tyZ>U(H6k|XM6uBgwdJgcrMA^mV&H>uymar#NgJ+&?0EAoWb5&3(W -koF`Jj(z#ko<u(5TV#ALd8fM|e5cDCZZ*bz@BUCY=GI8Nn&=Xm))g~;#z-E;5#K2{?XD-IJ?2E(xj>Y -3OcnK)^ZuJLmmHWAW45FT8Kbr%SLI4$Jll>dgp8xx@p+XGwfRPwAH2R(>95>RU~Ffw{&^_7?Cp`<3cH -k#&2!`CFYJ=G&*1UwSc_C!EBVO$c-mxT)DgY~k}q`(E(_7FwCT`(@Zop$h4mko_JrE#lRXdcrfuII%q -a)u=$l=Q-ygjJo|p0z)_#&EW4aaQg9mg12cEasp1%=me>6dysK)+20-2Tb43O`gx~9@L{pDQn7;|?+? -%EByuqQzT2`~Cp|8_9cHhH4%e>z+EpT=`@D#kNW_~my^-q${6PrgRpmpfAJtrhrP1N<$=vu}b3G9Li% -ftJRL;3CZN9Ol4r1uQcDq8$54jGbdM?HqoIGHjpsbUz(byf*2Nx!<_gmVvf2CU%dJD<b+k*NWdbPtR~ -@WS+L+M9fpoZ`((qs_)483I8$lX^!VlZ}4uWsq(hJ5D$$wcQ$38G_fz73ywNEVHuj&Y~<GFJr{k$?8+ -uEW{&8BJe5OO*K*UiPd@4mxA*8Cb?-SUPG1avIeE_&C-XOK$kygbd{}uAdAoF{eRa8WyF=v=n!8#{e+ -_bv?Y;XBYc<~-n)ynojd`c4#n9ZB!Ml+@9hSbs8Fe#xk0?~GG&{-%K$G)pJiBe$&^(vdTF<l2zWTmRi -%3uQCd<6)k@RhByo>SU+D>{##kCcTzYkauMkc%nE5eEJGGXPgh`H}SBkzqi*fht;nP=Re$y~nWQMtQm -XS1bO+3M|xfHBIaH8DQ_Gs@02I)1H5LwbSl=9+Jcs82f)VU1dI%O_j&Mc899?!VPqK$;i8UX%WqkjeU -1V9$cK5GTGF(O>=^(|^zOR~%oie(_hdZMPhx?8}^{Ef|lP(=;37F>_y@!+E)C!PM4sb40Lzs(s5)w#; -i03|uLK9=vB<+=bNp=Y?S{ZMCNffA4Y4`}@7h{yUVYd@rbP%j7<W%<7<wZp|4SxJ>vhE|puA<DfsC4d -V#>BB5)>GaZ%pT6#)oJGNAF)_tG33sGNlimDk6o}pywA23eO-kGiaQzvY32YX6zjuq1WU{9u~uK<k<f -X438M17K$e&EFfl^c|0_i6E7cTg{}?;j|>0_Bfr$rT-Y=MJ`J(C*dZ^=P&OEH{AXL2I)6@}TfG*9=Iz -jq*%U{4n@n+5j;2%uMWM`p>-0dYL`N3$<jYv|G`#>YDc#6xY!%4{%}Mv;(ti&enlTC(yRRyEG_DzKFK -iXK07Di#bk@riyyncNC{K=UN)|!^e*^zKkaQ{;x`qKK+kZXM#RsZ}M)c#-f*SK3V(wi}x{S;NJYfx`~ -YSF6u*nitBQtE&7Mwl-i=&o2GebGtBlbHQMV<126XM+*bNb%e=0D>)@r1Ew`W2OPaMy(%9BI+I-+$E! -Jc{eSFqgymr9c;{r|5Y>t8NT1q^pL`nZTO9}bgS^c3lmMv#YwATWwy0oFWw8gqRL3odX$F?MkD%p<IU -kI;vQ2AgsrI5GGVqC0@sS)2>%<rhzJ5BeS_vSyB_KFs-(wV6Egw)0T>5S6vWF<+x3Hac6@6eUexl^;; -eLKST^SyRa7?=ZIGMzq^whHD`t<o}`A5OqN$9nFtgLj=F>epCQZu!6*(O|Y6*{;l8zgJ0%hAqOE5 -BN88Np$Tl;9C#SG42p7t!+kvBjUtHTYaGCDcan{h5utO6k7=P1Y;Lv{JSIx=dKQeyY-h$Ra;8HE{==s -(9rlnfa;2>ypvzFlupndWm$wnJ@01q8uJWM5i&(IvLY>V}MMt#PIpv=Q^q)Yu%L6`7-5q`H|-2G^G(C -ysfIi+&RbIlWD(AHk3@Dq-K1@o0%Olg#^DNzqHmk?-?_px7ISl1NGu51hHT$vAf>6c3XM%qdrZ<D@;( -0??Ir3^s)SUG=cE9otH{CS{h+v7#m>E$Xu_`_J&6KmHV8dyH7mEW1$o;lEoQ>8`@Tc;*U^5R4){n6~8 -2QKhr%*mLkWmWW{-!V90#zR`JY_SL*=JgAFS1;%XjBJ|S8Aue6k2C8QXi7fXaV}I93$A@m#vr5(n;zu -+G56N$U&gk7;yGo)jWGL?0W;740A_OmFZ$4$usS#fR=Uh*9|5a|JR4wT2dt)xRVJ+ZQJ=7~8TUc4V7C -1p*AfM@te7w>jnAwj+)S7){}eDw2MogS`uKA*^k}H<deog10lV?ea%t;mz$;*tI%AoKh`B>b0Kch;v| -$(T=U~2PF~6rZ<`heJ4=!g+tI6JgHP^@T^P}KN-gh$K841hh$dhT#16IIrgeLmdRQ_YyWG~~+nz`#+P -fIz(y~`pBc^<z)SfY$pR@lm%w%aWk6(-z!jof7t-s#LCo#BMsU$+i@)mXAC`T=u}kGY)>lUI+<V{O2i -aKGMw_mhu)ygvDp<h?iaEF*dEXZ&5|U!L>#Fh6uTaA0Sg<iEms@8iOG?^`aE_a1yCdA^3HV&}D=6wy! -8-y`$dXPGe_N9DDD^r>)OdtsEfMYQ4n&By1pzYt#D47i4@n&jtB8o4!I$r6Q(@$iqoss7&nTUbW?iP7 -IL=|`vdu9rRoSmYY~pXc6thH?OtGvN0Irsiy^dZVYL`FuFu5%yNq4a14^nCrb$<j<Wi!g=DW{?55(xq -rjFMK)2$w))WqbB?=hLvsrQp*H5wV4RCC`g@t*(T6)xm8V}2-{l+m)~95uGh6yTB#6SQco~<jzUle-_ -dEh#pkaPdEA1DQ4FdSg$;8b`gUm<I+~lV&)mJfA(f)~I^PZ_w>hf@Q4`DqroH&EQzwdF2ditJhrJRT| -jPc<rQhs_F6Tlnttp1CoAcQuF?{CM#ci^RhnJ)8m&6fC(={9qzUo;$QqwNOgN0=@IJoa0L=6<ND9Mm# -4tOMgnlyQ+q>TNi$>>eWDy^447QSXYSK3fEtBPZ~j@amb;?~QS}4w2?4SSs3j{ID6P%gEo#c-_(SnIr -tneL=gF0pM7HUH8-9Xd&9-o(?4Hevg&0wse0J{TMSuJ$*JS{}#sUYyL*Pu6q7gz^nkjZ(;n65uDJ$um -AI0##VIIDBa3@lxeoAIz<NV-XQbbX%(g%30(L7?2!x862_D>?<g6!#+RuV&&be=%j1>5$HFxt)r05j* -0ki-;F<3{cy7{c6-|K0?ci7D$BBdU&xdwJ>Qf~>iHKvA6|t}W>*?|182vT$$>JEDGUCKj7Cwdc&;K>t -{;!Po8IQ3lDt3_>?<Z4)W60n7TNTI1(V_=Cv-DznO>J>A{@d_>iZM^x(}J%#m>vr4`gHMmM(4*mX^r# -koFJr5|6s(J*FLRc9z^Fqf*hE3mqqxuo)2~3N<Yq(*>{#<9?ZG82Yd2OYrGL($>Kh4)yUV&drsy;`?< -22ba$g%C;3a@-)81Wwlw(-9l=Y{Is!M&;f27r{7J4f=BTHB^9%k^TNV1g%kY7DRr-a*wwF7D{`&9NN7 -|;If_*VQX5_hlTCJU1$?`oV18GBZ@5&H4jh4(>(ipA_<>2>^V85nGpBTSg%d9Oka$40`G99I<di_<D* -QAagd_tMN*wv7FC-tiNYt%D!*!fzSe5SunyAf-6j+X9zkMyaUK1eo)D?Ul`U_UbArE<KDj)`|pfs92v -$UyQx&wC|7_d7&qrCr)OHdRiVAaXhrENS!&<Gq<fJXXo)9w~$Dmd|-fsP6#mo!I+!QO|hplo9RB@c`L -74>CG+s$HPzw-~a&icgyDZc}Gqef9HY_nfqD%B4(4{~5x9`eojix{^Roz>~YQNp-Yy=lm#}hR>R8xBs -uwzO364@vi%?Qbv57bH4Jg%3qf;{k!gWE%_ULZa*i|_J=y;eK>VCmqy?!?fLqTs&8B?wp(Vj`%|Oc>f -w-tC3(!qet&3w|0q<o#L76BJtbz2H|m86N5ZL3+6{D6GLP00p>mG}@yz_9n>59jodTS;JzLm%3-~d%{ -q(RQ_Xa~%86v|;JzP>q-GO`>`?jC#1U&Ra@!r#WM67t(C#^Og_Z8zhHYbQXnHQFP)~kSz)b+=!bBgmI -t$y_{p|)(mt>r0|2gEM#v~uQl0KclG&-rdSKO1n%BL6>D+2Y7aqhC&`Hc{%8OB*sJUYBZd5=Nz(t)94 -0swLGkcLMbm)Fm)K5%a;+81%eU%aFSHQY}Z0rBu5}{{OWxrhmnlJiu$ap{wjN?pX>9Uzt7gF&E(Kp0z -4J-kxVwe!M*v6<>3Y#UlM-e`>V%Wn+#>(%<GWi6e|PW0QWcDyLt$v7Y%xU-Z$mPsBcaNGqVv(PmLB&p -P@rGFEc8wrXB^qR8p6*lLLvqzwbF0H@;>U2x^;@@_%aSvE=5$<Xw<k_IhY<nOoUyWLurqgE8plertxg -uhC|d77pBYdLo<VRjArtx4h8J#jYS?uNWxo5HbF&t=>wyOuMXF{3sMkF00c5@nsu;Oo@y_}QG(W--P1 -9VfrXidP;B=fqAGmzsDNz9$Rw^EDAPmGpE(rwf`&8fvpQRnF*>epI!~z`s|-6`TC#M*m;b{W4>elJ_Y -13)cv6OSZ_hz49+=|7R&ZQe|kGXizjL-F-LCZJA#KbV%60dJp}Q&0N;kr>MA@0_Rb9kEgqT@)xzo_2K -Z|3*QIF@;}&Z-n%hQt320(IM;h++_`x0UvX~oY8Qhy7{LEirC6uwdKYEDMRuL{E3-V)MOUp|1UbJGe^ -xk1o~RjT)|o%6`F%v6#3yBpNST|5wCl~NvTyUZ!B>4C`PZh(fiLL(5M+pb_|9*Ao31SgR4^ad3b$PoX -@Ld0zyE8LZ6Fg)(<IM$jb?L8Ua`z!_+?CzJmk5$YYP71yt;sQULod6!dmsu)BQ=H0r~MfOOooCxACMV -=9=~AHi$H~agBAdn|+*i3BS}$%6NRLU9&x&0WCP+O<W<K5MNAOi9FwDp#2)~vOMSWhgA;f^_YJ*=6%| -wD_(e;#TdWR#Z+6z^1#H;`%o`dzvh|G`q8{a0e#o|!tEUXAXM}K+M&L1E8`{GlwKsTyr(2n%bm@$gy& -uO-Nmy>KThG9cMyGy$Mb|5#{=~7G{&*pB4%?eL(4@;<euSo#-S_5Sk|LXg@jYx&_ek=X-nxFqGXO{o6 -EK@3K=>9@Im}t`J#-y<Gv034=iV{bDg;tN+e#c(<ELhT~@lg55G<P{PnPmQQ&7=cgZ*+HupO`Z&&M^9 ->kctEJmC>j3M8Mlh?nXr=$Yo>BP61H^z?ja(rt!1-O<iS>&b;8MMF&y!2>}Ma`!~iOXuQCGWFB%b82q -u$^eUm;rdy^eI1W58$y6e2rc5FgX9gUu=q(`1q2|ST7SF<U0e$_ueDYh}$Nf5=Tw^Bt0N*%JLDo^X}_ -vy)HN=;0wn@7$;!=;!MvTuMXFBN~RerWZ$^HAORT*)B^fq1>YRUn9ed57~@H%51aXnN5^US+S5EMRSb -cB#K94N#}%ulXsKzY+;t)OV7xrWZ2z`o(9?<H1byszuJs%IR~P;ltZB|=?w}frXo$>L9Gjk+yf}Dl87 -p1Ld|J$xGuI}%KeT4~9*h^=4OpXg#uq^QJUcy*b9j#+&*}vAoA(Yf=ZXWerzYyBTHD*16GzI^81q%h# -=Qv65zvNic^+$%>$=DrB#09WvE~l&<u<XUau?($TfrjtK)R&04S|HFO2-XZbJkxWR>?fAc-QO@-pvl) -$)~rn{0-+qyFSFaG+VL`oMh~*;j&G3!~O?6dINLD@csR-kII3yQR;}sS$p~d-bKGD`p102d2hG;aAe* -*uRlss^VY$~_A<{j){Q=*n-kR7`M=-DQAd8-l#9Wq>{=>#Z`*X}3ferNFUI2MJ$`BRB$<C#!|x&f{&M -D>q;+n_VaQSbtEHcvcqh*|!ZV+~rNgfJe!zGU%Uq;lwv^^O@1&d*7~X^PM5|+Nv08q=q^a_4tHYO{f% -61>QcKO0;=KD3mOKzI4&DyA)}v|Ey_GN@3CBoYjsGtj1KaWKzm5EDZtB){$eg)=-z(tjpX|uJlrbd|# -Ae1DG~YiW?*v6v4d8VHZKAavDSy%5j5$AyoV`V!50(~#r%uZ>Y?*kU$2j|hg=}lDVT1Ancy4^Bt%F^b -iIcK~S%!R~Sw=VPBVzkWj`jPXEX#QN$6pJ_!P)$zlH0H5T56&j@T#X=P~Ov#%b3=sJq3dpf7KDxSrVu -CUdC@a6w$`IC)M5g9DK{do@h$YgLk8iyAou6LK#Pmejy@G*+kn=rZY<v&yN#}*&k(`J(OE5L-W>vMji -*xbPP1@$3|@Ka=^6<dx@~6Ze^|}&--H68-N+(1z?={cqd`>dzG)aIYH$MZUHY$UcMG%xlkUPWeF-i%$ -FYu+gyx^(+PMozJauTy+jmV#+<zPpA;_^4`MFPL{a39)BQ{1m5$67$J}t#IoN#kU5{+<ZA}#M`y%GM6 -rX?DZht;Ef16`6_o^)pyjh!+IsA+T99=h=dx7*LUd63_7jtS}tsk~CpVO+E-4$z`zAp*dTz>v#kNuDB -*dL3XkEU$F8GSf;O>!&i(YDSrTz%NNRTM~{7R<SVvIXe0>Nj~zzm4GSnzKaJ_cUikhn8G7U`=ul$~Y< -dCiY#9|5u=YK2N~^quPWz^4pA$vlQidr|y%yHsyO!#k<Mm3{e;W?3lOdidD6{12*+sglCS4@mrox?fI -%Lb5VuVOJl56sjay-ywB1yDyR?Yy7WlyzPy)nuK>@wYwF9nA@E%?_H~kKYX;i#Oh1yFsb#uJcYls?Oi -vz~_Z;BykVteM6-jlS%#CrMf?*uS&M`9A!Lu0K!Z-!jeHhz-RRq~)GTQt{qVT^g{iOAvZ~Bq;M=^$@; -P3MDUT(i$v-zyd<7kY*X^bIROP038@1f2DV~yUmKi59csQ-H3GuACfHOHVG<D#A=u&(;o`!rjteY$na -yZ9bxWQ=^<AmcMUe7}D9S14DzI%Uf{{I<sKqiq%ET_fzRrCRdfA3+xvY0d)$*dr-8FNrhEF@Ko_FgNh -Ujd_*NL>u7aoWO^G7Vk`wcy#;j_oQt@a$UKWTv0c@wcWPr^4%dVv2GgeJInrQkY^+BoZkWr(C(p5)b* -iV)@N*DJKC7B%ClSAX`o(y*^E|)HlfvlcCJTXykp`R-v+JShkEI2(p!HHc>e)^x1J2m<vwdg-2to9O+ -OP0?aPdDyH*wK=J!QL42lKP_CojvvA2n5HO5|G>;}GPJPGdaXq@I*IQAXwe#XCtIr9+xRW3g$?|l-*@ -M(D$WA&YW)!N0_;OD@rJmD0Z1Cyzf!nu<w(p;<6onC02$^pl6hf(GXexFR#gIzeE{*oYq#A`zqtz_=Z -{KuPfdw0kjd;T>jUvqZlVaBa%{G<K>buWP#y1!HO%mqz*%<{PK9tFLl-nf)`P{8+k{;2Yx$h}1SuBbd -H&4zEK=X^L1ibr$Jel<bqv#6t?9!SOzOEzpkQ$>BBMa2-a<WY{}UD#w_>C2#<Yef<DfuQv=ZkR>WyhB -EwNJ}5!Y(DQ5BlTvXp57$$!B>7@MZL57M%o`RzlqRp`>A7i<>7wtT-50-Ezm#cw~CS^OYb4V-u9xtvE -TYYJLH^J&ha|>G-%DaiwZ<qm1c8p1k5J({Oct)@mSjJ=c^9~aZUwy+6%r4INL3&F3H!xgEYAAJY{Xk? -Eq~#m8klmj%Nni8HAkNacE-w@=U;b&LzCx^;2JKvuv##YEAS9HYNHmcZx#V2)&K(@66G>T{qY6ZpI&Z --!e0{4PaPCUf}tOi(BxQygGi#WxxxrcY>B!fj$rA=l!8Q9=O|&Hav_ecC%+UZF=5@%>EDSbhjOJusm~ -NMT=&yaDWyrWy}m~%U8QJr?d1$tv+duNVO#Z$3V|`elTy*TzotFN39<FvFcZ7^MwSlxC3;#2|P<P_O) -H+0CU!@Wqc3x`=y(e9UtvcN{#mcytmz~Xd-o8HZ9JvUyFA*rvD)~KkvVC7lG~$qD<}0m+$6T!}f`rgB -7};HmbqvbwBI9gT2YQmEN4cTg4<xu47z1em@O3^K6&*dU*a3{-2p_@ejEy{@2M{{}FKe<Nv`e7TlgdS -rcwMX)F6@>|5YnV8!&&`1&=wKd{{Hf5EQs^&NbF7wzr`u67#u+GiV$uPuNb_mvIsBRr#FXb0>{QFh?6 -j@%m!n6+RI=6Dzrct2oQN?wKXGjoeYz-^HMACAX_Ct>0-;K})yH#DcKcLlrYpTf3GIK6GaiE!BW9q^; -z30B@8zhv$G_bY$9ofEt}e-61fO{B?qOL_Zpn?YL!@cs<WyoEOx?k1jDR^NX(FlhB}PZZs~D{S7S|D1 -RNvT{`)${pAdYMaYD70kIg^~bryC*oK6g<ul@|1(The=?YK0wz!6_u3K_2lGDwi{r0^+H!FwKG;oLqW -Rck^Zn&Fh@1!WhURtN-?=3hXY<XC)+PQ)qL6V+_hGM<ZUJAq=Eu3rB}@OPg1w*f&avBCO&G6q=p}ch= -p}1U-+#E-lIbKYZ}_>45#6BttR{I0^X>Sq+3l^mJ)`w5z_ovHfuFEyW^AqZr2kM+w!GW7_#dMDgKte4 -qUxLA6YcU0<G!}}-oYAm-dwlawmNBxqpYCSck_(hjKSBaW!Ejl`16RnY2b4(KNt2m@AC&xXCd|w-({m -L*Zl$X!TFngvJb3PMkqnlcVbLutadlcr8nw_rvgVT7RX4z4dMvpBI3t_9n`^!3=_uLnD_cu!m(;U69M -Nr!BAl%+U`vjRj($8=M<h#`ndCXfig9Ihn|l22Y_3A9z_3~*Ya8G+vRUO6VA67zyE1gTQ2$gH_}>ii8 -rKAKT8ya-?-`Db|*jvISSrsFYvtoWR`ay<-MD)*d0LovoIg>itkuc7`LeM)_7642XK^kDXc^KhB~gBX -YLM&6ene^e$>0}rrUP+;r)!8?%4fSoJb9c_`2rR4{foRUD?|FxrE7X@PKygiGj%?Sa8$K-S5rQ{p1e= -PhaELhC@|XT2w#1NvfZ15&d+^a`FBF{4T%wj@@i?A>Lm}z7_S^&XwmwMY2BVAMGZOYH@YjhC)@`>*hW -mvxaEz(Du=5_|VTnZIdF_@cEtLH6$JBr+ueWXZ+IlORTnv;G3bMQ;CoZv2W~mU9!ZT{8i_}366>bR+; -;9gN<>@v2PsM+l~ZLNEwlP|5ZyQUOPS!UKeO#yxwjdjn_OM0+{EKsS)jhPJB^oI@B!NO_uGhA89u$+- -@G)1^tlw#ieMGY!~ljyPzjR!`?vqke##7S~Dxk8#}k;pnf*y{mlq^5o#yBX!}(3V&Ts&OfPD-$EFu1U -H!R1FBr4t#%Owhxx|KRc>XnM5%U+L=bweLq^GUC$Gx6+O{!1sDU2Zle779aY0wLnn`6+6W14|$Xv?G* -^P+IgiFx1uav0aH1g@RFZDGNZ2wHI@l2(k&C7M=*=klVY6<HCqB1_Q<)K#<szwsQV6<MGaKa{lM_n;M -72CewrC|Z$K*O#F7;}P;9pcSXl{_H4P@$FHxBI{GpihcJz0$MSnb>HPlpcPkwR!kT}D^44<;(CKtFn% -QaiA5_0@w*1Jg7Pk5Rf}(wJx?3-VuC?0rr5&tVh!j8*YMf<BWQ)WerWH%wvArDEujA?5$m_-*H}N`4D -p1#6L`oGT5-l=tH^#URAd{W6E`_45*-z-$3kQ1#Cofu6I=U2RX^+tjiwWy0G}6XVSJvd#m48;=R?^X> -xcNS@LAa|g|Huw0XO(=4d%)D?+{{h-*TI`cbew??72|ehoE<^d{Ms*cwdl!ae@BSKsKYz`-(*2eIai2 -`SvByAT{Qcs4*vnX^?gNGuxzX6Qjq7cXEs<dk@CQInd^b`P}J)B5f0TM5+g4<G2DYJvcyH*LdOY7DMw -W8&Zd`VPi+G!{TrTrpX*j2TRM`gVZ+^%xZ2g)Fw;2=OX;y3S4;?FoTSr^CjD8I{TtS+!UM6riABc8K2 -IWboN5)P!_Qce?A*(<5-flrpiI9aR0!PUU3wA_^s@Y+_x}a&*~?(gdi^@q3`vptxL**bN1xxoOSW`ir -T#*mATnl@t!;;^~-OGj$HDXo<%c@>BF)Id}SZ@TBjxb0NZm-7bgm^j`@3=+taml36s7vA?BSdq28GE< -78q-ZeX3RatJIJ-o``~&p5R1a_?i?FKo{j%eJ837itsFw||CunHOJp;f2_7Tcka#%%x)5$jQ8on%H&O -;jpgywZ~06wb43r#ye|DTXGgSUS;OPdvPmZ3p#4X_}_-HKgf87Mtkwn&MJLyE#Q-KSn0>v$DYTPKK!k -SdlQFEY)-VrvIqR_h);X3%mI|{Yx@J_m66<Kxpz(h&GlTNGj~vBhUTn*jO&#-Ag3}Ow5WGuoodtmKlZ -)^Agb#7|Goia02c&QM1^rn#0}Rl6$fzvMMS`*vSffkMqt31LBX`pHq<grOS4S0<%_ggX=#gLwqPzPTA -7++QsGi*Sz)F8&$;*9H#1MLzTe;P`~Uuz-^1~|&t1+v_uS>(ckg-kvK<qljpNyAc;<Y$*b_Pe&q{eu7 -nD;MTR9Zx$h%-$&_mx1{Yt#^+r$-(*|y{QCGG!y(NFPNnSI(gwDf8})ed;_VPPk6`p*WJbI#n)gfo!M -4F66hmaSZTna7!f=X`2y1sk_F1if@+#i*Cbf29{6jb41N*GsxqFI|nrpqJu*Q7;D@(~I9fp_fslm*JQ -BIdo0y#bv!!A4KQFweZ06;rO@ZT>c=ZZg8DQ-_5ug=lP8A9A?47Z__K{`&k%QyjmjGvsdVMHRJ2qD7! -p|kngk1_xQnYXg$Q9$r)megzuS*a}r%+_*p?Hv-8`}_ucjn((c<J&(=Hnp=()&aoffb)lQq@ru2sP?B -h`PE@u?t`cU6$=kvF*xR+ec1B8sC-G9Xk4GnAXtUwIU&wz#JG@dDhb%@6=4hwKi+sQX<K%?%(9RsxI5 -NgjpJWcyl#C=WY&f=ahfVU{nrvohsWr0_&2|wKDrLny1RL@y-y6pfrh#PR@{kEL?zq=9re|6}u^^a#@ -Hm3grhyHo}Pxue&zwWfV{*$Esqgl$Se^vj{jp@Jf^G$I-YV4za6KBZbdUM6E9-i?0@``u~WL(70H*Hf -9TPF5V$9=BQU7UN`wqit?I5TJ~=pOA!-OoJ@jHrb$XQ02sJ%&$v1V^B~%bCv`*5EU7nJzFVdtq3h59l -|d1&jf3zFt`x($tx#f3+U+dKrFa%ntn?%k9G>Vm$C0C^iRe_WtnDMc_FuS3JD<dGEh@ct`Aa$wyr?zJ -EppKZm{<>%XiW+GMgh7-l06)4l@Utycd+VbE4Cr!7mJ2jy0Z``xxM?nr^Y=&@#O@IAUVImR~JZez|qF -P4h$PQ5*-kE4CxW4a34Wd5yY5I@^|&P3=3<6wM_>m1ME8q+Z2(DB1?y_gM};AI@@2Xv3lI5bYd{lfJ* -5uGQ@_X&V-eT-3hD0|!+;1QJVZ}RHt;m&JwD<?1P%NGDI=RRg=L)ezim~0pEQ(eQFdeFu6mTZvzo_ki -g?q9a#i6@f(Y7eu_GVx8@Whg5L?op}}-!!#6A#5y<&>m)JOSqc$FhhHjR3F^K8qd=Ws!(NOLZ<y7lM% -+jPMO<8;Qp#o<`3({_qjvhU9#$KcbWf6-YAmy=UDeW*S<b}<2~12*NHv1#U5)U56Qa`<SB!4FnSoTxV -IbEJ=t(yo(>UhKNsT#<cs5sfr|THYa3~=wR1<rKHV4w&)qB4?8jCDVNM?rHh1_wVr0(!U}i#p0PSbx* -$w~vcXQIl>k79A6Lwhj(B^)_^+;%ozd*aY4DIe`Xm`h9T>2e9(>aKr=?r~Dgg65*ID((!2+w!i2kA!k -UyXgUrrnooHl2z7Gv61bq#ED%@qBYUAKh^T_jDBd^sYa`ZMU!R{$HWJt&|YAz8%lLMLQVb*Vg?ET{;s -T`!9YzF7V=gz7F-`zK`LJ`mcL8VE@$$_aEf@I$Z(X{SNO9yFjMkgU;^;_Por)t-R+i%4zPkhOM{4Z={ -}G!Zq%2PbgogV}F2tgDq{J{H3dY<u5<7&A1+aGxkj$A$xs%K3~W8m+s6i#lib@m`BL@v+Y^xVO<EkV+ -EhT>=A-{vZsnYlf*ZhaxZm*$H>pozS;5q>UD>8fjm5(18^SN=sAzziVc9#p8p|T@Lsfmf%nlvODyN2N --Ysl@ogCHTd*zIqwQWyv-D4lXS}in?cA@%91dLA_DPwh17vZg8=|I*->hGNv~b_}nI1trt=UT8Ua?0) -<xsTGg8px)<x*Hw0)BtwmWSZ$cuBcudI-4_JerpKdR{?|^7=bE_!;E*g@+A1kM@5;mqGm7+#BhAKj<2 -5jHK?v|3-LtnO*T4w83q<wtL|{<UF2}ke#88(?*T+B7QRka(U=vp4wF49$T2FTwR+c^MreNtqxeV4(r -(`Fh=>q5BE!JcYYJZ`wh}=fVATkdPbVG>9^zQS6*uvgl8jhnR%QLekSSl@`~^^5FXR<@d(^|ewuM}oi -1cAzK86EI5R!k@oy{VL3_Y`G46ur@mmkDdTbBp`M4qYJj$wreEtqP8wxU`8^$SeiSxQk9OQ{-UDreUy ->U+@h>yD1)`cB9KaFjM@Q40@cgkL0H@x{4j2Vices^t<`vi+V3*P&;!8^^i7_oO#GUgZUB6q<r1KiQZ -5p6ZQDB?cgQ)j=h`z7a`0=9pUsp2g3$LF9QfoIv?d+=QlZ7nS4qq3n~%5e;UWd-HK_sWv)Ot@Ph&GBf -v1ODS7?R&88{L!!t`E2Ch+bGMzpe-@qlH@aJXAbiGaKJhK-T?9#;r@in{KNRC#U86TUya{+`YbfA8o7 -vF8U=j~&N+>QIuo`??4{C^8HZZ%JTVB@2kjuP#vTs$VF4CPZd66*s*pIvC!%LZV^p@KcT`X4i+w13FF -rTPR$|zm5N9@o4Tm^*o)g-E`am2E&uwn*1>R3P&l4(rR_ya9=6!JAO?+=r_wV9+x}n|S)&owxn_m)VN -Q6T8l!k__d@cs$KaJmBz;iHcOT(HAfyOJPKE@q5&WGpDAuQJ%pjbaP=={#3-B-4P`&%^U=fT87^~u)x -?e$TNkIvTl>@`BT8`?vw=Os1$d^x{foQovK$79^a$NXE72yQ<_<Kyqu@iDZ2Pdr~XFelKHwGJ#>72-P -Xjk6nfL@0RXBhE#Mu@}z2#k5`$BF1QFU(+rE_x;B)V-cNWb1%*n{0n2p&(=3ScD(1y8;>22_-V(EZPc -+?G{{!z>;C@YzK1W4!`ernozSu)Vk|brhYcF4OByl+=zF@hIs5c1b#x<RIc@yAD1M<g8;s{AmH(4t(Z -|*|J{BGM<&DRphdtO<ciGx##+gFClp|tXD))8}<JLg+409Mm50<(K_?Eusz;oXl+52~Fb;Ft)jYXrY# -aNV&Jt05i*WY+dgZf3C;=X9E>ESvIrWXPHzR`YH>oPvY`mc^r?`?XFI^Y!;f8J}{p&h5zd9WRBW7TKa -%B~IK{ND0L&gT{HvQ3XyWxrTaE8g|7-H5q2?Y^JeRQqW>e;IB48t(Dg%+DfDVORKfzR&1};(5ea*BkC ->#^)m&hOsLRXOyAWUKZbGUw7te6Mc$2bM@<LF%DPHT-AnSE@!U#HFh?!j?dLSfM;*udEfYL8@yv2LwU -j)k*8~nkf%fA^6W%;AdD)HHk_+G9U75`??ctLBK;KK-+Hi~@0aGY^7KICm6{38eII@~6EpNOxZ#`tz9 -&hHwt?b%qo9gM4xw)7jADqp?2z2MZEyMYcATP|@f&_TCt5x`K7WBfJ08V%3;gCB=W<z#F;{%>+};=uI -UmZ;s=n@ffkyTlT@CzE-@}hKtigRFS8*Ivk$H%J108hFV)kmB2S1<rqQ0}o%DIqUWy>)<-_R#k$TbE& -@2X?lFkBl57hct{2Ipas_vv$DzdnqIamugZ-ryo0j=}I7d+d+S?{nXSR%^>H^djbxac&(tDm=qx(AO# -ATtKYTTfhzX)2r!fEXIBe=l$HzvAlj>>$2ECs2b}6_DvJ^i@h<ipOJIpW5Er-^IN53dn<k5JqN}#CAi -m?j$NAA49_UTHJ`=R=MIWz3hMPu$`3y06}BQ7`9*)+u;!j-#!Ei%eu#4mT{f-?p)qsBD?iY8)KIU3!Q -cMAVK2I48hN-UEyTmHx@T5}JWFA5|JPOf=)2N3;v2mu_K9!#P>+xA!@UD>Z=s-yA3-+UZwtR)?D(<RI -~C={I*PVkhZ`E+5N%M%<FlW>C)MHHW1EOwoB8_jMZMyoen)1w)-ZUXOL{(Zezfa1iaGnl{)KjuMWoS= -r*UzgYy(Zr--$A+dQyx<viWy!Jy+ht*rnP2rR%snK7Ce>1l$)e(r_q?adh9xf5W<2P!<MgGq>ZrVGCn -1^vQ$w!r1A67w$V9b@L>6)|^+^j(e~#_1>^<GR_nGbO;DjJh<&M+UDYTH@ij0fUrfvEmztfx9$`Ww## -GAX>WK(1GhRR#x*c5n-C7;NVK=?rTF=N@6kL0?U)l<8;7>M{Ue&|<d&l(>#r|gNC`MbT)9-w*7Vo -tr!pEW$Z?qfySi)*SM!8_@9o}dTM5RgkZ2fsD03St3%?foJen9q3+7(b%zJic#~D?KMnfczx*uwvvN- -+~oa;<t_rp7DzKcFBVEDQ5JXE<pAEAh!pW-J;}hR)**H_AK>bhtA@dxHx+|o)LKl_`2$8rh<D_KfI2A -s|5Fd?sflG37=ybPddlR+WpUKJd}u-qUHhcPT+f1$AWQ=8|yvpr7h2v8;Wfi#w6eDb@qRcSBQ5OZ_!t -6jifNx*85<8z-XUhnnS7i^WvY4?Y|CVJ`qm=+KkKW7Ek+~AnwP}nuj&+fcMVT{P_v*X6N8pZiMFo?)R -0g6VD~I8#&ufoX>*a_@f(s^CZt`aa(87q=P(>_mKwPe-5sLXCz|5pIr%W%?9A!3`fx)#>M9pk!R;#)9 -(CRvaF|luKieD)idEye3!*<oKNi+HuyCjEh|>*SkMnG>fh*&-$+3l#&tAZLql~OK36ujUa8cwem8-e$ -)hBB7=%4_#rPBEZw!RL58Puh{I!N^+?(Qus|{~f`LXHv?Z+OVm|hh;JN*5vp{@PXLLGi=M#rdv&;p?A -;kOfhkM^1qTIvBZE=+rLRR>$>FlE-$D~H_`S{z{yo$tFK^sq0R5#?7L+GbK}*jBiIBYApQ8^B+TnjTh -vt}rYF;wSqp3@x5;N7${i?hH$VAD)w;*VR;?g7GohkLc&uRQvm|86a0hYvBKgcS&;pTM9z^>aw2Jkqu -DQe(T`@dN#vP2^rAZKR2{$Ti)S?&De}wMelbv&{ax$=$?B@s_Q^!;e8Tb_Xj?Et~d_&Qd&*0Tx~TOzh -jDmFfA12P#o{0l$C|Pw$Om$yg%dU?82a13PY2;fY;Q?VN-z4f!`A$_D~1V4ii$tZiamQI%-N-8;Emw? -6k07J=qM0@4V18S+|D$7Eu@)GIMI!bj)kU9bw6s*9muq@jb6`{{pzCUTj^7baB0oU2M3cYEa4Wk>93H -fot2y!H>-ezj<?cH2N3qJw9^7<V)UN<I_hT`RJ`Do_J!(NWS?2JLn;3$;gv;KET~$#(g<#6oi{LMeqU -7no)hf9XY&s@Q*`(w?;G1V1BlMe)O=<d}~%Ew^Dq^*DY+B;;pm|sPpo*;kSWdN)q4uB1}mWdvGfSb9~ -ZDl79$X62j;34dVN}mPS#J(SEBz3AXt_J3pti3pnesBm`}g^=K=Cd_77-un&3w!bK?hhzm*^aC?A%2Z -7&$#e>`TN)Wg$3&FirG0a)C?O5mw{jN`hkJ2GvHqZ%*cSM@fG6Llf2l;>S&_|q7!fZZ}&L>K!nl658v -RCP(raOt!-LG^6w?}vy<0*}*g*vx1_9-mD*t&UyY>%FvZ3Fb4!K4>Y(u<z-(tM6ja9Q;?flGM5>ZLE^ --@<zNm+`YT;T@{F1q%yk$wC8Ku}%TrtYbhk)*%3OkKbN}d$Q@h6#Y^?3rd*{b$tT^of*oY&X%qNom8N -leryroW$Vz^#;>HL8uC$rxB;=Tq&i+=i0fx?`unjJ)u$NR7zo@GXoTWb;a9V&I!^KXL_fO2XPC!^w2{ -2O^#(axft)Qt&K4kN80%m|9s7B(>3YR)sW0o8;^SXZJ%RIEvJPcKnL&qKwm4S8<py0=plnM4TX@)|LN ->)I8_Lv^(obt>Xu$O0*;RqxUE(;h3dVzBOgWFX1^6weKKpD`X+y(c?Q_Y_*ow4kqpyVN*{gC-aJH-UN -*~-Wfxfku@A;YVLp!H*K0Ykx<KMJvo>%xc*>rA!Yd?%Oa_lPbZq8mU=W}7sZ~F0E*z3lpF6SDEusS|w -p9g$uKt_y5``=WEIfu3tV$U>j4k?biR(bOG6}RvHabNshxCi{TreqoU`9GU)DIdyF13D1z2G`4@j`JE -h?^VCRGsPF$Q=HOiKp1Oho1m12WGkU?-_|x8&n;8J;JyvHGq?{T_ZD#9n!D>gefhpqjrBM9%*yc!=6l -8DD8YRHiX5dK#MRqiOf(=3;`8rYLC(5B+>cg28=tHA{n%2aV+zW(0s00h*9Ik2m1~32NtJ7Z($R*z5? -Is_###)J`NO);pp63WNA*m<G#u*dH!ky>dT$ooo9SVk$Rb?((i)Fe5j)^nf7YXSM1;b8%a!K7i3;{pE -XM%j#46C4Zyw6mZony3j<#?w<!dwGlqz=++%s}-4fid$dzDu(>FxUdNa)R%^yW)?^BI6TJLRRfodsPX -zdFUo*9dayp+A89@%~_$%em`e9(s?)?BDQx>-7K@fbU?RvEU(FnQ;hyqyH?7YwYto2H^MRpD}-Mj~ik -H_oul#_9^Jjz&&Y53AnH2?qLDm++7du(}xr?!w?4j#7gcL8n6v8?kmJ}CDjjcw+;a~pDE{0Ty2-G-u1 -Toyl7W;rLG6NiZVa9R_sq+tY_0}{MglSV_IlEomYx;JPdR|d&NhHd7@?!>5yK5Zr0Pd2ckG9tZl?aZ+ -7(^&`}MH^WO7iT-P{<#Ltfy27Ftyfpz!7__r%tSqo!8arQFq;fb~Y%F3QFhE0A?%md*W=t1ziwA+}6G -F*H{mxueCUhcql)I(o#DU4l>!EtK_Tbc46KeKr-?kRT@x`i39qTUd9L5%yN0*}FX?`^z_`yUrTp6hxT -uU_ej^HQ$!Y+`Q*wxN=jubxeO4ZnSq^}ZSJCtS{>;_uz`4iEJJ=ODuHyK&Gxo|*QWhi3)OtKpn7?hAP -q+%Jc+;E^rZj`yMbaL#Bo;5aYb>xm7B_d<6)cfZ_8x`&ZF<L;@ddnmd4bN8(srF$oG59aPcs(VN74&( -YO-{ZQ_)wsjucn)J=&j@%HjXwwDh2GHqN}-*W`-pHq@Nn^mt1w(E*KnP9xGEo4e&Yo{Ki6=fjqsZw_< -6gA3u}a5g5c-TGXnaefye{TsVyTtz`L)=6X>#xbSB(7k(<AZTPV2&ySRmso5976aW|B~7sh*dF3C*jf -AM?Unb7~@o@q0o|HVB`c^rlBZ!iGY9V6(yWjubD0)FA(7w5$WhQm81zFVu|3qu3ooomMhKRmA*aGPMR -gI;|)h`n~ekB99{@^ogPQ{$Cvz*F%%mAnoCmd+x~MV;~8q}J?R?r##|EhdVO7{bOAeigz_p3L6GJ_z6 -G!&`(6%<e4eB=ET!>BFw7@i1MJNEgE*Zyw$x!UM0X{d=;jw+TCMcqY?cr?Fx$b}?5T#O-@HPapg~+As -w5>T_k@qwu~?Zo%X>*Tv1B+zMUX^yKDH-AbVz2sgWM6J=q;z4P$f6uw`b599mFL3`upqVVuuvtRQSI; -ch*?lt>$d>6$rYCPY^2Itlx+%MUj@8dAuN}6nZcZ-g_i?&abdm694s)N20_hi$|@jyRb`3U^rUA}T9{ -FcLS1^m?WN<78hgnGR=zorhqW%yXE86xkKa34<VhpzLT@_CE<$w$!GkoQmYY;6hk=B!8Oh(1cor9BrI -59{%#_$++^#*#kJe_IrvPkbOAz9Y-`1K)+lRTC6e(aVLOOh@HE+_(d6>U}H2m&Nxq7ALeoJ6+#pc%Bf -v3k>o#u$A%9w~RFQJdZZpybN%kaKLByvsQdpz{=Rl@f+F7XT(`j)lHp4I;f#xONoxH#QmJpXq^n7jiu -mb(&_i2-|+_C-}CihEHiyK<BqfUWJ6tJ0Z#i@cl$p*GZt@-UnbUG__`A0tD;oo3uMOcK5<PquD`Ju=N --cO=;z3NU0nC0&F%>G0>bx#HXL4+Q$HJY2;=p=5sI?R*qI$Vwz^@BJiiL#!Mk5|XKx(0Rt_y~4f<-%0 -{kv4cyzWd_~rtoa)iElr<CTb<k8aZRqI->Gb9f1H6+GI>l5K!;2h3r#J8?IhGUhu=-@;jxbLYbt>bl3 -H-|$RrL~A#2IJ?T<`)+}x<WBtjq~Z0(gJvu3tlbz`x;vIBwjfFiG%p~URBZ}ewhX0<;Jj;E4+3M$8;l -a*<#g0Sa^@v3h@%d@gC0?ggCwnJyQ6&NF+lqkYP5smBvIYV=?T|RPY<rTuJnXd|hOfBYYr_P){F4zJb -dJS&^R&e!U_7B;=t4-;DW2*~WvcaX|YhzDxb!hjWABo!MlcIh|6*ci*#alG18vg3^4cAAeUYseYgp{| -<Xw4*U|}_o<F;EkzkYCM^33xX;1;t$<>Cs>3{k-%Kd?3>aVLLRvW>!+2fP5Z7>}6t0T-O!%RB+_H<!c -MV6`10WA`K=x$#^@6zlAnrt<2|!Qc9?K|~!nTHY{$w3~s}cdSP5@p@yi1aMDt;4ijx<hDCWm*fB7Z-% -TwT-M1L<O!)<D{Po}bz&)*A)tPo4jNf8DYDi*+aSzp?I27WVtx79kPteJGDuf6jUY-#ifNmCP&F6)X= -di`L5rTCv_>dMIaK;NL>=J=YuR5azu?lXqyJt#k2gMbdkfOTFmzXG3Zqv`>Y$oYtar8SZ7@0`&4K=p` -KV5)bJ{f=>KFCz#L3=1R-v(6{zq9@!W5g!%OajAwc5zS5Aone>JIYgvn>%WxlZ%tsFBtblap5Ap|uzM -420bcgZdKzEog%oFHit4||khvjC0a_a?po2^t1ow=xUPMWe|9oCbX26hSUquxio2N|Qnl+Jt)1Kd-4a -YMs4J<yqqU2+InTKY5NRnVa-Kc+EKQTVe7_2ApQbeRv+Et`qoE%fJW4ngA$z$1oT@`FA<!;_^BfjrGr -luI6<yMi&smn^&3N}EsRhzlNm6?u?X>ms(Y&GI4ENGLy$dF9P;KVDG|r2-9x-;U5X6IX<8PwXGIC2;` -g0rMX2!L}h!{FVpP>I!*6osEY)w?<yFu6aQ?@bA(9;X1QRyPH8crSUwKc{$5=Fy?>Q7Hc-91?_e#@GB -*qZvp+|IPQW+i;9bIk86@EWP0F#0ovpWaQEP0d@B6?42gP8dFkEDYgGxPiRCZbg=^SwO;`(rH9$U5hV -k$$$?42i;#s5FZJgza_DD-{k2Rn(6?Un{qja6~`6Sl$!<jh4E9Y&o7p#01nHW1F!@={AKgWQ7@JQTu+ -GWih!$F&^bj~Fy6=m(%l~?a&D-G8+RF%gXhgNy9L5RbzovOk!4PS-#u%6(DGy>etdciw~BGw9UZ3o?X -*!J+OZ7t?(q}ygs7Od|q!s3`s4eR2L^-{W9Je=<My~KnK4Qr&I-e1Vs6Yd9k8Lx~6zrY}NCHH-yi&s< -F%8}PLlp-};J5}mBuZ8)>Fd6o|8iUuW_MPF^1%9dyU>rOCnWlAG1JC`NK55#&ycItOa2xU|+AqT4{oo -t$EcfGOd8PMXhuQJt#-_uhDJ97bd;XfouQv#zr+RgD=MDG-iZHb|;8PZ8-0{H;WX1CXkK9PsFp<XI8> -IndvHJ%8c-HOPH}J=C-|IJ$0op(*olCg+M&Tf@aq!Mo-p;t=1uTEuH(wF^=4aD)ZTL-Fb9LYR=I;CEL -q3adpexyqEBKo3c3Wd@nf*U_#m&@ldK*z2(T9kZ6Mci|0ircTFA{B@CTJI;1Bk{Ey^ZK>qKk>HAX-Lr -JJEeaj}g5<^mn4m&4S)dw18+P(Nv-{OoGlO`Vi4gMBgD=P4psB&vZcph;|{`m*{Y!<B6sc%_Vvt(M?3 -(BD#<0QKGd(>xnkc5Hy5nB+*esQ;B91olkTr(Z`8yBKir@&xzI&{fX$GL|bMGY9Ja(bQIA<qUl6!MDH -WIoaj2D&l7!z=;uT)67{9>=}0t^=vboi3Z?SsOLVl!-M^?iGb*llfIF5~d4J)aM*c@930n1x!s*2^N~ -7_TJ`&+dUKRfSlN;wRFaP;E?!Sd-xY0d)!7;%{Pq>7zH{nu^|60O6G9QF}32)cnD#FbPAJxRKCESegM -U6i@?vDMByUQ1R+&#T;!hVFKH1S6rch~D^!k&baH2kL%mT_hfmZhGi!I_%y*&6>`4KC2&qT}xRzE9&{ -s^R~T#(#wduhxWLtHDoca2a7*U}w*2{L3}?MGfAfNq?)xf4j#29gTmb#{UD2f0YLB)8K=e_(wGOs0N? -V;2I6C)!;e}zM#?9MGd~J316?le`+v0p{eg0Y&hXwKf_PB*Ow^5L4=bu{%M2*2p19VNO&#bPK38>{Eu -q<>oxwtUkTimu#s?xOrNlUa4F$1!sUc-B79I2|03a5QeP+C_3cU6OX}~Wdw9c1clk!2bnkzXPP*$mjc -`lC1t;C*S#i=m|62%mm--^yP0D-9-9MagFT&GLx$`eN<*u(X!d(bg5e_F@PdGyIuMxNd;kX+2{&+g!) --r!J?)|5>zbw&&U#sE2y~e$M9jtNJ&qc!Ro8YhQ-?aUcwtZ{+18x7Lt^fX~1#Uxl=FD`H-JB`a2RI|s -oRJH(z+}%b<vQK%j!eM0Dt2UB>`sT7GqX%~hbx|I&T!=0qzmxPm0;#fvnk!8@||bNa?I?{-0=Vv7dUJ -~1_8C1?GBqI!y(-Zt)^VdEUP(_W9f?-F<8y>q}+x~bFSH8W+UJ}IvU1_!x`%g_anfeGyHD9LxjsOFxy -NZFW&cw7WJnWRLVYm;KxM$yoviouzpO`-{JTJ9%!r;4YW7V@SZRR26`v_7GNBRv;b}*z`qy#`oOOr{J -LX2h%_7++ywUv;CCnd(&lD4OzFAi9wdL-+;j~_CH7!xj^YAyewK7*X}S5}VX!+)4oik%R-wt3$^Ft$E -!J7iaC5P|K`Y>1hy~O`y7S@^>VgQ`5NVm_EK^~w!;q10l^%wS+<beXjmwsXb-{Fl_{85ey2T-M-oq{Z -M!i*kA%0U_Fr3BaC<IMpTI>b6rVMkQ+3GOlnF?e+&Dn;(5JelVQITByZzxh)Mt(tYQ%b{h3NsxBo7qu -lv+`m}8xzOUl2cRT-OE+274Eok##sMly{7svAxq28vsw&ThwK)t6=_Z-iI7_PwEnl>;T9q-&tx^tGH3 -pkQnlflEN9p9(P++%-}U;xL1?VM#a2@uG!2W@;;=x^G2d)6WI-^QPw8)Rn2Rh9SNU8*xz^(wCU;$Zy> -aNq^!OM2-P*e&+h#Upx-@&WKQnacVsOJ5`7=%POcv@!Rrlc|qD6g4g?_~_+HB9TSqfYPG>pQ0#O9jpb -{AjJmLdE){}`LiR7?@cDb51P*fO$<wX6-X`FRDr-c3rM4OurNK)zhkO*2{Zt;Koyg?0m!kJ(-TwNX_X -UCmhIm)2crBury&axA5dFR@M&&y#*$jZpSCsfP=7y}a1pyHF-QbB+r<2)m{s#{hEdtY^;4gWNq_u#D% -ek;9u^f9W*Tm49R5T`vqLb=#~F+!)nf-W1Qf5!@JUOunY%)naXYJ!|~Bk-q<q`~O^j?~-+fX{grSbsV -g{T-&p3JKFdX>s;Jj=T2PPT2uXjz6t6Y-}TbAN4+Mjt9;tLxnkG;LAG;k+TN^j{kYc08}$=fxo*_{UH -c2yu=+;ujjkK@8~R2lYlM0;_x?ftSQD6O;{Q+k|Ic0F%*qN`F8uWr*jkvI+tcZf>%D$1;X48Lbit2n@ -WX&z%VW6)Kcc}aG<c;3KdQm2G<d7d9dFZMIZq+mnVgr&V|JFo@|lg9;jb^t<T_w1Hs3Y|#;-}X{0y_* -&RES}_xWz)K6f1ai@?)~7DTyI!v#SriLOWz^9Pkl?(-Hah;L~#;eM28$vK+WCmQ#mJO82~jnDH-e|h= -ucgI`yx$_ApT))@d9e-_^=x21KN2FNh!A$g5Etu#ZP`BQsb3IWXqQ2zk=i=9v;v#KDeErD{=Z6C5hwh -!peK6q|!m)&tC{8lDrx2Y+{BNbSbICoAi8-+XCgzrGBx?!Dx`^mva=(}O+(+@Dp7Iv+G~taT$Fr2qKg -j(}lIsBZe?k7YdWt!cU~gv~#VhT5QJ!T)Yls?t5VU~kL868q1x+JbMzn^g;Uf7H-9ps=61fxILbQr#4 -bh84qka<91RArjKD_<(Ve{bL3RJeFKG2R#%mH@}@X6yYxvW3@FMfX=KMP#a;m*eW-Q%*q89&!0-2wdP -y#6YFF5G26s9f-w&+}pd7poh;{{Jof@*$sg_&=9x%U$Bgzs<h@D5hWre>?EW=I$ma2Y3Aq_?!HYhmE_ -=a*H4Nx8oOsO9sgCujL2h+qr8NxLvRHzltwhY><n_r2p&qMO*_WwL}K|t^8wpP99c3h2W31Scb_2-+7 -J5)Hpwkn*ltqBpjd-sTY(g4>VKAbu8<Wy@|ZyWriF%uH)}6VJ5hmcuk!Jbuu4f{MY!o=2&Xey%o9UKa -<TREev#NsX3gN75>k4bH|kAv$|>hp=$xS<wIEHfF)GO<6hq@3EonAnU*_WZN9~G3a=QOd8{SZ98+Mi$ -0Vl2^XDM?;k1m&W=`R=$7724a}?dj=GtR&bMrG~eq7wg+RSEGJkIQxYRWA%Ys00ux_gs*ygDrxYlFKC -Q*Mem!(qv{LfUwFP`HHHiKYToDi?R04l^g3^319E39<2`F%CX^V+snA@^dX2#UKq0ic-zCJd4$Y%qN; -1+4+0{Ap`zkxWuNgR5lhg6h--yxIY`h64)5Pi7XzT+LPF5K>u?YuKNpD|E~AD{x1$n??!+3HS*^kVv) -<A@;Con<1cpk)BVjq8Q1WiR{wweDp|Dn-uv!<;K9-*OP4+L@bX7itbBCU>c<{mv-XK~Pd>H&=?!HYH$ -C(0bI<>yd~?MMFTV8hD_dTD?e(qO-gtBSj<?=^=iQy}RqlF!_Xi(-^l{amPxkKHf8f)DhpG=B`RwyAj -(&OU_=&Gho~k+h^_kjlzWuK5?78z7zW?FJi<f@-`SLHn{#JkG_dou;daZ#eIuB2;X5M-qU%%!pTDJ0U -9S|7Qrfs|6_8}cQb_xwMbneo%TlbrKg!hc-)w@sMev$nL3>-9g$jwnhZy7dxMD$3bDLo_8oHZ-kGCL< -X&zfH_$7XjF&Yf3OJpc9?cicHMt!e+e7A(B`p8s_I|I_LJm-QbrDt7dkvE$<6$4^L@m^dkEa&k)Ql&R -CE-+G(Sf7AZ|N9h0mh#pXJ{{7v{tp`+`f4aZ<=j;Jp^Zj@7tNqhAlIH-<KT^d(@F!gn1-Qunx3f(7cE -^7=zs`JXT@<(J3*(>SJyX)r8XBje2^yND@lVtE7ij!TH2(34W0}R8#S&u@nbl-P8lD3G$tf{#3%A365 -~F{7;%Ifo4E-(EOpeXHA|u^L&md2ONGFqMHql(71w<W0i-;~DdLPjhMAs56C%TnrCDDCE4-!2>^eE92 -L~DrF60IY8f#^k|mx<Ol$ayDW7pf;3M6@GO$-f)n-b4oxH4;rCI-O`XQ3uf?q9sIE5G^MvE75ksl|-w -E9wd5{XbsUiq8Eumf6S>rQ3KH^qDe&4h!znoAzDgw1<|!c%ZQc}-9mIb(MqCKL=O@@O0<qB(~*2Scm4 -*#kwlF|lZa*$Eh4&t=(9v$B)XmGL8A3CJr6-s3axBnzLllI`^PkMCQHpOWMgd>mSS?CU#6*;p+Bd1K{ -z`C2x}F0<ept<lMv#o9>Ay2Mrb^=zp>_YHqm5*_YfP<Vm2PqA77ZuVhU%m6mtQal;L2B`E%K5vv{R~I -E5x#F~+m;8@MLo$~nV#8Jh*)8-WLZc>+G%A9xkoX+a-&I?Q?LW*f-~{PPh(8m`Wmo{D28f}SS|_lXnx -WoGs(mf2*PaP>A!gv)?8#l_?m7k5iu-Yq!8OzHCXQ;5&slko%NLWV+4ga0!*&IT9I6`vEp@c33O<Ke8 -E;49)gvEXA@T?9X?n;TR4+cd5+J*S&U7el&-8xP3J!<$(;m&3&8RAcxImB7V3oXF>RzUqMfg=`k*Yvy -yYllZ&_^sA7Mxu|D86C(K+a<0W{IyM&<(m%&I|0FJvzD1oc5b2v;<VHE1@r68veBOeoa*25tF)vB=g3 -Fn&x(Ru;p``ro?lDYMmL#G=?uo1)=rj}lFLse9lm2?clYS!o8B~{I`h)ref44v?dGNoTsnrV7#QBgZd -_Ekn*`S|3kn1GE^Z86&EXXge96swdfzP8m{ZsiodLj5~FWK*IX)XE(xh}b#uv~YkBrMm8stC*V&ZC6o -`eO}Yxt3SgT0UpQb&;@KOY?f6-Mz;f+MPgu^i`x9<KIGC`s(=`y5cE90-<-AWMVQI%2MOfOc8VLs -yjth{_M{y+)mUg7m3AZJjMmU&oHeqS^T0mH}^Cc|pXiEa*b68xZgr(i}3c{g;*AkX?)MbPXgv$wcCcK -5Pv?HED&j)E2y`B7}-Et*iX}4TOShdq8ENzpH5|#t28p6^pxsI^3d%hST#~0$NC)|fH3lz8?K|SFig# -8KMOgNaZoX0W{9!fZza5Uja!nDC4iwczE8*v#4#}JMq97{Nf@Myx*36CY5MtB_IY{Jscv4HS+!bOB95 -H2As+j%MBNrYDf%5j*u))JmdxQy^L!sUc-BfN#M>{+)HzK3w;7#gQh2T)1=I>HADdl0T6>`6F@>X#Sc -i{#%-b|^vAUl8^utS4+B>?8e&pC92!@^4PqNVtVepKwdUX@px5E+FhrxP)+PnLec#Ao&vxB)o#c2N5n -K+=lQL!fmDg2nS335pFN_M>s_4i*N_2uQt>_NPQ6QB;_R>D)mD+Ov+E#AoWAIv(yjaE>b^)yGs2K?k4 -k3xVy|h;hSXs3HOlsC)`u!pKyfCKjB_7|Ac$X{I{k4fp9S4euTpb4<H;xco5+@!h;D<Cp?63HsPBI7Z -HvkTuOK-;kATsAzV&)7~$=NqX}0L9!dBpVI$!>!ZC#F3C9xFx1;_>mN(%svb+h8mE}!%oGfp`@v^)Lk -C)|5c!Df%!U?jx2`9?(COk=&H{m2%-h`87c@v&0%bV~tS>A+iljR*u{gbTkgmYy63FpfE6J8|qPgtP= -ND^UB!jaUTy$Pq0zYpO8!oGw{2sbCZg0Mf~GQxp`w-62@TuHbs;e&)j2-gtqM7W-CZ^HWaRKExt2uI8 -O5RN5mB%DKdI$?zdRM~_*2^SIeCR|F`hwxg$zJ$vOHz&NEa0uZlDKFs~DG%X`QXV-#3n6(3`xEviY#{ -7IIFhh0VI$$@gp&w|5KbdJjBo*Ag$8&fGJV1;Wcq~5Wcq}+$n*(U%Jc~zl<5<$k?9kzm+8}hQQv|16A -mWqOE{cxbHY)CLkPza9!5BgutEdM0?D6niR4dsh2%%LO!6bVUGg&sTqXGtJ}UVUu9NWz*UR`cz|?o7_ -=JNA`w|W(JdAJ@VTHcjij(mPPnYotXUp(3z$}vC375+7gxAXOGyzyH!xP>v!xOHO;RjLvWq87MGCbjW -8J-5H`cC9eIGC_9oboUI2}enPBjsQE6P_+H4M?*kj-&iboIv@Pm<Et*341P}{1Xl#yq&O#-ig!sECA! -SGI+`N(l~l^&7gPMO!Cj9k*1m6?9F^uf$@0_yt0^usNkPX;l(Tp17AB)@t!}M_~QF7URL63C0szbfWq -6z-A4SfDIGh#Biq>=qH{TQ(2RtG!W9y=uuRIonZnEbh;(u(elFoGl5;NQFPr8HOrS9lPso!;a+n~7$d -`%Y=Tkfjg|m}?4$)$gV;;#lpX7E>{so^|l#YY2gXGVla>!HlVIpj$c)1iVpQng+Ef^AQQ06jGANoL<$ -1p~EK|7>T>U&QHpT8KR&SzwBdyH81JtUL+k5=D%GP$*f)7C&(gN#$>H?p{u$5{0}DvPH-R`t*3@#9&7 -iVFe9u_=TtJpFi89t*b;iN_5B`DNwlC93hQkR!zMy{mxxC#n7gJpL#(eH)*TNmj$#c>2j|`q^CGI5j- -hKh)m@70&@2qw>f4i2hO^4w~PIQ?ZR>$*+*(B$Xf5SIpmN)jx;NFFDK0%;mpTO)r<HC-rOQ`5U9ApUd -S*P~S6ixqpJHzbsy!@v1y?d3jA$-($16bySQxlZNd8@ok(7&Q;2Oq0p_~<Z-zts`+y8d9vHod=zoLIP -rWQ--)qZx#Aoy=QuTA!g_72T5j1~?s!%1Jf6>qYCi2;Z_aul?2IO=dd%VSPEhN44$t=lwO!b`b=d?p{ -X(vXDc9-2!P9ltpLCvYr(6Z3Z;5B|d^@p2<L{vM;haCTYVw(@!8SK+*YL~Z@h7S{gXeP`)F>%Wu3I^Z -e#FT^^e0&3gyuxQf*eH+n?srzMVc1YbIx+i<K>j7>e)o{P9`k+lUTLAi1}5gd}b=Q>4ZgpGD<BM(LXr -ji~hmsZ{_@4`v(Vaf6jU$a+jnjSJAGW{g`Vzh~+xTrEq4q_Alz$C{^FC^~N=x)Y}-Eu@ZV2qt-w1ypG -fKyD_TVLQgSjy%TzJmZQ*9tXdAP`Mh3!XFjD|Nt7cYSAyDZgj^}AoI<Vy7dfnM=?b~Vx%59axAMxS@^ -s3X2V)0kiHY<_tMx~uKT$1DnZC0>w7S(dGd<6o&nKIkyy;Y4G1ry9kR!!S4-;MTCEDc}w{((J|11hG= -OgWEKCe&5bX|T^)%s)B^rIr3(Q5u(`MQ^@;Oj2`B(+}`e8;<BJAV$0QTd9RENg~{f2&J=MLD~-(^wa| -M9<?MKSixaBK{~%IVGw5MfmY5KM_9FrT*J_{ZDoapWq^o(AzY(@MF~S5aB1d_*;4Uac<#b)#tnjAEPP -nDQbR9R1WU(lQjO5HRU+UC4Y9VpQ&y*&ZQpMc`b?8@ONKV!giHP`WNFxIZrJ0BIo7hygutK@En42-AP -{l<bRZ~f$%ZHk%V6*Y$RMpIEnBhgwqIrO1OaVXM{@#R})@Acr)QL!aJnAgg+o$N%#cegM?+d*AU)E_# -)x=WQO|)Tt%>6vu@%~{!bDPCoEU;wrkdPjN~s3l;t{})NvB|%kf_t;e}E^gx{3;)2s`YlE18%M>Xq$Y -sp{s*X4vCl={%D8*V3mS&!>9>xfn4ze%P?c%=+aSk}{e!mkt7_Z9dBnVx1HCz$+~5x%Hdw+ttLxh_+$ -S;veb|7Qrt5#CRDI^h=yXA|B-xQOthgi8s(CG|=8L#a=~TV;L-e=hY!_@LAmVfkFIBU~x-L-;UZx$Y| -0W%d08J|y);_$#R&!e2;z5dK8!gYY(~55l{oJ_yUrEQ<&~EA>J6C8-a>r=&gzuaf#8TqE^C_-&~V!Uv ->22%nbvAbecrKT_b6GXI3Xl=&z8kxY;DC)ZJ<$X~Tsp!z4*LF33@+Bei_)>WsIzqE&t>)>*oJe&OGb3 -?9k_Lcf1e`!%5*Uja+dMWv@CcKvLbA-zYzf5>LVfh@dBK!v7qlDifEY}_7I%^&ImrD6H>$dgeFV`LAy -1rcZ*Y_7#KBwe5u3Q%mCV#oVhg?^e>+s>^{|ezK!g5?7?FOV>K^*zZ=cZhzmK#P*C;!=m<+{3DhtKXW -=gBC2jh#Xf`O9@%X_p}F7D~zgF~VyJ%l8>+w;-p@%gJ9pr{y}hTu0wd{?fulu5-(8;;P8Mh_GCDzJ>5 -n@?T6?+DS+|3c0Q<*U{@J{1U?TgynmKTvwN02<Zn1EG=lH9f7nv2qynogr(hqv{MKt|16n5!pkLpN>A -Dy#F2j<;pv3$B`nv`M-a{?{|5-mb@*X~i^%^z!qTol+L4x$|9Z)vu-ve#oNyuG?S$p~gS11Db}Cim|G -3l_VL5KCBfN&Nv|EvOE%oI8Fkxw@Anhvj0|mZY>PKS-6HNYc94YNyq+Lun`O9%{6ydcpKZGBW{0VO$o -K3h~VvU_m5&6sab!k`Aj&LdY%W<)^lb~sIwwC<wCtObWAB49Po=doj@Kc1PosP8YIZFPw6P9)}($1!i -{4)vH6W&Q!KS<!+go6ohk@_UOUFwtYUa3#QAItn}?2M+9{|uQwn#VswIGg<6m-!?7uGAOd=Lv5i`~+c -Xmn7|&s>pwx)DK~~AD6VF87TEb{_`b&jU7%s`7b3b?PjE%kAASgC4{9NjkNm-CjUh;KN>r$aPq&Ca1> -!HVQE(-?Xcp=e<opR_cK^x@~34J)y~R5IGg;_2}?UIY1dUm{%M4zoe?b~u~PDXTFOWGF2d5zO4?;@Cx -6<0kW~@RCw!E!wEL?g{59cv!Yc^thX}lpa4_N5q&^8(NPQBPc2RMJ3kZvO+4<`8QoP5S)bW$R>FRjML -|?$pcf)4&`5>@Gecu##wwhmobJYG<;9RvlBrbNtc^dih)#r!6b2R?;>##dNhg!b`E_TW9e4c;&Kf`6d -#nnC6WqwD@->0km#rjLSst++=Y*Et_^HJ%1?#7jmSf??o<3_PglcDNa%<Ill^(5A9GS&A|F;8Yv$6*3 -H?Rqn5w*j*o&Q<HB#Dyvr^T2u36N`1AS?V~(Oy3O`y5V$HUNe0sZqnd%H#|#&EvkG1&sNLXOy5nr^Dj -{IC$K}!zrcm6J_Vkyk!QYI55;_o$t8cHobugphWg$hvDV)`ex}CXtj-fiY<I)6T;xZbt=1cX^VD&oz* -e>V1TJvNpTK4fwrOy&8@8*@U4aWV{&QXUIk@~zT<De`u?}TX(-Z54S*pBZy(df6PZsqvW;g7tKN4rV; -Vc*aHn;klMg4}<w^#>p$|u%oob6JqTRQFD#rl)0zm3|hE6!Ha7weqaYWiZG&7{^}u?}ca$01@J)S}8G -);XN{6WF5G2VsXkTkW^S`q?a1Ut+y0M{OTDntn&F`$!jIx1OWQFV@F$)P5_Mc7$-KcrM4Xeu#A+XL}U -ugL!IyB-XK<>5JLoJQr-!_>1=Dj`P&|mq)t^NO{D%uvM);VqM5te+0Iw<!Pn<!x`T0)*lp5eYL7Mm$# -2x6+1Y8n;R}r<&o<uvd55Ews?tUixlhBHdP+6PHj``k6j~=SjTa;AAz0u5!kNgU#x4})$$PQ%66CdV* -NmJkXUk%>m#oIvo-!!7m4J0f)mf-^*>ilPqrWT=c=o_>+{e~&+URn!wYx!@N+f#nXA#qJYK(@xY%uE; -LzyXLH&UfXY=Pvwu;@KCk`4{*i`IrD^IcRU#Nx`b^--z`H0$4c-^?e)!j9}VqJf(DxX+?cgiEy3$Q=2 -Yp}x&TiwEEtMUk(r`9il?P~uppY$<L#f5I^t5>aGs+i06&**dK$2l|)Z9MnAW9-4FdT-$KOr~FUyzt( -$Gj?C<nIXpcncJ=o^7^3q!K_EGv>BF5bLakFt}w6eJu3YRWlWcK?QZHZ3Ex?by2reCEt%S_<3E1?a8_ -QG{Y2hN=WRH^WxEb!_Sls1N$|5jcE9V;{(>J*<%C6_TR&3_v}>)`cJH6v{GF@;VMF_R=*HaEy}o+R)b -a1{KIRPxJ<_*aANyLxf{@P3jR%(g?04XU`+E4DU$A?1_m|>vBET5()v?qK``$C%dg6r_W_;XywAU}Q+ -P-rr`IR^S==ty?X{*I#W9Q~e-){Hp@>iyA-Y~A&kk=;MQ8V*IiEqWVi^eaPmme$%$>|DRLuORMfX6?c -cJF7S#@Cv<Z2oeD|L}KhKYz2*(dO357SDIOko#qX|KV>j_xFe1ZklAZMBEkJ@#`edUW2~s_d}1Qj3?& -odA{x0@yo;e>f7a8<3p_NQQO7=HyK~@OtOVu`Rvf@o^S8JJ?rtl!!{jX_`CVVl#}zG++^62a^<~`Ug* -Ah!o)M4Y*C-xe_TG;B{?a))tf*66gVv~Xw->?cMSdfiT1bFcZ_<JeIE4s13TtDH{W#a&4Ae^KhR$5P7 -lx8J=GAl`j%xwe4f->3f|pmo@+S&!A(!Dubb7z>eFU@ub&3Y37j0a^T4KW#w6c^Z^Qm?7p?wHSLx{R5 -WC~zmcoyYZw}h=<=3Zdt;`7%!soTE`8DtTm9djQ-Sb$FDKC8ed5>?)pL+gPJ_}?VfAGTPi=|!f`7qCS -dcNm-vAgf+Qy-^q{X@rF%YF~PczOTG=lZrUoAdcQ5017hRIFG0*G~;8E`0V8#!kPsV|Zcd;#F-&?$5b -p>yncXKCK@+W@2{p=Z{}qxvJZ#zzf-tJw|VR;)j?;Z|wd=H~rG&>@PQUpS$qkIf+n%GXMDY-rIg^_0q -J}t+$o1tZh9FpH_eP#lpOi&vl&m=Khlf>yM3yY5Qj4CkN-O4XpiQ#Vy83Uypp@O8&fwH+}nxFW)An|C -ASes;4)9e(z1DsSn=UarUmu4;Id?8{PZUab+=2d+GN?H+!qBuIkh8rd0lZ`nA!@k6Z3GbhCH29a?l{d -+p0!ZM==?!{$%A<JkiPW4@l0m)ENEPXniZGc|Bm_cdRf55MpH<A>)Biw}LdPuMs^)Ju;aI`I3_<NHr0 -K2VuGW#b)|*Om+q=r(7}LVw0$I`$af&N}Vo^a~YBy8QUnADiB&{qc0WpWe+HSW>$6=IGwr-&=X|#rFE -l%SRGtHw<n$d+My99mkEI42vkresVz0mmj|J%R81#oF1>eJhSAFR}M}2zT7bW$@*z)Uhuv4vU1n+y~k -S~doQ$S#}7WPsQ&Ee+>eJGYCh%Isuk-$URS<%Ligag7hCw0mjCAP54+{h)^Xpwv^?Wh|L^v$sk3}>Q? -#vi>jM=lZtpU5;8TU(^Czr4JFd^XE7o=28U5ORQ2%Ii|BEw!YMr~g`>17C_N-s&XMbfugV+6iVz*cdd --dsk-?Zobe+)awjPpPKCVhL|?9!wD->ltV_2HBy{!`w#_27}6e@yScc)LgYF$o?+_e^a6BKt7x>&k@U -jU{`A9qRMy+4?SdcdlC!b=T4M#RqJ2KPuX=<D23{kJYt`=xa8fJu)LVe_`#D-+ejk%EtWkd6Ne%`>5{ -LUMHuY9RBI_hOu4RESOe)YvFe{rOcYwF5}H_&(HL|dd4!eZs6cDukr_X^#3)sRaocav9}$4{Fe?dY-& -F;8`tYHuPxl!&vVa&E#Log`dH$|N9@OaYM=UH(ySI6+HC%O+qPd@J|1OX`F{NQeQSEnd~9S?t6yJVX$ -ZQx=+LQAhjyLp65VFnsaKZH{N|T=%Rc$;ncI{5d5oC!-6*~;;s4d;WS=p2oF29H<-UVne<uH#{UfdO! -?*r6Z`Xu_Rn@a<>dRlAHEhpIuTQPY^;^IGF}5r2_7O{Wj=wzQ%jAi5$LD<5x#Ja|MPtU#K3eg`f`rrh -r=EMVkd+Rv6?1yVN00bl^4w|53~s(_$b)~pP!!bjmC1h&U30#Bo5)@Xel0yV4jX<g{H;Gr=S`1&di%4 -rBkb@0G<Lz-bjKsDI=4Um@*B_eeJv=d;^7yDo*Omj@im)Iol>qH{<*qDS6qf`5XzHJC0%;y#K*l~8WD -B##E<L;XXTx1R{rGV`ky>L*mOF%?3S+nUu?GDKl-gN13vW#ez4%lTTUd`CBODf;ven2`#nE#=jktA@S -XI1`a^eJ*m0n<G3yAsx6Q_H3(xHPsb|0Y_?%O1yLp*^{Bn5Ch`D8F`von`O1M0*@1^ZOFK^K*(6TzgU -f$}aG-IGL+_!YjzRrD~yZOgG$ChsG|MsYuge#xtdM&Hku6TXD;QKYnADDKhR~$X|;K_3Xx0|vru6}pj -zQEa^?RvNmuQ2|BbwlQV^mNa*mwiXZ|NQCm&&_+L>&|Bv-@a*IKb!yHdq%I{xjpdx^27lNdtMs&^gC} -|dvWf7&Ix@7><^6Iy7F4VkS}MvegB%EQCCCujjjJG>f7oEy)Eqy=|Zku+7|ut3p;k_|Df-<Q#?eC74I -7teL1hb_lPe}&sp2=yU%<wCfmMhU;fJ2+af+ca6%Vx?W?f|9_|*{<E84ZZ?=Ei^MhXdn!WkS`B%rCnB -cSi6Wxgqmrwq-f63I{%gd+t8#F4^b6L<g?_CT0v%#xXamK8xLq5xzn{;|dIxYsAw#*9gRjMmbdmS8R4 ->&%u?}lf-UjLfu>k}Cf?|9y{`pM4<OpkXz^Zt%Pzo5>&JB6jq4&1(JSoIS7!b@qVzWC&$UZ*V0Zhmlk -x9^*+$~te2Z=Zks;Z=o;9d`~{XZ^7Mn=6KVI4ZnqdGX8LPV$AB%$Qy4N<Vv|ckGuT-<53YJL1=z5ykO -~V>f?SJpS9OUDg$RUi0IppLl)o?8EQovdlBDpGbVpsxRO8^q5B+RjJGWoc57p-;v$hM_DtzoVM@wZG+ -EV3(Pf5{vhP|TaRs9pLl6w(sx%*%(*ASyVr((C)bOKVgDuX-Z^~g&GXJgJ+pVjq^GMF^?v%dXB{73*} -dkwj<cg`XTJE<vY)+wzfk(wi@R=%KCthV`wK>ftv{UCr>=SM!gl$qEq9*oy*x8+=*Gud*R&cmeR#XAt -ACB_@$R&n7W6%~tgviF$*{mTj`vv+_i5hUp0(Yckc&;?(m_#rz&Oa$hbf*dnBo<{lxD$9*DRFjyt^}< -z7O-z4`v=d(agg)j(PefGf%%em}hef^J-qmyjm<~UM*KJuT~pavsN#&X8t=_v(}$7@76WUJK!hg9q6U -#1A`TPn?8!ZZLH$c_EyEGU4h~gT&nm6mnpvOcPPFghZWxrKPY}3d~|*tyX*WqVLyWJrgiY-^6$Y|*#i -nQj%vk99$yR3(O<mSC+mjcno9q!xZ?-X$++bQ&=jKaiKChORbKfBUzS?Ccmt=?9sl4o()SfkzleFA)9 -Q<FaGLk%Tbz3L*vaYLUsNJ3Nq+2oj(bh~K*VqOkkchEe9ZlCOWworo}WMA__s&)5uXE`2JiS3X=S%(4 -s!n)vkq|_)3ci6uj@E9COm(byDu{x;qEVme8%a!hd5<b4}8x3zZm)j$MxqpEg87(D95YEeaZd1{>*8~ -g{O{jzQ2t=&hf<aoL2t!$O-O#ZNOJN-s~fs8b>)!a{5TXDIR|ME1Z@kcdy~@(Kb$NY&$tE`Pt_*=eIk -R)3R@$=F~W|PPj+*|C;l^vzXJGvz440zVJT7<A*15T3NG-(=^?eoYp+jsh0G>sj>c9PTA4#I5qT%_=f -vm$>G#!e2LRC-4C4BjOzQXT#i()<3ATKC<z-9T{TO$c9%Un`st5KH{AZwozYM9+n3r~H$6HsCE%9%yV -IjrEwEc&nqi7Qd;e>%&h9=jdei**JKkA(d-RFtZhgG#p#120%Hg=H-qz?}FF!Hv)PS7m`i?(cuI-r{e -QSqPaa9laM@PoY-8%JhLiE~!Z~WP>EF*fZPfqFc-<pU|PIU5=XO=!PEhqZV9k0x(8fuEpJfL_V{>&Ub -s`H`O-uW&sI<sx!+T{g#(L?%ue0GdwO7yYY>jHoM+7SI~w;o$--W(qN@!0ThJYUR@-Z|=nmxG?XGy0} -Ei5_)#<U}97^|jN}cI8E<KlS-+AFpB2UnRWtd)v-4qQ~8SrTe~_S<y*x56A1*-4;D>=Ga%qeVZ5E>4D -$w>hO;{qSMxFc_4dsbadvATh0}-{OBjw{;@c~dth|+&P%&v&!<J-H{<mS&0d)qojvpQ5#L@)jDBuT$R -Dw5#zsFrEzx+YV{Y`F>BoF4RvV))oVogVLLY1Nphq^J{p@mj^v)Uktb1l<M&EW}#6e?$HG0U&#iQQaI -V*Z((fN>9m!wBW{bFm^X~}KTE4PL1^q-Uwz3P11!>6ChiyrmC=JpX&GolmpalgFub!zndJykQlc_@kW -5E=bm58d0*Tk@jUZh30U?Qfc*yPVqbLficK==6>;PyGD4IeJRUueV0$OpgwD@$|XgammrciwFNW^ml7 -?ZvL$P*ngk}A=*OXK8Lu5JeI%H;yi(Y;eHP`zALDKzj+(@8*d@)kBYvxfLnKX3srY5U}H@VQ?9{mv*D -2?Rzt3-(3+8Lw%uarZs&n)G{ZdBWXUyW8XWnC`~tJpU@kIe6!If&h|d%&Ki>xYvn<w3gUM<z6+pmDh= -aSKSmv7hYQpgoP_k_Kc@RUe>Drlb3sL+!U<{ki*M#Ld_4xdBLk2{_T_6ovTo~2eV$I68<q5Ajg=SkZo -@Yd1wElLp!{Or1@=Q4h?T$>yy~PSyw}_K^D1g&HztGWG0J@yvK$kZNHw8+=1UkiCcny3<4+Ed|HZ!pY -tU<HGu7S_Ni~Vs8tOt}{F5n(ilDW?Hj(n@bmY-|LHd!-s&9>|E=`6olW`}_vnUj&9X*T3%84Bdy<9PL -DxbvuUzmk4DeH+kpE=4~+^FLShA5&Cd&Tt6MqU3>ZULHtcfYL_^K(9UeLVf9hclK;^x(OU}Emkwsv0Q -tTeCB0a9OC#GgDJ}aIqK1`&~EFOZn5?=Tj%zWku~+sSuZg)2xzh8Tk$j`8Qz(W+*K6MzRE9z7=7jx<~ -z*%_#k&SjR`&cy0$fwuld+mw7OP}SE@@gg8w{=BOB|I-C?r1IRCw5UCNQ?m%=onKbb$#u3dRur|(QNu -L`bV425<SZA$9cK2eRAPmiuW@H8Qw3#>(&6s`~7xd-GiH#dJCGRD}AiFJLvrghRp{j<#~!~(Y)!p(D` -r?O-j%y|Wl;+}t<UOH4Ys!S%_GuMQtYf)w9O35?l<%=zzSQl!2UDS4HXv9riUx)m_J5hWE;dWaIa2KU ->^TT;Ov{9J>els+FXxsHHI2C|jL6rOXy-^DL_gn>Hom+cVRyV%?zk2<<<oR#9%I|JGU;pZroH9CP<Tv -Xc${D*gaeaplsrFY7euVsEZ<#U0ZnoKHOoc{RJR`}LkEdnXXV@)xeAZ0)oShMqJaNdN8Oi2cv&n9r;T -STgkI9zTw;)rl>mFuKTUWIC9v7RMfW~urc<<}$Fc;x$v_2Gm&nW_T%i~kh{<{^v*M@K_!VTV7B~+chm -P~l!cjM+BP?p>-xNl@+Mi%rTRT9T0r*@kj8-rmEYTVHAsJk1l(lu^w@jPyw#tj`WYTVH7ydK<woo?I| --T$y#IG#qZn_Ci3!*E#PwuI!y&8i~Z!%fG4QSNS>pV7@NmGg^pcjMubz-<etu&)hu$9Ve<_K>*S{Q2` -U({Wxuc#=-UwK+1niR?0io7-)iU%0DVst6Z3Nhk8b-9$JehJ(i6w@9QLH$%tmIH?S|31R`b1v}liSyC -yuxs)|Gy}@(pr#4gFgt=S+qzR+EzLYKh`M|#ep3zRDfimEY=@(FdEjpHjd~J4HMz=_Af|>N1j#W)o-K -1IM-@e+gv@WL?ojG&n;NpndMfl&DGo4sj1iBsatU^aYAV>(?(*88i2Wu-!lm~0i6uhIb?F|hLF78HG_ -n|D(|8&)TRl56yTNSvy48`=dZdBzG<a$%>nePFgHdZ?J2zaI$GwQvVk=536n`8ayduv%AX7mpSx6_M` -C@4oZOY)zA_}+tyyMaUS2+_A!4nTW3(e{uUK=YA<oY)t5qn-XDh%<;4Aa5QQ`->`Qk@rEVL_t`jelB4 -<z<oQOe(jkaaNmXBcd6|R_igCDFH6#M8Sn2>D|s$3GPVMKnZOh2C<u>sWta_bp3f4dtJUG0t-h9*g)y -=vGkSdOJN^^>o(E7Ry=z@=|H>bEdXk(0#B(UoK%#L(dop7b$nWt<^F2%V=&K&6@*L$|>ju!)Co=f-p3 -*(dund=oGAxHO41>J-as4~<8Z{d73BTMAMDMQW`4jq^3gy*}hZm(R%d6W&&^i1bqBzgO{q#g92A%r1X -e3_h1kmdQXSg!B-|m9@sqvikgWCiq1Aq9vNZ}xi-j`(T)JUGHQW!gu;>=SosE5H^ze1i;h(C<Ve>~Rp -gYI>GSR-y<fox^KOY1(ok+A73DH!dtPm2<G5bM5dTN&V&(u7}YUbmh3I68%~TKLsaK72s#W|VJj*cA} -&DVMMV8j-6S@__c`+O`e#!oOuBdPifwpp8yFcGjd>|14vppJUAPL*X9{d<Jp7R=KtBZvSBH1NengxEi ->xcft4a`g*-SyqH0c9Y+N4<>hzpA+<hX%%`?M{n_G_Z!<Fn2l2LCO>HXz%Gc;WlFKCGCIcSlf;-|-(b -PW;2ER!3dr;t5NH>~?b=S-4O33prNEhVK-i0>&?s_qTe;ockRQ2Y6`u-|69tS^Utm8*eZWKmao@F0He -gD|WL+f7$ewSVRTQGk$A8PsRhs+%i_eh&#zYLXUEGq~;eQ&k*A+Dovm1pzgzz=>~iDzOH;XKbk9?v+# -1z`R(X|Fv8kG*rwwmlfb-0QA`nqL?z`W4zL@#(M0<96_i`^{OWharz;?mX@T|3USj3*r&X({Yz&#_#Z -K|J|9+At>k7F7+My0{<Z{<=hwASp@YDZ8S24!~b#kBVK_Tf2P2gOmX^m)c7ZX-$O3`VH*Du_`k}9za3 -;7!|SAwtsgxHZYCN*bTH8Yyl)iGlI74I`19}nJye2c&WvDbP*zp%Bd>gHcZaTTclW3~y3}U#@P|Aw^@ -o99375s$zB0j0JWCI$X&i$-4!<KiedzjU&?r8((A_K3I|^>&c^U_~OwTqU(*S6TeHv+tmj^2>bqMJEB -cU%CU-<XpGKzX~FYgE4)0^5zU0l#lVQV9udjAmewVkKu%<DdIs}#>QHLpV<J#Uvj?-mUP9UD$p`^u;B -GAYMekfQ@UyV{YS)xKjA<OhCHA2r>!GLscn0>9}LW*z9eyXg1a+A8+FFQzJN#uSAWQP>M`&!#$Ykf#1 -^1-=K9oqFh_@t;0TVMpL6`~0T*k`pE<lXOMxBlg`u4}+AZ{Sup~4+)KoQD@#DjUiBfnm6){OPU3`fM3 -~1vj4!bp?Jowhq7GZ^4xg~%Kt@8`OgNovE0pBPoVGc_jjqQvpkawxc^;Kvi-q~t^Jw!mJBUVeuCd`*p --MXbmsI8^5vx@8SopQru?HIKY`RA^n&_^-v{75`qzQ~`z*<@<p%L>EK=_pJ`uv>dfVv}J}#~MjM~22V -|{U{&qv>e_i6BB9}9}(b3N&|8I7eCcxeE4|7Q69pj^OL2nO#G{_v`(z&l6ns9N#tLiY@!mx<y#o4ou@ -I{v;MKGW%z1a4*3P0w7!QP|sv+K4_xw4CT0L=O<HA$pN$^E5%b5FJ1?j_7SfXA@mabOq5eqT7k?BYKS -J1){$bU2YciZlVQ5Gl`}WonaDmF42dGZX)^)(Q2X>iF&3B8bGuQ(Y{276CF=9m1r)}`-pBL`WDfBM2` -}!C0b9kd4`}NL?elgBAQAxo9KL^ONl;CbQ94}h<;AAmgrAJ|0LQnQ&0oZNTQ>NCK632Y9o3d(d9(f5q -+NMJ48PxdXcCvl}|^akwnLuopl$lP%4kUL`R$4{SWHKnH?!OnOs;9Z_Ub|#?E@Cm>seCR(pP~Io4szj -T0*ytgjci$2*sF#^<Mtqv%<T=VV;{Y1Hp1aKnYDB$Fe18ta2R1Vfk5jD4w$!!-GnZ-T{Yp2n($T$v&; -ezzH8w_9de<=JHU&Lo%v!%oc4EX?I+wBg}q(-`{|T~p0@1tMuy=P|J`*I^k|>@cV1PqSp2W3x>*wpkg -=#h3_8O|vkb3F9T0?2a+GI0rS&YnsX8fKVwG>#SU}NOVjQTf$;<^X+C5a02GcMP47ov4u99+3FZ=u|b -r4Tk$mfemxdf)6A;)F?hy=>ru3I6oN3snS>Hy&QgmD%xnZAj1ZfjX;#m#oiHXjaZJL%0ev%bbMYyFnF -fWXb7iteI8HX_<<I3RN+~dBOk<Oj6o(D|#Y2dcxP)mjN%1`TXi=U?W*aXeYlb;CztHM{IuL?sQ?4lK_ -)He+;+mR`>x<yX&hip0wmZyusg^u*jGgBI?pV5q^Ax+31dH7f2T_<6H8#a67Sb}u6lItTuyQ~wOu5Ke -#zMs)bG2u(BX^2*p2Z5mS$~Z0Qf^Nv&NKL)R$R~7+n~6fuD4#1XYvhH#$YZr2kSBRrbmL=G*^4z9%C~ --Zgd)7fHK;gYj#{0?N-lZlf`aUGYEaUXEG>YEMJWcXf_SP^Fm_nuh%wv$V;wlIm`Yf1;tOWq}%WyjCo -p3jVS_My{w~y{bDjRZ9LXdO`D5hT~ULWa#Fqp6@do_UK62sZvad|!dYBeastkyJ)rmsgrej4Jy#~Xvu -W+bSTj=!ELL8t*wbFAYB`nRy;@Ei5vk?00TE~Yu17+?DU<TcbN96SIgH@)f``iqh=9Kk{Rtv$Mc^_|8 -4DGMw_&!B-;cG}>^%RR=W_0rXfEPT)7bqU@ph2JlF8d0^c8F?>Lw;OiLo`vebShTc)y!#ED8HJcFjw6 -G^zP&@57>a3wExN3bC-IzsO6nF|Qyj8yAnMCYuEp&8D%fI_Hs%sC~vZLX9r8XQSAo3bV4zHai+`Im>Z -Up`)PCfwCT;zDDG5qU>i<pva)`C-Txn0R0QUPd1B!@)y!%PRbIswza6W&PwrbzXohN)#r&`jP1X}P@Q -$8fnPXEL)ugv#qjTuMQ8Z;EWaUN-Cu_K3m(jQPWS&y*I%7qrqf&=bp5mGG|(k+3G?;!b@6}giddJ`*1 -Ij2g}ba5uJz-esVjQNjn_^8)Bf5kskrg*k-yRT<MniY`JaEWp54S%W)uAVNv_zxitt~){F}UlzoE(N- -!9t!maFN5J%xYM2T%TI<^FeH|G(D@&GmnIHBoe)ZjZ=k;YpFUxOj1A!q3x2VjF40t3?}X{zPiLyM)tn -2*2x@W6v0x;J@gaphlwG{$}_XqHjR>PdC+W3Sr-Ds@rsXli`hbZ{&BAz2JB3&SM5P^VsZT*P90{I(+n -G%@xM_-z{R+QNP`M>3<Kshpr36*MI51M*Gt58a-dH(et<vHwK#E)r|em_5bGuz3jnBIu;D{1kgC3+mm -!G6X*v(3xMte`T@`jKn<-K3!bcFB|r^G0~iYjS_3o^C>jAq0j)$jO~)3rfwlxRtu145K=tilYy-3gs3 -*=D2ZIPeBY_%#CIO8ES^_i*s38R6qm59guqP@A#l4KqC<lS2qP$_ky(~<)GXrC}fU|+#2lSu;_d?6kO -@|I>vd-*L-j%TyirHg(Hw<6Hg1aL%DJ9*}wmDrn3iOJSr90Szv8N#Z_HY<$VY<C=>rk_<tPf+AfYbWp -9#kc)h|?Ojf^a#|TJ#_AzuNl}u&S!H|FsXASeDpuBdhCiMol@E1CD^80!gB#Vb%py5OO+-1D3;axP|3 -4ytiAJnuqx?V>w`&qFG^SVm6Rj;*@BaR1Q?s`u~1wpN&VtsoVGbpYMC_s^!bxd%bJD?|O&zuC?}ATfd -+1AkQwU5Xpe&aNnn!em@LwJo>Ywn@)$hyAW1h1Ns0a_29cFQCevap8Xl6dGzF&n^9VLPrbf`o;(wBtj -XcSJ;w^+)r)6}R)`Y7xxf$V%`-WUYei1TeSj2GTm$~1rXNph^y3+CzynM~`AR>XE*{iL=mXdUa^%Zrc -WK8p>j0h+7o}AW(CM)Ru)iuqVgS!(h&ELN&OrHuK(wcg)hY(UFKegV?1P1P0{2UUc}8c9DLF)^hX-UH -!u?9X6S&U<4%6A*BSM@(eL+Kc=4gc|2W+WTnmmT_xA4ccV!%6xqn+VAlP5|mAI`J-#%k6P&@bGt96>s -dXx2xe2e`J51gj$;N5DG)d2rex+)u>hx*E`PG|yf<rj<Bh<&%7WA;y&SH=dz+(i9Y-^H=PIUXeUY4sr -op4gBILAxZ&D#_`O|@h0nd9hxzlpNso`6CfYcSj`p(y#q|1C`1Q9#}uA{hJKu?_p4(n_d26AtCjj1rB -wrN&?-dnbRF_V$<2U1vvgQJ8+@C_nXJ#CKLLy9Lr>A3Wf9~6J`?^<K8|VTXLVTmEI(m(RI5zXq5BIwl -Q&AMc!BMXGdY%#&KOhWa_EQYq{*^^e2mp9SMco6W18ciLYxP*|BL-nA;SL+y+M1nmodJhy`WcMAKKTZ -gk+xGJKkhj$$Fs|PFV6P_=X%SSD}6_&dqBL<r&$)?u4GNL9g&Ua;**>b|IFbUau6|>sZYvmGvLftZ6( -;4EB^xRfT>4u1C4Z44zS3p?PFdf8YnQ`0kNOz2CBd@^$ETQVrPTQIqh<RrYR*1#E-svRt0A2|LU~z3> -l_`S35e&rP`p_#Ch?>_7Ys+AH+?4f+%G(?*`{5vADyS8B&iKE*uS6!x~6_6T`zrhLb09&ZW}i+X&v2$ -2A2+e&*lriHzw`yGc9@?g49+W9u>Kl*>0-d@;twu64$&g<ivxdeV0^+W=u119be;w4`1gj`7PPM#5WR -I7Sh?<dPHo?%%bg5IJ1R)`|NZ&5DnUB2%TsoCD;nS@cA`8~ZKY=9mkVYh%5K#x)(-lAXJ4L?NreW3h^ -X8(ZoN1CcX;2t&n$sXN*`0dg8NZO<OtD-$RA0B&ke{0>V`=8{!Iz1JDVQ9zmL#KQJXW+V;*KQ}>5<U{ -*)J-SdN<Y`_-s>RW!Gj-l!UVv%D4+BN^>v&n@{kbU!~cYRh4xLS+^leIM?iPjQS=weB_4x*H#pV6r&5 -St#e|!DPU(EvPNQGR_i54vdcUDwL4Ur{+ckenc^=nFzSaFf_!;m4ziK;6zcyB@I?J;UqqLwZ+Dn|9-} -fvxRxA3R@*As}f6!sl548Vdn&*$~_v4!5N4>oL9PQzl7Ji=fp<Tc#(35-t{%aKE%lB*m!>UP7q^YQy` -aM>Q{fXt_4}ap>K~b9D&q9QwTq$5f`0uh`&_B5Ll(g$(rgBMnMQZLs6Aso3=+1GO@4evKqG_TM&<?m; -RG4B-8qaglk^#@4-9$G{@l_4D4CN{tXks<XH`L(Ik7<cFX-bdE0XdF&G}1&0?iV%ERJ#>U=;5x3nc6W -^Qe#bcp?&Kun$nvRC-i8diD_==-=-S;)d^F$hbG3OT+;0t{9ue*(4CsNUz^|-dzU7{ao_S6O(Xz%-K~ -kPrtzlmdo-~G*Rl6%N-iaU=RtSzeVUS|=l#52A*_I3qF-YFs^~X`wa{RHF{TQ@x4^I64E|70X)8@EMS -q61LBHX;s;ws0vpp~L8(?t<O&sENXH7H-hn%`-q8iuX-kO+;YtdDMKaMgv0RIj;EDvfT7We(SfquZE? -wYUwCiKvho>T(11byy3HQ|Z-$-Oj;cgIYLeKgTli#8SY)s!Ex_0xo%&k^mf2P_Q$J*+QK6Xk%8fg1D~ -{XGc%4u9%5ScBe;)ye>eahwQZJyDuZFyxN%RS)An>bHezD(-L}s)+`pK^GwXS=CU=^SG82hJFTpWq>< -i4@tw=uNdElvtIZuKri4W11187jnI_8Nd_D;+N9orVccQ^+>HMAc?|uE`&Eyz{t7KA9R2t>^z%v71DO -0bP51$pMrh(uz@RAbiSm(fomGGp(Yic+Vl?`FQx%|<<tLzD0E?c|L^`0?WKDby|0t$Fo()dj<e0AX!Q ->uKevfEjfTbu`J%f4&{$>(l9Gt~|Ij&XD23=#I_s?kJTa-)u2jmWDS*|Jn7X)~h20!$o4il0{&k@bC0 -{o)?i~gxY%S#%@#~4#J-~*`7mQ4Acbn{%PsW_t;FbMa{)<91Hi(b>j48Yj68vN2&lcyd1ifeP4hWG{k -F-_N(O2But<2My$=yoVF+0JpT6tExdK1&n%@aM%2^f%kh(Nr8Faw#9gC4kYOHyQ9rK+koW@-L2cw4Z2 -G@*A2s#rSW%rs50B22B*Ro{iwY!PlmuH#HS!mTrOm;XdC>>4j^)Oa1`jO}-}{&Upr49w6TxO-B5;%nA -99abLt2eCMzm#&N#qM96nl`8>#ZJ;@1^oN&GK`NvLp&Uv5jrSaOw3B#R`?_ZG~zIT)i`SJaj>M{T6Zo -&W7)Igm>Y7xT5V;K?vxd@je)O3tz0^2Sx-$<>&m*75otQ?T|82W5H?*y*h#&_7^I&EBF@B!p+0^lm@) -T60iY{u4epXW;3>bbApZLQ}%Q_=4h#Pu5`SGZqxh5Hp(xL<XJ`@i30((ij*;lB9__bv6@=XaR>O#1It -DqWuYY=BL;&=a{4zTRa8&V4(4MZ-(i)?Iks_R_WIX<U0;x-R({<r`eO_L8RBGtZckaP980`;%;PgCBD -#PrihHey}E7Dyk=S>C#0E9z0k)_Sj=0E-p^YoH<h$sLh7|Z6Y~2S!88piOrigi;|KO@!4meiQj(vO*o -gZY^pFWs(95zytv2KL^OSG_UwJ?a-Td~V{1|~d-mM9EO1utso5v@T*Tw|aP5wZv%tmm?Ag4o+_z`X9( -Ap@pxp7#Sy>aKp3k0J<^C;@<-5-7+56n9i60YFqhBvz`91q$V)nh~yspuoPs05gUZegRJZD0g1$zDZ^ -`wic{GL7g-qmkhRP`Tb`}#H7m-2;udq^7Yk-nOJKOM%^1wL2wFRFQdPtBeStb^CT4SymS1!^Xteq1-) -y8F%!tM}{!3o+~;_wxLOcbwJN0IPZZ>)#)2He}B}lvu{@a<9pLwX2U_KwVew-Iv}fZ;vX=jQijE_m$N -^SNo!%|HHIL_f*&Hvz4gw`=tDJ<o4<s^_b<+zo%ALOZ8awKdY$JAG7=(rgHtUs$bFO{1AbAqBH4_MNN -y61r=^KU#LI}m+XeD*@W(>u8=inIafU2E93>p(k3)yH{?dhO_5tj>bZwg*RQ4L-MV!Xp`oE-#E22%>8 -GE*OvjUwl0;5Uj#$5bz0&bdKmAmkIB}v@&#n9^73QASqD_q`iD#_O$c-`E#e(f;x5rGJDi%OQG25kFu ->G3|Xu`w=-<^-xh(8v*c4CZ_zr@VjePZOuk=tX2bjt;dm>4o`sFWKb<ou=Ww~rYaAr{EA?Hfk2zRk;7 -{{kt`T)bE$lomfD#QYX5q(`F`Qn)#@xJow4G;-#qdOxv`{8T?(efPX=+qR-pr%u9Rv50>C`U!u3e-Ru -Utom-)uwi1<s8M3{=+WZIC!ZAa#}5({CQJ}dJ@u5BJbAL1K7G3KAM@tT6Dc!&Mefu6#2fSbh{Y2Iie( -c6#7k5C#j5FkV#~tbBHtD)UR^j=Y)ZC@cVB#1l%-7+UfZO2V5bya-<865mlWOKm!j{7QarI&ihz%$c= -(_c!wyRkk390I6k|?GF|I<2vENFuaN$C+bm>yDV#Nya$}6vkl`B_@)vH$vyWK7_GBT8Wi;9ZGh7B8(F -Wb6xt2pp>ky!M-6dS6fc;}sW#O~d@#ooPp#s2;K#m66iEDjz#D8BsiOL6u@xj68H6i1F6QF?Le)G2Z9 ->}hfACn>6`s>H>M7nQCsnY=NAhY4{Ll*S!{_RY|nTVU+B!GO*3cF|9E6=UQuF-J}l$#R9*AlHeH<$lA -TiaUYd3iuY__XGYA;Ex9W1mGvgX5x9^uLgbr@JoRI5%7<@;I{+5AMhUs{tVzR2Yxp2cLIMu@XLY!74V -M%{}k}g0{?;wzIQu}Z~oBrF&JlNU>sjA#J+5dw{OD;KWZjqc~>F7946%PX+oY}A!OA$AuqV#-wFIyz( -)X+)F1evz(-wGaloGg{O5tc2Ka@*-vRuOfPcaT-%bC1x)s4nQe)uX41D;XDg;B)e7lhSf&T>Xp9cObz -~2b`k6rM^Z6ZwE4V!I=n5h%YwujgU&9B0YLN<F`$gWl)hdnFgwADhccwNYKr9$pM?1FCweh=Ue0sdIv -Cjfsr@Y8|+2Jp85|2^QN%@v1$e**YbwfGO9hKEr@9BOzDHDsWMU8vy*YN%=^#SdMjI5$j+3)7^yxI&7 -b)=BZpep!ouFYx)zF<;;h2mUzV&jNlT@K*vq6Zq?azZ3ZTfPV=1-?-qrJA2?R;NJ`UmcVZZ{0D&FANb -+Gp9cJ8z|RE!cHkd$!M{93=*jg~K)?Y10si_iQ$sp>wQbX?RlC8pPyGjk1P2EOh6MQf`UggI_G;h0ZJ -WV^TN^b52IDdQ55^yXff1cLu)yHKX6N&e(13v<zNmg+fWPkm|A+@zpl#b$EuGJUL;d_i`~w05fKR%*J -kY6A|A<ROhJ=O~Y0$l%cSm&TqSw%-RZDa0!Nf=XAtAxOArbfAagQgSqkxyQK)VRw`}z|(ASB}6JMOqg -f39e3)5;7YgKO)Lxa-b4?s&MLD$q$4XlW*XKp>y`^ZA{3-2bqXv>_eY0`Mbz{X-uK2^km?(VP|B<9YY -pe`(UB$$dlE0-uMfg!-FbRv?1iz~=!2LxV#?LI;MnxU2x4x9_Ox9}pTCGB7kSbkJX$-{ma8=N-H{4-t -C(0jde3*CP6|fV2Np{ayQnqKiWZhJ-36R0~G`gZ_xXu6`sT1a&kYH0X{y?m&Us=Mg<_itzIuhz1_P^S -=%nq)520_IW_lhE08LvkVLg3`H*wYN438-}o?sZ*PD92i=-BwD?AZMuY|rbW&-2cS!^XbQ=)h-9Wqf5 -$6N;RdAqx?emCU-X4u_(zIqlppYbnhWJ8}E<N|}+1>I`V>kEPgYht60Cc%qw}604&m$rR_z&%KTcd_O -@Mk~-YYz^*)P6(&iwx~^tErJ6p9lCtU5(GA8T|tV^Sh<lZ9^jhLVf!{*MxAbUr#|E&3c9UqaTA^9<%; -H^%(biJ`~U=`0~fP{-FLqC}Qxy?!D_gcBvm-6YSr+&SMdBc?zxbSjv(G)lF@_6$m6s{+xJjK|Q(NSk5 -MV>%?<ck5i0zZus!wDju01J-9aZ$V%uh65|Gn<mmxo{i1=Q=+*h6XDMO|__?6Zq!@Knj~NmGUw-*zv1 --*Sv1ZL0k&==k($mvbtnkJgZ>V_i%{SjvvBD=MSz;C9jUvPfyLRmoAAb0uiVcn*JuHqMJt~eLKQ6xc< -{R<tx8I5%zCWvCgY)Oli(h~JRjjxu#X4N?|HZ}6dbh+t*OLdbV4xd^fo={4x)(9fWr}8Uz33{piD9x- -Op^!13VBGZlP55KSGnM0K;%ZPwG}_$2>c$v_XB<i@W%ju8t|V3{u<!F4*cD~zckMMH%|F)obtalPBFg -g)Vz6f^-9w{>O)k`J==PFd-K@u=H}+jJ)5`e*uvws+x`kYyQh^`+qUi7dN=cE+Tm7QH*eXxeS4H`=F! -5tlXoX^U#pH@-uK_^-3$e8yY<$;-q*6Nm-j6<d;QgU!)*5I=<V*_#0xkbZolo;=AL(V^uER2{pQ9E8# -d|Cv}yAOH#P5g|1It}^M<!ai@O?Wjaqp#-QTz&>;H?V=?+}o()#AcjXS}<TDHB{?LIsO%Kf-T`<?E)v -wiDM-rk+~n?$tVu~VluojSGbr1-lJiSOFAY^lG&wV<gGeYuF|=FC@m`BZZ$!}9#VUJHGFi01%Csv_pA -`q}G9TnXdk`zDv%P+a<)(*Jb&Bd^|)UVaYpt`;p?uv3|N6k@x^jT`fvZFmOt6I6cEi$`kl_$;Hx|E%Q -ZthdRv3OW<}mBS;|-@JD1+Q%^NY&m=O?APCY_uWa1Jx9-+IdcN=@VRs6&SGAA{LrC8>)w0sy%#i1>(s -YzUvDQ*p3Zvsxl{JTjr1R7&4Ky$cJ12nbD!+1+pdmMn>@#i8ROdn34h=F*=L`<h<UW!zJ0qqdGe&hcq -%{r^iwWS$-{>aOU%C|pMwX9arVo~%F0vV^~gsbee~Ln9Xl2b7%+h66j4t6j2Vx~Zsw$ga=qD^`S-2PX -Z(B~KW%XL<jIpCs;;j7S?Hf=zFzw8L4WUq4e~6cyL<NR*^cyqE=B+Q@4qiMZ{93HpDZpeR&<{@aYBCm -_1ChjtW56Tzh9Lj4q^n}KMtI=>(;HCw`tR+c?j7CE?&HNsMTr>T)upH7~*Qu#!n)5y8G_CA6mL}>EjP -R_#pevGcYjFi}l_p{XhQrqeLvTqIK)m-O-23PoF+5OG-*=`+48Kee(0qKUZ`@K8kk!T~SdXzxd({bxo -d(jF?A3=-j#QzyH1(diM+Jto-@spXCof{P5!^pM0|U*s)`W(bi8a2R{D=d+QDwmJ|0z=|?=pwrVr!H! -^uJGG$_9(r@r#{B7jAyciiY*JjAPHoM+u{v-6i{r20-AjekFi6!J==gysqe(J};g9nuijvP6nu1O<p0 -yeDRfddCrrfpCjgp?a?hd3X6@PVSAGKBq0%Hg-)jJHhngzH~$zlP6Y!w=pF{TD7=kQj!P{`>g&w4)v~ -lm5MX_sT6>wn)faB4$=L%>Ji5cJJP;GHEX@EmgKsUS6*LCJ*!h)Hm7*WklLGekW!0K`DJdl(O4yDZSs -3veOPJyOc;d{Cz2NPDpwF!i58{mHVzqxeNW<wryL{rcImfh~byRUs4{52hz(vXTOpk%7V1>Z_56wuf9 -^5f3wfo-=vp%Kwd~U`=2sS{Z`7rPo?zxNXkC@r0lsz%7;q9!!9X1f`@i*N!jX6DVHCTvZkhH^|eXAL_ -d6eZ6^IjHe_MsKVm1e1M16TUr9N*T*`n?(EsECGU)Mvln;W3DW6Gsp+?G>{Zd-C)ox8(7yTD6UZgHBd -+4EuT0s|<kO#=&cf61m>Je$Ij}P`c`<ybO-cbMPcQI#E1PulK4}YQaFyLb;`-9fr;GsM8##*k^A9p~? -Hd`<MJ=C@6$Cx1v|4;qLcqEzY%EZuf_A6yUy`pXye9*?JXViPzg#l?7Oe2m+`3QIjf&LHrOy{9rnUuZ -u>O5Fr3lHp+(rf#T(+^*~qHWu@-64nNv@`ma`uL!(UrE2%|9sAIfq3*Yu4&Y9*eH4UQp#ZPFc3Txosr -j*zDIubO7#Eq(@zrP%w?H87}?;XKAF_V$1lJ9BKL1zBQxfP$XBQN%9p45DIy;KTFQ~fq#RZuWhi<0+- -c9ynZAZS@7C>^KB?U{-JUyd)omIcch8mRhn$yn>(;Fm{P_~nPd%y22lbwMU6&7o7wS6o=<uHPGHZ5Un -KrYZd@a7e;(_VOQ&Nt0@(^}d$|0aB=yMl)CJ#<~?n0jgpV}5asU>)5QLOt`q=og-->OxsTK&fu&vE{D -@}T{4JTPQId*HRf1L=p~lO?Z=m$`HL%FNmQWGZ-A10I;7;6I-L58<HW(W5#KhCP!9!=CAry1s{ge_P5 -9<N^I}-VFOMRn>f0AN}z6O8;SN%NY;R<_tazUdRK-gDdG4>8GFEu+U!?Jkv+!fQJn5kTOH3KmM$gk>7 -xaN+};Zq1!WkQpgvV?3p|m_DmiOd!|qF+M=qtSeJg<8OImIS+$uw7`ZMV_1TEQ3)7|rz2xh2d&`2S`^ -fAB@Gz^NJYRKMe)hA@Lj-sja}qqb*mH=}p8XH#KFMdVK0X^hsXcgTy`^5ir07R{zpQ)r?yV4`EFt~$i --gn}^1ztK;Dz@%)*5jcpK-ip%)s=ft(V+5zn5GG9`eD113YY9IaQuJd+NHJ%_;CX88Y!P?AaM(wBJ@g -{qz@x{`c<PyB%d=WZEm~CT*nM;Dx@Q{+{z1`b~~i9NU<-E%K3@!NZ36y=BqdJ~9tH)V1e-!zZnn>@Sy -193T_p0_5Te0dm3kK>5PV$K_X_l_?%vV~j4&7~@Lx!{00Y2R+M4H|ZiIO{AOlK)MZ?(8s&R#~gpjBlZ -97#QyRv@K6jM*3SbEum##Pc}R8gu+qsx5_x!PfP5|%Jj4Xb`QryF9+>Epdb`9J-QTHS|LHS0hB1y{b~ -qd|H#b)@E;6#KOs-}pzyA8GEPE|V?pWMYZe0i-U<+@6heD@4(<i0O>@U|$?=O?BzVf9he)7dh{_+Lz@ -GN*(1Rmyr2d26)#@`Oq?|(=?bV2Dq^m++-dG^_7WnNyM;^%t!FnA$u<^DJ1&Lur%33%879+W+U2l^z# -p6&2StEc<QSFC>WU*KUmcz7N>{2h9<Fgj2XN}uHK5@WpaP5u6#^c(u$r%#`Dq=ED$CMMSMP?wLZ@$&1 -hHS)-gSLHj)0_66^K5~oGo?myd=X56ztDHRi6MD3KqQ6`kr}Mz1VhoJWLy*^;RO9al;`iwu${geGieb -Zsg-n?;<$cmhd!!A_pFdym;HqEOk_jPgs_q=CzVz9yg4!5^_WTd0J=aNBjekf#Wgiq2L^;Up>}(Z#F_ -u}nbg7&*YgR1}SL5SqGGU@mT0j3f>=``N<7cjv?qNSAB_-{E@09J^x0ewS5i%nqLvmb>kB^r#X3UVwm -Mv3u{pFWmD!;>6s6JjuH^&D0D#k*LM>!v0qCM}+oGEL5#(X1fR;@i7F~&-#Jtx5yu0{XWty`NS)_K&R -zjNo#Jz`>Fri>py{u}sFC5P11R5^6$P&s162>FkH{6oI{^2_q2mtIozaDGpE$pgm%juQqSoWqa@`cvv -5$3nKT>xDr1Q5NaHAm2})bt%S}rN<bwXZoa96GBP;HRoS_`}SQL8XCHg`U72Gfq8%T4I4J(!G<NC$%K -Ri37e3-e)!>sRgCb?JMSocAnl};GBWhakO%pr?s1;OxQ?=*J<z6=Jwpzz_MBbEp7(58%Q$e=^(arTUc -FvgxpJji2VvVzTb4GPO^zBhO15s@T6XBrK_a$Rw2%(khHEAdMy|^XGj+<So4$4Lnz3^0-~BK?>oEq$= -iGS#a?`&i$S*$FC@-8pe*p5n?)8V{<Yc*I$&w#etXLrzEn0N`@y8#RlO|14{f>F1(k1dhyC9#WjeOMQ -g=-KThpG1*qiHK#kKjC#_ZTBlcI2g=1onUWihXpW>pw(>?b@wY>)~gfdFD6L`PgHRsZ5(Tc<9)%qntf -^wvq$K3}bD_;Dhv%eq+s-a|1%!18s!%P}kl$X1mTkIDZy5xc)}lqW(jdQWh>;_%ZD?BqT)6ojX^_fjp -4@0Rsle@bGYTpE4j1MkWu&yq9w^#@Ez)(n&}iB5$s`#h8la;Y<G6rcIk3>({S;k#mSYLO*qrnYzUFX5 -J%RTyvf|bEdN2fPet$=jSK8bm^kxz~{uN%SU~>W!Q!RsYmn&)GPX9%FbBd5bDU?>)yXm^n>qZJ$m$Lg -+5$Ddw%P!w-gWTAFdn1J`@j8QBiWpkReL9($muw{p@S@IsYczv;+Dd-e+t|{b8(4JD?5FCRi_hFlhe` -^(^u9^z?(=Q+Ms!RVnm6pGMb9KihSUe~f-*=6sR#K(-RG1>Y)G_5gWH=$q03j#2Dm1IJiTq#tFU(*M8 -y`s=cwpg@g*g@uI*kA01Ps)TQQ5@Y0C(7qG*o)h}M$Mx>tsQ8WX5B)#vaXGJPZ-k_U@}|u~PgN{2dGc -iCTVd;Je50?Sej9p7JD^=sCe#zkfIitZ9^&7umolO}IG%%Fo;*Rn+3;FK*QMW8S6y}3RkukS`JxWd7M -^?VISHSo#%b3?+Kfyb`WgBnCh8C8M9id}e63x(mTQc5lgV_WwAa#a#Q*5;CFH^Ii}mrr{-zJY*sbOX) -G3a&^{nYD`Y9VDhTy&q^`5%KKBo;O^JV@U@Au2-ch!ITh`M8JU0w*e#{R?;PsmqZc}3~BYrh+r<)};4 -bzXA}AnnHf2;$l`{{iiae%JXg#-8QWOO8S0!&vX9|Ddnqc;w0l`*!2Tjq=r3Usd{S*f2BsHrD1DH}RS -}W9%QmXJ)y%x&0@!*V6AgF1p4ruCdM4WWsE>+Z8_fVtMjLdZ}CVo#e%!9r0=AAJq5X(N9`nUrPTmelI -cRUsvPBSo1XY?<gDIqa2JqIm(Q_h<gd#gCZ}a9c}y(KXX<3UDtn%xzyEU!uX!?53ji|$4uQKeD~dVmE -UC_&|azUq@Q*GeN6uoX;<{Su7AQ$)UN-K2acVLU+Dj+2ON($cCwE-=Vaeg4#xT}<-lwDeEM4YG0Z8{z -6N;yvuRiKQ+KbX=U38qS6{^E#<~UjnLJY0p+~<VMyQ0WIIcGTlWAwVUFh#1{7+`K!S^2ilpjw@8wQu{ -vuD?cM)Eh`*|RHz@U7Az{`!-ln-gkIDE=g<)v4d5U7Hh@{2BBwa6+j=%?aI{u#posb;1@-=<9?FoKWg -eBfR`~J7)0*65sD><jf7lRboZ1_aW~_zEEer$ZPJX)Ljp}Qes=4h<z;>^FyMeqlY2h4}{O>YuJ44j4? -MqD^RPatozGqDQ6v(GU!u%kBw`=+*5e)Z7HAlP|8n#P_$f)2J(7e!-freVs1ALHeF4BhM4m_{Ou|DrE -lSv4kA8JMQr;NVqpG;f!`l%g?QuagyZ@?8P`I&&)3JfmizIKQtta+O5a_o{qL^Q{{8UbX=t<BbwAyB* -Th&qcgFm`A^!-UdjNj(O;*f3Q|>o%pNsn|TodP7>?h}>Ec@ZQ_Ig{;PcK@uDC(t`UK&Lj7&~$P!10lO -onsMwHDg)EDSXDinZ{IJ+AriD5BEE{rp^5wuE}$c?ON?~4uCo66wDW%GUoT3=dxYK(d-jr&cnFLHF3Y -}@ss*~ANR`ESJk(4aalTBM;}!CuJ1n7edmFF!tv|OiGwn0@hG*9x!k!1IQEQ`5vTQi(-BAYeP84K0at -zG{t)*W`vQJ)xlXp=n1cCh6yn@buJ2(`{)~Z13&)==D<`WpFs=u4P2Omq`ERH7eNXPUDSa&0_u9C}Lw -)2P756&1PdNGmg<5K~&v6{{{VDV2&3npqzuSms2^m`#%nwj&iCoX+I-+a)+<WEz@nd!L(a*U@!@WN4F -;O2oy`}pHqkYCdu6w0*_uokiQ;~CjB5jtw9((TWX}R$G%W0rKj;f=NzRo?<hn)IYXP-{Bk9ktm%9Sfe -xzfS5spo`D+;8KWD)$$-CcN<#>oxZbPya0CbkNdozrNQ-o8W$@Yx|5V=FFKhWx;|4Pr2^Bk_N7uurHX -nzRta-eCK{2_nEjJN`2%W6ZbY2JNK97j??qYi{cawN*~KE?S0p6zwTae-92E+f5&saYQKwnMO@S5+PI -;QTo>p53il?|9+$KIdE*DEwg$WCW4}F@%bzjX(xpqIR<B+?inhr4KI3!pO<LFogde5FseME4S8-i6*S -WU6*15kxo8bNk_X=&%fwg_W<m#ijck8PEw5_L~etHW0|5L{P0Otjq+p$mRd)OD}DnFO+|0_)G6L5XH$ -hp3r?qU<%XL`Z8Pqx5G1C!E6wEG0|p^KN>zcD|f9Wv&3-Dh##yJJ6HYtQJw&O)`v!o9jBpkcmquhAv_ -&i}Ff7hZTF>b2Ki8^ygL#^a>Jm{%L`4U!J_1^p49F>(L4;OR>?QJ+4#=vux0pE35_xpSvH_uO-n*$*$ -i_@eTA^t&AU=>Mq;><{W9+jiY^`tIn*^32gsVH0)qagu-SUfI>!=a|BE4zB64k2$}BE!M83*WC*<WJ6 -iJvm#7Z9sgLKJ@)A(eVlPgA6LyE&F1SJ|53lmXn)kGQAd1zebu@v_on0G;^gzsKd<I@q{;9FhOeZ2*f -&2`9+V%ZOq81!`>S^W41G+UGf2MvZ>#*~_#r8;5dZY=-~S;$KfgKTWB&a4Q^$@S`<}&OkrO9QRO`UYm -oHaq7slL&eNM>!H{NYzf7Bh5nOG;veFWXQYW&x^bLWw;do>T_SkHYK?kyqCl4Hh<QG8!%t+}pjjB(s} -w-VL!z2~d{z#sk3wh@1v=3XM#je~=O)%q)Gm^N*i>Ua7BV~@np0b>o>&<BhYHIpVyngCsnM~uWDc5}{ -utvOW-_7(a*DK<9tUGDL4jeg|Fk&?3D{u;*R+Wi9dyP=21J0b?eSoJgd^BL5&7W4BnLjTFewNeXXjh} -Tewqt*DEtfjTwRG-l&^}!E5hw%t1>%tw_67YmeJ1JLzJ2?P;`;U|l>IMTwk#?oC1sQ`=cb%V!-NSFWT -#G@<RgzfqG&VL{fzw~mZRPn{(|o%zW(~_DMFtsTu)N|kN#)z;>Ay~KCa1g%%{)c-olelKB@MYX%{TZ# -6B?Aco{EqPla(icvyV{ZP&J6cMZ#RO@iam^y$-;Z{WMC#=0Wq#l9xr^vMSf9LT)EwpIIV2fjx6|N7`K -V&HY_*2y(%)~K~&`bMrf8GDL<ux-^o+cCyp>Js@iVsP4?u`fv)sAJsY;QG_1O`DAO1pjE;wftYt8Yuk -?eIMmqR8&O$JA=MhD)jY}KbrVk6OTWbX<yg!Z&yq;Eo{CO+GW4JWxm#Lc3pqFTZ<?3T=)Ey8~EL>`HF -O6JZy2LXVAxhwQJX|Pfbm|03Y>TMn=XzGcz+U^E-KYd1q0_)SR3gbsuFKq@|?=+wJyk`T6-up2iqPIm -4zub;aj?+KwGNxX$_u>ZpMJoueIcZcKeGz#L@67y5fpzKE|^9aU9rGVocJI?Wi)h-VC&qA!a$rO%ldp -MHd}rrUd$#m9nUFx#T78FM1nSTO30J_p|P!|#US^T-?Nn`lR*)%bl!+17NqVyYe+j&shPIDh2)m2(Bo -RV<h*tpr`%Yvr7rv{V1tZub0O732JfIoPUmdL5jLbMD2tALo6Xclu!7$ry$)73rqmV&WWz@!}i*o~G( ->P2c>Yujz0dfpa$YALYa`$an{J%d-Pjyv2Bru^wYh#=4wu<gH$+>foFs2y{?>qeqWc``q+l?1ze7DRQ -H&pPElHc4yqqc?0K8^P&f<Hbxwl(t&<iwQ7}$2l<W&_thv%>Py{Nylh92iu>n{tBtwI><0E9#s%fKxF -^T=2aK_lY2Ez(@^r-k)t{V0{XI^#f6kCUb&tNDdP-RiA3j|5Dg88M`PI%;`TC;4>iy3(2@lKn-^?QZ1 -_OWFwrwg_Gv3Fc-)783dC;G_(!#$vmb>ad%Nz1H-brFz94Fa6$0N=YSU3GL#{LDa`1I4HoAt0SxK~7; -IA(J_iMX6+bL`%=Yu9DCO!FJ%`FkJ>H)j@C$wrw*&fJvuHPJ|z%^vEsC!WBj@yiwJis!GH1iweYlLL7 -Anw#L)D|p4T*BS_mMfXlTd99(dq*<N2c9XNDS)IDpNVvN(+#4lEhzR^UPz=Xk!D6U*1lPg%cM$$&daJ -?N-}H0vH08hz=<DRS0sgDI;2NW-9wBCk=^{={5fe~boR}n{QS%fLBc`Iv09D2!e2{w~cjH&=aX$n@qb -34SX0ot~D3qTAYNB`suBv+kYT^^tW)?&6WG2dt6S26Sjyoeoy!wmjZ{l9mWwafL9FLOI)$hS);NPjhy -q-D-iUj;M4tHnZ*;rMM=|R!hrT$T>bi7NwT}2m_Eedv1_bh@Z;j$lQsPa=#<0KajXN!kWZx{TXpst@1 -tx<jm{+^&pvS+O56LK*D6wVN$o_l5l(*dFb;EnW`kD_g;vz|C7Z3cf+u1KSwpniq{Z>kuN`p1ES>z5f -PK8=5eU$-~w>&rl;kE2lE^m;Umi|`CL9>r7YQ9PbUT_*R&4T>7{^-Y*O$vi81dVJi}DgD}a?P6(fj-E -1Z>iD=R6Z*9u`RJg|KJCr%Goq%9kD4@fN_4;WbE4zh`}V)}=Dtz!@zImVPMTvz1ykbtwVyeCO7Hk_vC -)&G;yX`{8#jGw{M48koySd`+&e0Ma+g_M+nXmxO^J(%j-N5gwKY^_Hus$|eP+D+Sf{hLR@bQQp;ihHn -DNo$W=@ZrF~@n0JJX}5%|t8F<HM%M&5D~8Js~>2_Mz+JfeAq6=lzC6&x)R8p2UCqwU3Gqo-%9d#OUem -%`@Zt$MGw5{o2PwO^T0hZ}z^_i1(FS>Fa$NO?|y<nPazk8~uihy3X^z>Hlsj!w80fq9nB}wKBCTwK`R -#xu==aywWUbVQJxMk!jX6TUt_@J*_CMB&{s1BCRS-q<f^B(=F+K>0#-S>DF{xdQ!SQy(qmTy)3;Vy(( -Q~cx0F}EE#?oVHuGb)(l%lQieUFD5E5!ETbZ$Dnn#?WSTQAnSPmJnUR^+Oj~ABraiMLvm~=Dvm&!9Q) -GE$nX@ceepz8zky+L(TUJt*J*z0IB&#f|BC9G31E<66usHl2VU9?L)nRiaIqZ%iM~S1%QQ@d^h-{B+b -G9YhFFPzdGTWMM%TCI+XBTCcWS3=EWLIU29FH7xjwQ!0CoCs2N2r5d#{=-nnv;-Y%Sp^h%1O?#=QwhT -b4qebbINkcb1HHwbE<OOb3JptaxJ+&xqi7pxg~j}d1ZO!c@=q;c~yDUc_QCE-y`2M-<<E2Z^`$`_sb8 -;56chF7wXX1a)6TD(%iD#^4yBt%G|2l>RgfMp68M0nP<-P%CqG8<k|Bac}01}dDmNWWPWVEH9sNWmY< -lPl%Je$&v)b(<rn9d<d^1`<(KDI<X7fb<%<IM0*?aE0&{^^fu+Ewz^@>vAgmy~AhIB~z*>+{U@J&0NG -eD!uopNAiVBJgN(xE~$_mO0DhetKstT$LM4@}3N1<n-xzMZ7Qs`6YR~S?nRv2DL1u}`%(4T~~#I)ozM -_O@OX<B(&Wm<Kbd%9=3SGrGnP<nWJY<fa^VtR7ABfU7iG`&2%GQB$8J;O7@E5j!vC?h;0HX|V;F(Wy{ -kx`scno*unnNgkLp6QwCmFbfilo_5Go0*WAn3<gE$Slq*%`DHX%&g9I&+^Rj%JRty$_mel%}U5h%u3F -3WEE$XW|e1EW>sgoJ3Jj;4j)I5Bis?|NN^-Nk`X)?J4zkpj!H+h!#&$G+bi2AJ19FmJ2pEZJ25*s+mT -(IU7B5<U71~-?VjVA<CWu+6O<F46AP_Kgho&wN}&stIn_>0@PQVD=f>tH<R<1O=Q?tWA>VSywmR1xQu -TsFgYv@jV)GL667!NF+hWMI95SuWbB8p&Aju#|F%}X`g!CMcTq&ehnO~jn4taS&RzZ+cEM$}j`8Xh(Q -plweGI57IydaAp$RV~cp)j#9xzJHqTv%FIURYUJP1$&uL?VE@-P7)6_pt}r!|k#51bd=A+3v6x+e_`` -_DXxT-95!K#Vf@pB`764B{n4?B{3yA#gS41{i#s8;{m;~Kxe|BFIMPE67-}9I#LGxsDf^IKrbxNiLk= -RLTjO|Fsaa9SX5Y2SXNk3SVcO_phJDE(8F%FTkL-JFngrkYPZ>wFnunvm)Ohf74|B-NbyK9r&v<_Qo> -RqQ>-brl%y1UN>NHlN?A%pN>z$T^++|RT2lQ|!%`ztt*N%uq*QxqQ7U~`1$>uC^ML2Fr1`;f{onUnR` -{tT_^2Xys4{q`svME)k!yx;^2-g&jm)*?+H#X}?YTv{CGa>E@HRX^nrkKHC|i_^KddGZ1dxbctW0%>& -kstAg%uaUic4U@B0UVY5ee(C!ai)UkR)XzMX-_**hv{Ir6T+P%c%9=^e3hN2T)4`1QY-O00;maO7>P< -Wdj+L%m4rYrU3vO0001RX>c!Jc4cm4Z*nhWX>)XJX<{#QHZ(3}cxB|hd3Y36);L_fB~2EpSsKD7tpo% -j8YV7@4Vog|QY{@p0c8{v4MtSdOsHlV5fdvtljhnE&Ww(;>bSh4vv02iP{;yVSOY2sP>iBbO#uePECf ->DIp<b)!s5*P{QmuTNO#p;&%O8Dv)yxU7v8&8unB@-hd;v*germm%NPFpzfSn;KYBxd;otpsURh-c?! -0o&;zyTyN=l!4r1ZfjJVg&a`Q%fI=b?u^rJ*N1k3Q+~&7AFd;;BUsUz?tul4-W_#@U6-j{ds;*!Z9F( -aU3x!1uYNx5n1f_nTv1r0=z3Pr~=f!@nK-1(g-YR#EzEX8E6+-#?@8yB;lCjO~3F?6drWu;@ogf+hXr -L-DjW;VL23nt~64@K2t$Y8rgF_>@=#^Vup04*U>$zXg|-Ch@0lT46r(%j1>eUzfgL@F;wFtworE53gB --Gqd4)twqRB?F+G0SONfK+bqJ!|GF}L|5=1;>v!i~t313yf$u9%ngHS0?H88u2*Sc^OBX$;JSYghT;8 -T|Gkl%7uv|X;zm^vhe3HOtY%q3Wxwu^QwI#eDjS<Ewq`~*JOUmV6Te`Hg2)n{Lfw>Xp!1o=OEBEk{r= -Z{*L}r1nh4A_%<)(f2O#J`zU$`msM38+Fh|G2sMhY?tBQrd5`El7P2r_g0A;%)fIa}mNMP@dn1lhI?I -In?dL543n&5)zP%xpR0%k*gbCklclyP-_f2We4xp&WI$rdb3{93TkmaUBfz+OGv+N8OGc-_fU?`poIm -r~N<n`Tk?j=ZAwY?DNmq=j@S*K1Z5;%8~h*PC24vy6%zH;~wVt7a*I=&dTgm&cPsS3Pz`$6E`&nSd;e -B5bU;54p%Fqn1fNdU6R)l5PkatMol0K3j6ZT>CG}zGIM2CC$ss`zq-ZqKwWP?8FFM*rf04+N17|$E!` -ut<Irz@ki~*g$JGENz?wZ9zY25xIbQ}N59ewnq990YN4OgD(x8a=^BS$W$1r3DWnhffoV}WFBF<7_uG -W1ee+U+}NzqN`pjg<DMERUQr<#4NjhcvKz-p^9Et~8XZ202<+v#KVntKFHC)+8rX6*>I-hx9N4Un{AF -M}~-ERa9B$OvSemu=m#AH!5`1oB{K+qFLp<o!aYKrFh$P`|CW-?t|4etoPiz&?g~)BZ3V%kRQQS3qwt -J{a8{sW5UFCu<R3s?m<02PmL-nSCHtA-&N4=O5HP*30Sv2($$-H8c$7Z=>nRskZr#%UPY!=VY_bAgd4 -1Ahn#~G?CCzI`0U3`4RLYiR=7AvDYyWl0%L{_LW|Ytwn!9^S2kq@gcOVeK!8$7C#>rZ*gNvU(hE*qjy -B-XBmawPfLf3>l{^(T`c9<l$64(&meK>Y28-H4%3qTISX-herA4vZ3(dZvIA@>JU%T4*kS1b>3(T}G= -Bl0D#xL@cO#-^=fEVKir#ZAV$(wH^>mn*=%nP?1cNe3T911JK$h9QoF*(YUXCou^ce2zkHg-s7Aq=XI -yd81(4PUsy8?la&dFSi+i0G4-2_}4d}Z*;TC|g}gTn_ychS3^$(s+dOPl{l$L2%Bb8s(Y;>P=+A8fpn -u<-z}P`&P;PN^O3HG~@W$gGaf<Pp{Kn60o^vLCpgk5xTBUhT3fDQcH}*<`gVY56rWOD~>@18h<};)WX -{@SF~?m%_KSel4`Rp&xDS?*j}~)Qh@hJhqiT8@IO1_8ac^2|i_v+G!0r+UsngVZ0>U?qk)g88_>FvN3 -jCpC&x_VH>qTE@=MmG24=(>6&2}+Mp3sU1puy^TV+56=|$do8ZCJ7TqqZ+hL`4YsU%QFCYm!WCrAH9# -DnFE;&*Hgkgn;lLhQT8|cCsjoOb4+>4!>72l(Bwicp<7VVTs2@ADFl%UC~VJHJ-Z?{-69blKeonpl;_ -@H)E`e$Orb(G#BR*a+cPD*bOD~3{fomkNy9@e)*dxram$Kdf>cnUJja4*5PGxXMKxbHuPu(fGViX6sc -urag;MH9eJ#v|^v2fXJMN5K1O$d$9#Z1YB_SIABVyyr0I6UzCPaz;|l5!u_LIArf3$~i+h)?-MPptTc -)q7SMbhc76163A|QVfchHGN7I}lp(Mi4R?D?5E7j=!AoKIODu4X3hV&<<OO)2Z^sZT+m(^B+5-iEsu= -En^8&o<AICU?=F4nJri^5LmdsXV&cg-d`?8L&VPgG=uFKK4JD~^QU2Q4EyOv*L@~&`eKioH;=j_dCGT -bigs|ohVx+G3JB93qn$UD%FQ=Pb^>C501DZ{Ldh~JwLzX9XRAl1jVvyX#-kg)0A)(ELn^PphJ5uMqoT -dCO<(5&_c-qJNtr#$_xAc~6Ah&SGd;U2Hy!nq%X;;@#>phC`GBm@hAu`bqrT8z2yX1HfU!4Cg#gd{-- -J!8)DY|TUyzz4(a*Gx14j5XXhX(o+t(N>&8TJ9dp`xr<-?baURsn_w;a~+tvT?_J5iKiZcRB^)-zkz) -c`nw!?rb>=108Z$5Xodx_tO<!6uzguZdJ|wD;!D1)F3QXm@H1P0kMS_g4ImnD)-N3;8a2akzj{<K3(3 -)FD>6eOY(NTf_WB}0q-w!T&w7-94fn*OIB!%8fZO4)0KRU?Y0~z#Bh>B>Zbx|_eG7a69v%^dV)dEV?W -Ky$=Dsb5_bQLeMK=SNc^#(Gu*=?>(tCk|{7*NIR2gd5b_~I0@6QNEGkaje!RA;xS!UhH=2WksWWXnGR -u%R~8qAzr(`D0M8HeE4Ic2rM2^C5|LXM<DL)z=q?%d|}040F)Du81&P6ZV~Se^nLwb^iQIfDJAzjW3x -Ht=crBc-@!IB3>OXjJJA8V=Tnm$m@Tc(u9>mOYIpeH!45W0v6_$m?hE`q@w)h&-hK^D7{oartLSri+B -2dtjg3%_-?IsC0z`C$GzJkJXTLd?{^m5>+M%#3!zs;VcHKpH-}OU8Rhb*gkFjAX>v=Q1=Tvf-u8rxV5 -A4I-wnM_@I&+upN?FM{Ku1kTpR;sVa>c-mMk&i*xQhkRGlMvIdl^R^Y~sF3%9x^~Wv;U}wQWrq~D#+j -yO?pbpf~0$5zFx0=P%u=pqrn<leE#lF08$}n+VDyBPldI~I=6*9(zj+z<A2h#p^7W*P&FcZZiS7%%%` -lp?U1M~(v3~9qhu)m7cTdxXDC|12!@j~z0Ni0N=-o@;AOKO7^!GjWqY4oBw`iGs=rKebZ_KK^NVZ9A~ -X(s}N4Lt!30faa%nsYw~a~L+Ri;yC&gLUSKY1o^%&Q=Tq{0cVc1!S|HQ%+7a=RZ)F;Cm&23@b8vW#Q= -Cxm`pzUrQ#sdF$12y16z9QS_<9Km@OXAr$B3DnRIZ^ki|}Zdt9ii|h6vANm#S-kf${wAhJA&@ULBG|y -rY^fAHcVyiw#Vjm*N&kP`t`v=smRxbEK*~2jQs_8gIC`}@DzWp%vGxZHfWX%e+b;B$0sHeiii|`<;$6 -#8cC7@RpOOfmEu6L}s(IU*!2EnWW$&0#=+4>5Eo^KGZRBT*kJt#1ETb2$j%S%_pvb+=}MK)?=Z)536- -3I#r>W7g6Znkl5aQL)g<X7H=ByLt#caYV=NY=;BBc<96bZtDfin@>Ce)9{Eg?Evv@DBu_s1qA_9U3T( -D63}4AotHI&V%Jp0L5VuKh&Od(RB1fTq(}GDWm~zjiC{|X5+fXBB+fEPP2EbE56_ju;9tG;85dAs_{F -s#`pTxNWV-Cq#5~0$AB2*YoB$SbM~^$#PwE^|4*T~u_`m4?JA`C_=7ngA3(-NLgi?BsulSdXcZr7YaO -(~RsnZA;YXqnT?iAi0cS^BI9iA&814pG+UV>-Adk<<ydpF)0Nl+Jz4xScpA{z$I(pJVZ~%b^K88I$cn -T-*Cb_6ij=r>zSU|K4kgYIk_ZjYI4<l=M3lnmx18S2IVCO+&jLxzapZ;5b8FI&-U{r$CCVD>y@3PSpw -AI8@dM-+V*Fbc>Ga0$z1}jl7-D;v!XTJDSJy3{UZ7@4PP;-MYhuOhsy2XYx33k^9FtI@t%7c+bpbzJz -@I8MgFjA7MwWoo>?zr5);$m@h1?m5?H@#*IC_@9}ni^MeM~z{Gtl!khHBGMA53Vw0;a*Zc7gZ7&d-Jn -au08v6PDpGk2<zfY)vzc-wIonI8-yXK#%*@tM8(PlB*9Q-FO^X~ffpc*6ZzXN?fUVYo&#pj!u_1C)lR -@RGEi;V3?;7(U8VhPLcCejj!oUdqfLR{)~?N|)<=WN?#Fc`t<y3V3v}YV-kXGv4M?cwA%R+m+6T&X5A -^B`0S36Z4W<2XQ^>6qKwlfNt4M~{4fx0EKo_biqfW_0Kzeh;hFr@IeJ5)JpazR;5qiI3Z>=&wR%>7%S -a2VF4GAH;%xda#s_VEuFbif?b_OH)8NrC`nSHmZZ*+l}6Q4`Bwqbl?E|&rvYNMggzyjt(eg-l{<}9rh -@Nq4!{Lc`ImLS_j8sQwI$-A|2pmj1(nm>lQxNV|Y(hpk*=rt-R_mkd(+SW}p7eQ7741dl|7LboYPCi6 -?ZK!q~UnIkQ7o-3Q{`hK`9$P|h;`0bHRz8_y^0n?85=?qT9waDk?fBKC9V)5X7w`njmmhJWu5@7=unP -531{B;IdR7Y;AjK<i$!u*kPJd*O%qpwsX@*nwx=&<T1Z4;-YecT?_#5z%kW*VMVLlL8$L~P@k@E_i$_ -SYixL73>ORvOY{j?wCQrk|<YNr;gp}{JZvDO!4Sb*uctlx;wTKd9xSzQh-J0Q&jKsTd3A+armsC;ijK -mntMYp2E~7V?jv4OfBW{A}z`l)YE^9K~+H!9Cj99;AdI?ECYI28V8yvpU3eBX22IyQR_;_`G+yy;!aD -AaPYYDXEi^sy!qC7(12xVvvWt#oiXBUcVlM6{No&ZG=w{fD6!zxUNM@^`SsnZ;jVV!CDTiwF3ybxUMd -%#+M6{HHx6Y%xv}dI49>xg-2FzZX=-Bi(y{!K|A7ld=6})y+O7=&vDBQFvH7X4wN67;~(2Q{xoy^q_) -%egINa(#C2(dK<=Yab<wD5JixUF7OQ6|?JT9$dID;#HDEL%%uNXMHf4*ru2x*vl+_4`i%o*Epv}b%O6 -^~0_roo&cC{{F#my7pCRy}%0lGhYJsBKA9&OO=AOv24fW9*wo(z2Yx`2e>{Od^=#BK4`K~jtnyRXS}9 -K9K^us;%;D{m(rn6Cdx>&e6+Bc;;5Nj!p(qz}}(1CV$qk%*fW%>`smjN1&Njt7TZggU+_nB(X7S%i&) -xonzTg$8cj0g8OEPA+QPfI@V{@dGHLjW0x`cKBxy7YSuXX90e1kBpjwnW;Q;yqTF?H5@7IGEySH83u` -w!4_Gq%?8Tll#T5mD=<elXa@QbBq+d}po~8%+XAdH7<K<%wt&K3E!T89)Xzr;n7vkhylGyL4YmZ-vj# -}z>RC|o3t=B8HCSOijDS&%tp|*z(EHFHZ7JeYkIWK;vZ?cOU`-T<)>TNe{TwP<u!OM(L2Brw4Im202& -#8~=`AoxJ4WJj%ku9bJFNQCAL-vjIctyHaZIi`3q)X>Tob!B8XVx#GVX$Hu;K9x(d;@pBRg&g`gA|=x -_BQ4)ULtL3{q=c+L1dis&RXw#-FeTu9JIx27<7y^acQDDuL6ue1f>)2T&_(TOXJ@Viy4v`|&K?hc(&I -+#+ZWyG<82lxB#~ckD6D#14(I(|KRGpVD#%D6lp)umwVA0v#=6P^+oikw4coDCNu1C1@dE0Dqxe(4+H -%k%xg1I1Y?JA$zMF@uShE5NXwElj9B1?!2m(<MjiLDfSc!QxD8R0inJ$2~>d`{Xl^E1tt%MeK$t};Rj -@p4R{jdgWWYAg%gjqYc>c-MXi8aw`x6CLX#7Dlc%pl_85c75m0$R;+0OsD;bGbG4c`8m2yI@ATN9?pe -1NWz<XxtAnaND7dD0ZKx_e^QMh{bBWSpo)+%?LlGRRY>AV?0KwWZq7i#s(C(BVu1kD>%;Hox*{=xdSw -rSM>ot)K*vT-&D-pYiA<Q+R;0}Rskb(19nnUmNceEKOaOM^?dp~Mz8LN0CcmGR9QyAClKX2P5Tm=JRo -7NH$s70g28T|@*1k}9_k$-=h5$e8ssE#^r~iX5HUR-T7_g&f*5pa!ByR|reAQ+tGza#%qIE68948LVL -RVHet>7S#3HCqc3X;&s4eAI;iEXa%{ihs%cA(es8;wkk7MxEvt|$_<1DHg@dKWbXTf&SBK!xq)cG_&} -tfEua=@g7!C&tfRT+8H#7_-S;H)IFc4(L3Rr5CyN2I3t3ko3WlfU$ehd)#Mj}4fG+OBaC_)#?fB>f6L ->2rPWD!izG#}i(I_ml_cBS;f)(ly>kL9qpyN!?+qi53+3#FIR-dyMO(3nax!DN{zR{;(=kk{V?2~}_x -6eAJXQYuLrYlK4HZxOClE}z|HlKxZ_@G!Z53<ct(gtKo%KgEj<xYRNU700Tq9G~ZJ?Rsted}ktg5D<a -$H&k#$3S4;gEP8V`(yz$H(|L`V)a3w-;3oeO|~RsUWpGr76xr?a#myP_f!q?{j4V7)k+up(Yg)8@E%* -1DzREWJ1upb(t+S^^|5aQ9c{j>(|QU%dXM?V>8GK2#OSARRntKg^_$%V*glZOyz_gF{b=lc9H?@Z7F% -X;>)V^NdGb603njg)rAnF*VEzH49yAh~5!}OzaVeq9iP&evLSe$w6BGUvAhtH{3S33njW<9Mb!LV~&i -WMQAC$9>GqLeJ&7~g;u!h+19@IrHv;zbq3q4$u2(VK`ht3As=ZGu|5n1j-tiaU?T_qzQNeQyroW0sNc -cSbtDuF>ou+{bJaC3d$Wf*G-H$n0(1U&<fY<6gOoacKQO5Af69~*QlN4b3Dv@*&svx009nR!7Ws6!bB -lq}dwg}~oft*mY{w0wgEiQI(jcZu9i;@^0b+}r!e?ipIo$ONqGY$UtKKI6<jp$7${i!v8#S0eoF(=+n -L@Q+Nh%|r`dv59JDk1|#+Y9_AH<p7O0OR@;+7o+9J_s$F01~&pb>~|$_=mGE`T#42-P(d9@P^f)c?z5 -q>*vfEh#SMZ2C?F=cMot~DrB$~}xn;^A?XF%}QxVo(25i`g2uc1Zq+Eq;hpAG`!^Ah{_o@`%j51Y<(@ -4Tlr5KO<7=`6xm`f+|)GBl>5!W3k_BMu4Ve(fY$%MD1AlW;FOi=gNHHqu&vObOsa6zDG`6#Yt`&f<Pp -1BuIH85iiaUEoc>uSVx+sD+zg>ssIQry;zNQ|Sv%Jn51lSY~cL~<nkBj~EGSErqes~7!qrmLHq@f~E2 -`upI78Q+eYYbQI+_N!e6$R=}(1vE65kfmJ7*(+8396P&vCO_FLk)wW>94&OA#a<?b)^OMC!M*>MldK7 -I@bnKSQ~T$3t_|H}8nGE#O3?m}J20CL=<pPp%+t^!+9(h=LAWi2n)*nYg`Eg*B+Ofmzr9U3L~k&}65v -P*@cc5vedQjUMYPw8d$_4zHr(f$Nu+cEmrKL*qhwgpl83Q{C=OoE*`e+K8oA1EGI4eS?7r~<wlo`$Ea -yMamlt`67o{s>(2#tnnedqO#cj<bblx|{a`C|!uA4;1ZySc%g=#4(TeO8JD7ydJY^KRD1F(1?1O2R-% -Uc)Om&qW(V$k#1t1Pfq`vbV;PaE$0n$c{wJ<fx7;#6N5gh>W62WpVfeDQ$~o=F0Dc$!J>1@{|hJVBa( -3*<4+An-&-Ti#0)a18#OgN3X)2<(qEWyi1t5^jQmz+hiA6}>MJOK%7;Cw@=TKLVAn*q=8{$?&6{z~`+ -7B?8nNpSaFi?1#3FgGe+S4QdHP!cN%2de+7DESIYnqI&Q&EVNrkoAWSy2QCtbqy$7?9p4oH@odr*4>P -pyWh92ABYg*2b}tHu&z*ypr=2MCJ!4mkoC53!w!;^lX3@46A&m%Euh`3GXLQsej)qdQmO5E|Y&4$Zdx -1<nFvTLUud^O^wb$B|DJb#*GzoR08i`c9&*>}!;srXoo>G>Z60#awWzZwMw$f8Tqeif;F<5A!V(*Gm+ -Vex>P{!_siEpp9h!uZBmIx4rl5<YPUWb>gr(r7{FJxzIPdfuOJq}6zYV-_dZ!3KK#5}3p=YZZ;#YbV) -954!ReP|4s4|dD8#yAiS1Vl~gsg8mSbdb^u&;eo})YJAnMBKP?AIubKY9NseXfMccDydi)b`|SXZ0zY -w&=(eXEyC^4JN0Z=pxvyFsPBgVb{e@OZkG%89#mgoI4U2KSg@PV(}L;4wW`y|C}D#q17w^tPW=X+$Tn -tbo|oBQs1b#mRy^WO{~74HOCOMny5#7jH*UuL+@T&FEyFCzj~l=leBXkoI3?K#dDW>8i59^U8Vd}4h| -#2^g3dRL4h;1)Iz`kS=DA|(4kQ&=Gcqz6Si=x)s~cg*Gf?dSJgOd~<EDnZ1RZV^Jow{kavyp?paPsf@ -TTi|0OzA}5h#n3y7LguZuKz0X#kuD5zg~MyD!6OQTzaIhN0Y|PW@MZ1o!Gb;EuQqxTyNyyPW_&4?|6} -83gg5UWmtE4&t~@PreR4usl{?N;@z(UQq|pXT@Z1dNzVSK`z<@{5+pPuSISTn*uq$%<MJoJ{Lfq1dlF -#q=x=7*wWfWOIiS#83I7|kITqjd~X-+53<97nsXpj+^{bfgbJ7;n4KBy`Xgi<QCH=p38CwwGy7?uO#> -d!--iR=$Z>6WO+@>;2vgC~GGgzTvxYAxZG8&%{x1oz-%!LEEbR!C9p*CJW!nJd8~WHd(AJNVm&{R`){ -#bhNABfD49&P)zyk8OAt#C3b5PgHNYE<4h+T${9r5R!h~A$Dm|Y-oTM5vccah#~*M{LJatzpYM{lwSP -&-pK^2I2#pw8NHI~&<XD#0m%_mYkKQg#Tb+?7IYg7o$Rr$r3^iD(K;#uPr}Y6+(Y6Rwn_GvbqTx`_Zt -^+gw3e1M?ib(>LOPSOkcAi{@Fgcf0W!~H-LZyHEFz25`xx{M>jLbujKmK@0ef_W_fJ|hbNt$Kr9yFq) -MT`PC!LG}eKqn&7{c5Beq${K1~9X?wts-zx$FzD9vuq_z)$r~*~Y&0OU&wE4+BU>^WVo1?9%!B9X?Tw -mtGe2U=Mt-?eF8UaHt%6#Ch`m{Lya-RAX{I&H<u!a_YL*VK&v!zV?E3tEDeA&B*cR3Es0Dpr%~1y`#B -$N@izH7V?)5;}Eg&}DcOEr*(bwZ+N3rmFbO_a+xD^GjEnF2Ky$W!qgshFGKgNZ4!2L1E$8HvK<JKU`1 -gAl8YVm<Oi|R|499ht;{n<~NCGfQS2P8=3&`!?N{vdEq5(j#V9BS}u(+C$rt?<_zC<kU|+`6n^gTDne -MLoG7YR`=LTY{`m4l;i}9=L-{EEyl6C81rJ56mxM6t=7wBr|_=Wd?pC*NFI=VNs%Un?aIzrhp6jS7Ii -XwO3~7E;DnXnP~^rMa)~!Qamj(zqm*IZC$jWhrC5V8iUnX3KH4VB$1g8WS2RECv^+<Mu5cvD7ha1X$> -e2$95E3+{oyMp=uI7L|RJh7&nlL6}!0fB35igyNtJa*(~iU7s|W0Szyb~1O=F7pxm?~2vQa-{CIpR!G -jo*qwYe1p|dAcq8-O0jNGfl@bft7heWi3#8B1O_L56cx@`eU$~%3`W42d!nfB0>2-3`w2YRs8;i#g*Y -OdvNhpyLtB%*@v(I<whS5AO}*I}_y+EZd&ZPin?hs4C%k7%d0zu36l_l$^Sz_?&Io=bz;FM4`qz{~JV -CS{P~0F3!<HRRIT`p0`jUi_Ha`gP8U2$WGfEunteGW4Q2Z)-!A{6BdpxZaoHuQ<3eMN$u+^F{8<(1%O -ybrxkXd^(l>lDOe;N@;RKK_-e9Sg8wGyN@-HHQ>&B32pMlm$pXz-^Dn4b)a4$LSiil@P$WEHzfeq+Rk -uEVp8~^lA?B76o=Yv4SlLDJO*-wkJX`^y<0np!bJ-{wI1U}t@)SfyN^v?oqG56WThE((<mhWr^E`CQ0 -`zTN6s5H5E7M;HsUc-BQl3t1nuL+NLp9+(~{^RbPv?+M$0PzHUqcbZFmN_^AYn5FcnQ6IokX9?rm5$3 -{r~KDJ!RjM6MlZ;v;0ROF}0b9cYzJj`~(u<K}`34D;V<%P5Q=h^|k@x%#sgnax2Mez=`a<sj{NTCb7y -O%S~FWpd;Sv|icd$Y@pvl!w~|_M!RWV>$}bkPOd6mj|O5x7<Pt9uuQ=R9o{Uo<Sy|A%C#;Vp`&`;YVq ->A@$*fY%97+LDe8XHW)%(1tV8;2vcsRgH1PCPWmV}#av4KZZnB#C->*<4YDSj+Wx59^g}8#3ijIo&E9 -96@0}(bAWc1x)hLPU1R!H}OF*r*7NbTl8{0xLJnVB7`=M@Qs%h%gYeBSX=%Zh%yA4wx8LYjYnn23?po -7!~{kC=~Lsf3p7T-u4f^}-8i}}_#1nMhH!fXrSj02j{fgsO7i-D4&*$?A3E*dYWMHvYp<-$GEN5+QAe -KyBnZFnyn=&Jy9dK|!!uOz7tW(azlcH2=?;=aL%OWfNbN#EB;;@;6$hc4=Zee)qX8v)_}zRVon>ny^0 -Tyxa`N|9etg{PmP6mM5(RD1qHi!xMu3yQDj-mNX#D_GZCr(6N;Jde+;(Qr3ZbB`p${Zcg<qOE|LyS3^ -wh+>~{H#1O#Kmd%ow_l5UFl}2Q$b!@AeZ!mrY$_C}o=oAiE3qpQ`a%Xyk!c7+xl--!0g8M@3YSdV`^6 -<was&V|_hIj-0Q9nS0Xn|1Z%}^-M#tU-NvKVLCIRxn8F5oE*QtJPQEr01Z-kMo#ng6RE{I8~kkmjrjN -V^+Inh3>4rKiETUv+_+Hd=D078iZ+O=(ch&{@l^B=gM+c1a}Wmgs6i_SofBcQk|_MC%yu3Y4BZ$_7%^ -u3TK+iJ>lF?1+&czvoBi^>_HmYjoX6`EfAFYA~03I;`qFV#Vl`P!>PXx^_<rz!(2f>m*7|2s(#)?@sR -HX|#3y7=PN@Ns5rylB8Ix(174M2_Z36fMT0u_ZuSG<_1`bISS=bXGYLMa~~@CK{O!D5LFuoSu&lfamR -xnPu^yP<sYrHL4yllW1NZn`nBzY1-993X@^S%%vCt$4`Oc1|yE24Mn_gEAYkAA44kq%TI9ykS7DB#tO -$LKm!JR=tEhj3NpSBazgUwkg`MTfX}sjgUQ_1!hKZO67IkqTh>GN7Q`jF{CFifdZeEifaauUH<4YgWu -S#*(|L3nIR_;}bT5Cjii@nUqClzyMUoqQnG~jkj#M(2X3-~sv+t<ml>xjRPY^v9gTUG6q4jMc5Wk_&m -VTAYDl!Rxh+`4<88u(kY9RcMQ&^ojZYO9Q8(sKTk-3(ae-APn96yD`es-a{!SOsi@xAHzzQDT$S=KSv -d@eEEYu?Ah+jCHkufXX$xnJ62@6!zYX)~_uTzFBZ?sJh9g_qlQCuUT<kN)u7Qf9cH#5(0$5Lloq6k~I -rGZ1+^BM@2Y!FZd#XE*tUY^Af1O=c444l8pDvpNdd=RtN%X0f-6#qbH_Getj;1Cbexg^>afZR@=^iE2 -5rY8%Y|{Dw4E&>8f$iO-?QkrkZ7XZ1Iv9N7i2;-~oJwJ5`op9V8QLj5RUYcQJ8HWGon)k^s@LebJET0 -<aHO?~bfJpH`_M!XW9w0}R&o%c5I$=hkTAA)2y!_Ezc)Yfk8$s~M)rDe12!J<N%((#xuK4AMehzxM2= -`W|e2UGSGdKcCMmv`Yv)*(sC;}*KVqZrI2PtFMtk_)pM-u5WooV|HNm)#&oXF8b#W2-JrW)}EbmS)t- -YK_Y~bZLhE6|05GV8I3#@TDZSq#;eW`9Q{od6U^8?@deR%0``BbJ#B1K4S%EV1`Qb_^d6R47#1-@OiV -8$@t)X{G2jg^$H+_11_!r;rbsI2_2q&FtdfW2FYlSgI@Z-RoqBUp(Geb@;H1i?HfmOp=~4sg)L9twa; -cZ{BV?oy!TnmA6?D;xekEV<Y&A5Y@eTeT5nD`v3iwuah;9Nz1sPplC5@@VsyoF;6HAAf(h<AMze{w_s -td?Y^8LG^+>60x^r_sJkr=@#r7oD%w0&uiaO-Vpju!gp}4M5?VA1UO64&rYqwaj2fK=;D$|W7<rX!Tp -<J!TQj}q8mp$~nAN3T}*8Hql-R+9Kh1EBFog72#%WrSU7sC-^2>G!!RH{W^1<BUXGWBSWdgPqC+bV82 -nXH#UL!pPD5h>Nsi`3X0Wu_YIuS|h1Ct}}2)vhElJRESOqd@@H8M+aA>96PcVYRdTtWn(1-e1qcw^8( -VvcEpcESUx+MO_p(98Fv5kk~%m4henSXT`7`n)Rc_VH1iw_THI>J+O5n=)YAq!u=1lU;ltCis2VY=cr -5STew*DP8Gw;c}}7M_w&?%L*O#d{hy$cO{<v#U<}mnfFdiYh|?_M?JeShA_Md+^pB(>$!3uZDk6qccx -U~gnCk*ie0e!ym`8I3@u+hLs3fpc(IvkO&Bd>l@Nw*iB8Edsg$)hlFcQj$_(%F8A!jfWf{wPrmka*Jo -7(>pRQ?n?D9*kdew%tkcFw`*42zbNO;#Q>C3vUapKB4s=y8O<r~}CEwd2vJWJ;T$6wA!s)}EiChURwU -X9%E$hJw-Q=haTva#wVwOS50ck5vCoV|Rax9?ER+X^@)seTq`ksKZyI_lx}-Yy*$in<2}42rY#e546f -?h^>S{u1C9yHi+V^8Y!a9@keYblGcgx=UnvuFzrRP>qr8)LT2edrry%JwBi=(YdQ9%W_AmDCN%IU&+W -vzhI`C9<kF+&5I7^dQH(`3XjFL-jS7wOAm6&+V~oHB-5DdfxTra=72-!SrmWBTauD#Zi(FjU9$z%y=} -l3xjOu``S?!!udO9kdP&)@KPpV2sE>m9PgJD*YV%r6Z>21|@@+%Va)!0q`e(MN2<_h%##{2PEj_B1cZ -kxpX(S7na#`6bLzUlk4U+W&;Tjm#uGN4_2F&xRD``NSnD9s*>&T=6x14vTDnsD0tPyVmv$6L_9H>bJ~ -Biul>4<ZlIhX0*7Ddw3iKoxYGBl#pUCo{tb<y?V=8js^=!*r)vW^Hd_-hLlEU6tuFMPwL~e3-P76Hjn -7`vtAX0o+&B*|N8VPDux8?fWTZA*L)R;%hikoED*@fLs<rMIbl-DxKWF1L~A>LMV&;8?@KQ323o9hm) -2eM+-dULm9DEp&}6}$cz*?^<e>)b`DJlP@$o~iC=PL29!!IpOIl5U<StZQG!=-jfIXMb^!8zkCvxnS_ -V~R2b7UA+ol~IF9?8p#z~O0i!$SA=ZgEreur(!Bf&n(rwt!qT|PD@z%+Im*pZSJP*=EwkVCQz&<mik@ -ZQyVphXr6q`QA)?9!y$VX*2}t9q*ua;x5np~35KMfOPf+8Ff6YkzhJvQ`_0OI&j7=ZO;((q;Pkw?zM( -={ZLy!>v3x`Q>)OJQ;4baR-+Dh!88}$lNkHS_mpib0Is0J_NG>I}{&lg|GP}BqO?z#D@Z`HsB+}&_02 --L5r3n{wg$fT%&D=1e23i9LBtZzT5?GE2%Q`zox!MzB_29M9nJ5{AK7evE47O8!xfbK0wKQKRYY2y}` -)bzZZjWAy$0R520RAMN~*ykH#Wj^!tsddj})_vT(atiLqudom-2gth!=v&2l%!J8t1=pn^GD)z3xUCb -4aDQLS9mBuCNZz)=q+#7%>(HD~S6?-I5RdH4umB}S82F{U5?-etZ&ZGIP<-^0!C&LsK{PcT7PzX+i8) -`&lG0-Rz+CORT?N@7JlIYShP6*4{e#fpE^!*sFYPxLTbtf(ZpWS&^@Bp&;B-V2<&^FguVWy&uSD~7=X -9TWywQb4VDqN@w~nk!zJ&2u8b{NCnCI7#A$FH@Ihh?@mqTId`k{4%R{Pp6M{#&C=J#Lc-l)AM2x;tQi -DVITugoNu4Rc&5EU&`6(<I<{c6e8}ccJq#L&&j_$9$l+D=btd}uR~!~ANR|#Cgk_UO->A>g^PhbaHdc -@G<qlD<6yNPHN9V59x}Ko60a%-C)Ju5uSnu;1s}7(|jiC1B&B-hg!^?o(OYK|o#R|Wj55*~}Y4BK#!N -YW@0}pa63v>Gb36oEg5+5=FSPXc&2%uDMsw9=gzt&edC-c!@Q5jO6ARxOLNL<*gef+oy;mZEdMhVdkd -vV0yEJqhKOVn{}Hq1bSzY?E|{Wg95BRJdYj(jS@PK6CIau=+fv^fa}1aSIdFVR{)EIvOJIq4&W9jmvm -f0Uz1g^d>XNwJ~^64pOurv8pFp+vb~?OZBWtO8MGeaOt(hvioAmv9~AM5Vv!eprC`z;P9dEaa!4ry09 -Jo^dHopug6z5o(jO>ST@yl~5H!8*qw`izFW5ZkI?~m)^&1=CAm2<uWN6@D!`ncSi5ri>@#WaY`T3izH -IRvBVu_;nc76K!DwnKo0H6$IJ;8D~@&pA&B1V!KH8%M{d%sk(=U^99v`KlPJ-#5^oLt{;QDn`@*eCze -0}hdLE)fT4@`;U{k}WBg7UZxlr7ETc<t}C<%PIDJ`k62%hbJc3Wp}!E_)vE1iLk796(|nh&M$R&9P(9 -X3`b^FZ@dN&T`z@}8H(ndbpT74#8~{&qLwdPmEMrZL-KE@Zab*d1<q)`2u^G#<}X2Y|YCoC>n)=rqtS -@>W}I^_76|+w~90b{q|33y2r64n`fUgFpP0SaI$g%A{2w^a+YH*CtlzNU)9VuuUp$u|x0@8c^)>#zK; -bhrh>b0K8q&<~L{oXLezelGj*$b$P=Agt2J1R)j%B5&z%u=75S4@*`_u9X{ZIK2+~uLnnchR&F5QF_% -mdH=UP@+M!mp;r{F|sJg=rK~El5Sm|TCO*fwEAV$f3fcWh(0PoM0A1y=BNB9B7hCrh}17*SAQ3G?)bZ -9ga=F=F4n}vo_p_P3L5go|S^@g0ZIH+}^+z)t!vj@0@i2EVn60D>}5v#JWO~A*6u`hX|RT)&}i6=%^e -2$bt?*~JcDcJ|j%nt(FT;b2^@MU#CjkM4}^3!6Cg={MZ4z^80ni#4wy|)14Ap?(X&^6fBN!>V=5%6gb -xv9|lY|^`__CKc~N6mw+7y|BPtbR~t-4g3S%EPHmFmsVfePs4A@cjoL;WW2M3s<imOIkC!hb`jqCt1* -3z;+&YQTwwS2y%S_eW|+)j7HN(6A0A%#~7$bV9xI#o{W<gZeMW~!m5nquzGr7O`4XNS9HUiC2jN&KQK -|oPp2}C+8=g+kOxSE#egaEQn4&6=XYvnK$)d>E>;TGFCn6&WDuhUty&BZvvTs18WYjZDCIdRFVr8IH) -f>8+AXyCU9l4uq#=i66xoa<saR5TZww8AuNBtosfwM_W1G<H4l;Ah%<m;K&xo<#LuM87VCW6aH~9K!; -#I}hrxLFUz9M0b%7=N%Bajl6JpAQe3kO=Pm_@$PASBQN(b~Y^cg9JsrsgN6GIkJ;_9XTE#LxtZlS3Lb -Z7|%X$RyC3rtUU~L7>$jnzk7yGrCG{rnG~&t=U=Z(ihuB@M444NSqM%X%HkcSggq3I3u!mv|vi?HMC{ -HLo}_7+Vw%Zn63(Z)g*77a*NtIM)}_QEWT=E)=%OOg9)9zHGHM+g+`tF9Bf(-z^6qoz(q*br@)I<zYz -xEi_EP=KuhprK7Po4_5}`ugbaNkA`eX45|sA1{6=k~%tsPlcyha8_;Tlxj9B=Z>EDecCW-<odhd;BMD -q2U%xniKH006P*V~%>*Qz(53{S!H*{C8I?)mSKIkS)lNGcNy_cTbElC*R<(4U(u7JliDv>vZnLa&&S? -_78pNAH<N01pGtqP9D#*K6O~uvFAOIfddbkATq^$l~9+cne_z7;z^?h#0NQGoZf)SoG*DCrI>$JL_$( -3r<p}K9!6n!(n*T_zt(UZ%0Y)pA9x_Q~x8rB=MI^&UG&Faf*H))EC$wL|(T0(B)Zsb}UkugL3p4mlU0 -m1j}FNi!4YBMi$tMzxk6Ko!b96MiiW1V;_yI3i#5l&^K~4Its&45mDFJ^C~SE@@s5^jLV(GUVN{F9DR -EQcSbGa&ZuLK#Z`_H(m_tKfZdG5ul@sG%VXgh<P-}jBtWT3DlJAebn2}u{dSEn^X__(7CadAaJN1|eD -@xUPkgu9=dE2nM9KmVRDF9iXfHvRy?=VN7cwdG!MY~7qB`^eyDg1eQ*o(LZOLZ0*?nv~x1xtj08z*~i -+VF2%rAJ9d}H$kD8}wigS1>Z>Muc88nVkG6)o|xx|}9Fanx>n<TAy>DA!zALn0qKvy$Zz;&~-OUQ*85 -7mWV4gd%6}7!}N_m)dO>rC(V;*BW2SVZA@RS`}AWKaaG==R90lj+3P)*OzmXyipUt*m+}ns8PQaar2H -*Fb}Uv(R`2EIc&KTnu$*H=xGwZ^@mmfc`s_isKtr?pcGWiXo=}B`_2~bFI&d_WitY7DQtqL#|PNq1$B -wDCXe<G#p`y)qY_V_1Y{m0t5wx#H^A7dSMaD$U$PzzE!utD&-zs!{D?E;9kuxc6r6@=KBCP?1<@etSV -dQvpaZeDQE_Nv>v8uxUOs`9eoS?lqw<95<I`sFjlp~98o>|UozWQ{ZJsM(8%ms0l07CLL$J^fd9N0P# -?`Tt&m+(3?g@=;a9nj>;M3y1{w+b^p(nHZhMwqtwflT%V1uLcT)d<eO6nh~-RDAs(aFNo;P}MMWBGP{ -V<LV9;5Bt%I#15Oudc7Y&ZA)*-ySh{3t|&Htp(7$e~@)zR58T`gFqM?VnqdJ(u>E@Elg&50GRrF*kN8 -SzcEL$?FiV8qbWx1a+Jo(4edN?q^NL|8!>wB5YS+~+i=f*lkdMH0(bBBfMn|)XC`i?#5+c!qc~C)ZPJ -y1-mC4A`_p`Ri!wdpkDeF!G1a)-`I+OCNxAbZ%6ReJT=8Am;_X`Q&e{!a-ZTmTDoe2kY##=)c7(n~jU -+cC^no0`?TYn1&_J2f8L(}kJa&h@JoYBgel(Zcl@V$zT@j5Y#SSXX@G3h7O$@3Uh+k<{b|*#=Rt<o+$ -Zcu9NU>A5MecXX(bX=Xbn8(O12RWZ3wfhvbi;tdRi^jvM;8xljtA#-&J*x4Dq9D{uld6MJ~D@yQQt&Y -fHg|F8Or3`?^~2>#CHdX?@AVL^YUS^!M`_3T4R%JA4*OOrWV?Ec$=3UM_1+CVWHh1oj40^p9Hdwhc?2 -zm4A&xLr9e|>eqJA^1n`3QjOiA;T!qTHu9lu<U`wtLkni@gXsofT{EJqCZ5@lL@Q?(iz627C6M(Y=yr -e_rDyT%0+BTrck$tB&Ns_APs@)p%)T+e7yE#)E=k>KXw4LH-ln-w6=A=_T?Z^`(>Zj}Y4sM^#flJ2*? -JG4q1H*)skP)7Bse}q+~;M!PaCBwD)LK^$s%679F6VJoaeC>jm+>=_ysH+jE+^m5`;FRUub}t6!7lA{ -a=etA_PL4VQc>p1viV~v+&jKcotZTg&*{7LJ9zr@NEX3(iYewj;FftOwSo{JVp;`5y!*$fc}7uuNnsW -(5q)1&$#8HZQ?rL3|FxfsgTRQZvm31f5AS+{PMGi8qW-ZB5QoZMoz1&u#`-v0;pYhK!3vQA)s-ssThV -l6HAoIP@+LU1e>{4L#UlNr1TH9_>k_Z!6A*Rqf8sXEDeRV&Qd##&^VZfr@zF4pC}mis*QuPS|}E`s_B -j#n7ps?E`tB$-$H)6Q}>H#VI904&nmQjfcFiKI*}jdQt;~dx;DcivvQY(8=q}NP0KwOzGhtbn%(y`D$ -SFsl4vKnJMjvoyjg81$hpv;21;0Ebwwx9zFE%Rq-qbwegYDfqX6Azl;JfMb>yk{3le3Uj5eR8UmwWq@ -b2sbTKqlZqWA0z-ups#ZydTb6FMxC!of?AgJ-63__oF2^I0nC9t~D=X)Jd6c*@z2ovxIl=?}D#OR4gN -%+xsW530FBXuixChrUS}qUH&q0on}o%3usz(2^g;W?06BB_{MKv67sD7&fX6=#%cCXEi?Z>Dbvc$jrr -r@)#0V?ek4k9<7g?i5g_>)^_r=Sr-1fiN9hq+CTX-4j%aNHF#GMu;StBdYlG?>wFQxf(5iN7LGnWZxf -$r$0_7rdDGjJfie@xLkY*?&=z1h_1R985ZFv-pPT~9Y4D)zxrr{QyTD^DHf9su0g{Mq#+8z={*)ja5c -KX<u9G7J&~Se(AbKHWjt;=fU(iaT-i-HxL>=QnrU-hQVej2c_eIvxp#Zn%^LDjQX(3zUvdlOb2Hs_5$ -};`6_bLAseATnolb_m}!6?u~Sv3(mH_Ex%-TcZsUf|I|edLkGWG;`yk90ujG{!#l8y*t``<101i{TNJ -p`;t`k0D)6Z-E4If{*=TU~lY@iF#)#l-%*eyC@2kqtd57=n@(v3{e&u%5fO@R9}vYZb5x{2Yx|?k*!n -#2`ZPG>IRWqrg9Q%CjJ#V<b!yVvLhR-xndLQ4|FXTWweOO2TtSH{sA)oT3(}c;6>_6AGi(ohra?MoZh -2h5Q*VF^lO@S)Q9A#Y}wF={9<f+JW<JE=^xPDY|Vyy1C`wlsY5_^Yoj=;O_-+6a2gSto~(6lBw-2Um* -4$5A^n+PnCtulBYt5hEQ{>YCMWe-7NS8DEL=YAy>Ed9auMGg+AABe@(h{3t>JI;_}eP}wwS*?$=^!&+ -d}@fg1_BGZ;W;#B}hEsHNJy>{cpbE9NGj(-<-~w@2G*aN{ma-C>}%Ak;pHHLY?V{`UuTQTH6L#45*~J -;;VRQ09B8#qLPI=X9S~4y;C299j*+ARxG%8y`4&b^;RL&4@;!>uIg`G{0#l)8w{hbP;JgD?hkE=NIow -MffD|MmgnkUp=;29qudQ#rsd^Fw^C|ijVH78uaB5(yziIP!W9^eyIo5|*5y9%%fuS<6TM_QXG-i~)6b -EDHRCSy6t7wAZ4@j1NV8hlsy#q}FKAVt9xQ~e7T3)M-Dq<$YDRP|N7*w#o6rc+W=i_vx>~(NTvzDYz( -YN^EgehRqIP5}IT|F1>-;W#DwcrVgTz&Q*Y4D>VKWAU*65LFoOC%~5MwGy!+eTvR>O*l9X>DZ6lWIiB -$>6K_dXfAGUD6cp{jB86;9^yI=K&iM>3Y--exA+(TsZ0T{LXJwhlcvw;S#cUM3nsw)@yF5nuRoZGU_= -*YRPxNT3ltG5aU+75~vze%s+O(;xMK`Tb-ueN&GysTl8Cf=QZm36WxS&5#vgt8>cU&q_~Ra^El&N7<D -sKr2Jh-`I3~wi<ilHDljJS7deS=_HtNwjZc=H2o-EDEYnH_-%DK_<fl0`#VV%sKxn;rvD7SwAFMSLkO -=pWIlMm9~p6U)FV`6>SFlP`(JJV>Qsi^;ibdr&tcnJ{nVL=PRLDCbe7d{KL+U+xSICy_rSx{j0=3({H -&E7@UbrL;&^R;jL4bV|7#R*D^Ln;aGX8KNxH9c?AIspnp-jaAyMFT&4Esa6JI8&Js$ibR=mM;YbiI4a -yw18!FHMMykHtvG}W)^c;6#?drC{R2k~yZyyTEo$7@bY9{^5nxOcon8&>mSW+d7809r1gmjB6f;C&vw -zy1<(+iyaSpjT7g3$kx;*yCmXot@~@ghl@qEXmAY(2`{T0%Og|{l*>SNmDWDO-Nen4}YnMe0E%E7=83 -*Xk3FMc7jg|&*(@++v#qt?i^l92z=ns&k!xy{9X^7{5~Ey<S`yACcjO1hGnzF=JjBdTuu`jlwva|Ylm -qi^0C@jUQgmK7uZ{Wuu@=FzCd>vlZz`hq7CBpK-C!aCig>W_NFNP>G~L#+Bu~3R1UhC$TrCFRXY<j>> -^(`x%~Jnvcx+M?GxgcisxgWUD|7C7-;7tRIE6Ow(C1=+K|VP)LOWLh6xVxoDHR`Q-8XTaA`i-0M4NfS -y4qI-lX-%0qpk%+vvL0`EOx|JMqH3kD8&2Ce+jh(~0S%S}aKS4i-mlc>g4MF#`ShDUNzo=27TpBD8Sq -O;oe+x`m%N<L*-2z0UdkjA9EYbvv+tj?V5lE1gr8O~-@-Hxdx9zKO^E<UJM*`riZDJCL<i-qR^(b;|5 -xZ6QTXT-xpuY!|A}c@shV5Qd@sh1`TgQjl)m!<1k1l;L>4`x`hOmj@3_cWOU;7>MCpw3HV%>&9j;P89 -kk@}v`>tnDyw<o)VJzTE)Kx#S8zlkKCkgEgsArL#CMM;Tz$(tSd8*7CDwU`k8BLbFtUe&xS2b5IH@n# -r#b$c|q@h}T$SKZaZTDK`E*p#rM<oqy*BJ46;9;Qlz?&7Et8RK;U}#?y>yryn64QHJu@!+btQsZ&dUo -LE3%MC8zxz@Fni+Yg;LucE^H2mTi{oVwn-j9B`cZOEAZ`Xc8+E;`FY|Lb1on@jy>dgC6;kFVv6jKlgR -Jo7ld#~NWhuCUSV%pez#w1!rj$E{@4*Fde|fsJfuBz+UUd7GE|VRQA9)!RFa;)ZF4km8G!+TiIrA*Fu -WWPF?Mt1K;m&GZgdP;2MO(c3%X@sW+CTUol&gXffaO6Egi1&`=K&jH+DXjBUpc{U38D+1BQ_CniNc^P -6b!@FIK{+LEE^}Zexdc>uNtb9HeGxuohEm}$4M3QYEMcnBGaLrOlj?Ur$mpyb{*#$snr}P0h`BGq;n7 -iRTnYx|c4^~y`No>@*^GN%8!UtEc3aC>u4P`NY^(YTY?S8?c+>2k%Q2zi+%QW2g|AcmsUoQF@i0ms+m -7MrwwpIPg3|&1jPqtlC6JYjCym3id<3};dRq1yc?v|f$>)@j(<oVN#hJdj(pl)$`yH{2C*^vM{B(tdn -1m6^|ffor*@%AVwWkIjAEEXmr>B~eP5NCNuOBKc?k7!bBz6Fvl`aqz0=LLjBqis`&vnZ3C^T!tmX0P} -z?1O8(cr$u3Hkq%dsGYWu1D`?b4|?MPtdmVJYtK`_Xqui*#pMROw}&o3sGBDlTjcU?jO`bnmr+nkFFA -)*U-$`<ZQN6cpFB+Q@kE$nB8L4t?$YzHslNoilyd^F(o=Wf&j4uG|1+U@j0XWc6FtInp%*sw$rI?+^j -i%LgWk_1rc2`V<C6DysIkvk3!Y>5RcQWm|9I*CX_>{abAGu#BISgy5+F>>b94YPUv?ET$$z|n0KCcp8 -1)$vdDaa;oRhrgLe>8Ti0_7>oy55qpMZ}MfU2T|ws#$BAppe>I25}KcNRhMI}?iU6BOS76lWyw88i(1 -=c)KkzdUph2c~fh4Vys>4?w3n3_mk21?EdV4$SYOeSz7b$AS4)@_rlI*!Nxo)B7~xg?F(}uMwST(H_7 -HE~5|F@Ce8|Dw1Xqo_Sa<`UYsxf^&lD&<ky)wNVh5ODouhA*Y6tWHeBiclY2`lc8`n7KT#XarX4{B;J -kSiKn!)e<oks)N|<7k@<~a)agIr%2um29>0Epo9rdODI#UyqV3PLO|gb<?T|8XUnn=SysVY3u(5iQHf -KE|&}<h5YBp;B1EPhuAtbVbjEd@&qS|^sQjno1t1~h@7_7}^xX^c(U#grdM^Z18-FtaRxCx!MQHi)7f -qjHTa>aq6S{}S_0;DUvKV!T0Q5CtI_J5p$_N#lD%jII~Y4&|AmeUSPaEC?v#7gmu5+1$ND%eudwHmeX -V9{Zi+z-wQ!tLsmRzX>OI~&~EJ`Gmle(3cNf2R;Q$G<S2rM1!$<w)vzOK6~WBRcAO8<a6dJ#?R`kHC2 -MAyC8$t2m5jN}|u8U!Gv@r>Kp=UqG|X(5z7xD>2O2H_c1l5a%tTuZOSIES$J`i0%tb&vB$WR5+Hx?{> -L(+;pK?bZkZo-Y%VUFu=~K&pIukadJ^Tr-}7)G_4F&{Uo&DMAI7O2#EIm)(~MGXVl@PacXzwswVTtCN -8+}z}#ziwJ^x7YUUO^^*(sHv*^v4#1coX{TT4BLuOfW_=GY-ecEZkg#^NP(;Chur~eVjFgn=QxzPUiA -yg{*81rV3dwHtrwS<xkcQTfzGP^^EFCP$0zMYOMu(GWQ_Cup=jBTzIF1c@Et{LOEiJ$dP&H5aTnnSfu -fDJ|O7^Nv^;&RW1HpKRB*#@%Jq^<jKSFHk`26}eAzH<F|EYjVTps1p@Yfm3<fO-6$1kj4n?y{X%4NWp -R(=RIdrL>6E1@9P!_S4?F?Rt73GXK1wCu!r~A=FFP_R%>bRMOSUEy{w6VlelEI5HSD2HQcPEuW#y_S+ -s(be&Oo0Nt4aGxS;ShJ?BL&5tjctN-(z1Q`x)8+2>iniCGd>N*~5y)1Dd!RPUd2G*l9Y0&#QU6AmxIK -2j)FfY2TAmVRHTttu)u3m8^UM}F|7ZD^b7%;587Yy{zThKDCa{f5u|8T#+ckrz2OKumy$cu|^7uZh=9 -Q%r!@5G8Gde|#gR15refkJJ|Zj{IAc7eP{;<pPd?t8ny!o+O=mFDdNOSBiD7Tqp@0;N_4Z;=drwYGdW -MQ^qh_q|$Rao?*2dK*KzrrtN&5c=LMa3gOwl%rh(Pk6JygmCrB@%709zgS?%Zd^0-Vu60U6AM`Tzlm7 -W{7Y~0$wpFexqAg(?Y&pPjI+k^9|*E0Nj=;twF~wj+oKGUSiZBcXqLUBC1~3t7c~aQ><JXr0daKERYk -H>w#{(1OEytS6W^6=YHOSPO3>CA%-I%TO`Kg=-ZbwCFJuzHu?;UEj$klHA2*(hV{8INAkwz5v+R^V+_ -X9sl?&K|H=$XD(G`$*zZR=Ae^dic!$0=1MidEt7UmT3LKaGP1BO@PDFZ=uz#C9dsl$7!YD-Uk6A#|#6 -R)8jcLgJZGx35oXJO94AZT|P!K~&&aoPtD2ieH6=!0A6{b1>kVyXNKp{+3bYXJz6RByx7P+O2eU4~;) -x406x40ya4@VLYik>j?vZ7}KD>;C|jIU_?ZYHP1~4yfG3ow&RdYm96fR4UYS+H3Nabglo+1Ri{mW3<; -;lwpylo$WO)v4T5`7r4~Vd*p~MG9v?cKIEybU#pE);QH@SFvoRT^4p035T(D?^@rZzk5mwWYrI7D=wS -1S5&?riNb;_TqK!KXC5x=bVQWvbKqssq(`bwoIKwAa5A(6DQ2oY-@XSEJM{V)|1hHFTrSW#hF=|hbas -~Z*OFjPH3FxDEOAF~RO`yZ1)#}Nxf8K0{aY{~)GBjr|+r{t3dP<<*77{DIremQQt~I{Q>`IG1<bA>*y -uJ^LvaQ<22eE7Kc`>{dN{a8Ig^k||v7{FtxLk9|db65<+UYEvExx-qu-;<+3y6Q)1IhWNSI8av)z6ca -q+nK!9C69E#zNK@P+M;e)WniPdHf|AUTn&M;^N}9Yw@s4t#RTV#And=IHhucd7Ex~oj5vQz(VjpP~L? -<v$!-H%SY~n9dM@$>gB_C3;eZ0efZMguMPe>LoNEx&G;a(ZUFp24fx<y;GqRSs1kf@_|b+RouTHovb0 -PgHs>OFBypi0-D>#nZ3&|C1R!K=5L#-bjJH*>0ukWtd@+nhytl2u@Ebi5DI<orx~Pp7c;u*+tW9|mE& -no;0M#vcHqr1`bR?LbDYJWAAQg5d3qoYNGj8{!W&IUAv`^1?F7yCac=@kfsGdS+AN10rT!$~K{z~_Z% -F!EMI0-XQ)FRh(JG5fzpariLz`F#3wvmVQ<Y08vy}LkATT|f7d~V8fA&0o(sf_gUXXzr7&<N<wski~E -j_Gt!8bvdSzM2TaDH=1K;=ANd7ZLTrD8s6)F16a#Z+eFMh_la~TYc}*1|sC5qm9{p0(*!l&y$O4B-Ya -4Z$))BvfxXk=fkw(Cd0@vBDvbsrub%$ZN=+q4PaN5Z^Dz;u?BQbQGJE`c?4N!Fq;0a)rJwMF&yfV(KF -cdU9C@A1o`pyd24)=oo`#jiX~9Cyc-$!vZ0y{T80ijX^gLH?13btphqzp^p+%CN-=z65-~<)k8jPA$+ -=P$I@9>AC#2@{lDKK7ukwk7Mw2oa@Hmy#bu_<iQQlS$_XOE#eWCgO${t<vwn*Z%79bdF@mD1Hh2<l(q -Q<zmq^+PwI>>0n-vlU>bN15xeLr~&O*QGCJcIRGX0Qqx5|G{O{P;_N?USldPHXpN1HM=M8XngKv-?Rm -H;NT62xMcgz$;Cq%Kq^>lDf^1YzG3-yDk3c!VX`hFT0<=;)L>0yZ|(i2Ms89h7T%*l_`mOwga+J3spL -?N}f~(`opz->fDTVMnRony>)nnE~tuiZjLWYFk1MD4;9a}$z-)R+{S8d>8L~xzM{FGfH+dQ3h(KwlfB -L2kAGk%tLmOrfY7!tp!H5{1_xaxR@{INwPok6V#V`TjAd5RrLtR6(6o~6wCj$tMcK~oK+%=}JA^-oW~ --MYevJa<N1(#;9-dF4acIhLu>x;gl5XCjq?0pgz}OnwK@`xh$wp()t1TTGi25yf|6mfvyXmWgOpD=eg -^_i}M+TzZJRF)CCvR*u$2ekj{0@*8SJ6{(-ZP&l55l;*o;HlWgOZiuWzWn@QAYbJ$HZG+<DXaQo7_+L -2E2ztshAyd)Z0?@EI=5^6d1M{+P#Yf0W+c1H=tET#2xQ=1s<U-7*o*ugeE?hh8OCM?%QQPpD(N459fl -0?_-DkSx3sAS!fZ%d#rR|Ay(i4sBCO+x0Qu3#3A+%!Sq4ZMfI%x*`WYk=|Cu8)Qa!grscjTl-y|%lrP -11Q>TfWDlGU$H}O2Q6|o-g;a0aBu@JOsRC{Zo&7xY_)}k-Ca5}uuRVCoHde*vXz#3b8PB7IsIZr)n3t -f_WGq#k~q7Q=k={R7{P|;qE<XQihLH5KfDeKT4&BwMEvU(K%a`w_M{RH{%D{lQE(gVCm-EFvAe@MT$a -bgS5TmW|)H0G^i3tI8M`5zj_?Iy7K;!6#F+n145*>dcE&?|WF2Hc!Vda;x@<Ub<hLPE%gdl8a;ElKSJ -oV=DC`Mp~dmw8J&VqS~~VfaC@uI@p^91e(SEzWa=`a!lm_7}7Y0B(MIDQ>oK+@wp4pd}MIS3gZC+23% -VS;<4hUxosJpj^1YGl`WKBdM20SDZJuMajpXs#@c3iT8!5y2ii1&ud=1ZsnZpoAn@Ku`5wO<S32|(r< -#Lk{fD~7XSgYX)insxRt_t-?zdrsHY)%T0E_GMepx#0bVZ@pF`nBzv{AhoyMn>Pa#KbSU^OBLhrYVGX -V104}S&A+ub9HzE4=4{(Zw8TY-Go0rdJ`wQ)|QHPR!-^~WT<*t7GAkez*||1aRjPRNQ~a~_ZO_2Js9w -Zvmq^j4kx4p&IjE%SOK0PZvI@a5(Qy6dR#_3jd~w_|cqmuetyyuB7ZL?Rj5m5F9!czZ$4LFA3Ug(vUS -CyyX+e34M#XpnUT=z5>2OOK#^=1Y(TzMMCM**joE20e7a&!enPD(|EK$(Q-HN{4GudDGsjNjUD^17gP -HzkoVVRoi_Yr$rgy!=GpU2y*cLKGveUwKX+~(Y{J;z<z=JSO0>SP{E|E;SCq{7906?LQ6~B{O0L%#(9 -xU7QhRJLBl-@>Mg}+-_1p|0nlRn%B!Y7P;XOEyc{TdKPXM7Uu)W@HQx*)+0L&s&&0c#KsVnid%KsWX? -v=nKIsmdD3<;bL5Ays?b9;yLI1)lfqzIr(T1RpHEwsVNSB$l5=f#|e78n-ikq6WG2f857P9xV=~g50L -p|ZWtAm%bIR#i342&JfUlZe(qUEpIX>8ZRs3qKLDE9EdXOI5(J6Qi8V!ChPG2PcoYx;zA_orVA*@_X} -12Lj|0MGfyt=bth#I!%V=l>ASec5>K>>diPXy)g_^;PD%aJbRZC!V_mrA7>GE#m>*7z*oS8b)p>V!82 -}fcfw@NAv%}Ff`ZZcr5p8JeJ$oln~mh-ipU^ze2IxYx~4<Z%D>%vD;`b$jAqA>j?$)qwre-cM%!$2A$ -=PuY)q)24y@-++%`8)lkr<;IB|LN^0w9yu7RM@#=Ynwu&YsJUZT(4@It2Fybyh_u0?{tbGO69!7V`_q -|{>VEcIuk*jIBWy&?0+zYnlJHVD$L(G<J#yk5m7bBiG_}6&iQRo!MWX7TUD}Za)k(|7sO4^80e!!^4x -m%3U=kFx(!>raR^Og?`h?}+mRe0XnI?y6q8g>p@KTi=r_u)b33whA_oyk0y{D)>x`Bmok=Vtm2^Lvf? -t(ZaQW3XrFQ0-hK{$wes(L8iq5-ZU8lLF2^63l?}aTYV+d=x#*Rul?0-)HF?Y@Tj0gU$bpWD$d`&0up -pgS##sXFg8cj6r%|r7j)#%LYInlngM$Jl1aGfpT+V$1!w^joPz?W5F-8p}CJR(zjzP#cVsE{)yB8yF& -6BtYJM5Ew90zpoGhbW9df@tq0>BU|{na-dyYp;gXhmYbsa!#dUXd0;8r-BDs*&X~Q0h$Da>__U3bOOI -mYVC%mEGmQd-3!V9Wnxd0=it-v&?3^t;=6T`c!B@Aj8BUe}{+lQ{MvH9`XZX1R9KeBqS+W9CKfhnf@@ -AU8#_i4s>?jnlkPDXmv8RC%@YUc_uTn7zRU5zl!G8&70dHC}<YK;~6NSmCsUEb5Bdtf4P0?O-X0`wH4 -(U&_wNd`p{N}bNyj`7H`r}54rGpPGSBB*;259$UDW#xSPo%O!VS=mzb&eN5?%scg&@j&hqEA#!SI>^R -6W>Ne5HHql$Kcgp2`&Lii&~2K*SP6x0?=(ZV*__Ov8MLj1k`X`BmL_7iucZaTRtCdoB4B$c57>55TAz -SzdhZ*neZq;YrckSw#%h1nA$hwcab`Er&qX{|8}oW&wS)f;vD(-|B32u3zVL^2{`1rL6O?7%Y_WpE7e -G{p%z9gPtQ*e}TvFM&M?wXNB?Mlc2^uz4ZlJ2OdR%Xq_IsbBFBQey!fIlOwvKlg_}-v1XAIFkRKr8GV -W*$t(b-joTPh)!#xfuNEF}hL2l1-edNf(WqfcfZ;O{Izi7JfHK5s^7UqP|SK8nA7wFVCqy3qa=om)me -8w7YfK6^Rk@9&#m=AA^L*(c(m*>%?>;$G>Nue>>#^Tja6&C>c!#?^8zO-7WP1k2RE)uOoYB`bc9Lr@< -8saA!Gcyx_Hl8@pTpxF{%)*@&$>nIe7$7#bDCHCPzJX$CH{<8nIM4a|4$co#*ucJ8atxhEaKJ6D)&DP -%UponIfCS#8BNZ43iB(raP^iy*$Rg*(h;oCfJz}StyF{d3^VD5&{b!_h2pdgQ@zVS|96M!hyqu&3)!> -?f;|E!OfSO*5m=i`NZCbS$-4A#cd>IK2tS0cd5h~Ad@Xj2emKG9}?wjyG1cFIqvGIA*lvn5uB=4;NSf -Pa3z1PZM2APWmm@1i(cVuXcj`^MR#;DAm<|9YOs3we-umv2D<qi>uo;735oh0n#x1o&KnW`c9eL$4A6 -)?bmza+icsfHmTKnqCQ%!KFV3pB}nKN?OCo(v%xRZmDdA<@!V%_z5vK4+>1l;ThjcWPB@<iFe8(vEnB -D2I7jpTr~wq>ecuSG!!oapRxkBC4K`t6H)a+){0mwiSO<pcBHMGfX8YuZCPmEFX18FYj$Xl()FSsDEZ -c0B^$LQGZDY1Uzxw4=q=wS)*$vXkicN<6GI*|#ycL_y%sZ=!SDW1@p=vn?cTH{5!(F}6);1)ABs0K!i -?-j=?vq!1DK)iw0E@VB3|uCf!xpv59FQ~o4_l26bU}Zz(y-Om!(_<pOch9@R==!lX(lySkHOhRP0;+V -2R=7W;pA~u`hU%HHMd&AxJ9{LEQ8HKlZ)^AgXHr{|pQ;vN)iixaFvrBrYggC|WZz=p7vr6_m;ngh5b* -X}IH3E)dWIuaxy{eZ8{fm6i2;Wo~VtCTOT=n^`YudtI6`e6J8U?*IEe=iHfLGvD@G{=YYP{eI8Beb0W -*=iq<VB<XuKHLP3T4i;s3hkJbW^zRhK81H<v>B$y)j}mvrI^B`U`jovt^S=DfQw$Z>87e=!!@Uhrr?} -=qLq;E;pvQa?@^P&l?dg;VJY#_S{MhJ%$iEEkT=n#l$bLM(cM{5pqq6hY`--!5y36gb`n|DmRh(D#eG -r%(nx(J!>@ZRu1>Pgzs@5I7ruzv+d@V|tx&Q(zS|&)Rt<q1Hn#=g=Kn7^JUmeh%feB$Goe(C$l+FAUo -9vxo4>jOi52`a5d`97=U47&yUw2R9UVohi%qDxUJw>Nq1LWT`UD@feIOcJ$*`E734a9)$ety+Q-Z~WV -SLuoP8mC`rkm5C=`nCC#eixrl>389L>Y=NhPhA;@s^>QHci>Rj84eYjy9j*ll8^HkxpD)@Wa?`jaHtY -ra|`LEN4v+NTG$zf>O_)sAxS!njVewB7!1`AdeQmz>e8c1)y=n<tL_-$MxZ*OuW0Q8f$I7)jzG1u9Rg -L2P!$Ygj~c-jL8!vY5RhqSu*Ou=q{SV_TvO?JoxbcR`r`YcB-~w|$)^L!9FwY*tN+01CQg$$9l@pv<t -ZI8sd`aNs);HlRlPbzn4{rSguUt%;ZGWlNmWBQCe_^>lWI1dCOn}|6NYMVjW0jS?8b1)*O%Y!uVOfj^ ->br5wQvllh3>w;DZ;NamenM6juGpHWz`4f8|JFQ4<ExfD9jwp%Jl#uSwRa$+fqCgF(_*{n{C8IsYq5$ -i?HYM!ikzBMhV?wS<PcJ4vu9NL4Ctv|9yCj#~j~BUlxiFF>*|+;lsMdwEDQ|`?mIhs^C;6x~WLfX=qB -+ki`iw7|&Mmscaqasj?|P)eS>be5xRHo9_XqN|G)&t!?X!OhqvVRCp?>8M~*2?a--&rr)bGnD{miI#s -P3ohnenXEHGD@}N^a!)G&@bT;#{H#!wAmb%fYe(^ytl|Q-!$WoSa%+=bR7<fL8QLhM4_44IT099-rgN -?yE6mqI64+l1@*C0L>zNQeh5a%_Ry?3~lc@V1RP}}C9zqqXJ0IH4*c29AN{V8CI(F>$10A@M?FcQzFG -o4NCK&q&Rrnh6;PkR1)kg9qhQdL5mes&we8`--8s%kg+F?2ck@inQlpARS)kO!(tP@$^K<$nSBr%+X5 -4|9BszRcGRQ)RA*Y5L`&8>i|fj#Kprlwm?EgQ?QbZbjcZpj5s6p?mtHFU$2tsS><Usy^G%9ZJ=tEb@< -{R6V%^CpfK($(2y5?xdDJ@V3-7O4V*AOxP~@v9=If#is8sbV93I*mU7SC$y@C46Vva(W<O&v?@9e>I$ -ujPG&xqr?t{qkO!@5q1P-Z?UnA(s<>-yt3n^==?<zYqa9S$&VgM*Rb?=!s$!U-c%Z6iv|XbqDLsrA?T -xNs?ugRhJu{$Jwy_xySSmlUY7vF2y2S%m#Us1m9B$%bdl`3vfl$%M235GKc^s~)wS-OX_^b%JYqZ8ut -0wxe7fd<Um8<4gA*{mO5LN-*L0Fy9a0sh!H4MV)q~_NktafUy0Acl*rX7UU22DE%tGhMrAgr);Y7b$x -NaF=zHCLlTSm7d<nXU+Tgs`Hk6ms=1v=Ew(y5Xy$yMnJ0uouD0AyOOY2=tIfd-N)y=_GNZR|!q;lPjW -E(b*2JHM-HO(wlG##y#nAqgSQVS9bm`^r{6Ey=o3cubNKLtBef2Y7#}Sic_Jh^1UZKU$K<2K}9Hv5`C -1*is$W;iaS78wPLQ79}@jx)E3~J+8M=apBIW%+S)6kSji8(;2yEgyszsKt8~!yYM0ngDflds`_y8!Ga -#<INhb7oqO-qzgU9FQDn+4#pC*22QT)=vHm+8l<Oui2<r~&xU4wzWNt%VA@H2#%i~3#K!SvDVK>Fyl7 -9YLV?+WVp+`T~2h>qgZ_SN{beT{gKK8so%Q{$RpmX5+iVy`BYKI<7xUu}^ew9<Xk5%L4itFbi3=SK<p -vQ&Ce8zhydz9|uB9@TBsm^}w=^tv>gfzyy&x^jfqXBTl?utQeqxOq}Y;Ts?kt5|-FaEBx}ZshsF(45= -lhc)H|$eXrT=VS+VPWC<@i&E#6?Dy1UbC~D@(M@K0#H>cYD^#E_$DDBfEP(m(Rzaz2fB%m?2}+TrU|9 -PhUI%A4P@Sbm6wr<)?4+exIs$z--bhm-=HG^0YAaY;B}m8U6Fc%3N3eUvXCn}W!YV<RdIW9Lv*_$mfx -)-Y^~}li=2_ec`Q=%tUUdz<=t={1-p8)63Yfp{H%76;0m%<WtZ?Av^=qKveb4oA{T0sELRz9<#a`qa= -#O!lHi&K?VG~i>Iu&1z#IE#H%%-Y^i5z6!`E}I{&0Y%eo>eCYA7L*dSNa`&o!zf`3w%BC3ca;841t>7 -mmkG8tTbV2m0cr_5wgzEyuh>O$Li_DRdhuk=8`_bF5~PY^j!2Dyh$Zw9TchtCZb=?9pEv=rvxvbz8h* -p<?yAiVAD0C*3WjBs3<DkpN;k07qlWMx7<)kACe9UhnUN=nU6Z)n_Adi(XQs;O2mz~;odaANNCNOG+6 -9K#b;8a^PI|@iKzun$dWOYdGBKu;V~&O%u1h<##Htlgemy~K}#dPzLj{O5jxM^`8t9r66RE&ibH|XAu -hHhRDS#}MJdUOJa>`ay|45|Nbbr+oqE5Iz9FqCiKh=@#FVaz)H;VtM#EHu7Z)R@4nfj$>QE#BQ;G30j -niNLZUiCq9E^tFQAF$jdV@0N7B@~!*Kd0MRXQ&}^ES4XhtzAZ8|i>$(-vCfhbK)ELxrk)s!>&16N>ld -eo)m3bwye*_qEU$pjc;Vl}x&13V*4=A!n<fGsIeH(V41@m*_EB3%+$m?;&1G!+Dv$R9yKwlG4>$oxZ# -UxV^D7^imp$(tV-UN~=$+P;vo-UGrVZr27b|mfpneA*a5!lx`Cde(|(q(k3uewM$U@KC1lyY6mlIJXY -$ut7Ot|z4Y)-ohzqgQk9q9J*YRgWYYa!dU%%2bz{k-2fg(0eF@jdl1Xp)c=YhhimOk_q#d9KZ8k<iZ{ -Al)&7|Mr|8#<7QW`30N?d`MQIbUqIzlDQm!=Qf7#vksn1Nlqfm}NEx?0Q=Kl#R8D8hsO_97lx#D-!3W -;ry2WQx0)m>!OU@`b*d4Zda7&hNY%iSO#vM&hwQvPJ?TG3XEATX6!tW%a(S3rB^giO}#SVq2ZNi74_k -5i5q$K5CZQMEITrkDR-})07uk15vyZS2l+mU!+Aog4Fs=JJ?+l!CKIc4>G@2&RU1Ryo%>sn0KGPirGk -LKX`>Vju8?zBUw6Yky=fqHk9J8pyrxtH5%T>2Ush8@OEb0kHrZ?ondj+<v$vC4%Kh2hS`fG!+1zZqL? -578+<DQ1f^ELGY(CT${$&1@6fxW1u!+1wTJ^?_V9|axXmE?!~Z>;Pote42WKe6g_Fs+7RV-j+1CW~+9 -3KBC-iXofm7F6s*htsycwdiR8EP)=$RCMe$U>8)|8s!goR=YM)~@(!_GnFEn-ihDp6A$Kh#NIs0hNWD -{p~xNX^HaTw%%~4B!7?z(R;3Mj3j07m9~CyS&Azn_>`WOz9yeLWbO+e+T9Y0==^Wsi+ovZomV3G;QdR -C({)~x8;=ms7Lca+23>v76%K5aO+Ls3IY#(Bl=lNqoTm3|F1oMOxH)*HGd}hV-7IUPuzjM-_%FnQ197 -e)Aq?hzYRMHPDSI>=)U?8+z79ndTJY8u)>@rPG3PfO<#+mb0>BwU7cgSjZ^C^tbMrEj=#Y|!r7vQLY5 -T|uAf(m<_J~cXN8304grCbhQG&Z5F|g|TBU9F_$zqL+?G%vH%w^d)WO@ZF?c_&+FUtE54_9Q^CG3ly2 -M3SxOZbzBGOXn(0~Q2FQYX{Itg8|K@8^)v<!2$xVay&Q;ip5P9lvJj$foBA#>F%P23@TH8z@dx=KXPR -BRMr(kjlu3O?(AyLU8EAE<M5218RiHp+L8jXs#ip1;M*yH6G2VU?e0|M~1ZjM_n05LG=iPp#zMk8eVO -=TfW*{?02$XdUz$kzN%q7Q4e0Y5y*r+ub7OF8wOqsXe6M3!4cYEXESy-SN+y9{pGhc73%ld_D*5wBIH -$cCDZze<i|q9zV6EL^RLE6^N6TxX+Y`g<gEaTte^a$EzB<=3;xZ5b_ZQDZ80$fzGg#!tOX8oHgOJRd0 -rJ8q^;`vz+??xX8`wRhss<ChF<<v1Si@#7-yrB1%S<Fh%gKi>oe~MBl9o-pk&tn-d8&|8M*2ty!iibe -w;}>Wfo)V>ryv(*0*vSxICP)Q)SUIl<P16OKUW+<o_16B-<PlLF)Nn&_m2_Z?qh2vUt#6mSe;m1?Y2A -<xXlLO&!gWfxM1CdbrRqz2Tfpp8JasF#dUHS*wd4W*45ejC+&=O`5SDA?PiY3&d0m;8W}**L}YMzKjc -3)8mRBsmh-e5#gcD%YMgR;*1ID%UnAl^qdvm1|o~yFy(7=1N<ud4qyi@8rGH*$LC@0&tlZ{3>sDhMqe -}i~-PuOiDT_`X&WlmX0#~48)77HVr#uLZ(=}O*tf*;ER`ykKysk(jZ0d^O)!8-_iB##nUIEaApM)RXX -qXny8wkW>-IB%R!x}gCGe6`J)LBP#RsnNm8?voMEnXR-4|Y?>#n!ilgzrVfbG^{7+wc-smh#N@$io(Q -n@83NuN^UBM>lBUgY)`q1SgeIgy)L+~O;+JRv;5M{i7Jl&K~El!$>tFGe6sRWThubGN>E5uP#@f@ibJ -(c()MjOn#1~o+?B7yX+tGDSbJY(t#GQEZO4ls6K?!m-VCfA$Fo5emG{1(4JNK3=eq};8=Ri+ZXxekmV -Wk#`&es5EMlYZ}+(9*+NhzjUqs`PvR5?thO3gY&l+XH(8T!FxciUGh61Os_s8RV-kZeI?OKYv8c<JTU -+Nhg-F`~t8NX?m2-2a}9uDd~V9C8yLf#Mq>IJW(9Wz=M-zlk~BfwPg9TvC&Uzq!*UTB^-j$qLmH~t4X -MFCejny#<FH{68NEd3W;bL+@*(@ASI%&m#5CjLROHqYNGTey|m<Yhsq*p58}RRn-b9{nV#exh9?HUco --5A-}F1WqgSUy1Sa!w67|M>C2x*d(HrTceClD$h2%yh;u~BE_{{mD{F{d{tMC-J>j_iBdrp5-@iC*T2 -SPk(frWW#TB8&shZkd~h9RBWtA@mnsY7^4fvp%E25YWZql0l<P?wR3FE(wcjS?!78uaBj3{NUk^p$_W -b-%J-M5h##B)x~%0!DlZ1({TbxztbghX|I$qir!6BBE?ilqS4DCItyqX&<sU<W#QxP&U=mxn<v+(zPG -<cZLdCX?0-#w?=kn^#J&e-L!nTk=;vrojIjZ7>d}`Sflsg_4o3>IzyzSlf(8owLxcHK0(b;==(t26Q| --RQ@jqQQ$U7-%7<15Bak7W(h@q=(h}z&b460RtM49s(~e6_pt)jsx=V}A4XerevTgM6PA$mf+Um-+b^ -7wBP(!Mvk~XYnDoPkTCODP0CU)HE!9_`Wx50r-!nZ3zO{JH#D@Mcre)@7;>({@NoNkuB!|llk4cnfa4 -zxC@PHBS?Zcn@ohB*y+f%rezvev7abLe{Yj@|=m7T2+N<>apzNP@l$-;M)G5eJ}*WR|S0`{~Vhi8I7p -Wo*M_Q~Y23uB5uDZO}P6`$HMbg2}ji&1QGICtYm%5L1QmaSo<oL#rgmp5`G$wBZGi<>_=frbew7Gj&Z -xWU5t=a{ax%aKjN&um4ROjV()*A4`<J>~Bnyx^AAx66U<I2@$U#GceYsw|!{{maGHdR;Wt#t4oSGASY -bMZ?tX1L6>i1Qo;}GPr0;MPU_W+AoB)WI<E%B->mN>=Vl%JFJ$%ZaClY<J}7~Ou=w>ga%gp9fX*BiZ; -W5t;55)izJJ#h$EwpAc=J<>!lW;M2>Xe$W{4pjxnYg&Wufhv+7`K+A!wA&4aT+zpVjlF>&2fa5gTXn{ -FtajY!_%N^Y(*^V$B+0k@nN4eIWvP4-X?StvEYU*9Hao&KjtE4#cd(lpUriJFlkfs8Fd5lxmwspQnoi -Zuq7(FnTqu!U>l;#xl||5{~26MA>nfn?8>mDPMfR(>1=n3cE&nAf#09^@_6iY3Z7%RRpF<=W5nN0b@r -?U~B>=@6v0;c-Y!tmJY+H0>{rd+LBM<nJ!%Mo&b(xp(_L1Lxe0n<TcIcstD~)c8?YBuu9r}wBeNW@<V -H(P5BHe8?J`xm8PYN;(iU-xQJo@#+#%XT(r(ek{YZqynsBXGJ>Z9%@UN^2@6bG70*3wTr`e^k&u3u2A -42<<s|qxL+B-DwzBE`3z+D41;*5{b)M4mZO#z+i%sgW6xX!!L#xIlgiL^WOVPFTxO0U0jgIX<CPV*@S -*I&)G`f1pPr04T=_@&$W3+p2lpkf_4>H4~!|!w@QBl!j@ra8cUC{43t1mC7>oAAqH$|K`jjrBIk)#jp -U@h!KyxX}&WEVZ7QSn=mUG(HPJj=v(H$0Pl2Y&AIwMu_BZAgrdT0g~ywRPz5R*|*Q)XQXVFOBWJ9Cu| -eHTtr>gn1djy&Q*%3q{OJd{;>Rv8bJwUw~4Q5tnJ%kLecQQJ=RY;k`Y2C%Y;&DvF|Knf1Glvgb18krU -~CmTEDOqF~aOz9ub<GOW8%sLGFuQfBK`^${dJ-c!>EQh<J^4zH|N2Do}cLyh}=^41yzT0tz@xA9Gg_Y -%PMnp*v?gD#_xH5-p7w^h#8L786*{^V4Sb43VQGjJQfjo!dr1!5eKQwbB203UP|gdh*Qj>_Yv5ROtBS -1+5hnc&)S+QfkQ+;3UC=RJRXn2>h^X@&(U5vC**VqZGzQI0uX?cc<ZLiYTItr#BC2$MpxU!b*ce-~Ki -Dy9X@H`!enib8Wj?2TLGJ<ah$ox^c;TbpC99Kz;y891%WrL6-ZZLeYood_$6J0^ZPxMOmAW74FoaOW` -kXor3$WPq<Z-quRDaGLoh1_MQVMZZ%I{aB;iNIZ`xVw-7}5E_V>O3!Q7#hMb%u8F}VHAn!|_=l=-_XM -j8#ah7K6D49%B6A4!x0jGrLicMEnjP1g<CkbegG4nj68f_1X*=P@8Ev{2LBR)BskaC_#T1v^e6Tl@4l -pEB76((+9DK!uAy2@#5u+gqS|#G6X>3x`1FuFtPjL|rH5Ee>)9%d$`BXOB)d6|k`I#V9z_^7>)9=#WG -8`u|?xzww?=7&066!m@-LUB&_NmkTeBs=u!i#vuMAYYO+7Jr0q3ndXXlsD;Z<gIk8~v@byh+&2{SrY6 -O_u8LDQ&CoVd2~fOWbkGun$C8kWyN~-JG%(afVRyeJJpgfFH~GA;9-#Y+zZ7bB|DE)<ETg|J&&Qm+Ak -P=>He#{}<^0=js2g`;BQ{*V<CBCL4vy+u?HxFk4K4MsjZ%Hj?kbcwQ&no)M=cOJ|d$*2**(R<9drmOi -jZH74b-F+QGRRN%wG&3Ks^de@kJN?pSKs&vg7AL*o7vaOQNA-raQAZg4}hW6a=apJ^odJZ^YlIn2>sq -`xb8LI44B2F3+L`mjbkNB*UWp^`M4bYcYue*ain`1fm3v}>4j@h%StfNDPlJhu;TRBpwGU<hcnw7qId -Zo0nSw8g^lx$2RKKNq9rM7Lg0rmCxHiF!o?OvD)tR;W`GmaQ)L(xtJiyd7+gb141Iu5;>nP6m<%t}wI -Imr;*e1!iDCVVLR2uL#>f9x>fD5@E4;<+}Md}?uA+bZ55CEIa_0P9l1S^fQ5c6BrtyLPvG@QW`S<(u# -(I<462mZ<Lqwa|p8gX~@(YDuVDIZ;h?py19Zn)WZ=<Y~vn5$xyj8fmSsn*J;mZb<B@rhk8^%O~zLY;+ -2|W8>apRU%FqaUBudOp%i8cuJBk;2fn0GEhBmjf<h3K*e%}@T#3llLJ|)L>vb9&`eg%YA%_CVLJWf`! -le=o$b+B2O4<fCRr!M9g%bIpis-uO@nYsAe>dUP<0W(jaB46BWy>gy5sa1zeU2+!txIEtt@IcmAWUQs -tH?mN-={wBZ9|*;da&%#^TfUxZhx9>ypu++(O;eN*~j8O2mSN<{+0h2N}FMKzty(MY=82A{9kiq_64w -Fy3{{h;=NsLmiu6qSi4YIdkKbB&jJG&k$cIZ*lrVb&>4abGO?e`=N#mI6);4Dhk$-9aFK6H1axf7^1L -liM#OETN4^rrbE4ma@UJ--HFJXd)y)ti^cvYw|E@Sbc=`HOFZb(Fj%ZemJZNW;bh-x+4d%`lN?d&jC7 -Q)nsSNJO=bA1R$R}4T8S@r98)4Hr{c-%c7kv(lr)|WhH(RwyM5u`Q|=k=ayOdrR%)yK)*U!_dV-cGl; -fkk+>Kc7u}m<_C?F%$b}JSzTZv9;qa~cqOE|^rSb!V$H>3SBqo@71LYESATz}7#Y=ckd$ZV+z5U)r0o -1hKaKp6ef2e4Xde4uxbK%-Rl;V-YW)M&*JrlqAiT7+w<Y4UT<VT`XB4ujr6ff`cCmS#kA!Qr+JW;GPA -1;U^K;4u4dsF}llYW%$LTnsR}o`xP;rPM$ig&BlOQ==7OTqJW~GwQZdTo+Tb6){~tgun(jA>zHaf18A -o3y4bMc!Qoa(?@Cp^^xX4qfk<V%{)Zo2ce`1ZR|GE{0U~^S@rvSSP>Y;Dp><VQ7aOZmQd7-L_GuQMI& -Mi>NldkjQT8MN*(GpTPbSHOO_HDL$H*zQh=0Fj3h&n+0#a&+adk%ZL;{*bu1u3Ii!{mEg+$^$;YdZXa -Rwq)?G+y0i}2fsI*Ckc}g=*<0+s3RzSonh^s6gb6_i`xEXxL0)ipuoKVz-j0<PMm~__4Fy}|Kc#4z`> -80fZHGU;4A1I4r?_y%*Q{z=WRvsSaZ!6|+GwR8xhlOB~QLhp8PNH4|#EX^?7T=su)Tc3H1%$;McBS&! -i_=Ez55Iw_y9Wo@qLc5sm4PV9cQPhY&Si{2Uc{Jac|K!e<z&hP$w^GZC{JOGAjdH#MIOnRba@D4GUQ0 -c<jQ)+#LNDSvCEflVNWc`Ki}ehT|t%^k8dl>pEDj?54nNy*uKaIZgD@pAn#^8Hb3$<#$z`lZ(%(4NAh -OIW1l2fFdkbQc@5+7iDuc(csvUyXEVN$&T|=$XR~B0<C~E;GQJi035>_pU^$xch>;`@WITNUCY15`T# -T$`JU%WXx27xZhhctTJblrnk@0vfSpJalI9!(N7>~yT<+m7*55maX8IKRt$<Hw!@5IWFGQJr3jf}@r= -W;RQHz6-F{!!#}8J~;%LdI`JK85kykvB6QXGU^7<MB3~Jc{vnJ54q)z5)4g#&1Dh$9Oz*DPLN^@)`MN -#>>cm!}w<8Pcpt0`Fh6Vwt`&Eczm{7-of}#<hL?D68R?>Pam|}#Q13B%NUQZPRgqoACG)K;}N1;&S1Q -Nd@AD+s#_KqpN{+##%CZO%lKU6qZp4*1j><&Uxj=y<BO3ejITic=lQHGke3<%DDs~(ehcyqjNgj<0mg -4femCP0+(h0spDqtk%mthc=XmOR4<RAM33F```hV(TmJW25F&&ZVgn~{c(^<@P(n04Drjx>SGC-$_>D -=fJjkYZ){a$TLBv>5CEJiS=2GHrnbbOgkH0bD<&e=59$be4Uy;SEk(}@S2pP9}Preg%1@0re<Oh*8nM -yB&3)5!&$Gfd|Zreg=4Z<tOw(^&;Nr<hJrn!5o4%_B_njx={m1e(=M(~{<Hl0fryra2+alkXfO7ji!Y -*C+6Bl5?QBLL+Cb^{h({$fjF%)QMF(lpIrM+CUO3v>FS{W2;3!e7f^TaPI6`5hjmZtHN}=7gy~%+!bD -3%yFx97`xa38#L24g!h=d&p98)C*air;am+)lbwIr<e3i7tP1auQ}UIf&ndaks$cm&41#A$;UFUWobO -ups?%qy?+Kx_S)s$AxP6xL{bH?4FARVQ-$`YETs3y8n_y-<0w&4B_=I@?PMA5b2R?|gT9`abxNFNDcM -*R&N*Ibs2#5K+X0kTWIf{+2K+k!Gcm2-6xZI;>=D~afc2)qd2UMfSo4}Hfcmt$INB|qR36crK9J+C*m -7>rA8|s`2Y$URg&M`P3!!h0w?AO)t#qU)21Johl8607_N>S<lq~I_?Unl4f!GNEIUf=%bNgqbq$qLC+ -2$<HvthgW{P+|-4JnGF*W;4|?`?5np9rr4z_h{ToWu2$MR)k@BL9y}Ts&NGiUb%ktWmSRB_`bTll5Y1 -^G|=^=L!wqW?jrKe>j+2d<mdm6)AN7x#^Gw8-?rbXrZ|5H`2#8|L!M{k1xB_4VecA-JcK&R@N355n>H -R?Aa6{dSn1O^1Z2*LYmttZe(%Gv7{2!r7vq1)_+NVI_rBu1((kq6n9}e4#XibmaiaX=YWK<E=V6BGGF -q#K55n-IkUl_~aO(rK`ZKNGKwN7;?Zea;AH=s%<>t)_KZ3%J5<1!)S+r*PEty5gq+7K3l4?yTu8Gt%Y -6ahYczRK8r!4YAYd&#@tW}x1WNB2C3$dTe=-Ut>Yk{bj?J|^zp0O0r%7UoXIRCsvCFw_Jps6a^S0=wx -l=^Z-)Wsc=cf6n|n@TV0#IVwfL1J*}MXeZMm0&vS8fBH<p)+lIfVlK|<O$ex_BKm9ahz0pFaD3Y;PS% -@EE#AxNeZc)3DddbxV#|wl>qNsmvDUTNFnPmMQXm6CcQMfPDhk|6mc~q9W1#%kUxD;Q7o0(C_H)wG3) -=lqP&Zz{1Q$(L!^i4S;S)|<s+A$^gfV;(_&AIau0~IzC2RF6Sg$I38&ezq`8vDvgvXgTX}Y$7LWCUOF -|jTdw||!W|XzT^mJj>%t*O%3p&R4k(7u(jiC~{^hru?dy+1aI{m5=BVGQ8YTfbe3$gv%7xe7jS$WyR4 -CHwjec{PA1`DbY)In68HijOAvLqbP-}5^vBdwO0OV+AFsIQlG`g;&77}4zibS;`STN2(YN~3RKL%kOC -(;5Wd1|gxr5r%f=Y(elVl)V0Q&8TWVbfX_TENC_n(}in9LXF}pR1IvUTl&XF)1)CVmIX0z-yO|X;Hzf -ol!(`uVHP#~0)3QUeh71Ce}~5@y^p@JcEE*2fcTf^PAYY*b{prVdELy$wU+M--J3pwNrL$dLNCb&Hqk -^(8uY>aG&l6+>?zlfX9di!WSU>ibi4Jp6wM*xE`c9VczQJ7hrLU~b$%K}Z3xuHQAo_X`_YqCqq+GpW* -+J`&!Oh&s`($8dBY6V{AOw%ubSUK3QO}O7$n`#HnxX?^-5-4i3nBgEg40#G7>DgV6Nz=zn>lS^7FqRJ -s1>lKRdUz*a}j9J9RQ;6s_k!(zi02m55QJnBbJRKp8?nHz*$?8A<mWP4o>ny!aDOm-$RpbAG}1S(Oj* -h+~U6%BXSr>-YW`;euidDM3FIj)@bLh>v3ke?Gl|uPhA)3%T4vZzbXlZb3({$FXOi@QAY#@jGr3YNpF -f7CcM~R_Hk?2@f8|)yp@{q=TIl_xYmRczvT6c=2Sm*b_%SJ#geRD92nGCg+Ntp^xD<&(Mb==k%bPmN4 -Ksivu42oTSPy*AWYhi1fQi&a_Gx6VbaDd{oqgmO{~z+)Gr)MO$H9^osi&Ji?wgAXHjUf&F*FX#fjjF= -l-!=rbDn<y7`_$#irEocvyqCyHxt^&XvlYL)g`O3y3KfyptaAW}X#iIv*kmePGRQe$xh(&UP^#vD)7@ -6z_qF;)8F1K((dD-fa|jvv0E$ZcRY0MDwI7a-CYdKr{cxo}RKsmhq*+Jv#VsfZ`3$*FLh?D9ja45jCN -)`gUw_jUG>{I;xt1P_t?9tBz%^57b}iWpGj?&Yd)Q33a&JHLH;io^Q`;s)&eWatl<V)g{c4k%RDLZS3 -R<H|&khWASd+0A#51Uw0dCoQe`DBFu8)w=2|oaC1UgJX6)`}g!th8QE1UTj?PHtI-t-l)Lg!PoDI?;y -`{(6vt`LX4(o2hQJ#$FN)<$?>YeZOovN8sGuWH#=hE;j1Z-DwG{@5H8)%XcW%<&5}@Eq?ga$=>_gT)u -R97NfZH{JZT7Rg#_sXJSX}|o7%aHeGnHfOo%xxR0RiMg7?d3|A3|kyT+z4bihk!_*PMN#}0r}IQ%SI@ -Rj^dF6Av^xuHLvAWWj*hC|jwnT4!Rllao|w+wdIIat0O;yff?zWz>kf&R3By?$NekB!AetMs){<@fkQ -_}cX)KU3*<gYkh2JQJIeyi7?qZ4mYG*xP3qeOinSZN}m@A9~hX<LqIQ4pNNX$4xC}z0M$p#GR1dr>NR -}d($`3K0J+us4qKA-?sOg_z=E)p=|`~0l0hpI?ge3H`2DeDm7{$j0)K@zhBTpIQ|L8m{_D>y?*n4Xh) -;j9?n`ssQparVJvIWm*JFHiO2^d$boc=^k=+En^X=a$v$`#u0>y726DF{D6YEre4u`FH3COK055H(k8 -m`aO4syFA)>*w!Q9tcVU5aUsGb$(s0>qSHW*>VGF%n}BV6}270C$}D888e7GD@Kw`%nFy`teO)XXVJf -vo+SpBZ`$&6NGFf&7FHNC?`Lzy69_ctFDr=f?9Ry3i;t#G}^iQZ3tcjXQy-H*i}YuNt!*rpY5Xw5q=B -W)0g>Phl4dAaO_NU^BQ5k87vX1Yjm6Ne7_6zLsSoZf{8!O)-~!5!q!@c2v54qaR-OUlU~|xV@di-+fp -8Tn&C6gm{He>1gLMOPdlgpZk4~P=C@j`i-xlfjP>o)Vl6MnW2*7<Ge<{%Qq?Ro1D_tK)m~GH0d`VpqQ -c{bygfV0`amw8Lt@|<(}6dcnMf{E-9_`!2?%AIMS<BpMy?~vTKlP1%kwYX;N@^^F33-!J=!MzQ3#}8( -{1b@gj_km0C#5SEdTH-U?#*m8sSokU}>?7Dic{&Qr-683oFdO+WZ>T^Ez&We>7<V5s1OB)9qCaf@W>T -PksQt%1tmAYT|T&I`fY>}H|r4FdvjAHv;q7M&5M4caJ+a$riJGpM2u!;e5<aHXcgAK8-g3e+RVQDMkJ -gz_pkP<-u!=9p^S^iF~C&e!yXx!@WK(1Rm%S|C_Ff>8Ak+K2I46e|`4PV&WPlbA<BOtX*$qbeccpnhX -8o_3TD?4`L$Bd5P-I@oXe8{`L;fxi5tnkZbsq87VL)_A-#iPt%Nuz;QVoXS2XC@{p)V&{o!d~z!Nsj} -pJ8>Vo7_bJp|MGF5sjHNKSt@{*?)O1c^0;Vub!_#G_JH8=&zsVkV!jq!0?NbyC(xy?5M&ZZzf`pO_TO -nM>LGK!kwb>q1hxOTx^*9YekZLGQ@?$ak;!YsgMV%UBR=IB<hPlv+Ny6bizQ<&CSMRK&Le=IFw4Ef?L -IyS7&oYR<!NKxH3f7rp4k{7v(MwBWkS|_mPH0=d+XW-`^dTtGsEja4mso<K9WW)d>F@Ey2@~dVxuP$} -prM^zSbEXVIZOU!sr#f>;4;LYZQ6YvXXrhscdkQNDgv~@1{#GVI@VJn5{I&qdHoVcT>H%R9P|r#oW5z -*d3JaMOL+iIgtmtE3`Q}?RJ@k-*O!e4EArhm<bfFSrlk}Nsc9<c$ACQGu45H;gE)>ncN6;eL{!B9+%P -$S-KO`U_3p5rtX|kpvCMy2x3mlFr`zu9g#DC#U-#HgLRu&6Ckw@X>fOq*pPtEcXX&myFYKqCX&n3MX{ -IZ$_E;RB(jE2_Ju|1KkD+eSRE5fu-OlOFdIUMfyMhT*E2|(yYjI~-Iww$o<KYihxl?43v_HF3gwVw+Q -XxgC%Tg2rT0hOBGhrp-f<XmlZ@q>J1k40Mcp~IK=TflZow;tXFPg>^sWgqf<=?vv<oUDRX=BqxPr9y* -f163J0{`~>ui)Pr5&t%~BmV6Y5B}}V-Q(YWM)7Zty76xZwZp%)Dir@VAMtMww#UC6^y~PygS_x>4_+< -)ttZ-=ZlVoix27nDe@o%-aJ*Y<-Y~Qs{%sOOLB+rQrXBvR3YCZWw{LdFzumb}w|$^D{w)W+suq0frt5 -c>^=JT7Q;n>}LV%H0t4?1wot`wSOTzXdiv!(m<cL-iIQ<*f|ANyeI4$FVxKaN#fVcq`yaxJ@0peCKXJ -S$DDYSuI0pbpZrq~-0xAuyFxT~3WT>|3PwgbeS-5wBE7t|#n?u`F!fVlR2^6v)3y$Q2Ye(EEJ>WRJbK -L?0Q#Rma#YdZqs&R~GJGrRzCXHZ<I8UJ?xabMn`TmcXlbV80S#bY|P?E!IP`;mVV5cj^NIGDt1cwGbH -=1}uGZ}U!oxUYTW#t8kd2E_f2u1a?Uh<nY`R|3S{w&m{z#69HycL3sU+0qUWx5Zp3UI7r-vE?cNanC> -1H6ZT!8`=TlGH6#E8oLp3k3}d7baWIEcOu>j!Id@Wf&!q`Y5g^T+y^JJLFSbJa;H*&+%aANxtkb3Ze{ -W0d}j!BofIFpX(hcVbR@K?fH8(98!#JuRFK^8;=2$d7bh4DBX>H($VL6}Zv9{MO=CDj?zJ2u_Zkk7+l -NEs_T&(`{v09~?<I8skvsncz9!!pB6s?enC7d3$Q|&c2O_t`3nG`cpejV}dWwMChC*O&a&!Tadxtkf? -i??OT-tD|pi%L^0+Ac}s}Q*@mpMf4k19m&H!4K#XKskx<0?dM-IXA6S!!5E{}e*xzIVHO2)545A#(3- -@xE`wVR11#<DunvPEZ&!ZkSwoyE-No5E^#@WN|!Z@f2*^aI`%zf_7u^XuY=*QQn(1z##tjfm7EZH#qK -oJgV9SI4;h+;@iK)do}Z;(A(LBL|*8gQ9Q`zM=KJhCO}w41?}cX=8~@GM|i;{T4*;v>gApveMZ+$PrC -ZbCGKG4hZoY21vY!wEYK|`*Fbq4)0gLatm+dnBd>sutN3lSq2PW>A7+yi%CNsl48<lSq;yuKt~N0W4P -3oJp%tnU4WL0+_RtbOfS9FYS5Q3rdO3K>3s-O1t&$A--1J}Bl@cerQi4mxK10Ids+%_Oop0aL9tww=S -`i^{zRj~?V4X&1N7;guX2c67@(Xe7c8RI<?r@?n$7MDBuB3SSMr}?)&5D`0<<kof!H3YLbzF!3&HW&T -H{Pb+?vUevEneG7Bto0FX7>r%C!&g}s2#|l^JMTT79VoGPS${nszpN~LT{Q-gx9v}%WNI)kicA3sqm- -wU21)?55pkzWf9bx`zA?~ACB;B(ZnRpf-Fs<_zLlCfy7#s6t6CHGFU1R7eUf{G2oHXwb78`IC|UuGx6 -z4U)S%Ih~I|dIPorh`2eclDecmIkoIY}^34xOzy%{qyuR$Yw)QdGOs~NG5YJyO9j)Go>;8S%EPOpj`r -a&kiO+}j6!2C>o!lx>vBec9dPyjwyqZ5PdQARY!V7z%0n#%Nk1*4t%Lk>8Oj13+ps+6t1g>w)NqVcbN -@&vyHG6#M0u0Onu7EJbahCCYK<_y+K05xRbipc}mHy1$_L+E#yFEH{6U;m=;9j6KBpEO5B0S69seBVz -8;hbQ(>+o=p>9oRWGKKnlX86oX<~XVE>2xG={MI32@~gn%2|jAC1<1>0Wnrwx5D^9r&J4*dOCkms@;% -0sU?^{t?IFdDxrtG=Pp_lbcb+&5c3oE-{m^2XaN*wN79Z(yK>x*LgiRU^eUlp;-^cn^0cVaYd=Kngrc -{gA7=SY#7?R7JCF&<T=_aK*RNhJKmQtCx3|mV($zem&4XL+W4*iZB=8O2L^_Q@533S%a{prL>FgzJFL -S?831gj!DJ&vR1D!6&zpSU0CUZ+qGD|V2l+K`pZWJW{<d`1>sm*fyGCq)IPtN)gttP#LS)YtJT@6?OG -yVkK@F57iAKsvwHfchxzU*nt|7nwgbJ=AOmOF@1<gA5I-pj$o&Nke&KX*DQ?nmfkE9g0tNy|at@1X^7 -PLQm>5c$*?9PlV&j&)N0FGL&!<HTRUD~(c1&mdKre}U2aL2Brfg{)6hKo3NVY0#HGNHaYoH3yeUX}T+ -m*_na6T@Hvzf+r^QP_wl%`xla2ImWdx36~UcHUP5}pL3_HX80u3>NkpQc)PdS6N)vVT3?F&Ka(4%%F! -$UeVKqYGwYbOGO7-;uTBTvLWUo*A?kE~)GE=5nfK&&MR|ud)>Xm&(#P@_>zLF*4Aanj9hfKMi_^!1s& -Ie#oP{I5;pmcS&VaUjq~QB8MA)KF`bdc=3}(-|LDwVyl%_VPSgor@v&;-apNl~OQIhsIJ#*Rnsxf^FP -yRRox_-2F3$xbr_+@o0;NE*Q;>IJr3jzJ^dFXoO?W5TeX*Aw%GnK9J9poGgq7*^zym{Yu8+MQb<onUR -n67TVc?0p_C1L5fX%Bsk6QX&j39k}&gUtg?3g7MhK2AY=of#VGtUU1?YbNmaY6|H2;ETHQ;B#ycBTf~ -d;fXnk*O%_Ap}RwoL5Mt!9c$GBkhr=esaA;?7KAy8jg51h{9vm4LC@dd@*wFJLTM2_N3s`Z))43ybT6 -XOEbX@>oED^ylJv>7p#3u2V}opXl*MG-0M}=7aw<NA?dJ@Vho!0*6GG`R1#$V0%D<&iT}~n4p+45dol -qiHg36V)`t~GTS^NkrO>SX{WcZYz(R3qU1)Ty`&z%$oD8jkZ0#1|^#W`HwJ5LQrJ~oeUM4y163JxI@g -$>Waa|`wS&%daipQG4mO-QJmSaA_;(AkyPR?sCw3tuvvDFwejZG%}8KV83bp+@IZZ7TU1TQ;-)od(nK -3ndp2K0-_f3c4cREI`1BXrw+wG$7Ryr!cM9s?inCl(g?pE6yhIC7>qp8dq!w{d=gsk1G;X8r^zVsA?X -J=9>88r1H<40d&>Fr8k{BHK2MpsV2k^BY_2~<L7^{Tk0!6IoI7SEtsSz^w~I9pyW3+AM!`zeIJ}+#YL -)%+tB&)*R2m+4`ncqzHYtm9%nz<I@kMkYj*n?m;PGz;rrHO=DOdvZj4h}_VM?v_l4@q=&%fjcVE%>t> -<<3zV!&Kl<xPf`!SXKed{l)X^TSNx2}S+biZ$n4YK$9);{cg>r&aL-2>NY-$8Qlf$PHth(gm8rOOAdU -Cyo_xZa=E>4EF0pH+eSfsT9<Lv!%?_knM-Rx&k8pwC;=4OBt?_%9edK63pIPM`F<4!A3!*P1*XnlxQ- -&^80la{cCG)(Zsgp+#8%$`(JrTS36YaJD_X7p5#mQ<dN&C&Cn(!V<|<4t^#DWuc$^V2WE7X5GNY@L2p -5Ga;m65e^VhLr{j}V{CXL7UwJM0s4?Fw_rs+-{uUK_pn~-KBl99G@=x^hO;3a-#bK5XuffstfNECPxZ -UZ6pkvsi#OxxSpJY`m8ZM}ofFGDK?9>1xpsuRiy0$S&DT)Sz&iPfL@Ee=f>i5@?1c4q5Hg|O4Gif0mO -KO|uz@j!d1W{!P_)8OY^x6;a)8my_Xz{&iLvL?=_p1}@i#*rN@oej7eLOpiT+B2<VV;6T4lHltTOz2` -hOJ5#(HBKZ{QK5Lp~FOhY_K$Z{Od}#3+B*(Il3cWXOBDNvyXUx&|sQS<{7g%*g6xRNpQldxFq>R7a;6 --X2`UmBZF_5g<e*Rvz1R^r5VdOFH?Dm%EA$%7OgO-CY^ccKg{bjc8X@(Y>qXcXyjS>NL44r=@RW+YNI -xHm<y`D?36~vH|a`OA$j66iy01ESHb$5LUb3X!^dmtILcDxo<93f~_EDU1eL`p^|tImTLXx8VUY7mPY -B?SR%&3MAcrpb^<~Cl0c4MVy*Hs-|5CLu}Io#hF=mWe-z(E*_E!%AoTF@4P8Z3PFvQ6F3My@e3u3(a- -o+2`OokF=U?ME4W(x|CF2?G$!RpFlR2Hs=~7Pb<@8ZbU*+@wr;VJpaH@-AG?LR%oKE4?%IQK*mvVX!r -;l?Q9nWYVPW?Ik;RZ&3=Jv=0MuRzx;&ck9H*>m_(+W<X;B-5uhdKR%(=(j5aoTGlqt|kJGp8Ax7I0d| ->4ThZ;dC3PJ2~CQ>4%(t#c4CA7dQ>Po>2p*qd2{h)4819!Kt0o3Qjk1x`oqioW8^9NlyRDsgCFGHJrw -CDsXxSr>i)<m(zzieU8%|oF3%#6sHq-IjX;UUXD9CJsH>Dyu06);RxzRNO&fr87CO6e}U1CKix&9Uwm -!X=H5R|$eG1RaVV1vU*k{>Y3#$xXP$<--;~N|7W@?fO(UsfIvGvkxgV-}9J!uYNs`;|G;%YskVG<@n5 -nJ+f0M~__?ry=6uIqX^S@EV0C8Y{2Di>?{zs_(SgJpk>kyJcV-0gkPVr|ZHi)SW!dVReJKXv=lR~nh3 -;o$(TLd#zcOFnX=ybGcB2Kadz9KNg-%Q~1c|25g0oW&Q`*v`fNAkHknPh@Gi{x_kbg;V^bevS*+n-GE -$D_;AqsCv2uNqG^UTS>Qc(CwRyW^pTuZF9JgZ^ZKe@-yV<}TFuVeCD6sStCtRn)=W0`M=Jro6pLD%ke -cONRItc-fdo<LRx=r0HVes^O{rtNy9}sO~|ogvra7PcCu`R5tuZ8Is{=KxQ@kSpFxE&CVXn6e%DsCN4 -5&Tb6D4Vw+naZZ2HWPCYwIEJWozn_W~5OwJ|FB8covXFm0Brn7(+yvgp!!!k(DbY!{9*|yl>%yhUjY- -VNwRYJHJ7W$8Vqo3#>`UUP+qhII`x<@x;UZ&`DWM@);raSUD2l<lgbQHN&kYBd!0-Kjcs*|ab3k#^`J -SV4_BKm{w(GA)|J7`YbX?%ROe*OWv9)Ur@AwBh>VZC~XNA&3%*{}bAfrG9YY#1_hSk&-qM?_yYGG^51 -F=J!LjgOl!@%kI$CrwV6GWEurjHYRc=A`K}1k21>*5sRKr_7l<FEwrcg7jN%y=~#`cPz@tT%46{%UP0 -}w{%(l@`6J9osJ^Wxnkw2)py;!X6?H5B(czuv?@<baTI3RuymJ$EM-C2J3tC-WDLkeK9zR|l>-rEW;y -5^XpMDHdj^`05E97c(F%2E9{hRRQB6^vEKtX0bYqJ3a5l)EiQ4MQ&Rl5!Vo4nQq0VTqV}e+*b_ClK18 -rptv<0!zwhlwI0*9%}rg}Nl&*ju^E~KakxJ=qwvepRO8*Ce$w2l-&y*I%BnKbn)s1F{$&^(WtWP-aqa -u>IUwI`6)F6Mt8t%Z5uGLy!Zg=v7$oYa3b$9A}ohKgo(_{(>@U_Ook6AMix^L07s7Ev|YTn7HKxMR97 -b`Ba6wpeJV5K?ZS{^e8qEM=KAWHp~g)3jk;Vw;L>f`LRsUyubV2f2>s9!f%%J5JvDnb~Dd70@`M1hGE -ALF3|R=h95$gso>DO=rjQ9`7#i0&pQx*(jj7wFJ^?fDr89Hj9@p^F1FZORZW`%w)M&j(W?UcX;D|MZP -+hyUi=#6TzQUUOo=D3Crn1ntNEc{vGnsG2dd{=}_aO=3iGS$nGXT#=|&7^~Xs|crnk_E9C~}1;*3cPu -0I0{=xEGNmF{|de>EW*Z%|Iq10yogW*kdhi9iHhW@Sq`wlt^KtH;wNow8n_^A3f;U9?qBI>J+tfDa=% -O#7cu;kQI>>U4bWYQJOyAVRN@ffrEUC7O`Ra`-(($-0qy!~%4PZ%pZ9f66w%~55iyMCghe>eP!f6I9* -m`7`(gZiHBZX=d;8;<J#KO#TvL&~Q4pV=W5s{fvPig{f~<s_Q6x4E=$GSE@7t(}x~UteRr%J1sqi#C{ -yVwo<dYO%}s#(I_C)%%YlV;tM7J{NUSqN@L%_CAM}5vy&i$FhSukNRMsy_=otIH+2U4Re#-DUW<O%?M -@lEuCt>)jha!i=L@fmnmEw%GJ$1nL3QCH*s|@t~PRYZ?0|(Vd_Y(wsUnqt~PLWf3Dsh%+v!^|G0Xf8h -#K{U&GZ~xq7e~ULaE&)bO}^2v-;Dn0l3(A6%`DXN_Eaml{8=zQom$T&-|*YXDOx)4K1V;}RTiU|Gzke -Vp3rC6XBUGeAkVA5mI?!<m|Ao)+j;Ze!>lAyeo)s}SS>Z7%2I4dw&-w~R`_O8Eaq>aJrbN$y%cg!-S- -&bP_#{EDWtL#$=jF?E46KOb0s{HH-V@bxGDKB3yAq$EH5O^gM<(4rweB|Sh#ZitOtkP-kHXP_dc%gD` -uA7r?F75sEyg9H$rPKP3>BLQwX{6GFPboz^S|8+L&{3k%kT<Nc@i@)|ZO1%CwSNZ4d{vNMCpR4>+-5U -P8v;Tj<uXCB^{#Q$Y#`AZzzjhL!@%;H*<)23a{@K4@OF#aF!=Jax+w7{7%+uXoeYNTJq`RXIeMrsyD= -xXGw5<Hz-&9m?kTzD`cmJjb9{la*haP_9(Z?SD-4nlm@~JIPKlAK!e|Y|dtuMax^0rrA{p0pOz4rQ!H -+JsYy=U*6Z@vA_yVW)O_8)lfU~S!@!|&H0IeM(&_=yib{OIFPPJVjov(Nwh#p%W`zxw){Z~yY0-1NQc -hab=U)O_}@fBX5DmUFG=FI>EIxlQ?}7ihX)fVrv#n*Z+f|96M~Z(ktm-u!<={^NddkXL;e1Zu69`r!_ -0e3H_8EOB24_5B^xn>wf;=%9YEgZj4})c9njxB86^YCKYbW9n-7a3_9-O<ikTkXMjhxN@GDDdrUxpnh -7B%`toNQd^d2Daa{wET;wwxIbWS%`6g4Sz_J_TS}qbX?N>0J?0%r2A?yR*rpY(VlLCjJQ(xMr7K8dh# -5wiR^t8hFD|~fxTF{cbiVf%-+NDSxSt=4=*r8>A>(6Xi&Kg#V00EeB0gn7F^tz>P?wT|sDg&*;)-H$M -POK$o13fC1+22$SK95J#&ftcb2EIne-lM;-JQ(>aU|@$hRW7=^1+0y3FJ~!9FGo%v9o6!JUvs)%s1E^ -jzWhaufUL>=`6^~wK*mmh8Iyw4!Y}r_VV&=*#@!DP-wRm7;LL-Sxzx?alX29l2(8UG|z#IGh`MRGVNe -78{FWkI%MdW4)z?j%xpuBqi{L6VBQQHf_p<INSOe6oDP(b1n&RL!o`LxaDruM$f1#O>*slj*KnuP=2) -Fqutc@f(Y(keieAQKdFC=y7Kz!A`n&>2dLB)dYQbY(=oGuMz<(Zlke64mm)6DVM;4#ei&T%zN3!UeT@ -hg`&+1Hd1e9Jrs7LUU%y;j|Wfc~Pj>3FHZe~GtzRl4oou2YrViTeG@<c;cVYbasm}9W3YxVdWL)SVy` -(a~g_zs|pX)MO_S-tv8T4jd{#(ZWa5B@G+4zVym>0=BaUq_4qc^QFRQLb%qCTQm871%(=@{79lXJu}l -Xe+X3X4wpxIU=NJ#8_vMW9;I*g0Z%O6(dx~9pug<mlzsY%ySeLEVmVis(nv5HplY3f=rr8P`2P=^qtN -^5y}f{LVItziu9CDb!!n_+jGD?aiLdxkm?l-^M7TYn2WMhBxX9iw688$uX3d6<#xKrKQ(=<UVHo1DZj -IAR201J7@S2IwY1dfqvN|SpAo}G7&3V(P>MQ)(AoZw5s=3G{KA#!F}m(5TAkf>pC{eOpJRy=3%tk>ZC -e2?RbGz4w%jhRzV6q<TMVMcg((vvnw1H~q6#z3l;yVNg?vkJD6f4(-SyDWg&rYu=b7g{v?k{5KiADjd -aNbn&9>9GBBnD*oV*bGr=o@Pp^#QDggy*As-lHOdCTqjwnb_?yf8bjNL(mhKVghLdoj6+ANn2ETSt0l -2b10tf=KVV`i79|Ap7TuY^~}U10nChXS~Sl9|rylFLhXdE$KhLk3AwIJQm%ce}|x5{u_L^ayy!Sfux@ -pLi#}%{ZfNSzX_mrL{#@19Wrt70X-QY_9T6?Lm>QMqK^x7_%~`Bd~h*i4fKKNK2S>n!3~($H9;B@1S! -*m2a@m!dJ;Z9w7F+va6@3V&K{8ApAv>)9e^-IpxHejEFI}LH=;p}Tiqx^zJyOy<EGURE%+BU(2oq97F -o?wLWpX=Vl>pDF`o2l0)0r}c>mabV|tK5*$2p=3H!+)%{!!Lb+A2%$GOo@jk7=6wTJ1oL_Z;b=*P2sM -Ssu65poeeMfF$jPxPr^2i%}NmJW!&2=UJjfOPnie&Zt=Rre#WCuA0U_o?MT^SCG2g?xs5g#2yn-4Ir- -mZRkcLhSIp$n7_S+XtYk9#X>}5D4WEN(N*@c}(a@20R$v(5pH$MH3lFBB9(Oq1+;&3?k=JeS28AKMBv -)K^X*K8MxDBnL<eV6t8so`w;)RK36OkjNk233HcemZ@4?38wu%qqetCU9%kJH{pd}eu)@OpNf^X2Y&= -SEV1{b%Wg{WS;QQ$^v)6-`O%D<{*Wc~eZWAF3rV-Nb5~G@69}=tyBN{_6F=U4kLn_RTAzuuRfzACJBO -Cfuhubv+gULY1uYsvO$w0{Sfpa69`!w?W!SaN3>LH!_xt=(GED+LSA>;<Wkf{mqApx4-Q8V`!>Q6$&0 -1^si9y&g_TGPXa^ce3Ks|nY!JO?=m2Q$p~eq(!(Ys5FmHQ77JH4|PZ*J!qrP%ejdki#&V)&MGpY8+m@ -jSxTRbmppYz%p|9#P%DkgD_zZ?(ozn^e0}GuPfB6@C+DZXL$S!LqEs+xZ8yFFs672$4{!cSN%|BU^=w -1DezTrJ2v3){^nNic#a2I>aB&gB7pQBuXnrsAqUECiN`Ho$6CC^%WW?$=`|sQ^m;HTMMGtY*Rz3vtPG -)S2Rc0Er^frUrGzvsBV>R3IK=iF9Rzh{4jGV|0`+A!8K9X-m`j%T2n4Sg7(@n&ksu#^!T&yFpr#jLwN -h;pAs?YU`=z?;cXfAi^O8u&HBOJ*u=)=5Je#+tb0eC)>w69ixn6?rJ8pk8@cZHG%j<w9LPsK?ZHa)kB -?7{Z7#~(0)>+S8zR#|Lb`!qws(Ttfgq;mE)h!Rznhx=&?Q1Wv-&Y51d=Jt$6)2Ql-|@Za42sJ8z#e4a -GZ6pAum*i~h&?zXC^iseI1Jk)XnO`gzcgTc-)5F~dUu{|hndh<@afukoM>AGAH*jT!jBx!>msHL{DAZ -{vfj<pHvAqYu*V+u_5<8OnM6XFL_!{bANGE+L1gfR=gDBr6Qq4_!^*lri~SMS&7M#<L!fR3lkf*a?W| -1?guLj%@`BodehcCk4)F`0%k4lJ>Y)s&9a=ARv|jYUyqo6fixzArWCMIDml@SW1(K)<{Ycbb`!`26_G -t*O?qv_l2u%s|>Mz~t+zs^;J_j$qenWJmSE?TBL{HMoL3^(ZcYlld&imy7(4P!|^gw@*qLvr*+ew4PU -SJjmWf@9(C-!_WuvypW-=M8l`)z^nJ`L>X!H)h!ke&ATypQP%;r5Q}>FDS#*6mIY?s^jaYe614>FGmy -jt`7g)g5Wa{CfKsAvMPsk2I`rAjlw$HJ}~nJGXbUDh;arwBv+)4d0uWz3Z4)dpF+Gr=tCXC!l@$fRIn -sJiP{F{=uNe9t{E2es*n!Z;DTB`@Hb<@BOY1BEu)#={sDL<J*-?83sW3SCHGs8VPy7(IdCr^?l2}B;= -1@dip*l%h@2yw{|JZbv{=Pch8T6{P?3+eTjf}0?IeywVw8nj9@li05yygntL^dHZaKwOlc?Q4v_Of!D -JA$AA_Ji41)SF2=aH(_<qfO8=wvG^C5l{G|*<Fj0S>?0v*qM()7@f9*g<7?H)+aC?C>aQ^{mUtE#~gs -&&|p`;%Y@Gk7jbrDkw287zj8!P%jZ4?W3XPn)08Mf=f+?MF9pZN#|tiwhz{MVn@5cD82dge=Wa%^e!% -8_UneK#0=~A>>-|61g_}BDr?L1#+$CXW|K!+1nJr(**Ks80%Sr-Wtb71=Zs`dNSy3@oBeA?f(7ed^`{ -5Kj-6FJpPxRj~}e@J`P%?nPC$X*_7G}GwKB-Mmx`j3xp||V(tR64piQ&wKEGBvlU#jl_cWopG{rtC1f -qy73gx8mka1M{1#;9iPH-m^YRLo<lC70q*bI3F%=c%Eh*qWq!xNSC)t|m)C0cS3%>saV~SBvEX=mKPq -X&-0o~-nY-hf0dS1Tm=FH`2_XXcMxa!ztyz_jMo%v$kwAG?5wQxaRwk<I?(?OP^Kl5<u#A!!o3&=*)N -wqDvvy31Q@$|ZVg89rc<|>;d8p_&-uVN?R@+~2oF-N@2FJKxlo~f(tHj;p*iG>A4h55Eb(UH$=Imm5P --|2AJ3Pf|B1A;1atX_a89TM{ki)`GpSxIwmPO`?0ACsM*Pl!Y?nsaT-3s=yLm}j?TEg(snd7=aUS-|y -VY6FUTF)d~?Pp~d9rC6x*PkaPhrhU2t=K~*5-h|67<gX;DK(sj$9eHA2R%ZS@hzc#y1YfHybA_#wzMb -WV1Iigw2%&tXO)Fq4pxH^QvTSy=2k{f}`1k9W𝔗d@V(0+hXUEB{oNj!&U^DL9W%#74zrkK_O-4rx -mQsD}edVVAQh~7A|wzr#lO1L?F_*C=`h%iJ5lM>99dIi?&rFIRh!ewY8MOJWLsRAJ30_sgG*a^+At}9 -i(-Hm4~Y7^05>^;xqH}?&_Egrh@Ew_Pm0`LMOy{V~6@>BEvCOEb>qXKBKwazK+4X0`qac%~3>EA5l9@ -`k<YlKBl03Qh>ZE5qh{A(Z%efWaNV(=jKDqvT03$+Cy&DOwTVuFEjI<HgX%P=BcV%P(_Qr7|X*;df)d --cWN%~4p<<+)6qT?4`TJ<yFI4tYzNJ&YdrOl$tlRd1iuB4LsTru8c!R+GKidj63DlSorI}cJ1^g6vy- -vD*2HAUA}Uqj+kW4<5EJSd5z#kf)#4*dG?<hm&oVP}2hG!$wEgJ9fb{F!hCtmm_^FLUYN5NuATP3(CB -^2T#Z{2Sk^w<KPTPyTtYti1wVkB~vagudkkv(^ZFy=Qgi}OY1K`O0ynR891;pfQEzAUoS?tK9b^jEVf -w?x8@mrWwv6cf${53B%Bm{Eib|@uhQ7(Em&6$$}qJ%euKoISj4x2kKZJ2*vc``rKk%tSe3rHq2$)26V -a(a%BXI~Fv0&@T+xgh_9#IX|QF<3zU^ZVcXGv3M0`E^vcJGBu?e)WfIBwdf7ySMN2tG530`_Jz`zbpO -JIye5A)1x1YA>_#Ih7&m-DvGx`;)1C4&6iU=V}fUw@ofx5TtIwMJlBB;5qPdc$7v5v1G!m{msua~7O9 -^58_M<Y9Ca`Lq5crAKas0VT%E|(DcsFmu0M~{1>FBzc-Z+|e>uUEg@oSa#52?m9#?;EznI6lgwuPtc_ -}w9<NiDVAD#$)lB=KQ@p+Di_X5}7#p8FBn}5R1BLi4osCoA9{e^b>W9Ei#fB*KV{g?c@KU~MmyFdK(- -y83L<?sKx40QPYFBgfFBtG8q(bDGQIcT6W?pb}$5N`hbX-1#^1EVERHPRg@<GNx>5qqZQ*;CINy79k+ -uPYlled8+an>gJG_K!XD%`^SUx6jDW+}6GS>z=0E9OzKyoVw$bfh;<;^wjvy_CGlJMdNuw#;s#6+Z07 -f^fDLty%RI1Moy=28qetjPGdQZ=G4GxB&Rw~Tm2dRfzw7#Kj-u$ryp|Kz-c|Fb(|jHw3^emINi<Z4o< -gox|P#MIo-%<SqJ~ua4K?|&uIpy>6{9j#&a6W=_pPOoa#7j_2c)TwC%^|&0JsRw2{-3oHlS;$7waE+d -19B=_XEBahkzt3a9a$#&R0Xse#i-PD44>aY{IC)iT=5smy63rzbhB<8(WxTR7dMZSQ|ESKB$w;8fr=o ->K#-I!-V7GWs*8jhyc0bPK0{&m8EV`IXIVKX3b=X8vn=(LA?n_Zi{5yd!xz_2=ct!%Io#_tX?N#?9{2 --XD&JsuXv=TKX^jb&UJ3mHWTi{@?5V-|he3>;6B#|DC^IyFcX9;pfYLs{7VnydCFMt?!F@J+_}G|57@ -Je`<Tv$Z18^zlN^ozi+s|8?*i~s>Zcry;0Z5+IYK0X8HO5OA1o`!K}dnpJ9xKh(P}WUnuZ0(AhBI-91 -V}Qh+|t8^&UwzZvM-aOls0F9v!DzR!WL2O1Iq{cE&_gacg+-_|G%$p#wT7sfSU2kGqo(3S(A0(2ov+! -q3m^yFX|I{}aMtHI1qVjyHNd?~{;FsmWtGJL7P<6^?RAuKErsNYcV6ZCb6^9f%ugo~J;l|z}GjX*~aV -|*;o=}{0C*cX5{MzOGvK0KVIcgt{!14iv5ec@VWXDiU45llZA=v2<v0e$^C7|Vg5JAf+i{fzM$Nytb< -yoUIU0-7}n#uJz)K!Zj@@_-KpdL4WzXb0%6AOz{aF9f=83`@%apx=*SarhbNO|c+<pl<|vcPz{2H9%j -9Wp=g$9Xt-krXwNWfZjNc`ELZOjN^Gb9`}q{x$FiSIsx(o>>zy`zDw6?NHx%<6QOKCKObo0M4neb%dd -wz4Eo!F?v96X+;9!0CniDsf&UQbkOZiQz()a{mcZg*2HKLq{BH&7m;z}5J0j4rQ(6AU0v&%N@Sr~d=u -<bceBJ`I|4l5t1A*QHUn|%t18OufeWbo7LI#5WTA+7NgSiCoYk=N2jm3Wx&{Ht!$OU~ohx2I?#1na-d -jzPHz`q5w_e}5;_=P~%%w%qnKEZjUU(IB3BeS5G;cEc<u|Ng*P6D3-bPjx<1D^pj6TU{^vw=>u67mi3 -@jwgV`x$sU(7<GfKa^cCVr`{E8Q}|@K<B5kaMOYQHJzpRXQ0Kmu>3@7hbda<2o0qp7eYM+eiYER;7bJ -_>9|Eu?|`2Gv{xpK-GL7WIwh0&pTC%pZ?jlg$Utw(W@$76eFMI&VE+Knrfg>a2cS>eU<?lW&jF3jVR1 -uh&0%hlu3tik7V8vHO)k^d0{s-ec;G(=8j;8JBY}?LyZ}_<{6?Vf!e<7)8tC~v7S<)8FE3^MHlPXlAa -B?{0DU~4*HfUw3qjt1j|RG|ki}mF`a&VIvlZxF4nnp8zXs?9`09Ya1ay57<BNg%iHz3)-6XQ|LOR(A< -qP^#fWF~mdAJ*>b_Gu_&}R5_*MXm?w-RIpc%%WVSUDPi`mcsE0(~7&>uQ!Rq~q^m^=ksqHFrZ=zz)*K -?`HMu382c|Tqf5LGH4A;qXFnz__l!k?Lgb$+YUTgOGwo^h$rw{fNoe1G7S7ipkEZT_%{Oet$?{P=xc! -vu7r6s@CKkSR5CkTfu5;k;Wh&`ZGgTV^27}E(+w<tJ_lOy5Y*MtkXJyjeVDn81{&}P%;~|74(LsfaCr -mzz$46`%|OpQ!|Fma(8%XtP7OTLZO^eZ)&Z^h1E{eqfWG%U%bz-+$uF?HO#%9w7nuJQKo7mZ`!As1a3 -1N77nyye-@L@yQlzhMV{PURpf9}wc?J60fNpt}^(jbCzRJoAY3Lsrk90qLjbJ}zJERM~A23}&r|c#qI -7UNh&pptN03Ql;+8$P>cA&@hu(&lK|0X^a0X$Iux0wG1pbxzb^C8gR0`%LrS$&s*j(vym#&-~^8PX1R -kiJ#}^Elvl0G+uH@(p+^(3kc@dV${tbmRd@Kk!DNVlA|{z$0D!KI9MZ*+3iKXZ;k?Q}s;$bD&d?uzXG -diVNpDDC<z5pTHLid^6BL9D}k%`2qSqd;@{62ikOurFUQhAvd3ZJOcd;pwFIQem)2E)ei{C2mS3pYd_ -#J0JPyFXrn<NY1+rkemc+*pD;ceXznM>KGKAfOb(|2-N*R@K%*M*ev5`u-!GxOfY$>348BN^;m?7-`~ -#EcZ9q*wva&D(9dQQA0`#MS-hGCJy9TJS8QKfbN1EEq$`|Q{W+tnbfbRMk<O%HT1{(JZ#0Pi*Xk!b+2 -Y95fo`Z4$eml_9=Xk#iwD3H{6ZF>red|2aNBRrrTY=8O7i@q}1$yWLYZK~$23&+P0(~9Okr$bLyr+Zr -jxK@xAQd@}6z|Gxhqegmi(DV+0nX!Hm~S|bRN?lK;=K^mM|uP2k<R5j(&d~-TETgw&vG8`BJAfp((gE -rRDYTAcs_qT=aHsx9;t)#Nb!s^#trGGTp#IAoJWdhbdg6og!BKu{IvXkoT$O@vA8FpSVG0Psjvws?iF -rj+iG6+1L%CE8uW3V0#&9M-8bVh8&Dl|Yq-B?0E&~Ac%Zn4n4;<EkA~iO&Fw-Th7F{+3w;dt(Ju7yx8 -18)y!ETQ(QoKRzp)$r=5F-84>Wk|hjycH=te)b3w>O_#XB%5&p_J^^cxNm5dQ~gV>BLh#`91wbRM<tk -I=^XdDQkDU_RWVjywhGP>;I$d$6zdsH1<<Q0!e*y$RGhUyu6Hze2m<6@E0K(>8pv1Y+%tWYGCHX3Q8e -W5x`!V8H^CmzPJJPA4nS;$rw$OdfsoQS!nIFOWTZ_K@o8YVye^pOCh;Ho}+wim7E#G@~k*++SZDO!T! -YS01CvW6DpLii0n$T)AcqTKGw+zjREgKL^IOpw@xnCvXeul`By#AFHpgr)oOQ*1>;2DVK7n`N}oTx*x -!?a*(T69@Dj=`<$FhOuZiM*B{HtIabTnmza4z=wCuL_<sq^@dtL+Gyj=7{~WbnUw`Z%(>O={KaJrtHH -5Dy(y@As8t7sCE*(368dNQ4PUC;ir499$>RZqcRJYAtXaNhC^1**l`@MB2{JJOVk3kZ0Fn@F>Un%MR6 -I)YgMfK(K@nP2bV_;(=W|!{Li;s_sXBMcs^~ka3hHk5;cJTxKA52q}R&Y-Dz9IfcpG~cAy>zU&n%Y06 -D3{aTZM{T|(LUsF(-W-<HKzHGUdYTC?bC-BPBLTaKaE>3m*WclW5(pt;Og~_zQs3z2n_c6eBsj+6V_0 -5^J%y}Z+AC!^R0(ZDJB~DeBld#PY>T<1?4=H%lfa$`Gg4*NOE#AnKy49x$CaG+R6B)O`FI|FTF%|?AS -qN{Ns;5Cf|Phty|9Rc+3FCi1zKf0<a|Rw%@Jn%z2lrfA^<%b6^6q9*QXET}4^{u4@rU!m{;eep$2=nD -tM7dz+$M%vpQr+qAT_cXO;0UIw~o*~~j<E6N*-ly#LO-n}ht5m~Q1`|cZQ=-;0E(Es&{^5eO4+X<Com -`AJ|JXi@07_1Oq{*fzus+|D-=~+Hu9vNvqUHOE>@ZrNrOiT=kjg2K!r%oj%lZjX?7Mgc+=FB1U=g%j% -+;R)K{r20*y6ov>$&w{x>C&ZS`SRt&;c(FQW9{0t<Z0(k<mJ1jlGoQIkkTbdWaF|#vboSie&;ZfH%lg -ySBfp<@sh=4*Q0iF@cvn(;n`&*`W=Og+NY3l2NiPD0fkIFtdJ>36|(S%LJ~hz$gEQenR8kpMewD4rI6 -dcQ%F{$LKgp^kdl%TQdwC^9(dpZ^2j6que~dQuj$(QJBAwC8mfIFrHPnAN@5No(@l^|2wqdAeQ6LxlZ -eC+Eit~LH00GYtK<eH_a=>*QbK9br-mr0noAp06SLN^zV+Yt?Caz<B7DB@`+dJ(ce|Z??>TGlHLtbzI -_G4bSg>G$SiE?#NKH)@%a<>g^3Bf97VFoqm%eQ4)~zD<t86jpDv9-lBzEuKE%xr+EB5c-FAg0#B#s<8 -B90$FE>502DGDy+iQH=>&YnFh_2S~ii{eJXCGpemBnk@)#qHa-rLLfr@!)t7%4-5vnu;8>E3@7_&&FP -b4cLWV5*?|z=tn)p7#c3-Q;JwmtHlvIr2MIPnc-a--jm@wGJH3Ne~aM<GkhXd7auYFVusIR_#B2m%<$ -)R@C_N>kKy|={0N3mX82VMzmwq)F?=4wpJMo*82%!|7cl%S9lS?Fj&J_fJq)a+vy*wP!|Sg?UWd@(>V -oo`3p&|T(D~tlE~N-6TrKF94*q3^cV&1^U}pO;d<etyScOpxKZfByV)!Kt|2f0&VEDrfe?bS&aV?ZhI -gXQ+*_9Z+GQ+=scSAC~%S(cM82)XBf1ly!G5iLGKca&dRYa($$u?V;b0&8-+cx3=Ykr{!7F4~jpyqLc -dVVNq_+mjRYXq&{Bk0g+9lQ&}w_*5h4BwyO6B$04;g>P|T87`o@ZT^z&zW+9;V&?Jp$-0Z9-%9b5XB= -*<q?+i2)lTMvphm!brRQ_lep27#I4~ZZl{p=eKm=@hsXy1D#JHrcwdI^#qa|deiXw`WB3IOzk=b{G5k -)3Kfv%O82+*jzM{r~R~Y_PhOf);4H^D*hWBCkJ`6vc;b$`Z3Wnd#@W*xVMO(PF>3=d90{jE~1Lfy#P2 -3vPcXe&p*>=`Hz!)4H7-%&3`uYckH+5^&s6qYCo$IL)0)zQ9{~ydB0t3U{8{>k`on5r^#t=i0(U*r0G -Wh!j_=mra3mP<Vt*f064)OCh`Wpfb3=h1Tz3%Sr6aElMV~A0;POm!F3~$!VIzoNdx-RuP1D?k>8iRd} -;dN@%a^&-Tftz+g!*GW8^#`!Q82)OF8nvwFC64u7T^Pw=+xX$Hyj-J3*N*Z6cX>fw7r+|=an>K_U#?N -7tA<*)CYXWY!+rfjx*Lr_#&9PLP|LAq&A+|y!V9&#VFsKJk&VZ9Dsn+M*nsnfppamrF(fF&xyS{4zEK -l7en3c|F(@Q3q|<9ouV@$Gd}Ft!-Gp^~gPcNfE!-OyX#A7oH}4R_EDi}WhDajh42u7Ze|TVXKcHabF` -PPes!^i`Utl{Q-sZV*KaU`upgW&`ty3q7LT%f5L)G$Cy{dQy83RL@%blDh5p_Cg>fzho-@irKs^vX>! -$ZPDf`c?HZGRyn*w8A#;8D(@a(C?ncoiJzZ#y5}&ZAnT=NufWcVP^HVu;a~73tx5|F*3?TUIJt@ugrs -X$W9lZq>?Qcz8ZMJixz4hbk4yx8aY5aEu-t_;CJk11{;&;l(l){BYjj%j#+r56^=?tYCi6SFh3|+z{g -1fptv?{rJ|_rCRlNA^yzAVBKkqA1F`r?`>NeIs_LzZPgzhKadqMIH+}dyVJVynKi-w?d?trW6>63cbX -_?{GF;3e9v$qk@IZwx$(vHVsp6(!q+aJD>+Y5`CPAFy<|R;6xrF9dwiDYBc??KiTUvcv2Ie3$X=Kv+V -0_;g8f{VV<f`PS#yR&KF*yxS1ekzNGw^hM5LvqiDk={$y{OW+O;wt{Njr*WUlai&Szo~=Ns9aE9}~}O -MLg;cQQ9Pf9|w6ckY}xfBw9<eEG8Y_19m;wW|d(H@JE8rnrCqzDT)EVl{t1bXVtRJ?e6x!wXE<E@uzm -KsSa1-7F4tD@1i#Cz{hX(UbOw;gl;<=!95J7dU<w>fkvbhB`7l3U99qSp>ohK?;ow-;d#kGyGJBU&8Q -f7=ACqKa6vK<tcyVDgR&d6!kuDCnu-6IM$Lc{C09|;NjtcQm>PXlar%U-6qb}s#JN6^{kewTZ0CT8hB -K%R<-eq{N1T;y+)1r+UnJuJ={IqMQzt6ZXR_idsOEOs=WB(Yqje(aPxS+vfFFg4=yflO*|@Ae8G)j8o -yNKMJLCaO+22jSg~@Y^5tJ>T(zoGx#ygk)Oo&QW&Ge#&H0rI4i#KI(CSnwkMaNJSf&Pld%j-fN|oH%z -Unr3wQOxZ%OG|5JJ0W4`{hRU+&w(p8!`Soe-n52`tI&^-6egsx#8a7x^?AOF}^D9#T3>D3CfB`-{|9@ -y9U?e0Rd<0{t#X`@vgkYr9?klil!cAcuv>LYqS1uw5Qns2EKT7;1y?QXD}5Vuaaz7sZu5OEb>q6;<fL -1RXlqN`S^k2__JzdwQ*l4<@Mkz!Xwn*W$DtTZ*tt(QczIv^KZZX_6x_Jb62ihxxmNMH*VZ0;C1Qw6DL -lr{^px+W;i%FxO;nhduTK{YUAKh4DjJe_y<`dFu&BWVZ(ZS1h1-;64tR_zka@Lxbf##j~zQUi`UV#ef -xI$<(FTG<0&0IdK4Q}bo%sZ;`KM-JkvlNXHVwm=U-%6&mKN}_|qLbc8m`Q2xuv+a>Ao0HHG!j5a0s2R -@OQ`t4Cq*$VnYs8xs@L^3I(*sKC7b1o+oteji{PY=tq}wr$%G_%U7*|9$)R(dNyYiSeUNn>I<jFI>1l -KmYtQ9XxoD4jnoquLBI{2>AUx!z^9BdiA)C8#j*Qlr3oT<jFna;^G36laoU^uLf>-EXKWN&6+KzPoLh -mMT-{Tonv5Npc}@0Qv9!9zfPRXq|~cduQl^9`O>9Jl#`QV<MV+72k3_%evo*wd?fDpeCEs<`tipf<#* -7eI_Es{$U1l9>eZ`vSnuxgnE8MF@dsVIcJ2E2-+#aPr=Na0&2#;Z>zK|@*xp(*4#|LhQv5le!d$iv{8 -a}HszWBK1Aj$_`mDM=Evhrlw$3uQb^Y(?PlNwgUwt)`<><;fF$Fa2+__WY5B)fP{J50C*|TTmci;${U ->lal+}vE*VH=PKj*uH{2Qc4$`>n(uGGzNF$l<{Qb=R7;@%Ov@`#qdz8*cF=_}{v9i#QBP{rB?nY6v|> -2mbr_@24$Wwh+slIA@kN4E{qNd-v{@9k}n=vq#!WUS6L33>x4Apl`4f$OyP?_>Cy?IFavnM6LD`dF&= -~-$B$Yhp5*+qKpefH*ej_Wm~EJSj=_!Z`-ylrGEYTtvQEJW`7BJNE(1Icn-dT9>@Z?<1=J`>eMOO@fk -b^zkx6G0JH#a@E<ZZ{Yn&gl*sQeQHKLWZT~~mau3t6i>L|H(C|wl*Dr{YPY~U^cW?2N;LpC^)`7q3N* -1a=jh(;_pf7KpBI=w+WcZ%>4;okoZN4RH!8F7kBf52uXwV@d&uzBSM5*w<efu_ad1lL&EnQg`rho>P! -=GpYF3=<3SR5VTJ9rKmL2sb{@VmTblL+--{JZ{Wr6J%5kq_hAo@r>!dJ~st#Xl;SsQy;%e$G<j&oP6P -|A+o_JR)>^nJ7I6Um*+V6?8+<0UL*&LGNJ~>Il0)>wT7}JJVof{qJ<lN<+tkMD6xlY4BuQczq|4+x92 -NpM7ykg9Z&+vmBCPXYeh>(E(k5lzxH#IFGmhIQSWT3p>v?3K~ul1v3pnOhfh+Dowk}ec_|<|NZyhiQ` -O>4jNQfbQC9(;^?@0_bwgUyo8pIHPXW2zBG53pG2bX&qQzhMAY*PQ3z=GL9=Jp8E<9Jd#&~ipVV-h)t -;Mfwc0d$+~WRZx5S_2JhN4+R<7*NrvQKGi9H?Ad+4=29f}s{I`ruDf7a1wqrEA8WJmfm!AH`7_RdA3w -=^0;PZM=xoVxs=vuDtt*>f}aB=)Hd*eBIx8k{#-eJi(##o_Pj>T1(}j`4`|f07667x6&J0``FKiU#1% -evfkI4J7jzZ(1?BBbk_nB}@Za1pCjonT9@$$KTIcX;AhI8k9Z5CpG_u`TiAAW6;3-ciGJLzef)9U2*u -cznA*Yww8>12sWqaP_%#s#Dhoa7Vw9kTtCsDvOefQ8BD`+rXg*F75{_+qIWMd4f#ZGUa;CTe3J3UhxQ -B_ls$t6WzX<QZd>Fqx9#zVoguz(o@MKxL3MjNin9?#3);r<?P$%|_LTL02U?ZLG>qy<Hw!P(u|KRdgf -k8OeqkDP_H5Mb*+19nlf3p@<FoQfjhKddTZ;8d5`WI`XSQzL+Ld#ZDZn3o5l83@Xh6=RXu)rYwJI;eI -mBD!3}|0WXh$28+R<vJA(LrX$uw+TFpO>#Tr8EdxyW?JuuQy^J!?5eqix0G4}YQbzkU1m4IvBFVXwd& -xB+)X3w%HPJ=Qhwn}}72ZD`vjdC_L3VSQ42${yQ+EKGyFJ^!11Qc8?J&3rF_rbQWO@?Zmv9~ek8M)sv -s#|}yw^f^W|Eys8i{_O9i{xd$wz#Dks2%La7>;ZTynZU>E^JBzc&<OqiYMKvy$uw+Y8rF?t8rT+K&!E -Ai(Xc?HVK!(O8bDKrFb#tODQRGkqyY^+sl6`8XuZ35{fEy$3_~7)zH;SCGMmkWyhwGuOiHqo`}gnD!A -~P-$K<xObt2Qiwy>6I_*}DR_@uOvKC~p>hvvum(wta7nicI&Gnj@CnTAPB!#Jh^%|6HYM{e={2l%rtN -d0HMo&s7v{P07vSS*sB($Jx30c`%EwX}0eTgqV?wlEFSo|y*tBxTR3?2{J9`_jBPKl+4eNM;&7VjBL* -dNeUIP$CMS<gd#y)?O~&{{w%e{~bDXXb2pD-?VAdY&6)@Q4%fp@86@dI~LOJnFiWE*^9Pl_Pj=C&&xC -#7HKs6i}fh^J%5@WWu*a4<`^8GyK!Igi;TbDia)nnkU7WSl%73%8e?N)_W@VfBWxfkDM`|x*RRLP1V` -AE{Ti#dc5GLcEysX8f2`TFT`MvF0sfGEmo8l(2U@jimCU`6%S@j>okoosWuu`aI!clW8hp~aq*B;3(@ ->0`c~q+fKFyvzdk6bYYSgF^g@=dJ^5x43aXBF&fkuoNK{IF0ly-gc<VopwkP8(@3-Cs4fUiO>gnSh10 -W{e2ffXa^-XFZ)NFQahXO&|t(Cm3O+rs1U-@0{cRnB$(uJCW#v}v0`g9gP8960bY`%x(elgUIqdi0>) -y?fKgAAd}9=gy@$bLL2Vu)YVrpaHP}aYE67H4JEgKZPD57GjQFGXm-GXTbj!?OQhLVU97%nq$D8;gc3 -7h5-G?uD`s!y{CtSgiM6~u&$@@y1(`M_3JHc!^Gz(F)@+YCJ5iVcI_&2gx$M$OML+Dz!fr5dZpw6`k; -GQ=OC|xEMO0?X=%?a2faP7va{#^Y+Q;wa8YTLr(L^ta~3REAooEqw`R*UVZsCo3k#!q_3BaM#*K+{Yl -#c+fNkhIXi(jr7If&88XLZK|C0W+^`CwmpRG9t;<I_2fi`|Jn11|r1KqlLGneIE>iviL^XJo)DO0Yeq -@>WKNt15&?c0~4qoXC?d0i=W2{gbiKqqhm9rm<f4+3!*dXE?lTfu$=){*!PITB<CT8e2*{_m&2qbJ?} -0WjNcYFu30=?^~m-~sS_^UXJ9hfOOQnlx!bqeqXHazM;bdpn8_;0yfKo-fu0IKm!aBd`a1dq>RHuRXA -S7EieU2HS%Evo57goH+3a?9^y9(%7+Mr5r#5@DB(Gpgw*2$loCY(4abKQ0rc-#gJb^?|~<d&>_&K*Dd -5!xSoB<zv|bo-)7yqb+fRBcpChno9NIb>^I{#;DtTskt0V+`!yI0<mcx{&6+ina=>}O*way*ZYkSPN9 -Ym!0rU#~7_w9Q8;ldmZKbVWNc@@ZnQhv%ab+G(fjxiu<(HBM@CW;bY#)+_h=>U4)~%b=t!2xWN&LZU@ -Eo6kH|zlZ2frgXh5jJdh8@5LU=tV@KA3TTz~fADbaeD%xtn(F+LbS?HJ=Kl#UJzP^B=`mbgUPF56hM~ -x4>P+(jHje#QG+605J+YRxoNm5q=arh5ui(W({R!Wyu)$`RAWYIPjYJl+V8H9gdM>8TXz1+f-q#dz7| -*Bl9=pKk)x-kIDEBd&3d9K;E!f)>D~F#Kgo%-^#Ww;~RVp^jqm6>;QHNnLtk<1NdZpK7`L07czo85YL -%jyh#UsvwSIWx8bkXRlN@DbsM;WF6a<!Vd~VW#6C;LX?+83ssjdo2EGUl`hztQI&cSFOP4Oi9%E{mGG -(3=cN_jH|7U(r0S(G87Dos84Ijj@TdotJQ;4<2?CDGVAsdxLpsoYGhc1EVu%Y?5ng7Z8UIc%={=-Mu$ -5?w>aKs+_+i$;3^XAQy`mN`?>bMTN1YO5>!~o!~>LZ-jF8OcZF7el|e>wIfLoX47K!@7zhyQ@DLp;*c -0p4!duz?mXTqyNf*)TfjR(tcvoA4bvqv{9jGe0X^w(NfgcN_ltxTw!z^tnw*GC@yGO_lJV3)h1-;0xV -??*uIhcg{~&Jf*(>34h?i_9gY7<M$M`{wj$UwdbkocaRN!gB(;%4l;u;LM;I`D9{4jd5)*?GbQ4$-~U -l-sgh)Z{2uuazN0RO4&B1>>#x6-eiuA|y+YrCKkR_@aoID(UE;6b|71U5+y4O#h@Hq^;Qycph)0N>;4 -#*m;63D^_IDu%e2346uZ17uHHEBeFwM^zcZolAw<JA(l)meI5zec93-B2<Lf2W39&nD3&$2>Xb$Z6Qq -v182fBPTqm;?7cJd@Y@(gY4J+eeSSCo0eb-_fJb2;p03J@Th#d@QRS9kio(Mn?y`@pbb~(2hCJ0{`*a -k*r4t?O0YjR?v=BwWG6k^wo~zwIf-N4mcKlZpTGDMZ^6)6|`Pnl#nZ8zmNM~?zimLi};R;iv51zqZ;O -N<lNVjW4<vmGO{P<`+@B9aT_*nJ44R>iqPpP#y)w6Xw*5PE=R33HtYqXrqJRmqPM>zI(kjwQW6fJwRZ -XP<=gVwZaCZY9r!cOId8JRy~uv)SN2QCIX^dXZab87U_8UnoVzRM8wG>UTkB-l3q_r;gSMA@<T}xTt3 -<xL<ov&tFn=BP;psf*9eq7r-D{%u&$XQY0r%_db932meu05eGex}-buQFbuqTea*za!;9lTbmTCX$w^ -rT6XBIeAQ69ycRJ7N8R_z1s_SOi~<To!o>&fzm!zx;>wLezLr@5G)q>O0tzM~&@q^J5LbYtUF;FAP=d -d#rOYFY;*cM6G#{H|ZPdWqp6K*85N^TUS`z)<uz4V5bjqe*L`<_V+x1Cx~BHE*z)NCWpy=%w%m3u>Td -J@JrUZY43B^y05x_K(CLe524QJ&ByPH>ZCJb3a?)yIL{5!--iMDBL@a9h(B8v#K=7`><42{Ud@mGk4x -6NC+cldAM>oWHq>~akEl_h)`>ddTi;61J!*c$abEAojvF^_sJ`B<@>v{_TW2L1<X$57bFq)8pC7eX)Q -{h^(?>t8MuS=(YD~~a_b;vfLCuf+M_((oufGEqv}~<Dkv_`0AA6(V5>32X6bI;In4LcQYBkfAnm*dq> -E!&pPKsEtU_qE356lfc#}N(nHteaQzJNX94fEn2TQj`$2T?rZ((#bB)&`qEy;DCw@`^EI#>9>vKYpmb -_6i)ZZvtMRVSgR9rcABghdLAXL!pnTF`>3GS*tIN9boNqCq+pdq&^;eSo^l0-@X=XUjv5xcTDw_^)A$ -ku&0T=aix#g7e{>swFz0{(&isGu#=ptvrZp7{->z?k&{iIK0RXb;>BUGMXdLcpM!4T0v_OaI6X?%4N< -SczN%T<+g_^G7hn^pkDyjKAu`a$12nylM(tLw|FEt1-+w=r{r^x^AHcc*Ydi1+z6ZRxk^ckj`y^D>39 -vt%t?jQb)7b>-Of$4P*?0{HG^vj~@7vr@+%9VWYJCPfM9#0Tv*>Gg;M3!3M!7pbmo*mD>ZULbNm{K@* -Z$=HF#n7hGa^3y^wTiZhLDc~54EmV_YDFM@B;n_=g?5U&3gZ#O%$h(I$bN)|0Bm9J9cdB)TvWrz=v70 -W=X#Xzl+!h{|{XNKcI`4TVHef?c5Q%a_%VGgq=P{``c<|CC!hRf_)C`>4L{tU$HIP_R{TZVM;cT#qN| -)Dm;IL3Vu5JP#;G;)W=0hZ(;gk<3EpIM$I1<7IxOx*H`YlqBb2B6-6I?^pRZO0Vm}Pl&^$*z?<v&$LY -JY_h|EEe|ax}(nr&nPPFFVadi3o38F{jKR!M_E&crb#(<8bq@-c}`}hCG)6<jQd+$BD51gEwEcY(d+6 -O$x5&T#8Hi94aF&PbG@^yz<w@S?anl^3v2HU+{2O`#^E`!<<=ULRRUq4CrqxPEZWuxM_y0?;t$9>NwK -j6>&$K0HMTtY1o`^Le+!E*l<I1C>?T=E_MK-EZ;4yZk3r4Jk@?nOsO4`y9X;2a4Lc4N)|xHXkCc*VS* -J!Hs`uTkT{9{n3{yg`r!>T4XAZS?~1UFo5^M?@VtR{g>J{D8+=%Ioth!urU@<C?SD<Hs1t?Z9vB<w6I -smyWsy>_cBifDGUl00&&a3;1pLOyIeF`}SF)bTtZT|1)RKj7UpM3sY-u$Qd{c9z2-b-QB5s_wEumweP -3uL%0rlqx=Q#OI)*NO`5Q-6-v{j|AYUTJbCg^jE6mW#C-T1)E3@(=N(yNhF#!VH1I&}@giSFO$B*7)3 -Epn=C;jmzlWvYlR!L*kB^tW0r#q^eMQI%yawIy$+@|?E1qy}IX~uMUnBj0ad@a4c=hVlv}DN=xmOI|h -&?A&Q+&#~<@}gO#b4+W=v6s5Y){oCfdh05H4f}QZQQs~-6#08bKB@I%^oQH416EtoSmHw{ky`vm@cgQ -Cr{h(tVy+}?69xL`L{>5d(IPl&o~r$_7?qd&+O`--L=69Yqx*@$`d@d>+(oEIUYJc>KyB%Vd>JP>r5u -oE%s5rEnmL;Un^FuDB^c47E1w-F)Sk^L;lX!luJ)f4^B-@-Ike|DdnkR805@0eN+#RdfJX1JFw4sm&Z -86`ga3%h_x~FHH+6Ey??ac2j$E8^`difsErC9*FvX}!>N2m*%W+P_(kiQ3Hj+^PHS3yQzSnYh{2c(wx --rZ`dl#LiggXV@!Frl@J;R;;G1Aaz*Rlpad7K0N*QL&4F_mzC#)Z_e#Ke=YZXskD=lEWP;14S9JoXOG -4HCRV434w=QY@(8`d$f7RTBPYd@^}u<rEYbtiHd<W#^LehUq2803p<|2<rep>LP(TK9CYkAO8B_y;*5 -2B~{cw|p2R^DX3i$n}tGBG<)w!?Jj~90O~PE{q4{_tsl)$vQWD82E5zR~l`Y&{3`@k-H;r$GQP)r*V; -;<s7|F6Rl*vELyZk=7YFL1a&pY68d7Fiyz#PE%W|y18g}rh+Pl<aa@po3pF|1KcHeM+Ug`9x^yO2@)K -*Qe@4mqZz%ag_u%WHr;uf@UcDqw;in<XQ#(zxW>RN)|L2m#uC(uq&j7z(!Ef8PP3CIqejNC1<Xn&k{H -Y!nd`2wS>p!kn@>lmHVJyT+%#V14bppnQU*_09UJnmH4ZJZ9c!63GXhO`!eiC4@&PMFswQE-qShS=H7 -XND8MOm$j61uvkg4V0zcLz~HxVTi4Z+pTU*c|Yec;q*{f31vsLp9zUfVZ!e75HmB_=b0{l@p$xR_}y2 -ua(!Xbdm2}drrI3MZR^df~Z&)>0X%VEyDTVAkm9I1&bb{JAV)6e>?GKv@gpQJg~k8&p|qHb@bKfEyw@ -aZ@3PUSoanqM7)R+v0^Zf7A2xZB##^`28m&OO@O?{Q+RQ2$Gw&4FE>t&92y;jfv<@XaUz1RAH�@V7 -`gc5faDXE2(J=*DM8@-+j*5dI#|zq}z5<R`R$h*x<mHFqHQ1ims}J`X;E{~gAVr5Q6wB=V;L{Obrl*I -!<T)<RU$jUOhjPSB0pTr`v2QyyE%-#l4X4w4Te<n^&UVziFJ5xfj&#n(s5IfWQ1>hbm6`14?SB{&nuJ -OLGh8N(4m6!V)4C({Pen2%4wFE5E(4{e+%4L3z!>?3jX6VT64h8rdZ^7sSziqgvr3!h4Vg16^pal8za -`WVLJ#TTPt*n~&A@pnE8Jxbv75k=%)sa$qB?}&ti$e8}oV_XtrqGJ;}x{i#GZJ#h;NMuYzLerS20rA5 -Uh7B6gbilBf_7Mp&%|<nMb%}|HjT#i0p#G9>N7v@fJY9WWtnA|AJtBT&g8ZAir5vrL6^<bjA_t6&j~X -#X`_8|_M-Cs!vqTOIjgJ}?6&*P^GQoCIe>y0ULGib3yG4$QjCP5}za3p85`tq#4SO##-qmGfl>Y$yfz -^(#gCe36B3*sFJstu4aB`1F&+hF}1Xphl8`1pT+e7iwC)7XGKQJ)3d*?oVLh&vo2l-HTp6QG!-&AO-m -|iVCG`&x{sOBK0xhFL*H9z%EYQ;3iG`BRbv@U6V(uSlZrcFzmpSCh>Q`(-iytMqZJ82b7jwbxYg(DDP -YPHk}t7d1+&q&Q!nUS5bDI+IiPsYKFyo@s$`5A>7cQS;zqPd#c(d=S&Gkco7%zoxB=1_AV^SkCD<~Vb -rd4hSGdA51JIn}(<oNeA@&N1&XA2jEg&zSF+g{7jUn#IxLVsW#0TD&ZNmM)f1OCQU-mLZlnOQL0hWtw -HSWxgfVveJ@m*<{JF?6DlQ<XO&G@-2myI~I{yF|%5xW2Q@{Tc&5GSEgTPm&{F>d6{=I9kaZ$60>G!&C -g2BTA7udm6Ijp%SyZPA<mR&nqZn{nr)hIN;R!CWt%pca!h+n2TggBZ+A>09lUc)cS(0k_e}Rn?;`p5Z -u*e)xb(#I3F-C`>96)z`@e7h1yD-^1QY-O00;maO7>O_r4?PGM*slU0s#OU0001RX>c!Jc4cm4Z*nhW -X>)XJX<{#RbZKlZaCyaj|6klT((v#66)s#Jdy~bGq-lHHZF?N04NsH63#9Emz-`U00Uus_V|yX=%l+- -|e3LB6@&fI1pJzX9*tMn6Xfztlj7Foim9=1}oZnU1<y8|zJA>fG=JOZpFE(F1500<W;NY&gDvRK#yl8 -HdDh<9V7sWJbva*Pw=24mkZ}xU}-yQA7&BrE4ifOR3|L*v3@9*!A_YaToA(UImX7jRYf=M||C-urjRn -Fjho~IK8R0r~UntoWMZP}tpKQ?)GuAkI5T=g<9&sCj_ek65JH`6iwP{p%Sefw8k7V3LmUS4L!rTSUc> -f8KoJSk`MEY}!R`deL2uG40vsqVH`0{E!Mb-t2*oTT$6*rO-ARaI77L9iCgtK@Q)Yz0LL9l1#>ss`nQ -QSh!TTEL6*c~wr*TBA|l>90*vT^Q&z>1=NQ{@C1B$$X`QS94XR$rO9}80^#_EM~L2u?B&pZQ-c~vRS& -qV-c%*UuQKA)-JUOqbjeFrb(j;MRijFoN;qEPwOFdfxZue`fAZ+`7o%G+i_OR7tJs@qOyDYLqf0fnIw -~|bd0Tx>vB;|0LY@s%XwPRmw%NRe7S0xIbbymKF;!LKEbbkXf+gT7?sz@#|N*0lk>D127gcLbf+vXvd -cx4G$lN_N%9O>ZJHKM4=gC(Bw2ygCscKwR5kv3fB1$5VHo^RHvb03au{6HFePAG^nh9v9~Nc9T_Y%il -@(;+v;s~NUXCx*<_$fI#^WNHrQ<P_T7&6%2oox+(ixx{U~L>vYzzl=4j>M84}w>lUqIQFy{~uQ9q)a! -w|fYHt2CCm5LMwnqm$Fy(|G;t+2FK(8V**z-#t9q+kZE{x60FJZKa+4w+GvYyW{<XZsEU<zWVh`_<!` -vi{Z=Pem(j3Cubw6_ICU5yWK-?Evz>9HTn|&HEaHw6~7i`b6P*k3W2iU#jvbS&-vx{yRSQMVf5AOchJ -+LgYBJNw@`F?q&jy50`J|o<DJ*<-+k99c5+%HF@E_i8a#crw)L0c##f*G`=`JC>B&F;YxL`1zdSuTJw -q}9n3a`jdO-t~j%P`A4Fk%5#yo8XJj+*CSLyEo77UVr%LH78L~xZhi>iQE(~Kl+Qr(d}1*W7Ts!IBCU -V-c(VNM`X;v02tvpiQ7gX{FJ4pz(g>M&T%uj*B5X|=*{7i9&qq*!m#YL*pA4idc}cn!d78woC}WCl$S -gHoYe$HBJ3TpCKJP&**D2RI;o%HTX@2?Z-c1;8380vwzKFlEy!$pyfWFiI3S;DJ7n34yywsw_FrQ;<r -F$rVB@YnnfU*rGEIii`tPiC{i49c4K1vlgTo^tB2|EMym1%AK?k)Wv7OB<<{pXGt@;GT`cR88p0Q2?n -6#B5$DjEWWJD#k`INC!1$Z5rIRTDBn+Jaav5H!B$%~%>g_TNf&aON-|)tqdTDBN0M4mxF}#SVbKP90< -@sK2uM_i0|RKC+F(9dXgIh61|J9q7@qJnTn)E6V$g#|R*(!fIBP3-Qis8lz(Yg)l!yeukE?W^CzCY#F -bu+Q@BqR+-?CAL>Dkm!;^c$<{Pqgwdmk<Fqj^Mg=;UfqToa#^AL!2qWOkWEP1=C~)G{d<j7GtSZaern -hXwn(^M*#;g;4f@pnk^5e2#omei(QQJ&a`Bw#yjmgOkA&p#9Uqp#}2I%ny@r>oQJ?e~{N?0AzaJ!#!S -#So7~O#OY4Ne)1rng<*`UOhm1B8}iOl%|cV@sp_Ev!0OQlcQ%NmS%N_C@W(l}JC6py_4Rc&hn8xP#(7 -C92nphq76>g?+}^N-v*HS0obF!fYjU-$e>RVYQRow+L#qR_;`;kBaK)C@#3#_i;9;`M8XO=gEEiX4oz -?g7;Qf?dB7$MH_I1@+%^oMsaMo(&?EWdce7gF@RXJa}&h?YUKgFp0<0&BogtEVc<viR1v|#CgC-9XB8 -&>ok{{78AfuPjmnH|{J%j<n(=}Zn?e(6BsAcFe4eE9l@t~+dx8IQiP=<7*mAVQ!~c>h=k$!)^9^nMhr -?Xh_{srQ$tdjA)c?&(LD&}H?<=q#_iHjQQVRIR}Zn0@Fmcq+@Rt!q~A$s%B&F<8E00cl%&g@>p_2o01 -vU!XCdj2kpm&>kokwP<*t+~Px{E!!%v2jD|&ieXo=M%_;TfRfn2EhvLgxE31xCS)Q9k>Z*A%!Dq_cor -QrY67LY_pCJ2tZt~BPv$;^+tQCsmDIvrG>hT;O<L9D;u{5vDpTGsLHwRY`@~pLGqd6NB7=6rGhoW+ma -&ute+@PtV8s|qFk!u9@vWT&H#;+i%SV(fcoz8AWksKpGe>09T~W~)_WGfs!qeedl7odlb9?K6Wc(hW- -(nx?9#JEB)ejM2P_|au)9_*1)1;iu63xjt>ly2wE-|Lw(GWzXx`z;byy{mw70>?7>Bm}-H6aS7_lJAG -SE0iX@`Uz8{oYk%i75@}-J^l>^zB#28k*wlq>P~Oz@Y=0z94$x|E#VTAbL>%s_g}w|L+gqC@1AGsKE} -tLg!CfH!eYuoaY&s6V+mx#<T}<J}+_0;`8T2{`&IO=Bro%pO$G|gf5sQzfJCHUU!0)3~z8vs4C#E{4Q -9B(F^LUa*<D&cn*wIIlF6efwl7t;rIq6YT|lw1*-}5xQUCj$;-*$K|{6I;;4qIL*{$rbf2+c!NAq{GH -u36bVu-I>{E}_N3DqFN3Xv*EGxK{mh)8k&lzseEao}7<1T;}cgPrB^B1N$`qHLD!jtA>{GjG>y0ji=n -J;!fI(3YtN>6<A({;vqYMyj$4*am3Kdu%%J`nsoz}zt!9GgRJ{a#}Js1K5->&1T<nGAB=<AA}>5|JZR -Q@s4ZW^W!tBpMa9qD5%9-3*q1{)1E%ir8R4EZA_CEO_R}ZxTNY)!tRa{Hz5>CCH(9GPzDJVIE#3H>g{ -~(wF7zjmM=H7<Y0N+>!(&lu#@em-RBRsfhSs?fIu)Jc?R>ge1Rb$~(CHeqIJMqDIOU%_G>kr2z41f8+ -N_Cb1h-v7z0#E!};tE7v<_wrLxV*1FKsJ-;i{r@#+v1>Qi>qsZ&d{;&De@Uuj{Z>jqzHD7(!f^9NLaS -cmyFt60QNBiQk^Ew1IBrk8FoO)X<X6It8+R&2tJf5J&t2+pjmTlg<qAc!aq=Ni=Bn6}MbdoH9Qm96Gz -@Zj}O^X(tRC&f5!X6(p3`l2Y)gDCvKP}&kU4HREUcM{PyF_^)37(JN6X>79J*_-!1#*m}<?<LUq5m+_ -hKdq}{~m?76rQa-!n#30@fX*P-jA8#H(4?bA7BOPvf8a+izI8i+-TwfP6q7KTDa76V(fV8m2sLhK97O -vj_Jzu3Q4bgEbK3_c%R;fPilc1siMOGU2nVtbJD(_pdf+yj(@XO^q+}(BP)V-enkjs)WT#Fcf@~&1{> -8QJ%RoF$b=plg8@e02n>;-Ipm|NR*pRs0aeNoI`w!8_8hJp>UUL^=muYaCD1zizJb*tz>+A^wRNQ{1s -DZYquQ^XxZFrSo+l01#RL<-T08Uwm}bD5Kcm>xF%lF-K&&=Tr|TQ*bqf3>>qv9ejt+oC7KJ~02f3_cE -E7W&7@-YgGZ`NfXTsb2OQQo5<Im`A>l(zi%!xt+iiJ+{wBWbxG$DXO4TEf>;1~AKBK^*j8sn@M7Z=&b -A(cbUA=0;GnpY{jhKdSbVmx=e5LAmB0#DBCF+N3*6onTtBxjYtVid6FG@z<0{A?kn8X&sr1{5rx^(^> -~kyB(DYT3i-jDqZ4_n1sI>0J~$2mD>$q#W2%G}RqxD@||<D=|7aypzTplXzavBMZMF0e{TesJi0ztfg -XqpHzM7*oaW;=h3(_*z3NYomjm(BZ)5UJVR*kufo)nQ6>lx8Cd~JLva(y$O470k{X@%QGG|74`~8$h` -&N>ir-{avq)fm+yn@~+;)?_I5fdM(szv%vQIZ(_0@xhW0@PD5Y-KIkmL%Tp;6Kj#SF=iiRs65vS={=2 ->ZE4p;zPa!9Tv=efRzN&G!3uJFj;S$75J+ib+c9+MG4N{0`$b^RmDoz#>hj=pRXH05Q2r3N+;~hy<Y3 -&Eh=BlSMJXsFPWm;5J7>A*ONLx^{$>DE<M8SsPZD{iEPVc*^5Ioy(I3-CX4FoF>(6R)i!`qtJtY$aU} -iz_bST1L9{@Sr9?oAu!&bcw0K-N<6aN`gXUufIT?O3EMX%=r6chOp=;nCu-B8eJRB>Ts3Q?MjF`-DK7 -A1A#|k>C}<4iKa6&ywug0mthGrbkW}QTl<wy?iZD*6Ad$=2ycsIJe+=wW0sm4^%$Q$}P!!?faFIZL`X -x=HbBfE*PoG1JY$+AK8_kXN(5`FrnU`W|&K7p0FYybrmZK+6NX_1ag%G+_IqEeOCyUAI@B?=yOsaIN% -t=|BpcZ&qh{iUtNja1*TjMg3AtA+U(u~jV#@Fdx1QQseD_ePI@B+RV24>u}!3-3WIif!?MKDJWyBX_0 -6bdAa)6(+g`P3I7a{@0>l27T2kHfGx7#)tvU<tYlMtG;mtnCUiyy%p`85bog-d~P_mzHV<>?whs=z;? -31PrF-E&2(V@DTzGdB#>#RMDG@^)JGKYFMV{F)YmuiphjxMgRL~|J^XS08T&+{ydpnqioC5%Vctg)B( -Ga)hE#Hk);S$j7<ndH3BLsJ;I{=PRHNl=U)N>4;{qVyoH!GI8^i`gzlyV>D=MjNjRrXi&)5sPxMzy<0 -1oeNJ>bCZge#yan_`>I&!okVgRuD$k^v9{({t3F-1no7{Qtz1%>pVk*sEj<Cq@#%yUt4MP;gK@_T(*g -51e9vK<w7bznnS%kc(%=3vX=7tmzV>u7TrYz|smfw-05N0a$5uozaDR_Pn~KBNk$(}WJKCi7Uo>x^<& -eUsuBb6s|Y9}`=*=LBLtZ$QxwN~BpV*3$!%Bo@54uy_H_9`SLT*EDbVFo;VpjL=IBDJs0Ij+(@vYhY+ -b%ld6y|I}E9?tPL9=vB)Jp{TO}D#@hyUjtA;*wDR6@<l4ZnBSq^pu5so>~2(bT$>N%_y=+O8oiFuC`X -Bt<`<o|a3UZw_FV9-@wXN9PRn5V>+tq}QW#VFJ;L}w3~mW1M!zedK&<b7y$^bB3i6vuV>Q`M!r^K)cN -p(v3T(#=6kXfqs*Fq#+{9eZ6@#b&(D1N5s!c$ztmKlc^xI?DAJzM$-V$yzYY(kfJK7AtyvUPFj~b)c_ -~c1_Mu2P6cVtv`w!mnbH7Mh`40C_2#xACzZAI3~-`bOTv3#8+MFQ3caUvd5n`V_FXfq}G!AIBP+4U5^ -`-IwEmgZ9^&fI{fNOI#X9}kPG8K99y&2(@t9+NA?Vk&4%Zl|oO1Fyn&9|G`F)v=NCW2B1%xCfAhj}VU -W<Xj2bG4N$sOzY9}R|-Lxa3d*&NQ&yK%6ssYvUR7dz<y9KdVv5w*sDnnvW$<~O;NF(gIv3d%JYB0yb{ -c@cVmzySu-9-D8@j~0-MvAQ1~#$XK1y+pLRZzX9pHqoQh~Z^653?+VOZ+P8YfUH7zIb)sh7SSqyP%7Q -YU)agHsiXJp72I>300B3z*h-5Caxyf*C}nQ`#SKleolTVk6Rn^D_eBvd;LOtpAC7ObItYFQVL6#+Vn& -l(hjw|F#bJU;1Gzy;!-*3~8<mf|%7xCGXMhJ8o)51oC|URVj?2-TaAcbh0iko*XAI_$QrNR>vH0eW$6 -Qg+YY)iBYGQ)TSCtNENIRzQys8h>CbvOeCFFeY?9<`N?^7j#qr!A=$x`aO8?G7QZrL3oR&wyfeHct>8 -4Ky7&;0*EGQ#pKI?uFQjaQe~hTsYny?d(?|Lpv2o??+Xz1b#sSKImC_j#CatYV&Ogj`$zI}lH@#f@l} -D#3={;8PJ>%0pMc#tL2p!k7w|q@I#c)<6bgbv+;!lE>w6p=(#()Tc%lw5TF>gMfQwVOj4>i|qKMtbLC -O1uDNKHju1bO$=I@mqxQbj|qmPdqI2-2vN9$zPyA)!mt7rEXR=-t1+(u`ArR`+2N?Z}*LJ0K2c2MUyu -giSVq^q!oX|C*mUw{6);N!71A`Miu8(=R7{H(=wkB`Nu*8Wd+d!XoFRKSY79Sc<q2Ri<Y*-IShf&-V9 -b%&6;?27%cb&@}&img<}1H}6hR&}pPo>q6`YEg{7NkAuYWwX3QL!ZCdufaN9ROystOJi6E^pcx_Sy@) -o$P}^Wb1dmL%C7(@q2w$UI6=m!d4Or`Zx<+4k0+p%GzMmdk%z#?i3TEMaCU`IC2nzX%z_Rgs8L4jR@V -&`Df*olxH^Uovk^p@(F{zz;}nEt#xdpmo(u!5jnY))6ak3aJ<mhgq-rX(VqofX37GgF!E9jf8GxCg(1 -AX%cNi8<ikc(18dS)whIG)d2b3zKLMA<!T;O0~{qquL5!JP;V$ddb1(ylXez3K>a)Hij4U77#+K*WP1 -_u;~1Tr7lnq{DgC1NBIyU?V8*t@ck^+*SdDw7KY_8kb}37*_fw^-^1ie=Q&pkx;hIciS4u(9k{Jz0gW -tj6YmnmmM!sj153j2Lgns$c=-W=e=wX`3p1Qn}p(3Dr^aJs;IHNKRVIrR`3zvx8!XO$kL7JhV^Z5mB( -xGzvca7|&2&48GK_1g3t~PLxSGzY|XhO%^aeY4Zz|P5wew-3S}DXAWj3ftBon57%HkO+&lz)!jPEEMz -`dbSJQ?qH*INBSVahQD;|_fbS^gBSFF-87EnY(MXO$L;>4;LUu7MCmr-Vv^M3c6W(86`U1JoS&bC%gi -c-Pk<02lE3P%VJ)twy0GfgshX>8D5}JfkuTzT-20PrL+8_d(+>_NbijTqpRhcTiT;xeb1KEcR#@N=LF -u=~rj_{uap&g$H!Um?i2y17@QVdAsLPEcH{EYR$Tt0L;o1w+6rC6GO8cdxQlM*whxTb}8h-|tNXL|AZ -<E$$_8;gS-Y#+hH<cr{*^}9v@to9UPT9!ytCA>X%hR5$IF(HVr$psV|G*(}1(3a8M!w#T5MHW3=Z!Ug -1#&ZYFj{o$*%*6h?^9<8&m{JmldPr_qSAAN-5~QL$ZZw_A@2E+-qgu1=1{aW4O{2p&(-@=4c+rJ(Ax< -U7kL)Lwqi`{$XlK+*r<NaFigjt+){3c88tJ-5i=bMfGeR|Wo}p)TmekinRw*2hK^^lkIuL*Jvd%t+r~ -*ai<9{VL2^+ugbnKLN$d2*UjpR|$TlR<ofV`y?L$VQs;J_HqrvtDZ9T32_t=-uktFX^fpf3hvFSwL<8 -R};t^)Y47D#at9h(PM$A&@8aD$wjvVW3!ZMC2p=;(}EReEKVqVG#Tmjm7W6hGb!hI1TBkKgfkVeegQc -rKnhK1#yf8(>$4-Phrsom|Fpw*}^-U<*Qe(hQVg}Iedr+n!k*h>@`v()W_BG>?tU=u}Y?5*=_C$-apC -BYKFCA7MTL_1~zOUcZ<0)YHGi>*C<rUS-%R!Cifm`Th4xf(d-(V^49M)^E9%iLFu#f&hJ2asJu?5)G0 -xWpJhL%Y+Dam8&yBpuP<>GS4oY2REd$Ln5T|GK9%9_q&E|3MFS}<_N@7T2Ta!)Q%7qRf!AT3d)Einur -X~DmSUsV1m+bN<m{mS`zQA_OD?6i{=MK{vCtDUX~tbGX-r2^su)E(gj>dVe0>YXjI*;SJ@X8tI1G8;x -J@Pq3*o`tWX~x07Q}%o<-5(EgeGv3At8EsTgb5oZoKn)cjvp^ug9;qk6v3X81)nn8{;?B<QbCbHw>OW -wecAclr_=BDbVG<h1+2>74Js@fUfXkwPM=qrMX{pSyqx310L&zET|r)m1#6h&li_bc!)@mt*O1vxcw9 -)O*@-<Q=QzuR@!@7y}*`AE-9lTV>^PZ|5QO&=Jl#}JtulPW@!&msWr3)$qaqOET>9jE<SXiI6i)e%kL -i?oMo!60DAPmSkA<IM#gqLTBzu`lW_rxA@xoi9b93%SlNrs87k^d;N63*0W$(JnP3uA5h?Kdhw=V*U7 -~d(?Kq^>&?hV##>GpOW)c37NIos`^$rqaZbeWidg77CtZ|*yrXOjCN{DwEG%Ja?9R}<lyHJj2I>XMb= -(<wY@1T+e&0wkSAa?m;*qz0;P<EX2_w>Ii^BlM0TngMfX|(Bpr@f;to__Vf;j)V!(b3LC$8uOhxm>IB -`Do*u!^$+9Hy9v&J5-@i^R&83=5&U{sXiXh?^w+mV<ujN=9H*XjFw3`9YNBlQW%S!CY9Rm1Jf$2gvV? -MR2aAQapy4V4AxLJz;4eDP034*6+9+%&T&IP9sK4|v4zT1aH$q0phf|PRcnfbJ?Gk{?%54A2oOSV9y} -bt8Cf?T4E4*Y(lBH^FOn>0&MVewP?vJH#G%$@4tye!102XQErA24V?&0ald&y9()kW-2YO^s8Xiczw! -AtqYDvl)Yw6+&<1yzt9*<2t^ah}TPS<nRX7?<oo(5FvNdt!3pp3&o7mA960BA$W^@pcVHVxkpa@kx?l -{OBWb>OJ5^tnIQoOdO6DR^s_!s71Rl;jaop-<{)5(g<c&KpThRM^`!@Is$ha^kP(r9^Ly1h)N>+QE<% -{L51CZ%(9(Mx4SXT)Eg1fY{DJXJ|HW#hp~?ypsM8`g3s`(8IqP6b&Ryaf=k4FFDLhk!NTUr04kFl8=G -$&>)b7efpsdn!(6}?jm7Cu2YGj$q=2rCa-$ZRS0##$l!$$qrksF&F|^3#U!eZ{Jy7_;vQ8?e&16|*h* -CrBDP)WEWP6~nv-KZFRep__z6s^-FL@_{}>;3vQLL$^wq&%vF~3-r?<bJtjEvJ2G9CZ9GuoqNAN#ZnZ -QDc8Y5PFHi%BPPUAED_H;?z==4NtQ*XXJIlWy!dlrqb-dE8O-oZEd34rkT+2E@lcz`;td-3<XhkxHc+ -8vljqRfz5_EJvBwiU*~eE>y}xP}!N&w^X!l$dpMqA3Ql{0z9id=k<EU;;rmM|jqK{;<7Vm8QoA*-cU7 -`K)533Pz=P`eaXvX?q48W5Nv8PUPhDgp$4)i@0dQ@IrBb@p4k;d|s5+lu5ZLU`^QyEgz98GjcOC*z#L -|3~f?(=X4A4lTq-zZ_Dq0mA?1Ucxi{!N^4R@tsp>D`f5;=G%tMX-5&cxocDiB9o1<g)lqkJb)gHD7}3 -~YpnZBF=P(?cb*HJRL@ZMhyn2WdC#=Yx(~&%?Wp2VM<4d9(ad$)_VCi%-h4&HdNDpT^vro2;gFTMpY2 -88?wn5-@=*AFF1!p?kBo5x!5>CQQ1scXph9)G!$LG|lhRDmeaX1cLxM3`agmUUQ!yp|EN`hkci{OW>n -3lI-mO`;N`#aljwhs=z-ag(&gaDpOh|h<Z=|m+S+8^SBg5h%Wb-kEz#3P*rXtCqnri@LlhQd3^GH)rO -(`V9|B!$?){?Xo#T)Wh0`mjVg3Z{e>hEP^v9bA>7|FtcxOQ<Lw5B)d?&{#AI{~ZqC)jc>8C=*Y5aI7C -7D*sy4jWgWlKoox1NiAv<r>4POm~&9?DEf-FN;zN_gtgv|<L5v9#2oU|Po1#MzOx8gPPKTcD(1Fh(eS -2YXc9ZLPu_Z#%+^dt;@%`x9fg0Q=vT0Uaql$rtx%Z$2DvAoT}@7M4_2KF`F*YEAzWctx5NNJNS@u0LK -o76E+7cmdjKkhivESNw@HB$Mk*^yk}?odGDeCel2HJw-i%+heaLdOw(ZuUrVUur=cTNoj@L`n5Uyg2M -{!@?CKcumiNdcn-$*px`9eprDHq=syEe_!zBb7_feyGMmRzUkK(G!8cRHg_#S>6=n}BL&9})B6{k|Xw -ARt)InJAJ2hE5rIyc@ddR`u^8m*$Y3LnK~uip<nPd{Hpip~#93C4KR>svFvhlSIYM)wn5Tb<rCQ_Nub -O(c%FHflD|uD_}q=Lyoclz!hM@sWTE@VhlNy<d-Edz|{<kV6dlTYg~&hL60dEfBFfOlb?Q4B57J-Fg` -Gmq<7HrC0t)$50!WUINMOSoN$!=gm%V%`iUdN5tz5WSsfn4gmuWpIo+O$F3^{#4C&CcwQWooM&5nx)? -Z>Py;Gg60{S`(s4HBS4w;*&EI5mWey_Hlf@e_lS)g!M2eNq^io)e1;~+NqJu!)s<ZIsW<ZG@uzlGUKZ -DqBFxk1;$0INq<#!nP;qOfBg>syY8Hq*|Ae<K0SwG2;?XhZxQ{UY=wu0*T)TPHO#kW0k|__kzCOl&_& -SGQAThbGcot5uS9`_Q(kV2V-QoZN5~sYgbrKLa=YU%EL}OFgp2xQn2ol%XBUy=&tIMvth|YUXmpFE+~ -;FBrIfv?Skx?8?Y#{TlDHLr+MpQ<--YkyuHwQ50k#arl@vET0&;Y*aV6(r~o&=LfKww7o3&Y4=OS6`X -ZWt2!M#INbm5-JRp{yY08T<L!4}k0nQ&?VbpulVttp&GkQz&z?mm@%kD59G~fjPX|v2>)lN~|EC2O(| -uy>J=hzp9Q@<>_5M3Q235E|zl%<%r}0;()34ggwTM5*>VQzBzEH9TbiI(X)@LW|a>fRAteDTxLN!h?Y -~}V#^Z}$GD#}0~?-x&+SR5Td@D;TrP5Cy_yz9H*vL@T8_S%V|9t~Q7NvA=TI7C;9O+e*P(KXdXH2f&4 -W$`^khKw<AP+w2BW*nUniH(<CSac?B6yq>-lfjn($7QsI29#(~H#6gLRvED4w4NmMv{R!BPtU_)VE3i -lAN&;5AIj6`pEqrHinA8vNx>N)W$0A@TD!s4(TUzYlSg{<5M<r^zhDH0`uod)iHtLIK_RD9ld#B6_+% -Unfzp~`)t77-Q&K?l>^cork8j}zto%D=m9DN3-YO|$*CnYPk|(FPfxa(r`7DQVio~@Dcz=2F&(nH<6$ -gI`2j&t=#~guOR5r<I?#$2a0D~#A<}R3}FeRs~E`hp*Cv7ydIrCI*i{N?r4L(cb%NSl9ut{C7qlbl^| -59oTPaV#J`4+UOlM5u2LL>+;$})(a$D0H0^%f7o7AbNa9OyJ9CBe2eB}(;fQ(72g-s|4<dxOHgJYScL -<k<X%YFb?ibs9dYPeY2iW6*xTqEeldPf@vaRMMRxz5>|cnd!^L)Pi`4$0Dt1t24O)JB%_SIZI)CxJ#F -or|oYLj3=_asNqPV_P0?8HJ+y-XGIYhrrsux)W&l7w7Y%w>!@u>ugz5tM4b3!W3PKJnxb&R%FGRd6|9 -Ru*4>b>MS)f<k)rC{sD?_FdM{d?Mz%MqNt;ItP|qiMQn?pGD3G1F3*DB^GSe3gqA1!0<@Eqp|BKjHKJ -jf*-WG^>Kk6<n&FF*!nUPSg6FfIfw_l<t!Fy3@-%A)8waR>q<)THEyKF2`f|eD&rmmz7W^})@az$Va$ -pSAvE<i$6DI0`#*3C6jG|No}Dhb)k&;I;b9DI{~<RKw5w={wm*2K&Ob8=BPAl6h9!4=<Y8=KsYmXn}K -{nGEQC{qllNUrA`T-v^!V5g-BW-P$7CNShhvwjR(sJ(YUcX2ir!zXy`n$7bK%$4Nwza8QAzRkmmxB#W -tZpOS$YC?*GWYR2SI?fsuEK4MX4LFe|k_U%NN?NE`(yys{c8xa4lga~CJI5U?=4rD<aT``LA1%>w%`o -~SBuZO>{|)e0yX+~J<upD>t|zq+3C4LCq+T1w=5+F(kD)la7x6abdTV3j_VyNtFkPR*R7VA1V}3W!Hb -e)j!4x*FEYizp(irmKf;1OAgjF|mP4z=KKM7V|l;FRfa{73F^Cs0UZ--@u-pJ(IZ4iX-GXH-3w}* -4Mqg;L__)>U%oULiwFNB4qpeqv9}j(7j<tV6?gt7s+Oze4yuFWChl6Qth&TG-aO3$)VJyFp#7K%&Mq3 -)mJ2zK?$i6N-+kS5AK0bYnURHf_z!~GTJC9b*h$k83*c3)S*7o<j(JSKV3q1FmEBYh^X9NrD-nDTUCn -nnQqJp<*xNd_w7Ns3?x5Z5mp4syf)4ni}HscSgEr&Z4eU<2NPOKDAT!YCz&U1%y$2ff13e3+{cX{=R7 -d`x|uLbLsIZ#I+g7_zyMXB)1f!|sLp@Uxt9U%^lo~kyvGsFx~cL<%&Y7M2pGD#hbiKMMxlE^#!Spf52 -&gU&%!<{bmkgoZ``!ScK9c`b!)nVj@egbO!hf;WvYlv*9Xu@qT%?I<s^f~b&`X1zBDuy3*6TpkWz)(+ -dH_lIa|nHkP0Z&#C4Mi7H$lnE(!Lrvt8^xe%Xy3hibG(WFIoV@P&@z#|R2_+QW}^o|(D37m^)???UU( -Fz6wvx@pD)A|q^+Y9r+^Ys}m1Bhar$Oj81bn#6Q4U!23ZTy4~gb4+A&uB31Gu5wG@xp8!3UB8l}ExI1 -6$~+0u8`=(Tiw?!B?>U~Yzi&_J@^xK@({>jOtSdz6v0)mQ7e-;HYzvet7>&r@^c1!D2+eDZZo$0@+{% -X8u+05HjiH1Q+Jd>#X`1`J75s3;$%$~D(<9_on5Fc!>EM(UeGQX5rxV$21q#4bfdCE(tTYBtMFoPJ18 -It2?vy$P2xXiTe(>ak%1~Zc)SRP}7S!1?-MRiik(3&MYt0F*Iz6vHsF~3=^pF!Kx?Y}MG*(^Bvmyj~* -tUmL4>^bX{}r<;Y4M*L;!d)J@Lg$OfhItO+9`n<SS`!ID%t8KIqIDTG?Vtd^ybUpFt&u#6=`NSrI9@Z -{UgBLC&QUH+iVz1S6a$a*&!~Oufjdiz)}%dGT03E6c5DV5ji;;=kN6aR|Pg>gxgCejBD{Y`=mT)H8(T -P5STbFV@gdD!M7{M08cK8@fhskz=sP||49YMtumF{jKGCGmwZ_`In6LZxS{LxjyCIlUn@QB*h4C&ouk -JX6HcAHa(UL}R{VGs6`fR1SB`p^;E`%W*LH8M{OJPSvofeOqU<N}T*9F6>ztoe?k|?RPC7x`w<0`4&H -*{``UHBWkH0>thb^tqd*B~2p$n6RE88&^jF!DAv9cB%v3?_)rFdc4nkYy|vVVGCcC(I-1MBkCIk>Cl{ -AA*NQGl6JD_=A{#|vYo>Y7rpgb3ya0kBjis;bU2V0Hi(83IFo$f8Xi(5_u>eULKK%e3yC3n!axnrfD2 -xXuD?G$<mxu+kdf;(^e+$G7GTSWa&-1xYM2PAC;U3p5{B<Fkp<{SM^XhD;QE6l5;v%&;}JisRX!EUi1 -us$|0Lku>R)WEJi|vVP+?6sBozve(J=*+bgo?*8#M2@baDQP&Y4RC^|7(p7at9vw2DjOeXzmKdpDBP= -uIDKOv+2$ku<H#=n1lGfW=gh-Ey_GnZ)Qd!Myb11NeJsN7Fo5aJiM$9sc=<m`yj&r-$@zGVQp78cXLa -n8BjrJ?uW=nTu(rs)+isgOL6R2``UYOKc7c)Wq$FOJBP*{ObvJV`C$vIc)4&iGz8Y;rat(4;7LNQ=H= -J6@J7aiKgNR+v{CzMcHC#7WSIjO3Ub<6mv@xHh&%G*Ne#$0Kss?n6w(tc8>o@A9+Ogjc_sC*6^3pipN -X)xlNd|=PDv|1|p4wA2tF~)_^>zd@asc=W7yNmZ4d1Y}+O6g^Imrq^NwN@BDEr(s@jz~{^vbE(TD+P8 -lD-41-jwzBA$3!%KPj#XSVT<<|Np4}~IK{m2yqV>m-{r~}>(x~u6^T9>F?7FlwYMyZotKqUHf*O{kM) -{L#!x@t`+(xdBkO48WLia@yNrovDB_5vx9{W`kCP5#qXK{HoOrC8sw^(YK>tEr!r<syYq%Y>wXp%+yv -?q&c{<IKxU4QW@Ylw1QvE9_p1k;+!r=f^ey4!pRXpWv4k{~H1!EoI+Rox)ntmM9DJ0seGw;}}8_X4LO -}o6jMHix@*AWo=kvWU?!^<j}U)d`~`?4j3pdL9Y9?=13yqqAJQ@RIinfaaE*V9yAsx?FJ6qtS(kW8Dm -P}H8>_~ZoZpnt}qgnQMf>i5G+yDx)hqu{wCc7U{sAq`!%?dJ|~L5AC>ddaY-o<G%|E{jKrk=l&#BMl} -C%t=@GYF9CGim1X~jjJsyP83B-znlOYMOU~=ctheY#bnhW_ii$<r&IrlP@8pht9~id8O~W&ME1j>{;6 -Sk&fJst+a?E&Y+v8l4Wmo9Nz-YjQC1_03s<`tMmF{?Fg4W!J=Fs})r070XXp3#oo9yGafdtiE`p!1C` -Y05ot<nuz#{5&=`t-SwiX>ufR($xy7-LDdD$hTN3J<iMtywurkS61AVxADQ33E1&C_b@XI;u_7JoqJu -v=R__p6&dqG+|q({8sJWQDR)Dg2E)o6L{B1{%;Te~vPHNp^HXi0JLT)7T@#JL!$hGuhqsa9VaU!?f#3 -IL&w+`8N0^biGlNiK7nx9)sqBw;QGs!0!U-QZo!NS-|?2@b6zpr8i8kftS9$ZUqlu0%_a(PO0C*j_MJ -f7NL2xX21@h_XWlsXOzInioYW4e$M8UQ62ud{2Bf^hktIba*WN|KHPb|_x<j8_s8SicNi*pged~T7)r -;NKhxbe`1Snf7wS9x1&Dn<EG(sJp7UR5ONF8?1kp5-zvDK39Ir9Oo!g<@CMOyHtfbbOm*{DG@5a*Lem -+d?y9tt*r_E^B8;@k3yK(o%IfIMF-JdyjZU%0t!n9pGKLLSI&`sKW;^saxi}1yKxu8avSHCK|Yi?X)j -IDT3*9cHSY#$0?)VTdZhR8Wj!-LZe&qjmE8PoREPb55}xS@Nu9>N?2A(m=Q^!z@cCZEFJez^G7dL_w5 -!)nWX^RO26bU0ty<auwC2;iY@@~rD`1z!4FF<Yq9-{ap9i(a)x;cvuaF1E}smhRee%1DOQ?m^33|C7z -}!UB&(fIf8W_MQyyd|Ay%fu$q6<U{PPtLkby6~N!4vKkV`K2p%NRolM6XwU&miUjR;sGA}8;XMMYl^* ->Eden~9Co)!~;rXt*`>T1=9eyyoa%xA{KL7mrtC#H&e>B!eXyKh+2}otUBnai~&;caGQ&+pvDT5@-Yx -IXm125u_?3tORGu)lxguP~97K74FVeYH#qn*7yOdf|&af@>u9W!~F@Fjh?sXD_*+N^P)V7^*X02Yj}T -wz290NA6#paBT49Nl!#&?h7v1!%Ve$=G{u4(%>q0zwiL^(|xSW0q!y)IWQdH-(uH9t><_C7@EB#O<xf -@=gVv#+{daU@1;vtfITxI30Lpg?&+aPzvf!0?fi&@9j%YpU!Entc<0E%!#S7lIfP{4Q)XwL8DG3uima -wdi9@;{OT0DNtfDVc%Gyum!PiOB){%-!K|p}U{Ct*i$$KhVPD*qJss7jO0hVWIKiH6b<@eo74*)T>%0 -%(&njy?V!{fSH+t9DQv@ac5+2vVc~YUm`2OAAG3$u90)B`8yv2XM4Ts?|{C^O(@v{d~*WP<v$f5$0=K -Z_x-tGVJF6@moolyqg(IzH~|A^n7Z*F#XJ@}o{NKmPgCtr>PLhJiN1s$F#V*yO@pr=rRt}g~;zadR7w -T>C<cWIu?YkIe7znCIs>Hw+k?gFzvsEr-K<;HTen;9(;=f94mjK4(k(If$v#5(G&jS%<Tfd>PFG9v?7 -f&WC-5@B`To0G>O4?tV8Xgc)5rq?Y9#->RzsVK@?-x4yZx^%*)IOGoH4H{FYpK*2LasoPE>DvW2tHJ< -utTB9H!YSvTyr1UasB^&{N?2_rMh0$^ecC&Py4E#R%4UmMPli2iL#CdC6|oEsP|GSkZNM+QAuGA;B=X -Z&8+fjH6mcEG<PDxUdasK|U)|uVuk5-mJKaDjXdvDUo(An;uj|<}2sQ#uUGsTQgHK*ggC|c=*}Ylj<v -^;i?lhj_C0Q7U!c3}u+C+-fW1N|roLt*CecL%Y(x~>)=Bux^=)aacYed_&Df9U6nq7H)eT)8EM%y-l2 -ug;!sV+!5gil^?J$bwJ<Omi3dUHt^R_QJdJUb`L{6o9P+Ye_eowPFi8s6C^kWTe0;>A|$IJsyrpPv5( -|Dg*eQ13CtU6%%Jdw^zOw|6feE2P%#?Sgg&XgLT>L6@EQ#^0myHP%Yw$Na&aHi2H`WzyU~U%2>&v6{9 -ey>O!jN<1IHB=ruEa&yTkD{;CR`81uW)(rZ0-{xuBxi-;9?;c(UQSy)}(I;!X-J?7;MMj=h(xke_IT` -L>QI>6X$Fb{RmI@mr{Y;!SDM60af8StYD%BT}5Z~dqd3oMFw0XF<^LqU4oBhALN7PS$iBA6c+u75>DY -_@ebX&ssaChhZ;So9#eN|5Wxp8_r{N?QQ>FLv7@gIKh+gS_X?cUMb?PF;2X!qEy{?C(t{&M#8^tWG6f -1#HDq*GC3mw-FD_s00GH7fL}RD67HdPP+d>N(wy9z1<Y68M*L-aH?|KQHi~m%qhE$}n#iRi+2GZT#@X -Z2&>8pCBZHC)E~o3;3i)PXRqzefo4Ym|<=-bwn%4L3CIFn!a1x_<k2|*1^)G<L|?9meq7rp5p6MRIaO -QFto#8=n|&zxA5`kspEF;aLFikp3AA=Y;rZ$4*^@vlE#fW^v+C_gSMYt6Ek8w?<kADav%&|4xM&&y;c -l0Mq10B!jy!j;oFL9yc}F-YV?E+%KZjHhEV+bTJ9knok7bN|Hjw8)14sr)0S0qivMYwxJaSe#Y5xUOn -XM8+i0fFE_NF>X;vlEY?9>SWhan|B!HWhXGw5wvkiw~xAAr@jynsnZp&Y_MJ03+YxFFfcvw)x1zp&>1 -fqP4b58D{uRMNO>C;oExMB`+MR+_BopW}YJc)JNl|H=ZzlNhdw<g1Gc@r1`!PUoo_+e(aC{|W*eXS){ -h|Z{z9LMbf)<2@x$HxapulWc)`d<E?)T#LlEq#za<EyeJcjuBM+&eIjIl(FmACxD!pb@wo9dsiXT;8M -=riiSANn5SnpvK_gw49;45LZ3~&Hf7qP=vucd3GK<&kdqXlJO+v4D+POtGJd-N9?N<b`%FdMaktE#q- -p-E0I05jFgyt0IMwcBJ?SFja5@-x+z1+FJScerdRTw9*BChO?%e5oLpkh!4<ZugrB;kNFn?KQj8N68u -3gKD?d0^Dswsv@<6_$El@6+&fHeH@YzfX$ISxZ<uu|T3*4Y>jS6`NT73Kk1X$!mHlRB={YYj(oySK<Z -+7@Wgg*}s_mB5?_TP-*`OS-$9emY|R8SVs-9H$=+vlSGE2s!?Tv7~9jX6-T4WpLVa=@XaeS&_7nA(7b -d_1{I)PYf5PiTIf^1Y09Czf2p#ZZKo`WvU&bEj_T!yfJI9v*{I^#9)P9qxX;9BHYnQc2d)BtaZUR@+^ -{WU>m8{`L0J_~_l<5+-RodlJGj4-IQULRWujcD32V<Sm8yZI#T&%=i)h={u+5(y+DY%}MOB+<bvv__5 -_*q;bQ212AbSY$Z~242$)}1DOX@UYB*FMBr2sSS$e`v1G1<y?+m}L(v!y2T#k}A`&5T^!h#U&DTF1`q -6GHx);HkAJRKJqFR=a$X!#+s{y+{W;Jj_OX|AEbn)ZDjqM{eU6wMI1NGHY$d>iyPdkc|1n(F#2PoOue -~J!2rlO7?N+f}~B=~r5n{hS?T9Mx7Y=9M|!dS~YynH^ieJFGW&8o)3fE!`u7&kwMoPW2Wyxy2%JDD^K -f<_(egd!&lffHL(zG%)?L(NFG{W#dJfv+*sMvZFOc}h3TQ)!IRc11oYRtwy!kx*zXJS25a=akt0j<zW -QO$_N(_e-g}iY$0g?<v}9Pj%-R-`h0Ib4^Jw>x(+MNL?L-3fu5VD<RxLN2u*3ALvLTPDcz9bt#)Soje -?NZqS%ql_h4jAgHK%7$*f~NaCg3p&c5o*0c1K-u)|x#55UG!K%<(-kuemnd0Ey@h;*ACk^G>q3+9^sj -N((`0+|&(`_#FljBJ3EM#D|5y67<{oxxDm`=7KgKD9nhO%J3qs{Jg%6AvQqL*Tpq`K_Oy1=%#E27PW( -gKzjLR0Sz9-26mJ|U+)q6A^-hrSh~_X<KoR<H5D!7-f$<RiV8sCPHP43juq67#`;Bw*}Lc+-~HF^JNS -3GPSMm^AQhQmpS4>&I8=x&VBeO{ctB`SDJ6<_Qu;fTRTl5Rm!t>8CF#k2>Y1!4UHq6o8>b#hS=e3&7X -MZ{MgO0#5BCk@_F+ehx4|l22@a;An-3O6>$i219`Zq7%dy<<sSyKP6_6M2M0`Op6hkxF{_7ND(EPG^r -6=6x_q}9o2PBr=5!{7-&j}KqeQ~QWn-a%ChrCmQRU=Q<Q}yjWN@Nz*3mtFjI?JL!53jXe_e(Kr6M-+J ->9auCwAIWtPuDW@a^QtYl?`lH?}~$ec?|swXgTlSOq8PlxSNwbk;nctC%A`)2*{U`JB@u+>uQBecg=0 -)`ZDPxNt?SMv#4fcjbg#asdh)1_1Ts}vuMHr*{oDJFX>@J+w=v=%#Un4pafO%zV1mBxi>-nOlSRiDED -A75?$S;<#C8iu7P*e9~*xp^$ifQ^$03(}!O=iSMs6X(qZD9B{oCdNyzJcW!FMgiNGruA(a<=$Oc3y<e -#wqrt$M#D1g8(Zu7a@FzvF@C@}+hc9D{($j*)R-INu1&&wN8T8H$xYCiXnppjGR36JtqJC%!T$z_J($ -ZL%xRYYhi_zh{Jn6Uk6)Qu#=rVJKd$8mxXzg@+dl0VNQ)}-nhJjQgl}AuPEY6&WD2xsukj5FcrOc2tF -&e})ufzB7}q>c?l@-89rZP|M)ch+rl?U!^oC5V1vO}c6yZjWWDJOlpoasx(=-L`f|A9d{?+FGd>MaXP -fP`3QRS2)nIO2QzRXG2QiZa0ny-K~o<pY6f=c}8aY#3l9Qo6l_Yd$(OErHLJ@3?8nt3$3P%ZL{EnB!) -bRrH>un>x8kurF&BepEg<285Z=zDw9G1m5}zSl`-Z>6|TzQkx!-$<T9)T_c~Md>dps5A~<m$zumk*TN -hE>6=V=k;BR(e(hB{_t>jXaDeP_O8b|T`e@j3d=>oQM;X~gQI(2d@Q-kp26VDZ9?`?s!=LZJaWShs?d -nx&}`dYfdtk>0oZF*kM0nHE`L*E9zBWcG$3#|t*QcaAm@^#fxN&<(|{`JLLKbX3r5dqLEZP#L!~y0=F -#`)IO!xH!ORD=X6PovX_{v<%r6vfkp+YsW<%8%N(9y5&B2vQXxXN7q;bY`5I1c=UPx*DG3-}?TQ$JJ1 -8rRcPi-IU1rbIUvwn<5K??|nherT2FDYoJMK}o76hrZp`OOSvO!1s(H^GWGcnnH^G^Wf`b@7iYsB6r% -J2S#-HIWZF2d|L3e;x2F0cejhU@|^^%RIl<^6x~I?_@CZO^Po^ZqzuB0ghU&??xjJJ%jD8)vEdaoWoq -iBe`^42X;?LqAuPF0o7;Rya~^oa|u+b&52y!$dAZ?hE!))g7Cd{C2aO^HYsS+!YwGC8~rjiGaxS+mrg -LhT%Mw~g4_F3I=6TkkezUK-mktdOq~IqWOV2nb1?SBrh9LD#h%h_ulU8713y%ho$TH@fbyzO74nQf77 -uUTF{e;!HRk-|p<~Xa%Ufj+m$y!g(nAKT@}J^Xg9kvp!}aK)B7ibVv>Nmz>?WMl;YBR%XtxwwT={4iY -kD9hSV5pvu@~9pLbBbt0ZKCFMj7(^n-A1^K}y{<=Cd0On*($;gIhj!3l6;1Pr|I2@Nx)W)QkQg_6aq? -X?M+gafk>D%xY~S!TU0UR)^y1{(QakhjYGyM4a4CBZJ8%0u^wl6!sQ6j$tdEh)RbCY<?++L6p<YoOF! -Y7Y@*dilRnd4x$qUI^+9GGYVmF&fHTVq}>pXkYC<}(SWa9Tqaqx&)6kG`6%C|b2EYap^Q~aaA{$jT%Y -mgB9j?@J|qE3r!O){5Al9axIO4Sn{d&<bD@CjtV9!s)DzXFx|!WboP?2<wF5l%ScW@lqbJ}Hvy5(V15 -?jPc_DrS6V%CBXeVZ&qeiYiA{F^K{Ygt1YEO<^UDgJXDSsGB%;<Wk$AR0$!5Fk-$q%tv!h1}3N7u$By -V~DDVuT=j5*<zYw@&yLr@1GITp{_-=(S3E=5uoJ#<+^-EZRQZEDyV80R_?mVQU$6o!<F03S$bLKoRS1 -W@EZ4ENIU11*tMeeOH~hKq=mH>72bM1)}PfA&sS5oV2lResy(KU2Li4xlW`C)web_kn&AADf8IeA?u` -jPtNPeg^nMUO|mbyx06PaOj6NlN!6hDq+t%VO*T@?ExI!<93`N8{l!Hup_CJ8aV}T)ElHhCulP9Jq9` -QWvQ$es%3+esn}teHkyUsoeJ<{u-elTzbHh0pFPxoms1KNRRz{?ml!fleH~Y0doHo*6%%pi*3m*nbC6 -nlm-YmNbUcG>Jwz}R*_c@gADN_UqkY;2^t9{m_#X><;0yc=Ui`Lae2meXuY0uZ8nuoFN6r)^{23R-Hf -u3Z%M%OJ;=mIV2OiH$l*ONu1)^-vZ5lD>4>kIa{fxE%!Ea#+yeZD-iJ9rVJ8lwlSk1F*ech0{C8<gb3 -kFZ!hMhEEBuU%WE3(cr=kuT~igM_XDkI#r*7X>DRnI(nFNjaHKy;ce)qiFduJ|MY4g`r7c(vkUc?_l> -He>LOTspMI;n&-IUULjxLoo~nV4UZ?oYBDnHPR?LEiZJQLlpKvAe=$kbJXaSRwvS%?4)}mO!-p>x{1+ -Yg^Y}K&tOlR6e70&iPgI1%{d{Z{i$XlIglbWU;R*)FwTFJZY};j50(4q*ZQ{8E&=(Y_ll{zh{F!$Ify -8*HUZQwnhoW4wBlqbAc@iA#9t5v8Un&8!7MRx*aV<(qH%)Ig=IOk~f7Uml#>Sd%e7a7l2UZLOt273-0 -+nuk9G^YoyEEl%vby*VZ&lP6gy9`X)kIGN>BL&l;`Oac69-lZUOG_+QkZQEbhu&W09cY}Wj(k%*wc0p -2Or9|c6+lRc>ozm+-Z-N0o@pACRM6Jnenc`Dmz~w)V|WJNOF0^<#1<*TapTR@YRGPe7B|uXw`|P1AVf -Zp3`A=y?9g2uXn%Me*XpoGY|HU_Kx=t{}C9MPJyxv3POxzrs3r4D&^kgw(9nqw^$2{^;@+Uh2-a1RJp -r$V?K$(e-f^H@k!6M^_X9U`N8$OnAfBh_A7l6l&uEzdd$?_9fEX=3SJl#S*>-h1g0$Tn6Y5gwyh3sc8 -8%8kBpq53?JHjs^Y`smOTLn^xIi?#YWQoiMyAbG95V8WNTHaC*5^C)V#_;M^ez|s?F0Ttm#TLoG&W(K -8F^0l7~{JM0wj{LYro7n?rP<K*4n>=vkHx7$^Ky-JHpp!8o+ZbJnmI8+GvH)Rzn1p^wudCPxXoNf_|- -l|~a?a(+DmL-HGStZFC(Z7}0Ssp%@N!T=fH?~A*TdAWSNeB|SLUG)1kAB(~o)_tB1oK_NijXNdu#qT| -7>zst@!twCTW*4pxoT3Xjq5bA(E#R>GBoF8^h2D!1*w|0+hMMBg!6*vbS*_xuyEA$4$o+qWn&h)CKoG -N!ho!D#SN@hBpRM|2$_*G_B^U-Nu^~)T+vxB6DE}2(>YkxNFiWBIb69^nGA_%;8Ux@!6D$|7`p?r6vz -1&Wlmc(H9miE|-mfD6uP%XCtALXWv1dg}(-9s%u|u(F5oi*0kI_~C6-9v@LmFUATW=xE2Otw{q!!#xW -N(*FdgVc;?cvg)fV+=D)ci9zUq|V9R<S-Xq|`<Vn9P1kYG<H(U(b55v4A|NJ6(q@;U{>l=jA16<oB(3 -Wj>Y64j%6tkC_9}w=(q4KC_d(n`DNP;S-7`h(`$auJZDLp>9d*h1m+|t$XCRU*@%v&0k-??yGOmV$0} -ZPibd?>V=7td&?uaJLSzB*<SCYmFq`QV;HD@nOVVuhh%GbtPXjh<LH&*=zwC?(!6<3?Gm&+EE6UY;o@ -u>a5=ou#VO~ug!%pXmB|?`S(aBY)<8`?+oNjj+IqaE0#%Y>Np8|H9adwTBO;yAafy<95SIZmD-$|NX< -L`rlpGf3o2Xi2(1K){cVxz)6-8~L9Wjvmkp(YI1DyI0GwKgi0wDpS`HO$IbfV2wGPd)iLHQO9Hgx!B` -waRu&(uY;I)3i?W}IvWd~N5DNnK;0-z+Q23g9-kX>whwC@K$FO;B~A8T!N6gN%oS)ecc@=E)9J^|(F5 -MDai9Sjq3yEv{3(6mWs}FsT~r;&PpE47^S=mx%}4U#`*clwDq9(?I_TonXp}Nxqm0lKV&EM*(muH(<g -S8WI>vh}S@?7^5Buf8-gnM+g?@f}A!3w0M&o=)AbR;yWZhCX>c=3llhLdx}Ahm?AVN3qj*AL3$bE&o^ -1IkZ8GU;DR*Qcx8AJi@<=iXtK#7Pb%yWNt;C9+P5obEl?BE*Q)U~YkC^x*vNYJ>Wk0pCrLiPN`mMsJt -6B78p-PQ7x8E7^`iK6!EO8id|BSsd_9H=CBxK5?M%JRiuGhR{p`~q`s~y5tkHF#C);no#^=d(5`6sPv -+-x24uid-Npt+N`}VU>kB33pw0o8S>g5Y44sB8F8>WC%Lyki_B)6O524pbRZ?QJM!Cght`Y@p+u8}`# -=BbB@Q-PLrpo=Tlu*w)vL!qvbS_DR)9T}iW6isM3P(tcDYbk9sh;o~`&InHRqA3<ykfNlT4SoltYWDI -)7t&{+{ytbHRw}m1Adj373XW1vG&`wE%sPnEw#Ku7l%F%dQ>0rRAN=F^_5Qo@>;0qS@xhzz<8Ss4->y -o2gtWNHD)R~i#bNr@Ne=)?IByINTK%X@e53>@xE`tl;bo1h7b`X9>iy%7Kk_M+<Q#*TaUz;h;H%)>F| -rsjEW+HzIWsf>yiF!3SD?(>&%U_EA_oUM#L@9XNO;Un1ydm2z#J?Wuny+Q4M=aA+V6`@61_oBc(LI4_ -bSa(-mK)|#heV75GEb4?@lC^YEG_nwxl6mb&fnSAvk<JOb~8_Miy2+>Pcb6fPX5$>Un|}nn%b2s|N@I -seysy_0=lRXGWG#p{%CDe6VH$AwWffW?)=I=@86=k^0sa3$WNYbStha4+HT4T|d9|iY_n+NyLTbP;XN -nSw5IVa(9D9mAwAc99_Rni63}#1-iAqZfbfjzxd1<*$x9Se*{Md+lR~rU%6ZmtUjsNpVX_E;z^CA8Z+ -*U+~;g{2gGq%+fqk{UV=8mSD^d0AH2k)fDwL$wU1b?2X;OKJvO1p{m>B!1Rmc%nZ}af3kEl8+Z}*tey -Mrz<i(Z~D6<y)AfexU-@8^0%qbRO6o04#gcAqCd095FxF>TQmGe9W&Ef~XK0cus2IZ2&t5oqkno}J;g -Q)e?iyBk{npam8_Ey_RY+=nRc#HOz7tcTa{L?R9e)j3-Tj9$W@B%pP&o5rQeEIo{&6l5j@#@phKY#Vb -CcLDTF0_qT#lsj$E<_X1Cpi6Q$;UeT*|-e`@3M!LuDPmMnJ6*EWid^vsf^FMP<LHHuJFV}jhP*_qG2) -2OJ<lPGr6Bs!!bM?tNb`(w%{WzlN?Sp--&Tzwe%UcG`YKkWy5H!Wh{AR0M5r%Y9$Q|FzMLol=qzAF=c -6P*=R<Eu~tm+@QV8^!)N9$W{PuX@g>l8z65!ow2i#bWn9*pRzt%yfI(y{!s)FciCZyd0*OsM9$!Qcb| --pTCusb24C_T5J;FQLhp<SWHm%<}{TG^o%2Q`$e7t@5?e6jTc%PPL?R5x2+Y5s&QYt_>8OlRcl(tO$M -_z#1(Y_#cX1Ma(N^70ChKaN6TRNHa!DG}=5z<%2%z!kD#=LROOQvWYyaV$6(azhi$I!v?@wdlgyn-Xt -`OA92NCGd1Fb_sg<zTa`pY%0%w(|c0P)h>@6aWAK2ml;P_Ex8*GUI+3007xr0015U003}la4%nWWo~3 -|axY|Qb98KJVlQ@Oa&u{KZZ2?n-8^e|+qRP5^(zp&IV59>kz}W7v~kij>-J_(>-xlQ_wLH7E=58z8;V -p(O14@zzkO#0011$kZ1-{7vu<jWcnk)E!MrfwKI=Z|vLFqkWIkl8V%Gf(OFH|VefBn8Zn9{8RWSRl!v -?+npbNjAvx_Uv&NjtWny~Y9R$TiTXJ4kPB=n0YO+4s%&N=(~-P@DX^AoSQDVU#x?CrOw7w_MF@!iF@@ -6WLi+I9B!_B!tt%a|{CQc!P}&X~_;F~5nXF=uO@<xmR9u{^kfW^9?I>nNmx)pD6;1)HTAJ3Be+9v$`E -PR@(fvPjc7?*{2&2`~{1j-T^|pA=D`!So1$PP8C6aXOzvp?b}Dr!&ja1@i<TCd>08gI1Gbv*fvKuqvW -hRWJQ4=aY>8w2CsCR;M$W_;Ea$uwyo|PSb4R$I;I`{9d48xlAkk#xG!+ndNp^^<#a_=YFu!I*5Yy#^- -XLT60y@-r>7MQnJM9B+JqaJI;AA5p=i4oemO+XD|&(DG#c@rZRgnN&E$$Oq@=q6U2U=vn^2V@BMhi>C -qVy8n6TxS5eO3pP#T*)lDswhl_+QmjJhfFM-<W^hX{P5?07(Y%+<GsF+OboX0bl<+2KYu*92)1%zqj_ -`ip*OWUb6f@LhQUj3y~T3b7>+5#dR);!9iBrp6V;5M~)88BhY8|`AAhz1UO#d@6*WeK-|Z{|liXQydV -?hzgeDq8UFLtUgQSd_rN$yZaNj^$LqC$N6Ohe@>?<UnZwte_1R%^31D)jI6av3RSus?fTCYKctXCrMf -`8Ukd&<BT@k<IG}@nK7D<)`b65E>e9Iu?7vqMYD=Lu-CK1T(DySOTO#FC4B2}5)jTo028>$;WQX=@yD -b5ax2F3?W1WJ+Y)8MO|)Ym5t|b+XL2Vs?hDqy_`Xo*_k$`l$yHG-hfkk|X^?wM(mP(7&7Wp`#xo9^?k -Ol9f02ef-WSpUKwbIy)nuZfCJF?1H?YD=TU!)kQW;-nTYK(3&TZ>4Y`8te>o7R&!O6r^QqeUej{zKtw -!+psi9Vl$_FIA^*_05Xe6q}d3?vR3aJI{jvljWGqzBJEs}kf=X_$gmie@oW5Ra#6!qt+kQNp7*=MgR? -h@}AZpO1PNmKur}Qbj2G1&8GfspAA^<`-#(@O~-hV7;`4EcO@E&}VCx1uk0-*&23DP-!viRco79Mw^$ -%t&Kop1c+Ay<Xz28=*Qce8?ElsY@baxxVZi*E?lOWF~_git7ESM_wivkK5B3Ns2u!PwS<LI$Z~;Ln#3 -Dcq@~T}#|6(4Kx?h>5E*c};)2L$DX>XK#+s?>bn~c9?Fsg8X=-ept!f@L8EqYtNntw3rERLLvPsH~ku -P}=%{D**356-es=D6Gn8*y%p*|T6VU*<AUAVzc#@!W#L#bTz8alMGj#)+zX4MD2QMh2G7pK>-sU5LcX -hH`t?Jn3cJjo+kSE0_MT&*eo1aXuXXvmIr<TEgl!2kk;lOi`Kv0vK7;q*W7mj@R51e$`a<QOdxhja-m -iK1u+M76>mPs02fM2u~DPb{a|NH$EDL|g!B<1Te+A8cvfPWDR};L;)}Ajp7jAt7sR1=0Aiz$DTpgiDt -$o!0*7cCF%&O~Gp+>ofA>k_T<>%{?*r04L3^ucF{;3!G~({-r+x257~}K;o2r;C#uVLR3f<(*|Y@%|X -G;q8sF%(XcxhyX+!c@hyY?*9!Op1O*vFAV<J&S|>u35a%i+TDv!Qt-Vf~Wa4qo+t&~5g)5@omRVl|SA -&xgWZW;%E8GG^S@T3`R9MwkxCfD%lgJ&Hedz<%jo!4MJb$?aX0~l){|c6~%_kw}!ltg8KwO}nmeNoTu -W`BZq44J|tqt1ySIVERye$ET=W^a9&w8D*{}2%I7plXM;sL5REIk2W{@h10N>w5WTIsGKdKVRlb0J27 -+(RPS@L$ru`&Ua}eJ;^V_r9vN)|~X(URRj5u9PBN*+WPrVVJlYJ<0`-3~SyTYNiIMY#a2MZS`idwmFs -A&Pgcf0L?FoOfLJZ0T5-@tl4#uqsp>TERk%i%){+c%|cQ<CfQ|I6xm|&I?Y|X-53RI+7YkTvq|_Cf=I -i;+-b6qMAjA?n&0?AF_B|6ZSfq;FlFLu7@{+;y9{V{^<|`~EFJa6@K0AhXad&#X*EQxV}D$qg=qQ5`u -3&&MaIJ;<v`=x1Ks{yxc&LR(d{RzMxl%^HTwT~0fB$NYYNkI*un4gRUc=6zNgwbJ2^W#>P@~sd4K-y+ -tbPW6SPS=#Ze<z&&>K^{o1|^4<0%6$G-I7xAVlYZU1(98{B4rgXNC%`c4}wv!J)VOhFaOF8Chu^@AWB -*dxFD^PBGfUWQ{tM|*Q#1CUS1A0|31`Er7jgVnH=RBqb-3n*z&!ILUlG?7AXQFqt31y0HOuUSz;x!WY -jd6ur0h|Izhj}n_?wW#a{kfHY4A;q>v!6aIOu<`O`92H<qTT*(1aS2W*$~gppF-sxe@NLxXk8yMLD)i -+jR6B&~jy_E}N^e}X=gSoA1OP!LrctNr5ZSUTK^3Th4nXZEYL14V3Q37<P!&HPz8FjXU00?3-mpIq<# -8H-ZC%wIjuplP9uy?Xe3vA@#`9uqNm>(aQ3byNTbGc>XN5EZCJeVi7WlV=7IpZi0*)^lbeiZk;DQRRu -tgR8E+ONy23Sz4;Xx|`wj(U9Rn1jIp2K2fJL;>kT-|L1LlQjE6%dr12;eH7MS)T_IokHG7#<S^={)n7 -;0L+PU#C%6gCk9MFfKuOFIWifcTmI|mrYj%j1YiqhFwKlLwHki*t`KJ!=B(pfJ;_$mLiI46ke2v(H!Q -}Vw=#kfl__Ba`0NSk=nf))vxE$quGT>th@)aS}l#(^HNbrTyZ}FUsi+dt5DsP!xEuSz`HV}=%RTrixL -1POGpIxvw~;!_yw^j)&lp`m$M1koQc>|mJcRUx9?OufaF%4{az&>8pKi%ezshv8dgCde9?Q?F;JnZB) -tZDr5~7Ikk<nictP<=eL|i=J*a4ITWcc5-Z!v@Iq6*u+Q>a=5rLtzG%c1H@`wcnRrghCPq~^@m#ibTF -9}PR1TR^~E@9*%bXPC}D6dIU9x_fuEJ#;nWwf_(K52h%_>$mzy#Ymqk-jP}A$`NI(lo5**7pY5`eWb= -R2N2?VNLd+((CQ%ZM~lU=J$=dLw{htPiyr-?cF;n-!H!X&u@po!m#$_i>51SK!4%u*lMh_&lXV<EmjL -wT&GCZDNNJAu4<_^Ma<VcW($mdT={DhDXJz1xdkg=qOWLK+E-hT0F`f0TR%N~xL>b?MbFWL2ZJI;$@e -qQQciI-WbgX^+sDx63b#6VpMj9KR?ZU6F)UD%!~gXD2UQIG@p|Qhws!mMAL%vF0$f9|e;BZra+JyVL2 -M8(AX5xUAAs|P{-7THwm*U=<sEs?yq;5rBf@A#HgzEa(OMg5RmBE&8(!u5;yUH4AOKX#uG_39{1FDOq -})W%>o-_bVnrLS+}Zn+_a|RZF5Y}~PF`SPk4O?)Q~VX+uZ(`fj<&|mZ#xST!}`g_E~HCJlhVhga91s& -LB3;Y{SqN3Vnyv6mu=(-6!<DK`$o)jBVRYA&bdKm*)-58BZ*Qv-hdU2qf%UV(?q}W?J<CZrs>8Ig*T& -w%u*nEi%3&PS@Q4Jv#gp3{F4s0==8>tB(2<COFy&HTEvA_JMmIAbED>^4%P(sO0Sw5RmXZ2|H*0`TB$ -len?@j5vW-<gSyC+$1^8FZee}a0Vb4uS8<|1MJAymH8iz7d-IKF5QC5z1V5uN~1&lPe(oiz0($!)rO& -bEt6mapkfM8&D)>=0>r3_Z)Uajf7nGQBYaf}E{T_NUyJOK7JkfGMO6u?!S6(J-R5KQo*w}Ut$Mx(~oC -~+5o@RX&3RHHutF1rfHUrD<IkW_sKWQ@^aXV^7wh{qP@(6~wMhzD^}ORF;GX0Ycja5{0+lwKWcE$gAZ -){taPjp(amR#rCV3`H!6HSfnXO6(Cz*GTA`hz`t*ZsP_$kqJ!cUCt6fI}O^-|0cA3`Tvl%WtjG_psl& -TO!_vt;BSQKtDTtgpZ;2Yl|FStPnGt&T?#;b9u<tHHmXejcHU}(vhAFprn?_RD;48~U7?Q0a1!{gqfj -3#`73$nK`Zj;!7H+3$3J{k8mBjZvB*8XQ{)=w|GKcgpRC^BvP%1R4fR`uyF95gYblmp$FK(5ED#ZG)% -f>njGfv79M-e1-@HBf=H&DO{Xv_0+u8w&HS!L+<4-IHTtfWS_Jg5`MGDqs83kCblAy>Nz%uKHkvFz4L -kB@+R?oZa*MaUc?-XNEJ^15e3Ov|~O{@S;cf1p+3M-&bxErZU+xDI~m(C{wtu~}2EDQ)IU<Ip)UJcON -mQw5WW&VUtg(Sp*gxEl;?9m1;v-x@}s0V_Bg&hAfaDOGDdF@ogXhmE^7@y8oNsjI%dbdr?E~mC1&-`0 -|dF4BoQ-bNo@KVCXz*e3wd5nonP|*$qBcxP)3s3YQpmpk)Sy1npBeY<T4pHc5VI((YZ9IF*3tz6Xh0p -g|X51#{-+lSzyMNwexBM^~e)J}=V-9vO=Y2WT8o5vQ9D8(mIo`qRCA3v??NeSwaOG!h&^`_iCQNRdEg -V45ma!jj7R522qpP?D+8@bI-fjUy;dLcj5CpEt>383pynpw0a`yfN)~0^!YaI4gN2>X1KIfpW)D4{~6 -{89|)8C6sCZSS$Ok7iUdO-3nNc>j$n)p_w$CZO<k<v1=6H~@8R}L_R6<aclK4GM+xS~r!Ito>;hC1(6 -nUqv5PPjn7;)0<jFxayttP733d^NSPy(^22gBnrP(h~$V{Aa1))TuheKorzznNTpU%!<IYt%76LU%Dz -7UR{!XMN~L1#8mh1%GkshYi*@vgtY~K?R>jTkyEIvihMN_71Bb&vc|!xXi>#xM?F2h+H5((u&l0>MNO -r|tK)5H41xV}*f>;z3U$KPGt4EuBbZFJp0z2B7MQMTJHuV!r?Ss>!$J%=IvkG2m<zHMxIqcoX?QqpS& -BP`(rlL!J@H`VJ7B1YO0`49`y~E?H1hM@pNrs@1YFiOcT<bZ-$FxkV~JwNNJ*$8T<uAkc?%c97DAGBE -d)WqcyVolhQy{Ah};GbmJ9nI$o4uWQI4_?#F5%SyVB2U&V(sKo6=1eqUWXHtlDY$?I}zE#4E1EJX-V0 -^_KBHLA`e~wn<kia%naZXG9T3CaXh2JMy^K5>-cFGK|UM=mQES2M13G{(>%^Viq*U*8#0L$8fBEkZ5D -pI$|x40BWa_B;mxF-wbtmbx=w74Jiie%i}#%gE^%^mZTB48BBtRS-NZr#=Qvc<Bip6&a-uSdsU8}vtX -6U^D1Bx^eLeJY;*R`V_y+4pM|T%61ote;tI)MhIdy)&a=&1cp3D1FI;vs`0P2t$2119qFpvP><^gz?9 -h90_*fp5wFIS6ouR}Bqam3q&xmv!&dgsGDf9$wA(=?6O_v=WJwIahXML}CRD!?81zP1|v4M<LCw1mQo -j(^j!a4f|X!a|6ldvdjERf<W>LB<!XU*f~lI*bFBDE!&RZ2VL1<w{yg7oF4vMw_1#A(L?s)}%sK=Na- -dc#eLg^&X`0bdr|a<lZLmt5u;W+Ev}83$6+QaT4MB9M-zK%BAgKX4F@@}dRh9B0wIl6$so36mTT0m(v -!0y38AkdWSu`i8A8e{8GPOPnhP5~R#SAfs<Ph%N{;)oVv9=>$t~P~tU8y5Jnpk=Gp~;*o+dXer5}d}b -Q(`{Ay&(xogeR+f9x%(g4)mn(-FE=3MU&c~}KVh3Rc2WlzIy10hT6o#;`dld(O{YzSC4_bV(2QcxWhY -ynf%vJzSw1NlKszLw;AhBB^LUMC&+8yj67JI%24>F4daFpUg0w}`_Qb=R!{}jl-VaOA%a0y+;i$HdWI -pzVVFam%K{rn2Y3DcqlcYEYdgE1y=jxM{G6jC^F#B476mjiP)AXB<9$8L7`ypNFuc=zBP-eiNG*B1?* -zYvj!KGr{f(K4_c4wF8`<Lm6THn`Uu{VnieGGqf7)b|cudYJZI80Cf6`zVu1YJ+$m$FIc{olEbvoK`E -?bq`^#`!X#8FG%J3xwf^on!Gpa561?a(h;?KunHgrWg?0+(nVU!Dgi4ORvPqp9)-NiXERJv!&SzsLN4 -0_<#Fiso_W0&dlEY8Aj)ydhwS-tW`7)ja0eDp8C~YQFQ>f&BBuTN(PijtpEvWLPM-#1S0rh9ILJ=$%F --SX!{5V&q^I7V$Ii<yHGqVhsSKNaN>=e&P#qjSWA=0J*{8d(MNGvSNyeMM?7ymQB;;g^SnKrk)MAA{7 -x$BJE5l104ZPPjb-0D!mtKYppfebj);KI6lHgEXr7~fS=t2@^s)am`7E${gx*`kO*|~pwCbS-CNt6|0 -`-hl>v`1H*z;F`kKE!;(lo66L<Ep-Uyvr`_o?Gg#O{#atm=7BW7)Xrelv3`FK}cAOsR>0<4k?6E*ft7 -vx)tqdE_>zxcw5QJEb@to6}rR&IiBx}R6dotg{86+1JQ8g_r0v&liL<pS(ag+eot%o!aF?d_MZ<1gQ_ -8xiI!MiZ=9*tTN^hSGP~{Gb{njSy;`Lm%^A}ZK&nvChuoJH`d-5tItOj&Kywpy*vD8lIMfItr8pGo&A -fS3l<jsjoBo{L)eO{tkHdPhp+FGI%!az$U?2O>dLZSFc1k(1!*2o8TR`I;8(b3ALtBX1nm<Kehp>^rc -L6SS46+9;L?0lOG6PY}X%O`F7TuuAP;52;N&$p*#IFTiB=v%JihLaOnced~-7WWl0s!+?!oBSp0x1B& -I(SvvSV8>s;sXl0ob4@d_SEgkC^NU!!p}Y^abL5M8k}q>nw{pnvZwBAsb_hcQw_%ZKAl5}FYJ^a2$)I -%&&lht!wCJ6>8jw`Cx#s8*C|sD&)&ShXaqm;Qpxz>7N&R$auCFzg(jx=&gp2WiWJu<^TaU1j+s?~%&4 -;DY8Yi*d?TsXRYhRc>n(7r!~5sz9bU+f5^rAl`l|{j#58;3jtiFK=YS|p$Zkzht!MgE#6~BHjMtT3Q7 -um%gDZ7X(0$3J%WAi!F)OU~S~wU>nA5Nv4f|t!uwGd0SA}t~rS~)D1>2uJ<c=|gfSy?FfGr#Kf)r&&z -SC*1u$~AvWakNSovbBE+gAZ8Vi=i?JMq|py<}?e=Ilg3RE~@4QHB@gRUg^0yM>@~ipz9ayV!ph*q;1p -f!hkRmB^BSA|Y3Wp;ZQ`@%^k?Li_IIYjIj@Y=_^NeJdB!%vQoR-F<}^7R}af1>e+e1rt4Q>g$fB4O-r -4Yu|c#R$|zCxqq5*|HC$JHK=^Q99v^W1VxQB*)R$U1wy+$?bKS1Fo|}I8?u>3E1=4gkV(cHcMuz=QED -ZBUtY$;^C48>qWnNdiL}aGH*;+oc`geRy7*9=ckO5Rl{?#dTV2!zt)+iaM#S_eb6w*6IN$wY3t>2GIV -X>EtCciP+k_3~GIQ<qgwco&C23<c(@t|QE6;uEnWnq*D{%7)^?u&`7$7O|^OJ8t0kz#&CDY{6)BkLz6 -KMM`s{3B|MR}hTp1WgYwH;Sd=`QN_j-QkkgV58}xq*^eYX0RssynCZq(B|A)|ETPASXh8<}O&SIZq0c -t+#zcr%b34o!nh1ROR>dFy7I2euqE%?7!(l9aeR@96v!JjxkC6<sz6)-=I9CPkYQ(;T(?;YJjF23Mh0 -@&(q}-c`{15{5f{aqs1zw&w<n~88$xmQBG7)X;hgHLi?82|HN6)vQpVJ>t-5|uI_R3>+7jPM-RFqe8) -ZDh5sXdvjMzo{IjIJ-*QkY@2?CG$72=ExJv182;JpdApy_?%2WA;7j@)8_uk}9$ylgHii}QIQ5+&Z6_ -3e54#zHnbljG@XIS^dG8DYsG6%=iMk&=%?K_yiLG9PJ%I~>$qkq|<PoIQ%bd2+EV0%CHS({t^qnPLP$ -<8}JjS16o<^3xBl7~3R;n{KR;;{DlD7-0X6wBVUwDe?FmoVwnSUz`j%F%Up<J%kNS{OcGec0`{2#oD& -D4qNIhX#b!Pm0vjIm_8d>>fIszYYGC4xivRhFa#Ke}U(_Tz(Hr^O5m@0*?cI{QL!*MLZ7k*3RN98d09 -FINR?Z^*r_k9`?py-z9~(NreDoEsYU`^TMxk1ZtlGbL+OPP&P*ProJZ|i)MwZ#bQIB!(jH~+>xJGD5) -gbc*kewDyHA9E{zY$>_|2?fwr7ms)d}Kzx~I_Hz(&+_@IiBfRAqqhg$r^ZC;bxdWu&5>_|J1XK<Eqot -mRpE|qIK4zBt_p(OASXe?nVdEA7iOKP_+OYfS;*8DSvA|i^aBTIggksOYyRHN}&8d=q6lWpW9$s?%Dk -*nlIH3gxr+x0Kct&$H(dY!0mU(+{v<fs1#uxay2jId_h`9Dxg0|XQR000O897^_9m6UE^CbR$m0A>LI -8vp<RaA|NaUv_0~WN&gWWNCABY-wUIcQZ0BWq4)my?uNXMYb^9^ObaxNqT?;0tAQ<6bx!~h>{(G17t! -}f`bDyL`cxPkR8V_4Bdb$fn+<QY1&bDukN$%)q7>pec0>nv))xc`~YScH<Ku8K*hMQ8a1mGJ8E1)GMF -L#oKxL13FzLv?;r2){paOJy1S}QovJ!@>eM+^r)sKieT*?N3}c2rRb`lijP}pT{PTZt_{*8`N)Gc<## -@&hG%SDXl2!gYHWzMcxc4Uwx8Gg(<J<4K=U%?>Up5vt2=^4;aZh2z&7Q)$@7=KR%IxgSA|1zZwrSB5c -YJ+!@-OYOEq6Z-??(n)cfUm6o9_NKeOKK58N8nw*Le3YDC{?PpP}(i9iG?Uo9X+OJAUj(eE+EKZWqHW -H&~dg?63bN8Q0Ai4Oxavh6zL9H(J~ci{N2{zfPSh_-$ku3uB<^$v5+YffDhKLL($Qn<*f|rrxO+{rA) -W)PbTjFaw?+sNgdO=B^B=%5jD%`0qNQ|DwKvdNvvUG5D4I#%(;je{@){5VqBPAxt5|+;(NdhTHku8D` -BDdfTsrzt=B>gL0i$YGBN|>oCTk;r#pe;KElnY;O25eABi<o0(PcHX6Q<uVLd|_X6M)PNM<E=lvesl7 -HO7|Nr0rlYgt_KCge>mrh2_Th-}g<o@09*^8NASeP6f<gfMnA;qiaEr+B%S^_`Ce=v(-0*v1V-R%!!R -)GyLYNwI`kT!s{hwEyi-$$Gni+KAO#EBn5{MdhkxVg{FGR*E4<6_4CXUUZi8(Bt}A9C5;s$dNT6GN)% -S3#=zk+a?8(MuUdi*=KYs;Y{w=LZaG9)s1YPT1cfPi8YrhmP3%-yt5p5b;VcMLdj%UmW=X#LgsQxtjI -a)lg-^%^kLca~3o1mE@9%3?sg7g_ci!8KdM32P+umc&N%CyV&ALsG=mHyd%ff(>9BJ^SnNP7f>bSO4w -C@_f$Y4H72CSe)3x=#@^wGagRs*-2kzYlt42BMxQDqhyz-W?|Wx3%#)IfSQ50RMbhd%$rX3R8ckAT93 -bNel%oOr%`oBu1`oM+3d4Bheo{usR_KWFljQ#5sL2%%Se~p2HNJP|IY24@UD*Nh#Af!A_;`kqTmv$c1 -F~tj=KDoFKbsce1xg76BxeeS2B3(OP%XLN9(D|IPlWvmXoe*8xk)`nyZVY<0|5&ZTLZvPj+RTzHYDOa -xw^+x-5p@&Ruff#{|WIUhAh@fI)aVyVQY3zrgUnb8a`a8IGLd?ubZR+{(3p<;6jK1s?<XtSftv1WtFU -x>VBg=9AMm7_5LD?km6bmxa2rgH#Rj)5gj^D$r`Gdp(;7`vh8KWSnn9er&l?mo4-~}lB*w)+;JIXboJ -M)uj|nI)#?pg37l>pl!Q2$X=Rw28sLd(UVnVrVvW<hkPJhB1-^n5zEZi*=XWZ|2?K861~<89wnjxt;4 -;crxsDOxhL9`nKH>&Q<OHQ~3`+M{ltL~7`n=@BDU>B0ZNhts$v#+#=zfy}HCivX>D6syjl30}<}GvKn -YMM-ZvRwm_%_dOf-m)B;Ji)#P4F4WaI1M%I&Pgh4;OfS_CYWFQ}Z?)2MOTyhFm=W#X}&Vs-*<#r{?*! -q`-NE^!nF81N@s5Dlj(DBsuQ&X&LW2j*ZLP1}~kU&@eS`jYg^|V%#XC4Z2v9zy%D*agde|X|+*WCxl; -FkF9CA7r^i24y<N<@&fstJ3B05#OyfU;PZI>Be_6oKHW^NhCUB1JRGXC0$;<(V;vuFE|!OjM`RP^o+! -puew-K|;jMBk5;wZZBQTn3#Hd+}nH{xk!-q)Duks<TZtZ$nR~XTVoOI=5|FLqMY?`F?|F$eQnL7=><$ -lE^zODMmOZj>~=%loHePp@~#n6i|I3epe917t=H`#;XehEg`2!~NlH+hVXUn{VnsH(ipF~YTE!l-b>x -fYy+#Sx4g;#$tal;G&+TE2oeHpd1+rKKAq+qjl4c*~^~Kt4}kP(2wqD|f+j07#*pgmF$D<FGao3=$IL -^twDygn8VMr>4d+%v;K82ZVI{DT+XLB^+^xat#QX0VZ%(Jt=NXz}Se7jUB+)IF1-cR5034Ia~?BjBpN -D96unbd;|9ODLzLWR{0E%`T=AE^!8I_wF%xPHYQX)6G*Rq;K4G=YU3Cgr;%}tgd*1J%+uVrA#>~m0D{ -;9EUWr_QjnYlBIY@fpHbF65%D(xPwqkXUrCOfQ`MT9P_Pex+<{Gpk^jAc47C)K)w~joA9KV*2(U@80Q -)H*Sp1Iz3O8wn+|AiIe3%mK|G=g(d2s~!U!rg|02inT1)l;WJ~z4QRyxwPFbswT067$FhX9ktFkCR0> -aYv?E7*-KIq8vtJ@7%=6RH|B7rjSI7>Wb$>_Y%A`6DFw2WWIRM63HK_>&l$--oepATUJ&b3=2877W}Z -J^dbhN&C9+89WWo!#J+JdOdwU5THJvx(^8oV>cJ-=ZFdAYF-t5`Cdlxv@-NWKcwEW((Uu33aI84L0Tx --Pa8^e`khb*ANgtsOSkEwLnm1w0IU1nK8w}s#7gHvrEAFR@B|znsNH^x0kJLwz^ZZ+d~eOxQ`EfMkYE -P?6}hOqtV8NQPMdpb2&poEm<}biw2#Uv<UQZ0=qjMqq+F1UnnU}KVt8^0xkTO9M_CE=gkvayfW_qUH6 -X%X?E)|lN~sUze$bN^g(_L#Lhb-l58N|DjL+n!1XwpYJ6@9#g4IJA8-ay)Aw#xY%ZhERJly*h_I)iIu -=;xtCy8X@+!qXkj^Ob#U!jta1+@u1kk1`R2gL;on1HyS)N%7k9`*PuzQW3%9;6KyV@Ak<;5i5$NLJ;G -dhvQj9^xl+2huQMWikOOWUMbs6TZ+B79<N`?csVU4N`sN3~-WXsLQ_{N}8$$m^IB`;8X>gfSYWf<=W~ -+$4uc;$RaM9>ERv^`(L27s)SSx4^*wqC`OG?!2suve}%1nGb5>E&8Qb2m_C!wPa*&vBmZkeV9}ZdmBT -h&iZ%S@IK77X6thAb+MJBcf?_mi;S1Sil}bQGt6Qs!kCODU;sZKX%`-zc*NY2g^5#IHVhPL?!{(ZmKn -8QN4`adip!us{peaS6O-5xL7B~Kfij(#sq^8gu?xrFJ7;GLbpd7<9c~;tY8eo*{SP<WzLZnEH@)H=ac -Z8nCkz6lXm$YeWDA|pJq{|)-o<frNDM|i50Bjl(u^9Vcjr^vgYjfVNaZTT4^VX*CGWqnyj`oIc6r=nt -WE;e6O*Gr9n61Va3J%~nYD;5^&v-on*57*`huVB<1=zzN!p~ry-_tw~4QSohB48$vp!@J$U-mS<QoLl -bC0T~@(sbbq+KsdPU4R65!A-8GWe1Gwwa$8v(=%k6hLCtLcMzK85<mNmp2bSDXz<Ve0DLIe1+;Q|rKj -;tJPDj-p~WiJe&IJ*`;IeM`!WjX_akCt*cTx-z^(Q8C=-%p>Bxgc(0^N~)(+wU?Fgi<o5%%}LA5xLJ? -oBRU+$bfQz#DD)`pf924=cRwvnNvqr~><j9+~Q`8JnwXvn<Yt)mD9d(Kfzs{m8z5C-H}$Zf2bSut#^4 -|WJ=i;o_U%l$H~b*KtbY&7Krq(qL#rC=u&>!*J(Rc@Clw^EGxH06|r(bR4VVa|Xt#9z&N$+N)Uqm1<| -rPq^x$7$p}I+>iNPpku&HQ%6C=OIsIAvH=o<UWW#M*b5>e$0`L!$~lniT3^mOc)So;eMd%1W<YHs?^w -H4}+L<d<=!aB$7-11PVut0Tq}b!_cYru<`&v2v%xVfc^3j5UgyG_I-kIv(Q{&A!jz(MstFe#V8$MSk; -#~ghKM;6uQ7j$kp%mV`a#Lm(pHSc7qyigL-p?7`92So|p@529;!>_;vM=|APEc5a{F(a6wH}R#EGd1s -3G>1d;}cfr)ie32{SJ<u;|r-^8FMXajSTjMsIxG+;|Jv?HCIgxbmsD1a0V=qB~@YOBK5JKo^OLsxJIS -nS{a`Z602a$5)U_Z`Q1>|sp<$@8Cvpj)%NQOM(D)2V}EJ=>ww8mcGL=_$aHjdQT(@F8BNHNi{f79&G? -$(NUdaY8<|;`1H){R(~laSlFzH3zAZUpLxnXaxu3z$WJeJ9wjdTx>Ht1ZzWIvPok3s_Q@p;wSs@P42x -K3dBK4>w{4>WG^U4{%4>K{#JO9-B?|eqN_lczHTMN6am1&CP+Kn0*@Lw?r7W0$?1T`sCJ?zKGN{5SiT -0!SzpIb_2U<@=p|V}bu^+(#aJX^pwQoq?Dp(T=qi@fAPG?Wgt@WIV&h<nqH6ITD}3&9*?z;qTWqv~^7 -Rb%Wa)CiBbPpg`p8MSORDVzJ=L$4RzWmG#HGgfq}tO`W0&}i8NMCE4L6Zva~Y;Ao&O2~i`45d8+jR`q -;&ON4If4&QIyr57C=|-;&TvBZKvewqFCkHPUZQStLIsuL33lz3-H=J4j58qbV9g#%*y96SNBU4p!=W> -&^-#!O#w7^E<}5v(Z&dKW3<({AP3~Q4+dck<!&^7A)RL-b}hz6$^J`#^=Y>PQPI31f21o9*4k7o8f4_ -jWGq-{07xV)j6sMXKh=XY5Bch9YAKOxQBU@(IL!YD6+EV~Pb16lS7@t7rOXsmz8=>M+<Y&2vJiPzQ!? -G;1_;$iX-URgiGAutTN*|l;y-;gLZj+1DCC#968r?R2C^VClA94zbwXmPQJfr$UisU$N-GxjW39g`S- -I*iDMzmIODoKBjwAb^buq(_m$Nrzg27z1Nk}J8IRGwAt~5I=+cF?=q70c*=`0zxBOWuv4mvj(g<P>}l -MxCrD48+~n4M-!1dH&fnb8Q)X9IoBSLU*DEypwk5XAEo^7M?9Q2ZS9z=J@soxRT^K%+IN@*jIuAvaXr -PnV6r(h|4jGQ#5GkGTV8hZtYnkS)e<-3rr3A$Oo3ru}}@7$G_fqtj?~7?dux+QwJZgA#guy`!IxDhp6 -vatBOqawRkqvTEUUH<|9B;!@MqARFZ8Gcl(HbGCB_;D1|jq^U8%)bZ(ZbzHoC)A{vlJCZ`85W1G}3ir -d*i!E)&hES0@iM%*H)zU<U-cseqa<vr%&ZouSLW^=PYEdV&sFOQj_+E=5v_(*_6IicKK1%C#v^b(n2< -S2zIYp%WX-jgF2Q~2F?ydKFePTKCAS2|H>#l;~GMzME0kVtoZ0I{GwodV8IjWdIn7Bt-_E)GV#e=GFX -~0@nW+{S5KHEb=v#E#@eg_l5Tho9qN=O@hq57%hddOV}K>joh2>=oqMAX{a=s|{A%tUuPuR~oiw+`~B -AH@9&CC$;+m@c>N!IXg6O<r1v8ql73m(fMq=>fA>D#bMNZx<w30#nx1MeQeEM!bq;H%3cVqZla^kD8m -$HNot-{mZ~e9YELs!Y3b%#4WNpSa>PO!SBQ`W<<V7lg;V4w!k{tcr&0hN>@YnCC%qHL5A&bueXQmqU5 -^k8K$Wmr76Q(h^ZW9DV9Yhpd~jtqtNy_`Wt38kK6`jZ=E8)UECfyXAvW|mE?JlK+P+x3{0vuN~YLW=v -DKc0_u*LLB)7(<3urRbCVsH;EZi;uF~KE#AU@L3@yuO4%%`@q+v!mEik|NHmkZ*Rf{9gP>N_>A<eGke -P&GFY8FwR%Wa&X=b@Fn;``voM*qnbMOF_;om=EpMXdeQu60G$p`*BA$4}gqDIPUk^CsUQ5(9sY7At%y -5_7|NpFAA-j5U3XFPrIOW$Jn`I{2Jq4kzRg{=PPfuz!;??Qb4YM@Dv-&WYcu_II!!KVb}pX1-g#F#*u -Cu2J~OkzN~oTH({Ew66~>QP)O8OGeh?^E`bf;F%;5)OWl{*yaU){VP-n27Dc|ds5V{9BUte4ROlnI0K -5?xhY9yXlWY5^v*L-LGLAw>yiH)F18_Ev&P;BD$0!P%mpQVuG|LZ06!H}AMqTH-*Y&ABZc)6)ppDBg} ->Ruy`KVQJf48+J%SUL&rJ?4g1&AC-9)O6JKhAbv3&}Tn#*x$-Zur6tls|v-(}V8=5e%8vKDJMv$q!Hi -Q~;3O9S2Z6KjUP730Q+>p~S7Y&kAkY@I+3A>!8^QNAF?90LigjB}H}fm&VzQ5i7?=^=($kZ5uj2<B{J -o{}7`%7e67E3ukBbyF_MT|~7fpyfCZCB$uXsoN^|D^_xBGF0dC8kmB<^^hP)pc=U?w6PEDP;KKO2DVL -7T=s#avY~Xp1#N+97R4~?m-j$66tOimDH+?5oSAjm_NqE|!VbCeQA`QBqr$JkN-J5LDhlv}1hjg6a-$ -81E7c}oewiXR<}!RP=%$m%_{k{&z1ECEirUVykPqVDDz>Zk6GKB~uG}q`;9{QD6JS=7s%4rHKgdT$0k --br{@9p1RB5&1ic@31{4vkUmHCouKuM3e25`{`EVY)uKtVbXUjY*>kh7d?#SKb%*wNKs1of~n!9DaUM -EKNeaWO@R6K^HM%-vx&EHX64i$4b8KDRL;H}?19dYYqlpkbZZIKc2TUdGAAe!}tLmJB&EBn-$AC0&l< -N3{5;l11kpN7q)P9Cf%7Th{{7<6iP8)TG8u&Q~NCCLTapxWV9x7kABdC6ppBVHcs239+|`&^`Q2=p5A -*Z#6*kZc;(-a1DS>6}*(r)w#W|;r!ERRe9_aP0yNCNs*J^PC{CP=F0Rwicl-8g>tMIr1y|u>uu3uY)T -)PRLr-a<Ax`py)OwpWrB^rs!Yh`FE11Fg)1m_4zS}s1bM}!A-`c#sw014#Ev9?o<wb(d~LW(NXz^Sxa -9-7MUp$lOtNTZl0vin`n!~9Ph|_JnDJK1hq*}!au7Wg>dRcL0CrIa%y9-SxEVAF7bsBX9MH=Tm=`P4P -@@YNLN3;g8*|TU%An~ITvEfoYU`{>#~86C<dKGnsb;;3E931dl<KsN%Ktt2Fe&N5=Ds<m3)XvJ^7kR* -rhAChg}wM(H_TT|U^$rO@DTvb^QRTKX^7EMu!}B8mYmlNz2IpY*$qJ{bQ+&ebm8;q_wc!|6Q75U;qu7 -CPsHgf)JI=Wx6@bfb^3ZPOkaO^4PH+@N*6U{mpN2zmO{9w5~JlAfM!yVVA>4{Db#}>)mABl^^&V?5JT -(Im%xR}7jQuobP_f1_jGv^s|}OYUX7eKP*tpYqbF71mPK`9z5T7VWJ!NY2zk{~B%7K?Eg^wLMf@e)`^ -8wgrvYYVz;JkynF)IXM)L2P(hu|XYn{|wJ&4n`&KqM;!T2%Ns@)ee8Z`;*VK@FGF^ze2-jQ84-0&j1a -#Q{Mu8ONT9Z}FHtaJ^vngvlcO=hXUx_uPzKPh1EBMhpu<9w(YUdbI;1lj6A%8i#}^^T)s*X#Q0#YGH6 -L?B`uE}^_%FP1S<b%I|A!k#;@0L*vHna3Tt8Z);6>`{O<>Y0DU2$&f&3GXR%xzqq*XaWd+SE4vF)HO9 -c%avGPmy-2X4@h266dc1apnf|cRrPO>pzUh!M&N0$k7Qtf_rn;Cm#sH9nxysSfWhM>?=PWa8#vh!<sK -f!!RZ5igM~~2TfEHNI~%^_bopjh?kfIJsvQ_SYJ#?$jC^O2bDuyRPyBpF<ny$_ifhbGV9gwNbZ)lE{Y -^j06bwt3I8HX4g*+(KgsF107Y*l@6WhKaBjc0x?0pCxgUhT2uH_|Kx*4d(Ub1?i_c?0L#AP8~95Ee@3 -|pY2P{Gq!rUYZ&L`yA!Qtzh*JV<d?YYc7}70SzC(q&EUN=DOyOu?kOSSP4(XNHzp(c49FVh$?$-(9TB -<@+r_E@c5#mO->^waGVI2O})c4n=UT=S}jmd|EJ;YUU9o2#2}2Wi()NCF;;z0l`{`g7qikQ9c3|?ujr -JGTEsH6YqK2G0Gg|+u3J90-`C3fy;4P|A8f?y7BswQs8V#UZVZ!3x>DVI4mqsWb;ZHm0&Pnfk+EORQc -wBLgK<4RVWq9QB61CJS|KY3B%i}c(zKI;0X*UtS4|*G2!-H9&Xyn=~6)&7!t}vQZo+gjFlj_!>3q?vT -=RgsB-JEpYr+~Z*E`f$fkAh$fy#_-_km020*&rO9uX0abbzdm*`ayrWL=*+iu|58~#BpL~9z1JSC63Y -fIJQ6nskgv=VE_D)b}3`A2NDhUD24I2GhTAy%VM!xZvwI!x0j$_`M~K)<B4vr@8&-7_NHP-hnE{FZEH -Yq3+E*r~s;q4~_>R<A`K()ivqpSCmR>cIsP`>C=zRwxZ*l9_q9+EAOo@MQlp9LxZfR*-68eL|9Id(=u -c+0iAade-*v(<ttw%|tPWDi&CEiv(H019gbnPeC=Hke&&t6-J-~sJBq{R6C#%p$daFWnu*K{kLH&j^R -dab&rZmsiy;3Wd8)s%4AVk+>Tx#S!6>l)*f9=x<u8<g&ZgZ<{v_|!9lJC3?fDnx@9wsu`n#%LKc6CBe -~LS5Y~!2SVmX?HJplw?5CCjC1~8#?~}qJ)t**NKnxrOWDZ?+I?V`^LUmS;)^5bfPxWXG5!;-KC^vS=L -O0<56nB=QG{fg@04C<B#acZhBWXa)Zi}fO)Elv}M-}d0);kZKWSoIQa_|Z?F(g+vOeeR8tTYEmTFNMe -^0?-sv`t4hPik|T8Ie`noR&=SHWs(mA(Qgg$QKr=u}9;Ccf?O-L_SIOR~s^pkKp`_R5c^1FCNd2<Ul6 -^nTy7!`cLdD^!V(j0$}mfgc^IK+U_&Ym(}J1W51i7k{ku+G?D%qUB|KE?By8d3&5DlC%+#BI~&))9*0 -28)whK97J&|HhDxZ{Z^-~|rK==qA@lVhZd9Ql<kDwUx4N38>)N@FGrZRk-M&Pv?%9?pySiKRRcQG*fO -LDv8C*T38tY6<Pp9e0#FME+3#hA#4Fq9rPrX#JV}yG;ED~eg=)w+I2_PK%t*N?~X?3rSf~>*@vOchyY -{5anRwh`5@h}&onFe!qI$g*TY~;mM=3W^w?6IO5S)et?F}&q+dBIYT*T0Gf-v7DgvV{`k2J%z1WERX6 -YRM+}k`^ed<b0nF=pVtoGu$MVmhTur_{m};=o*tW`v-DeMt+33@|Ec@b4;^$)Jr)CW+St#Nfn&jHAEX -TDy^VW7nxIMwHnoqu5ZYd*1aO&IhB=c7fu#G5xc*E8W^NXtB~U*43Np-vWgpROpTW`%maR?wAQqQ?`O -sC1i&a0_Zs-|ds#l`cQ|(m>9NXuoY%C1y<`}7!rbJ8AK?};?xV(4?ukffv06vPT`LNTJy{pcVK-!r>i ->h<9Cp2oox^8}BL?0gju?f%V58h$>yw&SZ{>`nGs^d-HZe<|+8+HnHMNQ56}VRKl}qEG)}zL+Z1n*PT -v=Ay4-x!N$g?*x%$`Ef3CZCbaEbQ*400v?5N^^kL7f)UwP6S19;!keHLlEYlRo@(#I{V4)9S^A+scJ; -K7eqODOE}9j1$|;avGpIftD(C42aQfMr8oVvKPtna3+Yzbg~%t57Bl?*ux-=9V58G)COwitjy%9#@*- -*A@nG`bR8&vpz9f>5+JBxqoDlz$h}#(n;~~OKH}f^kei_rp-qN>(M#6!Y7|SitBx43-CG&SWdm|F1D7 -j+mdaF**G(LZru4*wOR$s}mIAUVN$3eWp{GE#qCWgbMCg2I0s0V*Sy%Io4yrs-myvA5UI3QcC?TjGZN -UYZkL8oaow)gg3xRZxkvH8ee2rVB!h5)QG9B~Jq^lLmYokSo@2Jp^xkP1CoKyw)vtmlcV5L>$7kJ5U= -VH&t$>bYwL&@`Z^t4=HpsUAJMSDk8#><rjxJ~XR@h^Z%^#x#c)ms@{6{XzUj@|S(R-fj=bfGxO!@<## --#(-9a5fa}<g+OXAk?=25%rRXl_U?7h3bWB8Je)ldor%je5hQoHtF+{dUW_e+2`I(wTTgfkTKZQ0$B{ -8+QSGb7<5(`_=#ZhH~=(YfVN&kokXDP3cTb}{B~<zCQ#!{ZTkY4*JxM0<Y$A}8>0)Xni5je1{xLvW`) -&9-oRZ)Y?e`D-+;|ekRI=+)6D^Kctn^=evz&zLR-_vC`-Lq$>1r_m!|3Z(w#b(I|WAfbCnZv6snL^@y -=+Kkkh%tPz|x$z_)ow`=CxfIbBo#tRC{duHGsf8A(eOJZ65h>b!bSI_@LYvK~@6G)5{E;Wm_DA*Uv3J -3>VhlZ)#mpCJLEv1|P7-=VPt(1%>V(jBDigJq?2E(1xD<pqlqEX;O@JXn1zE+JUZxtzD)Fuiv7Lilbz -h%tCrK=|_IEV|6lnh!C;Y4IQr@0=~~+B?c#APjE(N2KZ=5}ZUO4;v^T9^@1<XwxHXWC@M<^#q)O6Xf7 -bDy-PRR8sgi+;q)*9WCM_T;*=L2}D`}inJp)>QF5Ct_QO(sL~@cNH0bN3?%$1t}wRo>27k8!t7fHx|i -#91E0nnsBTwGfy|nfZm%EPLVnu~a>&(PCiDntZn6&Gi3ktnO4-#XvvP)1ecHW}%&o*(J1TD^vg<T}gU --Yt{1Sx!7kKEs1XDeE3&<8FeyDOU?%j=98QD`}15GM>9zOHt;B#6LK1&PnSzZ9o`iJwX=qr06eND@!F -H0_c&9>3k6;^mX^{B-OFWJTHnNQ#5JqzF+a<O|VFih7}VwNVlJ!xQeW8$9q5Q<smz%#?lgkzR@`sO8F -v(Xk{cDK^c)2XG7J=*{X$a<q4Xn>o+xa#3IpTKQ&T=Nji5dbV=fVmW5{D}L4rHawD*WC-IE@tc}JgA< -b)9C5}X?0v$jb5E?VA(G!<k8_ojNcB%P`rVkCC0b%lSrQ_C74RTp^FZ;!+ia!0iu;``zf(HVNfz&%|J -<5oiJ)E4)%`4zIw+|uH_^|hwk6`3LcaQc5p2P23)TQi*XP4=)dCD!A_ABaxH^6-bfaIOBKIVB>DUmBF -W@05s8@#?lz#&8|Q+@sL~imiivO9dZX~p`j~2*gHb0J`~!`5(yhdps~^F7pQMRKF8CN7zX|cP5zs=!H -;q{_Xn$`LRq5l5z^CvQD))$F6@RNpa(Gu2&;cryCz3QSI2izjqIgC{aAo~PS%&Mbf}?q3LOp^UIDq+; -t7+`)jMa%`%nUuxxaK!;FGt}H(&gYT-fZtsj9Fc&6&fyhny#MqGh7Sq*9QvMYyDETh>r(MUcVJOoh(_ -YYXe-c6)W79HVOniSS|>uEEaz*<bav#Gdf|zxX%*XGNBrvcPWbltiO;Z&mWs?!(=0)%nYRa=hNi8RPt -1@EeDeg%ou*Lt61205;LTj#P$`8-~xXW-88X<T<8}FdW_#q9Yl2pl0wkGRZA|exK$^lDl0DdZ8J*?q; -0IUtw5@>(WQ8pBIcmf{1bYAouV!_z~{H6X%;N%INc7qGsuPBz=4Fjav}2zW%>MC+?7Ffwd!|Bc42X-^ -1K+gZ5<z~#BDJPwJf=o$CJ6#`7e0MW)xU8G%TB67<9tCZ*_ag8#KC7`8j$s^e8_LEFf>qK)o%S?l_wN -%Ms;QQ1daFRog(*%t#t1On?H&XCDJ1ZJV;-1!Zaq5KT!f>%teH1Zh1QPZOJeLU;e9^=4^3E6tGB7l=3 -8QZrH(a&(ORmB9&#l4X;5tj%rjaG2kE45SG^VX=7biiU4PRbPqc#%;|BWUm2@$^6#iMqE0!RG{IRQ-c -Q)W<|s>TN@=g8FZFNI~X@DW}*-mCBv*9mC&Me7YHx;RHgekD<zivj4F)%<TZFpB{0GJODdeq2DOyIs# -X-)q`Qi2A^0oq_IQ0%=w0nf*#GR7HWF2c!|>GGCb{AvSO11R3~gI={{|@=KWo<GmeSv9S0?u)b+MLDH -+kgEti2R*`sB1Wm&)klFZ6&7z2LLu6=u^rcIyIC_7|w|3aebnYT>yUcCmv_bG<gk<!W1KHIY0Cc`XP@ -B31W+X2P!z-2j}mR$l&KZm8lxutNJ$(T#(8nJa%luqY_h5Daf~?p!9j;&K<7TyHlustjKwr(IZu{U2& -o@X{*$i2N4At^uueQQR;>!O;O^Z7%!q=DWLvxng<YWw`rX=*KttjP7*d{t+jy2FZVmnuqb?>nsc-h#` -*~=>Bop8Y@5EuMy>4xt;t{i<Yb7IN~m<RpCXove8=g%T+8i@N&rc3ieHz$I7+b3?Dk$H_2j1>Ya>>+~ -_*Is>lXiohvUd%3pnpd*w>MyE4TC+TO(LQbiHFL7J^|MTxwI1?YM9$?_(vI5NUJ0LOgsyAj^(`1_VCL --V(U*1c$xv!KS}17=1z<~Lv~ma^m*)eQ48_Av&Yg@E$HhDT8Y#$7-lW)#qxhZdVbS}+F@j<-X3EHud8 -POj-vfqVS<>L#nY$%cEJi}d|P3IolMj0bTSJGvUsu<~5>z5?~WeD%ILBu@uCYGzh@eIEHs^dq&Oun*c -*_4rz9k9;YAD@R~RezP16RY>iCbXENveKNeh0CS6fuoAtV7d?cIUu*Fc#a%`0Eh|;ND3|QheUOf_jI8 -1rl_T!)(76lGn$2{1GGso>z?ZauiX62>jO8a~4R5U!M~b$;YY#iu*G0u53W$D(-^!{-p4JIK-oqH@lN -W(fK0(|8`fs*Reb+~poq|#?1qHp0Z5}DKEM~T!rjYB=;^Z?BQZTvIcSqAduN&QESLgp3fm17bR(}=B? -eB&`Ur?8!XXL4}Y3NcS<dgkY>VU#zC3R$L7s^*KQbO}-h0CV%W;v$Z9mpper%?OYF)VOo10YL!lPK;$ -CRxMiE1A=UVoD2NYUys0k8Jr1YM)o7GD)>PN|v-pN%xVpm~^qd|E~ZU1*~(`3s$m2TFb;mAj92cmZ~k -Dv4L@9=tESLuT8mez>Mn0Mq2<8S&AN~&TaH44z8hhD(TQEsKX}9JqyY-nU00}k5r*LNB5wfnXs4{-QI -f^LVNb&<M;S@VZ!1u&L4920D=B2bDKd7e0%4h)g-VWnH_BneRp<PP1S6jBeL0o$<zT;EkzvKRu#Guwq -jjtzEkOPYmd~}MQyOGoj37$ax`G9DUR?n;g5ws_!gFuA@ux(8L$gX>0GqRR>7b;j8)u?4`sEwb)Eb!L -AQjO&?Z(+Q&!4Rk#PJqpg-}KRDqVT`yBQL)e^o$J^$sySf}0iP$nM6hVI6Pl6e@Lx*H$*`n6lDIB5U& -u-Mpb0L>Ctrd{1adcZ^$00))1deG=til&@Bj0Yx%Sw0h5#9PE+voKY@`8KKgJ!#o(5HBo}Z{8qPcgB` -&co^jc#LSbk36K*k4mrCIK1?)NR(-m0vRr){2rB#5NfqN*)pc6=E5QvRDJ|KRc{+|6>edY&b#-@*G8u ->|H+G?=!m|N}yhlBSXxfF<8YjDwbxM<6ozk)m_Ap_AOruP2@Pc07^V)^M@Musi4Nn-e8Oc$1+T`g8JY -@zvs`FV?&Fg{}_0{vLr9~FZcba;|2M2|zYH524liZ&I=*D1MU352&e_TnJ=vGTRQ;=$>n2jmw?jk)s2 -fD2Xt(0tvpmz(fI}DS($a){)$=He$Nq=A%{;|q+Yk=lrJ<Fib*pVyk*wpr5I}mqi+k-a&7c7lc`rUvi -kWJPllDkt|{AwNn1j)|8L-GMDaUg)yn7~sJm3QHg-Hkqv@U3pSi+qD?WMjLJJPy@~La|T}KwpG@G9bp -t)L~5;;Nb~e?odmyg>sy{j#)b?xmNgdjd(<rB=XQvv!*6E$p6TzL8_(4#?S|kaRflAj*rl@H+lU?n-y -kNN>eht<n{NFbqArOK8VNTb=1LmCp|(3<)GRAv-hcgO&v;`P9)?1!gUwAj?{v8Ajp+PPza2JtrW0wo) -)@83(eO;YqiiqEmW<AoLcC5EmWa}uGT_TT4<IQT33$Ugc0L00?76DcgZ!C9e(t&fhG)Sf|zSovB!9jx -_^6bjMVjMz4XL)S{$9mciaVeXZgq{c*@gJPF+-Uo7L_tcw5Em83B;gjqSMU46ek55HG=FUdYb0`!=4V -y$0V_dQJ^{&^MOZ(4{eh%s-Fj?E0uzE=3n~f71y(z<JWo<9pBR*l{QQei~@k0=Lls?b4HCIYKaUDGrN -0I1E76mm?s<XN%>>=m$C#7VXB7MN#a=(Gas>#=C9;X+ybVk2Zw5=!%Ora=4ZVgKmbH$E}`3Q{@HZ(yZ -gq?o!Mym%c<DxiuKQvKqJPmDPr(URhcO`8_Z>bmfoba^y$<71hYlH0uXy=bq%Ku1NCpya_3OF1e7OKc -Kuk6?u7H;$mLLvs&ro1DyNAb?bFs2ai{CJ@+O3#x<{T^g~amC*^*}8SZD)d3L0DIJC?x#?1|ahXj`4! -3_x4IJ!1h9i)3-U7L+^)D(3@8#sCr`b6?@*Tm3L8^kW6v9Bdhc3l-wjqcF=gZczZ3l~_qoRaSYJo9Dt -svqp3m2t7!;w0S#@&?R-LNbTqK_NJrp8~^xv;^|kfSPqFUIu_VPaFqi+8N-?mG6KyrSF|5{=we)OaP3 -Ml6R7_9$^mv06J0(b=6c+Ka_(n^gEfu`0)MU>4EiBMjSkdPzV1Bln+$U19PY($EHXR;Wt2t>YRqp*Vm -;s&-DdJ0~+d3iNy;|k>&+--SHdy34P_UDxZ7&sC@K7|InmjQnk?3&K+2s>+y02?n|?u@P#T^^r@RFH( -KQ?tK(cl259}J4;{k|nM=g*9LLE9LdkvsIt^c7#Gii#c$M0cyHUG$i+${<0T~AaGG#4FRK3D4ZGG`_s -;Z-*v<m8V1zkVYQrt8Jy+eN_JBuP@#!#o&ZAdO8j<Gp4ql~Uc+D|m&s%)6He2gk*5C1?0tUD&K4(p$7 -r$Ah0I>q?JhOa3}&4124<s5a~Lh*NjBPw05f0-Vowx6nz4w<1C$1vA&7jA-^$gySADG!vObS>i5W!g@ -8w(i5gwR{bAX&ymRa4pvYkbn7UAYv|9G)KB%0Q<<lf3C0Va6!ChhaLetoSD0r@p|g_jGwqzKg;*(u#s -B+GyDaBz~d$L$$Y#u>D2VrU+^sIyeomQP^*PoF87id5D1xFkE5V!FMc~<I)2Wd3kZro^tg$$QeO!Y4* -9JRc^IqZ^^q4{`r4N8oVpL23~~RFiu<|WR*08;oWhf~1)9sEQs=>cz4zlH#(<hvLG=~K8NL!vkuSD~c -UhOUK5Sv}UWKxPWjyOFM^n9lctSxez#R%=n!B}jm@Ha~&X9TpjP`gZy*Xoj9lDR1-az*;p!CX0jr4pT -1S%>uvd>7mj!g6;#mVduyqg2RrqYQX)Gm5*7`3kiJ+lpDe<HF64I(*`8h61Ckf@q7uft{C%#nt#M=hS -(DEG%|t5^OO<c^^dl;Dx>trNTfcC4p9ROK469G&zT+_3rLtY)m7p!;KdTFQ9JmaA=0SX#`05n#Gp@ht -QJKT{-Tev(MCd21DKvWKGw@dlFU!SVEo*PKKTjx*DPG+^oXQ$rjt5-ISxNl5`><_@&W5ow26+QCXYtd -UP_S&`5V+w;#q|1v58c($;zp!n@0m~mIGq1EQRSr`gEI1O2kp>Zt4tq_Ki!l=2gz;eOR@P&fpJ9PNlV -pj8*<4%TpQRDQOpiOISq4#7s9kGUiUBRybv@M7cg)L#eB=qz*5W($l=k}W%?OP`nN1X1^<Jp)VD7=N- -J(cp*uB8SsYHSG$C!xEx;7u!#3CeRr*$C>UCxM<?hAWaDh=<tocmh6|?1M}max>-e3LPLZ7Qj!pyAkM -e3RHx2d)S4=3`PumPSf(VX|`PtTM(@>ZZKlx^DwFqqX1Fs!)Zt`CB5}2`hjgdqTHg9F&69rH2;A@sbe -nvmY=|9s3ixJO`V}z3&r8dTQi%M=S;JORu(GR;&+p`S}|A{TG`!dQ%r3Pv)J)YLtD~yGCf9l-|Alga+ -qA!2UFNaJg6JrO%Dex+r&>3cizSDljN;_s-+f^({E5Mm0aJ4Hgz`nKmAGlaI0SudK{(ngweGyB~0;-Q -58otRnbdc!Th@sNLuEXDKupBUa08P&CW+;p$7`!zZu<)>$7>FXVA&~D?lSnGf%<I&JkgH%z~e&YN~lG -@XmtT1n<(l&6S1X$a!J>SP(OSD5u1cgfJf0!JOvNMCEnNn=ZTJ;%%GG%WWyIk-owU9B{2vl#>mbBp<| -EI!1&XIZ9qh(2W$_+kl4I!(|7XGVuJ~&#`1zj~Ff~?}yKZFPc?y9%VQWkj-i@{r1y6lo(!Ua@<LoA1| -c}xd`wc9TXUK9SVIMXrZMAUN?CxANcje65P0dz$|UHmaQh-gE(fI8ovgV@8VLa@XfBAmJY6^4QGx0l` -v8|dVj}UfaZpLTp;ZMG<SBCNJ4k$zaG>2Mk(G^X@EgCm)pOH+aFedWZk=(wnHLY;g|;449gtxEnmuwc -xt+75hHX$$EmJvv5f_D-V7KTdgU0@Ew&UrJQ;Eanu=-CQY$ERA*lrr-C8eST`!f05!~3nQTSFqLv_sF -m+<Vsa?>=k(-GM+i0F5y3>U=nW1*$fUmn3mvaIt4;henGOvXVLz$$rI#UyQJb(y7!ss~V1DgV2y6#JP -AuG0KeQ<K0*ln#Vk{~8<!)6oy2x?3e{{*JvXHJ&E8gD0=|L!XoT&_UY8I+mKb79Vy+Aq;x*OWXp-;}% ->?B}BfATR1Qz<l!^ViL>Zs3*;qw^ql&CaY5`LSvXB?Tz!;`lPmq@+Bk8OU&K(gtn+*1azfSF!OBfWF8 -C#Gds%RF8n__t5Wom2{wg^HmzwwF;>5F*-IGt>);$GN@PsMosAAmGXsef(FSXT6Ru>D=PKD5va%6(W> -|M+A3tC$@rDH;`mVhIo5d>B~N|@HxZ7imJuF_GPs`dmrno|}3unj9d4dXoO2gwm_#GzFJm3@vnFDSFY -8W9SchqYWDvIldKbzdYGkrcDIv75nd-;)p*70cb|og<77oF`tKcw-ifpze=h{X`sCAxJ57Oa@C&eh95 -9bli4h;NaN6OJf7!(LiXuJLY0>QMvhnI1e=DGw78&m?l1u07VZdoD4^8YBehWg7*O4@)BLhIyvffh1I -~5AtEGT)dr}6^#4({Kyk(Uy^?eS8|gvZT*Wg{QU2cY1?b@9mmkEcK}20yzHqDj;6W`k2|^Rx#Q10E#{ -HO!{96UJn;v}W0)S6mPXUah0P22f*LIA?AAXs|qGFCuFr~DvZ_jd&jWjA>m0OSX8H~0u{;1<W+W -EYL<)I-}TGR#lzdz~JLlpn-~mTyC{OfCBr)(LAf$qCYSKPHhXT54!ViikTkB94>Op%Ph830(g`ptAJ| -e!RTQJQ{7qXfZ}<8uOC#ASP-q=wm$B>d?-j&G*VBjv;=IPg+0%)DsiTA}{$GJ+BurH8=^<^$wT>H`Ak -3u{vs!(lzyMD0hB~UJpHA;hK;(0atDU&20xvzy;(jjNWvYJ_~!J+AREX56;3?GN(7WW>$)8D`MMSUQ( -lK;-=?<F?blDFCmy)=+Rn1kGY6_xp=gNYk7$BE8as_-A5jZ;tEusydu|r%JHU<2MrBX9jO=3P2Os**U -qmhH_>x30Ruf5GacpJ;bT-e#X~YR{5<)QV|3Cn8<fJ(>clMpLufU7i+d&cb-I4?3;}sF9+g>88^=Rp1 -2}Ehjn2Hwy&>02x?c@?($;y&T}EUvdxs;U`4Dpu4n2m82z#hoZ7F&aIgW0=Rt#Ijs$sQ0=2V$XsmcT& -GnmXa=OqxZw^m&xmr|FeuruTyZf>Ki5GNbn^7!h@sz2via_F`iaYVQlyuAmnqA<h!Z;Bp9NW69KqwPl -dqcZBe)OhESB6v|>-(v=Sjbf$l-y3SBIno`G%~$Jn5^pmxO}EWx5^u9JTK(Wzm<g4;ijg^}lId-zl;e -2A39#g~BDViVNt5Z9T@9Yv(SZArbYW*5?)dp&KHHUnnr8K2gcY*fsT<15sp~j(9Uk=`r<tWR*_GJEv{ -stG=OxXx;HX6>X;<95Om!t3!`mORpOViY3Q9KIXjJ(uEIX}fg}F(&udUMD96Tjh0)uOm%+ON0;vt65x -^)9Cj`xBsfibhlm#Uk6Hri9tB6^7$U~wuLV%#K{;gkJdo%nfBA0-pPVtA*Xx>OuCaS!{^$(Z)JnrAzX -SHZ1cTh|dqm$X4`JKJX;MBY4d6le6BpekHeW|;$%;FcMnd*<RLCJz#@lpI>536+C>oTJ{*Jp58fQim2 -Vp}GMYu>WIR(Ti~DnBKvq#&``@YF?Sk%Ks0sMZSkE>EBzt1QBXg1B|x+DaJ#(H>1t}D-=hQx<QjYCDo -z_LJS=xq}oKlv|eiLc9f%MM&l}Zi262^6}$l2w(eHJxye^2b$3J)D!gj$_Bj`NPjn`oBG7Z<cZbJ#PA -pS)U%Zxf@?#Wn26ESDDLcTUyDZD?O`n+Tr<%?g1?TTjx8%#@O4cVYDvk%$9rJu{FL|h)`W&}ZCH+-7$ -k!6SpA);!qswwSo>mm!RM$gBvEB^Bp-zsj9pf1d0yo1;aFe@6xynnnYrBLzJ+?DrsM3nwPkgSIOm9c0 -(SG#w9qOu?8b;BMw9NG%L|VT2QEE5tG&E-0XWACV1%585Dx~~e7Vvd4Lka4IX1o+ZSq@shv^tTbrCen -ljEMYIWvf|XoSWRJ>O`LoL{}!4HL^l3TA0uuSLsQDDZ_OdN+lqPm`bI^4#K^A)JNtJEhL)kfbqEX)yN -v46L^#CI!%^;r1iw7pU@o?1NE@}r$-4||C-tuJl?LI5uh$xsiOpw9cP3*a{DOQe`;XLo%CocOkj@qR+ -H2?dSpO9U!V%Pl0e)*!LjEDN*&SdKX5)^zu|)O0USLa(7JAs`VWo=96z0^&y@Cmc0AxenG25xJf6x-P -nwYy2>-zGfE)h^oN;LMc)&8U768%FzlN-YFKL0|rpE&);Nu!#Tg4)k8GAV3GCj|1G7a<OD+R&u{Zrf0 -80}~POY1_92CR(z)1v|BE;t$hlnRD-Wa0HgWC}x-I@$_%DubGre>}C^iH`f$E#u{C7S9s$8BQ?h94>3 -aw-+w{!oQWF<wb09yZ8xbicIauiq!Pp>cQ*y^w{)dYz4$>n+(V-UUKktw7sl&?qKiFpzXz{uyNF-7so -O1)>Y8Yd!2kXv7Jh`TlvgmKegAuPn7D+du^JEBd=h^?hz>mWB?$;a}MoB_y!0Na=*iK+`>F^=^-FSxX -{thTgepq?R4}D*?6k`kyYCIASiP`!cUL{D1dxiOB3CyW93DmDua|GugEWs-yp3pJBD{m^U(wG@ukVrk -4m-JUI?Wkv)?aQTg7uKKUF+8!cUYVV)qRBc;q`vq&v-Ire_`%%fT?{c7slHA)gyCdOR!1`?oO6tfP3x -3Gnr7D0Npg+sY~v?dmcgo<_#vq*QTbjR`(Or;~!m2<gO2C(5znE|0wbVT$*sgWBKw9c_|zugJB0!ytL -N;1~Ed!qiV2K+jl;?RZc`qaBFMSsoOb7O0ezrf$hsx3FGv?kJVUKS|T7gy-bB7Cb;h_r-pOwr!>LXTn -M^dFQAu%}Tr^s(p{}MLsXt4*}3(yt*Se`7MNjRy9bc^qTcLk#;%FML%2kGa()C<tPN5e+NB@0vaqd<H -7?fc)l)2U18?-8x~7BN-ot{x@}_EmH|BjQvy&cb#YW*fxMcEfWXKa$<-&V?g56FN)B{EB?=kxR9A`}f -fXAqpi1LCblX`6)lC{^kWd#6QL;G&NM4I-LUDx!@8*K0`7S!ixNCWd8FV@!m$<de*QPQn{$^ak+_`my -R6F2!mupD_Bp~#;;CVA1?z8fxyDCbGjN#6Bt80Wi9IgtOYxv1kLXLcNs1t{T`00qW+9uap@iO9{YO%s -(^7#j}q+=hX7$Fa;saz``Jx-)*n<LU-l3aM<1NnE{r0xRMpdW<dbn@#DlIz;!H}sR$iE)n^jfCVCP5< -j=Xe=jH<jg_2y((v(%$eRETx_nAqx?^I-C$`tm&rHKo1X4ct8Gn<BTQ?S%!QU3bl<<WiX2NO@0Ph;%X -4NUu!{m;-^$9IQ_F#%Mh$d!rZAg=UW%YoC}?gH6u?Xx*rk~PCR9yULbKd*x;j5i%`4EC+_sr;af}2zx -YoN-bE>v+4{gA>bVKz(s3Ofg$TV>+=*|Kq8@U$TWes-lnN5yN!P3N<6;o5;uw2`Zr*@-KElgDdjxJ6- -&QPbsU515IxRyUcU|}|IZ8a@j3^eZjIaPoLsvPZ`^Fxabc%m4OX+u(*DN_-E{>t5|%NC%^gLwOZdSR` -T$2i~%s6&7{cq}5#T*c=$HL98X%WbA?Iek~P+PXZ=qRe*G_JjJ33C}=3soISQ-&E5>Ff`f>@JpdWcp1 -{qDuL~kJULx!yAvB}R4ls;P<c68?CQr3fJSn`PDWeAM_-Sdc4f76Y)f0(`ygGnadP`R6i$qrcTRx98* -*;q_GdYpUS_g!lY{J<!0ms7J1k)^*db(7_XX|p6y>Lj9qoeI)TKCOZm{BNXwvMZt*frKfC;fZW7h<kY -h9HydnsBG$<U=si@TKZLtRe>47cE=)Fe-987Mc!wf)Blib{_v^aq$R_ekOu7-3<4@-nX;^hOY?`_Ok1 -rZrsb>U$9_X;&XeCoU*cV{xEY)ZX$WFi)f06A@Dw5J}4?mMCq&6Iu1*f6o-u2@+_Gcg+A>e24?+TsA+ -hUdqC&tind<`QCk$a|Xo72pE*p@d8D$EK|s)=BX`^NiPpTCc@)2qRVE~xx|P!aQ`DNSxdQOb&^Zw)Qg -SrO#V-S>^1e02{|Q>oPr<c;A6I&-d2%zX{K^Ha!$Gi9Hgu>LRUL)q6F6BGc+Vn|0DxVK?a%(W17z~52 -hgl<rtNWdYRF{pi@Ak_5K1iQCh!%rOwd?Gk)2-DapC`UGzro4WP;rzncr*iXR*MnBH|G)cFG^Hn3&7Q -UAUPU{fcN*mpH?{nd%F;(9-G(MhCFPH13lDKNqv{-2yg(ynB2*`|h_Fq{5bN3-)pYH{;`hZG#W=&X{i -gn7s>&Lz(+DwD{Kqh;Ts;rXGnOMg0no(6b!X~WU6XTx$~I!BlM+vzV1OdyHls;Zr^t2~5fx|Av^3nzj -e+c3^cE5MRXGqnxaSn8q|{80`(uZgg)0_^4-@+ZWkpSAl_VB(s(i}v?d6<N_oH+X`-!yevMQN*@{g^A -7Ip>ouaBbGCl(i^vWYhWJm$>+rH%ner$eJFln;;qHUThqmuLF_dMgK~SMn>9u7WrNon;-{uauaQqX^E -@EV)Zo5EI4EF!6rSd&INOZ4M>QHRsS4}nkBtm>j_Glw+6Qsepa-M0@VLG{fl4iM99nR=7w#rXCnA6hQ -@?)<E`+y16rN96&ddOC+h04!aNDmt_5L4QHa#bO0k>_|!Pca}$nIDFXXoBJkNhKE8XOtJOC#^3FsF6? -Ltd)yO!88GIK@j~h&uT+aU09<Q>ggtxdE+#m+1{Tj)-6pbHF}Q(~?)`3@)`gy>h>t4r(W#Ej|F;2j-a -7kftmZFQYeC?kEKXlsmwv)mFD0CBH<c4Hs(^7pXM@CtiO!bj<Y-zk`~t0Kc;n-Ne9lOGxQ3u9H3_&3) -U<7hR2$t6c$#eGB$jDD)C;3+;OkpHKJTGx&S@jMHZqeGbs)Y5IJDK0DFX_o4p-kJ#H7ehR`cnu^K6w^ -KTi;T2VFIuwQ!T!Rn3hF5mqw&^@}?^k#a_Ml^ge}_9TN!mwf9s20=b^6?k&nLR!S?@T>wLFUlc#Sotb -JC$_Ag+w&;2z!v(V->X^<sR@R*pMxl-u9b+3RG)ZVtIqrnv45XK?#lO8Ox_z($C<P6}c)UZs!T{9-(v -dng<5s71knowzh6hOoKNreBR|Z`T+K#8VXL?asgr$)h4E<f}wt;^!B)@kPZEJ{JO9a6hDG>_hP019$~ -?2tUoe&!@f(z5fB<&GZ|`e(z(Lg9dwp@L4Z@cezk3gTyx{I|nNQ3WHQXig4&@jO<;7XOL<7o#9OGz#E -|owo`-eEkoevuvtv+6-m6aFTgvX<ISOXDFu3s6yv}}7%|-Y1*<hYegnT!jQe?~7{7}LD}5^$JjN!Qgx -YQIAr{NK{w`sh>6{)7Hbw7m*<}4~y}wR<7xq3v5vPmsYlX@6;!fjyVZ0bK>luMYy>}yU+^(fwqoqEFs -d$%P@69xI1J_bXKkndK%IU|wT+4j=A#g3l^kW;>GLwF+;aVo+$8*RQ&|Vx0w}dE%#b__nU0Hf}eQ$rd --s}zBqgNYoOZtcrad@~#@q8bi>08X(fB|mR9LTxgCtz}jM+;+=n-G)6)iNcq)@Wzw5dL}%z2rtZ)K9w -u#{#I+(j!K6Z9rJuo9X=sf<u%6OOQ^%4rY{chnTTxLb@I=AEG6J;I<q=B0--IQm8_$>*cix>1iyKYdL -2|p(|wVekKRcVq&EDTpy*%J`4m^?vZiOo?U4zpt7dJmnJ^A{o$2va%h>prf;aMRA~ds4&ifqXYXk<9& -!Xie+=~ps<b?T^(N_D%fJX;+Q<c8F(YA-A?<^e$@=Z<93z#U9mcis)?oWE-qwZ1x@GzTtr4rJzVLen@ -APWd?%&pa59pjLc}ks=_TflY((5Ifra@?p)I?A3wRm!2bWBhWxhga0q;`$0$j;mmMhambe*BZgM@RXi -_gfRPP$wN?U*L6Qqcn7r)A$=Ay`2aW-^4xoH*{lYc?-{t#y4^gAExm?;U4({_rl_L@b`%Ed-x(`+Td> ->O(RE>v=14F{}+8M;Ps*2RAr$T$zX+MOKd}b8jXa!wO$S)CxhCku-d0&icz6Pt36~+GLSPCMEsd4F2d -2qwLFQ=Gat!I<FY5w`#vsSj0frQ6Tzo(CG`op$<e-p)dYjw-h2)n5_en|`mb8N<%&G@1-jxO>KZAySE -H+KEZya}lBprXjIv4dmKCFb@i9zZnvjBzk9NAc4@VMr_^7&XAjKXK+ebk#htI8+IxW=Gwo`r@n<Bnm( -EJ$+SbmyFhXW(z>gdobSBI^ssTU7nMSmjX!!Q^FQI&#dy8a4boZbV_yk**W_4Q63!R8E5nSt|XI?|;` -B%8UG2NIOUTb@E?1E+<zsk;(FUB;w(SED}u&KlRU9sROOz#<49Ljq7xF}xDOZx7R3>5yA}0Hk-64MhQ -lN5?i_pnW(s`tWJok);X6%pF*ocv6|9rvYhs(~~e&p3tE5Xntz&#Lh|E&B5^IaYJ3=31;Xoqb=5pd<= -T(JGo0R+EtyRjn*+7F-4>zc}Tmsi^lIr(>WxX6%*1fp>t_y-!NW*M&s3xHU;fWLkRu~nG)p5TiiYmc? -}ooA|=w(4<mvu`8)Ak*^V?*2no}gvqCu(3L>K7wo1KvC`p5wK0ya-9lG($ZA}YGc#lfQuS_{mlT&R>i -L#IizGqW|R!bip;7Z2L_2L4CPcub=s&J;5CgVN*h(J7q0}47}FB+$`3VWS=@$Zmeyg6`%lC#$U?_wow -uaVCU6xP&Bp<@*NX&t?M2q)@dDlm%=Q9XmQ;$Evzq)gW)r9h!JE8R>U!XJA%gx_inZw{(EKT`K$9{CX -JVe-@O(Xnt$lY|IHTFxfBm#wMcuhKrv!lg1TMVS&P(QwPro5|dZv41KaqJmAhQ+}FGOs96-E>p(8KoB -P-@UwIb-bA)Lwfp#k57Um_QKasBmQt2hj}}J`4XCQ=5CYT$Pwjj`xl#<#f|c3Yh}K%9(q2rqi)MV0{% -(X;O=i1YZxDaE-k|T1Y}LTUBohyzG-CJ(D%Cd0^?Pu-qj5DdRWoHeDnJ{t4@yBz7i|MJ>g>JmEb5@BF -M#%b2;b>k&~Ww#)m=^Krd+9B{C9Mv3f;iSTk+_RlQ{%``CFXK2Kd_qfBWI@515v8>62@1z?<pzaBrG{ -ZaFc+6tXg!QnP;zTDW$X_~#7X(}LG00>o9L5Zh7^cy)k}ssWCVx8#wmQJ7T#)BC8lZG;|#&;Ld{1na~ -LW^R;Mv&AR51LkWky0*JrG0N@q=7fu`?QS#PgqL=A;HBN|{GYi4o!o&)@loYEj~AW2{091)SxXn|J`O -?w*?CmE2v@7msEc7tv5DakOc}j|yzb&#$hqLpnG|hGkEU9+;}6M}x6l<Kyny`U!x&K}*tX=7%u!I!AE -?Q{9;~DPS8gbuci|1?^mijhe+<OM9*<Y0?q)`hD7;n)x0e%g8oD95<#Jqe!wZz%9*_C~I#)#b#Q~$6? -CjP&SrQOYq6%?$Kvl0r7!Z1whrsA_lfOIlA2iFOHz_%y!hZd<2lWBKpXeH-KU4S&pi&fBg$m$ZPCh$Y -byLt}dzwK#K3>inmU-zf5!QtG%H$oJpL+u4Wj=EDW4hX1BTb_hKAjTiKJZ2jms08_2FQn(HPnQ*8Tgq -2qmLZ@m{uMgwibJRZo(W$-nwuD%x0naJMi{S;m;~XLH_MOAayo=GU6;IW~oSdxz(&)Ul&#BMN>qeQ20 -sLF?y2j`qQ7Mzfs^-^X43<KZDcZ_!bv{>Z0{!IXwM^l`>X{>+gO~aa(AO5vHFHKT3K<WJBH}%o|(3wl -3=N`pE6tebCD17hV>|Pv6V(Q`9XiAu!;Z>#ak>xad|RrAd{nRB0Z=1~SvUfF5?gT-;_e2}QCqx4h8uu -ao(_@=NfQQ$7=4>E(>`NxW+3k=GFu9>VsY6`lIUC`mUzFS)T@J2c0&T!WL*ighq{<%qA$2BIo#4ZV!J -%Z^yXH_Z|H71?aoeyD`bkZv}3f{Gga2|DpRi(thY_UvJ2Zx4+y=)XT#ZS}}?w@E8*0|i+;$AYN~v4Nr -*dB-|&Lm3N`wYB*i;@|$2%*Z=7lt02SVId<{xdC_al^x}eCBt~~Nx7%|=gBaRQ>Cu_Uz1_H?O9n-9!i -FB7fe}H{%A6cYvsz7<-bUVcVT#X`97l_4q-T_{3Q&hLl{?n)h!zWta_qG+Oa`N#|Ey%K;3O?Q+H|NiJ ->y;R0#zC_me=;QoIoePd**Kx!VaA(89v4Y)hEGGN|%J3ug)$_71R)9*@Z9z!-9q)lTh~Ou!UU-UZO~O -0=1Tv-D_V(p%F)DgZN#w1U(~!;3WO&c;G*obAEip9=A52Acg#I>;V7O}Vi~Dn}6k<-e(6@F;dKX@Cq( -IKI~4_%e9NznrGy3r|H|?*&P)Y+CYI$uh8<O=r*}xm~3QNcmGZZVKq=y6lHW7Zyk+QK<g!jjr(jPW}S -OO1awRv4_1<y8L%}wKaxI_IQ0OpMk4>F4inf0BO~<Xr_So5V{gC&g32sSK^NELNy)4D7!1I)wo1jZQV -7U+aGmTlC<kJa!ydwaj^@g*J|soG}UEoHB>?YP+ZF?{u+9v?eCg~3wcY^aE9<7fXUppL}hU451Prf^f -C<XIo`Z5LrAMs&a6;AqY0h*<N+0QX%)1o2K%X{cu`H|;-*FG_;Xm>OL3oZ2E7j48mcrjEtn~o<$fg_F -FJr`KqH_H$9rLp8Gi#U+_-KDG^j)P7TW?n$gie#WT6T-EzIDT1yAwi+~KerfM=0Q7HN&l-jxQ;(;BCy -kG53FCL`q<hzSxPX|=Vo*NaN*2|m5e$RNcqgRM7*-U-FltwmU|kWmd|t|rC{V#}uKynXat{YS74mrTJ -EP_5JE)8Fo!2SRQ)vb<Ev06)OYf@_rv@&%J5B;?fz+$iyQLX86?lm0X;x>J?oO_rN)#C?}@>gFYKJo1 -GxWab=^hHKsAi4W;r$Br}nTs^yK#OFl>9p{q>s`m7t{#{CN>I*9-%^71%)svFD%RcD%NV|lvzRa#m?h -;*cmk9knxx7UC_0r;~_jugt_ISOLYe1Vd+xP`;lJ+4znwWsl<z6pNnyN4WP&jGge4QXAPiohvdvu8p+ -?k<&rw&T$mrLRDD*gs0GMdMCWX0#sS6{^+a(Be|>|m7780y@Ew_7P2z1VIw&x!bigk6ZMc?%I=zjlZe --wSA%{yIS3d|K{+-PLdJcMJ*Xhi?YViY<6Xu*z-O<CZZ@q}!I&FVWjyhE7VQSjrezoxb_d*@G@ylUMG -SYEQS;j!3ofnCqB!DMTlqA=SRu=2C57f4knpG1^+IhFquJWQN9yT=1hb{4sj4oP#c#Fn-8oW1Q&>{?y -TF-rQ8JHpwoV*lj9~;_b8HSK!gaFRkL|RPlx6=t0~g7jsnd+`;6w$~SvZ$Ljrv?!FBuQ=x7k6c8-~X# -2DaV4R9cT0J1UasxKJis3r=yBz+e!JkbePT{$-)dO^>^(oV1F1(|QQS#t}`tMrdgPLn5sTL+z+be*Wn -RS%@oTZN*nQ}yS+W9%a&_(z=%H?P(@~g@jKqFicb7@|{tKh>-S2o~-7O<q8u>j!wa{NtC$a<8YOS%sv -TNpi%Y+?2u?P^BogP2P@sFMyK)WmbyVy=E%g$Ty@iE?%~aQV>jS=IS19oy3Nd%M7D9N%1x2Vl(2)dP6 -rlvv$o{vBHQyeXrxe{Uh5p{27*)?OQ*t_5u5Pau57H&qE$yGuyr0lI%7O($~?pn{7(r$(m3r_A);rpX -4myaIpi7ZlX~n0D+(AR*T=7zTYX5>RJ_!O{)bHo<sCU-$5=c1OEV3|(g6XE$#gKqZ=Hhg^{N`x&p3ul -+~+K_kgM;}`bhxrUbgSTh)#z4d0SNO#itRjBx<IPeG10*HlXqc=1T3V$G1@5grI!BpiL&2zR|O?l2%t -1LoaODdm*g45(qyremGc{=*a)a(N0?l812H=4hfPA_pb7Bv+%wN{^R+IYUIwOSQ+4n~@|mc2&2@y}-D -HwBCy!2io0-3it)EKDXZ>;p}30V+Ve8xn5?gQHiao3dRDIw*8u?2D(9`tOu_v9W84FhPzzc?+gYUZ6Q -?M){-EPvly1T@QtYm=^|JDwID5%0Gfb^ksVMT%%3kWY_6gF~O2iZBtAcE*mi6te7LhSCk`j@pD0`gxA -b+y!(uXj9SRdP=(XX2-DkKBL*cOrj>(u@g3!YOo%fo|ChZl0jR3#+TKipie5}Dr}C;e6b=|_A}SXF1p --A;(9{S81VTW#*P&EUAjK=D%~n>XmW{8OLz4<>&N*a*+2D}YAu1_N(a8O;XPt8{2L!Xe-tYbX|NjoGy -Z6~=4{NQx_TFpHuJkLk!fPsco%ci%9+sjxXH11F)LDM67&?^>Lb+CV@(<!#Vp>3{sc@FIe0;a*p$r}j -b)HVWF4yTk`IT;_!tod--5Pq;PllNaZljklQ{gZSorRu}S1}z_b`w_CJIBQlE0VhNSVQCO)&p_uFuJ? -8_A6kAsbC2P)Li(k>VC?|FEy^23a0bixU)5l<ib>l(TjO=&YXLHo3M=q)x2&?Ll8H)l2_A1sXS@qYFZ -E{`F3|C_Pvjmx~Tx`OjQg%RvkNSr<4kzc9ywwQ+cK{rUeIGr5{@x@;B-=l!3grwJM~@R#_HLgbf0bwz -hF;&g3WRv;*hu)Lb(A2XiWZ>X-7Ti7mi9&1JlOhtKZl;*dd1?JMflmb`*&0R?rb3^<YdHB}WP*Vmk|U -L4}&y~yLvsH=IWa(zAO^MNHfUZrJTC8yl;PUkk-mpA7RvCzZTfot=&2vx_S=dO7k<{CB0T&_uGI*P4c -m!!F%Dk0J7j2eb-f@_JYifR<cQj=Nhx!l&B4%H0(l%LR%EnA6^mwxtx1}eA)DRON}8b{ffD^l_{YQ=R -0>8@!lQp}j19=u*#jEr+?TWMET+L|k0zopmmU03i}!8oe>Nr9c?p<Qa}Kc}6Q3S5iMxmVT03@p}tMRT -f*D@Y-O_Fc+^O6?Aolg6W1>{M^=CWVb!6!{h(%0lV;&pBi5=0E48%2`~h#TlW|Q%!NvO2>4xdd0foHV -&nOG_G6aI|S7u4xl`HVEm$`X|ofq-ffZ`;B522R>SSi<=>H`X>%i=(poE2)ziGjpc+cq^9bK1qNE21F -;PDQp!WG=ck<C_VO4&6l=XH#f6U7s-EEXT+Iy7Jf|pNtTyy*w4pj^B_8JqNb~WYjBel;`BLVkzRnI;k -U)^w)8ctD@)&cpmy}L_mg8-{{_vt-~`%JfczFidQ?TKU5X1`4p+AZoiY9ViXDB(i0#PhNfpsk%|pdF; -<SCVMw_j$8ifrHJ<KGM@Z%F}<Ohs}*i+YvMJeJ^Us%NuJJJJPz_qbS(5=zh;JBcsQTn>cPfb=KwK9ZL -2_p8oJiyIHZ4b=*ZaGlg)rHcN9#Apx+YxhQum=kiRpiAzW(9sG{Nz#f%6Ty{`uKjN}0;OcabfJ)Q+7q -CC}GOrwIr>`7o9v7Scy(#}YQ^3`G<85wbv-=2fX*XX@)}pk`Isdc^b=tFUKfgwLKfd&F3}?KDkNIV;* -`B1&x$KeNg{vQ<eDyAVfj%!K(;Manayv=jN-v#`P%q7W(NL#_!<-fkb*5++4s*`m<&wXfBR}AXyg0nt -FZ*)B4bi)u;p-)bucfM={9W*ag)8)Rp)rmHWLOE(2@(k=5R4{>BnSZwAxq8_g*<$QOodE^%pb}8k<1D -*E6BV+<^?h<$*d%^ip;8FR}2vdmkO6kof{HFuO-+(um>*Gmx|xJV<|8++EwZ`7s9ayM~EG|-(qX;s^Z -!HRazc+SLZ>KKhCeIqIA1IiF7Z0L7e{T38q)ilgnzJ_#jVwpWr-!=cN|1ClV|sSTxk7(~*V4T=IWr?w -w=qtv5ss+%!McdG#~-<Xl*2@VV6Bk33c9+0QQd=YX<lKDwMW<333^C<GM*l>~yEJqWxAIz7pG(~fxEj -?7kMwj#3ynJvilBGZdZPcl8p^dQrNOjj~pYvzs0qk;4rLNJ;j<w--{40R!_4SB)uHS@vfRwM5m7nj;v -Di>dKj0p!mscmhjahquvFX>NnR?aO#m5a4DsP9VoLO}0DPWh$S4?bLVu$|+B8H-nY8w|VCdwkd5;rt5 -ew>`g<G<;n3r`Ut4DCC_5XRO|@kRnV48N1M>)w%qm;vk7sd`fo|2VHg8{&3i;G@I7*^R8a=LnOvfLt_ -v1jEyS_J)``(UR?*6KWHFz^-1kkY;#g3lwl<C6DZWYN!trm<RCs9Dw;m=V6v%zSGx1@OVRSP6bnAALL -~BYym#k!i{ssk-$V5GRgrCRd8O4WrBdM-;TA@2EAeBGQq+lGQcj2YH-TSkU^EU(g4JG$>vjvJwR_>0) -^0qq-MTpHtC4A*#ZeU_)10E^QJnK}F|^XjMja$lNzJ0%ZzXUE2vw}N^GQ<Hj`A?|8WDD7i1x*#e(^x> -1s`Q!rU!0b+;*OUf`X5{qDY^``Kh4#QmxwO^ly4aR};kJj&u5P?1)XfI`M1!XSh|$+JKta5w;6N)%QL -}(EJv;Ho`?y7_`w(?%$4+`x9TOUQPI_I&3_~gO_rtTWvnJdHIjwtv0-O1;arqGR>9S9mwQ7#yZQ_>Re -KCk#qTB16I!EpV+tO|4vGS{Z~wX0GXy5GF=Io@{aaje10`;_H3YC>WEWRMp#|$wv}U;A9rnFKX>6QJ{ -1TNdD){p)1s4$LL#n?EyFnwl!)^5S_dU%X;M3-oDYDRd0YNv=eeHwmtAZvR(kX0Zfq1aQD2n!wT@!B_ -ED`^));|Ng?&sb^#-J)bK8?9X5Sayzm?U)60qNPF@LYLZ}%w;3)nu#$x;;Bs%T=R|3q(FV;+LXExw`N -_P%|1EZu)%x0o2>1?hE|4s-obJ&4ift=<-0LESkFl8+*1{T9kg+AWlUj$0`2IzaT*x`i^nNY=WA5?3X -<6ivL~Kk<U~^*HW9LvMo$=dB)pc9IJn_7TOzs2*6C{ETOS)Z@~4c%zWCxZCZaW;nhs)T6^6UZo=5&KQ -taKilV22K+vEhynS2Kt7;!#?8u{{e*c{!0*<S-R{6Vf44_@n`q_5g|(4auRtJ=fznn<NmLk8L3xXb@t -<h6xyHnlH;^_nZ;q;riveXVF+N8W#3@mB?z~@6LhL*aIIcM9jN=B)!g)1s(DcC6q}M~(F4nC$v;r|{@ -m4Fl(aKrA%FnyToZ;R&?mdN|uoSd2N<q77DKJ9{TCfy&RZBrTNCAle#vgO%4xA?|u*am2G4BKRU7Pol -7hJ<Ws%ow86}tvTr->Nl`=hM+fj^)G63~v>*bH0BVz?u;nwQ;I#wfQe(wS9#-RRi7I+*os0hr~@%&Nt -va-NZFR~MUNwSyHWyI{7&Rq2FSrh6!D+4NMJv+1QYX0wIj!e%Sw_k1$@DHmW&H!DA~>8+e$vzzi2o86 -U9*z{Enu-Ql1$!0s{12+3B8`vDEyq*sXEpoa=S;<Zz%5pZtlx1v2Dn)EYEA!YKt;}L`tTK(w2}&xP_b -CZ%CMx6DOi@O%nXZJhnWY4=X;u8$oT>C?bGCB3hQcOj*h*WtZo(Xu;>A{+W1_gR73ZlcS8x{iCd_;(= -h%vc%*q+IJ_YL+Y<(8igKT{P)*WnJ4eL8>T?^|Q^BreHyg1)+vcr>X#jy~|Vzy%Mh%%3@I7>j8K3_u_ -(;7+&e?Y%mnaEZQYAB=F`W39h*os<48OT;l^(npCs=(TXtv@pTY~^z!yx3a7^t1H>(~tYCHdQkHY~^F -Y&af53jLH{m#f*b;kgeDksO*@hp^WWu%0~VG6-0TJtu0`Eo~^B5eT=PGaj6us)eP%gwtB;w!`5!Frmz -(k87mXn>I>^Aw)TN_7+Z0ljWUp}17YpWRtv0M*ct+BTegP5>ZPL`i8p8d5Dn|4JXmo=u<|2Y$HIDwtr -KAVjIH;<x<8Nm<@eUuQEeS(ZxG<dr;fNsD{J%k=uy`Iw}G0=6RL|xfSW~gDNtQ}1Kd(Hmuz;K-Y1}Md -Q<gKjr-tIGa*v}&dae6^$c(e(ZUT-WAX}c3)5V>sV*%7+#)rXn^l)q0dCQni>vC=F2HTH=JIPUyO;yq -#%eAnRTu97w+WidLDi*yfLoU4@`36yFu={KxxA{nSOVN;YA#QyE+GMKvo)88RF|*-w>-_o$}ZC*1Ns( -d)KAJ)sdx0JW3_2ZdhBC7(O+<GgwwvaJDFZ{^)CN~7(@yKxsx`(r~!Z4<z!mr>Yekmy)=KPS>F{(niy -$e290a;^SZ|6WM_@bPrancb)j?lX;Q8#7I`f6Y+xzi>zU3|kY>A_srWu$t>W!cZwacoU&IxMv1`|h54 -1ZEaI*Czq`C}9aI$r7bjEsXsp2&t$l2DK9GeYDaItw&uOffDYojx^kL{$9?O58j<jBeV5~m%Pw)2Qgt -3}R4D@F4?5lDf)y0jfrAJ)~$b`1T{hlAw03-NzQ@oynruzaCm{O1PvXP3-4Pn~hU6c3dK&T)6EF-E7t -AwCnen_sbk*h5)AhYzzZkBTez<#YdHYjnXD>POk$>+gnB|E!i+<<~Xp*#o!cUp+Z}f2?vE?@G7ls!tL -GSCw0y!$hP$lDK;XX89VFpH}1wqx-*9cl+-0eVUGniPM1n)2q)Z^vW?Q`&JlEW)Cv`E6OW2&i;%4L=S -6YP_gD0$l)=*vDrha)Apq9w+Q$q$IIt@Y?^R65u=>j&+R_8$mko--#OEUDu?8j#;qIZzoDz)CyNUEoW -=UU{`~7pzy5Q)SRsA00oHcd+AE<eusvS!S>e!`tqawCwDtztK3e<LnBsQot{E5gcFRSP{k@&{9==?(! -kgk;SR6>dd6%87Zh4oTY+b3daOnspz;9K)e^%X#bKu$P{jU^#*{u}!#gP84W~&L;zv7JCk6Q2`c&sw} -X6@pU<v2{;<zk4tYo4iKG0p~S_7ZW%lJ2+HKdeP@A#PzZJysfRcaeSE?Z3#Dd3<gp&X~E6d<Xnu_3Y2 -6nF^wDoM6iW$ifO{2?zEoDJtv^ri6N#9_r+Vm7o@ST~vrb1tq4!DO3O!HMVc`X3u$-8(}uFu-#dVDZA -{>pV?nnTP}+3vvACXg;Brd-`8JYU*Lu4^1Dr2OQV&ht<^dB0rp~~>9gM@%FD0B60pbg&>EhPC@u^k_n -2tqkyh11?~jmP7%Ul)^0sMCF{-C%CBxt+gKuJwj!ttcj=Dgd+TvpP85u1%f-EhxsyV9*d<J3Duqb9~q -ho=iy%0p%1+h*&#}gcHgmvv4*j@~2aVae-gzWflL_pKxi&%fY1@vQ8x-i6vS*hwscZFVPQX}HGI3RpF -nHH~us#u8lCC6TdiLQZ8R@Z^fwhpGvetvuNuM($Au}PDWaW2{j`ihE?vgUD=WH;rYnV6g$z)Ug~h9e! -0)LFyRdV5-vvC&2RU0GSfb34YPKjQ&xsP^^e^i1<FQ@^0h1N)MjE^4m&SvcC%$KJFk#MHm+9PUrw3(@ -Qk(OgNdd0QYeqNrGn8cLZeY5q|pTYo^3_xoM+VL>P^45QzGD6gC@i<$=q6|F#~<y~n+RUG57OEj?zUF -c;QI`67%E=2aH_6jwKPX+khP0d4gsXH5kksSMTV$=h6nHC4YZHEt62m#nPnoeYwb#|ccY%2VyCemTpu -d)XGAly~VA+kvJULYTA+T7gb8<&GB{`rJ|8>fxHKds65<f2w~c6Qn2v=LFLzsW^jF1zM!f%PgVd*`oG -mg;mZWw`aW24%xQ+1>0@E$iKNl5B7+#;Zn{fvn3KSpoLPS=cw<<it|%auB37Rf(#XoV8S;WtaF}jEzk -h(*(O+D$1!q78fI0pVH+%+mBR6+e@QkwN24nGLHp(V=8!3D@9B@k+CbfxS%fr*Tn#<r^`lo4EQE@f4Q -gH0;!@+E)(obsE<Z;f1Mq;q_RAaa6w4y$(I}9L-y(Kh_<E5)BH6dEW{kPX8ifwh6r1F{ucIQ?UCkouR -j+-TMOl<Cmb6he|rLZiOU1E;(7TAEEDam(}K#}Vl}B5lh?lu_l&)jH#mGdgx~mtx}kCpAz)`je7I1IS -C3k~S9x|CpD^i_V!;gD2TvF_h|W^OD)&Bd-3_9nG;eoRW1Tne#x{ultFXQeq8XKj4WeH^?uhy9<MnP3 -4Sho2AbP2g4+8Q^xeqick2`2;t~~O%k(QM;X}L+ssZQww(v8ZG*GoeKrr}_WQeI%7p#jm*o3Mvlv}`$ -BT};tf%X%WlH9zT$;5#~6E3JW8)R`g=rRp&UR&@}T{<u!qZA{q3Al~#k%R^YbWw`6i#`b0lov9_*R8s -C~+KL@v3Geb6eLh*K!4BErPj|l#)_1@9+Cx1SVe_kfzd}e!8S0TgSlXIm=c~!Se_bH&eC3U=pVrv;s_ -lBsbFQ`P)l=K`YM+C=EiQf?r<86yjNdJ1@LRZ+e=GQR5C1Csdw_pe^Y2djRhH$@&yh!Y*XtkJuGj64I -y9lix!4Bq&L7$~0Gw*7?|MyW%qO^5Z1=`0O`zbuhr?KKj7wXb-*U5kPyVU)_KMQ0Zl$LhxOi^lV{M%6 -`z{7~=h~iuzt-^ALZA5N!*7Z;U)wKQyz@+j(=Y&g5p~cMvMp*}wDBt@^%(ztz`rlh@50B=(Qm=Wrh@g -2NHr;1QSt{g0(dqpE>ic^4#ck7t+jX679$dMSFML}S1p{etM(igTey!Sg>8XZ-B)|>`|7@0FqF8q*uc ->}1|C;9cwF{9_SJ5!wXZfTOxstxm-p4ed)Zdrt_rJb*?NcFsq7`*R|`AFZOWc>d~z<clRfXs9k%ZIyI -s}Hx93(BZ2=~Q(o~dQ9pj}Ha4frrx54iDL)`|uRoe#3p8|PfE$9+uep<X;YR0Q*@wVW2nFVDY9HUYzM -!c8(<bhbitz+`8q*z1puB2OA<z1O!D*V(#Cx~~|?t-^~blc6rnxhx#xtxb(uX*SMc$Gcxu$#*sCHo?m -f&FZ^<vr-s$JUAzF)eJKBWx!58R*A8?o@rOfe)FBjdtuK3O*7|1)(st?X?3lO$B{n+DrvKV9qoZbcQ+ -BRB$VAt%Yo0hb@faLKMDe)28jw3MSi0nO;-~VH{`eXfH;QEM_rOp81^w*hLdf>^OZKrwki?%)&;v_uW --l!JgdByt8tQz9$ze60MQECzpf=0^|`EMtU4|3i7Zg7m~>99=R}-#qjQ05UlR5eNNQiId;cXf3`KM{$ -%HT&A%*dZn(Q3mn1;-=!HWqt7YLNN>{<}7_66$-DW3w3mkrTv+(o2%)R=KS*WvwcP@4izKumtgg@3M+ -Bw!b60-W5HV>;(&sr}oyzmF_0YmAJR!p~OyJ4;EcXRpUm6FXD4Xawn9(S`pII00v+{$JlId_LtQ}BW6 -zSzEM+Kzp(@NI3uYLS7IKCVK~`m%1Wj-9b58Kv#GG`9?A>+{aoe!Qo;qqDX%R_Z%r-{#d<sn(g;8G8r -sjQy5(#&QW)d7;*E)^sgfus`;`{6c(jwX<Q*s!~2~sP2)C;61WjFnEtF#0hhA9;&sdK{bQQ2D>@f%~4 -xaK4GV<ogFTfs(WR>#$MU0_F<LwxT>;-&b312b5$UUSAezZX73dznafYnFSbwOJJ!sUr`ek2U72E=tU -7Tn#rd-xyC`AK<H&fY?I8O`cG;!wx9$Eql^T}kaYcnM{Gso+<&-ueCHpb#x7CB&-L?I;yFH2u^YD3CR -Z(F9%9vVC<wlee-fyconoI1$WiJR3W881M1+-$n?f0m7vEP=d#%@}UF2=auHg5~?#CBV0^kCR-8^GIb -IYXVenF1X#WjmP~#-|t!cljN>)z(TC1Qn2i@%mQVtxkF-?B)hu-Ehl7qh_MI;kNHpj1Rzr>&RV&pP+; -<Ec}#1p=rXvSXr~HoYB13_Li$$^e&c~t*umsTr9O<kL@ttV>_&Bd3kf<BOJB;wGK~p?XA_x(~47#y|v -6eT{!f;wJdbn-ddwn=zD8{bg}Kc+Qdk%oQxZ5LAbiHcCv@Iu~rof$HrQ)Lfu#!dY*UH>P4!kP*o(js8 -8lSLkIKxeXV09mwr3{?sD?Alv~1izpQ(HiF4sz+pj(>fk!IKyK&X`LanN=+&w&xe7jkAH=HW1oK*f6l -tbeAJ5G9W0~`BNR$y~&Lp8g4l()gTzS^5lxhIbHY^J`M)lB3i*xYLSaKt{E*6|d_=xOV0uPndS*t)DU -k5F3iR#?1A-ZXkbZbT^i7HEF<73`T4p*ogZq&C0l^$Pac_EfE|6!{jUQ{GyQnlxD75z6})YDWHT{uZt -!)eN%Q3QOirvu{*cu@q%+a|2lnOLSTTjLQ@kF2qazE@!20Gp%N~_48*}YfrgxVQow~45OLDNh2;XZk+ -9<@=p21j7NDJH2{_GlS~`?4%PPB;zi89QzOcHyGGPCTswWf7T5B(pd#X}wy-FlOhLDl-NxCud0*tRka -d6p-0aGQ#qZ*x!)1xgf7Twb(-szYQ(^IiI#q17>UONr2%oI&wEb?qMSQ!?B3iy>5z`2^5bPx|k$ceF7 -NMTE>FTqmZONs>o%Yywb`}++%I?W-WG@}}m|YaPdhh7LcUOz@GHn)F8;vart+a=F#l=!5LlH9wjYD!= -z;0VJ<*fyJSIWNI{&{%>@2agD$s0}hEG5j|@3uA9PZzT`j8;}*g1G!p{f8(~Vq=InzKJ0ZeagocsH^@ -bepNK_B(^S9UbVGT!WO7K;U3jE?64nIdzmHF%XHIv%x2A>o5P<nJe%_K2rn}&9>_fldxh59q@F-zZ`b -@&)MJiT=1i~EV{TXDnAFeJy{<)}UlolxS>9S%^^hZl*B(;0CNRo1yO>|u$DC9e5HeV9rMx@cv7S}EE} -JhBQlc=bZ;$dQ3c{iCP4dG%J$482F_q=b=*6`-s0Do@Csf+@Admb6S5f3tz1tEjGATDX5W*^016OY1U -b}{?g*sE^-(0)QnEKsL)bF;`wE%^$m`5is&Q#cs8{|%zgz@`&Pp@aJa#N;uU}wizr9o!R^ExkP7|-jZ -ZrzSW7H{v|fzGA^%*DnkpJr$$e^NwyGpZxnl2J3FH|mMV$yD$>N3_@wQJx_pYpsY9uZifQ#Wl}5kry* -xNOQv-WYNk7PhGWi=L7T0C;CbMITdq#<#5-TH`yC3iX3!dp@+Sxc8q9KV&R|*vC+!lSF|Al>z-i&b1G -&ZPR3Pq=KP_qS7$b{H^naLBB%TY&gD&T3_b-&@#NbT^g^B(k3z2Qz}n;Fx7XioY}+7#jhK$5a9*4xIB -3+`(to0t)vNz)xYx!bV24#*x8zrX?K;}N_qQkWzIXqzEo`@`o*I}oH6>rhdv9>h-+s_-+SDLg!BjjSd -@~0d<`=%st2UkHcJ`0*nr-&`*ngsj>GAEOh+iXP(;CVwSM~J7!V>b0RZ?C793<P^|6V6+TYDZ}C^1t( -GG>g_Wf^7npqNa^*N=EKB7>2I0A6;*DV5*=GKxCQsb*@X!U3q@-&0qJ8#bnYsutFXhLs~&Rj0f%2`Br -6df1~X>_u2(VA|{&)ESy?T`NY^qwvuC88_~l^NeG${JU|9t(!fPZ^`!b`}oo?q;7<GdyrXS-*G9C-1p -db!E`xNK8)-W$OXsbk)I=FN4`Ar!;xc+_u4L8I&ZHaUoFT-h_~0J?_7>#Hw_?vGd!|Q0pxdj!{I*kq3 -vkz7Jgrn&4X;7myVOJbzIo@*^k=4Ksxts_Y%pbb0s5VaFno#+Ra@1_WaYirHZ@tE^U!!vMJYzAjk_pX -8ic#$AX_|{M?71tl}alx?#4%g&$k*vTrX{T&<>Z7ixA8zBt?~%yu#Vw8`4ezTNN3(jT0y9!0H-!(Ah6 -mH8)KtPK{n4hpkf89#Q1{n({1^LKdp9Q7+1Wj~sK8sD6PB5YSm%MpfRa=qJDc~99G;&56c*>WbXWW;K -3$Ifp)&v0%NoKvVQUc*<3RM<n?X(v>-Qf9InZl1#3%y5b|oKtPZk$yMZ5Blt}xurReEpO~sQn=T&yre -ipI90D2;QjUG-f?`$-2+?otx8_@1|%FaaXP?lSTWd|PZ^*OpV@c$xFJkwrSqj@h^P9!yh3eD<Ls4wCH -6yw(i-XSZf%%f>T1dN7q&~WmNeIB<;CZD-zaus^5q^4m09s<0kEODrO(x9Wq(6lNQ?ws@4}JOKjnA9X -3gqVy+3;4HftOue<5HO@d3*hw6VJQ`_)NN<Y0`wRb0`;s(^2-Noj*(l=c(U>Dqv+)-eGmtRwwOlKp2m -^S;B%m7pNNt%`najg)?rBdgeDmu==s?2Godd0PDfc3FEV4{xJyd~yNK@h>cy6{oaji*>lNBv;1+`&@A -vr@yU|L=k%wciGyexhe_I5v8jtIBM(hB42-IzpXia8p@y4RIS^JeC>SV0wMpl4>p`s9g#(IDwLsDnTU -X^rp13?MWCOl02}*@`@ApvDI@OX6A7?PkheZjom$isEvu8?MNlv!&3SwbcEUz(p|o6fL@PHx=itdb^n -rKDYTx3NVK&FLif6ewukhPj>^h8UPO2zec3k?R?cPgAI_()5CtGG|*Pi7^U69Ixxq77*r+hFG*UZ=|t -xXa4n-h7b;y9u%^g`Kj&@$Y0SW#0#-@k$FJXYMuKvVv3lnB>2?d%87=X5j*`sx`|=0i4$)<&4malUk- -c$jm*ZqwpIigAz{#{+!5ovRkdo)zkDt6ipo1f)8qs@U_LqGm<YT*02+YMfu-nnpazZd|WH_+Fi$<Lg& -a=5tkB-CDgAZ|p>_P(AHY7Z#0aQ83!+R@-fSXy{Efs@P7UUfS83F4WG{S=YL9ZJQ>Pr)AB$yH!jqt{H -H`x<!v7J|tF&_zj1`E4&%5Xv~jjYscYybUwNi*V*mqv=3*bUzXM&>@k_+<x|o2ifJJ(L(BCDIB(+1kl -u%i6_Z9aMG7zf=4%&8-@%ph%8uENW3AtrjTs@{0Googf)5jRLIX(!r%=vrl<OLBKHJs4gEWa<(JVzCi -u(y>I8f`i9I4N2kb9Jh`yo4)lvcva5uu*1UxlkAH54Ah%78EVxMU?}Hjepsvo%)w&DOVm<{y+)=*zbR -{GK~)HYJ;Le@u0==SQ6g{cw0wK?sD2Tm$Y`r%ci*YV|tWu;oRe6`i&hjk$n{jN6sZAJn5)PCQt>WTdD -8;o8Y|A^$4HhI2(@ctfm$NcWsKCiMj$zsvHYUe}?`PO#oz+(Mn>X{2i1E(aF{c{`WHnKsRGHEk_X2UU -(#&ikG3)rcmO9IQjg#BR<mFr9_<Hkhu$HYhLLHP7CtII_3*qGoxg=jH8lTG*_-YfabrdHbBpmAnMk-0 -~*XU-CNS6=L(f&7HS@Puu}!bQUE-xFP9keVX#WrLyAzN0sWCjO9;b$wQMw(!`)$P23S@-^H!0sSvA`? -ML!Y<(B^7ZcQq0Q2dPA)Mhpy7*0)XW-K+enfIcpbtf2s);A8VZ#+3=CR6L1nL({@=5%U(Gv{W}hbd^0 -GtnZ?K#QE4Rm^KOi}{YM2-~W{z1DF1k<uS<+U_mJ^m5&cr+XFWdPUgI<)1QHz3rtqJ-3Pd=Av7Qr@I# -Cx`x}%V@k%w+7KIih7Jq2T^f6D{KOsaVbsXyu+P4c_U*cdn-|`~9!ixOQH0sfk1NAmt=iV*4_Zfc$5o -q~vJYnj;ssKr>de%y6X+zSITc5Fj3gn9<Rhr9r=b(?t*y?+Q9%tjZ)+Ct`}8KNqUv1K%CDsSLG{HY-$ -QZ@nLE9?(rK2yCT(gWuSuhpzZI&a569}-uBi}<Rw<<x@8a5n<bcxY{YYarQS^=DVq%r>m$`^4$7br)w -erzS6m?Y<H5|-Dp}GY8KEtfMF%xUrkm@B;s^PCtQ(5`i+Jy}?{aW3B&MNOfsh$M^KYWd0l;_BpxL9zc -#mJbViJq*``to*AYYYF0o~A<HMiAu@u;03+$f^8YwKV2eK42=uO~+Jy734_1L--*o+7hJ9eThja8?R? -etxG;0Wretfej1Z{wZ_B*<JB6imBTZPS8H(ol?`&zF4uT_hU0RLQ)`{9x8R-xT&;oKOtr4ozzqsGHX_ -YA|Kz#xjdwWii0H2D8drV4#(U#x+^^B|7hdaz`!$Z^hSBQ#HS&eyehp{sehr`fMZ;YSrGCN2lP9$~?W -*$O+Wi!Rn1_Gif{m6jSl%^K$vIbDvsrr}-HFs;YgK+LmP}P4Is5PIG_gu)??@LnZ8UbUt=!$dgSSLiU -$qhA_a*gZco{)ZY#dji8%P+koYI_Ql_O&uo9eCY>04}^vOitdL|yH>%RSXSy}k*2%sCd-@&3se>S{IK -YmGuxJI8Z#(A)QHGGpChmquq6xm&w7DzSFT-{q9Q+iAe}*$oDKJHy%ey8*k&wu5ZD2As4t#+lnk{Pqq -wX>Evpj?8wx^o6~2JTy&Sw&g<qDa3wDO5_jNO@&>{t5C#u=mp*CiB7hAw7TQDx|hUTU#V-<cn@}u+8W -}h?n|erj}mj~l-5n6E{}_9JLPh8JbjX#4^SNc`~1J~q+b-`0fNN@PZMk)*iP^X!H)#4mxM4A+({5da4 -*3F1WO5CBv?<di{LYY?+7XhJSv4~MbL#{FhMLqKk5Z^A@C%)QYFMU1p5fyAy`ZBG=cfD5Pb+j2%-rl5 -LgKo6Ff)o9>Fn!9|@`mysil0O%O?NFM;(6Ca{HgieN3l27>JbhY5}o{7T?V`bjGSUxI-I5d^UW_YtHM -%q3V#@D#yXf(-<_2u>1QA@CwRyAW6iq6v}-@(7j?g#DrN)Rl0nB$`iGs_$#be2k!gAe-PFf?bu@=EZl -NEuuKuA}kXuqStndxU0b8_;&Imi+Hk&<=Q~>G;Z?qB$ya?j3NlDAUGpLaAtPs%v5W1cIM=yoE#yhiX1 -UnWQuH&M1MU+qDZGdA-Yj7F^^y}{gF2@MvN9iMGw*6VDByZiAWL3>5UP?MYsqSBSZ+h+)clu$Sst7_= -!6y<`A+)vfrWUIYYCPl3>OpSz{B@ZEPQAum`25XHJISY+(}_!YWb;(<EUg$fiHwYv#C`h(>IVrnpCl8 -2U5%QNP9zX2Zp>I=+xxQK%>p#6If!j%O6n=}T1jv1<?V7ep9Y$@f%|MW&e`lYVW)Dc~5zDMpeFoK0l6 -WR7<#`%NKga>$lIzd0PsB;xrja!I5(vgvDvm_lzE<O7sX=NPKv!uM4El0e~7#RHnZOmc5ToY3QkzeM_ --%-@r=G|iNnjpN66Go_o!sp4A}{iQoXs4@1WFX2q38tYVY&Ea?Wyr1G#aR*(%E}K)bkt_UU66I!&FP; -6XlqGP=I-hzlZQx}p`AH(2&7zy=MXu=-+wIIfNWo+WPDXwv)XAv~#u3spnR6$bamlU`GK6u8qOhq<r= -I6}e&6ZH?+glIW%<ZpZcQOt&6GkGg`KSBuNr$gnJTq<PN`p}8aP@zo!);USJ&oul7ZjB6whcaU$PxvR -1Rk{*HEti9dc2d4qpcyI!-#@>Y^aAR`@%qZqdWrI7cUGT)Z9^zysiSZF#*@-1Rr}Zw6C%{c=`Udj0-J -dXUn@znNZNM|xSDQ;2su`Ol_MHjbmNlB1W!>KOI-`uq+2<2lwOF_SUxrAd_fhMd!L@ml<Q3;*lpcP6E -lq+zU<=S=N8YQgC&jdjOcQ;vWQVw%jDB^qSr`t^NpgZ$JT&s43JOXU)m&9Npr>VW(IH2%LMFEvw2WPT -@TvFq_xmqYM0ljWfs*P|)i=Afh}Ie4o|!?oqn*N{IqjvsueGKf5z%J0@1`1u<0=f>krpx-IvLys}%8u -|4#)Yr+J2Wsh2TbwL<PvwwiZk@8&C7a)MEYvWGHF%-xQ0tCc_;$RpWTKlb$b^q~zOY~@Qrt&oGq{t9y -I9{jW)aQdPA1N~tN7d^T9f$#nYf(Om&~?gmV9R6HR)Mo-UfFv+mo5{sYTUr$m~Fd*HH_}AL+RtTc~Cx -{guoI$lO3CHnqM^CPqpYlNrTjBb(c4w7;M&mg|1KRtOe8^k*i{)zq#c$u@~Xg4?s0_C^{Xdh#FX$HX_ -pJcWHt)!JS)G~&9SxjBP=2Wxp#Glft`iRi#_N7smL0Mi^se*@?Z?>Ve}3d#}nuRH4v>Yv%+GE4gt?B0 -vrducADld}dasC8A%5H7{4-h~p1XE<Roy_VYuO?S{;V#v(W+GpJ@h^5xX^*Ejgt`lZC?5H=?w6j>VOJ -^Lx-^l{K^P%*866-0|JdfbkyV^y?SI1GuOUFmYK~GyxS50S@BW*ohJxx6w#FM}+MmE<cDh@*#+v;~{5 -Acy=aEs%TlEE5;?mC)$8Q-J09;glz!?+pW6POk?Jv|*gZaqFd9z8r3o(`BgbwCaaM<PAl%~AB2VVOmb -h>Gf!nAmF;ClXEB9z+n5G&yPNq$JMV;hEDN_7Rh<nXtwrWm$E{AlnpMjuj)e=^RIdErT;MC@VXa^DrT -MGUs2?q-<M4w(2J#gRPVf;zzuQ6LBFP#6jU^Ar6E`ScDNV307NnVgko8G&_}Tqf>0zIhtEsQesAu_A= -V0+M+Tu*dfNInF&^eML76}Kls6S;pFV%>ej&BqhX`Qo=uvXyqewAyhY2KZ)w%KP1|<2-qzmSp<^fS&R -x28yZsKI?mc?;^6h=6U!T7H?&|M9AYkC2!GV^bA;BS`Lx+WhN8BA5HGD+$$Wbw)$Hc~s9e2<82@~&)z -b|3Z<iw=pDJiLG_oq+I$jq9Sony64pD}aR0}sxgGdEZK|NfY-`RnHRyY}0)e__<ZT<@=-j=!2d<{AE+ -Zt%|-e!k()`3C>=u;%|X`~L?#*XC);f42lURsY@SQ$qrrs{fpC@UL0|{;Pj~MnC>q(4X<m`0a*C*66P -JexvkO(_PzzkDM2I^XBIl6h5?IVbLP{;^HL_FJ1P?qmMoQ#FI}gfBKncS3LLp3oBn-wR+7<FRy*&)z@ -Bs<IR7qdu#pM8#Zp*{LZ`Yz5l_Mt=mdUx9`~b;jZ0#_U_w%;G=_w4j=jW=qI0k_W7|dj(_>p*Wa8tdF -u4HXU=~2y;Al=`Hw&Se6He`U(a9o?c$}%%U6D{`s1qnFE<4BSM)d35d5d<|4*m?Z*Pd}|NcLM|8CUXX -{^<Vx02mevp-?5<7N#H&A!B7f7oDOYOpUe*dH<2A2rx<+lFr6Xt3k-l7?!0yjo;fl0GgTmzt57IU~lJ -U`-_*irmNKBxR47l$JEv8lI7ynLU+1#HnE-6LPFUldY-KlcF=TY+3B4zN^uQD2g#*O45+bnQ>waX|Na ->uRSK-jWvGs#BW#MGi>SUsugFvH^8K{mvCty8aR8ohK7c^;pyv3eH(Z-_m3Xy?ji2-^^J>mr{>1YBzo -MJavwcH%*>iej|ce>?!v=^3=jHq*ZI&OFYlqed3lt8%R_k&&ChG$=0+(L78X*5`TFKX=Pe}P-MaRVj? -1I)lt^?m4w^D|%UhU7p#&w9l9J-#;XX4fYerU9jrcJmFq{B$23W^vBS!k&*)uVnl;~={j82`JlxedD) -!`P0zJWT*kzS+!sE<=d(ie4%D@E&*4Nb5nq?<#tvoo{JsTt<T1Y5@Blq7`XDG~afnx2$swq}|$vyw8* -Ni&ls+pGzb(xKpw$$$mlk}31d2^r>uEb^2{{-N<xruH=W$xcd0G$&_gP9@(QTy*My{$>zS8%DT}B~yq -1jnC24=eZVJ^l3(O2+W`0iO8H}o=j0g#>~l#EW4#vi=KI!Eh&3eYQ~iMzUL%at%lEHYQp_^&9NpDM^Z -D09jQ#R?xFfS@w_e%!Wc(Vc6L2}@QkTrG;gvtYGq|NbqrxL_Y`x4I&-3r)N~b{DP#_r7!6SELQKxgux -4kbn^O`p64R5iuc5CxPp2eVDN9qW=E<3fN#@LCbCy2W)sx5Y)c$xcPBWX#Nt|*oZR841=*%oC=xS`L6 -i{4Kr&7vhk_4nmJnY(&<fbcZIVnk#638(<H6v+&xpR6>opH=aNwp^BWF<^aGAATkiGr@ZY&qGzCZ%Td -O3IktRS#H8{;FjYDUrw2?97a*Nf}m0LN(G#%AT5<k-&_he56o4rr9#Bls{AwYDQHT(gTUtHKjA2$ELH -zU@?Kdk2XZF#yca`ngV&ru_k02oNp{SL!L3Mnx8s&r_-gDXJcG7{3a%GmK(pDZ8<<|%;=##`d=Gw*G^ -r{2^#j0lo~PDfk)R4U5U2z^voHE6rpRQb8VRV`A~<PWlymob92nylBQG5l$vZ#nwn*ub^G<xnM5L`2~ -7g#O%o^!bb)0iOih}anLSH%)JjuFN4YZB;fC?IzyDzC!wVG_Zd*sigv9i8@t+>nbynEJ$4t*Be0o<~D -8j)5CZIjdnGj2vI%@*8xoB8(Cgh|}%}P&-PuJ?}35lsW)(JDHwa7}GWK6?1gzD0vLL7diZXB?Q2j(Z5 -slO++x77GvQtSKO9WB=lzp(rDzrWM_`rmi>)%?DvcKm%U4jOj$vD6#Sqy4X+PJ;p0{~i`l^ZVgi-`5V -T`F)|`d*i_t(SGpt!}|wcKmGi$n%|EZzMr6P-`4tGJD(0j)E^$^{K#tFEi>3_`wJOf{VjTU{rtWVU4M -GdjIxL~M_r%ZzGG{CKTzwt`-JO<x5r<f-<HJd$G<O0{f_5}Bul;VBu=}2I_q+-pUy3hTtEDgH?IHv)i -<vnzt<Lv`0;{+6p@JaGKVSeE>^pJMsA5mh$jZO7MH2*IwI<P{&%g@e|D`?YbWD!qy<jYcM4XUu1IRR; ->4}4F-cIoqZ6ztabg<18GB%)^{TxxG06!_iXu}dWn%<>tq6wxoTPW>gvdh3FjgK7;fW^KxP(;e(9G-@ -YSPn_)Yw92ikn4HPEP8S3@wJynbk>&d!2@I1X^E(Vm|@AK}awuAda<FEu6_UDl^fRo-~v+o#6>n;dhP -8Na*f$QZdCP%9d_T9Wu+BG&(abH8CkTB_Uf(Mm#Z4QfyfW7AFefGMaP)l`Z0Njb2Ag)RRh7LnW$2Q_e -eUeO2xlkp|(c^>>336SEoL1>lh(#6XwG%!EXZrxfFPPzg##&&o;?J>WYyGb1N6Jt^3lovwz;7E$bO%g -!c6CL}eRkRjb84l{wl>6tl6TI6?!jv5{ssrLjkH2l>Lb13zb{hXtdlJ2kOa2FRXpTaY;Y}Rnbub*>tW -{x2jCIUal>q{aeDTn$Dv$S6Ln3&K}dU|#N#*HGiXgX(23@KA_BGf6ynoa-V6xRUuL83T`#ZbhAMaBh1 -hjZ{&)%mJYL*Msd)(4rNnVLcBsyO5vmXwgi%iP3%wyR6peiotl9!x!_)X53yF~lC0Lw}dZq=e~7*SM# -uxtLAT39eI0M_tEcsJ)=X(3z8yvfz(sK%!y|cwhf#m++jBq)E0ZQ<AcyDa$E?#1Djz5$_ULUCXbQ;}R -~FYL4oT-#Uk95UL63sSngfIw&JCCMz`~IMYV)KUAwk2Z^K1jhf|{>Lk}u*7PwMq*y14BgD(}B<nTI2s -FwgapFVQ(T<gZyJ2^%Al!pD$J)YOc;l=%M_3b;6ypA*#PAI2WJBE+A_sgkl#LG!6pv0pFF&06nB~UMl --+vh&TespDGQSLh^bShnQA+ZCmNKB6xf4;qlLH&c{(CA3id{nCxm5cBG()wxFWN<rczlb*1N`}CnaTx -9xjo=QN%iy2BN>jWfWn?$%<rzf>qB*k-#-#XmyuS4M&yXajvcE_#m2JTVqkVZ|0^~MWZtv^^<s6t;eF -1vN;<wCadUD(vNcOlsfr-4gb<><%ifgizRzjjx}j2hI)c>xMm@ncv!0q;1DN1QRRi?Oo)%!J}ODg^ru -zXQfnaM<?DubB7*$KISoy><)k2@A-3dX>T^)*L>$+!$jly^gt^xwy)+~W64k7P>?8+|<G@z~uVNFjQ_ -<Oq6EW(S#1YAA4n#Otj~@a{YMWKL&@hUtTLJkW_*l9IIZSotLVLWf^^3JJPS-lu`0o4<;`YDK|N9T*1 --I6|)p}b9-XUK%i)vYN(M-%4U~LtyG{O!@99D(#e0QOa=X+>oL(OcYeQRv^cC!{1rb&y}OLN0|uA4M~ -dk4+Eul63Ky$5UW(OQ^MntP09#%b}7)6!1Y+@}h`v*TF9gEe5;8m<jA|9KkD^E7k5_B~(wUZBN;8@e% -7@SOI(Qp0Dpmfp*n`(_QlgWC7cwePLmRbJ>k(|K+*#b0!<@B3f%U*Grt<Ri6b!;=<qBk=Eiyy|__@8) -`+e=}nLO;7!k&g%F2Cq@6Wc>j~n|L-!OJ^z=BLbMy{Th6W?tEqvzZ~m<L9W?isPN?R}HL5x9`IA`kD= -c&K*j!8gOIICVWv(aQc~@1_qL~|S(0`C-ZX*AOUOe++8*%nU<;C&!$3J%^+eT7@Jo5Ox$IT-Cc-rwhu -l0ZQ*f%FH3(<S78WQ7sXhRR2u!ubbI|)h%J|K99U<1MH1gi<2C0I&OKroviiy)mKg&>jOK7t7ZV+lqR -L=!|3gb{=gSP1$PbSLm8Xs7vaLEuT?N>KTYMN|-+Avi|x3Bh54odoL$RueRIt!|T^rT51O784W@%qFl -Bq!Uaah$I+D(2bx4fh*$w+9DK!lLW^I4ioGlC?R-<U>(6)f)@y$B3Me0N03f%AHitNe;C0)g6;&Z2s{ -Wbd`0mR93wbP@BzVN1bGB_{#|XUwNcPN`tBsI#TEAu=}+`2qVX){_4gJrlfs^C93)16YvJ}euaWrw_W -85*ZO*kG7wyr*gRi5AkNRVFd$hGN{@VSyo*MX4-bA<kbI8@6KIDIN+xh`{?WDzRl!JmYDqm&Q`04Wlj -^}Q-2LB}n{_n$&tM&`Q@TKlZQ!;0g38i8wndp11Rl6w$|L&YuCFBk{IYuVJSCEPC9!??;{WUY0$fW*c -qE8m>R68CgUa65%hkG*p=GEbjbf2oj9nU(002$p&>Ty3@kNe4b+$-vFHx?G7yH`E#=6c+H>u^UKWFhz -HAx=Ue^NhBLu79YLz-4p#`+Y;5#9EK)caITHBE_xxJ!>?5?_B-f>H&K9s(vq7ME+f?-@85R#Cuot_oe -iXdu;Ugryg+<_ZZUeCe(heg|XIG`qlmP?AcQc8#YYD#l?x#)Kp=!+0+cp%cK81@zhgKiI-n~S-ku1yP -~9|M121F=i=(st3s;+^4K%I;3h!o&^~-1&r_Io&zNzDUk}N1Re7FOGiJ=54G-t!fvQ9Dz$N;;o8CR>< -s5~j_Zc(rt{ggW-~hj)NfEd+>zu4g=I=9RS9ttLf#ojkea0b=N`y~Nu2SD~;s3y)<m5xUwf8FZJ8s3P -!aK!ZMc?s|pIkM5^*#L(`#*5t&@R>C632f6>8tOQzLfSum?VW8@T)p>`2@XP#COJje$}D_RR=C24!mC --H6fflRHak=^zQb--WIn%d*Bd}kPQBK9D8G4^K)w77SnSce-z%?Eb_o1^064~@~C>{>E8WS5By&F(V^ -8HUq8Tp0p$K;&_G#9!Feo!@ISa}^nuE%LwP0a|B#e_jM-LM#h>Ay_*?dDrR2}de?+0EpW&a+BRQsi=J -**mPfd;&YLEI^RJAY3J?WAcNFvbQ04@Yhc|xtI>H#OspD|ouJ&;Qv^Mn(D3xPX<iJ-lNoO@}q{%3ODr -%xXd6%{37Vq(Mt4?Ivq#+NQ#Dqel{Rk2~i2A1*9KKo3ZJ$u$6=UEuGSx4n|-DY>>#DiH6%1z1JMDDh8 -+mi3k6uFc|$=jsN-Bun?l5l_S&%ecQB1`UbXU9wVd-9yUXUB{gvn@HY&ue7H-ybn;gp?cO<=mpK+s2Q -H7rAoPwvA&D-@8i?f3B22UAnYRuoOQi#N77nrI&kqDO@xV*8$y+y9OqePvDV-`Q%YQlj!N(xwG)`@e# -hhzGBdzK_Vz9NQ8%nGw()@94TUBW5u{}<HW>?6UE%bp<>FEDIzT`O-!9SRb*#pbNw-A&K$AQ7ARhOV3 -2rwZh*+25-JwoA1ofr3=+>|Tg3bG28cKE!o}0`CW*~YWr<x6-z^TWx?gnLDn<A0QuN*>Mc_^;`tFlr; -6W)Sd?ZEiCsN#fT#At=q{tx{b6Se=-%Bz1q!g2Wlw#hzd7`MONGw~nOg#DIlVbVu<>J|ApA|2>@Pb&g -W)0`>x^?Ts#*G`fF8knv55&<O>%{zDq}W&?#fKk$DE98%D?a+@BXQ)&5%I|<pNQkfkBhIr{#u+ndrTb -tRf<!mPO)5+m6eGL=YA01UY4SwqC#A{bctmJk8>|-FQSELKtkg|jdmlFo5obwn^FNb%bUa?*;|a4BgH -H^O*|!+iH-6t@rgX5*QcTdh3`n=eJT7P3Li<~$5Hqx6n>^`CKgfnXDR%f6uyMQe@x-e7{Yg<@D>Vx4~ -4f<_$3tn6$-zd!XKgV$0+<a6#iQZUq<22QTU67@V&ZF`$j5%7Iiz9TB#jhLVeL!sJ-1mh4ABMLLTca< -kusGJTpzmAC?JO@s^Mm4dGi*_>L5w6qu!hDSQ-#r?@IoDf}!7zlg%Gpz!~q@TC;~V+w!P5T4q#Xe!EC -q^vA$Na3kpafs@l3Q~ro`6eL;Q}_uK{s9XAB!%BZ;Xg5i7fnU9xP{7W2hy2*sMz)she+}(M7WU6?h&$ -gmXISK5^~zJLM~e`<Xd}$JaWPi-b~^9QTRv-KZ(N6r0`29{AvpSHih3x;dfJbN^{v)6#guQuW*F#PBG -j~F{Dxq3n+#)6vIx6;S|MC(M*b8drNU)q!bsYNpWeJ6qnzU;`bxc5xy;j??K@MDf}o3KbgW$r|=6Y{B -jEa5{2JD;kQ%xLlpii3SVvr@1b#^C53NG;X6?HE)>2yg&$1e$5Qxd6n-&<e~H3xqwvQK;cGte>SJ^Y4 -jvLTB#7q;MC2XaI(v8Q*kzdGYtWF0@bHk3h~U7$ppf_;-MV(|>^*E)Cq0IcaQaOD;baL3iTAl39)=Aw -Yu_WHf<q$$Df-ahpuizP@!jE}bLWm7wC~|jmY|5B;E-Sn54?JI_wgAVUyWo$RD}KvZQJUW_?|u07`!` -nFn1b;@DzVUM0j9C{H@Jfx1#Ulp_}HROFV@S3_{@Gi1@b6o3~cKGmhRJ&4gsQBmVf7Et)sKdk}l@VGk -Y52p=4RuR-|UqWP_NYp6xuffOiwd|*)2@Q8@ei1;>$pmnQTZn@dh)3aS9Qo#2peklGnH9W+F4fq}$8W -kQ95fvKMzJ>?--t`WSe@IkFL}*k<)X>}7wA4J{`|aI&L<%+jU`|5kTKqtG(D=vk_YR067Dt6fL@^PZg -3f=!KR%?l1t>&N9BqaUZQi^&d2oD>@7EyS(kqk_7*5}B8#<IxXy^DIY;rU8Z|WNw5fVjQ9@?IXxOJ!| -9)Sabg6?!Nx%mdhN5w~lhiX_x>CzP*+-FE|FIT5V!?h3KRd|SFgd#lNzn53T22M`R!U#j47!?snf>ix -I=&ruLehpnbZVIQ5!9z%v`}7G8uKpe$KO|^GKvQ?Oeq;@fN9^Gt)#=9v!^?<(CeH2_d=CyJag7kw-@z -XeFiYcRO-IBBM+F9utO;R^Uwy*7n)ycs5g)@1pAmlue<t_4{DK3*YkpSchvE+*K@1P=JD}EQL;S>=@S -p*;K8uK&PgJeXQkLXan(_iqk|I&^&**cxbwHiET%HK5rO#boPto<cQKLq&J~B6Hm_zq?dFEiTFf~*>l -^rZL%nudoo}Mf2+Cw@8)pKE=OA&io)fr}z`NR`Xh-aR8Myyz|Labc5QmkIRnstS@-+r6*!S~*Kk9CDl -OI{YwkiM~wbcLNecZ!1t53+7>=JW}1`t)gW=FAyUUS2MK{P9Qe>o4b6H~8(h-^3q({2`WIlHx6TKk~b -wp6!K=D|b;tN9A(qWNPSUQA77IHFPhDW^#k*Ew_r1a*voMkBVjTEAf^*OYL`sAv`sR(XA*vHMUE;Q}} -)q-a_FcDExQ|KaIjKpztdw{CWz%m%>-KbN{QS{I8z!f2*F-Mymtbv}warHm!NIv`wqdy?XV+(X?&MZQ -8VI)8UTxUQL_cMsn7=W4F$oyLRr?%*%9p6MApcp;Onc<hPku`(8f1d_=pBcXaD@YolJx$V1a6O>S$~p ->wxhjT?2lO>;1tyWP>t!^5*1g}MEvrcK(ky5){ujXgXXHFR_HyxnAK<JzFj9k(|2Xat8|UhP}DJGpo4 -h3D3WZixTpR?f}ot#PMD4IBDU`RdTQtxG%lN<nU=cS_%<U5l=re0ufr!4*}M{vAF(-abAZe3-s=^kD9 -=LkD$+D%T{$Kn&u!Xi(n-gOkAz{A0mIdv$z>#9rLTUd-36XK&!qmxeSjfSZ=;f5-E8rdNP3mSVJQ-@Z -MV3cz;BE)5$tq?&~f?<G$0kwH{b@Ny2F<Nws-qQ&cZgZ{x+G>;H}^YhO?A4l!Z`{&M``|jtTfBv4@p3 -^`5^wU`~Ph7Zg;T-i#&wTaOS8wg!z1!~O<m5AO;J{uQO|7(eu(Sny_$&NFUZY{YsY{nGoyY{Qn%-d8R -^!Ky59~(|+1q~p`R5N)KU!|vwoQKj{r8gEQ~B9vpJ9MXo;YzrQvX}xJJBGio&8!-lrp0A)W;ux{9I{i -Y3`6AL;QrAPgu%xi%^%^02kzIBMo5Jmlk0O&#mw~b?Q{V%F4<s0@dJ+<KLS2eTd3nAH;FjU3YZ>euNj -}zi;0@`R=>#O2SXR^Ugbr_t~>&<#*qGCl4P!ERP&H!u}A3bOgAcp)k+C_10T+HgDcMhg7!E{QUe8Sy@ ->jOO`B&CcPTCVVRN7Ew|j_S5#DV&z*PP3Es5|2?^<jc>gN?=g*&)q{}Sp)TvWn;^C4Xe)vI_l$1F5eC -W_2`NbDsFrJh@j63WnPo9)te)%Q8gC-qF=V6m%?!qs>{8CAB_dCU@T)A>Z{`%{$=Rf`Q(|5o9_S+Mb) -@Ar3Iv=I-)|YTtg0O!Tf6}LrmIHvl4xm8?<cSWzU#CO2>rk5(9SCO!P@X%$=nnWh`0v=UV=?7pN0NyG -(6D{`cE%s_as2pk&Vy5@PVqZ%M46y6%;wRfM;TBykRLFSZzwwmvw#17#vge|<zFHnu3o(=jSs#5PVQC -sPG$Jczk>h8ix(v|LoEOO`}gkxIR*g#k3RZHzW@IFlJZ=V&dg;P{6~K5-Mg0oxbNAshs(;bW5?JI8c+ -v7-cU}EN5E~<&r&8Gmoo66lzsL}+3Q2xxh`eT5-CURlk(NGQvP=F;!!Fq?fwe>Teogq=I!m>mvs0gR9 -_-Lm<Hero`bKT2YCV9VMpG7^UXI5u!HB|H}HiVfEM5l{v(fH{87q~&!n_`EM>qUDepQUrQaT+VW*UL5 -Di_nNZIi{DVKaDWmQ$xvwsDDs_Pv9{B_XtLWjRoPEZaYFLB>UIqaB}!JiWUK?CJMzx`6)Ni<}9F6G54 -DU**#>ATf2HE~1uU%GS&vb@;O&#xoNLIG%?e7J@d-~u@Uj&;!izJuq;BghTpAN4Nv*%+Y_g#X=Nsx%D -wM9RU0>j0vmFUd{TF%|#Rqf&Z*pq7an#h=;?sn`FIe`=2;pmv_<at^*CFCbTt4V?~@amX3u9_2zeQ7- -VroRV@l(GWrMKlF2zhCzp=^#4eu!I#QH_w7=4+xFM-r@DAq=gyt`Qa&s}IYZr27afrG`s54z$9J>~2# -0#c_{5%}G71{LmNJ}Z2qhZU{UmSX`Gw%=`tZMe`Ld*TrUrlp9dtVC%9Fb2`2F|a<&k$+$ThPg<kQmv< -rA3}M&h3Dq#X0Dlp{|{83h`?(8@E(%s{<7?^Vk)>ZC4P)$-iq1GP+3jeDRz{3)Lo_vzE8Bh}{xz#no_ -n-0i5<hnK;IxUcO$kB-d8|2F~2Fg{oLGrnr!At|5iDgob(`bl3A!Q`t6!wLoJc9<UJoiMMM0ILss*^e -p4ej4i>sET^)rEh@jvXEHPi;Kf`D^k6<rnRNo);(&c-LtF{#5VDk|z`8YqJK*mu3u-FA@zahz2|fRDV -t&8paYHqfe_e=;awS=;ax8Qt#cw_Z?E+4jPF6=69+5@8M_;)`dUS_bmTZ)|NmYLYdR)&}jh;Xb<X>E# -QxOa^t)p`R0QG@>QZ?4biaDs^X7pG43lT8Wbtx&Z^}ZbyCEa)#Vv9=;awS=;ax8Qn&XxnoG6uM>#|LL -VA`1K!Xmo>8PuW=(OP3oa-;w&mJJ(d>}x+GLvYSK1lvn@q_&Qib_K~(J=mdqQOv}Bee1ybX2XA`hTRh -&w8EIm1yYnex3Ca<4^ki;=X<Rb|f980QjR`gbA4e4bXXXTHuDZR@ck$4ec#-20ZWO`O8gn{pDLk!y81 -yTB6~D<(cxrxw0FoY|4nvsgx)E_42Ig7+ts4jX&xOUH%6Q7|;cIp##b*@CI(cU8e<gKk9q*Yfx{ZtwP -&|XY2g_@?D}~<J<vq-RuDQI?+(OJU>o#(z2;Ra`F8`<igZonLj01<|c+nyX_wN&F6=i2BVJAQ`0f(!= -LJVmVd%$3GfD9Fo6^BMtK0<dY+(;H|ob|e?cSUf5*bXatqP$4$-h-4$(km0p%Gqyr|KzT%%zrXh<6(7 -o-pk$suxXVkpyq2X)c_gO1Vn!@A`kbq3ln=n;UmYuC!xUVBYKFVex7C)X<{fBf->Jp5dOEX}`5elU+{ -ptA5b(eN*=JflupX&Wq8WDk~4Wd+K|GA#1p^dM;`8Xh7V<`WHbhz2~hb&PwD)?NPqf06~3f0FA0(DKk -j56RbGf1T;M5ju2Q5LP+zw%lHDmn<O~-X|KkJQEG5ll1cZ0@X>+W(UeAvn=vaqG1Wqu!v|VBsrRw#P^ -<YofKryG2Sk(yZ#6My8H(O1atuoz;EHgg$^2O({Vjo{`jLxo+^D>ez-VTZp-g4-`C3XdP8|$t<ms|M# -Cc{M@#Mxl0~U14R~0`p!PYEV8!>`{_YpoKCO}G)c!6TIdWt~Mn=Xy;EM8yGB9`UT&BS&Uw@V-Fj1yz_ -p$1FKHvGKL&rdQF4oF(t>?P>5Aa9chlPb9ALJ{qyu!K{beW=}A~}8fbO#OBqvLvcf(LcdhPgLTo{5G! ->Y4hU*5K39rAtex?v!1-c9rq*@p8?YH4^P|PEL-rTCH;N;>BF9zyA7bu6Ljd)kO>NM%#e83c3*VQS=A -!pgbRX$tJ6=P=909bVqsCb&Ta&d0t9o;m`2@;DZlLr0a~<@$b>2N5ACc<c!3`#B!=fIUinp@kKde#0V -J^6C;a@i{%qfJRu)@>@mg%{d?dG8qgM?ozUq(9|km_K7|~jEkqhS?IH5xmx2F9xo`FKY8_*`s$-x$qf -UByW)#r>)Be}Mfdh-8qN3(Oen{4rQNO?M#*G_ar!p+*o18gwrlc|<@qYK+ce9T0;fEixJOFp#iagTgO -3x3_2iZeE2YMay0_6c^n#(iggRwlnQmZ^4*!(>7z-Mkmc>MkSA6veBIgf)NZLKWJyu3Wz!znv;>LhQ! -{dP&ZHRA$2P&SMJ8g!^l3ji{u$Bnx6qZO0n2Za`DpH&?L?elAMg5~B%r^qk&Z;}^(`|T*@_YIFfJoVI -5vY?>g{IX@s<ox;bf4k?Ndt`cgI`f_Sl`Ko30p$X80yof6n-+{gpdE(Xqm4#c!FUAvk#K{KguDYSbv# -7=<!`{FzdHVdz*Kf$$jZt(@!*3GUIm_Uad8YN(>e`z+;NATF=Gbj1KJFIY)7X9_yT`@%olwFm?#e@BP -b8G%RAa^W8VY)XYm)u-%z$7|0GK*=gph<3Cd|iM1-6@dp73-XaN30h76Ho$Bt!p<N;{V0W|3SUi8JFU -qkMJCrro?Xfw(dbSn6#y5tdWZ|{B^Hf(qpeTct<KV%aCS;BZT+<+IxoNYE6m*3#vU}>>fWY3;GIUn#H -VQSM+mu%@}LpLEus1G1lsE?6%`uGOngz2^$oxfoGiSEVy`t|EbJS;$Y-m+y2(*XWp+>pu#(~yvmAR{9 -qS+-WMUd{M}*Wfwqz#HWN^$*;kn?in|Yoi>X44_OPUev*a`&EjkpjE3@7RvV*ckbM&2zAcK{YLRex<> -s+=PLmHMc_kuD@nJ&s$wn=l;4u%jb#9B6nLzM(Z>@}kAkPD|JScyFW-FgO>P7K^{;<%IPjYIq)^>9k= -n@Fg!^`KTOibVj~ku8Vf_vI59)s^k4x~5@&*&QAiq&&Nlsapm^yVT*R536xqU-j1NqkF5aj^n5_tkSK -^~w^HtIvLBVObY@&oNT(TkmRs5jki5O)XuMp-q=uu-;w8|Z=zp)4#|us~9s#qG550d6`V4C)!wMR*`T -=o0~eJLr1;`R6gl_=2;u^Iyf?fxoW*6Tb^UgI+JzMF;qeI*8hC?k7N|(AL&5rqB2zZ*(03^E!}w$P## -tGV~M{^Z#|e*TCN>|EMEsx3RTpfr&Bp2@@vBC!c(h<=e=29pDeL1X;&B+5q6L&ySE^yW+oqJL7Nc|5D -qt1agTs2z2P<{ir`s*P%T!(gEIX+O$bN{q)l;&w3dKfNp(k9(ohrAv5~?0o9o=ySTXgS8#XWZ)_KhI* -d`bxn7<CUU=aJ4iCEEAG85q$QJ5O(4yl``squ5Q{Jz^AGlEYV)>``yFl-MU5^%h%u}DgL*Bp*`Jm6qA -<s}3VJ-o4P@o04QyPD#p1Cgm#_=D$FLk{<fqoDD2k)4d13<Q5?%K7B>s{~w<rVS{{80`_9#{W^xHJC7 -@lUEJ9OFNr0c|Jr7u0`{1GGnIJHcc0Il+76gFe2Ce84;EeAKn5$EZ)i^BP3+KaD%%581t*oYyDs#<~d -K^>GXE88kxHNsg|Pj-XIpp<QkB595vp$C}*yZw91+br1i@5kNAJ8kcP|W>g7xc{OmxjFUnHR;VV~{$b -NaGo3V3{6nTwt@sV;=4ochKY@R)W=hp`(o7f4bk|IiX13SNK+Vk6OsSeqFl+AHF^j+PV119f25#ayx+ -2E=2=)?Otkqw{J7!dBj|bNGAgxxU`}$IwACZ)lG?MiF5UTUB3>(YNpmVnr202CCUsp;w{j`)}pQ&?f7 -z@Un!ks&$oN!Re&wgcGu7?9?ZRh6Zb{F;Srcs%$M14j&=WkTsmQlU*Bh^dCNk4y)blWu2fw707H$g|z -H_lBtqt26IEEMy60oqvZC+DR+^ox{%J30NIuao|*REMvkG%Jns>H1m|ef(V0`L7b3r#km2)tm1jV$7L -hz7g|Wm|ww|IL2Z>y&&b`UvFrxw>|3V`Sa%|JoeaQvA_Yk6Z#KmA5pKPEka!lT^4!@zQK-Xyiz@1h&d -k2cVbK%^E()m#~j<ArH?)U^+7YJzmTT)@6pdiy3nJ+6TQy^y~+4szU-dw)%iZmm2Ie~Yv`iJbFP*=aQ -eoz54G1kfG23bemZ+xzMLP+<CsgdF~CVbNg4lxI&T_tTAlaR*AE!w5%WWsXB<f8r!{4=J=zrNzb25L8 -*5yLf&7OK3|!FuyuW-ZkAY!47-RB!`ha_XQ0F}{-^TKIOr2}P91r9Xb5xk?#601+{Ty_Uo<7=f>hEXF -nKLKNINz=7voN7szd1LU#}YA~i*ZC_`j~sg{Bc|@d9-MAG??qd924ZxXNy`t=;=fMG0v6No__}}c-Cq -26RW1H<FOac{UGQ4QWFQrV{9#X4AkaK{WN*3HBZOsQ$HzT`SRtlMm&%<<Qyg*%(r1o74r)i6W;V>)}P -K9{%}RgY{F&G5p}K&Wdie^#`K|A%$hYTBR4lU%{cc8958MIUf{v_I_8?*(B}Iv&xG+%$Rp;MFt?Gf%` -eTKtiluXQyB-A$HUcg-?h`PJr`Vi4jB1gx*(9}yD(RTF-?q(>+*<kam=q^Zi45ywDjjB4&}6l8RT)$f -tvXbovf&+DB;;>pN&OXM1LRpIp_v1-~r5!SEcg2A?B+vuKJobw*9;|zko7<`4P+&<|TzVc!0-PM`P~R -DE}y14?OTd2G##*`uqU;1?by>C#ZYCiwnvZa^IuTJWqh}>2=!p`f5X&z&w*(n<vZFaKOXzNa;=>`07& -4@~`*LP!6H<8|PV!b9dm=pUoK^-Tp70W5HZq0pT!Ln`<;Y*VKPV-)^@jJonslv6vfzJ`Ozeezm@C5O{ -zWsE_as59V**e4x5a)FqDwS*x@DhmJja_Uw!W3l>ZTA0B@AVXpU3@1pHP{SR3HKOl=p+c@X+^XX6IPp -3blGEqw&(}NsyW!Fm|Z3@OYFs2J0qklzZ(J_`@doE1R8|1}@%c5n)nNQ@oZ$GP+M{Bh_J~MY5lCQJ<r -}&-q^kZXVPXz`B^0+JJrc+Z><)TH4xPJ$n^twQ=E0I6o&3WaxJh<|H`EGs?uLaQM@x@s~<@(37Wcit| -q^w8(89aEfpT%OC1v=)=otrsn(xlzKzP|GQ`|sy*;3Z3z@Ysdk_W{pgg8%y3M)0F{n~Vo>lE05hwyvx -H_2|)K43&HC2coUVybR`+NY9ev$B$>a>l<sXoi}<ruCJ}6=&|nk`WyU-|45tkj~_6Xh;ifa@Ngb~1rF -1uO=G^JKG5e#bQ#dckac;WcA_dhJ$(wvat`T8*w~Fe|DW}#+Jjfb`=u!<DZ4PogE9IsW5!721?JbNU3 -SbDfbY5->T5)FliI2)#LovQuIH(L{*zF*Z2Z~NULWH}9MJ8+Z;a(a1~Hb7c@2~g<2(ZL0QCaG0T=KB^ -)~8E;JIzvwui-y%~5dqU%Ys6!pfB^WA#2a@)<ZxnKDKC`1r`-!-q3&`naDyKLme}8@;~3y2SPC*W+l- -mN$?#r;jvI|K#WAry)L!$)n9jorAfBi4!OC95c!V{Ne!*^f6xO%a~Jv-cB?;`xnx7q+fds%Qz;1_9#0 -$o9hOwRn^B8kze37=tiA<^ytx-{$kpkKGLDOhU@>j@X&SOx88b7u2`{x$BI!mV$4aOQ~aB0bNWa}Z+{ -_6pjX$yQTFtCN#Fn(!yE_3pEhsatgjRNyJ<V<zmYLe)HA62kk9MZt%LmiM7$^x>iEgueX!TW>u&<e*P -qpI^*&YY^8!yg)!2Ir__IB`#=X0aa6*OJ=db*QeY@s*@uc>!eSP0Z9)q8M{`n0rzWCxrs-u2hvu4dBF -TM0qje6(x*Iz$Jab&*w>Z|Ndeq2|rS{44n3omSa<Bc~sKlL^Y`AlW{Gh=wnr<InLVx0ANisK~7-vyLI -^o=2}Z&Dv5=1X-QR3Pcs&z$C{HtXTx7cvbUPS<DjGKIP<zD(^iK|lSN)S5oKYv{)UZ7|Y8S=0MOMqM! -BC$$f}`PXZj;ok^0p>9Gs0<QZ0j>8|Umdi3#-EgwjcS8RW{a5rA&{y%LzS45S3v;dLlLL3iKhk|=ZaC -{W=cy0&%mp<L^u^KlLf;SlKJ+{LQ@;~B40I~sjd}|Y`Y_NJ-+p`=$6<WRe^<wJFphve8~BHOLK~#7L4 -E(BP}aAg??Kmtt_fWi{f*b3E#f%P=LjP_kbmRGjpKQ4)M4Pm$(<|Zro2JipM>rXy&e4q^quA;4dXOoP -Dr_y`0~s%&#*p-H6oZ-Lta8&YU|>MOV_d9KWDN-=LWGG!9QvjxZc8?9M%u$Z7H6&<_?xWoIJ|>L?5a! -mD6|Jpaa=MT@N`$UXB_yig}898hQE6_7~;)`NMeq=Zcwk%YE;?jPM)v@LRWTWnE2QkAr#}Iv4T-^{Ej -T*wL07<sbg_{MXkcAuhC&NFVJH`U!{|^)j{nxyJCQr-3)(0WUCD1e(xhV>}6A(a%QPy>sWz8e#Fwb$> -m`i$J(&Ag%+tA9oE*aCZ{!!ff{9)1Ghwn-fmr<u{za<}7f&E=~@>>1!?mr}5$qXRo;mUthI$!pUoHno -l#IyVgMSY35Vc+=Yh=)V){{BjV{7w}<|p_O3lDt163MlvdhH#x!-55fNQ!8s~8z=bqOEL_<TRP-9JLA -bubUAIgV{jun}Wk8nVTk|r`tDpWEmb7@+VV`XJC<e0BmsoBF`YUCuQ<?QeJ$edcM`D_01urBAj_ny1Y --oLZY-sih4&M(~<>ho&e4fP0P2z(BgS0a!8cy=GW2tR<Iuf22jM#9gfFI;nct<#NSqv#w1;}EFB%#B0 -gEXOE>Hc5UPWH2~fI80-_|KfBQq{awi5VR>UrWje!ekN#>1!reD7Slme_|91#$V-_oV~o*8=mH1kIHN -nrI^TD)&kULE>of&)%Y#0Gze(m`pW!hZt`=Y5pbQscw7*FH7{7JsBDvVO**}n9oBlNfV-?}!Q0%u4`W -&P`Svcbyi|ct-$w@|UXrBt7bN!ZKWTpTnVJmV$!(zkug==9p_(4WLsQ(wdn6KN&b8_;|>2}_};IHbK5 -N5+R(tQ5S2_QckH2Cdf7XISX{=c5T6wP14GTHaXF(9w#7d$Nd5<a}#7zKC3eiZVVC@&uO_K^*dGAk4c -6pYWG8B<b_9}KD3X+=RE%AOb~$O;WC$jdG&3>D@S56mts;8~%9o2TR0n1ZZeUQQrXJSI>S$}0@2SbQ^ -z)z@AX6C;a@riFYCn%^jmo_!9U3<a{M73CGrJa-OPiUL!oK`(&`X+?R{^YR0^fzXAU7vCQ2lR<(ase$ -Q%{FwakZxx#r8XBBlI5|)h8#660F*{5kqGEHh@<V}GE#rUX;h#E>|MlKw{Lgfi@fVDSa~XdgPo0*SmY -AG8bi^$g8So*zc<Ka!;tF&%>WF%xzUU^DfYQ)7GyzRUCFnjh7d?trqD|-&>WoL>VmuE&hd1E&a207K? -dhGgn%2_|^bkEt&(J~Ua5KZqGH03d%yRQ#v({W`Hkgg(o91rwTQknO-y(L7{knaFgB|50IT=otlk1c^ -WzOTy3a8F_*E!@|#d<M^<+2CZBDRukWN))3wu_x%o!stjFSoBN+(dVno92#nv)zgAY<Hns?jCZ#bNld -e{x`mn@8zfYXpt=zij88cct;!%r$h%iL{5^k<Yw6-nYvYtQ-!KRtyTNfMEz%7tJiAm9r8Z+TD+6t02* -_aPoX=iKvifpT8B2GchPRtj9O6}+!go63a8*SoQZSr4BUWU#s~0cID)hzl<Xr1NDIlQ#dHC!q%WD{tV -PyettYL6)@N3P9c4$`{cP7xut(Z=+7s<EdzoEtzh=K<e`Civ)R9i6Q|?S-SIYP0*OIEis*jG>Qcu!T^ -q+L8Uasr(OM0XB1D3HBs#Mg7GVu=l3H}auCu2w+xt}a2$4L)r(c9>~bTwT^Kc+486csQw3(Pg<M)Q!_ -*^0LAv`*MDP8_Rc_3Rb)7CXp<`w^cco)OQBw?vDGld1A$xnCZU-^sSBgX*q&DXN4Tq86zos#<-m?$!Z -4Sx?n7^gVj6en>CTkLnuzj9#PH=~wj|dWZf%AJCubWBR0y^rF1ZULUW&hdkR$_0qlZUigoT$>4iE@oj -htF2^mnGjT`~DIxR83*_&liR>nyk(1;{ayt#u#k7{bM~~1XvxgODN$U=4jrBg@`jy?yiE;V^cIm!1Ep -!$;tDIMzt>8@uoJf|;s@QtAg`ET+igY`=UEChvN7&7DbKIc&lKZlI+&$?U{0e>z{~hniOZfuuq%NYbu -tbtb5xF8LW{FZ!CYFfD#B#AptP`8Sv)&fFM6>u@d@D|hwz7}pGE>&br)87eC7Z#|u2M*?QtztWs)O#L -Gj)!ht?$<hbh&;+SL+perG8$o*RSZ;^*{7Jy<dN<ztBhYalq;fpmn|1&x`jQPkPDTQ13Qxj5pTH_ojL -?yi%{md)j-|JLnzuj(K4slJGzLWugEIqI*ycdJ3&VufbgXJr+0t2k>M(6?Y}kB%TZ>StOV2C0_xegXv -hBOXtvqw1O_9JLrCToc1x3%)gkM%umd3Ovh5zEmpJD%|>>O^Stw=)9SQgQLG#5&F*01Sw4G^m9r<=8| -(*0+`)k34!1jB$XD_|i2g!}kz$f40^Ak@UT=thiuc8b;t+UMH<={UWv+Ztwo${>GL;2*T<P`lh&R~_Z -wgWhwhTe}s0dY~gXl2&0VU%RcqU#9QRiQ{E$K`KksOjw9wASV)#M}cB{@M5b?IQR<srJ1Hh_=pqY>tH -=JjST^R(I1>TeCVs;wIw&-uVfaBp!(^L*Y$P_bSHRf!s)g?>SA)|K9}@OCnWg#I;}jn<%DC<^*nK^nj -hzkvCaOf$_}t!!(aRl#<;9mMV8UQr_!sN-I%ciIapKHpzRM51=+8We>D?nL^Mhsh3dki^k=&~X?YO{d -alDKoXX)T*_fwT@Y5EXPi?=h%zvrFNbDq8(y$Ss7cxma@lLd$)solbh~7;jVT!yC1nn-BWH`el_pH6L -<>$x0ogm$Zusw6{j3ER4q^|mEmvJ+!S8#f+y@n29Ck~aU#U21=uE=NH02&K1DavZS;FO%$#jjnva<)% -sR6kqV!(#j2R6x>qcvUg)GxzFvk+Cg;s@CX;lG&ZR~698|`@8w3#jKvGzQBgWYIvwYS;Z?IwGty~l30 -`#J+0<d_bFSiZ&?#b&TMY(C7t$JrXTj%@;O*$%P1nSIKRvhQI&wuAW??Pj<|ZkZb;x`=3z2yweNSXBV -=xnDTW)foQ%!(l8L8Ak3Rb4Vq5nye>plV);+7_=jeqc%;Uf222A7`(RFDzm!Vv+QWdFay~b_8g1mC-| -G9Ra_@W%AmYjDHTxrReRk}->viXn6ojz!SMOpyC8*@qYY?3Izf+^_t{(QBX$R;g^d&AMGp9M5WIRi`1 -Mh7T6C6F7RsfvmwHgusV(Y|x<Zf8OLZc|w_{<MjfT&qJq}UO{Q<Iyd<YshKt$d`-=QDUXtSTm%w+SZI -Rv8dLhCu}S$nOG9LHJWY<8{%q`q`p-7Y*{3>V8~oorIO)CcOIYEiZh4|15hxeQm}N?e7jaUHJ5k&uHr -i5?<O3=pP}B3Y!0QQ|H!LF9{KF<Z=qC{`(|MXjh8Yaxmm{$|}7P)W%8dmz7c#SCZQ5<C~z;6})62I)a -!NCL?uvq>qbA&q1^ISlzFiVmQNrqL-7KN@HgZKkcXD_E0ZmY7xkGBCnlR~RrGe(q7pR*IEsmAEB*HpJ -Swd_FJZ6}*yH@oHYfYk3{7=M8)<U(Yx3M!uDA<J)-?-^uszW`2Nw%n$Rg_%VK*w?dvbM5JgZt`Sk9lj -sU|#|Q*=Gq5}XY)=8})4=`=Kp+z^m<T9L0USyIiBiB~KA=$ncvJx*HGoMSpwa-itOsNoA;NDH+eMSuD -fS2^Q)GsmC`)8Dj6=O_kZa|7xk(y2QZvZU2|8J)=v1AiN9hcGm!7EeA!8To5{UVwkQ?ViUaZxZekZ+L -E|<&Ya=BbCm;YD!4^T@31QY-O00;maO7>PQL<`#WEdc-kk^%r90001RX>c!Jc4cm4Z*nhWX>)XJX<{# -THZ(0^a&0bUcxCLp3w)H-nLmEscV?2ANdn}`ok@bUlR>ON0!gdQo8Tn@t4osFuHF6!pxX(cHC$Sv)g- -v>4yNrgkd_vAH=wnfOm!D)Xr0~&(A^Evi-6k8wlx856JiwvB!h<ef4}FvlX)|lsM~FS|Ih#P-+UO}+d -0p9&htFyxt!}q?${x0LI^v4(Wns52=!-(_wc6)G0F42Nut~J(}HKTTYg$l=Wp1QfA7Xme`@3EyYttsz -UQ7#Z_ZzHSN_H=_vAO+lYhf)wfT2{`p&zq$;fbDWr8?;%YW?qmj#_~#C}iT^sV!c%j=Wp7t8At=bym! -;>Vvn|9A5G#QE>Y>$lGTtNh+|ey_~i^~Nz=vp&A}{5R$GV{d#@zAt}6J%{A`nufK0mJ_SOU)?CgouL% -rnfcn9*t@f$P^9UTW{WSNf`yuV*IR=BrYO?LH@w${Na24XeidhRMNIj*zBQI9b{YRX=2rB+Ul)JHn-* -P6tHbqPT@0jI67=c9ND*Rxo-XR%fi+X6>Y`M$yx6OWVSVEC*KEFP>t<Xxd|p!svF`S<Y4U}rzh>i|t2 -eI};>DnXDR$!eur?;0fq&PiWTI*wU!dT0TxaQt>3XiYS0$8nyw^<U9hc6yX5*%fYjH1W0@{e%aV<`k? -ye1=Mnckvv=UC@H!fY}#FY5|*WVOPoSmYJ;1u16c*K;U3L)xxY^z=zx&KF9BR0G@zh~mQuu!F2h~L?p -wXP?fqFsm&KTkN(hs1H)H(E}tUG&%+r){FEKTYexyC7ll7c1|4?f1GaenRWIv{vtmthaT&waMN!a=)W -%WSJJ+^jAjLmXB9-eYU=`tI5Bt>;8Lh=vwVHB8DgjJ~txm4al<$c`E^<qU(I^e{>S|Ujk+fUz^a5H4A -;{h+EVh(L{HFXo;-K7w1sNP$8P&8Zl)_ettBgKL23G8sS`$FK{n-FP0PvqYT$FE4;+N$`*0X<`8wfuC -<H0g8Y_9rO?hDv5C6!bmI*)jk;!B>orlApa0S=SK(J+v_uN(TO#%O9k<+xU!~B`6-J|VYxHZEpy}r1+ -l?m+(<`35DyQ<v_sv@NWP#9wqj~J&$u;TPlXvFmPyX#J+mmbYjrrGHL4I-V5|%-@YlL@6{$AYg<$eB= -{CjbKFYl-EJ{|Yz|I@nj54g1zob4DUO>MZ}2AVz!xCK+h@wNEn=hp*%e#WDKU*N<${PG3fiF{Sg+p9{ -~yzMESs2tMuv`Jsmx!~+0!=$gxK9;^cpl^ZDP@ZuMuUGMUcK2|>*<HhH@m!xTZsGM#TuHA-L9fZ6HSj --98k5$b<#E!T^pE8wjY(_LoV1V8`ccrD<*YT!B>YD~^MV%C5x@Msc(<4D@|P4Cc!yv9y?A#o-%VRmkd -Jry@*Q{~(*IPNMUQC5NAA}k_d4X?hIU{_dvKs#q;wSsBhqgZk@JxC3pOou(WZyqwAn(Z@UuswyZda}p -?+Hqo^wN|ZF!+uw6%|-t$hq_?XS_+K7qFONwhVAwni9Nu9$fy8<6pq6X(t6w>I5`GH*oLHvoraz@-xH -x1tNU1>a46bi1*2O}Z$41@H~KSh~+_E011n>|E7Te(oobr@fnvTeQx`dkV$-=D?g6KW>QN<F9^hrzhX -`!rsj<jedJH8ZE)M<A-$dkK$|fw~AQ>w~Eet@6qwC(kW{83USP^x3m!_@}xht_1L3V8Cws-5*66RxhK -#DUyVkm^4%%I0^ONMyj`)2c~apeIAByE=X9L}afVDREr;ySg*-lH%3%!mFXA2fe%fX`X03z%Ruttubn -J0qYh&JJsN>wXm+i9F<!~fg41IELHE=3$n(_^K>9=Xe9=B`9tZCN_M~h)DbM^_*P24LlM`e9Fk=Kg9# -3l71S?9utN+TlCI+n8mX@85l!#JO?@(lbb-Ik{KL*5vwes8dT>Cka|?`6Ffs(M*?v-jSYM&HNyvRd*b --{i}+iZAJ+=5go^;>mI!w=0^D@(A^PG{-2dj7CR!GzdH=Ps&J7bGw|WDGs|01rxt=V;mnOo*S%uu;9C -md=NIp2P4LZ8+KW7CoM<$5YsazUXR1JSks=e@&PzM8X3!nQ62yf`F&V@ZyApB;CBf;h%OVyrR|2zKDT -z^v2&>+V&xCNolP}u`r2!cdGyR7IIVTaC)*y|NS|#=2p&`p(^FTB;M*G`(cNsLiS2Wx8*ny#VCd}P9e -W6CndwhV`Pt^33sa2a<tV3IpE9%$xbpoO&^<q0yH%UD_f{Q08-A;xtDi^_b(;9we-6M!aW$+db-G+_L -i4=n%gdTIJvTGss)9K)r{zpZFM40XUxI!x8avXBf`b`GfyiKaqt9CYnCA*j*(&vH{btE$$rDd6(s``{ -U!0n|O*D#I@a~pmddu0<QnN}pht5C-s^7kGSCK=UGxl}d@)OXaa*DBY+i>*2yXm{C4C4*RLY=ch93QY -bk5vliF{3eXOZD3~?IN!df3l1Mvy2>LXXRVbZqj%D#b_PNrd>RALGdD4d8;7T8>Wf6Wpl(7zkf~XTBq -|^z3{~SBk!S3?^TC7J(_Jun<eU&XY~BK2tPw}4fUmV%n(<#+(Fp3zcYrt_%U4{@L!wW^J^#4)q@^m(% -oP@<Hc_@ofGL?Nzy_7z4(oL|K~0Ty3UJVGv70v9qAnZ@8dHO9<jFn-z|5-@=Q1r=6|o{{7>ogF7^KJ! -ueDADcg=N{mJ82*@qskTLqaffK9W$Uu{$GSF1ed*1`9~HOO{#_ba%EO}66R58Z%wQkUmnkl%xA^|5Vl -qBb^BovrOT@UtD=pZn#WA8p?7H_N|p>KnbUn(w`u*e|r)QGe@v?T@-HrisYN{Rd?ncv1R*w$OQ-J#-P -iA2e&^_wd~ukhhoN1D<YfIia_-oal!y=$R?nouVbnBcKhRYMC)||Dn!{X-4FH?cvTi{O_xnEn7rho@( -p*y@xTID(g+t-#ib0^CHT;WYdDb94&LIEb}zVK814o;dj1_GW8^7UdlEiDyIAQ&i7KUgYQzW-80@xy~ -e_KYGQ}bY{8>K?Dv)#5!Op+<u8_i-ko2rl)kl77YCk3Y{|4*g_-sv@SBlt0N*>mtVaffI3VAD(umM!< -~OwU8W-%c3;7BU*@KSHw$|A3ZmuS#(J!YiV7f#+X&0sl)n}84?*O~M6uvtW@ZHh5b1c40tL-z>TJhaE -itmnO_zogpq4uZYJ97UIx=u~jx?Y~DLuPCe=l_H+61C+Yhu>fF@<aK-)4;h8?{5P?`}rN$Uf|;Vs1eC -Wc`O6zgNLLK^W#p{-!UHUQxfhJ6Yi8zxSuxRem*JODZy`9;GVDj;b`B4Rp#CVtZABfZff>G*%`>z;Vf -}HTTsrX`uc3{&^@0J?H7=)9dzC%--ABc-ry|6Ob@4sV5jar=F;-oD2s)e;`lCo*Pe6m{YYym`=k9CN5 -<ljO<w<Sl-GKJBNzq$Awy>iT8m`c>w|wc6=ep~MLXe3K36z`eN#JTe1~ygnvCCSH2mJo5bb=v-7VU6J -m-AQ*v04VS@xCXnrK|SuVY5PE!+1h(w)ZpZTT%H3IMwg?e-(HMSDNX!#&{|Yy(#rT|;X{&^^Tn`{#)+ -|AWRZ)brT7Oc7qJiMFfghi=<@;vVF6ZQEP3U3aZuIixAeEtciw_=wBT%`$bQS7qjgt{p8iH}rLsDeHE -~5u{u<>*5^s<^y=|f1ko*U6v7MTH+Frxa69+WVc;}&KdZZ8;V#K%l2x{v`v-XW32D~B=yZi*%wjXzBM -U9(Dhv3?v5F2P}T*!Ydw(?tTfX-2KlKMqT~|p=b*j~pe5n6o&~5M%lldq_>oznov=si0{F{W7d@{n+a -Zpp0v5|)S(KCQC<ne|@un1Uyjjm1VjmLy{7d-8@@@nF`=D<}?muGDr4!53AxBG1bh3z$7dgQ311X|C4 -|25^e3k7a(}+;7{#aiWw6(O<=tAk$SiA4Bi{fJBBafwQ_NN5<9}+>z<EzlU{lEcr^AWcPLHk;pDB=Bi -q+MN@8axGl{WIud=%V`<C~qLkh@1j0)-tW-!Ty&p5A*WfKOk@YmFNM|pxET;=TJ_EE*g80Uu1UdNk$8 -$msH#KI7MR%{qr2L(&Ior*mEy!!1l@r^hh`FbuBAc1^KpRwbT@7(1}f1S&}|3BT_v@gozvV3ET0gU77 -3|rjBA6>}!?j8!I9<;7vNREyn64zipA<NMp9s6MaWSkl$cq&We(oB2qUuR7CJCi|?yM%g$)C)-}*9x+ -Lu@QiBrCT@?}P>w<l$!BoIX!4LG5dfTSTtQjry?h0uiV&7PHKV``*n=&WUt*(%^g8jqPljl<_hR4=Z( -Nd+AJeT&PMH9uOuk5o+G2YNXTbU-;h!mo%0`knXHRNH8hF17-JAH6eA4{7CIO5REpgmpbUBan_%(aN& -r4K>3F%4ltNAK)|F20<`wxM+G`C1E~lIVNV=y!l|8f}qngLwTK&o8m<v)>BOFXH*X@O&^uJjJpoLkIP -op>Jf>UT#Sjbsc!mcO81}(BI)*Um9tk-ZkUhomq94jWm-Uvtf@k#n;&LFw04JcZvN^<~!<r;@J&6R-$ -gi@hRNjiu;55G?e-A%l*QHf1^RUIT0&k8txD3Q<3Il<I=>+oGR1gA<gaM(!_Ac!+kT#>a%@qPcz_Mu< -hPMz2vlu<L7N(-Q&p+PkCcJuTcI*GJFEiXG~jVNlTt3rjOy~Pnte^T>2QE$?Pk2;Q3k&?{vxYN8f_)u -*`YfeVwRXl_?sp@*0=-A{Ll0jPT|Mj9r0AIc=^?!~yW(Pa`()_RMdCZ?q#HGMJ6`Ye4tUAkF4A%3tUJ -9o7K9Y+K8Tz!!{RC-k`|Q#|DdE$go=+x4AkqJ2}L2r``wdYm?keEgf3k5VN2a)W#GReJ?ZS9&t+jh!) -GRI|>iodWOReZc?XCn`~=iZ1HBaq<nlA6-^>Jk}p1VXRa#MOwvl5%o>pzJ=1)(E3w@J-6E<()Pj5(#} -yIW<wv!{24~1=k^;SFGDX-H=Y6ys2>T3c4}a*5vE*vD)dG}aQL&OM)@Yr;10m@XDOXZ7_q!AN6w;{Zf -(d?x>ebHXYe898F&mj`vK9_C$CzU=K&o*8-8~D99^D;A|mr^rhoe>BkXZZ-PmfMxUF4G($+3m+S+;3| -M>SSrvFjl3f7OXFFYsI6MJ{a75v1A>L34p?A>a2@OI)194?+r?K*$6h&Z)riv~U=!mP)@Cq$Pl@2`yr -boB}7>JtuWPo+LSq3rF{QTx}TixQc>#L|`)N}K7Ed0{VKUZzXCsd&1rW|V$fTJSW!ol@{>W{j9}R$xR -9>57j`+y5cR)h~>uQplmyu?4v*UT_$Z0@HS=x}^s_vc7qt8?TtK&<=Z2EVx~dXTUaXTAaRjsrU31M&b -3R2h&F4{&^o{N78<b-(s;de_auwPksq``?qBTFPJumyxIhR;svCs&oY|!(gp=YBm1#6$k$cSk@O=v@2 -H3{Uwxs%f%$g9m)IplH{0b!@V3<SYqUcd!EG9Sww%y|)8Ru(8JI+$u#qt>{p{bo9o_vEwEexh(bNOkX -IU<k1;4O3U)omo$C~oLdUBBYevUj(yAc~)V{Gj;^Yq!AzPDWPiK5XGKVY4Q+znX1U2sX5C4S`bBTYTh -@Y`$ZeKGvVrcHoJd6n%&;yOj@q=WD=CBA6O`%!iPc|F@jV=HLGviOb9N?tN${P0bri@|Ki?|@syAzDF -J@RUiDGSCFRQgPtJ3Z6&??@(5d<?aN$dJBzu67Xg|Yki+FzsKr(QWp`{ZESx*5`71I9<|Mez7uhonXY -8hDHNU@I~P-+M{vK~4u0WRp>3aWw~c;;I6%Df7N!Q>;9Z^*FcNSJnz;3vxKVfJASRP#&6B=<jWtdty< -ML(PO?1YtGk46Ho)GEdKbCGai<&p_<coN-H0=*GQDMek4*_a__oPIEoV&3W8nR|EPJq7cMs(P{s8n&C -Ft(T?I|rU5sjd4U3ro6Z9STMXqg!+<iZY74gm8xZFP?1$pXNFT{-JqU_>6%vsd7I+2?`#%kZ_Sms#KZ -A9lpr{&O010{wd6(#ZU?k>CGd^Da+;^W3&fQ8$Quo`#~W=W!iaJeFoRB=D2`hQIn;L4R)0^CiH8%((# -10bFBwmQIvsUtZAjd6nnwx5no2CFJRc&12k5{XC@f^K)A3)X{dqdJF-^Fk%S#tzufxV^i;6c}t}irpz --Y`5f%Gup=G;4_gt_^*!Va7NEULI)1bw!e`Q}6K!G;dC2p9;7<i)Z0|M^d|sD&<T<vp7+*Oq%kqxCrP -`cJZ#g01t*nSVn&N8f2h6@BITG$gTs!rira{KKsHb;9&(;CTpslBA0b<@WwrTQxmHB=EX>ZY{9UFxHx -2EsK`}x{bq|Y0Zz6vqCYoubA&(YRa0r^_t_+r~;$Cuh#pc|`GOx!D`kCDkoOgh;LW(5BLc<lRo1$eN( -ZyWNp777{1{_(Q1lfQy~nj|<UB_5BxmM7W=@tY+3_SAS7{G14V?t1az=VRksqrSRETPfOOv6q=X+-Eb -w*7Vjmg|L1Do%L^;X#YK8{4Pz#3%;+<5$)MRNS_79v)wsM)OOlL@dtGFBf=K0UKG3oX*=-Sk65Dz_89 -i1{kxjf7sWD7|NDcl1NI5X@NxWh;@i!D%PZkkA>De!{a?iM&+&twR3Z}Mo<2P9*T&LihkTC5n6dYLc; -AHI?Q`NZ7~4;%<^{1%pEv8|O%uh8_YW=;Wq0CTHs0m3f3xz|Fk|3)H}$tD@ghxU<)m;I<H>@IAZ1a&? -msX~wXHr+OHC!(T&J`#=|QH;*V2Q3jqg=vUYi-4ccU!u-1keA*Qn?nLOYIhBF648@q#~Jyb14Khipi> -e?Y~Z^n)tQc)4CLfAKC$e(2ine=ze?eqmc8w}Gedz1y?l%Vz<X(<t|p>E}YW_rpE~?}U7j=l7a?ae~i -qP)kaYm$5nN^?e~@Mj!h?nf5L-?EvuXTxOJkmnGiWD$U6KhsX4Rl85CQeT|ly>ot{TshM`}Z1PI+?`J -6ED^d18j^*orAWyvxAKI1`N(XNqE+`A8!3V1vS=H;;#DNtfuHG)Tci`5nIfpohf@$P;5&wShL$(*3(d -YrI?8rD<jyuQY3pQteRc2EeeVQVCFVX@tsx!;VP65B4>ZA0PvdS`V^{96N^BwhB1Te?-gIMDB9F!5z? -<*rM{Wej8c(@VmtFDdhhrHJWZRmbcQ5Ni;quPdi-d7gfKS!luSs5sw@102J!nFwB-H7wuMWV}xpW7uO -U|NLo8_+*kHrlUX#{GNo{L4|jquNKPx~+z?0eC^L2LC{Fuh$%+?&|A}u<y{-ZE2xEO_hdNLQ7j;fmot -yA<`^xHX=r=OB1eRMM&c<GMb#4tIfR{_B;dkj+PTw7damZp&hQ$(ue4SR%aOD=8B@B$6%MMTt?WXxzh -Oj5T2LsgWm}nqAn-afrqRseUGYnM%XWgmk8OPqxwngrau|;D=B}8dXDY77__CY^|VP#CuGDk($Pz~u< -9IZKA8@(!2Cs~&O+NRq3r&8j*{Vz>#ENovA@O&hrIC?-7NcqpjVz^Kadaki97q5^1;8VIjYaPUT0rj9 -99g*t7scC{><*UW4v7b&>~kxWK)XxxJSz#ssP`l{?Hsj_HVjIUh3_GFOpCHWwH^Wo+|3M2M53xFTP2? -25pzVS&`;^R^~lq4-TfOy!n>zeTZ2`)9f3YW)LyU5bVtW{8D$T>)Ao%snT4}I<>TCT|YE-mIJqdCO+= -ew(kkRj~%pmL!`CKK|OtBR6aR=vgpy57JPla5R1(#c^qrIiUt9BRqf@2Qulfb96^PPN4;<TU@)=2^Nr -!??(O!L6Yzl%i@Mm47P%;6J=9NY{x)=7#7bu=3%Qhg<!4#mpB4Q%!7<N=;?K0bijU8zv5RG9+`eq$xL -xr~1V?Fpn-Ly-jBQbDtfCK^8JID0f3L*t2MPL1=3TAoFJ#|R`HOoI2h!K?LfiIeuJr}FsB>OtgxQweJ ->IrzwC8fP=ha%gJ+qIp>hq{?nP}`{8;!8-jg8^P(1$jE-!+Q<6><7o^&Vr>U69Wro0tZh6(%k+=9+=~ -Owm|?`-VazT&0U?Ud_3};}VT%J9V%#)5<mH`n_h~iB*SvTa&&@WEbM?1LnO0ZE5YMyZiDTyQT}{>)NO -vfOyC<Uih4I^)*5I&n2zb1hWg!-tqHjxkHQ}zJq#f{(>>w4ZGU=U<GWk>W6EA-DSV!T*MJ_yidkm3FD -}V<?J)dIrQf%hjQjDx>3nvszn~b=LN9$e{_hF-bwJqUj5w8DO%6<=@qbT=^`rw_F>AN`dc&I^|#Ld@U -&Y)`n07*A9mjAOrKrbIj?t*PjjAOOje!Q^K1Gneq3E}&Ik3<B|994uFFK;Yd^UE9w+hyqS5Y!faB#o{ -1+F}(k4|Eh?TC!*|lBsj_&blX=jWp(K;u-xdCT;#_~4mZZFDa`XapZK46^Oo>A47Um=cHvrJ`6Puzt2 -r!(|h(@}>VsDlgm)4pX9|1WR4rv_!S{96I*1NaT1F04m2@L7(!5U(`N{jgVa%R0HuI`x{ktOv~-%y$E -3Jy$^{=f54TTfn}}2aH`U838$V=QZoJ9CfPFCO=%QO?ntIIn;YOT6dV^CML`kGEZ9@8f6XwhTy#>&87 -g~tT|8Jx)QV_UR9tS@vp)?>MLnSdr*}?mj=*fKIpOzws@76vA$mG*rUd=zCU*E_}ut-)+L)QH1M}Z*A -VBv&QX2nL(tD|ZThiJUD;4qld-czo8C6KsG_VYQyjmroH{@>-k}BdI8%-A(exJTigkyaqHefN>tenR- -MPMUin1v)TOC2z(zD;GDQ@dcF~X~sd50cK5p}(8bzjK)EF(PN5XHTd4CznjL*7sOj7Z@!Z(F}DEks-7 -yAa)7?-*W6+jlqo2`A!}qDf*Jb;BX*h7%PL%2xfhNx{jru(kA$@UD~X>VXRBBeT7zF_dW``o%1l<0|K -2ck*Rf*`XAa!}q6<#%AN#Xm;q8LL>5Wo)IZP8h=#TKO54aUe667FYDZ%A~IR;ZJ@)yt2v6&*XJ1B6Zo -DDns(^v>$jzfx-+(P-@k$$gEqIX*P-YzmvnHc`@^uuq-}~eb7Q^qms)B<@NNGMdHw~zCu`=nbs}GLC1 -{Ddce>PlA?^n=jc{kC(wX}pZ-eQ0&QQ<n+gR@qna%LkPLD+E27yPjmcG6pGR%7PGB5j<0PDw2<38&DG -}Ix0x{)6P%SHGoV38-(?}f{X+J1FDx|{VQEYg5*I&|0iGd7p+^l-FJ`8-ED-<oSg#;!w9b5^K-t#;|x -Vyy4XG2O>4@1Q5!FDLPvM}09f9rR`UZ$;eaO6CXcLyXm87u|z)F%9}q(nzChO;dJeA87B)htJ9HnoHU -lr%is3^ukuUz=J`?v9pYbcBrUL<QS1Wl*xJXlcdjWgacas5*OYVYy63B`d!(s(U|SISj@(LLCR#JUlX -%W`R1I&SUt1okGF7qacmrv&i8xc@8QeJc{fh&LqU&l4sl!|nk{k?=>}cP7_~c=Z^JC*?<d-+JizLmA= -~M~)ymGEC{-~n?3Xs`i^%7G2W`2p2kB$)W&cr%c#3WOD|T@}rqfb_u{4M!cQPIOY}rpYlYLZE;Gf|Bk -|z6$WP19@u{@lsBmHBJv9qs6v}F136XA<^$2lj?7=B~Rkv>nZoLi6``d+pPd!O=2zz<)(<csP%9cRC- -{y%*hO~&)jc@H^8X&~oDO&4L0T`c6hXr~+t`cN>23)98$-fO`-Uyf&p9EXVaVI+$?vH`E2ya0SOqB;q -;ASGTt;muI+6621s^S7>7xVNgja{S>!YfZkILr{!ZcSlvjZ4wTA@676k$>Bu&l8v8PW#;6%+rlTIlUZ -I4$|J71`%;2a5%VDqS=n{vrQZ6QsgJPCUZh1iE03<59A1o=JcfVr{%f}9AB~Q4KMnh}81a4xzFn^_WA -8BHPvV)ym@n40$n%fd)EGC~Yx}_c#<$r%ehNB1V#%9>eDq@}$4q;x%#-8$qv=m4j<cUf9NK2dU#QC7c -?)1L|7Ws9JIC<|uL}0HIZH?zB<C;y?%T-w2f+E%mFRc<c}AFVr^hj4Bj>C$Utf>+SQ&NlgT}6PI%5#A -|7tBYm^O0Lu8dq`XP{~Q@FZ8uiLQc4kNDy17QWI`cAMrr)?mUacZiMf^XpdGl^@OYOzXR7l!b(INxv; -s&J6(4j5BjazxVf)Jq&zT>qgh>QpZhh`xNNhXPX?#r7vc}ce?ai_$(#MEi~u>tzzF1Y%Dp2Jh5^RueY --wn)q;h;q{S<lYLrh+xU40$^4i&-#L#jV$(x&K;KKC?SP!iB=&y@w3z|gxIi2K{r3&KK^w-P^9$UMpu -L@_#&0WV<Vh8cOW@Ox#(o*Q=Y+^J7yLBR(MKAB-hR;GqnfL&Qw%S?9lUNq+}1Ve#XTQZbB|0uPW3%3< -MbRkFSb5~V~*2&n#kokj&{-_759_zlQhe9)cWE7IHR^q*KAP>9yR&^r;5MUz@FEIvu!TmtNA85A;RBC -_;%GtK=~@b_k+6g+y?qWF<wkhspVM0=yQQn+Q!KS$4W)crwd!cahf3B0!@7VMwwfivSdPBG-q3^-h&x -0?(t53agR%L9n05p+StA(vhySNe}8oTz@@b|@X)UMY2iOi&Tlyp!Zo_-1INyra|fTuRPAJ#eP5Cvc_I -4zi2J%`xa3$b{WxC{_~IL>ZgVy(elG^UbHVQ%^83Cm!yg-|*tNZI#v=vOjmSLEjPD{S<6*q3#=CNxYp -5c{)Sdk)K_l0Y{S$UM2Ui4jv8|?muIdXB4z9>05As4RI}`Bg?Ze+4fS(wJ&y)_|VGwDruJE><!8MIGO -IP-HlI940$svxjU#k)_QKdoVN`#D`;jc^It;&ISMWXQ#`?ee+NI%~R9vnS7P`Vuc1$?()vo>{z-wwfl -8$cOVsK0=JZpPX>qp3!48E6?<e*@^etSdgpLGht#mdJLE*fM>9`zq+L3jFno^kYuo1f3i7q5XAe+R$q -cJ-mnbBMv<A8vKI5JY(yV_)h%R=eF%Rs7)H;nxFbe^GWy|Im|QoP+$-J0rtlYGEZ(#>2foV$Z6Rl=ZT -x^V!nMv>CYYJ^_~K?{wCS{A`Sc&&XyB*6{vpfO^`p@^?cID*mh#G?rdw;bB0>rn{7EPf*;dbYNmk}-# -N^&jl59Io_%btXn$s#XV}fY{4dytJ8S-?^q@X#>vs!hm40^-ewDLIotd+<I%{T?_8#`NRm0ZNkM%@ES -$VE#TnpSg0n?-93>AR>tm}q?_&lk^IWx)pC*q$?nXuq}QThN%2J>JOd#}*{$d&QRfkG|Fc~Yz8oR{p- -Ulpivi}C#lR=WKtHV@Z#&}}rX1?=C$pYv);A3wmpNKN&DCgRL-4)(#bUZn9s=*nqmS5xsDJbYvLAbk7 -zfR|@W4ffu*X}Ah}CjWOvqq}?VTRaT^>p;7vV6+w}TlstF{{iHc{R4*`Vc7d1?KEwu>vP5~*=L4!>qE -OOLc4V~ts71Q&+`k?9{Cn%(om5SRQ-;gr1Op0KQ8Cf+lQA*Sch&5HzO8XgZAh*?Z6UKFH8meUg&^n)O -m%|9`T{QqYXTzL3TXZQl~a*XbbQmirL@JzNBWiXk?!k=eMv;a_)<qe}}8`xpdQ)%aOhu;nOc7{Nh{@V -GQ#H3;mmBN!uD$K1p)9c~5j%JrP|L|H*^P`Jx>@ZWbC$IGb`mRfNgUW?gT581>8nAHVwRO~XrU;y?j- -*z#-e5dO3r-#DarR(;43-txCIY9W)pcBJV9P2IGq$U7f6aooV)FUnY+UGhBFmrS-O^S^-1UqGAeo-7b -2P953{9tBRxv7sfCq>q%N;-ZSUAItAvO)MGxwmSapKsI7;v=OdL4d{8tT%eCL<LI8;>Dg(-GaY!kfoB -@%mw|6pO&f+A3NmQ>YrMcY_RRjS1>n`s0SEG#`84SCUEC-0XDM&B4k>FpVzPEPE^9kVz_T2bn};$x@7 -p{)73Dr#IQ5Zg*w*bfv7`zz$Nv3%$lSK9KS}2H$7C)R$FLmsc~S0;qAZ^&cLOuya`#^|6Xfol=lL$=J -jS1yd0w=@nMOSHc>UowuYZ(tDU{6aNG7xMA+rsre*^ejkNPtv`>qN5pau5rYTR~bET%YL`-3rl-zX1+ -IO{)koAlM3h8o}TWQfKF^7W~}3{7h};XgGwEa1QW!Xw&;ITm{<HA0;o<yhRMn>m(xz)#y?rme@fpWs_ -8-9<B<UyUtsU5uRHl-(-FYIZE8PC+`(>)gyaVyI`Cj2D!>sfR84UV(zqb>*gAp*&;f$#vf0f%_VUs|# -j4G9PsCyFhD~I0yN!YeKAc0J`zTLJ{1wMhmthF6thMj*fSa^{dqS3*zG>KA$sAy3?o|+>a=_jkP;B!S -+=Y${2S)<F0HI=QokR_syFl_3Qk@<w(Q(2Hb~WgYplFpaI$9{4V11{FP`)55E5!=<?E=sgY!MNXn+!c -0~{UCQtnR>hbRr$KBcYe_pM{_tk+vr8DDk#Lrc{c_MM_`23Y<H|Mx?UWpcS&JfBf@mcbnM?2oTOau#1 -zsHd8A@H-1>#1xlHN*IJ5W46Tbe5dU4IT55tCXMdG~UzK*o!<q<mL5e=Dq+g#o|9pJg(+FYKU!g83(# -7IMDC!(bf7OeM(Es;V9>Ii3sOSMQ5;HM%X%DG8*qEi7(I3h{JtY(Ijh{8G|uimA-ySMlF20V&d9dDCd -03`1L;umA~@*B+=f_^#F+Jn1?Y~eV!3vAJ9_pw>eME{du)e+3@l4Sn|00Cl=h+it%yxXe_cYy_WDfR& -)|&ya{?XnzTKl=8a2yH_CT8zSqalTb1j&PSg%WJ8C%Qvl#cFXI;5wZ)88aY!^3HL|jb`Tl2MSH^&=JL -k0%lFPa!{N9T&B{uOGT$H-hYA7x;!(Ik-8Iz}Ah1L290)JSrFD?V;@5&VA>{J&(g`G#%w(BI5c>ou}} -QxT!xC)<IgKl)|cw9sk9bEjYvIZrCy4>;a0APz3ghzwEpjoci8j?d!Q>f!~@?x`J#9!Li3%&?jl#CXP -Bvv49df0?$9Fw+3@kGOUM<~qRK0GLiEc&NEoxUTNy*vzw?sCx^_nP|RDOa@s03uwEwkcDcCEcD6wNlF -&1ZMOq<uJ?-aZO>ha?mh)xE8Md~D@0sw&t6e-aCU-z7y5szoT4#5H6H)EzNW?|T2kWgJPyxBEk*UEa7 -+v_O&$BtWcqitUp-|-@G<?b^pp+QM2W78l33r(4%F4K4S$z#zj&qjq^rk!tW9?vD;jA=Jf-^H{qo+qp -0@siEiJSTv8+pTA1g;ZA>(%B?Kq4$lCdD-X+QKsLzbEo?$vTu__M@V9Z{QX{!*MKtaFSXF`dv0-FSL> -oG;`F`)}9Ph+y@|sz6cGtgPx0XQ0!Z3uEQSV;uKp|GGnzbihyH_yXU5>Fwxl#tpe5w~fzhVe{B$!oDq -82b1<*mtG6{7LS&-WzLwgGA#W_MN<A;ZjVE2q#u&lhe4a~FBIVz?_zjfGeh-@uwI5`95`_uYXNwD8)R -wJ-x1>6Rnv^i1ML5^&}R|j8r*~EIcuPMk*<k0V-WORF2u2_hK8-)d19+y?U8c4H5xsDm|mva4meeI1t -*{D|Lo((#DU`hgL4an(ZqRDK3rb~&p0*&AG~-7*FjsFuNiVf8QQ+U*gAxmv;j10;Ml{}#@4_U&TBH7x -YtA#bbgTuV*u%j03!p>%rhY2WJovx3CHQ<Tu;tPA{;;95I@gVVyj2EIaUxcGSxU@j83P3Z>@zsXRgS0 -eS%}P713xn?8kvB)Mo%T`RJH=T0a=m|3g@ruSa)Bk7ONx)6|<6Xg6)P(6G%R?Od6qoaa<IS>-4POzkc -~S^dzjoL@2%@$4`3<~O3dv}eBIHZDg`YFh`UcFc%2i?V^WqHK_B2N)06iZ0ma;K0Z92<NsAM(thE^&% -WSk}@1!mO31@X-&~xc&^pUqPHPUtsZ%Eu85pJ?dXa=Z4dvauI4>{1$rEQ>Js2_V3S>xaIOpc1UO&yX> -E9E$Kl0tEz2z6`Z1g6&Oto233itAglT7E=?(b*2iJK^`)VsAcgz;;1E-BLmdP==Gw{u;x|W4qO=u%sH -jYF3K&#+SUW@J?+pnYiz|E>pB#SY13_klP7UNx~p3~+z=PCWYl=ty`__x>InGe617U#n~CLfF>d<biQ -E<S+%sqf5-3;%OoG>zlMecr9)#id#AjTa4n3NKQ?i+<16-;dg{g!S~|>`srS4bhjNAF~y-4``#hx@Ni -@kFAU>9&SF#xTIO1a&9}@vtAiN96E$|a?EwIIo|L!_%<AK+oEui^Wj>M|3|3fS5oxIE?ti-Hs^|lXT| -1bzK3=HVt5Rmw@!rTg$Lggp7%_EXL}Mn|KT0*qz}NcwpHn(@rG%)+{b>kRmEyfffu&R^(AfPnc19c>R -!kBFm`i(U`#Jt;TXDtLwHr!s`ai7gacnQO+5I9gf-GpLpTy1<91D)<Ginl;JU7@jBICYP_G4H!%lD<& -3ScY#5q!Nl5-)`9pboumdH-ON<=a=Q8Q>u4>?Pfuaf^u<35hvI2~f8vs8pDp|{x&?{glWQT=&+W<P9& -_mId;n=P`NUlEO8qTS5RNOR2=ne*|^d6f}K(?ppI*CLeTx{7TtI(56|TH*RD5q9H!l>@xJD!zx(7<}` -s_*S0uI-G6ku6M?_@4euAy{IL=T^4+Oz;^}S6IVa(y_#qu{w|lo`w#5z(Oh!QJ#ja`1zjfY??&eglg= -4PKS|=95xNaAv<3IeJr>+=GsisUJAb~X;q#Lp;T#Ar@NxtHTX5|#=^e<OB=Nu6q<4A(y$67I*Z+Xt#4 -*D)9(OC=!uBqBgRT;9Tsus<$M7cIZ!zf}NJ4k&t<HC#d$RsA`k!25PW!SHcyrGaw(+~smbivP?Fo?=+ -T;}NoJ+&G1@uwa57(^ctRK3f=C-}#`lbI)c^?+FEbp^_N_h$Ke)Aep)(Si5y~^nFe^YeLH2a7U<Ar<G -e3j>%{gZ>PBBQGzB)YQk{ciZjs|!Vt@xQYQ@|_|gt{aR<gB$+VT+U-RBC9J!a3$_J=IDj(=@ibTPR+B -($5;S1Xx$pQJ|L7huJ7f%)CcHK_LTV$*WIG^l+ouNgs(?`uv|-*{-1MJPwAlP|E1Ysm*F@1&9r}<2|Y -d=GLWmSEY~vDaZa3nc26nOHb9PjNVn>cXyll*Z{(#?-uFbKbzU{Twf^eNz#e~YPbuW5v=@1Z+XCQ~4x -IjVyOgWiqeuOv<zLa{x~p#i&-7U`eQm?9{9C)CQ<sjW>DT1AaJmz?IYp4qX;T7wI#I{F9qfnW*lbVPI -<&LST-GVw_XK>MS5dd^X4zxMVdDKvyWECc6S)g*<e&3YpU*DvU<+iTS%<!YJqt`SBC)kl0`+^fK(1p6 -x430r$$=fn*MdB9{*bwrk9h{=eilwSPks9&5wY3=zploZKMLPs3t-8Zc*6Oi$?@IzUhqYm{Ye78cmBo -j9UG7PmsGOfwA(*Pt`9qKQ(oMM{Ow!HhkStX-o_g^*CVrGqdi>i5{-S6<T%*=oI{RabBzc$Un9b6I1U -e9uk#t<2H+M-A6~j4<xp9m)f}U4(70x@F7SY{%hf85&!7Il$%nH<(BH7`8P>tcc`F&tH2*b5xJYxR`S -5*3!{%q!19o!(bmm*py5`xU(T{6Gnwa9P{#L2i<&^vJX+rI}Fw0!a(i@2uuSVHx9!2|oG&6Wps%Zb9D -kH1;!IUEZgQ-Q$x>nX)qm>n#zRe3lw10qOq+P0SfAtBquIm$skBS(3XMsjG_c52l*y+>UZ7T{yaDA4D -Y-nBe%!VZ*{1f=A{zXRkj4ge|Iy}3yIg1(=i7>}7W^g^r2Ss?g37>6s^(nMx=;?{z`T^I){%qI_Kk^n -m6`0Y0>#OGeIyThRX5!vw);sV<w3xhfp{+HfXl1-_I3Fz`U&s^EmhkM;Z@zEe*=SuNU-zAh*42Z5)_# -kwr^7!u@%$?T??ryTlN*<xkC^gvUlRFgNg_Y1C_k>a{49t3tp9@1<b1oM#t(ULU9V)QmwFEJ<A!`}hy -2{q&>-a}ooxX1+n$l07L%V_AU_)byTg>94pV+yQhuHol^^PB%E~&(18lF4GV`mHcbAzvO_^y<keSO@{ -=72N{AZGx-;21+%rn<N4UEc+(bVt-(Zu_slo{7}nbFRTml^Gi@iOy-DKk#{p)yY^XagUO>tF@1Pogf+ -XPyIUJ+J4G8dq~(%XLGu7jc|g-OpL%8od{bQbzA*F0zf@dltE_RdeU$*yZ0DP5(E`OY}3Sb0{C>cCm1 -Xa+)IP8ljC}@vGHa{aR*LOxLj=DW;$1K-MG=U>jAt72NNp<Wx?)JvCjH?Wrc&o-(6rlR)qC>6)Cc!nH -4f^l3{6saLNS;a{+yAN+<K<&>9ca@>+>{Atscx-^yMKP=^a(k!oz_+Dp(y|B~eU0UO-DWZ;jwdM2R7q -BmXp(bOn@|9ZSUcfBhr!{h(xhtJ}QT3F0@XS6)FMa5A5#c(#>jASG*AH>dC*#rUM40pCh{qCM)0Mxl> -ZfX+jhAz7j;cL(mTPLh@v2{`xpDH_ag}ZzzIh?HZop$%oa<k;T3adY59GpW7j+GG@p13G-aVZ*v7|^- -?W_~HaIC2ODYFj8H5rSR|5lUjx_nS;<UH$Mq<cZeG%YnJ*}rJ6WgD&QQ)BD8-Q*X?J6+es=Xl2E4Qo@ -j<!hGlTo>fm%D+wv|H?GQztsu+3t0GfyM=#$j41wnG=YE4R8hD0UHI2O%0INH82?;x{(acw-*p!LebD -6J(oy~yO>zDK&V>BKH!J@#<NTXP+%I<2RK@ha$-^q}&^hnuI3E7)J@W8*lZPk9@esH?HMYL*#KRc>l8 -v+Yp$ps&ZRM)pipD@D=$QqZ^VgwgTsp1^e#<a)@l~c?4ua1G=6%R6+UJ<}FX27o7TOD!HcQ%x3Qg^A# -qYP-<a()`27LE&t|I3uYtt9`k&gQZaO_TwgFrqm;9fV^%ewIF$M=T9)S_Y2PW&Ic=|`m@-q0(`s?tQs -2Edi;-4JVX&Y8z0$^x18+D`6~F+D|=*XdBa-5|sgzeA1p2OJvL(-u4J(0R*5*?i=^8?-rt_@$Ha%WB3 -i?sfZQe5>%j#-#ZqVWt5cnI5*zeJk{0NE0Q4z{QyY+#8BY53bhao)8BeknhPYHH<}^X)QH_H`Bi?DqT --owuIv>X+D3A5$<rz*$5wDMX{E<f^xU^QSJ$m<I{j6^>OLj(cO0<wo~tOee~7&zRrPIkMzy3$uSa+l` -wuB&7Y$3dyzlJ+dqJoe%ME^HoR2w4tb8Ej)`T?M4qwh@y3q9fmhKc%9?rQbL_|G_xih>B>iObdg&ctS -<4qm$`?uUOcUzplbj^w+br+0%>0S_SG_SH*RzNG@B?FQ$^R~G=@XW=#C0gKwv=jVOYQH{meT)>ZK=&> -?zv#LB`@02dbTB-Y)fIcYD-Oivn}}(+R}PUTk>1ml1(&m&hG}$X7H_!ngH4n$5Hpm{yBy70#lwca78; -@$#gEw<^Bj{wu^1ZrrMCV$+xw`Y(pK1Z759y`F*+BhTgQfWgBWX+fa#?XK6#Zqw@R^{Qu3ka(p}9mhy -bu|Et^nPVFdHwj<`-_*T3f-TaR2NR`VxcfB>X9W@M$-$RTtyVaECtqHQs=lA-%oFx5Z^LptWU|GvgY) -f0swvd>|+LjW_w^`n0iR9zVqcMYPY|OBwb=B}iO>}p|SMA1i&4-OJ{aE&I<-rHs{5}!s(h-MIhBdkVr -N$2*x99<_mUc5F#EvR0FX%_QYFxdudrHl{R=B4882#afnz-E@GbiYOiYH{BcwUM8rSXi<qv2jGQYS$M -xd+I)55{%Kat-lZN`<s-v{|%kM`^>L6MUJ08S6gC_Aa3GMG5@_&p)X)$GOg)*_!l^HX{w=(W)(uOzi< -<SN$3-SRYYi`d;Q+BxCLavHo)ZHLAbdwZ*ZLv0ekxdmWV#=$3O{u9ZN2C!*=St*hQ%4R~j>#R$qiV7I -`u115CI0UhsF1LoQ_uAsyGHfVE(=Gv>;3X$ehg+>?06)&WT@Lj0W-+oZ)w#X~_Xs>Li&_!&ge!S-x_G -<92{(VN|70A{ot!67)$vFgOp6!;j-AKC**A?)wn-Ryw(sADUy7zJ4;2Dzs{O+G;`uksj-^I0+y7Koyv -!%^t+GyVOlUi!lBi3>?&B}`99kjVa>#6Ha+3;%aV}4U6xaW>_j+FG@1<wu|JJ0G}<pVN%hI;tj<OAv6 -t9<-&`2QpF;f~A4C*MUr7=Mn^>RsgH>c5nHd_gq*S>z+3pTMePe>luN&y0xFTXJt4?x{VN4{KXjZ6zO -CE%c7@K?jZRBpoWX;5TQ9_I%yceY#f0x!P8KUk!dIgYR#BsWhO8GNm))GQxUU<z(ExC`sa;66DzeT{< -dL31wOJ_GZ-UA5edmC*uvsFU!4vIDtO*TGT6gvnV4D`NRS7uI_3Hr*mvs3@_P&I#TAW@|=VC#ESnG)M -soR4ksBmPr6<qv<|plvT44L1GiNRM5A}IsH>jBzQfRH-{I!NA{fw(@Dli9F8FYM)SL3`LVX)h-y+bq1 -npGD#pb(`)>Wm8@yxuW6Z7A0=2tXB{_#B8nhQAdWSl+DHg5GKz{}Gt@RHcl?1c2Ov|KBl*sr*ywd0u- -*}p#y&NE*H-rJGiOaB#lzaoaeQ-t=mUFX`~++);#T$3ne3;IXy7lAfa!To2EhWe}XQgruMAlnj;rWsk -xOMCoMA<wv*<~t?F9<xIn%i{d8jgT42Kkj|G!*b8ZuxoZ|?I8W<8nr&&|31|ZUVcc;E8w#`MXrrK-T* -m(jxA$a*_UayVdCbP67NI#$BU{DCD}aBr?v&3dK`amKK|6>W9GllOz>xt$WX)o%FusXhRSG5AxBLU$W -TQR8ESe58JcX7q5YTMNrsH3aWdo@m7%6&GPHSeT!zvtG8CC<L=x8q>~Gz%{~P$b_>KMFNE~08$Sy-~4 -o~+$2SV3Vz9?6qLtTSytX!@0wS*tmVgG0=5Id1p#Lr*T(}epbX+s|EDZ_nP%x1*uu*_12UtfsVA!grR -edG042k|#N`08MyAJ1{nhm+vm2HXSgn~Pjxf7T|{p%pf;MVISr7M5s%8M{E!$eYTSfj#2>UI(^w528c -4!2rH3#+7*Pdk}mFZ{=FMm!rE`ztObt=Ve-4nNIejAq{*EU*J8)A@3P~*s(<X|I5U`^F89958Pe_Zg~ -^bf#X^Sb<y}!x&JJ91-NPOUjnd=UxeJn#~0RbZPqe3`cro8$%fz4q2;b`yArMY;skZ3-E+g9R_`;qJe -q5WdpA|BHp(dXRYJ*hHF$3`$H1y^&;DkCG(6wanuc(yTxcsOx7sBl@)<a3(6MPkolD}^)b|E0K9A=AL -itT&%6E+|f3&}e^HRX~+h68>>8Af)Q&Gl!GTFX4{`C>ATSfcl9O}p3$MY6jPDE`YOy7%ZkGXI8O*2IM -UXA;w8sRnIQ>@>E-`OW}1J{+;#P^}$`e3(NKfh0e+26AU-<fYU%35oV4=pkGNTH8e0vs>$3<^tsM&dj -K3;rd^@RxoS*H&=OIAF&7s_#q}?QcRBUxK`G9!~#UqbW8<#r+&(xF0yYr0u_hf9dERFJtE<B%2qc&Rx -=doZH%N7sW@>zI;+f+(U9K0sQB_mYnb4(sI(+_s{j!`QYzvv@4G`btre??me7CwCGfH_p`c^1(%lFRt -?_EXP5cxGM@o6FcK}{`2mc#WPPA3WuF_$>C&BP4RTJ!d!OI*=c>n}mzz%tYdsu)$$BJT$2V-Q_qs587 -M48}u{lDQZ7HFpsiOM;^cHp3^C@b7M~>xfN)g?4`0=a=lv($08KV6a+l){S+U?7>>0F!7bughvQ_w!3 -2Uo+!a6RK8$musSxHqku`?Ak2>h|I}hx>E@?mwAu@)F>vbGWiYw_V^_Giok1;Z;D6xt9&cn!ap-%QMa -%#xwM8m}9^#h|QZ}2bqWCZx3atbpg~rEg5lJIQ4vNjZE^jet&5?e)3)D*l3|+O#&Tnwa{_JyU=kJ>Bx -D|fW^7cRytmnK*!SYbZm;zaiN8d*I4NI?{B;pI$GDS>GF)U?ljJOGQyuYOFnb&bF`n&8N0X^Xh5j7*j -y9D^*~$~R8){A_se)#h$SBsYCbw+#<Yz1dREQ@haC@p@vL0i=Cj7}F*_mGYEMNhX|B0Fr_QAcN7CbP= -syeF@KT9~x#pH<NfW;qZi#D_V)!lB#FBwp+7Vk(pWJU#L{6_2!BY=`ubV{hhwAKtoRem`|79t6<0vhU -Oytk_&ZBNzb8``RupfzYEoZY|^pp|dIw8KRDp*GQyOis_D&+d6O3pQ0Lfw7(tQw0k*dKpZ?&UqyH^Mb -xIlkZEIUx5-(nr^PixIhIWz2q4^4uh(Z)bYwxGr7oiQ@)6yiMze(?O5wg7inq`$gH)LavMSHK(ifiPk -kaiGED1o(hN5_+Fc+tH^}U#`lNB*!Q_={+xARB>BET1jjsAh_UApTGs1cw6y1X@*-27t#x2?y2bwoZ% -*Q#Z4Q21q*jP-&@OV}O0=8f6-8?OT&UP4x(D&>)q0vZb^|9f$T20amLuo!E`e`TVV<!y=k@6By@1h!v -i>?fKBs?|y5_{rB>XnY=DBe!^D{_Ko)b@dre$uv#U3YHe|Y2!_@2Z+u6C%ojf?G~JIBsF)3|SY&X|4J -i96@U<^umgo##&VG@Y@z682<w9Xps3kbA4JPsq7-%T~`twQfz#JI)FHex}-+yWz{m@N3+sNLO|+-^IO -Oq+FaxCKu)zQ77i&8nmn<>jT}=EIfMjoN7PRQDT}}t2TDuy7B9Aj`c@(4=1cAy#TnN(<t08o>S}6HmE -pLuJydCpL_r24y~2vD2XPHANEp@{gV;t(Zqp=b)#uH*OXo2yoWS3@8K@d$h8<%ts;|g+r!rwTYXWr=A -838V)X>?vdDWazoq66Gu0kTmxL&J4medg6iz=)Q|p*-Mn3MpbWnE=>6*gjKholB;XZjzt%c)U9cQHZq -zmnUb5HYIJN9r7T924=F2Fe`*U53rp<B3~_odH$d-BK)C-?S`?h_Q;#QpTX{`DH_+~1k=VNXIHJHP)( -4SkbMm5PU4>&|sdkEg}u`O!4mE3TIoIi%4mh~Z!6+()yXq#5h_#7ueqN%1Lp7QCYK`EzQ0GRxgzsec` -==Q(FlU-e8EaNvG|)P41p;`ph_Y8|x)cz>cl`MM#>gK8fl$GT5pY)w4Zl~aGye)3$m*m`xI*EsN)if_ -)Oja{o`-A|D48G}Tl9f5)9O9A@)KbWlc-T5Q?j?F!^83Tpp8C&OHWo)f-Xe&LCk!r|?ANRMkZlBSBd% -pAIzD0AcfInCQIV`TUi{q77)EUo~eQkGeF1#PQf^FjliwytQS+<S+S+TW)JTHvxglGBKMdJSa<Im%Zo -ii!VQ3dP;7T7;FVN=F#2kcEE?)UV=){~AIpySYFBjW!jxi9_!#p67AcF_-ji<fgu5Hn9bG&Q&vahXTh -8@U&6`Yhw*fEzl$X~Wj-97ErZ*r#DbDPxoz#OIWYe(<LPvP1Ye*NNJmcggQE^Sdnh7n=FG&b>u<Njh& -f&okWhR`kF-@qGMwh7<1t8!`3FFzEP}c~<N&<oLhv3qx=G!Y$fg1YPNe-E&s0_k5>4J)h>DlcHs()Ah -?e%{J%IcGJJxYwBG!?mj&f?u+hTJQ5v~w)5@ixb@r6&vL(Kwq=*tR+H8|^N};iKbS4TXZ}s=x(t|HPu -=Dg-NZANKTYOOTbB?2^s`y)D;33;+*}j5bf{9DC*xbSZ0V5ACF)i~2b_A)IJr&jebdb|O3`+^pZQ&Mc -dE2|GbG+$1kStM$|s$FR-MV!Ub*xb_u{)_+0tV!ZR(1uiluE0=GtfI!INBj*il(D^cei+Gxr<c?$F&s -Zph}xTH9x^FSgoT7d7BMI>Yr_*UU@cHSt<zSMxmO9u6kFzr7OO-9MT8$xZbggq_KEh+@M&ytMsr{xK( -f!8?xR9~;az!e@{s!<>_H+f2D8dSMITeGhfxH^kb<??@HLz4DwmQAYZbo^H+Ec4jhsh>Ot!eYTmQFK~ -a1B)nS=I;?cZb^3jrI~-frt<72#Ti4CD9e+Q2k#)T{_kDN5jtlU9gSj5^Wys%Y$l)o-BliMTHaM~U|7 -grP%9qTThjPn32zH~6Tky-)#evwlg3@*Y_gTPut~;(LzV~`eo)3>}Go&5Y+tMzaM%{T9nA(3YFLbqew -jt9TeNCNh#yu*o%T0!F+*hW)`bCbpkJ%*AO}Sa2*@COIv>}cG_Q*Mn70-CIob@f7V~F>y(J15X69eg@ -JJ(@E4&Zt)Pn=_{?{O$!lXEw{72^0M#jkVbzJOVu!28cahCY)bA~_Bt+)*eRTOse&@LA_q=yI&D959N -c4Ne={$FdOjRJ+Br&t$1RaeE=RTpxSXrS@BHLEN$3yyx1;YV)3JNnGar1zVo4z=66<X{jm3kK+QpxIR -Bc`Kx|hH{-{+rV7_O{Mb$cxVBGG>qn2KSjtPWl$T;DFC|_c*Zg*7w$yZIs(n^^aeY2h^*MI}X7>~oD^ -}rM9e&(TAuzfhhuUwAXY2BeoV|Mai=WA2zo5t=jT6(+mNU&~LDz4Z`#mS?`v?lr^CkSgjNd=tw*$YO` -0c{4TNgbC@H69q9b%yow!{Z`7NgI-@x4EG_-7lVdw=*AJiBL=rp^;G_Xyb`W{b$!ICu0MxN$Hj!?8U? -Vm2~W*}XCQlvwvAvHBB)=?2U+XG={r;5BHj70#=V?s01FXH_||b%Dvpv4&+og)IcXi06--@Zx&GV%I+ -d9n3S#xF^z7&Na*HDV2Q=+{aiKjhCi&%=oBX+NK<*P4&~d0E6e!1>Sh66gsnv`^|j?_wBko=gs%JN9_ -+jF1_AU7E2HP7%V}W-ETuzZBuI`4!%z`YOqgC+x&*7l)8y}G?#cGua{@%wW_q9c?!os3fsLi<kWh~c; -3r^Qxse4<OL49)8yD;un2e%&U`s<SjlQ&j@&~r)6=Lm?nT>-oj(UZe(4La9f6ddGQMMbC(d>i3pQQ^U -AS-f@&~k9AMgT<mEdppXU+Oq>rQ{a1?A@3I6fvyJT0QpKCN1=HC~~MV%E1F`Iv@zJ1q2LnG?~_S_ab{ -<=$#4MjiKkKfc|LZ!du^Uh_TaG11u8*!`E^-pRdt*XXiea%ZKv=GEysyr&%Rxi?wS=k!MgCg+DZ9#Dk -m{0z~?bETh4SGt%sAd;^3MzY3z@qL(L@%gCl>D!VfiaS%(y6{2J|4YueUAgKt6`LbI&bez2;&8NuR$U -A7j61@<eHLO7JP-1$NKLNE*s(a%;C@rx9E+&}A9mq8&kBu3wJ!G8#A0XSNc;2V-&b@MnsNINOna0Ae{ -H>U%v$^tM^G=u@7DsCZIkla2=lazA9AGqny${}m2>8K-V599W|xqApm81X8P0EWi7@B5#?OVz3H@rO> -hn6!{uKD2U6Ot|A%6d6y6g|kp>OKq-m%m>ux|m@?@PvT5%}91jUHfG4S>x&)Lm|~+^-^ktejoxaxcmn -)vs_Qp`U-;IT|~%3mif2xx3dP4ltgta)|C*5l<L)QM?(?&)d~L?67OyW8+(A$UJAd=2h@45B}6=kS5k -Qa$~yMqkwx(Y?Co#o{wj>F>fs2?~o7vRI&1tazp=`ul6ik!@iU+8^eLOqX&pviuBELM`i7f^w{2JhZ5 -=+*Wb@W*9N|6$aQfni~BDBY_@36^u+f?<z8Otrr-AgwWs@m*#2JB)#51;Y5As*V>K-AI#cF9nEp=td| -Ap5#mgsuubZIkJCc?CB+3rO%bsnPJu^w!6ZlUd>X$Q+3Ca}b_p(2y$gzEo?DvVyyTp}yP;*~D_{YItq -?vsK;QO0A7alOSLly|9!I}@g=v1UHzo_<nQ0LB14gF`Dxi<xTO4a{0HS~9O)XyeLUeJ}iQkM@R-32|T -ZNThDx}f&>M=aqCok~;uhwpoUb^cwN;`eXT)IO`c|CQy;?L<E!S^wGjSJ;0x5uLaPP)>;JDLPF$t#`E -T;r<L``_a<Pa|=cAiw<{NK$H9EN!r!pUBIN>Vuzv~;SPXy&g(_C`+8BEtY41smLl&ela3W89k(Q*<K9 -0;cPG+uH`2AIOl^B52_1JN(D92V9Ur#P@$dheblfNDIMz>cK4nC*g(3GU;TpeMje2=3E_Wy3(vYV5EG -B9{67G}l4)<dTaBGvmJ$z;SK4^qb-6!J~?k~vmBh~rXXR}eCWMy5KP*y4XP?-M7<ms<XNPl$#ZqFyd> -+x9%rVIA%SzN33IS^}zbJPRb+V(vSx>3gUSL}x@g1@mD@>*{CG~CDG0(_Z1o6FY<U1zBNk05_<a7|XL -nrrEwW61ps0+7LXJh$G`PAH3Bk$cQFoBLibJ9$vohTeSW;XRb2&!FxI40m*!XD$sSoVmpEd3L)NO}<w -|vVET!t8%|*^8KrTy#=se7(LHP#TASx*w4dsggrVgk#xO%Y;ORyU(?g(_|=G8+2K?n_mT*EB##ci<9> -0}882`Tz*9Gt4Wx(?uEkUBfah6s1Q@Re<aq-e>y_tfKS#fR1$_RaoL3U&K1Xg@w`v(r9NWX#A)xyIM$ -e@*?W8=HQrd)q6gjt-`^>khv)a#!)|BAAI{hP69^iAlX9v%f-p(`RD>8y#jLLDL9hx>tz3a~i{ypEN# -Pi7WI8Qms0&YXDEp%z3EU_=&Zd2!+0M;~)sm0E0i=9iO{LCMW?)!V{@AaZJHige$^87UVI*WNO#acP< -yKG=8e8gIHF5KW;TNlp@<vPj1$81HXH;Le>$KcPwuj{*61e@3&JXOwlE@t2I=sBr?shj6GCd?c5eL<Z -k(AY;G(3TbAIq9w+8ew07vlg+2s&7Sn{7cn8HFk!Hc~(lckLSq9Z~Juf92ND=DzA(!wSCj2A4%SMTNN -DkkDNmNDD!fh54u36)n)|gU#c>7>zE(+C+m*Mm?c*AQNEaGZ|r-2JfF2KNO=p#<7KYBGS5z}X^pMLGM -^tX*JJVfeP(}EtR4J>zEL<H2e0ROL1+(*0bN%g+v7t#{IFThr*w6e1L67;&gEkt`TdS~9FaAo#(7dqA -Ij-kuJ%DR_t{E3|HnDSSn1g^Wg~rg&$UKlpV_9I1>T@A+p#d`;jOlmGkivs6NAUT#PTUdBir@@Ej7q} -v?p;t>!uCEsjik2M+;Kr*z$aNzR2_}x!yP5Xw2t%Xa;a-n!J(ccb1Ea##VXW!SqGkZ<}qh3oxFYm-<N -6E22!E1807tOfyEVnl7^VoMQPF%d-l3J}u9N+9Agy*US5W90O{G4%sgD)_C#D*8($=$8EOIfo!EGpLU -7%gJ@f%PfqLm(GGG#5Q68p?{A=x`d!)Rqubm(XFbB$k^P{D@Jt)CAYYz28{z)Qa*tu?+8?{9Ymbc6*O -CY496_mvOg<>SsWx#MZJV;set(Wl1dxvFg9rXaFZ#LMM{)dlrEIr%Ocw3V&Sl}{NLwW5)O$8oYujfur --+5*#U@?tDb9LuPjSk_X?vXS_nlGWlX9+A(;T&jfaY1`?6k?bJ)GwQoBdqXIaioAIB}l7($^K?czw+M -H0>%T?zNP)$}G!i%CcKa;rY7(W5g9WYW4~9EOP6(kA$C@5=>_I66bA{yUcjPoQuJE7xk|AdBYR$UpyA -h0uxS?1<tJ#!Wlom{}S}l0OTbDdSOAj=>8?>mu^FREay|EKilOnB5lwSw=bYxz_ZJU+-lx`1lO0ejG= -uzlU2(*mOZj;7v%7q%V;^_ZQZrUrDcE1ZErd8QTR;<_3WX!;Hz$)vCbIvn;tdhPn-1bPSMUiw6|n2)< ->+VsW|qZENOm#G&!lF`^%HE+lb?vXairGl-tI*;dR@jP^UI&)ITC#1MrW)lWv|x^6KZsFwatEpE2_e! -1iuOz1+}&%c1{-w7IDBf@k-vK;4dMBEoe1&UDpCbB1yFHAnZP;d^g^2*O6n@AJ*HOh;HQz+l?>NLOX1 -Npq+)0i>zYoDx>og5Eu`G-)moG2`nA&sj)5E*76>$FX7VkG$U81D^Yj{u(yv7L?my^0NW_{4#L(=z^a -qex``y<r(6sIy_gUh`I=3u1lc*Flc)}<hi|29Os-Xjt2##UYR~r4;s3V_v_Fn{^p9vV&sk4GukrF@nf -0uHB}bpoVt<TkFr04v<J1RLwsI=`+Du;m;2t1)?Kn?gf8MYY)g~lW2elqoEEunZ*J&%@SZSxm7f*4Iy -U!@`*DG`a$X_#5L10J(l$&q=GRYJLC)#Vu}?pyZ>iV%pl_vrV(PX5_$l;f=)Y8%I&PNKadE!XoAj3ZC -phK)xKjV_Q}%4X6L>lEMVHg5aI?;*7%ewd?>cp4Y`Jm|()Y*xCzd^Qg=POZ<`3+5wz`8yc^=w1dnC3W -izUXAb^N7@tDd8;`a)E#3r=<(;n&_C`^~DqSyr~D#`gvW)ZXVyJWBU`&Ag^xR_|XNiNi^DjvHxk@HF) -6EKxhrdEzI5@472D@J#do`}L}zcVlOsbA4YuzC90|0+mzbS%H+3?o{}5c=lhhkIrctqyH@RA^iF?H$? -sgd797IBl7vR8zPVK`8D$yzIX?p-9kN2G9r)gc~X4NRI>WfhZ7Yuf|{@gAD^T4E1Bs0#{u}gl8+Z}j# -NQcrKYJl!YOK8V-(JjByg<t;XKXkbi@jP@w(cp{%kCkVVmSUjl$7$(Z}y2?Xp?+{~s8)k967CeWV9Vy -}6>)KYkzSvP*h=ob}5C$@h_tm49W9I>(V^Wq4%Vz28|>5v~%>B|Kxg9(itqEcJ*fOY=3cqzCVvVt-9J -VxKN^Pgd#wiTzn`nd4e-%X3f?$8UaU+D<J*--zcme3t9%P`6{i_m?`)U=raq19I(5&R4kafLpBOScMb -1j{1Ua@(K92O<WI-a$cJZdzmVN#kQWZyP*ePh3@J_``A85)VhDwu=QCnZOId`JKb7O*&m@(Hy{mZ*zq -0FIG}qLUCIi~;63}eI0n=4uPUaz8hMJ5hv^6Kjks+AJ_jpB<7(*VS8dKvpwiq+Zl3Cg2pkqG>6-=~)Y -W@)o>bufXe;IT*p>ME!0*J$>e!rU_9tpBHQWQ@ODMAqWpf?!dX#P5lZ0^=$7!5MyTKuj9{}#e?~mN`g -!}z)pKhet3R;qmQ$WWJpp)DK1u!?8^>ONI4F~hH{EwP*3EZw1W~|tkJM+&~FRnx3UOpZzcfF45OS*gg -5uvVbZN+^J+&55DV^%K~=Fa4PJ(P>3+EgEGNifI6_cz=hhkLJbo+9^~kaf+Gds1F+*7b!yM0fu}o3@n -mTbgtcNjAr&0lr3qQ2kRJKcSp1lyiIXd^{ho%G|4dz$S{{Z)rcD6=Er5Elcjx3HZA;=aTmZf4>})evf -IhxIXq{Xj^aE@>WbVPbV=Sd^0(|k#xLkg7(KgCHfF=qWx_#+ux8T+F#J+_&|6YX!&VP<b0JnF-iOT34 -HReBR|Jh7u$>`Z<>&E0thpEp0SlaZvZ^t-XsNpWx!r^qOCQfojn7Y^Z%<@*%j@O^K@E;@@JTjd0x72= -0@VtnuFNmuxLCo3D+~CaSi+HAcyzTwx8;#Y1UoqPo?AAw&{(JW#Af`uF`CqzVcIy>kiLsJk9TCW}10t -uH<}&<~{Qo=kopGdFuV1c`H95-@m_cZ5rRd-+cf6l^>Pwiy9wu^L>%|zG&rb^8NhA(=NWBZ@!;TxySn -jjdSJu1?Kw&E0@Xl3mexu`F^4Ke&NdN<@?2ruyuI9*nGcu<x=^+r15kL-<O#0OIA`=n=8v2dG2%bx-# -{?vTWsi`Tj$VYaM+5A@lu*R&xGC^S0|6AG4D_*O~OWZly>1N82O~kHDX-a`E1|ejD2@-urdu3XYAt-d -1TIV=O+R(h!Cd?>T40dF3COR?P{euHgJj{h=D3w^4ms@kpizzlNCJ)Crt(;ZIR>1RK7ft)va1?r1Reh -FrJ5O{|o9W*c<WZ^cTs1+D|4o_rB9G|QAX?jZwTyUFbmL9Q+IoBPhFvvXT&n1|`BT;e$8>zF)G)@br* -Y3mu^F3@<^nF#;;@70_wqzl&KJM%F;_t1GUYrE8ww~y+{7ojKfX8x~y{;zz-<dgX(W!`?@DUEYXl%0z -vv2&LS^Q4`l?3QZNd@;Ruw>*nZ?U}tD&*$YHPn6SaY3CjiN=|1&PJe0Ixvx)P=eC<RA~4R*an12G-<L -<?cJ6Kww{u%z=cZch+}9?sbK~JpZ0C}sm3HpquydDeQzx`@iTP-sC$e+&&(kXA1UdiZmIsWJfpZU>bT -zDh#v@$o=`(RI%&G&TaW3bn-2z_SsQj0`n%Zm6c~)P^zH~R9kD|RB!R>M{{_TL{&lJJ@2LCh3`qAES% -QK)3^s=w`kX_CjckYmTuKKby5&m^lu2Jy~SkpaarfZRBafg%boB10{dSSxF-MDkxPgv8LaINRNC))qF -JY)98@I9R^!sc25A7U%Hj)?QAxt`|_oXc#^2e}$>pSBM#?G^EJG7HVK3#X3Uv<q?X{!%S9I6c?cIg{( -0?*Hs?(cGD`ulJ13GZ;aS)AGEZonyX1-hOH+r^hTiMb4egi=83l%Q4ra@c!o0YThLK1G~-iKd`{4eMR -;c?v&>WdyGhOzi8Y(A@VFx#v?yHt=1)Rp5!+za0!!hS^RPhks5nAZOfHo53w^m`(PjZ32Tft0meD*y~ -Z;=0Jmo(TGs%&^-i$<if2Z3dRl7Mfj(85)6Fw76ZZ&t*zEuR+30y76Q6T^nP-MK8>2iTzsM)@f#tE@M -RU_0`B1JAIc3hp;@P|O%e=tBsm)o$w!r&!9(lf(`>VR%#{TsVJ#XkD*EZm{1~#Y*dCMC_V-M^|XNm}x -mk7CEP=hYYE^^$M^CGo8dA5r5;mvZYHQA>l&zI(WzFaN0jd?iti23~HIm@GGEZ2%4$5=S8i1Up}XU@~ -%_?46M49vQ*UQSm_4P|YW=3K|Ig)_@~%2pMrzU@vKZ-_D_lWC9m21Ob7kQi8|aI4qrF3WXjNS7|-b~* -mCv(Glew~ymxNXK%RmUD24Kc8c8Io^8^G+K5kT9?K)A1g<$|GRc+mFAJ-6r^vJEuN=d&sp(K=VJe<{7 -xU`ce;h&urcq(?-a%F7_Z6qZE57U(L{dt!Jj~!Zsm6q`F7(Ne#grpzXK+}tK$4_DtiZhS0?bg-l6#Ib -trzPOMa)1;Wy9b<N1Cpm-B(UQ0~C{MH9<no<Z=>hdkATN(KgR>nWR$=Y~JVWFq|$^4@z+lx49l6Uan? -DHH6EWSQv+GLasaiKb0%B@=Vsw8}*KJIRF1<JZ+3nfxYC?K{cFyY)|V4c4$c_udw|Y_rSr^XlbzSWC@ -Xq1Iqgb`sB{ohi?wo%u-hD?MdJX`uO${I+cFU4u5?AcmKo2j9rQW1PRMIf6yAMeWt>%Rf3;TBM1R2E6 -OY1pRh?{PJV;^RBEa<$e*~qXV3GReU$+fFey7@}(gU;FR11++ypb*ssg|nf;vCs-?>{QkyETZetu!1= -_h>=DH8?`6J-xdd@j@!9Pbj;@<#$!|?}M2k^HeL+$Z9?%V&v-nYlaRbBh<a}JMrKoVehWTF{J8ik3`n -*<1`l|$kKf~_}zR%`DKG1oeP?XQ@qK}~?9wv(W3#-yc^+mc5gFlwunXr|f*v|1u+4QSN90*TfE5;f+< -Bq8UwzI&g;JQ$+Azu)h_-yidtnRE7Y?Y-AtYwxwbi^h6Y@nyZ(gZxTD88FReal5>9=g+A<tK^Kb!?X{ -5NaGDZ<wHsaxBtuheOvhv8~6K~um^lb^4433fkJgTSV}Eh<EZGRy1?hFPpXAZ;`2CLHYK&$OC^)D`lP -Tqn0)<z{=R-n-_MMFeP~SVmB+?{dm3=#pN);!*JHonzOFEw0VeOIJe00-zh3_P^o{e&8N#N|nL5b#{p -84f|IZ=qcxfzj-$zW<w9tJYI62PJK@rOl`~Gu!`agt}ar5C|tjNjt{b=jrMdRMaIY@LoNc6h-A+;Yg` -)|FTpNG_wEHT@CSwWf|r2ZeuWR*Soy15ecBHCpT%}O7vA4U9V%cY6i%BbH@IKpZ6UA_EAbefTHY`b|T -%bh#Zv?xo{IuY|3c17AQx#M<PcMb8vHm<=c>~2#fmcL3b<3YU)-bSKDKb3WYXo<5{$Sv=jk6+ZjPO5M -u;l8`EJa@j^4ms+lrl2kJt0Ina-|=)7c$t2~|M5;L*RTt|6?y~xej&IQ;%?CS4|-mr_tiW*aa-ne7C_ -(8Z>&p_QhcYC6ff2(*64PcV<kgkkNvJ)eIOHaPRIQ5Q(BZ&M)l}6^~+G^Tw2p-NngP`{C6G|`#8@J9T -9j;GPil*`Hj4w8P88^9@qfm`HzL<hrTySexCOj;^w3|2d1;F+hg=L@V=U9K6e#bVn*}%n(vPH4A8ve_ -AMI_uej&{?BjXAmasyMTQ_i#a8EQCOw0GUmCUoA#s~hH+>S+>$VUdwkv@^G2EIY`AKJAzCpXq)O`_kh -^$}&pg_pTXU^*LR`W-4T0qQJCH$TurI{gsspEk*C4IMl5XOnp}e<RIjv=_8FOzY|A=ZpIfDQ2(mA5C- -Kbzb<h7IS$?Ed;h=JJIF{$qGYCx_5*=nw&7Qp2mh_uUCsbczK@i<p-WQ@$r#EEL=8N8X+5)C3ABPaIG -l)2<<UNlxG9U(A>@gbBx-I80p!xZ<f%$>5|g<KAB7Vq+RH|yuHuT90ksLBuyPQ(Vi#H1=sk`bUFjW9s -g~*{eh!XU|!mEKZ}P%4AW$!#eLf;CTx-|`aKKsG@ldeb4y71&O-*T`s3&9<B{jLdpNJ+eUJox0M29i* -#1hbZ--2Dg&LqeveO0}3ijRdRMKDDENb1B-)^*nk8U`~?;ttv>U=4;89YC&dyD-5%~ONlqx^J9;qktw -)4XW>o;nKM1-2m$6MF_aHOYR39mIb&vW!Lk^9OryzXkse*ZJ$Wm>zVER;Q_tIkTp3+qi!DXlW`7v{QP -F57rfrS59l|mN6}F?7^O>I{oL#G3Z0O-qz`Z%!Bz~KyAj@TuJhnh1z}9w8ruuL)W4<`5$nN?xQv>%(8 -5wwgsFtpO(k6V?2J`A;`Vc7q||wLMM&cgY=Di2H;TOPN+(1OolwBN&@#GlfJVx(P!9$Lf3InS%_6=(w -`f5ZQF6)co9p!H;n}xW--S_ef9+((0oMvd4Ar+pIy8FaUbye0ZNZFXj41vU{Bt_&qK27?;EvGX9BZn3 -aw@8=isQYC!JJY2syVHpf;^%!Z!l#)Bd5gz;^Ubl3jmJAH+*Unl={1WQZ159A^$TqCe(HRn6*A+#mK) -Sq(M0qpP?b)U;zuG_5k~{cnUFDeUe13jBGyS`i;|17guVByG!~vfrV4wokc^<7qDBn48d>O?>Xd_ZoK -$Tpy6xZoIS6JO3$;Gr{ASuS%yqjeesHq<7O?MIMY%*LkfIXL(Pa4eoK#up2_@cZkM&mdrZ&nM>kz0p6 -Z0(H=>+LCh4q`{__V^R=_$EXYIOq+|NR=^AeL%V}Gj4%(KZ|7o#}eI%3hvt?=9xDDWmrt)Vb;ZM~rm- -u)Lx+`g)BiXn^Hu-j)7j%!&=ioFEQ+<L>Fh7r?dVmLGp*k{YZPZY^ON-+?*|1TS9Fy8X(~HghRCm9`@ -6CC8(dX11ah`N4i`ulTgJ@k<p1uwJ@1eBRzGeHUeG4@$&zKj{aGxe^*NVt?P41tLGSZ7PJ%iNdGwWr~ -bdu?Si2=D}lyo21FLctnYL-<Vzr0#9zm_@gwN~)Cszh4ziEQ^lIb(#GAseu_%+i;5|15(h&(K_{qn3U -@I4FDGzFysPoaB0x$9??b*fU*mtP-+yUj6D(nKhM{h`G@>pxbNnxaSJnP3!sTY?>pcF~Kt&-;lU`fcm -7YD?NwwJnKlWfL$wpz9RU1jZOFs@p7nLC`TTb%Yt<ocorlR?)FcyHJgb)n#bCDxW7BS8>VL^W6OIg#> -_p2O`RKej2gGa<>f4-_72T0?f^|z5Wg{K$IGSlz~}o4ndmL#j{#lgAbGWOlRVMavvlh8W{YHb&8fEoF -<p%^5g!WQ)gg9aNY8!#X^gCr^|iTrzR$xIh_q(`4dwaQ@NcR38g9eBWE%4{lCFKXIIs0Cl=S|D*azc` -Z#&fw8xGKucveOzUjx4K9NjNBlwa`rc3dgy>%P*1y08|P>2-1JkBGXAIwEabF0>y4ql5H4es&^DR~fz -oPBE9RBK<~jF3BWWfyxBV*QgTf1kTr4CEj~EwFP(%g>q<Hrt`M=uTldaDKotPRP5dll?>8()4hjDo&s -jJj)%i>Of!|D1F#V=;v<XzTafc=Gv|S!d5wIS9|EU(^1UnS_^r4~(6i|(F@Dr9*r=R4FKC()W&8|Z<X -CZrOLNr}V%t5r{|&FNTd!}B)0NY)5&b+r?mrn)pG~hX#R;E}IHSI9Q<!agxZhetebUvUzO1Xq>!Z0>{ ->Oi%zNQP+7ry@rnqEDA4lZbWwFmWfQN6#UdLifJh1EOm`_6TB_@Klab?-3gHvZzBQGe9<&>{OC?jZ!d -uMVHTgQ6`e>9-s7w%i=0E#l5V%*U|y6py#ZY4D}!{xM&0eXaO%c>9{ZJifjf<%#R-mh=Dj*H?<MzOw# -rtgk5Zp<DFv<oFnTS<DAuhw1Y$H_AK&elgmIxoE`pTaYIFy&}h-^o`BV?pYqlx3HHjDUR{n7}MCdTr! -QoSM$h*M_S?YTlO#;h2FPAmnSD{H^0-AxS!GH6x#c-FXqu6y_)v_D$-$yId}5?9p`?!&eE{nF>3ftO@ ->PwiDwEOV{Zz{iX=1shV;r+^nW+?;W_#|o6dYahi>9$X)K27Idwz8{Qj!ZQrdf=k9JIDf$UU)HDk(4< -nd;ZhEbY=fAG7f`Bee~AgP_|F!E=1GY@2-k{xm5e9Op(a~b@0yuWa?Geza{AYzZ9eNT;vbF<0guST_J -4{ZCp)>0Ekx}<LBn-jx2bM$s+Q@ephn;pxNq0>MoE{e6^gBU$#`PO`wh36?m%s}La-L2Wk8!G`<A2_4 -HN`(JE$C<%dIqEBsbR1nt#|fRneZiB>^uLkvJotCv*Dyh!;N$Z<-CslRi$mDvUl01gKaq5(4)~o7{?K ->d6jSrFq*KEmZ#(WXsqA(d8!v3jX<nN{`dT7Q>?_U(_pw_Sg|-)Z59|oM)c+3Z3+cRpCss1g6U0Z_FJ -*y_xm5lY^m{73Be}FaodtGnV4j_d<k_){cs#AuZL}8yQx5(E*NmaBuTB^@<IIxdGa7zguvK0u{Jd~Rr -)hEy><ps$dUf)<D;l44fyL{eq53kD+;+pBITH7~I?Wh6L4&LqL4yI((_ELU9X82Y23tk=T>^7x9z8ET -qO~9%2F{;8ARUa})#5BE8s3jC$8kS!1Bc0Embp#tczW0cgr~otT``YytYed)zf*Nyv`-TlgyZ$hvvQ1 -g9<P_$yfT&B!t(o&P(OfB`(p5kHrTgD)Hhxx)-~jH<Nx$Hjvo#m{%@V5bwz!$W;Z4aI#?~C{c2dpIzY -oPxsTTq#8L)cBi8n2DhqRl_{vruJ5%O(2%U~3=5wSn=*++Z7wc!b;8z{zgl#xqLwfn#?&TrYVai}W)4 -wy1V;be}l13di${*r)6uDow;~Yw?skd@yO{K07KB3u(Z2xn#zHrag70W80CEi<sy)T45*}Bhd)8Dj~T -B3)GXknI87F3T}++Lj)LyKI_jS5?YbZaRc^a9CB`XKyFNRQr5yc_a=2KA|Z{qj-jf2Yw`{5N!EM!fSw -T1(H;v*7$o37daB&LGvXMHc=aG+#N6M07bJ+<pN5m1YK89e&0Gto~0;4;TAzmdx?TE>qXQ=NR$M5s#$ -kVTs>A7wywyLH=E;%bLn67gh;-bLjmVaLQ;e1rJ=9MLG~YJC0{mW}=CCrf}Qz#`38Q*gL|H>stD3pwD -&Oe_yR1QKmSLC{tm7lI!@2RM!&&9}ZRtyqPYuh((JtS;sSaY}zEL4tL~^LJ?!#Q7YA~u&~NM%Pen|e9 -;2jfv%FLFW`1zvi+VNaqtzhFIYhTFU6e#eSb5K<y`{1&^Xhg8WUTH_HKz`3vrkKLxyr@EVx4NOB?YX# -Kv<hlj?vo=GaKzXy2ofXqQjozNHR5cBW%csvCq2nVfzP_Q+Lo+5(g_6yIj&@rmP-?~%CwTJi$ON*_~w -OY3bMNAm~xEu}6%EJw7df$EOc^YFVwIZ2e2-e!l~xQbQfoAoo4RkDr01C5I)U;DJS)<h|>dFX_e*KQ` -+kg>W>$=!;(bd0zAa&?VEAManm50;*nm{@M|>EInr2hFuX;=8a5iL~#4OeGCo<GF+D@iy<eX>4oec`a -|Foq1pr#_c5L1?vD#L)Ms9nQP{8J0`S&mnRi@cIxH*azvc@x#TGeN~OlWWL-{{ii<qL-^=Fx>3Eu{3( -Rt3pV>&$RHUCj*t}aQO;tdnG}9LBqkMj%k-Mgv*9)JUO|rSUB&40DQ7!M}N>=#NxZR4ej)It#1Nyxse -A6!>UOhOQ`TQHy!U5Wwss22iH)P<RkZ2e4Z;j=L`F){{+a)iyv#pHQvzPlG-sBr`=zH_AslMR4w>l&6 -<b2?_4QV6`5bt%_nNRS?mnX=9E`Ba$*5xn9xF2Sm#J0jV!BnCK{M4Vn$!x3ND&!l(2QyOMiuAv~_$-h -4A>uP%rv`Xi(e{wGR*_6lcs82+Gr3=4{8@oZ4WFT^r5w|>^WTzak6ViS4fvN{8-U*qaM3tFZ?cU0@tC -Hmz7nGO&uIQNEM)=6B-1~q{>XlPbY|SYK7ezeEc#aI^HUvXAogD@um4PtPMJifM(U60obXLDoeTOVkq -(f@`%^6Zl2q!?4=69{^q&c@bL_zv1Rsab7tJ%jgYml`Kjt1iqwfHGYdg5_d`u3fThpbUp_l0$$&kR_8 -oE@(=Cx)s-(mQSUBTd!|FpR{%>#U-Lx)NJ+9G_)NR|x%Ptj;!S%=~qqW{^~iRaZgE3234k<a|F!oP_J -2EIe<;qWe;K}(*&XGK{%xDVXKbADa^>5LcW_}-g%pCkRGbUBjB9M~mywCne;=qH{H&7l4}M8DkJ?@h@ -uGgX{<Q@?<}EBpe@-bL^^OQ$(spayc!a4dlUo2Lfm8^7nPfy<5Gd1_#;@p}&S+xVTM2Id&QzpMsk8NZ -9E|HkjZ;=o1poBKY8`02sUj?1}+bvc)wU8x0q^dir7z-t<54d8wpYoeCsxUnAa{PWht`%~H0Ewm<9ag -37`FA11Ya9k$n)te*n$4NkaYx`r1eb9lh$E`gpbZg*;0EZH|`J`|5!OjKgV1Krm(o|_$u2e5%p(g_(5 -8l5`GB3`5zkgO>RPLvDuy+QJTz?imTr5v7r*GX^VM}?M$A-0euhB%FKT;mi*4VH!q_=rrb(tuHH-4Mr -y@%76+W%Ig-Y?Mc266x4HO|OY+V9b)M!iqBL!Kj@(&*Fu0g)c>`}IDR>wWrfdY8=ac2m4x(fg#A(^q; -{$hW8Uc(-P~Pd}tQ&+20pI!;BOO~e!bBIA_u1;*);h;dpRWt=Y7`*c^xIAuhPlPzML-aaq#e0`E}iZ( -`J{*Ji28l2_vp5c1&Tg)T#e(Ct19Lw<qjqm@vb=-%oXQ=K-f7MWa^DO)_b^2hP{N@be12iVP9+Su8{e -<0jh0xp4$ewXQ?qlp2>_1ba##Y`h$>hPg3hwU4@B3KTecxu>_Z|5pc;9#bv?%v|Ed0Lj=@S>e?=$wEf -q1E-n8r7gvA}HI{t)S3I~K%N5Olq8`k#Fko<36UF>rqPxrLc^zGD`4xNe#Q&zd>*VSO13Vo=}xcdZ5c -h4c4q<=KhQ;Vm2=2K-BrF7+5V^`OVa8Eh+bBG`RoKGVo$+w7mJ0n$fzuM+m3z+SA+<UC(3EQy<Fi$4$ -Rl+uCM9!nQ-zEJ;cGs#XdtnN|nm#Ea1ag0QICbMH7l1vT^Twr!(5v}J~*;eGiyw0Y4dtb^PIV|CvtE& -)LW0~}909cn(fpZni4>~d`(<mo}%GrKK%PTq&ZX38C_I1>M$6$=^cRo>m14j4`?w4xN|HW~CxWltqJ? -VVMFa|%jsAn)Huno}TBXHc5MO-i7IMqCkjsHRQx4^3hX2pyXLD~Md?+d@(xqQrGyofid{Y~s&IW%VI4 -}24L=rN6e%dSlo`sO?uuL^;k=_5V7?pvf|#qfA%st>k4CK@|a4BHJmQ^%N6w@>DHSI2&CSI=~?P`qWE -_v3w9%gN(GI;r&SKdk#(q(tI>|1peStEmn5a?C?k2;E)8V`Dy?qkKp*H*C5-qCJ>&(7q3-E{qdw;ZgV -N7J+}y?Xk~kc}9OgLyU0=_SsMy9KTf8eMXzKA1_irUPeE3Kb5b)FZ`L`F!YEpxkvKyJ)8D%#Cm{?qVM -BRn~s(G%<W5j^sENF?$=WU7R!V<qS4A5`~31~p+zt60{7G!kMAXU2g~3O&ChlU_tIL$oB>8P?y3VchY -noCD$XeJ&d%*^_Pc2=xi4o)8m%Ee)%#EgZBlgFJVWDzv&@pf>VC(V<Jbz~ul{W$k1KYkrmz6c4nD-$o -HE^eSjq5`-r^Hj)hQgy{x<@PF&FLm8I`poLEJm6y@Yhp6xP`@lckUxTkfo$QBhVbC0Q9ObR@9C$51aD -eGc*BVbg~;z~-k%X65#aSxTv6Mn(R`ENQf%v9F$<FVDI0vl(&3E2$q3QhJ=3?xS~(H`LDxlG<9KyJyF -VvhD|ln}vC3ZsyS%<oG>UQ>L{-AIO%v3bPeahWQQkvC=r!DWhy@pbux0-=ej`-$~M@x%A#O=cQKohRy -9}Nj3Dn{6pd6RU)NXfm2vAjV*&sp!{W)f<9!OyS5)Tfjh^v{5zD<MTd!=pw%?e_jtTm;)}I$Z2!?2jp -cV!Tio#7o(|vbL_R+rJn1OFKH4Cq^EuQ;_4N$1B<Ln?#Lgr7R7=A4+jZ<<0qHbJu49e@wEYdfCTw~vd -XjH?w3bzibDRCNPdpXN<Kotp)Xu1=O@6%9OyhxaK>NGR%!4^#mNI%xim4YEdd?m0R(!iCU;8s|yDOFz -F5fZr*fz>Dq9k~&z{p<P*jJLcuNA)NmJaha6Sd7ublOO18l;2~^k=z8I)=0x6GYn3bf_OT)ku4-dFdG -|$9S7OT}jCQ25Jv@#bmrn+-XgI=N}FC{e%+hbX!=`2(2*-)mJ5{W6PzOk&|4%lxUw)yi4YPw-tMKV;o -DudOJ<)?P21_I3xJ*cEqJ(&cpP6J-v7AW_2U!ZLJua;dk3w+hxQ!wf2@s)@I<PFe#;ZhrF?MPI_=1!7 -lKlxvE%uRL%!Vx>MZO*$iJNj=vWTSAK#$Adll^$PcoU%CB?1)Mhu&p|wT*alD)}0$CII3dBF0CzV*vL -l7h7JD&ylMf`h$UvS^LC~>a_m3S_5-1JwiC0~ZU5$#>n_aW-LQ?fNT=&|`q^mx>+h<Ma;Ec~M^UX{M@ -d6nc%%0EIp{dbtNyTyG<E77KzV<WP<MA*W`Qdx+xff&&G+ICX;H5apj9$D=(cQ0&q#It7>60JAMDMa& -(X5977nm^kkDehL#F^6Qr%y^bpMf~D^;7FJR4{47JiNlNgxj5CA7|WJ@i;d<VRT9e{h$H^%k?LyUvl7 -QL+Sg`pGmlmEyDVLWbJxbE+`YEUO7p$kBqdlM-EE%XvQYXQ#?!aQgruK>^fFJ6w5}<v&}~kzJ{4;!b0 -v2bnxsUlE14A*Sw(zs6YDB;bPM}Hocl>J%yY@BlgDVm`q)CeBpNp918-?9ut#w`JhJSrZ+`Qe;doO)n -R9^quElcyKVY1-(ENDkFItP2Xp%vE=6;gPN{BWNDXkWmgJEOe?QAZgIljDlVL=A*DB~U4Z}5KbOwbp+ -=`w|5@Z=fvhdhBXP=!xzc?;wAO}VQn55EVJF`rT*=2J>9-eXP;=yBox{)*PJ20WS}_HTAG{I=hS0j2= -*+amJY^!aG>(i-=?NqHe}ZUL@%$UNI5=84ZOkLLRoQyDPhEz&IyyuH(HU(N3>qqnW<rQBvwev0>bDtr -Apb&J8ToBwp-vE=brBCw_=+W+eJ4Y1cI{&kASu!!Y08{l8K13XN!LeW~*A$+A$o$vAWAMdP4*ZJ7WAR -mLT1;z|=8pd=Xt>=TpyV7aQdt`HOw=CAu32`TuOT4b|BC+RkTfU+sHvdaIZhqi3?(=M}-2~g#G(nGsL -ym$E7pZ|SQQwTZgkOiv`wh}9IWMI5myGkm=}r+BIhgK`=Y`%hnSHP!qvcQ^vy+%-nEKVgOd|tCmz|93 -lZA~^P-jIP=yo9s7n0ucjN>9!fcdvFhV6G#8IWh@)jKM_N`3oZ#7~B#OwSYMDb1JF*Ny^TWmv~S4q`t -i^rAlh_lfV)dY(&Z{gelKnoN029|wJ_4o<RGfB0u{{%~r!6m~Y{=J*_v_iI-}&Pv<lBzdK5&bzIvNG{ -m`tk+p2BQ9#Q!(RE@GuYNfh2_C!&P8b<`#34>jg+=6OUN|P@8DMt{4nU)rmS~c5qsPzSvM^wSqt_L+D -pP`ttYu`llk|ej53m8AcHlKoHjx_8R^-{xLa{B6F=i$2<#cE*Uv_u{|NTXEQa%dRZKiDIj22u+|{019 -_1b_#I6Fe@X?SMb|XZ`lS&-0;&;FNX;8oV`T?O|5ns1eYFg)9`oz#@Z;ZH4Yqv?ua8HeWmUN9u%&{Ak -j73k<`gZH`FzhVd)bABKZD0raI?1hOk`;j&hUbmCjOiX*)jzCcJ4wGyu96%J++z*>64B)YYTIF&r#NT -$51P}!?e|Z+wm*T=_(@*S*n^*?CAHc2epjly8?t8%wX5EK58AlbMs1C!?+mF9I+cGe?0^!Sr$`Qmesv -hwYdVjEEzp3H=>7Pd)^a7K-Mdw)!@cU>pGbAU`x(!xM9CX3@*btN1buWn@eN>_floMyPaLAO{JfO%El -ndHF`IY<$EYVBLC-mVxK!{5oO5Lo&zGfCtDE>k6Y+<mwxE0i-`NkTEiqX08;mtC&LNgl{njto&&^{z? -y)D*W~E)naO3yQA6^@<Na}BkB+H0_zZ-Thy|&obqsI@+4VgQ=?}!**xX(iTFzE2hv4+oUm9Kvgj3uUo -#1e~kPjym{HDbg+!8$~|z3Cx!J+0R@8-87SUBCxLUB+2X;61SivB&w@$nMaXaqZL|U?m8DLxsl;;O8K -0efj-%wiRb7W1j@;LtWfv!NitbD9+bJ`=*I_ltM36xLm2nOmkvQ8n$gmX%4U8@yu=Blvm*6l2V%z!;( -_AZ?VTS9*Y`sZeP$YEybzFfpkJ=nsdq+<B1rH#<`5?YF06%wc#G7-iV7gK>vXoGO&_)yhOVJoP!Y0S< -ijA*k;qdbdU8SwclJ{yN2dTK93i*k?31pTY&QuV7Kx020P`SssYkxI_J>%eNe_c<7XI|*t5;v-)Vw>q -Ylt@;8L~T|FTZksT0pnqTMs-_Qbolgp8B(onWk4;~YA|HX>*{GC!dL*!tuDW2Fk*Wx_TlnjOtBuub@L -7WO<cJ{qSb&9!uzM@GCb*pJ+PSZldsmg<A;&Nq)~EhZY%s$}Lvypnc_@2Pdb#DR^`+$6VsvU^qBss0J -REPB0;SjRn0F`~}JhjlwQS^U4|u!s?iyM7*5;;`^7!|z3h_1LU5xpO2vKC4ZAEJu&eS~4eL8`f+GkBM -UTm<H9t(rIX)+2SzET(%CjaYi^zW<fSJ)#2<k)K&+y9si$Ys&Mi1hV|vHS<HvnZ8bdJCtHSiZ6qIiRE -eLV1|HGRqZ;*Z2a`tb5NGP#1_A#ES_H3(X8&r$Y=k_XOLNAxQ^gr@F7OYRAJ<wMc9Pt(PJ(?<;H%h|N -Deh2rur0a`xBPFLQk*K8vN23ao&ydb<&3dOlq@Z9KqA^?I-@}qO{e(QzV@U_Io6=*Z-6H5gE%9XRz?6 -dnT4`O?^n+l1J?<iSVg=j^v(qKNe?}SgY04zP+-U$BPbaqf>9=_A?FrX9LmO*db4BBa>O)e_0Sq#q5l -1S2MK>IMh_f?o#+fQoH^FY#-pqB?mD{C&Ysx{(gFDIJW(95hrfKSe*MTd@RcOSg7@rjm4*WdfWkZPtw -n5W3fFr7KIoK@Kx~C3Gr2R|MYKPU`&?Lc-*6p$)y(<lUMY%f=B=OUl<cLWK4{9Mz-(zC}Z<pl(9KYyf -w`K>cW28UYvJ~QkhqN9OSY4`-O~Hhjpj$Si^liv~INqxg!<(6X{bW3hS&Oec)ugxT`t71pPL7Pu{=^w -K7(iZwD49@kS~e@=P$6k_j<jw(^*p+-Ak(MO^G2-Cuom49n~Jfja6M({>;K+TxB5Ii)vyY{?cI@rvw= -;m4ZdHIFUnZ;(<)j&9i4I-SZ)pwCmZ7u7thj!t%#Vv?peKSE_pr%xO3o=J{CET=&pFWu%X`A};CJ)YB -J=wwp+P(Qx^GR4-6m>j?mKCRfj12pb`rFJ1EQ3*qRazuS{FO7?*R7vmk)4DiJeaxcz5tC)lbRHKe4|2 -=>wYj5PXHk2o+;l0uxoJ$ROjCmKdggzIHl=vm<+LCsG^IVcVN+|m@bByF`kp#^DWyA2dbmdK5W5h(f7 -WM)?egS)ve9&^D_=M6qoc=<6By0tbDB4x>l&~z3GaUzkL%-Ca=jYKY@{1j8oFdOebg`8nlt#hM1~hJf -c|t$_$iP~*eP^`=_LDP@UwLn(QhD*<w=UISH!qa^KPg7chK`pdS1O#?Z7>Q6f0s-lZ?L`v2{ov>3ilF -Y*<9xo4?R++)0>mKhwlK)jL@Sa2HGx>$TB*GqX=0Yoj%8LhKOYvCykw-{m!NzcI+Iefy4q#;IPk7xBL -M{r@o$cm5Tu%>-L>)hyOwPDpFUyK3SCFQQ(O4~WkMAUl||sO~rs&->F!^xSuPq07Gz7PmTpbxh-N(aR -(YzHHrZ*ni<%<Jsx#R*sKCbJO&Dwv6M8?iRRR)tB_N?qh6`SbH|_n(2r^Z{zF1OzDe;gikl(=)rD-)^ -Fuu^nHB&+PsK&@g(jRLdtH(`303tb>!#h_P=KC$8GD?8sa-(`=>RSItCygm$3lK(pJiafp~XoJn5wVc -yYgHN)$0Ld2F<my1b}_%Zsxp9puq_X^tZe{QaY*)9>S>y@P%0;L8#}3p+Z-ZMp-oLeH-=#$X`D-OBfZ -CSkXBXoKuA?$AexemF<P*<K`l=IhvH|4DWCT%va5NT%LJG^co<8)7>6on}L9hqjOfv|Uo+pWX@HZ-(` -Mk~4gx|9R;D;gJ4ErVH(VN|gR9)c=KwXDa-H=E81=)eWTlsFk0m`t-Ba7+}k=T>M|bF$B8`A>*OXVqM -z2Cx!2rb0O{F{$0g|E^ZT^>Xm4&i@j9PZ;<GRHO^zVoYwMQo27P`i8s$B+Gw(s&o$UrC|OA!H8H(;g_ -PclHFsya@VVx9Rw3mNeX5tg!mQhHh_d}F7mGABrURdf^+;>PbK6T=OJFwmPiQP~!3!l5H%@1{=Y#f@r ->qlY8pxN>Rk81vKz9$3WeN;gM%HB+DLmbZBf+}^+#B$`Q(yzfY=*4z@#o4aY0f1I+Y0~QoG7x&B~-@^ -M}(}Bs{4R|ANHKpDus+;nncD(bIwyH${52@WQ<c0_8#C%pi!Wkc+m#){u1t6CE5g<RX(Kl@63dpAbAX -Yj*<u;@6i#i*Oli8Kdrvw6*A`)$19W$jd-0lTPhrT`+vqKYLERN@(FGeCwU&!xXv7)K6+m5#@Qq0Ph? -!gpzY-;+83YGZ7)}U8g8Rnyn>&#Y);*Asb@Pq&m{R}2km#Wh)$>XiddF3Pi*v`$8dU$>f1jep2G*;wL -iSP8}E$qJVE<OGnI3M%Go5vc-(Wk+g)>-+S?EphsQLg`9RMb);6^xjzl*-dvQeg)K~5g+L|H;!DN{AM -w(2C#|Qc})J8N`?<4%tfI*3JT-U)bi3K+5u?@=Tf3<F(TOFcLcFC%5*{9;nI#j=KY@Q<Q>$gwgcK?pI -r|@%DZU<3(jmPoclsfQfoJrvsldkc^8Na)~%(0dE@1`$%f_9$c_c+c0VRzB@O`2QKgNr1K54cajx57O -O$&S8K_=rmu59SE1*ZG)pVebabVfJo3T{4@$Bcu$-dnq($Cp%j*Vr@plivaK0atFu8^kRNsK3w0;<8g -gzCHlK)F10OYqixAjAcx+!y~IW>Qc7=I8tK^8s|twL%Uo%!0OPpvn=u|2%@wO;?zK=_S9LYw-7W(bK7 -2<a?J)WJwhCE8;_LgO{WzDYic@{rw7w9-tINX2gVwx7@cAVISA|(vu8G_IlI%|9n>hYhOx-S;cUIzm{ -@c~UkzK5C=yv9TkIxZG=ZsYg!RL_<_Ylpc*?K-pZ8hb~o~IW0&ue*iQvEoi{$N*vN1=YeM=ML0o43TU -t#{!)JztSr9Qbfoj7L+LFNXfZ23XD%>2fk6)0x84sUn?&()}-@8!*{Erur=OERoWDMCJaI^6Z<Vt{Eb -^r+V>a&1Kbh6=bgf9?3-uvRAM|%*!EW(%*eke>a1_<Cuq3W?A(W9M6r$!SfW2#iL`ucwjc@HJ}sfay= -|Cbs>+s*0N<ai?f@*O|n<%3gGu#w4h{#i0$Nxm3g}CkaQx=j0M$_l7w`ZQ$Ex^h1(@1G*7uR26hBVkL -dM3bxzBparQjgMLf<LX@_s{xsVubQ{|5Qi&zCemnFVeq2r&-fv;Q&;u$ih={lVIs6LXZYYkgT_#&|D8 -vA-r3VHuH?dd0pe<6>29nEvf)A<Lj1!uZ@W%w4@oR8^xVp|-WkGRZ_3<vdA=xtadhd&PLKB2q>7}O7Z -DB5JXE;^4R`sU$1qxT!(?-;`0-k@@Mj62w`r3n0n)azJaC`IRm$4Y%pTGPN!?56!TH2z7uZUc|_Cz1B -obtFICaz=yAm$3DxvPva6@J5)u-QKYC^NrpmKBG?9P~l$0y;Q`C-EzGexR~QCG?pKrHse2RcW{1=7}L -+f_xQZ%yX$<g?|u>YkMndMi%UP}{2`U`Eal&FJquKy*LnB(An!&!hd$=GY2!A+p=S_zABD&J>?A(xPI -lqk5Bu@v6xss~TDvSfM%|}5#TR>cTcqh8*CniD&k3ys_%SMt@yf+wt>fMZ<Ka%uE{w#=G3xsE32vvmS -sJ|5^OPp+_>FV&aeZor;BWi(@^f`=Q+A(@(Pc~KG4Vc4Ys%sn$=0~WzMI#o{q5_l+sxJX?J1IMwW>wO -Nlw*ql8G<2$);M>tn<Zgu|G6k!z#cR8%?Au>uLD;X&m!45btiV)AyCEp7tMK1M%>NG~rLvMs4|y*vEo -AR^j*f+-7-uEX%!@?+>Zt`@<ioFMfsO4!vyL=}9ppE6q>~hh`8zmf@GH7W#?r&Xv?ck_T!_IM%4OtcL -nxrBD0Pnu1#RhDb9Pv@dn?xahUe?}-Oz6Ay--m&4Ol7Zi;tb--Y1Uz$^}l4yYaA&J_JG*wi;p%0P{?A -s^oO*fmQr9M+UzvE2?{^k9=59#B5cyzDW<Km06Jm7^tpl7er_n&F}+ZV)b8%Z=Z*HGJQ;4eyjL7!;t) -#9xEE7Y#Nu`zXvAs;UN7H|7T@Mg*6^e>%Pfb>sc%qaan(tT^FPs7A_!2{o<K2M?Fm|LrNvK-JEIDO#z -=*!&;n5UQCO;H;A-bkjlIHzm_oxs04>RoF#&S7gnCy#DNpD1k3%W-E@Kz%wr1NKRV{t=0*JRax8X~c| -xPuB@Waelc^@UEJftisgoY&PGi7SjBy!5l(tddL{uU;O==HBKqj0-9sa)`a-v8n((`^nQ!l;KUxdL7Y -jHAJEU|+rRe{zW2i>%Kh+9i2s_(9CJi$*r7_2dFJ%ki5D$$w3FUQJO|^+ZE*WrdA{wCq2AfXe^+A-91 -y=T7A9S;sG{G7i~;}nEOv1+Ujr+oaX&Jo<#pqZh1xXqeVnt3xg6Q9VQN<iwaYDwc1;aw&p=3fN<-R%* -!4zxAa@$=0dLG&lfmx{(KnoL_*1?Q+rYYirhKmzajtJ5ey9NtTrqihyNfO3?T&^E#nUv!jLVW7t0Rte -67Q}bp|uSeX-Khp5ewQC76aNk9#gtD*3#^f)cPLWdr7IiW;63FqIZXtbZ4YqY1j#4Zv2{fBjT?gkio; -#y#G8d{4Ic4+)4Wd?zN5luvtcVq4|F%?)!36bo@aZKMP6mvZGpy@gL`vV*FxseLdA1>T?m@ZZCZQi=+ -|SxSI4;)H_?(zhNWyuhYuLX_ZIsaHsOi<HCn#m0mVv(w+PqP~6G?;6>p_(sP8LL4@>4$1{(z4@S2`{K -NRU>S<c@lxX+Y{Gs>KjmgjAESkn-M|@*BWO0no-G34?(_YwpC*N|W%El^xM?AIi2{o`MPObOhPVYBrf -c6+3!wv0vO2>k)e1ZkG#<1OdAO58pc%H{VVx2b(YAu<`tP^Dzd5aa1_h%t_ajvju8u48HY!!DiUne>s -&OPT9^c&@7PZMS3hNSy<dZ#`i($&*%ygxC8b-q0X^E|D0I?><F<6GIhCK++damHlgu@>JwEqr?*%b4r -y*C1~Em!_)^U@f-)Kpj1SeMPqQrj9My0=*BvPfm6B{zw^pp4-zXth4cfdq;0S!tLJj-1M8|z0QqOQk! -Wn3;<gZ@e=rd=&qW!I~eQH=AEkq<2Wuw+o`+^;d9=H*t$P{Aa4}3c`u&jo>WqMcL3L$rH&kq$GO(I$B -IafTpusuN20v+kn-}WyiQu{ZmQcTFKsRB0KLCP`+JYvRgW|G@VT7UYa@C!Qay<I9vBgG;$CrwQI0qtI -3I7a2-zU(O`=~6%gc_ZeJak>T*7^FV>}Lp)fEjo)(k2eTSM0+u=qMZ5<U>n1A;Pks@HNv*rDNf{1Kri -*z_~HUwt%DCO<zC#8Qc7D;w?HJN;GNzbqoIcfYV3>5IIJbjcj=q;FWn!R{=1R2>BdP7jamM)Qw;KRqJ -&+UgkAiSz#<nqxo49h1~mKdhLAjhas164H@V!4KjDeRm)>aLq!FoA4U{y=pX*^4~$_?4UIJ-k?6x{H& -(AxN%J5ZR`^L_P#U8+5SIX(OSOsf!1>7yb+h!uv1L-0>{8SUkx~u)Igb8^^LI6MUV%!9pQ2Sw|&IEr| -NcCp?Vs0h!XQspP9Kie})}twuD$d7GE@+k}W14xA`qw@f;6g1iGgPKTeeWL-?vE)3fB@vrTxGM$giM& -mP7zJ3X@ppEcsyOnNpm`0PPEn?=uN1)trAXP3~kOM=hp@GPI6<p-bLjb~TVvnzwo?!vQc=-D;FXLsP) -VtTeX`0PLMjC3LQ^}%Pi;u+~p?xn$J6(hR8?<BZpoL))@y=eTwUyS@qP-YxGiwi!x2G1<?%o2Q7h-a7 -6v&)0ea`9{dJzEfbc16_oOw<cEPLZ0kKUE(C|G?eV$qnvS?76_8ok?Y^;&$TVj_^V_oxFdstaFgc`6q -A$Aom_(p2PIJiPlloOOj{6_`O*1{GEPdeN?>^1ABp%s-2|2qaU;fFnoK}!1-alob|Du{YII0#ChHvFD -Ks9J6^sCYgUxG*y4EwWtJBQj#3#_w-g6P@cs4Tz!1LwvpDe4@I?RYJ9OJJ$atkOY(L3#off9nTYyJI- -;n#UFESJ9lJp@yvENL50$3z?pDCHjgr4}j@O!t~n2xh^g}(UZ7jYiO_MgGow;``9cCYSx<UFgyc;P#7 -T#0jj_0L)hd~ZtPiBAeYzq%a6N1!%lCAsZ}OeXAjfxB#TUOL9_q@DLsKJZpx_`kDG-O^5Sh`E??AM(t -mwpP;VI~{D=G05VktAP#8MsB3O`42wy+o@yM_FsW^uDYU^#?`Zm=-__*an7f|bxg=O(A(Qz*v5U-RxM -^81M~7Yl?$22z)j1ca)f<jiq~jomhdxko;xS}NJ~O+9uC0{QkkLqMNN0=@|shZ2g^Brqr7}i2i0xZs8 -uay`&ZF;mgr~tOO?oTQk!!*?hrRH&xbE)EobNAZu{Df@H?GX$JdEP)$Nxe@E|PTQ3J10{ZZeoxxl;C7 -kJk=`8)86#H?u^%Ye`wOQhwa4k?lQGTkWR*>`T#^KA^tSJL#KTt>OEY5C}6X_huYmSxLoNoQr7)c|6f -Mbj@h9@RQEP_6SW6Y(z0A=opx?!g%m>m>crhjW>#2e?gTr-`XJXUdy`wMKdGLClN$!r#T~@1DmyDo4@ -(OZ4qpFEGJSt{d1<-y@z7Q1+i0qIa8s^C9m)jo&{IzfaKbD$4U2z8_Nq3rOxnThobl_w9`FtR_D64$g -dJ&`<b+HOk@bIXndW6*VwO-|qGQIobmrxPJL)qn?K5Xx?Aw-GN!mvvobk)L!<ZF@dS{_K@Huk-7-!tD -WL5cs4%|gde-*JFy=93^6J63=uKa1^(63$&=x0tqLg*XKlFqbp5A@>yAGB_j%!q|MXBeZ~L5fEc?864 -8#*346cb~7g!U^F0dw+U0_WtyTF=Q_CH(`%f7&xSazW`@mrF=BITaDJ`u8@ewO-{ah3{wVhhOw6{NSo -j{V^waSkN`-(s=sv5GkLUcCGHP;_jB(ZPwh4mei?-Y@vIjX}Rk88K{0lQ_?1+?KST#(uS?alDAFwD*z -R<-?taTgTIYUWT&~ypPia_JJV}hvAe)*hlK|$~gX~zzlz<6)}chqBi{QgK)oo#7*whF)NaiMSqQbVfV -VUZNi5r)jKm;=rHg<{&w=sXK-h;ljLda8I5vE^MC(N$iI=YdWb&1*_0L3=Rs$d7z<m3V*~MRcH_Jj&m -HvKz_5(Q-;6%Oo(dQlIJ@{7m46@nL4cFK4p^IM9BZ>nE;<0eQ`qid&x2glO*F+fY-@pQi8G;9v)FzY@ -ea(ld#Rjv#>)}7sgN;%mr7;qcg@1yYa3~zazfABqVbc->{l@-;FoX<wfkPG7xnc_QXkqlcs>MsGlagJ -j!ChB$?#jI>2tV3@RQBa@P2WglgYwkUyskP5PpVtFZ%f!c?<U!b5mLJCg4aVT^Ddlrq?Rw^|m6-`+fs -IFA^8uz+Vbt6}5}<o(?PTVo_ctl}9qS?-jo>w}N;?4il^E!hLZDtK%^jt`_mi9F>gww>WMU|1rnmAHd -htj%*LhVjfHA{}s%m$1i`24Q7iNz4%S<LUAtmUCxr=T@GTQRO|OV`?Mf-#dx_A>tK@9F<G1n5szrxSH -cN<%NbN2VhcRGgcY{UVs)2Eux(?NZ5HYie4&#W$9ikCi<l$8g=@Q<aXh-VYeZZz_boimW?j2D&v8CSZ -97flpG9eLzoTOm?-sW8FHaf=sDs-)(tOETLVBsG8FFNHENn4swV-bfmrE@pD>T@XHTLZzIegdQ;CaB6 -`?MDLIxQl4!=`61^(lkW!RHA$)J_`HQ!>9#dwROWu~BlfNd~mi9C%GOy><(Y{lPePtcuq60n%B~Pe0_ -|Sxx1pId9uZ#>n48de<J}3wz^O0Q7>t(vhQD%ZzEN?}c>c8=~LtBx=tz=Hu@reowR6JZ}lVC$l7(o6G -2b_53A)68i0($^yXE#rf~@SQc1HeMGEww97AZ93$TLENVO2X54T78nM!;e4Nj}epJZX;6K?RaqU+SZw -IzymyWp{`5t41cj%{UOdIc~X)K=lDf+kLoL1S%`^S8Ts7|9jV;|v6wz2#-9QReni!lki1o#aYF;#G8# -pKaNe2#Ws=fn9nd_v5^7U->Lu@-Z(L@Yj4vL|DmI77<o?h*GLVR$!D{ABp~b`0k~pQcOMd_Jtc2(n#@ -)x5UEy3-=C`199FDesZqWBTNweyRHY(P!S(S`fdXijC&KO|l#KQ$ON3$hO*fxIbVb=7^cn`-vxKSG)F -@q|rqVk5Y%d&b;=aElYt1+<gs?Pa4YKCi;<1jt@8QRe=x3fMZLv0*wrMfmWas=w;B#BD4IMKjF?2_nN -^yPd_*3G4Zk^@I7$9zVDE*(b<0}NMlN$OmeTU{8eG!7KsCA@Q?wT@5Y#ShvdioFjFGNT>fHXzLeG&$I -n%i9Pm6ptu@48f*tqZDq6F|TQDbn5mMjPJ%-<o;iojYUVYad*tE*~q5C2>*hXrP5gRO>+GE6!I!pWIn -kBQE&n{$vp;_i_qv;$UI^e&81zhwT_;NWMvsf9YC%4g@&3prgB~Nv)u=~{Fh0Qh2+ft#IlFn*@j;>^k -3}4E8vO~luLp$I{W1@EWe-+m;_xEk(56WGIuo+n{S!;iQ7(kR?va-s#^{&xGoIg-IUETAVhh|OP<_vT -d(ms}pd&j-0tgeiBq@Q@~UWwHuNGZK<#EBSNNZTXDdYl2Z(7bQB;BrcTKuRoY>&_o(w!z*__P8WdFVY -Ru?-3=@d0BvY+||SUzP2Ql6+A(5Fz)`~(>;&YGVJD$AYW=%L8+8z<@eQ6TCICuPC+f~afmLc8}=V&$= -W=8$yD5FdX@)R;a8|E)T!-KIuI-DU=pjty>3C0+b%b#{f7_3ZyUC>GzVfiCiOE_sl=aYZNjgyT2>3up -R|2L1wDwp)15t1I}MnrtWNuLOox-oDy7e@NgG9Zvn3B~1ySCcdU*rMB#XV2-wa<t9v_Y9I&z6++ubMC -Lbo(C8D(w2T`xVWp)pwu+x`u*$4oSLIf$o7Cd=^m<wDm<RyedlE`)r$d_-$O+7e)myysujA&ut42IIa -s<~c|*ww%Z+c{%+2f_e5H6~0%EQy^QW0dK-KE9Cw2#(T;)FkAH*_hrA}c1p5GoS6umADqSQ9~I|2X$d -%!qII7Y?-{)!G6q?ib8uJCZg#-Ta{UWQmP~;!m8lGI$ttB(>xrqf&S^Y%AwKzBR@Wqp7_I(=tllU)v| -Jtob|o7xH#45frLx@krm_(u31z0zJUL100(60%x|8Op|5w*{3}34HRN8A`L)0d*W5BVp=yPZv=2!Lcf -;WN7(w);hLUXBx=Fw|w)h)}Vgpm>A(Qe6R^;7wfKN9sazD4uU5}b!gnBQ|HOEbzsey^V2O6j2UARYM9 -&@AFh^nNM*-$?BqqH;%^)@`nnA|@-wJU$9<9k4PV=;&XvSlovfMVvLos{vs06EE^Ceg48{P0{R0@+i+ -0*^PZSJulARz+2(lY4BH#>W}2H&;c+%Rxh5_41Nn4e-ZJtow2O))JlP~`2>yYvGwcwhF8vS#(TtwMJ! -RwsUkfVoK<3lSurdLekf+*2M&_S5ZfqKN-G<rdMC^Y17~2Ru)*MQfoYHRe_zcRA{v<_v(+EZNIy=kT_ -OqnXxCY-G8$b6t-$ty?TQ*e|EcfIXP%30_kexMpc}vUcuvqv{y(5uKG6%la|W&UPoR~`<HCl}sy@p^v -@#Q|=CCyet%fK+Xl2sxfuhlD=L3!kL9?`|G%Jcttp(i-nyvg7X!aD*B1o^#-!~tp^fyu7XP*nwZnC|c -+c@d;@+<tznB(~agS(LEH!B{ttL)PZ>hBrq-wP6AbEG&&Rst(xhR3hiy-2?}f}W6lXAnI@Y56i_GRfM -j5Dmw9qPMC1gV{4Yz;82Rz&?7K>mknFGRwt&{0?YIX{6%ZX2gcuDci~nx)10vKsdcq5R1`fCB46P1Jz -Y6r<V;8&Cx!@NbHBK9=Y~)T7&L4>GWRq+~=Ps|4-t=-!>rP7_JzY7#H4<zarzpZ{#ugE*uyB(U+sghr -J=Bo+}3~7#E($hwXkj7$5d>J$-&i8E?Gu`SD>dG%t_urunEyT%J3wV^qJB#&Y4?ovhbq9|-D*&*=628 -vZjv?t1zvqJ>?T|6C6~Fq%O$IZg83@T`n&l^=E$y3Z>~+!u*-T+$~hZyt+ZgqW%AEIS|ZuZ?)C>j%)+ -H0O)J|2MH*lr=<UAa<wIG@5_Mu+{=BYWTNzz|X^YPjxusMSA!H;90gFw=^?V?AhGrIgaI4#&W!uy2jT -QKky{U0`-gYnsJ{m?&L|%oPoJHeFSk`5##gZCF&YrNUTj{Tldb&tj(gmdz8k*W~Dut<oCT!5wmtXjmK -(A1K)l}p777HO(oe7d-Y%C9F5Avd_N-QdwBd)nwNrRDvx)ufEn?EMNHC*#<UjLGN6B;X(`cTpFEm>LK -3kYIp&&$+7Zw31;_JkJ}>M5LZ7`$&tfB<74Y+H768_~|7GS;Q@Otj@Gknmb9j4o-g>y-z`xMrpaJ(Xv -Ofz+kAInCx(9}VV`El*@G~f-vaqK8@v6_IusmAhzDD>j*;pNXwHglw=k=<CuniTz|BGn$HTr)C{O-r+ -1dl7856mJ*wK!Y(4yAD`BG1Z$V(#9|<Hbm2h8{_C-E+<E3-gl5I0(m;81J)F89#GIJB+pP@gIdRZY0h -<=_$$g%FMU@yw-Uq{EJqn-&0Jy53zOj(wzCH60750$j-xx1i6#n!y)FyFC?+{J1Jc|<R7BXR>Z=S8-2 -PC`*frZ>!f{x$BLcqNJcDDoWDK$lGaj5b>FMoX1~krm807?A$I!EI(58k=+USPxJaS<(kX!r;uN}OSK -)B-X#Tx6meC-m)?f`l--MpF`F)yC$=p`kXO>cHiuKq9)pDw(C`qlm68Z!`gQk6~SY76*Pr3)^e%VdpH -_lkIrDFaYcI2%(#@s?F#rX-=PZezAO%_LN0+$hfqT^(ty$zOW_hga|06$oN;=e6=Cr<TQSbI6_TcO8K -pUN`Y<K$%cEZ|<p!k#Y2?=CJQ@8Q3*5-7igXm6#tX=Zi6?Su|v29_`BhFPRT;>@puc+MTVZYpr8(w!F -%@_AQR^;+=*$CWL1=p3-?1}$*@iTgZ90?l`l86DE}TG(Hrf6$$RyfEEabdcKvb;=>nt~|(fm}k)E-Tx -4NWWa9iSm&ttJAA>u%#!zMZT!9#X9`dLBRE%Ke>HSayu(<b++w}lFX`o0jcJ^gkby$$y~ucfPOGd?fP -d6gXvFfsxh3cbIt}uB?Y45nOQ>KX#zcUABaYM-NyrT+iB3CS%5A=b<OP(Sa$eWV0$Qbw*{nDxO3=g^{ -l8+5bR0H+YCQYog}p2qPU3OJ<i)xIo{u|@-GlgFkOST&`tY;pSiwip5Ac%zAlju9-A=wN@Se^5&Ltzi -jpkPs_l4ZU`)8uLCG+p6%Qspwl3_1iBu(Szo<;Skd|nqxF`Pz4lBo`Jp-4*Lv2meSL)QfkJ#fEqHa(5 -LizFLAJ1&wkcw363i}-he-ln&xO|Ce^K^A9e9r`^$j&8%fcQN&a=IY+{A`Z&lmqZ+ty|Tbn+AGW4PwP -v1c`xdHOyG9lPxCnf3<Ss=I5QVMTVg!3^}66YWS&Or@Rw2!Y~i=E0?v!!TLX-|PHD}el6aQUCYx$7FT -fi%y+?C8R`3N!mdek*d7c&1c^;dj=5roYy3{wMWILTwnx%#nEaDiw$&7Sq;`eE!Tcht%+=6PVw|WZpm -T3z>cPHtSHB-=*s(j#?n5B#bz%tp&Ts)syisyN@lH4Kw$1Xshwz5q9e++*g4W}~NoV(>kfk%jW7re&_ -%A3_8JQe(O{LGPfDtM^L+*m$$klXjytRVTaET+JahaM~Xhq(U)HWl_poD<`I+>t2rvEBW5vHsJ<IY+r -Ro7D>*l;S)`>y_gu6CYycuRj2PIU{D_?N$+&jM07+T;nOu*&;^UGwN7y?FH{Eqv2HSG46$c&&6@R1B% -S+I7Iu~pc3PREOD`>wG7ku$s!u3Icf)Vl%-}B=l}Cvb67`>nFY|l`~NQHAogrG?OAK}{+)xbRkzmC2; -Arx;oo<6MB01sU*GpX<MLHw`S1;@Pa_$(hu-7e;Fjxi{AGyyu*zwcSh9bK>KnQpvN!20vn4LmTql{FL -T*%ad*SI^#yMMiUCsyAYjbcXqX842#%gGh>PsLVkR6M?B%v1Zd5%jg-^ia|&yrEbb;=AU>Nw?KK7Mw_ -aiT=IMtRr+Hq!oX%oWTN%ok&>gzoQisr+h^wXn};>+yA`QU5!s-=`d^kkurk{o<^kN|`95VSdV#FIv6 -Eo{#*IvPBMjk0p7$oc_<Wyksf|=ULl<lV=ioyMJX@VX9<bfV~9!UGUk(3&1~4(r=uRBaZ!7yF@!4p?0 -|ScI=Va0<>jxB`XYFGk6btqylQoCdyOB=~O#f%HJn!EBcTXE|g69DElH!*I7vp!hhRa923HM7u7$!5- -}}RVD1+3dAUL2^HQ9(q&NrZzcD|5JH~xyeJJZ*?%!^59>spUR^9R=YIBFI<2O+ovUU8Xp(R~~Wz?Q_d -RP77#I{~W?>3$!x)xU~b>fVZc!8DXrAx9bb)RH~4#ivp*=LoMkq_FSoXB}Gm*`PFDEtRqM2{YlYs_4R -q5Yrai!HJGeALIwm=B?Iy!!!`jJa*hQ_N9geu5uhZbr_X)qfM?b-^~#d_kK)<9ld)X-`j|EDy#tGu7~ -6@0k=6#Sc7j+OrQ4&pAx|<pUj~1~_LaV@BM%aR1@2y@I_`__p?74vzcbtXh*PB_$hr!G-*8CW}|c<Fi -<ZpH5@P;QNVvZAh2DI_Nv6$!!Nle6`H#L*vp#=ck4&PBJ#f$YeZj0&vpvO|0{TlIHzUEbFYNF>0mHSt -=iUr;GG2oOAQNI!^q@xj4t#wvcWlvAS7GYb&tOxxPnjzTTpr+tWTmyrGlt$I^`24#);^>{uy{xrO9%6 -Wdn4JC5x)<t%j$r*K|d?~iLNx7?hzaMR^%4Ufk~&)gQ~*=oU^aY{4N-+WfveS*ftEvNM!2d2wd@fNdg -pF%QvJ+Q*@Jmzm<u?`;NXBd-=J$zK|rO%J)^F{l;Q~vRIzp-DN^nR-(#||K#AdMS*m$t@<w&Qz9k3|A -`+PDiPIc4{9hI_@vzRRin6;u~6SaHu>R5hK)S(E7hDE|L@>OJ6fPWT6B2*0YLtEb(AJr4BDhR@TOqi% -?3ycB6J5?BI7+17iYC;7+r(taY<B8Ef_-p_0-KcZN?**4lwNKV>Vomr6eP+Y|$v26d{nzq{|NjMuS1P -(RY2w4r^PyIELwv*c@8!>-z_Opw}MkD&YLvsD|ZT3sB|HiScz`-(}KgsW`SY<WQ>t@*ON?lz40>%)qo -)Hrbc5<%ImKTsrot&!M+Tgwk_^O}<FRNR(k$8?|ZhDWqcr#BE!*vNG4dg^4jjG?@f04M$qF)MPk?*el -YY?A-bql@yT8yQ{I*DF&&<jes+U$s{R@9X<LhY~o2IZ-U5ppkZMQ#l#<C89Nx4V$urO}#bj8g;mQ5pB -f@i;Ub-v|B*EJoPunkY?s8Y@^F!<L~w=s0_!x5}f7nutdpCYk9F@wCTj&w}j}VzYM8S^{lh-;yu!{l3 -8QA<+zetklkIdd6w=iik_+juUa=Hj*q1S-ytaav}Wk6>$Q$VDWE)HUSgx<A|Q{yXCf-Gg<DXh`mPN39 -)S12=&Dp&+?oxs&9F$IKwf;AO;A|986yLRECy!L}Gb(zZ7we*fnpP&9B+BcUWd%t(sy;Hf!NJhYuK)k -$Drb7QjDZ1)k!^)F<~^wciXJ|25Tn%9^a+uQJ#KUh}rg{AMeyk7d@Urfj1<x<9cgu^IVb`{f#|>bGuZ -Io#)h`dkLxg7~zkH*rF}4J6yS(^%!BlC`W&N~|4L5}YI4e_!2#x=ZN$a;hJ{r_%R9X=*LxZQwR6r}Vh -<^>SGo`aP?}-C3fI<@$+s!0W$!P0b#^N&L>E-)IwX1zt<)`noA~X&FB^rM6ZkHQP<}JWaBd;XJ70k^} -ahtheo#lgzq%*4uWC<gR_#-x5SwbEz!XoCEe$Db)$S`wMEvoW#*ZFB3g}$>OaCSwd|)Fp(b;G>oCPqm -970eTmvu8YAf1Lv0&YSO8@vQkfsbGvC|Xe@_i~=NxE#irR3H<h$&ww_9(LOkRa()1$Y+s<$CgO60b#p -HQA9`WSs|ez|qHLH%vd@0D!_CCiAJ+J$o#|AwmH_DH5?^BiT{$MoLc04!Y72>gbhSf}>?hSJrnowDsH --Zh!Mu>C>5tC_jENJ<=ellbCN$=aJkYh()TmzXn%C3>k$G}q^glloOMkIEo9&PwyaFU49D_&mCM&nNu -uJ+Zb#N-V3L)7)xWbJ-qEim#mw`@`ZdjbLxYo#;nI11h(#o$`9AT;vC4rkTo^yT-ML+YwN{?Bco27HM -j;h03{!>cSle+IWO`Z4c#3X-aAS1=0Ie`rLV3%f~uvro6+7)d@cc8TL<lyB%wC_Tc?e-8Xs(w+&#v5n -9`rXVv;zfKM@=*XproBj+^s!impdmooW1!O(BuPjT6PelHQv#!m6O0>yjkU8Mt<wP#6IdCA1KBIfcUo -ZBX`WXD=@=cH{Au|JURAf-7?|BuJ3fezZA{u;*unAf^4T8<b=+0VG`1G{)^72l(jzWU7Se&8uJys3VM -vlstd)z{9t@?o1KKQrHRkoX<&+lzpIO>(d6O@V*S*AncHBJi)>x-XpTd=UTIB{>$n8z;`Qa7Kf3AdYR -5sM{zevARK7VB5%93q0bkW`_5b1H?Pmvpk#!60hfYHnOz9Gpfe}k_YE|P8z?v=a1)mp7N=UJnm=tX9~ -6DjQSYv$AN3jq`Q7*8C%^yq{n7mo}+#?q_DySd7uxpH@%@gHl#e#N_tK+`gkL3?j^T<X%0)SluXv25z -VG`{ntzrdph~<^Hu!;+NT1~nsdHRbT-RtW@bwygVa0jIjL;4BUbIncu^0|c;-?$Bcvy{^-Zf=nM$-?I -1~4eKAhK@<n867&GA0}mU!P~R+bAJmLv53=t9ZUaa+wEH+>-c78{rgM8jgp0<TS5wvj%GYhx=erFntz -j+5fcsLsCZtXErOY3>eD87^Sm+~(Q?o0B7?vwxt>ahiz_mZX-JZIsMq7UG4=;mfUT{CbCEwHCc0)g?5 -sBvTyCG2&;~KY&-CPwx)CDb>+>to#j?`Fb2%)<%38F?ijyuFX95gSB=&{LZP~uihr?%wR83q(Ar5bJJ -~tC*rKjB*j?vNwF5ooLBAHS%0!GCB8dCX=-k}Y!CJtl#jVNQl|P~Lm9Y9^&#I;TAS!w(QVm#1XfOBE% -2W3{uI#}dpo~(qTfHE@6$76->5_Oy${*?O`_YI|DSHr==L0?HR$#%Y&riz>z3x7f7P7u`FgwA=U-{|y ->1rs^(ejnn9AKpbG2QcuY;!W`MQy4hjnEl`hlL2G&B?KiYV>yrET_Gbee6XJ{au*R^>jTT@hpz=+B5L -5kj}6I(^U{gPx#?OQ$FLUsCT*5zlh=z<&Z|8FV_L(+PCw`5wumBonM&7hAD@-8$h9_Uu&8FMdsWZ!$~ -fI3QU)b~o{sVS0X=_Po;Da`#}K$!pj3`$rVt&Un^2u*&3F{%`TeNLQ{Lq;$W3QftY_oeK5Yo%FaJ^9l -2-<U%xw{eMi8wO@=T?L?Co=>PgcfzNga(W3f2t;J4zqVxyYx-6zOw%Av4Gt2l<*65=4b?w{iv^U?@pj -7y#v)oeR)jhP<inftl+Vr>`F~s1%lhb{<XQA2DY|wbMMJ>E{idwk-)VhARoN5IvZ}>IGF0C)&v2-mS( -0nJom(1p7)og3Ni|9Huvcv~kxq<oe3HNWwOXqjbvhSDBf9PGKjaA-Ha-x~<VOZBD?@=0~_S<UrnARq2 -vlQnvdvBY&2iQ;zQhIGEwLc4UH<{!d>YszwIPRN=DNiY_Av{Z`v>5kCs1Eess1tS2SlP5VR@Y8#I<1( -UNSD%}_Rpd@BFm&B(cHisfnJ39k@qCdV42OJv6=ck?Y$s|;;()mr1QdnmfJvO4<xe6cN2qs3ic;u(*C ->-otpk@FU0!%G`H}3gz87XR?gql%Ky`E(D@Gi|Ci>s*dgD4n7q-Bc?16R^LUo~&0D{{CysQGgCsk3(> -xzKp62O+zIWT@d;C=XeCiKm#iPm;;AxcK8Ow6_5*_(n3i5!zQ69%_^Y-}J6f1PCA<B2-t#|Diq~~*Q{ -nnn3Vpx*KVr$)Nf4R+Ed_}YS%W*TDBm<ghO$@{4_11ZNK3SytARqc)xXveyX_Z&VqMm^SQO}N$dfIuq -Sl=-HFS+eodr)R6J--5SE9FNySDe@Kcz)u4u<JW0#nkQ?)he;pjdea@45_?7J`p~KKY2=PX?r&~hWR0 -52tG0d`$MY=T)npn6;oN@pIY9@c+v}L-I(v4S>a6ly7h@TOIfeNeNEpoWzF}HOuEcMYuggXa-kz)?Y} -FB&TGpTn%6l}a9;0J!sj*i2S4@mz^ssRiBEh*YV33Kaua#Eo5ssc3znNj<r4qk>%}2>5iggX@p6fuFp -1U%l~1~J`WYp)tfZlRTL$G%r+(ir_{Ce`7g{U$Ma#d$FRprOoL{^ZjbGgUM09>(@YP@F`~nyww?y&_> -PvLG2K!%~9MXRl-v2a83x3*+d)%9F*Cgu1nxZz?NbcrsIz{{f=@#nz;*g}zH7d*C7da7gZH)LwOvqf@ -_M+Bu>aNn9iV$9LAe2{(_a%~71pD#^=M`xoydq8T3d$>Z1^uVrL0*wYyyC~4SG+>JB2DKNe+=UlX|;o -KVm%&!974R}6qUaqf>%5o#w*hPC0^0<(38X~<~H|SmO#AX3gQ)0C-90>I<L4%=M}&;Lp{-W#R&bcCSC -!37qqIOchEgg>HK1<&Mz`eL4MIh`~qY6(z*~{VT>P@=ktb--=j2sTMq=sZ!X4<<_zWuWG9j#$9ctR*; -JPPk(Or~=M%SD%i=9%&4;uJd}5O#_{8=>t@6i%S~#Eh0`s|43eM+QQuO(J>b#bYww|DGF`q?j9F5lFA -(|U_)<pe8|93IAb#SH0Gca57T#eY+#P1y0tZoO*`<ysx7xABJ(#>F#y(*r0UXKai-@ZybNVIuMM4J<W -JV=>*&o+45w8%EnGu}o@`vA2OeP|@UfH<D;k>IuoT`b8(Z9}{K4mB_gTg+JI>tv&gpc~>0Ve?~cc8hG -W`e*alANz}nog+AJ$eHhM&6Q?wyWBkb-cEDnW1`t}R+jNqQ#hY}!@_Qj&S$3t`zTM&XAC}jp>Ze<8Hc -}|(OS@!M5(cSL}AV!$|+?BX$^mr-e&)Z`s-Tz+%}E$g#@a5(^{pXgyx(%@kVQHthubFn<XJ8XEQyAjE -VE*k64=>GNx<kyaM=G>?OH!kk(qeoYIT(9CO&Q92&>$Zg*>nl)`B;cv`FUD{3Lmjln;T$G6%28&rX9y -^?vFV+78ow&60*&L=KxZx+qApr})8VXw7bg>#uVUVr`d=(r*xwl;h-jd)GCZv_VaQ||=Ns;_;)uu}^^ -GY39ZV{*kAn&Xv5e5Sn}L|fvc2KMw8YWt6<?8o);V!54F%E)@6&(?Ru`8evB`+_(R|0v|%gx1^El-SU -CQ_<rw0Y48mnWsg}3*19^Pbo3fuUO|()V3xbk15sr8?V591U?6zi#Sbb-VU$8IPavj4?CmqI87<e4=B -xH#pV?8!!w+?2R-~3tp&7dmQ!k7YaJ=(dPlM|k>&=@aimT5$znJ~;sw;e_x0FKzT@0qv#}3+p0V|PrN -^fF9(o^GGXhWR7w>bMod9C?z+YL!?Xic&?LjOa+<%C7Y2h(_?qMF%%>rm2kJm$GAr_G<N?hg(o#UPM! -hdTja8bCwd4T558JaKM)TYdLg7#w1|Bk2g9QR&$?%sD^>%5IVMJ9F(XPenEY(Hp!mexQ<b=tO*vrV3p -pRf*`!!Ckvs$%aon-8=C<865sJ61w`)S=i%hNiR1e%VfID`Vt@Vh2WCrSRnzw&Vu3Tc%QU0Cp{_U)tK -*FQ@SIz$F}^F&<VjylwO!c3h9h8NImsAU?EzWA$)>yV_Y$n#$l$wL3#e>qVXJbI7L#o`!wXSaE;K+O% -y(ovW!W!FuiE^}?6t2-O7~yXA_F*Ht5>^a|gtu0q_)l}N0x`k15OMye~k4;d56GTOad5$(QFnY`T-%d -$l+>x<CfIJM&>Pn$A=dtX6I8}}Kw5Z&J(TH|iXpndiiNKZ^`^J!XpyXCary;KKq8(j^Nc~ZyoJPBJ_Y -L_A#eM<Gh_aA+_TTY#{Prw$~n!KeI^XxU^LuakPaY!H8N%>Aw-5S+h%JIPspZd`H(|P?}=e1m5HS;#} -Ja!%<Wnz0p`T<Ihddx~n@5tBG4!>;g#W`~?<yo$zbDQt`X+6MS@4?y3^Ske{QLG2rw*sIa+Dh_P<r$( -`A!2CLGvrwllIPiwJSY>fw??V{%iya``9X`_v)KNTudxnFzyB=l5pxe|&;L$V18Zo0&(;k5GQqQm-|y -Z|pJL%tUXK3aKAdFM&Xx2WciXt5C;5s0w!a->|L+U#C0PH6J3U1E&@l0l8yV|G{88N9x~oSDTr@82#E -*gBw2{V#`|umjnRs4JbuPu74ZUAVbvIz`oYi)toE_ZGQfhY4T4I*Q^20n1Co4SFACx;E^@%voe+$`n{ -?H+?pP;9}{@lD)-BQ%Vjx8o$16iYp=8U6B_;}_pwXhoa=9F$8&cDZ&^k<t{a&`6H1>US4dx>Or=3Jx} -xT-HJ$RS>A*3-}BGAZ*QZ4TwBp|shQ2l&#s|2I<}q~~`n8<=NDM-bn*>S=*LBKCXW0qyMwjlsy{gc2= -Y><`kt!Y42-XHxnKP3z=)u!eYxGPmjYDaqeQfOTzFeXxa~eP=($6>-}!KiXvL2=4n_68!EGI6iGDO&^ -zR?KMm4V>Pn5SEY0pw1XMPZ=QUAS>7RVn$IlZcJt2b_&jHI=+{|cBgkVipHkwSh(jKXx0vevwSssz!F -Y@J1M`~ZaC)NZD_N!boDyPCKn4+bT#&nplQ!B#3`X3mq&tg;wU$wm1=i@ex*H$|H#BSs#pK%f_~YfDh -s#ykA^fyXP(M}!hf)@PI^WmrGT+v5xnO^|RmbImjmq0r;ISe$q|IxzOW<&&JMGlAE=#z45{@kf+?MH1 -+z)MeU)ZkQY-YKI^1tWj)AwFEt@d@2!>^?^9WLXfIV1CL(DUCL&+>rZ+`cZH2A|h|v)=#XOTux<ZurN -Aamo4>)*0Tm)DTRvVEb;T_HEZ?HEwrC=^%p|G1X2fEYG0L$3wauAL7tO!6f_YyIKo;!x59p9r3=A-e3 -Q&u=`t1^Ad91AKEW0(}2F9DexLX>x2G{`W8@mA4d99%m`wGVEzZVts3(pp3o@G`O|#Pi+J@X5c`+r{? -jBglg{A#h~~*ZNj@c7c}Z4v`W5CA@v}0VJO<h>=9#UDctY(_;sps=_2tivC;dIYur0y5L2TI|-nw{Cd -%*6tz97%Z-@|#%V`lCz#9%}67E8P?V20oR4q-oN#9W$SUlavDXDgKt+2FaqYc0S**~0(Zy#F}BeI{%T ->)A6U3Xe1Nsi{fv+(-3wO}UQyZ_!%v8afHbX_wh<q)VlAJKxY+;75eA=Y1^jCy)<$+Rp>)PUOSh4WAs -$<2(DpF_j{1UqbOd2WGQ+n&4YW{>VL4A@J?NbDx$)jNtJ&s#;rlcsz!Q`pyaA58DTuZOrLc`UKVs=BM -HR(M8W-7raGgy<KLKk7+M#gzq@%YhQ^2);4s+^?m<!K=2~ab-vyo><<##T#oYkUe{V0;?!ei(ktNKH* -3chyDn=v&mPnLE@=H{(EC*{W%lAZ>i8BgmM9<6%DcAMKh@I$&nU4^w?j`AHoYl*!uA(*oYn^{4EW00y -w%h;_>aTh`RUgM77*Ht`)=F?^=sO5BF>d)&xStT{+!27O?75H$IqKSHLVEZLu8)U@=os$)+gp+xJ~ni -`vo4y(fy(=qK<T4M@^rB#}QqxGsfuGzY=?xi{tR+cp4ZxRx{1r%G+bU+*3sVFQ@<bM$GXW^xspbwYA< -wW06T~=62{5iE2Hq<-A_nbKi^wj#|N@n}|n^NX*xOH5lL4x(w$I<{8NjN#V8<xXXu}<Vw6K+0i7P-EG -(_Bwd{B=vL|m<4LxM%_<Z7A?@d7*(879es->8wH#FvoUnViF-a{<yqHy#0pBm6`(T<`-S)?eA9xvYwx -xvH_53@2WGM5|);~#7FV0|IC0*vD80P7Tu~WO`I`}5^*jTc4y49&M^N2!n2W)L1r?yKuWo6W#8_ld9< -(DS1`YzZ;Guj&@Ve5!koDId-*3F`C(==+gg0X8V&t}^Ze<sImX8VUAOVzvfAlAWQDmRo)%Ozm1J=)4` -8|n9b`@?M;!T(Bs6_l?c@%#o9$yvN6A(>=J%aF`65GNS(9@uaOMtULEGVNu{_Xqjkspo{O8!vcO=fCM -`u-4~+ALur7hVDIZ?$dM8@B~R#5cwqfj^k|(%NJ=^4FA0(o>ujdzOt43)saj;OnZPTu{`*%yJQh#3+K -#3=>l&UK0$aEia8v5E)ZD{%0$_3Yn*@P`AO!(e^EXQWGAr&@a1|B?@68-mPDU}*lFSAPhsEunfd%DeL -XohJ_a2KJ`o4s5H>pl$`tQbnb|&09DQyMY$|CDBQCY9X?-OeyG!;+AFwMB(|(20Sbi0yJs40wL;tR$^ -xviDOOXD&)(2m<kH@s<d#vnM*oy6=Z`9XAd&jhC-=3K?t!n0KEBnSp1>c$Z9s2$$ef~h7$L7|}bSu=x -wN;O8nQ_m|tE9Vr=DF&@nf1<9Gas-#G_&8rzENPUpP717<^N{yT>zpg-v0493&;YRh&S@aYF-dU@fvw -q7w`g#h=7V|$pQ<kz_RW|z_ieAsHIqDWR_%B<SjBS?22iHeJK$w(M(Y>v8=GHuvGrf%sg{;_XyVed*A -o}egFU8dvN{iXP%j7o_S`@oO5Po=LGD5?{CK?26P5~JUlU=>3e%XH%K4nv#eMCwEF_)rr#fs1RuKZt6 -Ei8a|Z6K=y<bwNnMSv7nu)sZR-H~*LoJj4I5+bHAI#6q6+5>D!(ut9j+$xeWY%~JNRbxs@$7>bXglRK -TA^kJP7!-l-%pkLj^Sr;IqKs=(l`9&!KC!ql2XO(~LLT&!p=fLm^H(N#gHw3md-9?rrJim!Ex|@#SOI -bsA&u73%@IX3q?m1-J-4&vmo*vH^CVmJo0^l<W8KSpl6P&C$to0)BTV^KIU_y`D{*8}LVvy;rvdvjY- -oSyS!{h@)klc7Fid!;Svl369x~9V#fUXi|~J=KCr~7L1$lUBWCl_D&e}%%Z@%UoX{CdEURinXq~070< -h(k|!Md^xfy4dv4_f_G2kh?Z&ZS!s+`TW8q;_PK*tQcynfPJ#<UV@FCw#7?(fl=X?G%X^Fc(+bdH&aq -L&#bx+5&m%OJoEW0D#Q|jW^;NfkdYl#D-SoT}F04a&@DJPj1c_kIZ{nT+~H`;&Pq2cR!@6hpfOy_%=C -4UQj_xJZwSHDYcE4$G(4fH+WKTy4Hh23Z$^ccholGH($rOpuc7+W_**N#R(*pE^t2wUBa?iEDiT%u#a -%e<lA^$PNmy8A5zoF;h&B}sP#QTqeI{-4~`L1&}@ix=ecxztO}m#$6wm()|vcLwJBh13JW*0MaNVjh* -tR4#c`NyJarp>2>jAKl%%_^I9f(J$`k7d85&?IJJ#l9~%0SF(Q9LtVnw&U^Tluy;hjy?0GJ65w|S>E+ -j+^z`#2J^b2`?tawwbggEfJ4qZQsaL7tadaWH_00r)rYV6oTeuN?vW?p5LzV+yy^)U1`xF$^KsmNi-b -}f!pe9OiNb93<$bCpr%^3(2@_~RslE*fmx~FR*C7;jL6T5#!%h;SWf%UhZU}t-<^A51H9oQK_x?8A^e -cVW*TJl-tO?t$8`4-enWBOKZq_$C;!H3MYNK(M;248NYwygqgWN}w<+a!l=)TV)$e^PUEGtD2aUEAn7 -ZT8LyxF4kNL#J!j>Dq5~#--50=H^k#>ynj_qNJM>uLY>do4Cha8QHH|=S6>Cg}==a&xfh-q4Ofi?EbK -n-Tx-tbic-a!-4y7I`_kH-%><wfbO>B%~Cdo;`j{^eZR>q_oq(#bh5Z%ZtR{Np1+Igz($%5e=oa@Kda -LBi_$#+`1>^Ieb>|O^j-3<zZ0VSJnpA^8s2QpmI+_~N6RhjqjuDR5BRget@g<Gc`dxRM7`8K-W$%RNU -7)W0MgYmO)Bh`A@zdqT`UXfKKxPueD93m1ip8|@OJRM0}EHXd$ZrEx76RzYgVR*Kl^QIrsU6l@0KZbg -|uo5+!GB?g7j=XJlNULk?yagUP!O2biL^+sYg7uYcuo>!miCyFWIimQcu~g%~B5w)fG)bM-$R+xF{cO -`vlHW(EXH}s8<C-d%fT^KBo30{)34c?h{Fnb6;BL);?$-T<b5n4Gs#Dh<B;f);mU`{S?X6z<pvR_{=+ --+ShgX8QG35@Lkx~dH5OG?oRNXV0Z`k-j0P=dibN?Ztah_-@MUp-sm^4;nZhmJk*v;;47-HLGtp}fn9 -3o51@RkKUnSb{;&WywOdQ`W%POLEkEK%pTWK&{-gI0-Dvuoo~>|SV_nk2kN!U8E8+{`k)w4G{vr#feF -_aH5FR_4zN@;Jg$MX~vT!woCyurg&1eGs#5yMH<+m3&{T(t<71TVz!n*s>aWL`R{hP~sT5o-Sbi)90g -W9}$E8lM~UriG0e8`PJT~e<md>;)R8zA5V-1{(yk1w<dN{0N*s`MA>o*sPP`z}F^p5(^+^c|^ipZAeB -VZNqg4{Sfwv7omD8PV`C*>~YCvaTNP0r@+G=$<t6HzLxyfp8Do=Mz4DK;Pxn2|ia2=(4E|jW4UR>3%& -|yOVuQ(3e~ZAUDG3eQOF?ch@KE-9w}39u)m)Sb**Z^&91VD5v}UfR0i0yQl63-Op<_l(}Jm?nZ0x116 -g*SpBNW^xbr=v}pHjSU=&kzdC#F#%FkF2XqV~fd0+|d{5s2@Q0iGHaZ?d$0F%ICzl}nYA@nHp&i-xG1 -MO&16>b1(u4jsoD7fhpy6s3ezm6v55RE3!V~21UKsAn!uRwL;XN_jpM`gl!+WrBxUawVBb`sU5qY$fz -E`B<z#zC5P5mD37Y4)mR|w~6sTYs;6N?vhw35ba?;Niui&yF8tZypU=i?l&R}1>4aebc7@d8@V7tQs# -4Ge<5Xav<!3vHwX{Q%FtyiDNB67(4l>xp5$PGP+;%-<<20K+s+VT6TI8@%CukM6U(0Qz6LK7Rr9zjTj -<1<?P}J$hIgiTxgGIGwKw!snK$bR8SW0znq(K}H0^GbVkumgC!d`N1>SzRSQ1Devshd@v}uJO6Di$XM -LoXiskfKGj{z06v?pYs>ELXY9@6G^%tT#C9MbFu9(`H|jAx<q$Ut`I``T=1lSd?StquePFwQ5gEOCn* -=>KLcGWgIUUVc&-0~mscsfu&*Oux8^Z>Y8~5^cA=T>rZTQ|j5qxh!KE}%5Psnt7(ce>OMpM6fUCVt6p -4TzVAHx<qh52Hb-6>3sVKzCe5ZVC`v+^)r7Z$qL23^a>_P6jNY#$0Z-`GCCEWXFW-QL^>HIxT>EPRVT -i_&}4DE7NoIwlM8e#>BbH^BW?>`dJUWh(LkT}wZ6pzg+-D(E}u9uA5z9_Ys_*1`v#<tx^~XAOLc;3Mz -9>(2KwQLFiW%nk5;-WPnXiRw;-?}0e)<UHOfuD5i5#2~ykWc?FfTkn8&bIGlDP_T5zs)0*&N7eKrd9B -(G_mW=Fe;XyQ&%GcWeMT0~2j0tcPfwG`wn0w%L_V_qak_nU4UTt3;OeM>y8P&Ny8J-Ndo|r38=eJ5dT -YqKDCk=z=m!2k*Lbixp!?ndKhLhUd>s-gA?v2TMAp5`_eQU2?Y%k)&CNvxDzc95PnLx9EA9AifY<3&> -VHw$H~d|5Y+jMpnYyoT-=&8#psf-4x7Nz{<*11+|MjTVe9WHBM?kr@74mX{&2*hOoePW{rpu?}4gtaH -MdEj$&g0h^J=i;1_YHz`IIuFaX(9L!?$`enBuT4vy~&Y^lICZ{e(W?IJp0x3_N4c%755Z&0DrY5em<9 -%KDAKgf45nx7_V;IGrlb;c&e~p<;D&hH8I1zH8D|IbqqWUd{4(TqB>NZr1vV3TK^a?_&!jQIz*{L?+% -1IN@^FmI+y--wsF~0MUw7Dq*u@QcA%@2>$+o@x8{z4sEgkJL_&J{TvgC6YPAv4WrdM-MIQUd(R@S3l$ -q2J7oH>bK)RSf`klTn1JZaebBkyDe4`D6z=nkoRu~qvnuL)fvq3hptrX)4<!U4q<GrAa&`zJCdONNeX -`=cp@EHv0XHXrI|J}6Q)V8T$Yb0Q><h{xVK6Gp_us50MwWw$O)P9FH&XC%#ik8~0@?p=41vQVgXTRIn -n+cz2_#9S|J%!Xpu!+|FHu#=Ne-95x&!+}jW{@p_dQXA-%Phz%6Kt5O3LWhnuMp!^60d1LwT)ce*mnO -oYP%nlVG-CK2cJQZb||Es4j2u18u|&^hqRN(p1|IpZ=`G6g22{kplhXPLEJ#eXBr(Njg+LBfxRnH?jz -T$bH0ZlUs|VikT)CW$MbZ7hFqcRB|fHg(McB?AoXUyWeImDM^-d9?^OdXAmoY-(u`;;-Qi1gH#)2tF@ -)AVtwUO06C{cCIiUY(@3w`jy@+Zx_~QrNFgBLlX{rWvgpn&ga4x5~lZ4SwmkT86iW@vvnJ4LX8uycR7 -O#r&m)(4}WkZ`WEhp<buNiF$f%ZEH_}%b*sw5pr0Q85?zFzOd6!j{P85U3$GaT9#t=~X5vX|<lYr1G& -chSAnpzTeC_S1pt67A0e;(@$RGsNpnt{i9s@uZf^RN}$Ql+><p^(b2Yv1O(Vnitf^9?(|^-{CoRPZ`u -5y*^)dYqzZtzSFs;B9R}+FN3d(Al!|`@!IC=qlr;tS}#2R)K2Fg&9eaVr2FNGbHzDspdzjj;%cCr)P| -|hM`ZRU>*zaCGCDizldex#MSp7#xIiLT>f8!9I{F<x&lgDeUgMwa=X(N)K1NT-F%b{?Io3ace*Xz{|1 -qaII2sSm;|j+ZfwZlpE4lXO!(^T2=H|-M2;DuE9%Lltfj7@o(swVs3HR3nK}InM!Y+Bhy`;p)fa#b$4 -QFxhgg&$be-;;Eue%d}b#ES*UW?_pPT{m&ig2TwBb@F_LVy1uWNKe-=Ro*A!b5j$2*^5iBG=57+!t@g -lXVkrZZ4##xp}70dAx#_o5o48X4h#vp1!j;eEPsg_5s|Vj4W&2r*(9Eth#l1X?ym*g1uDF(xW^c{T^@ -|ouxj!F3;_1Jx-ET5ZCs0`JxWD+r&|0o9X+>ZS-{HajqP0Jx)nS-M)8jV=H}!!P(oSM_aF*eB(B80=O -NAZ)XS8#b>vX(|7WGbQ?Lnp1*TDJK-EC#P=ucyj?u-M<m>fmv+_d+fM7B?w=^}{S!0TyRG^DiEZWm6W -hA(p9tklxs5-?dAyCy)s<UXI+w}+z{7WtieVqbF^CC>X2b^(Hz1ZGmLncR{2uX7MBl-vA8|NhIO4sC8 -Hjm^MTlDv-$p!$_%&iZ;xCAw4#W6}rHGpl*C6I0rXt26h9dStbVocG%<(khRYdP09Qz`UK}<x<LR^Bl -3ULGCR>a+i?;{>Vyo~5Q6#a-e5>ba3hj>4t1@SS&O^9WPA0yTvo<{s0(Juu3fH)X&4B|w@*@zj4d5Eh -JHz009d>63_@oU6$h(95U<1zH}2E-k~uJUN)V-Wizc0rtvn59V9*q`VmC$1jp%Eb{nf`>OER?OtsWS1 -Bg-X*n|u4D&~*RY(+o8ns5uRMIGs#v@-MBi}NbY<JPJ~i?R<etbY74ll-UdS7edn0dBaP@Z1+amYh?w -Y<Y@;1mr6mp${$8LAEFLAqTei_Jpkmo7Vuh{PD-$#(UBQH|uFGeoXY(g$-zeK^eD&m(a<U16+Ou@^yy -ZZZ}LSCuRU!{;&EBG-*{8|M+rQmhQapIKJE94Cdep$gA75QIP$eR@M>k2v9;VO6E;VM@vcv}VcRiy8v -;Qk8UL%}r)-dDi`6@2gxSAT^l_((<kPz4{S;JO`(_O9SbJ6zjm#tzr^l83w#@*;)21i2sba^yXb*COw -Uyh$PV-{~q3-RUY%M1B|Y0_5F9{>U}RE0G5vZ$RE3x$iF5^dZRG3xDl$_4h>N9>RZ$_({85?R#XGYyV -TU%hlf{$nQX2rm&}amuvYOk@pk+dV}-6!rnJr<r&BaAuoQzRe$*#uKub+-Uqq5jPpR`p~!=Te&pSe7n -Zs9$HmAyi1L-W_MgiBvO*ERR-wPC%(Z>_zUk_p5af5ZqF>p+Df=ho`K{~^l>L*k{l{YdoslnCkgT^FQ -ic0~r=%KEvH;C`Yl=S05pK1m0?(4UEyHMa1T0vPrnlOh`C>zgEyp54KyQ{H3l<pk$wpakt})HFU>I@b -!)0!^Sw@cpv>2>5i!sF}!tEw~mNDIANM&3|X+bn5L$0t}lWNE^*bHPmeAjBBzZpkJZ}>hQ0(!$|-hDh -?j@e+*gT3^7u$H%<LC`3JgW*GX`|QtTL1ZZ5?ROmgfDXC{M+-O@FmNE;+XLPYpQSVnBw7kzf<Qh9KEd -!A3ZH&79V8kD3i`wMrSQ2QK1qwyZ2IIZ!vM5DX>qcGQzs4}Nw$2mAty})lccO15NND6z0H`SNw@1QsZ -5qc-C|02#9K`38@vMHc3MFLL^!K1?k-56jFFUTNYmT1Y?_oDlMrZ9vU03;3$rbWwgvrd(xZOo<VG9!` -2d&vTNKN3ZhmW8Xgs6EW(QBC8m;CmeTpI5V6thl^=45{Lx$#WOi{*b(IhANZB0r_$uZ}*<}{j*J=LbM -7;JWniB(h5q)3t!myi(UTCZ}eaOEv4rtM#}Yi$35lBAq$lTkz4kkv?AMUulwJf_k<rF`CfE-{j_^(K9 -~A@%Q^s*KlaJv-Nr!gDVAZuS3dV$=4UZ_;POsbMr3ZAR!hmKZFWG>9h3Ddc*aA<t-Yw$CY+b349mcDJ -<G+sAInkAI`z<$SkgSPc49r_)~U&oq7dXk2(o&H{a|-iY0(96oNmmbaG#=vOoo4b~Kk(d=ZPCY+WdB1 -><zI!VD>n!sD+VHS%%9}{9wq!F^Qq-5kPRcj)0vdygB%}8DdMb|__xt#J%(wlNj`Pn&ks|M=FU^PQ)l -%0kLy>}7UH)m9aJ6{Kthx0Yqt(EkGtDM4}pPf9M(7hE@w}Q^;oewt!sugja?NgS`nG2gKdODTSId9Jv -bP(dW*A{k&^v-rE%iwH}b9!fcob6JULs_4#9c`RY-3o81E}hYnILhwn^dYTqqDbGGjmq*X<NaOu{~mv -T1QHXmlPvff$hpa$l{L^Ir}I5NPVwQnt-{@jZ&2_jfjig78U<gg;6)0)PQjm2@TV1gkII$rRdDf~BF; -1MT$W9&B!%P<3o*do5R%G#KuAQ6WfEM!Vl6o-2CEgGH+H*@cNHmk#y6aoB9bw#Xs+Stdz53~5dQp-IK -=h2r4IGhUdDJoa;&cA=zoNxZjGycfB%-p`(!)tNP0^#-uITPo;=Jya<^+Z{d6I`pHZP7DbhOkC%nIEM -|l50ed~!nS0j2MdZWz8N!A6^Qf!ZUeKCwaANt{khWEzsQOLuPM<9>IG;tUnk2nYQ&&9m6Fg%;^XJRwq -&z2UnwE%5hj<^EDA4WZoV0vh$?2LI4`AcZWR?O!$41Wjh`V!^GQ9jq5KO^~jI@%~bO7`*ktV7hi%P|S -D4AJ*J3`Z<MtV7hik8;Ek#74x}4=^0D5mEgirbi4x%tO?J$BghqN6(*Nk_+EWfZ|LFhVw{IZ1Bwnl57 -@|MTWuu{PXwe(;y@nzFC;uH7)sv>9d^j9nL<E<L}aE!M7BMl?9R|tSm+dF}dg)_Ftke2g+%M|Ff94Tr -Cdy$NJ5HGzSC7t)M4^h3lanT>UrvAL^qzEG#tLC4I<0PM;4UDPYI{S$SxBD+^77uv@+Ucj<YE1xnG9^ -?#o}k9j~Z*U0dHRDPPDLx%~N9ptnXi#Vwu&27P^mi5uJDWHSagbh3*{6ekD2G7`;k40Ouwo+Dl7@$P9 -TlBkHm<pkK)>6}<P3Ay~|C~PO5({s-o<+{(PbG`d3nQG))J&$!1pjBbgwveFwYqix(NHsl<v?7jf!2_ -nrM<OR;<|<PA}?3H%5wAT6g|Q$hRMb(LzvlU4U377V%I?`qmN~Jiy@wk9!<()*HIciIm;TB1<#(MJWk -=0Ee3-#pJK4h)@Rub%6Re4;hq>CB|nx&Sl}Bx+s4DwpfSe;dDFuU<3&eI*PCUloWkkjuptH>5fgHvBc -dkKH1ygVW;Vy>WEoTP!5X|NN-$WmjV3)+KHXr;$YBGBDewokOJo*FAd|sEp;$h_hmp}FnoI&7L!#iSJ -%daH_P>YbmcKyx?^fBZf00moxBGjfg+JFA%botDfB5H|eudMY>L31zw3>gn`~U4n!SWRkKl12fj~A|7 -wfc!C*Q_mC_tewtpV{zi@pBuW-}J(Zn@e8W^77VKUVW|f^=;dC?A-N6*_*rH+OzlVcgpv@``-H>eE3n -t{*MnF{N&TmDi3}Buc|M;JY0RG=IF7nzCK=i;^a4{zCC@W?(Dhq^%uUo*l_9lA1?p+)6b1pe);w4Z@> -T1bnVZ-uHU%XOeB??yGI*OwU@U~+je)f_wC@<u~X+RUH$Lu*1bp1UICikeeUYpum6C+fkA@?2M-w<GH -m#Wk)uZ69eU50vE#;TC+PIaDXE6E^bF&|%&crvj(L&AYO^oS&C6dhZ~lGvFGy-#{=m{@4?gtoF8{wf| -NpfA!@?sbPMSO=GHU9y=;<*tVrRz1C(N2XCvon*-2bi1|3~=$e?$)`IsX3X;nD+2jz85u{B!hx&gK3m -<yHQvTPU+1(;p)9PVgr}Df4r({~s3_%k9elX?Y#xR)$C}!x9CR{5ezLBMK~3;1dcgQpigb@-l_ILLrZ -enM{nPG!hdQLri)T#lU#@PYj7cSfCaD6P(JUVkXKXW>ju8r7~_96cXZk_YC&@i|4Zyu@rF!Vj1Ed#B# -*<5f36(Bi14|AYMfzRX9(N=!@71(I2q~q6V=qVj$vR#1O=hh@prM*h#Q6&SsfbyKHpBwNBE(|EQp -7!o<%kuC)rbvMuJiRx$jKKto`L9#=#QvD3`7h;)FH+qCL!h_79o}(mLpamRw7m-)*{v+HXt@4HX)KP( -OyJfM1RCUL>*%6m#+Ggked+;5Q`8?5z7&)5$h2zBQ}Zr4`V$e#v;bsO=NnGi6p@D#~ec{NyxC1$rdAt -*W0KpRi96&oFP3Ro|O`aYvSK9Ji~4g6w=EA&||kCn+oUOWJ5BUuD8H*hy^g8OojZX+OtTQJ)OiG%w$H -2jl|?ECKC<(kqXk-^_F~^&ceRHF`dqw5&A4+G1BKo(7_&_Ko66HF1r;c^gyT0kezI>pq-#Uhcd{+Ihf -`r^RVgQpXoe&`t+fxsYCNcF-a;MgEiCP(9kdW`6!Bv9Fv_rhK?{}zU=uF(zEAe`ol3hp+?Su|5F*yfD -rH%8xx@M=~J~xM@QYbUY_2;xgM(=!u6S4!icQjq6iiFIl_3pG^T63slZGuzJVk&JM?T!HH?i=ah}iO@ -p4XOvkp{lC+SSDfsMt^VB;FluR=K%Q$Mqj5TW1BwC2nCSe!!8|BTb|Cw}n!jq-Q_&)?u=H?_l&p4($* -;}%4=i;uhTaY<|!%+4G+jN7Y>CG2+%4<o#>#3FLLr<0-J(^U9B-^rd-{2L5c`sw(mkwfzF584y_je%U -U;eRWUn-%0q$3teZ@o;)91pfp>sbi5ZVIy@BU_U=H*{ItzHjeI)C$MpJJ4ls>=yw~x<^6-0mux~V=3U -5X&c$4j8o8M7^hYk{A2rCuTwWk@F}D+fT+HW$A{Xm;b;!lsRU~pT)*g$z9r8rvVx3+Ra<T3&1GyOYF( -Vi2*z%Bzb!!F4J0dScF0ZRZF4mD1BkzK|1i3%*QsiRYTN!eBogZ?sj;;c^ST|RRT&%mSM&1i~EpoArv -JSZhc?0s^$QzN1b%dMn`XJUtHlbXsTO?;V7wZ<)$mMmK$i><Of8^rEN`qXiOAJIV);)$GAB;Q{c`$Mv -@}bBhk&i|mi~MfniO9t`Rub}ikY^y*A~z$)jiX2&avkyl<YCAQkw+jeLOv0BG4jdCOOQ`NUW#0-b1Fk -V6?r-GX~-*(i}Sn^`3&UM$VI<Ui+ncnI^=VZHz2<kc_VVsvo;}r2zgZp{`&z*bO3eOUm*8I?uJ~0+#P -ulwl5FlAt-NyT!-8fc`R}@@+9P5LXP@;kegB77I^{kb|Qb|cOWl8-X3`wa$n>X$UBJqF+V?{A9+XQ)f -m4M@;c<5kvAgmBK&t2`v>7a<aY}HA@3&qg}l4)7xEs$AIN(Ody)4N{y`of>_@H<{z2Yb_y>6(;UDC83 -I8DPE6R_&pC~`_{-XTI2Z-{Y!~Q{(A9;`{Kk`AM{KyB3@*@vMo``%X@(kp|k>?>FiM$Z`DCEV+M<Xvq -emC-R<e|tbk>7*77Wo+D4amnLZ$hp`u0D_b4RU|vI^==K!;ps}k3b%Ye4?mt<dZ~wBcCkl8~GGb-^im -xeIuVL>KpkqQQyd;MSUZW5%rCHhNy4kv7)}~Igb<djeNGKZ{%}CeIvhD)Hia2Xz$1~Mfs6uiSi>~F3O -Kw!W)nx<nGALcs_d~FG0B%@-pP!$SaVyMP7~E7kM4>j>sF4cM>;17qCA-?u)z|at-pH$U~72MjnZLEb -=7eT2UV45y%UWXCf~~F5wMTDROt@<;XpeS0eX9UW?otc?0sc$eToYkgLB#dy#99XCe<lF5wND4!Jw>S -md6_laPBMHzW5(UVywU@*?Ejke3L1ke7-4@dmF#<d3{s<d3{g<d3{j<S%XzFJk`4eUW!Vu0cK)c_?xT -Zx|zydm&Fm?u|S{=trI>^dm16`jM9i{dhxJCiEk(5c-i<3w_Azgg)d=LZ60nbpz@{?vLCXc_8w!$U~7 -!c!L=!(j!k4>5*rM^vLr>di>=^p-7LsSfoc@D&pe}X1R!uyi&wRUMu3`0APcNkGx65N3Onv@ke6$k$W -KzMDC3|RK&*{)JP#mo+#wwu>3-fJWt4VSbiZ#UMx7?kd_J_iRBkO8p|&@-aytOcVCL-N8Sy26LLL16D -PA#0K(SF&_g_zM&gre3O>`OqC6GvG!6J<Z(ySegpF&^BaIjlx&91{&qq-RNUezcIe#JQrO&_gFri)(a -x-!>#<yU&1@&cMK3052wvt7Niy7K*M8byg?1)B^isd(8d{G{rPZp-nLY{_pF2?d@;8=kkJjT;;d$Q3E -J*42}(qsA@OlQP+R+MKV=A#|CXy+2N+lJ-mdeSi;8*&@kpNaL5E&D@{+=S_}FkTMJk*;f@G3gqV#e}z -qV5svjLeMXC9a6ab+>^q_FDA+387XW%MuhwvlFH;0<>#JMw%Wt7)_|`DnIeyGq_I^VljY~AG?xElS)R -etN0Dfm+kr=tS;&nn|0vlWBU>dBMK^w8hl%AEBd0e(i6|G(U1lbamE~rZK3vY<!p39b<oFhrf1I3u2D -3L(j!)Yk_1`p^F9IGW>!<CJ%7s5{IKC4pa|`1_pPlhoSs!h$w0sj~c_tfQa@3cB**{m#FN@_T{A*z4n -<VF-#q5cepEI+VJX-c&8mrGJ*`CF$zGlnMu^DW2RG2)HM$ZGv?`2x(Sf%I}>@Mvlo7p{GE|-mslie$q -BaivT!I!Y~4o=T2XP(LIoFbQtuU?xh*INd&J4&`Yo0W6ATuv+Vo1<Oubw<-=KV~v}r^)R+la+g#d|p` -D>auBa{&wbvS-1GX#`1NvpJY~Uhh1j$x8Uil+zxJ2$ZdFjIK~f6igIQtxW$EA75cJS`sp%HVdb0xElS -vv<x-ElA8}~l{RwSx+;hBNp&EG$TZEnoM^E$BbB=n<X7v;!`&p0n&P2}plL+~I;p3|g`wUobiO6|>5- -!&Z?;jlLdH>*$o0vZ5{=vr1KSw*^rHfV6D?hIt{h0H45W#$sh4Bn7=Ra>};j+J-+l_NN;kQXRV#WP3N -p64qdL60gcf(}6xu3%1cE|nXs7LOn2)Q1d%XzE)j&cgSVzETru4wtZ;daH#c5=I-o$N5V<jd`v;?)0G -T<R+W>(gOpHrzWnYK-SUQEopx|LJmliu@h@p~<Da8Sr}MxIS52>`lh{3cIELxgGH?ewgl5E`DB4a>*x -FmZxESF&=4^%Xw=)`diAIAh#cbq95h?Oq9#-tk<<(xn5WMXUP3J*E`jTTiJDBlB}1vWYIEs`ngW!<@M -}(o<=y?#d{vt^zm{#;_1T`^%N`X=kce?`gr^Vr}l4U?LW>XezcQ4+;4MS;!l$6gU6rdBsa1ABVFQ0$k -%xuKTJ{Iv*hyVu^wF0$13DA74;bIR6Z;7&ukYS>C_Iatd&G5^t;Y0(eo++{m<_g#W=C>ORQpCU)RL>B -IIJ;NgS~#uSK4O{3LQS@;8weATL2)gnTXX66A-Gmm&WOc?I$s<kiSuM_z|~pRgDCL1FMU&QBrrMK0=H -gS-lP2=b4FKaf`<4^_;Y#G?Fp<Qd4tOkR^>UZ()%Vu7-l#}hs-Lb<sAD?z?Y_y_qrqI{@d-hT$=qFsu -4KQYW#i*nIlHz0pp_(L&o*o1P?j>SBom`7Cq$@vzMAM$k~K624cLy^CQJQDeKk)L87ClTeVk&Agrd4C -m@i+LF_Pbu%Wg7TM<7b5=xc`@=G$V-tQLSByiDdd&N-xdBu{)zA>@;#zF$iEi;`it{w;V<Okx*mwULX --#jQRHIYRm{sqqWp;P7xHg~e~=#+{y_e@@CWj}!XL=@3x6ONo7t5k-zxlpe5ddS@-xC8$e$MeKwc;Oa -h>z`gg=mfDg1%_tndf&Z$$Z#pBCjuenONV`KKa3Y+qs?H4o)tUQMT%2Q5UoSl=M#NyWTsG0Mey2r&;X -=E+M@F0LD5o^y!sC(6Z&0x@qc=G7}vz8-lk@>h^IAm4?&3AwnAt8Z}rHgbRD?<22M%(DifyinM$n70i -@xtMnp^ZH`mKN98g^P^&3I1%OI_x<IHdH4*JzkxgtxwtP7>juQSf<lyw>!z5e78}MCqkJLqM#VgQ=?y -VXhWRVjDU_pJ%-f1}31ZzsCCZ;cUW;5j&xmykVqHT6%EfhB%!7-0^d^*x6)s|)Tl^+YeUtM%<YL}=40 -3;zuRt!=Nr-h64T^d6K#ac<c_?!6+#u%F#V>>+Q7%@{h;;;F-9aMC(~*mH2V$K<2FlY!`H-&>`W5RA3 -Q?Yoycqez$i+PRc;uxhe+;>phaZc)9OaK77wZbdI?_s%zaaD@7aR68Ah#oLLN1;k#5xqQPDS0!`3B)H -<l??H5c#vn#kv)-t|b)ZPa+rV6vVoUNR&S){G(V0lZbM0A1T(oh;=a;C>Qs=dB}@Jd5}LL^dsMlycBt -<;EHuN<tP`=>tbC^SLBr_7x%?todgb}lUkHNio5~&Ysj0BFGj8={Qh<ma<NWFtn2Yd`8?!e-Hcdg6Nv -Iu<e|tvL>`I!0P;lSWymv-mm|+Z{x9T($UhV1SFAHCM)`bEJ{-qCkGvG+AB*xK|3LT)`K!nqkw1rAtV -<H>nA8%NZxsGPF81RQ>u5#@|Db${(63mB6N>Ux$i=!DvCbzF<ps#aIvTO=ClTe#MR^qKtTIr3Kk_`}C -gfsWl~{*Wi1G!<#k!wSf}<R#P2_b}8sw!YPev}*X^C}R<tR@=F4h_0G!m&q`HR9n<PRVh>#W4OtR|G> -_G3h?;yeerKXS3|FA(`T<e|umkVhha33(#&-NK*9w+VkD7we)5k(-h8aoHvE^^!lw>gD?<&XeW)AwB* -Ac8Lo&$kzwXjq>v*=L_ZXa-J#ozno{u^&xn^3(r>Amm^<4IA5fYTW{g6`fPIh;ymA}yh~X5>HjHC<1N -nNSx)0SeEdFH*3ai(l4XDJ@nWN#A0LlOW@9(bdiXqzLB4O~^E4^4pZU0My6h)DZ<8uNm-2Bky?h_Wxn -o^#D(*I5aN${UyA<3mb3P87jXg1+2TGUkV+{DaVY>@YmhCm*@5J>Ap6tTY72GJ>$N56Jo(=fBX;=Mbx -qO`4<nnWFm;K545`{fW<aWr%Tl7xl<Mou|!c*ku2Emnb*Yv3hxj`N$5Zvm*)1B<6JVS0boM+4TiJY6{ -`s3W}R6foP3T{#Gd>3w&ue+Sv74pSS`fSX82e-SFhtES9<^1@(VVZ0&pYKVN{ga0MjKPIF+K=EFE<DX -izs05freVJ!{LSY<9QN^f8pnCb=Pe!U-ue8Kv)qE`tuxP%^XK!N8FK!7o=q>eUp^0Ll<!0MJg8B&htG -33%E!4;ZV!AN`a-$i=JRLivcLFzSEhV^WGea{G4CTn_`3B>*?vAhmMQmJS-2yFP3DUk7wv=3`#8==K0 -lZ(_eXpl%aK1HEzWl07KNOjZ>~IBZhzUhn}D!~&kLL6_QU6e9PNj5lU$!B>^~gwtuFn68QZH#=2`6g$ -db8@>9@FWvuux;R}npi;NpxIT%3`7p4uYY!{@0ja{I9=?BVk`j`N3eM|n86%H`+t+E%$f_`I^!DLtP* -5E=v*8pQmFvwWdKZgR3n%qKYbBG&%1<ov|><9c0n4tKsDTJgGVZZSR&ca6VT;h)6{f8?_E?cn(?cLp| -vzirqbICuuTzGTSU^?G8%`wEN9Z7%i6=l$(+e7;V=EY}Zj9rj!9JDkIv%gg8W7t8kX`FDpse7=D8Csq -Zwxp0$9{0!M1&a>tA#kp1PAC{m$a%FCJ$zML|eG>Rswr@)C{hwvxIJEBjA8nJXHx1s*#+mfL?c4s**7 -*mn3{2to`KfzvjPy8I^LW}**E)~Q!m)GT6GevggTs@LOOyI+?Am|84EoHfQ$6Fkf934HJzo3sll1IL> -#6LWKUnAuF4_NO>VPdNpZjn9x!(gvzA*oMCNn_${R<2Djds21=7BF3wtYWsc)&eF+*Fh9?blSZX!g{P -51jObjMfe*RY&aJwzOOCHM%cX{p$1O!AA!8{IK-E`hGj3=s<w3+qWkZHdlS5pL=Ti_W7T+o#^pfdYAW -)#J%y(Ujv_9o3x$}Hui42>b<U8*Ss<N_03b-jNU!%zPbgc3cR=7Y}B1tQ(9fnE%Pqu8d5`}hi~|7&ck -1YPp#MYdHuwA-*F#Ue!Z~H)_HD4yH|T&&N>m~d-OY6`bT@s)6Xy&gC6kjaW2+<(8zCx{xl#q<+(+NUh -Q&e>YBhI>aIDasBWe^ske2*`|EbP$69(_`|8O0f$x1WFKxq+v0J`b_NQS-{OR21w`j`ZuYL6C_I~T9O -+W8WmIojB>uPnMxY)q<@BI2p$2lE4g`Zk>-#uSHcjw%u9-&W>uRFc<*uLCXmgsN3<F`=n1K#V<^U3rB -vo!(h$E+Uh^}O0>{@_EyV$BZ+`#=9eLwaYESLYW7{W5$}$C;5Ie!1nsq_~IZ)3EP*dF%gBRoJ>eLGEi -Tvw!-{>z($UICsX<-Vi-4Ft<zH@7W)(i<o)%&@%&OZ9n(*fbU8-z4|5_1=3BezI?T@@UDkG$@WgnasM -ddz<t3@k?IaV^_W}oXJF&iFDAS)<j#^sU%&tOMB_5abj|mL+1>K(Th|hDcK5z<_QDlUcbV`-=9oPzPe -1;mdh(>{8Es$v=El0G`=04|IU{7i#68db6t?{B1D~rBuguIiv8CVQWlt`Offkhd*LM%!`%C+sbJlm*T -R_tG4%8g3`Q-Sr><O>*nEuWer_C>%93R%@otV$77ZrD`KVCFOH{;xd?bmX0r}zKv4R5wh%&=M8y=oHM -zWT5J`q_^^++*SXtB>0kH%uIScuGmwiyrDj+BWZ&G*lkGIIH5%v%4osKbJkI>1*w0IkNm(dHpVr&Yrs -Du}fy$xAn^rVdrLKXSeVD%ZS+*W_R4*@7d!&1U~Y^hNHP-qk8QM4w#||-MQh&mw&GM=8MxYk5y#Mdg( -sn?v>;G`YxKZ%$Ja`9s{O!HO<+Te0kf-K0kl^*Os^Ie?Hswmk-iL6cp~cTRXV?qjjfu+^J5zdMsvP^Q -b!(&Q9;N?;G9cV}tTCo*$lh;*&Rid*7H!hsW!$E-3ixjU%&uEY(bXzG=?0+r4k@k{)<<@Kob7AN3m8< -KSo8YQCyn{MqOuZD*Z)y6A<^HkSTtT0j5AjqSV&OaHL>28_AhA@ah`H7Rp_FaGP<2IKMmT1)+&$F>#C ->vPYDO?J;E)7D*@5}bR@wDF?Or^~^nr`q~9F8HNG)`5QEtFIk;VV#fljit>Vj|NAS8SR6D2R}0BRo|Z -js)=sNXBU#o8x|JU`d%phqVkhjD}86ZJ-7PUhkqpwTT$+I=cH)2dk#&%a|ih(;9Ny?{!0ai#vTcN^HN -iv?E5#a41J*X&ipSei$BfVyzfGOjNAHpiT5=xT{<>DD`#2#^A}Hyz4lU0a_-ELt3Pd+JLq)c>2Ze>n< -w|_ymU_KT>HiT@#(o;Q{MURhXvj@&KvJ(7%{5EqxA88!+wuwAJF@oh<j@{{MLQ@mOCe8(D}O5o69~N> -V9Zi*^j@SJsI=TTI)An^_za0k=|}|=hwg9yZ84yHiTN&eH`^e)w6>ZJToD*{qJwB({#E!@5q_(Bl}PH -(RQA5=8aVgF8r3e`tyq~&x;%CHh#v%a5gXD`|Z^@uSxfv4d1hC$jG-|&UyKZ38p21d;ZAXKdrj5CcUn -ybXWS=Lp$G^U76+c!VAxk{gLy=uljK6)zK&7rZ;@E=#$<(u6Zq=G<9L^w&P2q&#E`Q^1PiCj;rTmdb+ -2M`Cf7V(30xkcK_(d|Jt6{Y2X_(uix|R5B)la42t%-!|kQ9<8B7Nd%Z9>G2+GYt@Y!rAOA9WX>qb`ZT -sGLezWWCmxt``6ua%o?e}~iK61meub(+1-8}khO@S)Egw8=o&u@yovh&nugLjS(y?gqn*6Q@^@7t6<K -eOo<w}V^G#+8h@%lG)})<-A4d&2LqoB!kH=f|9iYlz!@A?B~Ho<m=q{^8l<+r4M}nEb>8m-l_yTbFi> -Jly%E@9gKRei=CQ5jN&j-!(V&uiuU?8o#*Y($G%J(xR`97;>fj*EQ|hcQme#wwAW<pQP(3jq@&CRMk8 -9mAijFbaK_6Vef^9MPK_m%VTwAx#V$f>5tFG9n>F4-d20^@zdXrDA#8+uK!?TRmX*2?SC?uH5lKH4Wp -NQ`r^PYSG^}h{d)M-S8`vz>%*-p=547OYVjTQ(8L!$EbsVnY0U8GLpw*j`2M>$cPt*>J9^0QFFI=Xth -;F*ePaH5k3QQe{6@E`$xYveepmCjr?Kl1Rkxd0_G))+-*+JACv}ex@pVDlKGrQik=rzQ{PDAkiickO$ -}452<=Z<;-<W)F(AQs{QU%@ocJh}`_U$-eXU$#j-1(mS!9i7R-ue88H>aGM=Jmqos#Bk=nfcwYg4qYw -lqL=x8Q#l%b*Bp--RyY1*`s}aO8Sk_U!^UMJ-aWNP6q4C(z|&}H5F$)s>fRWzL_v&^ULR6*sVWzDkbQ -B_x|gj|H`c2(C_@m`|LiQdJpaykhHL4`IfOYE3M0}B%L|_`KN=<7~9<aczNF++dQ52gDL9HoNu0d+P= -be|LBdTPlmlyH2Rb9z{)lGyZWAH6Emq{`!^PT_1xfy6WuNrY#B2C_ssG6Q7a-|znDMuyBmErn!m35`S -9l+$G1NDK^93p|JJFPS4`^CmtLH-)>fIY=K7pZZB@q(l!u#APRyyAw|CT~n;o<CGY@wA=G|xZz7TWer -PzztPAz&U#dFZ+p{HNq1H-;6Ke&I~?7MT%hrax;@iShmSw8s1KepOFyLRB&i#-;G)-TwxY4xw3e_k&9 -YRCS2wO>}f@u+!1zzavSgB#lVFYB7K-gy7n!D~_@?|JE&4t4EECXVa6XZ`Py13sA3f9a5utL-I41!Ft -D{Y`LD<l*cG-Rt{4CnlTtp@OP(gZm(NFCw|OBa(+7k=pnZRhwQ!<=Ky@)WO6}J&L$_X^ES6BysnSBkn -%;5%;!6;?dSlJld@w9(NQGkM^5MoA$d%8{ZE}n+}JGXNNlC>Guoq?C2q>JNirN&cTwpON8XrWv=Aa)h -v1W7fRm#C6f1@`y}sfM<ws>KS@5_y;MFu`l)<+(td<Kn>N6e%Xa`FC67r&7v7!}Y$%57=x-k6^NnNao -XW7f=#C#0XVNV{0OJv(VkQ#TqqJfzo0ckGv6*3_?KOrW-fu8G9`+W)n#Q*oW<T{VL(c&pGJNoO1;v86 -XFg_p(DZ{mee)*_S8o4|$?uIj#Q33KKWF@pwN<F+ONRdY4pXe?`*Jmt&rd(Xc-X)i#?Lh{)J4B~l!dR ->A7kM=yM4v*gCh({<zrtn`SE*>Gv4$)!-5eTYZ+fZ<ph)8^((`I%bQLzy?;#nhVkh?Fs%4v?I{+1bNI -I`-NIuGb>X(t4A=UdVeu2+U|15@ua1RlEez`{A2KZX)$1(NcOZdb$#*X@)GcV>;UUA$G5z=FGpxH*!B -BJD^E^u*7{jol?rDZesuK+B*7mGNKQPoaZDmMmFEZ2w2VG$DYncpnx}6M5R6jAS3m@{Gn2wZ>Z+^{RS -`aW=TbZsZ-fzv&zW8b3=6RpquYGQ4Rl;CZqBbPnZ_JVd$=auvT8%sB>$R62-Tmgme$%yEmMq!#{;GM} -Q?Jb3aM#EjZLV}Q@`k5L`}@`Brkoj`scq`<%hmdUS=zbX&qP)}=Bo_}TfArX)o5+;h_|l~ElJTX_R1` -L^*cT4$<)TpdU@5_Ihoq)``%bod5>P3`laM~^eclly!Vma?_bQ;rgn)bUSrPIjvo5irAfwF+LQAdI{t -o6qy4?_fIW5ZjMIKLIq-t}jvVcW;Rknhdj5WG|3xuw4fkbgkIvnFcFz86ZStnC7kYV&)qWfO?w?(H&( -}_wcdcL5f;4Sx<daeAjrVGE7fgP0%6Hk?o{#<UK=;?~(<VJz_E^S3tv2=NvhVFANBey7Un~4PM`&w4y -mBDoha~MI^WVDM=8Xl~j0JCv|L#hR_LW85{)%{ZvUbCq7~Pp3S=#%PPkL`#uhU*We`7;*ut_^|?dzAm -x|*#0aDJ8PP<pEN-pk{wb!L-x^ywAhAAOjvosjoKw>MWNYeRptbnUtFUhTTQ0U!F#NYOt1LzkmxH)U( -X559h9(Cid#v^w&)o#zs?OAb}ezwksX`XNO7(E!zZ+OlkIaoMJ_dGF}8ea`IL-X$kWo7^MpxnJKhXlK -R$K3AKWsP)@%_WQw+aoTbDqkg{UPm?w)Cw&<0Kj;cVx)ze|b4cfq?N)<j#PA`h;yo_Y4OXi@-4LFWmt -f2`<k)Rtt%TzQ=VbOwOvf2CWD-0zTiC9m8usL_VJk81xW6jjO=7a%rq9w$vRLRV4osS8z1@_OVW8>wN -c3dAG0TvuvE^uT%m$OjkY`A-vsYhWJDz1?@4*0hn$eW1(VH}SGek^<G<4S#<6^@QMLhPVgfvS|Hl*Nc -?&?k0N>chOf=MKi%^i#R>{xjAztw6wf1kioMBz%esX57-6i`ifmDHp$qvdd;DJ{p6%|(ms21`DDKMKZ -C%B=>Q%}GqM^_i4fZK>cLqX}GN<Zu4K2o5>aK}!+vaKtlMEVqd_3(Bbn-_u=vHEf3v4I4!_5Wc6ZMzL -eBhK=d-{dP5E0O<!Qt$<^I@$dXd$uZe1Ia!(vy(u-zV7aB7j(Scv*fi`F94R@e22D<y#w_+Sr^gUNcQ -SSCe=?NiZvjkZRt#k`35#X<q&%}B#l|)B76N*+v%v}tv=V9o_;tV#XjcR1H*1C=Sr36(Mw4NTreBt|R -Xw>GMjL+}g+`xdgAxrGYPVX3CL2vd4W`8dL}EqzbhKZZ8$>i(a!mB?Dk8okAF)d*eV0y-9a01@vgg<g ->~$orYFaXS92=c-ZnX>89Fm1-<+*QqBsgWm_2(LG8MG}~ZF-AS@ITAesUBH*F-{Bq6XoOQy|b=c{GDo -GO~E;i#%`si%}SUY9NKdI47h6meLD#&1#Lx&9Bz%@djOO%D=R0LDyFGhGV9iKt^1^v_Gd}A(+an00u7 -6yM>D2r4B2K|{=mP_FBzH|HYPpYgI7=A)`N|iIVIbWox`_`B7N}e>m#3snij(N5zzf7*4ffW8oCawz+ -XiQR4Nx49T%i)UQU7RltM<=ifx6UMvyhCT;B^CDv|%5L&xXMl}FPSsl{;l`0ujkzvw89X}Mhg^oWa}7 -+<kzTf-CMJ4LO&^7!$s-DeG=`Xa{6p9Pn8>-^bp(&f*OwdByZ?O5kqjr8?93$pOKJ3lOL`sk7K;|y5_ -z11*3cl5|$y(N2yIaSOHA0v*ns&vill!%0Ay7*2F&y7QDhCDi&t?orgq*da)Z#Em!j$J3Qy*hYU9^9Q -uqzRhJ5MwIb0rX|dMWF83y5b=rAt`BeVEbj{5pfB96C>E2hguOv1ASe?*iuG+m#`?7R-*``fq{xJdNm -J$Fn>oFyTC`f#$$QJx`f5DJQ81)*jhvkW6QEKT;nCuh-TL?rZ3MWEP?4OaM72*;uS$yBRG19h5C-4ul -{a=_g%7NNoq26UvYO8*JrV%^yS4RB`#t2GJU1aVF^55S$7rBmxb|o6*L}n1Vi$8zLf)1Y#kZaAzQ-e9 -;jmd1ctF?P5uz(RM%|j4t-Ddr)}ggzT8d+dBTJ55U!rSyO)G^2cC>qf3u1-_y9L!gaQ?brFtz^OG@7m -wuCcwg^E<pl*61~o$!y2o}?t`?DF&HkGNN^2&!Ms;r#jYT}auTX8|9tuPBfnuRmY=gha}lo12}&b<W} -UkPzRqm5)@a9_3+`5LO1RIHwA)SV^_^uRs4I@UyxK+aXTRdqDF(yS)B<8=_Nt5FM$nXX}*JXCJO7!9? -d92w`WJACss(86?(sKIIQrujmT_bipZmj|g}-Zxlb@D3-ye!ijr>Zo0M~vN=DJn5k}-mi7^ecS9c!m( -x6mOVP(EZg=?JmE~W5egJ&$!@l>a?+xEO<M$yXR?TdDv`@XznHmoI;IozHA5MQ4qf^thXtWrftegczR -j;DsylN;e0bL<?5S`mO@2Q`w4?RX*Gq~RA>)*+#PIt7^4|U#y*by-jaUju!g8govw>`A#kh=1*O80Qj -dKW_12Zi{bJydw84Xw+Sye><jE(4&fKFt4)vT7z15)GdnPw^gH&C199Hyi4!FN@D>Thv$E8H8lPrwY? -N0pE484h}x`ZP!A&anr%C(;e{&;d_Y_A1bGFv=1r?gohg)d@f@=h@<vK8+*1;rm|Utyg$oPra{mS{h5 -EcJ>Uo5J6g!644wxM&T*tmCb9l>P4-#t$;W9M7UxO|$l_a(4X5W(wd;9Q19{T*;L7u>H*3!h+e4oq<P -rF2p5``qL0Q{iS+$^JBr8Xy%lT8a2I^xiArmo8A$%`!;t#X-aI2jjM5CrBW)SFQ{(1O_TwgTh#9~5{i -XHxVo#^~Kv2&#c+ip<(RPgNtW)n{v2YiYX??Jc8!t;L=$U>;>an2(kUoDI4S`X2$LH)s}5bW2K(slK& -K5C*1SwWtP<pUr3o_(~^MTcew_yj&XFir=Bj>esYT;J)?p_GU2qVFYk$lDQLxf~)+<R0+P9{!zTTkH! -b6SM!>hig2KFdqfVI_K|)>l=KkQD;mm@e&Tf_41G-o*ylrBJT$JW1%CCb7vHd^RTNALQcW;4nB>jXPB -al>Tkgw`1r2p^08FMYF8b{K>o;SLPla7f0mD{Ej#K6sjYM5a|G&nz0>(M7WinVdL9C8ItcsU&I+6Iz5 -|=SbNIcZLLPgO?xW+7_fW`7Kz7PW9-xp{gKmE(xfN`i#M&gcZ7BA$cOwQNjzS#H`X1g_uYvP{U0)tOg -f)2n{CJWCbyfK>)%B1Zw@-Zr3qRsUb9oZd6|g)V=TRzz@oUl%S=UMEW9V<V&K|k7FArzeYSqKye6EGC -sVt9bmiJbA&L3&1Z;JH|ZsD9;-&G=4;gg8<4A*JjLCi+p9v)_WnrnWuTWE7VI!GkcPm=vx1?8&X*8;g -*V?ej3Q$LnNLNsS<yu}r3waB9w^5_ozdsp<K$fI_!L@vW8Z++|M$MvCbKO6!&FwREsWk23`xtwpb|C~ -4+$_}4$jQhw4NH@a4J1N>wH0aF;ag;Gw*|&_8NY*Gx?!#N_4{Q@8QU;%D*;lRmVWiZ$ET)yZj&9+8Zo -zHx7!7TsZ41}M!U(VvK6P>*K<}UUHR%PY%Oa<1$GcG9I~4W35W*(2Fh_fb^WWFksU4=f$7<-la;@3+7 -twX_CHyy9bVbK6@c9Ei5^qB1J)~F-{e4Vp=|jQhj(FY<f;L6h*3<7)-T?BCNvx*qHt8)SMC}|u2IAAX -s<WrOoX*bk^7(luZ4*vyRtMpaz(@BCM|z*CMjy7pdrApzo*~?~4ZV++F4J3S0{7Iu@R%gQJ$QY1J-^1 -#@D#+Wh^$@$9pf14U=@2_tqpR7ErGBKcwQ}c3M+@Ok}WMiz0>C%dh|gYgP4G5Mtl%)17ay+IpQ(I?-B -n*^c{@)5r-p&Bi@UcftZI_gt!IqZN!6!UnABd{(|`FFpQ5_ins}J4PqW*Dq<XBC}J-}cf^Ci98V)&Mf -4uRu`l8n#6-j_#3hKU5H}!hMcj?}KH@RN%ZT1X(T|8D5p{@hi1#B}5FbO_gjk07F=7qkX~gdl{X)<Wh -=UQwAWlS_jhKO$hqwxH1L8KscM+=)zeYTV_*00Z-7@>p&l?bT1iQ+kk&i*_kJtrqK4O+4UA1b8!4^*k -VeRH9Q(Dd(a>+g3V2j8xS#z=s5jIO!B%cu=Lp&fn$}tr(H7A+B5}Jg$&!n>^Ey`*^8=dHh)!Q=WkYK8 -VD|CuY$O&l*&65q4MjK6rIi!Z$mC7U2-%o~Ft;Tedct=={BMV}qai`~`+OycZ(&$UZ;K}B98k%6pHuJ -1WgWGg_mdzNRZ!;w1%rT}KA~N(A^13vcnSt|V5Km9jMeD6LHt9vkdv4J=dax?lqPOIS!4=tKj^1d4RP -jbrdX|A3F)5F%BoSFTRs$M5jh58OelN-+>=ui`WSeNTu$PGELvFiN_~Ns$)Km+bML9+y=scA{E+FKYB -ssq{wgF=x2Q51#`f@k4k<6evsVC^W!pV5bX!3}hRD=B9*=dvFVkSk4nZ)g?Sc4(c;e%6dSjH%m*=~zs -C0LBP&M}%&b8;u;%^`cqMEVx?oO~Wc-cZHnSe-n%lGdtBXT?v76ZwrNv{InLlUZexwT#CZvU3)*DvUQ -9Qs$5uQoPLq|Dqs9d}Q>Tu-GV;d?Igeu?7okLZ%c$M2_8LgErcYmKD8>MU6@&y_`Z5*qhiPkX&LdEZ= -G~WYa0qFe~#Id?U$jj<?;#M;ooSNJv6Vv<7FH_yk$%q`VY^nKoWXMRU$`v_W3wU~`RooGojXDHps0?P -C~C@6@g~Nsf2*y(l@qk8iW&{1(0!B=PRP5z-`DO2rHK2zkdX+Mr*od@&y(3*2t^);>RJqJh5HU72jId -z{{AHOK`dWTAT;IAAiHjjdIjsbR#g%^c9cs*T)vtN+Op9%2s5(fV?g-lENk+(kV^^~B~FX+h}=1aI>E -SZ@Rgz=CvU4F*A~iEdCmX70#H_MJJ4+~0cX!%V61W}}I<8uFq?f?N+J^t)USFHt7f!)D5u>JOZI1ZMe -*uJ2=nknL_xZ$boqocCvx(X$dla;3@8Fj${Kma*@XjTS2_KhwE}g~b^1SkN5us9Tg3EHS3C^B7JkvWN -O6EFzYWXQ}oXlcv+}2bjlVY5z)YdWeoLAxG~0NGR(O9CMr8EZUFkVEsr-qE57KoCLG=79*YPnnU)e9I -tMq-Y4WGXt8!{1~og}o|a~?Sm`1zM?KE4+n`sWwtk6y3NPVwR(tVKU(i3X?{NlRF}^(a)EQ~K6?Wil& -d~_|@iBbMnc(LJ5%R@-nwqp@&Fr9egcMs#BWeBv8T<zhmFB-^x{K;n{cWtj(Lo&V+5Z32@ptbZQz;HN -JpQBkG~*$70rB?sc9Q?{37-d5w!6j(9xmF2bNl#@v=#Nl+s{+}yXDFwHmc?L<^$XxjR$exoXWqMKW^n -H3FrEK(XNQUOYomQd|N%ZT+{0D-)`FfD@W@u=H&9$UmW@Gwfn#O_`khfD31S+Hxo(a?sAFT3RjAx75O -WABYzb)0(%KJtXjUg?m9)?g9QvrA^!fCPrj^aMgQ`f9Ce6$|6%+v#J3^-;Vt!Bx{(W88n(=9HNNh_m) -N(N9`HGN|49v5aB|_vTc_ujAFVxIca4x?5Au`^*l)MJ_rC@o!s9aP^}YB142R(7CSG4};`P{0H};w4( -T4o*@qgz5z3jvuD&h|q3m6GFxTlJw0)_&b0d;@}0h0hV9SC^>umEs9ML&3Q2do3!3P=~z>;S9)Y<riA -EbR<IfJt2l=>e$jN=RS8I>3SfDz?$v6M!Lrn*d`0cK{Xu?g7+vBjkNR|6X(tqVrN-FTSp)5qWF?-TUs -mL^K@B0Bh;GALwuz0h4;uz0A^74S+LM2Di|@gtU_kZjt?H`Z`hyc!8W%74@fFFE#b2Yl@Sl*a38_&@@ -%#K)81Uzk~#V{eX>w2?<siRGOjSC*ZZvC5)rt!|9$<1w=i9Vja<p;5-yCk;*Y#J(8~3sUv}a84zAMii -g($)&h?m&Fv}!tf%~L@CTqKl&%ZWONpU$FHgNx5=!^b)JqMaTpwMe@-0bLg^r=~m5_c6-9szM-FGbAD --_BJ*htGUj_$QlFBK!wIf|E5M)%S%Ito=s8p7z_ZFR&qoRI4fzdD@T*MO*j8^r>sUmaj)sa{H)NcVoz -OVty(UH+4(|LTZ&65VsbpsE9GfcQz1AwMZus+<D-wRFj?Fp7|B2rrvP_ufoX6-0A;8USN^LB7*zy+FO -iKobE@*O>eW`a)*Xy+rFs1z>NfLDdvTf8$;+mBbTL2=S5<=w3T|sUm^y!Ivy0()A!z-z;k9St)Tg+%p -4Dgoortz}h*qJtRvFiBPZ7c}a6G-D|3jM9!moj@FSvK>q+0@x70bk$@%l^L7@wfTKAD%ZV79O81J>OX -@Vb2WG0O95Evu>P3|-l^O{d2w0v)+ofL8Wy3X0s$&~E?E|bZgCA5WDz%M}RLCzjm#)1yFEt^S<bmH+= -cI}y9P5_Sy>azY`7*laXo{-fL7GpRs-ghuQ*}|LewgN;ELA*A_wYO~6+A-7Z}dER4EzlGb&u1%a#K}J -kJI!9RYf7k!j({;;NR+19Q~glWGOBG6Lc@%Iw|%^S|8^n-5Of&(7pgmseCQnJM_GiQN-I}31A(Bmp{e -ME0yolgfs!qdz$V^Sw|`X!{B^WKSM~M2F?e%@f~0uT$jAyJfj=w-Us#<K2Oizi>lfe=w29lDe^@^o|E -cTb(`s4p!HHk32o=elI|s1&){FcaiFJe3n9^ffm```U4U4(mA0c~Deo1!mtL}@ewFGqsPbN=`PECcfF -+R5|20DL0ClBszEb`=A@czXU#EMhos&wp@pjU%jqdSS$2N|w0C~v{y5=HDs@_5M>m~C}UfycJda7p^A -@04Qy#js!{S2LejFOCQd2h1wP-=XW>P=Eb?xu6hbtG>$KmUq$vv;mab-Vd_PdCn`{z-a^_g@un@$<Lg -EnY7nd!WCCd@}a%cHICN2|RKyaJP$YmF0w7YID)ezk;7Pc@=b>8PpqMC15PXuiH=CPl~GSV?wUL`CD= -j@>gAQtN4_@8qerfQVD*7c(sS1y}4g<FZ_~_8zj9=;bC5`>T2*O$mybnNz~pWv>lz7d~0~V<{DaW^^) -&Vejb$q_Je+@`YYNmK)rrV`!l^%{55UAMz^BlG+weqH=bSuXhy87rF#QH`#VAXUN1GB;PD$z(thH+RQ -e6o2l<{N<RIA70N4On_AT`DeW2b>Q+twBbi>-cv>lzH@%2(*9o<t$FBJg}hIsyG3GsmbPje3Z13cpbJ -<rao0>7j6l_VtsE`{(iz*B%B7vcH_SOEAwVB<x)r*NIByn)7te!PL6Pf4oUOT1i>-^2A5;)VVI&-^t0 -541l#FV$Y=?I`d^emzL~k?!RN*T0{5z9EQ7fOhG;s_tj#$Eh7xc)OvK=M-ZB7r7bTD}JN>#|2gK?{K| -`>vDAy?T6Cb3jc)qmD1fx|AO*DxEb!wqX9E+K)Y5!zt&9aqmI7M9<Dp*RgHk_Xg@AV<O3*&P9>2<8sA -+aE5T2V9ui3fUgRkeGhn5cL>>W5^pQw0<#$M=60otoMD_qS`AQ_TFVu&h1pS^~71>dOdQFz90sBIDU1 -y1O0*vh{k;@R@-(O<&UkKQn_D6un?xO2)CAbbiz4VkwKMDHhUJ_hypq~$r$b6c<57+~!yGw$0nIx402 -E+BBwy(tcg^Yd@oY&{2@_sZOT<7{rqyXX<4uo*f=RZhd*Wr@E64?adzQGdfe+mI#g7z0UM1p>xj${Dt -hjtw}RD$*e*WaO3FI;y3D<EA+2;9Q-gZ3CAv3?_Dm_+I!oUTQo*Khxk67<t)s%k(T#48*{_18&(qb0H -xc+(ir(~n-?;gkSO8V`N}tkX&)iOMHPq!2JLLL%z^aNjjiBGG^ilO-|^FeyqRC!jwIoeK5keyL4e47F -3Q(#@ddJ1Z3eCPBQAnG&=YxZjAQcwVZDqkgEDLK46ZkZTg5UI8nN60rehER<NkRRH)2*dLiGvFl?4;6 -ZAK8OjM*2iOQ$yhwt6Az2k^k%&9JAGAwwoxSMRWastjzgS}JKVvb~2l?ho&|fA=X26}aAI*pM0qGi+N -bJ5O;{obV=r;fjP!6(Gf`0O>RIprP=e6$&3Hk@P&O9QKOQ5&$5s6)AiyxK9NUG;Cu;2YVmH%pq-5-TK -A&~?Kr)xd#0Z!K`m%x1zU4vW&NY@Q(;J${gn`{gB7gdOK{c0H?T^F<ou77lWCJj$TUWm8@u^Q!#h;*G -E4Iha}*J{!5Jj7x|x^9WuL)YtsfIsP)6Wf4)I{NL-_K^&MTRi%+dbrgnpo1_)gx!wQJzWc2<9o6(*b2 -6?oxKB~fTnK*r2AE<;Z&jPi8X-q0W%bkuFsB@lzJrg3%QII!s))i1ucZre2ZHMr$^Z>1EM^jqLuLKR> -JFA32$sA{MJbZ9`4&pxTclxkQTz}dvtXw{(FH2Cwb_ja85hflk}L1lsb*TsMo?d=;7ez^(ywvBM$#}f -%`gm#pkrocJRQ%DtXT;dK3XyJB|Jq*Qm%cr~K(Y+Zw|6f0c-nq85%JLxzwkQ>KtPbLJ4E(MareJFn1! -0{B-zii?ZMYp=aV_U+q8Dk>_-@#DwI&6_s~4q+6q$Uqt?YfIKv6|^PoKg-QM%;@3fpRX6Ry`G!9bSaJ -Sb92@8!_8HHfcUdUy3ahwAuaIST*?~`S5;Lp&ZZ#L@ZZnP*VC9hcWI;gG9+&P6nXApbrVgWmUf-<hiL -q&!)a-UKSO?<%d;T-I_04MI>_k(aUSCOInVlo#jmP5{3#FkgXup*^XDA$Z*E?FxQdzvVbs3shp(Lh_B -)j``&V3FRdv1UcdCQ(n{o4_Aj0)5&=1_>{X?AwZmK#AMM$ImQP=KV-tlKX2Gm6PjYo%fh^{&eF`l6AQ -eS_4<FHU3f$^p<4sY$Vql(3)9|*r3Hm<n|lCya+u>Z@K6RMi7A1<h1@eemQ-<b7L({(1M@xi~BHZ?Uf -G4nrF(ZIzteic1xxtQr^wu$$V7UIFh<a$8GLv?Ni6QBtMIDOpUBNY(dQMK}sFrIU|39Wn{f=_b+k>KM -7A5ZwShfhE=ZRft&*8i@Zj~qFYOrJiT#K*^zB}<mLwDF>%BC>7UHnL~W9@fUc{`zZj;lc&Eotx>;THx -8hT=tG9t%(QB4>Z4>_7QpLqn|%Y%giAUK^3Ka)ZF~gM?WlpmXP_-ProgA8@@dB;)Qw5&3~mWJ9J^ztX -UtWMUUJLxFB=tq8ZK2dlxi6xN^Wp^JXm|4>iC1(cW29-@Y|e|3l5qKmPGY8DXvX0YV-O2x#{83}_~9_ -#wCXh&Z13Y0v#ceWYW4y8Y~FzkdD5ph1J+UMPf&A3vUig@uu*s3_*UnKNgS*|TSpxpU`|`|i7sJeWF} -q^GBog$oyw?Cfk}u~=CDv258g@{)Z5*}h~vdF#Qk<l*#5<cZ7(vOXt_Ja5sF_m+<#I}4)7#^uT6onkZ -jbnP@!{c<J={IHn}{<xV8`?Q%%IM_@^ecnvQec4Rrf6+`Ljy02MC!5L4GtI;bpIPUc$-IlrB&DvIBwu -bO%a<=FD_5>0>(;F!&p!JsdG5LA$fix3NJ&WvdF7Q?SpAljm65%B_p-k1{rBG|M-P;d6<3<c-o|F~$t -RzXLx&ELFTVJK9654?96NT5oIH7weEaRU<mU^u<mfNW<m}nAtX*8XbctO3`FnEyS~F>EY$SjD@ds-w^ -iU0jD|jp+ZJ^Pp;iByg?ZyXA_B-GN)-?N(@y)}?yylrCzj+ZUZeB<BHor-ZH6IcEDd`01`#|~-NIxFZ -M??C#kUqVU?gQU}tb+8LApI^#UjgZBAbq`4`u;=tZ-MTG^fpMp2GYL{=|6__M<9JIq(2Sm&qMl4kp5> -#|GQKAq5a|d76xs79$aVspZ2Z=E~;wlA2JiI6tA}{ndOKNP*N~o_+)q~kR<AjDC+_#3MGi(14|JfH?h -2g_jU_2bKVTh44|1(nxff_o}!jgS(0gyW>P+)wAQ!&duHQdLPW3M?|c02uI-tbbJpJLz1H6AaL!zg<N -1oRm)F_#Z?X~Y@2pVGAca1kq|mWB3Y}P^5HFJHybAu0Sc@?{ColzL89s*Ld93<WhF{3=Pc!^_hA(6IT -@1gU;g74}+c@8Uox#aUL3@Vp!0_yU>Ny!A%^wsR%kU2~{1XiS0>f`%_>WZZN=GGD>B=_SlXE72Hrrv! -Ue^42&Y-FDLkbPbP-xOq3e9;*p*5Qn+E}H~z9TAl4Z{y(_z4XED8pwnd_KdQ82%N8-@)*2Gd$0^<}kw -_XZZR?_`7+8dwGOZ9$_VqVCE6_@CaY>2=$#w`Ed{_XD5+zehw)=ts&*-jig-IM~(1zFg)HF70mFH8Ga -hW&u92NhF{C@7KY!<@Vgm)FT)>Z_>(GlPZtMnWB5B5z9+-?W%#=pek{YsGyEKeU(N6qhTqBXpQ_-Swg -hKW{}dJ$8WI}fd`!@U{(gOW`}p)7-*`48G&(9OJUluqI5;FcVSt~nZ=c@d$M=#Wgh%md{y&O8goh{i_ -rnF_$7@{YqhrD%qJw$(h_I00(2#_?aY3IxK0RIMqhhon(IH{sVGIwv2Hx%OKQ`eKlF>2IvW>gLyKBP0 -fzA<n`}EZG8V`6LKRP-pI6C3ZF1LI0dA`8UbwS?*h7S$_a9DK09bLNI?mRDW?CqmrB%>O~Pq^)mUAo* -mMqJ=8F6gNNd{{WnhT!}kyWDxN3$+RTF$2RV1c$`j7abiDozM*f-0t1A>z{79<(BRfFayrVh{of0YjQ -yX*nsn45iwEG(J>J*J(^s==Y9K&@k3+6qa$L%W5(Up?Kam1IN#52zy!rPewdg-axGyrE^zTrj6Y~p46 -`^UB05G8A!d;LXZ#bw2Wf#qG>_43+_)}Xy6^>!=M#qAl%NfW;0f;I^LLFKCs63#cs{IC+fG3p10$ltW -0=e1dI%!!ln=HK9vKpHPn%9{1A`M{5@MnvTv*EY<|t8NLqfv>ZuIDIpX&s86%`)Rcs^l7fLHsQJUlu_ -GKN4gCOViE>C*X-;X?xlw{PS5hbTT77RtIjWJp-prSl01p&=7Tb!^vm7=H{)!01uom*!6h!zB|(-Fib -iEzXApv%1RHTuJ`0f@yE=+;L(;SWNIJ)-^>@kMC@eUY$q8gfJhYRHre1xH!$f4<8&hDyr#er~dHx;jD -;J5kp71omP#{tceO4>2_L)ZrWnpP7_rwY3P(2T+4|><@L$umNe6w&E;~HV7Gj(<vc~^bCV}e7Wqg{^7 -zKwqbPf<l9w8x6lR7go0ml><uB$a!>c%_U_Tdmh?Kaa&YU5ekIz5<ys~cHI%WO(^@?7vS4<|8$Q53B< -rR?+zW(~_B3JmhvPfCS`9?YC3VZhKQ9k_eLy;RCJ9<Ppdi1Dr?AS5o<jIrDci(-d{P@FZksF*lcTV~B -*I$)2KasMLzwf)C^0NUw6;W8qV7n}s#({1j2fAlD&{>quv{@NMJCsROrOcrN${ISXY^38Hzw1@-91u~ -c%kaS;WGJFowO7mV(F{M8;pZ^?N`_z0@S7O^9frRY=l+wY{3lQOznZ7W_wsb>)=k{fa=UnuP&e;B0Ra -JcY;!kFw{G6udiL+()v@DUtY^3T`1R@I+b5v2SEqir^7n2%d-?kEwVl0s1o#K|E8Tti`vu(DA)qr~(D -Bw=@9N&Ok6*ye9sKTc{h-nK^$+m$yv2`U`u(Bft=+u4_7Aw()3ZbSwry|e*Qryt8*l2?|IV8|JK%=^u -O7Fx^JwQ2fOcp5wiy3U-ZymNZ#Vbq(7wGt+gHy%ceLrwXBp&9{?7CJcmJbrFaLl5fBan>&)?tQzqh}C -Pk%vQcW$`Xs%KB<9Xv}qDavSU;<a)0%iVnFp}Gdw;{|Cwoclv~j$5L*MAM?5ZAHUQ7#80*sd`)G((7> -kyW6$gdI@~-I=|a`^ymSmqT^9^ecQKhkLM(_XApnth*vV<(Ij|Wk>vRGYHeKO-g2c2T@8Fic!c_EHf- -4N0LPter%#{$`up#{|Au4F(Nm{R9p~ebvuDqq=5^_@!-o%VeEaRUpYibU@E<*TbbyN{Z`U|@T_yN%HT -;9D5t#qbw{Ks(t`WTI*fL0C^PW0&YVa^_{P~VUhYmf<>uB1!b0>ZC%{RpHlnx#|hz%+_a^wi{`kQc`X -&{cXpV!sZeap0dxqtuumv`;jwInn&6wir)obVbdJm$Ew3m3?>gRA57t*&!;{TUuj-!&~QZE!<F!!L^S -6}zp)|90m0UbaCzi>B-F;luj^KgLVo|L(i*(rd51MvNa-R8$DOj~_oyUw{2IRaaNjzJ2?|b%5a<0lyz -(m<<~@Zd|-|>(<4bvPCRkzI<XvMn-skets<H)xZs}wDs@Wwd>$jt5!X9&pr2mci!RQ;eHtRYVkjF<_v -Kzv!++CUPGCO`6o`Cpvub1Mn3P|yO%!s<P(7>%SYgj&$YF+^x0>hiSM9EcFuXkk#+9u4?q0Sz<PIq$E -^G1mtW||AAdaa@y8#(_SIKk9pSlt#&t~RKiJ-eG7kBGy;}S^pTb;?9r()*8f1q|WC#9|4*6MjcUoj;o -EtmKys@i)N52;Q-+c4U)htIJ)`=CMVfXIc0)Obor=NZ*WboyeUyAR*5jMd#ERF{b91tD00eRpExxsb- -^WJ;!3H%{Lwts>ge)~<{W$0}D{R01f5$D;4@3|WM&!0a}9EODc2L%Q7g&v~={|`R+fVOShMl5sUoLSf -~_z!u!^Ugb>1NW+`Dq$-%H8tWhXn+rZzQIl)BjC2>d!pn|iGn{Q8uAWNz*|KAyNCu>5>0-WsN^`&x%1 -}_u&s2zBIYXmckI})rg!h&Lpg`fXMYKK2pWJdcn-dT9>@Z?<1=Lc#TQ?Qj?dsZ_zira2cQLbga44R;X -9)6gGAc>M5Fc+4S%0#a23<Ahp0c((Dw}@pVx`<4-;Lyc=4qxqkaj0_VtY&_{%P3A^Wx13G4v+^1v5F< -7<e*K4$)d2A09F_lWLc8qyCDoxeylV;@oAj>ghNtMLEnr=Ot9s|ODr?8CaS0yMB3en$&%fgS<J=I8+5 -!E?w6dISB3-{m!%KxiW4fA42b8bUuJ8q2tjWEzID-elA`@lQQK)O&l=zlXUJ{v0z%`hVy@$0I^_mx<J -K@D;LvUO_h`9k6le8T1}@A&;;Nv?*T_-N!UUv;L1e<fLItHPMI<oHPWoE!@4E$ZzM><Ilc$O`kq}hO! -*;VQ26y&Cvl}znp%7|2U7h066#=b&EU3HVPU(CyHVkBAABqQ`DOF1NRp%hyTw%|4bZbnsm@0yQHHznK -Vbog$oyG-)rm1yeOJpoD)pX&(;bg9{QT-{;!B8)e^;khEH7f%sMk#+VeY3dxlTyyTfVE1GYPDnmz9Om -&2dsyn4uxAwKNSR{($Li8~$8d+4=09g-I4I`rts`<tm~!Duqh8$&N=jTJPYJ@PHlgDx6kj}T2@oFYF_ -*)wQx+4Dg7B=)I&*eCU58hTVXeJi)6&EfCk<I|}B9ODt^e<u&vFXDle1?&OeB@Muz{T@}mFr91*N0Vj -27&0&o>zM|$B=(;VGY#>K$DfZnX^{2|8l*kLCk=X=`TizRKhVJZ*SyB|UnPe5usQtM-wXX`Tgyj21e= -p|NLoMx;=$!~3;4rNzPdDoN}n7>B}{{vY0%Gg;-7VzDDfoIP)GE@ai=}QCq;jD$(})jv}e#D?HNAFZ< -`qACwKf|XNWJHXEk=vAiFyq&Dn^g1#Rn+5wvO1NGg3|6cuMP4fDs)x%v}y=ocpq2~5M(Z<q#^Jx9CjI -pl!TCk1`rjL*_1`7#Z?wl(XQ1pb`guO2#ds1N5TD}X=zB971*(14sr(t_U*Yh_-BbBMRd8PHzO9YI@i -M$ks4!ND|GnTG9aXVcl!-?qxxe9LsEu}p%bJ-c!Y-yO~44}T%`f8@xKeIX0kVXwd&xB+)b3w%HPJ=Qh -wn}}72ZD>1|1<`9v!>c(XseI8WvNH|t_WV!wNo&$VX!YZvl$RPt%V&nslIh{}%)E!_i$m3d26c`x(3N -9c4uAIdLjM_`eBceda0E`k8}<OarA*-C)%h{vFKC4RznM3d-e4Lkn1;=ZnFh86*fVG_xM*1GqM-mZJQ -hkTQ<#Ps;gmByLePK)pEOdHV+?((dHsjaKnz13fo`>0$!4<=@*>&QGHJ<9e*N`Vs(v|%b}b)H+m|v8Y -zwb24P`EShELMZ8%ygm$5LTNFg=&9rDtb_&@)WKQ%u7$reQJDfaacK{N+IN{s;K8E(rZ+y<P!Yo_gvj -vfJ%~p4QMIX#s5AzE^1Xis4krG;CuUggrA2@JZ61b?lQ~$_%C#GPLv$rXincc$#VWE9=qH<Zyu~d{T% -i$9Uyr^Zp<BOZ^`;YE)m~0Q~au@)~Jyr=ulWe*N_#eYxvJdTVtU?OYy2+g$d%NoCI_7Y*xNH2j_QDF5 -*gT9xXg0Zrr>9G@p}U;mAWzwar(Z?{9{9DmnLnlvdoJw5$h;0k+$4dmqH2pZJ-btReL2%B<WV>Q<f?I -~@{F<{SsbJ??7Ycc-;{*ZlSWF+K3#l^)U_d+hSYSk*5KYxBB4K2~pl1$LxlQ!qH!k(FiX8g?M+U?*|K -|#ST_MPPG>q`j<31l{#32`|qD~smNolC1%uNHRw`RAVtzk^(;Ia+`>Vgq~?av|iSSP!7Vp7&bj(ZyeQ -y<wc+XwNdoSnIOq0=9)K;lF+R_D-DZ{8{2ZV8DQ3GiJ<4pFVy1N%o^c4hDmPCQh74Q>ILzzy0lR^!)S -B({s-~C-A}g9{7R=!~(<#Ne9+2paK3AdWcwvIrcmgPWy|1|9N`XH2+eLG2fYEz@FigUd)aG`d3_kjUG -LERZL9GQs@us`WjyM4}JC3SM6-W#OEkGJDb=h2;c9$_g;}By!F;wLLY!TaD|MdUP*a?KIk6SImqiE3) -ll}TG%toL2b{)Zub2C)(yx5*R@7@MvNHo+}gEk#Xbn;cG)uJ=H^mdTpac4)r<P|>qneh3tWH)Y(w2ag -Y53KphKtR*zm0%tbdfY|5eNJ*_mS?KHC<D(bj*=q|e^lLg&w&JHYa8_5MR)VIi$pvEs~{HEU?uvSsHU -dgvjVHEWjOJFhE+E`bKv1?U8Bpu?RO>_H$7L+=rzVJp~=z&aAYAxDDjKua@?$^ZEa@aSsye*nz3tINp -9IP&C^PyPlxA9&ya(P7h)hW`Eg(}D#Hgd7kv<lc^?1NZ`ex#x?u0gkW-*a+;w-QE$i)oTx|pOvfJe}i -p7|5=yxOP4PF2zDAB9ZicCEfR774ZuG%G?e1w<Hhfg0cemNG{|)?)?&!7q4&TON9Yh}Q|lITDqPRL<n -O(E_a3%+^X6x<hPW2|p_}N?CG0ojH{gXm=Xvwy3HuET3nQ&oO9KZE6mr0Mz_`=VoNh_mkVohd`~ma|{ -ur{8`x}aQJZr1#7Xp8#d-bqk!+e;BD`3xWyzz#h0sO(fA=`(bAt@<|CQO(hbjxHi3H-rp@Eo6kH|zlZ -2frgXh5jJdh8@5LU=tV@KA3U;jmKHx?d`2)xf}NE*;A)DYd-B-i$CU7=RcCK=vXfTAC@g~Zh^asg*~v -miS<qB0Adt)EMeq+BK#<L3je=p(<Uk{Efq1atgKAHf!EBZI`(akaEx5UxbNoQRw~ZAM{DahB7Z~v1OL -zVn2+zUHynWr<PDo;Jr%h`T3VX$t!(QezQNZ(zoj0+4q%s%3G@UqfKOKEL->qwAtT5G@to<!lLz28+g -=H2cl_15s@7q(ZUZ;a1s#GdtX#R0*k_42t!}_gcEG^Tz!#xGf3PM(2kxM2!-fsmW7OSn!wpx9dn5ib| -7U)$01eVFHb)2e4Ijj@TdWhHQ;4<A?CA^qAsd-PpsoYGhc1EVu%SZS%zyQKZ-T#C|KTItW2`$ZIAV|e -;fEil7hZTl=(n2hvg11F5_BEk5d(m`tdDSByZ+z6UEr@?|8nffhh8EEfeyLf5B~vQhj^r>1H9d`WedI -d;)_C`r46HlZn-y)yb0f-GqQfbKC`Gzn>POr?v41X<Dxo;QRg--$pl@e(+POch3i2Z@P%%{cY+p)JLj -jCYt;AO;SXHczJ&gB{9Yl~UoFuh_dI3&4zj^-kb|trL1yqps3o8V1zLbR&v7k&rbYbK`#*9m)sjq*-y -{FQchu$3p<6iq>tFv8eiuA|y+YrCKkR_@(R3Yg7x=69KiN+-?*D)W#7^Wd@PE()#3RH`@EB`O@E&rI` -@4_>zQgCk*TRqSnnKhynC9z^yTBj1+mfDNPT$qO2<PR#1^5gaq3f(izj2OG$Ff3P?RK4UN5fm^|McJ7 -F$eB@_;(+*CmQ8)aM`(F!9}GV{T94nL9L<$*E^5=={g_VxQ-sKqjH^&9&Y2S=FN2-E3XIsOI$~C9z9& -gHm+kk*Rhl9*u!-Ub{&_vj^sRg;Mnx<b~MU0G~D0Q&ehv0E#!*W@8kXs_w#P+MSMp^#eF~Uat(8NbM7 -0+F+VyvIe8N2`{C^KaT_*nJ44Qm$JaONDaQW1foT3wqR4~J8XNY4QB%0*O`?ZCBs%z`z@;S|Kx_B5ZQ -Bm#wcQ-H=?3^S&N<Jqzx|f|(s%5aKIQz}z`5;XoCD);81VilAI>*U&phU=lVL9ub-q!qz1)w^5bgbeD -0q*U|N9o^zmt8qk>_ks*VE;_CUXDWmGl3`{S5ou1MD|n$H1tWqTYx)7wRk66UScc$7hMEe{5B)w+H<6 -vSrJXo_p@OIN*TX3F`;MNBDKbBKT_LvdB|#4xiDc)?KO>qQ--IC-$^a-@%?dYHU}UA8P<!gQoL(;W4? -s$2u4DB98`7<eCS0le(c^_Ru%ZdLL?Ko9mm~x@gi)yXk|NUw!X``#lff3F6nO<DXK|@;I@NneW;IeDo -Ai!U<>Hbjnd@-B;c}pw>s!hfrr6&Bu?M>SPbZ6kfk3ah@Bez7GTPM-B{J5P!C<O%r=y*bl~@yqq8XFD -IOJPt@ClKGryEZK&};A5o)1trK;^2j3H*RdRmBabEAIFJ8R(F?GFL=Ce2=w=T^I6MKo+&&58XdVbViQ -9pjbO&_(c8VzcFs4+nw{oio<2RT3TA9bzNz5Whd(8^u)3FCa{e(c%PCur#pO>uxe#<}TZu&ZV|*rktd -bviLWualD2u3a0a#shOh&v8UUy$yS+s4rkoc*_eJSF9PH_=PBwaT&AES!;t$px&vTA9=;Xg$vV{ELrl -Hy7mejux|ohpkaR<wI+wF-iJC9_CukMs4=0ovD{T(S~ShspI??La1i=feW~{CKEHb{*u4e}`R`g8Eb3 -jT6=6>kd*f0cu`iDL3ThLg#^suS@$_+GuJI~;9P@rt`6DM=wQ5z;OE0|?2V2B?ANe`x1}@+Mj{A+NqH -c(K74}tauD$IIuKEIO0`(Ep3Uiag8+m}H_R*-_s`VeX^~4iTq_h8jOx6dmF2LFjJb~{4FV5C|Lht?~R -@4cwKV9zHUpJ|20(GWmTy?S~E*#K=KJvT|b3go3Q~Q_eGuR<=es!HiUAqIHu2eHRu)9puSWv55!8qi& -YK^M)JO79IpLyn)q?ccQIS#cU<m13YuB+vJgTMp4fIq@HG}LcPpSWZb&FP~`*P8YJ$gvkKT9m$W<;pb -h;n`=O6@CwX7qJiiAG!d3Ko>E$y5{u#(U0iV(SvLgZu&SYq_I}k()@@i*yq5WE_jUf729ItUb=fNOv( -nbcxz28)gSwaPJeaql0MG8q>t-z9>ny`#(y6F204FRT-=wz!NFqR6}9Qq)Kq%<>8Hi|4me3)Ablm|1K -yme`;<P^KTfYL4-xkQNPRRc97mh}nL#Iy9VWU={xf#$*uh$@b|L7<$;p}h=%bIm9T*r$k3asn*ayzf& -lh_aa_s}2;|TuCdmF(I_n3@^G5NavtXnPSe**>#xS#D_tOF72QI|n&iSsO)I(4d``*M5D?y`|_T;5yB -!{ff^mjA$?`H#6d|2TnKBKD1=qN2q9D{z=IXO7@I{DG{INF9)S$Wk9TPF$QdYt~HG<t)yT@Q2-4^IvI -A)dRd@-WQ~#r2Gpt9_-QIfB*diS)jhgak;Tx0KQ8-l=q0pBgd*=n4eGbSQ~hKeoArv$;Oph54p#WF_7 -DV-`LBA4q`7Ibq&~ux{d%Dz%Kv}xPTY%+whsdbLY;T&nm5}Q3(5Ay?S+$UayanYi`IHILw?mll=Yt>A -w5!6S&EJKUp8bb<i8>FK}PtrcImligT^dnkM`o{Lk{`%OAsd*po-hhtEN6;gLrk5jAGm1+GN{59A&%@ -@3Rikhe1pFI~mljq|(jVX5~d5RWo5Glg%!y{d9w5%L1BK{tHzfddCDS2?$sAM>!U5&pk9JY){MapOi> -zka>gD~4~xo|CL8UgO+ie#|4|FLVj?${ZZFC+m{H0Xl{n2lk(~Zrv*H6TH^B8|iP&9w___d>`aoUS1C -UJH@<Mr8xIbuC?KBO}wtL!@jQM-!9uO_Q(yc^=R_9x9C^;n_cza?l!_H&hGyFm8<x>UCm|j<apTQa_3 -kd!!~T#u-RZRoM#{Pz1eL3yTxK@;&<$J`)M9yc1cNz_?@r0(P%VA>2$gs4u?a?Q^qjJnQi)@8XonuUA -uN+pY;NdQOo*w7IuiWG4!>R*C10qbKVCP%=z`YqhhG75+2t=r;)?Sd`8+7d|AS`&NUPA)BT**40*dre -ykt{V=ma5Tob8t!K72pHSpFSe;0<&ao+;p1Umw*^6xvUx0`6qY-esb&9!#I`Vs3_tQD|U3FNiXTE+{t -R;<Z^JM<s(7Ux8X9On$L!PcF1j)Ao})?QfqVcmyyXArMDk;5RT0^aajXjsD_Uwq}CbHo_xcJhLAPY3% -5ShInDkP~8%ya#pLQxPKHLcWJw54k3CU930kFRc<|V9gQ9ctCy+KKP)hbHj&$54C&rv?X_pSWhB%N8X -Ng1J+K9lgEoWrW_%%GGErMTPN~C+#`az8e|E5anHr8ca@90fAO@&oEyZx3jT3i5Pl0aIov-WV=3CkoU -wGG_JH6g)=+;<74x5!@`vuh*F#Ss%gK``3!cJHLzZ9cHqfSJ<Hh}->$C5rcV908{Hqdv$BrE$SCjYSz -;7exf;`|))wtj@V!2xXalMqkyeA1`Ax>g`#3QT|FgE-$$NnX1c=&1Hjd8#W)QUh8Vm9`Z0E=}tV)vds -dz!$a<+QVhcyU+SxVq9pm)Ep&^-lQRLusdIG+yFqPj~{G2i{yDzTx?6Hz;@?0iGOyr?0h9@b&_H!?V| -JR00E?-U&}$YwNmFBc8i<lj};2c<Nd^#j_34y*OoxlED8)D3ke9lrmAdkH1IpzvK8b+8Z~X{>}LuJP+ -Z(<uTYr?~VMQ`-bZbf%Oz+u9B&wD(T8h9xYXwr6lvn>B<Z|f>;R^*90m-+(&R9f;Wou@6j9@J(MuMCQ -ZpulKA?Cj7<`r)hfoG!Xx1fM$;%0_{==MW}1@1-!u7_`;{#53GFY+9XyttJDhtKUzsWX9(*qUJDVX}G -iHR6&7Y?6uXFj_qvATWdzAL7@#DnRS*mddDFa0h6vrXrw?LMahv36paeX?EI7>z00%b6dJCHwTi|>yq -z4-bG{CTFh5}e6ko`8y(jNx2GY34T#C(~g{KR#X!zk&pA6J6t^x^R>9rC%0Dt#~?XEW^!Krt|pI7=zZ -!3=5z3zk_$@W^=p@7y1~-<7GCZVc3L6y76Z|3q8u>^GQwQ-u}k&8%GCcr_IvLPtMFrot-|$chJB<Url -oQwAs^B(`SzHz5mbS1_b$PvgRhGPfwaPJ3V=f@51CP-{7&gb{L(Mm6e?K=&Xer9w0qyjPJb6^pRQ9Qj -*h>vIeB3PRpE~HG9U~0n=uujZDf)8#sTEuO=-iJ#|KM*4#MtY&?`kGkR|3ye#pON7raRR~T)ukAP#yt -mJ9)GE?U+bbaSvGLz@b<5`lY$7ZI^Po0%KGdZjAr22G3HiP1|Y!i~_C(qK%!oOpDld_`H=g)pTIn!4& -FEwNu-Yz!AcSh2ztYlwJz@<q7E<elYfF?MN4rn9}YzvTl<1g;c^FQtXZ_{xE<3Q11@HA?Se#Ss!kWp) -lHzpcWj0MI*qs~}vtTa{|YmN0r#pGqum;y~&Q>-b`lwry>6_|9Ua#N+L+Ei<*Hz{T>v&I}~)|z9@iRK -J*uDQUhGnbny&DG{wbG=!ycv&=-K#SHAYe}?ZSaK}|7M-QsQfaBS)LQB-N|9HQrYNvTTNGQASd>weTU -1b_D=IIlEUGT5Evhf#fN9lO1Fc$XtToY^Va>G`SasHNYo)c?T5GMhD#c#Kn&QA>ZE<XIVsS=sZgD}eu -DHCovbegqwz$4nDe)@NlmwP&OJYkBOEOAwOA1PKC5m`p>~uajv8iBusu-gh#;MNIz*u=QUfztEALABT -6kn9WxMeeTc|}UGC(r54v-<J8K|FIL&mGURr||sQj6ojbP*|*phtJl6-&Rki!kg*vV@iUUmPn>1p6N+ -pin5uGI;Nz-+S-wI#a5=Uf@!Q`Dr=a|I;OONY4v1ky_sG=L2)G09M4pzFx}Zqc^=bV$kba)%1bIrDod -(Ls!M80YD?-$>Ps3*6q~2b%jRv<*!*mPwji6<7HNyM#oH2XDYgt-wk_9|XDhH3+A7Mb%4*8$${Nb>5Z -x-)BTt>T&QBMli`2#IQgqq6JYAvAs;kgd>1uR!x(1!6-dpdd57I~K<Mk=}Y<-@-P;b>&=&STK`Z|4s- -qYZ1@G}G%A`S6|6hpQl&roQv8Y&D`h8jbi0b1(KS{h`GWF1X0W*hTZN3F&RW0kSSSZ8c7dYZgVex@K( -q$%E%V#+q<nF>u-Q-!I@RAZ_$HJCij-ex~@kU7#EZ%#31oAb<tW~;fvTxG5?*O?p4o)&M5pC!l=X^FR -_Sh6j7mO_h_b)t&(0ovfnn&4Ly<kEv|)`7wzYf(i}RZ&e*T~R}kC(G84<r>K{O<{TFSqnL3udr5GYgn -=kR!^3xAIme6WtqZq%wri^S$<V4yE>MeC(F#QB#7k|&$7y9ITf;uDp)=>ESrWBPnL=wOC*w|k;0P5V< -}i|6}Bo{jjhhsVDq$l+x_f8_DFlYJ;k1F&$AcWt@a9gmA%GZXK%23I=mfzjvz;*Bi@nX$ads83LREQg -`>(*<EV2e;-SZ)sL`ygl(VK(vzFAehIp}d1hQttvQ}iUMikg|wsKpgt=d*=tG6k3FT2JbXxG|f?TPjb -d#=5}uCtfhEA7?xT6?`+ad<g2jzEXj5$i~FWH@pi1rD8~+)?SMcGNoR9ZIQJsirirR9hNbnpm1qnp;{ ->sw*uott_oBtu3uDRm!}|G-ZKh+OpWP#IlUC+_Hi)U0HcqWm$DuZCQO89@6ZE1X$;#)93<qT3xIzQJ1 -01)fMoPy<AtRtJc-(>UE0VORv!f>b3e<eWE@?pQ|s>>-6RNN`1AyR$s4I3|<C}A<&>T#2OL}8HQX#fk -9^|H&hy`4Yh`PgJSezzZu9rGnRd3hB24D=Kn^YiHA^QpCpB^z`HE)FzHA><S{jMY*l`2Q7LRo<!nopY -)6WzId9|cYyL+f)_>Y{Z2tvNO9KQH00008031s8R{rp!E>6V&0052w02=@R0B~t=FJE?LZe(wAFJx(R -bZlv2FLyRHE@gOS<h^-(6jinW+@0=DIvdq24PgmHX%LBMn207eXbQTeS~`LPno$rm8gW2nLN(wBnpla -G=Gr5UI?tJLHfM9xc{+}dEGQ-fvap7*7(gKkVl@R4wk$wW-#O=2cf#Vl_kI6<{76^beLMGT_ncd~53M -y>OeT{R{&d}Bsxa|?Ii~;pUmN`O8&%cM^hx~o>nhCt?bpp&^whGnrG?KvS@`JFY59*n^USky+G9_o6$ -YM3d+M1q&&=6rPe1$k6E`O(C%B9{K6>lRf1d05xF_=WWcm1>^YA?N_|Trc^i1jbIX!Rc>4s-_@pV0CD -eu2~eo65ojQrz_=PmTS|Ec^%Sl^X>p5--}9)CI36rcS4W4+_J-jo=VU^2Bp;A0+_bT|As_*9rp#(Rv( -WWyg*?~@{7^4{5HhPRyJNTJB%>hNW+rmRtB(=2>hYc`#m4bLL8$(q=AlFg>ap#w!{O{Nk5hc)RfXENC ->Kb(BC{KQHbo|Ru19m26&FVB-^GA+Eh@bO3GM@^=evU#1RJK*oj%k$;H|C@O>Q-+8?(BVPw9BjTaU-i -vPc}5x|jMbC`&+%8~%elF5Sz$iB)11KEnC8Iqwrk~kV#%|R@g5v2%oUAc%~koP{_srv|NCEQqfojLo_ -_YFFF4zg8=RJs8=R3g`$4Jrgk(3FBxd{5XtPPm+$04{Tp4!Exuptc*%z9YB8B{}3{PmPo~cVgk1I``a -x)YOCEwN!*u*KdV)+)R;@*3qiqh)9O;YJW`5r0coYIX+TXp9k%oDUtFft@k<j)VAOxkFF$aXVk3(aw5 -h?NeL*_7E>?{ST*0MIE2u5zX6O_jLNy7P9(zpZxLe;kXI#<KVN-mzH!m$BTKPh<JXC2V5V;mBBimV3o -metgLoi*%UA^5fjTV_AR57|Sm&{h!9N_z;an3eI!crJ(F`JSZtA(wHsrM^G!fAhFY#2mP$kADVhe*wE -x-jcV~Q97qE+DW@{qk%^dZhv+u@1kZk-UgJxL%%1E^T9d?NSC+(TB{t8MAt{^E7W8Q+MZ#{(73YX^#R -tR(C3XVZ&GEA^bp6yt?7DO5RH!<Xo8`?s>JL7VrDg!$5ZSiUYDn7yS%f!g)RjHDE-}ax^0;C$n^n^Uo -SfV&wcN#D{P}HSXu~DQR;r7Fbjh1p&Aw3g--KhpVyj%{4OTN&{DqHg_pmzEJPH<wZI@V+dW>ps!J&?V -p0r{sgD_$9>ri{X?o02MEEmH+hnZXtXwAyDs{b{Zw+oE|g1A@;<=cAOebi{z!)kr(3z#?c^^ur=2Udz ->f$_oU2IB<4I9ZGEW{vtrH}nEpm)LHx0`Z)BH*X%xrT0J&RNp|8iH5<vZ8RO3)fVpwDZLZgJekhh^s_ -o24N@I7k|q)w+IxW-!d7mERz#uPYbtQt4nTCkmdn1?3b3}&f6@Fk!#MUp&FXKjs&RX2q(<dJ->&b!r0 -e&F=B4Yo?ym}m3FWpTNG=ewEpkF``eBG%c1E-0vLm!)i(oVRL-SlYKDNon9?tNwW$^mE<YPy~1>z&(d -~x3V+HKo749$H20W||Q4?7)t@MeUjh3aGd5O5|;pGrGIo*-7@Zi6mMY+q(0<{2jimjLuTOAZ1qsuoI0 -U^+j?ouI7-z&qB(_sk;PoO!C2j%$NK20_-M9vBLx4hHV0u;${```OjikD=-V!!mI%xE8{^{1&QK-y21 -f6R6W{)F{=XzS1Ax=DB8d9F~SxOQSc#UddSS2p_9*Vw}<yBPS?b*5wnGuGkefNi6wqcj5pW<usvcQX{ --4L*GA!r&zfbYORW=o&Apkz+O=+%BFExSI%reOqju&*$8uz*__#^JKbO5ko~TOkx0NR7{!u(P@%F#*P -Uq?Rvvfd(eEt!l}r-glN^8<9YR?q_{qSZarl#F!v1v9Ca&$I_OK}x=s2ZPdjRpgNdOhyx#>#-sqMy>; -!W7ihij?NfQ}@#Uw8iW0M4mATIq}l*xG9?fuVeKY^#S=vnE6^4@>%(E&F?iorYCx102m^=0T$_z_KcI -TpgZD#U<9MzA+ptUzx-j)QQ&<>eZ~0vK63fr+RJ#MqGx*wn+?-dLCf1MGh&r6p-1<G>*!!3H6?VSfW9 -FSx5ZQsosI%kd&bYD56EZkw+|4AEyXaQgmG&Ah|CJCDWnrlDktVxf5TMixhuYD7l5=TZEFa6yHhl^+L -%Iimw$)`oT+OJJhE;N5ULbo`*L-Q+1~UL+2>esyk!$W8d1;zYXAhJTo2u^Vb864jvtk%hm34cgr@P`> -TK>v)QQg8{pV-+4ny8B~1B}QqEIK1En03+&!{Qav!3UbCmMmEr?2?wv)Mn2a2A62ju%6NJV>Y=}CEnP -wCd>!GJ+@=X;Ph+E@UqEIo=DE>VVUx--Z#@HXeP;7)3nM@UK!WB^R4I~VZ`yy?sqzNvB~w!|eNDVim* -Rjxc-K#ogl`5H#ok7$t;dbbl=fQ{0YKoor7aD#%Ew#MUL|C(=`Pk@hwEgy28J<su7(AM8=HX+XYwgZ< -mIR=7=&1S7fSpFRMB<zYLi1o0o><d2tBp?d^7X;La*^n_{3(f4*VyN0rpj!2}yrzmf%%<YxL-1?Lpi1 -iRFe-t4vyXP!Um-iJ<xikMW;1Os;4BuYJ@bvttvk;`#t!e>rdYu2tBqOi*k^zVz=Q4#?=!#zAXaxC+- -K0G7Ioz%q(9C_c^k3Rsh#R$Ja#dUZEMHat*W2LuI8}^AXcb)`fb=Jfsdr%>Ix}1AE-BB#ME%M88HLyO -bI!l9EmWA)Qd_0Ir!Kf;#|@=xAN^?!mBfM=d^t$BdZh&wITs0WDKYvv)L2$BPRB{(kfBb(49N>;=EBd -=$!pL!t18YM)et7YUW&!jXX^9EO_Y7-$331W%WDO!sjJ6_g$&9SuT|F?*Pj94oszPmE1Ljj{*ky+eI9 -yJjAN*Nx^C#N%4nVJ+R?mb1a)Ev5QEW6}L%FfnVIL3ha+0m^rDY%cA~q9Cp9fE-CePC{VZ;sVJk0Qk$ -~Ou=Z5_+@?yK8AmV~dZjl^u|Qx&0x$zjfDiW)zj&Za*Q@yKJV-IlqH{F)^Uw1ov0Wf2dMOJ>=h;iR{p -l>6`)We(f7(M)4`rE&_RZ3rf8Rs(<nel(P!G^4h`$TsBlH&uor4&;2Vvhlz%lD_D0R;{tgcIUHts`Ia -#Y-4H*sDT;M^mW&#)H&<w`G5x~`YUh-{zwFDI?(P$=6E%Z6syb>}PlB4q;Gknv6QSq@38BfQf@T{{or -saTOj74KA8QiS{HK8tnvSv~TG^UmQEu1FEe`(cy)u`v%cMw~BHY~f}4pTm7!uTH@1N?nYRJqfcrdEZo -t9V+l-kClfC<%t;IJ&58HU<qR&VRYa-BjG3|$o2wHa5N?&i|6l%@O6jI60(5SV8<b@s64Cd1<GC52W~ -7-+}HC=;j_frVwZk{$&s3r`WWmU<Pgr`=mlf+p+ssjtw4Ek<n{8<-ijQM4I06U?t_Y;hd3^p^C`TWL$ -PvAfEb~?K^?~<ldv_R+)@Ao{1!IsWoWdHV^WSp=Pjs>(!r$w3@cN5`T5YhSzUxj{}@MjbgMIhN7u$8t -X|v&ND(NlsUSN`2E^B+#R=s*C8gRbl<z{i^efoSneCoXfgOP$-XEGUuZ@c~i(<5aBHM#q4h*C&_wy;6 -V>t5)d5^%@Zw1+1tU!(!vGt){*v^zu5XqWksB6+7c-0c&B^h2M<v2`hXsHEx)8MTS)Y+28m`$_PnJ{a -B0)Zbt+n1@eo<X=$uyTp@AOqoUSvI67J6RTrvJ>P4Nw1OI4Taxp7T5<+z7#Q{c7_&1tv{{nIc2va5}c -KO(a&mOB$eTA#9TX3LZezy9@L##&}+7X#GS9sAj98@6}$`;6a?i}vm}sRW))<^a>xMUu!wuqf&nxg@d -zsg*|!H&fUVIqf^BEGyd*(sTyUDb+XqAzydD-jjusqBTt_9g7$pYxEn&Mx2}Bw>h}Qra<fw-)8gsVsi -~;Md*z2Y?WItB9a@dYsnvdPae3V1NdIIH8^6jT_8bC7IqgL2ygRKH;_tdS3m_iF-VybX<)V%9VkqD4q -n@y(B?13Ot%yEqjjQ0VxOA9^pz4~AbP98M$n>OkPAbg-}*rK-$C-8PDzg7ypxsXUgs0e^9H)Qqb&ctR -U6@SGDpgu~Y?ql5`^@e7}6rB0c$8@P<mp>#zY$Js)L0Hlo{g#?YOwScD5cGxS+2arue`6!;HROx|PMt -Zzn{|L8K0XDr0|+(C4|AB|4<%1HgE$Fx*KU|tKMEH9AaKs=qse^Fi-1x{Hc+1jg1ha?e+31?s1nk*Nb -cnO2AEBO{!&eiqoAWk*8?$UYo(e-NBA|D!58<U@wq5cN!XH?wQ}j-n|V@Xn?cwR-mHcN8KRB_5w_km7 -{$=_18|bU#U@0*kf)jQ$X`MLkm7hA+M&)F&v7|G^(@@W$?7-hSVszqU7thFn*-OYJJTc8!UQE5vQe5k -4_aHhHnUnA<!23ETtkwYue$*=bmE-89FMQ{h@|omIW0u#3HiGPhRg$$$;SW=w;<<V+8A)E`OwySY$}+ -dc7X83YC)E(D56G5#X)j^(1H}p3T?-!6QKl)NEBLpfqSFeUs7sd514TeoPvmeRbn-@nboyMn<Qp@)`T -!RWCyLcj3n;2O~iKV&NbV4q!px|rl_nEDXW$PBZl(O)@?*{E0KtXH%!0)fB*O<eCPSquQI4s<ko&guU -pmQ{rK|*Bm9i<jJcT$J=kJ+FIFhIw=A2`S3tUeGsS55G1xa?Q{0COPhO?Rq3kHYQ30rB2+YMmi6x?J8 -l&%ulnh@cI`x&slqm_hsI}M+Tv8}m_XFc|VG^gHIQZ`|V$39hiI|;)BX+}FsxQFgKvNGvc;~GU{@Ja> -IQ<>xIW*;6cxe5uH2`JGpP@z*Dsz&5gLQ{^V**OPjUsGv-T4y4<Cw0YvvPO<g!x7x8mFAdfqlXbcvu& -$i8>OYRhcq&l-Xn!O3ctyy=?#nAkkAcCJtUp4+^Dw2-1>Ge&onvwvjxByCVZtF(rTIsRw3Y>d~zn(2* -keSv&S(9PpSJ&XSZ<cG9AO<W;y--H!{K9T$kvP!ua%ATdFA{)Ni7sGnkDFir=2l3YeLui0v77?YP$_- -7FIyUzw}ezz)r>St$h*yAMr%!syW^hNs(EXk|eX-SsCLoFvImGc!IwHl-T0#R$dAjJuMc1$Q+mL3g^t -+$y+@=4(d-`$7^WT#qt2^poGx^rJ6f+Z}$QryuiVI6WJ8X#B?Qd5KrdJyr!J1m<yoY#YrPi7;CJ?8KX -O4>$TF+{PA;cSeF?yV<p1CZOQnr<cCP^FIe3o20u@^T2hw^Lp}tAY9XV>&=Yv+i8Dg=o?cbu?k07Tvj -_kvQb7V*!;|uGqsMo8*{K`;()-ep{589i9ylvQupx%XfdGx)0s})#U{3sAIUi4%k+8VhUtz4!o#7MN2 -r%A+fd92qHn)X=N4kHUr?>d3vbXBoAgq4anWv{tf(Az^>v+1Y$B~duI@k(d=n<dAP);IanEGOMV5j#j -EkzRJR?I+Np+^z#xV4#MDhoF#~hvh&d~~Xzts`YwAE~Q)C|X0lX0X5ZR_&gz7EWQNX^#)NjW`3CPa?( -O1A;elh$$B{$1oqqqwAdY5{k2RQ~1lD*mag93L+=^aA(h&v0Ei(+8{{64h8TA<XXArqo>QdB2JRi_c7 -tZ$cd3P5gf7r0yGI_*|q>XA=LQ=b%p?<f~2Ae6VL4~i&=)x|_gC15EVmf8jkk5FElUgOCExfDe=zbix -e6V6FDsq2s>Hb@R|Hj4;K=hbqZT_zBmW<T4XZCi6A%<u}B1Nmph_+7o@Pc+6)Dmog!KmEWop*(3I$VW -7)E*e!$8gRD*3X}^JcY)$IrumeOF+RNk``n0q-Xd=j$~Ow-jp+>lxL75~*Xmp(W>o*>I)232N>}TORa -_NW+9(O$E&%s`jU(k^AWgk16L#oG?C4$~9<)!?hr39cd<8OrV1e7>zIu+p@Qfnc_6JCi`yrumjwjrjt -i7+E8I40uqP-q{1z|!Ppq_%guQo>`Bbb+t4kEg?kZm(a!L`QzwN>10Hmx7TWw^KsJP_4v?pncLE9Ey- -Awmh--h?dbyVK}=<hk4U`G_kt3*dWeFm)v+GM+fkNQ|o(hTO<<QocM0tx3T_W=YuyG@!;V>05!PX0}^ -UXgG!{%aC&><ne|ii;p$<Lrxp;sK8`MHJvu)>rp;t-6$<?%=5EBW}k9F2kBM0&?DP&VIRlV$H02%KD` -=i_vwv+&!9fqQpC@Fcelw@H08?_BvUr^IS<i-b(74b#SK4tF^b2y9`gg>h$Z*_!aHG-GVJ)?vf@X`Hd -eg<9{n3HrSFnDj!QKc010f7YQlGg{QVuO44Y7>TAU&nO^0S=L=>pO&47F(Z5&X#2CW{b)Hu|sSC+UZT -H?XYTrUuErc!sd6i$Nf{3#CK8&=#XRQ(i6rElrer;hLy9SR>Ajr*`B1FCaCb=YjOP*s>BK-=LuOvDED -F=sbXTezQ+vii%gHZ`yX0_S`kEu=iJ0sd>Qp@_|qLQ4Rag7e`okR=6I=lFw9fDmiD6T6nVSqgel*_n& -D>Wsl14pzO_^>T;%L3j;6i$ce%5;D_ug|Q$qXKDw0%xhxOAlP?vL=X~ySFb{X<{|nFKWS>ubfBmCtpH -nhsb|ul%JIC)V`<1rhDVqY4_OF#B@^<BL*!L}bcA#YnSoZ|t<RfKgSyS<KDTTjwygdgt3tUsJfE1L7o -J3g-_%yA<Fur7#uVnw00iogin~x7wql|b5(UX!vm!yNXw&H*tY2%JdJcLgrMIFC30#LR-&h~F4Hyw^p -t|oOX#kNp3H7G0NcUgw&@3p~l<EP8Iwmc$S;My=B*RP?QvefU%);ZSe*?}$?Yx_izyMNt>_fEh8xYx9 -i<YE*H7YtOQfOvdaW=LUu&Jv%f%65?Cl{7zyXroR-GLQku!0O$kiiOuo^T*HFuxBU3KA$FuLB18Xj0c -hEl7RSxD2I!2h2#(Dp!{2T8JDlH|HzDACQ{-OFYMgO0#^SY2$psX>C3wUp1*O_M=mUtXj^)rp<kzFE5 -yehnMU$>KzvWWaqN3Toj_tNWnR-r3kOXasgbNxuxxa8`Rd3Q6dnqMbO?#(yK%mok!-wBz)>3u>@AAAF -Q*|p!+(``P~i6ZzR39!_Vq6n^AQ*NaE^R$oS_z89P_J>0@8|gbxpQOixK7g@q=^de}^t7Aul+6m_KwC -E!X+@*vsBB~~F(k{|KsudsVd+vQn887g3X?(aRq)bn1p!|!esetw+JzCp0vg)_QHb=(it-MGRovN}KD -??qC&Dw*RjZK(%-7Wyr1QhG!9PgD%jy{yLPRtpz-@gxg|;Xb}RQDhsv?2OoPS_6c;*~8BJI@&zxXS4) --bszT%)6YQl2+_~ts(uB%@*2(g*goLJo}JZuu!n~vivcUAtKsE3*IKts=h1o8E#&lW5X)#nfcX3LI*{ -CHMsN==!li^fC&Pz{gu;X;M<@Kx0NCoVR9r>cjgugYGBYJjO8*MxpVh+jhsW_ahj!e@>chj3ySzeQ<_ -|7R<5IVeohCeV!Oy-%U|ER3@-RXLu1?^33F%0JpKZ)+R&T(ze?KA$L75iVxwqiv`WmS7T7peK+mQ=0I -Udh$Q}6BOdm3^)NZR0fErx?!4pLeP`IlLK_Bb7nfbd+4JWQ4!HR!oO-`GY;*`ljCIx!Lm{@V&5%}z9; -0?oLD@&g6#h5!o7-U>tk5LyPDs%?+M42g|GxmD7}lH%15J2Zz36FjU&ccy=iJUR^6CX_>hP+lXHZyj9 -|VKR{>a-sddheyXd4M;vfxMpGE2;*>53MN<f2OgnUpD`EqrWE?X<+#X?b8MuB^q8Z^IaU-pI@uYvU+L -0;*6yE4$CFFx#6-?)7AxMs#;QF0RC=it@;anYuEQTWu$ZMgf42c)`LA{}KR3>S$;Jcn3;*KW{q4q)21 -5-Q9eTpFWzgX=T2Rn21=NVTDV%Fy)~cYSHbP>hcI<Dkl-C>yy-REpg<yzF0mI5b!-{lg_h&eZcy6P8# -*cg?-P!UPu}BWU+DUkh7zfLL?p~}RgoBqdx2a#9L@fEX3unj29v<go%QEn|ecpn;xHXM%YjU0g<;43x -BNY_MKY#m-n5erP<|_|Kaot2ZhOHW6HGzyKnbn2J_&8ts%!osM1uP!W^d~>N=D7kXqgWVPJ|vi7t@is -6gwN>Cou8tfaBGC7Y{#j-&JU9e+jb7xwp@Aehv(_gJv?_JQ=3P06!Z|rB|4DqJrGw{^a44K!JBz7mo@ -nTos;Bu<IpG&Zh(wHFkUkRm!k-!lYGpM&k5RI5Mc_u*+b<NFY1Uq?rLC)fnE0q<uL_bsOtof_+h9>jV -h70ORPpqzp|Y9TIB*%4&H_ac4~OmFciap6@9@3pWvzGo8mv7Q5)<|iuyoGbVwTFs|G#%5HdV3fiSK-Z -$}<xwN=Ttg9t3LZ75%>GjoB2x0P0}Y-Y1lIyNGV1`^Vj*;!q96l!za{*dh~$N}tB`eH}>MvFWdSs3U| -ls&FS_PE_+w-?DylsUD8qO62KjJ{a{zSwOkJPky0INKa<f^L;GuRN`OG$hi?@Ix^1?HkQP$%lyIp@)I -E%#-1FAdvn%Y^4*q?40F!yRW9lCMw^Kn!&7Xxr<NciR~U6w6-cTiWoKMH<{dZfzc!m@02VJkxtZ8Cu# -~$cT7t`qeN{Q8t?3ba_U?^QJ1oPFjFLX0EO+}J}t#ACt_yURjgCCu;*RC|DL|VY`O<pr<ScU)SKQB@= -W^QPNla+bh7?lg9X6V5e2MM{p;Z9g5A+g3#JWI)w78BVS~p(&p4)k`W(EGUeu7JuCc$6!!K=I`J_Af2 -I%dw1yX*O6q<1R4Y;2>l<!7KFpJV+9jK+}Jg`2K<Me=AnbLmIWHJZF0D&5;H_C}1!wjW^V=akJlQo-h -zWiYYq6#b-91#bkVXzu@V&CyBT<w8ZB@OYoA@MCi?UIbgz<u?E)L-f<^z*0g<QK<6KcABFLHL>Q>R9a -OMdb+eQ-^*Y#C~?0+C3?Dv+RZLrs(pW%9QEU-5dIJclb5Bi=u2#Id!-jhMHv2smHhX_Sk=|9!F$UveW -5-<r&L!sXc=t1vMb$D<`^>H;sX=-zeqp0=aF^80`8+<(pBsDWt{C&~<A~yT<`NkA+u<HbVV!5U=TzXi -cgQi5Yf)<oRpx5`1sx@AtDKzM4xme`wNApe39kn4KBy)?*~>E2}b-Oo3ZNGvn38Lr`T&;bA~GG96Wa6 -i{b<1g4^+Wq9-G3%VyWsWJguzYBm47))UXOF9O5hdOlUJjlj@%#hjfj0ZUhiGwt)BaQeQ*R@6r)i@kL -0!HA>NA(jZJETN$6+pxe-NQieJ{fu>2_SnXKb4IGe6!9>syy5iYcqA&b<aaHP}-&FIYNk;Q3mU{hmB| ->7WcG?w~~STQnHy6xk-)E2=VRH>}H|#eZna)8I$>t{a7(YTn938WOC}(Q3nz|p+#m70O&Z)qE9m>X_y -nWoF@a1V}9M~UdO8jR8Qed2x}6K2s7PP2T4*e6A<Rc(Pq<(bm(ZspV`e->O1UasYCO#Z(td%gge!{{F -YW$U(;&ySXxoUO49~`teA&&!N6aF^5Ibc$R77Gp%lrIULQt`UX=&$p?ezCw|>Nr7E#SCFO%}WfL8rb$ -``aYDYh~229i@!lT=*8C#GiEu(}*O6v?Q|iBC`#Cc(C-&Z8Q%eKp_NNcEf#oIs6%*b%8Ca<2o#ZU$!i -;ck>r1y7HMeTSJV(Fj}Z8i<V7CeGTDoB%Mhl(c7tUC!lj!0mF#K6DmR<5oZN1ZRM8YVm-0hU|D3$oNg -F!%dPB(6pEOM^WUEPEOPQZsHb2HnbW#RPR-%5-bE-;jhV848%^qYk7RVw*@61EpA%K>I!;W{47`UGj9 -%BTmUaE>U&W#ZkOi)@$>1qEh`5~%-d9!g1<;Lg5D-rl+fHJ;3U4z;-bcNn233;Wht7&NZe#3T7eZ8vg -fxHObyN}=n;Nb8=BTbRztvz!D=i6j_i5j$PDAhYuH|p_yBvu$HG3=hB7cno<J@L+L3K>BB39O$8)8JN -W~UD&J}(_$qvrF2ql|Q&){xaK1;pZf&A{>X4taNg0RF=kZ)S)2QCX1ejEmt;vpRIQTHRm(Ag7Msyd*Q -l6AdM`U*~Zj02_mFp92fyFe!bqfs4#2DWKNeYMx94^?Bp%`92agS8GrkqcJy6M^au+^W7Opun1@jW4Z -!?ncOX3ua4IUl$@`n3kx%EJW9Scss5AmCD+_=YzxpMi|3!oEudCtEZO-yavr=VhRZkK$zcE0uFUhv_+ -)FKT%pwWu6Q|9;MS9h*y_GCs;R#zJR74n23z)!ztd9gU=<1%8^T+;KM1}FtNSXEDwTTyWCF{s*WTS#? -?=AA$x&^y3W9!X7wc9?wv+plOw#jIpqBz!r3bW^)eA6Yrzh8UB*c~+%Gy+ZRa>AF`@LJoS<AZ%Qod=O -yDbZtp<FBht(pVy;J=jnTr;DbDZExnt9h~yN`}pnbL0}X&q8E3!?wiLWx2kcQBACWvA9bq#RJ)b4ZM^ -Tg@i5<9<Y~&&8`_=_T+Wl>HFPLdRy{*1H?ee^1_Lod42MW2X8QhTZkcheAw&GWoeF0f9>g>Mi$?0xA{ -{0kxfYC>ZjrjERW9mnoWmP&Utv9EMlM;ap`okk}lA;g`1asT`;}l6#ege*s=hTP_7hqBh1N1xK-3z&! -jkd>@MAU(nHpifDKyn!1d-54YSxb5#u2_Ni6h;`wtdDy9di|C1C|p1+rb8&VqvlD&`Z!J>Yy1|LjK`G -Ys`9{#Ey9cnvC6VOMvDL6x1;tz}chThkk+3aVHIJNyywuwh9k_!8+zdA0dcbuP|As8S@-Iv}V3gsq1V -^*_Isg5Z?iC)sT1j2ZD<tXq%*%OI|>QdVXtW|v<`BK@b8}i5?wJtFVln+A#iS^pu?P7`|-=U`PlWW$g -{_=jlH4dGE9yF-4%>*+xs73>XJOecba)Ns6QQXG)<4j6^N|Z^te2?_uv7vCE%`r&5v$r3+Pa`L-jfH; -X$g#?!DJHE=U9K7&_ar^SabJWeZC@Xb`?9m{{4Urxd(bEk5&w@RX4^U3Y^uaHS9HJ>IVBZ%nioiLcLh -@0a~7KAA?jZtdnLDWZc*RDvhG@WB-HZ?8TU2l&Sn4PmT0<j;y+2T8Uv8IQ>{LSAa<CW8-gGN3}DE)0B -u=W(w1D{1*g_|hT2WAsgR-iWdg@tF_#^DW8YJ7icrmI@RiEN9>B;`6F6r&EFr>~k`V~7xlg!LzZwQ?? -tC<WWM@%+@Q216gD8|HK#~Cd;GD3*pJi9RHp{m|+qc0;)?#eCCkxo5M2M;<8Aj`;q9r@8A65qvK0Z$i -F<h;Q=N<TUG=q9`TOVYPyyv_Hk8mA^108byXySU24Be>$lP9jveTa+&7OzK=lbxCmPuZGzP@5>_+kOc -F$x>gOh3<QS<CTdqXg?;U1P*5&R4P!l*l&4!_FJ7Mv|*|ZzU}%5doU-3mg0J4idRR8!>0BCb6tsUbm| -+<$N}20L%Ob>?;puJ%*eVMv!Y|1`cyRQsjndGI$)R9s%2vc#1krqW5SQVM)6AefY9b^u&Qd_1N8n`5B -6iOk(UnFV<E39-fu+FRGn=#pi2GeA>`2HIM_soAX5DuV4`-9Yl&GXpW|985=ZM1yj%QeR*QJQ>>w@;5 -^F%=SnOFW_7ePP!&s;CDb0i_V26}PA#$6#0)E%x=6l;kXVt}<a3vzNcbxkA115g7bw3@x)0TwgDx>8} -{$~&QTfI-ZySH@Czvj^i+#KW{(S0KHdmas|4(QAzi|Cn<Wugi^TvL~UZ#kUAhirL0hKZdY&076H{qs; -mw-6Ad8|u=omsp95IuNwEu+5MWRH}hE*#6Z+y-A?n*q$fPvJ%%?o_|#j+I-v(k?~ejb-m3GZ+!pS8c* -<Mf#0=lHr|)&&Z+O=f#s*&hFz+9znj}EUjH7=!0R923?xH9newY{!Vf&(csC~8`X2gwaBZ6I9Qhv2Fm -@IunEcWnw)=vMQ+&Z?Y3QSNne9q0d(NKACNdG^i|4X((>rq6*M4?fV&QiSgwm5pi}HUe`GPYVa)Z-={ -jGD~E-1xF&Mh$i^Xik>v`)XfO?U~_l5E-~d{^Ek0m^C;N`8rNZnHcTX)bI$AKUA*)ay;CKM6wG3v%&l -Q~t82TLZv%P1#5%o+DwzmGGvX>(324tN7$?*PZV`G@D`NN=2$`r}|7RzQWS7*;apkE=}n;j2P#$eBnn -Tx!tg(bo~RS>{+xttpiTLfg>qLw3W@ZcnGz*Oiar>35;}Zdi}d;vOBXmd&u%hQfQ`~i7>Y6!Z>Dz$MP -h7qomY0+(VY7Xy3ApFd58W?*Q5r%a+t9X%-Lg;V^F!JLJB7*<4Alm1>SyCCgzp?HtTdVK$$&WfMXElW -iV%x;znI+>0;C;}o|E7<GWfmB4`i%Pd0QB@fJOuBBeon<8B={GST0NGDe*^pjc)&t-l6q%PN=q##3<) -_3hQ*rbF6GkJQjus8GqxA!{$l9iY3@UnegvUk2CYT)da+l6uqpL?bAQ8`2DEJRP76+ok$)+nKT?>NmS ->gPW<<Do>d$a=)YHqHKdJQP)S#9)0QYvSg`LP;%BZV*4tAto(vP`YNn_?-L`F@2{{vJ0CEC(6_HM)^) -9oFd<#gcIbUN|!b8iWg-Wl<2&yN!jTL{}qc@or()1^yReI=Ln@iA{sg2HI%DGTLsZEf#u3~J<735%FY -;}>ialtDO41A3@Q;5buC{B&yi;;;ePUDXmUKZJw)k>6-tKzjC9nSs$uWl2Cekdvc0g{>0Z_#RJHfh(l -L}uq3`=?sYcEu$SG)oQ1xBXGMmWuX;z5nV_GegTA^AmY9%%xOJwbxX~cW)qJ_7GV1Ku|`ytXgmcB-EN -o{Q3%ms>jicq?Or$j4o%2a{P#QCJ3d`0$hxS9#jjRD%d=+8k}>_(R9y;&TPrN5RASstJ)aYhywWf4jf -cw_w_o8z*sc(OBv(i3C|=Evi`Z6LP5PDS?(biG!;_%R>HesmkN*?@e)R$UYfqy)VqJi&n79}GZ4o8jS -rzj20!U`ekPSjM&B+mJOfG7pAknAP7}NfU(X2KSU-xXdOYbOQUI-vMa%8MJ{?Cbya70*P7M+H+Erz}$ -|U6cb3Q0e@(Ex6<iY;Rwxis7oyT81W+-yK@p2WP{EC1^ng^a#pFM2cgA>^(@wbN6Jl*H2pAY6VZ2Um0 -lly4hC6?x)=2iY1}#!JvME}2cmIFQYZ4LbJ60#&?y!Eg;;`-5=*WhNPJqCTDYIuDu=L7aa}ZNE~wxiJ -hc<c>du3IM!7om4a~wuTtrqEMWxi@d>R!h?tuq(z|UwCXNG5tFo^$B5-@A~$OCjvvdte#o^*`NpV=-? -D97$jkkj>QpQTCZoKScsB%V|{`>%+tNJc7CT;qXZR*>-91;Xpy)wR-FBJ<Q(`5BOUOB@}A1>%A5PXCS -rdbNY=FEL%{lb#+)A4KU<dp#|-H&0wN4@e-*v4{qpr;Zt>wEoa62LP%Yx+Df;qK0b!$v(RHL<`z}XIA -H;D-wwRexxDloxdVVifKj-Py~%}h(8I=aiyRwsKZxZlV*E;sAf0vtnJOr>%SaM4ZS8A3xvkx;3T(a9` -vzG%8Pb$V62p1$AO_v3MCc6U|&FI+E7x16clvleeV!S918?Rsdp$BU8@=m2gu8mublU-Me}w`H9*ZKS -V-;Qwe%RDyNE|ht@su;B5aRz2?)_}<$2)3okVgw{zSA_)%M|rNBF6ANcxVz9w@}V#k3g&#)&}Y1F^cZ -9`jS4oq;3QR!&IyjWDjev9P5PptwQO$E5w~YTfT#L*CfHJvpZgkHJHxA?gPpe}?W&RXqt2CV5LUN<tS -Ui|!9iIC&Hp0%aBONwSsIY0p)T!z`mxqxP4AS^&r=Vr!=5ah+`e{Gcqyiv}hbTk`N9xxptQzwh<}pF6 -&{Y`d213(o5{X|d|Iy(9@HJHEw2_d_8~xz?i0zd|0|58}t<qc{@>0Vy3e1^TP!dk72LLsEY=cP|bs>2 -R+^26J`d4>%pLZyu%#2FjYaCQr8NyEK!!Z;r|E_N8<4Q1UK1htdB)yy?OVkyJV_|1k!G$q(_z!~8Mtf -&sHE*@rRun8*HrhqG7s2}Ie5{e)^4X123k%JCSkM}!yoG5pEJpFHKbMV_r3x5_sw$7AKe`WAVT`t?Pe -Na7ime*;J}2e!kmF0yso0*~-3#NUkB!K3Qop{;`OIv)NI!%NgXF;T-qJF0jKNz=5JBt5pppKp7=(qzj -1u~i<3{2H0(wE`oy5uJ0?%Yw^nm@NjqwI2nR_$HTz`!kETHnGca5yyeT`u-jfuIf{|&4D;zb}o^Y^<* -GH4CPwXCA&e2Db-~=2onxi%(cozyWC&7m?$SH7p-y}`oN6SZt}AY$TX8@hot-s-%XG+Fwn!+A<3zK8G -msWG@A#NmYA5$lDC5l#de{s0LT#VZfS7uT0LIM-$J|TWg5Ejc!S-fZ^V;umi#tk(srw#A<rDNx}axq( -6i;2bp3Or{O-enWcDj;i|rKky_$_}g@^mF+z-1P4_y{YQ_v(TNd0vm7E0ssh#^S540qH02=h>+kx7Mr -8G#0HN(CBUd*!p&evu_7b>g1sd7C3}2fBbap+HKQjr0*5i34)h$K3uqZYKb+&61}cL6W1($-47dh*y# -`Ac79Y!oo#v$9<(sL&&y$9YT3A&Xe+}!&EP#8J?-W7;VAut*%&x$F#cQ4tzj?$w#OFimsJN@KpCD+Uy -F(wCP6VSZJ`4G;|{<Ik>*s#Lpu70m05AVNanb#_*v&0piVCUgG!#UH>8f2;DjFx3DzH4}60M%er&<+f -hU&g(P!T1MC2`CM6OnXR_q<Z!pvZa7uZ%LhRtoX0?rMFCM@+Wrkf3TC_NI5MT#X7U|C0-i~qtMmG$<l -Ar343osBTIn>G~3>!K>IzhP6%#nAmO)>LjAx5&PpHSu*5)b{2hw^ynEgo9LLu+_wDG#mUp_M%J424*c -f#_`Nd>+9SI<||Spysy$;=K_6c`|{r`sM{%CC1I;(dGt<j%d^40hxzvPkwD8_o56e7^@~Vp^9Rsy09y -<iVyJOkyVt_QS~v!fh|p0a~z1vFsS9aForu}tK4M*)&z2V?uf4Hpf2uw`_WFmx)Ft-F|XcjKuwNzkn& -|A;OT$S@_haqR0TZM%8!O5T3*hoeKk0`#uHic^j2eypZN{31S3&5vsFz(w%S?vo9G(zO%$hYy@X=f6} -|;zDIK~eMJ*m|GJJ=0=iXlvr6?GRJgV)%p`>>Y*h14%v{>W-qP6_cS#6r1omOXV<pgomP&632?$?MgL -A*?kqj3LU(^!1&O~OmRr9IK<OTXj~J!=P?Y8PJmxrr;m-y|J>o6o&@+1x4<P5wqnnA#*+nk08qVSmiy -gT7}TMDQGjiccx@K$_&<SLnmE34=LOnJm@l7AZ8MlT;*U-=Yzgq#(b%Lw6pbu!Vaa@8gLJDDe>1sJ^; -|L;U4R^ULiukRIbntJKjlyt<=BZ!l<ZFa8Oo9;_mD<DRM?@=dy2?;0)lZ(i<$|F`8b4*}Impy^H2o!$ -S%M~S6?InypjIDP&}tfmq*qXpS^*^&v&e7-bUvNU8?7iW_$G^vW~Lhnlv-l#qcvO>N%*$Z@&HTx|!qE -MbQ$SaiR#oiP0n^Hiyl}EDslKk%G!UQJTEgSu?Zi1-S06iY(b#E>F23ue?efofN>1Q<{f;9gXZHpV#p -OBfee0^?ujgNchl_63>^JJFes!>OEG%2lSgH#Z2;}6*a?{N9031pXkWNPnFItLe?#`fMqzL<Hc?Gaq- -xI#w)GQlijEo_7Ft_*&CQx5u*cBy|veNj8#ibBcvX5>aK>b<jZ%bJCffDtieHgS&0%9JfFCiDfH2MNV -G@(Myp1=;jXxb8Fv*Pjlu(3K9K{Fzv7bmD#P7&Os{a`GTFUkFVYj~U6Axga=c%vsWY>CS{V(Q9dy>pN -&?Jk&51YT%dgWF4a!bM_wm(Ad;PEkG7A!-wdPgtO8)dHHmV`2B6viH>*h8U@lig#6x5VP$;jo26ZyQa -bFNFVwgAQQB4YI<Q_S{=qxgwLK^?d`nii0ntz1ycn~a#{lAVW??fGjx;j~7a!jXj07rhuB^853#j(W$ -iMWB<Wa9-lyU3Fm^b*jAarvs9ka}2`^X1tO`=$4FUZc6`|BIY_o6nY_`*4u(!y_1S&@@d_K7PKsp<2% -+(b1a;?|7U`(Qh|bKIL)`6~npXgvAHP26}AfrT4SF2*~HvW(;UsE(UvR2_dG!H7JB2Zz&S22zzN@9x7 -BfI*cA9O@Fl;askHtlMzgG3*el2?x?;7#VnGq&q))gRqsE-#{YYs5^fJF_UAL4Fg=O;jIQR@(i&Ouc$ --orloIOej!jVzVP9p?ggZgslDC=?)qhdn$^}vTAD8jA9nE?N_9!_bmE@VTUVq&d(T6Ap;>l6tJj@(z0 -T$J3CfgLQL`rxMe1m4C)s8zswY0Kw_u&xdl-o2fve8vuCi4N{dk1L!W+!Q=Wq3(DYiO%C_)Zk{?!gKG -$R&JP^~98Kgl1QZ!I|cK48wD;T}%!USl0qW<g~v$ggLmP$(7M$&u$<W6drzqszX&1rn|$v|f2nj1+oz -B{wQA;zq@%_84fQbSX(?r<u=cT%|GSb-WtP%#}%#&1C5h(6zM83_z&YxN8f~ukpAZsPnj%rlB*&1KN$ -kx(Cf3VO_Pyy>Z20F}+D-)qqZ|OVRZ5<1}?VvU^H>%$m58>cDPxcM_Qx<5DlhlMZ&b)x);(la5l<@EB -f@+`!@=v&qIe#{}8f14-o38S*YglPJ=iBjhjju-eQ<JULchy6+m<OP4~8mzNO97Sbq`i*!3Qcd4J}l+ -s}b{*H7_Ah`R}>%?}8S&lD?cdYRw9MSqgFh+J1#ixmDJoY1H#W-17TwO6gHqmQ*c=v_AHPE2lg|K;VD -$K(l#86I}(m8a69jXaUP1BM@4E2Lr0C=ycL*IxKy}PhpVxgsm-SfBAeCrl*yXO?xwy+7Fhb??$er+#1 -tDZkchVv0`$w$5fU<PTj0vSUS`h>lO9HzE}ivgqBi0}CW=Q?qQ+^OjYA>&j8^WklJVqh>Zj_STX?59l -)ZN@fiF$b~Gf4ojbq}h%!LNAfV(eeD*z(zJtJw&qz~m+8kv~qUX)T+vT9FgZAXj>L-v#8S`x$$(K -EWG4-~6ZCupRon>oHChih5yRS=(=2b3s2L{yJK8WUg0CH-3l#7=FgV0zet=_iQNMkuxZGF_Q2KuY~kt -!h>A?IO!hHUuBa4#KO%`RiNkUQ}i)u)pf(uwpEZ9B}st%e835b5jQkLG<6(|l~R_$fA+oyBj!5-r<&m -J^avouPEu3d6;^+Ksf;LUcAv?;S{O%R#*P`>TBa9V5zyaxp~y%!u4fk@t>3gMY*<YU3aP?-#7WN0L0* -kGs-@mtUbA9@p5cd9JbYgseQXJWg1bC9IRo?yeQi^qo-W?WxeAq6DkYvd5RcEpQ$>7L%0{*e!+b9$AU -E!WP->KFcObWA|E%!+!xPfJYiudAJfzmIb|0wz67nScTP!Zderq@R3wuwWA84qCbR!cPDv*1$NC6e8e -t=UT^@WtBi%30nLRE<IJS$-@|}QD-0{{y;lybZ6MC+oTuR@^=-VFtL7W)XGk1ohCJgPKGq;+rN|Srer -%R+64vz>)`@0!(~6<6!GDx0uCa)gJ)+%=vALFQ?xy7@(BwR8Xke#LskY}@zVxM^2&{*BD?Wuo!=B2cl -~Y!Eh;k}fP6VcN*m^#+^?YdS`Owzm(ERE9V7j5Rjv1j<<Ih#a(#lzdf}j~&@ulwxv>|8|ULZjRfHezu -@u<&m1HdlkG%Y9MHr3ZR`AS<J)+H+2b#=sPy7fwR;C)r>_Z3`h+;9m^ty<mFtelmrOhcBSmF^{N$<&G -GdyJ^hulPP~5GyFl|A??YZoHro1P^;R)}qo;31$981y^UCYDS$we4xJ(<#TVt{a=H|KELM*1xx$O<a8 -~RUVultP5T1bM>>q%K(g%)wGvIT*feX<Hu@x<yV`@ck@S)jv<<}<wCjB1H@c1*AmxH>wNuL9B9wb(I1 -0pIiL~f`5W+TU->@$*z4!ux#_EBPWsPU(h^b{IX2%_r;cGlXDb{h9uO2Mr?_5(d6lo^rNOMDudhHNwX -8%6ywH=3)oU<=7q^fEhQtB;~Xn{W4j_bOX4h&gfEX>1qyD;OIGP>iczks~zuJ0oHK+Tp3lXnX56Zube -N@Q<6Wi!q%uudrWs__8#^|lWa_{{=_IMAk>C06V(a~8=$*t9t9@?gs4!HmAakeDY{#L`Z3K8|=hdsds -AC@}}xML~`jNm<!RxNnxdH>x@feNq7ki_xjBO)tW0X1Klt1Tk`#Z1b4o`}E8TVSAshMZzgpgflJ+_w8 -NXUZZzOM(;370`FdOq<cmj@86b4|2*b0x(5d&v8#N<i^oyQer)tPDU^)#Omf%APfJXRbpBB#%M_R=F~ -)n}C=XV$QJekm4Wy~T8q~yDr2R^{JjZK&a;%<7Ij~aoxjykv)4LKG`E+b-DkNrML~$6AtLo$VC5ZZ*u -tEAxbrO%8W#+-LJc!k(!}xn131YUl_HY%_Fr^Zw0sCd1L4Cmt>Pf^hq3829@QJp~$L!hD+vEWf6UfpG -$6`}AV?O1@PUH~SOnaY{_bH`54SCNEbm8P>mWN^X8R;vdKG(QXB9@=*XZ=BXmT!@Qu)(&_9j&>LILZf -sf8vF$${l#O5A64SczZ_^?7cfkCtKS`cWUUIZahJ{ya+Gz%iSiro6g{6`l<1h{uTzcbgsp^_d8^0LX4 -{}ov(g@x-qU2<QXO$>%)({{b?WNU_`biN5P2sHu(w`xEq9$_h>G2Th)Pt!{@gu&kr&MZV<}n0zdb80d -jM6#X-?(m`~Vmxork_B9w2`mI~#$jw<eExMkTG;&9cU)RTA-E0lX3+7!$IK!X4wth3s+o7jv&!0D!mq -)(#@0{!UEM_lpj1Y!lCplpTTs~hDyZe`P~`Ip&MT&DZtSE~}=r8`SYf$=80`=2y`j62dow`xkPDSBA3 -IEI9`ZFsX7IU=y_!Q^)^<ZfE#m6VO~l5$UnUQj<(Hzjz2g%)_b#gtGtbs~nQd&&x@0s0ML0cB&J6uPG -);?K}fxS1vAK|+BiTXsDrl-x=?7!8k*evKuch_v-4yjwf8$eL^UHakV|r?|HYp`X(TrrdSb=sn8kkHz -qPw}?3{*jlKJnhC~P_6D7&&k#0PCQ6}Myu(G0-BNT}r!x}zbU5zn&NedV`)5d`vAcJ#D$`<F>Tl1Whd -@v1!53Efl*uk#UWAVx`BAamYck6Z;lm#2=VM7O-T6=nX(hZ;{wY9DtDq>I-brk;@~z=&axzb{+*IRZR -u_8wi)*|HdX6%$U3Xq8;auQTsDSk*>GeK+vrpM%cVApp;$_Et42ay68>oMi-8x?SG}+xFClvYJ_M&hp -;&NaN^*WE+Ufj`Afqq288<m>#-qNFjr$KkVsbEi3QbpwAEJ~z={F_33c7v2B1#fcWjka-EWsa7hbXo# -7d<X3AcSjsf<{I7H*i8-|Nm?>xm+GzV9&%W$%@g%aQt?If#S>nU&?Gf^&S@<AaS0Mb6n55<VinyA7Dw -F*qB_hUxXUGtP1$u6DmaN(xhUK4%4zkJ_0dCtaizNK!lU9j&<dOKH^}M<{Z2&&(0y2BnkY;^A-Ycl8v -4l8K+L7ShYkO^eZ1iL3`qUhIKRjlfl@pb?ZWtM+bz)S^6QbQ->zT>{=hqsI^-zA(M9OQCDDB;Q2oDj; -)natP6tR~J^^1~2S(&ZPhxJt69VYPKaNl@cIeLO)QjI6y?E^i_Tnt`;+*I{hXmk1PsI=Uc%-4RR;R>{ -BLnM4Q$3Jq_oAjd|LV?+h<2vxrM{i9Mmuv}be|8b@9T$XD7opVn(lVI!oEfi%`~g-uYn|l7FbZ!cc)G -O?s4@KQvO-MMg32k4C5N8E2)i)wjJv0&FCVc%dvVrxn*4(v}z(`K8m;UK`w5@@{3{&CGX^sr`4aWBfF -Q++we5sb=IWUYOnHxkWUXsoEk4PS-I-|dNBnTZNJMhIVNydhnRx<LcWb<r$6T?)nAyP{sozCHrs)Y6% -A^_9Fxgi9}w8Il#=S_1f{h*I4wnsQ)Z;3p>q|R;XpeYe)(mV6imEaecpSXS=xvORCux4t=QQox$4@6r -qyZaADRQ5a3a$?riKjH3+IrNU3D+9zSg-4&Ax|)GuvSa?lr3wFb8Wh4~oi8ov*^*(E~q(e2+i>2u$wJ -Pnk^jD3e=F@}hg#pw{-Ouo90zt2b1Ue!})7rn970TB1x5PqGK7x1rIDyIvlx*Fp0xZ8-X;4TdZ+u!=) -@q9}NDI<jWY(NxEvZ=l*)cw0nmc&Q$-DjsqOIg@U);OXIOH47&$55aw*aY&3<hcbr~xG(nqN1v||Hd0 -0goa!$QMokJvZ{*G_%cBloUq>9dD$%{m@BW$`(7q6+*Pv(D72aS$Z%fqCE3>qE<#p)1W#^7wQ3o!IrP -qP0U-tZ#sb%xV>i-A-tslTK8CQ94q1D<I-dp=gt_gq3k3xl#MtW%$N~%rVdn;EhJAjHU^4_{`PQ-g_Q -D5(^g;8&-GQ)doiF!YjBJV9^08|fzf+^Yys`~(PzR4}K`?_u|>g&4ITN%=!I?pKG)Yo(C!hWhZkg2xq -N2`G}?Z(pT=f>5=nYiQDf&I8<hU3=u{m}({tU7ATe+^IR3^Z@LmfzMNdi}NxKNcMS0Y7ULl_Q;EyUFT -jyX1i)%dzL?&$4#3_$|An{09H%UB3KU0A>fdf=hPEGQ-|3S_C;sSSMPP);8%azoo&Sxy8pC`S$+n2gd -!IxlDw9Y{3i5f@lcWN4<WfeWEWPSdbQWft~i2HolOE%ph!@+mRh*bY%?QU%+aO%d1gK^@WEuAPU!4nM -_xsJi7aiRim&l09ZZrFvWunya!-o;rD0z9_;n8cT-L{{J}vkyu`wun|aV5n&V3Gr#IyaQ+Ge%XCua-3 -qr1Y_p-qSV(~Yow%pKfL4MW6It#`I+WZX4G8~t($q|KTfaOI1%S+ROQpDf_gv$f!ogfjg87WeJTYJq* -fg$SgFK~&;p94`Vu))Ziw%6py$?A?TqOkByrrus-mWKwPx3||ggpwe!qSGA8*F93u5}c6&cpB1_)>BG -D3}EVi;GH#rTh!hE#`UkxklZaG&ur$Qg%AoP0^9Ph`E=q!N{9R49S|~cOC=%HtE3|}NM8)wd#V{4Vbf -fCLvWhC^yCXeJ!~@+KZchcbZQSOjcL$>@Ll-jgC1QTt@QNBBk88}I*`IIeFtOv+Tc4If$vP(sKvn^dV -C9vQ?#eaLo%D$4!VCJ{IH4c@fS)?k;pc~vBu-dC^Kt=KQkMO$_&WLHmi%NX?M3!x*2i`>(HTrd)_VSg -^9jLxqa4~)%cW7d*N(hU9+#!Z2a>HAMS$aoWhY($A0DOI62mzULyq^lBFS+HTaa)yL>g_*g!T9#6iF! -_b(_YSi2SlQKiO?_m-W*Yibh8`WrWJwbu%xa!i;B{`-o%@bgj2GBAJeKG+5KIiOq)JX_$e70Sayg}*l -V>kPDLZy5HKLT!KegA(w=i@-|@{!k%!s`%4}Kb?W5wxT4LDLm&28WO#<gl>+J_eK#*JOE^PAo`4pDeo -#m2?D^oIYKGQlJCaIiAqCSP)rG<=d99ThF1<+acbJbc%mRN5kTFHr&;-xsN|dOlGuX|pyZu#CR1>_J# -v31E$eSkgEu|prN9C#@S{r32u;So7z*@&U=M+mO1hg!3QgL8c9HolQq4u18bb}Vpz9X;YxylB4ry`zQ -0g#{NX0eN?5>w4zZ9?uRnMj*7r#i(qJiPinq786uR5mFWfXM7li;ZdVm}3ard?P^M_oZd8-#p^(&|vE -9r4pslqc<d?ltIp_Z}c32Z`{r`&@QKggH;juMt^Gy|)!bkl_5Ih|`CvWB2HKrXI{vyLU%6dw6p!5H1} -^R@q<R&26g!##~U|iX{UNKkM{|l8=<?y01pJDaS_5V6SwwK4LaWi`(<ocqZE4H47z6AaC(SB;L!1sI^ -ctH1PKB$hw9X#3B~`4z20$jK!rCN^c{h;bwW4XU&p{Sz-k$y1g+c#inji*s$GG_Vhx%Q62<voXBcBn% -*_b?<z-n{OpXj&<MY^OB3BKqA;}u5XP5hkRv5q!{O@a-H}64HH%*9Lf%$jMS#o5Y^FO>mOY5#b#hWEm -TQ^8N@z%cb~AD!0Uz5ZR-lPSyC(zSy#$S6*7!5x#XA~=l3$>b28Q!8%9v&SB4tEni!NFY_(Bhuy`hC2 -o-$8Hytm|}{8%IdRFDl7$oG{Vlyl1xqU9_HBz+?k>BJ)0ViE9sH}@%X2bM{NGDCaI@B&>>6wBNZSr&g -N_e&273rQ2{jyK);<Z>>Zmf`7I{@gEtB`I5lccIiu?k3^qKedu|fw=?#+VTz5-ig)Vpo@f(Nq7xYQFn -|`@=6T)g2>5Y(VYn>4rkb{nyu*Z4Esf2{w5H_@#7<wI*{O1ax@x_hd`gAP8<dL$-{&a^lBIH*d!;@K` -#jM;cbKgy{e=)_}%KVA-<5;jCZ`m;(hVj3x1}Caks+AIwK<k_AU>HX80NDn~gClfry`F<1%_H$X@-W{ -3wj;Mn%{A4oZ@T6|K%okVkpSMn`I1<IOAcOpMpuKKG$OA|?lHb(RDz9RNl&n1(I7dgok|2@|2#-7o37 -EZ~l}HNY#>1!MBNpH_vJlJL@!QGJ`t;qw)v#p7Ji@ICB^H~m=A>V;;ZbXN>ryepKTL7Aj)ZMPHw83dO -7Unb*xSQC^B))$9B?+OP%27RNj&N4OYQ&Y8QHpxeYb%|4j4JBp_k+<{pO$haPcb~FV4+o%Dz1qDI>df -CLSz5IDmrsWqnkoahRxZS>>c7SknG=llOw3j;SOQnY-hnlxw`c=lemV{qGnC(~rXo-4J?dvq&l1xQ?N -U8#Yc8up7BI7!ZqfJi?=N-#6!8IGzUb7QDTQ=P?>~0}&V}x7fy&&qY<{a0vOQg_>-QL)%@N+L_ganyS -7k`yzmZ>36>d&Bxj@Vw{2u{wApztQy#PsHB2YR3CT~V1rRd%yJB*th5%R+PCO$6+L)AS9n8N@tV+yhz -fp|!^hW}|I6XWn#SHorthfQ)6hnfuFJXS~`*-v-g^i%F)^D8_MT>T|yZUBZ#imn7wH;t|!dv1%IgP(y -|<86twg`m2|yT4B`J5si6PR1RYAEDS0Eg!HI1P5xj!%|808<7?O0<@@w_XBJt@YZ9Yb!us_mK2FQ^J4 -F}EdZ_;3NImZqg{VZxK83z%BPTnHY^~5L9Y9}Z1(|wcK6?4c`x>Wi25a~)qboyuUm?A*arA|+4cw}Qp -@NS{i4DmUY^wXbim3EYySiA5rU-fP2G6Hs0~vWY$qC%)mwD?zqwGNY|87sqw!(mo;0qiA%F6|S3-(N- -i}N8U5bvhF=0C%bq7<_ueU{MBYJ;j9z@#sJ9u+X`TbW&8($+3_|DHdeB?qs<<DQ?xzSPJ1&-#;VAc-U -kp47sqJE0iip8Bs8iikR*Y!VdLjg`*wJmz6_8_ns+si@vr=sniG`m^u@4?Tv?S&M)BZakSPW7H>x6}n -x2kaL}cUPdJKTOI!yyDTl*(yGcN@~&DHPZSRfnULs`S21qka918h)cHxKEPSDU0ZcMa;?A<A5&|Sk-Z -!sxpx;P)0YtTsk2-#lCAs-L>KzMgM7YOa$j7Qq`rpbNp{#kzDQRwGRhbczao0o`BwgZeh1)I^^SGiGe -6)^r)`ajDGj=IzlZIl3&2Qqt2~RmIOenK&J9m<BX#`d20+jZD5q_s1D;xt1={ea%(xlHxDmMMal5_yv -ip+y-bWDewU5}+0`z#;HwN^isN1%{T!WbVmn~7?dDTQ-_siT<o`lAhEtc3}KRe~C>BgI%mO@nY<|pg- -05B;8FkZYL;D0zUe9te-LRb*l9!NMySA1xL)jOlDsIz&)92jn1N6Rx@onmyy*_-jbkNQAE)I=8j@VPw -RJ~br=WMI7Z?q?2Dz$WS@Xldmv^yQ(Gp_+hANz}C%J#w3RY4Z#IYuSSNSQh{iJ0O&Y`9&W>`F4G)`X) -+ccj>aV^x%u%{qOgRU9Mjh+jCNK$mtMj_ps4Erm{1B7M7EI%1Y|4xxY3|84Z--g=|1bxhAfH)pw|=co -8n(V`w|zRNUhOgDUT$9gOL!j$S?OFK$EkUJIhUtF9+Z>-CxFwU^=F(fPoYc8QG5TKOkMU;6Kev00OaU -mUw1E!<a1!MR0JD0i)oHRZC?cz5S4bT9`hh%WQwvyZwGbZ=V%e;)PMf6{d|uR+(nXi4d<z;nEt)aeaT -Vd=~N#<YW;toiTaX_)tqhHVeZ?eh|FblxJ|q+7j0`8bg^d)Wmq+u{$-{Ro7HoC0s@NulIA`ik28YGsE -Wy7$MP&?DF3?I8Z3w+NZU&Uhl0n+wGBT3GxQPLPx@yv*Z-b$)xR^0lB@M79M)4JnjV?SqG<0qFMLm+@ -YLbxCHiCTvBG$s$qdvV$az6|zPzYRB#Yu3U#_ZajZ>8sWbh&$Y(WYdmj=qi5+Xqf?cSBR;MXUL6pFT7 -pTW@DqiSZRp9|IZY_Jk6ye&Nfo_J7fSv`FSCV`8j=C?gp%j+s?yGf<e5t6qe98sl%6k?TyIAHWQoi3` -2^JeWY2Le5lZKS#3HtD$`ML#v0)dgj@kvK-O9h%Ixpga<PST^XbpJSIy+udi{Dg{vn7^iM=P@osu2q( -E*mU-Zt{el-Sca_qs)`OaaX5@b!xA9gwM0Q?6?P3$%CG1sd1l@L8bcQ^>|F#3<6nr0V;euHsJ?&0~T- -Mk!;x|`PfLhtX}YRM%(t591%)p)6x7vSbs_Iq*kuS+Rm2h!Y@#5?8zD|lsNF>>2>{pfmy3wH;Y<93ky -lF6Y;vmI*(glwJ&_U=ki8j6=;+qDMShYY8TQ-A}!0emU&!{17xoCl+AHH;m<EhB8%zVwWvIK996q&=D -kL1&n05nC7QJ$=xvfh^P9Y^JG>fgM!aQIz1N~uK54>FlE)ya-IjxySR0HZI1gh!kEN62RW2#~J6hEzg -jcelJQZ@+yii~H6bG1+1X|{2gpy4VQTeP9`wqdxQu$G(bD2=`K9&p^Nyz9`uH=Ez^H6z6{7{o%O8Llf -Ru@-c<1lzU+fUMW7I?B9vK`ILO7%dSlwK>*>W1G31_u355Cl#L<hw1>y&{MVHsH{_p{LTkB}boIRiIS -ghqrCH=82*E&fxSuqAeEb)(}j;k8*nwj{(2O?u@Ru+UPfCR46HmB^T}-Z|I>kTn}Ib<FuGyTs>YPg7j -&vg-<2FNrWmCKg&RU+Z>m_0v(h+rLA&&E{A3<8{syounhxP-%x51_k<jmD|~);r#1p`4LqC_7n_?8?^ -Z9nyR$cAGN7dA?7of`oB%siA4uS}TD+{fRDUjxf9^FNn5hnTk1(?b{p*&ZJ7DN{I}wmOT81}{-U2wq& -vxoNOB-LbA(F!jsu>`lMycbppH+vZW+<K6FIYrN9g169wcUO~<)Kon1Azoq1f{S}Pw6p$|4Vcd6z|DO -7fLLM&-JYU`JS@$@cE0n9_U}-afbtUiPX37f595MJH^jYHWg-eVr`;Zf8mDW`uW(w{GDp<H)vqx{fJK -V7j<*Pjt&o=C*lPZI-m!MB`^2@r37Q$L}5d>l-~}es&!}R2{OM}OTJMow+vVu<1*rEKOS@K_VABHi|k -VIcX+TQ5BCC`4Tegurwd8^RKeV}<giCOfJQLP$aMaF%ydKFOoW$mvfKeXEex7sqtDVv0w%;uHjWDsD~ -8c24p!4F3l-_c)}I%?z$0ViffZ?y$k0l(Q}b)_Fmyjfd-ze4>{{tf@9?B|K#8Ql0J?P=ud=Sg&)@xxz -G3ODFz%xEyXHYc<Rs&(4r<0O4~JiCz)6`ZGl-m1=|vqnUET;3PJiK1iCq-Yd)m8}BObgwoFgKMeF3b& -$3Bi!^VQPo7sk-#9(dFBLjGx(qwT;rSh{gPwZB+J-PR`1L)n4`d^y_aXh*5}FOa>YeopEj(v5dZmo~3 -lfSr|p%sZRb+u8N)sDMIznb|C^Pvct;m=6PXW|N~!gKGaZaCHDZ*i#_jK&~+xFA$y-!*6V##lspp`fO -G@eex`&bCEo)atUEBIfZUJP&!u#rTt?#0!j?W#n1<z?UWYihtwYvlEUaa1E|3f{uW*U*@s)q2GS}Jm8 -{zWgW<6<=2j|VrFgpR6B9Fy#2-Zy&k5mQLt+JzY-kP0^%@L56%9U*!DpjE#7-56eM8a_9<u;Fcf>Rvx -Zlh>EtH@E5fVx|o>@t227})Y2+l)CohXOEoP~Gb&4r@UJw5=O5Ftw%Fzr0tzeq*U!GrZcj6@3NP}1i( -kD*mk6A_gbMAhs9wkCzQQdhCQn?#Nr`_u>g9IRdN0~5`lwW9@N!YDrCT}Gj#BC6K|^<sPx*GOy@-L>+ -aO6O?#N0sS(!A4h3;4gy+yxlc?ksgFf?b>}<wRSiBnzbC9|2RO;%C;CS(-WLqhP_;ZKY94$_p)#J$T( -BsKv1GfTm5)m=q;j(kxeA7uoOSBi?{yA0@oH7nBvKrOB`nI9}RmewozgsWN*>RH~Tei<(q*=y~Ug8-u -6D<NKoJWEXuKt|I4*GR#vC|_ceV=X5qD&(NouIa_Ck~CgV#*?%tZ4{;cc#OGU<^tNgW(3*9SPjN6TNs -ndVOKUtI^vKe?G&~z#NqEK!fb>$a|@JpOmeBOt?@Tu>>Px(~ir+jMUI=VK$I=x1l?qNGXlBhB}=-T&j -bgQ5Glj)@Mxj}vN(?~CKvOuH|O6HJ-9zd!w`tUTAimH1knScHwr;lM9U9l4N;GVUhmirqu`q?f|cJkJ -0fQXfRKGLHtsnzco^U?d|qUe11)0+X_tOKqdcEZ)ej()+&820AKu#GE1HjN8==y<F~D0fJ7vtV=JoCN -8+Iwif~avwf^WjuMT09(5VZ{g=2lL2MBPM;L!C&eDNoo+P4d$yYK8_D^dkZGmFcG4A$>N5wCyyBH%Xx --{(KvK73ZvKULx=`x3bebsNLEdAT&8k8lI$1fATr8>4z%Tf1dJ@iW^bUF?IQVs0ye9_U)mL8!#JgGB_ -aDBe1u|^viI4clblD{o(^63ct3ni^bWXvW#gUZm$7u@9n-=+Y>yglOGdcN6`3>sZ2ly8tg0{y#;`V%> -LapfekDsqa2av7mTZqFH_mt35vwX9Z|2@qG8apk(!ofH!MHjcSy+|^4{gVtX??cNyDZfq%jhIHC!u<p -)p7IfwDE{?JygOjb%^xA^x}o0I{iP{lo&CdS`@KGY{G*p2{eeE5k^Jt5sF&h3z76l;_MTop|10zZy7T -yaat-Frfc}E)QTPdF0H5rXKu6@|`}BHvlk!y@WmgNi1Yq|5e)@C<j`HCD!`{2VMOAH&<9m1xF9#G9!p -Eqn6h2TWQGCqEjLz6hqJmmsfG`NjV;W`@%LfQ_ffGetE4x|O%F4RcwWrz>Uw~!4vLdaduGXQ^!XAiap -8r~V?=v$XRNwo%_xt_+Ki_-c%v$@k_TFo+{XBcG9fmpi+<?2w?m<zJw`*OwuE5tgw2?5U`oum05T$*v -K`@4j&q5PckrR307kYf5)*G*J!`s&QS!&ePAt)-6s4}#;%Cblw$0$Lgo{p+z>=Dz4Bj`7M1Oor*MDvi -s;U`{r1M==Z^UC#oyhu+$etolR|9kH`-@g|wiVwVlZRG*^DC=Exz#=Qpm@>s4YN+4PNIy*M4#j<%XJv -D8OQ{dIdmE{SP}W(R1g(-@^QKqekh9Cz5n`$}Dz){ROY{@J5q06xeXsQPdf{*MCX3pa5mc`BQL3st0e -d~3#$HJiQMo77RBQ6;GF1GG(XRQrV#?iwGzxE^<_U+Yxe_5Nlck48E2cDnqikJ))^}6ud(k?WS>q>h= -j|0!{_J6gdpMnW6;tXx>^7j?f{H2kc-Y~0IOmLtDffBUp>8qfH5F4{^>W+cdb@LA#gtdT4%%!?gi5!k -mbwXl#$P(Y(n?2aX-=Gh$SA?+12%?Q%9r-zm)S9w-p(Sr@7<K9OmF&x-k9{=A(Y%9H3#Va^wt%0HV%` -<*79Was(|ujVo$&;p30L)I06!24y4-HD0Hb_3lja<?M&=k<X-2IY2Y1@I`67RJPWzE`#!hc?&qkSuEk -wRkceAZB9foOPrcYkMPqTl0*=#MP1Ml-n8FNi1&!fr&j#w359J2x#lNuz3K%ft9N?J#R1Dn~h6Z=@q~ -Og{<A<*1snp#(J*8$>#mmi;H*kYEb^y^$e`AeP_}#eTJF14>Jy<!0H2dDt+E??$TJN5hg$#U{wM>_vg -_dc5JtcP@x3;$v+6Vu}{Tn8ron;oz8-*@yr3Guym(Xfxn-vN^zVJ8Idf`swgmYMKVNh=8G_Q?-qJshw -L>P-nda9ekzs|eH-yk)sUQ0liL*hgoEz|)$J%FpGs?#0~GneNz<(JiVKllxBJcfP(n&wEvi4)m`PGFO -&>K_Dot+xA?CkHruQ8><1dmNYIt~#Z$c3KQ3Pb>NH6Q)k|Chaay&aii4lCP_J*D<8J)85ZepQ0#F8sV -Ut(Sne5)txAU9Y@=pVbTGN->=C(1CoeIhLMI7#lt?Yy3?VYrnb+S7GO^ShD=ty-6E!?(EWapi$;6DIu -u-*Hw?(L=?p^sG2no9ln2t@_8Y0n02&YB-rK_^JWO%g?rW@!i2<K}zjrYQU7KZU0+{H}{)mZw$$QxIP -T#(Rxb7T>-lNI)aXix{MdU9=c^lHcADg`C-*2PU6FEy9-Ui_m)ly35ZR}9HJimJjr}a5l^LMeE+oWNJ -<nyH&h8z=a__-*R&NtMDpEo2QwHfem$dqHQi`$Y+^*$YLx(1I~<8pd94KrFheKM-|gCcL#)ead0xYOI -ME#1z#<ILaKv#60Gsu$5=35!-$^$e|%tuPEw+rznHz>$tl7j_mq^dv)EE5dlg(O>8&Ojm!sBH;kNG>& -%oQp5~Y3X2nF`+Pe7IO^(|wUh!4j=|^^lrSzUbdAfr7qP1uaHD!c9jcJ{k@npmq+`;WoI%vIKV7cmec -a+n%bNF=zADt70d+r~7~Yxm_^ELZ#bGzt3`6M)&}RE~J%Beya^=ELr1P&&Qba>Ku12&P6HZDIpQgESY -dSk8k|bL!PRIJ60r`Rf%T89-U^BASurq;2XG%V0f(G4GJ7fdIX1wqLVC4_U+XCJ96o=yaKGXZ2-hIPP -#aWyPCP>;>%eBIJnDR91MZAGqSHE0QyS7zRvv!H0c5R2g>V3Pic5Rn-N2t?ZS8M6g)k(PRR$MfTeObQ -RAD2jhR&|FX^g<KS_(K(#qHnc(>jQrk4l(@^DEN)qkq5Mhl-qBX4%oHuCW*@J_*u0wND@E)yZe)$?E$ -7uesc`YN??*l=d2!+Je|<tjM8*ADeX##l0cN_wD{pv<Mh@G9fCPaSL<lhzD0Fuw};xt;m=6?iNYUM<w -cF7N}t>ze5~5I#~G#-jyi+2!iP?Ot#I7wC44M2?IO5=D}CR{-CBBonSHi4xzRplI<8pSubEEpwC>R9x -TnfKb~=7Pw#QB<et2#Q<}5?nWAOBdaK<@6`zC%{b_QwR#QjE?x-WKNW@^m`wbdQ=fpxyGZzZJj$OwJ@ -w(@#yg-X`~PLMN=eW2>~_N!o`{cULFyFQQ<u*Y1fUjHh%)K444{Xw%0{-T|MfQQ=s0UrzwVk4gS^v2J -U!^N#H$UMIN1)Q*9DT^h53Z#7#olEI8Izhh=Cfupb>=d{DAnqiHX9xPtqE`4w$7<rIsA;`c-$pkoRtq -?Mp+ze+joh8Q+mS+dW@xH9>{Eb-OcXNFIjmQLm?0_RPaZ@aQw=#mruu95zD+kPdhDGv3O-Hvz4Wpau_ -%@9;Bdl>LwpK;grxR|>DRCpDdMJ7-p^AqYkrH2ijomp#mApVE|}Y-h(rv1((#Nq?|Ebu?%r^2)+X<F_ --V@zYn%ai9LEPxnA4@V2|?n{2e47bnEJb7;@eXoK7C*pMu*YrYSt)W+!54kVv@?Wb<Ht`8vPMfH4b6* -Rg$XqNnA6l`pNDPg7m_E+zvGF3n)l^3vww+JoFsQA(GIy-3$qN;xS2T$Bm;xkfA>PI7>rb?b_p_v6ar -t2IW<*J${uV)R2?j0{$mVWBb+j0d?$V#P8eKe#DnqP@04hs4oI*^e#NAQ2o6lM9{a6+~e>GI`8xf>VQ -Ju1LB@C9Y;y_t6?evU<8=FXm!v47!D>MLZ>M{#4$uyqhI12v<r0sbBPJm)f6pp`e1XzYO<>8Ib8VbYz -CQJ+gQ7{MOFP*v=Ex9q>bD?9VJXv6#|yiX=`G|uOzsjNB1<L)<1pnnU$g1%1b^g$HA|!sv6hHRd1V@= -!CEF(_VyvecGE1uvy<CU4{`_Kimb1oCaPrO<+ULgEDhoognYcy;o*&3)9Cde)AFKo2m+R?t-M)qfth( -E7rDr_r^QK5u&TtT*hqEGx@3=`j+XJp)q${1!eFZOk~Bco^`c*!Y}Q|F;|!#$1oZ<v`XTVQ#^)<%ee8 -YXbGLl$Vr>ZT%FVLX7w`2x$4gT_^}Rhulmzvnp&2r^W$lzR8>DPOB(vq@hoGG8SQvuJ1_%Nt$oXz#$e -3Z2Vo8MX}&G`xP9UeYQB^8E*vy?x9OA5u0P@Q!E%zfWCiK!EK7JbC_laa3OUy);n$Eep!>~FMj^OK01 -shF>vxNxjcxu)U09MPY3&h*nl|!R^<HsIN~M}NKg}pis_Of(pQ!496w;9g*63v>+Mda6k*gVkM(M&ZY ->QAGu{T|7{aA{)Waj+1R*LAjp0+a8&q$IfC)z0NrPn4v0&xE=CSX>1Zlv-u6y&l$L*=uf4j9bYyEJDP -<(wTd)cOPp&F$kZ(h0UpeGy)Vd**JOFu3llrDF;lhu{TBFfXH5Peh7)x4FB<#rI&>NH=;^syuF}uzym -yCZ>$QF#p2t_4GD66t|7&@(w*hfck0GI^kV<hyBNNbRwR(fSWtOArS({Lsy0uCmM28{0b*SeZ;g~Z2v -m$T^D@z(1ue`iBmR0n{pB=8?Gd(r1o1S$#v6$hTngdq!o74dtUW;Vd4p3b1an+)K;kzpv;aLVbUeJ&u -HL+Yh*&>UUvVXy?<V^mm`E8U|_3)j<3K)wIeWYH`gV+{BKP0SKuzX2AL1WPT$p=q5ZLk^UEe9psmo>8 -@$9H1W96=mOfceSBZMp|7#LHF~l8JZFrO|QYdZNoxA<**WvMlpgNyGNCj06)VbTsuF4a@qEhtYS}8hr -``AO6l@GP?!R_+9+kGAL8R89NU~o53N4jOc19#J7wv`}VbiX{rK_kHI{(zQw?2*&wv7a6)W9cj;XcE! -_l?Gfrt<|=fa2vg#3+zDKF1oK?+hM{z^~WKyVeP2F(UV?-q2g!U6>fW#el1f)`UI*Xb%7c~#cmv@Kr& -#c*p5DSYAAn#S$rnd-T)JB%r^<9z)-Y`1fww&?IO`mjdroPV;}9?&|XA)mN2OWZ97bK*Z#A{3K3&4R& ->z~>Xn#Cwv&I?Wt!X``G>c`=-tw@fDF<Bxr}H587kYoJPL^x5ZL*+3P~=YRCfVYwkwgRlyM4o0r|56A -|6rv!Sc}sc43Y?fHD?PqzR8cfGsdCoJFHmnrg!wAJXC}m3ritmQRNytzzW^Wl`=~Ossr%dz6of$A|pw -LjHE3orrc=2u2a@+R&~Q?T$dYXbEBQ%@0L;nle^ESj=I+RX(rN>dWrrjS{cg>iQt?_d1W832B=XlD`f -0j`2HQA2v|kt@OH^cH5fnRkGW86~l#34A0=c1*mZib)g2SvFeyTbDKZ#f2VYrKI@Ec5O$KK!XSj2@gm -tqrOEqU!-ZqUgrmlhAK0Nzq;^5L`Bk0vIfmWegaSSV@Ch6r4)`F323B=CcEMy>A??NA%k=kG`g@7~{z -89$roR{IZ`WSU!gP<Fda0<_y@tqYjSN}=_>Wu1MBOvE<I^x@$P+m27rIo{Of64HWi~DiJTjXefuP;=p -Q$#Ah?}zcz_vio`|sNo+-CA@>LZr=fNsY3hHXehqv!5}n0rT-?0y|}SIh1f^wfR3%Y7(yC$js;dK9Qu -aERE(21Fykdjaz<MYQU;zrSOET3_*L7%bx@&!?Vd$|-$6dYUSu|M+P(KVAm2R{K&KWH5~*<gKS^ex-< -DJyQx=-D#gjZ%URvLU0Z3r?gbL1b%EyqP>T<e*RCWYezbcOFNyq7>&XKv!HVkP7TnUPh&f5Pn05F(-E -!;?+DkHIt)A{aSsEei2Jz*CEb#MeuR*Kr;!PFaF<Y>@V=RDjHO=Kl}NbYl5kM`yPfu3sjhkH&3k|EzO -1e-?ymf<Ke_MA%F|5=vj@=5PI}jI9xuuA!%MQ9@BfjTv>x9gZ+G36(CB>L_3eRPR*YL~`x)5JF^3vFO -u&>4q6Y=h(KoL)$|+(R2LmRidnB>_PInTaYcvUajFlH9$6#~Z2`%10oKovEzzDrFCTarqS?$hPQ{2%M -)efJl^0c+ysH_d$u*J0dVwZQC?(_w>X#74<T}(Gh0?DAf+Kl;^we^}*X9K3<@LzeB+8q)<TUmXeOkH` -=Yh6g?MQ_JI!M6iOd(Pp4uL!U<<V!RS5Fh-js|gx=r@TQscCRMgV;gp=p&k#))h>nCVKCIL#rit68td -zRn1?EbrCAA*Svap3x@yy5I=Jo{o$!HC*sYb`)g&d+bCq~eNCzIifl*=H9;qdHZ~YR*8ZV($Cs@ja3o -sUU_!|U;PRR1P@Cdfp>|{bT-ZqS14J*G?vc39yq=+mn9@G~3=jKivdF<?9t3Img#&x$a6^zCUKf%D%% -Qo-°X219UJj<6Q+6M5{6+?_TANJC-WjI>c+5Kq%wdP<fyRmpGqm_CI)#vL^U;*MeYRGx_W@9O*WP -qMsU;I=XO+*CDg@GkTO@uZErFG0`204l*1+IKz)xix<PZZxWj6xVdl^j{ZB)C+=m`?!?sTtGn!z1+x{ -u3gHHr<nyX~eArQkd>oRx!fUbhVfXUP!jn@3<6O5~);-xtGrk1cg6l$!$t|m{l`|b^a50MJef)l&cU% -O+@hKjAX!e%#zgkujVecpBe{U$&6I^}LUhJ6~*JpJp;yx|Ekbat=x8lxNx=?qBo_dD13D*|c30-KIoF -VKWv_79^2UsaZY|!H6*oOM+J1VANoT&fDf$PKb+!lWU3*2U9RvHrC7nfM63LI$5KsW^u&U#Czy!f^B3 -f%@)REKdC+sRa;fV<blBS@`^UazGSHpes)w!E0CgK!$uvIma%sfk{M1vu3_&(?!u!MKHnYZgAD>%)65 -NmBWmn0&%E3S{w(0(hp~Y7}k`H43GXM&Tb+*Pv$|(_kHo?@`A-s*vj#5ghpml3r*x<DT}Pt2-TjP+bJ -8&xNH{U_aE5=wnm@p`u_NnKlFKNE@#s??MvREq4|EdQ)=SswGe_VqEoNVqYQ>wAUpf@mTCHy2Rt$N|$ -)3Jj8=8$%Drlv#^h@#+$tx#aH*?`ri9;oe>Vv)oLy=4bz!kTobNCLajtCaEGOc`7`jOKsP~nyp(CLFc -U2Itm6Mlxo5e`U8BWQ6kTF#DK6!2rsWCcxQUm$2FpF32`0Oj3~IXx3z&TY&|jt{yo8r<s>fCk*F`&7b -WVr$_%zI+-1_>BO7U|WJFF~z$dE|!AVWZQ7!oVK&X9QVMT!K8&oB#(xP>7G@j-^9igz<)iCE2$EO8A( -^2JhyB#E~*Vpq)c35b7_SaO$^6d&qNKwG1p=u!;vpytj(n~UL4GDWSbbuaC(2A55ut@iCwo*9P5& -Jmf^@Hv5nz)?S^=q;ka*0Y+*RIWa66)$9+WNc7~(=O>ry3@zy|b6T@-!RlJMgcotbKXE;@YW@k96OcV -1NjtbVqjN9DG(Nb@7Yc<m`9QC4!NetH@KK3@3ax_tWn@cI07|w81(kdz$UWWK3E8{KV9Sp}E(&A}`Hz -3~1@J)yxWOzQ}jSSz0_$v(Gj`%i)<0M_&%<x9U8yMb#cooBsAYR7sEr=H~9QOx`SqyJOJdNQZ;s%CyA -U=)ZU5Ljs9GCIM7=|kmk7Rf#;=v4$M4T|3Ds}v^gz*`1k>RL$S^SjYNr)d|II4se_c7dn_)dnSYH0B} -hA%;U3&XPz-^lQM#A_IiYI4Oj3@=06%J6c;a~WQP_!5RUAZ}v#Cd4%i--37|!?z(G%kb@p4`w(XA{0Y -Q=#Z8wY{OAvp1ZCG7?MM#3os4y6~Cb^)%8lSNnkdu%qA3Uu4Xn(%w`GLWHOsqm`xVgq%)hxi{;p8+k( ->X(Y8c_$J2Gx<7yUE4K^p3&2nZF3pPiXO**rQ2b(5llfrD0z~)V6Gm+V7z~&`pGmP07z-Ak>31K$*VD -lQY`K5?8H(>J|vuS5GWnl9-v-!Bl)c}Fz{mgPtk*g&F%Nl0+e37e30?Rv?<)$Jx-?{!E;C={>(Uo*$u -B%aqZ)|jr%;(+VIWj+BhFL-#NvVN30?d#34B;FO`1{p_i5oV`^Mm~`{D1ei?!SsVY7*YXC6(wp#jLvU -fT?>Niwx3kAi3CZVK+|09bYxLr`vPu!vpdvzLZpX6+d^WR=o$E_*@|zL}icT9pmfr^xWhP)BX;LE_)^ -HF;?%jH#=2^Xc(}zN_!I;aS^2fX5M395<Zeo$fI#W&T$psK@9bQ$+>`9`+4AA(oa`~Mqn1g^BU?DQ+) -y*W7&!t*g3xCOFfQZxQk!K+=Kaw+j#?!j&4N44dBVkJ{j_3NCqD_8w4$gyDm`aFj1`!fQCAz0~(2Fq+ ->iTz~KbveO$+p*OMNW!$-?Ye&6DXlCu(xu2%>SGpJe&ssk`!VX^mFKA30+D<pRzU|xr@;)0Aoi7m$I) -(uc*bLBGoqDMg;^(d(QG;Nil(p_LH!?3)d*m!a6b_N?fxc<k>ss@8yq5DS7cGxogSi-xa4W!?BD@v=s -c=xS<XBaAfZd;WCv+;xnWF_@%3lsgq52IBn;y|LjR^lj`;yW4qv28)mKS<A3#2G4oX<PXg+B^(4;<|g -?n(KR>w-mGKp5j(1;!*-#^AETeKc6~36b-V&KbS*D13KWwfj4^Q2{qF}u5j+o)aK8Dsml+><i=8!sPK -r~Io+uGdn;CNrMUYno0171;QoY<FT3_N48(J+VTQO<hWcQC%<x`O`#QQd^?p`V-Q$elku#FCGd>!1o9 -<)-Ucq<CO8KOq`YQbLucwERhp&mz8FD_+^P%+_rY6HNOe}(|4o?ziH@GI$Cs#5}(!24RJ>eIV@DD@1? -^TbX=IBel+RCqop%O9Ni;-$xAuZ9?*;Pq+qg9s1t5b92vZnm97u{o|a0F<DCaP28FWOF>N~yMoBpego -qgrsT4@V8(V)#Hd?R=N&iT8bV3u+hhX#?;6s3qcM?5px0q-$yQX)zfFp@vO!d~rxO<;HMKiBSkvsW$G -FBJP>Qh^<A95-05enyOA!6?Uys#2Rn{4lFSWpW*QleKok4z3>xur>eRN<gP9#p|Sj8plV|y9+rd%uAx -Z@Z_`$;8I(%wsHT39sm2tO%}(Lh=wh<8mAT+VuOxOFRc{{<?~I}|f<z+}U))}!H`KT;h3f9-6?}xwg5 -uSl!BPAZ+e_#s?R5_3U)DfE(5L8(<R0!-uuUjQd@BkJ-7|2D4?9T0^qM9d!>=y%)=z0KpJ9JLiK{|TR -oy`6;wJoRgB#f(b7s65P6%$nZ9+?E29Sw*VV@K+l`|2i_rfpQxL>_Na8M)q64hP4c))E<jESI9=2Wgj -U8Z^QQ9_y^T_IFDx)El1lOjH!$Y?haN@s~eb=OPipo`H-&Cc6VW~k(NIfklsc<U2R=T&wE;&~s9R<&^ --)d2ufXTrPD0C;$xibrcS;)!8+m>9e}mRB}=;fK=UTr-1kFb{)j#2qd#5G6)Tvx2KT`?bkUrK8)w`Bj -qYybbjcS3`cJX2{H!+8Uk81Y-H6wpr(&N+*IDF{bv5RI*;0fY-0LpY`IlPA19DN0_cXD)=DDm+_*6lV -;%zl{nl^M`dsbOtb12hTsV<ouU3!H7d+GpcVG<<c!hQ`NSBdebWLRK{W%}nMrzQ#qJtEL@O>z0|>DlG -7N{N!BAhVruuN2ba9P%5CCSDAvurGlHQF6yL5O99W4+n9)qF&e)KOz%!y~kG681K-l&?A5i-Pe7;^9? -?c^raUBS3ZLD=^?<t9y>YQt>s-~I#e1Is{F-704aN5a%&U)h?3=LB#Yp%)ggLzP!MPzwcSsBH3L-vM` -f<<<I8W5vbGn8Uq&=dfb)@8{4mf#uMAx$hiaqqs7Mc%x{0n1biaN>{u>_<Y-%aLk>f3EguP4AQ2MKWX -C2za1JXe%=Q0+L}CTG}dNoTnoL*1M6`*#31aZYE2%B+mmn%4|ul7DQ1;BVghoZ3$ujUgHY$C&Q-m04j -Jk<hM;e~&<qU9dYCbY>dj+(5rUPvxF#vWJf1dKLEd<TC;9UFold0`(KZ$(8jTTJ;S$R*v;*4Y%c>3Dc -qt(AxLQ(GW7N>jW>o&->$qO@t#j!ExT+5IMYQj{h`ZA7rR1Ckuv84t2CHcj^mMIVig<4vE18!sv4dy{ -C!JfNU+Ag@#+T8{)L1D$jMtk9KD%kpps@#O%h!^tR8^C}izw7$%!4uJEwxlRLHl&Dj{|wYRhN3~25}w -#>kOo~Ii@C>ZZ^Yi({r;~U%D7f9=aGbjJ_CI+lwxSlMh{?i{bP`ed}UKv|pi%!ANy64Cvyz7+$Jzv9! -6yLl?v2cCL%zMP@73x;+jp=}Q*_-P<VVk7>c6xe68Mx`NZwWT=z`_s1ts55OF)#g#GPf`KX|8P(sNBc -tH+qbo<KYGhd{<Opq9j^a?S1YKNdks`jiMpmR$ehn1}uY{8zJQ3o#KT+i(O@DGJ-=KMXyOic}fcU)2L -7Y|W${W+3@H;vtMoDv(Wg!N^t43*%yi~94b}F%(p80pWmB!%{;O(Ju;&*jUXzIAm2~8d9oT&b{>ztUu -bWS8{>pWCW^usSH(tgx9(H}KVgfW*FXNo^EbrVPbfVzoZ^-aX%u(aar5q1Y!|3Y~biHkHYeG^s#Jr!A -RE~g47E<$^hs}n?*t_dC2HIV^tnm8^Ks^{5iS=YoCrfcG4wQHzpEtF60ZK5al8a#AOob<<Yj)$bqlt_ -)KK4jNq{7&*DVVn3*7U0@?gwJa5liXyFMXh=xO*xI=v0*Z9|83F2{0z6}m{&9|F?&}XK;=TtK$EZsyc -A8wv%Z?7^^U7C^iT{PWym?wW4n^~#@$pU(X6C$`&co?o$OsJdQUctciUt9>A_z-IGT@hgl1jc2(9ovo -{-egL!Np_LT&nXebs4I)oH2=Z|P3$8-(iU+C$k3olVUfeoV=D+q5OC`orjQ-z?Q@cPUATf?S~-qtW2q -GF$apRe%~?wYx<hECd*xb}3a=*hg!H7CpAHIZV?<)m>ckMIwhkaQn|W+{|H>AKN|`gGqrDRCeX6?kUA -Bc2&h*Tq{PBf@{UV@7q)>#%KlCiZO&D3+;BQ5#u8T(}*#MYQzXpaE%yvn6*952Q^#x8}Y~neqofAT8v -h`gGYnU1eNxG2ztge9D1QTi}p@$c04z&{j4|LWIt^+6N^_)LBH`KY9F|;pX!tFh4ANsjKVPJzJ%soOp -nEGj0t>%Dlsns3OehQBS5VSKb28(?O&2BD7i!0$LLi%=5-nB)9Kw_1~W|F$_B|wE~0>5230wr($>xC0 -uwI8k{UgDUfS561Zf1jGWsd59BO9e`>1%LQA;&w)DHEc&N|dR(ViizonXp`m#;fk*;T;w-cfZE^h8uw -3A<zjRZZkjRTKW$Ky^9z<;-1Ws_MN!Xy+JAQ>xTLKSkrhgcmf+9fr8~3`Z|I)ol7b<m@WS0B4}oqDu< -Ha}~S6*Y|PnK@(tTN9`uEvWas{*#x!&OyPvS>fGuKpZPEqNR3AY6EIVn@0=&=mpHdtqYrXAla0bmWTj -Xd=+Y|j@FlF2`_-sUVzSe#cCyUDb}LmU@jh24;h{r9boiru1eXSwnfN%z(*i;&;qc4!N6hJR4uYZr5K -8U*%sF$Y{)jnU)a<D`;+ztx22!d$R7V79E6-feCjX*U&HDu!)Lf=J0^R!19Wks|-4R~0>WJgCr>L(+3 -OIJ9nj>%<iN4yYsv4xAL$iSL<anl81oiWQW0QA$`!BfE6RIu0wA_&*A4zvk;YmYM6%y)@SU1|OIby&T -N!A<zrHNW2oJtIe{-Ej^gpjLm#jS9_Jk{Hmn8JviQbfi`9PFCQb;4n$Gr|;8W)hn4ODLc^n6BdYQ1G! -6l}7x^l|~FrXq*DHsY-}%3UB}(PU)nV)6Eq$;j+qzJ=Fcj5gzX4$>XTDh;y>Gh|f>LSip`4WsV_#P;X -9#s`@6ne;CSdB9@l2)E`A|928UMeuX_04RJ2zInFS!^|DhhYNv==BXsm)Aw2%9i^~O~abJTMS!D#(qH -z30wfHqt8L`EsG9uMOWyH`fDzQp?B>ehx4;n8%cYzOSkr`?B<<-)<9E0$KPPL;SOiUW-qJViDyU0g6j -I$ka$^c#)9211}ZP0nd(zsy^Y~=~4r{QSqTbLpU;Nx@7Sgp{hgAs<tIl`4%mQeWskd3R206*28Wy3MS -_GmX{mfMS+E=F@z5q1?Gs{3LQ4UF9uozh|7ro-t3>$jjsjgFTj=;*LhtG*U@z~b%$=z{#A)#*ZQK<Tu -nG&jgc{hMH5jw1^knBOp;4a{+WE)2|Z1mZa`2YE5tr^9c)eLVaYqOQ<Os~ioqL3Y-bPc3wWK-Y=J;Pz -E?Q}p|x?ZpgHw_5<I^P)}FwCfz<<+m#m9sO`pMy=Yhhn$u`?I*eHe^RxNNBdmp&k#a$I}{-_vI7x9tB -M1$X=SP^KZMZ1;T~-4ld@2bwW`++(hf?z#vkWrbfFTsW@W23bqB@SsL77<v2KLi@6#c{Ai7%P={5Q%S -E;mD;O_JCOV>DHW<py~tnS!j;AUX0a2bU_*KPv?)id$-KCWj%*M1B2K=n-M+ULt;qP48yl$A@MW+UL5 -&xKZ}%B58TsK{C+B3VGST?@Y>q3V@iinEV^-*NT<@EfnH?xgn<y{~LP#}J?P(+p9xpF{+h?%#ftS$Va -${K~jihCdmenkBxGbHh6Nzk)~cu{&Htu<Mpdk|xQqsr`;l&%M=LwI8xG30jVfJc()d3llAO$nyx?ujp -J1EKWiePs6qiXDC~S(QYgWy$_HgJ{iIqU=aUXA*l0!OTnM&F4C)lKb)&3U3qr)_vVymZ)cOZeYd-2Vf -V2)<;vvge-dB@R@`k)*&y^jr$n97ZI*6x%Kol7<w?5c-0B=8E_FpC+E~m6HsdlOuVBhGSiFg+Xp-A&b -C$&RdG@8_Px2jWMZx`qDxVggcnJHOlu&F!LMpG1R5qu?po4P&7<>%%DQd8wtD)!#mAvOD*;Uo9v+<P| -FFQiS7goz@aLxjjj86`+*8xjL8=zaQkEp8adF}^GMD?~#sjO_%IQxqwuHd3i7QYTX)^(<{Fh<QM!!S| -u9hT|Z${CN-NrUjSYR7q1bv3P#?~2Qp;+$h#Lm|D@FQAT{thpBXZd%F|d&i<-Ci(-R;u^i<mv+<WZT2 -4gsngpee5S2SNs3uN&5MnOF`(a4b~cBSyqMuZ@@z&olAmS#CP{^=>UF|MzMR2GPDH~~oMa3d9_miA4v -d0`cPFhl2Q#0spLXhT-ID6yuTP7Kp*LJX-*rg46BnAryMw9zQfTGr?OyHZaY{yvdfg1%5fmfMQ<g#Zu -0p-U3WMOUdQFMf6x8}V`>EbGqmCqT=U?$Ml*)^e{VhC)zCRg4uW458XmV-{IrDI2dbxI<63Tou(8;Tv -=!`Jr%t6&>m#N0}GU%E7^J<~4`FmlYAiUUP$00Ewn5}llW6$#ATuI_PTngz97Y$zv5ke*|W!e%BC=63 -V#;&EODE9Vpf24dLi9X>p(_u<)d^u(xfJ3}~x}*_~QTUO^Cr?*9oPBc2!cj#&J>7w;%Vq2aF}(H+wZ% -lG;u6}@HvN>GaK}h`5whwv$cVQt$<jq<lO23ENmtFC&#PWjL6_1d;wBRuCqGEonHQZ<i@WW#l@}H3;< -d@=*TkVZ0mwl0N!9(0s5vHp4b0^YOQ#}PKp0;1H{?`MT~)~)w$Zwz<qEr6pca@2Rn>L$oQLZkw07(R# -h8_{_U9{7iqmy3I@8?8zDTe%!0;b$hUS~)+GsKagO3!E9?1@s2B1por|6v)2inV_iRyNbt@!N?YylAD -?zNK!p$50L%u?;}xp5Q@|6SM5y6>=Mm(L!&@;=<H|0Jcp?`_FJjkdx!I^hev)}x;RcaFA*S(|Ayi>u0 -10J5qZ`IR4sMcrmROk-Dr*bGLN(Ct}G!iQSnAm4=fHq0KKgW_80iL-jcWtCw!-8c`-)b0Ka%_)362X* -#)uIb?AP3MH4O~QHMGp27h+wST=J8y!SGF~=n5{8@cKph_ae|<Wg4jdFijVPod-G`35@Jz{VOuJ>?lz -cCPaBcXlxB&gDR<*I&kbG@FFgZ%_^!vBMZUdg*cisf!StV5XDg7KjNsTUb55XJxhfw-GS6Oce5SN<h2 -%GN0jyA-7hvUr;1F&Q8r#c)2p9$z!OgLw#odB6GGt^#te*ubEr@S2G>i~1LWH%xWo%j#DSfSQ;J6MW; --HBg`SFaWi?Vz8Ft>V&BnFq8xb6q1F?>Xeu12xoBd<vr;S#MB^$L^y<g9_Mw@x6vxkm+lKSwb9YI=vO -2XP!FqnWsmYr?1f{e2bgj?=lE}=D4#4;j;1Quc)-#YR)-_UiEJy>&>Wt<_H!*$!pMA9e~KAu$7xNB{5 -%B^%(Mh)|B9Uw&9g=2lZb#njw}7j3w@}VYlRc;gmk%91IF;@OYeQN)b_2ZJ-5k0Yv;KBKE%?2k4SL&o -rg*Ct@E0wd5xtrI4EGK80G{PcYkTqK*#Hkn^#8I2|<+98p!?N0}ZHnvb7DXuh?7mgotsJDfI1$%W;vl -+c4NrrO+}h`DyWGeeJ`4RH1fvudvkr|Rc;B{!??vR}rNca82?Ov#O^N*u2;xe*SDZTCs+8eRjAV{#6g -YGYb}eJx5L3k<Jbj@neAg||D9c}=fM(%W=!Q6KCld?Y?_FOxb*VLG}$1@30N3F@$+KHN`~a=At$oDDI -{InbJ4WAOe65^PlIKa?V(!<nje7%GX;x5*75R_pyn#>^n3yb}zNBw=s+<G*?y1El)t#m`|Hbr8MX%e= -M!<yU#^>e^qR!OaD9zbA|nFTzk!#GA4)X|dRLX{*+F4{;0wQHr4LnP*!zvWY9D_N6^XZ>^fAk_SA%Cm -hx8qBmqfG7q%d*nKK}=r7?rI=)GeP<O)|g>YW1{*g5kIKoH;J1@NDMlAV}4Z7{q4bbq!wPI&*_ip+Hc -wc|isEPx@`o$n|Eqb9@itrzRoW#b)F;RTG#C6HW%O!Yry-)QV>^8C2u>prjKd0Xtp;O#zOg?20KGdts -&0yX9IUD~38#b|&tc!M@6j$R%k|bY8kT|bIKL2f~JS?Fu>_g(8X;P#5W7`Pzu_fV{6mc_{oaw8V(z^& -h1W$E8uuL+&YhZEyM*gKk48z;q4AGL|!YKnz>?O%DO8lx=j!68am~S>&2|jViD@klR3B-+*_&68w3sf -giI|3>vCS3F#QokPC3cAE?<V)Ohh2ZyQ)#(&TvsJHUD3o4}+KPW*%cfJkeMEco=Zc@{Ep$r&f~_4-o8 -e*ZScG20u14rX9EMrtCWW$muHf_DtnyrvQ~_p^q;SUfu-`!Ky_}I?QYhCuLuL11bXO#m>#I*X{OKy4Q ->DFdBD!%DX(YrK6M+S)<aaq^w=_t6x5(8kWdb*;DtBj~;QK-;@JAt!+3A(C>;kZmj2tX5m>>j;!>LAq -kh#o8f>?1p>Kw(shVt*gsML~gLI~?m=XIZ`cIfDbnk3hEnmjx}i#u%Ch%bv?yZAjD?m5_S4@Y`l!^5C -N>gXuvfZe+?K;kO!Rz`@V$h~!M<3jocE7u^TYv`S~!)CLQpB68@RaN8G2h|RJ(k_Wm9q23PVh_<D4{C -(a?N3yf$pbL*dbUt*aKyg?iucqCJ#VUY^<!D|TP9G7#|!eV7K<Q6edY*AkoQ8IGOva4ou$Y4E*;D@es -nC_>`mJah(c8rLA|*~dF{TqqHKvJTH$(_!s)5*l_d5N+f=Vlk~gC;b$NCi(G-R<r9_o$V<E>0R2|Pr` -(w4<&PSw(RsC=Vb-SuMn%ZBH_sRD|-d|Y3_cTHVW-VZuS5<Aj+&yI*+4;mIek0sC`Lwa?`&*>^(Gv!2 -{Fbs!^Pqed(p$>*Y;Z)0x)q+cl(AV2e%|QZgZGq;Ug5f@tSv$6+{5oF+Y_p)qN0FP*e~flWefYdrz~! -c<Z(~g5N2}SQx<TZ_CoZYvS&IZ$#qW|cH*A*lzFjx$|^;#ZWonJ{{pgu7nQxMh9tC4>;0m#g?IFRQP~ -?yuehj8^PSuXou%AP3C+W+{06_}#pi?udQBPKSYr_1Zo}yDva+{viAc3$pR3{a_*UEFZaj8*rrjilzW -|**qicZaVu$$mS*|X7yrF)Pf-3lG5!04ZCixnKW@qFTdb!rkW6JTayfY6XGcZA=>L8g;2gvs6SnT@_; -A~l=V|y#U2%)DOf4+s*CWEY}FQokz*1+Hw=8Ko@ep1ADL4;lUCyiPI9hNj|9sS)7znXO3S)wii@x*Mr -fD@RobniizOXXWwVWAqcq2q~Ld-#cGp|ixzJaoKgX!<2Ye6nXCw^N;m6Mfw7LFj&KZ}IKIPdVbeTYHH -Rk`gb5^_CIb`zjn2l;WTM-m7cKck{5_oe0rh$%M68#IA&*!|%CQ=7e^ajRk$?gbow7^cGY+G|e-VXJQ -i$R3!Nl(x}?FTY$gbBfY-Y^w9X?dv(I5PmJiz$&h1K<N0PG;w$=<GW=aJLf<1x-Eu`qy_??)DHNtB7x -Yqam22aPJpp<eYvtNRg328NxpD_ny>I3!mvRTA;M2&II|Pau3wkML!K@KeJYpdKnx_G`6T<T-hub-Po -5NNPzv8fq!_bio#&W3Ra1n=v9B$z7Q4U|>u!+NuIQ)jgpE(SSVQ?^qV>z70;am=vad<n2SywZd%Hee! -#&8(Q;pJEczvZxvL)|C_mvETRp`F8W4mWYQox?pGe$L?~4ns%t_&J=x;Q|hqak!GhIu2jra36=qIQ)j -gpE*>HVQ?UaY7XN$oXz0^4sYSm&fx|Q8#vs|;Zq#G#Nj>;KjQFn4!`B_XAXloA4hYj;cyX$g&f|=;R7 -5#$6*tP$2qj|@{*re&ey>l`i<)Devr$-P7b$m_yC8Wa`;V5_i%kZ)2>0KN`zD`X3&tw;F9|p?D@QTn% -NJI>)pM#Cm`h8WeBmGHN#szKtakS=9W@o)0Y+4Q*9+VmQomX7m-quLrRE^Sm19w$t8sZ)xB$U3L0M<h -dJ;E-bp%1BeTgklEmYZ%@fIW#Dt0lT=q8*BS|6ih>qIYh=UXpJ1Kw|Ekq5k4gN4*HT54t0x3)bD)Y!f -`1AB5yArTB0_8b<xI%q{&}O2gzIyYs0MZ#x65tPQ#(^I#q{<FHi-;AV8r~B4bwF-0on{)N2{7bRF15> -}G>fR;e8^ELVA=3nN~tUZ{;dX^T%chC*J839OvT^>bH9>OaMMEf0_u_t;R?v@++PXU2Ld-_`sgngesi -e1g~zFe*c_BTx~n1H5*jPIS>dnH6@pP54=zTUOGdQ_Y)h#beXanyEbW*tOr4F!<N#arQvx|xQ+kEeKg -(G*jalZ?IGQ))WdZoHK$_JgmP`QKLZEgv<sM2xjw?-`{LJo^Q^homC_y>2bZj&&wr(MHG)-m*TR`*Kv -%Dv{%DWgs*r{w3Q*JGXys9AvD}>GA<;$oS0%W<BONzM^d2rNI_B`X8_&f4-Ww~2C_?`lE(s=pUTrP~$ -C6s$uSN|RI(UWiSu6)R8lKIzL4s!e8$0TSkWI7I7!pk^Ue~TN)3rwdcO_|>0f3iGR(VYHvz3VN$>;8% -OP-=7k$@s2y#b>1@hIChge;b5yP#V3}B)M+7Da!N`|B3WxQmPhGMpHh4OBOR>$;qX7W%?(QDZg3XB@m -m1r<m3667G(z;z}x&mMdh*lYV!3!c-x}9Gb#h583IfpXf<%^6$_q;;mo-t%){DJ=fJntmrcynf^Z`Ki -y->rTowCkqeo=yPhJiOQ@X0()Ko=_D$FlSX?}3Qqp&QjrS<OKb~In!DJN6w1}GRy{0$bqx}9j{cQMM4 -nAbcrM;A>OyAw!=g~4^wT<;yRxlS(3ToQBS*eYUn&s56Fu7Oo$cw}BOKd!*<YqND2XJ%aFU%~5v~qJO -H-~a_7&mYKnVI`@a~3xbkR#^iNN#Mn$jnjPtl{RXxcNvIGe^txxOuP~KQ|BM=9UZ0JWP&{o7HlBoy<I -(o45SP%w;k^xOuf4A2;7Fr;nR2adQ$k^I<88<YqIi`!+f*!SM!`#Uk3r$*o=riGx2ilyvtIr3tWQ5E7 -+?r6SOy+{V*C7=J@qBlYFfXAvK7FbYU-1(kqR@H>Ns>lusQRm+D{`l;QhO?C0h0Dn`#2JK4e$eBI4{B -JBBGqFFl%VstIBh-EZwV%LkU=B)0^8`i|W*0pjZKc?_6I&qpxdBqOvKRY#d<-SqE(B=h;}cJxT3Qnwv -=75)E^Yr-yXeg2?Idyex6;vWAvc?8IpjcHX3uQ!yNr(E+~vdQ;HbuJ%km?qUrw)_PB~q2dgOGl_*T2p -A;&MrE60O$vS|-$qwT3X9kXfb-F7&#LSLml{4J&}LNOg-dAg*5Z%;cjZ3Ept7SeQjnzL!XSiEw4GJTn -zOh*n6a%GrWR5Z2JB~ZEWj8&WAQ6sV%9>#z3gxuT-%#aG=qU9o^v*cKcmRVc^aYM<<ZsvJ8_7XHMv{> -!3gVwR!Q3{Ej>nNo3<~oXL!E3Fy0xSb_wk^k1&X#31N4Cwyu({dA)ClonTu2{jBTb}-v>^Oyq=j@aJc -c0)v+WLBZZ@Se+g89a;7h*4R_ZbVzbv`M77vRw2Q!&VimBy72Zz~qq=Vrx4EjSq=uSKzg_pOFub;m%A -TTI6q@OA@tp9-Uh=GG5qppe`JY?uF_3#lRV@8c06MOYFabw4gpAbKBQbOXj*G*2EGBtVH^cgcX+F2<& -{p>jg<J{{_<{Rdv&R?)FEq&4AB{$x5bH>tJGPAOm<>XrOmgg7Tx}vbCxWsy!t<>&VxvFgS?RTtMyKX) -Czy7GN_=|P@UFmk^p8<N<-}<ZS<*&Ps3Xea<AN=zSzro|r>kt0PVb%ZB?EhczTv?|1|J@RxaR2?$r<( -*Q+<#tw@Xsv)|F3_)mw)^Vhd)n~r`sRSGS7E+^B>KxJKsHR=mj~hr@UfAWmWZ^f2ygi6Yi?N`<{k-@B -8z{`yY64(?frGc=IEV{&mY^k3X^X$)}#)_RO<?d+zxc{=WUimtKD5)z^0H-1Yh!Z@%^RJB_>d?A^D&s -k!CAyYC%*|IpzhM~{7Q{KJnvZvEuM$xlD~{8ZZ)U;g9tnXkSU+rM$1J@@T*9p}IQ;m4mkFLYh}`Ik$- -UY7o!JA}R){6Ewo{7>iqe>(nudxzY&`~M35<M+!TkNPkK%sw9G2YQ(Cnlq(``R*R(dwQ4~dYJF+VZN` -2`OiJfcnzAT`PCj~{QQn{;zoG!qv{-s{Ow_JL2+)$s)hD!djX8Yz&^dyVw<<@R!ffESe#d4E20jIIUR -5}WtZBuIrf5;medlf!|JkUc8nY`1Lf@HmRTibEMz*2ob@n^!xiB1FuO3pA3m{k)`6=aS2J_5qp%QAKm -1qVJl)%m_<4o;==FMEe6Ed$`4@UrC#5d&SCYx`@rzUap}SJk>?*VJv*3XVv9$~yCHNrzM5$Eb5`mKV% -RKQbFTb<Aq8uXdzO($!4dvm!z7Ruobu|=pe0+Ioc@6lE9g~#0xE#VmB&n&WZA=|oUQ-UC2t<>gpRZK< -mszc=tkx^&;}@43;KlDUF<^E8QxhhQ&n@H=GdF+I3W_Wx4!gDwd(QaTeATJ2+uT=PPd0%ITZ7E!bH~} -)_UuBn-exPYsSAqLrff%XPQC@hEo1bu3kof{YI}*g#A+#4Tgogs4tw^pLU|^cUW^8G&w~P0XBVrpt>7 -^i!r&|e3VM7Ge>O{Yt~$?FQUoCwnUTYBuB-(P7$D6{01}eS>8HZ{>&jH){3?xxz;9Og%q>}_&H>UWgX -%n*XqSC~TRhdbIV`r-1;xu{KRw+`Eq1$yGbzemfyPpME^w!y7+6z4voCvayF(fD=7B$Me-@kVH~gjdv -ih3CR~7Blj;)8}(AjG#VPC%Fm9jBp6of1Vh$|ZmXHQN^vE5cusLszW&MmaquE?jmoR?edP|O8(bxujH -MO~7ow#wfg@flCoTHWgi6KMQ4fXiqqCh%27`O%kIp@CqOnS=n{q9RCz8l(hM0DK)Y9^`5aVx{?(W!Yd -^SWs-4svcEX+9#b=`2}`MsWm&tqR!5<LypEwaFp66EGsCUU@2ZXMh@IVKHc(*v4O_|TS;+|rPwa}cgJ -I~6%`a`Qzk*#LWps<IZEtMUQkoIlj$wd(}4Hgr8bj(Td<KCB!jr0G>>Q){Z$3_e3Ye9d$!HP`j18HQI -0gf+)pq3lk>;wy(g_J_?>H^qTuOA?I^{hrKimvm(+Xtj2Ssboy~KBQq&`cEBy~219>bgELnwwF?4Uqx --wkfJn2LJY|9;3;HBzV%Svd`3i8yJBCCD%)xRI#G7vQ`OxcjooNOo-S(qtPiY!GXd?{rFuYDt2^-$f5 -9U%)A>K5*=NdL-f^c~vgKHt#l`)O?n4yaS6W?=tXnz0B9X>|tl!PwE3W|S5bSqm+hg}j~4$So+fXRNv -|alAEm8TkVb(heJ-Bm;7T$$-QlGGKw~NJwLlwQvqwEAKyokZa-XIL-V|1^fmNvqI%VREd5>H7Up%HaL -(B&Q+1YiT%i6TV%(;w(ukU8$&5AjOQQFp`9N^NZ=VBHY$)r*+WPa#2u9uM4}SGY>Q}&8W(cyuze~LZS -O}0<%U4If{7|2(B{|XbHoce@q>2gYcYJF4+(@Y;9^w-DM%3HSP>pb!V^^_d{Ssfzqa5bfsIP5f0kcr7 -{;{^;;;kE4S=|mBx*s#5jkzS6A4)h?|7cJsPO@0NbWu|BylepqIjG1YYesq@wnT3F&-re&xN?s0w6xX -7lc~FC@=geFJ!t)Clj(9-d%E@Rlut>e>cx)x*$DvNKdXmq|1*)O^Rrf!#^;EkR9+EczEg`_!0$ti2}X -=zuE>I32T(g>(!}*d<t(4_n!gyuh4l`%JD}B0$)Q(G?Y^`lvDJ5w2V>}k%1%<${`ZUArg2Rxqy{jShy -eL6Y>Z70-n0^_3BJQ_RVzX>$mue={lf+u@8(@9_9Xv0k8Bh_r|-!vk3WQmPZ_6ek2Ui7B&ebG%!o{H% -JHL19-Q5&HM#~_>z#sK_o;GPW)h;Df^qO2j0N@!5Ib>!CoX-5k?g1V4}_qBkDAmzXMOyw!s}&wM8Bo* -cfhA3=U>8odz-u{2si(E!SaKmXKE!<W;r6o$fpsqTXpHr1dM0dgkv%{1p#Vch?)CBoR>V5m4?CQ0@_v -!Wx-e!3#1H4tB`%uq*w!<o02Z$xq-t&v_K!qaZ%B+<CrnKFHvFE{g!e1_eT$f_jx0LIy1u&=J<=uJ7p -Q`~pJOFC;|8(;i0am>&t8<mYM=nqWY71m1Dn&l$jj(_suMhZ*1lb=IE@n51%rDO^OzLyO#D{s#D$i`- -!peqO|Hk{7F|o-#DaE#H{FZ(v-zeF-7?ayXCl_00R2n+UlH-tw;)j2agNazCF$r=^1I&m+-_xrCJ@tJ -kO`I%+}y8ESu(49$Io3{8BQ3{`9=p}gK(ePw?5yZC|ee3?balx#vC_somUD?VzNl7uFPl2Dtw9YQ)uz -f)h3rUCk!A1!X0VT?cVvir*gP^aL1OOCU@59tqO+W)?wRK?&RGT0soGCK%lb|4w7=ua3I<u(`M0~w1- -bG0{(eaUiD3AFiEw=A>rfp#aCx7Q0IIy~E-4YxrUcz@vjjewtmcO<Wy3M`{#9QFq|ND1;7KnA4&1ilW -MG=R<wY5f=+Kn6b!^xMLYs2W48!C67^flwA<*oHw{6%GAW^rS%@EN?1Tn#(H)c?sSba-1}89&IkxCkP -Amh)ch_Evc_0<ef@)*r@m*GA!{aGEA|Vbnj7^OdRo%`+|N@XG5UQ29xmnLanTw4}>@aC_fcLg2@nj5c -Da5WC-*bLx9giCPlRkIug;y(ia4N1DRhcV@fJxikLtWlNd!}zQ3v?vTfjz@W%euuq<e=Q63gReevi6< -vduPB%}u3#b0~0KOQh@D3tMiL2Us?{2P6(K3U$WUh$Y0gS#HaLm#XkX73Mt4uf(DB?D6W-51!QZ1X$f -(<t}B1{ZI`Anl<<bu7qA`)=O941%_FKtexT&v5asa4HDbkEmXPJoob={U!y*D+0YR-|>px(tTYJ8I^d -O_b5f4cW-5(jt1HIjk1l}PssKA-DTTXf8qo`6Pn!pi6T-7eIvY3Um`(<A}2w=K>JI0p)4bztiX=8Bur -j%L0)d^RbE=Wemjjt9}x1`2Ojb_TuJ(;si1E6BmHf36q4oQA=U#vPKt){Ks3l6^yjIpjzj%~^hKq)+L -lI|W+*4<+dKNVg&twl0#m!mpRG?>?Vz&i>qUGM6+{uBAOTp9BcMM5nh`JcvxZ~^rz-kmdIKT704K2+6 -g}D&TK6|V*Z^-50Bw_3Jod$YBpBikUck5&HOYsl6}2SF8cAg{9_ksh3sAW1lvp-bltUYqgJM`P8D<Y7 -!*WBRJo=Gg?(t}9R6-CLVYeto<mM_yB<3haC~i?O7e2lVgt#V$kkR%_WOVK?WOU-sWVGT(;-<j-HTd& -(4Emg!VeVz`8r)0VLCBI3Zo8ks?#TDh_IubRjZ%>9-;-XS|LntO@IU+T8T`Mx4}X}#bGv)JVvfb0!lu -|Jm|-s_aXt$zxUiU-ZO>m!)`7`$^?7c|GPWX3@)fgf7K^E1nGJU{Y$GYSHfWKTvSIFrAq{jf%p*LEr+ -pV^7uaW)*cKKPFE6w(YWgxVkZ4Ow3zipi3TY+os7S72HYLE<WP$oum~PBSN=dH8wRit2FR(S2<T?s1v -kM9>H)I!~->1Fj<C<izxhU{9I|}UuvsT+JX(fvbaxE$O**0=3(piWLD-J6LTTJdkn>0(2m9d4~&-3e| -q$Okp3zf?<4HE0c*XZfuFCiu`zSghJ&9%|=ZbTk=gqY!ND#^~}JOzqBV=gf#X{)Ukl8nAnN{UNM3N0y -iTOkW&BR5lfhs|aww(AOPkeCwN>czNIE2Xfc)WV5huU~M3-XyPl7xVP9j|BR%#bmNqs>QOx&EfIhyqt -{1R)^h4(>K*CwWQRe6f!Y=F5^=~XDPMYN>=kP59tf_3*`6&f{a^WDJoe>i)NwKlCzlT6$|Y)_%{Nrsn -iFE;xa0RWTC;dSet63!H2rbmE{K9-@_d=SokFc#dhGr$6f|YwiRU(=A#tX;t~@1p6Jm%#a3W1$jL5T2 -<)M9nCxw`WUsVbVQ*!nXang)u0u>;`lJ`LRoz^DS&qeu{vZz+DR~)r->0*ex3N@bS>{;2++s_GB8LJZ -qkR_G3l|lDXk{0s7q0?VL7hZ9Q%T7Rhjq52m?i`gjSF3o=#r9cwL5GUD0;i4%uc?A9C_yakdM5^>8=S -)v|clrkS(2F#$w29c45KoJ+rMX&Ru9NC{8JHKnm~b(I#lgC`<)QEY#Fv!1+Rp{R-A;J*5};c9UXuVJV -PWlwIhskeku8P&VC&CR$kK$U%=<@}5V^)AI3Kh7mZl1pTuDC5gU^A!aH@<RmTW?rjty&te%ave-(g=| -k#=$vYuslzuAuC&h?sQ(*Kl14GQyn-LF&QiD_$<kGeUM4PN}w`Gh)q|s+#p~Ye)6TD3+W=H^)7s&Ho? -*))znlxg^P>9L}MV8YxQ}13BXW^i^{DQV;y*QAlE88?^8PvXVW0h9oYQe}etffn}*eElKb69dA>c7zT -s~~3uPk-~3@&Rlvr?S7g)NU!lk6zkR+V%iO?&0kPS}Z1?GOmLh5psg!3oNW~wlLXYZ4~hGB@Z)X0{kz -9l5~{jBcWN2ygVo*+ye^YX3e%)Tzs@3?>zXiDBD(mOT&vvHgn0Hm&dp~-^=|46;nb;0+SCO>tgah{A9 -E9Vm-~>c6Ef3-+gc`K=Hf2y8HL~U0?rs{`36j`K?E;Lz5mqHSVD}Lf&7hK9+Y}lDFy8IysQI>zg-+xC -aH#CZNhdJXeppZgJlS>KVX&A4(1bI1J=&K^|@cd02!hPB)a>;W>%^{6+iW-2Pf_)^c+SH>dJ23%LD44 -i|I!H}bd(xqT7Aori?(F~>6!Hl9{L?!TO;xq`zD+`W>!S8+P`!izgf9_8l8czU+-_@3tWJ9zpIarck8 -d!#?(h0HTgzLVcD_k8}<{{O4t|K0TetKt8zKB#7`o5i#I9QnTr{#&2WJ|E_;?(_M#C+)xG>3ef1bMJf -e;{R;A|CP`Gbs6aK{Qq1eIwte^fR_*L-nPO3B5T9y4a2$nQ>Pew>`4YI{@O;53~JVuQ@9QM?|$OM6Y4 -(bS6pUL!{Muc(7%?$*TDbb$4@_g6*=>``1s9z(_i-(#pc6+Xa0#>PN+%diCa%hy3+p#t)I7DBxK?`7V -<K*$0;7}+r1b+p5t&Ehg&(^!r^8PH*wg&VGW1n99lWd;xLUv1BW^eH5^XkFp0xN4&yl-%V8{sF&wHn9 -L!-PhoKx24u4cIcvjJ!{%LOhl*8j3ws6?U;dTzUaJY%XjU3i+Xyq`A!vLS|V}d2zK9xfQhZ+u(IE?2o -mcvL6l^k{vt`~*F77llExP`+_95!%R!(lmxWgJ>L%;zwR!zCQ1a%kXC!(lv!ksK;H?2<?~`XV>Ca@fM -*b`H02Si_-}!(0wCI5cpm=1|Guf7iGxW_pixh5u#lzsHM?S-pqX_%Qn;N?zW9ynK0l9W!~o^<$80&Xv -lqRAum=hmhYrz2w#7@#c>lUM`PWoZmgyl*aQ{F3&a&TNeIn;ClX?=5!A({O6#8r?aQb?F{Dq42PGwJd -x{t{r)8d0Hd<^;N3h_K@I|Z5GJ`bfNugQ!F&8F1)aoe!y(ULuLC$P0@^FU;{mRQH-4CctN}P4Cf0>$5 -AZgeWDi!5GJs9+ZjV%u7Jzp}LR%TFpm0w#^ef<hAHX9+zz^UEO~awR0-6XH4QKSN0PlgfV}OD*04y2- -eHGwVfO|)<xK0BcGLqqHfY)(672uyaz7b$Eyz$|X9)OA%mNp-NFLV4AfGMM)uLVDA06spNh20A93wX; -hE`X!PF#A}52RMEZ;Fqz$2MCKgEZ1Dk`2%p$HH@FruA%zDsDFeham<en;M3fG8^BLEo;#M1c_18BKr< -EK!|*-__*Q^T@b1LC0F>gP9|oLE1Um4x0=^C4et5GW-WJ^NI*Fw}9^j%$EZ!`De@g(KM<~d10KZOPd= -LRfB{DyQ0SfTOf}gtpKAXsBJ_m5cwaiZ;z!8&K`NjZT1Mf8OkMQawh<A{Jj0N}+yjfu1nuJQwSy+VU; -kAPO;Hl7lPlLV=aD+3aL%juD1F(Ju^qGJ+0DNHvOT%`6%VskAxd1<hH*}zav;llr!+5?K;G<d?H-P;X -fI+huZ-W8eIg91D2H>~wmVuuRfX}5cdxRxAs3Tx+1sE`!kbQs$0~|V=rC$y3);Tb40(;!sQ(y%7L>!> -e1nGganE*avhA|r8X8{J^z``ON%W;IZ8(7*J0KNk667b&$uod1cz}o<R0dFqg9RSb6n-BPp0L$iq>;a -BYn#Xt&nF{R&yc_WbqxsM`&1d;SxE$U_u+IlrJ)fmvC%|tO0?)zTCykKFX)HZDfCXv1tN{*BhkOB@7= -YW-8BK%-(|KJ0C@q5cz#bR!Di$;QDuB%#Zvl9038WMJ90%xJ!swp`7;__|i7<oX2=C*#8m36u@V*In1 -Hf|`Fg^vm17N~ZMkf(q9mnqiIQkYAHWuJ3w=n)7+?oaHiBeE_OE!#~0M7#00j~~lgm_NI1b9B4m&pU3 -18x9l&13YpEC&(=Ox^|qEG=Mpv;%C1cN6$O3vl<XP-g+(2k?O+kR`x30UTHiJO?}y;KLl>3~+b}!(#w -G2XE{U1%->OP#3^{3BaRP7VmL@>f3l52r$?NX0VS0c-hA45gt4+*dbn^gD}s|>QO$x_w2mv0JhtCSpY -OTU~U5Kb2-36@aBX6BLJ7Kg8Tz+1$a{#^c{d_0DNIJOV4(IACyD8k7)z=T?OzO@D6~hHZVWs00&kwJQ -Cmqcuxb~1#m(YOHVw&3V6dI%~b%0Rx>`R0p8vKatLkC8h~5xg*gl02$Sw(=}!X~^=HU4*bfFce<RC#8 -o*CBG8y<3;DGyCT;TxI?`L6`0JL%(q2@v6AK|VCnJm2t@a!hmHX?lEFRTrG6W~h^6JiJa6@c3|vwi{L -&5uBP4)z%UePHg~064;r;N1>*E5N{~Sh*wtEPINjp#k8&XP_+rKL~$)hPOY@LjMeJ8`vW}@*MCGaD?g -4vwST9IOYZ3X93KAfrUjl=|yP&!9Ee-yYR-N3;?|5Wymw&V*x%3Z$9A90sPAjNE6_j0V;R0J_TX_UCc -flpko(r#{g<x2id^B7~r5cAir3q0MEd?32+hM8*efhcoX2Pw-~MixOE@2z1aT(tlSUn6}BM&Z*Bs<1D -*l!@h09!1N^Cp$w?Q$`er644FEHbK{^1>0{GK0R(4$gPksPxDcFAsaKdpeZvgK(&UudbN04Ulvkl;oR -;Y)7#{w*BW$l9%;0})O1bE9QOvbVRMt=tF65xXYJ_zrRSbqWPPC?n@m<nM3HmIk7hXYJ$<KqE<kH8xX -_FDkvehKz~BP{!p$p%9I(~vK)R{~snn%7f+Z@`-i_?rMfKh0?3IUYQZQwDiQIG*DO@yy9KkQszI+#ca -Nj^mk<M>&pg7x$0w18$G-JjW5@xdOxyj^j8&1IO_^Kt9J2uH!iF;eVXt2;bs3!d8wW{DI>LqrYZ2?me -HuafFLGju7|wVww@|;`aY}*!MvE#fcRRBg^{{sw=D<7i}A`dj`0TeOB}E?@#9|jkufz5X8P5!*>8gcO -?`feqU4r#K}q$K>UW7s_02aK~I$C_hJuSD=F{Ao~<oiX^+o#k0SN7Z|uYVNFVlXeb{&OVedKl^t2D{! -(QEoeS9zWxITvGRZ{PRwi4iJu0$Z|erSgjZgbWH&_*fUX60X@UirGs)~(<^%59E(7tEn<bK?o{@8dSd -o>EYqV6wRZ%t~*!dDE8)a+62=v6wG{>t2{@PfZ6`KI6xaCv)b^A&VC;CItlr#NlwT0xd6x|8lZv(<bu -t(@&FKyLOSr#zyk-#~+i+moF3kiL9J@215s$g2_Dx%Y%ukdDW`J)Oc9>?oxU1rB$oetU(XoNe3?-mJV -J3=VmY~!SEe~1@o#^XciA2Ja~|r>GWC&Ki^50@~Hc&H66;c5LjyB=2eH4T^K$u?-DbwNB;*8=j9!4=H -^Sxy%6j#p&9630(X4C&w56mnF}va{|65qZekV}DE(6yKQlx8k|Z2Hh)DxGOy8x$7f*qy6WwY0H(aVac -<Ep#(m?a&1sO*0aH$aJgW31Z1L0S1K6n_ikca$Hwmx4m;5)XK(1qq-t0#q-4ju*{cOko!m!A2{#3bf{ -n!DaVymiEL2dQ6t!Tzjvn$!is>9=o4|Dh++4t8BST;53iAC{zF)8Fa3M4iz;@V9+)mqeW@|B-~qoY6m -3w%^K}DSeu@U@pfs{9(@I(y+$$ZQkWGK?H_*yx#CC$_Z<z`gj%GpJ%w4eZ1@8mCA_%UT=8);Z?yqOhP -#i<+A>Ja-Nu&NX%w4S-5Z^x&8LryUBP%Lj!sC*=NZsue?HK{G*RPB4^H=aml$Aw;61Qdb@pxKbFKD); -pxv^4=lq-}&yHycH#6Jrq&iJCd~i9cLy;!ix3Z{*?I|AnPAJbF(D<lDGE2ne_DZck)b$e*>7gV(xA8B -<a;mX<hA@cWzG4B<rOo-gz}0>Fv53>93cha~CdbCsc~>fc|*cFe%i3m_)q!OMc^({rK}&#rT9g(ojAr -`(_e6qehJ)adB}ZK0cmIpFW*vwOV2{8Y%DQ&!0~gEm}lwyzxe|bm>yEE_XIrzI-{k_10TSQBe`G*=)4 -^Si5#DdCW1B{O$JX<mGkAq;k2Q+_fTwY%I}|hiw}2M#WU}e7TYQrD7S`vB^rB?zx^Ed13{LeOn@9_ef --7lSF3jlgPF2N@Ut0iDbMlk(A>Sx&DMi=AV*CDZJ@lO62CRC6d!7k!5EkQc+PsYHMrBz4zWr9(?dY^3 -X#Mk<FVolPz1ekSCvfl9uoG?c2$#uf9s#vNvIX`@!DrWW#xhyxJj={rmTm0|yR}_uqe?96frJ96x@Xo -H%iUeD>LA<hwJi<b&@e^2HZlP`PMtZzn%~_YL{SMTvBDbdU=dE>Ky)$7=%g7ckGqGq6hNv;#qIf}pbZ ->%i{-{mFD`BDq<bPgYB}kxkOQ<W=cKa$Gtpx2Gf=!jFLP@eqDGgf~I>8zKC12wx_Jkva&!8N$B+;Ts| -RF$jO!Bm8IxuYvG4L3lfazZ=3o1L5~T_@fZM6~ccG;r{{Q+adgS5WdqR{DjfaziC0%Z-#yb=A7H_Cgd ->8Z#wouB|H{Jq}GW<`fNUtPTxkPZ|)^h$BRVj^avjg;YUDt7{K8A&~`I~2U;C?llf{0UkBkIf$)Ea@V -g=WF$jOgBRuqLsZf=zFj#2_fbfA39@?J{7z|13{zRGq;WHro?GXM!2>%*{KkgBp^dqTc5Y*Y>FlLH_Y -I_|y43ghLj6@2%iAWQzM4Epmk#5^eq<dc?(u*xbI(o_@yc)t^2jNW+ei?)>gYb7l_^lBBWeEQ^gl~rM -5a+$0LijTfzQYxMEKs-}C=>vNKLLd&fx<qZ@C8ul2$RV76D9KFe2H}4CXoyGO61~;68Yt*<O&}R;m1M -vnGk*fgwKKSD<OOhgntOaKLz1mf$)1E{9y?HDTH@=gjaG7L_qjx2tORckB0DLA^Z#ozXZbH2I235@J~ -VbcOd);kMP}}O!jzMrKHT#&eG~AZn`FRRLqDGqvyC>wX^0LjXK@jl$kTNy3BF0W5$e%nKNgkOhIP^XZ -SY)qSIx@U5y^*%u#dqx#kr8+?haLpQ4>POPe_sJ&YPPVmNm<nl;+F+7w+1gvWG^9~&1pBh#J8x#qd@G -dntRQ0DmYj6%$a;p&ldFg(zoJJ&dKZsw2yQIX&d9%8wN(U}l_rWOOI%*~7*Fd&M#(=^76P(vb(F8Y}f -;R6O-Kb?ArqaKE<F?@;+UA5>QK48f8JZYwDFa`*pIa6!CVeVZ0+{~+xKvd+QK?8$>g9n>126Q*m2k2k -b%|j-#0o_ydX5-wsX1#e>HxJ-G<{C<WmRUDfZ`PS-54|dadqDTAW5<~Yqn|>fkhzvQ4LxxFQTh{;&A? -)_ey*8jg2o{8AJU(xo2bDg%mo@(&7M7AzyR>za?iZZFH<u?4-wn|?n7tKrb!s=a!*nDs*?J}>*wmsz~ -$M)XeNft=HfAPs#ZJ6Tjd)+Gt-=DHtKmQU7CB1DT%XECio}<Z{QBdE2B>9a?hMHAvC~Gp$IcT3NeZ1x -idkK-0s@R*TyFVcq{uG!7*hP$Z}$0N{ZV(Gjo=9UUENw-|GNP$wcZ#ojd-_6!bDLImF9fgYGFaL0sn& -w>$C&1WXeY)^A>Big{)-$QmJ@^x0zw4Vz-t0w0YY&PZQJoxy%`LQ1l+yEBs?psxc#H0rON+QZp{KCs5 -9o!Y~h%<cY|dpJu{<N7XD`OG#LNHqRy#&hd?d3znpm6Mr0#&f?tPLaoR3l=P(<B@fiIj*tC(`7SAO@W -?lvZat$Ht5OrzpNvZTVPB9?VRCbi7fh(jTy=SKJdT;<l%=OCXYPw2zl(W$H>;LTj^Ng<(FTk<H6Tof1 -QpMK5TrNJPhNF?J!o@w{IUgbm$Nr8=U^~6#4SY|F69>fsU$56Yz^j19q#}Gd)IHJ0a|(AyIY+BtTR^R -FpQNXlsA~!6bx)RUxb`A{d~h6+|Qp5L8kHh%AC^q9QH?qJS%ipb<n+7Lo0r|GQN;Jc=X)nwc|mj+b+J -^{U>x_uto7mEF#sJ$sz}`}aFP{P2VG^G^p&Y;g4GQRnpO)6Udi#95^0TTZ&{Y(#Z+bj{S!sa{U$>6jw -z=E>^l<~i5N66a=F?c5_9odHtlOqDO3MY31@_aWE)>JYmGJEr+I<*#~wQ@uY%@9(7dch~y|=>6mM{#k -neV!i)8z5lGA`z=oSEl&CW8mHLb>#tU=T6K;$m>=}77F;VLB7(mIS}n9%wcu*i>xWdm=9<5#oZS#sw^ -pq>wIZ&odTqU{^}Jg38g=UEwbxY*i3pDfcWw-;UpL~Wt0Jz`3$D5P>c8Ary;j|b-(OYtFa9?|L+jR$s -9gCEb@iTlf4t`EYQfjnkNAD%%2!pXSn&__uD!O}mA|W2|EAwpzKS;@s)qcjQc$I^2*yoSDzg561z+(W -diMJoS5>JJuKHEI)}JffsGsUBH|e?VAAaM1)~OL55fN@$*wt&*4-c;y9$r1%;CG`Ap3SUY-JCijuXUU -#ig*?Lv$XPQkn0+*=L-TMzWNZqW$>uEB(zLBTaIDB%J4hatmxnMe`8!q@fdjd>cF2uLP8)alb?R9U8P -DDo;2WT2L7xAe+oh^h57n{rTFC<75wY|p`6!4SKK4wA3A&X?EBU4tUP$|;I}{i_~Uo#dv+f<aA2<<cO -E%%<e=uId%pPMi$(9g`|iY`prG)msHg}(PQm_l_$mf;xET7uYaH_*YuB#L(;U$1nsVM7+`W7E=%zaK^ -`EzI-#%IMXj!vnjePgrccT7Owr$%+fl7An+$oxW3!f_vqJH+vqN1Yj71yt~Zr%FQx^?SDwrkg}k>leN -Up=|r@qIM}Sm5hb{>f|mRT!Rzxru9&lam`AKYsj#gBdJ8{5L4QH>(adW{qaen$-qAh0DOdY11ZIv0{Z -Ne6oD`as&6?y?f=`Z@-m-f&$sHWsA9vdo)Ji{XKfm>_v+fjaas9*$55UZXG*z?A@uUsj-=vnO!ul1~$ -GH6Mp^m*EgClVZwvA+;R)F3yzJAt;@O>3;*H6heczVsWocUXreUC+_!I^tX;ddn9iFwZ<bF#{nWsz{4 -ucede^R9^7-eVn{#loQ)3=;RGB;S(@#GgSGhZ>YZje2aYBCn`RBu*eDcYPZ@&3vr|$JD*D0RQs=hT*7 -&5u{V&T_#ioJ>_@Y@LvcES@of#2d`U)vdoi=7H{@l>7{Pxt%GOM(Bbx89nhd<;{W7zYmP*RMD5BOjlA -_L<?q*I$2a&Vdn~P#reM!oor`(GB>)5x${2-1GkX?;H5xq3XZDhcjpF(`vq<=O^|3Q+%#Ee9Ohaf9%* -XQ8#4dzj^cKwUJ{c@PGK>hq7|zN>QGR#>_^Cp+Ee1@4ffT1on*^HyT~pv15mM4G!1<<PAN6N5Ho9N0E -fjM4~?uY5bl@#M>g_>qHu^6}fkl$SZqAjvhN!sJe3F1tE9Azk2oRsWofXY@#uIrrJyRVQ>ImXbxS$2V -MX>ui^byUwvgJuc0~g243U<T!0(;!{eMEL}Isz#B3F5wOORu2O^C&Dh?Y&>MIVl-xLXZLnQMHkyEEmy -?8P3tF14dz;CDJg`Jn8C+Gq4a{pH%x9<>X|B2Ec9Fzx5-xs+>aY)%Na_p2y?=2#ctBYF`<%0j0Uw%QB -CpBu+C`@Hx95^T+&cg**kRxC$2@mKF&EXMpgZyK6HD@yb-L3H7@wpF&b{~thQCM3l4oy^UQg`^^Pb?I -vxyt_>XF1_lpCQ)%Bme4;gc-;aE9cM^ULaS<hQ$LNN6wIY^uiv|3r5$kMeb4@I;s5Mw%vzA>jIG$ANp -{JR9*P%dXc(oE*^fh#Zzn5s?|jKkcpmQTS~$MSuah#pg*7E7q|~Q;~sH)R7b(#OOcL>!>x+L!UIyC@s -rLMN`wE`Uw;+#Gv`cju+!pE5>HCP<K)ScvSr0AnLE6byf7eIp6efDfOzm*k^8<8xo4Nio#61PU!PTGq -O3l@=hJ6wQtj0~eQvPIr_*Y2OZwB$27cx9q{fXKhp9au2mHuMARfp)avg|=#RXYMj&^>qMDm72N$#N5 -@=|&mg9GE???oQ)<IrWNNN0tq!>2BN1_!@BH^e5XO|7Lisk-72vfO7|b&M_v{;;sHV)<7ekDot}ALuX -s!14lp;N0Q>{A%}P?eo3l)nQRGZ%Av&Q5<F|4vcuUpARVx-4u?$?e^hd^%)$jK4X(^epl)KmPkEtQ2K -|iQ2pO%miee8_|@JU`Bz=bBpyQNEFKmYaKImwCR@OdoqT<CTk$;6N?uVM<|+=^1AXwP9~60Xzv56Na{ -peRK4X(QeSTJ-!NKY?I9PqgCe>YOmiZ+Re)J6gqH$L71P40<@hC}0EG~>?BU{Mg;Vs4Ucq@5%sNyiVw -H!UPPqv@%;qZv!(EU5b!KKfg{QBIs&}WmHf9Uhi)+W_a9BQmA(JmSIHNKzJq)C%7jZww{KX#ELG6N38 -JQf$;!`IrljL-15#0-o#MzxTo87*Xy;*hU6%vT&%&FC*j4t`%QWAnY@nXEi%ZuQw8W7Jt)GW^&JEB`H -9wyX^=>_lII8`yx|;)3nR-jmm0H}O^YHpc2P&1Hq+@Onl|Svb6vEKnQ*_4!|FlcpxOl}V4alcy5f%h* -2cWn`~dnK<Y{`D%NC!NDD4H1x+9rNOWE-pIeglL_3w#Sxf*8+`z7%M)z8J3hw$f+O<()>CcdO~qlk;; ->|d;-I>KK7&J!ABP!!9HxLnzjiXduj0@<Rx*0sYH(m+lUllBj3#fFEdSUHd>C;AbN>AK^6IOv3UQI0Z -l08-C#O%JmV%e!W!>0jvTC&Apt|sy;^6h`Gd3xEP#c+*)<&kMM$5F67@3^ZRwgPAPbv;$6o(Ot10yiT -_<Lc=_6PV?7L5F>T#o~nC!c&$7A#m`@F@=-78mX<+VYyLAJ<IQDh?|Z2cyr512)O(bC%kq7t^BU`P3M -BR&mHw9G+Gj{-JU-Iw95oicM<kiZNc>U$XrNek=d2TD7VT48Zr)Q%@D+5Qs-vxST$HO1@tAg1kMcy{s -AATvqz^d9h2M=lF4$>Br%pDo2@*wUr5pJ{%Y(#!&y<S?8?pjQ@S#Ie**$&(;4<z2}~LI;EtfYywvF5g -o|L$S^p#<?BK`;fPKJ=2#_-?HfGBF$Vhlj9;GvMw#&s@WcBK9Xh}VdHLm+P3%Q1GhxC689aD!F%D(nQ -5H`a*rX*H<<Muvp#(cq+PDEaO_?%fo!U;RQ>TtR^2j4HckW!lFQ=!c%fNvHWzwWcMz6p8@=IfPh=oeR -1-S7I*eYTn;!*Me2Ku~t-XJ-3Li3H>!NvM)V~iPoeV(Gaa3T0tty*=h#yWqq@Hc4CplR>ky;FMi>a}0 -(sNq9SPLAAt_ubO9Ygc*ZnP=p==bn>k)211C$nSv{9PkDB35y3g3^-s<kwbhTdu*5(D_iq`|Cnr=Gx% -(bG1wPlpwHN(7lz&m_!rE-qN1WE+<E7nqmdt#^{JZoH+lW_*B7V`i+(0UhYl6h3E}*XJMJ(s!rO1ZZR -7#iffXKExw8BKKV*+Qhqw-2pbzM@(P!m@Tc2MJ(B}`9%_a_<SsvkO(W1q)88c>>ItY9Fby-G@8YOXYa -Z;m34XIbJo@i`sU;z$v!#%;l&Olt4$dp|h+xp?G9<u5mG3uXvF$Vtm)e-Gw*|UA*^Y@p^v7<)|mEYyA -KTMxKUB-<YcX;a5sWN8Fn4=Fq_@E>uB^kPFUTI_r9MB8!1UB#p#Dy9Jei*sON24p$Bgi9pj~EHwflCQ -P(f{=;XmqjlA8uCN%}Py8-TA~5Pn-eH`|rQsOmy1fP``eC88T#u;R8Oy)^;o&zzh7g=1XqC5q&^M(1$ ->M$7j295AtW{BI|GH7V@vMls$U%=#SCUPMtc*@ZrM^AHV_l+qG*a-MV!%@52LduoE0?-b*e<e2v@#Cr -4xm+}yH7OvUwTOa582X3eHcmMob}4sj{)Bb!WQiFz~d0T(srL4yVv{cYdAy~M=CNW+E=4IlWNdjjz&N -w%zR*dua;JwUFo$MDY9Hxwq?ZRPD>82A<MNllwJ4O1G9L!aM#^G$;T^r3F3`eAU0kB^tmojV)ZnlopP -fgf5!b6x{CdVu}mePUDOhgcguKnKtX*2M-Z>}PbHalygCG0OLx4I4HTIli7xrSihhzV7(P(v?ZR2t3M -L(b$5gij6)fzeVNE$N)YH8ryqpJrO$!O|k!r7cUl%$76h;*XuR+L2IQ`k=nM0)kh9j*w^cO;~ih$qrC -ka6TcDvVE<JgGdV}!I06g&MrTz{O)Qa|oNR2X>bmi7*c#;9${~7yUcwXP1Rh|M-SH5wSr;C`5B#~}%P -*B+H!GGC_G0+mvg(#$w`>C&cp*dR!uavyMQxVx)9wLmc5)AP23y2He#nWKzz$xsXV0d_n03V!S6nRY# -qitsU+Fy#9IRa|2@mLv4N~82@&sfGUt2;=-@p%VYz#qP2f0U<pgB4;orn1^p6=(s@0NdTM4*oi#Dya@ -_J<yNNS=TGc_ZI$y4%Th$P%*7IX(c`ZGS}L+FAbw>;`^!{;R$x6S>3(frqX4V?VHU_#-zS(01w4rSif -HFBo~YI?M!bTbn0t;vAW={R6d`c@-*D_;+A0hTrWM-7$<iwkeAz%&e>|b3b@-J-7icvW4vg7Yn<_r}H -jR-p_*{SX94^{Hy;SXY;SJaIrN{+rNW1yayj_PY#}8i|8fLg8~;|*F7%9&XftiyZ&Qysj_%Nd{6wtIe -j@Mvc>V8ciu5}7aE|i$UE?(2P%(qE+gy)es}#-?L=|?2ORL7#4p%C<N$w!?}WzWoX{RV*!nJf;2fKet -;LRMPGR~Qiu2`$-N29RmL=z<$-CPY@wu&AKxc47)>V$qXpB&#yuz<myUegN_!-Xs`X8R`!E+Cn<!60m -lscC+Lx!AkD#@AXAwzaKPV^z)QD0r=V+H>)$bWP$(=jMueb>ID{KvJI1OAczqxg<N{$mCIv6BCIt^XL -}KSukHBmGD59fLTY`@Nk|=Mo0b_f+!FicT4^BK1C<@98`ikS}shM<uWxSlVE(V2ynv)#rCgNJzLx<Na -8*`8<ZrV`s$Ne{x)M%GzHZ7a6=;q{B8}kBwR|J%wA|5_#w&k!?R4SjvI{TyLycv0^jL?FOh$AIF|)%z -0Gp?e}Vzeo(vgna1Zi8r$~M7?|%c+^jQ9<BfxT_W1f_)I#a=wer_;KRzt7`6rR+4QBrz%h>-Wwc)wC= -W%yG-9Bq#>*xNM|BTMVYI6(KZoa|7^i1hD(&wVTLQR}n>?cP=3VtqEuQvocJ!Z_9_-WIo#Q_7c6Zr%F -5xb5r!d4T@5~uJPuNmEo&h`uG@zC$2rcHl`nmj$W3++!1pgCxY<_rC7eovmuzQobc#O6H2P3}Rz?7{D -R{XTkSOAeJ(x;SSX43G!2zx&yTz-Jzy3I6NA-p?d&Y@DfMX8LP@Jr0OGvd`By?Yi67_qERtxaE=l5Pi -ldJ$`boOorf7G=GiPI5*Dy90vR+1_l=V&&nCerUphmn3}xZpZWKFzP=~@HY1Nae7!b$Jjf$GDtevt2_ -Jah+`7^3j~~~3KV`&-5&hi#ZX3^XB)0Zsv^TXx>bcYr-TTvfrGI>XfIP<ddo=X==rJLW;cxovgWaF_$ -K5Lp?7ssGW1+u4kvrH|k3Dj5pN#(LTo{nYxBz*K_V-L1`Q<U7PiOYmJSl$0j2UrmIM^FG=g6SnMopFe -0yW{K&!=9nXSnZ#NSeaZdW)~uhECA$bnj1GF>Khdl#wGx_H*}Mfq}XSv|vzQr`MG4@AuJXq8^Go(qp2 -xG1lK-8s5`4pBs~CU@-DnaJKgyxPM?TIIsr{|JRL=HvKMoMbtE@jazx7E>3@i-h}CK`S%~u>o&93?Jj -w2{lU5XCnlRPVM6?iFTNOuE|TvPpMy8BKm(3ja}!P9kbV_))mQzs?b-hR0y;r|gkIsOgxF#lFx)np-m -P2y(XGcHe>_F)e?QwFATJ=dgC^J>XmO<IQ`z)v7t<%8KE2RiU!UXB3HnSE{e7~Lei#@=9(CV`bbj&6x -%zMOGxU&{-`!_%_wJz6g?dJX>%FGOLa%O|!jR$bHM+)m_K*E1PMjG3(n~MJ(HkNj2M(K8+vf&>16p8@ -_>4jS*7NvTohV5jU9wi9{U^pAK74q}`0?YDp~K|Kla1ZO?&ABf|HuOLKo;5C-E;bJ_s4Qz_cqmu0C`M -mTih!vYkzzSbq;E}(3t#6b+NdX9@q=Bynz>QPwgUy_IxY{zu9(H9tWP4$C()quziXCU)R6F?jIKy_jP -o1w5hw&n@&tjl&7D5+T?e@WNm@9mGB4J94`7yKFWSfR*Y?Ho&~V-m^17)S^Te5*}vxtky7HHHf`E8ii -wFC1|At18U1_o=<#l3WTZUy*kh&+oSB(vY8N*5f#w{czkRk5dIb7p25ahdTUEBojQ<)mXmFqEy~zXd_ -4H-vEoq!3-Me=;c$Zdd4&;sX<M!D~U7qKj%l?AD(x1IG{@6z^k-BlmjvY<?6&MB#7+~m*J+M6zD+9KM -Y~?}y#HpmDq&_Ok=^7*P#cp!`3*}TH&`N1PrElN9@6h9+Mt|RZ_X)h9zove<xL*L>tsL5CMC?(0)d{8 -N6S~%H&Cd@wzOQUtXoT1rKWh-%L2qig$RM?J`WonmyN>`5unXJ=EYJeGjm-qkHEY&PcFNbIF#11f(xm -w8?Cdz3bHis~=+mc<golUAU3cAOV6$~U+aKaO<i^?yo=aT3cyYGl%N5EqjQzv@j2%0+AL~(*$LC{n=q -)__@WZCZj9zdp0~**GFYz)x72<Zq;l+#CyLkV=8kV~zfj>%1OEb2CXH{)o5q?2y@Wv(=78cIC$i2<}? -4!2E*#DB?urctWMT=zCtXZa3jBTXmWP6I2xVPD#eXRdQmcZA>;OL(1O9BHjMvsH~)3RmD>~n&bx_2@D -<*9*UXRv+ndEvr^$ln2_#RSJ!Ke^PwcTK8Z;zYkLWZz01r$R<W?+QBSySK~>eP`GG-QD8*9N!H5{gsR -O-fn2AaH>BHDeW_r$M&;l&t8&~lXFaM)Q@xL&i&`SdGpS(I|~*pIH+s%f8~`|%=>!HmASdO9ka5sR_E -vE8-7|J2A@@@x4G}9pSEt@I_j(^b&Xvre@D<ma%1Gxqd7>|&wbB9MQeOLbGKP)nZ2KDk!fN$8_!ss!j -?Vqy)S1XKHaKeP2+dZiH{w8FnghEHYak&g7F7@Iq<Td&vU~^buPs=p+~@Kzu!@?YK~0p?~4t4`g14pN -Ag#41#*>0&6Q>-T=ZJW$$=gDXWy4II+_^gu;yShkNDOg7bo{3_apBk?`*DlCov2$6>wv>800X-i?97_ -fLX&m_Mi0Cbf_bcvq3-jgb%XMpssxKRugX#?-A<}YZB{{Z!CCmf?0!{ql3Z${~mbY0n_KkhCzp28?t5 -TsMaQ*Bz7lmCvPBk8j*0j*`w=Dk@-rOnKNgac#vmA=&Qj?<Rvf`FIczG#Qh_B7RTHm`#SVfzhLYZJvp -8qu)dVBD5H(++f``jNe=aoM6>@9%YS4KTaTQ=%X{y=*U%I@4KKf1pCgOM+-{!#oHg_g+4M#p_rGrMU% -h&@iPh}$IM{7sF8F~xb;H7Ie7Rfxx!&^MK9j^+_(}H1ACV`pHg;Kk|48@!*lFNq9cV$X2%PZQ)RVZEJ -R9G=VZ(-V?qy_DTF|ztPN#x@I%Q0IO(p-lmiL34N=|5KRr704`~q7Lf9b@W@%w96=x4rP4&c|<DmeVL -6VCYUwJV*-NS}4$m)9!#uM9Q6yY@T(m7(TW*D5)cD-iC*IbEGc^#5C(d-YXE=WgdNJ@2Uh-=?n_Z(e! -ujPG~wf{X#T$7nykSL(mOf@^OBbysJgljbBkDNY|<EzwDG5_IJhr?=BzuW4tliFBIlY@xHU)58=_JE? -07a@y-P$xf;huh$P#XyWxO!K~d?SK<>^3w1i{Cxi5wo=#sqPt$kqbJEQ##^0Sk>sog2Se@y5Wt#au_( -1)?zusA%HE(r>>Z_jm?m+#lhq;b%i&Mq5ew?{F-L>w`PD3*z&9Sk0FOt8=VCXQ=T%V#VCb=*iqG>>5y -*|P0={WtI8hU+aeci`g31w21CScJ=A>?Ot&wnpegX#88Jw09wy_y@??)I;f=!ebXmr^Q>F%I(CMepnH -^wRZvDg@={8HrDo^X?C%W=XV+HS!pz>!p<-VHDvBH~yxdB1h@^dHgwiuX5$WE2HAm(-V?=Bn=B4nw*r -9-a2ehT1w0Go_!ON<I@`?C-zM1pWeUszy>}0C%24GPi{E)=CIJ@_>{!n3F-DPtF{iixnX2jo2#!14UH -O@HYnZv4c2n5*2s6C-kF}zb5L61z+wJ#eJ3qpz#!cvp;wo*#KDP434IdMi$8RKeCtrXl|T5}Ibm=@Qf -LzYw+@R>@0c>U|6>VhVWEQ(+xFzog0>Fp9iNn*5Y{FtqLiD@ZXQwk?okovz#0`%jI^FdMOb>a>C(1K+ -t}EScirBto4(-3I^kDnZr$9-+~&Dma=Ybj%q_?*T5x<p<^16My7|rXJLGrE@0&j~|Ec`x`SbIa=Wop4 -kzbU5JioFh*i+Zj+~Y(BIR!8-t7=wO-u%3UdCT+G=55R?$lH;(E3YUobU~!95~J&M(Ul(6wNiDpQM%p -~T`^17T&SzA)pZMW<z2e=Azj_^RQ6QW9YS@FNZlpI)4|il)6Mg!r>`f~Gt@K6Gu@NrneSQXS?*cu+2| -?o?C|XJ6nPGLj(Z$$Wp7n)us76O*Bj|=?v3$w@OJTb^FHeB>rM3z^^WpB<(=Z4?#=Sf_b&7<_pbGB^c -Hw`cz1b=yeLkP`Fn)jvW8|&&sv_fBP%#NGP`+pOm>ItF4^6(*XC@@DatvNb3Dh%t(;pmH#pZ)uY;lAq -q%)^Q*(#rj>^r-ou3=%iGCZujsH92zX4E70|XQR000O897^_9#AmlS94Y_+daD2c8~^|SaA|NaUv_0~ -WN&gWWNCABY-wUIcW7m0Y%Xwl?R{%^+c=WwcmE1@dvZx75@S2*$NG$W*GZgi-_7g9N%zb+9)^-2o3TX -lkdzf=cmMmX2LJ*jNXbt3+_~ot&rHW6fkL4G6zYY-t~a_r@+R3dNiPq*Wi=c9h;MdwcXqv}S-vik%d5 -%@o({Z&z5Pd{gS~@2@7E-a*WOwDDak`9_9B^xv=mdX%Dn1IcyHF#RhD{Z*{oW{h47wd%XAu73A}?pMB -&BIURo8&cv)re>#`7HA<_zAoeAN+IDLBZ>g*(}K386xPQ9nEU%h*K`sDq)*Kg18C6wEl71_dzqS>-q7 -9xtgWRYh@1@IH-iiqY(C5m`n?(E19<G2*xKUTl6%%oJm05?%33&B9eB2MNC-a?dRd?_OQ63vpiP<5{2 -@@k%p)z435ma4z!+2th=Q~k_zJ9$<npYyo7QZEV(uDn`S$z1<h>pGQK<Yv2H68_1!h6>Lpx)DVQ6po^ -y_be$Z!0qJoMC3?yS$2{wpmDEm0|sH1Tn@dzCHZrJIrL^FkOfFHgl0ciQMJzTWikg^N*F+@7)hz1oTg -<J&*x%_ZPI|&?JYzVV|i6Jcqv~Dy_YBNj-MUBJC2^8zBqYx{PJYz{r1br$&0A{VaIbnFHU|we)`vTg@ -J4x>8V@B?!C@oM!<X<;^YHrRS^!w(0h9J>st}Sw4^_OD{$t(pYh~MI2)hfmuZw2833%-L+?^l5xtC%G -D8^Ecp8b%*m60f0h}g<6BO3W=W#X5iiN^kj-x{T6?}^4$rmyGl|Kx<_i4Gz@uPlsQWROSvx5^4R@af5 -fg!+uLGOYnO5+8rlfljop$dgwWvM_UcD)H;48XkAl}No*h^d&ux|!h|kE^N(V5$r~KVRo-J<F1GmidE -2teqF}<sv@x(hLX-->IXgFW*FO-kv-^{R_0@=efTl<^T~Og{s3L%p9Q5Dygml|5JPuZx8R&+5yiyf-j -SK;%^HjA*@Pq==e5)Z#%!9yp7J@Kj&9^y@WL0^k;Mv7lCh(CC#Q;<qwc}X;yhPfJ3hnDXSI#UU{$dy? -fL%li25n2NyeU{tAVOpljcIVAR|J?D><?4XeP;@!O}rz;|=X1%t2<@M9tZf8@guN51hUly9Kwlha-To -V|t;+-od~EF1o{#&?p_o-l$jrcN_RET!AiMTSKFL0IO%#Syc?`QC*wQd2SWB3Q4<jfmoL5=fBv<k%tr -K1T>cqyHDW2+x|1p1fH{&rY7a|JgTSYPeyX=OUd3{uKIZfHP+fPaV7RO~TY`kEdA*071b&d%>fj_hX} -Zd{+6QcMyI%efLZB=C3c0U%Ytz)IiXHk06qg7JeIk-Nw6ODLSgVtJ&09xEt4<d*tXGKFhMVe=s!fU!6 -XE{p=(<JN?^<qY>E<!a4FDdmvc^@VD$R%}N}EMf_O`30Q3J^Zwp*csg)u_ikx4TnG?8QqT9pPg#-%RB -&KSZ)=jusXI5{?(C>tD|&kZ6$(L{G;CHu;rsqh@b7Q_oGyMk|NH3T!C+^EKX1~XK1?6roBM;EfL@J_S -A&1&V)^=~532|8I`|OsAA|c6!Z^WC@<&|Y4=#iyK7^~Q`JZ;6aooqk)1P0xetYut`0T{{Z~P4l>dEUf -*kgAHY4~||`uf%Hhx|4zpZ#+3<oMOktwzU%|Dn9U`_1{^KNKI*i~BH8s^~Ki5>8*ZYWzK*I>EQ+fB*L -4!MFeY;q1X+@S%JVg!c!3G9bM9>$_iGzk=#xfA<?^RDR>*Z`Rk9Pg`hKhNZ}fFFcfNp~@l>1aY5^7vp -K{Wrtp7@Hck>%_te<5CIOTjTUR!yMU$kh=EBl0{$^tfL~GoXq16}KyZXLGPz1pQLNpcNmSh-HjJyZT+ -U|6XHhCf3@Aa_!{#zMFA*`=cRW~>B;SN~ZRUqHmPTC%YT?OW-hq~Y(~nvF$(h7yo`L)|U4y`rOac^ph -8{|K61!dRs;ctx@ZrO0HUa5@Mk~yU%ZHC1LIXuytRL3RT~&+uF8>69Y7~#kY*|di2xagQh;?F8&DVXs -#%^{Y<mhjiiwO*kP3sWf)+z{ea6;Nt3l=_$Y`UC_HVl5xP!L{#|Ea4HYosFOIfA_a2>jc^jrt;rP<#f -A_<O+rwAiAoy)&7|W$C>H9S{WTARB)InhlJd9Oi6NMNv?S`OIL$_%nn)pn3;_DUb;;`mg`7zeDfjYYi -`+P6-s#g((Ee3@E5Tv9h;;b5#R7U)O0j87_0w83O}ujX)t5Alo%?Fxssv;eOXbBFwWq(A9J;TsPN4?* -^An4Z+^EU<zL2ca3LzQ^O5Ne?GsysL`G!=~Rs<<33x?=k*LbLUv(v0~%8WdfF^Rxtv$BqcsVvId7HIO -v#u@{IN!r){_&}9{lS0-G!mC0#wb59+b@nP}uJ$d=V$0HJ{R&By|l$i8LO=O06=YeLbo))~p5Sez{S$ -SzSF|^$6>ZxFCd4#LGE~nj?gd5~dZ5u#gftY6km*CNbthi9p^@-oAqZs?9u}T%%0|8>I>;-ggXnbd_b --P)@NASZ9)<{D!N=W+&f%`z`(ZlnMY{$IE0sCCM*gJB3F&HdRHthA6$@&B+_@@xc#+P=la9XfZ0i4iE -_Tb)V7n6J6tw!LD9j#RuPg@7I&l;%8(%5lB2*J}@%LWqR~Ho}--rfG4vx|1u`7>IFWh04f3XzeM?!JC -RNVh`6vBd9fGVz_;l@HxfF5&}_hlaggDk#)qqHIiE(143ywM>@q~h8!|0`U}t^G*ZlsRbkhs_BZ#=9j -HS?bzxl10T+zokT{pkM#!AcT2<0ab5+<u@V5wZH!)|qkU`PP|bh%ip{r2~IX#Kr#-%%jajYu}Fe)sSM -RG%7>F-R=c<SI~=Tg%3wQ=t%t+i!STWU$jD6IgQ&eaGx3$$fsh@Gn}$cD=WPW=<u@I*Zc7+*92LQ8Fg -8m>YaeC2rv+^)G6bJwjc5)P<TcYq;__b)dH;t=;s-M^2V{sqwVIJxiJp+_c9B$IDQ`ddG@JhV42XdNA -|&ru8-OPg7c_9w7(3-FMdRczlJ;p?9yKJ)sXfNenlB?X^WjipM4X8^|vmqiGJ2b94xU-*x78&cLspZ; -ESixf~c!sQ0!GbeWe)z{xfhn89(4xUg$bmH$vSWJ3sJ!Zw9rlbt`&o0{A!<9g=P_J)i6CN7d}S$e4I0 -)I@a(!DpJ`e@S5o;W7oAECw3D%-;c-5Z9YI#7TuCiPg<G-Nv4Mc|!Lfa%&O0Wa$!yPjlG-pE7yqZfH` -33S@T`s%r6PQA8~v}FOhSB}tdJ5v8cD+;dFK+p7{0zTBl>2z(hAEMC^X*2Y=s~r<ad<O1QHm46RZ)3s -NWYfIUV!EyVsftO7MFLhhJ20r?%U1g+(DL9bA(?*Ja|R3H;Hx6=cbkn-A)ElZ6#Q^=yLBR9oir&Y(QY -_#H1^78<)UDNZEjCRa=pl@Pt&70HO$#&$T`3{B7n`+pp~*3k>3SsE0DVIsz3`RmSx{2icJN%wLsB8r> --$;X-P<@Ur=kwe&G*roqU<u1Z7cJd-LStK--P|CHOM4S>fsi3fpDQeG<M$(s5-n#g<M%wvKv9R?8gFJ -x|gqNCq?!Xs)bo8oJG{5)gIWKTGMoJx_MM8L8ptUEW8Br?P9+?smE)FB<r{<(NC*Vgue(eLM8rnmEA+ -lFv{J!Is+iSH;@B5Y^b55`=bz^D<IX9fY{Fy`ADibN0(Dg!P&REr>L4$1`{PRDFh1k=IBtp1Iqwy04t -oBn^U^d9>=OmCR(tZVd1l!-~9al@KH;djBcbWEkl3v6Q9tL5iYX&9W@|Ydl{HX>L$bC@o0Xg~TLYLXp -}_Uv49q`irD2DO6+*nz=yDTG}dbZ{*R0=`m>SAx$HWgMYBb{Ke$E{|MH3tNH2E@@g{E+f7WGjGb({H9 -chv3d+^ZXq3R5l#<XSb<2{24ci^|>v!GiZn?Es=D|%{O2<TkPEDY<QF$fCae66d5!N<3g^FJ7IFfoEl -`%!(hF&Mg#Ip#|@n;W-Y>S(T;#nmM)jrgqjqVU?U2uVO`17#23A}-Rh~fqfJ8O_kE|(Yq1wtyqA`w18 -gI5ln7DaR6kA3B2A~}c~4(HhlEo5z8APYoX$)JRETy3FbZvfFUg0wtulH?N3HdYXzNl7j>4>b>|QkKE -se6)YD1;)C%?;1Ira(0&<Pz|fB5_e>k2aeJ1(Sas~oC+bDcZ0G2p=hXz^I5Y*>bEEZVE*jwq1gcb`U& -bdc3y$eFCNw3f--0(z*#vd4gur?@8AOclZYSGcke!R3q`Yy?sgg#eHU#T{?!LufhpZ$Z1~RFKhP3uto -LDUnss<9YO}4=XlPn>i5uw`x>!rX!6LLb0WuURC8GijMC$RB+x&6GadN`3*>@R`jEFCS?8WoTtN>QKP -(~p~dz!a0mdx#dfnSQU3LM2aLNZ(y^D>@^X#D+Sk>Vy5aEU=!V1!=|)AYy(I20%t_;EQ&lD0;y@fo)G -^$H{Gq5|p{%2UTbO7({f%tLhz10{@?#)!%~=p+Yv1@h+rIO`(578GKduZOtlES6~doHlE!kdDC74(wP -c&iI4I&ZYwd0~0B1gnH%BXp3xxJX*Ht2<xGGA^(%D0{H*HO{-E83-|0Hbb3tkh(aC_DV^jwuel}4L0s -Jsknm4kqI*W$Yr=L+#`)08v6~h)4WS3=M?w<DE)-)H2prr@a)w!ma#3U7<=M+p-H{BGQ<4KQ1A9xyr% -b+>q70P8H$mQXh&AQ}Ajypl3Bo`Q3O;#LGOEeyzdd>S`t37gJ;YdAMRWvKHAARW)eL_;cFS5SdXWHXv -4OrtbE^aSz?e#8b&9^g0&aT8yQWZ=EVqKCA;XZvzn#8;J^uNN<98>|oD$x)(*qxlUj^1OUS0<NZ$(xK -&@IrBcaK6wNH+9a1W?ZxNw7eEx4Uk18>4dL%Tl`JEKgr^-*6aSxdNM7*@uWSSS}{XECK#38$kQ)vSjJ -5{)o-i^u=)7Dav<?Bt?fFN`34jn9<+VP^aA%VY#<5`cg+l5NVU~wOA`=$syf=5nY6RkeCNPMk7E4<bW -6|ihm9U1Jg^3?p_J;s4mp-kCzbw!o@m67iVMt7qb|)g-H7kIfC`VSxEX3kDr`&e3!mNjB)LC+1Dsl#c -~ry4UeV+p{8Tgg_HDe+6!B?fg^=134@5?4N%;|qQMTh)w&M+HfmT#a?=B0RDc&|joOkd=LqizG!f2uf -DO#=sEd=(Z0O?f)2W7UrL()a9`ADc+phOKDTs4d%NcB<R|y)7OC6;FJYpn+5bD)P0X8t9p+Mjhk}&<R -NHs6<&vF97PgOP}gE8g?YDv%?j15n_Bxxh6RvP7**hJ|D+}i36R0$g5kBN4XWfg8$MLDcF64YMB^Xsm -9s;)HXC9Sv^3su~Y<=GH>596k1>7d7=X6~23Sjg9yH^bJNPtU%oCe#oq4>Duk(|G^p*i}moD)Kfp?8M -M<lyfu($f$M<gKJKR=Cifj(|r2mppLT4TN?I|wn)^E;%a*o)rQMW80+s<wrZ`u=E@s-S#?FWjyT2b&Z -w>gDh5&SfO5$&qiRXDO`G*ymIfMfp$ZN?esx*tk1N`ot1S2C;szvvES<wNEaMwdqk?V2t|;1J6}udXe -w~0sR8hG!TRE3?0*KS<6zOt-XO{%J=*y1zHcib%I_)r{qwb%YGq`56J@eS0uw(UiwM8|7K8W;r()Prw -$88ml%TnOkyjr%darHRzHY?VkRfBK^+TD;A=L}C8`a2e|ja+UQz2s<p^Ri{-rQ&ntmCK}}$h^70VTJv -AqNk6`o}%dvoUo=YkQXYFT|8d{fjcPd+#T>~DH@vFwu%-`cG={%?RswhSeVKKlL%I{9*fXBE=!n_bl` -I=ycx`NP$@$ZBDyGH;x-OTUZmOb@~U3HOu{3hl-8YWg|c(Jkk+Z%Z3Cq@0fkRroxMAL@#5qy{y6*P`0 -WY3me%?<;k&oAdd4}owXGC7cg@X;8a^#|>$wHVcAy@5_om^!DM?~>$RftslMZRV9oXJW|7Vf%p~yoTT -wtuynPZ+OwX3{^IXF5kM{ih3IFuEnXk8b+um-g0hS&ak6i)lx&HCWYyZ92@8r70#D=4BSd7p~zbl}vx -pL6q58y#9$8K8~j;I<0CMB-LjJU+W#NvDEg0}^<G8kW;|tt!(Z4`HcR@)Re1lL{!toxrN83{clX<R!s -U0OmxdOWLA%ZFyBPO^jW7?X56gl=tpcQkvWL7#P6&lA{b^%Nj#9&}3=TF2yDLH-KYcvnB_Z{irg~QLf -Ce7~U$WID)L%KT8&|qQkW2FsSY$g+RNl8mpcM#?)f*!Cf=X!wJS02Xv&y{0i*G+#<<_k++#i>ODB}_V -?gv7?sEt8l*i28<g6}up3yfNwz)Wp0p(^==nTG1&7BdG`_zfpnxY(6310olcV%T$ULubj8Q!%TWJZSl -a@yCaLe{o20`0&IOsA$HnBzdbzO&J<CuK`>4%Q7tD;}!bgZM&$iCHO*=pLTRk_+wgi=|A^KmV$MF602 -tiUwFJd?H?veb|)8*3XEO>0<r6kUy*B*M<sA!`n@P7MDM%6lB6jt94$&Fy;cfOHta9b?i1A|R~B)UOa -e3^~t+=K5I)=p2=rEQ<orny=;WX@=Z^X9ICTi#z-VQ)gagEUK#InxNbsmx>cK+cv6;1St|?LWi1qyG8 -+Z4C@jKF2{H%?_s{q<A=mqA0{ASi1OjVzdgQnl^=iDx=OyB&!NJ<IS^FAl{^DXq3$6H77yjp`?M;3)6 -6Od(Y7|?DuZQm|Niv~os6Bq{(MG3Sr}zDjfQD4^iDxLML6EakMIv{;2%H2_FJz8Rep#HMm+&zZvxQq$ -jMMDWvc{QgD(@x;J{O$TGh?~inu~%GEMNnnY2(ca$3wlQzeLcrAqdJQ%)DtpmbIP+C*sT4#|i~Y%0Ov -OyDq+LgaBeS*v2QmJz%94%?c*G8^M52$n!;+-aXfasZmN%djsE-wNeOGvF9B1SS@t3P)6=!_Pxf=?DX -93VkR|oKk{?ei~*gnE_*{yDqIpz^~YNz}`vvT<>98z%zlNV2g~m5~(%L<8?)nDmgjCG)g#@hfV>Sc+0 -vPo~p+~jSLAWgJx+uzeuh`bo*fxPYsaH#EicC?qC3PsHc_oKpKGwdW5{-sm%Iv5dQFB5bhWwCe&KG!D -u8N>_a-lbNJDjKjfov(j^6Y*K_;h$4ri-Yt+a^fD?NXODUw;@W+p6A^7;wX0WyNP^_b3i6Q~5*iiniM -MYX}@R`>!8&&zGAvh@18s*e$;2wPBryiw=Yg`-E`=&q*^7q+L|EVm!I;Lt<XjXSd7(ITL(7q91OI46g --;MRO7qD)5i||}qBe_L<t{H*m=px6UtsM3|J1Wu@;J9t<89}?Li~R%Qd|~$ptg7D}xinsufoP372te< -HcD12})nKRDvhHR>9rh`fhP_J;2dC{}(T=ul;+a}?rPJ-g#;x}I8)v1dtL7{*CUR%!tO|JG<VZn@^L2 -4Fo>2v!yWMUD9rn;&3?Ed<plDMmb9CrDzu>ZVcWIL6v(N42SbGVYCy;2NI_nrqxKW39@{KJiZvg|aAn -3T1RIKX#t%z$IIESpDL`A!gUk)1pFw8{Aa28WmC!%ANGLq9wbrr}B>`4CGUUyj@GJ!qL`@#)@)V~rWW -)<0dK8`2X6mBdtLzytfn5_V%7Cb!-T16GH-lzo+g7++2;z{RJT*7vBBS40Ik==;-`WqWq2Aoh@2+uF5 -B2Fb~hd{WfFg0jG`6P(yL_H|+P{r#>M~JCq;j_w$YhFnzw_3Qkp5osPCkxO)R9*#Jus}Ps%b>rDbdv5 -=%sddy<7GO55hW2+p7UjOsZmc#OD|-3Lr!0^JXTh)cC1P)lW+nGxqZsMIEpdavREsW-x;fqr2Im%DXd -)J6!<5F3v}46rD_E5sh0c9rg|_vMyaNKAgdaA=6bvj%cyQi{^cy&9fjBdMF+7p56CnS=X27vZ9s$SLA -ukZj}LOkBhA?~I5!g{m(=R~;DQ}TRT0$Wjwm(>cRnuCjZar-A%#aRl9Ix6X$suxbSgeR%ZD{p`ns{-g -CoZavao(6ODnnIs4X{`kF~ogJT@H)!AIKI#~a<O(Xfs_YsZ`oJv%DS(R*1N#)^8_k5<=kNg!W0VED*E -(?ixZW?Gq{fF?D>W^T7Y?WaS%8+UoS@Ueru6!=57kD-m>9&Vo-CKEorD=aA^xhoubffMa|NAGuz)1#d -KHKb+`KsN=Qt!qkk6Dp$6v;q@K;=XQx;T3^qsDp0Y<!0K{|5$n?z!!EV%%C%nqMxyXU?bv`UD=j{KkQ -o#H9JN}o<nOHn%dTe7>nMi&_fJmzqZIwPrXh?M*c@N!+H*#-IXax$qWUWh~@5JJR7QBbdUM2cS^Rf-T -lWu9C|q#r%O_e#z{q1E40_<^5Dr7oi$D2$c6^E!~R^vlZy8oW$_;<apelV<0yon`3wC^(_{*5bf0WSn -M!D*>}s_NK{Tqe94Ag0rlNWXOC*`h#l!C&{rKqd<AZ~+#2j2b0M9Zn3_}om(q%jcMy2}K?tkfBg7is7 -$S+pZbMxWgD;5?oz7gg9j*}5J9-o%Lm`P$p_ZOvYZKBW%0a~0~EwX7Khk5A9jUE#N6=^(=Fd*Ce=_ha -h`+@hrFm>Vc=Ns3*_9bpHd8C*Q@+b)W>~W*rMunrYanW|%I7o-9Ls`-&O~Hn3AD`L@t9!3wr8cb=e74 -@k)dSoW6tS<^(ajEPK(M*<Uz;(;XWL!=PCLAMe3*Qsl-*re(4bgo*f^E&h}wk4UKTaC%Y3~lWUlihvH -4&~&XMAjsBT6ot)rSjU(r*CjrGWFrQJM1nhOyS@2?~e3hDW<nHIQok+max^OiZ$A1E?nim)|#7ANy^G -fj4hjf0Se&LbQ_U}0BrUXrPd*Z}CK?WnfqBc(j)kO}-JE_B4yzx5yiaVW{<5n3zmBCgC*Lkd9W2jyF_ -B!K??A0OQET-J4|k9Qwqr^>&xSfG&U5JB;oqCwN_ILnY57qY{aFl`6GnfM_hrFNj;e}g_+$S%RQ8DUD -vWrhAp%<U(17N&BGJ&tncP0cE;I)*OergE2J!agL_Owf$dVI@ExhRe``PxpM>^<)5+P_9Dv5bk>K*mZ -}NsC<o$g?QtDVW>l~O8Zkym!b^^{h=7`2rIi}fZRTL8_AJNe8LMvcp0i30UfYFEQr0ixQr)j_N-t;NQ -Qao<g#ap(Bw>Rl|UoZK|p*OP6E!GNvV|@j)pFo-39<s-F~>&Bh&3tB$Mo2uds;eeR~YaWHO3!cw3ctc -}2$r!e`^YXK@aZcRP04I7$J@yqm!7@i8A`U>e?p=3||n0A^ZdbAeXy%Vn}@x5ww2U4fB~w!eqawvoLk -;VE}-JDE%M>D))hS9DJ`hVF&w=8l>jzNy<jzrF~`tW$PbOI=UN-9D5K)|(J?ms#?8=-q^z7I_QPgnTf -=dN`Z6qA53{@Bnb|&hM2MoWw)MH%egJBQQO`303agZbj#IvQ1Npc&{_2;yhNXQyO}1msM|}?;-&n3Je -sL7R3y22}+*~x`Q-wyCuJ+Tek&cqno$+7z-cw8Or*M{$376sPhl^Ff;XF3Ihr4b_<kz<@~2QB1fsZ)y -tl?f7e;|zt3L3@~r7{yXn!KT>aB!D{@H&tJr0WQpDM6F8p8r(@iR1(EVVLgZG0Vlx>87IU0cb$uAADh -I5-+w|%L75Twn)J}*~;-GU*vvnBmXxsoJnp%7+l;ttxgujBDH^ui%)*L~Q$`O4hjjgbgJ?_X@SCuwsz -Y)J55xg{ak&1<|v@Mn<QRo|=xY?=aFPdI#J7#Z&OB%>U%_j~i+Z_?UmaeF%B^EI?4B>Lz*RGr%%)*Xr -8I%T2k={iKbPgin={snnQTe}`5-thQnj~g8sPfrQ3IOJPamEq4<ae65zlN#qO!-8%M#k@a6$5l|r<8< -P7?#l?F<_SitB=rCkJPxENuRxib>MI}0K!y}MBRbRrtHE(fK|L*l)CQ6_Lc6X0*NEykSPBj+m2IIMY6 -6jL>tEd3<kQ(zo$#!*hq1N&ciz2aK2i)2wHa1+$uwBGvi+(!8W}3%Fh0}vvSZgt(OKb2v_-dd6pN}5L -fMmy_;R{&Wx7W51SNHAW^cQkXXALzm(=N(xI@#eZ_acPtm>u|nuGBL6zH9K@lBRYIk*}&bPVkMd`M;n -8M?B2u($ts&(`SaYQP3lu&>7p21ANr@Tm_Y`rr>X&j}0^?Y<e!Cb_!dj_&Xau+`St52lYz)mp6me=hr -L9oo`uh|u@toSBE;Zjm-tXNod13f(eP)v4~>+8(-9GEeK86-$Y6+o0r};aum<Mdq%<91UrQg{1NxRYY -*d6)vsjBG+<ZSbUQtL+o`!+d^**wnq}lN)i|FShiWgZFa-+>CzidXNm3mXEuvHQ}(a5yC^Tqv?CC>js -DCGX0K(sYiwkL=q3HwUdQ!zx>&EaP82~qBHk9uy~2AHxPACDTF^DJ+g4Zi&W8FA46epM0O}$SblDB+5 -1-8cLJmyI=&9(~Z&{$2i!M}x`{aAZpIe|%Q`dm{Q{CCV@sxG@scu9f$j%MDO>-9?dFhNgPs>x8hRd$A -F$b@ef43tOX;Maf$8Iv7_onc#4-O_XecUVIZ2eqY9>&5WEX$N^>9Fm=T63QaRCkTF+qaNg;33!ej<|6 -?1`wPvqn-kU2aGYaLZ8;|Lyt79U6t~}8`Vdkrtk-P9o{{8RwGP}sB@S!eyyu=9Q(4m%wp?(+DZURk<8 ->;ut?e9EsGNKhqB`VQ<Gt>_Rs;%SW*gc%hrcYt=Z}J{{#F^tm-k`fD|;ph%qn+2aGN)Q8m9BA5C_7uU -0!#itS4SY~nee0+u<FeB)*`UD0{P7LU9`PF|}4mr9ItyX{D3tLlP)4|6)$b74c(TUWI;1;y5pl&-tk< -Y&ImN+qJg8^;6&0y<O8C{%S3)mH-2=6Uow#QX1RLCkqW-7>A$)*rc=G(e-jTg(+Bm)4f^L=ULEd(S<Z -jhV~jvhLn%j{z6j1Qs#g3Y?w+cNu+&g&ci7ntYc0pFw5$*ZIGHo&WpCo&VeQ-o1YITAwVZWstCy?EmW -{akn|fv-J_4J09QJ=IBnh%5|3`JG+>0LZ$@R-QWN2&?~cr%tlahymA=I`~tv%WbzpbUUtAT(iIRM7-& -q9F;TRLlQfFLFkgG$U<@*r<H*^h?f%~N_{LbuSAZ91&?sp{jBGe`)3ABzta>`m0JJGUIcq}7RnuVv?g -~4Vag8!{3Dm!xqmyW?5|SGSI9wRs_DEG{g#Xq@slNUg)gN?(YV+}_4M(T$cx>uUVTfDBS>OGr)NPJQ{ -h>#soX4X`cIKO(SuI^;Q}pZ>Y*N6@U*?qFkm=<;0b!N_6PpraWrntmXMrhRAenfpcpXv_4b_-Dd!d0@ -sa<3O49<$kSyd)Tmbj=d895}C{aUQ;L?$wE(TG>SbTiT2xlo#8n>e4;xXk9uin$_NCAhRHW)+Rz@sFY -qWuB!|N-<{SNy7ABGN}t?aHI~`0-)+RMkf}6A~U2fuSr40tV@pq?ug$G@nCK(+KQEKlJ8JNq1xC71k4 -vv2YrT|as~vdt87YXRBAm$8ogvPHelf`Ty!Fzm<}6fc)Pr(e0f6}H4UyZ##rZ)Nhw<kWujrXWk506Sy -?9I`C9ENh6r8{H?+!O|9s?}lZj)P=f{s~wsP_mBViC7T@fpDB-#3-&VF!w>1b5vf8$D7kzArntFD1QH -kHc8&IZ$%$d-8s<&3J{EENfdoUM%PKaFHSa%30?PqY%ZYUYO~QB|3)<S+745h+lT;0?QcZn(2;W>kx; -GB0f_c$HJG121_fRjAu2EBLgtOCv^Yo>({Z=0ATPoxXbhnsPGA)?6Ta!O8xp0`2V7cK7vFX;|TiEYC_ -gYzX3<jYp-}z>+rodEoUBSS1_OS94_B)9p7@5>I8pc0K*oZo#qVdPfRTzMaQ;&oNF{yq>2+e$^<#$UN -A`A#srfpKc*o-NH@^QOODsCHRw|&J*u}w|{8fF54A?fLE=L_Ae+|;T8z1s8rd`VR9SSeSJMENLr>I$5 -+HVt?$M)H*$PBjPbU~=qU%-G4ilhQaWfdPw-GGrLubbcyF*t1n|{#zK2=(ozo&w^V4CDTuj~Tz){e+( -O80O_m2Zxc?H&Ir?%r6vK4t1hQeehfgbTc?J71+CH?h`pxZ9)6?7MeL7)v2LT^w1SIttl@}%F|#G@** -)gLx_^uzL%Kpec`FxG5u+fg(_HtY^g|5w(I4#bVBN9M5JF=vONR%^(&S5Cf8#m1*o&2|-TAK=yzMXus -<-*+EryVW6iEjrX1xnyU}1U_%YLQtw;BjKYRRHS6fIyYD39c>cT8m&Ahr9jdGkG?;}Oq-^3Xtycf(*2 -LJfYFLp@0$CAs^&^Ef0m)BimDGQFH_9LD`XONd9_e2sJ8&f<gJk<6Wx*y63YfC(lvtSOIS2b!gs9pUG -I20#gK2g1KYQ(L+>zUZ8BTSes|=BXo!B!?z+r<&p>&Z3Pb1AH1sYrS7T^nkou219!@>8DV-6QbT*Pjm -6R-sPv{)^bl3Zx4jXfL&k?Wa5ffl^H&AGL=v~^FU0|M-BA7W$FWo%Y8D*r%*Ten0_#fsbk85+MVq+Sj -6JR|Ec20L$sZ(B1Pcz{*ZI5cLs1T-hwXRz)G)L@NWL&MCG`m&Ok!#yx)SXGJEdX`$Ye}n()wW&*G9VQ -X9h28bH_-NmO8rhT!JQo)T6qbxV4~NyoHq#?L@Eyhr$LBW&^wmy)T>ZclZM7-1Y$zo&+|P_x=4)}M>< -VS$uNnA%>#*cjF42b&_+$u{SxX7*!-~Ph=pWtmAoQz$Do1=4ni8#!66aecc2KMOoDG^p7_><1}Xz{Uv -P;9NvGol68(DeHadI%{Q2o$m{^PWQ-;K?-zy&z5^9m8l!6>qF7W7}6=Vx)<H*||%Kz*eB-BZo)lCgj@ -jIsmIog+?4=z-eB<P`WGbN1^F;jBO<9y+t_F+mK5qfRrQS$LpwB~>!c!iCsQhOf{2GE&-#v{Ze`*MCk -6UR?Z(e}(YyVYQ+WF0O7r3?tF<7s_9+?=Ug5XO@;8`hW9VUI9!LC$uX#M8J~CFV7}3vzGB>yryV_^^5 -~h=LDO<G=9cPtY+0Y{g$RE>&jPU5*Nkh`fvA$hckEmV#(f;1!{j976ju;>4XoIIRoJ)I}d4_CEUYd%8 -|ApSX?#OF){Cv$%Oox)U1w^ZCc`qwgPY3HMPSU;qe!ZVM6%Zbo){kZ8D`-vT83#Z_vOa7VUiYndjve& -c3)t1C>G#pD0ek;}kEOoJROfRhB<v4hCN-Rgg&wYw%GLFv@zN?eyX#}7TqWFRBT$Rgb-hw!q~%)ntOp -)QWlB1YeKy_Xs0ablbJ1o&OHEYy()EsP?UK&ctQYaWKzGotGTSc1I?sgYx3`ZgcUJcHAhZ=yGEPk>8n -V@nDAdN6Qbc*CeK;&eR+4fb<u?f`0<tFZ&rU_2H>rTVU^BUuIh6BYvMPJ}ESb)3;urc0Ly;1WpYcn1% -e2ay#XbV{TQ7p7%!F!a9blS1!C+-(JLU(<U((*DA(==CPv`v?CFh#&0j@7)3SAO1;jf4mv@KM<W76`Q -xQrG4*WC~fZhw?Fe{KHRy1;!mvUrWrAzhrBGO0(&RY$(qyf)txgwX-1U{&HFg&+XWRFtZT%#rXEs`84 -Uc3m)_dJpb4(&y*o2MIW)}%Bu#)CW*wxA;=6xL|NVUJ{}Da6;P&-dY8j=dwDPgD^Yr!0H^=WzpS(DU- -W~sZ#s~Us%>xyZdGqxSt0{KSyL7zjo3fSGrqW+(v#=~k0e|N8;ben3;`dx=z@rt@?SWoW`52*K8KAY? -Os-zlp!=$8dChgB(|VNK7tYyt&9U;R?-iGKGSjZk8#%wmA8M;N-oh`}h`P=f)%RQ4s^R|uP)h>@6aWA -K2ml;P_E!5~aNHvS007kk0015U003}la4%nWWo~3|axY|Qb98cVFJE72ZfSI1UoLQYb(6tP#2^rc?|l -lgCrujPz=Nh9npB%?J!#B@3Y(x5Hb9M!Z@VlorMQ<e-%n?tU-o45MDCcd&S)a0vo?<0RAl+R^vCCiu6 -=uIplOHKV-Iap=Sep_mT*5r+6guPHfw(|&Q56MF~AQub}0co7-u0FsCgQ>@#Ir8uIR*l<&Ox4OHM5Z> -YOPCLY=e^1iL;Xk>Z<&)p9CeyJJZ^7Diy2x=r*;n{bUQ5-LaO2HF-{BbYkR>q}^puT#Dm5WeG?8fWY3 -wyFTAlmO(OykB-4N-7WaF7q-A!9{1_JE0-K1_KKYLtU`=Pqf}PM1sW?qN~lc&V9xtGg{)f>&9w?*lU3 -JUYXkh#xs)NEx~)TVH?W}{8%-|ztEx@Rn;F*O9KQH00008031s8RvlElX*>V`06+i$03HAU0B~t=FJE -?LZe(wAFJx(RbaHPmUteuuX>MO%E^v8EE6UGR&`ZfIE-A`a$jmLsFDg;UP0Y;W;>t`@h>y=p%uS7tSF -p8JP>PQSiO0t)S#c=<0f?ia$prvVO9KQH00008031s8R+9<`dK4`H0J6XU02}}S0B~t=FJE?LZe(wAF -Jx(RbaHPmWNCABa&InhdF_2|ciT3y@OS?TEc4tG$(5NV-EDicb$8vwZFQR3IkwYwZ<3WM39?yJq%KLt -QG5H}pLqd500bpDFKzEVSLZY}NnkLT8O#g@z~J6r9;~YJ!6eNe$o#cfuIuX}-@7Ls7t3{-UR~GX(Z>( -}Hh_OV#eY5%Cus>EuO$?MVo%el%quw)t9&L)QC~}Ov`nV(KlNoGevoCA7P)v7e=K@fAX1;A{@($@x>$ -)tvKDz!i&Z57L|Tb?nn@wwOy#l`X)dP4Vwt5$K9%A&t*@yW1tbO#|56}|Nu5CH1j;YrX>OMjNlge}*Y -$Gv;KA+fZJZFIaZz49$hc7T;OXe`@yYq|0U%4opXZsZDpAV+TBRj)bFvo65^$L&6TmP_Zbeaw<f@eLt -u7GP+cK@w{AwVoVqV`Sr35Imw5rQ=vZ@_IY0RL%b^#z&l8fl*T#U{m@zv4!=zIV$ejHtVd;0uB{CISB -c64$vIzAVtXX5ec$&=B===21hz7|I({}SJgPM!>e1TsN0^3AeD`~k@nNhoJXuX8CK1m*=JR4wH+ou^a -iSAMlhuB5msUdu9v?uex<7iooztN^_kK*`cYS|>HVX>}^z+l!)T?*iUjUQ+Lh%S!<Szd^7)>s?g?xQc -Lin&zuF;)$jOK<<lWS-ehXvf4{?D6*jTL^3H>wQ3Hl%&aORtwp&4oQfQHu$o?r1TY2;f&c-}_7=eOG? -xdZOlHJH#zc&OYJkIQC9PI-(3eq-T*3xR3BtIL(BB#Sz08uSgr}PDe@27nK9W1VO7kS!8!p$w`6{0dF -QH_O5aSFn9@`jS3M_(u4FtTw4(MKs1$JOjfE4L6NtV{@SR4TrvKp8JD881&T|$HjG?CL}Aw@2y!2P6L -(+eD3jN;xW@!!Nuf^19^6geJq1_@w@DkwgQKZkBEKn!Mx7c^O1NffPEjOuC+Ak3%@=)JBl0-eV0UW!} -fM23W4+pSkA4D3DC;G_6cYTq=PTd2h1yiT)hfSf2{NW*`NBwveZ0%Mm3-*q~@-b<#45{}2yb5AxbA%Z -UFFl=E+(15s9&47@vq<HwrqepvRpt7hyTTE70Rm`f9)CHBnB41vPiSx)IS7cE7_kb%!2~;bumPuJj{r -qzUEKq-E#TAIkm3}NL{a0y<SJ#<*V;)u$5Dx60d9yZug1W)MTJ6otVj=4F5=XB3*4q>CJIdDs`r~nuW -hnmq^dz0u{MQI%s(F99WRc^ibI^hkc*Rc_@=ZNDRe!IRy2{0R34itX_Udvyq&ER%u+R(}-BU__MDLHw -vM9OIy@u_d8MstM90E_F=H7U$2J3hX@1lnwA0GqJ_oi6_+*f7?YxGRrJ_BDQKSMj9dP;swbNg|!O0(H -GUo9q5z11*Bz~Lakbk<Z?NVQ&!K?dq-Xd_0Sv-Czbg{Q?#<}h}3!{g^Cqn|*_fBj^12E8n*7|e89f{4 -L5>_yhsXdt2ovYtkLuJru;?CI#M?rP>cRYWHsOD9<Q^n84F{Pg(f{CEu3=lJC4`(vbUQGw3PBn&km^1 -Y$BD3iR(cr4YVNpU3PI0Ulv7i2aW`_YpKY_GCzFzn}`d}&xW@DLhW{AxfTP)~uK#o9`bu!@e;*`-*3_ -9@Vc4YAg~_)e~Yq)7&27PN~69;-J^5PZ-Z3TL*~S#b+i3zf$JfeCglCSd(;Dz7LRxM~W+ylUE}W{2WL -bs0*&#y9ca$?4hmM^8updHe*4IeG%*`<1vG6<IWdf6HW=NuWE3`6>O)hD?=Nf&~R4902A^Dz08|g%gQ -bE1{~;%{hhd=d1H$G)Sax;H?c~@3*@!%-CP}=rXUA^{ULt3qp8UI;$pQO=2{Rpt|3giB>b+Z3H;UJS2 -902u?md|H@${7+YB`%e0csUrE)$-eXflxh#L}22#lqxVuSC#NW6!Sl?^tm#KMMls6T-09d`emKj$*`} -X*$_;esX6F)XZ!Z4cFL)FjeYq%zQ=^!RKXs}Rqm^IM%6Zn27i8Kxx4DT{Ur+_WWHIHh6>Jp*BNKi%XL -H|CKN>{7cWD;sr>61=%^C9H($>{vz?9>ra=1_<k@f+Y~{D$}-p1}|YPm<^~EplXO2Qfvjl&E>+4D5tz -P}>SHLl?&<7x4VU@!2^b^z7*3;`r<Y&?#k%!T|u-3n`=CKZY;<-G8<JvfqpM`!9R_e~5i}cYg6y^#9R -&@p2Y_^ztA%_ytPL`t(Uw2_RC6efS=K)Q`}`a8aKaEH!TeJ!qk=O<WjV!1U$qNBtKE<5xWe=D(Hd?f< -`sQ25GemfX$>D6OKn!P(xDP)p~+G34lb7U<*g93<|<>KxE{!OTPrZ!9qTT2WF?ul;vO2LBz*$!g1ftG -9DG0}bQ9y~47E|8@cMwzO3ib#a;8wA!Qh>FaQLcu$j{z{j7HvehyxLH{j_cI$01y;=J&tE~M7CZaeuK -Ty1c53jm;nO=cP0%qP`%UpnxFL4HWMU34=!bab~D0NxN!yuZ;Nt)#21_^o#_O3+(x$s_vyfodrbyc^@ -N8q4WH~veEX)Kb|CJ@N<9=K7WJx}e;S6Sw~8MCK4DT)j_by2QlUmSeNvw;^-Y#{VMuh>t<SrPs}j;#s -ca3~(epT-~W(I@=58ajYU|B|961_aJVVV+d1GK`;OINvqERv4b57yu4xFgBAEr_fM5U9cY3^Y*6wU8e -1TL@b^$-_g3X%*vpnKZ@O#G|zQEAw8jMIWRB*dqe=v$Q=^l_{VfrmZ+}%i7xfGMm`XX%gbImBW?|}=Q -uD^jsE2&(;)@1sj%w2$iP@tLq=d9s;k<UmtfXLbFm*5g?;48Jju|)aj>LXWoS$GLUaHU#o`pF^0#TLM -u;$RgO8>m;&ZW~o-Suq)!jCAVIEs1)OpccRV$bnuW<qa(>0*%H8@07UnKLI16-;n*33djjCjIGL8MJR -G0iKK5Q7wbsChD#9JI88F-TA?wwV?EG!dqq#np~7RjVaV6i|sJ7*VLCVNzOG*mFP-P^v5(XGxt<Y>mX -RGBI2ECYjbW;y8v#GN!{#DaCXvj*lP&0#_BQa*EpZI?0{hcrhsWUQ;_jX!4C_>3l9p-WeN486mU+J#1 -jXo2lS6)<~vhQDHzWtJ7ts`lB&Pc`9zgZoMYJl!8BoK`IQy*-ccS#Nxgp&=E9-@m4VCRgo*pz_=24jv -WGrYwlFg4dqw_xuV7gmX+rMBLe6b7gkJDv|^g%9dhsm<I_quQM#7Ja+M{ePcY!Lt)F!uDaJo~Mvp}sH -1bx3Y$@WXfw)a4i;WuCQNU3P&ve%74}_}<08^ALORpgAO5;Y2&VHi$0#$xwYBb+q0yVwKz!T06AMx8h -`?aj9$K7NK>rHKQ5nnW*@Y%JO$_BWipcXi^39z9Kh|Vh3<;ez1kP_UlJ@N3xLThC;BX1ff2?L(9TGf) -cKhU9<idGg#*i#Cg&x+{^1Jo!3dThg&Ss~R>1!Zu>GOLEFQm~cosEwFWOlf6S6~K|naREpTHnL$jR?I -N*u-EqO(E0h#8-6Nus(~uGv9Np(;G@-KmDj6Ci{5j3wB1MZ=?Oh5M;PaO!u-zU>|3C>ABC_d2d4C6cs -xC~X9(ug*Yv1;Xjxe;oIgK5R>29Y6+2vDqF7u3AF+~}$Si)zEoeuJ<QLGR7Lw?6+Xdj!{!B63vM6dU^ -Ob&7J<N*Lj7B4UevFTdtL~_L1L}KH=oXIo(QbjKMFxd$WPVXN1=7i4yu>N~&Fcje8-4Y?c!rPP{qQ{( -fcH?wK!Eq8ow49A;+&lJO3eTe>H?&h3p1+U!?QgXGl0IQM|Xl1=}-J<<B8Ti%Vegw_e?*kuc^cFXKBO -nGO3o9z@4c_dzNPEInk;f4)~5hSYJugGzI$N;v<1LH;*>vX4=Nhoa;ya`UW))#jfb<Pas~N^i8UnMi4 -`$U!6bUZ@H|kPvS(@=F_~C()#u_JeqHdbe7`^x%&RSdNki@GTO-O89q89oxZUoS{#jjQj)fEK70d@N< -7|CpYQ_DoR-|Llh+b8zgoDylFEP-ycBD6=I99+lG%)6>QIiHQ*amA>TzTP!Oc^x)58%q<IigMF=?DR0 -@dhdY`(~)*7_OxZ`$&JJzA<jFxazN;z~I$*s<B+$&P}>AHcVt-pKNDtfv6`PmAJawG`K>EK#eh*&bmK -&dji?;r_ldkZD=fYy|-~=sa&SaKeGc(kOSbF@n6HE@z5bGh8>lpa>#B70GLudJ~lqgS^NO<YEb4khZP -lF_}pi0^~1>GTzdPdh4%wbXVUg(C<g!l@Fxj@HTYr6s~gVCY)fL<-7zCM5<Ka;p4PpLG(3FMvY;YWl~ -krx9lF%SSTlQPOGuxb+|o&7wlgfqH?M3Wg%5eMQVGrzO4OP^jdh<gHwfkeVeTNG-c=v=o)y5aqxLUug -Jp^wuHGLe3i2Sg)}jUs9Xt<ZMPl;%`1>?qTg~=E{m#}M7m{D3TL4WE;Sd;faQj1?M01y_#0qVIO`k;@ -N{$Sm8H2gA7!Ua2TqjKx26{2h~$MvznLH5$Zdnt9wpD}K=GuSK1tqQ&QnuuyVz!N<++7%0GR-+h<H5T -;tSlT0M7sGv{+Ty+LB2H&5Zm|gdD})olJSN0(A0~zfZFdXsNE(CW`hohEKN60_;K65d-2mfVf^k&yDx -b^KW|wfYBUA!H?ch8}=AN;$h%PM?7e`fTJ1Q<DQJKViB<i$)*lt<bh`Da-~|)z)%HhXf%qF<&w79bb= -P2#Si0$fBX0o(R&P|tFN1CYj~s0FRX68l_FP4+yHwUMINH~PzOH`0*V@AyE|+8Fo<{2^}e<bx9|nh^~ -(rQkvQk?)c0`*8BiiNQsLRz@x{fz#_xj|vYM7DZEg7@DKRi2Zor%Po&%AoWJXFa`a*9hNoUXw%3Sn?9 -y?z)VGu%~>Tg5={5K=L8`YMjtF-#k5tWbz!x&&y-%+a>#qwblo7v+R&}~Kqk-}j_KZ`$(`eCSz9y1l~ -&~Zw!Kh0*Mw)Rq+@|C4Al$!et_sV{sq|2gjT0Sop(u+W<c%>JDu2_tkU?~Q&Qr<0+<|bs?eAiJ>y<!^ -JEf>R-H~|~jtjXKXy9uM>=G%Gt2IvV>yrRUA9x2Qw%#&o`CRJihV*?>Aib`Y1gfU`Hq(E1J0~_M=_z{ -_WWdlI_JEY+VtV<vrq}GHYx9A4vD$rM_dn1xSg#zs-#2B<-uBf2vExCP@MpMKbfSO2{O{HiJ6Wn?UmW -3vwJgkWqC0G^}isF!#izauqiD~q$xcfeiqx~i(uN$FgDmZkwU=QHg5n4h=6M!-|ix7;cP1s>0$PC&Y9 -Bk1n8|KIsNw>?|qKU#wk`auSYk_D+SR81!89lZX_)X%lL<ca-OardewHn#r0gQ42q&RGA1Kq)$JcD=x -4G{uSro<3(1=3n6HEz>w!@LgnPmE4a#=Fh$x}cn?CEd51*I7_q`p`~Ri!`1wa*Q6!5=g#THrp@_+`Yw -(o`7!2pDTdsO>4cfshEnRe*;d6%ex`9-Knr9Ho+}zcf(N6MH)Oi47Y2g*)Dq)oVTX-IxP0~<@`IF@WA ->s?a3YRUfhAR2X~kCX{x<-HJD0`18c(6>h|hbDpcLZb}JO8u(J#^YeY!X&)5DyeRX&vyv|L~^mexGLS -Zppi-bd?E|J*e#1VkIxpHh@Sp~o-P}W-Yz}q3<SY%uE6Vctq^|~vnA%bNGr)EWcP)VdL25NMb!0OoV$ -d)$o4O?v4dn>jefIo~aPUDI#xMMV*{m<Y_i~5=`_Go?^worX*0rvOgiqp1Y3b-%jjQFu<8|*(JPg<03 -cCOvX&Fknu#APy-R+n&<!P+s3s~+BLNCgY^a?>;`Dw(a(8tXvsCVQ7+?DHxqXB33x6>B{9gP?H!4qUt -f`Yeb~dN+{Tx{OZmGV|wtR%^`yinaYE;eE?|JPh5G?Y=QhW}G8ZxF-tTS=_;)1x-7To`)41DVRxcpR= -mrb3iDf(UbAh(RYsjW-sAbz`;2Jf~l<mUs&fiacvGj-_*sDPG#u>mk)RY<m>^|e9!=juj@tjC9VT)5G -s}(B}jUTzI{`Mnanp6FGhaLh-Usbqq><S8HZ1^)XbpO%AIbqJxy)Thfa!GHo<=5lDZ)XGdC|KZGmf=h ->@)XNQvUWtlpdTyy(s6pN>EMYow;cX1&isJD=h1lhyRPnPXGLAYXHQHOU0DPs8EoRn_b?BU_=mR?|vj -#c`{Ay<MjFUH+gSsbac%nzh3mOYbx@JH%!imen4sw%&a~%?m3w5xyOQtQ%y!5o^8e2!{OKf_VBMTyQ{ -4Wl86-TRV?@)lvmFvIewSPRqr7{Iy(@9jva4+gyj|o9Vd{P&G4%V>MsLE)R$Lbh`<V{%Zch-~DuUe<< -$b)|vYQ_lvSk`1!N=<BqTFOhXwLEEOTgj;ec=`762?_|*qZUu{E&h3-2=e)Et)4Thz7>yD4A<~^36_+ -kU>H*2q_p*0S?)fCvuOB**5^aCx<u&SV;NlJ*V8y%JhvE*~O2rj^LtZo)e6bEUMG+QGJ?Twl2r|@DOf -z$f+byDK$oP|($*Yeic7;Zv-FWZV8A;2;6j#JV$ymy<Uw%~1^v?{UKK6ORdD05peqe7eZVeh(Qy4%y# -fq4{F-|cMtk-c`u%$EEe{7y?-y1|s9(mH)iWk^$^mNc=GaM;AwZ4}N;IL;2TeZVGQnZOLz$bM@`@yO7 -TD9?D=<7taKqNC|}8s3AV&bcesuF>070G*B0YY|C1?TtnJL#Y>t%)KQALy&-K%T>J_F<E_XC1{&)ilY -4ePeIhsK8d#@Y5>xE6U`vO6fsw*fc{6*a6`xK&b4(Jda*s@%2Hl}ZIf&0rrHTJYtJWlQB-#9VY5^`Gy -2`K`v%*~OVQ)0Lw|^;dNoWRDd(tF1F5O|gYAm@we`9#_fNh7ES03G14h>D%q?qXM^x!|*1s-eLyGu=v -A$b3viE;i-SEFv3jP2a5|#>2H-0d|2%V?>KZ*Eb3}9Fi*jW6Z0KBUJG{3uv!d5%pW}BOdi9&Nl0g|GU -F-<WI-fX-qi=`~<_4brZUtlgS6$Qt%NFIP87OmGy5DPvzZ+Z-PAK6P#|I}4DV8DQ?CiWEzaf%y{G2PV -wgMZT`%PMP?U)X^I6LUl@S;^W0gkgru@faPl@%R!qn$K4p)F9ZhIr@E@W|_*(aDc6;og0j1Z1<!IBjK -<Zga4EQ@Lnae`9REvCd1Z?7f1Q})c{j(y`nL4Qsi>zNCDP~$8(BM9t!xAP6dv~p+Z=|Z~96$Ef<rYhm -__^6t_7hu)<tbFHGa`hub#ptH;H+$<I0rjQBwhBI^FH7H+?(+=O^q5|c4T4j>Rl%rrImIo5=JVby&F- -_&Cd%JluJD97+WlWL3hLD^^NT($B{pVVz1i%&Wff^$}okB?yBeMyTXxC3dn%H+XSR!ox2bkXdkXRI)M -yr<}%V6Xz2o;G{zlk$oVInvgmq}E%1RoItmUgDYLB1>nqY{c?sWzVZXo1^?*Dt)O`UZ@;P<5z2Fg5qY -op%m_?rA{i=wcB$H^wJncsHL=#Py|R*S><8un`H<*kC3eg>evMeTa%&?_p+%&J!(I{g<s_|g1i20af{ -h#XqR@C)+?2a@|F%{=zVb}&7Z(rmb@y8N7kJ<BZ1TFd&IIqSJQg`9plOyM`=Nkb7wZuYk#LLMXgMV&C -po}y$3bTUl%uOrzOD)xPgr!(DK-*ATzc|BbcW&pJuC>90RnW$?W$6WBWKbY1Est)-(apBLj~~;H(4Ep -106dOt-q?Tp?T9#WS0rJxZ$}POw|$G}NM^W7r$v29&N=BdiysKW5Y+e3$Q639hZX8b`Y=23Ql=w#AFn -8B{f%0aA(~H;Tuo8e_99AK@I6Gho)mS~OWLgV6#`w7_nk54u6mG=cePn<YUf83GOgT(jY2-va8#jlpT -TRrsS=dm~-wTp=64J$lTekOn1^&morBGQpwMXo9Np23TlXD4F%r5HP*8=`T2_1$WQ|a@w5L=HC)HJ@D -yb;xwUF$ZMD=H!gMw;|(Rp^F-Oh*6i~<HhJ1n0Bu${Gf|ULp^G#}-r{hN7v#xQ^cinX)nUE2P^t?HmT -s_DZH-X$L;SH%(df4D!H)wu9`C@TNr)vrgiY)SsI5D(Bs>B8U~EYYQ#kRINU|&3MSQ)mpjoXlZ??`7x -9}$zZ1mW|hkx@zBWUv|P+ghLd9kAOjU9uFYg(Xo=Bs08HfbO#;3=Et*dhM9m5!#A3nQRoZ03Zt4U1S8 -6<qMxYj+fe`mZf#OPG@hxSO~MftzIWfu(`irG%*<`(CR`x)Mc4x|tsbdY6-9`)KE}wYQ|<!T#l?qfWK -S5Q`O^EueF=GDlj?RDSnKnlo7Pr|j-@@L5^@O`Pr>jehD2RZx@DLd@`f2abDC6wfVS+bv9(=Srq6NIr -L;ttJ_Gi~&Dk_<L9y@Rd0yR#>YcWFL96U5E8UKpW_Z(FP^?;g$6t*|V^_<Sv7wsQ4w#V6x*#G_{=uTr -G4~oI$HKXjUXMvpvkm$ycG9uu^41!#&=B*Ge6gb1`$Z+(sPR!+#T&ru1F#bk#?IiWaaSuAM5`N7E|U! -QZ>6@ebwf7&u>zH;A7lm;~6-ESO(TzL^d$DcDI7!ONi-xpO8<%iHR_r6+arIgeVVjni}80G;X^Jvdc~ -Jb0qr$^sxv7S0Z@A>7RKJjHz_x~(HeCtoLcrG<P0{t#Nd={59iN?lX?Ao)i#F2KktDszBJ8##3$d#Xt -RFwJaCG^_q}3&?t^z86)D+>U=P(!8e&4@5*+-cbh`STcj&+9_sTkgKX3XX!+N?b+<;Y{X=Q?`X*6k2l -cz4W-k0D}>MvW_l&4!_FI1MbZ&@8-OCxI0VD$k4?})FlnkAiPVJJ0=5;y_o*Ci%c<7ia~|)Blhcc1)( -`1SCTcbTsscqzohaPj2j63VpZ5T#I47t*ApFBX7RIhqOk#^(<<YZ|m~gtJS(8zclJ2<+62v&}X<A{|d -mWVS3rf{p`^8(N=^&{~i(#0eZ8mgZ<H|-$S~dXeLeCvQ0Y`-Hp=iGaszecTVzuNDFDl>C8X3@z8cbt- -T|uJ>>=?W~m_oJC4eeRp0nNy4vuwXmX3QgWiOOCyYQ4?9XhZ<$=&QMU#ElnG5X=NN?VbRA65Nw1XHgq -49fZJi;&^)w?ku*=QsfO4hZ%OCeQjocL%P|I4QW}8;ZuOHds~`asdbug!^*Rn`!C*8<JukRYTmdj^Y* -K|qhQ6B@i4PmWO7$}iJ4J!rq^(mr9Q2V{It!VTIO*Pk6J4|J(u~BH!=@@4UOc#l)nvxS1~X=Rpr2!5C -BVhR7LB}rV7M!uL`}}R7vs4tES$DDr&~58u~F*bnNZBR8{=f!K(faLtWQ@AFLeMRHy3)J_SKE+tYN-= -1oUmiDX_!n|DyDAH}R|NT3f%szY)gNa5<Pu819yqBpA$-AAbjb8D<@%=+!G#OVoblTORPag*upkS02q -9lBW;nujw)<F9r0Yg-!k%dnRmR1?HSovnA?L3LJZJbW<qZySP10v!0}4+g#}Nx#v%&?9nus6um)W)PA -cKw+D<v=&dBgua`OeeO<fI@n;7*E~?>F`Zw!r$(W=!D_%M<%Zq{*LEKWkgnReLg_4~^m)C0tZv8aMFK -CF8b`q;e`<{gZ2$}!SeA=yx8>`9+VK*lGpmVo-qaX|8V(R(ApCoqHnrc{GZz`A73KK-BEwe?ZNetBb? -ZG-#N02l2@h)v((ll`s%kHS(|Bafygjj=9vb@Zjs$z}XF#eWETMLT4rN%%Sp~Th`0~yYX;%x1&W2`e7 -JJ1Ub}RBbFjPmwUE>O4Psz4=)t*UMM}fNL4GJgPaf0T#1;oZ|14VYBg8u1^ZilYv;cgz%Z7Hof>AXqP -<bSi!oJYU%hOA#z>EBxBQ%?Zx!J$#;9v|D&wh_g{W5!D^@qUI)bCfOAy152VUz4PNVG(Om6-6Nrpgn@ -rQ?PVUOt!Qzro2JE>#Hu^>g_Nt`eZEIW58;6AR=!V+!>K@@FbvMtdZvmGvn!_6~e?GNda=dvUN((#>7 ->PXByGd?NL%~FUWBZH<2EVelk}{R3!VD^VMI~;}t<SBBn(QW@NZiviI>o3s*Cv==Gc4%S<Cm*Et*>Hi -`OiIO@M~&l(YxG7iMmGE3`T2y@PUcYx&vxHV3=w??Veb#-kUZlZ&Z(C)&DvRZU>hI113)J)8Q*!M>l? -dY=EKsv(1l-5wp<^;1FNn}aYWQ=WRkE5x}by9iIuqL+B<SsNTv1Z8QJ|zla-~w_!&+ragg6F|98y6OI -S=`?_Qy?cv;jNPfPYjKyyFl8ji3p1`nqjd8U5-AHe8&uQ1tW4WUE<{SF4Zvt`x^1oxVM!%Dt?$ytYGj -(G1!?eby@qRl|u)`Dhk_(hHI}aq4YzdJK`k%a<_);-=vhuP1_})z@?q`*PBcYLlVnIPg^_D`_-!iGkV -_ws=_Vvr;=W=5xjHGGyJ`a{iCF3SVW_z0jcDjceae&oz3=f%=<DOKLmSz$mf@BhBp<0d;kM*CEv6!Nt -}Jue;NOS{{Ij2hi4OD{L%jYLl;;~?|W9uEx%3GY>Q!c);MTI)rzmmVzsP#ZEs5niVcKaCJz+5QC_WxE -ZV?vu-yDz8zpQPhsw=n7ETfs*y+B5?D%O1LWrn-+CpRJi+l0$E34y9f~<G%xRWpJy>{HokMK4fe`s~w -$wKwc{oa%f?CtvNrEGYc?ml{D$3t&qcT_9XrH!ey2wq58-X*Mf(>1NOI~E8Rjj<|QReKB@n{uaanhZl -><-dD>tZWydCe2wc{ktc=<;+S=4|O`FY>lVxraHt}DW64M6M-SrbzlXVw!Gs_5%zv3c&0Vyyf8ft1#y -CL)EAM7oi@(AI%M{pTw5p1JZL*lLz>uZtH#DC$L4zeEXs=PqRamllV~?>lF!<^q))Qf0^DfaodpiTZX -Q5*n#)^loE>&V*_8r041_#Xwv=FbRyc?4mheZ$iXjFPWVSOVk&aj8+ld?7<!v3w)!MlQ-CEuwDw0EMH -s^lTQg*n@qJf_u#VDar#tENa@1A+0aRup2$z77lytT&jy1auj_ce@VpZshne-irbm{#VU2eaS*U5M$| -X{Z^>i1H^P=#J@7-kG2Q66`|LK(&UfR=$-#2{qjV2k&!mH+|iOY)xrfBU*8`oqe*S(NFichW9q;m!{3 -2ZYKYMJ%CMF5IQ;d4k>aBu=lTiu`6$(eks&z$Ut%4utxr!s1{JR29`SW@jgY|@8R3%+>Im*`K}+Hid~ -sF2&?x<zCiEZQp0W}qP1%9;c4gS(+??oO|R~zUOP$kPd^)ork_9P?`FEbk#)zhWkWOTbf}+M+T(*42R -!Pqhk6TQAOVh#UVGPbXpf;6nWn8(m<Tyocwo)~97d~pe(-tJR~IaHY>97ii&y9@uzGdQ!O7?JuPTr0K -dTzLJ>{e94Hr9s;w>%JP+Z72_2_hGzCJ^6taPz{_@c(`$H!IUBltj5-TJyLR#(>+V0EZ2m~`Cv9pn8+ -SceZAPVflriVu6}U<PGkcz*Hq!RO2)O3+cuHmufK^@ox_9BmjE2j=NlnS4V*?CKi+is@hG(Eu;zOy77 -L2&i~`dku|HZu>DUDC!M}P57v|k+fQlOM^YC)W9Hz5epEtsiYrkI;uH7v@FuR9#9vnYnf%VJV}@0V9) -XV%tT7e{tbMfJRu$&RE=~olG;&@2{-<0RZvP6aMbXqLX{=ewUE^`S>m2POoA|#{yL#meX+{w^nf_8Zu -i90HVZssI>0MgQ@VjGm$yVk4-RsAxx|vPp2mHZ9YJb(@lxZhkSQ)5`b62Mbj0e~)GEEoscS=gdq}9X$ -}7uIsT)kwvPsh-dYp=#w#_3W8j<gNa7L6}i4v$QJWX5`VT6!!qd0RB9Y%)PZFO`r5U)X2=&M?xh6)4m -upKWW34U>-cmKVjML}D?>a73~F9JhppNyb+@R*foTsM6cA18b7v#l^IhuV5MU}(*Um#6r^e6NgN_IfX -$eAIv0|L?)eYM=g&1`1<?)~oQMQ%Fa<8$$I$6E8FM9#TNre)Fh{T2@>XfT(w^{id&|H}1<IWt%FUB(~ -HiU+SF*zcS~RkA-+%Nu8^tHRvQ={x_wghQJxjsei?rZ=2)bmAS95sGOLy2W?g~*BX$PMl7nBPCc&mUC -R?x0d=jf%xG%+=pTAf+YOX%k<E%u;~tJ^HCg5LY6r5OBi#~8z4sayaca8YIX}Py+q0ycseJuJUOF6%i -^Lgje|Sz!RJ)?=WAv)E7m^BYbLHMGO16V9*PYho_i^S>p#1Y1!6gRE;I>v)rVHHG+Ka5t;BxOl;w=|c -^$dgYht>h97zjVT8FQC=00`*`{4NizGEa_wIC=i`X#?z@c&uoJ_*13~)Fn1C%|#LtS4|pu<<*p)Iy^h -DQNcWPa`ud$=(B$atVIgFn@Fc@s|#F}?{P=fUL~@ky_WlFyRNpFX*W~-zrTZ%8mjI&iZ9IO^t(B$Y9` -jcFT6>w_3kcf0D5SD8U6mZc&+F{Qa3<VGKHK*Z(ft@nS*gghpQL8%p<+`EgH5x3mD27%&%@<_i-Q6qq -Z?NP7ss4xy3irIj`*>b~DXAe@r<!H|`!L>RZfbID5a|v`;f=PY2vQ)tUZpt<kWPHoi+ZIHcQF?H$c`& -~8+l^jcYcD8;7KlhRJVllEb<cIcfAQI4(A<`55b9=cH1Hm%-oC2^!6M|UCgJK2G*;E~S;micY;bhnmv -P_#vsCbZHT!yAtGM{Z+L-;Ti~)ih1L6@9ujX4x5rnJ;5pd`DTs^Gv$O9<jepGYMYr*J!T0<y-GC*=X@ -xkyRGvTuptq+d3tf0lnKEWC7hBnmYZv_u}6#t5-02sy^zycsY9+zoN+#wejNPS6U35J%oXY6W>(U?B% -rPM^&$t34t%7tLzivXi4d$u(*-n0A&Ui`kY>M+}oUx%}jU?@_k&wzu)Z7%$qI1Uey#F>pGqDyxG~a)J -l`UbH77%fH|;5woP<H_!qcw9sPQ`UQJn&P%$$BXzjRhr;Aj^-%%PcLSgAsLmS-*b{>Z0T2$?ks>c&*t -aXJ^WXc~y7w+kAZMED0j%RciS5KGSu0P&&3HnZv=fIlB?=xZPI+gCvG)Htt^etY1rjZ_qTbfnk2f9j< -yxd!yg5OfwJ<x)$F{U^7WxcL=RZ$-m(uUXGFh9LkDRWhVn<ed`_k1gTVh_4&tak8xNfTNRd~gTA1YWD -~idOmh)s7JEQ7)CHhYEG_QGs6N!A8FO5kgQ$7}2=p9LgnzJ~D9qfm}U0c3tu%ptsjDSE(8)CwbwgJmp -gafGci?;vA2_rrU%MZ>$XKY!(ZOr^39TbxvYgR2820cKM+-xjr=M=b;%tJG!_yK08r6uQgrmGc5jbft -HE3dDK3B<(CM4MB*4WQ=~J-ur%0m$FR4<XZXWoD7vmX1>$#i^v%iXS<~zDARG!!xNAQfTnt01Hd3!zZ -|;d7F@bkkQ%_+AA(J}cq&swICBZW?oUOX1e=%}PVeDnrrr13#r6$!1iRs^kjIUzx7zXa?`9PeO$rKl# -j`0#%I*NjtC;-e-RhJ;UAago2c!>tGE|zKno0gbKzCD>T%#X2)p84A3@pJoR;}^+V6w~Rd<Z<%==&aL -}m~D?3PGd!Ozjl+ZX;2kq@;5so_njr83TT54HO=gyV?d`erP+A^5+N|Bv^hp|>w`yYLAH!qDRdIcT5~ -S|j6yWn9lrW>#+MLu>&5=%1|n}5&8}SggUUb%9iDhcHKBjn=flpnZ#U4t;Ov`FhTc<FyN$`ax|_e7`O -&Sl;jqEb>3Y-^m*9X_XcX0*9NLKJvn3%~u-B%wl7-zJ>9Qg7l<q`ZV4O2o_#<7e&(viFjO$rC!?6@m* -=R_cy7i&Kc89!mWz|Q+Z=F&ooEn0*e=A?tT_tIt-4l<qVl`v${tNNh5U+gZ#GEoO@m>((EX@hoK?FBF -wvmaZ2!IldL>|fc7^;qOSYey3=-NPAVRoy6l_Y7i&oeMwYj&LM9=1%jIHw(9%BIO@UY^uH$l2X6*Vnj -qY@G<r)bWHY-c4>IyL>>CLX5O`MrX|(piw)2dVJ0*I{?TwzC6E;(SFYg94qXfUCTurcaD%9&Q&`Rh27 -#~Cc?=Uhp0{Q=7N*-H+M?V{vf<T9th%31sRe~<J{glaZljwQh2#~HGJ^k3Rtq5;Q77>d}Z<h_veB7A0 -_0h9z6W?QAd<vd#Iy>KuDRl8yysNrYYTBMv8vN@%$l%805w+aIyHlBS7DdRD}cfzh8X5IdAD(_{XOw7 -sn?T@QjzBA3yOdy%nMFzZeb=9$JgzuCcX(8(qgVQS7c@{s=@sN3EijQ76Bl2iA&uI43xJpD1MfNQ_(R -Q6QP51Kr9=&~D?=PHjBg)`qiq>(}*Kpv7hqza1!Ivu2}F+EYUe>a;WL>C4;}AXGi?ew3`Zx}u#&_y-C -qSkR~RuBY#%>RScl3O-|mx~I!OIsWSTH%^gcHseETr73h?gZ5hJw-`%Ofo0_wkd{C!lJbiFj*rw185; -0q&q_UU80r0!1-lA(y_s6eU^s}uSZ}duV#?9M!OvBZ)9T01@b9(EmH<qpg*QjAnz;xMJ1Ch<xna7~Wn -7mlbs3g}eRr#vst<H(Y2A|(9oSEJecB;vzGmFvacz_G&nn7DKl8IfH*q;DL3B^u)j*-u2Ym%aAq|+Ku -28tMn#OlJK8w3>;L+q696CB7C}-{{va%`iIl16x&YifSfX<T`C}J`qI*8f_t$4uM(G7*X8ZK^EQ97EE -N}4GKiC^N`YO$;+UlqUX<E>E`K|cKJfF}N9yq}(T>V=xN0Y)d3Ht;{Hh!dc3vO7Cjkf(!n;=3lOPSrN -18FCu@K_wb$+Vo*|v}o;oq9&UoZQ+I<tM8$fbY0X)Ddrhv4MTzT@fh{fc&uXUtgQC_KTt~p1QY-O00; -maO7>QTc)F+@0RR9|0{{RV0001RX>c!Jc4cm4Z*nhbWNu+EUtei%X>?y-E^v8uk-<)cFc60CJVmo7O* -Wp4HxIgc*o!Y<%%qe7M#_|wveCD<p%mI(<TUgBW!lVFThoh&L8?wR2$ghFP(K*!1i%IDNQME5dOoF$# -hBg|!hh$tkC#`f=-palk1I-BzDP~g$y7KPVz*CEh8_Maq13WO9ctC0>Y(&jq<#B4w8&t(6cUposX>{( -Bu1NNHxs#5p{-E)M}!)AtEc3b$&HUsV6m4&0Q2MhMf0P-cbG}pJP9;%<Jy#u&Js6kaKCKXufs}iaEz; -7!8~0O7X^US8bCaY&w1b>6LC0hFb7v_|Bo*^VjP6TZc~zzRZ5PpwdCo}WUnTIASZS~PwZ~C5`!t5nYf -E6x3^18PE&(<k~#FzSMdi>O9KQH00008031s8R%I~uGa&;204@yx02u%P0B~t=FJE?LZe(wAFKJ|MVJ -~BEWMyM6aCz-l&2Q5%6u;-MFzq3UmPH*%94ZwF*bV~;Bw*suPL-Ryv__5-*^Zzf{&$`~+N5c^u?w0ea -)=xIeg58iKe>ghN|I)k1j5R?lA3_XsvHuMgIg)5E8q!f{Ca));q{f2l?=Rs5zEx>OF~c>n|fO_vECW| -($pMneXKRB1m!`nYy>lk%e>NRiQZ?ZiE)%Q;}C`OMKhT^heh)Omqk+)6EN?W7q?*?1R1AFk+;Tg<h-Z -$Bc28U!6%2prx7XO1?ECEof4&GLcoNs><9V`abcMbV{-n=1vy`BHK>Fzp>L<wnt52^70I(!sXaE2q)b -7JP88k<)zl_?$el9TP?2+k%3}2E_hJ;LMI}qBBWF5}gRVbOX&3jQ7toCqWHlNkWYWs}ZJ)GJixa{@xS -uU5uBZp7_<Zlh#iIAPQ3=B#P<+nEptv@=7MX++gr@w;!Y6k<^#(f*B;>~u@pO;qa%H8Kf6;FVDHt|CL -S9vT5LrUTW^iCi*jnIBK3b%E?PsY$Vc+z}I#o4i+5^6m))=Y@!w8vP3%hQesY9ne8h125zqma-9<rH+ -M<O}!j){X~;NFER(2?qxya%XBU1{tBMmgV-MxZQH8wA%H#SP6k(HkHFejqEN)I&nJBmFya?DV>7xY?b -zW)=Hscy+Shz;gRwnHcostfaKALFAER{>Z-LxL*-t{WwnR^K3>gf}veAe9l}O`Ix+`Fr4p9Z^+FV(*0 -F0simi+G)%vtWaM^Za&`#FsnO~B?kdE6o@l)#R%w7BF5y0c@Dc+AF+jafm>?p{#qocNc-j=v{1b|J2o -F4b?xX(Tqh~+*pS1*9ew9q)(Az6!;;*}D_sCCsjVe9WPeAh%s_y7e)$qj{@OX_)B)5^}fbI?VS`?Mj7 -~}o7tf^)z%uH_yRfG}+RA!rH(TL1kv~4xLI@)B)q~Y@Sx%X{HdvF9TVHUDn&@kC=x=YT?-Mr&;_gCQ* -DLKm9i|_tXoaC^UMxA9jJHC1)L*mZzfw(8)R$N)szuSV%y4CB8NL!d$w@OYV4*md8O9KQH00008031s -8Rz;@=4!{5a06_r&02%-Q0B~t=FJE?LZe(wAFKJ|MVJ~BEZE#_9E^v8W&an!@Knw=py-$(NDk|b69fY -C|U0l>j9L_eCgS+I&#i4KSwOT}P%TNCA(h7T6)+`9t2Ns1{)_$@E>%UODVCgZ2C3SPSkY&oU23t6DdD ->M~?#vxs0a0ZNi!Izc#aLvJo}fO30IA2{d(*L-pl@2d-Rsbu4}=jh-E9z){NtrV|2;AugJ8&G(cd}Lj -!gLJ85=RpTKVA6BPliq5te*X?T;m_SE~&)j1h<xo@!mcKbjDPm1}mB^w|qgO9KQH00008031s8R{l5| -z~Ku30G2WU02lxO0B~t=FJE?LZe(wAFKJ|MVJ~BEa%C=XdDR-*ZreEa-Cx1UJjg<A!-*5m)@TN3lXR! -EX*y`rVz91Z&@yFfB1>9P%4LiB_dSQCB$ASR=}s421F<8DJog(9>8J6A3`np^;xr?{GNMbG(T;jv1e| -$U@svk_7cZGUA!QvOA!JWU5UmO@AEO|SdgNV_!7mNvltB<>DUDW)m)MGdxfe$n4WdqGejlWCLt$XE2q -FME_d?1!IVaCMa~jeG3+GA7{NNFW7S3bT?>n8jB5b~lGd@olyh_;sKqNuPy3X`-J{+E~&-n;`KIgtaW -cWQko;hx(BjLZfym@(*rg7T+C}D{QchVv7IXXHbuPA4PJ$g*=MEp1<Gz`VMK8s)lvY)b$W^754G+u;k -!*Qj6kN}R3j_Xyh3?#l1vxe-d#PhIb5olo<q@V{OOhEFl93D3;$~d9GZ4_sO(=6bA0Jxh`M)x!fmKVT -S5`)<H!Ai+8;J{=208oM5Ji-T0Fz6M4NWe+X_eFaFYG#jnVb9jg#DZK3Xka$#tpG-XRw9<nC$=SZy<~ -!h=aT-<_$vvx2b0mPdr&Uwdg~OHxUQHM_&D>N4CN{{gp}!vBf4Sbx@snVQVI@5KG86j2G(^xMt4#C5D -{-pQ|e_bMfNmkj>Md@EKehHub2w>oO@}IWP%-@r9C2_#e?8&5y#;~Ut9CGZk#TW#$M_60||sr<?qZ@= -#o5oLV~(nga4E<ZXn<T;RxVy#eAm#kb{hHaUpmBVk~t&KKn8mp8o!)GXT%pP?+p01qz+drRRq%T4n35 -c$mm2GZl375aP_@8&m@e<ZPGxOva;184B-f8gix+a+~JNKn!rvc6MOy5s+;V;!KD^6G6ldYPu(9r#Pr -DBn-$QCubw~AWFS8^X}#tB?<zCMabb0L@mew6Bj@%x_%@Wi%6P>5SaNo&O`9_D10IdMre|R7*l{uDF> -oVhm-fW*Okq30SO6^iYicvVGNbsVEG6HB`#Vwi}DRiA&y9Dd*oPSw~Ta_M;b8@tycFyZP7V#9Mk81Bp -)R0VQ|NQFYs;PRHP(IBK80-cMmM!>eweL{5N>58MaHu)yN96C*)6x;LD$cW+aJuAPD<XnRd#ORM`Q#- -lN;X3xJwB@0}iTUS5mu8)s&+W=LEZgcg#tmo!?6p~@m`^ODwN*#kN5?5`4mX*!&hk+OvmjfFHb=w@L} -mDi3vyRs|v742=4j$Q{T&-65+DQA<zE3k1(f7d<o9<v=#+Mq8`mCP3+Hn2!!eVr&U?FCEcP!3@gauY` -kC5n%evK*RX#Q3JJq1zLP&Gv^%!6(KWWjI?c5WcVE_XqsG5Z_m~`29|dzY^a!AKu!=+Nvd0C1`k2E|u -0yH$tK)NrTlo>t}I4WPT=<TI$PmDVyby&2l@tlF_=`HCRAt#Kp%l<{!?bOm+gQOsR?Z(;dW@3TmKOX; --t*`W*b2CR`$@%{Bec#-suHL4(q~06&eUaX}+N^akpE=^CMMCf;rZmFDXN>Y_Z`!}PDe7jsAckWazzL -FPW*VKLY32J>xATu)W{gdHLMTEuUd%E?2Jtw|7uYz0<P$<GYvj*5nDRTEVCSwKUzO<<{3LDdU5V~YS$ -dKITnRpNs`k+gIXR6H2;FW3r;D8T`kc*TU;c2uR6S^w9_Uq2<VTbjprTj`c0o=i?9fv{)ZN#UAueg7x -%2)7%hOHojq0_}yNI<ARINuuvyDwRY1<6>+lZjqYBt~R4-h9E%SN?3}L9b$=m&lU*g;zmVA=tg1iZ`i -loyuJW;P$fFpvjnjhxll=fY;F`RDm>yfJdq2>+{vhI>mNp`4sxtEN0sWlWPXo(MQ|G2t4Tq^+?iXtPc -;R$rH?1Wp*JzoKg@>B#&BYXf!e;<KtTHBc;>nYw521{5bW$q5<l@>EvI3$3s6{MH`)bk{o@{yf7W*Sk -62<<xv1Qx>f?N{VwpyLFtef|Fl)k*!gOvOx6TA=Cy1;-XG6fiDL`C1P{E7;E*-Zaf(q_yaT7m_l+imw -QE2b+oz*VT_kM@T^cl#r+Hd}!$@TqzDOXE=@m;&SEWZbLY1g-`VOl2Cqe|QuReDw9a%(H#;BYe>E`Bm -vVMFpli13AGd;Q~@G#i9h033TFxtKGanKQm#m~{?DKb=i%12Cx<^cbz1<3=ylnsO%PP+<K%W$aEXP4} -bi%pYO$tBs!4D6X08Hk$g9re7F1%fq2WjfVbWV#FOUDfiViMZ-JH`Ph2*7Y&tRTUam}oJcD;)rv;caZ -w=l+kZgpx@&#=3yqp0(g7wjd>oI#vd=3~yf_zw&-a%EO!oy0)pV60hGYMED`{qkucg<5G{1>7|1i?VO -{9&#nzV*6rCLu&fZ0VAkxI2v@rR}<eVWxvwtz#$oYBZDdm~+Ym7eB`u9)~8ESYRf=b7LCn^vq=UTt>u -Yn9&BCc);A+F{CQX;zx9HfUAl`m5&sh5{-2LExfo{UD7$D^^<#(R#1Hn6EYa%Po^kQH)QW-#)#(esk% -}EPtuFsj$7TMRM`(=Jx9M+h1#Fvh=C7ZP8RbiwxJ`+L{Ji4xpT0V-!B_uMv2$%c*a@wYF_*=R%%t6ui -5FDlEUuzM;NCrep0KXj|*RJ}9ah1<OCE$KanV7Il>5=WrelqyMi^{kxj#o3tEn*YXYxmm>!$`A}Kd9j -0cYENUzYV&5Y1Kx(w;Qk?-6n@(zk+=jzD!|CKPn|NEs&f-vyaxVz9av|3s%Oyq#s?=FOyHnE}MQ87>v -p6PU9IfhwiUz8qc~x<MAC<@W6&`sotWmgYhkp};GLt+jf_{-!K#=v=t_j4gW|!iuj#1mEm{%O089dfI -W_w6>w^a3vZJ-nOlN<K4Gi8?tyNb>Ovvw^59Ac1r=zoi@nv6@^f^8wF)1XN0X@EYRcFhi%dL<fM96MW -GQ}uQw(*$^m<%_*+X8WMFV28iGr6I;02$3)QN?B1%ep5z^fqxY&LUr*1BAFlO(b6%TUgxc-xs;k38-R -^;DC|`mu&w)NYNn=FJ1Es{+@`V95)mzh7OS*t4h{BaT3(II;ut`2>ue1qhEXcV%=qbep0W*1y32S2Ik ->n8k}XGbahzXn_OUV-R}><db!gbo2Pj?l=;-J@>jPYQ&89r$FD~Aws{qvVpz_53p#J!H`{8tq_nth)! -R1$j;wp~3`Xz|PqM*3?RSt+rah^epC3tpU6~eL(2JB`bEP2%{VZ8YzbE~R_VU61!QUvNWe!x@If{LjI -1h=i#(+hHPHWrpv?=^|baRd1?$0M3<2@v931q3#s|8!heY`hI9;Qm?83qpXVsWkx-eF!xk-u2q!I9Yc -@2n_{LvAG#F6i^26l7y34g(Fx+aa!A*cMG~fVV|(Y-&j`avo4+T4uWol?mlZr)!NFm#gNWGz=e41PA7 -hpbv-*5)?^mqSj<{r5Rs5HqR<I>yBDjC<nG0&5|SaHt?X!o*SS)F@l@_jL+7O^RF~{g2BcaZt={cb;? -^*HWd&Y?ql)0tn`9Y`oi$YmtBBy5rOehN9x213Mpgv{-(KH{n_hvJnW3{M9mgJQ2*T>kjwq}pYP0FV4 -=tTAuGBM}rDT<?E?G;lR7+dxh8PyokdBp*i<AI~0273tNAgG*0`?kqrP-R|AvTh&W)7+zj1*r-r&>>K -T$iOOJy&IG?f%@kaZirtAr4Jv1umsPGr3DS@gxjjpEhVLEy{WJO=Go;m)w*U7cWmfg>z3G<Kk0udr2C -yb(YG@!b$VuCDbI<Tg?UxS(Lp^zo4aT0&-L0v{rEx60_UNDANH=5~#_#e2<;5&7)rIShpYbOKCcqg`? -(kap!yBh;yp0oMcG8>B=TI?`Ce>8eIzc+dIzUcB={&%Ax)j!NM%d3<p0fHWb2Z4hMULg7)h5!^N97Xj -Ntzd$3<ieh+qNnPpp?db_i>cz7)m{MAlf0YlgQb}pTN&o1qlzE$(-{{T=+0|XQR000O897^_90XEZ^9 -wh((SFHd58~^|SaA|NaUv_0~WN&gWX=H9;FKJ|MVPs)+VJ>iam3>RkB{`1WzJ5glUX%y$j6-i}051&N -@Dm;{8UybN)FayIX;(F>%Jwt{{ok#)I`_*wC%YC-AR&mlU&JBBphyL&_-CJf_dh=W^6CEkhxKW<_P>A -q>3`X;pNIY74}bdf`}O1c*?wK~Q~%SaUw``P55N4&&+|w7>uJB*ci;W+!~a=7|MK~#AAk7a)4%%ky-R -;{{mu3LcfX9EKmYO9UpDEVzWcQQegE%&Uh5ye|JzUh{MCK_UH=%$_4*e|{1-${AXg?E$cxGMA=it@HG --U&oIx&3t{`_N50EF5*CCrHvV}ulOg{Lojpu8!oBjo5x1H%}9(wjn&-i_o-}n2_2VWnzb+^k*cNO%-b -dTRh`F+Iiqx?SM_o)iKfo?+Ypbw!>(DnL<ue%7n;=VmGy&w79L+Ata8JRxcbip%$=N5S$0qs_<f8#p$ -{WaaYGrzkfRkNO7g4-?2`EoCf-EF;Pz%XD=H0Xi`y{GK2PV@bLupi}F^XrJsuSV0d`~A>w5|4-a_$?; -V=IeUF->uRM=={`f0UWwFriXgyfy5soo)%H(cpkay5yjW^yB+#%nbhRA0{Ub%%=dc4_Oww3j=t@d9=s -#uEs1>xy0ynGd@q4z+DkkGm7lRqcwNnp#inBuFbjP-o(4?YZG5Q!RKbPFHp_)GK|b_Lv|{z2*Z&p8Nb -NO0R~j^L=b_x>MORPj=tbg(;O_4A`@4t2^fSx5okCxr-%LN#zgsW#0J_{a=0i`)>*t^C_x7Xdl5<6<W -8($jYV**IpZfkhc>8~MUItw7XCMR_c**~1dEmpq`pYrc|GbydfA~va4PbAc;_E(O9X|^JHva)ebU#67 -6BVFDA+QPG7VSv&F8r+B#T|NMlWcf&b{lmdVPNRM#K5icKGM4`Ct~#wtN%vc3G&V|kmDK1^+Vo&{_cP -N^!dlnKmPuQU;p&S^~FKC{&BPXx1ZkL!qau!_1q2IjoeM#t=#R@_4~eWgin|6>!17jFWtc1$lb)<%vU -ZvT6whbsPSm$?%?j^?&9uER}L3<9e0`E5a?1NayN08`3;4;%x`GiWqt$m8<^j~{08PX+|-TF{FX0W$D -^LR%x`3VBl8=X-^l#NN|KDsZ)AQmvyhpE!gEx3jtc8!;b)<+PL|AF*2%(iR2Xw%%!TKu@EjGMqrwapX -0Y-zSb2^r&r#($sys)P=cw`=Ri2~Db5!{mtj68W-ND_--Njvg1{*(vjpw)V{5GE7#x|$%{5GE7#`D{l --^Tnlp5Mmv+jxE(&u`=TZ9Kom^J_f6#`9}DzsB=xJio^CYdpWk`fRMv#{3%dYs{}PzsCF;^V^x<&ir= -fw==(;`R&YaXMQ{L+nL|a{C4KIGryhr?aXgyemnC!Sf2;;JDA_W`aD>l2kY}-eIBgOgY|i^J`a9=2S2 -}q`5pZH4(508^E-KdC-Xb``JK$~WCrIXbG_JZEWYo}GkEh1-ptWWb5yS9Qt_kfXv&JCIVvu2H*z=e-) -8O>?pE$L?iydYb9Zoea(D5im|ynmig(;)em(Q+nO~o{o4H%K%l!JrqsF7muOB?h{IXwH*sm*ba+iM`S -vZM>lUO*3g_Bq~iG`C`IEjUmSU9P2mz5#0a8l<kD??)8B<43UznS^X%x`9XGxM97-^~1G<~K9HnfcAE -44IWbGryUYAv3@1F&6e1OJRQ5fh>jjWe2j9$X({QFu#TQEv)>7=a(JG!VY9%2ePmOS=fOr>_C>mR~~$ -2HuYujmD$vn!B=KeU)a=_$&#F`Ig>SKvLq)<a<U{RYtCfNnauBGekb!gncvC$PUd$pzl-@@%<p1;7xT -NA-^Khc=65l_i}_v5?`s|Wi0NviwXAZ8S2@J19O6|D@hXRSHD<nY;cn$0Hy$+}?c5#Qo!njAr8%l>y( -?Sq%GSHG^{$DY?#kA?CgwLWzlomi%0{(j+BvCgR4W_R%0{)aQLT?r{rXZ2gN<s<EcQ%`NG+@zYzZre( -v>Y?WlLB&l&%~~R}Q5sTf)kguoeN?xjVQ!xx2VaZa}TfZ)JWf^ZN>=zdT2;Q2MKG;x0YE^$DfFnxk5| -+xW-)EL46LDnARAp9K!3YomR_+F0v2(ySb5R*p0)N1Bx*&B~Ex<w&z~q**!AtQ=`p<LNe@ZsX~;$s95 -J9BEdLG;8PS?mXQbX;zLjD@U4@BhAW@X5~n;c2;kWG%H7%l_Sl{k!IycvvQ<a2lLC3X5~n;4(4|-zk~ -T5%<o`+2lKmVJKEJNOP~IF_i4e}{l&lMU}g86^u6?h^rQ5X^t1E@A8$tQev`gQze|5ee@cHz|K@%W{) -6xzg#RG?2jM>m|3UZ<!haC{gYX}O{~-Ja;XerfLHG~Ce-!?s@E?W$DEvp^KMMa*_>aPW6#k>|ABF!Y{ -72zG3ja~~kHUWv{*&;Zg#RS`C*eN{|4H~y!haI}lklH}|0Mh;;XeugN%&8~e-{3;@SlbMEc|ETKMVg^ -_|L+B7XGvFpN0P{{Ab}m3;$X8&%%EZ{)_Nmg#RM^7vaAM|3&yO!haF|>&5oDI_Zo3uR;1z`swS<H}~? -Ts4sY`;*t5NG9Ojuqsn|#nU5;-QDr`w%tw>?Xfhv7=A+4cG?|Yk^U;L=Cj2+yzX|_M_;1306aJg<--L -e?{!REd;opRR6aG#3H{suee-r-sRfWH<@wI;K{`}g%@Yic^@T+kSsCK_dze>M--8WgEOx7op^~q#?GF -hKY)+dwo$z**pS)WYSCzJKbWPLJOpG?*#ll94DeKJ{}Ox7op^~q#?GFhKY)+dwo$z**pS)WYSCzJKbW -PLJOpG?*#ll94DeKJ{}Ox7op^~q#?GFhKY)+dwo$z**pS)WYSCzJKbWPLJOpG?*#ll94DeKJ{}Ox7oR -txqL?)#vr#GLBmwf>VN5LQq0f0&Pe<gsitM`irW+X!;9NLf1bTN|;}B{}7g5;}*ial;D)$m7wyNDi7X -ZeF#|zMUe6~>qBTtFeP*)3?)p3zVsKj5SHr4Qh7+oxe2OcE9##p(xph(RDvR1GIPBO(q5hZ!s{=B{vs -+NDIx1MiV~_4nqI^77hMTM|77Yfmi|KJ(NrEy<zWiUObJ~H3d|IkEhXHn4)aN<`&!rMB_?NHUI{@7Q3 -**2SqVi6RS8WAri8A9p@gY~r387zrn{7&@^C5-r}A(r52x~QDi5dfa4HX{@^C5-r}A(r52x~QDi5df@ -G1|l^6+AUr))c2x9r<&f>VN5f*6Ba_HH&IDIqJND4{B$DZ!M`l`xbrm9Uf`GQFe9BdR>2$|I^wqsk*D -ezNbR7fpK6q!&$Maqpr?i(a(oMT=gvd~?yH1f98}Ggoxxiq2fonJYSTMQ5()%oUxvqBEz<+Fey1U4PM -?%u82^b(L6GiFK7&&q^qI7nN9V`X{CYl~`Aa^{IcN66-3laS1SWY40KS;~x6#t4n(i)pd1g@1gQgm-b -ed_8zK1k4yX2(zsVodgrnUg9)o$Jo}sAl;D*Rln|AWl#rEBlu(t>lweBeN*GF*N?1y`h2T^kPUYcL9! -}-qR31*{;Zz<@<>6EwPUYcL9!}-qR31*{;Zz<@<>6HxUghCc9$w|)RUTgD;Z+`9<>6HxUghCc9$w|)R -UTgD;Z+`9<q=dKLFExt9zo?1R31U)5mX*Q<q=dKLFExt9zo?1R31U)5mX*Q<q=gLQRNX;9#Q4->}ox` -#((~9{501efBO96uRn}G*e}0)RY~*xfBXA?{a^m$zt#Ff)RXzYT*XH9bNN)HU4^QiCMptdt}sJ2s1(; -;4rI^d05X>;T_|O}q$0C`T$$WJ=EB0OgUppq*94hMrmn-yHuOYx!0i~f18&E-9dJv9uLEw!xE*ji#*L -CI=NPvGZmAMRiJ4ZzdEoYp+XJ^}+#a|+<MzPq8Mg;+E+BOtxIN>BqB&MHhkDj6NFoQ|4vaehU|@hKSa -+c@*+AyP>@Yx{OkN;!;afy?VC3qy7(wQu<5Tvy$%V;y8X^OX5LIMRMTklYyCX!ESX2q3N-U~`DNa1a2 -@;f=yaWkK&3M8TOUZZwZmAeYZK{)k@dVtNal@K8DW}iCouvvGxTQEd19xWJ8Mw357z1}^+!?sJQrTtT -=3+}%fV(j60^EFNg2R~!t}yNb+<cUR!%+&3Evzfh*uolHps|HD_UPK>Di>;20IUqK0$^o;IC#NT)>s_ -8;3|u%;UQ`KkThJo@wFRfr|~p2u+x|wgS@#i+u=|LXHwaUTN>Zez>YCH26>xQ!9pR7x%{Ysl?qsx0y+ -1f!xVHj1s%+HzGcTP2eUIElfg2<qV48y96Z3&FadBfzzKkp0Zxc&vZy9RHRY5GD8yt@!6|TDneP_nl2 -77r3v(%z{|j@ucrF*7oyE`2f?yXv^9#@XVtFsfdoga5(Yu=k`*Eg*9KnHG-g2S_Zh7kg79h*H8RwQ#8 -}8vLdG?e%JSESbl82|{*;DfHlstP%9-fkCPszhm^6V*jcuJl<B@a)@v!~?YDS7skJUk`Oo|1>B<k?g5 -@RU4zN*<n)XHUuF!Sw7Yc|0Xv&U%2S<k?g5@RU4zN*<n)XHUt)Q}XO7d3Z{mJtYrM$+M^A;VF6clsr5 -o&z_Qpr{vjF^6->AdrBT>2zWUG1HO-E-^b%D93T0R3-~^seIFmeWn?ZRxQu*DI60o391kbQvy<cD<oM -29!fN`#T%IFjE<c&Pz~y2t*8-VOTe!}@5czNhFdvxt01q!jzDUAF*jWg076Lm90nWlV2P_qkE0a6O9H -ZfcmC$I?g5hi=UNXYOwI^SDHjw!gn2B5R89ZU)zzVkZ0oFdSwGXiNdhXJCAIHSZ!`cV7_5s#Du(c1c_ -JOT^fVB^7?E|cRU~3;>?E{}E6m9_ILo)(G+Hf}}<CZrmTZCFg_Ie|{-pF2Wgx4F{>y7YwBYV9OUT<Wt -H^S?U?Da-?y^+1%2(LG?*BjyWMponqMUJe<5sDmHkt4j`$X;)Ren-~tSb)1QZm4}MjJp6gKMfJbjYU3 -gELPyIj2q5ytc;}MmX&W=aZC1kW5q2S-x3G+#KyO5xMgEe!AFklBgY0&H3kURIr3pqu>m)G)Ug3K9}5 -#3aPyHm5sr3bM?1pNj_hbhINFgN?TE9NqA_j*Ze!dA-0Xix_}`KJ?`XiyYeVe7-5GZW?#{S7aCgStfx -9zqtUIwY?hf4S#78*su`})t+;Vc(@E`{!N01YfGsuO>739Wb1GzJKfXucEQN~`9i98`#UR~paVENp(I -3ZX*mn>r4iM;MatUHm{orrZO^12hT?nGX9BG#SA>rTYF6M5Z<Sa%|?I}z(n<aH-v-HE*JM65fJ*PV!U -C-S-zvF=1(cOurE$m>qLft$}ci&%~#FGmqEN#vL$-oSk`ZiFh4LzRfdD{`n35voKERU$%_#Gy(;sFFB -TNeEREhbjr7O5#u@Ayi2msw9Lei9?lyP$hAwk`SsS4pkCDmBgV+La35BR7nU`5{D`Yp-SRVB_UKv9I7 -OQDv3jtgis}MsFDz>Bo0*)LY2g!N<yfTI8;dpRT76P386~jP$eN$NgS#qger+cm4r|waj23Isw56o5< -->4p-RGTV&dJzbPU^-_~_4s9jL@RP#?$Qv5ifzv59SL8t+5&0+S=iERzA5{C^&~N7sJ8B*~6`opD@Y< -|redWACoaZeq^IBIiPjK!&H3+4N?Z-aIFh55T-gf_a^_A+z<#_aPU4xXb&U51(dO5WW>&bg@x+6*fu* -_N1^q!A9j(S$%Lq>{WSt87IVEmCsqNIIOm^D_3g+nZlsj&P^+?4Hauc<Nfc3TQ+vf+c}2sYV0F7$g1% -UYr_s}<HKqjyvN4jTZ5a}c&D;qr?T<hW9uH|z+?bqx25$nJ&j$92DNYOL$uLBCJ8ny=#3Y2Y~EgtSJ$ -?Hgx9oo0|^IB?Oq_$Ee#8d@k(M?N$l!OK7utzqB59u^Teh3BUlUk>)=5SOvWww1(coBG&k9pJV2gIK3 -p2_EEu*`j9(HN_D_sAN(`@kj9>d$!Yvcu5*lk9kQt&QV~sUvtZ}?!&{*TZ#-Opr8f(y4V~sUvtg%~ea -LbJ~)}XP*hT5R9Hu%@jSR0HR_S<;3+}<bGvc?)T*4R869H`Fbu|qXGt7eC4_G>cvNU*bNcBp1&)$CBs -&Z^m=nmzC>p_-j_utNvsfYuIW>#S@Y%GO!gI^G&~Hjf=|_Bxx#4rS|X9y`oq=Pd*rz5AqoGa0w!lfOH -T`0i{qJ6=F_j-orl<=*%r4KiswJFsD$<Km70xEo6luavs+wV_s>6}fki*%9f8>N=a=j_|FsA|t%KIxB -LAMeb~oI~2LIB4dTV2CL?{4#2^xInL>>*I?BgP|d;0HlS>Sm2F_pbg;6Gh>NhY4Jg}4g~=7<&g2O)Uj -!@nVAUK@&B3aPAo?1tg9AD^c;z0@!NEE>po4?$;D8+*Z14sQ-e5f$FnEKP=mCBP>&bwg4AzqYe{k@dy -@4otOj=zL{9l9Z;DGuJQ6B`UgQHPs=97NU<a6=KS~a0nll5dmPbTZhgq}>^a-Zq=iIa`egi)G2^Ejpd -nmqFpZ`>zu8%`{YlNDk@AtoPEJsU2<&hW$z)Z|^FiN|<y1cMi;*W?YJi7B4ElQRdn<afFg?{p{6{KPx -m$r~jTQ#^T!Cl17(JjDx3-C~z$;bi#5SvCt!{NhQ&X3MoW23(N$s(fvP0*gNuu@DL@UK<vY6Bh4OF6> -k;-l<&Jsa)(jFTBlPJUe)!bS-`^7oN+-leS<`7Q4>a4Z0R@daZdLlEt%ww7TswI3{<HNvrVni0kGJ2T -bL4b3A{;S-9Dcy^%<DhsxvzvRvfgzS)nxks5XL>%kkZ2k*!y&f^0DH~X<S(wA;t1a2$>@~sMds^Ypc8 -IC&}$b3sUB6nfj1-LopzF{G5PN%uyw%n|mH&pZHOqjdj+Ps~A!#}y%5xL=r+`JQi!x6cSWdcX!=1ue) -ZtvY$CLQc_z9kg-W<^Hu|0HHgQsp}{Q%;=!$g1R%@f}XacbX3h^>kh`<NUGtPF@dx$xvjy*!>E+Tqof -=l9T3<`{E_P$yfYd5}ZDA9VPe2pKxZkk}}zWr*q<tN4kt3a-D(e47tw0btFm0AB*k+FRZ)oL6;0kd|W -0Z$%Vv6UV<d&A)s}k3H_Z?DVZ?wEDkR7qqh6_cn7bqyN}<qXYTOCy1ayb<M;gX6`QY@E5dI%Tc@rB&U -wN!?uw*E7U)9}{N-%Kxl&lprFhWgI*?oGLdQpNihS&*9N&Gnk_dR*f!(qmex&?KmJ`;`-3lEUVYNse- -#fjJqZfx4psvdNBG<q*$NKz{_$S%E*b~^T(2tAfn&evIb?0t*zOY^Anq=tVg{N!01K{w+bGJ-4;5W&p -HsH4;Nr%t}laxy<_@YLY>%%@+6Z-KocFXgN7oWS8FLvOgQ8s?#^BcT+Iz$n><@@&Y(%*H_&klKZ`5*| -~8#j36ci1T3tqJ|ujUgX_8t*hlNkJSZ2hj~#7d{dhMSrHp$Fn3ae1;CX{QkHRPGW@Tqg;nBiMI3Xq`T -SvaysLZbqdb!ZY6W^yyV)gq%NKXa<`JZcwTeuR+1Obd#>F|_TusOb}Q+NXQAD#<S(8brYF&o=??g%fM -Ge{mkNf3kL4_}tIGku)G#au{9=EW1Ack#mIHn%V_2};OX?Vw2YxAJSRVMLl3{t^mr{o1fnRDFmIr<*W ->_BhML(AZeko^I(Ay<?y8`e_LBk5b9|V5@eyMa=0r=%PT><!m;K%c_<at>E_=DgNz#j#F1pX-aBk)JT -AAw&!TDKzbN5LO~U+m0^z%L~d3-)J;f4Cy>OOeD%z%Nx2D*?aw11kZ))Jd!a{8A{f@NqqfYj+>`rBq_ -U?^@!QE__^Xi9fb7@JqGC%D^w>5-S70)Jv=k{8BKnGVn{q#De`?QZlhJ@XI>B;O{Ldnpg$+rD|do;Fo -o372ub;iB*7K?D>K{Uq$d2;4gx|0KcqX3+ww5e-#@PyA}Ku_@%01Rp6JhidBKX3jPZG;#aH+{8jK*;F -maMRp1xDeKp{3g1-TO6Z{SM#h+Pc>wLFz--i3jXWEwGzEZuh4EL4t4Q$pp*{pHct=X-}%^)`uoCdjx- -?$8NlhTf5z~2Rb2mUVjJMfF2zdG<sJh(dWcfsF*zYG2j{8A>eI`E6%xZpP~`Pk?hz&`~40Dh@ASp)bb -4qXHIhu|N;FMjwMz&`~40RAEP2k=k9KY@P={t5gNPpt|3Q}83sS`ufi3H%Z-tO@+`5z>W^kS>YK)&zb -ncv--&6)y|;wd7?1zt+4g;Mby;1^im|vVdR9UKa3c-OB=g`MByr+`VqWe*?e75$gtii67Su{I}r0fnQ -2!)(!kpL$k1tw4{h;;Y)|N_|<q@@$JWUKfd`Wzen6EJD~1H9Q4gccz^3-yNDleS!a=*w_7PN!hVA6Nj -hvwI@y%meSF-u6rtmzz!L9c7jw5==mT_)D?dt@#O{53%vY+~K0f9v`-dMjPZAG)`N*%x2m2fMlHV`LL -G=I2M}FzP-ko@GxAO7d^G0E}Bu_t3E;HEg+I<JQ7M>)~i_k0RP3Q)C7y1C5OI1d}eT&@p_)EJL{6`;l -%T+d`;yP8XQ*j;kTRdKQ?lud(fL?{(KsTXx&=t=FeF^<O^d|Cez~2Oa1O6uX8}K*5-+;df{s#Q=_2q% -DFOMep8}K*5-+<o)zX88~SJ;5x1it~l34Q~96Z{7JCio5bP4FA=o8UL#m%6Lbfxip>4*Xs4ci``WzXN -|4{2lna;P1fS1%C(rF8Dj}55YfxUkk?u@DIU1fPV=70sKSo58xkye*pgw`~&!h;2*$01^)zosc;(;_^ -05Xz&{251pX=bC-6_fKY@P={t5h3@K4~EPjQb0{7djJ;9p|L7VM#v?u}Es=ZAa)eB8K>d?o#Ts>zfB& -3X2Jc3Xu$L1(^D>)>aW-=8?qOD2FvmGo|vUP0&e2=xxTmEU*#zRT}X*(g~8yN}-w`8}#EB_Y5gBVf1k -`*(??R3l?w%gesjS6`jy^1SOL2!(IXl{pzgyPZt`&Ch=~(B(_p@6Uoaspb65FLUF*@}+IO$P9A+NWcq -&;D*qD<4fMic8F7IeBL>RkyD5a>C+|^7D!dNEMJnpiA2rJ`;dnG@!fi%2hgL?6X;p!1@tQP2D%BogRX -cc=u7DLq4U1n?gPK1vE~H)N$@A&Pl7)Ie-iu&_><sIz@G$v0{$fU6YyujpMgIM{tWzC@Mqx9f<FU)7W -^6bv*6Fbp9Oyg{vtR}9I;#BtAMX6zpvn{3SSj`Nyc!l;HwH>6?|3UtAej8d{yvOg|7;}Bqcdl;BSJz0 -l(xb=LY;u@HgOZg1-TO6Z{SMo8WK2-vs|j>9D-y`beqHyslX}?^&$ydyw4^phux6(6i9r*Qr8ppqtP; -=tJle^d<Bo{}Kd$0L~yd18_<LeF?xB1ZMzF$*eB{ID_B}z!?N*0M01#g#9dHKMU+<5&KzSKa1GU0{dC -SeiqozBKEVueipHxsH@qn;D`MzVm}M)XA%2ZU_T|#VfTSw>}P@fEMh+k>}L`CSztel*v|s{S;T%8*v} -&Nv%r29v7ZI@vxxmHu%AWjXMz1JVm}M)XA%2ZU_Xo4&jR~dvf$6aFLt#Q;OG68-8ay?&<E&K=(xVv;Q -~8c#10qO;Uadpzz!F&!v%J@RKZz+NBom=a-6M*T`jPyMeJ&UT`gii3+!hR`&nQ=i`dTs`&q<(mWFw0G -A|8sGr?)VX@b*$(?o6txtZWM;5Wf<z;A-zfTs(dj_Y^1e#iB@T)*S`QV&x)<kLky9rEcSpAI}j@C?Xj -h<pa*GekZozSynk&w!o}(esJxPr3fY^`~5aLOxUEGa;WT@|lp&6#1Nu-Q6akXVB$3r|QwFtdI31>g|@ -F3nV04<@c3_d@8F_sDzUvcFQ<XLSR+!)U)xr+adHbzfIQPckNXZJCD36Yn*4e`$r!nKgy7CYFc@RyeY -F#m<~B;RT=`A-SYL3Pi0o*I<S+*bunfqFy5_PA2_u-%P{Z8`@n|!tlcWTfzJGPhu=H-{kv+-E4_j)*T -KAW&bKraX6}}sqj#NKU-J92AF^AP1InFuD;02OzNXl>t>rJl-Nt!AyYE1kRO6EuwA&=~`_R2y$KyI)u -H$hXFV{JK>25ityt{+5bDrV7kZmpd4>$4$Zp|M!Vt7sd(1Cddyk<JTrgFD(T<CT7ES`4hz<may4kX+> -=|IJRrbnL_CGMNU;SQ+hyj)HZci3Rrt(*b)+PirTEE#y8u^S|}Y7@@QL)5=`oq_eVlKqYBq$|klq$>b -!(7f;fxItbxZ^99KkT<_q#C$}(6jH<WFd6rpF>(gvrQt`ix*T@kE@b~)Nz!Mo^zvJFD|ri>5Y9l?f&L -!QO!?Q6{j@TJctv=XAexAGewR4un~*UeZxt`R^}EFFdkBY*B6;gi;XVdr2H)p4S3PvOUKImP2kZ<4{f -kgApnriUs>%_(n{b|}s+?DFUgdq~Rl#|cQ$w$c$Ds1@3=bh<K<@EAKDs#_@EDNfx~t*lO|m*RVVwa<$ -GDK*uBGe`Az`5Cz>$?X{R@Y`kW|b~XlFp@<CLjCZP$S#c8dxZV%Ie2%fPv*Svo7w>w98408~pDd>_x< -6>i64&{Y}m4*Kfyviw5P#nmOt=|WboR-kSI;11Q2cOA=AlYzvO-HI|S++0(Uu9J)Ov?43yXk40HbS<m -~x0AoP{duA^ZQ(*X#`6Uj87LS~%YX!n=ffH@fCoojspGJmr-Uc!z^k^>J$6Y3UQzAy6^$+fuX2~C4Kn -a96XG*V9L{BbS~(^CeK5O|N)Pwcw7dpHsogod`)TDIcH}%eJ;T|Z@{p$$&QVq4+|ZjJZQt$GfprGt99 -?%(&!1NQ0+}k#>)G??Ox4{=uF58yd-$k-0l2;v9jF*+I$#)BI&h}eHyvmgFuhdA&84&lN5DU=Ozrz{{ -UFA26A}id4xF27S(FQqRq%o;_`_fb`WL}tKyMy!^Pq5Fdy>1AGvPO(U_fsk-+v)OgnzYLMU`+V$u~kF -*Q4|b7Y}F1DyxEfNNSNos?&Z<WTKGMy<5|Pqi}MnrNg=RyOngpO(+-;K9JY#<Y2h{Y~oT$GAlRX=x&m -dI+rE}Bv;SD@p4)G-A#xX5Ro98+GXWD16A%awI{FVY2`28-+(Aiq+8sXLD_nDI9dK_^->W7YLMZ>Jzt -}j0iddqF6iog9-Job$0jrkm<}9!)%4pJ?f50T)l0cEA59keO(+;>I&hwk7WE#OkEZi+D)FCIzp-KGIh -SLL9s&j=Lvs@X21FU)!#R^LML5HAZo04_srj4guuYg45EVuGvNNf7M4{Hxelu|R7!pl9C0%DgwH>Lxy -A@QU9MdPsSPuaMD&3QYv|C9F{P<YORK1!fn%J%Bz?t)@e9T}N=sGYkuyo)k_0;)5lJIWz<{1N0Hn9l> -15F2js){lov3R#$2LcB4QqbKg4x~G|FYZaA<$?FNYHnTbZg(c?R$1L}4Wwq@A(8cI<>v4ccPkak*SWb -5qSQXVOR?pt^~m-0x16qzqmuVBs9%9OM+rPDs+1eQzrK>i^kta7Y+_6D*|FTMRC;E_IJ=dPg`nghTi3 -rB7#R8&69bZ6ol#w|Tec-1A0+9b?HR$(Zsj{DC@{!c@tOPUmDz5kG-ea#8IZ?0FL18KF7FSY<U48=_U -kp|Zl!!>6EI+UsfA04dCm7Rue%kIAd`Ey@_`j-NtHePFSX2)^yaYn{<QMh58Pw7Q3nzRh7L>&{6=B!e -h_%T9S3r^I*{-e>6?Lsfh+?#o&nkS>8Qr+Uf^OodAFQzyb1V=ArXDYK?A#OGSDy}&v`$&uusb(!O=9k -mEuSw>+M#a+K+FG$ZLj&(9eK)uhU)yVo#f8;Pr~;Y2|At)^I6N(M@n?Kx%*9-!PfC6ur;epPS#FrHgE -@r!6{A&wy((@Y0~Cu2>6;Upwbdn{*&!KyUsoMb?_U>pYxKjWG|rzsBPDE!S67!CD@Af`g~kI^S2S+ta -eFzACKM0aTJ{*!QKhQwPrB2TxmcpkhF){9ffQPb)Wnm-!WWoEL1#suIzEDY%o9IG)cpz6P3>sD6~tv8 -Besd3no{EQ=F~d>2oD6He7auktMu9G>UL(){wXx3ptzehcvNv5P16qyfa7!H4%_@K>k#{@?uFfBoIR` -|rQ|Px|G+>ujs-cKyXa_&fOn9I<}!W@*5;0s=qC36(gBS4^DZbxA%PR;(+t$^`6kJ?Wnx5dZw${{v7< -0|XQR000O897^_992|gCAp-yaSqA_B9RL6TaA|NaUv_0~WN&gWX=H9;FKKRca$#;~WpgfYd3{vDZrd; -nz56SO6c}vOG2-qPG~H#`E&~P(y#;}z#7rVUmOM#bTVNkQQc@B-=;}jaiR9zsBk9>}mVK9hP=f#^od< -IOsXZRix)M6kA`CrW<|otRVNmL=AXnE3r9cne4lP@i(MPa@b{QS^MmyXOo?u5<d(-uUM+&ysTXd+s@X -}}w_a}sdv0awu&I{}75>U5wQ9?XFg!4lIRaF%gJfE1ab}y8iLw^tG0@Un9ICzBwpGh6e#>%7ALWKgq% -z&?Dhww93=9u3F-bGPmGtwfHU2m+1oum?ccCe-c|JF+?FIj#NND0qFuQ1D6402hakLViqZa7KKKg}}u -uF1YBVEz<i_*ilsn`H*{P|{y#J>Ka7P(dU&Qi*zxY>ByIaFVN81bv#tMX)9+*sz4GSqW~~pGXbiCz1q -|Yc7j`uVU}j8+jRrq~$d(0!w&Y(e-11m)tdQhQyRr7QlW5dJ#(RO^Yp;;7CAqorc5`9v|WJ1N>zyqNt -5$U(YhR>a0$LbtFBuL0nj+Q&hPK_NWS()|+rvf=n+~(!i}?UWYs8D!Kc?IajFj5o}RJO@kuTfcu(?y! -E-dB)5@qEjO@QO>ge&&Agrl@k1Npr5^BN*bmmy05pLaOhK-t+}BG+yhO#KE7A8PVBSQ%BSt<!TrW1|G -{<^gZ{Qy4qPU<<B$H8gi+->=wj__~ia7PtY@wY?2(wLG!dsYm`d^Nb#*Hsx=M!FwBRqRW7;O!2(iF|Y -(-R|={Q8OZp*};;Lv6Pk%EAk&bGm5~-Ly})+Zl52j8T_0{fZuKCpB{4w~Vlb1APV^;}|d+&!4h1j5KN -6_`0olkQpZ^*^t0f{TQu;MQlcIc#z{4sEU7$!h=r@C=*C@zJnK}c^Xs;J7U&#*h=A%Hdvfcv`k6FfTV -qB&?Q#-6Qq`K84YhY_au!sQ+a~Lb%L1(X(o>+-ou-w1$t|Wq2VgV%fwNP95cl5=~kqMKHIbucl3$+Z) -H0?N!?!Sit1g;O1$ItrlGy9p!tCPJKR^1`^TKq`I}G<vwu)a0|XQR000O897^_9HT)>U7XSbN6#xJLA -OHXWaA|NaUv_0~WN&gWX=H9;FK}UFYhh<)Uu0o)VJ>iai;pi$Eh^5;&x?;&uvJhu)-zG(;sO9rO9KQH -00008031s8Ruz=IrJS4q0Lvx=0384T0B~t=FJE?LZe(wAFKJ|MVJ~%bb2K(&VRT_GaCxk~>2n>|kth1 -ye+9dHW-L$JZq#yb-RmBAPt~oeh>m#kzD&;xN4Whwv{qUqB}<gN%$pY^cCO&QgZoZ`Bmiz$8DVXt!WP -9v3#BgvA>abCJHmg$9D?Tg<u4PLpU|Oj2lICebt*GYo;;a(^8DShe|>Gm+sj^AvGV0*?*A`;XU!X{ma -kdy;_{U%f4l6}msh|1*77wkzqITZzg@QGjW<@l{SPZ%TD|-SFD+lQ{5yZQ?A;ZsezffEm)9&j{qpJ;- -*{=o>Q{gK&YD+#P+Rt+?|kQ#x87K_Y|U@qbi`#VR=xSgTWgm6Un|~T^ZjN2`p%mxU;h5G|FL?-8>_$b -o$vhZ-~R2t<o|cN?7uC4bK$rDy8IVzFbhxrkAMB|arKAp2kvJ-|M|NwzxB3z<mW$M_Ty#W4Jtou`(fL -6zw^?|uPpod+b_TR^R^ehx9kW1wD5|bF8t}AF1+WbD^|N#zP;wHpZ)d4p750Vv!DIwJImbvz4h{%civ -jP?57L=c%kh#ZQoz^-RQgD`~I_k2kPIU`gf%M9jkv=)W56h---HnP5ryB{++6SXX@V#_3vE$yHNiw_4 -gVEXbuFL1%c*4pqUV8E(Dqlf#yS?84+ks1ez6r=0%{H5om4%njL}WN2vJ`8jaBW2sJ-K&5uy?Bh>r|H -9tblk5Ka?)cgoFKSIrq@CiTuA4w=QLGvSOQ@@A;O$aq1(u7zODw<H$ghUf+no!pS&5ua)Bhvhcw0=Zd -KO)VKSnEgpgdhLyyY7FMOKSLx`U^>oo>5<v)c6_oB}uJ3qrNPu)o0XKBsF<PeN|Fx
SYW*2?g`}p ->sK1od>>2fSNo_o%u9VdL8FiJU7SE`wCAEA;eM6egwrA8gCDrrySCZ=a`<A47{=O}#p1*4()${iqN%j -1FS5iHHe=Vt=zrT@G&)?rls^{<TBvor@MQdn9YiLDlXhmyiRcmNf&)BM-u~nL}Kl=_=+hA!|+p4w%Rc -#5X+7eW?C8%mkP}P>8nrcF(2@Orqma(cWW3^O-L|ev0^EuIcPPAoAG(Qr}k3{n$(fmj>KN8K4MDrujd -Y5RuOSIl4TJI9AceN+{_=zM0nh<J2qzSPmR5YQg35h1uG@-5usU~Ea(9ncj6ADcz6``*AQP=#aYkt%< -KkAwvb<K~u=0{!gqptZ;*Zin!e$+KT>Y5*Q&5yd~M_uzHeQKB7|16VKJ!w)sX;M9DQax!>J!w)sX;M9 -D(wZO4A9^KS&z;m8Zn?at+MuM`prlV2^e>X24N6*K2%UnSX}gkX7G-|%3nkSrezaeR@s@Rx?w7w$#wA -&EF4LUL1m{jmx?lGKN%icLD}AQfmwA^Wc)YGNmPjrU`d;r^MEV(RsvF+3c<+cLd)MN<qmt~|``$50_W -XVCxFmb;;=L1+?D_lNNlEtp#e1hD**h5Td7jE;I9%FgxZypQ_s+;scoDvLR+7C8-#aJC-Z^~lyd-;3z -IQ>Ay&T^gkYq2!_by7ZcM#vZB*;1Bcv+Gm$3aPk9ET(savYXq$nlCKLylJ^8FIWP$$GZr;Peei2B$|P -8Jr%KWN>;+lEG;?g>!IvLXyGhNlAXf>3qRumOgW#jZmSDP@(N~q3v{`?R25-bfK+Hq4`&6=cdpGy3o! -|p^ZzSZF8ZWy+YgOLR*kh^P|-KC^bJy&5u&^qtyH;H9tztk5coa)chzlKT6GyQuCwK{3ta)O3ja;%}> -Sm*AZRwC1~^0@cj;=YyJdnehR+dMRd)lpv_Oe_j`!0`4zPJ3HbhcqHDedZGQ5-zme#ge?gm{c<*l}y5 -?ih<|p0zeMC3>48YHAL^u2lz|S2-H~b91&s{_}{0zX)Jw!MB48YHQL^u2lz|R9jH~b91&wipCeg@#@V -WJy;hT!K>q8omO;OB9o8-9l1=SiX)eum)ZX`&l`hT!K}q8omO;OBXw6F;Tb5G}3O5QLD^0FA)NDTJIZ -5#7is@^V`72b#(z&KN{qP%C~(bcp3D(T!Llh~+xbjaVYTK)*jqbZuRO$S=<Cj}u*6*&y-@^ZS!T*VZ< -Oy!*5A_cTxh8$W0#x?X$&gc?8SB)VRN0t6aA=q9>ei~@uiKj<a8UX%g^89yFhO@LS856H;I#wZ}l_yH -N&*eDxfj31DZjg7J)!uSCh*^1FM#1}sxBU>>>0nx<|$jDZV_93?T0U6nf(LO{LKOiGpF-8G##Sh5HRt -!HY;3pZ`is5Gk{3Ih=G5oB8pJZfB#4)IXpJZgKhM!gNlZ>p16b4oBlZ>p17zS1FlZ>p190pbJlZ>p1A -O=<NlZ>H>BnDORlZ>H>C<Y1mIY@NF&jkD&Cc5Eg0)CQpG?B(20YAy;n22MLU{`aK=ziLNKvvTPAcMqP -%@4?GCdO(e-fDh8Rx>eHGx1ha?qq_RcHM)Tx1zUca@RalKO|4JW|&&@O#P5N)tX^y%`^4(PNI8T`XSl -Unz5xd&(zzyiSAYPHkp%}XYGfZh;CS0^NRTqnS`2W<ZUuPb+4Yc$=K9AKR?_~bh9ee{i<}^2V$hh5-+ -jGQulJYO=hQV<Wz^8$VAk=oNk{Xx}O3cGLMW&se40lo2Gx=EB5Unq8r7oLmo7RQ!kGX$^4p_YLG&+i4 -P{W8l=!{GQTFq8l;|MAFm}kG@Ce<8qH4OCD43Jjk!oY4?iShn;K)AdY%55=2hx>_@N9P1t!`WWL}#;- -avHE!;i^zLEQDjD?~S*7Gka+UL(5kv@*}bk7-6_(7F+#8?8e`^}`9G8;&7>`4U@L1SMCJzm0g{YNmUI -{%8x)jY1>5_t92K&y6q;+WUwYksH&3u-->xXmcY5g!DclgPI#L<emc`?IpTVWd!s-+D~+&$_VCtbdc! -AJR@TF5&2=c@f!+n2tFc1V1jl*;g$F!G6W`g7ZhGCJ|aV4f_OpU4Z%m`hnZkrP<ZwIh>WZW>IH?@v5& -|PGr_%}@QVHsnFbT&3kvX)46zCJ1*O-zmwrcd@PrJp3FHN(=gEh(D=1+c$#W{f8JgH8ycd+<%ox!PXG -(B}On?dZ1tmDcqtcuS5%#;aj_6v`LWKQpbr4-^T8OaUtuCT#u7(Kv-RdE_*0c~|zgz2xuK5`v?00J;( -KSCqg#B*$9jSC)Dog9UgeIIABAj@ukLX5D2q)g!Msy=5gcEP=Ai9wg!il$b5#7iM;lx{eh;HPBaN@0f -L^pCmIPum2q8m9OoOr9B=!TyNC*C?tbi+@C6F)pebi+@C6K@?Sy5T3niMLJ?-S89P#9OC{Zup6C;;pk -pH~d66@z!~w8-60}cWZ#?hMx%g-MU0{!%u|$ZVeLM@DowLTf;;*{EYk;Jsu>6B1Cs<oalPV4H2UIa6i -!t{OMB!m@h+!?shxTwZ{@7MEBuZqI<pgm~0mUbsujcI<_uk6=S0vs0h5xf7xgU;&ivkDw;T5h&bKt%| -tiafjHf5vR)=m7iL~NUL!JCOG1EW{!1cz{=P+I><LGR?%8{LjOf_s(2|!eS`-+<MgJ|44U2P8NYPC|9 -RLY5PXTNoAOmoQfCd0sh4UN$2{<<u!Ei2V4;>a>8Y_wHh4D6#y)b@5Wav7rDaOl;Vn2*OtR=c12GzGj -X1+z3Z-3Z9bU%ha^s2vsBAF4Qn{wp^9hT)jQN<KaBf9s;L86<AYDD+`I81a?S&iu4$239{-HQ<2`{Q+ -@la-MEOm%7fnJCePXi)-%W(FtP%tU{!KXm`|k3{x6$vea;Q;ZnZS`<P>wF&?we+2J7xj=M3^(j3Q)%@ -K5WPs>?clgOgqI)a*$t9xe`n#y+t?ZpmMAvnA5rTSmHWMA3lDqS$ZuAu4yiZ6^>s~8A86vu$SD%m!5P -bXO3ehpEt`Z&GzD9J<?N5l?2*G`FgXrKkDODZZ9woYW4?Y<qy5~8S$VCX;eKJ9G&-qU#iS9Z7iQHX92 -;bcyi<Wx+-yv;Gb-8Gidd}bJAiC%Lolc^A&fn=Gy660zZlZh6-{~Q`=lq>sqI=HYSx<D&`8ykk?m2&F -Bhj^E7A@4|<@QS(#v&rNbVu$zBGitt_9DW>T7>E`<`v>hJikys#@~Wy6Y~}oWGsDCLKdNh?9M)-n-eg -oAG>pa=*FC)cI-|+(Y4nWAqsWpFwwQw7Qs=tbCl?2eS?p1=Qz=gG~plIIZ1T0z99;A=QPm`KM{qxbC& -3apNK-;IZt%MPeh^akmWZ~s0dN0J7n`s6e=pAv1G5x7WSb8S80xzLbM2REY|t5g=IE%X%XUBcla-uV_ -Ids#i+nrvbrXY6_wuJ{*iy_Ir&Gj&!x8jf0Xt)M(pbDR-$`;-rYuY&(FI)_ALFQWNH1QxXoLZyE|wcU -Rrl|65UJd?k=MHnQ(VE(Y?&>?jgFL4|n$x-AnH7KB9Zc-Q7=gZ_V!>AiAF$cMlTX%k^$Q(Y;*n9wNGz ->s@JyV#K;Wy-aj3*G~tD?&bRF5YavVKOH8z=l`cyi0=9S=~be8{(pLn=$`+dUMITe|ED*I?)m@e2+=+ -NKOH5y=l`c;MECsvbe!m(|DV!4K~(J1NuqoHe=7Z$7_qUtYl)6|wT|eRSM5ZH{&x@^`rk=(=zkZ{q5s -`PhyM2v9s1u(bm;$jqC@{T5FPrzk?7F>O+<(OZzekQe+$u}|1y3On<Kh0>T>QLCAwaTW7Or`Jx+AJX2 -ht=xqFi6dL@ogmvi?t(e+9kqb}#}S)%KeI7VI0-Sb4(t3`~uoVx==*DG<1x}3Y0h^|-S7(4g7WJ%1<J -;u)cF4+*XbC0oezf0D`?A&AQ-0zazFm*XG>T>Rq#V{uV;{^O9TVXcdaRPpll}HRf6Y!JlLt^+@^ZdL= -mZ4_&i5>Dino~71PVA8H(QK-jabkyjkLFR$j1vVf_sBD-n{i@qe2>=dx{*6}#rJ5{HYF)B_QUsRy{;R -%V<&u%R%%m>5@Qd1kJjkA;U{*#_h@yl6F;RtR9j+y2>a=KwBFZ^oUoI=NA}JX!o(<qxkvWS6vD*VL*F -BNX9{6r?4IwDy)%anW9*ynk-amg4rA<??~%PT2M=SE#@r)&XG&vYl*Zg6dzTu1BL04l?43D@7$fw4kL -+D$_=&LlJ+gP1;U@y__sHIvqlhtL?f1yunP7X2bBOoI-kFn#F$!nyk-am8GcgVz-XnWwjvvMi9gU1}^ -zc6UKn)$Wj&bbpK6yV4UDp!h$l-nRdm4K87NfG~K6yM1y?cvsB=A1@It^Xd65}}Fee!Y|I+hcoPUt@Q -H>OS~M$G0u+27pgA)+<+$^Pa>4-u!iPxd!AdWZ<keX_qMLK7oGbD!+5iO|G|(A+2cYa%o;A~g5O{+b9 -)j0nwrvXdr46C*-%pX{WG(8P$)+$TF}A~Z1~H229)ng~sd2+e)6lO{qFBSLeZ?4*g%#E8(`Cp&2(G%+ -GH_sLG02u+L#&3&?yCPEV<LUW(&q&XZIBQ|rN?4*g!#E8w@Cp&3sjAGOn-6uO~4h_brF1k;4(o`44h| -1h2J87aaF{+F1lbtlxMKR(u_sLG0>Y@rFG!NDhUGuYo*vtdJSCqa;eQAA>im6(vAS&~qi|ATT6~tp6^ -blRkse(w%gY`t$a;hK(^I#*<wVW!5zC74WbS<X};w}&Rh;HPBh|7a*L^pCmtmVNDq8ol9%JN_r(G5Ql -UwN>H=!Tz&tUTC9bi+@?R3024y5T3HDG&OIZup5f%7ep1H~d5d<-t*+8-5~o^58hp4L=bzd2o{GhM$O -+JUC5s!%sv?9-Jk*;U{7w56%<a@DtII2LnVm{6t*j!6l*_en#5gszl!3`iwY?>Y~q%5#4)TpAnyN*6_ -0vMEAbeXT)usIQ;As(Y*)u8Sy;w9RBPK(Y+t`8F3ypPoJG5y7$IDBmPI8+n-$^y7$RGBPpQp>9dPO_p -zwYNEWEl`0O&#!T&*`ga1QB2mgnO4*p*uI{1H;=-~e~qJ#g}i4OkXAUgOzLUizdl<4697}3H1aiW9&6 -GR99Cy5UJ%Qdxv6ONy+CA#PT=d`looa5*1MECsvyo2bT|DSgf-Shu*S`BgL@$+t?>n=qVbGEU9DvQrf -^61PVsfwwXsF=7<#WZB9m^e<Qp=(qs=1fARFz+&+VWrf4nyPK4v00#-DpiA)v6Wzn+n!bvFR(99Ka^9 -cig4q@UWIspeBGlEKW!dvP>5;Hmg|z0s;N0k+H^OmBrx69Vl9TmlpH3RE}2Lg=I@l|?-&=h7MgBfCg@ -&^bi=D!Y<^QQeZ?yJ+iMl`cdF*^R87M&(~YiX8j{uOdfL<q(~-?=@ai~>{OH84M<>P!s{`Auu@u-Ijb -*?NYODe5sK#<&$23*|JFl@4*d>J-?$%8gy1F^nSvQ4ObrU|W+lFr@99&OrGd3Mssb}WzWI9Y#&rIt$b -E>SK**<SNI8$$!26GMV2G$#9%nj|<)f=WAo(Y@ObJLj)L61kLjy^g?azbCDN2iWy%ygg2A@Ng})UQo* -qk3T^Zdw!7OWV-S^sZ~ue<wBD!L&`!-PCNb(m+c*H5;Zh)KW-8tvP9A{*LL^o5Iz7bY|$$nQ_9*_n4* -{DO}t~XKv`{^)jEDKE7$BwK6qz`DvtQTWXqSq_Lg>sVRU@W5Y93(4NLxmr~OnBCTk<nF>pIX1C&ku!L -v!XbhI{%t4JAK2(Sg<RC0@r`A-M(=+Gwz|2%IZClgCh~8xPQe$XSV`x*;Xfrj2HZ_ejQ)6gTV`x)jXj -5ZoQ)6h;%#7J&Fj8Y^Q)6h;hHl)M8bg~l%-=DFHf<RG7>_m0&373Sm>Lt98WWh7hR-H~n6+syJ2Pf7G -iEX~W-@EjQ$90hGBai}GiEX~W->EoGBai}GiEX~rZ6+6Ff*nsGo~zy^#Yq2GnE-Ll^HXY88elcjx$+B -FR+<#t}YyXbb(rb3g_y=F^$=`8EI4vhm2Lo%o%{JW;kuELT0Q&X7+noO)m(UalbOtkRmhfb2F1O&rCP -mtZt-g`r&4#jYF22nPIZdS!%Syv`xrTGal1hHZv9|%gk>Ydcn+0rZ6+EUS=|XnXy2bu|S!zK$&p|Gvf -|s#sXz#v({+S?`jy!(P-1(-Y}M<5oq0L7|YRM%R$TUQg>)Irles^NyC_uhB=tjFs7stYXLTlDQOr}(l -7y=Mnx-Tqhf?(noBi|A!(TXSHl>RhA||KL{FxMDTiv9JzB#UiH0!}4Pzu4#&u{I*P&tDf`)Mm8fH>9j -9bt!`>%$XlnpZ}8)i~A%%p6X1a~7hGBwHNMy_4GhH)Jl#&u|ziQ6cRyiAg`QR=^wo5`J<$(@_Yotw#> -o5`J<xs#i@lbgAdo4J!$^mpYIU6_#@ea?+O=jOm#ZrtVEER4BX7<1G9J+GTFo2XcB%60NgN2+pD0F!5 -0$8r;0%Nu4qMpyHOwi|gvI~RFw<Yn5m<VK%!)2Jmc44;jz=0;a@)7&>V0p7y6xrNwSk8FN)V~8-*968 -clD9qvV!o&{?qa}s8RH3MucbRJyikfM~Y+S6ubPy|2t&xQ(k1JB`Vil$^uE0_4M`N2GjS{E0j}k4qOW -feJFbZ85g)WSNE{uULjM5jTvZ^ovvch;xMXnc&LIlW0&p#U7M_5kSQNm1zYcml_V{A**4m=v)NPy`Wj -fCB!iS|d6*9kL?uVd}%m8JzjiImu*iB0-1ng-QKWIdYLrhaXjc9yu%=h4J&{cF==TWp#p4(MMSPE-*I -nppd2@+x7bId@gBXQe4BFB8Gr!ABEAgc;r<v$OE)D}*6dH#ziZaxGzr#N49_MjBvpSYvgG*+<P+qXVP -;wb>AsIAHu}a=YSx-F&~f@1!(ax)MitA59+Af6?d`iiRIe9#y|KTevb6d_1LpZFCFeyN@Q%>t7q)$^@ -ggD&5L#<9DN5W)oO8%x_E?W|`}iAZRnTB4{()+n^0~rjM_jW<(3gk#hWafDvt$gEreKt_=lgQym8xv3 -<l%1T$EqX>Dj6z#udpU=W(^QxKZw500eQ1V=J$<id)5W5vGFY@&kD?4p9u+<W9m_HUW^Y7m;106}OXq -d{mwqruZwDe71D8#BZE&@8i#WZ!6tqaDe<(JZw=XdJ^Jv@QH1vu$uBdL#KBOWmq83e2ZOfgPmTV>^;j -?<mo;I*4o=+{oPf6g=%oz`rW(xKK|z)pwbZI*>s|QXoT&WI%=)!IbX1!blE;o4%JupJQvRs%E?8NVaL -UiRuMa%b;p$=2>Fjm{{>9_SS;LB+P=uR1pM8MZ4WWV&{KiTnk6CO_LL&^@+K+&XMdJtwJRx2;xYlsb* -r5wLxNH3XWuyGclL2IFk8Q&GNq1W_Vw-H-*#|60`rpBs0`no9^@z)J$!PBiV6<_E(9~oZ2GYs!hB%sM -)TyH9Jk~mJ{{B*xtGwS3T6*%%E=ST^z~&%Ia!8Hu_b!cM#O8hS7CX(c(yY?-kT7zv`(Sm*rR8<ko_^b -t>xC^{Jb!RFIlVE=RJzvOY&@XKiXtcWMq$2C2EiFi7pHomvB*TKkozhWDxES8DdFL1y(Ui_PdW>kDOx -{aaR!nF$9vl4+9Lh>R!Mh)gTgr$KN2mAy!!fpe+o3_y$i61VttZ$yuRD?Ai5Dd48eHJp-P#{do#w=;n -A!y6dDf%xML`1SqUeH$4u7OR0nvQr&f83}-FV<ZH!oskI04n|@iI~l0}*~Lf|$ZkdwAbS{rbJMYx5jZ -y;`xt?9)3KisI5!;!7-_X%X<&Cc)zQyL0pt)PB@pTs-AILejxZwRbCeMwpJR*&`LNQYLOv%L5%M|7h> -*`IMudD$Ga}@3h7lp3vy2G&oMS}D=R6}qJ{K4f@)=-6$mb#>LO#@ex{(R_TxLYbXOIygpCLwse1;hj@ -?l$(3He-QM9AkFBSJpc84>ci!HAI02qQv1ql}mZxRD9=PcS0b&sH-N?57sj4ZHPh*x*FNx&{rCiVkeL -D#&rXWjWJvOXDd9{5Sl9>Bb4j(M0zprhC14ndxZ$-p_znnpc_bRpvFOdxcrSbgwSIWV%<D*O~5BWhK+ -SqO4*%ZXRH|S@3flba{j6p6}G2*#VyKZ!+C$&RaysNtZQD_soBX>7Mz&X1eD+D+o@y+~zwHaMb1YHU= -<Rue3Ab`Oi9q(=Mz)IPJm;B)S6cW58Qcz8NML-GTYG14Q>(<xFJXk-P+0dvMl;wFGBf_>Qq0IRe%R9C -pDSJ>>Q+aVOLu$1$3zE4z6tu*FyQFyh6_3W{6?D<bOlSrJjGI(3E30P0lvrkWf@s_!x#OXQW4jG#y65 -CdqEIm`gMWYX%CqnQykP;>zL;Po(oivpRxXhY~AM{6VIRJF4BXQRQ9`nYP+;^WZhh+6hJpx)}^(pDd5 -Z5>iG)X2*L=Jtpj{^)JKPzCPji%iEgMY|Zlg~FE^z;#7D=i!OI!gTcY=8I0?hTcBP0A?)f9h^|Ut|^B -P%J)0va6xaMV*nn`)iFjqzdz;)1PAo?00Z!Eu5~fu<?*rlc393q1|SgTJDg9xP%4M-d7IS|uIFu@bE4 -DwRR$oD8w_}fe9UVP+)lpaDHpdPoo4_I*Vi+ETah*}0GIO$s~lWTzO*Ta$4Slf9pDA>JEnVie9Y@H+| -iGDJ%%^RmpJ8cMn7RDT3@t4ON6N#>lm?@`=Ber)Qt{C?EOAyU@&!~ixGRp4|*6(-RNP&-tvPs22(fIG -h#3LK_`Q$8ygw1cm1FsVd}<aM(lMz=w~o>qmL1LgHj;)yp0jd=Rojz2P2lxf#CBlMl7EL!RI}USUv}W -&-)m$d=3Pk4=`f+90)%5Gh+E12tFTX#PT^5eCE5V?9I$YDEQ3RRdK%qa@Ll(EvtK%5FlTLWiNg%LLor -D4a?sBT!cb^d?A*-{<#Q+0QpWV(^SEcgaG+kEPGjV5efnF%~*ERSwupBgN#@KMnZtYjM#}12|izC#PT -^3e7??z<#QzXJi>_Ob0qjY#)#!}B=|hRh~;x6_<WNQ%V+E_r$*TD$Cl67TuzO!;g1)&*bRIhVZ$F=K8 -sD|2pfKLY{ikl=Mgsiro79Mz~>P*{Pr^F0{h6R5jOlbj9;K>!qf;GetRW!Q4xG*!*6eeE-Hf0Z20ZP( -1qCKjj-XjcS9Ey!Dlx7_Il`|BKXXP-`)^iR0N;d@Y_qG3$ddcVZ(2$42p{2GaG(;Rdi7md}hOM3vY_5 -;4>S3dtr1@6?|s<Z10RNs)EmKpY65LMOE;b?X$f(x~K|1vwgN(wxTNd%=X#dA6--hpV>a!E2N7=@R{w -iy+yi61fSVH+l!=&MDUsIv%O2YNCcnRKHKZ0i$w65?X%s%7Kz|9+h^0f){z9C**=^8wT>kC%=X!4U<> -35r$*U6+d`58*}SPyw$Ju%=>mzosZqAi_Il|8$-Svjw$HVe7yATD+^N;Q3j!Qv!(X!kL{HzTQ8xUht8 -Y-Ct?$$*8-CN^#gQPuQ8xVM%y3YMyyYkxe$y7lk%R!*@SBsyjwA%ghTq;hT_AP1{NqVRkeX5!)0{taB ->(Aezs-RCa*+`n<v(n1jxIzhaFk84y*#=QIlxgi#rFQ_LL~o2*%X@t0*)j!j7_m=p6f_L!`Kv?{<)4M -G>lELy<NHx3BFM_#iomHP>9UlD4Sx_NY{}BpV<_f!#P1Aa(Sa{ip{ArM-qHyQ*1iwI+EZsn__#%bRp7 -qqil*zUtLEMd}dQ@@1!n7CU2BYvFWZGJUyiG^v7dtiW`>C4e)u4O|iL4$dSP3F*d~w%jX98JjSNjoa_ -&t9tipCkJ(~2ET3`X_S6_#Ow$j*k-+CMwwMje=LYyZ#un2Y!3v68@R=>9X~^qHg3oL*O;27&5`1QhX- -+LVlHfDD%H~Y5BMCmUt8AL{21PFT%&xNO&l`xNI8$TnDw|W3L6HkSv#Y$wZQh08Gu!7yF7z%0pV>Yya -;JA8_{{csk!!sR!DqJ5i`?v82tKoYUgUD`LhzaG^CI_q7lO}hpBKC0Tkx6fv%TfJC<ULreI`d~iQCA! -S6Ts<LV#@eO><yJ5&~qyZ|@*4N+Cct{H8^)BMAYr;kS2?7owPZj19lNhP)6}++%F`?ZJ$q6ar+!Z`uV -1r3f^SuVn;D&hd4OVCduRjKJR-?_dO9Fy6@sYEj0!7{P~(cQb-olyO=oN?S-=+OqLdgnh@iG9tcu8zb -VYw=*KXdIuxot9LRYzM8MM4@@m-Y3qwi5%(NF!ie~Sql}0zIL3(hg5!*cFF3)7_=1y+2)UhNM97WoVQ -Gt_OA&G$zs!jE#6d>HCk`<pK5>{4@rhR$5ubRK5%G!F7!jXH7NfM4-DPZ5Qv?7fctWD2WNLyZq=*Af@ -PtHF$<zc-ND&U4;0cMklBo%vkoK5XX-kt!(=x}A#L#(GRZLZJSrKFA>157s2W3SJmgkW@;Z>qQVrqii -p3+v4mm+dC!85EXzJ_O*2w+X{46BNd;u$95SQ9+Ms^Z&thKX?21kbRl_(Yyz_AtQHbFvFRrptL9V2-b -d6SQ<OZ(xtl2IBlIUDg{sJv^&^i-M0!449K!;*cy|;TzcFv5tg`Q8zPScK&7J8BG`aI>73X2wIJ=rQ2 -}>aVFO-nHqzSGTyE+RGf}?XbkSkc&Elt=``M@F?cTH-5Nt(#&{1f>9>VT+%4C=wDugv)t|$-^f`>np2 -N7ta~PLDhjGPo7*{UJxCKlE!^V$jOen@tjS0m#rZJ%y$2BGt<Alb9Vw}{NP>fR=6N+(KW3}geU;R1Xm -p<qFvgdqX<2m1#Kj-_3=X_t;`ujvkZ$f{cDD$7t-zTDb6Z-o^ssDujJ`w1f(BCJ@{U`MIiJ0Gn{ytG~ -HDSK5_MGplKj-_>=X_uGobPKq=lk;Kd|&aL?<-q>pFMC@ih$t6W&LxkXM-BT-M$wzWRB03_IPF~D*Gp -|>AwImOtM!iYWpYIs}(`Q3H1yvUgs4Yp+ft4PnaJ)ftLM&{VRkF^&@4gM-~EyPmw>e>$wm({OdEl8WV -!KqTYqux<0wCAqeK8hOA&rQyE8sU~X#LF2acuymi10Udr_mLB$E)Ip8WU<pCkIXunR%<qz!pF9aDq#@ ->HJ3P&;89=a%T`}!xm_07#;!O}E{awM?nrg|Rwdy}1f5fq%@-BJ!dvG<o-S3ej0*{S%G7ZPLs<bppt6 -@Toh>9PQSc&-)J(G?-Po4iLT1T%P#AR>1Yql~n2Sw;NrCT|1^!INIalcJCq^Q7=R`JY5LeY+e<%++zF -vZd$Mo%I^RwewpvWalbhk4}#05_e^G?-E8pTW1l%o4CP9tG$N^<V}n-0(tVb0^vN%HX%?JSt(VV5q%a -oeA-;*>5rMN59mA6lfmRqe#&IM^$FWdY|W9pWAu3KRz~y|(vcE;!7w9wuNSt3+8Q~M4!Js#jx{(^x%j -7>2$Lg482ym@kHMHhgX?IqBUSOpRreo*34;c=JXnZKEquz~{0##->gz~CJ-QgtQQxpF_LBJLe`cWO0e -<5`@agGL)DwE^9kx{x!#T}7)3?WwTF7l7G{Y)e)eR9GDYn1TW+rSyWltN^y&A7zx^DC6NM0>srhAvY! -gQ|_Ri=9;B~14gsK#_}f9gz6pRw)lneL6x<KFFzc&+*|)4l0=f$3hezQ=U$jISnotp$@29SNB37nqRg -es)GoZy|wN3klR(NTAk20<{(rsI`zlt%U??EhSKEA%R*83DjChz}!z0wjm0!oau`mXm#{O5A->@XZ~- -Pj?+Q=81USGjp?5IuQT0qe<jmB_g699bDy;h;e|Ju?z#Uq)BW1JhUvQPM%ZQ=eK?XI-CO);O$kldX4- -Fsw&z;dR+?W0SiG12!;6drK;CA=%TYby<@o!{3TfFCG+g3N-0oeKXXAeHAKu_mRDrz1h*uCg5bFT5b_ -B>({{HeSjCl2UmFZqRUSqm9YVV&W0H<44Fx@kLCDZk8!IAtFS<Q4mMOHI&%z+h0@?ZKU)BSh;is}A4- -(tExBpe1fSMv5M2E6T9^D=)VPM54vkLbL+BYDg5JEj{yD!>VlJL?&+3_&7P{aG_11LQwnXS(OndnXz2 -w&E8|_u(s^QsE*@_4-71H$Z~{*4M~*909yk<}n;p)*7@H_+l#qo~>VOW57?fFSaw_nft{K2D}>bY>13 -E7$EWb%JSbZf^E=R25|Iwn1Qmz6FBPexR<}p9QAM{&!Cr>?%BYyLQ0lD775v3GTkx(M<jyB>pBz00*T -cb3ndn`F&IfOV$3T?Xt9cXuEJPVKBq9xpU7gKN3q4~@_kjt{G6;<ER)aG7;DI}C@hzMQ(->DnOLlp?< -1(%!usO?{R#!(0KG=M)K<L9fESsf;|#s}OH}|0Nd%%GC^OGSWVIFDOXxT1FJ%A};)TP@MYV<9L^_)%B -$C-|`H~jWNLooFX(^4Ql{AtT(nwlKBWWp(q_s4XR?<jXNF!+_jijYC5-Sbz_LjH>ynA5_F()m=oU{<L -X=vw2x--8cSw{;ywKik?O#fa-(y`_+Fr5Iy5YE8k-t+E126F}tZajk!p26eZi|#)Hqc#Q&ZdSFY?TaH -OE%K|v{K^!Dgb`}Urq}i|k^))Jh%Q?U<50I^4P#RT<w&{<R2akD22A%8JY>3`-x1UO?2ei4CwGPEesW -it?&o&GbU(9eO!w2e&UCDVZ47v}2I`Bk2C7f?>KLeR_No}DkM`3qP+yI8k3SoBHsJ4up$+)MVQ2&Xa@ -g6BzkI>YK8<+<-($pY8ea$%;x~;iL<;eN%@<;Y_{io96@~cF<_lGY_{h!+i9#}u)D+@lJ1^7~g6K}rr -l10l=0XWbv7y!mNb#W-08)%t2)F$eQk+<@u78CTD{4YaiWfD=DNxL)K~RC>Mh%h*6*p=os2|tC)#d!- -I=K1^g@CCqDg-=ziIEg6eOV#k=qm~VLtj-0`1zVbz|Iv40XKiC5HRy~g@BhU6#}har4VTSYK1`S-%tp -&{!N8IKEF~3<nxw7AfLAt0{N_AB!hh3Q3&Mou0kN6Un>Oi`Hey#pWiA3^7)-Y{35ZO>5I0Gb9BE*yvT -IFNW8>!zec>wbZoGh?pFvO`Xaw?iQDhH7y6awH6DmxcvdjouRFAVj&T_6b*B4OXC>49qO*$We$83U^u -+@wal^0vZ!+Br_E${zf_;nWUa)U7-3xXN)4gEdVfvyy;~d=!_Sa1J{QnKpJ^z2pbkBbZoyGa$IfOX({ -AWeZ7mq#1s5D_k#!)p^<lOV06&a`1US+!HKkHk*c)TXg7mwG(`QmZG7{w{9Z#cHb`i9%1Sl@7Rjr9!| -th2u1@EYq|;rY+{hVyHzZ>VHpeZvtp*0*BOW_^zC`Oo@Rc>c4#p(=*;4K*>WZ>Wf2*U+3~3)42W3A0< -R)U>e*Q}~!a`q7UW@z(su3aA25h>1a`P>9Fp`~Pr*F*BUZ+yvoBy3i`L_v$*5d36KL%^qLA%m_*|E)O -yi0vTci1re8r89_C~<tvO-fLvt+<q(&zF@g$#%hwsH0lC3Q9mohHDUeY{kb=ED#t1}qd7Ke!<u6Y#QU -IA`1bg|*Hwi)7=<(oMMj)TTb&NnhgYAq!K7$>MKt6+=j6gnvU5r3JgWZfkK7&1sKt6-Lj6gnv>luN31 -~)JQ`3!Dk1o9c�cawxS0{iXK)K6kk4QrA)%1ZRz`$;wlN~)vz-wkpB;<{`Rrsw$Y&QLLO#105%Sr? -h>(wOy-#l65?{a&HbNozeLNT;`2CCs!5?5m2>u`=Lh${J2*Dp>L<s&cA+{W>Q5Cvylo1n1Yarxw`#b} -v`M=8c15u~j3NR_qMpa1o3?nA}-KYu)oMXg9I~!HO`U{NclTnU@PN_Tx5KOwwiwlBDw|PDxm~@*bjcK -anNMeTZI%JwEIg*$_yv*2DwSi#xFPZK?^j)U=@4Ur^9YO2cY}Zl#^mvHvy6I{ZiaSak53xZvU5!F<J; -~!Cw&bR(Q7En~c|61>yk@-!lsr8iV%u$+4>=NM^$;6v(|pL0FrA0kTASuWVFO369uKjZHqD1ZacRoqA -=XXPd?*yRr92*D!)%%lh2ol&$3tw9P4l5p+>i2jh)wY#-dbJonN6j+U^5gqqC6gA8(Ft}t_wc1ajaWD -*9D*1Dw<YDp}73y@eo@@)9NS`x1Ky6I?jmYb1L|Jk`c@2RPgyUBbLvp;PY8VET2=sXEx=g)ln#}G<iH -Uz=-8@D)@Yf5zFUH@R?1jX>}Be+e;n~v4J$LjzV#5$>SmR&`qnOP~2DYc!*td)9NS`7nM97VxQc!I&v -hzXLiO-t0PAeeCEZ{v^omKr6rGt*h-sLM_~ierN_f;pG~VHM*^RRy?rKkYKbp4aIdriM8N9tFdKf;L& -=dKz+pE0riW74K&a~RFdKf;L&=dKz+pE0riYRvL4d<-_)QNbM}h!{+3=elN?{`x0%XH)dMG)P5Fi_V( -?iLT1fSXPn;uGzB>2pR-}F#&B*AAk{HBMJBMCmU;Ws^$97*t*4Zn>%G;+abHvFcCQrIX2pV{!69!icR -_{@gi^iXmnxS+%Af)>^VE#USKUu482)f=T42HQo`3CNL59HwC!^@Mq7;xM@_L(J_#l-#t54xipk#J{r -pkf&E&@UP%iKfX$`$ZhsMH}{b`k`ZrSH_7?j7Cb+_!a@DYY(Sn~kHEh&$8p1_mk+34*}rA(HV$o5e@C -)^%iLP*NcL~p671aEZR|+)Z{_xHnbU(|VY-flg)L(#%&n4PVSTy+r`2aKkqIrVpb8wto1Z+)h*9$rQN -wR;tYstsa)yx*$TdbHAU7HD2K5{2vg{DQY5Rscv^t~;WD_F^kRy!LfQ&NYx5hJ_YHZ%h&UBq*Bm;7u5 -pQf~y4xAaf$V0a0HXeym+wpue-EODGd))s@$#AJWyv9GIJ4mZBVIl;8%G%N@|oGRi;)TtAG#sOXNfNf -2up+`XExp7!Fa*XY+lDm4ah-8Ao$H^8G+!pun-ZBoY}%Ej&S5mUoRsNeBW_KAov4&7=hpq(p)VOj+{B -p%7Sp@%n2Sf!jUs4HZTIgpJ4GK96591G$RoF$zetypMkB6Kt2~)DG`pGxx_L>)Ntl<A0v>@<ztLMK9| -*BgM0=rG6MMw4l)AyT;~acsNu|YHVvrDo4L+^4F&x(*C!c)d`5;CfqX{TY@xP)W`xZas{3cgt}p`mjH -wYoKI0o1fqbZST_}32%}lVg(PM3f+FymD$J)#U>kdl&XKr>d;^i~j%QFi-)@FNoHsTn-?0WtloCBEMd -5Mt#2=fg$Kg{m#VI%^=GZ+^@%<ewHNCgNRTigRNyNAs^4j#<zVSU5VgV_U@8S(O&J;;1RH@Mk@yo940 --0TH40xzH00iJW{1~)sPz6bKT$kL95<HGX6If&UyI~jp|F7a%{8HibBDR2N{_OkkGkPoLTOB{Y^u44; -}qYusAbBrWFSQByVq1ijeNF4~zU>td9u4jG2frsXLc9(G6p}Agh$IGX=;Q}LGKFuwijFdoV*Iyz9(%i -x8DN1jfJ5Dj;<<s1`myrkvuX9L+G<UL&q6D|OlQkYixXs<HRY;aJcW-9|^4Z6dL(ZhRZ-NoXXFsncNS -!qIvrJKq+dQD2fqV|L<d8yX9_BfR-CpxB&nzTSnkRV0KuK=%6t9g)rZi9Sx`3kG=2@O4IQ`H(&%8#qr -Fow10S-Vk2i2${pJ6pN$Y-48g98vvw2UMNbcwHE2uqx;Xil;tg~JuiNmdr*ljhd4Yl@80+*;npAg469 -memzWrMb1tLS&WZ*0Jj0Sp8f(Pi7>S=6cvQ#nJk?9yWEzG0pX;5mbPTGvWn5*UMjuBldH>to+D0&GoW -rz~PO#^*oi3c$!<!juejC&#h+#L;h)Q-)2T2pMAU#APqHll-*hM|C>9?Uy5wh+)?H=PTtR*<mrc`)Z8 -haWH^04cbYW>xv9A`JT@G_pW~Vu(eZDN>pVoizd5cw5Z(Uf2AQKch(E`fCei6{?kYP)IE+7cm5n;`R& -&=_-_YZ4Zj|MN^wr!L&r?K9<|bL+kj0vt<Po5^-`phcwUNx4Z{NlUf-PM<=aAEy?_pk}r{8=J>kd*|^ -F8W4UOw}?Sf<Eu&F^MCKrg@fy}X1Y(KWxHjV=24&F^QUj(per0bZ!l!*9M{jk*AGh>;QqFL}s*&G++m -9T%z2ALdztB-s4n0Y)GnwSXcQHh+ZeH7-+~KgM5*l-T@n)+&^C&mU(ihRoRfDUJuBynFr>J9$Wu&7Wd -d4kh06=hWCBpY!Z|p&EPsyc!$ibAh)TsK}nbz}qKe&E_w#?L}4g`~_YYkUX0o*v|;$Gt47Es%w6PXCt -b!=hc=N8L#<K_17SuQFhOf_?jQ%4JoR$=f`-(K>llfj5QvW+Vf*Pe~<>7A7jq})!OspTNr_S)TSI2+w -<eRfkRSkew@D)Ron9uY%P%+o1frSCKthE<^fV<^OI~{P`y1rsm7)=C{c_4WR9*gOOE76`9r4bgia*-Z -%vb96}6cgEu%IO`an>T9Ly!Yy28Cu#3Va;Fo>ya?qWpe1){cCH|cXE%QutXiP}t&N%XW$&Qn25x9?-9 -A)x&X>C~1ZdDWb5@11VnK%mK2L~W(`{qS^$3}Hl1JK+3;Njd`?1(E#~qHt54YZ*Zs!_IY#pkS~293yD -a+u6<t8uWHwU<B=Xy9XFS-@(ofM$mPzvy&0Dk?ibZ1Z@YqFEfIsyxoJ0ppRtt5F=>F+da$(+VOT@VFb -;1yRQ-=E?({2&xnvuHzPtmJ&Zs;ovbF}8rIIEj6gn}>luN3IyW#P<g<|xA)if*2>EPg1oG+J!U*Kk*~ -bXv)47!q$ft7~Balz$c19qdF6NH7u(j(LBalzmaYi7Yt`m$vK9op{L=%#!u2YOaK3%67fqc5oFar5>o -n-{_>EanIE}o!NUL+ciOm*=L7WYqd@eCGMyLMe<1oG*+#0ccm#q(6$M$yIdR9y7h#q+c(<iqn+-1pkW -^HdZhckw)}>dbH?nvG0#?qozvoL!7SFg-kV#T^<wJaxq#8a+Iv#2p$vJaNPw8a+E0fna*}Fap8!>|;b -soP&%&Fg^W*h?`-14l^PQn|ekVwnK~v!*+xbVc2+rCPF?uLB(~kojj!yVc2-$h+AVjd3q$mu<`T|m&b -PU^hktZ<LM#pknQB@kqE=asxGdQ?Yzc_m^i%1i_1B>SQEw799^t$;$n^-o`&LDjvgMHxRj&I>zni)qb -0sR!@W{i%)LAqVKG_7#XTS0>{p1(IJ()d5La<@^OO}Aadh(<B(CA;<~2xM!qLs<L|nnq&C^0$z|qa?m -g#pH*+wmnBnnknJrGvo(h`TDP~`^u3ka*t95}!T3RP~fCxNiqH#c~SAguPy4fZh*R%`BLWkXnvi)b8@ -;jbyA0ffC>gw<wFurWYbZRQ}aRPgP&ye0~)V;>ZDQ7O%@LTmtEaGv`27z+f}uCP#G9SVyC)}^pmVBHF -<2&_k8Re`NnSR$~E3abfhlfvo(+oG^kV0{Y91h!RS4S{V_ST3;b3PTfyZ!c>(pbf*H+V?URKz@JPctT -;2-=F%&6$bhJ>2$BcAiqCd-l;Ii@6YWQ6bAYIc~_^xAiqB!QanRH@)!Pm`HaFKzdw&$Q5fX+?;VO~0p -$1Zo0QxG$nW2GX?{X}e?G2x2KoJY?}<Mj(VtjI_}>p`*ci<)gz%h+<e!HSo->jP3&nG4GK3JGGn5L8# -ottd4I#Xlt^tKr#rxD`4-@g+d4)lE-;DGt48oh)yiQ>d-t0l8oFRnQT&Ld$;muxF$`a<{Zz?4VA-VY; -HEGet{)L%?hZ&0?zu7$}6$bgu9yzD5P>e;%FM|A<CngmJ`OR$ItT4#0xqd`pkl)<UQH4Q%&67$-5#%? -sLGd$!{Jt4Gt}w`NW}BKs5#%>Ba7tm2U-N+en~>i(<4Rx9bN_|8VYP5XLVlZ-&c|)y+m+78V*ZUQoro -d7xgI6kI1<>f!ca}NtB(<QHzVVWpjru4QRLz-@x>hOl_(RqsD`P_v7-<%j5pW3%m|vq1q`6ke8>QrlS -K@mi)ze(=UZ4|0R2;|4ET==69&9X7}gl@9${E#z&nId8w1`SjMSH-TdMkU?+r%k%e^xgsW11wV8mZ8f -)*Tl4Mos`!>FMMT5w1-6hR9Pe1=uAH|}Oc?2UUE5qsnHjI;{+h1FI;zfi<3IJ6gv*ae67LJ_;*&|WBF -7aZCPMeKq@dm&;M&S_)Bi^sWagdld|95zP0e4M++h?kFZ))?{f`4g4iImFAyIckh}`8YR?5icL-q%q> -<<6JaGynLL4#)y}XbI%y@@^Q`?BVInvHDjcK5#0E8_y~huM9ypbbH94hOX<)1FEgT#<3u4s7i!lUB6O -j4tzk{<bXlztx=_2;5TOg_iZOz<fa9KFP3&}enj*r$M<pDBo$g3KBO(j7juBD0%Iby)16OT21eL3oSq -%_j;5t}`Ai>(hQ?AycGCvAY;KMb#4ngJWk#mfoa`hm~2ayQpY%zkhdh2FJP<gk0gb@_@&=GBiU`aj6Q -a~iaxmb)K5^<Up8j*<R&g+bz@|#W#I0Omsb!QntB%)LC4Uve=JaNR4s9}~V3Vh~|@PdH?pKr!l+9>du ->E6c(DvJk>Ga@2I8yLZnCXV`qshB^!$e_Sy=K3i{AfG<wC<=ULHjOcYEb_%Yj6gmE>OG=zRefm=zVSR -ofzRA9FSID|aZWEGDDas%agY%&pUAsR<Y+GObtLYMXcx@B80v;1_Qg;(6tORcs-c*DF%%8O?2DmhC}v -*_B||a$VyGC3*%w2>P|Us<>V;zVLQyUht1tJ$j@6fYS;y+jy{Iev<tP;jv>8XOP-q~?#6alcY#=mpHV -}F_8wl;34TO%)20~M31Bt%Q1{1BF4JNuf8_bL9wO1MNqI&r)g?L%L{4N7tRx8)ML<s7JrrVD(5&&U;5 -p_e;?QBd?H#FVO<{5QE)9q~RQ8zT*&PzK^*iW~!K}F}s>Gn&E)PM{!f}ZB>Y*2CDe!BfCBN-50@Nn#Y -x}6tebb*|1XY-8H_tWhYjEG{Gn}pyH{&WW$VRVC>?qF{kXYr>yc!z|JkgDP)L{G@+4qn#K6>_?R7cca -MobF)96rCZbJJ^XqZ^-Em-aDZ?<a7t`ozNe0x`X#YXe2P*v5OJNr-Pjs^b?rwVAr^Sd^!#>0{L{XTUZ -MD@YbLd@?oc}6!PIYR|@&?oGXQVc+QnVK0N12As=?VN+BPfjirze&&E>7hxc`*kPpw(QpktrX({BxE? -z0*!!x)P@)=?T397LZGuufSqc&;craQJxcZ@6TkJ<wI$$6(u)9pw3Cn5c0c)DZ1vY1g@L_Zl<9E{q84 -Lso{)04l_ewlw#p`Q$^NguTdlXz;n{jB>5<H9hWahA!M$Ay8c=U>(2uN>a)zIdE}BCO@Pg@KMRo)SK; -v_EPSmh=3=x13|VA@L6PAst32IsIh7{RuNlVNowE{6w*%Bz#!S>nISaadDc%6;TjK@QJwi<$=%$_vVv -}j4z1jPq?pGYkm^bUm0Mq!k|-^1zvexlb^iA7rD6CSJmq~jy|0{TC;;h|M1cx0u6-Psqc7-*A2e#E|z -H^H1E<Ap0<xK=$GPLM!y<Z824uWiBQ48g;~HV9tiy#UJ%{}#tXvT-|uH!DBsm5LtGdx{UmIYKUtXWi_ -E1^DB|@6Ei-l_6uLOJh}{Syjk9P%vAnEZgcqS$WO|e@6oq1)S#Lg3EHy@!p;&D;D2G5^LesHj5p@z*( -RB1Js6Z#<V)0op`ip;gL;Xts6|o#`UBEAxPZaCY&L^hd*<CwF!jgVvbRlXZoEa4fXJUtWQuq^3)~#pe -l#PBA(XWm#vJ6H-3wA&G6HeXQPn*|O<R9uVYmlhI@7Vj~L)&jIvKU4}FZL^cIErc#d}4aHGhUakcrrC -vXi-Yfo7F4I2zRP+gK?o0`xfw<j0>gcf3{L9UJ9i+xG+S83w1c4Ss1s;zyIWqvn=C)9yZL4LyfDyFLd -G1Gt<NdG>+9z^eZY7f1+-Ej8_RiuQqB?oDe>|VA@WbfeJ-9{LGT8pVZ|~l$#N!3_hE~>RW_59Mx_>++ -c7KGZyFaCyTC-u~3H-i@0QQsd0Y3A~fREQxBAJp%Lev8cXvhLi)*B28BkPe`0`?n^K7hA73yK>hBAUx -S-dtN|nGT(`CAS$b5xRip4w#<VxF`YD$YsCJp43AT$s%rUpW&%s{wc(m-C$RRehuCmKTTv}PbL*t&sm -*_L4k@~45}2QsLEVF+@lf#C?UsDWV#@~DB~2{NgHVT!mB&2j~iGs_l4&MaTN<U-3AFS^k3#mg?VeDT5 -y4PTI14GmwATYc@#<&1dgy`%syy5;XM;N|v<<!>?KrS`_V40w^f`62^eUN5a;pavjh1oslH@&RhvfGq -KiLhhAb16C+jAfGWZJlngKL8Jut4(Mn=BI;jHtK?3EjP2~+Ewj|6)`7@99XU5M-uKP;ewDn7ki=EOMh -<ti0=yP{GOiF@`>X)32Cpl?Yr*TkV8Cm^Dg}5gcvS(on`-$=M!XihZXhqMH(z1EOKY_P8u)sJ;0oyRR -~hj#TBQIlpVt{c>h`tYG2o^0x<+uNlt#Q*Ue$<~%NmVT@G;CXWNud}0P|A;UNWyMzzgOTp3%tKu2w*X -VJQSR94P=-yDGp-<#h$%a#v+fkg<JHBVH~V2=Nw$V79D^7>V&3g?O=Opo-Th#EWIs<KA6wGgc!^jn7L -*Sq9{6U)P8i&nk`JW;cy^`MkCKB}NK?*s+%i<<TQ~`zAk!-0f-w2)m{bNJ;@-P;c@gh8*i^1yu18g+N -XU!1Pf-z10)2YQJUxR!srIswu>aXO#jleH2i(ctTu~cZatUNV2Zd$P=Obgh^f+zxWjcm^SP=Ag}r&YZ -$VsFFFlUHrVv*btHHiy!arS`s!~P@S=E))gF1&*WP5ni(<uU2D~I*f1QC=h738>*Vhn$6zWQT0vXhm{ -Bk5vSH8h)LIQQ=Zy506P)j({r>j=*f`Ihtsy7tkXUChbF`zq7I}!}no9gp0G1wbL*7R)!cxk-Na|}7t -U;D2k&vJ<`Epl)4Vt&^ttNJi6>E#A1L~#SxfklNVZqSe@ZqSe@ZqSe@ZqSe@ZqSe@ZqSe@ZqSe@ZqSe -{ZqS%4ZqS%4ZqS&xz1m>n0&9bbJFE>RuCdk_(zJo$3KF$}VGB~Vf#D01wV~k)(zT)C3lg@W;R{l>q2U -XXwxQt*(zc=D3lg`X<qJY1mM>m@q2&v<*p@G-DYtw<S-Itlm*1<rv54FB`N1?^*dP3aNaiSL8k<!ojZ -Odew7QT2pkGxHfc<vgI!1J-6-Ns3;|@l2j~Yjc@#8K=bcYj1s^Z5zjOd0oj#R^s*E6E~zBp2fA8%wtH -=J>#27bJm5#0#Jkx-kyua6O3^_*5Kg3sF+v3#xwKJQ?}^0^}Tyo(Xb=ZfI-9!4ymD}vAa7_oe=2tFTR -#PYc!_}tHk<#R>w`7k4v&sD+aql{QSR|TJsGh+E%6?{I)h~;xt@cA?&md{ne=d+AhK34^w&og5ATors -CV8rqnF`aMsvneq5xj7P8x1UXcxzEj!z`Ffx3e0_Ojs({2XH#JAb8{rHZa<p>bDx_dfpz=Y6qx(m90{ -!3&!&Lyb0hC<iSI~q?}F~{XB%TKic70?Awae<=At-95&~o!V=jtwBq2byG3KH;M-l>L8)Ghtb0i@^wl -SuMmm>)QvW+p9ia3%N;N1-j_+|U<CI<91J88Al`-C*HYjlF5gl`WXXT<O_K?TCM2Tw9$c$uK$;M;?z8 -8N&}P-O7!!Ly7QUM46i`1as=Mhq_#)DC=maDWkGM-o&Ce0%T`BSvSFNU(005zD$ru<j}&mUWR}-E~GR ->mtFr5k@TQBEh;bMl9<h!MX`XEbAh{x|@tx)(O|Ge;p%cx+lVQ>+fL1@>#fU{auV$J`2~azlRaaXW_c -_uV=*aS-5Wf8yT^D7Oq?WW=1TZh3nSe$B5;#aNVf?t3xcGh3nS8gAvPT;kxzjV#M-UxNiM>7_od7u3P -^;Ml7F&>(+mO5zA-cy7l)nV)-mwxBkP7SUwBat^X(^me0a<>t~Z|UAIKIZvAX>t?QNu*R7vTu65lK;k -xy+$+fOqB3!qAHo4YyON8sz&nDNpZizT1+s`JqYWbYBwfeESpxBY>`0*$s`o?8P%J5@fRY4BY65pldU -a9ZVb0nN5zRI>d5o}`fYR;*qiExJxv3a%ba3b8{Lu_8HJDdo2_z;^{>kcQv9X`b7)w;t8@{ivh+Qf+E -6Ecstc~aDjACw5!@(|lV>sltlwLHW&(7Kk1@D>lTS+m|^BD}>zY}Tx|m<Vt25SumYEhg|5zdgie&9s1 -ZB<Rs0Hf!cu;WSAF>)5QBYlR(2u#U}|xmMVbgdVX3&9%agB>2o`&0H(&NP^F7*37lSj^z1#`xFCS8*d -+Ez%%={;s{jo0t2{({Tu_9;mF~Ae24)b|NNL|5^{JSv+R+=`*wgeITO5RSJYfJ>_~$5?24MJh8;=pp3 -RrJYS@v4j<YLjt{QeEq2ug|nyZE#N$5D+N^{k4njlB_?P0c+=Bi;wf{q_%TWM|tb|k^)os9VC^2hBAp -a;gaEsP|1b1x&h?}{T~<vYBA5xep&<mGsum<yh;$uzh3I+9LUI+A5Zt~<^-lGQe(!@fPt7S-I>>qyYH -!)#H_eZ7vPZ}UtO<PBbAx}Q0(Fx|`ZS4^*99M>4BnsFcr@IIR|WB@+k=~^0*)j|_kubC@q9m#xhEw;Z -(Oqif%E<;Ug4QdZhe$f(N@#EfQ*6^B@Ud`O=n${~u$LiKsuP26ib^F2fhQ1@#k?h~H<ErOo^z~AAcS} -<niAf`q2T85C(%6hEt=L~x%(&8u@uJcNo5jB}msh80X~vbA8vq<>kzbivn6(*BWP$x#f&E*d`Nk|<<X -6TNW}$tfohq5w8FH*DLmBb67p^mcb^Sa8K1cTLz;;5a_RXlR{dhA2X4+>}lLN~{v*RsC7(qj)Ek_waL -#Hjr7(qj)Eyo!_L#Hh#7(qj)EhiblVz%WJBWUQfh1o5d9d9|q2pT$VIm-wdI&C?}2pT$VVHt^L$6GEi -f-TsV0Y=dCcFRRZ(Cl~%ZA&xJ?0Cy%MudC@84>asVnoPim=PhLD~t&FTxCSa=NcnIKCJYjC-IgWj0pL -RFe2nL%7~E97$ZVH<BSOTOfVwkGs%dM4>^PxHiuJvYZ-xj`qnW5`Si6j0{QfHFar7Xbut3^^mQ=;`Sf -)&0{QgyFar6|9mo!WeEQZi0{Qf9U<C5%+sFvy)3=Ec$fu7j8n&KOeOnlTeEKM+nWaKLTNx4Z*~W;F58 -K~V$Y%#5LOweg5%Sr^h>*{2MudF!Fe2o$mk}YKeT)eCEPBm%w8WR-xK|3nAK<|V!5?Hq2)>^YA^1a#2 -*Fb{BFlu}d11?h;CW%ogy4B$%Y@*0VatTzd11?h;CW%ogy4B$%Y@*0VatTzd11?h;CW%ogy4B$%Y=M* -VatSkcwx(ge0X8YgnW2m%Y=M*VQW}drZBE)W}1pSl5tHN#u?6^#)p1Fq|E-xln&)jceDJfQoBuM9qlI -O274JnqqqZC7{N`Dbfcj|a1-RP`fIr2m~JC;h-gGM#0ahkC%tnBZc3wjy&QseV<**na35NaLU25XuGD -r2E&@NPz6b64daf~oi*l(D#38sSce0BRbat5Ady^5|_jqWO5lG?q4MuPuT6-TOkiwaEMsN}Ml>?06qT -G&sjG$c~Su=;=KF+NZjNraHy8Ol=kk9EsMsRV!s2Vlov-v6`kk5rqMj)SF^`*FvbMF8l=zK7LgTEBr4 -rZ=yWd!XMZ=Poavt-X^MsQ#1$rFq~J{#9Ff_92Mdl|ufsYebof_8ms2BVF^?7=;ZpxxzFmK<6aG&hbj -f_943F2Nya*EiYC2-+!jUuOjE`Zlr@(2Zbr2TL2R2xiakU<4OU_p;>Bd!TvXG$W7?-Jk3b+-JL&zXv4 -@bNkp<p{c;!^-GN4zQ==X6VXdxen35g`E#8u1^Ndxk8NTE?G#V4-9gWQ=Cvb?pq*kLYa*Hi%x_{Tpvr --7!*mGj+xgv$pxxzh)?V}jm>E~^!A0PMJZdxmm|N$!MACJPm-r4G_evPf^~ZQHFr3GE`k}O9ZkSCS8V -AfD;Aw#hi<#qW0MIF5W>Ad)hfdG%v_N-&+3Wim!Ew`ZURKZ!pm~Lr5@i?78$4>X0GOweUWY*N8@Dq8! -`ZH$K_A*4o@6-ZKhwj?k6Mi88TAb0b8V6l$fu7NDV*q^-^WW4Dl_ITu4Tl_XLciVv?AogdVnz8+<7%N -FQ0F2j4%Sjd5H}g$~9)!GOuxxzqy5-B2;ZOcU@)#6LS+U9w^>u9v@=_?%yPv2GnrOOtK?|<NM#--~|+ -=9J9kLZG;zRcd@&KijL+Lo+UW8KSNOrhrsbT%1aTB>^Bec5`p@TxovDXaa@1y951biYR+C{qmHO1UlH -yQI37dnv?8iGyODJVQO&uH>}n&bIlF~TDx#XrUFsRgXY?W?a6GzLrig0J^e}f2)to)X97R;KIm~*EsO -H>ywn&MXKdkYHYR>oYY)pjX!E+l?&6#aHPZ8DR9@7qieH**L2;{SeHwcJo&fa9nA*$It!McN}=KOAUX -A#w$KdYXB<1xxJ7*WmnF?Qt;)tuSD4mF~hvj^BI5`EAIcwInLb8doXBchr!BfKF+RCBhQT{+PQy_apT -=!3qU*E!J#ef&5ha16UxM-kO*ZdVB8bDGzBL^Ye&`Fjx6oLk4*i>T(@_$fxbeCBrWoI_M|ey#c*Tm-& -ZjScp#m-RsOLEoVM8sxK`H+_g|HaplNA*wldoaYasn%X9cKImi2YeY3?Zt^@uRC9JSuRn-t&R%4`A*$ -KD%ySM=&8FIRBC7e#7;oT2AM^u$btVUNiEpTJuf)Vu%f4u^evOwEL^WsEvQvbpW^)VgNf6a+ZeydKii -ihKGDJ1!*0E_oRCB(Urv;*#^9MNQf~e+vKPwobn)654InIRR!OkS2n$1(J5{PQfcdN0%aPDXK0#VIb> -a6P!T$MPgcmVlyD86B0UQ%Pj#JtRo6r!55yE%e`sHS!^Q4G}VVRMfI`^|mo8APOZa2x>V_UG3r1oD|= -R}Q5?v-?@5s12Im%RE4B(98xl4LH6(+s_67B|@`@d7*BIhzC0!IKe+V%CiJV_?uhR2rz$ku@rEKzj>4 -+MGdjB;)M-`N%P79#W{Yy7{wu2*m{|7ILJT0kF^&k`DfPh*l?78<_dogYL{lOv+2fB{<(35z%f*_5l8 -xGyLh*cBmJ{Sc#*=He!Y3Yq5k>(Jm+w#f2NnM7*5~MY-Ps~XYXeQ*#*YQ``Nv`!N$S+*?yi`ICnpL>< -lAt42RWw;CO81@4=z_<{oyWaOS=_!5c*!xt}}EUy2j=bH~|=;lTa8+F;|j{rmwn0@$}rY^!k8es+{sC -LFY%+1k$t=1&jL5*)H`ZfEO{BldH9_&qpaKfj+H9F)n;53;_YP;P#dV^t`Xn?0nSfqlEq8efWtF6#jf -)i=+pXS{rx7kHb7a=PXaZ+LK=zPXW|V;rV$w)5P^QTn+7#Zg3b$JAfL#&;91+c-o&(@RoFk(Zk3?O_D -=ZS)i)m_HkLFapPYcsC=kZx_255gCy~jKIF_zru*HZ)1#L{v6%JhzJ~QW(0wwQyUq<{25bU3jcs^8+Q -oi&mNDE1G>aF*SJ^e3cxZ&rfcTtenxcpn<GJ>`<T&zuB&w<5$I!ii44}JbBtg<9oWDK=F^FBMlhdFs` -p?%ojl11=F_P@Mz9|Bvt}ZL)f}2+1om!nf)QPqS*D>#EpBJTG8{Rpx$`#|u?$B_YJRQyF&wlG9-uk!> -PT26j$dK~+tcGL1CducafT7kwfSqTGRP~<cd*=$SDN2X!H5)jrEexLG6E~qahefqPrG<NBd;{WIlL5k -r5U>I&>_(3&D$73cyxC^Bk+Pb7nLHfG_#NShP=|uQMMb%E6p5J&xrJb8a1rYpyC_S3++1@!7imsy+?$ -1$YV;8SDNh^Vgz2+E}n77E6uWBlp?P*yPtWDywdD3UL}xMn!U=pBd(;q!Ilo`pV@IW0$80c<{Q#K&EE -5j!0K#Oe@*25)c0VQa)NCO(m&0UtfNT(G`SWc73rUo<bS0i{d1D78`3{~)t^I<UO2_`2kD>YDb@p|f0 -}1mdy)QWo?FKVR)tII8LSE%m`joVY2IM&ApO%EQSX6#CRj(2{+V0LT7~q_T+aX_2#?aWiVi^%VH<gxD -Uv*MCs;m6^30uL`5?(NcY(hLNuIe2JOU(n=7!lTL6T?g3hNG%Jad!R7(uK>EiXv&%+n=+4uLOq_$DJ* -Wsb0Ch9uAIx~q(MDg5QcMxKty^33(_WklD0l_`=q-`rr26-k_#Zhm(nRuQ&_NaB1m$$E<<&P*5U6OuS -H-Rc>vA{*JyMiOUcBm3qeiG!7gJjo@#+r_;S%hRr1JQyrb9NbDp*JWks6Op}R(=7Te9~))_L4cE;j9? -RUl9x1*9XiV+5ZR#%EMA!%Vt-BCk~_v<itNzL#92ll_(?V-$PUeRum&SLG~2~y7TKZMPM*fd4(TOY+> -+aMgb_?UwRnr{5Ql(MaZ7F=O99!T*{uf|f%~wHIV!S4yV(4R?2y`d$XjyR%pyB9d+-1wa37SDkL=Lw0 -2@<ehg9Y_MRrJqB~xUFX2;YBAfGYbN+LU?oe^Y*nrqo%Ms`TMDaZ~r53yTZ7iD*B>O^*E18)G39nu>& -WQUsD1{s0-u#=r%WQUqNc?m#vsJWM&5oCv&dk-@L_d#tPMRw=_O99!TCYRKv$PP98)n9}A(9fnDNu1_ -!4k?IRa?dI5Kt9Up5lNgu#U04!Dt`}>INDJ{5~n%N4knT~+UY?OXKpjkQzUWb`dCAd#F^{o`GX|R+)1 -7#NaD<$VhuqON4rBv;>?|6#{x+ly=6ucXO4q)DUvwaxyo8q_oPVT%$;XTjwFtD$dJUDyU1FFB#w5-L= -tD5zegr<*j|eyPB*ViNaD<|XZKDdarW`%9!VVS-XV#jgCz~&__2;6iKAUYByr}CuzZlj(as{0IP(`+N -0G!)CFv=WIDa{Il*NE7j)QnTLmKBV$NSjj5jWaiWOIc)&Npj$QAZx<o3*SY$m9Iw<a*xJAd&Nzlf%4o -Kqluer&S0Nshs(V4n`oQN%j)V@!>K<1o)L#81S5VWyPZ2=MrD+;oj&O{>n-o3J%C)EKiXbh<e8J`|UL -h=rbH;hD!d=u6%Zlp;$mC8L9~AJVRchpH1pNn24ta7}6)>9m!9GFZO+Yg&`C5%}`nY#n9&zCdm+={Nf -k`Ud&%?Wxz}0iyaJjZhf(n0ne*14lv+3^~FI3JfFVkXTWpmi!%&(t^eX215cDbdIJ1C)4gH(;_Mge7| -I0H&QJr;=i~ahoIv$t0e)&3lma57pCJP3pmByEpluq0h_-78LfWArh-s&WAgEm$f~a<D$j&H4K)=|lf -9<W4Q)vZ3R{J#sSsl<2WOYzOy7hu1K|Y7{ul3RWGDGC^izDjS2z`EWR71K$i6cQC$Mvrvj}scI*gph0 -oYKF>q&cl2$m5KLAdj;ef;`S?2=dtV`3OUh$F|RJGL#D`DyR@#P>`56%77s9`EZZ{KQ$hXG2r?4aFPN -4v0traz>n-9?GQ5r?;i4i5p8?OtU-9}s}l_PcYH;mE73dQt4;>|JHF~*0PpB#0Pmm>lsNzY)n*2~W`4 -Da0la(*176R*>SX|<+RK2~man!kfZ<ZGMI49!>JkGO)i48iIco`a%U`i*u_gYB)dzdnuUSj5QT>`%3+ -ybvVuiz2@N4pM#Zlz1dF5T$)bWyUTB?*8ywk7PzkoCOH7fud#;;jrP~h`5ixX8mU-vv@zXWAGUwe0-{ -Kh4|wxi5Y1oSm+bu(1@e7&9lNRgc$)ZaW*Pk1SQdFsp43^f3Ky^Em&&_m`RDr4MJEDjXFIEV#;Iu{42 -KUftIe-&y|+%WjNP-yZsP4PyX7~hu{7zzY5z>paF!!CxRR)c7?iLZLNfg$gae0fF>qbeXZj6^^e8L9! -&BdiNZjW89E8lj&fU!Kz=YzRn=Fc**-A(ZBv9$_gU9w90|9K<8U;pQ*Ts}Z8~<ID5vUDy;kNWCi-ka` -#7bwPbHHbq}v(C>o02J{FauL1oO<aJR$l?q4=1M<44{~+Wwtp8vxAoT|e0kJ5tA^UPzy$c(%FR!XUh% -MQdSM^hn*EKalY|9*^{$MO19wD}7UtZJig1oNlKL~kU*H1xSH#7u!jp)HcUL*P`$ZJ$T1$m9?r@Xu#u -G3Ey0#e^q3Wynn9ooZn>Rs5OIf!Qpc4!XbnSveK!*(?c?9d*z>vvTIq~28(kb0Mw*TW88y&Bl5IfxmB -otlHx2vY$mMrD8=b~4lukovA%K<c{+0jckTygJq3v2$|}4<0)=2l3!hweql2jSxFH2k{88gL4p%5QQr -byYvXF0#YMP1f)g?d3EU#)&-<Sm<mXZ5c2BQBWwsrjW8FG8X@G>tw&f2h({=Pa@}f#C}MfoqedvUc|G -b~C}VMudRHtU^)AS3gML?4K%N`q+Ai^(Chnbycqg+NMKTXJ=ufW;NPT)LAob}mw3i=VW(bCMP(x6J^% -{Dj2n!*(We+z!+{Rc5Y_q}^3Tgg|ZP8c&tWRShu&o-4fNfLbtP1z@%Rz=J0vcjS_}hyAsHt&KH$yc6v -1qE&OJ~tkh5M;Tm<dRY5K_~wE(&WLq()c>NR6-*5RWhs?xz|ds&5>`BSdt=xVosnaS)FX1vthFMg@-X -f)OxrUa%TrA|N$F$V)rOD3)=M8eu9RHNs3lYJ@Pi+K)(tJENb1xz!#4N@k2lfSMWO5uj+sEZ~R~nFSn -WGiCut7|AT)D4a3tEn-Y&y+!GaS#N7%dDPz}mq+z3SjBFo8#TE+vToGG@~HoySRR#b)a3H0zDq8T{9U -M_F=iG;G;WRH!6Q`WARau*Xw33~IvNM@;Ok;}RD-XJ<xvk_*h96b)`dM(E=FD0L$&tRMKneaJ`+$6L& -6^FVF-Juhav2t9)`4sJPZU79mK;(r9I?fq{1GmVWh$ys$rzk9;#tTd#HvX?4f=N^3t1l)Yh0yJc?_~C -LS?Rvx!f|c3eLNdFh>cD!1e6DY+e2gBROz#Y4ng%}zZN+i~>=QDx&G^#>s@y@}7{cAN*FiS4+4S5-jj -U67aF#G}^6Y~oRDV|MD9*p6d_<mxW*?KJM4Py`(U$izNhGYpELLjalF=c}jWKA*YL5c_<^=7!wo^Se; -aV>a^*vCr2}iG@*(5EVUU?~Rfkv-fU@eZE?{8)BcYhk=Dr@1jxGV|LM~>oL1%6!w@^9hE%}VuOUz9<x -<OZI9V1qqfIvl~LPc7JSt9m`yLzCuY-&>K?P{MR||$1yJ7OApT@zWX#SM<vnI+i*${H*cZsf_D=u7Oh -D?p8Uj+^1$k*V0f`<5sqccJ)$4O1@(SuH9N9L@DKa@`IW6QyK|LiGM)ed7tzP{KxiG4yU}*I!fy|ME) -Kf6DSM*b<fYej1<7h?eI9eg+mx5ZyWeVwd@-UF6G73-%$5TIr`L)*U;c<-HfqD~<43`7-E*^)uzr3#8 -Pm%t*uG~)?=XNWLda5QM^%SHws-H>)q@KbmHmsi#*#-R+R<SGksX{>NDa^6~ekvE)y8(VG7umZD`l(P -r>M6{!i~6ZpK<X*T>#BaLDj@ZgbZ694H36xo#4Kaemy7J(6*hgj$lhIH)0d0votn0}$lhJyEmz(q-A@ -HUURM<)vUk@s1bHc)&qel5>3lA-cO&|#`1>t%J{Q@$QT<f)`z>@n52RI8Pf4q&o|0BkJteK8dJ6K=Ix -n(!TIWUfPV2nL-U*#2S9ggo9CGi3BIwB^(t>(2QCd(vCH5iuDUlY`Pl<hqehP}9CzD7E>d7S1f_gHEw -4k0$p`5s^`ywr<CzD7E>d7S1f_gHAdF$^gT7OsB^1F~0G~b1^p!NuIqy_b|pCc`(Q>!`Bf_l@NBQ2;m -y*bi?defUnNlR`-wU*q7>aDqvwjMm>bwfjt*Xf5F88SuAc|}H=RSY7p$k>XCLgW=0LK)Cc3SUu&8}f< -_qjc#%TP2X0g#^w5$n2_6FhxH}F%vaED;a@2uPd^Q!7za$C;FXo@zR#ELd6W~$!b6#zY~R$Pe8?6k$t -)9Myvj;^b*XIQhl{NtK<$S_EqHqqoq=%bzlEkaOj#@fkb}fn$e*|uH%}03C()_WK1A`ipY43nCT#L9w -YY8)(GTJNu>8{o=gc;1Ih?ge^#V8EQe$!!*EFEGW39Il<e1FKp>A+WHdUBJVj2U)6ErDYMHt)pF$Z5{ -V6gLVdkeuMReIu$p}=R(h#7Y*&-p)Wz?i5BQF>AfMo1Nf9FD4;wMZBX&5}W>M|*>%|u<M<+X@K=Aqm0 -MdTj3jTDi6coOT;Pu2-kPl~jV(ervnpn6h7RP3ivMnV5sQQ~LpR?2H1zmxI``p;5kK|7r(g;4a9lwHt -IigG{uq$v24QX%JhiLa7!Z%t@OYP@1UV%Y$jch$_Ul=hGsgw4BVK@knL5~X;J21SI;{@GH1`p;$*wb3 -BOMKvfQ*%qYOs0OKOP1&DJT1!2BGhU|DpOrCf1J=ZVw9U(;oz)W}OGzqfKpDMLfsN-qnLlqpVy|i0C! -#q<o(&o0HX!9CG$<mc=ADh`Ip5h3aRT$54H?-nPtuk{zmv_e0?iS~+}wg&=DA&UL^=J{hn;+&A{T+mb -_;?*r`;S>S&1CMN(Xo7@|#?QD;JjQFE24H+0>~MTe%2Y4m#Jkm*c!S1ui>vkTpl}@?o!gx>Nu0x_q~? -bqgWP2;j13AHVF`tClVPM>GH2g@>KXp8U_klWJt5UhL~lPkz9#zCyh$76O+4LZrZ#fqkFpUYgT<J5Uj -rb9Y7H>%M-(^!OS5ADLcxM*kb8SD(@Undu1zvzw6`kUfml%`nY%!(|Z}B`*+Bc)WHeBO#C-jCcn8oaz -2UUtqfb(C;xlc}D+VOs_qo|8J((@%d`3DUe-^WI(nu(g3oJksQbdMhYMs87YC#A({eJ!_#ZmGa|HZ6C ->youy!*e5s)p6#6bEO(U;Ual4t!-neJKtGp75a(98bN#Yn!mGE`bjwMxsWR<Tp9(qc+gyr%IKthAU?7 -5}+B1raUL+F$V>%(`6hMvis4;*A*V@<QNb5nZkb9rJINUTkHlZ?!5aLV0<TpmO%_h>oh+|HO1(G5epH -?yF`0p6Om`f53Dv-v7dMFW!G*x)<+{nQl&t7gevw|MqVTc)|V$rhCEuN2Yth{#T}(8##+a6dAL1K%nN -~S`CQ`V>SYbY1~>QF@DT;Au-3gi=>Jlv#CIF>XTF|Lp40aRs`XjCn;8jQar>)7Ll7LsaJ*?c!=$<s7z -g}AyNOmosm*J#1KL`Umj%u+uLIdz(YIE0GzKA48X5C$$%(1WB^gq(+r3bKmriy`0^|RB9_d6s3&GXWU -mMiJN^L%@Q#ZN;2oD35XJut;N^o1;LEA9v=H@j!wiU|5(C0hWdJXyE-FPs1XCHnJ8m!_4xcd~D#!>B< -wLyoiCUj_2E>6W2E;C(fI@7=84%$v21M}>19%7fG@`hJT^d=x!GPSX^JFVUU{g)EQkIeNyeeg_7*C+m -wCE@n>KbS-P_`LoxNP(5+TSqU+vvY#x_5;Cj_KY^{|Bb~b?rYg-COGa#B}er{M&aK@K*W-ru)V1drbE -R`ad(>FK&O&bZ?u#&vdU4KVZ6dEq=&!?^yf;(NUYw#&oYf0n@!d95UTo#E9wM7mk_kwXni;ziF;A-K% -E8bniFTnC|tp&UDXz@2`@tx6~I%m4O%RKk`7lVE+r#y%+yuru+5wpP23iOOAFKdKc)wGTjSyIn%vhf5 -CJw*cX}Z1^W`yy<lHvx)<y#O!tC)mFZrvuQA;Vb_LV@#`Bj<_txokru$9jN~ZgXwTkI}Vy$MnH^6TY9 -kl~*GTrn4S4{W(e~am!|8Fzh^M4J~J^$Zfy66A9O!xf%HPb!+f5UXo|KBp*^Z$2D_xk@+rhEP8Z9y6N -3Gg$f`w8&>GTl!A+V+;Qp8)@p=`AKe++qU6Eha$RVgkf1CP3U`0>mvQK-^*i#4RR3++qU6Eha$RVgkf -1CP3U`0>mvQK&8b5sI-^>l@=4A(qaNsT1<dSiwRI^F##$qCP1ad1gNx_0F@RKphY~QL_FgEW4hP>|IK -u-|NlSJJ^vq{A~&-{&-%yQq_spr2YU%s5$)Q<h=_J=W<*50)-mEGG2Jo7NEOHsBM7;+A7um~*Y@L#AR -5_zk`Y8B+fOrsXk`0YMi7ncQ13ycs6)L60i6!@9z-KMXxmWYQ0;WbI3ozmwI5>y@@YT82;|d#iV?`C{ -R|_JPy0DWAfNX0j0pJ*Fe2o0i4h^6K}Ljph8Yp^xylIS(|(;1$ftdT5y+?AYa;o5OMP!si73c)JKf(? -A_y|wev=UhzJsR{Dp{sGIvIiBJ9v`gWbQQI7+coF#N5D$n3x+Gf#5sXG~iV3bO)OTL|mpjwlD(0cl0p -=!FOzDL`=+GjEIT3mk}{B4=^GoCUs^n>tbRaW<<#62qQv1Y_{q`K0KN0LOwj1>q0&}nd?G6Jeli4K5W -qHLOwjr>q0&}&Fexw7Z?%pVFOSX@?ir|7xLk0UKbN{A0uM^(ESo+YQqJHl}&Z7Wh4Z`Qwnu4Q{BuK6v -a$+wlh+}Gt3s0!%THETTrqx)yXRW>Q$yXc~T>iH`U2&Ix1DBx-T=50bwhP8kMPTUTqQoo9br4pgLuWZ -|N-&8l2+$R!Y>ROm(uzG9e!}QkjrX4<nEdUzAa1LOwj%5QLoST+ayP)5#_;6Y^n`mkIf>$;*U%*yN$| -WU7-*9?DLpI@#o*=47gKD<hCk=Qc(lpH4QDnQ3%eqD*9}iy4L*k*O}WPACwW>S8wtQP`<2wp%C-nd)K -(33VY;U2M^8QAmk%sZ(9-P2pJT6yNAm;#BHX7n?tXfTy~6p5sjFR2Q2+97&z(;(2bXQ_5U$m#2O%xO< -Ti!CkhMx!^8O@LX`0CwMNn%M(1e+|31ddCup8yFBM}!Cjv7xry+WI0X88Rw=~8f6p3)1E9ZWZWn0m^9 -Qz&IQ{v1)~El|+L!Fsv1HfI{S_B@6BV9OIN3yG<^$d!&&f={f8fa*l&i`vH|6SXxm-0;OHsWjN>ndVq -DYGBC5q}B;MstmWI$J{n&^5c@*E!3h@ar3cyFx8wPOz+K;YhiVg*k|#9lj^wIg>zTmQdZ3gXSrPqgE& -MbNUr3!k4(c9#H1^q(f2vv#(U+x_9D2Jex6n&{2~c#ZVaM0XazTcn>Rrn`vqhfg!zO$^>4{dBrJ6V^P -ZM7>^*Z?$ZeaVU1PjPC=rWigNVW?3%leG!kS-WTDB>+uJ}Hp}>GSzDF{>X|@4OrTyKsMpB$MS*dNdYs -62vy4CE*_M3~^{8GFsFzE7L`C4a1$$>(RtD;Q**{UeDp0SH;}QqPB@R3{4m>xm<a6UXP_L1^N&@4Y#B -%(SSn@APrQMPM50WfUFVNqlkmHgRl7Gn{(7u7>eez|h@77E4*6+sg<JSp`JZy=u*u!oRmU!4r!cq^rM -VRrh+k{yUyF*y!VRs43J?tJ~g@@fItn{!4g!MganXrL}JtVC1uoc2;4|_yd<6)1xSmfL931Pndo)YHU -?-^mf{hkx%+wTQozWrVj=G*TTVZQxd6Xw}(YA0cy{ib#i=Gkv*H({RrruGo#*>7quVV?b__7UdUZ)$= -t&wf+;yIAbmZ)%b-&wf(}2=nYWb&xR6ep81C^XxZum@v<NQ%4B%>^F6kFwcHd#|V@2P#T!m(!e~Pmi+ -0Vwyf`s*Yp{}yz!boOPDua)8`2D#%uaKVcvL6Um(mIuj%0DHqADF@M!a)o*||$QG+}~OkXC<bEN56!a -PTszCxJiNYhsd^Bie<jxf)Wrmqp^InwkzVV)yRFA(NA()3~%8~DVag>2vxgBG%ZPYhbf20k%pAshI_p -oMJU6N47Afp0%r$OgXsXdxT;_M?St;M<QDvVm_uTF3^z{b(T@`1YfPY~b6E7P5hFKU&BJzWrz+t9<*> -LRR_qqlK*U?MDk)<=c-IvPy26(kd`n1vZH$ut_vApNZSDBv8-F=Nc<Fbtd!1W9Bqr-gwNMA<P?(nX`m -><1urNFptkO=Lz%pJad6CkI$X2-EU$ZpJy%+=J9#vGGQK{XJ!fW_&jrkFuAcdnaAUqIl??1&s-zS<MG -TqVIGfXx^tAteY-6Z=G*N$VZPm#2=ncBgD~H2Hwp9Yc8f6IZnp{Z?RJMS-)?sa^X+zzFyC(X2@BXQ_w -BY!m~Xd-g!y(`A<Va1cWyF;Z@0&U`F49km~XeIgvkTCDSUf9C(O6k3&P~#%@pzwZ%Tg4VzZ2Inzv>BK -)rsbp4^0)FY7+nlZSH~m?tyw<+rvh4b(HTznKlxvvS_e0*C1gzW1NU32_$u&nZHj-~HPHA<l|#&l2Kn -_-2}rK#$;QZ|4Yce)i|v?%|!i<u-p5Y4e%Rf8WkiYn=DKy+(-JL%f+G#Ch<W(}X}gf5b!X-1p5HLY(u -y=`JN1T=(q~A<pP;sM&DaH&+R9Mt?I)2#kK75NGs%UnIm$vu`gD;!OXB|HhgA?OsA)pc{n1KsO12fo> -6kDfZ$Eev&iMpD!IH2qwBiNaOur_kf%s55ZgdJ%m}?znUP-nd#r25CStjBE*^L&0|8GnSMopv(lSqgk -)ahCJA$Pdh?PHXQwx>2!Wk;65{Oi_BtWXPH$-%LZtQ2w~0guwZ3J<S?Mix2#4!W_wN%VHPsAf>bJ)Ta -mIOjg%J1<`5jKvZ^`p<<oypCGaPvTV;3RLHvh4k5NuK|zBou&>0va>^yMZc4=iwbPfqiBPaZ7t9>3DN -Sysw=N#OSa>V2LBelHN!$i)XvH_PM!Bo8dWxd}YCkWquY4Akp$jI%8ZsPcIuH%<AMSLV51pnZ+pm=uv -bz!j0~Z;{B2P7xTFB9;9p0vnE^FE=JdU)rM(vER)y{%T{?D|_<bSoZkM-_0_)!76+5xn&giy(sW|;uF -)GWreI4;Axpi-j{*sTNxPVGL?KT1JRVy1nLDgilw;V)0Pc7^*Xz&ZT>D#`!Ep@-Yk=ZEgM;{ADC$Rfd -Sw8QZm&GIC9@e!}K%hc>OF;uaGB)ei3+XAY9ik1N8zE!ywS#L4Xhg|FpfllQ8epw!Dil@6@)un=tRRy -}XAo@AS63moV@2w!Dup@3g%<L6~>iUfxfbciLW_B+NT)FCQSxJ8dr?B+OI&mJbo;ow}C~6Xu<|myZzU -ow}Eg66T${m%AH<fq&{=K2Df#zbV3e`<)=nx8F2jzWq)T=G*TSVZQxl2=ncCnlRsfX9)A{ca|{Ue&-1 -D?RTCq-+mVe^X+$$FyDTc2=ndNRq6(%Z@*c>eEVG?%(vfF!hHM95$4<P8ezWu<_Yudw?LS0zeU1)`&} -o@x8D+BzWr_x=G*TkVZQxt5$4<PHetT~?hxkNudCP%{BYXxJ;HqZ-6zbq-vh$rIx-jp=JUWtZ!1lDw_ -X)c)~kTBUIjLAbzmc~l}Ui=1vYSXApE%X&O6tW;mo=p_`QJQR*SSoQLhQ~w+Zxj>(wBtmj&wOfqH@VZ -C!SxdVvjkBljm!;M!IcxE8e;CXw|ru|H|c#D=ilD2V+;Th>YT+u6Wv^VeqDhlvlTw`KA^Q)^YRQE5jl -P_Ge&i30b$qA20qADd-X)=LF(qDbzTqbQRGjHClZQ7txRZCNDiHL`tipdYcwwY6C$B<Cnj1N8#!i*wn -JI2Rk%woKY1&c#I2mPx|Kxg=sN?=Q4vfqHTRiDKz^QCy1?Q4|OG5(oGaxUbfhiIZJhCQf#3nRKY6C;O -2^Li=gUq}`HOj&l;raZZxJ?<I0#NaVf6wk*&OIq|n;Vxo?cRPr=Qg;LR$1^SVOeoyisaNn;j3-nhiDQ -%hb-^7RoqILbixL7$KBsO4Qxj?jKa$M2?uTmoxh_+0&FSXKt(}4e`;*x$_7MM@dO4`>1e$VvfLSp)IJ -}{NETOd>w*#KW`z`j;4#F3R7kG4$O!v^|cWymeEas$<t$$D9!A6X>lmn@QY%VKHYOl~})ES2+aKnabu -)JLl49T=wOb`lnO*e=3i58F*x;$eFTOFe8aVaCJu5oSHi9oRb?jBWnL$L2#b@1gstLAi%b5>|NF0m4c -TJ4jgH!wwNP@UX*#RUUSPu-e0p64rRwu`bs4iE*4TpBPhw`NTLum`{vp!hB+!B+MtqDZ+eW%n;_=?=) -e){mu~P+wUx4zWvS-=G*T)VZQw?5a!$OB4NJ$E)nM2?{XIlOi%$Szb%s+j6zD*ZJAIC+cG)f6;j%c3M -p;3Wpd+CM1ki<a=|F1(%P2E1-y_Un6^xA9E!jMS_BrBBCxO&@}g{8CKuA8lpC)?ytlPk7N}Rtg|7@u@ -MYk@5s>JkvXne10~_J8k>eLozS}Z6E&;{3Et9`DkRi5cAn&BKWs(PjRPtaD=<gt~&<_F|uYvd!!e*J= -2oD1G9Y`fT+WM$#w_X((mnz_Il?+ivRbZUAzJ5ma0^_%(#&A8k5vgQ|GOFZ@S8bV`H>v>ts(?MJfFD( -X4cgYHW4NC5^Q{lXaJ@i(<qK6&C10qDDj89Uwmy5o^#acg%m-EA;8{y0C#nPf)^z#O+3;-hcNf}+1x} -V*x!}4DZ34t;#CM)Hg$UX4fYcQ=@-{=%1QxKSk%npH0v0EQcy1gxLB**Rgosl)F|=i30*(VGsMw@pp^ -F<yu(**6aT1X1l2jxRZ_DK6y!Ie193>6(H??x1vw@R>E#<;#OZi+|8Zmx05bJHrggx3a!53SKx7yn>$ -%D2m@O$#4YRg(oT(*=-PFp6%&juDc+m{QD?aK+SEtBo*8!=JazC4+?Wn!YSTVY?Smx&Xj?aKwsdil^d -W}eOx7J1ke!eS4*N?77ybA+WHc8xIOVe^Dp4_hEC^RPw2au2&sSm9wygq0q4gRs7b-6U+_VYdjYJnS} -MwTImytnskBUCj9QyGNLBzx#yw_Ip5>Z@*>2eEU5l%(vePVZQwy5$4<PF=4*_o)G5S?<rxv{hkr#+wV -DHzWrVh=G*TjVZQxd5$4<Pbr%cFhjk&=Pum3Mn?}CDY_~G;QN3Kw4~<mHtxT%ZmdTBXZRCN&Hi3CFup -VcDbu7;s(Y`#e?&JgcMsyz7Fz1y#NR-q*f1_l#Iko@h!^A@0mWdN>TP7s8woFXi<<=&qQ?DNw$bJ-yj -YB_@Qhi$%s3#Yywk%Xn^rI~khUrIETmo#%grWP9+)(uculn}`C&vE33J2&1PHt_PIN|jNa)Z_%$k0=N -AUA0Jf!sj$x9)OKy)O>+S5zjrF$g&KU@O-w)syn>ppl!lK_hKBXk^-fD!`$tCpSA)Ak0}sGJQu|CQi9 -k<V}nh_nmJ4pC{bAg}(2M#F4=Ad%XSs4%LYQb?#D~I8f&v)ky+%?o*vKQ0D>F5k68y^1fbMCN_Ol<f( -)gC!Wgj@RY)f6VC#8#eXly%To=%`;9=ICh$8nrruk;_#LhzLeNztL#S0C1YN~)LtVvk!(YYn?a(TaLZ -pi2yj%rBvej0&kLt;Vx=J!JUsPU-jvo==NcuMfIA;Es07u845a2lYQv%!$>~9Hh+poVP!0o+$Mu6LR{ -XGG0*YytsxGmQ|65uHPPXstF|C|6v;(sQ<G4~e)IJ*9_3n1mjuLyAV_%#8}9={>L+2d;hoIQR^fV0QH -5a8_bI|7_N{*?e{kKYsE?C}QzoIQw%$f!X~L^=&(B64XE6Ol-Rn20PI#6+afa7^s%#<n^6{^k>%p^4( -i%0U!IN)Dnp@^KKwk&J^Vj!YaxairlOiX-VgQ5;$CiQ-6mPZUSqd!jfJ-xI}=`JO0_)b~Vj<i010Bl$ -g19NF)Q;z)l_6i5DhqBs)Z6UC7MpD2zL_(XB!z$c0$2|iIAS@4PCNP|z4Ek1uoOvKmkh>7_49WfE#z9 -S~$(|5!~C_ThP$UMYEXgtJ32t33@s5`_&NIS$t=sLtih&seXC_2PM$T`GBXgS102sy+=s5rz#NI1kq= -r_bfh&RMUC^y7J$Tq}8Xg0(|2sXq-s5QhyBaZM@3W<hD2z`b~2yuo;2xW#y2w8?m2u+4a2tkHO2sMUC -h!Y2q5JwFnA<h^?LL4lJgg8wQ32}rV65`xIBt(XMA|Vpw6A6(YpGb)G_(Vcv$0rgZIX;mPx$%jFNR3Y -<L}q*<Arj*g36U3{rbA>?AtoY~3NaCRREUX4qC!kW1{Go=(x(s;kvoN$h{P$xL}X1NCL(1DF%kJvh>6 -IBPfSF{6k;OMr4SR5D}|VdL@C5XythS6#7kSmM7*&@OvLM2#6-NS<(Syn7jAQM{>>*kLledE`WI0g?| -u=*@!}Uz9B+LQ#qr7)Q5^4k5ykPc7f~E<dJ)C(nio+V?|2c#@q!mo9B+3K#qnwvQ5^4e5ykOR7f~E<b -P>hzIu}tK?{X2v@gf&d9B*+E#qkOkQ5^4Y5ykQH7ExTjNm-?MV~gflyskwglwy2a<_4Q+Ca>(YWo|f$ -NVqIXL@K51k>au<Q3W>@i7L3JNL0ZcMWRX>7%*H+B$nV-BC!Nl5{V_ak4P-RWkg~LZXyy(a1D`If;)) -B5?nwemf-dwO@z35NL0bSL!yejfn0gX{%ES|3vIpfGW^jj1)-2;DX4=)E=YnzE@btiSqdrrXqG}gKcZ -eh%J!1@5$lk_k64HFeKbKKcOOv?iTj9p$l6ELL&`p)9`f}O^^mNOsE15_L_MVGBkEO}5?N_VWTh#Qm8 -L{ini5%QN@S%ek(H)IR+<u7X-Z_JDUp??L{^#-S!qgSr74k>rbO175?O0XWUVQYwWdVYni5%SN@T4mk -+r5o)|wJoYf5CTDUr2QB0HPDZBC=V`9w|PtTl<V)+EkalQ<hGaefDAN@Sxck&UKAHkuOIXi8+GDUpq) -L^hfd*=R~+qbZS%rbITH64_`<WTPpOjiN-Fo}xsWo}xsWo}xsWo}xsWo}xsWo}xq=nR%!!Q$$G9Q$$G -9Q$$G9Q$$G9lfgIBQ)EWdQ)EWdQ)EUHDKevp6q(UPip*#tMP@XSA~Tvu%33B;6h;#%3Zsb>h0#Qc!e} -BzVKkAVFq%kF7)>NM!zNP1MH4CFqKOr8(Zq_lXktZNG_fKsnphDR4T2#*BS29YO{^%4CRP+i6Dta%i4 -}#>#EQabVntyzv7#`VSWy^FtSF2oQ4~g#C<>!V6ot_wio$3TMPW3FqA;37Q5a34D2ygi6h@OM3Zs#)` -?h6@xM&hZTr`OyE}BFU7fmAWOjRaTbVZXYx}r%HUD2e9u4qz4S2Xhd)V55K6pg&q)0QdPph*>N(4>ks -Xi`NRG^wHunpDvSjZw5gBj2NL%cLyW+3#(40{-@iir#39)EmD86j{(1MHVzhkp+!WWI<yTS<o0o7Boh -Y1&vW;L1PqI&=^G)G)9pHja6hpV-;D@SVa~zR*?mbRb)Y96<N?&MHVzxkp+!aWI<yUS<qNT7Bp6o1&v -i?L4)`RG0`g8ps|WJ=w+KHCL%sUOw1JJ&`UB;OhkNyn3yTLqL*8qn27iYF%j_*Vq&JKj$S@_Vq&JKj$ -TH2Vj|)r#KcUI9=$~J#Kc^Y9=#Ou#Kc^Y9=+u8#Kc^Y9=){j#Kc^Y9=(L|#Kc^Y9=%lY#6*NKh>5wPK -YE$siHW%)LV7vkiHW%)LVDTZiHU_GLV9`OiHU_GLVB6uiHU`xM4CcTB2A$vk)}|TNK+_Eq$w07(iDmk -X$nP&G=-u>nnF<`O`#}}rc{(jQz}ZNDHSEsl!_8*N=1n@rJ_WdQc)sJsVI@ARFp_lDoUg&6(!P?iV|r -`MTs<}qC}cfQ6f#LD3PYGD3PYGD3PYGD3PYGD3PYGD3PYGD3PWwmB`NKaJw_;w@*|gPSaN;PSaN;PSa -N;PSaN|TbjP2M4G;$M4G;$M4G;$M4Ex3M4Ex3M4Ex3M4Ex3M4Ex3M4Ex3M4Ex3M4Ex3M4Ex3M4Ex3M4 -Ex3M4Ex3M4Ex3M4Ex3M4Ex3M4Ex7L{^#-S!qgSr74k>rbJen5?N_VWTo7RG?gYtR+=1HX>w$x$&r<EC -(=~Pok&w@Vr8X?m6aw|)|yyZYhq=siIue`R@RzWSu1xUO|2=GwWe6snqpaNie;@SmbIo>)|z5jD|aGI -t;v?PCR;X|Y}shCWuwWKjV4<*nrzu<vSp*mmW?J`HkxeNXtHIa$(D^KTQ-_(*=Vw5qsf+yB3s&?B3s& -?B3s&?B3s&?B3s&?B3s&?B3s&?B3s&?B3s&?B3s&?B3s&?axv2O6z$UX6z$UX6z$UX6z$UXl#7uzQUp -vJDFUXA6amvlihyY&MZmO?axv0Iii&9?<zl3bl#7uzQZ7c?NQ$4G&Ea-`0HA%MqN>_RQB`fEsH!$nR8 -<=(s;Z3@Rn^AIjY}IVH!f|gD4;f06i^#03aE`01=Plh0%~JL0kyHBfZAA5Ky9ojpf*+%P#Y@>sEri`) -W(VeY7<2PwTYsD+C))6ZK5ckHc=E%n<xsXO%w&xCW-=T6GZ{FiK2koL{UI(q9~v?Q4~;{C<>@e6a~~K -iUMj=MFF*`qJY{|Q9x~~D4;e~6i}Ng3aCvL1=OaB0%}u50kx^3fZ9}1Ky9ihpf*($P@5_Ws7)0G)TW9 -8YK@|RTB9hS)+h?7HHrdijiP{BqbQ)(C<>@GiUMklqJUbXD4^CT3aB-T0&0z-fLfy{pw=h~s5OcLYOS -JxTB|6a)+!39wTc32t)hTht0<t>DhjBziUMk_qJUbfD4^CV3aGV;0&1<IfLg04pw=o1sI`g$YBNOvwV -9%T+DuVEZKf!oHd7Q(n<)yY%@hUHW{Lu8GerTlnWBK&Oi@5>rYN8`Qxs5}DGI2~qypO69B%i=1==Sn( -yGlBY1QV6v}$ujTD7?%t=e3XR&B0Gt2S3IdD>i2Ky9ulpf*<&P@5|XsLd4x)aHr;YI8*awYj2z+FVgU -ZJ{WjwonvMTPO;sEffXR7K#FD3q=97g`$AkLQz0%p(voXP!v#GC<>@86a~~4iUMj2MFF*iqJY{$Q9x~ -}D4@1f6i{0#3aBj=1=J!G^zZixaR&K+j|q{tF)hM9@A!Azpuc-Sh#U2H%Y?XLfA^3OH}3CN2yp}d?hz -qw<lk{m+|a*!(nS#VdH0kMH~8<K5#mPw-E%_R@V|ROh#UWRF9~tu|Lzqb&LiHvCd9eKH#-S&_W5QPA% -!{y&OYDlA;j6|o4tfM`+T#H5NDrnCJ1r%`DQ;M&OYBvb`eBtzBxdMv(KkV`Z)w_n52l<Fi8=zVUi+d! -z4w}hDnO34U-gM8z$*MH4p+fOj1N{n4}2ZFi8=+VUi+v!z4xYhDnO>4U-h{8zw0NI80JRaF~jS)G!qh -s$nW3R>M?8u!gCKXbn>l;TonQ;x(TpcN3(}V+h%>xe>ErqatX-9YWNGhqPABP^)fIt8P*U+@!Ow-0p8 -mw2xH%uU7r9R{gJ5{jXO2uU7r9R{gJ5{jXO2uU7r9R{gJ0{jX6C->CkF2oa9~LPYGDjp~_=>Y0t|nT_ -h1jp~_=>Y0t_nf!Aw5V0S@B4$6LMZ8ELTtp<z5HBK<W(XJ&Ni#%@h@@FhGf;+@5s@@Q(1=KyA!<Y<%@ -8&sl4gh-5lJ%yj)<fgB1c5h451?;X@=Mlku*c_h^Uw$NJLc35G5iiW(X4z6*I(%h>95kMMT96ks_jEh -ENeN5?Q3pV;Q1FY;J^$*r<pXi4K+8kVdK*BF#;*NOO}c(%dAAR5yuLH;Gj@iB&g=RX2%MH;Gj@iB&g= -RX2%MH;Gj@iB&g=Rr|!Mo5b1%BSWl*9Vk{EC{Z0KQ5`5z9Vk&9C{Z0K@f?VM4hABUBI?5=Mc9W)intG -x6oDTmDIz~iQiOh(q={-E1b>*Mi2g815&mJ4BL2f9MF5CNiU<&s6d@ocDPllOQUrmRq=*7B6%p-WDk9 -tiDt7ju+x?l3_L1;E;y5Bn%yER0nB#~gF~<>15{raUCrHGTm`4aGF<TH(;tnCC#I`c3eU0jWM)g0V`k -zt#-qRR1%o{~6W)jOu?z^*^inpH=<Os{UtH|Ff$9S=ByP^*^g_Fc4;9&$Oy%+JI+%ho}x@RR^-F1 -6kF9tmi=VbBH%FNfB^jk|N^7Bt^)HNs5>glN3QGCMlv$Owvp>5aLcuQUsouq=-B*NfCNtk|OrRBt`Iv -Ns8zblN3=RCTXro7#ZS3Ohv?ln2HDpF%=OJVk#me#8gB~h^dI65K|FRAu*Td>O6+P5Sts3AvS8RDXtk -}Lt;o(GZd<u6snsPs+$z5n-r>>6snsPs+$z5n-r>>6snsPs+$z5n-r>>6snsPs+$z5eM;3$N_8KAco9 -2LsX9=pI#8)PP^mglsX9=pI#B635dRzuL?rb>N<>mGq(mh3LP|tZFQh~y^+HOHr2Zx}+wM=ORGAm6BK -G%H%X_gZV!s!wBKCW+Dq_DEt0MM$u_|IeVpYt3#HyJ6h*dHB`>KTD#j1$oUPOvG?nR`C<9$tO&%B5fk -rELp<~RaU%y9&y#3C_JCrB?MMdtP*Qe@PDrnqJUEo7JtR5KtV_02^>WG=l7aitysZj_@gfT&VTfE(k4 -05`-b0d9m10d9OP0d9CR0^I241h~O12*{P5Bh17-FSVZcwVn^Oo>yAWYpv&v(sP8DsON|-QO^-vqMjq -RL_J4niF%Fz5cM4KAL=>6Kh$$Xf2ijO{&3Grt>=BM=L4<hmDclG>v^N}98n+YIf6dabHse8=Lq>w&k^ -yVo+IExJx9EUdX8`p^&HV2>N$cv-1AcFd0*@KK<jy>^}N=4-h_J|_%vHp=5i)13;A`UGLY4_Eaex1w! -Syrtrz%8R@Fo@%TE)_uP-&RNP1QWzJAq~iM%^)nfTUn-HXJRf7&w9-?|rzPvEs>;uD^2nMe-Qmf1kPK -tG^XzrRO_bCCD<32`3s-t8PaJG$-u3`_e+=X>v$sWHy^-ajP7dEfgLLY(`(e?*A$zxR&`aSr(Y2_en{ --#;V7x#0Wfgg763|AG+bgzsMw;=J(vYeJkGe%MKf^TQ9jx(HP854#C*hX1gK5NG%gdkJy&`LK@=XP*x -fggE<r*iVSF&xc7uoP9nVBE;F}!x2K9eLfr|#M$T1=ME6$4D_e7gg66zm?6X&=))O8oPqwdM2IucAMb -V%$k=~6MhHBUd=@e``z&Pa_YVkx1CeV%#%9-ojLohE8Jk@TGB&#wWNdaV$k^;!kg?gdjOsu}bs)&t>? -V-0*%=^Xvok=(W@mtm&CUQBo1FnNHai1k><<SCfdi47K*s*#6d`aR;x%OK52pxm_W5v`5NDr1-Xz4?= -g()k3C=)&B>GzMLCd-)zd~F0<X5Wezy~PnC>Dt_>qveevn`X)jpWzL+cJ@;uq_i`A+NVSl-jKq%a4TC -aVfSYb>QQLb==73#`3H6_11?9yY*7}Rr5Lx{9YzMhFEW%8@Qg_>TGTCxt{n)ZN0UBr+V_Mz;z}+W?Ki -glyyFkTcZ5S!Jg_>vL6NRA#Gf`c9pQm!{!K!J?t7`iHFS-mU`F%VaCH239}w{ov_TqmI%u|>;_?lhdI -aXZ0@%ETPp2COYfn#s6l-XyG_`@!|o7PdDvaTY7e_dSmR;cNvMc?Vmu(sC&n^iJ~18=<`ZLuFrOHY2= -j^Ym@uChPYCmg@su#17|#gviSe8;-+nI$^X>PNFyDT!2=ndtnlR6P^E(Oi>^I+C%Zu2v-~4XEJp0Y>A -xwM)yDm~Wu@&;m$!(dOPzxg$hQi7TdXR~;Z9VAAiLL6%dR1WIsxh&BTqMNx{^NB*9Ctt7BE&KG<6T0; -CpOwL$JcKs32|)w_<#_{)sMFcaZLUAm=MR)Zx0gUSo-ZALL5iG-AjmL=(qa_as2#tf)K~fkIRHOZhq` -~UX7XM+g*gfGAo2Q%Y3_=5Lo6uA#O(b_>d51pN}^PfqiZg0{h${1opW{h_lbfM}#>0e0)NPv(Lw8gup -)B0%xE9;=ghB`L8R4IQx7{jE<#u*0Jg{vFbCi_|#Hc=4|rqenO<L*RkpoU+z(IZPgoM)f-~f8)DTPV$ -~aB)f-~f8xqwU64e_L)f<w)m?x?qB&r`Isvjh(A0z>rB&r9<Z0Bv6%Kb#HKy|7zFAa=Bs&Xj}v^!O~) -II!kHjCT+4VLy{Dm?>Ba-FKgOjTm0Dlr46x7w(bG%6)cz!*lQr2O1!Tc%RZ1WadC$_2J3wNWW&0wZkH -iPi+RAV!^H0~?^)s#C00iEaa9Yt<>%2FBK^Zei7JhgF@!suQi1a(r#oDb}h?wkngY%H&L)Vl$P`nabx -ZFy@)c=S-bqGj)p1RK8~czGo`mGj)@ZsjSb`O-3eFq&ic#7n#&9>RjED=PLJemHWB6CC^n4$kmN`u5Q -e8)kAXCLvqza^1vLFtFwHrdPuH%NUnNFu6jtJdPt#qNTGU2p>D|w)lUl5PYTsf3e`^vbxU5T-cqREQm -Eci1lEXB<#MTVxm3Aa29B4d%HmRGajCMnR9RfAEG`2qE>#wnDvL{%#ih#PQe|;pWpQ6+abIO|UuAJWz -~atEaJxUw(mqmkkG|?2ebqhss(bWR_vowc(O2C=enGXa144J*h}eG<xO33-V)1)TPX;oYULl;O>6L+c -GVsv!`a)l7dIPatYs&)lszALeP_GdwRGR3EDwS-GV(%{riN8l8Mw0K5n342*Bw@sSkED#)?-9dD_B~= -5$-hT3MvCu|oRRW-q+mqc3u&S+YSEY4JAU*7g4~ep_#1}YnC<v6LvGM^{DdJlYCC?)kQ=rgf6I^?w;g -}SkQ=xiKV!&^+>XCz$PL|&e_+Us-Hv}`sPCYEVrbx?pEFcB=${#?9rO!^8VCK7pcwZ06+^JsuNi{9e! -~##^)*AV*KZkuz5azE*z0!;!CwE$5bX7PhG4HhFyv;<)tx7Qv%2#X!EWmOF#&GL{51h?#r*M42tn%HK -M*2fq)i0b=|=>F)9kfCIL%%QgwyP`Kse1_3xw0`wLmz{UJHcN?6p8R&0Y(H)9kfCIL%%QgwyP`Kse1_ -3xw0`H4*M8{epmSHoPXn4W(ZZ5YC3z0^w|UEfCIz*8<^ecr6glhSvh&Y<MjY&W6_l;cR#<5YC3zM7Wp -qGk&@=$j=!;{x#wpG_c?BusECi@|XN`&MLnnZp$cF6G7zoIn~BJke|C|bvB0E{b82&k>Dor!-|^+O@w -paPsl3@xlM^mp=mWyEv{NNF+y#tyPmJ^Iz*@=@apd6_CG>npeqCkp{0otI~pCJ=OB1AynUJ=_mJVS!v -r~JS>3arAm=V?&-kyL!wj#TBgnbTcyW%P41cvmP>yF^Bgi?<=*%oZj*07guMp&@IGQ<2kfY4-z!8F+_ -Y7Zgm!10zC-|=#JnLQ;LKJ#9d66Jzul1GP1UY-HpS(<vv)A|mjUi%7!#QpS>~;JpLC#*I7bgjF_8J{L -MUb=C=m<m3UTaTw5>x^@K#;T7=UoR0g1sIu5LDp@ZxaN29V4GZFluy|IFD_?c!kCg8-vk-X@X#{g<S+ -Wd#x`$BMA07K1q<X*XS9IA+`vk3p9q<B#bWb4?26TpQO>iMqzm10YT1Q!<k0}!Cw2w9b~MkiLt!5`@q -qKTf7sDvCOv>T6V|^v0vfYVOb&ZDh%%gej)WLtnYp*D;U3#2c~5O>;J;})3QS5x8cx5St0iyaVqc&;& -p*0#^vDQE1KC6kQyGlOOO;5Vk?*P*vi9r5)dD@k^}xVl?`OQTIl4Bm7+(pl~1f&FAF?(>s5cMm&t?j) -+=IEPu^y10=E>K!0p3k>z$!)y}<3mwoLwB9tG;jFl&<swpY1~(lvR&Zh0Q~J$bvd$pgEXydS97mwYJ# -{Vk0Ym&!o<%I+=R&NgtnKf%(JS)c(jVAGU&pk6Lrt_%!h*_Q)Z_T|yC97u;M2jUi3Q&y5VWq`0{9cW* -Guw^6b^#ca%7jj?O|DqUDy@3c>HhsKd*CW79L=gdQ-i`@y^L0Xio2OF(-27|^aPzVyz|F@Q0d5}732> -`nK>)jDyX_aF8<$%tM?3XOIjzP0Ox*uy%fw~#xSvPNy0$D9^#)tPmA~$m2{(`He$CTb{N1$n-8SkaK@ -p%Q1UbvDJ>5kRF1pU{y-FC46)$HAat2;|b%!7e=s7_+R_xqOkTdge*E52!?b&^nAZ&Z~EE3cQbc`UkO -<g^4i6Go>ojt?tz&^FJk=leBKqtEp&Vj>y*9gLvVBceca5s7O<ORa8eLC@!AZ%3k(Rg?V!3k=;cQJYP -)FHxPvWe3K!DJKMGn_1*A0`MUo47>~Og6DX5bh)|?Y~SIj)MF7&tS62Jp?(EtxnSq`bR-xFph%50}}+ -{=-%0#Z$b$mGBl2Yt0zwp1dAQoPml$4fFKy`5LpFB!Qmm|HjaYB!}|z=!47kmVX(tQ4(}*<gj)!E9ho -8s_BwKoAh_6(<t~Jy;P41diZ}`mkGv)b*Z60z6BBW&Ti<n$APoJng9Ksdj}fJCs@s^oJx3VE{@6`|F! -smp6NIrpPG*4$JmmQeI`Hr~EfP?Ihg0rM+Sv?l^Cwp}p9!N*UGFvr=g{E^T9<GF9Zo+Y2u^tNI6-j2Q -_}=t+B`+Z!AWyCvzH*4dxq8}93F==WKyWh!x`c+^yT4cS{@-V4=>CR1Z$rmB0ypuULgO3#ymVrP6&;8 -c=llz^3J!DG$ncG+d0}1;Kt?f@==0dl*{}q7-g0gEW80byhQ62UV$CX(kzV2nZsFfCcFeYyh>96E@^I -DnWhO9@4*h|_+c>E98LLn6Lxrw42D~qUA1--g2AqlKj8M}aGoH%4ZCsW9C;Y7ac*2We}gcXY>@^8ufz -_opC<?=yH48=yc9cJJVOvnwzNPHRGRZdD$9rJ%`*7btx1Als#~uJ!rtP_BL5i-a+fv`xZgRv%RPcY?$ -S8mhUf4uxqs%_;}-oQE_n{`(mIAjj>CIIr;G)F%`zC`9+3t2JXbH#F##7nhxh3yfHaQ7`(z_r_#7_pB -nb9+K;DfjpBq;mlgHuG=WvDWfn<*DpAnC6`*XO$ZG^2>XsX67(BaApf-u`XzCsX8^_T`27eQBN?-B&p -c}#m4Tm>CIAs5D7&><fOaT#>@bcrBHn^(AnnC-4k&;TRp<LVV24$OAXXupJup~GiHc-#yfKBILUS3`% --X_tk&p&K`jp6FtT8V;Y6m*aZq#?`|#{o@+wc#?>Zd!WM?G*-CoxjILSA?|x_%pIhC7H)iQEbOOA9(O -*6FZpS3n3u#;-1=OdqwNclIu2j)voQLv$pewrarm0{4an;_d`*W>Bz7F_rcuOA)75Kq^1xNo)oXOn#a -+|UZaP&Xx#Pyw^Nb-Rvxn@0Tc@La;XUp)fBt3jnTYl5qq8tBw2t=C#t1iB<zJP6crX!5o!}oF0HVDL? -zWEjAdkzfqY0X^aJzN1pH3OL-a6V(&%*uI(SGuITyPyt(%v06Tt}0%=fD-$(SeHufd~i5<8c>tbcpDK -%c!Fx+zhzx)mvm0+(#W9rl}YgQb&hq;>3;A(Gi;4@rAO{QJRU75OQ>k42F!58&~ggr(v<<G`k=v<mec -k|B)4Pbd(knq=j6)PRlCtLXM{RuVAq$nxv5!a&&@>iOi6rDcVpYHRS3NZB~&Ra&(GRKqQA8o#Ma3oAY -x!Y5Bny%SNYZvc)IMM(1hL$2ZGHXGso0a>><Obc{rL$<aAFq#?oNDsOd>VsiB+u>(mahZD4PBF*G*f` -lj}njBrAZ5&cfj?U5SjbxMK-M0yH23tEuT}Hym5g%ERa&mNmCIKX!99^L87}8FTF48oG#FL|oqzEAO< -i^}F@;+prT)j=UME=RqWty6ifpT<-JPbJ~M_0%y$U-@~%6|prer}2e7^x^nS7{wUGRn~`iBw2OIl4xZ -A`()r-XX_CO3KkZsTN2|Ia(lJL0ZbuBAq>vm~wQ3=0v2X+?YGZzX%t*N%TN|%GG;xutJ8)(Jf*QB4`_ -PSLqmsAlm3Q4Hd#@tM_T_5l9=|rgagaw9y?h3xa8*J47mk(?)klscyV2=ndN6A*Qx*<sk_u2&-+(-Q> -r?XrgO4w9P%BMGgrpM-S-miWHWkWo{(49`||lVYG)`HO$KrG<x`oAlPi>F+p&%m0bkEW-Chs!DcH@2! -hQX?IQ@$mbr(Q2*cjv;X{JpW>4-C1UGwnhajBU9tOX6m~Hd7W;UM*|9yUlngb?0-%pS?<367v3{-ghl -ps*yCH39Q3pDqV2HMLDH23N#VIafn34(A(Y$r7Yp||y&{4hilcAh5)XUIpyWJKQ9cO4`Mcf@wRB&YyH -B=_!M(t_-#1DZWKPnfgW`aYtvmksFJfjPpQ&DJL_5X3JtwPlF8txsMj2-hzsR|vv&z5~Yz!t!|S%p_s -3)xn(v!Bz)P5d_D*c7Yp$+4kD(Ny1>QBhLtewT_ajc<*C8yG2kRe?`VZ*lqP0O-YEYtxu8fA-1+YMYc -k0ZGGxKL9ojSB8GR(a+<h{YnH1o$QclkTR(Y?Amr7$cJC2k7Jo)le&U(s!3n}(mQ(i#@>Q_Qgu#o>5a -ke(+qm}X3Sk2eBg-Htw=utKFJaiaynaEDv)bBDA~=F)>*r}5LGWy2e$O&tv4=e%4E{8~_bg$lhw*R1p -)Sz8h)bI57ig3bKwG~^1VR99jptwl(AFs~R3L!1wu>fp1kl!Y(;S?7mN|ZrF!<9IT0sy&Tff?s2?|8e -*5??)1)e=LnHtY9XBG&<nlw+%H=bS2og)k$HGiJm7eTc3g<}L^Ra(4B5Z(;fOFI+<(bkt}!bJ>ieTgi -M7~1+0Hv{f8KTm#PJfq!MBrLG>AV#(}xtk!*S?*AG5h7c^ON>H@Z2j&5f^es5lG<iHi#(uFLX2#EndU -LX$kq<d5(F<=rbQK@vh`&m8$xC454jnb;pSg)r?F31;a|k%|HHJsMig!RF|A67qOCt6yC90T{*<_jDB -9ZL;5+a6Hh<V=^O<nZ1>U_NJh!oMfO?2zENe$-N=2A%W8n~EAj3=AP#{jXv2d6cLj>y9U(wbEfx7kA{ -ELna<DERzV8g;RO)m)4Z7iH5Iv`Rv-bIW>pl)MfhDWl&pV5Mydt3b@w3HxJw|0!WjZocqH!XJv)s6S= -AqZAGPOA(;b>qD>`d+B+25la5&uEuuQpmk%(Ix&n@2GxsnlMkoJW6{yMC&-*RUle7o}`@!qIKg}w2&i -Ow>CwyB%*cWgLJAxux@;i#u34~@j+U4k<4XykhU6L7?1S+0%5$d_$%1#ARVR<;Ts>KRo9E~E!?672ob -*VA=;lKz&Ae39fPACA%{VLZ+w(aZV2#=5A$EaU`M%Q&S2wXL^uTa##3DZwm^Vye1zzR0N<Ey#T5wfjg -Qfe2LZnEG2*Bf;9KAgf9cJQ6tgc7;oDePCU-|9ZtW!h8B8`!)IlU}JWbR=ByN0?wqA(DZ7hlrfz3|QI -R~M*jfEF<>_aSW?G$kbvADHUbnrkdZe!sUbq&F|jm15*tw1zx?Gz0bqH*K1bOb^)ZhV$3ifG*UEO8Fe -xba!i*bt2ypJNC%J4fdq1mngRXm5^S-1z)eg5YKs>12Um-1q`5O9;k|FY-Xa%`VYysUO&gA_zCWOjbk -?Zahm<HiB?#r>WHl!i}%cLW>~W_zKM%2*PbFvZWA(8_&_~fGFH}j@Ac6;nvR38ipv`c#d`+h{CO&cut -V#T~|r=Llkafah_&vgyGiC(fW)q+}e5CrXdVBzCpu?Fx>bi&CCeHjqlI|fH2(nKFv`G!)+`+Af_P>H- -11&LmY0r?D)~y^=|XWe>R^9E<7Y92LZk@OYI2oZ7jZ^V<IAa8?&>t{XmFs{FrtN2=R>{(Nc^M-}o`@8 -NCqSEE5(XzVUNX^AO@2zaSk4A-;|4r)fGxjIYIrDG2g?rh6_0f_$I%(BzF6-{-xwvqFq-<N5`14+Qx> -?<K1t$oF}YyXLI+`4IU%f_$G3ogv8C?DGLK41#>0kI}4!Am8WX<Q<6dZCt-g(*=TjpJ#|52=c8h&@Up -$_j!hx+IS{o79+^Fwn%dff_$IP)5!rrzTqP}Zy?C``2x+y2=Z+#u>$W!`IaW>2!<%%+7gifLB6#m+FT -*V_xUnSc3zBc={QYki1Dr6;I6@FODAZXgdpGN*{;z_MDjk*E)fLFEX_P349+xnl^|!CwOh*s!I`e{!( -f?(MS|c<i@OPeFD<?z2zI%9lpsuiOSkS32E*JsK@gnj{!W76Ov^6`!eY40?Z9HVe48NWOP^P0IJ|({j -Xm^>2)L~+KOqR}$&J1H2*YxCW0HRoM}!-6wk#2H`~2)VL3lrLWriRa?fFxJFagrd(h?!J&o8+7u-S`a -1i@x6xEZk73vN7o>Bbo{wRrzD3B323L`lkT3%6zB_4XuA#P=HO-quH({;FHnbn3O6j^BR$o7Dc~M_>Q -wtN;Dg*PDBa9bb?y`;gv_AAI@8|J?d#)ct4N{b$nsXWIRz>HgDp|Cx3FnRowLP&2q$)UJpc7E#M0YFb -2Xi>PrCwJxIOMby5S+86V<QTt+QUrg<bseLiEFQ)dz)V`S7mr(l>YG1;JrS>J%zJ%JBQ2P>UUqbCmsC -_B5FQxXS)V`FNN9{|geJQmsrS_%NzLeT$sC|aoXQ+LK+Gp4`sC|aoXQ+LK+GnVJmfB~jeU{p1seP8(X -W4hDeU{p1seP8(mr?sNYF|d}%cy-BwJ)RgWjwi1`!Z@@M(xX~eVeDTzxcsdU;U4-zW)6$fBL_^J9+*8 -9LxUls~`UGhyUj<{u@wB0|XQR000O897^_9LozfM^Z@_>Yy<!R9{>OVaA|NaUv_0~WN&gWZF6UEVPk7 -AUtei%X>?y-E^v9BQ&DfzFc5zCuQ+8dNfo>fX%ec`2Lu%$1XNr1fDlTY<kERf?8xVC>%Zp`C#4Jt27O -5He0QI}@9umCrLDBtE@1EL7q3L^Yzq<}OYFS1hCsKSbslENh@XyDkA8FLFolh7k-Ta<A;yrU$)W=ZA@ -0!;qrnp5ixlQ5TqYvR#?vh0^XNj(<z>XVy5@3;=3YB%<Q9D#eY$?Pe*NZSw!XPqt-o&GfB76GU|kO`C -lGCF`)&RmmP>fK5Wv4cxK>S5sB$;4UbBrZg}v$6DpI%^40Hk;!cghmAs9blva+RZ_bi;gC^Qg047n@k -ta}Rhd|pCSSVQl`HU;tyRhz<WwtG-+OGyBZqG<T<VZau5SbE594$4&U;Iv239=wG-)aPQzzD9&a*(jn -#9th-6b7O57zWfC`(BWBy%=pM)hz49a+!cpZ88|1&iG-rp@DJP_`n@yZ?h1;7NBR%yBg#|a6Ty*RXnp -*b4u`ogxryp9&#A96u)9*4kRazb;?!H^RSplgXpU+8>Wo*K-xu~7L74na*t7$GkXA7`&tz;rf2ue+)j -aM~+~=KWV##Nq8m(x6E^XT>uM6F1f9Uswcr6>eBWuoE<>*#5=bbKh4NB2iRq>4hc<|`x7Tn2w+p#|cd -z(h55I+D=O9KQH00008031s8Ry#YL)2#sj067Ez03iSX0B~t=FJE?LZe(wAFKu&YaA9L>FJ*XRWpH$9 -Z*FrgaCwbW%TB{E5WMFrR^^gPr5}LA1relPC=!KhW#TolaO}#Dmi|3!I}cMpA_vFu%+8K?H?3mM!HYh -y_M`c1@!+M=^|V{wR6x&SvAAOnp-pUIEI896;7D^|nRLkE)JcU9lAP4<>nepmZg<Via0)#;XZ9Qp#&> -AJcT9r|Z#jz*DfYtJ8ek*fYyzB^_TUY)%(opdr2wrpc9joO>=Xr3JCBU7$J<m@m9yLhA<#YqrRs}J!_ -^POn%LXmx8k08_8;<tu|4xmG*!Pc6|l+veh(#68+~L-a_HTAs+33qrQ2s8Bmb|sGX^x$)p=IAf_pqzq -zWOYO1@ANW}UG}RhBD&+k!QDX+FJWMJ;B^oPXkgEJg%1#C~HuBwQ+*6yU@f#%0$LFb{{km@cE$nHIcu -o$*j>TAa7YdXiZtfjntNv*U)Nfc;)->G%8Ep%SZshkQlZ$jIP3J`rD!Fx`LLekY_TLesm<LVkuMg{DO -xtcFF_s^6A$(xN<4f-ICu@JE||jPk|kPcRQQmUH?6pUTM~uhTvue>FK`+ap?`%xQ$beOF&lO9KQH000 -08031s8R(n_Z8T|$T0KXRi02%-Q0B~t=FJE?LZe(wAFKu&YaA9L>FJ*XiE^v9JSbJ~VHW2^cpW^0XgO -oa&>;!3T#Knd_h7MbhV#(H_C=}YJZEdpTic}h>>puJLNJ=6t*>O7|51YF8{qBzBBba8hI9-gOkn`iGo -q3+Ea4AXnRK{5<AYQGrTtdoLd?t%^!aHVV#w3^Vs`@TAqWUQFVk$eG&gGv27}J~JmgfTHMR7XM-i7aB -JcdE16VCxjMjgN>PGuxFYc7z(!!JEZvUK6AcTpjyxO|bNyu%a0n;iIAt;u|&Us`OXr2+l9M;QUGD<Xb -3<!cE)N}0!#Lh_e+p5+hod(O&?Cz5%g@1w)hgb4vJ@8lKQ<<&v+x@N80gDys#lTg<6eXXq9E#E`V*Et -tFl>)7kK>nd~uo8<koBkajWk<2h_#C1r<sYNSn<k=1dE`AM)~`Ll0H>LRSj4H2ES+*slVP|lDtdAj3l -3z03WBGtToppXge;I<e~(mB+k?qQa`BK{BCX^qj;7=g&d16j`rjWsX%qQ7ONv%o!+(*(l9_W^<SB?^& -2!I$8N-zbKiCz(Dw9{3UvzP`_Oi)eSQ2%<syBAV<dWAcls}#l>Kj?qDg0x}Q<xNSBH?2!m+*Wems#2? -sh|)D?dP!KxI9DQ8K`BJ&Y(!u$D2yoO`ydUn3Dypi<}={Dsf7ak=TRLyhx{`8<|Ba@;6GDS)|ghmUB+ -(XAddWj$AEc0XkqYb&ORZ*(Bj3c#)}eW?21sj42X)nx*IpNlRIpneRavR4p!wM3PAnMOb_9x`u`d$71 -Qex62?-V~J@LJel`OB|TfiIJ97iie4i_%#!$?1G6%wlWe@AXS8NHTM_(Au`U!Ziq(YYkj*RCF#c1nfN -*{B`YrHvHeG@jh9mU@*H_QsXO==A`okw7<~mLb0SRa8Qi2~i8h&LP0(Ht4Ovbmo-8Re9UG`ZdlvFlTx -xFz<H}qw}CCqcC8b3=wHMlKX?&4Lkq9hN8!^r#w05ABQ6$y0&2rUaQGKnC#Fs3Vk0=x;IXZd!Bd<D6x -ln{ALR8CjHeGKbN#A+!Oft}Djy{W=OH7_1&QKh=FqhP*}moIp}w+UJy{sLuoVh&O0spe>NokKr7IvTb -rvbv=6R)wuqH7ZGutH>KO5TSzF8yYq&pP=hVtPQ0y3`)7<GI{Q6TeahjUDgB#Q`T<z{)Y1!+gt?~Mvx -_xSEU@-m@pHd?%5?K#-GB^ZlCzn|Lk`I1n7!MH)6I|y@nGNsc$>LKU7^QL%ip%7tfa*+bQY-{-MBTBs -Y2vpj0Am^rbDB6S_PtmI_Z<6h*2HN6{7*bO4$Va8otbRt9#PZf2{bYV+O&f>Ha5;g-$awd@NEdVj0}B -FyLmq~+z5GC}ok{FV$;eV8~XDlOesy<}q9gp^^Ym!7vj(Y_J)gCNvRwS|>}dWL!v*Q;wiJk>j@Dr~{_ -ByEnKYZ|`<4r`d#TLUExYoIv~CL_3Hn<Qg1WlhCGyGhh0*n(@AsZG;yzvfrF6l7O6T5@%C#HayCV+L> -0wALnALP)wLVpsD{c#5GTl%0;Y>aS`j>Ua@o<zDxjUvO_Q@$ppQ(7PQbtlsg&(el*QLfgNy(-tLfT9w -oa4C8kY-i7)(d1anGW*M$$&*0>AmxcYoXqSZEo~XS3pe(kemglDOIbcH68CT$#V*k(5MD0kXIcKs={m -GyQXQx=sISkK^C$Ur@GB6Rl28AiRMq74TvQ@t2wzXv<ToUjk?L!+NRmG<G4y~@1+A=ku5@r<`3V8YUs -<p1blTPsbMlI+%vz)N&z-dDoAPNoP2;fnbcJ$X7*VM7+v7`=z41kFcJK(+D*3Zw0;U8xrIIL)sh4B*G -2J4|VtpT7%4&Kq)d!A=zu9TaX!O;=HM`Tb3>}1dorOu5N%&pSbR{0J?6YScWTEp4tVH)1FXlP2eB@fR -UA#X@k#krk>o)i2=nUJ6dXHSvFcOLzTP|VhLLlvxZ-chwnTk1Q@euPeSF54b1O7a}BFR=*r@KtQ8ZP; -9NT*0bQ-`aQZbxT9q$`|<ld+66OaoZ>n)|B5OAsm@a@&9QyDwxe)^Anzv==4&%j%O97UBb3;yw1qUTk -5MVEo8JE@J3%yf?7jUUS-&=;c>H;F;aYZ5L6;!(~(QXSHs0Q%D0_Qje=IpH0}ZHQ0(6>G*Wsri*Hxit -aPYnFwo4Z_WR(}5(_QuaduaBw^$k;mKT?Yq}pJ*CFPET<?ZC*{?V;Ob*EW7Wyaz_j~Pi<Xmr2JXO83A -kD7gtHx*I!fgn{G<AptS=jx+}Emy2<JFl^dL|LnKwLiQ|uc9=QhXKE2&{JOC(^d9Y2J6dU9n_tDCWAU -!i0l6VP)h>@6aWAK2ml;P_Ez^u&#LMi008iY0018V003}la4%nWWo~3|axZOjXK-O-YcFPDY;0m-V{0 -yOdF?%Ga~sKx-}NhcxwW^XO>rs7Ys;#ouOw00RYkTHJ#Mq*^Noh&P@0IGVP=MwlvMuv0qFN*_^|9`D+ -#M?ai-B|0F6ci-RNec(KwDLlR-SZW3zdYu(QYNHqTf(olTNyl2vh)!ec&W)AD8pP>n`oV_f7@Hj1mHN -~Z~e=0&BS<B~;vc({az4N+J=mg;L&%!k#+#>Uxi+pLEroli+oLMu_4jq?xPkF3{Y+Z*Ya0mR-0gHM`O -QS~@WN~q9;hc=t!*-dMM3P;J9jnZKirBzbEziHVVwRk=J6iGENGB)byVyKu*%EZSF-|5{vONaR=LGr4 -C-aHg>c7reI@7fLXMv*6%U-lDg?zGvDqT;vg>SprDZb8zWPKREdC&M|x9~DJj014;w3<XV(nvy6jqe6 -lvSk_E@YMSZ=ekMuQOgeFKQ?^j(TUKG5jaXWySy{!|FcEOjJ#7?9%L7&A9jH)L<$YS+HXGCUA)U^rOi ->23&Z=9MJPea$l#Ci0k?NH-S-LFd3773{T*g&ZG(pB~)|frc9wSrK4JG4?sz|e&llQ<MD<}Cq1G>&0& -mP-W$v7^dV>^uflHVtQXpdmNFIj${S%?ni>131?s!mz)o}+ORMMOv>$4QplPtvlAZc*6?tSTNgQ&yeM -fMYIY<%37SE}MgaX0=Z^P_VO#oe(^!$f~$~Tvrz-?|zOhF3;i5!PUuW|L7dlkINg&hm*K0mB^a;;Lpj -hGCGL*5JaC=QPeDx$rx0pH)u2r5E_9nD(pA-L3l|cv}#e;M8z#zt%a33@obi4BY?BO^vGYiHDPEZOZP -a~B|knd#+U&$oF>z}c>I(m_pLyyXkj{4KEQ5mx^#ND5G*c=_^}2RN8|8YBNB_Fo22>_Pv)E{2e}w!78 -?3%o6)eYz}!+MdMu>5rN}VMVy!=%By)HGf=N6bjAB-%e@*t-hmSDM2~mfuIgD&QH0I-RQXJ1GlQw%lu -ilSg4vO3C=%FfN{`EL7rZFEAIMBhw3KJ?(RuUIfx`ZjA&2SC_`A=ui@X?>5i$9#40a0E2e)#?!aC>!l -$<T1Zi}R!XezbpnzW-bF3w$O1w^hO0{WJY~XJg~?x3i<@<n7y|{>lF35h0~lgn&@eBUB?a^l-laD^;e -4gOhjg@Pa=a{RzqVabu%@bi99cdI@bFUY%bYMW-ikPpD{X3s|55IlN7VcQoZiV8~(q!hzdnFsb6ZUPX -*obC~~o^uN#t&_*n3RxPx1RN|Rp0sw3P0uLMhaP#2+l_U(bFaj?kj<7$X0re+A@%lK1fD=8Ss7%s^FZ -fIgs=~ej0UE8wX_>J9K@F!KZ#IT;mgN=9^XSrW-JH%RRl12oh;c(ErY1o$;unPST7xG3pN!h<*|WQQn -nQVu=poUF;K<`l;N#6)^IF#(uI}eZTFI`jm7ZQ-v-{g5W6wC?Gd9e@3j;F%rX4`|An(|fHEUjN5OA6e -b9Cpb#HnTsh)_M05SWE@Bz-@px*kIHG*@{JLmKA95wHBdx&;Gkj9%yoHb{6Ejo4_8wm?W2z6mK^BnjK -2*=FyWi!~{(*%-W`oTKSjlAj9@&=v{Zd<Px`SmXFXC{~1e(!+U#)7&!p(L&N0gQFsW{P`Nx1Da955&t -G^xtNTVIa;KWLS4pjI!Q)*MyJ8o*<5O)!07mdU`35VmM-<2GzEqkv<l>~(v02YRYV$yL$uj)SyB4i1c -|iGdWluf8dUJ7-Yed2vsZ2QvSm7i94#4$Cd|HrHp_cmgBH+$qleif9i|l-8BnjXB1M@bH}UXML?0akk -5n3SuJeGXF`8WmpeVUD^O;2Ph{376u@Sv{A059xf4hGfU0odY0SX$8-d_BCwtx5sF)duc+rJUQ?!)1W -J=WZ6Gp8QRN5b;A+7j}|J(5)8%`c5m@k=OvfyF1m;#Z>f!9W(nOrnc-_b504<l*wyQ2rxf50~%D*2fL -~@&I1$;>(fo@-WD-F7InL^~)p8oPK#M(f?7u>~}f(#=v;DB~jiQFSjMi)OfigQU1kv`9h-HDnq>YWyc -J*!{xGP1~0<puSBDR-EcYf&DKjI;AI%%^&%w#UqVCfdrD*#A9zY+6(4%F$%)YbeXqU)aO7bCzeg7zd- -Zwo-@$nB7(|(QD+Ym~4bEi}PxYJv7Kxja{o-bh>l>voFMG4Nh^K4});F4@cZNAVhF6>TO3vfA@h3!h- -2v32X4bj}pQO6Y#SDj^6R>ErWSEXq^bgc@gzyk>CPfOf>R)lX1CuB`<BEdlJ;bzkO;Zlw6_fD1j0cmX -V-bq(G2)|nOcQ&BvnWgl*NPENr2=hTcUTi_X$<bp9=it7fEGR5>TbXAX2;fb%W86v=M$g>(U#So$t;+ ->MDi(}1xAqyH~?}<32SK)kt1*qGl#0DA<4Nk$;6N|KuZzdFDC<l4Ah4Aw2TTc<Nyxy&M+Tgf8&A%ySh -By++|57-boT$e&<v&bkHOof>%@k-M9I@F6Q$T^t4cu(VmXYNdMWU5r&v0TTn8d<Z;DV^8%>MK)FbnfG -Ku#_Wtk}I}+Rmc%+Oq-^E#8u25qKYRGlHj#}Vj&8y49R)<MJZA(2Z=Q9kS(AV?&iiaA}G@eCw$)ne8T -9PomW)qsISzhq|0#!;_JVeh2v>Ru0Km#=ZVT%E_(r#}UPbN5E#CVNv^ZZUX_$xZ9#^{8RSKj9H$q3z0 -SygL@v@BFqA~fkiOe=pt7`GxU9#;UP{8puXK&ZymL_ZcH;vC{x^zHs!=2>eY>9aU3%CE!#jz?VB1p#h -S^v|fZFU1OWpjbzZ$OARjcrHQR=pES7Y&3!9uv67Y6V*%$@IBX`?^^~A&^qq^8~o4F{*eMvK=PQ+(Of -5r39`8Nx9RX!AyTnQn(=6dkMWY0CH!&i7)j04X*x}-l9nn^th}W-t&GWM)WPvQO=4(m``NRd?ai%@B^ -1Fg<NW~)Zgsn4oasN9&b!^W=|M|ZlEIi>{kYcA6_)|@I0b<vfPiBR+N!Jn2J#WYD<P1nP^QFcf;vFew -Ib-*Y7Ta6jzJwO^La50Oid^ykYEG>mX=UInL$tjW&|fih#8(avV4YARxnd_T%iIWE>_=w;(}-av8fyG -v=#2MH2XTl0OGZYp{da(Cy1Nij6t_vD`;z%w_y+Kx)y%;VLRLigmzz2u5$F?VjND4o#k8~J;Z2%gklJ -9Z<HuEi>vI|@#6N3X*RT8p!_FoacI2(SGFX)9Z=7Te3+DFGhd6YG6zgcsnJA$?E;+W5ZSGRTrl_qY~b -(>KQ+l{JlnSCbBMHYo(5Qd0eJu<-dS($6%eRoBU>VlkVwAFYL{A0`IlSl!b-Rvp%*;l?uimDZ98a{lv ->)O^(|u|L%93Bu6`+9_a17G0UO`<Xq{faQqHMa-S*%dB!;Wykm7kVPB~xg_ut#TgH!0P<H5Yho-vvu` -5z6628z(jMSTm2n4@}|TMlwQU3l-6<@QR1we{W$1F7D(tc5z8OH@Q;bk7-w7EF&dcvmzwOiW4@!boWU -Cc=@7IwyAVl#IMRF<~jBJK40u$-w>-Uj;+~i}g$=0)-$MJO<N6Z3OnIG!s3|&_X`=4wC};c2C5eI5Si -1Fiwn_hS%nrBR0$k+%T|!;aBtz*(@(p?nMF3^P&L93EWDG;RE=hl=g5m8t$hn?;8U=5u3;8lO+YppbY -}4?h^pS2#kB^6&jI;s@ZBA$go(DEsRwI%uWfx$Ed-i#hW~~$towp(Zlu5_|Aw0zGWwT?rjUNa0GgSJK -(cfI(dY-_A&>Z1?iWV3UV(jm9e$P;>savn1f^>5}M|;n$pHv<Z%NVcS!=_ZGnC_bO%Pg)YK!w+$V)a* -zvqTYdOse5DM8>n`L7?yjk7GNc|q|GLhWM#6YF!20^R2qJ^(BP#Yu+f^eSlVzdFT4So!CU<fOs36%o- -n(v^^a=ruu6-H%1!%QekGsMuUjU({m6yg>jgbNt(Z<%-u3x@d{n_E5>RqWz)@d%4ohes7J!=o%@9VP= -{87^T{>oBQePhLO#z_wjv!VuRXQ^g)pPT%@{vw#aV5wkbp>Y+^;b6ZFwkoL2jf|)>th1l6`+OVm-HC? -@D(1I%{Y1Rx9)Mi^R#U$z>i*W-Mmvfr%)h)IC0|{uqb?bOjoBhIt77h%;iLdUcYIfOAJ!5eV9(IBoU# -5&TxRi0X)7kN4slkjE92n)zVD5ta?!Xwn5<nSGVL0tMX=we<sUy7|0F_?@>T4SX@f1>Xd(iWz0GvCd) -pG#W9<<^q0B4U!@#L!<#8pu~9+!!4Wp!VODHFXST4uLg8wD2B6VsznkZNT<;LAY6W(O~9+5lYIxB<Ib -^M>B6LWBlil@wj$3G!G->|#PZAGF~kGn(Mf1sc+74s<@U25UfYHkp^{r=($FYq@qsNlT8Zr9zT`A=#+ --jv{NGNrpaOL@uj=Ixfoub7oDaR~3qcm~h^VfzBEei8T8ht_3cI<-|TG5Xx6uXUftpqUi!-YS&CUSc3 -$7Q*f}fTO{7#yoAm?I{Y1z*q|@<hIMTMM#;qT>p$!TD}D@w5rXH<Ua&^ELakr-EpEP{)lER>z?Dt**v -Y%I)BVGvXuscQ&wJo)CuR0MI*pSQG~tm}xF|zGCpDo@`)Ar$2?i}4j-Pjsu}&a@0XKoK(P;dfR3$6Y5 -xU^$;8GMa!wg;dMqoA*AwuT$dC!sBVxiRt%tT?(Z)cY{T$m|{vh|;QRW{Kj>!1Ujv2gEw)Tqd55{Z?3 -oZ6TaOMEl9&BsHO&#Qcljq{}y*Oidn)pCiVj2OiR;S|mKm}ysZ&(J?ijfVmKM#r_DHwfnBQxYQ6c{Yr -O+i4-@g%m+_3{6P(F`&E@Axi@Tm6!6)X<e25BALeEpzxr-x7^TevdkR2$2bgUado>V?bR)W>Y3btoM2 -Zxn#Rd$?@iCON}Q(+-<%069$KAIQd(+_xY1R??Z2_jJqJeg3V)q8Y?{xtz4$z!HJ>*J$^yPxZ>x$c%P -Nnwk>T!c(+S?%7K)amXaGc8b3JDbjc0yX=!4q<3d1U!0>UFP64O<6ks=pZ){`r4&wIKthY3SMn>}G71 -Z2zh>b)-d35Mx&Tf5NhbL_>!0oO%UlB+_?N18Iu(JlN3-j*}Nz`Tx2tX7J*D$GcQ<r6rk@QluGjji6& -@*KGK*5snb<Ua4&OGX3sU#vUW>hcdRhB)fT2^y$(bPhq(+S<~!)KjSXCN5Pq2kie?_u=@swF0tk2pNi -sLqpLPe(aH>#eBa1tEbx5*!4D}?G84V1HLQ8@uboWkDK3>tp@v!;pFL|b&jHNA((zaod~u}5pWqS5J7 -j52q>p+u@D0L&b4CjAn@bLMj;GKM-}@gbygF|GM!i`khlA1i^bt>kk<;s<y+JYb1e#69*fA;!(nj1SO -&lX-wuK6b2T3PP6*!F?E!F1GRD=h0scpc!nS>+S!X=ur$R8wbh4E{3__E;a@uHn-Vr_u3^2C*DG)!{u -XcVnHg1}`wq@B`AG$UL;e%b-YBp1|pzWr$mMeI$7062}k)NdsBx;5gNEEJXR4||0?9$g?xl2#m>v!7P -0zb6`?q!>-EO1d%3H-F}qg^KOQ(xfwhQRwfH3I)f3?EMHR~SI16rMJOgv|P;-RbW>QAt(EVy+qg#C#t -eKc6?rxvIly^tETf9H(Vtb}@LZTQ&@sfzRm3rCopxdEM~Z?1qDXw)qDO*m@G*{{-{@`|>IAB!=0g{jc -1mPwuhx1^)Z>U-1x&Dg5JqJ>mZYy=8YK^A?N@K0GdYm*w{v;{o^{$o#tpL_YAA6+z%_VOYJBgkp6uc} -RxyD(RWWy6tejtxdDBHY1{cdx1hALw7uMD%{JnLWTIojNw+1@X^C88Dau9si>1mB^b|^P^FKgFQf^;) -}jbHbQwM0vdj1V_cHVRKEW|GO|uy2!wm^_a`nGW4rt)i%gN&r59|AcV}4YMn=JfBmu42oWiv>mg-6Us -qEt>Jg$Q@^n6V=qL?V+MNYw;Mz9|t)#m+0xH1jTmrelLv;RCR!8y_4>w3>VKw42CKyC16wb*k8_`-U{ -}wErz0XvXxnAtl$z{5NxR9arzJWroK!%kTa>q)ynhB3Gq`pz+`b$ZRSc1@e^opP@d;ZTSSnSsgN<VoG -#t?7$0Ds>i*m;aPWq_O(3*>NL~rfynBCC4P6<G30Fg?eD=Jj#lVlp5s(ceXx=ex|1x08c&yEV2%_C9| -&lQWGK0=9;SnsS;_g4ADo^=7lRh&_r{qzXdWj~psuON33Gy<S{@NKUhieIg_kW=fl~sGL?6oz8HlWDC -5&18Ce;Th{J35RxEjA)*F{^dzK3m`v5RT6xXh?HBhxWc=lj3<cO`NE!#w*cKVt2kcB|FpDDtx?yodig -bo?%9Hs;kh+HL58X(r?aIY!5-hW>+-cfs3)0wg*$kN$M&XQYeVP0BqE9*M<Ig_~&V#B7Hr#qhfuRI3Y -=!^rZpE|CdvQQ_T9D4~a@kC4KG0LtwZQASyu<!j*GSply+!W%>z(hdv5YF1UJR>%w}^!G!e7h8#Dulu -`YhK_0Hoo?I{cZ!7*J4|3oh4O%{TU<o#)$K`L8izrKX$a~sf?0}8T+@=zPS9yWpUK5)Uk0<}mKQ2TiD -2|7M5BdO-la2FP>Vebmv)892(Z40)IW#WWdaT*o={-N1OM>mZkS>(&ilNSA8H-Fg0<V$(cI^?TqTpq! -b~YE8%*82aTdOJgZ{ov$}+x55JbT7=C1IqdE`+Ycsz5DJI1`#4!?6xoJS<S<JKxrgO*T9j`{l%PwVk3 -dUBrPQ|8kIU61>`7^(C8&aEKoSiU@ps#-qGvrlNmApR)$O%CAP<Mnt|nu%vTtioHD7bF<RMFPj@zsF- -aLn0$^j{*idWt!bgl8Ekpu&(}KyoBKi+>~zH<o81mA?V}Lqj_9eWT$z}#B-2O0v)aKpW~xUEaI00Br% -?o;<ucQq_*HuUOW;>*CLecnoR$-cb$iQTZ%k<4$>RbSwuQJd@U|UyvFx80Hg3?gxDbhMd@&o#Dz>{42 -uo7)ld?)$Of{bQoNjFG#`RH46o#c0eH~@+wOEpe9rA5Cl&9zBtzvO?{-(qI&h0Y%{?X}7@%8d_dK!W; -$9PeN$q_Kf#X1=bn#enfLW&yPIp*8Dbi2yl7^;{=)_MNi-X6c$ObYx5u7mNS{jtDXvZ+zNnG*sYx7K9 -^uf7Bc;NUxE=HUp!LXLp{%AyJ=_u`*qVxL3OG?}~#7s9m@bh!y`9vHJD;_a@t;+RH#dt%=yudXi#i=! -0VxP>!1vAKfKue^5RNo2e5)`^bqxvgdRz{a5P;Y<^<=Xe;C)gFPcX=hu0WN~*y4d}*8CN?hQNF9HiuW -|&;b9yDSC@wl8Q1!}?#{Km6GJ5T$^(eT8UNaATbx^L*1y3+-HWr*4IcgX?A`lIc6D*YE`K?>_~sk?QV -;lchciAR1{?b*?>rgeeMmR*&WZn={>RUMPXGTqp8gkO%RM;ncnI#{el@i_NBGSt(kU`0C>NbHMeh6B^ -ZQ<CVPfYOD5^&{2q^_m;sl_{rUR<D1W@%ofKGBOFv>><Qk@uAmt9*67jmu3pFi;9@0IAg^BoI}14^1_ -@BE>vC5~3g=QR&i;^|LygMh(=ynCp2Ma(@4C2#Cn;W7Y;d%+z5f=2<^ljInqfgJjpp@3Hys|Or~5$-5 -ez2JSw8j`%Io=#?VO3Yi5d;Z1Ao<0kjBRXT_X6d<WzmB`78ik5pOBNLEl*rLy9fI{2Wh_`a>L~7ZUOu -N_cPl}%pF&9+q2tQ(o_}5~aL>QMjSG*#n<@yge?&(FcZ0_NJ`B4)IuaSb$r=YoKq+~f3)i^n+S_UP3u -a5IY%e5H{pduPPCCSl0s^T&>;?qCm;iAFEsdAPL4!7~!%Lo<-G^<nu_v`OSkw~op&IH@TKLo0LcZ|g* -u~uKelhOe&>gvWm+V3=kB^}xgUKhd`R3pk&S!rapIw8~%_nQkn}b`<?bZ@*eSW_H&nKMcqvbqzeZJj< -@wHn|Ip^C;Ij`gX3rXRRTnfjlNugUO4L^l`ZA$*aC9<=C67&qL=@0!Odrn`v)n?|`h)Vu8mi#z#t(D< -!e$YQpvp}IZ*#n^^_>cEu{yNF3<OV!FegR`XryDY9BY2@b=UYqWFLVS9dnS%023g|iR{Wlqx-Ftmo>j -^Nk4anriR?T5(+Zs^%HnAfMSfdc!jw3M{;pVR4s4{?D~QK~Ef3*w285vZ8)>nC?>BC)w%_=5gvecbTa -XK7R>b#TLuLzqDJBy_%j^@3Ph$M7ap-(y=D(7{PzV=xhMdsviKcAKjp}}#DO(xQh$A`(A##j^|8p`S^ -I%ufpkao^?~`qAg^eRW4~iO7<x%M8h453q=PR&def+wt4evZBe*BZ7JedU#sjmQBd!iISr@{)@N7dzr -j*Zms-q*P7qZa|qr``6`1^f1O$bMXi?8SP>UM@toyB@Mv3z2QTTo2oBJ+_5z{_+7P9Q;>pb{ZI`b{n7 -Hig2%Y>sqNBAuBtvufv#E38rWYU8!n#9E7v}3?rjg2iA30j2Xe&D-X;GtENn9l-T5l^kdsxf7o=7%B; -j7T@k-zd4ZU~Eq6*|45!XXIkep$eB>`}Iz0?Vez+jfS<pjY*`Qked}d4DU)0gNMfEPUIO=I<KB<(SU^ -hBWv`@P7o<l2vPx1Fx_VquX#8rj7%DUDe|G_Z5ee)e%k6y@qJX+tT!wrbM<@C6>9vVRBRmL?><BWp-A -vFAWc{KLuanoi(uz@vgOss?9I>Z!wbGcmc;4fwd5(Nm_yBwyYeq^xjAWGc=yTIpVtT+Rgi;2E_TMP~; -|Jg4Dloft|jCm<Y_SHiRJbqVuL$atd+P@q2ogAny%DjR5_sBZt<WU&U8K+Ca$aAJy-j+gc`OF#=o$Qc -c3>zeY`KAor*-O7$gE<TK{e9R9zgJUMf$v+}ua<3dDRBM!9NkT*=VPz&`<HM)5s0Rq-yVaF8V!Ua1#z -&vZo$%L<x)n+)Cmm-lOJoW5@XcH7OTV*wXwu1F+^?buu9BOA1ka9BP@yy>h@AzHSm5PcT?lERfly|yt -^J=`T?@jg=Z1#kiGViojAx=*{YFaW^py+S|qhKy3&k666(6@zWPp5_u+LHFL-OU0(b)hX}w*J{$YCo> -L;M*u~@%vqxXmTKHVMftcE#aUOqEDUC6s%Q^-eOSIEc9gxtqp&RQ;G)2qvbpVnTww_or2`7=I7rp>!H -`$WH2ObygJ)pv`dQ3LXm59x4cEFdq^psnR*ETB63uId;EMy!Mvx(Ik>LmXV3>A!CKP1Wk@$_l!_80+U -?7P@)hVh*1)H?{RV_Lj$;?lhLf!`+!z0r@W&WD9l~Y*~EfKou)%FV^Y2b@!`(T(=L`-5h?oepeo(S#4 -M9D_-sEbI(OmJDo_3Co=zCB%+s?uFU;T@uT5^UlXp07*x|djXl&frms0Icl62vCCl=k9yQXV^^f1_L_ -bPI>X^8L&V?PTDEfeAUS2OA+C<979<gRipa54FC+~iaE-ugE&%xEnY5(XPv(e6ebAvdJ)%dA*B2(;RE -bR2K%mw|ejsFKwO9KQH00008031s8Rz~4t9%cam0F?p&03rYY0B~t=FJE?LZe(wAFK}UFYhh<;Zf7rF -UtwZzb#z}}E^v8GlEG@jFbsz8c?yxzTbs1qE*lKCwLJ{V7<BA1MsO3Q5p(Qd%Y(fAY^U9vLyW)Zmwri -^!Fxv*T9OF<Y@CoFsYYe70jC-?z#Rgk=`H9sUY-U~`{OW$E#L!<C9Sd<Y>L$aglb~g^Ko~LDd310;o) -Vwe?9Im1yy85Yo2m@2L=aiiM1JhzE&Hkbw5aCga%oVv_+Oxm5{Qk-~m1}@K0V<Of0dg^2HTc*Z0DVDR -PF=>(696MZ$5XO-iu$HB)dIPKs(hjE2q~NB9-|UF>*=xgXZIIFmZ(S>h^u*=mE}m?SZwjm^G|-hhHhg -EmN_>k!^C5B9z+&%~WO6@D(|Fb<+j3S>!FL9$sFH<4Z&3vj2EkPRH!wJpbOk!t9N;_hp$*wD%O1;px? -{)4WGx<?yz1?iahZyX`QZ+y8~Zl!P*!FMzLC`<oWgjC6xqPNxhcIjVtFt<6(;ooHT3s6e~1QY-O00;m -aO7>P2t&*Vh0002-0RR9Y0001RX>c!Jc4cm4Z*nhiVPk7yXK8L{FJE72ZfSI1UoLQYO^?fJ#4rp+_x= -hovuPoOGW#z2m_=deCPO!+7&lQGgB=A~F68g)IuDOG;vUIYx<|MUHb8G3LaJRf4xDXq4A?;&J7kanL6 -Cg_>a%#7Oq<GO8LQv}IanIi5l;0(1!nB>*mLu`&D78!W_WpfIlnjOb>Wy96UpM8E?}G}SRtO1Ur!7z` -N^RmbSTEUP%G6ld8oBE-xNh_uzn&IxKof`!chidt*ceHG|g;(1}O-AvMO>-TtJB48=eagEAFNr*%tA; -<o^fvN~QfSS;HfI=Kf*-e5f|C+ZU7_i`+d6+F}*5rYK;~QP55J1i#cDP)h>@6aWAK2ml;P_EsAzI%9| -q007`D001KZ003}la4%nWWo~3|axZXUV{2h&X>MmPUu|J-d2DHJb$BjtdF@*JbKAxd{+)lt6`rJE3PG -e^wl#55S&?i_Wy!Vdv>8={IRZ!WD!hV+B_`wlz2Dv)9tYC0+~&t}5}5$@_V)Jq?SeANv!Y^Q7RMs2WR -{jAsc+5eG_0~LZf|7mw?Z`E%BrZts=ZpZBzL?>Wx6Ow^CC-FwaRh9%(JsgkNqUW%427hD0r0>9=qU)h -~C$EEIf9ZlOR0yn7T0<jh?W#t7@60EXqX5(yU^6k$serV0p}|c~&G$rt}Y|m5f7_dOnw-6luj41yAdk -7qVKhDg!U9ODj3Y)lx8CgiBfB>~$enHdptGIwj$mxEEnv@mVauo|Rc5SjbCJdic)n1Xx7^CrD%pf{I0 -}lqWLealB%)6|}@7;zAtz(rJx!+kg#D6N<9*+54p|S(btU&+}Lcx?txrt?xZ{x0K<M)!1LHJ~=;SnyE -huV_udlz^zjmi`Up#6o(^*&l9$+s=Peh-WI8UCvRmgBFX)%SZveP_DOrhfTvM_t!~xDsp9;E*ab_)Pq -8x_ouwanEF)___h%m0;-o0DVyyS3kK;J)_oEbgPz$y2SjseSxJ!w{)M?~fE7b*PgEvR7&W?kN4{u(cy -kjre<o@aD-u~Y4-a$ige13FwwY!67Q|s2j9&YV4w|+W$f3$Oc^|DW<?!8g>4BeYx_t^n1cbm(r-RBc} -+&({g_XgK{lji!L&kh2$(}5v5C6eIi<=LB~tG_9MPfsW6Gk6~SeDZEz5lr?s6P%u39=#7<AHDlYlhJ1 -nWQr~la~1?Ll~oY9rHJRAQtKgN?0UAUM0qo2TR*UiEESziXi=T!JiK-1Np(m;tf*vKbwu>3ij{pst>z -VnB(#lBF7E0a;KT33QvN20=XkuftPo`#V>1=f*VxKqzVF|FlUd(M<f%Pu7UDh>d6RE^L0+~lTES&024 -UcDc2=8vArStlk@0$RGislbPJI!mlo2F+Awx)PM0I{Rb2>h9zKQrxFZA7^6WhZ7SAtu+>A>tnd-;H5n -wGLCvfA&BcqW28X5Bd0`}9YPY8>b>k}A@npiK~Wk~Sgyhl~1A6eXqX&C*(=S;=SeF@zxd3br|qtYCZE -(dpzLEb-j={<X7Nc`shDq28E?p%&+d*UpfYRIJXvp4HhJt6vqXzkfZezpt^%Ndb+3n|-;*uPFqIT_em -;x4<K!(|)7KH4`Kp*dToj<(fqsf!8P@bg^2a%h%}gWj3Ebg06fd-8|-t@-gx)DTzPg$oUdSc{FWWCy$ -^jzk+A^Xr3q<X>`AdbTm>0bRnt$#0KcNsu(sP^xDoJH#)^wmGMqiOP1v#bpe3=4m5hqDQ3=?5w@{2Q@ -0tUvNv$&`UIxnxtCW8QUMFYXU*5gq_iFeGu4eiz^HfK3DM|5mO)HdGvGzCoNGPI&;qnjk{8j|JkEfxf -lPpfQ#KO{1BaD}I$%ra&K%E1)P|3Ny90n)R=~%hA7x?bLjXU_l5M$^Ks$Tei*3#!@9vJDNAuCT3WpX{ -B*+y#DgbL61{pP+a%2jl7b^c?*R5L5GrebBw&^ebcH{ac?b*wl<oD3}HVN5_6$l-ybKA379CYY^Yc00 -`s#-Q4?qFloKVYjKl>O3<14;{@t$C|Fcy=&!*8jT)dYI4aZplB200EXG<W%oBlP-0_T{F<B5_+OXw1b -1V{P;9>*0i*iI@VT_ksey7jo6o1EhXUR+^hD=K|bYlQ-96#u=gbv^tD8zcJF*r6N9rkTf}k}GJ)dE!X --}^=$vI$vV{LTE0`(S=&J=w1=3fQvD-AeL!XWOMo9}ct-uKFeMe56s%igq{;OpiDQePYj8w>CSyq(yc -pNvYN*{dCQUlB0d2CT5`E}bY<zgwY#NH>t-3sZ|L-{D{L=713WE_JLa_;_wunj|lS0SzX>@p1nn8As8 -Sk-C*vE(^Q5`?XDc$ZLHMN-Xpc(DQ-RkqX!L@i+-sekuJ0etp-@ap{R<#F)l?Bep>p&HicmJNTXW$TT -LeE1WGXAx^R=E*GLhY*iys~Hx&I+wHKpY^faZq8#0lrqL4G1ix)1bx{QXEI^~umZRz4h+{#=lD7()wp -Bob2D~$TgU{brO8t)5=5FF!DPla25ebf(%-D~4S(Na_N4cO^2M*UgkCwD!8CLD3f!!Mo3W7KW$FKPe( -tlg>d&xA42Oxy=&`&N@yc+6!@-oZBD)n3sleIGQdv_?fv^e8wph_lbqW7OD3G;KCesLo7`$c$S<=+hW -)PNSQH^e4P+S)<c0E%yHCLmw?a=%?i?iAGJe*IX$z*pn-<waSlS#M@qir`l{e1Q0eEM{M>wNlbcOC!q -_2N3mSHY``4}tO@6ppL2%L`y29n(++GpZ&{Fh@t|jz4|sbd#TfQC@tReY+G6CyHvwLF#U|1wix(Jl27 -Bo8B+;SXQo$!;TbZ5E%@1RDpI@R}Cg>aoWZ)n5CjI8GFMyl#u)*m$4c-x}bt{p#fBpIre>jm_CP)&Ya -`n&{5v`#mGV3i)TQ~Ul%&Y^({`8ub2_Art2&COg%WU2Rr>^8izJJ93#41x<95|A&OMxJes|hEQ%Evzx -Z%|K1TXXBSPRR{iz3rQNqy;ED%q8g(T^qTu_&ta!R$p0$A+PA{}&E5CkFOJBk&B%D+p|azl6m*Dea4I -3|Mc_^K%rC=9x!$n+LzBFfa&T~^#u7MRP0nm*T+;igBuDmJpZXz()Yr+1}q6Xj;rKLkr^6cUwgjG!uG -<RX+v@HD#yYf<Ri{pq$25N;Ut2iZ#Es7GuLN2kid5YpX|lC=4;eXPXx3@1{OxaZ_T$c3pcQKiHgDph- -psm7|bF`*+UZU*NWjAs~`@FFI#wk~_|%A-*~$jhq9j_Qo?QIbU2uP~=Ge6U5Dp*5^%uucnF#_vf}#8o -sYiWiHT9ABqjNP_@2FFY)vsPqF`sP;$M3?KtoOnIIxwGdE*&@V3F<x1yOBNBC0U=h(UywGam=}Mi%Lt -T+E`3CJyfTC4cA~@3NUE_ab4&^2yYT(HXOX-y4LA<I&l2`tEKpNi)$ni_G$JBbS#aKU3&7mI%Qj7m0t -rh(4=L~GIwynR3u)nXJaQmtCYL(2gSiKuc|6GBd02s1ct9XU+xG{inXrq43L1nbf+12Rxn3TUs#OA%s -XA0bozpu04rnNpfvK~blm4^X<Y7yk4K^;`M9Aulgm_h{zu-akU_`Ay*WG_+2RxOHGgH*UUA&5}8J@%f -0{hdyGkL>CQv`3!mI=l>}MB&{~eTeR%3iMFvd1th!aY5rQdYwmQlWfwQMduuCyQbJQeZ?10BRD-=9h( -E>yeNfD>JIIq&eMCZK_Iz3(OY6*pU2l)L%K#{fx{GHA?|ZVhC$||>_wVZAOrw0<U|DrzT-$m$ODlqLr -NJ)68gx<GsryuuG3q>pOtAHC@C>M*Qitsx{IwXor*Q7ZWXkfAdT=UT#9HLkwbyfv@mVuXD))(r?-;4$ -bfDep3QT`N4=)B?N_!Tu`}7)nN0Wm>C_qf>`FjC%dOr0XU}ZlK+`=W#DwH=3&;KO?f0r%_~Cl8_59{9 -<A3?;79Fg)<#>HB9QQpx=?(16%W0p!bdwCV_sM;(r&+cOs%B|N1r|IoZMsNb?d~}?54OmvL-tMSuy6X -}cox;WI;~_P{-I^*o{fiTXlv@>|Gsy_!Q8}O6j`0Sj*`O}kG;Wd5)8ND$bW5L<@<3_2O)=f;o<G*)As -Jqd$XMtJ`>xG%KOBho2|I|Xja$%rHC7==Khpw?c0;LY=64zsV@hUNjnzm1{*Hb7Zs!)Yv&uSj~v>~>0 -s_ru1YONGeKHx$h!1CqNV%3W&HUm5=zNZ09F$+%8~yCb?ykA0C;qzMj=)Qw+TG=NWm`6e&vq^((j8}G --5A#2~<$H9XFuh_Ipo<jx|a)Gq7%zziCZlvFpiAtL^LQjW&YyzRz&%wP=Hvcv^BYi>qnZ0;GSc7Gb;? -3?6now%<F*7Zou5j0T1>ZBj&k?JyuVN;cj38qttDC;x+VgXNDC@ab0yxc9#axVI)?-`1m1aDMXY==hi -5&C$g#=Vuom{)umI;g-KQF@_X<dBvWxyKUCZ7?`V4#`EWzWpl8B<c?=EIk1@Q7$#4rJtjLtCX*qP{XU -a@!(+PJ@z}RmOtJox!63~PCaCzLbk*ZwMpK!q`7u=wQJK>B*>UgMOQNQ+i6fdwYI*gTs;qO$D=3VBD} -WzroR!V(-%lZmjZ#ha%CaDfBb^@U$2secbzqN*2lHMvHU88G`<E%h<86AN8{O<7S&cyZ;||<^S*ATL5 -_;Q$X7g<gu;{+qR1)+;eKX<rff@zBVAmF_o334_uFZ^hEy#{GzsSl423zy$ayZ#5(cgsvNJgk%b<OI< -Z|J4@cDc;%0$lmwLjEYD7dv|gy9d_1;H8>f^LAhjiDgnJHu5Q{n^dq;k20D`XkF!XWm@huOKDnQO};e -~)e~E%Z$=E+T}sxntwCrbjBC~X6B9MsN$3}A#cH4cs-KObNj-3!f=2wVwVSUWZZQB2jWv3msa~ycF|0 -crdtdjs-wYQS+xiMPN3QJ}y@g(X7vmm%$?r*So2Qj$+ehXg$j!FK^nE+OVzc&GLu$I+64P%a?4|lGMM -j<TM(1my&5kf6|4A>xhB6rNIyk#}*jlZ3P=%;F1_P^gM(BnKo7Hc0W}Cp`gM>;yQ|SQA@1O9W<Le&?x -Zhd(*h}Ra(gZV|kv&_!f$a2INfFcho~m9Ukl)dbJL(cS4}8W0o4oF3c`=f2xME$Q@R(J1?8`mkR{BH9 -ZT-Op8_Vgs+<Nmst8L?&Ym4>G8i#eYbvz%dy)SC8V>urE2T)4`1QY-O00;maO7>QrbTJw*2LJ#X5dZ) -q0001RX>c!Jc4cm4Z*nhiVPk7yXK8L{FJEnSb8KvBZgqGraCx0qTXWks7Jk>SILkaN*~oD0*iNch?d* -2ytTo#v&c?GZvWA98P{Nu7SpZC=X7b;A4giXzFKuTz_J{;<?%%l}ilXbwYq&VS0Mj;2tu32OZnn}uRp -)IfKvqpDDxs`_vfjuHYz?`vBC{Y1uv-CHt2OSId(f>?Qf=URZ@0AqX(pvq_aX<r;Zhk3Rcp#AaFxTCE -%%@BS!g5OX=she*(8dh$pposE|AsAik&Uxx?3q)mD##3O}9`tLUUW|!}noFi|)->-DdXi)vg;|XTls# -n!TA6x~{<P8!{j)FFs6RVLkgPyyun3Z(4N66h1T-b>?V{TbN8HxhNpjg6C<g8lIumaWO*<%k|z0vzkI -t*%>L4z|r45)lw=u1;*HFHUWIJu&q`>S?1ZqNQShGILBcp<7H;#uY&fHB<X}VTpN*=c}i|g$(&S_#Yh -V$yVHG%?1E%;`Hw!PE+pvg45OWKItc4M5Nq-ag*yaS>_paDzAgm<hIstIF?vv|8Ema>%<TAhBaLMnX} -9f~Wp#C2?v2Uo{J1zjIe+s#7jN_LUuSPG&foC!^NTYsitMx~)){x~E`NFlTQpkeo}m_nX+&li!m8aBb -*plxBCGZ07;Qb?@U=X9d7N#}nDE4GYpb%e(ft<82yq|3O5B&#d+!2zWR5t7`J*^aAv(GEA@USrmx-o> -6cbw4y5|r=_`X)ctzn8drpwvc3jQ(&OL33a(e3U{ffh!|4B!PU)MsAG94d|pHU(8%GM_!mHJI=a4$;- -sB1)!kk`U8R_p*UPVhSUu5waD}wo(b7ej({X=tfR>0U~u+eOK!WleDNcV7hEHuR=iB;B52gtU(wNY@R -wR^Btm5<p>@_g`|+EOOtv9o3t(pBdpgD8Kdsz*Pek>Yw9IVJu{5e*TX(NCo_nn1wL0-R}qG75gvSxU! -iBFaF(ElP?^`KM{8->i29VMKYsk!Q-5?%pgx_#d7!>H8&iK<`Y@lZRzr~dTkJ1?A0VPMqTg-OjUWJaH -H}FtDqO-E6o2O|PJF~(z&mms<s%jmp&R5Ydf$@+gCvQC+f`8&)ExyoouXTtEjoTm@BWWgsNf@}{D*3* -C$qvu<p0PDf{8@ML36bcaVO#>BDW_BAP?%{=0Gj@4rFpTIkL#R@gbr*G@%*J$MIuh9Ild{>+f3hlvVU -#zI)-6?5|yNzsGF8zDXDFZ!Z6HJ;ocw1uL0&Xmh7`ugoyW2oJ*wlZ&j*u?P6p&>5H{3^kTb9NoT(lA& -G^mG;OL7xesq;U8PoL8+&iJUlv?WF<ES(w|Yve|>d{`;HmnTJis(7m1Pol&bq2^)T1KLWzp&);8^+bs -pN+P*mt+*cY&{%wee<#z<v|Rq#mCuX&!#G^MnTCQcIaky>?CyA&#RI|=*^P5}ws*Yee>E9Ksw&x4#&M -hk{zG26yE3W`E}o4-tMnft-I;<=uzl1?zir+S`i_#V00d3BCnj4QU$b=$-zRHmGFN6V*vTKLCdhGL~| -(+nGfh!Y<G%#E@8`#%5YLeP&Ahq>^mn+x4=fge^@;z0{?BPaglXedn_s8V*{jU3eUWg&6A=(YJPp4}^ -6;Y3P9CLZ-3RE29r$l3Q1sXo^SMrBPsi8_x1nk$YT3l1B+Q_8U-)Tj-EMKPqM$=FS?v=(T;)NPr=8Wp -W8VYei$l=osbn;hcU&sFj6?L~TV*5_u2j1zXsP7kX;2IH<n>;1`zA5Ah}aI_js$n0__?I%k^V*=cu{` -fk3zDgDdP<Mt2O6)Xnim~|&!;XDWucOC>@x!OfKUWjcHS_1E(-H8?{CVWl$W9s`hIfWYikD@Mv$e748 -$BQFT`#ULr_d@%5#?p7#21%p^BdiYWRyxz)Ewf%JkxHxZc1(mTB+q56LXzy`+Vr`2;+(RUqaEcaItq2 -D-bP4tZERTYnsgJ;SK5_Bjm&kHN(hzS)aBY$cO@W@TSviMVx^b)E;R2?#{_e@9z510*7b0!=B9$(sy? -rgm-rgGjDi4oFkZHId3bvyy5GRjTXPO(%@v`a^@-h$*%Rl?xWu1&NT0QGlPH9h~nKx1`V7ub{iW(A1` -b!VuY+mB?~uMkKY5p4m4;Rp~`jVaGN3Ug>u46yvaUsZ+$q9A0`=BXZvZU6T{s46pl{le=ykWrNBTI(Z -Rm-YfnR^{9F3f(c&+~{u^G0C#Zj#qJAPxVUEowO)FF_O(SPTqxq)dGc*Go_&Jn`{%(tzUC531JjIC8s -9R;^zAkXFcNRuoXdh0@0)(2OQWHl$m~_R6T(;6@6xeENG!c=^u&vQ=GTb2RXyXr~HKL-x6O~Z;Jc2OK -IMk89$0>=u7V{rF?UEg>XnIeB9=^@T(NRQKqva7c+d(wEBpYPhD!+=NegjZT0|XQR000O897^_9Fr)I -4U;zLCmjwU-Bme*aaA|NaUv_0~WN&gWaA9L>VP|P>XD?rKbaHiLbairNb1ras&67QA!!QtrcmImRSsZ -Xo=@@9CA1MSvmV~ZCvCp=OBDvDJkbhrUPKrO$!DNXR+48-QbmH+0_NB0p3yI+7tmYD=NKskLpjH_gpb -~-594+YFzr0jDb<?ITi{TTE6<P%|cuXE*;41TFue<k4O#(Yazqnbyt+u<>c|+ybjMmh$-3bg<+6vO<< -aoI@km_S4kq|N@E~HI@AV?**7S<{kO3-P4s&E;A8yV)nm_r!GB8xJg!{Qk%nf7xt3{q_rgqLs_bdn{v -Wj84ljgn1G)NIj~&AWL?=X4C(b!L{J4_}y)haI$*BiaX-7JCT18G+wZ5yA>(iK`SNpNOG}Cye=vW~|p -_F}caTse1=3CigfbC@jv1UN+of!AbmJSB-E)8&)}^E|2ik(<++(*>(***}BD@Xg9pi>DCPicPHKGx0r -6-2=R}0V<kF}j$}iHoNU*ua?<?*P)h>@6aWAK2ml;P_Ev5D>OXr5001W;001BW003}la4%nWWo~3|ax -ZXUV{2h&X>MmPZDDe2WpZ;aaCxm+ZExE+68`RA!Kxo3A*#^s-C_$PF5q^(hhX!zNg5o^Fa%bnV{K(oO -HoO4Y3{e*3|}NtlG9#s`4CIw%y4En96mF8Nv^kfO*VPK2>h-aT96{oSXr|*Y05PdL~a?8OzdjHH|k|x -(F}f0G+9h;n5c7JPF|9qlGibz<yw)wzxvhEB;<-QHF$FTVR3e~FbkGyOmHr>Y|uckir2a1;sNAsxF8w -dRRxobteK>FQ74m0zN@$ZmWl}ql<j+MpQ?gN;N98x`k|g|1m6+)Q03(<F~jrnAtoPaQP58X*zs$g$rx -0w;s1Fh!6aJ5<hrSF@?(i6YAID-CFvb2*IXpkLq);-PH0HTOH%T`=#-qjee=tNz~66N+*7fR)yqEwZz -}zGl7nNx<FqCxdgKCxvBj5+sr8+)OIA09to6tr4VP?vB?YXjNB+eGKNqK5F#TSuxkb5lU#}z;GM+@nj -HIqumTz*{KCAq3c}I(UePt(N(mqZmX$r1NQ!*n<B{VS9r&N4qBG4-ZA0cQqdCArvVB@IBYhDhf7Uf+o -c)4SxJfk~i=Y2syOTpxnb;K~WnoQ2kzJnrm^Oj4nFh(<1G5N%K0c4Y`pmj|=CBqw9G;ARR7tvHN69np -aUP3r3O0rX=<Q{fq!{H3Xq^Z$I^_Dlq8X|Oqr-GA<#Rd8K_1mPCW0xFp!FMgJ0~+>Stxct5y9)N1zyK -w8C;-j~m1NCXT^>MKH<jA8Tt1^i&)3f=LQ0tLEe&RVVrc)mTN<KU67~ho320vDYi1IIlH%;vP^mM%W_ -nRjj-+W`<}yvgniZQ^8#u*78If1-fVMQWDu96`(Jq*2%84Tf_T7k4tnk`#3MLy-;#k-TiCk_-Ip1X81 -V@jGJx!G<X$nv1uQYuM57gAtLG&)@<U+{gu&e)O`vlXxW?-c}#{7o<g1y3RX}xs=p@YF4qT8bB_e=II -jvRqt`VUIm90c0R;GmUvUi}|byP01e&)=UcU|&O>6vH65E>WieQmwjRf=JDOMGBkY)9OKPfyC!<DSNV -T&pbhzf73u}du|=U3Px)-I`<sk4(>`ghNE+EEx|b((Pl&-(59Br9q0AHBwi<a2yY@tQm_8@_n$pMNhf -HO#7-xz9?z4tHa<_bXRF4U_R~T}=2@c;3<R8PDhUa{CI!2t*+VCSeUXB8;vrMR%{M<eo?k7lAlM#tcC -yZzlGc^x{_z|&CH@W=nt`XLWEd8GTI(*C){gaQ$Nk`Pj#F4UKg|Br9?S%MtRTod!@01ayH9IM>X-mJl -G83t8Q&(iOonp#8g63zA4PD=Zx)wV$LDA1htmu9oX=)6*r2ca(LTLvpN`t67wyx3I=Yq&f*;m6onQXG -xJ=J+1$R9~gI88wS`K{b=)Ywkq&aO!yT;A@<Rd057l(zxffDbH9RvrF$MkJyVv4rQy+1!cQTBk&0IRL -~Tm-HzmuRrfqF;%-TuXI)y*LFjg*`)u^N@6IJM365BbV`8N=t;ut<onK^UKAVRyqu#1W}4$bsa{NOJ^ -$br|f!*e_o(H1~G@N9`oySG{80It1-tc*s8BY91^`)<Ox1HBCfnc2RDbt*`AnIFId{a(1W#FxD6MY0u ->o&B4a7m1`O^F#O|T~si(S@SbDHtl^sjKKC6|wHQQHxcjg<Y&H!vlT4u}&ioMDp8r-tWQ7!UFl~p-bU -q;YMBe$Yv0~v<GnuRHY%2Xp{eT?<9HA?BNVYn)smIx4Hk|fE>!t+foYIUk~g|$?09sGMO0MvDmK?w(x -!4Tkfw(I3$5*DgXle#(sj>urTm*k4?n9O$oRPPzt(mMv|83>vTEMidIer9C3M2%MDew$}oEPR0iHV|u -4xRD9UHp1?=Oz6_pB>;|GB7%XR11OB|OU08wwV`ox23P@?zo#YO^v`)^#Ho6h)m^>2X-ajdNX<1TFs( -VFdq|^1-C-r;O-;fG>i`S0UlQI(#NLUGkFedk5pSV#QA>aodcjIF8<E+JyzwRn5>z&KT^?y^!=UShNX -u?^#}8yry-rkKmJF-AurJI6&+In}v8v;EhjDBS=>%*{l(i#{h5-qZKY3n;YMGA7kAIgT4B&|O*l;8Y% -)uGAN;_)cp;pjxmvne}V9hGpe=0Qv9Lm)8Kp?AN`$Ct&wm@EWFek@b-{kFL3#mhFfd!sa8rYh?g1sj9 -km^~7{0Jzm21z09=*$~79SOYQoniKu8GhjnmzMgSH+<U;d!rI@ib+ij3OjH|SfIAb4ZOlEWAw)ifw={ -<jrOM$4^Dkqu?)P`c00nrZW6EDT~g9kCi<D`(+rv>ozx2Q*Zy6^HIs}3=7P{cz0Dax`<(pf?q;{&3T6 -4aMfQXt5vC}=gw_S;SZ`v}b!NyTuU?2JOf`?75k6u<cogb635<%y0$eDxF%k`X4|;Ls1&GzAU1Zjg;M -K1;5DdazPv~?I+@RK%2LkkNGuztI^bYhLq{!O^&~0v00{w<kV$vxznw*qOM^LoamHifrmqa$fBQA%Y9 -5hb|25qBTKCX^IE5Y}-X?%1654_A|$J*o_i1ijc#N-)g_Kw3XVkyh4{;7)@-M3t>R$330qjY<$O;mN~ -mmj#UhkoC4DReq6U%go+w5nLS4)=M%vpjN>{P*Q*{8NF=bpin|*re-{_`(!}Er)u-jKI|Pu*SkYMhe@ -Y>N5+6Sy(cUYIuS57cEBl`qIZ$6P;?`vnM7Mr{)wHH|p2uxl7l?P#0xORr<sP%br!=`-Th<3{DTN*V< -XlmMi}}(efdrMG+#VGq6~pyVCI4++<*g+av-Qu;IEZkl3*l$AVsF(o^8p;PEw-{(o{vqxh7U?NcWBQ; -_IIlw9qf&v}Wd5(g5~ek#}<D{QV(^DjU!Bq3Tj#@jUyXNm^Umo8D1Y;$8oUS2U@aJ01}jrUL)<>wDmn -cOL;Hs&F8jo(+WZ4z@+4LfsKW(~P;##Q&RwRE(*Hyx84@8#)QH)xAPXZt~bICPW9nHw~2rljBB0kAMa -Z~KT2y%`#(H$6g!T#t-XceeC9Q$GDj)6-$`yO856?dvQ(-?<vo!fBl)26XMwB-M?EXgU39<qGmTb5r6 -r?ljd?3r+NApuOK9Y%yyAhL4~;#E5_Ti-5U#FmsL-+`3bcs4>$PGWCj+1~roOzy9H8!G1-efQSD{Ymo -Cc_QPCj&ZB++3=$Ki2VwZ7fk3$#jIbN>B})pPktxx?hve-FB=`)`|M(fESJ8P6{E?3`#s{NcU@SB+d+ -R}=7G3)}4bcwnc@G<@C<}sx5lE=<Y|>qYms%yP?~#vDP!B({T7*~Ls<~UpF%~!xdW*<kwne>)1P2DXF -RDp_h+FGTsJK-<aQs5Y;d}`E4hMG`;le3DgtQ;+*9^bmEA;JsqHBq-fvC5h!=t~R14-5hfzuc2WRgno -jMa7Gx~Y9OwC+U${vEwuTrAkr0s*ss4)@4Tnre;P?IOR)AOHt|(Tl-&OmH;$FHlPZ1QY-O00;maO7>Q -6lR;YY1^@s=5&!@t0001RX>c!Jc4cm4Z*nhiVPk7yXK8L{FLGsZb!l>CZDnqBb1rasl~>zx+cpq==T{ -)~gUPYNNjm9FMyca4GLveeiz~^wRO4`95we+5qyj*(UC0041AwGJN}jfQ5dkdD?j9_57YAf^oeHu{Ge -+>AY-mQZbis1L60*q?#)-UUL^8e-q*&@fxTXvI4UAZad}LgtMeZDsUxH^HLi0q6y`7#`G69(~rY8seU -No9UrNUg#@uH9h8y0Z3E<`E|eh0i|!O5anturPWNtmQ*CIZJvSL=dHh*n=h@-)AyMjM`G>1D8{Trg+J -ixrV~Ypj!UeUJ*-A>*}#(QuavGOGq17%CmJX`QZv_y^0Af(Pq6g=S%RgdC8(_)Z;yU$0nQra9~A!5{@ -&26td)YIHq1Q+7qS3#Mny+=N}RTl4v;;EDPAlksBAhXpTz3!Yx3fSIvd`L5t*(zqVwi9MW3%4Ns#OHY -Co<$vLjD&vRY<U=%xqt9oP4jJmTQc$efB3-7I?0{X-#oe@;2SIy2HEGTwqe75={)1*|GGX60DQ7E|OY -bAiHZ0=2;C@$I>AJ4|4|BwT7RO=M^5h28Eek|nhirthMO+t~Ovx-&JQn0EIwQY6dl}SVjuQ^feh)|IL -vpMc^b8RJ6^k^D5kFGl9F_b837C`u{0!bs!rq5yhHV4Sox6S@HtRKKLU_J2X)Ine7YAqIBpR6|ueHxw -@|#P&@o*TLl}>YI8V&os@nBr;d(~VGOC#Pir=7F&QEzr0&iZ<v_S}6M2d?k*PovSS|E{kNdUT4#nxUV ->+lH2BA^0GulClA?xr}hH2060A(`)MTVb>@eM%cDp@Z6lP80?BZ&n97G$#Kpneaz@f;Bj~Um0TRTzUS -g1W5fAmpsb%kCFC3fFpUTOsp7=IHLNilADN|6;S{1?eb`6!mGmq$<$iVK(2iTisel2_$7nJIJu$-W#f -xXPrFHlRF;^2Yf~$id4Iuw^j3oC{4f^j#<4M#Dr;%R+4Wjp9?@JBTx?}$tuEraW6xl5^zmlf9T6!3cz -F0@9FOiM3mrP5*?~rdrnosprIz}8L=O^DNGQB*0M>8Z{uorWB6RUIr0^@4)^epN@b4|WiUZO3$whhOi -=Y6<rFSL*X!K6;6;X>hg8C_i_l!y*N9+zDrgW3q>PUH!TvC@)OO7$A}@S@I#uJ8OW)$`{U&}JptJ<6< -A&xbOTrJ>1MXe-i()z)TGxF_cDxKe`XK@A|9g?bLf3})2|rV(fkXJchtoqoziOzlV=*_C6<WjH#G>rD --Ut$St!^lff#P}h5poX#Mp@g(}=yg!MC$Q6*)S!L()s(b6TaJPZ8odjqT&MKCG*j0G6t*&TBtR6t*hZ -5}yXEY&#F43E8xL(LpnWCKiO?7D}q98X|EJ!K|qgRY)cbH@hXsHkzMh>1odtn=8nig}jJok2fp<=cyt -X4&>tEdhQLhb5_{;2LUuyU26g=th*;}dL^$}T~mQX-VZW^t{07L}$ks;j(41G}cNGf6QZ6PgOPuh^3! -ht^A)WOq-|zO7iJv|BxjRlL>50h+MWahLRHt~irSpbxla=npw)T;anokA5&mAD9F8CRLM7?@vlF^Xo6 -w5nLBH>I}?D$ZIN3$f+LY3@BhhE2CFH6;gMku_7TxPuf7!jj%QYG~KXFw|HvuhiQOM$R~gkdRc4?Oxb -pw>~k;&H!4z0TdeeL`PIV{!%M=JB#u>J#jz(?w(QvM#)iwT;?yTkUz1UhGZP)!Vt%(Bs2{efs`E&|?E -?GtZl)X7R`aR|U@Z+QF!nWp4Jq|o9-0_ssxc%W&b{B`+MEShu|OU(|3~EI#S{MEcF8>pR^sa6uz~A4^ --ysYC?YjE@EX{9TuY=&J%=u%>4K&ti7}5|_G3bc>JP8n=Qs8NZ@V=Rcq8FZkB^C~9y@M#hXBa8(Korl --{Sb>$?<+O|CMpKoYN^*=K;5AFw0;<j>ng`YqttUYc^*R^!uug?w+KA*pJX!F(}Ow+jZ(uhnBWSh=7u -ohn8FV<P}}pcikKza6xJ!w^5C5rMq{tsy4Vw&2Tc=ud5!36(Z`hj)pQZQlVa#o?iu*nbvy9{K9X-)k( -J7cuJ{iYz;MhE!u)GDaQ8HGy|2hX1%he9BFH`cUFplKV^o|i3GzfF}g%_^~1UHdtTqK3&*}uHct&=RW -YD=h9z;y2`)y*4OA!T3A{8};#qrrzkMYo$X&0|!5|Fg_ieNXT`AjkYzclG4gPpdVSf+Oz9eB=^oHD5a -_w-eAj+fK3HJt)OZNG(Z)?kdSET_)^ub2qOm29NQftW88-4reIa@z|_T}!S`<s0g54E<3L;tnw`~y%+ -0|XQR000O897^_9HIncK=o$b3o^=2KBLDyZaA|NaUv_0~WN&gWaA9L>VP|P>XD@SbWn*b(X=QSAE^vA -6J^gdr#<9QauRy5In3QQe+poVoJyWUUxE;;7b|!Y?c_XVV2%acJ5WoVUXvT8>_O~B*hrPprA|0nmn`k -DE2p;zK_V(*`_g06|o6D?@F0x!j@c;QL$)h|=RZ**Xv?}JRikeFmHLAL<qw<12JY6O!{O<)18%N)%s? -N&d;4pd|KO9F%F{fc)z5d#aiKEv_(Zd&~&z`@0{ajC2(6g#68-@)SRBBn)SyNUUfOk<=QCeOvbJeJ5u -9_sv>-gXxyIz)66D70M{Ccq}(xxo)+C0brW9LDo%x~+YDzaixA6!)Bb<}K@@FCLQ4G$vtd6wjPGRxJN -K7E~~4gYouK-=f^2@vH^FS1&XdbMnT8cEKdzDXJwSMZ0|N{@N7S{g8KHcRzgqM`h)fLF%{qXR}RUNx{ -{gIt;vWs#*xp8cSvH=5`?PJc2ZU#LZrZuGv`4H`$wq^i}y!8iE7xqcc=c-AvJ%6a?z;BUopkMZNEZmR -PG{Yftl-qF7e2ktk6aWpG|&nDh1qXV-Eua-<^fMFh;ojEJuDG^YapC23?q<K=;(P?o5l$yU@sx-UER5 -koA$ye%mRh8A~n20?X4Cwz)fo?oFs?BKN5|9eSY#gm>m?x?)%T+!HKDt1eD5Gzle-r)jj}K!D%1r!KQ -mb~>Yv5XXJ^^-(pMLf1ukb)4@F#qf%mDi&ZD8PKIj84ybrDUc@OU~M)+)akMGsDJjr^8G9e=)6&8jMD -5+xXf5>%;L6-|PCXa&on1oC~QqH^}VN}HI(--6O>oGAy$jWUwo!pIs#EOrpuVNI7weJK}}70vcVB@w< -7-QeDlI@q$7eUVZB)ToT35>{6oYe0k<GSgkC;TV+^EwNCOtS=P;ivZUG^crc;b?KpOf$@w0tWuHsCur -ZhR<W!~5Qt`D*8x*k3ec!k-O|<Qpfi$*?d$Lm26zt)z$n3Gt}kJkgdxaZxdy{9+t5C=d}9_D!d@U4*9 -x^^FYaUB=wqTRE#zfcs4)7VOMiacxA0F|f^cMoK^zRu^)brdSgz{W+X+x&xS~5a>}!SgHY;Ee84KP5g -s`AF&`Rs6VKM6r)>5!geCk5L6vK4GmLO(5Wb2Nt)jM-F_xUahC7`t0J}6-dyh*Nb2Mdb^Y9L&GP3{Gw -Oe*g>s!RBP0v<$>Z}gb;WtLuAV7U8tkj&wb45#&osCE1Fw3uf%8M;ZWigy$~sCIgDT57umq(Kkjj93E -=6_Dn`M;=qDg?fK%e1tQyoI*imMb=mqg}4%f!TW>3&RpgS&~?(Jm+&<yZ=N1xGO5zbA;KTofxvetP&B -@M9e=7Mt5w&!UJOos8+shw`+y%l-W!Y#9QKN*yc%+Y9LfxxxoG-$QI)IZa9{{J7{xF+TMkF#{=wQI3X -K)G97eAJpz7*u$Hr)@n53y%Hj?h%n#4D-5;;!nDcXu&vkvccXmH`~_2dIhCZ2pzeH=J%z}|Hcf)(M?t -WcUCmBVfd$rIG6$Up!BPk7Ghl!Rb9h2M(gT1}@PhaUicUJRh|0Ve!7IvL3IZu4UF1cMJBKYSd-VBKL0 -hes`gjI0ImY~Iwm!ZfZ0?=e(osuuRyLr`ELk9sJ^JUSoAwQTiX^b9yggK&{_AnoCLz;0$W*qJ6NQZ=N -}w78KgmQA&BAK(v-w&HHKZ-{$FUyVjCFT5uX_hq{aSFiPD*_`6x>>6AjHMgTwuC+%1ZwC=?31O(=Ep% -xcO(win{|iC$g=(x$Hl$yYLM5X6$Bh;>^AdpOA;+D;Kw<z7TD)>)m#4WHOz{v4CT6My$=Zgqa(Vty3Z -J*w&fH=_X{oBzWn1u{_|tLZpQmt*&Z)`aFmJbR%)x3HK1q(eox8C|Lz>jQ-&u}1wDyR#vpv1)!ja)VP -?9RUKzh^*X)piU0o<_wpVJi%nH+jUsu|;>T4iIs)PSOqxLfBIUl5whKJR*q*BzeQ&p~8lglV>3FfyoI -DEew}0H3uU8{6$za<pgrT;k!6OFG}EN<?0wVL}tZ4meDm7(u|9JrN=2fe@>sRgI%BlN%+#CFoF8O}c9 -6K>Lq>3?9c12k3RS-qhe^@_5jSPhl{aPYDI1(LEI)HY-5FwG!w1dbPwz5gu3_O8Jhl0LDZfYf$r&l!k -`m00D2jz#*WDd8tvFRp}~g1hBkZWGSC+U^*MV!Xuj$5?4n#M2NFmus<CO^bydqT*$ioImv4!Y4kL0z? -+Ao!@Q)U7OU#426SNW=8}ShYv&LqV9B#Z>p%M3xtl@Z9qw4I*nGO%Rt!CgY4dB9^RMOvXeZueDxZTqP -xLmK=M;$Zl-=2R``*<W4^;y(U~ug6bw?o>XP6z}H`PjgbhrYP^ELQFzyd^v22P+icuvf7;u2D|wTWQc -Qz~*H%#{=yIIs$EbWo)O%9s~PPhzpasuhCv)az+1Qm)h1*anq=yS+kwT*dAJ8%IY+SL;#N(>sh#!7i_ -=J`v?`KM4C8p0GwxL^aZY0dQg)P**C{6!(CrH66q<)`>aLyFx;wDB1uOq-qfWMtetOCAAX{f(R10i|) -}N!_J#Te8E0|VaHzh;{&whjrKS>PL@km%)2gAyUOPox$&%hm~-7N0DM~Ij@AY=yea~a_z3GOea?ei;# --TXz}!fecu48+idvaPA?hFEI)9AM%W}=J8{mN(Wh8CRqNd=V4ek8cRl_`3&npcpNFB@N*a#w!h3G*vV -@9RVI8>5=xNjb<mafc_8Cz$-o(tgUOO?zCik09kwyLp&p@5aY?Jg}n@xNnqfTTJ+#jZ%}MufsuHb6zu -pD72FDj9qme)-K4V@ytllgaHDliMeg+Y|Wr_Cy>R-_=LXI~to42idc~kN@{wJvu+aU`qyv3(LnzG{_0 -xK`XUw_RuUX#80?87}fzkMjr#*neSIM<^#(WZnI&Uwbl)SlX}7Fqc3j6`V#oCUM49jHxTse>_J-QWkF -wFC)E{(gxKvF_rgn}G%stCG;mkJ52B^(Mb!pvRp2NJIrc(AL&0Q8&^NhGG_0(-hcq;7Q!AJVcdX^ZcB -gC{m^U3aT*c_<WZ)%KgTKR04x;;#CGG=Dz|%hr#yIr5=ih$y>h<&J7C)T+<>jkypFey0`uWHYb)pq+C -!I{d3J)l&F=#0@_<|mTgiJeMJ)y61Ro7E=BD(`lXuzUUXdrsVJaJ$+Z~HInFF*dgL04cFki}8l!Um`g -EMcrob~?siTvIf7hNvS?CGMdEgHELKVF>^=B^^rY4pkTMnHwJ*RO%Wu?A&-Sg?f*X-tSAy9TGwVm$AR -rP+_XKj9w?2`iT(<XBj(1B%C*T!w}9Wigy|Nx;-YLm%+gr;w-(2WmV#?VKVf%lkhf7(toHHuVbt#=(z -boLW72tl+TaK7ki@ON#^HA=*gZ4bv1#1irEP{KMJu0!;?=X+0Q_%Pp8%AN9JTJG6#f71v`{g_Dh2qZ` -nn0EDAgZ)?WdwyQSL0iQVq}nl8VvRYUQ*N|yETLc8CHEIwJPIS~r1hJ@=-&7Wio)w)_uKx$*FTf!FJ! -;8Q^G75VC^*Fs2>n46)2l2<rt>+`c=ZR3Xy}se_%g}-I4IZfHSWVGvqSm#b110%j;5(^0O_u1(qkG3E -2rzX4VDplOzfaP}xQy%*>WUU)GB)K3K-8CX;K%LB^X?(&kc;KWs^U(9Wo46wMFqMZ$Q(1k!^0u=;1W8 -G!65|P%LG=MM%OAq!^(%TOc&<Z<x_25R;O?hPZr|P(*m1;>kEEizQQ915)VxIhH4;OYIRpN{PM{JHw> -Y?!W=pih>L9kThRd^&jIG=417xP`3beR+CTT5@p0Je?(u{f7W=+yF6p3*KfFag5dy&-hK)8TyK8li*0 -(!y;;;abB+Jsrj=&Cc*zSs5uDnc>5F=XGpCi}i#52e81#>E;c;f}0a)IzQ)eQw8wK!;>A2%9aRRx8hP -#XF+8KiXN0`oSU7Fyd-2!A}-X~%EA3`}}__VB^~oZtUq^rf6sElW|JVSachyz?&RUq?qYTKl9S=>DTf -N0@rwp?Mxm-^J%$Yzby^JG)J9tMoR>mzVHCHOVai#Q$zGweE&z?t(~5=~8PHq*i!6W!-FD5WM(6Q|uN -=&e#m`y<0&0wi@Y2j7xV7fJ}hT{tr~5)?zCRk9mxq0I%L)=!rPK_q+}V*mA+u6~O6Kox#yijFkhBTLN -~STq%BB>O)nCg~I`;cFBN{yV92H4hh>ksQB*wS@Pfq!-fpXJ{cjn!yfs@pWEQmck#O;Qi7Iv^`>Z&_h -^9PJNe?%bQbwlO-5x?#(-$w3uL>AkO&P`CC;-&)|fDM0Gf%7)@p(2_^@92(N!u@k0A+Q^^0ki`_Ag3; -ad|IjP8^9$4DP+P!a{C<+q`C{GWf39tyy`Te!DK_x=L(6r4M*n`sR#IT~#7lc-+JD9Hi*u}04`EIECC -!@P`*|D96W5nkVzY-(T9#8I(b7oq?O<LsruQpct*viAXKB$iaFY;;l`6znh9t(W3W&KyY!%??PVoI+q -3?_rGYkK@IV1GEM=7#BvCpk7sE4mLZ3o0r8s<6*+ysrYxN<#*-r`IN^m9ZLU^;@+(Vl~L_~n=re^mS8 -8<ENiNy+PES3KlR0ky5X#r7@=U+4q+LK(_!?ibxmwaQ0EEp43ym@Ie0(l!OXJ4UaL8okncK~;9)(H)h -$`gL5UwHkK@PqNdN&IcY=?{6ZrQ?pYvtCkc4CEAa&BLa4+JqnX<{VTDUGDAau{I!E8Pd>_*iwIg5OVW -_y6S0I(-`4lQ+!3(#zp%C&_ijwLbQYGvLY^eH%j@8#%sasf>t!!KhR(OLnC{i49afO>TS#?1Jk!d|hJ -!}Lr%h`%p0FK3cxbu+Y=0pkX&%lZ;Ub(+-_S!clG$TD2L1dGja%hBlU_`#!dp#=nDPv>)CX3=~zV>Db -wqzdvNv2=ptPCmx>5#^&nPkpOX_k;2{8g_$x#D1ai6CCf*!Fk#93`Tp)UT^e&Ke2nO`OWweTogtXbHz -Njq&5DE45Z>KG0?ciW8@GC>BUVCqf=%vDj_K^d|=Y&&^*RoR`96f<Zn!*R_;i=T+Q+<9eFssMrPuhd0 -3{5`RN&YdyOtp0Hhj48E<wZE4qc7&_zxFCraiR-W=n{m^yCOnC?sb1DZaWi+fPv^$?Tm(&-TE1K&SBr --<OUlq=+GY*muwNIE#T_O4S>$^=(;ShfexCBi2x+k>}-2=3PUv}h{1%cD_e;aK0Oir%HOt4<7%Tmy@# -Vu4|g+VX^tXlV*!s7AmmKUCtzk}1SOre=HKfeP+~SBgkv;3cTJM~V)4&W;iPVaq$CbDtdFpz&FejiLB -Loy}Fvp`ITUK(gzjv&szY2*(&Lg*<pnFHaVe`5chdNp$|;Z6Z9i8K{m|*y2A9uif(josTB-6_|D+F|# -jq3#ZWCC;&UA63L*>Ok{<uE%ta-rK0lhyKb(p1%K+Z%DhxuHl|}7j-s<wcpc-*&@gk7*o%lErb_a<49 -~HP6zZ&)TwqKucMs>gYvJIYc{zA7;ob&tYfgTTl%Ph9>n1sUDlKeZUT+UfcSzaqXS82_bsW8r@d%x6V -Gk73GB01fiI%9gnx-u>@#DjXvgix=#|d$Oqc{V>F=bM#BEv5zTw-chFi+-rr2*cIeM)a(8Z15t$kiUS --m@B^kM8u&Z;kjTKb81f3oQbq#<Tg>BcZ3GoogQ^gFm(jNvvTu{^Yu>uE^-gb4<e*(mS-#PMBOgqUM} -6o?WW+3L)1@ZPUcy6CfG*21dujut~@mO$5~sqT&hN)F6k7lD4w`0EVySlG;G|yhQt@-h+z>41-QR-n0 -fXbgE*#0v6=?kh1Pv(|BX6yLHeJ7fTMab}7a%v0l96CQ+jb2Wv`_*Vciup0YiR8V}4wW$ne^j&~{Yx+ -cwG_JU5_Wzh;@i_=iWi#U4n-|-_|v@PJ-Th|eM9naOxLp~hq>TdJZL;7meAupYax^?YR;+$_?;scP7j -Lu-75x^1JPRXq9x4m~oI~#gx3b_|$LmqTV+llv1s2D<rP<q%LT}J_|%k_5f5v>2H<#u<=bs)v@JP+G> -T5ug*M#b(w#X$VF)s&{hzl)|i`4woYvTk-%RRTunt$lQr0L5DCq}5uEu6h{bRAFWHn7`Yit>Eiz>Z<+ -vm(y3z3!Rm639gfZt_S56ms#>Uo9hyK%uP!ubga_LLT3l1oQyd?<`i+!#kO|kjE1=0_8+3(gX&@*6)# -<148-iG;vFS!Qx_o(zR#)84=%-cnYkL$4p3VS^n=aAy{@Ns%mjx7Y;;k**MT+X4wPzahb`x79%@$s3; -gwB4y=hqL2j|xU5!VA`m^V*JkRx_EU&O)1+QJ2XnLFOKvm&K$ToBeBGp-E&b@1!TC=yq+Ts4IbGl{G5 -=v@Ri)r^puf6SHFK0StExQl}oketpar!Z3+s2fX8&jfh%t^9yKWc=@8XdP_gMqeC+X&!!5uK$w+7vd$ -;F}*)Gv=QUb8y7Fz~DC)vUYC%NrYi)#FuDitn;=2JpQ!Q(7#b!xf?XBYUQSb^af>3*GtzbAgetnEnRd -nO*RATEX(avvCStItlBCB@lYtfe^GyjgDHo7dos{NokkxHzdSaT0VDnF4+C3_?*_W<Eghq=u%G2w+e4 ->P^(t?U+sAwZ8^1!GVRCwgF&O9|mP}!KPdV6|?o-^lKx|N`^AzC_gYSkHW<|TFdMK*Ry8&1Ip1x??&Z -IYxzcyrX(t<-Bu?#745xPr?jSTc~kP|%bs$uEi1&@eQI${sB8V=wHhti(lKQsKNO7UNGcXaayyIV4%o -vRDE6XU4L7MJpgXoVz3*<baRA{gF%4S_$<#*Xdv`oriiiZeTY&ZTrNhSwfUL+;)LY@S@t=1KJaIC>A_ -M}>&P(U>5N^mYoYJ{25+7@53{Tui<53gF2ZCO+D)&K?4dkI#Ftq(}6Q_|m?lQ8_JYb8^GPfk|)*1Tq> -id<45OcsMwZjzB8j4<C-B5ab6@7smh{x5D&R_#iaV$h}+Q??`%?WX15Pg*3uV4UQ3j395fP<+W-$z4e -SbwRb7K0Bh?V?00Rmjk&TK76zYln_$Jr|DJ&-dKIYzU3GhRMxNpdY8e5pXu0N&jbzQF|A`IhGz8sGMw -?>55ZU0rtSN6VMaYA=NndF%2;{XkUGDf61Zo#ioS~KRcrYRl&5S*li{!{d|GHoi+!2GWT4Yt-7VF^|+ -##2>!+7x>j4@S!Bpew?{5$HRl7mn<#>Sp!p?gW^<WzxF+c#*jg7O{O?9d{OXN^GshwZf}3*l26qzS10 -oqP#fMh&Qi3+V#d38$)u2zODHKj2Mr#W9aMxzQ!_wqr)@2m?Ex$RGSB(vE=#Iv~=_!r9=4yIh)yekMB -mu+iL@!|RJ9fZ@fQPMgF|*7-lZU81AGK1+whv94{ZF<m{UvV>X+d%N8udG&MOj)e?C0sv0)I~8*G?}1 -$8fNxjQ6z&&$_c1gr3mqDAvqItG^)?ukukF`fuvH}9<fHD8kZ4JfyEWYiB|*3G8g(K<sn+l9bbuD<xU -$p*;*xGFyKg~b4-~qm`a3X~gwXyBlXVUQ)V{Xu1>da?89d`lPh9P(9A?n9EO-zkI&rXBBwGeuaM;YI! -aA7P{j#e%+Ni6Lz@OSGbV%J$gBN{w5xr2a(4R&AIz1UBPta#c6>v=N(rZ+!)T7qW7nSduzvU2iJUXE9 -^#JToY#!+cP1_buy6<;5Vi#SPbM2e8!8#eJO6uAaTfr%LVJ=1pZu!j7x>Ma55U*m`HcPD|V|#_k5op9 -x@OQ}J7z<!t0J3Et5J`Irm?2#i<=Xb=6K$~EsNI8Jf5c=X+70dD+`@@)ze3(zqdL(o%sA`C&EG`Zb{V -nk<Y#0%H0R}OOffKE5q{E2fMzA-(}`MRFrt<YPuNZPb#){S^@jO%cPEwUAatHhTgd*_pf(%ZVLYKm`M -|hi+g;rYlw+B9HUGR<(I3!AxqpyQBTiq>d%BCC9x21;h4=#;FlCdat30W6^T-I(RZi9bPYifJ4zB@t8 -5n6K=<2~$t$P4CZP?qMc7ZOVKUcHYw}HZ2Cd+~{$ELNRt5If~C@;$^9w5*99hE?TQz_r@T@3tN1$u4# -#|$XnT_CAjB_P0Yb2QO})DMkwA*Yj@%xvd7SeHc2$)Xb<yY>Ow^EDvul+P9!yGLAn@+ex{B=AiBfdy1 -FCH{>Gmw)(&{$9(;M8imCX>?hxiA4a3wdqa^Ak3H<j2WLi)CDiT<T!1CF=x<e47*#-{w>-R@Jcq=Wn; --*MM{6a*eRhjns-sry9Iiv6~D-5cK-f^&S<%9Kpm2=IC%*Jha;X<Yy!Fj*UM&OZlbm}rbBXSSCZuGWK -+AA#5Up+?ghB1*#g-=&4ML-h)wM(VE4Q&yP9pYJin^Gv%f1#DI~iqOX05iuAWy^PCbZ>q2yk<Uekd?L -md9|G~A8^!;yfW=2hn8RF^2xZJ{KOp1%A#O0LUd;bf`l)%L{L^?Cz-o{1-V9NP`=*)?!FHr9-69=j5O -Tsf3tF$$?9^KQVM7G?E4L^ikfv`fw2J|iWAb5vkLMAW3#{W2X}CaaSw?z2;r@IsNu!$muqj7t!*@BKs -zRlp)eYme^noL|Q<Fr}+Jk!_QX?UwniQn$R=ah^I(p(_VYx8UPD{!CtnlT1!D+{~HD=oJ;A-HgDCph` -7EIL?Y#Z9*ol%aK3LlMFA}^DX_s{XKy@U=Tp4$IPEyJ|vRaIw&0pCt-J%5n8?Ms^+z}-qteG{Gdh43Y -p$-k>m(@7eCkeYWr4e`Jw8k0JtQtR5IT%>*4_zMN8h$(%r3s&6-0?->Iwh)^5TY5ZN*#fWbld)7!#&U -oJ6Ix$iqeMHv~Bt0=YGELw-T+Dll~MdvP)ZQ;Dq6({mtKPw=~5$@t_E;DYor}$%%13rY{O(iqw!T$qL -O9KQH00008031s8R=NpobBqxH08>2x0384T0B~t=FJE?LZe(wAFK}UFYhh<;Zf7raVP|tLaCzN3`)}O -1(ZBCsLC7eg4R#gVo90p@PU|F2&p<9V&Q7oW3`3D6uFafQ(utDoJ;VQdXNIIi>fuLw_Z6*??CLQb4(B -~X?gl%#6p}4P${Bnob(FGH#5|KcVRe@9l2w<SRlHnDmM`gMuZUv!`lP^S>~Fl3BF`opY&+PTu_#Lj?A -`GP0~4@g>Q&gZKNNkN5S289giWyi&M<f|3`x6jffX0pBt&S)8wmlvkW3yoy9BgULj!ioC2?nqORq? -84j@X;i_0mARK|X<f#7wiFkWWtp#-dYX#!U<E4?886rR8QcH+3D9?N_&GfO^6}%r-}jHzkZN7PR0hhQ -F!=i*;%Y`$AItn#o*i?2djRZ;&QosP!GhG?Cm}V|VNn6sqEy`-^IvM7#d^$1U6|otGJsN-afD;16Gc* -Bs0mk5woXM>-^}2;mML9NCdeO<->zX)aKWoj^vn;#EL!m}1YAe!>N3x?3<1~>aw@XwZ1O`Cx37pQd_H -6Ja&qwbWdFybANS!iJpTUh$CL2$-Vgi7JH(n(S(P&eA7?Q1mKNX@G?}-9SKf@V4fa<K>=$vM-p4IKTz -E4x2!L@&^F)++)<TNr`M2iTH$XqRn@lF*Vmo|ya1vUi0y&@%Ap09Be&y`VF570$pR>g_fX8VhB|C{Ob -`(a>qwhV`%aTi;RS`<fm_ij@u&NZm7Sh#-U0-sZf{K#hGg(EzNy(y;gC1v6fIWd-iPfsEP(ie<)C%G< -l9%{2VEey-9g1qrz|P{IQO6M<SVxq~oXNUCx$`7wXrzlUlxbecFoXr3dLf92mq0Xp0;|0+Iv4b9?1XM -`PVY>OPxumWh)h&r=u4h1Nz4Yv4kLL27JX&#(Cw7X-?Gnn#ueZ24>1Hb6+o7C7o_<$XyUX35BLENK1b -f0Spmpg_8>RFsc~2eE)KW>vf@{0;}SRtOy?<IfgsWSM4;}~DTw=wU5hkj=kWF_O6v%?%Q!d(R*4n25L -cH`1*0Udz#7w3GEqtPHAsZ~mc!!w=~uSmpoGZ`R6)S_RkTK|2n;AM!KH!*pewbJ!W<G+Cu1^>vJ5><# -ER&GBkf?#KTA?C@Vh_5LjV=kCF-68^c8xr3nI)yX_ghRqms|jht`z>;|v!F+6Jn~iZV}X)KDodGO-je -J9x{2^Q10lP77s{UxPxIJX(=1*DLS~K}R~sagYpt`F>9UX04289dS;lN(cV}6cxOz){RD5;|U{a8qm= -y8oaB^tgmll7-9OyU;?l)42J5*plQOAWn=u8#=>%t2-sGB{*A{Kp*qj=w8bTsEQ9bUKzEfl@oB^iebl -rCv!?x=R|gm}QO9{Q=~Cr8V|-g~yNVihJ0&%`1V=NEMH$zkVtdDXM@kWSxdeQX1U(2GeCW{puBA438) -=V?A?t6z;cgVt@hi;;>uEc3YO`MXgjR4cVnlEVX^#XE+XIIrzVvQ;)ZNW*o3%C9h7ot3Jp;y=ho^W$I -PTbA*sVwu@ZDR$Ga=24O36cT4L<yDJ#&+wkW+AD+Yt_t<QYKGuOLPx6xVznTm<ZEv0ltGaO`tPGQLic -UpY9ZB_TvN2p$S>GNYbS2frVQT;<6Sj8eN_YJu@D0rvw~XvSPhaV{v>k#99o6@#5hdcb!<<dvE#z!f; -;lN;Q{=Q;vdyq6TOWE-mx5(WgafEj&n?x`WD)3!oEWU#Rq@W8Vyj^aJ2D@GBRV-Uu`ndw7>ZfF@DVwM -#|N#X-@eaDBA_iQju)e4Mu7_p%E<y0$02#H^)65#MEDt*lTbP&Ie%4~;R4shlpq!*m@g_2H{=@A%4cC -9uldhE72bufTkOJb>^L70ev?3ZS2maB5qAmQirh3lET_k<EKl!9`lXMd2-5L1oon=zHQvb}c)q!&8Qi -Y(5{5?m={H%N%(1S~cYRfahkuo1GYUpZPhD6Fr(TH|TV(6|SBAAq%{5%^<}A7)bCw0$zyPs|h`vPBpb -AZ{*wmAHmiDy`mOP6FPE07l6_py*dnsUT0$MD*%45|a{2RE~wVz@z;mws`##7>@N_DJ!fOOjtlg)HoK -wwrf#(nJLdYv`*Puwxx1btOWXRcbUJKvF&EvI-SS$<GM%IJgS9QD`6F(HLpd0R;(##XUDV;TvH0!AQ_ -#3MF#>p1hGmj6N$kL`An&EgVA6Dg-G(sLVdckeKyr@8q^ds&-DuDiQ%%2<xBX|ti!}CG*Df$^N!Zxhy -8b7{_3d}E1VE!!0|8RyoS_^Qm3e@Ak|re+wuTIl~++}0JOi_U_Xfr@-Zmbb1t)I6}ec09&9#mDhFbPR -uA;mL>wiAP=O~J8^5W*Yakm|kPoI14TK5^=N!}~r$RN*u$NU;$ekB2E?}wkc>tJRK!Fy$C`9o>NLh3F -VzGF=*r028i~2U-`fjoP>bqBe+HRH%QzF~KBq-L2hw3;`dTS?QaTONhTer4j@f}VApq^%Gc~>JEFYyd -=ORL_H`o6Z{X(~(FJ(2!&aPob4^p79*K7BfT@5t4ry}<xfxexRLT>o!P=&d{(TaVa9Cv?=Ai1P$o8CJ -H#D){B|!TZAx`{D7y|LylE*7LY%cG*i}d@o2jV74rDeXZXkhRvI;&5!Ws;24N|#-3`mZk`IQvn}WbxI -+}<c`Z^XrJ!a}b#a<U3G<XY_xd^=SO|XN?Jy|#p_YLxn|*nIJg1d50?;W7>To-p!aaC%o+bX$i;G(=k -~?jk^d9mdC>dIoZO)oYd&n)V?e5mhcz25oxbp%G?os8kTo2m4GJcZ=@6zY2A$r$b%!rx0_|b+zMTQd% -kzVbwjl;(5!PidLjaH^>b?UfqZ1JG*XAJ`^NYf4@SMEYKxzOXlpR2EaxR^~SV3=0hK$iOt!BJUsdMS0 -g=Dm)Ac3(n8&l3YkeH-+GONDR_OnT#T<?Z|pEEzt{a^8+ZVt{@WAm!XcfS}5_4p83*aHFChrr5%Dvjs -_|JZ9h&`c<!L*}=y0EL~$OAQnr3EiA~ezFASV!fr(kIzDfT21vyuTE9xmfq&0%4bSj7W@x6t0)vuv)@ -MlcGc-C4jh!$vEu|?40hu372p{VP(HcbxFuL&p??lOz`7>%FBc14tuz=R3#W}wa)L?N_9$jU3l)bT<4 -r^5Z(4-3@TjrP|OuE$vz>$0CB^EX^N-j(pD3&Ta=|u&2F_MnC9#rQx-Neft)%Exs%x4gZPLT9n3O3;5 -waGxV;E=zT<oFFFxv{7~cR)iE?0JDYqE+E2G&%zj>f*`w5D_NKh{Z02s&d^Y43g|se#LzojkTDYm=_i -M8|L@>Wto?qzzV*8;yNC)wDy5ruaO^|wnd^<@VS-XaE0g2PWs9os^^R%+*dSMOj1Z`L!e(O8rHVh?;% -#rd_O)C(WCJ_aVdxjYMi`m3=PngQFhU-G)}k9z!h%I@ZWsv(e-ve*>H{33FU(U*!-D5+_CH~nVV-bcR -|x>4_*Jsh??|e*;e<og@Ro6-7whJPO7awTC;n{hv22XspW;bD%P))$?_BphJ-e6aCQ!w*sgbj{u@&Ty -~L-b3U4gvfh?gJt_+Ks878_#3C1>%g{Y{6$M|G<R}*yy<Cx9-Hipnc+W2#KV(5{zeWC%|XlKLfr#>=v -w^Qx7*5n1aCE}l2^UgZB&uoPo2zw@+IU4@2`tRXD26JoXE5>zvyPfOn0QLVG477<u-DeBIIK}&#NCQr -wqu|}F5Qt5<jA5zRH^|GR(eS-xr4IsNFb559atVA!iQ$~`MWZvF6s<WFkSR&POIXR3$ZOe7Pg|;xra5 -_LPrX$dG?D`8;N=zTe$v%VxH|9_z~<TA<ECo@mK~^iL25n}rN$}s9ZGZnnNo_VN;GU|RRX-;zgeX{(n -CMN?>@n?N`1<Jq>jE*ZLHEhxmlmu=8Q}=5I5QdW7N7HcEH8@`A8+@x@NP(fthU(1StBi7Qk2ZO|Hwea -KpIYzMA+Ky`0_o1g#wN9QUMPPxD@lC+O#fh8Kg;Xe`UoSUljV_gk#!9!m8b+QqISh%aS)>Enmq9T75I -Y@ds&$sh(!lek+1&33IG*wA5mEr7hO_24FuRa90IRo(ZBBDM=4J%%1n?2e5m7O!7<Hs$9ci^_GVl2++ -Aj-WliGh=a4ht1-K8ti&B)_w-|%+P8cU@y<RdHpJU_0n_dQ>!nzwK-!ihc~BnQEAN<P@^vKPd$`sigH -;-6<}8vi*4^rR}$0<bm$;9{Ek$><m%!c8bCM>D>m54;fKQ=_L<|3WzJ%BYSDRKS8TC82c2L?NAH!P;Y -e_NWnN!gvaQWv`_Ds5d8?N4$0@T6;mPYWIgH}%eXAK}sHWo8(-}I*M|)l{>RT@=S4!qux9)aEmr!Q{s -fyBVZw#A8GSezDGh$K~^qj=}m|4suW{Xw9Y2!oNYkZ`N#r+`M8etPFnKHzouseBV`bOL5=8T0^r~pZa -#~4#8zOn-3S54PfJR<<PIPG&|U$45(=K^5WmYR;XYjapgVQad6IpL#x95TWF{DGPaSJ#;ck-b0qLJNo -KVqhkJ48C_cBmoU3iAN=(I<3qB0uWc37p1__YFk$elitR4S>jPI!ws8_CgPH(4`-Ggv?t3@yjRWHGRq -u#rAiyk@sy_TwK4~7Q=65msPJh^-J01t13-zXj^b`puEnjd>;N)QHK|3k5zVY@2)71y;u2Z<<`hpxny -E2=w|&nR0@zOPs1(Ta93u_`jX?-HK)2>m36(*~Qyxjm_cX+Ly(&0W1r{2Q(p|5aE2~%MP=+WKc015m6 -i4ZGw3g^QAJau@GxL$GT;-ltW`>M#kU8LP&^0XYgkl$`GJLn`gA_Z1kYX20zjdYZ8V@GS<xO}?ths}4 -Bo@A%;SY4PXzXsY)Lm!6GnbNG=Wd{z)io466VTU|V@!I`#ZZd>fXbkv$hOjCT~TbbTB6j1O0uS|#Q2- -#*9w715IL)h1Pj@Y)*$wAt-)dpne?#MIEY~B|GP@lS*g;W&EH378ZBV}q5?enzHYrpli`jP^{|^ZgH| -SI7kCeIj^=O#`V(-^>O?H<JZ){^?-^u{d&2-bg4#l8CSm*rGHYup3+DU$8c!pu)`^|VXr}1|gZ8H{qb -shD!KuM+G)6NK)R>7BvFZ#lBG&wYxLKLA>KeT{Dr8}$+S@9wX_l6H6KDoAf1`^dE_dtIj4cLi2LGPuZ -Sn6nG9E+plMM*}enTU|KV?WR&FE{!2au6<25j9k;2vWf9(3R4;D1QgbR?v;mEYg9JyIY~62_AR(KIIL -*F08{@#v<+KnX#(a7h2qqq8;C9B`kuU7TJ^Lo5wG5RRg9&^?$*HH>(Ly$kb_O3*Hv2u=1OJWw%SeU~a -s;mjnm^v-0}A>`g$y?xF0_fmn|LesyYYW;;X$o#OXGpGx#e|+U`&9%}Slg!vA+qhixfp517_(17+q*| -C`#UuR!k4|!@Y1AJ2v-+A%Wuz)9m=LA*Au6v$W{FGJ%5HUR%8yYrpOAHZEIkVts$&f70LL|_`a51u=g -urr9b8u&qP;R5KFeDDFvr>dvj^&pHEiZK2W=G-n}f)j$dRATp@h}xY3%gSpg!eh|Lytcso8s1WJUQ$E -y_9`+ubs5_bJrQg+5DYZ3?z2-B2wHbei1y{-U?DK{C`WcTacgfTC^C9evM^S@)c`*}=rRotgygF1|ty -lqj<s7sfriA+}gL+adZlg|g{m49cl#?a)@85ov>p4#LYK&#+gNL%IqDI{wT;L2JxPPId>Lyxl67)M3G -Nw$i^djk2oqgTqJdC^s7b8jj9cSVnI7Sm*R%N0(gXum(9t587IyJ7+OAXJ<RjTE#95T6hmk-yJ`l{1Z -@10|XQR000O897^_9LG$P{&IJGfXb=DZ9smFUaA|NaUv_0~WN&gWaA9L>VP|P>XD@YhX>4;YaCxm)+i -u%N5Pj!YOz8k3V~TKG2L%MUKrRkoz;J`wNgfncpvjT63B_f1mzFQ^zjtQ2yeYElpcN8JTF&*%?3vLXT -&{$Mg~$=;J*$!&a*<-8F@vheP=Q$?7*uNwa$&!`DU+1m&T6p;KBLk?7Tz8l#s?83MP|j`Uc7H)Vz@xG -hi9knPR=h*oWsJNDJe~Dn<7wHN-d03w`6Z26{K=q=4cQyG>OP{?0I5cN@YmYTPV2(b6bjH3GVcRl6P2 -Kpo!odH<!01MR-|}i3mOw6lMfzqK#Lp#wJ<nM)NXRMo=b7<D8D2z;&HmBXe3@C%MR6%3bc>+e+jaS%B -l(&D8pw2I0)PpNfJ)(nif@-nmq3GINL7d9p@Qaghf8@QH5~LeKNkJkh%G{$+)je;@=4k_kR1d4(rRNf -k~!pqKCa_Wcb-T`RzbH7w|?0-J<NE~&f`RGKmXy^>X)5uyt&xP*@<AK~cmx45;p6~RR&wE3wBG;91s1 -l$<ZXWx@0*Op~qS&0n$A<fgIkcCJsU~`2_ydf+V#@sXHDNz1&JdbDlen`#aa+*-bBV2L0ps3bYWO!Xs -Xxb!H-;FRUNFWnSVPbD?#kd=GTMxcw`(Y5j41KOqh6@-(WWnJ-6I(_Y{|>|Y)@be3caZ*><U1B%8;_% -Xeei3Y?ll8U&UYjn>*^}-$J8n8D2#KtK^25nO`)k&Vf#H8I*w|SJEL|TAGr64>*u!RxrJ>m^kG=;CJo -ZO1ufPhPi!rnYCNBl%6uLX`UY0i0kS}#_ziJECKgnAEK;<lY#q1<HpwjrmM*d!b<G!;W1>kDmuoCcJc -vOoC<0MXHOW+yLw$|vVEJX#ZTE#=_SR>F@aJLjVJn3<DVE#!e`sV6&TyHex8RgD<6026T_F@L`~wwNA -*Wy;VXm>W+XmK%c<$6_I-Jft*Fh(xOjiv6wNi|H2EQD`!N8u;aZ;98WWmC}?~6YC!fjmJ`*Vn~J3W6p -sf$c-iju0Kh>`hzj^cxn=2EwLdOvuho5Q`zw<bOa_g_%U`usok<8M+F0oe?0Ld*F#JQ`eRuG(SP#`aO -+*qv@=Tq--o81r-Ltw+-KpLR$_dcLGKk2#}9&+xYJt>k@A>!HK>JzirjOU4*>yUFnSd0t5HzSHUXIFo -d<n+6(GwDXc%ndkV~zwfKGZd@lf*jlBAUh0`@XVAQv0D;wNzFC5dJWDI}wA|*amVTN+8+DU@N?&KQNs -|(%&=`&>Xw762`0-|y`#ln%-lYcLIZ_9Abm5=wo}vNX7}{<aR69ZFnvdAYD4f83BlY07#vD?u{&D+pI -vF3$?87Y4E7ZM5G;ONFFvEvUeoltdq^=E)B6$73rnOO$uC$wta#1(H(>XPS)JCn#T$p+;xp2pDSZBb` -=d3{TR&RPRbDhdtq8ropT3WWRnD+@|)M;WDJ-Zqx`3+NJjWxLV^SRH6bPmV_vCcX%>56#guj$v#*DRj -TUcPYS(n>`v^XdHb-5>8yLcRjS_J0D;4#Ivo1E9K;Dcjx4feoUTYwl<_hiZUc&9;kwd<?I<80$4<fa& -3E>#0S7cZjW>#=+B>=w=?d>+Aji&Cj&ku;u#e7va@8f8YX+Isixhz)Cnw%3?~(O~(lVZP`ID=y<7QRR -*uZFoGYC4|%Gvwc*fhY`Zne{zf?Nei^u;jGL-B>a)d+pj|nvmB?xjiO{aX9T5&V@ZTA*<GEcNM@wwHy -zA2(OVQqi>jB@um_GI7XAXu(%-)Ie`8KWaYzMA`UK##`c!Zj^el_f5+&YC3U-l9ECi?Za%soY2d+-Gz -QM^|ET?xemlhh=1bkG%Zvl4Uz+&-7ef_{n??k+~ojFzyWg^7ue>55s3eli&=6%Uz@_E9X`R%tG7i)yU -+L>MN3KJl|}QhXMmk72mQPXCdf`WZZN8A9(LP)h>@6aWAK2ml;P_Erlr3#IQ5002oj001BW003}la4% -nWWo~3|axZXUV{2h&X>MmPc4cyNX>V>WaCzNZZFAc;68^4VfzUS-v5|Rp+PiBtvC}m1bv&1IJaI1l;O -JC{f@Ibd$&!?9CC-1pXBPlPkd$msGSkj!GO<YPE*6V@2ec#JT||YLMX?h2J6+0H#8Ie{LQTaonW|ir7 -fO^WUlbyp@xzNuhWPVZgAK%cl^0Q(^mfG4U~eE~GG(xz&R$uVK%6PXFJB+OJUTf$G7~2JE>F`^(*_5* -%F-e#(|iSbvosfBy2xTxDlt{1jN&5b^`b?V<|RhrScN5~F6^rajFxE{S1)p9zg^2biIREIo8{?3l&cI -6!i>F?aV#e>)^ZF260;A$dQlF<n~dnocp%P}8Nn9E30}WjW(578gx0Mo2IHd4mtncgRblBKC$lJt%GI -Fy_HLB{??laI8C|LMc=HXx^?Ktm7#okpfjIXvnHS0%2+xR{zP<)lxT?K4POfAeO>1x7AH6+0eseNDee -v$y(c2Sm)a#i!6wOh9Hm~A*JBRdk)H}`9X<C%8)D=B9Q8hs$oO4KHfE_MJqu$wa@;VJ=ybUQLu>xn*Y -lHR#K3yCQctp>~U+GiBv7b5v17}3zI^)bm7gQ$)4(%FR?Q0MO`T_4oy_bvZUuuQ5)!2?IojT{Qz!(jL -EA6|VD>g8T){MqnwP|>FXqr*aD9cOOnaraiP5!OQi*yPsYZjWxb1hg+6SLK37#UOO9>nMbHVLkJV>20 -u*Q_^4<U&nLVyw?odE>PPpL_5K;RWe(u3{y%5lqz;{mF8Eg3BoBZ%h(^iu=7@Z>na3ZKi*vX$@&(eX) -CJcx_vc{W=<IE<BI_o)Q)IRCDZpA`CquM?Qr7U9MpFiBJ)sav{YqjAc;_e>D_;73t(RESAZobpVG43k -Fx0sbosTF-<h<m^&(%mK1F7;`HcLeD~d6HOzCwOxwN-oHdpCYFH_#;ofjz<>m9Zx(QWAo~-UzTBy!4) -&zPzUS<Qk|6ayRb(H66?z@tHfrV+%Y9-ea(J4hF8i-|qccQpRmoZ6vMzJZiOJ6U~PCEVxy5cZAzErE> -Hcjm@7-`OUd?AaA@wi{8c*aTt<7q9MU>G7G(!NID5vQ!C;!>%Mw{8l}jzU=?r2ZNeQBssL3DvIxQ8c_ -XI3^Yr(G5pDZHa||Iw=mr25gzc3Ts=XON3A;o`ir_BnEkvLTYlVwFc6=P;x3}%Y;o#z%D3su9p{=W^n -_NlF|-gbTxr_yk;`n^`fDO2_p4+1%1XGIFj~<j^{LjI!Vi83gZivKnlI494iruXPO&+sP9Is{+#R{Y~ -WY@-sD%C_8-LO!6rWEe@?j`ZshmRskVn3*iBmE{X^B@kt<f?C|&2>F`Zru<vi7DS~2w`P1Kq>J*D;G2 -L$DYl{FBnrx@#CH4YaUUi2M&f4w4`#0T`H@5sV?nJc7c6p-B&k(U+|h2V*>nk(&xDQI6uaf|`sxpZ>1 -fd8CYkDRERQY_?e2&q;6;UK&+R58^rn!WY7UsnbQp&n51*a|4ly6d<oi|$08dC%OfeEf;vKR@;lJx%M -!EKf63NUMr+wwxd|J(#IBp$P<IVZH)6&iS?n-`)L9$Y!6`=&o{BR+FfWV#&V<8|mm5pd+{a0&LEKzW_ -ff##ntzgs!tPbp9#hVk;pC;_Fa?Oddq2XB~>svoR%ASanjul;Cf270{aq6-Vy%KTMy9TX8OTKaS|jhu -~K1`ltv1h5GrYH)ltFn<7jymLWUc@j_-G`bp=YRFohtg~m_N^Hrp-op-zRgbYr`yY^KcIuKOh;Q2>9e ->UaJnCqE}0X&sOzgYWV+q|Ia&eSl}K_NKuX4^y(6i88_w6y@kXa_B<#<GLCD*FUFV1$~lHUW*vST2x< -c!B2zu`o^GwwKDmB<S<u{)qVY_V%BC``zFE{*Ui}XrS%@Zpv#+mJ5|fVJ&xd09TPh%|Jwhk2ARa{`c! -Jq@Xav4ruQiPds59o7bzPSmsm-%2LQUyO4jKs8aqlL@<e_2rEKjbfUnI61=y)IyHXd*{yWrT`Qc{%aW -m;{}+W=mQTZUim4LqBdKw=yU%q(AYQZzLGXqeGF}1k3P>8qkegG$<OZMQic$Se-9OY4dx7o>a)4B`8I -|c*3PiGHsk?afFf%aZt}i06gCecaMUR@v5X2~%nSyJ~5Y0&hpcAdL6){;MBB1u?ww<NL5u4=*_~xQa9 -ix|jP{n~A&2)jPYQfFSQeGnHb8{}coI`PobeV^$2plu2%?`I8rBqbfnyh?WprlH<2WY#WnG7%Gobrq~ -n&dKHX>QmUhuk$}^P`^KsBMB>7HkXjIK5VR-}i@2LkJ*40A5GsMITz}H;q7NEaX%wsfo1@haBb(f}x6 -9%POTykUrSVSm{M^uEgKYcVUoZ!rvIr)yAtt5oBrBuXzK9(=wM)Od|ZK^0d%fq$G9|6@H|+(QFNxi8) -lZv$khG9lUk&rC-X78ZP~s2eTa=QnG>2y(xyJuEq|MKI}euTQUoBbI8~)Ao(fT4;S*ZWy~K4TiwweqX -EGzpqx-Jkis5CutHLkZ*#qzm0%kO7^;7Svqlq_;+JiiTs`MM{paiT;(P!3=`&{i@O*FghtU)Nk^j7Ft -E!Dz`vpzm^qJ8fLjW{C1cuf(eisF+ZH1bXWjnN>jE7sMZ_xt$uA%4b;`#3QLoj;oyfgI2@nK)yPHw~7 -JiKM+d`r&x7DKlt0Q>&Ei6vHU>*3m0hC*s{|26G!PAIz81j+7Ng5zZ0PVDk}+eB$8ch_p_yh1+o=N6* -4&Haa?Cr{fVp^v{wK*(PnwC8~Dl+UJZ0zB4)|L?b}1ipD!eQQJ?o)9qS(1(-{TIJVdt2eNL%Aj_1%59 -@luik^)P*n452uO2v)67Nx`=Q{xqiOO_VDcFHi<6ZiSH;8e&nIu*9=&|QSt?P!f4yGGVMn~Dwkstu<f -v?HH2$?9S4BlwDzZo+gjRS9S#l88MIEmwD3r`mytV3mlMpgWqmLmYOws5P&+KW|n)%0{%-7G4J-^QUS -()a_gy)=&E>mPGnpNw2?e<utW{bieIk;T~_KOEtd7s%1=6Slz`sPT&_i0UC1DsTfJ-1O{wEI8@6QUXU -?Diu{4IDDI)8L!D97(h9yVT&O4oo@`s}gx!Red{@*fo0oK(yW_ZIUqb4K!Ph!6nBIrag;xX%Gh%*)j6 -eb8WZ54ovnwD`ZE|nw#ytwL-SkiYPsF)6@q^b!<o7epU&`e&kuyzS5bmZ6_^B|7cr_G^c)4cfZRd{tk -DJN(MUh*aBdbWE%+fdFwE?VcR%_xNVrFw4vE`&xX~;R@L1tGo1l)nqAwPBPWr8c{0noR(NzE_FTu~WP -da7(;E2mBiF;c-H_fm6kw*oZ)ueDso!~{jr)d-o9UYU@*TRT9jT7x8oNhz3^`4=jnkfZ+q@vtm=oK+c -~VML?l<eqW9Uy6-e*^4uN11rG$VPnLc5)g!v4Ky1Mnw{)tKvbJqEXS$<C%D^?m1i@@b9aOlS1hO5N54 -H1x1m=9mYE^s)+~j{P^M)Cl)(d^YYB)Fw8d!zM_JjpoK#M(q0ytT-K1dyD40c{QZQ5D<o&0b6VVyu}i -|+r*C3lC7p8+S?n{tk>t%h?;c_=s17xX6{4g1!Cv4WH5Km+Gqk-^R63%b*pe4dgl?-cF*P#*w$LRPxt -&jM-t$I0c?Ks1bOkkf4(>Rg7b<0hk)`R&-9R1f0whSw5}^qeU%e|&S3O4P6)bIvWYIA`)xmls_z8!k2 -EA!TE(gjqVw#1Qxj~QDoP$S)&AzGp58fCn5Pez>gndGzOAOJpHOra5BeP!pabgeP3S@2#o<?zRY~^%Y -u7ACy}N=(&zPj4U9+xV6rC#+k-5N{b2DwiZF6cqM<MFjJu)O&Z#J2`R;<l6V%*=;9Z6&lsO!@(;!|Ym -$f7b1oD!FpM#|OBFU;71-I|J5Z2bbI?nh#9WtLNzR$`P3?hK2NID`jSRJa-t^z;|oLGEo3M3F9(xK8t -FVWklRE1^QB$W%-nSuU6Pj(`D_$+Sj|&%{%(LA(^=8ssEW7f@TTfE%3^ISi%CoP<16d9LcjERZ8UyQB -l*aTl-A$E{ZE$@Q_lid{r%{B6XWbmL)V=XChCzEfyU?M9mj<>3}exxSy6Z${@ki!H~k$63MqT3dXp<f -MfLo!T<Sgxsx$ZY~$B#@G5ZO5Ylk1{zkjEbS1{v%{KhjTSaB(HFAuZ&^^Up7yn}oq9V{6sx3^H=?hCc -_8+Kz1@Akt)dTDaIZG5y>rhk*2jf{qoJeDqS-$?{}7CKN1oqsNKUD*)10amRymmUJzn=(;yZZ>WtaBC -XB=HZf|D@V56Wv5)43X5c?Y*e)h6qE0HB-%N}z!}-@SnunJlfl8ZoP{-HEjyJ`gg7UO!_EqGB4&kqep -T6A4tGXVkIX^WY6KHAz(?ne#igg+*L%WvuI&fdTI>GxX^8oZrAeZSDj@IKLCd?0N&rxxNiZ)`;f0D;d -MJGKb65^|6|7WH+dLLJI{|;P^l%n7RjP$Td#C%zdLkoTVW17|_c?&q36+KaKgv2vY=dCdc=Z(rZHxtW -4MBmPr}KhFgw$<n>|607y_76VSkzHyuIo4=_|w8d@9+^}OJJBEw6q&jc2xaNr>w=1+|eGKW}TmKBxXE -sJWMbWTnRM*+Yz!>C`T?Z6h0FyMxk8wRF*T6MqrNk>4-=fl5#EEkih6gNX8!*KX}gEdZ-6Ppv1>QXL6 -S*6eCJlJt~>FG#i_>%EF&9Pkz0-$ql_%X^7_w11>o~5~EOvGrPrm1$3lNH>-+DTG2Y_j^w;g0DLeq8B -@!8FurS%=9rhy>r^W<P6)1>%_fIv?e8`aLtzn6|SLy3Ho4rRB?5nZx`G>`<&U*PKq6J&nz#L|nMr<VC -mtO$uJU*x0erC4B2QBF&#o7)DL!uV5pgcD<X4_07d|$urT7y$P(ux7WXEZ9>k<>SDAO1RETfGB*TbcR -envV9jC4EmjRg)l%qYxVAeEXGUkbn2KhONb57Qr@LEzo!k=11E#!%-)XHO*TpsqbQ9NR-y2M`=WX%4l -~*EkK;+i>yA6ac@y<19*ar%o=QRPK{`;a%-E`S)Fwx>bI~8(u_Ki7$f|*zMT-?m6VVMZUr$?vNZx}S# -u6RM|Z*>pC5HFmiHV5yGAFG=vOy{}GE+YDAz{<fq>BKRVTF_?~7=_x{+c^%0ahlBQW7j&bWG6X`Zd9F -Rdzz?jBzdI9#<k-Fefkj+ERPeR+Rf>R1HVax`t4ua)z96ScrD4PXF2BfhYeK&_6h@SZ39;1f#I(AKTt -~p1QY-O00;maO7>P9Q#Q9+bN~P}s{sHd0001RX>c!Jc4cm4Z*nhiYiD0_Wpi(Ja${w4FJE72ZfSI1Uo -LQY)V=F=+eVf!`d?3hP?JN_rr=9D)7{D_`P{aW_ScE+&vrW9BWp;Age0^`fB`_sY>yx9tn*0c70$j@) -viK;l9SA=Ia*n<1Qd4NcJ12tJs1r3US;#E>>^L<ys0+zJWrmydcJoM`Ptih;u;lAk|oRPqL^pP<h)qs -$-FAttSIwEa#OUIMG5cM40@7OwQIfCY|a)%ozL5<-X`s3Ugy<$nj~*8bMt{WmLz|_hQ^J1SZ1rd*=wu -hGP}+ZLQ%t)?IrxLhIUO3|7NWWB$>?~%x071URkyGlAB9-ah=!r6$}W6Ltn}_FwUZZu{^61Xr64EJgJ -(LT2$*C8WdI8B+&CJD~t7J3Bc^I_GnniSzeSEFp{Q$0Td;)#jao;>E2%N6k#<Nc~e~A>cJN`Rei;SFR -OYb3*2m*HeZ?Vo5^09UtI8;Ns^U|WK-fhfZ$%hRGzoVJcG?xHUgJ+W?8HXTA^%99qpz6EY|!D!J^LRo -2IQ+$*bd6$rleF!*XSdyoTw+8YazVy{_t(CO4a1<n45kwb^Jqo9(Ug_Oe>gbYWhrYOz`7Ji|5YI&Msw -{MaC*tj-fg1)ldIG(MaaD}=l(&Qh~R&1|w4zJp#e>~coqJzQ_s#o>$>2R2{^(}d;9U>F0y@jd=7fi*P -0R`$1|GQYLODmTB^_P2Js&TV5@CR`=;C;w(1++=kL{oD3Uo7s2gn-Y+|TH2TEtBXxrEbWj8#j4uA2K+ -h)1TcTktK|~b3USaiDH>c3^LM_=iX|Xy4eM*4)phBnn6JDEwE6q?rq0%OG0Fx{oB6YB5&3OzRa3mz5A -1gAo!5XVG9P)IAXf0NFqplz-X88H@FQ>W)n5L7p0C^FIXybA>#F89`^l><U{RTTkv@ibub|W7tXLN9R -)c_llB{7!4*s_=z2o<=E)4-ReY}9<sd@-nB}d82H{5=2A5P4=-PA-|fCK<$o^A0&Ck^1*S@j+^m?vB{ -W+)rN9XE*J_38@nd;&;?L}CI*by<{Gd(`r$*U#S`Pv89b>eb8FZ($g3>rK96T}n8{HJn{@0w>A3uFkT -v<rbjA`AoihavX*GEsy{hVK6Yjxf0i~YNq(BdCfG>EOSGHZvffa?mns`nazRj=Rno7#yy_e$9pn`Yz{ -{nPJi3h#o4B%1qM9FTSXR=CbGzv*%pbYEMY#s1ghJtnpAb~b&yV{xW3bA@A^ePf~9#;m1bqu#X6k=+0 -N@STc(K3O*;Jt+zs<;if6@)W<=n&MZR22VK0#$<AX(At*3ymtGsOa$v>*1oZ{VBlpDG~CVOMu*L7Yl@ -Y?Z@JS=$A-^ft8y}hX%u<3L(R4r56B!$bafnJB>JG8~4Uz`{4#hseh`Oh1m-Z<C0eXz>vtGfcHrH7V# -#W|8~GY{CC^D6nbWc0-(`EtygT4x2E($||3&me8~Xkf|5m&knJMU7W`B12vb#(2yZ`Fx3YP*bh)<YEc -OXerm*O|e|URSqrAiKSrxZ3Q1Su#3(4mN^K*6hKIUYj6oKTA0MN$y@U%TP&s-5btY3f+^DN9MI3awpZ -P>Y3n>&ndkFmo|T*R)V>ctm;$PFp7}6f6jMOmI-|Q|N=G~Vg3fph4stW{7^qG?h0U(F(=}jq+Z_weDh -3B{96Xtw7dcU2^BCsRFipU5!palBVO|n{1qhN)fetK|@mGdDvZs2_+{h{Z!pC+17nNF3k2gWu1^f~+Y -{`IIzsd9DvTfJR;e!XTmYX$Q;wi8kSz1&N^6~+qN7Fv=z^0e&YB^vc@JztNw0`2@@N?h}=2uH#NS8;C -ku2;@f!X@q?;cLSee(VHe|qxtFEEWdPw@hT6&%%r|G55U^v$b(YqInF>(MudCl3$)czXY{@i+VnJb9P -$uj6~;0p2(1a|8=$4g{BB%K%1lUgS?XO2{nXzds`PdUFYP12O2t?w9cYW|K2-m?d%`@pxIfL0mJAcDY -5oA<h!PAqxpzr?!v1J>pTO2FOv;p;+l(`CnWW<f5Q)MqB>jBRqnGnM~#U^6L@2Mpg}2{d-q8G9NkAqj -9=fFR&53p%)6Id9^6!ZHhGaD&IEHaFPhb@z``Y1(t?CoQ|Xi`jbaR9m21+Q|1I<fvx}+GTypZI8Cd@K -(UZcu1*oc$#B{r`!r1MC)cN=3wX@XYQVp`<hFKHjT;sHYbL*QEYz|)3hKI%uGM&91g9hT7KZ{5`bR_K -#<heESsDt>?cf36@_IY63ramvV_0;M6VE1zo<Vh%A_1&r`0%If6*uy_tj_+C_jT%ToY%R0*4KSxaS0) -@#}Wt(EHT58KbG0*Y>_4RvihPqG$aUn!w-aI%NJ8~&yU=>d(FdbQD`!+haf*??~B!DWtm`*rOW|gehO -(O^C|fM6#H?|MSuk6u+FjThOVtuQ4&l6#B)7|uI4Y_$o*GsmJ7T9&4r0P+C7km?}0cD7gs}qFmRrW%^ -Y5yZG)jC$)7eYN!!T{P>if>nVQTm^Euv(K2MM21>j$m)eVl1U|I6wk1Hpk@m{?tk!syTy+H-S?GnD+G -$>a?dwU1qCj=~i54`KVXlWhzrp}TwzX6IB_A|jgRv`JZ$n1@2zNvwOZ}m60oG;(VRy;rF?E`jiQMA-z -4&O9%?y_>5R7g$j?uL{U4rS3c1j#nx8yF;f0!$JlHf=7=2GMpb@ZOrwt9k*Am)q2%<p>KY0U*ZNrdVp -^qxZ-sz|^Zo2<{u|5}37iemTOn+zj}z6>b!gc*JXxyOA@qV?8=b28*n|DawJPCstfAKQf#lb@~3_^9K -GKCZ8vxVLD8aTOLj672OS^@yX%i)A1x(r5AOzS&zOLk1aG|^8cDGH(IhYKl?OP+Ejl4a2IL<fdj%bJq -0wHPGM*#BB%T*Yl^v3)EKb^rmgvu2gDI2#1Y|(d3BAl4uTj8vJEHl=cb%C^SW5K<_VqFy1Fia)6vg#2 -j)5IUo`ur+w<d9w(dSehS@yraBy~HKF1e(3=C!GvEl1FFN6{7JZFBd^O(3#dAgq*m)AvIl_*zaOVTUW -)snw3H@;=~3@F8Mn@2qyw|R~1rMJ#@SP_2Nyy~#y-lpZ}*=E^J=O9|<b~dl-0_2`83U5o2m1sB#v1B< -T;!w@l0Q`w3^v2ESwe<NzRswai^LQ3PmDf%(GmnmO*Iy~Tfpw<yL+T{k!II$6X)<35S$JBN=Ric;Sid -i-_S*`icJuDX66t1njEiUoU{_Q_-%oxr8Z&C;@u+SMfdRo=!_YrIg(98cjRVxytR*v+o@_eNZ;U`}HX -B&!sm5V?5H!-4szn8RA=_8BC#4s#U{QMl=sEXM4Li&AGPPCbR23!gFvViZ;<I_0!@~{oCEnwGtt$>z2 -CnT*O#&k;-wh<@5sH828rAm`y}=+d!AJQbFX#CHk0h`{WoxkayYHsYp1*l(;Qi_Oizl!D?mc?*^2gUt -kG)4v|9t%PFE4+5>pgsS{MX~}U%t}M_LIRYp^$@w<n41f_i!Wn2TGLSb$)@vrbiE!Rduylqbw&Qeg1= -Jjb8;c_qjP-;R{p~nvcx0SFlRqv*U}4&ZE`3-G=aTeAprRFE-0%*b*RykDf7s2_OG^u?`>cG61n>A-e -OpBTIK$u(p4S@{gmK?}7AnWo>;*jJ~(;cwb$Zm2SF1u|qv8jz2hqPC#;B1RP^kF3lYam+C4j>{)$sof -XRrj^(p}wx3!-I3RQ*O9&k|{^YD7a+REAO-}sVB3~n;RnE7>67ct^T(9beL|Xik<uTy3YZMpq<++lqj -IabxL9C#WOs7_53DOpRMjxdpJvg~NAi$$w_<`vD1dTm#TQ9Z;XafPJ2AD&`V$KCd!@MVQuShBLrge>k -nSEnfOpq4Zf(XRIedb_$bOO(y2bEx{`$*{k@RunXB$g~f4?fW3@lO7ToTlpnfG7MC;C}QJc?{-%!HHV -uwU`HR7ZA#>9l#|%d3f6QIl#a5>qn=1sy*WU&Mh}HP4TM8+R?pxWPk)7ckJNc`jWaBE(L-%u~VI%Z53 -#<-T3qTTsLASy*waNGcjYxwA6xtS)fA2j)n7-``u*A0OitXw;&N9hpoEy8E`dw`y3Yzw%RTtp#4Yzn2 -f`<>mAeRo_|XE8wP)e=OsK}yfDb^uUoWogX9I|2kpbF94Om_@EbL|EdGfo;n)rS-U-gVhh@i62-n}ey -Ppg}+;*qItlY=p4pcUcZbj+Gj!4G%yMEI1M9~q=RD<l#BI7xJAD!#SAr~6Rhwh*ccYsP99uAP`D4Nh& -pPIDlANh;%uQ~EN2?lp{XR@&a1`aobBd5)uSM<OQ5#_Qqsyyg+9fo5WP7)EdeQ4v~o}Nu{D!cDO>B^m -CEj{#OoOkUks=O(OEqjDyz^)Qcot)<x+HnU)Q*%*V=Oy`%uoBubVpHHLfh8_-qhNmZ_vsH${`bq*sHy -nyG5zpyXr~!kqsDuN0fxq3>?!US{(iitSYP=2(VoZm!jp%4n(2iH2aiN$7~{o8>UT2z>fvv-Hj%$gW? -`Ed`>$N(_G{Kp%@pJrZ=m;xlytC$_y;Qed9Pq$GwUHTo3XbCFg5b!bT(tQ43B7JDC9<DwOU9xC&qUsO -YSkWdkO1kCwmTa$Q&`7b=daVjOIcVSjOTJ`^bi$s7a#kJshOc-<nq=2K}-IzNVwVg@JX3C4*wurG@c{ -foJO8FhhiMUNm%JfUKo^nrJqvdzO?2Bt@>@8>H%MgtSG!8zWUiK%S~j#&|?3KK`RQQJ?WAqJsNNz6}& -`%D}7p`b6-&HLScucL9L~<jY|g5HnOqdIkv+d!`_bt>FlaBAY%D&|`sUZ30U5$a<WklT%r1A;A3D%~Y -ANL=AwB5C~#qR~COjG6xm_#TmkeAF}x?RLE=kZb1Rj8HQR@IL=6n9=svh{=xUfS)J9}2T!Xyf0NhO1x -Qr#PMC+3z8QL8pc8TKNLdv(qDEuCGiiC5HMHo)$!LP&VYYZhU?ZQ{aWVs2wzMYvZEC-i9;07Fr^8odR -A^-qL)40UK;!*}JE1-}2|>#JOK3`)nZjiWvfaoCK%}cdee~GJDr!tTfJT<Ao?ni{oy0dieHgx~Zu0uo -)8Sz<T(9SN@6wYg>^}MiHkanjM>O0RD3ip1Q^Y6K-QQ+7673k`nt6I4hT6HuS2esGfBW0tlBaCoSZ*1 -bQ2Yih_rQD2W;<<7=w*q5TERA#GS3$cyH;ER((@(reNk@S(`7(<d7n6wzYEX<6jF-|?L}ri;r1BEtU) -6%Wr(jx%pyUZ;`zmwDNt89dnjy;j3Gi}bjN7nP|Gt;cx`0QpbZ?c4N`g_0KYp${$`m0DIX+*NivuY{I -3L62F4t+NIzd3eBKPuBGNsSWowWW&~QB2+2B#EK@4a8R-a&B!R3biMPm@M-)xgZ%Nj_ZfZ+)*eZtyEF -=3Hs4N}4YR(n}jn~Tdt9A-tA9w_;Ik{Gw+bWK^I6NN1G=-uM}_+3i>9E{R?W7ruU@y@TgiT8B?WS`Db -pt#!8=o&T0$ytx-l}B=eEu1#Mo&Tp9>U9>mWikw(wU{|OB5Y1V92UGbAl&P3_C!s?yj5Foa@^d!@a>f -a(g3_{@u*8@c8p}01<2Vlbp+)F5dmLyM>gP)9I$0{Qx@;H$;&r+<5LD0i<uJ+g3OPOqw${Ec1K6{y~E -r6B+nWcLe}IV|3rS5qJLzIGf_*lKxM{I0{{`Pci2nq_Ly<=CvF5dzFT0JDUA2jxQP}MyNq9p>h+sYIu -z*PK{eFe;AFTZbV(SiIbvm-oaOK^58ycOr{rP!uW9lG&T{Zwc21shbQzIJ6c2m=2L0-Z8_sWJsoDEIb -6OF-T+f({93_#{*;z9Ev7ilq-{l(?j;bTwbWO$9{Ak?eQfSlMcZ1KHRERZiwEc9Fcn=;&V8QUZB;Fs` -QS$p}3%NnvP`-w-JbIXZF^D!t^|gZehfjj}yDrQg=1-p_{Txo+1>EN(q4R#DPiB6R&9}0ru`5v=mK~6 -cJ+ilsDOqLzsGJLjOn@$7l;*tCAt%G`Px9GO5^R|vAMV)~-DY2mqdJ$)V1;+GBnl?Yqh${!TwEfbhFk -&p^2Td0(nF!-YkD4H)?G#vp>jx|LkjFnnLhb59w!%7f)0Uu-HupgVLcp1$SY0}#w6h<Wax0$*7p?}cz -g}t%zngS9e8UME!;W^!c4%KyP<4EibNl;b5zp8R;K4u@qFVp?0Z@^CqrXz8J^15o`;#=0zZLYwT9PC3 -x&H>%~uU^0&tLZ-w&Ap6T@I^R>)ge2#VL&i$XniwG7r7$y-3yl(4^%Ru_<$CK1fIngM~J?^~^KX~7bw -w%w2god?tlB(9_oV4fDmgM+tM2bR|HX^jUte7}VwF5ce96e5-zmjG`N#HnaNz=gY>1&8s0tbgccBSWF -XHc5OOmd%(kUTR06>O7gzC#;Yn#GVn)LSt8f31&lNB=PM}JEPL$QJ7;Lf%LGCNI}vS7;|sP@DY!d$89 -;h^9|hc+z^`FZMgnW2w-=Vs64&H>f#uj_libw8R>mqe;TmiPd{~-G?rjZS;N`!8921c?aQp0nmDwP8o -P}DS(Wo8AS@CH<=$bHh)Jy&6ky+Y24x)Oj&9y|K36_#$S}Ht9|g&NDiOecM=zFLph+iHos+zGw#>>a` -c1-L5(4Wkpzrf+LE<4=h~X40$wU0IXxW<pFH9WhdJVmiCLo8aoPe-r2ZJ-vB(!sXHp77snie&T#tmhD -iBUVqj3VDqt%?>S54}~eD?t8dkrjB}L^cOj)Vk1olO&^MafLCEMz6-O#<STt-j}$>MSA;QmeY2`5v77 -5E@oEsXn=LP>%Ewa_lDo~@%wyEkyv)N{FUh(J(rh7zHr|s=(P=4oYh;lrO0UsRo|n|`B6qgdts5nUM_ -~lcv`kqCt9}YU~$J6akOIpxQYE}+FfdUi;}48h1UXJ5pD6lo;f_83H%v*37_SGDMH-ym;}X#%HEWpHc --@`qE`zI_JA-zQ^Nn+(PF&FCyiE=k3!+_SHvPw$dc9QHy$yPVgqrsV}v11ju2t<wNHe7U)5b*ctpdI% -U?n?LVwy_-5ToQhsl2$^^imCd{32q-$fsj(GMMKeeS(M1rw=X@eGZK1#OB|vCL|^Dg3ETr|4EBmf;EU -7e(G^PDOft3YZU+Nz7a1ctO{LxqPTM`8*kk-tfqbW2_xk$lPq29wjHI-8b7QM*p~Y9{ci)-b7wl@5#l -qt)}w~ZXir^&<AHOMj#o07WvG`M4RPHb#B;ZYVKR40L-AlZc9V|YxX`^2n#u){~JdL+H(%tce}%?$yJ -6n<k5WD^mrb<sxff_-y7UmZ&ciE=msY-UuyMvN8e66JS7=vI<*nw#;doPPD3SiC(_sa>{DV161L!exd -8c)oCQeUAQZy54DG%XlcjGOE!wjmtrqXu?*|tG*0Fz9H;wVN80oomHSWImPgK00V_-7x5-yhK@Ekx7b -pU2IyLP?{6FMZF77M>|bodi~3&*~5STns+q*+KoMx#LX#v*haUG@_~?3P%*YSS9iKx5n-HQ7;Looy4c -@|ZwGyhg|+F7X;#Y&<#DzGpu-6q6Xbl8@{Hc#<tPrp;}t<u%?vKf_unr~Z-B{*f;!B3{8_XVbwEIHw{ -TYvtEsL8!Va8ghj<^uQR+{ONlX!Myc55`wd3$s4gEjgk&Gs0i_p4WiJlYP}_W2l8#50htFUho`(&(pM -jDA}YEr-5n9QKt91$;VS?m8L{ix%)mw~1v&z-)UoYeR+!Gf0GrLa0U<oq2`SCsjzq$|X*d=R8wXZY18 -H8>fC%e~I~IGEy`{Dj<0HEzf&r7ngeb|3USb~>P`13u;0|HqG<WMyE=O-B)WNVHryPeh^llw(@n`hbs -Q>eMhPwCJ%xnitYM%L$C@EGkwg8A(MPx2>>e;HC=XL_#XpD=M2iq|cMt{h2as&_UMcy~*I7$VA3pxeL -B6PrPl0LusqBq8UL0f%7%rU%W=i^tYXfC87DM3BIH(ArhvN%eQC$oDib~e!tiOM*_TG41x5eior^89* -bv@0DmDdb9kpQrH07#04k-ZEn&?;z`2><{T%#OuuOoJ=f;%bJFx6;W~R6#D2Q#rx*qJDkgG*fJbUs6n -ho9Yckum;PGixdgBpjemHlU=X^EMx|4YqvUAR39j^A$0#EsOfTGxPMia0lET4QbLvcwWCHjc+~7<*Nc -Fc!qia@HpSos7)8#nGMwU+Zp)o~tupy=ZY(f-|7v-Z7V?;d;*MQr_1ow0z9r@r?d};R<5*T=2>yJ9^d -gkeU6rZgZ+e#1Ra)ho!wi2x;cqtQ+MD?N1rIDI9^h9TpQENvyPXSG%&yk=9ahh^mm4Y%NDY3rJ(?XMm -K$rxhkG98o7D(QJkD|$zjh}FW8@yVU8ZJqdR=rL9owD)z*R0$siX)t`sp$q62*Y^L^wro=Sukf6YWSo -Rav$Zf;iXB#g2ONp9?IE2YE&@A(O*{DH@VWRe9=Q)3|{Dhd1?77BC#<|cS_f1=pTee4!m2HvjW?tju> -QWZB6(yj_dMtL`V~}tjVln)-_QS@wd*vw#&GNKX);(QM+Cv8$<C7ZTzUu*oHsaHQl&XG`Abw%%V-Fbc -i~h=k}cVXo_oty5q%$-RA8T5W`@1WKgywWMs@USGfF9qJDcW@lu#*W9VxuZgS;eL5!eb7jG4!n>;Ul? -E<q1zyk~3#<_Xo7NL>QwScYa(%gL-N>)?IMV62UB<F$YG?gS*`CjM55M}Rlc7g*rje4Hq2X=&c#C5|g -!3nfHCAa!m3*H%Z4^VSYz)-xI@N!2?`G9lF>-Gp)G(2$R!gs`6UPl5E{!KDBS~3U1bu}+kCQ4@UeS&M -*{$x{H7G{F%j+Ju-CxAD`01L!dX1BRphaWFNz<pnc#7!PJux%|FP*gV_p5<uxKi4RyFsvOmK8rtMS>q --nPmVy|7^g~@vJ5Q|_&(HTY#d5{49j%cv>mih64_yT;|LF*uo=k(7kyJM(RMI1TZS7r^LQ@mk%lxOvC -wJcOu&VXa|GFBbB1K*EJr<QqSPh$V-khUDZHyUPL8q3$78xa_{Fr6P#jrnD^{3U$iL%`zHr;GEks6%` -Y>2yTZn4%(_|`a@_6@GUT^-_Hdc`4Vfm|6lLkJc9VgR^5;?5P0(MMp`zofS+f$h94!r5)R2IWsK8|CR -iz~=Ims)-iBjd@kWMwM9t6j|RNzjiON2(cD;XqSG_PW%V7F%T5?m&7#Jnq7H+z*7~y69+3%lt+wp^P; -G)mvVB=RB<SWbSERUNc2?LzQ62I(RO)F*PyDuoFyh6)=qIYSecT6A1FE{@sqA=uCfrkHCC9AZ9H=FeV -XhriZP~P~LNAi-JjmC|1rX)6i_D98HiYGr!I1oa@;{Z;vsdPE_(9vTP|m;f(Xvq6ZA7?mbu7+A09S<< -OmRW@6xNF6MHpb_8jIaJeB3)r<$s!tT{<;?1E$|BCXux-xW=EcaSAC-W{G44lRpDalbitMp3Uh;==<u -W-h)YBrpCHq%Z$xcIeF=CN$7uB0FRd%?ppx+5kmv!TO87!aJB`~Ye{-OvO30SPD^qACv8#PiV-n1t1= -BLv7qdSC_?8tp-iIu8?!0{6NRmuL?VXWX`s+k`RB7dCOFI&8czfF{+M)$y6`gG5$(%aB4#_8bMR)t5Y -<MhW6G<~ZUi=mq7?%~@k=uG7XhnYjDXs3_UggZaXYvXUb?y%k<%+XQoaBy7rDZBa-6l}{zmITv2g?*r -Ie=EOO#nUg;WbK%AZ9>(N;OxBw^U%KN`(avW}Jp??QoL_ok^PBN(>CoYsZ17&^U8i|R$t1h9)*F|XEM -Os&k{$V_&6*h<OdA;octjg9($B^xhldA`P6JRCxx}KM1zD*h_AmF^lQZ^-J3si^zfR9`(z&R1a1|Q-2 -~3@6LlG1?N~S<TDbg3kW!1?Ka7!T}s?L2%Qkl{F6wi;jFWRpZD8Qog&61c*jx|QOlt(r@LxYk{ijjtE -O6e4ibmHw)2ruO<gpsH*1BNYq^bT1WSy7it1ckseq<rn=0r@Wle9h0vk$+y+)q3=>qgKF%Y~SP!i-~d -1nT?un=P*?co>%~lLd?~}xuaC)Qa{K}n%urqjLJdun+O$%xQfR?YOUQ=SPfFjcYWjuJYw7=#xx-Fd_8 -e&hL=HOqVduL9H=H?w>HhC4O8$AS!L4t`v(z!pzSm`ki=&h1qLZXWo3eMDKm4M&8huHA;``^ZLD{6u) -_VE5sB%D<^ga-qp-iIBG#<uNznR~Od~i+k>*%86$2rd(}BP^FN@^Q)nfPwv^X`%($!HH?!a6|A}tU>4 -)<J|YIJbQqd5Lq?b~mMeO(u6gzT%#O@p0k`Tc}UH;4j6i#_I!F7pL32!gq*Y~6eMVzvR@HW&vIlTn~7 -mt0(()rnAp8zYLw6hW|-@#)@aP4o{!I`VAtTHua{Bj+G|^h4aoEXmHRAa|g-ga&iccv~U*U020o2Pot -s&o?#2U__EMsU_S2MDO`0EQFTR!ynomXU2`TRfu~c2!m%6I!f``ltZ+lUC>#&X@c|8<<KL~I`E<aR<| -RE&3@wUT0E)-{dIPM&ZlJLi6+XSFI8d{{h6WxS{Cmf^nT;h%WB<lBBB8<@gQlc<UH%3PNuS!`Nv%zqn -qc?{=|v2`j^rzwye}kTIGSh#m+^B_w{mf0oyN{SpI8DL=+<rrdELvDh_Nug`>bqZ_U^s3duqfTi!8D& -0J?n@;`o`VbC$>6Fxlbaw!(ZMAE;ZM@x`>!_KOMIQryC|BIsT=0q3=TaNTwfZksgXHC@227k~FrH2C_ -PW*9)py4GPudU1`xN$MqWcZZiCi0o9vc=F$eC%67^m^V+%ORQpag}f~7ix_o41PwYR&AjlHpzf{buO+ -0tqL$t(G!FRX|O6#Y3v-Z1!smz$Tc_V5)Pcg#T#|XI)2-u*q9wdVLO)?`Z+nf0_tws3dkm^5n&}np^w -UFM~Yz;J+}!~OcM~+pr8s?q+V1CwA;0STjd$&+Cc}RdaHbc)wSXI@fa;ngE}0H&j_?fjaCcz$_exZhw -Bhy;Oq;laz}xi^aE#Gn@Wv4H@ZfrayPptpU#r=Wrkwhg3NUd<`<{i6XbE;NvEM{F;x{^!vZ#`mJ65rT -e27l8nKrMWe0CsFGV`-zg1!hs70#J02aLBeXx0olE(+_2I$FQGMag7Hbb)v9wQ1qnvHR{v_UXv-Bq)M -7EDw*g;dP|lkDkrP6rq<bpj|{Ip0W=oV@4Mu@s?%d%Kiee@)Afr2cdh<AJ+y5hPG+eSvREGp58IWp5A -_aal$Q=ZME5C&P?{7dZV76?CGZQ~vduD~@dl`CSqU(&qYFM00(I+Qf)Ek5SXc)itsO)`l!<8MiZz1n< -+Svc@m#wVy55m)Tj~lC%!k+6OyrBzu}SeXf(^DP;Ub<uqsJ9U#3SQhf%cyR*;O_WqH&$=%R83^l{Gec -#t#IWl>fEvg%-rsL;N^%zo=+1UV4ZEELEUn&5$E$s(hmF^wil;kg<mh+sW!mTXJ35mQd2z=L-1Bsi>i -G~redNUu!_9}{Hu>$dEe7e_Z-tjGWaOhZaq=1{6a!n2;)NvQO_@M{6_mEm&$9u)HNI(nt<aL~(ELe+~ -G*1)~uA>bR9fi*ClD}FmAPL0jee08SQE%dc_kM5HP|=~@BKlz_K~%?9Ch?MS%e%_+b#hVd64X%RcNJO -m-Y$D_)oykqy9ECDcXYJQjRw)TwHu1Zo1l{--UFmVz$$O(j*d!2eUIwZh{6kIA5tZnYY(^TPbZ{%O2P -;^biz4p$dpWYByrsHlxu!iq>1#%+F+p0iO#nZl1sM;cZ<7N6FE?h{2xZ^s%eTdU?)rR^&DGUqq@eaT< -S!;UAHE(E-?R<3%4iMus}R|xLWM!&3u|NY<6MN8aPX;GBMfdl3)C0c~0DB5FGOrk>xsH=GR#nE@oD1g -VlVwA>Rz+-A=CZ#JU(C5Z7ZN$M05uDH-{ZaVukL7!UAp$PiouhN?5L9d6-WtQ7vqqM&msVI(vhF{;f0 -fU!yjk%eT;OJ;M&10&*u=HI}<NW+`i2sxGYYfd+2$zGn)nw&Dxg$Y)Ex$O08v5dU&;jqp$v7jYSk?NW -nC5U;@@ftCM+6goC+YG&y8FuK?pu8QTUit|2u9NKTLsy@QC&C?daY@*hlf%<V{H6Hca6zp|8&Tu-zTf -Gy-TRfDyEiaD<F7wkK<Vk#^lVyAb=a8obi(c?2@iIX>>AW0(ZQ1zsE<`HPSP!4w}lP!RFm~v*?3QH8T -~f5gnr&(fqPB_xwyM^wt>0ISi0zDGXEi4M_ex|&m>PbS-#3Bpr{D5@l&D#ZOBs=59NE)6a9BA6-f*Tv -AF)6WEZG1X?bvLo%enG^nmQs*DAe`k;)O;C0XgY54!5kvqHHcOI;Llolu?=D*sWOn$ftX_;uqYCC4As -YIBFFDZ4WIFyy)|hy3M7p93RDahj<i8dje?8jmsSz3d1YPe`4qSh$YXRBWv>hJ>q$jns%;x)LR#S?qX -|W4=ccu$wYlH<wk!f?iSFKD8u|m3Xwahp-cAPjzENDQgl)9rYEwgC<m)^~j{yCXhZ#y)mQgb889*>#* -iYC(zIO;>^@&XD;~8`NG<ja~R@(qf~@}ADB{>k*7Cn{^Ghmzcp*Xv;xhn)l34FtOtrPivjOPLaFd<Hk -YIU#)&m{=YO^AsH!oDS|Q&B?KbyhlaI<~LB^TTPRl%;b~l(0Ou+K7c|#5yN{o|AzN0+7NMY%QU!?y!o -Xy70!DGi*{E8;{^Y>~)?n9~~AgUGAnvZ~_Jitf^8T^>zF4>_B>Cm>?Sa3jFE;*n2I=KfF`(7x1;K}_5 -E-%1pIxFm{txWz@n{E>ZA(OZBh!HMUh+w}sif+aMm2|X&9^8OCIg*3vzeMHKNF4%o)5Dvo??T^6gyC7 -C#VedEYj7@;N>W9tv-gc}Q}81ZaV1Ig^01w5fwi|(ih?R%2p1zLwQc>bsltS);3=CFr?#_*c3XhmdOP -I}?pz>xokhRqy%*jUn%I)KcWicaq=ENeA#QBASkWZ23|ju2_{ihA0k5j-ym!}M(`&QY)^wqkxfgkzw{ -|L>1e~-WW9;S$E)Z0y`n0=avp@qMB4N=*gxjx^|6#WW27h!+W@rqCt>Y+ktwOK|=YfA{Y`JqR3}lKva -k)Yls@^9Gs;S0R$htva784i1WZU*DS0iED_<h93Bqp3&$qc`-qKfCW6whtMmZ5{TIzW|U)B4^<UPReU -gHtBvAJNYk^J=2QGgi~3$X~xTpV7K#(2fV3-G(+YW8I1)Io1ps;<mBOxE91H08+qii?&9GZ7wk}J&s8 -dsudKsrLN8}l-L$(XE{j^J|$qI4iWNByA4y<fH-QzZqTmlMMYi#`rV*))Z9pvtieQYlfZ!Yuu&hKVeA -|sa|eY<2xA!3p$k;O1XFTMMgfN5dmB$<XBWoB*vaWn15Xcv6iHN!kK?W)eiKrOLPtkfSSV|&I>iDGu+ -EspX9!ccoUhhH%1w-O;pix}+{#@?Nq)+ipzDOu8?_N}$nfrR@>28Es2q|iR2lgN)$vSo1!CiF#3oMp4 -A9xc+KO#53JrmMhe?#o6kRR4&LKLR21n(mCW{90j^q#HXnf2%NN)PTF&pTCqrEZqxqf_Ys`YYk42w6F -bW9gS79YN1SSWIiAWHiEz&fog-H~VzrL1v064%zTsTjf#7&Jgj(gnK0>=2{016P19R8A_=6WB1}3^S| -%Xs|3m<>V5?1S3AEaZ>Cehdi*@?d)9+O~Po2-Rxb*<|dABoyt3&<I`PoI{DFY`Yc5Zg&y{)VR+nPB&k -6(jg;raAF5ETH(zJ8rd7u^tq-&q>#Af?-H^Hef$T^0iiq!<qf_$Ui-zaa8$NmRY0yg!fa%L_qHQ!Ykv -Ff4%#K(o^?gW{oCyS!H=gz_0)=8nywgP`MnexN(&kLOFkTiU<>)H<W9O`m7gUbL1jG8r%6QX>caT>M; -e{#YAt!+r6bMx6d$*9m=n_M4*h6Fq7e1cXGhNmie~`%#_Z#*vp_E3I*+Q-t65I<|c!2D``1VYD*qcab -HJ_}$*bvj*jkpzOquY)^eEB{hlK>8BQx?F`2VNXP?R%WV^nk-CdCNtRjdt8Qe{?##Clh}-=pDmL^$ak -Vmf>+}BSOp4fdu9*7KP3680OaK6XN_d-~_%mcQ^i6cAQ7zNaZpLNga%FR~oQ)X~`4ou81aU)WrB=L{` -rmp3iD^?em>H<WDoYaDg%Xyhdcz>xDHUctYbSU#z$5mffPPXQg*5hvA&!GZo)2j1h@A(kSJv=yF+6>p -MVm3Y2Sus*~8NV+Z%i1H7Zj&Tl9&exyQ<Nsb>c;Ou)JId!*RRetn(Q?|t_537?(p=Rq3#=3dBVH20rn -zsP8PUjU;G<w_e7;+BQb7z?}8wORK>w|Su6USl6X6xy+Y>HNSDbZ_`9x8ysKq&3T)bsR3ICOD1?@czh -2<Y4{41=iZ;-V<C<&+k}0~7JAlYm|F&2*5+zz_2`%jy->R=IiYy7S+$L9xnCO2=4JgL`k(1jN*6Lgtd -jsxu*i8!Xa-@<40%HZPB^6ulE!pSzz{_0;1b?vg$@$nHyUzlmfU@(LcrI~=Dwk{9<TApXTu=t)mpI@7 -;PRQyXPv@=<9WJ)%7_b;B+?Fqe|C}qI>(%Hq+j(2XjV7y8-+g$+32>$D*zdKF%f6*Gq=zr}BV3zS;y8 -_)AhBXj=i`n8xf7NVF=IviRT}pKk=2VZIYZnypYmag~1-YA>qTO`GMA+r;3a-w~cQJ6t7-3_WI6&G}q -wi(J;8EkUhT~7QTmTK9i~bmX<H8-|6BS46E=!xOCb(9hLn;Wu>Nzg!sXYnX)p`lvVmQ-H4NUkV$9N`x -$Mt&R53_#KlNmelfEO1$B;UQ#=Q0BBghR<eVwMcD0ay=^$V6f(w7ms!OG)xU*6w3>9O1W$r$AMkEegu -9j9tiX#RK54^7=AcH)t}g(e77m(D%=z-==IBlml8-d?5D6-9R2VG~QCW+RLoGkVG26c+Y5*tx*WQ`up -2IzkD&p0^LuaJpJ>r2Tt?P*I8Yd+zp&NkvV7{Si!=ZbdvTW!Z=-04HKpLhMh&$HDFT_!y<Llz0Xp^9R -}gC_{zia2zQ8We2x#xk}?7~GC<-By!8t|IB-Iq&=dnFS62`@8ja%@&>4A*W0VPJfkH8X_lWEv8kEZF* -m&w)%$Opjt!!Y@xzhfTksPOPlW$4X6sIRc{Boj>()$yGgKi1_D4bcYH9WPs)TLjg2c0h~PQMLjWyJau -R0&H=Q0R`~+W)gyBhb&rIu8<hx>7C*Am4)&Kn@a$`Io#evNRK2{?ZFmQ~a;9Ceq5#Al6vpHW_S6pzi} -7&&9>C(OkIMrk)@s>5IbgY?3ohB_Q{Ut08Y4gtf6za?TKU+3A#Zz6AVSl3_ON?Ta~CN)M2HK9N+w_{S -A9vKM)YwhmL9hOd)K&Mc;!EH~=}<l4O6;rBIff60YmK(tv+cPT?KH9h_TWMrhF`zI;6p9~Lx4h$#BJs -SCratPD2ExO}Px$?l&o{N#{xubDDc9N)u6;6;ZYjyjvUH}C1a=Iy->^z?a%i&Eb{7_3_Cu(?pmPV6&! -M&G~1n4+g%)^=ly9Psph&v=c7e{ufC9F`;SgEUPm_BEgLtHe$`XmWssxWu-9nv-%IP`#q4`B1i6RKM0 -XmMS$uNFGIZAw#B6|ayMvxK0OU#a<<Ja}eQ7*$yqw;(beWgA$88r?@>xLed6r^!#56hs5b+zIh$Zc47 -o>c)**5#Wx4*_&Jit>?-97r+0K#!9gqi@Zg5%3d=+V7JLyJ1pCwE31ttugYpynBt%A*OTE5Mrqc=(?E -N-j~Od}f_D{W09fZW)i#iT06Eu7N{xhLWxE*A9@)+S6ep$6S8E;d%b|-fI^;6wdOtI9j<|rBK(`9v@K -NJLT(H`h4=|!NwvSd=d6^D9qAp`&idIy3uGfv){a+Xi+oo@(&wqOP_Rk5ex&QdP*RT9VS~V9PZz9^3< -1RMqSyCqA2Q*i>1G=A6jL2q*Yiv?h5uUPVROADf$15uTCZi9;0FKkx$4_Bb@tQ!#UBog$(nw2-x0qdt -`$JQDc<fDa!U%+r=Zo@r<JA9h9O1^i27(Jsioc9tS0?DiQUAn`l^g_jPb+z9gnvS;WZuavmQSyMOBOG --ZNybm!IOMgGXpR*iWd!s5L1chOW=8OR0x_XE0%9qRAv5ESnm~|4&9;RG^^#dy|f;u*^)130ko(*U+o -S*AkF6NvEq1&moL8myHtsmz%q>fROtz|W)?NWwaHP&U2q)JmVE(VynM?&AQ>)g8)bho0nCO86vMjH5N -Xd_yRasavvDLH;hU<?>h0KL@DPlcuFc+h3HdEU=u-2+AX!GoD5|XpF=VJxrL)E27u=UkPqcABmH}gm_ -rs9Z{*YannnhM=iADcB+dTdVMH`I_O*5-v>DoB?&*WkC<(FTMfpk5reh)t$1o&`%2@OXM^XW6?$k#p5 -Ru>Xp=WnFY0&(Wd_Y;!a&9*D+uF|$5u9>5*)DAx<_g%nUx)mI58Vjo!AMqr*;lVcI+R=?Y@x8BbG@<j -c7g<N{eG%Sqh7J;=pHP6%_=0n^c_U}Dkd)14QDQb>I*ET)8<oJXLrY9hEjkz?7r=H0o;$jbRdceXW;R -{?O4ooltiiZ@?)j$G>yO4@eG}WzP+T&e=4P#ZRZ1qn*fR##mgaD%(toCcBrTrt<R+dCA>$S1&b>LWPK -cafqD}TBK^!3ZK^QQbiI`w-wT3*%6u-8}m${V3^!c@h?@J`9OqgsrkBd!KXCTMqeymGhXEr5)+{WwxD -=~Rqj|!bfFRC^_<mreMs&peEzsp&+d2y}D%bt2sHeiJxb+qUnAcr|S3hP#Y-E!5{xpw5}nPE?1ALn-G -<c64)^{;rGJTt4zG??W?w#5nkGVDPpsdSA^P7WdW_RcJrLcub|Q^DKcpE0)hduPe6jF0@`?D;SON__1 -twd;(!YP_$uR$`_UIwnC6rfE_4svy!LNVR&tDS6F&Z5-u82Na-dZ;rX$0m0@X_f#$ouLb6~^gu~)V?4 -GZQdj1Vr#oSGRv^AEH<+WDPIQ7?&oVcu|GIuC+DqC`o5LgdDmd*$tAjttWGd+sx!_QybKqnxX4Hq{Y1 -fMbKy2WL)B-em2J)KNH96v<ZE%?66pbPg*~oQGc>e<NL;qB%>^t8Y^dTqSHy4GC&qnFU=~k^IyXK^U% -)bm+ZG3QianTG?Z#Z%VIvJ3BeTU(|hGXpC^bQ?0DRwLxNHjLMom~?naWqt&4(Y9_D^AJ*vc&mS#GkUm -GmXDKD_Xh~B=U$6%;YEX94N?yLohG|px$tH11u3jiCIdxC_yHDkh(h4d<TkTzc2~d1bv4G!{`##c?uW -hXn67;PY(V)JNW0rgFmLH_lFbwz_0F3^D`dE@^63zcb}^9N9C6u5KsBE?}Atfxw_FcY;|jm0SU!r6Rq -^uV6c1vh<2*m{CNp1Q?Zb*+!$=6iw%R4H69HUT&Q%|@u%6ns%AX0uv0)jxD?TYvv+yFH6h?c)@C!k88 -egCi?#@kTD7@grta&nzm^)325_XW;luRt7n`$9*=`;UWsUyruli-W$gdyXZ!(O?_$N?u+xY8G?B(E2@ -IMvq!88W;*TDSU<MjSFk;Q=L!BTwUB3$OnB^7B|E^Z%lO083A{k3;U?uwHft9F!3Umd^t-R~YwzkTxk -_kViw^e-s~xL8D^#;7I2_R6mX5$cGao(%A>!KuP^a{Cn!Cm?-}u*F#7-F<g8fi!qH==q)=lj;NWF%8@ -*e3%llH~9r6Bf_u79|tMhxd!QAtjXE=-~+b)$V>Tw;C&pJgXRH}fA2=9i<0RV&O$ykTOof^63bnu-t^ -b=(SiD^=OdrE)Wdga=bKc0W0&Y);L&ip`B{hlOKvF%JHO)vb=T`@I%LC?DeWnK_7tE%F1t27XmRIz?1 -0x~I+WxAV;dI4tI<}@d#2~kw%(nUOYKB@j<zDJnfd-8Z|2#WS*w*>71+aY0h~44UkVszbYc|FWDoZNP -sq%m;45p&arq;37znQ9zv6q$iGc6e6$MB^^5w%ncsv;c_{wyu)7=@;Abr`eR9D5oAGddZn`{N%2=z7m -W((r}dz;=%QH(sbs@)*AAWxS?3D;csTn3-(<>LriUai<*1U0m`zL|(kC$VeEQqBHm$yrq)CvMV08aDv -Rn_!T-8}KP$NYd0xQkZ-gRGWf#AT@5HT&`l7JC(_%5%<91dW*La^gl$^*JinElcWb-fk-lFq(6k)rj| -BLNYTSy8BoGr{UCWWyuGf&iI4IzJGkc7$MXe9lSTn!H|i}1b=YN4nggUHAf;u1{TT}omagG;e(~@zrJ -{tPIrq<ti)n~(_)Kyc+GqUTZtu{Etb6DsYQF`E1bur)+zgNPl;2H}VEI1J^d&b8t-K(m5CMyT!}CMHh -QsmL_p#{nd=xEAzw4J5NO>+*!_>&aFMGQ6{0;BgX;Gzr+O~P~{N>1GH0gN7^}yOO4(IjvX_H5Z^3Kbk -`uCh|BYt~*{lRy?s6QO&)Eoq@>AuU(8tk{Cpq_;R8iyw_WgeJl{EOE@r7%_g5Rp0fWgR*z6{L#L-~Y< -t>U;~IGDOzLtJWjmYog<Hq4oH{&(5m_FaVqO{NNA6j<3a!Wr6RXQ7d<wzMqFynCG0{j-x<H9VS{b&m| -Jo=SWkF^KI~bTUVR2W!_v?6<3>}QUk!iP$3)Ch}u|4>($?G*ST-QhIhczWDUH$f0PVy5Fb8@hLKJAhw -xx%Y@%$!@t2EMh(Zygn><Apq1lP)6sV-yr5=)m$0+Lley4-$KKRt5YbT@o+|iZ2tJs&Muk+wg-|ioLr -)la>e(^;8e!EBXj?|=QFrA49-=3)2tev9AeyLy7e6O)0rn=s#0i5t5|JFPhCinGcQCi~@QfeHysW5XC -<id?OWW3@2KQNHb>W|ckP0MY0p$yyT<$$IGbJRLu@yGcjbY2H3`o_U(OiAoGO1kGurs_nSclEmxc@_A -7FBJEe{;uyUB|r4xfsDd_Y4`QS@lU6&X9H31q+!HNXpi4A*h>=i&|j<54(auI5h<M|R+}Syi$rq~?82 -PQ<>;wE-r3ZA5{`I+a(g}>jsrTJ&qoMAVYEhWcg=KS4~aWR;wdGWscv4((VQNg1j9Lv`V=kQx{$;%>9 -ly*eWa11fh(&W5i;~Pv@6nsxT<Nmw63R5SziULZ<!slX1KhLBLY)_7ghV*$U6BVLJ7n+xfYimk~29Oh -cT&dN>yf9q!GNKl^3}hk00#yKVd{+=*s_uF`b)S0O(lIe_t{cx)zm;lR}7F4CE&BO>ypni(Y!3%P)`N -p7)hG84rftTMygs^nUFb@D9gUr*+c)KKMaHVHov7^oryjTg{aT^0IB$&EbOw4GeDGR@D-wwq0jwQ9a1 -Z2k1xLv=7!-7tSo6Ubd^{KFp$+ADD*+95>-85$fmBbB=N_!$ovnyobrd^-<?@e69|zX-eL9#0KYZ$|- -{l>mq};*EMFn)9Q)7Jq|w`4bQ9U!C6+P?fW)>ikhSmkJ!EN^TAmtY5L$30a4w$?%JeiN7i|hY!|<}13 -O(9Ed2LhIaciD{L}gnHKF-aoPt?GYVvhP$&6Tm+q6JrE-u@H4Z8X^lzKwDH<)46!*}oEi}tn#qEFVm( -W;`18go=#k$1o{^U_SEX{ryEc%U3o<+th_UXuac1icu6F7wY^@@}s%8K`8ik<mUq{Qtvv|Fq1?E0&2R -AfB6aXEgi;`~IRT55(x9x`2^HR?OGX{lYbRVxs$Ho%B1;OG%XPA=hLGKVT^ONff2{!4tJ7KTQ5RU;B& -+$Ee6#K;pAz)D^EWCZ_Fe(aDl7V~i$Ax6jy}eDG=b5MYB>miWoV1v=<bNp*W3?E&^cH{OUlGjpK?v6Z ->SCk*E0l@F%8?K-W*gvi!cls9nG>d21$9%y#3O|!|TawGZM5A9B{hAYUK1JT4_l>?5eGx`^<<|Dl(=w -bsGemd~^-)H$6P?q=~aVd`{S2tSE4(C;nPLNd4O3w{!G5HRG#5W9=P|54uI5kZJO#984I??xAeU%;CX -gu^7yFJ7F8I?S;ej^TKpLkcjb>iTVK@VBX0p^T2NC~8o4U=;rc$PgdA0g4uHU|#LrLR6aqPK22xdV^G -kk7qmtb~~=<AKl#)|Hx!CKnfGawBi1c2eev^A^sM>!NNq*;4tn$MbjhnMO8iG|Z;9owNv8XJQJcfT_T -~jWk+%FM_~tpb?n8GB=syL=A!tt7n*fuHix+7#{)?8Nj5j@>cu7!EUWE>=TPJ<`)-@qzTLuZIO{YRYc -V!%+8T=`U)j@Vk1GQnxYCq_QPOKs4vsexEDw@vCPm2L51caeC<?z<lBC6fh~h2qQ}wGYt<s6FEI#$J5 -1&w|3v!Q#vtU7r!_qO?z@BMFTQ;_jC@vCmBmhjchA_r(BhuL!w%{-Dqvd@2Pn&5C&a=>#eNan7p6p^6 -Ic><O2j?@ZW(^RTYj|=OtXj~<JVcySo?HWB`s`ZeKx$)4d8TJf&us;s<n8Saq3U6j9QC@P(p`L1~mkE -G+*i(NkX345jkXzhHq#h-vS<dPwj@2*n9LPkGAo1PMO+kx=Vjf@@7s29E?4d6=TcdY`V%Y&tHy#0IV^ -hONCByVAhCTJ`VUKnRCH~;KZbEkrXw@+R%5U=Nyh9sX2iYqSz}_;s>*G0IhV^a^D{9OyPV&(CG{l-{M -`hI$LCk!<j?PcJIb1L6hO|6AzHq<o6|Q!Z1r%C#s%p^N?V!1aHaQQvQ3f{vj)ib6kX2`ICPZYdnP1AU -WF<OH(w_u2>YcspW|Fb%#dfPuR*YW7!m|Vwu%OjRM_^64rWq+pkFni^a&;TBz<SDh-Nps4d1F!4#h(M -Q2V&M|x1H@mO@ACm|;kvjxJ2WY!mk1(OJRXUXG?nQ*MPYxLnaoO@ghqLz}%Aceu=u{F$lll&7O2dN4% -n|V~%9Jh4%-c}EWlSC%eRVUMy(?BqXH)erhg4t=<HJWI0!XWT3syw%=2D8m;I&Ue_xG8^(qyY;BA&OX -R{UKjf=s)RUt^Ok{-XrbJ@>*1Gf*L*MIY#1<a(ubWC60jn@(H6xL){DwH1=eyFh8EYQE>RZ!FTp|q|Q -`!N5F`km;)%p`^sh`cC91|hp1;?)db(61|80we$xrAIP7SkHNNm-Avps^Wz*Q=7%5>U<snEJ5-{=fOA -u{s1}-KmCJtTE+<`MK^?HxY9~17QTMkYSN7`ySx0?yG!M0LfhwvHDh8bgIP@P8=vLua`W2Vq>YH<tRL -=koTTZ<0ZD~JbXwM5_)MjgawKIW=dB&Tqwr^-3%yb17g-$gul0uaZeWB3!}0;Vm5$7AD0Y>rs7Ir9Xx -eUp6L)Mkkhb(PKrvl?*<3zONyQQ1b&ntw@ab_Nz|rm@wujIK<SX&Vl^-|N&1dcosDKYzn6<GOL8YNfH -%5272aueEv)K5wix$SfaTW1lya-<07_ye;>9p(rJdY$v_%-_T%_WbY_T6~-xLln#R4AW#aKOBJAXlW! -K)!Fl7$;C5d;th{drbBC3+0+hkpyREVL42yp~f`u00Kg5V%z3jFh!_Nb21t+xK+Fg*N)l-U)MH7!or1 -pvk(DS$QY7CvfB8IlR>7eju&>hB@qZ4g8GCIB36BlSgJP6W3C`?jSZ<p2lDu~{jpbI_F;+vdnZeRuyl -1(fGgId-N!j7-4aGm=skCt{j|2BH0!)o;k0=vWt0B+Am%^or&egd+aL)kDxvG@4H5KY=2>pf}rRo>I+ -WKwYtpW6W0;qEkuirO%r!hJVw;PRqrVq1MLVa(c5V&0H9J2h5YyIn0VSIzyKMFv9Qmj1s`k+;-`@EsP -8dw4$?J)9))-@zk|FOUBChlg-D&oMCF@IMRfCyyTks1=$m@%MCfh5w8!<j%6$FD5iCUYz~p+vk7#;rK -8aDvqJMxI@ZAQB}nBFZ1`w=+Wb`Tg%Q~1V`3UX+8@-XNSqtKR$e<G0$SSO<xW|ME*X^Tdpz9Yj$D)L= -tj~BK0=J@ibrtT*uFhm(47y7tHTRRmTW==<!WvrM>R1P7La~bL%6kxq7G&x}ExXFC>RQy?*}oc>3nYS -Fc{aej6i)&tLYCz~KM}%XvoFE`fh<%4Jbr4Qx&%M-7L`(AF^*33J#(4kKQ&+0u|V*^M-kMbMIULo7n_ -<U1`HS3^|QO2p2{_7r6ug3YpxeYn-8#e_VRl>{{;t1Hw`t|OO7`Y(bTgRVpg7;qF~gYB@_BaixTQcA} -&;(<hsFKSJKPcfMwf9k*55c%L)O_GtqMEh$1%<Pm-R%E_+Gx681v-P~(H2d4W6~zYzgp;AQ14lXX6%D -01b)e!|`hPi!n4f)@SK%z5BVjV>e)vi+q#)pBKEJ}EXlK=R9@j%KG|Z4di>W2u?t%sQ8HZ)lqAl_zCh -m0U9{@nTjebSt6N3C~{j+Cspq6>Zko)%d7f(`oj?>6@p$8Id62US`OK@;r7kRk=cFxaak3R;jccnLs6 -9_RaSWFU$v#@IU2tH{g#%otz*wiYvAFCv~uHt1!;P5I9{p!2KK$5E@I9qmTanZ$hb3(31DPG*Sx)WlJ -nwAEIx)u5t^)B+<DqZZ<?$Gl-pFP%#d&#aTBHH7y?W?0(sH(5bBzuY4W@|JF>c>+P)yH}03M>=whjQe -97X$@`+<YL9S$BJu1EMt*t&DJT>JL}3TBBh}!t!)koHgWHgwC>l-|TS|CCgne`G{Y&Kc1Ab*e<$J9TM -#k;mY((j|5Cqc#v1>&=L<BtX*F)4<94Av+1jl{si7YK1Wh6{Mx!^nLWl=PGWa)I2Z4cb`J_AfAeEJ4e -D4aK!L@v>kPqIeW5)$qr}NF=|$<gg2H3_F9vvd!c9+2%|Qm<3mbpV;5=N#aiZh9-qRbRG4%v&$$B(C? -IMWXIcN(1#&#GVJLGV-=8p2PBbIv_M`<2A-mwi&SOXiEf_jYCoe_l!n9gW+LH4b3eXz;K;ekk99A&Ia -Dp#-j@r3+O2v6$hbNz4-)L88bq6~E=zfI4(qod+pNLD4B+TTzBRWi6US)zUH2SYYJyQb6ToA=2jT<Vw -x@|>^Da*-{u7~8AAupbBeQ}B}fh*5%vDiOc+syXue96Z3eJ!q>328>CAM&aw$>RRVya3n)B2Px_3ZDV ->ibP`8s;4wqYnb1+uAgS0X`jP9&Oq^$&q(~2IR!HC>L6Y*Al<ZukCzr+QHA}?&Y2<VVOx`aD$MqrH9( -t=%M-U%w){3(w2fUc=;giE<Gv=rq_?V91FZot<$S*3lqq30}w=mC#scfYa<q?lmRH<`X;j@yL^9uduj -wB#<!pwMcG!WzMAjU)~EbZ`5d@w1|H*oC&g%ZV>ueu2k<b~SY*!QB)GEnq3*+x^$5`v+F|L_0ve|y%I -P8$`;=TA<Gh73N~W%}r6<zqcOddX6hFa-tv`1ad_KlrL=_R#Gq5aG4#q$KXapx-POSE$-6n46_AffG! -Gu2~{Oit~#Lo%XPYob4yi^6PwAttqDjS~S&5<@ct@8+)O>K>q=>5McwiuINTLWv7@>Z)2d1W3<$psR1 -%cy5C^xxX^cxxIA<j>^Sq;@5d((Pdym$xvqLgeNvaYy7rOn&7t*?J0)rre=N~EFJFYq9;~Ji%IInyT! -YBH-s1oBc1}eqZe1zoT<O<BFprgQ;&|8eQw(x+RvZU5GHb!Qofm}Kx!|hseW^UTJoL46nG&4CuARB&0 -&Y182$S#hUBfmEhOc&bO1CV!V{}1dTxgak-o#549T?+Ho316^`@kkmG3_;pv@qEH*Qbh+)%9>99Ka+5 -w<`uV0z8Bl+%KU6^WGGQ@e;%jvhC!fAv*WKZ8r7l(qmC)5IT=Od^GOnmNVp6b{fPYPLjyi+I>Uvjm{# -?X6&pG6iX+cTC8}*@&)=H@s`fKj&0g<`~yW2Mo>yhYI5!jo*T4CMjk|hCp_p_a+*g6NC{jqu!d6=UuN -xueEE>;b4Le3+H7KGl(xX+gl`<I(X9_W)ekonH92x#5@3-E$c|OgSI=gCAR>-%D(QSNXDeqd&EIEe__ -76pqkDVeEhLJfkyf(#)Qz`2<ROG*f>#r=G<(^BZJl6$M^$AhtPef2AZBKucGbw6b!z@}o$=Y=v7t4C1 -_tzCO<wM?X)1z3-x^;9AB&k<s`-rd%<(z~B1K|Y?-$_;(7)dn;-5s0cg32?-&dww&(^v5OH=^1^%G}l -dSl%D^K!xN8N>AEa;eo=`<Sm2=tjimB`!Xg3YquTeM40as2l<(MYdeBp|&E?Pz&HwY7%I$&Jm6`V6Es -+by4cu!rzO+<>B!4ZH~cLQ{$ME9k-?0ke=%jtp%`EdbxPk3|sbqOPoiiMUv{~jE=hEi@P-gheKa<(Ge -IUfe_Y+7B81baD&XseCK_JqvcSK08^u4`$&2jPfUM4G+jBGAb0gxTYI$CMTKfp9-T>f=#Uh!6k8LAN+ -}}^yE+{IHcJ2xaVG*?+dcm%1kLq?u5!Cj&`9l(kxmS3PrV}Kr$@6AZly<z#7q8;gh<HUDAv1)F4JJWu -1uYZJJY;ds6NGQ*(<nHsM7*R%5JkTvt50m?*Ma_@lb7q;ipI=*X9$*hPT6Rf>AmC$m9C;YV_c%X8dDu -9y(eTBtI$~ag>buzybMRF4)(dekCpmQ>^OX9bSR4@tJ9`fTZQWk&fE~$fsQU?sKj4wx+T%4P6`~8JAj -9bTqx?pb`)j&yumL33C}!`LpwZxqR(siX545Oy>dZP-KZw_%0nO7F9gD^;b5gfGbGQhnA@#GKbO;JvD -h=2{W103mu_1`o?zD&$OmK`<gq_IS!O*Ub^@@?1Sx3h@~DUX8u$I@o0x9u-bz?rBh@zQl<^EE8K%8#z -a_1PqT*>TXa~&8G3hRfJX!iZ`<W{PL0r{-wP?a_V~pxfcT<%R<IX1FO*FI%FlhK&c^oJulO?+V}wn}@ -?e{chNiZZQ2~enGmwQ5a5r+u&n@d(qflZc=g7e@CL+A~Mq@82vls5?Pw+{LE<#io5L<cLYt|}YT^Zyo -F%TZe#7YN$@5uYw7i>uTzzW*YD_a$hw73{~+CF(^h!i~wL#ov0FW<y6`|c;tFG>tIYW-5b=dKtC>Fy` -uaIDI(YBt#w?1SYmi+rIGFGo*~vNB;9Bl;^ne)00{v*)i#Ta14`dHVGDjs5Gz%i|YsV}bsiyW0@7p5v -!?Q9@lqwVzvQ&+{li0eO!;+~F>bQM3Or^i-i>HplKm>#vgLs#yDT3MvTpXwldtrclDufAm>=RC~I(cE -%Fl%E38Y#lbi#L6=5nEba*=Gr*$R^Ze-9@n4U>fB9<q?D?Cw6H8EV2TOF%q3AzWJV(wRvrw4SoL80_v -W`n<tMtC{<6uKO1mz*XQeSw72Jxf#_=x^V!!phW6N=CS!!0Aev+5zAB*&)q9o?dtjZgu$#1iC*fsl0X -2&6J%#^>x#=Q-Bu$vFW*n8Vz>r0WBjspz6hW9rg1?YT~)M+rxK&a7BXiP1ZKt4o(IRw_{0kk{yX)V&W -U!FW7<1x4a3C}gFEwO2_n)>jt*XbC*$^VQnuyoOc|@Ogh}oT{c1kLe$G<%LLKaf&DLTYBC3yid_+v(Q -aN_r_|*+nY<=eN-#i0U9bOI}Kv$$xb6uPRhU>2$KQezegn*8I-S(TozR4uxPYFiO5awqKG6XtS~E-Uu -06Y(2sV*AL~J$sqb)UFaX2}BmT0yu*+rknUqq*oJq+n@f);iKbA-lqfHzELCP*_3P(YWXn`q?N&zYKK -uS2-Rh$?#>{i$F*2l@k6v+^H+Q3oK{HBgCF!2mV;U&eg@}D=wb+#neS%#DX1L&z=6~4#<p!+jl?Oi?Y -GM~bwZgzO)Q?<yM>8fu#ZA_vV{&Px7TWjS~vb;M9$6VWs3!7tTt<818d1EjQhK|N^68p&3o*Y|-_Kw< -IrQqzk{K<Z~SpR*-IV3e05)S+#oT=Y^`G|!hEcbXoNwLJJFqMrR$<Z5knNk9y>?jttUM`PE?em)32h? -0s&Ld-}P8J)=ZN2{per!9sudOY6j-H(++foyTki_!>4hrID2mW>4F<PZ+2_m!c*em-nPTknQP_2i{BS -MndgyP&Z-??G<x2*pW>3#T*Cgoh@!Em@_G&b%4jR84P01*B07&Pe*^ztpbEp<9@kWzcjJwH;)Si`P)! -D%rICIY6pa#iUAhNrc@?2Up$vF<2T--V$b4kk&b1LF|Yv21kDe`wcms?#1?&xFyV06K1&6}U_inezEt -Ai#t5^IjX@$&O;#G7c&K){Bv}33W~}=-9}m{oFBf<F_RGS|NHJC{<k;W4eGc4h8zgbL9o;^A5gH^+Qf -LpS4`?QnYq-x77<w-%1eXRSoogU6m^HXi+=$C$;tZgjdF>dlJ!qGOxMThEbJsgey%61aWm_-AUYi|EH -?H%4#w=BG~;eA3r1ty8q>)FXCAXdOeJ#(^Plr1Sck$Dm7ya#yOCab~G%?bDgIF)8dgWuPE)*b|ryTH6 -bbCYqm80cC@TEc^KAFGO+b>MuF0L-ocsKTIEekhhym+))}Uk4k;8`fp$=*#+_Ni(WTFLts}eKMU{@1v -~_4L^Bd~|%*tJLEUxnHQEbV_;itD?r)ha=FN>lvM($B?peCeY8i%CbzCSr6)<z)4v;rN1ZX1i%M8pb9 -LOrr$PyI7t^2O}VT+dK79WvM55dvJA5^`g6BINnNq&Un?QTQqe_`dGoKBz7~t3Qrs>ATV)<G==kQ;oP -4S9Og@CdmlXU~$eIcDy4#>G8vHqM(sOEK034M|<Bkx>>5fMu&tuB~P}3aq~cZ4(N6R$5gT@%U=h!uLC -ocfs&&;4uF$b9!Yd2o?k7|q3-DM*yM;>t<!7{Y&%Q{quNIiR**sl?DFHPMa0h-0qYi#2}ugG6(G-YK1 -9_`TH_g|Q%58s$n1ij`CY~^y0$g@Iv*R2<gHVoWfC@hI*kI2MntM9JKl_=DLQ-t{zSRxKx1o{_YO=H4 -bv9yGGFdfhFq*)>JGHHMVNJHsKhfBI0d5N<VVT#y8vlsqTrE0iNfbuo@~|_mF5({k;MfX+)4>!SxeLg -AXha3rgQ8fO=3*YZQv9ybfN>PO?=MOxG3Nsp)fCE9+4!v9C2{NCR_kGwwP#%$p?9{qm(}hfUy9*#d^g -{KT7j<!IQ^*jyJXT%Am6<X=BY<HD>Aen{{Myw8e|36V%t!k}c4S>!R8;%k6<2rA3T_ipcARYo+nKkP_ -YqBRoepl%*gh3!{Eli0(3aOQ=6`Onmnw^)8)!VcFvGr*Dd<ytupIVRz?gwOV7&WH?)8V+g-p0`h88$u -%YPh}7X7m(SZ>NHpn{A_YKoU96YoZ5B~K1W&rbp;>1jpA+%je>z}j^U$K=y7TwUg_rpZ&wlc<q*|Vq* -EM>q0?)A4Sz)=%PO(ZSCw;Q+xT{a>Q6qc!pf$-|2)!;a0gPKUy}R_%;ds~>vso^G1=@O=sa?Y}ZZ<)G -&L(6qgT$Mlj1S=T3tNwz55WU;>nG29o7k`}u&~*BQv>_X-qmV^I?WuGv$f_73<zh@I7~!0oo_F03ex1 -y)sV*4g51-9GN!ES>|&K2!o=p)bs*wCtx7J43C!lJmv5f`EqVO#;UCZ$BY8>?C#Wi%-z<{R7h|JyZA3 -a=p`nN-3~OGtO`81Jm|E^;3fUP&@r}k<^ZE+!F%ogf?QvPG3NBlkCQpza;;F5O4nvPZ#BWGnysoRW4E -;0D@|IAdFat#QM?C9Tm!UHGEt&jt%r<n?<amX`6oFAV!|0c$xF}7c{hr-119#<_keDMEDfvk#u8Nm^X -k03!Hk9m1hsL;4LHq;_Cx_juN=CwMPHe#>t?@K5Rq8qjS|?aonu^UH^`dmxBY$9quf0AZ*28Cci{|%| -vJJ394iP?Nqq5p8H>XRBt~7RlaRA0qY>f9v)P-!UhU9(W`_%c$ua4Uzd7CIllSm|-uO`C=Ce<kS95mA -7>JIuBE|&q+yKXyY7n_xx(9R^?6BWi6Os`)J%X18LEWu6AmpDfzso-j(iwMHZZD=`ssx>CIK_h9EBjS -xotK6rR#tHrK^4X8yAJgebO<Avc@b2dR=v@l`AK&|z!8qmQ4zM)S7f*f&8uM0|JsExT>ff-_uTTEt;P -n1jA>jeO0(#qhLvPnxd{1Fb@fH>a5}dEo`$1mVZ}x&;<sTT>M6f0O>+$P9y?k?={3rhL{JR$~Umrhx^ -5%H5XJ%*vh)_rP3KqMyNc)mae|0X_e$;PZY4`;uM=Vfr$M-W?Jo!r96-A^~yQ1gCU2Kj<V=2JRzoJQ9 -iwc4y$VKtajTDUAN^%UO;<T|>P&O)W6hZW-V5ygXONaQ#d-a#!jHZOP56XZ`e}%d4X{xpf{~5HAI5c* -hbnDr)b=MIML1AvjBa?~I&STOUxt}h@jyI5Vs2=Mf7Ou1>(6#M?;2FeVBqyIYr$ZRiaH8RaQ#Nd{o+@ -HpuhZSYVJlX>0S4;xdW>^#r1D5SvoMB`gMfI1334XMy{yJ63is|^-QaJ%3T*nu$)GlQjvK=S+4|DD%M -@)-{T@bQ83h%+fqwB{9zl<lk@RXEx-fW^)v%#$&KC!ze?|?#!YVjZ;O$VKkeYE(4z@0!)C@>6c<0M)S -QrL>UR_<7oWISkLNOKtl)|qs8yUqmQ|FPGI(ah+_o;(6+?eL5vr(8w0Sft>%PT`!_{f1`jr+-pD>O+6 -)xeb_<d1KxwS_8GU3l^)1Qa#vM_5)AA7NS1Ny1C?aA$TqHppzsIjeK)e6g9^YVQ+ukbN^8{`711!n)9 -s&W|R*#1l^wG#eXD-ut;;UEUo&S$TPV#A-CMDl9>mijZ(k{!E=EOYUNW`LVnztDEu|KN(4BAJg&JR`A -I@2ekpOhZlnUUEYdc3VpjG&slqr_0E$Y0G^tHGEJDF`YK0v)Zvd+n*5Y=j20ClfxC3ZAI=g?o^iq2O# -T9|(5CXBNmeP8jp!{56(`-WmQ;ptgZ>LZ?2?zLK)5NexZ}C!2y1=PlfZ*51Wq|HGF1!*8YnoCB{IVx` -T`Oy7TK!Eu{c|D$(gHSouFXJ>!A+l&o&hnj>;VACVmZ=JpD3S<T>rRMo@%i3d1bd5QRp*-ssk+!DWlZ -g!?h(H{gMRhL#Zqk7h7@*W4SbKP|JD-v4GCygQ1t<>UDE$-A2r_`9&dAw0lVcy>*j@i!4LJh`vmouv2 -Pol=W`85#y1|A`ir;G2<(N;LI6&RAjP4{U}`M6gK92pyDKcr$=8bBF3!HEXtIo4p5Y!Ln=YX@}ym_I< --2VV%%7T`1!r{f@IwPH2jcWKSQTx=-I);!FT2DU4(0L@iEuwO}uJ?0+^pB!W1bdB=A)<9?b`c)>CYIS -B|h$EiCOI9QV0gqXs7^9WX>li)5WZzE;y9G{S^HVtLrD9U6=Nfcxmm}xXa8z!7{V-TT;etkIFSbZUqD -{D&rs8k_B-vh#R;#8)D8l1_t!PL(uL;iiJl4}`GmR{o@!&4>FNljYwhSeY4RCLfA!^i33bw_{jwDC{5 -wYYai(VZoLynz#H^Y7#x))g4k%jliz4fto6>}yB<gtHvJM@Crp60k2RJ`7Ee;buh?Ek6s%y6ptBdofR -zex0xf`fUfg^o}xp8R14nq@ve%7N)4Rk)`-k$G+f|>Lsbu-tIcb3;jRnGhf@&hKr9)3|8o77~HW=O># -kUwCymU-Qhpmpm83PR;ZO3*i{vXfq4~RpU4~3sHv<JR^MOTzK3`b(GGIx_AR6sTBDmxXaAaD1C<kpfj -e)56_xl5iixJ1PZNbsHVbJ@=NxWKuIV!JGatd|B0H>6lY$sK$%#<wMTis4A}K8pCkaOPE&ibXxhOaJ9 -d=vYP>rR$$Q7{lR2J0VZ64nd|JxUTA(JR+AwCW7b{!nEv?uiZRG$MO0o~KzO-BU)jLr@ivWC(wnAlqH -#04QB9FfMVoO2!Gk|j2E48oY`$RWIGsYb4G>iR2p2`%B6Pe`}Nx}%9Pv?rC}U?cg|ipCBaM?m9^<qs@ -#tNm1kF^2N(p>f#IuvF>Apch$CUP=kSq1X-z(eq$nB|On)PRVbCCokbT%4g(o=sQB9kC;Fj(KiOS#%5 -hy2}H%d+nxHU28w{Xw>j09p~}4&|5v~t)_sx5#mxf~31ye|)nC4wQtk+yr!AtV^K?*7W;cOYEa5paU; -?oH$6k^s|COvj_`%jJ&C#pBPk(swzhAyqFU8c->BNS1p^8?8bp<(<^k|T-;YM)4kbVK{ITTrQ=w0tJu -(<!N?Zk}VbYORy{|$6|Zoa4uw|@kUtcl4kf#1Mv3dJY$ui?zi5+Mxxhu=t-ytBc47;o;?!`pGY`H^~b -!<oM(i3#?b1h_)F933&L_F`hze4^H7lBo4KK^UjWz2tWmfa?g(Z7lnlY2a-xyf9>h{6Vzfj81+2PIE= -aPNNeA<<ysVNKn8G7-B?-j6z02EhAoBpR_Ingn9pXT|4H%frMRSh0A0}mIwL;fDAjIM0t6ymECE7+MP -hma4tvQ#JpyP5||14FdU^&Yv4CA^uqk&zedDUIUleL4r)&AiS@I+dawEm74?-ky3Cr(`D)$s<tRc&V8 -9mzDv4OmS;XfU9Ph}>t9%=I8sDyvCLt{x#+n#R3mSM;+HlIfT6=ssGMT(_WxP+9&Qe4yLQfi0`84@AZ -e{-VAmyJ1>8Kyn#itGG>m86jZBSqD7*zgqFDPN4m0UnAOudsSk?`rX6HEBq`YCz*2RUQ1E1~4B0`XX> -Nz~~5r1`Na9qpJ>dF$#JU9kmYV$a@Q0)r`eO<RomFsfMO_OpL(c?wyJI#iWU%i2uJtpKw3-v;=q<%3O -$HG$cKi`lN_R^sW>BpDTHo=!N=LN`2mp9+iPkddd5FcZURn1g22*EkGRuo=#*w`3Ze>Q75C4<9J~&#l -?z?MHB#@c%n3l$TT`=o5SE8M#l*A~gnd1Q(;hARvK*0B56a&$g<M`jA}?n%wI>?XYHQjo8!&TVh(JqW -3V;4Ovej(krKnIUgARh{NPVX9YiwyCyj0^_Rbgsb>pH{*;GvcH>M<lMy8nMU2B>f`9$}AEF<)1QwmAx -6XESKKQ_fpz+7#19tauAO;~9eW=hNwg-K9(R<;25}pTr{RX>vCp=PvkD^vkeF%4pO!e=|0o%e&b#U7A -DQzdv<^j2n_iiaGmCr%8`|PuK<-5{*dGELS@u1r6e^-8>L4NdSMp@h`5{JxPXb8d>+l4a{`;~~kl@v} -?jpZz-@DM-DWyV%23@e^}h;7ElnFkS#bUI5mrLwrLiUqsuB6T&1;L(Ou)Ky6aE}zXo+d)|+=NpO__RC -Yl^e#48os}&WR`R}kex7Wr4UqhT<I#<?bmZ_;LkWN{Ox%!9*L3*&{4y)i=K!a(z^k{-O>TN}%|Vw<j3 -N5nLx8r*7X@4I{~K@uQSY<QyhmC$i9dG=3<?g(FQ6g6gktp3id*Afl%SuRT1ZZI&@FxCL0sKwqI4`Mu -OtA{7Zf)EtNGqfjUK0407U}b20vgfBtY`vUyUj(xy&glJS!IuU`ii8dO2(0h5~ACa=b_H4zK5lpO)JE -bO+R9t-?L(gaxVHx$V9HnnJ4d9X=gTtoEF2)^J47lut>s;Ngh#NR2%^xBb?-1S~uzn8Qvu#5gCXaR&a -0LAlI=%M?DHF*9FUjA3=AF^2Ioj<7b%)K~k|4uaP?Uf|RRzgYFGw@D!c;MTZAX5|~s(}Dq2Af*-**@Z -e!tV-%8?}#w~sIMp^Nx2YBZ9?81<<<jZza@(+>O9QG2!Qym*n+vJ>LK3%(FU_d3Z@q@TNty-9~|+A!J -d+9!(v6Atn_{y|D5#1JTwC-rYW}L%!*|*we95>T$AqcESQmz)+7FhG|D8Zp`sb<wE3?+C>@%myN{SQc --BFkFTGNv|D-=g_Oa4&>(5~ARQ#M;FO0;K;$7Hb2Zt9cB|7>DAJB!xs%xh*M#G_TMlsdM7|Hlgf9e)@ -CcFX|pY9vTx+GlcRdm<TpLTc3%w%fv#H+A#89c`t<xT6K+3$r2zScfIEYb#~uR>gKZcH`Rm0sxcL`%! -l4k;S^9bgGQG4q4@W0V~qJF4pxEHl-Bj<}RYB|abWi9$d4|M)a2-<imXo$;-n>sj<-M4wwsiv%oVvzc -ECbve&7Vjn-RtuHR^NB4@f7h$-s`8q7px0^5M)Klq6z+jTRx%8<k-?9gLZVT|-@ow8k=QmTCobw9Dsv -BYLb6r)*<dq6w@#T!6bQ!96P;Y~u)z#)g@}!djYuJ!NjijgPG+?~;rEqF=6h*@n6~l>&Yaot3uk0~oY -g^5_3yHP(d#=wvbMh;fax=-(ixg2A<GUourQ<1J2Awpm`)+YC)fH;0BvX8JE^g$4*2kvrDEBcuadm(e -c?-*YI_${q9EBJ~z1|8?M#s0aG^2I_>6G@-1sS`?QRg-EM%Kgl8)I*TB=<1Uj;Zf8nRiyoV^ncSSm_l -JN>zFhW0%OKUSe+iaUsweGY~~}SVhT28D_w_@|AI9?7ic_8N?(C>dG2@2@q&Kin0M7ds>-rATwO~cO2 -`&KngawH=J2pAG*oyLG*V;1-%U$Mnbgvi-a0DF7zj^K8qx4xYA{-OqKA6lp)mg#>N!}hnh>~)eBcxhu -95~_|I~WBQ<X+eB%KATW=+T!@u_`ml(aHQ3wisciI|d)U7t3uIb&+dg0lC!hM&CV93V-ddqo@!=vM3B -+Y{NMSGZT4eCS*8(zbs&zrHjZhP>p>+NKOqHfekPpnPn{&Td$X!Cdo#usHcq4Rj><Vy~oP1oi>R$DeW -*)Wr09-a=uwZ_HKQ9)6Q^4PainQN6Nf`9mD;90)RFR1bps_06%v8#)cV)NIVvt==-Pe_y{5isqPhYIK -xHuv0krs4T!j?9;kDYUA?6YEWIH@M6~PZKzeUOOd8hrxMiM{pN|5EWR*@cYz23kq2LCw)fF&6F+yf3a -lFF&E}zV+M&W$2dHc{k|CX_>(V&3pd{Ff#EFteYuzMr$3x|Jn3e5R_|QR8tgZm3|*g%7J2$9Z<fqvN_ -?5k*tSP{0K~VDCS&GL<S6?cCnF|=NyKO%3bimL2q&t9V|H}Zf6gLZ?5rrJfPN~}a7VlT%<RH!7oL0^$ -a8E;u99->#nrGYSSWdd(%{ZKFI5mOXY}a|2~;PdNbf>!6<Jh<oJN4wrIGGh?^)jCINFU{(ypH%h|#g4 -LSD3#UI&w|T%E5e)u#3ZaU(QJ23etq53gDvy)vk{Loy)CL;jEyD6x@*g<EX0Q`QR9f1j>Li~>Lhr68J -;X4zq#V*Hsx9O29uFME_s+5<T5PiOZ4$3Th#*)2>k9c>ibCBmb-BeIInkaWjtr|vVF(}vAvIO5q%Z<A -K6`gp?ry)+3WFYYJbKL6Vf$A`(#OL=eEa7t>|RuvhbmihZ+^yrJRoulK{ot!}~cX43@yDO`ov%}=+A0 -Ix_(-+ah_a%g$D=h`$&+~I1s1-y4Qh0zZH6)YrrZ8y^%IytiznOq|n@DY=GyriNDbr4X*$sm-Nsuy>@ -<no<098D~4!;|Y$_tnL1O31=w28Ppln5p5bV@_PjAKS+l9vmUU^$Jg4n`H<aY?FRNs<vMY%g?lEB^q} -T^1Lp3t87iRii1Alp<>Wqu6)<1DCk_0o+T~HD?vra$%SQJ4?yox@%vG)@%*%EPVO+o8uK7g?(UOSzJ> -O?KOF#@PjHEEaX6y46Dly!E?6}XYpFUrPru5`8!8zF0>O%<B2k|O6I8&dEyT}pV*vNdAV8T7{)y+gS@ -OVMK0%cM6-y>(Sp!%;o0TD(m!1$#{8Iaejt$-=UYbm5hd)gyT35u5e+iIJy5t1r->StAx7H<l}&hfYT -mRj6t)_=NwcdiI+J(jvTxIQNsWvN=}-{~6$lD~#e?IQ@bUru_~QHHH*W-(P=vD_jcAzO5OLbN^y4r+> -Kogyky;VX{z3?fX<re@$@=g#zBiGT5|FzUJ?4iN5Ri0!Wff=hsytu%k%#6-5)vbg7_I5f>b5C^MrE{> -kAq#@yVC^jKKNZnLXY=hWK!{i!Re(q*<|OFklO4gYg50XS;J2Ajd7Ek+O)M0-W-c-&A&>}<B-l)u1=P -Pc5{j5|L$ECwXT%N9hyDC#KyQEz;s~B<fv(-PpyGJUCI$(oJGDA#4XpS%;Df~k%M%Zeb!xC8gVEGIVQ -1Z$9ptS<OX?^3|%hWz%&SC!IiNp%KW-uy{-Fz03Dc)nj|?K?cDCNSySehc}t==j38=W>{X4b2za`sg3 -Mn%x-q;&fJ7VPXspAwT2CoiMN9>YWT>+j2B2iSRf^e8Q@?vygIiie)Xcuj(Z#E1=pa`(Fi=NB&kYT&! -fNO7FStZv+UF?jb5AX(5>iQzr&OhYQXx(|dO{i8dD&z84->kTUML(A6<o3NQa|0HhrjcBHO(eBl`$e& -X}H)!@_CcoWJ&~BNx@^Xcz)h+oc`zJHAoJCeDy_=)9Blfq<2}n2}~_i^oChx?3qXF)Lq@gwAMV7t^25 -(zbJzrOLR&gexA<N0LUdOxVi7B@3eonOLuQ5wQ8il{p9V-XD<&8mFFZT{LOrsq1Pm(99eJM%c^`Z=YR -JfJ^bQdzj&NbvFZ2d#CYpC<RM-bihwQwPeu9+w1|{8cD;?cP&J#grY+hHCrK}f<7e;2MIw2|DI1cOtm -%kj%%T^oXB6Pdd|^XVtgPi&vY|)fj1rbWOE!Z5^{;NUe+DPm@pb$BjE<|@O#ic?A)CWVpz!VU$dbs65 -iMz-|C@64>MCzf7CEb!@Lx;AjnfzwR?OiRwfWvIE}oa?mDWLc%58yvhe#;BWv^VOW=_(wplq7}7jx1! -!1<$993+(Wmc+1mvEHh43(U#<5?xJ*%dVCSFP@TXNU8KW99Lnm0HB_s{}`qNhYd?s8Rj!t&{?pb08zV -UUWuv^v4&d4HAx<&j~=BD(?x#$@c!d39{(}VFi^yPtX@y$^*EIP6u-hUxi90jcjitLt7;`uMdjsQR5! -3#KqyzZR(cP3zTOJx*=JXr<$?T8fK;#qDP_PeB;}F6Iz)i=`uQ#(D7s*b4ep+j-_1JpWWUlb^1Iw(@v -gOPcZbogy6*g5z@3Vfz6%zc;od!rnwq;%>Pg~?{=!mkmtpj}4zd2>`0bNtPu@OZ(sTTOj{i@XYjSk*Z -ZtW?bU>qbi}W645*nRM-i=SkgWkh${GpLWu?o(3<_|1xF;|;=clT5SJiLo`sg+d~(2j4%F2`lRM|6%{ -WyO+J&~-|4!3cl)8%?wZX7mOPhTpe_J&uC^Z9cnmPOCoE9<A|ks+gxP=Xs8Sh#AbJVboDUf1LLC^{K& -sAWeO8a{5tAR-rTKe)8OUO49|8m6pT`M|Ft{U1OTdbpEVtqCS2T9>E<l8j2CCIl!YmB*ymSG~BPBo82 -CiIvz({CL404v+ja*7V%n=5n}78vP?2MrsAl}U&vpnalsvZ;QUI%L#EarBkVT*u&)yUa6^SnToFl>Vr -uMV{i?3sZ>gl3FDM3+Vjg9zHkX6v%}O!wpjL(TlD=hEUNJ}09FUJ>d|R5BV=((bn*<nMdvxLCR+#_fg -e~W_*?`V=k!r?>mpqx%jtLa~WcNC8`-s%klCvfs`f;!B4cB=;jPXmRl`98-7`>4udmkkwi!Ugs#Fl~& -BwoYF*iwTb9T&^$40!TbIg5R&rYIM5-L#x>6K?p-WcGt&e-9St9xTlQ<y-YBspYk-o0!6Rs)Q(|4&=c -G`Xjt7@s_8~Ml|ekdOnrWQnZwh2t2d<W@<YGDqB9>j~`O$L<Lsz$jjksQdLJze}idjeNKRDI)}alZ2j -ZBhdJD!rd*S;;FQS>Va+4}jQ_B?g)&K%N2bCo8LcazcxTJ)L78LHp|Q)bLscNE^Js2wyq(mjCJDw0PD -L1JrwnYefU6C!0&b(zYSC=DE&y{$3L0IiY$SIs4tlLjaHRUitlU#CAnv9{{UsmJ?l*&2=Y3sv`-)_bR -$okcnFFt+m&uElZ<D7_zW+XX`{(Cxk{@3@d-?RoAC6zVJ${w|OZMlN&%Pqe?z%*bKhrlLJNkHAVElY! -M3J$$uaRhON}FiL+@@Zp=-#X}wrQ9%rtA5^5!(KXouS(F73HcUdlS_ZMfNCbD@+i8e;PLu+EsExG1q{ -pTUMX?@PcI4#9CQOKhbT*!ALL*z*9^M5X*!SPhhdBmyxG-X#P966aSf)<hi8=5qxi4#Z2go(fi76Zfm -S+uSl<RPI-|W1<5U*2FWdUq->C5-%Z(|kA<^W*=5t&6rTP@*%bJ5Q{%$|Q5A{t$M>J&qAU@iOE-r$gs -`6-+5L@07bzW-4}wg0494@k#-IJ<3FaL|osZN)LdD}vwxvKFs_BWB8fW9-7z8dh1vL9IgWrH_J6F(%U -1rz16iAzR>9ky{3QbDJnKx+wO<IZ0;^e0$99My(x+K|rzNv%YT+QcO98S&R%etybk%PhAv#lufyn9~t -E^Uk_R*#1aii4Sgi==WgwxRR>tsKjVX>!-`22S}x9?@0O$y_HcEaI|bs%S`Iv{hYET^MSK<g8jQ4oGr -O1e$;Q0+tFO!%lLmh>s*a2mZs95%N;K$!jwYuVye;B*OCU)tRn!&z_BF|D|@xdB)Bb<b_n7%~)+dGoM -@cBN7SF5y4+Az#c%S7CCiT1)FA|IwO07C>n<o`W&8)jf6lfAFUt4_0D_CEI9Wcm6XlPllD~RPIY<nsk -MX$B~f(wH|HdxTusoIkV79RcHgRo#gQW7TH(sFz?)TemBWi>ByT4SW?EgDgTy;@wndI}ddq0vz!^WQ- -XCyl6mYF0c4Vewg;j`7KfQkb_IUc{$5*djzE-{k;<@;e8M5I3M|}lQ227th_=oG`66G;^Zc|ak&P;_8 -uuj{p1nPZd!6dLYw|{V|Ab4%oNS)l?bumr*btg0jx9ktA-+%dK#{nLzfgRJnMwBNc1MvQYftG4Z@Qr1 -<6E6Ga@z;Q~K=?=U@q{c|bepa-Kn$j2$H?Z-X3_>^07_&*!s!~8UhOg&;JKLzsviwb<jJWd62)cB8Km -@PK$-}23z`F!U^zr%a<<IMD|u>iRttlFP+@&JdX<vT8BLH&VwPJDKjaV3@^fR27NL;GN6>iGloEbBq_ -o+1bU7VrChhf7;0Y9uN1s@lWl&KHGFzt*>dX4u_?!e~&Qvza!AY3)#x$~Zjs~Z(#5lyd@vx`{8x3cdn -k7VwPE$8a?EmD^;lZQRXinJZ{4KsmogDgeD{B-3v>0%D(p~=I(zSIcq2|<LpTx9evrd5MBQ9Lnd?P(; -AVhI>g{H@KL`4DD=oF-elF2Xr7Sl}N$5oxx1=edLLIOe#QBbW*5C8;fYC+NRh;uH0q1s!q@i3N!H8J< -u2txMHO^fbXXCQUPx|E5)l=qW2NEYXOZh(aY4o>ouaIrWt>P>7WG4uolNfMY1_H9F3%O&=-h5i6q4MV -6_F!g`1W?)V>S<0h^zxWlMF@P3pJ5T^E?I7oX*(`GaWj>Yy5I|e%C9sKXBdg9OQG!vGkUu1vg+iA!%2 -B=l|Mhh>Jq^P!^v<uS*kMJ2N{AcMB;dvYX%a{r5L&x6odRV;8*G0c+s{suZ0xqRX`3&{j^pP?io{iC! -LO1&Tb?75g(e(F3@vG`pCnyzsnrYWa|FBOquDfzbrtAIitFk|83}1<X3f^OuI&Ef+v$$;yBJoCK64kn -N4eH$8}23ep<GUahs-p?GmQq#cw8^6qxm?nS@N3Qy57$ntZ^t>vX9)=w%NH>lXF?wNnw;XPq?CjzkD0 -dw9NQjvNXtV+^axDJnU*q=s~l?w6Mmcry)2Nh{6g~%N?)`$mTu+2uYd2<8zv;r?lKVsX6_?KxI77Rnd -7-G;_|v5hZgH6T8k5HYqd2OTcJbh(9SDzq81Xx<0H;UE^Gr$<bMld3gVJo_%L7lE3K0?c|)GkrCR@i1 -(w+nmXMu)sfSzAzV74ND+z&79%i81jd;fS*Px&k1<YuXt;=gtlg4ROqt+a*NIb65%4-MWzu0q?eZ1jQ -Czp4S7Z$c70!s=`csU-1*h-9sw+Wf+Hm+N#Zd9)&ehtHZn4M+>QCA5N2JQz;&(L|o80);v^s2aPrIi* -nfQMDnc4wS7n2mc;vdPM<)J~}s?f{~cPmXV$JnjVJ|ud}B>Js7%-E@NUKqIw6IasIL`amZ?7@9Bt)-0 -_K-*sOds9_cBJ=UH9JjLAcs<77{H|vF_xmTWPPn0ZmzB<*fxt-`vG5Yk6~>3c`D6ErA{T6B8d4Bp2f| -Ucuob1~46__Zx+{UkI`TS;HO~2geC+YiS0QX;&Q$AtFJv&WP+TC~fwiEa;6<GGu2+BE2sO=-3}p<R(1 -Zr?BMMtkfYhg;7R0!)HBD7b=F5p;9aiJM`I@(&jJhq3e@Ch_xcn@29KNr4#`F1KDPUnR07vR_5)YJI` -Hzwalk+l+t15+{*-WEwc#~+lvp-Nv0|XQR000O897^_9{;(4NTm}FDyG{TABme*aaA|NaUv_0~WN&gW -aBN|8W^ZzBWNC79FJE72ZfSI1UoLQY?Ofe&+cpq?*Iz-nFA0_^UHeiPbpSU>*J52$q$#$cC{#wGZDNw -BkyKIx{o{9(NQsn`+WA=gCBMi#9`BB)`|(8a?7?8*eU>z)k`jR?jH8H1!V{X(bc%46#Wci{vh=CQNJu -9%L=ok}N1q5muVzwaVt9BsrE->E`XNgWvlvSdlPE5yab%=p8ViKe$jb$u65ktu2@}o|6a<r8=9~lpqD -jWM1g@0HLcQ=jO=H4*6LV1xl=DnktH~FCe>@G2-<}@-{_ewXUdiF(jGF$B+NcvSYW(_GGh7iaK#ySx0 -!;{lMGP{}Vr4TH7LleC217kMaqSs;2tI|x49i(eFDtX4=@q>&2BzlQqR`O@?Y%faFZYKCJwX}A(*zGu -%23FF5A9|17cYO=FNRkNT(`WZa9?p;u#i}gTL{W%=EKa=h;hFZ8j$ajq{=+el<#>FnV>)r8JOE2!2J) -x7z?qtkDeYW!^oG$ZTLF0=Wa%#(FhH$Y5L;%V0g1lc9{9V9kJ`mtUq-V?#?+8c`UU9x)ep2!|0_oB{* -c2o<DGS_Nk=>+`Oc)Jf+`_tk3FuEy_5C34aRUOt1C^;}0k2XYWpelkvrPuwNK|7-5MA3Rqo?=VxaZh7 -sm1Nn%aYmHp}M>HGJ<3uv{dAJ0$Uy!&ggUyo8BP5`i}W9Z_kf{C2bs6vu%2NM=YgnPDGjXnq;Dj--T` -oL1+nsO_h<Fe^>O-A=AcxZ}b2wy1@ClK4PG^!N|u?e*6c{g0)+3}4=KLG@KGDOEY=OmT!9N|#XD}oHC -H_kFG!4aqiy~g1`*O*5Fu$#bYLNC=iK1bKE8mpySO<cn<7la2YK$Paa!d_rVaRSSLkR1Ie912R*<-qj -gT+SGGIDQzMe|du;y1zO@^on((NX{@Mmgx{(G8RKmA>u$eI%WUDD)i>{#j|I>9+cPTC4^F;G6MNdg%r -yUEEXBCp$rg}U(|J&VUCk}-YSEA(=GJMjh2l1jrGaboJZgMhBV_PBd=^PC$Z#h$gJF0NHlq8u{_P$kX -AXpkfvKpNYk7RX^s0)$aH8+NOt%u`6YfprV3N_kU>Jp_#DB5Nu&@cXQT*Y=bmcN*&6mLOzS%~($@pKq -jdbJ`c`*pFOKxJ?$8by>1*BL%xC1ZN~V3^!Jo#Y03fX%lL@R=R6UCHsC-ORT5i83E~}9%N2ZuzNQmfi -Uf@!!449QiM%A}lfztt^oiIa|PUy5xnY#wgjZ2wjpl)T-tTAY(%{4$~pE&!(d1rjqsnZ~I!_#LArX_f -BI3p`XDa&BHuKG39E_mKU^nZqE<?~wtRF7K$JXM&kWA@Y@8R_dCvZn!{lRSG=?mQ}Wt4HM{qtXSSohy -aJa<!=J_nQ4)b1^K7I9*3r-g~QAA<%|p%vQV2>{I2cQ{@Icz(SC&BO>qp_^QF@9AdICPe>|7fy!3cS} -&^&<4-*EGpCqC8(W`i$aNYs94%ppX1uQ<mOk5%jE1UeW}zL1?|x?3+H5PXXhhgT8%nPGSx{@T^(VQY; -Ue_~)BUtpdTix9PbE$IJ=Ja}iVfIP=|J7eWMP4@RrR7?YVO9qN|h1z*xba8RdKqm0(E^b`7k9fSy9>A -sCii_A|LteuE*pJhj&$by^rr|WNu%{iv>>myuDADI|t5<OPKmpealj&1;CDqmp*OoATl?(=B1G~x2xQ -x1=8YRZ>1Q0%-29YKsWV0(6*ngx1MTyVD`Y=gp<4ynCtaO`#@D_O-z=@?fph`=Rmn}8_lxhWxYW8K-D -fyP^uI6K27c#A~!Bgs)CpG!sCO~x-`*P7oQZEYzJ*uxl5;CZdK{hHp7&jEMbNzcDcJ5wzAGbmxWeTr7 -m|h!co;x=CaTNUFdRG{g#?`k;_8mWtq!eb=OL|N?iKnu-nOD172>JB9|>o5H<n<nL&W#I0zt`zm#*b{ -<3Ot&?J@rM`h^tgbi(6{?SYq3;5iSoj<a0i1jZ3U9$PDgF~%KtsSZ^_jGmH^_Ptvt02<pv1=5aj=FTv -Ay+kh4%MnBGIZyk0vuv{_U<n|+Wu3wvCDyNdbNA*aAAvV9wTmWVn>&qZoA#s>ao&Oha+2LJ968uY*9N -L(Rj57<gea;P)h>@6aWAK2ml;P_EvFLqD!*@006`V001Na003}la4%nWWo~3|axZXfVRUA1a&2U3a&s -?VUu|J&ZeL$6aCyyCO^e$w5WVYH4C-NRh{JA=0T-5*-nI?f9t%RX<&D7BsQSnfLjHS4a+W%)(nH&&^~ -t=aH+oMq66gF*Y6HpycL0mpgf-`!4Gt#|Vu&F+B?Rcnq6;96!61W1<Jr8%YP%MDWqNdLJIXMin|kg1l -VW?u-VwH<ihJce$%SBSd;f9!30kNa(8r@!PV_QJL3+MgfE}7aKa{ZScB()<`76;8OMQ=BoG7^e3G--1 -lzquq-K7&LiM{R>mhcq4?h4dJ6ZCZ9((B~<S^5l?>1TM6zGjT|YJiDaS=G?Ife&cZW?s$teKeUWx}11 -vtuS&@)ChiexV82NEMwTAn~AqLS!oWOW!5?>Q4PFl;G*frMT1Y!G`t3Q1qQ##4SarmeX~?2G3^3bSUu -{n1GH(h<Oo;iDpz$;Ar;7y_F}fGryQ$=^%b1!wESj$&Fd^C1vx+qbRc;I=W|-dIwt<Kf#ZXsX$r3D^Y -kXPKK(M&7gMCd82);&{~-x+vzgz>@^Adpua{p()&H6K+=yA-zL%qau{2B%^kSwh=>=}-8VZrFu@HPNJ -zsbB9Z*XH1QY-O00;maO7>RzD08oj1pojm8~^|#0001RX>c!Jc4cm4Z*nhiY+-a}Z*py9X>xNfVQyq{ -Z)s#MaCzle-*4MC5PsKRL8vb_=1EBh41<vdO&xa&(ELD?U>Mp$W+cjHBa<pgweiqDen*O;q$HMAJKan -CV9Da$@w@vzQat;<f5Z~OX%hIp@1=q-Q52<xDg=olM3*@i3Sq{$!isVxJ<mSlvbqzbx|1tehDZw*E6y -`nMaV=E#W-G&a$K!)%I4KzjHU9*fdJ>UdVG;#m2$B>ra~UQnRuQTXIM&P0T1qt562#Yk4{5h-|{Tu-y -~8Cg60KHFpCMAnMoEz5OlCmDwpFh#5RAaaC}Sd;ss`N62yEN;_&7E@B6>KJe)-VI>om{qCyhHQytVyG -Q)Y!@Difs7EA(QbP~Zmbb+-zoQ+D)uS7^FXb(?o={yOOnjLaSrIJ1TTlR;uz?I3|yv_yBiBK!^D<P@Q -QA7z=ID(J^NwRc^emz7|iL%1heJlv5gpH9lMPN#Ra<M{+k_0Jk3a>+r5DDf1n$1FO80tsif&Qk+VR(> -3(ea#^(u66^hzt*o^8Cz{YF3e{Kjm~t;|U_DCSi%bMA|h15+hruftJ$%(2h`Kxs6huB}5E{!x8e$B>r -$+_L3^HL-ulk1>}FTGP%nUl3E^EqFJk~Ycp$EbutulmeP4QN_X$zmR_6b`siHy5Lad$<$|Ow{vO5hR7 -5r>-N0v`TCFcp&1qGn2fWr3bTeDqb#tq?%D!;5?PfxIFG3UVXD>oC$tKcvD8hzi=t6H`t1{~(3tk+mF -HU3IN!Cx>FEakan+3T10M@#wh^7cm42Z*99>f4CCx~S5>YU9W<P63cqH5$OL|dyfH1QtIBFAchUOmcY -WdbnGu*ErU0CN6Z2Kp}e%qbh_J5Vo7>JJfm0ZD$rV{~!#*Z%$=_vz8L-LF_47fZsF?E9vv>^nGdg_JN -1MGMKY$aMX~z3{m5e{@N^Wm?0k7VL&BzOjtsq<<FHe(Nl(|E4S|SiQ2yX{?XDeUqrnx6I+fx_77GF!j -pdD@_RRi@!A9mVwF1X*hw^CvbNH7E&+x%R<t)CwgPMCHPbA+YP&f(hIdHn4-%KoBzXo)w(_P-l~@Qlk -Tl1-v7O~!lZroR`0cID+fz_C+WZB)&9`a>^wMhSYpt3bjBHRt)ipk215x;W4H)Igl#m@`6YrU+D~Uib -;GI~VsxWD3YJurQDRl6`2xL#{!8hHn%Fr}W!7+Su^~7(!Ais^Uwvk@kj~XKspgSuzzfAq^XoYyI7upU -r=W^%aNt+HtQlk~n3P6v(5ee4i%g9hwSWjVRsbO1>h1_S$H7qlx`0y@GtbK3M>mpZg(4S_$)F4h9W%) -lnwpCyy5{c9yXoHEexo8#y%f_-qLea7pSeod!e^Y{>i-2yp`bU`B*;}MlBV_)0S&x@Ty&eBYjnad<vq -~f-;KyWCcg~BK>%M>$LHz`Y?>)xsZ`<H`UIeMnqY}lyfES%wr%Qa0u&=-nP*fD{A#`rd!HUS+z5hi-B -Z18+d*AG&5YMjd^ylh^AF$Pt!?S?GsRl%SL%L&{sawITNZ_v-!}?1Y>KzF0Dh*53HwR~XBzqAuCTLAY -nz5=>(Es$gO>iMcbavaxpmN(DmXrQKb>5izyBvXKA&8lPS36`cV8AQL;%L`JiFO{ZLBI<zJ0}U|6tT1 -j_RoPY{bzx%kCnMzt7&CA00o5I2wr7i^Ce-7e~XlpEw>IIoE2#oq(T-G@1><_R6?8nOt4JpFV*wnt0a -fqG~hRvS@ntQ^mb={8~-euHu;}qHef$*eRfu+Fc7ZlC?WT-LkdCP`mb%Lc2FwtAw&cdnQ6~t?TwWIK9 -3+nd~kEhh&`&O!wPXfb#(XL=n!iC<5;fC8d@!f8>4g{sT};0|XQR000O897^_9^%=0has~hZ+#3J@9{ ->OVaA|NaUv_0~WN&gWaBN|8W^ZzBWNC79FJW+LE^v9RSZ#0HHW2>qUqPf_?9Ek@b?8!~4VJX)TCC`TH -A7Jpg-lCS%vK^bl8PgsKYn+7(M#+&itC_-Na^9-!@J`>Ob!kX&Z%bP?BZ>7aBwinlq^UbXO*cGi(|rz -QYu5J5YkY?rO>01e<!s=(?t?sXXh`cFxN)W#1zadW$G{`HOrhY0`3B)?t`gIF0R7+%TE`7#4q3c@$#> -?@BaixS^v#!MBv9`bq!SPJi~Ex&6EayF&CL6r!UC($&{Q-W`sN<rJ`2_oe?2PA^}InW&Pyj=ZRg8KO3 -mL<Ay1kTL{ZFdw`*mmr;DpL@HI}jK=K7FoE>+ZTq89l2fh8MNUm7Rq=`|4PhL^|B2f#q~*+qlq@h;ZU -KNv=@*fdE0!3kIMX(bc45jgNF^8C#PJyE3;7?Azj*i0(X-<x4QI{rY}(9dSqfUfcEKb0PTotw$P4@EV -Q2-(RXx=Au&2+jDFp1x+A^P^t)`Wv1q5tH7E<Q$)tZ{N<X@j(9vvM|-Sd}bSyAPNW05^{p@j5UPJY>? -ss^lrT;lOyH(VS25SJ73_|)!r*4V;yh4D+ps9}T>!B*?Zt)o$coRw73qRrL^#>m{y=FtXNNLT>6`8u> -ok_GzNI;_c)h56Y!tdkcDZ076GCKDFuXX~(Ap|{}PyUvnsXtBy8A0Wt87?DRaa=B#0PGpAfbDr2v7p< -*zF>|Zkc%!SXJp*Gv6TcMxr9e{gMP;zrEM!{SlWdk;_nebU=o|^n^Lk3SA@CJV$(6umi7ZMgYU`z?`H -E!};tNRGsRi;$R-~Xc^kC>3^SQ0k`5Zw&g)VXi_P4~$mjLYAk2XTj1SAlN(>&m8(}&*43MLG?14_^oa -fDmJubv#gS{kyV4pl*iv(bRQUc*=W-qj6I^|p0;fGtYdAj9efgd4X6LsbdFMas}AFv#nOyv@*jI&}_K -vdUB2_HCST?R@^cpkJjrjh;h6!*jl^oP60sX#8j+^y3nQ5VWG%8w+qGol-;F6HXv(AAz)7X{dlDg`G1 -hF!wOTIspqxBZ>wb^a`_*>KjlpRoN;LfP<S-$&BYr`+cJgV*Rdop5wN4EfSWZ*<4<6LB^V~#?l<fGxB -_COgTF|G%Q(y$Ee_ml3Hdaf?_;m;&G)9LE#lu^<k3y_VnqmC(p(oKSakzlZfi_=5!uUwuG{23=qs_d~ -c=MmcT%CfI1}5pC6z9e+9oee8)v~Lsm<kEU_5ybTJ=JOa#;ggr4MZCb5!2GBnXkTO5lv3<|=l1WO}wU -Zb?)QJY#L87zPkYFOb*%94SwHcRf_x9@YX>oCHObVjnAUg0J@XUw9nACH55q~x0B6)1k+WUm{7;of{B -lfQjDfpy{(2)ET1<(R^;#eP$8t!+V31(DMeQk7VWNy4-}uh6Jc3Gs!?BC-BjYTcj-*}bq3Fy{T<id1` -xajgR%F?O{W2*th?jP3n}{DfB{d$q6{3(r<!ZJA&wFwbKIem<UkX>V<KgY3vdyRcmxIR@h{ZqmaABSA -oWAMY^av6Bu{djh16Y<v7Fxo~`szQ7ipg-PcsclqY{_@tlyST@;=T~y;HlVh|xxmD8EX(!g(*1K3cK@ -XwsUuQxX`a0bU2HyT1lc@Lxw#UAlUbxGbT@uT0b~<syeuoxTGG%HvyY(wZppK0##xsnJE!Xv0fV!Hwe -b30P-fK8()Co;BB{<Bx<`}A-z3U}J0Xk0Ydi(>O+pQ;3Wc+HNdk5b0_J52)8-l=Lw=mFT$%b-3?7oBW -1OE3=1={#CJHWlg?r;0nKU^UOdI#j5eWx<1@Vcpop22|MJCBvfB~6F(@c2FRfU7P3A!jI!0N*o<Yo0P -Wl!F8BnL$x$o(v>lv3vFpzl#`N3_X<|{csL_5k!e?y`k!E5h8o@*yJXx@Rx;)U^MEf?M9vMtK!4yY-o -mevgxVsoou=?Ih2o=sT~8<D&qDK{Q#*uWOI9{2Jq^L>0nw`&UOt|(9L@ywJW0sm(%@(I)XctkdxdUL) -2*dc19?{L;0Wx@5sh0{dO*`BoA%?jVSNhl)ATo``87c9?mXE_0H@%cZ2Qh8u=bdt`YDZxpnUg+o^d?A -4<%t`i`{P3&eI(PUeSlazei&rRGMloly|}p`3#B@5rii&zOw<2T)4`1QY-O00;maO7>PTWwO)m0ssJB -4gdfl0001RX>c!Jc4cm4Z*nhiY+-a}Z*py9X>xNfZDC_?b1rasy;ogtn=ll8=T}^@J|t2H>TA?R>soc -2)M$~~he^`}E?j~&V>8>N&C7oKY-7@;ADLOF<b`0)^*!hKUa;dhZb<RvI*H>rs-$Qj%c@Ry60;0w(+a -79a4s~_RB#nVeoUyOCAyCKn1r-+Krb25m5|K^mFn!nc@#wjBTB)-rkOl?I-Nyeem1$i4o{(^5(_OPMF -nO6bdBJ6f@o11E_?-Qqck=NTnfg-opP8}M@zyB1V<}BYg>j;ilS?f_Yz#5(^~6R&C;~QH8MM;QDC4+A -)1uYTS??5C9<gL8q=Nd^pY}M5KdNT$I^3QvbDM+%sshwoR(6oBxxGM@}nVysnh=T;z88Yk)+lQo99{L -2rkGEqr6iHqH@A=!;g~&;k5N08H<$lJ$Ynl;*s<G*iDtMQ7XecAkrhZk;s)T1iYt8tAO|&{5(&#YwP~ -JZ>4owZ`@spmDMM+l4z2dDJKe9HHEixP+In7;lpPVO+oS*Sm?GiHlQh%poR0tPIU~JtP;rcU+I-!Lt6 -l}a4QGbU26+8J@N*nM_zB95A|n%eKN3YlFUGnm-dp`kc^lcA2snUkl=l5hAn|fyf<?^odUc8E`E|3EN -?!YoSeMmjG`J};f$(@G~V29oG)r?%t3sK_j|Cn7z)8Fx(XECgZCDMvMoat<U6JIqOKj(-nDrh(TDXJs -H#7>?kxU`Tz63WO(jK*p;Rq)T#udG5Otuo>XVJ_q}Mp`*IxS1`r{{B_b#q7-=$D#4twx^aUdo_o5di< -)!&s^9jf|lsu8u<+vB$nD)d!8;KN+F7~szeeqPQtCLSy0jx#~Za48-iD#gP`N%1iwrL?rLo7_+(13XN -~(xXS{7(zzMSexCY2o=$T!z3)knvN3C2aKfObcz;%>>W0cyoHY8Zt)|j%Z_W>guZz_`ky|mH)s!5X5h -0qS{(K}`zZIbuf8bD2xI27_zu4H8-91TiI1c2(Qi;o0|XQR000O897^_9Oci(cAqW5fX(9jsAOHXWaA -|NaUv_0~WN&gWaBN|8W^ZzBWNC79FLiEdcrI{x&01}5<2Dlhu3tfD1FQ@<(&p|<kv5CVCfRO)CJth!J -s=mzibdJHNTQCU;{<!{Z@(E*?^bMi&n?y;Vp*CQ&hv0)NRDFL_Fc+eT-&y-NbrRCeza6eL4BXFB;!Jn -AWgXn6yvG1to$CA#g%-OMsdc|h|RM=NGb}|Gkxzy-!oEKpcXNEECg=gr)8eFLB`74aiAhDl5-~H>8CR -oHo}42EWb}qPKdo?>EHimA6piIPe>y&r)tSUXFv`=5|*lC{Qy6SoD)!x3%-m)!qfPbJW{fh6n_xJZ<n -$nV3LyCWvW<0FNEO20ri1p(O6PrQoGA#;j9_fvaDGgNU6;^EdT?fh$Q3p$PDWJ!qVl-kgO<)cpUQ;Q4 -6XCrvE(unS2VsK_<vJqcif;La9t1d!B?}EMhY=A#Nln4XJ!mJaf62dyhux5XBll4#6WTmAg<${Bi2LW -U`<HACLftmU>+NOod<}OXmdi=uC0Js3a?<7KEnHOz<?JsUpvTV8LTdr7=Taf+T}q1Q=eCKu`pNQxYs= -6poiv4q+Ug&Ls=Y(=<pZ;gKE|e|MRO2Z1V_0`nl3xa2B$f@_#PP_GyZvP_%&sfZB(ATg%g)?B!`<j3j -IXo7hOT=vk+B}>f&;4zHo9=fG$sm(K%_8T{sEH!B=F+=GKlS=l`Z^(a~x@9oxi+^N-XH=-yGLe8=;fH -|=d@$)q8b>;(q!Lw56|sz;V*x23(qn=;W#qgP#UR5J*Yk@uhlILwmrSRBcy7#RLF~x|M2mNjPl<PsGd -!IVE=u#DZ~zJ6pPx=n{V$`di!Oyu$MoEsK(4xZc)5_Qj@>Y34?$&6sz9ZIa;G(20L(IHP=RjR)H3uX3 -(^qLId&74Js{*A82e9fOl~G$j*gD1BBS{t$gJxF7Mh0m<s&8^%=tMi2ZtEEHBFK!`u|T8(|HU2hUD>8 -Pm?4Lu<)(XO_;3sqABKa2x~|Pvsm(eetA1ZL0~}XX93X`47nICg31i)8%3cYmb@t;DXcS4&$P=ZJ{nh -J)+M+YltJe$rSP_gT_O3VOeeSR2$t-k<N-D0ppJI@qgi$$;7biL$SQUL;b(wIdq*wW`^Kn^>^2Ku^FR -i|ey?!b-JyyLfv-LHQKufB7?5kvQERBjKE|+I4^MpL$558QH{*O3Gv!o1twGd|l;o|0tXtF9_aBar9y -$lS-=2RRS)L6BdVVw5V^roIw&i*S$^AEHCbPBXo9V5qu-R4Zn&3vOXC*emeT(qf==$^J&wDGwHFNtd# -0J%0Q-k+1N&BwD6<1JTzN<P+)y#VdJ0otF+M0(BR>S=i*P6j^j77V^wtM}2EB}Mpg6<qysMI(6QMO0& -|KS<ZPtU$w>@WLEYkN+91oao?{`Luab6#5MUS$XzfIO9CT@=@u?G3{&EY>+0AAR^?W9&&d_3s>eT4}d -40BZDIe#Vp2$^PQ6vi7H(0ub1r9))_UV!mbhDdz_yH_nd4Lv$d?v>5`^f|C3!s*66hL||gTB(5SUVXA -|74X<gePP2ZT8{J58xod)%f)Uqv{h`fkrh7{pNDKLFiTwuIle$vAUwEGv;+;wBLlFAfjf95G9O29se{ -^<tb#Xlz<3faCS+itsj)IV{(wGNfe?Yl>UqHF|u7G~K{$+G}UdNLg+JYxzGi*ing;R+4Lvxc$?*``P@ -@#T<dr_O5!p;^f&n%?8FA^i%567=sb~hBiUY=i!Y8Z@-EeMjOWV4<Cv}`~BuTXS1_pk28muHpt+QJs+ -g=y&Sx|-!`eUNw{>){>mz+oXdTn_rKX}5RRlgq0M1k|PCT9w9U*!+GLlztkYdm~sd@cWu7_=0_}A}ih -C&gskd5&hg^QLSmC`-DTn0i#$kUE}q3BxmDrlO^1Luj86Fk0a(FuiRbN>zc(~7wpy>1P}^@lDHvv92> -jnk1|A?5IkvqnNo#UgO;V5kCEM^_-pYB;&*#ZCHL^A-1obN=eDEkL)59SjnLZ3)pe_P72Os$I=t`ZWZ -4PQId{|O+B8-p>`IzLV{>2Zk`W&7a=-K`4}zU0kb2KFMPjGbA-OuwLXu9W6S1TlHqF|YkH-8!YEOL@` -K2-Kw%h2l_UZ)mg`BqlTA+*4@_hiWnj3u%LcNjeqtJId+vTaQ-rek@KCG6Cs^!_Fq1g1k(Zqa5E?W%@ -L^ae=Vc00{8*DUm8~W8!by8ig_f_vdJhVyDrKwZ_<d%lru?j<B_Mz};ghLVqar_v}o_xjP(1buoySLN -^zbc#9$?_u(dZkrU)Uk_GY5>@4p4LiQ-B@d($gSw*p;!vq%S5T(q`qafeX{Goxqi5_YJ`^d)~Kw*exk -1py2yWPU?G-ojj?K8_4{WubEx}(_@}5O5sRry#*~uceR2B*@rpe$Z_FdL!q*!w;ry_)<he!WR6f=U8j -zwRM8Du3xUKf|fOy1iI%O9V*=eq0`OE)#;H2??1J0n@|L7Od-PUm3b_RHI1qx}9w3F&I3?WdTDCFJ@U -!9W$4MKh3<&ELsP()?=UIC*CY!+DBI+LP|3j>5c##TCaBKsb=efU@U)eNj3;(}W98#sVj)}g0g8laJT -8`SKFrk{D>;QU)PS~U3$wR^Dlkcans`+XJR@5mR3*BCpuu+?GD5D7dnl~%SBUK1xMz?@OXKFIqZojnc -M1#Jv<<FV!YkR!g2FIP<X>VK{nS`XI$08mQ<1QY-O00;maO7>Q8eYI9`0001>0000Z0001RX>c!Jc4c -m4Z*nhiY+-a}Z*py9X>xNfc4cyNX>V>WaCuFQK?=e!5JmSn#fL7U5DKN6ZhDp>reh7p8A(RL+gq?mm+ -!p~zr!^b#>&Dq8ZWqf(AZv2Q!R~JdbkdYiZ`TNl$FCyR%5y&3*KB?RzXs+s>KoQh6wY&&hTSD^@Bh3? -WOQ>^)nlv#(*hcIJ+-UO9KQH00008031s8R>$El7NrRQ0A(cr03!eZ0B~t=FJE?LZe(wAFK}#ObY^dI -ZDeV3b1!#kZe(wFb1rasy;^%y<3<wy-=AX6dnxRc5q_}=PT-C;CQxg@hhg`&FeMMt*w!Iyl$kN$Z1%f -f&qK20rySV0D3GP@o__rLp&9b|{AVw4=`*+T`Fw7`=os1dU?L`r*f#RUA!P#LAfN&Zj|M!KGxr=Z4GE -9F(fEo_xfU~+1dgE8=aCejO>74{Bch)JzZVRnhc{n3ExUQvYJNPw{4J*`EF5~#^Nx?jfU@z4$N2GwCa -5t;^E7e@K8nwwzE2#bu7w|*NJJC+K7Q~?E|+tB%sDca7v^LawJ7Ni`L}=3J-I|QK+hw>2oe-=LE!?2A -#$<6XyEza2ub?uNQkhpx5p=;T+teP4x^k7gyqojo=XOJ;tLD&@a13J@!Z45hhIprJK?|7D&^`y{oQ}N -?VGb&<)B`vRw~t6rCL@O@Vk7}w=K2C1%4zPO*lbxfCM;G=?KaMcudf*p|QmUTcrQ2IpZutdDJh(oOmK -elx5@9v@!P+VI2INf!9#RoQ&eJjQ?g%Lm6{Yz)iL_4Q0$p0xoe)UOX;%2L2TNQQwMjp)UR%G8z&lrs^ -9+S4M@|5)(FvEO6ovifH!;@WM2tlCYAW1|yJYK||vRcmTDOO_A`3D}e^#RWeJ6SVJpjL;d~_x82rt=l -bgOyxsbt*E<fw6A;nswW)*sUhkiAr1Z6nc)yPdkjBWkvxq3mBJo<2ua+6fTWX;LIVjK}$~U{`CvE$<( ->Xc5InE=<Ug@4FwutxuXhYP#Y97x>V^JX%BalS7C9kXi;v_E$Ln7>FFR%yHcL^(~6^k=%w2Sp>HmFSk -*A6igydb%Yxj1;~hmyXe)@;c5mC%nRWZ+~!VShr@ZS*I)qyYi7<e$Z0gDgDe@c8aNz89HpTsR}1duX! -K<48vB6oZG-wDMz!4(GYxC%MQ1pH|G$CKohQF}Io`DXciJamp`|!pbi=aJ3$WWYK{1GAT(5>nKU4j%< ->Yq%E$((Eq3xC>TI^HG2`EccA|7xPdx1XO+s&F{=g;4P{$_Ml!V>MzA1uoV5l|bGVZ?SCtFyN&b!HVp -WykBg~*qJWN%M;JQdaCN~?sUWd^k*rQW;dFCe5G-Ga=1Z`ejTwGno8M<w<t*D!jxC3vP(G{9_ZOP=aA -7YOBsj8eZJE?ApYHh?`r|2wdk*YkQYYGx8bxl#NcdDGXw(UlWX^n4DVV3le0xo*?06qXb$p<Y#qeb2I -0=PfJT=6X$S+A!Sf*U5k`~9W%YzOLe*U60Oxvp@SSGwg_LR}+hb5vFa<5gL|#C3mv8Q9ik3dmfTVw=H -biuP}>4T{L8SqlSD{uLEvAC&DinSN?`>i64p$RYb6<vg(@s!J@1D5BoFv`eq<nR&Tles#-~pYPB%wGG -snj7cDP*4`P>ud8b&mF8;FNyOS;29S)&(rI0HuP%?<GELUo^&I#VyV>nB^nb-J!}=P#POd&*wy%y)x| -<9OJx6XTWVI_I-`=c_;e3r%7hgK(&70fn)<(0QJeSa{Mrq>hP5PwxUT4s!^OM%qCTqqM?l~EaQMB9Ja -v|AXXUfHG_q@5u6gCNjH{N>oF>G)7GJZqG;i@5gtHC8zf-_AqP^0DQ;H#BIdgI8RlP*oKX3K3hn*>kL -!5J?&+;e?fz067vr#%gZ{YFGI6RQ0=VDuObWKBgNz>}MDdjC-?#3#PoGniY`8`!gjZ0LcJ0*Uo?AAxp -ege2ZY8}k-x5{)4vNy&hfzs|yv-nVF=d~{iwr<ogvBx$=Xk<m5KSY$~@3pmt`^a|fB@WV0_Q#ym8X(P -vc2!;&ux4~lobsnh&k&e;VnY3?-EW{p+5ufBp)?$pZ0*EN4BLV<4u~SMVHCW>LRSI!{!!ihfVo8Y^RZ -GQk8CJ94CWTwGsk0Qmlp&n(B@_iLpa&C;Gqq7Dhc+B6wJ^pw_-VE{I*j+n;wfPPt*P8!RvFBCclksy% -HPWh5YI15Mzyut%zFFVs$<5EZPiIM<+s!)nisZLN4M0s)I~S??KROI@hvq`ZF<FQZ=}m4S<@aE8A3L| -fWN6dsK4_)LU!9of~C#B89`BjAB+a@Ch>rsM<j?d3cTMZ@TMft1L49#=R0GSi*n~)dJOCchAD9>i{S> -8l;H$390;OLR1}dznQZ)!!Tg!%HzbwxzOU2X{!t}9w^G{k5%K-V`YcUEj|f?sNRy7oG(amk7JG=CI#$ -!qN(?}sFfL!q7O4`ckMdt@Kh;lK)r0bGrCK}Pt?$3z-#w_jukY3ln)QR~eyjferw`v2g(MRe5H&?{sx -2Wk$)xC18Z09+I9Eg(p&OdyVqm^&r<5yBA<xV?68Z<^DC9-03OYk3(ZHXgfDjiZN{OoRG@QzFP=MWtI -FEpRm@}mox~~Wcc!#<~PNiIP0~E}$<(xW~RGg1PpU6s2T&0&*NgsZK7Jz@9NRMO+7VA6K6-;~|$+Td; -o_%b6v75Ko*R9JNTULb<V)-r|h-b`5?;<+T>=`9`%?ad7AU^5sq+aVK^eH2(*OiV(r^@kA(DZB`&D14 -i&lLF2gs`c0=1T!oD=h{s)$1XJ3$dgX^XZd^ZGAw!&2Xx=F*RG<soz1_k;lGjl0-Xm*|B38qFac7d1% -V$4l2~kMRfwAr)pJR%o%XB;!fNQcaRrwL9iQ1lt;<DvA5?F%!0X-WOZn~_pC#(rvSF6oVKSRtc827j< -$9{bP%_uDplWaE=RTfjRmOs^SYX|$e*ebwSzUKp;BK{5-PQ|MXX-lP$`mb`ffEsJ${%BK$yXq*$$foo -=kKbo(<q_u2QbnwPrHNkVxun2n&F|<}0bX0#A}H`a`*V0AF;+GxV~e;3w+2vT1@wA?2R%o`?qfLIFyw -X(>e2s#f<5aztlx2j+&)1?iho(qSc}Z<R~ZIAi8JB*8so*wz0uF_L9Sz1r$JJV2g6BN&!P-f;8)*Uku -DCaowQIG7eFa|=!p9ii&}zABiG+})H*G!lbJ`?^{#*JIDa<7#&Qn$?WS;DLZho5A9)R9G5(3F>|>0H> -w)tCfw_5>hhKTctX(^6}dY)`>MYkIhCv%wsB}+<1Gm=XMKJ6^#BL=I##a;eAO~#rsC2Hw0!m+!i!mS$ -Y*A%v&>#R4<xYaau1|^lSKwLqdVh6`4w#O{=9gBD9RuIr$o{XdDDTr5{5G<9}5ujPVQi{ve0ye7~^Vn -E-g(24~u`tKI3wV)`S@C-=Gk15ir?1QY-O00;maO7>QU#8p4@1ONc13jhEh0001RX>c!Jc4cm4Z*nhi -d1q~9Zgg`mUtei%X>?y-E^v9hR!wi)Mi9O0S4^FQq=Kds7wtiS4~gs42HYfw)uKRAh%0g=ZAC7b{jkg -)`rG?<m!v-8q?e)s1W?-DH*aR%yye;1*@*D@(5@?1)`TB_cc0PG5=ldXOslMTqK#Z{N_?$UYidNk6>F -xQme#T&sc^_{YL!NWI~&igS+SP+XBez$RqMDcN^*uhgeXheN>v!DS7hpy-3iSB&$xU;!uUh30-CX0nS -^$7i!cDH?FNvdX-b(3D{E!QZiFSpT#&7)(QK_;wGpg#I%mr3f>XNfDS@u$S)~6hsPAOKq=iD3V3XHXR -Vym-+aYmmRs~f;Z(ZX_RU%f)xTdMK<)VWz4d)UG3STA9%WrCg45SLSLY7EFs$8=$zObL1D5Y&_*@D7K -NF-I&PT3wW;)miX-ktF2i69XYMS;{kYS|7sDOW8~C*)H*+c?{wNPK||7?v&F&VRm7=w8hEw}d{<-zN0 -%>rYAOjjRwVfYA^ul=;KmeNPQop33WY4|invlVg>$=?KW63TMQ!WZz8@%8KphrBsZP)MYpvmP)zQLig -O$G!09D*z7yTkI>#5Eu>nxeEUso-h9K94HB+|@oEE>$~W1<6OhVSq!U=|q}@=Kp-%0h`+t!C)m6cdS= -LD!1QySu&bpG&#@fcrE-uypb;}gVT{PW^{e#f?Mn3XIgh>CA%?n<yuX^Zn#Eb!FdEK<yCpx3+{*f+Uz -Wm|*^5x}sULsKaepoGwDnZSeUjH(`egE+xjW8GqR)%Nv=HbV<et&m;^X}m$sHhWRIy!?dtaM$GtkLM8 -vInc7$-DOny=g6*yZ58fV)4k@K*);)UD5b5ef53%YK*^&I**cw3y_o5F1Jo|Vfo39{ZSM*to}YO`DvW -cIG*rNLsQ3pj7Fn^SA;DSKcb0$Vm*yjKI`1;o}Vc5%UNupuS6C$W;Cgsv9yH5D7%k;h1Noe({R`e35M -V_EC&;bHUuqTENs0+tx~#nT8D8+fb1<sVKQ>?k5Z12(ly&fJTaMO=@CDx+d&q6tj`X4{*e(s<=j}Bw+ --KDUF-eX7j(-`OJm`p@C>+{cf#I}DlCXCr^EKp!A3SI`lO0lr@ijd5WVm0M_%(&sLgOvt}q*YohD&7k -_Vw_96V#(GB1TO{n{R5x~Ch`6%u|v<TCNyo&ZI!ou@+k_H>-Oppd~4&go~YYU@+?B*xRxQMgVtQBadu --=zC#JzE&wN|t=}u2wvq`MNeOTnDpN$Y4lUP%5wBL&f>h$r9JxQA6JbC|E_r&LFdAwKLu8afpsn!*iA -exCylRcKC0v&;I^g;Y>#vp`gIE^j;U-ksfhJ!0n}vyZn=L8@P0jA-sq(&HVlB0V>AjTuhU|3$y7;zY$ -)y+~46)m$XT|N_W14GTu4}9tF&uGn-%wU(q|H<XhG8KM@CuvRi-?U>HyVJvnI97&k^;AOLJ3G%F<C84 -zRy&+2_?GChJGK++Q#9K@WSkO_l%u<pkb<#l|3&80a>;){`vqWlj-y_Z-w*n_6NFxLl#es;DG)(5D68 -}F_L&rbLO!T)Z`hs)ydg80g`A1QV2{al(b2~}<4`^0&PSBdiY9e3qa?qAtb|2B)(Ea43%SbyfL7AGvm -^aG4Lg7;^RLUuCi>U4UsJx6>x`Ug-;0|XQR000O897^_9d0@(k>Hq)$VF3UDAOHXWaA|NaUv_0~WN&g -WaCv8KWo~qHFJE76VQFq(UoLQYT~E7i!!Qio^%aDt7-$5?1v+?Z(f|$87wUGF9h<QQSPw{S5H0=o%66 -I|oXF$dk(VS1gIG3n3N?8ygsP<$VnTm!i%sxrWI$xQ0M<xNa5N68$_DC<hNZf?RTZBVMPqDmvg@gU&3 -_AdmOU)<EWd|C0O}DwE;=Br)g5?5c>Ml)e*Y}_Y%|CPwZ{V1<<q=>*=@FO<#u|ZMXKfCIZI+HCY3dgz -z5Hc&cvsr<>G|8HI857HmV(@M!1m2?2N@=#dI%fIi4jgMtm_&wd+o4%JAHvCD>y)nA){FP3YW@r5o8Q -Wq(jh0|XQR000O897^_9%;Fi!$rk_sg<Jpt9{>OVaA|NaUv_0~WN&gWaCv8KWo~qHFJo<FY-w&~E^v9 -(Jll5L#&+-eiV3~404gA2D~%u2Fj<Zw$3B%M)smB(rD#zgFeG7t0D}P}@tn3_(?98tb?-eF3~nT4E2p -P?kVwpJ-!C(JFc=K>7<^Xi`I4uF@WW-4#3`qT|JC^H(bJ=BxeU^XVK)}11<z+e$bH#(7-p+=9?uuWA# -_w<*}?PYFGmN@558g3H7gdJovY<o!Gop81n2D4hs!r-?=O5gO%jJZ75tF>c=3~LKY4p}e0p)rW?9Z6U -IcL>{JjByzZWl8SzfSA=x<_OeO;7AoakRcK3@g7;Cr(?Tf*88#eE*Em}-r91TgK%##OxXCwDxJvfS6i -(H$qykc&7=Clik?0K){a>>uYN40`ZU5(sgc6|b{0jXZX?Dqy1HJkN5EMOi3{JWl761rLZ19{ZgLGB3F -hlZb~|1kdbW6I^xzTv*0wka$dgoA4BxVJ<zzhcrww0S_(#@3&{a0_H28Z-6@C4}hkId(MkVkR%iN)T7 -_@eKK87(qL)8qKA6XBnu+djo_Tc3Ae`rH|d$2U>2vkcZg)FHE)H~7b_mdfuS_wd4eq)M#2KipeS&35` -aMHu_yTBcsb<}NX3c7h@QRH19qCUNxZ5>62bhgh-lHRYHiTYYG~81Y9t!&hP;-Vigxn%<IpwJ9DMt-I -TJiGlX>RpWnS{5EXnen7K)QjqRPh_efqT(cTubp-kM52l|-iRnlF2Mdl8?p37L;cMoKH(3_9gvct|XR -hk}jS-~W?-#WR*>V3eqb?0}z~7iFGOUwVetjQW5jZFRQi@X;`=++o#<pD;^{I4!w(m`%XOAsA}VDv1l -%@tmRQAy<T6az*T3pHnuD<$t|wtw)is>qF$QTfX+--yKMi87<czJ05#6>>fgW;eY2!vX`C_{&)7`4<T -O_?3W-ZIa$&U=z!o?1k*K4g;H0aApu|0Hwb{c*6ULrn~62KP?G4*Y`M@<J7!ncwrI?{MMHHr(lOK0(d --Y?IERjDse?aL20;ns%$A13HaFCwKDvZ7a$PmNA?{Z+-Su!-4Q>;zH5D%Hfm*0h4Ky|V!0Q#@^^%o)z -X%GCApnYiHE{#1u>%{AnL}pZX=p@(__myrOY_xw(vt4r4Xnwsl){oP1*1`i1NJ4(<oAt|p@NHDCKK@5 -lSz#xHju_Tb^_XEv3G{mjC)dei7^|1we0KekkTLm^OHbSLi3y+D0O#V6<`adWx-YSRO!EEB^5jX1L+( -FU0)y=Qp(VEjv-tGvl8(<Z!P$uE}uy(3X)H?z$Rgo3lE!sP%I%12dxGbV?#qF>**}3%m#kQAe2cW)f4 -}Mvw|=O{!Y*m)PuC9w<yXLOb70OIsV5iPKkYD_!U_MGi}QZ63M}gV9@WlI@%D-VPCOoF6=VICqst;l# -WwpGUB3b0>Ck>A?XWn!fxG1#fT3!9(D+e>+FMA{hs0zVC|Q}83IpZMZ4_^*uxwXglu5YZcIXjvG`GiN -KKxAq{HZT;E#$h+{`^xl^}@&!6o65i!hN#mY`x2u&s-w{hX`~|L0_B(?<32Q#zRq%(OX)AR^8+#wm~9 -jJqCd5BJ#s2uZUOr#d@H)X_Ti$U`SFC{Eo@iwg>EcQZU)l#rouHz8W#@;`tOO}jh^#N?yMQa9&+KptA -~Xc8BEsiQCz=wlBRhKMpLYVo=<;fQo&j>D$5t3jGpEt722$79QQ$&2-hi|zIqC%@8jVaWOSmf|`};hj -UZRJ(^+8~RjmwEG#rpr83(>sBEtsdXhOBpiedf!#BttBmX?knc}0mPAS&5p5-<Wl6UXv}PMS`T}gw3; -u2)WQAiFF{OF?1WG=+`64=QprOHcD@QtLAc5;3fHY}OfdA(jtv?fe30nhuv`>CiE?2JX<}nqWW@RyyH -g6fk=_F25p1YKuLF5Z*Z7Qmmlz#e{Oj%xmy82e0)e&9SC-|l5QyjBxtM)&^NPEl;hxHBKpLv$g*^fB{ -9*M`^ftWA;=f6vcG8*)AjuyekD3F0A?qpCjpF!^EfaSL~S^FSGYQ$oarO8_5s4o1on60{F<R7GK_l{) -5z4h4L5T)b}XyQuR`6OQM5V5~yUyL!iR}S$RTOcN!-Q1|%qxf%}jZSWE>f|~BSZJx!EVXiCXq*U+o(B -Fl0wRQ@2atwmn6bO|{)C#^52DDuwcNLU9>pRI^2l{gEH~R~M3HmsfOe+)G{Ur&1a&1&7TFJ~IiE=h(s -E<3Ma&@rA|Ul8QPkZl2Sd}*FV3}vM3Q9pU=*Zd1=Uo(+p|59XDq3wO-iMOiP|T-!fmQt?kYJLb0S~V? -wI21b&WJ2N7#&DW0x8r)>xW<_?Z-Z-Xv7g-mcS#)F9cFz)gVLGG=GK&|}liPggJ|$<U*}J(~5VsabDY -TcQoEciuRkOX>sju-bn@s!9Ot^(pXH>~}ZI-O~Z39`x*!X>!s6Y;?xdj@_PFHJYfMz{ZxI#P1B#yQ}N -wJm<A}P*zqruu_e4Ij+L8wKFWE;yc`#fyHTf&!+H}O<W6$E1IUYkJ}bVdyIDC1d7H}ACXA}!EdYI2x> -Lfhe*M7s#buz)oR+*rWLsBO_N#8+h*IODW^?MIjsmlf~ljtzB4t&|I?u@;Bq85v$`X*C#{aw8X*F8(6 -RK@^Xo^d{!tU5BRk^5{ST!vaq3UY*$mdoA>^{$YD)q&$kySc3sZR(yT{enmOR#uYyYvtxKPBnAf?l`= -z^XFwP%4Qn(W#chs<gtW=)Gq%}-{o4F3`)Jq&z(dwTxi^7Y%3<EINNTFkaJUb%c!dLm2R@huA}6<vq0 -E)m0H`}@{>n<axm7z+S*ZEV5g4I9lCVlSHVLqPgfo&xbMSZv~>+>YxPDB>!J5X!<lzT>IKMu8R#6)My -<E$9}T-PluSjd38aYYyaf!w2c)RIdNJ;e$pGhZ0a0mZHd(%;mp9_cTa`OjRae-cTjdQZI1CM2@IR3}g ->jd75R3TJOQEBzVHZLQYDLv|=MAbSEMrW;ZAxKUCdnaYCX=YMLrSKGS%p`iLY81ITNEbV*Ra<gCb838 -Z!e3-6<vCT+rrHs$@*nzH4NWjob`G(fokjc2ocQ(JZP*t24D5fe|D{t$E5P9r;q<2o9*{zW8pFBc%cV -UU6?#Vu((eEJn!Uv@7J+1nW%L{$un#fF)V4u6-Hd$nexk(O;>Pl{Aes5S#6yjUPu1xAA*82H`^Z9;ZY -(l7#9*^i|b%C3qUw@&BIBb?2j9#f}3-RI+5!7>EzwWT!quJ#l^Y9~TQh#)%Ktt)<vh3!YEQ%Owl&^k| -k6l!j*%BzOx@Xx|j*)0r@Fmx(GO0!5xDSoL*q;UcrKH9X2F6XAeV<VwVJ-Lul1XBoS?iV~&Ya`r@>a% -7skDM+E-Ni*(zCTW9sWH3;?*7o=J_d!&z%sZv5^}VB>Jaha=c-M8MI&r%hM0<}$Mg?T?)UwgJYbiQE{ -Yk5>24ft$*s<RO~Bf$2g35eS|VfD3cC1bXm86z8N26TGNu2azLlx`p|$-$#Sx#PHnpTfGC;!mRCd9L> -Ac%cb;8+#*UAyLg0~6G?Ms=Y!Tn^@`)LLOKP|Dc@UTqPpK6-u5VP8w0xu2XSb&BUjPg5N9M8g}>2Sfo -h;l_|c;M%;R?}KRnK{x~Robh|VT0s8Skv*+6dvSjw!}^%PD758e;=d;NWQHRq$!ZV15c7Wd4A5Os2&N -=u{Rl#xJoCKrRYgaaY_j5n0iWD#sO&!jzE-`Po&@VT3{u@2CzCuo{?l#$_{t|vB4hT6Pga@|7-*B7=_ -wRk+v$3k}fPB$26jHOq@r+O@l3Pag^+UVBM0FPb;yE8mHE?EkIa-vmhoinSi)nE%3Rn4tLJ85Y2L{Fw -idX1NoNe)rP$|wH*=ZLqA>Rx4%F8tOWNlcAy!asNBosGxRts3(L1l<<tqgy?uefGd}J}vSwAO@t=`sH -J0rpw`TO`Cs`e<RR~|;6iGIZLu64f%>Y9>RJXFt-EuRz-SD(|*%Ku{n)`ia@t>an;pdY*@pkZ*B#Qq( -lb|hoWxJyGf0hJ+n2|+kog(e5#hnDGg|xK5KPwe_kwd64x*E&GNFm|ePo1a8b~4(AkxP6+x>J|VewHD -7h0oKwIL}gfesXkna`yi6`29P_bDW_(s4Makf|?|w^SOh6nZ`x)c+O^Z|NWFr@jAt{&cU}Y$uc&fk^t -ep?e=x;+cKM1?6OJC*|ttq2|`tFq9Ru9sUt4qN(_w)OzBMws#wDxz;T3ek*rM+q}7k4p*r%aakZhEax -t|8!t?`$&oaz1OH!>*cF$bg@Dl|_t`K{nmucK<AeUxE%T?&S!3wI-7}quTqFTc`r*B=pb8F>0a&idh? -qbLpNE&e*=sqB)b}Kz3$|@5go+i9OK!}RaPvV>_2xib0N#VYa({Bz?w!-xszT?IQ^!t6U2B$8L0!dV0 -;s{IPKrkhI!F(AU;sHVk(L@zJKqiyInnjsHKm}|j1cGG%SpyfTQ<w~`mfHy2ialR{(;;l#R}x*-!81f -3*9mPE(KH!Qi=<liP8EUL7s50Sew@Zd93(L?9W0!FJgFWxE#h06tn;W^hz-(Jq2IBHj~7xWl5lQIuMJ -_sECt3CV?@_uRK23U2UtPH1uw?016bN)IN=!0n32C<s}u%vy_4XQ|HkTpE<RUj(+wA4u;OtlKxS|B&i -S)yGta|38j~x?hV%_gm18a9aDiB&H2|+c6Ge3IR!uVHur6nLnWh??aFGd)<tXXA4CYGn<*i^FlCD#Ay -ImSutv}$UUAuLNmD2}=Y7B%BMUaLjl&RnIw2XDaXLy2YPjvOXst%HOog3{huC3uRb8X)(b#Z1-PT<LY -hFiYx6P%El$Hf=6L1=BuR=MK+B1^d1dIf0)rBa6%Fk8QRn5)bxS63%hiY!X_EagM9ku+7T)1q6#>!Zr -^uIj_Kx;&GY%%^MlUtx!mlFigEk;~_Y<PIFX63#|5XSfkZkV&A-i;jH-T%l(hhe|rz0hZn~h?`{+`ZI -;Ww|&F<_IMfqZP?$D7sRXm9a|Xnr{byXy@jV1jEg{k0$A4AnI)xIbVV=t(d?y8Zf9Iqm9r@m`fq$a&4 -N67i*FIg%T=-2|8!3EnNqm7M^!NlFRWEzl73NuUwf=Dr;7(<vnLZ5LY<k1k~znHIlRIKEn&{Fier4>v -1RZ;$L14o=`kAA@r##WG2^IMki{O>f+2d|U3$}*naKWQ^_l}J6)+))i2nu%qJt}!sbC|kJi}sviR(ME -4%?4)Q^eni4!fu0Eov!J>H8j35Q-&*ltRFlJ4L^NdXL3B=m1h<y`ciuhfrjdL4xAfx<+89fpmj6T0_9 -h+NV`G!+jnXa*tHq7b!CAWre4{dVdC$Nyz;vNvBu&yhP;Bsl~<Bz)O<^;CJxUQAD^ZN4*=38dpWfb@` -M&1M;psAm2UK<r}zGpa7c8^Q>IC4w1_ARlZVIR`5iogtCc7FUz7tJ)3~sfQH9+T+LG-S6itHU>w{CWl -LTJcR@aOPL6*&esArJ5*eHeiYV6BmbBcd^BHshz2v#9y%1_=^~4`CJlIE5T2+=ivQ7heH=65;mK6p>A -coe=SQdkZ6~YmDU;r&TnfIL?al+cYAS9ML0>iEeCYdd~ey*RY)fc3~cdV)Ru>J*A4w`_l^M#ES`tSt# -g|U-zAPe+^nEycLqj1rX*ICyE`fHmVuiu_PZhCd7igm6nwB+@^7D}%ojP~R<GI9yADY9Fhs+hl@WfoH -McAhQ~0?py7$|jgm97^$VO4xGr`;b!Xj^M0@;Mx0kuP!gQ$XpcyZ<9L<2_=E5#;QI|mylVeL+)4FT*f -eu&jK(s!cbKwpw_fAd#2cQwPrG-@DLAz{qz>H<x~nBNDxo43V(NEp4r4aJHLE;b~>g)+AGig<w4}NgY -f)}oA8?J3U;X(wSq3%&X%@(Bsdr{+Qqk!#6oin1aJ9zBrA+pL7WTU?sNPQELRCXWH+NTHl2^j(0i+Ou ->b(WEK6>7r^0z36?Q~9z+=aGVlt}@sE?$u6<E_`VYALk(s(ixnu7P3FsTx2G$vpsge03hyX1d>;fAF# -S?D3nIUC^3CCs$-6(3K%rwIvF1(7@-Jc3|ZjbI-xRgFfAI*^d&bSzW3TPfV2fj?RLfN5F;;i7JJnhvi -I5>p=H;Q0WC56%z$P|#U20ztt*9}KclgD^`1x`na9-<}z_Oq~@K>3c5)?{@Pr=XALyQ18XU6gv+>J`K -WK+<PfgSza8em=C4KQ^~m{4<Kq_^k!wEUa>VT=W}#1bpBn=fh@S+A^e>H7rO#3^Hq%0aGwa21o0^1B? -qwaty#xsuOTrGfE_v3+NJD1fWQ#<3Njmbo%kZ#uzot1-W8Zfb%A(UgxzQPt-PZ{>5?a(;%`+?YRyOL2 -MGuQHWI5q?oWVvfqyGQR1dj#KrcXpa5qx(qVvO^HeD&C6eUm_G!j)93joL=+^C%Orb{ugifWGPsX8(7 -N8%^hoc#y0tHdF)Pq67`H^w~d#+X-j<!xuVtvc_<BQNdW0){1%<YX*#>~mMz;3@N*V;u#s14$JDvqFG -m?K6mEK}HGtnq#~H6#cIyG*xNl1CZ^<wf2~vw3f=Y@`n}eIR!0nh_m2VDC<KP9I+#sn08{&ValH-s{U -7|%`U|0HK7wKcz|{o2>!L2l<8$CgmEPT8uY_=Yg+7PSmXN#fn*hntW2ol<PJlR5W*tVNenV%SW?52mH -|!4OVRL-h&PDol!pNhiVIobq2GiDyv$2_Kg)81;5efZT@Un>Se(h21LXKG7iXt_Rdj1D43Lvzl^FL>H -kN)Y)35>;LMTh#6#JT4P=|~vQ>*qECs@cMq;cJ7cq_;*)b1pW1Ron^MAis%x^?B`=;BR#DNM85OYf2# -)rR$I=7sGoFE0Oja*RrET`TJ}`gAh@iAa0M7!RN!lEdkCpA}WK(j>`_8S;@c4O3O>E^iEUj*mFTIndk -hB2_PrCzS)<x6%Fe&8y26f+rZ?>DLX~Z_ZQiZo?WF^=_@vsEHh=*F+HDw}wR0hN9{Poy`nMwN(umqj= -Jq#^wIpX9Ky~U`PpCwgg2&r7;6IswvI)I8vN8GO***SMS=Pk<1-YTjd4X47E>%jAUn~0jinE5<HMmFI -<ugY}f+IY}rp4mpO3}-0BTtKx<*`fhc5TZmqZZ!&=}?%d6DWoC`)C8(?}mK%pUMtAunnk{s>kn@-|ey -!!^Wtt@sWi=AaD`l!TPx~_Iuw>#KxnqV6tKd4yjI+DN4x%}(-u`}$}W)r~SLnE!(^dlBYeTSHRj~Nf% -@nzrP-|uUF@}5Fi*}!5MP(k+r5oQ4VF<LZ0t`DU83?7H>FOP{y5&RXzp?H#`E`L96wFO=N9^ssiTNlv -B2c4@~rn_s+z*fyy?|*KsVPb=kQI8IDWB50^V6K!?J9r?&Ef$;?L-I%_m!NZ<%B9K6QYcTf^Lh2+P+y -X&Z3(N5@!q#XP)D`t`(uuKHRtiFdDHe8sLYb1*wFqsW?B?2gMN98%ptgiKgzhE5Ig`7=lXEYf}!@Bwv -G*EQ>)#0r-8clwy8oy6`JfjY@faSc1t;l>inuR1!7r9k!YljglzZkKfY>Hzab;xV0l!oM9h~*aaBU5q -TpDFQa--L?7#Tr6~9{)#Y!B0{q-E2c{%kV^Z#1E<+S=j%Zcwl9kItyd~=OYV4tO{aMX~eYLM@DF%9Z1 -vlGKVcOO@PpA+orT6ZCrVy@n)ay5E!-FjoFIu6G6A^U#JzG)SIJm9K$TO;9j7#o=50DUSUU)W-g!Zp7 -dGl$+^=FYwpLwtvcgyG;?UwQvMb?}f*gM_MVX4yhI&4&GbCTsKCQcG{~+dLk?+}elMpc`|T-eL-c*}o -kqN$K|3N((z?5;B&&YfISncP#!dP)h>@6aWAK2ml;P_EsO?d4G@s005x|0018V003}la4%nWWo~3|ax -ZXsXKiI}baO9bZ*FsMY-KKRd8JfsZ__Xk{+?fPvNR=KyOOqJ(lYG>j3JN^AO@dG)w;>GHFfMNaac11z -a76MX)=n2gumoop6Bj-cMc)M1ATVoIz^%KVJt;1Ia=edN5`|)*D_0~f>?5yVFDEaWTAG28ahlA%UzkV -^+rW-Q;RST!;7<VIG(_=1hql<SY-u;G#x;W2rs^Te)Hke-Oz>MEJl%I1TXJiIsd!2H@ENaZeb-eNKjG -6^PxxdEj-L)xCZidKUz+;8p{N8ZTRuiiBm#m#!qTB!yJ{h8D<~I<nrqL@+u6|nmr{;$&)rD9Hk9^MVa -XE!|}nHD=HG*l8%3J@E0P%j5C29!1)2N)Xr_k`TXFN-;a<lOx+31wsSigb9WPl##=G~ecQx*))}HOLW -!Kqdm}A*fn;F&-8v+tYdsoj5OGO`Bh!-1JZ^^BNn*#_q;hJN&?!w?r?!$;)MF*o-c}{fP}g(6VM_PF^ -Y*%oN$A;~7yt(*;DPOeRx`A<Rdp}2xm-7sRufNHO5g<cEjRzu9bAN3+xIML5B+Nx>CPj!$p@NUX< -2k7jRXV5FK3+O5es){mHMJAxTp%vT$*#ibvm~XKh=y$VM$EXctrVBM7{W%(xikz+NgAS-tStlZ?{teZ -GUo4Dov4DG~Hb7lHIzaMFe{z{3m<ViHD9oeCYo_UN?g$f#J5vKVwd$#rO@kh}U5DmYZl29!P~WP37sE -UqCe|%TeHDHAf-AGMGpn<eEqWS_^pLKdd^U=#;`jZiiSLL*y4#^h0@q64Ch}*!24(nAg&9R>qkl+p`e -YK_k^jswe=0}Q)~6F4;~Pjt?7HnT{gvk1RrDLC-Cy4yev?cDj?nXd15ir?1QY-O00;maO7>Qr7x{Al0 -{{S$2LJ#b0001RX>c!Jc4cm4Z*nhid1q~9Zgg`mW@&76WpXZXd6iX5Yui8&zWY}UF2Qn8L`b0rfuU(0 -G|;A{PR^UPG_n^~TC=-~YfAguJNu9<Imsb=@oILS-+VKkPNx%~v)!+2Y^=#DAuVbz`!_xlFZ`~`RwCF -9w;<}RL~lml2qjj$l@@}FEa>Nj+U~VjZ)^@%-4!m*&p(}AoL_u|)!y6wjPb!DuTwCHaQXP~^~bMe7Ti -ctU}G?cFU#xj{_XDS=6-ntmC_X2av@DNnNmHI31tF&yOnzuaxsaq+B=TlDM<W{dU3BBoaa8mG$Qe6Ty -?@gjdr6-uqwC$-hd!mzM}F~)p??KZ^j{n$l$ID&VhWa#WOmynQ>|ExGvFqq>{Z=aFT)|f!+xp8lx067 -D)C6o?Mzw*(gm{BJ+tQL7k;BgIJF{dx5fqN~=2hWU;@A&#<=$xe$&~3q;e^cW@STVewX2uc*<sx{0FL -3FCPZ16N0IUt^&(w-nn`s!+`{YT^Nhs%;7@6v5ZH9>j$5e9~w1dFZ*9x{y-sP#4@_Vo+AG+g+vv_trT -!1Ee|ttle)hg=a2XbSMOivEBjMp?2nDCi78s5e}!8R2gFpuaOaC$!#p|HV|N*!k<3IjIr8J8Dp~?)<k -V<3Al9hFi(g2r7FC#i{bBs*A7Sb9K?U;)R{tZV<5yoZpmnlVcD*NvLB0ZC8*lS)~8_?o+3H>rYa~1K} -#dE>p68`@`1`sG{Q0#`*nKyvPJGCi(+D7yd7Lbg1yr4ffLQ$klibL*X=GWZ?smfaXluZ-X!7Yh_;t2a -?J}H;UFwZx5~y?45|<EFlQaFyA48DKlO5-!NUtc4`7Bp(^^$?D+(@YCk5{YOl%QdX*CV{R7JBcsDZ6h -^GitB@k;3vTYy_Q?`n>ypive!+<3AE#RK(@CM|T~fu<s0KReL@!kwU<+gezuwki9BW^nRi0EfpjgE3z -*WBr)Td!x|8?9DpfNum$*cPVKr<xmRa{tp&Z`<d&A`*>~p`V6~rlA~=jB=&srA5cpJ1QY-O00;maO7> -Q_TsJU-1^@t35C8xn0001RX>c!Jc4cm4Z*nhid1q~9Zgg`mW^ZzBVRUq5axQRrl~-GD+cp$__pczl2i -b)!6df=O#xfwy8ni&y4oiw*C<=>~D2oe4Y9y7^d+2Z9IfoP_CGODq!LTWw+jqWm(Q>(5F!*$*V=J_Gd -2MXVy%&~_zdZRY==>#jf~BjhRNT2dJld6}J6U;b{El4>KiP}t&wtpyc>dyhb~rKL2=-ev$h_d~hB+bF -<%iqX?|;9^gBm4Ep`F;Vmp8wJ=WpL!y?S@^3hlB=crF##TtWZ~*>=WyR+>tbZn3DXX;~+`e19)=Wo(| -J>%CMg-aZPyKNzF-rt|+H;`~VoHx;6j{o%CNycLVZe$SQK@7V?Wm|YK$WS<s`MI~ysSH|4+T@YH)_j* -SW%9=?hwewt;@d?D~ZG4O$D|~PDQ=?JOVseL0z$T@FB|n0$Wz6!G(f7gv=$v_TCs4`){O||T@Y%-<CS -k{1V|rDwhTjVYM^+ws4`9IkMyL+5qD1MXK4MDSoZU9U3DUu>U{1DDaZB1E<E61yxX$Pb1$N}<uK1FGR -^qd;`CI%hf{tV`I+o{*_ui!Q-HuTTB3e6bw)b51V)xbSTuETA`yUduR055BRpw9AvyyApA?`pWX*A&L -*qt~%7+V1n$38NBzyWe@`_co;NW-O4V=aMfS&Gi%Rj9E8cd{JRMvFy3$u5e-6Tm$X0B!URc!VAuAZM6 -igd0kRvm3hN`U7E~q*uUG-YclrW&E{V=j@&FsH(z(75Onohem_Kwo-GIsFFv|>Rzd-V?rrMQIE|6Tr| -D!dJi5g@&1xkrX-9uOy(j_(j2gAJ0-k8rqx?O4ys;*PlEtbPCEE2oX$M)bd=WMcwGZQsbe_PiYd%v)H -PR5tcM7^^fPSV)F~{eR|c5_crhZn2*0==$^-x>#Jow;C8yMpz~J=6be1K%LPPt4RLxBvCG?{WYkTJ@p -PCK#i25=92MH89XFb$AS^uCV_Q$dCK?ia2a6)|Jf2n7A4vEUq6X`Mh<r1m%&S(H(&^X8rUOZR{5bLBQ -@;)XV3u?n28d)~1H7*=%mAr!+hrb|Om`<jRPx7wssP~Srq5T9L=sknodkEah3YygvT5P%mY3wL8J@Ch -OJ9Z5@CQykkGtO=hm!@yI-a@~u_(6q-!3C1JAg7YDOQs~mW@_Yy1!DJF{@n`(9%(OYi3}v_#6pdkV_{ -khTIPjAGm4YqO(@CUQ7f%`UG9n;$3(iFM#Z`aUdGmkW9rixH){=Ykdlt1b@VQrr5;Gggw%Q9-JoT%2w -)?$rs_+PxP#3pX(fIEkI3w#YzUn}A8!qW#b<3X1TlIt3j^qR8|zZKi95js_mrs(lz=v=mIghc&mzwwN -$|W6!jZlgWGPst`M#H0`u%=|9csg#J&V11GR24Ki=Rs@6W=fzb}l+RnF!4DJBW_kgY=f$Q*?=|agJ;z -9j-z`pI`!+NOvgH4IM;mYiR*!NJ%MRJi!A1<v|Yvg&LWjG%J7{Id{PIE^HDK8!+1CD3PBH3PTTj62LQ -Gc%mWX<|?D3Y{Rlx$k}>5*MV&oR7^LsRdO}MryzYz?RqX4dhrFDnWIBAmp!_jTIeHz;T&YB!wju1Ndw -q(1wiLjcI*LLv{N?R!eW|Da!<sfvS@hM0qd}WsCMJtBmWU>`#v%8f|Sj~AG@6OzTW<reOpMA=9p1Dv) -gkW!}5|;j4U5FQ26H}*MX52S@sp8(_CtWZ%h@YSK3p#7hxZwH6B=Id9dqx>8Z6s9|SXU0zB<aJ?xJ#J -p<8br1u9Wpl`ro18*4$-!!m|!Ya#F1oG9*P2lmkzr_*9ir2TlzD@f}v5pfV_%5E-9V_5h@wi{NfMXrr -XpTaQ5DFINXl~k&Dghj*Xa@-M6u18hSOYY`Mp$xCjH5Q1p*F;fo&#ap7E51Anu2E`$F2g^9M(4qx7gm -m{M*42vMZv7EovB=-cMy);s2kD&CFT|ThbP%qeG)k4myK^^Q|FfJ<CQe1vDauXd7|RmP+W}Kvrz<-^! -?<DC}aSCQL~3Y@!#O2k41d)4br8B4!h|V$eh#ZEIm;L1*Gp!iwlzF#-H~95k_XFm1S{TBBHF9+>#dOR -r8-AMwp7?q#An58C54^SGTnSl$gQ75NC1#_b;8<^I61>`Y*|brD~X^U$GJGaKuV-+x*S33!~o(3~mSe -XmJGRI9VOTl@=9O9KQH00008031s8R_)cVRFotD06K>N0384T0B~t=FJE?LZe(wAFK~HhZDnqBb1!UV -cx7@faCz-LYi}DzlHdI+dMyYXIus*04=i}A91_R5HO`KM*uKp{7RVu|Db0B}!<~mE?qct^U%mP@50Y| -{yTjoK#GyFd)!kLq_3G-H$B!RBQt;XCZZ<lvt7)e1bxA+{XYhGMzkL^1T2T|V%Hpch)s!F1R>gK#rZ> -0sOg%GS)zkCyug{*IKm9^2cdEYC>L(dS)jHlxRHe20_TAe*zyA5nl)+@_O6QfHsqfx=&(B}Jc=r6qH_ -z3&C{?2CIL%<p$1v?j>1JD$wJNpwR_!YDwN5ws(W7-)Y}7X0PUjzWo)qQOE_0n`H7r6}$J=eToAYngM -EyWt4)(50_ZwYH=lOCs&tn*RxNlv2(7EaPyex}yqTcHJdZJzfhTxCC+@`gzw(&|&)ch^Be!JW5gV@w* -=1*l=6xqDk0z~{P&1?5ZmR9oDd&2i7{-Eb^9%s8Mu5l(mG<8$Lz&DMqs(GSUMY3<`Qs3x%fTt`i;BOq -@(WCi1&a(MjU8<|mOXQf*M2&vN=k~AX_cg%NN%-scI@33Co#r?46U|gU4C+~t*MKr?o#v~oNi=^2{H6 -5ka(7b}&9=htO$DIvOMRPGEog~e$4y3E?us&@_F0<id8tR&j~>ZaSVO6&t75ZFGaZelPyYFRJ{rRkbq -@Fe=<`jy#f3)8(ffP7et*AQ!hdTTy<VUFaWoEw<qtJpL*uo6fByd5H2&i0U~6bat)Z7|z0`-Go3<BU? -`au8z4#iT0s`iOAmI_jL{$TARvTU47D<%Fn`IKK`<XhQo&!c6kyKDbq*t(6qZ(LuJflG$i>P@EWKhsQ -=C*ND7n}GdT>-o7)T+oo>JkLRVj)A$k<yEW;t^rb<#j=Dcp~=qyW4bitK#e~-c>*@VB=h^vm&n5$2e< -HP?<^47g(5@&vSh@pGTV&Y<k?b6SV{Z2Y)0oXZ)mVHS*^&f+?tE79cXY3Y%O5qFQ?^>a-bK5Hejv)^y -*bLIg(^iI*1PEnL&@BsybNZS^W$1IDsAziHwdEu#Ak2-!HR3N=fL)oel1J<%U^R%~&TFDB6U7R32khC -hO2NE5B<Lfye$1KuYX)XC_Am%e^bxA8}SU)N>2Y(TE5rqT(`Xmwi@xHU;JY>JA+a9M22G_JLSN~=#)k -pmsev}h`|f`MV9$1>b>N<3tTn9T@n2D!7mI3o_24YiK56cK!U2axp|hj>628e<-I>}j?EwS`>p0LXx^ -0uZwEaF3gWq+)`sYISaPTQpfB1j$vLBtXCdSkjSaHi*)u%zEZTKmB{rs1*R*B4>i^2bdKy2+|eyb5)n -k3O2wLcD_bx0t=c}B`BDiJpG$a2ohKcAO(b*V2%l_u2_L4f|ZB`f!v@Lw9JJP2~wJwEEX_Wy3Mo2!tS -j%_zQrHQBV`ix&$Kv|A38#624NT;1GJ6Z<|_0BK2nKZQ1DY)Q1i8>j39D_Y81nRe5U&3&0Ka1MERJ78 -pUGhl7Q@0(qkFR{#T2%}p0{D2Ttb2I*&()L8<HT_@8J^?z;BQubn1Y_vf;K}WhZ8#4leyh|%1F@!}xP -*=!52{0OP$i?&vLxnnCRzOs5@-NovCI#z(@N-k@7_BcDDOcwcrSG?dHt2;6+ee6V4>PQDdw@^WrU5as -B=$D#NEl36>)7A!QXm<$BVi=^1V5sFyeS~jQAQQ&U7n&fG(m-s)`-Hq0GXA+ViMq6^W4Ico^B0`#fZ$ -R(E?;DtE&bjB#34(pE9l9z5U_rkLq*vvH)eM)#nz}OEiZr(EQaa+&DnaXSjn=YQri3@ai@Op<M%LoGO -6j-N(OLI9a+Z<8tRMA%*P;?5h)lUZ8Xr!LI=+C5Zisp!zgGNQC>AdOZP#ZUD!Kd{wNeAMw`&DSX>(;` -|H|7cXI<z=0d;MXfK@k43I6m~Ryttq23;R|%GDlc#@efIJBZHPB~{WdS3Oq$(?l4+ciFbray77!y=rz -3I&qK$0F>kcEtGj2Rz|7rZV}5oqIG_sndu&Np$rx?O+_tbwz0nG*fz)P)com<-&Q+<?J9VJWl^(M08G -vb40|Xj|Yj98m;0E|zf-ZwgVwCo@li^4#6<zsc-3@lL@^@qfVo{vu#adlq9RpNa{<^4#>Ft(zQ-k16{ -dOay>oH6~C(VH4#336dB0Lb*Xv$J62!TO5#-L_f<@gaq3d9IK)P<pb-_NjTtgbu244P>?wk7(M0Aunw -&1&u?G7Bq<hy6ARlGB$>6S3}s|g181>#|73bwZ!+939w9y6njfUns~4}HlZ9BZ^(2V)Ssy2vuqN<u&y -JokEJE-<iSaNoGv9!uN>LVxGGHFS<>rMQ6F`Gr{s=pe)wVG~0QR{B{qE<NcH>+0hzS}a89xWXnC2<Vv -v(EK$PW@2NMM#W_yhIg<$yI3$O*RQ5gJ&|mCn`^_2h{d8J;O`%wqfyM|$Q7sGkogjLT(OqmZ;VN?fTA -dWY^IJiKYx@wH%{6MIz6l5G)EK<l)Gf5mhGK?_#VUGCtaszcsHkH^9x!D`GJH!C0vFq1}UZA_uc*g@& -a_BODy6l?@*1bOQETTqDiF=-hTjM5UhWESZ3s%Xj;dHrZw?!dLm-SguSEgx(^eshV4xHQw8f}o8?=67 -^DN8@%^LdA4&C~swi4^Vgp2SkFH^}8?}X&Im+tK<rFa-+pU^;G|6gQOwzsi}Zn#}jM-k_4rRaXv8Ef~ -;<Yk+Z4dk6`uDNC5d(XIrxq<C-H`i+9vF)zxA??d3_rmsy8JSNK?n3y=L+Pb6&tm(l>xN~T{=Z$!@i? -$84Ivq>5PFox+c0Mnv>0%96UcL`2;z2!M{KJSby##@Vz%<srYY+oJO(V04<F{-qnaR|Z${7873Cn$y` ->__Uwi?4YLlCChjXx!Q%1RBg|2_8lQZ0yUlQg2J)|1c)u^GXO-q6wovg+bkFdMa+hY5C1aohkwfTZ|; -ve2$R^P(br}PmJi8k3S(t0Szp4^z>+21G92S@i4|>LGX51=6{<c>?5Hh(D6okvM2}@X1gn39L@c-B8w -SBa%4y4aB+*ahA}RCqQg<ognRjI8gIAY-SserA4!VvpP?0pVKOn6Q1g-1Pdv=Fjj@hArSZa=nkM{*ng ->TCB_@Q7CCnz;y98zLq$(NPi^ci$oIR7p;sU=;$!SY#fl-+z6KAJe5ag>N?opoW42(9IcU-x!5h%tb$ -z3o9jB6usEf5)Zg3pZeXMv@gjZQG?l<mY(_N-I~!m~|%)%w<IZVbRJI-$*4LYsGGysenejPd|=>lpxu -LzrDr8uc8vh!^FEKx7a=CJ=71SY?&xrfuUAxC?pF7#W5}6t2NVg;NrDH}ruQL{1>li*-K;FlCnifwnV -Gxl*VEz<5>*QW$PNX+2^xRp{3N$<i)F5J|Bmf4KE5v*Qk;W0OiYd`;&iP0ss5Czq_L_85AC!PGOJFp{ -jxH3nzEPK}MH@}l;(hev)g&@c{~;n9}wk5C`7I*iHJyG?QrFS=xg1?OuK(bCX3pD;?s3-rXmhLqhy0d -SAuegt<J$v08Eq5<nTAJrh!*y}CCQ)fQoRkJH8VF)(~GzP6%-Lfvb@wqTI=i*n^*qkUAAft6xFq<4~C -~NQTQk^9gL1AjPq=X~$yvc3g4=_D3mXxLdMWXKkLrGbHa7=u01=w^vu|P6bx+bZEhKL9kevanAMz3z; -Jgqj$i;OLI7{-M4YK&F^!y46(Mj&}CCRWnsv#y3<HU+G-bc4~}&M>(&rc1|!7G5Vs;+@H{%nusttQW3 -{4D~=RcikT?IlS{ebGp|KC)ttjS9)8k7u1T5G;y=*e&A)Cf+F$SMx(cd0^b)mgpA+<bw(?JA$6oxG6J -^77_mgQ{5Y72e;p5tFmYSg+u7%z3y|p=wi-y<3WP;b-h2+WBel{Um?to<UVR`P``znT>=t%fF+CIG&b -A+8=Vh^(IFx{%4Gtdr(Tt)NSOg6IxU4JOKM{cGx@bM~z<yVm&bh<&R5;Fz38Vm{Gy}QW_1f%b3Fg&@9 -*lqnBUBVko=i|gV5oA4uV4*kR<M^5J^j;%nZdLTeK<-=8{}$sasKqn>oJb}FUUy}>0<}|;$Oe(1s7t% -TYk&mAg4hNcpqXj??E3ajY~6w*7j~2(q0FDqJaqL4$;FHqxa2Puh*ji?(oJSws6gzFVvmg!^YV+hHZS -p&GO<-JxQx4ptBo}xr<}}s0Z3qkPQ&a_c{8AbasEBWv87HtwzO#EAXLEi^z9?g1-5|uKfcWzxf+=J`8 -{lQm|>{cj`j3UOY$kYU!RQhERE%NHol6mxLBa5wy<Ol>%q1?E%5=02c?8*GH6DH12?kZ#gjLLk0r@aN -ZI7ZI|AtZ3XO1fR?vyx(3-k5&t|1{4V~hb3V^a`|Q$SHO@vo!Xgz1Yro~_Ta2Dd6Ok=6QGEtv-GCm%m -^}utoYf=-Fl|bI$83v=BC#f9%UMdu48egMu}R<{niDrMJQL`(bn#GK8G{-vNpQ0;-N$z}tQCr`PmE__ -H#Qb4v)oA^H6Alrj1z@sm)M*vIx_7@u#KNj^115+ntVA!mQR%TH||Mq34ut&@R;rgzSzj1mt01Td -WSpc`mqnw3x>|)*GPW(Wsh7J)Bmp5dUuHqcbNKr<9gq(oLIa$00qThi|W0QHYp!_g$qmkvvAmxa^gM( -9YFoaTXZ*4f=o<c7c=I{al@*1}B>H|)k4-e6;v&nwFxidjzc8(*@W#)6U9Qy;hCz-yK47a{84Q)RM1h -%OMG8&4Lgacux@Rz}kJR$7B-|W+);?57<{L2Q|w<MEd<ZMr{P{H|@Sg#jX%)qYW9^H6j+7hVYavvaHQ -9ZMVWU<i|z|hD|X28z0i!i~eh)hRWG5CKD!nogF99nM&d!T+k22cBKA_vb-NzgV9l*Q1}K5<DRt&?Kz -07UNV0SmFk|3j3tlfYcC6Lt2RegL3L#Uu^X&Cq;wV#TSPaz^CfqII_2Wocf|RFYPxtS-|W)KQw8*>o% -;WMAY79s+7PXy!Oq`}9<mO=fa)Vo>ZLI=J05fQ9b5ozh%#Kxc!)>F#LMgU7+Mx~kdglE8%n?Tg2on6^ -nlee}qHy|i<R#s_g^mI11AiGhZQwD>0@*R0fl<2BkNUV6AMFLITECG-SzUe#SH&1@R9q=v)iu`M_!76 -dngjiW0JWhDiWo0X*(+4PD0Q>B}vc!fvPA)&ujTY4nN))J<)$EgMbvG@yz)f(AJ9dXVl6rSPTdP2Q8R -ko}hZ2D6G12Qhrq3t5p1L3-&5PCpI^_fD6<>u+@Eli9a1_p8wer=uDaL5KtNQv0|Sim*`3=^<X*HE?t -x5ljoHjX#dNqerq&GkUHzyAZ60vnoq@5tve!xhiKd|HBW!@@?Qkaicue2h!lRmWyc<}`yCsVfIo0x}W -<hnh{)s=jaIQ<OH3f>3o179<$BI%;hQgMDc^6!5?#j5Ke;ND(=i=mA9BeT@Cx<$*4gB(7u1QO4ylOQg -Ux7rpTUY}~K?*+XL}%-#&eEO<hFkI>l<o{!1D8;%M=L!ifSzzZHu!R@i5`t$GYM5F|>8L7z26Y?J$`| -$-=)Q2=&*qGR8PoRztxb$YY0e+Y;*v{YC9elKLfO3WxFFVXIx)Z){DQ5(mm<{m;lPuy4GgWRfT?6yl9 -PgBMkxjb7Qx!=K=S}raQo$Ara$?L85Xoe6LN0m4Xe>LOnnm-%coHA(4(|ByXoFRQq{}8LnNxY)ahN(O -Kjd%0n$RQTvlcI>Q6k_AQmG3*WhGE4Ccx(jo+VWp&*$inQSxM^wIr!%>zdbIiZ32kvvWhomMq@WoR3v -ja;Ri7UP-cGn1F;c_^Z(fO-jBTgNZF8N$@byOOtv^P$Xg19uWhP03a<D9efao#n!|J$oCa%j5>qgt!L -^7O8blH&;<`NCu+f@T5zC1j&bp<uxnZ_LOFX=&zZQu10d*yg-0|f-NE3eo?3>6{2TD}Hj<Ws$?qM`fW -Z=R4k#O0tsQ4azd|^x4|Ju&9TRn>SZ@c5e`6TI92g-SiAlZbKTNOS=LEs^Gb$%rn>|N6IP7VUpl@SJ) -?ZOhwq!>z!x>byHB=k#4(Knx{4#?9SGU5zm{xvU+;v(Cl|Z+n9^|dp@zc#Gy9Y#O;+9KRNMtwuG5(+h -5XJ*rl0O91a<;SkA&<;gS!0w)mJtRcnkeq8Nf_7^-1cg$VJRIh_)|FO7?K@LF2XePw@0D>b66kJjV9C -ofIC)*A8Sm#i1Lh2KxU0`CsKHtMInk)leQ_qqY*Y7k%5OdIKT;{G~fbc4QAXSszAtdBP*GOwyat>GK> -k_CS4vxz@5%AccH3vwd3jZyvG%8drGx#`$#+>-x+k?E#0(?_@?Q27+EIqIiuir#@%erNnOTyg%<}XZy -3?W8MYgHnTYP9dYSA9G~XEoM$mrEf(gI`j0?R^?=KPeRkP-=Z8Y%AFS$$jh`Ylx{?bAp0Yv=Kmmu~y; -1SsixRD##PSP9E&ej{qT`zPxnJ#e--7b7(Go5hXx=s_(CSuUAYbQZ#bES+t@ke&4^0>$)M+1ZAtbgj% -%li&}brA=1S~SNX=qvnhoy9j*mn)(FPZ+^*hb_>d$zt4Ql#Gn~5fhU^ROU731@Tdcm#p4O`tWQD89iW -aM<8U!Oa4EdBzN3q?~-w_j`5TjxM$@wH(oh?-Mds?$U|0#CpdT;3LQ&^ANrLj%1{cT%_$Ac&2sY@@c; -<Io)yV;r@94ULgwLVNx7-iZPL9Wi$C`u0>e;5Y(|Ft6SKsu)|j~KgnJPsauOvBABu^fekeP5v*;!Pos -h|X4?+%&ZkCY#b3Dy7{V9=$M0!_E31ZGJx&Z;#A9SgQhe06TjC*p6+S6&O+u`}x#(Usg&Az&}OPlRk8 -whwewX3gY*T<NB!n~9ki1*s_4>?}L;Ot*q1#?<=qBO~VGMY$ghnDidW*5gI;T(lw&s9OEdb2g?RHHfm -b(-LWfPts@r+<l=KK=td3kfNniU{o-p^!~w*}yJl5Mk2x510Nf8m-cDMS_x_f)Ww@rClm})0t{=^CFt -N*{r-#{f&8S1jYM!yPBuaI$g5QuPma`BTHMUhxjqvZyQd=$1sBg=UbeB+d^#$zNVWa*?TtkLunGFeft -=M=WvwBb`XnkVz%tKBcsiyXOE1)Xzro#;3n^G#e>^0v8?34bp^a9-1{Z^A!Q#+e9Db_NaHa)IwY;Zrg -?l<7DiI@P1V!#G2T}Q5Fh|pQk`GpHX5A(@*m52&7uD3T3N~s2y8*VV{m3}+r|olc8gFpux){fbFeq*y -M08rHxd0IzX_O5$l6bNg<cbLg4g4Uop4fk?8FF$-&S4uVF-b<_=9*5fW@vD;{Lt33=wjqC{n*hDgmPq -3dTK0-MxYPKJ1wT!(Q~cyT48h$Q|^F0>j!|%ryrXD@@`j)_tHZrk=HfVIaEV*<e=umZOa1Fu`}Q7JK? -X_4^CStCr|<C!(K>4sm>Yu;CdbDxj*f1`)(`za==tF6QjtFa0wTQ+z__4xXL4kKTRakWFgj6mn)!lUN -CZ=iVX}k*Bd$2%|S~yCm--Km+?l*dHWO+bIeyD2`u0r~i?~TPa=kq<rvE;J;y(86O2cZgR#B#huy7IV -~waMT{&on@`J`I;~(ehqsiQud%sM=EG#hCegYqTj(H*ytQ`rj0o1nbt?vixgYXyjP~c#{jAl=%kH-~k -L1Ryr`Ml!!ET6qyQuJ4*JKCwv#Re@RZi&!ID{X>r=nU!=C`UHPHbyiJhsJ%O35LYme*7TTGxp(K^>M3 -<5^wdu-EPgz^)SKfXDClJ9?6t)K`;kfkLxt6$49=?bnhkJ=(!G?Xfo6sI(1w62%Y%qH-WB^p!4ev{Bx -~=`IsRQw4}uKfi`mCKzDh;i%w@v1`m2E*xwr5L^V``A1B0iYgad=#r1S%x*5qi46A=(t~ScQ>=sIvU# -3>zIft8bjhFuapK>q65&4aFD}_grKm73A%`yc1T(BKuIDF|O5TmfYBuS^!l7$`STw;DN~z=slhS7$bp -+UBQ?7*&vWjgl3vkr2D*4pRo0im}h~?Vcwn%fUq`kDJHdk0<&f|ZX7D?RT0TqTopv1-VO<Bz6v$lXBl -MkLEd(7v2r-4TSGxhKPXh{^ib0&0}%#}z0$dvwS=X}!+YD#W-X~YqQE4xaEma=y3_ulb1Q9n+XQ$VRf -KVQ-W+^09fXVw^$;N~g?yCvHVfJ?OAs@qhTak;upH6NQfK?DRV`Fb2)l;jZodcfa0QQt=2fmiii^bG! -e7P&|${%E(+7629rp7he?xL=^p062T)70U*o4JH&P?0+|&_I4A&=Xtt-)c%%37r*c$L(TK#-T;|W_IP -B>(%!COK{(4`PvS+N<<}Y>dD~lxn^SM6ep9PwH4Zo(5es9JChKEOzxQ759G(ECRMNE)+UQoI$aPwKud -$z4W@}t|6PbD6Kf4$v^dOOCCz&0@$^AfI<SpKak*J1AOUey^!_u!~y3AFq*LdU7mKM9iYoAqJP+q}OX -T@DV>!NJ}%X$dU9m#LozG?T{Z}>UHed;rRu8!IRhSYq%q9UkXCMD;rBrPN0g+1!fD7!iL9|eX8B)T|& -WpnqMQJ5YfX4A;{fUF5v*7sOC&d>@qiEUuwjab?zz|<ODMm)~p#jy&RW0@3KNHyXs=++>!5BeNYzQSx -w$6e1&zz!MvNysxc%fY`orYs)R;e*gB8;`rR<YJt|1nfC2i{$vr73K_2(pu+dR85%_EFXvv$E};J=TP -d5t6=(dz20Camp25DkV^~}t3uKpi-s?U7rCfHDc$6quyP`>Tsdlw+)fb2%5D@m;wn_=`q|qjL!F_|_i -X4<uF0!+FW<g+`QpdtQlL!YP~d3WC$0b%*Yd%7&QgshmGIH(gPZ$Qy}%8@x8lX3g6C3|%#{TTV}P8T! -`I`z+$QepiU2&OI7(Aeo*4CfY?ftLm#(;!+T!n$b~IC0<`B=jp5>gdiJDHQ*Yxi{q=bV5w^-PQi-oD~ -Rcz9lOEoC8dD1n;c{*oR7U6gsJ^&+lE9nX^SO3F!FxOVK>$a5=@q(a%WfIW>Bp`rbgaboUkb_A^RhTA -3Si*TxnJb)PhS9tXIDdM!uthi(V`A}LD!gzdx5`WfGFxq}7rU;IqRqT#GG1`P9DI8^B3g|tt$aGrsSl ->)75Q$1Ridh%ynEUqbfp0&bywKsl^in*PKxYge`rc%du(C77MLl=^!+*96r^NnThN(<#w2E+f;=fg<A -km*^LYRQp+k!<T7AshJ#+&*YU*W`fF?j8Lm<FS%E)hv-Qvw@$*n_(fhBxYV+w%d$BDg_iZUyRF^V5%P --zM`V39b#G=tkow6%%xd^*cbU#XRcw<Gx`i%A)zLNU3Q#)%aUWAXaDYbkDOs3UEST1litPWI~$dgTrc -nz8yI{pRc7ZscI-irIuob7|5H#{;2-H=rnLy7Nb+v?*W4FFQh41i0pi7b?Jtw*cMU8ckWo%1-nPn_lq -*t{01O?*urH%2^P81jo-0u?<+P(>RwLu%SQ3VFQab3-8KxygIwMb`c=v%!}?7<x<~ENY|vS2gl~#I9+ ->VLt2abOSKPJX|F3Wkgpvi{O`|am*x-2^7lWS1P9Y|3*DFmy1|aamU0M|BP^T~&+NJB2Pz45UNT+J5< -LPOgOrnw65NNs<Ii&2pCE|1=ghWe(CSbY$3Q>2#bY^otiEY;@V<}hNY3ssmCc7s6&%d)I53t3pTmuK% -;1Mu?Z8<3xOkB6APNsq{RDV+%SUS;Fk}?tT>&&P?8$ytO%B6~fJYP9D^#_@)C|Xp%{ds&T#XEdGqu_e -0OR`8;8lw^+@C+~e^A^kD~AB!sLM8!9VSAeGmi*Y7qjl2UH@|&Wm`bq{u&1UfUG3{^Xa^LcqL)BLy$5 -6>S-oNdi}{!ojE>0z4@PR?VbL4pQyiZZBufq$ksys$TA~Od3btXz*1A{AjsDQuOIio62lxI-NjNG-CV -=Wy~Nv1Hv%*msge>hSD-XFPwaiZhqNcSHJ`tJiH9Q?g))m!kI^=HydTxZ)G&t3g9&q}pQnEP7yM8;m7 -zYUEIWB#{%3C_)f-V>Gh~rDsG566Gv&SP{m*_HFxv%hD3SN{v@hvmaa>&nRRnJfyp$=0C`>I9ybgExj -;^)4j5W+h^FWvO5hZ6D4_(`3(**tve+D@4GyY4ZGIK7bfb51NoO77I*<v{}5Z?cE)+xBlj3oh!(s7u# -p8c1~eN;xLKu7*>OnI^aDeM9#c1aU&8ZKnjy?o^#TD0lq6$Kz-$y*CnJS9uVf<nETFVVXbt$|XG11^n -FPhj^PGJl#=V>(f2LV&YlBX5qdhf4BxGg%wj44|d=oXzd?Vx%I`%HIa&v#K%H9nh93cOL4WV+BrE#`6 -d=_)#$N%FBRqk!^!50&xFbewEzD;V&@V|IJR8o$K+A7Jj@7M|=Du{QL^HjBghoG7=F<5Abk6^>W3ncA -V*-4|e?oR&=92`}W=27q5Su*{fK5#Q?RxAoCCZ?_(b7hdRw-`++W|?f3h8m~JRB+5-;xE&a>RNWZUpi -D&$thD8pzyWO!e;sT;rEiO)modx_1dUlSq$N69mt-qaL=V1PhZr!Ic$p5@kcZ94v)~DO&OBwz0&81PI -!^`fk-ztE}j}U0Tqhn^#^85Q`R%7#<SoeBm293YgGqYp*-kHH_Z@;}GKhR4<V|=hwnYjKfN8r!ww%Jz -(*f&C<&NUaH_#C*Rqh37g!^(#-zviZDmce@>@!Z7>X$}ePJE?4OOS!OPi=wkB{v0dy004f7y-kHommt -s3Ip@y!ly+b#hnY(q4^FI*5}{l?K@M}k!H_YiuPL+Ol?vhI^8D?omk-dief|AwFjc5jzPyo)!hjew2} -@rDl>u>O9&uQZ1^Yb2l){T!;7zo<2!p(-i|q?U7Cv$?s5G<dVt@Ax$(D1&?kO(~R++KsYLle_R;JhJG -hp#`InQS@)m$#Li+HY9dWRt-zSGVVlD@Wi@WMu!v3JDVDk9K!GEU6(VuOUK_^k-fuY+ov1vPZcQhW2k -93E2pdyyq+aQI~oNf|#FH%p~p*GJOYM9x;)=4Sgb#&_;~yh3m@PS`qAX(%XAHdD)?8VE8!LJqg=G&D> -2jLipb)l;PbU*02ZH<uK1_$F_O$PF_doJhC#p&6NW;hY4^7BM0E`n2M4yT*L>?;Z!!Fg+Oyo#!NdP3R -tviC1;DgMl#&5|=xl&uBq^61E6O>e5o!;<}d^1#iGyX9U&kMVu+`L$|R5-fT&SoZdSjttW~z{dfr2s( -;gE@u)rYrTqph<8}Zt(AMqHUS8>0<o?yUuuPlU$5Z++mG@Ej5Oq!T?WeL>Q`S_g&caZ#SXgJFr#HsSG -JKg$WvX7J8-7*5x|sgjnhCun4ydq1r^11)Z$K3&xY9vbf`WgO8WektZmCbf9ZZ1=OQ)W<O4-5f?{aM` -QNjD$ORum(Sjn8?O>?Y_6nQ~qFeKssm({MCZsL2Yr`~3Xb>ZFlS<f+Uji&q*wumX)VsedP^zlSpolo$ -M=`F9MK1b6v-RLR)({iUvdUvB)(zKOxV5Zpuc(Df{P8)Bic5jm7g9~~90M1}qt%*pninb}>;cp+SM?T --WOv!;w;da6IWwAX=bCbNYF|QeIN2jrlC?+{FG*slN*%!KUyTOslU5n-4s-hI-22Z}^y8<qGkunj{4y -M;P+Ku(Aa&=DF+s8c3O3JOpCQ*yu|Hx(Uu+^B8-C&5MSz%gUg(faergd=Py+X|{)wsrZ&BHYIEIfzGp -}I?*^>{a+;yc0S@bF=j$TX*;lPHQv7H!L@9Gh1mH1F}srF$_0eCX8-??>aS+1Fp~xk(2G#l`vgxq5<{ -!+cYpt9&pJfV{+WfDIbqTV}^&)K0Q4bKzw?H0B4ryUgOvGKtmwOx<5G7FrxNIO7r>rAlA6UYXczfC@F -4e(*iIzxv{uCQ8}*R4&qqux*KTGRCdHM|NWwM+N(zRwiNiG@&=A(AARD=@%dct5N5k=HROW-HF)5O?K -Rw!{rFje{pf%d2o96^t@81XJ3B_>`zRL$0{{#GTdeO6P<HOY976O2AFiz9pkJs1}-!)hzezPd-$*5-> -(vN`p4;)YyKBUP4+D0zW`860|XQR000O897^_9XAn#Y-~j*t+5-RpAOHXWaA|NaUv_0~WN&gWaCv8KW -o~qHFKusRWo&6~WiD`eeNs_t+b|G**RMG861z)GlCeFQW})o@8;o|;+g{SlDE2uKNV1WXQA62p-&u;Y -q+KVlB<sHWzVA*N3<eBnH0@TQb~aIUiBf3vr@x;M=8vzy3e`x29t;gP77aujZn1<~6JH;TlaQ1ab<-N -L-MJKQ`Yp^RllSA<WcC&|Ew~-R*Mkvo$khleB3ym{_UZ0EO9G7)1!{{aTxTCc{LAN?<!!cvsy0xf<3i -em4X7|iE^Fh!AY*yXrOb1f!)mximsdifYa7ffQ>%QluPQXdHDj#zof{;u!KA2FL*U2^heK~6TBPtxz! -Oc1W_*O$pRF$EAJz+aC@&yhK<cr{g%4GZfW0JbZL7oVc$Yng2v$GS2fKa)F(aK(C;Vf1e|?uNV=`4@1 -utE9HX|7aB}FVJ-V=-56gvw0sHi{%TsI85z0shOt*Q4-G<{tnG$x{D1d2a;Njrac&>S3IPgZd4Z!f_8 -P4r$Ya9#F_#}<&En%<4Dgx%{hIim|{^NuaCjTFuwM4^(7TY}I5wHi;;@zGfKGhLt6Ni?rE?ua8d1pS+ -L(j!`qvZ9kUTyHTtN{(PW?Y=lYWfO1-5_RMu@eAVrnDRx5b$picFMrQGvXlQ?YAyQ%P)h>@6aWAK2ml -;P_EuvVp^;q!0018f0015U003}la4%nWWo~3|axZXsXKiI}baO9oY;|X8ZZ2?ntySMo+b|G*&tGw34+ -Sa97)TSV!~<hRtJG0MJ85W|Qj=U;3)hZpXC*KD+jp@;nlz=1X?ckJ<Gb(fzO&B<2L}PrmlcZ@N^7D_< -O?p{+VA!kxW$_a2p$MrTGVrvU<98ENO8_`VMDM>Zoq1e^jDA@bjGt8Uu8;L!SACLT9z`)X0s61OP(x& -EQru9k(}72l3*;8DbuO5B^%9j0fx(@Mw~`xAt();0&0-Q8**oR&yt673+9AHrUge0zfc>lqyaUr=pq; -rgb87s1t?iXojojKjYj1<K{J~HpMz8-TQ1WGuDB$dA}p6XSjRw_)p$ToDe90`Dh&-VjUW_DF$HFU$Ra -Pcz()$SLiPK8vHX72^>PsNv)(Dlu{S$+<CRKtf&Dugj>=`vK{~9MwJ(v^uq_80^YixH`MG+U)i&=Ue6 -%lM9r(hO7)TfuA2F;abgsBWAQqIqXk{hKqcU$fTa&iHNH>;pxd0=WSyoz_LR$8?KVM@Dfm^w{wJLTuc -5zS2QKcmp8zG<3(LuH}^k(OciC4r815eXWR90xdSlT{ZJ`LgI`1r%yljD<9xG$>vQe8@mY!#N$!Ns@f -m+|c+@-%`cBpmkP)8w<?9}O=D*OP(MF{RtWg^7X#>IT7R@O^L_53Z-Tck#`5cs->Udt2wN7hH{Rzg|q -Idyt#M(+eikyV2lTq?esIhoilOP8q@l0i6fB^QdFm&_$dnYD4C5p;ey6lCAKl@A9U-el7Z3s}*$nPqh -S1CTD|>31$|CZhN4$(i^T8ahE)Pk^ChGJDt>yGM+{8FO;d$QLEoP`Ri!Y;;9@THav$gp18qL*QG|AYY -9Jown+q?r{}PHYvYXE+)#a6D8EO2bjb{z9qr9b2t9)W6WeQq_Xe(Uy?KAix1)X)-X8-!9UyVN)#&NAG -zfMS?CGh9f~}N%B$1E9$92A)R9llbFcvBKuR{#!rezuvW~tHd2$!}<jlJ=OaGzUPBc)by*cQ#1V>yjJ -J{SA~ZKDt&mGr2(Ow?Y}*tf9QU-83AYWHN8HF6~?{dJ4mX&H?&6&yv{V2H|x?r@jiO~ZJN@12ckpMRh -F-vs3Q(rbe0^tt~NNY(jXB}=E5{!1u-08mQ<1QY-O00;maO7>Q(awqdm1ONa43;+Ni0001RX>c!Jc4c -m4Z*nhid1q~9Zgg`ma%E>_cyDlYE^v8`R!xuFHW0n*R}8!dN^4uNw?Gd9oW*wQq5;x0SZ`0VYsfZjv( -*<!dJ_jhe|u+0O4dqpvOXkQaz5U?c^q;u7<hoc@_fj6u2m@cfqyAVZC3wl|2(t&kVBFl3Muq41AR<19 -C*%UqPYTe6`A<TcVHsn%D#}0C3<@l`2o^`{t-%}<=zBKg+|vDl$L0qLYpGm7Ufxr!%;`@Sbf6XWb*U) -ZgTe%Y|faN!zTwDG*7Y-D9+*Gujk+Yd|HGyOe(fKS3H7W7Qfp45APr69~W~2YsYmWQp`C(8a$Deh17` -K+sh)u|G}+rwM|O5TBxv0^s(C77Fky0rR00@#TrmKx+qdrnH*$sDmQ26UJ_53+HInBcHkO)JnwO_o-Z -CBKFwi<$wLfXij@13#mjj4_j0)$FIOuTc)z`WT0F1kALf6|KR%=FC5Ar<JkQ(lJre#eUvH0zR9yS1*; -GMfIFVeRWDYE5FoZg1s7@O{O|s1{fh+>HT+((H8uWfJ0>;9B3X#{r0^DXR=JJ_lud(@Sk)srR*Ub?Xo -UhA7^4z6Is-G-^#Cll;8HJ!)lKkwX03tU%R>%{|i9~~%sdX}N%H5`g;x+?vaY=`fcEAD#NH$}}^ae`w -)lh?zyp(<ep|KKs$cx&@f^K@V@jEiGa^`!@YKw|lyRsJ&5zneX@nltnPkCMu6u@i-)BYqyo}OXq{5x4 -1l@6UkeUp+J(;%f;liBZ2X3;w4c~<K4_cLB;csz|(s1^S{VgW4c2=qg_+_QdcM2N%QrXxG0T9heAHu# -tXUGaHuG>#&2DzAOe&}tO9k5`Q%Og9=UGyxQ;tkdddpW2W*X~LvLVs>cx%7&*nb~;{!qQ}7{t78W64s -%ldy8=FQI3_O~vI0jE9+sSPH_Ei|@7w4pRTn_B=Tk#yvZWwHW6yd3|G4+$Ndv-+gm0|X_v$x%J(L=?b -~Vw5)*goo<kwjHaK1gC9pEUB<~*;@XeCp-eBl&jNi&B!XSafeaI3B*RdAA9lGYbp?<sT{*vNgo<<Ps- -ozvFtQmkSE9IZOSzkXudJl%j$G?XRPrA~WHY<1@%ttEe<L#E;=8c%yNS!3gPg>4E^Gj1&}jH?Udb}Q( -m(YYaw_RFIA4w*mV&fY;jmNg~_-NJ&a6uK@of%GZx26Jvts8rOs;|0a;=CNgnE3aK>nkag(5IpAfmo{ -u5!oz7V@pgT5x%%d+j}e|Z%iS|fH5(hM+r4To7rlEss0iq)qoHXgI(`RDQeIcydOTdB*@|bZZXtg5JR -sZ~Y4^65#6i3uAylh-Wj@pM!lndWSWmohkkbusKTJpF26d0x(D<I=v%mwr;f{LT8ryd7T!LF$$E|sc+ -}cX;4?I4&F*d9AGQbiL0D;_#9Fv-0VO4MQh|!C}sj)epT;tuWxq3g7OwF9OSiJuMP)h>@6aWAK2ml;P -_EtBkmbrig000yW0018V003}la4%nWWo~3|axZXsXKiI}baO9rV_|M?WpXZXdDT`+Z`?KzzVEM?8ZdS -j*eZq#^suM{II)Wq2$I0-oQgu?O0yDUiWEpH_M&KiduK?!_K~1HRwrp*{N|enb#ZYq1A3Z$S)=wYak< -bMZ4mx_^vr_vv62py+*)DxAnQh9@B{%COMHQ?a9BVWCxMNr5tPtnD@t@Bf|5@Np9GmG5EcQ2+k-dI2< -s5Gt%pi{MR4r-g!^Y>3kSXuK6n?{pf12@5+US9dwlT;yun<w<ZgB(Cxp_^9m6xu$*n?;uka;A;85_Tb -sn~RXr0t$1m7xQ0bd%6<U{ev9&JQRM+MjHfpdJ%iY$qIyko2alrc|0aT!#0hpMS$G~<&?^dL0I0tExC -%ri>~Zik2P_JqZt>)bSZE6d8S;cfp4*H>3R|9E|M{SyP{gFba-1COF!fkTAb&yVjuK5UX0M#&tt!!^9 -w+(rHS-`?JT*xbX;SfbJksa!I<pf+HxtS263vstc$b8xSVkGn@=ck$3_FKfKF*4X7bguduH=RrtfUG5 -+hg~%s+pnNQfyrM=BBxb0TZ0ss;C5b70DnHd9YT@$=cCF4mk)8~}dlZ{U%;Bk<(0Dy*k+WM0SEH{?L7 -n71TJ1u6ovExN5V~}*&?YujZt6xV!ZjMXAC@DQ*myfgQ>mp-(}hE|TZLp-uv4ORH&-1oQ<$L!)YhU7r -t3IA7)g4rBqi=D)2afteKN(dV~D<v=ZjYPbNK|Dv!^r8q!3=fO*r*bkt)=suSicX3$|Gv8aXelPic_I -<mym$Rv5sL_z+Z3Q9(UvJ{XOMir56_G^xcj=T;)^pMQ;&K;uFY4q4A0ZHpPVBlld_9z!p(Y|^I5lqie -7wR%kJ_00)I!4^ZxjWrEgzhBVjie*Wf7A8;A<%p1u%%8eO=^FAIEppp5Y7bdwlnuMBwU(wE2#)002(u -J%4z6q$$urw8nA0L$+!=IwPMgTIBqrx&0-qhmHA7=R`0~mU6^bG`i;74L3{Z9>>_Al*`Effer!HL*K$ -8VhAJy<M&Y|x2&hrnV*J9F5<f4<VCcU*hTeQ<av8xtC8COGfCsp$3{P&6!Ya@odzE_)2@hKV7vmc3F0 -w-lT&-yf_*g-uk-m1)Mn2`ZL_xQhRGTx&BdRRWZ{`sSnUr`UqaT0AqTp<H|75Ezh#O_n1EMO;56_gY& -vkviBp;}~&0=C8|45x{4;YeM`oSa=ho&BNV6f9z}?qi5HE(32Y4%fcaw3T#D7q5dX3r<<K3aYSUzU3a -w*&@pldK*?-mND{xsxN5xkr<azV<i1)SX$IX9Udg`Oi?@BD+)RdH@NfK=|lf-$8Ea9$F)7E>t6idMsb -o&&9rfUA2AR+>{p@O(d{t3o9g(rIKta2sRGBU{?@6J(weqeoGcc;O~z59zqmB7ggtZbgyF&$k$YMegd -f;0Ik||#u+EeDa{5PMv9aAB#UyBlVE)UcgUjO8W$}6rm#{cf(KP%gr768>QDd5}PK}6!Gt%R`ji2T0A -5cpJ1QY-O00;maO7>PaFo^(=2LJ%#8UO$x0001RX>c!Jc4cm4Z*nhid1q~9Zgg`mb8u*BZg^#QbS`jt --B{^w+cp&cuD^mX5KzigHBE<MFqQ#b<E#a83{AQYa1Dl)=$I`nX(E+lLHf7vk(8*@sf+GIF`<V=zKie -u-XTsV6A!_Y-(9U)s$?Yd6;E&3tuo7>2ajjg&kYp<GL}l7rATGyilwZeiXmF6Y)uu9QIf@_77H&xlP! -^8x2%w%k+IAQpi=OTXquoU7y5T(6-?tSzbp9FN=?zr`X}1o+xzLs{@(s`^x+Pv6+?eiW+TPuIz*B&^y -2NstFt%fkrg9&3>LB}`tAJC?jOH?IXgX{Y4s>!igE!uC*TH;uk)->NZv`$TNc^cn6F?TRXb^xFxlOTB -pi;dX$<~gHQk?_-5hhNdZalmq&{IGRZV%w3l=MW%`B;Pex%7Gqs(b$Qn7>>3FL;W6;WIXFvjyv&JN!m -&koOCq6366_M!-_v!oPkIz>A`0Ds|+-tmrSf6d->C}TmTtO$+2&R0eqT{CG`&EgRktXe{D@#OW%45_= -^tk(Scf1~Q?<l<XZ4Q0MQ{-V%R;2mN0455R|VHW$&^}*E8PO40Jfs%ShqdLxnfHy>isL=bg0q)ZZv<A -R6{*4r!16HS#CJp2Owd<&(a787FvlKE(!NHEGkXA&&{w{$xA+)$EEy@qjGqaWDI-#iOZ0*^s;_Y>Ev* -L=$oW`sp+X^5uXEChbKUjAqY>A38^(7O_$}9TOuhFs&4A4ua{J?GVrKNDT%=Z@P077Klg&RRebE%93V -5qADv4ky=Ol%a|IDZSl4e^%3Z8*1)Y$>-BYtKirYgSxCY1rB$j-#Uns#%A>pj<LEyN#I%s*ibkO$AR- -ZHK|#q^|IwW72>UH<ES10YgmPiQ)_jPnjky&DR2U>(b_f)zB*hS3Z89;s9!ERu(Zkz-@^es+Iwmt(+l -<4UNu*O`E$+5l?%_>mIw2;oKGhFcnX)pv1B`D-x2hoTUj%V-826N#ZZlMoqy~S)@jH1m#;K1xuSe*cg -glazGaU?iwFb^g}6Vfof{q^P0+0^)~%nK=XpqQm#`d9tAVa%n+G^7@Bw2T_x0rG!ZPZZI4S!>V)|^zN -cBrCV}OI@KecbS)xer^ph@SjSf?pqPhSXpX>IM^E@Kg;IXWT+(1y7PS!Nf!MAlsGQH${YyO%I%2Q%pN -{kUsfX#yWqHz)UQn22dj*LxeqEF>pXO)Ery5N9RgvIV!E9Ogld9PU?&@cBu_wef_!QKd+rtvzsG)7yk -302g96wbvG-#R3Ma=V7I5TZ})?m*D>hlHZrDY~6MTfm=4WH+qvgPysyLv(TNd&t*%fHmlFw6Jl|u(zu -853N-L2jcd;jwIve2!ac7^X~^9!<q$8J6^9W3R^042*M$AV<w2eA;QtejHiCH96+k(0@{<0clG}J_q( -{YM(i365cnQzh~p7072G>2jE(z?F{6xI^^x$sq1szKME5SR4_zcY1dY3F!jifT&aH34&N0KroUm54=u -3b=T&b0jv8K2F9NzsRyP4bVMPQ%?3mRTF4FJ$Bf*u&UkAbP7)9h`Vdx>;Y09Xl#^>?dM)Pp4yh$9nrT -iL)2AZ}L;{kX*K+W>Vv))xH3bH97;5RL284;(Zeu2za_n8uO#SV9vL!O#)I200=CBfKjDZ!G6=jUXTo -#vCT0sX)2UAdLs^dZ#Izw}6rw$}zveroqqw-i>X{TH&f3wHPz76*iF3GO=~Ofu+G_DlG}0R!E-JNcLr -*-<u)5S~zYR2!2fJsO~<j2ZPYivSA5_G_Z-c80NOwY-Qsnk~&34_Lq2SzbY<2-)q{5d7CUAF1J5#f5y --wQXf<!Lq>nL_|~R8NKN};DDBAKT?A94D)jKw-Tk(vx3}o!h*btEs><8ngdIZcX$bKxb%=D~um7DpYk -F0%J1m-U5BMWu8XqBDV%ux4;QL>xLequKDZ7+VkkU+P1`q{aB4k)ya&VmTC+}#Hf(P~YCxjOKtQlAIT -2}<;-)Mq%HtBLiU|UOJ-ySY`3X^XN9nx`xFdM>`-bh7l3vH}OU_wry!<K6KGY&>#B=s~6Af=^HE)erY -P{V$hnGH;aJ$KNTA8qJe>gS99WJ>4?{qb=VoTGvP8Y&3u*g_)ovuEgkpnz>~zD46OqLtiMR4vQqkoLv -GkH-R9k$3Ez+l7S_(4BMZfY;Nz%lH}`+o!y9*@$xZl+ghg8Pt0pwUZMrrN(fBW^Lw<)Y(+Svlpusqlt -z6CjIsc7G_%bCJg`*k>1b!Kwr`6A2{lHvQ_q*d$-1bS|vd32@Du8)l~~Y&op!SSd~)i;-L##y4=Oxj^ -P?<FpsyF);-A9Ev9unTXmPCvo|L%E-rM3+1z3t?-z}T|8>v!KI(Xbe`|xbvu8vLWA4Tl;M~CYtLpa1v -t23wN}*%LdCNqouI;wZg6e{|P62ZT{U!Wc=xewD@++1a?<1F3UHr*A8C6AgZsTU(2w7~v<@bTMHk8~& -Jz%Mgy|8l4)&cZ%^k5Dtb01_^X2LJ+DdH|MecZa-1W>iE`2+7?P)h>@6aWAK2ml;P_EutI+xegd0040 -q0012T003}la4%nWWo~3|axZXsXKiI}baO9rba`xLE^v93SZ#0HHW2>qUqQquWN)tFIBilG=!dlFwgO -vMG}(v22ozbOWG=GkQFI)m=zja|_##p-eu)~?rti7uc*jR4QfFspJp$Kym#t_a%W)}pIaNRXSG#)Zw+ -~UtVxlmFFaDvi9BacY=Ifnc*;3BPNBfmbCzH$9)5-LLEOtaLDfw!`5J{ueh?JC)>%Z=P`}5oFSkvSzr -bS6-<iqWaw*UV5<EJmTpGe9DNvMoiUXFWbFzsF{_=>FAdK^B{BH?0OB_a7EEeKn!xsc=z2P1NOcm3t& -`rA!-_xIONx4mAU+|V@I<dUqS^_mqK;VFrVl082^6UoW9Uq6tT=UhOz5Pt_4c~8EpdG<*XiAVJ{K-(g -Z;>Tb{f{D6<kuwRJpy4WQ8Ztp?p?%Qkn|3tM`BuAKrL<;S<Qr-uU8TNd6=jfpWTVxM@h+-@)h(Hbc4( -n*@t?8uNx{V`%DuR1NvlNPs;f3J1u*HRt#q~7OFB)v050`3?MC<oNYl36D+3aAL0mB~h;QF6nWQ$lGW -`IhcnV4ATF^L>G$DPf7A+GLO+mMMM2cud%U<Z<N<#+OC8K^#M{Y3k%!oDxw$f^vs{%WT`H+R++sbTe- -K4MuuGHoO)*G?TE3>V&kAPb{w{}%%-<WF=XvJ0P>(ZQ;kwg0;^l81KI2rnYT3LK4`XHyhmL6+0^y}j! -=|j>@yewH%M|Bo!BmUiRRyGJ*b*psg1}M#%rb;RYwo?szy<VJ0Wl3(aS^oizb0BwXI-Kc#ozRqoA;>i -h2dlUoDZP%!A}T2il2`(em<t*`u%q|*uuJ8Ez1sBPqS1IAEnX}&xPnW>LMZ(ND(g5i4P%=tpL>{85cD -b>rle|-qKf1|(q}&l8xDTONUn12NP@z$6bjnqKA+6aAvi?u2W@8{#cCn$e0JY514mAa0icFRaoHyDW& -o&`ndS|Oi(?e?$vydrOv%q`aPAMLYS3%(t14lJ9SIs@D1E0JtWhLnxn*)W2%aJl3<;{CX^Epe4u+@K9 -;8g+Vg5^$mms>ct>Dm)b*t6uO<svJ@=7~ao}m^DEC{N{jlTcr)y0bHJ|w`Jq7`~vu5%^_9Vt|z257iX -&3MJUkgV9yma#xBzqiig3~p@2I9^8rTF8ie;RPMG+!P#KZN5$S5iHu!&bw>cco(YJF56PY>Yl%u<~#^ -SWMcnt;Qi3P1C&yNg0o^t1(N}m$;~_}5*Hfhqqc7c<C`+g74m-Gann%{%|QzM=yD934F`cO6pF)UP#4 -jj+IP<d%2Ki5z2{2QjmK*Z_eG~sRk=pD;CXU@NtFQm8aY3au;3?CPEMp`GJ+GpG0N%7X88irQ|Gw>7m ->4q9%H?D*;HS~d%|qzvkU#GT4b|hoNtiRe}Yyd7qk0zzvzf{WnyswX&jCBc5l3^lj5mZa0bM^{NYHKF -Ij~Wwg$%tuU<m9;srlO`0fzlzUEbVPxe)E=pJ+C!3w>}?En=l1fNj#s6m{=PELLGT9ia?ICR&0VP&p1 -QUF_I{s<o&70mt!yC>(%%#KYxDLao!^~5bnH+HT*y4m+J`twzv-SNz>x*1`SxwPKY0$a<8i8-P@sTsh -&82fqa%hOKLi)@puVl}n%z2+Gx6r4$F#ezRv_fZ|H9~3Sq=lKBk$M?eq&bI10ZrZ|mebU2Sv~VUBOK6 -kbH%V+;Rd9(7svBvVP9vSm`{5qEZYj<5ulC|~$7tf;?ZsD%tevW1s~R<+H*~-st~=zcl;)<#&fv8KqX -z^iOQWNdwRU2Toeke=$L+Ni|7Z#)Tmc8odfeJB+;gmpe#dBTHjyKRYPLDu;rwWDo@xcNN$NywsK&v1u -!57d8o#d&+V+gypAr5<MU>}oNRA&ffsc1{n+zTva2+2W$cn-$5Gmk)y}Q>>KIakI8#L&fmr@n|l4VQv -Mx_-%Au4l&B90ve-bAF>tQHgxQib%~(G+TvBd}Z2PJ+%^_%vNvd8s?ra!q3v<)=>1z`Z=pi`avNN2hC -P_bx{4MNsRHdSV5WjKiX)syQd@i6t8dt(A+qFZJ8*)^W5?uB8-gv5{0c=k%G1QghOT;K><;Z(pL1$>$ -Vb`WRQq$(`81;TT`E>sR#V2vsimRv%m|O9rZ>VrN{rHf`wwU*C<%-4Z<UuaFcvZK5X=71<`r=xbG#l* -Pu`oOIL(81#J-ngAhvj`K}IAxU*~@BI%@O9KQH00008031s8R+5;!9(xA>04Nv$0384T0B~t=FJE?LZ -e(wAFK~HhZDnqBb1!snYh`XOaCxm*TW{mI6@J&RATkehTCXrW3-rOj43OJw2F)Zv>~>KM1`aLJGHZzx -L@J3<w7<RQkd!RSRQggs#3uFe@LaxgQO?fJ5(1z4P*hwRof@_0(r*1H_#}4kl4+3<iy`Jvb4{4ciP>? -Y4g6wF?jGvY;TM^z4~-~xW<jpHpXAfWkAL~))5lN0k<Gy#e)P8!!&x;ansajTx7F>#(=v5pN|Aw3z95 -&&Yxn%_+ttne@`h|xLvn7IDB;dCuqH{el4(uWD^z3!O3qAMm;8L;3}p@6L_U*yCAm{F=UbxdQka?M<< -{fyvuU>g{PDBjkSgb}gRp+@btg*ho(K)!#!5a4@q$uT*Iec^1fB;Ey-@s0opwV7(uTkAM)TS6P{U2zN -PKwIf4vq`nDyG4FeiUvO`!*td;sx8a*p9487oVo+nP6NcdQ5E@l>}P7hE*ez|DheG9|&;QukNAuySyb -*9{+`JK!OK0L=n}QT7avA;Mk=VligxHPR`-0_?}4<kE%aC;2?`exO?cJTRu2P)%%Ybi7Lb=Z}v+Qvtp -JXUxvSpm|d)dD33E*tCWRHyqi)U%_Jo-dQjFnV_xn^Yej^t)!!fIUYTa#~@`nkY@N87HQAoz!_d+01U -m-@Vax!X`rapmZFwcTTEw~QuGj|=dcZn^q)%j0EA4a52tcJkkyWB$OVZNA;SvMaAaGpw4>h!mO>UKH% -jUlafX-VoY#Yk=A`14`hQ=SSSN(B15-bcWz91Id>ItHWX0dm@fMllBKcz{4A(WwFpY61J?<noI%75O5 -4dG=(=_1WeiK)4ofU0%%#d7hEvW(JOC<|5!|WhgO8&+nn|NBJ<aYJ_4$LNxw~yz^160wYJi9{uuT)hj -8Psd6ms+(AD4RjWN&d<YuL{a`ch;|ydsZE_#zk@mHZ|akZqu)mB_svt_?h^P)NLg9ZMCsVb^C53d2D5 -7T4scjy{y4r@&LKW%)mX}MuO%z+PepSjh6n-C2z1b^+rl1e;FFuA-cnUZNuy=K<;Y=W-IicV-l8$Tr@ -m0B!fbqL)sCw^&;RXD+SZo!>UE%DdD+fzx`hCBJUdS)y_fQF-d})7kX{uwe}TYX7KOaDdm}e=DYTjWA -UnKIhMEQXN!G)#=^>o7l8UcKilKa&%Q77H=&L5(}rdHS7_WC+*H*Nf{lPyct}YLY2_s%&%6Ne$ZHxX( -bdTS=#A0VUNFenWbM%-Bd(N$4rfqd=O!V6?`*)@#Ukkw_sf?rW2rOh+?rmic2jbCER_LK(*X6p!0@1p -&!k)*zIO$V4?BbGPwi43*~ZF-v;5#^D7)pn3#AM)WXEK|^Z(%tXXX1o2>dUQb6x$M>G_}vMjCr}1QSD -_JYMzFqn~Py8^|?KqC$%3)XiJaTn1P8BfinvNoj76oDX@1+X-gvcUF(4PM`h29=%h*C<$c?>}jzRz^z -xyC2_MMJU}LZkZ)UZP%VKb3yi}Cj`z(8w0s8i$KKIG5I|znN>_uoIPSp)6eTdJ!WsaXBQ+!xm)QZz1k -d(vEQQHIWXy2v@h!CSWVyPyzrJ|7Ua$V~c(Vjs|8=Cnf=qoVoqM`Kf0%|@9DX0WPZUgFJ<j!_Nr9B>t -V3dhdPhOtG#+VN&pXJs&KBQirl5511$rFRddtwU{dAv=fY%&i+}KvK2!Qzrh)pfxCAya*;G^bku1++i -`+5X?f=Q%#;bWudz8L{Aw<4C)z3JS8%DorrPDjM07u{TXs-t8>;AJaHBVtseauWeYOsAWA2)x34iqlM -H0Wcmv3sgfO#826FA2B8$0&k>&J{7y0N)Z6xGG34Q;DLMy{EAaZ3<tn%448grg~$T;Y^x#gu~ASbVp` -JrFa+K)81*LnSPp>`thK;^6w{eV<=YUrV#Ng0s5C?1-&rFVw9c4&UShygcF>nB3jDoP8#c6`z7$d5H{ -YigN1%uTPb2eEb;;$M;biUU9Nsm}YZgf@#O0kt*H))XsrC~62y(IAino|V%|hTM3};4U`!Sa4O$fZ&v -1qVqU&FiUhnJ#4yT(N-FGoO?#o43tF|du3LVpT@Q~ic&9s+N9!}G}XRPRFIHwlK+>Lij>ix4=K3{<~` -z$aetcx0LoxU}z-F=Kum0T0#YR6_*nzS!FVa+*DTNwK)}GFrhAw+Vq?OT}UX1Fg0p@HT2Q0(T)09bQC -KrIm;R(>oQW1r=ooe8}P>4Xsq?p6>l`s!Db3qr;_tL<bA1UOS0{*Uf0sbS-XxgM!lRN0!sNFDd?2bh4 -y$S?F=;Ez`RVJ1H47+l_$VTWG|kkmD&Ot46>_{6EiW($K7q1HX!pz5v{gkP{rI*{@@u`#;I)-95$q+x -Db?x@zxnSf;o+nWO-hkAOE-y^B%2;A3EXhNVR_0^Y(aSfrTKVmAUpFM{5FI_?!>1bk>s-JWuT7HR~9a -iOYXz<LCP+M*);h8B7ZY&W}zJ+x>?z*Pe?1^zE!#IpiNfPW|d1yD-^1QY-O00;maO7>QJ0R@o9OaK7) -_5c7O0001RX>c!Jc4cm4Z*nhid1q~9Zgg`mb#7^MbaH8KXD)Dg?Y(QW9><aA_nx2PSh51(E<smSSKny -M_E<aNod}JVF&srWM96eqN$ijS0{};m*SnwHRln@YdJcIYkrYME%nFE;U6<_Yx<7UKXXa0S@{@P&+P^ -P<|LGUy`RiBjfA##?tJg1|J^z&8|Mrc4?-2eGEU)ff)VuKc=Xbw;{w%%7<t}{|UWW9#yp))`R9?Og&z -|3<@Vb2Z;^pt(=jC6&D*3LyczO3lc%43L>D)DzD~TuJcj0BZ`#e1V^sDe`dG-F?KYaE4?)8him*vy)y -u54)y)Rk#yXUXIeD<=X6o1cmU;qBg^6HcHvUHX&e}7kBzWCzq^=IYo?_WH7-v92teEH%(m-PC2|AX}6 -%iq6z_UUJ@Ke+qFaNap%wkOWGr6=3p{_v`pyVoUr@!s95Qttld*Z=q*|I<HwB!&6l^Jl3%e^oxX`#(P -V4-)^&zx&1C{_3N@rHHw-3i$lh`|tduRrEW*NOwQKd-U{;F;AYpvGwVjy*9^LAGN3|Q6WG5%50sXKh{ -od>NNL=-PA^p;+}qG4^y6g)$$vk@Ti@-fX5ND89bYZZsKWdwbV{)J)iK1Pk(KUvDU;qT<LPf6j~y~xr -i&<eR-nJfU9)haJlQ9=G-aUbISIWS@z=zkF(Q*LN3PwjnH1mCA8w1bupc;`x72Vr$@wd^a@!|;u9&Zs -n^R|B)*hR>x!qBwbh~2UXR#4T)Xe7?9t(goolZWQ+v$e$`c;c_yS!ML2HH*wDHPu;)yF%Ud+7|=i#CG -36K8$^R#$Q;zO^BGg|0E1gV@ch^N=fnJCMdHs~py0Ihg3G5HV=?_@q!JVAvtE6l+dsE0-g>de8CvtWD -9g6la8i-p3w>`*cmmI&=t5j+_WeuJLk2~g@HtbB2G;yIwaxk`?<p1rWs*5QDeiVM_OpsE5@6{xBZiIq -AE)KQ>v0<{v7e3o7jvXm<0k@^VKN2rpa+A|cXl}N2bLwiMPB}%PCY9&%Dky?q=N|gGD)JOC*RHP=N)I -_8vqSQoOSLh)g-dXv|M#dsF5oMgjgU?VCQTl#lgv67Gb0g>^`zL9gL<dGzWE{mHSqeK;Qel>fQhhPvN -wi^1d_Pf2sl`YwMybU}M~l+YBDEN0)I<haGCi?md;Su2m85>s(g#)YE0hSSk+gc~4vi8-Qc@#{8c91v -N;_;+LZT89y&};ck`yS>9}*==lq5+>Qidz<;vo@wMUq~TC{L;eN_`|smFX3kvSrGaDM+Ruc_nXo?Gss -+TxW8fWs1wRW2PPR$=CDAo6$iNlssl;qMU?_+~*X<)B8!zB%FIa<RZzF?OerE`Ibz6g+5&t-Y-jkzsM -X`7-WUHw;aNJY|s-buQ1b=gPfHUW_nu*ydFH1_X1s_&>SW3UJOuqn{pKzrKBAy5p=JTX}ZGHRis?}Oq -uHY2kXX&tb6}%B@dN;TN5;s-`d}3zg`=(XQ(|Aw1}t2yWVPz668EVz56vv#3~Uh5eGqs1RVtR8K}{Xp -va4nh(tt^h(tthC%g16(<l*(C5WEh9zA!<p7HEGmE{b0PCQlKsk~E*czVos^3Dd^#!q>BbkE+qsoiaF -)b=1~+3_rRR*#4B?HkOyg-Qh3*fSs7GoC`8_JXI1hmRcwY6&{{*s+tDgJcdSoc6#Yr8#)>g!y#6JGKX -&MLcBl^cIg_I^D?4xe>Edw382<LEhm5?Kcq*&3w`)+M|~+SlEKaL(zlOde}>+2X6*iI7kx&>NW&E9r! -?q6%Qqdo-`vpC`xLPOvOq~wwbZfw9paTJlLrx>C_h=HXYPd;-hWW!V`&+&YLJmk_u-kvbpwTs`RBwU# -hl<r^i<>F`gLd<CPrN{=3^K@6+#U|K+iD7bbFE`{Kja1kIG9X7TU_lT3S9C=r#FXP@t!+4~P_dn}zEM -9@#$15c7AX~I)29^SV{ugmu69`Aa0b$-Faa?SbPW^J_fEVW1fn*9E?$KGk5Djh#UE;%S~B$}c<TH#%G -8?;w$dn9NPPiM}X#B6>2oOkk<cRWnn?Ezc=Eo~Hc#2s-b+?0+Py3y_~zV{kec06b3RI<es=W3=Pwcx4 -L1l772Z#w1U?a|7xSoQ|(;XCb%<b_&WEFGvl@bHV)9^K<Cw5RAZ^Oh&Wr!?ouw}NMp+8%iL0cwx#*%+ -i@TkzBa5AW>!;)cDpdJTuLv0@GfKl_1&b2wPf1g3;=FhRCQ?lcQqucvS_Gqp$QlmQhO<>5>O2{R+Q4b -C1BnAzF`58b^z@T@S0zQziH)lCRFbXs|b1z)3==YUo`mKZBBz4AhII}|s2srJBA_+~747^#6?nD@|2( -;j%J&-MtN(!`k=v<9ZO_P|34EAva0tW_4CjUM7jo%WS@qZtaXhpDehYD^B+z5!`txHoZobgq1gr>~sa -fF{LUh~c-TJ=h;Iowo;`zO1Qb+o6dF*+uq2*!pZHsFuE$>{Z$}l)V;PKeo_AJZGnw@7GLBmY6ItSv>4 -a%MO)f`p9jxh^NZNv;C#vYE5&wmZ+{WT)j^Wr@p+-z+D6TI(9fmpfzKw+x~CEwRjC&H1N=O&ZN<&1_r -BvNdv3q!)ZQTpD~A11GB#FvIbWDkkcG5PBXW-QAdl{vMpK*%RU43>&rQ6Zb>ttG^%*%Q`P0vPx@1f;W -fuT1Pu%tm^DqGN1A>X!)uyrpQMLV12=tr-9|pw-Dse`&WdL^HE`9;_tnqk+Vn%azJ3_xJj|}HbGWqCk -L6TG?S03RXW+=@vFbZ#)##vsQA=@X10Qu!*UV52m+Q1zai<;MITx+>Q$K!sP5soSKBJbrA2VF8JUO$y -T>Y$IxU^n_8SezE(e@awMKj#b4TdYuz>zl&42E;$Evz$8n=0sGRNM1wV3|28qh^@mhjVbonWeale8$- -);yUsf^?<86HSlyAc<SqOu*RT)vn`{3J<Vb!ZGsf_LrF`-)^j*Vm&<cJWE~HAwsp~3D!X>CqF=A`^{T -JeRbSVM)y@gCjVC)?I>wr_3|Dd*n3B5Y>q*lrrv?@ctU&|y>upCgTz)iRb87TH19uIapVX<<+G2*Q?} -dkRM7#E*dbyTST~_Ddw$t0yb*gI=+@0#uNv=8d<q|beOY3H7b*^r!H?OYIkD7C&zF4b)n%~8Z3@wXQm -!`9X;qqGS#c%35XW-;4Gf=a(&Tp^!`g+X3(c+6v%FVf|YnErzH20Y$tpmRXbtQFan|N&#pY-Eio7rcr -)>S#zxM^S<4Y_75rT$FVZC28zMc;H-G^Ym60&V)CO=r;N)W9@f*AMMh`^0WXF?W|V&?%=*)mDFx?6D~ -4acZE>6U{mL%xU!XQ(te3`X}ntz(d<D9HZUZN?HT8M4@W0(fQ1#@oU(2wxf=d*NRX2oiuAMX;(<6X0x -B;U9K^Mwq3A}^Q2$Q<CnO(MxV+0JKvnAx}v&9z2sR1S+kaBOJ{BAylv{z6c3F(ow~GEvbIT{6G9n3<8 -2eBoI1}s&Ur4U2Kr51I#!$x0k`_mWKI)Wyc>hXYeIh0*>lrgv;|$PY+=#BRb5-q=q(SI&iq?Q%2|pA7 -7f%T%BH`$Tht!0MX!Nl$Zv6T!?hpExToRLUa}R<a5<v}>UXLR<gMy=s{RtTO=}r0T|{g(D`#;UIMQsp -)e(4T9UegkT~N;0+V#nBjuwn_bslxp#I%jfM;#0??O6kN4LnW_JTy={O>@TK3Zqvf%~Cen8d-l`vvs3 -aH0Lo~`s1AS_c1$dx2*e(w(js6sGQ5HX)db<?wY3d$?Vs4xXwIW+8WJi)wRq(udaOt9_rGBVo+Bat~6 -d=$KI{EMguhGU|j90u94t6eo32alwkGBr{k+R&*2*DrQ8P46Lns*R@?lK4$++BGvUy{aE>pwh3;_aQZ -j4X_G{JQvZJ1xGYpq=>RQz`ie0oXmm`fq)12FI<y`}n^VI!gb84W@p3RwuYa1CZX*a_a^+Q?HEMxIgi -Zkk3)TOT!x2fwGu0<J_85Y!)^kr|=wah?G(d*k@-}Y&^R?XO|-&<$KR!wHrWL8aPoynBp+BCsU6WnHk -n<lu$;o6mP*N^O3U0R)oe)ycF5Bj~JwH=f(PR63?=&V<?$5o>%mFCpI(`(?VfuU+(G{cqDmDQyaRMiQ -pT3rS=rv`5Nah+YO4U@B6y}UX-t!d7|>9jL6rv~amxH_+atJA<$12@g5PI`6Aqs^LA1B+&9D;lWl{;I -3N%1z5~YGBqZ=@6}l(aaxOqC?j*&8dMp8tb8%KaR<HXkaKBs2@7#hfe*_sr7a4R-<>Pu6+ic>Wagq(| -A3DCKNTBXVkznImaTS{Z5aWr0N<)PD{l(dZ%lPl`9`Ej5>C03x73HcaFfrmM7}G0#gZBvv=neSYo*f? -6fu77H+)W;Vwp9P6Mwro9mbum^uP&9f6wpDkq!6Ng%s%3B(D6=7m6L`seyV=xDfV%&4Z$ndK!7<o(>= -e<kndgZFb^kvwhB)K6?1?N=RHKK0AbJ8O9I|2};a*QalChbYyp{T<!WuVk&U&;`0ecjyU?&<us2EAzJ -LgTim&xA0r|LFiZuzk}bw@8Eav11PW#eg{A3919$y?R}x}b1l#w2Q)wvv|obTey!4|gL>!&<r3R+t#3 -Ww@qEYgot5u!&u;;8SYQiwg&#DB1=nIhFxU<L4SoOtc7uO|e}jL6e}jLAe}{jEAG|{cS#?SQxUFjoQA -)u5y**$(C@c49?Ln&GX6#Ay2^hr!6R{_?5cpgmjQ~?1jlf-e+W<mIDe^f`7B*5<QPSg%-^MH+N&yhZ0 -$s3)JcC?l3sER}0*PS(leEnhl!UTmA8dvNn_&yNEaVcTgDq4_;RA(C7Wla^=%WnE3zZittQFP@EB)Bf -j~)Hk(T^Sd*wK$2{n*iu9sStRj~)Hk(T^Sd*wK$2{n*iuxp8ajF!<@mj(+Uu$BusN=*NzJ?C8gie(V; -ICvAfWO;Aea=(dh->pUsZQyo3k(NmolR=^tW1liG#raJ1*LV?@Suebo{4^VgD=@zcj%|eSUSrB@e7xO -9}-pnBQKx-^C)<R<~G}c06Ei~3bV=Xk+LSrp7)*_9y&`b->w1C4}1WvR7!t)C`;PTgahLdMFd4`i`IC -+MXXE=F=lV>=23hXJcXE=F^?SUWq9e&E*ci4>r)A1k?Jp+ilP~!m_d1}-%nEXjPV0b(u$^*RezyLkt$ -}_G!<H`fR@?c{;!^$(PJPqT4wD|}>;6ESXkMM(L@_=1D1I#A}_0SD^Km(MD6L1apx5m?eKJx+aL!MUj -w4$dKJ+0_zMNcbwTG7*ro>ug<qNf!-t>_E<V2(UZ>1j$|;b+`=#+_%}dB)w!xLX-_E8}iu+^vkem2tN -+?pDU#%D7t@cPry=W!$ZdyOnXbGVWH!-O9LI8Fwq=Ze`r9jJuU_w=(Wl#@z~1)~tO7ZNFPU91J)M!|f -*L(;avNC}Zg*u?c8bd-QiQKdNnN>v)e0B(&}Eb|?^!+%Nt69u2xcSLhBsp%I#){euPEP_gh^_yK$r3% -`XQL<?87wmA45{0@Exzk{FL6$d|fo3g;az`wx1z`wx1z`wu`B&YACI)&fE56q+hs45<Q4?l>LvckW@z -rqjBs(`a9EBq_`AacqE{|5gC{|5gC{{}yRC2pYG?*RNe{5$+qdfDOM;osp0+)@ts5BLxG5BLFjl>`0* -ejqvJg#Uz}skA+a1{qWW(Shhda)IOm$pw-N@B<zy0LMy%ADm4AJys(85&j52c(MYXtR(nB<N%y&6#fK -%f*+hv$?#|R0qqpvXC=d*;Rg*>Ky{S@e}TWiU*IqB7x)YO0KW>TpHkrm`%}QBl?p##r^4VU0FB!ZvA~ -lAGeifjPCWF>x`<~Htde->S9KK+-KB2gp)b^3JTz;SL0D<UdWz@76U0M<)F__5d}&kwQc+?+KmnL&58 -?&CSE*_NEVRc0l^80u7Kx$8YLx^k2?)xq_PTM_1SlXQR>O{Uuw&)gmJ%L%LIncV2b{COxEw3dMhn=e& -YP$+mpVqqr9NO9T?yJY=m8DTj&MplO#Mo;KS*TX#1lI`i0`AK(G|KwPpI%@D2S>P{uBNaeh^scg#U#9 -gden23h)Q`1N`8pK<+jQe}ErERf_OO_#^yatWtzO!XM!Wb(IqQ3H}5>I4q#Qjl!Sc2bq;J{2BfXKUl4 -l;m`1A_(5-_0)LVEE7V`1Vhe51$Agn!0GIo$+bGztKGTM+&zX%b&=tBvPiTY+C-ABj{uTZe{uTZee$Y -(Y3jYfK2LA^C2LA^C2LA^C2LA!)0p|hd0p|hd0p}r{q<q4E!hgbl!hgcw+d1t0x2Dk*x<gN>#AYa<s= -fc%G|CGLFD$&U@WR3i3oiiX+NrpmircBUor>G3xSfjIskohr+o`ynircBUor>G3xSfjIsW_0YVW;ADD -sHFZb}DYC;&v(ybZn#W0|#u60~(+SN;I{*Q@cC0yHmUS0Z*4>2s<^ppJ35;s&uDHcdB%kDn0q;Nuq%l -0*MCr1N;I0AP_vlBjJ(ozH|wZi6Zp7mX1{u59N%zc%p#JI8TUX16{TV$PD}y0Nh%~fu`{jL*Nyt;qwd -}l0+sY1wf=a?#m7hw2E-qiXInldX$;H9cM(@k8|Ga^_DvORWAh;y^;G~;Bp;K1IHyv_HlB?Q(ZGUYjo -02>iKxq8|UncX0ESbFPGKKt>ZQ{uX>!A*KwSi*F*EMjziPD#+hc;H1(1#Z{xr}Z%)(P#w};wW-V;vfH -ZH1rn!Z2ZLy{KdJgK+D~PS=4Mv@p6$9SWT-yvBU*DG*=*w`edT+7owa>oKz~fL?n1LhndzgXAsmss6Q -(fbr{M4!`r(gO())$x9ndA50fX_FA&+mY`PDRqd^;x}9_S#5~E&X@0(Y~WvIo{dWd~bzaaO<~EyPz1d -9y?neMx8k<)Ol#%m7VND3+GEkBoq49*6u7L4i?jaWlGuw^v%*H3ot(SAM#!^ou0C>;8)M^t8R9|SPQK -Bl%M+~zwH?$Gmv8kmbmXY7PItG-5%nJ;EFRr{ZMEzU{l+pPgtg}*@73uFFUxfnLeLwyZk~3E?8zPfy* -Lr(B?$LtjAm_ukU@87=Y%7vsYg$bY}{ndAU~Y56_&HWa<J8x`Qb_1^+pQ%oY_U(VW+i+3GpYk+;doN^ -Ll8?-wsFQOof3&2@am$q?Z5_K=g4-h!(ffUJdXASV`U?Yr;IiG(I{fg3Yrdvvx9Jg?a}g4lM6Ve7rI_ -1=oavvcNlpg$1tWOKZC@NuIem&pFK{mkLvEMe!gU`Nuy?Bq<&bX(s;{LqUBDZ4{<w#NpWh=m=T;vFo5 -+oNxTPa{%-966oH^qq+8og%1qa`JM5?l&h#kEaL?ok$3she#oEgmj)F#>iRX87?tKVi0#a<;!Oj$wxl -ManmV>f55vNl_WWeI7PPUtm5gP42JIqgS?*+F+!>?Sdm6#^aXcGD-yGaydMX}VUYwD#0HVkXb(gTSCL ->``3}-~L5d!B5lWOdIU)*D^uQTWkfH~Q9>OJ^$frflG;qihq9hPSppj%a91SuZ1qvNFJ&97z*oU1Fe7 -XUjZsf<>M9LZ6C51?glrvJ!DCLZc2reS)Co*7h6_2Dz6USX74tY_E84tu4MFuR=!XP301MxpOSdJ%bC -)qqN=H7W@kZd9=7DY-d2AG4eQ4Ns_NK)EFX_FDDJxZHoKqN|=+$B>e0)`0kNl#6Exnq)ad$va=(O;94 -CedG$lqOM{B&A6-S_+p4;R2O+qKFuZykPGRN!p2>L0jQ4#uM{GmI7o7kfi{b0%R#b<}xCa=j@T_TSa1 -U-JrBaCg<&E5D%x5SqhL(*iMOIF32J`oSDTk*~~JRWljeRw>zdRA`IxngD{`W6`bXmatPbuposPzy96 -QgM@Qg%#FUdf7tTS8^Z*V;ObL<-r=OgP7*0hR6$w9%KTBXnD~ydIV}pYc!vRS9p_Ghq##v-u;LyS#Vq -oO3z#!$+DBrJrw`=M_Kd1*{e{wEo9A|l)VHr7DFdRo2WJKDd|Kb`>pA4Jn_TZOV#Li6r3F??}JRBmKz -M!`vi(_3EQEW7brzhs*Gp;vkqr}U{93OLXrr|g~bRvA_IC^q&jNy9KH0s2&LJ#ruPrF3CoLo3ghnxtF -xy(1S99H(e*U_WmS)mexAeac@w@0rVPe-v^ugFF@!{L|SZimEhjJe6#%2x1HiRowec9;6t4GSD25`-L -L?sD$KCQu-bT>=r0)Wpt5cd2le4|bQl?Hrix$e$gO%;8ah;E_)|SR5U~eDr?XDDsX+Af`_?_K-86gLA -7>^4UT2jY?CU94wx4yma=7-ky@?$w}TR37j0h1xX;-Ue!S|6}lj^mHFB-_gWDLZ;zfpn^p02(OD~VUw -ic06+vu^ICWcv$iXtFxQSnWz?6+j2SNtgrXsR~1#v;v6gF`{myrE!kB!qL&W5-Mby?1i^2YJRA)XVFx -FDV&9+83z2);#$iNr*SiNuI7A9IWoVIqf&vddXwGBH_VGONqJ&1}ogglwCvL{EZFmZ(93`cit~(7pBF -UVw$;vc<~c)%L-+*dT&%eF?X4wca0{%~ORw_fg}E5g9iGv}8hP>sk**j?1${_vATnaS>Kw+YDzSRy<Z -j;gIm!oSdulMY0Tsuoc<#v-~9$Q6~|Oe(K-oBAykxizh%Yu{qZ%Ln9phOgkKXBikMkPZbYIAN{bk(JV -m-#~Bfh<1FTs&HveV9pRMC|H)~^d5DZ%Uy8MLxWx4BPoukdSfPs~+ey;W+XE}A5G04855Y#gco4Fa?; -y$67WW*Ngk4tp$ldKCp2x8TdK`kRgxUixu9O1{q7V|BgTz;m<ZX{$09hl2F6+_v3q3wEZw1aU8a>6+b -1u3Y+JhJ;=N?Wxhj?I164Ujn1Q~#tQ<uC)@$^pK_nLTm<yV<QYDda8x{C){wrG*dvxu*;Jgc%it8w9! -Wf4)nMMU`uf_rib)6cvbl~b4wOsD{8+anT_iDC6nMeRWC(Bv-Chs+-ms8v(}v`0it4^QbcTBD>^`VzW -U<QUsSwpnu8)Aw>!PR}c+<5f<_D+l6@2J!GtmY7V8h%R<HVLACxU`ltYV4ecJj2W=L=F&4HGcbJ3m1b -a8m&&#nuYv3Q(5ivQ3{-(BHv`={^692jksIhVv&_sdcARxBPBY);7<IWBIHYx!nWbf4hiiU)835Q;-W -fO!o|@~JfqK$5(^UMdS!X_1m4jTD88~2uqEkqmyNa((VFRPbG-lss;5LQdG_cQM!*!@jMTw3@qo)wwp -#oROlGHWj;Pm6i{P?k}aNMl9L*)~XG6TmUV{`c#IMSRl5$3cS=w{%M95Cnn&^aVWnybvf(Hg;w4iK!q -)3%=KT4$h&zu76&rj-<Cfx`g4cO5tys2w%TQ`MjXnIX+I%Minhv%pb5G*3*>LUXz1*W<wTwawlP9Ksn -U%{0>h&6+#|^MLO5CHe@gL)OJq?VWY@&N}eaePoZrVWZ+C=9qyhU1d~2(YDRV<(gu;){be#c4XJ((xK -BOZPcZV^E)<bbW#B*n>3+uXxdyuipNcfn+^~fE={uId@k29Igd?Uhq|VS*pbyW#nVm=JZGTF%(ysH&n -iM@rpT31i7lhA_x-_eX^xixvu-ZU(y}P$;%4BYuKA&5N~nz-FRQ-2-bjXx>hiM=y~?urDFNtJSk2EmR -Iy^~^<=m?S9PiA*L-IUqh?mUxM<GNLUWR|n@VJD+K;xG&^A!ivgx^;1A}kpblLVSBXvdFTAe*?P<aF! -7N@R}PSAP_tBQbyV^P;O14pd~?I&}_uwBWOxaL4^&Kal;o!qFRG=AjTo<o~FO;M<sP&O(vWu}~!N{Ho -I$gJHc`zdEN6H*Dnwo93Thq|V~mX<dUX<S?MC&8BSlhB6e2z1MNz2jy#a_cxgUM6SzQNJp|&#vjWk>h -PP?-s@{+ZN`LbQp;LE#w(khEUa<pSS4rM0?Z2YZW@)qKXD>@z4|P`Fb6FbE~7L?6VlhUat{$%p4zKR8 -5?mZJ}I-OK)jf-c-hDa&~ON<(iyn{B*^1%)l|V#VPI=(`bV-vs8|x(g`!L7?pg`S*(<?8Y{(F4OEGj; --*l^t}YdlDT^|y4u?_}<s36tDT~TqczwkypI1IV`LZUcA~I#2d0aJ}Rr9!NimRr$YKkgUqr%;#Y%{@4 -6WlaG9W>3UVjkNR^Vs#BeU^XMT<o)^c9mY)ReI%^ZF6XT4;2k6r)E9OYzA$`Fk3O`>tVir-NyD2dwr; -5`?t%b^K1w7`{D8$cwC}e%{7*G9nf!wYy3QRY`+W@SG5avY=6he|MK;9XK2w>W&u{(B*@`@=p^ThU2> -w+Q#`=IY7h@cIu$ieHHp%s)KmVdr~Efhe)IHApOxRVa=qz4L2o!wwj67=9S9U~v;iD#$N;w-mP2KWQb -Nm_vPCDMweVZ`E&SX<S`>%&f!%@f@H_aqo$TwRPT_a(JNO;^92U3Ve<=K1lmJy~lnUVx+j0eFJt%Dt= -$hkX%h{~uPRycf6Bv`RTrAm@l+pcXIr+9+SXs{REmtp=tC#kh426G#e}jL6pPMbq(XZX$M@3v;=5-4H -4!`JBw19st;9m>)*UGuK<=h*PRim2(QG`Q~?%;y0+#Fc0d#qgdSndj~Xk)bKrb7ixe+Ud;aOvpGvnXY ->+=kd7uW&wYK?hqj=UKTKvA~1djEsllaSJ}!MiFm_d@BmZo)ponX8{6RG~-ziz?R!?%Qd9s8q$IQwjh -8l2w*E6v5?C`F1Z%B+;z7(8cNDslv^&!Eq8LZ!day};J7XK;g-uf+mDg@xP}5>r;j`OxTB9d`naQyJN -mezk30IfqmMiKxTB9d`naQyJNmezk30IfqmMiKxTB9d`naQyJNmezk30If6D^gFj_sB#9=Pb)PE?#au -JJkVZ<GY-+Rh7T00=!@Z=utn(ywj&am&rb!ZpgmJ=7w-iPLwph+fzQ^!OsTW(&6^3vIY?+R`2%6A+qM -5SmyrY0-QO&9~5e3(dFCd<)ID(0mKcw+POGhC{z#qjdCzhFdsWG~NmF-ax^fGX_0l&@%=-W6(1OJ!8; -Q5uS?hj6qLz_#J*w6&`UGzr)WJou_6vj%}21F6caBES^#3x&HDDGS8Kx=gQF|(c&3mo+0KLVjks`p1V -EIt)pjz`2aunPo8UO&$YNmxWzNDJm3J&@bVFUxt8((NjyLS&+mk1+<9bPJiit`37(!0AoJpBIFHPWr} -;e1=V?Aq^Ld)j(|n%h^E98Q`8>_%X+BT$d1PHYSC5{i^c8-Fpr<9hNK!BaSBBuq5L_98D?@N)2(Apll -_9t?1XqUO$`D)`f-6ICWeBbe!IdGnG6YwK;K~qO8G<WAaAgRt48fHlxH1G+4)o2+HJOonCBtQw0e@?N -H!l)_l!$1K=z0=Srx@jaMDWtRa9z|H>Y*F-fC>aZLHor|;cl#0_$~b0=M)RSh2O%@MNt=1?i79pzk}b -w&n07V@H_Yy_!syW_!syW_|XSh7WfzVJ^b8l6%W6MpX<dgpWG?@9{v^n6@D(C3iVjHZY<pI6%;)d6g_ -s~<4)n<;OCaJZ196LDqO>r4SsIn`jW9z_;>iZa4S3fJN)R-M5nCf{@8MVY*8s|xjwdBA6qoaHVXd<{| -WyI|4BGEWF-(D2oI#gbzb2*4-K=8!p~J{iSUE*E)o6+KOLp89xGg(7OqZ9f*;Jc;Ic}BKf%w+tt9v}{ -2BfXKUb_J!=K^jda`8r3;ZZ)F9rSre}SKC)55)7DezbLSzZ<(<fX#TooYc4g%f*=mOWdIEHsf3sdAfJ -5d%TXQ-2U6dPghQ-qnkT%jt^zMMeIit`Y*%CQO^GV8w%2f@tw;4?J?UToEX!MLb1Ty5i{<501sGLo&2 -clz1W(>MR#(j>W4(9<<R@f{1s3;?dQ~`m|B>+9UJntlVNE?%Ajy>roZT!qZtnvI`(PIl;*rDB4LA3h@ -({plJj1y@B~g#jxvI3p#aB;Njd`IdCM65+PXp1H}CS;{E_}e*nQd_~;4$3I7Q{cdhA!A2py!AbThL0s -a7gfS>DFfGLf_AK>R^HbwX&{1JXGX;Xwh!XM%1zBVQJ6Z{E&u5MF;Kf#~i=N30*_%r+&elB!VhCjof; -m`0F_zV1n8ZDscxuXL<*{HZZbb}ty00mp<xm8`^U*TWjU*TWj2i3f-@S`qt+u+~e-{9Zi-{9Zi-{3#s -Jm5UwJm3VaxE*jF!b!>}{3rY;{3rY;{3l3oE^qhVaU0#BU>}{tf&u5MabMtE;9THb;9THb;9TIO#&&9 -Kr^a?_Y^TO{Y78R=VW-A+YHX**c4};=#&&9Kr^a?_Y^TO{YHX**c4};=#&&9Kr^Y~KGz$L?xO@ksF3M -T=orpugo+Lzt?o{ZGNWp#xo*f=4ai{urs&AL-JNe8>Y5~pwXCSoze}F%T!r1^Tm$U5w7k9{eL|dqn%S -^pYoQHUAMXP!zr<y)LP}gQ2UzwzL0f%1FwOyb>*XMDcp3mg@q3o@~%=N4(d#?&>RPSW&f~S}3RNXb_g -u5$FysvDBYeLh94$0;^XP_n&W<pUF@Z_1zqUvjmW^*;F=*CP%H%2w$=q+wu6&$`!aQJFfv(BQWTo?V& -GIj6_1zma7>TFI;)2rSdKOyqtq%*I2vX$3Eb39cFt%~$t^DNsqhRvIvRp-qq@O_zRctx&n6S=;Pldrs -m`T9_BlD9Gu_T%0;?{<Re7X{N#)c(FHZe9;c^R8Nsy4GMhBAYjvZQ0bZ%zvM*^QseR+LQh3$&X@J`Uw -?tA?#C6f5r4&-FaMiUfvWn{b%AGF+Xr}`gMx=ffKpnlVgKm1VJlSHoVyD5M=9Rc!MCeLqT2-NdT;Z95 -sSW#qb5MN6!}{JL@PGS|VAFs91>c!ioYZO=61zIp`>O{zzV<z@npkjJ%3&i}nD~DM;;v&W9xBNAk_^8 -!3V-{Xx9c0>6)q3NVz-T@qP%eh*ESGG#uHrA{)1%3wFz<A4felR{+*l_dk23}mt7k~ygn(3C-axXEIs -BqLv4<pZqhjOc7fw^M%rc?4l+*kYJPBG_Y?6|qEvNTp#ZWU&p@=q?^mkb+V(tly2`=!}3VIr2238y{H -%%beS&fcDt8iK6TF=ovU2iJfedPIrn2G@Xckp5*pigpEvdN!}lQ*&Bdq2J#%hXNC>lK+eN<sqpVhXH2 -))h#WK4SQ-_b{D>_Js>Xt<v5`$mM1VJP3TH8pVnHU`h*W1R7c4J9`_em#pl3t|HaYNz$%&SK@$h+o!8 -QqV66SuyvKX|@FGf_PJAs6;YB-Rd6BJ{602zybtB!uo5KfHev<Du<%+7d0xj=l0CU)!vH7dH(1w$qBc -R=796*&vm9|7^Xz%P2(aTna8(>#C#3l*6$#2?!O`HUh8&<i@zi{P!mWA(a{-$|o4oW_iwQFEwk-c_48 -1NRxIH~T|}b=L~27xI2y-RpgQyt%|zC9+X(y6u>vt($5$o!)i2d8zI6QroFES~qVNT~Sr6W?qDwc@aL -fsSfo?cJWi2s@^6q^L~5rdgHE|)|zwPo{y{SWt*QI&>rjO-Md%tgr9muz1Mqo1zgO<kM-IDDjC;YaYm -0i>gQhKT2;%JU84q0ZK&%ItZT0E_NKUx=5*?cGcc)3-w7I~%b2cSa=7B?2fLzqn$xOlL?5%s4{dVAB- -x;dg`nCDZCEw>R0XFB3P_sA6jTwaRz=^Bi7OvBH`c0*ROOVKQ#sF(+cGs4_mcozTh*(?t&SVHY*lw$w -nKMZbLr}=RY6}QlxvaT<p|oN?;x-%G+FF(uz52@>~}EAHxU!vBndU)CbCA0XjtLLqCL>AA?MdC0REL9 ->Q#QISAMA1<i&$R4h~EOTH787PRXx6V$JO*328ed?%P8w;PC^waV)w4R&9?1DpFLaBmr-3c2OL|F3Ie -2&$4scyO+zz+XC&c99CqZP$zO&vFL{Oki)Iw*`cR+ct?bU4wOC};4;mDJjhW*{)t1@6LF7ok;Ru7eq% -XsdXch{AeIB?ChIX2+?<D)gyTi2#*<aa$-(kjgcltxpmf`!OzfQT-M|-vd=ac}qhel-&j+b&egRBCua -#g}+e17UNRz9vz|~kFFG2DWXvH8aq`(R(kg*^c3uG*acpK&{+LSLw(^#6Ze2J1hev%s%X(a56NlnB}< -d9^U$1;&`ptP(}7HP5`N-VgNEVvRy6jM9xA>u)@Vk3Du2x<=&epECECFo%9Ydn}zk_8{HOQ{m25?TND -V5KI;wKB!ZQlLzMG9S+Jt-Q$^58)rV$jRIX0FpOoVliM6`U625X)ca>4XQ&Lm3ZWlN)!`aWW0zO#3IJ -9tcbwSoh$m#P_fY{AtIAlxp@%{8tvhsn|NRrn}w*;XjDXO_*fMwRwt@)IOH~qtS8arVU|-oB6V}I6&9 -ajlZ*35BX+jTCc-s{k(gbUoep}*+we7HV+`6?K#=uEUyq8Qq}@5c-z6KIuGoDQ59(+3T|DTD*`pY`La -JtuvS3B=3OMgZDZrjZ@T5l^M(kLjo#&989pvml+si33ASagtC-#flgEcVc|EJUm`?I#T-DQa@>s^94x -ero5$Q-uCt${k|Dy!baa#xnXyLc*dIiCkQZ$+fvvdOX-DYTeA=nq!6><6$IW1}c5iquOKc^AwMww16f -bx~|1a(nG@LggJ)+eD7GqnrXqG{?ju5mlDTEQLjyIUyC3Br}Q5l0?G_$Bd22BANqq8FTG%KvBBH>3EV -;=7icAkwURqJXIv5#UzzTp%{)R4N5!=(%a5dIjO`d6GAf%89OHi^;{O)OB_14M@By7#B<6yBBCJJqG} -Jsq7iuvm}3iDm0!*(f*;6rAe(R?P$EAn?Lknw7Wv49h-||lFJj=R?VVW4qe|oSBBFt+3z1H04<tFF>< -EMzH4yxE1T25HJ%ET-a0D3^5zXKvQp8{bVz6yPut1TsKwJdr)gaQV0jryhipiyjG)R=KLS(Cukm)GMv -vjmu-#s8~QDhH+jin;e5nZ%EWOFLou4-}OQS%hG4wSnqiniaU{h3{@eHb;46O1CT%|u|U<({BgPP@$T -aOoM9QQ)Of1?k;Zs79BOP@YzH@<cYP(rlw>yte&OBO3Z0Yjgu+R7W|Ig=70OfzP_cHE|lzhzdiV7)-1 -Ctf}U^qk`3?xLd0bTRW5scf_hjYd-8Wq+oR&ZxwNFt(yICZX%M^EQQnWIMor+oN8J_m(Z$Wylt)~Zn~ -&}ido3TOq&;Tqog|r70YP5BmLsCY4kK>(iJ?6Ez`6sp&K@@QXS1X0m-8+{HlAR*;HOPt*VT?xuzux-G -KUOI7O9>w2hJmuDX9+RYS8~)jIP!(_A&pHBZhwIJZSJw<)A}TV}K-v}wg{LBY^L8Ruqk)4XkJT4T4`w -e|teY&#Dv&py<UH`hJ`6&5}F&Y_)S8dhpfMMLXAw?R!ngjvXNv!lC#Rgbm`1HjpSVP`^W-DKJvvSENQ -#W3XM)D2oVr#+2xn!%X3>LFkw#vg|>t81FUn7Hboo6KoLB1J`D&+gHM(}!!Ffr_SHv}}2qfzx6}n$cN -Z+5}mT2(ngJp4K|DTI<NCGV1=gOp_%2CL34Vu1^TG21c!|EiSspRbhv%4m%q$sfneS&bjfOmJEiKj<( -y?dj&lgYOc9OK8DU3JN3(0H6h@1%s1yarJq`;a~S!|vv=h%CYKzBpjYm;t1s6%8TA$?C^$BUag-r?or -iN%*P(&KvQ~2`V%ChKj^<ispjX#61IHD@p;tf6IX-l%VUgw>7Txu?rF7N0kKTFbSGgYom?x;i5fuxl8 -8forX^-yN<qUo2^#9yM*$2l3XAuvoPlCiCE!uxrW!K2IP-3vJXymNXU|+HA*kpf4Op=&HOqLk*-Iy#f -ST<}+KC*+(NmE3j3mOrP=pt+nb|WH_Zct?@3U%6}dv?+Ex3jiAM42H+1@;tMtK6p8Qx>u($`*sHq=Ou -^NNR!9qDY%Zwm?yq?P$R0(iSXh$w3mfBwF7@aCJkq+986<M`n#DlDVhBBQdAM$QtxS>rNoG_UN7{F|l -HIk@D0!?kdeR$br6EapftpHLdKJ`3q~*u8+~N-kgKe&R>74Q=gr3TpfifE;nCy`uY@nY)%cFuX}xco1 -B|+Zc_+m8)~EMJ}2v4OEe`4n^ULtnP$>7^9;;0aNZK<QFYrC?`zHx81?lnj@R?9X3X+5(QztgbDn(+e -l7=bR`dvUVUUh_*#r{<IE5LnKMo}B<=#OA>w6DcScmopdl@;)SAzvzH~MI6JJv{M87Ig_&4zWg(7F`Q -*VO0c{kQX5>G{2sE%l$TH|>Y(P3!A#`l{v)7jCDh&^krejcD14Xla&i+8+J%M^t0AhbT;u%Q4{LSx&9 -ckky7VM?RHp=CZNnUf3q@Vz?M3RBeoQ><U^v8pRN=>EH%uL??nl^Cd!q{Q<OyATQO7%4dfnxb|SPxr; -{4U9@8MQ^mz1lD(jQeQ^xo1<l`!1B|s`dVFyl0WO#uUyu;&57?r_u(vuyqJIk4+G&Z=jth&fHGVeU5Y -n`|gfaRH*tS&Dps4EYTc%9xqT-x~8htZrSi&4CDPj(_W_W}t@2e(1k7-s_<=@PySb^qL)04W`MJ?3jn -nJH?8p51eWv<o8nVI5OoN-<*m7g+UoSK_3jW+79a{KL>wkdTm#98*JWuK<1Ow_VR#a@`GWlw7S!>AcE -GgTfM6|FH<m(Z;fk4@%0@^8+u2{Ecwu<NQBGpM$vwPT6ZCN^D1?rIV3Q1yjYrKUx*$mQJB_|~d+w&D= -f+@=W7R>pET&&#pwhQ-ph^whvb4c8oL8W$R^S(4foDQRpznk&yh<&2Ya+_2QS1#ZqRY4ahNh)?=JMsL -2uincQ=8W6Yut>AGhGF$zDHiM<FaXw^?^Ym$-M^*soE1*#ixR_%cX9U2Ac07klZU<VpZC;rY(46gx*z -UIII>Ao2>CmS3X)8H!SXVwUsJvi3xl15@$YssDPoMtwzcQ6YXg~eh01Nh`gFatzc>~aJ>A(Js_Kz+da -OTiq>d;~8&|&J(VcKRX3tgZ+_Z)b-z2D?IRyd9F7SO#Ni{vL@#}lyQ3E1%j?1=8SMtdGm{nn_1!VlQ- -1nkI?q|u)8*(XPbl5&TVa)**~SLC<J2t_ZU;pEM57}sxg7HYgve$p(Q7EUYI>KLrfXw(42T>)HI0N0g -c^$Os+7UA)<2d1+DTvwph73g#YI$eQIx29pSgx(Dhv$bxhCEU8A$q(!G8yD#n{E~oV<tNsm@ZF*C-GM -@PD0z3NZg1u8IGzumT{;ORi31v?m(l8$BTW=VgK&2s+#Rap9jJB(R=uTXdV2k5_b30ulb`<V$)kVw-u -qAfrw^X|&;Q$#|NUwI_a@l(x3~Om{b#s4kT2oKb&<O~R1LKUw|EC?^SOXo5qem;Az9Jc*dAQSp?0M`x -XMGNO?&j~hz<Sxn-#T(DCpldxv;}n!^S;`sE%q6?(neCZuqq}^2>)M<$mABs$r8=14bZDt_tZ^26Zzg -RMGgx{R+8bgtt9_s37Ccu8PjXiflu*a{s|yiR=+7*{WGCJ^*<e(ePzh?;G@;FQUC_0YbkC90j#NZGPk -|noCKGF{1w9dO=RP_bi@6JSeG>lY5i|Sy2*XQ4(ZN(RFpA9UU`7{lU?{2uB1U@<Gn&gB;C^zNpAOLPW -18_B;F0J9$e$!v)@K6Bh{rfU;=NwxT0j)Fe4Zoik3RK8CCjBsO3pCtxGTMUNBRPVGSgoLakXO}JBnRy -l|lE#}A_wFg+@Dqw3?RhcE4oDw^%Cp5Z==YTTNigtB`HyS;}!?>`-+bdplp~@5uF1$zqiVQ2!zmBN`h -p7XH$+-Ry-Bq%N?xT6>Drvfks(zmD$#P&J*p~Z1Z#E-W1Sro2CA*3KrcLxW$=$)R<H1%(I8cpxh_=)N -9nMGP2p`Z;dvG6s@@lye4%`K|)r`bv&frCNYJe?BOpqAa_XRE&VnH{M?Ea{^N|jZFR@ywc$`2zEAP6g ->Csnr76{(X(y?Ayg3Xd@2P?0HVG)Pcn4i!+Yk>9#iJg5%pUA$405*bnS%9TL1qEpE7z9>|xj)`{>4Mr -A9F6uUy#&ZiZ4#nHlscL*w%g?&$DphTNpQ`TXoL2x-^^T%KOwhI8Jm4~6;5E9!O<fRbLh+n|s@J8eML -|<_GifF`NHraG%i<as6=|jFY1;BfPwprB$9g^ESD9~XcU?NB39Cwqx*GN=tySF^HqQ%$d0s!yH=Uj)I -z`0ziDpuj;cXKi)iqx6!~UdQr{0w{k8{Os;-@w(&NkIXY<k4M&*RN~nMfZ!&YcIH!O!E|n={^|F0IxO -bfG-+k@TE&szI>b)`GZ-TA)Xc2bc58>HMz8qiWJ_3!^`7VJI)!qAF3^;wZ)zRqaDLHM*Rtm|>nZ9(qn -14%L*sjxRQ6{YhIbU>)x9)2AQ*7gn1AiWbOI79?z#txWAJ>rd7<n1xuFix*Zl-8y++Z5~irizaAc&1s -+x>RErX3N5k<<*mY7SXkJxumIYz(G|KwSx;h`;v^3zrYTNLQ=DwVPfSysn5H<htU_6}R#_#nhC<Q^DL -#i3pJOrD=6E?eK@Fi{0dM#Tu(G80Q1ljBI4zv$eaj1%nW)gms7}SGPUT0YvNfm})u}}|(fNi^or*b~% -28!yl~Ri=HVsk@yo=aYt)d%y>)5Q1*zf$0ZB5tDSWvmTB2kR~!nTSkvY6rsR<Oip72Hr{wFEAQwU*fV -*;%NIIHoh#@xy^eIer2*7Q=o0S;Y)WdoU3fnbgNEY1^drwdhCxBwMQg`~PXVJKA4uD^B13kfKJroI!) -Bae|C-z@D9`T6dV6a$vihsNi;0)~gr|L!V)LU^WK)Lycm62J<;JW$_@>mc@hln_9$!ZJR2Fo@%9;QMA -4okxG#x*4>I!k9eFId*D)iM`9?_ERl=y8WYvQCZn>+XpMdCQ5QWAY0kdm{0KGm|Neh@^1uFn|E*O{Y8 -BJg=WXhHb4g`yG^HTn7;2{PRoddoF%W~CU$IL##KXo6RS=FJg8o3J&Lfy7>f%vb(5Q&kG0ss@;IIhTD -DroRn%N{$cGyqBf}g{JpR*j_IU2+*vNl|L<v5Pr+(J#d1!FD?dVC!=;@pZ&mlfMBD{G$i=&5Y7Qx)Z+ -dy+|l1>|0sE2_l6Ea%@23`862tRoRoaH34y(Zw4j|KQM^7{+j*&YZ{{I7AI<bPT+WrHw2qkdSSCT^1l -oRwFbkyTdBG!!GmI=qbH_TnKGRWlFM|YN%>9L2XX&i@L^dWZu<|!>;lsdzeSXs#8Um9?jV|k{=D__FM -Zq+h1w@Nu=umVG62iMZA6!{nV^g+cu1#BKJ9PZQu%bI^c;cd1S8@W#bnSGLJ+g(NWDdE2CmVmV1WfUf -W*@U1iG!q|C}$EgQm$ijj(nk&4mIDgqysd7%o<5OpezUNO8Vk{A_HTyqMd40SAv+`25M+|(G(eThHW1 -I5kC?g&T}>v0?Dw4&A7Vdd1JS*|}A4M^TP?3_B(t~4r!n%Es#*=b<8)M2^QVY$>{xzwRr#aTHdLWhb& -KT4xw`pJvwCpmByu0uwwoakd=Npy>}2W)7}b!Zi7)Qg7?hh03R8LA9mJOYeDCx}BQNTc!rY#9l}w>@^ -K3|cEA+{p;%2j9uq#)#B{Kwum1ECRsSIm|=0;m$jrA6YN6k*CyN3W8NZx5`IXL|9kRGt7}gqfTaro}E -qD*kU_DC_C)-xE+<`ZpS)?Y^2>G17184i(8_Sxji;0xd#2#C@qOr`$owDQbkUrid?KB<|@{<Sf&)YFe -o%kk;x7NX|BpgD+Z>j%vs1qx7wBE1GfXlvYT|QE5OAqfG8W4BdrC!$Mod|tuu=#nptT7MT}M~m`7dEM -A#mEf@)0#d<{FHi|ewXizppm+%8uQ5+8|?WE?+#(*DcRE6)qQ&I5@Ho_qw1PKHA?=pLv-KFE7GFzIw) -(kbkM6YH}<`^9A)Q)JD+YKEWR_Fx9BGPNq=%Pu#!8+tW0FCFZd6~*H1aE{}2tAGV8-d?U@4BgDTM-<d -tTflwZUg+IP&@It0BHfqaX|BkpJ(5)y-{S|sOzeOe>-ju4r&(21HkV3n+M&#=xh6<KQ3g|2Wwr`4n01 -h?{z%v<_-Tit%siD<W;gEinrmckBCYZ=a4~u6Y0G-slEX4L76V(7!<0M-yJ8>|vX@nHVGa|O5e{804r -z}%Yp$As6RKvJf#+CGnJ@!~ZpZd>t=7to8W}ff2C9*9lV{*)qH0y6Yqi60Q=Mw@s?~hjGL6HJlZNW%> -u&7Ws`E2&+)h=u&cM|U*ER#kkw%>jQ<ouDTIXeJ?T4tBtIWW$6scRCf#Y7iPQ{gVA2`6eA2TqIe9j(F -kD<!B9<!LoKnm4kmgpE~8FlLPt;eC9=L{SWoI2%On^Wz`&kvnrOJC1fpZx%MxTYQXq20B)g1V-S`=Cb -b<4kCXKh=5b*qq9lXW$qIb>8oHRp4y__M7X1zV(Nrd%sj~zrOzsJMFu+F6#>tR1t`R%Kl)J&99W<Hn> -H!SKd6!pQIPhUq5^PRk`ptfAi!wpJ1RJ6GrQGh#$VLS#DTu|Bj}wE(xE@0@fxTwj%fJMGw_hvi<s|Qm -cD<tS$r3EaQfq<r~={f5?4<nB%=s3UnFYy0y^zeFTmEfFY-QB1o52Cjm8GhMb1&Ch^>pM7k9|x^Kd%2 -VKHPm+_{{Y?H*?SPZ*FkS-HWB3m>}I3Zi~?Myg5D1s!CME4+ABK&d5eE(23oWyR^C7$$<=s1@)h+{u& -<cZu|=&&0jPhS&kLZs-=X!l8EriN7ex00E9z*N+QYr8K%#g~6zyHQl+*95WdN!&kRSc+tB!FEBEzNv` -Tlcy@4{{vf|5}Q+(tk*-*{+Ik09ufL~&`uRe--8HVMyur0e+k=FmvVwXppSqO&=jJT;6AKT2LE@pdWA -<c8GK8*w+C%xAq001SSd1LmtKTF-EP(;M<*&3<U99ODu`jN8<h%Qv$92+w`k9=ncNZtnCM^lqxQEh*} -R7|GYGisvc`pihGC71r0+pY@0;ej)#LEJ?Q~tzfkO|(ln%VF4dNEudQUZk+W8XkK~lcN2k&8E{}Oh-? -nx|u)54e7DZ3S7yoc0%$O70sA;%je??V!gm(Gj_tc6{&koUwN-zxEVSrZe8@MT8~iNv>RE)*Fwi$NnR -rZxXnTMN6Dyi|N;KW4vYN9>-y#zmy{77W9GFAHM>=-Lbau!S+iJ%@!cJj22m5}a?hFm_KW^fEVgNqz3 -nBtc*}?%}}i$%Ed4!iR~ndsfN*m<h5WJ$g?y3Z4sM{#}fdDH0tGD#KD4Ql`UF*(G0!XNZyF`6ggpY|} -m{U@B(K?g82#5+@b?Czn|>5&FCbb-!$!VfI#jdn`Kj{(!2_2c<?u1XR9rPad?=lfR}Z5w;4R=4;9kB? -g@{4{Ayzn%s)?w5=$etgMNL=5L0bm`-XB;*-RSPH-terL)y6F_%I`iMbRiN&?8e)+%gVV15(Y_;!=Pe -@qhgzNSVwceWf0U&<Nf)ccPpX9PrJ1w^Cz81Z;wJcr){sE!W7dpa8BS|+WR!bUs=wSyq39C~z|w6Dt? -u4fL{Gio948@Jm8K13b;s3z{dCPOUN>%IoUuiv!8d?E7FH|^q0x#MZ5xqj1D-etA9{<%!%ea%W<#~rQ -1N*=lrFDrRs7*A}(JtQYhlU$<F_f1A~w=ir*A6R@F_Uy%4o@hwAZy--RB0PO77^9NZ->{Z<Nm5@1@<g -4|eFJ&oL3h&0Vr+=iT-NgL*~Gi#ro|)rlx~G>hE2R-1`p4DqjsWqN!TupOCoJ8qSJq}Z96GxT;-NpEN -gGbV~c_p)!ZbW{Pezv&<|h_Phu!SmAzwo>`?9i{v0;)62OThx47ThU>^6sZxKrWL)h`M1LD{LaqNINx -b`T!nBW8Mu?s#<Z0}9Et9$AyfuVyMkRXuA!%*M9HFJCqiW=QW{eNp~eK-06{;1tP6<@kF(Wilbnu)%L -M56BL9@R7-6tjC!A*ok8RmQ8J&iYrgf95Y`_D`Xn-(J<k_c06jN0d_hfK~$)vHD|K4SYz)uBhI;oZ7D -U><f;}KO~L%U5pOisOA`fw+cBP6l=ZF(xJK?9<)UGumJ3hmX4`=<3XudKOwqP$>FW}!U^V`IuK{{v{d -+zmX3Qex8K8(;X|rBel(kgst)8qA>n&ELR1&yU)cKLjVj0Qqx5l_OjPxcx5g9o<KJG@$&H!CX;JY(@# -?AI<i_CQ1GW_(l*7I?xOk(>WU7a}QCo6jg;CXw+*o0pdP$}g#s{UmZ%i|)Vv>hNzaO&Kc&oxh6_Y$HB -z|MrQI%@kDhOA}@q6YTNA$zmNM`hdrX5ws$e(K3@j<;L)5_yRqV5lxete7G5}k5xw2^#2Baz=nZ;5Iv -c~Ch2``MVB8awCfHyTiG)OhOa4`>0nZ<z8b+gl7%-V>l7t{=@><wM#E9yDS3uu_*ByOyfdWv(Eaa~ZA -&G$4Ej3z)aM_lFqHTg_r>;E=YyuV+SIFO#!eP5iILmgd`(<lJb7Ran?P?Xc?l;Wg*nnnGALa4Nn3bK5 -#l>kC5{adT<WRqs}FY3e_m)dQ>f_;Xl2Pz?ZWs!|ID4;mv#lXI;1nrj+3PzwcHofZnTZ2K(RjoE@_26 -{DHprh>8mccZdu#eu`Tw0<V0|&EH?E`MrTz&>BYW@KwDgOp_G(BV)_hH3NHwGcbitcMlV=mWU4eS2Zu -&&V_{Nozd#r1$fu?}r~^*X$KeVNAn8mRGy0yK(>pl=OmeEJ7%b^cLU<99(az8#i$ArXNP4kRMTlT9EC -3QO!%B;__tMap%#*}#Wv^&xN~6yV5CHU~rz6vqH6@*={RW)~$*x2VN|SL_#rjS_^t#{;O6A{g;}I|Sn -?3K>oy8|NbG(SaNaZ0Xzp1`YrtF+UW5k&j&{#fR{T0!bw2xA??ACm8VoWTB|X3iRV28cg^AR*=L*G1m -_a1r$8rL*PD;d>5YYF977rqF7#_Xx|Zz_w;Q5JM_yRqLSoK2Ga>v?jAgj^zS3${ul@jh#0qGUx&ScHy -f}wP;2**Zr>N&rr<OK1$#CiYQ+B~P-*0a`QYuKv<IMPlJAG$Wb(67#a_|{7jvQpADuB5Xbh`HMi5>GS -c$>7kr6fT2D7Y2kV>ej>-RKxP|c3or~iIHXMa&>S+8$}mf;!DGCXgGmR)GFcn?kX^lkVsJbw%&CJpwT -uwV-RLOalae_=aI>|HTcSY~M}vXKMVC5FHvf+{jg+OFBIt1G?iVqxm)!gV=7UKf-L1xZOd(|5ylAw%6 -B2`Y+-#DYLw#nTHiKwiV_bNBq41bMv;(e<wcu~kI9lbGH8?(i)UuKiKrTW>*Zo!<qq^)DZ!1>kC<7kn -MDRc=69Cy1>eF?{DcBDRbezz{Qc29TDyVo+~|Y<V~^p8GXm7fByjwKxP1^#GRZ0E%@QF@5LO8(<fva= -!-by3FM{0e0OWy0CX8@<##f)Zwg><~^(zCVds_1&9l^Z0!*rz<NPN0apOm6)}$y#oz|!YC{ye91#$hn -Ctrk=&*2$4)Z?}I?VmqF<?-@QUAh_VBZ<lbq~n(5QOVQ44xtN-wB@U+oQO?Cw6OqQhq$_)?Z;-{|aDQ -!==LG-w%fM1LCa4i1?R|vl_MZ9UxVz3(uHoxk%AM=9qzMyYoTxl%21ua*U2u8LnF(lv+Ew0YcrFfYs= -!Pw)mE^?lG!iVOMiFi&~l5B}0friVaDH&7(CFM9(pQlOikkf$5e(G9Ff`-ImkzX!2Kx3Hq2>*GFxNKF -^rAc)jt>kWeF1}qd50`w3r=oalW4Hn&?eN+?XJ+zOyZmbYFb*bedtxUAGUd{&*K*tY-08;C>H?W_F5I -)}%w=>er3SRu4z#C0nfi?FqG*@N*i^R}81edu*#<;07Xa-JX%%2AYGh7N;`Zt1n`76vsoPULx{D3f%h -XEM(uoe?Rp@DyeRs0oJ@uR{j9=-EU3a`6HsgEE1B0YNV?$IwQ^f~ke^i`+7{2clPl<;4^hJMxQ-}CO@ -7bx%kDnoheSMYxb&xeG62<L}<>%(VI;o(~!!THfYLHXiG#QuiVe)A>t)uZ3O^UhE2{?GEfybP~PzN;@ -^d~x^H^Jh7{4tLhRZ{9cWypv14OE12N&z_gZ|1P}z^wql`ymQz7y)3W4dinhB(WCeO^NVNCAAkD!ix@ -tC_4wV7TXp>QuD*DA*Bp1xp5O7#JCacN{PXfAl`mi4OX_*~-BpME@$m=0CA25em_`!9dc*$y%kssGe= -d((<h$Q3M^^$PQ=fbmp6AcYCojKx{_1i1EWG^W^JlMKzx%=6-B0hnd>KCdB7AW7{6(vTe=aZiQ2eSJ8 -~J!<Gxb#U&6(3@_3rcX{Be5s?&m+hvorjP>*=&l_vgn?>~BA|zwLbKvzL!wyv*&bC-&X@?_3}6%q;_t -$9v|t@7<+$?{SvTUzG>neLsBpWqF<-KTiFf`O-IEcndSl^4?wSMQ$wj3LAR<<NaiQ|EzqT@4_GWkZ?T -u*{df%d-dq<XLpZ#^1X3dil2P)JbY0;`J^ZO=#x*r2+y8>^2wvOH_fvzzI^fWb??OKMJ~M~ze9Ly@AB -!3m(NP?W&h=of}UDZAGg|jbgSTvu>UIW{qEW8&+cBdN_hOqC-qtDB%i!@SDv@DpFRKd=a0U6U7s9}-n -|R2?&_DbP(7jYyaTH0m#vqE{P<l-?X%`CFMB^1j*maM9Pig>t(w~ea`*E`?~Z=;;`Ke=d#pdX9hN_Nw -+)%u8C$`7<Gc*dKP`{V8)U4^O;75o%6lj4jI#suvGMcUihKX6v)@0y>07Nyq;K{HF>i8PP2O+JpWgk) -kpAiJ^^3dk&o7?kE03+V?p}ZP?A48zntlCQY3*22>GgT{*|SeS`&weJzIyrc#iuPJ@Aa?6THm|--Dl< -bU4GGD2yM)N`SSgH?<7%l{^;)C-=&*QH#6R<rqzneJ;gOb6I4RVyI(KR-@Z!W%hEpeX?b(^MR^_iNPq -P$zB)VI`>)FD)?(qS&tE@oq3^X0_U;&5H?{lIyZ`I&{=+99{o~*K!#^@Hbl)%j)35&V?|${`zipFXxq -J0xNzcOPx83=xSAFJg?fyl0ojz-|a+BJ#+&av&`mDTs)r<Y%?_YoR;`!b3{%v!n_n*C*e2>3Y`uU-cZ -wAe8AIN)4>hYsM1-$#6lGI^$o9bH!-=p6>`W7Rwjl18yeD=CLmJxTQN6h>gc-3Z#k{{3fd@ZB@98e>9 -{hZwYm6&DdKQ8aypM3S}ZBA<`{46|u{`5IB8*SgxefK6u*H7O!b90Yl{My~L!XIGJI(_$>Rr2Wi;Ll! -;Y+XNw-{gGj;^1emv`Duz#ufcZn~h&Rd-43ecOObsCboCq`Tqe>O9KQH00008031s8R`xd5Vsi}u0QM -&U02}}S0B~t=FJE?LZe(wAFK~HhZDnqBb1!vtX>2ZVdCeMYcN)j_JHKKg$K72S79^)>N-XKvdc-<aBp -+K&+DbAE%K#fKJ9uVRh}P|I@4a_sUx0`l=j4>+m}MUK{a$TtZ8aEtW{dGuq(+CCi4$7+Z}rolrT4HGn -*|$XX=GxV>d>xtBRN~Bcswy(c9=i1-A?D*)^2C_IU6jPnF#jA;b2DaX_ILo*vt2quP@%d3oV!=jzp?O -m%Vy-WcSZb50B5^9kY>CY$yzm6TrCzG&kbuOe({aXpEGcvRE>=aw+c3>BY~A&t^h38Vx-IntL;DCOsw -C9^42cIi1Cc@RfJfzP@HRUeFlI$Sh`}mq>Y=&DNasJfiW%S4S6zm;ZQke664Pw8E}<>t8Qh|Lonkhfe -FSH`{j0Kj<<zNYCsElQWbWPgtC?*Oxz@{dofbxMp{^u0CwtY;Oez_GjSkeAvI)-fsX|O{DYa;_~I$8T -*9KKfXV^JUu%-Kej)AI)3}=;@xr3Fnqj*uNQv!>>%*3b+~;H9PGotFWRuO?=>x=r4QUa{o(xL?eXEuc -Mic?+(F}hn)HSuO4i`K*4r<x58wcCagE3bZ~*Fx60S8n#DCAFIgwd9^nc<>CXSVoD(DhbU;%G=ti_PU -BPLV9<cKWHYOl0UHjIa<XV@rChm5l+H_;?c$BdAKWJeC+1*wK`_{aB=pr0i+`o5gRnu&aq&Eq6t1HqJ -~1dN=+g4HpbDH#c^5m`x1JR&$qDH<CCqrOAda`L$vXXqge@TAhPNGc^F6Bbl7hGN9V!t|nv1YhX^GT$ -Q9O~jn?sc0e@axR8V@R$+L60>&>B5DFeHI29ydnY{6Vu`m?OTn#Ju)YJ-XXIJ9JdBA0t`<3IV8OVd#m -7vfksug-hq&LgGGRPr0woHx!C^JWH6=`@QWjUZ!f$O9%4*NaPlv#zUvT6Yv9=E?&spgfHd@@b4<Qnw{ -NjS!c9c6h%iEURsttH#a};-+MxSan&9p&{JBxd&J@$01m)K89KiIby{vzYlpYoXx#1u*j;M1^<MRKu( -HcCwoq)Z;rb5*^|>P$@*oA^#7izX-vlm`FzH_8^YHpnobA_<WJi#C#Ay#fjZsFF-I1TPTzl4cRCqYH= -`+yl#nTU<LPnkZ_ihC%@(#v}BbRe+_DL425U@Y5ttOIOh0dee-xO<NXiZjKc@&6({pgz2mnJY7aHM>6 -NJnLtQzwAf%*SZ%*z3Vos=Ca2^B#MWeeCp4tPX%1sisv)xtT~b6j0f+H0H$GxllS%damnsu|pbdg!zr -WK5;rIIsq3wflo9WQ{RbQsKfgFOWa}eal1&ofpno9dU$~S>|xIY^8`vl9U7zo6o`?P>!NVv{Wf-mvNS -R?lwLV=%aA1ybi_*l)raYZESFUF}^y@$};iJ-hq4!sHizJrb4eVSU;P#Auy>VEz`%iz4X!Lz-ccBjce -U+q+aUO-)K5;!<#+6G}mTwwl&`=xvfcMd9C)ngbMx9{y>3;~Szg$VImrrxTc(6Tmz>fqf};=e>SfdZm -eVUdYBVAW{5L88{F|6fE}#!)b;&kCb2HS1#L?)Ixu*ab-dCKSXTLq2I)hPVfj19!$kg}=dzj9RQH0Kn -Cao~jRa31&-j{}Ll#$ZWGlDBX=AHdGk1%zlA=TL#LC?u(4-4`-n;rzF;&XHTD3WtG_rvrbNkwJ7XoFd -uQl=9Ab6J>!v}Kws8Ym6Vkz$VpI}G9;NGfDAb^*(?EK?V%!tp%K%;dM*Ho{f0yUw^l;2r4V*P;=`{*z -2%!e($Tbp2CFb|7Y_!X7oUCyXCTy%w<2O@IV3^9X_eZWfO@dx@#Wwb$E8bbun_ioaI)81;oh~QQ2u~o -u5RcDvP8ub)?MY@5E0G%z)BnsXul#(K!$7iscwxMfFEKb4Nce<+hWgZM}y*MUHbSLfYser3tP_>zyL7 -_69>TwW6Ezuk3(a;(A<EsMwK?t-bNSTCXSea?w;AB;K_Mw1@6O*!vy6~BDvF#E&?&)!OISh@bO25+gk -J`y6-@;BYUi5)P}F3LtK^?5!(qnRq3KC)!nb2TqVGsnS#)ELdcC%e(!hif%x;)T@b7gR%w-+WtLb`Y7 -Kc+D!I)d>-lrNJwYu@g_+2qU%i;CQcuKygH_uyQ_~r2?#JTZQK3L1hZ7OqqHHkip;M)JBulsgMzE&Ws -8k2TcJ>@xZpM{yy|N937Fj+75clAh`AiBw`}_Mgy4I#!`JiZt)Y`3OHoPZawKJ{SgE(!A^bP=m1X3JZ -c=plXy$-L3!GTw*q$tE51Jpv<4Zr!_VYXB@SZsz`mU)i{+y1@5f@vwECE6B*MQYD-DHkxpFl5W0Uz3( -iybv@JEm?$yXB#MNH))EK4&@x@IwHypA0*I`#t9me!PW@!UANo#H6{+b*Vk`y4d#y_fP92D>DL>sAUi --&shQvJd##ZNy&H9TUaK{d(sO-YJWi#8JPoYC)=a1bcZSlLFO6gX5aw~W&sqYG1QyM?G{VM8nh97xW; -`=;ihj+LWWluHs&Kpc1lr@gi1o#|TcBCvuK;mQV^?g25&ws;2{m5H!!Sr&+(UH1xDeu4&iAfUudE(ud -w-90%8)gRmBxZA74F_umyX@khCKBYv~p*8AXFX*t>K};p(?#iIbnq3NKCl*WJ34IXKlXhs+tn|)o%A@ -HDA^~K+QdsZ<r|VYvi=N;O45ebF&=gPm%wn@|k>LxoxwHV-k671pDEs_OC-9O!QMU9ex^c^9h_V2oAo -+l7_A{>%-oXdLWn%gw|Ail1h-zSg`C}OH~oOYE%~G5RKm-P8-Wv!`GYc*7J{)!<q9EMl0x|{5cfk -RnlLCu;!<ifU+o~AcfO!)$P1u|Fug*>n*;cFF{`vV~yM1(d#Qu(xeFhnuy`w=|yM27V<<*>E3ffqC;g -CzSEI5GpDN402(G?x%lGtO@aI9oD^LJ_^#j4&*y#^sk&Ud#98?CC*DF<2Yt<%s0s-gIad}$~bZw2-k6 -KX6-W;w!K7>>#ZEP&+fVRb>0(mjOO!*>f2hjYO6zyIUNtnWWWATQ))%LR<Gusjz)BNX?TfSBRqvT#KA -EMH|fsVx<c%NC9e-X1btRp+|?el1g1aQ&v*E&oj{mYn^O7F4yO$N46$VdZPz7F9uBb$2?Q&Q0Ay@;eV -Rf|2KLnQvHe^<oB$jkyss9xFd874`#Fg`8z+9Lb>o=Y$j)L55`Xlj?&+q+|FRL$84w;MFPH`IZf0qnl -ORq8Bc6>Gn#T43XA5-6!k>3r2Czr_gq?quuWy0Ce5f#F$yP-JZ|qp(87lYTO<G>+NXLc^=M&qbgp%b3 -gn`)Pc6ikDzp5JDs3Oi&4id{)u(&pN~dC(HBBm0SoKdF71x1p6#-=_=qo6=Jwr9lk#K=$HbjT_By51P -Ut#~4BVR;j9)f?+p<SyW|o=4x(QL)LJqhVJqsKbJ@{|Ch6{dv<MMba)bdHccJvwB35xTCCvPRISe~(* -OL+7ElwVc@z;J1;PjI3RUA>;jEE(ck2Z-!eTsY6iR}kRLBajtexT%2-%Yp#ioYJ-USoeS$Wi_^*!406 -P>8-6W9s~#`BozoAC!Q#L5ItDZ#|#pWuKOM(<(cvc&6XEDnl5$KZSCIB15^i9A~(p{3%puhz{1P+<aD -W+On~H|6a-?y|EKa!0Cv;N=SV#*M7rk(OM|VquJv}a5%SIw5OaXaQCAH9O0{-BHhq_wFX&Yf1Q*KK3e -MMEGts6rR3ro6_KAFiROll%wb_Q#kw{s7pvp;IbCFC<oK_+spe!^{Y6mZdd|0gI11W8a*U2XtEQvCh2 -~b}g+4s))HVgy}yi&56OLglc@EWSX1gra*h+-<nf!w#4v(KPVQ$GsBn|NDiGxx_2SlPMi9EgXf%+5o& -o%Go<1`M$-NjJpwwMa%Q?@6FQI>p#GrPq0sck(fM24xi{LI`|I>Gg;f**30jTlLdvU<QJa9O63&%i{@ -=1i6sCzdUJu_q{E{oKufDwCAYF6#7=$FRnXZh8U32ZL}f`0779ult^e^L<JY2!uRn54tXDBmOz7(wsx -90GmR!-1arR7Bz#>LPAyH-xXE=8j&UzDqt<s7XU&rg6)bMIn!VrKRAEK5l*d;(3^$vw{M2@cS;rrcWK -ZBMwva-;>(>Lx8XoEgY7A7-tW1|yS!uE}DnHiEnbrx9)Ue}iARs@o#^`z&KY9>4rg6#>S0duihYS(wU -iu3R3Onu^?y2eaiaAn|ke|sV(8Lfz1F9wSBjXJJ2z!jlS0TwMAISp&<xssQtGr`aYffuafIz|=#L571 -ld+N&LI5l8tc-nYnyg`}M#|Md;*_1szgL)YUAt}?EHef9ALsE12$O8#7#KXtp`uguZxLm|$ubYC9-7D -hjUJh2hWBZdNURBJf2Zcxeg%2Kc_i_#m+%6V6OhMMvOp#W*$C4I#QC8pVt!bJb~?Wt-0^2PN-}6kg2w -*<P)h>@6aWAK2ml;P_Ex#nB$2Kk006?B001Ze003}la4%nWWo~3|axZXsXKiI}baO9eX>4?5a&s?VUu -kY>bYEXCaCyaDTX)>Jk$(5D;5sL#TN9;M7u#d&P&vor+bAPjjwNTD*p3>_Mt5_}CfmGNl6Pl+R`QUy` -DI%G$Y!Am1nlgYtdcX9NPMUZstN^w0B+yDeJg^W&CPNx^SYWW(yW$cr62we`MIT^J}>4?CZnXtYmw$@ -zKjee%8KGcvxyc>p44fPSCPo)(OfP>lhqp8);%%x93{o(rc9Ts`Y3wT{TdzY?cMwR!QR1PG`orFm5g4 -toJF-1>)oi5GJ5#>;`_5#=Mz&+mL@W<<Wcn9`D63`^yJZ#7w1o+MNtBM;4%Z6w?Wcd>3UO?byUh*w-# -lwjyCCLa`{Q-^P-$=RZtfnWFECe&+8II+yxHT>g{gygS@#a%K2{eLagO(^rS3{ayR;MmDaM_hy)(J(| -lDLcv%;hy1x2mBRw=*6}Cj5>c2e2n>x+9!b@3SW@%Ml78_ts{gvkEk6BS<<}bsSdX}sTP?~xAC=*rnq -Ntx1O%76>ZB*N7sXX*IS+h*HI$EUp{L(zS?Cj^(Eogc3#yq-A6rr*CBM05>9BF=_T~3YRh|Z9p<yC=6 -^h(xEnMW^*Tt?|4$_t>S*qq#M%{E;`eT5Nl^z`KP;>oLXQ?>djO%?6)w|(jN#w5W+a@~+gR;dacvW$2 -7>J%4>)bTMQ+`mQ?p}t$_PbEXE6x9N)PG&ckssf~y-RPTd3f%@(ub@^B0yLgiwaDvK)N<Z((7KapIB> -dBMjOyHysr!GL7i>oDd4j7v-*7zT|qT+ZhYvKNGl2Yw`{@Ic*lzVSLy25-?&}#KvC8h@NC>mso%=1LT -W5EKNdIRQ7gu8%bu%I^xFv2?DZ?Mj5Z(ABNWMHDQal^Vi7^vPDiSmYHM9Lsmwsj$_rZiAvSaQ1r}o}Q -RQ3qE=#$|AW&RZ8<{|ZjB6DecB4-sYv7+!F6A}EG4s;Av+N5QnyyF1+v7~EXLAu<A4S(KZBSkfjkLFA -c`fQ>r5M%}CW>u{S>;&MMGS+1l@J%e;{mQg6a8qsv)ld&uf{vrCG`8~KaMp~+Z&AdSj4xwkcPY`TC#- -3@);)IYS0mof8UdD<%EZw$>}GG8JRQThS+%zjiYTC0{vWGh@}a^WAjgMLEl3smFbSE<rVtDxr}PD)X^ -g`y+qsf6^ZEtD(a$1A~)cCN9OTVRiSE_Mn{o~<jN>pWXJeJ`T{&#)Y{n>nOH8t+eOv$GKr!K@cg#(jZ -!FHbXBdkB21@m-n^Mkcj1?dv&U!Vx2Gp>o<A|ae)sy>bgD&}PG6i|z|&Tc$t3y&W)8w6E0F{7qoe3xv -VYi-cu`zI>m|i9hiFsvm8!_z^3(?u{fl;tOBJFnFUOV47Ca8BAJZI@!IIm8x<QVuzH!_Z+Kon?!bbz1 -)&9I4fqq6%UTH`DtHn^ifM(P`N+}~`i;A5IR17W-#7j8=d)TCz9G9bav+-}Mop&=8vPS<sn*3Cx`S>m -AI3}`6#72&xiXH8<@QX4lV_pmO?-ucXXQx-4i94-2GI=c_B>_W$jA;i)U+{b23vs!9r->o2P*hC?wmT -~(R5A75q(+m+MG^t}9aZJFT$?&+LmDWhB6?qP@)BIXERrMEIw&H4Ss3kVJU4}QtQzf3$EJa6+s20ToA -s>7213K5A_u3aRg7Fo_)nTZbf`3<imC=;FL>y?cX3waOP%WqNV2Z}pyWQO#7t(HX%3~!cXlCF=2TqBH -}DH|>aX)udpbB@DH4=YU#!5>;s5KRs<WG@sUUb}x^2I|cz&vChOE6RAbT&GdehX=)e17*o1)R#Ko=v# -29$rDf(TOQ4^`2Wi3E-2bE#Tf0Y-D3X{S0VIeGjf5aBY25-Pfx;MJ*Ig(#z-NEK+r5^}!h4aB(_a0od -cguCf<l(yO#K>&fQv<1V93^=@or##x(C=zQl?6PZ_<LJM(CNO&UPGp;v7*U%zf>*Ei)X(8;A4LrS%pj -7m@)qF01}w#T?Wb^P1LiVwkidXDHsBL<3!5qh8yXD&?%IIQK^gAZ0B3m%@GWBrOo^f};Jyt=ix5i>Y` -_OFTfdfs4KOJaMPR_p2CN&0%oZTA0eKKGw*l8_2q101CIm?KSUZ%f!XtD-%)3gLerrvLwbsHVH3krCZ -Mdltz+EQ8X2k@@0Aj5PFHHc%T7jbgfLLp>mP@~uh_yZo1%U@dt&c-N-~mzV1$Q?BATpeW{NVxdhc_YP -dqAx9We6aMwVsEJPY^A=4%w0*w)8S&8iLr;%aCaZqSmvJX$WE(nOvA&f8+!l>^~q{Qn>;L^?+{|MCd- -TaP|*C;eb=%AWVU1=`<w6oXBt*l!2)ARY->U0jJ=X!O;#rz&`c3t{rR;rtmG-l9$5#j$2E^6i6Sp7Mr -Rb4)+K9)V!4p9E2&5KCYD6Oq9bE?(UJ6eiZ`TC4f~?eDImZK6M}k@TyhNOaN+!RC-es`MkL5q6Y%dep -=Vg5C}kfQADBHxMZNI1E$a;Foit_0FkLi6p&Ds#GKm(Hg6)d611&c(cxO6nE(Q4?zonSi#8ixzpbUk0 -07l*10=OpH3HGg6G(6mpxN*+W^0MG^y?5{zR$Jf5BD?^2m$7YR0bCfOyMq-Apn>YfEvBQNXwQPM-54$ -cNqlGV4TP_8}3C94)-X9Ab?U>WJTeLONV<TYLr0$$(I({$B(`t&7PouG60|>lvz>p@`$Aan*P+qCIBE -k(3PAoS-WAt0qNsr>C%Bg05(FAyndU)eMZ57!4!zcEs9cP%r+2!c3JW|t?J4LARd=H5g2fX0+!yaa!- -)x{atbG)zV!-gnpcgb)i;Fh5&R7^l2`tm9M1*iQemCE;FB&XlASkeDYEtYOR`*3Sa~FS;y`ja2y=mBk -ka@Z33W?kH;7SAS^9i4Q&BtREDam()F+{eM{$;>XMhY0Ee7{ne%h!eB%CHMuC^N03@qS>4=Q7M5A|J) -D8>=JfNmAt0W742yp*^0yY5vGd@K@ejE&BRA@uN2Ou6-eRN5I0SgY`QXl{wDRvZWrZ9lc{(N*vfdNFV -i3oHk2M<{Ec3^PyrWBeG1;HtB45mO^`lE{m7WxjO;J_e%*rTTL(WNI$fw1(Qra&>60&!7jvvry`)u3t -Y6PCc8H@=Y~Bz-ii%xLvC;J##9azL;QM6He}W>YvMo#MP;?q&n%&=M&40e46{IKmzQkU%D?o3*#4?+~ ->nFaY=Vad${d%a2X!?M3eqpZ;Uv3dh(VXo6K-)u|`J64W#{rA)jOz7;f7CIP^VQ{XL!0STwz2T&P=N) -lx@=s*Xg9oDHMH?dMU>TxdXwz7NDa1KMVS=y&l@nGH_7v0;NlOAa9up|pWXRwmFYs7(ViN>Xx&;8f{I -(MIze$&`zS><vmJ;O5i9|1TK7(gd;R^FCAIG`(jWe`9|?752u2GBK>+(iQe=)kW`^$^^eX|aX_)RtO+ -HPeCtbUm&E3^~wUDs%_1y%a}p;?qT_2cq*D&;vOzxCbIFT{t}mQ{bar2L@9hrcs0(=mF1{92iW2n0Mj -G18fS!<BBSCjQlWwdR)N=$F>7epLQY;1xXX#CXfm2@6-OF@Q)Pt2!*6@K`;fP)-+$#H$EBmB?ScLW)4 -UnS2z(EKqw>`B==1^I2^clk515<IRS#f0Aj5xDax9WzyLaa*oe9G0*G2gCO5uWhy6pE{;W6kjc*J@Gv -i#$GS7M(0O(>c$eao~&c^_vr9~#Z4R`O}oU&9mrH8`3d!(f+HSO(@;od!B-p=V(%a-<-Kit@%-U2{2L -&Lqiu1mR0t6G+F>qr<NIiScPdj<9Oy)RCG5+`6KvW3f90Wjx)dR5Af23ZmTfQzMazL0CRuc6ZymO(fH -Yf&XlwnbnH1R$G|jj^myN$2@C>NDrz=nX6ppT3c<xfTqdnE=R;NE&J|;J^WB%2MVD3V;}JhXdwvS=y7 -dSWBJp{cJwa>OS2X`bI1MEX(2#!+PAGe=CU|W3U_t!h#U<iR&vD5ep(IM41~0VF>Zecu_Q^UzWulg`} -Tc!e9uA!*P{f2V_|sP>B2_bFVB5VtcVv5yKB5wh=2w3&=tYHh$=m1VipTpsoL%9|HZ#0fjsYQ=zT@I1 -Hh!|0KxRA#MGqVF+#gXF<lOlgHl&snF%E_#_CSNmTsDFk`g!e+WZJx*4B_8KdGq4=b4(|BEnVq|c1c! -VuDd#4p1T+Ae<zL#Xk;3Tuo~IS*5z{&Eq9P=9$Hgv_Xo{W%Pw{_<lOLJj6k7(xx^FJTCcmVXUHsK1C1 -<StE8;#n9%TR#aysEy6T5ZWU<yKoyqZEO*SP#aqYA#}|;UWFml#?ml^+SpHF2(_^fVF<OcEDWJGwhlv -ROm<`z6hg*fu`?U9A!KGE-h?4ECVvb=sK2=KHv*ylQiUPZUmS@Qg;0NK!Vu~&pTZF8FIPbb{n|5jCZj -fl`pZoiLjC1)7()H!p*y)m5V}egf9FmvF@*ZdBX@F%(^1-#kKM^7rb7MYi95N(5b7^a-N_|}P=9&mPA -)No`pft3<PztW)c8-_$t6xmsKNZvom^tZsFHthCzlvP{pHl1Tw)0Im*?)}5<ys={KB1FVh9!g%$;0f2 -=$kj?&K0fsK5Nlom^rF^_N%f<PtX}ZT)k1a*3(X{^i1*Tw)0Im)Gv(5<{rJ{MnscVhHt@AKl3%hERWb -<4!Iyg!V6gaVM7;LY4eicXEk?5*1&#lS@p6`pe9nTw)0Im&Bc1A_$$mjOXs;5<{rJxaMsLg!;?Eom^r -F^_QhPxx^6aFDrL)i6OLqN!`gMhERX`$(>wc2=$i_?&K0fsKI3J<Pt-uzpUNKC5BLc$=%5%hERVg+{q -<|P=DFDlS>St{mVypa)}|-UrKj!i6PWqDtB^;AZ$*lb|;q@Lj9$2CzlvP{pFK8xx^6aFIVp55<{rJT) -UG?459vV<4!Iyg!;>8cXEj#)L-=0;^Em*$KK*tZ7%lAjyiT1$9j9Qp9)p7-eBy9P$jqfizx_0sFFX2W -uZ!TBP<A2vfgFvmxTr;wbeMl7!68#v$3BF4N7LaF~eX84N7aji#c{2$9Wh+gVMFXvvBM>jyFLFn;|Jz --o+Hh&f{2bJ@zV@O?TA7DL;l#OKyUe%%(dwE2sPzLM=H7L#QPKUm*y!WW5d9uQ4`!3x*5&Eo%HY7%u1 -svhhXGE9pli@oCUs=ziq*P0%dalFiE?gzia>&x2-3*JR_@K^tSs94~_g!<IQ-1`USpz=+R+2E*1Y)Om -8AXsJ3r3Q?!vWRi8uc)U-0v0OMa5<Ezx8Y{yPHgP9~PZkBC(K5|LR9FJP-Mnf85rlrHA6r|xdsq+QtD -@*gnb80hs$_B!&B#H8Eu{rzVRL<_VOgkIz6#31=K4;<vQV?McTzhbY=?Kuw|Hw9rb5H`X^;xt<sI{F- -i!*hWV2^`I9l?Z-f_RxdqBx-uXnso=Z?llkh}Ej!}xg+LO;rntqtEUgJC<qV|&ZDOUY~@m2CR%FbKjj -CA#gq#UKdFVXTecPFYwAXK(#>$-<K>y7}9nFoaTRw|{$LGTr|jlMUbwjj?=;ZUJ{_j5@Nl3EZtQI^ea -pfx9%uGFY?`9IL<wc~m&Ma11$MBfiEzMc~*z4yi&2!d6DG`3_KFDO?c3Rz}P&a$kg@pIgVTgAlrrJT^ -PYJrK5)JTAi!7WviYa9>lh?c{M8hA=96gSdw=wxv8S!w{PEX6nEJA7c;bKEt>SL)gUKtQ3y<KCEQgzm -#DJWlT{?d`<a)?#k3u0ub80E}JyV<hrN_A`IV%-$Mo>4Bv_md2(GBeC`s33zqZOh12;lgvugv=S(+(u -xZ<eK?v(#941Mru#rU&!um?HFW;vzmR*>A_Ff1znB0xQ5cZ8?;m`T`_Izl4@AsCD4f=8WHU2PT{EG;6 -nsHU9H2PtKq22367($z}c9X#n8u~8WWH5w%5ur*eO2drNrc~zvczZE+AVBQsC<ufe2@o&C5Y~&SE%n} -1fgTGGFPAVFttIsu3}KPqoDATxWO_6}+!CQE453QyPX`!)u;T$bDinnww6jS4OE!)p0%CnefLF<^M>f -0Pec^&06A+vI?_LNuOS8v*xG9<V-7b3%g!+EBm)`?n3qv2B(jW+%i0DrY7%~`^!S-hc3__@q)0|tr4P -ncICqW1wS>$OTfoCg;uY(Xa<f%S7>0t3`ggFmE*Z~4S#i=t)g)(*?g0Mpb;_eiIVS{1cU6^wOeE!0w) -bvRLUM16`1Yl$lfUv^^RJdUNWmBPh(PBq%B@lW7K|BvqVbdM@5CSiRo<a~i;xUD=Pc_s*1b!;CUDQzo -{_d5YMG#kOmRZ=4L-s|4KEJ@<E-X<jox@j5h5Eia^uR9*TTC&>9(a_@&OM0Lu>^i9^yGtB9ZV2_(0<< ->e&B0;dip_Zjz921m@Mr92*bY5K0BESXVQ=JWEL*Kj~yWf53FeG>*C!1afD&Zf@({)Z<&LggaFyN^J4 -`BVKcpITXVq1n7`Ccm0<|g*sOt8@g^kflQVUOLLg73#&6C<@K9mLD8zF&21D5F=qfZ6WuG^cVF;VK%A -IsDge?l^PC6LE2Jh%Z1%$-IH)fXjOa)h-%nnu9LWZZ)nfTjt6$br<9;^@-!5*2-^__)#WZL?L+buB_> -SAXh2s>aQE`nZ3k64J$LJ)SyLR`4=B%2C#WOL4f7s9-<a7=dCF2+7QaAOb^wj=et38g*kW8;@)5g3WH -ub?046BoR3j4C<J7wX;@`mq*<&_q$CyvvfU^5R~MeG2HtU<jqsoxCteg&n;Rqq7&>3lQw^g?M}V!VqK -Z_=R|T{=zVXDp{Yv;4>I@1Vh}N!7!|3HnPyCF!%@W?0Xn<4ufyvj(wn;Ill?O;?uOJJ&R$O3OkG;)~7 -M}WMRiK#O@^v%f@KCY)@nu%#_$HTz?*ednC>eWr$Zdo0VhNH-_*pBGg?_Od1TK;`ir13^B%5Mcb1fJX -F|nt#$T;bDp2A@uAZnoL<R~fQa$=53YWn9|8fxYPRr5sW^;ZKun^ZiK(!UC$E!Ctl0`2rb5HT$3|9)G -Xla?Xj7^aE&N>)n;SQ0T6k@YM#~%5Ndz{8Mi_Obg^w|QutnURYB3bY_|X=zIoHA`3)_z@)*^F^t5J4w -NR_+}d^~xu&sKS|;<L>8)HO~=saakHm!8=$;i`1b5#T8THr-K|P2wHDuun8a($v0a2}-7rG@tVi&M<@ -@k}yvpQda5UWEZqP6+e;lG~@jkW{g5sO}-Rmv(7~09471?%xN5}inZ^EjJ>@>_Ayv4uQJEM8fb=uZTu -`YP9H;#%)jf)3Lf`u2(_^l=-5l;kagmJs~XpyA!L?peIFn$TgDLTFMpdAnRmqZ?OjG?=Hv`fnbX$)n+ -!r+RJ_^6KAXExR05E$v-r8Y5-nd|uEj>3wA0_51_*i-&u-M-x(4s8d(?jZb?$LgjJ5YT_Lml;n;g}9B -)$9RZ7<T6|M&3Q_9?l+u|IZ5|Jf<$t@`EtS6;gK6&EY^?-3J$`w4N;x4MG&7T~L|IBc)Cek3XxxaaVL -DXFd&jk4lOmI+|g9fQqg)Bll(O<L<)ht*wz>)q&Tl_o1)*IJ6a0xgzR4eG1a{kvPJy1-FA?&`%C93~= -H7X-Gq8_LOYqO_-OG3>84eF-U9cR8!Nce1_TFcNdIsTC)>I&)uYp|B;i%1tJhO*)sM>so=IY2>=h5Z< -W!5uwI}E6H`Wp_Xqnoo+1{o@pJJyAIW#y#j}BI_xU>m9JFQE$VSa_5KT7(Qpgpjhq^|l~8%5DL`DZ)2 -F5{>Kfdx26t05zxEo`f90yv)+@fm8Cy=<n}`2z&Zw@K-`+SJypdQ$c~L@gsbSGrnZ5dL^36_UuC%{O> -lKumr;7!2!`dO#V@0_&`6t&xeX4)dnz~k(xf%P|$&4k8zC8Q*?PyUHs#(=7Px_zF(5zNLO;%Ao*8Dwf -ay=gE3+*6pzbYC~Pw(04Mp8{Fx($SG??$(Q&~5GH@Y`o|bGLxF($-o{qNzn@s;@&vUc|I8<oKGb@_hF -t&HWwChCh8nbG6d^gV!(9Pl}8p>}&v2$%V?06o+|XUzI%FYE5x)q5il~)>)KxAbN-@RWC*RT7{%qsG; -o=o}n`OK6}k;+DX!=+vAm=Y}KyAn!2vFy?q*dqE!bANo^fO>A!Mt(ynLJu6pfyJaF@~E&^uxR$ZUW>= -CeS(Fx$kqwR~4b=~>)vF*&}US(95QPyQ$TyCF^x4-o@^02^avUK@xh<7@ID3`Kx60N<V2xc?gg)&_3t -K;93vMfq%>f<NZ$`?WUR<aGe-<EqN(n_A?eer=<smrMwi)B}vxdB;OwpJhXF1airL9BEsRiA0?KxBaW -G$+b6x12`$QSaA?s$m=Qgi>*YeBbKYH#bXtoBYJIb2aG&<TtU4`CQ+_zBjr5Z*a9<6yh?SCcwvfZjq~ -%H?{@*1|)?sk;aU7po_{fqm)QRH(iCYOp_&wa@pvs#C3dBJswu^){OOS;(e_)!@ChRCHzB3_dcpI{R< -muP{ug)>s}A7cD5Yn)Cxwwe*V%r(vY;aeq4!*$3_2~R_QF0Kdw@6nvF<8qlQ|{AP%?l6Uxix|EYQ~h1 -3r5$<)X1HXm|51MTy1)#s@_imd=ApoR8UbfFUO-)}2!%kOr?wdu{&J?Hvf`6`;-7^o>X=_^dN0SahO= -&Zq{p$*zw=iOD!RaMjJFaLm~e%zSL+uPcnpFDni`XqXMcCj<Tbw>*U!O~T&vLaNq>3-YVtZ~6pRYNx_ -m@2&wDoJ0&u0wvM&8t)DZZvCZD_3gCYA5V9sp<Xl&*`+SuM;wQb@J@{i{HOIJ9%+&^5PkY`T9GM_Th_ -X@ZUeZKD&5$adP$|dj9a$4?84}z`chhP87W;YI$UuW~&j%&Od02hbpwJFq)WlzNbBAt0WWXwLj+SAmL -plwSt)1L<X)jzlm1jlLSRe<**wtQ)oq~BS-4gB#yxSYGiAw9#QI1B{2ZaaGOnoi_4zZj?tZ6U8t8@m8 -c6C8%24uo&gSW%ib|e(k2v5lxFta7DN5Y^#0Z?I!FAKP2=y}G+v&ZK6-WbV|0G<?1i)OT~>TmSy?dg^ -HTYWO0(4@LmQ4v*1C~N3R;}@VQPwV?{=smG8lVy>Q~bNUDn$LB~<M;htF=Jv7UoimhuMFUNrTNQ4Y9r -BJ$2P)2eKs2bqcF!?IK>Adrw}1%x+8`&@t|)BndVUNyAJ^>%x<^62e&WZE9O_9z<t@{iF@XtWO*G?=$ -8uMq$I5=3W_YV7#S-$y&|?QRQrB`JqtRNIN&Ye6`GcFU_;<cU;c0Nt7H=)5+AloFooM90U`KJOT-Zjw -Q3$WTzlzaX7;K@}-Ywo@nQcQnEy5ED+?=@p15WZ2Ta2c6uvMj|HXhL^7Kg9=5zJB~*1zi*;(N8<O<KC -hxvx}%zHSFNggmyhf`5FE0dl(|&SNZ3a13al%u{@P@xV^Gl{%$Yv1ouh64QhJR>RynPPW26#Q=3Q+U+ -6sA0gw};~yKpI&@)}B(a-vQ)NHaMuNAI?YT=%17Y-6IDix^*3Dk?g1PLR>OQ^pAF^Ad)t+8oo0%}U73 -t_1}2R--f#t|a$Y(rJn3mFB&v%GS!4X0PhUq@9bhSVxzwCNJAiKE`$InkLze`tTl#GnC(LGkJ&QTKBs -&hqX*_x3{!i+m^_%r%KgKTN!Q20$>%IN&ad*DJRjy-K}Nt$L8NjE9)2xtxGI-Ts88j5~vSM&Zx#&ojb -yWs?0~do_V#NVac;%1|9amSj4=9#J*@s=*o3EVw!R+MXe^cQuU<~O0{<I`a_$;&C6nAQZzF-olbMe?@ -@YIEEbW3uKPw;u5&k_)FvCcy0y4LD;e9V2+Y?)XL4wULXBl0zsqZrRl-Oiy_Rz`>$!%!!c0uIsgIu2% -SSZ?qbe-{ks1n+q->fxG~H=uw>nL6=b=Tk)G8g!SoS9e+l)p1`|C{q4R)W(jP_91W4LXrYeR_oZrAR3 -)RQRIse&03lR>`;a{AR<RrcsTQ1OJ17BCtaV$c)!Rexo-m~T6(?IT^~F}#7;@_lgyww2%DM$+$5OLe# -}4K%-rUdeR<x%G6as+zV5bY<dmyNU;PzS}y2ehe9Pq({ls#Hvhv%U5mvz1n1Ht-am$@v$!UcJF=LI-S -sM^O3hKe5Ohibvl3?@9%0|Ys8MD3vTO5y_D43+$Ph-Eyerfry}i0*nQr1ZTCN*q@zpq#4$a6_FR_Bp; -)HhRcdm-l1Wpm!B5*RdbOwShHq%X---dc9@E~+tA#PSf4d`po%x#&wd%`mcD%?Xd)GCM_3~etJHy0y+ -u7uPcl^cE-ax_<qn#jB?7I6%V<i}~Yf~TOtyPnjC?Ejk|BJZ{b9d|3)05MSC$G-8*Ex+;4_Aw2y0{q~ -=~^DagA1`V=3;WVQM-h$mzQ-Z_K8AUaJyL5R_0o<Y>VoNPmn=Pi|Wz?D+q1ze%#+yJuvIp7B^9&;{tw -gHqw^S{<v1o+m@rA-j-{>?dU5z*AKcfKi~RaP)h>@6aWAK2ml;P_Et9_c3sj2001x*001ih003}la4% -nWWo~3|axZXsXKiI}baO9eZ*py6baZ8Mb1z?CX>MtBUtcb8dBs>?Z`(EyfA^<2xCktFo{(k09t`9m%@ -S-tmkvpaJs1W>OH@KsrZkaCYYf|G-yKOwl&qvFFkk}O$mHGec=x-1n$PDmz^6Jq?1eHq&dYkwjS;oB> -;D`-GrRG-XMmm|c022|tPZt&cr<IcY+vE*^z^6i&rZ*Ngxvwmqv!<~!S^fBLcqnx`(HlX-o;K#Ayc8W -Si`%!pWXiZUoWq2?yl%a$b{jtz%%D~gPGh{Wo@7q?VCR6_SGCJ(f!C3Dw{se^19qZspE>9NAP<)u7%= -zF>||>tYY>gR94pUgn44N=T#-uL(6{s;r6$S`}?cgyBGMYqIr<2Wyz(=m|J3j;h$%3j4WE_%YtitQ=0 -3tQQ2(97%vLO;2buK2Vr`7Y<FOEt;GsP8~Da@SqQglt?nO7Nb-8Eh`lIz7V@K>R={El-$5a@iFzX}QK -g<V<th679RB(n;0>gty3hm#Yj9RsDix5;X0uG>z;eZ`$Ape@wStGD+%4BuRdoEVFioxC^P@mS)fQH|s -j5PX3`j349eoa71o(5Hy>&eI_?NjA4XQMN{uwH??o8A2pN}Xu#Jt7jTEuC&uTXsCp%$B(D_w9SBCGte -6IMIzy`b1qBbOuan^VUGl-@`~zvyURW=$ci*L!2VM<U>Tyh6kkE))fnWIavyCJQ=dFlD*y%!6xmXXc> -CSa`w;Zc5etzgc)7F1GF>6s$cCtV8f1<c~dJZ{4)ecnU%fX=^%SHR9}TH-^>*d1E3WC*Zrc%rT6kBlK -{jQljR@DQYd!8_7epv&0*?dACM8N$p*vkBL_vMtO-r@kw-A6yl53AnpufY0w;f*u+n~Xhf%`$0pHje% -N;K9Nm5$#_lm3EcfZQx86aDB0ILBKV{pg#{vh?xzqV7)YVDu_PiS`UvL_kDdL6XI)rEWsi_74#q?l_d -||ou_9mc_QOFoMCBL|p(J4NFr~BVZBH!Sp*lTQV8Hmtx4vkFb6P91)kx8$FK{}vrLx1cZ3-8c36fdvx -N_ZOzl*t?UV~4?WR7E0YnOE@kZCM#vs=$STmw;oDQ`&Hq3Mlb-YzxTi>m<HzMJAZ6cXk!yi5qxC1rsY -hAw{KeEr?gv)|VLWF+&BI)bJp&NZQ1ec!d%`VaV+jFp|@<2hkrA!@K5E3s{RU={gzI)_71<6Nj?kyw4 -Kb1yZ)xjC7blq042Hz;_m0wspsP(V@C`h|_SOO*9{<V$ZZlusA%a=Wqg{=-!`E?<?=x=L&h$7RDg(>F -4?UveBm8cfOl{9RQF_dAb7ysX%3#dL8m!RhLgP^M!kb+GEK?*IJRLv?OU$*XSz9WGzxm*9Y%YiwP?CX -h!j+!aWp&JZY)0NhDRShbh{cEQ2H&Trx?lv<TA<+K4xWS;6Sq%NRats+Ib&Y%tO71U!lQ04c9U-V`l9 -sKiwbvhPI78|^PaHDiyR3f59m^v_0O-l6-Ts&%6j^^!><a4}jY36!drWUqG&ek=DI1K>5N*A9Of!IOF -e0i6D+1BkjV@%rRERM+1tP|6<?$7C0cr}7Max?aOsd^SLdsSiEc-{8&2B>T#s?PY4vkQk<||L6pAkgj --Y&$266Ow)yfOW#3Qcd?$>wvz3x^-fs{6~KH^?-onIFwTeBkfcX>TnnB>%hi$KWuQ9(zLw%iIE-3+je -ymn9Np4M2$S=Gx-BW=BS+bKB0(%LK_Gf$1}EAp;<5xvJJAa`IVwuyCmLw7>iXoMYaL}XYPUv;ZU#cOf -u$}eV@ZX*&>_GkV%+qR<1sw$lE+CjNNLVpsi+KmxVs{Nl0OltFQ?N*$`zTKT#V*fI}<^G4HU5)h#v?T -Ne}6+>>t$bb&A-aqA5nTf#q%5-@4U~RGKW$;Vfq-rLU&v7YlNirn}0_J212pi<=B+7O|NtSIPffo?U9 --rc>3`*vSH&(-hZ^{N32)o5!$mWPKRu*R+my;Au@I`&sk2fgBIFU9=r{kKf#G(lga^9=Dr8kWIIo<5; -5$zPj}sTZ7uq|HLBG?agyB_FV7Oe<g4YlpCsD3^3kc4B9R|vLBJ+-|UZjeD8zmf`|~psmp5q!%qL1$b -O$9T05yTKi%R8twoVLjD?*#4TR?*z>pytI?d06-#YZs<GRw92fy~weh%;Tv=hhVtU^OWw`9$Kfvj@Z7 --18#zrk!)7Mc5&pbt8Bw$&SEYX@W7nG&D<r-s1x?e@}d$Ba>rz*yW=8GToALc8VVY*IK%b^Mq;3;!Cs -Kdbhqlhpl0Io-SajQB55O9KQH00008031s8R*s7O%pe5-08kJB04o3h0B~t=FJE?LZe(wAFK~HhZDnq -Bb1!CZa&2LBbY*gLFJEn8aByjEXD)Dg%~#uQ<2Dd|&sPj~ADk_+E?RW=p*JAT)r;I<8@)WOD2cM!NF+ -;ANra;R-kG5!%Sjq1T_9+HfEUe>=Nt}a=(n(62UCflGEtTdETxuC1ertHfX|$=!GDdDpDSStRZ2g$&3 -NZ69A3i3<pPclrwf?;4yXGUhd+R;H6+2@!FvgveF94RAVogj**U(Po$oIeN3%Kn1b^)S{*5M+1Cz^R; -}AoTZuC9uj%>56qz-;ubklyErWx9e_Bs#j?T*%yX*zm`Gx$G>Ye6vAQhT^nVFi;3+4(UnR?<somsNTR -JP*Q2sC^_|3Ee<im!(7lNR4p0-ve);F*RgD!%8hzCH@DRarmWnnWS~%ULANyCGI1^8qYf^gtU@QjuB` -}y|U9vET2JMRZAj?&F8eTkvg}dR0UL;xsSdY^CW3-;3OU*2#DW7(LPW(Q?+=RIO(B0G53TGu9~ni8VD -32K2xa^u0bXHu)r0qx}z0&Epi&J*Hb%D#mlKJRl(G_Z5eg_HKUX1@$1uZrYN>^S&|vC={mc8Zxp%?w@ -<_>dw}$ru*Abawh|iIA~@v`S7{swonsK|06sM30Ox6_%Iz>$Xhld)7w2aTGETILcVD?jK;LYF6duSCz -JnzB(OaQ^P7(-WiMMOgKrRbWmtl{!%n%}O4tOY1XQiPVhIdMkr**P*+{3HkWm&+j6V?t)a&^<1z;0S2 -S;;Cuq79iQU~EuEzvFAYb{Kg$n9m_Ah4*}6Q#@4}=x(!j<~@Jw{Ks!P`KGgjX9TRvNFKCh?FPdq4i!J -QN9X0AHHsm9e`qhhC~@C7oSvUhWA(Dj0o2{RF;^ESuYO}b+2zX<z#lepi!C;?XT?(+tUg^Gy*{low7u -KTsU$O^a3&V=H|Eq&QPYy*nTHXBH;ny;T(p#VB$E_EXU&aE6HWsOhgE`^07qD>z>4e|Me%FU7g)@;V> -VQs2;f5A1u(j77&l@JG^=ru9yd)9?#nvZn(G>n9n?A|tDK|W;3q1k>vFrsbcJT-T)6AnZii;cxME|1! -oG0cjnRiD_!<lhAHR*L?a;lIcp5lSAP>$KPU;*hbxsk2)AL_W*1%`tc0o(MKu~mPw`a6Y+;SYmnO0Js -d=#z#{DzP)VS3y`P|6}n@x+azaAs2+;l-#1r#=hMs8}v=O`0u^Bebxtyj}kxBD97mavPlef*>{?lZL| -szhmsMS8lR8K8`pm#*C<R^e0{v(X1O?UUWlRby1ArO1eU3fq5So+pyu4z=tKe<0+l1%o%TruseGPzZ# -cQ+wZm(Wqz~VE{eb5^n=IFqVTX4rRzU(OdKazy@g$=3_0WDcMSLS!2!MoQ4M)#rBk%ED93OlvK5p{OE -3k8BpGrIq-#Y*P?nO6qi*P2stg~LNphF8X&`B^ml>q4G^QHQ#aAdz5kl*9mAYN1JpsD8N@Lwrc`eF5l -$vswKNiwexM=z9hmYIE3v1(;Ool^BCmWv;q&KB(N7Ot~ME5V|)B9C)k3%8`T6{R*BJZP7w-*?CH}OVz -B4_HFI78Aw>p3O&7w6vv?JD$>2=QonOXn1S5rh@a*jQ9Z$ri?~ao423a~QH^^H9j=t2mT!L%)G|UoIK -v?p~pT*AZdiYROyu=a}kO*ih!1kJUh&c0|pW%Y^&=e?!ZMO!#NKw+3}Sy0q$bgMY1?_&9gQIz`VVl13 -0>=o}f!-#h;RP)h>@6aWAK2ml;P_Ey^X6?}UH008m~001cf003}la4%nWWo~3|axZXsXKiI}baO9eZ* -py6baZ8Mb1!0IV{c?-E^v9BRoiacMi711R}35kloEwDT%ZpE^bolT8lXsv+I><5a!IbFt;t=2yR<75? -YDPkxV%{xH`R-X-I;S{&Rq8D>S_Y`D-XLuYG=c(sS4qotZbMhsmUZ?|8w>?;rrE!OrdiQo8v`l%0s1g -d$)kQ_7iSzZodC;dvp68BnNPN3BP!9a8eX=uu{Uu-yVMa`Pciffyq@WwUrB4-T%<s|McbV)7Se?#0Z& -mLghA`TwyYk$+j{Dl&TD)C#f@2g~z#pDoRs1_}m^`aH^fkTl<}KQDRIUnbJ)rQ6%y_ieL%rV70nK0Xn ->3gMp;Euohn2OuMhyf|I-Q6==@EnMX_&o|W5sRc#0lducm$mEHlLgQz6bR%WDQA@qT9k~+^N8bM-2m0 -6U_z`@jz3JrVIKj#|YNrg9cl}fH0^R+ocB9W`9d}%B*Do3TNq_6D5UfI6fuoo7z0b7@>6ICS<>Eo_4w -azfw+*BAYekP{Mu(#%b4vfcWlnA<~rYMYVo5_hCQ=px2p7!1pvPlf=!8%!3n96V$Lb)$js~KcQ2d)dl -^P(0=r7Bnx?uLNpjMgiIPADWdW2X^i?F^P2!))}SK*+o4$_M$UBWy9iMU)zw;sB_Q-J56KI10eLj4ee -<Rn!iq&wG^;pt6kBD@kR_Ov@)Bj>(mr;ux^)l+iO*lH?{p+k#;#jHM-Z1nH)9hSe0_1tqRzVV-2>wfv -Z6ita@2aj`;aDoZD`MPm_LcgSVT-%Zga@Db`ldd)f7L}Gr{RiqcP3b<zzTPMu`Of$I^b?z1&P8<jREQ -sTo4<{xOQNo_?%N9qSCIVblBUxE<4}z&3eJYJNaomWH;&8v5BHN1GN+j|;ot|fjM3!M1R8BmiGBRyHC -ojv{0d?#H)^IfCT3`b&!S9Qp>Hb^^i*=+u((K$|4)}#jgnL8flHAx}(<FgB5JgHW7e!Mm^X(koz4KL^ -^|^PuCOm80+0sQAagxi?qMLeCjLDY>!~0Cxy>up3&O5id_ugZ7?kr03ufJd7ibokW*VEZRfZ;h=4l?J -x;SMEMQ<E*uX;0FdF^3blE0%zJpDGiKF4dO(*8%U6U^8~@-QT0<nr)VE-r7w7Z^wQ|Zk}y@%?9Z3o{m -m)CnnEcp-wizd5YvRymHuq=_>^45`nr*fNy}Ta;4=f9Q7rR`XtAj<`p^lg4h@D&<B=!@C;4Heb6`Inp -<as#2nq6X}i8_mUUEXsfi}@Gu6D@{G`rlN7394I#O*1BQ}=78;8%8a&j6p8!ea}yV3|<cBKJZcH4<SI -&)mc?g^LusK@D$a>diHM$5^m0Yax*@+;bBIF14zAbJ!SNE<hvHhWz2mXiO&5{oxjqCR79v+P1VhG{dx -=HVDe1`=1yu?qrwuj4!V_4TIW4?3ca;&_rzlpzTJFiKCS9?df{>})nWo5!g%+WVnmlVN9^Oy?WZ__px ->PhVbBW1j5k*T>=d>^$&mg^l_jqxfAT$iGla0|XQR000O897^_9aeqi)9R>gZ<`Vz_C;$KeaA|NaUv_ -0~WN&gWaCv8KWo~qHFJ^CYZDDkDWpZ;bXL4_5W-f4fomgFO+cp$^_pe|*1d<w8bF!`l45UDtwp)R<8= -4M#unn1(D4VNH2@;hw7}npudr3+nEy)R{hnN!YIro#7WTw;UguqkW?+#4JDope8K&51574FJBP1Wr8v -1g*D-!~WnXrf>wuVqooPzx;Lytps<ZZ8+)x*3wo`TWJR%lYL`WP4BKo{>L{5kxY2n30Mx^7_v&zyALD -Ce$<;kC~|0g1otTtLK0FaQ*Jn%{!$yVUqH!3MW%=YQhgiUP=On?I&rOA4tKAFuG+T$;+_sE-~`0FDF2 -?<XI!XV=~(2c^2h`oT)c1B)&{0QAD#WipUjNdcR;$T5fMWnM~r0Ruyq4{B{&9l*?0-AN`%k{3`^2+;O -=#ab{Ia3kD&}NxY|G$1sw-BypZWNT^64G(wU}-e=5YBMiwc<d^4yCJ9Rx3vwA=T<E#iNx~)0WCVPGK} -BdBvqFNLme?q&jT+<g1rnz|p$T=xW+bM9Y#E{Ox#VI;&<=8=M5=nL-S!if(mIoimS?l^%r|ed35=<mL -oV{FpfO82jUQ4-J;s8_vIc#vjCS>oXBp}TTar!>@T0UvopHecIL=#u^->ikiV{&Dwh%UlGNoB%bKaG- -=m`IUH-%N{L87W)F;6)drrAiIV%ka?s})Dy@``RVnC7i5^Onw5JXcDa3Q+?=4-9I}Q+45~Pc-AS0_|9 -V`t!__=2!i!l~~F%hG-?Y)@-1QL{Q6IMv-5!ES-_3PfbY#UDn!q4M&A1tuW4nT}DBhy?T5Dm=Uj&@n+ --;BqMM+OzOr7i~ykDV}_34k)8(l+?~Mm8B()~El!*S!ub#x#80ugQ)*eDmH+&EggMZ!EYj0H1gML+J% -OTDs7to1Gg@MbSF3b+{dw)_GI4{-z+Wu^0xfu(XGx2E^APflh2#>dC~mPI9>Rh^7Y1z0Qr;J^ngsgCg -%z33H5C|1p`Bh4=(VWKb0$F};+LLkYu?(0cJOm$=3#kOfthD6rUx;aP#&bu@qJh+2JfU!6d0jzvUY-A -NBE=yE%N_WY<G_e+($QXEowY;AG^@G+3f0nsS02X@=DcA3wI?Ce_#bgN>ydL2b><TDOuI8r;&t7KX3{ -xdbqfb>xb})h+L9SxnTW}Xk8)fj=qBm+``sdENX>=084xg3tT?q3A7e2neT<br*RlIJvxVRx!aN-oKG -v^Ih{cfn9emCC8xbXPA?|Ic1+KzGx9tkQ^>XNfSv$I9UIU9+`2t)=FkR5R?$LD7?W^l*#muX2S=4F9Q -ZgFmUt*AeC3|iN!9iZ6{X&~4%0Mx-Cnw$AlRMSlU1YWT2<O8eAV@HHyxNajyWswtmMyU>VO!gS)P}^0 -sq*6gJ7UK_O<wmE`b3{{<KqMjnCUrf9*83LwbD8rLzq`Dhz>xDA|E>sKQbQ5$!wc>^m;<PWly@_f5A{ -E9;-N^3N_7eM^t`w^q89WLcA`R_y%29CXR^9lsF@-}`;UGC^}&`YSd@{s7l`OJ?n`vMxnKVVAi+Wk+~ -aYg&|K-=tL?_zFt#CoEZ!fkWWk3KkFiUDosY&(~`&2+67!Wv$sDLIXfe&tE(SvGO_{moFcK*mQsw^Tz -<bcYv4g0AMxc;@&uY)EdEjTxBTG>%`a#P$0l&)4YUC#CgK}p%qsP4q9v}4?f|*B*qIyT!40~S(i}XV= -}Fu-_TERa-6O%3b>>Ny~&~MqrE0>SmR)^G6EJmhVZ!PbPU^y)A!P-7TV#YDLQrk%j+^`<L%$wP#dXE< -MEax(v>hLO1<e=xw5<PVqi5nyHa13b^g1hS<SE}EFWCPyFJHSB#Nue+1bylepzVAEBzZ5w1mrf|42DA -hn4<`#67W~sj72;T4ifk6&aW6`sS-UNZ*1cK<eHw*m3bO{iq38vtg>Oax%!Nj%2tAgXzPZrr<QE)16N -2vPWtZ#}nK_hjrj{R4ZQicg}_Ho5&)Aif=HWrQe%}Ngw6IaG;bNsITxJB3g1-<H<_4pHo$R8e?Arhor -{C(GQ6}{5@XZ*wS8!Fy+AXA5cpJ1QY-O00;maO7>RtuxTYqCIA2$ivR#80001RX>c!Jc4cm4Z*nhid1 -q~9Zgg`mW^ZzBVRUq5a&s?ebZu-daCz-LYjfMkk>B|%W~ovD$`tk3WRu8}E{-kN?q%cMS}T`Jc~uk$3 -`N8szyP3W#^w9%*N=JPK~bAcavzRKtwms_r>Cdi(=!|nhXVnh)%Ia2^SYYMi*gy&wJfX2qF!e7@_%|h -1A6;f_Ylxme0}@JZ$+`LSL=Gh?=RwFwJp<!MSUS&>OaN#>FHO;=cngiirH4w3n{)=7>HU%%dx1W6fgd -C`}KD}yqz$ZERAJe$qVuOx3Bp9x8J<HdGq#$#!X}$rCBu@3}Hrtbh#?ZTFlpZTo*-F=?8`RtJ*pbC#$ -Gl4CZCA6lo#U<F|F0<`3U|H{chmbTyfNka<#+lQy+<Cqs-Ko$BJf%yoxb{4y4|@?$*~Z*O0`dG+FlSJ -T_Se1G$H2Z(i@W*WkStfw=W<g{1;2>h1jwf&N%6@42F>T-KQq*NW_I(n!E@?$JlwfKgf-IQffawB>xu -Ed)nmxIA{8fDpZ3g6!aUjtv5c?Nd_cq^+oTFEJL%(RYXnS_R)2ux8XVepG!bRmLYM9bClU~C^>^5d-b -o?i3Q2mk4ipZ;xKc+ZEyke(lW`CEMa8IVcjTsZiIHIbIEx@sdj;@JY%+|VoWi?O&Ii)#^8Vk5H*|E+) -zU`kP*h@@EK><|rE8HS$>l^B(>UYEJRAt!Yi<y98dGUS02Y8yFA=i4wYvZ7Rjr*lDHCsiGlb+t+BMHs -|U76&7kWXHP?Q5mSd&ZyLm9?A^lr1?5H2*fkhh*6m$f7JCB2oh&eRfY7o0zA*7B`%}SlN0EonrYOjVQ -VycN)ICiC<y55W|0B`8G2d~d)dyW?J?p?<GedQyMw<Y0}ns+2HMfTAiX6>g?YIj<}RKF{$TL(?c3Mie -0wv!z4_z!-@drLA;g0p2Pa2^2bs$f)-yqsWz^N>qOMof#mR{g&Z2xcxgPAR>L!D4S+ONzohP74umz|% -q4eDjRd;kUI1H<Ln@L#BYE%sX)4|}?cQ2=3-@JHr^Ml6y@(Xx|L=edL;`=}S9>9s=@yW@bzkGRe^6K^ -#tL<M-PR~wGZr%_t4{=^Ft<7dL*?dWpy8Yn<0sQi$0@WDTlcY|D*8u(a`2QYlj*kH|#1{XNQF0A)x~$ -VWlh=nK{X42IPxt}8T0%#G=pM_zt<w)z!??(6K;#%XW+>FRt09UuQQ^6W7g1Ts`sy&0d0Zr*Bu3ScfY -F)=?5R4$6~2MR08VRh*fU%u>~=!^0O1qH_;OYxTg3m|#TmX0nkzlM`S07CAKtw97J&b2R{h^c+$_!Cg -Y;%sLn2qTkg^_%MJeZ3!^03LJx_7`VVnL>q3i4KzPoiK=tOln;aO9&0Vz%4nZwZhrPOGtO#{CWWc(|% -DolKFe}7r6qWt>)UZBODh~IC4i|5fgL#qY+uBd~`5=fC1APuZ~a}i<hRVh{Hu}JGmW?*B=Xte^N(M^) -{gK8qe*}5jFLD2VkflcoP_y=i`kJ!_?#W%WBP$9z#o@yNBVkV(`t;O{oC`<1&4CVBFGw0W^STZlnTbu -;;t_v7pNOo~}f6w!@Q%Nf}97&R5C-6MB&XlS&kvuKxj~&3K#0#+iqJlLMWw9Y!U2h8ZWWbD97xW5g8K -pUJ6Ag*jiG01BfxAmxI@$p9Nv6xqM{r;=uvYYKG7(j=E@O!eE-pyO2F3;<^_XZ^!v$!%47J@*T-yeW{ -AFF*XZSSHy%gnujgdh?WI*S=N5a*`19&4trx&<FIlaCbqJJR5dXa)}nwC}l60B`9Awd~=J<R8mNYZMR -MO)zY(EN#fKN9~Tf*eQ^2yn3i@p*XdfuQ9&^B$dFp5Q}wMkjUBGeaa?7f6x^-RKX{1br1yjwmJGyEoD -6_3(OL6zXL-i%Q2WQXreqR`8eV;E%l<b@*0Z!+&_$PEa~{xkKPSa0XXVERkh_M{9~9%Ho5>am%#cj+9 -uu5a^DJVot1Q1!^VZbe^J_t2E!;FS02$GO`0;m(hEY+=^Wx24eUN`iCe3b8AIUCue7R@INDO5a{_j%Q -V<A$WmM&W7ksaq@;+~OQmx-mIKuSEVf2HOt26PTRB)95Eg_~dBVxIOe-cZ&7_Pf3C<e$2?CWgc#j6yy -;9t+rg%sp?$O9EAZEHp4au#nBEjAmzu~+i6}F_{EqtUgP$y#Jbwvw9u(Y!x7GNPtv?t)oW2}WfV5MND -r8BjO5PvDwV!4LJlR2^g0V4Gl<?*5@VVO{Yl<Qofurbs=&dsFIMM2@jF*Zf{enQ%oVXe0HqR5Y__q|v -a$r}A+MC<$Q_uuf?z$-xG8Z;ua8O(~|&1D4ctbERa5e!>y(u!8%hjm`3OG%L(Xv!2q8h}zp@H$bnC54 -Z%0Ik^+oyjmNAFe<J03s65N|?C!o~^rAK6HiaO2IO#TdP0Oa+ENQN=;l^TO!qxC_7>T>4_l-V8Bdx4} -aZjQBmutL}u$434#sgPeRBK>bzb=wSoiuQOXsB(A<@@I^!?_iG)Ba1Cdzb;0+=KpsXgSrhpI}ycFvU7 -Fkwcospp#^(-qkdb$d5kC6Z-w>Clp7nAoJP{VVe+wn$nqGVQN$#V|YF2up<>Fd|0r{Z%**LVqCb-Ulv -$7wg2SbMw$23|xTq^lghLcv7+A<Ho}Kq^OBRS49Qu&%7GVC~i`^k|8A%&rYmSx$jQCAfJKIxc}sDRu< -<&(n_%AFvzLLnW33ODM}6jX~c9poS;a78vd$juDJS0RN~b!QII6H>)wVfHf+UtSH{Y{NA$!?XzJ1V7P -2!^Ue<Y6PB|HI9_%G-gB{ESeanG11lM0mPaOPn%eO*eStrWUv^urB|2qEkq0#jnCEArmTNebHheFOb) -Gm2jM5C+3ET?QnH6X?WG7Tl2D4B(yB7fSHLxBGtqm62DFgi${WxD+Ai`>8BQeD0Lu0%^^H1c&v2F$s` -pCyhP07SsyIrV|7v|ARSy5ExKrr@UsTHXnQ7wqo9F-ME%8oBADxG5ofip0%yF&zHcv=0AwPMsd7^O85 -Z>dSOp0VR@pc^<aih4$a@j59hg^qMy2sxjFF2xj&XP}*AO@fRBA;}CJ=xNh{quwP8&d&Hk*?jBkq`Ae -$be11M<5UyFrb?f7ajGIaWm6kb6!}3qedl=j0?Y&HKI;sVMa+wuY^kHc#{wgzG^gGiX(}qE6}2xxM=Y -0QRa{Laz~g&>kyfdUB{^fHsKKuT{}6qVJT7H~_D?ZxmHu6#8HC8V#$}wPHkGxDBMDDdtd=@&X&57b6a -$l`#fUkoVL2d{0@lRzFL4IBJjA?P@GiIXbm0&OoS3RuN}LDS2N2s$?)IFBZ*ulPVwjULA?%k(XMG)H9 -e)=2!*VV>P=*@+M6;|-)v?Jh8IU$AWv`7ai=FetG<;LkN+fHC$H~Y=#Nn({)M~&y+osKsTnD=ySZK>e -fhx|X5qG=tZ9H}sbceN(fW+PwRn{!3yK!)6yf&sjThEktNEl8Aj-?PEAml|8fdLEHxzovS-C)RIf`h5 -(JfP4AF!sXcu|H`}{^Q^-IC488hgij&5mO7l%GQ-Tf<I-I4$xXBj*AlG5MX4Nl)A68RxGuS>R@3eKap -NNY0+Gz3~ahTa4$#G3$t%s&d%(FeEq9)EN(QX&5_c%mfv+aMe&f1C0r4uJUDv!Ip|<8t>``AcoRJiex -XK5Az1@*NQh&JXjT>3+Oe@1k&R8ipyCisb0zQqm^~8nnN>~NIbVWZR`O^ytA#SwCMjbdKpDU}`W_Q&A -Sp3O^gwTK17UbAt;M0CFmR$c6k;kFCCrv83Z}X5UYf5QE9Kij&rdM6O|OA5h}ISo8f^Pi)~`~yd9s95 -hp85TikgtJNfE{%tjJLJ7M-kNXAhQZmgW&XCLJGPx6(mKk3SKwj2K!Yw39Gr6V0+Z``77aI?}Fmub+; -?@I$K;45c>(XY#CT{76QR3CZ3j3HhSPR6b8=OYTr)wLOM)IflTemdEol1v8Xw*$W`U7$IRJ&^0+ZY^$ -;W+?JKKkp|YRgtfpqkebGAkH*Z|t1ybro3|1X11!yJ`M_H%D&X|>30XEph00_sF$aiFsH|%pmlLo`9O -ZI@ken#+H%G1#dQDr7OOUj5mS$<a<rzBde@zT5qcTe|Zj`Y8Th=-sqHJwZS6j>Ogds?b6q*(4lE~BhA -_T-%QCX+)8r-O{4dU^`UCD6kAjQS|)-f4`hsUvFl_X{$;NAMnR-*(tz>bd4ZMZl(vUwa0J5+h=k>^-0 -WxR;;v|8FFwNmS3m}zlPW06fvQt&`<^O9jLC|tz!6_^v$!N4&$A6F3X$<jbu=b+mvvd`o`;c&b$pbVI -0j*7MUDof)O*8vAP=0Wa#9|pL2B}-WAkl@PNn=<>rt0=}1h#(#;8&#a0|LV{&lO}~}{ZpN`X(U3~5IC -7kR^<L7l_-CkXltdmX*tpy^+-s8AKRX?Qs}2D5I7rg2wS=$mT-C~Xa7&BE!=S5t?3-=?Dp|k(q$6u5j -beM?!cKtIt@>D2I-N8n2T$11`0F>Z;0hEht+Y%gn6$@R3b?OG_FLHJqrDF+z*(onab-~RZ1@2{ryl4F -+{<3rg`d2GcRUQ{QiOR2D`Hne%!yI+=Q|l_{xHD>LBpba`99M$h#yWTGs`@Ok>(*Qdm|zv{D_`r(W=E -OUW@{8|FLtaDgvO?oy3z10nL*DV;+uyUCgnDep$RBECKz{K{EZm0vGPmkF(-ZSwgbZS_WC7L3GCMXBK -H)eRa9f6Q@*&Y=NnQQC_v)(;C3T!?4ilSJoIZvpsfh^?p!4y}2ZJWObvQ@tU0IV-P`TQD+&=j4YGR2t -&32<F!g9duH@o4dhrSgt_XF;&Kl$^HGjC^|R|?J+Ji7`)g<#;(hPI~(|a9FlA@yHuE!NE2j!&Xj<?yC -0E)!I6$h3`vyGpYm2qd2=$Vwm8Cj6&%N)q0u#_HG4FibC_ZUHt%0Y3PC$=9dvl=)G=vU5g#&_en=zn* -XTo3#bvsxAMru8RPeIw@<d6)jGfteRtIKu8C|Qr`9D>D-m2wC+YN78bC(rOCQ<KUb)~dA_Of^vixA^X -N9yug<@-of9MQ3X1-Sd0RepMMtV0qTAL*fWOTFRZ5hpa21kNTGaw>M;t+(t7LECkiF`HSUywEyJ@gL< -0h!1m<Q8gQRyoaX;_U3H?eu&bH;)xGYnQ}fFU5fj|5J^6&fCu1jDhM0t1%&Sq4UZ~^O<y_s5#1|Ke0X -b!RBbN)iedKs0jIr=6~i;Gdy+=S+#O_T(IB!BIvJ`GJ(|+@31?Xmzjq=iG*6Pt8Zf9<+yB^ycR{pOm^ -+MZc3$0Fvhm<+Wg{JA^p+#xqpDIc8ifUlGOX5c#K{D6k*>PDzpNM6y2OJtnV3OLhgN>Q%y$#=+(e=%J -~$Uk$Umb%nQ*CPwwO|CKOP=qt7}w=5V3S+e$_rEnyg>xFglK$ikLnOf2lA`<ZS&gr3~hjGMLVqC%}nn -2LkxA1_l6o%3d>ONxM_vdKY5TndUJm;>QShI^YIJM{m_`f{wL0O`@&C(UI9f>$A+atxoJmZNNQ9c|$c -4;NLUqt|h4K&}fv_909~2U&S*0yGBSEA{v4jmv**!G-rnreZ5NUuE=aYnQ{w`Rj?g1o88@3GDf}}V75 -(VmQ=haTCr6N&seAs#E7F!bQ3vTKf{`)JVAbtl}<%V6+=<IllGo?VFpSxiAIShihgyKU%sUzldZNznK -NMEWT^s8Odfga-s&u(obeIWVBhI#g0V|VqM@Q6A_32Ih>c&X1`=o-2^yzk%nRC60k4%(EV$K3n+;|Kw -N1oKk6U8Oi`QH?@Lo~^55l-CAhzDRX`#x4;3N=v<w$YS%BoIF5j~){rQ%&!VY|9OzLSE+F+F%<h&l5n -Vn36Bp`;zTd9AWggv!`Jh42b1#{epGE2v;tikQ|@`RD{sF#%76O4VpQ8V0L^D)gdP1&GLu_Xamwzu86 -5+wnZ#bZMMOH+6EaRufB@II3ay1{SCCHh#@UuyyoJl@m*5t6s$HN5<q*?6m{mECyfzFX5$Mc<Fr`UDy -uzp~8Ed7xL>^4KNl*x~xe~VN$KqF;gVYS^@z~5v!2<kJ@9nZJd!hAQRtUa2>E|30f`CHm4xWs1_Ma8w -!5FZl_qVch>zHKL@}ZfvaS!a>2oS`_<yv6(9&vSsOh&2}E+&{7%#a6|1F{(m3SF+MOdO)JPPctJJhLz -g$dabZduXlo%|MJv62p(AUMaia+PPZIETu!l<vh(^~LOA#y*yAG-c87hx)8K;;K!Lw~3$RxyHLZ4HwK -w}7%$rYfVPVp@`XEW}fpeo}u#K&z^B{i~<fwVuXKbnXfN&_^f`3NKrfrL^IUhj&of1b1v<l!wMIj_AA ->R?yI2c&-N<5m!&qS({E3PahpA{2jJ7k~isXY}%4EaizqS60L-!J)P%L!kk0fqS1>D9&~dLJ%wt7F;= -VMdzb{JPFkIH<=Kw@s!0zBXB!)UsD5;^Bye6K5rbw=wRPM#WgnJmjDYN3@u&?_?KJKQlUp-(4OnJFb1 -zt?btf#f-?cARw6oU*r?suNd)>UIJ?p1q@4ax-jXRNZgVueanGT&0O~AAdG~Kupk`8wI>7`rrkO||6s -mf_WPgFU`7@t1-%~~N#|A4Kgc4V7|pZkmC+cS8JyPp)`cNl7{XBBR(YZ#zcGo<!Iv5MmN(SzijZ{BRM -g|ywqt?>!CS2Q!FS8NY7wnJTmI|=+sdtOX^oRa>Xyu5|~hTd!)La0!?sbSRP_L`-0+XWQA+HAXMV_^Z -G+bnEmyZc=Zy0!r?uPC0|0s71VUCEtToDRBP;2sLRjAm8noMv^H$!Q0~IBT-M-8$I|id^jg!aErIz~P -nv>a?xLoXv?HD$KU(5lb(@-^Cr~C8~uV^QH}Q5`bO3)vGS+WwOYfqvDIMUS8_8f977Zo~i4dL{g66op -~87?uy=|d*Im_LH7pW@9rATxH%Qw;#1vg0?uCu>mKqrBVWALCij2gj<a)o+WlZH^}wIc6pH|BIklB4; -mC2ga2{aE)UjOlq};=~_yLFS2X)+7)r<JGRkj#TmtQ9~45yjvI(X&Kr~_R3z#28d?%HqZIWFv~A=}=k -f*VJ<Lq2nQ3>uAtppPJOKa#j-4IU%PKE#MK>mB(E)F1>Oapp71Tqo5yi`?MAU5A<X85mEH3Od}KwWx@ -FK}0%<$%aDl;9ew6dy3pV%KAj}yk3HS&gF=W^VpVfs!Qu|_<po{%6OVaN^lxvYKthsbZAqb#~lNqqeQ -nl;GsF|F~#QwD{6MmRotFeMZ`o%W04~YsS+7#>J!5A6nAnXe)L#@@9LmW1>?L6Xv;jf>rjN$5wig5*u -i1-99Zp8Ut{2PA9VxA!w<V*cbt{zK{N%IEsghp#v~Kmz84&wDkpDgCqz6$e2ngRNx85KVfyt#o;~bAQ -)}^$cahh?>LqZQ$j64FHW%V-^-)wsmL@$zDNwDEI#>`tAOi1*-|m3Byek^?=Rj0g=>*}5)>hy>^BFop -gX!dtQYb39>w{RNvW&`ju@zyCW%X55Zb@25$46BhQ4W^Qntjne=nAs;4v|A7`ND*E7suy!V=ZhJImZY -$YO7g2;;}f?O1_3Pe=AjK^rLq=QdgpAo3tv6WF6ZSPrNQYb!H-e+K)qUxHFH3;qJQ*edvNJ=LnqLqJv -;ZmbFeu`{x79VYtpIF$uKu_3m!a^=5)4!?{Y_uoFh!oL8Ja+N-CPiN<lnJ^OQv+3MQzF2FsW{Iy8)&; -iz1{T8TR9xy2(g9fT&eo6>5s79pp*fh-K2bmd;1hYLB9mlqjhv*%n?Qk&k9vOq-SeQv#%Via|1R5O!O -yN@_^YX5N=cFo1<C@~fFoFj!IIP4c&?w@wI61<9k4{jvgo*+%)<{hUx5!telD2nWUEH<j*G~$XAK~R7 -++110&|k=Ip85w?Q@5NwOi4BCwoGwnIKLJRB8raYM$T31Hm&cxBne<ZD~GOSJHW&@1}$||sl$%~v6=R -J1$Z5mVJ647=`a8uAo4<+9QdvY<sE{*yL)$f=YeB+W=$2g2Ewg`!|Ib$=ttHPd5&1EGl!$r3?kF9A<E -dnxz)+%MlZH8i`PrkeI_8>8Ca{YCZX|NWErBYhiqcC2g`RT;D-0wBguFG^^?Jf{Y!YpfX05?Ix)!{V8 -U`4Wv#9r9*yppI4}U7($O7Pr)YZn^ZQ2;_^E*QQb3OWFj~i13MJH?5f8oquf^^O7`ZgNNFedSBzWfUG -f*_+F>qQ@$}^88Dlycl&D%2IF>wU^Yelo2#Z%4D;b<5)oUfzvTNzw<*j6DN-ogwT5iEY{<%$)c`w)!; -(JLoZI+W6KHNovN@C!n%E%9HDlbJF+m@iq{Hvmax-v9u$rHv=ZkAJ5N=WW<%grzBP8oFCKPZjgegI-{ -s6!ZafVu$XCVuiOP<PXQ0oWqd6T79&S)WwYWtgS{JBSo14-u6^#bf1>JmT>g=j9qd2zcO=;)czFEJsz -V3&AnqAbj)X2d}ZNCGQ9=kwykA{yb)6R0<GTi27)o+!9%Z0r+9eHTgenY0%Yez6%n{KuBMabIUX7+)- -~;Vc=K|%4_k9l*K|(sE&;W7qA&Yu&rDZ5*prE7ySuG_7>b)wQIEW)Z9Rye&h#;U9FS_Rlg`oA?9ihyU -GUtP`Wu`i+SIuWx`*M(t}3}s3hGp;8g3pNd(IQw!s{vFzz=Vpz0h@ql*R6B>{CiF2x&_FB}q$s9qM+Y -aqqA_A8%z_omINsN4A?ZbnGPz=pdJP8RbagMAougQWXpr3({^dB0Ao=4H$4Wi3-sL%#vd4EtZ4M@Z`I -D!Ht0#?3z5bx~jI|c+`n3%l1_9vnOvJ(D_zpbUF}3Y}MRDPb)k*qt2m{gy@UgT!5Wyt=LpAH6K?E9Te -%hQYS2FjNQFVlzvAJbs>$#a5EeWt%t6LAVSB#8IBO;c-}7xG46f?CBoJ%i-(W%;ite{rWst=;Lp7f2( -JMQMxQ&kfWCW6%!nw$dbV+dhp^VAq(&f^+#1o<mj@A%D28&|w$(Put6zL(%B{klOCkHFpQLfkcOYKbs -+*lMt5)gCWyYNy%p&@x#nP~?S-Yn5Gfu%Q^VN<;{%LbEop=g-r!<<p#tWF6y=Jm$E~%PcIYO@4bPQdx -UM{!Fu;5*{>auFb9%q2mI<LKLcG6N~b5w_bwhV3EW?c>InY+E;L_<j)70Ei6H)UFJIotN;?Q(;Ggv2a -d8JbbB)3LuNziL2Xx5~*@HAj&v^O851r>+upx59xY{wBBWnB}^Iw@Gappo%lwI;MDRcLs;*I+6Nils| -x>%*HU?XKL;ZSB6X&xx@e@#gMc{n||sw(k`ZI2BgAxhgz?=b#sL+*p8)UD8b=TLT>SL1I*VpP8hOgdA -B0gATA?yE$hKyb$pl%uMexsljxejI%_h<3R3187fQFkrD4PWj(~ewQ==8>G+i#4y79JYEc)wecvuY|$ -pf^Nd?(gVfZl@I4e^N+Qukl#6S-|yXCJ&35YF@rgBI<3_J|BSpl}^l#07Lxg&09)g&SH!_p5Xq-+0d{ -1Czsdv-kKpz#|gwfhfGiUEggn78^Q(4{i{8fOIF5z7~+q9MIlWgcbD;K)yL{3DE~$0nxg*VIsbkc=Zy -1mdmtuue!whXi4a6>tkumrZu_(&UTBAf^-9)oPM`<jxoUdWH0%26q5LAcs|t2ruz;%B7wlWCDm!E)47 -I{&#<7ISFZ!gNxitHi&6t`F+kaw>!CIU-Q*q33UzY3l0Y!J&Zm?K#K#d>06JqJu*~~H-JIo~VLGsPBI -nK>A2Hqch1J?=<zIme(8heS#9Ync9O69SR{(RKKCF3*w<5IY%2hmqx?Z{U>3}WXwWs@AXJsDnwZ58=p -S+aZXTCRri0UrnGe0TGOW3*x_}aZvm><Fec#Ov{f(8%}4_YX?PM7YgrORwvm+v|WLZ@IK+Xw9zo~;L; -i6Z^56T(Rkh=9>>uhI<$P49<`Om@3J2Lf{>t!pHhS3m~oE!EAZi9SxN4iu{E3ofkm5OA}_Noh?U@8@w -pV8H!dAo$lo2eXve-FJrmef|upvFX?$nDHVR-yPlyPU9*5i)#Nfc`yL&|GkTUws)cTWPTPeL+iaKxfx -t%x{s&vI93)O{?)>w)B9ybcLt_lf9DribF2p&HT1auv4XY_{stF4k!KD7uQiGqMRpBE>?oBUHC%P*AJ -?v~XLT9HwK%hyneIKp8`AL}Oul4X9C2OBkvUCiRda{tL~ZyFN3>}>mc<V)898Le5!2K|A_I4NYszfZ8 -6O$yBO{~<$|Lrmw4nY19BNpiq9};}i({bXZ!OfWg+3iSeCn?u8G(IP(6<)<YT7#_BX87FttrS)iWqm2 -2mF*i!YGC0>^;J4Lf<m(uES`dvZF@Cttx0F0l0&Tg95+)f$7l?c0BU7fVDr$MKn8x@f(g>R0*C7w|uI -V_c|pN2-HPqH}u?K-mlhb-ZfLYMYk5@k*IgrvT}q36+*Xt+Fdy~<*Gs;+2jmxou9-RGy`)m?lIDuhVA -7s%=H)yyVLxX^=Sr}Tm<H7x-VL1iQP5*34x*)3(|FUd}j(m(zj`WMR+ge3LIfB<>V&plhXpuq-z%-rh -LeYl8YzlyzB~pFUYYzF3xy0Jn^C7pl${t{^46REbdQYCJM%ytmK>rZ}L+AG4Q>Hb5B<P&ivZpBrDg`I -EoiCTt*-9e(9^T)6<c~%KS9l6faw>dN!Je!y!`kn13@50w}&!k@#hmrIa}V>gRI9nHslh)Y~eyzl7KE -`+F0D74mT<i=ub6gF2c(SIRdJ)VrhpC!X$8XEN<2^nBR@rW>Ms>t0p-;FP@ng^#l5pbgSw9cB8Gt*&8 -uq9pwqtdJKjnp0V(Me`V{{_f_tP&mBOJQbTbTE{sqpf0@3T_Wvq&M8*Ium$Nj^{I-xeKX73U4M|<p3P -T%wmZ<jU8IC8nCP+^E(F)AsC|x<ovn8K&>w>FY${WV=pT&mPr7s*kZ=YtP<HGxHV1O69nH&Dfnyitl| -r@J2%JJP>ITeMG)}^MYtb7}d4oJ95;F%$x{sIaMZcb6(Vod$SHPV-J^klQ{xNpPbGrE25Bf+~8lp6HC -~MDFm}o?uZrq`AdyrB(A2fN>%J1UGZh@0Q=4_Q76|YQLujn+f9<gHyY{zc$V8z1Nt58u}`mBr1c7ERy -WB-1_Q#}NpIXUUBsIU{H+I_q#s)+);cm#`enK|0i9>qTtp8|vvT&P(FbfFu3HN)<Rusc5iUI7OH47Q& -;ArKo-xsDj>;QvS9XpR+s#2{t}=>6C`d<e4`x58<c4aR1WZlds8{K3>K=kI5L4}_URpEnP<j1uo=Q;B -$xx4Ip3Vk?9t)YZ(@y9)r?nKJ566&;8dn3o5SBz|upl1qnIP#%-Fhbel@5JVq}G!b<A&UN{Gc<djtuS -P=F$E$2fzfclQVu*wHvoFp<pDGE%%=EJE?3iKkYV65QVcZD_eTC5u?S@mO>+T|TY^Nf@(I<&iITBG5_ -qd2E`^}7S7d`XaftHQZoxQj2rfrYK&JA<8z01%VBXkM=L|XP+37a9SoOC^Y4op2)w@@f%H{3*m)-4kr -`}OaaKY`<Du%6Y?ej}T&{YgP6sNm9$(a5f-HS3wIUhO8P?bYu`@_;=*+Q8wf+;qAS4K&_YD>ocB=CsR -EGb}H<ZEK-@=-a_OJ)CZ16xSF#A&L{6fN+*ubL+=#^l*a@!gkQl_k%$63@B131&d3IWH`cmB|6X4Q|o -thAxv;L)?X3TH)Jz{U6uR_1}2@x>X+Wl?Ci0mrv+hOJ3mKh@7{BN_K7drYW=>YbMkXlRQ2(yEbyqOJ| -D^l7O^NUTH?(lbT=%9$NoKl_uVnu!bWU*;6_Of=#^Rr!H6W<T)HkW?4Gk)zPck{V!1~{Z1zgQDxcvf3 -;bzXOlQ!8ndG0D_?|Ak<Daoa;!)}qyqnW56|*aAq(41Jy_!%u52W=Uc<LI#=H|L8@-Ys4++c?N$c!H~ -OFK7zdVJ<RY=j@HEV8VTm2NNdBik~KLiyJ9ggxSA?ybGQ=XUnDEmHrk()MObBfBxC!VJEu(Y=xLt;8S -siJjl{#1H-8l)9yPg7wt;muSi~No4Meo%y25tgqChT8dBKMCB98_9EqIvuONc)CJ$R#MEu8p;C3~XN3 -&emFigMtZ0+An(I2N;4a9mR~RCc*1`*-u!scc1LOu`*Y4$g)pNCE#oQ)^=*rPj{azscYND=HHz&mLH+ -q7~+`wZecM}0DyYlMF?iznB7_>$v(TTx3RQ2x?jPXi#%qqH9`=d!Tw}#rEuft%hd39>)4*r6ElS47~` -7vLMdjVb=(31~aj_3+$t~tS(ovB|-gjbd!Dt2Sl-NZ$iKBV{?RL)AMfWi5d5c(-7Jn3P;oLbOyA1+q* -&|DC(&i$z$P3pQg)c`^@te4OJOpCeHk#6zTYwaQ2V04r;zCD+YWjHlsuFQ3EmYTKZZ7(J2+9Wr<{(^p -uR~==HDFWWej%)4JO#t-Fy=cGzRTb@DC&Hg)a7wH2y?0FkT>|UKxU)A#IJ7n!uCBy+W23{LbyrDHbJ| -*&Xv@A6V9T%RfYv~}`&^Y1q<7rB(J>2eKV6O52bi{E_Xn%CcsqdlJ=n@TGPYWm4yUGTc)wWvQ4E}Y*B -xl!fwBFD=c8o}P3^mOpzc@&^xUND*RNC4(cpgpP)h>@6aWAK2ml;P_EyS-G9Zc-006R8001Tc003}la -4%nWWo~3|axZXsXKiI}baO9eZ*py6baZ8Mb1!LaXD)Dg?L2LB+qlu+{VOoaWJo0n&rZ`!>!~{9Bu>t4 -Z0Cu6cfD~uG9*G0&lJh>C9?WVpWpuME&viBK}pHwI`^T<Oe~VX?qc78U1~5G95DD~o5e~bWf9ENe8tO -B<V6sz7WC}@+@Aw__*Rc+Fq3_V9#%YKX;o%b8ORaGvozb}(PCL1v)B47dwzKM^4asl=YL?+4J(&|eNY -szQt;J?6+*C+AFjW@{CE{eFmW^!Ng<BetE)Hi`TMiirx#bJggF!?kK!UY7{H1SqE(jWB})tat=JR?2l -G5#u`J4h$!C#-X&!V}&D8jMSz9JmWfbf23sFv{X&O(`tQ^r*l$6ay92M&76D<bs&6X*w2=CVP7S%M%) -0rrM*hlP4-Yl0<!Dc)c^D2%v2W7rFCKyE6hqL#ZgtHZ2h>`sBCg*GQ^=+DzQp8a_;h%v?d>RWjX4iQo -4#dMuWTirNn&)YL>>T`-$Avg(kSm;%b(G{{(F>*?Z_JTX7%%GC_^=NGe$+T1<04Ifiphk>@nizmH=bI -fl9o4O-n(etz4^Cn(Y{%OhmZGam9?JV9-s{1nic6vuqwGv(sjae!HYCu;<Ly%pm<3MqKV^zMJ0^`VI> -O|M)SGIK}im-u77@idIgmJFQM};E<c{1y!Va?>y3w`eN0z8!7s1U^dA3SAPq4+5{oM4w19IFM%Bu@m1 -KKo*C(L;HJr<79R0HrIPk3GU@7&$SC{YKs9`wpRT_uZvl@_m#tcYw-GKWy^5cXRJP}}Rb6&+IS>7rQM -V_FAm10#Kyg7Y)^27V<$=l0|>&eB*`RU~1>>t1Y?~V9{|5&jro)qjnO;XP>^ry269Qrz~@(7IaLabe* -&QD(BsB@9T0OjCd7W1M2-xFV?<%w2W-%zEY)Fp5YKP^Q9uBKdq3?mRYN-K`0IR|NinI&n-YPBa%qJX0 -n0ra<Nm4yB&>1vcFEx6#ua>2k-0S>DQG96Trf)$yVMe|66ZJ6gg0j<kxIP_QEEEoqb2Tp7*fgA%=RE! -bm8p>qErXZjZ6Xh%jf*JsQ0r{{AxS*(<O#DK`^AW+ABzz^**CP6t7$3bDHfDz7f_fNmxc=@Kg46X7{N -5c>pw|D}zAutl8Y0h?Dc7!Hj`|a1F)z^-2Sv&AvRFsu()YmlJ%dU$93@rLXFqkW#i?rtohg$U7<ehr< -M_k+v52=381nqLq7gK`pT-rRSu_^nH=qEFx1WL}dH@O<jl-}8_a+1~<G>uLds6L+auW-KOBm_^XA|^- -4{0V6|Hhloo?*lUCp36m9Min<<6^)bGv5RSK58DtLi@9ApP~#QDH)r%&OV$XAaGv!7?rVMr5rqB7-4X -DFiTgfDv4&WW`pCvUwWF0vdU4hfrDdqXtOzv5`mT=VFpDOM<v}e0O1EcDc)yMBIk6a1^DoZse4looya -Ur=Fx(!d7gl69k(@6e_&V{C6(wrL`eaO1UwYD5Pt|*@+hnSdH~f$5KeVtlU$(z2afwPlH(2197CZ{Ws -DUdV@NxJF*2Io=qP$?V^+(M8tPWX!0>|j|FCT^1VaS^Byo$)6b&7Kwa&GI67s5YlL;STjan|V%fu<H{ -C<lS=R7Ke9e*H0u)_;3B|JuB8F=jRE@QA6F|;^MhJ~#5b&4@kImF1y7g{P-Pi;wx?%j5o_=TdXLHFw5 -cA2&0CaL;0LhA|+KV9J|3ME&;Ian#z-ej68N3yu>Om(B)2cXvBmK%rQ(sAQ-4g0%3hptRp4+{W}PY#< -sWgh%{s%F%_B~I5O_lLu-Bf!|!aRd^qomQac(UUOBNpDk#(m-<XO9~+zE`SJ;eD(+5U!I>1Fl4-!>E3 -rJ_u@NmxFvXa-?awA^zW`H(QQBJ7=+?Mm4z5JIyh=NDI$o6(w`4+4sSI}M$B4=ULnX}*wsej0WKcqVB -Ca(^$e%Q%rzQF$U+%Oe6K9$xW2NSc|$D{4gD(}u&qRm`ux`ww^#5xa>e@!?Y~a>KkAg@G`+7f+L%ahd -@nYz1>}V=#8H5QfZgkuj%!*;R8h_6(SuYdR3YZ$3D7n0ci5{#I9dYkuERRpF+ZPqthN*0;{yMAn7Fqn -WjqNnC_JUBk)qBm)X%u-#bjI^1O@+7iG1@Tk1KKd;1eGdPWOBjmtag+MDp0_@~U;@WPUn%vvaG3eDBV -8xeUBwj|=8ME{1A{2KSNGur_et`DPE#fuA-{3kV>s@US)8*1BX!Uuu~^X0-R{z-PpTo0%KtYf*gv_tT -#zuYdUX@f3E9KU|%D9I@QHO6Mi)M#QJ{XqKl1Tz&c}O2Twqu#4+Yud5u-#(ore5v9o|3ZT7V_-hgU8Z -7TGU!T0kz4!NL7pK4JdcFWt4;prB8MzV?DwCF%t&~oyg`tLZUBV{(?_%RWQ4qRD)oc1zFflw9*=Rd}w -3CSu9Z9=Q_*;j1&9AQvvcGoC(&@X&!q3*7wSy<$CV1kfKV})UeL?8lMerVB^vlTG2T>hfU6ZBD?28np -E5{lJxJoxYwkL(Z-LySQcpUdwk~YTIaastpMo=ePYP&*L#*1Q0$a=)i=4>sn6vgn|dW09VrI_6dSXdm -_!3e!WLE(DILp<4ztJ!@E)K4&#Cu~Zl1VIB2t;==Fim0qOo|I!ExNZ~hgq;8$bUu<<1qD$N2J9@+WiN -=HCMV$@1|=eAEn4sxTSrJZ#as?6OGF;c7|raWE?F#iQ4+Zlg+kA8Lj?0JQ4^4wunuA*lsITmP%e3iD# -F<+&4sQ3xah%?y=IYpS%fiU=eFcEPd<6DHgM%khbpR8nNszPjkl~w@|@g5J1fwI3H-bhCDm(jFrQ(`6 -lVm^u`2r@(?bNf&y@(g^EUG4nM`l-dIt$Ogs?Mz9fj!SmI8~*LpL?F{vD10B(dZLFH5<Dh9Cg6O{eJt -L;#fZ2M}+%W`7;CKL^i)Lszba^8z)?r&ZiMKYnq$#S~i;i3v2(<`6zt%#oF!RMzTtaEX?UnPLd4PBY1 -RWD$wYW4<Wd`~qIoqZKMA-E9}H;(@th1!}M9?TP!McA)KHw0ozes&aN2*ss4ewLbd$no?-6?GG34sFE -mTLB2?<d<NE$h9Y3s=)<Z4a%S1#KxM}>Rd!SdNUTf=AbBeZGLu~t1P>>gFr`Wa0sAcTKpuu7JU(WJ!O -@|7b`pjWx?CQE`Agr+XBaAAoE&jS^iE{c!(GjxlSD6s9spsgkpsVxGlSLSVwNtF2(@Xt!S;g@l31YQp -T$)uj+=v{Cu{)B88BZ}i-+cuzkN7;H!yF!I{#o@zdL)YikWv<n3!ZdY)HKZu7H8$9K0%@Avb*pJis@Q -`4GZTxfbB~1fMNsQ3b;hj1L;(-bk8`*>i=YPSR{FWIdEp0}~*=Rk(641&T%`2au@N%LwqLSOqR{Lkkz -Yi4+~fqvIk97gJG7A7Y=>8c;9D4Op>EE0_l(cnxWlCMhmk;Rd=eGEiaOwZMT<O&_2OQ1M{I22??(d*^ -%xnZyVQ?4~1wcIlp`eERexi5^Vuq2qFJk32MrCyl7Tr{<%J+M^eij&`IDH?V*_Vzs<2!IV<yB3wwJ!; -D-M02y_JKsu2gnwpkWt0{=E!TZxvpireMsi%fy;M+Pmrp?QDs!yhaftqbPI3`revlnO}(JPooIpir+o -^uiJgex)|EZ&hkT4Sq1mPbh`n;)7r?F)UnuwhU6?0%6`nlwve&^EHh!K0(+e|Yi7mjmTbhI%>X3a31W -IM(Ddl-!kgrYfZCqn$<zLGD!ZM?!=H2etDSwUjjw7zaUxP5QGqy4U`2=*Ie|KfQEe#q_AK5jR2w?9~c -vDV^K6IVKl$m>eZ-${O?MImC}`uFR4ZxSbuEtbGtg=<RB3+_$hupSC9+IT)P6*J3L~2DxXM=3RtbqSU -CuoUfBQ9<-H@gOeqf3=e8ZMzEy;UuW1IzqL&B=wILsAu1~u<_uYF5~Z+hzuZa*h)S0_yi{~8;|X;XGz -4AIR%AomDoU+}+LJCJhmJ9iwmft<<v0qSJFtpXR&EGxgPyFdi=MU-WQceaQ=`>xsrU-)H4xjvA>$LUR -|%y*sS`Q+@`!yD|E!{1W;8fjcX$H#vrJi@KGBX=3y*Gq4)a2uhSE)Jy*q!0f3jquvQX?!sn1NkCxLuI -kFcEtgr^d$v8n4SU7DC#8luM8z3p93o~UH6XE$&qq(hZSZkW!n1`CWv&WndE<_Yc7kzoo@@1_8ctgZe -~SCy>Yjn~O4yq<KJavvoRB#zDj>i%4#3#HD?gI-oNM%`*Y^I}+Sa^#`(W7sFP8iD;Ga7ZQ(q)XJ*Sp! -3b;b9Y=Y%KC59&m)wOm5fYEvs*+xg9jIO`3^5;;@-Y6FNg-A&=(sxwmD@(>HMo1;#>YGo%&5US~@??T -%(!+-m*^t*4m;rgB3%4flV^1pQq^RD+(bvUXD!;dEKXh}t6Y{AFw(9~)GH$5kY%u57<e5{v-EM~AKHd -gswQTMvNA&xZ!%bn@FUjjm+Vq#IP7LL(tBT7>9^N~32~Po*{suim~O|GeR-#^(UEHjaar)`>`99|M^y -dT-{XE`_jjE&yxMXFo+EF>~@<{I0XiZ7`-12IPF(U{Ds;!}0DuXWPf?fVD;5B_H>DW9!9$Z-E-Y0%lp -@?Z>V*ncoC|ivkIH4;psbO*0Olz3hin^sU2!g934Q0B7R(tr*khO^sj=T5v<Q4|{MRx`eH;U>mt7Fc@ -h=)8WWur6Y!zQ0TN3@HLHkYxbni`kwB|RHyztF>S0Ty16Jjw3($-V9djs144ZlxS};ezo=udPmjWQWt -8m9hFufT9_3bxqyTfwB!taC>En%|v&tiz9rh^nXxKW=TMks;_x4kCBS)z7Y6$@L@;T-ne?IhV%(&sgd -{1$@&Q_7P1Ze_Sg-X<5Z!`AH(yB}yA#XfeWwF4FOoX&(-@}0V>`E;MbEK8v*zF9c3Y8}cb$sdVu{f{J -C<FEb;Cyx|bGh+f>b9o8f@Hz=co=x?9(U3>S!>v*R3b-WYR%Otj%#%LaC(XTl4cU(B4VRhi5E$_gN~n -JQ<UbA0^>1rO^pibTZxk3wT*XpFw~^h$yAG0N-4-T_u-c`Vj{4vGVRB+wF~cq!6OjuqFnC4|Bnuznqp -U$7IeD4lU)*1hcT8=O{dkOoXTN<tV8>rvIc4^JZn(ol8Kn>z+(@R{$2}e#I87M@N(2vijA)*bSSKL?b -gD+YB6&Ag>mnTG}*Vs(NBDvdJ+gZKSg=F``K9}P4isLO5>D+>XzxfNR09hdDy<)Ha)%Zq~E^nZ>gN)k -r!?V>ptsx(v|>P&pJFbT)8et!b2Aqri-s;MEfN7SMg-J*vS=5YMV3l)GfR*=30$#iaYvoi$gNX8MWFk -VUH{()!N<5gH9ncXbQw?f$~L9y<U~H-?p_{8iG-FU-1Xi*Qm>#7Fr+K$Pm1<CBW}^6bo@TpmZ~qj^Wm -{!sNp)1as+_rWpQ6tsVSJlJ0OxA0aJ~hsV}At<HP!2sPu7%dwdEMlDG>(LkO5-IUhlFNwNVTOs6|+Fu -3vFIAxqoH|K(YZ@xb*r`0OUF@E_qMkiy3pF{A`C{xiGH?u>F6h;~=1E70#K2m7vTZ~jevCA(k%qNfqy -=S^hBT|}OJrJSzdEV+chlr}`K1P<TVc>Q$`k*dC8%zMCi}MCDt0hKGVP{Z+02-d1Ns7nRDW+aQkH?L* -9Gf~W*A|{#zSh#u4E~zS%B?g*UJd`i^Iu*M~Qie>gYMAkz@HcfW5X*KW<QqL3SpZP;O|j-Rt*=U0=Sr -Jcc#hgR`n~pn*^E9GoXuV_-{?U%>>=V=SGkavX3aN&?2t$`&+LtxqdDEv70;NNsR(UX*0`J}IXPOPJ! -11;~SCdSSfNP6n>D#F&7apohSEC|Np|e*+>o1kwxtg}rUmyIncXc<Z#=V*5xIgXNT#n}C&%>Rm26BWh -A0ms2=eVoR~g^oyjqdU5nq;(l`!$8LE!qR%~c2U^*(BTw#kUr0j#Q?p&H6WQha$6Fwim0Q!z1ahD0Q^ -)is^V$Nz-Q0_dov1dsN%zpVX}`mPZV=|SW^4d-4sN>(xb|Dgg%R(aAe0jVTrg@2U8cWMXyo-sfp97yX -=(lb8|kTAA0IIuhC1F;y^LB+sQpOW23k4U+AhYKuF|pAzQ;PT8M7lh<T%*eTz7_cUAz+-4Uu15Ns~S$ -+_snRjYxLGiEFAVG442&Y_(}4_>A76;mJZKvw<sl#ZQ9o^}9CWw4bzw0xf>R9=nfkhmQCCYgTr0Onhz -D4EB^#nEV9mRsla+^>FnAr6JuWntD^E1CH!;`exj9oDrjYbCxPwQ;`k&#RU9Wq5%K%VTHz)U`DDNtpa -pFH_wi4t!HcPt#%)xuxHL=WQ&*pVRFp#{2Tvp1Y3m>^9j#Lk}~Z7Jqg?qcT-o$;<j?Ct_s+UB4ThH(4 -p|VXz4*ZH;{%RCTNXzsXBHie;i>;C$=T@D3~m&v%5QE&fOjMpFq+A!5@?2bPmsb8X)sLIhOhfhIdVy2 -PMz)&4G1}8BK%<9%MjwcZ!I+JEO&e+8!f)@GH9!W;~u%m~|J}ww4nJ)p$pGMV?sZxKi_LXtIZvno}(> -)@D^T+EQ5-$wZiPNQA#-v~Bm+N!86H-L=!R9H*f#D{UM>BGz`U<9&Sh%5#*#T|4)n6<b>l&;g~l?B6E -e>8MNt-fiNK*!Q}C(6JO<2(gXh;a3|yj6Z5QrdjJ%XX^~RGj?tGq{Cal^3chS8~0vsUEIsT&!&r8oi< -7c&&;Zv$y>`~J&f1}y~G2oPkD-s`nt_?)l}EcL>GhXk``@PDU<2jvDPcCb-(j2tQzUsAUxDR9Yrg{8} -<7RV*~FP|J%(DAQxmqd;gmw^%rFIw83ONwr(HYYS*fF;$7!V+mAL!#*!_~RMQiqzVOe&R}OB}?Ue~C> -?xxky};j73qyJVsrdoIO#YN2b+#0$?;btU;MtrlqWM6Vz!uSG<<9isp=@*ppw!_@y}sCCC|jH8Ku*2l -(D{Wt-@fd7)#2UQ+uy^h4oB*}o4SL~=*^p82NB&g`}6RoyCbi8(${rI05#`2KO?v&=kRTZ-#zPo$sDb -XcvClMxmk!KwzH5X*F5a})Z(5zoJJ+C_xH|4>|N_{5pQB&8!e%SkJR+Gm5&7a{{c`-0|XQR000O897^ -_9t>{;I(gpwkbrS#pCIA2caA|NaUv_0~WN&gWaCv8KWo~qHFJ^CYZDDkDWpZ;bX>wyOaCwzjZExE)5d -NNDad1#jN>tTO`mza4fh0}VVr^P9+4><3WLlzap|YrvR8w!*e*2Cuk}2CsQ-6r9<30EC@OV6BFc|Cre -(L3H!73%=DHjW>6caKoL}u3h+y2=xi|4IAAQIkwItAXSx>0sD$#}gK#cZw;IBkEz!EpHe@xk!m5GG4d -a|R!scTkKjB9M&1@gG-jK76{2t(mgOSS48kCzr47`n$KMXBU@e#%s<LElL^h3^1FWso)E!i#krfu`1^ -x-pmb(Ma_j;1%D4n@vp3E0l%~5Ef;wN7j(fQOlhH&BDhqdsAdtI3Bg4KUrf{&&0@mv=|jx~Ra*WVtC% -RV2(Glz2tLmX#bix0c259}D$3UXjHxu6b7UjsHFCU@rnD^66prAUAo*QF<OUaa6L?Q+uo<Xj&5&RY6j -W1}4EPi>ULt+pXxZSBX0kN<L#rHeD!yt16PkUU3EosW@{1nQ(+}@(U(n${CP|Y?0=-W_NaQ~g5=OQjR -tYDb_Ds;FL6C_lkV%P7HAXKxj+4HFhd|<wg4Kd&iG^fKTCL)8I3sj0x4CPcCP<Ejb*@m*hs0M%Zqh-1 -=&7xU`18tNKo)d{QPUQ=1*fYnK52?l71d9;GqCff%2dIt&fQEfR{0!SfsfIDyxj^&s?DZdgz3sx+5?` -JR7!t~Q)65sTaXj@sI%`Gt5-2TG_%(%<A%-_=9h%sIa4k^=1(dLIw@JlhG4n#<ltJ+ONm!f(XJ35fH+ -pz6()^hKbOuGo%tmg_+_^a_G{7hp#D(|$dZ*MzwLnSbL-HwsCCSpC2ugUi6QMJQ!G#XAXl7hrKN?w#a -=EP)+@wqb=X4QFq*gN1!Ql}>oEFhP5ZK$%v%6zyOU)>WY4<kglkyS!@FJnVO|F7V^%z-o#MukF)~E|i -*35=s_FaVk6mLWx4Ku71co*|V(U49QTN>F<%9Oo<1T^2o>YgLz*8r4C6K@~Cukc_0?(ZU&r>zi)?YY5 -YxhM2yBS~9RKe{NyeMSh`{^wI;$Wp8)33dlOx<fC?7}vSZhbWLO}U&$EeAF+e7wVmSH7s$r)rh;sLxh -M^wTbR>>l|1%<Narrhuc79VP;Eg+@5Id{<#&)Qc&Utg;Isyo8Yz>yKcn5tUIkGMeYO-?EwDUqV_mNeL -8{y_^$FtWXr^pU#K|?W6ve@1xhGlR6_t2>bf6Te7$Ok^PP(wuu^RlZ2hWy}rK*FY_(lh6h``q3|Kz_M -Ep}z(InEvZxpY80&cm6<3I_^?1W_r{oPCT5WiEejc5iY}4(N{R)OU0h+0XmM)UVu%Jtr({Bt4DfOUpT -d29Wg99w0K?DQb_W2;(AB=_rGc18r&2+krh(nXJ5<&0eUK@WmVf^>BD9hj=+``tO&z7qOW7yQh<{EiP -_HlimydwKrW1qZyLiSNfOR#lh`kn=U@C&+Mt{la{jrexKPJ@mFJ+51pB>SsjRmP<4XID6skM*!A)v{z -Mmb?tYF)WyxbDRx1lNC|;jYn;%=GbOI)+{TKbXlMkJ=6=$w=q`ncGJv^iRW~|D=?OErgQ_5zV;>VoSp -#iVzA=zWH#<tykt6f7>@_06%58>Kx_D@M^*ilvl>Td9SoY+uN6qbqNr#|q*qa$y#TYKO^Fw}XEJmFjS -Vd_o3jO5g>VdcVTLFwmRMGGt(~on*MV(R_%fj5n#@ASaHVG{jJPv49$)Z^VcdQoPILr~WH7Ol9(b{I@ -#!N}ak+(_E752Z_}dh{Ict@<=cPX8ni%_v1{BKxJN8ya&S@!aB)EOPjnKZ5wN<6l(#4IXWZMJwDk?Ek -{YHX^Oiz4z?ZzzP$zYZUT)wfX=zf}}MOCOY4J0e45$x@8TM*%@cXo9h->JMhaJUd#`q5GUr73XQ7}sP -*q7HNK=h|LBIvH)2+(hm|A|V_dIbq+uw`mxIa~fkTI0vql(4yY*5bVpdd%Nmea$CJ_#fi~^*{ikeQ@f -0yp-1zrz?s4=Ir^{`^sabJV^8({COwLJ#<3rcdaKS@Z2Sa+N5iK$;|<_Z4;HQhvMo4mP@M6c<t`@Mqj -)1Swk<$wtd~oxw9_f+R-^Q(jO+`psr{ARepc<JwZ3zPX=5eq>EmpMZ_pN1NVA2>MkN^>8a3b7$>Y(@h -RV<SE!;c%rnBC)d+i;7O{cOhQPGeR<L?4%=}Sez4L$o0fyyw4dM1NS$1W_bxP4K7`gO4}J!x>b8NeoT -d!Qz%dun1!xH_LZ)A>QP4!agG!!x*Pu5Ze49`5`PP)h>@6aWAK2ml;P_EwW*CDch4005Uu001Ze003} -la4%nWWo~3|axZXsXKiI}baO9eZ*py6baZ8Mb1!URbY*xhaCxmfYjfL1lHd6&<|J!LS};!JZgzdF$Yr -1HR8s4WU6JmQ6%`T$h7?vHfM5VUipBi)?e2MC1`k@wE>p2d%=Ejbr@Lq1qobn%gHQgr+48g${yHnRL0 -R%b_(@Rm2O9mY?=zs`?=%bpX!a?%<p0msK^i{Z6)ToiWnPuOoH+}#{IQ5PH|31I*I(K6?Cj64rf1VXv -ehFiZ#es+xM3v^wjL9lvv>b<`TgggE_{h5i9?<WK4brV@j;G%`r-Y@A1^)<2N5rWI1&Ef2&5aVi)_o{ -jK$kLD@t}z7IC`y;j<dZ<J@1|@ifW`zpVrfWF$NQl<<cd;1mAvSd=Yd;Ik;>EENY}%j}k?8uk)@c<kc -x-H#vM{q$jR`SX{L7YBf=GEOw?hL?*~mL-cUFFpDdrzQRv3<irukR*!*J7-tJPiR{s)$kgIBfe%_gh9 -?1FgAk!0YjK=w?P`^1z*Px;~8nc;AK^$3@7*n&yyhJqv3o$^w@CzaCSBv`)p1V?T?wbQ}ZTYnYUN-re -B#yBt2FP=O^OtE3w-T*-3-#ufb0Ye75>M@KXaHJ|F&<8aQ}1@WKFB&zJlU1~}M08~9rToRrT7eq(?)& -j&s>z~biFz$XSc51$SE!T?9fvw>e3;G4(i0v`>JjLg42oAOc3_Va;%Gr(os1q^}X!{_&l%a4Ei^6A~> -M+h#(a5x;yqb#g2JcUUh#O`DSzv=5(><9Bo@H_}_gAL#5eZqYjW=U2!kFHKeJPor5V)s~F@8T3T6?m{ -8oQ!~zV7p5ASPbBoC?69Ju}t94`HFAibf=lw!xO<njK(j4r!p=PYL8%m8WGGPwp!Csl)>>ayVyeLWc& -e?k_HIQvNi2gTP_4!@g%!vv+>|~aLg{@DR6WbXO&=gu#Z}^)z)Zsmw!~EWT2FIlk$iKTD7dq01*$u8z -wh~@-gSItF2?47N>+Otcn77WF)W8fNoH-Y(;dFM-~e}krx^01&GBVizN#;u;V7U>jEZ}87AVis0!f$Z -k_>);`N%>xB*Xj6G)=;K(i_E(N^%}j>BFnWshr_@3Z1oux$lWB=IdL`0p?O_Q{g}{w9V|sQ{dslyOc3 --(OrXau*InGO3DhMINMYSQ%_QMw=n&KLZVloQLrmWQ3{sFyVnH0gLrqYte%VV3#$R6FiBnz_~P39+1q -I#zAFSitK<?X;x|rfU>^_{dm$0ic0{--}q;iF*G9huGCqug+Fd!cLq!-yI`C64!8SM67$`iUaIo@rkz -r7u`C74R!9!`0uK-+s6ko7Q`&?S3iu2_m(mC3Uw$Tbz)s-#0r-Q?vYds?AV)x}jc_h-7DQ1@4`3!bBP -9j`vHd-Oya4}BR)iS8LY^n7-vl7pu!JQ60)jq4c5*8~fx5mA3UC`BoP$rU;v_B~SzZ-+1~QGM;K=Vy0 -A{}jH5MCMh+<~z8WTP+R)DGjQBFN#11DfgA{P&kjxZZT{sViFxE3q8$iRJ3V&w(!B*zGGhf+7(9f)m% -O&n@fLt=L)9TfaG19Vk-3ua0+3Eu<+0)s!pA|t{xc>WSaeH%+<zFn<7#>>zrwkn8psnkC>>La@^f;`6 -vQDl`RDj;D<y%rWRMVS;dE~LXsGeS<xi!HdXs28$txB#hn$>>j^*pl1;_9#Q=zk%ga&j-I1xL|}rm&C -9PA;=jERRWin6dN+&JT9cMq&G2k%OCH8gsI@pMyslXwG5Fb<{18H@#INGh5~q~10uqYrVxZ-#lrw+nL -?xBa(xOl3*ll6a3B&-@8Tj$$(P2C7#RFQF3g%j0U+&F@d0I16W`JhI<$5OVgq6X>goX$ARNTjeA22$W -oZ@`9<E90+c&TVQWJ3*#bRWg&=}0xM#hGoZ3aV9=p~VoC_+1ibjUcLN%8^Ci3J51Km>(RiPAvHhR!6a -m4Gd>D&-R1Dx-3r9O2EIHwxn7^5;(<>kQz8?S^4KoU!4TpNFuwHimVAunlf`0Q)ahRdX=i95&&6ETk{ -)<}jk4#O3+C;7Rbn?5C@>dU|p~>5Dy9C0!6@*blJ^yCBw@#@=BO%zHf9%|mJ4`r+H-2__Koc?(1wPfm -C9c>N$z;@oXsKF)a}xaO#yy*r-l=a6xLA%ivO$VN0@$1e6LLw<}XyISI1t&&}XNL<z+>s>7}QkEZ^#_ -{BMx^ryQ5KT&TTC=n}p6>T1C6oDBjSp+Jd3X~P%lX_Pgr$rcShxdFovDGHI}n<IePbZd1HZTfQ1PgNK -ez)>&8UHI-GPl6c;gO06`}@?-2tdD)WFG!I|Ai{8hPOkKxv=`UNwmPst1M*RA%7F9e{LQ4g3a4@(INg -cjLW}%Nt0oiX?{3LuGBk)l#{8+fdJHcjZ1QR=exHUd|b&Kr(Ble!>Df5G5v43tSQ-`l{LpYg#<#jXsA -D5NaCDg7``kXM?&lq4onkrH6q+1XS@S?9H%gOY9KaeuS`I1M9g&;p)}onw`pLW(JMu8NN&k&EV5`wmC -HT2Lp=E%<a64%s1U!IZ_=tIUqAc2<Ji-4;ZR_nP{h+%N(37^(MHaxWA<GX-Q~Ai2<aD^j0fWC+`2i_! -#FUc$Fkel>vIDEYNv+gw%0!TrU5Y7b|d}?NTDQwpC9j`LUQu3ck-oRuv&fe6tyo?L?zWRhnsx`zy7pq -R)!+`Fy^c@2~6GUw+=*?sw=@d;FfBrtAG~on`wG{oL<XL9rjtoI+Ls<)HR`jR`9}LscmQ^DErjLa1|A -P-?{j6Xi(lc%&mp>|mDGlF}mPc2s3RE~AS#NJ=6`mB47Z1QwRdF<AvGNW?^IMCXFA+macjBLj?Vm+BO -KiR*{L=K@RGCDfZ>w#c$!mjS7eghHy+6{jv}(W;Vw2OE5tR9H?EDytr_vPPkcO<iJJVmDYDjWu(arv+ -^3`uS2V3h-ob$wHHbG`9?Z7$_NZ1$dUrI^C9hDE%vap|U7lr_>I!Nkn5irjzR_e&0npnN~UiHo}nS;M ->YswRw%3{IJHf4b!CM^0KJ-a*5qsENyU}Ou^OCEYY+cRft^Hb;Mj?aDiwIXLs3D>sfi7kVUO@6UDAUH -Bz<R43K^oK;i)2rG#9PF=`1eO}#GjX-|8%wg97Q|AMAKt|!BjAz*PoRL_PMG4i;Y7RMwLl~Nb?Kvg+& -z>aYGk?}+DJ|Ci3?WYD2RH^G%$}7Om#&HkHO>G><a%w$*PD?PIEYxY1ss<tQB@wEE)+#Ux#jPoJHJ(n -|Lt6*Br{&OYtw&@73So>Vo=mr6sVYN2YF=8Y)6&DBDC02UHgUZqpG#ah!MZBQ!897P>^y@H6MgjEx(N -qv+p7$ymw1|q!z)NR1kPn?wOv8danQ61X$kVXj%{I}%!XVqE`-8u<D7Kh<DDx#&=^zphD|)#Zh<9TJh -HUBacEN442mDFWAPHEt<-9*ad!kB+51u51|1OWXuw8zo`s_?^|t=fc1qfqS)K_Iqurp4t{}PYH;mKfa -kZ#Z3KekmYEb<^Mri~*(#yEOM^KCxRS1F`OnQ?folq}{`c2suJ8^WB=rRXoVa*<XAX8B3XAnVjhg{*z -|4YXxqz36mjZe<(tsaG`yI#~Q(}e8y0X%yTk4)g;4=6is6o=hbt{`FQ3+;sdAav(779I^hz)n@%R=L3 -kJE#Uw8;0s8%9a``N=7AxJV;GHr|gWzjWyD(z==OqLP9jYk))m@BSK+AhATELF@#SN*8+m%px76_@4r -y`rtQy&eIH}yQ^cDM<vkklzd<(1n<Uu1p!H6-23JfsKzdqBO3>uGnUop?!>*cHYdnd!acLS?g0m^Z^f -U;`slkraLUD3)^!>V)fRX@Nfn*~qFxN^RefC31{mnFEe7(l@54Kt)n^2bV0#u+U8AQ%xZ3nE493RFF- -L^M2fHekS!|#m|-Flw-XIjtc9o8^bTuYMdUa-fkqIeO9w;(s9LBKwqkKA!5pivzpPn1wf9rS!B7HMD? -RFvpE)DO-eNy+JuTO$|>y~~M5$QT}KgpQzQ`cnkP5nY1mx{|Cbi_0L11MIfp89Eg-cuI|b$x>wvrKjw -_;e?mI92rP&f^v9)iS=SJ!ZgQYFJG!n!KzzK#_ab_c9JDuCayrwKKdW2xxkzp2R3PKHGp*n1K<jRYT2 -QFj?(GeqXB9XhX$yAj-X8#wf*)pt0wetYh?p~B3Ox$b-|&H1?K^#$+!m%&!2>a=Uqsw?Y^l2Yp6>JX@ -(~u8`;V~V77Wzk2>7*n+6lkAhH3QVFTU@9sPV*lX}>w15Q7ddQJ}#JCZj=vBw$;jVZ2=S}4Zs{G3hQZ -h*8sU!(7|0Itri+mq$(q^{YMdNy`%I|wxdQoX5qSVq*AsPZvNX`<G6;DRnfSYaiXwYRw805`TmOnVfe -tO!$1Q!Nwqtfq>Q9o;*c0jqVhB%DTiZn%x6NB|~U<GC5O{jKI0A&Sk4GRYDA+33*3c%+lK&+wx<XhU! -4|09dj(be$8pRV!t!3Y*ABD#vPbw^*|@5wbR(Laybf3oQ}-}q<a7Q)ttj#qFu9i4fY6#Qv??LxKfYBM -(R;J;xlC)FVGfH_5(aZg9JkQrPwO5NS9QD<hjO{K;y?@?OAfve#vOQPX*n@a_Fif1i!obloX9hcyt;c -DH3EG}Vl3!jP(&two?T=t-=Fo(q$`c#Z~W>W)oBP}v;vZo?kD~XG34>l1%gnlM6(Wky`mS+DpWVBumV -;ccFY{LV(GCaoPAH+z2SFqx)cPC=MJI13NST={&gIS&q>G8PF<%)<uowXIQwwpuxDHHJBe7(vZ1kd;I -P-eZa=uuH6d_O$M=y1L!?qGH;BL0t<pg<*Qzb5XeA+Hu_>>UgmO{k60Q!{MTs@goyjE8h}mX}{uPFpw -6(M!L8t%$9{62_$t(XzCR(~5UTGWn&xHu?hZ)P=cA19qq@3WwJK;T+Bou4#0I53dcndiQJeq-EwD6q| -EM8fsQ`evhA@)MZwy|1J2h6;DHMy3KeAg02?W)9TVnw@udS#0D>+sJ{7KM}G%<YQWNx`jhhFNaT0&*0 -;Orak<B1sZpmRxDlatJp1y8-i_2A?n9Zm6{E&pEV21`(<F`1E#K1Z9li!vqQh;q+GrOJbFW3l@)WgA_ -T3C<%XE10(Pt<b#ES*<ROJQgWO-kEfHcCQO6j&BkCYF{)(ag+Q5O;mHB0_ucKP|k=NaC5GF2vO(#q6n -In+k)%%Yy27sYEijJ;ad43NGhib2c{<u_+WJ*w}rkH!vW>@Hcg;j9bVzc0WG@ZPpOnixVB<z%L(Y}h` -Nqhq=Ge%Oi$c45_y2~>)COqE>CTFz^hWi9vy&z@=>pJO%;jDN*<MzUhWr9JehNi5;dPa^bXISR&x81W -QbAcI7OUmKWUOd{%5kX0(dv{n(OpV_rTTbWH|pqq<xFiRMe_<cE_zc~M+{qvXezZ~2<;4`%6FV0`j)w -P!%OIs!G*BLafWkHP(`Q$aM?{Q~tP0em|aZ;}5Rz)FC@L>`aH2!<3-Zr0F7|R6hN%(>2P&{IU-&A<rS -NAo^aj0#_ANZC!f2LbnGT-+*k?HmYiE?!|n_PEJGxbS<J@3)Pqe7Q}#^Y`_wM<9=>RI+5nn>J{f!LoF -#GKpS8Is}C8rh(8sx*zBMO8Thj%VHSX*F1HoTy-c*+7pOK&K3E3d$>qb!(c6Y-N^it!wU-F!Fb6CM9o -;mD=YLpXqQ&a*zX3+0-}9Z|ZZ~yM8Ac38<9ji#&--e9fS{evQ)wVLg`}lzz9NJAssgaEMPFZ_18{(qY -Gu{1c7C{zAC00C&un8|(GbFalVl4w?&eAvb!-{sDs>j+ywOyzIQk@($7NU@7kvA(npa1avnU7ONsg?? -@r<lpu{v3+jN5)`a0J3zo=C50atg)!{~nq%}QE3qMjbr;fP;vNbHF)j{y?Hp-I-(6*6Jki=oX`Z|q%0 -Xkf&51IB43kN-F;~}?{+mQ5hwH1Bri6~FU+?Dd<M>(h5`D7@P?YtJPvUuzk&&~hq8mvP_4|sQm{gpp{ -EQ+k?i;zlm=S7t#Q0{JwwYfNWQO}^oTjsE&PgNW#@Hk&!Ss*Kic6y_LI+EBtX+~<wQ=0QI1k+Ukth(~ -#YW8Z<v;SiEI!+I`uA3Jf&F3dV_dJet6{Z>X2v>)m+K9UOM&W_oUT&Yqj6&7wj&v<97qiT9{)K`DFZg -wqGj3YhUxMiu%}ncG|Hj-NsJ(VKh-297b0**XpcesPsxU}|d|63d#EY@#1t|=K={}OXmVS`t;x!h&M7 -&)q<547RrxTn)UngCYVv#Lgzy9XG4$RxrF@$EucV1o`E{0>zFzVXXDq58toR<RIji)FMOY=@3(~8y)d -b$DT$WhPN4|?XyD_{80l{!A?nQSb8aaeutnQC4!)Oed$A$#EHet_afYYRZh;YZj=bnXa$gvt^Rrs-Ak -5&fz1H{BzmTZ8ho^D?+qZ?MSUfiN#mdFq|G2kWX-0!2j?Y-BiIaTMF!_N`y1qQf%$ArHdzeTYKdK+^Y -DDEUzT5CGl4q8n56!VqpnFe^=+tF)T9W<6us3h(<3q;3mZGy%0-^o5gmNun-9;sqogR&>WeU%)KzJ<M -W*7nRlJ3-u-!zEFrnsUugjVskIJe2ZSc(}l?Bik87+Z{2jG!v{I#ds*^*GkN{Txzke<BQ(JV#FO{!+Y -0a<n|53iKr?vK1|Gq7-yE>dH}NlbK%ZsO-wl|6;tu|02FTqGTtRR;uF?*RD%I~&nXVh?$LX@I<1~^U# -kbiVH+P~{9i<F9QgKIWEP$wr@5w0F7+dJ{ZA!YLC%`$Afc)tLPxuDo+eXUK&17AYttxusHFA^x`d@Bv -^DXmy0dVc^E0kYgr#sVhU7*kl5v=(_=Xb=)sG%J~4QXThr3Gu$q1}^J7`AmrHNt9K%Q*I2Bt03!0U=v -j!`{FXws{Ao;Z3P)>>TPJ5cBtor<&5vzsWJGzka0!ZI()pH`N^2r}2HZ?_3`c1LO*EmjeYDj7ut^)*( -{9&?8%i_OU^a6XN|UAU_&BODbZ~RZRkWZWOR`#>!Tg4Vki@Ues6p@$)QiCo!<bh5zrSjpgKO^RB0{@f -h<2f-xk2HKHdtssi(fF@SOGsnsYgh_CPFXmr<#f92Q-#txD7q5#<u_E^|u@b-4J^yIcxzZHVF+`taF& -)Ei*E6|Qi5#IMX>$7-Vw)BkjM$KrW#(E=((nIv1H32g_C$<=DX%bm`N{EoTet&Eu!Q-w_<VK+`u{y<R -EY&Bj((l@<6!)rF{;N11We{@U97##*-p7JFb_FEdHDq6p>G$=OKnX#wcOz}Bh@fo<V(s*ty3RqzAwXA -)>R)I}9c)Ee9K%wU7rycdM0z_l^LiRljwA%9aID5PvgvdBK#l?x3)lydHhLlxhgy`Y!9M{|O9KQH000 -08031s8RydFgR%`|U0MQcw04M+e0B~t=FJE?LZe(wAFK~HhZDnqBb1!CZa&2LBbY*gLFK={cWpXZXd9 -_z<Z`(Ey{;prac?cw>u8?NHuo_K)By+Z4MLZ<l2CNBeTB2=kGHH->UFXAo`|e2U&63@vz|_W;$-9U5e -#c&~7Z7;XyTytLqm#K*D{2f=I+13{l->R3&=c705fYM$b3pDkd45y;?vs1E9m~I&D3=n)I7sDsr}$!N -2IRVUCFf^n-@iUTJO7T%b_AfwuU<G}7+v*=W{h0^HvV~Z|ByJCoTp4^HXv6IKf3)7x7WkFhan0@GG-{ -xbrSSI*<h~ZimdrMnS5d*lPYPePWWmql_90LN0>H-=LP+OnMt~oAk0Lr%@HPp#wfU~WsVT1QfQg8f;^ -SERQ#C*!DK@7d@>;y<YU+{c-SXl%jCE?X4<4wvug1v2!b@HS~p!5m2dIDnz-lVWVA8sjj>)a?6V;oku -IrNu#9ZESxVTVVpoI$7mK99E$E7YxF83xN|EnEyG(NqLTRfAqN1n*!~yAWd(Lx)oQ~i$F+lO;0w`m1e -^{hhKJOE2SuHmzWqktTAg@;eA0|=&LDB?XWd;(Kdl)Ll?AE~eiRK$HxTwQbAo%b(Vl~(B@kb_G#SM!r -jys7(@D;}m29|5~pCIDWOD(syJf#X_yA7`bq41w5x+RLO71Iz|)Nm=R*4jWsiG?GDUkcJp`xG66r=5i -f*JL`iG-#!F<IAh}2o|{$3_`?@VmeJMlXQ`iQbBTRd?A@Jh+pxEDFYE>B#2Z$)5egEt!bg>2lkn%X&) -S|Q^jY%g<e@Qm-m@W2h$u$NY1q(@9evNKlQ?oAjF8-N&@K!%7O_LBQ#Cf8qOa$nrSLmXc0XvJ#jmS5J -Ag<zTx6IoK6W?3EpSV=kTLX3KlD?SG1IU!6Ac7tb!D6P4fj9+ALRu&auoCAxI*KW4g(q3c?|9LhRCJ% -9N67Vl%!=I_ipnO{+dxLh;OP0kv#}<2Ty6c1eBdND!d}L!?<Dy^t>Q(cD%Z?QNh~22y#W;*%r<oQO)% -ECW*x$XW8{P0*R_;7Tt`JKG^3G1>igce*2uPxp=Bm`dK_7vzRQ233_{GU0-o$;8)!(^K#ES^=m!&_Uv -o_FM7?6oG}15HyXFf!WV(K7je4-*AyKT!8v-muynmP^@85k&#-5nY%b~hJQUOp`{IP44V~l<Xo_%hJu -;ZssTO(wJoXS^5OdSHX$Q$km4C5(3@)zO+~;xRHvMWh@FGvd(AM4NhYm8t~Hxwy<%FdG8ZoP`d{P?3j -Qr<!hWmT9e6&5wh2hV@EdXvJ~8{A;5&@>w5hTLgz%>(AWRh2wgBM{;3{4|Z?l6-$7-`zlsgWw8Sy0~A -&ot<iDuNUUGs~k9_`~a)y0Q>#_~meVY?xcwXqcCnvvfzku62kyA_buJoDA!1PcC|rF_m=)*~lh_Q<|W -@z?d<mg3DuH>)e^l^jE#>Cn<?SZ+okW`!!tOfAg>V;MHS85dOTNO)A)(AO0dDs0C|73dc>BKHOYKLS4 -Ub(fNu9k7-B1Rpo>JF@Y;ox$hZ%2+{z)!GFkx^AZi#XR5WWsM@urLHJg-YGh!QK#&%(O53HY{bK6a`o -r=b-5P3-4hq%!MPG=xcEzhO@&^H=NLO+t)9_KAU#KXki!$yjI}?Dz1;lvcW|sMG*5WZ#EB1f1N24jL_ -He#6Og|oszbCD1}Q9ot!)UN9H<+m&e4%-gc5XEwR@7S5G~sgTff*6zGfUTM0H%@>L3^oAI8_055vjT@ -Md&B#6lj1k7YG8a6P)iig5?yM`Rm#E#~Hm+TI9UCskwjB?m^80I;ePE^o%e`}zU+Je6-S%fk?Cr&f0m -_N$2li;9!t7!%elTJ+);(7MMRysxz{0qeDrYsFzCw^pZ6Bezy_1oR_bd%QbO&JNt<9Ano-&hI?^Zv$G -HVC7s^HC;PzHFv)Oc_C9@{}6VylX}Cn_l6S1^0=!*p35!VK?+En^uDqga*>r+Fc1s=osu_I`GsaS+sx -69RmcEHYwbmO<3JOL04B1iqg=QX3WD%NM<+17ov66~C_+rIn$&%=mu)4|jLmUkz99SA1^{80{3W@FoG -5X>IzQVeKahG7Crm})u1qyln_)*|p*?)<jT}zWSH<D4+#$ybRTn^U!S}%xw~Sija3{Tl!-{m6VZWdK3 -s6e~1QY-O00;maO7>RoS;bWU0ssJ{2mk;s0001RX>c!Jc4cm4Z*nhid1q~9Zgg`mW^ZzBVRUq5a&s?m -VQyz{ZDDe2b#N|ld7V{ZZ__Xk{hnWOD%#v`!AwO$qO_A>444FCqQIAFirmEQtT}cRI~&zBemiF;ZIY# -3fqq$ZzI*T9-Lu#0^#Z_Owp^rKSwrVKPnoqmH#B2vp;MOM6q(QY{q!&JNgr1AfJkuRAfUtmUD&L!w9F -gDI$P#qacxI%vigMK(b22t!=vF#m@UCxbGWGb0?Sz%g5ezA{`mgs>$fQ_VWfz;GJFK@rti!1&u1s6=h -IWqpK!~BG&Ja;&S0MF6f%*~=$5NQ=d`ODM4IW`)-r-1h$1Fs6u|^8i5K+6>shCeE0@Gg%rYKXHj^Av? -|pkZPx@q^3`RiqS(?2eVI3ZqVQF3T0U;7ThYH1HJQhqw@iog$-|}BJ1dlvv@eD>D4#l1NDC`4M35*-F -FMFlEYR@^hMXtahQkyenB(uC<f?*4>WX8ZIk^S{oP1;yESbc+g0A^ae5bK0fII|El<rb=7#<2;N@SG= -Dg#E(w=f}zvl)^1KPiV!GgeRjB4C(7NoBvQOb>k&X7UEBs6wGkr*W|5BLLdzf<C<LBTuAOfeBxCJ>Lw -pWLJ1p1eZ%EEgo6W}S!~2qa$DY}Ta$xzvOA&1E~RI>f2dE~a{Rc^ukIX#YGl`R9>p?rBkCosFb=RA6! -Q}AlEhkSv}GHrhC9U4vBA;6eBo0ky=Qx-cT8aK5kd!`A|AhR<ydg&B3rtcX_@S3Vs=cnQ_ObY3yUj{c -QA;j7{m^S!ueDR#dnYtPmvTGNgDRJ^k%ri?7qhgUGkuIX8AZph2qLxr=&7ndE<1E$2@dzt21`Ptay{{ -Et74VxS(BT?gpJ}#cNMi_4F<m_#Tk4wZ~-e$g-|51jH=7WgGnM;oMy#Qkf1)+qS(;caW=&{9pX9gU^F -~ypSqqvR2TASqa9CY<xw1<Ae4!l4b)C(p6a9Gru~gW5yR^b%D!OH#fTKvU`EL!>-}bCTkIE<iS><f3I -^@)f{xa+--XQTjxLO+iJoWr3?Q6P)h>@6aWAK2ml;P_EwDs;w=9L005Q~001Tc003}la4%nWWo~3|ax -ZXsXKiI}baO9eZ*py6baZ8Mb1!mqW-f4fomX9N+eQ|B_pi8cU{G=uLRJHJq1F#++Moe;vq7BQeTWQkL -=L5CD3YBS+ED}VZ|}J?Bt?qy2Py*=IdkWJo_p@-^z`(E@F{oet<0?n(?V~BwNjf<+tls-|M=&`ZN8@V -1lf(Sw3fNl!b(FQKfR??WzvLRbRHMwPOJ6C&go6_NVDnm^5twg`<_-iXpr=wc7?1I+X)#d>Ggj;{r2y -V*P&OFsaWPl>jtU;O?*-@W<u{q?Wx3MJACmBHpILOV%yv87U#;qq4INuk4Gprp2Cp)I{_79KfNS(P ->NYiXA%x67im@S@VXSR?FGD1CBrvRsNRTQ2E}J_jFd+UgE&uo-8<AU&PsQTsHWyC6^Ny7+an#TSH3!Y -6er^p~m(>C;A;PWnY<3p}bArgv0SwycoFw8}C*<<uobT>0eQDZ8P#$dECWdmXCCN#qF?sDh@-NE{_&t -27PigVd>vt;;aijs=~@55iap6}F&%saO}LNbTt3nEqGjguh#hH3&XrQW!~jfm04IQ6%%YNL0R#B4<8| -;Cg2b`Gsc)Uc=5hFSJZN5IzAc4r4w?$i?gHH}Bq2j!<r8wwutZvb2FtV34X@L8YX4BeaMa;0Rx91eNW -aI(U<R0qP2pCKjaxvi_*xM~mMuq+1+=Ga^Z3GN02lysWz*Nfdi2vc0=;EK3V9FA*8L%Vgx98|U2;8$_ --r6pNfzk_47DA}3^8(6tjW)yiXLl*m+6nVq+Kq9~}>f+!l-o<?br+f>8{_FyI<-l9}&6(@+xDZh$s2_ -sSTv$C*_uA~2=h3Q)4CW=D(#p~zPwCYT;mA=(g>{Z@vRJ`FLn5rxbwuHbo;#PtKzT)jpC3e&G&!|5;{ -$1mZiqtWH)5p$+ewme)GFGXA9+g9DmQq<LMimFvDycKU2WGFF*h?=qp|!f@q$0bl@nYtT)b1QF?kt@4 -S}_+0`HBKSE^rGXQ-HE@Jr1r!Yx62I9*g?*^U&{{)b7y|oT2P;IWjU!Cv<*Z<7K=rsctMj4_O`sZN>K -~<<EO|dYINXMU^GJ>aQ380oJub^S_sO!GR`JGp)3v244)%)=kRW@<Yoa-J;WU9x!_9F74^6s~LOF0kq -ZDG;GiuW;Q^_pT1@EyeyT4dIPwnJxxp)1~~OwE<|%0(r*R&SE8Uh#}JA`WES!U?M9)~`_XYba<0S*>_ -gs#Fzf)NTa=cq!w1W`?-Xo=O?7~YS|G&u7zNFGFy?j-g5fC#*Q@TZ8Pysl6f^?Cgr?&T#yo-5K3VzIc -F`qmrE|9$YFTEmJ_;5KsK9@Gk7?1%Ow%8&>^Cp^?P<w-FL@sfeOt2q;|{(cxh?Ikra^>hHV&=mV8@PI -j5jJVkGKe+XRfX;Ze4v_CBOnkj8i@DIa!B~RCf(}!e{Arm0yr}SBNH|&eQ$DRh4p+-?R(dP%$&q&~BV -_?J*PMac>=tV(TXw&Cbt%7|#a@eNhj!c5DqK;6*6P5;v6*QU?8f12TgNubqCn+8evLJZjA#=b(dTS{{ -tT$BYNx7K`dExew?JRvvHyR=pR;Y;&t-YKtk<+6U`gT+&MM{b6_jeHhFA-HZ70WuD_>$JO4=Z3M?V1# -ZC-{*Ey+f}(M!XL1kkQfNGOAnxxY%PM!57@0IMcXv1tY>Z(KlHozogFPk%U4;LjjTA|z&b4TGr<Ij10 -tj9#7GOPvFyiTA0judWIM$5#@ChagyUO?p;x)tKq11msQ_A2n(oWCJkN5YF>2ViEDEg5zH|kScb0d7t -C&1r#{od*+V>*1kvY=bD7r55tV1Dawx27Huw|w1{TW(H)3v^lXZ2;)vVQP%u%LG$;tI3^THnLar?S5a -AG)2C!cG2to<)psT!HSE=z4f8)IHJCHd+E=Cdk=0V&HHLSSOInLuZLmVFo8IA9H)O`=7aK{|HFfW5I? -)O8|En&-q8~WXapE#a+WL>Yb|BY538(_XNd>MgC)c$8#!yAr}G)21T9RSAv~MEdcN?h`K1>=Dmy;DTo -?AcZe<TbzUL;QV1FJJ=#A@sss{;6%~|4zr+cOc;0=BlXYR+bzmE4XX6>#7f!qq@*^Qb#t@I7!MwYoBS -{*3*|7Ph9jhw2n1CDzPL1h@CL#Vi2;G!$lztB0<UkxlR;c?Gc@6=#^HrYJrf}ulQN(U>gd`A0dKGbqE -7`*-Nd(uk!h?S>otcomo+Qce&=)AJ{wGlt9K|QFU%0VER%H`8as_a265A)DLvNkK7X#S4VQdpO{#|Zs -+>1tyKSv6K@=HBjD9=Z#ep_7NR^vsZJMV1~v(ze}6<*%-;|HgmQZhIqsVDB$bO9KQH00008031s8R;* -Z!lEeuB0H+)P044wc0B~t=FJE?LZe(wAFK~HhZDnqBb1!CZa&2LBbY*gLFLQQhE^v9JS$l8WMiT$upJ -I<eLdljX$xaGHwOll|+XP6OAa?H>xQ0ZLONlVG%W{{Nc!#^selxRtQ?h+IAxI?d%x~V0Wh~1&VDO2v< -(dnvoIoaPS8JXqM?Ea*>_59d2Xy#LLC=7bUH|=8CQ}`!+A+ryPsUjiE?0WOE{d=0WHkEW_+)f)$`%>Z -E6%>;;+f{|dcYLt?C0Na-hcjj?HHIS^te!b!ron9n)8nzF0OvNz9O+c*KQao=fDDU4uV9kSscdB?12k -kCQjEl7OrEN=t}!Xn6$j-qF}g?Ykc|$d8)&xpk8u4TSytrWUL4DD-;@k930GMZWPUCY|3u!>xX5jh<$ -f(aNzTRapk!&pRM#d>S?~!{Rw#jEWDx<_G-Y+2JD=<ifwol;lC;r%ZM{q_{^8-0>1v0O3f8H>HW>8kB -*hcJK;J_1Vdma;c?`8yl20%2h4uuuHzr=zQfp`L|OlolxIX4X+!uJ<vCF<pFwF6B`Qp``zbBkLdqAXZ --EfJ<wdSiCrW2v@09)P-}w_(cWbZwR{61(zl?&c(1)&|EM6vVyb3*VT^MoD{ALxB8;kq_XG5SP#<wv~ -LJYkdnOwbcy%mc>!I=!0Cw-2@E}PHK(A($pIpYyW2DS<H3IQOwLk$F5IK$Y@=h=KtSe}%L9|{*^=t+< -f3J5V_sn``YFlErNm_p%)522sBkui&rYgAs5?=mQtz)d5_NZmBbR4ytTq+lAl!Ixf2x`x7wQXhrGBb~ -*Zz<ds_PFx*IL7Jm@P!2i=s+LHp3;lBGj>8_Hw*bBC``n*Q*vNTnj(+z25P?8#s1W!9ig+H6HINyKxs -V$O%e>5tODSw{BRnI?sBqWK3Un`&I$JglK;;t4CoIqk%>U!l$Bt=kVK^kihk)rM<pX1H0D%eIbr@xpW -)wy|P~kuMyfP?(@GON)xDPOwCJxZ`Bq;cc8!0}Y=Z@NmdIRDf+$iP9u?!zLDS-CJd0N!%vlTo+nByF$ -rk>VGxJWga;5U@8)>24FEstAGRmhJ2TM<HejvC|F@wTP`mJ{ezaY6*<^Bai4d_JI{QNf9Hy@2duy&P> -)xwYSd(r%)g_S6ulU!p}pm?&*d>X_plcsy=sr#Lnh$eJ8cK&KuLm=saQIFvxfgkCjdLMg@x%m+w~5~w -a>6Z(2p$@t`M!*#l5^cdXt0FB;9k$XLHdYF-#;4zg30W=+)WCb3YoW=<7`q&Sbp>6;<?1S(U?kb)OMD -j?AB`8ikZV^fEUSW@KDZiCL0M4iszed+%mY4&q&OewRCfvgsX=lQyN`mYeNZ<A$Q8Xb18Kxi$0|o|y$ -1!(B2?zjjxaE<8KqVmjWJF1<u;zO-0pO3|9#_hR2*SAaIL**{qb|`B9)Ndp*+jJf|Djh0Oh9L($1-Nz -Uvj5k7}?CE&&D#$B;PNvzSYE0AUKX3l`a(jE5&AwGK!g{Rx*vMHkZhBxq=*A@JcOmNgSn$y}{<DTaJV -AXlfn2R`8T~#+|t%yAFI)I50PlTFc7y?kf{7q=0$=E%1n%H40HOO+0RL;MI%q52GJ3Z#OWKSJXv?6vq -ol$a{!?r3^uU4LAwnM8XsVL^G7O>u5sfIAn{ygZMaC6B)6U+>}5d2O^2oppOC+rrjk)e+8XA;{G7lQz -ltH1?F+W6;B=zpWIb~c^Ck6c&bc=-g6!^SpVu`Ty-3x=I`YO+rxmZU6C;_O%e<!*i*tignWagZ3dQH@ -XW+0Nh3%sCCyYf6UQ_a@`F#y4co}%-i0KnO+H!|8%1XttJ7GNguBM|$_7<zdf-MOq_d(87G^6fuGB_g -T|!dx{LnEc`LYnO8En9zp3Qnt2*H3I9_EuV-^%b)Zfee6;ws>9;Fzrd<ki>hUQP>}qB)1{l14#`xf-( -okn=bI)U&G-TujTkXzu`^BG|!>&yg9YS(`8Ki@DnQy`ZLbeh%!TiZejBHpDs#QaSEbBv7P*a^O;;a3S -p3D0yNS19dw&KDq0#=p?J$PZ*#Laln^eQ1dt6;zG8E_+-?yFnhwnthCTTv>Zg8a6dDimaOcEy=k$Roo -0Vxlq7(IDc?fKC;L8rJ3qGvyYi~GX6&)Su94V-@gDxYF0d<#ecWbJKgv!dVE*Z0<?|NSjIIwJjF{qjR -TQ(iIm}W3!X3cR>(tz(sDBUePJu0<R^LTK!B2ksn$K%Iw9!H5f)3!~6;|S^*CPU4zYBcGVX^GjmPwt) -aLb`?wn>1SCcL12mMc-N61iwlj@|^AE!C|08<>QtrtXX$D&|oL#2dlLYj8J|X>2<?E!q|Zn%8f6kQE1 -6>i`NCw}DzKYt>g^&dAANbMq8Gxp@wm4VUwuVAd7atf@72MiwiWr`Ahl{dE4Pu-VHFPV>_c+HVl!ME@ -Q&NN^LX&Gfg+&lfk}zFaXF9PG>Q?>>IGVAk<)_>a?z;qdb2l14jV4To31S<HUK2HRR`9Z!bC&1U0lP9 -2#nhc{n`C!^7L`1R`I7=VuP$LQ_oH6jlm1p{@)Bgfai^|TGBI@m7MbcYHcax?^rXW%SZ?e<2IW92Q1e -m)t;UTek;n!}@C$**rK0$&D9yM3%pGt1jkt6}XRGp}Y$JHc*5PkQ;wv`PuYm|+ENyLuI6kjv@RNTK)3 -mUdG%dOB5U4c;0T=bnD4Xwf}(g}0K))Pjj>oxfCPLwdci&+WbKQM&;TvO&WU#jk!d__^&z({2Ypstv> -jPhm4KjjPV~4CBgWcxn}EtA#ePo>61KvYL8y8#cW+zX*tWlW)3rU$6<FX)?XTLQ-PE#%-JTS~i+Y509 -7)dVze~?y^EifZL!L?xA@twu{4PK5e{LrDy$}-L~8fy2(=@(Z3Ggf<#}t3)SmauTmMk%%poutH@)hBv -o>&I0|7|?6d-OIa1P%3OQhN8{a*Z$i@{%hV!U&QoqBNm3h`psxGXZCw)iDy2FZX2?Oyz)#5IBJ5sh&j -8LIZ*CT$uzb5h1dC(}j?=S>%<H_>N`j1V9dYIKM<i*Zd?~b9}Kd86VM>mfS!t(qKN0&*2>P}Y`d2Iot -a-Y;?m5(v0+pA?$a{k{FZKB%};;u5Yf}K_(>Noj_S7s8H`CHA1y0=SP{OrVaz~}Y1W<@V(gU_IVJNUI -XLkce2c$>EC4kEBy+mn$@?7Ox{3KqO#M^ozsHpwOjc1vp);zCCL9>60)#I0h(@&D$g783772{l~#y(e -+V{;6fCYe1b~R*|~{y9`dvMU(;g)BgfcO9KQH00008031s8R$mD3+e`)k074P~04o3h0B~t=FJE?LZe -(wAFK~HhZDnqBb1!CZa&2LBbY*gLFLY&cZE0>{Y%Xwll~-GD+cp$__pjhw6p}Md$hu(<2J(=m=^89ei -rQNr+CZkHW1EOfY9tj`7`ETO!;56fc9T>OiAA07+;1F@$0LGI-L5vkwMv&lZm8BERf>N$jMK^z{P)N+ -vJ`JSBtage0~68cy3u6I^qQRC%&v%nzZ>8MsMO)6g{WJ}R%<;a7u`?t>h$!tpI)85`i0~z(Q6<dyoSh -`ZW81I<owV1yW5Ym)Ul~p0bIe9yq>*r-><JOE^lU+R-Y0yWfjUCqs6186dO{rI?Wz{mqMn8_7k?Lh15 -H<9sy}_54;2X0qs`EG9fo~0|}b6F+>TOY03C1A(v7LnUF75>zihi1HRqXAgMOzzXJ!!iiFG!(}a9lGY -zVy1w5iaA-ED1bShA;m^0)NOru%V0al>1VlB{vnW*(>G|DnsRar*P$meM8L)m*Gx<iT=Q}UkH#F?(!8 -Za_~P@<a}6%k8PhzkAwK&u8nnGjSqu#}gir1IV{$Z2uElA_@y24;Tw@%`1!`E_=2dyP>=(f?Q%SwBq4 -;EAIs3E!h=lDKTzxoa9wuOw|PBFb%g<rPXc81vajXgU<|97y^>LM=rxb&#T^e5aSk*+UQWsj(+1M-Mq -zFA5KakaUh7p7xL@C3X3fe%i^4qYYi5*0e)<TzBfBCT-K#4XZTc-yzY$-Zs3@Oz>XfN&@iEjqV`Cm_I -?l;wUq0vtG$;Co3BOFDj~380E||H^>g;4?@)C*8=LDj?cC14HUw9w1b6N;eux~CdB+jC8K!-y*DJ3UX -q8KgMmp{$C~!J_zc9k#<r3-8otk*IbDTW7>Aj+4-V7OHL+ne#!(AZCAK}Vd+!9=9=DJAX4YGb?}F&|3 -N)0{P|2N7j=H6TUg0p19vdX$u{`V`?|_z_d2w`d5;Pg}wnsf{@^uG5YF|bU6rBue>j3)!+j6bDm^~%Q -j*LDhp7esnhM1k#v!3vv!0Z{K|HbBBn9?E#jX&;xO{P|e9Q*yjeQ?u21;gGAfqvvCb`bcLfN?V};HxH -ne5Jm(4j_a|=(Y)rCP672wiV-sn-aJi;7Lta7zVp1IOdiUHqLv6%%y}vSFPVS=18<K15fF;f~<t4iYE -)Q0lgMDngl2wY5b3qs?}@5R@G22TxAqPg^Uo?h$+jA3!<9Z&QN1nfpbA{VmWvF&8_V=Xh&fh59XsgUg -WFAs0+*tjPJ-|F}6c;yjT$AhOcH)nzs^a9N$J6WN*yu_Nzz*Q?%z7qgAx2Fu?+r6R*(121ONX*uYMOb -5b(fyQyr+hSs%p=y1BnmQ{{RjL|D!O?-U0Y2m1G&up={5gbtOP!WH0Mj8bqcLRn5y7c;);BujkxMwaK -!vcS==>rf$NVsh;YTq$kmQhScY)403^Ojc1sf2M1nN3_OcG+$0L!y2YitH(^7*%Mu*^&Bi;Oz0)j9Ze -STCxh9e~|9ZS%@l-EMuJMEQ=LX%Y>Yq2$v_mvUWv<tkZ82_q66i>Y{>zhWlLXsZqCl6(v39(dTnygKZ -2lY@<8;;Z7#x?93ky#RsuO9lX#Kb-}5$`-B`#CQM9*@9lg;c0LXES@~mRW5c)Sg3NtJ(CN<CZWs2>b3 -IBlvcT;elf(olaJmHDNFMn9X>btKt;F@y>);`WA_j{7ct(Eizj)fzvWdqp)yvagae$4<OA-%IKOoAk( -$N<l8BdypIHZ__TG@0k5$LQi6&)z_;xK*;8<y<|ra9x)iJNxNs0ObEEvA>9ORh24F1&?+nXOH%(Jig+ -T}|S!HCKXC;Jw3j;2cZGt@f4+*)&R%98l;zv`N4W9?aEhNtnh~2RJlaY_IMng{940(fgVvG#3wkjF`t -6gt@S9p3NlZg`Rl3M$dN;G~XoYbWkf6fZXi=w8p{2^?=~J<oQH%RG)+Tz1vURtigyDqJ;8!DU99<3ut -JBOOipJ4)fSN_6Bd%P22^}`gtdGdT4cLbdYP_-T|$<2Xf2Ma!yrUF>S|rY`XhodeEMjze^r|G0(7Mb~ -oSHViGGYl_q8C*c8iTGCAM_*hikj{gBr&Wi1s>Yh~6TM|Yh0qj3tK$6|Jj{@eB(+GO<`Jui3m+S3<4o -{atnP)h>@6aWAK2ml;P_Ex7&HOB1=008MN001rk003}la4%nWWo~3|axZXsXKiI}baO9eZ*py6baZ8M -b1!sda&2jDVQexrHZE{^?OJ<t+qe<`U!MY@CnaS|)WfetclJz@OWI7YNhfw6Gm1yz1Cn^ANF50|c028 -7@9qNNo3fl_rq`MBE)oUo3%d(oe}E0c=rDLT56d-=L~1YMWbFvSlhlTfbr3n>`1Fiu{=NI@5Yao$&p; -9b*1i{q@TP^acq=wr!M+4y#a?~5de2h+>y}3zPi-mT)9+vRMcn`U_1jN>Vv^a5qdTxDh$EH&e-QDMIl -i+I+-Hj<UbA}?FO@}iBt^t=$gGtRo5^6XNcjD|?ehWA^^q`&1y2XQBb-5rd29<OvE6@+yClYaV1J9l# -nOqE>|GM1-pa0yQ(HDtJrgh9JS4$#B_`~Rer4m~@T@-`j*n5KSaJ4e<#F(gv+jWxID7S%>py(_bY)91 -Vc_v7<rDV$>L=O%^ZPe%KU}>f&-z?AK?puGAcCC(cKz|Ej}!Q2efDu9z#b4Bv$eBfsdxyvnKCyH{lPZ -!c@lyH2Z3-v!@!LbXkjpvByhLj6O@7OV`;qRGD6r%eayl}u?oN&VQ|ZtDWzOwV$H6!;Z?+9G6N;4kQ- -zP#uppO>-b|30Q0?346<<CkT(bd%D{632M0QkLYz4XXUR5-(4Zh<M#519XRhPjE+JJS-;m=WZ8p1J1u -0u|2fc$Le7<nDp^#~olDIFcK=6JX_1zGJ^cW<H6hXhS11Lfc5s5V$xxygEqGlFx$WJia<!W${ubF#m^ -gXEoqsx_q9^=BZZAdK2@=dU@XLmgE<HW8{SQe}|aU$}}+`$Cqq%p)ov3Ri$fo~_5fm6ibyg&}T)9K7+ -P8iN+?1D|r>wLY)Y%qH)Yrjsm{0%bZy*D7j3!OA&Z&T0N@GG?zOlS%~bl7YbM1h#itdxg~9$PFgKEx4 -t-_2eituNj=VG8eA8tMj>p7g6Lh2n#<?8OqSUM$OvE;hQ=Mo@vx@Kx@}^g(a-UM7(iK)-zHWCP<gU^O -h9VQIm@V8KEjS=DBI5-zq0r26Okkvlcm5i@=;>|f$QQ)A28=v2v#Tr&l4mcoROmZZO+fn;DbZ;G~Pf5 -GH|>A=wOWuuBTQ6WRhRQSNKK|CegRI%6z-$3Sb%S1-AXPVuc8Xssde;AI|CMp0Sb;;FmVY=0b4j8`|i -Q@@~e73px+^!LlBW!20fvI4DzUg>!a?>r5aY(AV8IlpSAfsg*zkpe6oZ`pxz+lg{pSs<egWWwG>^|MW -?tTt#@eJgq@3Ya6HXRVP+fk5IRuGBYVMn83_ba@1(&#m}(Q6Rxvb>T-#&BfRnX<{clk=p3Q%>WZY{vy -QHT{TH&3HLY^XVucPiJ2}Cz~v(B;Oc5FffW^I=tzY8%EWJ@lCfeKX)oSsVj4<%G|0lw^iBydRP;la`A -mv*|I^$FB`_OYYi#0pER=L(g_p2vb*V)J-jsB&r538Zz>tA>`i&hP#8tFL+x}6b#Vbe$i*sy5j|R}RL -zNtWsX85GRTk!0Sl~yY{q`Z8V;!E+N8{ic~t>P!BSC4LKFgaMf?joE2YYis>_YD#KIJ-eT{nJ<TeF)N -y0r5J}AU+4Fq`^C!AZJ>e7;GGDp_%m{y>`*9c-xt#ef$ORFMZmzr4N@-<eP5eH*aA)S>YG8vHq{9>;$ -`XGWt<<ZZvfiwqoOM}n}8%*@%4$QJpyC0;m*F12)s|IJ=8X>_(!u`pF4egiJE^h?@i#o^lSm)3C1*zJ -mAiL;*v``{zKSAV#@*<nh4{)D5oX>mM7-@O)rfi!-B84FVC7=c9fDQw+A(u78mla*v4tNEKY?AQBWc~ -`YY1vmYCYXY2-~_{DWMPmshZIMBqQzn|6w*3!)-d3ea|cj?^N4LXJ|!HbzwD%3!%%Q14KRUXEsJ893X -BW=3xj1OIZ3!=j~6V4p(hZ@_!mgalxX!VNgKv15JeG2V?RRH_tD!jsrn@HvUU6<OXE|=^Eg8IiELKso -UI<$S(-sewph)3PJ~zrrvt94IDs8T4rl4sl`D#+AYHyl&F7|SGv{-im2=GOC{A;AR~(lXpvJm!KF4?R -I!%FSyLQ2oES70jJ<M=mIpSfM$;ylXafCfU-UXypNm$n|t#0T!AS$9LQ_krya8gd&g;_X~L1d+tFZBz -*<c6{UfGUGadrTXcIy{t1M-gIV6T@yL?vxP@LF<{ChowDDZYi+z%s`~Kg3f>btK3QPRhy*jt^ll*t7_ -hiVtg}cZwvIHKw2X&LNegV4<;UC%zzqj$@dydnP=v1gV0x%8_fo*i)A!5!yM8FSrC@`F_t{xD9eL-VY -``;OHwIHE#=q`6H_mPX0|&(j>>ZljmJv@Rf@xq)Bx-y7nZ4-A!8&gu2><vfoWLCoBB{I70rP*X=vM{( -+L}$F&9=Nui3I<%IMO;8r~0wJ(hoV$pyo`I6c44IeLOl%`Z8}PtaNBJbv;xIhUL#Padb|OU~0Lk5hA= -?ZwGY$xihtInVdvJYOJ>{*;_A_TpSD>hXN}gmG$ql?nSLkz}f{?w3WU9x}<#g&OH-zceZiHDi5B9%-` -`>wbw;9BamU+Nsay(V1<JkH-_*_s;I&KfRc3U7pk5IpLNkSkA!8k(qW%@?V_er$g`lxzd=kVyO_|GE3 -~%cywMp@dA;#{HYbN!GIl~b=h-vRzAmAHc>Vax@E$kPSNhXq{o&$=61Uc-WnetgS$?TCv2HG4^Uu-ym -g?X9vhD<L%jpLUa%t|J1l1HZiDW64FB&Iz~{^h;}kbuB2_!MHau4e#X1y+9>#2ZdVYxij&U>wRBgEVK -N!rq%!sJ?KN!-3ThGCQo_qt*yZo?q%#ao1)066;F%Y;-)rL3?ZaU>uz)~P#eZ?~!R^pG{%e;G3i8`I) -=H26RH_7%7LB|nDI$Ywn>mRy)*#^MMKKn8AUHvReyCJCc6#Si^BrB9mT*U~|W=nS?Dt^>bJS4_G?Y6w -kqFtV7dvpj;Liuv;?l?j`pyGNX0VWa+2u#fZ%+lGv&%!vq1sFo7gJs7kdvd6)pNfT3qPRg9AxqIdDFf -g|{rEy84|QKBOP9n5I(n2I>cOH_Idi;6q{04*VSk$>andGe*r}~N7WQ0TqD=NXTDxjXjwX50NP%*Zpr -NZ2!OEP~v-N8nsZvTd<|$PwFe?QdPE;WtHUP6CBo3lNg<f`-Iyktf+}T*&N+LlX7SXdj%Ft;ikDNqxW -})t>nNgWHjR)MIRbJmH#}%eZO+fYZIaBgY3L1rHqTS^_BXD;qD2ZqtgS-4jC2iv<p)Z{EiUA?m4rMJj -F9m^xW2H=L4$|617jfM#`3lD6!WEWlmz)8=n%Ejdo#G-xv!siY&QcOehxgrHP0`Lr$tWEcm$vdRNg%j -_Wojpgw*n!4^+r=;x1);!_))YriLs35>GR=<KVf*OVwJd_0T=nr{2ZBhwqlySlH8(I@=!;aBTr=GZQ} -7J+tg~5pDaAiTvasNf&sYU`1`5U38Ap=q#o9?Tg!U!DXfQ7Ezk*LuCy#Mip6X}i(Eq%(Vq)QSu!m(aX -lj&w>W$bDq&>Ck9hT)rz76_UK*_1$Q?)Eqs2lm1Z^4JX;Do_<F#XPc`;~E-m3D~sGcdejV02D<@M`Ce -9}#*>vJ3417TrGHjfSCM9TthSetM<>5m$wx_<Cpy>>lRb63gLVC<39aD+~5wnE8n&$-$VcjRCjPxH-b -yXDepjSOfjIBTb`8r-0Gv?m%_i*tbvnD$F(^T4boG&VITQN`RJ`9n)7r{v2ScOhq9BT<RMh60yIVoz( -IX=~%$-2P>K2+wLmz`eVD1t{yGDNx|wnPQcN{&QsDJzM3Xt^PMSR@1GBT1t~|zIwyU?cem>Tm5=!Y>$ -2u_Y~OHb~%uRvHgl*bha*B5vX7I^~e>$qes0PFu#UV0a%2*1*g__wZ}o*BY;g+6o?V?Dq}ZR+l|v&Fq -+bnW3m4dmil_kBIB|jW_dD{C<^~Sl=v=CqW;G~-w99r2T)4`1QY-O00;maO7>Q1#(0H64FCXQF8}~10 -001RX>c!Jc4cm4Z*nhid1q~9Zgg`mY-M<5a&s?VUukY>bYEXCaCzlg`;XkV5&nJu3gUubwU>>0cF>~O -;#xSa(*|&2!@i&e4hOAvm%1fRD=H#&=S7kJ?fqs*N|bi*;W+67T^K$+$l-9F-wbtfaxxM4)%)w6tgJ~ -(`9U^@pZ#<AoAAT8exPszQ}=YS*7d$o*IT;~FT<sHes=b|FQ1=1|4OX(!fs_h*~)x37e-3);)jdBzIp -dPb!1AlmX(nU@%8&ZyZ5iZefjG9_pd~u8?li#S0&aw0oN0?t94^VBg2*1n{a9Owd`(+YM0yfc2YEYC$ -vfH+-`+`x5|yI@|~Qxx3#L%>{eDA-J~Otq}eX7YgJu`sjpxC{nfko56s)?jVx6q!-Q*TvqF`Un9FEdw -rYz)HV=@f%l2ATfk2_EP39hDUQhQ=ZLKQ9#Fu4m%=g-UquXjT7uT&cCfmq07@SOAzWMI$iwkis{=qt! -zTMlcuD*Ir3rrW`-rddzLoS+pEm!&aW;Ay6d_MVUGRd;MEVB&DTuw<4%zw7pXC(dUTtp9{YL-)Y!`pV -R*0d4Nh5t?6Zc4Y5n3g&Zqglp8X?i8T5T!CUaY~zoTetTa*z@%BHOv&E_-T^COss6G_}OH#k%h>LDr1 -Y1CMhb2v(&5Ef_Z{rzLU0XDsi`!u=s|}-n4aHD!CEFi=b`6CWR*<{5m3RIX&?{sR|}7Ds2UfV93y-lR -=n&J{oaJldtf&k?C6RYLHL7E2Or`D^uoHCd~Y-Bi1<XJ)x9GW0o7>UmjZ~8tH}9>%k=OgtnBd>RwQ<F -+k)lj))|$a8s5-lhh3Dmn7#V3aj<36APZvUNdLgSr${Di|=*S{eL<2RyVzJ8=xTK6wOM&BAA={LA^xR -rNIg?NbIvA^7Cj`FRR#QE-@#i*CcRUdnu4n6LBvG=ey?oqG{!U#pD=W$tJg8QWwIubtyYRfb*SLE)%! -Oyi|x=#`!_88#5O>wd3ewX3HhfAc5Xg`feDkzb(Y6=j2o<1Y>X`5?Tc;=WS_cbKwJzo7WpK;y8j!v#+ -&6jA3edBe9Or-a6za72*vk@lF}As;hD@R;?;6$U!THC#-d4)J8TK9i-4HNLjg~Z97*@Z}Sokp3Hjn?3 -FAxJnZt>;wrd`-%&rTQ#KJh44pB>o+`gfos`{mkhQ;!r0pJbGWRMUN2_FL_59asoJ79l7`cRqS3DdKb -1Uu?QWU*DrP-%~3{kCG3sD<!tq|*>3MLf~YOY&~{X>yLG{M+ogI$bWeqhaP$vomSQEGkD)}0O`fIt!+ -IA1w5Pm$r@gQ^V7ou9k8LzUbcLk6QB;~%yLzG31lRBzFoHw|Xih%IpUu~pO7C=5JmI@m#QecHw0COmt -6Oc)zTNP<bma{E|Q*}@{0Jab9hDxfPbe@=08-nMS7Glt689OB3=0~zZh!fSN{@&{>oIfvG**l5slNhr -*g%n)<oN&HPA)-*YMUM%E?^<p^yBIy8uELrc`d#AT`Y=!woMDiNINKZUX#VzEnbd_&5a<f>7=jrnUD+ -h;8gpqACLxaVWX}2;d*{%6`<JOys&pnOV$6No;Fn+gITIxI5Br_WArw?r?xJf_)NB#JJ%xey}PJVQB` -;iNMs#5#3Jg{`{dvkGms%r~7yT=Xl$~(bYa(;cXPr6hY`DH3D;6Xk=g_zD>?ipAj=yx+Cztz>R>~X)c -Tm8TKRnnW*f3=H^`TTTmJ64e;0Y`ZlMVIF%FI!{vj$P{Hs4os`1{PJ$_}9C{#TKpvIJQNJAV1V{P07$ -zU8P<lZEdhols#}Z)D$j<wM_#Vi#y%iASW`JjcPDeH+v+{ty*tcQ#pJP#F#ms`NY@z0Ga1-)ow}9b!n -ByVxg6<`l9{)LF{!a)(9vDlT@*%djS8t$`R)YE@~K8M50`$8p(q^$3M1PwADI_3O^VI?8x{)vsf2-bB -|>jS+r#jD^*pu;CUt2d26I2<mBeu9(MO*tKeFGrKYVaLJSg*fZ}@^vGm`OrI?|qkQq`jAYGkM?M2<_R -VjDI_a=xcQDdPzIo-o2di(v%>0Rz>3w@|H!Doa<uQaC4h`r9&TuAW~EVrJzioCD;SUp)kn2Y}KmW8Kl -Sw*%xZC2A6X{Z>w6H!l!w2}EHK{YidJd1coW@(hXjS!Vsb}q4WM$WOin;pA&H!{Sq@lqo<zsH%OR<#k -I8_z)DR9E2%-1#69j(<tV#k{LVqn<*9b*VTWF?iWczKW#sq9WZ?C}8&k*r}r0$VZ29ArseLqgaMCDQh -d<ynod+6u4kCP4h@vgNu@ANtF=C!ihvgHUJW{0r>%e5%qZ7EB*uSp2mn|p6|B62^3MuahxpOjss`J&V -7|e+*wO9>RnL_@SM6OeT@B!w0(#rDfOMHu79vY$WwJGL)PN%k84!;v7v=D7ZhNY%N)Ag8<|=8!6ww6u --bPou3JO~6evE{YHFB*qNaFJBU;oAX+Fdl*0JFRPe3O}a7*Z|or_CnRR#6OLbI2)-ZzAh%43|7&Et;B -!$^ascN<oH3-1tSjC+Qin;hbdj{+t18v~O=P!fqGg-j*PDLF(a2hRIstTC1Y!Hi!-7GtJCc)(=<smcU -co{&W&v+b=kvp7e%b~ggZTww58a&s)U$}W={pU6d9DQ=MmB23_X&_3toJRhO5Xt=sgR8{DRg8}QHLa! -tCuw<#$2yfnR43UEGt#sA)A&&1bd3rhx_R*1~4(eI@TLE314RT{hD?nv;`QBv2sNzmsy!(I!l%0~s*J -X>;i;IX<m!|{%Vd5SEQ9egr2VmeL#YbcBsqESjCF~8ThTDZ$0s!MIJp;LSE#T0)QMEO{*+>f=WIJV`u -Inu3HLdqCSDLLegd!J3DoK>B&;SyR0*a{8LCXeOyAJ@TgHXl#6<;{X&-s1E$t%moiHF`HSm{Oqha8^~ -?A6<K&q6SC14xwI$o+Y5NHJIdc>uDLw;DoOb>SDqQ30C~G<gBw?1_!}^N%mTe0Fttc6Cq+Kad=bV(~} -wMAz3oD3ZGxx~rD+gT&FtamsYdqFR1>$^7o;RLc%A=C<Q7K;*bX^)qrJ-l*nCW^@~8Fm9Z2KQ%*o#kj -JKv)>aDz$`BI8~IU{ez&<n0XRA`0?inU9W%YqM^E_b@lMQBtZGT5y0&OofysPS59XKZzu2)!4Or?;D& -FsLh>}HzJ&!g+Xe1wYg&DtK7vvK<ARpDr2z#J#de1&SrH2tn4y~A;b_bdYuIrd%bCZu9=aJEc<2+;`# -v5gyJrV3<6(i=;_9%qQO*p2G^24|x2IqEzE-~}!a`F5s7T44C`FKam9g5x4BtCZN<|c5_dQ7Lm^ZO(F -BN2%s;r#*Ng%JyaYKvt=27%KZR`7Y_019k#6xVroOb&@GJ8bHLEyVA-wORkd`=_rXx*1FEW7zygRt~s -?lgv0WJS7|$XOx>ks<Fs*H->Nvs!k@g1*$83Z$MY};B@bvx&|3xmpA*qfe{j^*92Y|iEPuEUw2S?#LO -Q6`lB<^PlozEhiSgqxW2++DdTtNItO&%P7e48k0bs5r#Ss4FMSihCxj8PPtLr-0=PF+B_r}PI-`7caP -~XiQLXD_b`V6RA(-En)Unyzzl~eW@G6Lb4*x%kV-}4BbLrX9sP4Rc#8S^zS0OgHzN0*gsxtoKilMa~) -P#mV0UNXuzYJ9o3K0OT!5cVjaI7(;`_o`xr~(ELp-Bc;1k%Sn-e{wV1vsB~mSZoUUE!Agbj5|g4OK;~ -p1y$S_Uz@*BQXr)8sOR05lj|^)JNj*6M-12NhT^cp_hs0RB-yza!EJ9_TP9+H0Kcu0>F!9Is(U`xvvW -$xwB1Qw|L`VYMudu09uw<vTGLdl2mB;{`s8iW!vFDmn*_IEL{tKtF93dtYBc}`pPRAcO*AVr~CHh-<k -m8I1+V0yxxp$VhmNu3Q(VFsq@e|O@Y9ZY5!(AAHM0H&jya#PZ+@omhrj!oBIApv@R4pZEf-UX-`ce8X -h4+eYa7c#m9?@^Ck<`Bl)@($*tOn?pw=3HO77GP+0d7*U@h-2lTL~f+Wa-q<Xh!X>iaGxzXVXaxrj~e -uoeCgy~n~jpJhlOLJ5y%ATcX?nAaC;r8Jy{j0}ZH}j7X!-!c!649##CB7&y$7VaAKo$}`cy>iP8S3NV -tk|^+I*)gGaZrm6Rv1RW&?jrHc5pc1G9&$tZ!U1%$G{gf2&ixE&M4f6wmyG$&dG&C=D#G&vc$-;aQJ= -TnuYG*JbT^{gtN;P`T^`tuOYu7{%~J04zN3qLp~XdGyXfro;Pk<9WCm@Cm2D49%8xAXzz2Bh`Jl-YKY -lLsV~AeZhSc7WiXlOa^t@EG<*J}8j3KNA@yBNDtYHW2#vJXXGZrLsglkGvn*}v4Sn_Mh<1->lcU5z)y -+q0Ed6Eb{>;OzqtxAkPIv9T3j7yPO9KQH00008031s8RwL+a%#u0)09hIV04D$d0B~t=FJE?LZe(wAF -K~HhZDnqBb1!UVcx7^PFJEn8aByjEXD)Dgt$k~A8#mJK_x%;DHy@bTOC_;4+1+#Me9*-gC6dgDvg7R5 -R^H*vkQ`}lnhQnx)cNlRKwr?nj1!Q4U1hP+K;vm(Fc@4KjjtxBeODDxm&H+@?<ecDOq-}nlgV;FY2zl -VyY^ef{Jn_kRhFmiNxeV$%U6?&caxiUcav8amv@u1-zINQZ!Z4#r0L7ae|ObxGD|0v{=X+#*>-7^oc! -f4SFb+4x?N2E&*cC9WupE~PtQ*0SLrTorvGd5^|a3Fli#;#nN*DeSr=*9wI{ibZcmndo0VzXPX7v0>i -6quw2bQMU%%1hvl9qR6lLNKw@Y{3x4Rjp`{u8RdVTR`{yq#hDw1{G8&o3&xX480tc`%S2=lAJ?Cad*J -->pCb&$#fQHEGCRWVgE6*H9qmF%OuT2Eb-mgOo;r*#t*Mb!LWR-I}URS8vo^BSwXT!|{@0N1qPFlekZ -SeRDyGO$LB2sAu{EV7uq1RX>Y&6!5+%PFbUqC!!vsv|Z9(0chIr0*!-<&Ku-%L_9o3Y6r4f_$bNqs0) -VNTNXHlgQ|7ev}>%R6qax0f`siefI<Fn=G*zCM^+>`xfd9gc^CE8cn=OyM3J+WiIeVNyLki(2J7f49% -}hlJC41VI5ilo2Y$Ab9h15R11b6WE-F|uH8az(mo3VOWUeTo6Nk+MhxJ9B0L+i5P4qh!yu9t>c@yc_C -QhgdFz!1qZzAMW-7zGD1Qj;J&k|?wX)cUns5hU8T|HzVRYQGI!`MpDRiqt8&rXvF8pd$M7OIxVSWvl> -pqW~7jL^F5TQ#|j_Mm~YWwZo_0{D0gmN*68<o}ba{Yo)nI51Xf#^WloZZ~Jyg9r-tD~k>zXs&y?&@~( -Yu0ThP8WR_HR}{RHw`lAnvlyK-5YpO{m+$7b-vg{P5mXRoqsh{C~kGGR+adx5LN0g(_=m#QKYt`mp_3 -1DcS~hSmW4Qeh7ZAxFP7rAzPr&HNJPt`&6}zZF>GCWwW^qOIR)M<B$^0(<bn}9@jz357BGI4MN{{o2v -XGe3Qe728JJ^!)?C|{Dh2apyh}7jpEw3tXclaTUJNvJAYn<j#6WlGFyWtEQ*6@9gHEUMp#4`HYjnj>7 -qEs=>$ZaxanR%*!k{=e1+O|o*vSLLPwaDYtWpfr!>|}sjK99fXB1gP10v&6<A-t=h*{{p+F1(iKeLx( -^P0qU{RauDRk(jk^&?U8qiQww&rP2rmk-Sixio(kUvryfS8KnAw)B%yEYC4X<<mVIKRA{L`_jOX#zkH -QKy9+vg1rl^AwRKzb9>kR2qBq@9hHxlNUey@clpCkd1Cy97oHUK)tSK59uBou**-&xY^g8(Q^>lX6rI -iRg{VuL0hX%^rx`;xZj$xp$yi9rtj@jz4zJ>$6LgGQFm&<8$2VeH(3lXJBcE+4e5Y=6nkF>PH460*J; -!q-rX26fJc&0`?cT9`mVYRoh;%y49>WXB%*XxCOU-vrB^nJm#CYnQ|;pz<cOsior7vZ^1yYxdB8c=<{ -_W@3XzCa>M3y2pfgF63}y{aI9o8k(>4AU_*?2<Qb)7KX3S4=ns9b@eipS^;LE?%Ni~oXo19_b>*;bCV -+>*|hWFr=K$QeG?;>g*`Wj)B6k!;WMo(0?%x9#)0aTQ)(`942ptEy;5Cs_MzqkvmqHL)&Gr2DAAlueF -I`yN5ASRMPTE7=Qi<-bXTB?)=<n;Cxpcn?_%mI;gn_fo`sa}H&eGKq@)RGetMXWZ3*uhv<CEf&n_&2z -gphYNKO-$kM1N?j<o=%O$1J<*X2O>!F*-5(WvphjM&Z8DrK+@eNZPIr39R>3Y*JlvG<k6VMZ7IY2{TV -TV`oyu8dLW94`Ok08-d|o_3_n%786f&RRlvbImgG8hyikL+EOeagRP_W!O_i%|ysgYrg&Ll<7|Auw98 -*~%iAIVcW&CI>Y>U&yhqoCeBif@1!9y~YmsBmYp0W~Xel<EMN?ask1yHgx6t)^BN#I+Vn5K7@z>vrU5 -qFisD8u<uK>~(JSADq-d^_d(7zzR=(Ntb1?3UHWSrwWl@FTg@NdX-Qjg72j%GK?cn3DLKXtq@&Ti&G~ -5AJY{6llUsMX@gWm3NfER2DbSx=%-a4_Of4b&w;MFHNgh)_KpXJWK3-64gnyQ}=`BD|8+0j!{R6S!Id -{YD52$3dPQ=j>4&nFWDcV?Gd><GT0n(_eRdDz*U`P1t0ASR-jFgAS!?7>8uKzJSA0En(4Y0!Hg@Bu{R -F{hCo?ofiLb>y|pWB`3R?E3DJ-QO3Sbor-`z1)yIJ&N2iY<Q9u%*>2k$Q0(S|PV?Cpgu?qF;zzIX4Mr -k=t^UvPDS%4ZnOd)h9jbv4)K$A*?ImG#C@$hPKcnyFYeD<Q^0oI1IB>x*hS+1J+6W_vyt}B>jOqCvx_ --W!?ctiPPc=zvR{hz|=0pd;4h%rFi!iXX(qIIgmyJglDu(!*sI@@WMRaTGJ4jbkf5zyI=?aX&lCb-I4 -CED#eS7Vf5_;<_uq%Q)Oh@;j_p<}&5sii;(8zMzK4q*#6<IfkTVc2=r!qZX`fLph=Kd}Lu^<we<>ThA -0_o@y3)rdS-GLU`SJ~wPaXj={n480<M+SY;nzU{jrB{Pd#T803c*8u7rPEgy3shFt^Qw34GWICeQp-P ->9g+-@*hWIP<m*4T&+h?Pc7B~9whr`;E5}2sLe_AZ_w83}&#~-*ZTEE7lqqbjT+JBAZ2CNN;{OgNA69 -}iv(qafuON23ia^6&3=<26RUhCv4^Z!z^({f^@{|m87@!HvtKx>wvlaJV>h0-9UA%J8I5u`>yJO*7BW -`y-2a1W42L+5ALle5#s<@w|T>;cBhVkwrXn6^+!Xmf}Y*lj<*pa+#W&xr$6D&R0sy3a!^5?2~Q1h9}K -G#Mm3;xXbXE!SC@2AZFUb-wf0uRs#8DIfD5tk~crUio#oiL&<C4FN4I_5)(h%b=<d!)n?sxs%o%%7{3 -rXPt&Vb(0nq1j;Cf%y?7hR<Xe-PRTSy9B2n&_bE_}uz)5M-wfh>lcrs?`GP(A=a_}TGaK|VGa%g7S+~ -ky9ZEAO-d&>eMJ<!%eXaEl?IBIZ(OnBelW|IL&v{B^?pr5h)5x-^L{?QQo7<qqbH|qW2a)4ZpUqopHO -zbvI~M2H^$|5Jt5s<2)RAhFT|pLmZQYGcC_Y=_&no-zsMh?^Ys@>hLGGNUIQo2D0Y7R)-K=T)FioG*W -s$)~nUR881&Uv88=}q)Sqzv*fy*|cKT$G(W(Wea0m1@~g-WB)PrptIP(WxbL(%qXj4dRIb8n=XSNDDB -VmN&nK?ZS%R^&Z*#)^c+zx+OSXD~Ls*GMtK*X)ozZdX6~Jp+#Tq~-UmP}Uz8`^iUD9emiTWtG2f(sWf -dMHHyAv@bq?clPc|X8=0u>{cd3iZ1afo}XQLPf@2m63~KKpbA&bR04dC^&UC%-`wYkf>x8&Dn0C>ap! -4N67r~-W{4+e!ZV-24--P-ak?1@Me}6U>lO0z*MUn8Zs*MM6O{oD)x;{q%HP?t0!I!O1fm`{AY>sR3w -&6sA|L$@a0a9GaD+<ns_hhAfUTugher5r$%`oe$9JIvVU-vf=k@8;>>uA@D?n}xdGX^e@RfiBK5U^%m -9>ErX<ni*a+50v8f+DwQ8aX=Cd3^G=wNyLatKMOS6!6~d9K=h6xb4~W!m8Ej>IP*PdWm#Cf+o*`qlIj -x4wEHG$SdY<6~fR*rZhhW+zGpb$R4Ax%E0$6U88^ah8F-L~PPRxsdvrNd!yjL8uwGK8HXw5*RthhgC- -jRf}syz`0sI16z<?lYIUh6@(_Eg8VG-VQh$qO<K(%BBmuwT*HiaxK6Yo;v9b7QUR!M#<F#_*AAaQ_m( -=JKi7+$vV=#iB-XXNmgt0au`y^qC#o16YimOan9A@Nz7Rj8dTc$iDMGi!$tc~3fc8jD>$qU+4rZzbL~ -H?91#Vy^09D0^REaNz4N%z>$E-yQpnctie&NOO0hB{fqBUvD=Z``unFLq8eCUiF5+gX08XR#Ahp`9HA -Yh@}sxOm^D(*E%paw?9C}5}wiGw1BH%ly!SaF-!b<)KDc$+lu^qOSbHGvyw15H?7s3J6|nwT`G8teo5 -q?(RsvWTnDLHj@pBP%PTMTQ8oT|!(9YNEZkkIHr60;oHJSuCD|@V7r@<vmqH`#dpBP@#Q(Z{qC2{mK0 -c><l!mBVUNVz?EkfW+K#n)hv(H`4%jSL02*_)^v*2#jZAxLPEbu%XSmE5H&yt;mMuKo|RY|UI#3}8PN -tK9DPDt4(UL+ay!KtW1FA=m~R5VB!kk<-_E&|^`^GNNn0Xd3$#TMHC^Dmd;kc-jM-vv2+J{y+=rg%5{ -m)vFL3{>hjVRl&n>;jR^D&iPhIbv?K<Drn>6rvgfU<>uto@gktEbTeQAO3zU+q_5<s(ml0q<I*83g&G -}bT=d5YL2L}YH+S>Bt<0G}1TIN&pUVKlQALkOL?$cg&}zBp!llsKcKWU$lfa|n85WOETUaXSyU;7YQU -u`w`mlQ~*xDJ5#Oxk3$Uvfom)PFk}KmxMlQDt}?D-!&$i!2^nSt`0dCt}VX*@t}IXI9*(S|07~)X@Lg -83DWK(rnDA1bR!t{buZBJ#{?O1=Y26R(q$Hv=T+G?p+h)*ay`m(Jn;e<OfZKDo8u+vG6o*ZjDh?H=3v -P8G|B7G&ybx+f)pYmIjxN)`qZYX%!w!r)B7Evl}A!HPR$SIn-}Rei_@-20|zw;rw0v1NNXu0la5#VGz -t22t=G>;UDk(oc*z=Y*R~a`y*9p<0P5X5@GXX41%Zs-5Cn!yUEyqjNx&G#6>k!-CdZEC2BSDT0<)vHk -tHZdHp9Gd^U>ReaR+W{^!^a~xf7eHAO@-tiIjPNjBXb;49x;kI`zj%W{|slj$NR+s@{b&O5NeNrxRZv -roHWs8N@JHAG&EOb~>~WAObPHM<e<BwknJKxek#YnBv*VJ#(oJFp74<Og!tg&rRp1&6@)owU#j2X=2g -}Giehw6UNfOXi~e+>m_mY^r9RUkI~KQWFHqLFeDI}>T9P1MFt9Ffvv^W;p*~2R85|l(Te^-g^=^?WRu -iGB|v}`d37FY90N;fD!l<WLAlB{@@fNLARRa|PR|iaAVJAew@XVsyS+4a*0NqjP5!0{J%Z#8S+wj#3x -g^uG+RT+1ejh^?WbNpFGPew?Y?WWbQ}17IEEQk7*(=CQsEOC+82?#)#jvSWrE$Yh$FYJ$jmsEcE;(z& -^UE1jbEv6PiUu=nzROtC<TWk0eWZ@%XoRV%bJ7wqO?&j2~@NZo@D9H>5;OOhI10xq{Txcl-N__ID9BJ -ky9|OPj@_mNpZrIGO@!UO`g)c%2CqMs|ZvoFF>OL)v<d_mS&W~fv7{>j;NFXQfG)#X9A|qe4JXYVZ2g -}y*+$uhs6L=hj?EnWkR#L!gF5_OyzZcu=gX>%R(EzPHJ?UA!QT;URv;XPm`cYp<0|aM{ZW}KVH0$m2% -Vq*Q?tz0Bx3{rMtz`D_YK=O<?K<d~jnYO2Yz4#cc4Sx*>ur#d*J7J`ECf)mi8l^EjO*+Npx<0HiwwMV -m8ao(iAs2)5N@pMHsH8028|FqT{?hEX3FS6Xe{G_D%Qv<!>x0XsqOO&Eti-l9lou^U#wt{5GSjMl?W4 -N<Z(^eaq9;8GNWdf)(e$f>{4|LW5w_~qA0O;sbI5P-t$Ju6d+B&gR%*@?dfJMk6UiLclb%?e+(Rhtpv -epOb!$@uF<7X^OoU=m~mPys_RbVra~=3zoQhK%B_3dCHQv<8<b1&kyi%OGJA&w`e5;Fywj2#g2<0ySO -n#@h-FYD`oe#Sd<gHP>B%RJnCk;1_&l(xMJP86`xK%h9)&1TCr_Mg)TDqy`fS1xc(`&Wpa9gp%hwcVL -gH1$J46jvwi>3^E9g<aAZ?XH=8!>-sud1uk!{R7!&ZzX|~v>X-A+e7o$|S-UylgT(!gmO~WSf!4py@o -b7vgTE>oJ!A_htSYKw4etSIhn%E984mb^Vi9BUszWTnR(WNoVl0cWB1#2pWAgVWUsp{RxJJIxNevbf3 -I{04z2Potw01GEgl?kpb+$_br}`_9ARS1URZ)x;Fi0cN=k;_@<|cHBV~8o?O#S|o?W<Pby~G;$C!Xkk -O`O-1ik?4ZAk^B;Lw)M3svTPDfE4OP%<T$oud=#^wY;5njzDV8Z_&9^-FWVuv^nMLG_>2)#+zWw^qNV -f2GR7*PrMBqn}A{aGSD()rBWKezJvu3VyxI0V1?@-CdMsY->J`W;3?G=BnB`dH6GH0)_eOiHUYuDIh` -Lg%N8y`l&CYjUPrZD@6$oK+Sd(Scf1Mp-0Ol87#9=G!`8TZw#M;}PU7NS9MXlY6WdLZBtVOZH80++6S -t~mDz~rU7^~Qo8vG>(?F6GMBP9vTdh5KkL(Of<y<HPg?WC3Sj%xvTRPtu=OW=~?x_va?H7x<?hCwyK0 -h@KGk0jg$d~>?MrwrbyT6U0ygW82#mPpzxyorO|=B#y6Lz{;=i^+A)+Ir5>B@%vg80A<ykT+<=p;3sO -KETqip6pnr4n5fAVUuR$+hqk@z7ciR)rKcWt8C3yq{+%>mKh+)jLcf-L7`=f)vD_bP-)k#iVih0f|K* -8i@-iq$yNrc<`D%lG%@zgUqc>_dM<~;R^Lt9JY>P<)h#Xkq8wBn)6=+*`(jDkRG)Ep!s)FRWnbr2Xg4 -N%3lIb~h^ETQxwdk5WyYpt1p-F`u#5NxMgS04S7wohUM$Z=#Jcjjq$&@D!t)|p0MT;mioym&&Q)@u8c -*mhiacvUvNPOLS*viO!(wY?oy308WFo6Z8+ho63)uDu+V-N$#ZJE65rL*aTm8BBs<`(QxWjk-U_~Y*i -64PZDAWy}Y){LMa$fO9H_vVM>43(pQX2&<t*}KzQt?jcdJDC{EYe0KH>_=$*vy4;Rp|D<b--qXP${6M -B@so$ZleDE{p_Frnc{8_ZbN>L5A9`LjCEKYWn)x^kkqx>hVGQ%BQzqUsv)V~D8|rHLc8o-eVCfS->PB -Au|t@*G=$m6Aq)g2NV$thn2^EmuCEUDFJYEs$-#tKYn2`*G-K#u;%yYV@JU7jS^^NFLKH1>mwHu!fMb -D5RpZO3X}@H_+2&#kxe+|pMkLeWr94?OkeXPXiD_T!krEuEy{EXRv-eDlfqdX&vDWl&nbZKx-tcD8ru -82YCKAxQz#em>QUd4>Hvo{a*+C=U@QT`okB7AKBnt_!GH!4uYCheC+cs_>vC)l5r5@44>TZKK!*C@3c -5!-%uXl?(VVgFxwH#&syMQbUS*L;XZ~1(+6vEcl4q>5aezX=sHS(j)r_8%Hu%R;VjWwh)!F!A~A&e6p -4x7fS0Mk1^CMT<Tn^c5%GKKdRdxrHwC8r{ep4XU)5R)4NVCN<#NV6GFwSirGc)!P8Eghp28)?rt)=;8 -~kZhfiE=4#WU8A4gnR0YH&L-Z}5E;drjM*w)54(lt?swm$@@IFOuB($jiF)}5aew=RxF6io9&M9v3M` -EB!G*=BRlXZ#(YxS^wv)rRcXw3B-Doei3vON1bMN>=zDo=2v+aidhPN&)Mqqu>X2)Bsp}n((zVS|UZA -Sb+ZiExaxBF$21%7iK+awS~6_A{6c!z6)V?h<?j>I^vuan`kUYDVsoHB3?bcvpUGT|7=EFW9&%y9~I8 -Hb*2=*uhyQ{T&&41;3f5r|@+om`&3yKxr~FO%Tf72hHwg~h?zQUq14CY@)Di7e<kbb~Zo!}jRq8aGFY -p?`Jt5oGNcdqI%lO6~I?&}cs^yWdw?Onw<bb^_-68DwPee`M&=-%~@p!{(r$!JTw+KAQb#=c7z}xPSi -=yuXWb{@s-G?^Mnb*Pye%dsjzYmZ46JtO4}p%_Sn4T;tUmrn#+VaK$1b#$r`ZrYG7DdexA{v+*sHHrl -El1KKJYSAM|S9w(($Un1N1cDKRyiEhd3=)R7ru~)|(%q}ZnJyj*mElyn3?ko~jhBjD=sqAIoI4rBk;O -7z+eKK(ig}1Vlc`HkoRj9K^oGfbr1OX%0j1LxP4?fmI>Y+99RTb*?Q+~=WZ_g)rwZ`tFu?DqIX&P^$& -a8bp*i8&PhHj&!>WD&(hO7?&5(H=t&~A?ZX%Z<2I`ldSjRx01*b5*s-;s;F`{AeSSBrTRx;K1Zq%E~h -k_0pnanA?Y?|sjGKP|2T9ogUO0p(vo0uT&?GPVIK6L1(PI>s~XPp9Y^_C8wMY5hIz`)FsdZgJGiEOZG -Q+dhaO2$D$cc&+W;ueRVjrx;}$A%?hDN(6-aE~nPW?EC0BobZ1(n8^u;VB%nmJf|#D@D%UfJNkTYPd? -wf2cJLdxXc24HVMNG9h-Txy+089ywE^oq|T2sR23D@2eJhkSzX=RBibU?Sht!;=gjtJYl*TLR)iDd^G -6DM^xRmK*WXLK_fLS|w_?^Tl=4#f5djrpvmI827dMjqusQ<YZs%BrtqJd;L(%Q~LN5zW+Y92v_ag>8Z -Z@B*fYFkV6nU(y$IbY~bEkQ~s9Bu6-@`HZKYxChe)#ZYgvTB!%F)w#Q5rF+mmU*|Yy3Y#;LnR?rG_Q* -;)XFJ<vVmQz)JFtz`g5n`hLXW^iOf96`-7F|AbqH_hPHi(o}wDi}0s*{ROuQ{Iq!U8jG}Ei2`xJd5sK -v@B$$ho`4Pr-KtVwzyo(EhH0rcK|!;3H&%8^i!@FhtL(2rkJ^cBXIB?k=Bk97Z8SB@6WhH&#GnT9<hh -P>sy}pPL2AJ83=W5?r2;x?o|zlYPx6YahTZ2ebeP~|CY3DH&<+_A8&#PEZ4E6{ENOO^XG;uv59rulak -5a8(6pJ%BfNy=zO4mxJ@RaHOO)p7KlOPQ9b~+AuO*BInwVH)H3gsJx{pa?4cFY_>bPT|0D@Teyl{B$z -xkBJE4N__HM%ai$nMwINTN1Ck|r|fv^NqN=tO+h-C<ymmHs(QU+s5p`m@o{+A%(OeechqF09<r|BN22 -9wOWMTH0v+5Dm5fG|M8xI?BOII6w3Hi-NanF)Dd)Luy9X?`AgqkTzwS6T>Kp`It+!o}C-|Br8o&sjt# -UIfdIUDwC*5W@@t7=c!)Aa+Y5n28ZB(Hh5Q6VDaQS1&B__6zidAVU0@7u-Vv$n9oiu+hSJ_hhM3#g#g -bGgoAeqK0LT)1DMDnY8&^1W~d;7h(Ho1_LC1?>tSLtM(sl}A9|Q)|J)N~F9H24#;+EEOYF{gglsRQ>4 -l}S5U#n!Rn)dsu;ZzLk0v8-FtsD597671kc@Cpzr-BE;+n0dQD7M}zB%^ik^lb3KmRjz)&8II&2Ebz# -=)%7JyqJDkGNT8IN)}p1`%$-j_HJLAsEUK@<^y^gA|7()T(TgW9{SklZjTV-ALo`&m#`NgWY?J_0=o# -@9ntv76B@0>YT*5O565Ow{IweXu|iK2rydP&RidGSJ~RM@1ri(CgBP2`o`3vb$pa#JbeEYjeCy7$2+w -h6)|e&-J^Y#<@<S62F@39mAbCLn<7b~MifDnwD-H(tXPI_QIsq7Wvl>1Ng;xvFni~MJ&LkWkA0}K5vN -h-MiAkEq~eI6z)^z-C40IK^@Arq!z4V>(g+EhSp*#Qife*jZo_q-sUtAZ>sYU;teSM6%3#8eYVOgj>% -gn(P<o*4u~uoUtu#+#JdrSWXkInTeXF&h>_FG!_Ow}3ySdF+yvv<Cl<;!Xd`3%u>-#F(eu4jaD~<YXh -3|PCnt9)x)_oJVLr?Qp`8M$U8JfRcU46I)^n7bio#p-j3nC@Tb=I6!N$BO<7HoEXc{|aPj5;f_X0|k( -!Gso(jzVz&xM)mUjA~s4HZWM$$c%#=kOL5)5CJVDcevlZBfGA`9qp5lP@{|T!1Hz1>o|&$9zfG$T+`| -ZMtJy`m^J7FyH<CE-eZ^A+Zm3bHSm+B9Mpbf`M@M1Ew0b?fyOTQl7J#B)3}M?bhH&VIu-HC26c#DB^h -DWbGTNYMZ8Iiz^d`I0a4VY#Q^KzFi->LG5+QCt5EF1G)yf4kcPpd#G=o;td1H5gC~Clt4Z~z*<(hznX -;P}FBF;w-qcxSbqfm37pPF(iZ`*wEfW*(ypz}O-i6;S?=(l01h}fg19O_>XYb$p%E>JJ;^N)nxa+u$s -B<58qNWbi&fG#qan$G0KJf0lf|45;5l{uSAu8kxua`USo_Obqcw!coIW5e}`?5_;B!Ne`!cjbUnK-h< -KQYTeZ*Jamr1NxGLYCzVCiq&K=l6vP45#<Vmxy07xo1o>gC7Hx5fb%(YHrRNh$%C`nVGpE|9oOj62p1 -96XWxp5*<+vR^HZ}X=X&b`i|7%@e^-`-VGm|KkXg>KOS*W()B5xSuP@RW?2OM^Lh|9IK=Hl3!R#Wq<R -Ydw(_Adl0(fnFfDk`s=(vz9P7TtBqCI414ldVuvyEY8tsFqpw_c;Lymwu>fRwEM|i>xm-hXwxqgAZ6A -C!%+;<fm4FZ3#M2|LDcT4X&>hvI>Qz-&RzSjSMkVU0scv_gz$h2ItAt+wI6({KLqg>YX9EZAkxydMfL -h(u8A{G@VhbKGHZi!&4?X$_Xin5OKDA2U0Fln)NfHD<hNc%X&FpT0{w1Y+jKB(i00wS#&x8cxWmjw?w -O<Dj#N&^s6dl=jok^MGPD~&wM-|IB^1u0V8_`Oc~<sg<JRF9U?Znk7l{O?t*AMfziam>alm6h2c4);x -Z9BY=miX;Iv+ckdGGKb9K-SH+1Gpg;X3SRjryoC>)?lbm4A`7dcv8N2}4y5%ZN#cN*0z4M>hr*mdK&z -o;=ol3eBd{W8F9?|U#S3<?oMM-wVyB)KkXk5_mA_^Wfu?QZv!&$p|8MV_D4ysXCLF2Y6m#~Zm@q@Y{Y -R;ZNFj77A3|OJ@_p4HgmnQVKLQct3P7H~3_W^K=%fhQ(LBgd1n8eMxUQ=5`1a4jH03Hq`>(1}OuI_Il -rpXN64*GQXB+CGt<Xt9y%t@xA&a%~4_RJUpXN<kH&q-wwXp3>&nt@RQw<r|*@a*su)bF)^Y=zA_S-1* -QZWmzP&P_Tg8QuD2Zj+3onTm8VVCBW{eC=#Oga9r2IgrKr=b^cIh9a@q*o6<_YbP#V;|bQ8201)E5Go -&J|8Q!VviI%bcSGkmtWKL07m`A<KN)t2l&Y`nE${p9;DF34@9`m5KUHAr#4=vp(bVMw-01MFCsN%KYz -aG((8VH8u($CqgyQnFul1{k@D~T?1PU`MrOfJOfNp-LET~}4(b-e6O`BcMd;H*cT`G(9^T&ippp*)*% -m@?IDWxWhmp745e7$=J1E9Q{-Pxhiw$cVqu_3oi~c{h^kFrT9TRcQ^2eTccK>7ngr!E7K-@Strjy5DL -8D_PqqZorK6L}#cQotN9>dng-NndMbG)j*V12}Dv>SWMgEbOgftyedM<v`7af24hrLa&gT?^&Xu}{8P -Tn4UJyH_D;IY4S*lduFw#bvwU$uqewW*)W*5V0ym?P1$;H>V5OmMaYd;UYS00I?d^zh?^5OW<Q}6T?f -vFgqpVGEg64W@>optxoB5BUg*vq(#~UU*5uAq)`lNglKvO9xz8+%=X|5LP{lrXl*Q-nUB?am!~SME=} -%&UB(GR6e~)=DoCekO5Ox6{n7hP`gHi^1So_^Pk3uIAmrqltHgD!2XZ;g#eN#UnSdgsZf%`Lfy;btp< -X`R%w$ng5d-|<z3?9er(p1PR_>0n2{MwOGYBemB!U}y!~)3hee<82tZ1r0Q<>7FHM$U`(3q(xdypIZ1 -dMgm$eg|)3v85S1}|NPEitn;_e_gi16_8P;GO#h-F2&A1-)vvvt`+N_2~HMzENMc!_4WObz?2A<{p#V -SMw_}t#=mXN|oTgHJ0^*k(m=`73zvU^p-?vjf{ebiu7P&a?>xaKZL$I#*v(nfLwdS!ir^D<Xy}I2O#$ -DIU|JG7xkFE#ut2R<Y&hJ!nmzs_*r>Jb{T;ky<^A0!n1SI0mCt>2SExk+s<y_4RnV9PBtT&hF<jkIbH -GEcL4);x?6oYETY8q@CB*;S-rK?Q1j4J^Ulj>75~Xo``%HSLd?GRj&Bduln3wM#lb%CVAtl|Ik~{AV( -9~q_jK}%2<GhF`ifoWc<<sa3cY^I?h$|#Dgxx##stSPS`uomAL$FhyL}Dq=;9KNfK`dG*%tvoOPr$t? -~3(ha`1Y^yX!ZTOEo}jR#BWzF49$|J|g;ydKH!Ho=#U)#d;>4>7bvTXD79$+&-oXbhlQS1sR<lAjD#f -rRgbF&RbfCuCzlVs$qG(s_n|Ur3s;q9E7xdm8=8XiQFG1$;s*26{4nPn&8&i(kN6n)w<E?Q5m{+Id>0 -#IFimtj$^FCeOLFP3&eFAXK+wSk7p;9kp*Ru9DF(EQCyhI9S<L_Sy2N~o1hq!0YePa1n7b5Tyr#uuZ2 -ZC(<0j@S_C^HtW|1qJxG!WLJ@>S)6Lp(zNoKS<&;*3&`th2f}Q+%^hAYw5~V}LCv-ZMm9YoyZ0gU`z{ -6Q%XMyLh-hcwB^)OcZ*B%1H;x&1oFQ^*t`!XVk1JtyJpC)?X8`5j)e`t99NHu|1Jpafkek3C2sDh%1C -@=~QG7S<_MU~iq_R4KTN##{HsqA^+Gi;|;4zCoh6R48U)dcxd(g}Ul#x)a)Z9=CD^#<k(^9@cIfPp%t -yC<(zY@De=ur~zsOhC>LFi5Tm$qga69K`C_P(#?%|9<(mAO7>1_hKUlsPoVxnRt+Ijz=-;OuPx1|0Xz -xBj;JD!zlZ0o@eMYsx|}zJ*4!=y%{B@W6X#3`Eln>SrXtM)_m9#b@2BK=J{OT+i=i&`~2$LdQD62bzZ -MW7u{_HV^vw%>4QdrZHST^Oc79GHbe#Ma)0M>UX`I!F_jWP%01>^+9hBc5Lq`}zYaZ@VsBU{IRv2qtw -ZK`PL^Xl(6&41A`{_k+sYzz+u2D3hWJgS+ZyW;k1JBr(M%7F4q8Q^#sspeIq~Ab*R_iK1{B3qH6lFb@ -~Ro)GH=iZtyt~1MTmK|tMe#ytUpxw)yMhO>E+ENQR6c7W?{8TA#c&U%J5J{8}Dm*ta|$Ym}+jN{z0`l -x@?;$@P%@k-n$RC5xrJh@m6g=)59Aa2ly#%j=6r#3L?4+a%BAkH?OI(!f*RM{1o5Y7vXyv7ZQ_ov{{Y -ld7O#6m3QpiwW2e-o~9LzD{E3?;hQK5>=|mE)IcJkk^@C0rv%3RYD~4@U0pR-QQ@}lHKqn!rZqGL4Eo -#&O0YcCLxDZUGbhTxSg(oC=z8>LA~E`!g)yi5yh&DQQ-t1{q=eC^0HjEpLf9e8pafCFye<oU|K&J<MG -4IYr}rXg@i~DkxL$3VIgvuSt~%=jr<FX>(^7GjPn6^;ZAiJUTJ|fPVRw~Ks`Kw}nYa6PbI^B&hNA6$@ -z!6To~){7!h=+u_1F};4{Ua1vaAFkL-RYmj}kt@fh_IbFmcagU<}uLA{GheeO-ro`Qe&2GN=cTq=WD1 -a=xGMgS~%<&##u7T+!>bulM*KX_5;}?2%1#8)r4qYvO@Mk#+$c#3nCJa7qKYfGRJBUpE`=>jM$KI@-u -FT}E-}A;J;8CY%Rq_@c8m(lX@gXbdG$%+u<ycfeO^Y@epyJLjofRc30&3{z-NkK+^&&j}ur{@bFVI`C -npxPNI|5_Zk|Cn9j!<{o26UOOGuzYASQUDKPv4}^Hk`|M=-$-Jy*@6UgR-%H~?42Y9u^a(5-e|>lR^J -0E_{t9R5kvCf5GK{q)@kWb6jir3)x4JKFbbf>DmRO(N($;9Vq^e}L`_x7I^GhP)Jk<|%#0OIBgs<K^P -WbBm&<Wo!XW9TbaFLg6g+a(bJTemqggP_V59+oN$rW8pY|+DjjZ3Rv0FO)a=$GWfUEs;B$E|6&O5h#j -x$VqgMe`~1?cjU)OP&R`pvOEjPx%-4RRGA)zuPQ*BDzh>HsyeGl>TvxbH~T+lRH-YC3OGjDP0yByuZJ -o#o!}+Rv(u<TzRB@B<8vA)Z@sF9<#?zCx8AZFZH-Rs2epWj!49))`-txQ}tXCw^i@&=-=L)pI1d4h5A -cu;11c_G>>+(n>P~_2G~;HSxMn(Q*sk-N`Hmtc7DAGzDmb6)k0ANDX-Hx5drKJn!1=Fmw_YgVLl9(3| -~M7%1Gq2dEk0&$l;bE5~ke2x)pSvKk|is>ogDC*{-9erApCaldPPaPu^B7>AKbq+qixje<%-Fp?lM#X -!H31ude?DG0+lt4DZ56Oa27wRk2KyB=p*B0ZD=rlZ`+W_cf10hPxUcE1_{m=@rs(K|T(89H7M*nPHd| -hZ<Xq6^Zj0Hcn$$@y8|8F1e4#*3v#GIoie$k32^3pYE!MQ1f`P5vl|yotB)S8&>uvI~Zm`9y60#&SY- -`n=JJHU^CX(x8c^i0J_mbWtn{%enJ*LTOffSzs3Y00%)#89PBo!>jA||2pyK8i`9)zYP5KD_Ks9oidA -a7;-h&<=t~cMS-H@m)yu#s)-kxvP(R<QnR%BMw&2wDr%CI9Ct{$gLNk&S>V#htowik%HW_}06TT(7As -Q8mpZw;WuJ!dR2QS++=^6pnnVPxSJ&4BNu6@c>UQg{zq_p5|)i-hIm<Cfr8G%0Q^_gna1XxRAF=w~}d -7JJ6cOjjlZdwen3^9!i!6o1A=xGyyzakw!@txeRyxkmk(BhVFm1}5C#~i4@8wd;ycLku1;tDr=`~o^Z -t4tQ!?3xUmtK4SP-ZIhHM1V@2IbK$7vo7$f*ks_j`WAjQP$xcrHei4-%rMom(oNUg#~X-;A_f!biIE3 -%WWhDPtcM5<z%TW9wTweoNJkamJX|F*%SJ^!j-yQXx`~SPscHgeTN<WYkqqf$b75U%B6={IP49$w8M! -_9Vyx(a8@;!<Slx(~>c)4N(Kx$Aw{0K<tyA8jC)!4MqHSDHv`y<G9DIneNf%}rsBgqc09AF&r1Jm`*o -f#Tez#j&)$W;kj4`2F;jQ$<Ni~r)D~*)ZxC=dK)<mmS7TZ;-J79>N+d-11<5{sLy_TuEpu=XkIAAk_x -vX)$D>O^=m7dA_SEx3W#LVnvS@#Q4jl=N)lSYuH=S^g%i)&ZS@(Bil)&r8U@j+^x7I-JDNsFJ31hajU -79{i`QXNg%4ICwr2Hs@Sxhm$i4{el953T05r-3pu8v7V=4W;p1cT-B%OSZAaY2ab3HZs{SPT>%i2_o= -<mcQD_9af=?2_fy)h7n*@4j4|O5_R62TwxGI6@l7lkAu^b+l?CMRLvd&byLxEJGo8EZPrw>sunZK5rV -SXW_G+oEJ5EoNd+eJ2-=qSI&dQpMiLA3&pyE+Mk~ytTUys@>CV1Y?>hV;@9tv@Tq4dYcXJkaiJ9YKPm -6(e<<jmPi2$?(2s2g`Y95E?Sc}tJtb?c#m0$zh{+isuInWQX7NFMN3LM`FGIA`=HqbLht5O2cHbWpyF -c1Z7)^U^{c1xO(fV_dC%teTbfh+-b=(Wm=nC$mk$9`XiESfXdT*OJJC3zbsU|c}N*Hg)wGAPdXAkwSI -O<Dwg+-Q*zWDpKXMHLngO)^`r8|1{^dk1`>Q+9+8C6Gd`GU-D}1*!b_QR|$c2q(7+9QuNsFR&+$<qHx -IUJ%zq_#$*}uf_F**kIxGzJ<B^8h=~;OTaY2|M$B65A#U}9cfkAyxIjWm^I*v%SeC*n{)?lO%aT(Y1z -j?*y4pQQgLhBpa+N65EjNW1Ov{XZE3DW&(hE{Fs)8%@R3jo07V*PTl&^$w)<9P`8Ex753CYqD^wWpv@ -8Mw$%y!M+t!VbSFZa!QZvlJaiUl=5wZv>!ibD6kz`UAKM(c~)9R!qGb9uuP*h6ljz#WS;4yWv`K5(0_ -pA_^XNA{na_2PaBJZ2xEW9*id}ibj52$IojJlZ5<kOVQA{9{{_<2mCd<%PtMhJ&JhT?&b4Z&-N42hP9 -J92i;JTF85fH|st?BOu<)Xw-?@3vMUAk}HQH)@9cx@wA0vpc*`&65SC#3gM^yJ*MwwGh|!(T#ct($Q& -LzrUem7CY-Uf!M7{3&2Qe;LKhc{Om*qEl61fFHpB8tpOoQ4^u0-M(qUYF%nOJJ}skAt5RC8ASr^y00A -!tuSu0>NpQc`VrqkAX@$fALaK&H^(OS1veu*p6r?l;kcbcs7P=N@=5+WGC@Y84J+YDOJtULTJNyLV?N -t^!$#!?KFVbZel@rKCeU;&jOVTBP!Ne0tjHTd-34a51BRF2I)KL?<utsB$`6;cfwMJSjui-}-*n>9|_ -%qdQIcxrlItyL!Z)?1peSw750a=DHm#g#hF)_{~LKZ_m=H}MqW4fnbuAbW)m)pmjt|%t-N16^l=6sK` -q3uP=QjdccH|YRND{8;>7dKrKcm<JlhxtlCu+~VvjBzCmgA!MV?b!xT2QSj<(`UzB&%=_ajtbGbxCxv -%A$$cygsUG*Tg{p{D_4P*O)VrgdNHZ+h&Es+i`(<do7eCBm+z>XD9vQLO9z)xwz6yb%w?3Va~Y*x%?X -_83Gbm=3IIEC;?)LZ_Mw|OZHM=eE|4&}11n*h>I4nkBVyTgrOw_B&Y{5qQzx#JSoC$;oL9N}GKEeSS} -hWzh*4JN0ZRKxth>85=5>IPp3#?sk~mze`ct+F{Fpe7B8(iU2^482LR6#35|E)L)_jm~@$2OqLR$+kT -pX19{+NQ%%)a*rH8%@BHL(HT0I*}e1xWz+IMa5^PlV=>Ti4r#C&Fsooz6pF*OvB&m5foNi|otEw9WY@ -aGkR&VQXbyS9nZma?=+})eYR~OWI(#)s^<yb_3r~cke=%d_|Y5g&^-rET}<%F9g<PU8P;Kw^svO*eGd -VhK_)`-_@j?=Hz#$7mLYDtVNZHh4)Jqdc$gmehBbtRSfpKQd9hpyss%ni{@~s1GhVJ;MV=I1Gmn1;MT -bg-0nhe@$TT5&|Qq>6yEVVIziNI-Hkzv;59S7RY$4a4plRSP6yB0wFv43ixRPQqDL(48+S8iBx~Xw^y -AL0X-VhAnnoVKn&mEy?(jQ+EML;k59B3ha%Kb1@0N+j3-B*LdgO*$3V1>1ngx>1E`0^2X#bOsA6T -5_UACq)!D6{0~rai&tB>+Cz#<$ie`L8)F5M}dPQ*-e2QDFyU5PG~};9=T2ZN-4qzejY53{5lSN;|3>8 -k3u)mstSD|E;dLKIESX483b=)TmR@=omt)sy&8GRIYXgqprMqtVYo{_qIzZvTfY>%X5EoxRMaEUdHyX -h1%^;qXmhLwnlj&$R^o%XbB03xq2{}d`mnbbXMrz{Nu8K25|RW+vnj&SgzfLN-EErSp&qUAfDE7@N!i -Pw_n0Y)k+USp_u4uB4~IVNPK)ArxD$7HTH4gCzQw~N-Fv?D@AAOyr!I$z&1bOlWWoeSw9U3ksxGvxNX -L9Ah{GSGzo8H`7-+T-=QQ0aar(6;D%&XT4xR3k+>GY^9Y%C!lK;5{fX-b3xNFk1s}48gM>zl{n(CS3O -#klnYJJlM8}Gp45{Lj4lH(r_iXC)Vz_&W6sl}JLtiF3fe<a2%vXfI85wM1nojaAe3!XT+qXj~>7-Mg( -hqbT2;O0>)4ZtdBBdwhlnQ8f|xXH2oS*BF70+{o*y$D_)P+3)uu5KozGNy^!7A)$AgE*GdjpEDkDHl% -x-4y;*gD*q&5N)gUS@vO61Lr4)o_3^Tj`ED-@Py<0a4Yq`%+M~cXAAY-u}?>zSUtM4=)ING_a=iw!QK -<4(2zv9EOxfGIac89j`VM&MZdku%AWiP8wbKIX|W@BNBW{)l?a1_2K2sJW{0@I?^SvOuYN_-={Xx&)g -!OAlaQ5Y1Fa|e)|f-QU%(X&7*s!e`xLSa5xEcd!`UHk3ZIK5F@v~WdZknhz*EUQxKOwA+o&lsn4x|^* -YjI3x!%U!hgdOOpWsSrQD)(e5nMnNZ3(!wVG$fyxr!*MiT=FnW!FC3QwN<ImBOfu9uTz17&P4vZvrcr -2D3^4@?DEvrrO_P{t#@BW>+UakVV=S2=!ZM)Fg?gsoFiDv~|tXJ}ht2?zF7~r$p9$eWYY&TNt=9%}YW -x&57EGshFt^Qw34G#B0i0uS0eEaCTCr^wuD$C?xV~3FfmE5pBh1&Gl;qsw_SGTbAdrScU(P=2e`1*`* -?shaIJDnd80!ex$F(5gIt)F0QT<T-sY1(?s_HVcO$w*>IqD<Hh!G+88bT;mhoDfn6-E^UC_x>;48y=^ -r+sPJ;;%e!oV7a5m%;SW#}PgJg^sYQ!Xs{j?BZ3L~a1_}16IjrrJ|q&p<m%=_I^6#Ki4Wdd1_-i|@ku -NT=W)Jc&_sq-`<M(ZbFq23~7vkx`?c}mq=-KNFTte8xHO_!%OsE{JCJa~%O4(W+paG5w4HC<j_1bzn; -FnWDfQWGTxc*rFz5ws}l(8D}W>y{AS%->HIn<&Z3wd;x+(h%O-J>r95M&77VU0`4GWYQXRq7)dC1Sf- -Zf|7U)nmuG)@KTsvtRXo7wt;D(-h#-i%=p6yZ@K2z>estao9U<OsRIk?U#lihCe>>4Yt$IS{mI=sFl? -nXyvOAGg!r`ywPJm0z$*3E2CZ0uLG{W3&ido`--YG8`~ExA4Vxd;`$AB49elvquw=CXgORSU4xM}HKA -+}ax-XY=Fclt7!#@6^4Q+y7G&0@<F@Ql+9aXeP{DHqY{IJzIMr(p3G)=!b5zf9ACw0D3z_o=?^Xq%{D -h95~55AHh{H?Xr(N&iirYS=~c00Bv*;>cY)>>!qHMQCJF_@(&#H%KBRnsp4A1B-Kxm?gYl_%MJ4ZH)q -!NUwXL_s&+$qVmxbi!xX((Yl~GN&U7r*ls&eVm_K=dz%Y<3GU43f13!+ius-N75*$F?Q5dh2hJh2D^G -5R5tn3(^UxWnm<>;t}|x^dbFXd#udh{I&*38I*L9pb^Ta1fn&IxN@-x>R{<(QnnrnH3lZu9#?B}{;*B -J`+I($x_NI~Dz?0uc)r1agql+sz=mo8ha&GfMo2<t+yxM%ML1`(kL8)#%aJ2)^I~fVk3@B1fgy^$?ED -NSh7{k!$l*Z1;7(6|EE$XUC1!mz@^lwpdwAJHpr`OW#aUXGKr{{waRCt^7tPtn%&rWno?pXJdj%+V$B -So)^73D(l0RnM$^S9uWV(4zgl!nW}H3k7xWuSw2R=)*5sXaU&1$grY0n4=j<bZ66$R@OZrD@;+0$M%M -5(e!P5YuJDwsgc&6Lw?@pn8)9+QgxQQV>BbAQ{Jh&;J#=bovPvL;r<aA)mz7%O`i|<&(1y64gl_1i%R -u%IVGGx5Y$Xno*=(lf{!HZL@Vb$>lU4D%(AtAWnGOEh>en`TzUN{|8V@0|XQR000O897^_9A5BOcE-L -^4u+RViB>(^baA|NaUv_0~WN&gWaCv8KWo~qHFKlIaWpZ;baCvlSZ*DGddF?%Id)v5?-}5WDPPdY5S+ -SjKdv%kjd2z0}W;c0~Y`1roB2yG3aZM3ig0$>J+24LM1Aqickdhob+4feuF#!@70E59`0L%<_c6RPK@ -Qbcy3l=7#7qCkfi(Yh<%y~$kezE@U(6^VA+L`j$c}+PSH=H;z3*3ZFoWKodsXJq$CsQALJi3bg**rOR -p6Z};ba3#;{iB1U`_A~vN#+b7$+|cRa~EAlFy=h|;oaX}y?NV{U;^J`p<u_(lef?0_m?l8o_zoIgeo# -&iR%YY<_@&&j=zX_oIsUy=$u_Gc|5suXBzW`6ZuhZbiu+2k9$QNI4b=!7O<I{_~DEi+jZ3A4V$q`74} -0fNGGi845)(Rt69v`NOYZ4K)x<iY3imy(si(8c<u4U*bmtRzVML`O^Fkqhwvep`|vk_ZzHI2eGSvZ4| -D}*EE$bC4@NwK62zR10qvuOn|O038ek;+oP`?5J9Y_~pYjEM>pHI@7P|?Dru|)_tLuF4E}(&LlbBj08 -~S~^7-Rcir=gdmE;gd;{1*#Z?0WzNIukyg#4!T;aqcHfM6TD+E?t{6^aT~<xB?@0?u<rm5R697L+7+5 -DUDFy>N+a=6!6CbR(ks`hVsU)cdp)3t<_H@IVxp2YRvPrSoX7776e?pzLK%wojZ5Dz!kzVs@l#8rgKa -%chuN>o{t{E)7WD`9~0)ZFJNc^MxFb;%Z?gBy`H1qx|0c;93MLey~Bg@H*XFUKwpn~f6&!`2c+e|{~= -$}C{r})oShk!JUi<-&Wi-o2_Uh+aW7yjx#NIgPe3*e%?*5bq4VC?nX`6LAOw<u9#e>I(YrJb@YOs?qT -_q_mdmALH9a2BWC{Y!1a-CihUks1@UH-FB4bpn4BiKXW5%f;Ff5X?X1&(h?P1<xd}+M6>%6;)7_>JXi -()Fjkm|p4mZ(zvbX7?37Aj|cmX$RVAdwbQcxJ`ua}uXsQhDpeev}kponHlRe17k3;>H+o+Nl7R3oP`B -`+)^r=Sk|FcZnUpc426B%yP#c0<(xGKRo?=G5+G^v&xI!7y+BFe|+`k?{8l}etJ^G<`M=kRON9L0i!0 -S01R>(yRvO*TtHIdY8=Q;T=)x?K!3>oPk=4myWG#oz|Dag@692qAQy7pugi+0Bgr!KM~Yl`PQMjH{I| -Q~d<$p|{obWN83{l%a7G>VcnEVs$~rPXj3#I#Fh0q*MsXT2(N3@>YP91oX3+f5AWn%f9F9Dg00~~fKx -=&~T3B$e*XuZn4Z^$z3>_ySr!5EO1q_o36bYQ;ey0Gh9k;%1588v}-k{UzpYGp1aQ23~?bCz(KM(g-r -@O;Wzdh)g@lL;0#9-@m9=sg(Pfzy$>!05K%;&Li)5~v%Ej<DBUW5sYBOY|RmbQd!soV1LQ>!N{U(=p) -)dwF-b%|STY)c3J_VBrC4^B_t4~E0N0n~gK>W;-ueFg}`9<1aZd~+&dcSs4Xzq`P1L&Z9)xsThu{^^5 -94+rmuh|N7`*uUF902EI4I{hx9l0t;5@%}920ua@&pcGp6$%?)b{&3<EFn7S*-F1FWIn0?fhz$x5{wx -&EA{B`<W=`bBIPiH0EIM&qC-F--0HgxG27}hlw;u=La1UxB>9Si%25AO^VNHU&K>IMUOaeBskR?{CLW -a;+A3q*;k3MxWm?e-vDk$wh8)K+{=r9x(h?hA#VXy-Qfh3t{8s?*IdYzH>Scr6i)lKGvtk$O%&UHw%U -cgaUbH+IRJMI)ZNVU%q5%YYYu(($O_tu>RS5j(o7R(KWgu7%Q=!LBWMN#HK{;M!?FJ;?$z?flvO<JM^ -Yrz2nQvLyc?Ic|GEYM~g8$eW477GYVcnQuNgzA6<Yd@4sLgwsMMw*=-%c(wAQvow&mr=YAlB+*q`>H2 -e6?(Z%TK@Ry^Jw{cghw(nPE8;4IV|QpX&skH4KarkRxb5ctN6Y>5WAiBY5XSrVf<wH5ywdzgr|1@xVI -XFo!ve}I_23-FD}|S=&XYtPpAH67JJ6MPNmcxYpJbPD=!ryot>L4wKaHr_nY3{?^@X!qxUzU3tXvG)8 -6gvnhD<m)WCv1AOplOu3T&%?Vr?2t=&?~KvAaJEP>$DWWO#Il+Xqy1d~$#cpz3#717y4CYRwUTQ|u{I -IStHk#K&pfuhC2Hoz!D9W-2Ctq0b_1)b_h3!<RH07mj7TOsnx4HRQ9BI^cZH0H;lA%D`h^2odE#O~6W -?n|ar<g#s`a=+7#r>kj9L#=*v)zEf2u8?B3ns2va#R{45+=vz`$>is0t1=#T%xW|aH)}PlBciz)!d8t -UHf|jk8=&IW5n;mvOa?sMZ={;j>GPo`n9sz^#v~%kl+^K=c-WX8R6B2>mCcR3g(lj28hd$sr3H~D9x+ -~x<JD(z3F_MF)Ui{9fBoT4-B^WRuK%@bze(k<U3E*%^Kn==3ez88Wpy*d&@u{zl|W^gH!=(@qtH@j-p --qE<(fv`d=qUg%=?)}Vx{#UmEKS%6Z{SOm`c2nE-sf?*Tb@nH{QbL2Htq{bn7f@w6|(`)+B?6bbMeFu -D^M>diZel;KAzAqt)@l)#?5(d-ry~efZ$f@87R_xTw<y6qbeG@Z+cBcBlK7Q%q-^OxT3jaOH~?%mgbQ -uR@-524e$u??;edo8;2k<w2HeocaN*bL$f<+?ns;(qK)J3%81=9FL`iKv_mEFVroI)zgpdGQRAq{C(Q -xtg`N<pUiohRJKeiIDd%CPh&6ct}|idbmp}2NI)Fly9W_r917g?g-F@`KmO<8pNgAD`QF|%+uUo~%Cq -fvKpXEyJhC^Zxh;@}wSvI$@Su%$kYcuQ{SbFGXj>_i`?@J^Bngj4m7R>Qhl=BkF@Z~Iu~*v2K;Ui=@F -nf^(l*NV7H@Xix_R;>w$S-hh42-cobin6!u5$OcfTCn{}b*N`v3mDm`z#CLXX`;U`$}|irzd~1jRN`5 -$$%d<FO8|xC%X_Y&sHIx_*KI76@YK>b*b3zk$0LPh89CO6v-D+c60R9NZ~@HajB4$>bs6Z(K&IK1VL& -TGg}lE>5We&s|lM?|I0oFg2JS9hJFZQiJJQBsU=jkKqX`h@t{|#xZlxF`!R<Xs*S>Fhm_<s|rt}lwEo -(A}CWo1QNP3@H`9n*bO$pcm&nM6tU||upmMO+>@E*W;e+jF@ays{eWftQ`>{G<EX`y3wYkIs~d}ZaMb -~GMp_PMUFXb$p>sxSy0g)lgZZ?ghp4dK_ovPv8SZvU=RtRI&w0#dz(J6Q^C=B;XU~Z^3^P0e_rnPb6X -G2e_DeNcVKq>QFoEXzwdzSZZ~q%vqjvw;tP{$~IH4ljp`+biuUF1{dfffX!}q^m{q>j5VEAdcA`pAT{ -pW7%dI_rMAX+pw<Ou~HR>)%uUxcls40YA&{lxvStupn_mw_*m4gdz;HW+tMZY}@rI+2?|aiK$~C?D<R -f~Qn9$q1>`%T)$mOAs~F#a)L-*hOwYv|vLzQUUPzP8$T(a0H~#9zm;2Vcgv2CMBLWVk@WIvXHH`DcWj -Au~t441~+F)qmkSm9gS$1j%l0%Q<5qtz)k28(x3+sogSRiTNKsZICigW!=D&h1YMlyqy!oG2`PI}cur --|PV<7n6f}_xa1jx2slvoh0lQSJ5om$(Pkb+tPZhmbNJtE%f0VN&le};P8_X$SOty6za5qt`bD=^p|A -2a66q&I^7b&@_u)&+VLZ^b@oSw4EK2^#Oqco8L`GBrR2IW~>jN;gs5JYKJO#?>#fFp*U$fYU4!j0tP( -gtk77CgSX@Y#|Q$<7R6tl*Q6e_|4kTs<OL3J?w{!SJPZ)`(R*q8Kv7$(5W!La9U(vnZBN6cZT%0_qPb -KxnN(6gip&s^L)p2vp|ALo?sYsYR%i=|VoDvObjrnxv7WIXtPuC#`ni`N2o&%mG11P9E+4gKq{s9H>o -m6rMQrp2)#wS@cO5ZNY-+>LdvKNWdEKd!D>N^2HM;Hd%RrkZVB`R`0c7>4ewJebr_?j$uLtWcVJbz+r -<P3#IFqzX5FeV^}1pH&rkw6`qg~;Y%HuC(w2lXAqv?=>5@+an{24Gw4<(^<1*IRj4Pgo@WqF!V5p<A+ -|k#XO{RJ2Oj`>jU1!4qR&%Q?lEdYnt-^HKDm@~)QeXc{1?R6YGKLG2CNtP+?&IIcb8cVICCvH_%`NlJ -fYQ2oJx7@CFkd9l;!`924EJ&p09;hB$q7DtG9U&#uV_ZWi5!;ESx~wY`x{Q-e@sDgZG9>-N1$}eUpZG -V4i1@aRcnzghwwD>=WOrHr0Adssb4V88rc1iG(eT?-Zrptpa=Jj<b}gVwXjJ2*=1~ULt2SUizr^_>AG --TCAy5C!vule_M*b16C(c6?q*vqlG`f05zijaDz05`;YJ5)`BuJ{Ro00Uy3Z-|FW1r^Dlgn6K^FyX(T -vGL~xiMeS&0k=k>{J=l<az4lUdP=9hCQ*BDw)LHeJ(j=2ZR!~7)&VaZDxYS4NTqjtk<-{`44*W)p9dC -M1|Ra8B!1#6~+=_7;i9OMWf9g&E_D;QeOkvi&GgC4_1ZC;4S&wSL2DU4vARNmUgVZ88#F!_qYU5P)ug -R#WZT9yT3C+a&3>POPcBaPnsmO%!i@G-72jiCtahfmT<>v7zBY1~9OEgB0z0h$2I(;@t>Gl6CkK#eGF ->|Aam&w>mqg;@wrCRq^qXq?A@qht|ZeX&9da}X#iWf5Gt>j){w>o881b<jN0F_#IIG@D0(6M`(L;~?Q -0K@^GVfWl{%Fe5RvXOTtyI1i#^tYaBIY#`asSuz7rBq19S=mY;Ei<8t`2XL0v4~+@(pl+8DC0V5&PGY -uhmcc?{TZet4-+k4A)|F4W4Spcz{xpN>LxUD+kVknvC^H=j4S6KTpO*B!IrGkIA%#YInBwyo&oJeKG@ -gaytj<<&uz<*t8Y93@;*^<9zs$i0wdjYHN1iC0CG*kTsBaN_K^Dr<XoE?-F`Q+Ia}qUh8nQeztAhl5F -;A5b)x2R57kO}52L^aq<i=Tnu|Z9-!4Bf$c*3<#9YnqU$<meyFD{}kZpK(_7Hc3W&Ra^WtSr*d*f=hh -T#Dty6B`6$1!NGA$j7)Sj&V^OzoMS28Aa<ga5ir6<(lfq+N{}Yq-p3m?$^UC)cX$So2I#l7L8j?MPbP -0iXx-CF<PEvJRe(?N4QAi+M$P1WX|JhFDRcYd@n=zgnJoF_UlJ7&Z`+0mD?FQdcG{fUy$TbJAh-J4Ld -++Htfbf725Z6>IV9|wZmb#ob`CX^U{~hJqPh(!|wct8~eD!)YzT+T-b6D)E-RQ{o_%8FzM_LdZ>Ju$2 -<L1`2{NH=h3QV!6`c#p6=}r`-NQ4FlpJ=qlK^Kd?-(CgYeUO2nVP9)sQlr9_;^V*xAc-yz;E+$4_+n! -$R^WwoQ(M)60LV<nI3T@&0o(_Aqn(ja@c2D^H2y_Kd}KU4=)_mVWvx?m}y$8numrOS_sw`@go#BYnLZ -0zMo2mk#jI#LsPsxJp-qQ7o&bwwVrYxyBou$CpaT7*p4NidfnZw$~?D<E@~uRN7NaX(`HtrZj1-qXsv --UD2UHt6Q@fue3ERgwboMdSu$XYp_$Bjw-X;X?HvHtkxwrJ+)P)gjRJd>)>JAu`}aja$xWJT${NTK}x -5YHva4wGTT*udb}1}cO8G~;L(`FJzU;7uy6#-p;d^pLq~khrCj)9q8;F?K%h+K@Z7KjD@6GP%_m$(P6 -bsvD5w=?rk0h@-s&2%VUKP^=p{v5o3+G8)6(RG(pgaZ$<*Sgq$+fHV~N>-FV(Ep8lWao;e5wXj<U6I& -^{du-0?JwlZ%}}Yq%POt4o7Fe?0oMqS@f%VfQ|nOcmQ{Ep#nj2kq|%AA7s~!KYPf7WN;XRzH~W|Fo1? -gAB8w_F5^VihV%}Wl*uAxmKOJS)Or1if?rpD{67AN`X~t%-TXLW!C1cmWz7L7PRlQN-BH}>;itP!C+^ -l3|dNEK-@xNenNbLoE+3?$!2|2Mq~~3SZlx2+9_!S*4BPU)xJfw-?{PHtM0Vd9<?2Rjkw<s^|s1?ebj -G+`J|5QcQ!?SJ)u@RDJ;XRsZ<>`w>Cv;J^eLSN^z7rOxcNadraLVqU^M{J)&*`PoHw5UN>}uE5Sx+z2 -C+^Rg>P5gA+>Cg|(bilUw%N_sJx?gC^J=2Pl3}sFISB9jTxRc~6fI4-O8{Wryj@!g*-=?kM^5INIEy$ -5HRnbm~!Y<5BObLl!u91xR)*gw~@hCRMg9K08Wp(96f23~y6BmPojAt|N~noC{ouhY94xQy1y0Luv2` -C-Bc1z(gk)0Br7FWa1=MX2CC@DgZHq2Gv}$AZT;|g2=eO6Obd^ZiudqY|cK0Qdw&0Brf{2;Uo`VnLX& -V(TfV@Z16BaW!U^g9JPjD*v~_G9NmIThYdYC+^R={FYJ(@7SeC#;9t}nyxBnHcI?HsFbuhtY5DaGN=n -8q8(X@pHDv$IMEy&dsDBwFA7sOc@10xhJz?+;SEn?7Wf1<z=&hKqHWhaZ)~t=KyJ6$j#-`n*t*f;11h -`+po>i9mr7c=jTfd}Dt7_<%v1+Zg#w&iTnmpc^-O73^m8w-r6&^^-Wc;$ZwTiY*slv+ik2ABCuWG7tE -6Vr<9ei9nNM(Fny+~`zu2Rjf0?btPNuifQxzhd?YWY>j-XfBOz+$PRo$2jwsi$wDkE-6jB$}y$&y=#S -j#qT}t1#DU@~_j}uY#;-^5gP`2+!2%Z`9$h0<G%w2VC~BsoP(xy<Y{`pv_;WwC^rQS=(YZN$sWyF#}v -njsCS-{x+@tD#R_d{3}}hRfuWmD{4-q8ZHL4>i=cdVrc|W$$ooA0eDhYYZ*Y6Z7Z~MLnDETM!~PwYQU -~&-fRX?1-sTPV7(bY6=<DVz(!^O7H~CY0h^csRH5CfSwQ}xL9c%+OMz<kP0Rvd#R_Q2_4<Fa6R?8Y-c -G=<3#dX}Zzpg~<EJmHyPc~t78Ix#QLa3VVo1H}+%+_<i<;Fouw_kakbH4!Gt{lWjOKMkx7r4Gjjpv#x -0)q|_RMNwo4VI?L-pCBhD~8p?bvLLRUj^_WaoHXt8;CISJuH^qjMeQ!P-8nQODj?{n`q$qK;iwzvj8h -v`z2Y2K0KG)`n)a4QR;24=mRJ<+&zmj=OC&uxnMWjUiu9pT131?5eJ{6>i>IQw`gojEyv{t)NS)`de# -S+klGF=oUuK&(pkCqP9-`t5C$=Nb9;u%i7BSo3*YRw5+Xz6S}WZvs~%ALCIPxO<TLTPKmmb_)92N@8O -yG?h5`%f9APnv^-So^fypyhK!|b8)-tL%3C32y#_QYKX0V_Y-qNv*LvQ2*($3$_g-?_Q4^#!E2?#)?K -@0*!@h#?)>&`2f7Z&jAD^g{+v-@K4wgOHyfy08fQ=82_y2b^94vQRx2GX(E$FrtrR{|l^`)&a8?=G@$ -K;TO6stP*hm@`;DAYFSJa=1-F6(pys6(?hY^ZU2V>-|qwpv24x4fp0zpB2oWizI>nnF7C_rp@Pu6CR& -XNmW2K(U#JeKtY8mrys}NjR_T+TMnJ3tbsrCFnhe`cvxd!Mw!P{Q{M0p(cjB!2sqD9<ws8c#^3zY(MN -aP%f^jG}o#dS2oK^`o}k=4E;5ffPYg&{c4J+zo}P#N%hJjrCkaAp>!fg)eG2g^SP=XS<(jdWClk_FNQ -X~KS<JAdo2`nn3ph-Xcax^`p4;|4}jt;M_%QJ^mbOQ=9yB*e2UktDP1nq|Ke#9rHMlqoV~->J-W)Shw -0AFx=x~Rh|4lb5-z6B?vXR^MZ@PdT4U`;j~+Rlc5fG^<d$)atuEQ?y@qK3ul>s_NV+%j09e|#R%bcVF -P*zl#PH5R)|>UZ&T`JeykQa#41`>~W)9~=Kytd!Tkn4<0fc;jZ<w=|nL3!l<TL@WNX1YX!4au9$F9dN -6qP$^u(_S~nzkBBbT;d<_fI?h4EN5Uz2E}xfApa84sK97K()!Bb4)|0)Ky(Pmsa5_-i%#uhpqz?(oZb -9hAY=YsnzbBzTX+{?Z`VF9auhWS0(_$u5V?xD)wFxZPtm&g?_iL^m_Q;mK0S*1OuUD%r98A17!i9(T5 -ueCON{Y-v1s8M{vA}6jhSxc2GAb>@Kk#pkxPyNF{0Efk>ckF1t)h;BWv&RO@PE`w!u3+gbgNJR(X<!M -Yi~T{(QJAjw?0G!nU@i4q}IarLRFw{G&jcIjTzdKGrfrxjPk8&)O56<s-+U2&YLwM$)h+^0D{c8G!J& -cP9rE=~Yb&Rd1Iq$kpL^QmiUNYa?#(7ERvWN-4(Z6Dmmtfq(I1CdPp@R1&fha}@akjsZhS?bCG3`&8t -#CIm@HMXC!anvx!y;a%3$CHV#yiQ8@lNu>!>ZZZ7tdt*wp@yGNP-GwAIM39*oIcGyamvp0G^J2nx&ZX -BcVPKywJX5i_k5{`7}*5mW$5nzl5;f*CHh2w4&S@Z?ykb0(TfU&0MESawyhF&&HF&HH8~x@vQvFJE{v -h*DzI32m?@HRF-7rK*eoe6x*I_st%rS71N^S@BO~JrCs}gGEebWFM}$-w#*os7l_*Y22AGLIrBmWW$s -Ryv?_NE7bzI3U<~&6Mg)|}~nZm?|VD!~<K>DsnXN-79uS2RH3A)TJSCZDJDgk^i027!y^#$=@U9op4h -tLIjP!YUCFJx$HLau6&aW2>d!5e^x!{xkL38imX6aZ3R;35tuu^N7-e;X2_{*jVPyVJ|Es9x{ZNyFxR -YJ$E~3sDhCx7rko1YrOyaQq@+ZDg@@zjtZKfn6!#Xo4U<HFr@f((qANdpR-krqZWt-A!C<M*Stl8lJq -XxO_=*1xh2!%Tiknl5k@QuO5bg#U6=n50+^#l&5N9jk!$IEni=2e7hyfldXhiEzFrBEDX-d=>&p)mXc -u(+3EPwtu}QHN{=}S;YG#dKF_Ia5@l)R-eC;1GYIX~uoVBUT9&g^<RRG^G!LzORJ|(2OZVHfAEyCqQ$ -C1@bt{3+mY6h!z8bNZvRWwMeOpzc(^l2!v{gkqbdhbF<RMrU>?xtNh=!6g40A_Si@o|P_&miL8Fqc0K -CdEc3wJhXZ`BRBAun`FS46ZHZhUUP&*ptw`J6AVk2WY(Sv8f~LsuRfl6cuOye#tl@etZ~yg@rP9g@&n -+llpy8z`)Jh5^O)w<vIZAsa0Vbq7=zg(p67mos#v`o}-~$$6l!*eDvG-kY$Cdl8ES{@Fi(l=mK;l|V_ -;KvV&i4q6RgpS{Dwy)Ld0<bK`0=f)rwsalo5VE3691EZZUZs3!HeoJpUAOEBKsnb6F<^6CAqBYFidf! -n!8m5BlVg6HYI$fM$>tyGWG4(ZMlw3Zk6+I4mf4W&)YrFK|IJF5#nptCf-6(;e?RcXUa?~Jw9Bm?V9D -RmhaTiz<ox{PrUAGP=>Ay_}DU^U-RyHG9eqqD=r}CB^0o)dmCNEbyS34(i1%O*8WZmlq)eS@?%Cs}Qs -eP`-X~Z&-+o$2?EkH|Uew+ROm1lnm(wz5?nkN3wp7&*W|8g__V0jbMeZz!q;XTjGvuAa4R!x|L_ZBB} -)oJm%a>u7^I(wQ+hU+G=m|YTUlvx@bgyc)<L;GYQVc7g?cnv-^<Tts9y_65ARPAhXsg|;r6CLoIW|tg -#(V2#Ne~aD|EdCN2ofR}XMX<O**dEw=Uk6411vlZipb1eo?!KV?prd)g!Tz6nedIuo>RCbI0zR!kgk~ -SbrfuUUq2GKXsPZ;Iv&w^q(g!A1nqC~&*EDl!P}KG_T~tbjnZ+yngz_g-HMDM1XAUcE5?FQQxt%kIs8 -6mT)&lV$Syc#Xt8HQz+Y<y=QWA1pXN;FoNP&ol@E)^^PPKR{{McS}GZ9EX6f2R$sh4chfc0J|)?>2K% -Y@h0ekRre`dmK}4K5)1$J%v4!EwQ`V=BUQ>u)5l%Wmqdbn7o1uPxmyd)uPTg01D!wbjK2ZtW0(U=&-q -wR;0ukBw^4REdqM@auFv&~RnunCzELmjoWl3&>cy*SJJehWavC=c#}$q`|<<w_Yn(_GF-Ngu&dYLC7h -0e)p#GW>5vUxp#vbxM~wv&a;!}s~68#Cok#G+Y>oWYyU^D(ZGh+nE`xxzX$ZN;_cf052~Qb*A#B)|DX -zRn|ljw{tv1UYyBa7nVSr){tv2fx4hHP=Kr7y^g6d07X2T*z8VSPe_*4U0oddnq1hXP1=?Eg2=(3&s? -av`j!@$bAq{b(%U;boPYJ&Q&j{cD@bcwvt`YtpyGAIxLa4r}1^OkOC6t{bRKacUETQBap$c*vX9=crg -es(e4`&Gto%zKaBCIuz?60woY^^nOl)Aso7LK=SxL8U0wagX=%P(ZJxT!&+6)J6g*ytfj#~=l)V0|;e -O^y`^H6U57+{j<~A)a7#3bt{0>1BMuY;wHZ#aN+4xq?Zbhb!r2)68$lR@``}oyz{h)AsS*hr`wH>bJ8 ->ZP%L;b?VBNQo36KU$>Qm+bU*D>+4dqv#fqUZWYREXcXWH&D7RwYnSN8+^4jtW49_hs$bD~^)v7K+0q -!b{cFC^C)=BAxYDO#3~X<_d3J_u1J&21^1#j<xCD!L&}s;6kk0T3FZ+7nJaByYcX)7i)`S#0S^bL|XW -FWY&du{9gyEO>a$faFF4I>!So%K)Ap|!T!bIvf8y?cPbAq0^H?Jw}I{wWSs1l@Y{hOQfcu;#FS1xO-% -USBj-PXpi?#%VWt*lC~YYSUj>FteRZ>-Xr*ud7*yIMls=5bJ0_y)$Vw^4Y0?*44H=FI(NW@0m$$;_@Z -RicU;&<K`0Qu{piX>p1MU$fX<EO4L&Za7QbnH;@w8iu6C9FjuU(@dl5AKx_`-T$#rAANE^v7F1pJNp@ -Y_Q87KPG9NsR)^}M@ld*N^{QW$sr=5tcoWAgl#)w#FKd=Ul=KogJxn@l7ebiYSd9&O^4VtFI<P4LV(M -bgP2AX&vf8}FRB*S0ncCxc75B&e&Q^y|T|J*xPm^R_GO$~nk2QfU)pq04sx7LzQAMluELZdlSD3qJJ5 -5RfgK-=69Hhnrk5^0N$s6fAoPP7WZ-2kLH`wppJASbL*TLZZ>X*NCiAas&Hr&$8jzH`OAEi?b<K!Ycp -74@E%X-{kJzP+y0og`AJTbe|TF_qJh0kc~z20N7)hThlQ7(by+vGM^!BwD^U2zOZV6;JA-qn%6rmdiM -{~M6621{7%ZL{P3Ij3OxahL2a<*HksMX3|0D(E_o+@+JJ37}p-vx7zBII0RbKc1SqsnA}zv(qP^z)g8 -D2@d-*h~g!Mgthm#@XamHTS{kA_D$~mtZD<-+<uaszM(oXJ!`ymXQx!n-nr|~plsx?J=(8vtDT(~d2X -n%D?<ALQGS#p&xjINo;%}ZR{ELsw?6f$@rv!-%Ai2rZyW>FodD7C5FG%~Sx^T{qr%D;XV?#cYRWu?RU -z(<v}p%;m2Ks&)W&hAwcA{fZS%L(tQ=_JL}pbv6<HN_`&T=qRr5~1d2hD9S`S-AXp^DSmKqK#rPZ*4F -}d=mE6IFNDQ`uFa!X&Z6)7H6E1`$Yil}CV$_6V^Kq%D7vO!s{)hTTR?G+GQ-ibAm4r$)Cm0{gC+o9w+ -#L7h5?yOaK#H}}?i+`(4lDa*TuW<p~zu(qKRTjLty^PP?Rrvh%{pT;z>sQ*ao_T#G7u%*8WO23qSX(( -s9|tk>_$>54V848iqKXfbvQDCvks7SH4i7Tug~c<~rK0tY7JVQPMOS3ZS6yDyH@#H8OBY4PK01GbwS2 -y?PB{6^^F!dXK6*i53%Ow{t){BWaNCuXvW$~|zI*d{^!Jnh`SI18XK#zkaxFuS1rJgw(YT(MF492BH- -H5xWJ<|I3!6cJZgEY458t8RU-=n^@q|mYJSFkCO5}0Li&)oG+hPTwL@IKPT=HM-Uiw0%f_I23cqJDmZ -YKJ>vFCA-hvo%nu_si?6q>6bh<JJEC=aUdGhJ;66>iSKHz+QtkF;i!VJ&%OYbXjF<*H~DAF-cPHz)#B -ul<WWm6q*fOhkd77||sErm$du6M)&g4x$_!dGqrriovqlg47~sDNl7u6V%km4csk((u_C2>|$S{Nx*~ ->xUyQJblXbHO#%jQM~4zWDt1(e-Ip=wVORF**p1;+VoK|z+Lxhb3=*zd>$q`_F^GE56^RP-g<nMX*iT -S!!8-$F5*ZD7Vn%sv#x7MffT?8R7RX_&Rx9I}yAw~X25|K}B3%ffqj_K{R|1~tl(_{W`bg*Ym=wOfIp -<QT(^Kmt4@T)Cg#K498erA7;Nhr@Z(Pi|F@v6lL4w^S^y)8WLWM&QMtG=3IYfWb&vaH?$>GZj9$ct|k -<z7&V~<PySq!rvgQVcgHJHaQ3ZP=H$_FMGs~rUyOyv>?VrmH@uU3#DsYp|()x>vcP~meLxQPzqeyR*l -rFO4B^ArDr1mp|3di5{-NfDat{Yf^^CK-+=T03r%%2hNzsSymzkTlH}QBoK>^kRf}7}IAt=5ZAqsRuf -(pZE)*qKiWrKx0^`WPDYq;8bzyDbUDM=!D1NgtTBHMIqB^q8`(j{j7rIK%T;WP#6O+{-<1ipy8_#h)? -CNUq=(k_;IBkWNY@cz_7_dzWfA%k;X2>)vf_lNwynju$&+<ruA+OXz(`EQ^l~_Cf9Mj2*+@Ag<o|{bJ -`r%OxpZm0`%G>`QI{@0}$UBTGtqbxml*k-kY%KdvsOKMC)<o`$oOXwTWd!5CIlo!K|;oL&#I}s*LgRP -bxCiD%-Qzo#45E3^O+=;!M37Wpp;fZC?t_<q?7mhFbk;?u&$u7fdMGOUaqDs1yO_+1Qw8V`F|5$${e^ -n1FoL0`%nuov$d<U&!$)@8MAN01@AltPv<uJ$L~W8g9!ETG1cx;&4TdVp1!PvXEe2ayTi%$X-Ja%7ho -{p<xPR11yVBM;LHKK5zPZI+PJzdlBk4A)93{VUSYT1O+`Nwf`xky4*LWQ4DL=lW#+ficsM7q>#wSldy -$;>YZ2IG*C+H{$&BwIWFU=-1AtDwP2z;DPYrNl(CXP%^>*9=?#!2g`yl{06m5Z3iMg2KI2p9Kys-Rxo -7Hec%TE33LF&x@)-*5dg9hmHF4{x<U~4lnMGAy3~&OLB=}KH;JGlP_vk?QT*$dd1xFgYIg|y8V{@Er< -?c15W|9cVPnZgc`7D+@kc%u(lq(^c6$cax<!B9T#YN#k^t908CrIguuZ$kTqErIWQNod5sgJott0HOx -(hc+1`8%3|4QP{s#Q_Z3g?i#(rXcw>lQKfcmRf9wV3on+OOS(jJdp%vOgPY&IZeTsILgVHYqY_d-Lyu -acs9}URLu?%ix+8<>BB}o^Vm|E$V6)RN9Qw1m^m==az@`c3@4SBOBCbtaH2zMVT3`|4hs4Oc?VxjCDX -*9+PB3Z^qmgEsMSHWS03@D0vYpS^>RTeN@$R%U2AwOTtPfJro#ce6eqj*G@S6oNO_Sg;7)xK?n0e;z> -BGRN?;(6Q<XHk!sp1Jjw;JPl+g6b0Kz`n|L82a4aCAll2N<X5p&f(HmrT(5;Pc8k;){L_y(bb12j3{V -|0I?^QCN4oEJqMjB9elLueI9{(K+<YSBgki8;Q^1?(cf&G94vFN%Lj5<Nm$o1zTXk#l21o#|&#JkG)$ -`cWviBSu_Gl)@rT;5+34J{N@wP%;67V!2Q%GATn8qzsWu83j0*w1MHko$2Bi=!7}WU;<B7VcA6nj5** -AmJ3sVCcnejSNQU0p?;3#fKaP)yk<c?3+wi*MY*|)T7w9_V0x!PvqF51j452YGbq5*(u??6WdS}Ds}t -gsu@CyNkTmOIR*4sqd___if-qV$8C@IHTu5}l!cK2a<mV=#deCwRglVWL5wNi{#^kauQ9^IRr&&lJk| -sRgMj(GVDxent1~iavKgh4XdIajZ7$Kh(DwfJ;$_#-WDfyXSBvX7xnxkDZ3&K547386$0|@?{vOJ{U6 -7v|TIU)y`hFSu@a5Xcykb~z!jqM8<Dm+#cpbvyEILuI@$owy|ZoSCH?2`H8R8o4jJF}eA{F1ew0&>>S -8;tls#Yq(Dr3T9=4Uvn1pu;B0A!o^9Ju382`?^x;rR!XvT>-kX8C1^2jQz^qHih8NpUMKz;Upea(8hL -F7G~=exB066LggLSs<!%2MBhb1pbA;4US%sl%qDN<;6K2)^N?D2dVF|ra4^iiDd+#~b>9Em_m%s9ya2 -!{T`59DA<wCt7NUkq?38+gTtew&az8dpi#oEjnv@?LrQe&wy7PZfO9KQH00008031s8RvzWQdPoHT0C -Wxj04D$d0B~t=FJE?LZe(wAFK~HhZDnqBb1!prd2D5KFJE72ZfSI1UoLQYomby)+cpq>_g_J%DD0rAP -;|f^4#-2Aq+NkD4dQIwRunR2(Gn4w6i6zqI&6RYj=yBn&ah#A5I<7i9q*2J)VU~%8Npvawp%8xDUBTk -Gk)!_{5SK97fM>nr6Kjeg?-5-2@+*^4Qthpnzx+=q((?yzk2oK%h#`7|3K=I*p89gxE-;KZcm9}jGX^ -`|I^32Wf{~6zGl)eAa9nJ;r;ddi>sUE71=0F8iqCq+_OOQXB(}yr00EEJu=xST~5yQVrbDqzU`H^WW! -}sg{3OG`Ol(*<su1Q2x`oYvTxNOo7wCckaN=TwdG1uJrcD!48|$h(!S@i4Ra#tmZ7i8iLO?2Gt^tv41 -xiyooe@bzFHw!qYS#Wy#MX`s`_w#OU}q2J|OdkZRjBE9CjGsGJvJqWPTcmY)jY1(Gmu@azjSiXpa7h5 -qT2^cpK4^)T-5VG;4});HlM}_`9@}=~*kG^kxuFI$?l|h%zc2?68&Ihll~r{g~0VgYLUA&;kbd;K!Us -rQ|Un9wW;Q2PDfhr{21R9WS7qs-$|LUSq<@3?L)+Op8XXJuzZ{+W>MRHI}pBNWjSRV@9i$7F0G~U&H` -!0?3F~({*q-V1RpkW)w*+e~eoO3~=MegTo)VjUf)$9kUyA%f80#JVv7gT|a#4xXraa@@?Wd4Dbuz<^; -3T^Jv_AGq~sv4Oh8`RJJOfsmJJ|8#0pCcG?axz@5%Z<=a{{ENbx>;8!<fB;G2Wg6S~8dwd?8pQhZXm% -?3kE`#Di<rmyp`suZsJt^2w{je|R=9AbZPBJN>9vKGM*I~i{*AeBFBw8h+haO`gx#5^p$-(JMIP$8SA -*bqQ;L=AvVPpo7#~!~Cwfc&ln9k|lpW{J<*(FYL^)>BNtQ|((_{=Cq399*b)=WX0Rsfa>9>r`YHXYJa -a>qwx=q@M26zMd-O^u~mZ8rGHniJTcB6Y%t5|-|A-A_}tEZyV@L)`M7_5WEU#wm$}-0~7fQR4EUSG%G -KQ%rdIaI13F-<hlj?e6FV0e%l4<F$Httkt*au;LuxT>wWWB!S7%Ly2QI8@${G;li09ei;MEcuKO#4#X -i4A0<03FfPVk;Z5sKGfl9<5Z$VSyH+agZe%~=6^hTJ*M3u`bJnF_%U$QT8|q!Cx_DOax}AlyKWDQUe* -a0!Y-nPtdaPUnv2c$Q@T!W~)!i|R2SR9ULwvL0S}=~Cm+4$<<Ah3b-=!V}dl}cC`F>_<XS^<|84=uA) -)0IF4dxH54%)_YYFt*aAN<6HAnqDt1lYIro`h?#%B-_m5xyZ(MPt1sG+0P@uwmn9W#*z2@eE0(%|j5} -58JF$blYGbHNE}p_+LuX3vL&4fceQpPi~))Vq_+4zy!9T6T@|%-U=V{(`YM-95<JXlbzVUrDtb*8gh# -J>2PLV$Mo_U!3LtEy}_d+t+J%is_*?#SVh#J<4KVoKfJVMPkB`AM+Fz$_R~^`k<SLptze52@`4mT=Zb -KWR*!I?p{hcITvdztVJ6H`-beoiOD#P=<2GMHxG@=6Z^?VF;7V)!uuj@TzGS(vC@$0>8cdJS$H%~jHk -v%w1$pj`dT|ub>9<I+z;=lgr<h%8Xge2BECr{#p7Or%-j~J6vFGu4u>7dCdXW+=bLt%5@OrT9fBO|G^ -|>ag2BW8?^V4s)y9KBa2N{R8F;#xcB-7OTwABQ;DO2zo2q|1E+mZd)ge)#og^iq{f&QP;R70~=3qeKo -?-dZV_?-J2P)h>@6aWAK2ml;P_EvU@@7Q?_005jL001EX003}la4%nWWo~3|axZXsaA9(DX>MmPUtei -%X>?y-E^v9RS#5LMHWL2MUx6qyC%d6lC%v2Lc;ZYInYMM6B~_B^<}x`NA|Z(hNw9pet;_kp-?ISU#aw -$c=gBz40@z*b%d-pkB@3jR`GQ6Jh{uT+ZU@occxk+3BN^>uZ@Wv`k#o%6oSy!0^5*o-8^-25^Vw>^Zk -(&ki-lS|7jfVvi6=wmC2S{RvEH+7%)?Z;Cfme9Fu7sQj>lVJvQ#o2?pY+_1RLZ!<z5KM;KP{%v9vbbf -l(qi=_8K?mb;86iF7;;j?9%#7KkwADM{RTzDU?nx`QsPx6JqSj+G!+aG!Z0_z6}_u}3f6$t-2DNYdDI -h>M9uj-R<&k79xE1zs+N7$|!r#5PNC4${>m19}_!U#P=H+1mG#oe3_kN9@;G3UWeZM})Kwr}<vSED^p ->JUnQxPF!iI)<6!JL}c1DH<pt9xRXKiJTTQJi$jPNt~#`Y>6FaR!bvqB+OUznFCTG4hz(tj&Xt@g2d* -&7*YZKALutQ<GKI!k6Y@q>IXRz7b{t1olijuTARe~nwR6R!MUo;CJUAkfu@c%o??5YYZL#I-a&<RcSZ -usx^Tq7f@r8B4dc!5gJ(JyySJ$)K6~l_faJu@yW|wR@{lI=6PcO*g)^GELwOq2<f{kzHld*MSvhj2@x -xE-quh@I+oX%EkGQJtFz;-oLB6DVA3;Qm?<i=Wzu0a^SA5X@s4<@@DucpNH5^RTTK3uHEqua@F!REJ% -`D|%Hg$ppAj;EIk$gys$=?W);WKfy)D~4=&J)BIGxZy3%uuwXVX7dk=@zwQ;UC$;L7KraHXg7R6v9z% -12g=0BaC~F3i{Z`i%2NAg;ImK*a}DpVEk%OFA^we4<JpvKGn!3T3k=CNtJz{zZoV5YEt3rw<0Tp9axs -GdGA#DY6dUZETAB|ToiqoJ(mPm0XSrQkl|C2NZ~|^i+Fo}hIoGglB&}_;bJpwij1p}M_&H%C9|?|#p> -PWX($7tF{%*Wb2cdWp4swYVTY)b@fN$gc|M_DWlnVz6dZZa5I~8#VKtQ7KD2gR_cBG{f3lOmydKy|!8 -YNy3VQ-<R$sUq{iu*L?I{lCnzIgh6&mE^^Xj0Y?ngL`eQDU*pd>-Tc5de$w4_w$CAgWT+WP6z*@54Uw -R%jIP1&>36WBkaHJ<#$A01#`7*6l~)0-icMBG!b!DWq#I!6*tvEFV0V90hb-$2?YW?d0A|cRW?9knUs -{@JZv0KnMrQB?1^@;F7;5u$b@R>u_Kg*Fqy1ClR!g_LFeIde?wT0NS05efLF=9YJHNAX^j`W#}AEaJ; -~{zwf<GxSwg<erK|`+;!<pLcDv?yT3<WSZAJ}vMhp@wEIkHe|8V{?!9Rg!-)rHbN^n0aX}r1?mZK}p! -$;-RCU-H#p~I9|5g9(ob-(?Jw32(h_>x__e=sjc`9LS6)K{|t}?o5XuJiuqIQH^*n{d{mdX>@@<GI@c -5YkAI*;SCGs9r`*~F+6krxf@2NAk59#mnC$OIOXMNy!+AMJRe_q;4pu5cD?%S%hEC2D|7rp-rs?=gGD -dS(y5+r$?=&38vGr1Wq4Qq4s;X?nEN6TOpnKzb!(pxke3OX&II<2*t07(tbeGOEe-@>ZO`A&Q;6V;}p -9)Hhk*q+e==K3?=cX}&rfk#l6tvc<^bt1t<o^!E&g$1?8nwU2tO%PJg0agNHqIe|lb9+K1dIz3p(1Ci -vV9o+KtE<8!$gJ^hHi@^TB`)_Y3GcUb3NikC`{%8N~EJk3}L$m*v{#y$GQjfQRK31_r#pgmKnV%+DrT -c?er05<HR}?QsV`&-6bx+(g2Uv)*57eT(qTY-V&Lk9^=zdZh5=pKaD*%K7G#(b>sJT+Ma1Ea34N{@!0 -q*W_Kx*$28HmCS@I7oE<Y+_rk?teULEEu69>f#ve%y(WJ;t6whg3YJ8cE_rMaBuT1rV%&k2)H)0sc%P -j;==Kv~GrqD0}qK(r`bKxjrho@<`4D+04g`nM_9<V?-6HGdNZ<f6pY@C(moGMz9txbxn>8G@uy9l}MG -=%ap5RKQT_)KgO?K;weZifw$9Z&G2aY9!((-QSn&wL^KgRkV(oU=HkjDMzO*RL5FyXmI1p>G!vBf0<o -ydh$l|9Pjz}b`3P}j`IA~f@HKMj($lCr3bqaaj!G-6UeHHS8vK)TK3A_PgsvRi!3y>WTsqmt5~yF7r7 -J*MOA%ECNRk>8JF=5LLxJ9a2f(3f0}h!LjQ$~FIg4*(EEK!CD`ug{XX<JbARM9r`}1gEw&ipof-cL!n -lL_ZQ0iv@5=&weKs#E8`6nhrtzmfw(^#fc8Rb6K>E+Umio#1<qVBFHnj|8%^QAU%x>w8<nv^{U-Sc?L -O-fA!2r#$ADFrv3VND`6%n(P^F;^o8YDcuey|p?iE-xs6Ck_=4-}_Qo{z9l*pKvDtvIEb-61Lpjm)w< -^;5cGVNesqKYc^u5OeR~eRqT~174qnaqXt=}0HIn{s;7jQs|@}CNa%usc7Vj#UbvA*)%@|9!l!_Lmhl --mR1dwdIdo!K4Pzve%BTn7pAkkWDqMzZn_i^|KLHUDNa<dU&?zw6F0`<ZsP5&$HBa&vJ1PmPC+U5qWd -o(%^B^CPZq)#qJ@*>BUbVR7oceK}c^js-)lcy8^b<QjXMLxSRt;Iz?>~R-T9i}uF`s+pfs9^@cKq>x4 -GHQY7P#O0RIWWXY6gNeziAvC!d59@+s{mEQ?uwZ`<{KR#;K>)_3F&2Q~6We2VW6SLN6SY)T6J|{tP}# -FFfjheLnyCB7W`<sFCLB(Rbm)u|o6kfg<@|UUZ~2+<3xw(aI=h$Ir*m$f(q$a8y^lMtuHYveza%H49^ -5cx<%KMh)WYAKBltki9v5^8<VR*R#{VvD?+CS6fP}+S2M)tCp?`rfoS`f}R=(phc=Tt^7fYy^Yeq*$% -eBt1?}G+6LV72T0m?II2p{0j_v{k(=M;H1Xt!NWXBjX1LQyb_hOl8m`D5-`ci`F9KekLQlP{fYtx9`# -Wmg$-~IjEwV{`L~G-i1lbr9>VE2ysjfm^XcK591gtdMq~_ZQLSe)IU0!SBp-8=;CA6?|=sD6Y_05Mi3 -W&*W^<crnt(d5;v%=S6AK2%gIYV@LX$@7Y9W+79^97}`6sG5^H3+p)T$_!)G+1;Qm1diC(*Q`6x2-jI -zC7|+b%O9bUD#!~4-y0L);l;>k6z#?CAYp@qc1(mQ~&V%=f&|m-Sw%(UhDbC-1Bpv7bWk{@Fu(dF=yq -4^TG+=U~C))DSLI^X=PN7?(iZ6@O_p3A9XulLy#Qxdu`aL=mmOIlp<v-icaTZjBc*{OegTUYVa%4Qgz -P_V$tLNEcVpCw#j+xTawZ1CR3S?!;<35M5varr0B-47&dyHl8B32@lDNR`5i>*z8GApyS8xO*C;Usa5 -21+D>;&W7L?jtQS)64#-S_duLJLW>3k`Ot#gu*tgta`n5T9AiFD|%1I2J23rDzh4Xft4piE`MIxyZaE -SHx}dPVT}v(Tx=(UAJ#YM9nO)#F|{j!UhmTYV1)T1Ba7%;XKS72=**3DQ&D8_H(0LB2%i?04_TTjd6A -sh$VB*B4EDNtB6tx?IUGqFnily4&gyE@%tkWJsO|aiyP44%jcmRy-Ah<rgnn$#SGP)tujv9m_0IXD`M -Lh16h_znGQQzoT1zIjDsieb=PXupz6u%hj{3_*TzdVHP9}LTmKn+AG=daBn-5oOa5$bt0PUutCdGsXD -dd#j%)h&{ghzVdoDAC0Y8_r$WPB8u&I=cvbF}fBdm|V(W(;-JVnnGRjSx$1$&VMNzj*ckSEyZ6kjls! -t@isO%1Q6tH9aHQb>GBiyZup{T>nPCV7^s}9v->JgyOeLrbX*3#WKso}<ZvQdY4{m7sB1MfbbU&BlKh -B4j7IH?B;QNl8e1O7#555T8MgZgwpgz~lo#Mr1JH9zVJMEZj#vqY7zZ%p}3Jk;-TjSXRjlIMzbwrzR5 -Zd`rEEl07prGDL}S2P=!fnq{E+S21^xiQK@ryk`8eZ>J?^#ljhqRA;I=t;KQIh}DAi$FdI9g|5#jC|a -&ZF;h3(>ij5{xl3L*mdtG+iwJV5>pFWj?`Q|Oma#iP*MUYJK$wSOk+}|D;=|NTQ8lp9{7ONP>YUgmrt -w>s(L@jDK8l!=wxoqf6SXtZ|xzJ_WEI>)d;N`eGni^^%$!Lip>CGHHxz&&yCtZMG<kmx|vwr*fdO3^% --^n)3Ak0T>=0;T}27xB|%bqbyp)qfHW%;fr6y9%j;@l6uwM5;H67TzuDsW?H0$^J&n~!`Y(d)wrU~DZ -*3B=fjX99I%<K*JO>P`4JF0Iqzg!_7LHsHj5OT?<f!Z=o83`?BP+njWer7Ca(9{L_YUvr%>Jb-u@6Hj -pSWuzd;*V7nmOGSCP};hNDliCmBBZy1nvmhJUN#KxjF1g%~772pN#(iP)h>@6aWAK2ml;P_Evp)eKT? -h005^M001BW003}la4%nWWo~3|axZXsaA9(DX>MmPVPkY@Z*FrgaCz-nTW{Pp7Ji>!!OB1_dB>AD$wM -)XjWrS%EwFG?Bu!8lhK3_iGpu!sNZB5^{_p#pLtV$?#CgcW0xQ57iR3vvm+xH2><JlJUF2p~ZYGnYDl -#!sw~;D&Q0S~IDl6W}%BZt;xLH<Powf_2BAtp#m8pzW94<Fusmh-wlS!0HW5n-yy7@hi)O;fFc%H|<p -DJ0FsuD?2iIO&GMVSg)2$h?<Qo^p)Mo7FA;2|QJrYgpJq-Gs2eu-5g!cgbhhM{j%noLEe?7E0Uq6ys2 -^f=k00xTQZLtE)Al$ExdNw<tx%!pJjQzedvi~J$uhXj!CSo|VWqlS{vOeYyMgt_cMDxHYDutO&O96gm -Xb!rVbj|B5uPNT(RQ9e|)+TvyFDsNeKQ<c<k!PwIcf3J0*D3*V>PRKy5OBl!MOc`<Wtf(z9Rn`l7&3S -;;9%$PlfS%JdEpEuo0!S$$EiHHt;Xq(ms-f#e2Jg*A+`jCF2}zPk8?8fvQ7CN)!1{SG2IQ|QB|JL!GA -uy{Nad?BJ|V3nRX^7nC}O^}Mq1_~g(+2}6CF`h)LAZc&id)RgoUiSwL7qTtty>tSS(|!70g~lIR(O%8 -N-BDxH(!Eh#!tczJ-;YjvO#eJeC<20(+G+@}zC0z02=g2R2CQWot~?1bTR*?b@f05bVEd%&5pRxO0ao -4I&ZI?Y3)-m};vknTl(f)@mli8Cw;O-H6(#q)x@n8nWX(79<Cg%{kx97q*hQ!JZij2H(79YgA{c%2aM -=+tVit;RiFP^VzM0Fls*UF_qUDu=J^@Vjr(2m;urus}VXi{8VPkShBa~@U!*l?c(`m&<AEN!K27kSR} -r8{_IqopL#nujZ6zSt!KH+2W(&z5(eD<A-N`_iHoDDn9XLFGsn^?=X)<-yb>>7z7n)6e!W2KiNh0df$ -=E~Ou;Vax66?W8}~QLHK}GUE?SRYc5ujwYZZR33#*JjPHtOp7zH+gf@vvwh+6V+CaWvs@-#1xnE`W;h -11DA?yNnr+)zYGq^Icvu2e~M9;I~*Ub+Ee{2&*)%^Cx4S#$p!`AQoO=}+)Av?>x&)RlOvO;lhYxBH!q -pSb*Tr~oiMwkf4R+P?gfmA<0H4x|ls2)>8vPgw2kM4UzFTpZ00k6MILG$3n3jAd<=e;}(BV0LgoLt(6 -=N6-edMU_HDK|Vnq(J@T7mCT#!(xnmDSynEQTe&g~eKXglmrP!%@HR_BTCxyDHA+4_ySDB0O#F%67K^ -bCiv{icxrS89rmY*aH3<khx1nsSOe{J|ml3%~lGlYsZsj6JEL>VQNHcA+WgSc%ft7&_uRpv!S&+c={` -R+z_-G>O4KnL4AsaD}JT);+26E(*>b}ffe6mz#Cf;-L+pyPDZ7k6wIwkLSq^75B=pbGb!-wKZZElcj5 -v!}3(ltB{;SsEhg%5MB@?)>kt2Nq;#bVkT|B%+mT&UYJ)seP>P~oIsEDjDxX&^${qMEwGfwi4HlQu<X -iU13H!nWew2BnMpBvoA#1Rzu|%E7^%#}4=A-kaLkB2$%zR*5CVm=p1Sv1rBXtU=oxvf9Gd$X-MJd@na -g4oJkTV;oEcO}&^q_Lyo+02?^F{Zdp9eA76OKT1>;QC4VZZl_{X)ac(J4y79Mlu-ys=SZrHsJExver{ -VGPMikqxwiUR5e#c;<Da38gO4L=R0FBs67e_f0e>^96NVk@26y-@9ERwZTE~H$(6(+M-3Ao{)6q8UKN -L-4;(7?~AUm1WEsPDr;-lNZwPhP_)tVq;MkO6lwxK^eJ^w5Gc>13|&mgOGNzAn(k5(QEd6ee;{ryop_ -Bz(rC!>+~a4GkJ57r60Db=yJs&wp~9En%rxi}KfUq5@mVzgM6YpkBW6ff|1G(CD`{fS)z+-oS47ficr -og3=LhRR@Oioa0h)LM_TobO?#Z5!#?a|bp?j9_7r)7J9ZS)X<vc#EOnBEsoD+%u#RY=~EXN5iyL8U_X -&bWQXfA~jTwk7M~S@%~De9}1tu`$sgY1-`c|;*Hl66K<KoTFDp?N2GTAAdjqYtY|7E*&`Tt<7Gwt;DC -Nc>_?VD=z+eDC<dItT;S%LuUU@H+$&kdNFtn^JCu$L2u2~(eUlL%i-&<(*<`&{yM4aJvNYKnw&nO#yY -|#Wv+|r7#%32wyN0@vK7>Zy1WsMlaP<3=Rp=~EqZf16!YCBs9V^-fWrpKSW_+i6JA2_@O~rM<cAz)10 -MA|a2g6df9W|ZRhKIqV$@u3;n^S)K$RX4+8QV)I-C{oQ(V>(%j+fE%rJDexj=_Pq4PXy0Z@CA%wsn%> -toj(LxEF8&U9_AoiJ+r?qMQ#_(PO4Nhtu7|iPvj(*9!APb<ererK!7ZQ87JrC3V>lvCtUy9&R!|UY8P -G?xS`&raKoESwEmuLE(iH<|?QAE8hK(?<iC}YL&TA`uuOs=;%u8vFB~|%J1p$trLy9j(TdSCq^b2)!n -`!<ld?8H3<b+FF8-SyS_ur#0mpRq9dF~V2?=F+yS?xUz?`k9ko`3NY`?G-xAAGJh{eptG}tp{+QaI@$ -uuz{@fN^X7n8@?qKaxDy2h4S0Mi<D&#lRFsB~9p8mgb2?sigUg(*4cU=~^Z;lvz@7$dZsDz2;P%}(W+ -o$h?yN>T%bV=qODopn1h;jJt?A=dv0xfagUg}iajWC;RS)>LFlFZJLVUo$exBtIjbomtwZyG<*ZCEg; -%dN>yy3tiee<$^ayOMgGa;#d=WzY^iU!!I9d%8D_zsG4FTtWx^-85aYpV~J?+R?Yh$|wH?P)h>@6aWA -K2ml;P_ErvvC?_Eg002ug0018V003}la4%nWWo~3|axZXsaA9(DX>MmPV{dJ3Z*DGddCePXciT4dyMF -~rztm(bQiqSkTE}kMI4^lG+4wc?_H89qrbx)*npa6kwi>y=eP;k307*%9+C9|R76-swm>J9r(Ou$1K@ -f#jyxf^4Q9vvwN+|JyI7%3Kp223+k7<(T;5XFw0*_JmgO{=vvBTv!ifK4z_KkRQ{3xaPDAv0+qs$8mw -E6SS&dx4LBN&L-j3#8B(&^kM^gd2#ntD-~5)*)4ctiZ?jwYsKr<6Fpou(wTVHpfLl-yBb1J4PyeSewF -XEQG)HvHog)7W<Cj#wBkV>`h)V<CBehrmbEw0ATSh&V@L5b2seT~L)PHnSNC>?N7doM|uQc>XmHVl!o -S!jKE31ai5EAc_MTvi=UAW|D9o(8P1dG)jV$=zY#y|Jn-~y#ZC9W?#;(TO=Pt0n=0b4N#7T6l1C50d{ -W+7{iF!4A?vc*jUUqGNPGK`Jy<9ZW22PkX6qW>pAV>``LBQE@gL7a!YL2MJ-T?<&Up_I1OxPoDJ1^dw -;n&JoVzmp)^GvJjTJ}axmxi{pU|Fk2~FBDw+*2mqrL3<I~wSn44Q6ms^)I69I)V`OKewdjIBhKKI<(2 -r9}pQwkdhi(TS_p`UW#xB!k3SX((y{A;ntm$>=Fc5pA!V&6*&;esY?%%X9&)pZ_<8B;&9*@khHaLX_% -pgJXGi5HJ&Eb!4+)0!wT`Wqm)rD1K*jqXBan2%rF+d=HpekLw{s{Uqy<xgm0C36TEG-av2x3^c!#?LO -s5O63)qJ(=j5ldR|z~)H^`(dLGf^uUp;W+U?KEjqURnT-h9p%}q0`{wb1FL)3Jvvcf$5y9Ddj~3JYIb -`H1Vk`4h&=s^Waf78|0?8+-sh&gQBatd372jZ<?Y)isW=gywvlu`sY1A|%4r_751&Fh@a`cRJVtara~ -&5?<Egua%j~Gd=(e779JNx)#{8ff3$}Fb(c{35bv}+!(lE9l*(9~X1LwVWaCmh5;-!gSO!Zqnwnj8?_ -K>A=eEAEag=~2Pco>z~6@MC->fru{g;h5jWB_SO)$0Zvu-`k7=BQpc;E$uH3a^HZD$~|xd995STmK80 -n<9w9SnudqS|9}y7&%f<)qPR+yg|p3rz<WuFgw-@71=uX?n=VQa(*o()%OS8Dj$l&J;~Vy=<NF5W7g~ -$qdapKwCfoSc}2=t0x+XkfPdxu2-DykL6JDSB+rHc4Y^#h8B7GwTC&{E6`~ySWU`rUNmNS@D(IFn{v0 -K)4r@|_$5JdfbS)d!jCy>nE2`kIEHXrm!Ph|*6OwtDdN*OIlib7kAixT~q+=L((~GU;T*6?LQFNva%q -kn$BHiQcDA>v}GGe>b@dDf5%CwNJk?$V?a<3=aVBZ{_58ZvOJc=YKROM9XJWBnK*o2(FJCDss6eBti& -ZoAE)`L8(l`xMAifpRb`es{^Y#BfML~Co()7RpXZ6Rk;D|C@VY`Fj?(Nxxk>n)&Sbjf5XK_x{9@5%kI -NYtR-Q~C4lVB*?@u|E6^IwR7?zh-xoo&8FlrRcFx?y71@`{Yy1bo|jwH1B!Lh0qNc$ycq{1D>iPsAu@ -hx`vc-)C{H?Sk;rg9B3A#_F8Lfr=~SUXKIF7Q(QU^G8OR@V6FG)=Y4RXp*3`$ukiQ2(d<l8BJo&Hk_~ -EWWZ;u|yp1q*5tOi!Z?YK?AF@`)Hre3!fL@I9SYfQ{B3GxJZ&!lYvxXMSe^EP%+2lH@^0QHgy9DZeY6 -rd-79BE)iNL<4B2RWBCncfhfVulobPJRD`iv3SfnqmSB>SU!9e1U_b1mjpWEHfjUZ?<b*Srr_a#H#LG -UG%Ez~d<7Zjv3xn7x;gwPbAVp)s`J_j6s{_~w0|{&~ZHbWUC-6Gg`@&nGy<nE}<77@b7!l0Pe1MzO98 -NT3|g0jf^qQW>$H#~Ry@XErjoH->mLjeKmb^6=f^0S_C%d=8MtY@wCSHA;4+W*#ssv|Z>c(e&QYpkp4 -5Rz3K0ID%g%qgD5u|NYW!^&Sj;Xl<Wld^vc~YQY)XiFqF~ms*Aq{rVc}68sM$FC_ey^mBb}WHO9-(-F -3n6%v5G0CC%#zBb<?3x^L{B~u!!3C4Ij_x-Wly+kXNFz*vx>ud0*gc;;Hc_E=K)TSXag8k4!I?1fY=? -v=m8m(eA9&y_V>zx)kHk2fy-<Pw9r=yWI#CcRjSj#;>#vJr(?otI0c^1$oaIEQFo}x1b{zTx{wBCLwI -kN&AJcgz^V}?Oa$xB&%*%4Y%A4ori4;N83YFQ|8z&8k0LH0uwOfb9^lIRWQv1;UG)uf;%8_A8mVj`uS -6-TMEtiT{5MBz<~aMG<Z*TLi^_Y$eG-{k1Bzw{pTLEkb*Mg<5ba90HxUk)4m`s3>#s@zH-a(~~K{t+E -tzu0~nk(s@qWY65=QOepQZuWKxB4sATcPSo^PC()C5QVWzr=-##*QWv69K#5#J^QEmEHIzBn$a))Q!A -DIj=vDY0?~m8&mdlk^Luk$iDZxhKYokaGVjh?_@yl4p-#1fl$d2tfB=X18@31X1wb&NfH_6X@KB%u0x -^Hvrh}CB+-I-I^>rx`M8J|rL%*J@2XKw?L<U{d98P|%VmVQ~)Q#rF^>ed^tGWk<ii&sp^b(;!CN!vP- -IJ3Ov)eNdx|$*PXKO7&{0tN|>$n!G*<OnrbhAcAzQ@G_H<AS#Pa(sGL(unI5Qrp$zz<87DuDY1Kj-T^ -qVuw*h5Kj-HdJxxy+dP0{$cxbdXXexLy#yeXafP;16$*rj0?VoR{<H1KuupzStA)gLY61E1n0TQEv}x -u>p%P0fA-mWHm$hGS9wOM^88KlW-k#hkMl+UAx}|+e3aL)NBImV-Q+jyE4_wqQ?uu=&3<#$JLn&sz&{ -H>Pj(_sS9YWp=^eDl(TVthfljCM80P}J1=sp>o>e&3U+Gbtu}Arnyupnb@%iQHlG@4H(1pVfi%=6mu$ -ycKu%TOkTze@1P??@LWWU)<aU@h6>JkjI-z9v^ATV9GOn0jm_y{Je9IEUMuE+=hvuK_ONT1L5!a1XvN -F0(<%<?!y=Y=>5W}M>?`~B>f6&7ST*gxlsw#baUH_0vhSeE^2HtPpLA2Q8U|7Eprb~=49N6-jF1_t}> -^PU}N4mLXQeBUdcu#QHIzegc0s_wr*3`5gMNp=SS5nNyIUF}_8WAXuC34F~Ij!pPAmBq^k-ISj}*HGy -wpl(mCJ+LpIi;dq=)cfpXHvGyzQoY09^Yd5!F)uUaYddmdY^7e|k%l%M9hJKTddd$CaG*Znjbm|5pf6 -nPN18&kP1Tb_Y0N{IPG}H8X7}#u;|GE$3BOBpM<)=<Z!&la#^=zjk$G3JC)U8e-)6`{JRp3+=)L+@9R -Z-By;J6%edPC{!f8bCD49`mYLi()r?0dbV{zJVw{JW)n@=Dr2kjzMOW*FiTTeSHo=@BM89^8q<FpMV) -EB1A1#P)w8lw4NS4PsRcJ)S6BOJ3QKJ1fVn7L5Le7^PKt4J3p8rs0M<D{~6hOS|+LBkfQK+<rslw{Sz -1tEro>!o;k*?5@L6k9M>s;4pe&cbiK5>zbQ0v``kOaThsxCz2Rk+H_t+2G4iECfn1T`T4A^C_gC5@cG -hogRODz<R^>b*)v|9{lX%ct|foS8p2R?H;aG)F}iXIJEq^OUJz1^J)!BEYyFV0a;xmL&i7jkGEMX=li -8z5CnHd3@VE9N$zr0J9GkCgdnc1_n<0GZg(|ZiUM6KR|M5A#c%TnCyGtU5+SUB<=tqJJR{SzdST0F67 -_ag+5fssC@l7{&!)bz=oa0rLfhmHl%FD8aFykqun8sh$x;ZJT15h*+>8Qg<%lS~F)Ldc%$lQ3LY7vtS -qXPpQkMlvgzzN<DV3Bf*RCE%n_r%M8g0I$LVK6+S|FNEg%T3Ko<!`DJSsxwJ@f2zvJ3&GHKA=6;&~eu -nF%gwSaAc}Xi34;1@XPmYrp87^iIn6-6Br`L}wb=m(avX#3Cp1m7ZsQb{o<}(WOe4U;_7~-3AT9*$+| -Wx4D-{wFuJb^M8=TI5Qg1GtTMxYRY1xZ=4U?!?vOFFi&aH$4Y~IZ>OH~dd_A|JY=XZPwhD-SD*2{MSu -7iGo$Yy0g_M(VP{dwD$>5cEIK1RUZ9aH%J3GL4SowdiOt~b{${Em{szc)JF9N*1!kX^n|<lF4tO$RRG -Hv&k57hH@91#VJ?Rat?(xgYvR=co?hBZTYX`^J-|Y?E)d3_r-O=W?ihyp!&=HHb9FYV0UMkJaB4!H0M -)AaUZj1Y>StGb<E}*8#0(~BD2a~f`q}MxKKRw6zEtw>d?SgBt@;0orK%aUE41wZth9m_<AZj}^aeujD -3xh5wXXu`<x|joFN4z`2zt|c-7}d1e7b-pH+Uq@J9dukETIvSsvw2aSlC<&=R;tTZ>ZYI}f@p3O*j^~ -ER=4;?Xv|jlD=OG4X})8JSbHZl_Cd$u6|wL?it6*>)C^%y7gSc@`8NY|%<W@f4)2EZPRH(=!#Or;M_) -Rv<AaC6uP|X~85IF*603lLZT=1^wu*53l(EUFRux+H(?;w=tFmZc)#ufRH*&Z_g>KNNFcqLv(MhlMFt -pAqJ6CZhej6}*Q`Q`jctFBwSpM}|M-PT7;x2j&&$l5pTOZc|hmAq4J^1x}myDiQk^DBN$ujTnG~*cZ; -*d`~8~nNpII2jdiG73D>DM6G#r64|GYqWN-7@M`CY&f`67kcIABc|OzRhEP8$v!2hk%i%qWN(c=BFd% -8s_E2<x5N#KnLCgN=&vCUXtZX{FuFp-WPWm>X%V+4&G3}=kN>!|0f8#>E?LOQbFKtb`z@lqVg%o#ijE -a>NldpQRzWF1u?&^-iSAAOf>Yjo{FDech70?k^pPJD=Z^lRcqC)xU2W%bG#xAyvj2%B`e&DRJ~oFqs; -TW0%;}T+lsb&FP~>`JLAdR^O+a&b|9i1a6}8<j$Po(wFRVvwbIbA7T7t%u7Ecs9*jV?89G#7v_v7FT= -*1y%-9+2{2Ne90|XQR000O897^_9<bt{tQ^)`Sy=(&j9RL6TaA|NaUv_0~WN&gWaCvZHa&u{JXD?%Ka -%C=XdF;LYW822jApE=j3WUBpkv2tJc9JHF<yMyEL|5DLNlKGEvPwcEC?O^R1^_Lyj_+^3`Pxq`NJ@74 -KJ8mJwMbxhc6WAncD{Dz&c>Z+m={TJw%E9{u`w?4Dg2&Hl3|tRSsA6%Szc7pDEV!kY{-wiRNtz_EX^* -t7JpY2+8Ysk_OeBnzU;@7NqjL$_}BMImK1T77yR=@T2}n+RXj~br}LRAc!JGlL;XvNohI+A!z1}_O8= -Nam-*{3MvxuuS$r{6-P(J)--X|0Rm8(;np9W$h|46|e5wi^z;`u5D2XGKU&9>GB;T*&B7;{N7lp=8xh -QLh>{*>StYGwj42?zTOmYzq-&$x*1Vlb#OsTqQl}s;_3Lx<N@jM$=c|OrIbzQ_WsastYNj$P9<@iMoj -nKPUTwP7l3-#tT{FK@6&8u|cPGkRhI?ngw;guk||6_KM&$Cf7vLE(`c{WZj`{PM`S;{lS0Q4v6Gama@ --Y??pGEwi7av0B&evw=z@A*xCcoi4w^+h>}%PaW-aADjs!7q+~e3?x1C@!PEd{>J=x~5+{Pq<K#%qD> -IQU7AmpCz+z^it_1?}y3ES^9V7O*{-fE|PLSsY-*$qD+qYSvTt2KYvQAtE2I_Oe%%wEFI>fL{*(FW>6 -ZjBri5L`Y-o>?jOE7jdpQS^``OrGW|!g0m$s*8rk91e}><?QLooKhk|W*+l?+3RZ?~~U{BwP_F>f)>E -#tn=dcq!eDL7W*24!6A4bsG`6N2+MK6cn&r?{xSon2POw+Q2p+;#LT_r_wv4}2VYN}+^jmAZiMEN+vN -xFnKD?o9!h+vVHP$9pl;uJRpz=>(IVA<*l0G0W;f*q4U@e#~QnGe$#AV#BnIG-k26(e$^aXLxLs9jw_ -U!vBD)M<67p-~dUy37Dx5~)|wH6S&g<L<*1MpM*<Lc_^?#QjhOCh0VlRuBN;qeQUt62^gj?MBmll#cO -lLW7&lFD5B2zdO+=MerB%3LcmEc$j2Z4@PqzHfNbkCI};i-qVOp52*~a13+eo+Dec`ZC_u}HnqkBs2b -0Ku#{KHhz6Yl>Zr|Mfs!yBtT2X+m0#oDhFv#GX=(1z1fIg%_#%Io(4ctUv%G>Hb5C$KW@eJ*Re1#zI= -Vo-Gxnf)z;$emtH55A6|965CIXi%?FVnXJ?_L02hqvV^V6U9jt`>4lj!yF(cccA9XyL#dnfR_)s22SJ -pJM5$I}Q(9Phn4{Uthj9__vQCHm{(t7nMugP&g?ADo;-N5|3O%hxXs51w_S!&mz+etdTL>ig&^)O>Yx -8ofAtd3Xw7Pmicc0d{x*^_~Nemj}oDKfr^%r-v^NPk-q~&ks*uA=Kvpb}xFpcYJ!d|Kp3j<LLE|$FGl -04xkIq0Pw5BSI>{3or9MLuTEh^&@w!Y4*mu|qmv)@Uc8{@_I`vh98(|nk6!<BeE9tjr_m2bFP<I1!>0 -$(yS=9`4!E&bzu-=Mv3K~g8$H{5x%d46)jI+>$5c>y_|p#u^axtqga7tV5073UZuXB}ogTwa#Lel^@u -{x-)8WZMH`+TsJVC@fKR$v65V26_h`>P2R|gCSk&ZnF7<zV~5RT=?lLOPAX9s&P0NM#wx2F;(cVi<R6 -E%7V>lju*Kh4H@^aKdcqi*y~XNL%E_-q>DX))^03Ov=S#YQqIlbsDduz}E*egTGspHVV~0|sbI)$g}q -w~f05y<<w?2VeC1_yXu4{@L&Vz{#oWrx~tg;4Py38rYHDS9z9r@QS1YK&oJ`-yZ>m>G#h}JMb(6o~7S -M%4;6CRh^Cx5B4_x0W9)}@zk8cVGP}J4^Zh!tJPvoDjF7fS#Al^Bd(QRq?5E-L|k!R2o;5`st=QBoW# -&7Y~boD2KFH3ZO+}9BylMl9q@(4B59x(Jzc<nstQ58izjmcK(rUAhuazusncREOaRc@GBHgK;|v-D<_ -g&zYG+oY&^u|Qq^`O{871$MNj}3ffglpi0^$z+=<#%JMT3EGR(+sP{k?1ie8pQJ$b$jAMC@UwxKTJ#- -cu`wWjRlxJ6}IyJiue<Us4n>>-oHd6E2?<FUvCpL`@y+IKL%O>I9IKMLRTYI|FER5GC(tP)ePZ8T1kc -i3d*Vlszg2NIlihmvJ?`dY%?#HTX`No5Hb)M<-OTVFb={IKI?Wz`zEB=P_&?7;KhDlN@-af{wo&F%BK -tdf0o^+ZM<d$yNLgP_7pf^HRt$^hdyb!Ln^R%}I$cf}u3dwE)3)jGf)+tly`u!yg#@Bp*T-+noqV1sp -K&v<Lg4s7gdmyVY-X&V{FgX&7lBYOyzWK);5fy>bQ}Zg;G`G)m*krk&)D8B1n4EUTdm7}@#$6lOdHj! -Iesf<t{9K`(&g&UnG^MudM;Yo5{Sk%5e?%0>XF*CM(B)7l3TnoMWaqW?TE;LWIB6iVQ3PWp3V4_B84Y -^0YN?jhv3mzC5b76u*Ix)ST)wit(N;PQougZ10T>FiI+t8@&*P?CyWi8mo&{bGKJl^H>1-;}!aXIoMt -ml-hlg#ghP0A;m;z~GAm3IS+n-1A$*vd51w3Fu#Fxr+3u4ksyz;FM(99!|<mwDlyyqsg31cJol8=Z@G -t!SFppZsS|CSDxwhU$#-+^^P0!+N1Vu<Ord^AURaTpQa_z_Ku;=Ywx5GxmIHrf~%;o42p+cVh4y==2# ->^S8Z~O)Yl@^I4@8y!6H*2nJz^K4%b?o?vU2m=AUUufOC<gYF*d8@cPQf8f=kV00Z4m+(XPAP9yzUXA -BBys){uNX`VV8J00MY><VOZIJj_#K%d-dx^v4Y-Yxql{Ze=)o(JUG=`=1(zkvBD;M)j~ZwvErRS{>3E -v8kit3h)6dC-VGgNGo_71u?I`VSE8BW@6v2jK_0vbnnn4I<l_K<|Nc!=uNK=^-q1`T^f-Jzq-xSC2sT -ABy*(yumWaka<zSo|pi03M51LqDZxedbJ1|BiY|9%$3K5)1`P`<y+D(szRFw=o8ARq&cjlJJ<yhxK)Q -qFH;;$5^TSRy8xRSY<R@4j8G;Q_VvD^bvOeE5izd-s-8pD0r9Nrg;e4<J?7=1iyDs}i`)#_J{bg%=I3 -t0ygaxu<FdUT)ADd_hUL*(%*vNHVpP7mDU<T`+6>B{;MBB^Xq?G5ahj+!-m#a9cUr5{^nlkW(3?qqfw -~hdoEbKhS2f6{=0vgp4>~;uqGEN`;jX*WQ^!1Z*j{@#>+v(L`G<5_dezY95FfMxt+1Vz^-^!OTO!x%3 --t3&bd`=0ZAW0`1@wO6DZyn({qicGPheFsI1P#gt?8%_+npc7`eaR>SW|k+RB#3@op*V8C)vCHySUJ0 -j;KyNp)wnUtBX9J>{#m?7BN0*+x1yBfy|_8nHb7ocQj9V-H%1bdff+(qKr{bdfgw!RdSgZ3woT7<`a5 -~a8Mzw;opl|JMd|BM09gl)z*#?{yJwnU!Ch;!ttxNdz1V+DcT)}(N0?(BD*e3tk%{&#gowVm49(>JNA -!g7vw{|lB`a-thL50NyPf;1bVwxPjz#E^|sYs7uI1@Q%0~7RT95po!ru8h6+1;A~V{Jauf{Sr3LizGO -60F*T1~pJ4O}a!7Ef+?!9>N)86qbR06g-8y$Nwh4#b6Je`c9Nm^FOd*C>5V-}b6qDrwr;!owYo1@kV_ -$@jlBC)J&^tm3A_P(kIgZ{t+m`_>7G*Kp?GB403A?QGrlKM5#2F1!)2TNr=jFnLm#=&2vseqiu@4Fix -H#Yj0%0hX%m?7fHBG>!ge!4+C#Nl){Ii|Ugl5CMlv#N{M&-0DfKx4!TWR)UQ<(X?NQpQf_@%cHov!@P -YuIU(6&(6-dv99;n0TeDm9bKaw8I_s~OE348En-PWkr1uwX|PPF^<crqzDjB7?DIICXtaiEw;V1JHs* -mc4gxGZj?OopA>VL<yZdI4xF-&f`EUqist$$*XTb^sbeEC^ena5vzTa}lUY|EM;>ip}rd=_S_u_Jxrv -3R0IILj|yZWB{f=D60*np!mtH{a=m1{=N-V0z<v+bTK#T72{(PF(yy5t7%7Nk~uu>J7SmtTGTr*FP(Z -CoYq<uUz%BWdsH{<DMU@x>6%>J|@6O2`oJQPGWAflAtoiKr@jzvgMyJ{z*e7OA+5SC_+sYe;91d3k-6 -R!KRFhsilm&OSVx0=-LtJw~>lj?5k75YU6AHGF$AM<I0qts?HD=uX7OU*MYaA~`es^SNR;4A?fBBf3b -~`eXs!ePlE}qXdLB;)X#o!YXXBA@hO~n23=k10R7?*1ihOzm;N`g!>APh6NPB1es+}V-}$D=D3q{Z4y -r}MsWm7c>*WL4pnYfqGY0hXh~*_#(i$pRVLnnLob8QqRAY@RWyF!`H1Hax5DC<L3Z+<*g23e;1|gJG* -TQ0nq3(p99+ewdu~OW*tyLvoJV3}0ckYPHgVR6^MV1);OLw{2jMl>t<tIP=6DJt%*SJPY&d*%(0_LL{ -5c68T;PyRqx(nC4kEN?et&S%C1YgtzkfVAh37BPPD%E}r!V$i{gr?~k*5czKOG#f3Gdax&!_YpO`HN3 -pYM|~^C)`$<E#DX@YTs7wDHsN-s{%~$6c#4FR`Jg2hqzT_<4Bn><jpaT0Jo7$n}L^;9?6Syv^(LVdrd -X`<$86S!`<dX)+rDpFIH56n?XP4m((nMAi^)6LggUYSq4rvZTdwWqC&0W_xLMdDR(4_$q}BzU}g9Rk3 -g%$ch$gBsX+MfOgJ1wUX{icGya9d!Pl;e#~Ag5i%DCMFBVls#PWRzTAPDTSc700@P(maSbbd0W#BwsM -Rn>B{z8=%?sK0VuGtd#EosbU2l;(jSbe`u<<ukzPdn;3+=6Xsr387lH)=Y^Yt}VU9_tUnKf8c&DHy*C -a(+**I&3_W_6J*DIrwvdNPOoIdfV#+j)3?j?nQ7N*VR_9fTC_Jc^su#YXTQ&S<E!VSGysCaaIlS<ze? -KV1BtQV%tKP|urY%4X<)%+gR~FjG{K+=uAUAQd@!%kX}s1Gh}FGPM+c^J+G)q-GnW3?RRAv_vZxgdX| -Dbx|}KCQPSMDn!dJ>LvBThes(HuSGnD=cE&YX@&zYuBt*#)RwaR1CvyHLka<S)zSU|3{FO%p9*21UtW -PxKGg5k&kbAjlcI9uYcHUFT#D|Ek0)N7<7_8#IrMHMQgK+1Ak0QL8pl;U*&*gnAFrfiu*4EqE%RLAvL -Y=%2xe6TM|nC$z3;3@Mk$Km2IVvvJg71n43O?At+g1snT5zu<?9^1J>X%DJc-@~=+&pS>&_{ime9s;= -;k&ODR9)F4UR{nzDDN&MOGw=s+D#*2ZktCjf}{@GB)^Uu@l|mjPK?IeHyTTs=+iHr|<g!mhE62@oZ2t -5WP(n*Lg8A8uA@uUXy7fO*q>Mu=#me0lij=4rt%P3i-R?MjJ)iy-|as`6XaL0?3hreMI<_a4_^7i)w* -jfUQ8Qvq<UO(&-c?7v^@dP>u~bv|U^yq$Z#S-iEV^rsXB9H#H#WoBmqTAw{e(o*_|d41yet4SBOIW!} -;A!O&pbL<Rw5U?_Bo;S&bv_Dl8;)O6VDOc;s35MiO;_!IZyEN%<qYB3d}#3D7^IMW4uk0U~m>aCOlRC -JuJKZ_NkFP7LoDVRiyZSQ+D2%+4u6OoJuY|Rb}dZ^*vsf&B$fYk>X#ozJVP5m0R@F)e{ZIO_p9?OI<& -Pfh3XQO*cj$0obU?0hP8-2ijeMB}Hx*C0ee?GQ9;PIH{ZTQjE1L}P2ei#BOy@#DQS<7oDiU@#TGFWgk -+KleP`B4K5+he=)@$Z&0aD)H#=Ygg8l{3K_DV#JtC8A*)c@Ki~Bt+(Ix#J4{?j*T$*!_e_49^y9Gnp? -q4nAOaK-TZ0@~z$Z*s9@1)1LLPvo;<8?vACW_~+t4VSs5+7tnzF7P@4P{*OX@cd+cxASRmw>*t`t7DR -v!Za&MmfM#3)UN(i#QQCJTz4I9vsrbz$5@6<nqR|{tsmOAVtc2qB;oz^m_jKR1wx_Ha7pT4ABa2SZ0+ -2!F+0N0^R>x-t&-Z?OaoYdshr`o@J_x4ACp3SE&*)9|rg~E_0)Yj%$mtRQaOlLUd*lTR!NNgf$K-?-! -af}lk<jebdJiJSC7!24&#?xrm1+qZ?F(NsXw$#c>42k6Vf&*U!61rsM1GWs_JA<}BUU--@(1r@WO#OV -T*miKV^uOW)9-Hd_;l~-6Jk-a<eIc7HjJNuHE6SLs&lr@j{iO8`FIz#TX@?98hVpmUZv5mZzrt|HVq> -@+k{t}-Dnfu;vaaAf1t?bx!+UhR>sW4ufSe_M3DepmJT5YL_P>(;N~({8m$}G8}Se8q-u5kn9&&_&Yn -lNbAcrc%gvk0JJEbLLYCE<GE(Xge`(u_E$0&Qlw}K#284nO7AG~B=)TC-?0IbgCBmmY6oH;G>VCqe_i -44(C21^stqYJRa>Yx#vutOi83~@U?@Bh-qthAhyTFdH5qXjbL9n?^93kBwAh#Jb1<{m6stt#WFM2oFE -&@TCWY)HfUhq>Fds&sBPwXx)CDh%zD-7pS=)RO~w-!lUz%sfQZQkF6fA#Yzh_6?n7o&L5>TCqzdaHH& -+i$<Uzy0w3qit)Q;zL}h_wk?Yhx+TIZQO^A8}USl{*wI`o>f)xzb_^j2{iuDa&re6I4p4APRb=7mg0* -7XE?6$E^LzDy3yUcEUUl0_LP8j+rOmAWK^OMD<(R+0)_S3`Ngj_AhZkM1*!d$-&U{k7q9n@yU{WI`{L ->G-u?mnlD{VhFArg8YW{lGC|d2#hmYUcxVJmKz)rIo568PsPdoNq46+)rd|$TB#Y_uD%)6k{v!+7u?P -BL%B{C~CRkJN&ensT78tQo#u5+X4^=^)oG4M9PrMgUrH88r!F|+g=bVc>d(s-bLgc)78(pcLR>z(wBj -!MPi0$@QN(XCjimAsErUmdj!VToqPttM`ow{I75x>q8a@c0n~dqv)+v!Bcf>S?&CNbL|?d0Kn;51yEQ -Q+N3IAO#LE^uxDwO@{O|<7%r&hI6`|;zFLr3%1}Npfj7px#}`+lVo-pUzFjujKTvt?s-9Z;!M+`V%9$ -hvqYwBIw7XRFK{P9XOAgbzqIHT!AUZjsPUHb3)<`IauA!X;?X<2x+LsPnvIh8HB=np(*x0e*XI#fW!B -$V^yp4Bjf=P5wVIfCBskXFMZ$N>v&kZYK2_wBGn`N76X0ClB~hE4OMvb2kVDl){;f~6=*4W|sSF@j$e -g;v<&r*9gPMOk7WnvGo{nHhqj@%pQ9x2=Q=ru}x8CZ6*RNrqgxC<?u)s5t-cE~#HKxQq?Sa#m#bi0O; -X*pI=$~Il=%Bhcz&qS`3iK9d0~4r(Q0-)wOwmi3IYHv{03gg^VSD7|!X6vedG#4dQt56qoAty)wB4z_ -uOX*x4XU@&GqvOMUC1@F<ja<0*uPVlp@pdFVm0cna?{T8YmIE}!p$F6B2X_~rs#dE({O?}%y$p<{@JK -)PoKess0gvHSpe_SGNr3jH1jT(!%j_;t=YVo;pIK%ns5;_2Z54~E#sh63WQ_JzbAno+o`^XCdPC~_#* -j{Wdm|Wo*)J81qWT_ed;aDH3gk$({0Ohd)FtKoDSw8n`2d7?+(lyiIjTRo8>d4^X=MfU(V6*IKGTg85 -K?Pd?s{~E(KIqMLxg0isX0ziX`K7d2v)C%?swIlB_PPX>*wU5R0POp$%2NZs~3(?<<^iDAD6CB<+s71 -9-aNm6>-u4tdJg-qA1Pw~2pwKWHZz^rGm;G8xY&G_xf7+7{wbIvytlZXU<Wj|!s-r9`WmG9An?v_p|~ -<vxSHN^h3M75WaOmnkkD5xj*fSV=lU0wJj-96On~oUm3E_bPrndvNYyS%Cf3h)l$Ev^!)sYKAD#qPx- -dgNI+D7^P@uyY<&ru#K0W)<&?Ym%gaRbg8X}^}A_Ze{IskeDzmo;X(BEmk<6LJ^bqHmkuQ(z@<MIXJ2 -hUe9*;e-RSGDzIyaE{C)WKH(x&b>dUXbwlq)&zs=Kk@dTF-ESM?ZXwgcMc4t6$Wr(iub9~e=@fIFG7Y -ai=XE?(n8@tyt`_6uAixi60upXW5oI9m0eo>XS9@(YwLVhFn>k&f${3%?v94`RIVlQAT30p@h@3uv&k -<ZAKRM92&mi&iF08C0xJs;iWB72j`%TNIVygn^^#^zCdX|qU(A`OwmPzU%%HQj8EQNEWe+-S_FU>_Qi -xV>q=F{VH=Xo~{95)Ps3^SK!Lgk&dnd|u>p;VJkjT6{}BJ~76C84gBQN#3WWxrZOP4hAeTkT<@i--`~ -%QOev%f^syvwp6(Wh%ySD>2j%m7|+n%A;7S?SNF(`Z7}fXT8#7fAxDbAz@K8+sm$uyXgWGQ*a<?@jsS -6V7nk#0g?df=!-o-SF_K~RopoRU1}N|h%Qoc8H%ZBi5ogA74jdV9q;i&EpcS_6$42}U(!qgT)DlVv$C -<g%rd$sY3Fhdd*|!G%3(Pw<kM}fj-+0S}Pe1auytn|qgJa~NXAnB3D<DGfT3Dw=lu$e$EGk*sle)A9v -lZF*VfyTf)F03S3QnWtLV*W$670}jY-9DAY-t|V*%Roqt&6O&QtG2skpTdX((+aiNV{3%6%+S(+G!fw -r)pIdNSms;1X6Sc)&o>zc#{{B4tjWx@7U;l+Pu$QV3xO}U)<1kztXO+Pm`PRxPV-Hg4ZSeJWH<ew>tL -t$oIkZfFG7SHFy0RGvcy^f6jJ%f4&+59YI{$wpC&RsaC|(J)nPw3){!LRCJF{*y!<FK_`8u%VYZB!_M -7+eb>@kn!SUQjflzX1v~^AF}e_AF`O2p{bDIxth=e{ZhV0uv)HafN8PAL_MXAObZ{`>U?k$NrLPEgtp -Fv~xg)p!!a^U+s5NqDvY1zsVW}89^vokDiNJu(qr3^o;iVgma?$1NvVW7PVF;b{s8g5IR7|!}z{B#6g -u!9Ya4bV~gACgkpn|MifKk%9c4=9}O3_FmXNnp~4@T|1tREX0jiYo2=#ef#QLnGg)7K7q9c+8b-{=ha -BIRM_ZYgV8@U9^@5&#fTAJ_eWVKrREC3#d@aM7_c&}o0?*L!3A3J-hfIJ;4((?KmuO{C;KeRrHGKb<{ -s-?)2M8DMV6%G!Y|lt7J3Feyk%qD?J6NFbO`7KY7rWM+}pD_8UO+L6=cs-E25w;F-tEf&YllGob^_CC -5@BTt!*V&jH`AF-XI{(>|=R2^3Cd`K~(x;UOByCRh{@#xITAl+ipBOJP+90xJ*XpVE|U@*>@L5Zoubo -)jWS;Ub&*m`7~DZ6S=v7vYff!ytIE1?jGd{vhphn|_A&}R`t;W0nD#;}PN!-Ia7$Uwno*JWnKJbsbrD -H`!LWgr>}Jf7s&9S02b1pzS_yrocyp&ftg$)-Skg{_Ujy4Yvp#$$a`Q`gdH?m{<)Z{tgrQ(~9hma|TA -+h&BP{%n!NGeg?~tsOm^YR2Ny@m%X6goUg*4VB_Crj~23Fv!^Zt+HC+9aGYUb|Y4gF^@jWXX1OS_6M& -)N0}tOB}B-sD8J*2xy-^-KS6kshA{9daqL(GeeX>RmhKWAg1gdOmzVPtLouQlN1+9@%!phz-J~+;stw -m{A`$5F$`R@m83H&{6L5tolTuwT-QOgJVEC^|f?m7M=DSSaA%`G~f}v;R&kIY*Sq(;{;AKGrrwS$BB* -BxgK<Gv+;&SL{Ii0G2bx!9<WU~p5(To_v)9GPYJp7%JTz4H4Qur=13iH>FoQ@czFrq|BafmDe8%kBOF -E`G;gzY2~A^JTfmi#YrI2RA?j~-gxDOjK_3BiPuO%>yB^2UhSnM|mcje#yZ7@-K5&r84^tShZ{a5bqG -+h#|sDNx)6p#xYq(}k4|=89C1EXaO@Xy7NR(H7J4u3_*xXdYyD{&ehaaK4OAm+j`6xFlK!^(4>V##c! -^VuOMTQIhCbf6?>sqM)!wC5B%}U^NYqnx_u$s(3fF$H8=yL6KQCp9bYhj7P_<3PYlzc7|Hvr$m-5!1~ -xAH3`zs*g9<)cw@)aYQ`%AJPQ_N>)@0{=T3lyPP2BHo3#}j28`WniZNU|aa{=)uqjg*Gt!b4w9(>TyX -ve8y$CFaN2Rb=aRp^l!OElkg2rzFpJwQb>K#KD3EETG^I54nv<;xh5tBW1Ei-xvTjM;SC6COHrJO;e$ -|;y>SX{oe18EHg<W&hvx$KG&3j`t5_nGsCI0m`*$`Kj)YDWpD1X7rHDbN%-Hst_OJh*;j<a9Zmxixm0 -%<yKyWIlzS<|Rk%RRJSwFxT;p<8_9ojmA4IvR~kH|K-d3&z|`;@K%(w3#?l@$RM!C5Na<-hOE3Rt2Qv -XcZ5|j5|6T(1Q>Fmo3>RY)UUYKGk~3r7iNJID@kk~E%nGb)>WU<vQKaO_|_Mb8hS{h#_~8y9rfOajvv -(IV5sP<x&qEOUXX1O#<a8ZuzqbYcq5ehiCyzS)#X09*!ed+a1NSp@UcDGy|>~Iyp?7KXMDQ*wxC;hPW -p-~|F=KQK>fU^AAt_kjdSiY3wNqs%UKAu6-O*KQ+w(ASp58oge>_f$qLAH2{{Qj3+G!OPpz`OxmnjS- -l?4saKJV;eVyRB&4ZP2b6Hi^fEq{2kahx{(C|K2*04tmghvR$e+8omD<0{NXj!#Ep6%fE)iVkO5eUKT -+PThF$oixonM~SBaKpP)MCivzF(Pa&KvCRF%<YzY;!aT_6X_LUdIr`|FTLAcZVv+54&PUYC3*^`Q|oQ -ZJI-5OyLih11@BmY>OfiH;88Pben!>9-e~0L9X#G9x7g0jQcIRjsh)GB`}@>plCfOEr(J2^m_!xuAgn -yBP3FDzXEQjHfrn7LX?{O#Zr7MseU-63sn%`YwdWP5GbZJ75@*5txNFa-2HQBZjCVV#h`C`6Fn-J?>D -xpMflkGNk$qM5($Xgk2JS800Z4oNM$o9nC&c$Y(L~|gbhX<^M&|nM?x$YARUp+B+}+?6+|Yg1WjAkwc -W$i}8@S!7Iuerl6e8&;GO`|DZ($9akxfKEk_%|s*$ZH??t%OxyH;nENNI&_!OuU#kq4PCWF~4(Ho;Qv -t?;nV$dg@6uJS<Ntlw=Nq40?we8^2AsFF&sK!8U3RwI9<yLTf7OEew3H@JbJm%>i8vb#|mW4K+#Mf9N -4t(|hW{<JCV(Ke=Gne1$bnGc76FXuUwgJi9PD}p5WpK%r*qnchoYTG9D^1Rh)zzyy5UAh5oSEI-JWC+ -ytIe~wf(+jsI5?+@n(XlAZU5FdoL5zf`)GDHXB9~2oTXOs+&&gOp!IlvQ>K-%CY~aSFsN%PB<<pH;j3 -38lfX#H#x`!r!CIi53NZ}vQ@9!GbK7q0|dmNGL8kO@^h5pN^41x{HH;^4*Sc{+;)t3c`^I!yO6{eE8I -Dr1I*O{yF*QioXJ6X=U(OwiCR?yQ0S6doJ!WJ)-GOk1)lVzt|uf_n5?Pz}EZ27|M<6V?PwDwUvH!CAd -AXow|PWW4k<xsoT;gMpFWR?#d{cQOh!zKAn2MmSog7(LB5#cOR7EHP|${xjTdxni=_h$p%3m<AX>s~3 -q5BX(t`%GZH&eVmkMy*CLDwh3WOZ9v@MM|X`byXGNa7WAWXG)O1#N~0q-9cv3UnMwMdXcC*9Jg2<%U1 -@5woqniZy|b!sKIpaP<f&>)}4@ZJp8Lcx#%R{&;C$5e>#`0{E`zgF-DIKXe2ZW@EN>2$Ms^ttfLwMP> -`tQxJE={EL9KLK@Sc~9bjN}of|JR6?HWXkE~iK*VIAjS1JzGUuH#)dFc%Cpw7PHgowVc>rGuxs5-47D -{!oBOS1GUr^ml^qnCT9`#-=zym$BlLm+k|V4EK5A|@8Zu6=h56>n&^RJ}240w%Su`dnK$_VTl$Ocb@d -j=ol!e9BuAAj5=n`PlyOu?v4XtsZObWp)Tv!6+}p5_-=(K0Zi{D3*soHS7ERD_9M50Z5XyLp2pxL8F? -(*%^TLS)jYmG55(Lg7=%aaA-ia>uNo70XNw2k_y&n><)Bg6$cbhb|>5mfN1WLAwJo47F0uczo!1;$81 -kcpA2m<ot6f>p(Sm9<UBCFZEks$4&548*S_V*KW?%hKGPUwY(^^(Q$n*))JNHnrl>@uX)(uolhsBSuy -3^7utsx;#N`VSde;rGEb7zT^Csftbk-DFu^)m+auq8<)%I;@&@Jdsc&Rnhoi%9Ar*HMfZT=az_?p}Mb -8hW0u0LT+8kSdGb1)&^#jaPN->9l<vkvXRq<3rg{n5b@FA(o~_xQVfGkdq@=^T*$)oQV|@RW@~k5h9E -jz*zV+cBEWxWR%ls-arohDNfp^bm4pW86#}4CXs^CsG{fR$M?O_-6~>g`>*ir?!rDas*MGVDPl%{e=Q -*`pp_|B_72m*D_0w-)a`N@T0>KMv^q#?NK<UD}GQz%m}o@HF73o`?0~`^3koi#zP-j_bbcQ_QlE?;eE -5Z8p=?m$`IRD`?75hi?38PDH82Z!zNu`v5}IlW+w0>3`JC9C~$dU7*1!636~LsbSp*!KeuBxsL4-ZIK -s%oPd&(W_@uZgv06%~{%J(&6A9F3Cr-B_OrMh|-I5@!LyT@lh;BiIJ|6+PG4XL&hK94=)gL6ImfD-Gt -tTyeJ)3Bw-u3xrqQY^fYTa8}JUpXK+l_cM?yu=-6G`cWv|@HeqtOC7z=|hN<75z8521=5H;gKN?wYT( -jrxHQ-=@eYmwn~m)i#<dNBdc$SI(8gS%{-GN;1<}=j?&yHe_jaUF$)Of3!!mLSoZTRyfWD1Oh!P!&t? -W$&&Zga!ql!5tm-hwjdg*7iJOEP^ci=IP?+Nb_d$E=(!(<nkUU&we<r{ikY0?cQ}M@Aet5uca_^wU!r -DNLYG0==q(`S_yznGL%ex8O{TfYjQ1=ZR%b>vYLurfX~kq&vR;PrZkeo3yy7r=(ua?BD7-$YdePaejZ -XayQ37=^%&TNF<H)rtx|ma5|A4cGa&01TUJ<E-tjdip!4|oDe^~Ue7IFu2=kywq#m!C6U5Vy;~%+g -sz=)Fe|!Jb|G<l-?GoP9|^|~1%x+<in!vDMRtM=3zHH-n>-|wO8g5h7Anb{z-V{A(^vV)5~|$Yp}|C2 -Xm?=!Cnd%%L-w!Uh0wZk3*dDbvbsI!Mi0&vqHHG@n2b{6#$>e>R~H9CboE7txY2gwXiLCeCv^FSv4aV -U>_Vg^!aEK*#`u}M6YFyYI7jPrKE@O-$|5S>Oz5ai-bHE}G<{-f@lUr@{BU^Mjb0v}oQR3S?9<gI47? -dKpW&(r_S5cHP&Y)_cU%d2^~K-?MUi#7q?S{j@Bi#_J#v)bPS@BF9k7E-Ivc)rIxXunt<N*W=y^EhN~ -4&d`f8oO%5=5v1!5nheH=fHtpkOGf(E6xIvMQHQkH)K-!P+F=d{`-olg)HBeT?K??R(Jophyr7k&`|T -vt$|F*R!I>#em3r<8Guzipq3>lo{18``z*j;$dlu3inW$r=`e!vGt-^G$3=OU2Ih3`-U#tOMt>{kB;S -T`GNQZ|~-wIYxa89hSI56JVYC0q63Y;c&U4Vx^+-_L>apW(eIfL>KEfMY{SdbH`YBTJRH`8vHO1&ikT -Pz>r#y^BN8w%3Y~8W4*h8n7)d~)Rhby0CCAC<_Cf6JnJut20;@)x7u1uBvIWtdnxqQNR2Sc<Nx$UvDD -JK?jEhnW?KH$lf{K}90%v{S{B#dWesaV?3Ym19$lHWT!2?o;T;OLN)hAGdBPdj%G$bgQ;VMTqx+{YLl -8L+y6fE4N9n6?swZBVCFoOG<FUo`ALNA?LZjoA$yG{H+`U7AnmUF?pBK=N=vYgEigT6Q)oBq~&Dh?Bh -V!ON>eqSkmNFG)NlJInRTEjg4ZOc4<L!A6$(u8+fWsb>n?Bu0kV~o5_n5AwHUl>Tdd~N&>1w~asEv{g -0w}{bRs6ZNmT5zoRnyo|Ystb0mgWr>dc4MV6M@a`so4m!+|z#~l2x!4l^m&er1H((?V><BOm@A1f6a@ -JM_ER#3-k=65DU_YmRfEYk|V{yZj(uV%@^k{a*Fa$U>pMWYU3Y94sp~Mz37>fRj2E`e`hW?iS}WjgG% -6Xw6uI$fK*{OByPhveQ$RiFgqhDGA5VU%OW1lDU@!SVLSrcZFrtl=>+O$BP9|}@(gb_a}%qt5wi+Co% -Q<f;LJd8Pzipt(7P4*`k7N_HtV^|CA<o}OP2?31n1U)r{d4%Q!YXGJK%5q3hEtkfF8iB0Y#d?Z_(zx% -_#W9dV?wuw>OU;@4~<LsLU3X{vH1fMMypHZ&KWQc<+%D8O{)(66gYSk*+z>q%n<4N}2SM1NEt;Vy_ig -iPLytsLT}-mAB~(Rz`wsiH`T;-ogv0A$p4BEjS+2h8a(ep^GI}p$mt%2}SG3IcN0{srV=%@R-jf9VJ^ -5dBF`W5>GLPLOqa#yZb5AppGOl7~r<XI1*b5N9ZgFC!IL&Pl38xlM%$3j9mr4`3_GB1vqM3!3!K?hHj -3+TGqi@gL^7;rGAR>sZ_$iFkmJI0jF%=n1vi8U*jR6juJ&T+^HpD_d55JOjh}2f~Q;$BP`=R1EPo~(w -ZF6k&PX72BFJjHlASo8VrQ6^gyEQy@l^c>~8EJJ7DRA0mjnPCzRmu7-`m2UENhE!o^?5HQ&ajti&^D- -M!4KbGDfk7LGEwl&wPM^2bb$kC*VIT@z6oLYIZwe-b^oVcRc`f23B2F`zE37P~&ob-Pp3&l9#^<rVrN -QS-@2kd6&Tlo}m&_5Une(f_QC<mOC?F$64S6_jqb&KmH2yzPhI7)BsqDp`XUkS6LJz-Uy;-sj-IP6(1 -oewhw?7DX3TxDZLcZ&Rw&@TA^V39i(Aoi?{~MR(8)gP)HvRxbvOMShV(F1^<w<U6Dgw(hqmaVX|V8Hq -@5);-92NjwsDaPl7JqO!P?`zjC&#Zn*PeVmti%y`3w?sJ=Xo5T!pv;Y;5mI7%BTC|q#Gmv~J0MpAPA9 -hci>5Gk8SqcZ#JD{O<{sg+o%G--DFYA`)j;RMVOT^!evcv&(ELfy8CtW0gA<#&86#*a^4?F-;0}ETAE ->sjE-~cJWRVh-3D|VE#BpJ<T<}5ZLo%LZ%oSq+?g&%8RI`)x1fg_4GL`NlZg{ViJxd#qSxAcpQIT{+q -pdP0M9JM~b2VhTgB@ZPImd6R*-R@%T!a93s6dZOz2U}u;m`HKqT+1#&urB!Hur82?EtHN&0#N(rAq@L -x?VA|(nduh~jPR_-_UY`f%N=UK%SL81!X8Jk4inMHf&Bl0od};ce>7Wx?{2`?tP;R$x7F6>T<Xw$^Qz -%p_B~|+qx6R61%&uK9gC6ZcC1JcCCyp}OUIyZgDFW%!wfoCi09YD_g_Kwfqm=zS4O2^>yX3jggEZ2L! -JaCAV@P*8rV@SRr(XUea<vr-;Gt_fJY|aA4rr_jJiev62=s8k$@SUi3F<0quUUUof#gv76wkeFl%naX -1|_=szdS?;De3BGrDkyj<cLip&%urPY@y@7}yoIL67;0z}D-7*Wc*9l}>=E?dp@3V`7dt-NAT{=Lw3O -sMWBVpe<ecS2?3&aTP=vPmhRWzpCh*e)Ku=4xkNfhID<EPeKEeo6I|QI5vt{yD}K6;xOru#{+zrs6c& -jMB(%YUHnF2AyG|XZ5H5yBqSzlgH-;Bl0$8%V4SknB#>X}CJ%5UP1bN=1@Gthb_x?R|ALCHhgJ;8t)n -R+f~}a}ywVNPELl}+#m1+g;94yuP4E~MDmjDaK{gt^c@woeHtU4JT=?WIFxaY!oR`g~7r=Fzo=R}Qfr -Mm5^-AX1nH^N{m3rb*FkYdppL0TQ(H+||YJa1?VJDzUm+jnz6BseYD8v%DkE0<XaNu)$q3N(2#GO-0S -7h}nOwDlz)EPqJ6FG7y#|zLNJshP4Bn!&3ORTaVfYAgV=u%iGlsrIE!A;m0>(D{p1u(ifse>}jgpYI7 -tdc9IB?}<SmQv_No+zC7KBEPv2w6xyR8hkFRrK7p%UV!K1J2UyY^kU`1l`7+m0bg4V?z_|vWpfn70X# -iCh}8#)KH)yS$o)SYO|Dp4{BnZ{l0~sI>1q-)nuU~XCmh&(KD&%F3Oi9r_R&bGTGCGTBKc0?*crf(nB -H_bo5uN{*xz9kgTW>JDc%l$5ni8#`w8_|65VwuokOHi^S5`o^fG2v$zTro!T)(-^B%{`?^>NreS}kEW -45fq0*4WDnmWzp^skEk-_t%j^p7~IvEv~l*3y62}K6RB}5_2RD>~`W>%4$IJh6QM~ez;i{y}rp>@#ci -_@zQm|G#(VsF@S!k|$($V6>Ymckel$v?^2GYvmuYrQ>T#X43G-Xl|kPGlKr6{_TYg$fvqwXk`y8JWmG -Uv;`}z@D$e0ecj4fC_z$K@}Poo_lerSD3}@kQ-Lg(}0hxd23Z~jG^I0$_UrC8&^4A1F;wQ3cdPjodOo -9n(;qybFk*(`=I7nra7+~V}FaQ>%^8*TH7{dI#VZdAP+^E1bw(`p2lI{u-YAwny?3l??p~~K`a>o(Pi -D6Ht2DNyOC-6mcB9~{UI?QIe{)4a_K~y+g2|fzl?grPHExZAlM!sM`~lX-CVJazSF*+e~B*TLD9!i{s -lb!r}2A}R*e;@{g-<`_YYs4nnIX4Y!c6!y#1}a0pxemR1VsDxvVLYuQ;=4l^191xKs1lQI0z%x$b#b4 -m&|6rFII_ruG6OVN^j*5Fv4rC<LAklWz^cN&nX6kknqxW~7Dc393+;vlq`_;$m~LVQaX9fi(>d13(S~ ->5L|r0#cKzD%#98ozs{|F2+w9TQFtTM9cw7O?d(&RJgpHX(Je=Ayc9jGSH4j@|BJ~%j_Wz+aD}<MO8- -OjFT|0<|)^T-rW$j+bnm9-c2Y@fZM0w_ee=sYwt>6o+!I`tDKB}9dAE;G$}{F{`z+O=*zF*$=hGY-~8 -#@$=hGc@#x!c{?u~nG7G~HT-ryW_U)BI?p1i8&?z2IW>+!BBD6NIfC=5p$5u9@&AW{Jd(r0KH}AFq-W -ELw_>b1BaA({=+To0w>!87@@OS*wLDV{>%X+2NM;Z*i^C7G##64b7=w=}GhmjB@JBG@^dYYzL+dSyn< -o5q#HsyAF3Pvx~F?GVs%F2jR%xpZcmBzH=pJzS~;<AP2y`=I|Zv(8LuhX3B88PkFxGF1n)vg=8N>zVs -pJBDN(&(d!NfYEg7e~&J@vIZV46lg2kjlXVa_Q7jOfG|DF^=_aa8JF991VeeZV)z&r<{QU9jZH@H+#~ -P_a1dTdP2A28n>vLq@Z`Z1&(=?r8}KT=SpJmVJ&jeVtluDB7Fn(1zkX0FBoczs5jJ>xmm9g91KuJP5H -_?AD5PB_U7jF;W`PFtR880*(4~Ia%sB=M=zZl>=~;a1!Be8Q6Fw?RsZqRykdQLOV{ISFsr+?97f~b`` -4Aa%0EEn(y|o1$V%iiHBS~YA>HkUWF3-V;C+Li38ot>B?PUGer~wG0rC5k(96ofhe{P@YIUkFA>hQ1+ -m3%1R<dcrnVTDhE%bA;=K7-?47w&Vxl*sfbZFRdRiS`X&$dF|736<My(`_E*VI)C3t$vVhnQrPRgyJi -cUa3C1LIy?CPw?7vU@;Ak`T)T!c&<Z(&90>$aIQ2MBohla41Fea0tw|<;FwqJCU7B$3RqQYv`zoV9O) -Mlb7JCqBls&b3IbJJ&_8$w<`jcOEB?Xl~$9a?Pnh5(+q&r2GOF7B|Ly@+C`|wLrwB1Ez!z=`oU>DN}| -h2Ua+(Jd^+Vjx1?Sz=j2$r$cwi<$FVgmSG<Du4ogz#{>1GajiV!I@0n@uCARmyYVU;Gd%9o?=?Sz4Re -r(tf}0E|!%l?f>luvk+|49{O3nj^2fV|+2S^@)w7t`gvXu3y<o%dtc*_}meXiq-tUL;hy0|)#I4p<-o -f4-TZ?6)+$LZx2TE?pD1aswibHW#d3{h~@IhsNDodasDC&`{&%vxnc16$BErznxJUHUg5cLF+9WONh4 -716j;o(BWzRgG+%9X-Uoi`8(OPTI!<v@&5k8jiqP1BbA>(2=4;7$xr*=RFLjk1h$z8}D(B$adA#?y{r -TLSCT0T8-{e)r@ct--sDl-8o;y$4SN~$XdA`6{5##wR*qiAdTX-XqTMZgbYWRJ{f3Z)`sex^M41W>>t -V=u$%rLsBHbL+SJwFDtnTiGg-}?lqnotz?&$8D0?fYb5xiTQbiiNWIGL5{s?w}{m-T&rI}f!BwZsv9{ -SJD(kh++)gMKa*o9=UQYAEv=CDDFA=(iq3Gx+Pv1LPXI2iwt6uC}(gir0Fu51ns^{D~p^zRXTyi_W`2 -}r}au0ZtMmDzfUtpjJ4MTZ6Irl<P%izFV|zrW8xhCAeBIIw+(c!49W7A?QMJFLf@Pum^JmkQjDO86`u -gAp9nmx*>UA%B86!c90yoVBQO0oR9v;Qz=Wtz=Qo&Ni`~>+_wu$ZVH*A5wA#8cef2;;J&t2jxu(}a -Lg1-a@{t^^?j{i6iK9g3lDW;M=4RsaAS#<-}!R~|2Mz}cm&ylj~NCB!^-TWw_YR%_}IDGX>)SRF}Ef| -XnKX+@DPIR4JKW>+?&ygIw(h8@`E1z!ik%FEZ4@u)<!zYBDkr@5p^au>czvRT=lY*M?j|p=ZfZf4}b; -p9`ca9WE+13rXIwo!JsZfUFu5!VXDmEYQ3ic)qmY->tk)$$zuROM9^9=PoFcJNH+$L7J)$4w@bARiLK -es&V5K~$zgVlPx09z<vbxExIb62E0y!-?Fa+eYt$9Mx3D^zp5;PS;<)N~V}B8?-6_(lKF;OR-A1u7k; -hqZ-DP89yLya;RqM;vsd!5dLNMR9l4YV!mMR*gD5{En9r5@i;@&vjBII#xTjoz;6oc0vtW*)95g%tqE -1brvyw>t|5XSHZN%I~d&4&Xa()Ev*buyyIRr8uTy^WNM{WCVn7ztHY%95qC<`N=$8T^hJsy-2{C;$?r -=x-s-(^StLp2DOjR=QLEd6fBlDFxaQrf1Q<KC4F7;%x>$TN`XXckzTyHLaFUvIeYEKP>K)^>gA;VNNs -n+dbnzd0gI~U|edGp%Uato;BA&!^?M3YK+d@;X&_|Y%V8LW+zuLFy>@*+vT@u8%H;E12L^MHT@UMOW; -_9YtQ!HJF-ZcPn(*mj8q8vA~WOTRHS<;T@mcUh*u#)StC?V;5*i;}l83VQ-w5vqK6H4;gp|2siwga;Z -3yYf2NweuHAG=p~RVMYhrTetpoMW93ld@S_9c{c6!(tf><6r{PO__!>MfG2^uQZ~sZN-@sAePF5;5Di -}xHV;8oiM)HscRqC23N1ytn2WdO&typ>0T|}@ZJL5XrEa`>bzsqu;Py-VidLzZw~Pzig?SJhF8(7Tg{ -y;d73qU#g{tu*uU;fa!>5B@En%&i_bZQTh<hIgU68g1W^cTOb*vHZU2He#vTBQVU)c-U12+c@sUR+wc -u=>KM?PqZ|nRE&H?vitG3SJ)cBnEzU!=WiAsakJbH@<d~`Q@gzkP>#8$A}b_b*a_af^LUdBNmZWV@=c -n7+T0}O;5c`2*3;^^U)${njfR_LGE)pt<oj?af_nh|&W5m^xhqM#$QNG|7C&<gz8lOVk2pwwLu#@Gbq -h!Kc)YaBt{ZD%ZilIgIppLW>y(Xb-c+){U`WCrN?ucXM23e?rK@flRKina^9H4p8#Feh1pe0LV9Ra6@ -E4+hq4P}4mYk+WK7tS+=4aDiZ>53u0P8&oI>w7F!o2FmtQ5Jy?!K?pEq0SxF%53C&Vu1%O_pf!1{4k- -EZyW+gGM{g2Ozf<v!y53?Bx0_^a@r!YlrqlV<(gk2G4J029=LH9x?#b;q6j9an6O(dOJZi5CAVG~?fH -n4idCG3dGbnP0OU3sR50XvVo^1T0Cucj`=g}?zQ1H7A1hoxK=mX?zd*>X!^Ef)4vz>?ME7+2>Mnr)o2 -(<&rI-gbQ2dXQ$&V%&^6Yej)Yv+VRb?T@wlJ<{dI~X&WdoDObS1gOYhj`F-aWz{Q!LRZ9wLM{iO3#89 -7%7F8qy(X6-nN%CV)q2*_CdV_e&n38wtX4QKIcJeNXaVD3<U@SYc`GAtjk@~;=Sb^46Y0pU$wW}=b`n -8pH*wJKAl#XtzEnR8rtUNY((QV53jtv@2vKt$Ns!CZT%ZcqY~CYVmru*yl{CQJm9nBlD+jwhIOMF*h6 -34R&DUDGQk|`yiY|&R+ob>i-bbBqYLwIbB<fV;YF;{uCk@mga%l#&P3L>gDqg5yK=Hs(Nk3*D~AyvRp -3E#-3-P5MgB5+vTD=JINUxg_Bv2Fe76IB{3|z-0_vITT=WDx?4hr@@4{z?x^1EEhJ6R1TG+=>s8(+}H -)^SI)1j?wEhxc6jH|I@Ftc`l8b|C)74XNA-fk#OI2lw#6p@q9f|?hfQ$qQDxki|5h0k$!f1=`~ru6C( -K_Lx_+<Co~NO>n>Dd~6UR*37xjmGS5kR8B9(rPtQf3r>Pm;ZglSTjA#^lyLQiusQY;rE&j;r-{u_urT -A(4*qt38zQJvW5IdV)j2P`R}!r3|RP_`2JtZS2Et_{ddADj%TS^<PXH|e^&GVs;%afY}A7CPs8>9UA~ -f`e|y;?j8iiNC}PV1cXW6@=qg~Z-$w=pFI^Ss2wf2`<KaRnk4s>4FrX8NU&f`g-@i;Ms5+&p0+c4AN( -c}+=3qtfe9{eZP<9(x8j>u~w~3v^*&YyIPB}X#E%qpRkH%M+*|-WBuDz@L7$&_+`4XZAsPvg<+4&OvY -ZlOeo=v;a(n{^Ar?fR~QP}WvTOSS2YOq{J@dgU%=o59)XVAM<gR5(#qfbyup9wyYc*v6n8cCFT;pQsp -vuzFGW(sO;Qm}m`ETf6?r3l79sA13=l3FpNyg|k7s4ldMdoY0Yr?E%gEsfgluqs-^4XC8O9velpH9QQ -QYPOHcE`X-ees25Yb!mf^lXRHqZ5i5Z(AEydI_TrC;JkaUSFeDs>dvmJxMWSZ&{wXGFl>iF=^s+E&zI -%uX)+YjkP4DS<%R^ZjwqmlUB;z%F!2iw2Y&V>d<1{Z-K+`#6`nWii1FoaEssHc9L|LzU)xH3vP=r@tF -tZCw5~B0DvUZ?{JVY5<LX#Hy|Fd)QkS`-yv3B0d0bo~Fus-GnifOY53?VPF)FgepBj%lEK~DuZb)ZjL -8TMW(NSQi1bi4hi5`X&tQuxrzdCN^*<=xI<6-kqBKeurkmAV%xNCnvEbn}E{_(?j6aBZ&KB!hdo^N`c -_=+tjo0}gyzWUWhKHj?kOh42a5Ny^&DGl$6iH4egc;4~KNM;vG*42M0o>sJV$eY8(leZvh933s8qpU6 -E>ba6VwHkU5YrX_s!Rnc2<Q^f}g4SmAPLNF*&e@w@U#CehCNa64^|7r1Cosf_j6m)&)|qxH6;EO}J|` -R$Sc@ncyGjeC#!H0~<ZtutCKSM+Yw@rW$FwZa!eF4{{pc1raycIFI#_38^Z7KbDm-X7U1_Pq463nWAk -9FG!TN2RN^+SdO`H)NIR!;i-Sy(;c-U;W@L%$tqH>r91|2%LTA{LKJ}i@AmV3!$8X8*yI|#}Xe6X^eK -Rzgku&@I?JvM3F+gNjrfM8UYGtpW13SjHw!F@v+<wUB<RqlLVA^V}?DTXD!?+|h0IoWUM&Z~0bR+lL> -^x<TV*PzJne`b6oxs|Xpq;i*YhGT}w5pVj}S3r;{=Bn&won}ejd*D2h>*7JBh0w00DQB}W4XF^D#-*Q -vNy^q!exe#+7<HRvq)s=vq+XBSYz>9>p+sSK^VCQnUFx;nN!@q6u7!~<O%|LsB~w_0*DbrhL*<_gERR -dDR-c&<kVfA90n?$=#r^Z=LozbZ1}>(QoQaNH5ghm`5d6Ndb1)^=b)jiKnxn52#_1QK1FxpB*iq(Fd% -m_xyoX7)Se5Bx)q<!nDPw3cC?&ujwi;aCH@F;-^qThjI31-QpPe4=NTT(VgzxSXdv@NXkj#A<SlJYoe -XS*QB>Ioi3Bqh4hx&2b%|Jy6*gk?G?x$)K$c|eGNA!$a|H&@zjC46xy<o;SB=H6j3JF@6#OT``U3f5{ -C<qwi*a~bdTTHENM?R%c7pjeyV&a!OT2ikTqM4M728s$jqC;Hk)#)TPk#uglhh~$9kC3Io6M_ilQ^nS -(?)bR90qx?*DweW}gYI)9z?vt$%O0-usaU@`6d6a%7AoY9J;j`5Q|A_(NfSty-6WcezPcd5QA%(<T&N -R7CRC7=HEx?hNsmQR>X=$NKT`3<B>pwJe^+<t?)_*|zWsHy>2hLs`0fi8w=cSAurfnKfV`LhVPSBcKc -xL`w8>=}ZliIs7nU48&23+EIkvIB5tu6N0n-*~(u%K&42U1Ugo;7oDcb7{Xj4UZ9KxG+YF-ZYvw~9>O -XT{dTd|}!kU~4Ky`ahoKH~hxR=GJTw7ru2&@ZdCbZ%*VN!c#H{?^|IGMH2R7&we)lbEs#&=@a?Gk}i7 -mq{7g@p`9wDmHuYlqbvFthMgMUQz5qo90k7biBuGXZ-linoYTkN*SYw%TlrJG5rrlUIPl<cfw$)*snV -rnb$P7<C<Qq6w-WxI|?=$lrvK|85R&9HP0BLfALuc#yIwemyK$V>LY$3Bj#@OL-83`qr+c}%MoH>12e -$Wc}>m#vt~E3gTl+#;2=X=r1aC5E6d+A>zS+fvbO-9Xo_p<^9!4XbZfbXfL*Sx7F#OWj(cLc>(GTQuR -Z~~KdlaY^YWH0bOI<{i`mh1SNI*wS>T9iN_-0?R=j~Q{RuSC@O2;`;EIJVaw0M<4p&P0?V79jR;Dr^f -{dsRgfiBUfPna;{0+#lp$KSSqs>NqnR9-zWnXEzd8{|mPO(;so?z$`Pc5a=9qt<SlU)sd2Py&nFf%f= -_qzg6Q@)XnJF_MO^_ABnufsjFKs+Z?Y(sH=Ub5r(Vi;{dd=$N3{3H72+Xt<cH=kc}L=J@l%$SKWD<8D -CyW5?5NmNzpvcjtkH_z7r`3OLM>4G$|NJ!y6+R@1^Ol_Uc;!8iB#aDs;)tmhjH2ck3BLSSPH<Imb#Lm -M{7z<SP2DANWt<h|Mg-w6`DNWbXf*?2z@6>1?;q1E3I8tFushvjiA>T~1C3)VkD(TTyG$h{3d(07w45 -d_o@g)q2t*duf(LpbIU5JD%NnP!*9!{jI!Qh(GLR*GYO;Bu-2L)S<-N#rKH}eyP-pARK_G84&lkQ_c& -67^cIzBOY2BHMBX(gG8Ho{l^>6l7JB_$3M_{pe+_HJoa)uz1XWPon@^JX{ZSL;Q4s9ef&N%JXgBsS*A -P(YZXJb%!WtNAp}w$Oio4g%7MOXM&MO}b5$7VRzRC=}W#<$&&~J~xuMOgWnmCNwNiM1p-pq)Z7+U3;P -ER;U-lg7fuK^p7i(h5#w8J%?m$LH5~XRMJBwn+Txsr=9lR)_=uY|G?R5yxOnMQfKEVZx$`Dy#sNNOg8 -PnZ38T6QDr=&^cfur*j+pJr7LvO*9E#If|&X&W4V?T4)IXU#T!^6r@~6<RPjM8l$C$sjB(XMvqh>Gbj -WHAn-kv`O_F4{k+QGE(o?tc)Qc(qwo49?lsq%<+Cf3tsV<#X`K`R9*+HP;Avn@1X@qG5z`mkeI-*A+_ -J<o$NelT+839cYs%Ilir&n~hfx~lZ#46h>bnM1jHQK~umC@LyxoeUSitv>bt2sA|_i|aCy{G%Fj;M@6 -`LTd3JlOiSV@|#YwS%wI)RN)ygokV0v~|TiuGM-?Fylj17A$teeVr7=w8Y)j((Sb*=0ndZouavYl*X6 -+zRGjVdm1)37G%d8;i8w3r10Ko+QUos?j1JkkQsbVDO=I{yQQo@Y_uIm@jDQyS*$?&4e7J4(I-P`>Lb -djCWl!(uktOm`9?0n9Am9PtD+(HBV#LOM+_lkW_vjSHLAk)M0Eyfx9Qg_lG*Bt7%tW|xLSEcR+}A4FR -Mw=YT}Va@*i!SW9)*Qbf$fZ`0RD!yf&CKJ02ErMZ>o`x3iET+F1esVOmEo2zpR@A8X+ol|REOd`5Sr` -F5AC=B8&+9rup(q*v>X+nR;`ckv`0!Qzr0tDltJZ&!P%xCf9+;{m3&aax;>x=P@1iswVlYDxVPUW(Ec -C&v0{WiW0qyj;fx=B+Aw_{C)++}Y~sVRiU!J#=drlZy#O#AfA{o1on48@Z?JeBUjXLwF{@;LT6mANM^ -4ahxRYlF9Bv^TyMr_!D$yd*Cxc9;cI}Nn?%g@VXuT<+F~houp`c9amS~=rnm>9Uh%q8tH79kCZwNN$k -8DZ+&A8PUlEmBebK={ud~^W~|_Y_b_^4`fFju^2`e1h@(W|LXFl6{y)b2&GOjEOcqgmJ#;Y6RT&8rYh -_BQO!8qWfUZb0ptd9Aeq&iI!%1EmlcSg_!|PLFMeXK2E8ip{)-+s;u<lK$=gG#C*{v1p)PYFgdsKV+r -F%H2cFn_ZPvv?JxEZeK7p=GDosw{xN!Iqub)#0%>gsj5tG;y518iKEQfkBV$I}#~mUf)O<v5^Bn)d$$ -mt7HDw%<>F^KJ&!q!-#nWa19Z#ZtfE<wi|=HpTBy)zCZ4OH$j=z#12M-l1a&GX%T4{L8amN<o$bEeu` -7<(1-tYCJ<a^7$V%5|`3PRZ@EPlR9~3UHaW_of>N_6D`JvVH*6BZ9sVD{Wec=c|fz`2^Fhk@9`!2PT& -PCe5+hDqVIF5Ns-(w);yb#t3Wy|a;!kNIe-Cim;+YMW8CkNIPXm`MT^i%TY7qpE=mbHV|a#33qxejLY -5i(r@HH_*s-fIquYU_@k&ta0KBZk@1XJr)%Iit<NHkE<dS4PE9RVAlZL)h2qYbit%rBsqTpOqte#Qpq -_zFvL4$8-==edZvBvpRCy~giTPW_>o2*VRttIa6@FqGM+;rYv0#x=1jZJJ2y>xgVovY=18DB#iN52=> -jk>Qk!}a6<b|ga|?$#ZPc|v1xe>9)Y8X6%Zh4LD1D1+8k;F9|?tS}Qc%S%b#Q}6IT3=(C_GsOrR9_-x -oo1zgptYjUMaF4apbUfhx?sK54b;5uLsgsMjXDbkQybj(@SE23o=fN7$RL&=iZONkJ2LyrFjccOU3;! -HGw_}L$iX>&Jr{w6G5@SBttNa>iP7+(R4U2RQu#t{Y%a?EqyCK9NX3qUTbO?}UD=rrxZ!PQ$M6e%&A% -OMypu*CYMC(-l)+Od85nu}nhp|q)!7>>~M>INTB<#C~lYbtCw;K{lQfp@O&L+3w9Y<+4N{1BC-Q*ZnZ -hPv!9=2l9O76*b+)vWz7@M?qLW4ccUhz)vG>KY*27Ij-3b48~7j`-lJJ2!pF@yfG%RNqq?IHrK7jHuL -Zzj-E8o|0#WRu6n{;{Q(Ct7TIXko8L@WUOdO-XCuRA7CDe;mkIu8uIrLKjGs1`?x40lZp{XzI77#<f= -XT4=|_{zpp>DfftJ(mqDAp=9jeDOa4>4h4oTHP&IQ&SI(48HjMecfEBg1a|F-IdyfeSCgR5MHuY=)g! -=CTa)yy5~UF;YwztTQJKH-!YBw>-jd*0cvMDNTFGOgT$DYYN$)0R?Z}~ihNiP5+kr&|SokC|L6UqvnN -Kqb(P;5z$Beigz+7AArK{$nqau?s$&}aD${`yvx^D2w5qqh1_rHyr3!<+${QBAiE|r9quFe*r_L#UWT -O@HpCK3!T=~Md6QcdeBmXn9y7tT`)isbT|XFY!HT>nuY?iVWV4Tzp$(l$3Y1H$V(Lz}HJ9Mp;cKO3l~ -L&!B%+X~kkPx4qYT$aNWl{@2fsIM2-Dtz60@GyD!C;&*=Io1ZXoosDCtUU#!gwkcS#BH?27F@(DMlB@ -meCs)_mM>bL1N~^vTNsb_5cdBoP;Hu)q&=7<F$rj+^fIlK4s5emZ)vL+o{uU=SB7j6tn{e2{bg_at8Y -VC>$>c)C)nQ}lVNY673<U=+ZjAK_aQ7@vbE)UwiSYLgXJ4qx@Yw8-or;Vz&BdX^`(49k36V?dB3S;OD -?qB{_Z?@zIXV-GB+mKh<UsBl`%O!@=cCk){=|eXaUz3@6tYfC=xgfCDLybLZja!yV&oMySzRwH=uf>Y -1~DPJLu*}4Y{E$pKc5zWS_S>5GM;Oe1{$(_E1s3$mbE}JT;0M&8OfITFzn&8ZH-1bQ^Tyb;Yelsi24j -LH$lhonn#1qE*RNJFfWVjg?@vwA;lukGL_LShVe&APQ0uU+XNa989Q7gQL-_NaJ{ptF;FLKmh_kFRZm -81#V9%-sJL!IhKk4zlDlNiPfkmS6{KDmI8tjHYNAAeiCe(HxCNk*oOU6I37*B>ryzjqranxMDx+MI@! -*#if|fL!<F=+W}BcF?y*6vB+lQAD+ugPkDdj=o|!t#hU0I}da8etyoTj_1sCjaCM;T0Z7YkN2x)y|s@ -m0pn`NoD@ldN$Ge20ElEO=K(yI0X7z^Hfa_guBI<=x<u>Rc*zZN=<iS@1S=tOUJBO@Jn8Z|L<^*CU<Q -B}}t-C3cE(ZyloXcf~<wK;B9XeGWkrj1q-gy*^N>V<{aqV*<gb$XbcMm9F5>6V1#bW^iUWjgBO+HZ59 -R3oLV)nK0<y+lproB22yk1d*mD_5`B+G?sVQ5K)*sn$fpT#Da*UKq87%8wjK-K@%}TV1sRG_4Nh>(!* -ccGbZy)}AxRSJhyK7BU>w**x(_-Pr3uamkllD~ywZp&Z~3XGk`;Fb!U%udP<ySMd`^?*epvzIEfya>P -%~8h{@Y3@1yj*`gB{Z#n5224k40=cV{m5Jgo-9<Dp+CuKtSW0PTvs8D@TPa$9RCQLk`ejs?YmVoN!if -XleVyR7c7O=dI<0{6Jw$*;Vce?kY)AA_oED>$-b1bOAb=36M09xs|XGss3l?jOV?Z7~-f-UCV$PKP4p -kAQ(t?bXL9hH+@*?fDPjJ{u8U?=;=7~Jm%nl|K2eIq8r;s%;$ah8PUXSu1}!_Jt{vvu(E{=w_h!=qO_ -(FZ!xp<W02j#|oo|06tw2OnGiJj|gf{f|T)z;|&MbR7t{fOKwYE4XnrbJiGWMty?RLw#nmKF8>{_&wa -KJdiq0>@KLPD|=v7vUjJ{cP%;rX2}28yHsHGkYNsORQuB$p1uJ(?PqCW3GCHyEtrhhrTq==v*rdGfTJ -9-t0aphy|=0_9mBZwL9Y<Ab47Eix3#yaKh|li`rIUaz%7PoQ)pjNM+cu}wXC1=#JaW(mjKZG{OE=yRq -a^&rXGn*>#a>aV@PM|nf#@Tc-mx5XZ>;is+vv|<E;G7*rkvnsOaLz8>GW{qLM~GvM$PB<=0MxtVXjem -AowS`K+-BS;iX8%y-{j$Hir7S!S2`swyP{1~@D7coYdn^lhE>y-zG;VeBMysT2=I+dzUQHD#zm{}ztm -rX9Mi30FP&;q>JTry+%AY=v^uY(Y-}w^x{y9-;A}Q#qMM;|V!^p*FJA6E#^_?OEQDS9y{C15FKh-Cf& -%tZRF8qrNt!WQL(xA=~NoRYE}`)Ih|?mTWSVFD9;(Td+NBaU6EciuHzhg*3FtFRkR)SLx-|1pZ&CY^` -w?&9g~-k)RQ#oEK1mQa%8%_fBK9)|#5pZumGysyPf@7d`&rVDH(JZuI!+(X(HkFhBhG+0p*#FRu@tz| -3>5VghcB-I#i?D+Dy<a0D6poa%>VJ})evJ?!TdOdWL-*PWP&=uXOLl!~p6s#chzihPJ*>97Tm`wClss -Deh5qpcp?FdsQqT)yF`oumbvT!!2~If*b}if<OZ$VZEt^-r?yUL=<(Ti2yyj8d<=R`=YFn?1T`T9OsH -Wo?wV$$~GR>d2NjOqH!rB~Sm(B9w_H8og(-!pTD*a36{0w&vhVT0XToREU?nub_4{{60KIvSJ7zpVx; -}hkSG?eW4$_k6bwQp&rPbMEc3WU<P6uF-en&5jW4IXXQEHT32XQK7c;OEWJ3MJigSL0Pm`XZA;X^c5M -uJF&Uhr2|tRA?W!-H+kK5d?baU!sxbA~wZ6NBWWaqsXLjx5hDP3?ue8pGZq(L(`5lk{G~Urph1Rw07% -iUq<QGkMp2%mbHo^K8E5q9Uf@+(!Mx<z${_W~Bv}60t`mEBO=sJP_$OE1Od)5xSZuBdzFpd+AJKL4}t -pVP?gB#qJ{d_uu^W-9(q}3uS7g?Syrlq_bPpcgu6r4rrFC`v4L+e80Uqp*G>R&ASvt;&7n>|)lW`MF! -cegv5d*aukn=60Bm+j6D#Xw%W3BGT}7q0yHb*3dKWk+(OG8E3uZ7&GjUgr)(I{+v<C9eW?0h{)%1LG+ -^S+lmSv2=hCYtI2#)&S)zKMg2&b8}FbG%l^d*;h~392-g_p`oFjdF}4N*}x++Am9;;#<kjOtS!0!h?k -c7`qGkt&97g;TXWs$mQBEVd<&<75BoJgUa?4Rb)A7gPfx_<c=a5>F<k?J57&m^s~qh)kT>i1CW(vTRl -Ps-cx@=Ph_e>up;te-!B3Y%^W&u&VD#ojutLE$on`M+snsC8NR!?=_z9k$>Hw50`{u+H@TjO2>*)r-> -Oj`4U8A~dl3R1t&qKv?y#2SjzP5Fn>hOrvdbQfHO^C?6LbLxa{uBb6!2>FR+WKlA<7~lu`q8JTTMD*y -tJb+aY@fT?#>NJ5#%^N0(3P7z=5i7Z3q@MsHMur05G3Npl1YPj4~#UwNmh8})TnQ%NNCTlK+ZEv%bao -GLZ@+Ey~{RzyJ_XRsPL>pqT>)wbB$um*ppWJA{2TZ)Pk7l9D-huEBgxYEGgQk(GqCh9Z}#TK{O|2ua! -xfuRkf^n3Ga{w=N;AAFsi?n5`PU7adGz6$V-C2`<_#dIEfD3nroETnfVj_6GT)C~7drrzE_}%_=K60k -zO>^||EeuA4&EML{UVs(RNBW$RU@zMcY)nj7=07ngnXw`|kRud|kY^V@A`5}~VE@MYDT<ufyYmP)f-> -nh0|%eors*x42)(q7s-zXM?fZFOc!(3KYDHuV_oO?ac<UKJRyzV)Q#4nh`CUEXw;lgxQLVAa;MRqx~P -%j#*=x%G6m@w$#Q)FZcaJ(NK>_(3gniYDBcluNe4T@qR>0Lw)5mIOYcY(b$wLF|Q(lf%14X%tOSBa?S -D5kAF$kwNO)YPI$x+)G37a=f)iFS?{?<m>sU#laY)Y=6?h(M_~pfxQu?mdog02@DD@a20as6X+RP3#f -!P7-*EJR62wjgADq+7g2;wcKM>yAWJYk8IAK(#^%xXX}n;sb0Vt2Fcwhc5Yw-)#;2AU$PJhBV@5rsTO -c%oR`aq%9R=SanB>E5G|GihVi#L~xzds_Yu2l5b%TGHm8YCpLTEl^Bx7`NSbmd*L_3SE`}-;aIF%2$v -McbL7nAsE(~Dvw4|UvS`gwkXy5l_mL=c<Hg6OocmP`?*%NoXIvW1#Z6|7(FE6$Onw&y++o4{U|##KfX -grGE<dPBBh%Ocx^4@sa`&aV_|a*TP>QNKEskb&x!CjqqE{3`>d>~nrU)Vtuu$dYSV_rpoq<woq=%(!G -*bak0top^7oMR+HAofM?GMTV}LXIv1PACd>DP$;EHt5S@PJThzE<{O|d$ovWR+;h|JA|?9P-NJ#}Z=G -twOE?3ponqQVr)UDBhPHmk2Zw2sY;c|CY~dlG{S$J#MR`od>Eu{?=0)hQ9c~^tK$%v$z2YPj6r1pELi -q*cnh374xA34S657q^p_GV?0E1NvG;49d!3B@-d~7^t+vcKwx6?pzKWS+#q0zTk4W_rMLUV~138pWr& -9qx`jLEa<q{7McfS&DapEsQaD?(?5&!52Q5<Y-F;ZQdGBn`!ncyo&*3U%&M^bAT8PaHxXC7F|goF=X$ -A4+FeS?dj(HOy4-t~y55yywno*ZTRnPEi)a)K>PGl`KkV`sl=$OLg(&I$o6PF)Z%(*{$!J-Q^pm)%sj -)%_poXkxM@VzoRF%OR>F_8ly&0z3KQTEZ`+8aQpMFI@cR6kS*D`DQgS~8}MnI9w+1#Hm1uAcq)drw9; -2g(&;oArLaCQG(Q|SbR?1AoOMarO2Q*YT$X2Bibb;0yRab%m?B~y6nmrCE8#ZLpsi-Um5y5-mF>=i=( -TQoq~lG>H!M>@Pxi9WQ8rl|;;Wv9snF)Y1a9Ix954N#d(*X6Y{=Xee~;epZo}^`=Lv=f?Zxiy!_KD42 -Cz58g-}M-b#7fs&NB|rhE`>54M#r&F`&!MVS=DAs2CkRlyrpd;-nzv8?E|o4@k6D&MX$Il%EC#X_L_q -1Y8e=Rlcj#jB=YfCi*tJiZkeEkq#+qUcZI&FJM~#qoq4F6fPB0!s6N}m$BLEE;2>lb@L?#gbzJ+be7a -&Xv$M9JJ4@Scvz=8e5=RdytTy8z^Okwc)s`Ji_`vJ4}SUS==fQG|A)Qf6WHMj$&BFt5jsB{s&4Gz4g8 -oPcxI(6O^#`WXOSVS5osjI@p*0Uui5l^jG_Svm8~Bb+`)|0A@`<G@WP7&QKqdIoTvXT+-f+O&~o<GQk -yFG7R?ld{968oKC+y$ww28>Q38)ooDqOF2&yP|q*7ihFE^h}(Y*55Fv}kTDx;6l2hBf!Z273UEeGusQ -LCE_GW^vMS=HjNBUrr(&0=rPO4H_*Wq#Dk5_G39rk*noK1nh6`DFk-nby?WFOf~!br^abA~%R!k0pzC -LahF|!kT8-oaqQ^@~I=c(St}L$?F!jqHP1uNwQ@KRt=y4ZFZ_g$WM6Rs@BkX)EP!&WxtD!!w+{i2zQC -={S9R*`?K6T{*J>J+8khG6<JUB;OqdA3O(&Cma_>O@hi>F==L)7M_8-WJfb^><y~hq&PY^ge?(0XmyF -064J=-#&>g=0l&K6B<P*k3oUS{W(3OUrs*gChve%K6YL)12ntPV*dR@kkwcu?9fu|GjEKN7x=Kmtw`` ->z7FTaPfWUJhA^DnvC^B=OXj4Z5BVsLxi$Wvip&ALyUNleCmD>5d@Ak3~!%Wsc_^Zi=FExE`8x@wjaC -!tpe^inn-IYZifRNT0TN+pX&3lC1KX*}yugHll|Y?>4`U3N=D?i+a?3QLt#CR;9s%-C^kOX_lmt)IL| -RDe4LM92FkDBQYg@zv33tt_Yb#TX{da=Jg{*8a<9txiLVvEg(S!TV@`I@-2Ftcnm1uP}3~^+&?twD<F -@D&kV&_9Wa5GMP7u;hh_4W^ZWNxQ#sMi?|_a!bZt!bPp>e`J?s>5Otwh<t3*nz+>RV=}%DHTxrAj-1^ -panfm}!zw&IeNB!w~S$7L71(N*rwy-LNS0+liHRBVd)q6%OsXou1x%p<%R_<k+<)5a8`s3A1H`FD4?p -@xs+U#n@gT!6a3lNhb1l?!$Fi3jJp|9XSUze_Puu<%gs6|;7TIx6BLh1b7@Qv_nn!|e8%r-Hqmv(UQv -$X5wqq{hWD$3b3^Dl9tcGw=ex~i7ypqX-X>C%=i8AH^fCNhaLJAkXYCWseb$ZZ=@C@(S$z5%^(yKQyl -eP4}C?p3yR`m5b-3~dQT(&>DvqKV~WnNw4Zb=;E4B%fy$8&sIX=9AqDElJn4;(8QPI-*tFN&5`1l#ej -gH0Q4}-bm<5<D^Dem{fZ<-ra$k*p_tvHZM8<3r#(DVI#2IIT)ukc=8S&<F!uR5U?nhX%=(PUj(imxS( -|Q7q$dRYbJ=iJ5V0S;n*Jtnmm*>76(Lumn{que@&UDVeSos(@cfYpAL4lwclEMr~B~V_j`M%-+#Yn(b -{@idQ<dgD$3-zeYWX5-#qU|A2!V}Hg}@4vv1Gg>83&zKH7BJ-8}!evgM!smP0O39@wZ&n|(gRx!AU*c -14~u>%<}4dIA2I;pVgfH>XXwSqC*%e~82>Hd<{99^gZ3fa^~=a(*_Y*nN2OsgQyGymS$K*^Sm-2cLE< -+pp}Q)lbeet5zJ!?_XNgIVQn&-HfzrXDZqWSEu9D?hf*e{u4i`nggNv$gO!y)KBpSQ%tRcq2?OR8@1N -Hz!;R)ru$HD=A*q2{Y-vK3>WJfKN@T(W;xy1yfAJB?KnHZ;eQ675mFWU<^`-f(MB_^owL^(D@wTbJt| -h~phZh~^-&(*T@8Mz|6&bVV`1)z8~t=@FElS$n7<C|tH!+_F!q>H7IFGh6#o;l<71k(nnLLx>8x!_YC -DX8b5}54sgEs-A=SW+_NO6r?Gj5+2uLyPA)5tTnjWbi8$r;;F#3Y_bQrEdvkLLzAu6mnR8FGS5&6U;e -~lVP@&tC?hSiGh`t;Y!y?_F}&;dm4a7*noJ&6Qt2j}p-DY9F6)>0=9T}NqLz)lr|2(DD8il&P3@G9&e -IrQ?=MDw2l9#E`H(>s7TS148zvq@RyFwc_k?OHHERh~+kQHwuA-ZprWC}*23%hLw^V|;HL6Bb1{U7Md -~8G-HQl=;<mY-;W8A<qHN_nzY4{il2T7?z+K_EcmH3TThPJ{;d445Oj7hME)R@VUql>kca@nDjB8ghV -3;_Exh~kwCJ8l{jc;hxb^EGqom7z6H)XNKREYqQAqzVzd{^B3a@s$hZ{wAlUuL#M05J6f7wyqXEHRSF -Upgrj)Q6(6$93e$Nnm$#6M@2L=N1%LIct=bJ-_OQmX-uIMGDOa>MTRGJ2>eG0Q;O|QRprx?TsCRFfA@ -|{u}vsC7-5Lq9XS(o(<PNq*K+mRofze2u)MT2rMrc>cm(7Z8ZUrAkx+=aJnO69kLK#&K-JA~J{<Gg04 -jBj2Nj`E@`;_Nb^Z6y71ZeB^)9fwpnDQ}$8O}Xbw^bx}X)R>7_j-ver)5**EBrfb*XhG_<7je=Eq`9b -Sp$(op4rttV-JCE~x?%#Ph-_T)#v@|d+8d3qd328KMaRiBq4h~C!vRkq=4Ikg7v;=oP3T?h`dyq*>I| -pM@w7;%Ue-8vR#XIWG$Mk?baAv-(9KTtoXi${i;$L#$oHcJIcw2uSWA0z4|Sp={HMTwl1+{nwOMZVqE -n42wuA826kKUM*%;OuHcN%-X?g8zkhJH@=qj1u<wvDy!*!#x@gY*pd81&GPhdIlo}!bW|4e%i`Y*1M_ -l@PtZ!Xem0Kz{0xJW8kAr{VHRqUPYA0En*-G2DZ*2Ay9l1;TmTRJ1cT)`Od?|eFm=kx^6tB%*=Y@Q9J -J@gD-r%h=~T1H|uFN!1^F5oa&OfPc0=S0F@IV{o{28kY}F?^*^MP)-bG&RA2!y3ZQSkBA3GeRW>Y7z! -r_)e%C@Y)&Jum+UBh>l?uUyW?}@AQ8AF-tLA7VTwn8ZgVrL?E7Xp=ExscNCGd85&BpV0p1g<_SB?A!= -)Wo2T#MiR@6`@DH{hKKk;jumAMTw=D`PO;4F5!pkjq+6lBRcl4DH_As8M6~^R8y!<06a#Dw*LY8=SWc -4kj0F~_%9O)pVSebyjk^B}$-|4_rURIn4ixF--le?07Ncu#tWS4K53=XQk+jQ4)zlHKnn?R#u%3(wVp -^YaSJ6i*p;7|x%IpJ^xa{}&Z`rbX(tt_SlPTFrB{_W=%`_EpsTr|VNG>li%62&EMPQ=Zw8Rf8ir-Q&! -GiIq$9m53dwz{obXq60`7Ba^e24PK05Ab9G{Sok4>gfY3I3<$jz;nYHHHNjc2Yz!K6pnda8<WDqP0Gj -0{<ot4x3P1nuA`Yte<xlk^^IJ*+fdeg$HPj`YQ4+oz^=bjv^+H#!QOK?W%DyH+{sx-mnZi?&8#@GXU& -JXCYg>~YOe<MS6vHHLyD$}Vh)=dcx!s`_%`a;?jx@#zP#$0GXQ5sT^)h-#sXtM_FRpfMz?lr5ZuyZYk -AgCV=sZ0#LLCj^>a?F=)(8CnL|s?>4#hFs7NpE=JEnqiMCU-<Lc)c20&o#5x6~HQa0QLQ*~LezFMo{F -*i0^M}`;I5s2Z5mA(XiMo*##uEG*nj>rDR<<%RZCCi(|gawN1A|eB;a0y2$z+@kPpfznePCAql0Z;lZ -DMK3{L;EBJ3+&CiV;mR|9@E%;(yHBlCsUwEg$jZRXu8NTU6gJLU#Y8Yj~S6|c((fi{`pAu9{3u+|JZ3 -90e3&m_?8BI@zusSGlAs+Z=_26e$`UaW&1Dpe(oQ>I^A&T28t-PR&Z!MqFu}E8HU^RUJZ-iyJNobh38 -e)h~W8ATPfyXtoPUQtaQ{MEt{P}W?L@E1Ls9o>0^|*llKyaI%Q>|-Es^5CoZ{dkD&eTZDCIdF3MuJQg -cj!zHqGlaS>liE}tUlB_(jmNxM!LybK#bU2+)exOMiSKg=hSc&2TZeF_H)+<xhI_~W@3c1TT!Mdf_D7 -4*)g^|<S=Rnyg3LVEtzy}FNUGBNc7$aCw5syF%XY9hqT{fk|DcP#U+md3`d4<9~Q5I%N4Y;M}5O}yUK -?qz$W_44D#hCuquy|9}*5P~O8aoP<KDg{=?#}5qE0}$@W8uQU7M$uY#fthi}a-*3Gz+Y!wo6U;rIs|y --N_G2uw`uweoQLbc`EyGj-GI}^JT}XbqWYg^Z2fxQT+C^mRuR_Pf~ExkoGRRl2e7DdB=D|rwXW{gP1^ -hTu~oO~`HMJwm!M&3x8#MhWYp8ZqQ_4?wZyVhDAdJb+<J5I!Fl@e&4o9%U=kOp!$$yWcvMVE4Jepk3D -1lAJx&)OxlLeVOAvN;#9{6%E-^<YBISII%`d?E>i(nrZn#rIZ?%;_+Vvjv`2b$lBcqO3-z$NVZ{SAXD -^D=OqIWo>O9{oAV{d`&uU(b`8LlOi1Z|joKABa-G`qSw`NcY{8)^<EbhhL6Xe)Yjju*f&8sl2$JcFro -*M?hBXIq1~bP-c($Z_kZo%RPCaUM6&jcRW#nrbo2^`5TVM8{#;;?YP6Aj*K@rp@)v@Fzf0Fw47j0DoZ -);2MkOaJwsx|9bJp!;j_z2YmK$ryi$r*|DZ;!u+p1-RYQV;58bTNfYocthRasOV(Q>pbt$Pj#cpw2tn -jrom-|4y1A=?svq(?BEJm#X5&gXB-}AWt(LI2kS<d5RI*T7F9e8h^N+4>-86T7g{eHriAhzl!!j}Q0C -BooF3$A$^wa99$gfQnD_^FQtC(BT_s90GaY5GrIZ=z8)$J+?crY5#HyO^lZ8jYA!K<M>&?iwn54+PdE -=IRe?f%s&0sV3ZxEyS4z^=xkzJJ3gu;<S$@p<=<?F$s}Q3?<S<`HfjRLV|Ssn`{_qct_MWUu|K<K-<X ->CMpBtP@0q6rfBfZR_3#OeksF><b^|RbEtE!+9kkyO%g03<ho2QUu?2w>yIYTL<Wlgo!UJCUEq;K-*J -FiNuWuLYmp}g$RIe#=nvMh*oP-c@D{cxC!SEG_m~iO(D)&6@=<}?pp2c>i+n~Kf7fO&Md)W+I_Z%T@i -M%Q$7vsLL_b{?A0ZXEgL*;<>b-Bu$W{fC!?*bEYU#Ioglh7Q}c<DAYU=1V1oj~{4%5HqZbSDL>W!ei| -F;Dx`NWt0I#g%qdBbQ$5&M~D|hbSALYZcH=_c*ytuso=swga;$m?hBpJ+!^JLKH6@6&kkQH^I+|w!Lu -8rhDYb%>S`}n}l`}6C^SmFtAR<Pqb>ata$?)zLMoT#^Whv%9C=fs2-cTVLBa5%OT$YH-^kTT=}jCC+j -qg~{4XsEnWzCm#`O2^}*K!wTifs`V+?Q+f@WC#+0z%VtOPM08|)^wCdn5t`Gd{*EMMm;;08k~`c=2PZ -K<ku0l$YIFh(mYhSk`|ji9*QKMWb-L(6kd-->+Igv`Jdm6?!D=~aRSxffwJSBNX;}Ql+E8I#dwlmqcn -a0w|P?1nQ{N&*MEBS?YH-@^6RZpz6C?sqGh{<@!z({n6O25`Ykd0ms>cnt$0fo<(65LrlVrmSKWO1;X -(JykL~@JzwbZ${n?-4*Q1Y}_Rssj|NP?j7k~a)ejon)`{Cby|J$Dr`M2u`!0Q6IpUH?r#K}4|SrhOav -Dc7tvQ;ofm{LslX%koGB8iJ9Z$=-!{MgyT-&0uBSMcD?=+FFM6ffkb>j;5M<e2w?L;%Ly<wH?HY}O`M -HZhd9794&g85_OR4<)O_ZZw<qq`Ua9R)Z9qXAic%J>Try!e2pRrSC+0*}^=<WP_zjya~IXT73==k=dZ -TFRp(9ZFfot&~$!4A-=f0I&xZEevjZ@EQR*637B>AAW7y#n&P*Nu1P#z^h+XFB^s%CDRBTV!_((_>uX -eFY{c<A8%nO)t+eb#CrM(F9bNslBvw@#lP{ljG|nb*7Tbvud4ZAZpbB}<;U{rS;ph%a+y*SP(@AZ9@m -X!=*q;U}&fmDGb<vX+wVMl>yGl1}`>5fnTZxeGR132%YOfiDjn-^a2sT%_g{*2{>jLZVEDffp>ZotHB -l%ms3e5rPcJQwqT?mGE6_-%0Fqmk`H%zMs^H+aQ2yJ<Yvbx>a4bxM9Ao8Yn^AY&^51x=yn8_wPI+Mm} -yx=IJ7l{e=Y4X}ACc5wrNIpK7+noOZ`)k8y@QZmHpr(VfiCJiRnv}qMRtG#ya1>Ndn+9Lj14OKBjEAw -bAp-ap%E2`1&x#xfNwv`DOrbJF)j9+#G#ITyy<D=gf|dXsyw5cQ7_y=l?+q;iHNs-tC)74-f3Vy7qWI -YH367#IOAsYuw}&npE823f9F%)yaXCO~v;`!_x-I%iv96Dko%RRd%X*y5wr#>G3Vy77O>f|Xe(LaV=Q -G4v{1?$=_!rPzg@!3QGBD`fC>>U=L!YN|L*C$RH+qMh@2Hnn$rRIahPKMtTjbW>HRxBWz*Jb2=ihc#Y --E>>+NUsfUh3WZ?~9q$2r1_mf&<*+q^=@L;lymW5MVQ*OtiF6&vLTPjt;bg=$%9X;RIX6jH{%W9G(N; -j(iNqB}b~ASb{WAQ|v9urQBN;)TMI+#{3RLAr**jG$51X2mPohiLfQ|w%=Ue>+H09cmLekX?3VWMeFg -K?I&*@KE4lsyrgL4mfqHYdVZ?VcI#?;XG(!l(h7Re>bUjqFoZH{J-*t0VhTRK|Nq+i*6lWqB+dVNiZa -+|07xK~q~sf0^fV>Wwzefvt;=|3NE$2x1qvpBLRSHzXi0tc9rg|PNj7eI&nf^E<#taujx7RJnUVL%$j -FE<;HMc0dsLQ6EWVtl%p+04#`d&%2)V`1fq|DpBVy~Q1Sk}Han$fIgB!`Xy{?QIuS}|`dX=LEDD|omE -d!CtNyu!WMe#2D%XFTR9Q}*lA8nm<VFE%kxplrgeI3e5RG_&;(^{7m-YsxL{IGSi)aW$-vdBSh=JP?I -+N3Yb^qY8w9>57_GMcmE@vlJAheskxj*ipC>WKm*At6@Hdak$P?MN;)mb;Wz-y6&xBB82hs;-O3%DyS -U==Xu|Xv+qsQFciEjq?hQGHL&!gzi&<zxJt2LO)w9fhcerP^FuWrCw$B*F{EArR?$u#^)@f_@b0fN|E -+!4du(fJZYkGqtQ4$t)>9)RdwnsI>9Ihh;2g^t-+V#{va)AIn%ld%8o#4NTPH~3jA&tQyyAT&Mhl2iU -O6`e&tMW;FOB1+!=`Jpmzf^3dkr;j5E1R7?H4(lVtBZ<*;o}Osa{gAsmn2f~aptJmvuv-(-HB@UwvxV -?>Sa>1p$L-eljr=JAxik=GxEuISGfF!RD(kv^kWk$vv3s2XrsMzhhhAb@E9`fJ&B;!?Mo<MNlmFloH9 -Jn*Ugjiek8ei=5cZ46I$<Lq58QqueP%}(Nu;$HLP$Dn*eB3_U8@9l~-xF#PzhIJ|bI*!$&fz?o}dav0 -Cdw?^p+6&AN8x6H&8x2`vR`=Y}#7lcTj*glEx#r19)q81cO$xh0x;|1Jl}&97m$;u|{9ih_v_P^sp3` -Y>-awcv_&KGYQ}uI5KZojPK|c!+Vq(G79F>dF0h_UpdD<y<zT#D=9>rDt@)V1#(olPhO((;3Wfkkp;Z -=i>R5FK(Qf_;l_OQCo9<J48e_5l)q(fdT>yN*f8m`kDCj9$BWnZioMn!r7ub<@`-aN~63R=&}_^YI|c -WS@gklcHKlCL*eqTPW7**~!`XZ9@Zk-$W_G9gLhm9tFKXh+r}6!KTQj#mA2YP^k{<Zm<Hff9D!B`il~ -I&28GnOx@6Ifrvhr&pKhRZVg9ql^4?7J5QjD=c!Tux}D9!p5}`xuN6U=pGTAQHh4p@rE%nWTEP_X6S= -vT1|Bp&~goD!<|AaHk!^70Vjzx%T0*3ZsMJcMu5KDqccztg}+pjw*&UDuEXIPoZNm^o!YCC{mKv1qj; -l`H>{!22vQ1P)JZja@Y7Z>Mfb6rWhuX_O5l>w8yMP3s_*s?&s_hL(R7*>J#(GZXt;|&HQJq&PNq9#|N -kCHe{B8x?tA0Pr82jD*FveqhoG!*daqs-4erNoWl`=^GxRT5m;GFKK}Z!1)LY%QTV3t)=FBd%%3jifm -_Mg#Qs|s<2P@D1xxqWm>-I!YrK8=^NgHT?QJZMA3yIq8xYG-P453b%VKOROzKL-nw>rt@c8I+eK7n=x -8X9+qf;r+`U)t6Stt}78P)l*)s9X7;zJBuR@sr2T4w4V}^U>j}{U=Y>9Xo429{v1Y_EI+EWG@N{{}6W -h7W8=7-$<`jO-4^ivtUA)&}Os!@uaeMBav`EcQcQt$B}>@pRcLzl(D&6WF;L%6miZ%(K}tc6C}me*9a -dwJsQc?z8%R_vp&6&%|;nfYkHfHFHY3&HbJFql08T??fKqXQI-K?+j`&p(B%F$ExTy*C6{(z;4>!ho) -4{nK^dn0p>;g{030~%H2lz--ZRTPOtp#+@u#$Og_;Moj8sxTipM*Q`pGT5Ag?oZi6va(?N)o=zQSF*f -7M=f)2?fD<3=Fy2+~GDvHF#{T2AI@q&%w}IiGwOjHQ&DrP5$Z!wrkpF`E+FHvw(EcWD@)VJD;LOw}!- -iuuagACJUG6s^6Nb|Y>A$yi^Px+|$B=2|H0<44C^TXy4$AD9J>_1Ev|KGyg^_%o`GiEq$|BJAH#6nFl --p#tVd!8tA2O*UhPrIWw|*qW{dTG?03QM<~k?<uC1(GA)DSbM|~hcn<V+ir)>hE|2#q?IWJRNbWAX&- -HFuS|Jo4a#?`)9RZyy(xOT5Ud4Qo4_w|EaG&+r?sw^t8~5FhuAM+&&GQ2Gq*E%ypf1GlD;>IEDHRni5 -frDy1fJcYAYuvQzzu_6&_z?S7G@!mCy3|<LR~Vo2?70+rYAJvt_)AWQGV>Eiz6Q@J%~BJ;MLU-I_&5m ->*u_)0RSX$N;0r-;VHJk$h#y355W*5(JfzSW4}vI}4EzhY?0394CWO8Guihj8d3RO^A2_U}C{d;D#yH -|04Gw!Y3uy=q|^YQK9h|^KVGe=o#;L#N)o5v<$2hr@D_2419hdiKP8UC(0frA_p@fpwN%moLu1;<5f5 -uaVJ?yEu>I`jE$`7Ntwls8<;$SCZhjO4Zfwu0!F0U6c{w#mBXlPa=j_4%hmi1-%?WeqJ$wCs}K;a*#= -4cyQ@d)I+IMnbUr^q{NQ3-cE;u4;+J8k+}=s<-s}A7i;d3C_T5I!byX9yA>u6O#BZD#zd?Td10<T}qR -GfzOD=|>&D98uHvy=4+bQc|tf<wl8i+%b7o(Zk3*(ZgDhA%_*5OQ2&*Q0IYIHp3v8Mz1+}LR0dA@;gY -1Z5eLDNVXP5Z=Z&}l5L{|<r2+?>A&w3vHjaSE_wYt$Tqu5-fC)3V14VHxa@nT%E^qQcN2L~7EnDvmo} -AZms~>}VHK6I94Y^e?P~-l(CX;Wj?y2m{0%JOgV@+AR(|)>Xd014sh`A*l7!ihwM1T<nHwG=(VqfIv~ -i+ZO^Vtd5xQ*`4oIPz~hKzEt*7thh`hK<#~Q#5B#^yBLwSn4smD@-;WoS1Dc>WI1P0($9+&Hv6LN3LZ -QcfT>x68werj^fI3~0v&tUEDFJdMpq63i<!>5$^_5$N)`2iC77Yu6UA3{BNP5n$wowIM3!jD@$vllxH -vwZHV`pC*+&F$4uPnJIT6J=wj9+71Sy8jFA0!exf3%uA@e@hxu1S`e)rUbmvdT-@AbGhlE!Y*xc~C`c -b0g7CM)>#)&2wb@su7v`QCk6(9?%6+^0i&`n{KSv9-0oMQ@%x@C#jRfAtN&JN)6t{inT`&-Wi5z&`Wh -&wjdZwhk!W)5B*!96oux|E%{Phd&)W>AgI7zW-wX)uC6F#m?3i6Fzv>`^)S7N8#&je*LuK^^VF-bqe3 -#RoN@v-{b!L@x{Tx=JSIWo7E}5<Ze5B{bEVNuXx}d|L2l)Uo*kSKfHc%P?hEzO7r~nvxl!<@4tF{SlP -~Rr5%qeQ|wcUANL=>s7mpGQvCP9i^JYej~~7Iu_E2h_dHD^^JHi1OMdzEY4Gl@8tTW74i0~KvH$$X#} -C~SK1PIS-qtRS1e?IZEy!TYk(FH;*^`ae5O;}Z5HE#{m!9N`fx|6>6TaVZxV_Rw^oa-b&Gmp@<7ofy0 -3VqWz1xv~KD$zJ%6S7f?`_|CqB73Xx0zMBuw5}_v6E!AkkW?Y|0H?#nm%SS+BAA*jE_K`aEIR-<IfDE -WlFjcF+_LVsuJ4uAh1@H+^TS}YFqw~AiO=7V7?^2IYL~(4A<giOV@nG2}`Q=L;fm%n2#5eY0Ighul7T -u?ZMkr90aVuMSaSQsy~iFg+}pzw8AwJnR$9fa4|(j;1XrONXf9WMzz8V2B=SSV)AQrN?)vyAgi?$i;M -=@TZs&Fgu}<BARidneq+eY^Kr`=-?m0>#JIc8bXtltCp0NHi`&48WAMzf&M;jMH8hVgF~td~yF=pj6l -zP>#V+fPN`I5F)7E#1t0ajx&0#BM5q&!EM96SG1H4MwqpH$<S22>SFown}nC*%=XKG93CDHI1>@>UNG -3B6<da7=!s@UC;>^bAH%b8F79^=QZ2LA~hP+lSfimqt%rFv@O_;TE)xsEkXAqzRu_gQv6noh+jB_&@P -2}I6oTDd?v!N4PGV-Q!cIn8GCSU=m}-)C%hGWxTha_n^f4Zp)kcG%hU-o7b)ptG`<%sd-k#Zy8pOwH& -JM=<iH&(MUf3DlbK7q#NOeAvUPv^^IJY?U{)S!q45Q8^>sPSP|DY@S5kI$h9|8_#MkxdvxkCPHGoQGW -eUtB$ZsK3F1dMBQticLy+&Qw*Mjt`?qX4NPoCC_;jU5*M~TioO+WD8cd;4|5c|t8pV7pVn!BHg0h#^( -d;=Q*2ur+|?DS;oBJ20J=<zI^IZxJd_!|<`G!zE){+Up)8^Dq%jDxtzJc;)sA&R+%tWBAvdy(gb2R2g -k^<a{=^8ixZ)3{gDR<KH5Mrjcn)*aY9WU?3fWIz!Yi(|6;@WqJAQho*;UI;+Uzg3>rVm}O&n<{Fa-<@ -Z{oAtOck8E?C|9zs=!YEw38D-DhbP|X@*}pYc5wo8eMyKvk6_b6mUHuKyUd(<ECeJ9c#x^#m&vOF9O! -C1JOV?j0zn#buq)!&YP?t?f5Skn#j^dlh8~eJc;H0oRyNOZ4v&u74xhAw2A0(N_R5UFgyCY7RL*Ozt1 -@fRGBwA2WmOa?|>l)h3{4)@OiljUTmz&ODMeWs)q{7?_8gB!~~TQ_=>Eb4fs9^v5!5_W7n!E$LQ;5kf -h^Z+ur1MK-e|~7S1M%F#>R^?fUfe_zW_gWpC2AqnsjthbXrcELx>E-J(O3QgCML&FQHiapL8ZpzqH0@ -hM=g!gkIw!J#NIWG~{;g`G!4Snyb`Mls!@l<aoY(c7HhVf?){=X5GmoNJO4zstPYbHak7(Vc#|x{zZP -geMUFyOLQvLo=hfbfRn;91-_(ZW~eHd0SS|!18Xhf;<u%J+APLXZy{z51h=aNy<yszLu8V70)x-ta?U -bsbBT+6;G5_UiFa`&l-}7RWIuryCSyU;kncxT=D+axn!L~N+P6>7XQ2}d==ZYC>PL^?WTCZGR3YsrHn -HUoE3(|Sd({LgKsdq`5o~Np{Ev7%K>Mzq9>d|Ie6VyF3vb344sp<!`E&3<V-AfWr+ZrnQzXDypILw#U -waX%a=_?x_5>1@EDj3&gvtl=o4sb`Zf!(rR$_xmBZh#xIDCH^$Kz3k#T9D3>|%OnHR4@*9J<1^AfFO> -4$4z8Ir5;kuX&RYV4EI8>5wbI_5LPLmV3^!V^}*LSkbbFNwY^rKd(`h1T2eH~6|m(5+xzm4X<i%*TN@ -7U_)5!=G?#{e=qKP|K^3)rmAU@tNEL1Yt+*YR0`7s{6X_kDy&JG2bjok?N!?6eNi_-qm&FipaQ2>2Ob -wTb_o}TSCU49ei(+j>pf7jE|s!)hHYr7E19;`rXKSi^J4XSx388z?*b7L$4@i7dc{p)uBupB3;SIS=< -Cl=Z5A7i3j;@)y7mJ(A#r$xSb#mIZ!io^|Rp?58ln8f@mw}lLw(l*}07*q!@8!@rFRjW;A`9qbXf9bM -9O)qH~3q^pUTIma6Ij;)6Ep*1FuybV416>7uT))i%q*ymy_bA_*dkxwdw-L&*xG&o`C<{olo4hOLhD* -WYb0SE^mjXs*f~Tux5OJITw%j5;w?dQ$>7f?l1$fZNwT<5{aq>~3lKC8K{`-OjMQ9%~KDlJcX&vc8=c -fkq%}?$P4t_23&?#Pxa~(K=s+#N_SFvCoHhSvtW}nkk`r{P|F$vv{c5L1XOxv<hmwci6RknN?)mNR)# -_GR?@fP94kl;UwEE)mfGBj!*GnOZ}gAlCyRv>BIknHUoZg0(=3_`LR_JUffgQ1y&Li8JUAma|dCW{D} -mB3<nG^?x_Y+Jt&}AT0~pp(M5KNrxxr3Rr$jL>yE5VJs}0f_voVyZvt-*Ygi+Jp?L}J*}}oriN8)G$G -BjXyOS$!RD&y>lCyssA4H=mIhEB{3ifLW-9dJ?IA3-WbeJvYQ({qaM~(&jVEZI=Kwc`~I0-%bwGXO5_ -jzSr%dpMPY98NOHk!T<_5bkUw1r%BlfL5(@ITCOR^1hmIkRx<I0m)h+~iven}lrN>gTHhB!E3^B=K?= -P46--Q2$VN@r!2|?r{CCrcUuL1{q#vpsy^;T>=;^Sa%D773sgp`WM8`#@TSLq@jH3p~*ZFV({iCu8;e -kqN|Owx7m1aCuUGSpCDpY%V{vqeD8seV03iSws?S<D=Tb4x-+0?|1d<2exaJ$Iy$ios7cUUwylaii)@ -oD8+tEA!P8ISNb2dN$kN40zpkViGm7bz+5ClB&@#nPqUg}Ucz-+=#rdAEOA1&}uQwQ_=OB{coa-&7<d -&KZNIn_#Sk=`VP08Ug3%LwVw?{x=nwRrYzq}?DTMR8lWbLWd&@+?F9r=|cy(rJ67mnJ))h9(WU{f=jk -yfVq^bYYlCadd}ir!J58m3}@8t*^uqOzQjaioznrIPoEP6X1@`;T@+&NxIKQNlKj23aW>I+8thu+zbH -Dv1%nmHV&)7)$piu8`UksQF@+phfih49<k8P8xwsQy+_;-i@b<Y&A+F>@k8E3y|C!$-{gy1GauP8jle -7^lF+<uO_9u98TuDh@?Y5|0IwfgWlOyZ<fuzY57O@wyQn*$yGSCcav^cpdLb6!GYKi<5zKNc0H&14ge -1Z9?$hmPhMnyU5v;{bUc>(Jty9($#|M5&(C4LAe(h74s2cwKwuz>CPzt8-_9_=fq+%uy`tq2OX;7cK~ -OjoC-d~Qd8dh*kQuAsO%~Fg)aBc>^L4P;{u{a<Boc~aP!I>a0J$Ki2x&oJNIja)vvU$)@xHM|_mBD|t -prj+%WJx$EZaxh9UL1AH%SuVup9}=R%0|kD0EGv)xfX#NT*28;kR}0-rxuYSz3<ZV0T#{J_1Ih-1Q4` -$^hvhC<LClrRd2)Uw9VvNC12}&u1+XA}v-Lx!1X!7Uy{HdHdoLzxlTh{%wt)JXAhKET`S_SJyaLOro* -5994uB_&uoCHSVdjJ5bvlmiQf%qqN5oozpT)MYwq$z~(V4$pbuz?CC6C9)+s7QO8`9aPZ!_-0sA|x;S -yE%Zu-xs8thlE;+|<`X<EAa9)gN^PKzBX}%{W*6t~R4B1i<KJRdk9F52jyBcDuU2y=lKhTlt8sR0>`c ->XCm2bBiJ+|J)ILq;Js)4oe!#BR>vbTPN7qk`4>5zX2q>{Q@6IebNU0^uX!pAxQU{()cclj4dqLtXgb -b-E1uP1fs8C=O~n5}RQ$BwgmxIeWr|8YddjUuD_xQa@h)L~$Us-ydIk7OsgqG}s@M^n4T-)>%fCyeZ; -8ZzNX#%(rS;_hpAM62OWml%Rnx)?9@kMyn*U4+dwl)IKb6|I(f&v`lE!nM?vHB(ORnd`Jq>J(&2Qc)F -A){Wo#dhni^;Xxgz!Yf@HkOpa)_GyrfGmwgCzwb@b;)3LtXF10(jF*Gkgu6$0g;pG+aK~U>OHgJt7sN -BqXu61>6e~}r^m4s%QJ=c;vC~{{obXf8J@~OGp?AFX>yACLym?h`p?*rB73uVPRpe0?n^bxbkz+<^o~ -(K=vVn$k6t^Qm{UOMgg9qche^IKa>a${$+eUsmCp>uTi3a*ze^FGu!p30M4kp4z{W_Xi6Srgc+V-wLh -c_^|<l78+5N4;y>#()pt%Zr7M)FWj_W8*;&+)V%LE7CmdX!su{c_3C(HC>dq3<^px{ojNW>e+-=e%IA -Gvtv`fo(Ks0o^tasc-P6K4&mo7m>M<O))%ROK5~s+r2%7G#$6q71JKaB#b*)Ik(5@<ZO^8FkTqWkOs5 -2N5c-iK|#@L<s?i_;ndLxwg)wRlVfZta&&_!P$Lgk=oMm5D|&EohU*Gy&{YO7VfJbEZr<Z*wMRc%gkp -+$;jl+a?^wrM*`fhv>T8DcHKKzxwta?t0IB!sB3M-Se_b=s4FUmY;RErYM0$A6_n5^wau=RyR4G}&s+ -}->L3X)>lw;_q!Ie$6$TpSnqOlN$5@uq}o<k?1%&ihCuN(Y`4>)R>#vCx-6}h-ZaV%@U#T}<jd#;#e- -TSNKcp!?!L<L}YKEDgh+Msb=bIK3RAxQC;(QS&GG-5koRnC$4^o)${`ndH}(~KIt>CVSyvbvM@Rq61m -K8_rL*eH(r{N>ejp1#uuvkE6(JiXPDd5~JByfl+47VQk`+e7tJhI*)8uj-0V7aOf+w}%0=dYL{?&LXT -t>Su2BY8n?UrA8bxeQn!kN351t;I#3B$S04qwM6giS(JQU<*jE&M}%8h&#^dKVqjEZ?CV^H$4pN>!=3 -OHEA;E^e5E~zvWnWw3GLP~&g_~?B7Y$Lq}5FOTF}2U<YY7wQV-N_IriCSkoqC!dcq9SPkh~*&7dl7N% -0tI-u@NNG~P!|d)El`fbm=iMNN>a@HRY)-e5WiV;ZNw$Oen)Af3*I)ccRt@m1iOXn{>LMn@I!82EX#m -F(`?Z#NYd!TXP%x3;P#=i7FUl1e%HzCoH{On4`0U|0vaQ8+BBFBJ4$0tbXfG;R<$D5!4box-T(>x6Fd -n3==;GPi9T*^j5gekJC9jY^n^`xCw!=Lj#$M*`Wv$rng&_`6H58Gdex*_63zpr27NZlj7jEQAaY&{<7 -VI7Xj&*9OVYc-M4>XC~|6out`C+!OQ2N91Nw9u!Jrd*^O)x4V6B`>W*ZZ@#Sq-9BnU+9sT0kD8o;ze6 -rNqN~mBeiLtv8`Ka^udbmXjBB`9)b$?M(ppOkb{!>G^vwNt=`0wk{Ze>2)3F|XLWhSUi=R%}V7byO>u -_TwyDG9}W92l=6|8UcATuGM>Inf-ZEkyyMP~HmK*j2uyPaV=hf2E7P?Je>*U_!U2F2|F3-W9kX3o-`I -V!FLi5-&K;B8!RBgwNzjp812w|h&x{vOk~^7SwxGs45wq-#t_RVsR!zK{x&aepgu2{MI3cHJ1dX@cSR -8|kzUWay~Yhn#k)S{0V$MX~w;gAZX{#y-%stk!6HjfK2Rl5(4+j9A0#4kuzXY~YHP*3qk<=U}=1X(n6 -uC=+XaH8f%T;IlznqjG1S<PtJP7(xe?9>AQ6D<uKpgYr#Y%#}3cR)lh?DU1M6JJ7DS7Zrk2`C5Y_+sr -Ts2>NhaRX|QK$jZK4L6Rj1p%ig6hkU3+I7rt=7npQDPbtuh*q(dEOh)H#=ID72%|U2$Ix7Lod6QozlL -d4FJh+nn5IcE-zwA16R7*?fiPlASwFg_o<UGT8a;>d4p72QHD~u*~Qqb%>HYU?N87>N{8pwi!kv5`tt -?J3Hlo~>crA!R5l)Jl2GaX~FyL3K!i;jk@DQ6`XH&)5B3`e0JhvyeW&J+6&>4l@MlcUI;f^2F!!}0^Q -w`K5zLoU_{xeA%m=KXD!9k)${p|}|$CQa_|DXLKA_@drW3cTbEu8Wj2sF+c3E|_ZMLGG~u$dzyLuzbm -`4}(hmic$dZNn$N6)DAAh3sOs9V?Rv^wVd-)j(-r=PIaxcGT@QlNxma&&Klbhqn?qzu9zKz(O}wCO9u -LnSO)w(%V0vrJ4Ye@>>%XNlIe#ZGx4q3_$)*v`eH9>sr3=_{jZpGKq0oT%O=RLB5|bgBVvl?d~&Ul?I -xR9H$Xph3PXjpfG5d=ZF&&zi|T?}Tv8|5BtIWigLnc~yX{>w!8BsoFWEDdaTQvmnbhfgRCF_6E$jI}^ -F18`uRv`na|yQkXMF`BhiDdDLM=vP+@<DGa21bmiTEZXK|NI_x4@rBtDQ`;vP{nzGZJ_gp<_(1@J`}< -?4|LC+ge^U-@>7=+umiT3`_4C??RoS=1dfYr3mMa2g?gPqw;xmdUGz2ERBft)OOSk@ABfGLd$wsR4ZB -62g@goT_gE<1>K`k>FLrwo5KXfSch)0%+c9AT~Ccw946MLay^HM)r^4lr-QiR&!<=0s`^SU4NDasA+K -1$-Qi|j9U3Hi$>dCF8WGonhYn5*0ZUEkcGZ!8E2u(hHXcFgon>zHZ8f4YQH5rfQZ@!Cl9<R<G>z+piZ -_In`T^Z3mV00{Rvzja?~8iRi<P}DD%>dQT_`@;eL^k<jH~Zwz91mecarnTJI+i*b0pTY0aK{prF>6-P -pEY53BYk_m);M2aNQ6n>yo<x(<SPT;6v<=U_%UqsCw%3Y+r$>tyAZS-70+ethWkK$>e*GhrYo5$GJ-2 -Kf!&1)jAAKL4zje-?z@F(LjYQTdgtB>WDwa+AVuPdV!#6|GFh{Y5gPIlH4H9!>V0;6ZavXeVD={`S0d -#Wyvh49Jt@;3P!)Y-o1xZJBu2EsgJI9m3}Gy!WfQ4wsrg0@8I$zG@4rbvSVcp){5Gze_cw%FD3r*6)U -6ZVDxr0Sft~BDOX(O%0G#2#X61LypH9=zjQ4B(y_$bho67xSVEfr(y_?rlXNTxY5&a%+Ld*o96AINC$ -Z&l`(!kSwU8Vr?=l_AzpbW2fnA=$WrCQ|%ZIJTi-SkW;fwueKO7|gb@1fL;ZMmAFAff#B@dpwK1iOwe -)0Ut0es(o_~+!OA0NMh?=KF2dS-`ZdXvsF+QlrQFaPp-|HVP_@bQa>kp0z*$3P#xynMC)BKh&)Klgt) -e3l$Oe1(54Qnfe`Tn;)ap%F0s+9gmdU4Dz7S_DDrnd&U~gL2TqXlZ1IcLdbX>@;n-hO0)q-J&cOIqEu -1kA4wB`qttHcF&A{wJHohb{lpP_@v=D_8}HO&cdX{1FHrzfw65<c+x(}%t&(tvnmtjBXi24)S{jsu8w -V>tNDUw@Sr18fY7?24)jt*j`#Z;!=a)iVmkldtX}=M<Zw1`nQm#z6Wwy#>q*n=7K>>QEojOXMlEz!It -^<g(}#OlW*-e-vc0v{Nw#;kV!33tQBNmdZkg;bkvaF5Tb*y*tel2tJZ0S35^{RdQr4ZV&OJA$U-e4c; -Pu;d)Z{!EG?BC6H_nOQC^LSc{7q63Zf)U%4*mnAnihcJrc<W%m`ji3wc53ryrT*_kFIu|>TbGCycINk --GQ;&&w241WyddHZu#Bu`oQgtFHM8Ksp^Z@2a&GuGWs3yWzY}bM7n{iY(JNV-}1QdZemTmM9;j$oqCB -o_l~TVQ+B6scBlcS`xGg+e|AhW@5TFvC`UTT%jtK}PS8R3A|0eE6?Bng{~StSPet{+!qT`t#zUZu43l -8{P}ZPbuZ&Z%)rYQf82z%Q{~Uf<B>z>NXa9b#1i#H}x>5bF4g>B?y-1xv>e!y7=*&78^&@8#^qFTY2h -_zybpfHfEeIg)`PTh~WikXNnQ^X6^2Dct2KPrnl_Q4jOAfixW5FQDuMApHmrn8mM96oY<iE2bKP;Z+M -dsOiokaVZBs>B?#y+@1jfhMXJPO*WBaNhH5Q2}KujyFVauEsXqy-1aaZfIfBaR1abdcK*y{B?wrE}cU -)>EUD1pIq#)8RCe(OlM?`j%8p>Z;jfrjcET)hlslFVe|j`d}xrqMP7nKAAmHapdiXaP%IieM3>VA)O% -!G()A(GuKW+HPblJ?hJR*;h-LpnE*Nd=oc4RHlvw_=Q59XipG7Z_YnJ-+LQu#xdXwFQLVnC8h1yU;AG -%}yZv#N79J#qSdT_usmY<rTLTh64^iCHh+i*rHp0&}?#%GB^1Yc#yu#g?)m?SYN1Tj0TmiSOXlPz#-@ -A-frCGO`rClqEkJ?SU=h>V#&Ne%r#3(Qr(NxW|YHMss0PAj&zs+LR<f>W(VY=4RgZCBWwEZ>qOj`w+R -ns)04E9!~$4@p0OGto(u3~e|fiL@)MfmC#;n8_B8F8q(y`<4mmpDiMEso^$03_GEunXQqFY$+sr&1%d -OT&B0+){%n@R~Ady_cGQY<nthM?04e1~iWrQ{MUqC>EB+^NKvD$ZbZz2N8CDk(KIFF}BIvse=m(Wl#% -a%`7%+mzw7=P)dAJ_urxcC;WNcHL65Ym%wASlNds4!hyK;fJVyKKvPddoYXgQh4^o4Tp>E~9C=0@Oy5 -wauM^YJxeHKvPCsLC$KB-h6gu8je9+nZhQd0Ap$aQc_5@?c!B=f8EO^3o4Y)ikH|e`pl{TQ0*x`8n(( -2R*sy1|}$J*`+w)YWwZEvQ<xy$DyDx<EExvlC{7E)a;3AAWx;guEJ)0ed<pcys|lEF8g17S0zfEu7Oc -bN1#5tloAQYh@=xUGs(HCPc(n1mPaB$mfjPpC{)@l{xJwGxIbk+NW8J&0I(9Yuz%Q6t3FZ+wKT#(@ph -ZJa|t2~&G8u3TB`S>&8$LW;p4&K1V6{oK-QT`Q)f36^x?sI+3SRc=n7R6q6V3<P!dW&2nRB(B=pFGM0 -ciy8Z!WlM~ksHTny--<R(z6sMa8{S6=9t{=KSP#UFh26ZNn3k&zFcoNVCNrpBXq+JN?;)z?N)aP}4}J -B|6f|=6&W!cZXNVwqjnVytaFU<nR%3~5!24Z{NIc->x`2366`Uk~su(|gp{Di^3>R!ztDjqg=viXY^} -zSm?X9Iqe7d*(X#>B-V!VZ2>Lzh?vmDyPNpK@$cis4KpEb~{iSznDG%}L|pWTX_?Y%fn#uiT-dpkNK+ -g}iE?!^FbM8(joO=xm*eO{N@a4}}wbjCAI<{*b7+)hCN$csLV7|qcU2*V?`_p^yn1lZ*H)%*?oDDy?p -N4vj4*7kG*5<!TYyGr<=A{%1JvR$-7TNXPga^BH#DTj?r1*YVBW48d|#blbimqI=^LIQ~Ksv&(^E+qM -`0TV}ss8DG~TKWU*9tbt`J8AGaSBKqZZ=&_zd5vEdM9D+$?<BWl0xF$lI*CNGtBs@-wT>}rCGSpWqe5 -EUpnrLvbqz8|2heIb%amj882o-=t|ODH;WJQ^c+X_?(nxb5g?w}0J9zexX!|CR)YHLRWHJI*rCe{2wE -%bBG%OC6JzILh#F02l78!ENk!@9wsbt2nc`@y=bh|Mg6G%SAE1Js$g?A`m865_<vBy}1Qd%V(p;e7C% -iL{GL6dndMv#xW*QUN}W=C+D0_il#0^gktF>}y>Uzd4tL1Ukxax^Wj-0`AKHFouAT8Bd;(GbeL7`ztu -53Voh2wZh`-Vi-*mSsh6kj-KB_w3V@V!MW%Q^pi8UpTo5p%u`wqLTzNMz7)o2t(ZyCgfH{@kP5vc1Dg -j-aDh^w&(4V)dviVne2HL)9hr=S#33XGrJC?zN1*rESu2Rn&kdsHSKiIP^Rzi?6Ezv>9IQw$>@ktwaE -5k*bu1bH`zP9QZ;GX?W4_myC+>Zt|F)W_^0=#G9N8QrTSW%RoFDFiyK%Xuv*W1i`clfLRN*&`K%&7m= -0R5;=maScj{agcwvlvM@ASmM^%$jT{F@~<4jbMJX?~s#a#+rd?>aREw5eecGqxKZ_MHgdEY}ZH0~Pvb -8i33d0NctWxS^fOVLJt@Y&c|b`C>Bw}p&*Xtb+bHQT1!E!@IP;P%;o2o0O1vvqiKL@!R(r-x~Mn#5g8 -Pc!JsiR<4XEfWU3t=LmiTNm-4sQ1O)>WjT(>l(UHLT{yDsxZQWT3%xRHbR|)G|^PF2BlHYzbCN0E}MO -YJN?q>sxvU9-J66W@g350QW{g~;WKCWyk@g`Y$n+LKFbqG)p?5hZ}^7aq305Iqr!aDuOH~Fq+<qwW_% -S-iEa}52MQ~sziZjO*92NkWE%xyW#+>k)}-xWi(sQX0iKaa=9P{YM?|=jG)?;~i*@tX>4B!K%KrgthY -l2uOoK~l`%{+^&C45HNZ;q<aefJ6$W=WTf0E}H=^OMzpD2?b;naK@=MFT>i_glZr-uINDU=WE?KZUMw -wBV>x}uACC98YujxcZ&)soSioi^WQ#b`KEh)V=Q3ui=pG_ZD$>ILsR=Xd?;QvP&&nO-SxP{^B17a&u! -n<$>f5W9&CQ*2k)lF?W#%M*zxJ=VQw>V=?A=w5morS;o*v{0_6e7xxQDV8&f;z+#?p$VPXOdE_o1sGa --mW{dRQ1?G)^eIk>N1-%n?i!z}K{`)+a2gmSZro>`fXVGy3Gdi*322$L=!>SLad!XX+;{Ya1EojNMGI -=0F0Sf)*2|}Rl&MYfp%ZkinKa4Z#D;p-MXEs6-d4WUEsR7<QkynlK{2zd3qU~xEtfHZRwBB_XN;a9d3 -<CFSQUNg=9u0ROrq<bz4eirrC^fh1vZ*?t8q40KC|dHO$K1XM)ah&&8BFHS@bX2f|nK?c}VMJ$G~TqS -$1m4S*yXUIZd*M$15kY*|Iz8y@=HnGz`h0Ewj&)#guDqY@OivmJL>8xMvx#!F4&VDL`>t+(1^~xA;z& -)wTGo-@l6Avd6u|$Bc4ar^?K6Z<#)fa9wfhMnTPi7#L}Lza%&9;r_BYF0(&1<%FTaZ~zTB!k4nNH=$~ -n3o5l4M(9~+^zwKEE%OkioY7Pf);>$;M7SlUFnjPEFEdV0F~SjgNVn1cb2M2@6m}d2>3ox-`CF#VW1! -fvnJU#)F_oZ<kB53glB`w(N7&_R{FQN?*g>804Ul^J=j;l(^l68Ji|WU?XPn|A^?)pTP!BofeU<c$sW -pYNcWBjzI)7<1gX|OJ;Z$)5>@?=VYOIu|QW=(ZlS9;GU5-%ODmi$p&g=<0&-KiJTGVy3>fi)T-U$Ur% -O!6A>eWQMw%xM~!&tLx|Hp&Pa(*?=lDBCwLXS$3BB+zdxgUmRIC^L46JdJvAT^qq8ivx?AaDBFm8|ey -Kc7rsjg9d5j}15412iTK^Z#LK{+gXCsvEDdla$fX?xad@aRhBUv0V$++}(Vmi<pJXN*kh|#4)RLf!?G -roWlOAHBC8JGvib<n~n6t_fCDB#)!eCS0QEP*hyqTw?o%XDNsxUVM;&Ark_^mPbA+N*3cFkYcAm((8n -`V@9F-3_8vcbwWLDtKD9c}WdX-bUrlLSE0$5R!<5QqGcS`-U2xGEZzc;7r6|JIK>O)%dM^oCue6nA#$ -t+cQt>am=CFn^e#AVRpp-ctK|kP%6FC2NdqsJ0Z)+vnLFl2-xg+l<_nnT4m=LaTLbm$STLpMdW|ubfa -<>X{lC2^H5~(`tq76Mq%r0Yg7Hc=Sgn#l<IYEz#%fX0-P9LcE?dRJDn)?>(Tg;Ql1|iLBXx9PNe1S -WEY>hR@ksd>vFHz*SPED!y%l`Q1UJ?GE583UX#(ZWiqNRx|3|T>7O;c-$Z}gYC;OA51gU6xQ^EgIGD4 -d<vu*(j^G@-Cl!uadLqpIxG~Y>;Rv`8hWxCp%Z(DLcVk=4#uY#I5JIAmYNbP47+pJ_mY1R~XX#1jNlp -ezD_DR$%KAC3g_7iXIR^?97m7e5knd>$iW^750huVT5^GC!;ImIJB6Ph%{o<Q!j3@4NFkrZBR(|*>Ww -z`Oq^CV9mjrcv#mc56$`8qsn@NXUy7{51E9QojCNFs}QAVsQa8Cq$6i*e$S?2-Bp=m)jFC!~t6dSz=H -dzS-@4woA@Es5|l5Hos$`^7{yGkxGHY?hU;eB@0p+;0FI3m4ydRCrRO0<`iYNKJU!WqG6sR?p9@b%4& -@h|0IxV>|Cd{GX5`Gvn-{PN58&dyFFs)(MjBYKsBW(!p>L=?3!Us{UjZ|DsdgYUNOm)r6dipF<4cVqh -L>#9qv-N~rc*d<HiKrh>mRyLi7Mb*<(UB5IT#BZs}C$W4-4YL{=D4o-{XhNF0lqL*A?NWmoPwDI)P$G -ln_wR4CbevPzfTh3#N?b8fO^`M~MHSOg+0?l>#|b;n`1;(J^E59zGWE5bc|z9!m;Ff&%>_ZQ-JdSe_0 -V6VVTWoCMrDfZ$>@IgEVxwr!^N$wYrkpTk5#%TpevQ``{Oe2_%$aYoFC=gB!5fF(v;%xS>SwjK37%G+ -WSylzZA*uZ>u5s?LT|eNe*9txP163!Eki5)<f8=$IuCKgz6*>NCasxNuyiNK-g}z9qXQXdco|QukUj7 -;-zO7Orj))X^!94`Clv*{?@`WK42*yu$;DvBH(jgG&svrgnla~2^(feaw28d3i|pg=@*MZrgGWa)Fy> -tT+C*9L8=eP{3a`5gFR<t3FT(Vw74TN-y5hu^7yL`-BOIE!_m7QG}{F-Rn-(p#;Nt4q@`Pn6}Mluk5J -2Rw?d%)R78#<bFMoY-3C45ofW3|aGa-eN52xFAwrRV!^3I|GPi#_mHh^+2%2TsZNwWxbq4MP7#mLQ;< -F;3rRNyVa?VakrA4lS#!AP`we=?EjQc&^VJ@avM<w5N^hwv)N8hZ=TDK1~ge8|Lh(w`YKVq%6{w1x|R -ORobv)fyW<&Sp_59`0Z4|~gVrFM~dYPOvk)t%YwtSL;2C=ck(5@qO$E>z`JPJgA~Gc<0y<PNV-Z4G@P -6-3eueF0`GP4N~(fYGMAXv%OkOrT2Xhl#4Seu_j^<x`Cb{N+jIsaJYL<*{%edbzR_*k`CEu=k$I_&5H -7W?=lqcUE<vWNs7^4O7#O(o=RGzGUqtMc&sV#|Ko#Ye}4*Kh}?R9&#n=IUQsgZZ*^HcPmfeNZYf!%_V -27Z|$v4-ETNyr&@SL#;Dd}L@ZHaNqpn^UZP+z&BlMU_f42ZAdn#rOndzrS4CD24>s0-tN?5gsD(hdd2 -HP6fF|}b{_lI@Ik^}GDuN?Z*TA(JY7um+Sb?cjWF|hnKk=58QLWR_WMd&~c`RVZUOpU5r#8H=P`R^bN -Lm{Rsj^z`=Gn30j`)Xp;3QQzC48*H=bty~z+x)ay8^;)K-pD{j#Z)#tWD*5Q3o`-iVX^2*|m2S!azjT -8uWvH;b7mmNG#C|jErL)*(+0hdOvynwNj{qNaOLdLO28b+)PLVqJ(XN^Ojugs_Z6&fT6NHb^sAvxesg -N2T*U;#t^{I%5enL$Hi`}Oj;3k06+Di2PpFmgXCAbrtD||5&9eDO;@mq<ijHZHt(KvD*ETJ&i<p -llnNbjnoLXZ-Vv%K&1Ux5?Fq#AzXz|W3-Pa;Dk4EPbO|nXqT#_3U9E2fzF@lsTBt2SXs4fvwrr36+^5 -pkpUbvz?A!*Zf<O5|l=$i^UhJ=l<f^lO+q-|^rQ3T^~lm+Sn#fA{|oLFZ&8WbL9rK32!qi2K2weccWk -`95Vj)`PI^FwzI#X5MKj|Nl&oGe_3Sn=Z}6e_M|#$&B+W+>LO^i(ApI=bw3ZTD`tAu*$Nn=u>Bm_4V{ -vwd14AZn0%;AJs_Qcypwlb9MNx0BX($M-LBD;m)+T@#WmqA!3+XjBFUfVQ6bsbjdc<Z%-G3fVt58+6L -3=7WEKju&UfE+0(F(PT7E$xKgOwCQPlTBBF|=hD)2q=3CZH}l(AGY2QmYj|0hAzJesWS@LI97#Up?D> -~upBDb@D9$KO97gdd8^g?<X9HA({Z^_)v{9PWq$I#oOSomcN8j;YzXo<tYj9|#Oy8}T(pnRAY1h+^ms -0t#D%NnrTK|zv6Xq%eB5<yO>T4bQ%!a{Ws{oazusVxT^^jDv)9fY>uGBM*9ZtkF_No}=Gm$dsr{<(ZP -^x$dQUE7+FWne%22Dee2%BPa2+I^rAT$ZQvnxh}0qg{4S9G#RI;W>HLbTq1ZHw84zK_cb9S<EpI{hgH -Oh@}7Xx!;3=jK-FOH$EAq=m0YL}M&6YKBzfOfCe~s?}GkR$q*!{qbUu4UA?iH+IDpWqM_)fs?CsO(<5 -JI>TyXbo@LXLOWwK%IOO12+K;EN=1W?jBL&3CbYVlRE1SYL^{WhyVh+P-S>)3)6Ushr{8a&Y=uHqGfh -!OIy<94LH*{*GQw}NcXYqj;R^0GF;0#>OZ+1D_jeyW*nRkL_tB%>g9B5r``jv6i7@zC-yYYsf~i71ZQ -t^;Ed~6vs|0+h8qrAJ-;XIS`F83*(B?vbJus=#2s`K~TMb8{3k+^)k+zaPB~$iyPz_|Ft5gIM$0|a;0 -w8#$W4`j9+JV^EE0djrd;nD5^U_OR1$66DwCKAh5~%m|*C$Q$iohr6o82YYR<(gR4RomLvrMdL?6p1W -J80y#_YOJ)O$FY$k7G+b*^BNa))5+i_9!5RZ7`~O?oQIO>U_s}*~arn*gUNBX0q)nT4?0eeX7hDb7iB -SI{89qy6Cp(l;bx?VMpjTL{Ju@BNg_`Lr&K6-q>@_mp{Fv0r<`*oyoR7CP(kLKPK>n<SV7<vxmq5>Fa -nC->9v6&lck`*{j=<7m6EVhR_bm_dJ|?$W$v6H;nLyqp{qGNuLqpK5M_piBJR{pwQBR72yS$r3rYC-l -*l+r_y;&P}=jl&UxqcOF|Tf%m@-DLJ(}WUv3UY=c9S@>uA<VX5&R^O1USmkOjJKIgr?zvD);c!|qXgU -kbiQtGU@!hCcTDdv>4!pj8v>aRXsb7z_()^xu!4Q}vxB+dFsfeR<2v1u5^`!{hbDOS`?by}7luwe4pZ -O$mk%Gdgd+{pRbhzT9*kK^-eiIG5Cy>#BYoHR*TLQP4zcZq?e(svb5ygQBn@kwzpx>!086KYp@{_;!q -4h7uVr2h`iO5W(zCS|ne>@^0Ze-`%Fzpu1mrs-Ip@&6{WW{Hd4??^#Q~wK7myjWd=kn%!i7ibv>Jp{t -(S6|3}YP(wosb4e9};1<qLwIZQ{wsZRVn;if3ov2;WYUM!1{r0CJUaze-kPhm-l@1F!(U<Yu48ro**d -a0lqF0Eft(7Lby4T_+$WA3r;x~+9HykbO#7qsQ5m2bUDA!f;YH@3Mc9YeluD!8dT~=V=t3BT^PQBisq -w5UaN}$96Y)~m7&k<VI$EHy^v$+HNq)gEk=(}W_<aqjdw3Y1c+HXOMJ3;iv#`}*A?>Hb8;(Xh?o7+K~ -S%<_4QFVl(gBAx!n$xnx%Zt(MRlb5aLHvz$xo8<NBY6TXfzd|+L9N);n;7b1Iv<VA$z0f#yPw;8dA;N -@Pm6OnUOVU^#f7pGR*YP(KSZdYDoVLXOjHO&Z#48&7GVMCbd8q>?BpT6+ajej6XtdjUQUoX)IRKNike -3#QG5|cIZe#w^i*I?sm5fjQhBAQV1-3Vb<Uv8Wr9IFMt!oP{p%vfosOBEZ40c_MQxGfM(1y|drC6Inr -OTLvC<D3sjG>mNp)ABQa@W^rfq-;3qj0)Y1nS53C{W+rH(RvUe5nWF{8+O^(-6aVnP)iK@K`EG%=M@@ -bi>ERV+5;)>ev@MMmb;dqJS<!^Ipm7j!N6xGXWk(F;xsi#Pe-AbjqC<Z{brRvU;|m!TOyY>^+5M_Jhi -20~Xj^`8$(@(8W!4`-ft?IwQiZ0e8ob?L`W>(&$`FDUXMR1+r@e0@BnJDfQkYRju~o=uW|k(O^_HC3O -lyyky<4~ga_toKnLdt#Q2@gSOH<jkF;E7CavV>QS5`G;w<9U;1X&m;QvxA6Aq2v!Uye94t7(QD%pwQ( -SOPgy~TC_DragacJtMDKm=%fHqZ5E`KCmoE>V+j@xRho-$b;2kf|H!{^n5Lb17g;U^aP6xBa%;K4Jmk -d-bDw_iR?5%0zXOkvSuJI>B$!avflaG_ZK#=f^w+j$xn7%lo08=OLGuk-2w8ga~epCu|S1xm6I6mrT- -Hzx{&1^o)2Nq~4yI~TK-c!2{w6Y^j+vA${e9%!VUw8>k#rM$P1CntqtwR?~u!~Hq9$GSrtp<iT%6c%0 -gs@=uwEMYZ7v5@=+1vFpU|%fFp=&jOr44dkHf`9(4g?f;LDp4Pb37M4p3E^{Jj~l2EGDxWz@#QDbP6y -pD;>XAE_HnQRnv}>uIs&vZ|oP){M|ZIR$4tIkO8Y>y@GDvwJK-T``dd|ZQ&*Gy|I*;G$6zFy~_H-tDp -fZ5Ups)xA!9LP_?z%@%6XZ4q{(q{je(YqS*6aS2hM-g`=@L@rp)4WrId>)!n1=Di@D*jZ=3Nwm2|}1X -VYQ%tAitGF=3jo4Sxka-Zo!-V2t(B_(_63rtaIi|HN}I$%kl28o}-e?AK=i;N?kVd)4%KWp?7b@(mZ; -K~~#BBpz%(pQ30ER7oPb+cP#<5=}fq5QFoitPJycvX?dZ)jCc+2If=STrGo_qyH}+}K_}ozj$j#-?|X -3ky!zbrPz(0qMGWCljxZ3XWaXQ2*8!4mMb*A!jy!=+vNp_zW(u?(gaTiUyX7Hoi6z(FWr;a9CSva|n4 -^skVuf<_45Tw}U#=h-e#3ztvZqJbUF7xycN`wtx<+t^3z0Cakerttg^MwaWw3u-AdaZdfrk-Rjyp?uD -tW-j4Ru#x{<Wc|uhu+}X2k7peHDl4?VX&Dh)G3`*Xjp_a@W(kRAFIwh@>rv<US#>wa)U(C%FkW(^FIf -v*q-7Bqw#Mxpr9^iRKG*KM+S0~^p!`)^UJl2Uhi^j}R3~txK$HA1WZ1feEibmvW(%y3-isDJC^xvy^K -`ozpRvqu)1@qk2Bp8jPNoL{y7ME$U3P_8jge?Seicfd$gKD!TOeyBZbmh-Sd>t>t#0^mjB&gT|Ap%eV -cAlNVgy^$-c%t0HSw;1evT<>BE*I1MQe!%DC{}~@fRMgaZ^84`2z!pt|NZ+Br~hYgHr%yb^htDO`YgQ -K#FYa-swWZbNe(`Q=!I(<-35evDfC}5gaRqf5C8#A(?I79+YaTI&~sLPGT=}()n{<~Of|e5@Uip$eIW -25IfMWE{F;u|+S45dD8nU!*elQ;n?}na(srq!2$-E+QFtlrfHSrOOK`2TQ8=6sv1`*Y3_DugzRk*Rk~ -|i$O;!P-j*Zj@3Va5N8;|;<In<22SZGWncsHzwtl+Re;doXxzNK3)3-e(<g;ANype;CBICtirJ?`4Lp -8JbT;K{IUR^-sGi5j;oa{+RMABgGpsl>d;D_K<QF`m2|A&2^^fFo&^8vF^XY0INf%Q0qcQQy1aB9SI5 -dP7u(BbUV3Ylw7-v1?JU(<2|87TIj=?X>MM_3=YOZ~+)bOD@hg@xh5(lX3ZGG@KLsyaIo;8ZU31=F`1 -NLpsg6uwd6qw6>Sj4ZD>-eh`B923=7h{i_zng?|o`StIt#Das~JUTi@DuFGB2G}w*l<k?S&`iZD{2OV -u!GEfQZXZ43GBe%!nNyiUuPOex$X|CAPVA6(8bu?*{raq+fGO!ElYC0ZI`Z~ASk<id4lM^4hW??K{p_ -@A=H37<lYrE3%u!pt0=1RNq32fC1xjD~atAcqEtD94xRYO_SYjmF7xH>oC9F@Qz-u1}Go?+3X@6?9k< -fhHiuFYOByg~ZFTXx+-ujf>}#4onN`xVL}X741cX1oxP{SqXBE7}E-LonnI?Y9v>)OdVRs+T=0aE<9L -hh~ANm6Dl57=&iN0Dlkd+jL+x!9+M0@7_U?)3x7O)=#m@uy;52n&=3pR}el!<Ydbej~a$bFzk}*`D0k -K7*Ph}9n3IOY;T_TWC5-;O`<t(Vm|bgz!sSp=8V7x0D?N?I5y60wE|@01A?ATrV}Hx<Tb4CXn0!u3`g -V4xW(8zc~`v(GvSh(=8-J?!k>zttU$Yo3BgxU)MLF2chR*b#cH{)H%T^Nnv5@aG0V-OZM6?l6CyF`AN -FMu8H58ro|b5xClB>?x>E|19FpBlWCGeHM&?k%szda(U8`6EzmknAeuba;+43!CYb%7&9d(jnF(Gh+> -0&}AL#+aDZs7>snxC}={c$e_pNne1V$$Vk2vgHtaV4JNyr>63MBW-*pZz4RY;wr$thJ>m&S7zh%M=4q -lDUsM)Tewf?C=SVK(i&f$QA3L>US6OwQATzpz%FEGT2{r^z0t66F3eIqEgLuyaP9qjg901PIYLa4oQv -5ki39hbpo%gv?c+0uuijVP>S9K_T4@?5g`(gt(;IEUmbLSVkF2b$4hF1&7hGWupzORK~rX}H7K%SrXo -vBfHlzB{uNqwlU3UoVFXiHvo^^b&SBHRI5UyQVKlNCI#KN=KS>-btSf8}I*Ir)32q5gr*E<D4gGw6Nq -EcMZnq=chD^atN%?Syo>f!qnJMf?^P~lvJxKB#?hU(JOrMCbRRp#QR{E%a(cm3yBppI#2zI}M*ic%^6 -udCM%sI5pySd#J1e$o8M7P@}>_y+IE>BAjJ(069SGsNLO&GvVMk@~oRLiI)#e%>^1a)(K#UrK(l0Chu -6*aD!EL3DT64GZF<8GG2szh}UhqqvmWyD#gA(xm^lWYPr2A4|*FG3vq516fQ2@8dANrAzQ@<plqtaD? -Q!VE>hh|Y1}ijNyAX2^uD@dUvb%tC>2c`mr82Zq1=AnM0PCwZC;vQd%4SfX`U<*eYTkTQVmNbsC_MP0 -IK8Lgn(wD@n6;6wGft+$Qa$=gwC4;J$RS`CAoNGJ$L96P~&W)rqNhdGUy0(_$coRaOpu<IA4y+$t8Tc -ug@?lMkklCT3jlyd4yET_sV0((DLd3tV8SM*U~kHc&Fj1B@W12wD@W0bmllV*tTV`nnpYxg23dY!YO1 -bKyTOZG{TWk&rXIHm+cin`0qQFzyc6O!Yg(l>nrfE7B@ml75~KM6><x+9BBC($<@6}M}ADPm;_QptW3 -ttKfyTG897KWA5@vk8ku(c~gSg-y$9o*QgjcTSdFL=s1CCY-@xzJtR<CPs>r#7Bn$ec|Gr5Tl6Pglzy -fgt=y>?<s6q7>!jq9iqH-fmdI6Wt&o%OkBiYEE{ZWo*HV^)RU;di60IvupLSs`0?(wqG|Bs2YpoXkm( -zBt#$@Yq;@vA+oL2Sph{7QI^A{gX-GXF6XPW4ksu2*CY&;r0DAEk_?c#xJOubfMqsHlRWal6V~0`D15 -jN&O;Ws^%(RuSQVO7S$=lEW`#=9zvFSHx>qwVTjtbQOM0fzUZ8--}AL0aSby{RHNAqtOYx!g_V%-2*G -@lVZ&aPUt(W_!<niP*_4XV`Y)-0cHre;Mp8>a$Uu54Qh|4JTjoi4NSIKJ`>G1&fby;!>`wHFU%#35?4 -*X{#0b8yy5ElIp_aI<&T$h|J(uP?bWX}lQBS67HXr|kJ;G;VmXV73lRZc#Y56!xduZ3jQA&!<|xqdq> -bTgrRlTccC|7z@H#Thl71I+gPaHzU3Fm(&73^;~4d?Jr<9MkN-YiL*eUZ#}gUC3RX2Bys#Y#<j?c-dy -la$LFhpV|o~^f#tHTy}GJ_m$jpvb^8`E0d(){oJt5GM~PT%Ze?9hS+3>vEh2wc)IM=ns-Le=rL{-5$= -F7>yc$K1dr8yP)Y}}l6RjQa7|r-H<r_la!UmmX+VzMqdTB2pyge-)d3v8mLJZzSRmSlf2S*L$G*;<n- -EMW0>}hm&YhaWv)k*5XCr{Aj+evV=ix{rt?0E9Y!>zj+3i56id(@r!oZLD(xgNB^MzT-F5@@u8;pi=? -_3TO`ry?BNWR@3cah0eWTL&wa>tww_<JR4TF{n&guS<ntT`(Xkp6FphX_KT0`jq*hQSbwkoUh}NFp<@ -R;O`Kt_q0vaHMu?7-QL>TTE&&rsTdYxY6d-u`nR~UksWo(7NytIu&n5Qxl1O%nywjE+PqibPb;+EQ+a -w~K{Qeh@^Y~_3j$gu_wVn8Cz|M`-V*HR9`smmay|5C>OwR|Kt=C*7c8q~z25DLKO*tDxB{T@&43v<NF -R!}YSa9h@WqY#K5M7}jo=QidgR4VJ%;dg@PqByCHXfHvSS7e=xj7b56kjunoqALrMw(Y=DVnmrk{V3v -(2D)b_G(@?3<P^Jhff1>L*vEX%k1hRY5BdgA6f#6{lv`bE=I)$^BZa=b%%T+lcO;m2}4iy?DkXfE_!w -az_7p+M#{CZ;bQY@OH~>;Ff|~c$R3(!h&EIm`ruZ6#}9o-K5}J-0m`6qaTq3lTT5~nPO}nbawP{<Pdy -U!PKcBhDgUp^3(Zds1wI1>7?~i__MesN9POFs8>Yy`lAinM*+vqL~YM%(<`NNJ3VctgI{36Or;~6an! -yVXJ$eGZ~`ecyAFVj>1>9-#Vju9Tk~#r``-3f&9+8+yNkYP-6nb0ZQK5V8)CqTU4hz}X$IZkK)CAIkE -;}$EGyS<XaL_6Yw)#N+znc)ya(7inM`y^YeUeDh`c~cy<ESYMrCFIY<}8pZEf$|1%^=<{>oW5KH{glP -W4Mfb(X5^;`~H8$dc*R{BzE5Q6D%Y^it^f#<9p0)`FmIN5}#J>j!Mh_AlSt$ZD1~W@^{BFf}*HkC*^1 -Ms_>^Ke(R2Z5G)kUqW+)KAO`q>o8cVEki*Kb?=48%Vkl(R91weldtQXlPO6>-?@n#*D4>wM|=c*qrWA ->YrNU+88kw<Mu1h5L~_N=&)g$4LW8lFQq)$6m_F?`4)z-CBxvBG-}<sO>hUBQoE3wdcRWWGrx8bu1`S -EeQ17KBj|pLNdV|((qk1wQq+_;}qOU^PIywj4Zvpg>xGa_Hg3x%8U6p=766w7oNwz}7O-ZS@VFsLEX% -iL-7Fvvkan;DJbU%n;b%&zf=S<dCZOJwUL!IwdLtJlr5$mwT7V_NbX<A~r7|60XUy!9C@pKF3mG?DMd -7>gxlU@JkSMxVH2fVb+6w_pOrS3-^$A!wBTSb|S#%O?TERIegAtpKV2TW&9vx{k8zhWpm7Z8?WIr@7e -=JFt5htnhlUf4<Ch~2O<$WA#V{C>uvrJZ_f%igHHYVgdds>}`5=E$$k$%+E5C))BfalO*lh<F#svLV9 -;cEB@8QgDf%#M2a0a7ag2wKFkk6oNyWVO%LSB61huUc2cGE|_{epcX9~lf_N6M7=>AOlLhY$myg0d@a -tD>L>$m9d|b?+_ADQAu{xQFrv$lw7BXf2WZVBW?yW`B?kkt<3g7*JM1l4li$*PtE79kV2r{JoV$w(IN -^(E+Oxn=1`Oap6v}>)k|3ibQVBxW&&P|&RGl|Sp-Z(MAvOfktze4SsvBgANbb{^;*A8av6$sLk!8k&n -{`G=rjT)g02F77Vw}z*;bzD><1@uyu~-~~zUW{w)ZMc&>R>q{u*W`EiiX4RF-|eon3>8GbL)th%=4Mn -8gq2k!b&j+Z-?*XaJZP~n`~D~dL}zcx!mwtgiLH1O)XOE;E+XEvXQ2s*;L6|w*jn<Y&@V&qp1l~yclI -AnMCJ{`HY<_@l}+(iePh6QF>bTFt4sa42#E)fdk(n5pX(*iGO3JA^wt?NV^-&MeBrm?GQUw5%eNbhz& -v`>%-1wz2)U(7iPVbm8Ys_z0pfd6{+8GTK)6A)O*+O8fxaQ-;b&-hA=$jZZh@wXuM6yvQ^wkOEhhZxu -2dAH=~(F7FIm1&aNCK@2X0*K<2<n^qa^Wv_$u$#7~kr#FQRhxu*27wD=hf3BUwix6wIkD^#zOQf<1h5 -I-m%8^S@pqpje&&XPhf9ah{g*P?;<NBFg^(9Z&Z4ZDVsXaKrxM<cnk@7Z(Yr_ub);cy6yz13(yT|D|A -{JJIV&|$`N@xz90pLn9wr&L7|4674`U9B?azzL&(Z-JzonUUW*hv88~>|;BPC01gP3a9SXOyV0v6XB= -P*H_o#^TDiLoZ5#)KJj$jH4!7#u4SXTEJ}l&`2$COw2zl@YH=eGHZ;YiQMFt=8{M-YLg?PbNgk88ao* -@e?c@uXpSXuDjWDY7cr%Kl)2Nq5Z4l6_FrZs~{#iAMO^$l(;Ppy?&U5E^a4^EbUUIH5oBByq+d`+9Nb -0rDE-O$rc)m)wTz<qMri|({b@WiX6N}=!DuOTp5h=XP7X>LC8+`KacLrwOUslTImjepxunq4oQ7&&aJ -E)hx9JG&6tn-8@mD&~dxM)|TBg_1b9nwcb&Wajouqf0e7g<BVn_m{?+`gV+QkUsfk^(t40A@3F)x&t` -A;W0&!Xe}hLEw>|V~Npk?T&7(IR<p-7*OBto#pL*X=4+&#FG;!0(Cj*nb1bcUNbU=W0dTnCtkkVfAI? -D#5j9PZV*WI;Mt=@g$|)7W}L}^sE5$Z1ibL)><SMutp<^?qTOWEK_nFrw$h+?OAp~gZDduv>L4gJtDH -M{0DylDQC~r%C`G%kS`H`uP)93?=v!ZZ8`x5{rAz9EFRA(X*zHJs0&P}`u$K0hQR1Yd{W`6^<XQ6uwo --H)abPpNI)Pq|hF|JE&&baOr&{Y-PMAt9OUYIteOh%+2ZMDm16;99n_YCAn#9%Ddg2J!ESH8;$i?EQ< -iMseTxlCJMB=q9&i>Ag*<8OdTxq{C*Sj2{jq1d*yHwR&X4T|e(A>hT<ecm3IEHfgVZ&lWj(_VN?NQdx -8Tfz<)3dY1`MI`XP(E9-duiM%2k)5f-p6CKcchE>fu=|b3StnH{q(f)-FK)L$Y=wZWFRICHt{saaYOE -ldtZ+k3?WH;*GcYkv!Ex*Fb<!{U5CU6|E}FoNJH@&lABvLM`Z-VELT_X{(Yb&*XnFUz<awO(u;IOxJX -wbZtJK%LAfN8*2LTicX$2jPvM9fy<LXU5+?cEtT$M&|DM8`;SPzff+p*{fPEtpRSU&A^+>X{?Je<gP| -|LzwOfG}EnWv-e*<*9ONMfMG5DoSN;q1;|M1UXJj8!~88)i5JKue$Cr(A%X$~dLYU;3UY;}^>kt88q# -dsip_%EcDzmOc*{`-#>f4+ZTA%?|kkU)>X2GJZ0f4LZ!7LxgqdSq@&@b3`!1n84VFGV=}*3jZ8zqW4A -(*5Gx9!p$Z-}8mfFf<{9$vuYojeawf@o4kzu7d%C=Nh4ze3#tyjCT!f$-Z?`VUgKIgG`m)6n|C1S$~i -fMHfRxXRTqw8nX8){YM$5_hhyW6)xLf6d$3Z$N0}2zPFF3mM{|wUW@J5-D8-yclIUsgm<1BPo$P+R81 -w5R%Wb5-otmVR#Xwk6Jce-G)3OSzd=)d1JPeiuLlDzX@3RwzrmJg(-FbzksVWtF;S77!@i^fP1$gynE -+Z5dR2?{<HUv=^akpLqtj!r_Pyi@{CJ7qounp-N{=|2ocdro2-CuANGTxiiZ)-(ht%z4CKs2$dHga=5 -{$yw%gTNV^89n2(=W2~>|Lv993LOye<#QP>v;3{_Hp<4565?oe?I>AR{L+sNh5MoK)pRqCuf6Ht+3r> -4vXVx`{Y(z7xQEG4sp4hlD7W+=-q#w9BplWn{E#GH@`o*vvL9bHw7Z@x3Hk@m{n*%a_e2A-AT5;0-j` -wKJ3rKqM_8UuUX#F_AW5KZ@3J$-xK<r*Xh|0iQfa}iK^I#gdochCTohdJ87sWZ`)J`^3E6O^c>Gmd`n ->$Yu)%XHYp&0^%im$*#mNpogc_W5moXDW7f4AN3y{9ioWr)bcr0+W$H|`b70~+rQD+HyBVv7ADq%-wD -7p3Dd}p!+`82kS*<LPRI4QWFxLm6aAGKDX^8>bB?^r462Q#7y2<T(st-LVNH8|2HfBV{L-HUmiu|%fT -i$v4j@4rYPL&y2L>`@>6{JmE?Ll}5A(u2;S;2L0;H-u=!4nkOw<t*6S6_egZ6i#XZvJXgre}SieEwzx -+u>xI&;DAJ^TpfCcUQm0bN-=+dFyljq1P}st`2~&a-RmyIL=GPwSe}P9gQua1v|^OZB(i|<CG98Okfb -atVMZA;duJ?tylvhAqrBvTqKEQQ%K{pOvh@{G;}fQ#WazHWYvH$2~sqtrocJq`B{!Jh)hc%&z_zhZwf -?gf^sVSJ~=&YheY3G@2UyI#5jJ})O1=v<=xIU0=5$P1*1nmqAzgrXew<=xb<#hL+4b%pzv%%awpAPtT -!r!N)pYrxp}0Pd7lDO*41;%t>@Og<@MBkPg9N2f3K7VDm??)uA_bJ1ps6~y^JQro4+D*t(2I}`(0D*D -+#)*J$N)d&YF$##g&zt$?b3cH!P>#9|#cF5L9AfPtQc#abH;YY&V(NLY{ZUF{?5ZAqA*1phNcG=KwVX -*v$(N&m}Y15ZZX&!LQpV$bPp)BIbV``Ai2}WwN^BAa)jWrjOsS2$yer`lWUkxhNM973(5Js)Mi&YJ=8 -Io#b{(@@~c9HxjSjIl!Hvtu<S-rete17i{QMlz%z`J!yU8x0$57#u(^0Khl8?{fRXbs1H;s@|;kBM%Y -=nLJR;j2cFfHKvNKh78#ZB?LR4989RqV4587>RF1f??t5NLCKb25E=JG@bzvxasM*U4jDsDqR@~O#s& -I1XAT5QlPL)s}w!d-@#Yv0!fCMCiP9&okg*$BRajwy;4`SvZDN8#`zme7F*+^ppYBhmqx3-e)?PO;sN -z>%}?~|=G*%~C<sguS8hQ$wErbi5Lmc?qKd{*T&9o@F-T28JK4F5L(A%NhWlQ((cc~rZV43rehYBwLv -$64FHsi^L9ZHQA-<7s}W_T)?Q1|SUbMS-p!DoXey9l#11=LJD8m5a#)l9BRegg=QFU**L`MLR=v!?M9 -V+JXu4btk!d5C6iCoiD#ct4a9(F8uh)x>{V)<44V>|Ajh-KR<r<!=uBe`1Sk47x-r%|M~Io#mfWR<ny -z1$5HbckbPW|4D}O}Jsc*7K=zR#`xMFkpvb;tvJb8pG3zCeg)ILCWSbF-&{^7&<3>aYid+q6(Nr^Rvd -M!7Bsxj!F%?PKFd@&gIpJb6mv5-UF&r&|H=@I67`Ho~o3qq8U@PLc>;v{Jm3;-xtSGJG_$|+6T<zAc= -j=JB0@jU&xQCP_>N!UoMqEJC4VIlU%oaywmc&QnB2V$+IK}V+EcmdYRk=8mr<QLS{zWw`o`DqzIw~c4 -&>!?04$H&dnL-HxQNc|exMFe-MCpn@N<T&W(yLikcE86rXi?B{6LU}FV6xjG<ITEhpjxQg9hY6Spmgl -%U7bH<_5qo-SqHr9_CegwCt=iHe5dsUQ>qmV>e;yGM9s7OohY}Qrkjn{zwaLX+&G>d7stmZAK+J`(Z) -Z=$Moji$%l9LA-~;j-=-_cW}|s4R8TmFf<eAO-xsP!iE4}Te6?CNnpAevsueJ^CAFf{bEDZ<Rx3G>m| -E4=sC5$^Wz|RzUBm7jbwX=cvgZd~_9t~mv~0T%{Ic!tb3;V3h$DFk=f@l08JR}Z53%XchU!vi5`O;z` -jh^^-{a#hbRY1Jae7|v6<PP`>nE=sKY9G@fV;F&(Ww&<N=Jm-y{vnGwoV(mpPQ<up-TAu3+QJ0)08ST -s;Y!}g}l{&raI9c*EOl0WXH#!cb5HJH_MKXf17D0Hs5~d+*(XW{d|yxGpVsaExj|(#E#4+E7{fbl}Ha -r_!bL$-<*vIuAEPVMdJug_x-I+_;>IX{__of9pcv^e;uNxYX*C1EN8lnY0ie2^J`4~HKx9$0w0l^5A2 -WlYrg3~U+^Xgn>3o68q<Gr3PeHY49-B}Rm{p4AWE2~iy1<O3~u#^=!ihSi*h$X!vOcDAI+YQSbIZdy= -AzQ0yd;B>vIs_#odtn?daACwMMiXu5v@Hvn?ljVD^8Z0Wz=~KKsXQ%1aY$T*97p0{5j1v3~2$7*gE76 -kWX0=+ol^QnoAAy{O<-T3bIauQ<I?!{53Udi75i<8hBJndJn~Cg}<vKf<ScK5r>#fRI3VE!s90;MNhp -h6G5nd~WWgWrUJ`y<e_IPoI9;Mg#E_&O(yIpb`9kP)h>@6aWAK2ml;P_Ev3JmBMig001*3001KZ003} -la4%nWWo~3|axZXsaA9(DX>MmPWq4y{aCB*JZgVbhdF@(lZ`;Tb{;prKWpFT+NUYUs(?k~=b%OM8#Wf -dPa<~tUk6Mu{i8Z+-c9(Vp*Z;jU`^Ke6Imumtwm|*CCii7_UZ0s+`VnCtGuEi0<}zvalSxrEwNOMb_a -yhyJ*s_E@a<%>5p_k9Ruv_&Gx3DLPga*R{ZJO1bx*uD&ne88w2>^8N&ul$)v2I-%cPkXtSM>6@^rmV8 -`eCVO{VTBUSxI7+-c3ep+X`BH$f$7nszdoWF?i7ymm7ET#NiCvnGZG$@f$hd@&>b`676JX`a6oj9r_@ -S9?*EWsyynn!yHW!x<_2s07VaO3P+Pd0R<x_JDBl7&nREJ4JeSL3#@-9Qj%RS;3O5u9~7`aTH%h<Ovx -${RxS#?iRDf)BEW^lW6MI@D{YhUQ)?C2OTd~q$rBku%Pn-VzzGJbXu0gDw>FvtD*|lN!U3tCa$w3DY( -)vmE0}~Xu#+T9)dUIMx?A{72|4Yy(ziidqN(ONHZ&5o7qV3pkgciy7z5UvP&Q~!^387_y^4mEpg`R%5 -apXvaFR%Q&6DsOf4!f8qK;_U^RS2W_#~FcEcHD%f3&|fse>rCO~Bs<ryOiypn?&ZW%-b2eNIZ2qlk!r -^lq;5Vd2H&4{eYHDe9D7SdAj%TfE1$O=tBc}_M|D(&R8l*PJadVS6|AZo!2m8PATl9ii|S#N@F$k_{& -bJ~q+!;R?_mc6N6IO7j$<g6RAj^vI`fIMu0-+s8*AaznmO{iP$x8UrVW_37+qc9mo!TIty5%_(SM(+S -K(X%lu!KeNbG&Z_XqdgDAn&BDN?thUAfFrAz+SR$Y3Ht~*R`4#YV|bduRHJrhi>HCYqCl*_Ya&F|MA2 -(NG#<nxx&Q<{mnBsU{fE5W!)lIZWCAROvl&~{>>7t^@V2s$%F{MZ*Wo6zC>XdB_#4bnMKan-mg`mBu| -R0eh@b^bB@<5#B9(&3Ovq(7ILCeFx7}^_k-SAX^gt4G27|m-NSYdm@}PvFO=R03$_Hiy_N}}f{1~>YV -!KlvlenE4pdkQ}2y+30+5jX56VbL*XbBhu09`YIN0jUaT#HyGYE^)F;YI5fm4P}9R2OilW3=V^NWwuo -@*8w}9VMF5riDlj$>~Mp7Sao{kCa)i_ngj1&C7j2T<@nviRvqO(<+l+Nkzpq1E<8pJGGni<0;Eseaky -D{m4`+Kzo!_po3zLl-w3%0{?3N3ei~N5x)ma>WgT#)CH#F;Y5a_CZq0dQ+dH<!?MoUCf{eZ@X5Z%$s` -07W6x1oF;iz)yd+zu1j|~1CM%1oP;uuJf??EOUWH@}@KazPkle)WFpEz6hXIj<HVxxBZb(q2(_;%F5| -PJ5uY-c2tvI;gVu~63m#D{<+pvl50F^Z>(<Dt%@o9R$BzG`yA5BLTa!yYB{AG|uAXq_At8G+C!8xQX3 -}mUfNmCCYX*$D9q@d6^(<G+{kjgl!mW7JcwgV3-W@NKL$6ydxOaNTP_V~-WrnS5}(4Mh+1r#@%%hRjL -a56<8#(7aCn-n0JmfEUugcH$B+kZOP*Egl1GV8n32rG6c0+cyVS8G|VHJ<=6q2z6$cJb&={E1EJ@Lko -Ez+05+w>R}Gn(bILWD|dm@PR*Qh=RB57^6jQMVo5u1l#;dTDUc#c^-EZr$b|ymE|Tyrv#g5-?Ym|7YD -9<lrQjcPZJ!ms`Iu)FHd^I*7YG^?#zMr(YP{)T(c51W&H^70*yPwjNdBW7fBI~a(P(TxF6l)oCOYf%o -{>yMSqB+TY>Be^u!m2rSs@>-0f4+h9`~4VxVY#Miygni3TueFnY{dFnT=+(GYSLi9YZs`A1#w7zSJcr -n{Ac`YXjG5>#JVDWRQXN9rzLLTz-<wI`J?#3ZC3@SHu#fFYe4!D+Nl=#r#Yy7V&`1qpXhR?G>#sf%2a -9lgQ*u3QJwTTVeN-6CwD#l$3A)v!diYb_L$qwHE`fJ`y?lc`GKK^La*7iv@ew_n*hZ8f3>Ur>9mD$G@ -}L67-4)&b)>GF5{v40OSO^(15matkuDgQBs{AlC{k7$0EYpKBQRRr-UB^15RctoBJ(7jtZFbHj31=ly -ohEhC@HJ0$vF$GEK!>VK!^9W!6RJn-<p!v7-z#rgd0>$lGcUYkJBuAy$W;tYjr!eYS4xI8>?q)~Lb3U -?<^4*`%oKzgRT%fohgyaf&Vdk_xV`|%hBDD@iXL#dm=Zu}hDab`?tbTv|d)h*9$r#&-oP{HNST>V5lo -~J<d*yGgDo^Wm9TI2*;G$sVpg;=$ze$Nz~oK{q2Sg#+w3QP2gPKKEmZ?y0WseUry8*$IVP03c&Z4;jk -i62kWj*RE=(pzBJ8RH3ATs@@z*z5l*5s|OV^E9z{qp^rSe85}|zdPQBJcafggpe&%Fjw5)xs~@&xZ*v -)jtX+;xV@jwNQ`m2v_l&F?y)^6?U0G_`)L&VEO6_cb{J4fn3-+|cCx8%ZBv~Y`j=U@(X|(=58qOe$8P -yMyV`2u{C6*mA|B3kuZ_dW18CCNr87H@n<m__W7=;#vdh;R?X1JQyO)j@b`Q{hV<%QX*&+AUx-Q2tFO -&o?w?aMWYqkDB=jhrcdfPos6eTrE@iy>G+PpU7Omw&<l0kbG?9mWb3tozsGLT<uW+&s&BfPCv_Ptg -8s2bZhGimZc~C<Y2v`k?7f@?V}Bj@pg#n+a{ul3Z~wpE`VU=i1>ixUVPMN;zaK)C;`MWr;0K@>{_5{O -<T3fWw@!)uFtgxhQzY0hkE6vOz9xVC(^GQs=V#9kE))!pcvQbT(ccb6@>T;B6*dwsHcV8UhONI|BM*f -NnHWunzw}1?>?}c5co792|MN0Foj;$tq<3<05+tH$KL0FC&Uqg2^`=&AsjZn8bjxe7ZieLtdXRRHf@f -u$d;4QjViN34%>}XtW*>?HfCC5UlT3%cR)0d?<9C|@8Rv-=-dXNg*+49yqwnjMKunVr6o$G>UI8h8!n -U}9Jdy*MVpGs{=^_SBgN-8ODj`2$FL?_nfDG@=iLH4fHr%a{T^Cx53cB9gT>%wPMfb>ICiV^L2+n|hH -bfMoN)J!q;Et>k5EDL;1<>U1PHO73l(k#SdQoE{MejX;JSxy~68vs&ZthW>)yjI}YGrK+daucrsSams -AcyE`s_5{HnKl6O2CcV-H?RYc??rxc!^FDQp#@wT<T@koMax#Jhnf(b7>A#Eg2dwckxiwRz~RQU42Pe -%<Acg)+AE2^!||>~Uy>wAdSrS3Q*ZZ~_voFq6Q)B3wG#lL*pPMKPC7l3yk?T0C}L{q!|G>Zi4AaXfMp -u`H0~uXAmRwq=az|RdVp{jFJFb_tpT-9Bbr0A>Bwkg%Lj6IA0_%zt;Rhw>fmkwbsnZHryVq%9zxTiJJ -lVvn0TG{?DSWvX!!-k`UyOCuI;3ef{oe^&<@-l6D_on#*F$B-+q`cq(Rtkz;bmXdms0Us$zhlirKt8V -EEl0;O^rA$9*XdSpHipF^^v}vea~ztC2mc8Ckc=N#SZK%Y<=A?)SgOKJp##{^Ek?N$OwES0p}}pAc;A -DRhc>51to@Lk7<^)_6%Z!lDL3p#dCq{e{Q1d~KoNnz|3|Qj2dp*&R6E8b5((btVIa{b;^5-LP+=N`ok -V@P9AHV{yIjYpsJTS{6C5yut+IP<Ct10c*EquB$D!QFGzg_{M=FVxj){3L0SC3x}(T|3C(L1@$z3yxE -oFj@0jX@fmB*SDl(1!1@1NFsP}Sv_!rKFCM)ovGeaOP#^C3+-nox2OqW7()PfEQ}3h6zW`860|XQR00 -0O897^_9L~CIrQY!!e_LcwuAOHXWaA|NaUv_0~WN&gWaCvZHa&u{JXD?`FY;a|Ab1ras?S1`s+c=Wo@ -BS+=%<B<p%W~}O?3+_8&pC;^JMYrzT;kr@cZ!#$B*<n=ks6YUtxmFk`_>0ONlLc+dgkWdonD?J5kR3( -C{z^+Rp1kGEwiO8tHE-;lP;D;S&Qp>kqu;Cr*$eT{jik!TeUV1>-93tuXc9kWw8(gp`OO^EKRQBSUsK -=rPM{c>e;GJGyN>w5%7s8RhCrOef}}elDd|;`X#GrvXpTtujE}^Ci#_&r`JhYad9b^Su&Ngc(RU{a{1 -@}PPDVL^JM3VxXOx2lIan`qnVtGX|c*{sGXE$vgW?!-Lf2tcK}hAXPI2U*co)1*D)9JNC!VJ>$J#|Z0 -uFO5F_!n$R#)0HEqux(=-zMCq52Cf)fP6k2C;L7Xk*5=29ej6e3HjS`>2{f~+d&p&IN^yYuU`QbSkGD -rmPvx|TUMsjsD&7v*9&<OT|9AaY6I?4Q9v!MweeFqhaclgSK5Wg65n%b>gBRxFZyZJR2bprb4+ZU+i8 -3AO6!HQ-+tHxi0VS+7d?A3@W^=rQRE2_jE}-N#A<N8>=W;EDpqT&<SWube5YU(dzmrJl;mORBS!({!H -7Szn~U(bvT)n~4b$cDY`{93WVWK0&FklUgjxVz!zhC37?M&q=nDs;jfRWU<VoOH!ZT{#ul?Fv*tJNfk -u{>`KN}T|$3h??@yQF`WrH??pm9L4Fwbl1Z;Gded3&!h(DPeFHu)4gyg2JEw&3!ogmppOG@Tn5219uK -Nz0-r>_8l+4m;Qe#^h<PkT8LE^&A?WCB73@Dz$%+?9eek5pIy{Cu0Xi&*I=7A+sWce^l7L!>b>LH>Q* -5juaeQ^{;51>%rtiVyD%O>p(pFV<kb5X#UN&yUz%_^~20b9Z36U3QF<~1@j44N5hvcl4N!JO~FA$Ck_ -xv2U?V_s1V6F6s;)s@JT1#!y^3)kW{%`yi9b_z9R`5F3El;))XzeyInXE;NjSn+LIU&jksC$pqZfc$# -S_k>HnFaX&j150WAspt%iHqkv_Ej-e9bP1qo;0|maF@SYC@h2&GCMHFZiSrWplKy<3WR;8GvP2GHNQ2 -pGu?&Gt9C}fC<vbYo5DreV{+~d?eA_zvJV(O^Rz~!PqKBCFv;cMmI#Zjz6{R5()u1ucPpI^LQQjs%QZ -)dhdSc=be}w=8Ww3}NJI#5KXT=nhmxXD|kjSu#%mb(2<KvMC>D#WzBV_elNEoCzTP*8!7&$|og1{)5i -D6ZNwygmTWcC{=mjb0YGVe^YvS~S!8FW8XOA30><N#5Fs>}|;QjD03`063zLCFThy9=2528P8_k4Qg4 -;D~h?5KZ35Jn$<dvj*um%}HMX^|N@kLe`Dzay>$(iIl~GOH_m!r9Ec`A_s>slQ0JXl*0<3S&86#0O~Y -A69rj<^k57^;B#86syG8yEt4$lut*+dALNeqVxbO`gL1x<(>hzLdNYC6n9^=it6Hs^K^`SSW9Go?Yk; -IXv!b{`^{!Tc=z%#Vle&irytDa0;L?BxEloL3%c}O6#S~Q%Sab$u8|Xz%ZFR1t79xWMx({h42$C{qKp -JyhFc5;n;bCxj$x9$FYJPMCj{xHra+<6vNlJIe^uQLC9-_jf&tO5a6biPZoT;tp3rWmBo>Dij=d9J?A -0jZ570efyD9|%C98SSRu7;NlB9K`#5U&cc3(a=1x<F|S3T=8*qSe9{4KJ!ZnPg}hxuOl`Y?H)Vu4Cd0 -_#5-o%CbXVff%UmFZBf2KLoxVjl`i}ru#fT_61pc)mw3;wgf_1dR41RjWu8xdh-z0g9JIGszb-vXmo# -?&%!r~iE6+V7+KUc>0$(9+qKbB5VT-5JBcnC(?vy=Ft13!oHyjl(v>1O(G4-;$swrTElsfM{}&|>6eU -Eg|6_7wvUayiN`~-qZV3_FiBfHj5P41&-JKU2@e&RC1ow+Hh`u&Rd1o^%7Qn73Xh38ksDL*~`Z)^|EM -PI^3K}*3wy=4aprJK$1dn7xq4VN`=SROm7!k$JnFTk=1IL`1(+(i!$p)&x!e##L0Ie9jlJ|gj>!)+C$ -sa~8f*pb}Nr6LXd7j-(CAkg4RxM&>LT?^`5dv!wChCg=_#2dfZ8Q7g^!+Vp!Eq>|#f~StHjt)Uc>OcT -K(IjLV$KAEx?uPJk^=%`<%W5UvK|<73}vtnrN6uil1gT<XokE=8S&<X%Yf0@`(z3cQ7(f?zme-(5Hwv -acMX8|8{7Yn?&c4Y(tlf}(;Fj&K}-V8NM2^>=7CK;Y)iG-p!D3OP>wSc0*mBEqRRv~w;=Ni5W@MDtm= -K1b~Sv(#e91$X?I$ZLjm1S`8-Rfwf4YW!E#38X}?mMFG2djpm2&&5Gn_clI$9zpOCM<$DS@p^G={U0V -6}VRFY4%R|SXwTmZ;dO2qGjG{U(BIkk^tru`-MU4aym`>;bv7b&~PXvn~>03FfJGD-Xhl@;Hs#=53~u -la%cs7qj1AZljnp+`zrfeIl^KmyyO5wxWFyS$7HD8oLCFL{p&Sl5g6*M#>Pj$hzP=FmYc9WoK?T#91y -36Ouz&Wl?R5=u?z779Q&dATv{S?12zXuSbaK%C1<%gE|65iQkpnj#61QZ2klU{!1>D0vk%NWuUuMQmS -05}Ct{Pc5ga6>+&=)$2?-3u%UP#|5K@J@eGvJyT&;8}y6(Pm}Xr%?+wbVAO=|85lf(-G6uX?$4|W>vW -RB^cx2n@-<Ds1e-02&)U+Nuj&<n0)-7Ka<gY}v5X5`$RjPaf@Ao8B0%w-j6hL1u944)*+(nyj`atu78 -6-^TRXt43n;<XUsXk~|D;T-BG)Dk)!uUu+oMMf|4gGDi0PyR^`N~xF96Wtkr1b+qoZfy#qsF$6uzGv9 -tB$MvKz-G#dzF%fex7w{y9AAfn*-{PEXCFqi6hxDjm}!D0OO`=!O@by<w&saI)V~78nNf<TF$=Uy(h` -$~DdotBF%EbI=z#m7!iwq)%e>AlVr}F#1Gf0A^1f1Kk$DpDD0|B3hi3R~70-U;`zX9Ge3hL8XdX`<6i -P6T2l*pn&*SvJ9ZDP+x#8hHh|_?95+%dg2=aftX$wDfzUGj~xiql%xzg=zDEp_@I5{XPJ$TY)NE@Wpt -`TH2Jqxf?7_weG<?QLy-(tOW?PVHj5Me!!hWpo2uEyR2u*qWnG~a8X7>3Q;{qw)}Sv@z5t+?3Ng(QfU -9K>@|WovN@;dEq&5tNhHxM1F3Q_c-Hf6}jZK~PVp3#ay}W@5B;y9!jxUUl&N3@1PKQzLfUto5w`eHA+ -|^i@s=E6p?g%R4^Fg%)k*F>Ctg9z&ak)Ji7-TQo4txr;C43H8o|R=$hQaF`HZtkVGPuLpQX9eA8Yo4o -de%O`Iqk<Zr5wALOvtwd=}Wzpe*(|RfKlfs8fWOT2BQghn{B4#bCJ$yn#qhn^QkmTigrfTby4Dx0$^G -x&>`xMA_v2bHwTSA5HzCt2~Q?)Hw8)%PdvevmYP(^5BVBhj3G3OKx-V5&VnDPg%l{)MFZr1YK6*m3P4 -kFEEEK)4LY*ns+q1(F{tu!>icT2zfXO2ngX3l&@iNvL(>3M$e|csMD2YJ@d_=WkO1_tua0{7L7%e=@) -Lr+=&U*cJLRTTLaa$^F@#<e%K!VFscHjYd0EzBssTR`vu<A(^a&c&2vM_la2OUhomUlk%wcv)Ie7iU+ -n?W`y*&MJ=E_}`6Hl$4t;==GO9xi1<s$UeZD%9>dE#+vH>dX5Y6MdV5A6kMQhfy70*KGi%@T~i^m>C& -MVf~jPyQL%4m`hI1P`FF>MHmea6dpm?r9_39S_D6aa$%!Ufmxjf<!XSF0fd60|Q68(w2<WaV3<kQMG7 -qHh-INEa$<;N%)uH7ySJ#`Zx)ER6uw^En<)mtMmo2#z^ysdmaHMpc=3qR%2Y9D%%bkHubEc1aIn5{3+ -pSc)>ecM;Qi0go&FKiw=O$nIaImDzGl^99f39T5vD%B0(?G7x*>Eid)q7Lz=JlynXBN`_^segi_AR-7 -|Fh8KZw%_i_=nXwSZf+CJwk5H3lHI?E^H7E2C4f${g)-4@%TI5Ms1CaW|fH=y0#1%1yH^8g!l2KEHvR -e>_<^Lj;3qy^%-Q|!~QWs_`NBbL()0v#;3qmUwJ%`BbPxbK1W(G0-hAcWuIxrR+w3YrxSZ#v_2-6Pl` -hT)WJbh$FCt~IOi@jE^wzljo56(0&f8DL3JIpRZzb8?=LA)u^wv*xk7-p#&(K4CMhfBr977C)D0xL=Y -ZmKy59AIf62ywv`46%w#4X){LF$bjQ#5EWODPAMQ|nyqG1D5D+G(BcU9va5Vruav(5RvcO?_&>!Zz!2 -DqG_f;%cJ~00fP|m*kgD`5hqXP$pbtc$mUp$nh={`5I~8N(;^ZAAlcSkD|1C0kr_F5u9OT0>7MnwE5G -xe#)pder`5*r0FQ@O%#ImUJp`h&njA@Ri-We=VFhQ@bYcauK8EgnUcQDXbWtJ?hDuEG|dXo&&VgeSzp -7@}M750WbJlOp?mprc_hDgLH)^S}Hu$Rt9)Trb1yC+!Jxf>SRWt%R?hkY>^3@-d&3Pd$($4F2sMiBQL -@V{TgK|!P68Fx2EqXOQ`5?Y8jqwM~JhcHJad3!17EU6u9Mg@*&VPMD5caV-c#@`@WBXFdvaNHxN=v{1 -ROQjS*q#S05Kng=Zoi|033P^K<yMUq_KvKmxj&Q55gK_AK9<wGpGLS#<ndMM^PHc(=mQlGtaVr)vziR -IXe)ctcyUm<ZUJY(%PN7;j8a=1PtPtI$DdW1EetuEI@bLl6nH07!ctnKoaf7FNw6^PSo~uV`F66n;ax -=+OR4>5e%tn#cJw=&brFoLY2ss9(+#C#w?jq(p-+?c7vFJm)<YCTxg)$03jZ9yxauRasuPE+Nkj=?;O -&dgmpgI5irIPbi#=u~?s_0A=$);k_@HikBKc4^eMv&WqbzMS{f(0wR<dz;#e`yUC;GCSl1opGUpkE0v -(UMo12~A(#pyV}%ujPD706T7S9Ek~7BSJyfW3zr-Hu6|`yjW|^iB8+T2?aH7eGE=YtX4J9)F26p3G}2 -ID$<ty%nXIRyUJ-mag*d2OIXhsKQSpiHw@1NQL;DD=qfih@6yE(!>0V$Kh$&7`W8=5H1=SVsKaqSj7{ -|Bi8b7YF%ujUI!nxf;neoTg$E0K@uAS31?TkMxC1?tqqPpqfGW?kPP-j-+P`B3w;E?(tcw+gQsNPmPx -`vBG)BCjDw8B(AC3-!1cZx9dVp0dstIbA1p0%9Y&`Vt?0P=@4%hty9rv3JjH;ZXeW8PO@RUp(PfkDrW -HWJ`o**TU57HBHd;m{#)OQ)rmo+KKsH8<G!e9axe2@l>Z8lhaIr&90ph`(03pX;x@cbBBRw4ZHJq>El -*p_Sz31lD`66oM3fQ`1K#SlWnp$~(NFeq=MKI?59x)WLnwQOOp>80oSBqzQ4N{d3X5O<ap)1Szmg?cL -LW@9uVZsm$8ZRX&A<y_2XE(r78jXQAb4A5G6S4!UUs&iSp1XVPmsU8NgAw0?101Ye20fH`Ew<0{Z-bt -fMoZV!Nu9R~&Xj|LVaXo1CDTcy*2H-Co$Etyg`p<#ADbQg&Brh`dvn-Zf1H|qcMKq)f6&`9R)t)J*|E -N(Hb{U|`@N1=GL!3uVz{-@3)$Tfcl_pTRs?#ZNwBuENg=T=9(e8AnLKxySkL`i57foP*D^o!M_|36Yt -9(}2%z|E}wVfca>g@V7_f9fdR7ncmCnud?pRrWl;e21>8feDX5dIYH@v_KKbxRd4vC-=Rj8yabrm<q! -aV=+OkB=Rr|HD^j@6Zu>e)bB?MI}(D1?=EdmIa4DIZ+ARA1EFC&C}pUp-l^Q8g2sPSw)gM0$YV`8Z9z -_`Sfm{211%kZKFLE*-nxH`cx_@26I&qqNm}U*aHBa^Ae!rYu%H|kI@R+(YzB0Yoqep1F8>f4K;0B(uW -+Ba7~W5m9>TR=9wzL;4=y|4^uZPgY=Nm@Rygz=cg}D0HEu()e3r%tc{YUy_;tMX%0|3Gs+OClSy^CQE -}eRHXUN4I^;+<m@StFZ)Z{SggN_E&E|(k&$63p_URLUyZQ9#@aX8MsX|$+5#TKwvZuJaLZGnG_>;4V8 -jt^sCEN{^9r}fbTnb%7+0nDc*)t8Ic#yI}@r&{owN>UxBHq84J{3$Lf#E<WMu4?V7!Zqi&s966=?3W1 -k$*MTdKf8yRvT$)kb`Lh5|iLk0b3F}sEW=9TM2DJsLqMm&bX&?q$_h0!lQESSS!RGatf;bZB-!difbZ -2JI|<-2ei9i#xEpTu551_7a)_4PB_7k&WRReXCeueyfRe6-}<l}lwNpw2}Cq8DnKI@o`TC*DUWDdbQD -h$i3#1ES>I|$>ENe0#f_Yy?xW}AgQHmX?b&e@F-5aYed-}Svd`%8eKON<6p@vfb3XlD@UBJ4e|JJUdP -lBuLxmjP>I9F)q`K{Nc1&ffBP~HaE^BprrhDZyzsK!zRG*KEPkKFXgnFwagk@QLPG_nYPKqOn8&vuxB -umlPfkC}blO=VB>ce^noX`>lk+){DzLlWeoweYErOd4#!rK=9qHK!hq`7ed>IlHy(UJ>#q4FA)Ml{oj -L~U}hYN9L|BoC05Vgs!+VS9U|V$MO8eNnAI-NEoYRuCrs9p;pf_Z&VS_{c)&2qJGlD?U!kz5V^qB?b6 -(1O*OgKdo(1<>ct*Pj=%{1Vt;lyrzZ9l;?AUT%7|{m04Gce=vGfP0Hr&HMyWMIK>H!qbLhJ?xtu8KD| -J?ig{MRl+22i4fG%wa+<|1pqIsB0t^t^XL|xv4Cg)ec6*WIF$RXWS*>iT?Db+$@+LnLe|ALR8CezM<i -UhBLhfMfP>Yp%1H(P;)dGF<?(}_MyobNE^IwMAXWs_}8wHNj9nI@_Qp_-^(^c5LFX%Y^27jDoF$#Tl` -zod}g;~am-`wMbX*|bcBV5ZP(ZINsUFv_-c)|dU=Pk8xm})9sX_0_2Od-%J>WlG3gvoqY744>x8XF-Q -GK2yC4cruCGY++p44Z>?oIAy;oMOQY*{0X)c^#%CeB)v^!}LFK7l|(|gmix3-FHXPbFcK<P74?i6(j$ -y<y}bpe2ss*pknYL6=G~??`co`@sC^?!$o`lt=HAY#Rhqqf$wv&Hn9BjR*P>OGqN4j;nTe)w9{^AJKe -urs-j@P*+Jdp%u~Y&WhbT6!VkU+k<TJ9oxTexuC0o2wN*p$9dc3?Re|`9`a#pyH1swCJg=13sT+^SJ@ -|#o=*~S|v6I%UjU>V9M4M(fDuz56^^S=kuKjA!uvNSojpn14rOH!htLQ$J_YWE<gWPn*5qAHEx>SYOb -y+hEA5Xe-t@H3K*sg1g8&PIKI|<ke3Dho46Mje?xuLX#VP||Ie)Le<QHosR%NgT1ZPo7bfU1l|1&BkT -5IcOR>Tk$p^e0AHPCgktv=ptZQraNXgmW&tu?l|vvoYzLK6~ONhEKgM>em}`irkO!8Y?>P`J14@tF!M -<e|d8r|Mkb$=V$TDA5Y(Z=-&%e-hnAJI^14yle*YcvNf%oLU@pemtBdV-4SB=vD3t!Hr_lxkcPj3cE9 -JyHbfTw-@~W>sk3ss*7cU^T?@Ni-I>ArSz5E~KN(a0ZgcYgB&9p@xtqGM)m5i*)Y}<*kBnBAyj#)}=5 -MX(INuLdHGaQVhU^2DEjGh^*@nLmKPJ>iE4DphL(oD8@K=KJRbw2vAx_Q7?hM!WaM<4My*(LfIPt5>! -SG%6oqIBkc3tQnl{RxjYvs+1@c{K)9i4taJK%1S^-a`U{N{XQ@Cc5B$SL~4Ejod{g>eDC&MDPW-!n$8 -a=fLeTutjv=MbLyddc1#{GU((?Uo#K(OO0t<qpdTK+#$GNN^=nz&~vki2-6V0Fjk|2;KAPLml8RwwB? -+X<e6Zx!BnzJ6mK-m5=v_)<lGEhAw6Z;onp|+H8`=o;9mo)vblio-D5HoF5>eVP<ig>T$m_x8CzTH7M -A{CRdH^=^jTBIqb?T?T*^v*kD9^Q+GsB)P#up+u$JRYj?|NOvlN%yCv%)=oo5C05uPQQM92+3V=IAiS -69s;;k#VF)6=gLSR)BJGA#`n2A%Nh^K%~j^iJ}QfgrIcbd!=EuGoz)F~a3)crWTaIf-F;p3aN8nee%h -U(UPt*6meKKLhPLK50M-`c3rMn-UaplN}E3`EKapr6b>B~wrwBSK&KZWPlv`r`Pz>IAie5@g&Nr!mmc -*)c%Hf)hXDD9!yWhrGCDzpsfS(AT=DG_6wNMV9CSu0?%Y2nxfmJfvEO?}h{puMFZCkjHb2IBw*5@=+g ---=wV2m<H<h%P<&X2$6sp1OS=Dh02+Epu}o7!o`xkMST6$iQmT)!Qa#?_ux*(LDy_(`qYGgD)R8^C~_ -KUx95kOba`HcW(2+kpc?cIP;+077f+>C8%n$_hn9REc)nU@(m$JQR_urbd6Z>9t}%?;<jr!^Oc-#Q2F -4gBR}|$SQ_95Sz*%TZf`@dyy755=GplGmVq-jw;VTO184G=Ey~@>h@2q8WynXMuo}Exaa+=Qzp~Cx*6 -LDS2`6#%q>t!`OIJkmdRuf>!#es2`JKt{8n>08vzmE@+6M@fQO<u|41L(rK4xcn;&;*Zmof+CZj^+U@ -gK{Q89XcKD*Eq?hP6Cn#&&b=6c)_Wob+R<S(a8b{8Vbyt)D%zJu^354f{mU!7Z>5IK?RC}&~O^QPzrt -b_byM|sa40F$EPR6Dq)u1ND<&91bBLKn+psyiA>Um0|XCUInF%=ZH-juz5@_H?07{a2WCip(c8yVe0q -vKZVbAxGX!ht5v<|)Q`PeJ%=(yCtX2$mncw|WukwF?;3DUo;oQj?rp10>S9)Way7?IP{y3L;FCR!!b; -Zw4lCSY{h#VU?f+whqWbCFw-4LUmovQ5>MaXQ~SPTPKxnS5en|^>HK{><wtJgnqrr^z>WCuX-Jcx$kG -m-qJ4_|<k-gVal{Pm{+#SVngw;evlW4x%&+GJY>e+>Wf?wB8*kdoBtq&@<4=VSCdXy(TS44VV<8BDOF -Sym}nx8p{Tre!$31lY^Tq{gDvL8=8muuocY`WtLq?fG<*3%r30u4En7OsX{^O6&wi<!MzF)9?)D#^QF -SQo;GI9b5+`MMEW6H^qyIbfCgMh6GY%f>}1WN?zyl^zLm@6NsNxb3FZ~$<wTyVy!q=)h-c#0{Z6c`*X -a9gnqn#{lky=>j-e}1bbRuo%1O%ivw!aSoFLGNE~pbcKJnLY%IFix#;ejhU9h3oft{E4P)y?PxYPU_) -$}0A9RLPof5;S>#x**zjNOJ^+Iv9KU2H}CLpi6g17q0%%khn)Rh(+iKj5nU>R(WG_(7wFi_E8<s%wJ! -DB<gJbu0^lf@z_tHy2ZAopexgt*Qi)eD6a%{W<xZ$F&Mnap8TU#Cz5%z^a)iLGm6q~-(wVQMP_D)oKe -ltQ(S4@ykE+P6y(lUUz5Tb;@cz0wwAqAqH;YuLSPo<d0MRZL12nJZA0G?^Axn9)RP3j=_G26(k#PFKp -&of^ewS(fQc+FtCC+3pA{DfL~CfF5W(9RUYi0g8_EN}N<*yvEo-LrzjTDnKa&<=ivI9;&LsOV8=5GY+ -KjS#}^kNdF#I-=WPH9>(e(#7h<NwvZrQ^R!w}o=bu5&J@#sxXT5GS4l+6i17zre`c0WGd2x`KW5Y9wN -4&d6zG;ts&vZK$V~>2Adac*-Qyhrc4`rFq_PUaBC8nhRLkiN0zv|dbj=%Ygm<)%Xr?2n74e+g6Hs(+J -Fg~y{zE_j+h_p;Y9&^~01SwsW909cxVn#?V3u)_yWNg3w~OMdjR~p-XWt1xiE|zM26x*)BYaLQWVl<= -QRk~+KPikyN8U|U7(OkbL|@wTT+l^q?r79?p3I8kS-**2qDX}Fxh;GTvPKaKTql~64Jv3(GsH8x)T?s -n;G?05p`x0wKdf&fxXe_C`pCmM&OM^c!Do>JzBx;_3-#&&XaJK#dsmmx6y=C*?U+>Rwj;v&YO#9Lx36 -!d)$a?iTbIjArJ)977MK`Y{S+;S%gcd-zRO4st28dcKo(F~sVh@Wm%g}HIgmaj9d-+w(5)7y`Cmwy7A -5eDMOs6L(Q_T-@8M-q9qk@gb5UuQvktkb`sVs+`L|UHyMAdS|K002E-zbN!reKpF;gS#7Lm<nPS`7|@ -2)UgLoZTdj?$n3n><dDsJ=;yQx>OQfcmu#7>j7MId&JRJGb$BJ1JB&;$cG_t$C?0(hPfH4`4*9ztl$C --ryA=sh&6|BiCGjfIO$2iP|Dx47_+`o1)L%7*dt@k&4y)??$WAp;h^tX%+orXvN)ZbX7f3R}mOP0{I` -b@4kt1OiJhi)Geq>PBFrxUEfpm8S0>}XaAXN2GdJ8I>JEl-V8a5RSnYu0I3tURtpNA#A|d)=W+)`O?# -Fa_O$N&s|M-^*o?hjVQ(L^S^B~gg^}MRRH3)MU2)KZi952@QATd6y(jkXukGHXV@EY8S9y%dv@nm2u* -*N~J=^_Pze9KwHJ<Gs?e8BRdXE4QsK*t(%3-ne4h-5(DZiKT_)mS&+k^IF(8j%8`0}q87tX6>nkbBIi -)R<Mh1cLN+Ff@w!1zMdq_^(5jT(c3HZ*%jSRKFc&%?tDC)iM(bYSQ`-edy?NToL7-&1m%oV{4{nZ~S; ->TLssr#k4)7#+Ir<-sZMJZ}Bt?_Y!#pyQLo4Ie>!4T~(~`vmYHn++t&%$*gy|Kv+(8~#jeF(8(x%QdT -v&};7>E-7~f!5u5o0d9ks+%0j8X+{>$6Gfj*p%(VY9W?`O-yQTwTR8hd(j*;i%Z|2Xqb*5RJz1&JL@4 -g4qCQ@7FXf?o$I_hTq3#tcg{`i2FRc*EMzK4#q|z^0G5ZUUD0~!3$n6o;_C#q$?VliTfY8;L_m{Bv*L -05^PYG(SH=yZBaty&fqA$E$lMSh1%8#M8&)EB6)AeYJj=G8{pNB$7%U9&8aBebG8z6^D45-hz_Zv9l6 -{~n|tzqqnkkZwnXgvIv3!G<u!4SvYjA0eQH+DE{_|1q}?rmd0tRlB>Y3Vnka6&oX+r?F*omNvfI=11u -YPP{t<dVFgBk`<tl_1^s)<!)fle13-XB4p!pKEk54Eku(E%@7_vG5aMr>h0+Pe#u)x+W5<!`N+Xow_c ->Z<F^>L&jGX@Hej(_8%)vJ`cXAM&Hzzqi<BfcGZqO>ja>ixx_~bA7a2i&%$wQ7CIxkd5@u~LOvo99)g -x;50MCuBEIhh1DWvmGcUgc`t_MyU+fpUD!yq=JPt3l6O`Oj$3_p`;|@-^Q|V6MGy>iF+YNc6R{I9~tH -ym(9&MpQT6s23`({nOQaVD$-76$ejT*tZr`H^OQ-Zfyq;CXkhWxr+b}T8%1bA5F@4eVzPO*As5$yzpA -E$ZPZm);a+59oFv0JciBdec`kM1Ytv-{_-6QLH_4joj?!z1TmTO4(<fsO2aAXqQ(bt@y&+I<u!KfzmN -?M=vU-s?>o`VsJs54s<xiyJqn3()QxZss)_3j>*&s%g{Aa6PgnF_1{FYeQGVknJUJ==Bd=R&4|yx2#P -2f5fu-ZOH0YkHGNnxE_rra2Jk#_^|c(KwzFO0duyw%AB>ZOqyoXmLa!;_I8&^lYU*Zy9I&^zzmAsE@> -(K)yfwH@OFc$b@l`vS#`X)C;M74+h7<-d`;;K*xlWP6a4$3215b0J<AKO@c}Qu)jvjjJs;jew_3(@H* -Pf=U)bYm`rp5+2G6Cm+w!&Bsk)kmHn1|8c~{hQUHs6@Z)cSFD4g(Dcl&538DDy~Qg3Qd=T}q_!xVX>6 -xH)?4OMfMpi1ekTTh5uq-r`1EyioW?~d~8b$xqpo#4v`meM%3&3!sdB*xYB>r96|HJYj<`N^8R$s8uL -Nb=-Ldi0^GQr(6o#~t7HqwxAG^zYBkW$TtYIx*$@^b{y{)TA@_t83g_Cpti)fpgRt3XK9Uca(G=t$A6 -pKC<Ac($=-5id+}QZAdpKtV;CA@~PN!x+c%N7?0k7M6ilEySwS=&hmh!OUH|KsOVJi>k%A;^sNR7c8e -E4<C$HPH}JTF7X+T9s(13aG)CsE_^L;9^P=$+@o^W1?}(H+Ce8JA6j}G1C<mJzwCaV%uKy3Ez-joaCj -n1gFCV>e=IK-C$q(@4)V&AW|MATHc;WT(;zgMBC;h3{)r%KyUtH}pY{=uuBspw8IBGty-M%#6UU>+B= -vahz{dH5?(|v7MS5<=w>VwXB^AsuPzR=w;Hs0jsyvCra7ry(;wlS{fjkz7py-llp`btjm;?ppgVTj?L -3qUK&APiLe`OHi5w^bvKlcJ!=U>Nv4=rCVj8Q>5+@!v#iZZ2CeXzp2f?yK+gy~w^dP(yl&cb8~T-sm= -st5lcGsxdV?IzASm0sPe^*jMK*PR>h&jGJf!8Y4tQb?Q&C?h2{#)dl2s>yTnm%vPDXP69y~GtJZ?0dQ -VQq?l8m?*U_%6Wy~BwOb6995=e{dSqauo_k)<JN15!dm(zsf5ksh@4~A&^lOfLr-yV|viE+er%!tq{O -||!@brkE(HHvv89Z=-BZM6Xi58YGUUZ?E(EZHx9{L9%4B|#%OdTNDQ}XhMx;Zt%3Mh0KS(G;B8zJ7n{ -iWMY@6|mcK{3=dmODP3c)&0W_9(S1`oFfufU-;B>)(~&*=~bmxs*9xxnb7&c&HDNI9?JhSgP!bX1_i; -r5&i_{lg3A^`h5udh<@olFf_mmmFt!`3Ai$rRm=yyVX1bUH_79gPs;yh$)7i?XODzF!B%tY+73aRr6$ -fMM9wKwV^zQAO(x-3KX}xd8m;gwXG%YXA`jms$c|ZX<TrIU>{bKjr4jD5$+k9Q>dAM8{VJFyKO|(YSK -NPU-I<tKK*=N<7j4z4(BHH3KXl*9yzXDtQ7u17p;#UPHVi>Rng|{8}zssm(v^Ao}A^{ziMyvQg7x7KG -v8Iqz|ohCeG`(ug>0L5N@b$Lj--b@m@rqvm!Uro8hR@y*oR5zwLg-#*%j7C<wo3w6??0T;W3a<*kQHs -<*1nYt9yG+uPw9L6hO_n`Vw2Lu@>>q^I#}ld8SHi<Bt>aGQXC@d0-o-8~-L-vcpx%*eUvY4nvd^^%TP -4q?KnC(8LAbbZFdC2SJ&sP4_b8#eR}vj6@eADyB<52x3w!FTOo(T*jk>I`{go}^hL9TeaF*B5y7J@oY -zH*S+n-&GY)sw}Cl@v<zv_Pq2qr(0%Ce`k&|Zs!SX&UzKT8;5+gSF+}pQkz@mI8u34VhC)Bx2w?wv+G -_-;R9>6SEg6DQ1~NMll0p28w%@Ph~zU28N*_B8h2|sX`P%oQ3eMecf-F7$N#Z=@fE-Q;UJ23+4A2#Xe -Ua%6#O1o1rM_%f|m-mA1!*YOE;YF9$a1qJ3Ev-VUf_CAOB&0fBdof_~ByrFZ=r^ULpzQO6Yzzc7qV8B -WO-N;ma4|VjgGcy0JYCU{HM7sv{@egQ)-;(smyjLVuVBPjlUY_Q3&=?BmCe`PcD(e9SM9U=E;zgZt5j -I*4?L???i^R^3K4g6VR(an@)S9yE2Zsb~#h$3^qy-d<xeeQZ?*BO$DvaSe9zZZmB4hGY2ztk@b%Yk)h -!2Rv{EMm8Nat01r?Io(>|G&!CO{CUtmx-DaLX5`7{34s+$Z~C%Q4Sv=8Y2J?fHTQYWWl3?@=qndjSup -{dPhaoI?`L{~E58z}<qX|%J23%G`9;3^<)N({2o4_OtSL&F`izP`8gO1HsB+(T{kf4w5m64v6aS7<6L -m^=Y)FjwWA~tU2_So3`Bh>1IfY}m?`qkYzR_2v9W=b>4&uJKgP1tJ>rL*9G;hbBq|FP77s=fNYN<<z6 -O2fTYq07tyf#*dKKL#0o88wQ4fW0H%@^f({t9bMlS`dY>1%TIaqxW{TfY<MQP)GI7IETRuhBN4lTXBa -Q4fK;=Q}FYhYt5R=qJh7Kbwmn+~h$ld1=$uy-Y%tv4?W}Oy}#hllXR~A8>)bw9=s=8?de|brlK8`k&` --Skk+KAEoyPlts2-TNr|jX?EQbOent^mD(ar38qH9E@`#1^WRlQ;4Gf3<E32w*}rNt@)sB}L^MRv^w_ -4nHaEAO7Av$%;-oB-HMdodPVvc>mUQYA11Eh>i&dq=n<ACp3uW(Akq$V1FephUb1gV%Qf&dk;jY{czW -+SmQdhm$EHbY=+*-T!_Lj(dT@}7B<NIP8YR(m~k#mXrJp=OdZzGd9jVp-~f$wR0*J}Ci_crXva*f>dS -G$V00PzE%Bb#iflLd8KEo}0g{{m1;0|XQR000O897^_98;4-PP#ORLL}&m2AOHXWaA|NaUv_0~WN&gW -aCvZHa&u{JXD@PPb9HQVb1ras<vm?<<2I7-{uNlcQX*$)jpdn_RmG{BY_fN`oz12)yR{Eml|+e<O^YJ -61SOBo@qfSW20-GAvL=(Oy1ip6mP9lfjYgx<-DqGgS<S`1XvAoDyja)OmaVFy;HxIDN-;{8E0%9}Ro$ -@Yg2D6WeUmN={^xYJ%geh&zO#NvfRFs2dtR=%eECDe>$ItA`O7Z*Lsd3uUUDdmFH~E*U7eSWB&Rtda! -tiw_q&28?0tDm*mwD=NdO!C`H+j|;zBg_9KiWRf=%&z!bYRfjNP&bN)xs`HeAFP^E+NjlBfa{<3|+D* -}AIPoaH5p;yAvzxL6gb5N!TaS_}TO<ka8u=Ke41wcyQ!deH25y2XJBH%I_aGb5P!TohF!=5uIjI)EC3 -*##A3d<}(pnK$!!BzUn-*ls*wE~4Gd1d+wEMSKu;WHfD7kPTy}cVny@n{D0kCU5w*Z7w&E*1Xx*Ws7^ -7&zzc~NgJ-J_SZ8j3A<9lUZwS&2y_I<#gggutYy2|Cs|=I7<_E%{R*1n8QWpG7T|<672DO-A<sD5!kZ -k}!nQmu1*_I9U9C8vY$`cs_gvP_Se7>FL{fakQo&MIfHbjau_$;MDdh2D5i5}8Q3B*;#y=sL0s+DkP0 -MsVTPzaBo7KpumNreDFZT^MYK^{DU*=`H<=-q804g|V6XL*RK`f}hFZh<1%?Ow|H{lm*WWWEEZlSjm) -en3?0{9)TfvbP7>MSbvTM@T~84d_c2ow<o=;4kAN1oP$n7wAhH^a87`MhTRmA5dj?|*geEIkh5j^0ZK -IwL=%Fd_|3(e1=23UsE2_RDbleZ=;HE9wkDk|iVpb(NeAC`qOOvugPOdexXS_!@}T^p8v=(O~@h-~ay -2_~y;q@xW*bCl#o$CIWe1m$x<F)y7=HhjeGO9z2O>cJ&Q=T9*+A&P5`Qp9dXF3CRE@S;=_p70UM@*L@ -{J;@hyVd_;V5ic}p`u@Wi(k(V$@#3>lvz<#@nV$hGkG{q$9zA$Hk*+=Babcn1SCOFpcXMEFseLEh`ob -iF)V;xz=Ez|v%5I1f)_MeIXZ(HQ`A0hr)@3{ft^&esWm==P2Ef51fqgPiTZpVpD(iJ0`CUzgL7|x-I* ->%vqlCAS{UlenYsy!Ea0ircoFSb8cB`m#D(1?+qC^WMtI8yQ_NIT4Ccd3(QDPTu%Ko0Bs6zZsDbX#R< -F=5N9D&&i%+Ti$3$OJ$dX6^e7?1Kqe2~%48snA=Eqqf5XYI2YmFC>lDtClqDEzxDYQG~hgkSO&|@kK6 -mNPdJBjM<Fr*55zosNmUS4aOE|by*1(ybP*<y4dI9UN300Iw^Gu3tieUabN9=j4ff!gZI2X@T^6QD;_ -MTX~BLvHuqIY)yaYo4No&%I+q-^+NvrKyl$WYXx3Vu)YvV|Nr%seZ-0LOhd(9kXZi$QZ_{10+l@Z%cS -r{`GMJjW10OC|IsgX1KUVc)3X7Kwg4PR_uSQBEhcL{E4Y!I2(B6RWJ6_~lsGbqG6(DMTNuf>sB}+4HV -x-a@#-1xSFfvXp{SJjTCp$};%u8XRM@62B`Hnz|*r;(dIX=p=0^-fKM%0031PG{R9AqMuji48Exw6P! -M0Tt3MUekre|;+%{fmVy2t2Cy<s9|0h=xOdtsh@sd+(+<$=l@J%zqCBY&`2JjIb~c7e<6J_TB?UU;<a -7kxaNP((N)!83-Tfwx}knjf{W%8k?)SzmkM{6TypweJv;C5NZs+aabDaYlQuLo3MAYt}gP|uiVFwNSC -~bCi)v{1)M5%3EJz3rl_93|6W)7-GV*d^O7x6fpu?jF<OjbOAT4}$9!J$N3iEt1#oet{I~2Db-p9P`M -N7-xnKz5%XkL@&e80`#ZXpYYzx#!DR_-h3!N}WU+Sk$bC|P#g+cwkuB$ro0Pq0=3FsfqNtw^*&!C)+t -SXT`94QjyW&ll(;O;4>AR$_wNL*Sn;tt2aYsnc+HJfQ(8eFveGlREk4Y`%8DK?_MzIwHJblfOll))rb -GqE(3!zx9L0=4`x7zk;t+Ekh#BkD8&B1KM#TsFgH?fMDDVE0D`hoB3Jn6Ru!1R8{7MHhi$5BEQkACAK -x$EPv-A~RKm)5*-&J!kNqG`6puIM{U3KvlJDkodv`e1RM4>+HgVK%)a44frtDQp0JNV{plS;x&3#*bU -a~OIY?N?9rGGFb`gV<@5@z0&t-Ph@z<2hVvc#%!R_zf>$+~7h(%z&eAet>l7%3H=vG1zAU&O0kLR5F# -%HXL942Sk@2OzcjIu|eU;|cB+MAoMC^(4xGbdx(VoFiQ+#Pkfb620Ktie4^zwJNphrFBXh;o0B~FY-K -We4{i3AqAXs|hH8GBXzN%w?bo&%z!TEP#u0WD>uic1Y|_yFfliAcxj<f7}&L;akRYNG`y1z{AQuMb_0 -Opz1l&Gbk`cwNztSw}bDPS-eLzD=YbUrXTQD}eubdeI{Kd`df7`eo{LkDB^;W>-5x!%X|M;=6`Lf8s| -n1(MDxNZ1b;z@zUc1i@aDQ2w#~e)v8Ldn=qCSB=i*q@g!YMRV;bkS7!#1C3qeD{tnR5nL^$82;@i6S3 -P0q4V1N+!#yo0{ZFIc;=2>m>~**C8g5?MrSZ$f9Qzlkk4W#4s9`Nldwb2a?#7eL+=XFXHO6*n;F?U#; -XwwTeOh|EI4oAfld!L7sP%El@2CzTpMR|azO2oBoYpx7S6FS&hLdcZhg84Sb1%$k6{0M1_DY?s&Xhdt -kBNFk)n_RCx44Mvpp8zHr+DZC$QLUcMO{I=amy`&`||w4C4sY+zDeL@3RzWQhv>@d)7qu`c_iyS42Kx -tArbdavVD(!eGNJ+*Sv2CSm-YfQBx+RRPzuyyMZUe57C_YBzQw6{^yx=Fok?Be&6Y{%OC{&EX^m76Q* -v`tqtw>!SsaszBON)oQh`YusfNo@yB3;EO20J*@vAqpn0&n2QL7bB|0PiY??wOpFzIx!<Cn!6So$6U& -PMB`4UgTDu)e*cFS~@87V8@G_0hDgVL}TcuLXS)?3b(P>nQLt|*x+Zfz<gJ5C;xzJmRhyf(qLlBr^1_ -Er;#1Nzbmn!_<#=~GREy66sAStzpSZ`!|$Pw@afl9oyUx{lvnZQD6VBGMd=-Gp{YdbxX)_PA(dW}*@0 -^W`owG|sk<n-ymf$M?76TgJ$J{4U@{Bg6x-{_Jq781u|(e1Ix9#eJ!`JimeoBN8QP4~Rmt@i~IusrTk -@Hxx77UQbQxQvb$RkaaBEA9&OPrz`TkhE!B9+6UtP3ed_SvVt;I7h&G<a}4{%pLGx5XZ#&GwC2fE~M@ -)MPxCczvHWXol8xOyU@@;3e?>KiwbbE7mIk*@ovAv+zA2fZSD~uM*zaRSRjq?LvV2Vn|vktuvj3mz~& -MAVcp_E4nm7%h5Ph-iV~xPU$$G#`ZX*d4SUSN>E8?9HfZ?Jx-BFDT9Qg#$dEdYft;9Yy`dqCkrqWmiz -)?b$}6{h7Hum)P~;n4905k|sKzc?vg@bFy2sE5sAsXOU<E4g<ouCz21KJpB}Ih22b`cKGp0sI3yQ?jQ -VWtQ<Pc#@^I<PzBzd<+OHxOAOgh^ku<cLH@3+c(?zaA?xHD%#$$er4>+C&Wv+>Pa_V#8x0JH8=ZZBTT -ZN;~=rFesTiq3MeR?Fsmo!2s;1)~;N`_yn^cN`N?6XR`Jn26&q>P3GCigd{f&9k)Ffp&75N*m-U!9{} -)@4x;21EmZYOdiV}&;W&4*&*-!`)@k})lP2g8is!ZQKf-LEtXo_QD`Vi#*n~iF=P=aA*I?v(ktCqrx| -U$k!X|fU>p$VpiY448*JjkS%a-v*5}(vP><!k(m?1!((w7b4sZ2LhfvLvdK2P`5fKwcke^fA)buKXhi -ie&KzxHSFj)NC_saStk5{fAVS5&kZrJTD8z|*7@W)1>k5t+fAa%D9gPypvyRsfg`Mkp}lx$z}Pp~@S& -Iv5mk1#hnP4~3<U2W!|*iKDL2D&!5w4l*P3ncbqOpA>K(I$n{V_FKkEHaB|t{uTCfz2FoE_%z9aKgt) -TbXz)CzzsO9K>TncD4aJ(#nYD$3z3k;HtZ?X4?qTF0khRHf>h-INx#oy2}sXFA-MYUru5BS}B2U>D#a -FmE+XlPM|h7Is~u;nKXgLKxP7x2H#15&E?90#T8ClEXMNnG2iAzTB9CQOC0jytR?Pbb{lcEO9~6-g!N -{Bd3j#$4&G;EZJ8CNYEo%C*iS`{TA7>#qi~J;YF`f$HXtigGqgity*>+<u4?VmIjRX{Cp_PbnBEkCPQ -?ms;h#Iw4;p~idIHcCr1TTT(;m_PfhvI*^T#%6fsFZ8N{ge^1{g8uH7I)|kt_*C)Bj$3>yoTk-y)ENc -L}a0N9Zjq@nxen@H9hQ1J)jyIiM&b{FAVk7J9|E>jc{^&ou9hX1>U}gH{7<3rUaVUTdO#(QDy9Cld7~ -QK;V{w)AB&B{!Dz+KMF+i+l^taOyEXt<3afhCcSp-}hO@&>=5)JAFZVp(={z!cHt(v=dl?ihr?5xvI9 -iJsIU37Tc{e`_y_P67oDT>ntZ`P&lH@yjdw(JO@NC+TD6I02Gt&D3-12#Ai;<uC*`oyj<2L?A^O}=gd -yk2a=^u&iJRsmNUWsc}mpOp%YVxep`W4?xE>Ew*KH*LL&P~qpsqGT29EK13{7Ol_wpx=|&<cU`~S9#y -v4Xh<R83qO2&6>R4qoRdGid8f#Uan8m#=+;BL0sPa-bb%rnJ5P7CMSBOpaz(iJT9@ebb2*U`XB3Xh3n -b;KThfR@*hioH?VNgJv%@rw3r#F~LLgzX5XRd3Uovou;-PUWRdR2f?=*Ct}QvZMe3=?WvDV703GdLNn ->2E_#dQyc(k_z|K5FTG?gZ-3;(vj%x*qg>7ZH0Hdk$dubOWyNZ5qbne0mdDs-bI7?e9)WZ_g){Vk-n& -(9i!;bDU7l+a@1r;Ds+h4EOd%S+pnxpx84a|RlB2|QH48fg!00n03Aq!g#62BP$2_Zv5)aqW*vccNl# -XtitK@xcQS$I4pipRrW0Ko^Ko$NQRcLzU^vJEyCtN8#Gc(cBx!@lhbJ3L)$w<jamS%|mzm-TE!psUJa -ZR5d~{Gn9qcm541!Yd<=~}t*rtUUsIj{d&e96)(c|N!AW)Ca$YMgk;2yYcuiFB9Z4QN(3u<PM{nA3V? -_4=|H`{AZ&|ea4qqhXF0z#<f=r=}#oDFVTQgN#XnGQzs9fm))7^1f_^!I3Rq5&4gY`M>iCNKNujytt| -jee=No6@7wMQIll!$W)(CKBgOr~%oH*FLZK&f0E-<<8q-TMuOZF#&a{$I+8DroXG76DD7!VlERupJPi -2isr?(Y!6{Dwey=_GmJ&Z1>X}vf1Z*&HFcE7elmk4&r*RPF90@(21hx!JgQ)dl|3J0m-t!N9doHm#Ye -I-=!k_BTfuj?19K6o_D=pWQG}awE>Yg{hE-9N0cXH<+qdQ}lzVxej*;@B9>BI<%X1tfyI<!7dQD<*+| -d5^vWEf4@cq<rlvb#04um3?U7SLjFmwdB<f73>nX0uB(j>z&Ap^)dkfcoGFEi6kxHixiFh50+Z5~)5@ -GpILVttp4W6-p@ul9HM%AhA~a-V^Ogiu}K9wlwH(B@>W&tlQG<?e{BVz13%4j9Pt_=-H>sE;5kb66h= -X>nP{h=%BwQ3uc|qyFF*`Ns2Fa4V`ka712h&C>>Rob|aUZx%{g^ieDoer$1^?#f&x%9_9IPRWxlC%X_ -5JtetQm(q?fXRbk6kBYKK1C>DSgnBHN%&e(GTDhGnwpG?QRb-&Qf5LR(sDIrU`jEosZzv%Cf{c)Oz&f -FRoh$Uw)Hxs9o|?rr!M=JL0@=d}n@0Ln?YkIW53%>^HP*kTm-0X_y(LsP@$5O+<GDJA(ai(rL`HZXP! -5mPQTfX0Exv=kY0}%{z=~$oV@)iQ`s~hdQ)@Yg*M&|Z!Dgh|k~b>g36L#s@-1h_YA@3lN-mZ1eR@E%i -1J`8$&;6PJcz0c^c`Q*7Oil`^?ULhLA)oOr8Pm#ty8oA^W$HBgsE5OX_5a|st=gFfV~?B-OiJeX7I?~ -j?u<J8HOLoQT$1B0Ds>Mo~;>c_}Z8@j_G6Ds9HYwTeGH(yL@<YA=iuT@}Z-aj0t$5v#69(n(B5Bap$W -5+-D?N1N4QfEvZd(wL0{%<>HXWQ!bnt&_FY~RdRh+e@NY>w6!DdVKuBC2@hptg^wQV<7&))-MJOyK6V -EUF|wfcLqxT&SD22&v9Vg8_>;*$yW<Ggy%tZX@lnS4PPz*Vb6J!$6S5qye|SVDfkuMD79UcC4w_8N3k -Pmwyur$R@A1(A(me0w1a-Vvh2tLTpEii){5k%h4XIBlwZ|1shCo`TeSvTwj&mjB1ZzY79;U?XiWCGx4 -vic~0LpQJr?BjiWCmK^lsL9qdGnET)SDcG1c|V>aO@HMQvKkjm&@~;hG06AKhT1CKT@CtOuTy;iG4lP -d4y)1j6+)SP*+C%;TfgM`V+YEL3}EfVlcoz$q_K<4lnnxy{_uK&UL*C2WdW=LQAK6I6e2wnsRr%k=N_ -Exx0PVrWsXM39`9R8=w3W-QfVMF=<E)zR)Rhf!hbhsmLr}uQ_R%u7+US{O(?5s^G3YZH6@YYLA=ndc* -oRuwaEK=h!Sj{0xwvqI&R;4F9`o|KNX)`vwLOSfhY#$!lF*-&qk2FNaprANr!;Mfz<6j(U!lOJRx?ow -JWT#4+VzwC@7Bar*g%Nff$AP!qnMQ9<zt;L|%khyyg{<+=hITYAI0R;|(A)^VKTn;SMBkFRcSuHM4KE -^lte-#YY}Q4)zSplHZSqmV@_uVDQSCquc-hi4LBO5B5<vI)Dnab*Es8YK3PIn^D18(cA9l6DK+i6eB@ -`bV0?Tw<LYn^G_M-?t<yaJ-H~t?P3g8Hd-WW9d3goqq~!{fG6_rZ@a%M$1D4^;SGkW=J@It{>pmfs)2 -BKI#_6iT8@mg!csdi1&8y^e%_YE3_r2%<N4N^0dNm#7O_R#Yi2p0CxgpbvmYOMNEjfGLBS*Pha+7R3| -4+MWYo4O62NnEX;H5(yGelb^!hhsOt8#e7P$28K1ZJek5$3fsb{6d+i5>&1vvmp5B#}0F|xJTj1Ch@- -iZdJ4*YRtXsT)udUf*rj6M96?%7cqN5@&FD=+&A?e2B3Ob2YbeV>f<4kLkx_NB{m6x1xn8jH}nH6SeM -1Vm@rlO3$qptf`j*_&QhQTO_bwSt}sm^EJ9)?fo1~K_Qbc>iQ@oo}x<;e@E|M&rZ5B^bFAZ;oL2?cJT -G-|4J7a@@uWr(%3n+5~>o)Me_p3zO1T6a2dxKe3aK}R(rii&SyOq)L83A;#4$e!ImMGkcM#KFOi8$W& -sTLA{hdhjH9_WTqL85^=!YM#f>SL|u?49ia#$7!4N<gxj~=~L|nbtmEQIY=>n5sq4xicWs`OGW4*g@} -L71Gki>`QyCmO2NtxJZSrJwSFt_bm_}?3pjf`hk(GojL1MjK}r`(P6z2CQ;<CGhD?KY`UE8Fpf|DI0_ -9=L%AJFK=#frGqR$uUa|ITZ*3<LT^YrO?Hj!VSo(ChkR_BFdyhPraavKexC78yMn#TdF$U}Vw$ggXij -*Fi`!Qub?L_Q62&OvSSIeS{ZB(PtJuf+7L3<VayekJ^y%*^Mj9(Tcf{!a@s>B_?wjHVl>8K^u87&9Yy -F7HAAtW(230m9~ZMHRtnMdfJc_;*)aCn_HXjN!KWLN>|1zHgeHn7nzDRV%z29<PfWRrTGQw{MDkS*P{ -!jf5QCH{0Ty#T@US+84YFv$p1ZmgUNt*Lmdd6^)?obQlq(57Pq4E;*xLMb)KM8EHJj+RtP>+(-}T4e- -F5ey?D?FIP|+zQGhm2CK@(ej!9UTr-T&FQD4sB*eo2R=S!~8NjmAUzEQT*%zE*Gya7e%Bw(BP6TINrY -udCNwhAPY?Wlm&GmJhjIXZ;AsmXY(PN&07JPSohK~Ua44pYM9eS_WaOu680$;!x0m9&8I$Yt84F3R$x -M2&Nnt5o(SQgF!utdXgA^fSPugAmGe6<lOXI8%26nLp_)l@5WBk`G6<=YC>iX7Yh@HK5{Tj!jZNLRPr -!07{^<12PRrTgh#t7KpAPrpKU?dc2POzIO<P8fy&ZL#0}NF*5~#B}MMxnJfcB+5G^&HC;wmG)hf_7Ih -v#`pBUXVB4ZMD`3kSzh-dfU>B|)<eI)&5yFL!}vFfiO5h&iyIGP%gtW84OAsVwznXjy=nFzylC%?R?! --Hk#T#eqj&s4UUAS~l91?&quuoaiMf);UTa>Y@|I*!=5{_h-rQh^b?6^2SeSPpv?%GoY0|}QJlg0Ahb -31$#uKGxr`sQNeofF7F1RNZ*oO~ZGe_Y!gtbak(t4MH;MG$jZr{?5&m~$5LqVH`nwW$w_cC;<Q&bYXX -EUqHVZ$C%c@|3EYr<J|;B+;~)~4vx4!(0`F6~_Dn-^{4111ItS2Ue<{q+);dk>h~p@IHgKb04c_w9Bv -eNdvjIqT4Qiy@jGX1Zp352!iLruP}RlG6*DY7W3xjo3a$;BKYKHu0FZTrub+h~9VL`|?$aGJ8cwd~~2 -w!7cQhOvQI{gI?uwoP&Vop+*3z>qoiSuD3{DM4<r*$Hj%cQ9G*n9o~9VN0u*q;rwGhePI6$P)h>@6aW -AK2ml;P_Ey@wdEkEy006Kw001BW003}la4%nWWo~3|axZXsaA9(DX>MmPbY*jNX>MmOaCy~QeQ)Eo8U -H_@g4JP&)N|Z8*R6{OcRgIwwdi3Tu6HPg?4ZyRZL87SMClSY%@-IjV4rcHWY0rV5-C!$)AgSUNNkJb^ -TyxvM(G);8LyLkJ1_SqC!4CsNL1uCyRXw^O_HoEs=B?C(VT8sb)xRp`x4fvMf0erSUcZ8A#nYTR-9E= -Da%-1&-z<e_Yo`Wq{!vHZ`uB?sABme4C91u!?67o6<JAZ{2iQ}oJ1+*oRs?#$N=jQMPG`Up67|roMw! -dG-5=~-4vDl#yDv>+cYUja&lKCs4{8tq!#+~j)?do*H(<PI_$YAD@cYqQ@mcuL85F#>Vm8pvW&^yj=5 -NpdPiY?5ht5{uM^sOlWfTcnl_C0yv_({bz8v-HBlQ`7fl`mql!fhj1{?KPRus6Nox=$sap%}Xhox%Re -bK4cq_L>o25-kfk;JD!s`lUrcGU(f#4sQWH0QeO>cLVfI-m;{G=Pax~Ey0vgNYBh1XqD@5VO350=JUy -q*c0N|P$#xU@cO1grx=o2Vv~Y%7{&v?3JHiehK9P9mD7d%~Nt1dg!AqHZ90p5$qgv)78tI~2|TUM&tz -ti>=bBP;R)7}KX|xuZNFKg*walfjDNf^AhaC9L=he)^~WDS0l4T+iq8_wfBRICZdjMiAwdvO&FL<kSy -Nwe1rs=S2+;5Ty;`1v~-gp?QU&ZduMPx}2q(xg;&j@G_5I?O1gCI^nf1M4b`Or|XC;E?yvd0&hmHPvO -StjGV$f{D9l1?*~GIz#EW@uzTqlk?BFRejibAiLP31sIomQ6-Ech!K5usa>F&dAHW?Tn1JVnp^y3u03 -=ilIsL#|h=KJV9!&x`eB9z|Px(;TJDc|&NSZME^6IOX?_R$RfB5>Fw^!k-uV23T{%FF=IYZoCE@-PL+ -EM-X>hC{%_vTAQ_Yh%g*F9zYP<nVMJlZp+*&2mv(f4A_D-i?^ssy{bE;s{55Z~&`Z7X}yVZth2hAgM+ -l*JCJp_+0fXBZTd&GckD1RY~mVcJ%(h(<e5Dfx+c)<j!aW7Qm28H-rT*-<jN*dw>U7CAfGrXpmxEeb! -Mj<zmyb-Q&CYHU-7*0RH>Xj738{=t$2>xU)TvYOU)<#*MHxF3jW0>5G8Y{%vyWRFnP9R{_>V`OQ|n-O -Wes7O;5)q({C-cZJ9Z>d#AbN8GnSt?dHRW3v_V;lt28p=3Vn0qF(u~w*T(_$@309v!5>-Yy!=%Lt$*G -H?PW2>>&Q5~4fv8b@A$XIF%j@K`eL&#zp{!maOZk1gj(j+_?{YR*d<dO-2U4_q4A;+0a2D@e|)Oy-X7 -Q*Oo)80G>78!SyhMgDBWspF8N}?Dudq0j7j>Ca3e0^%;2B`q-`xV&3a)P6h(jl<Qi7iL}*nl1!ksMs1 -dju<kxIbkZcVKqYeR?7=x8-0I98pIPyhnz{s3`ZYxCje?3ADm0YWl%&*knF$$`}HsV<WAFC<uHE>sYW -dtK5aGCjDI0tAVxnzAJ)f<YQWGxvQLQ^FW}t!*AiH*y}fpL)_pmMNh!p?eI&ICHINy1hHhNaV#4R%p< -s5wJX>zW~|;7v6z+@RR&1~yJT$W=E(FF<*aSu=LR=JIju)g5?=kY0l)Mu{bovr88#3A8Wuz4%Ig)DK- -#@HiQ0P^->!@TX<#*7b-doSUB0HJXhZ>Z*m#nq&}Vt0i+e+g^^d?>Hor6{g*YVvbKKk*g5KQB3~n@!d -(!zHtpRa5?kp{elS!(m>dno3QYVOLh7=^>qMby$j8vXdd9e+?v9{d-m?3`qfwVFF1*1$+$Y077*Xm61 -x50D_N=CcuKoYi~GqKewyA43qV+T^1%;T%KRdY0wUSZ#xCoG5R;I5)&2_19W=oboN(y^eEmN8i1A<4_ -8Cap+#M>`%cIN%Y0Gz?aCHwGlZR6_CK<_0a#(5Qkhtg%2j4Ijw@VkKH^E+keK^9}3C5eVbLOcolH4eh --zVR`MV9gdr<^n+uPps}n&V_?U`(eUDqB@PfAg|jaam`}u+1ov+oXF~A<I6EdxJqc$of5R{n>B)hCF_ -^t+a?GZRsxvD#xj0hiP`}|hzQ#=2Q6-dLHz_hK#-Su4MN=b|icJfSuBfb}=p6AeC*OcZL}Z|1V=%ybX -Ch0~O_@T<11N11fHg22Ldj4FPzR+@Bc4;>L~$+(MF%F-pAzr|^K3|DQVD1IAVhML)feR5^&U92G9zv9 -idM^*G+g3;Y^R3+|0>Dxe0rv=#`^=_;sbV7sm4q=5O1Q0LDi)?Cl2F?ainVyUV;s1X6^b?>f^7ABAt< -I`2)OWMs!&TG-%y}oZx-XYcC!LwF0>qy7z$iZDA5D4X!ePN_=Y^r-OjfDO9%TvE8v-S&E+wgTRQOlO; -&Ts;y{u+=qYu$5pBMm3{b+7dF4fG;DtXhyGBBF$cBD+D8+}#0ZGP0E0}WHnx^{J?m%kUD2d5KJcOvJm -N5)Cb@VxBz+Z};1gg;#ZDr6pcG~1lR%pTdQMlbZfKG=;E_<wa=K+I>5Q%<EGz51lIJb~KjF7YDGFqjB -fvotXvToLdmDgX2tf`uGsnkH&PjM-nJMgvpGmG+a06gTa$ZwNt2k?hLI+THTBoh;<wiue&7H*#3pF~T -2u_YWw3(dm&=h;(K-LJHH*3-G$dTTQM`;FbMBpWo&l7B?J92NnNhfYE5$LtF{DvmbgC4Z(fY-{tC6i| -dFfcZJj2mNILZzT)`__$nBTui!t3th$SGe)#ENU#3g`*z=CSFhR7$iFBGI)(6$!s5gZQ+pU{~;V6l@B -@vL*4*S!F^e7;r|1BIbA^>hJl36!Ff}i&hd*K_3OdK4zHPBG=YmrNaOX4+|f#;upPs+L-%X;=gAea%H -Mc-q2(3<r3Wq5epEer*0b;!n;i&B5G4TwcyflPUcAWQADAfFB$2G0+bSf247YAeP?4>9&8QirH9TMiX -d}R`lT-(R$P^!an3Tum9-1G|mQ;af)?J!fUkqLvYVT_eiHN4=D?xtS?M5NykJaFXp|0l`IKoJvZprkG -k-g*lgr(}a;TQNUD~aTB<Vh<m(hl*#N0>L+n(5Do_!9GZk3d*o)ne{ay&X0GPE{}0fQ<GrYrlZy@sp< -CmlV&o=^8j=eGW5lW3?Ft_y(<Rg<vr1{p|IFI1q|QRorF>^KFJ=1#V<jq(>|X$l2$}*nKAaHA_o;0ZZ -CfxJAs?&2}rRM0L1uCcTKm9rbpR*j%)dI_ONBEGKF&`c}z*?Vcf;xW(BT+$o-G_*BgZH`^Vw+F8q3zQ -ZNN!PmGZ#IUGpK!DXivhQx>Akr7aBn9z+3mFP-#8(gJR*PUrx`&KK7>14{n=<gUz@}~C%cL)c2@WGoi -KH2R&1fCTmbiaDtaw>G41^90)0!P82yzS?fQ?WIIPCyI(AOp$@>%i|BQ+E*DK3$s^!fqpE#(aK+q^Nz -LX*+GFNI>n2`^K+M=Qc-#84DT!AZPx6pOlgdkJD`ekQh}ec=hF>#u0xgA&PVSETV+cVk@L>OaYxW4$> -zdYuuk$&;vvnFrq?k)*<ix>)L|!8<vP@O`!}QrHMc7dt#u@&5ate|y3o;M>3K*H|1pvHwDRq}mIJ?ap -^nxNIXNk;gd`o!@|)NL(!}g5I?uuc^&tcw%{$Xm2Vl<xxhvjrs|v3IdR42ad+=pa5v4u^t=rSSXv4&e -_bYjZZD-au`RoM~ax0HKdJqF~+P_8@ZvTsO6!GK5iX;nu}LGOl(kr2Vy;pkEk<RI$vVJD_W99zKc79F -YRdt&9}@ypOF_Ypn_Jv?k_$)hg<jwx9#%n@qh@|i;K@NDItN2g*|zV<^U7SGkVL!Qr{$Cvuq<4rc)E* -?ivzbrWn{CU-ld~`Iul%Q$Bz#Ee^u8XjgHr+#B{H2*`6HY+@TOaG*{wPVoUX2xQ|<#aX>7MBM9R(6D% -9fRw@V1CVl9;^A^BcJ%xbm6G2tUOd`noYZ1`%j7Z@e0-39rVDJ?p-=5-2HW$r@fBGZ4zDt|dtEoWA~H -K$MIwx3N$$5lXJnYg4c0g{qxb$|rrifWYnN-K(9q>S8r>f*mP%_u^h|2;(+{pS)@NivmK~e^;L)~xPw -iT)d@i$yK(jPd-tzIq$P}OVx;ltXMcw&^g#PXT&dQ7ME{P$uE92KyXJ*a5U{2Wxz#OzNSQlrDS*FmEb --xlb1`&=yJ|@1w@i|!x{7hr=`HEa#ni|Ngat_q&_>c}8K)k@J-u%Y`;NU*x^d3&hDTsA>`S{=`LLTxv -vN%6~bmwzaG(jz8m_aKTGJo<3E}j7y+db_&Al*OmVH4SYvmw)KuZ3cHb77f8O*Za5w~f>rXybJ^4O2X -NL#@yJGh69kpz%PrU?A{?KpOx9<}EH>eER!8eD=r7bAgZ%@<WOW%`UAM14$H1hkPU009+)?2OX-9@uR -%)_|T?A2SkLSW}PcAD27-i-gpXC6)${vr3Iyt-FKSse^5&U1QY-O00;maO7>O*6G`WF3jhF?DF6T<00 -01RX>c!Jc4cm4Z*nhid2nHJb7^j8FLiEdV{c?-E^v9ZS?h1x))oJ*zv9CE5DAq9k$MLxFj5qoHc8uM$ --2!j6q=%JCNiawbYgcH(4<|vX5FLP+N@jGZJE=iX|ttWvpPv1K<@V-{j#Lr3}g$2Vf!C;?t>3WhmM`N -G+>J7ckj99ea|HyAuFD14|`5&w3f@c%cG$ml3*>!_5I;8aYM%shr>ZYB+_>WK<ZnAz!4+DwUO&BM(_b -Q2#e(K%4pye$q~;TdbwQA9#}y@x&!OEHU4wt4@bauZEudi)pPo!+jTuR>~`~kGw2sd-zx}=U5r%fd*m -@7j}yDy-q7xLITAfgj_|ByCmAB1a;bF}on+bJ!m%Q;2SI9ax6cT~4aieN&q?U)V!&fee<u$!3+XxDFe -FP>V1=QdhharB0}6uOyqN+S`o!|q@{_Deas*oogyK_!6|fUGS&BoE%*_|ZX7_<*GL*QU;MZODhu!X+v -UffnU6|4!UiLBagCE8qTb<bosM7q2@ltBW!<fF&vVvdcLUYli`Gh&MQKFLXge$&>&w*$<BEt2M<t;ia -+<*<c&GBfP<DoYP(~2NaI4@(75$5OT<5-j--wm8l2s$$}!|xi16p~?|$W@5FWcij2LVydHod>Y&inZv ->1|!FI`>sub(1!#F7|K~3J!%a`;QXUUi}2f9S(d*zHF~tX9*{;bGqe^44$w++{gh}d6d+1n&*_ncHDZ -wgQx}BuneN=t;gT~gYEHyIHv!BNDl-$h3oD@m>vjbLSd<(RtZd683l5P=!FnqJD8(76vmrBKzyp^k;; -9G$XD<;e*t<6uJ5I6%hs=$6KVM!gm(_BSuzSNP6sJ*3qWwOCD&=x<f;=x)mC{?jLk3PioaJ`)-NmJF* -7fWGC~?9mfl;N@%y#+JVu2Yp^c^b%MXi95$ZDaK8}|T@1ZEegbwg&H$Q9f)WO-!}x{RmmEjhj$TAt1M -55XmVn#Y)lgfH4p?$5WEfLQ>Be9{_O;@AEm$mC7r=m;jnA(~5>c`rdSVNM$68`IS`DS9kWf-c0X<dh$ -;d60jCQ$%2KZ`%`fWn4;DCv9fdsmw}W3!vZesnX^9jCEA=Y@5|OAsE!Ue4#MS2P7;xtD)od@_b<4_vg -xx>u{S@=E<W(DNL1<IeQ717lblw!2tFvrw64!%)^jEVH=i9@^!*w;2Uc&fHLUKo?L=GGZ<NRx^{?E1@ -mxmqhgbiZf2%*Z0LIV)b^T(!cuYr&Z;OZKj}Eo^1d>QVuZ`fu>~iDD)zv#N-;UBhY*t$#tfsbEJJ?Tq -~|WW;X}*Gxjd{nvxSXdF7XazW%3A5LG-c*w#5CVaeIyzay4*qvLt|?R>;fd32Wf?1RqxT{jm*i1QirA -x(5$7)F!g0yJrhKkEN;1uBp^z={7|a5+mM9<jQs##_Ultqv>s<V?Ms`i6{3TIQZ1l&wTUHw+<iq_Osv -l?)R((8*I0@<Q_XdSoVga@B2Zxa^mFb+H*H9-neq(+DsNp`aC^FPtzCZi}XkICHgY`F@1%ep+BLo(x1 -|w(Vx>_(AVfM>96Ro>Fe|j`WyNt{Vn|+eT)8{zD@r?|49Et&(S~Ab$Xt@L*Jzr=zH`ceV=|nFVVlyzt -YR}L;4Z@8~vDGp?{|v^eVkZuhUQIXY_OWMW#^QX=L0c$<sE%n;U##*jvj8s-#1Fu;^l}(;*h~<Dtg78 -J?g4DbKb<mvrM3l8-u^gHIU7fetaAK3qVB+SPz$@s{LQmifzyTB+9Rjb`h{Cz(FN<Vjz1cCsy@Vb1o~ -Jh++_hr(E1<O}mC+v&V`*r*W8Z4nV<v^D~<S#$L4(C-mvb>uri09`rP4mzn+Ac!U^iJ3jJ)pbJ{pET3 -#N}Rw0Vmw4qQTV}h<c><+6VM|J{Zb;CJf|`NbCYqyi1~517n3lEmn_7`h?s3xwmtb&`%{=aS+E0)Yz+ -8pW)z__$Yl?gm%&ic@gm(v1*P%+?-9~p4);Q@*^iz@XPP<|#BAbJ<DKaJ+sD`>anByC1*K(cRmvmVaM ->#fJ#;H@?Srfx9=L4T!85QtW(ujrkyL-pY{0Uf^B`#^gmX!Ib$f!33140{;Yyty#soiLg|4S;Ur;`NR -*4T>?bx`7Cb#tmk`)d|9qe$VN%TINXgk$J+kH*gQH{x}G`5yi->Izn*C1<C$f{N|WqsUtoa5UUl@HGn -G<a}HD^-<C3OfxFAC-pCqta-gs3uVpLz`8BHZ>G&PaeDlxg#cN3WjPGfp$>Tl){>bIEtax847nq9L1= -05OEZvKJ|J)kR`7=#>*6es+bC5QlK^^YG9};=VI;vs+?Oz=ho!h8saRVwlG!9nvRnVoNS6E8mItGDS% -$ZP+b_!Y@=vfqDBQnjR@6I)DUO~bG&J)0yWWfP086r>Z7Wtn9<aR(qfa~j`&~G>ov@FWu+?21JwbuUR -lxbU{hs087dwW4NZ|w(bA3|t2XU5-yIBGd;0|^nz8%Eu__CBO~u^RmO<2RHc?}s;c7IRn4gRe=cO80M -bPTPA6mVkVrZi(&=xY+?5Mm>!9BCU%eQblu(+78>jqal!lY`a)k2KaY3Twrk<6<oZ9cc6bTCx9vTEo^ -WL7%@ZJ~LoH3SNGq+FRTftp$!$rV#;NYp?yQtIFq9z*a0ttP4>3l$_dj#njKLF<iLjpkR8AccGt!mA* -B9l;~jRlQL`Y7&sE5^rLg1dzopp|(5NHVI^1I$ZCR5gh8Yz)fw8|5*4&?~b=0ztN1W04}nV$bvYN?6< -sQZjtPBeQVM3EO8#+Z-v%zc#@}$_*9Yz#iwOR#HE^)iBHJPsIj@*&naogB);{@_?9CoG7u`zli*(&64 -fG8Y^B|_&7)b{DH;!?WTjkHgbJ<6P>x5mT4IDY8Eo+gbE?^skZCriHa!U`dbzA*Vv1~b;KyVNM`KJi^ -WzS?qKFbPw==WHk@_{-J+f-6on=)`2G`W?7L8C$S-dkxsD>D!PPIRB1oTHWaoC;O2O~S{<!L*|m{PAw -Kh-D8d^869BpVpDob5}cvV|}2eR}R+m(GGMdA`TwyQkm3d-@CZ|AjLg6kbd4Qy<+u{mR`_uiia%5%4I -Pu+NU;Z`k-UC5et9kH%aw;7EumxR9>C``BBS!S-vf7*F!@JKwJN5Q;o~E7PIGLs7ItaK})kB1(wTM0) -IsY;P;7G8yO`txL3l?8HFDj%`{?Oww8ngr(LN3mOd#X%38rF3~o!bpurwsELSUnwoquq$7%&W?L0#8* -6yXwkA=m-!u(5*FfhQa;}lqSLTNZ2^QWwM#frH{9~~gxOKpZt=#DmWIo@^#j1H&V#{buNppC~%G%oz0 -odr>Kbv$!DJpj=*h`B}#S~~wFHD+Q=%D%5!cI<EV*KvwQI}_|x`M<hP{mu8I+o03*`1af*)Q7mISamX -atGy!kKcVYYc1if8kSP!njsIG9n6`vj&NoTdoN(>3V)|y>J_960JSMmq`&|bt4gLWx_Y=HO*>F45=F( -S)+L(h6T>+H+sdNl?;weiIlJ#0d4emqu(yL+Qyk5;CWPRmKKj9DfFu6yKl(0V^?J#th~(o>Aiw^^kQ9 -~Ay7TT=FW$L&=fgV}zB+T~Jy=3yAIJW=ap~S0F9S{1Gfup9?bgPZ&)?d(bshdTzI^G{Wi~**7~vyszJ -BvM{C#rsvzu3MUc31L;QUQ32XCMI$H%u{yL|!vzj>QC7(5L)cJJ)@dvAU4?~88(IjWo-_}}Yq{pZT1| -Gx1tYgl*@<>bw)FK%v}-P||_WLEkFas8dm^Dl3%U)fy0u(|&E=K9&q^~;;*pNBDtXUD(nc)9-rP)h>@ -6aWAK2ml;P_EvXR(M)y<007=00012T003}la4%nWWo~3|axZXsaA9(DX>MmPb#!TLE^v9(THSNoHWGi -=Ux8yDN~SU|ZeMb`I+LE$%w+m;nO@R+P;@jzf)Z*HU;)au>hb@6y9<CH674!o=cecJSR%1l>@I%$1^5 -ZuwX#Z^{Y=)4HZ7CNHX?7s<25%*s*MfL?Y<G+L$0d|Xr)%&E7=OuYF*h`X>`rXoyzHv`SHr^vYh8zF= -y9?H=Yc*!Xkm@oL3cJS3vTewC$X|SFpmIy#dzl^*a#aCvN5}=eC{AvbC+a-Lf;5Z%zESFOu0geD_3gb -RNywTJKbG78ob9*(`@CmStJ4RVg=FS@Dfs%ozMcQS?T^T8dZ9QI*=TLX;9M0ZP{mZ{=E6vfVST3K&}N -HX9rxE--&aj51g*Q@j>-L7FUWYgQoHa^;3gc_WI42+-JBA#4usA}8q1aJ08y;U&pei*~CEdI3_h%!)S -7D?4We@}9FRUhPEUl*1ocx)IoGP|&6$K{_h@3A>--mv}UUKV@`F^J!|9-KDq0_l~*Oo%nZ5T6PP{#T( -J`7Cw9Nk|f<VjWBU?7fmcc2F|%sx@Bv@^p!A17KKpJ{D|7NJin~Om8j0X9FHcWCnMUOQTLmp-?q^-dn -9`>ZAT_5E5?%ymsYT!kn9^{w28||X=Zo%_Si_ydVeu@QR22&C`2pby5Huw;`O@VjHE#Ng%cV#-O2RMf -JjcJLfYTM;WY<667-UnoxjF4zp?UHad!H}^JIoN1MiP3oiD&{;H0p-n+5(&*vSig)j1P={zx{rEZ-R; -6ormmt=P3}w_tXT69H)8(cq{px{?ytl~lqqZW(?7^EVv8uZ>NK<GZb3r8KtV1sGGidMyk)O`ZLI&@Cv -}0wKuDcU8-Pg+=abvE^41+!`jenu(hRan|y+MHJu+shVBu#Uf^F0bxKO$P5XHM1fsnbS|t-8T*$IM7< -z`FD~8!g)rY#q6V!~q!*cEdO=~O2A(uQDtN5Pxf%Qh&W;xBrd7*b0J^yN>fP7>cyV#TVE<5T3(-f|R= -5!0Hks6_VFu0u`@(z+5e7|vCB-$<Wv75BI_r0@h!bos$>Ua`O(1V{=5Dl=6#By^9`Q>@2(W-c1j(#-L -3WDH_l$joOW|LkVw*UfmiX#~okBc>;P*jA<Xp_XwW)z<T*UZ(&YsQj^>4uy<yZPqh&===sqV4$hai@Q -r|}Bf{jUN07_bt@0N76etAj!S?5Bd2xY6rB7_1(j2$7UFcnmf6IXis>-0lS%d`^c)6pLg>mBmdvG$lg -+6VMlyf~{_|+<0%CbR;BGu=;>(K-G~9jI<0~!7ywQCa=)F1EUvb;OXSU#}ih4LH1rzttN_dwCkd;YBI -1wn`N;TRXHeT$owGX?cMlQ2Bik(J^Y@+_ihyDr%+A+zbs5Xc+~5kp{$L477h{slQ^5ROR-N5a=f!cw` ->d~^AXPjPLOFc&+523>oi!xFjj*^FlLZf0xH{VYF6sT1}l=n2u|SjgH~cZ;LJp2efm9lBNonBsLhEWI -p8x*jv7tUlQdH^Xdq1KcK@|3^+OvE6F`xH-XF7@4?qS?jsAqScOYM}r?l83VdX{}-E^byeaIg>BN*!% -q%_}y4PwL92JDAg{i*Oa9F}NQaO2pkksMD(&0}xHrCiMkX=A#66xhMT$3uFG+hR4jX_M$5ZRej4{ono -g{(DjDac1}$a%8RLuZYf?H;v2WyhRj1VzBHY=MB%H7rg*GRsyps>``rJUCn_ESZkm;vVK;eVe37n9BC -NOu^wRB6vF%+a(XU?j2%Pd$07R%9<E*lO)N^2L%Oc^Y-c@ltW==?$T_eq`V@4ZUx&pGeLD*S<X7(N0R -_)nd3E5>ZUi+qG_yacNdJjCisF^*L%fp*b{z%pL>hZuYxa|FIFx~0sP6`Ea?!NxTd}9s@35Qf1x#z`Y -qM5o0+KAQdjC3Zf?H=Gx;+;C*waT#dVf81)FW-i3COJmIQtkw(R_5j0q?MW@;GZX;2#fk+1FcH3D-Uh -bWE`37=vg$ZOSO9Sd7KVnd^e@-L!kG<6_l8kuuW!Fq(}d=(4wu30*maks&Ssv&l!s2VPYNfgwzP^p2A -CXH?c^0zA4AnGqXtlTq@@@+}n7v7IPypD;&`fdUFYB3!WlocIGS>?d;UUrh7?Uq%CqAzo4=nu_NTF6S -&9@_o*H^*N?+rK!P>>EYH5x6xtk3LR(A4Wk5ax~2y`k~FmL=nF)rqewia>yIPp&<+xw5#BZnwubzUCy -)k!F*XP;BP|{}T9NM%4skv#W+5hGhJi2~=RHEkGt$P0t2x8J7}+xFFD6Ka2V9QviJSC-osRwBU~=$RO -8Ez4)Nc$c0B^`C77kz&k}+%r034VWp+DLv>?xOcxOPIvtfE*=P4#P!izsT&lHb8CXnAt_Ta&w;>##on -{%HTaF`^G2A_OW~zQgxw>CZ6oo}<#)W10F{*iq?rfVMs?PB5ZscyftZaD)E58C@od(x0`2II0Z<46JO -xKm2JTEbUKdUa&9wb<vBV{2}K?W&6$97`<!O``A)IIU8@lL8a#oM$V``4cH@=;|T1Bhxxn^zwE^E;q( -9_TL^?PKF8E{t`aXTd_vz2I-Q-4rYDr0#tVb;UPLG3aV7y<rVxNJhfnS)O;5&Lk5d_KglK3ha8V2exL -$$_<AY;EeKVmcIypW!ABb`^M#heA9}w~G76iDPrXW!!PU@XnV|6^Z?g4lo{q3p)BYBU9AUt-Fxvan?0 -ee-oV3kDuA*$k+#W9SLuSC8;JdA<TLON_Yl(w;)J1$2BT?(*6t91*?<iXSZ-p+EASKuRvUh_*xD0`*V -zRu`A3{V@pTcpe#zf(Rb)q<UqUgsfszQL28at9m*yAsCI@fL8<H6GAW^_}ZN^e2G+)(V2X!W$J9mb0E -=tJzv?fLzqFrDLO40s^u-Is13G?3sD$_X@A*@Bp!uxjU)*>*0k{slf2zR;L8<qKuTxvItd50<ZY3feH -ZI3SF|#u*mofdWj8fKSW(lIzq=l?E`cr;sz2ow6m@%M2jWiun^iN&90%Q0K<CjR@VZiK#v2`iiXY;d4 -cr~ZhS*a<JBg_+*})urBE<U+QqgArHaVE0UNQu2u(ZjK)nPHMPbXp&Nf*-TP^xN^CewpBF(6+^;_Yps -;8hai2wBI<u!ggfZvmcuG^k?zYY5Z8l0f9*lnr$3plX(@rKSv7h?xpCtHnD-6Qa9;N_3h{QpSjX>FYz -uwJ17)qwUAYUd-7!V&sNw2M%rcRbtxC9ux_#}stcNvc@4nmT+L@H&WR=y>jo;kAb~o-zz<-Lb#C_BRU -y?!$L}gQwZMtC=mgLvMFoeDv7G9QpLB!|-|^lkNnwBlu;<tIn>pM*n6QlkuMg;`6zm7*dPx5Q=QQ&l= -G@j|Xws|GU6)8NNZ8f4&;`U$0z5ft-VR2T*bH_M5lQ5B^KQhkpPU1g1)=ON`ewK49Ed;<^t<Bj#Rme_ -^YE*eveLC^XtZ%mv^70#Hi>1QY-O00;maO7>Qw0AcWg8UO&7UH||o0001RX>c!Jc4cm4Z*nhid2nHJb -7^j8FJx(9XL4a}FJE72ZfSI1UoLQY#XS9U+qiPS`>#Odc@yfM!b^J7U)(73{O*#ww7EEQaocHKk3y4> -#WO|l5tL=UH2-_|0{{UMvSnX7)!fAr2`m=7i~S~##d_E5PDFWKt5!ajZL3;+RIVG<cB0M7s#RHWv~1N -{G-Z=6Ze?AlR+s_JuE|<m*4K7Mw`=ehjpy%nXmTXr^S;#GjJ|!y*0MO?G?nDvKg(LSWzIj&ca8k_tmP -j+mARSoV^&q!m7VcPn#=Dx+4AKnul##i|DOG$UHM$Dn=0!h-z$~9{;6vLzjtRA_p;WF%)6tbBc8wL%* -2IOn>LqXE+&)7e;<AMlPH&>R-KURD_Mv?eLZ^h4?ms#c>bRs--uPWu3jI#vVUY&yv7MYHJAe<5#JsF- -nUor^GbKSO1^f#@snCEJjc;U(J#S${47=7Jzr+)vI17FRjqWB<?^3{ao#H5d&?klm6kphU%oJ6|08s^ -l;W$y+U+7ng70~=udY<F3-=80@S+C~?k+)!iZZ)yGvG;WziNxetD?LWd6j8BpEv?sw`$W&dh)zly&R1 -(M4G&YRSnRzE4vEU1sq>`vtvsXQs-^ibfv085b~}g2r%gZ5c>9d60*>P12-)}nH3J6`O1Vt>g=O46Bz -bFGUgK+#PjILN-c=1mHZ?w(9@%%WAQ<C5{`c%;cV?hw<@*Rs!dghD=9KjWL-x4n~AGUC${ogD}~-Pcw -kTzKkmAfs>KiKKmA!~1@}ds)z3OnC<e8Y-4UJipA4(#-oa;;F!AqC_(WeMlNzp0W<q!EbS9EXVecEYl -AaNdvg*RpJvAUe8>}yBPFWZ74rY{fH@!sVfb=;P8qPb213=#7-3Io9#D*=Zyv%4*nZU)xw(M5$-NLsl -WGbH{d09&(lk*9X@`&gp-ema-QAiwKKcm!6Pk6I1mo(W%cc6?M>=I^(PKjKBE`rmT@$lz@Cd1{r%gUO -NGqUqsoYnHI{S~x!>^2VgaivO7TWSfskZ{W7TGpM$(}uqhQ5sD9#4B{X1ZY@U!JwkdnH=3J>jX%LSOd -~17VE6bSF&&$qAxID!Bas^UYx#ve`#(Maw!%Iz^+>?5-qFcOnisi)rKVa$qCa1QDN?=lJW+UO4bR_fK -9!0)7@-U%Y|weYaqo4gd-9`n0pKL^Ff|vn@m%O<q+VEi84p*Q@7Ec=chFsQ8-t{!;JrAgl}`jQ-L|mV -xn^1N&urpR>OY;6J(qh52+m?Dvdfpv7V7QdE^~!kZ9rWY;y7C>*XYclK{+3czdXNn4@GM277)}lpPw~ -j~Qr!tV)dizBs=e?D#YXnXAehR42<#op(xAI&F9ws};~0C|43d$|4o-YN0?LTTn!8p>a2&l}#%(iEoA -)Kr+2nnMQ2`S_bCJn%0BEz(*TEg+x0R{~<*!L64Gdf)yl8%d?G^B>(O-IuPIsi42qk>&7;#HByKMqh_ -3;&SQmlg_^Ib0QRQt$_j^=H38`o7V26l1*{6R16>XS_c9WRbmDxSi!@DV;{0+Zvi4e^042eL5;t4^1& -6fr8I1yp^Wg~KpYR4wfgAWIyur}m7Jp&P{z80SOHlBILls@91#UFSE4?4p?+^_9`Hlg?xqU4r1Bn4in -e>=jX~ECCrP!$r(UUnvVuL5as4h+FIoq)i;8-?UW`^_`NaC|C;Ra~jmKhB=ZAcfoB{NN6<Q;l|sdx(( -LEdF_R0n9MJqg~n8KE^prS!uznTq*b*oz5Wi|((LV0P-!3Bp~@@gHXO966m3`7FQZhMa~$O{?HscRR- -&G+QJ@o=BL*JU(BrZN2mb5cgvQkeGEI=ggbitlFS&fmAd{7&KL3SD{lR^``2g(~XolVN7$??2?{HP7X -b6?HD)cSe&Cw;8B7jTs6y01$rRALGuZ_P+Q_8{6KHMT<*ke))H927xoRYf)<HPuTz%NDf0eC?oih-f^ -^ecjwpZe4B7E)CZ4G!{tI$hU+ZU=Q-5;{ToTYXkwkheJHW0&0Ps6;r?Z~~D%Q?REuLk-t)3B%f`7ILH -EmRr4Ci~K@_CQzCc|?H+8p_B72l#$3-l@z>y4jKz;@w#XmGm87oES&z$y&RI2^iA`Ttx(zzB>&;-Rhc -A<YB`aIwkJFklP`XYH5sU*97T=XTtd8kBFT!6t$p0zGXpBj_i@Qth;%kssjw6^bWl+JaPuBEhuYZ-5} -Gap2g+CH>kHl$`kdvYxyfr@@D=WymM=$jW*n`-uuxu@R>y@?E<d%+$RiMgdBm!IfvzV9Wr8blZaA{M5 -lg%ql=7DHUIuA+$OC-%po!xokRd+5swHdgU7o_)iXietYe}de~E7HFr}`vBYRao;Yg97vWMoALMx=l2 -)m1+Up8rOqw+f1UJc-2@RZ_@PwI|U^oUpC*a*rFy4X)Mj^FOKgneJ)f@t=mJH|97NCJAWcfO0BhK<n| -3=P+)T+9b3#084^Y<ib&wSl!CG0nuZ(0rK09*(I3{_XIz*}Ie2Is=Sz{3yHx&_gfx8ML7Pe<<H;D>Sx -#4X{_Xka>c$j+M@;N;l>GsHRpd$yJG)`ydvV%|5+(#%dYgtx=^hOG8rjoM*svMz>;-A(C$-r><S*Dmh -|JaCT;;4h%=PexlY(Ba-JSR$op17yl9rR4~q8EGU2l&DpxiJ3!@*GZo)OMyRHwr}_b$Gk=;7gm`K<6P -X!CC1Ni!g&TrNC!b0$RbD$-1&ho>y_Fr*b3_fo=5<81x`1NV4dBMqKI#Fo1}QG_y-ZJs&RdgWVb83QR -C~PB=?%%p1IVSZ*~?S;$7pZEYMMIca6fmz)Tx$lTO62i2OhH47VAN$?{xk2K1Zt-D&MBxkO(NJU>_`X -H3!US7c#4+tKspD$_1TwjpyvTmopgIfKyJ1iohekZZjOLi=M)k0Bv=h@NNagXvkBD8q0Jc99m(frM+= -30TAJs?1lS-hifR5yz|oZ>9#)ph^LTa@xj9Cvv!UkU{(4`M|s$%v`Cq{5xh1;JS~;Sax82k`CC3$q9h -#y^<84nSq=x=>ygXE@hopo5Gmml?=G+FU<mZ-<oEGTS2VK>s1B+BZE0*Q$q|!(W+q;(qaR4Zc|hG^h( -_Yl6>rB88O?gRAr*I4H}CYM32)WXrO39rPK{X>~lL$wx2NiPeNIkhd%}AmM>pf5u%@E?;4RydJF9<g? -_m?|C#x^8HUY!b>ORnx&6}L8nbpjzBCxl#GZTKd4M&qK#@gRpvPMz2JdNvrZ|o)mW$XiS_kokb6xDLJ -+sh2M0l@(+eJxGULwsYdxpv>bSHS)g#mO)?g(Y=kM@mNXYI`bbj1Sv2^+YXn=><bhGrp`^YeBir#6xB -0m2M&P&p&IgaBTz(0$+xsMR@wOAa-N2<VLx<=CYijjeZz%jV~tF+h7uF(BiSIt@xr4p^kAr5q;6XvS2 -$7B7369Fv!kHK5tlrW3`csrWE4c$fI2cslUiH1Y@Iu+H;U;rwnISu8Aa#%ab6InLH)9>griqEN_lLt^ -pirfklY+waUdIB?*~np04q(J(I4o2$U#_vE24+y(ZgX*vm)#LvhD4<~|QK#{`ZLlLaGjMpdtll2%RUQ -M&2NO<scG$5dm^<E3#Eh3)-Pt3@>F@M<$v9UE$)Q4&P9p4E#=13Pt=V-&8<0gN{R4s0;u(4KFZL^(*- -x^$Dumv6Xy%?L7OAinqP#{7m4NpS5N7sg-3XO1Lfz8m>npfHSs>o>c3H{5lg7v-^tmhY2ow1ta$e!}k -swVGehN+tt?60i_UhMI;F4?<5^D=bP5lOJvaLkc{aFC6SG3aMbxjLUFII^B+9^f|)5Dh@`w)Q)fc&HZ -;|CX?u1??`Of2VNB=iw54QkD@Sb2P|1<0W#pS~SB{@~FwW-j)S~*q#?>fDCh|TqvS^TyK0M6(W!zIJ} -sD;WCj|BN}HsgFIw!d=B%N%_(Q+?qnGI3@zn71K6WtLFzA}c|mm@_}o3b1qtfdPX{2Oo9+c5$0y+Z%9 -zKDwuETgXSxI0qz{n<mXsdjywymrg+-tcH1Bk{57;^GBTxheA{dhfcs(>-c<jmf>OF4V*@TN*Z9m6gH -FtAFGNSot$(iwq@w8HUS1W6m$qrkaL!>1S<eBd6U=d=rM@|4OzB3{N9HkaF?QmG4kI9QU1UK58H*IRB -uGC#F4PM&fNe(iFO}>NNGpd(U<P7~9BE_i|WkJ`vEHDt#!##LAen67_LH=s*mZU6ao~jJUjV_1TO>f5 -sLe1mD05rM=X7=r-3~7Or`Kqi6z>akeIhD(jsxYwlQ0y?9k18x!%c-Q8Cm3ocSQp$vV{S;WPsAh)0Vc -Dt+F<uFvc+jU$NnRiks#iw9S<q3L8h7ZNZwhuEpsFc3EajhWi;xhV1*^Mp<Dqco)1~!LSf!su}@jpK# -jL<?tX9cpmZ6FWciIJm1Yi8g)|YMfdw}_5d&^wQg1lX5YNd0{T4lsz*pJMKxtlQZBa=ssFF)d*cgdP# -aRvXfMu~*u%zM+1E4&!=jf<D%3uzFY~R2V13y2?IA5Z%I{@(Ys}`Rm2SdXgDSDi}8XkJ9<BJUKlqwxa -4enUrkSGKmAZB8r(E!Sw`4(nxbTtIEXVL(=egKMfFnC-4!Yu~2Cd<kZkEYR~9^(roDU@8xthVaDQ0T( -$WS3&8cMX27bw;)s+&~CcWq6Bny#V}r-|PT|wVL@lntbZamM5wbJ<UqUE}xkI=ZdS=o@|w!&uNxjz#$ -1V5*^{i7OcZ+(a%kM@=m8A5lOnOtS#_p+k8Sor?@ZEhx%#g6DkZtwOZTrLZ-8k;9lqsbxpTLP1AA)8x -uREMLgX=iIUJ$j8wEAliCcurBh1b;;429{A{SBFz|aQ$EJ;UTbYg(!f{}0Y^KF!UT6|vgZ+gUq||-)8 -S(k@^>Mg}cRw*Yeb_3lu`dFB4bBCO@#<@B9wLL%LXd|YV>Yn+*yM26fggrPtcd%3=B73M>`}aY7^pq( -E{i*KZ^C5)@GpGupH|>j6fR#%Jw})U(441beNz5ihV^_?E*T{Sd`d3-=7_#H73ATfO4|h4IM$@iL1$Y -(m{TF1gu?}_3^*aDq5^S`@-ruaG!1(+_6Xwz0Kvrwg1^}Hp2aAb9Y=lm@r%FrE$1&&$SS@}4;F?z4yI -{N)As>2xWXM*{oVt<hinhl!iaL;ya2G{uGP<G3U>H$5`ClloV1OTGShyvEwyxqXy`MI41aK-u%!7i%8 -6iDWHWUA>09B9IUq2OAVwHJfaw6ksIeLP#d}=Zf78~X1v@PvJltSLv`;;D>c%>>L5mL>7qH~k6L#=cl -v&dhc|g2eW!OVdRnAj3ULc0l1le?QVivZnu`UP}x6dF@&mGcHZavLy98`l`bX$$mC21t~g)WE=m%cmm -n?bIlXtBJ;)sdQL9gQmUePGveDz7(H){3i2<u|?uVOO-FYTy(A^8l0m?MkjM5zOqlBLzC$a|d^v)`V3 -js1qhs5)Idnwy5}&3CCS9pi8PFcflm`Lg}{tW((=b<;CDWA1{l5$EbHf#ACdD-;u+TJyk#;^t&k=I%p -l$7CW4PsjnL;8<rSsQi!t6r8i8Ip4X^KU7+J863*;I0E8s<GG{}F`#vZ~p+>M~)kyNa(iE%_wDkmcP@ -qEb3h$dG=Lar?pJBuI%x)2zHzJNe0ALy}Px9d5N2;_R;`LHlyXQ_h=ch+*`$KuU1JloeTA-eMSO=pS4 -l6*zZEHW6Pr0*rM-fX_?@+anfcoJMI-jrytQJ#TWN%UlrZxhNLCGCxX|=gtp_rS!1=za0i%UAD93)6n -F0wiEdY91H{&pXP;W@W}T)rPPd$n^mpPUg{uTZIzv!5*ML3?q5DebI7WevF28XNlk8NyGeai4vnH~9+ -7OZ)2Aya({P1fo-7I;pl>A}>Btz!eD?Bm39`u${GjE6J<X*v*qw9%-n}F9K#738u;#Z2hP}d_Z#CCNz -if*5I&R4r|RPgRpUw0Uvgrgm*)yKg_5vR_M}1)9Q!yt+<i#-W58vc*GvsbKrbpyL26Dno$|PCun$WSe -N(d6Hzu}^++TMFW*;~9}pm_td2==cm6{Jc<g+6Cq-dO4Zf|4bby!!U%zB}5~EcxEl>?~d6XO~m(iKAb -XQgsV)ET2=m_yrGntrBO%9zv18Ne_g+)=t2E>VnPP$e_R{dtEMNdD#;$uVffWtMKK$8N4&yQ-%0g`<Z -BZlAz(74Cf`7`D>D-EkvBW1(`N~K2A)~dEz3Vg<E1_B%J_cs7w=D%SrJc|u82KO9&>)3$Px=0t)oBF9 -!jcq#d_IJ^%L-&mmgs4{u!(om!kzSG#vjEZ;OuXQA5W?|@Zrk)+p!xsHL$-=ZzpvHjFfIN#4Ss<3-mk -f1TKgW2{cXAo57W}IR$Al3;@SVW`xut4+2*^)dHjO5DJxh?VUkO8CdxX+t)B};pI&oO13fBJLEz?pAD -$uJxB%xzb|$p-3UOw(<+4}k9L_g$P36^PT}SPM!1}ILmF9Lq%;r)<<rcHy^a$3lcfrj~IS4WewWhA6Y -oJC#{d#hl0jG`kTw=wd<HpNw1wyb=m8%-{?THkG*<MV*;97-?otw%YHKuqs$uybA3u^S7*cDPjD}U3T -aK1xRrf$mu+e-KuR(#?|!Q2+>pY(L2OT;>ry0_`k$m+7nuKgz=Z4V-f7Z@bJ<8f$SjdU1ik6GK7#cw6 -$(=Ex$8ky=U#u!XyB-o|^9edWzf6i^Rnc&3TvkM$-J1RGtn<MvhNm{KR_xHW(60wBz>!>v3UtKJyK(S -cBH=4GvjV9bL@=Rk>;nby=v7?q*420R#<=-$)D)8aDWeJ;E_Mo-Vuj9@{U-2H|tQdrTku1MgnKqrYS3 -BzN1%$8x8OfCcV>4_8XfZd{<HBBwBz<Kbxj<{Q>dO>CqV9l3$FSA?VV`yEh8%k~hb*wO7qffEzEv#*) -WvvEKjgilzKU>&7jqBlSU_8~#S=ao#k?yz0Y>3^)lIH=yU>=(fJigfdP$rqvHQ&um<EnKPjZ4rTd@ql -yB9Am?=6PX)?3wN*SP0}cLpMEXRHny2Y@#AXf)RPb@#OnhbyuO;ZDXJqm{XVI2O~`&z{y}|8q~rvH#& -jOC$oaAE!Fz1B%3lKeC&7G<9ERv;T43zJu&wNs5>=GJWQU1kf0>4s*&Vgc%#jW!Zw&?aDRj5l#J<_Pp -;+Ax(ob&-yIV8|_fs%4fII^oIB+N!|fmP+AIe5^RkbSI}w-`y!~YjZF^Al660J?vTx)cB!myn3@e%<y -St~8oTX%C|%zVrqpeMY7{gBf2oV!^kkd7T69#jPn#z6UD}jsbW#*1vHw77yvJdj8z07A_@PYpfLVQwH -^w!lpW$0CWkCK)W+*mP7qN^(?MD+#_q^ZY6X~}?P7f9(b~hVt*W>02XRny;tz6<$vPONzT80iG>i)!S -oXQ@Zj4%uzSoVS4&xzw$tY9og;3o9e9fhCvyH*-WP|4dY(s4+h2E73TPfEONmR>Y~9W0+elMg(<xcvN -?-!}j>C1;re0jdolye;3ewyO6Y$c+Wpn9eR&stT(({BYH}jzI+Nw^D!y-$^)|a2fmN7!uc;K7U3V@!b -bN(PfLC+wzy@jbz^2MqH7q0U+KA31(jiVO9wKg9S5_L~_1W@CdZCxTAs=GL`J1HyRtGu^JBnJ%bJc`R -O1HFr}yRUp}r>wqJA|8BFE|pFm|w%)uL{SC#mQg0Zxcei*g2_n{BZeqv=0;{E)FF+-vAR~`Bvhr^WMY -GWQ}0CxD$rIW#=7s9jF7s+4o)VxJgI1O#v<M{u7MLd4n%uKxa#svJuJ!@xIIFOJ%<?vlSPbS$zh}t(6 -Jpr!|synTB(_t=s|60MDa@@;jKAfFT+<7{9@wW<lAZ78_KaRlrv$KCa{pHQ+PftMOBSgZo_-1JQ_02E -uK0E~v|7}A?Nc>#DqhvRZ-VmujcrHu=d=Kygb{xj8-q!7VsPOT5=S{mjLyA(<CV>SqGv;DK?H(={IQh -m(^JyfDvV;D8JkidY?h$g@+dY$^eZqp)Vm@ivk-0s1-T#uUdiuis>_2`IALVUC>qGn?!2t!L!!63X>2 -_1{${tEM9n%w=t`lxTQzxMt-EY&Go<mgUxLWiSUft`V^d6abEnW;ayr=N^SRLkEL1s}ODMnEErW^D%i -EVE?3}zpIS>Br*f9Rbvju!NhjXg{`IQCqlOPbg^?cga7*EMHK8uX~Wdv|1zL;yEOVuCem`62NjQ-Is_ -8ed2K5%!=&o)x5etGm1>59W7_4HH*f<FHZdpm}rZmn*%Za_npcJ31uGF$QL`RHbXM=I11u)`dX+Q9i} -G1xKD3htl(FSg*of9DI5>lFsSF(!P{Kj}BuEr0i^(VDNld*v|(9kM{8O*ImzE3K|2rl$0}m9-vRHn0G -rqm;xQAJPnHjw)f<Z<~JY6YZ|e5sBPoHq~wFi$e^p^6F#cpk^}tI3BS;g9%11(eneieVHiRL+}p(wbb -9V%Sd3}Z(TQI|E>wq!0PoD@FUM&uCx7-in@(Z>mU%V~&!y?NqHLwg^G$;-TUR?wK&sm5u7|dP{i0=bD -@2{JQ~J=|*`3+f=9*F#_mBq9iMDdBZt0yh_Cb;1k-`tQA;uB+lGX0TiClqo-Fleut;v<>*LRyWS{)5! -f1Hx&7HJS#wFoAZZh7IooV7JTVlX0-WULAUc#1dB8@9UFj>qCx(5+!!Jkw%gpTWZDL)zCLm}gB#?UVO -q;X_649_{iU0~}9hItDYX(jDJ%53ml_y!SCMC%w*O$It%%cP{tHAYqfZ{|it{0|XQR000O897^_9f9G -GA>i_@%>j3}&CjbBdaA|NaUv_0~WN&gWaCvZYZ)#;@bYEz1Z)<ZeUtei%X>?y-E^v8ukj+lRFc5_Aeu -|YZ0jWgg0l2^g4v1650U>J>Z^5l&8~;S&?b$RjDkAk^C4Xa$XI4u28ZiWl39^SCt%dL%qCZfd+w2E>( -_tbFT``s?_D6CWKD|GtR!Av@*hfD=tIQBA@bEFil>k2X^W!HsqBVMR&UOw*G!{Ec3!m&4@sZ6RI0(gA -o9@phCF4G3uyd(|=_ArFoE)?9ZdNqyvDmCq>9|8rDXCbTt4?3V(5iSXgi<3fft{3sJ7{j(ZM$ula*z{ -wJ2^D}3pATQ%2Kz|v+xzI#jo1M0`<X#3cn#%_sHtI_yJH$0|XQR000O897^_9-D`3fWdHyGiU0rrCIA -2caA|NaUv_0~WN&gWaCvZYZ)#;@bYEz1Z)<ZeUt@1=aA9;VaCuFP!3uyd3`6hxisDH@2I5W7UnvteD0 -J&sMey&PC}J)N<RyrX84+e^n_VI^txew<LorL)K~JqY+-?tFlq4agAh6WI*uyY%lYy$2e=m$@^-mFsM -97pa9zJbS{v?6ZZ*l=pO9KQH00008031s8R)!YU$Z!e(0FW*K03-ka0B~t=FJE?LZe(wAFK~Hqa&Ky7 -V{~6=Z*OaJFJEbGaBMDcdF@(lkJ~m9{_bDFOFvi+9O14&(ZZ+?mo&L+&}$kro9l<gLZ&5Zmsy!qNopO -V$bY{Xl9EVC_GY`;I|PV<#oFR<I4{q<P$b{gQW^42OEKf_yVUJBedxX#wyR5Cv016)j^t7p_TE%{OZ> -QhvZI1tGUceGPHSqeS`xa|_;YgXo#cX0O=|q&D0H)}mCTveEzz5^=fAu?Tax^W<=0tGtE&Aj8&fxC<| -d{Y7ujHH`zX`7;<d@FAhTJ)O0rknunY~5$nCo&!J#F2{P=oL)umpnW&}Qa4zkLciNp=h_wyxTB9{dhm -+N_B$|v8=7pOt$Cg2BorbV->9pf_K>ep6`7H(-|dt|NKmQl<!O1RZ3NsFXJ_IX7?{bw}4W}<j2=ndr+ --Bv7l@jhp@;ZpeJ9zA;W8?P#|WkgY~SwVP7%oQVBH<#p82x)NK851dlrMQyvns`g6z{m1Ky)v*jH(8c -wR)N|^(VQW>MK3juq}>2n_e4YCUy2)A@#5}+b8x?#drCM@oe8>Q{V!+w9ViBP4#jS2rjkY4F=<I+#X_ -c_TljOD&<4XgTE4Txk6`AXxz>Pzk1&E1Wao&je>6$JER>WGF4ofE&bjqw1JsLCmci*(<Wu_hM6qJsbI -_{$-l_Cf03!#cUw|P+jiz+_nH~bww(z6jRgvj}Ycq1UD0of{)9{qSsBx-(QeYwv_@hl_vOYm&su2Rrl -J5%0Nc&>_N(#Ud<U>U>CT_Tr!anO2I|IQzBS4wClHj<KU`|8Fp;~)IYcNfa2h*9IeRc)F2IpzADjSin -HUUMS8aJd71x)vGTBPmD_CE*(nn4ow(xthq4~cUjm^G5THw`>Uo4NoSClSTM3Dz&(TLS(tgWas*ug!Y -DH=Nzmd_TY<R<)o??606cAwX-z9R6Kd_-L~^^8cIR-15_=TM}(RD7AJqu(hO+YL`*S7nVb!WutPI8O6 -YSiv8X&4FT3$?G=ziI@F9%%<DJ@GD90bm~*_XUO;#%=HdwL(D90hF~RDZ<-FuD0!4`eVFj^#!(0`$yl -^RSh^%ffG9?gIGPeOA82S?C2;$@?D8CovS6ADp!0tg-jbY@5DUFk5IS|dsA36&h;`@x0YhaKJZDPwO< -`(iFS~cv2Qc@+4aDpbgM%y&ms`SV^3;1MS&~?Y&_coyi79DjjVm|>rXJ@nzu<=QH-l6{-r?1Fw07we9 -1tS8Eq2=1`qyVs&{5>h9BCijSM+Esg{T9c7E8p^pn?p+8NU~?1i|9a*Q*D{i8_5f-<Io=LH0Yeu5r2- -}&95lrLIeGsW3{E2mF-%JL;FEiPZB$1aXB&)KE*WyH5WbkF)MX5dV>s|8%mm-2a7KUtS=ViFY8dckB0 -#lninjDXbTA6e?=npJq*?>-^gGc$Hc`{7m-i9G!K5r+oWcTTo-Dtilc*RyL`bF%Z*fr9`EB4*QwT4wP -pOoK^0iV&s~M}iw}l^?!+bOXxOFkiGkVzGh^>r-WY5`1DYTb+pxvY3Lr&yfsiYLC3C1hnhkn9dCeva2 -PPZxi<EOL<2jhmMw0@ySLA6?aLit`a!HU0qd0R88p|-n&)LbXz5>vOrN|GG@89%~ezlME-#0$;hx|t7 -T}9T%WqfMrNo@Cb%6gMtftd61K|Vkqt|kBg@q4sIn#FBa?_QWR$f59X*i?tk!)7`B9m*Iv>?neP!+A7 -_pJ7FfrG(w#!aBOfEl|{~hfFR$zQ>OU$MynpZ@54`+>PDh^U*Lcg57-DKZsYJq8~kT&ilt;tB=nx?~M -C7*JHaMahN}C-xm<i#YGRp{Uwx=>OdrvdBuyi8TNqck$;!4Nqf|#DXd(uCtK)2u2(Cs<1DhB-L2#{Pl -FYv6L^xQ=^~nCckRK{bZn0!eeYs5LLqRUj6W!G*nS=X%iY0b)FEE{z**IYQpq99RRfaa%u%|a4s|=ct -Yj2QB-0iVF%o=(hd!=wPX}F{tbKZIr;&~m?f`==UmDuRmtiL!`XEDZB=ZS5=1cO&hea>yCAbAkH&hj! -0TMHpS@u_qRUXBF*OFgmni&I_)Zuo-Yw|B<2<>Y_!D^6@i5zQ#XKqW9OIrwRO6&>&JXcN$4OONy$Es% -aYSXbhbS<~i<oj>_`W@oCpKlH|TiLni+Ng^N`Luv8$;t=F|EGT+5M%#kIZ?w32`XUH0b6l_t-gEnV<B -&FTjk!JP!aKhXf_9@#=d<;Vbx>BG`f#@@RWPdmC>s6fv4uHq3=5K5CVW*D5flfy*Pz^8Xdu4+)a^=wr -fYGaS}H}87L<AS^GX_eWscLl3qJmz|5P?;}l<YJmI30n+?FH!X1+}e7m}DJirSOkncc_Nj$y6H!*(8B --kD@Y_1?0z?l%q0b4Fc$%ud$V^udBtE{2WZTckL5{>Z)P<#j^P6H8loU>T`fz82^Kx<TEuE1sCJERt< -RA0OH$gNM~RF8llH=Nq3n@s={;A|zrO|Pw6t@GTQfgBBvFR3GbcAI^_5V;M$<1iU}6e6W<!N!A&<sGA -JKtJ#R&<~z0C&TiV2($xt3%{{y6S@4E^Sbx6Jyp0Z!bUB(I2v(|tBW>(&p?UIpkIk%<t21Y2qSy}Vo_ -h73Z6-5?y0sr&Hgoh_i8xYFj?jB&E#rx8@M*hiBR3kri#O`Jw&h@jv@tJV5dwAHyL{eE*o9BSG=Y(l8 -cI5)||!cAUG#%*F|1$eh4l+x%$WmgZ_F95lj~-{&>qXLAyQ`Mz==t$)Fvm8$|42<i6oLnH?tT-DJ=ns -n-m8BYOh%fE^WVas4V^daL{NR;?BP2klh{i!UA4mk!H+raP<_DMy>EI7Fg`>w%lB<MHx2^;xGv@qt^d -VdDP$o30^RKWX39F`sC?;z+_a>^`km#Lcx~f4cRGUlxA`ZP@X!{;WGOdwt?z+c3MtgLYq2sJUa8V}<- -wEza1q_WNxq^GG&yH(Wk-5_DWoCBeH`^`sF8$_D{57`aD)gys(f8{A%6lISWQexgelkSYF{zkc!ho4< -XVJ$w7|-_NsWPk;F7#jEGA^!VKA!z|2Eqw}4U$4&mcTC>_6_m5`BM+%XY=bea7xa{@QvmfUdqdQ~mWY -@9zTbt>bKUz6FZ_S?AYlNnV1-3@xqHc_}iZdM8!F~A<mzMtGWIt``u5cy>ip$(SNs(f{SmOOGCd~TlM -O-$&!h@RrIw9Tz4bGC{6;Y?DtDH_5_h5XQ;tqM*bCdD0){y?l2}d#_#Lv0ox9s6<RN^FAEFu(|;$k_; -0x$av4;m*4;~P=YuMz#g%61>K4lkVcZt~ZpoS$L{0>tfp0}^O5Z~9An^NB+%cY|W`W?#>vyG#ceV}5c -qA={8UzSzX|)<3gU8$tfI=&kFuH&Q2^6yEh*kMqa0XQP`HqqHzR$KO0%kM&@9fyHS(fs3PNuvqnXM~~ -Yeyp7t=_0zHr@ACzLmSEy`sO97;3Qj+tyB`^tbbc}WFHlPZ1QY-O00;maO7>Q$^@?N^0RR9Z0ssIr00 -01RX>c!Jc4cm4Z*nhid2n)XYGq?|UubV{YjZDOX>MO|a&Kd0b8|0WUukY>bYEXCaCx0jJx|0i4Bhi9t -TG&xP!|?-8v{GT?NO5Yu7<XbVh6~-Cv8vFA()6V#Ln~kaMLuWfduMxAlXM3-rWVkV{lmzbU^4SVNgzG -LGcVyq>D}mICBC^vyF)ZN^KTnPIcghM+VMg52CJs6Tm6z`iLw-eyjov?t`g92G{c^%@>%s&m&6Jc4`& -_zLMeG!$g-sfu_hwJJU3cF<Wu%jpVz8!Z}qti^^UYqp2JX)U)@xGgTFXUjd`SvuYxr6<<=~v_bFSwdh -b2KXy+Lc&eev(@0v@?;g*4d@CVQRJ-iuzTL(*HO*<h5nTb+UiV||0~~&?@X#6@1&{xiaAKEe_dDW`*t -Zti?u}_)X@7ZX%{Nd>0|XQR000O897^_9<n%PeA`1WjuPOilHUIzsaA|NaUv_0~WN&gWaCvZYZ)#;@b -YEz1Z)<ZeUukY%aB^>BWpi^cUukY%aB^>BWpi^baCzNYdvDvw5&vJGVxhx<R4Ox<6vY*8RlrH)#z^7> -u7g9XxV)9PvNoo;ESHq53-aA>W?x)Vlq|<?P*ezFK4xcTXMXe8UH1F^%LSJN|79z2!xH#QD3R4PFT{* -VNlHOxG)+mlU}ReHG$B(uyJ1;E7DC*}sMk9y3A@eNtdz&SBl1!#mlWQnJY$3w*Ya2q#u;6*A(@G+EJP -Y7ya3v9w&I1zmMkmDiWZzsQwB_k`h6IG_|vnW;};*#-oA=ooV<K9K7Ta=%3>4cf@kHi1eq;bO%;DQxq -Lm!X}ORjlq{zOEn#MBUM`4`k$S=M0Vv?9^OR?KRYsqs$WVhL@}+;XM*aK8<VzGqU%&Qx7fe>Eo~A!iR -HYqiMi#8BiY#8y6h`CVUccY(@ntTGk|;WJEo6PA6tlMlvsZFal{|HK8#kgX=!~H=dh<do$#p8G#Js|5 -{Zv0lxqGGm#7mJ>DbqAYw59kg5Cf9rc+u<qKomsgJY|TJqEasbBeR0%<&dDWe>Fqb1<i9-$X}5%6D9e -L=SPyx!Shm(H3Mcmo26C4fRvXkMq7jf#iL*}vG+<X%Ph(_fU;h~=Kdft{X8V7_K-YzqCGXx(9wR*Sr+ -Qo!8#Zcmd!-Mv+Ge%mGh%N2LqhM++vL=r$kA$%r)b=$JNNL^+UEhWZfl314Bzo1x>;^vY(|CBJG8atB -)C7QJ!KfgyY*8%S$dYBMwk>LAk^*1!FLX%nYq;0f8Z^nIPP704g5GJmX~?Lnx#$F9(}JtrotC+zT@Du -+`G;ECW#UWWQ#fA||!qm_0fzA=A)n*4D^827Szx)8;j#ly_W8F!g>_sLDR5#Zr?itgSIMF@;ce%VrQ@ -@B+1-L#ji~_vq@f+2~wk4V5cEYdDA;y`vm7r{$i*#N4$(8RiuVsWSm4A;z4}n~-K8!HQy2&+(GUQqRz -aW-4Yb(Lo5~e6IP5W%cOD&dYKJ4NUY$nJAVsDp_bB(5b|~PK$w_hGTZf*jjHr*x=ui&7fF_EHBuc--e -Tp>0S-UXjI=CBgLu^#Rg(wZIe?D&Q;Y1Vr#o(+1dX<P7<tiM`gikq*^JQsj8>o0M!Xn^BmKz)>w@<BV -v^`l@*w-WYIM%!=R%Y1$z46E`Mx|9d-*5r=CHATS{Q+(?v2*c^Ue(%K^$LHaY(33P!c~^b{S-8%j=su -F@J@DO#utu})?2kU%Q5b7VP)DN2rU76!*=K2VJ7IRG^fHtI`g*=cg7B9)vel5tUp!pn>pvRygQrJ`sK -D5GTzTta};euKgbjBc83LiY@RjranMAzBf3ajc8Upg{}*iLQ*<mSruCmjJe=VUuOw+><rcWf9>CfvU= -!(f<fp_v>j{+t=)^HZeK^Rk9=o9zhhel+hjmOwzI}>WZltG~;pl*@hNmG4u`?XwE3SWYUYT3r&upk#e -abL#WgXMb1zY$AC;XekF+X)HDlhAS?%27Lb0W4y{WVAhL8raslZY{11&`TB-CF=%{B2FA*3)WVP~R66 -V{^4m#mk^+sfJWo^8mQd!234oSZ$qVL($GKjD#0k&JDzCA6mF)DZ<F4%u6NH8)6HyRDs3&zqA5IN`9v -1BDyAz2&yOm*bSgxbh7-OEYUlBSU-SGFA6Dv0O<l`sPCWxqzGD`qZ5Mf;TU<NgF}&8Jn#+M%zFX8giZ -$+q61#4Sthx32ZfqZrsS`(LxM)$2Q$8LBko4HhpUog}oRTR?Wq9EGdfYT@TIh4KQOmRQHO;o9<w^T=I -twKt%qqzo65m{}}S%s`4#^?gJ~Nz++b;CwYyjH)cfWp7J8bn7VvlVRRnFZgUhu;20fP_;NxednV&{m! -W$;B`|7Tl48ET7FMGxC0{xxOiY%EoVaLsr+mOt7gd)9e!X0GKKb45z&?4iJ2BafXo(9uz{oDXRV)+DN -`~lWqlY}Nmwna_Rj=i!BV!OS*e$5ixf;RZQE;Y>?8Q#Ss7Er7?o<M=OU=-hMg~Q*cBBGC+z>-KPX-P` -~Gq1veKcU3GJ0lused(uEtcLJ}5|g4)Nb5Q16qW9}=ruDyk_d6<W%6=yiZ@-LmV&aJxIJwQ6P&{Ix^T -X?b`AI+gApiT8*)`+HdI+F$2H9++c$y<c9B$8XhI?lOLNa`9$-0VcIeypy*V<C9naG_MtDU_1Q;`fpe -T&4pS4NoAzpc<x1f0zu2?x{HsH{0PZmA(AGnfFM)(+t$^8@%$9{xGjc8v+b{>jGPFafop)!>#~<Hq+k -&&^Ja^%2qyo2`svfvACAo5Pqh+HgZ6?Af@j%+Yu&Baq#Sqh<d(&;Sy#6T;%-YR?4OH{sn11~C3-F}^} -fx<cc9S8yt6QD`PunojLXoO-s`gi^*Yk{!7Q^*ZB9hX!;7qA13wW=)k!b6Dym?68i9gjGhZsH;7Gmwq -_-dq2wHoicDn~RlsjR)jo|_A+fMxjZI1hXQ2#GQ1&Mu0iyL$Vw^ashsx+y0rFM$*?LVk>HOhyUmD;?; -3D!!un87O14j?40@rZX3)9wOiC<u<av{|y{6dIS2W7p_0+|$WVS9YQQG#J301s(V;fs%py(;HQE%AM^ -@jiZ+fX24<N*Kkl6fu6W3?4Ia08alvWO4qi?tw_UNQ@zz>X|Z%>rRO*pjIQaLfG^CFbBXp3^QONw*G_ -B=x|M3+2$L5cqwD~$<sLkVU_>xzDCT&0=mm3v=T24P&<59r)<7P@T?u0ea#N_5UIlGi4#cDoR!+=-{E -a-@A!}KsC5Hyg<NO!spYZUE&pGbWumxRlQ56vhT174Rg{P@L{`1=8XoqH|KOf%$;L{C(N3~2J(N66e! -+sO4p|-C@-G+s~72jOg<5?tCyVdQT5|b#;<}Lzocdi))dKbN?jk<p=<~rLU3^85iTA5Ge8^U2R0w98n -RW2x28`t}yk|uHc@sw*4jJy<c&3%I0V#Md+9aE_D#0b@T9{MCh(lY&)n{6oA+}Rjzwk~Z$)@q@nd%5` -F=BjJ<KBU|t=y6fy7C{}mLyw0m$M$id^?-HGH*7i`w6*YHwC_dyx1#=@$oI%q|NbqIyJJsNVmI*ryJM -`T_g~)1)aS?Xt7^I2)NOvp8S=TnQ`Bofj;Nq%W-Ev=jb;qOdVdPdVcGs&lpiy90P;R(5ScsJp9)+-m8 -?J~Rg&o@-P%+MlBA2-V;=3-iBcm={eRFpWKW4zOmr&z7N{8iHB-)k>iO8Q$6oGmC+M;!EF)W37_^huE -~oB1nC!iN|Nc#Ue)4Yo518>6#V*(vhk-75!CgIurR#Wf$N9hk656EQPxnP`b7bRD$FU;3`f4D!q|jO$ -yPMt?&$VfBy&90el0SNAhR5s{)<FGp#uB;r12c0Z=YMTsxlW$x%;8b{Z=csEgl@3<&L$(ZYrB;CnB8P -zt&`6&`BC=Ck2Q;09kaBcsSF1b_x`F^>#IISQ+pxqqa(Hc@Dv6>*PpBf_COqOVxh)<391^l!Li;Ng;D -j#Y48wRoUhwKXxU7B>MQfTO8DeSt>h%opGgH*jp*Ax$j8Mr>ynTOn+}wO%c5c(R4&>S5vx;Lhg5U!zE -h(8WWaowv`?%hWmtfWX!|jeCwNDW*r|c<nTJl=-`?IOPx;Gy0kuz{A&DI*jo>;Cplo^HEa7PHqdd!KN -V?$aeJ2?Vh7e7-zc_l18IxlzLzZ!jAN&Myj5#5W13ej?AbP(8P)h>@6aWAK2ml;P_Et#W{Qq_b001!* -001BW003}la4%nWWo~3|axZdaadl;LbaO9XUukY>bYEXCaCx;@|8Lti7XMv;#hdzrWk6M8r|1nv6QFC -;wRc@wB-x6gC^TAPY_77XkyJ8o=>6^ckRm17adti6&PZ(W@jddr&-=nhJtCq!j~)>n<@prP?vJ|fobn -_4gXtqm@RU5J<jDO!Cd-Z4d}@Wm=O~KeIF2s)Z!OnG)9dT&_w-gQ6;s>j--kZYz$`Sex)Z57k(BO~Fo -xG8YI?slYgwmsBNeUN4Oo|4)GM7u-!Ux;`u_ZyTFq8`5k*kt?Cgxhrjg2!@;d~wqSKz1t++`hYhxO{I -6At!yUQB4PbSrBGVLWYZJ23wUdWPL;{5nH%q=IKW=?-<lw2vc*+4U@SiNeY(8Q{*vO?A{#aOv()$%CH -vW#HN`*&B@gU$`xR+5!au@r?#KJ)GDbaKn8md_?BVL120`AEI7L5<WSi|p@GICGBd4Av-_VW)nZeu+k -j+9WD7{CDGse@4!u(6M`nf%_(21Ud*-H4x%Xxi}q9%=?LX+|j?JI}3h^qU$v$Y1UkIKHqSlSOP=ENw< -yl953lHY0l}F-a6KZUov{tRuz@9Xg2_q86oS)qHpL~u)7yfoR!!F%sLbDEQ_K=A)BodtF>8BQcU5?** -|ExrGN3dh7NSeh4~|k7L_P?t@(nUH>`lJ^Xxcv+Pr=9;{4+3+(qI>Lfw)ZCMrat4gSbS-5pc4jn62$Q -F23#XtMm4*Cm8JN2@9X`iW=A`0oX8tSve)gw%M+8wm2c*na31jiO@Bl;$R{;T2YiKe)o;N<$j4a3O1i -mr>h=!+d}L%nC#2uuUFB^PHF_KO2Zqrx(3(%;!o;)h)Zn*Y6vZ{05V}_>6SfG;q&SRKjc%Z*LGt_gCl -$hpn1+d+sfPJ@+V?Zm?GpXR(W7*rWLXbuahLDSeDfej9%xdPF~QC2qEX35i@!08WjZuPVf#!*3-_=8_ -crR}#T0He9E@jI66Ia?nBq_u)V61VCp`vssr#;)W_-?*lQV(^Hx+LjK${i8a>!Nqh{Oyaq2Uy#3}j5O -<*NcH6LDrAi64$o^oqSl<WCu2#$6*n(btJDdHDoUIRTW}0@-cG^EXo~hR@Xmxf<vur-gW@AUV72H$+q -@w_V*?>S`wp&={`E1wl`*HFR2I6Kv%7$GI+quU+3aF2ZlTZIa_$xu`Y}rpB7<!T&XY-Vv(NjDe@8gl2 -q=XtYpVG5aN)Bj%2}+(irsHlWUU>u#r`6Yhaai*IjLV*PZ46jMVBeF2$jrUbe~ZkMU1U((`*jo(n$vk -G!AbnHY^mnRew+sOj5?r{RMc0}P%LbUx&oN{3aGY?u`NNf-X`P0USWgPqe&<`%TBT<ZmO^2uIL_E0{B -)!TY#GcfTjnTM*f<50J^&VlRc$JW!<5{O{?mt&!9t_KBJGbln{|mJ`IBY(1S+tyQ=Jqpxj-9l0Uyp5h -+_LSPR&7CGSdkS7&i%y9{QMe!+)q?ir^0d+W?TBz}}We27|4g@V$Zgz$D5xCGaSYD({nLkHY`1<yt&> -wk6HMV)2dL&<X&<e)n@r6ZU5=-D;BS0fIk*x@}2S35pB5YdjWl-wPF8<)Fm)QrW$%3jfL4twl>V!y+n -?<ybmW9rd@GoRzKumNI560g~^;z5%MoQeEgGWgnh_3GkHunS@capX85h3gVJhU-U<gy(cp5C$)VCR$g -Mp0(>4*e&`%yYDDa9-%EV=pwJzXi+P<!d0bF9Gw`NgtkFcmo{N`(gPXuL7-E+LxTa`LU8)!Lg7PUgHA -{-+uH3ldME>2)vU@|V;j>hOhdo-;myU%cOR}ocGt2e?bpLm&zHnln8Lbx0dQQG)Ghgd`o0O<sbF3L=# -8t;z3$R}z|(h?BV}=AW5%ci(<#NTpI_y0Oq|jy=*6dl_`SY2gr&WSDX|QyG+T*~vI_O0Jt-6Que>l8P -?>xAWI8bR9myDg{U~;d>~K8Lc^@it{VHF5qCD8KH#jYAnhZ&CFPSvywQNzkm&gZ!X0_mDcJBt$BYFSM -a^SAgS0@dgir<I|L6pQ|g~aFZ+o8&gCL47M2PtbSW7B43vt*3~tx%_s-|SWjRHO^p6K`Z&m+?>w!$r& -scSeMj{M-dDlCL}Ya1HCD0<{8{ciZFJ9P+bck9o$f^yN8gae-B+bh~4|K}{H_%T`q7Ff7<-J{pCa=|C -#EE|hQ>4@7@89SBC4YBYp<hQUyRqp7z7x9FgK$t!MnYLhCZH7?63$<Cv`bHb0*m}^>m`D^uqH`We|7Z -Nw=VmPqI#B1D}B$jftSBS75WXX3bxqTZjlKbb?yNj3HzIYiCFQMqpO8#`{8@P_T!*VU<53Jr^@=_=$q -C4u3mv5~sNacXf2D??gQSWiDW0?1Q^eu&b&<(8TUQBbX$7o!2WBb;?Jp{JlT~g2L22te0)4r8@i$|nM -p4V&x*G@B5mOfOIQP?I^mo0lpYFbGg4LBRPJFh|}We+8zpSM+X&nMJfKTqvDt7-HXP)h>@6aWAK2ml; -P_Es9QMfn2(006TA001KZ003}la4%nWWo~3|axZdaadl;LbaO9XUv_13b7^mGUtcb8d1a5yYQr!Pgzt -We#W}PWE3$n^DHK|I3G@<5dJEX9yop3?$<<G3iXXmG<TR8bhTWb0*g*>*1-S~y-?<>!0;XGlsR$wyoL -}hMunldjfw&2;EuvbIYErOc&9bI(()HLh@Bq2N50BQ_JlGvtZsh2sR%y98IiVG-x7!WuwSl!Cn6f0Y- -t>tP&W-kdxx5@A23h9>cA8rvb!0!$*x#EKsY^nm{qAMoolW{htGc8#n9PSrlh7Ab3Y~ygl<qsfE^%OT -P9N~`m?#q=qRk<Kz2vCu{Kcn{ae+{!RIbO9kq6<@^7%5tzckK{^M#$SR@EKs-YBKzzFtvCPM-Y$P)h> -@6aWAK2ml;P_EyL!%;|>$007qo001Wd003}la4%nWWo~3|axZdaadl;LbaO9XX>N37a&BR4Uv+e8Y;! -Jfd5u)bZrd;rz4I#uLJx9b=+L8p9Nb!M4K!_FI|Yh3R%mG)v6V=bOB|ugw|A(;NgO+<4w6W|_hx4h1W -e;khsK&H71E-XyiA=HrD1=cJd9mvbtiH(;E#oEVC!UNg^~tr!7Xr&kkQIjn8Tn|Hn3@6-rHciLSzNxS -fk8ANx*xnu|h&^apzYp2?{K0)CNN12+j@ZRyDUH7LdcDs+G2&k+H2-6-3=3^!pnpN-Jb)tY$3zI{7r4 -rXQ2ZG?}NLC+A5zPtv#FmI<7ZLQ54ThI$jMuh#L(T>H0P$?Mmzg3$^3VmUux{|A{CmoFG!Ew0u*_4oP -(_A%Sfxa<*aHk~ZL%ojZ|JQ>j#PFoxu6YS$Sq3BOfO8UbQdnQS0zZlT7X)Kx;P8c1x7%J~kgb#)NVT| -Rt1*=lYt++$q4MN_A-DeCaGnLcdS-?#uL@<h5QEIObgqFaeLxS3T$IOl?<F{PrB^m>YbekIeo^_hKpV -MEh(V(>4&jTS^wRS3c9U*Cn(0Ma#b~1x6z-cCO>=(NNsl&aD#Ei^x-9)e~1er5_#0*Rp?`AV_vUSR;k -_L)Q=$$Ya4bik;u?1m-G?vQ@_bGTZCw=t(QO;5sI!wEXrNQIJQR^#)ga6cb9@1sSBl{vaDLgI}CT)`) -y1p6@NuMGOekCM&Uwiz%0+MbAx>qcx5c;6Af@_`;$3&gcxTcNDQ(#b!4~48E9%erxICqBb2^;|X=zIa -BvT)JZg39;?Zisr*B{SB(S}|;tDxYMR%7Jw4Jj(Fk!Pr|Kb*-SAha?W?QJXmohaTJm`V=m;>wLre3~L -LQox4fPO0-rwKBT<oR4(=pP)h>@6aWAK2ml;P_ExDs2p;?r008k!001BW003}la4%nWWo~3|axZdaad -l;LbaO9ZWMOc0WpZ;aaCz+<YjYd7@jHJ7N`Ek!p{};m4;@bE8Cg~uO=ZcI<aVZ+%o*f?BBJ9Ra}Uvq$ -NlZyT|5prfRtn>?KBN%Z1M0|EcT7X9*4u>pb|f|qHgMhXMEF$svi8S{}~LfR<dU6GHY|e7G=?JS=6jq -3D#7+s5fQRFf$#RdBZL=RMyr4no5?5r7XmN7a3c_Y=nT23bANpS=7m32)GR7nqZZ6vf<6jJl5snMl_5 -)VMX~9pR#ZN^z8Xyu&l~8+sI9l-ijhCtE8>+T+Y8v#D|605LBiC9OY##vbSZKA6HdbP1uoI`AV)u**4 -Vp7<k`ZUA?7AjMpr+Pmcj{Qrz-fX5R^(2?fS$c?_u0fWhaqTySjuJI`C8wn^=8_=gM8RCi9(nb;m#(m -U;MtFkE<hDd|)V~~KkAMQGubdQe#ashjHc`|_(kglQ@j|O#ldD>xP9(DuRfNZRJ!LNZCW=GKUMm0^?2 -KSTV^c1G-hSN4OHvsfb5Ci@7lD7--u*n-<)#CoOk_vg-(GMQ9W+c3AR;DAJ^I9%aY)b1!(;-=uYfv*Y -28MvfR<gLBFj#^Rumj5*DJ*Tp2T=P(lj`QQDbpXh0lG^*qY~%qp=$H=z-uC*dUtW^HC`@OV$HoKJEW6 -B_3X%(Y4A0}2#OW{1dN`@9RXG1s5^mN?V@R`jx<L=#1j}$)UuJc;<a2fdMt9QN0Qga-yXg@y-JS`(^v -1#UY{PPZx64&Q<xYU|138fk)>!3Yt?ft8pTK>ja{=S7G(wuR9!2gpq{m<#0JDCt&v<JmCLjcA`_YFtw -j!ONJ+|73%~`FUGZyN3du15N=>P2r$C}-sN_6Bd)+DG`O#l5i4j_v21-KM3H1}Xrvm~E3x>l-U-9a?p -0KaJy4m8lu|fhr6_>T}<zO^?BkLMS0Kjm+KoJz&B^UyN%<6W7%O*qE(ZDd^?fLoXt5fJ_Gxjadfxm9g -<;g#fq2u{8+j?<)b#Zch360OZk?GaRo8$9$SI}`*g0~wC7CEnL_6nrpQ29rNJvh57@SfPtuB;2yL&y^ -vdZei=WRs>NVA0aqJM05!Gfr&(xSIpwmyNoSFmb}Po1ZX{S;5yc+UA5cN*iW~?u6ZnN-pnaS5*rS3sI -SNlnWpuJrP_75y18m)~i9;1lSCbY1hxn`Hvt|3F=r|fi*C?V>$*F#1!W7wLx*pkTg@G-1L1P>NmZHm+ -#qJAirVL0J8^DZFb5=C7C3ikJ&#~0s@x`V-nR%ag1J@f}0p1O(zf1cjcDlB`gh~wp=zOWeBVm)vaCuC -}Tkpdw9bEVHhdcwY){d+sy=B1ZT^<<iH^GS!`N~<@EhXM@VM*i3bai&rHvleWSnCK#`{1<igoQbGH%Q -7HAz@hKBWbs${_1=&>Y<0pj2i1urHHg17BTE>>)T5-b(nsuB#`R+D!tG$aq@jyg}lDV|=EkjbTl&_(E --8y6HTv2KAsa{)srHuS)j(0X*p=53KdgbI%kcJ?=hOL^NmEbeezbpYahE5R0``FAlwKy!?7VP%m8GNH -A?gNdT6+gT>b-Er{Gh~Q?E(-%kF5?70QX6>wOz(VF=tU)3(6~0&vUtmDnHwgga2-yQc_r`?dtlo$PZU --nR)^+m0b+p~W$W|Mrkz>Qgo)Me3GH(umT{zm<FwzC%7Y4=|Bb8CouSFp$o*yXI!n)OxF9gl82L}j7Y -KkI&WOU?MsJNSPty1`KiEGqsP7#pW1F95~I54Z-LJ6bujN0Q?=DG5Cb<1;L5pa9~ss+SAxQ%0rE)`1b -8~p_|O~C-M6QueCXi<WE*Lv4RRzP!7=e(ngT+y!QFtJ=3QaMK=nxb~k!L=m;v^D=w%b$gU1P^lEt{sT -ZVq}T<Es~n{gVQ~DFgwLSlB78fPIoiGQ6(+x&daRIHqRJuK+HB^^+BxAy&#=Y@^NZeC<Rz@nFDcOpIw -6aEN|Kkcz1Qgv(Q}R@yO_q#hAGXD}=VP<_L?%2ka`@*cGoWv^B&*XhF2{DFc+SS9hpOyv>_QCw5s0m= -<NjRA8-ejp3EBlO?+=TZVBIy9Q}%b6y!k$jVzK5!jGPwG$E(3rktIt<Wp+&PD6UNy`LS%J=UnP<?OY4 -N0<rFBTS^x#3LSfJ+D^Wu60dr=90hSh;d$*heEt552QFL3~$3I5wRcxBc?vOM|GPztdAg2xK!0T3sMS -=>~9jfXN*suEBAHa`v@5wT7U)Et=8ORnu&yfBfT9@SkI2kraAq3W8YGX$q@+-x){;<goLlL)hz5Ub`) -6Uthyct$tw#(NH)45DDb`z|21NSDf`j(B4qJ{+?kj0eg{a4;G<33!>pkKh~2=7bu&}SPyPD)NC;ECa4 -3~=-GsV7Zrq#?Ho90iHAW*=zs$T-IbEDN7+Pi6=r<=<aemEygBVt|Gi<gog7F80O&WxW@vVq(fTnqQt -9B#;Y<$&!puonjQZ<Oyfr3Dt7jd&u`88uZmb*dcHt4DqQISfL{*yN`4Yd3)Num8PUw&`CUb$$=w8%5j -P`wU7pnb*@FW6H&U#Pa^jth`z;sg-2hNvgc$#HTJ&rw9fwj91`0NFDL%t`P(@s{05|Nzcd_B(~)@}=; -)kK?NS>wtZxwwG{YVHQlyF_NEtl1tz7dTg8PL9ZfTTUnx8;$#-9@3ZQ^(8Q1f2c8mkWM0^Xyl?VdKR1 -`CcD>E=z2@_;D=@f&hoUJI?zWBlqay9ghTz$#4-~bISD!E@TgML;MvN|crkR}7{x(22d<gY6&U9OmKk -7$&Qq#rq_aF9Hkct+Q7gox5J&*C+Bvyf9Z`1SzYYf-XT`qR>&srg4^O*a9t=9beu-Gn0jC3oS7eEZ76 -pWDl@NYl2C){ug#gJ{7&r1z9G<dc%x1A0aknii2okI77DIKq9mo(PX&FvPA*Y#TwIdj=g5xG&FmQ|1L -?wAhgMnf98|??%>j#+Xn3Z;I&&-uwUtfVq1goC8I^+#8p5Ew{*Qs=j{`WgP9h=0I+B0e?P*2+)l?6lq -G$2U30UuOOr_)R)UuUx**YXwwhhY2$)Rp!zwdeagb?zW4@SSvsrVQ>LtQE?uw3Sv0S~k#%slo!lc}do -;8<Rg%dlrulay3h8!LZ)k6O(CAGL3wPBfqDoADrOMKu+><OF<TR!>XybvRRFWlrtXod?JcL!Pl691Qr -sNW?}w&L{P_%#SHqwWU~hZKTb+KhS|)b7|zrv&&-!_NT>We+;%X-*n)^V55~sbdpOQlbiaRJaIR+QTL -z!fy7BWl<KMSEm@VGwGw<ntlluK&TocO41d6IjRi<^+#bR`WXY%<fmG2wyzf%vGu3pMBd4z#>vLZc0{ -ojhGlzonbPwL8n!7}ASQfd#aj>?3<<^wwoAQUW(226N&aT*LWx$@sqf*f}p$%89g<H4AukTq)7F+~Gr -orFVEYv5r<@(Y?_ugu)eC+si>sAMS)bS4{Efpb`{>m3qr2B4yrK~Y4x#k;I&pmffvnhAX<IM<BYJ3n? -&JBr`zj`yyD+{I^I{E~<d66Akmy2l|FDuI7~NlE+AM&f5VJhCdhl)wa#pH?;)v6Fa#Ot_3z@-bn<9l) -fzYb61jvX2J0PvQ99UQrhl8V(wT&SH3Ue1U1Bzr8!TIDS2hQpQk1)|ssK5kf)dDGs67UJvyKh7PPhHH -Bqjv%{G?wsUrVc07y>>@c%8sC(A;^*|~cKaCMc)|m6<#X=BuCQc2<PAcI#OPLG3(eI!A5FZF(sW<NV4 --ckhZ;5;12Sky}J|wgsG3D?^{X!~2w@1F|WeEP^YT;oORgTzhEk*Wi)(rZE_X=S39%Fkki|*EQ3`OuF -Faw29*Zd<}cYy!Z8$bSdg<~<fW1PRO4(L3;X?pqI_-_h5>~YJ9jnqILygc?;X`&S`ardi4EwPe^N0&R -8)1kUVZG^s1)+7j5s5gFCRQ2mH><oQW3>Xk~`WDR0R(80_@+VkGlh66$2606VM>)sHM?6K(OsUYeP8B -zh;@cH$25-$O!E4vA+r2qc)H#q6rq~UtsXB)`DeWTihTjNgjwu){9muXiE3!;?qKQ;<je5)K!LaVfPh -)S{OVKb>kQG_Qbm<dqv~+9K$7vkGsrZ(z(&|m5k0`0T&1l`~c^Jo$0QVC*Jk0MJQTNP@g##nh1s;A&G -J!l94clgU@aN&aGh-ZpOSZ!dR99@7sW~LYb*^olBv7mhu_KvocTJGH&R?X;A9i&~b-7m6%>X&VFjFE# -Scl!tX+s@tgR`3%+F49wd^b;9Od`HpaTQCwxp{GCWk2_ZN0x|5?9OcuHjV$ugPc8k0s1-%rfQ(d2UXx -4+PnONy14^y>XhM>OIw^nRusz#kUT*-PCskb6|Z6<H);=6(ro6HQjT0+jy;W2`NS}vLb;E4spd#0X6a -Bh9EWpLrBt?bIF^3Vk)s`-tjfCC6-)H$ZsRe<@GTs9VK86|#$IiLB<}<RRJP_h2+ta*9gm)ds=kA&4+ -L9FD^?6KOYRGv`Zsf7Qi(F#5lWz3*-Voj>u7P8e1d=bOxhE6j+&ylWeX_;qvJ678y{ih4(2gUjkOOSK -MotS<QnxoA4PHRUo`ASzi*3h;Qi%fuVszuU!&si;!agiftKle%ns^NTUDZH@;hDfLjY@gmt#`m$ZCWG -W*e=qn|bXLUplFwAmC`+pm1w|>UbI=qy`9P<xq|;h<4|;6LpW&znE1yYXi&DOxp}1aj(SID7;6@^Eti -q(x^yGr(l#lUGp0w^AMB+d96LN08S`&Vrx-j6%OiESM>@#RoPyzz$H+DoHi2#uFZ3@qbrU#e-<2wCmO -(nonu6{l~@YAwZco5AF-ngLO2I7Ec2l}nnHteVHVgI1>MH8IPCw`J<P9AXly;vVb9+vvruDl$9zR9pl -zeOSZgoq(EH$<8ZkkSx*8)hzRR(?p{$c*b)50zM0Gn3s!kP%EJbINcCn9I8@HfA{$a*+me0;^k#8y8= -%fZ$RaS4|?{<J`h^jK)8cCC8^etv&MHgD^s;S$pjYWwdDDd>+jf3nidYF@Xu>Le+(7jhGJo*Rb*~Y|Z -X?T{|13}NyL|%#jLBS9j4W~KCsPMs5vvzhgVTWYeZ(k(Ol-<VaM+*rywnBlQJ9U!tmYjMnma5zx%N#4 -2>0zkq`UOCv!4{fZNc)-U`+s9-FkKHkH2jN1zUB%U0f!gJ_RNIjG4COa#&Nevg``&4{QEnnAYj)i#5Z ->ow^_7l7x)K+(WnfXPe&+>=Tcr)u^4u9Q>z;qbH-WoYq>yBa28h=;vD^+xWg)x?m$yQ7_w+E8Y91`>V -368thlaz<puhG&YBh!fyBq)CYN1AbAEPqe00@$TJo3w!?NfUFrYcoyi&%p+o3)|?mH79!=r-K<xQOOx -W`@LyEfO%^i8Q=<oh87j|YbUrL5%7bQLtjo8#WAj-wEP(A;XEzrR8C`x{iB@dg#^UUjkW{3;IhY4FRu -Tjg!RUL$|W)v*WBzefHIyj%6Kymsf4s=M&A&m6XU8N2;Kw|>zzd@~=VwVxPu6E2u*5!T|&^xu9Vuv_| -}iatDayyA~utV{FV6KrsH^_Ox((4GdVd0wM7km`@$WvpdX9kub)i2FQ1Q%ZN7!HEIQs{R|4InvZsTij -5_1^u*T*}TlCNPw;;fF;8tWw;JbMRDD%hNvWFtj)gf$eEknD0|S$9|ZD5NGTao??C`+8bUBmx5EhcCj -^XDn|WYn_@93+(h}H7-mXkvH)7Ytp%zVx(MSE|Q^MZTJ4tNhVKcTPi72}-PnBf?y9Cxn8CEj;V1r6DK -iVeSm$$%`tAgLXsX?kXjB&^%V?WX39#_IV-#x6bD-bJ;Q`uuy@H#-(A)~^U8&QO`SA|%{0wn4&QjS>V -Gy6*b?gyoO=8Akc#8k`mggqPxA%n#5T1P%XKadYC5^^ZT{Kl?vn@Rwivs6b4yN0PtrTa#i7o7TU3WX# -0njZXULow5Tcb4L5r5gD^mtrp7$7I~ADrVk$zkxA=Vf(DSUda0emx$}|CEeWmMStWbQZ?{|U7f!^pF( -iCF6l-LY$BMxuajrVvnlAIU{7BB`T6r;URZ+CtsMTqOl0AJEE>`Mo^RiVy&sF&Ss>BT^7B`6e&1&2I^ -B>jSjYSzNt|)Wt9b=;@C7FKm1}nUJbCegj-ELLTUD|HM+5$T40j0d1H`xY<4ZeZpU;8q@L?xhmk$vww -j`c7zvMK&U(LRRIbdGtEfm44T$-E&vFvmB<PPuqJuwM>RB4Z5*nyw3j{gHzJ6G{WJz$+!nHfO}PVwXd -dPPV!u2uK{{{~P?0|XQR000O897^_9?0G{&Qw9J4F&O{=8vp<RaA|NaUv_0~WN&gWa%FLKWpi|MFJW+ -LE^vA6SX*z~HWYsMuQ>1?Y!|NGWqT5u0BPbaX@exF9qeHpDq1?W*+`;BQt{kj`|Uf2q~s_`lN9SNMe7 -Hfk;rrVzH?!^-EK$YuN4|=MxvCRKd*f{o!Lqn$W>Zp2r@4-%(1Wr><Zy^I0gIX$D>XsN>sVga=Ee*^p -gSXJo|PB<{Nm0MS*rj+ogR!>O`4LurL_Gekqa_?hL^o!pZT$<a9cLh0>%>Bcy1B%*?3MB?CJPt#TN#1 -xi~wV2o6S>2x|NE+ClS&q<9+hfwKk2v43|u7zHjLDT{Ikdy;DVRe;|#iB?_NRiSCq9hZ>L~(Ejo`=O= -OiuC9s1#b{;H5|5*BQ!DC~$pKL=0;F4ikz)9RE0(#qp39XXmryv(u^n<7l#f=vU`w)3D+EqF(IJ4vu( -98shkHax$4sVlw8ME#zSY7q3qqV@2zr`!)oSDlJ7&WCJ*qiCgN;5Hd*tPz$gXA#K=z`Nq=1Di<y%i9f -P%T1k)I00mVR%f^(OX0-ID!iq;~A9~#`3=5gz(@b7sV}bXrHmo*iuF{Q@@Q@wvj4E1o?8D3H*(nLrQe -^VIm=oX6H-vQYcU7%Wq^Lg>a~5$lo1Mdv-`1#EOUjuCg(pf~O1v$cgLdHFy%hSU2aglYF~861IPMi9$ -6mBW=c!j@;+T#xd4F$hak%~w#{-|`Rc0lrvVcXRQl=2SS0WuXAjk3c9LY>X0du63-SLm;eZR*$oRXna -LKX}-cfPxK%Mf~rDlC<<w{}xvkB)4arAfp0A9Z{PNoB0c-v+Fm1?v@R7Eo_}>b8;_lB<qSnno#=F<Ed -37?yAV_&`murM$wz>378|j@ueZtbmm8aX8d~vmoK+iZqoT$C{9hZlVRfZSt3Ow1^-oyK3i3#r$#cp|c -blPL>zK$YgvdmqeuTfiun%n|HV5S(&4%Y)j;kT0<@hDkexqr!EcFLfXbEO3W+N4TZUmG!D#h!5xD_<V -iFH!69A{ne5Qx8EITZai3%tE)%>7LuwsjTh+qT0Xz>Yvln|mgZ&PW#(XEA#k(!7h-H~tztxyZ&FRqc^ -o3Fxiedy47q@XLjf)>OigD->V{Qs#>IY-j3dX(#jJat*EtI5<;1CyrvdBd%j%T{UrcXFiZ`m;?<*jz0 -)o*u|kC5fLC`%40ZL=y-8S7y%xbp;FvV=_wUV=$3HZ748Dmch6%)RqNE~4v|OjeZBh6W2yRjo3^Y2!A -pF-U6QaS%0B=oy%uOd&yS<w7RHVu0Fb)*UKxBBie%rLe2ESV{pn*oS#lq@LB4!F%KDeI;Ee@|LfXE8` -C$Gss1N?bT>X8a=joy_Q+VhR8f8Xvp$x1F2dUT>LO?*LQO7rub=akiBpTVKPWE$&z`yFB1JxiTPjz#| -xM-J%`Zm@ms1@y-VEm26SBNpi85zH1)%6KL{2-uUC8ZG!YIky&`Dl#(J9{m@bT1Via{ki1+sP>cOo(a -P18}g59m8dY0=^KCrDTYfBT2$NW2&#YpMpc!{<*Xp0DcHTJ^KJI|i|vR99O-jr|P#fE^b%WRMPV2>~) -1agN9af9lJsp!iS&5fB{u#-#~Oc~FLD2hRxxKc6&VzetfMkSX>WKkt<sYk;C&BRN`elku~I>DcWb~Tw -8YE)heW17;m!__^b&JC`R3mP|R9Nw^!OFp1DIgH26_3?TZ9!>qCKj7*Yo<<GJJ;e3%QF~<Gy*4@Twx{ -PXVpGWb?u8#9cTZJ;w`Ocjk)DRBn&7KJZI98P?dbaE$(!JA1ZTkn;>)tCZ$#7#;yCzB{n(02G@m@dT7 -(Xu)?juCrEa+X1f2ZOZ9IJpP5-W|(lr<h2rcOoWBD1xGDN6*^Ew#<$V1da(Sy*j|NF>M8`uujH>LtNk -QT~vE5DK{S2?-uQ3l<;A#^n8i|yQ~%94v>JrtzASwh6cBx+0`AuFnnN)P^7{CrSGWN$E}-@V}|LFv30 -+=({>`XR8%&rtq&?hM6`uaFPdK_2BkF$KQBJM?EzFPI}We;iBrE3kyW?qF4Qn^gBP>EbJqz6c^!ck$> -Jd4x??A4MO&N`58Kmp~w<#v>?{VultU9Af-`AO06(%)c5&AD-JI!Cz2I0|XQR000O897^_9ICo~<d<y -^o%O?N;8~^|SaA|NaUv_0~WN&gWa%FLKWpi|MFJX0bXfAMh?HX%u+c@&Oe+5tZ5PNGYkG5%H)L3NO>^ -5kd7D*P@Ls1B{McZs-Q6;H3*&z4ZZ-x(vlI=LX#bFPJbAUt^=f!z*m?(-ml6^0k(kiB<o_GEkemb4YI -ag#M(lTRYB63Z6u85v9g1{`-d_pxBIhoTu&6reVDkM4g6gv^n@9;$-qy`W*&-mDX70N$J=AZOjGMe&y -R=wbhYH>+r4oj*tm1050RI#IH#I22wp0Ru)Qr5Anal&)WWKOfB)I3ujPKzW5fv;Jjv_w7@dLkAD)fF) -yZI}B5{`N^Jvw}*+Drj-VSw)lGXh|nJajz5L@r_Cc+u&}9Bq;~rIqZ|kPUrQ<v&)mS%jEJOpH7lrKc0 -U`em{SIa`yV;o0B(WL?T)gnbYy!&0x7)4nV<+0Z3%`n?_9%AAWy-d76AWKEFilMVV<1T=ky8N~xw`k5 -0;_B!OM>NrGlXU35!@>RPZqNU79P$h0@?5cq%z&zUYI*qxGJ5Q!WE60sVJjfD|zheW4fqg;~`JVcP9) -POMNvw_HV!FLu5a2EouqD4W(lyEdR)ecwDTV=k(FYvfAo6~D9N=e{LS}w+94CI!K<cy_;x?~{mHFM}d -Y|JJUHbDv|3UF2`88}vU3o;^8uH(qT!e>C<mseC#`^LS$oC8UNH)rrmi44$@*8-d#9UmNHas^(PDq<a -mk9o%Rt;0vp2jRg(Nye`j0VEX@6F^IzWgs93v=G;@0ig9X-iIH9%BLh3;C%{WOVfP90%O#^=*)p19|< -u&bgS3KT4y33SOns!IR3dHnaF2Mq9m#;&?T)bK3+-Gq-A9!pE3qgVEA7%6QqoY@i#Wn<W`is*UWf~rP -RIqo4oI#(psdb^A`e28sBP=$&mmgB$zWQ$+QGNV~9<!1y9>F3Ms}JTc|jS(VeNT^wjG&AR%7ZOvu~O8 -wP%2qv!8dXEk82dh%2tV!}x1bv9VX2gskZj;Hd!YaM-C)XM7pIU9L0&PEkg7kh&NImuH{6~q_K;A>^O -wNV8m0)qwi_m8p7uH7gD!SaKsw~k)z2Tgi`tp0HWJ<Ps<i>caX)`&b=sZq5HRaLG#j)qbEP4K+CE^+s -IF`^b-s~*Qpnk?>lLK&E3fMAk2FlSY^|HZhISu+Wlf_EYkRxvOzWN~9G$jeNElmrW1RRv6GNhW}kBwf -X_X`h6uk(2}RGoepCEtZ~0DP%V?MP&{(6#9))VLm5FhJsVYs4pk(+sn&OMpp>m^}^S+>R4+!flO`ygL -)P8D&WEB)H4viiZ18yacd(y=epX+#uAAi1c}#pQWIc}YlQ6B_llVS5gVFw*2}VHO8L_GwnmZ>nK7^!1 -dSotCy`%^`e2E?ojljbx=O;Yttas{2;g9MIoq~7Otc7qEDgxxoGP~6l=@<vNJ##NF?945)ZFfK8rtbM -ciL;qBO7k_Ns60W<8}=v+~j)(e2wqXM|s|3c565c{-b+-!)GAlqhig1{+9=v2iPI+7%L!gLm9#<S1>u -Srw=H@pnF&mlFnKb6AO}9kWqbJiOrjC;O=HKK-HrdPG)bxK6apLDJ-f^4rS0d&G;WsvA<y&6i{gb=_* -v$mcXIP1m>!E5T!^g3fQgRM~q;wnM+x+ZJ^*6I?0VpP_v?K;06*7MrDo+_P2pg=0>Y`_uBvqp#Tmu&s -GV_Me=O_z=TtUQyFPo@+^e|89J^zk~#NVFbJyD9Q^_XM!}Yc68oDW*8awN5KlB)V860{qhBHe5Y@@j> -vbc70SFMj!%1o*cnmqa8v#gEhd9lk<>Gq&fLIo-0t}EvK_Pm#VOppF4UheB2%o-eXy3VTEfDxVt~Q-D -2?dTmym?-$pJnPH;OaSsRvN6@3t}##i*ZWfIIC0%>BE}e4LOuK0NV39gdnvIH6B?rcFnR-_K=^G4*Tc -T*Mp0bi;HO3X-JFiw@9BG&2(>CLFzaJz2;53$qYX?u;H7k#RQ6jmw^HN$K`i7hKYeW@P%S>V-?_&*E+ -j-K?CitD&XSn@w!c_IsNN43Cs^3y-P3Ywp|VmpC4`5DXjdZn+5(qvRyCk)*U}TINY#fSouqL4E%p&$6 -nkT=pD}4Y)T-iPtswH(w#<k>V9~a-bX!59J%;ThbJ$d9yD@T&0%d0b0RlW-wyfw`LmrX)CVDQ%XDptT -*HRiRjx?P3=vxzKa}iZiK+<?q1VB)nj&tlJ18YbWAWUL6MlV74v!9w$a2mnbI^$>v($(JCoZ-q+&s&0 -LrSBHX>7hjii`H5Pyy9C@RPUA-5ZoABQlMCzH7qW2c`1(fFQ_Sqpt(Sn+gek8|~bE&HVV#;@N5qfXFT -+{MJye4SIag3)T*sYlpptU0pd|Tkq;VXlr*B_CTPBg9j?u)()yh&L`J2Gu7CuZ6n@r|K&}fGv!7o4<q -$9hN8k<7|4e~aC9F}@OO6$F`?p8(mWN5?#sXg6W<RtlDTTc`j_Fs(bv#uo2zfA=(byc4&fE}k6{UaE$ -{oN?GYM#u6BH@!ba-5H(j98M~iqm;A8i}c1?OUT^o+};h<zX2KNN92}`jmG7f!IzumYSl4H}U2MnAa) -FKa&m}9&}PEWD-fJ@p$Wp8)P6llP69dA!?+s+Q=Z#y5lT!bALURuC8$Term<R*LJ0nM2BxgLq(uxdn_ -Gm+`8&mp6BPKo-qFNX!2Tq383k=H4_*lkmj9F}cv=^I6gTroq!==46SF?ylH*k-t?Q6n*C#NEDI2SWB -Cq!TvBn+a4PK%;tYk+GFzGYzX^AYcJo*em`XqQc_HdM{{kGOE0>?}8VI`bgRh4@SmerjeT%+#$*PU=( -28Es-qcl1;Q9g7nExKjHn$Of`>W=S(q8nkPMz#F)gZA5TWb;qeW&CS$HDCfhS{>m+%wA}_3N6SaE2q* -qJ@lM(M!1V|Ar@p{qPWq|7Ko9x3FxPM&h(Vsx83*2)@Wc_(`hn!ApKF}awI(v2lU0Ev3v$_ARp)VLCb -FB+C+}oRhUzKCLC*3R5bkB3#<8XvxYVYZb7l-Xc`D}lmyc&U$akf#a1cR5nBG32t{|!}#2=$yQ;J9H( -;C8v%mF<vow&b}@Hd7AC4ZyjXSixHyUO{3OQ?oo4sksMS;=N#t3dehCbKi*<l8&BJPb*Ev{x#Bz6=PT -HYA}cqlt(keBcpogXAjwU4;);;<0Lm~)vCz4k0~pbOq_`&o`j8yZPofKa@cD4x1v00TMF;gL3U>D*Fn -c!>7*hc@HC?{HG;*{-_AaspS(W4IO%QU=LSS8_vl^V6svOFjexM-ZQrJV(Lt|uAlM<VApr2;kN?krch -aa2$?P?nxjvJ8#&h5V06C-vaEcZMoZ@DnPJ%boIa_**TR$ir9fiY5@VvGkIKJ(-nSf@#se(eX!dTzC& -O{WqEtvKHe$YkK*uU)8B+MgSuJVcT7nRK8G%2){Xx1K>x*OZAo35>#=nN%4Z8KlsJkx+`ike8HklHjc -hMf^MNV+YQc+PR2dmGcDKxnxF;0-u3GIZ7@oJ2m@-fT`<&4jgOyboEr8Ucq>X)_@X>OfPJ_0#5X=moi -d3Hh8}Lx};;#Q#Dtl^NpYiWkOTLHaEzb<?ru!5f&3z91{R%eZlf)$LQ{#u2cz$yBo}3wFzHCalopSVJ -KlmztRy#&-TcwO88{jCx4)&C3qxH}N{$#ByqDvM&T;+D-=8u1bdgu2LPkO;Mnxunf#UgV-C7K2{k#cO -X)WOtT2N(o@kj+w`{uT<<D^J&zVGB4;b<=5f<=41gKL2zU@)!FD6xCq(YLsBUq3KaAvCtlp1>&x7&v| -C`eGP3gY?P)h>@6aWAK2ml;P_Ewz!zyVnS002J%0012T003}la4%nWWo~3|axZdaadl;LbaO9bWpZ?L -E^v8mkikyFFbsz8c?wf5n>2NIBo5QyfP`QgyCD>1t-D&ZPH_@o7sNyGgggmpnh7D{Q)<<pzu)I)%iv_ -WCtf1I!f^DhWu=OuP=YT3op)u0;+^{VQ%dbxa?sm4bO?ez2s`jC!XVh72-Z+zV?yU)y@C-z4OPY?>;u -;wmauD45XdRZ-4QG!e1Co=#Q1K+_UR*!!eFXrbHGxmn+A?HfQi#nllTDJY`Xv~59I<HD`4Q3IJ`qm&I -|2>C(Drfz2V5JRm@CcxkvVk1g#81)fzrvS{@@1(=^w>+h{zSgSR<xBsm<6#8}-?Wy5+5oI|EVD(VL-9 -;}Pc1`55o+31Je>h5ZFdw+MW*Vo%!0c<@`T;s|tb)g_uy2C(2sb7(6E9L1P8Je6Fb`Gciqw&deYK)a_ -f7y@!OFSh(t=aUbHC$dsS=}3At&52^2(h2#1#|TSP)h>@6aWAK2ml;P_ErGNiWpl0000IB0015U003} -la4%nWWo~3|axZdaadl;LbaO9bZ*6d4bS`jtWmHXX+b|5h>sJujVGWQOLvt$-?6B_8ZEXj1zz)M;$Tp -KGl_gcA()hC9KKe89Dg+20`S`>SC5y#EMSMv}Oj+scpjrK$AEkco4MFXzWD!Edqw$Gs1AFZ%ixrqU_{ -h*_o5EPb4HzO3RR!`ZqJtj|@4bU-kem^$Gq_`jSZm`5wmw3k%jZ`eD^hc@<k(o?J%Ym%L#+=&K4K)}U -8WY&gW5)4LogxBkLW51k5%nO4_T=JQ$tF<gAe@?t1pHwd}2N|j`ayB?R3nPNJiMSso8L8Zrs)j@n&i) -JAG1y^3YrhvrYK@@egb^aDB;IPptKvwQetc@QgR`3*R4Q%$m!+%+@C<SxUEfAQ7Mxx-N`sdxZi^oe05 -jw-<EW_R*gdc2QTx?Jo1>^UKJ1UMU*~()#=9b&SFL_38297E52@ml%C)%ln2H;8BJdvAQ)S&o?$-f7U -CO-dZeK21cXsg}@t5ri*gqeb(0M!r}_<bqLai7>QfYfcxw{b2vXh|7`G}BWN0cHN}~i^}eZ;dmjmHA2 -)vVK5-QFyT^-Ha(*n|ai_}$?m8;HWpr98TDdn1I<~9nRj*XLlb0kbUY*T6*hD=}?jksV%W$+6Zlm5!5 -M8^S2_C$06X>p<5CvJugpwPg%UQL<pTNA{9dd~NBr{w6hjVmC6TPeD&GoTPHE-vfTSKE$*iBwEK@+|8 -%te+;70FmOE+_7OZyeRxDjJs6ZJ_&Bg(j)C-ITbl#9H-%rE;mpXv&<M(DAQ~h{M);%}XUV?l8`SOZ5* ->O9KQH00008031s8RxePjlf4rF0DwpU03QGV0B~t=FJE?LZe(wAFLGsZb!BsOb1!3WZ)<5~b1ras-8^ -lN+s2vS_g7457%QbR)Aqhxw-9<s`V!y8jp42v1nxrOk|Qm>6sgXTD+`A2x8L(N!x@s&uA3A%R6x8EXX -csb{cVOxlH|hZe{|ZmHqD#nzSQ>Oe+Qq7i*K6UK5NU{vMSr7%9}!~wo$iQWw#Z5?W|U7USE~B={NN4z -caH|hqAp>ev6BKx2`QKtIFNJF|Ab_)9lopHhQ5fLC!OyH(kZ+WmbBT0KOOe3uaWhE;8ePH~XXe-j+Lk -aX~=SRav*%)LFF(w*;(LHPG~+SGF}}y_MNHk?JPBYK+y@LcQu*B=uFc-^0{}@}w?QXR3V$v*=q_)Ax& -u)*P=c6nxxncSdIgZlgcsdf%#-^!$&;G$xu@bi3Vg<)^F625T=a@+z|y(8}-MFe7;}@Z|@S?XAkx+H+ -WDtWiL_a#!X!3P=Llzwv`05(IF4r&+FLeL|4>!(QhtVp9SSk)@j~r}>R3w82gC#u%7W9SP(vtFx^ZR; -hhcl{skFLY1jb7pl+zVOQ2#9qx1sk_Y5uYM#}o0amvQwFLpyu%{-FMYGGw+Nx%QkDOYmtS;y`uMa3{O -t~#V@_uG>`yLQfKmoG!MN?PDlxeR@UCV&oH?=KMvp0<apj8EHko^c2_o?*(bTtF2t$HYdsaxHy;NeOh -&gN^viMX^k8W-cjodW$a&EAw*t8wQan~s3O!&}g=qdH`O1c75(1mYU`wE<=oz?iBzq)zBeDvYTWsCn7 -0Rx{Ao&B75pXZ64jK2KLhE#25)B)}i$eEbv-x5vGP$4=R20xg9H^VH@*o9=Nz{BZ%z3Qzz}bf)eB#w+ -d`+n!i4y=|@As>x#@Eb$ePcn%(c@q5l=5a4ydRhVkH_L=$~)Wv~d{UcS;msY)f^PMVLE5R2Ub(a<OWs -5pY&%SK}em@iC@eg2O-Ly_ZsYn44oF%w239uMa!ORF?za%V<swfNEzHCt&z{TkYuvRt}uu{OgHC@i=v -2BBPv4MGL$R3dT&{fU`n7(5yZx%||;6z}?GU?jQi~mgK9uIHf`X{%;1jA!oq}9vqfH!-RT><DEr( -dKdlbu@Hq_jE0fk@l#m@Vd3t~pviXj<S-bVIi4Kdm~6WP_Y+UJ@xKBEE$ynSAG9eqB?hDu`h9J>z_{) -*E0!(Jq0V-Cya=D7J0A!aoakUE@Du|J9&SQzE9<Iu`In}i*m6qadEIEIU`$}n1GZ#E5$}Glj|=sXRl% -O%E`4A_o`B7%N^eWZ6~G-+3WNTh;@b{FQd9g6;iAplX8Ao@>9Oe)xZy$pH7UAZPfu3D^1n1Kg!M|JEO -kM#Jyyts<EalG_O9uwf)c5s0PCP+2WjbQql?mzQ98or$&^BznjH!O_|WN5C<vJQ4(Hu~anj6Ks9{_?< -4wm}@n0C~v}unX+!HjHU=5XgehT1cdi&w@lW;#LbVMl`$AfWBcGtFh%%{G+zJC2mTMLQNR9cpTG|PI^ -z%Q4WrD=M&%i7<ouQOXh%3Fb6gClG}-OxLVTSd5Dt0<AhK?p>^MIWYo{&L8UL6R4wb`2~cxVy(Q4B0I -<uvghV=yJpiGOBPl*aed>p$|V-<UJk4D*!OTFZ4r@QC7{i=`5B9<|t{ETNolT(DgpC896TG_gTfBa&@ -6WjQnY|EDdJUJkS^fqCd1I%UzylR}f?0XJ!Wf`Q&ZkB{%mP^+#S7q`QH<-E>Sm8{neP-i6n~XV~LPP2 -~7$hFM6hb7Z(FA=k;2lnK^Pnum}C(JKWStC~ZthP8(z-0>PQ62&_IA0%Y2Ex`gOMoEum;Ip%~H8Tfcp -^}x$@K^3(GM5a8f2QLZBRSL0XT-trZ1DFQTy$yKa=@VXU~i#*4p8SH4vYY03+l9)%gAN7J!F}{Hc1Zy -HK!O5Xf=_u?=bJd5R4-`0DC3dSicQpF*`$fy0cr}A5<V6Xdo^m)pHs;szM^=>{XKfzBWzKK{*JeTTtV -uDBdZ~9;J0)vECwLUBwDj4%j$m3Qk`QRtZ<QF51kTV=a<~K`};M^i~Ypq@#+Bvu(yVaV#);*Fe@Qpl* -*VwBQ;4BxXoLLRmBAI17boVwmm#(r<zHt?dik+oLRmFOtlt20b;ncVFX@*a4OmW^gR&O**eM_>1`hRr -C8<Jx?PR(I^H_)Q@+ZN^&(z7=R*qDtdDOLz5Dk624z73C+0nfaDy?*-nRx7-d8R?G$Mz?By|l5vcs&a -d=4f2pT=?Vd2k5AoV;*(Q4~rHj5Bhgs>JN=`OWIj=8x!$z{Sl>>dfvQIXAfWuGpv9KUJmO;zUH2AaL; -YV2Flk6wAMu`8xB_^&-Q-siWF6F`<K<z;Tl7Sg3mSqS8iHR-~+3XwM=MF8J|pF&k9mZny|lyzQpg?1A -2?9R;AMjf78bUuKJ?2`v+f)F+e7_*5;Gi<2!)DAk02=aHR3fWY^0s{iS$k`B1DN2bPzCGo8LD;im7v6 -`v12Rsdn+og@Med>)F#<r_61*p|T)I$H+7k<oij3X@2Z1Zi&UKQYgn%SVDpv1*o%8@MK@!;hIVND;p8 -J46i^8-NxB+X05XW7>L9=~yk_giLur0?u&*}*5YcH*O-&rD#y+g!ha>5V|Xo2g5VKXpQUsYAl4eAd{$ -#Q7SJ%PdyChfS}=0gk%G6)C-4`o66Xxj{!M9sVPx^FCk*VpNm6=}Wx?uXaG5D8$t{!>}$;HmK9ZC#a= -Z5qApDv)QO7gWTtLc*7Qncss&g1-5r8ggJ$gXUdb5$Ax#nK=ghW&=a3s~fW;Qof)4dQMUWBZwVtm>Hg -|ejf=F0_zWe%nPCmVa)}N%6i2B{_P3f>Xfy5aNcS`|C;JSBT^WDv7=eCPE+dGS$v9qw)Ykkk36Iu5K% -&5>w;5|yGN|_{BuERK{|?@ODD5)-zImTDD%crdsR29qJv~B2Sc^9FyJy1``(ds*8fKzgSPqrut=mAnH -`9XD&U3s;*0wO^7E8*?Eh=&OtJczcP)X1GX)*zC(a9jHw42ew>9=L&|EW)!o->=Tc9T>YaAc)dn$Drb --*HPVf$dlb3Vq8lDXJRID`*^{vv+n6B54&@ddt$8=8rn`G9B8U(F$B+R*@(WlRDu2$Zd|!^{X)aXfKL -rZp<A6Rpp(XL&y)+8Q*sF~HyJ<ERG{X{Dbes>xt5-q29iLU03lB3|T&-HD$A<}1nfzGlP^*tpdi^&D& -*0TD^K3ndSjdbE0nN%W-V#d#-A9}<C|Bh^_!64ulHDBY7ZD=?#Wid;{o2X=<sA*rXy6q(_!+}rM@F^} -aaFdvho-};;^dD2f2rZDecCCWid@d>n_pxeuHMDk||G$!{m#pzHR2$TUmCQsS!QPX_EZncG|_tVAcF# -cIhb8$krPvXM_4<b{I$e$K1=B3TSN+f&XE+k-k6w*aZ=w{=_m86qY{CH>&SzT6DruN774$>CRy2;~6a -NB34u}{#Y^L(CECgDY(OE|ugC_cf)w=E~^d^&*?6W@?(DgmT(Af+END#XDJ`+mUF6`*enNLGVc9sCiH -@#J7HS9eE?M^R2D57<DxkI!cUEjz^m9{foRpj=MKCvaopxoZ=X9%rgTI8E%yc6r<x4R|9Kg9m(a-Ym_ -5VG<a!z(a7${{;H0RfDS!rPX08URrLqO;b&3^3SP7!xqnA^o)Lm=bZnv-Z2-r^J^%L#rq(XYWFAr|Kj -s7@-CdVKBb_$&hD|`Cr1zIUq?ALd_P?$Q1{w7#(fo@$2Z`HU&o#*@R;PP!mt=Mi2~~X(Upb{DeZ*heG -_FQ`Myq$?uR^C__JQ@ByzvbNqo5!Zm>%oR|~E&I9N`PVKM%V3xWyH<f(WU1T;MRj6&K#Rr*!oc^GyaQ -QiER*x(@OWOdu^@jN$;AaH-s&6HYpqD?pnF+T8Ltw2#Rx|~8R3d!N@xkz)=9*Vj`*LMb@?*Lb-`Xi5o -jY3etIxJoZ7-EyEmo+PBp4s3khU;h1YW)EV|FV^4h`4;L;o<|tpVowUO3z^)a@S69cYMk|V6tEIGqD( -(q7@#b9{Ym@YQzCcU6<Mg0LN<&k9dB9*LITEQ;c&3Y*^?<j4E{Xm>TLzw>mf*;R}D6=m;NrtS4_It}l -E3tk={1hB<Z%r)54hJ-{;R5V;DS$N2|T^jOYMwu;c%MP}-bE<+!)P>F3b(^{1Nppy|qLz<iRGiR5{<s -*|J^i511HaUV71Mim_4RI&ev&+B#J-GxtlTqw+E-Y+coM21O$!=eOK?xTr`xvBlG%i<6vCYMH5f*t_P -3wX#J|59HGYcggw|i(+aBsKQqXApuXhzG%L1fgqY4*ny{}Cq4&-IBM>x3K3hrnvk1I1nBC!`tvV4$;( -f!>0BGahnftbT+%u2=#u`ZDz1xx^f9Ns<H>j2jH!maX9%0{LA-hc9$!>j3>#Yc=6W-3=<b<O*S-cWNz -qyEuIGu4;_P`05CqQ-ar!6J`mk_?29t&xwZX<U~@<Tsk(N03q4QNg#9-c^(91C=&qKny#jEkIygE2M4 -&zsRLY@_vBn`yjmbUAsL%qiyznE9JLW>kZ#ktKK^WzAQj7x`0p>wCvOlR`7b>pv-pVr!p~%APJ@8{xy -JQ%gSQmclqjt@p!u^Ycm&^bE<b@Ao35r*@rsY#Y8`g!JG`rf9^t?ty!Hor|3)f}!n6G;Os|x#-rF>to -PUN3rc&J#CGN1(i65?YvNq@RlBDC%2R}8avi=DRY#XkgAy%S>{M%Y4vfPmx6zHcH;OE(SNd=YYKC_mu -C%8)sX92S-n7S=-b{T#)!PSWoLcR`JDCbv_vk>PeN1x$Ef<p-o0BpT(JJL7*mOx3xf7S4-Jhi*Q;ltW -Vuz|i!d&xjhlQp3m{MWcu^o5XHwOW$<K_=(U=K1veNk{WhWr2`^a<0j!=dxOHh84amz*#)Mby4@A)SK -^`{64%&=wYV&W<N{(t;-7LO(eHCb5QVwv@UqY&rEVes!Nq=pHSoj++8a&T0O`&X((KUuXMO~%2MK0_z -nzl`BdwX3bp-_E6sA^x=%zC-muHx!*=6aLG!^RN~h^1G2WbR=*jQ-XmU_VjHJg?;-*~yc#^9AV$f@v> -94C$$WBjo3mC547F;1`TuCXHd1W^c9M&_VlX3w@0mV&pwIW?GOb}-H{?9Y@gT4fhR_Lt4FwCzE)IGu= -nGv^#`_Ub>-k7Fg0^@4%&v{U5xlJydD3GY7>dT+^?t-ukx?76$ERK}X%|kc+@tP_SGPP!j^G`W;_gBp -1j=EsNcPwhW1nTe3Q4WOfC%UxkYkxm%A%_eloz|^!E6D_DzcmK}etS_~C-L3n%S!^rm&)*FMU4@|9R1 -sgvsUh@;YBjM3TP>@1dKA3P}#^xCxgqLMq9kPwp1T`)ds+Li6psFzv`Q7<niGVaVVIJs3&sP9X!X|BJ -h}U<Nm4K$+&{;!?}1J1D<^uKD0XT3__+>doZ9s>`TCU0(fcj%oH$yEzMvcZ+6(R9<PuAd}D7s2z%g?k -IA=fyT{k}WXh*-&L;oOuYdL17|TyA_}i?Ydpk?&iiswv7xas{K6hp-Qv=(kaC?2+>xqPAlf*hZS6jTy -SNk{d?)CA|n8KeKSfGNA4`rYEr_t*`jF9t<;cXKhc}D_Wc|A|C>x~CJvv54QiPx~W&#e-Lm|lnPjFef -mDw>v74i|-;tt3qb_<~ZM#TS+C#*-hElzoe5_Qe-YQtT{7H+y#B9U!`ciZ36v^d1Y2__v0`w<^L?2yG -lw?fWku$Tg(?QlRL0STmFkgLla;`|u*$>g49kkwFguwx6L>Nbw&~m|xP95v=*>5aDlV)>CH(0|nhUAf -Rdj_EMf)-h6@_8eG&ZUoG8gBccLM_XIh!4haHeS5PwVE6(VW=h;F%FJ3&qeewK9_59nb=dZ4w|5g3@) -pc?)rrEvYPc(0LOh443d*Z=p+eN%x95P~q3;IjsKb8)db2K-L;S_W+OVYp5+<8A)JlJyJ@+7%-E1mi; -hD0yrZ$Cg;I<HIdwMIWc$+-i_rVtE*DKBGhh|X{sxk9%XUuVIy&*Ua>jN%uEgs@MK`5=BiWCO(#hxQ< -_NNn=ByI6ID#j1oWXRZEH{R$&BpT0_ph2Izb1nJ@6)yM;umP?Evy;Z;QXR3WZ!!2d>wO?`{yg%oQUzr -Mayi$MYFNu69cagv`KyHLigPcU44Ud7)+gCwn<*WWVg26XV!<W0-CW7Iqi(tImNbKVD18V|l;g5PH?# -!q^9g<pDAJB)%<xzJS9A}Wh3t2tRqnx%Mn$G)U5G%g8KGkTTdwVQ)h8CXKo_d=lzLel!*9hb{?8|tTq -V`ep=!&Wsfr-OpziX7ZP9&qj{`{`(d@5-53GGgst@dwb`B4Wb$Y#GPia=Ka=EwI42w-vQjle)NgM$^0 -dXMX*JZ8giH|fnJB=@HC6Sa)w&>!NA_;BhVha+1b_h!kDO-KJ<5xU_)%otc|(ktd@N4p@$FrU`((;mu -(-YG!7cTr@uK_H#l`aG$lgrV0-Nd%qB4AX+IpvWw5yLKuy=#2{!II=!(L=(4hrp+K+eoEW_4^T@31QY --O00;maO7>RWKr%|_1ONc<4gdfm0001RX>c!Jc4cm4Z*nhkWpQ<7b98erWq4y{aCB*JZgVbhd8JoNbK -5o$zUx=)s0Yg#4KKZAriVmvCho*Z##Y;-4G}95F$u5$Xjwhvw|95>5~<gu)kPGz`1bYfL(}PW;_>eaL -ktPNrdUSfY?%Bw{7fdx%mgT$u5yIb*{F;S5Ho~;5!@Q?8=x!bk&?-jRII%#pfqLj_<~kDpHx22&Fa@Z -m0*g}`3Rqu%WpT{I}a+rdlj%dnA9*y>WWguR{r;guU|f3>NIw@79ucuF_}!#T!qkDdDCj1-F_8;>$el -251G5n&?9UKNm)?E%4{lEh2AOhne@9ft-MDK+ssfvGG%pc>;`tO@`BXFHECfd@}O}IkB`Qh`1m*rn6K -yXM)^&kuQ$(IergP9ZrzfkQMvgC4=jhRi5WaKdY;Hy&A&oP;lw9!tM8anT3K}q*uI6|pjMWYuAEKV<L -Ml}IE&YvJR6woU1}f40%E}dsGJ^Pnssjm5z4wK0%AV@7(nu2rh<ym&)Qpa=&<)<b;O#1_3e3YdR3yIT -_;^O#(C%{b8BBH1DY8nRGE!4(R1gW5E4+h*iuAN(1MM4IU9q|kMp-zv2azc?NuZy@ms0Dh_6%;Hahqo -oc+&a>z)@BvFNKb3i`OlsP3b(DZ<)#3bfEr<#~5oH~>^e7Aj71yb5v#WM4W!ZfXyLlcMSn_#Jx!p~Td -zO<Lbq9@%jM)m-S^?R}x%3Zf3<)VU}y1hpZPxrZD$6rd!Ypnsucoe0R0oFvC$+Y^19*#mLm=PA;4eeW -FGtcabX8)ec`8=z~KsoTq*L;U95>#hbHf$w9LEOid%;o<Wo5X(a6FqWo3SH&|<5eeHy43VTYkbF{C$3 -n$4<CYzHu+?g|CeI<|7qD_M6S=q4`QJYMI5H=b#`eYzX~CDS+@sQ+yeJKOBVw4f*1u7R=B?uw{A@;3^ -gHoVijQ&lG0KI)MIPV8d*1}59pd$nqb%wwMZF&)DnbZqjf~=vzz@ye^Ko|6)LJEI)3$u7Rb_XeRaDeo -#5(FIE=I2O!c|r_4EAh5fIsd(v%!XlahBOqh%C*e?wcFzK%t&VQ#Y#z<Z|wgY`RBH!Zb+FvCJ_N+3#E -70n(ibfim!rW>}~Lm^u8Z@@m}WIZAAA;7bTIOg0H*F_u6n;O}tFz7#d|KwZ;!{*OA!`-{;OBF;LscjT -sD2a(iQmS!h!U!!tt6cf%*YVFkV(iL2RncKDsk7@Ws{KCUtc3Md$7nlYW{<Jn}c<fZ~-w?g-bpuBzZp -RQ8S!JJ5-&mR<l(tJPdB0SU5SX-S4FT9-z^al0;$5jrk_e6GKqMiVUMDrrhZ}cq$VWwuL<*)^I=T%mt -#OB~J$h6H?+_JrqEo7tyYg778bDYR(WL8is$?V230m)DjbQL(*mkHJU5e?V3XxU-?py`~<ZeTY!&>|s -bQbGzYphnQ9N#;A5w`1_oEK_W$hlJOAl>pV)c4^Un)=R)kQ*0%fxncuBoM}bRYLP()_nI$Ia?GKIhBC -5HwIz(NWR@s(ps1i>>NHIZ9g>h$e{xj?`X-(>)5*zEmPap>n8mZq*a{R*ZHoI{4R`0(a)8!%I_dYyNT -H-Q}qqfOs$_nwmV_mU>m6a@)5Z1u7P$Kcqc4mX3M_!O6wp?QP~9EWxTSRdTjg)P)h>@6aWAK2ml;P_E -v}TS}u+R001Ws000~S003}la4%nWWo~3|axZdaadl;LbaO9gWo&RRaCx;?OK;;g5WeeIOxc5Nz!lo&7 -9f{hq>BXI#7K5~DHZ~4(J>R5R7om{YWTnJP$VTvvRxNNjl_@PJid8wW<&`2Ec2>hu#&=1F1UDtW%UG# -l~Nhlu%cvYs%I%7BuV(Tp+0LV!uPVEW-Zk={MNc?zt%cQ)=F-n<Yk(@GLcIK{*dQ_9zCp7QSjx3mres -YLpG(k6j=sTBgVffri~8NBw1~!(#&K60nvj0%@kb0ofIrdjH)jaz}GRGRyJoQVecze8n|hw*Gfs{<ox -+RD@;B5)P_{?WiU|IvSh->=a`9>BN(y7dn7$R{vMN7sxFOuQncLEfzAreoR;8E#1zxLz9dO<wuTI;1= -})AzQGVqXHExZ`+=EC380Ykm4P>IHefak7PZ+(0evx`A_t#^G-)&}lzinmgQfI>f^J#EXMcEJkn7`0o -vW2nNGNJhm9W*B!f%)}_D(JD98l_`m%d1U`8mA+Zow7>R)@vkDA`S{@yR7jJnv)<6A!^so#bTip?}$M -4eLs*8rR;WdeN}NLW_-AM;7&>z636yq{{GBRZumz=1V1)bXmBl=aOkLF^w9)ivqV!0e-ttQaE+!RE20 -6Dtkpk{K-XCZ)8>EXdAWo)EntE$;vd5TS<%$=0|U6$wD|+5(95-p>ECEE2`6w+fWa23a?tev}{0)O2b -8muSb$sKzv+?E1$9Ya7PcA@h7O?im~Fb0UPXdw3FRFZT?7VjZiafW$X)k651{6wv%wNmg$y0OEo`-k& -AN~S4wt_vkv(Bh=gJVqZ;2{Sph$wBWo^b5xIQYZIV7qF8a>e*Pn+)=4YVz)>C#mJ-7co{Qy70M`^_jg -HPDm^+}7}?fHMKhIV>7>|e!;kZ*#xyWx5c?1=3*<Z>W42jV41M?vM@w`H4)s26`?f+=cPL$^h3t=kJu -qhXzfi``Bp`wEUX=|#l5UQ!8Gfni(3(+0><rn7#P6JHoHrzgd%dlx)6-|ioy+4gU+v{5~Z;Q+@zIndR -DrExE_ynax(aH8~t86K@1`*scJuNa5K?MUwUacwxwgcUy4+r{lXn`5pqdT$5;^|c>C=#Tn(`m4$~mje -&G43QwxF%X}?7M<TtqMA8wXkg5X#$X5aGq%4byC7!&?-$p1_?i82{qT5mf0x~T{rutj;qrY?h9w?vS0 -_X8#IWRyn#Kay2qKUKf09`*4!9eirPMN>Qr3L9Yn8dR65o$_Ip9514j8SD!A8YTv!EW=CLv9e^`?O$l -zqQ3cFu%e5H*y>WK=HwJ3H=~1NIIGvJM=H*eZ=%WY(6IwcoDYkpm-%@%8F1h!q?Nm9;Od*uV&j>oQ%x -88UeNouxwz2T>j97qM7WjaFb-&2bj6#%%0EO-4uI0Su3i-pb)aT6B@xDs4vI7N0(&k+;B-G4)TS;=*m -ZcF@J+4<7(;AMfwlsn>8$?W1X$SKCrg-3-M=2WMmU!fJi>MOFC7z(tNFboJ{D7up01ILqv`#z#uKRb- -jPf%nJ(aiEg#P)h>@6aWAK2ml;P_ExQdM;K=T007+r0012T003}la4%nWWo~3|axZdaadl;LbaO9gZ* -OaJE^v8mk-=(%KoExS`xJw{m=JsbA%{W^g+hfkw-9uqV_af(?e3ZqLi+3-SB**A0bTvq`R3o>AP9t^& -z7vSQKj|4itmRKVqHlKM_sfvL1Xku7G%Ly1UWXileKh`g;E<Yz7H_)FtBIq=oks{d_q~{jv0O<79z_G -*+wf%Sr!Z6T66!X!JZTubW}iT^bv3*M<QU)FG=$H0ZZ5fV?(eNLKIX2U)a_z^>e~mk2d65qu@d(QZ9z -g)*JS3AQgDrl>tw%PF6`g*^vENwW`m2qj83`4Z6JYL&5`{7yYsNB`wh50_O9>7n;2tEU@j>(8hV8|B^ -wulUkwa=q&CfTY^SX&NF!qgQD)d9iUHiIjn5|a{a4EdvcwjnctG-7&i>nDQM9-6Aq4pG|jQD(=?b(pW -Sme{$YFD>yq>4Ik;c+uF_isgQxJnOdeX;)Lj=xuC#+Uj{A{3ni}C#&;381#2-*g0|XQR000O897^_9W -kA^Jx+VYs*ogoD9smFUaA|NaUv_0~WN&gWa%FLKWpi|MFKusRWo&aUaCz-L`*YhkdcXUxK;@Z+N@XUS -?Cz!7^Y(Ii+`6~B$;3`?rfEi^MabrvB6TEX$IYaFd%qVzJV@E;-Ao@-%_NpU-~;gC!}kU_nM@8E{g<6 -?yEfg_xh~s-|L{Kt2WOW>tKi|T)M`~%T~<`B>Mpg~HpM1uZdHB$XT9pMEbG*^zR`_(XMi3|po@cIv#p -y><yoh@VxtcZ4%G=4>1tKyMRlR7`evrOT4mRDkt=9W7OSFD(z1k>P0G!@2RB7`Sya$<qq7`_ncb>Ywr -jQexvsBv+gD9fH|pk6SE}u@D$kl+mBo33!-iQw%S`?2$=ew~Zg;Col~LKN&AHBVovXLE-DO>+>QrlW* ->&4?{^-#K^td}uSM}!6wp~9m=zCPOEqr<O^t<0YOU;DM?Ao-*t4ygwnC4%yxqAKW<8KbuO}$Y?ZD#Vm -YIj@wrt>#j-DF)+R|i~aTWr(CwXX8INq0>N6L^~HPb<B}I;{ba94Pp_)X=4-dC#ce=Xyo3-eyhfmcMQ -4u3pupQ}hmScn0fJ?>eXS^z>)>H60($y3l2Aha$`W8VmQeDfPB)?OGDH^kTCsyJDL)-C|ug8=#qN9K^ -0GO4EFc6I{R(!CJZ~DxjJwD;HSJ4z8;g6=39AFWRnw#hIyHRZ!1GyU5yAQAqo2*Ik-MKb@Vu{e9LJtL -IQC&w&KCS?8nwMOK#Cd8rw7|9tx9*Jwe0$+lbUmVTUPt(IZ%?_B}2uW)Ewu(|}A)t&qRq6VB6=XNcEL -HxO`D<onpE%hh-Iam*{#MqwU*B16vN8ff8VbQk1?kwUKt9pC8;KIe9vt}mafv*c}u*i!QfVt3}sdNbh -r5k}ZMzJq0ch!~7U&&r^F!iFYD&Q>8#4qf0)e&0#>bOSE&y(spD~lZ0ATE9X?<d@yLROLzEhp7Cag -S@e42n7~kpYQg5=+T4r;(J(#lbMjddw4IrZ3Z2)mj-All`t(NO`2775ig;D{yV7F@*IDA`=e%R;DZq@ -CY{^<*#(37gwRa@Yuc?oMQb-i7c2({|fl`Q*$5M6Y)jCdpq+)+#_Kx<MAQ*IZ?3aV_Q-7+Lz*tu&iD_ -|=xTHyV<<pSRB(p6bhS5l4)x$ck=6kN~}wiY?9*#c&^1;oK~-t<yuw?!zr;-A1GuJkQV03f#=Qp&;MT -%Cc?YjvmUHPM=4WHSC(`V|%I0gzQHgKfC$>J2cO6|jU`Y`$%37=4TE0Y;e@4bXOa@b1;ilXtIPoGnhz -o}ZnlV}nTq3Nrax=Q9)>PeEez<?DJ^ner!2c@1*8k@BZbd8cueK<X__$5QDxP9;FWCaYj?g_WM+{9nF -${rvsUXA3*tpHF@{IfL;&eSGlZ&97&#emz^f`04$xe_WiN{Oc<y|K_oJ2>(6#_Tc2~)jR*$ci%iYI5= -39S!>DO?EhbiPenDSVf_v;27~Hu=@*bQEIJSn&`#3oay{i*_yH~B_rN)G)=Qw0f(?%91gHWjsUW5%G= -}~^eC$iM@Y^s!f{W5+>O4nq$7-A67h77aL6&#)upfp~ee%ffGzG2?vMa&I4se({s3HiRzPaG3z=!R?n -f%jaI`)iOI-N8cc60?uO8;CJRnkxIcSym-YNJ8T$t{u>B8Xv!Wt%oZ3GAbqmJ0C<&o%5zQKYtoUTNGM -*dpz_|5H(xs9quQuXnH+MAEweNJZNMIe^v$tT0n3OBC`&g*y<ST5wN}x*Z6&HdSvxGB&8k!304og{B2 -}j%Bu?Z2-cxQ(1Ffbhr~-R67I78jailh`}96>Q4W_ZCU`6N7Ztr2~jhZpy*cTx1DaMQ-Aqn9Z01yWgy -Mh>N0Dyu4@Fs1a;ZTf3fXiL7Z|Cw{JlfFzLJHpkt}4nYyMm4ESES^uyD>ZfA}fGsQ*2ongj>k4HykKF -~dk?7ICJJ;m`|<Jhj-;ifQ{Yg}*a^Vho4!?k)8m`yTT4L|#z;^!)5B2FeCqK=+TrU6y}r+|<ttPvO^S -F=0eUEcxk+J$$$AKrBI>2!#utTLD|hGr_STm6^gvu3BK4zaa*oFwnTPEf|T3H?7)F;nUJ_j#S)(z<8L -+5(Tz7C554Ef&{(7z}mxHN533Im_RWub^%r;LwOY*FD=xtad~b0&{yhQ%}dA&d5v$Iexo!)(__U?fu% -o_gxFRizrv^)aQQA{BX|^jswET3Lw&d$;ut;$jRh2EyM=E;><v-Ul(9sr<1AA%OYm#@Rhr|c!{e+J>a -OImrQX>?8UaN^vyzSRgV?gvLP0TxcmHN>Qu(r#C5q`D)+UafWQNn%}Qit+?hY2V7F)Gex{1g_i|P23R -!Aa#{8c7X;uz$_IohXL-n$*9)RJH;l6|6!1yW_c{JR1jvc(ceF|E;!a5f<Zo{UA#Tet^*rU(xScHzV^ -J|zNc7E;P+WquPeJ9J`&+Z9G%Jze0&wE?=iz$oG^V!>um^)YBTkmfrEQUuD&@PIy>nYQ1wABxlc&(_a -{v_Tx!(V*TL-hlx$}hbfDvjoo5bK%|>kaiPX#iaUF{tBX^<<c8))nwORQIo=$Habm08jS;nDI=8fP^A -4ZaCu!`;CVit}CeM+s8OORM_IWJgq%A#O@v4l>cN+lid!Xb4`5j7~lp2bu><dIH;@o08*@yOk+4OW?( -hLYzC!KQSJ17(9{pr7ZGbHbUl#?V(|Eim5<{!OBjRMV_YH;c*pC@Kv7z!o9xPQO(r5O7bq`}*PUNI<~ -+^X*;J_CSb0kjV4$PU&!mSIn{+X#(5(Imoj;CEjT%{_FJKpe<Ur35nY=TluK@yJ07`tl>@C^gpi`MvA -Xu?h8d^dGf%$l)$c`q*(;aeq{lIa23ygNFR|QNNm?rx74P;m)HTg_GzDyoW$ILM7b!Hv00crN*`apm_ -niZmn4_j6Ya8%mHAoZt?KoU>9M0DWeaG1^*WiGfjK!0DeIxn@eEZat37xk`n77K7ni)GuqBf@DFD)%@ -dRJdt$`V%$)l)uhUYOqKiv3tAFF%jdS(dfGh(CSbw_TQtMT$~PB3>q3Vu#mo!h|UE;FyQCt{%MX@z<` -jr=G1V$losl@^5w^+gs{Y<c#nocS0g&NsJ3Ue<y$VvErg)p$0bngWwE+M#?~Uy0+^1xhRrnwun7K~%m -T$`(wtq1{KI&x+-hK*&5bt;K<3^<VOVoACW^YEaNODy4>n;T9yIuD*x=k41b~h&qUZt?%a#;K;X3mnB -A1%?mKz4~x-J7G$mET|rcTyk_Lz<vyUc+_wOoEkK(!`~8H~`6%Ozse*bOs9)}W0Y-hlnr(<U%#wJo!i -k4E$+&pAGVyYkM_sstsJQRt27huqC_r>WNgd&_vK9J>$U6NfSI;rV|rCeR5#R~W|v4p-$RunyGnaI4J -7OrCPzULy$w`E=8$7gYSuS%V`s;i3SgWJQa~?vgGEhky>zqBzf1SNxP_r%V(Nc1Cug?H+~i^SNP3KmP -cm2}GEHtn&nlK*HKUx8WQQ{_yJT!Aw0ckzM?IUQ}t_Ts*qa-GiwQA{BmMRhe-2s}BJ1<Bx{>^gJCTM^ -$u-MQ>&hSGT`-^B<!o)EC0O4@!)7;+GPQ24$q+_(e>fK_QYtP$Y{Oc8$vsl;K`-il*~kK7fJ9u_vWB+ -wPVYxuwM<*9(s&^@dC4xa(y>$ZWuPK2KwNb7lVJ)uy5lXVBpD7i?gDdrhP;z?E$yKfNYg=HsXDgrjg? -7Zii@);~3kyf~esDEr12c^Ifl3VO%}Dh}x(zVbk_7&Tt}b?h3-R9S@1v2r|i_8|vKFr4lW+9EW>8a+1 -4<F5iel2!IrlO7OLJ|=qdAJ}yWuuTssI)6+g>_0GU=-AM*yAff>f(jRgk3_*(Pkw8+@@EG_Uq1fm>}J -CT;t&)@WGQ~yewEI^0;$QWc7rivjNpT~Xhcyfy43Z$p`8~%a7bornUqHw!eE>!`91;UHD=NMCx+*^Yw -y=!{?jkM|CBh9U4H)=F%U}u{xe}$4jK5*iE~*x@ShnL=2Am2D`IE;ChVV1Lz>uHg)_wZP~37Bn_ay+i -Y{JuPj7Y|MS;J9Mpz{?X&{t^g#sTn3jHYqrb<>lN1;&*Ko97s26`e!2)m^(bcOjwp!8B)Kf7B|o*{)2 -r1rAjmAP@bvT@TD1Z<O4I}CmQpz<1r+ScUR2Gu3st+d)zxo(RF@j#IDdW~6R|6TH(0YoyMp4}nuovN) -nj#Ev$*@M-lE%^hi4)IR%5!8n#k00+<9s+)ID3$}P>bX($!^JjreQxhL+YA`T!tm7Kt`5MkTnJ(KY8* -inZV@!^<%bV~0w7DPPcG38qWQ4(Mq}cq0=TF0t|l`Vj9mv@wnm#+mUCe<nOagYbs*~&z03$FX7FH)g* -(wq74JgOee_%(ZFlGjhjVIw0dvkZ>_*yf9T;r*Wm{wJ4#<@n%?@<O5%)oMeN+}#YzYM&F0gE2TgrqYA -^3k>qcu;+4@NWQ)K_4vMbmE*@={^>MR85BMq~c@PBNBeLXwQ4g#S#3>tLn}ie#DVNG-u)V#0O9wFC`` -{2i%<tDf|pQ6No3%1C8Ic0%%3`6)ApKrOUqF(KHgY$JdmUq~|PiYO7EAxb$@RkfHi=ctc;a_$>4TcP1 -i-CSYNDHDk*z2pPYVPq|^?|*rJdZsSwfH7dtDH+4kf8Ah07s|9O&&Aa_f_B=1^#Am0RLn?<jH{ZMa2W -!+O98ZO-ht{oX7+73x$~fB%r2i!X$TZw^4PZ%BV+@|<9Az^qlRgtiN|u?p$qG@Y}6f{@V}lJx}Al*YJ -h_c=ye9m!H#5)tL)2h7QkEGao%}q`d<6WAXA=?##?<LVcv4$JWhApt!|R({=6<s!Nf##$;ilogvq9CJ -7=C@uC>v-u;CsLFhYSrVl5M##3JAfUHk3#oJ%qqLlyroH9mRy>+>NWFa-|YbJ8ZKyap?Z-NlP)k_CxH -Sw?!VWkpY&yQUyxpRZ`3-ie3H>{?5zfx^A7QSBy1=IB1q_D}jjgK95vJYZqxWl`njEl1HM8}$*u0ghI -YuF$%zvzA?Hr1ccls@&zQ6!l?ulYNSAgYyRuJmmnk#g+~;sHf>CZ&-JoYuEyRee~qX(`PREI&lm_>rk -xTIuP7t_f|a$=LvJ_nk1Ab?<kz0N?<?a=e#VS!)=Bp3=yo$%leK>M9envAaUwK4uYV%WoIodKTDo9<y -llmoZib~NRf)P++;=B)ytU!YKek!sdTrpA}MPyGgmn|+cdl-jAlU@%O*nLfMG9etKPkSp`QNZv+rTCN -=F?7bWi3JbOGVS&^3VEf~JROZIWq9ie8IKNHW3Y9E?!K{+xdAxcE7B;`u_AfGwDPMG?4`Mu1tY4t2-z -AVS?tv2wtS0HMyP<&1M%LB(jYiwzp7$NlLIUV2L-%o*ZCEVv=Ud^BPaeS&}TP^VdQ(fW}>a^chPhFW` -B`*B*xdLrP7az4XQ|E~Em2i7ehZHiZ_CIgM%>gF=rw(7RtflL5P+3r3B_2r-ZHu1O-k$22_e1ycI&G; -tXo;az*2>@I9Mys1l{03mGAUp0)X>qi$?I;#2(L-TA=4hA$7I)I~(-$Wvbc!Wgkw(ng81TIMrlt5C2M -pX~c|0pXpjUN+Y3MWv2kyBBo?FzrCRMM25+v!!b&KE*QeoFLw@R~FnU!sgwsWz*bs!hW8FY&rf;JUv_ -8D^Be1(U{l7~~^b{aN^<~bOw>?#qe7C&jYdf_pnQ1ap@+DZ5k*~(hY9wF{El%3;B%ouV+J`<#xOUzHK -fa5SBmD#y2qg*}g(d9hJ<l$tdCQxrMRqwuiIE(QDgfeUQKm^9MO31EsN8Gj)wqP5<11J->Fb1fCd_{W -f4^Nu>!?BwDZW025Qc^1%7|6!PAgm|z&-nby#GS|Q(aFXvlpJnIU3QDM5t-cYNP#be#YMU=`P@3wBR$ -d>m;L%ytA(x3ROcTF2+dK<{;+MLyvBip4EQleAJ&u4^!3Z%f9`>N@mb+;=8u8UHw({sIER6f{&-vR!N -@0GIwO_H^bcjz$7x{w_JTB0HjO3D3a7Eh@1<-Sdn<Mr^oH5MQLMyU1d|TnVTzJa*ky*9DAJF_kYc2Qu -0<QxsxYWKnr$j@C>9;3at@yU61PO0YRLJ=1j<H}qDn3XK17s@Af_KN^9`ZI>p|WOUW~}6L5`mLtqs|w -bg0E!9pF$nVH1Z$FW$^J(`(p<m@b6h9CaH5|FFkrs@c(@<$8B<2?fn2E6wq+G;pJIMfCue0Ca{P(2$c -cNGR+5bwV7-TPOyH3LM4UMh(wHB?oM20~LspjJb;AFO<{K>dAwaz@_<avuy)7lBgiY3$I=Yy9-n1rTt -SvHTEE~%H(Z(pn};=GSp+3`#-|oopr&_pd1yfIfr9;%n8MxSe^rgRmYTRG$>B{6eUzZuLqctC+_Uw)8 -rcHLu@JvJOxS1aRxM}_KhV$%T#C~f?Qx{(c1+denf#-mcBasAyzZSP7=il#KBnQ<dbulnZngGB}uz-< -aruE>NC^BWIh@9J#?c|R~IB5?Ga8swKTMN$r%t2p9NOWVWtI8q4_;@{C)uMwmW}&IZM(XhjC^EN*ke; -7j@F<vYfEIneI=wN6QzqV2;VGcAySdoL${J^+g+P*ffs0viLvAaX=&vS~qIIjRxfvU7Q4tE>X~&XgB~ -uA_wNsYFJ@#Y49@~OCYjEBqXs|khOYqI-;^VQ_73=S|dg<;3$?h%W$ij^HhOPI2N}L3FZ%$J?QOA9?+ -66o8VJJFfUT@Ew)VF*jG%JokdB!;Rn*`@xu%RI6vNXp-}~qGv33e6efHc93}uA7h<1t8V2f}n_WjySj -20&Yk||Iv1J;Mjp;ldoF|Vbau)ySXR19xN$gx;kT8%i^Lt2>^TD2BE(EOXk%_Gn<jIOJ3h0L)!#Y&IV -5Z^`r799#bG~Am-V^yroKZaumEiaw+dXC|nN7p=>^i=OPTvkTy5qbQT0i$VSL%L-G>D;k<L4X(pm>t{ -)6vb%%@O4++Ea&lAi9I76$4{ZqSXnA^-w*}bJOV&b&8k)(>)_Q-keFHAd#Fq3yHxSGVY&b;sTubS?!T -p?~Od#94K^%fc-RmuaP6pV=Xqo0qe7bi6QM(`J2+H>_{0o>X9a9DRBjyEy4;;_R)YwCDVY=<&_EWI>t -pv4;CPlcMcl~FIFhJRK39~3~qo0lDlRtf${+mz?36KF;~JQViEOMaW3+BBr%x^5`{dH$sb;wp%dh%SI -=JtN5l}%USJJWf+QTq)Fch|ic!elP61893Iie@la<G#k+8%nt2i`~#RBV)^zWQJ;j$@!G<2$xB8C5PI -xrLDAUKn0JnwyYoIH+`<v3K#lxqXV$CJtZ>@RZW4B1~~O>rtSAZ}o%&!DhF_a8C@(hnpB8~A_IcAoDg -6EHEkqw`+U4WnC3oEsy&<>u<PCBm<66Z3oO1Wm&+>^m3AxFfB4N+g9_j{y!JdpqQG^{hNv0RuoTP^@~ -SM%885-fc(8L+T*nx}-{G5|78@QGnwX-L2Jy4&-ek9=T+|@;OxRw|Fra5f*D&>r#uOkH8OtWLZg94lN -exjzA=hEr~ioHF~oJeLvVe_ZB^tPfv$9H0M?@ft$$oy=a>&hgW8hdTZi<td#G>GtRksXf7`$U23^BOx -{qqg~J`0Sp2SKN4;Dkm8zFJibUEHu;ei*?*fcr^7Q*Y8L}WG)34Ee)*y@9tVH$V*79?VZ?JRRnM&`h$ -SQWy11!$Sf}bmG&t?F>rK?2T$$WLTWU8K5w;-d=TYOOQf#u#q0W)7NgCzu9(lm*40&fA<0f?96M7${s -ls;a=2_wIkn#RY5#~tY29<j_Yyf=D+-r3tGQ`K1@n+`V=&|Acb&gOZnpbfY1Ztm(cgB+KVbB&j9Kd;Q -s<(Mhn-_HDe2>UY~9HBy({b<K&E)t6!u9Sl#?pDggxogvL2E7;7mwbIBNxYoEUKByeEt2YI&Vo5wlN@ -ew;7BfpI-|2=bZC)%fE1Ft1_ZEm+T!(ww;24w5C|WUK!1q?$~{Fu-l(Hqf}30z{tFw%y~hAgVRO$i*Z -Un35cJ9Ey{U7`j?+`UB<4OpSaMfw7ORsX%;(_jg^`@|&l!^saEnM&48;j6^iBy`NxxX23DYhXc<7^FT -*ICxy-R80TyEwT3thQIAcwsg1tyW+x<w}B>6QV5Lr<eqB82ZXEVC^Tkl&6bCPg3b&h0h3ie?D&=97<u -Pw_8Z12<Bw0tF~?R~^pPiDZkuK!<C+mIcB1C9TCNp%T=m^deQ?KK>TT?8)QDL6WG0@S#31UU5|P0Soo -gOM<oJ^HZ293~gW2bpqLj{D;e>;SCRrU1rwj!AHZgB@M`x7yyUk3*^39E*}`#Z|sE!(Abh9_c5BUJRE -)T#%vR6c@qTbKs}nFvxF|V$*+<1=bZ98^$_sBrC~3ZO?E@06h}NM_sb<aNGY!ho}SCabd`7D(gk;B&f -x(NO1Z!|H*sUM&-uO`WJo3pxuk68{vKBkDKMm=^?qGo`Z8+QCNS$R^LQS)3*(hdHK-Nm4RH*f+;JIQ@ -k5DLX$OQIfV61}18|?)gO&H-UhGSBo0B@kTtd_mgBw;djBC^`usB?GmAhbeTgp>UDchX}ga?KB?7KBj ->N4ldd-}D(;6H%IHH#LONmRz=Uu%bJ4k$wHh56Q9yL|F15W{OsUz$+l{LLRH;j%NFLF{@bL0_1Ypf*X -K&!V6uAHdwNl6V*C$PJ9y2FA!oWQz@EpAx@?EzsR)yyq8CZjv$tUoM19oVZ!j6nICDEM~ti>24;3oa? -g7rtu~+mlB$Tz?`xI>TbI;ss;@VkKb0|utJ(5GnAq{{YY4=WjAhBw3n2^pEa#bz!7$-PP~~F)OW+tfL -)c5%8H1&RV*WVtjJuAfMK0`kZWRn!)$=hT<O~zj7DV5#SXbhxB+D?j_p;?sl{aSI9|%H*61nEjuZ=D^ -_ug&T+J}6F(?fWF)SA7Tpv%?#!|2LCo8OH>LI0;1u}b8)~!ywba2p_QB3NA6Ff?;a7B%+xy6gDFMe=% -9A`lB5@jY_MV7Xo8sBKIDrVN4BgvWEnJkZTOomm60aa0|L>G^I#sST3TuVGV9cG_!RExwL{I+gWtH*t -DvD5n4nbDo9Zdjf&GM!9;qT(vU2@I__9;cm`ShOuxS7dPtv(Ia}Tnkhblx+vY;3g5mCNt$<k{2`pSSH -N(b%#*RnXu2Hn&qDlSS-%#x{N`A@*LjtF{cGvI-uwx0WoJm1^*VcJKq7(6CGuCw0*{(z4tcapG9j}o` -nUFiJN^7f9V93NgZr3)e!gXsw|LlHO1BGVm^@?RD#zf^hUei|IFzS6;$d7I-EJ#($0+|oPF5uhE_d%2 -uuI)Ar69)IlKY7tTLy$EtlBIn?Ej>!zR7MInw&dU8$<B{#`fq|1Z}6hQ%rd#R6U_!+EQiz{_{FI8sMR -N~1~p8S9FG3oA*!dGgF0+K6sDmg|51dRhrD_4!{%Isd~5XZZdj3f$wpT?-z05~Z=*8|wGmZxj^LJxL? -<QMC4^?g2vSZ+I$tKMw0jH@Yk-3Tq4jYrb&kh|a&EIJEFcp^ywU^p1Jy+6kzbb98>qmvZJARIauzueB -XtyBxVi)Z9&NEXGL~XYC_ruD1ay`4^|}!BKp#`Mt4)9zY>|3k9>rTRPf729>15{B7pshZvnZ;QL9Gx8 -ZFEBX_skTBH00eM5UVOctIqwBC7gDjBVs?*6s}w7Sgj8U(xZ0h<_E9OH%LpBfuqw#D9IPR6hwS~s-iq -@F#eFtY(bw0=lAzQn}eZo#>h#lQ2VNAhwFc_j>(p+n=8N-6v^q+`_L>4)A==(zPf1}`xo3`;Ls==k`X -nK(AgD+nar(3{ptCt)6P8+%NOLPbjbiC=1Cy+C~BnDGHQlb}@+PDyXqX-%$JU}10srl>HSr#I+PSiAR -9fxXj@0<2H6;Amb7=Oy;1s&<=mO<n-Lk)r72k_cx=S?+d|iX4*YK&9y|2~AP*(n+2G0MvM=6zcuK60y -5Jmp6itBj3II%GT}|!5&1$%}psIYzF^IQSj%z{Yx<b?^Z1vm9yDrFwR_W#qA(2I19ko&W=gyteHqIzz -1jM61vDWq3J^Q8(_zp+$T6_cU@^NoZ^MfA!v}(wPFIDNNQ#;Q*!WRA%OIS0hh9d4w_EZ0f8a}9Inlav -Ue|Vy<8%TlpN>!Te9n{pc@YR6GS!-#ii+yYX)&InJ{B$=^d(54s0t5Y?J#^UJB&ZbMA38uFDxl3J^;} -xlp5-jJJ3NCp+m3pp?NRJzd$YEr<&4P&Xe@2fSA>4IF4QAI=CIdQVO=4m@~$&3@1W@6_1?I($#mec-z -<^4SC0eIL$Vkm1X6LYTujYKQ3Z<kx_$1804lF?4f@352+U!vkU7cifW$U3A+M!)V$bayhCto<w&Ju;Q -dA{4gC-^MSm%p|DV|LQ4N5HBl*X;?Z6$OgO8{!INDBZzD>A%qfTQx)%qSv#f3q+}TRNlLtGrS=>YCGY -5D)9W(3jJO;n>t?iKEX6iF?es{gTq~QTf^X(90wmVD=wz9L`;JIyK!=fV^Z<!sh##?L_Qt8-ziBX7Nm -uv!2(YNoJVIb7_-XXWM@nxpWBM-7i96sy!@o)Ru|4t>wsZ9rn6{@~dt1gvA1xWF{sh-vpyhCVMhr-gb -*dV}Tn@0Cliq(u%ejE%cL>veZWouA?drH@x%2vN<`<1Rp+3InaQhJ`AOEAK}LZSgH4KI=dl`C71NmZk -%gkhXDDa6RqiXlfuObEO%1H#X&iT|^=N9I1`!b6oZroCq&48Jv%|6zy=5(Ntl3>@D;D#KV4sXYA3CtL -kK0%QOHQ|>?tJyoS7J^c3J=$nu9i>Kk0)3alNia+9x`&FY>>9*cRcd8E!cx<)t<ES(Q)Z+tpE(y1mYG -WpxYXwD@C35h|_rW0BXUieFVBF7&Fo`jtT8PSt%Z%gH|N8_#@FR-Gu0kdtZy7mrEGD*w3n!U{++30eX -JZ60WyHA?$LcYfA2zr?dM|#M84~5_?>S%LG&?u%0*m)~{4TdCoh3Mr4yKOk8vSB$im^F!-{?}KvM#G5 -D&Y_0bb25`E4~ba>~_)TJt2(D@&*s5US>PIuAE?T@}ylh*S+AyuVV7-hCLwrXj8bEZ!gW#iZ3eJ> -wH#4du^hO6`Gg%<ZW$dC@E)ntkB-b5!BOTAJV^oFSS!a)+*P_|bD~#CmYU@&i#aeUHm4#>S_5`XnXQ% -K!k|*DP^S#MLD0PQ#;l=r)|J$0`l*Q6z7utQ3lD$Rcs;X~bK`*pT6VA|;i$|;o6DR{aXEHMa9=Hrp#x -9qQMK53`+u~|Ac=U_XNcl<zCwS_F>PIBuA&~2>aSbsabdP;R(mL2~PP&PgeiC0d;<$_kJ-_~-UYpAS< -z9><_B^5LCOxDPTMX&W?<O2+<XH2sZYG{&Y=1%v=T64mN7izWs@7QCR>kdCnEd_i@ubn@qKR*UN}Sg> -&w7PF@&P>e-t&yC7<qPX9Q*y=%UFuhdoyinqDx^6uYZ51!n=648aNQ{FLc0c3ed{17>V8&Du>aq?2t` -bX+N-VsrEuTt&!c~MJ(pJsCW_X#CwG8NF#T-B=SW(5N+}t9$wu9sSb_fBt|r2?IUyj$*Sj_naerp0EE -N9<Qn*Yd-!kC!Cbwe`v$VorkB`kH#)0L2l-&<BmNz!J}1=LOXgeWg}G_)vferJE{{|4(SAvVi!hq;d$ -I~XFF*bgNW01H+FA#{)%4}ChUY$3KZb7_!Xy7Zg#cSh>0QLci@*K;$#0;Dy^l{h4WdQzkV|;=r!71Tz -`Z|vee`Umj)08=F&;gAlEMZ@b|Sk#a-6|*{J|iH*$rjyH32m1W5qMGC@jzhHoR&{b3>83#McRsD>in! -ixda|XXH3!i7-van3w-zU>}#ElI3o*ahqb)-Dh`3e^&s}pVz6m+067cb+*fxhf6LwaH(=|0Eg;N_`)< -?K#K9Klo10zz-sYnkaNv1yDw0E!b#F<kATA?Uv0esDUFdC_3Y@p;CDZ-90xowD<rk+qAn?PHT>?dLz_ -k?0o=UEQPDeR(5NqHywt8G2eu6VAu!>GBjC_;G5l&cOvfKX<-l9I@8vTL+9f*Ov?!I*9PfhBU|YF|AR --dkPZ~)7Lu7F8G2_KY9qdf3c?2pmov~pa&KJYeTr!8@g|8&{p~-z)1s)A%J{FAunH8Q%&_j<0JaAu+$ -XNBJS9b4-KJuHKn^xOfXQ;)1PR^3W<H`2KN_^xJq4*+@BGoy+L!92>;PG~D9GriZs_{F>?QJ(+eRAm( ->{+2|F_m8FTej`5c$l#86SBMdB0RJZvlV~*9{|or0ThXOziKb-qr`=QRbd%x5;koj!;<h%Ve%DSPmu= -;(RJGe5$^&>15byJ9e;8%jEAp10fvZ9Iee9Q=VXV|ttTdrR`?;YIc81ag*2<ny5?gi7@aRAtX4E8Nm? -$GON}t(-=UgFC(Eg4drH}g!J@5?o;~~SACJD_BuIEfY%zdgWCnDVoNBG!zEg)!zkB-3U*SRdWb?2cob -7!-<yVNFy|DYK?Y+ix2!^+(FjeTc$FU#ex9YpckAr(<LjoFd`p0RK>ILT-iQ4y>2l2(k38BOsLijRz= -^}+Lz8f9t_kXLQp0W)6Ylez^%Ike7ZellW;@6#7X6oKdMBY0}XCC6w<j83QPmbLJ#JlUdOw}87*mRDk -+GHp9#x<Y*<U15|eA6H*ZRXgEq<wqu^<9}Hqzll`9gE^2UOGNkr~NA_SnUKw$#|gp)297l@${iPwL!K -1KAF-O0QAzo3Gs|5Y*+F5$uJV_*08z4&KNuhqpGZ13;O?0P)h>@6aWAK2ml;P_Er)+-hpcY006fF001 -BW003}la4%nWWo~3|axZdaadl;LbaO9oVPk7yXJvCPaCv1?J#XVM4Bh=Jh~6N(4YYI%5Zv6}+ASyy#b -RP2isU2Zr2h9uIc||$xCs1skL081G$hU-lT_6&_~=QXOCABgNV32_G3;D-yg2qHa~fQx9R<o0Fgi(5t -m59lr)V++IwDX8q}(H0cppWBDIGz5NF@jtH(6LWRaLkL<#q?fM5xWkA<*vCtiX_uuDo5ZjWL^MU4hye -qfd;!{l;zJX`sQj*Mxn7mv73sKBUeCshjN*{8T{O(!6uq*8kHrGiZ?^vpXY;3!si02FDn4m>^<@B914 -JvFmj)m*?%sYo0QpRx>V41EV0H(L>GncSP0HF3rR)``YKy;m5fSQN%eVUxW#IiCPb2)gJ@OqD3*<&qb -TfqcT^#mFzgnMep&jt!ibgxnV0dMjd%iUs^UZ7m{tjSl{d1tUvEyH{)&1ZRO+EM*H4(DOb5AD53Hj|4 -{T!KV1qdRXB}@eg#a2KL4)%0Z>Z=1QY-O00;maO7>Prw^6HEApiiSb^rh%0001RX>c!Jc4cm4Z*nhkW -pQ<7b98erb7gaLX>V?GE^vA6J!^B@IFjG}E3nE3ODUO7Cb`|LYLqI+@$BR-ud|)K+sdXST7qnjDN;j_ -cC=I3-+ui92!NF1%-*wZR8td~1R6lU(B0^U27|#~rGIX;sZC<EF<Dudy}!qwy}k3R%&2v_Y;vtORe6& -wwNa@$<1VVa_(?BnRhMd=7U`u{X|YrrU75_(%ILbzic4s}s7hnpfNHoX%j-;=u}YizYK(wC!=IyMZvg -Yk)|;}bRcY)uvvptVY_0cJRk>D+GS6XXoVSvf@2aJ)^zvo4sJYEDtu^*gUhk#O>vWIbC$p@mbycMKtf -{ly0jkSck=EIbo|(FW6-euJnQoxDYxd*$`THY&W?R5=?AzHzYO=))A0ZfNu_)J@w6<;Dq?--EA1g*ko -?VPpQ{_LESwUYmX=SwQNjS4zhkFV>r-IUBdil?3HKxbh_NTO(Vc*#jFv2hN=ekN4^-O@xV5L9VPHSCV -YWrrqH<EGn=Y`$`c;=yxubSdoFHed^xr8;GR8=W}j!VF5QNPrkH?NADG|!f2iz~fO`O$e<zDbMisa|F -k(9;|E3TEQQT<TTY<n@dmj@2?VfX2lY{k^yMK&{FO=AUn|VOHp+x&l@ht4iz7o6^YN*h*cbi|gC8S}G -<*c9G>-y_GS6({;-SL!}<5qWn3Xs2`p_dQ9_udGf>2hu7z`)03C4PEU@{XRlwqd3DZfanH`qkIrB5v- -gz-D(a<BYV4D(U8||nx-o$KWlLfD!@aMXMcq{G+vC*eSB24q$&gc9rcVM^zH15Z-<_VH@q`?DbqX?M_ -~E6lnSF_gfF0Y%y12=zvY3hFwl4}@SIqSM3}wEoHT2Hx15@T8SwYWA-)6;fc2O?3{J>n5O%4yXo79-F -EwJph-p+uLW_iXq1o{J-SGoc`t3_TeuE#)Tq&ldm+pBDG1z$i5pe6$@NEeHy0@Z+TQ*{a0D^SPOdY$Z -LEBu;l^0Y>lQq!p#z}%jEH<-}q8#~U7#!*vJDha5(6;Q81b+QK>r0;A^T5N9*kS;<ensO)_(*8YGqMF -+WD9Qi~url@3-H3++?fFu}4Avk4pmjHZw@sDdN~J#ufL*c-Hdb|djqgAgmWUf%1!MY3gTmP4*&=hw9C -21(fd+HEQR8Dv+aN3CPnvn6UaeHhG_?(I1HpB`>$KXAvH4crW_hkIG$RBcmcUIQv#K%JXWp)RZkM`8U -yxuSl5l{xKyStgvlobtTd-~C`bW=q_K(Kl{twg(Vp0TDly$H)HPp#vqHc7Rt+pdO9JU%d*cq%3q`z3` -VTahVJ&Xv)Uc(NX*oFjkbiai&qTQmW9%~IF8H;B&8udU(nhox^oxaiF&{yzws@LU>R?yfmOM#k1CP8Z -g@t>#@-mSRFDys~=OK-|-snQ%69T&sEkmWqYFPn-e32jn*mQb?-pw0-`RDHZAVHkp{xEUeSMyr9YYcm -`n!EP)^d?F~=4S--D2e3ss>>m-RkI>-L-kwK~@O_{OXn%7!likju-)(+(>wxzl_OurgNTV)Fuu7cqg} -fvH6#-0mZe;1fe}!JaTSVf8UZjoDpg~)0!E->h_{%=1@(q{;dViume)>Xk-13FGsB{V~&-|ejm<6!S= -i9^yaU{dC=`+3+U^;k_fKnI^?6`vw&g0{!o%~LHI%3`#B6xAnA%bajiQCcWU!x>Q#U6dJ2(t#!o9uH| -Ozb92du%1IW_4QOY>m!WXzG}aC;EWfQ=lYhdQ`WkvYrIK;Vki)1*1NkzCtw2=ZKK`+){-F>t&-+=up1 -ECI$;cl`A0TZOc%w%OJ<VI2IzxGj6t^!OJCSb`K!v_(ck~JBV<ta-D)um!Q;CvnhG!D68x;1Djk~A`r -{E#`SHs&>lSKrBm49O><#zN=4nS%t06e{lUr{C0<9|nAD;%H5g56#4_?kV`%eHS1=~HJhYCyyv!D3P$ -uBypj4=Id6O13xI1NIJb=(`0W;CG3O5JX_(=u9L<Ns-R^mOSNDbJiZ$N!|;L;kLkBg?(?WBo|%_hl=V -}h3A_;G_xxuMu|9|!iu;8W24fjVx$J}GL@7C5!0Sfb`Y-Fa2l8|(Q2z|HmvFd*8bN`OXy0DoXKWyNE# -y_#C-^(Lz_ptREHG$Msfb9qS|L)xAjBhF!e+(y8v6tx6X<2D2J1)BEY=<N8_E48>vaZ?~atRNrEPAG| -hysDkamuJ@q4+sDPqduJf@Ju?vNMvTfl<fRtFr*ks6XJ-AvLdn)gOEYAVt5)IA(*Zs!H!v-mx?T4;;p -f|MSeKo&O`#&KkJ{6M`HUm;qJo$w;zmx4x*Q0r*>$2kJX^5SI@j&(gW4Op3^*Hl4Iu$8Tg`iN_dFA0c -;$%_$Aaq-~<BoaSI_dA3;Bm@4xvN638f66`2G}yW=p2!(4rpgyWH4yaWtbA9*OVXxD(V={B=-^d+hV2 -rj3oi*&8k@1`CA_juBW*Ym3JrS@zCD+aD#fd4T8D<ub2NuqS{oc?XKB(IX~Te6tJxLbl_>H$L+&Lnng -F809;NARl*R&}ver#~F4KYaJ(pIG9c%{6%H&P4KcF7CxRj&*)b=>4*c0V04JHyFJ^Z@+X~W}xKAQp07 -T1~0ar(ii=05P^uYKyM8L+<7=R7!1(lXd!+EK|9p^UR!c$K`w^R9*v1TN1fIl*&@iM3)*Y!KtFx@B!) -feCHxO5_<4ICYJTKBLwso>9*`HKVx%-s=`V@cpaE!VErLL)6=)JtpJ`{wAv@xuPEWho9@K`t`Jrd8vg -a=&4};(U8ABa_f}R*l9U`Nn6Hf0wwDl)+AA<F^zbD1cMC3$TtFmNkXbn~YZ1(lyD%Obsp}=U0*5|aP4 -Rbi@Xi-CI(}Qa^{$D@0e}Jmh>3T}DZl7ZCpls?XBENmgKIRmaQTuSAtGJznQlh8ZOamdTw8tYpd?=C6 -8S0KpiNk!8t$C>n^uz#RpjB)Gg9x+{%*1*0__@OPF&f@TrE9G>3O&JVvOVEd2?m2}3;G<IB36?=>zM3 -fZ~b77fY~-%Rq5p#jYV&F00bnsJ0$j{>vnsUfn>wGkgqlp+_R`7v+L(%QEs-w(O%H>f%-uHv7JA$bGS -0cE3wJIrkwO6-pnowG;1Prndd+O7&2SSO#lcXB<W_Oi)DlrW<76^DK-B1c=9P+MO|$}47i>P4*HTw3B -+wc@0fCN4c3+^(R5ybeMLJwTJd@r0O1g`8uo^i`@_lVv?)*$=&#X^IaTRx0wS~=vf(<DIWm7o^a1Ua> -tg6*VWgf5U#-*6tt9shmS$kh$C2z|ryYJ)gA-V-MoaORF6=KJ6AZ@AQ<&nH4!917oicKXEnuw$pO4U{ -&(S@6u_?<u=~8}?mmmQhkg}&aTMPrLU@L$El08g;83?KqO_9gX9z6s1m0LX>#png;!8kWqGzeihI6NH -m5RSF`tYWG5L=)y1SZ?;i4F{7!g2yJqj~zSLgD4x=hz?gibr$=!tk!9s{f#7@_5^V~YjiNJ>QGK~U@( -tKITTauvHC;uIQcG|W!DVtECe9Qw$|z;Sk!>e(_)>q3u`chKmm^0<mo~WZI@{WNH_tVcc;)ZOpo@AIt -6{0Hqzn}cZ0mkVn3t{G(u4~f_5O%seS95>{~Z#Om4E+ovrQL@zyxxx_=19?bTsj9^yvaR13YYFnkKIP -}A<CJvcc$T$bxJE0Q{2cH564z{g-P=Nb6@Y%Ih0PyYDq_vFBBG<1L$o)?GA7E>7QA;CqVYgl0y!H(;R -mo3we{bLkjo|t$>?}8Qg46z??U<r5X$WXT@>8?s&G#OY99O)Ux&?G1o6P%23!2TuRvAMt_(Zh{d9a{6 -_Ff#_e96o;Z>}iZb!iaZRMmR;Qy|a2cJxgkh$6#r-bt-neqb1OAofbgF9W8rQ)xB5p<mn$Db!DlcAh5 -7En%)E1=?-4&;<CO1{qLTfZ#NqMKCjZktaNo?_sBt4A!2-5JZr#AI81jDy<A{J7n^c3<nMj%R&Q54!- -K`Nu><>Q7rJY>zUDNA0UvJ<>?9(7vd0AIjoMRkgYqa2sf)MC4(LwDyAdo3b7~jdOw<b-1K0bYmevibD -NrE|SpMY(-Eg~@j>#qx(8zuao(>&ClK%`k<0`$;=+JNJz@veEX&EYv{-gSij3w^Go}33~_=Kbi&i3zu -L1Ha`jqX+z^5E-Gd+Zca8<hPaJ6!o04^;5T)jO|ghbE`RTKQJ%$m1ThV-retYb*+2-BVv3sa2X`z`E8 -s>|c0BWz?KbtHBS%^Y^ltBXi9;pgSDRC1!(BOOk{T;7yu08g>gq2l{h9{Z21(J$J{T<jC=Uham&7Isi -V~nQ0L_7DWr;1x!jTWN*JiC)I|TTEj550xgU_5e-*M=R}}+=>!D{*ww$WGDGRIDgYEzk0$e4gqpWQj~ -dlF1-f|BxF+;CmTCobI>2DB#MV1|aJ$MrpTT7zbXcP^iFe>}SJ|@P2a7TLa}P>8?nmf^cc(}15m?XO- -|PQac`@kl^(y`#+~9vC^uYi0H?eUD`M1B3geCZ&{w5Tp!2k8XwgHPE2PFQGoU~q49Ki5D{lN_XGwNb< -hc5P&<+wv&Ul;e-4g#|c2a}=4=Tu|b#CbFNTz5Tr{Crc`!+tCefj8-esyvm*G5!9f;2s)Aef|w2*cTd -Aiya@M_nHpMZqZi8SSOwskgmtmUpc&>R3&?0j2|1la0mRkgsc|;89M?=MXSoWBIfSpd3MRCSA2BPY7W -#&z`Pr<*)b{=j($toV4%%RhWgHp*^UJ`H(ngZKY;iKLq`0c9wWQu2%z{NI2H+1C7;%#5O<DWIzBuF-M -lf#%iR?crSngq6rP89v_n*o1%v^7a&F{whN*~tKk#P+DZ*~=!58L5xYNjRy`TJ$Y(g1iYMotP)np_|& -K8;qC=?ByGoS%xXW5Q}(P3&hjdIb*f8jI(KxJJuhEmu_d8%N8CYN5Ic$?haVLxXI(O9<ss4HUDV%a5S -)@})e%;$MLDn#o6tWd+z9I~8X|66634d=R`cZ?e%Y)+MI`VO4r?UCz#lU5mSgeDPI!2Fw-6+WE424FX -sWCCy<oVV|0?@!<T`(Kzth&6W1CQ<M3<nI<N7j6vvwg$h*rtUC4u^VUkklup@<G@1@goOmOK%bz@(pV -b~0i-S-;b{?`{wQgA%Euol5i}YoHo^#ek7FP7o=cLJ@R&>TVm#23ss_hwLU|njsIG7aI4(-mr#D9N`3 -;?jIQuxtuH0=Jk0VhSg$k($E52Hq>=y05o}Per0?6PWRd}`vGfR!REvuzSZ;*L9^p^RNG4QF~-6VeeF -Pcr?dkjFwACZP9u7f&Sl!w6rd0dI&7vRRJy07;ArKfmON^VBHb&T^QM6@UKvOw|n-;pkGhEE?XD -+8h(y{(P5E;zx3D=*3YfmSy%iNzg8qy((F6h>yD|1-OY4*N0sMddwonVjg+AT2G=w{{^N6pS}?#M8Lt ->VV9q6Yzxq31EZmt0`c%1og9&is=S2-!cef;WM$RA=L_^6G3GZu7uldtU6x?7WV&7@Wp#OYRj>2IYPG -<i<paYW*un3Ur^!>F#%>??gIv?81gVVHvyu`ikiIgh-%Zuv$CIO%gOJW{%7Z_hoDcj7zAS;;(wYz@%Q -tFSj)7=qlhrL(n<ViW`UlLw94jLDlSkhfK2rebrjwzxdkL$u!I1htF#R(P8_beTW%d5u**R|1a=gyl7 -6oWinB!xaZB|QmGtSmu673Ba!2J~npRfR!7Vr=gpHr$N0B(7OaXj_-509RH!%8`o#ak&x^l`rTT<H#0 -gNByp!i>RTU*=$&6?){3T3v27kM-V`^{^*n%XctkYwSe}4)EZJvW-*rxV=4|0lh%Ip*~>7!^F9y&!0c -HwFpr*3BEBBp{5gHyN;3HfKm|ltxVy+7g<391utBX{(F0-tUiAC=+UR=Jo>webL;5b?{h6RN>w;HVwU -b4u&3MSKo02NUppHi0S`NyVP>D1&G3M`)i$D+2dzUo5ZBUwgj(7ETa>Q<h;mDVHffcvgD32d2Sb5g49 -1aKC;u5o1N<k>eDEIz2b%KYQ@bn7W?7Ndvl;CNBQJFEV4{x5+&jqHx)wjF8v|KlPk}67Xcy$g{7)aug -ydo}7lucA(3j_P?jp`-X8JnWgyrw$%kz0F^JFu%HeFOT;~#ASz?YH-bQF3=b+gGS?YOO-lLN-Oyx$_C -`H06888a|`i@7z|2cSVymy0sT;oWx>XY`|NcpNQn*+$6#@?rAn+Akyl`xCXlD$C>|ttL+%fA?&E?9SE -5Ekm2ZZ}arg<L~yrjG|=%85`M~DUJ8u%WjR{U%mwEKDoiLqsz~f9QTlfoWvehmBr)>7!T%9ZTT<^%L> -zgY~R3u7{UmcnqtAmS$!GmXRtASXs{2!PJ=82gRfz}8FgCnq!fuami@%5WV!Dm=#1pJJr=R48-k4p3Q -IjeiL<8w(AjJCXH+GYw>uD8F(8?pV_196$C+8hww>%r@Rqd_F&^5;sFE18R&1?=NLiOP2GN(nXyC~Tn -9SH>k~z&>hGk<LqwMK|yaqfqiiYz63hLS8<ie)v2G7G#YzU6z;<(&V@NOw}OjGpcFr+1z6&Y2jwWDDY -Fx99Lv^ALhYKuk)#jXUgH%*QSR2;1G;lY*$>hb_4cCgNtn5r>+lhtoV%$z>sL*sWvzGb9{D<YU-uNyF -fg)brX1({P$bB&3=$TMUdpHjjCWS*UoyrADulb9HjOBWvy_NKtS8YUaP9#J^r9JS<F4fpXaYL;ug1s` -XVW>qvp>fWRN-lU(ib+cAQv%b((kY8o<2xuhFT_8tNFHL7}$g_2ZrEX5J<6NJ)a%Hk)jp9K~$e3hlE< -IUrCI{D?COZmCg*U?aJb4r$A=q;P8~wln{G8+79R!42z4nT?hd7iow)6MFM6o}LR|2;3G^SG<b?afKB -jqZXNgaXZjoJa|q!z9~p=@gMOeiYs&UxjSH$;%DK76rt`M4RSNT+w`>9&koeecL4BPE?S&*zkP9ZDnD -hk#09H*G$5mEDQ!IG?-h>%4nV<sT}jX<sS#@Ru*6z@L)^dMRJle2Yy5Tfsi{i{*!-h?%egbU3h9?qKX -!x(`RYTlY5h3_sMPRcrZKFs`I3Uj?l{J2P>t9^zSz*N3s>=d58T8;2F*xymR$!VBUHn50NW)y5O+s90 -NlA3b<J5BBC7&oC*NDV$$P!fRIZKEDI*TwSHciJKQ>pwd@+G;)_2YfC|;`nEJ$Otv;O8Je?mKWa&afk -jJ43OwkbrUa$zCIw=~WFYAK?P^+%v%yg(Nf8!$11&A%Td&tX0i6`sG3rHGf<CCyO{+UP;WDpi)}7P!N -Mv+2a<}w#vl<?#H&pUSII^{s(k!Cxtc4xsWJDnW|5Zox3`bF-#<(-uD2$i{iXNy%A--653(joGH`@v= -O2yBxbiqG;bVo{_vh}eZ+U9sr^wRn(A-?<1Z2YLV7Zrhq5hHo}Yh#aMVtiu2WEuuil4i3(6&0QU!)Q} -)<nSe0DaO5~zrqIS8o2lPNBH_DQx@(u{t><wKXMwDkOocg6P+N81Gh9N5AM4p!iN;CogId0Zw0G(6Jy -`Ch`J-yqRxE3iz9o~L6~+LibjMJbj_wc#nFi?skIKB2fb6v7Myo8*93dX*ppLaj`r_>2?Rr7^#l<;d} -JvZKDFx&pE6U0&j^*_qyD;&IP)Pa0O_yxV3dZ>B;ljCs3clMx2S~Jx_xwyjkdd`xsw6hJ>}TDSkhMNp -xJto7K(VVF5m`RqqV2v?T+a>vEkM>!Q!^N0me3&fWZ0>3XlAn&dfR!H7v<ZNb^w;VyM8sq(j{{vL$Cs -<mHFEF2^D4EaDk-hDHY6G4Pl|4rDx_#|834(-`A~TryQKcpJ7t0@+DY+NVT~zB(V|mta2l;0}nv_+N! -?&nS0cdc{S<KenMn8deOPZyZcSx-%H!uk|J(oc+3?NKf3cs`-2$n@HHr5$}KpH}iS8mB9olmIS~hbDa -_mH+h*ZJ7d$H?GKGX%{G*Y1^p7708scX7>f=D4qs+i{e5`M7578~gwh#H6kRafkL9h(ORk-~O+i6e-s -fnH#cXFU23cBRaON_*;ni^&fm*>TYhrTHNtIqr=0owGRBt{TRuS1ZBlW#}GoWq=2i_Xc=53ci<KQsVt -b^51c?T;#<JcAIbBsK7B5OQQ2f{^J<{iz$yTC5i`C4!|+Kwg4wIf*Ep(bxE!PvGK96)62HOxJ&u{eKO --WJGwLC$t$FHoQ|31f;9#OewRZ(qUCCmElf5}tHgV3w>zSSZmXBQLtH%G|hV-fDpq%%x>MFsGyVp)i( -_@K<LDD&fO80Y%0_uy{y$e55WKzJH>`=y<$filWXFMQ7w3<P3l~l-xh$8N@kvEc9Dqo;J`K((gYb=!u -`NMm<q{C|qu1${wFYkhXFJv1)RAZ4ee8!5{iY=jDb%V}0>ay92<Y0v@|F@Y#)a2GhB3<g?>jpT_bM-r -{l$LRfR6#A%$O%<0Leu~kgiVZZ5X{!+(JvgU7aot*u!y}QeKBCSonevj+ab(zE<m!poJeq>3v_tDvpH -O24nIoQAGaVgMHwW+sp#0mcOomF>6WxqvH3>R{>g{I`^c)q&zq@n-;4$CQ?Z9W(0Y757YiP3h21B#^| -_V$B>#ZvO3@z^LBav+=9VA8)u4x+tiFo}1kw*8mB5$y$HcE!FA7bUaf^2h4oL$7x?Cn?NwZZAqAv^{( -%-Mla)h|C%J9F!)~)&T8tJ9hgT|B$2b*N1<V$xYNd(JBi5Y>*%1@|^ixW;dVX^?mxTuv@QcaDNEy0qJ -653_FAzlNHi&simHV`JQrDV%)aaXYFXdfdcQ|pTBzd_Utz*d=nJ}Yj;orRq{8G0W-6Hqd`jpxjNuZB2 -YHlZVGHl6R4s#eB=dEzD5_yd;6cF%m4Lw!q*}G_i|n@7g465&mt5~_Uxcu-fDKS*4Oyy!*A^Lzlr!C` -e@%raP+!<CCQJ@kAM7)=>Lm|js&?M*_S%kWGdfxAAfoB`sDoN|H)3?i(SUR9s4qQ7D2{9FIEMq?i%gr -FtVpQ=)O)mhWy$LA)BGkxr%sw5?<_%m(x&?6>G=2E-KA$)2*ReIS&|@dh=bCZH6Ex9)ZueY!+Igc5<s -t#~JLghinG0pBXs1tAkB6_LIr(?7(@*ZDv<+y`0N-w%2|LO9i@spM7*~KlPMFIr{pUq<54=;a#Hp#w! ->_;xtq@!G((H0<XC&YA_hLtb<Y;QR#@p1NEndN`@{|Oio~6a<Aipt{OnnVyrMoXXxJlJ+?!{x82b-0e -{9EQL2X;4*pU$#6e|Yrx$UpNd}#afo9W|2-<s&R&-r*bhRCY1??{~$d#ykFR}#~+0j4|AwAvh@ikA!W -uQtYx}jNEv2A5@dV}L(e@%bVEKvTv_>vGMan^Re^4P1dmPf-VKOn>!R%KCiL=9<_&)J${+oN4|NmR$h -WkvoE1q|<u*R*;LdfLJ>!?(J{ddr7%Ue<UWZ=P=Gl4G1^IIVcruCMLWGf{QGi)bg6w5{C_u7F;}q8&4 -pcfq{eG447ovQ3jq5oW+a6<tv8{pg2xNB3AsDnPYk;qT=KY2qXqEa9=2y+wB@Jg}*uqJBAkYOlw`v>7 -}X;5sx)zp{Bfbs2`LMPfFnuDroi^tsm!1AL!=UpE)sE^tpM7C_XSC_z^fw~~rQR+231qb)vnig0K1Vn -tV=PH;Csh5>JQ++OPvUzu6;?ZjcE*4<b5k&x_T8$f^ZI5@r{%j+5xpr2hes}*1UO}|}KQNdb9+)!!Q1 -*Btuk6yY04*`2ttabS33x@Wlkdc!)+2%tb@+O#M1Z4OKkP+WWW>s2_7o%H%>vS1f$CX^?h`><cM)y8O -mp%q}YmyjvioT*di?}RvRWf5>=-FOI*<Nj4_=gQd7k4ix-f1x$1^A;(vAcMx|KiDHM)zY(>6(oGD^Bj -gTG8#NeDzL0zu_mkdyQ+4&+2mX%Kq9!-~D{X+ly>1FCUFY)R05YZaBNORPQ(?@H~P$PX<DR)_p&|(u- -^U;TJD4oNE{{!!eWF?@YONzxZOlr63-7mM>giP}z&ibp>;l1PvL>8#-W;&^(J}t()X12nZEUQO-EE-J -Qv>Jz<{@=m5_i*ZB7wbuWt``WH7|{e91GBMtd-bOArLUqUVle~QF|X@7^L?=D7e;91WEAl}DbgWeatC -`Z9QX@dm+s3(#gf32a-RVUgnzzOW!tJD_VP{u-8c~80*XyC_Hmh{VQX%d+y)93W$Uq76jouAE)k7h4E -ynXrlr0428>R5I99>a|9)34{4A3r^rzF3%mY%3P2d*5<Gm<JiU7@h0MoP`_qvVz;|Z8`jfeXNl8I$Tm -K6ZW9Hmwb;a);zyBUux1S6>ES`oO-d&-oz;y_U5?4=Sy%D=geuRuXZRT8>fg3_in9&i%YOuPE5Mn6?X -*^FTl^TKjPOn0g_C#db7`CI}{0NP*Bl|X)G9c5h!kx73_H4tqly(zUjTdm~bxx_#F7QB-2FMgp0|+VM -{S`{eqv_8?FX#%f8wWzEFkh@o|;Ez*K)%eHnNm5iYQZ$~7>j6Q5HVRSS)7$~B<K7gzodfW^4H>Eez{A -Y&bO(=G4dQWJNNL_m`0Hu6iXV6UY3JLVKhvJncjm_2eU!Fy)Ps^;4Nr8Wz>!K1{Q8O+AwzIb8urJum& -uQgcWNAB>c_1D@Mh~AQ&PQQiaewOOGgC%=G_4P=7PhS}1$g^F&AExr5hG-4vg+EPY?Qcg9v=QM&P`U# -$i<cbeZuJg5#%uwsYM-ER;}@Y4ewAB0`M2lbZ?`m82>&J4I0Vxl-h{)CxrH|i3w$h>D`o<ufB!T+lca -tl`7thIuK{q^C(ys`h4yiI4NXAq893m32H1X~en|rB0D@uW({eIVkCR8qqy8I;urlaE>%!}xOoqic^1 -~e5S$-0ZBRcf6AAVudj-UBR)LVT^w^P_#z3_HYyOh5><!FBp*4~EDrcB|TE9?rVZH*mIpA)I<FSy{3g -s4?RKNy8s9fAm}hXrteT%mn?3&ei_P)h>@6aWAK2ml;P_ExfV)-Hes004^+001Na003}la4%nWWo~3| -axZdaadl;LbaO9rbYXOLb6;a`WMy+MaCv=K&2Aev5WeqI5E}%MT1Sy(*>Macmo`O<7H!ew76%lyOG%7 -($t}sXtp<6D9(w81^+`IM;VvovL<f60GaSzEH>54gvUtCfY_+OPE!}Fx%=(k8JgenKY3Z0?t>`+Xw`^ -lg%PP~hMl&s1;BAa$KfZteJ9A$6-bq(@!~9Mv%XHsLt18hj)O*B4RY~X6x{*vOkg-gFa__BL_a1Z^B- -E<%%4lKth4Qj>v!Zx=E84D+7Z*jr;P>Xu8>ZUMSkJ8dvzN}hkv<S+c;<&^paBFy8Mm@l7TkLF5rt3YF -CW=7^HOxiBX@ax{;29p^CIe6%;!b%&a{#|Wjk>#S=%>Wfz=c!@Ltz!ZTyb)T_^2xTsP(hJ}coQyO!30 -+Yp6K0kMhU6;?9Q1hIO?et-Z;3dPZot(m!6t<vhZpTi1N7l|+SkWx?r##t*}XW(E;Ql2?9J$N!JLO~R -m>Y4MluY3>NhKT=S%vIlg4@oKtPVT;DpD_$i*iRbjp%s|FW`@M$`TT-S%F1Z3bT7-J=~1K~2fDjazS= -=;@y;4=D$}@3WD!Jwfpw#|8RrC*?qqe<8Kr&VEO1Y675B#Q#)Mt0jJe|n^tfd~7MiOd7{V3)L%cXq=q -pjT#?;~a67nDZ|M&0TNfY{1St-1%N1GPpM=1a9kd9txqq*q)&R7MRP}h<x2xCzFFee5$9l9hfJj7ULu -~^Jc0|$~PePS{qr0r)IWMRD$O)eHmN$_P5#Ioj8GeK%7^SdNmt9ueEsXND@G!U#hbZ4lpJU9!qOSK$O -C6S-7KVlz42xhU9=c8fam}+Mf6wJ8ggtF3_Yguz>y;f-Ou)%~PF=q35Ic~swZA`E0ObaH<Ny$yXE-V) -O7zJV;Ja0{{HcIB3F%#fPDD&HW#yCq|aF2%pzmH(y=tLb|7)i;Z5MulczjE|F)0DVS6#&>!VSw)tMlb -I(BV~FN@-Wa4$R5}oFlH?QHPJw(G&`BiV-CM-6qv!@T5BvNaY;#Bi<-w?4KBfQaArwa>~(C2zq0TyBT -$HaOWyt2gL^d<G18Kj6H2XJtGbptQ!!>Q=AD(#Q%Ni-fvtqIYaXN`DpQ-L<tTqPsH3(QF!i#-UPfTM- -D87;g)k^XNgo<N3LLJIcslQ#TAg6dt5%wx3MGDyg0CVRZyHr4tXLjn{I^DDW*%e68>zQ`ml-y)BRosc -Rx7lABUCfkp2*|j$0xa!!41DBJQjAFAH2-vM$o<^L_MV)3{=Dp-a=Um?)RMx7Tn`t!zYnZ&)Gqj#8Y9 -D6?!W%*$#s3Hj0w?sOSOfD|^R-u?pmE2c0Mm!Z%8sM+^j$@lry4K71)IGS;wZL2#!W^|;JBY80U%spD -u3w#95v;4*qri@9q|b(LGVz)X?dyq2BR&{Y+x$yTFuOqsE@gi?ZO(=-I-bZ(?4dF-OT+gee}gVu<&Bz -b<X77sh=fofb}D}>4dSlka$!VxwQN7)k$>JDa=v>dR#sa;-^th`4Xb}onUOm{CQ<7CeyUQxAsKyw%bJ -DSlx0r~Qjz>$K_*Fj9z=EiZD(U7+|w=G_taB$xtj(P?Ry@rHg)&U85Bex(7bJ&4-LBSzm*!+r+1EHH& -jd2fD))V$lTDZ#Q(0)qL4!1OE;abQYN^lt@!fAKcFU;j7U9A2Y&ORmZ5ACGFcnOf6RpBY&e;6KHxOv@ -(ea4Do+g`(^fM>2##iixA0rM60BqSZ#Si(E+J07p>)a3)z1hqLg>BU;U7FG!z=7lp{%dLScmd`FLr!* -QAVAp1&DvY)BFxE5VJ0%QX!{EJ9H9&KtS_N==TS-}y1tV`fp71@GDsO%0%Pf3^^IG~FW3Rq8kaCf`>% -*b+r6`8SL3%Mv!lUMONjF7$Je1R-DBz*V;Oe0KWO{)Xg;!-@A2GnBCOkegBl#J=2?x1B7Nvp^i6>_G! -DTl*GAHpBiXum-etICMHVnc;e0cc4?KfP@c9Tg-_4uNkP7gIdrhSG_yvcMp1vdpJYg3_Mrib2nuUR-@ -_6goHlTEo=eb!%As}g<F$@vfA@5f{{fJARKE5Bh+>kIbOmFy{-P~1>$JbBxgHN3((hvPX%Qv8N<)8rd -y-@<KJm+>E&G}=98CK%<g;3s6;G?@i~9CRs%G5r<bZe+^_p1UI@<Ui)V_#aS90|XQR000O897^_9Q4& -nKTLb_AU<&{MA^-pYaA|NaUv_0~WN&gWa%FLKWpi|MFLQKqbz^jOa%FQaaCwbZO>f&q5WVwP4CI5TfM -(IFQ5P_r1Pzd+Md6|c!w^^GNZNSGrFWNBg&_Iuo!RBbN|v1H5Qp41Z@%8layFYK2A?{#&gRycu5_J2n -|y!yOOm(337A0Ow!%THcWB`6fg_m_W3o27hEgkqrIWg`AnR5e2Y;Fh4OVYu>3UFJ>bfPG9`H%Dt!y?K -eCnK7DeRw<Bq^1!7H);b4~@mfN++L@iPA&p;wl09Q5ZK+68ch3a43q3EQ;b%$wvge`a<#Li8uIAw+d@ -)oCTp2)abUlqW?D)=oXC#dFZtV7sa8|q5xrGhh#{9*~i=xsMPJgC~~+_R(reF=x13WpDC`}QaY?HK|% -~SWdDeJ@@f$9zm}rI3Y>-&a^1<1&Eal~Qxm{Y%=HQlcLO~MCrxqkGf>SOGY%Z+GM`aVkYkflX`E<ETo -gst=f&<*eh!#AelXMFL^6Ur!A?>NrEZ*%O(_3Ve74Tv56b%)O$H<wv!|3iS8rlHi6bTPfwUo+sDoEmp -;A6kS;6&5MJ!^>{rsjZv32tYLeHsRN|wHxzkIQ}nIA&M?d`k2?ihLs3vdB<ro+)jN$XNFTrfUzG~hh& -y*AWL!TRDtZc)$>*!wx>OnSS-rqmVXJAWV<`2rfG-Zo=LpM~mtO9h$FZ+o+MgBe-TG`1v9gg~Cri;Xa -qLK`Ydwp+dPk_ZTBM2)Z`v1%hXvLVUuNmZJLbC`#qAPO>wO&bnA@7hW@WC?IqPn}TG?ZFSRkyNALZW< -U?@`n1-1Y!G?u@$5SZ_A8+5LiGq8#7)ZVI+AV33N?`YuRvM{a}Xx=`AdmvXO4NOf9N)1{9jO{;V6S^P -4x1J7G4qUkChSOuqC<k`kg-6zN5-Jqi0|p2^sI<dbXo`t6W1lqBWT$Zs4Z%^i=)7$=n?3tf%EyMTYFf -qrVaBCPz%&+eM)ptOGMTB^{hbD>WjDQF1@6;Uu=C{2rk){KXEH~Fa|+!J`HKF>xPg%wA?c^Q2acCXcQ -y!XF8#9S4sSGef(EYU&JY47wDFC$5P<%Yry4;j=n&RB(6k_Q3j{v|E3gR~VkXMNCF8WBWx(ON&YCFOq -PYbV;8p`SbHw*Jx?8y|KhOZ_;x)MI=?^bZA21zz|}Uz{wC)9jrdWQk8>FEq);MDfxrNIP5+sXxu&@Rl -8Z{_xB)4zwd2l|34(KDE!<jdw6sk*06`ayhsL)c&|IeCLLi#2r}p#axYH936&2u!nZfBhOz#()7-`K7 -4_nk-(``f2b*g?RnwSo=vATh8P#)x6env1H2=KO&>b^ik7V~`+iRhUpBApO1=R6t~}n5{${xL=hH#g@ -(|`D$IoZAp8eJbHUB#Df1Ce4`}q}f0skV;2i;(6`g7^FMt7SnU1f$gz13l7S>_U*a{RHwi6y6Z)RK$0 -T;}96Y&>6tDH?tst?8chxKyuG_C|~3e^5&U1QY-O00;maO7>R1Rb@R{DF6Vpf&c&=0001RX>c!Jc4cm -4Z*nhkWpQ<7b98erb#!TLb1ras-F<C)+_tgkcl`>KI<2_Qih8l*<7~W19b0bHI<~8q<g~I6O)aq!tzB -|MawRK%+~0oZ4In^rS899Dz0bXRntDk917I*S7|aZYK@e<|`q!nd>MB~+*{s_5hxfO!adMeeYF?zvnO -2LkxXw~tDXf~+w`#h~Cv{fjm8vh3S|z1c%Sxx}CaW*ATpbDM4O^PbssgJ_moqgjN~J&5y3CWAngEdHe -1X8CjR1zVk<AxHSwlgpCsp&5*U)B`otrmVVSW|1R;kUes+e5q+CJ6ga?(8A+6J|rFQ(bdHoHm6Jj*X^ -`EMB)Ps?HsW0=jfOk2v|l&LOt`XU49TxpRlqWD_pX;DVYas~r_NC-A9=E;?gFLeU#s-apWWu;@NC#@q ->ZK6v+AHRzMURgo6acqj6R~s9fsxIO@sk3Vx!%SiP3YKn}(~4Ze_=f6ySxZxSMT>BrOs-(YX$4c8F95 -(ft*+@d%Xy7rA`sJcsMMy)i(iwGdiiK~Z$rUf{Nus17Y9f2&(B^RzIb->=IA*7;cq7g!&QaHCr4b?Dd -N}d`3yG(GAJIX9Sha|DOoJ25<Z+Kl{Ss&`L@;-|GdyO5b~$2`yA{1IxCBOuJfA9aPAknjO*J4R`2hgS -MRc}7x65sfY2)y^E-T$RbDf2?EN-Azg;Ai49R`d9n`POqSpKqrpP~*x$_nXiTbxs%UqtD2^3c_VM}K8 -_%SJCERIv8W3H$_P4vQ}bsqCeV27W8HGg4F;hqlj>tvRtKhlJ~SEom>`1v$1^-Y$i$@xtGP^7m9Wm%N -XxR^tiWizzru#ks&rSmF7N?;ayeQ<L0Jbroj>fl(7RTxCMuFFX<R6)$Y1{)hM4qiSxeRUE)e-{66`uf -GIgZS;UlOLfv@l<q!<R3cq-o80HL1>=?T*+Xhp6miV{9VDrqel<FAd4M<m;$yTfwnbNTf}0>V08hjrY -l`uqny;&S+T5Cs%P0e1NKqp`Z9rcWn}w%_Wb$5+mra<_479`4qyKXddBfbAB!w!6qh=x7Ql#M84TZ55 -1`Z)8euZQl>zDi2?;AOJ}H-aa2D|EZSy*KKLF%{G@YWnix#t_29}?zF?0v(@NhpEQD>V*xU0mYJ|zN1 -!T)}Nbt`TvlI{gak{7R!)eI<Sxu`Y>NUEnk>6ZEeIH0@@FN>-ka8Jb8<!$pod?s=?1M;}AB}{zkkP3- -X{8ps~Qpwdz*j4n#8sH?rbbYMr8l^g*nmdZ#EOh=CeH(h!@lVQs{L8`L;^(JFM+dJ@;?v^;5m(+Ag5z -RZgZR|%e#$0gQNhzY!PL9w%d!Nv{h4w2?obAz%t!(s-oSg>RBsWN2RZTzu;_A@0vV~JgFnT`e^(&4@z -;xA-W<Icf*>yEz-Paa(62o(3kS#;aS_Vo{<_rV?a#?<sSiGdZ5#n9I=u&jv)%W-qk9ANQ6kv@A0)GRf -#Pp=lib3SV)@%0jBR7r;a)>A&1f)f8VTPVvnWvv27eFMP>ZFFDd4X5kOY{uuS}o!p}S4uPnh@QQcteb -HI75khCs5dzSPR_g94%eDuriY$O(!Q?SR>OIx8m0?7J<&AZ%XLn%*KOadVaADZQT*KxNgU$Ws^Hn`)B -eMV>($t{>T=_9}SKB6NapgMkApFK%RBfUz45Q>`bLAQS*yQ-5kS@2cqxH4NB$Vb9Cg;S|79Efh>L|6t -VNHmDUu0j&>!LtJ$0I4guQ(JSXJ=$}ZC54#75)-re(1p{8h>Pn>rs9kq9d_WDO2i$OSndBE*UCfGeRi -WmaPwvtA_Y9*80)Cfm48fK_hz}9Qkmf(cmxqHc8v0PsCET{i7D;WCJKGXe@}maekd_Npov5+8G_r|d= -rn4$;yDsc#eD!;L;_zVHSWJ@!y2xZgV3vmo@CQZr;Uh2LUJfAatG%!biYCu_KSm6sum-n5i@|XyW9Kw -9c;UZUeu;yP-P8GgsF_g;uM5su8f*(X@?rZwvhl+Ef;B0>xd3UGRw=PO6s}{Q;?6KV$7?+nP3WZmPYg -%bsT5Bsf?;xE<mrH={zi?U0u|m<ineb`VyMI2Ii*s6W+w)MS&_9=mBH3+ZjcHx)(N%V|N@anA{yV2Gz -)K4uxx)77_eh(Gt&Qc@eBrFt`fA;h&+iwz7p}MRW@4-Ga|Ypc|A4&UdJuK}Q*!oqD&G%~mn(gn-_1QD -zlNZ>vHNVQDqKfdj%N$kQ9W1<K;bC9n{QR-Lv0la~3xndugfeQWR`0@b<(BrHIKsYu2a=O5uzTEV|{l -I6f!*ICkn_u(Wd5dvuSb(u_R{2dNH!1+_-uq)WFzTV&eCi0pgVXt9>_A*t`w5pRj<dF_QqmQfXH)osV -q5KHiFkpgIXKH{7bgF>`<}i5TbA+H6@DR70T$7sJ0yHV|X;#h|S2Y?dsND_VxB%QhljQ>Uit~&ZX%1% -=e}1^7oZBs>h_FUini`8hgg?6aBL4Ni#lOH9LXc{kS(@D&7(cJK1%<R-;xvNQ;KXDD*h3s55Sblf+HA -;(h7r=4hW&O(uhxJhq~Yk!wayLZ03T>=A*2C&L^`s%KZ4sj-&zZDmRt}BsEQB<kz!*~atq6v(2<Gc9_ -cTWdL1kuNf8_?t#L^`jNqUqYzyO?&2T3w^}M)-DXbeGU>c`gdGn0=TMW9IKmPR|gS~dWlCsvb*;;YcB -Xf%gTXn^jD86l>M5qQ0P-Fzou`1@k7&<FcAe4GZ!mUEofhGql4=3W>QcepR$}~8aC$rft3OC%FVW%RZ -Np&?TvqcTqoMoW@RyC-hv_eS6Z8$mbI_z!4&}orx)#?gW%Nyoi!|%`^jH^I>0gf|BD8K0vsiiF;XBw@ -2LI{(~WqyVAu@@k)4xf9n3Z{fSkK0_A-FxuwHeMqSTPqC`{|a<FQq^0%_xHT1j!Ef1d_#?XK)V(EzD! -`NKwxCU%h8BRhZPpH9Vi`wYQPf^z^Df3ASybGZT^Y~YlgsE`-9#Joef&(b6vk^YQ)Y3zslkl-U$n@Xu -e3wIwSfkQFh?4w~5|l-&;3_&T0a!?sg}&j-ggex>1DIuWo-cQOV}XCq%PXXS+j!Mx6xhmW^C-vaBz|W -jTW*K$2BD);R2HOxk@{#YFD1GP7PTfOrr9Z8(X#$gY9=0T^rK)Ip<ea(~3`w8e{_9Kl$^fQ)f+Sj6LW -Q@5AJxExP-Y*rkruxT<Jh=y0KZ!r!2vGaNQC7{tyQMfrKK_Nkp2bx(KThnWNc#CFHF&t3oMyuCF(kR2 -;k(N4bjjW{^_3<FoWfUS{(8CtM<e&tV;nb%`p~b)G+ZDvP*#m^+{WQsDEX)7n$2UJ6unzzThZK&s1Z7 -BgV7ggmDYdO4b*w=bK*Q%~XXktgO3&gJcKtjm%8MOR6Zd!b9zRll=mBM#U4WjjJV$f)&Z3&`7#YpYtD -U_kj~=f$v2L`*X){kaTU8-ou;;Yvtrk@2R5%B*apf9oo}D8V=%fUZ!l&61DHgXRSnOu+up~{ud*ya}; -AIAbFh+Rf(1F`A%J+pL8qAmTb6r-JI$_|VB=I)=A)7`~M7CW0;e$$X>r~FBx+w}Y(BoTLB2b3*VQ;<6 -U`tO6O|vno(K62v4(!sPe}ar?rbreaIJd&6&x4V7mc}CtZ`mwqpjHd}PGj>kN;UQr21zx^GRKZY=7KT -cCz8pst;w__!`^D8h{YbXr+>p{RR$4CG7y#-Fd~S+*4bUA!p-|QNh}+v+XC%e0AugavFD~JyX-<0VqD -?f1}Y4kgqGS{Wrqo+qBMU$G%fevcTb`n*(7^X=jeH82p7*g33;OE$VmrL66^~+Yg83`aOjAK`=>cKkj -!ntgkve_&~z-Vu7FY*>$F!ab5NHn7$z*(B&$&wtghJkL0b@aTy+#LcYo@!RADKvJFw+qp$_s3JOo~Xv -H<^90?#1FaR;n9n$xjWc1(~s6>TqhGS?v}49)I%Qlc9S#!r<jPOzdmNb%OlYDQ#CO;llwl9N@v^N*nH -;mcr10;1Utu_9`64kzKeq2r=t{Se<G9sLe1ph5F$dyn6__D~@zBN`DD%?<z0C<=1OkAKVH0FV-+R3Wj -8qZ_dOIfoIWbS0Gx>+x|Koja`510GQEn!+A~r#3a$D7X+q2|C9KUQ$jj0aeUK#$L_p))WtVG9Dn8NwK -&!*sYTikT^tQ)y6PSv?o)<I^vp2X>34*Y$g@`-mFM>r*P)Vv_<D?a#SD>;7Nv@lLQuhD8|G9q7w#ui! -lrrYPu|u#oDOHHil+lZ%u`CN*K8TiZKb(o(a%l07g(t)I`NdGzb)+K)=hm7K>-qfRbGZe;X>b>mjFY7 -m)lOnktR*!LpZ-L^Wa8nAx^Wens8JsT4bCwH+*gKC(}p4onMgLnZ$TR__sL_GHNZ2GUP~dghDz*7T7~ -(Wi=2r9M=MmK$6pg(4fyj%F66o+rR|4b8Nh4!Y7$#h^yTbUtF!5g939jbYzJmRO)KGy$nqlItZWy$fV -tGM!>r2-^2lHHV{$Z11>2sGa#o6xK(~lU<x(M_j;XJXN!9?;Aq`B2NNRqO6MLXV1!XC>5$2CEft|d$x -G#wl<x}fW#_h8b(NQ=+X+;bwfy`1FK;$hq{Td%=<=+NQ6*BxAlBMz7h`1!IK95PP0-hAXb_frO!|uVG -mjx%o%^yPB1`GI&jh0B5oh1CpusO`QZ7Lx+#$mPz+udnb`1<n{nk~x2j1Yn{i+dAfm`&o4iT#y4i5KW -u@j<FdrbK2{xUe{|?2a?Ue*6C^YkI5~D?~JwB8i2rmZGPG`DxNN`Ic8gpou5oZ!IdIkgcDC+kB8_6G= -h^t6`&XYX30D*{mj5|8BZ#LV@FNCRt?L>euL_nHVSHe`>7!DoPB~07Maag*zu_+DdS$11X4fCrCe}{m -+u~|d-O<SNH#-Mu&B#feoI;9b}y9#d31Hvj6^dj{()3ekqwxs~o`1H((hgOv^Bufg+4<IZKj89<X13; -stZQqDY(U1t`6rppaZ{usU79cN@$JJ43$O~;W7T#@e13?oD9PCi3uj!;nW>N}T$&qMrA0ily-zie3tn -o<;<e6?OG$0NQ1tm<sPDI>L0sBTnmJOp(qu_t{-FH2+ISaSo8DneU)z-k#jvbh5YV||iVohtSsdoZ|u -E`!1QrJSNC#e2RP;k!@FI)xAVD@(tUNAzGAV&CnW*sm#*b&S2x5?B}-7&n+G@B96=F5Gj%or^(IBn#` -APOZIQOBVOoujL)SYzAp&wJErs6vb}llVDxUKDT$%<_8RZUChEH;4&?e*!Uq@1Arg%ycbeUl;%9i2l& -2-4Hg%a^PM?17Azl?a{6#*LKNTFssPqp91oKofSN?#UcH_NUyzpO9-md7f)r(|MoiM9ctdd2*a0X3z} -zjwY<!(ik%x>Uj3$*7b>)o)y|oI5D{~9qD|ZELAC_ys#4^F#7*xU;GN&9qnFRs{_f)^>X@UN)xLyp9O -i6wpDbrdDM88@B0NvFD-BNxG7!V0XiARbm}v~3sDM#;|GktTD0KT}`DC^P3{$LXy3K@GMM^#MUvab>w -MV5RL4ARHrn+!k-RAnrt<O3q6;yH*A`tT|g{>M|{*{YxNsWInS%MOhpy7yITXZ-OD~iEFjVE=f0LP1~ -ijTx241OPdVANOIVEzN2UWs;Sxp@dMdGy02rJ65ib%xgWI-BEQKvL21!GySCTzyvAU{VuHb3*4pq8Q5 -_7-9$QlQLDK2{39k`hckZAi@Zlze^cgb#bM0P<8}^1T7G0aK@!5N!;QsG0UA4tm>jt$KaX(9&ZFHxqw -9*lG<#RK@gTMQF{_xnF|Cm$q`c3ockQv2trYWnT)t)Br=2$GV=RgFJ1txumHf3XDlW0c!}$T1k;V$_V -~!KJ=8uM?Y+lPHTu21H=>8FV5{W|M7U!Un=K$?0vS@vy^%eUG-Hd%VVhD7PdVq}e^W?MG}7Hd0=7BWG -=@TJizF-WBRH&o0l4;BmvrPo%#zKBod~qiIs}T5O5KrdO^ae25Q$H->M}rUSvd~SOO38`p;p@6V41^o -fb5VO)yKxXVTFpKc|scvC4?Ss0Ys#8fw?t+tpmHoceZ2POIZpu9s)EJF<RJl26#es!9*T>!2PMqg5K< -KKbA-eCI^|&=bn-gZFpbq&w$v|{|o~n<n;_leR~X;w)IiVfS<qoiwqcyZMY6LZ2Mvm{23O!cca+MAMP -hv?!-j$NzLrj*v?oC#z1y^p52OS8Q$lImCSD-_HsYB?PdQn9MF5CGW>7k|J4Hl4XLq@d;a4RR_!#GE! -C17D>F)kM;KdFB{LKkLS5ZHJ`5t+!H`D_%}!w<Of;&@WM~xXysSAG<h(3y&}hcj#w7NH;BeFvl8rR#r -Co|nb%u*40l`4z5h##&zy66kGq2OGx8B|5ZY;|<v+k_;;?*?!#BLX;R~05;%?<oUfr<fATBM1v3P!Ij -FZkYtz05#Pn4;9B=hLNY9Oub7s45ig!$#2tmn`crc<?~(-zD?KtnE_-!0aO8@F?mxcs_au((xTg&8Yr -V2gdk>B-5|$GI_h6Pja)03BGZ&m@szGWlEv}jC@8T6b#sUARH)(I(_|IZ1(8&>$nSe6ed!Qi5I4PYNF -*FSSA49#@wFkS#iS#UegPO#gS@D23|e^Qn;5#0Gfi@u#2=<VrWhUBJt8}e%QBtCo|5S_P~Ch;!HPQs) -6<2qRy!#Ms5bDQ*zI5KKlBJ@1sV6*l;oWQ$$+rv-{{B`~_`U+31r^L^@R*VuN5{-)_MZ?u=&Zb(^|z& -ScuK*U7@k$8I1B?U*~fNKS||?PH00PHq1TROWH@<m0F*GN*iuVq$}(G8ftqiqGHP1|-S})}<Ypw;{U^ -aS1XU^k-4!)Ia0jk&)5zC}?mH<Fpa<BxxF(P;eJPL$_`pwwh@Riu%yE4qJdGIH>Bf!4eW><TYr9Fj8o -I5e1O@sT>eQ&(0#bsJ5?te0wPIE*XYSzkr92Zj6(;!B!cXq6pAX{_P^l)@L-a*H&ta9@9b+myOs~z>1 -DTQ9eB1*SI1Y*pC1X4)Z29k%ClLPpcib8mX5+j(#X=FfUO5%<=x71g3-N=A)xFw)M%fGS~Ik+rPQL|M -+pFLfm~@@XR#K1rG95$SJh|VHgdX29BTX1)9&;v+ISuidh4tHy(#e+z3idH(t@hRBk<mjV*~Dd@nV|X -TiIz_YcD8tM3Q+^Sk#TU@&O78q<{)g0?7=i+QpR7$Z=CeQSZQ2m5J0>w)>-Pv3nHB>>gls_c%@x85{M --po5fe=w*kmR4<@ubTO+tHh)0uVGk3RAnin3(7`i=6|{zVrUKP(jG*7plcg}#5^PSm0echS0ndEpH=- -ilu*nx;>hy5afG}Wh3K#8-4_>Rfxsv~Icc=+qq#F4GLVYGbFmeuYIuh@TZDt5c?AmkhV8F%#6G^HLm} -PHp{Oj}Cj*RXw_5@uAj_q>8(@M3WB%84>h8!?;BUCjky;uKyLZ%J)%B;in8qMGKoz%LAUWWnq!ZZGZU -DPIoJzb}(z$_kHfpsoSo6`*4UzT6e%9{zE48Oa_W|WB#Tg7M0-X!!cF=q3>057iUv-5l%T#kiTK>J~R -`KJ>$y>!&*J%fgdN`mOxy0PFS@h^1?)joaz?RA@j-@sC9I!0#UH)#fH8$}T?6F2%xbK=S1CeJzAMIP0 -KfXS*Rn5`|TkisA^Z|N}3C`L%1c%3Owx2xt`kU>&=9XIk`_U}p-Dc-wRpe{nY^rA*Gjn?Ka{CFzSK+2 -c$Ert<_y2Qbqf>8gZlX-rQ;KLUrxW}SYv9QSRdv3SYeYH)*DXQ)sXIen*3<1Lfw@wLK|P?@Q1D~SS8_ -3}2ghB86n05|W=A$3Qyax?_#U8C^Dg_9k)^PXTZDbmM9HRYYn<k)C-za2)`~e*km6vfCE4qfnG}ajSA -$R@$^$tCi0C0rneSRO!*!PP8ZRF*G!qF*)jjE0UiW#{%j=C*AkKpT9qM^9<5UM5J%B6_UJx8xTmkv$D -wJd(iXJ7(zFCGtngyJit^q;Zf&;5WaWsnGqNpf*U;1`|nT5fVm-qfDG-!tC74eNo2?Auzl7g_Xo2PDB -dy4$}4C{@k_E#R@#sNrWW3SMWn?jl_HVwgsJ*orSG)R}F_&wg?$z=#MAYgon3F^X;Ky=P)(5nqZHegt -0vW=+BbSk#fy~r}4<lSjxBURXs)D&HmGz?TU%xNB9+D@!7!S_41%|8EzO5cmc|Bp2K8W*KGxUlbpN;Y -A^ZtqwnE4apMw(2r6o3#~rrsA4gaw3IcDFJ|VJhTlvVb!O+PCXYYS~D~rm<E!}_N5^=xiReyX#HS@s$ -Z7M&`tnbt#KKnuYpB&U-SYlbK@FRr$>jbwJgM)?%_929uGE7UmqPD9~}LB@FG4wI04)Px_{HShcQJ5& -whCR;^5_<emwm1Utaz6`pw(F9vz>Y{`|{-{q66``2^&{#bx&KYBtY{#jj;mFRyPt-ToGUm<e|G_8&g_ -`tg50`DQzc{}F7M1Bo#&H^U2;W!8w2(|lW3lZ4I$w`iTl7z6Xl*x$%+o6x+PjA9m`Jzw&C<*Ed5%r$P -EY%ryYLj}yIFOr#rvF6*)j-MYM@=0IZ{Km1mN+6)?yP|s>nK^>|-q`>%9BGL$rQzO?L^U;V;|wlYQLd -}A?ETs9XupxlK;GEma)72}@|vm3D65iLzMQx76!cyr!dnoN%Mx>?gqK6L_ju5IeaMN>=z!oTh$cT%I1 -S`s)#8lQ*5}JFTS4oJA53O~$nZ(7+o3@P4joUz1~dDk_x{*BcPd-0r@`+(o5wGWK<l<!-^S>05^&4QC -&Y|Go`|{3d@4TD9C_f}3;<%aK6<=<E*>?yfuJkDB0QDF@&Zl3hGBLX-sE;dL6Rafn=Dg!pB14}d_qo} -Z^fbd@PeK6cTjSbOf@+bV_8@{=KgN;KYss*t#I(*tKrV*+wu2*JbV9-R(142`Yrk!coe#+#9zdlPwfj -VXE$ydoS+fkX=8ZTm27E2haj$H+1vrrbV7Ftwtl}gXp2&69IlX4Lz?%vgDX!=H{9Y*_!r5}gvNS-?yo -xCWuEDJt3q5Ew-u}`Iffia>|(}Xk#lW8r8pN8&qBn89h#d8lyXRjMc;0fu5)8i7BC4*CG2$4w@Pq1Nz -ez!7xIXCD2OLofweMgW5^+oL1W`C@vcpl<K-rFT!h(zZdN*xdLEO2)W(!zx5bjK1)B^*z#fNh$r*zR2 -YFBgAWZfgelo=$u={ExW39-TLM9P3<?Ma4AMHJU675BMybtKwd%L@{|Hzj!1`N4C?+a&lmmzsPh=FGw -6J`rU4qlR@6n7D(<eOZD!T41$lr)u529RSoOyz*Jfz5ISFR>}mN=6$JJUcP%rV6Dkx+nCss4>J_TG1w -gum=OLQ^NK=A<7u3z50V0k1J+FL4Yl!y)QKVG_Q>}$sZ#XSsHrI;UyI(Ya+dK=hG*}dNh*Dr%#_E=f4 -)U;Qa<{2!y!*sG&u(`uksh9hv`j*NawJlHE@)<xl;$3is60r|RLp+EzTzZMhX_G(-n^d0ix-V3_gy-C -@8hJusNafS(rEk78jiITFIV1|RE5&y&xcrE9>slCE<JzLP!8%`asKO5!n|WNB&O$^y5>`m?5NCFFZ%r -kCqY*wm~eUa&4=&Kz}}lo=*Gi0)#usq#Ap^?8{yt02MctvOBz3n4qSU^rJu_PW<KS7}-OY2pm=Jym<S -QPJ=3fL#8i)P}28vuEJD-GTRJI_NC4uUFkc2Y1{Tspteq$pheYbsamwH;zqA*X@*GcKy|sX|{!YzQr+ -8jG^Pi&Alm+Eo3hlT9-TBr7I*>)vv3l0JGjO*W5h<6CpY^<1jX$q3p4EfzVJU)rieCv~d%~X;LH@`t> -S0_d{lBY|QVi6bxoS%>p+S&P<_iT=yu6aKtAYw6D#aqSfP((q>pIQ<|iD);pkkX#FeZVLLUJS2A~)EN -qhejW4Vl3DOck#;^rC58oTqHjN$UJry954e~CrgV`{%qReVcz(n2*is|j6pNfr)%f*5#NqZpXE3Fq4= -WG;wlQni(%FQJjDjKnIcpRjT$xUFIH$VpxXJw3gH0|(8-wrz5+oB(=gA?t(j%b(|G-)g#bi<WJw!xhh -(iq>xi6+b)3e4lfl})%4Xt1vY){O>z6^F{&Fa^7anrlH~C?HSEyo!?&ZAs?QaE&{NR>BceGIr1sn75) -qk$WWVPuq}5>}(ogUIB`(>2$J*^Qz?Hs$@W=aCFl|?u&3*uAQA7?5OG}+bl&}Q)-<xjOy<%g3ZZEO1x -W7?!TA{{&B;k0W!%P<!U-mngo63sh9H$uii&}sHL0>WEr6!&feWb7Ey-dU|@EoA#BN*E{Ss`Ix?lL@w -BktGLVp$mM9}zxczpeN!Hd;OtYSZB2vHSMAI70P~8Egy}a!*N@v(6u<_V}U6sh`&?Wi>IjKyV7j)Up@ -YVzzqCk4_Equv}g{w_kmM!S!ap4Y#T*QI_fP_lO>D$|)Z<1ZHj#HEqHfALmx2N9TV5Ar;cQMfd_7xg> -MxUJ~UxJMev9t-amrz=x0>PM8*b(OzQ39svyH#P;qMfh=<TzMnSPazUR0GbK$Yfw|!sGSf6#(&UyjX~ -(#co=hd<}bw?p!LWK+NuHXN`aydZO3672T#<xnRd3@Z_k)92YjjoZJK^gP8%+QE6rW9s6l%+ajQ?%7) -g0ZcnEdNv3;}rdarnZVl_ruRA+sgCSodcR~*cU;RqQm{NiCX&xq;zL<JSf<S4h8=V;X>|QF*xTX6zvy -kYQUe&%ypBtJZXr=Ls7qWFyA5z0r+Glj}QZoHcC0Q?3MmfrEeCGtmUP34zu~(x+Z<&egcKnTQZRvHSp -7}vVssceZXKl^=B%^vk$<7KH6mHQT9u2>YU3E`z!-{~o09>6w7QmFRQ3{+C!MLcXQ`uHL%%N8pB$yUb -_Ch9q(80*zW?{AfphpJO3G~c#1~gpNs42i6?`}@x;>Y*R*xcI{%^pm*VRC2m-dUnk2UpW$PXk&C&uk0 --xZtGoauYFI^L<s!uC-+gAtj6LA&8x2Ma;{=1ip0=<#7SJQ*xzE=4!`DYr=3%7FIFJPqT|9Ck$o^$rn -p9Maft&NekZ&rHz!b-q^*LoL}fMChZ@?G)%5+g2ob5y?ztFJ$mzBe<QVy(}>aNyzZ-(AD)LfGRgmt#N -U>9e^aMN|8p!R;4Gd;>IXP9Y1klAJ((qZtw?lNObvncJW<GVs_u}4T@Ds1qo2*;nzM5?tWBYxG<p0y5 -962_s>SZYGTsrS>5bX8b(YBWP23q*gh`LW=0sr;V>9jiixR!H0a-Wux^2mVX_O-~u~tKxppjL5WuDA( -x!h-K2PY9wHZW<joHdYTG!8pE4U9#Y+r*elCr&Of7@Y1a1$?n^+XQ9=t2SJT@wV6hO%gN#Oi6ka0lve -bCPSPCpK$<Rc0N1bVfqrZhHF9`R#<E8=eL?q-$Z@iyy@w`r&<%P^4UXwa0+wVeui@kMtzuU<v|Lb@n> -WX%x7dqYQ=YJdfP$u;K9y=*5^&oY@hR0QLKRGj%_%LU2CTvGpNx!<jYEYnQWHjS5^DYs$E=@oIwuqSl -NVDwzMkBWBm%sN9rlsQbs#b6zzaehjstB&==o*3kaT#>BYAc#XJtOIiP6=OM{^_qE;9S;x@wPZ#zxaW -IUiBG&3ixMh?s|1=gVJRbfCSm-z_=INs8$?<F|m%W!Rlg!*ejoS_m0GuTgm4Aq0Dfp3<@zmBTTnxF|W -h3ZYLws&*#4m)`V3|a{qfkI1(-(`Y&KsWIJCd~BdcZ8V17e6&?D`eXVAiqasMK?sdxeoeI$5^zIj+)s -}%yZw;y<fku9!hMK5<aw3O3?alY^v8w3|PXbmv7ztcBPhE#324KJTF%|0R@8+ewbW{F-F_Q%X+#I=Li -Ku<3H{029l1{Cild1ppEf@#vEzmrX*zm`xu2xkRGUge)Z6K_0UV!X!;J*q)t{y&bCzERDV8x^V%5S=r -*C;U94}+u$qtpI$&cee)j$0mBdQG=%m8LmWn(_W|P2Svc_XBTxVsI;gEH}rJT|?TVFCT=!w*`ne7#1) -(>xf8uETg`w<_CE54CARyg&u(WCeF#3xrZa}`PeFSL(OPhLLUk6#@ORp;do2i=1oMJzwu4{(rB(`4jG -{Z7tC59yYx5AsPrv?tqDcF_SiR6iZVBHY4=LyTf9Ks&wA>7d=w{`;O8?LF?95xiVEqrJ!dGs0D)bwNi -q^(g*8BD+RZHr2df-By@)U+sPGd}C&X(;5qL@6*?G_T;4SuuM6p43v0+!Jp3dxej^&@AW|5&nd67dW7 -cMdqAE!kT=zfjI~c8%6-YqhavQPj}`IwHifyhV|Ut!c-V`Ghs|goj#iH9;r`0`-naeQStZV_9`5(g$` -zn|oq|;mkij5jW7bsTY#O5wrJy0ys6k8Rl151ViNbyoGV_tw1LJwf(|b!}lFW#W>PsCs5kp+U(%^-;F -K=U;jkGZ56`O7qPdPTxXhL@h;FP(X->uJD=ZF0cX=CXy!^Hf*=8IEk?;Oev>|gQIZ9@=>$;F%l#Tc5+ -=Zo4Vu0fXDgH<CQE9)1s$+r_pgl*?3U#<{%<TgR~hH>6f5@Njek=pdf^zoN#3VoWuxUm*{fU6taGgEs -BeAD#Bx8d;1A}=^q04S7+L?uwLcfo$CqRcMPMJkgTn)~bm4U>(^*LOGvgTd#z@2rY@iw9!O;r#6Ca{R -{eYtb{W1GS?hw%p9L!&U1TY-vE|cDecNBkgfK26p@`Yu8mo)@aNNounx`_CTChdUox8=*`X`_@l{T%0 -$BjP3BD@+>W`-9>5!}GEMq(uglC^_l%qGord;&>Ea5t%MRTR+^fepY>rPitk7X@M4`o#WFALF09O{qn -Ahm<lgnXl5*)rQDc2zJ{6&^FlWe@jr<BSJ^P=~2YmckaQ)ww>_gI;TM`J@by$*(|RbqxQ@Irw?Kgag4 -305C;`wG~_=Pd}45@VNqmQHq%ECmMWTv+{Cm-y*75e|~YgN?D08Ca5nnT!iJml?3>BAJ+wluo!Q1%;X -$g-rx`?=4qaqoHv{OE6OChN}3t!Tk&}a(xyHc!o)n4+ZBSvmHt^`3}kYsuIhxXD|P*t?j(C57MA0WAf -h#uKgr-UOPY0zio~hd+&#w&-y!J?Uh`dt9qj2$^HAnFG}Chndj7S!`%6Lr+=qs8vNK0m<m5TWBXnCWx -(pby#3O;z%vczXtq4(T=96H6F-E2qMp+aqS*dS8LAwp11DzPzv5}9BVT!R8#&hs`0W)Y9Un{5dGe$8; -)FC>wtfbj>g}IFjkyufWwc=rmxa~9;j=cX+-mgoPDcA@XFgv>s)c_KReaB+oWVaJw$0~nTE|0ILi61# -W@DqEm~=BO!Hxah6-VE@nXr+ePZ8>o&-582C7A<PXqF%TtxezV!t#ZUQmhw$B$LdU&B$}_&9XJWAQ&{ -4B=Ae#@p+Nnh70j1#A45E7Ud^gfhpf=q~t~RBTyJSTj~jHIF!gyvj3Rx9WlxaFK=s-a$Yk<(Yk4dDRF -#RjDv~kQ&Y{y8QNouu#)*USL<^PO?%gQ(E5Huqkyy_6Ef^4n}+`P<Jq*i#-3(7?+)1qe9uTu;_u!su6 -Msx7(C0(XG13R>8X@IBE*f^ZqEKA90}>Ob_IM+@B4()x}gN8{M}`;OJVW4o(3EL3s6e~1QY-O00;maO -7>P_e-97V0000P0ssIa0001RX>c!Jc4cm4Z*nhkWpi(Ac4cg7VlQ7`X>MtBUtcb8d2Nu(3c@fDMfdrN -(3L_d`T;I{E!;_QClb<jgg~09GqK-qw6%|DmiH0n9;LLkO39793K?FaR13rgol;5KN!x-w>C&GGTT=n -WdJc@X9rc}N$e}^<qjqv7IyUUV`Mq|PskDc$8Gn$&<7o)$kmWtPyEUbUYL<TbaN>~&=~q704Kka;!mo -EhJODJoxCt@Y8UQ5gY?ZAOA;g`qmRZx!Wohd77#VX&WlW%NQa^rZPKgYet}<j6pHu&G>Q?-x^7Up+Vs -RuAJ3Wty9BxX*QoI0AO9KQH00008031s8R!<ka>N*Di0Phw603!eZ0B~t=FJE?LZe(wAFLGsbZ)|pDY --wUIaB^>UX=G(`b1ras#aPRZ+cp&4=PQWW#4~XG0aFBnL7TL*Xizjkv$SZ5vRTWbN>X<G_dS=S_>k=) -lT8N$!<NYVzULmY?zl1Rd1I{Rwf#e@qilp;sLkJ^w)c;382;|=?tT%S*m5ga?bchx2EUZqonTu0GfFK -QCVMM%%WJ_}rNb+ux}(r52zleAHKJwM*jw427e;jLa@v2u!?n`un)i)tpe^VRHvB4&qGvo`O<V1#@wA -_0N}-){X;*LJ?k_uO82(2CBVqice=bd|wkvkp30MyEPbz<FqBOHpW7n`9KRWlNW@ZqzS3PiT4Lb<E70 -oKQK7Q9+8o@p(`*IjMCs{Nfv{pKWXDjS_(4rMu^tD(d#T2dhD><B=xp0qGs@|lBF`n5o*&|2?PAk*H4 -X^i92YaLdp$f~(ETBZ15eeqZC~etZoL#uLE;(7aAdG^odX_vXG9t1Ulp8oMd+gwb-Mt{LvftCEDTId5 -Z$#<w5&K%HjlEkr$(=fhss3Dj9C<gAmZf`mP<qmis*R$Ywyjp<z*Nh)-i|Ks*p?aohz#>X7W_x{TofN -SK`Ct7oLN=HV!yAdl`F+4tVpAAwl!i9Js#C(hV;}sJU;DYy-Th~@vFH}S@s{<?|c|!za>{v0kC?6%f0 -Q+3@?L;P+M3OdzO9RP)sRCV2T!7;%DRRog#~Zh-y}aI7&!-1*gueR(;#a+Om_hyQ0TftJQ&GmdX=BoB -NskDclrfZHnJp!v<xH+;o|KQ`+VnOfJAh02sF@=pt+v7G(AnCgio6t%=qRXfD1LuQ1}_hRBBto95m7$ -UbAMYp?&X%<eeyfHo{l%23_s#VvDkn*!GfO%KXgJg9wLMKiLddA{uiei+LG25{E%18EomjlMbvg%9Ge -5!yT^fe)yWOk!0<2sS0AQ>|GoH|Ppv2*#4}p$RgNI|&zVq?~ji!gDpYC~Fs=FcS@1geoNbyPx$}F>sL -Ms`{jQ0ns#<Ag(5H@Ifh?uf2_(wZjFkk?{7&wNxX)mKlNJ5L$O*L+&qnm7MO8Fk`S5Ig`ByKczAJ?~6 -FU82>6%?gSfdM~q~KJoI(!>{BM<H+90(j(?+lW?oxQ>@yNnqvT;cVi#}@vE1+t)l(k4lhS)XRUF(uvB -e8(RR0!(s8=VTQf)`xb?4RnO#gxR=Ku$?lh)OVcH^5q6*H(t)1EIT&J&`oOko05Wh+js6Kxzwo!kp&> -)gU6dtqCo!Q=sXj+)6Tvb>L&XaaSboAFfyU70B{Mx>OvW`?byZ`_<Sb}qi?N*dvu@X@2s<%nSmXUR!+ -9X)pK&wUE33WK4lqBI9W!lkiw3pS(d>^l?+X`%9K$G)Z#x%Wfb9FVCnrsI6hhVgt(U$O!GT*#GJxy5r -WiRxhLk*3B6hJXXWWyJfByfbLL`yb|MAS}%~OzA*n^AVW?sB1%Y7*J+Y0hYY#BV;j{d2MESbV(&D0^L -GViMNAw|IZ8s8Gi*yNl}4ika2B#2A?S)lcd6?EI5bJ#Nd2CWhtc1W^TzyTsy*+<o6XiFw5=CG2eq1tM -IBYV@6<J!M}K4W-N2&QmeNn%)&(Wp1ZCTa<TD&Lj6G572jy45bGwsHYeKilUJw;tIwnrr<*)|@tiQ{9 -B-LD5BVVe2#5aq`STL=9u4h7z;(StFU)$4L}8e`!-{vR??R!ntgfe`@=_?roZUI{aaT@g5{1?j-xlcD -E9VdDLCiaUt|UO9CpE+u4SWsLXA`|RsiYz34qKTdH==#xCJyjZ!7&`{C)i9RB}heDg`ZBVTr)-6(esT -9UKAJLyj2~JRVe6!9y~j2bu+{@iI-KfSoh*AMc0@c1nZfw3=myUWclVYCzQ06i+r6;W6I@(c%(ewQ(} -eVI7krxPR{qrK_JcA1CSKWdUNGkW65q@YJ8n88zQI|<P~9rKT$Siy*OtT6_gT9=hzX*1XF!sy1R;vfc -UNGDJ@y+W<7DOHlNu>sZPL>EA$}etkb<oRYgO<Y6-cbtfO?fi(D~cP^S0?Q$Tkn5jtg@$G7g1M26=ci -Ejor0oZieG%ME2v6V$2UEZVv3b?s7h5lE&{iZH1?*0rYesOU}bwPJ2+i*e=nvPz6kbAP6b9dsA>86g5 -c@3l&gM0a&eVD$du&>v$mv+4l;SMJtM}7tnGIyGY5x|nwv;yL$ujPViBNj|wle#diE*lJ>|M0LsalM` -KsxN#mE;5!8rzH|2fdivW<1jzS%u68x99f4Y&>fHX4kl$^#uTSpE0&&n=CDc)Dtv=->yM~Jssn4F^Po -F&<M;|YO}gjGW&uz0%#97>@f?I9o^GV3oddZJ1V{wp3SpcRvzsBipg%tD*wZwU)*}G00mam0w`iWjjv -H6FMB6ZFcufVBo8n3yqN>UjLs^0dio4l0QO;}o=3h`t0|XQR000O897^_9wnxA!H39$tK?VQ-BLDyZa -A|NaUv_0~WN&gWa%FRGY<6XAX<{#OWpHnDbY*gLE^v9BRLhRrFbursD~O!3fSV7<vF&*aEVk#Gmgq#S -BDs>BH2d|X9(Lq3X^S-sCzi+=ayYWk=skQyPcJlB7szdF_nky|+O2@E^?Lo8H0?1Eh!h(v49=dEBp3h -e9r2<|$;#}Zw+_OAc*R?NBDZCPRf3Y#gAbU(HlB1}C<@Id)S4u8#0YeS7=y9~P=t~9FB!n!2mR*kXk> -zJKp9ED{>DHk4v;dy_BB_bSk0-gTuXuj<>8H-{m`*qa$93xt05!r*3v}aK<_GvF_#5#A$&i7c?FRXRD -Ua3%mEC%%#jIn3tv4!n+t4bG)}$P5zc5r9Bv*Z^va-CZy2$*?~<T2|Ie=P)$K<i*jN3?GhYrHWtNwIj ->^%IOej3nN&^Er{=Lh3K9DIWfMDocXL6G)LFHc%PVu2oSjoR*bUfB+yChHqjV+*FKr&#*o5P?L)AL)e -G(*mC@rsOiLZz|O%!w?ZL?-szTh`oJCM<CwYRHo=q#oL~;%{3(Ho}5V(!es45tjz|ygpk)(FV79JnOh -)i?^%|3zRC@b6ws?9~$VLJu=kG^Z_VJZl2oqfnRb&9ILRV*GdFmhAMFM<R8y*I{Hyo41tbASZF`tRR; -TWkeOsxOwOJ>Cf9TCsc&JmR$iqyRyjq>w9}#Z5gb3bf`_fek7;Uc8rIZWHkLKbb&ii4opIQ+*Rjjd#i -d0Z3;IDBb3Kax!80F>%3JwB3^uT$ip@PM8L55)P)h>@6aWAK2ml;P_Evjbwg>qX0019Q001KZ003}la -4%nWWo~3|axZdab8l>RWo&6;FLGsbZ)|pDa&s<ld9^&-j@!tU@A`_G_Jbuu=4Lk8mj<+0$996oZn6Wf -fn=u9kSMX#s%eU3SY*qJ;eX$APTen5ch5}tV5`ZhQ&s1FBgL_6`+@D+y5_q<w2hnzbxRDqAKJFIH`<Q -(<<R!C*}iX&tmyjoQB=H_Ob>Xsl|x_dhEH6!^&{`~IJi0P20QA5=wT&Z{kbo@!;;+$3hH0Vt`p7ul5I -y(S8H5-{V4cpHv7c?F~Xc9Z-$#@-}c86_sLfNri-RL@@g2nn$KqpuB-g4t0lX=>fIyw`>HE@{B<{5%x -1G)T}sK!2|j+=@eb$B?XShPf`4`Oj%`cHnVJDBu(GZhH{&GhOCfp1wr4gRgk;CI8f#w6X!=Jt3@|7jy ->SYjJhWq75y&lPhq9?^7$ceh7JJv63EXzvZfn3E>u~OH;H=jtFn|Ea(DM@T&PvHjm~mg2gLucbh>`Ex -W?u^=)I7n4#zDpRY`qqZ7}o2#<n?~Zc0Cf#4Z%x}z&P_f>?Ol_i^76&0Ni{SQP}%Pck_GZZ3DPW@4{Q -U=fl`H0W$!C_3GE`>$j^yvBum^A)EkL6hF73nfJWw=lz1n+avnJ%@o9@9zV?&i=_qS`01vBMWv7f40# -W<6cte7MR+xnE}=NPN{Znes0i6+2qN43{w?Y8gHj!pgU-Hw*MDPG%Oz{tfk}{7xj#=*DBR}qUrW9BX2 -QJP{tODosen(g0GBXRsibz#x>icDt+fD-bQ^w-H837LE<r+f59Phl1D{cv4{cqc)b^aSau|BC9S1J2) -rdE2Bb@%)FoDwRG#>)p<aON!))Kue^oc%}y93=(AiQIvM5t9!g$%9ML*~>=26#rLq5(OY4To}I+6)-A -W1$vq`@8no!Irk77K7k2dkEBY4^4Y&kp6Fn_U)<dAKY3}FAlo{6<d!LXJlQ7<0~{FNKmt+o0hJHhb=) -C;HbE!C77E799)g4o%EWt5T0&q^kxHu^}cdJRH<Vm$2Nqx8H`eHIBIB6&HUI6=cP6t>~!D_t>=Uc579 -X0AcSdf+RSY73U<Th!1t$v0OIe^T#12z)u-|-)w&DKi$#H`=hseLKRbH_KSTqH1%(!9fP4M|dusrNXR -z$YaVWQFk>0%d&?1;OZy4V5)JEByaoYlsWY3|A!3~>|HF`=1$|dteVwqyv*NlOpkiJ5b;UE$C7T#a+u -xK$F9NqKJfJ!K*2|cD+c{(dpWph-EOZF(r75-XSZ3y$1OnEMgU<&Cv_t0v++<_K}Vs@(TYq*%*?82Qb -QJ;BjKNp3sY;c1jx2+hmI>0ngeZWibe0Pp?@yEVz`$@x#-cx4M&Cw`{c?9W_!5(GEh}sKEfo3c;&9zf -sX=qB7)nMRJkS5$>Wujy(05pH40cFnkxotmi-aY?-eLFVQdI$dw7fz|cCP(yVhg<cYz<#~IVAHR>4Ks -<_1?gU@QN`^42JN!s<AN)Cj*@m%v4+vF;0=RO#?a+qtq^pT<DJC%6TJOc`?g+<@vXZ+dm_bsV_fgH;c -wghUJq49RJj1Y3IZkjAa)OU%zhwf)~#17f!*D4DV23LE(EvEM!AQhoyxv?hGsR998i^GjK=#|gRVQks -~HwO>XA-*Ui64)gnV~<rxyP&fB_sbob6U<NG#+-f4&a1nwEMW>h0U_@9Y?DId8x|eIdq;rlXBy?~K_| -THuP{TzP6|-Hr0FZun`P-4&ql2N(b(gdvvyfKWhYh+xl}>X!0u)Jdo~Zj{P=BDp3!M5JK@w$*|H(?VW -`;&E>;_BVy0t7+s&Ef>VEp@GqoutE@p{-fBn-FdzUooXX0YNYuqJ2Vz1H6^}#dwu8o+Bv={U_an-%;_ -(mOl4KAhjwjt5yqb7(l@TwNX87^7XSrL8yGO}_bLNqWel!`1>(>QVlQ}a3D6b#=Gh0gZu_<MJbc*h=$ -VkJEbjR*cZ;~eV(-R>yq<GV&}PiNxF>O#oFLVbKMl`_vtprPcc8oG{Cfd9Ti*`Z&7EZBel8<PcfQ6dN -)Cm<e70OBPfWI|IP&4pRy%N1!7^RNKFif2o%+@7?V8<sgYUkDgQK|#rhb$Cqq7WLFwpMf6`tIFGGqD( -K3iYlF5gQ|_{wv>CT1C-&bu%3oakQWPJchQFM#T?urGPe0}l0{jT%-_f^x1oJz)mB{K}73p5U0|PEJV -zc`!-h5bt)EvwIV1y-fDUu;Z;`p}UC$55Q|5`Pw_$8sp??rL52{Lwov(pafK;Xj>1aSlg&VM=v<U4m< -*0pHbH%1WB>{V_A>zlOS+Rci4@;mTVK`Q8pGB9I~#o7goYvz&)d+%0};Dvq87b_&&x&2Z;^~>l)^iN4 -w=~@B_H>GQseV9a5=?C+MZF*^R}!N-3+r9VYe@h{9t#40)K1nZ+!TajP6EV8sW1UiyiL#({_bj&i;TL -0Fc7iFecT;|&e?HC11?$sIaHCVcfTiUK|4xP6CuDGz+l(%oiOHX$eYc7FvnnVbT9Nqm76%!23w8`Y%A -f?Fha?^2Xqu<Vhx_XHSh%DU_Mp2OlhuEiC@r8L+!hl!?4nRWyc8+GIA$`t`4m(Dnxk*Dc2?UUxygY`m -7>Q;$O=mkCgFWir}%o7_*+-q;q_*r7yiSk0OcVmw{w}xY^b*>!`<d`5|XGr2Q4~}sF1Jd3itRzhPZ+^ -}NX^PqYRDzL@IS|xbrT~EQCH4LVuh!dh=)rqA!<DzwOu{VE7fD?pi$@d(rO>Oy?3r~v<XJng%JGQ~r2 -<{-r_Dqth80II3d9g(eD0kxv#vu|95-Ezm^@f9HOxFeBm*`+b_0S(p0c>i>lNSO%HTqCjT>&#SGRWoe -q1FYAm5ZXlyGm3DtW4AaN+TD-oZk*fu{?a@U!Qb{=o>;0-tkNobq`n-83P@xYFLN%+MCpax?N-@Z=SH -f8e_ZoozVP=eIz$CMd|2yJ4j4J{DqRp;8*Ea1nvh#RRH7j}1CW4eBy*OhmsMk3d_n77{D_gQ{S2Rf_P -67zWh79P8oiC8SO|d7?bovSAz*2YN(cJi)FKG;!=|!oHV)Qt)8hUVLFeM7qF?*}tK`5b2IZ5z35t2CR -|jA4kcT=%8tezDx_@6-8KkuWkzaNcm1-Fkgwz*Mu_~q%V+9&{RBms+^8fa%J_-B4)}TfJ3I(aUfCyzZ -W*I$|crbMTxmJ5{U?$HHVl$tK0TLDlphVp;N%XARzDrx-KQS$)YKyj$!g+UE9r-jYKbS^3;I|3@Yh4v -*)K&Ua@!R*1M|J&<pI9016*))4oK8H9}CvW#z#EbS)Vsp8-e6Vm?NSM6K)M0Nx^{j-!7bkKI&F0~4aW -N5_Skp#;|s_#0L-Pe?V`BRhcKxFl2qf<XDehHLS_i6Gb4Ay#g6*77HIm%abv#QncV_Y1fn7VK+G(dl$ -Fm^UWC8>snX8H8`&7eG;D0ZAwZ{zIJo1Q=|wZfd&|C{8RxUitTe{S9;#094_c1g<h$#lWvo9Ievz=q{ -B=P3{>n2kZBR%GJVYRAT>x(W!xU0=u&1urp4$1XxP7n(g`Lr=60D3<8655G&o6xDnM}q!;m!LVW{b&? -R;g|AI7iq?xY+^qBzm%zi2;_)XST7}O?%I7+uZp#TDPhESYHlGvYs4E#%pYJSP?#Us_nv0Wl4qrO|RK -N5Q1gWV9rA%NsNOzhqFF!Xyh7Ji=a_;8bM;Qij;c+Ic9?gw>|u28r-iu=QW$$elb>aPN7zbBSCIew^w -+?9Qmz=3G$QM9Af2lcs$eb94$3K+xQ{*j1|XFqO%jj*o%93p3z$3%*5@&FSo>Jbod;;-Rf&?nSbhWKP -X9kppsZbyHB9VJDPA74{VqGGV_-xXxgh4nediIdqpN^g+t{P^0f_a9}!ZuYuEMY)Br8VoXBUF0$}T(> -D0b;rv45~P*=rF_8cg>Iqpfk4&ZM(@=uoDD{@14_8Hw|edP5Xe&MfV-NP4Pp~`Z9>@wxfzei(9}~if$ -6&}c84-<2$=8uviFW023;H8vz?cpKp`XRw2bG+wRjK6BAaaV_Xtvid;FS~I=n8c<W%1*u+u@*An07h1 -*XumVE?&dzYkp&to2gLOWO<6ZUm<A{+_f|9=&)~yiTiO5%iCZL@p1Q1pX-fwX}MAnrprDnqpfR#=5hs -oKHL<b=UCxX!bP*NZ~kdNEwhPTaDb6jeYRi_U!|2?6!mY8#+3vtBRLS5qN!qJ{;du!lYpah>o1*u422 -iX@Nz4rzV-5Y0HQ^Cd_4m{y_Ny`)1)MJYD6_j(lD{FCI?;d`s?RxrfsGnaxA20j2~Sg@$~_GLhC~ROE -Cgyra_iikuj7CjjOTOI7%J%oGyykqyjvM2rPY66ckJnTfo<tHGik%ifDwv)q3!o_{<OKx=RQ*3#{6k% -T7ise3vwbG9##gp)R78y7+KdWJ8KO3`hzrq}nsChd2u;ILT%<5`!Y$ViPweQK;kMrZhl$qS&4F_W43( -RkV9L+;_EN}`!hWQZQ_vQsZ67@xhfmz1>q%gcd3q<LR+y{y9RU(ZS}``521f}88YqhC<({%ub4;*z+3 -eSLVkD*g-v<ZVOHX*yLXz9d{zxl8}bCdva?i9dkNx=r=G77+i+i{9ljUy6&>rFx&+v@5h+=qq>$J3dh -jGgo?ajp5IIoHy0_AZ!zhGC<=F`|<!siH44C%FUosIp4AW;lpc{bikNt2)f52gSIy-WKw)n+kU0<2{w -a4D^ZJ}GEf-eJ<FGT1<=phC&#>O9Kd?Hr@ul3T%MyatT`Xso+qg%#mhGHq~BgLt)`yBT!M1`vZiJ@KN -E#m@jTaT7sLp<`Dl9o${Or>bv7$iR~~Ups*_qTQH?G9W8E|YQ;y=F$}#WTc8KW|H$Miu$#mi2WjgWv= -GFi0EA$IKKv)|$+2Lh-^1f!&S5hXty^CwX=2uu$p%BhT`7??r`SMau!L#1hm(t|vFDa*7hzfX-S0O$% -KL;el$XS+;rc;-)%MAvTtxAoE9vnS-X``c{xuFD`2TrzVX?0>b2rLD5wNr9M7MWGIr4(qM&mJ(HYNw? -iMUUkec7@Zf%v(gJoN|xvQpWt3XsM9Q)LAVs{33#v%{`xIWy?WyBB4gjY5K|o6{)zfafK1|u~TWl>w% -w>d-+zBTumVtJ>X?3BDC}Al6SbslR=2<wxKLxxuf26l_|#Tu_FGlRjCEa&7L?7t$^LXi&Z)9FhSCE%@ -AxjmFW=!UfqAvfVm;@Ngg=wm}1U$@0Gd~l`x-H*1NGLqapTtZ7VcKhOCiLSn?q!`vssH2(@5uX+*N;1 -P_tAiUYDk+e)Q_k1bYis4)e@D3fdVcn4o<>!Z*R*MQv~MKe#9ULy0YTtV1%y+q9eDp|U=6>6;sr>fyp -2cN}U5JJh+sBQgQxRhPAw0#X`=j*yON_xfqs7p1tvQaUfUNV&&^MV2E#zC?XgT@RnP=OZRL~fJ$M&)S -y8DZ<b*x4SpvRg*7g>f{=R2bLFU+M(UYAVm;d@cpV7Oo~IO!v&(Uf+2y%A_a$0Dc3ecO@BuGt~|X_Gj -_P+1RD0GHPhbXT$4)4ZE<>$aW^Jv1+@f@=%7am&kVPcbK+rFwO7?{tR_IuvG9A7+*w;lE4({2`eXFF2 -fE=aZWj#b<QN@^Km(|fY+}#4Vo?hgl1mQI_APm&abs5c%|t-&Gk=p(>^ykTTY=llLw6Nykb9Sb$}&C& -9VEjF477Qmb6-1!c2<h?qJhSh<A8x*QT6`B})yS3m_udF)y-tuFPyUqlDR^lz404sF%@?@*1FsaNvKf -(MT;ZJ=D-wDzqQuxWzt6x+E#=@&@bfPTLHek9qJ0a&+g9rDoc~e+%+b6JCd_t?ce^MK$jh&uqF&@?dB -brjM$psN47k4RU<QNijAw(2Lmbo<RRETsjOcXP@XTs|zm(ssa8Rg5+3RvRqkKQmGyF+LnGlN$u23T(O -`MLeI?kP~!oO9v9c_AxMv#vWeDP--204RtlNWJW=~GJytthg`ZW?I!}cKh$@;$c>ojAfP_;7;#U`5>( -ESx@fO>-VTAC_a%)EaW>s$xp`$=#*dSJ5&*z1Nb3L)6vxhSrIs(p#rO&iprILqNHvWA=0`Yn>Go8&y8 -)=+ARCus1kqPxoBXO<-jRyG=q8Q&98Iz2_T<PN_7A2$yy249E(9$dV*WI*9i(KY6{Q}QC{-}_9{T7{7 -9c$BfC{!nsdJ9%HFZ!=oqAyz5mte6yVQs(F1Efn{34duaYW4l^eiybzea2pc_%j#SeFx_eG+TDy8G|g -uul6dv61+~z4XNlI7xM{^;OirUNm4Z7$u%@~<63KIIw?Ic^IL^+>hMrqHQl%cx0|WX66tmLykQ&70Gn -&}4t&cUy^3y<XkN;<P<=yWN$A@Zt~L^|Cw&veZ%LS=VxptE#vs!Uif{3l>g<N8nnsitGhHkeP2R_ls$ -8!X9EmuT4zvlh=mr>DHLp5Un|zE_n`iv4Qk0`base+5VyC;!NbBQEMFxASHc0O%@#@}#FWH;Z;ru2%6 -RKqZ2H|+`GC$PrgC9bv3fQ^q_zoK(aasO_ZBSj~w@*TCq9>>hHNB$$t`&q8{aZP9U5#$O&*}lfjL-&5 -aAmEed!-%FG(coYrA_Y>1z{k0XitO$8Dz6m&P071>jE>SO~gSfd%_MS+t|{Dqi-Z?dl1?7grxR9=XEU -4)a9i<w;~kZS|J0@LLI%u$)FBGnaM?Vgu7_~q;v@x*zFb>zT*~T+-Q`5O0@lriVrv8_hRDKGpGH6&q` -$9m87OS&H7Ww)&b#8ec47G#l|2-9v#|Q->4VmBAFuTZ6VNr5fE86Tv8Ue30v5LkDc9@Dhjt9!lP6@?5 -@$UR9)#HN&y(RwrZw4w<D!6hW@PkIdKJ5nc1Ruyz6->b12z3n*bE(???ABB)t6gFOU2y|3ecL=(rwu^ -<50}Wd@h!)x9DPN?}aZq>=KYBDV`NEIFTc_Ww{z0|XQR000O897^_9R`W2XhXnutV-o-XApigXaA|Na -Uv_0~WN&gWa%FRGY<6XAX<{#PbaHiLbaO6nd97GmZ`(E$e)q39^Ijy()v!GVOM$IhhhbPTG({I62xM7 -0idjpdMpAaPApd=b6m=mbCqY{yC~ThlcP>0ED{C$kFoi;KUdYud7rcZh<z=1Fc}GrpQDCYVuVkF;($# -8}7KxPbD-(2#+3zB$_W|F1qF>>~3h1+5uYZO+eGXEICRL3<I5D+{%nAW!cPJxbTp5WBbBJSBF%`#w#3 -Hwv^hf`U;v+f9Qj~B>2Pz0Xa?Zsm5t$}GJOX?RKOL}r4X<9q6{;Ka<JJ?|CF$XLnW=jO)Z9IR6kcUe3 -|v>ksc?bSSy`ezC7SX|C5+(j<TpT`&6Ut0u*ySgRFm?$_01Ff?>pfH<UT11elmQ(b5MIGyBwM<^&(vD -Q4nBm_CuFG%a$LU$30En;lfB9L!eVQY~VOX)$>IJb}57K(O2Z8^eIgP<6M=6(`X#wOR{Vcd|m2UM)*~ -D0v#aUgW`l9E`Z1K<t&Zri~|Xi2p^N8!QX`7B3N6!c+aGgYrph+Es^$7dv~TaZise!rhNuHT&5v>fh9 -lUIRxGtDuG}fHDhFeU_)ImsfH^(MXEcXI_uis@O@8cG3CJIg=K9!k?D-)3x!ehI&j@viZQ=Et5hx3$W -vMebd{@g(s(9v?CXdA)VzE11-qmYk}8|}G+4`TXBL+A6R>YOI;a!xYDi~cfOj>pzN4Dgq<vD?SV>*3I -*CIsCp5*ALST}$V^q=9(zMbQR9wBR*8jw|t8{g?b}41Lyk`tkunb2&f!+*kQ)>R?Gxf89bkB-RV0C`P -xb6-W(hIs|{b?B%nMs1@M=$c!44+&gPS^S|)s%`#$rq|}n>!qC@IQzpQC$2*`KG)F-c29bbE|uHMQ@< -&7&efklv&9Iebc3r$;)@V!r2{e`Dwh^Zyvo@Lk#^_pQBT+8SFRWet4YTmICYZxAfYN`QaP!xPkHCa2* -lyWuk(GUhm^wAPopC(K=U0l5@N7X!SbluO<dAcoeXs)+&qRidX-k;Bido^lJ51bA5e%0e`n@&nx&b`o -hIx;)Qc=otbLCL#3N&R6bFyMC-QB(cC!`3pa;xU&H$pYc-4sZ-mV1-TFcr!lkY-yKa>3De}Ng9_<PnH -=c-s2xxT(!Z3V(6)ZVT$V&(g-NrFP$1DKuShUf;(9xmcw58|QOY4tp%HW4DcWK;Gdk*-{m>331{5DCc -w_4L=y8=HlJk4GP|IkiA*P4k?cOvASkTpYZgIx>ToK+dwQR$wBceu4>`-XN0U42`V?QjcJ(q>WZ?4Ni -;vzJvzen4||HC2Y9XthXh&giiw^#nU~L|R_f<NWI$D_oE?k=LY)-a{!ly+f-AGowiD1#j;5P&S2PbwO -5HiE;zGMnOSiSJDkvWwZ@-B?cu@8xrcZKuHrEwYNsmu3?3GMLDpID)HY2tCSSBwZ5b+cxPTqn?9o1$n -C+s>^VF-v#BBmJ+fauNFN@9hsm_mZg#8@O`@d4INm@(yGD2Tf{8a92^HR}U})<w^vA)K;&nI9DPxN>; -cZe#^gaI|8vOi`x!m{@6qoJ|3w;pkZu4-b;?=+dlB*tVa$hVbjTV?j=uLp^jsrs>20h2DiLJocvRAgy -Uf#3X>uImLt!mNwpu3X(sOZTYqrPq7QzLbs)q>x*{Ud48p<~JGZX>QE%jgB$wHaYUMMd309uS<gh)UQ -l&71A>z0w<+HOt_^<-qfG8^Sg7S!;kN{Pk*heveK}t+b?`QCTN_)Ky}0K9<QZn!%|P%{M*=kNQpf^ql -V>5!5It6^&Nn*_rsdc;EEgy&7}3N!oH$Lb3GZjsO2z(bc>vEH43TCYhtTcVV%A2G0KhP)h>@6aWAK2m -l;P_ErD@0006200000001cf003}la4%nWWo~3|axZdab8l>RWo&6;FJo_QaA9;WUtei%X>?y-E^v7R0 -8mQ<1QY-O00;maO7>P8*Dhyc0001-0000m0001RX>c!Jc4cm4Z*nhkWpi(Ac4cg7VlQKFZE#_9FJo_P -Y-M9~X>V?GUtwZnE^v8^k5A0WiH}#XRftydO)MzL%u83&QBVp_Ei6sVOHNga<>D$Ss<h%#0D`ol{9J| -P{G6QB<dV$%ykfn?q-2H6+=Bd~5(TJU9R-+9uGEU;)PfQPPq4geQBi&oc2jVh002-+0|XQR000O897^ -_9VS}l~00;m8$`=3t8~^|SaA|NaUv_0~WN&gWa%p2|FJE72ZfSI1UoLQYtyo=e<2Dw3_pcy44{HY+qb ->SmtO{h)WF{?|1T$F_i*%sU5@m5l7FCjp$NR9qea|JSFI)EP!v=^Yk(Y<$z2|<A^ZERPObcekSIc;nv -5nx3m3dRLT<IORR#sakD`pD;A-$6oFIV&Vd^VH2T4~FandMsTm_5`^)VJP0M(p`tPq)d<``epe?;qYp -?7BKc?1q;m-;^R^kF}KwU=jOgg_oH}StVGAs0><Ks8aDPk@dkAsv7jNH>^^B@in{q@w@M5vm^m>lCYS -)%(ucOsj7@B#XMqjE%1@cZKK_1tz~8DMOLO3sqNa5&qh`APuN*LUi*5+@aNYTaNEV*_|Mtw4SQFr4KG -<M&=>)29vCm7wu)Q%DwvyQ)~;>c>ELA^aOR(|fd^Fq(CUMqH@W}q>G8vJa`XGo=u~D^b6c$V#?W(tZ) -`W+XN%=>CcdVkw(L%p;z8Lv)l}K7)=GPzH_(2?3SQR&%FUfgF%T^VW=C5lN?}DdF)P`7mWiAVRJ&NRw -?DCN<$ew@<DCGL*w$-fotE5~^`HOIU|FlYRT%Rph-ECVQn6ysg)}U0s?<8u8?V28fn_;@YVlViwJ?AV -qa!yVaTXh>{$~9i#Mio%skG&RZK3jtL7A(W6a64;qbuVVN`E)49j-g8bqi{D<DOwN?ao~r6qt0Qj5At -~e3>h)R5w0u`xZ;ztKCxj3BB?ML|$BRy)|p^R99DD_T8tmO1~Ox;X^;nIHPaJOa)1`s7szY|Fvu{Z2` -S1i0YuaYeMhV?dE0+nrzLUl#!mr49(3>RMt@Ja5H&aL5<&_!m39PyJ;u*RUGz8Xa5KE)|}2dwX9bO2$ -Cti8jhK?Rwecm#&UY-)xVq_8Fl0=qs~>5WHPlbUJbCj=3sCaFBWd(mD+qpunH!3O-9sfW~?UvWOLt!{ -d8@ARG~4KqhNFY_yUPfZKw${Wn+pp+bC6{{f?Ig9Y<W!P~a0SiTTAW%#xX=hQq;CUnOVt1Q)#O$L>uL -2cbx25RfUPjoczcf}qSQXWC68OZygi$Em<$+`;TS1sR^bl8<IA7j6)2V1#hvz7cO+?<A+8OtyepBBp| -#K)sKm=9*i~yAgIz;l(WnGY4y|*v}&8O$kzB;jltaV_4!8@TLG>iiAModo3+CW1XnVnQCm^*dxe4V8t -GkEXfwZfFopz`8}vr=+w@1&RdMl)G_pfi;NvI*`F=Q{v+J?Fjb|P$aCzM;lo8^Uhet9_(2FNQ!95A3a -TDC-bF`q%RlEr6my*hLcC=HQ*_=)Ju&?(haq$XxbhCw`V!Hmj`1In31a*&hmPm!0q=eEHt-<Q{>Xc-{ -3GL*I|m(g%8Gct_I1vSYe$=nSb+J#ixqNPl=!!u7e4DIK$tJGPQHkPIrdP`Gy^9{xJjj)>Q4)ieo0cP -)28Hl0v(l;+9wsSCi*gO(!u8267J;%8~x<!x}#WPVAjdip5~?}n8_Zzz76~3<Kx4MJvufa4V5MQj=l0 -yX1;66amh5!(Uz3Q@uVyUds{9mdi4WaX|hn8SnhK_SQ5i+7s(<DBq$`RRAm%Y&`qOy3~x`ia5fyc%0s -i;z_a1WD9uvgyuizjJ>!QSs<Zio=iOGM<z9p~(?yB(2$9UygLY(@0R4zQ=K5&Mfa7e#jZCS07n2U$$F -rVgQ>!&8uLV&F$kkgfmbT%}T!bDIbOQW_1Y98NgtW+ohK<A#^jH-gvnN2WsgFJI2UkPhqe7}As0g|>m -qCL|utk5E8N#wOG=n<`?x5nU(7^G)p%E)01AyM1XIY2t8Ah`jwG*Hp%-)TGJn^|5bSa>BPB_H^in~;4 -P=h`=LY%dbJM7WRC>F1dLuBiV(a6_g`iYKQC-#r%)D7b9Ejp!h+`UDUtc-^r(HVBd<Im`nDslG~9h*E -3&*)Ukarfps+e{J;nO;Z8JA?WyB#r;!H0T8_PBr3E7AizpPbC1Nk;*1>N2XFU5%po*S8m1R2plSfp6V -eDOlOxVY3B|{;-~rH-m4ETdSFlP3LunTAs1YA3jX`!KYqErdH!kXTnFW#X?8oV<-bv_$tqW?GxAZZo| -x9qjSh|HN0G9}L-Gc}Z{ecfW}^iPVpNJtCwLwvXnKqk8c`b}ooyP6u(2=*1az%H+BYf6;N^KxZ=*5h0 -Ba+*vU17M9raKeZbr!Gfnm!dRBX9No=niNSDSIKTkHAM=+OI!<@kMCGe5g#49KLxdGEj!;%Pe?dBBiE -cGYf!itsd-jYA_@WGX5a$Oq1dPQYD>q53bVS}zcMKR3pr{?z!TW5HJQy11Cv0*B7$_OJ;$5+N10dE;` -jB#)iUW=267WJ3}Oh0w)3*0Su3CZ<Su#GD}+FRs}Mo||Yefw5fM3&gxM35B0?xo$88FYAKiI7jEs^6- -t~;p~#fw7;}07w0B$hLx`uI=7bg^fWjYwQpek=_SMT^+wWqOnXD?KWE`;@FPAXT?%pIkBqJJho^^@rh -|!{W1~2hL!d$T{V?-|KoE_cJ$Ap*$T8!=99RZ5MaLd>BokVrk&hh7P*ZeF{Wv_MBc{gwF;4R?!;k6(s -uZHJp=0;kmH<Pmg|lbU>C@daC#W-ag6@H0Hcyfr4lPMCUz0^@gqR(UlQ?~+6!O}{43PPIff|Kwo_<%l -%&xBH%h`VcP)h>@6aWAK2ml;P_Ev3u%=rHc0015#000~S003}la4%nWWo~3|axZdeV`wj5Uu|J&ZeL$ -6aCxm+>u(#!5&zD=Vsi<aqkKMzv}M@@Siq_CP+-TdrN$p5;<CJ3l55>7cYCJTAV6fLZIHNVn}>rUPV> -b{k-%vRGy$B#?H?01MpD_xztEZ8dy|x$wt{Ki?#|53&f_<;OYVh1B#0fjK@?Bo23KPqGzL-N5y3r1(z -!4SY!=5B&Nb9>$V1b*#(XD;%!u2gjI<x@&L=SCi!!pG;b0-59|tZgNafJT9xjH0!;?Xtje;aJ$Yo$<5 -$(Hda}u&_e3`|GD;B)LqtT8NjQ#8t7t-+}az^7M$`!hxh92`5$qyqY#3ZA?Bu5KKV>U!V8SRD|E+Q6_ -!Y&&)SVTDS1>Mal<!Aw^K+9#6n>biR$aZrzH{rR_XxJ`|W97@Ig56Goz@Nhg#IlgXN*!rgx?I7(n7IR -kqzj$Gw}EnMr{-kI*CfY(TJdTp7dL>20z3O8qW+NSD+XC@7ONS>Zb6a02O?nC8goaCYUKDgB3)ovCNs -1%lrB)Nm@RUQ==uaWR-0rACf1rWlu^qdL-_Ptz>=k$IdUPV0xKH!^^rkbgS5<*IlOJ)g-^eI2ruXWF9 -sc2D+|Q*hbjZR%3&sYS+Ykh(7L_4iW+85{q$*8%pxJ}TuA=ZZ!Z!u;mmciVAr*8ZoaM=Dxh^KzbpSYG -M&5Wce5&~BE@vM&-7-a9)xM~9ukCF8gtqsgkdT7i@<^WP9nd&rnijQ@B!T#sF+80m?c;&ESpA-F6GL^ -QxY{zdzJ}8L2L$WM2x6_O?e<sL=<>o*-yMai%2ja14cms7Ms8-MW~$aDyil$;*K6t$Kn343yQ&`#hfA -QZbk`f77V7~Lb7R>5zsTKC6Oiwfvk2D&)2nQ)H+zr53F%SLn+T7SCd%q!KAC%U<ek$x`eH+)(^m25p% -TW0*UAH4T9mc)RoflR%J(pC!yMOUkH3=<TGqHq`uRAhPrWSHXa3IYs4tnbMBHfM{OZDQ)#|gS4rw01> --^`y%M6@H@Ds)TXN^ah%vu+@_3)8MR#ktx9w|-$op=>dZ!<i+M`3THtnGcREFxUQ-B8^cU>@M^KkA7b -KPLvI|mU(z-1oyVatcJ*c0ma&L$%8z*}~T3XoFQSQMl8a=vC^(X3GD&CHs$KtMxkk}B4WvYF>n=5jTO -9Kce{oONA7{g|uRgM^k^_wYa1mqE51?)BiK23$~=+dcKQwVV!NA;AnpVCm&giUXpQ@35Zw5+mqDh9k8 -SF*E_|rQdQAB9g$+2Q5IvPEY<1E2dU41Z<ain1AQx0}tcGBaXCe3}HY$CKPNjTOi~R>hO@qHsm#7E*B ->GdBWqD6NdE;h?5wg&LJ@kIlLPRCjcS`?7;SfgJ?<sRWMxx6Ivh!`ATErCN?r&LxBWw2*#iQpcwZOfS -5v4>u{I>_qjBTnU&2Ia8qJ8vor%aGSOxTX55X<hb}2fVB@lZD4<5>npO(Exjc1%QfY7`Tf~Q>(z`HGk -K`F7u3NB35G*6gqQFL3rLdMAZxvvWLRDdGYU`^~h^Ac$B8MPE6Kvv4^1M=uY$;4a+o|A9fj}8XO-US* -TZS=#NPq};dbl49U_c11iV-DC)I4d_F`-nf?Z69Z#N)u%i?Y}1%ry7KV!OUrucNtL^Rh8p1?nJQ6qKx -x6hT|{Q&zKD;8j_$x~;>=+J}>&*Gv1Z?6aUx`wYo;I3S*lIrX=F7kb_VD#NxPCm}ZOWr*wyTspL%Kep -@<0Dgy%@4oo>+rPha|J^U{-`M-t-Oume{LK&dZrp$WV|e)X?Hk{J^eH^xzgu^HxVN|M7Xq$QuoVcH?t -ePHetWuq6Cd_Jo9=x9V!r+0AK!iUr|D~ZDCyQ6_5A%u@1*m4f0^$8dV2ly>GiLt`)^FIzdgPF)pY;E> -Ha+&?!7<V`((QJ`gHG~)4e~I-x&vq7+E_IUa0zm55FV_AKrtngS$5lKDu-8$(@5Y-z5)j|KZ<Xeg5F) -mj+PWJNVmOcq9jZ{T+Gu-YvC29{%dL58k}}@XfmiAKxPn{`}g54}Smfy-yF`dgI`&+f{g031+cf>V-0 -@N(Qf1VeFqUTT-iIw-$5Bw8eY<z8yGF7kKZu3&jI6tfwSzE%$r!yppG3TK6l3NJ2<aRlMLTe~f4)w;q -GE>CiC5*0w{TPbHl`qY-}5VFE`{X7#~n4o)Oc8MTEtq+O7DLFiVup4uZFE$Yn{Hdf^{lr7^C%^Rp<sW -RT((tJoxP)LK?t@R2T%v<=F8|xP?oqxIvtraaRIhms0Iq0YBm806z9w|s-<R*5{^|Ej{XDNPUKXoYz9 -4NQYKar;ruv|G`Q?W=_nynY5e4)~lKZ-d@x@2Jtts1#F7;u}->XFj?e^sf1*g0mCHk@YLE3GqS;Mx#0 -B3EbxvAa29<T8&Lo`N=ZCS&UEU_mcvpJ=bG8Y?R+_^HgFfcaMYl+kLP)_#mq7w80zv{I?lWr2{z8<4J -$m>qJK<SN2b5KSIUqcbOr)@sW*adPcPX@q8KDUH_Vnu$Cen&idx^>t;h^E4LZdFJq{R;SwYv{G&J6QI -?Jwy}ERjB)z(8Nex={LyA>oiX5ZX1*__l3>JjM8OW?B<dQD0Kftdj@CY{M4|RXt2N(@En}s<W~`h%X` -EVHs{(ip-6US&L8GF4e(ZD*)1G|t$!&RP=g<&YE|^ZgMj^8y_SS_e&|8~5*?JV?1cZU%0@om$y<UE*m -jr@I+=k>y2Sgw_8FMj$0hTve1MpQuzA8V}OBK}HK{Fhsx}?}0O^U_`TKsD~NMc0~<UV$#B?+0^Y!>2G -Vh}3r0D9{88ghs#DN%5=D2XYE)n!c9R#jfVSgT@Lv8x+|DjB#yxkTNnS`HNySYIi8J_rI0LZ;Gpo-kV -{Ar2~Yb9&=TG;zsU5i#ym4v;y)i!L0pJRXtfpacfK&-{5*o1<hPX~tC4)=T|xsa|Om!kXKlww{_yZ5? -~hl;hRIkG%3uciSHU*t!U~aKhU5f3oc>E8#cyak8XNsmZRWsATCF@=#gBi5La`3CIiVH!O9{6sMOv9Q -qJnSi=PErHW&9yXvxAFZt>Srs`QByO}R_SrGo)jmL{S`o>1qRe6a$LgW{K6iXTB60t0G{cTx~H5$jsb -F$Nj;pr(Fa~nh1qXJFSAxldLWlKv2SyG37czOx#@Dh@{fxSasP6EM@`#g_Dthz1_x=zzHv&25sQJLQI -LL;|-TJSY;Y-Y<wzE!=xl-_?HaT{_B)qAWAikb$U1#~uXO!|Pe@@x(@KTew!2Tp0jA>JYY+&V6c3;+| -r+dj2-fQAVhHVZ<^fL}d}G&tV3`qX2VMY`ZK3y!1Qw=4*7@;GEJ9eU8F`vJW98jCWBRloCev)k5U4+9 -Q81`o^)0Z}|$zo?f22K;B^{i(X9n&~R?i&c<YziCzPeH?-ma)SiE&4>udm_{D4sXbCi6hlc8z+C>(OK -+AnHf3(<x!`67PnMJdb!3P6AOTM6zN70^LFBl41O8Odg5qW3eSNcH5fitM5MMSx<9|}_zgMZ`o`~5&R -6Y{hvoA|cfwKcmonj%rplG~Ov(KwuOz^VbQKoNd&Bd$*L*c7tc0s)0CphXeH~$3=2aAF(vuudt$nwB0 -bhzkRt2vLh+(y@q5w)iHNcQTnV<GkIEl~pK^~*|!w3Wy^WJK|u?nsC*?kq14q0LD8CLqzW$hmrlu2$0 -i5tM;WMpT>dxta(?Cto(^uIt&uWC)OW#Co-(gII}zvdb3UhRG^&g^^JZGBODg!u+ejgd{P-9-h~sR>+ -?{IMfw@E&(5iKG~MZ8?O$WSR>KFV|{-@wkmrWkH=<VFp~$p&GHC%un=8=U62d*vvM1nR^G><L6_bD&5 -4$U3$v%!y2C1#GwOb=;gL$p+?Fz(0Hj2<jmU&mCbNV2<%_>~;oQ^bs*BkU@#nI3t&xyFMs?u;f<GC-V -SxHOv1~)3&qbdFiBNvi>Mx7{IIQdxF7wWkhw+)71OH|&gHyNs2T)4`1QY-O00;maO7>RY!+;hy3IG6b -CjbB-0001RX>c!Jc4cm4Z*nhkX=7+FUt?u#Y+rY2WOQhAE^v8WnoY~5IT3~T{VN`DqtHseE46STDk#i -O!G%cEGK~&8ql_&w|K2*M?w&U%Lr)dCk~`n2RONYp^7_?(KmY6Xw@=@F`u^kRPhY?O`ortnkN^1e;q# -~Ozy0RBkN^Dezi+<&{P+L-;@>~Kd-v<#e)ZLdKmGnUfBfAaUcY?(`Q0o2`)PUq!oQ!r&t!f7>hb^2>y -Mz>`&XTQGF$uoYnz|n)j6YFUG;>c0gfdlhgCq+lGX`_!bNBbolxqWv!R!(op4n&w7N93#s-9ZgEnIhL -N0}9$d+`;mJ#ab#?LW?H@FKvr##?5$-Sf@pXicHovmQrTj^8an1DkeS`XP3vgB5{6PiK?bSYUoTCe@= -d~2AH*0iC<hI%<i)H)U-<p~GjP>4Fa>F2uw?y8Utxxi7-&?wTS(K}#Q=q%|?A%;22c>*HogfjNoG09W -*Qkz(~ln2BSXu1{KYWSS;gp*Ll&g~jfKkqErW#QIf$st`@hG8yUqlFWc@_=0T<<cd?xk!1yiTSi?3h} -uu{d`SA*`Kx-pzgX|F(JE7g+{0)u{Tnl&<SOYHn+{*vcWbscFH&C1tq=6BzwjFbnTK4v`+aW?4`u~q& -#4Q?W8;)mLuf}7opTy`+(`~3I{%~V<=pNE)c5|Qo2-O8A3{z8pfXTfLO<rC+vh>AnT+&;UYAFj#+9h{ -p<}es6gzEkka{%B?~DNGD@sY$^+sAg_PC@CuGQ`?L5UPPlztfp^!6A`34tEO3D+W^>vlRZP=F>fiQBI -d6O%$^M2{3JH$5OmRZ^?x#e(mZtSkxJCc*|Drtl=A&#RRb1ak0o2a{X$#FG@lsX+JuDjUeNJgDun9tP -=3%vomzzW+nbbAkO?@?zJh<=9Dl33iKdwx_*UC1dARxac@qS0XCN2?04mr|aPC1u-0(g;l;`$_o*JDi -g-28`Q}(AjyP=MqoHH5zgY#H3A^{W%>6FyuK)tH7Xz>;kcxAzdIo3~2&ks8gQM0p%30im6L^K<xQd<- -{%8gplWm;);tNrhJ0~S6;}W5Dg6(`x@}pQl8KVrArGJ#9CWQE;vOg-=N|Araa*Q)P`)b<kXTgOAdwTk -~)xa31j9>yJYN=X_q!9WXoN=9NTs2CAAz)q&y*3)5TCP9_pn>JCd95Y{*KDsk0(R)e06OWEBX@V7iyA -Y?j<w5(Bg%XVZAcr99yvyh=Ku3xuJtDksi(s6$H0)(D%Fq~{q@#@^ZaF6JVV=+Y2h(RdS?-bXgr`Vhk -s$wer$v<TH(i{vCcJHHzabx0G49TIX2#5KB`*yPP_?;&30cAWH(r(N;_$G~Yx-e84E54ld*P-n^$cEW -x_gQFW#KBtoz(oeWq=SJXmKp2*k2Q)%c2xFD<fbc^?3Un+)$Str9z$SHiCxkp84noQU;<`_HKx0X(3O -iv}xCymOI6)~-=!7~VXFvVye2sMs`lu7b(|eTQmbhKm61!ps@~IA7;U7V1Pii(<uO=&2@KJBLGVq03i -m|yLbz<z#M;&+;;wi_oM(}TZsu=RFP-*Q$nU?lK>`ewACjx_SG?Q;QHa=#swIRcaC^_-&iaDItweHs8 -X+X(?LZk=rELs}2uSUEpbJE6O2ZtC|q*;0n?a9PB4CPfZCpKb5S%yfn-=-_y=(g4vq;_!Uob0RghLx@ -EVk;sIe+6#Yxnq$|yqn-v=!LDSzS)BD4JFZ7q;Ww*iFeqn)9Ewy<$6J-j}kl*j|+QZSB#wiwG`7QOm* -N^Sa*{h8|lu{ZD`#L&Bhg>jo3Xb-HVp)ojvJ8>+XxA>~f?c?OBQID7k$eC3q#)CP$8PT>kLzti%=b<p -gS7m=ilqmtk5@tR0-V&K`AQX9uTi-D_~ZmxdsHW$AU7#!WK1743<Yo>(if+&)(8g|l?k!SnGEO8adqv -Cc_c=UB^Bf_LJrm`$cSF?Q9QdRecYUT*|3rwNNRqk~j$zT@Q05=x#5BaN#O>a=W;#wbH++%ow<vSuwy -N>_{{RJ(9X+^gV*OL9$mbO)Y=9h~(vN^9|4KI(`KXs91`;L(VO#Dx)8Aex4f!S4zm3aVXr6U&B(Gy{s -Q!7b9BSnKZaPN1|Wjy(w_A%xQngi?o}$2F8Zc*kzXh4ZKr?~D(0IL;TqQ1YI!(s_d#7q-M2&g`svyM` -&=SlYYR?b$(%h2uCD#uXa)Mw;GrD2+_`UJj-44g=j#>h(u@CKeYztUSVwQoUbzC0-Zai6tN@t*~?}TD -rsCden)HO<u7|p=%GNp%x?IP)nz3tdV#Ko>*Hbt$WtQRXb>jP2;OL#EILu@Jf7DGTCp9t`Q<~zW24nn -^9sa!IoJ2y|eBuk4RyUvCFLLZyjNuIfJ$848r+LJQR1vtF>z-3^qgQC@Y_i9(Cf*sI^Hz7FR-N>E5+; -A1vK9?vC_Ge3j0KxL<?kB@A`N)ObD%wXV`DOY0u2hI1LJYbErYpkx^;gAu58;hk7Yw>-t|I>oJGZA0m -B8qFotRE+)ps1rNuZeqeBJre8oX^k@&YA9Y=dT9swgBa9R$<9i)mZonXN;h)LwQTB~#cWT$S=iLNEk~ -(8v><JXWzkxmhV;Kr%y*k~!%w_h;(p<oSk|%^IGJ`i!$|MM`mRzMA6E275~O=#SIk3_>cBjZQ1il`SS -#Ue`=|q_dF*N)aa|&W549A-rwFyrMT=VqJ$uxNvF)L@;L1uuN!UIr=KoP=Y1~6l@<uQkEOZ#GuJKy{{ -sLa=lve@7+dVUuJXVBRn`i;Cw7fVVif;Rfrmru2JQ=fI8I0}2CQgmw`^HLBOB5QnC&N(aE84E>$q;v+ -;7f-7-GR4SGC&vi77;pMGoa-s{Fa6jT2?3ke@KRwunb_;%+SAYXwRQ0JX$iG0d>AXoEdzLfR@{nZviF -W2==-&7;QH%I*tIA89MToKVnj^JL9QJ*CVc@4BdMbN37yE{CuLg{){3_War3dy&f25<4%Ou*$pp`15A -BB8`RBdPkm-|W3N(chGoX}Fk$0)nHYYx!7u<?eue?a?neA|f3fzH;aA3fs@hjZz95CRt5^Ib58AKBEq -96SrH?nZ`6nfzuLl|PXB_#%^qDbhX6P9V@QlOvHHp5zWL%BA=Y!4l4hS%wjB#ghGi<K?nZYO$Pe4^iz -I(o(?cT?okyZ8SSBCA(P<z$($P*QMT^X%pM!O!QW*(e<KX+{!Njz1Rt8uIAdBeKeu%`_=znU?hjBDgJ -vhn;|i!)<BZQQf_tcMqUDr*_nh3?nepZ6Sx_u*GY?h+qGr^NY}G|<->48U>t)c4%x`Il6ouQd;_o{Xz -kE4Pm?yBc3<8JtfjX9gn;>Z>YCv*dQYHTrV~-Sm|-`~p6~Mjwid0|0fe#$Th4-#m<77VeubVcTEc{U1 -<E0|XQR000O897^_9e=hETEO7t;%Oe5+AOHXWaA|NaUv_0~WN&gWa%p2|FJEPCZ)#~@V{c?-b1rasoW -0v}966FG_`Y8;XU1%7W^C0~-96LYvu69a54&b-`?PPzEG#k;nHgeaL{?l#CHF;lswCb?i8o!UN+eU%{ -YHtBNVVCiKVg5s^d~G30l*y*4n**jnW|LqOCTK%hr<E5{~!PN|MP$Spa1Z`|HJ?Hzx)IL=O2HcX5KjT -yUZK0o*(|>|Mn06`1dCV3;+1Pmf$}`Jpz13f&Z9L;GY!O?|7X&%i_rUmrfYRJujP#*}s-px0f|mHuBP -75S8sKQ{8SSzV%ik^#?;g3ewD%^b3dl&kGF>I~?jG&^rJPSfW8k{Lf!CXv861Kk`z46l3BOjS=<YB*C -B~01e_0Lp~x%9)t$$HNY}I>1O<^2>J;@gF)_l|Lk@Aq?7kB(o2o>W9}zGo(kCc&bn?+28@$OnC3G811 -1UXK--9!GJ6l8yn_L!8jyBblm>jTf;8m9K{(GePM&6o9~zv$8bAZ|MT6#9((!}K#t7@N>iFFm&rgzgu -7qyxXoy39-U0d0ANi@|JjG+oL5Uwk2=od-(IE7DEFB`~5kPr=dogCJmAb=1E<_CajzEJTA0g0l1PbOE -g22z`LxsEe1^~$j6lID>u`|qJx=gXCJ8>Ay2AJq0fKsj$Tmy$JnP-D|7BouW9RgmK&iMxH6kz!*%S;s -!2;Ve9;?D;mf_w%@kOk?`3!+}YCuZDb{NEW%cypXgB*kl^!;)e)NCtt@OC|Vkc;a-DJYoU*>IV(U!-1 -a|0s*Q#nc*_<`hFTC_zMKjd1nzwPxfvoRa2V6H4TX43P?}mu0QI;J>8YJSRK2<V8x1N;TaxmZpM7A2G -8(F2}m-j2<A1Ou^gkzlF~ffgT^uQW?9l>i0L;3<)$-EqLK=J85d)xBL*#E8CN0v%_%l@U4Jt2tHbpc& -l7HGgdOqxerco=HqJX?&_&&O0k~Y%xzdjK1Om(Z+z`XiSGxEG&*JVd2=PyRhX4^4=m!8Kd?Di2#ME$s -b5_U65+>O%-vq@7#$%RbRXZwJ9D|Z{<J9|?8ODE8H2BwwsGb=E7>Dtw6X4!{1lTA}Vk}|MnV7F(-X%{ -=$9aF2OAZU-WfhH2gLLSp_$x<9qi2X7z6Cg6y1fL}y=QpVcazx9boXBwAXtf>;f17|C;o3!KSnTZf4Y -+~*xqM`PR%nuteBy;u-)H2X3XoIU)>32;~>G3&=b1HqLH7>AYVfNz+S+OrN^yE*YGv85PO#cZWglu!L -$wU#iJks(H!A1Qm~r-AK^h}+<(K1<E{pDbG}3+XhLYEVS~vyLjc`X7IKFuoJDjec<M8;CMuO(`S{=e- -yeSXf&K8qpZ=`>_6Pm9|ImM9b-X|KHB0W&aQhzc+0I?3h$%_D#1@15YJ4u?xviCirF<#{7^Ig}ZiRw) -Y{2v~$nqo}3tN>(fwrp8v6l7u<TVZTh6efJjF3Y`>tA4{==({`2n0QD{orzd+TTEXgv`PVtb_eTSZf6 -Nj5-^2heCp|F2BT9QX-7wa1yap%jB5ANx80a^9^gS^dF`5)aV1hqb2teo7;hp4AM)i(E}zlx?DHzLSx -LAZ;byOKnY(dCP?i8G&FyyUMU9ww`n1FwGmKDaKHyuOYkL@pnzb(zr^bS2cjkRCANOtXYa8v&c~SRF@ -laz`&ZPSv5_BQmR|tKrJu41g1rP-WsZC>A(uKqn)*3HI0b}>DKc#uhkl@~(<|JQA@lk6kFTxWUL5&hR -pDRZu^q-yj~iwT`+#5rZ$|tp^%D=TuCMT%8RikUq7wwt0t<TPT-?-vE<>Xxd>ifE7mg$Xd_aI0&w|%@ -K!Zd(&abh8@b({3`zL6xc0lVWmlpHlzBe*Bz6WsPvk*bFz6F^dVvko3$Ys8hfz{#-=62a1tIuqGHyT; -WJipsz<IL}brcL{4t&TY!^Oc6L$=pN1sCQ0ksC*YR;M*sY<7y49>!+D=FIL{v!CWsAKg+}7n<?V<x4T -<4>|T&|<2=gDzJ00V#bGFQae280EsQ%K8SWYKy|c+{w}#EFVFl+}4QCWb*)W`V{;1x&&o%5Q_GW$Idr -wTvV*)dC_V!bag0E|l*N+p9mvWPkrY6DH8o}64IpV<MqtL5x|5!)n-W=~sKTu|L<!K!!iHAWa$e1~4@ -4T;JCj4K?Y!$DrBPr`9EHhMNhd@eZdACS0U9V$L_--pK1;zOGF=BGX*nC^VCC5selglgtYyAcrfXi{x -({uj~Uj1kMd4FbzVp?ypLpsBv3El>3hBE=*WBJ-xzr}0YOq|BE$|*j>c6BD7;}#y#=rv(xk_;yEm2T+ -8CiL~@;T>M!`Amfn!aM9BhOFa9+A9#CDS+Z~;a`N7G|q-GLe?fG3_2)s_YT|PP^|AIr)AVO!N}hMz@7 -e#MQO$Y+^g4skPUMbKYWL+ZJ1wSTuJg|fS`K*jJQ(dwFT`x9%YWgddNL}k4I(1J&J*!cD1MS9?M=h2X -g^}oMOl%HF$nUuwF2${k8XaY&Z<_dxzRH%<KyQ629pR!^*1v9(!9HC*v;Nk2yooPXNui2kDyv_-sOh9 -5Y7Joy1wDxPCYK#jXV17!m2M_bA}oNxZVZz$@e^4twz|?#dB>BHv*73_%8QX#9W=2*!1b4H8WG97DND -;!7KXo&Yq7yT&IE0W>c>Xj7)zHjI+=cV0L2mDu(_)gfMwZ&kgN@7g_Xub4vQ#+qQ`g~4E$k=Wk|>=Ek -)`RJ1M3*YTD_79y}iAZ!9aPHD_74-h4lk=Uzzan|*QIFW1={nxmkbwz!paK3UfE~;SJT?*6*&G2r!)M -0obff?r1E3lV`+#Sk=w8<k4KwipE1*D_XFl>VKVWqb0fNNm`w0Ym4Zwj~)e69K17LjbC4jWveZUhkij -#gE&X`dvf$;)iWJB)e!%qFJAqW8$`^u4sw?;l;Rxs|IKS3YSCN-Wh2W<-hhPq>Gi<M?_MyxI38KE#qE -iF*LRZ$&tp&<BfA+Ueql%^nY^(=^^|7L`M_B6n8J_3D%?a4<xapLhX$h$*%+O($^+p#eKx3v7m{tP~( -JH~4rpBs8pdW;t{4q&NRL3}FSaEvV`_r>_`2SE-2GR}QZOcY~#e2mq4T+WgSf@ukiS%N#KX9*X8h}H@ -x8iDoNH|ARrb+ontjak<Zl4^MS7_S@S7)_yLYz@YIj^qPvNRIKcH_k=aSOijI1l9)VM;~GypRjZiF~E -ARf5ww3$<x$;=-JMvU(~}8Jz~jkM>uBo84E0pxvpVNd<YP88*+PFL;OLIW$0LQ6(Ddldx|w7^-CiXDM -6fIy-meID_$X&ZxJBUAS~a)1_5J}GqyngMxi?lLqYW2L1h2bshx_%KLh-{7x01cVO2Z9D#Ewa$vBYy` -3h>y+J<}o{72oU|Mus9uZMe6;V)_ZKEbns`$`={8DYHHq&s9`sHfoxULeyzI9VRwU#K5nz~2Ep8u)x- -Vc<&y%(yObFP23J4w4JG$2en1?Jb6(WAqce@}}ZgCazimfieY@5jrYA!Sk{R!OGJw3ID4xUIknRPQ8C -FL$-V?67}YS?y&OFmxd?{%<3Bb*#xIK>{?F@>M@*_KQ{nL;PG$H;B6GhDf^uW6=lQUjzTt47I<om5l7 -)8%pxp~R~S0OjYP_SYQ$y(e4_OMBZYa_*vUP^z;dgCyp0zaIu=^QM66Rd-eHWFvG*8pHi*RWB*!eH!f -18)W`5Go@*-?gY-Th0ySG5KDpEcI05@&^2<s~h(5$%cQUql$7glg$=&g>Nq;uk!9afnW>@%iwtY?sc0 -iO%9`O;gJ;Ah4_OcFz3!HoU(H0IW4^xF~d*f{y^Rn!f}_y_1!EW4DjD<$AiJKR}3HkOS?8sG<WT1a2; -GL-q31H<3=f`2}5o=1z`7yRop;lj(cM&Dz~hCUY87yPTUfN$0=2|tA)@H^=IAV%#kp?!vd*YgF>2o9P -EdCe*Bd<%XT-*4h>Ynza9r3iYy82K#j_{KNCAS59YzPNeaJQ`v~+IVDq`A!Ydd;m}~qas;{H*l-CFH{ -lsdkhy-llwj5*xIx{U+|pBa<0BuB6{)6f5-QI-1vkO5s5Tee8nFt5Um$JwEfM;|IPF_bhwbaSK!%v#R -Hblh|53>fwauH$V4<#te_qn1$<AhC;cIwKN63x#e-gqPkyEqjHnEDqi=nvU<mucFoHI=Tz!!z`xVc_e -7?hsS@9KX{%pku(~<63KgzkaLW2AXpsYB8?gq+&6>u#Xz5=p&ZZLfW)Z&;8SQhCMuy6QRiXoH^$C7HB -^Ys$n;B7!#x9)*}x4{{Pfl$qU&b1!<lG^sqiD{jPdw@e<-}ZZsr~ibFw6Xk-f89Jj=lm;H()nQ2@jG) -2!QdWU$L}i7bPAUPdqb86v*JvJYv({x9>EQ{-Y7_m+jo38W>}_N+b4jKhceJKT{9X<Pj|Y8J>3$IbUX -{hZziI{yDiYaljwH#rxZSksTWV56;}qb#2@KE!R{{_8YE+G8Vbtuhj*&YVyy{gl^44AvIg%lzFp*IO@ -4Y0T{iWT5qG@fZgCUjd<AZ)a@VF)-q1MT-GbIY>CW1j(I^g#gyu;gh-}o!LpbK&g|SpOR{L?Bb+}^7i -2}cFG#<uEg;(I(Wz-#(w>i#tH=uFA5_tqt60HA<V9CVm`>G4uKi451_Y;O5=c`QE+Fub;9;8EV!4M0$ -@f%4cU44j}SQPofMU>1o(5=`jLCiNf@J;T!sDSD=2%md)U2%ZOzZ%AgIzryv!wBLUG#@1$R9=Q_tHm9 -XYM<dsEO%^>tj-bJyxfq_q(fi&E_+`wa1?j+6*Ht2vvJq&$p!oXM)-=ve6GidTM_wN);{4jPYj?OxwX -?egbsI|;yI6y>2TC3p7;pc74$mAv%gMb{}A;XETOMcYzGSTPMqlj<|UI;cNlc#rLEO{148!yQ%yp2mp -|2H<C4m!npB+f_*9dJMG~KClE5>17xC!M6v4zG>ai={I1a>Z@qyQi=ag|;XoE}3Y{8V7gPi`k3#Kd`^ -e!1Mm@;nWV(&~Vx!J~K!5kBsLCE^jhOOOcgG&qkP8-1&<n(X7(?;+Gy-V<S+6W$Vv3I6X@Q4k`pi%IN -__ieYsTDFU`k&f}zNDvr?oVxGUovnB|ED&>H`v&_(<pt+hvd*G{(LO4Z#QGog1_BH@SK?bnYY_Wom0C -+e!Gpxfrq^#jq=t^NOCM}wWB*gjzdo${T=>-T1T9@LSI1-VYEAO@CG#wc)N%*2XYU$cM}0~;Y)d)gsI -#02M+*R_^@6ojy6lD3Bx4*;d|T$*W}io{rCJ2Km5?EVa&l<)!Gq>!~Hui9mZ-KdGr>;^!thBJ4SQHJ% -}r%ds+U!49a}4VReU0ZUDB|04LJdE0-2g>t*TaJ-?3{rBAW~k7|m0B-~GxF7RCh=x|?s94ilJ9d$lsY -A0~Mi<C0uJ4Cr_`f9eKjl)%dNaRE01!Ti4@5n*FhMM`7MS7&0`n^bp`Q2eDnS8|cK|jM-d4NzxLZ^`< -KMKU-29HhDU~OMR*a>pQSHEFEkGtt(mZWMhr<*jC-uG@A2E-(wcc`0&(J(1oJK;^kP>^)?51u*+Ns== -}QrHi1dsmL^Iv55fC*R%*G;#eJ<?@o#5@-xly0W>6+vNC#zIq$Cc^`v^@z?`WI5+MvZh6EUlHY*`dTf ->@!q8~gRL36qmU`0FJ1Cgx!Hm2}&Mg5v2Ncg(dS2I;%gppwfW$+8o=dWvv`?Wuk>XfAL~Yry=kvXTKc -lva`uboe6ps<RLDE%r?S%>IhrSf#%10A|hU3A$2?~n~i>Y|sS#o{3XCg>_Nk`&37Q%y@z8KHII5jb%p -i@Rg*3I@B>j%#(2nEOpAa25VgmKinH1vanVLSe=w9)4~*Z=Ee#fD2S^zXzxZADJ6u!8<uD|**rFSvZa -2p4;2PA|ZQWN_BV09(bicMcSX$X!$pNxR4z1>AzzA=hSVTAU;u_As>eUbP9lz;2<x4Gdana07?dI^2# -=3oUNN$gRf}7HO(ZOcwE&&h-Pe&a8qX8|GrUh@~5~v26grJaZd$Y=H2ZxMM)T^!@$G6ZF<uU8-5#g0_ -+LjMiZx(ZBH!y{C?6;LYIXgKE2%`5hJUT*E-sxC@OUz*Vlh<5=8C8hG7UabAK66z4zY%Jo}ch2}ZWH= -hZvpa<b|YDFJw2l?PB2J_F!br3w__)76)KwN>4B;c{eDrSkqXbHF-8a5}k#oG=I8xy<3ZHI<Ui5sGAh -lUM_t--cK!)8F*fa%ZBsCPn3k8xv~UFtK=Rf%!`9Sx<g?V4uUB%p89nikola9!UujWJ1Q|KO>UkR(Ck -)KS_gl1<Q)IzP))%7C@E7BH<|Z%x^m6tq6PHHBxAxYX{gDLs<V{>f7}B}s$j$G7{QpK<q22e=l0LSWY -K^39?&45tP_ZI$1nR?$nt(}RFbacy0_Bse%k?K3Pg?CU0iDbqgvf*R){!&E=nH(`j^{;~-&j5W%~ASc -)=xX*bI_DXXZrCE}9GktY&1q^y##0@f-)VsF;R$NMzB8Aw9I>OyuL``0r#d7blyMo#?j}KlN@U2k}=T -B?<7$YT74ge+7hlSHSW@}%)6+A>49J-n6;Uc6J@Iw~$)PlBg8?_5PL-(imcPJQbpLXyZGtg;cv4ba=f -$y?SJ9u_cRQ8XZI><-@Naf&<R9I~F1#VQwtQ()r)^gtVVQai`f)K`f1z5Qc%~4NHfctN7s~ps&m#8rk -N0f1_;%%r;QLGNDQJ#&2V+SGHSa01hfJMMjc66Z*@p{25H%97McI!GqiSv|&;sjV(mF1ribj)W0Uj{} ->WtUeFFi`=v10)6XL=-YdsKC_fJJf^&L$&sD05WblQgQX}vT{YXztEU-$)t!xsY74T74FVP^6L8rZj` -_1`5J0WGOs6IDEg@$;f<e6co0?KcWm&oWBOj-I`n+V#AC!c)>HRGrdJV+dw#<IMgfRx2%5mP`lWTFed -3wU_X&cgsW<lLWTuxV7?4G|T4!Lq#9^!I_v$8URuSLny3t67=++H`QsB{nvUS6f6o{^X+`3^xFuI-nD -TPmBo*9@4UkkfQoWg+bBDn_RQLaM3tLUf3d}Z~s;$gKMsuu`2PQ~3HIfw_p0whnm!%|aq%%&R*_yVaH -l3g$&LB!N6ie<=<Q!K;$_Z4h5uH$yTtYu7H+gL_l$R?@C6eN{xrv?!INH0(2?_7lCCgi42nv{pAQRKz -(#D+^M%koPDScEj;zTesk4W%8y6+@>?0@^8CF_g=saJhjihL(|Z_79#q2}zPOM8egLuW_DodgRFL0Y( -sstBIb9_$q_&t%flW%#^`6xQ^gsG(sETaEL2Wb3t0<jmnB%6uV8yVe<w;OvQU|*t_4afJS~0>XVjG+> -te`+QxGiK6l|#6a7U6-8`XKL_aOgWqA0S(Iz`0#w^l8T|9E(6uWKZO`h-FA#lOhT$~c%G*UbD#b*f2U -0+!J_J09L-tp4BeB*t-^AxpbU2&)-d%dPFR(E5ywoVVAtvi!(VU~k0RpSIfV{P*f5K+G`f9Ebr`4r-- -R0p3BAPiFNg0CYsqcU!BzI_w5jde$+uW)nD-CmIjLh8`^Sq(T64oV4q0A4~I^|?_DJU9khzKelz9`(# -yU=J`jPfg%`1gz{XcBd4~n~Refed+JB1BEtYpA9ocP|>F4vti2!GM7R7Y#1~<vHjDh&D10v8r3LE;?S -FkVihr4-a|m~42Kox&6$4ZvjTR4+ZsM@iB4Iuw2MK3YBdP-OkaZJZ}E7dFOd8Xl>aQ}bFA3!=yh%H9) -d<(AHhDBX3^YTBbCp`D$s|w(rZ?P^3<Sua(@13|G!RF)Cu|8GdsBq*H(|!FUo*8nXj-w@{*Qq^)+h3U -OjFX5xJq^^zXw)Bk^S*_V6ldn<%+HSb|orWtrF2E7$r51WJnsJtH0cTm)YxDQ;WKk8D+%y@7tEvjW~o -!VP6l?<iL9B7n%vq&%sERRrLEwu%&=KU%B<kh+{dS~lRqA_d|)ugVAT*aD_^?~e_OQlX&t)Q=5oQXz5 -e;U628geJ6q^3+X9(wx<3xMQF!$YK?ka+6fLm*=~i2&ivK!Zb{ZcPi#?bo;LrFarIGKxrm?G`#|Cg1Y -Bj?wzRR;Q;nZ`54Zkr`J%kbQZEiT|Yk92WV2<uSh{82a6ae=9Svb9=<am^^;t<kwatBH*-u}?#z|ZvG -d1o5kO>}n|SOB-v>u(W4n$i`3@D?Zm|0~7o?icORsTrJd$I)2YzRs6{)!N?ePOJNE2?Im5dg(CF%JCe -T8c47if*t)2k)am<|iKPrpT2*A}zK{Jwc#Wd%UppqGpL?T{&S@dH5h1+GPC3j^+8Pdu@TO6O;H7og(V -!bli1ybwYnO72RBK{xY;;2f<W>XfMkXXT;UYGi#_d4zy7;_aUDx}@1X0C>juVy}*f?jP3xq*1zmjExf -DlD45h{#HkJ7@~sYyOqTLnNu4LiLH%KFYre(_Yc5BKdgd^dF*>V6&hRr88Aksvv3O_2@`{<Qadd}R?# -5k+edMa(DYXy1Hx=^HsdP~dLP6cOnl_YJl_Ps{Jhfc7e*ug1Prmd3^xV+i&cF76KcXMKWgV&v_!my;y -#~>Vyqt{@OY>;P^;(zDsSoTb7;$o=XAl9OG+ZC&Xll;60znYIbPLJ{j~z;W{S(E%#Np5?5n2;YcSNiq -@^Qh*K^=5w9Q4AiW|-PT=pEEDHhQ3AO?ZAF&F_}E?|I&rdpoNY+$@OZayoXDClhB4^->wPi89~G00ZS -{U{Zh*@DJ64$Y--e;)zI!X_8FNlM_+2?mDxD0>RcDt-EaUI%;H6dvA&w$T{Qtq*kQvNx+j7uwFVOCo| -GTlI&SKTs~*;Vo!XTes_|iQcMR$2Lr0(fgz8*m?;x*H-L0wp$3<&ib^DP2!zlJdtWp=J)0ck^$0=f3e -&J>LM@vf<bND#GAycIyEQs5HZo|+MGOp_|Zg2$Hnf=7mwxShX4HG2NNe72Ks^h{ig=Zi_fp_=m&cota -X!J7S<Cv*5Jdlkb}6-;f+Ieq`0|=fa4*&W7|gUd>?A|<<JDyIs?g?!@jhZk5CgGAAe+MR@k>h#~&G*7 -51I6@kfSc0kWO-X&sxy1NGtC^e`^t#pe%ysy53d5U!|fXzMAGHCLAc$PLZ?p(1%NcA~UZV(Jm@s`lMU -6aHw60{@tc<U|<n8ua_hIE;Jpo~=4IeS@IF9&*}H9HO8F68bSw6Yv^pDvp82jES&a-syxI2koV|o}rs -laDRGDo3z6Ai@Q_BEcIprWtq3P4V2WMjf<HKXNueRObl@<RovX>{pxG`xBbq*nvF+62G?6&8^F?Ji1- -L!1dG62CJ#sVUlE90n3s%4(EIo6SVG@Kj2Rr5?au^O9L4%}!F08bP^3yl9oi;(E+fiZ%pI+o`_BkG5! -y8Fv+vxjV{t3ykGy^okGv>WKKS-NfmpocOTF0W;Qq@xCUMw#oxmEhWF&&D%1hs0Cy?T3pt8Sh@73VEA -BMC(Aq=R|v4Tc5P>s`FqmedjyV$Umc(nc5#ip%9bQ!l@Y}^cVJNr`#pTs-^%+T+v`vTM3s5#_n7V>?d -TmsSXi~@CeW9_-wS_JmsDxKbd!=*YCkH&RU4T2=BkxVU!B>!n6f6GUlpR@gPw+vizXe$w`RNV4$%BZc -h+!AXmyD}V0_2bC-bxqeq+ky-E1CCmB+bYAOmNG<anmS?aPE~?-xluA}BdMB{?6M){(ncDzB-;OeyA+ -z_;g(8!`8cH1B(DakwU=L$6dU9zuEB~-rb*A(XB=US@-;aIzcj#!aBx#*U_3W4^05JgdLI52J}E?UYP -no(=%AAD<obDt{ZepgL}3c1>-C-QfLkeU5vAVTkf~K}`4<c;Bz?YzN}RB;=MDLGM<tb7Sp%4ew)h?1I -rZG~rUC26VNdxg8`ls>xKI8_Ia$k(4bV7=#kNj`fi_@q)^&Y04{)2ut_aVyNLixpSH8gr-Nf(eBirdS -lQtS?;qI<ukT~2_J-m$oe7MBb)$)W|pEqsTG0+e#f=32VBA(#3;>nr{`e=P!I>0!>M}^0v%TEC|%goK -|&lptOy6U)~I8qV2gP~-4zV`uv#NI*1%MXuGdpZo^s`BO`f|L(<W#9(f!I19)FZCFA+2je$Lj<}au9O -5_HkLA9e@+5Pw{!iu;dUDMq<>fte4_~*ZfHUF-AQKu+^LI>qyWw5yX)};-<Cj~5Z7x&eNTCum8jcQ%P -@(<yqXyYjc-9GYI4Z&TB(3iKkur^v!{c5eH92^e1Vz<Qt=jHwhJ53!?(U5J1K^d<GN$q`7+Q+Iqw)Zz -6^ZFsO}i|y(lXC$4(t&Bms<RtPTneKjF49-_5JsU~4e7xiKm(D9l7bU!9|Uq@nVWk+_B^5z$AJERRIN -7PvHV07gPwbkJ9x-dCHwvAP)g;2we{rpbANLB*CyB-@%*8nkrPfLBctn9=wO($_;BaxWH+o;MD<klgD -5j6zxes*i5ULVtK;j~k{WPzNJRuxU@sLyQvyh`0yfcZ)lB)pSG$2yHIHLGp9Bt!%(7K?^XRISajUUiR ->O4+bt5_ugT-xnBd|Rpt>uBPOaa=Cah|F4V)~V&t=4tszj~%TIKbx~X2y2QqAQzPkfWBYZHuz6^j!v7 -PFbeK3qum9<4rQ0|ZUeWlHZ>!?||X;a)r2kEESL=<RrD1C}eLxJZC(@(KUz}R-?rvy5Qs0X#Uq*oki2 -ccA{gFOSN<ANK|9Cw&lUdzB>nNdzX6Ir%krGbB`QrLHKg~lzb>RrN#ix-znR2jZY0#W2ueR>t)=;|fY -ebhQvUS&}6$3;Cc2Qk-B?L!{iLhUL-58UHUs16O+pcWfnd34^%1CVc=Kt0hz_!WuY%ggAn&NHyQfuLh -;JQko;gr`MeEoD<zOc1&ayJbR*_ffx^FnmF5*94`0sFSi(I2uo<po|?iY^9w->-<XujUwX0%U3IcHOI -$EjRf(#N&;nOmcZb1!+}bC_NEIRosZtC;c<D%d_1V5w*jqGO*|GL@Eq=&T{jwONA$X3jS4*4BfM^yqX -N<8cwRT`5k|MOKc(<VOqembc)6$#`43+sfS$R_S^<V4)n%fu*eq=#fPOf%`OIuB9F?(LM9*Q*g`jiAG -A>=tpAmvMLB#7clsWX(4GeXqEEO)X%9Qe8wGojV&j+h`JngjPAQZ&knu#6bUa<JynuWa^r)_zV)MuC) -uA)E0&FN6zZ`*$afUH|=SFzWmomz2FG#=_tEl&|3xfI2h*sORx8%H|$0NK9Fo2xz6jT0ZPY_C5t;c#8 -&zywrJD%ZCOxG09LIX^-Ovy(D^6dWo(+%&=Bc21G&SI1x;Z&fhL>oE$>zwq8fC_94AG7C13o|;%?-Wi -n5=GA=@f$!eMt5)5O2NiH0W&xCoyi)#}3eq?<SfDTT25hLU1(E@07?1Tq)$TQbB=WxRB225G!*`$ht? -O549}F*vKvm(kt9ZiN&jwr^wDyd5zc(@5n~lRvo<p8PcHv=AKBCckumhN6LDb8=jE(eCzX!iJ7?0y|o -cSZw+e7WI4Rt`~J}#Qdxb)OVmfjeEjymgJ1>NEv%RJw4lzEXwiAE2_SauH(o;rD4{b)2|>sWy#g?CWG -Ru(82X#-b`?4SlZX>V4HY@i0d!_uu7**_^N`^QclWF!IDvp5}#O05!x<ePaar&YO~yN^M7fn0oro6&Q -bW86Mw;$57i_=F*;*zFHwC4*-OqN1}asFAO<#fG6Lf6V#fUL6<}-IE9_NE6|@=+8!DY3c?dMVWe4|BH -d3(z%0$%m;(Yg)p#fdDJVC_rwszSO>MQ#i2Av-wvMMMNM9DcR|jcXBc3Fq}MSdosof$^F35YSUfM|Q% -X{78~~&n7ndXO-4>1jAEWYLo^L<0!ih=5(eWH=mFu#k`DUlFPNtIbdn2Xwqo+-z6ww(FanC}Q8aUrU- -RQ>&TF7pG0mwMdJW)GX9I=aZ2<pk<K8Yd%o{$P-^A`#!7c&ka{cIvd#U*|9nO{wyytg5Ns5WkQ=2Cn~ -+=FB4X5F&h!(3*1FTAE#&&$CeRoD8bdZTtZ)`t-{R-kcGybYF1h!)O_?|0-5_WnI+6jiok6_nRAQ_qO -aHPobEd!EBXMBdEzzTQ8H=70LHla=!uPb;8*6QF-1K|cu44<zXK0`z+t^n>i%lM3JuqWupf%^wBmk0j -{d1?b;N(0>Tfe~_R*3DBQN(4Ph9&m`zC0`wOW^q&IspA}FblI?Z5bD`trP&GIZSDK`vz`*J2UF-L7Tb -rk0>-Xw!yd<qkFI8dM>cN<mZOhkUi2exE6ETRhDjdPKD40y)TD}HGA%a~yG7(VN0c^fYVG)k4Z=!n5D -vbX88nn#?UO&mzwfzIV8qCDL3OKE5v4wuegV(wTr>I@8^H3bwFW)jr<RxhDO~k8jon&M6F@VPPCmicg -(YdUpEi$CZw+iw%el{`qPKxgcD>$D3hd%h+vLfJ!^g{zH69=-!i8oYpF3fi!f^sXOMOz#t^ur=wj=aq -{7pQ(N-N0xQuLzV$5kfI+1{sw%)}ghpBmDh9MXC4qY;gJ!-X31yYb5lOxIMhU*JxbN@b>TmZ=<w-^t6 -GLBsw#QYVR60F&MvVxK#&;HyX1>GWYY_&keLNFA`Tv>uIte?$&O>Tw`iCdJIh?rL9Z%pfMin(BA58Xy -#s^mxh79xUj5^N+@$`g(`L6FD4|>ZxD9x07NAT+1$cy!bSFlixLLv!27`hAQ+S9@EQQd$Vphg3GHH1h -#AodA{0{CMMcu*^{+jIqU)h9$9kx(VHkIys?8x78R2j%tFUgimL?Xwk5vk+PY*X&5I7#i@VadGIzU4H -V^t=urB~2igeh>jkm*MN=Dl#@)t_#@!WdkAeC>d3{0g91c4-pl-hicWw7CDo2B*!y6T=KtN$45*#4rO -@8kZS(VweF7rTwF)4WuN|87A`ZR`tk$l%BlQRQ>Y8nAcOiJq;@(wy*bRBf#FlZS?hHBavBwMqdv$5|| -ZuuFJ<p;xdeFXMReclZa;sQJ;ZL-{aPxKhgPIyetTd5=pxJ$mUWLE~=QZxeUm|%dxP)BJzzMie0@47{ -(Q{>(H*<QPfn%?F-j%7?=6_aHgLZ25M2t$@FP)F(<&Gk9?o~T_@(XkkO~Kg6^A>&UGX#sK2+NwtxJz1 -vyE0W+6<oB#!*NCd=KcBw7n`+9+E{)JED`s0|ES$kolkEn1VdNKdcweto3!b^{hE*4>YPx1>Kugyc^u -D9Oa<h|(d{f}TuyUZ=NrfJ}B?V?dIUY0k?V#d#!e(#Vn*dtdaHu>qY5tL=Sp%Ge;MqFn{OUD5`<J=|7 -svCEs{V(pAw>I55#fkXClTA_Cq+*tHwyal(g=d21{P&&js*Pze^y+gorO$uEwaENx!uFwUkRj6HVx{J -Hi@N({?4KD3Gp11^TkkdZhiA&4|z00XQaS5B^V(*Mq<OCa%fnD%nFzRTbPq&)zXm@eTDR4zfdwE+<VJ -ljfTe;;FbcKVx6Luk+EJ$LzfbA*IE<oZ)fp!rtj+AH@Vbho*?SF!qBW2pfxzQ=q?0nRfGjROi&A!5D; -qwthE!;hVs<o$Qr)}ZnS&7~Lok`a7BRCDe|CIpId2PO$J50c)Q_g%fH=2O%%5C%2+;7&1?4LTdQ<3;* -CcaHk46JHGAcq6jCPz>+ts`epGjU@Mq1G%MIfdHtpmPk_s8K=*2Z|%Xgp10NaKc5_n1G@Mu_GZxGc}! -{!bT?|N@G79fqQn?0+sg84qYO})U-cz=n^d^cll<AE)f$<>|L>ny3U29cZpmi5-@!Ry*@!^fjVxBmC8 -xpV$E{Ww_d&4aA~oQwP533(W(qkss{V$xKlT{=^UvX+=Pv(9a@n)Qa!Yxr&B-JDU(rMe;2>kaa!mtN! -CJNNxIg0>Y{F;pAK@jURDT$g!RSO>e7VE-xb6*fl4cFn^2{dxP7p)iA9@mWdo0ffTc+-pP9+9#gbL8) -pIm5(z4_<0*aIlvMf36fTDH9d6t}}pu)l43A;5gS&+n5gJ8UCvm=QEH1P>_$!F(Q8(excZn;LoAg6_K -%QYefy=zo%xkiQJV(*M~WC%7S1IOqn25M8hbGr>LE%@8*1aI3Y7xXOz@7^*OTv`aeVe?$DX(4#)Ho9Q -o5PVjaD)vR85%qw|8ep!V)32zUk>)A~`T>+P<XmOpdU@rHJzE&ryW|)LiWAABaVSQ9n(AZob;mR?(CM -LQm<c8a`gb=>29t$rC>rJi$;jTN#-T7dkv!}}5r=(vY_aHwkw{GX>BXW``jV1<7_sP-x+HZy$XIkr+h -kzxf?di62a?t<UHmH3iR5^t>85kM+H?~(zT#{}?s(PNhMuIfigU>PP!v)lcI@Z7_g%=1etHvqqp#k?p -ryawl1-z}-j0vUZ?AI*#G8gJPrY%R2Jn_~x@{Y;8Uekb-*#zvod><U-gaqxor!CszwOd~D=T}qtTVyJ -i{xUR6+v-DKKH{iTNWxDh)OA(RVm_3JmC{}9_>V@6`~@e=)^-MRv$Pzg|O*yf6y@Qm;o)_2MvRcIk-m -rLBog>eC!=^4R@Up$-*_(;;FC~ve_W>ArJ2Tk8UjbT;pT)%!DAMPZK^?kBbOO*NMi*>dBFv-rj+ldXf -xC(&}``@++(-H^TeJB#;ia9}^;!_;gJBn2?+#a0S$l34xhp_Rm%2WYCcmhIlULx(Fz&wht<bSs=AoWo -fz=t1C^|dR29jw^&VG^zK!(PB|E$YdBwQQ(fWFdgr`Qrb%g?a9$?Uv@UIQUL>n>uy?|0DJv{UVyle|g -MKmn=Zd8K>Q(SP$JVAoL2q&Hxg=iYK<_i|xddNj;o9=tbIISr$lfLEFwmSx9*)tlPHl{aug}|9HC(56 -k~yx|JLwv)+qa>1T)%HYP7+$>Jz}D`mCB3;&fMmd!fJ7TVIgdBcwwPzeRAQZZ*gqlWZ*utsFF5xnLu{ -*uZ~T3#=uj_4UG%m$5u5k(dnDt&U-CY4)hId=k1m%3)fw6=N%UdBYT(Z^NQp|@~}=ZQHEAL*Cj6wte; -v@TTC_=b&DD2B5ytIS}<ub_nNu5C!k3`4#K$dc;x)yoyxcrNX<T|g|68LwGg)TLEYrdKB$x4>4VlOWf -tBtO_r(-xo@3+Reahf{q8a+H5Rm6_}yhsYCK#%>UWnxv2n6@%4$(8tVkwSlcJc+`QlK09EWNzdI1W0P -|n&63SvS_;H=HCATF+fIcqa8bzb(4H4aUU8Og>j>Npg}tF&Rt;J<E%O`D_F&OtF5(1zi)b3jZEE(7)2 -IT$1#dxz`;K`|m(I0hkyaM#Xq0~&o=zU&rzZVz}Bqz-xKO%bnxfkV)FW5}!E;E-_ch<O#XR?&*GQ_6x -#{CjP1X(2oJ$p$(7Go71cgWe@>=MI_TV(*Mq<^&s(fnD(BgRYKFxw8AT1uE^!KXr;7QPWQIQ>WAsxyy -%t>J)mNiM=a!nb)|G^mdWw5nMi7xzT_|M}lrRMJ*}maLWy+m?fzz@^ix}Vv~Wr3wH4u97tNLXwz=MBI -?2X=1UT-P3*x!*(Ug4A#ERha5HEVesFSVh(DOL!=%h*DBTt7(>9GrJA=*#Z9q%ATFz%|K<sk;oR8OPE -bQH|>Ti_?Np08QAR5$n^vnBooHqF$D6%&B9w@rjTI-^2lkdS!?$*}|VV3t;RL`8TK_ImeB}vytmLy?& -VY<lMNYg>zAWoAqPtYZ;n^yHL(db3%rgQ2`N_xe(>74kI)U{~cbWVGdfxQd%NpEl<Y3);fE*Qb9tChP -=c(icuI)$r9>7RDjDP2YD67OB7cq<(2ov_Q-WI+;J1)MRzJ0#v$y&#a<Jgg$=+PtVD3EMxVa*?-rL*< -}%n}RB3cNoQCJRtn6^=~%JHj!sLaht%iow|M8xsgYkuyYfWhN!bi9*oE4#(4djRnHMFeVOx`%SagH^r -gycE<<6^yRLR#a~TVYi@h^egF&z%8CZ?RtUns-B8t<!1~mFic+VwnMM<B`?ztqbNL?qxdoCeY7}&dDm -9NQxq_v86&JWS~;im>PI@a*XC0a#EZ|*<2M5{<$F@{er(N-APyI>Wq$$_M`i<bGt1C=aKIy(2<hj!Ss -h5q0aw8?-rjvt)zHaWN~^#`ZeNj~-t*`-f0B3al6p-ADG#6?1xt`BBjnfSvuHT0rxZOWj^*4ld)4n0= -y|6aKXSR<naBIv$3>0IL?sK2+NwtxJz1vyD*+)tQ~M;-m_@QGz~RC(3|{2)AI;W%KTh61Xu_!c2hSDT -Fs&F5ElQe1iEF~G*6Y~5vltmfku64p3mMcu~|vUCj~Nfz*L^8ch>9tENvfb91@z){(@r@GY7i20dUBz -;w4T6zGm^72W+R&qQ1PCy|qFenor0s$)X{R`;%?tK6bd{mog<0$|_olW=-G>+sDY&?QCIqaQ0iY6YPf -+`v28*&&0dcx8SU1FpsG>hWIm({WEFQevSyx<o3?iYY1BR`P7*7Tv`dez`spwMgnLu@Z8DtfVfh>avg -=346?V$0|twtxDxnVO_Kv(iOX30|*Zv=AUc)Ixp)RcrCtX<JCoO6(S1g>1}{RKIL_SOYl3R>yTntB%| -#BrAzSHZ~esB!HbI(oF2?WZ$Ep%U4y2fB3V}jEke~8<4cCOVyx|cF^mIvg;_^`rtkZq>J6%H^gn=ld> -oXzR?5@u@_|Don-dUox12q3J`w~iXw(ZIuKRzY54(y&P=$Usw!A70w4-Hs@~VGPHjGl{XnjLAT#bB@j -l^o;~fPPC-xHlk%U*v(`|s`#KDtGMeSgmFMG{^d%8y7`dbrFFcwFBs@%v4g6jnCtLtVfE-H46Kru>r5 -9?lB6joKm01sXpfZ2c*CyiZ}h_w9jgUhJ@>5sW2y}xL*2AL{&^90(nI6()!dj}@OEW&bZ0J{@imUU&x -fROLE(5o$hqZMTjJOgnD((C7!m0o-^AiA*j+iEkHRwrbd<L=Kj1R-aDKSpp}2JV&7h(`=VRK@8vNb?= -@A>lpXrc9OsSOy{H=@9&hrJJa|@SJdQAx`(D3Xfvt%`G2OFjcAkQx(X^O@%3zLGHQ8W^SbK-_&L_;u0 -$E!=&;TuHPa+bOh-ZwtE<xj?vu0Ru7}Q;zPHv%_E5HpE|Wuk@#nTKVsYx=vPJ?djJuyBDtK$zA6#4@) -&?zfBej-)3*OBK<E9$^GA88lhuRhSa&8<o0YXqXif}X8vw{fNoriFVHIF=xXR30wH+6i*+sy#D61iV@ -LK>}p{ma4nGqGzFAD`_+EHJ;0q}^KW$yPes8+^a7j}wbuM-rOMlB#85Qs%tnX>DAZxc0_<vbvo^ajE3 -G9g)R93!|`J@Tl>m&D?6iLQdP`4}OMS&wft5-8uj`x!ygQH(-aAfq_CBx+xBQ&ryllL+qsK^dd98@P? -$*WWNEoj{|v(l?CRCh%PQ_8Z1DL)doarvy5Q2osB&E>!P(quO37lB!KR%dKlXt923vI?sxt34HIVsx# -;c8gVy^$I9ne)rBu&U88YHPe^$Mypsn-)de}50X$HKbWNM*nA?$Fl1sC`2e@Gminwe&!p(Z`v-YvlOp -mVd1Xf|vV_>{_Rj95pHXgZF2<)FYr71|<GmMKXogLQz^v^%8{`?Y`?%i=!0J1)tLj=cF5f~))&z#z5N -Ng+yQJK4!D@~nl5FmOFw^0#=#-_Jd8x>(_bk{y^qauzfk^NJrb}AAdL?UO;eI2HXRV7hB&*IWdOAEPO -LxKIoQVj+*$ky(XKw9PQ8ge%9X??hBNZKH9soq^f))bljbEhsklH#mJA@4kQRW<tE%^FJPUy&~O?gId -_OJz7z9J{Bwbl=fCjA1PC4-urc!mk1lGInT}lW)#NyizX_4-7zGtl<4Z<0SmL0mp@NR_hRY{EbTW2$> -!YqclCjc8$DIi@r`{|In$Gh(td#&_~?s6~%jtHMOYyDm>FrZE!bU*|Eh%ViWl#AZNu!qZg#Ani>eNtb ->S#Z>Iu+a_fJ8^5o|Vu&CQE72=l)EEV+;72(tX=9yY$4iO+5#y$RXpdRA(p$0;ItwU(cvr467?Wo3ca -;ts_ChLmyFhKt%sP>yK$v5VXvwldtaR|+WVxuYMTrQ7zHf|cw^4ud&<fk`oV5rjmC(sx~StrTW9`3;+ -K*ACKRjOk8;ztZfMP=eF9<WT`h}nN{MWC;68plj^8v4$pamG|9a$VUp4w$T@_RpR+(UMeWKoyA)jkGc -ck5PNi$H4>i9a*kW4%#vRl0-csJbZ{+xqBOmQptXqf=6yO|915Z<4m|ghwA9dKN+xMg@B^!9{`x9tcd -%iL)D=@13KnYM-*Dfl31$V-gSVB014g)o&adh6D8SIdV^IMA|^`7qNAei*BB%fc4-Ya>eb?K7d3OgUy -1!8YL*gMT7@=g4<6h_O<fgmgM%jCI>-ZwygEhAsn~p=-SsBGVsT1GRBD^9sRP~pN9u3WwF;f(SgVRvJ -<S4mBF_E_Unx<-Sbl}TDVr^eyrRxO#qhXVp^F4M3Ukr;^vwoihhh@Au2dNN6q3yTxl<P%NpV)CAZl&7 -Q0(=!oK(b5kY%-;WLCM!YFcfGt)H$5uWjwD8XYc~MFJg_vS@tzJ=6jzuy%E^oMiUT)rHhp1*<|q6~A( -zIBH(GsOTl|gb>)pDqOW7wtu=Ryw>%ss&thyRu-_MdX<fW-tulyVryNis)5k{$(p#@RHmxX5T!iq7>) -`a4kAb44hNM>(+&x-U93z;BQZ%<6COj=j`qJ+p_SC}7O*2@yp6(<DBecmvUf|AINPU%cT<uyRY6ku-5 -n^7wC*k{M>cmCnM-uH2+>_IcY8B6NoN-!WNLSyI1;qGs2q9OU1Tm1-gb(xRTlPUYLc!lLNe#N8_SVuy -@Ak?VZDLUbs|bRFBi|J-iiT9Y7=TDd%7FTku<%5(2*;>fzl;ZT1PLM8NC$)lC&mNGY>iqb>u#`5I9nv -TPR!)y%s5<wN7yEBqT|yLgE-5CNEL!Rb^BHNfGT)B9i!IhxaH6Ndkv}_9y|FWcJTh<zvv16oh!_{Mb! -+j<nc~q>gOZjkGRDdYcyIg>zrGWI+-W0wz*WJCPijr`>dpgwt+9mrx(jLcLge={EEvWmTNjOtcoTBLS -_A!jX5@M&jC?P?44kWSMnSk~CFO%|tkSFkP;IEh%T+SdKKa4TO&DvJI53)#V-`<%{Q%ZN-2jt;*bz@z -RauNOaji=*Vx`K<SFD9uq>ncs9#c3`o+dP;Ht28qgdG|C%TrdH$M6T{hu6A=v+ktbXk{khC_@)^qqZB -05s{HPbpW_B9i`M11BD@rCm9wdFxl*Q94Af}^31{BITlN7^?Fg=-7GOo^^_k~b$INm3OOmD0_D;>hIY -qH-i~bCJ0OM=e4ZOxM;-P14mwSWnJo$8h9ia}YUFu{o$*%gs|td>2Z*)<{f})r4oJS)-wj>}nPQM^ZH -lh0Ec&K?$pM3N<GoNm3P3EvuIe?nvfkC2{2NveLK~gU^JpE|RgUfs`bw2`uAt7`*Um{J)YWiH16|BUu -O>Ns%lRE~UFk$+2|`Bqt$BQj=jN;gJRG$a7?)aHKb~k+=kPml9O_WJYdElBO!E%rCs_j;|gg?OnBF(1 -EY3gupNn9gez6$P81tLSR=3u@SWP4_75uCnm{i!Xt9$I8YoZb6ix8OgSzxS7iDcCBTd2#c8G{>8c{Eq --vp|jtngp0!LyN3x&($_(X`SeHs=gAxTmb5}9<xiR8$&;-+(?SaB1&ZYzJF1bESeDsAXVN+ixK3B)yH -Y3rss?btXduLqv*tw59HaR9gY0;#C0pHUOOp=q?k8?066g1BxT_xXND?wr?;5J-k9)?vj8B9W*Bo0xs -n!-(mZO)3(<yoAC2c&zS5FJXYVy06#A4FGUX4BgRQ`6x38Z2ych2#kX?Q#Uy`kqGDK<)hUl{m`9ngNv -N#qACWu9=eL)6MXyg!6yR}^R093f+$>V44GeCnMBu8;W|b2X~ISwQYyQIKdZnisqks2BlW$7z>(_SLg -AWNuZ@Xy(Ny+MLXrgZIF5TtvsRB#Yv}#OgP_~;I{=NjqN*2jNIGdIKP*-5DF*qWH`G)cZ!oB%F3fMBu -@StyKJT0S&U*x^J(hfnf$BZ`0o==t^Ds*$kgaBE3xULAK|h*-SJmsE5wwV9boqV~-I@Jfg(H}Ln=nrN -2_J$E*KGBo6l9gKLF7jneg(JxmWI;Xskeq=ngsN|=B=TaCWUJ&_0~{KlFt6YQzs!wa)wB<c_!8G048- -UTNdQV5|_;NgXoWDD=kO!)^dqR{~YtWa*64Zn|V*!z_)+klq4Wg&rH-*-4{Qpw$qmFr2fNG+q0&V`cF -^YkD5;EKR#`E(sWY)`Kk3m(@9kT+7>*(iZTp3L8k5i?7{+<C*mf(@!sfZ1&H1otv{^5jQ2**5m3L>-h -;+;I99I+HuNooA9I!(?>EjL=~XT9J010oZuPC%iaitr>UQ;;{=-M8xtu3bGAqjf=>;mW);FUOEzjH|* -fwB(SG>9|I=lTVK#CL^Xm!3(1r-Sbq`R<>fKf-~VOhLWX~vGr2VDxYf+!xLbwus~zEB{iYS)26+kjm> -6(}ltzV6~#L6Nzv!!Dj64r2SKPn)Spy0Z$MdKi2D@Gb$N-Y-17O9;&NB(}t^%E|p6wxp?wr{OVdNmP} -J^(AbHUKNJYqw|ON2nZ>RdxS7-T2o?Ih2d6~lBOz*1|2Dhs=~0UMu~0+Lv2;$va+*C0_mfe#i~dEpFR -m$tV#t4T*ohqRl(HA?4LVz(UBBLJn}Zr>IyU|gMAg6=3{9SpX<a=VxP+gf^Uf;mFVTU-a;j;%Yw0b<o -X>o$4SrFIDJL1Nw>Hjg5J>WfGGL5@Wyc&1Mu><`4K}{G|NJr32i#XFqFFKEo#3c+8NGh0Vzx=Je>aFh -{S{y`25j6ZZDopdZ9?gsrC~quQ7tLJRe|4k(^~961~L2W#AJ!o>Pn6Hz%Tch`WhIFY<JYchds$KTr?C -fXy0tezsxquu)K?kx7D1M{o4E06Z31IgLg5S_LSSHDo5vb-+oxxvE@QB(5B?a8#<=`Q92r%TPv3^wVc -qVs6s6t|DL@&K6UJ!2`o}{m3;L22sp+ow0-*!tB657WfqjR`dpQX~zI`h1Z~*x+U;L#Du;iUq?euhy9 -0E1bWRkav;`e=w;W)g;*zYt@lPwL@TNNv!_k8B-NQg<@v?q-cH`>sCmEjrh=i8<DEbLg@A}R=Y<BSd2 -_yh>_Q7!zf`^3M=rE-a-GAD4YD+?>sVJ3`)QG>Y>u(a!yEmjp8=;6V;_0{0YJDmsQ?kEU>t@;3=gtfO -}}9vH(2@Dt0chMdTgL1UbpC)dTjkGhKipjg6cyNjEiGoxAMUdPEnr%atu6HVKbm3kBeV$Tc&~)D=+{> -D8t-vfb{Y~XCmS$8O*qqp8#4O2d5%Yhx{35b)ZgJtWyi5ez7oll+il?q&^cb(p9gfpDU1ArsnbCR{-g -(IM<;~q@nPoH9Ll8l@)R66SPIWxj;Q2KX?x9iA-X0@D18B#z#s?bmNyAz!Qs26!~?8Jc-9DMs;`}+OH -T{M&SqZeUi*kIeiL^!&pUOp?*f$TDbLNy@6U@2XK(4arsL8{2_>l`wC+nLOw+8LK|iOwXqZ#>Et{E!8 -3L#iZ8L*AoOtd%AGq1qX*YZ7vDj9*jJ(U{SRg<ZH0|f42ekFK;zg#V!G_DaZX|4+dpth5|F58fXZ!{h -%UwIMB%=6XOK*1S!AZc`PG2c65(jWl@9rQ<+gI{M`lFyU>l)~5=nZ#jhj^(!oxeLQA|@Eq+OZ<g!z5( -i9`bzL4w18h3YNEFQ_%jVsSenko$<eBLtH!(=Pl}uF*xjRAd8`pZFO8%Y(;`uhOXQE!BWs9hKQzN5CY -5)Tm2u4S?iz^Z~Wb>Buo?AO8^}+2g}iXwCb5?rjw@jMQ|xt|Fv#Xoi9JVHyX6V&KFIAOhgBJNw&K1bV -6%?<?vwv{D-nE9yk931qyeu#(z8d)h=xQo*zeu9)-X7X+!z7BIXszDO3Rlcz#*2L82j(9iciqc)W$14 -KKM>%+UNMq`myut*ssQs&FNK|dpuNX<4Kf=omG0O>PoW8=!9!AAp#69aF<%2miZoWKKHz}mT1!%9V7W -)le(gQ60<UldM|zyB?U$yM_ZR`8LyUCeiG#l}_sq9YU93HipO7x;Y5kiU8Ji-{q#HJLakfKzr@owbzd -P>QX_B{oqxb+*4%@zoDJ-~LL0BpYAdZ{A+8WBt+C*&Mue@T+!f$$<;Ae*2CcO|>AVcOBR{-vx?%JqmX -j;U+T`{n9(JG}5W1R~J#EvYo5&J0iyBD@G00iYT7D)b+<>vExTsnE4Fe#5l!FRJL~IIsu|@Ze2Hw9m1 -xsP+d37971>9*t%{QxH^&jQ>S(+68{Y2_d_Y{^G7#vy9|e%Z{Mi27ULarA6xu?X~2LmRyAOz(5bj9j( -&B1n%y%5nNj(O4xzD+wgd;uxZNu^;!MT6mVj#P_n4>h{hjapi~xh7c-Sf_9w9(76Utw{P-#_Lr)s<OZ -l9UWIs_rjH26v)i8bxK-ZgNze1?2@z1cX-M=AtXLlJJ5fpMpbAqU++`pH0&eU;X3>nQ@V?ywjoeRQ+_ -5<`3FF84kF0zIGZe>PjaIo6So69f^dpu2v^qMq`(wl*qYar8abeO#|Vxnro*V|5o`y4wdgQDdZ@cu&t -zYm#|+Ch7!;z1}d;VaMGa1F3KgR1JZZTL@Mjv(Iret_&5pb3f*)2Fu|ZZj3V1Wb#=#P&x3oK`%33jG_ -GI6V#ksO0y(aKF0nL21#FlrCnJ#_8cwL0?r+to<AGN!-QWD3@-TWf~trok>$;Gl}>Q!Ap&v(fJ##w!9 -thCV<Ry9#efLcOD@)H7%=B&<<9tg1vYQo#VsselI!`nv4Wv<9hM|=J}rR?Ww|&vtQFSSK?wbRnJ+TyB -zh_w075P;-&NG&b-11g8HaIR3UTii0S^6SzyOKwCk_a#q^JgfkPZo?(nrBq`xvWGA(S2cF#`5O*ikHg -Ljc<nokvNa<2tu0&7MeWt(R4mH2o&RN>wCl5e#NNX33DLLMVqP27sHxP%qJkpd@17A_w#-YAkZx#nt) -<FgNCOPEFX_&577_FA*u~bZ8jFJc;~4tY_bS@G>UFiHOA4^C7#0B2jDFyU+Zt{C$hBp>2kV)lpv}I`{ -=Zk>Bw%A7!{)zK4JVmS_if=`H|tnp^lV^Sk+2uf*c0NS~=3Bc$X~-0xSc?Z$0D==CPzLXZkIo&Y3ddh -(ouqUd(7I2(d==Z`T4u3Ga717?F%8=H-<0I7r`4iKcawc0_zNN<<EqgEM?L;Tas%W_qGXQ~aONTWH5M -@)w~7h$OQ6s$O{`<noab77gx#S(t$5Uk4d7`Ik34?i|wwO_gp;C$3c(b>@2G6ABm)fkWVFgAVZ#dxuY -(Os8ojOTg;k^NJrb}AD8tb(sj!Pb^)09qVNggA0rZNVi%7`eNk;1VH<yrGKV5+R7(S~}23SCs{Dim?0 -wT6NOh)i*{XzOI8HBXMS+H1B-nJwOsOgbtsG<4{|;>04+Hbiokt^RsvaXCt?u72KaS)C$}E&(JvLHct -J{BWO+{zo#rPOluJvgDu2^_ZX0=Gw|JqsG08_^u?!}zaoHIqjvA1Ms-Yi7q_7sM+jG(+UDFTKo^L1j| -eb!a#j(%D0$CDosh|oZoUJkIP94~j`?K-84snAS-Fi{%VgMmm60}P=}QgT*LT=ge+FPa8f!fR!<y?n! -HY0fx#(@;6|RO{0dD{>$+X7|a-L)1Y{fQCO<>J9?g2c$#OKVosBNUS1urnv;QI(c%yZ-W7$V9v5@~bS -USgzbpVlyNF1GQ|3k8={!nZPhxyW9xHj8t*L2-yyE@<y+2rB(~R5&^^0;rd%Jn~0*YEIyF00!dHG=d% -81eo|yDpI(qUF&>&sW8xRD0}-pf{DXb410iJ)zjSDTL47OFK<J0%9X$T9ts)W0Qj7r^ePc>ZAB{;uq( -}uiq}<4M}_Musw;EN9$psOSFoljNL+1fxldN+yyr$qTz)rRB4`JAHs~ZWVRzh9=Zqf!D(vJ0-9B5SK; --o^<F1u~O<oH#Zdw`WjtgkUJu8aH`l(X~6@?FC<=Pk<_0u-Kn6QDbLN3d%4M<n)x%Bz?2I@i_s`X_VW -Dtj4UuB(KyoZ{Fv4^vAy-LjHg1}4tFjwDr@PGu;<sgl0P9{EGpV7$TWD+>$zyl+D6G>+O+^LI>q|gI5 -=Zga~Ia3y(wK%a*5ffa4Y`cOp5SNAW6r(%<ltew$KZkmLbK>?z$4|9uwzUQz73qL-W@RFePTue9LxI& -BCXlZ(dXK&P-Gt5gvufvl*MQ&>#y<gM)_nA}c8>tj&a-i|6l2qVt#P#!qq`hv<8CQIWdGEuor=Uq8Zt -ZKKe%*z{&w{(v|q95$a)2b&=I{1i`Rsc%8Q+yt0ok!&_@92!E60>_#zc^ERs?eF}|UnjHE+xVnB-;m& -UD37|NlzQUcd6&v&1jAa<o2`Xj&cK;XWKgs;d~ArOvQe{I6h^-Yt?b%B${q_1#R`hw#0`%5(tSA_16b -!XsLKD=cjl>t7u(Ru#zp@|^%w2a;%ysa||&%pRbW5~M+=dV^xIPqp<)5NHC;=zjwLIE<JC=gf>7Udz) -=pBIG7QxVApx3-r1A+pRFA;#@ZNbuK1gV}7{zSouxH(8a4*Pg}`xO94EsRD{mIA79X_Z-iMq$w=@#yc -m;<uHMHd%u5TLY!bPzw6*?da_tIBms%Bt5f|imSYlpV#CH*BmQ|EktXlZ6RGdaccoLvS=aWCLV4vSE< -dqC{!(bjOQqk(n#v4meNS;%6;$=1l-KQQA4FA3zGQEK}=Lu(NDh`3G8)N+A^@0TxrX}zJn^OuUwFiy% -5XA7*Q;o<ABSvG~qcawKS4CincV;x}F6sGzq(9DVLTkNMeV8sRA$UupPBtS~75yeQC+Tb!YIzE%*x-g -SikRl7(v!DkWl?F&))nS`a%5$F!h!#k#f{gx<cKOlu}2xl7n_R9vMfyyx<5l3a2>Ux<iyTs}7p0l|m% -9zHjW2EoYX(0pzf7&|+A_grIS<wtUI4wot+0?y>phdNFRKawPC;X;yht-VJVbqmMQLGJb$tAsrt)dyO -?K?3PiVn$j?6Q9oHWn`5!30&#JjHHqznf-I8E;^FptV&^1p9&t!n9e=$_b2y{oo=DVCi&k#c3TUeCVz -NA?ywO+?vQ%H#9<j~Ozd58*n=t;lHOqjSg0N<J#r$^>*6D~m<1iZ5<PMYSP;5a!$)q>B69oZ9YO_qlF -}hgqR?6^WJk@lcJz+&YwZ}gJibG>xGz?e?IL_g4sP)m=TC<Bp;xz+S1#-p>s$ka7Asx@ht_LfJ3cK|! -B&ji>tUTmpe~S3cU@z}(P*=>+obn`lAhVSO&TvqU8ZHXN!Jkrdl#Hq4jf2Yr+z1+x?V4Sr?6V+vxTsQ -9$P3|>#v)>h2A<Dxb?M08YHYQzF3#+?z$DVO?cHo-6p{5Aa5UHZD!IY$lA!IA<SB(uN2L6Xnb@1%ofC -sQkpHOT~Vl|26NHAz-DVEB)P+A3|OSzYfm4$(CXDW+hIEjb+%;SsM*<)gKLa#xyR^&l{_!Rh-Bd$t9p -IUcG!+mpDh_Us(!ZQ;2MP6Z3m%MEzk=wB3U>GfvgbPn!r&kv^@_;-O%<-TtR_``1!@FiC&Z!$)&}xRB -DX2CUBG+ZO_9|d9*zf*RV9slZ)0Py(lk|i)&cSDy7b-O>@oCW?D!2(q>}UQ{lx1$+s?Q+Li}N?UHn^G -ajs8Z$P7!{d$9l3rbp-t~Us{AayDB^#<``2KFwvgo`+kv<}e@nIC3DGH!6bd*6-TxD#mR(6}3DX3=s- -(3(->uAnU^*Uo_A5!fo$+DETO;wWBw5iX88wijXJ3O8)KXN8rSqq^<IxsiMvvn3F><D%RTJ-7r}-8vt -h)oJ1^PJ(%HsnAY#S|cOM>pHvEuF`I67LKC3t$DaK;6bAXT&xuD1zC|y9Akeu?+sYhLO!6;T3ALKWeb -aFBW-O78yK{(fNl<M%SX|gwU1qc&{zh!1+k+datmtLfkDGXs0-9dZq0-wcj&RDJhIb$ZC@<8Jr76S<n -~NlZtXqySX{iC@<n-(T%03go%$x?NbdrtJ9c&>+tzQo;~uGzb-!0oI)-P|u*oav9b+<T+SwHh90M`3Z -|4e9hxA8`ugg);tuD-)QyQ;D9NbFUA_#7!Z5;t`;?N@e-N3>f`>qo=beu$Y^pe7-yHvrXYneM#qjg#H -_B`kt$PM=|E?n&V!mRAwa?QF6lt8z0DT^yvj<DBH9mp-FqMN?Od~`EtJt<qUX)!a~@NrMiDu;2vw@4N -L_Tin{C>3bU{;id=*}t`tw)JnD7&QC04IG^QEk#=?WG@{x$Ly?9(Ejdsx5=q7q20~zZkto%;_`pLyN! -;Gm%U>St7BnCvT>Ll#io4zI*!$&+5HRA&;xYVZh#OQS`ugNh6wR-4boY=L8^1Jcdo@S)!31YTtX+y9k -#`H6hLgv!ch{jH4m2&d)+WF7cHB3K~^La=YSM>3+373aw8&rQoGzV1SKtfCc4}t`;ypoKD*o`bc2Px8 -%}9s9wfCx%(#M&q`21(n-+M(KHXqI|J;U6y1~IE`i31k#mC+uhx`dfBn#Idlux2i($c4`km<d`(}p2H -^t40%v|$7g1J@qmX~O{2+1R_|l7Ed4$-yQ5vPg%Fqugjjq$5-}8pJMX=@8J329Zl*S48SYgSbr=_HMX -DZSWwe9b!(q0gI?d?3*twh;5=ER@ydU5G!%}I7kzVHi3`^9u1L@D)lhQ2LlLrJD!PYRNBF8cpL`QwCm -RJBn-%1?qtJ5uo@G4R~&j><wDZCG&_g}^{B$~K84jLHv>)BCN~33*;<?3^lfr8xEQ$gxJH`gJ((cYkm -?4B)<&!r$~JPfkhT}Bn?W1NIyp3mwo02P=yK6bhhmqA^n!P@!8}M>dZoG9U>qc|Yr(tOU>Zyo_HMWgg -TaHOcA15_U<7ZLR_-=q(t^I*AZSHQ|HQiul2+6%QQvJ4b%lq$BQ9B+Oh|Hvutl2bA@Mrt1&P+?S(1ga -&3hyZY5RvrZU${$AUQd>%|)HIJB;Em9uU6U`Zqgno5;C~yiMTTMc+Pd-hxY;uz53^hNyX!K~NU%g3bB -*HOCA<*z`rkYi>hgFrY6BUUM50gM;hZ;x)HHq4?N4<S;4(Ba(%~uvGH1HX=GQwl>o`a=11VyUxb<+yZ -Z(=d~>llG-8WIX^__rJouR>Db37x0n?z9ccLE7PBID#XLT_#av-w?}kInCJ&O@C1&Oq&p5I?>F88*AK -K#67X3qm&`lP!A^p%Gdy|LDvVUk80+N%xQ?8MqSdmOz10qYJ^>BI9`z{>Xz})|PE%!r(jGokj?wga&W -mW|B_cqk_kDs<6Ckf98!f_H8xpulftgvczJ$z#l%*UgSe!};}IzmMy@J_6cuYavWyQ1!&Dpj+#TSw3Z -0oK;*Kv8a26>eJl1;Ls8QJp-BCLUKd^@TT<&I$rio*Z3ww5cyEzl{o+qa>8^JWlg^@DU(MD6*W&MEYB -ZBuN4@d%Lc9GnbUL?gl|$W#zvHFczsg!{|m&5@guzIe)lBfyk8JM$rrdo6NIql+7^Ety*6aeRmOAKXv -M$qVTnfPy9sP*#87=)l!xRI_>_16@_mhPwwBJJo%*p#AV?2Dlo{y$_bwVF!H#in-Mk7B%#)gNqlJ{54 -WG|^p6w%izdEII=!vu-@G4T1>4steCJt5r7S<xF^hTb!?EPjD9(*4Qu{iKt2vQ%>-@azqYf<nb`T1A2 -Wbc;4i*miA1&t@HtG6fuP8|#q{U;=e>=bNv;yu0gCO&Y>zD%LFE)(6%)9d+R)jb&cC7zyLx^ONrT?@c -NOk$W4PI1878rlFVgyBLlt0<vMZq6|@kcAhTru!}u)*hLX{{gX2vI)j@Lj1Yw)Rg5gAO9-$touejdfb -Vs>07Ia5Ctjr#K1KMkZl{AddXd3!+}o^|M%IuJ%HaNk8#?rD&}wWGTXhX=@63v2@{CYYMrcTsUe?A%F -S8^VSs7omqI%nnEsH3olz!$kk)vRci`ap={xGYl_Q~;!SG``OJLbZEFhY04%&~O(7TVh4-x~<Px&*p* -4lH=nEfPQ%K)n;kY%$kCNh3YYG|VTln0XLK*v$))aDOT=>$OB9|0jTT{$Rif^qc<|M^wYYJKS3YNG=3 -YleS;d^TexzH|Xo2aT?i*h-^toBCtP?1)VB0Y#^eO;1uO@FV?oo!S-L|2aW;goItSJbHTB0)iMQK~9P -hpH^lHWXjx3ymntnsLW-po({GXw56C`*43=TsdY*Q7>su7n|I?X`mIGlp+uzYu%miAJYhB<+t<wj{sJ -lu(sFS<A@{NWj(9?Y{<nNbiH&Kt3AyV0IKS%`X@qduPqqBo<}qbd8&PfR;Z4zYD8`BKwEDVL|IYQvio -DsvZ91*I?S^yWL;fUYDLekUL1z%d+S;%ELSBq*R{mQs%8{#)YEywRH4F;(1oO<2mcPVsxjQtJ}1<OT- -EccaCJFAxw{*Hte7t8X&c2}M_29Lybq|6E)1uQbSF^Nzjxn5TX)h8b*y|>|AxPSQZFM8@z9?aZ>*IQb -iVx*fJrv&sVbt&y6jdb<fA0Ld+tOgqQqrfzG6RL(Lbac=AE+8){f>V3&_jnLsMaUao*t!wL-7FGz2J# -4nVC${e%+px!JX%zLqzRWg%h7xGW+U%GwCJ`cp?1jaYeYc1Nh<oP3;rzIE07g7WNYwJWq4Q8g!u=0|$ -S`+TYinQ6`|M<(a8{?~;&|H|w<{=$P#?k||E<@f4ecw>GcQTvbc$510#)E1ZH^t1U<SwBN)i>PB<vP9 -)<qi9lUpB6M#Rh28+M3r9I`9`XbG<R@{)X7uzMLr#L6r$(rI#arEi73pX>ZEE!zU2Ht&S*XJFULil8f -h%yXN&^ws{=rrweFBBu#)dwR2F0ttAI2<8$S`4s&E^|yJO%<d!oNTVgprj>nR|z?hH%HGS2ESScgFTZ -kLTEpPzK?B~goOkoe=F=l5p)DARB9e$u<%Zp>FcKg+|S)=eR_zuncgJ!RdbtitrSyV{NyYsLA7HX~h8 -RNSbEtZUkJLlL!6wdG&pX1QYM;Sn}el}Y&qh<sW2%O8Iz+wVU$+hyyP(fa$}YxKhkKsN6h&Htg%e>U4 -?>!#8A?;87w*)Cf*jMo3u*!yO?Y~40HsIecK?Xq>%X#KOs{?%-ktq+XWKWXe=%y!v&-~8ea8vURGkj* -<r^B*<(W3yehuA5B$pwXulfNb6~ngRWh*)ChPx+}k{;&AD#&j}mr#e4Ib+3M*%`Q~->6;Vu5uq$Ws43 -lf<rXGutABeKBWxX;ryPsE}viSvKocB~|AF`sWaECHZEGL9^i8?ycx(*`~kH!g0q0sae=uaH=g=?h!! -3P+U>mG0G@lOI38C!yR63;2ish!tuQWWCl%S!3SAx~RR=_}=$xd=4M#Riqlp`g7U^`1Wv*S%(<pfCHf -^$Wlv{jvh`d6%)3O11a<p8%{Xysm3kStM$g9_Oz9rF<K~!l0XZ!<Y-l>*PTQ70Ffrt#p65@9K}`a_jR -2A>&&SQNvSy>SxqD<*B~`7AZH4V(I1@CO*n$^<W%OND`(eSTFXX;;mYyb7SrT_jsU2Opk0o48RtzYFi -w}aut89_gx+CMs!rX_39}wwRjZBVHb64`yQWAN{jC63Vo%IB^EI4s6c)1&6*Q17nNR_grC*n#m8Uj0* -AdM=H6Ucc@FC0>KVm6Z=@&G1{j`Lg~S*2C%Bg?eg#Yg$Vw_4SU%Vz#(}=nv&H2KG!5kHy|_|=^aYuO> -C=cJ0_-VWkZzVLf%fpDiI$Gz8IFZR%jXYuB!*pPTzOH+JD7}}Jd^>!bv>EbD83wsdZ<A^5P`NJn;-j` -nAu)7;hOFJ-t(j$LCCa`NLqaepEgp+)e{1$jTCZqhUjV|g<R<%;;Nmo&0Sz3HRSxEcI3o%lk2l6d6Mc -%&MR+g;Bm}11m$BTiKEwiF|b@~^_02>%&#cR9WqrUZd<QsY{CqKwx+#{N}4^@Jjvzau&qm6rrd#3<-5 -1_c5x<1%hx7wc(bjYk#tV4lG|v%ql(dqc!VboaC*82`%p<b;oGUPG`8FOsK3(IZtLwi-yjd-SUnfgzI -!}_%Np+J-^Qg}yy8|{_3hU%g+p$NQK$9bq#3vI9;Xo@cc`GZXM@XC+~a~*gYn3UtIG6oWQnVnUB0c5P -1n({#huqnQ!3nYxj4Z7#aAwaUPJnPr24ruU)y>W<I2u|{7@9H=012P)V;DAuK{YpHB@Zhim-1S%X48= -xNr|}(;-)Q6_r>zzyR^1$1ykG;!99GefcTYm2s|*WY_c(KsJi)OtGKz`vZ}=ftx-RVLrrBf4~d5@&!J -^c}L)I4?^P{;iw|ulvZ5S)*Z!|-ANra>cvTdagGR_K^$U~j}!{`C=8_61QNIX-ApeO1==SHEg0m!_s? -P-?&Lj;{j!do48&uQ2xEOFutv<3?0W(y?_iA6I)*47D{PuPB1Op0>d1MTC4Ojp^ec^J;C!j$%(JB92b -T@)sgHWcANnJ;bT3TF;pRA^#yrA#Mc@c;v&WSB7ie{@5QD@0d;Gm=9f^fptQhAzg)<10eJ^mHQ#ipqL -ny@0=L3v?*c$>P8G$-YNhRnEbC{)5ayYmL63hmeO?^Ie;*_f!SK%Q`=Gh>g1qGerqfSJSrE|W4RM)>w -oX_%|iJ^Q`d_Dr0i9fGg!UCl}B|74Y1viG`(1M$axXX$wxe0HM)y`$%HT~-(>1>b;f~ay|;2SwjJ4qg -~0Cng?9VHJ3eqsog;FBkOZSuKoPh*5wx1}7BZx8Vo>jsIt(;e<tsV}}Ir$bREUe|(Nct)xXH@3dktY_ -p13l#3co5FfcnvSm6eDU3g+He&d>x10o(&}`?uthB6iiR0aNz>Z(C*o$8*@w5}tQ2Lkx%rZweZ;pnW4 -=iWx~NBWp?4XdJzVSgE(NUy&uMuKeWk-+NCVRy1|b$eeJ$h|5f*w~r@BMFm&mwPG$+k7eBcMj<vud2+ -V^MpxE8SEZk&1*Sw5r3GY-WS9Ng9Vr0T|_IEnF~5NgI9wAkbSi1|J5&vGGS3Du{ICg78X@99(A1w!JY -7+L)Xy(JL2FXO?MuRyDtm~ImLnf}?YXdGB{pOGtMH&6WErhbf&>XxxP8N)L3j8^D*)*Vu6TwhAMzkSU -39{&95PB0tmyX^&X-H7y9q>6S+hpaBIUclD?k6X8{;knhvt9Lo*h<pVIslJZ&;!zNR?2kxQQAo9!dqi -p<>*jnhPtc65t1%l)R3yH@sCS=*+~o{s5vLQ<axw0#i>$2NzHq-WV(O>7B&`;AX0wE0Yf@JuR-6xGoV -pXijbspy4W#<&uD88;q{EH{YF#t?emFy1n0rC0K;KVdMqt*5q90ri5JG+Y`$2@P(+g57`-uoAB9yww` -o-l^F#zCqyd=%K#N=C}NyKyvXyMp}oQgdmOTeWF)XuXo_jS5~-_i1ZNv;?J9~se?q}C5u%v}<UQ&$7N -f8vYa1WgA5XK2c#?iLIJZiB;2ouwC8^<fw!jOk%`Ne+WR!Q=UoT<SO$@-SYK=9_PtdMu3dG5%nE;o@i -`gizOOj*zjDAL6goC(0n_qnoO8g952;5Nfl#zC@QOd`Sz^)Xx!W-O3O0i8(BFD?juDZ9QL+{T7j-p72 -q+J#lHLI(uJ{dNqur9$$wrQvH{3q=7dRtEhT`RW}5~JmL$%1mV<2Am}or5yDBVZ{-TV9bwe_!!cq!Ut -g126C`@S^O{spj_@NwsM}}0LRNZPpHN)LMF4$de5@|$AWeJ~;x16?Qz6Lw5bsawLwuR<gJFGqLw@M8K -h|A&L(Y@SECKa?L;kAEandum)UEl9Kkv^BQRwF_>2l1lXoB}4^>57t+}roHa=#_*%}kuev&vOEBlT}4 -pW|}`ajDO<nMpF3%vbtcpWLCZ-PL!b!4CZlHp=fvPatF+Khkzz;M9W%Axq<I7$cneYzTu63X8oX6`A8 -qFh<>agaP*vGZv*83vi$6f)0ahn4@6bJ5mwD{0ie+%sd$&wEA=(`CV=K-jiCyF<1{dIPb}!9q|=n;HU -a3TY**|H(}c60)$f60D&?|jnCDk#gTf!tX|gNlLO3=@Tcn2c_da*gi)6wcdz;0B@8Q;`aQWWbL5OWzC -Ws%c!5^8StCE^UWso?w5~EGT9D&!QsXy?Gj&;K;XC~!*p;9gBR2K@=P2MCCTy@@kd|u{hrM_f_q%S?M -|^2BzE=0<M`CLj8o$53gm5H29oQhjyy~_|przc;QwJ3VT78m=4Q|)yR^4Wd;(6ibnd4Wtmm}^8j0`=m -3o7zQ0XU2w$j?Q5fOCXVSAj@Whea6mg`ysP`9NxV#OA!N9~u++135MVbDsHVRsBFpL2U36pZjYFt8S~ -JK;H{4FzVx1U>JR>Ta75tL-K)~1yP*z<8a1|oe0#rug_7%rIQ$Tb#H0O3Ouoi7>U4O<P#QvB$`uKLW} -R$%_$tiEqo+ZXY9}5<C<gA+;Y9pX8V{lqZ~urv5W$r+6NtzlZ3k^+<iePb)_Bq<J>Ql#PF|=$#EN(8Z -tphbyGfO3H~K@4H*xEu*el)^uBI>$3fQhgQOZ`JSMFR-%x_49Fucq%rzh%=m~gC+SYL{qIM!46(hX*R -Q}P2{n{r|vWd_PJrO>W%9G@2YM|7o0$0GOhf(UPk^FXqBMhHOspIpzQ&L+}znmPZdS(%Dsp~V}S@i;s -YXaEA6H)-Fu=ZNqC*-hkOW!dBKy-^ux<eL*T3b#?JC_Dx(cliAzN1zk*403q>HAz4FjigFIabD{A<ls -#gjio`(~vKqGlnSY(_0{+L&Fo&wx%Mq8&}m`;MV=vG#;Vzz!Orrim-`soo3;$^gtDeGTy<rv*rJbx6* -S#cUbAqOL~wBlByN1PaDZPhpo;D&2J1xi_d9{B;cEZXa;-Dgy6H^iPObw_}fv)M#^waX~p2UT+vvB#a -cH@0&OP9vXo0IVzU7bvl9x=vBSJ;IQN9|a;(zZM9WcqtrKWtq328l9fV^O#&}&JCM&0y4I*&@!%51>4 ->G*p=-yO@r|uJ`qClxX!c&MC>sfILp$L#%E=<eBm`e3vWI88K8o`X8kd8_^$9e`M!q&|N*?j3nNxWzD -P)-tK4%HX4^tY$6m&K#sj`*(_C%?Uly1^L#?D`6l`N5nP-xtzgXa42Da0<SV^5F1!w1j*i#gPqtEVD1 -<56uGZFMDG5tG5<k$T^V3gBT&y?P3<sFmP4Akdsc_{lT5Co2HDbPtfy)YGiT8H@-<oG$~}|^?a|JM?= -iIZp<>i6sCsE>XS0d6Maj$K&dOQKoR#mDuYy?VFFQ@0`97aLp;-1ej(>qmh+i`MOfeJ=D$mSC+<;&Ma -p%P=~uEJ1%>q#y}sITPYC>qujE+gGva~=LpXJDb7_kUnZh0L*eKxJHf>xE$+;;B#I3MijDyGZMNXpfA -poXd$;E(gypUh|m7L1?e1{p6?khQ;W<_1VEJw1d`((3zRvd?kM;!>UE*-w;vw3c%eS}pP$!x%~NC(ot -kt#dqhhZS}te<lY$BtZmnV1vPJP}v6hQ7X!^_(;e6E@Pe^gG$Pd3;jxS5o!ngHgxt%rS&iw|UJ8Aw+F -i(SE*%em={&-Rd!JyUK<3d{<u}9ObFbxUr5po};Ioz$xL&l}ua{bor!}gb$#nu$@|Z0*$eZx2<Ze8~P -b{NPFVSfVv#NdVmP#Aj9=Gs07!7aXu<<k?(;UnTvWC)HOqWr*gp5V+MVNT3mdVSB@8-VDYKF`HFr{!0 -kRq7Ad<`<z2{7I!J<%--XV?li^ViGW4|T1W};;-SB)(w97XAWTdz@JI+J(#AIDRK`QFprh4DJejOxh) -GLSPQL69nufi*FBA-6`c&~U<r(U>CakoTyd+xc(t;r6&N6W{7dLgTC`if*aMgo^d#xE=e^pU>A%dT`o -zUPL=kXs0QcH$wpr_TCoNCo2>swZB-jAWkP^GEt7X|Z^ozq$`R!V$jSzI+Emn0#<IH{`}uT&pOrRG;t -ZJFvrGATBWL_sa0Nkt-|9GO;Ll@PuRcCI#p7KqVC3y=8Fj6ptw*eU*Dt-(H?CAH1FK>bv*DxT}Kon|g -+$Coj<0VX|pe4-fB%xM^PIEs<S;2eo{r4dX;9=c=At-MHUp@+l^WG|tkoNI)jvdp-j|o)p*5|Nq9Wbh -nM<2>;Kk1Oa@+>&?>;LvkdJHRKHD5LXKX$ifm$*dirTG$m0!_J^~Gvo-=a+QW;@%kTx_M@Uz9)mPml? -abfm>N$F<>zb~wEM3nAgWlRp9cX?j2uo-G_L#i-8R_5%!Ml5hOS<N84ST+B1C=^}Y@Ke-QMq%5%Ce*{ -6@{>S$-pRQ7P4+!9#HzGl%Qh%-7Yp0!xc_Vt&g!8J5f$Q(^^rxBNYP*5zyuXBa1g4N!akQ@7}x5H4Y1 -uJ~=TKNrA{G-$n<~QA7bCSvr1CI60poKcb?MESxme@~AA88%?J=C6A1##;yIVor;c|{kAon?TbN~eN> -S&zSuzY)&hPqFna#`>zN0_Bk)2Y73qfs6un>oZ7>2mD5L}TXoD<xNg-JfiZ-Y~HVWwq%M{W9r4*7oS) -HfkgYh!YQFkMy7HV?-voXZv%dHt(#R#iS7P4ksgCIN#w-CpuS2=&B@>A@ajhRxhg9q!i_(>W5UzGs7l -+<W+_!SVgzEmeKCdz2+j4M~S<y&@xjTZi}E0K1^U9QX|%bW!nAx3wj#BB%OLHVWtk66ron!8dmpsg>m -h7VI_Tn}~iUgr$Ab+~tzAtCJ0yHI_FE!ffvFQ4w<>lD$EXq@F_2g9DUCDiLY+rdUDqpDrha@c&SPEgc -)gtHWXI}YWMx9yM0Y#U9t>yi>BWvi@{%G}`4s5kAB^!(Omw<}0>26<vEH5;tihb@*63Dg@deZ&!n;Vz -o7|5*|B-1TUm(fQ3m2at%*ryeKMR$4PpVRurpI-X;bCBPr}^!fr>feytS^2QhXI)?SA)!G7yn*|JQk? -^?!Gm)X9x(A*y^=6>)WC-Z-lgClUQmzTJlqR{9eH|<3QN+KAFJa~gMo*MG{@@OxB&Czj;-Er^BNqA*7 -LzjBl~I`t?a+0Oljp&KlS8Ewyft6z1k0N7Yn&iP&7(pAc~A7A<Kb@QveMUT(b?)F0GgO3gCJ8$bAj@+ -#VegOAV7>NqC!>M&5dW`37rn9=>)R}eKES+H4aTPLfLds;0IHlrCm~%kpJ6oz^iAQ;j3r9BWr{kp1SC -Z1w5`ct3o5GOI-m^>3Ma5t{UBKq0Fy%eZP~(V^DMki4*X(Dx9gC;xUaU$&!4oD3&4mGGrhgbduDH#`? -vXM=jY>8y&n*azQp(B-cZ+$r!fk8qpJlNk(9M8g^fw`qvTpl5)89&BvX?DHU^5gvK8U(vlaFdAUB@HB --8#sQ_Pl-gZB)A%P0Yo+qfy#@94&fUMmd_Abu^?nG&2PfjH%txW|QteU5=GW)d%l0vB1+TuqUn%6$YT -NRnJ0YOOd4}BN$uHkW-u$8~Z<bytNjrzWq9<d4?AcX|O7QTY3Y}Sm6+R0QURY~0$Wp!7IwimVA2>@L@ -iRf5V>#WKOK+Kq}I#Gshl0_Y-@Bo#BoxI2TdHv$4_iY$I_Sp`(V+Cd#)EHAoog^iSS)PBEKc^tL9aqD -cidvIym#Zl)5Hw$mFS68+M?M?yx8UbRIV}Ce1K0@=1x}TINc+ow7QVf^tBK5wTMoR4CBj7G)v3NTGNn -dAQG`674Z&+^Ua_(&8L(I1tIV|p5Bbefi6+wSwu}m<U-xAm0kh!pmGTVzE_Wc;8k3wo_NiW9whglJP7 -(p?DFG8Ph5I1)S>Hf&mvlOXGj>ZQnwO_@{gglxc&@pQW<}2Dqt>cQ$~fN0*C3x^g5j9=-1$uR9MGFj6 -|F|gbhYp~`38UjCI03w5LTB5>_$wX<IB|CkQOBB7|qqsx=8eVdVO=c$;EPY8_=cb`JWz@94Y(LlLwz; -895VVA{S3JKug*@oe$20z|;huSqCkhuAXdPk4Gl{wd}tJ$q`(Q!`m?Ru_v@qWrHhGPba|yCc-aEqk6x -mtAebLk%pw)ORx<w&`#mXUwHr-i4@3OsfhG5&!lP^b3nMv4iZ~DOqOt1(lYBXRLXj#?r<me5CJAXC^P -&H#CIHT*)YWOm9BP;tFHvbROWGXup!@1gFz$^@ICsq{KZ>5(MJQg-vaK3MbPm_!YeblLAPb|d1)`JV; -nua)Zjl)sCbX|^Pn5iAt1im<;4aIIoaN@ZtNZ~{?1pS_;ia*Joq`5xqfi(AsemnM<xFG4ue^ZZ<Y9<& -6pKq$bS9R{W}csH2#+oA7c71K9OOj#y=}D{+bhSW9-BF;oW--F*RN(@xgt@@fiQA#J_wkoF9}JJ!I!_ -jJU7EYchiB>SW^Sj<9%pg=98ISZ_&EYj)ruJ7CK(MsOq*dSk^`5N~7zlO?;x^WJ%Tsk>jw*=&{Snw5k -K@}cnP7p}|}B4DV@cp7kGS9luwBg5Nig6%{`Keb3{jFEQ(ts)R=1yHL_Rs8Ehe|{XRj3xa($SV9~&Da -A|P>$VH8zdQPKS)XvZSg@o><E07O3uDaAT|}l&R#$`ZJMstt}7}HwLvXA5pbvf$kH>L=$yLWE@jD;-f -9Ue9F0G1QQTw&5eh~qLTovpE$dmaf?VG~*Hm<zQ#?p~iYm*|XJPu*qq3gS9K6H9JBIIQ{|@l=RwJbn* -ioGt^<sY*W)3Qb+1`3=+NW@V6|08EAti(;Qomk~Op;UhO;rz~zK7?f3Tg{=iD%-oNyHn#E&aYV3dAMd -V0BKvN?H!A$qRuVZ%(%J-eE}&ojVPu;;_fBbD^CLIFGYJtY9ned2c}6htZ+!+H2z)T3#01TaQ8VOwTq -ZxxYl-B+XjE7M`jxwN_L8k!!3x^=}am;;j;`L!2gihyc&@0eZ&Zh~RnDI8Hkfg|4sRnYl!xC+1KM`$Z -i5cC!;-YTFn0hWy(WUudmBm;9%Upd~fo^Wr4DvzT^s=W#gkv*@XCH-KaH{ycc-5LI;%-q4FPW-$0vJ@ -t)~@3lIE?m3L+G|`mtz`Ab7^T+%9m${tNuRtHCKWy{6xWK-jf8{sf1Dox^pK~_a9B~f}twC6~lyDe^X -@k>u9)mc6c=sV6A28yAH+MjI=;Z>>@^dX_zT97CXLFe^w3Lzb>t^p3escYDzoT7?>%_4m%c}A6HdJ_% -_6JQG9yDoj(4?tBlQsrT8W%KaRnVk4L6dd_O&Sn1X*tlO$v~5~0!<nTG-(~sq**|d_5h6<0x-{)S^zW -w{ci&E-vrpd36y^m@ct%n{XRhdU;pqwP)h>@6aWAK2ml;P_EzJ0@440i001Zi001HY003}la4%nWWo~ -3|axZdeV`wj5Wo>V2X<u?>aBN{?WiD`eZBol_+b|Hk^D7qYg=`g}X91}Xg#t8%8z4E_fk4SCM~Nf~6q -VX&`|n*+5893i9Vl{Uc6PX>(GA#RSG9Ynnob)F-&I|!yv7LD$`&sXJao3wt*Y4sFvwWxcyWe}eyy@X@ -35cg>H6XR2V*RI#3yS=*Q>zosJ7{?c?S4IB6~bQ<L`9-iiP!zA)m_=W8Q8y=VH$h%rXnQYTxx6?jS#s -bleX)%Ti~K6xV29^zMURC^gCjQM!U=B<T_q6uRlEn#5h_Y=<RGjT`K0RiI!%%i_T%P9yTa1XDw8vv*} -G)zZxz;~2p${L(Fs&`FI<C-BiVwKEwIhKodOpFXdoSS9prZ=~?tzpl8Ht3-0?nva--n{Uoc;wx~@A4j -j?@!+0}GV`Wmy7j0%+R+MC_0Je*8J$%Yn=JE)shOStf4JlF1o(EiOTVT(0`AGn(H;M{$WBD!%@Q#kUk -l1l(*;gkV5k(AP?eWlz`94eW3w>q^zul4){>JkJden&FwW7mZ&gG4;NFYGd!vW07jhw5a||kO8MK3GL -!u(c#kKy8Mo0-?PNNZL{FAVws|lT<gAqIw*jf0A$J7{Yu9^y6jyX-oVG2b^E%Fm0*?&+=0|XQR000O8 -97^_9L+eR2FarPpGzb6yA^-pYaA|NaUv_0~WN&gWa%p2|FJEPNaBp&SUuJJ|ZDDjSaCya5QE%Hg41V{ -o;B*gdfY{D;!){2OU|rU91DdvIa>ET65U92st0!BTEZ4~l|My9<>||+sxQ7kXgC&ZTzK^6#POh)!*O% -wZ4~yC5a(aC`J6pgA5JF#^;Klpv$>Q_PIV3V=V<$)mj?|PAi6Km|$cY@GzZX;Y4N}{=+%htDDl_K^A+ -mPvc(jG8azKrcGcJZu#axh;;6)bIr$%vy!+)C%x3$@ADVw@>0^i;q_?CpFqyfg}mS8Oi7^@MAc_!T$r -<84nGm<ghKYCB@@uvdjILl$iGk(+$d6sjA^ZwC<7lIN2SEM}Zr%IWxaY)cO2zf-tmHyU&Z-l^CFq%dK -tmqgXDqfB=v7wxQx;Ttv{;+~jVdWzvXqdQ?h?HiSA$Xvqe8)E<G=KqAC5>cKLzNJ^N@R^-ld?=5N~By -5eZMSAuYBoovGPv_gMqKEMb`Tlt_v3=BLYhjK}lr-w+adL$=n{5WFrgA=r`g~4z6pD+Rz%|tqomB+O+ -AhA5TD2Dlkk`G|*{hk&AE$jE9&V8@*P$w`5f?EKslC*|nn(%CO}YM%jJtg^U+btn7&w^3=!oc;hpAm; -150PY2(B?VWf7zvOXz;va%|W*hYsSCL|QjI8|Ap`S)R07kvjAA@INJcLZ!umfFbl0Af1gF&NF5B{g;; -vHwvuT6wT_zhX;VE<<d?v(vA3HWO-0cQ59BBNgmvZPV%s+$GfJe!Ix6Mg7P$RPvu=c(eROXt%5;p@%L -hS7|;iRDsh=_xC7(*qV1tC`?jx;R(sA;bk^t|=h@;e@1;J$_CNu|MBD!f7M(M9^BlH52wDqHO`qEAC2 -nBSj?6ZQThOUEg3;sAx1o`y{nuS0cw2HxMM0perSUt@#>f)zQ{;*_2NNP1yD|T|xCNxZk2TvI%#`xFO -jn!bI?tSj`HgP#r|Svk@{&rt0nS4rf#MVJB_t9s=Xd8f&Kd(f{$Rr#<WHUiZs8T-!Y!Kgjk_Befo^#= -AwJ`-JULwmDrbmeaG@$IH*ULzzCYD<qB0<nnAjKc6peZqKJ5|Iucqap{iZd<RfV0|XQR000O897^_9N -z}L7n*aa+2>}2A9smFUaA|NaUv_0~WN&gWa%p2|FJEPNbY*UHX>V>WaCv=BOAdlS4Bc~zCT?IM2Vi01 -1-!zf4g)j}?W9!V++IM4i3^wS|2mZsEGOa~XiTC8SI$LIw4sA2*g8tt24NRo7I-4zl2WspDmY)@CL9` -o6C}lc#0FTv%N(=-_|RbvY~V@#GotPzo7%10iBjzrODkF{`JrACX8AZnJQ>FL$8U;0+|fUNB7hT^x}# -ug*g;us=<o8&FFF1QY-O00;maO7>Rm!NV4Z0RR9W0{{RU0001RX>c!Jc4cm4Z*nhkX=7+FUuJ1+Wo -~aSaCwbV%ZeK@5WMRvirI??X8i$%1WZ`MUe=K0X3SU~w`^@>^&s_x4CLb@$>T?y9MT~4>gp<0%LG25Z -OtG<ptglQ^&AA+dloI0eN@Wi92tA-510GbRfA93IlXhFl-iTQfuuFok>^>ST4%r0A|<Y)giVd-kFZ|w -3vcXcp^&1gs?Q{tKs5@FF8c<$>v-^zISmK&%)yPB-qDG?(7xn7XBP18ojQqgRmv{IA)X0xT(w~Kx~dm -g{)L-hUnp7N?~r$L@$E<m6bC0@Gbx5O&_A>-CNxMQb8bH6o<cDXCSB8hetE9CDDu3x`nO(hnoPEt*zh -5HsYSxg$OhFJRy8H3E|u&}N<?bdowqq8jJHjWP@Z@-{CY<}JL&~5WlFODL_J}9Mr<?9p1WacfR3pxlG -Zl8WJJ(5=5}eUzP^OO;i1aX>DZi`EXhtA<3Q;ktph=)5g8}#$N%be^H5xlS}r<g^%kA>MG)bAi0MD?c -*wtclw*=O|CcM-JN3B#4Nyx11QY-O00;maO7>O*fA@ZL3jhG$B>(^%0001RX>c!Jc4cm4Z*nhkX=7+F -UukZ0aAjk3E^v9J8eMbSxba=T0>eC*yz=Per4O26XMA_=H8)M1aooP>G&CfE5^V}(2{N{t$$#(e0w4j -B(lv9OL=u7B#eQQKaNbl$mSuU@c8$m~Rvhc9X&K+Bs_a^k>G#FLj2BYXV%siqL^CfIXIly`chxp#d(q -nOyeLJ?3bie{QuyOo?K&J%#a?n;RMTotbs_hb)QvpF?B}X1fqYTPn7waB!#9X`SK|mTWA@P1IPh?);q -zY-Mi-h^vaKYrFD$iRo2sj0b}!^kQ$dsgv~8-=f(o_ewaCmUeD8!ZkcVP_DB(YFVxjLv-TY%1Hh@oEe -R6<))2|<j*FqYInoH3y`3Ya_L?hbv)X&hHnQD=7JM(}qc0#=NCU}6~F@2JVi^WdlEX#{VwOP#@zHfMa -2*EZ>rrIWAKmHBBmkS0@5Cp%9mbC}L2!Ztoj27Yy@BkXjlmIN@^dK?I;2%p72E=RH0<9DVzsuic5D_d -0(=~EH0q)2t*n90pp{uB<=jjFzt=(8#^-jm-iG4b?hf1=$%@d3y3qrYR_DUn;Q*EAD2;LMe!Kd&IQ3o -nX4+snc{Sf4fS!G-dkRE6l5O#&COMYV27qqP5p%JPpLE%-yK2}n&P6>2mk+5Gx&S6R+Dozax9Yk5Pa8 -p&Kx6tQ9^}_P5EHwZbwc%il1}wrQd+NX<BfI#^{GFG|S?4G~H#;@6)UDL6q=kS{R^@EV%MypxMWW~dG -Zb%1RT(oO2-99NBK6R84yC#&zVKF@(}bPoEs)wkBEn_GzK{~L#7og0Scl80ZPkeAGS38fZXss@)uP{8 -^1G@-Ee)$&Tts2?%`8E=bXbCy^?`3hTcEm6m-GYkXIX}+f#yZFzVNb})3MGhsAbt2An*Yl9_P5in5Q3 -<Q?f!9ZI*?D21J?1Zrm*?i}xcx#D1(T`%J#F`DzXM1A`^@f@R5&eV8KI;<1CDn?_gd=TM4x?0aW1$>! -%~(b8w=f?>|gkcwyKC<CL&OHYs9UXzZunK1H!F~_B-aer86wA5raNKrJJ9r?4!Xe<PjfmD$b|NXn8Vj -yDUF}2~Or5JIInJXou`4a;j^UI&6tdi>F0(?&Kht=&b0Mm?&C|Ty_CMiZ!GN3=910dB_a(vuT6?u2>) -nqpG+Cg0q9UlN3cS#*RTJQZ%i4TorkQ`yH&{H&w`PMKN2~FWdlPI)J)BS)gsA#~)7vQ%<8Mma-d^BQ; -_M3F#d|}V>fME9V0ng0}O|d;dRzNzWBr0x}V_X_d@}l*%Ky_O9gZ5LsorF;odoZ+YIyksLyQvyL0)9^ -b6hPXBy;zS0K48svJ4p3u_%>$moFyVh7^q&ezDhM7Ao)>H?KE-*FPE)7x4@!`59Kb)!D_rWr0*cj$q& -F`eKZc3a^Q#T$^OEE<$y0<x1w&@ztN9xo2F_mPz%B&NumiZ=HVGsV>nDz3nvwJ%~oVs;%mM1S^!pUGC -wce2p!-}zu<?0VJy7+Onk)yi;++74KpAR6i_=AO6)L(Fg+f)VzM$TGToDiWS_8?gOF(LLL#ta_qU(^n -T$L|sX=6Gw#;yh<__^UG&I`jY-MR7124snRpu?_5l@g_@m~?<L0QOWVtRRf{dGj)n?t`h@7Zu3JRllm -`cKD8BMyCm0>KbiVW1&m7G#+P$+AGlfP?;qz1K<xt#fAEJFHv<J3__05sY#emT)fz$PbLejFmNVifdO -<R*h}~^tA=OQeM2GCliF@$)%59L0W;jPUM}Wa`z%Fu1<1`9^ukc;v6^udYbft4BaC^*^ijBJsM!wubR -#`21?C)$1$TxBS0rx5ni#Ym|bO85t!OfVxct)*l6l@KCJH>lZ1zliE&>DCm))O+~;=Nldt^7+RuJ^&X -$&a4QYwuW}FqRII0jom%6E6QG$isy4E`_jp-s5GmCGGXK{*Im<gR6Xb+D-^+;|mg@yeVszGBUkYLABh -d~xZNm;$nzB6K!=OVLVfgf4F6*xT7xdrm=vuJk#TeM?{VgIUA8@Qym3*a+JmaYU;Bl|Jhb2P32bn?8l -3o%H9Vw&Dv>PC^ch@%5tWZHVO9|qk~=~j&Dm$qubi^#Ar4XG+bNG}!2s&$LDiBS=81>dw`;y0vc8aBA -vY|yeP?AO3{V7&G00=C}&(<`_O06?ao9h2F%>Lg}cSLPq*WH#DZh2*lHN5Kf}<|95lY5Ee@7lVk>IMP -Umcyeq<@0mV8O7+=MvTurAII4ocTWT(MDRn&29C`u>AaB_nWr!ydMSe<y1~(UH8$y@{`qXrS38O=6=e -0QFooeBV?iIbu`Lt$fjH<REph9g@SPyuGB3t`Sn0-!#D0j|L<@~&x)U2hb{q(CZJQ;Dh1Zy9`_+p1Mv -*kabTx1Xc>}F4;NJi(bqf!JLsvx?A>(&T%c#5E<we#Ph4BcRXYmp@1+tm0{>s6?O2q!G)a}Avm3&<+6 -&Gucf6Dp;i8|snQ3<7iC9@2Mj^{YOsO8@$Hv|-}ow-Z*KB+YzV5zVmbD#QeM+-F&{T|vN8tV~jrYuq! -11U}OdgFlrCpI#KqJtqGKXsx-Ns{2R}C76<((Owv^G;m52ft7_C7bX*@7q)~y@AWUdp>x2rS5X43-YJ -~Atby!{>46zsWhN+0nhFhK?1cuDWR1356ird_(x8x?(;yj%Mis|Y9(S{{$6B+7n_mK-Y`*v(r9<*P&B -YuOV<KRLc>}nbvL=Xa^bvheajElrMsd>u+u`X<Hgz9!esnIgo{`sCg9u#oIQJQ8DdBYuMK0cTPz>pBs -fp^?VKa_45@4Ey)gR(ay&4ApV5u|A17b9FDtxA99+8+HI!)F0=Y0iRI;WZdV!G~{+Z-G~zbPEmY;(Aj -Xz{))JM!katEZVY4^|ttJ#o4II->V&b-i8{>!HpMRipzOVUpD~%mp*_?mNj=oAv6*_poE}wXr5p3s;D -~aYmxm^=3``h(69&Nia&M{sERB3jHxA5X)vxul(-HZAxxm+lFuT^<aMwh?fT3UaQ5>7FS!LAd*_z>vc -ncufvJT1E3o)#K();LbVFxg|3fru&eDVw8)h*TREqz;GxCf&%}Z(p<o6Q@4PEZu=ZnrDE(-Idvsn8Oz -I0?B4DqA>C!hDqQSpW#K$Pm-Yg=w!`0$mjJ1UB<j}j<dhtp6CLjVvPhvNa8m=12o1HaYps~xr33th?` -Amw`7xSUv--|Ar1E=}VJ^LHcvseB)Uzsj?zRRPl9FMM{F?T(!CdbWl7xM;E-*Tg~8@cejTV=<l3h9iN -{xo1^ofMBKuuosRXA3R;4MCD5>;B%^Scxq0;r`BZb#O`Z_Y4?^x$6MnNFc3FS66r-Mu2^PZ!~h?$~#{ -JUa`~~^z(*&Onyq(3m%k7#K5cNN5JmS^3hiK^2q3<Z6mfEVIcN)l~D4kWiM6pOm~?MRaG7J6}6&EUwt -kI4MT^=a#~n0GydRuO}^PCH$VOS0s7Rzv-Dv=&&tBF)A;02O9lmRbjeT|SEdkG+GZMnEHwNXh?AbIKK -~ypp<r~gj`e4e7Z6Z*Qt}<v)3JN|%8%eIPT)RXlH<3}cOQQd=%`Kf2zCGljE){xS5K;v$xhEE4kRA+Z -Mvd_Do-UwjP;`@vLUh>nu@EhR_n+}ru9w@6sbN4qHoCzh<B)qKv!O$LV%c<&qbED``VbbP!<RrD64V} -tG7?bq%oP|l=ZeSG|3{%v9TBA0eJE^Z}vw_=#OYGG~&MaA|}QUQIxTT<FSb&x+1{DsvUw>Ax_6$qkA= -l-j;Yg^*W<N^fP)JIl2?^CboO*OKO@+&;50*d8b31#s2_MO9KQH00008031s8Ru-$~8@B@h0GSK`03Q -GV0B~t=FJE?LZe(wAFLG&PXfI!EZ)aa}Wo~3;axQRrl~!A;)H)P?pI;FoLMyfEn-qFpHr`NFWCRao2- -(wgCYotVn%R2~;(vD~ZPN61_MASHCi(KMZ)IK5O34!{sb-p=7~-c!D(%Oc%B<>3!|Q`v`=FVkw}K_;6 -K{2bzBHQ4nu-K%|NZ)g+`NBt^YO#ycM1Al!+e5ns1OFf*>r5FW)IqtZQ(ny@9m`l2(QL0*#^PW?c2+` -mBMSh>4u5>_{QqeDI2~m?ZBbUoHyRddMnk5>MgkIq@vubE(&)RyH4j0{MZZHw&;^QbapzCC94o2yylv -a$j+FjWui)k(NW$LLzbaiDFxWssxzCc3wFnZ2fU@Cogx~lk1Gs@oK)7MtcyU=YL%e5lRMapi>D9h>5m -;A2;>PIP^@9#c4@V?E2gYYa?eX6#$`dlYi*ccceofm{|9}RHOodPlKO)HsQ+GoSQ`#w2MZu`91df?$B -^Je02GYIum!&XzA!u9790Y=gV7j9AY*hNd4E(konV(apG}ZMdx+3_4)tY_A>1c^5Ip7c9)jiywZO9q! -Mh-g@-P+VQ@$6sl3pJF-+4A?=`-Awy-CEti7vZ6InXXJ@S2fY&hu^t`$Zn(vpI@wGr&Wd`ktdH*ix-) -8p9#B6YNrN@l|!!&DrFiolg&nmr+B@68dT$y-d)nIG$ir_R!F}?5oZ%LW3L^(4aWj3(RCM#raf6t-c7 -BV~Db?1RO6@bs@Q)%i?i@Y_8|iQkXdtkSGd)$X_KWV1u%1=>aks$vdVhA@6fsNl~t;wH0qp$Hw-0)dn -7LDtVvTTdct28v~mRDR$SMx+@{m0o<olu2Rzj)5Mij6pwbUHYc-x+P+3RLDIgjuqeR9V`ZT_Qu4MD^f -ERSx#h7i2Di>tRHleMM+(JNSvNyT@l^PnCZD!R8{M_WJQoI$Oli|V5F;xHBaEIwpQ)p%tvJ5M(SUD8F -auAe=Q9VduDQ^zS&cWFg{7beMM2At|9`cZ8Df9P`bfsh%g*x5cY|=HTw&91QN`hQdhz17Z@z!94Z0iJ -BZrPZ;+p43-{BW6jx^y6&tvkqa`RO9cW>uUZ~=wSBc44O_AmN4Cym$Q?G?w<Yr{4(Kt|8t6?8AA&#LY -*8~g7}NKGN@h$$#c$O*14LU4xA6VxbrIMEE%68aJ}+2N<S;Y~{JK!Q}M;``&uk9MbOZ~l$Di9T2MX`| -rsjc_4rbSutm_nrwMp_l(Wx0+X%94me}YV6=p90B;a2L20BO9KQH00008031s8R=N-B9wh+)0MrBk02 -u%P0B~t=FJE?LZe(wAFLG&PXfI!EZ*OoeaCyyAT}#6-6n)RHxb&%o=?@spN5N-{FQb&q-qt{tg!Fc<| -K8-L+v-qsI>fw`+uZZPIcdG!0*y|Y4%F6JPw+tK<woNI%E9qxboeB_5GAY*L!OmcA%tkK1#PXXTjhJo -cTx}7FOMASvMS)_ZZ=2C^~PEqc&lnDAe=1Ac!3b4X`n+h4M1@nUKPEBq1Cd3)_PzqV6EGLWeybx>Led -r#%VHB@HP1{X~n}AVawp2@)<C#;{F*O!6R9hTq$c#SdTP#!{ew>H&FT^WW)sgHyTU=%FJDzC=%{o>i! -6v1*zqq<rt-Y5u@|CQ+DX<E9H4%a_{9ocXhg+7j}j|f5|_n;VO?huKu@L*w~75yQn7yF21Piz|LFWFL -C1ju*)}4O9KQH00008031s8R<)@eD5C)Y0BZ#R03HAU0B~t=FJE?LZe(wAFLG&PXfI!Gb!=>3W@&6?E -^v93R84QfFbuu-S6DrP)Jfxtv>hgaRH=dsJ5^N_iaR1gf)aPYe*KaH{eWquIW@_9&(5>!!stEF`G6M0 -{-6!P%J3Z5Jm0O{X;576h5EVy;$;Leq2X(Z*Dum0f<#z~V0j>+6_*iI{2<6Bw-y$qlyf0*6faXtCL2! -!aBG7F<WgH4S(L>XUfyA$6<#j=IyiDrLxtr;=LWmhS~ggNR2l_yE-f}3gM3plB4A8SK`4SZm{fe1$pb -wMyIlXw;Sr@!SVxs&FKBpVuVHJEt)q7}yy2CZ4@zm)C|Sf^EuxFU;zh=9k6TnZc2#|td%f4L+;B?>rE -C~IA;^>}=hXOT#g9w!)>)~eXV0d4G=hew>si>fzuHaf#=kUiU%$GB!xJ&qMDMFRV=l63Gj2cF-<9_0Q -5uHXxUGTeUSxSkzt0m-!sl7vSI@3@j8V&f|6`{g+~Vw%V|AEiZR|IfWxHNoXh-!nYuf7V`Ey108eJ9a -S}SsvPrcF4^hY5}yM1o>6mEPe{eKs~Ox(m<d?pE-$H~k!X+8JG!7ort0|XQR000O897^_97ok@zg#-W -qmm2^89RL6TaA|NaUv_0~WN&gWa%p2|FJEwBY-MzGWpgfYd7YVEYa=%pM(_PA1ieYXB%ZOy@)UZJlF$ -Z9x@-)&C?&YDHyJjujqUCJ{Ys<J=X(rG!%C3zYNVr4p53hc<*@ruSNqlb=5*Sq?qk0@oYW`x?PxUmNi -A1jH(T|^4tqPD_Q#*EuQ%JP@7>pKzgc&ytKH%C+J1L^^YD28yg9zC_M7LI-Fl-gp1SRN_x-4<iF(<+f -BV>8j-KuxZvT9GeExLv$K7&yr+)EkU5u3Z`m68l*F{y2m1~#dgtpqCW~`=Fjt!kxrkmw>YDdq<YLeo~ -ST$yfx>{s|r)FH;KaefiEG#n5)OEIIJ((FcblF6eePZacC#J?wn>{V&8MeD@7v)y#nb}l5vzwYXnULL -VZH1bQR|~@?RyJGJzOlNR^<6%HZRdC0Q22XvY0uo8`rAewPpj>Eby%y__So4I+#QbUqT9Z_e_MCkSM| -@Kdwn~pe^-ZYwLKj#M~};!hufRaw?A;Y&NMrfN&~dp(KvF^$f0gDO<G_-EsdsvUCg!Y4K|1^8A@U_a6 -fl(nql&ShuLX-QRt6z<W940=I#vD5cbjC{cpc7pMSky{?GHO7kpkl7b7JePNrVatOfS-mZRG~JFep;i -zoUw1lEr83k7R>`4Ufl{HV^oWrtcAR!s?NfOSPsEZxFZEfb4dC|B>PSiWs&{TBCb=7b-oDJk?+IyfvO -dMqs*mKvHgG-_zp(5#_ZL!(ArfkqF7Mo*=N!$PCSQo~{X0migQjfOQE)@WD*a?wI&2iDTS!ogEbv@q~ -g3W#`kC>0<e0ZR#pNWfA<h9poaLNSS4s!&iO2N@BSKtTq=5;@2~Tq2h;GBANk8H!BgQiehkImn3E1PU -?`oX9~2q7!-XTj3PK<6(<K3zL8~;=&_f&=3&{6ht6Ik%J1vC~}aIL5di3C`w5IgeXi&fs{m?A|@pWR8 -k-%h*VMlB^j!SL5X6O6hMiBl@v%xL@Q!af^a1TQi6CTg+fVFzBJ}bbG|&*h)WTVK||)tQxKti1r92du -fRbD@)a=XV7_7jgfL&RKuR)S0h1EtD;7wJ@)Zl91o;XWlrUeh07{szSRf^tuYgI3@)ZlDMEQz^;y+6j -<jcbrhZZscYs7^}z@Q=W6)1>6z9I(|$XDbbBl8t8=up0r0tivQk^(7-d__!3kgudbN|3Ll07^1n5rY! -tD=B~y<tr(WlDujNn3N!2Nr99gUrB+lF67;Z%vZzt@>nA-Mfj>@*gbhbzC0!q%9rQlLiuVqUjc&-<|` -IJ2=f&Sq$KkdFey>KVu6$>U$H>fSTbJ$gA(Q|7C;H}6$|HX*3MkzkrL%A7D$Qmb?#1YF;@0Z_HUiNmh -4+LgCVY^bZUreDV-VOT1xFF6|SXpZis6s)rPp1$y(LErPO{l;aawfiQU4`WrcH}f1JIPt?Ukcmlf<Le -U}y7r!ua~3U;f$%YVVJZ0PdS=#Rp6S)u<-X6Uk$vYYl@{+Fy}Lzfl$gB`l8U^nf%p<r+A{{v7<0|XQR -000O897^_9>G1AM;Q#;trvU%}82|tPaA|NaUv_0~WN&gWa%p2|FJEwJV{0yOd1X*RYQr!Pyz3Q%PjP4 -hx%yDZrN_4PT1ruxRU&F@-IZL(?<1|{CeQ^Tu`@d}S|>apT}B^H@WaTG@G>UP!S=?OBRP!z>-+P-+^^ -QZwx1|=e~kCi{%EmzM0s@vxtgYV%_B%>g7Xp+0*6gLq$IFFC`}TS(c4T=-L28_y`17KRH|BHRYuzm`* -1;+h64%MsUF!-B%h1^Os+z2YI3Kg5%KgtQkK{*(e<`5lGIr70nM&B3@nR7{=m=Vg^n}bWmEz9P#HH@? --nd(*Q7yjXsNmlWtqE%?p(XAxdKp20|XQR000O897^_90O^-x)CK?mU=;uW8UO$QaA|NaUv_0~WN&gW -a%p2|FJE$DbZKucaCyyGTW{Mo6n^)wI7l8QZ;F?$FM}}`E7o=>P;^66U=Kl{(h_BJl|)UH;-tTR=R#2 -zJ8AkbU<TS)BG3IhACGCu+BPk?d$-6NTSDHbv^BPJU}WWue<91IYWMw0s!btp+xyy7yYODQHimbG{{N -#USyjYvrT^)4mFmU9<YaDjs~d-FiK%i6FE$W8kKyO#dI9)3q4m$kwl=lJLKjYtcGad{CAYfDY_k%HMB -lZ#a^oO+VSsa}8?`Id8Y&B^MJE=EMOrB5;B~gsQNPnWa&~t1vbqPm{adFkw0qS;rgKwi2dV;%5)ipA- -Gg%QPTkwCU9M1O!NSgb(d&?cYg4s1uz~ls(!AU#Tv!9X#<$P-RcR_yc4Z=x{mNp2Hf4L#XlILC9ksSq -1#gMj4Yv*%zNSEKmT>Wci@<h6G_TC9$uzJyxLT$39USU*`8|6ai=`L?%q9-Sn6JvUjY5TPB_V#?YiM- -aHI>ewKx<%ga!T*8y5RP<D>6`723<{d#H^{Hw2pzIT?}1SXiUFp!8le*MRU$<i-~WlD6jx};sm_04XS -gk!nk8VWZ{lRgTjC9!AfRW=fNOwRUZ!rO0NEN30hJ4FxF4(-6!+{o?nupitSCqI~a6hD+Sy&TD7_%SX -2_)3f@)(Fzguer`@Bj1LvUBw1@DcJWzU2@jB~E3sZ|pdvLN@gbAj3VGq3M(nh0edu?|6)|cUBvvX2n` -bd@|%+PWTANir`$}M_|5vO}a{$Y7mL4eZ)5u-)Gv*vDaoHkR9;o>cR;H->{4p4*lCyYUkmEu&Bu~iR8 -{(BBrz8u_8xRH8<CGK@g7}#oTJ5+<^(^=>(huv`<u|BD%2rk7IsWQ@|?nazWdNM=7z-!)xzxD?4rm)# -18+(PM@?DFjG1;jq(yqW_i}3^RWhc=ByD}u=9DYZq^FrS-f<+tQ%T$@Zqi9OSWp*02D*X($VwiJ4gt4 -Hh*O7=03^pv$Ct`)t{>#Zq&RxNak#sKa;dCGpG&Z=7zL=U9ohOjxR0pv%B^41I7>hnPqd-6C68n%yT9 -~9qO4!nb4I7W43vgW-_2s%`SH+G`<lqH*Fv$P1fy?#8!E^KrJB7|H)G^KXWTQ0jEP0$j!OocD$f;+`d -GJ7I4!>C*Dd_`<1LBSnJCPaZ@3$USC;O9hDIsH^Q;fjc%lc<bYru3g3)*Kc=7dY6qDw*~zmvh~Db@y; -my40VZ}U-ucqRlUZ=pcsq^74>JVta~5Gpv6%)dlmet7`-fYsB!tmm-oWB(pTK_Nblin%^27MJCk&CyY -OByl8wAkzoP%^mW;kE5Ui>{b;fqr&yfK+^`M+QI>gsc|>9G$sHK2#&gLY>Ih0(!a$c<nzG8VYC_Szd} -Z6%(g>Y0prqb#3`vQYn*k+6G~)byDFo0(M@BUnWig)homG~$R@>_*{ZmwDuy$A<UgI;asm>TGCfyF2l -}227kD<2)xuQz1PW1d0@TX~+3G0>=<66yv}fkFv{`f#8$S#?V}$<KP;mr=p-6I4Ih-92G>5dP)D5YlT -*_o8j6;KP6wbxC=eOxNmvyO@)*X*@yoxj3NV-&agwyFu#9^n$uNIHbeOPht?l6mC8Ee(F4o@S8g~#lP -^(V|0`+kx{9T{5~h6+&vLjq9X<$OjArh2J9%BkEtFBMiL?qR5Kg>45Ve)XgZS^N4BbL6UnU5C_+57He --t6`*_&NDu8Jg)_R$XN+`E~khbd49y^*Z#;5siDrxn*kMxDB3WW%SM4Qs;+E1-ZTW`Q78dluP5r}=dy ->b>xy;+CJI5sRE;!~;j`>n$@8LbUmuQl-NW*sz<Sg!2Um^n2j;YK#4qNjeirDEyg}}cf>9<vv4;IW5A -?^e-r1}p(M00)#n{Gl-(2U#X1w>*R(1xr@s~$<e(b?=%psER31<u@pT-+<zPZsa(XbkRk3Ps6;qdwYG -l!4!0p{>O{7w_cf5`?WA4)I}aY_+1o}ZuyQyq1Z*Y_lfP|oS5op)6XXIJR5&3jkM&e4w@TJzTzk5R=4 -_KC;eW2|wseM}&u1oZ>=kf<aqq1MYAZ0tf;llZ31G~VBTJ)$X(g;`dE=#-egg^tu+6vkh=9{XlCI%bB -cg_)kP)APqk=6aNho<M1yiH>Tx;H$hOsZ^<x1U4HuOA^wPBxj=wIvkS~U$E(L9T#2+(0(1B>CxZDt%q -M8U%5yN4K=+?8<E2NLQTTrn>0SuCRc0Eo?&-fzm7;h&WkiM#_-tVjpVv+P=Cbj=T&22{{>J>0|XQR00 -0O897^_9#xbo_Uk(5O&rJXT9RL6TaA|NaUv_0~WN&gWa%p2|FJE(TX>M+1a&s<ldF7jJa}!6l$KUfQr -u1e>u5kz?Avd+$T49S=b&bW9Ot`5e#g65%J-f2TE6HKmWve6u#x};!p0UA(=^677AjB90h9smaA7J<G -zTEut0X83DyIapQJu{M=1+sujo;eS{bNY18bhk7Lg+hB0BWgOWWU`W+QKW&4HvGY!H>G4s-IpyXKG-A -Cf5)P|Qn#8^(piO{cW5JLGV0(^PTHG%LrSRWe(IjkGDD+T>DO6)n&oG|861|?RC`hz{vT;?t%8Z(;H= -|HW?0Q;RV^*4S!qbgD1B$7!Hk^FDgA9UCq<F80Vz2oX9krvDW^$t`iwL}Q=<-AUrtujYI;zTr6kRX1F -3axh@!IEK<+eamz?gG<ZM<;sxoCt{aSK#SV`yP9E&-irj)F-H#ek6p+w0e^ac;qugED*RMQgEm(|i~H -8-S<<|NvfTt-bYP8&5!rbhc&E@gE}9ac+Gm^&|6mV!BRG)r5<a&D7`wSIMg{Z)7qM@IWnYIdki>Q@=Q -Z!|}RStjHi(8k*HmX?vSN-D(&D$QRT;LzGExgBf92rF=|R5BJ{Iz6Nf*SCn4YhW~!rePKC)34F;wQ(k -m{5vI?V^ZcaprumUY1Yi7mhM+s>q>*9mulrc?Q?}Ut2jK;T8?I2%!KvHNVT&|s_c+Vo6)C~>ZkOVD=y -cxF2l0O=IEGE<&-p{Wq8<PPgh&fUQDAaA|+x+dryYr5h<FGj>lskMLQ#%QYf6D=b<*~WVE*{cA{6J7V -&UT@5fT?s1)w`So+^+PiLDH`TyhbNFpJ{;!^b3@$P7(vsi~{Pe=EO&S=kv(h=(06Qfr|lwKDU+#BOTO -Sotx!GOmi@s2Kf8a@*3j`n`sCLN9T_Au^I3Jy!h!|~o|$BFK6ym%3uh#!w7A~cOoitdT_9F5aRkz<jb --gX+9%B09g^h8Q@g}b|XxbO+uia5`+BX<1bc=W@rUa2eA-5H_6BN3Wi_(*qz(|JhRz>e;4^jMqJ89o; -NFv2}!loaQtr7TZ&MYxE@4AWOfZ#34!n$r>M>5bFVHrm>FZ^iXwG!ZG5CmfF^SaFWVV>ARSFZGIX5cT -be6iKY~^*uyQ*!hV>q?%7>B-~9|iBjF`9NPDU=zVKX;&_xoX-f}Ff97VPel3>`eNZ~%5|!RUGM~#SDt -&){TU9=gk%tv#8-jTW<|@pmFn3^n19KbZO_;Y}UW7RtD*F7Tts39}i{Jp)0qy6ozlHrZtnWa+gMA(LS -FoRiY9R+(P4f!OYcO@5Bh7RR=0li^f;8W0KEipJ<Gk6$P_!JIFirlx!zGuvc3cqc-CeY20p=KgE%5df ->#y_EIsT#ti_~5a_PyrA7GO?#N8aF7IL{A?<*l{3!X2r5L6FO#=5v|guuHsowXH37?*=cv$q&R8;qDW -HT;6Y~E{&I_p}fSY{ddsiV?BlS4AwWWcVJ%xxdmc?%+_5#Z|@JJoQE|As{le@6CiUSW<BC<C*tk>4hA -d87;7@g!^-m}&#^|;VGcA|>Q5>%F6ZEUsLdfILMf}hTT0t0A_%4C1tH;_kRX(rmxY8&LV{4r2n8X*Eh -R!JBTTxbmzt2Wf!>7l3%7IvmcW({HMi875E0m@5)jS{31dP69pNjYJ|=D{>*L#^KDOpW^(Ag8>mgIrL -zb|Q$?Mg}rm&AqaUbV}guE9)(8qaEA2Wixj~PMG$9Yj7GlIL189~s;lu#@EOfU}}QFF~tMfvib_Z+|D -T_`O}==H*G=3{Ko5_*-;VLlFWu{@1V@nJB{2hI##y7AloB*+vSU}PGE4#^ohk?@=Ne0i=~g1OA+FoVw -#^B@Z#iy%uN%OE<Nd(4&cq<9tP8q9UR1iMZ<fc0Xv2_RQMu7a$Atb<$wxz48y0@H$N^Xc+NX>CbN5CU -R>*dQAqH$ZN(na;dThXBkwFz>>=2lGpq_hEhoavS6ekUJoELGFQk334CgE50;)P+kSnIr<UI$1tCOY= -S%h*#db8vJLVG<T1z-zK){{-Dfbru1%aRd%uPG941|{?tnZ6c?R+|$TuM0f;?x-SUOM9*_6$x=lJA$0 -oFLIi?H*s3$VvvpM!lK_66AEY~H5#JZlox6uaoHX;_zG&A^(4Jpp?X_7v<(u%}^PhCKs&mJU%^^RO0R -Ey7xYwG2y#Wx$?;Jr8>U_9E;h*vqwv+d6E6ULW)#gLMVgRak4V)?r<PMVH+xuvcMUfqfPB8tir0*VuC -0GGP%|7Azaq2CN&fZo;|++k{PETd-}|8?bM{z6tvltlO}@fOQAfU0C;EeF^J6EV`z@4f_k&cVORzeGm -4Ru<x_AzO@PK0jw=p4`FS?dIak+tS5DeZ^C{6dkgkM*xRrl!G28l2(Wg_>z}XL63F@%)^oOxU~8eLu% -EGQh5ZfRU(j8~caHT{N=+-SRn5V=Rm~@%eRTU9`t(!wewMwx75c2!-?hDQFN?<ZA-{<H5`EuSSqzP+B -ktHv*QE_Ctzc;zOG{W<!_qXC?qO-J0?DewBPpe`w2iApy|drZjCN{HCGG8{Kke)fV|?a@C6XB}MH@Hh -c`rJ!U%XiJ2vd$$4O-t3*_@nlw&0MX7Hf~Owu7~&SbN6bs~be-9kk2*uRp$7u^&jOBc3fgB)-d@I(2H -_Z-4u%@3;5SBgZfrl85_7GlPn&39kNJd4QEItZY|O8O&&>KT<L|HOU>sDZPEb<Ib-apr3<&9{L67<Ip -ei_X}Kd&XFXG)TL$AKWXV)OR;95&p^KneH!{D=u^-q`THd<q4F6=#6CHd(zLXzDDTu4MQYb#zj;#%Io -#aW)q#3H>h}F+Olz+=rZqJid`anx&=;W3SL11;>7?85fY;{69IJ8t<B`U^bshQ&^mXWl+dKFc!YZ7HK -1X}D;-1T>a(Xc3iv6y`*RWvNFg9S^sQAj6WME8V4TcG09mX{n1jhA>cT&wH-Em!QrcP6<lu^A-|1c_N -lnyP!J|%a#J9nhUCX9zLwqQJPME*aD$%zoI47OoBf$<o|BL|{OPJOPp0It%_!B~Vb4`ZRW5o&fQuzJg -Pv3#f6SK6SUrw%ydO+Cic6Ngja$7lLo=*~z7g9jvmZaTc)2_A<gcf3P`I(**^_Pr1ND~H#6POpOwuOI -U3KNRu~uR}p4x%nJ7zjHXfA3WeM!<cq>xjubydriWaad^2uZgIN(I5qa;RQ|`Qg45IWDT{NA+`5Qc<4 -&)@n<Z8ZtmsZR*D!Gu^6;DcYHk^H0tu|f_#DP{jL&1-!1w~jS1`Va@zr`t(;oqaaBuvdJF|RALCKZFY -osb&sT|(BSe33;r5CDFogX^ZAUrki&zU_YMw*-cwD!d#=sRxF(^_doRF&3>N>Yc2Nu62q*^92!juaPA -t$(og348y{xoQ36uvmInEIllcN>nV6N@A%bmWsF@wnDBjhr?dd##`*j%(HV+-Yc$#dS|Z$W0oDg;ml# -LR8omFMU_y)RbmZOHR<CS$1^w2_LLNL8s~OlSWPKsT+^v@%k$IqmGk_Hrw8jb8=YY-{d>3jLAU$rM9I -B+Fj+pBssRoubV1@?j<|sfS4-{-tL1~W^1+qj&1rq3cyp?(S5jK?_uh9Uk9}BuO@F$+%mTZFb0XoqNV -p&pE{cRpBH^+~sEdS#NVp;ru8M?LB=1qfI?26od*9Vb)0azKGCfm1sO^wpnL4X}Tc|?~bP4nczI|)u< -@#iiv0B7=v0B0Tu$spCvzjBmXjY@R23ZZ^8fOLLUK%R^*DT8q*8<Cv*fL9i`}eX6E#rPstQK)ztX6P7 -tj2LaCu`zGvzo*GVp&b#UNoyw+)H3JgnK!xVBAY%1>jyL%a7O^ON?uoCBW^5<;4AaSraYeewMw$3uHB -g3uZNq3tWFSfqS8>#&Hd?8YTWm>^ojnRsgZJy~3-?5))tB{ZOG9VneLPi7$iI2(AfMAn~QLf^jd66@Y -7Do%5=)yl}4oON@IZSOVfMS%uewRd{t-h1Y{scs*FH-*bMMEXUV;!=+~qh2PD2Jz(<F_38QYmwgN6gT -?Z}Qu$!He4v*PjPk*X>w%KYDEm2hz~hfB^p(dY$n3eA?-@rlpXYBI`>m8d2Xm}+27TIHfA;e%U%gZTc -<N1Gy#$i?*OvfZ`f>(7`Uzis3E-zUef7mA_~{wIN6$0x*H8HB86ZG!`s+#FKfbw}{CN-f>c@6d|KbSp ->3>u5*ZYp2@)h8%AM?`(jsNoS_q_f}?hd{4ftMjU<MR-R$D?VkXlFnD^i<71aZ0D^tvrnCt-OrttUQf -st-OtDtbB~BR(?hmD_^6smA_HRD!`~{6=cM%0*#neu+dv*18v?q8yJk51lcf?02^-NZ&Nh!wJDkS*_2 -IuY$_(+HdPZ(n;H`@n_3eOn>v$IzPEt>KaBJRJ$}n=$_}R$IX9$uKNZ^8qhnaf7oVHmjhHTvHr%#XFL ->DA5O50~wzovW+b_ftS0{dUq-Q$?HSw&Upw^9cmt)W+hcaq5H!KJJyo^QN`sw=2`I;X#DQUT1+1@ -6+tvnRI?jAeFw~cFT}|?iNbeab1c`IOP_e71$MKM8aj4@E=bE2~o>Mw@_dgAaZomh(;^x{t3Xl^&1UL -tQKGVIa6b{=7b*c^YRHluQ{Qb>W?1fGlE@><7W!{4r7v3f9a&;<dgE}yBrOFEBtk<`rlcgzi!p)-P&5 -cNL$s5wPn4Rwy5{kGQD>X%1V~rtaEB|w>!Q~=not(_q?;|w(~ODY|v=4L8HwEjW!!J+7uf3l%QJpzwG -%JP)h>@6aWAK2ml;P_EzRm6VluO003VB000^Q003}la4%nWWo~3|axZdeV`wj5b97;2Yc6nkRgg_f12 -GVW@A(xkdrF`!^jc8#<V8ei@KSn+?W`Nj7s;%!|K22Ph2}PyC(k>RF-H$xk_}(5KE=#<wS_m(OQH{xh -0u7o6>`vn5<*;@DFsJ1mv7nVlRm41Kt01SJfnEy9Li)p;tyqf&epLFa24HELUi;g<(Me*(yJ?t;Fx3~ -H!5r&p;zIb^o6*!5l563+cmd-CZ2OZdwSaL&*ER0<}!8T2A0Vmpu74l2D-DqR}Ln02r<+o@I-48q)Ca -w6?K92B1BK2enAZ-bvH<h+O4>3E+u{eP)h>@6aWAK2ml;P_Euop5?ti~005x@000^Q003}la4%nWWo~ -3|axZdeV`wj5bZKp6axQRrWlue8!!Qut?^hg}?2;H~HKcUQmML2)MUKy|iY1wo3^gJDJ(42Vg=!F|dm -nmF2mu$RiScTUryq}68aWW}(3)|<*-?keU`OpdQ~)CIp=Ybn2NfzkS@vlL$d7C^sx}jsNtt1#p2!eOZ -y5mIHfoi}{5y2iCs!`q+<w#5H|RX$5k=gJ68Ep0)%)2R+TnJ8G=SlRuoEj2@_iA~D5qE^>MJb%w;Mvr -GWLs7=Vb_cOzfget3}b+rD?TVVcb9Yf5A`f0=_a|@KD!v!c(H67q?vO{!6-T(xy7}ckM(84^T@31QY- -O00;maO7>PiSQu5|6951tSpWbc0001RX>c!Jc4cm4Z*nhkX=7+FUw3J4GcsReZ*FsMY-KKRdEGpJbKA -JF|LarWl$n;ACo_^S>E(H%oBCH0PaQjBIp=m#4TmNni#>`|LCT7*?fdL+cL9<B3DUBYYi`aniA`X!yI -AZl7K<hO{r-7$x5(K>_^TBc%opi830c12>?TUS-)F~ZlBF?chab+^9<)apTc+U}TCzpDjzg9v@s{0k7 -A;q)$T>FP&@kO(z25agj?5Q+ZVX0x8H49A4c1GZ;6MOb<oPN)c>Ww(Gj|yUBF)ly?gr`dIZyW1+4GIW -{5+6s6~Fi9>m<k{c<A-}{hs871^ITxv*Ib+X1%#cmke5?<W4cn4wG%KhiK#Y03X<dU8D)`MROeCu3|r -*r(($_6V~6LNcsmo20wBLKuap_d2}m$u{}@ykPAmOf*?-L&j&poXIu^wew1-`Mzl|bNQE=+|I70df5| -=XKP>Q*E{XOBy<$3fwB&L=l2$RFX)e}5z7~AQZnuKZhsdcEgk|<;mqT^|w8QK5DuyA~05}9Lvb-n3SJ -BG#?m18wu84vKtVNuPV)!vWOt)Fimo4B~zKwas8$9%S)9aJVkJli&z45qrdU1Gke(L>nc6I&n@Z7sTy -?TFk0e^hBx;#FePR}mh0^o~Y@A&fa>ID8QX5)I)((Cnt*v~R{&hPwStK=jld-^%xE7XdCl>G|eN_Yi% -oTeg-5<lmeQwc&10A14hS(Frpfg=sm@C9eicE~;thAc^Q=6oKq?Z720*QocBXoN^|5D%<sp0btTAgf% -O2dMIVodLIU)D@EO!4^T_>t&J=382hB!&s8_sDU1}2NY+W0SGV)x*Kqo&g(M6K409C-ANkoBms(P_oT -9>n*(H+9)J(|Ku>=ric6j^(vTWLJ}0)kl`s6I6U5n&-TU#HAFzH?*8Kt7`;iehQq-lmlY1_ZE6V~Q^% -Q!F=`b~&tWbHkL{$kzvRFu7Bz_Fm6~O->quXs^Jh&KKkfGxe2gHV4j1uRexXUVL@rUNeoF=D(1BR|IN ->*!J*lGqqN8-*k#8(`cPinYpYbFt@u{<=8%K5vx9Lv82;g*tih+ni|wKOg)@SwDa<I9WbC79y$`0DiZ -!aMr-=FRDqcXsjS(kY#aG7N7X@i@#pu*Xj&DW@N9rqM6FKa}JKL!;|>EwWU6NV5n{(h9UW%ySXlu2Df -MzvbT4;W8mbt^-ZqAD*9kSEt9<HM;Np&(U(dlp`$s%^CtY{&+RLR5MqOyh{Muyi0CQB+tOW?N3n_-Nr -`m(dFg&0O@*fc|Og<cVL6yNG57iaeoFq<?;9XuHJ0|yM@V?OJLF-_GYyKf@j#TyU=%s7boYZzy}(y4( -u%G7uh=ukPe$nwl=o(lc2*Q0&j+vD+i;lqb+4C9z-Cn5cCu}d=Y}LxR1ayIb{PG%CG`R*Eu!7PE)pV^ -yvd-Hl{5qf)4NomUjkreh0Bk6oP+4%7TGm6E70bWhZ>@uj8ET5jG*@Bm|lT_J%>$XHCW^k(C}(vo_p6 -o!Xco^DGh`43rkA&E$O=w&;NdP#<9ELW6ACaQ=ZbW7ZgM(G1kkN-s2El$2L!M~xOK2sBxgf}HAF2;A+ -YS6t#uVQ=!8isAm4sh->Qe9i^oP|H?~lxoo&%CbOko~V&l6{*-}^_2mYIjreyfmdg!WTu1W6-IX&)n- -rv>IsZPm`Uo)(g5a`vCSd^jJPXdY^DbpK^0`QDJM#t{X|=l;1E(|sP+m?A-Mt#iO#Qu-NwH2=n(vl=j -u;H{*1PN4m)jT#u5s~Tb3HGc`Ii?Fxff?c!p|xo2IejwW{9GKsS)1A!5hSOChP`BSUUWeAxe(__uP=V -G=ARh(>sar27NIyfxY`ZKP<#Z=yI>V=hTgj~5_{03>l^vFHxyPE;L!Um3iVwrmQ#07ee2`vZZYqr#Z~ -6YYqzp(W}X7#KfXo?SqU?$mcW+-|zq?)EY5Bb}aUy$z?MxC8hD420xk%#*u(LEG0*A@BuQNpp6?Uc+n -Mh$yFhEGU?$y9LAa0kGQQlJ)WyUB#TvXAlD4^1CQW&>ZOmtZ#=}2={GVRzV2oiCdshVXHCk4NAjh@7G -z5XA2*NjMITBN-48(g-NxjjTmv&1X5y@d=-RTZPKt%9U*lsn3mv(QHr?JN1FVU#4{QXr?TqwQ%FThVP -cw-ga5fa3D74g-vekp4PnE-Nx@XGieeLRBw@O2$+2k2&{#}@tC~#ahNi5mM@kns8h6U_4d17AceuVXj -^D-emB3wycJzD3nc<uHy^8Bcy1jDXj&9E{&r6!G`y%Hz<#}e>rbdL~XuG?szylt~O38L}ew2>*Erf6d -A#K97BgMTv$^x<QJDEAfY|5=4{Hz`^TZRE1`adL$vf0gD5-7PiE@h{J-;y~1dYao*yv!p3E*;50_?be -4q)i)hO+Xs_Jy3s)PbH=s=r$bifp)AZ`9dglPfPxZMt1s5N+o)T)&L~9irAO<*qZs(T&&K(uwr_s{HV -o$?&v<JWte--KX>}h7RXi<PxG3yc6{CbtYy^0&dhLR1~<|};c-BBQOb(Zwi@mU^f?FW#iq{uIYly<5G --y9FdHaSfWJ3K1M{&PD@l-D3&0vl`>!0y1`dSiWz@-Oz6L8DvJ`;C29Hi}{5a#L$trc0$F#O(*KJ2L& -|1o4O0qd3(VQjov@`ut2kt`jxT8|B!MA5Y2SrY;joz+#l={FOHhYyWZ)44pafuSlX8WY>{w-`CjScuW -mO80xY{zVYXnU_*P?Z!%lDQ87MnfD%(nB$nMZaKbffChhr83pSrlT2>^)0~|-SV`casm>QC#U8`QlC3 -A>uM|NP!8RS<QCITYhcY&G~vu$$IQ%kZaXGuJCa>(Z?`yn)<J039myQF!<IxLQ)UaBJNBePY07|4>XN -!SH1+@6p808ZyC1Zd={?tHl&5WW+uUi&ZI?C}9%fJ5Txu(5W&?3H^_@iycyLdt!0dy+Y#-4slj<9YMq -<~kqZ+b{1`{wD{DJLq%c93`i`c5rTaewJyiitIQq^;hw^~sg<y-QFn<&f|-&Uck$ug_(ts*ct3%Z9FJ -m67n2Q@Z}YB#NJE+q9fllbaJVO0prMp4ORAdRDLO)bV@1G5kQ%En<O@i-U%>lw$i-8ksv5&mPHQK<fV -wh<Lj6(^E}Z*+P5*DS!g>W{O4>nOKgy4N6X8e{DDt>+((Z>HB*vnKe?hh~I!a{Qm}GOQXXvvUNb1sTR -ApS+>7X__3SrTTICOk4(z|N0)UiC{3W*LGcVu`C6m6+gjw9<S}F%Ey<yY@&QY+_hZo;iW1&%j>0#Mg5 -eL2WAt99*Br1_mM~wSvj>?U|tIvFtNpe>=NRon5{&L$7rgu%jindzxSgUuNqzUF5STKObk(OQH}rwwX -)(#CnCKkGJ;tEA&bovyPH(}Y(22e@iN&tyZi*}JW~rzZJR|DELv;Wq{l&)ggQmaLbD;(c9rE4SQII%C -2GZDM^|TW-(7o0XIR<yO13>?XGs_ZDx-LKF+F3leo&?iixM%Fa3pbqDrc({MuGTjTpHu$<N>XBed*nt -U7TFrOpThP(GZ!qjs4(fX8pM~?%HLt7MX!5M~Pe*Fa^*8cY*ij^OUr#lJyHBAON!MM`B`cF0W4CUR{2 -?IPs3oKc4CkqtBz!Xw3HZ82ldLf8!GWKH<M3cfKqBw|L5|<KNftk4Gi`KN0>d$7$_~|LXL_fFS%YD*W -S7g@3FT06fLc{9}v&YkK`R9sjEmKcKJhza;!i{|@ZK@4|m{c>I?R`Hx2m|CorB_`fIo!PajRzXiWd{` -(65cx2-Lf$)Q2=4}FM;<w5Fg~UG|)$qTP@)uO)E$zSoZQ2ex@Z047itvv|b^POfodDQD)ict2NQ0}s7 -kZ!6zOwUwO_tZZ8uq>3r53&F9qYZgWL4Koy^EwxeKYB%a2xg@NQiRJb21*!hvY90SYJ6&S+0t8;f<oR -iCH+OO69894zRgi39HqNDZ=PjJxW+lx>AIyT+G!<Bx^Kkxb(+f3n-?OYoP28?1vU;%r*nGV}SqoBYQF -E7*t%>SP1`{ITix1UjxEA!?b%%Xi>}_SxX>$<b&BikJs6v=%)u&z6_i6ii><(uD^;DS7mwuhSRDyGbB -dEvWkt2K&&MT<c#)iec0^>50w5|D9V&f5$Bl+N_*iir9=)`Q8wR|VAND};MNOuON1(7v((LtbTgq$9^ -N=h!tUP&ls9d(|8+2ETLG1(#3bw&Ngol^!&&1%G{jw9yRa?_?BR?i=(Uw6tqvXU2+4wzn^7z%(!TAL1 -N+ixf_TybVlna#%Vx~VTtkfm%S!6Kf2~~IpmL^UiR2)ZJH<b%GmYs;i;^pOZ5Kk68{`m(tK)7NR%0-a -i5D!MT&7_(j{?6iGP;@77Oq*UPq?*%4?S1KNXF6Hz9^-;ad7Ow;%A(O1c<M&E(3Lwd?4S4>5_;XUoxx -9qw~dt&e@tbAM}2XBRP@4vPo%gdHAWzL&o6~2`%3Ws*Z<uX0LiK`y;htF24UFGHx<YutN=r`b%EKh@O -syTFl{UQ==XibUwKge#jl|RV7!Q6b7z5M%aeaFCZX)%VQia62n)y*bf*@s3LNdE1hh9IAAx6x_ry2-l -lPAGFqqhZ>dVvIm(VGjF#Pa{=ojP3y}gPklNAd6ZXwY=<2OC+gM{WHx@;$mpN2L532783sWG#Ur2<0* -B54FTbR)SJHp7<hR!Mm?CTPPKGuj{Dlzz32Af+$ed_)7SyTu*YblB!-Sg{r?31!!5!_NLa;FHmst`-} -+Xgz#cbkr`^_stpiDq1?IY_)v@>I~3r^-bpd{ahXwwpJ*uk5~j>++L2y^gyu%d2RO(hSU`*%`2J@>s2 -|QAZETUW5K(azk&2jTzfbzU8KFS(*ABnXxqTmTaP<*A|2eh)um1&Vp6+)e!Y50#S_(CC2cb44EgxaYk -}HE8;QO%HtHaYI@b6CCn*|No%Sntyk6cG=bKdD{!pI0*&%$J_xNvD<EVo>+Xx()2}%vt--BH3)e)(M5 -D?&9x7qCn{1!;hpG&4Vsfs^$|emqEq1$0AzOpCrN=n5nE-YkYoUad-=W5EP1$%7dg=V}IwxObu9U6R4 -HY8+UTK1UPKs&7EnlimH9aN6-K(QDH0{??jW(Wtn~G86wnHtX3jG?2A<JajRHHEKhjc<>Y4a9CwwqVz -SZ#bkSF@%sTu<v7w$ZY!ioR8^R~-xTzE&i%USVN3?2xf6ef|PF>@MVaSdZ1-_s}s|se#SogOQKbNw~w --Npx1-)}@Hi?<3@h;J+tH{trm90o)?l;Uh&0k?zJ9;UlE0MwkM2*^Tg5h2Kc<{7fMZgl&TVa~%mDx=- -;P^2~}~6KUB<#<fTf#Wi8$+7ck0Dhb~_p&*1Y><O#hvC_D(We^1atVtj<!uMpFO$GY$f!<N+SfsMntf -=>fF<J@h?Uveq;UblZ)dGY*lR<86ORuWQ5H<6c9Oc<{AW#UjH!@nVx7EaHQ!sVId$L_VVo?gg4qBE0k -AIJ}j$%lcdEj?UqI8{oZ4;@Vde8~mZK2JW9x#!;Z)_rqC@j{dV@citl(r-_-;ZakVtw_qly}FCcBkSX -O77)HDOA5!qO5=WLS~XD78*lVeAYrg0@-VFOnFuHIFmXTnq0C)x_MYGQ-J!aa`}2v89!Mn?J@zjsW7H -UC!2LbtyvMHyhqEXS2aTTW62>uvR26I`c#?=f=yM_!(OxfmoFjSEowR>#-)0_IL6oiAvjMEN_$1OZxN -?nE2Q1y)|a=`pYk<F#bi<Iy5b_hi{!g%V#dpi^00uf4@JdSgIblYEU&ZcPNfz03eHxo(CgSLhbpgjU| -xEio4NqP>Zu5?wdJS9==)`!xAddL^VBEI>^Im-mTh1EQpJbG_rK(Y35_WFCPj0B3Y8988&zCRRZBD|0 -o_W^@w-vlC+JQ;`^#0#=_6<eE$=BN@)pIRwDP1+B@X@a_F&S7U8oqa;69ZVsUhyl7a35IRS^&*P>n(X -{EQthIJB#mKjhn&`aE5+Mji=@iavEf^}&b&bR}?+`k#OZ@H3OYzH0%(l7|`o*9IW#C1&zhE0#14Rb|C -Y`@0pKN+Y~tfd14rB#f5K9M))Q8ye+)90gRPG1LC;oQtfH0nthMG@9B5t2-uULDJsU$w{d&#DBA?ePM -M)o0*SY+Mtiop4x_JGr@}t^YKCE2z+KfwhekVJ~|q|+()=)Cx@@b`zNzz({~M%lG`f=rdZ?HX;dbtl? -}~zSYzEs^lNt?{S79R=)Q!Cx9J0!<yZS;?nsS{mfX!^&R5R3h1Po2PKDj2Y`xkY7v&CGupy_||5VPtu -KXB@5R*XaT~)UK^lAPYtjWAeH*<#OVt%st_z5ULR-xA;`F163(Q-OADcp8T`+MTL?g@{%yl-k`Gvx&g -!1P<Di~$^0srmv>Q5aum`YDfYXy|1}QX#6rP#0O0lihvYs+0csPYqsFJw*RC?9lc-n6~R3m(|XUEr;B -?unjSjpbwL<ah32*B>V*;{&6P}cZpEHoq41HFVw+ov%tWO)O!QLGe-D?JG9ENVEycmOK^%x(ZeW1&+C -it`l@bbVxJc7ygSWHO-PG4wbQ1AE@uNw{y$Jl0|XQR000O897^_9Lu=vMy#fFLh6exu8~^|SaA|NaUv -_0~WN&gWa%p2|FJE_QZe(wFb1rastyEiY(=Zf%&#$n8#1g4Qg9#ocrJ{^(RLTnK%6PQg<YY4>ab!E)D -#U;1#E#R1(TYj<p>@v9-}%mkm$i_ZsGah1DN2$t&C-G?1&VO1>qVaDz2ASBU-FGtnRrkaqEe!OOJKT@ -pw2yl$M^kCP4Z4b*p~5vZ3>7`>lw4HJ|`O?3KEk`Rw!`3>w6%njZ0Khw^$UpU85`mW!zgsEgMKhA>=c -H^gb4Zr{&Hf?lMmGt_Ec!h7|klv<crxCU=Qo8AzJ~&szqgx?nmNvLta#{0Cm0z42|__TYC`wD?B;fsG -v@Q6G~eG}eIl|Khh474%ZcxB{{;h~`oX8Td<~jWP1=hu$82&FhG60TnWmJiU*ofkquIU0OjOd%m1~Na -pl*v08tfC3HPsT`!h+`Lg<aF~7N4EUzZL?G@;*_SaaJk^DwypBQ2vNE5hY>8@)E1Ka8lE<C1CBZ`^Ul -5ZLfRy|B{LT*{nSVeelGknpOyV$VwM_YskEH<l7G%1i=qOta_0g+r|pFvLUK+}#WM*?*X8ieH4^k`Qb -UR^uK2TX%-UnxLI)w^J(ro8_V4K^{-?P}k*y9*L|z2(Ya8MwCRKzK5%2(Of8RSHDp2h5@&ivE6Y>W=I -T+hD*+KXC52#7k@<>o(}Bz=jJ)9;!)GP;CX)IL*DPYon))cJ#f|1EKe;q&-`WqISsy&H{0bL%sZm;Th -7<?V%@6VK3ua9HGMU;uK58MTO?=y1~xrYTn6%F-61h1MjG0-%&OtuTKg72P2<9Ug~UdpP_M^?NGOAc# -)AQ>fWBdI~#=wpD`+19dGqyk2daaM~28lhA6FA36z?3OKHgv8}&z<+->A;9qzFlpSr`#vkxqJrEOGm4 -e}HBR_y<D*9gm`p$x)b{z*76mQc&UJr{=FZ%|7E1QY-O00;maO7>Qy2BtmT0ssKt3IG5l0001RX>c!J -c4cm4Z*nhkX=7+FUw3J4WN&wKUvgz`WMy(?axQRrrB+*yqA(PG=U1Hggb7QW**6n6aUFJttRoY|^}#g -_O3`M3vTYs5f4^-3FN?QP9uUeo-{qVhFlICbvB^oc0FvgE32+5w;Vi)x4DsI;&gSweSmkPA9&%wAvC7 -FwZliacMU>f$%$GJ=lkDpwn$wKa1Xo~vya?x;F_Cd=9$=PQP~P+?Wf93jf%yqUju$D;L<QBOnP4>O(M -T#OZ-Py(b?QLFFd`g7qA8UeMT3|`#LS$n;uy2`*4?B`npz-N(so^G6TW<d0nKpR0C_YTjhFBZa|rXC( -VP*fyz-*tXxH6WR~9KrILtzhBcK_GC5F-o2U6S@Vr)YLciDm$6zV7*fmzep+-V0ISDrZt3bN+!SXM}0 -j#U$OGVCp`G6`ngWE)0Gs6vqmTHO&-c2xrX8&f9nK7<8aZ1lb;x}ofqb>8xl7&0oVh~0YmOamOQR%-1 -vBLX8G5t(~@&4X~9@bdsFQ>X9p>N%x8xqTzd+uNN#+1qqe=u}|`sj3?L>8c8ca5Z(+V>x(uhpM9|t!X -V>*6A>#v%mlC-pC(%K6>$fJ1Fq#Z0bN3d|0qiWO9a0J<pSaAtIU3r>S+Ir+E}kmp7&F7|mCVQ-%aJ>v -L@~y6$Y?3p^;yr1POJn{`B-Tyog;eYgA5LB11={K0XH|F^vHhc#~CdiGwNGX$4Sw=8JgWU^@E==DnWR -c_wS^5l)rm2sa(`pfQM`r-NGuK#o;nH;8d$f7&=zIS`SK0!DO=Wlm1mV<|SUVrp*qN+$wz$(qoPvEV? -hYE1B<WOUF!_Ie~98`EZQ@kaKD&kveHhlKRmr3}NuJ0gm{O-^}?f~`O!HHp(4N29@`u=uEEd^2sTF1G -zw&drVV<i8OAR42DWcY}=t-%WP;VMurLMA=~`*;=X3AD>?b^<hZ2l6$80ypTNZh{~pIoAa)*!4rfu|O -Ko)aR!04^T@31QY-O00;maO7>POEQ}qL0ssIo2LJ#W0001RX>c!Jc4cm4Z*nhkX=7+FUw3k0a4v9pl~ -vnv(=ZTy_gCzg7l)WkTj0er?hKS$p_EI@we4u!SV;u3BqXIx`t__N-_kTG=)q%a&z{{q+Lc+Qq_&`GG -|{pGyHrd}frZ^eOLcL{X$nWo*c49Ziqj|{M}$kM8l-zCyfC&ljw$D+F}e@JsYqcwLzuTkk*4HY>JoAc -J{rqPF-{X5pPPs0CqsP3gD8qhIsu0=iKPphfw6i3kM`Tl&U{K|Okj5Yfq;vPECO6g8fKXk7-7e6I3iL -Nc0BVzefW|8_UvivF$nM(X4H3L286V5ECme_+%mS%=t_mFqyvwPDnv49VRflJz*Nh*N_INPl2Kmv_)? -EvVc42Ix-^oN?246?a3*Lc9P+W!&axoXMDj9&ODQ?ho$5LDy1H|AYSt149+P$Z2tK>;wnC{;bPXDX4R -3RS$(sJ8X$0J9UcF%=byGKK3&%8jM?c6`g+SM-bxO3Pi5Em;p-d%%PF6O#mCkU5VZT<T#n(RfVrrb%a -n0bCYj#CTe^ADi+%~^YHHE5J5W{Y0?%BKc%X>}HUrr`BW2rC5>C=u~vJz}?cS3c>Ug^z<?ral}#Gcwh -=7MkMy4?%ifjP_FmAXZ_q1%~#dN9mkGudX6`-NB);r~i=$FS-{`C20uqTH0j_SpX#cfI;slW@1IrgpA -HGuL>fVCIB~qN0RAo<mIV9%6!!I0JY9N*B|r$nb82vAm)>jCA-7NMR&iqV<p9Abf^~YHWG4o%k`xckA -x2?IWe}-bv!!y~j_ULUB39`)xX7zkc&dNc9KjeSUSlT--c+e(>VutJiN1-@ZF~fBfO&r_U#+U%r0({^ -KWj*Ep~Sw%#bl8z>jcn>dBto!(gP;jQu)P)h>@6aWAK2ml;P_ErvSMNy3b004Re000*N003}la4%nWW -o~3|axZdeV`wj7Vq-3Fd5u!bPQx$|yyq)c;gU!t9}uYssKk*2;%+(ahL|Q^%ibdT_pF_U@T!ClQS8~- -of*3iG=c66*vV61xVzsKMPWuABRp9%JfYiT(A|iYKy_Pytg<ZcoUkGXZ5TQo5oStHA=4my@?ukD(jze -f51QqJ0l`La1P*ZzOn~n!41wf0x7wsKur3`-$uVYzRGI<J0c;Q2<-XLtqKJq`pA5uI`yl~*ASOd&0}m -n)-}U52Y};8_TGGx&>mqAsu$oS4?z;Jr!P)<^47o@nHa>{Xl~or@O7qWcHZ&m*w9f~7>_Mq`>@qMA9h -9ofD4r>0(*mD7)^L3T9nrYXl#aW_{hHKw>tVIN+D=lICIR^v91J>Y=1}E{8z_}ZOm()TR9S;Wb)ia7c -_lWvaC(wz*lrUzY3l@R0j^}YewlQeF4@o<hAf~@&&^xks5g;Fp-Jr;mfK$*;IsVCu`z7(uB!8P4*AP1 -CG6J)U8w!5FjvkAJ`k-bdpViGUK9v)NkISK>1Fvx<p)qp0|XQR000O897^_9h^21Bs0aW6fG7X}82|t -PaA|NaUv_0~WN&gWa%p2|FJWwHXKpTVdF>i&kJCo*dw#{%{cv_=0&1nIifUAJrO*cy0c}-L<lBok$%0 -?9H^-%j|K6E>ukGXl2WpFm1c|*fv-8?{?eVH@IzjqfKU;N8MYv#{XqvJoT&*lOl-Fua>{?#0&BD_^AK -lGQ@83QB`NxO%Qt~4p(({s~<kwd4rl#d=##cyqe!;pP-sHSqHRN_i;;&NjO|qB~_)HM~1$h8;R`$#TY -I!@)FIZhP-CQB$>{75AN%sR>LOv&LN7ofykh&qu23VLWA?8Z}7aa&?a8At&4e(;y?tqF}{z*MP;FlJn -Vzl3O%s@O)j}@zh2I$!upA5hg^=KBwuC%yM@ZssMWl~##PCeNr(~ZMARgbCpp;X?d<T2<+*#T*q=f|w -ymSQ%$Q}T8FfQe00kj&`nSyZx>h*A<Qfk)Qiua2)bB6>di9h`wLX}JecG%Z3`yeLYBzs?&WnhFqSvt> -#9o=C*lSE06h6h(54P|{hR$@z}ZqCj8hTe@Um))lE4{OD=7o6jWXoo?ML8u;;$<52iyLGBQvHwQMis8 -sGBd$Iw_uQemhii~yAbVe<arJyVsTN?tD_I=#Ewoe*RG=#Qoxx*h~1Jcsv%XQam>%uX0p*2oobBvxjB -dob*^m(w8fpo}HG=R~<4DE!nXj9F}_iRPMJ9^~mAz(OOT3V3!9D+fx+aq|3+)HJUS6pngu|iT$yRAp+ -6)ylT=CufDfn$n}F9q5Oj<UjBb2#M+L$ZoY;rngRNTGI6tA}{sFv;F%$0tmfHPDQ50p}dSek(5U%dj@ -Jo80a(<vsIU@^@Np+1;*dx&`|0*_qts?2Papf{`#*K^?NomMsM<$OYo`b8|ElVGx$&5H-2T^Vm5ZD_7 -}+|1U@s9)KtfU422qW2}8V^k(Nx&#YTN2Vj)ffqs#W9M(geh#F%O;9LuW&IK#zD{1H}9yu`K7+u-$5L -7~L+?J2dGTc}k%>W4?-W&Q7ha|O(CiV;)2dns5o$wlr$h9fS3LHtFLTlthL50M~(`$+HS@$M633f<)5 -$q|~{v`dC)`eTJ;_VC2??pVboiE{mNTVe*Scil}7oU5PJ@ec=1XAYAl&Zre6>~G?*5Q&>RAz+;0Wk7q -=%V3k6~!{;q2ZE_DVcUm{{VNa?ce|-nDj{qd4B#9+pZ=nl?~(91JOZCDS7QgMXl-R@SV)Cl{{W{H}o) -Py=B?IZKU`ZgMiX)<di;LeCVu<Dx61Nme(c%WrpX%OB=!aVO+Ip&E)^#g3(-NPgAfA3d-PL_)_X7Qwc -IyQ2NN!ms?5>IE)HKpIqizE~AuqJ*P1_;s4<_GHHGCnrnHD)Zz7<M%51gJ)hBuk1sd5?!ZPBtZB`_M| -2Y#nL@pH?{s4uc{=u6T2Ixc5^%Y4(0pWON7KH?gIsI3&-8aPujnPOw$;G3S>X{=uR?p-iNd&$8tti=! -%2y&FrcuLMIBB+NCjkcGvq*$fN&DpMzcTPwgnX|)}}&=iEk<MtK>Cw+8KQJBG#jddEb`McF3jJNS!31 -N>gI19)q@KBJVe}WwAsZZ(`|(fN4n4;nnPw<ibP6$JjxzOPmknvIhkyBRrTcSK7QWtk-m5Xe=ms#&@x -+8xw00J+1LdZD|$!HM1nq-`A`Ln+lfe;ZGk+e>HQlXPW)zVd)Lq1Oj}Ukz0$A*L+UyUQ%e2p(P!c=1^ -lx4MD{(bvZ`I&yKUQP}3xYIsju-J_}%2X}hP)^o~=E;&`B`U4R>bsM=a<BaTQ!z6ey1l7R&f!Rh=1iV -quNo|s&7H2kjM9hIkZ{XX@fZe>F^tw6b)g>G~6Ci(IxO(U|=@DxJc=@UH;UHA!!#Q_gDB=O`e?KkG)N -Q-jS?Oe}X$2f#i$r1bH)An*OM>&Ve>3e)b&PL&Qq2%v;vaWZAuA|U>YB(=x{nEtw(DRHqtLXI!IYFoM -5+(3GiucKzzv^gGRL>y?1_0-@Y6EPCmV`0h@!7}AW?Mr^2$kTGab6;j+f(r!4UnVuJ6f-qBApyEf@8! -nXv(_WW@Ude;i*cGC@gEhxlLM&u^<j`H5i}xLnpJVmnlaY7z|%BH7^>=sU}7?r4P5bK?V{`N`e_4@2= -vB#GD3}^tVfr@!1@+t>;@~&Osi_cD#@8WI9}5DYYa1mKvCJBwquT@}QD5pD7hyNi<OF7<{Pc9$Eniau -eFt1H{AHzNVAx(Z-bIUg>FXDEAScKp!0^)d`P#xT{LkgBzP-Szb74+yG`2A-(t=0FF93-9Ejyj?TM2b -y}$0OOVC`L0!a4bN|_xi_bw{<;2oGwMWlhPMXQVshWXJ-%=W&a;I{1AN2D23g{2o)sFY48wi4G3;0p6 -wqr|*<8h3a72T0@ypXJ#3wXtGHn7?XyiV5l<a6>H<RdjVP*m`e%~C(JeY^=nXYX<|>Mb|tFW6Fiu*;_ --Cp{DQHOJorgu{N{V~-lX4?JOF3ZF#(+GOMX^{a-WX~x4DhK_z=Alfq`nVc=i5z-G7wwstT=>9%Geq? -ZU>u+g=m5pEP^!#r&EO>$>ZPP``YR$nQKM(TqWIA@p(>3j=ik0ek<LcD+RAwGoNREogX@GH|4qoQO9+ -k3Q3YpHQ7W#^g<4`X#V9nz!Fx0Wk1y#z&nCmzSQ_~8BkkwS4S5WZed9;}PD=BH6;on=KF82Nn(!H+Pw -g>Pwa9&D0GwyGy9z#^V?_M83ZfVU*gZ2m?l#P6%*^r(N5r*N+@EU6aE25dA=PWA)3FDv4!gG16>g^au -vJ}WpaN#6M2Gy-X(l={UXliL6qPkm|!jmf@S~9rF$iBWc$h=w9)TE%@%ly3D`gvJ!fvf7yLg(O_uef> -JLD+E$3FMMGOv$JiNxfY=Rzzl`n;D}1gg2S}15ir?1QY-O00;maO7>P-PYaQ-2LJ&28UO$o0001RX>c -!Jc4cm4Z*nhkX=7+FVQzD2E^vA6S?g}&HWvQxr(oSbQfsT0<6P{nJI%Dy#Q@uxViFW+9Yato+9O1k1d -2}T-L}uN&$3U}bB=hm6;IJ0MX@Lm#NyH6;dd@1Kic`Wu7qTQ_wx3s**CqlsJ3iXm6HD?i~OGHSG&3vy -ixDvzRt^ye)n2(k=_@4z}}==p55+he12QYyeiY8*A9tRRZ$5&<SXo`7meH(T)()%j(UL*wEPyHdp*IE -v}|%V2hd<}TjvE2dJLNA_xruz#q92<`2KDgM4!9}>G3Z7S&M^3@a6EwySrhs{P}LN7!6-6KUuKhXYl{ -a;jhau?17CzYmG<Wzk2ub?aiw}FYNVtt0HY0mR!T!x77nL1M6rwqY*Il9dCApWYwAxMv02~zj?+QDIi -)AA|&0qNb_=rVsHe6C~G!iW<s`rS4;b@YF3@^dcBOV8AT+~vjuGrqD2#gZ1{!A&%!#eG^lUYK$a?;EH -43j3zAU^(lTS$Z*E>gS!BG4S|_f>rfH2}GqbV)XPvQY$Rt_AQUXi(cx2;;oEMp6#lXYyC5D(uj4{SEA -V32Q)BqzAY6nzIt0u<)L1aeH1oW9$l6VcJxlQHjJ$kRIEL!JfmP71pOhb#ck*Saa#vwNIc4*YpX&H<{ -qXKggUZb!P)vj&=tC6o;JM0VNfSm!`9wX!yo`JG31IWVCHww;sc3K&mL)`>@|J6bC(4kLRe58VT%*!3 -`FdM;`<|&u&gZ{Q39$P<h0+tz$Tg0<rymYdOjTa67Kn&FIgMq#eJq6E5|G^43d=AXt6XPZB0yqDBm)z -X`@UK_Nx7XjnH2)zJ@r?EFt0Gfd#~8X<zE!<5=;bmk@|6-yK(H$_E{eS5N_LJGp#Pxy7rH-If=dtx{> -Vk6hg^XKGP2@np(Im~-~xWoD&yFlN}C!ZzOs@GFf#mfp`WRD9^&ytNe^L<&(#YT`}o2YnprQE)c0b1r -Nq7~<EavR{+x}-XE--tjcHkIWU-NrjcjaWXGV5rWD_Hs7}>dzog3MOkzE+srIB448KQ;_IfX+&CmSI{ -?H!<=#ID!?pNw6x!9F>2#RmRl;);z2lXF*WoS0m=V&li;(iIz5Cev2zdvlJk*8;X>EkMA$T;*a_7#X2 -`^y^z!5DliPI~=7;>0sp4=KM;7o7$XDjm+jeHesIHq{k-6Q=9eJgm`Mx9-9D9ZQf%O-l<J|Y=Rq)ygX -l7xtHjvm3x`Ch~tr$Yl}J_dD*te<B^wdi#{HC8Mhw9BQNKz7rz*egS+6@91m$>DT06<u}CGiC%7UBMB -OqXXO`X&DM{eSmq`*dyjT+nc~h0nzK&u={N^p^i^^S5z|m+-WQ2kY41kA-Z4M{)bIb-2EUkIK(mLUA4 -uqVRELTI2Q(&cOE`rVHG}uUk1!f*349IRe?BIij$*P^KchWI^NOiE?k}uz;;sIi~tJ^TTKA2~uCpZa( --3<kBjv|*de-L&Zn-u6alnJT@`0psn?W;D__-G?c7(3#cws;(NN2J$fch5)El0@pA4BR^|ccSc!+%<h -dOn?Ew`2i$LM>1WlDv=>7C{h<#XK>-Np|2HmFNuuA*Abh0Uj+n4Be`*_*@%e~&k3l*`_j5@i6iB(?U| -PplR14vg7O>m?*wq3I9vc<@`{2;F;#-4L|7yTmjX)q5hJvNk2zb5De&yuH48K2dJer|ya1ate?xn`zv -7*FK_?>8sz~G2=UuFkf?B6=WHdPUHpdOCr22e-@PLuUc(#l{LlQ>|`e3Hh3bIr^zIz^Q-j-xL(XP&5> -%$fD5YXJuJC79mr1Kv$yO*jR6o3s089bu55-OOAwPWz>O<4&X`3U?>sSVgYU!}W-vnTjVONmzRIkMfH -m$HM$<6byti_Sp6A`Hgo=L48S1_|nh7(RL;YR*R8F~(v{^vQsC0#&#tazg4+-ema(G(%=A%+1Z$ZOh| -Qf?Xrg{?J8@I>!?tIE~E?>MjKUra_FJFP4vi$u|5ry1IGAlz0bRmpWCCM(ABLPC+31$92+y;Zp+wO04 -05H^l-cUVaD|#N+Jh6q^72_Zuiqyy7~0*<r&4Z@x<kZe&%{(TeN$nJqv!qAQ8q*BH?fw^N(RZtS{|2X -^or?pr7Iv316d_WYJMeb4|lbBqLscuxbyc3MNF#dT`@XF3H3-|y4LcIf=zFFW#&ro~$&las6DWx9I!d -yUwJ=j7o3bES}Lf3K+ztA&>B3u603i{VO&lxp8ZKtd%P;am0*5QC?@JRA4vJLx3B?}(Fx2t$%=k*X&B -87{M0q?>Iz11bi|f8>HDP(LN)mD{Ttw^z%(+r=M5)K!VD#IUTK3$nhgHZp^23v!SudbyXpdHvSC$O@i -j!8)5Er=mO6J?hvZ1bUegp^cR00KXxa*t%}*M^6HRAE0)47%vp6@4@9BzlVM*1B_fMHjj&Vwj2-$g-Q -P$Q#O_T-Q}yc+iK`{b1e=8#|zc`R_wUvbRyaxJ?0wZhD#u)J067U)*1A7ay`6KG_V#(EWNQBm2<^a(b -g7xbsIPZGir@G7hC<JNgsLgUT%w^ui#+^p!^0<O9KQH00008031s8R?6<(CtCyn0Kg0Y02crN0B~t=F -JE?LZe(wAFLG&PXfI-6axQRrtyW)e+cpq?*QYo*7$#+k-2nv_2ylU=^@grV3N-EdU<8gVQ8rhaG)QWR -SM+`Vx0me$?vw0DN){<AT?@>BL6N-s@&4acQfxr)wv?}cZni>dc)rzC@SLUaisMHVRfc9<2qt7p^Vn? -m7hDNOx+}X)+Ybk)Qg}glN#qNnYNi|3@9OPNlRfG;ZhJxRC~qh>Bv-ZEgI~DqhVT|bk(JrC1Xpg`Ug} -*Z*p=Bt(Gk2{6GY7M&q$?Daz<C2lu)d5nHTuJf(kYLd~ym}z!#I#6qdC{KD{O&>1sX5Lhh*2AUNCYxp -Q8^!^!D5I-7m{^m1`_{`~Q?#q4}`F}r+u1yh)h{`vdIQ3?mkpF_)E?Q$K>E}smcfus1tEx)_vH@E!im -S5cRvs->btgl|3pF1$bup&fJRIpqrILl@1yClgXz~5*za;{X61A3U2uw<fm1It{FBTMq7Tq#Fvev1A; -Ag-9mb&|oiIjf1ak+CNNfvD`KWp8<wWJP($bY{0(LDAFklIUAPI6SZxHs~o(Ua(rx?@7{O80<a53^yO -ie@jcfh8THL5KU4b(rbI%35}N$Zf-6GCpR}%u}ywQH}%E=jNu8Xa*TOp!pTr|FSwkFZJy0-PNkr<ybj -*8=f05wz)|ToBhPlLkHbYw{1<OlQq;VBFFg9*c^Hpjv7nsl#Uk!JO<0u%e$T)<APpURaEh)vI6F>5Ph -|VbG)I?QW4Ib)rlB!2I8fTeb*n|%H_`{uCt0B3*aq~}>K9(PsGXVsi0yX@50a3?1SJws9^+SPF?tj(? -50lX-ov(@O<gIAtpd}+N#5u)ZPvthlO$V-ZZZ%FoIEmGb{a{dYssM+nRI`<*Y8~lZ#$j#I~4j|62yR{ -#d^{7fP+|o<|6Cbf{Q?v_4<P|w2{v56Is;DMrXSHVb5r^3U&&(&^AhdFh$y@$LOAgB}oII_gp8P9PJy -<*N>)qw`Kv@juKY3?I_0D498A|)N^HWKg*a=PU4WjxvCRoD@jG~(D<7zBbqFTX-*1lg!vIW8yv$a{yl -*wT?i+AAS?t3R%4Bv-iJMzz-gb&UHup5C&<`kpD1@9D!0j)L8&c>FY_R3AhD(B$vemuNP7gY*Vr$V&T -)(|J;R7p<%}7Dg{{jf-w-GW!>Q>OCytWf?GDsh)aX)aBie(*zPZ~h1w+<cf2v?qpvQ@9=ZcY?I1H|td -`uL>N{F&$LN8*`Dn#jZk|TJ^kpYQ|ToEgT70}dmQ^&)(#r5k3&U7q=GZLc()w^*&yi7T?(c2FaKO+Vr -Axwt`>$52g4MXz*{_8MWPz-NWIqo^%m*v36p(GXz<v1Lo<_Daf463etV>DrUf+Hl44PWAwh%onC)$Pl -3L+?%!$gc6!0S{M&!HUqYz0HXHztmoDzCP#>Vb%30<F4kWUi}Sg*S)1Vpt5D!hklqImgU4N%l`sUO9K -QH00008031s8Rxlj@P+tlF0CFY(02crN0B~t=FJE?LZe(wAFLG&PXfI-KcrI{x<r>>=<Hq$}Uoqf5n9 -6Di#G4xgD1g^?c7=HD?b@5|cDo>GX(UfVkt#XzrE!2<9{SJ%O;8CbdQF<3ZF)<ArcKcn$iL`Idd`_4I -YW`OyEXC>Vb|oGIdg7vZZndYOyfkd^ek<Sl6b=8*;GVhCKUMK(Y<Yd^Un6>tNq>E9oCmT2@XTvVLKv~ -t(F+!LhqO-sfZ(AM5CC!++*&|4tuHHZ87*%5Zw_-CT#IA<p$DJOg;aYN5eSr)B>NMN**EUw6vD7Yiyb -X<4MqEQOpK0h|p>&4Lm=L<7u`4-~BMq(pvh|@J__w$QuC9IOG|XO*Pz`N)!e-4S;0IZpEjHh~qe0d?X -^CvcXZ11Ot#VWin<7(Bug_j8A#$wFq}P|Iu>(_HzEG<@|j>nQGv>_#YofJQ!-&F9`8J%lW4S^^^Fdj6 -D$*$OWDO9L2G$qJVG>n-lgI%lS`1VkzT^l6WH-r%F%!fG*5UWzz1l%|h2n@CI)2Y>M+<jvS-|A((p@$ -6<%XWWFGTl?TZTj5}iTNTft@mV)gRwqe0I3eP+SrVVDHWPtig08Zm&Hdo>e`H1=8d_wxZoAPkfL5f`l -GIrQA9YwXvPzKgh6x!^@%WOA}c%c?9^n4Vhhs$la60E04<x?SS__G~)tgFXO^>|J_o>z|-)Z<0<cuCR -s(rG9p0#dh~Q@oZtM9x~G|MHRS<iq04ABtlE{$)TCF+P&O0^`Ib0Zr<;Z{_64uM~a1V}Kx_q!<LD30t -APUZ$P<7k=FQ&E^I;ietn4QJjeH$B_g98n6aQoTg0(ByoYzHif_0ZW+>Nag@^lK*=r$DVYU9D^_{Vw2 -EmET9RvD3=L%qpwg`vudsREWMc()jqx*_I^*Z_jmFQh>WrTwG#USevhb}{8n*QbR5HI}RW{6vCT*R^E -b0no?t+3?gHmj1pvBD6onpIC)=W(apC&prQR0EbROFq6%UKdJ2WpAyd0yK}YJhps!aQ#k>(bd_DutX$ -uG67PylIy?b|G^>xnRWe+=yA37@;&y!3t9CeonK<*`qjNK@`g)sBn<Wg=8mjv?jBnH-r=qC2$%B5-=x -_zSCJ=1@U9o75r#HnQP05rA8Oz3<K)Lkcmk1g3{yJo(O7Hl%28`rUsz0sz^NHEP(%SMDa-kZAJ_o&m^ -_Tlcfcu@Zb!qUL4`FLQ{7zOF%Fgo>2t@Awzx~L=q7n3g|LU(zaFB(C~&~?$g$mY=g}P+W@ws5l7-AFv -yRb(_q4J?3r6;RqP%)N)7@=wI#ifkAuOPf1>09a}1SJSj-iPo$cEjn~(g5{oSp-hx`8igIoIt{euSw{ -k`3NZ_Fha{FI7syNVGNPoE5eOu+0^2vvEm;I^^9+3%O#-Ewqb>4VWl<YUI?Lkxo=T2`I7Uv4<kDIW-E -Cykb4q)mDlCqrsM$R(({VKRXCs4NrC^Y6{XaS-CZAa!{ZNH&at1*mzcojm{|lQ@M|Tuek5D1Xe!U|4~ -~T8tYc_eczgS0TK&;-q~gz4k|<8H5QCIfG4>A{_}3k!&(ZFsH#rDIFo2*HWz@A6EO7R{!44Mt|48v%R -sky;b28Dh1K5*gFU9ik>_XLwN-0DLY?07Lk0in(=`5Z7xY6Sc^LoptYtUS50R_Vo@BJi{}<ay$g{@Fd -#FC!`UQCFWM&*1|kq16!fE7>*uX0ex^YpK{w(IOP_#eKYmg)$kQogFn|%7r-r3j*J=cd*g{vuqm4Eor -o;TW<0_5Ywgx47>>0JPZ6QI(Vr(Ln?utW|CDK*0T`MwG%y!vl9LIY-7LiL@m;3^HhoZESgXE)1M=7Qu -%kr?B9TFcq7%foa9H58~Y!~neU7Lg3py2sxJ{;SnP)%LEAAX%~XlyE3hxI^jvWra=Jxdn}yGysQiq3E -ax0te4P?xxZOi&9iYpg2z_hN%WOAFk+dL=F?|7AtLgwz)bjDA-yaCYFR7uaD=y@2NFq+Z7Sz)~k8#Yn -x7)*0dg(^i}(>czK@74-_(rwc=iwA8UAfq;7XS`g0oc9O)2>nJ5BGpMnLoUNggt##NM5L?4OY7I%RIq -j>-++bA7Cspb9in6$2@u$w?WbO8)r2gL%xjHjFb&XfcziDOOIGkQprPqf1|BAhRDz2{g<{|k)Piawq- -=&_khksSk2cv$sb^XST>#cKke%?C2asAwU%ZG#l$f`)wA)=>>c3YEPucLkadPc%}D-9cI`&)YtZtZMS -*LxwG-qWzz|JH+z``gvD%`4<qah2OL?|U2Ibx6haFG^Jiaj~+s0xf>ET)e+r{9(EH_(}x2+u!Zq-Poy -?g0bb|OV(1i+raxDn(X3>N>~*FlK4BzxMl26^Vc3V=wIgiujTxm<@~GV;-62+Ib(dG<!#PPS=$&B8}p -@7&;9=0dpkAGhA;XL5qX<6gEH44l8ur#(Y62Ba;ojP1Xb9BcUUthqkL!Ye*Zgry9XOP`!$4ZA!|m}V9 -n(I-h*8@BiDq`;?FvS7Js?Am|px<htT5lOo|5ME$2Tb3;k_5{|OA<12XTyKY0BF;fo(G=YMQ~*CBmKM -E|{<|J;(n-`=`io8XinpBI9>t7v_c>G}HxcpZ`w<jWO7ni5-`MLs5Ff3Tc?b|r~T1$v!p%qgyayIgz- -gAX8fKY)Mm`VqmwWj<+u*CG9k;GZoQzqEyD+7~U!r@17c5fS@!me79F0Ix$*lKjq)<nG4(SGV>a?luI -uZVJxN&9{7*1$Sj_y~geaQ>00kUv$N0+*_Xr=&%xKh~Rw${dG$ByRmu2rx&%FE<{1<H;H*3_NtmHiK; -4#hA9L))v1x1$v_4*GoDuAih2frE7M=ynX2!mQ9tOpMWSyQLk>r?LgBPkf615YS;dSrsc0gqOkp8dwz -$w(6+M}10ZCo_=HK_DV8VT$4!OQR!AoP`=~n-c07=&UE`W{@#qR=W*sx$4L~!WT==X47koU3)JYfWB{ -=KuBto{vxfgtf5mH$)&2j(O{mH8aJE4CTUUPjJM_#jS(6dU^Zc5Cn3+qkQbi-Qgs)3_>Afb|uKxdrB= -+U`|I9lqY&3XtIgRkL;cDSTETHHeCd2{+mU6Rbnq!dzLJ$L1=u%wCDV3Rzj6<wp&BV(qRsg_Emv$=h7 -#@nIYe**M`mdV<LmH(mx1)A;S5JPUcxp-HFRVXx0pDMn{KX8=LZ6Q^B4ww>`(k<iP6z~!gl?8=imaLy -eL;rQIsKM}wKEO<8sA)a1Sa7#XP$<>ULtMcfca^})k*hle+k5@E2(JZv^LosnW`s*5B!|+I};D%5+xw -g&E15tgYj_cf^^v9mXd*WA!8@yj)!Md?vy>bCwYdf1f3=xx_Plu(x92;{PNSWl{xRGVcs8UE}PKbYZ< -lyben;Gs~#r98vF>H5WaLR5<NFu6=v>`;b$|p3wc8zQKY#JPMKRq71#2a3K$A1A(O9KQH00008031s8 -R<2fbA=?E20G$y402u%P0B~t=FJE?LZe(wAFLG&PXfI=BY;1EbaCyyGTW=dh6n@`dakS-Ow{cv@loG5 -Yq89{36_wgZeK2ObvB&n%-JR|3Y?B}!3gxYp5Qs{pqC#9A`hu)dkhqE;L+gYm_z9ddvzJ-hNmZ#_oXB -=&&gDDzv*BSZ5(x>jhKUGam_>alM34g47eSJFeZN1>@8xdHqfv2r+7AMMD_{*c$5Ux(lBU;ZLEvrkfg -G1&PQP;QoOkK$na$TOTGkP`z(#Bbq=3+u{V}BMYQ~~I12F_SW)O;0LSKZTh@e0A6TdH60*N1uSZaAZ^ --=^8u$rQEw4sSSF%Otyztw#+Yqi>~W%@WVq<6oC@9iOdfBr>vaeTGiJNlgMHWdoXvR*E&b&j`QI^kLa -HU#zeK<f%v<Vdz7JCMr6h2;(4k?dH2FWa_XWm3V9vTzIWqA|pjBCx9&PuPGA9`G~{{9Pa^O-pfZj(G| -plVdReKiKwnQ>`;?!1kD<dqSkoQU+NJJ_JIN<dB6T*=@pE37j;Lw^%gLN|0DdzFdI54B{Fhl9i@h_sL -|GYW(yfP~ebh9oVGr72ury0+U%187yQ!JiXz$$JD1cViF_z4#ODI*D~VT=X9g!q>z445T;q^l#EWv;= -)iQM$Yg^DRh;9M1eQtV8~U3=R(_nGTxms%e!5?={3mY9wL~@i)WP$|A&b1Ar$U#VGUkbX;<QNC)Vr1{ -qF;5)NbhS(BXPj!v~<L)E!>X!~hB}I?}IDEeu(OIgi^((CuoDZ*l0}m<gHFYQPGhGukeQem{#jhHneQ -Huj|{(hOh`BxSc4uvnmI!)}ob3|G5Pa^Hb+%Cin(e@6Z*WP(F7vHr?~h1~y)7j;5Qs(VaQb9~W7Aht1 -&wnP>U@V2GSvN$%*s4_G=dIeT=Sz&+P!8^xfUosh8ICc!$iWplzs@_a8R#}!xKamZ<K98e;#vTgOO1e -sRukyjr@Z*|htmMqY)zAu{^kP9x#s+DvOQ<_ROIWH&NLigDPs<j;%ki(n@`|F=2c`ig!ZlM{UFcTA{3 -}NApTfsEo|SwKq|D51V;HDLQ>8ebl_`EPPjQU*2<=fBiubf6VT&DdiFV=GjbOyDv1qm*H_KE*dlxS@y -1yDZpxb7>^X3xN-C7QJk>}MoSppk>j)J4;FzCcq$uUT~9YxYBA!?2_O!>KikawQae>5TIM+6_56zj84 -4c+tPbA}yiRLSRR^r{5PVr6BKYHaH82%O@PpX_2H_zCV^StNM?+YG~q<P_zEkH!+pLAIzyV?n#9qtz{ -uA|v5czA~I_<R0x|#eikgn;{^_nLgB~wQ!q+xhqK$_=t9fue-d`bBU_GFfVeV4pM1PK0(bPLJr{ESj4 -EKfDSmMXB2TGDtdI-Jb&hVNAJw^8?oV#_c@DX{Vr6Iif~!p7ReP=gmC)O>+}F)4B}Mpe`67=l1t5^$1 -$k#N7a3U^mEBYr2eElQmufVd(>K3HiT2uj&x4a&LRLeE{uyq^4+3M=njDkzIL7J7Go0^@g@v+_I#7af -z6WI!n|OedBWOdNMDC;>Evn=XdEcnTox8DW=dRde!VN)rpG3REA42fm7b$ry4&q(ULX6kE=?k(tZnKe -U7<DA4c+f5PZ>K+YIMw^Z)r$NnrowqZ+)nd-dv~CE#>vx8r8utO{)5yTZCb8nwtn`h%1Fg7%X#ub#1% -(HjZhB;OGF+H*$>vhz;DL0pmq}$UKkA*!H~8=aJ{x9cp}W;*UbVg9U>#ADyYi$C#zkIVdOWzdpb7tL? -gFWD1=|Jz>i3|Muzh&gAjr$45WioqqT2{^Xne``4$ROs2Qq+q?V0^!uCpliR;vfB%nrUn0%){uk4)9z -6Qt>&G8X==R3L>BHN9{&H)2^W(jr@9o|C4C(QFfAU~@<0Irk`3+b#f~_GdKa{v4l_T`u180@izy|Idb -1e1Y|F7W2XGUzc@7nGR6nlpzS>#%O15ir?1QY-O00;maO7>RiM8@6A5&!@&M*sjB0001RX>c!Jc4cm4 -Z*nhkX=7+FV{dG4axQRr<vi_@+eUK#`4n?-QU+~`;rEhTrpqg7Pgcd2T&umfQj&tgl0y<+5TF52E1ph -ob3gM`d6M+U%wPrpxx0~*{5aO>O!V~h^w)Iv^ne>}cWG9LT^tsxG~2c!e$HfTm8Dy;NaHli54q6r^-W -Nu!6wdmTqgUi9($P-m+;5~t9`O4(lj<R<7^)+!o@}rE)KgWS?j^;fB)q&c=qGvvwwa0>P1Jq3b%53z2 -C*MBVO-{C{4n+BM8vq>D^!##<D1+p?~@E#gEs))0fx5FBd;uUSD5!#GC7jSI;l5o|lkcU%q<&`qwuap -lFehL6Jp3ztHraA@G`E3NMqpOb=hld><DbkwuG5fCCDrkl8i@c7tLgw^Cz2zx?yXUw*m{t}m~Ce);O+ -r{Ma>%bzb>t!U+nelEmUVwZ*MZFnw{6x9DgW-S4qQ`D~&^csN<_Q#^c`B=1CEu{c4Hx}=Lbql%m+hRT -!-mg)zOz(0JP#1BS=d6Y|jG_$OKBqN2&wHInk*)+VBZllMf~kpozr$taQrsMb<~r}foEA;irU6F!1Tf -|U$bcZ%SAV&D_WGySR{$9jq-1`?RF-lj0@8jE__>T%ZSmxLkrx?rh@VUr`z#SF&l05j330m#c-d#qrU -WzZBZP}FhO46M!%o%}gizFw(oK<OpphuyDT1b#I#Esn;`RPNb%Z=uG}O9y_2y+j3k9z(e!fKVpIFA5I -9%L%=c3o)XAlsc`s!(&NtwX&Ks_I19H(~x7<TmZy@bb+dfbL<nG_*F#tO1Hgh*hb9`80$ffLU3{482; -ia>KQb-~Qc%mr$m`aKtJc<cA8#EHlLzy+7Q_J{6>;<-O^!J7B}xYW*}hk%Izgf1WnKOD^ZTIOY#-5TK -3QsfXd-Ln9F1oZ7`#vodlrIfoMzvWd%IHI{*rpvX=0z-IGhYt{bX4{%5XrA(21~EP;2ec)?-G1MvQBD -gEdrhq1lEXoLNfc=~w3kH8QLkZ18gQgnh8b#6VzNsvL!+1BSraoT=WyCILhQ^M7RM>0Gs}sIo1x8((E -^T)s;VIZV_Q&MYcy$Civ~1%kU69MHn7KWcxJJJq{lrAfCR>lrg-N}9ho6v-;QV_Xts9y4ALXQ#x4kj9 -ZxJz3_e6DBvJ%xrKDMytZDLWREl{Ro*~lAK*9<{$yY8tF}8<{CXMq<wDV-?0TQM*)<m0Nu?e#xlY4f; -$;g)8cmxieX~kg05jd_pG1e%gjP;(JoYkPjkXGg*&5{*_8s*VAG^;U%GtM;mMYxnE4xMQU?5%P(s;!C -AP95IOuIQW4WF#dbn#1t-eYg$5ftYqh^|s$mdo|7nw7{Uc0D`B(DwLQU*Ou**n++VBkaf`?h>{Zw%TP -RXyx2Hh-^3*L8v<#uI0|U*o*7S$_gex?nmi8`Gn>{t4;i0n!kkfP%k;_wCc}b3R+2o7$t=Br0fkkNid -9Mr@<4;b#=+1Xboi!`QNuKyP<mrqgJ~RnupP(55qF=^#HmZw^3J}=wRS}9_xp{+XoiVT72`9xNrfEwi -%F2BFEZR^%rI<HWw|*B-vqA8((II4s}LcH7ZZMzn%U=60PUNssa%w&IKhVFAP;D4sKTQ#(L_u@*`(~J -j9iKMX|~uz%+qk#G(;n#CZ`~4j2w-x(|9S9Eah31gc-)$l+9#<QI_UliY&b&)tY39o;qQk?2ujoIn0o -nP2NU6c%`Y$-t8v5jR;XQ0Hsp+TgpWiyQ-a4CNlz!Z5~{Z63q$O{n6yeC=F_}@II#r)8;%v3O1Q9HdP -|KdS#2-K0S6y9jitiyFOHIQ(kJ^$Oe&|4Q;nK!JL;f+gm4mcC~@)#Z>q8dKIsvl}#!ueeSH+<c(CD_S -|BC4ehGKFkw<$39&;pL$tlh$baT)-S{=*n~Ibxc9YJwQC=JZaBAks<k4aS1F-@QtmR2~li$ca8EM?SJ -gIQtifa3jRaGCRlrN@J%XurHs(X?#r*0l14rje1Zo{rIFeXjpVJX#|QO$1|TZ;x^iUE_V_wf9)Dwwfn -u2Zo?^c{x?6zPFUgJoo7_^9H91aty8QzE#@*A&2*fLjGXZ5GA|?>ot%4C;KOD!D{gCR>_{$8v9TFk~J -WW=gLxS(YJl(60odlEuCogtP(&Cf}8ispXLjF;N#Bk02)N*#VPBOx7^Y&v0`#VdrPy*l{j~xr`cL=Rw -Ua?F|NLcBv?0kg0^BNY0~}<uXS^+ztI+k6>l_6gI#lRSJWlT~Spb@^D6wp@mb0z<SKW$X>1r0<1BC>; -zK-0oIH__IbYsl7|5^dS+qOK!C-p+EJkf0xhs&obyx_1X#rCsApqUL4ZZ9j%>x(K=Lr6?J%+xUjqTwg -h00HYal3#iPe#<`x*$asJY-I_ZkSWrUbHeUjsp*z^vN3uYmxIS+#Xv1A%ujtG4cIAi(0Ti>><_2(XCN -v90?W2r>n+I<|FR0|6G9c5Lgu1_CTH?bz0R4I~dUa?G)<`x5lo?UDWxX1Tn~vNZEAKQ1IS_N`v&Myfv -PBHhPJk)(yVkz$9FmfR(6U0nvc-I>YmBHiwySo%aE1C0M@z5B|4+j}w#pRC@0ntX2m)8AS|@|{oM_n- -Qm;pg@{glFp;guYw8%RBGCMOX_cuoyu5-!8A7zJ7DrX<?uDhqB9WiQ|{o6qXdK*R4cZ%2kv^C}`Q|#j -ff(c3^GE5vY6VJk`f5l0_KD2LeXPZeNHZ<+Zz{mNpSZDu4?#P5;)WT&Nzjp=>54`|XX)&dn9e+bAjCg -KA$v_ODxou{$DKi4eGl>=kB99_t7g$5|ymd~ssYw(nD_i(F{@vR96_1&pM~dBsFry?AQzPg7NI8;xW2 -wmrP-@XGc!pg)iDT^t^AQbM>W_QpU!`wHd@Y?l?v&-6sTMS)xxo2!;L_)tNpU$f|O)mTSh7u-f}Z?v} ->3f_0jN7-=yQ}$W-{D`I_SeM#Ge*1G<d8q#Q-hch)-@Oj=<rAqnDWdJ-dE$F(X1k`o>iqy;Z<RVcL=v -{7;jsx`Xum7r9{UXN$1{}&8Pi*s$^kU0dQ`ZC{KGCwcQPvuhIe&yWtg_EcpU4$0LLn5j}=hwx))U|_= -<H+WozIET*C;4mt*Dah`OmccT}v5ZQnEL8=R^`*q3VHcD`Ar-99F3ln2alKp{mgOR;a#G<M{DwvmflW -WNk1ARyQ?+J=RMc%n$q-5j7WVMlhwC^4oqh4DB_gl`LIZlpSn+~!*9lsNF85O{jD9HCG%8%$=iebj8F -^RJ<%FS5NPLgmK9=^a5=tX2T?oNHE3$FL5%kX&c!K3SfV3@~sFM2TGKmn!tt91|j&{CyvNfMZ6YL^9E -^;+$n*xyaVJ>wSD7>^nR{SXRupOF7JKEKf0^8&k_Zms+`9@tnWpI6$%84O~WO;iJ&bS|~m-AKG|js`z -sl=ZtU@E^c|)T@Wc)@?Mc$D<V5;6&DrVEmAmBLheo0Ds$+3(zPwnvUj_>RL@D=CiTvbUF2Itj`*J05- -wfL3XnGJn1>ADUUQ;k&AHW!33^P%$Coyn^!U;oneSV<_KL+@Yx4UC@uDN*m$E|k=!S4a4EPn5$Frht% -D<G8$}1(u_{b%_+wqu$(#*?gjg;FhF!hbK1(6ShS?)Z>RFRtM+pR1%>C%KrEOP?XwZDj=9MfeZWG=3^ -NDjB)dX~Y79!f3srh{Ui>ZPdoIv3L?Hxb6ZJW^vPgPWR;xw4HrT|M8(;!es$^q#<J1K3%_`y3MdgW?8 -}k#~x}D8YhuA>G(e(J%<_7H?Py%~u|0k59~0twKX%&;9xiK+7mOz7zcko2FsYRth<uGFPQkwW2$2J{2 -(7f~Gq6>=^3ZZ%vad%W9mB8rl^+<g&fYPp2z|?b{5rPe$=fE<1vHmEbo}yTBSwRDXogd5!euH@PV8H9 -1*X@zdSNj~zB?LufaO)#&$H1rDKX5fJWNtl~5*l#J#H<x~%ku@Apww*gYM0~J<rSW!_=((gU_9(GUrq -_yy^C7)S12lXyXVn~bV@FsL?1U8nL_<|lEHkGVvW<GUnU7Ps7WcjYMacoDWq8*gd?qCq~Nlx`08E>~w -8D7`Du)<M;Qejw$P4w!S%s~OT8_<Am9sDpgJa^|j#P>b5j#u-1m9~ya`-6Gs)8B?4^XRW~-tP@YZKDc -mV(<o7Fnf8C9aRdok3cProfVCjX3?77kYubmW1C?Is!!E$#0R_jZKoJim~&yoZ#?dymQ-PTQaNVvKn4 -A|sJ>L!U1NMkoOX?opk9m|WygV=bvrfism$ao`k4HLAC;qQ8ZJ^zCvYxZY(OQtzt<(eQDrcCW1*gfk> -=BCH?F)-u47=6Md>ocd=;tViC1H7FjCGLO!XIt+S-Mfl`a-iyWDSJbuem9d~@gcQnwk#5>4T4?|ksS1 -4d9W#=r;Xqel4Xe8TXG)*VIF{Pz(V4L?*{E6p^PYjcaKsk?Yt`+Sd`;`5sL$INKABE@!}Q;Yb!x!?j& -eA34Cjtcun?2a$n7x(N4b5<z5&DD>U$>$|bH{Zok;d>pgrs`NGemSWv{xlcEhpN1WhM$!uKkgudLM5O -}47<3f?=`PRrfMHu+i}4|f@zWu*+2Is<eK;4#*gDtE!v4zcBw>_lCDj^OkuSmtigHz2WtC*J$!F=#_p -IpVJ~Iwb64z0vx|~8U4^`bWZDtkZufm-4;GW2koh9qq1OQ2QytiVPs$DbWiVmzxW26K4QF1{ao8Kpyi -PT)H4ty?7no3Iozj~Q@%Qu+kf#nc!+?}O>~+Mb*LEV!l$rIXgN~RD8r{GL&HG46d~4RLi%W}Wg!V%OZ -|>RrBS`*-b<V)~rbnD_3T3r7#(R%~e^{bOwwqD{_v7{5o96Y60{k&e##$t9Y&bqbxPcOm<1>EK@fp9X -`24Vtv`p`kbrvqAibi}jac*Be96dff*K^GgLS1YWDPCyu_q(Xrh?Rt6f%@rNx7s8wJ9y?Y#Ew0hr*>l -y!pR2y6|kLrK+6CJ+z_+R?&c`(o?s$<?^T+=au-AG5&Pz*g7^n`NwDdN7(~T;c=L-u{~LR5H%YTC6xM -$Qt2=YQ5-&l75cCn^>5Z<Yk|ij-KmKQAVvjv|S{h#_fJ_m)Yoh`nEcCklhPn}_AXDgsek{I$+}iE6Yi -K}&G3TOJCxV~KS*<^*VNuY~R0a*aG>{n#`wet*`OwJ_zHr5QDPr9#`sS9l(-g`&O~*4U)-bt;2Z22Li -0{SG8yQRSFJd-E?c(?E@H+(p<QuoYcmkj{AdPx88r&?JtEQ2r!%r1T3_L+g@l5~Gl<1*Ch+r0-N}26w -zh2lu@&BzDPQc07-IONU0Cj;J?f_hZDC*sRI{PCG>Vz4SJ1Q{-{znnWO^MC%qq!c?q47~M2S1OAJNPM -207reYk}pq(%aaV<lipo^oD<16r*F&JC!MYO%VpIMF$MhNTt!p6&r?p=ys`NGhc&qt-0A}~NAUY?qZD -gQV^@IxC$3hxzx*;!t4edk(d=rd)iRx6Y-0o)`O$}eL8T#V3v6Dt<Bl-IQvovs{_H1Q6f)x*j+E}GbT -y)nmCDlC5;3dLPv0j{sp>QN#G=L1bl<qSX@`9VL#^7aD+em=x^lqn*YW@Bvpp4mtfU*@dP#RiB~Sfxh -bPsd9Mqs$n&-g^s$X@NgugQHj$6ld`xF-w_+m(T)yHZLVP9-yc~Z~%P%OZ|o4)Qxagme3fo%={ZU!38 -KUz=ZU2wlXGcFnike{=D8}ex>g4J51ZVwj)h`BzEdBa&BF>jhN9o-v7TlAM2f&kq;2<TEE2)1FA1cBH -5CmV>2{_7G+o|bPAKI2CVp$Kov;cI-b2OD25)HLUsoW8tZT5~4j=bQ8{SfwfW@toedfs!3Ta=DgsYTJ -~Py5W-E1lVsAUmc%1a2#3|8#se?1WJWJTAh0`j-y>3<=(N$uk=fQzrl8jR)@JqzkjDw;31ZC{Z{~v&I -c`*$ozA?W4J%ck0mPoFzXm5cyWoTe=yo^l{*O!Gdcau3g7?G5w~sXOx<?G2lV^eWlaPbCHGZlaix!G` -nrSP=Z)0<wXWj8kLbN=4+rT@;7V}D>%D!Ma+vA@G=^3M2k<@Nf#;%4SeTUuhp12dry7o59MyAFsiG{s -^UHNQVZ=Y9sg(aNi@J+;o)R!6mde$kt|o|bH~?{VYsd&|)p4vX^bCd{88;Qa|co7?w_aqK5JDW`# -P6(RX1pT9yxZED7=P1dDXgMDJ7-TH4(O9KQH00008031s8R%t{HPLcrt03HMY03iSX0B~t=FJE?LZe( -wAFLG&PXfI=LY;SU3baH8MY-MyVaCxOuyKcfj5bXUGBc}n$aU3EVq(lJ<x)g*iiiE*yW69iE=Ouw4{y -n#6f=xjliko}w%+8F~snKijuFO@2d|hh8c#7AQ%r<2~0o>ww-m-|R3S(VpGc&op<4#l79eA*x@B6bA! -B7$)GejyttP(7W4PmJ*w<5(Abc)!XEmLR_o`YJ<0J-8Xo+%{_#6BPbYxMekm{?`xfKuw(oFON2^DC_A -I)jeRgkC_p;>XhHk__+MDWMcA+IA``(k`waP_d~KITB~Y;1$)T!F7JZKYo6;#k-;rbqwPapbPIFLfv} -jjZsMbtG(nF^|pt79faFDU$VO>)?|yzVrM6zR^W6pLaNO==FmG8O<n)0LCGgH7%Jhe;Q=VjLd@sBw7Z -R>pm!J8EW7@E9=03)-M0{m^+QnmwyV@1x)&WQ@lfO+lr+ZO=)R<djyXVkc|FTxtks+4YEQ788C{oFSP -;L<#6@n_Z-0vEo2D3o<yC$VURhr))h^PFX^Hq(gtiPfGT32sEN_kuc075XP)h>@6aWAK2ml;P_Ew%uQ -t^}r007$?000{R003}la4%nWWo~3|axZdeV`wj9Z)|mKZgVbhd8JufZ`(E$e)q2+JQScB#cf^<s6fzc -z=m}jy1W^Nz*w}+R=0^%o3!YE-#NU9q%KZ|`5`fN4nLmzIiinUQ;|bcmi(YZQ%fSMw&@fp_>uLcD#Ss -pj>sbv?^M&21IOXaL~UqI%R8o;&XIt(I&lR%3|&37qCPq59bl&9SD><olBeW%Az}Szi|4a4CHH+>@|D -@SVWl|LZs#p7QuFTvSLdd%TnCW6DY@f&Z<eY1Vz6aOKJvOS$KF4++^s)y391HAssq(RF#W(XRGi7a8_ -xP*mKCoZLd%LGQ1>shOx>3|0lX6BvHS|<aoqQ~a0LFShUf4dWwxYGeftCkbkyI>@`HE;F;}ZY$)p6q% -f6~54T;HiMc}huukVCxOZG&%!6e|>n$(;rj0fDgS!w3m?j+4N{Dl0}IdK;ocAsp?ZT&>*zIp&5n<M!s -4(E8Qs1IeY?F80MHUs`wQK&PLAto9d699LA<`9!obiA-EfU4l3l@*vf@<&s1q8h?__)~BNF})#oCXyu -*kij4297QLdiH>%WIq<Wt>Fa_Vcv;FApT14WO`r^aY#DIU2S}U<^Jhb_!sFIsUzSF*81ffZ%0OoRPY; -qz0dKpG)hCWFgiVG^if?>4<07iz$&aFwY7X2aA!M~ACZU@aQ63tlU_~MM&){cuW;H4KQ6a4pr?W~fo~ -l`L)#Q55^w_@@>s&CJbM+2#M$<`A@QdiCa!`n_8C|}xvgd@Z@#J+%)*5)NgJ^w#ROa0}86xTkUu-?R6 -i!Mg$Ybg<bv}j+6C%EMNoEt$BpaMV@?6wH<vAUoB`=TZTnc*R-BK>@Nu~u&$8o=%RwQ6GA?%r7r*Ucq -Cqj-+!A;0-33?NV+9_!qzDvX~3YU1Im|0@dt`7ta8pc#$?U8`l`7h>7$n`tD+(u5>gf%TACA2acJ_0} -Q_DQ_Ol&{Q~GbXtTlQ|#7WLr)$Yvd78=X_>N9FwB-<UHw23k@i>)2AK4W7|j(3>Q&y2x+w1c9#HyP -ET9)$RI)U;<D0m*Y)6odu4Fgt_pU^^Lp;%=rx%I~71vrHQc7@CJq*i^!!7vo{W+7?zpJS1U`chC}ZJG -e}8omj%w&oZW($n9vT@zEI$Gvj`pLmAYb*IPIK;cQ>e$Zp0$$Q~*~#E}RoU^-&;fd`aSw{*fGCj;0B5 -er~oR_Iz|>kaJt;TxP+H!3QBBQaIq`JjWiZBrA%DalQ*N{NkZTlzMA-Lk`H8fKqQSDm4`Ps)ltQrvG* -JtGium)6!#o8egu2M)vmc&7&(TS0?i8wVecYcur#^9BlC@;a<8iH~ZSw)4tQqQD!>r5m8m_}NG|_4Wv -h9!3!uW@mzGimI=k@$R#Z^(Aa6IRkOg4--PNC$C2qaujbTOg(&)2`Y}H(Sf1Kx9A|>DRh<%ZC1ag7&i -_@aNK(Lu`)P8Eju&fJWeZjjOF8VrUiWy?bHmR-((UPWu!U?cG7W*FJ`XE?*iH1yos!Yb`RGRTnq<b$m ->Rj0?w&4fO{3~PNr&3W!o9JJ-N!r%~X-D`8t?6Jn1S<sB0K>#>z~Mf>S;kV0V2p)>Lbjd!>eRll`1br -uD+#x3eY^;GD-f3oV%hCEEe+9?gMH(g-g!-=18f?dF&v_-6R$g>b4}ErDSdSl){ESlsHcpEa1iirC;A -LN082Qf-|D%VFcvd$WvO-z-b_&~f&8mii=kSxob9r(t8~&l|u1=$D!oBx|(&Cv0A%fr*Egx<X431X_= -TP8O6`r|43mO=TKI^C(v?r0jy3jgIg>f#aIbQgh#tnX8V?sS^dYEjA0=aH_ARSSz{fz}bD*LmPrs&Wj -Vz^wgikxPC?sCgu@~8$|t7>V<QK*K~6s^~4d6oA?<uW;!%`T~KHMaTQMyu`4fFe8#3mdYqRHBh|>6Kg -@$qgYN5DlsuOE9hr%J6MmaR$yrB}X*o0iP|BCGavaL3(QwjrUr_XoEW6>%y`8}(&(q1NQ^~aj8^y|DQ -j>jUp*H$HK++@``wJ>QU91n-!tIEG&19BuUJwYgP?mRog1lHO$HU-rhvR3th&@}H2TxPKxWcCS>T=Iq -1~$S(V{0%dX2H!dz44aIFTI?^7&Q1klWXx*dO0Tl+n{<;M*Qd^IDQC#p-6I`OTS4C_t4Rs)}(Rl-tMO -%Hyz0HxruyUS@WhJF`2uyETG4>xV7}#Dd{C<nm3CvgTan$pauA!N-tbWW;6F9{+bDIF7$ljD>JNDp#W -0fVGb4kZL0G&6eLM6&A$denlTLI)<VZKZ9ICQ8Ke8Mg{c(&?zUT)Z(}DLb?9sO<E?9&x>k6#S_!<#s9 -DAH9EYiOo>vf|dA{D_oYHpeRIx4eP!RG9H<u0eCyPcJo4cQGGIy^*?VHI_*bq6czl$H_yZo^>Q(sE-F -BQD*EBx7sQweyyppD$%%TFPoZzXmDcNgs0@N0;MP2K%kX0JQ#jhY!LQgeqE&KK_Dr0s-$Bi2|ksq3}u -!KveWHymG{M>AW;VK~_v9XAX2FHlPZ1QY-O00;maO7>O`7P%Q&RR92zg8={=0001RX>c!Jc4cm4Z*nh -kX=7+FV{dMAZ){~QaCz;$>vkJQk}&vRPf-n@T>&x#U2J#za171R5^bwTBDEydo?f+1u?Q5%vcM{IRY4 -@1M|1We_6ffy`7$n<8F{G!NME{l);LEZP?Z^Zi;Rqjj7xE`s_Hf=%4U_%+It24tQ!4owanT@RbS}e&9 -!;ep4WLcFUm9h;2+E4^xmSbE|TnYmhi*fZ=a9V@20J@S$mPU=hd9b%(FI|EwiS{8(r2s8Yhb)U)q9sT -U_L#6#k~Si*-3`t7>V0T-MpDp?7C_yHe2f8~#b}&fANnevvn`Y{l?+CiJVK!4C1eHm{wwie_2NxZ*|D -p6lncyjapx+3}02tlFw9X8h`UWrzM<on7R|>d82HUCq}^{(h`xEkDg>AK<5{rsiDN8{SLQ=jFi|{~rJ -K&0hNahrQ?j`EvhzdbC?!)0gMja+#ejbNcn7n6>onr5cod{;FvB`Ri;24bhK%)w}uedZmjUtlFX~vn4 -m1U$v$Swh#^hzr8J0Y5F?Lpn=gn8qBI#P128fIj`zTUChoWX}Ml5(?zi~v$p^C)vNTom#_Bj-76M=f0 -K`S-6(izQ7)?F*)$n`F;2c7?I8Hb6up9FQ(aBo)N1-?mHJk%OIVn6cAn2Zz~JxY%O)2PWWNYns>Ya?& -~D?-J<S?5VIG*K%#)x=dNoRt&yrQ0on2%*Nm(VcN{x;uXJYWPuB%#YiuOFe$Qc(WX?{`tRHSvTw&={v -miyEcy@Ho1Y~;+K_Va`Nqk~s_=?}-R)dU|LzTQ0^n}<h#`JSI?7_cU)gLW_R6a9W!ovCKad0rcw#^#R -Is15EVud1^{EX38aWpP#-S^+=C^yjr86%#d+l>z%4ejHslZGJIM6wq>>)@P@tWZBl$(w4=a{1WFzzuJ -Qzf63}1D_eelUYwn)w$EEThJA&OKiJ3P<S<{=;sMvZ$m$R4m9E6okTv`*rPsP_o;B;*tk`S%d6AdxIN -^6ZkuYU?xmVel?bRFjF-~X_@P{r{=WTm!is7%ZB2$0?Svf~k*Ch!<O`p~7OJQ^J`#L{UxUSzG;xB&H% -&JxHjy1(+=6#*#rs@&?(y#I}7^rziKlRJ@+HU(J_%WtGmiSSbxl>3ZiCT?|LeZoYw}~$DV(+`%x37-V -<GsVzFZXv}rN=+)z1~xR6@u^m*PDaGWBufq>mNgP1M|vs7O319{}=sn+QOP+`g5d?vJXhI9HJ~}%p|= -m6oI)k^yEkSsc^Qbmic#i)+$tJM1^JXF}GChV=i7btt#Evd4XT|?)~}go4=}or+N~eAG~_|djBYyCQq -Jx6})}*a(@rsJ$`)e$Cvvr4t|7Rngf_Lh;74BGMy#^?(5**J+T>JUQ`Xe+uyxIy8lj{{o`Z+6E}GO-h -8|F=XKK-i)-5Gsu~l~cY}Gp$kxktpo%W@1^%5WEXiy5Rzp+pWubPaf^wkf<ziV~hF})ea*lQDY6XAu< -+4~cMFZazfvM_TRlj!+&-Y}%dVZdjXM6@An{e;m{()Mz-Tm+P6j)tgsE)3-zNT{N(eaCy`*=F-AE-ib -I;CmTDy}F^Cqy4rh5TxkuN1|>KWawel^?rs58fU}09WgFJIGG;Cobr{!@~$@b;@i9+Nu8Z-aUAx{vGb -^z6OLDIs+Sfy%~ETMo#rq6@2sdSVQTnrrL!)4LE&p2<_fr2L~StMe_zb@|c+Hz5M=%<Mi8?$8_ipo__ -U5JW@6kdlD^mbiBL&V)yXH_}(XjKD=jNsI!iEgrVh_m@^p+21ms|@}ye8Ii6^0HBry+VS&qH-k$F$2D -H`X6(OOgy3&lAQDu_*GlkF1eXI_}&vV!qL3Mf@slP1ByrIVL{fA+^-Qf_I*O>nE??jP<Bu(kWppt2t5 -N~gX)2PAjgcIY>1p_eSSmtNh>{^q?o#a&U+q#bbZn4bHuru@`;THy$n&32?)z?K?T&yqb%-X}&*37PA -HM6UYHPu<Gm)7n4alKX(&x@bcih)vPlguE(IH}aD`m$*9<hx9<qXuMN&MJ_zb`nKNHMl)~h)XMRNq0Y -j5I-1X05&O87*Hoeb#l~g1I&sBGtyvwA_~1@*!_17&3=z$vCK7iewlpCmTIWL$kxR?#|4T^RK<i_KzC -`m4_?3B5`I~wAPNfbuo?gqXIDdgQ8Z8u#YU7G0300qc4z4WE&@vS&m4rYt|<ari{$}!a09r#68puR<> -k5Js0b8vQbALHnqc=Eh-%dhKrHbeis4%+@%0*isUudc_^c?>s$5<Vn|!$#B@dq=!tNNEML~ZK;tHUx; -7F6^yjm~k$y#A50!aXf=?h9bx#C?)wFYehuqPUYCxmU6MSDIRtlPz4bkFohagd@X1D6I3oL(Ig_zdf4 -;#N_~$vsn&iZ!+>d_3AFfM8E$Gv<4x3%iwp*Kr=GgS5;q({$)Q9{GS&xw#U+71f+ltNQl@Ct>8zBUiI -?wO)Z1#0sDQ#LAiv>{ljY#E2CjVrWJN(L*yhwt}FUx2R;v<@S{fb)hO9G-e|hOGi979yQqr$Pf$<4sO -nkwFQ;9Q+-Vn?$&r7Z5fC_Z{5v1?JXi2k=$mi@sak-B(g;`LVI|u2nf)EqA5y60m@lEM0By88@ZcQ?- -PTK3a)vkkxe~Q--nOKgyns$8929U(R}ZNtb4N=vfJ;Cka>S>gv;d=RQ}cjQ*V}yKy^WwcmCP~mbcDEs -9a6~<!?PO&4$_t)s$3l&G+6VgRQp3df~}C<*nJ*)x5W#ssgj&is6H*a4Ne+d_3XuQ?3{vwk`wU+(z&T -s5JEkp;z0UD}<VO7LSEkvNg2;Jj5fJH-<|!?D@P~pLvHf?T;Zewv+7Vm-<1ID;D)sG01jLCRsVR`)IV -`)c<e)*azTR9MZH)FK90l&_UsT9>v<Q9<+SCAcC>qdPQ0z3XXB!wqFrODzPMtl6RQz=fB2$%iR)e4R8 -B&O>><q1e3G;^H|UX_**@53Ubm`$;k<9%9E2#?CEcYs1Etq77^!G!QoSfyCbIE&UZu6yAzGcR;d0jvt -)OpEy03sbI|yBaPL3DJ2TQ19Tv0m=ULMZ^_`d1ckL<wr$51MYI~lws(aVTX`bANTZa3vCo(fjp8Rgmj -<rl_OwvIdBaT;N+MxjhN?zSF^<Bx!?{}hCZ5r-mGU*#-(7@*5HtQ8A;~PiwrmtP1!!*h?Z@9Ylj@eRb -NJb|0x0&GVsk?`H1M2i`#{XHei}%vbg3;pS^W^ke&%@-Noe9?Z(@F&MG&TrAs{n0)VzS0gp)M+0E<vY -}b?OxF$#JNr^p!Q=FSuP9>szJwsx7)smiKy7|4I)O`g)PG6<oRO!FB7<D88Kq#;aJ+pTeSYdDN!CMbS -l8!d)C|Rrz8ezkF3_b`M|(T!%eymY3>>qJ*U)8laRNHX{!=in3@GPH0q67>YC&^!m8WE<4EtWQ_&z@2 -`$$W<B)G+umG*9fw|#;oxuOAbB9VXy=};3F%ZYlXb`!scK>x#1+(9Cki#Q<gECZs|~kUC^GNwCTGU5& -JJ2Oyu<$tevFeVKDw^$sTG;cl$xCqDEHl!dVJ+R0#WSx7n*c;&h3=T9btQWr4JC>qYJgmQ-x<!eHT9A -C#D1_DQOyMt^m99a(#hlITRBx=HYqb4J|Q49bSzY*eFs6?<xV7zvaw|KX<nh?2sAnveuy*t6D7>kPTH -r5Lh~1kMca(0phW9^51AyqTg!r#V}8B@aIa*RZ!MV&L_RgVrbH>m3oRd*cCS^bgavcR_k`PZYO$3JzL -pd_)Y}W%}sSB?>)_n(EkFdb@ac~K3=182bf2rP7gX-oSf!oitFH^g_=ny>@;wN1ME;t=2x>6ju+8UAl -dJ}&6?cMTeUBp3LoJn#guo8dZ14wU}-w_Ua$<Y`K|TQ;tn2cOYG3iFwb%!C8(Kp7~Ajj)<ac9PlDp8% -!-BEIt%XZ?y57m5OPkYKy#oMF|mL^&5(V}3cQF<fT>yf$5aAq)l3Esxab1w9-3W?77n~s#mVM3K${Bh -xWFzUtFOs~X|j2Ps(NI{L0fd)D1g0GK1M|mz>YS{D9ZD^E?T;kQ%emOa^2@=?|vhzk0~|azT#HYOa9i -s{p3vgdr;5GYTcaEWDITV|3i188FRJbAzKy!4V|{YI$&MzgS}L9pI(;j78r*HR-3V{V?HD3XWk)XF&{ -V%O`UBqG;L}Odg3jmeXCB*57C!*Ju}FlY$}b&h9jU!Y-uL7i1^5@PQ3++iC^58*jeJ2J~aIsKrU+MA; -k4g*NX)*?ElkHU(LGiRs0k{g_1WX%WC!^)FRUyF}tfd-QZy3seHHdJ^(P!m)jR+dp?DjfefJ9q<TRmR --g+s3Wp(q1Cr9$3EX?HQmQo6??*xHd@0+Yt#i93uue}4Ojp8*<?DV%)i?mV|0a!MK8Fl!)QSCo&j$Hj -iD^rEn3r^QpOs0rR7+K6Ef^D$spb~ckqX|HJVsCD^J1Q-vvu86HPN#%(U2W$?5U=8FzBUj8;F}|122W -lFOP_krRtRDa)|wy;{U;7;LXn5n2&gxQGehMguTR0;%g{)yoOAefjdSZk+HjqQ(nD3-KbDD4E<hI-2B -M)#8Xaa<8n23HDJ4aI}Ub)nrS>R07F2#g!45?UXU?o1K{Ajt8(Ru7_zmm=+PlHjn={qzrAe>9<wc%B; -1cYnPLK_Nyut{UsvnZP_8bXnM;K{&a-F96FNG@(|3<u0_t2?v+;A+1)=OB73Gt+gM9+&cql536$O}22 -h!dqb{ac0B|MJJ9&j3iyAwrJQfg_4e03<~=*pmh_xEUItOmFukX&krJMVww>F-QY-)y*3?M;XT);YVq -GfZozPZ&gYbFv&~AK(B<&fuwQ{n&^b8z>?+k<^IOV^WACl&HQ%f*l&R!X;ksK?zf$Ll(8N2-|EdAy_D -ZY)D6qATi&mr{+QnK+woQlS2n`gEVJRESEx-ZdPhhU8)1Kwprcd9ti_?Km%}j+fFu>&LOI(bQN*REl> -(o|3|9}G(}d?o8L{wgQ8VSJ`j*Uu=f!}*M34VR@W&pMa}Op7<Z?d0$q#53ZUv$d)546_bS3?XAlk#7S -cO}v5yhwo+0<ZG|M{H=uoYXng>{PXBgZIj>D_M(XW0Z5LZtNC9pqAMRQQIhR17kCm64i$z(G2ej%ZH| -6VY`^L$p-Sz9st%Y><mVl;T8Q)%KBB}@Mt8e+y_7ltmycDyO*B9!m#qQvIRHTJE_k7}2zX`nVV)!usc -5T=z3kaVCw?vMalTt?hu_Hy_jgPBHG)#Sm050~aAc3Yf67VjkmB-jMS0vN@1O31z;-JPm`!h(nk8!yU -x;-Og(#@MuI(x29=YrIJ`Ce)o*t<t3WGQSTx+jUu@w<_2={FxvD6PPPNAB?`(`0v06oG%Mi@LZvsYKY -hwa%p;3W*7NG)v=<?=d||h$O8^3s6XEE$7${1HPESSVmR8Ok>)&K!gl34lQcyZB2B?0T9r;yYG5IF>c -Lr6oxx>HrO<K!6QE@8VE{o`GSo@cOjOtM^5byuV)uCW+ryX7|MMt4e7k@A^7UT&m%YQImk0X;rwVsXi -Io5M>;LN|u)Ns}gx@20&NM5S6ZF<l!}b>h0RFv|GAHU9Y#Z8(FlZ<~?a+p<Vo>4b8=L|LFNwZi^#EK( -=*E8d@4&dBH&lA`*Q4XT*TN|ZE~(~OJ@0g7!ctGa`r`(Vs8&r&%qQyj@a-Np&E?n=$1BB7h3GhyIz3J -IcVDCL;SG5is$HXyh9tcVl=t))aKx!MQ55N-8IC^ncrhJgoPt-?OikL*1TB~>;eox|r&0+%Wpih2UfZ -m(R>cxG)J~@jxOwhKmrr=trG&$%21E95Ocx40s``2gEY3*OQ*7frztVU7j}1Fcl>G;Vg~Q!%pWCj#sj -H8Q+i#L{^-2?Cx`IL`N-=M<ylHIL|HF&Npb0V;bQlzmA8>eB9A04YAx@l*0`8%sP9-H4qK4C6^fL=jN -(iVZv>eChigDx<YL=DOQjAO}2!KQ4)jD2Ob1;$?mSw0x0W5<mTPjhMMA9)PycI6j7pHmMC5;%EQ7f{p -xk`4m8U}SCk@2|-54E*;_ZhBk!LG!D=O4tKjR%(RzsEP7ozUpG>jKn$1fDIcQ?<uB;p&5;vp`%+q7Us -}uyM!hzERSub@yeuVUF%?)i;{$xjNZqZR)x?3a&zL_!n4Cdp-W>c|CGt+JhS~9%ie*o0E^N@60N=X)v -Ht&3(+5!tg<zZwp{!<2DnD>ZeS!hv)z<nC4@&*MN`?T!KyI$i(crTG!Sq(%B<<f#==Hi9OIxPR8&Xj; -@mv*y!qqJ*7@gCdsQj`v{I|@FrWg6_f*RRehxi7kYxKp5?}WGa34BIARRsp7&_Z?t`Yzi~~^26!6CCE -V;pl)S~s+?9pCQXPCFVO<y$6V%!BgyTK(l_oA@e%x!uit0@AU2OVLQ@9RKQEn4y#>1+5XZ?Po$aVC7i -CW@6sO{g{`bebV2Thk8R=?~dhK!DyY%`eu{Qc<GoW5PKy?naJ5H%_Jwb{yzo9}ywnDprnPD#7BMZft- -T24{aDgeNE9l&_#O-Gcx{g<>W8$Ad9+hA$7?vCv~y%3Z3)a>qQCJv%S!0<IV;w*l&rZQ<|hA~!Pefo< -el^&roX3xSQT=!+5_6?@EfQGK1ZrrZI+a2(<7{xQ4TOuLKXSj{#dY`lXOTwnR^o6uI`cBKJHhUQYoMO -4Bd1!1*XUgH-tHNh1JLh9QbWt9>k-MlI1bP6wt7rN6{Y_ro8-1@`m+c%64sx}(1`<crdqzo#<l?{*sp -W=Ky5vRBkuji3nB9MyiGP$Vd0<UM%<KGmj*3==eHr7|292N;efvHo(eb{_FJ0V8|_c;gwC%rh#eq-AV -VW-X)J16=yriv$BdLcXjF@jMDnw`bzH5@$~futWP^ig;^o4Y`Q#^uKP@EzdQ5Ma*$3k>=&#=7Qp_8D; -RB5RA8EezsWPyZp(6vkECW{OqeGmRrqM==<@pz6&D9}LZ==2j5gZJXwRa>ypp^iK&mwb$@A<J0lFh9Z -m(MAM?US_<Q}LeJgqFX6<{FzD2v&dtplQuqL*GV1FBCq{jrF+9@yQR{SD10~!p58nMB|Mfl@M3x$u6) -z}|(?5nHD~Pc>yl*$wxV*2WXyzpDqiWU{%aH7Bk*BBCRiweg9A-<Ad3de;bZ~;^Re9e8`%<ii$B#SeI -upcjXrm*kWz&z{6@2cj!&$C<Nca{W;bd^nrmIg3cs|*ONPmUDhQf!DOBCf%W8jq4rQ7dFpYPUR(C#UM -UCtF#tk2Ok#D2tfO=v_<1)k>R$D*#v9UYF4b^%*ASIvaqZ*QpgK-%nCAw`JBo>b1!q)>7g3r*UX^krk -I6dPO3m%ZwTo^tgLL8BuQh+mvVfh|i5-g{#W!((?@AF?H_z1fD}F%w2$W4nL=>nUKoJU}b;5DM~@T|n -63(1~#nK<EpH;u&1_S>ZUbA#jB^&ZK6MwD#_65djkUm9BB=_z&XROIQ}bLEHCEpXQ=}GQMGChHSWsC{ -%rZ^t^^MaYJoB!E|5>+`C~^NZcTBoD3rUbMSrOohzuW@**-01)cK)Ms3;#d<t}oO44xwD^Acu=$f2%R -b4Ertc}#OG|<!wh@o3cTxWcyP5|;xw!{)74mdQ|jpWdamO~#kz<(J4por7;`mK{pv8kzHRi0!UZ?4Lq -jB|0OnsN0Vj{ULoN_Ncy8^m28p)qP_03WUfdwYFh-EVdG;i_pk&|wlec;X;522~CDki=A>5aGR7eV!L -*MLQgYoq~_{=mje-uWHQN)wc`q!F0rd^k>TrAkjTt+8wTEvM`op|5Oo_u8E@fbQ`A0crVL&!kV|4B?B -cI5Yxk9BLhzjt#=Es1UqGV@4igCf{O4|qQo^NnjU+%1)X=wc`*7TrI4|7B>rAt2|4W2RBL6kw=V+|HI -L0_jB|Cpu<_k;=DoP9@89IT8#}(Ci$&74iMQCia^va^n>>t7tsFt$#_QQ^u}xNJCt1Jq8#k1*nRpYqx -M5YXQ_C`XD5fXCjc&x~=LH+^UU%^0;s*J>U&T|{d%-Nsp<)VbIKcvN?t`H90_||&kNbu+qf_E!y*VUJ -@059E2a%mylOE$Zr<^xtG)Hg?Xz^nUQ1p;@w|qD3Gee7la_;Hh$(O+@f+q`l)9JhU!&mCb&^N&s5yq! -Bkhn{k(3lmttf}Tf$KiY6T&J3ab>9oFb?R}kV?lnLjyb$)7!Fw~Mj&viACkbs53Pxq8g|qz;Aj)3u5! -T><->}ilCEI05_ovpX=HAc&i=7rUZD4l{x0Yc()0lYp#$U~lOIXex@K6NB=RaLIF587vvd7(XuiHUHE -#og8QyVq9!Npa*qNk_QQ`b&znyJyoZhEsh9criIyNjW!df$wskK5GQmTLnb21!v_9A!LYR{3>?~5~l( -3s`j`=C6!KA{x~7q=!W(HcuvIWd5s=7aY>Nu#oA6|Loa=!TPmwVvb5;5cUUrTAj-jlSx_18RDM!14R1 -<R&C!e`r2E8*~{#1L3#ru|6Z}3@&fol+0!B*QAFEpC;mHfqNYY&&_9smUs9kE+N0J*1~&?0jW)%wQW6 -wpBOlOcAlysTow5o!K2Cf(sk9K#2c}bhk@E`9RAG0AxQHCU%^vB(>7<S#$ctBk}8O2Ebiw7H@alfBPP -$8Fy|1~P`lR3dgMuC^)O%wFIvVsl?}qEaxBDcWZO>I@3FrpWaVZ1qiD*n(F<yZ`{Fe1FHzX9F&V=3$4 -2RHRILiu@0<uhyX-tzA{O0A&V&$6Ljc>(ifB_1j~K^edKBeEozAgAj$_k;rbg;qgA24K8uy_~Z^6Bf+ -E+>-@_@7VpLP7ui#FkN%WN~$A1O)>!Iu^{)$14@x9b%Bc@|e*W1%Bo|Llr!b~Q9HYX7LJA#O(N6zyZF -2@_%QI%U^`L&$#scMgLQc`Xk|lVx@3c*yf01USWW4c#k?r(d2H?I0o%ZiR^O>F(#2UBs@XWa^uqU$4% -=V-Y(D>kTg_^(w2|0(RnX@X!-_J<&rZhQMwRq;b^tIf^e5pdb@Y7y?5df}?A%L=7f8MNn~VKuk6T{7h -KIga?~LN<W7r9-<?{BfPsGWVjM*pT#Kc#g5LgWFxVuBM+e??t6@tC;ZcOFTq(6I6M=F3z$9P@w$)vSI -B<rV2NNHh4+~F*pIW;XS0jBa)wZCwBrIz)(ysu0xMz@&d$_5gm^n1EXuz%0Vw1_0e9@OesYf2u}&xX_ -H%iikf0EEOBR70!gvnGUv9}VNq6vI3KQgabT~LDRR@6KM-cO(SuL|`9oUbBoeT`+X1TYgM9WjGEh6<V -^Q^W@8(+-lPzaA~cS*M%z0(0VkQGM65#ol9jH|xx2s8P3$9Cs)W-NIZKs9YLPrO8LKwKz26piQ>=}mu -}&n*TlrKm}^TB)By_#rkH1jq45A0O+RYDFd~S)(l#u$Po3?>xpk-L{LWGs6vD<=S=7>Ds|%84DPNwLO -{@p-FcN2t!z6J;2f7jQzXU`gg0Hwyg(RNZ=K`E&Aw&?a<wEBdT?;-M3JV1BU^@(t@itqkJwc*=(RPG< -|`lO*}d<j**TJohObrsiwy=3|d^g#zSx3*&;umv*FPuR|o)YgGGyIdj57|MD(J!`5{>B87BP?m(J-Xg -WJSb&qFY$VUI4^NL_vevIkoSA%m@}U@@Iydt>9*(^e~OT!#C1%$K-ytmPb%$!_vhoqsH<b>o{Pe~+<8 -m+FLQR(bXTEyb^^wYCD5rji?@v|%XImO}c<Jw0ZlX45DdH|v<Mt#IX;EB0fi&dXlvE3LHAo|)BJ0o8? -%j>Q%lb-m;_YLW4}o2RVLDlgnFLX?y-+FB>v+?4-%<l7=ieDx1=2&l=UqlKhJHw)gh6_N#SaW`~RhE> -!3F{^lMqz&T$a`)e2*uQxJy9Z6cXdD$W1oO4R3HFy}>+`MoIu8Mko#p3<gY})!z}UfeqC-FBawa5sH_ -w}y5_&LBNCyEUZ&OiCE`pi*QI`&7gT^ANkaS&dwxY-`z|aZ~&4H~@>3O7?g)o6myo;_lU#q>QBA%k}L -O6DUJL4qu1+>r^sx}Aq%w^^^;X6Tk)_ig{0Z*fKyLkBZU~{~GJnME7J)su5UYH)V8EO?Thn+w@uLb~1 -L!B7m>hO0Xes|1+&?Rk?7R<>i*q~yYgYw$UcAKVvJmzJ7JfowR;O2_X%`lQGhahl(tTD6<%pz8>?pWl -8<)zk(&Z<GrZ7+=-HDlLRF<kFw4J{KX>x)t?O`2X{p6@grklBQJIkB%~x-_TdK`~$E%i`2_-c#Rv##7 -C%;y`&{&S6H+)j6&NxU9H9qIQa|8Lbir*T67>L9;rap=4Gz<Vw)Q#w>1M<kWSkG(U4a*P%P?dp71Sfk -=7|>Wc3U4xjJQo(B!W7L9)f;<&8FT33?FOP!DqqJ}RO{l5g`>1KVAJ1DAw(K71$&4@-zG&FGUPDIVy+ -8F@y$3}|JZ6kn2*Io95Xw&#!T>MC?Kvf50?2_%a6IQ~XVHgzEbFU5QnY0L?2orySY4$=)(E7kVZv~qA -qFvL;Kg={SodX@s5<mu!QP(A6M}C!EK<-r27<qbwmcxTBT1{R)I!J(?F?XT(%w+`%B*#J{f{&;9EQ3h -JfEtQlQJVmxafs{W>x-(6u8_dRC^2=E@I4fjuMnX49SNsPEG3)>{fiR79(}Xb;|grV!GXRN6|{V?kb) -WB;0aWID67kI5EapbD|-gnHJ$8zVQ0~eKNOtS+Rwm9&Kw9Sa+JD|Tw-hUq)h4lwfINQ*;G8^67|9sao -@Q&CDX|5iCf;}dYL{M2fd*e_UhX6l4cHo3g};M88P!ye<`G)OUFvU_=07yNq(bzQzNn;&qBRxPp(b@7 -=kQ7X62-X)XF-KtrmQ3dZJAnsIeJzY~&m>wN1x<(7B-m9kuxzJ1vZ&=jY~IyRhM}ACHr#UkP|UUJ|Cv -=A5zIv#oChgVV%xWo)erDT0p~AzILSw?TZK40qKjRw%}V$op83`f+k_gkMJ3t2cFZs?Nb{3VUzpUeFi -J>uy>J#DoP!>dI3sw^6DWnV>uzUv$u058P`mVzzvnxrp||8FcsH_2;zCvk!LtZ)rh$ck9`h<*X@i3nS -RO8Nl`$zkZek3&(+HFnoyGe2?)84R{w&)vTI)J+B@HXz19+f>8GL<9k5|v=@4<c67%nC3b#f3Zs-KLi -sF1Cti$WvtsJTGEB-h;mLt#rDtej4iB;gB6q1{py!k~80gR@n;={Rtxt;ZOQGUOH<b+irexAMn}x3H0 ->|Cd8mgyryR{W`c*NQqoSo)DtsfR)%VQN_iI@sQxMt9v`OPQ*7Mlmj#o-#$NNFq-bHQ8no}8l5b>_eg -Ju4c|``4$jb(f`M;{7y`T{G{7i@5F7+dvdVnC>|34h}KmdK2H9JTyA>LE6JjX+cYoE3td_qliy8V#{U -UB_>>1XUTmic3%mSYqdv*K$B$DAV~*Cp%$FO@<0wJOoD|?j%4<E|9;EKOvOEkrnq^)RUgDMR1H!2wye -%bFv?i1C%i&M$QLca6>X5!%9P(D!Ps4mXV0F|$s=!RbabodUVwaE!G_T15*`-@W$-dscfw>s0_XFYKR -xi7OeXl(4MRS7cUnP)Fg0O{TYvw9n))jFv8tEzcaPo=!bYi<&X@#;{Ag2pU%gn#b8mfc0343UQBS((M -ht27W#&{vC*1J&A{P_aJD5tvLBH{a95C_RFR`322o~`(%!bp4q}uW$E3eygx;6qMc8a@)h&jM64kk#Q -C<hFLs3~TsOc7Fl!ht{au46SmoSc^s=C-|F6*Ib3qzww1w`C3%2p9{9ay@>?G5C#Qe5+;u!A*S`zM<P -hCzuhv5`ma>KpRlz>|iuAeRWCcHbk<UldW<S#6nOULBcqGtEP@1_eF$(52eKE07fr+Vf_jOz*b1p3nf -LTsjhL6eE{`j)26dbxG?I9x27DlB|792msq$>Z{GRNHb?^8?>$Ck-J#g0(-q+wtuf^TX?QzM@qck}P| -nVLtK6Kb4?m*mzex7ki~E$vvnSk=2ISpUKIzbZs0{%Do(b%;DTpou`f&j{+fQ?R=$)OkFr3JANO?Qu$ -q9yD#sbR=8L-JVY>N~o05h_2c9%_+=u7g1bG@jc--q(|lU3EAvFNr}`fyDHop(t<jCG*#j>aaTCe#B& -)wMbt<T~I;gUL2)*M7)V`wQO&$z;rX5!s|!6=ezMjp8;SxWc?@n?dk8jiue8Rwi7;sg&pQ9g0!_=skH -XLt88qWj{|>02HIVh=NZiUy0NggClIfwFP^jPbVHEDdVUMy|}@}z0@`%zEOo&G64?EhC-5KpbzGh@{) -jat6^9yh@VXX&Zt0E78iV%(d2o;k+UB%MdeZ>FK7}jM6|(li>Pt7bq}n!Xnq4~;gTV)hYJ*6P!wW{1? -3OTCn}F!$l<cbn%NgYak0EQHdhdY3Tt>xC}i0rLLKow*yV4r9OD@N2yJq=Iu9r;EMp9xfdu@XxBWzHW -QE&D-iEd1Ts;aOaZ`6gi`Ad<-{{Mf(^AP_enGX8Q~ckLeCMywG<+0uY}JCMKWIU$MA{f4{_rFu{=rQb -ay*cBx0p-X-M`PFPK0?<!s^GODNc)J(Ow$~n&HJ(S}5A%I`$~3cE+l{kD^Wk&LwVmJ*Z9MMgAT(NX3w -5Tg=>^PU041a6^krF@yV63&ukWH0Lv+=?WbvO&Iy*Wkbo8Gt}#`sHB+td?9Z<VP1tez`0|?ym8txQ09 -vZHlcu;X?uf)`UmAz?|PAe$I}@bj<Oh`Gc?Dc<wQwl;%wr(+ZuR9ZB=Z*-{cY^s)Cr=I$Vt-S9+P`dQ -j8#WA>b_HlwY;G@3IHZ*5Nk`-8a8EkOw+U;@)~3GSi%7B)qyhDPnn%mgsJ{p!TwY-teW*!MWYaCbDVN -ZJ;yadO4)$bWSZLG8{6<$Oyrv-|{DjQYo{hRaS=A=c~?0(phXMho(XU`(Un4HS{jThMk4SWgU~xIKmJ -YWo_f#)K3NWyT0lU#U_BBp9faRRX?R-Ug!3=O5LqW(%;_$C%wQbpg={I{=7f+?=1BaK;SmWD|Cfs1Kq -)HIQduwp3kQp!d|ZzS<WN+SKM~jY)CQG-@xK@Q}xHKWQimQ7=|Jqzr@!?2H(+p+&ll*A>LxrwE$Red1 -H~YBeDKT&hV?eB->rZ9A{9J7WAtAk3H=$gZ&G6|DZEIMb%Fw5b|B6R-eq<>d5m(gzmF1}k6~6U5la7) -o@EGKoM`m&>fi2*0!CdTuHiTe#Mkr_vlKsaHvkaOs89sU~5yT%Q$?$trJW6H9QQPdLqH2ricMkSM#u4 -9_N=&Rp$Xbx^>}vMCqL2Kvw&=)$Lq&B;%5w9!<RLUJ52E5=y?rk{gBqussSoZXx94hIEBBE}VVVN;8W -QU#h49z;mF@T{kkG}9D|W=VBCpzH9NS2<mco~^SwQztW54|XBi&&}F3D)X4ihlxMc%+F{T>>6vB@X~1 -L9~r(vn}Qi+{U!M{qQLn7-B~m`r#$^_khE4u2fR%#*Ut2slzS_5g`xn-<=ikb_e0k2zR&wbG$<k)Zig -bpXT~?FGo`c|j~-1WP^^sbTBL66-$MWGW;iyweKHu$J!aUj!oZ!DXjv*|u7OJx=39FYd#BA|u=rE)o! -6f9gJ@$d)2ni}zwQJ&VOrn^BDbChIv_36LZlMO{~Uzk=T0`xiJoZn)K!mjZzlrUiA@uLHp66UCE}Kq6 -c-6jt6H7DwK*+p8XSAA>;z$_qzvu3OpklVG{%^q;o8Z!QwO&5@X?{0hg~xpLE}c>C0w58I)9_grxDOX -E^hKqu)*Q2QC}`<va4|k69DmXBquJ0&a%o>!ov$S!bLqLI%b5)L1}>p8UX><;(F~x;@XVrx5x7!!Mx` -$g)X>?Lt><5?|V0A;R)A0F&;ybH*@kzF}CY~?!^pAnMtW)5>(+mhh*LrAJkT}N?a=bRdFl8Q?1Ko@gb -+A4`og}0k8#ANRsc{7z#nYjBBo=h)`adjkPRJ>#XkgklV0T^!)JAtRefo2NVym+s>}kwaqANB#kHQ-+ -S&N$J4AdT^D*1M{mESLj3VF2siYiaYjee38JUmW#&h!`#kO1O_HV2rEMzK<eTJ)Z!N!HQ5FrG{LEb2G -J6aH8}@WnLHvdS6Su>mgsK?|0uW(;#9l`CRXupUJr9LDtA|R{g!05@O*@QH2jS%+lEj0Xi<@6|U}J<9 -4W2*}Tnv*<FB6&TcoHP8C7PpWILukOh7i;bp@-5_3|$;FF>tz$qJS$SsLkl=e{r3;n~=LQ*fA2I3Hdi -QXkZ?VIUej(V2BeR7Ct^l>(7qYzl~EQrXg^cli?(kfME#<#gzyKx){7=Eu+EN8{3sX)Svz>83dIEa7& -}uDBh8n-;-GmpsIfVHEk{|GcoWc$Z8gSt6Z2T8$A+!4ZRr*{8@lzM%-EMFgHA^8?Qw*E!s-e&XqqT{V -mnAG}ZGJBSHp$P?^CdSK@l!9%3mu*26(5<|YV066}st=PJ@2id^ecqGzYPtHF(0AIH-}2hAGv_1F&z{ -M>bW+QW>PGTSmG@jKU;92nMEW%G{k@?c7eLx`maup#T5xOGt`NV6t70Fh1^Np=E~-_g+(Y(hyJm0O*- -i}jK?-^IE{^$;=qEjz#JqfzKBuk1RDU8;!bT1gNYaZ_)y67mRQszDMh=5=-nBFSl0<6&2$iC^Zi^%MZ -`XGsaX4@J46j2m4Fbl6g2F!3r3Z?gsW63<3s&}j<+TV@iIIYBohykS&~r~}?)Y$^{oM0Kle6Pa|9iLD -15@Yn}#usP~>54y!X8T_prND)zSUF;9&qiT1?RBt;dVaY-FF(<jp@FyUp-4Ev2(Ft0`Rx;mv!{KPsv^ -5V1pVaJ|X@t%Zuiyd>!nqNx2?(f!%!8XCa?qXe(7b2Og*Y$8XpEVz+X-!I>~+Ph)E}eDgRhw2;p4IU* -z1z^`+y}257wet7PCBj4j(=KX0<HZG=m5>b+z)(h|U=d)tufa0#3fW2C35X)NF~V`PN-YZO*Cs*Ihv9 -p5lc@@yG6Q6d75}vk~F-FryX`Tx{t_2z6Z4naL&*2k<ai=B4(?@d2o2C5&gu<1QDdITnE!#GMnWsmO4 -U43Y=k>&$z{u&qNNW25)o%fGP1u(J@l(%iBK@h0O>iJ+1;VQ8k~ft<d88lb+1y6v-Cj<Dl0TBNH5zP^ -V`68V4(pEMB0W<RZ)wpd74_dnB<*C+ynY!%$|ES6w@Vrm@lqpm8PRB1y_Af1<KLotz0Y1@*HJ-8P(-p -l8Mmj}nOI|I<X7^MrbduZNfBPbrzeJG_NoZEDZc&Ss^AR3@?BE2j*EC^Lj56guLd3|k$c6BykyDZ1-O -t9`7a-*694MVIs5E(^6Lp{b6mKJxC0c&Hy9etTE@b3(72;iIIahC&R)&@1q|6m)=Nn=|id8U42T8Co? -8>*IbZYW<ai&axJTeZb0KR4!grGh~c#5IPZCDxQD!iBHXm2Pf;O5VN&kpy&eBQgo-&uD5>5=z5G%NiQ -<EX+QybSq&<i87Q^BsWRPdDsd?C+opD@AOT3R$6Ctd_MBXk$}L<2O#)s2!mdXLJ}n4*hK<R_E!kaymS -56-JW@TGU#!TRG4F)iieyS#;6UR_A)y-MN?;LI|}KvNK-Ml`k7m06z~5;Q=O@%KON-^g_s&*(Wh<`^8 --{goEGjYCu<v0BwyYFeWQx=OmeEinZnc%(PiK<Px)_HK#z5*zuaOe1v<&}D3I;LOQC|}6wfeyT!_>-5 -I@AZ1G<wtwZM2)WHliAL$hR_p@Ca-GOJcBeKn#=jL~u{N+mo+oYa*qF9uHOB-pvE7)Hp5@K|`k%s3-h -4=Trs2ANFI@*YR7ylJu%(1C5D@10(QeGrG}D>KS3v&w1;1_)kb<dV_rrVZ7k9S)n_XNkFH*I%O$J50u -r>)h3L^gfA>1$};9psN~JeYr6C*x5MgG^e4l#uED3LG)cMDg`-5u)%!?t~3<rQDmFMJV9_rxY&itadk -m=T0adD`!vBpMc^2Va3}<5O<5c1H#kLcH~=SK5Npy|S&j`HU6*Zkg{pGU2<D-JT|w0s=o|D2);!bh1+ -MCKUh3@S%Eq+y-(|&;ZZjdGDb3CeObA|M+#r-so|>MJz>QK3vA~v)Rzm3Ix}+x7LG9RU%H8t%y^x#ol -_yl?;AGP!X5CtT`X>lOR;3*<RPQ}8=i(Hk)l3+ch$&?wOcZ+5ngO%2rB#Vmln<RrCtWdl$>L2gn$*sW -4%8ED@|7l6M@9&v{6437dkF?fBvs9`HuE@p@Rx~KwVKeb%AMlRL5cLzh&m+INSOyj5EOfUdGP~{8>4L -d>{pjTdRw@a3}R&D&C*EFX#YXfh3-OajfmI8<mfQ+HRAtH7gRUnR!Xttom+GrVBS;SAUxnhJrGn_vqZ -?>aDA@`Fiaj~O#DhHivi+7Nt_T>or%tj0U^!Q5|j*3sLB0{yoj%<H~8T$KyozgXwiU=i8PLNH%B8+A! -ddqyA$VGV`%`p^ZrTZ^%l~XJ4%mb_E}`xPjuPEj2&p<*fD8fv+M*G&>uzb97#p}9tUy(5U;8F7fK(z4 -jRhjr>ZE25jGk=#6XjmtnI(O!PXae`t0=Bm91@8c)VNNf!J}-6h;-U8%;yPj*g`yYb-)E#S@D;jiQnK -gp=t-SnDx-fo0t=;;vcj0~^q%NE;F_yHICC+i8Baf>6rpeYa)Nwr#ypEM|M{45MoqMt*N%77lU_Ly6M -%R+1j4pOR)!5FpLkcZ8dj!h+?IZPl1f5ph+D@*{^l_jUtRiflqr^?fM3+Lz)gVI4@W_8cPjDL_T-m_C -Ryy7u<iIJ^I^|M&kHY<J-RJpj=q7v+(-gHgOW5ul_#r7Ytb#58zOXP5e#883}BUy)E{kSNG$r-vi8ZY -U04;%e4W%R)xLFaXyT+;jdGx9b7a=lb2S89`mJ?qD<1(gzEZ8rA6gK#iw*1c;q)7ZlEU2<iuLM5*|#a -a|fChc7u?hp~+*@pXwl=WpnncKtqFFNFk-Z>IQ=TuY|h4?DM0`_*v@7*pq`_`jE4m7;0@a2ZR39a>0_ -^MHTu=ui`J%zIg4P>-@IA0kjrWMI8gH-s3$k}3JGvOMx!R+r{GRg+uuSTFiUrzcNmCSE_D8=G3hxDK1 -DMc-nkGwq$tb{s&I^g|#?{8dbEwQjp8&I2QXLl&Sw?gk=|3_|G}p8u^3>5Zpd6NKkyiOa#-ACUc)AJE -F&`YD1`T|QjqAM<5$nW2k(M-VKw#Udkh(?oCj7sR%c<g$W@*(*FNNnRZ%m?fUH)K$&*d76`fQ1jq*X_ -X&5YRHv_C8gL!PN2zY)+l+5v`xK{0$3jRh|)&M+$9*vATFx+LX8UTF5JJVPZ=kq{a2&A5pyq{2&zAf) -vqM^hWwN#32)FXIKpgp$>yDUPpMTT(Eu2ul(r^u9jW#2;2j&KtDg2x!ykt;AG?aMrrOp*JJgCyg?*;} -Fw-7+Q&uT#im7Y#2_JK5G9Xj+f%_URkYfN@#tLGtVhlQW68>dK-EU#n!4thvOZiW-|L6(LEx`4}<`&G -a!i)}MVsPZ%ZW^?0Qi{1oI&F``sGQ`(*A=I-N874HbAdm;Dg`=Aex;y+<w<9FMn==$3A_aVvkYN=rgr -!?hA^7A-Nqy)94+te-oxw#drMzd^&B~o6}nFK1OBxX-CNA!ucH3mqTSz0DZWKlIF_?R@0?!zsN-B~KM -=27=-xw0<GxLMfP%fFehvjH!(H1j+lIyNjw^_pUK8N%I7Lu|7-h_t$-WRKR;@%{3S6SPw9<*kKqDZhU -=i`x^i8F<m>2gn(0!-yNnp6&kiDS}JDG6U2rA8iE_l|A3oWG1AtwS#MC|JYPEHVh7k9`4WK_$m&y;Cm -;!}>so|?=oMDzmOzGf|%c@PB>XvsA_>bzao1tLL~RCPl@JL?NeB27X=O!i|*$qc=TmlqWu%6z9Ca<{7 -tGzs^*Z?wHdiJ1Q6tB7G%8L`&dXlNug<-to=a~{0j$lbe2QII+~wX-v?T@DU<#-NarMygrfG|q&H?@^ -ad>rUeM46Rp+--sA2{1Qf4lu$?!wxPB#H@St-$|FpdL&jAH>GL0U_rKqZOfn@*>T)K~(h&dsHP$eoYu -dk?FF3W+kbB1oA5t*s><(Ou)lQKGbNzVy9lpW%rdN|5_hw-I*Jih&ZLTEl-hT8Qd}6LgorU4Ec_icD1 -|z(@ke~RQ;L6XFeS%7=NWACZlQI~vih_rWM>58{VSS{UONl@u@<k#Kq{wwAe4Zswg6AD!vmM+l@L&dS -Dn0oaU3wIZ7)8ba9w}B+gZB}2YZP(Fr>?w%vz6?<q&8!8d~y%74HMyX9zBJ&!TXp-*;y@5nUen0RDM( -_tJYBOgrE&ZlzpzkAUBdjs$Zy3SPvmzNLHlW0H{x8kWZr;hqwmdL$OLf<kwMmVw@L@{F!FWtSGw5(B< -Q-sAubCR(G_NE!CNlmRZ^HJ~TPCc`MP%4W=TZENZH{?HoauQo<^so8-?&2m6zRRpc1w?=*+lXvLgf^= -T_$Nriv_^UqRxt?ySj@f?AYbzyyzp&HZ(4M!0apPdkPWm$j+W($thn4FJ8vxYWagbiAA;9)~YjAe`*f -^0R_c3JJGodRH&km9J~jrg^*N&3;q7Yo{}-X-`B+4_Z1?nAhaje*A`*2a3>%(4}P{aoUG7!|X(a~r|C -2p?&HqLc#hGll9Lvz*WR^T#_oB^rhenEd^0A7#ClCE7M~?%IujwY}_6?<`NZG~>r~cgGQXINm46y8#1 -7SddfBa2@dspnw7pzE4<3LOoRnc7d+AF|&r=*fH#Y3)p!v!w2;>B1-S71y{MNVl_!WDtcbk6TG&f{YO -{3&`n1?)SENp&ftw3?ge)`w2{JI4G%VW8nUXi52y6!4xB8`nBGrQ^DQPx*{v~^Kf<Cenor%IVR3`EQ} -Zn>#5gz&LbIAd=w+XpZ(VX%cxJN}Ko}Rn`gECRk-fJG;1cIS76V*-o%upRQi!I`2JnQ05V-Q-hozm~z -}G+2pGL{Qhrw({TOdzFc!NRwjxxUh%81K9Z}P`heS^1eg0&-=I*rEs^pq+6p<^D%;%9}!4j$rz$lcbh -!p+1Pp0_vvkxB(4`zB`v#AdD*izfd$AydfoU0Tz-bzxjk5B@q-oE{-RLcIdbFm~0(MZq-RWecH?yCa0 -k_O8N2I9Ga%PE{{W#dTQkx~rb47;_0SF`ssqEyW2%{thNzt6GajXAif5$G!NhJ;pIMz<6)SDbxILuq& -EjI;P#<AjB~6K@N^PiMVeWyaa<h;JQZ7%PR!}B$~$&1QV@zQ4P3v^Ny6JAqW`<As#ZqcnF38OZrZjt8 -sEY4ibFQh=1mg9H2ro<)pQBqF71l#c-!xL1D1Av&syFBjCWmx@cZBXjZ~us3HM&6f~XS>ahZAzHcT`G -**sYdM8@N;e;Z+8fn6u>)1uZ45B1f^Yx4p)kTw3$QeHwZB1+v&QGki?&z+Brx(VrM})+({7cXvMnZZG -E{OP>Fvdk+i=Z5&(+!^F0P?nmr{%F49=8;6G*osNsDH?lvFO$T2@asc#N)|hkupmJUeTNA3t|5ZZk?M -nN^nESHXd>94W_MGR%!)0l|Z16fTWDV@le<)yjB~CgPB9~LlII4sPLlBE^PPB@Otb;z#y@<JcT9)OGp -lBW|$oMl*FE&f?MkrDS*4LjrU`rs4+W~HKzud)k{P5*xSi6%22SUcjt3$&tiz24)V`FTn_XvT-f9;9W -|h+Au9Xo+JvQrg4lVG#PtNZ6QXgVTchJ%EQ6(XrT#{e2*$#`Ta4;%K<64o(5h&Hu?WJbbTRmhj>09g1 -09`6c=_MgpnriDFR)BQp6Bg3Hl#2M<ISOZKp>WE+2XTKYWzC8DlXO+!s(RXgAN4pQDNFt0}hhF14|1D -S*T_YPKEa829DNL9GmsERKb*)+Sid3@Y6^@GJ(NU@qHYk;uQZM$I)tPzKy#OV=BInqpLgBUwqq1y#!P -HRhl;%I9Aj%Q(_X%w_u|}Mn{H(rx^UGCXguvuD7#B=P?p7q4!?bYUj3CekZZ&YDHWOt@#dK8roQt%?f -N!WKBU1Dd#+5F_MoL#jK^DsQV6LD^Q0C<7A}$ehWKhEeL<nE|0+Q3r-Ql7W*~Y%wq!-KfqOlig8%AV& -@DvbU?SP0|J9hP+LX#`nE1|>q1~V<lBeDCKt>_ETa^2w%s)6O1^EOh*aid8k1s~Q<Mhn45Mj47P$w5G -D2S&5<N(|TFr_~XIqvFL!<3y_zu@fNWS1m#G2K^71Qeqrv4?~Ys4wcXUR)69HG(G98m)=9jLG8`En(0 -t{Lp->P#1YmsoG=AcpXqD;64AyL{0;OWroz1$ErRxhqkO!gLmp+89ndPy2j%UZ7VI_6yj94Q<H|(;P3 --;H(rweK_?lUO7>2(2OStqIa8a0Qrbnm0JAKZvcnNO8iFR*dvR628ZJkNj)3GHp}V~5;V2`C@f7AR0x -X=NAGBO?>l>q^(J12>7mnSF6VaNkXJ}=-^CUGf5_JSpJWiOW^V(NPVrq*aZ&-h-N$Uds?Lbd#>|Ul=p -gjFq4vL!q4qBvvg6l@PWVr<m=2r$^{u6UGbgIscEgg2i1hWXdH}apt;rmwik}%74{OmWdvXF4dvtOV9 -EXr2lLCcq6xAG}6bi)$^c+NC&FUyIhj%6Fgox?vOIxqM{~Qb8tt?@M=H_=(*bap`e55(!ra0ffU=#uP -SRMrp_JA{CoHh#*$aoHlx+8&rWhp2K_&7%Xm7AELHDCj{FdTd{7?G`O)l8uLBs*>3?@*U^;W9`As$MB -jc!&-a0JZ9)cMqSu_a{}b0Ksh1^Yj8u$Zvwz@cED{E(dKnqOW0^Rgp2Lg;di_FemD$yl5iPFSu8*!m6 -G#9gx8%DF3Ms1tw11j<lIot9)n&#i??qgLlPydOGj}?|AqW*-I3i|BUxycR-eK19<S`1pqXNU{hm+3R --4(GVBPl4rnli|2hB?3QsjEcNHQOotkf9L3c4+#QN<F*Z)b@)xGxe!BpJB%K45K*0(jIy}JqRZOvyRC -NeRzS)nkKmmwx+cOYjtIlHNJkT{L6<{-@-MCc)lv0*+ro9GLx$=}xnsWHgWNT_w7Ca^H-ok=DOc|19@ -^B62;uTUfK=k@9uGewsli@GWatCH`8TNLF_H%XzH_iDyE@$DB+lifEjMXYq4mCte|GDV<F96dvwI+(* -1I=xIo_vP@02cR#-J{DPGuOOj7e-2!n9d`le`O?8I>COWmFW*~l5)<7FbtOa;QJIQxn-Ng@6De(P-<) -21q+a($Hvtw<SIKl5OY9(01ph>9zXOVsRh^w(WILdTpMfM4KN3;r&egQWo$oE~MQiX&r~hM@ofNx8jx -c_{ZdyV3#4Xo(>_5KTe{t~RQT#o8lzfpA%5#GH#^yhZ8`ulz*fqCycT4a=jt5jwa6HlvnhE&c?Wn=ca -qV8V@;2k^_c!tStf+5#bo@g7JKWoSeUu)&J%01{cq4>S98q{goxR&IjZq8M6seQWgs1WK6@q7S1}X0E -2w8N_ZiZ;zyGINkrvKB8c<oIU7B4H1sH$3oI>g^;bKNL5bu&7c)-hL*K2GZ#f)o*`Ar<l2OaBuc`B3l -pVA2JaccXdtPS&5#lDz_RtYv7p-n4VjgXY-<oObTXg_;Dg=cvs&IO&DW@fx=wRvY?w-nOe|=h36n^_d -cfuGKkMPOAFsQPDK({EI(*{io1<DGuOF4R(DxnN=5$2+X4y|3y&EqpzPn{_5!lU_a(2k8bv{D&{7%k@ -YzK;^}{$(nT$Ve1_X^P!Nuj`8wCy%j^`wSg8^9wnmCYo<vyf2|n4>!wQ0*&oT&%JyYj@T`0LVSEtgow -MPJ|_hoXbP9n4%ShtIZU-yE2z58G3kB2Xh_rPZ4Y4RX>^7!eO$)iWfm;G4aM-q>HKp4$AB4_f=)V8&` -DtvHGhGC5R*k|*e(4W(+ot?8>!Im)Z`l*Uj(?-6<pMK2SzE4y9BM(d(yFQYg$JnL9-w*AMw;L^dfGR@ -MpPTGgqvV-bcp#EAD_etv4=s;&TtompL@V~88Pq{pZ&UMDQ)!ygfqO%@zKv~tKDCp#RZTVNx17_TH=o -<jC5O>hvJNQG_t49xFM@s)1{720VFo@A(_}HYkxxGTt$gs{0j4Sk`OT2k`8;{^*W(`!_Fo?C?LR+w@p -AwBDN-nSdtI#^c`H#MLdOXIgNB6BQvDR+mpH{X(m;>AZy;qqcU}G^)`ZrhTaLroSS;7gc?XupL>a3|2 -v=&%yxLBflO44Tip0m#+EOJD|2YB-#zcYL!>=Y%c-DT39fyWF68P%QI};@9DK-A)p{G>P+@db)J~f4v -aARU$f&xsK-Rj4I^zSgn-7K+TfBQIJQv;4Fiq6P!N=4XAUYw}nzbmA1hsqVBHTEfG;S*0a6kCa@{Lx* --o&2f$GhS`0c-gRALuUzTNhr!_=hP4hF>keA3}YJ8!9h4EJu^hq<a};7Q&FzEBbcs~fVXP537V`;7^2 -?VYy}a0x5}CZ3;;W=iBVz^77x&umj@9?CV!8=AoU8^2h%ukZZ9*)Cj`ifBWDB7b2NgjCzv0IO9O#qGc -H1z<WUeT^koZnj2{}E^tnO1BUMom>o+KT+;0^27fU5WBs+_BIomnGc25%cVN8=%lOGERmYXk?>`-gxh -9sXCCSd8gB0H7h@)vog)-p$BVAzHd;&x8dl+B_33EQrMJg}<sk43d^me<L$%D|<z&tQY+KpHM!_J%NW -G>@Dr#IM!6ta`QbL6_s?-VNo6WRRmxj>>E^(A5aPz8h?dogw@mz>*pq%sG|hMnh!A<RM{jJa-_Rj5N8 -~Tw>@@;l#O4oUJ7Jq8!C;_Jx`|V!a4Egq9D%BVdHpsVrs!;6kycvh+I0E8yfDfS96#fn(KYX4O+LH{f -rM>OLr;nBXx_+LZomaOUL+4v3}!Oa&%-cMN@k9AgztWg?UjiVE*7J<YE`*G0kgIpp@3SPGW_5-IWQv! -ZnD`@GDNB2Y9KSTwzH*c7V~=uH}ObV>yatF;ar16A63JyRrP)E~SX*`G+10({Q*63iN83%nk|AqVjg< -4N3U*s%=m3sVF5u%<|I3cNs3#C5C<&U`(e*cfj}%@wKFGIFqn9g*R-*epjuXbyksJG?O2*mD@}9GXG% -d^Ao5#}&_ExUgXGB9~O#THDo3@F*h(_Cdt#Wb+k^=ENfEcovW}R}p1&h7M0gY93?NVKP6)`TT%sOksq -PZf|6!VtaR+-pf!+om~{+m$vB}e2fbmfoGO(!!RJ45|WCboE3<irll&J36h)8vB?y}E{G9a`BRR!Thp -cBrnZMLp~gM?NG6T!jtQn1$ngAv#0qU=IKjXh_-^bqsZRx1i~Ng{H=X(M*QRcgEJ=ljJgIP2rue_c01 -9F*tTH$QNnQ@oZX_98f<Y<9XHk<g9iYBoFap*WmjJKqJl{I=+|h;jhv#{FvE0HZ()VaQW*O=jo<~Akh -sZ93^SSC5dc<sUkt|9M?-p*89%01nl^>2@zxwqLadrT7X2eVXBHpk~Vf>g|f^+U~xrM}9gyzQI(Q})e -o~00&)=BcR1XUK=#=*P$HwsLCR#)qC{^@=wrr*B-cL?(ysn-1)Xdiwx=a`gLi-7lUXvxp>y!~_^?M@^ -nfQS`|IvZe2KWWhP!_ot&I@e*6R*G<pIjZkP_CXay3KtA)sgMTMTWykOO+k6cXKRvxSKuncEc=8S=Wd -Vv=JSiwd_Jf4b&A|JJL{)GEc*N++!YWLT-tvrCQE}|fL(|%Q0vhNnxej1kkaj{67*NK^J4G2-M6of)8 -oCv*Dv>XU!})C?7iL-3K5Nk$l3&E$#VNlljjHfM+dL=QkcZ_yMx2myT{07h(bCcAhK%W#a($xmp}%n5 -@-3eic#Tni-Vw~MN!tu*tLOcSFz9rG)~td+PApgoKHlOHF|XO-Rep+|CH2;xM46^fn$tgi_$80YyF+9 -$NdU^?(pLNH(7FC=Zop!##a3_cy<E?K7I2jdv?E9KT0rwq;S%b!3~T+K!A78kkaAM3@aZ6>u4tBi;h^ -Ce0*95N{(o76I%ZMjxmuBmP*-)lwp81c*}ktm<DW&*Oko3C7&lxesK((Efo=-4(c1(pHG83W9H@?d=G -a!I^ZGk?NHXtFOu05X0n^aM=BVq?*r+w6F?ag`%kOpEN)Ti)n()QPWwFzqI(L1ZVnfNi8p)6&CQL4_3 -6{6h=IO)41wPpCs%Su9JRa8=XgrlFh}Clnb4nbA48d`7Uj)x8Znl)U6|UhVKK`ZPHC@A>=U};nw;lXV -Li(->U#D`SG`|e%6BHx6ZiYXCoBK|mJ$`Y-$r<m+lp1)I*1;*3a@=gDFE6CRI&diItW+@Y%Us|<#*xi -cj4@xE}Thm3enY74!NYnAa5+5i&P<Xq0Cf#A9pXq)cF+)*Ya!VqF}6{E~@$19f&{>PD(D!VFn<?<>0r -bsz-nMJ|L<KwLQ`d<2R%=C|`Gy#j--d@bTo2Pi(<;S^RySr^UQa`xRAeneT=YE2d2K#a^s$spnEy{M? -q@Qq9$o+gK;|)xp5p>{JW&oJpv-$j<UxQsr}Sb9UY<n!wcAgrw0MQN%F#b?Nh6$+M1Fc4oBrs>^EOCK -RC+sZ3Gg;4%@g%EX`v$cz%;IIaja0O>UAIgvM$2YP`<E`T38zyVCFjy10M+tm{Kf}O*dZRdG!lh8j3$ -B4b=$l(h(G~gizFVSImPEJg|*<jbGwbTu{BsADW$q+YDfE*M#PK}l$eNtgYL4aZdt#Mz>VnzJsX%_uJ -j%w5L5mPkmWY*E>cSQ|8VT#QjwqlB*AEWS$P$vz<sLs@heP5x78mtnN(efmj7ic6`QeBu*FnsX3KgQ~ --x;j-8c%95Ke=nIAo);dAVu($MqVy^$<`f9N;J|uW!!{=QqPRk736`o_gS|{nk?e-gkB<0+9493(#R0 -O+n-LzVbT8MAIY)w+UnS307YZxEqYfRLPqT)c12Hu^Zq9tJDVeL36k5TUSIjJ5E*tF$13ywFn%hbwZq -2gUdCp3aBhqy+6~6go%fjh|X=^^7$<#HRC_SXo+{5P-qF)X2NJkriIYTiG=M*--r06(l#y!7u`WVbE% -O#@BJN)hn$}@2PU9;D<_X<s{Vt!T~;#s)B3w;+&u(V=R3)l1*GltWehf*!-xMX3NXLS_iWb+tP%6R^| -XB)@ii;F$u(9nXB@QZE7qKn^lG)5^@gM&#-GlP)EV%Yp`oP=XD(B?(NO2+_D`(mEfXQx9K_E=HBFGq1 -~niy4v;^&q-$&Hc2ebt5O!)djQIHm>=2SD>4UgkP0&T`%buxPVoG20p>Z&|AKZ(TswAU^>wybWAXWId -b%k-~d+pr%~A6FwX=AMOSm;67~66(XOV1AKpFfD!&TR@WGCZZ|?=0m0xJ_nc?K0*}q}@X`d%@xA|gb8 -vXf*Cj$!m}C45>(Oqx>GP~kO<3-ykKGr#qAc|w<OWP76j=;3x7L%%)2FseO1wKO%CyBSi%<N=HA4tqo -K|gHUBuo%l&8cAt+xVEyFBAIzI+_K(5-wOyfMv$uehDB!*=v!IVC@LTMH_g$&$VO-0O%xR^5^u`sdEv -`87;4V%|S@CshPQRd}9S65Xx$#ez_1)ma2})0=KNSo2!B>xU93-Y}4X2K<K-U+3|T3NSXALmfG=&vmZ -&=~=E*IHA~Fo;IuCoabF8FEu7yc?jY3lEMG^*^@s$b~ZZn5fmM1o1M9*U5PPHalp(gb;y;;g9llwXwa -#eB$A}8u-`S%*Q!Z~lAE0ot3@GvxE<0H5lqF$H4}$5)4e9%8ZLs6&C_kin}iQ2lx&(9tTbjZVAP?H*D -(=Eoy}DSXAxDpVV!C!=Fw6$(3B^MVjFf?vn}r5e3&d@Xsh8M9f<WyVf`KsMxXFT#teP*X%JqFU}T?h@ -)5O4)M_-SkDq1~hY;!1;F}v*pijw-7{{k)H@se-zIjCNpM@Spcu$R`;=D}<>_;A`(VZ@`MNoLh``f#2 -j9nydtL=}4w9u}5_e6CoFGZ7N*w+d>w9et-K#@4WsG!w<EQ`}gHecrT7f(A3I`u7!LZDj5wjYItkbDC -(noy3eZg(73$922cm_+W;67fsR&q>9j8`o_ZSeyKB>@PRN2n_RjY`kvsa(#jNkzsE*9UD1Ev9D)3Uba -sgt^#k>@NQeUO~n~MlE?UR5qTe!0V8yU1+9pz7#8MReu|b+l;-S;&ON_;hc({ozNkYiTH2g&pZg(k4X -m`}z`BF_#s&V#Bj4QD4Pps=&a*}w<Vhr1w*EM!y3x4jny|Bu>8c~hbr#=F{_JcqE(CVuI5i@hBO`7%l -|nEz>6_u;#cY3pZ2AjKdhCvM^Q3$7^ET7oD=PO)eDE0gLm~zs4zR|j!`eXg*q!5U(-X;@PWoIW;S*=i -{LcVlQuUB$_<&$NwN3XIzM5Vsp~p&5{iUy`*Q&G>pFURt(^vhKC@X;w)E>wg@2|^=#N8GjPo8dQvN;E -Kyw(B4rh{2sG^@S&S>E(aURU1e7!Dxc{s(08U`8~$^dJKYAioqE0K^Sw;L9W(!3y;!CG(uc;Kpz%pB~ -;=lK*K#b3Y%EgdE;q8AkJp&Ta>*%qsL(pDl|Og;rb)*7b7unH(|dN^Y({jqZRa{*x;>Mm=)k>L4gMDX -LgG8f0vHnb;yJ#jC2b@+==-kKQ}L8ppcFWnGkL^$iRgjUI~mbPx`i;eQ%D!>Tt15t-zu1%{koQ|j_Kw -yT{)XOTTSat#K*d8E7a%$IS+fX61!f#mSy?AeJQd0P73DVfMQsL`Sl#-H5WBsa6B`ILP6G@w+!jp7yg -wcxh`S<8MCbYD0%`A32+uf)!}xbll4!5B$>2MG*T-IW*1p`LuP5}&)eo>2(F=vju>Xloc?ovZf|+BPM -|=cu2Fk*V0}gs0Kg=2uD%sy^h?L49_b4WEAX)mZ;~Jo(})e@{|j8sv2F#Cv-+6?!N4)%Dcsm%LOr2+N -&mw*+IiH<fOg`fB?1IEIxd2c?>u+lEVpqXsP&oCbIuKJQuxT#Sx0!Z{ZJbc9?+4+AV50f;LsMi!Ppbk -54zc~wsb7sY%Yg>&W2I|Q|Q8Wxj_=bjqs*B`sA`Rt4>d}8y>8RS+f8_@qu2ly3kwuevuIDYzc#PrY<h -NQP(_;58HJRT&oYy6{z^``+%#Ne~V;;Y41e;PdMuK4t6N6q|n_B8LS`Q?}Knoqx;ef{O*pys19`@m7J -DIpUG$OdChv-nf<%`+G>L}%J{@{9GEcAoHp_{ej^%TMKCN95>99wtvZsxa(0xeKbrsDRZ&Z%q_zmEPe -vgi6rfkZzeO-X0K2d7nZG|3H6TU_(slkNZlTQ9_Og@^!(PHKjk{YBp0Z!&u;suTaplhV3!n+F%U({~M -dGZmU{t%LOL0zlA}Uw57#REUr&4StzLoo<Z&JW?;XYf&Fd<_PZI_zknH-SvTZ`q%E~`5W$DCRN(*PkO -uwoHr4?KPlG4p_zJ~1wO`j5TTPadaPDEaKe)R%&zf_1m|kRxL4hGgZo@IKA37VWC1f0eige4OmW~2Z0 -NJ^qs9tkz3-2C9PDAoM(z(wr^ZT^|SFxW16G-0D06#B3=1Vmv3_kFIM*ruGddH-JIwx;DH9m<8V(0eG ->88F28$mGYdrHDfQNxy|5bJ)BQo(f49nfAM>r;Jf55;ND;-;pXPI|t<pN|gq58pgb-WBhG6UdwP-J{~ -Y;Fg49^~pr!q;?r0FY=qqLAhya20t}bS+8blID@B?$DZ6bpmYlGvRR)(K38949jvlCyJ%F28znlH>%4 -^0Up^h{8t3%n=@*~8iUm9tL*Vz3`5F9>FPGIA0yZz_e}J3GoBP@Qo#e@<0VMrc)k7{l@+wnot*(*7qN -*;qvx9Hcso7quSMT0?FBEh34;X4F%{M@qqOb6^5?U|8%S@GUm&yhIq!R)+uP{Q9c36)e@zBETNRTe0u -90hknB*m;rA_v~-Tn8zt76WR0^{r~ga!BW%jB<B{UP~wy<GNb=&|&xs!4XsvmEq$|Eae1#tPq8%Q+B} -78sQuvsxWQ^~Op+teaLHBZt-OL*A!qf8R3!v?wr{+d%siK8`#ZTtH&$tq{T6rB1QiV8T~Q#Qc*YHrp= -tlgH!aiDG-6s7?Chi>)T;Nkq{DpU4DI_nvOw{U=YAg#Yzz`ae!o&%YQaUvAa+FYmgX;^!wOP5&EEO9K -QH00008031s8R*Ov1N!|ef00;#D0384T0B~t=FJE?LZe(wAFLG&PXfI=LZgX^UVQFqIaCxniO>dkq5Q -gvkiV-J}sMTY%(pHMLQQAgHt7tD#R3R@6iz9y^+qBt#UxN)88nu`Bgz-D?JTr`Gv=U%19g}BZqEp(!_ -s%jUDKFso^y8*He7QN?eSNr1l4j77m%h7L)RX#~-`=xVCWAsCHND13aqqVRrA-pntX+2rxaH$2C5_^9 -+`(^)>A`cE0v=J;sOgF0@zUY6e?-%Bmm#S*HD(O5nlhQigt^a`rs;eRwng~OYTJTpfP$Xg!78^uvtKA -d_TuD<c8aQ{npV!xkYqHw)@S2whZTiqYtVcL*YUABy<la@9O)S{CT#&Kd;=GAba;ZkGSQ1g5>ey>rne ->V85`=lV1{>BAIVg#2d%MzvSgCkvdj$frigHMkgjpl!l&EK1M%$8e!|`v=kVbZJSd4v-Gd*As@q52Ym -qNv@7-fE&8oHxL*NKkQ3Zqp#~J1!o!VrUcVR}-F?OU(<LO8jUN?vl4Ktf^hIL`c>uq7P0=e1ftCsP)3 -{0-T@I?BqrWVUFQzqO*E{W$7i2KA|k>_tfj29$yAi!iBuwtD*|Esg%TE1Urql^8o#!6-1XzqX7v{)?d -5KBH67G)=Av{^O%F4Xj&*fc1Q?x^jxjQx^7P)h>@6aWAK2ml;P_Ezf_F5Sij004Ov0015U003}la4%n -WWo~3|axZdeV`wj9Z*Fv9X>Mh5b1ras-B?YJ+cprr`&Y063P_DsiE}jKqCpz8Y4cG8+X97Q2wa=8nNX -r2QrX=U{qLO_QW9m!PMY>mRF@Sg&YL%HhU9pQMwd)l(O9jOVX~}sW7$Vp=So)xVeF#7752WC)uH<wFB -m*8z=~Vlq{HY&2{(EvjdgEtYAbccl^gw9!N9%h528_;@7?J7z81f6k9Ga~FVFL5KR$o<^NZI%q>E&+k -i~d%MeB%Kw$qi-N{q?j^UQrnPbVBDGtB?g8Y_$YSHd3kewcm(3=5@iPv_r?YA>3%!nDes&Y}bui<?gZ -npWJ|j^j1FFBYD@P=oL|$d#!4w^DG^HhpNX+^`fCSYNYsr&=6cM<CK-r?@cz5#wZvqUb48kP&9u8@J~ -6D0fHJ&`NM_4FeS|;2LH%vq!<asu>tB2xTt{mglmPHqQr*jZj7Eft<@e<D0G|Hqls{XuAdOuXQDyNbK -rc8m&gCSw2F=ikboe&cFp93^NW469%OdjF~j7(w6)&p^RXgZ4Z!ykv5=E?p2sZ>_4nn<clgwnRazG%= -to#hA^YBcA_C*P}$pfvaF<{!)(aP!1jd5Dsgqw2>#wsQaaOnDb(K8*hIETJieg*y?BC>48qw<m@v2&6 -0{j5C@{zl!p7cl?=38*WMo<BCin)j%*5NR9dZik$9xZrRwK|x*tV%cR`D`r%fWMAf}=Gn`CZ&&WH2Yo -wj@gZEHWD0gb4g@ioowaA7O?h(n<+BC|X|EphbMTCs*ur-+a!N%RE|`j_@FW%?)LQW`uTrv#(C$K+|~ -QZ#ckSLZyG|=-TnB+bN%QU^z_`AqQOXAa<una#j;><PM<TfDRh^G(I&%J(9)PW)go9QH1dy0sdFbpGo -vdec`t4C|puCr1f2Q&j#4A?_hP=%OXL?yA}MgZc~$o!9kW~e;dmvxf6sI>NbOU5rx`?4PoJ&-4ddkb& -%-@f2v9#$c8|-p<8oSh?ITcs>Q8C$W9kZTQplA9vljT?B-~Mj^T<AlM4<nG0!@K|HlPIF`YTJ@Y_iAv -pcdopKuW90)}I>nf?9=U=MM+xocfd$^`O#wVd5FGg(9cG7UiAxz_U}d;Mr8i~YA-xwl7Gto@vagY~1H -HUgfJ5`_)SweN0W?YPmU#f4UTzj#J1NUz6dyxR9rjCx$C2+j`jgQy%uztQn|+8j>q->!L&eSFEP>(a5 -TEU$JV8yOHJi}9>lvDa;R1Er`7wmb5M?<{t+HO!#kV>_=5i{V7>b^=#`@x3TG)Ox?b*EL?u7|yB_jzv -4TctwM6MXOZAU`5o(!_h`rheGYMGZ?$?B|7WBUlDlTHM%B$lnrtSKM-VXq&f9TO9H9G9eC~sNcUa#b; -#CTp^VdnoKVxD>r%rd9X=$yZQ5$bt%xaEX&>6Udr4W%_v`DX4O%>*PH1?!{|S)>#FllOd?C#<cECMHj -bdlWuKJ&CvHPyLte~HG_>eum070d58REP+uI~QB+I(SLw6o^J%IWM(`w&Idme>=CQP(q#7Ca2*=mgn> -CcttzHN%H)v&olR-RupufDn<Xm9%lhqNyOXE;sU{fW@XQ<6aB=;<cdgaEu|5#S{nv%}vdBg1mZr$9uB -2U$<EjbdI<UuMQ#}V3O@rC8rL1G^d}ln%4;WaX74lSRaIZpZIHP)^y;zp`18w5SAkY;ceN2^-Pd6!dz -U}1?R3`U<h~i*DUZkv9$WVsJgBnPfKj=HdEP9Vqce(m6TPmILFsyT%@z)f`7ERq^3^E&2qJ!lA0;*fo -s<fk?YxYkVqH*lQ8rPsj>G8OP8t@I`o_-a&B{76ej%bezlzUh!5$}LG|KX#(Q)gj#&42?k`rTn^=eL= --)eTlj8U+<XAsUHtuKkO;?+)wNIUobwD7Q(!_IRGaNTqH4ZRJvUgfmv2&Iz{sK@-0|XQR000O897^_9 -9T7Vr@CN_@<{1D08vp<RaA|NaUv_0~WN&gWa%p2|FJo_RbaHQOE^v9ZS>1BmHWt3uQ=DZlLZ)1foopw -qI!;%XnOGZH@<?*C9mk78BqXz?2o{85X)@{bIeODq>?8C5ASqI!BqzJ8nIr^o@SPu=9~>lFq+CeI)>$ -hupE6po)=cmP$aNYebI9i>KV18yd+B%I^aih8=+Zc*)0nw%5e3qPo@By|`%#ADn<U~%s};=@w)dWi49 -6r&W*lCgf&JWtubp-a@YlfWRg}=U#o~-rNYW_v$a|KATzH0@u$5$q0?ukX0lt7#(D{P4A>j~kWZyD6c -^R88SRxDhE>EQ3ahHcEc|Mq|Qyh#9p;n=$dqpHKK-N5F6*M(;i;rO{m2fVMP;4efEL+BiIG&7p*Q7ff -Oh&^#{(Iq%+qvXtaI4{8xJrq07RP${wHeaj=PacG({rb%dh&ZFWE9|5NvCH1nVx^e#R6uGg=X@(p6pT -~B06Uvm|Tjab=NAzFhWg6ox!-@nfM!lK4<_Epovl*C9(|zo-mkkQJI7&fd;i&A6u<r!XI}#*E_f`+F- -qVM=jUrsYla%bb6|X?~CCxJ)9N8=Xxk`SmC1Cl2^mgRcF%HzIlt{ZT$7t^E?+aDemq{87k-Qo%{WM8) -CYchE(CNPG02vs#M+1Xw>Vx_Q}Yf+>8d*4Wfbka(Ly}Ku@Q)mrbyJzcbn<eD<#fN`KHf@B5_FpOA5P< -oko|UEiIa{NtPZhMgC^@ng2e4O_>T!?&b+Ga3(fg#7N=S53?=dl&xx9Zft8F}b-e=pm(oF4{0N+dk;w -$Ikw(7sI!M!<*0dZ$`&?+ZkOP-rwE7|Gd+Ea~$AeKfu-Sd!I~(=*Rt=tHXMHdHV5nlWUARW1sW}q~9C -(hvj&4RE~20%7yi2`x<$F`(cHDH@WfHpOCk`0UiXI^d|j{5HgZ6D^TuEzWtylKITD&QQQh*nq>u;$+V -VbbueG41gZiU<ULjCCd0g!0mbaDX+fnTuoIqO>c@!Jq|>E@1zp1eD*yybk#XU8Esfd{^UUC@-&3_a0~ -_;#(}ruFMJjP)nxbO9RAm4;2?i{Z_e>zuwwAN~<F6tL?u(k@Rc!Dhuw=Oa%#pNYqJDCjqFj7dwHMGN# -6PH$WOIbqXTz|b7U~;`3CUtEGeT66uyUT(ommXo3<;tnl7!e9i)U`GQ`=PH+gfd_RJ}U~{{B*D^o=!g -lad@j74+Ncma<9}KU-0{4q&N_GCUedlYp7Ys-h04l5S2)l@I-ag+ucx0q@E$f<y}{$%3ZHvMIxtq{cs -3Xk<oe%kqB0!erOvtN`9B!aMtEY3$4?WkTC+rj39VgOrF)`K1hA-Ym|FtAkw^%GFkO>tK#KzJF?eLWc -J|EYEX_)!z={OrMaI+tJz_6MDu-U7FA*;fW%C;wfj@m_(I$KmdEYz#Zax&ll_n*Q-r9f#mQ+ZFvG|9y -N~<LKVbALa2aMLb$MMtGGa;p6CRWe?L+<!D1>S9HW#tCDiehVz$a%^<1ESE3lChrh<QCtj;nfz1s4+S -pK10F4sp|<1M^ji;Px;1MuljEU4})<GirJoJr#&w$`?|VAmqC&ZS6&XVsvqQDA_s>U*?05sO2xcjhaY -TlG-`!Am$PBDzLY6hXHUkxnyv<?OCG+mf#TD@oNgK%?vx^X7WLfa^v9w=*PKT6y-<%27Exu5U<>I6IL -X5#r?{sk;5AxIDVJN(6Iscg0jexxiCX$Ko~6FwC7*kqZ8B%xB9OKzksZWNO9$JI&EhaKo9LlZ||w&yJ -0Ximh$4)_p*o!p?cw`>!?m^$P9WaL&!{wdba}<zkIj*-vz{`qXY%)FzB$qxz52c7t{-{h~)Ux#Hu?Lg -_Z2mT_05?;P~C|AUJa-<6tmz^Jai5<7>?7{rW<Bek@vXmsRefne-W)l;{LhZtw~{DGL0FlVSH+A!rjJ -|M~%iPVktJ_?zZ$RIpMqDp6|TvV~!jfYAzcu05}OJZzcWM_#gdq<`BHJOq>j57U+KutzP`EtmbkL=NG -r_pwII{S@>ZeFa8pzb!|hb*GIBx8)cgHnCUfrC^z9?uVN3=93(@(?8<o`~LjC<rw{(FIKqAz=@DP(CG -aw)??cjUskT?}AM8)<tWE!}d0C^_uNTwvyHTsuLsmdmIAQ?&kW^trptaV(QB(iet8!%b)9vLdL$;hr5 -cAm5*-=Q#Yl#sZ@!uyVbENMU;|S6JUhZ7;4!CA_Yw{yt`r+HqO6!$Wl#&>cI9r+_mcFQ%wRh{cojF&h -l4RWZBpctA)Z3I$C7xGcb>5(G;%|3W;voB7>OY?Bri135*TG1NP5batJM4=#{;0<-E0cr77%ft2ntuS -r*Wg9X6@ypbwZ;y$DvCO!HXjHW@RGX|Qcgtr&(}B)~G_gch)0meG3}GxIvSxttlRD?FQda}TU{Qwy8D -0K2HnJbyZ$eI{z|e{(Ea&9JIjt{CKx`Ja1ak&4y?yKD85fsH!Bc05W5vD%IA_6mIG{a-)3G(Wx@eT%i -TV%m19^PYYqvaLSnKLgFPrA~evFIapjcCy}oECcYx7DS%sjwL+n68m%R!UGp^_&3YRFJkJ&AyVFfW|} -km^u(#X!e~Bt$stAvVhVxv=O4fS27OLLJUk1&1k1DFDMXt(r2Y@b%VNe-`^5XoY5fIIO9KQH0000803 -1s8R@U;w-VX-=0Foa703rYY0B~t=FJE?LZe(wAFLG&PXfI@CW?^+~bYF9Hd2D5KE^v9JSzB-0HWYsMu -MoT!8&HKN>C!HMABwfb26Pu7*~2gl0xi=r7m8F#Dv3MnzweOLg%l~-N&C>&Jl}W7bK&73wHLff)UhV4 -Oh{F8p^^`zP>aQ03o@yW6nBDK{bRBC@bT08KR(~(w|9Sj{&;(1@PA1qQVaMy*(Coi68N)ZoZ;n-9nM% -o>1v%?iNF%8PP8&(`cJ_r7n|h{?@>e5GVKN1a#FM-)#ekT5<6&4cjGal5GBQUv|&3eC}B8I0fYC^!OQ -Wezz<l+KtsV<fe{@KgQLj32kv|VhV&lMM%{@9ce1S@<w1F3qoJ3B#l6&+@3LV|&dO<d!FPR}R-HK-kR -}1v`msm1Zgmm3st-t#uXqmBJH7`Eq3{gXE+1BIq7uk2eZZxMXzhvG=Qs$0(nH!9`SYM+SVx<Tc5s+zH -wNgTPFxC%*%)94JIE1J${)v=cC-UksKiX6F{&HxV|qlvY-X$jJRXR`V}u>-W6flZ3zZ?I#Kfx7BobVg -m+eeo&!MNuIPE({1)>yfDGpOOO(L%D=a)xT<WMqVnb<S!-pW1abQ->eTTmqBi`iHRE}m&G{?b5E=t*P -o0n>UmC3>rQF<FT^%mbng&bC}cg6n5BB@Z}*aFbdRd8S1a9eJZN1&T7^Y>A=RpJIWysn`s03+o@4ye# -1e%<l2=5los{<!Co{L<&`fW{fNMTpRn&2k-E<DNnf0BM`RdVF`*@Vd0NRFv5ZvJcoG%Kjj>F<QVXog& ->N+COtt;lUVTuRaQ;BRnTHZs-RSv%neJ1hF4fhD2LPfYNQU6Q4+WoVZO%0Z?FUk98>W~h6}XnpW$jlk -YNSxCh$5Nr}y#rTY-v5`SdUauPSr`L+Xb&GrOa$Xnq!V#OoIkaYNp`dnxn!Ws6m)%%ws?o$!XnF%;%z -tGPRqr-G{K&?YJX1&P)*x&Z;RnNH83^s!5}(S?nV-7ryFvN=l5o5!34Q|-viOsuK4;n~q{YbRPK6o3b --n&PMDDoT>?5(zGHHwou7S0c2=%amx#Gw}CX{e%L$!>8!(b!pO%0jm*1octbooapAPII~_f4GFs0R!y -Hn6I9)-O`8!<C9fb)bhHMzClsHt<9bd5<=?wz%<g@SR`^N9PmX^iXQv9O#k@R^2L6lk$k6qopOr@~>* -d?gDENjW%J8B0igq`VoT&xu`H3i5Symi4DR59$XA-d`c7^wZBStL3pbUmv#%;EIWV^t50#@o6w^A0oo -@&3np3nj#zMZ?k^`uNU`y_1a&bz)@HKSWe#89R0c5ppGt}%h9Eo#rXI*lqYooFYmToFZQ-zQo%s8)ot -7%;R}>B_K0#r<4&7n`c**>GlXYgOnek7{uWz!ZPh(>->&%sCj(OY>c-WBpT+t7AQ1yH4=Eo?>cwe7|> -ZTW3wPMQ}_<o^qg49WSqzF3k27;Twr4x2wxHKcrXh(u<2XYmc)hjL1XeAqY4CPA|T{POmO}PTfQb{nR -8-L|~~>LYb0q>+;ewsDl=%k4*15E_&4r;F;no-1rlu9e-q$qrmP7IHstUp_fLNs~%osQRu2&PPRt@Mc -@jN*!9<Y@EF#Q6w<YB{t2&#%bGBD>fHk_5UM#7tDh`_cN_DL;WaPA8=$z?E{DEJpi-dvFb#1xdML%!T -orU+&J-R{x6z-tNc82AGfhbJ{(3}WC-oq7c4SK^QOA+WQ;*U;(0iQ@Z*kqhT=u7*`zY&afex65TmMW2 -hMRwBcvum}S=e(Zk?}?%KoaFdA}Y<cu)D)@=Xc{#2O4&~y*q<_m?DM9i}48*ft(TW!(}Yo@$Ulz>FON -K(dU5iK|a90pSW3t$m_GV(c$fRt%Q?6Ed1)=+~%T$+`SU|o%9JahAu7g34}=g?)vqGu9e~0?k=VS#$N -5lTgAnGjog2ST>EdaSde{^n|F;oPd1xmndiF7=Q*&T4AoEzD|C}E4z=L{3o}Fe?GlL+YNf>P7~u=^(| -qczNuA{nnC-a81St+sFqq`S$Il<_&l!Sg89Vr${xJuJs@!AY|8^y2i6Ytb%gx@4vZ=shzZ=PF?Z7g$+ -vTX0ua>V~9aKdj#;DLu!3NGBF0j3Zrip(0-z+~qS!c-Pr@LQ1CuYS<s}mGSn7CDK{?W>1JEhirljw`7 -U7gJIh!J&;+H^iz30y!OXmk6K?9^fN_H~-*&SFD&b_==1%AbE*t=9=eR4Ym_^gum-ZM|U~y0N}oEq~S -5{xn(Y{Llw`i`v8CBX!D{#7OP`6T%YzJGH5TV9kvo_3Dii1%F)WAglsC8}s*C{}NWZZl`Un&T6nlt&A -?~sn()l9*gMk*n}Y0kQHHiE9OS8w0mv6_#aS90|XQR000O897^_9IY+Oaz5xIL%mV-b8~^|SaA|NaUv -_0~WN&gWa%p2|FJx(9XKrtEWiD`eeN)kD<1i3>*H<jMhsu!i2Lyc3OHIg;+Qw-E<v4_rtQ~<Z8Cgvzr -T>1iVqMdwIX~@=W(VzPEZa^S3%V!rRCSH8l{PIQmC-G9vWxiv)lQq($n73RnpAy<Tl+OB-fGqB1_OC^ -Y9~;m<wxmw$DWTIUZJqh2Ky^golw{Wp<-yR5e-`V@{j2|LdXs)FgRc=g6}^d(+Z~m-=H(1Zp9RohOIu -JA>ckrX<?+YAjToE8tfjyqG_cP4IHK2!wxskbuCrxd>G6UR%+#Dy+&9*34621<D+G4JU@Y9d&mBtIiD -l~91#zrI&dXgufjaycX>$5dpddVXZbQOFTmx(<L6kG^9yX4<3*Xz%iGVQkN4T?99k~2^aJqgv3PRx{0 -nY4x|}JVcyU{%*#j>YcjqVT)hxeD`8q9s=Bt!1^Z9&{%|}KQ3~^Sx4xUV1wqs|lgV@kV;2sQy%DMUO+ -}runxh%O1FrT)#l9sVkoS36W(FClt4JP#W=1-~)(rDG9i_BUWDK-uEG#cOKqg-_p{;h<*hBEG7dW$WK --sp{+BC-PRZ^Sty2~f^kAr<HJdS*kq$zM=Q0|XQR000O897^_9;0*^w_yYg{#R&ia82|tPaA|NaUv_0 -~WN&gWa%p2|FJ*0SYH2QTd4*POZ`(Ey{_bCK<vvWpJR#k_48k1DNZmDkaR)amFn9r>Nhh1FBnl+uMF{ -fWcO>=d7+t<Z<h?z2eD2PotfexbTfNAYEWxz3s16|f_1#~8Z1~Na&CR>p?e9zYSQ{a$q*%hA6@4tcN% -W<uTZ5`Mdh3rL#Dl0h4ULBqE7NOy^2c6i+5!iWJ#+$&rTijzDl^o*eDmSs+uONZVO=EY;9-8dScu$a7 -oAXP!pudLOSoP^@beOW3F8IO--XQI3rZm=7FcMUDAl5l_z9~_s>mB~d@xv9*ZRyB;5(>QawwA+Dha71 -2n&a2R@RC4C?zj)EXIvLF8dE(f4zhqAwac5-4upgZfwS%6D1O=@v4u%XRZ=#3Cs{kc2AmVk!THD=`4c -HLyFF2R|m$}R)VvFe_Ald#6Xpl7?EHw_NLQE?yNc2g*2LTg0N@S&W3icYd?5;OqBgNd7u`LHT%5Y-LA -KHpUCRb1C4?G-MrphZLGG>p}%^~p1f6tIRzAzFq{YO#{Ow6^5t-{5Mt0qjaLp$?CHC=5>L2$3eGB75z -s-kgBcI3-%rbIEw*If^+Wja+8yJ;oJzI^O$4Fm^cA)FCn*&zS`1oib<m?t4;li37RIo(-!k|1(M-)ZP -4Fy{CCCnLI3oAj5xl}YA;xGh(xIII*(E~b8I+DDG2G_Fg+7f;qOQI-fDb~OXqxZr86ua+%H=Z`c<3t+ -YA!kr9PYjbu~F?DoYQxlB5gMn_BPc0poEUx@DAIJQc}&Wl}&f(gM6fYniK_Q@MwL#P){rz%&2dBctTS -{o3jT$1NFnopL%*n2Q)$FfM`vQo#k(?sY*0QnGMA5W>=6F)a$k-9E%;v=>LpkyKeY-^kt&HHZ}Y!%#r -4eQmAWLWp=DJm9TSkB%%H$3vJMzg=-ts`fzStAPsIPF9D-N1ndnKg@jm_qQEwO!6vjq)2Qmqxy|8{SM -RjXUV90FZHU2VEih%9axu>4eqb{Qr?Y|tie`m<l;@S~eB|s`kK}QnFp=PzP5qGF|G61yFasdcBkv~sv -!Ml@fCgPR>{;K+dc5lv02_x6o2~*jB54H{S-)t55zr9G@{zk1492buL%*Onx2fAnPIHm-G7%N$G=wj0 -G}jyBuZYXL(&kRvt!T<|P2Tw9Hw`YWLm#4-t@`UgAyGbC-Khq{UdIPq^|8jHQ_sh)$)951>`x4Gsr>j -A^n?@;v%n3O=qt852tzvpXbt^zb@ht50YG|IKOC2akH~YOv~ftf{V>BE)kJ&~bm;tqA=d>~f&HbDsKY -6QYj_z?+<HTuoRA+)SqzH%m-pe~KTt~p1QY-O00;maO7>PFNFmeh0001j0ssIS0001RX>c!Jc4cm4Z* -nhkX=7+FWpZ+Fa&s<ld5w`lQo}F|MfW*{CabdH0PH$UcTi@?2^8A}Q`br*r8Kv%?EoQATD<f4|2I#v2 -`B>h6orCYF%vIVN8>v66mRY-NT;srWdxVsz(+7+7N~QKId+=@RaKcnYIOJ~M{-hrmzyCf9!JD?uZdD( -@Qwm4+AzR|c!#Ra&R~yT#K)HsUQAjOW=$Zyc^yU0cqp3fbq&ce@RCM4VDNK?HR-d9HZ7|C+{$^@Q~Tz -OW=tdn{_4ypLf-b>CCr$(x|#=nxM)+Z$s%BCf>J4f_0k0#ehjz_+8A~&{=rJ`ASD1hvg5b0+xMP7q)t -#v0|XQR000O897^_9YTj=YjRF7wlLi0)9smFUaA|NaUv_0~WN&gWa%p2|FJ@_MWnXY|Z+LkwaCvo9+i -u%141M=k5Pq^TPahDV!@8{NiVbZa0t`b|7^+Pt+8oJ{WTe5ce;+0Jrlj?Yo#^oJ@Q{=^bV^$gDrvMjf -IW3W?m&cp?;Z-+{CvDA*I#ee-|p^j3%Hi20=^4llMukTG-AYG)AwhrRE>H#wfJJk(+zzmiD+WVRRZ(` -bfu(GEsg=}@H0u0s^!MO7t!LQRxhVaDCXGi9zJn{d7wzs^oQo10S*lTAw#xfU`~b^TdUsYz-0{@YoW2 -S298=-G+-4442c<WB%Z9s2Fg-MVaqZz*fzz8SwTAJN(-N8MK*1X)lWIR{{Z(&V$kCr7s<+Utm|qdIR| -*bSDx<t=(%qi)GP0~PeZuv(>cm@p{#@T1Xwg8%R@yUJFPm@_B7R}MYS*K-xq<kSKtfvRSXr)g^)3~Xk -kEmq28?VT%+x^T$Z!+afg;$t0yZZKag#d!6&1UTAdRO5!r$;gyl1@Z{Wb_=4@sZ($0)Da8l6_8X=A4v -ck-P3lE-AJ~tNzVRP#6Mr)<BCJiZQa`di0ptNx4jfH1)!G)*&OB)jybJFP)mgT=RpLj$2s3lQ5r{h*g -G;cQdxOa2mYm0=sC`ymVGJN?hyYesAaczYaN@nRVxezj1F$BeglN83g4rQICDf_L2%!1q;-udJFA}E} -*szvT5ZFz*Pc_qsbFr;~dR3rbh>|byx!p$oc?^pyn3cH{7_96}430?1eb5}`lD-?Z!bk8e`#=_hC8A^ -dhX|I+>FsQ!Zx-56Rd^$~Yn*~+*`9icP!<5bQ-?Y8i&pR96JX3LFC!_hxm+l5=>`!d!8`5fQ<FVeZo) -+?GcBPv2MN4^kU$6n6C;tIZO9KQH00008031s8R^I^Wm_h^q0L%#h02}}S0B~t=FJE?LZe(wAFLG&PX -fI}IY-Mw4dSxzfd9_t-Z`(Ey{;pqfP(Rc*RM|<fZV;LP@z4$d8Z?+Q>?H_nS~}T;B~c?Ow_cF{zB^KH ->H49=Fe9NY@!@lC&mCVtsxn#a5@>Ax>W3f<!}m><TB#}nxzeDqR@xE*a#^5}f1!zCskBy~FoRsH686^ -CCYjH7((apWoT_qudwS34ld)LN>r>u8oCm?(9wF~-WSAC06P2vM?xlfJWle!#_Npl|^6rS5HV`tI=cu -u=L1Pe7VbDN@n9)(IV22fIVG#rvtJz(0T%#epU_+pC+G0O|V;~O37$kO44BXIE(o%pcS*6HkH8IkEDX -J3@iz*X3GsL~4Z(;~~Mt?G*Ga5(Ejw0QQBf=K30$J7tmb8mm90V)EUlm3r0nld#n_uNY)|g3=z*1I1p -MWCC<!5-?Wg4saQwNHb-p%=G?!jvhzTB(>u4WLd*P<xaYq)^>kg_dHQG^dc;7VstHRpjGq9Vh!rEF{q -jNpSbHiC~edoGFy?i%tq2!afASX;HG98a9P9C|{vvyp#na<Yvk>ACI+`rtRWRI?Fw=D*0@R2s6A^!Dx -v^FaQdwWL@Js;$x^1hWz%gfI%G@amGQ?h`0;Uylnq@89r8qiu8r;TddC7DM+Qiw^tN`}Pm?V-h{N115 -~A8A@R%jGqP$$?YMdHfGi@R!!+tIO*~b!TB@+cmb9AlgqhSeBT>k!B7Znc{Y>%>%k`m3_iIGY7~dy3l -HPRK7~*D(_^2lr^lz>>z-x8=164D#N3&fM*XgLdwA}NFZy32aA)YE|K&HQtx#&29@cDOO?|WW+>=2tB -eAgDyif*_xT-qc-Fq}``)rV^Z;6^)-KU=D-8okgo)tTJq&8zyF}J`s7HgXPyV_71pUdW}C1PY}w@pmj -g<tKU|EVh|4L_=irk!oapo@cNt{O(>q^6;+4bRH6#bOb`>bf00l$_X${<<C0DYI2<H-gQE;jm=q;IQ0 -mTI?MI>5r#ON<--6isK~-G{xQI78!dbjT^V*iPB<+?szI{kxF}Fe|}jlAuoj4L#C;?#?_n;6!L&DnVo -<425y!!C{a{Am-)O%ZR4zpj`kU4sWjUZ6}ZzJfs10+HUtUA`M5p7Y<443__%`KX52b_HyqCv@f-HvUy -#GqV%p%Z^seC<Zw7r(0l^QD1g?e?@pC|5dP4DCNjlxq9jJQUKwXHGQb5MZm7>Wg0VFHY6s*~^>A**IC -4-$%TE4c}bh_Q~nLmo6L4Tq1qr1+=yd<hl13x=uj{@5e=Z0fyxk(&WNG=5BUTmo+j*{$TL(Hyz{<8I) -?>-B@6$j4C%gbJ<an~`gsX~isk9qle5idw_FTdebG@54T(P(;w;TMDpChWRq+{({xzOHwNfj9{d%P@l -Q#;rfO_0FxgZhhz0KivBJG91la*KPlK>i!K-O9KQH00008031s8R!8(AF+mFe0B|J$03QGV0B~t=FJE -?LZe(wAFLG&PXfJ4KXJ~9`XJ~X~axQRry&7wGn@0A#f5n7!Yp?`D4?n`jsBX4B>7F*}NxUa}BD5HZkw -k)kGAOcYyT5(!o#8Q(kYqR8m2Ctw_x+kXgM)bzrx{7<(Ik!M#2bxCAcn5Kf7OI%mZjb}o6~F-`vN9gB -|$VTz<v%`)+GOmf;c)7^F~H*vts&v;zdnz4I@WKM?RepcO1`0K}6k@PU)?B!oMi92r$x!ZsWIgMBt++ -$}0g&JQ6MDBbt(ULUIHWL?nx0hJi346~o36$9zY#MH(?d20uuXyrD}0MV3J}BVHJmwBEj>K2V#2mNYd -A?)*FDw1{%A7@y)GQgajy)ES2!W8`%(orUn1(NqPSX{GR2x$VfvW0VNsNt}{dg}@AC!x6Y`+%ZVyx+< -gLq)E_@mN4xANC`6zxsmX$QV)ofQlLdLFjUH6z)CFhqA|@agP*H(Dwzg9++nK3=nuik5;VZfrOXnYcV -58g2Bqs&LVrlp7|i|CghX*hP$MudH#z46k^v8y&Zf6GA+Gxsps-2_L8X)hqtHu|FrdC6+oHS=CL~}5v -WncBJj~WvmGoRL-zDeGp|ui@hIO<M@DMTlGRASTQe|q4uA`-B%gTD{M5%Kk1mkauAf<kjoAwTAKT98! -iZTX{QOcmMOH+a6LA^dLJo4Q}$``R&5tW0JTL1&{O&rm+fV=|7tk!)68JmP2r~v`R&2l&<{}3kTfq=0 -y`a~h2q-d1gUS#B(MHtFiDcwuiDd%B9IGcGH@ng!O<7_MDfALmiM9G5jT0#7Pc_S!1Ybw$x1OJ4p9Az -!LpK8H3aW+Gm$Saohdxs_Hu!1}@*t&e8$deF?c3w*tp_dYRo1~O6$bYFKm55NBvC3m<7(zr3hI|^Un# -;0PNO|psiLX(%s$UjY(z;25@r*Ae24dZS-BE!$i60+ETjdNZ$9fEHC$d;G@=V?sF2S*|r_?Q{G1%9Wk -?krJVj+}~u}XnmT~Kin++K1zmAN%35Rz1mgU!IGf}tE_5aU!>1=n$`&MT6nvA-BYSo83>xp6_JBz4`J -8zQQJ6cv>m=y8NIl#Ot~7^zB)qV|7%nR!z{^3u$HsTI$WH>dVMcb0~AKRhXi$8nTF8Zmp|ES(S11dV* -#)|6&N`WUCYEK7q?PR&`m!@G9#)O^q`rO7W|xS+Pu=kpDvul0|c8xoG7<^h4>;O;@yhBBLtj%B@WbKD -^L(z6Gq{sMV-9~|TGz06>Z(3!0cuJj*0eUiiW9xSV`!Oi)@=0rUax(LpCw%WIlo4`Qu&V#Pq0ga8p`x --#&F@QbLN4x7jtdH#!sduqMq|?WWbQn;G)OnOhi$&nu0{{U)ZqSPdU4HC6<+0t_!3FaRqtY0j^fgD_f -^kMX_To5nvlK$~8ZMeMx|hZ$9&`)#k9e(SBB-A>7Eu_gw|E!^2@9C*82D2!ooK2tzLSvNf`48<bC!^A -mZSH1s5Tr!+?>E59q5f=-|-ueJ_v-5xdV0p0-V<Ww2ybevxcF}4)iu}aa`COib5^T#LH&3^S#>QRmE) -#8`_D};ss<9gtRI+Fm<B!YiPWDHgFtgIpjF7s@bFd@$s>7(&utI8a&*?kTd{~j)Fhcn0V$B^5Bj*Oha -2m>F#G)mN0(3Uo!Y*n$-eLxYoa4=^wvw8_#Z3t!eaIf49E9{M++&Gic&=SgsELeE;^%lUD~sDr^07^2 -$q~Q>0?m;02s`kq>Q-kL?2j<Ju1kGi#C=%!IrNVq-6X)#SHD4DCCogplt0>vym;>@f4Dttzw+uYbD!; -r*{yuYLgRJB27sqBs%1ru>>I4|QwPCl*Kh*QUdjJzo`^J7?giAlT4(7;gJ<GmEobSv=XuVrW!tyzI*2 -M<j`(JC9G3!VPs%gI`bX+}I+4$kL=OhuCP80ME&l?*|$5X<kT{ar&9JUl=JHoimT6&veB~RM;y(6P5Q -}{GptJT_1*EKF1Odx<D~jf-GkN1Yd&NjZ4vqZ3NR=>o)hY@eF&mlp2#D0*OJb3JXmp<k{Hn@swy1Aq* -$NrIGe}_!%!!7GsAj3z!QDcF3n+5-3q>9T!ex<{<?>JrEefZ6HCZaY@=+bFhIGG$1uBWt%}|R}~L!)J -nBxo=e~zMbowr`QDh52K!ZJujhc>T@Wqk*5oLq-siG*{q+9r#hKauQ_XFTOMEYbPB)m-qC^?_;Sjd-& -{@-z!k*e9yzWA&T`reKoYDX~V%V_HTVVj%pRQV80=jJF`wm^&cj)6d{tU_ex%J}wqTTDg=yuL~r`^_g -X7-qQZp^ZIxV{TquTKGsQO^A(>baCj|L}@(x;gX8gV6E819LF%jHuL@8l+>I7rJ?&8RQzQGFv4x8j*m -NhX_&w{2wefE9#|r7Yj|3jzgTB-G;%=@ZKD>VNUx-swom@ZtZ0&&KWUD2=k(AYMa~;-ri=ri>p9c+1- -KJE(Y%h?aq*6Y8z6$P5l514i`$YMyJ=^GDn<<>hwqf^?oVJ84R8c??EK}RLD_D1YKw@rI;{tJ=O)4ME -*eO=X&Sj46e2q+bD}rs3|o1&^`TnjXvPu64=<MFxo{m^j;x&o!mmE%DR;>`q`Q|jCd*iO9ZO?0MF-p4 -0{a~px&^rV<?xrpP55Rg4`;UX`fr2cCN=b4&%L6#R|ifm;pJvlgkTHDk9V3ata1^6)Bqr<+3yjL7H4D -Mxk2zjAs=WLlUslK7Fy3QwKz;7lgN9oYNlh(1_%BSo)zwV8Jx<vbc=Hk4@4r&+)JlzAV#}4JXWtkz1H -}Up%1v$i!AZ-VYi&?k;MSu+XHIENlNs*5oJAd-UPnw@zOa+Q_|37;<F_-6UOv(uJ1za$-j7*&r75f$^ -V>s3*B`&8$zg>aLW+g^1e}!(#t}B$fq!Y`@1RauI>wu30((!>U+Aim+ev2oXJ=w62j6&7gJ&5BP<sg* -!H?6U@{(Qx5$Zr;SYmZ}7moNHmXZEH2{Mm?d-^Ojd-&^NK!5pOYUgG7`@NxZpb`w#5NYo%yN$Bo4!Pi -CqlA_TUNYreJF8T7UN{stO=YKe(cjM}=ZR&)ON5>kx-3jbxU8|MD|=5B8pWn+D$*luZ$8g&U>(+m5h2 -u*6eMuD_NRup+b!;j2J2nv#IWDB&?4snY!p(|MMaeZh&=KiqNYhg|i@B$u<hzg^!qjW@x!K;pK@)4~I -5HZ|K;@6_s^p+$>(quuG&*c4JP<+&QgBn)^qh%~KU@A|<s$i$0MoY)p(w+~RVdLJBGqw8bWst;IxoCI -Ro`FU=GABTOd2g;h7eT6HkfWDT!QZtMW`lxMHp&gNZz0<P)hv>fkOFTGd|11CDiCcg#@9})mb@>L{b? -2~8cU{Fo(<Z4moqHBW{W$(YQ;sJ7R{}(1G3*EPf0uYA9>sRCn7b^7^J9g4+(=+oo2klR6o)>Urm*A<X -A~9>JZB00XM>hBq12)tKMMC)(T?h{Nox|v^@MSzwP$MNrS-G<B>erpgKJ9y>BIdc+&AcS`Yrrj3bX@Q -2L$6FK<sf)MzVS|AR5=NhbB)02jH*6Fx*CiV>R}p6^A4A*29+sMx0Iyqd%Wf&!=g<o1nb(PS4JbZm*7 -Po3u!$ZbHWyz%74kiI+u4X?M;I(`XxQ0s@iti;mGgyMX5&*1Wc5`lAc$;?(QHLS&laa^ZETWp>X^>%8 -0T5e#8YPl%J}A)a^DaCUKA<%ePZVxBNH9(}sJQ!w!%(-r(@6pBaE<9HEeFw%a|ny?q}X_Q^^w>3xq1y -D-^1QY-O00;maO7>O;`U+4h1pol36951h0001RX>c!Jc4cm4Z*nhkX=7+FYIARHE^vA6SW9o?HW0r1S -4?%10a-wEbfKa~HpR9FZ_s2<!9t)V%H~EU1(J^AF8057hSZCGWQ$GO)8-IKoZ)CV^UXISS6XeMVRloC -6^L!4w1r!IoKz(EY?SO)YsE^FK)KsC#!Ky?5pvzh7xIw6HLGj3s(At*8Y`4!bpjtH-c0<K)beNB?YPJ -Lc6lS#=)rnpx$dNY-hEiUAC?nX?&^B9Fquq>ni=C1=M%ucD2f)Kxh%ORCt$x3#ReM9tv%pHNb9xJiBn -(bwecJ2&z&_kR!`?n3Aij&$xA4iWofS_(7Ln`yHh<ZmBh26;RJB!rvy}cY&5dmZC7|4RY9>~nic4?0j -oL-t3wL!c*S<Lb<0=7JNjrqyi%$Ttlmg>v|a@>5ZbxdJ3g2)kD|#R`N5nqb%!!=GN~;2$za8dC@8T!H -2OQM&B!X3W~X`1Od-TMA5Fm;4u}P`EN5PA2*Qh|iw!Rx^FruiS2KOa_%$g&r8M+PnpYgtUU2hLD9|0X -&n1&*j4nt9OSS|iOZY=pLJGvp6RUSG8!f#A;sN<%vrx3lU^mP{q2v?SXvZ6F7tte1z>0T}>#cjh(OZq -$a=W2&>-V7k7^k6^1k4c%u%IrYfQqdYg<H@E2Z)Oq!V2@XgXe}krzqulJiLe3RT5Oxoa!Pus-8KVtsc -nWDmg8JIgrmNq{t_y$nNFN&*UsfFX@D6yYQwSI2YtC2If8IJ#=7rctBP}R-pfMJa^#Jteo?13bS9G{= -iT~M5yG5IHurEL-NWzImZEfXj5_oD9S<RFQJHHN)Baxa6|bxq}li(R12e;g^!_XAKR?I3l-YnX6^OJ- -!6h#e>W&hPoac#oE<locnYE#Q7*?69QT@d8bI84v21MjC?CC6DpkJMtZ6}WMnNGXRKz|W9=^PObFGa^ -UX^{lQLD@;pF@U=dURkC&0Qb<QE%T@ZxLZ58Y&Ly?#8jJ!QSY|R;@ns!n#xd(<@;$ai$*;`fcH0(WM4 -rbc>pT?5sE{-?GDq`dhlEcbzHP|90#MQ1JTEW0a~3?Xk<>&?WuEwih@#U`%KkLqfgYM{MYrZNoHN3s# -H2Uv7T^eBX2sI>!AQ4@0LV^OgfqP-|~F6n#7MZ!sA8vUvS)6i~x!2BhBNU)=7rJfZ;inF33`KP3{o;j -k7@TpoRE(6rUvQ-8sE%UFhKowrPd6owrj&2!23IEUf=kCEX29|?lge0w%HRlhVOoY6d<7CKe!AQ$c!P -wE<Z6%j&XhwF6o?L9x<-47-BZ7pb*WLuu+kYy0%`IZTp=hz+Hw)QKX>2<@j;o~)PFkZ(=D88Lmik)${ -MU34#NsNuP(885k7Tu1%)7?R$>BvgT$}(r|_5sfk{dN%z8Ac*tPYAH+c5(lHw7%hWlR0H7*h)A)(lB$ -pX>2KEtNd@?ITItx(QM}H=A0LIw~OnWyOD%CN+!ld<~<v_wrLphHZdF0*ooy1`&VOc(M5w%Zk=`)a@! -zAo!pU3BbqcvjwzK+2@NT7u2D$9ZPu>+qu<fVvTnJBJJ(w2{8Wk&L{UcQZQp72VZaxHiTp`j{0U97C? -rRR+xGhg;gh<Iq?)sGRA*F%m$%WcR&oE9soR_rm^;^>3*K0`aTf#}FyoIim<&#rIv~bX^wEz!2pcj9U -;20aq`&?GU)-jz(P;KZ|M|19@$Bbm5Y5&ikxkrto^<5v%=-H&j&-WCjuYCL{sT};0|XQR000O897^_9 -IKf!Riv$1wv<v_M8vp<RaA|NaUv_0~WN&gWa%p2|FKTsgd30rRE^v9>R$ou!I1qo&r?7I;Hbo)(9%v; -5<zSC;2)ZY&IAob*(t4ZNIme+?i0^)5$4MF}d#lquT^}Hx|DO5Hj58$*qPHa%OTvp%DoqyOZf5lKVs` -r5<@K*2IT72Cobg15<WhrTk2!?oidT5PgTHDJ33wjQhH9}#@Ru3mB`+iT1R|9xQao8ji4>L0p>=oK9B -)ygvF>?RFKPvrpsCYwoC=l&2;B<YHAlz97z-{~PW1|k&db^C{N(G^f-Yva^ULd#E4sLt&1e60;9tJpd -_xcPVlls>=fB_1PZnfCeBb}mJ1!NFN^f(R_?s2ia9EWrff&h0@(EOy%gy0)%xW!<axUO-1$?>Ev5=}@ -`B5f?KFnCb^KCo_k;`y&2H)8qHMwJ=B6BI^C~N{`RX948wc?=2HEc#<flTYnpS~nAh1cWH=ymF0T%PA -8s8EqFb-BgN^_OW9fg&fQT5-gPBpZccla(%Vb8;F)NDYrtt|M#CD5a1QO1a>g(x8Go3$0R&*H<CY@T~ -3Um>f>YwG_^k`5EEJI+$3MA;V}Q!~ENEq@Yx^-~~L^BF%vY1Er8~k>qs>afjA>^!*SLc-~JxI9P9(T2 -`?^zO`ioH63toFJQ#_kW;1^2KC~bus)YL<HC>octg@K%xzk_`F`yTAOhPEJKC<{bxfW}CKU<RA$c03u -w_M9i=qm~Mt^OH&d9)Ud&hro7^`a-&QNb$fv#1f@D@XJ{>()WpENaSVS?OZ520QQFheca8rw-bs&Vu& -swk~;sVhn`_F(+e0EmhIu2KE4PttyLbo>uc((wmq3I7=`?F^ahjy1eaAF`cg6$<1yV*@7<H5qc<)DmT ->Iew0Nb=Nzz5vQ%Sp#A72T{E?&T8+m#%dDTb^80bV2jc%fbUT#o&uH9j#e27h9xMQ`>~V)ts1jB}FdT -iIgzJ=<6|(uWsDBfTQAQYG<`W3~Pd=vo6D!Iif80}#Ej8Bz;?xqChUmHN#@g7;9=C|bl-)mAE-OpCDs -6?3(aA>*&x$qMb@I_-wSF-B4M6PPv$)kt<|gGXS5bw_H0Rm2M_jyHVy7`Iu_1C%!&@xxWO=-6#Cji^P -_^wr%ZW@UnygcM4D8Lu199gd8y({w73~^-F;-r2sTwveRl}Q(j7Mu8@(P+|wQH)4C&DGa9tJh^#K=lP -hF*H{SD$DcHlQayeax9y_rBS5)Y*DdL6;D(NnHx|MG}3NTm)TZo9nvivF8;NW#$=T#!(6r^T*k9*tEO -4X_S;#h`a5N`s3p_0K&eR()}FlUm9Ig{M?ZH-e}RCjWc=w%n6LKCZI-5t8HHu`wqOk+3J-Pk-J&@{A- -V_BD}N`)RDX%d_zX?KBmSg4j?EszT#2@&b8F%5?9$wDY-Ktejyjk>^IYSBw>iH%?ea=bQ_MWFc_><0@ -Qh$EL08Qj*Z7!w-+M3as#l^EYBg0I=K?pxvOWXI6~;4-*Lm0_r8EPN<MFG@3&D|6J7Owv;iHQ+NHGPy -LUVG{svG>0|XQR000O897^_9v0=>K?+pL|w>AI(8UO$QaA|NaUv_0~WN&gWa%p2|FKl6XZ*_DoaCy}m -?T*{V@xPve<)4xXL-^8v0#w9tj3kKT8fT|KAqWJITuF>6k|inMDTjN5_D%X!eUi@1?(7#S-8oI&RzL1 -U?(FQ$?0oNP+qZ`xzbS(1(6#*-JpcMd0?)(P=f!vs<Gw8yTZE}b(T{Cg4-8oibyWyC*mk1N$F|pFqd4 -ru2vg+vxbH<?R?Ut9u3xpqdo_0Itbu3|z~|jx-n`6SeE0Ij58uE3HlbJFRK+O2eGh2!n_9@HSJj~2zs -?V$e0S`4<WJpLwM|~jr?=v-N6{2&%mVwV0jOjVFC;l>2Aota(?btgFNU`MpqNeby4p2bVECX0inakb! -9y?PW5Qn~K|>N;i>8!3ygPM*pRdJmtVe}vU+wmQc@Mm5nTf9d&b(HDUEYYALEhj45A?7BCp|(>YN!`G -AjIIsCq2|z3nD>D&{xGi!vO^|h}}UnBZIw_k32Y@j0E1|1M;|7R9kmfmn3|e(^XxXeE=D>eTr+PV=pv -{ckq3&SQK?W48g1X)E-AEuE^|nERls__#C)u%IZT^9`ib=2|VZtK84{0!AbU)%(#4oAWPDwHT_XsZ8o -sD1pG1Yf)(lEI+TQjiNdj2NSbCrY@#<FD=+)L?W31>g&^H9jJ#sf>wFYtAP`P+pyt1B-*$C{CKg$!41 -#Oa_W|b)3N9#HF$7IJ2I3Albg*S_>bwy9wniy9!i0%nLrOrXvcYixr1=o!iie;xbB&N~1z!2O8^sc+6 -x$%ns-_yVEE+_;P1K$(10z4usHM>*Ko^E_@WmfN291!^;s@uaYRgv&k2@%Jb0sm_6p)51>jg@jSxKM< -md2o4X~|2^vS}VsW?QtO@U|+)J*=;$r-%G5qjwr&FHk@hh<X98mER22FG9W6(=^wX4D{ewjl{KKi!3j -^mvCtVcJ#acA&BmYmWSXjxR>}J;?S7`Hf+sthD1FGz<C)*tiPQqQJ2zPxnz+$O$&i~7fGiT$u;97_y8 -fOD)M?29;&jeMHnZ}WZKu2*=l!`<RC{a<&5aHhv=s5Vf!+PFTAObB6I;HZ!7sPu^427(#8n^)fna1IY ->zYY+*}tZJWk!P_j$lq$f3(@4oT^GQLB_g%F#eugoe?QL-OWK7chk2Z+BFBSc{Er~nm2;?VwF#nOtah -Bp+^gpaL9j#W&|V_(%J_=lyAvD*1<k~wEfL~;~glLw!A)Q!W!H?%ScOogue&^Eha1PVYWz&#NSikBf> -=&8^9-LQ0aj;ReIrdIjSI9>+NgXVa+0gu&geUvs1MMNY?rFp$5#=O}b>%8aTu~h;~ZBDd?T(`GcN%)J -=6nX>v>JTO)Hev1C+rd>B)D?IeE<Q>%z`Blo6NGC^2U0+@`R70WW}*5o?fP93oD%6W6XO?qgHW=7epW -is0f+5$EmD)2RO5cy?RF4|?wNj-NeU=dIZL3S5(b4xE{0q2OVve;J8?;gU8R%mPGM0iMR&pHiV)(|Le -Big4iZK5=PMgjtJ90NJ|3E1sZj+@o>3|}@LTAW#00AK_x~@|lEYKoQm+5ERxU-&Iqg!^JW0KPNlU|QT -gaZGUMj^{EWR@Nzn!|8G|^5DwbKJl+g5iFV+=>ibzw5Y3MW;;_0kr$$gh-IRnx^wtBAq`ZG?;=LClyF -l34AmH26krb4bMoqyZs}OD0W^Kz|+NTssE9Ni$a43St5xm8@UFhv``mRYc7UJ}DCdYIQbs0o?(T<HPZ -g&7=KMj$XufWsu3r_B?TN9QoYVP$QsdAHn#c8VD@9Y1`UC`ez)ez~!9I5%#V>Dn_;2;dBVi?Vcjq(vF -jfc1TOl-#yIK6Rua8Q7^;!+SRiSERWk@CViGT3S-R#&6$GZepoOd@F|SFvr8<r0OBff_iE<7lK3(}iN -g>|F)?0nrX<QNgId|v1^aB*ebSqI6%#7fiuiE{9KBpQ%(#G3r<C_}hg6VpY6%)(ty(d+9#Lx3mpaSl% -17(ZniXXec^qXXy2xUmG!wUHy_uC;cE~&SHnP6IfA9e7ws?=e9h+KiX{%kQs&7?s=$3`jeTOIqEO%Kn -32mkig%V~c{5}t5?*~KM?~>rkpF$hNu=IdHvL5Jq?C^~z&6&|6n=RXhob+9HGZ=z04Xx@jUqD1yV!GQ -TD@$LI&(X!R3{|wrI(_i#q9KTsip885F^V}7*Rm+kQ5&P0M{cEvU?tw1BNf!jmmR3rq;Sg-5M3x%a1e -f-cGippZMAjMHq~Fz^(C#VUDR0#0RcFLD<KnOfl<gOv8UAho?A+n3NIaKAvj>`&I$`=+BGra&D2CHTU -~PFscHr&x(Z>_)U>>jw>ehX$EI}aFaFM&CcTh!L+-kkRP}q*Mi=UWGPr;&gfi3Z8mTF`IXDncz>yz&M -kV`qu9Kf3*`DMp3Aqc)MZxOWuGbAXS3y`W%yMq8X-d0p5+SuyO8dM5d;US3Wb1PqzBU_HL0v`Laj$w( -VeC_{csgTKSZNre3bA(_&L}kXm))dw*tfS#2k?F@U^UlE&9|zlMN~Td?(&f-Bdy8p?c5G;Pi==YJn}p -o4~M+xE}3bZk_ZU>a^dU%wSl-nszYY#R(7#FXH?k(;Y)XYRYqN2;)%{GdIoVK3E=Ou*q<ft#-$e*CXG -n^xQ#xm&&Zho1pz7DNmno|t3&A8PCO+(1#&aUC?jMqA<|r^ObHSQ9Gy+Ew2xsH^VXo>(vGcYvs`A~&G -NdAyCYN^s_D25?c({~-z>C`2fruDP0f|b38gR`ed$GU><1Ac;-#{YY1@4!nZ%Fd>=aQK+#Rnq>#K+}* -p>NFTUxY$C#)w5PI}mja?^5}e=W=E$&e*gTcR?5nz*e|n=P3vl5?&;`AoGOm-1xNX=FG>idAmtgjh~7 -^^&SiI2%4&DCqu>%raDTMaOu6RJH2B1c&3z7f)%hGW`MfRhPk=cBoW|nfJRRo~sS$agU%!H<%P0Z(={ -Ddo5Reh!xGT7+a-)ofI@G&(Qlnn+ar0G1LIgqAUo=bOuHnaUP_&ldefVuvt$`#z<5xr6D$!&p5e)bSj -!zx5<NZd4omqpk<}If|D60%QiI>f3s^S{Fo;}2bVgU&qaFcoRVU_W~j((jGXuU!VULsBDG$k7V|zCLq -eY}jY;M%Pqv+T6L?;hnC=SB1fn5E6QJA{?<mkxPgH(Mz$>LJ{_>C7gvm~*Uv|z!9@FROQ|t4&9ZVtK0 -!tCo7JJ^1Li2C3iD&#+j=jeqV$lrPqP#iL|M(O8GkdR$$wj<SqHSbFEwG8Gq%;2yOG_?d32e-Z_h7Gd -utf!_$cuf@!qonMSb!?<Su#8}#$(LO<XT`OoS>*tiT%V1NCi4Zw<ah>J@r)9Qe6o%)JEBTM|W%HsrZQ -|+dY#@LO$O#$8sAyn%(!i`B@a>yf~=_GhMBjh;*)<XxQ$>wim-b8w$vJSWopOicsB|&`D?JR-7~2LFn -+bT&EzHk9gHJtVpdC>w6j|Ik*M26<Wn;o3+;!Wjf<Fvr7$(j~1m<H>|A{Hr}@4Sxy2jy=uh3MYq-BQB -&Pn(aZr?JU!teIuu?dvs7WG*VBZ9V+BL=ofN6)85Clo8SqVX;T$tQt5Y^ZK$COZizPvn#dG`3R7kZ`E -YRPCPW<e~>>+<IGKn(dMw}8D_1u|qdQcrYbqCDR%@@5uBh7=dD$tGQBev@X-d=eNKu&cW2YFM~ftKf$ -CR327m6(hwvebdzGb*xO!Nz9eyW_B@yG?*O&ASf7X2#l155ae@dR2lL9;L@DCh=#^eBD!Ed_EPo;3I` -%-Pyo7Y!T2I#qo^M@DcE2z4aGYt{v#6tnPO38@C~1`o_}|R#&`P4kVgWbH5^2N7?p??atij^FO#*k&o -6XDOok~ykSNN%Q<5<shO4$_9WYW6lLVfDhb|;)5_e_jjk+NKUj27`D)0qy?n!mMjvrS?n1X)zNK6Q96 -cwB|E{NZUAdx4PhhIdJa%c1^rQ_7!E@jEU)jc=2P4`O28(Okh0TTx`wq#)dxFk&fZ6MU>=eD5f{tQI- -|PEAn+WgXL43w@Oe*KdRl{=?gsrBAf)v$q@QO}q?T=^ec;kzPPVKy#xS<_U!i{^BXGgv>0a3$F;+?ex -lQE-7^Nf2=cs4vgB`l{V7fYrTssNhmZKbEj<MXeM%-VHKPoqBJh1&}$*jX#H&Brx6{CvF4xng9yQ~tB -?SbQ{>x|}{4T|tRYl|-u0>_vAp;`N4<G$Vt|n;qYCirv7P$sd2f4D~Azdk_(LN+Io=$x1)u^%3-VCN^ -d=bLCV(aju@u-PE!dhJslx%2%jn!>^)0vSmUG<Bch2wb*yp{5ccYVSR3O;5_d@q!G8Y81SIPp5kM4&O -c&T#BvdG?<VWY1AIC=GSkjLF$D|yMMg#?N0#CFXPCj>R85wJmwuWt{}UI<C6BH6wc<<HI;yLrgkon<+ -|$rhD^MhF74Aij4m+WHD62nMjd}$}*A-S*^6+vMA|K%tie_IuW2kN0LgK@44pD1~Vw0NQltU19jbNfn -<xN|jfJRBnm$8SCM$aNtH`uJ{9`fPK(8ma`Hcye>*me_I_5FFDg>h{8FwI{MdG;1`+Jvb*|B#q!u^q1 -_`0?$O5oUg)d|!lH!z~;3sa+41m~Ke^3s6e~1QY-O00;maO7>RDpt#eu4gdhbHvj+_0001RX>c!Jc4c -m4Z*nhkX=7+FY-x67E^v9Z8(nkUw((uR0%fLSGNoxb@sp;PsUkVHVn^1<a@zFfhN5^l9U>liB|u5nO# -XX!0gwPl;38$Fdawjycd@{JFJQLWHmx9h#}8I*vms*L(qhT#Tf)@L+k0Azlw5vn%Da?Y$!QI`+fv?xU -A09?Z;JBn3ce2W7M-(CDLJlpDLE;ss<^3WN<K0Uls|0+YwDr`;`C7<7?MayS#WWnC}lm7TPpIhsd-cB -H8MTw0Z!B~?f<x>^^&$~IrFz#K#kuw&7Gko+NQE-;ZRSmSVi+~+dS_2`5)lR1%A*FzjoW5plv_>qZ<C -i9$Bp+Dt1rvRxaB^eS}Ynk(B&QTfxer`gBj*Rn<KFM8&$%hn?}VrL^wRKFg7w5^!#V9N_PRgM+dvI4A -ifUA2_2mDFPOD>*tK@DoMRv6eRcDg>N&RdLcPj5s0isin7FRRFIwY~;SEcm`Mp5`9TmB+psRM4rc-R; -!fY?v6-=JBretP`;&Y&M6%2@`%8u3XzbP-;wjCriu^zL40{QWG1P&6H`h6HvQ-#EnxuwliC|6X08K-I -LQXqmj&H4_3WzcXkvE8MYEN=3Nef1Gft88fYf$%2<Kr9x<cwkSlAB*6Y*>EDzwSOpi2@=tj$4Xc?I_9 -Lf{WujaFeimuyZ!orBK?xev;Na*S;ywk^gek^06-QInz*&C71PECkxUl;@K1ZB^_@vjTt}xrJ{vX$M2 -h)af0!x7;vjrb#@u*+x5y<Op05wLwMWteBBgx+=O#aGcQ}ku5l$HT=$o<$4bi55B`%q<2oeKLJzVqNq -zc&<DX(74BXdi4T-Kv`n4|Fv7*M>4aHaTXlTXG?laP+gk3bs3cKAd&o_*r0(8+0K24yA_^hb(%eHApn -4n1$k_@{2q%^)*)^ToQ%&g-7eL2At_KCVCQVDOrI;y>q+<39uBzhJWe+XO679s4W9bwe9?!eY4R}b<8 -NoIXVgQ<GXu~x)ExJeIZ_J5^wx~G+Kj1lzlZt|W6Rs*XHKC6Tz}E!_eIazUq9q7=4d<`Kp!~&NIka@i -T0qN{$it%O0pT-lS%Ig7H{|+y+k#eIUy}`(&<!OWr_1T-`q!jw`<yiad>`d|9h&k+$0ic{qm{GTdw>H -{>!My(&I!w-gcD}CR6_)6*s4*2(DvwZ6Va+-Th4f7c*11B_7#0%F`qBS!G7U4>QZCi3P8<vOwQ`)%(L -F%dE%cF8&Z!WGi%OAj6sY->IUiSbnKZdWbIm}SV}FA2nrk~r7oskpD@6nfYUveslzouzDcLH6k2Me_Q -BO0MGZhrl<p{yA_1mRkTjqm_A&0!6!&aBu^eI}FyV7$-;u+VM4pLF#|7Fi07PycVJq;=QWzJi4^gurS -V5d0{^T;`Ba?)JEbJuN&V1x@I*QD+!i;7i+878a*n<hXu2-9l1-=I!J<@C}`UyOwUM(H8XAs%hr#Tnx -Ae}IpRHq=?2oIAen3BcK_^jA=mp`y2oTfz&Di}WtPS~9}7B?1wC|W_6t^v6)CSoa*KyhoiNC^+~Q}HO ->Q+d6`w_6GLxA4?F+r^qjhS}6`M{JHf_iSXTV<A~p)66QEjN2VxT{>}+PFb0SnbW!aKcLEk?TX#t=rM -^_QZorYO3ye2hzloc3d#hMauQ!mA#PA`nt-gJdaRa;uB~0YFyUpinPFwuVR`fB8SxxWK0X}>1Xau@9L -v2p@KO=SKFm7G(H`yeswH+5mHXBu<Tyr2+wk~cIK<D0rp{W?#tgep1&xlnrG;WBlp7yc+)9e~<aV|UO -<m?G$%aGijeb&vspFXntIvX<c#{U8#P1QRrmQ_hV0D!pOcwWe{mJ5HHdaM)nALUjke6M{n>JR0^RP>0 -0&3y{YvMg5w;i}1CEk1uWvAy9V3WPpO!g<*-JZJFl)U3<`dHGfAaCU_&<;P5udr?!3ZH^iJS7j1+ZN! -rWvSO}b!Fiu+dH1AIF$y-f)*kkK!B-$e9Jq5-8D2t<(jHpujwFoR!eB86E_U>I13Psn>NM6QYrS5+D) -HJR<7aCEvO=tTXOAw>rmM)<(BL^8aUigSw@GpP(d~g0O<R|tR{Y5rEp{iW-1x{X$!{vitgmO0d03fBx -wAoNv0f8s3-FzqM34OPwXd2Uk0iYaAnW&HACy?&-<Ga3u5JQ_IsOAdKeOe)F1E3TY=?ivI^-$K(3RB^ -%VhShx~*|^IUZmn2}B^8l{+30eL#b78Pt|k{%3e`BI+fo^b}AEpot(!1`M5=|0Mlr{$yZK!=H5Y>=Vo -_OqYZz<b!~t<WT^eGW6%O`<*C+kqdvc(Zk!xF2QTe#d+5J;)zyw#TSgJyvHgoE^cY!OmiI%;XdK7{yZ -^B=;_2N&!di&tF?#Zp4$EI_rxkz42uKu1#6wRGx#BOow1UUxp6&oQ8vZ&_cIual0vwu<KT$b=l1piVa -qM+aUd@x@s78=9TZ&YCfA3*%r@}92J3`1t0fycOXROcm-xvS(uN{zb`l)GKa;&MYso@HSjLzi1dw3*u -Gs`1X~k!<TU&6q+H=pG;R<=BpRBMcvqo1g?3Qt6~kkmnCd^tO${bB?l1I856)G0(_@`K$tLM=1?Rcn@ -HG@L!5z@27{e5HS|Aq0k-CzMtd(MWL#c(61nQ}A3naWHObMU2CDl?f=%FnsxaVyNa1vXMe9k|tN2dz< -&nVKk33TAukXJ@NY+n*H(FrG2@UekSB_A8!bM;~W0UL^r=}=8u5YK4@z@fgA`L}yPhWWnC$gT8}TJ4- -m=><pC@@NfmIwbS<EuOWqza8Q2&W!!9y3~#hNaBmNs`Fs=9ELN}cT#;T!8Cryw}@XqtJCmBl704Z`Z^ -Dxi%q=rq7S3%%+78(DEv_8;?lYk^InJTX<)FG?TQQwpva<4f;$+s3Uq!4D7O5bR=GT_6RvsPU*1{Q*u -7TtpTfS%60mh&jYCW@wDvr`5SwOLeA>y&e5a(h7z&x*1ZjK>!Focz6*;@uiFH$F{XX@p5j_m!LAIunw -c)|fr%r4=F;urs&Lq%V>|g|{8%5=zXlt+^?oWdI*$n@PUq~gbDiRrPB6)47Un$`04y5|R)6oI-50+V; -yw+cp_CI5UnLdp`je$S<gyRuvAp1A^W!*wNBcH|^zELdUGm}}km>KYgVhyjHy;Xu=Uum^30SpzZ%WiY -Cr;2+*-5g+CKiV2sF_O!8LS)h~aTzxEEH+Xi4H4a@R28V38DAr+>@MItF^-8ZZt-QmMd^e&rK-vXpTx -m4|9`eUI6lZBO3JzAdHAT7vD_>_lF#w_8)g%p7N*z;064z%LM>`jR*yDhu0vFfDNng~LBQrMOmoM<PW -8{%bn$m%_EjeGkxl{W=>6zyzasK35Z}CTQk4JcnC!w89K&!6DV}_K!&W<DUq@Lns}S;q6TVm>U0ty|d -;ml)`ppH}LV;&ofFj+>RAcc+3p-mkn^0TBlQ((ctXmxWu(u6om|P4!feG^Ti!JdPnaeFes%3pnrz<T? -%{#TwXIp2;GPSfYqAUATzEQ>w$6g1Q!~<!M+}a=RX`I+v@COG640{W8v7vcRW-}7y`KDlXo=4#TucIY -wc-d_1FQ{&EtfDlqFCaG@f^@knD{J0;k$cKY(Lchy>b89*t=^Ot6}uf?n;zr9n)E-qwE$!<+j`-OcJ# -4-*r`CaMNNmNwih_CCfm+Xzw8{+d{>L&ad-zSN7l4ZT^{`y*3<{)3B}3qG(t{jdNWPRXyA(%FVKrtO| -#9hF&y6)Rfm4^Oek5-uNKlRnlT>YTqWmMi^cFnQUVCoBfF)w9uR@x$`=&!;hfY**@Ko#4Gs~-nyb};P -aJ7plo2`^-?pXqtm(Ld2k;uo(%7P)aCDl67Y~X%=a$R5BtVuFDOTHz7~mbF)lxqL8Z95@%1kSC`S521 -1_CfGv1lt3SL<~THg)q_J{9CM^KeLuRp>%Osz4mAng%NK=%#4Zum47g0n3WzGH;uQIC_n<-{3#rMw(C -`p7N0sFr59;bSgd+chtGxB76;6NL9GQ%oTl*N&|++i;B-RTUs{<vX#)k`IGS-e3*JdjCegq1a<?ls<m -#7GV6S#O~uh!O;!aO`kXBwK+RvVh4T^*UwS???Ol{uhyA%L*J!izO#uokiiKp8&tEOF%w9u&w(u@MbH -r}o8LGjql$VMw+HVmyPQl+r^s(5072t{ED|Y<k(ujVy*^(ye(o*(o#^^5M=$&*x0<Emw{iWZV_RM-w6 -r*&Iu}{WH4_mH_`gSby&+kqx9-^OqxwMCGzc|A$pB>=iFV67Ci(l;F$@zPG`2K?fd~)mz&(58NPCtCG -hwr|>u!omlzPE?x|8}?VuXBg;sYChdpAPWVdxzA|=l!gT=hCOi_v6~_&h+mDl}d(6sX4}p^v9f|Z_Jk -vnT}+9(moXwNwy;vsd|)%514-Y-Nae+QVc}*h+e8iLh<Xv!(>vIW81P{3P=pXoh#(Ol8V;x@HJVu)fu -ibV6)nwd*9)kb!OwG{b@bk(6D;+h68^v$Y;EwbQ>RLZ>E_Sc12`nkl`;Z2M$y6`Y<7XC$ED`sf)4ZHk -JXRHwn+>&r~$?c(k8%07_6Y-y9y2SApC$wm5AzaYDW(-+lwE{*AnTLXL^At1Jl_mJ;&aNOt69X!BESy -rGOMNQ69;vpc%uP*=?l7gK)RC?l8vRgd2Gg1-bBJo1$IChC+;)otoH`rLGFNy$mqf(t5lQD7+t=M-ux -2s84P#<LI|27UaYqQ^0pJf%=ea*?F&u_d<tTZaW1!iI<bw}~5U!|e#QZn%{K{DfyQc7|!o-9^7SoF8R -xR=-DKijpU>L(#SnkZjwQ_-JO?p(>@KTP(Hq5KH`19w8Vvnd!#1OvAHM-h;++2F&$;P)h>@6aWAK2ml -;P_Ez?`hXgPL002`C0018V003}la4%nWWo~3|axZdeV`wjIX?A5_a%FC0WpXZXdEHk_Z{s!)zUx;I>O -~5)0@_{*0SaKG=_0^3DV(I2ARrWZY;!@20!e%8{`w9{QKBA6c5|!_w#a$Ud>oG0p%qdSbym?<iUZN-m -Nh%V-1c3onP@7Wk%wc;A&S`6u;wR_3JH`oTR|>MlKh&H-_jx?_$;XT!ZgT=N5B;XOf743dV*#nWbOng -{G*{Us?|i6ke^5^tKFe0NFzus(1j>+KIfDR(Ru;%PI;wtN32nq;NZzuZkhQP7oy6@8XZAPFB~4uE%@~ -s)R70Ov=ls0WtJUL!R`Q!o)Dd`dq?w}`aJk^Zx)8DBWg^6r#;|%6#WfSv%2DU81j~jZ-0W`iw!A#YM$ -a+iZ;$j44ku8F=gIQOfifle#R`-m=1;PCvZWz8pLsYC85%wNJV5HJ<<D0lS6eTFF=m%1{pSaWF=N|r< -|;L0+D2#ytE*z<{UDJm#<Lkyq9$;Nc!M2B08v9*?!eAYC)>D<!AGv_Yi2#$?veOutdtx;yCxAIgdB6B -@|)GG^NR49r!j|h@+T-VC-)(6brK-#{>D)m57S2Mg@7bYC)B(d`doDl3US0G4d}DvR4K^j+tC~O6T90 -H1i4BW_x21s`gcjVfthLWKaDQYjj5N=lK~`7*B`XD$sQBEwPDxBcThiVyW&yBLW-v7S=WDImW2_81jt -&H9u}lQ&L*yq51DidmnNu6f^0e^-(GzZOk^V?!=Em`;4Lau2G8(Sd<<x`@~6`<qPas(-_ahmT)|zo!K -A-YtTp8OtRqZkyUSkHA+`aJwC&&#M+rNycDx(=tJoVQ`lYgq(tVS8QBBd?X>~hATTM5@zVR1jA((wrc -U|QYQ4T$eZHpa>xaknZ8l?0LhkGJ>i(ME+|n;Mx7Qi@C7ttM%<Wk<i@P%eSC8xayET3MD<eNIDF3Ka= -1CWKFG$km^AlQ}v5a@ppjVAjoDQ&*ptO+iaa7hEDj9TFQZ*Z|)ou@nW!P<72`46wsy`1u0N1PkA6zez -H}LchZc;>p^Y(|UPN`(|o^~_N?2aQHp%}&<ceAQuGXD%$Q8@P$QQ$++7bl%^a;=x%Y`(+m!R{r)Z8e0 -&S%c6UxSc|3x06A8?{nt#m-aU!ZM7-?sBoklG&)q2e%^BS&0b=arb9R*fQ+Dl5bG$H-f*tizmU7#G0r -?57cN`8>Fr!r%&_9)w*ODXl9lI~(7U09%)sAvtRF$%cP?4*&i1Uii{1paGi+(c*X8~j=XoA4w@a_2?5 -5g9rmsh(+4hV)m<o`ua3O-q_!XK%Qf#i<d@_)Q&%86+yyQ5IqIOKZ(#aUU$tVkHI@j>sl?*$bM`=&Qa -mk*PK#^G{gZLJkwfPRptk2kNhfkx<(zyC(27Keb%nW&obJJ*z>>M&q&^r|U2T)4`1QY-O00;maO7>P8 -Z+_Gl4gdguE&u=<0001RX>c!Jc4cm4Z*nhkX=7+FY;R|0X>MmOaCx;_ZFAeW5&rI9f#Xf)s2hc{9Ovr -Ol$~)MCvlsLGq$e1j_Q$V5t115MFB|5o}24$?=Id55Tq}ixjKnM0*l=Ru>0&{!K~O-tR{K2*<|JBV9l -z6q)AQdte_;5o%&t&DpK9~J}J|jvN8EkZLa95VyPtCCG|GX?ljpac$FRX(~ff8{8N=SIh{k3>9lyC<q -7BiNPzi8O<8i6QxKE!dQ2{Nbyk&0J|;MJOnxrm^*~9^cG2>ImTAQzmaVqYvTX8vxz2JkqmR(=7T(o}N -Vjijy<Al#uX3eNw1nv{88D+v6TPiik<@cokh3Jul~y=;BvQi^6EhL{I@S-87KbYOZMK2c+HC7q%=@-! -Os?pTSq*AbO&@DbK8I)B%#szoOIG)$Pd6MK9IS9n$rY@N+PP5uKbjp7_z8mG)a>zAc9D9U)I_cVCskA -LnwsphdMo%uWWJ?D7|ev^^nvE^e?d7<Hk1GZB33?Ol%yHo<;fFGNmi0ol{ZDnBOw(z$e|g>o{GWml%` -|BpoU(}5c>I3StpOAU9&Vg5L`Z1HI=i#pTAPF0;%gJC;Kfe2`yp4aaMYBiiF)aJJbc{s|A2*uE|r?z} -z1wlCHB&!$4)dCTq|Q44Wk^1LCr(jlf1&35-SM%bHbrL@w4OAt~MA+Lfy(vS(Qh!;CN_OtKOg^Dhl95 -^!GK)0&S-R)dO9D1z)5ILeBOmB`8(xut3&)Z9<mhPQK<YZ(f+SipcW;WfJ%lS=u`Xoe;$$s+QGu9GIO -IjJi>&FJIh{Q7(z8IF3<!kMt3+3kOXZ>i=;8TPFsLVKwhoRz#zN}NX}R|3WHRtWwmWx&4joHQIPhivl -du8#|{z?B1TyiO}z3(bXZtNl{gWO!Fqxue!K^Z{3CfMP#uWx(!I%vnQQj#ZJ>fCM`VXqXDtyodKCP!X -i6Gi)Q(S}^BH@%s{l&T8krQt6%z?BR)6Jj4>Yh<+G~&lSsH|6#S!CsqJ(&v6$nMVH`J_d`O?1qlJrDk -NK=#Z?jHYBs<ZG2%H%Hb90BG+MH(c4-q&Idyy+s2QL{DGU&8tAneq21wXypwMD)hR>sl%lU1RbBi^4( -$b)IpIIpxNJuO~fx%rkM2`@#E8-NsJ}bOsx7=qb?xA*D1P&K7J~qW2tSxNcYMa2g8sh=1V~TuLlx+F6 -tBvLgI1E6H5}sRSOB)DiEJ52sM-v!kX>yvTnF1F{fjU9N_<tw@Zh<%g2<p1}17$1&k-Mi&K}%#J2*rB -9_8SiUYYmywa?g@yEDA{ol8BrLCYV<UcJ20ynLp<>mOKeA6?pVB_N4-}lqE>*c|32#wyb8iV_^6syry -3oh<kJ)Bav9bHs`y!v4aFxv?#q0G#vL0fkMcmkE^_a<(7$}zqnH4Wsy7rh?X0)<gV5Hlssld139eh7d -9i}FWT`P1?zxtb9cw+LzbZ9xQ0_!R%ccAhApA#^srYem_2UfS7@aul}0sd%2h`nkOG^9o91rHi6eR=; -?z<ifldd+CSdw16It+KoyWS)4ynuSt>$rii<y_id&tTt01vpB(i0a49@iq?V(O;&$-GfY=L11DSiE>7 -FMhcpL96&ZeL~v@`@w8~;ioRpipwO4fQi9AksHt?#opUnE6a`ke*Uk2US7SqzP*ifo+}e4-7z!AjfDX -~BmU-w#AIO<4Bnm3gK_)%>GIlne}8`Z#_9jr>3(zm;e38>w_JXjUtE5?wwvZxr)Lh$r_=e_d)06we!s -tX_x=O?o1b4T&pw=9+jBtwT3De?%%FRW5L{BaCd(z{p!ISYwuuAH*R61oXUs?^p9GF>y4Vg-(Xe&zg~ -||d5L$3c`hELovbGsPhyqf?v$nq{2OFSlbE)SD5L*WNyQ$3pnU$AVbG6sqo3Bg|3_k&*ZEq(R7$WONZ -A&;tZBJ-_T%F-z0%%|L5{htUF;-hX$k>Fmfwk(7Mqe>Q9ZzPa4loo?fK52E%(fd6^n|B}y+jhvG|`De -<Y1|G1)+dn5I{XNuvspwam`xO7Ga!~9g&xR5wGo$4i*6p>!ZlHs<7@@{2n=OYpM^iNlF2ft=dM|p|_L -k*h#e!*pb3Rnl1~wP7=4}kQPsj&*3V@=4tE`$a%GoJtXLmv3YU{tX+ybyXF%1fJxlb<_;1XNtcUVN9Z -hwcQlGUNO1?Kb3?4~!R_px5aKRQxa3|=AA5i?IKWQ3;{n_l94s^7*h7(F^-LNZ_d?0wKs%p}2cTtmuu -f3pKA3Tb`DtbB<I3O=l_AAG%D6*J$`c!uXrnW_t~5NX_=O@g!zl-gt+Tf7Dlh}ffGuV~lJkz%ZKZ&eS -ci}aG_*+;s(^$)ZV?H8Bnc#9Mv5iTRAMX^SF~<e+2JCzBB!Kob~!aQ5pg`nlWMD5WUKCGA4{Qotd$mR -*wmpCHPKi|jD&<V>~UZrEC1Z^Iy@PT$vV(^j4Y`9YExBv#NFS59#3atvX<m_&nO_tvpeOYJ52YYe5mf ->=y>;JvMPHKbOAJ$1|tzIl)PJw+S;!SC#EA?lMWd7;EF?lJEImGj$ROT*46LzlW!pY3RooV?^d~yYZW --E7Ug?<dPwp{J=&9aRs+r{s|_DKp<uDpnRkayNEsxw1)HLIg#H5Px1u6wyQ}ETqqj%StACId;djdj(+ -lQ(ybLmXL##f3pulEth-mFmNn^6FmhSNfS!nDHv-<pj9>m7|X#DI*iL~BG+1#V73IM*Qs>2;Ja^711R -3;0k{gZ49T}p68%Z2ge;Ax^*d_7P6G5lPNz=K|w6jazI9Qs&jh{hynIOUkf1|z$I2&ZS=5srLaEqxQd -5;cI>8oD;wu>z~H)rnV&>!SAO($2igNzY#+Ul$-%7AoowY8_<DvT#O@^?+7*o5T8}UALDkV$I2zO5D1 -1k3O;A)Du)-Z!)eUYiK9*5mw2^=Jv9)7vHM8SWb3N^|mVaW4!lbRNakC;6KWkxQN3GQF*ntr#gt4J5i -UXxoi<x!<nT>L@r7|5WKKU;NXU=c#W4f`vi_pbp?s+J>K468C)(@hc!e^WKcDmEe_sS<##o?Yp->Z66 -T@qcM^F+;72fdMS0Fx#k^oh;Xpa-0Q{40z|Ioy02=DhwFK8ZWh5ZyIv@-%>{HBS2OWzX$P<hW&9K}ev -WCFBK@OZGLbe<CkvGKRhDBsV|7)tJFFmhRrfAb^8CV#{+a#IkS{Itu{m1Vmh~BJbq<vP!PEnb5cv|x| -&wx}*bCd$O6d0%dG>|>P*gkTNJOr_GND=%cVW<HEUDT3;W+sRYK|5RbXzl4^b!(-pCI=JjN>krHXss= -}(C)I7(gDaEI>3kBbkta}buJO_x>`ESY*@K=Y9eFcp)(FvL#Mr}DX>&lAZ4@bdeczt(yA}|9_A;`R&m -CpfHz~$Mwn%)Jx*zralX=J(Xz3St}Oizb=5Yn4SOaBgUw5e_nn)MHXZKWUn^{e-h4-nH;4F<4_*;G38 -xtiK!#|>YqdWTJNhw0)o1V<CFPnCHsSGa6!~XN?F*e_xpx$^u3qF}%+LI^=Sd84`*d>T)gXbJ{v=Dll -PFWwNwL$)ub8M`S?<%H*;qxpp0lBfh;Gii@HhMhr-jF<*2=_edPuEI>84XxQ*$#VyWyhVU_s9+h`Jr3 -T<BK{@ldoZt5{bQ;I*tg5?QN@J9c5V(yQ}{xet{Fb-}>dj)Q}P46k62?{Z1vm;_6REm^r-1~W{Qb}ZQ -x$qe0aRXwP5URH6e&-8ds=}vC>+smt;PUl#Jeqmw~m-hax)2R~n(aY&;PF|81p((43<a=kdM(DeQXR9 -;uaa8C!M;yqjAgk=H_D#xdo0WOT!NRSQtB=ljys*Dg>r^UYakVf|_Y<8XWnm+&xOH0vo(s^q0k#41)q -w^90*ee`a822RxZg~e_<$mcf>DPAEB91@R#lR1UGHX-$@J(?(INbq&Q1<b4%HB`FX7aa@$P(1CK(vPW -3;V{oE#k<lIhWpC!QopSZw$NXS!ikQ>OBH8hzev#K70buTFmGAGzXuA}V1#g2!I!eZp`iYQQ>q$iVp{ -_(hHnkIB*T(cn~4de>Mc5d7`>^5fN~Gcfco4S>?W%a;%VU$B3de|`z(#H?-p)p4`{mYYLh0)r2x(KK+ -~FeoUT6H@FHU*xgkEo-v+Q^QtpjHO-bUBZ%r1NCANB)c7kV-i#>DL3M&fQO25eB4z9&8y&MOhD+-s}3 -jynGiYs@%Z)8^!VgQOU`fBL_FO|z$kC>I+)2DFcMHa2EePVig|p0>zJyytRJc*RoS)p9#MRNAU~{}Bx -%Ca3H-zVzR)jwI{C6^^6!MF8~Jy#r%e8xq-(Hz%IXRHlYhmNcra8!M<X$VF!;IDQFRTbOTLo}_#K`xz -@HPq1^SI=hIl<rCZBm#vfXMTEbxcduU{Pv5GHAnl@l<%DLFnmdUf1qsJn!7`F%{n!Pq|26$CtytBBEr -XElui>%^624_QjXp3-Y6KWd7}w1p-h<`uRbS}0aw7Q6`HA-Eymlj&jG+3s0@D<NbBc2%}>>{K!*T2gy -t6{kv<SS-IOKL)2I5t|`C6oKU@_qY?)YSl1C({IeA)r4Kg)%;d?#s;hmgUd#IOHt6GVo(0wDI}zi87{ -E+;0(XBieFAW(#2hsr#I)nT+A;%z5~cyOhiL4mIcZ<%~o(k5@#lf(4&L@0#Hi>1QY-O00;maO7>QpLt -<Y02><{FAOHXw0001RX>c!Jc4cm4Z*nhkX=7+FZDDe2b#N|ldA%9ia@#icU0;DRI}<X?&`lrJs)>_$l -1!V+*lG8HVmXiq$*d`oOHh_okN<to1tbC8oX+enA8Zjg=iuBgV7{uWrWK7EEt+a2q;5sdOGVzQMi!~M -l?88BH7vAM(?Q6#ZI-G9Fy3#sbzUyJ-8Zr*<g8Gk_<)4y*RQ#5L-A3z^XpK2k}H*cUDvqrxo-2Sltn1 -a!fz$KkC<+hs#W!8o;Ip3<Xm+JxT^+~);fp_eED5Axh&gmziFyQcK{z{bF;25aLw%Nc3bo(T;Yq^Xw_ -Y>nyXrtz$vVZMwb`q*YkH*Vgfph=GCgs3+0alJdNjhzCWEl3#PFj%jbVRIeV4Ff5geNmq8N1X2@VF`u -*ba_2;XLa1;=|_vfG9{(5ogl5D&`{CK*F5Zj;n(X*G+Ab9x?4^T$)LTW9(%B4T(G#C?gIObfm60A~+c -~$BPq+5~H5p0bJrUaz1&~4LUe7#nLgBy`h(J~TGXH}6sB^(5*WdnO)S3T}+7XyW)KeXHmnPoX|S@1$G -;GbyW2qNEek*S49Q=pNizE;H|5YK-`rdSTvRJ(3U;r9#pAZUb?M84n`>#SUhPgSXeDzp*{@4g3q5cfN -<4_;3;V1{1R4SIaL?b&0+9pMfHd8b+u4AwCaz%v`ARoP0^f~Xd-2^@iDdp#Z%YvIKfw~6O$9+%VsGg8 -}xCVOHhj@+a4Qe6@E6r|vS^q)*C#1r6ksqR1zxL3{oRP&ZF*0V0!0i*jF$1brX6djo!Ixlal8<mOK7J -Xf>XQT8&&t;7yKdSb+%Jv8jXED8jDr|`rBZ01^FrkxSb{mb*fQo3drrDU}_Z)~R?~cU*7Mwt&nD(c!8 -`BWd0ZIT-?Dz(ln(2Y%F^A|1+(1GuX~m{0pSEI#Y5-e+v$Vjh)LnqG8=f~yJ$M;!2_MJ@WAUZ}#1fpY -Vk#Qk6-Yp=!-_-YlAO#Ug#4NOCpLL|E%d+FvQc8z$oY+Gwb4};bwUhL$~)-{05xQuYo&eih_U4?2jc? -`XB%5|8J*CTcEZ9UAF}2q3>Ph%YF%qT*o`0va0}_dd6`b{k;a1&!>Do68QtHPDKtRA$U1_Tj5nnaMq2 -rnBazfyxr-?e$6(vg&5_nC<m@C#dPn(!1Uu%~in0{BAxIenX=?oC*OjL9%GwDruLR%VGv{4;f^yKxyf -i<p$}s9pj{m!3Kv~~&oMid!ilTyl@FGY8EAW?I7tkeemH;VCiHsI`nV~F3W5K}TVqFv|OTmWFBu;wT? -7Ec=Vw71AqoFce5SS<tNc`N3F?LeqHdjT~5n{ID9+H;9T25lkJO9@%CC772?4W<Kj{HKE#>aFJiXVdA -d~Tt;bn$rtjT1FvHrO7NBa1hkdg7VO)n0+<l_>r>u|Waxhg}AZNQao?^hVxk%zu=v-q5kF5Ha4>a`#x -y2WH;eMi<V@^?+x52vS)A0$cTQ()$w@zm|yl-ozUW;qZyfgyhsdleA0i!W_T_7C{Fp2N(wUe)T7Ta_{ -*+pFITht|xZt;k?rTWr(7~Rg4<gG561yZ9?v16JV(8IH^Y-i&<3_7_!Y;S?lR7_sdpaXSdNvhm^xr4t -wA}dtDM=JISO=V+4vNs+Hwj{a5l-)MIkj@1sN^j48}F(kP(Xvbqe+yvm@ZeXAC7T|kio&QSiYNXlH>@ -n?+(WAOpoHw6_ES}iH`7MQvdG)|C+*XogiOR55?TBU707~NS0=!)WGcfv8w<i(ySE2Pm`f430gQEofw -5HkK3VlhWGbS9rT4iJ!|lhVk~4U*e@qiap*@36taU{W`+VuA6dtZUBN6p;MJqe#`PWRd@c(v#mt{mN) -?Z<rDwS&eC&w5u#tQ^1T9Q@OChTNn|n7&1^Nv>|}goQ1{QqzHl72-tDRmF|jn@ZWCf>sur^D5Zm0_Ou -_dIBHy$ogV26FpaYp)id<@WqzwlmSUKgI)nvzU#9Lt;iudJpkJtRy~0@?x>a=xIZI`}r3NTKF9J7_=a -jp7j+%5jBc}IquJJLD(0@)xTYVVDkN8DxDP%0s%|wOV4oMDtF)!1;cR{|Lj>=*YQ)my30f_#OX~<>oi -Fhx|3>zgd7j?2~=qEN5ycnmvVW?m=;Bf&J;E=P9oLDbW7e-KHV=u&bbjvw=i|@wVfWI49*3OX73bx2` -SuKl2RJ1g9@xFKFLEgg=s{loV`y49CgJHNX5|#MHIEgUj*1j><&T+OU!vX59F7i1{F>^R+zjE)L(+9H -S7l+W=X1nip15GN>XyLS_z&jLchY72@xvJaVL60B8j%=lW|0pOv3vWJXTRgo-m9h^%JQXnN_2vJ*`}H -8QN@<+_xJ#DhmYo(*y`yIZg6^UYc1q|<WS4yPs9pZPg8h>U{eWrUf2z{>EIF#lYe_Le$r9>0iT!OlJm -lq_-20LB$_oyQXJc6xV@FxIrX<yLf#Drz)@fi5oYBYYV@IvbZO(AJ7}1hH&^k^8<a6m9O-iRE4cXOGM -<$2v{)G3aPEI=!KAs<VD8b(0&fVbd?n$x-(qs3Wj4XVByySC`efy66n@nK>?uxok3M0HPQl~=?pT8M? -_$)l`Zm}j~Y~2qGe%Cx;xxPQ(lCbroxF^hLrI!!Kog1G=CB2}381er<IZsRVm_(=YOZQk2b-2m0AJ=6 -bm&XaZN1-k1kHP}mx$Z_6-@**}Ug~t<;zPmaU<RjIJQ8bE?T#YuXzU0LtI<EMRO<Fm>)aGf9PFuyGZQ -ySIk|W0$=GJ?;kddE@9eK0SA#7a%dpQT6c4{+F9>$D)b|sg0peIA+4pprX%*<kWa#udxdZC(qf;5q9@ -9(%?OVLMCw0u?W(rWt7K>XCPJ5f{yim@(xO;KPEbq*R&i&$+K4_qx@KE<!5wBSewEYKEZgCkhqRl_uS -)!ln3NP<{dX2~9=P!~_+^Fqj_{{2iM9~YJJL#6bLymI%e1^(SQyk&E6pAX$6{$y7tQ)yp$ua0r%qtiP -`TURPm%se>1!v!31dSV&CGS;HRN`M%Q)KZOE_k5@v64&ts%4<!Sz-WZE*O3?OkTsEIB&sr^F-hZ^tze -g1pz1s!*B7K0kes`frT3p7kPOzxo+E9kI&9Fn@zOIi()lju9vdJFEa@ackvm5CD;VsLY{)&dMjQR)zY -Rn-pB^s`MJ3SBPKzUnV2#1+w)KFE-t@=hSQ)WW_HD_Ugvd`!Z@Bmacgqyg!qGS-M}z^94u=2V;2K|#T -O>JZ1Rk*4q(OixN6}<d8zceXg$1k%rfA1;(w1byER4+muqap!4;8a1ZZhfZG5_ZG2`^`L4$8ckY^vEg -VBEgP)h>@6aWAK2ml;P_E!I_7zAtu006lZ000{R003}la4%nWWo~3|axZdeV`wjJWnpu5a%C=XdCgc` -Z`(E$e%G(y^dteQk-mC$u)xc@U}!qD8HOP+6h@+KuDW<6y)+xP-@d~;DalUOuD}cg5h<SU+%Htah7Jv -T!mt<^qTPOA0#QM_EfIpSq>=B%<DT|g`}XFSA1}-G_m}G*uC8AfXpP$z-?yYd*SI6~&0#N}-|ht+dfX -Q1J^AfG`idkPYhhssV*}%6bI%4bR72||;3Xq{4Pq%|Myp*}VJ?z{Hn9N91i??ER71~)mROLrUKaL2%f -t)x&OzTi?m@7mYBA^N4Z-}tNJn~+d0leNAx+cwU?Rei*b&sxo_2>0;l4&4{-~ZGXf1XeWwb}t4l`VV{ -dkTT=ua7`kr<HH38>I;|0}7)0#FkLZvdBw_QLXeW0>@Z?jERy234eO`3$1MQ7~GT7{<u=Oc+J>4LAgX -LOiNfO&Y}axX(Cgn;gA3m+;ywhR16nP)(bLFzIS^Ps9Tuy)%t6lh($GDu0ZK1M885UD&fP%u*juoB;j -6I^5Dfh?gP_JeE%6>HJIZ8HR}K<(lh-_28@3oRsK%h0YR(_)f{mJq!5@m@m<Vm#+>vFG8u@v*A)W)+? -p-_&sdHQwE2!v%+rXjw&D9F$~~2BDDek#_aPv_jZ1uVpp0M%G8C9Y!y?_Fgp&?>u1114?Bnol{F?qFf -76BYPIl2zF^yth1Cg}P$FL<8^$%^Dr(2%Py6VaJcJuI2S3R}a~7AbvSdoSys-WYHz&5%G+)lv=l|Z;C -jR~(w$`GpYy@j7J{9{@Psq)qo`4R}?K20eeE}Gy@rUhaw_u<R$Z|dOL}8vfpx~Zx<61HXM~2l(h6QvH -=|;XM6>TW^fZ={iPP)*Ed(w>sf<}LLC*`}lLk%qY!4+rpEotzf6<jt2d1MiDu=<`%%6Sg@<Q#`D6;{E -yQAEKI;f+N($S0I6BYQ>wVNs9r)*<B)zBAP)<C_}nkR~x7keIfu2APhC-B7#GhDpu`cGbfCW9FnKO3h -@Hg3I)9<oC?91h4!g25;lpDSb|e>q-@BD`Nr&xF^HfPIcMeatyRX-ol6pLAbVKU(W@G@gt5|qu3F0qh -)|%&c`5LRFuUQ0LlwH&Y8&qKf(ZHNK{Th5WJJTgGk4elaZc!AYNP#!gIKkdrNfHsA6Ean1Gr!-_t2HO -&@7tfgze<##dEF&4_k{wVh;Uj`cFlXJF}*VCC%U_QGrlPQF4fmm}Lx3Osayvnbmrx6aSPdjl6NAA>nZ -u54s2^kxaCv*>V4Aj>`baM-WBCURMz9o_C)_!Fz|aLY*q5$0^b*<EM?aYqUT7ohM^tPbRMX|$L$qKPW -@rgnQ9<o!6^H$|Mun+QgBHsFZ`m@2ePT9!&BljLOy$g<$&5jAb50v|7r-e@j{rtX<FLRQ(EpK(<_OSk -Y>iX#W2I$X{aV*8u!fUcqN?s_u`Z?EbTVLmz-p&!$PKs?S_b&l1Xep7lTE7$Q_HT6)F{?x0ehq?itvb -96IR5pS?eIR|s{`wlF6NnVcOqQP#wo+I%UzpORimM4e8v`ZM9Z-grty<|QE0aXFMjNhP0<IO9>5yvwc -$ZAHVI9uWefYQ?_smU^9P5~~-BNXxhvCrHsG;(uzsUy-O%sUw=V$cJ&+eOnY$&@D`tdfl#RdT0_Cz|g -8yE?Tq;{}XYtq;L>z+0qIV3THf{C{Dchbj(Hl9-dX)|iZfs7|pT2`%i0u0VA;I00k<M%im@kM<^J}G( -O*p{n23v5dxg%su{WLLY28_Mn{Yk8Fl1S`-7^0@L}4YRX6w;ynd=Tp6uROW`J=gK6oVk}zn4^T@31QY --O00;maO7>Rihu;h11pokQ6951k0001RX>c!Jc4cm4Z*nhkX=7+FaA9O*X>MmOaCxm*TW_336n@`daY -`Qo2}Ws@C)%|VId0R7(<ql#m208d-C=hc80auKwk-emp1Hux0Bf~XkhO-neCPI^a|TM$)F5wL#`nPLw -h<Dxq?0N9!qo4ttz-=+RSF;awxam&kGJQ=+3WMOpMQMwLkb@`POnz13@7px;8iN@Y}@dzspx<n>nU}e -nTd2dU}Sb~{2k>xD#)gyA8uPZ9e+o=zLI7%Ss9ss_3f>sVvzZhdAwjZjN278C0#E@tuD-CO}VrSI(h4 -qey<*e3A$Iy#wqi-TCLua-45OOis5soEP%D~&n4s1I#AtSdG{$S4Y;4HD+JzFr0c-K$G$O%adZ?#uLS -uFT}!qUh-iAg1N6H@#j=%Na(+W<6p@e4J3T#xR-lM@0FGYMs%oMX;%6y5Pg2k>SVs+qP1VyVNet9WvF -{v?7=r_G7^oyizX?UGMnEGE7!S8N8v$CfgLu(TSBPMhgAy@h)21NU{(!4Cjg(ED0zpeFT1p%c2;Dhcb -zP8K*iiHf-LjI=9eif;0N<p579!wt<zl+WZ4jTme{T#<9E9P3Rj!jFHAKL8H8wA_jcSq7ueG{v4@8iy -RNBBRS`wsZhss058%`q!Pj6bKe!OX#Du6sU69XP@Etv#zO<1KJ{h96LA;kV5dh1gpgNf6QmQWOoGg%Z -a>pEJM=|c2!h{EtisUISop7A?Eg2zu&uz!i$@Hh>9n8VD6xYzh2o%kaM<qw=zCfT&k1NAeHb8F9paFJ -$<S#Bt!?+4!K2Th!{x$ik9&!-qoO+p+)g0(RuoU#F2Tg{EzU+8qLsXR2hF%ArM#8lf>UHY)kk<8b$$` -vsaI5{1?9yu3afG@}=I?{vjP7;oZk2EmYm=#u{&Hj1Xev#Bwm(~|zrEd;z`g((Fo6^exrPfTDcU1O*P -xP^-=J0Y%`@y!%w|?c(SHX;>(dn2f@2nj;wU$`YOrX}^ld7Y(oV`E^l5Hmeb97i_zK+e&q8-HQqedE| -<!TY*FczImnKf*}ZpymBa;1VsO{T%qrkm;DC-H$Q$~C89y@qc>ghEx`wc2s{^lA~i(2&#LqxjE4d>k% -x5~>@WgD6cMF5+4H3s5K4O)%00+@l&j4>ek9Ahrf9=;a0U0S%8~y48ZPj>2yQd+50kjfl%gb)ZQD67= -t$38aPBNxp@<!J2#6vunzu#INmwwgPLrszsWRSYGpKZj=Li<GV@i{7T$oufH3L<$ZeRs^#!tEE=AaUH -3^6^cTUlhr*umW_<?i1m=)E+(kp9>)e<<@R<ZKRnI@#d8Kct#TGW(Q(5S-*p=#l3|^TIsi0dZB3Wg!n -%oq6%ylCy5zBjO#^Yc@UET>&sTErlM|0C@>q?YNR`>M`>WS-4$L0*-X0tPE!X+LjwHk$8@A;u`cSKUN -IW`8Lc+K*}6CXG_1k4Up=R50wHxk}ppI>S{p8UyvtA>G@JKKz}mxZ2;{eQSMEI#6jigDU`oU)*LIFvj -IU^-EHI56v9(}2_wW;GXC*p~*BI=()P>X>>oEQuqC;IWH<6_SkP*6S5lwU=FhZM_XGxEx{2M|U2w$@x -bEcsh#DlpEqCY!8EIy(^f}dR!je>^!ik2>+ygoR9CAm+F=C((b)d2gJalK`O>I<dVa}EejTE7T^ELNA -p5!ZW*n1=3Ui8dOQjXdrK)p;i_8e4cN^!W%3zWjex~$_GGKg56y?po)@Qot;qk7Hn`s8(F5N19#EYx9 -1EMp)81p><iA|+@hZ93dd8CaaMQSvf{g22f<9Tw7<8*cJqh-HH$AM`Ztm$8yCUykT!sy9!Df}Z2XcdI -{r6TiMYY8%(8kF_Ydu>+>A}=7T<<AUZ|sHbl<|U{)-m3emHr-86r9w^3Uv&O3PfPMD54zTYdo0>vad; -wy$MNjO@;ef)v`7#@SL@4M5fp^eC5$!N(}XuKANQPdn2mdgWpd60Z>Z=1QY-O00;maO7>O`#ub8d0RR -9z0{{RS0001RX>c!Jc4cm4Z*nhkX=7+FaA9X<axQRrosz+BgD?z+?|BM~T|nA+0HjW9d!HtCJ4Y!PiU -tXa-BrBJo@GzAkPzsq?Xnz@Vt@AU-=wyt2X!o=?FVBSw!8hkyAxYga*up6m8d6%$D!5Dg6UBRQFe+5U -Q~lNb%j|Wz?~#Xc8U-}wl)?N3=@;PjPS_QjlvYGum(DrOG?<)_fQ(msJQ?KX7KO`&qiYqm_-f_ju^Ch -)({J_wGFKW(}{38^(<gNU)jJBp=xR9)QDAnEwZ>gjKtUnul~EbeIq2`6NU-gD8#DkumYofn0)E#esU^ -3`<GX@-U8qbzCH)5nqC#4jiWx$F0)zWv(+GF_#;xL$uL%?OtL(*o||Ukf7^AY!tkn(#?ItC9Y^pw-cI -DFrn$V;6|M6rwQC?HY&MWc*{fDdnRs)*TJvu$k6?Umy?RH<NGwZbt1Hlnk?AmU`*01GV{Q|}Y3AdXmQ -OJ`?}~WrkT$ROjM=({g|V&X^yds|mWgjrO9KQH00008031s8RyY7YU%LbV07MM{02=@R0B~t=FJE?LZ -e(wAFLG&PXfJSKY-MzGWiD`el~&ts<2Dd|_g4(m7b;Pd*xl?F1{8ER*rq{&cCnk6A_xfCrYyF)cu6|3 -TlB5p&=2gFbU37LwvwO*5=rFD;h8%#RhLkvCI?w=YGpuwRc4ae)ofcWO<fnd*(%hQFVkf%+`idwWVLQ -Kzlg6}Q7uITciT;2AHRP3$gh9=c>UAu&o>jN5-;nbR@^9wBBoKjwu^UeZ8DMBP<1{5{E_-bZeso@s#U -FGC6{?@(nTQ}m^=G1nM{^Nsx^E{5zPpv9R$I9*tiv_Ge{p(S&%Lf(lH85NOC1I;9OSHaL%+SvdD|fTM -O^Wz<XJl2%3Kn51~8B{;XQeof;%wzYo6_MjBDJCsf;VA=KOgg>ZH?a7YKMgxRWUu*pvPXWcuThp>N^^ -^-q{umf^a(7}#-mJkO4dPPB-eHV%^_Tv==BX(^D+~NCc;v=DMG~8a|mRY+@k(bp<?1E^x`1$6;;S$++ -u!vDAL=yN^I@nyM8zbu~$$~!%QL%m?!oPgb4^(ow&I|lA$(`DYQ8@nFRvVe^lR#O)9zfVR$VSGR<#Q8 -1Kw#{JN{tv2nGfx;{)yAoimUo*=qLNrMlr$-qoX|~Hi{AG$fgY+3m||Kn7)mGQX!!nV2d>=CFI`NhL) -@Kf}J?1@Bl14Om@=+`Wv{*CH5i>x-P|2o?`Y?BFp4bipoG*t)LQOrNOo+Y)qu|ecQ8GneMdwLnPCS*_ -*H}5Nv(RykF>Z7%Oio9enBhi5=qybQYvO29&jF+hmO8SJv9VvZxV$?@kgLW!4fC+o{D}62Dh#Jq(uvW -}|%OfH{m3SPvDNuWb&fv|0<efGe0?UiOeblP?dztub(Gqiq`^k<^Z(ZR(y}&)8mMR?`U9N{9-di()IL -O_OV7xSb-nO2edC#IEPk(r)yUH10LTj<gL<tHD=Nn-qJm%g?S;W<{Nvp<&4N24{=O1vFY<>LyNc-xP1 -o%$qZF=FE^^d$KQxLls_%v_d&%y#c3$62kd8%nl_{h-A)4X0S_#+QZ0~DB)NPWGo>Rac(|y{0@$wLLr -YImo#JSayoMaiF1fGYFW|$5U#G^yYNWs6yBhKqvxL^GKl@|?K@{!i%oppV+=j)0$j?9lXKBLd}oxs?5 -LH75&SOp$#E(i^@<j7LYD~6tF#oHLy|zid70ui59YR!Y*e}~(>YW%CdH$0dFw}uJ9e+TTgUL8b8E28F -8p-+U$gT$;Y!!tWV?2sQS<T(O$Ge|fEMf0Ho*2CMxQS!98YSJcK0UY`=Q>=2bJjW5uPmGCk9b%+9z$! -I~!_8em-UlWrHo@#-aC~`NOcBb7AKobr`~kZ4;0E>KS}H5Vn(X-?l<_5qb54IoOEqI#EwG#wo#{<jUk -DDntjF?BE=Z<VU3ol-{E>^L$TXdR%Rk!nUQ_cG~t*Ou;xWG&eO3%shf3f@ys5jK1w*wtvlD(6==^MK+ -!cHmmRjNI$s|?_hSTDHb?R7|XbMTllwesONxYEl~Tmn7stFm!eoTDb9j_|M@$JTnf9pNkadlhI`_l;W -63(DK79P!F+FO3NmT3mWBQGc%yLmu%=8HV*dwFO9KQH00008031s8RwiW1Ht`7n08S|Y02u%P0B~t=F -JE?LZe(wAFLG&PXfJSKZe?sPaCz-o-ILq45r5ZTfwB)JZCZ&ve$tel*uHC$wzf0QWjY=AhM^?rgqR{Z -B$T^Lr~i9*@j+lg@J@I2v@hj@L;{P&V)wTn0J-bi1CzI%Xs(zzbZsx$#ovE8FW-K5{`N25zyCI8A37= -8rm7c<9nvnVT3j`j_BB4d<8t3_P4~LJv7H}3{Ph0p{48g0+8fim;dMROetalv-k82$j@_-~z3u(8eta -ixgrzv}YB=`XQoPfT2j0k>nZB~;&6fAoy5@r!)m7WAx4a+pV{UKG1TYw2iI#rgSIE-R|EM2rr@XC40e --}XT>o9%cHGcNelw1~fcsqiDuRXBQT?tK3@)P_kfC+l-|ENQ-e^M%Ir}&+5qa9@k9;`Ra<N!!>S`EZb -q%jmUx}HXD@l^q%ueOB#pJ${Y};4Y1FP7&?V+7jeS2)SOvnL8NKnJDTqrK*H`Sr5xn_yit5>fq*Jam> -My6VV<U6o(o3p>QeZBo%l4W}Q>;7tRgFP`)y1Hz|qSChOU-(8YM-B+P6mXWa*5Fl*e1m9g23a*5yF$J -b4Ikivv$}0Rvv#NM&5F~3bGGXFZuN83bugc}DS`LTZYI3W_^twF1D6(OUK*r3qM_RHQpvP#+nNY<CI+ -<v?A`3EzS@9+1|wYC`~iN&(ACu~Ya4bgnr#afsrgm4xn)3k5Woi7<(@t1s{vY`uw9FWAyQrRNAASoH( -dpGoC@>(PEjfibZ9T&T-R)nJ(rt3GTPxYb{iuQJzR^e+yg`C@2|xG(3P6OnzKRt#<!Y-v<x(Y?hsVFR -|@kJF)v`a?lRWWvZfZMur|v*qwJHWZFu721V@yo&ZEiiW~r3GQX3~f0roEmSKDJKfwdB!a(xd>@xMCC -_Su$8g6=&RS9^KV9ES7}lh`=vW|>6DOMfOyZ-Rt#PCDn;-ZDV6TCZe+#PddZ1xj|Pq}VuOoWm}MNg>g -25Jtgvfvx{k)q}wj1UVgNz};C{iblw?OdZU4y~`ufXT=g4ev;geFe?>LiZQW`eNWu263}VslMVfsFb> -rpP?jp4uKYv_gvkb=%zJP4;kZ7Xvn4*6xrtUDbF|Ntv5q4vhP}{<zME6uUAb(CQz=);quzHnrE(Qd9t -8YE9F6t+s0>b5(}WMC>DM`Xp5;@Bj*C>N(gYcM_DV5d5hN|Wyi|B-qC{&29r&fq8qkGCL!>KiL$8aDv -8D$admAUvgFUh+H=D+a5hIkqB$mP;BN(kBX`z7;D#HuI1;GU+)FHFbc%WS-(iH{<w9^Ks!kRxAJ4T|y -nOsMVZ&dws&^0YKU<iR6=Ay@@9{wLZ9v(dY`|;sq&sUC}sDd?dzKxY~!>StA+dxYCRo6hWKW=2(>w<0 -Ika{%s3!Q#2^EhnCW8WZN9C#>Za?%c3qz%dth5C(jXbTnIJteZ1EbL9Z+pwXJ0jaTZVQ+$NG*qE}!v# -5e7XAYzQ^qWGF-ba%0Sog_JAJjg9<#srrt8~|_wv?N0cv$Ay1z0vafM4~bu2B$=(~z&U2X3GKcovUWV -FPsTzRPa&&Muxe6k5KOd|%nHSs8ORoG0(IV{qX3-*fLZA!_q8CjQHMQ9I~K|gFZL^CE8*93VD{z1CrA -5D_8ge9|6G;Mj^SDmQ|W(83eD`mAF(pgqu>-2dR_>1x*M-+M(y8W!(EwE2F{TMIf{_;Qo*l{OeV06{{ -U|<RFM*@*M4hBkM@epaf4-$099jFL|ngvE6!z?xk-8?+>cAyuVeQEZylWl?B=t4R-2QP`;s0^;n9L6M -G`tXloyev|>QpBX8<+16i&F9oFR5DLyub8A5Gvm{s=*-7CGK5ss+@`L<Atq9ox>;={W{+^LxYUt4b)} -r64$3$E|8#D!PwjZv%8oA4D0+FQZc1A7;bk3Ej}?QqtWTkqdk{@JVU&AAGfxANLdI17b~$4eJjREyK} -+DfWmqPg>e=i7&}|0*>QQnlVXh_~Gpi>Mf>kAB1!}4%Y+0GpMN<n2JO(vIn>yGSPnXQIUsgE<Aa;=t4 -R%n*e2cYB!>=_@Jj+2BTo5vPjOPo-Qe=u}Dr!3d1=F}S(R{)|<`@N5frnIsz(8mF{+?}EoSnJG~5 -h;~XhYQWOI9UFEaQ8ho(91tm8WmvkagC@N}A;ce5h>0jc>6E<({ps^y6XruLPppcG7!?$W>#7~<&t_8 -regY)p#cwuz7|H>{3%8pl_G~<8PhB9-Lcj8dP8TB#5?KMcqvkt5!1<R6xGE9CE{Y!@+D!ALzn*-yH+9 -x~Lc}vj&gO@j#8c1%itvJXSR_fjKbCrl63jj*t_IYQ+7x@{`06Y6;tS}EXa(oFUmFilb4o;hrY6Y#SN -a|zK*Z}mP}sv@bhqNZ^rCH*iv>)u&o^;FWs#B|>HsJ`8c0Y@D}ysC%17mL@f#!?4l$6YG&{RPj=iY2W -jsmSxbh+lBHo$MG%MS5YTndME#_A=COH;1jUT%$#5^reI?f-Iy_oF9;dqGDH+nhak&%CZ1c|`T;#x>y -0W0&zQ_T|2&k9c|Cz^(88f%w{W+uf9E<R`Qn0ljg-^w=TLs=H8$r;&B>WlEyTY+vjvjZKqMg$ZE5l1V -f@HLdX<F<mH#6^r&t2cG75YqrDRded2g~*xv=MmmwaTvh7>Jb3ut!|1n*+Fbe9ZBPrsv4;GO?KEW`KK -M(qwxPq<_1Fnr37|^m-y&q_6bZ>NeLL#_V{DLUQ)o^3SMu?3b5doZI^x;!Eu?*2{etXB*x4YoRn}H&+ -N=Er(NM;_LKtG0P@E==FW_=dsG7Klu-fCmivrC+<5gGo`Nm))=Xg*4@obx69jWIY4n7WE$C<qp|KfjS -A{9qrYmQN;lsgwZl#20FpvikJdng~nu0?SouVeM9xyi$%Gqd0H~gpNsu=gjInlb6vOPS~k3wDC<w}J1 -;ofxDVJ%*`9=(<?=~J4c?^b4xM|svgIyueT9w9#w{b3Fmo*~(fj=tC#lJ`lIe}pu?(u)*;WzNhR;LdD -3PC96E=TgR?JxRmfhg3lFX?o_Q#JEJ~GxDh_FC@IAZaO)=p)M4!H}Q&m-xaU<jq2kScN9&r>dGnyi_A -DHPmn3Wv=p`1)5!}-*Yjcq&C^h0_2l&F*-dRDJS3&295V+7>LawWY^nnQSM6oX@=%GUERz*uzh_-vT^ -*_w#Anduue?{B@A^VbTX+NFn1<AN(BzB2vkyPL`RjRZ-+_8W@sIR0n@%AbKPDR&8GKb1ycaDJ^v<Pzp -BKD<ERyTJkQ_g*TGz+m9c^I*41J_{Zr&4`rJ66?GV;`Ai+=-9O9KQH00008031s8R*FdH79}4501S)( -02%-Q0B~t=FJE?LZe(wAFLG&PXfJSbWps3TE^vA6J#CZQw$b19D-ilas6<x%*5^sDm8Xv5rfw6*W4qI -N=Bi;RiMpeYB2|*|S-rXc-rdF9f&eATc08RvVJ2q^SO5!Pv2R#_`DR<ytyt{xqRq=@l*`}CswlE$n^! -hzmA2`!NSh`zNl;)5Q2J+OGMareTG!P^q;;L{g-WF#GM&}0bDvhbvd!v=_*;|J-{s3zzWtCl@V3g<>8 -@y3l)TFRxyxid3@OpYb0XGxR;=LPyh%)|ET=HnW%7pS0Tyjl6^+d;@}+99-EVDEKc?GlUS7PctM~gik -YPX|QNzR|0neNNd-*JR`sZg)|N8vJ_Y+EbQtsu;)3hkkMUly0-^rfR0LTRM_8btifHW}l_R|&zGA-n< -*El-mGSj~l(3{;>m;74^;FHmKB=Ozm+iCJHD_2!Lt@GvOw9dA*M*kHgyn^4avIejkjoNyDMwRF}ZQEL -;jY#k%*;K1tk&Or-xl9{MZNyB#JHEyoY$Bq35sgRL`(?Im#dE6gSzTB4nGkoxwoWfL>6s`ipq6)8?N| -Dzv}iKbiK#~DB5RW+kX2Qv>6j)(Rc&=Pz9%r(t<K!$%PXCU@5utDUS+0>r8^GgO3r}FUuK1+68w=AS* -h|a^NY&@{)ag;b-+0O*(NK%x4Z400sTe({4sx@mlOTVYk8BU&92T2A<CbdtknH#v-gI&-@yB5l&@VXl -+&m>A_vT+S)xsuG3h2ql51=_>ldyBoAH-j)8^~_k6C+Jt!(m7Fr(|Dy6&dSo=R$ysX(S9SpFi(<;*A5 -;w>!Q82&lKMKl(79}Ao`*`X+ko?d1+r)!axLIR6xAkk%=rERtn*Liy>Bn?SIoI)8YTW9UAE;*5<<;o% -LDP+aS1F-qAK@EwHpd`m}anlR(JaTG!0`K`^*JkGcIFIHA{qM6@aW1j0YV3r>MRvtQme;A8w+P}Wu<m -5AV8r>Hji}*^39fpHxNPX~xB>%hQ|Oea;HTxeuvE)7g-p?2W}0gYta>WB!jt-<IWw~jEs0n)2Ls0H(e -<lhuc))EBq1i=)VmB3>NW-}TkM)_HIY0*f#7<9DHTf~NuYX(mFgS)dk2{9#RW0%QnVF-7FCNq%uzA{h -iwGbqF|q<?eY?Vfqx6h#H2hc#WICPn`#5ZO|=1~<xPXH70f2Ev{F2Mxd+NGamf|5a8oQzRU015rWpol -n$R323A`+;RR%B13MdYEPP)m&Y{sP_z+g_2P(_NxKGR4B8Ekrybz4;&c9g7ko6SDKc2+G465zf}gimc -o9C@(O1W3*-6(mMARSf1MsE;AlOMF9U&(`xvN$$&o6bJ3oJi&OrsLITreg>d)mMJhBOo=&3jQKRjKfN -X~IuXc<>2+*tydzXL2<38BfHp(adQIy?u}kO+^er!eTLLvF$p%I>Nkp@(fVGQkdNCERp1u4*+(qIs6q -vqCbJAp{tTBTE^b6D_s1a(;$|ir875j-<EHIIpRRepjcCD=zw685rX<h9uE^XCYRM_xEQxlCu&scdx* -%>*z%2W+AzgojJxBFz3H`^lJCzn-qC8g!NwAf{5R;yDY^~`8z=aG_~(Ok{81gw-KJQI;C6e9qO@{6*n -VF}4P>uP&Obf~o-nVy5pEZgK_m#?xW1h7fpqiS-|UNU@uskxXSR0Be(yf_B60x~;TRrY=h#FYSN?4m; -pn>5gKXlp`cl<d1B$}C#}g%BwM|J~LZ=%t`q<@It`q*_Nhpt-0aX8Mw<IW4Z!eIuHyd@E4N1wF9@2-F -9(0#=(sAZu$vOwOt#GnAxFy3RmqYW5RTc0fxTV+E9nO9^Z87&<L?PASAv<r@@cYHU1~aHO}WwCOV4LN -$<w%D4K#*Z2}_7+ADUry5vS#YzC~XsnSS%C1F`mzM7z=%hEajHj?}OtHRrJnANIfv(!vDM1xGDF>Q&7 -4WfBjMSQ!FtF|3ZNaoM@sjnjo9P!H#93A|=a&y`m)Oj{hQZ_-o7vYe7%j4ydGmqnBAeOQP+c|XG_(5; -+^n(t6M4%F|G3FOAqmcCLR2$D>E{B#l+2>Yrj6Bt!=7!C=jR3LJx~u;GXa6of}Gp|rh8!Fbt@G}GFM1 -a%hJ!k+z_NRa!{1!hJF{BW(=@+)0VWfYgoSpq!pZ-t7U;gARbR^!YGdZQAS1?>C&2($yy7U2&o%abwX -0(OmQw$uqV=_R`1j4bUq*XT8ph5&?&_lh680@oz@u%KJ-$+a?jqUs0S+d0<CnAtf1#n^NCg$LYg5%AC -T^1>?j6S|Larqa8#(eqKJPLW5>jpW$Z9P&*iX*bO)*)DDz9CQs78}IG;8uKx<TrKPpf`qex4ESR3D>Q -V4>c`c%t1qXF0A=bsUgpMOS?2`Z?#D5^zT7|yF*N)6^Cq}8GHq=Cw)$H1Muxzo7L6C28OYu0mYYsYzJ -HRAxf^*t+*mlGVh%zzaX75s~wqH$}dVYgK~q#|OhI#ja+Bg;xi*n_oN`VukBnN#DB>HB=M+X$5ps48n -C1G{>W!6F6)c(DM+l&3h`6Qe`m`i8}9Gplmyu+aYbv7|f%AqA<BY3p6N?4SY-faXdn`jJ*?Y4kTLv(f -s>8f3$0d1Cv!C34)x>-<KRJJhOOYoYn1OtQ4?upgbvbq)G{L%m?Qm%GgZ#04O)@}V$@mTO#}DN3wmwn -&#(6LIe#_V@4Ib8WexGd1Lv9IEvp7#j2Bk5|jSA+czcM`YNJF=FkI4vSK#zRCc0NgfAu(@#}lEDJUuV -oYo+U+0;2IVpjJ8kq4u(IQ-19am%J>VyZd=U{sGVVWrJiz)z$!ZRV6$~n5P?kbaX9#lI6`XxTTj;S#J -5IvK~^pLJ;TJ*Ird<N*8gxx86Cq4spPYpUi|J0yIbx<0TVS4D;PwG)R$NkhH3GOg?Xmc&X<pkC`irWZ -Rw-k&`%q$nsQD=g|fkD-+9GwO}?a^v~E@e4bp`d00vjDl@qC8NG{##J+{-je!RxXl<6A8^^#t!KC%tK -<6H%piBw?y$qFG0<G<N%O{n=D~2k|b`jVm%QZ<^cbmh1LcFPgVWF8P~q&uq!0=99R`JByttc90u4AK5 -!vXcTQbQ_?)nyH2A<prNIX+EPMtoE_}kw>fj8L+m+^KY>DR%CZmuL@E4U<G|milOJP8=&7@g#0+JI8I -_psRn5{c4c`P_vLFW-R`WtGW3=Oy9k>9zlESouE5lkDo>J;bZyKG~l!atGSvOW{g*TKN#dVFIym4eE< -+MN<Ht}$F`+N~+wS*9MVsPK)#xVw$Ubs(0<DowXru%zLomV0K7=GED8Jfwc9mC@w?%6zr&g;ANBEzkw -+amWI0m5*$FZ{@z9h}{i9UaQJc)`W|>^1co<Ufj*Z118JKjg(b#U8jf5nD3-YEv~D2B@h~onP1J9U(J -_~GGEYX=l9_CZb23bSSkvH6p`zE1s#HF0O4iE=N8f=Y9dSPBJVPRdz>gyStoB_pbO6_m-&qKCRnv=x4 -RZ2Jj4cS&C!jeVfy=sc7!otk|Zzl7PJ)0%~4(HGF7&_(qWw3J=I~M9XAy|Urj<>?+kZ&0rt_P%foo>4 -mS(bZQWqDOvfMQ7g9`yl_4hMI=?)=5%Q3^Y~YY<%Uz#CAdh;>+-1;@9+Isd?R%3D{e{W~%vsV?wZxri -GI6uHc%3=I)|Zb=KcTW*CeApmxL||GL;<-a2U3d$a|>(HG}H7GL|)05nM*q^C=(nrMm|1}V$m~3IX;k -Nt}{zBE(l|kGe$1mdWg5p6t#4FW*OCtlMUx6q%bN|!s9H~t!=#7n%OlrO$9kcmi!_fo)lR^l$srm2q2 -_>kZSD+N=~k>29HBUEPSSrn3@!Emyd{Bj8WvQOR#<e%Ao1YxDTf+na-s9aMFZvr@gZ`WNnwu)OYub*d -UU%F{7ZhDay7aEt}jONITqaduol%_^QNZt_M{mxrK}^>8wazENo<|MK?1+gE3!~hMaUl$C_>0J(#<Z? -1{I1<_|}Jk{B<G8L(>wf{<o;?(Co^3y0aa+Skzy#gK7|9p9Rm31vNk;*@Q+V9`hliF~V6^>USCRBc-1 -%MQ#q&~NR3aQPQ1Fz7qfqnb9$JWr~!=y)*PQDeWRXtpL!rGCG?MWlN`kvlRY>gj>S+j1ww8aEu#UShb -oDDN?7PcXl#OyJYj<!dVZ^V9J)7C`!W*xG+HBf}|E%)7gAq5fD03dcwyV=^(MK3%c_pElbfZ%K!aWf& -)$3|hJO0xc`A4x7!`A~Ru#IgzUiG$<PMuIR`-jI)o8*3ClFF;;bgYWSS!M(%)99FP8^VtEuMw)g9Z*L -|ZZpXw;9b-HY;djCazI}tZGj7>zhWA^K$T5e6zzV6bA1l!Swe#>~=f&E*{G8Pr&n;4x*IGn@si{^lZI -0QGQfQ01RS5KZkdwoU$|0=3L9}PGsoF+kh=BOdw5K>h$O`etS@){#Ni*&PCrPg+eqfBPSH;5IEjj&0G -gd8iv^DI166U~V96!>ubqy|B&a~&asR2D}_CmD3;ut%scWyE%bRe~)@==tSjWBBLhR>SHeCqv;uFZov -nd_GvfWb%I5M1x?FH^K6<OZew}&Jq0K1o$4*Y+oEqRBVe6A0sH?Z-KjqUP9$I5@w4qd=%VtNprWO<mp -c@-aL8!;@PX$K*}<VSgnTXRklY4I7)te^77^L7vH<Eu{;pO=zikiXAcx<E|52gWZ<~8PCG}iN%t6kB# -VRov)H>{-A-`6Wq;mwBgN{l-dH9M@*w7s`Rb?v&(_CjsFFx21yVPQT+qO&iLsLVTBTBlpJdi(^hbMCO -1jKn0GDDe@)CZ^t#S%`ZtE<Y!l2W*q;0jym)LG<eNa>5>w(E6EYE~gDb!%m{zE9E+GeHXEuD;IQ8igG -hZNFI8Xos?JqnZzBcljElx0JO1NqC#yjay)$?SGqo#zpbRW#Rb5!2}=+om-Pj_n`_8?{ioIWVDC-@~( -LNn2e3>mX&Eh*X~gJGbIU&Cd5Ks8z@!q+3wv98Owy@18UnGbI6))B!k@Z#v;s&!)Do0t;fDNQEx12f9 -DRpbP15cd@oCL3vO{eOFXrmWNJd=L|3l6*#BiF$Rs_5AU`~6v$KSlsUgQpYkd8ckpcKXcBq3{rh`3^V -AA1)guEGz><Impr%F+$4M5Uwbl!2TOpKux(NWWweFd(2Pd0Yfn7>V<mSp&P}|`Y(`tOB<Z9>6Qw$q&g -#tcCFrf2WdCk_j3X&ndSmc{r?+)VQ?hxX`8`j}TuQ3h1Yj#J3S|E44w1*}rY}WaEz<jrcf5+}dOlSYc -+hk!Vd52r@@ejBVugADm;O%l(RGpuLenM-iUJ$@|)a5z{tE97y!C6jQwP|7fjC>5Nevb?b3C@tMLxV2 -9PK963%n8hxz&$^R1OAxLv`0lwRBR{F23kmi9GI|*uOMQ9pFFx2M6&WlMA7tZl`E#<^vbi}OflPz9R0 -4jZ_H`!PXFfKB)q55>zKDr00(o56vHMh9ngU|rR}g2efankZvB_Nn{YB)kvUc9Y!-cU&!z5z8`Q5cl@ -975P}93BjnB}XI*KO`?_eEXM>vq;iByl2$6WQYs`HB+8Zr?CY`D!k8T~Ll=gALvlmf?oCZ`*uP+e6r3 -V%Fz3M6HPyD28^`Vx;Z>6||Z?Qdv0Ye+fKDeGK;&$}xJ)2CKtHlmTGXRBZ&5gTjTNmXSWUTjEZ92Oi7 -ZsN>z>T7X-u25G<#EeG9UN@->i0F~KJeAt@k5aEs(5rpVj2ye*LWKe$wV7s*>CL((A`7``YBgh!gBb> -M*=-;y9yyw%n*PB0MH*p+Q44iSlGD*uilqeUBm&j68HIRs)oMM-e%k@<n$rIWR^B$N+r8mo%;+-gvPZ -V&O!#$dE=P@3^T6HjD<{sBXw~FcW$mC|aFP-LjS-rz4semb10iNZjp?cY2X#jW==uqbc4=p13<Pf^9O -aR>-%C}hLBKnxqH%-c)E!YiWPE%W(tMoQc&eqSI95j%x%P`Da%Wr>2etzXHg>vNAs02)Kt(4hav0fbx -ip=TrM}H<7rFz`+jl$Iy0}dVRbt4A+dY&KHmmeuDyUuRsglEcTn{I9wvKL`s&4I1qc^KGYu4NbHeqZZ -X7;sjAI8_Jdypm^JFQQ`ZL!0EI9|!2VFq%J;J>eeyY2F*c(qO{LWf#+>@{2j?m8!<%uz3qUrnrSWG)2 -h6zqs}J>q1cN5r2vGUSn`3c@yx8o-|UmfU})N7|o4(g6sygVWm`-oS<&F^8E!(ucsInBgBI<#|UB#c5 -0Gu>0^fEzoUCKFq#zYac+jraOl3x%t!?%B5LnJaM1`ue}1kS*!RYtkMnz-`*JJtX_%V0O@@B<!y9ep? -N+-{hZjw4I2)9>T!JA-L|w>fUwIOj`%_w*BOe}T2u|HbXQri$Ivi)ydIc5=5MQ}$?+IA&3Pr3b-Hd@6 -*9h7-rqzVpQH_uUfz^nwoauJvDnEiY;&0hZUAE_Twd;)<qpr1UFv%wsJctMa-c-nu`BTsk5Xz##lHVK -5*fJr<}zbJwlM7N;9DW==(r;y?}ad?vU_;QIoYXhf1!g3+|Mi1BY9~4*vZa2;@b>6{w}Nc_Ra-y7ty> -Xs~#6Ov_MGHJx=ffhIcC^BS*fg9a!zJ=Mbtqd#dKqWa<03)X7vyf^D4wijCqAeyHDPJ@l!9%$URbjY3 -aPD|SiW9YDv$vTR5o_)mtG7Mbbt>i=czF3UaznV})QLt}Z5G#y^;L>j~#&=ON;*MS6VgX$2Sa+=|dFf -urwd?_9OiDm#s7_}9<2uJhbu3rZ4hvL2kbxD*yu?{>ET5kb|46j{jx^90jAVE)a-|0NM11q?F6)*NJj -xba(9(!d_8N)p#<!kGN3wC{Zk|toZX13tnP(gg~o)#K{845@Eb$(_c=U>#fU*DJt56WDJ?FMSsv(dS4 -qQi9Y4h|aZgLSQ=Kj7P4f)qFCXQ0<H;QQD!X>~zK9PeQ0p)X0kYR>RZKh3ph8&`S|cFkp?!0?=$EieV -^NrHf;8-}Q}P4$j@H4RhNlsFN->tP}kFIAzu9p;G-(B9wE;)=^fxlq?RXeQSGp@%9*%<`2x<oR0Xfxg -a1!Wr#5uv(Y9y21HaWi2$7twQ=0A{g6Er&%<ePNT7l21Z}tR<yoH%{5?X<B#_H$kD=PE(P^vl>~!eJ* -R|Beaz!zO-*L&k2ZEw5G=8Ivy8#m(ehFXnk5z?f*~XGxjRV2D{8umz*ZP?+<6NgAhqBQyXnwR2n!eB$ -mn|5zY7E=tTMpN#hx%yP_VZI)NKG~vgqMWCKQmM6Z+eH`jLi-#Uuzw`;fd-4~BH=NMAmz<(`d2TOk0R --<x|t{X2xFm?b-p8?Mu<jKT-#qC$R=XNb{(ike<$msS4Y;iKewwSIeDyv<tt0sq7ADu3Io)|*ZFew#n -~-GjbB%6^qLj1u!X;$veW<cT<@>baMhIv!Gd)JA5fg#iKs3LcEe2!>kpoXhNBkJ10~o;O=zd{`R!71L -E|yqjJtz1!<tti+NFcP0G=UCrefD=xlB7ZNH`x8rrH0479^{HBdVT#q5zQ8VOSH}d*JHBRcr9C*XzBy -rC~qx~9WdB(Lk!}~G2xnxD+!q#9@nKBBIf+q%g`K20_{-v!vnO%_un#7Im`Yi~s$5D8HzJK{2te)2%L --pf8_5D?!+Ovb4+<F(g-4+2~Cx4h@X%;;`2COD_re6+&lVb@rqQhXu&o+w=Vf(RjH+%q{i9Kcf#-Dxs -!h>QxxJr$&{##twJzN!^4^nFMGg!LgBi*oSf~+cSG#-pLm)hUg;(mWzjawDDAdySr-PHq&=&b`N2Ct` --a{S#hKk$e@k`>0bhW;)cCTSNBXY6RAe(8}r(vdLoN7rFL-+ml1Rw=g-IxDnq)tS|HJ`V#NSYK|Zm`& -)3cTz$_0i;HsIjAZfRUP_e?l5`FZrny<30%VM#Q?GVpc*$&cJ~X;uoChCLUa&+cX@kX+Xq<pU><)0e? -P+8$G*~pk1=`art;V|aC_Tw&E1Jr^}8o0<VlHOJ@bB!gxC7D($$NH0Hv2)Q5>!Tc|EM-Ve39*abvN(J -WPH3QItCMw~#|m&?X5z^75q4wgNSTq;i;_;&X!EEA-%%>809|fp&{UmbY{hW^q_H=|@_uu|aqu8|T|0 -2eCgYd^!ycg2l&TG`Pr-`;dYy$ZN*eVyS35HmPGNJzjV_w0%#{BDC67EC*O!ibfWgZg%XdU3}3VR==E -DPEZ57Y!*GIPF?B-qwz1Gc&Gswta_ZNc7&BR9Q&a~hH7e`LAmJ_KzR0tt1MPTe5`ijV&$Eh>3Axn(h} -awKwobdzN6%LFyYT=umG%IUM+G4VUQN{Ni>)bB$|)XS_Ww>1GSYSnhG5tI6~I}0``(DS0&l+vd=IdmM -1Z)+LmBSElx50oO%ay2!k-A>tS$?E+A_qWnduB3o|fV&#^+snB)g=y8x#<-Q;nDVx+}$?As+LFZ2Q4O -AbG5W#19cF~H-?cbSH!-8Ve0Ay2kr^heX?MImp!#Y`EoEJZ%<ACs@Tm0$D0c>0eO44ymjm{}U;EFb8k -JsJ6vU1pz>DH*PF%n{%(NT$A#!%C_}F25l<OB*^rKgM$?n|{6R6X-;zd80l%W8m4x`NGjNy#8jZiPVv -M%J?-M3qNe<Ro?3F)YCIxZ0p*E4?-`1JzR~Bvn&UK2mA8KO?49tkcm9FeXentt8>MjUVfa4V&k2Go7^ -xwZaob}1rH!9_WqhL*xtTL9gG2s(it;dHr(>5T<jF)#3th?Tj~w7?V|PJI+M=<hO^||CLvzL!hbv<Y? -`3x8lU%QD4Ak+`MDnb^sia}Hi5pV2DEN9X83~`sAiktB5NMa*SoXY-wJ(hG`4B(L5om%<TNxUn)B0m6 -X(xhjL3t<Dm-AOf1<sMFx%G)2a-;)pw(>8x&-i{wk|#gb}w<5q+^dw`KO&~TRod=nRwD<n^O#(S(a6O -)@l9)=c;#<rHO8Mz~M8!tTA7tfEW>9-*9$ftHS$Ii0jd@%Tq02sm{^gJ}1aY_K9~q=L2Pwdw6En=M}N -v5aNZL4?zaZB~w7f+|enl5kuFKoW3|r*psazuOtPEdl!)TvEpCZFz@cMXv*ln?)5+I(?TZbH;ST{@`D -_EC+c^xS5>I5inf)#b(byz&fD&3L>iLQg4J!DvNNuJ81{ErljG$8o9^LmhI9Y<?$a(Ghr&lLAOAI){! ->NM2QSF>hJ?U}Hh=m}*+4`WX^r11Z7Aeke`i!tbngj$FMMB}%vYz9_VU8&yL31Y=`?H1b?X&B%hQR}5 -2=-gjUgjuf>-l9b~Ulf!xeyg3Z}CzxlX`8NYV4*iO>fotT$S5S9x$<AM+;0-o0bOUf*c1ZFH_`bZ*KF -eyC!^o9rH$C#KH6+tbU>2Y-Yvd_T7RXyJbvmv=rO_XPV1d^*REg^M+;YNAA3Vx2F^oyNn%pPe}AD{~I -x!B5N$_;SL31rKgM<L3ydYXiPVuq)|;p-dei81PY#kNwUBE}&oJO9wh|LSNJ^V-xHbfM~bdemv}jIcl -vxrN#?)KLHl{NLTMQwMV}8GvEt9N5ASb_)A0sKKWxVt#-exi4VJIx~bN!yrkN)Ks<Jd0!(c%ps5z=4} -3?#@4~C^)zKEgw>92b^vVfKQTGzd(Dd*zYJBdC->~~>@KF*WqLaGUxFLa`M^!?Wt|4pp^j%2xIjt9HW -W2FoXqPCxZmZ?hU$YD$|5oO0Y{9r3hC~u}4DDuF=Q3j6$pA9K`%hqaQ|o%hqhuFVy>~&82W8idIt_#| -M(PZeFy9X+M?2npAv4aSbybnn`mIdBm9Fn^#fS3Ggd6g7-<|#F&skAa;_p>mtiI^%4B%%8?>~6xCO&- -daQfh3=L5ixAoanc={+~~=C>2^KNIo46A|B^hzAq#a3UUo3Hi;fg=0a7(ITw@U3TZGDs{`~kYCyhz<g -w!w($hOMBGHn8dQD|?l24ye%}ahv5xA?9kjK;*ToJ$0!7!D?k?z5K?Jk4tE2gCXc<IHd8ur4rZ1y)oA -txXbgO<wRj1`eFlU<~CVu+WZu8Gw+MbxT+SPel;zbxRp>F;>*hhKwCUh}YXY**u%g`tWW)1b|%wIY#m -A&4k^%Z@+`P({g^X5{#-jewIdrHIaLO+Gc0U>~LsgYpU0kC`1-*w7`pw1)QeM~p$zo4EkaDMSOz}0w} -z!%Xx$nGM^ouFfuP3f=5-I~>=R-p1k$C%`Q^Dpp0!GoXoB+;Y4H816m5<gh~q{I8=)G(Ry;NE!5dD@# -xR6bATu$rF|clgKq`-}63-~9f!zkl%XcN@(s)NNB7L24_;;HiHDP)h>@6aWAK2ml;P_EwwIWPV{T002 -7a000~S003}la4%nWWo~3|axZdeV`wjMa&KpHWpi^baCz;0?Q$DOlHh+nMGqVoYG^=+v}Z3a7~5XUl1 -Ix~%XUbbb?h-1U=wJNZ35kx?uIC=LKksQaqn>#aS{7>?@jJWE<frc>!SfsqCB2GB5bj{t19a&D=RZAG -pk&#>ZVJ|`k>^ecGK#|ZnG+@EB$txHx<0L2lJ+0Ci&$wQ3+4KeKvykwrlcfw=BBrdd7LC^<q&>yRxoY -op)CJWnFOUEbsE^B5&Kmrs_|lWL_4FnaNmm<+9MZ@Of4&x}1~CS|_~9Z%=>xHgAhj^5?2uukd3r`*Bq -?IW~f`FZ1qN7nm01LVaE4EBzIp`D;x@>qe(6it4Jno?Mqzr!ttP{{&#aFK?jgw#!v&cij~E48}}n`tE -H}b))3f_x1E<l)Ry2m36bS!|(<MvbfBrH*espNf&U^g9Lt0tIdcWzAdY~*_{5!Z_o0@BEMV|>aDK2;$ -8PLukx#+;cw4z64YZk?fB_MQ58)&<(JbAI&NTmU$!dK4>=6|oApYk{7~Ft8~NqO6^?Sg;J4RUNi|hzZ -=emjfug)Ej8FfZs|NnL0zjjK;lV*UM}!=|Et(cSP0DIsCtqht`qe1;FT)ec92uYQOKkt*pjfnp$h0a~ -;|WZ`tZv3!U;@o5s#apCDw`x<B&#OBTIMH7RRbzR6ApMT#yab~Toi5juQ2CVMK_rOkb0r!YpmXM)@S@ -WN?tVedNoS^v~Ig{zIjQj1uy~{#UpN~e0*JAT`%B&XpaW-kM@(w^vim+5gGo(uP@7YrNZ~|qI_G}&b` -&pS51A@6m2`X%uVT^)VFVQ4Zej@sx0`|{HhbXjqTxUd=ahhus62*i}kVsl*f-c1B|`Fcz7PszXajnP2 -S#|K2I`@VCjIr3`Pm8J-`dyQcQ$w3VYIl{62tuFN*FBkPE#gAgg{nJ39v|v#9g#{NUhVatcX|6JrBxa -yl4k%r%P)fF2NyN+!5YZ+I1_{70eWU@&;9R)5mf2~d%;o|RLmd6TSHNY4^I{A0*_K!s+-JedH7m)&HN -w#8yTGMP>i(=ljK2SYI_XYkPs3Im;RMJL=X)fW6AG&AAQQT^y<P;hY|_{mLn>VQnnyPI`ZS2)x}?$Y6 -bn>ekPu>OHCLyjYxv<5)waBN0kXh)@4S2Q5Q<nZg{2Y_vRX4@>gV3PCM+Z<?+PBw$CzMFi0-@*=?tT6 -Ss)?<CR&C5;~#vvHv2b+2g<N|0(NBL3*x|l2cN$~ENIoW_Xdae0gX3M%D#b~5zlt!YSLl4q0C>-?Lwk -eKhYWz|;F`~-M?bs-3ia8X!&fYZZVknmcAW_k%H9;sakSlNCp*d{74I-WX*c9EmsVL0>`i`*7DLXQ6# -k=VQx8xJEshuHJI78;*yLZ!qKAxYu1>WWhk>AbgfxeW0<!-MsMljuCRa?mZ(f42KvceT}fSp4=?1p>R -s!jNWx70JeDW6F?33O2J_wIMqm|4+Io06J)0^Cglb3gdGZf=lPj>iMe)YYBSeWt8P!J)~VC0}>-M9uO -^a#`04q}+{WMbwTdV5m*gg#x{U4I6O6fcRq$+dL=YK8)<41QODF7ochpuEa@OKr1u>g<Qu+oQHP06T8 -RZ5Wv1U#%UYq<})Tw`ts@wD*qhlTzg&2dh_cHD*tK?z3k0QsVZk|Ge9~uK34Ntwm2ZM@oTT^+ey1BfO -@zSL<kwj60_yeqBMI;a=A%}mFkc&L-r}j4L*)}DL!qkT8ZJDn56NFh9}8Wk!cAmRHC^2WB{!BV3=&`b -#e=%hPy6TUQpFzQ;9(4Bn4z10h7;|0^pyE#ClGf3k^w9A+Lfvx#=8?Ib@&b>qXaMie3=|Ta{W8DNTS= -&l^lhs`c^`Mg=NryJFQEcuCo!q><{b4lPKzgpw3z$btJ5l0m*Hry8k8da|*J^SXg?%XM0k&yjH~^69m -nsJe0*fm1KKV;5dn^Rq<(Y-D$B8Jh&g5Q(fiOoVF|rsk4U!yikSDiMm^Hqb(Nu+5tS?e9=z!p#Blo7` -muI{=}W-2wasuI2>l_`%Epl8qKwwM6BCYV}At{X!X}S-PV|eLFs~buw$5nsw@QjK1P@5MboLk&aw}WK -hjKtTIGKj+rDh`_*Ch?GSMt+GMM7>C^6Na#NzG4nxmu9fGFqt^hM5DFIk*1Uyqf3)^MsB8%`Pv}d_q( -!?ieS*dw%hskBp-4;caAj3`-C{AYRRtp4G&=s}L!lm(Cr9h6=BHtjc85YUniy^!b2(OU@aU!sML{?yV -R*$;mrmAl}EVPUE6>&a-!1mDZ<Y~nO09%PG0T2dwnKi90dh^J(5m}}r)`56}8iF$;qp-9$z-`ttSZ63 -maY{NkGb14A@%eisxbn+~!SEcrEQvPC^vT&dvq`cQW0K`(wnqDeKagov?Ez~`2$<2oqae{;ZkhWUW_O -oO=Dvp6#R|y8vzu|~zM|CU4s~kLC$o=!F~IXz#WF8Zi>JyJi+t5W>u#@$YNFf99Jnn!6k{!fNZkZGo{ -!Z`jH3HhCSOMW7LcjGqj0~;%#%&jj9#W6Mq9{z7TE!SplId}e`@(=>aXI$8Ov|W?%ImtrpN|0luEIrv -01R*`lr{<h!<`~|BfU|XX4ot<+Hd9Ds&L9Km-E8S*SjZqC)5*8p;K088|^|V{2!U<<hcy1YAvl1eVkm -*smVlM32mLomVsDDqU@)L>fnp;fU}j39B*$S}bZ<3>s!2Ec6LTTmZ82!$)X9l={QdS%}u4=qp~`j1x+ -lX|8&Q7|WCAORx-gY)kwH6=rFuQb*J;y&=-Lbh2v%kU^IPFE_v(+ER;>6jGQg6=OV%<A+ucS=Gfz>rO -Ic%n{l!m=yfVP5K4^!HVrRrh$wVqIrPN(LQMevVB7(b5+}-!0^UPDzs7g#jpZN>$=T8l`9acz_713%X -(H=a3Dl&g@(ENAXWMD4v;Xn&<euhL0Wx>j+r82blRf0xg!`;M1VmFWe+eORUp+d>w57Z;RI(F@bvIFh -QybPdU~TZf}%$$7X3(6CYT{E(`UDt(6U-J^-`;ouz`8g<eO2lES7b%d0Q5@BRW7sX+8NOVY*XZRdrLG -RrTSz!Y{K!fI1?{yeVhJxv9R2bdM^&90t$;M;n9#%Wigl_uf}Qrz^L^xSn^-P0*;YON#XPy<+GeKXJQ -gknBaPx`F4GUN?wwr@oxK)UxeqbDLh%3Cx`v-L97@;6)0JA8`%Cc>7!10p1~cRR4H1=<m(0&Re!$Z#G -Vv-K~+caA|@XvwA*n3m&ymf^72CV8T&Ik5{!nZUl;f=<<Do=j+R*vK#;hg9YDgle=QE*ng9t+#dBZ$c -_TxCITieLGp?ntfvDiKk(R6b@ZINN6=@J)ANx&ZN?YLr>?tlQFfbzp@1~2Sgst!1UfK8O~7Rh40*1ZT -F3z}pKzYWa88oRX&<MulX0{lAPc{2W&I|nJvD4QzEHI|jN#ur6DT@ful)6CJIsC4ofzrXja23O=;OA@ -R}<ubco^`>7f6&=w$#$(<NiaAS8Tmu4>=xAFn*mAjGhw;!Xb~E=*hLm5IAeRJ+pA06B;NnmxNywa;*x -E%DE>IR3K#@ht3GJbq~IsTM-+XoHwW&Mw=p_R;VkZvZOoCXQM<ZMi<550*WW~<uApwL$%r^fgo1eJ26 -0AWEVLk;4Uf1zrulr!v4X->BGb6!^7#r9Zw%V;W!{r+xJqu<f&ncmYm2+No=R(h!j8apu7Jq=<c7_w- -qe@nd;6SD*6XSyivp}hTk&bW6SU1Kl`cJhYA+))sCQ|!D^8Jxyo;pQ6LKTIB~>g)~lkD9H!tD1`ewL( -gh3G+z;ICb#7&6dNydf0k9PIb)dQM%k_K?LQ-{QWp+*gA+ny)cf%uMWe!hRG)>*K+j3OJEsERQvOJF4 -_CRagd=Jd?-zM|SwylbFUV+H{c@W;>_T}IKw;yo(uOS#J?7n~Med$u~keFjXn!y9wKcM|*L3_r>KI9+ -uko<d9myr77ub?i$H_~}1xb%+ZS}py-b#CeyCqGt;jkXtUX-Ouyda+Jiwic{eq(&2ia<ch|er{cHwNW -*V@U$Q~nXjwq$wgU@vDOO<OfT$EH-k`3s%kYJ5G2NF3|ddJ9dv6~Ekqi6>cBKsq&v+=sdiSV`We8ES` ->MSSL47nwW%WQ?#{SMuoD{ltwyu1J}h~O=D?SvDS2DY*i=rBq(p3W0%BA-tUVx<EZd|e4SYx9#1I}Qc -trQ0Y<p0)Jt*7$Ln_<ukwmMl@j-o;JgDy;)OUNS@2n)o^Cz2)ODZF7A!N)l^E3)pai$+c5-~TK;&FU- -CR2aKhzTuXZ0mOncEzObrBe({hPc!rS=^5(37(sCV@u(gdO!X4nYEa}BY9;k!G!s?oWV?LS_S0EAeth -9);?mHzq7Ji+;6Yfkb+FzCXA+zc!wW!>AoZXi7ZX#w)WM_*%-h0$rPBE;)DVgoGD{rjwEoVTsvGJdJ+ -lWfAHWbb81hZ?CCQt3DGudzQO&p-GVWF0i&LCR}@to;S>;Wak(xRGvWtZ&Owu4*O{>XbcP0IR8tW-6X -=#AW&*9J$rF4)ZF7ggX(I~GxMy#OQTWMlZ!BdI6GTlxzEJ})e8pAy7R4#tCalA+D+kirL9RE&<_yWPL -;=T*j_IOgs-T{$yy4vys_=jZJ1Kv3x`(Dp-8EaSn<j(kFkP%?O4<?bb8^_H>jsK2(Ni|xV@(8w9g4Ox -6RQRJWpv|4Y$59-e4+9^zSmu|37xTt3GMRbY9yPU^&tKk!7qiOBmN4q#!3FE*nEeyEv$sJUQP)U5kvm -UxouAJ`>?}bJEIkr$DhI-+wcQ{;eP-43pt|uCV9O*N0vr5LylWuFXcDm8!tW$eq$3!YRKK!((CJb4U0 -OqVi@I_&?*{k0jUM;5_M?;r`A3?uvTr+0966-&1DI#Z#F75s)dmYz-_oII93~x)#a{><*M7@nn5j}%W -rP+01@C$ydgtn)?k!8-gC#`z0}(-9PAPEYBKqeBV<*Xe32m~K5E`wV?2vtYL-=Wlzpd|{EG7Ak&3bM2 -xhue!e-PxnzK#N3O*E7FftFh603kM7M3eN&FZcl+(~$~Ks`{_bdQrISoUNLoi1Nf!W<T2-Sk2}9v?-7 -QxcR?9V5n-(=ds4TawOb4+0{si+b%&2K(c7bo7lvoCb5`4yHhEGpck35DeGI9WJ4x9t)1z>Hmp|k%JH -u$BSx@^)-qvFpV;qM&ML-cI3!tiE=U||3VjxJ5iY@17f?!sE3;@^X6u~N}cR(xRDZlR<v@*%{ZbRJ=o -IRQSu}%YT?Hai5A!aH57ZJMVNH&SP|i?aYG^o6l58*rna$Z0WqPq$#|e<y(p3u@K(U39WIlmoL-L&;2 -0!DNh00!2mn_?+4m<XW<2hPs7OZeE^9#c)msanxV1zVO}MW7bwbRM&JivP**D2_2~KwySuJXxqYCxrC -Ui(UcQ(Q8BaFNGkz$DniwORTiX4?yunxqU`Gw=EowxzkFyo?_cOoNGp~#^n{zT+8v2aE3HJ6}LtM5R6 -d*ou#aTG}Go13k-iz>lGY+9BXkDZ&uLjY;~;3mr8bD12Fk07Z+kge(o+HA3l`QD2LanBBx-eCMe8}lD -R@XQr0tQ1GH?n-A2E!d#UenTtYjO9p=b0%lQRuxKEqJobFs@pFSGo%zE)jp^0{u*1_RzKUfvYBeNu)( -}7+jYKhkFsLiDtw>ZmNPsUc8m-h!u>O4z_Yx(K_nrG8Wj%n^<t4wahHhy;o;onH*)TBCz5WEA+$L8!_ -jv7?%8C7v$NYSBOL18wi({g?Xb_FRsQK4fL$}09kRX2xrelwH%>jwy3Xu=a5GCB%H*(oP8nRpBJ~xmt -vnvXwXL+?yhez>i6~eFK$pv6b^kJdmmYCD#`I-q_$wW8$7=nExpEl*iJ3D8nhmPx=BDY*2%e_z76YI* -TN6S%9(h?jXf!REQALs;VKH;_7^MK8`FNb5n>W~^qCK66Y}?M~ytBCo4n}$-Ge=M8tivfDy?w{QZ1&v -BNbjrS-?$9wU3d}J1m1?wbO!ZJYnUxFPXVnx2A*e|KB;n&1JIxpYPbx5LULj<28Sny_}@S?8dkDWFb0 -+(ph()-JRMa#RdKK~pwK!%Q0S>m6#;jiQkmhln#>%9af_@_VJC>k6ID27jpwxDi)LDYTyYhT9w@ozKs -)wF{!V+G0b`ED+?~!IklU>4eB6FG`TDEz(fq@IlHvYr117-cihBB*19K{J!L+WcNI<W_oz->qx?8P1Y -aAAoEF{HZCaD*R+SjUazH%DVC6Y)b%<)*B2(2)_t4Mpx>3z}4@F#_iG%9yFa76;b%2%reS>?t0k1IyZ -m6T3Wf3tQ+f!hAeXyw;!u?_M^1agZ{yD*>nB=H&fmAj#I6qbw926CwV{9BjK-ARm@Bn$SfSAh2@K-NE -$9)D-iClk%+XS4!IQ&p0Q=jg^B?zvh7Re#+?o{^0IxJhC@GV$zY>SYL>-5mdXL%T)voQ?-0oi5su){c -6I`0*{8_k0dz$g8iic97B%@D4}Yw4Ld*z8#0wZ;a|bavrWvzPV{}9VPOI-0+=ye`M3Q$R_svHQ*0qUC --y`JL3QOE`#x^oZd_@agtZSno+uoWylxA0t}vE-Gl%0KaP+7{eS7F|NGznw|)FKlm2i2{yzujZt3Hrq -a%q6`U&p@u`7c9KB2}(Ig<I{y)AGuKAwMg&t3Qc6aJ*#H8>x|0|sJ(F%0mQbad9lVWL8Bmr>*{qmqHx -diUVPRT)N<$NeNJ-fF8gj_Dt5#aajVpnkJs{jut|nAzYi>7{@c!eFC)5egEGE*@o#Q83Ga=!6W3B8)F -zp1gjo&Q2Y09Euu4@m!-BLX}+C>t?H&cQm4Cf6Y>EQVr1Lu=fBr#u<IV?j6R8`?e(ecWd9hY6`rKBKf -84v=UodxL|nnzuTY5QX?AU4tfWnFY_my-0F$Vbc5XF_*`W1=6z0G&K8;3Vy?g6_4fctt3xEiecCbWa) -j=X7jlkawb;6ip!o3dd15-UqXLs}a3H%I(&Bygc=~r308-k8-FgDj64*#;3Y};Z2$TqZU0)<<eL6$uk -L#{mwI@%WT$SDR`V!$h>HacP|6DHW%O}gcg=NPd+HN*p*<-3@S*^Q*e2+-)0HZZ4-!AJJdH|)SJHt`( -pN}jdMM4B+RAF1jK*P)dKItB6t386^4iN8Re8mZH6AIqR(U-FiC+}4g>1`W|ctE%s1h5TUoT1T>{Ao~ -|#~*=jdkuWsp8JM9r7#TNC+ohD;j)08b<DgN)FL^|SuusZYhk8WC`jXKCIcnp-ZW6DX2L~u$6?`x_Zu -1#)<Ex6L5EuIeFuyoieY<M&wqHPT6||@n%3*8d!piQ6yvLL@(4NlC&<)4Qas7Gz_Y0Eed`Jx^w=Pptl --cY`Y-Fe>dLMxw3F#;SgPnOI%~ZHHmWUYYmR4aw1j*+Uoxu;9;PYqEWqgIt*cEe*dlfX6e(HNx7d+-P -99wm)~PL4IbQ)7ItMAQK9xl_kTxiqF^;3}>CK*OJwsDb7<I)))$(Mpuid?G-(~ucS+KwUc5jA<@x)ma -@?NP3S+Kkk4XVhq-$~8j9|kT6bIeBftaMGP)?0Knxs-kI-dcIT7r;KuK-6@G`vWI`7{v51c16yVPthQ -DuHiWx?OKuK;Y!3sLzUR5mnN{fPre*~mAv@&QT*(lT+~Pj&_-DIKf{PBe{9M!O8%+*c9gs<zfFp6`bk -<$r)rO3zKaQQ-vO)aSmsprtFDJ<`C__WD4MYZ1`3-%v@t?M?zB)G^^VZspwkFdiHCoe=r!c43+}k2!W --#AaoL$nr?QV%KJC-D(AV#5K;Gi0e*#>^KQH;u3;y$l|NO*%zT-dtmH+$;{5cOn9v^-A2hUe<3q$x<? -C=fum%Gco<<4?nxvSjMo{mbzoZC^5s;4DhpNaxB&O0G;mL<oGCC3LL=1xfMD(n*ig`UmITc4!4T>4}* -esAjjF#oVkmeP3Z332hAB+O%)%O$*~+H9t&qEy(-ehiUNaKEw)qoU*!3{0?Y{qcYjAD+B7r9UKE;W-E -)NL82zHsln|z7*_=4m`_uqj%}NXvi9O&;9Cpz04~U$)8<S=ctV*Rrvj|;Sr!ZpH?gH)VMmNZBIq~KSY -$x*dT^D=+SUTMFQ6P#<>$m<NYD3;&y8F-AZ5Qh)Jov*;$;#Q<8L=S0*;f7Z9X!J4eQWOj)dJAa9Ig8C -qr&L^B7LlXA=a;NFbqNm2&~-<XTSg=v9l_G#3?P?!t}Kf^cIrE!34*`@2UAYbYdu&tO8ZXVXCTdda|e -$+Q)olwmu7ynHU<OMt8`i}Z|Q7`+enh`;1<n%cRCT%?}Nr_8BP={^dLniWNDXq;?!pC9lP_79#K$C`! -muLi`NVIdMovr9~of?Msx#z+{z8y@p*@EtyRC<wNIJ~(v046r(lXrcy24${u1`d<lol!hw*FX;|9o1j -2%dgu)tdZy8HWxZ*1M@AAa~X|^?ha5O=+ckmw8Gn-DQ3xBOe_3VW%b2s{odJgj0Djte`gXspH`c5A`p -;}&X~uZu+zgPgZk7d13<u+6X5B!(;&klXHZ6~w`FcnOI<r)YbMLF-tls(C*w7|lDq6O#iTdIs^RBhKQ -_?-n_<CG*5+!)3K#|sH*WP^wys|N`i-kst7zlsdj#9!htnRqg;fJa;5Ex?i}6f;-BmWRcNsj#8^+FDd -TvL<ZZjUrEb`^$EI)zoP&{4c??4vLkl7pd4I0Z<s(!p7<|KLbJ>N;gb=j<=pgPKFhMn(jP7sK@%^Pz> -<805XQts_)oxX^yd~CW_B=>vS3qNnl5ME5A@UHJRAG6Y*T^G>*(vsN3B6Dy3c7;j)w67`Vz`!=f#~j( -N0IT#c`PAFM9bx-(Xh(HO*v*VCA%4+Ck7ahBQy4t=`_4rVU6bWmU*FYf%t!Y8jXYdzOT0BWN^mYNu(= -l(&OBb{bi-zBF7+_D^SIww*s_X_^@}Jj%INHee%;Ywwiq5M&@<SY(riKc5Z$l+Ei%>`&+2tI&RaW$J? -VfAMK(9f&@mZJP7%jL{2r->w#kt<#YEu^%0{Q=XnYja%%m=MgV1OJ4U@+xQumZxmQ_lrBQpA?hb_k=I -~NdJlzbZDu(k%qc#0{Au$#KC<w1-v6KUFDoB|?f5@!i6;}KIAUf8*<Ui`5Ptqyi|@w3C@^RW$%acC2c -#CN{|5>%EP?cWBv08#W4-%Si5S35zM89Mo6+6#$Xcm<b|z{EKq5J3K@t>Sv%8DZIj`$Y6MO20^e?!iy -@==>89)ia0z!9cYTV>J0hzN$&+j$&=xrXaH5jZGT+*m_z5q8`0QU*7hpt!+$n6yKDf6l}o$i%E|O>e` -BOky;Q>63>uK71t$%q8<>T==$zpBUMf-=&!3@aTe)#ih(2jE1uk~A#*$6xrwL&=Z(WtW2AptuQq_ZFU -xmj%yF@z7;1+k?8tz&=s%Q#TphQY+7hx-V__JL(gd!&Ef)){xi@en1-n$S1>0^`ue-hDe=3`L%%!cKX -pd8Y*MPCv)N5`*Rd5(8j2o3)sLbh51a^&u&Gc588*Jp0LTMT?N<}GCl0pI--*BsGJ<k6`qo}$Q`6Lz) -;3swIyS&t02jiNWvlnX)tYNyfe<hqvKSxB=rkIsYG3_Qi^)bk5mUT|0&f)wcJORJBST%rNK-QM|231$ -s&226gveKey?o=t{-v-*MZBnhEaU%~A2D07;5ALtflP?tDJnT?w#&ERTFl2Wi&_Ll5PLL&^?^bvS7a1 -T<5CPpN=5E==T$Vr9k3$E6bmG&y`t<XWPpWo>TK5S{kB7xR0o1pwNS*boBN@nMYnb=wdgy7JhrrQXk+ -AWeE-@UKo+#@sI_z)=F@xMv?5+r5{W>|qz~f=UQU$Pv4E`3XF8(DIioby>G@<h}enN&$%Ya%7qtg7s( -FxRc_WpOz+eI(7Ob?u!tX5B^#?9*ytsOs_Bm9j<Z6q7O5;pR8T9uCTO%Lgj*P})G7Mt`v{Bh4wz4)j& -N;p93)%SkgBj9R$p+sV&dX6yL!m;`Y4$C0(-upAdYRJ5IH#7FvhAqnslGtxC2MkA_07GjYHJ(j93hkD -p{Yi7SIxBtjCa%8nbHS%AE<rK$o-SHG4y3@KF0~vb<MG&)B(#L9IS{>qh*x0sD+W~h$ucp_w>hl$A^M -!-!K!j6)Bz!!Sn<Nq)h(;TQ<NQcJxNV0j^VaC(5D3XMl0h;PtyL{a?9e+4sosytxTZ3AtUYx7Ru?|jU -8$@SrAG%PCFlF0ix1*1E0L<am|~n_0mE3*yyV}y_4&rDVT%Re2t|*{{qbI6q))3FhN{#l1G}grWQ<rw -AM>g!DRt+WYH9;(-WL)ijglG)Q(V#qz}1@cO)bWpFjL<jpM9;Zd|}&Xkzi$9L5CnI?Oy!e(ooOFfDY0 -ANr;n=9P{<r+8%sVw2*;a3mGOCx%loOC#a7W=GG298@=YpeyGnHnAghRWoeA#e$sOT^DyEDmuWW>20V -|3<JyEJ+`?!DmDO)AJIE>S-)${?;gd6-gk^(t@yQguu0t2G+FFbrQnuo;Za<8+EOENiWiWGb4*9kda< -~|`&Lbyxvsrs)qvX2$87GJ4tu-JTlp;3&eP{^OP`unc6?xd5AC}tHrrZv7Y#TH(<}j8=fHAY7KKp9?% -z_WXjWWNpR&-LGkf2mC9cmPZ$Uh@$(HFc2VGm#JFhXl|ExOJ4b4Zp+CziJT%+c#C=i%zPQBXNntHXnF -|sb_QgPWz&197Ag!D5xNV;!hjdpkz@5*)mUUz$~yl;cuf35r9{vGaWl<gwNTcdg-X5w)(@=!{yJ?)tF -G~Aks8Tne}bH9rw$4yuwuKz@FWY?J3gz{hH%Cn#A=Ek}541X$$yf5w^jgQ4R#rx%8Gmf!{a&o!RPU*n -1;Ps2-z{sPpJ(#D;l%(-NBi)P11O%1o0BZ>Iio6)O=0eqr+6||1ZX`~9MN_DGiy8_!Hw}@+y=u$Q1FN -Sh<tZAnxJQfyw#I>jj5!-}Nf6E)?sG#E9e!(Af{S&*Ix`;Y_e&tX%k`3Z7)S4TS#-CwHvpL?g%HC^Jy -j<l&#ou}Js5>i_RCJk9ygQQ<u_0(-F&48CSQwXF-l;fq>x(<_qEY1^*?2Qo5?j<DC!v<YW-d4lvwsyP -3lA?{pGV6ZC9zhWkcS{vCYn!AgB>maJ{m!S$3mvlwuA<+Px>VRM}`nn4l7L2RDY~ZiJa99pw&pbKIP1 -j(B%g)G)|~Ke`TxGe^^9MdC>B_gQkhWsLIKTat~;c++c4uVD|Q=+()xXE(NWLDg(0>UbFBF~=2ld$E^ -3_iQnIt*5?dsei`^F1^Ix<NMk=g4;4_ThOiAwh@pQk9T*Sa=4+Z47cqCR5sPM5akc<Q^ad`_#8iat)d -yKJKw=aBIVM*h;Lm{2!UJ~-*D7>LuE*UCxhbXW^g}y!6$A7+v&2IQW$Gv%D(dwOA9kE+rk6+&$wRrPL -JegjEYdz(xH%4A27rq`Xb+o9KWXXTE#+YV0)>GKsNLIMS_mS%aywNWlCE=6=82!4H6-^YiL6AzSX`Fe -{wU~;)TJ`v}J)HT<*pZhp<(+3ab#((3ygLK6dLh<{Mlle%g+6CT1zr`OF9F$~RH&VykDA0M$l^taepQ -F(TU|%JyjBfOP!sdB;)Uw0w-tW2^_$DE!$rU>=!I*@iU)Uml{Xvx<hU-y9|0Mmt^9Z872dJGB)r3-bP -z<@nLP=~*|*-z4_E`x$?|mzm?Q_hx4rpgnGPrhGeZc*frzw>;zT@f|n5UuU=Dd$@n~S@Uo04leC}n93 -bf$rne*Ci2&svpe0i{xFe!6UoDBxMMZ3TQw7W8TdzXq}y)?-*qRr%hG+O8^0Z7xsO}FC4zn4o4+lJe( -u}91)6`J8^G^F0y#wuZ>4T49GUC95xdNF-V}1R^;J9%@`jW*$Z8Q}4HytwW6(NJMsp>J3XS^~IJli&m -TA7Y%{Oh*T#k}Pgut6nD#nf-|5BG#+ScT0!)Sp~+L~6gcaG+s%b^qiT}ua-yqr7wcQD++pAVegy#HPE -VW8s`;+LVrUjw#Guf^KutJ_hSWt%~~GwHIp&fk{xx*>%Rk&1HBLCY@O+w2kdCl*vDz-CfSV>+1O{Q}K -^bg*t-Pw>ebJaTNu_z=n;16rqosM*VNkB2aw<lDleF;E4#r?*^?ql(DW_{j0|t96A6(4V<!eL(~8Cr9 -K^Dyz&m&?NUvFJy9tCT3tCU;xO>&}TZVTUT5hEkcnboj&<-;I@w%vTgVyornw8uJA|V>V+ap7jpLZP` -eT-!-Z~0*>6cIyeGBn7w#_Zqo&Enav-`$@b;l(M%>^>v74gh*_*nDT1%S@YP-BC&MCQ-sD-3fDsUy<0 -(!yB)X$K%DjIeu(|evAc!A-HiunYL<zeWX12J6ZTzj|_w_Jy9vc#{&*1z8CvGva-ZJGPpYj$ETXvKDW -=g^E`&NOI?zip?}xqovoeKs1$)ZPqf0;eF;qZ|V%xZs#9iqMAIv6d&xpJiUH;Y9?*h8f(D0TSJ(d~u= -I#>ItN;1|>#-o-91c1D$U`Hs`)diln8+pQ`u>Tz7p<&#hjZ?VHkOT&~IGvCM1J-`2mS*%y#B$6_jHk^ -4=6pFKulZHn2k!z!WGehj%Fzt`o{mq7~C}^p09rbdWNmGQmM|}6Da4%uD=PX`?hS-%=oek~I=m@^srE -e3s!DK`8o-m(p9Pb%|KYpx(Gd!&}y_OMxPJiYdS-QUXF+T#V-v@iyY74$FE#)iSH4XC5)LD!QPpr9dt -rIM1Zj|gU5PP(^3y{s(3rrtBMnFBCp?x49aiHL}C&aCS*E5a+NsCry?1iR7bVRQ209H<?&KLPrKMcoj -i!Xekc+~p445=f~!x1t)Zy||!NeY<9<5emzGzxX3Qk&v0>#|XHU~JrNF7#HYdC!ziM5DqDIrFCOARu- -@P&pei^LLrR$sY2jIb!$Z#>t`_7Xv!0(XaPJ$v|)p)MKaQ<y@?cyTB8%&wPLmitYp{b7!)w57xw;*$G -nT%ygM>M`1M6{5-$8<E(5VWRJZeIP{Um#gRMgo%I4BkZpEsmowoHq8=?0j&!?b3^MNJu0FF~p@}of5B -3rX{^knkq%^fq5yQ=!<2|1Iz2Av&Zd45+J_kenbxa(#O+`7PnwiLKD*TrmvQYqY7}OdHB61%Q0UrEpC -U(1Muw3x{1%e<F0sLVPO8Y*>^if-%OQt?*03<D7QYYpo(w9$Qnh5QC{MYWzQ1J=J(cQV7J1|gtb3W`8 -uH>(_cFE)s&ndbakYiif@>t#j4{wGwwtE{(W@;6?dvL{DoLbFf#Q2pTP^UtPHXs@)c0C_f<KRm1T(>x -|I&&H-zx(6jdA5XmGBnE5SJ_ZIk>Yj?$tSa1I|jjWI(*o351h`PTgtsKMExAdcIl0b5(!Vu4Wm0*r#r -Jq`!gf=#Wj?39nY?hK+|lhFk(SCm(RfyMK^{p_(X*6Ypcbmf@5R_SK}}pCy`GTA4({N@>^gveLv*T6} -KWp1aD5{JdXHr{MTPaJH?7%LU*$4AH$f+^8Y_Gn_LIl@7oALz-?m4z<ohHu%Ufy==Ks$pkfhFiTO|_Q -QJcFC~XAqki*`{EW2E~?4@>OG+(w86&|n8*DFFkU59hq>R09)x-~?67HuKpV!hQ1Oytj!7frohrH>;n -@8k|=%c#Q%o!ZxK;lOCzGTa`-+%7GJ7m)VrO{Y3SJy_;91ryFmXGU>MA8cRP^1gF>5iQBP7;yEbE4Zt -uyEI)_KGPKw_N1|QYx@4eJ9jW(@4PAlZx+^dY7bRlGl8qda6?UfYx&hn#{?;U1t*90c&Zw1f;B}qIeE -(iQfQaVghWUA{Z{n^PX*Okp`QuX6R<|A-c;XyidHjWUgG{#7T#V(i_#%bt<}aOt?nD*l)m3sJAtbH9E -2q_a?v1-ubOg}K6b`ngxB!UaU$Moe>@zis2-UJ^&!sqr2i?SR=~vyrZGk?u^p(<hG`Cm8-I`EpYhk9f -<HB={g+k7e(v0DojUnbH)YVIZLg$1g>MDfI+5D}g_lpdBw;dX%IUTAV%<WDUjqGT-Nnvv*i`%qOV{q~ -tR11vF59i_4|+5%z5(PX>RC7l=iL-7(Hi=6Cd{~dBEd{W9C?I2eWdLn??hL9$(&q(W<@+6{KqIx%H^_ -{;SttilcY{SHSa|I6dmk369X$WAn1uuNA0*U$L=4mov~5sJROb0{>&4;eLZO2Yi_(&<fx4<Pgd&%$2F --+@7RV~h?w)q3LR9M&GY70*Xw+u-euPwOel|AJV>h>6~e_>zvArUxLz>dfAR4LR&N|SVes1vCKV#2G; -InuCAvZ@_-v*uOi~k+slQ<c9?gvZgvlmOdFF`Ok&HMJnH`jEmUmL>_DAGgi5UKF%@i~~pq}B51n0-Ay -%lMW{Li0ynrZSg`tXG)eoe{mrSqt#y3wE2M&mX_3R27ZZE<JomFERczgBi5r_f>S$F{qx2Inb5IDIb4 -?Tz`fVi8xU92}rY<)q4&#biR(rIQJUtC>s&CuHo}<X6l51U(GN12Df*yg|7{<Ito5)~;U4FV=X3JORe -Q{6Xa^@h5x{iOm|hZBBc&R(e5BYByDvztf4Y=}janMx9gNSe``{%Tx)w&L2H`gwwdF>(vCWQApVnUWz -s6uEfS+!kB!%IX|~I$f#flDDGYrm3m1!%&zS=$N&JzAKlnMRT-9tq9`jrd=<l)-xwFWW+VJ)ngZ>JTh -0&JZCqzrrl6o537SfA>yXd!Fq;QY`eh3+HZu!`>Y4_(`u<kgWG+rjj+YH4z*3&UYSUfUm9P>f13?yn+ -sraaipO(gkaRGwYqX5K%p3mmugXBz6%7W*nEECD^VL8B(mT79)&cIBZ5iF%sp6$lR2MQ2B&QR}89?0_ -vaAproahZ9dOA3*61?GJl$@34d9^uvQl3lA1F<)^b#o&_P7PkKr`KpVezt_w21tBPy=u>%oV$TWIyWZ -Y;3t^pZe!XETl9Jg6JNA$vG)Uv5(CS7pn{g+_@EssesW<9KFDU#f^uQ;YP0XShSR|djIvmg9-!I$PWS -CxPzA)i4i;9cSMYQ*)hk%Fiegsc*EBX|Lw%bNhilAqfUFcfm7AF~$fXq-hF|LqyJo|!MMGrTj9bI0c> -yKGteFUpPK;2PZyS?dOmTa2oY;8t*3Nox1`O7@z5o<24A&;pbV-W?;maNf@S&*Ap}W(9V)1PO@l_9qO -|e+ix94xJ%j!l#pqplGKY0Df!23Os)J?K52R}B)CfU*W?}j_`e<|~S<sGnLjNo=r6f3+v;W$tk^L{qQ -Kgda-Is=9x`TLlGzo~msU!_EsHR=wB2mcRHO9KQH00008031s8R^Zr}Gz$p;0OcP503ZMW0B~t=FJE? -LZe(wAFLG&PXfJSbZ)b94b8}x}VR9~Td97LRZsbT2|2|LA_;flu>o}7Y;ll{8IF3DZ=<YaevO*9dugB -A#F?ejN+urPO;sfsh?}B(7o`kCY-)&EllZcc_?5?h=uKLx#p5{38Y$V5WJgjQgA4xrR)!6qfCyiWc*; -G_zb)a&6Y>ref9s8~y`>v_f(rIYAy<Yrgq^#VwG$r3Qd`!vjhq39qvRz5ytm@mIY2vT&AtgZG?FzQvx --`YenxUnmM|&sV8M==5EwvQlG1dP_(L5#ZfIVgJD4$xr^)J(K0!{VS-^s`CnomuqD2}w`6En=elaEK* -X%?LB@ktZh%16C8o~&ZG_>js!cc+1_R-cjYr{fmn_cf^wB`YhC&dHY6J&62bm|9N1AZ6Ephu{o^(Sep -DU;Xg@+uOIr?KgjVOLFphy;`lRw&a}r!1_I-od3FHv3r(evm)>lMUk`tCnbpoMVydr$ujbu(;eBK2y3 -cCrq{BS*!U&ebIAgK#(peY64z~Cf@gc>*<|A!hL3ar40U8YP|5x`v@XH!9CnlI^*RGXjrjlfeMj*x6N --UecxVKYIdx_PSN##)4tl;oxFPmsuPwXBW;Y&4+;l#pKZw`BN9hiWjC}ZjihlS&z%vjppPJ)zlni|KN -M$7m2a<RT5#@<^+hJ^|Wm?y?8htijm#~t7Ds8K%ni_1QjD_ZZEIAp#=WsqFPNFR~0P|#uw?ch&F8Hnf -x@Y~=1tyBnVYnF0O<(*38P;7h1PBp&-4RnaUBeG__fj#X*>OgOUXB8%yi|ZjBk<x2>;*4}w*hS-GG(m -O-o3!<gD2!p<kF6C3JGi{curg$OS2K!(;<SZ`~>Khc{tNCEn{>?Yf=<&+_5NP3kllRsUNu;5@-cE1S4 -{t&I4^j1PM?$s{-~87YHEafoi6{l{W;T4{HL?sSnhR&4fT<K{r>UI7e>~l%7G*!XAT&bO{j)8>ElZGd -^CjrnN+}@jQ{q*v+LQ{3RPLxwXGfA`@0F9pEp?B$3Ob_)8M$xitE+%tF)nFMQ%4HuJ#L3;GyJ=gB7v; -w2A^yYi_E#YdJ{?wB5%jC)mjAG8bHxPZ#ZATE$iLN4EcF_?7?qvOOnQb)gp!byJg-SIQ_cPs`!TK~bD -H!A3U1%+~;Y&;oJ@Kk{k<(?LXg%ulM#i{^d{8iajQ(KPI;b9z-VVrAXs09w18ZJ(2c{xWCW(dOx5f%r -SyK*=t<U%Hd#hu5di(xgzDi~wdu&YTDn$!YWn#;74G3@5e-)MgQi^RHVPshN==Q0^KNM6L+B}^h`mSj -gMbLa*!V3)eS5UVm}InmCmrdi5k!k-@QJa7IM+MANJur68>b(~qJL)|{d?0+Y$$9<RjvdEV+=1?r4Q0 -RUXKxBK$%vH^?6vHHU8Hw%!4@xMi6#e&~|A-vJ>u~clfSvabE+k#!f;mU5ZE?iMvfGsm(k+Q-vp<Z*w -i)qZWD^xzq6CYavA=g_W4BizO-YVLPi6s-JOEx}rzO6+BCnI@*+fK~TML#)7rZTkByW!w{y4%epAnrb -g{9WVdb}J4fCXl0wUo&>KH#OId7zOsg&dhO3?pOS*w+9~9MXI1!V2z?6~Df@Num4`_-k1uez+|wX6^V -g#X|aL6k7|m)=NrNJ;zi9b1iV<w$L~F?a-K)g#rXD>EX>TsRDNEl`fp^%v_pFr84*B%5@vW!H#~yXkc -Zxrw&{aAM8WV8!_hPYRi=aG~eUp4z*fmH{=zbHIB{R3q0fnpfG{$ubmt&%_7}oChge5Ds?;wIi2;K7b -qvk58qW1nsMO;q_kBm_UEoK<f|l^R|h`~umViO4ho<sPU)-*P0#nQSm#7S_A4PIyZ3@4(E}~?PS8Si^ -pSil+lg`~>H0&iG?zbbJ~?H2JI{{DcVeOQx%d+%lnBh8kh=jbPfeF@Dt~DU={2AjbEbztnPSoqfo6%F -E=pD|S)qf%Ow=XJ#$LauF+q&i3suw>QGHjmTuAke1x}RbE9R2(<gHMw6iSS0pb}Q4iuyjY*8%1d0Akj -;mH~JD#FFjaIBm%Nj`9j(0(U;xoqud-y9+i7lZ-uc>izA!h47nw7Y;VX3n++Vi|i}j#bJw{qJI%(dGv -T_V4e!n`!k$E9@`e@xWpdO@99L9!*>3ucF#YBTayjeGPmQfZ*@UesLRFYLXA)|fp`+hA97;sYva_Di7 -}*AQ;M&qxd@FD)0zi^jq1^z*a`-nv+8j>KIs=10;I9T>y>|w1PX%Ff%J9FMUBD@m)<F$$G=I)=l=F3> -H6P$#cZRwzLFtho4^wySyab`)DAOPQymKBrP&?DLIRO#lW&5HT$?z&@Um#rV=_)E&fE++R&mT=_$b87 -bpFa3Pj<w)A!+HptWH4H?fOUV@)MLr-?b-us6#)syF$<9&X5lK=F^)u+c{hPwBQ*SBgo6hm6v%v_%C& -#)?iMdotM@C>)NJ5do={6LHS9N`H1S57w^bUqIlUvawyxn08&5{3>3J5%s2e&-wPXBTA!u=Pc$<~0UJ -M3KC^-iKj^gJ_skp}_P35jU?_5SIrf?NyhhMs^UX~D3YErLWNv|T)So-VFG=@ShX(pYeF>W{K-&P`p7 -)JQcjmfpQGPJh&2Oc^%C0^(-=4YIvd4I03=pG<GTl-@x{WY6%Fw34krJ1q?~y0j26(>+_Rht)azrl~l -*aI`=vacmx;?Vw`hF26TZ@;=KxByQfQ3Z&yhyu1_jPcT4WNp=&Y0;rb78cnBryFGC%??e^^#UT*^6|L -NbolrRl=I6zGM8q)I{eC%Gm{{A3hGHQzldAs(CqqNpw7!vRu|bf3n7cF;)#4qAQPJ0Fpy;E()|-QA8U -;K7+}v+#kygNCR_xr1DZgH}|==gSt$R^~3!dRLIM3)@pdnuh(nk0QIe`y=T^lh5GwgK(EAm7K>3u^2S -lVvtvAPyk1|!hcm_F*9B^X?cB=<$#-ClM8<rnZs6mQLF*kye`ZemExzdCEu{nAwW<r4B}MPpMEzAME? -NB#P)h>@6aWAK2ml;P_ErRN=UL?n001W}000^Q003}la4%nWWo~3|axZdeV`wjMa&K*LbS`jt?Hb#T+ -cx&yU%_f$q(ZAC4|y@xX|vgB8*H};(rkgkFcey%X4H`-fud$&4D#=L4sRkQ+B3;y_hoAYu_YcJp8Jhc -@$Nvxv9H@pQXl$`3-Yo(rsPM~GF}%c`MDlMO5XIM?poTU<URW+UcZ6wW6yr0JSG2bVI?Kq4dYEm%hjq -vl$pVH$wXds?a(z$ujnTO@XA{hfZnX&QR+ZEY_)m|5WW0OHs<^|n%+jq>L0A4W3zy9UIWl-RWx)Mh}w -C<dB@|6j|G!FChHY}PZUM=71`5)5w)l4IO*j+!dXKFD+xmcLk2r6=GW~FZR+wJ8+zc5#m-3~{GuauTh -;}jBNXteUF4Py@Lpod$U9oYD{)m1<hF*d7Re~sFysb4PJBeIqD&q~+Y;e#>T+5j2iQ$7S+<fOFZt!5X -v2?QBe7KPb`V@?VwbGRg}+;~qp*~$B6(i7waD{$U`>@8z_rz6LjL-K{L-~-Iu0Q-bLPfuaZ!RXUTKta -zd<(P;7p9X^-#@J{ddq~tSx&x+0Aa!$;;syWX#AoFfMgnxBV!{*owLV)ks}T3IbhlR<Qbpfr8$nYTzG -kpA04idKdv-Nmt23a2Y(H0BSV|Q&z=3(nH^{A*c>*a<SnW{7ri#=tFTr&~-ARO?^OHh@#A5FkTmHfAc -WBG+qe&4uZA?kjtft5Df@}TsGaFHU^7-48lzZ^}y0?$4e6LyRPw$xoGJg&ae<txIV5QXfrs-imR>$BP -TJ2A+*BXjP3^BgJ`v8H2694hO6#2FV%8@#9v{Vm}TW;AX^{ddp^z)S~|lB&GNkntsfa1%LUpvMria45 -P({i?1Go)(v$PabE2(2KnIT9+lHYrvQ~ga8w-a2M;1v;b<?m*+Gq|OOtIx~jx$rR1~oVwD}=UjY2WmQ -){RuP62zd6N>-C8=fhZ4^+%+5O*GG1N^6^KwpQyq07N|of{YhK(wWChK?hHYrsZ$bxo0@XYG*KqrVHC -%6Vx*-OLI-<=6a5UG-!zyA(}!Ow5<ThsX%IcePg{IyxB>_apJ@4=;G=eKPb8k({g^G{CezT1qUHb92> -TY)MJ!*o9YUJpot>R4(@|7kek+#eLttlgo%xn`^q`R`qV($PRztGi9$nd47`7a7Y#O^N&<irGWSv0<o -7a`ADFo66q(=KiU^<3Wa)4{3Akv6|1V?JQcwt-g3Li6IHL!L9#w1l#7LW0MTv`qIO%*cgDlJb)Xsyo^ -Kki3!hVRX|CFwlf<gfO6)b|dzC`k{c@jBP3s7EgQ9y|bWdzDc@DXw`miv5cA>ZrJ-gI5B-l`%Qvow?# -K#x`$elAo6>POKRFJ6$UZdgkXs2ZjD4AmK3=$gVTV{2u$`Q_`R=f{+=jt%_x%UIWnzDg<UnB7+_XXp0 -$RZ7~qML)W%_3d2Q01goxgvRux4M>xMRo2SZ2sV{Cpa7gu#e`(-3k9oa^E<c24Md$dV3BFazBc+h4cf -!T{76IE-RST1q>?u7LjcSmavvtJsZ7$&tXYf=c7s@pd!xRRsdnb9Eg3fi=r%o+n{B7<#hmvhf(&EdH# -I9=>jGs^xyAZmb}lMdvvp6kG^j?!LGVs;Ji{RgRA++P1ck-`j72etzrdeLA798&v@j7(Tt)Gn-tsAlQ -ld-UOuvg9Ssv&$GYa@zLH-N&nz$%K-~Uijpr^7P`i34I_YDfhI*`*VK#S2Ioi;+h1(D12J&^&0`m%n; -MC4ZIK9NqD9X*M%Kf1b&UFam_bO2mM+dH%O(=H0QdPaK)DP<gyS<~V#8;`SU*Du`s27JXq^?V~!ySHT -74Yn5s!s(i<1IKdiCii*+fn*{-31!)njJmy!!s<l={e4b2xrLc4UjsN+qMLjNR6Ch&{7#pP*sRJhf1+ -r#rQoZ1oSv7Hr)t74DZT*G^WPs$G9q$#jYGq;E<7(@lJ%ls$pWIEYNlDGbf#Ddlqjqf{CHo4Ko-fbLd -H#pDTnE~E=?_^)MXm}WvV=xjfyK)Tx-YGAyfvlwVWED+>s$q@UL)-g2Mj4R_Q2QJe^aB!hl`|^7>6a$ -UzyTwEc0e&!D^{X|mFpW)gC6FNuH(2MFW0IJ%#egRUfT2+V~)uyDp2bBU`^4@B2}oFMb=#!0S=`+=Zr -L#-Up_Ev44X5H2pQq=ej(hDiXBrn+ha6xPH!c9Rr<4wnG|Lj6#O<q^z!v~4=!v|#oYBYI|x*TrFdoUS -A7cjDCTDm}zWEDCbqJmObXKLrhSB6~$PxB8}$a5`x?<Q**-eU<iVPo>9NExWSe3{{vS3~nVCy6#ZCr+ -06Ibe1&E8&9%aJ*E}_h2f*Gv;MlaD_D4aVOt6Y%B~pRTo<8`RRfAC<YG-<dmrNE8wtUW|)pQaT3pGTk -;}ixEs`6TRbNX;<LT~v)w92F&t~x@?sI6G(jN?bVt3AaO+mY5;}21fLEJ_<?&P3UAyJr(4pNUUwa1Km -!eANczZvwoS)@+0fM!+e&43|CDsQ_l1?AuNkN_#oGso*!<5_ANO2-3b@7Boiea7uQ=SLOVLsP+H@1%4 -<^1Mh-GRKl5B1gM=QIj#oYbj+mFK#r+bitYF%JfY@QxXVN=p+1-Bv1CiJF)zp{Ekjb%fM(_5K~gqWW; -r)|J7Gy^9Qcel_p2gdZKSLbd!N^iS})$G{>#&!RqlbmX4}4@gcr;w=u6n3oY#qSj$DS!}|txo$`19}V -ToNyhz1?On3R(_Ooqa5<Ojwp_TPLZg6Y5LKh?aWR3!>Ep@C<FOk#F@r~QNZ|U^T%6iJ&JasVA$s0VDM -o6+F4<Xf_ao=E=<=c)TQqHZoFe_F?v@-V1P2W_kg`KgplEDmNd?x*xM?*{G6aOk_m8{?*8GrmJnZ3AE -2AGE>VBz|NQIlviAb<R&o~8mq|`af)o#g#8k4F6e6LjG$&ZuEToTZrRW(1jQox$u6T=Y-rzcP<p(7!% -swK=!<+L0i@M!dk@mJapqa@&XW1Iic?c@7IfW$pU0>8_VxeDy|Lc@-$Vf!{Z;zX>Cc3*9v_)cz@`OXA -hh;Z>SL0aNAf!Y$=D73Ry=9nj{nQ{}*5eGJ)f{ot|&El4w?g99xBti|C6XlIGF14MU`FWSzp~>IF`m1 -H{s=Fssam#@zLS^^17g^KYGVbJ1o4K$|pEZJy?h$69vnkR&Wcw7XU{zx!gn>BEWe&~r1FhRUkJg0z1> -{684|J{k16WrQlucG&_gQ`e+J_n!|G>-q<)5r(72MoMurS)zJEfNGlX?dMVi3c3ku|stT8QI8r%Drb| -FwwF3(t$zpy+ERaH8VI2q=%mEn`5=e)nwqWWSS@13o;(Cx@Wt9?nJap$U1hA<y(3oqYZqJU?9qf;|*4 -*Rv`LYyW871D|<U<$c$!$=u0*Q8XXML143MXjdmbdm6d3Ttrtzip$NNBIlDk{X8X7=TA1yN^}-;?Y3= -kr0p&?L_$_UKtY~^w@^+C03VVlT_Cj6CjZJcDD8%|v4Kxe=+8ex#&fA!%0<`V-3=E3L0anW%&%{_C(e -qGwK#RTifdp?=1yoE(H;^BhTx9V_EP@p8RgM#d9vKRxszYcnSN<!SljR3{FAJkZY-N)UhpGyfO$m=wu -Wv00Z>Z=1QY-O00;maO7>P*nETT?0ssJS1pojX0001RX>c!Jc4cm4Z*nhkX=7+FaB^>SZ)0z4E^v9BR -KaT7KoGs_D+c8vfvZEDUJNNDu1QRx1Sgjg%CeG1*4py!vb(m?-*;BBEXg*7Ru~&g@4cP(W=4fkJ8-oY -at&gqm2vPS>j`Asx(U1^eSQ3TTd?`-V*X?K^Cc)eK}f4Ha~(t2tm4)Nfhfl4Spal36fJbZ4k&YF5+kx -Q$&|FJ!cJpFkI?Y6!jD>G5U`i!^Ydc0e1C;U2*Z$z@`y%k?x$bxrw`S}=2A}|wpQhZ&_{)IlRlfuZZ~ -;B_#g;!ET}YQ&dO0%Vzy-}-B9r}Z#0H4-yl`0YAYq)+(Uqja0x9CcD#lZq1C}0(i&FYfj`Bw47$CM5H -)}NB`gKxxXi{UPQW@7pHa#{$t`!zT%bb6d_s(c{{TM4c_ziD0NRJt&8W{|c5>FZ568)eeG)_(q~H{A= -rw!_8LuioI9<IyHf_+NbV<<2JejqfolOkb(WwIJ0%+xkAxNwqLRv(tvuYw9NOe8@D1Bq>zH*?*EM|LS -#R049;*!qS|IcLO!HXTJ!wz$1kxHN?`J@fP-!!OnBZ>j;;LRWjyWSh^Od%w(pi)XVQpZxzSzTLu=c5U -r4&)%!dC3O2xR2uwzN7P9IyH-=vl56PcD`{XKOj&Z;3zJCnn?E!Z9lNZ%`*BO92_;6c!PRK=%>}s8{4 -5PRZgL-(f!Tgt?_sqN<_CH%tuZ*|8uhjQCy*gyl&sfS89-N`@=4<3D5KBLNgAAuYhLH##1waVR3%|P) -h>@6aWAK2ml;P_EufOuGe({005={000^Q003}la4%nWWo~3|axZdeV`wjOWoKz`ZZ2?nMT;>G!ypg@d -tR|}l{9&P>(nWtd;sACPJ#o$S&4ri;uLH(tKIRfWav>@0yx*w6c3wed+jxmF~%j^JDwD{$Yn0q)nH^< -mOFVC>ab|!)JoWsZG(RTiibu*ca2DH<84muvw}rWJSM(*(>QA+4pIO83s6e~1QY-O00;maO7>RQ*U?i -H1poj~5dZ)f0001RX>c!Jc4cm4Z*nhkX=7+Fa%FIGE^v9ZS4(f>HW0q+SFq|KQlS-66zIXN7MrFC5Hv -^%uiIi_7y={FHoGz@P*iqZ!~eZAq$pdK6leSJ#pH12n+G`$@l7d}CR|h{%e1#tazmE2$h4G2MYugJsn -VPl_Ec|6E>`X+@Cf{_#5OXEYg!casbF?@r<pqJ?s=u{>ao;Z3R>9RtS%kPY+D|!ey7TAeiOiMm-3mZL -ef0)LeHC##4!f`%m<1$WmR2hpgY}jBRoe7ttMP9+`7^#B0~gAT`asQ&(>2`sutKTKvh=Isv>xHqm)#^ -&F736$HIv*)%X1?K^UG9nPs(7EGM7VOc1Iy+W;$sQA_ev^CBmdC_suq2%z6NH@%!K39YpZvZ9)_ft#b -(^Vwn%k~eQjv$0y^I35Q0CL&a<>Vm2Xd4k&oS8i!hF$3Z5ZQdeB4z`2aq8Zw-O#u8L1&heB#+D0JI~L -FAwinb$M=zSPXd`=Vf}gWYDykvC5XVe0su@XB3}l)T^IBmC7ub+Ya1j9A$R$z>nlT&O)_|97?nm4KVq -A=(pkl=m01YcVr~{ib-dc*hc#iL2*w|w^Lq#-`Ncd3Er1_%5M9Y$i9O#ZawiK_+b@C2YOv973cE=qfB -H}m9e&n7D`5J2gn-IPdQn5LTzJUO6!Sb#(OSl-SpjHUdhYrHY7eL{UFA1-pQfVsS(f~Lj8k07h^jI7A -f(hgcNs^Fnhq(?>3(VaC`}}edhJ(xu0x%BqkwMvbrbUf!AH1NpU;yH%2-pZx;Fft?<Ity88Z9G6o;S4 -7>`bKaVwyF$j<GWEFU#XElLCrZ&0b^n(%*rn`($UZzfya@Z~eH{CpUEBIr!q9bWd6_T`NJB{*Sxn4Vt ->0rmzxp!_st5b{FI#{!?-hxU>oPZ@bwyY+4IGiXH4OqCR-&djqAz<%X*tw#b+&Vw+B{kX(TrWUqi$XD -eR=;i_K+c}2lQM&uHXx!}5AShU*qJv&GyZa9crnky6*uYZr2_vn9wlLOtD{CBdkAu;IARm`CcR>64s8 -rJwD$BLFTyI&vQ-_7nGAFl4x$A|k5<BxR98MM{o(iRz`#xlFB4@?e5q5GCh(_d~r{P8&bIXWZMuo>Hj -c}K$02}xUATvTwJ7`VlA@vy?<QNiE&Qeu%0SkbtasOvyC#mxLf+A)gI%1%!Mc}IE0jz+IR^OpWC<ps= -KkRx;?QJ@d~Kz2sU-tVD=HjB)t(jLMk2&u`MR>nn`9iT~eJNL;IcC#DuCYKpxXhQs-+~@~~re$|+0PJ -qh#BS07JJUhEt_dgFr?z^vB_}*+Z!~w64(h8gvo}oW#c_n1a*T})gVk?tJ=bC<lC;9Fn+}>941m^M(4 -OI^%V|q(_?mB-;4uER6JOH&+g#|r`$oDuG!96fj^2l&{%;2O1Im9k#UCKQbd*0<`%fqMGnZsOF<yTw? -gI(K&#}?j=8NSKGIK+@fTWz*=kX4i8<+7D;#SJ;7~dUIO<s(3U|ab7rIh{<{mD$tJHJ}X62F=K37PwB -wW@&XujvN=fX-mJDVV?54`S3?%MCrLqR?;oUraUA1L(zjkTS5bF~zFnWt=|4uq0KCj>IseRkC32gZ<i -WErL5s92t;~4`NjV&3_LQcTQDqOH|n5DB<%(2VlyHWJ{08C!Xtd^8MwApkw&%a!~nIQw@%EgUh4EW2S -2MnyUE!*#9?BO9KQH00008031s8R+4E0ZAAqD0QwOC02lxO0B~t=FJE?LZe(wAFLG&PXfJYgY-KKRdA -(RsZ{#!(e$THM!b6=S%~5nuD}q!VNC(n^R1SDJPLXfp>>6d0V0+u$tC08+{6c;SV>^!RWZP2pATQm-< -8NlZ`DWs@5&aI-ap2ts_-^Qhf}c9xcS+Ldm4dc>)47#Pee;^BZC{VeYu2{XE$f@AWnB)Esmk0*{((8u -zLR~+obgM0o4X%B3<}-K9IjYbGjYY_zE$Ja-}b{%G2ym;XK!Eg1MfzQ9iwtDCh*txcE>sgA=T0Q{!!n -I3yK|-d;SK0CrPqysg!WFZy5<)Wvc}6O4IZbTr$E0OW)&9)k7`l4N%zjf`8~cMOzRE0;J^~%ZkKozZ4 -s3f%K)g(gud|w^E7R#PBYM-q1nYY-OHkbn6Rv2Wra<asgknh9XZ=ucv7-;jXt-&^1Obff(2T@1<KKGK -0Nj^%T0s)v?ZS|NiUG0NOH142N%y1B<ZDQ|KGR-VDY>tl<MNOzEBgfhuD$;ngADuXuIo1Z9=F0DINnX -luKw6Eu{gNoV3rTh^#FhjfivVFG{k0z>7Stx9L{j~0bffvqQo1Xaa5uBwW7l33g1ag|pvuQHSf<E@_M -C(5@%zJ)f_MabhKM2LoY1L=9rL!KujBrT6wTZNsiO&l4<EQ9l};CtlD%a%7&vlAa{24BL3H`14&Tr&8 -XwtM!C5WOJLsv+{s1DpXBo4xK@*zKi)Exl&gPudmS@LFwk#ZVJ1wzq<dGy==Q=xn*WUg>rr%OZ~z&K? -_WbH=-C1h3&*TS0?rF}`wOhk;=h^$AIh-hk+UZjJpX;*ad?j`+2B3OgA}tDSf$XzntQN^E4?w6sczmv -l>&S`zVN%UNmj3B@hgAW+=e$Y=p|<arZJ?L`MoYUbswj~z42;dU0VPCIHG!PnbroTiHga$|Po-xjvB< -!biY@Inn=A3jQ}p3-eEcJxr0XUVCNSwdX-^gNat3XC`;D%YG>eb*j=BCoo_vz!YqjS<PR2!*vMwwdi@ -ki~&X-D<kpC%P`w{p8+`oXFpiv$nRYm7Womo)Kh1&n-!DjJCQ-=z>e$NkzLgBi@spXtQ=QE0uY{mO)g -0C?Ns&>==t**!NzAs*4;NVV8E==^bf6na3%Hmh#T^QSb<1@h>J}<{_kzW~a7eS7TW#Mc+#jI1udjJr} -I5<bW6m|3Xs}wvnHrw$NXAbg}Q&RI$p562(Y9AL)nl8TO*Q@%E2jVzX~7fi5aR`b#%AqG(R1dsjsZ7d -VMCz@ENlqG|h^GDUUsL2{YKAxd6*wus|t>V<h}vkaa;4+z(np2;qupwpk>fx(00F5hgQ!Nsg$HHOb3* -msVmF{gUoYm|)%c@eQeva#Nq$P)CaIT#S1L>TDI(8-{n!+@0!Vn$eOmppjSJh0X0^?)J5BDjswxH|2G -wM+Gxm+pU{y(cB}fJI!yssAT4Cyeah(_l{;{|67JgAaVU=uLY(LM;#T7M5T+x2BOFeT9<Q`eGK^**RG -ShZH|a$5V;xuN9sy)d*yMn-hrc&(+=Ibbf?G^2oAvGt;}LS@W4p<(%d6R4&Ft-6=BciEaGe{wOE5;A4 -GptPIx3MXtwel5ibGM|bGmNWQ9em_t>iD}Ya75OlMnD|}UAEGTM&IDX&DqqLcrPyc}rMRkpO>P4ZGy5 -m0-c83zj;H!N+(j4*lCpOn_FW#9Yc387P!MAu^IhgN<#g6n9mY~n!mtM5BJySZTrSnI!@Od!^)D<y@Y -a{#8$bQuQBQ~c^->2DF>GDOE`~y%+0|XQR000O897^_94~6wBbOZnZ8w&sc82|tPaA|NaUv_0~WN&gW -a%p2|FLPsWaAhuVd5u<WYveW%{=UCrP``MKYi>6=+FNiTq`6)xcMWNvlw~nmTi(@GmRw0rvXuV!jwIW -%cN3@~8(A}&muF@kxz?(IQVGFI%at@4-Iu_dR%r{LY1?vnSkz9(p4@s6J^p!rSKNNOyZ!Z-FF&VnBTp -&();bGRr103af-S<i?8pyCfq$0i;q(J*^{2SqE4EZJF{s?TmqDPJwWm?y-+Gayd%?z_+{++fFLvC=b? -Sc~Pc6p9>v{Z}1>h6Tm570gCU3**1Ctfg-uz-wu^P1BC`_qZmiXg-xdGCHwl!9JTy`Y&@^8aG%dJ4Q0 -jup0)eds_q9hAi27MQQv6I=rUMYdHN8R-@j-I704jr#plz*hc^a>4qDFl-Tdz|>;(#~BtEsPOEeM@Tz --~9;W0s#`>B7}rJXixU2Bs@{go!nrAK;gijm<*_73xDE9A51tq;sr?$*Kz|l7?NLOJ4#Erbj!ggNZO! -fDl6O)9W&Wz$Ri4g$6NJ@EMrbVp21J7rk$_`tn&Fq10&dwI51~c?xgqbR9rZ!25wnn=H^^&qPbap-Zm -N3sN061J2&bJ8m-2nLV{JAS^P|2c+)k|%Q46vL8cAtS*<h!y5DQ|#HmXI4{MJBpa`Uz2$hU3-SakTv4 -8$gK)q%kjMbei&q6^56*mr=*J|b6J}}#9Iq9K`-gI50$2U;>uSjdz(69dgl#cRqCQ6oJ#9WPwz%6;8m -F%E-m9(^~FzP&cm%?h90((Kys&Zeei=!DT7f7vLBa^S4vAjOzL_0@h84_|#;=9kEO5E=zkY}V1KZRj0 -v=T~o5duu>cSlsFWhKXMk5gE4ZLlo%h+{}ad!&12c}ayhWdj!O!NyOaz%-rraaVh&A(6^Djm%i8t$F7 -5n2@3%n7Z2)>e*q|XXBGVLoOp$C1LbKW<fuXxh{d%lfh$%AIuH}O2+2!@%fo|yyB&sY4C+-`rOldMvY -+&W}nQOIPo?}u<x@8U=bI@YuSZ(;sMNeZjeAuMvLt44(mVFSw=EAYX_~K=dleL%pHU~Zm#Jbk3)K~J? -ZIuvc6QDaZ^5fyHt*plgH)jYGJ(dxSXq9K-0IEzvQ!;+vGLC;vrArx&Muud!_vqY)>fbOA+=+R5}~jM -F_!v0u+V2QwnVT9I)yQ@+H=O1Mm&BnjRXuanx9<C;UKh$Ncv}%iFBLi>*>R)4V(m-w7=yZNnJ&Wipv? -%ZyEGr8ZCtMR6qeRQGE?+>YU5OABsnq3XgOF>W_b+f@qd6t2>6EyHyhJ_h<LAIK*rgn~bm78Tizb}C- -Z?ff$<3Bj}s@--$*R@sWo3q~4-cY5W7c$FZNG#_=x?R}@qBQ@+?yQP{o2DP_af_FH6BVbrcQ+e>K1{a -DMw`^6zgd#hvMz&gC?amBw?{f9w`u%!!{lkZepMPUXJ-)LKFrkpwJj;YmAzQu+d+2jynVzQm%J{0R-( -^?VYlQYHTV1ceU(O2nA5cpJ1QY-O00;maO7>PiHU6$r0ssIv1^@sW0001RX>c!Jc4cm4Z*nhkX=7+Fb -7OL4Wo|BTd2LkNj+-zLedjAiJduj>0g<S*O1Imp(ze>oOVzEA0|u-*wq-lrreEK|HW-uTA%VG^Idf+0 -UduDst72jRc2-hb_@*qAg76ZKKfd2LhtKziuU{S?vaFwCD?^7f6?Tq(_MfxUUO8P{)5r0uXmB=MN;Ny -D_l6T=vn*qMT56vGK0c|H!pMkOIM?(XyrbM2Jbe@GPgHbNKT&hxc55Xk&oJ5_w7e+)xkG9#QZ(?~YD$ -HtmFM{#=p`HMNG$Y>bAzw=N%fhbdSF}*5Ya)ar7}SOw$zv^b0~LuF#DzG3a&_r?e=gO8Shph)sp7bE* -70jkYRS1Hjfcbr2Rc$S4hMqRPd4Z1jRtY5+0=ph}f9t7EA3RPw9k+j`q+rOfcItaUzEDJ_`9R!kAl}G -HoK#{ke4W3u?zMh7zSXYsnPYoMneuCn-6GeIne1xE;Lz;L@VHZjlsIRr3c)NL^{xj@!j@bI+1qs?}I( -A5g5j+NIHc8ntgIb!~}b)Yh~XcH-9rem4R`aG<7P<MVm$CfdR&$fG9t`W)m@ombY`v4oMbVYEmrKvjn -Qqnk~u=i1dkZR2c3Y<&lKj#o-hoQa#nX3d*WVO8s*I$~+zsMHCe+W$qVITO^Zm;_8`j!L~XLaA}Z%MF -Rrw^qB~5)|p`qrODSw}r!nhxZ^#FcL)z=P6Sm6Wj<Q=&Pd|af<v!yy!fNce5)_$GPg1TtvJco0=}s($ -NDZ;=Sr=?e>W#S4QzJaR*{@Cq5(~q;+s<QcRrbXa50EO9KQH00008031s8R%2B$#xfKD0JmNM02=@R0 -B~t=FJE?LZe(wAFLG&PXfJbRXKiI}bS`jt?L297+eVh(^(!#k4+E}f+Rhxi%ZgG_WF}FKETtrQT`7hI -K}1u+7z8i?Xqh{;``h;&eF6=Vl02y-GpI@|cE5i8`rUmlt6~+1e7y?NRasO`aGEz$_<69zisd?AG)0l -ssy3_E(IQ^l3$9NaQ91R?G=rjLoYfK{EAH;n{7%*1iRKJSM8&m5DXO?BDpegfO$8v0s&6)>)i^u|;Jg -0uhiP>3{q*E7r{~{|sOU|)X!x&FXd2&Uf`6T*wJbl6S0cGym#XHXY|<i+GyZiY{<aqRLe^Pe*PBxQ^) -3ha(ZTS52^%j&W=73~MQI(?KyD@?tc@Phq`9xTIq@vv@=WBi(D?=9ju!WE6)#{63|XiDBfGD$(i9CP6 -_qG8?=D5X&YDqBrHlIrD<n+aY%-yMuJFgfLArF=IH6AD$cnr!Op6o#IZ}Tx=jsvkmnWj)UJnjH&cTrp -Z#Y0Q2EeX^MHbgJwr;8-LxzS@#fIGLU@$l@@)u>5<_(H2STHF3n}|AixCca}2#Yw&HbGOxd7Z_L2$~` -|KEFC;xG|tPAbj6U&(469*YxA$`111f_`7LzIlX>&c@E`YQ2F;4Z>R9%4-9lRJ-&ore`IC&{^EUf^6v -8L0?Yoy;HPh<rtHsDHa$Q7=4=`rpIt{+CzsPHBL5Fo$J48B)qiqVgd=+Q1C;!iUGnDQJwm;HWfy*Xar -yrE@(q^1w#&acKKYBP_`<Gud-31X==vf$xj1|Gmhk<-Q;p?3*6HQ()igRikIqidksq&lxL4Eb=>6$A& -=g&tUY}9TpFxyTh$p~sC?b=X8Ize=GM<n8<s;b&WIYP%rkeKy5(xYcAm-5b*IKW`q134>akmnA6B^?- -Ds>!`saS}hSO$&w)C3P{b00vXVv&OGBmr5)SfQwcxDr8G70G%5mA9Z~_d;oWP?4r%^+G_mah^~w*aUP -xT>(N+Oi<g8;0>X9nxk&Q=)f7&_~)$%9;y`F8dV@_F!5Ci{%6cOdtBYsOger<a0u;(lb|(@u?AwZ4ky -Hl$<6;Ed)U^;WaKv^@UHCS5KXRs$(BG!T$X51iXt1kvcb?13<`ek;JwgDr3*zu9RpS)1kaw{t{Y*EQ~ -AF;5KRb@27K2*2^I&k7>9kIYEh4sco`|uJV8buXpR_?X2ga$C@Q!YabS(ghLL1DBh+oE(bph%2vg05e -kEdQ(;e0#TMmO4U!kU&kpYD`5^!?2pg1HumUqB$qk?YJ3RDG{pQLq}#hU;zjadpB&!uSARc^5iKkNzg -!XPJ{W4m)ll}15CtQl#+98qT)sG?qiS3zoICm@3Bfrf}?c%T^&McNpn$gqH8fgyI2iYzhX(&f+%6{@~ -KzR2#@C?${#Uv-cdjR&mN4?$}H9E1zr3)-rbq}fBhg*?X|E&g^SesV7sACPV|r<xU(_!*~p&Gu!BMsg -j|gqlagKAnTyLelhP3S6`FkkS^4;<%)VJk3fp_XYdEuXQpQzJB$^AA^5~ATcxy1FcRuX{p0S1_^^CXc -7#hH4i`|*YF!nAIHPK#;VnS&L;;gmG)>ffoiZwwuLJBmqB4W9^G<mmD;KbBnDp{*=<~v(##_)Bi(U07 -_`Y8wn)Haj<Y6T=4XJ*q6RQvQy3yOFKuFm!1qwwXz(I<J+!*H70aT+KCpH+0Yr0`1V*h5o#BVh_%+xO -iOV<muw#>&3yiVDiBW$GA{9EE%y+ahWI~b%P6CPiGSIwmDMbb=J~(Vp3_esjV~0P7M@C#B;u$({+jzV -W54ZC1X}o+IKV6=-N&o8kl+Px_Y0%Mma2O1Nu7T_r3N(R+j~tM3b8!km?YOSNvqJcvR#gELmG>#68@Y -ho4aNfAEVvhy7+BHHc4X)xALF%D*Whih5RLZAoFg_5g(`u(vSGhnibc9iAvstS*?N^*>A)#_cJu*d0s -RLs(Z*S5PQ|M<Nis^n;^2!HltsZ5R0P_!AXE->cJ%EKyR#T_UE?V>Oic-;;H-hTvJ$|lkAje^EQKbuo -R)#XK?<DfG40A*m{C{CPs%^$kn~wx*p|llvl!b~`KRDMckpk)w{Z<@jA1l9Hvo3M=G;>=tnL^C$ATUg -Lpo+csUD&?5_lSQZOAd<3G}{?#ygErRd@SQZzd3V6@S>14WOlDX)Z9<lU-;taID~M{6T<z=Hh{%weEP -*5kM3Ue#!^idZZ}~r?-ZCm~EJOl2ojTUK=vDI=8^KO&$ywc%3HN1C}`8>CoZDG0nf2c;Fe%$Z}dzqh* -j{X&FV^vicw)5`y<)KcW(6W$I|+H#b~-s2Q(*n~~kzSpB&(Q=6edsK=*F876RgLQM{YCd^~EInP_KSR -t*c<Tr6G)U^DKSjI4wAS}pK7lk3!hv&+j-WKR+ON&SSeQbAM?a|hAnuUQPdj$~!m34ZX@lrw^uY`sh` -kh=w)2B#d(3xp%yEs-phcX`MksMeQ#YqxHEeF#^-SstSZtQ1~8=bizbrLe$hdq7_KZx@^vrY(8EjoI# -Iq2H5vnLJ2n??{>-WoqVetPY|_Zc4bf)MW{+Z-#SaK(QSjH&7J6u+L-NcO)gk;CsZNJe_*HgLax=KTO -Yb#+|y4%ci=c_%d01z~?n8w*6!J`VO<>fP8RIY5K<=7u&LXj$qRF7McN#cJLOQ|>0t7oz3=O!q;EqjG -$gRk_UKJ9JH}xPhEB#h4sdi~GlVDRfeKvWq~kKT7RY2k*3xr5l=En{Xh(2SX!XqdwjB7zYt;8|}u{uW -g*LU|!)aIrufqRUzCfvMPPKd+e-oYNg;*K8Ab-63T+Jp!#!!(6VUY-;}mJ<SGvChEd+M6e6)Z`4QKy` -gDQDrh1qgX4p{?sRxds>o37(uoHin!kS6opajdDnK>^+3IQs2#5nkuAr!rkH3`xZYNy(m`B?z8I)+Q{ -v?`^SY<$XzpEF^IJj+As<COziNcK-X854wg(yI|K&huP<4D+8RMdOuust*CW`F`|<U#PHQWYInB#ixk -rN69Oh2-6EfTI9&hPghHhHbB>$t>H+9J5jw$v_<GHvj*8mi>fH4eLpMPm+N@6$MonaK%D4!bX~2jnlx -Wz>qJCKKD7t#(N3r3W(e<y3;~(Jzk|C<#5}==c|jc9r5|CU&x8DYflUFAFtNXd(oIM9cOu6PeVA*|Ub -5Uu9`gp88wcHepEshW{SeYhMYu!h&UAkbNfbJlINzX*5^$BRX+xZF$c0wZoJJ+#wAV%kHng#q;Z7g1^ -M=W}**o&Ky={w)+>tZ8vxNS++-#iubzO5TG%MX;D&ua2Zlm;8C3f7xo`d7}vpR4Fi+;6^+@}9I4jpa1 -6iFn#c2|h~GZ_4M#0)9J%aP<Mn7|SI*W27rv?RRi@wSp-k3wo}*jBp!{y0|HIJO42@gjqaIdt)Twvgq -Kz-}gQUCG)aQYXY&j^XDCZ4|Ov{kiK{L^@@_Ij_9P2*iuUA&HFKY^6PJY&OA%&k0dF>$c-0B<i#X+{$ -7Nd+g%|i3~l?%67M5ZveX1Yi-b04G%O2;t|9fT2H4%C;$T`8}3}(Qc=q3<cBzsfrA#Sd6i!7^lm6%)% -QiEQve;aoX$|ByP}vAaG1Y&YlRUBXe`FH!*x4~Sv#%kRj56`wFlb@DcHyup>~cgZ3k^DRmi>!e7m$M$ -);=i3cHM>!C^3?m=_G>zAB=8VRtZ8`T2Yg&(cCao0vu-YZ3mHmv9S1D_7SEfCBO5=&k@>IdvYkcSoQ? -*k0S^Jt8@5WBF2_@2PgD0%ojT58XG^!=qN0ofdw1;rHm&Lp350>zt-sPW39$wo#gu*nRScTgd%CY*}L -2qJnbuML}$dPIyGY4o$SW;*CV!!%*J|-rF>%y4r4gYYZUrL&yAw+Bb<D540p0QOp{QUPB3CEbEoP!z{ -t?e}XUny|uqL9PM+~>e`{a8y;+jr;qqrrz+a~MmHF_XREBm+3wmb4HMJEqG_EZ>6KM|AD6;Nsg`1D&o -`|NY<=9)D>%Xzguv^pz}N~ySu`=m*dcE?@4xuPVJtNC=&6zu&n1{&Z2N6Bn;`}7DY)b8<6fk9_vG&kK -EEhiIxpu>tx^rWia+soGr+;$VcTLTsF9dioGjLQsC;G3+W@cH$`WeC<ViwqwRII#%fCN?>{AE>MP0Vi -NamfDN2WY0b+gDllg;ib39at8bI$EcB#wG^716J;pG`g8%uQyy?t%stx^PkhLsCyG$5TyYJ!lGT#G%T -76@a$pcl+j~S1KR17DHf$0dCSopk?4sITN9>PRK6TS)%59G`DwiOOoAQ$z^+a<eZKIc)990R>_tli$B -I5tP^ipoPX%-3tCAXi|LTYpi?<}7A`HZ-K3lL4WGB%LQ0#+E;%^Yvxyw%+zST58}mRn4eXnV+EnvI)Z ->3ND$^l4Bw(!F?+`LJNmy%kW&w>Md|~=BBN5Coe^x?!(Zx9I>?+#T+a}6cdY4B{Q9ABzLU(oiGva6aJ -KtQIjqbC0vtt}ttyUrnI=2vl6@o&3YO2^&+!jq!toENn|5|<8Z_|^JFtyn`79yRQf|NO*)xf)Zs$7Gs -@y4aJJ&JOX+kK+PCH8nkf4?}DmaYJOfi;M>;qPbhtn|NCqnCG#jB$4jKfWzKihp*a-?4i3FE{WDasxf -)4;?(i4e%-F->MtXAzmKl_J)7y2w*aME3)F@pWP+=%K`k-96+N^X#jG2lrLY(>(|sf#W^qB3xi>+Q!) -J<dUFoDi^qDKI$f1ny4*baAX(q_4~eh$<n}Ed@><>U882MsOYhdjy7p|m&|zXe?EBddcRb~MVW5vX*Q -+?oAdT@3kj_>-;B6a~?5MFk#2defARha$FaB1W0G53;)u!d>;<~X;G320Jp@YjhllW;NN_-fhC~0iyE -qvBx_~N-)sH$2!Do&T3{V1DAc?|!^Y_D*^-sdG+Bi1*jI)H6pK9_Om9Mc$iXzL)_XJcI+@3N5XBD@Xe -!LY?<n<^!b@Zs_2KYPsfQmiQ0;+1s7%Lkj<HjE5<&XG^s7(JHgJKQN-TgOGoKOm8yu}E~{x2b*4@3d6 -T-m24AOSa#~?h4$mCGKI({wuvMeruPET;aM*;zp44L!@h{Z%c5{qOzUJ!=n5LXb&UytIs}rU_X}vNjl -}FAue++L9}(L_ez0Zv)aO=O@V#3wOFY^J+h+u2grx;{_@2`WYXb8nE=>gF_R*^l|P|(k!EstK<~o*{e -L~;+gE!23rN(ZB1~RtIbtGkzbx#z)<V~3+*Z9l#oq<<02x!P8&(Z}OC)7hD;Bg6?Q}3L_@3KO+d|+I^ -gT&Gripmmm6^rbslx3!GYQ@A)bShYw*P`5A4A5cq3{`~tu}$wSoV;zEu7#LTgVvcyrsUdSjh42u!>pF -DckNb+bfG;g!KnQK3Z<L+G0)X#BGw;nTpf2a{!leKjMH)Tk&se$B56X;*qQl)0~VIn~j1Oue%rX5%36 -VdM_c*y6+G`o8KJ;uewd#QzZDY;#xTPsfbr*2x{yRowV$-go-`TMY-_+L#dTx+s7!}x6>Y%$n-ye)6F -fm9U%tU%C|D`|Lx0>^h!j~I@96vcM8py{>K#Xv$Smcc_$`EV)R0=P`A<1_a4Qg2yyZ~mT%~XbTy_2$Q -_s8pYLTP)_AuViv`v42ECw<8#I3HIi&sdNU8sTntlePJ!={}Z|<ydH3?Ygr|L0=p*~w9+AqaCjW>@_2 -pCV7N&73pZY6kx0_;D)w&49O58M~+YU>$0T8C0^&{1%MSSc4!`V!UP8sAJ~l&g4y@6WAkv0Ou9$FF{E -igoZ1gX+*N{WQ0(89^dd<EtTbm_|PICGYV>QNTHh_tm;5E;p&>+ZJw*lSIE5QNw7O2O)B6xSnNO$v^u -6uQUhQM)D;KPa>tL9rZ2fQx@f>r~HzbS)jsYU(W&+fteASBfE9yQ8mr$&}ltVm#HSfK)y>jP&}$lnS7 -mdV6wh}{Z6O#7KeIYt>@~7JTWSHGRB`R4ex|sixZDo6EL-O22~aHz1>DLG^ew+^_-c}cmyxy+LK2<M) -p1CY2DO~tw;J;@{X0h)uzd(S99EK64gp1_(r9XR4&mYO8utBmb_b<QO^*EoaH*SpfFeJZgIW;j>>6{Z -z)-}887h;0zIQdXJq?KQ}WL>5VKtYM%3B@`Sn?lb?$nH6{!PRh6#Q4!%r%wo|{ixuTOHT;;t1vwL^L| -IEwOkg>eAF=pc$#pyyFEnBa3tWfkA8;t6f%6(0rX{nWfn%W?D(cvw_pdZpC=!tj;`^#)AplYYaPer*A -#6>SN8jSo)}?1Epd1+Al2+bB`RN2&ybCJ*={zA++z!B-#FWjOdAvaMni%x(+d*DAgPLC5p=MU^G9m-F -8Zh6>x50xeGsoEJ==hE<NKOQ>BjuGUaSZ!wS6q;}{4Fj2-PkInNCH6L}yXR_)>l<JwWOMH*H^(3x*0# -9E5MMq*D-L>CnW~1^DF!(9Q5u|EcXj#DUA9yD$5fgnW({06?5F*GZ7?c~xO>p0mjzY5Mt&ebqJ@hr+& -WHE-R2rs9`06x>VJ;iZUfx2GARf%pIkTajy-epsc5(YxvCxmZ+2g<=SfgK}wb(g>dsUjX#7CiSxbKkY -AzHl{67%Cwxsn_|K`S3VZgCzm!4l?%J-jzl+&&iml>dlnCT{o@dA0%P#JzpUiwAzy7d#5G7>S}ViZo) -+PzW*eA-8o6Bbm{l{|8V@0|XQR000O897^_9$SS4dSOow8^AG?48vp<RaA|NaUv_0~WN&gWa%p2|FLQ -8dZf<3AE^v9xS4)rEHW0r1S4>qDm9~oF^k~2Zg6*OWl5T_D&7m+1fooGX5t$N5I*AeVzjua|_>jFt+v -HFmc16yE!;do`hmGnEU{1Y|I}nGyQwBCnn-bm#`ulrtL?>BW!oweLZ|dt`Z?0dzy8WeucM|7kvxdy8T -BE(>N{=q?-@dxNy}7#|<Ok05QSnjwn;RauG=qX+kF6I!&|nnsPsY#V_iQGbG?c{*@aMEQozz`$bnS-a -_~ACAOSt25%hes%$JUG^TJ+)6^T?exr{L_K23BD<+q6t;xOba&0c2VB5(XH6NpWDbRyDK2mujb-8vP_ -YaLBb$#R6{WyKB5<u8tD=li7C?o*h7m&Au9BMddwMRPr?L61w56(Ctf5UI?axt<ZhTPQVP9Jx8~@y`g -1k;FrdTpi>rRn-Lq<wx^<kpLxR&C{2#CEJWep$vrSh1a=l0^mh(Q;_<eVJo4FdzJ<JLJ7!XUR?x7GL6 -_wA33o55`2hMI6Pib`zvibKr8>2MSB*OZq2>1ogXA8HV^3#|3!Me6tMQnf_bqRru7wn)uJaH+Z<{hX= -mo;0%H-r0kfleL!4e$@rK>W<c;U-%m3g$YHChpPWeVN`EO;nHD4eW-XFplh0ESVgFmSeR!%JVgD++(@ -mH4L(?@d54u~vk&m*q_+JMWRw2oe2E?!HlfW<`QlH6UX7WHn7`%EdLolPAm3bVW5<ADDW7>~nHb08)d -{LTbb0hTFN4&@X_u7#)qhmq`$f!r(NnL)@1W^{vowU5=YrWlkeo7puiOwH4BE^?|jc^^m*Xa+ITOYKU -<vQyX!J57=6dM?2N0l3Kc)n22n3EL{d%*jg>Sx@#KEO-PS<HBU9`W4~pF*P}C1h;p5{s2&*hEazbm;7 -JZ-n~mkG!`wi?S;)#Prs6Cl)k*Mn>%wwOmJbV5JMJ*ci{dQ0;hy<w(M1>4A}L{lI*M%`PF8VqR5G@th -{x#ts-<-k?O^ca!gV=e4=P5<^F;^-`N+u<D!2RyJMn=_>uX>{`lVNq-H)K_$St;j2O0^9+ryBzI<ma8 -JDV7%flV$R^k5iLB(@fwN5SS}6>q?QWBpDF1M7K0To<Yb4}<=NNXL{X-pH-Sv#Cu1S5f5@@O;8BX=Oi -$7xQ^sF9rN?vAWU_aD8H`3!WXDtZ;#R^iaTe&~lka@`4D6ihUW?KOSuaSus09FDc^-z)eENAjg@10`j -@aNIhq3pX)x!Fhl&ZGts4x-Y~ANY^dQ*YE#Phwx#W6-2G7$7d_cK1lu@%z*KdoP(lVs4Bkr-Eu<$o=s -MP=YgVhB65G6I+b!n$@<nm3S)r^}-N$jE3u{ENS(CsG4z;JcjH`dyUHq4p;_~(MWOso@{m#a$vEwvKJ -Ra#2n=BR@s|ITegn>QN@W_#<Y_9R`-*eUfqVe@8e&y!Z1O6oqaO!eGujh5;6LBD`FKeragKT<TqLNG9 -3mH7YQ&X~VoMIn<bxqA=UBePnyT)jRtm|w6@GbO;?G9{#RD##f2d=_%&fO>OF{fM3`&sgGY>x-2!^_b -QBZZzx-j3q8G>C*P-n66a4SqY%m_^}Xyc~UoGF~Nn9$u6AU}1OYx`d^@L=^8+VKH6~*-l~oWJO9PQTE -mDwSy&QA2<2f;aBhZN#~K>IuyPGq;7=L7=SuPoWMUJ7~5!axP(3mv$xw1TeLvsF%Z<;7z%pWuSUXs>= -c%4J?!SOJ@Tvw%PHO{uJ?6MDz+<G{^%bzNFD@!NS}{;foVpuO;U<ZJfBxc&VK<=O9KQH00008031s8R --7m?bM^!P07(%502%-Q0B~t=FJE?LZe(wAFLG&PXfJbgVRUtKE^v9RS8Z?GHW2=vUqNUeDix}bw&)iF -8kVNpkYUY$CHoW@0xeNCJ6RM&DvAI7j_;%_JLxt7Z7lKbxx43HNVX%}BXJlAM|3~1QK0(~*JOk1zwhD -eMQhe+zqJB?41%&AcR5lLTBN91&sj&T(6xTe(VwJm$cQ%`@p#3zX*dWnTH)XH>sR_rdn3`&M~C%0{5G -FCIMRE?JN;@G#lbspCttLK7j=g@hc8%6JPnOys|y5Ak|bX!A3A*C2qUiK5bYaUW5GuBM8yuizcI$&Al -%bEmLwDxO8;uya*ZS(qo2l+XDf7NmqxdOQZ7aWHtxx@P(0VT>ke7r&@8X1W0V>G0rA?B-UD)96C@a#x -Re>uE$azt;m5XP8{Ao-0(~JZo;ty$uoUvPEW6UF$j&X^6U164;0ORwLJ$zTgWvD=Xr%SdCMk<eB@Gii -IWku1tfekrkzw^Uusnm*d|HDMI3W#6+m2xo1FD4<*D|q^ouiOq6Yq;lk2;ceBz#v5(rp5SE}FQV_8R~ -Mr;R-H7HA-?F@yh5d@5`W>SAh0i>iwDR8&>!10r3U&q{1HYc9Y3HlNqe%C+r-DVjAZRr>RJMpj7HWN8 -w1w5$`h@(m_MXNkz;M68fv2?T-8{0yCeAP}P^vsFYwVS1=EB+M40qAFvb=c2L_O6_61RN0~^?Sx6qmm -CRb)KZ(yk%BEFBe@1F)&JQHS53824K$xxx9rD49xa*_mgaA~cuZn>{3%uuBknmRy(sU;DS*p#0sb_M3 -{=Izm7{kom5yfU-H(=-Rgg_FjeShuDL@m6M@vjmCLRwO;#UGQaYx*kgVENY%|U(B(;TtQH&P2;$o5(E -L{e@yC*NSx&|pDcYA@F^ai1M`&fA41a>~$6Cwt8{lM{AbwWOk2$%(2~iNzF`@-?FIFBPnb%4}KkiMK5 -uI7&|i9?v=Qw6LLtJ5SG0y~F+X?4}d25g3-F9a}SE|HX#gZx$FoX-}*CORH)lnkDT!x1{ek9kv5)-I0 -cawwM)&E&r2)m9{hPUVwSk2v(pn?w7!phP3zS1@(nN9tj0?VJEw1!j1Q%sN9TqE=H)?f+K1SnW-}$_I -8G=aqN{z$Ir!7%x9Q={>M1nyac3C_;GzSV(#R+n#-n&{BbHQ#efTq7@1(hSqp5?296GFCoKSA79OhP= -@brC&PY7nmbWsWrw|D?ParXXO7wn|93NIxlncla-1E899(k@Sc|{9mzx4OvGv?&y=bEUG>vgQ~h`T^O -7M($FLg4WBw?4V6nBX+Q7gWa3!yTcjPzk5Os@h}PS5>k?=m#{6c)Q0dHMrQLJrwARCEdFV8}A4ig0&M -jN-bg6O8ePxtgdSIrlU(SO&<1m3kk#PYxYPRpj;3&Yd4Gud9R&@Btw|nZQlneJxV|N>{;NBZPVmNxh3 -^+^C&N04Z6BXvR7(fSsm@u)eRIQZVu=4&HinNh<YoNhYjoCP}EIuVz{eu-%F3=KB0h<-1bYE5Gcjns~ -!A>O>n(=f0<uix_=-sP`J&&)kdLz{7{f*@_L^a&Kfp=ku>YCfC<hA&~jsgisZW_KEb+}HsECqN}u7@y -ey+9U6~w6*RiK0JnhC_f6BtjDu$8vA~oJ^M?!j6J{=TLgZNa}g!6WS`#MnY4^T@31QY-O00;maO7>R1 -I6R}Q761UjX#fBj0001RX>c!Jc4cm4Z*nhkX=7+Fb98xZWiD`e?LBLA+eVV#^(!Xasu<MKJc+g(n+~_ -)b+mh~(>f_hzN;%mMMLCJL<|C40JP23>VErm_q+##hn%}T*Vd|1Wn!k$-P6-E{g@sk*=+NoV&%R(SQY -t(t#;X>%JZ~jiRej--Fy)*)?D;&;-Xx~sp?(sHrsN<(mY;D1Vx-J;UC$LPf1pZu4=zcvRl>lD%+3PkI -AAMu{RYj;+vF@*jZA-^H19<$+I{evCI7yTHj^xIAV*qtPTXKvBJWOA}=KA@gh(2LiN1HhmrW_XW*KjB -B*S**q0UGj2IBjmh<BFMq()VRwFp)<t_zoie#~#V~2zRW;Y3NH?P)w!xi+8r+<9)?(A}Yd3yfmH*a5^ -%`gA$^v|a-0ttPIzy}AvV;9vvg}1V@in9eT8Ayng)VAcSBujAU&{}YouPUAaBoJJz<Ls8Bj1K61lna{ -)!CaLU3~NB`gX@EXgGCybC7b^tsip@E{sx1=D?nZ@iey`XfU2C`^6FnpUa?q`j;pFjZgv%CH%T>y7Y^ -vn`MgZ?s+`Y(*3|&I5I=SRtI&zu&gW6d)71!HoM-tI`5m&yzh`grj0^hshcIIR0Yt~_`|l;RjSN`Qxb -mA{r)os>1ggWQqzzYUphQGz%GC|%?6o16tnjVz9L6};V=LLWnhyhte+930MJ8Seg0pXC?C8J)#}R_Ke -=rInBu@-lqE`wdWIYyx_M6!PrX94uglUIq5vm-$r+?oMN6>T=FFxEB`403&_1@f?erS$aw%gqBf>7vT -j99r_tchq`vYR|zj#yH~X|iCvT8tTJrUlK`@kh>{08=qMO&KWp9#&q)cmh8Qb_05u5wht0`^#d--y`* -WwZi8=#%U=V3YO)tuYit0J4y<g)zFLE(#T(qMX0h|w4l+~fJ091a4Hrp4oeHI;-9NA`;o6=SfnNDG!h -wWv{Ez=M{LC0iXOzsBGftu-D!qvRP=UnxJ)+97_hSoft<uf9J0R)4UCi*X_E0~Od6znR5t+jp%K$k^r -IQ*g=o^u(+aFXe{2Q+$iW7*Fs2~7Fu^)qaL|)R#w0)wS%EetA6mpN`l~f)<L$ctJhljJneT4W{X^z+R -m7VX7OA@%3(powu}E7GDTr=d`NuAGRS?~{gtC$W#h-xU3|rovpM~C1Te>ukw82b`4Whl|TJ*{7r=izu -w`4Cxqid_Ij&)qFEkw{R(PX<coidbyc;4_Twg7MTfaf}3$@TCDVhn?k)gn1}+6-Gxv&*s5h0?4w%#)> -y7A&5N5G~={_(4u5iot2X;X4gDe%T<0{X1}2w<UTTU{^Do$%{Xovu%u83p>6PJW&Nekj<S&cLW~Dv4# -E^o+sAx1fHK*&rjg_srCF6o=>dj6L@}RJwJoz@2uzV;Q6`r{2ZQNSkEtzzQYi5c;d7mk0&;h$H?W0V) -I@I<>K<c&Q9mAE-%mD{Ndf@>4h`w0a%{FRQzMfb{S|xD~HYWuiYMM6vha9<S)A~+^lyg>^2WJL}L#b2 -I9llL}6ESmo2S<v;o+ue%iea?Q+A%UiH)NZD<#pJ9f%nc3-&J?C{RGogwUY&3&|4W4HKW^{Cw!JN0j? -U+t*auYcS9fsXq?sNlo{=KVwS)8960?%Oq}D{jZ;mHJ-W=Oxh3sTV)gfI#6pVT9gxg6SFQge0}>2Q}# -glj_<DCl$04PAFyn(ROo4y4VS&l(G|0DPbp|CuP)<8jNR9F<T*`?N`~})2X2s>ymK`<M#l4qu20~QA% -7;oA?74#ygVAU(<OCkm)%X?8;=xiY28=MhH|gMKWX@f;sVfyu}2H=pG(;{0l^aOT;G;m!g4?)Yu(*I8 -?M|u&9<sJQBdi<VE~52!1z_Gk*7p))IzmKnNpNR{^xlAsn*+DB7OX!DPhcLq4rTnxM-EeqIL_F_jN^{ -Hy_TQUiSw;8n#tKJ2pqw<_kTu`mg6E2Em4xK0B6S}}_ce{vjPT0|o?HjX9%rgh9w<K*aRfNdRC)MoGK -g~z$kIbZu6&2ts4rib`fZ^1v(M;aLBQI6`o;vcFcjiv=g>LZP!1<WWTDPRkv&_tnqU0@TbdM$8D2Zi3 -X04fEPO4kA@wNGkXpFvNQy0ricy;Hi@0;rWvDOwAx);OhQ4Y0!o<-<SNDMS0714CQqk)^Yq($bvH$RK -(>X#cD|nI4@DnezV;w)-nV#(TA8uo~RSLxJdM#9q+f@cs^iyT}k7-VcyqM67{Ss7;WB@VhPw@n#@U4x -3zz9H9r7c@#7oKvI|=_)l3P_|IWSi17!?`9i}wUuu6B@kfiaBoizX*2V}A27}iHk1L#b_6T7gi5&2V@ -xSbnk8#Sgiego4jD{lyOtDQ~aJJ>eDlay1CX)0Dqe@7>J3E_Gbl1Wg9%4unYP`R+9MwE;k+4usPQc4{ -0E83NHC~qSPcq;ADXG?irZ@x1aw`ixHadDvV=G-BM&@=sR)$mdibWtGE)uvyCLJ1pC7oSST3WQWrG@Z -MCy;|gOqTeIiP#fJBALpwp&8D{cs>VNLC8dHLl;tbmo?oMUA{lr0Hz!+`q%F?{+Rq#BjUSRM>P&xd*z --JV$AFuzJQz!$?vk)w7+(1;=`T7$0HXJL3FJj<RhY0(;gx`ctOwrmvI$$tpEay8tI~vE};#3i#;B27| -dV4PKNs25aI8rk5cD?rq0*cR_kWafqCnrkpazi>GxFGJnN&YdZ#};T*DYr@XV&z)2+idX$;cywK&PhR -3R}-nNL5*n{CQnWiF+T5s@*mn=C%e$Ta8KoSrPV#XUgmUJcF}!K+L^(F)OP!{OIPZsfrtl*g3)JKulG -3-Hm4+ua6?wK%V@VCu^hL;}Gi<(k!NU29n!7{iLaXci$FM=Zlwh8L?;(!2YxpN1_C?0C0@y?{q|tHBR -<ANc-$FlFF)?1cG(hLL=Pk?3J072lN6@V=&ixHp)6(ejQcl9^F0LUbfv!?;DZ9E%nirO3vKXf!d2Y=0 -u!Z{$j)wx?FxL^Ym>MipDg)@Pzs1roCLJJBkG2HE)B<3MA6Av#1bpvEAFr5%6OE(fQbeAPZtj^nn-!J -Vu2dYQ^?ggjDObikIg;QmAv8zLF79I;&~G>!J%MZOeshuvk!J9PYVJ2wktWaUMW>N$UW%QIf!TK5Z8$ -Qs&yn@!imCjRa(b<<r1_SqNK0jccQ)wK(@-SP~T%AzXTT=xx+d}iIj5vH0D^jmgxbEN)`;m>8x1r2l> -)*^BCp@&avK!h&1g;VFS1$jgTGRMPq8h93?N#L3?6tJtCz@&qKJde>dRLO`YBLTW8J?Wri4sbLvv-%A -^16B)xof*W*JH{VvGblKF+QFGPJTfy$OV650>h2c6Ngpy3kIuv=H0eR<SqCL`dZkIJUDD7}Al<~i>ma -5My)-ek`5Iyhq?_3D4r21OOw*EEx*;V2nsrC1%~3zydC^y^Cjqsdg!H=41cSM0Co7KjG(};n3^CE&gH -G4}qfZGnDQy7_H4W5*VAp=6PZu>oZCVXM4b+e&(`O1Q!&|2*=~?jO3}n`T&^o5*L^;T_fFK-t5?vcbI -=5;h(Xb;qM5xlm^}oYr8X|Bu82_3lS!Ar|5aVhPHV8TFVfbilR|AjYY+nPP9cM%Nz#z{R78B9|RRu0+ -=_ZI|x~d$pHkU_~AgYX?#R#1vq2Dw|zp0dEr-X7|Qf=_mE);I?#-vm9>g~lF^1n)Qz^XMcZ<l)FUp-{ -8iLuBgrm7M}Usv#eY=O`Utb&8>w2DFO^mB=6G>cz@N9z)KjzMRvye;~9VE`C%znr2PTQ8uc!Ryn2^$O -e$2hQ>wL;H+_uibSsOkN#b2RAJT*`zPB;~vPK_C+@7f$Vu-WKVh^>-4Me4^<y4r6C|Guvk5MI%>3$At -I5g3vYQRJOp^B*C09!d~gsiM(nuBfBnB6#Y3zXE<^sg@-5dg|CHSp@lu}M%k5@3#$tPG`y2ii>t>M-4 -%xMAJvnL=p2_adsM<UTSl5P-y_5OM!Aoi5U?BC>nucu1ul=Ae$V8j?bD8{=&+v$FsBKM#8JrZ_MGj78 -Rbf{R8kM&ST3^ku>~WccafvI@QHnfKwT7sie7x0)FDg;KuNzCU3)Y~v1ur=m2`?*GH&22%mc~*p+2^H -~RT6{2DcfL{t&YPQxc*%g`(V8aU_=SZQWU~vsV)D!;9GSaXiPrD#U94_nQr|wAVd?5652+?ahiYPMbv -hvw@nrw=BuPAD>0LYlprgugsQ%pBl7<G(V5|&0SzNGpc>g@%Fzi{Y$@PIq!VzGkiSM{f7{xWLnTO~1# -tq7)qh|cNe7(y&s)$PzJ$Gur5p?Ekt>(I!O(W(^qm*mn-e#t3>W)^r%Nn;q<Uf%1JYrcljoLjy7E{?! -MAO&R9<QlEF-UQM}kqss?L!#0IAATJI@iOYL%LL0bK)XS$%4S^$o+3rKooNABNQRr%wDHhSgQ4PWT;$ -Rn?|;^xPqYNlgk3Jj-%ZD<TcUnaWc)q6|aZq76t^8!<Zda8`yyAj-uB6eY+l{pNo$m(lRvlQ{`-LzZM -ktIw*TBk++}{KMeJ^ER*E;28*>9B|_{I~Iq|gMfu0o6Q6VR-4Ue#=jOuziDSww&~3x$*O66vgjDBaZ7 -V3BdG4R-kvc!ZgXC&`xBOz6ewY{U6!V9D;RBnaHEzcDAL`AK2*!@+OxV?gcYluFo?1bJq2E6gJY)fR- -o~<Of`(E1wtpeRCoNEj~hhsKm$8c!2KDjU4eW!L#m#kfhC-b06!Q6JKWGUA-r8Q61v+$k?N`%$kCA@c -r>uU=4Nm$`H|Oa4(<bxBo~hysuFB>vP#f;+xYB@j7_}xMYfo9u-eB-iFq8X6=<A7O+<t;hV{^iv2(&{ -O=g~@`w)|&07`N*vsr6AM57Z(&4hapTsusw9kNDv)0HyroQXTvAk|gH3%Z_L6+5b^7>0NiN3T}hoO1w -+ch@7A8+mQsu6k=66$&ihRda8>gk&rZ2^aa6sy>XGn0hPVc$0tR%kW_xT`CJ&15;h5db|=5X%W8G8j; -piQ;nNi9eG<K%B>=?)_nk=tx{y*=6P!sk8VYX8vu8gNPS_|Qy|2}YE={B%G&`tymc-!s7N=YtMpxlK& -0Cpnc8|{1*v`(G_ECL&oTJ%Fg8Vv?2WyE>_D7=aD^us#8%0&D;$1LxZj%^59Ni0W8h>}8>I?V(H|7qc -YVj+7kOy$V&qI!sa6?H;2t1?`OO;Mum22PX{lF<hM?@DezPg+S5!ID-MxOJ`L>Q350>QMN=;zDj_UH; -rb%UIx>n>rB)9Y}4=U$@P@8bL5~Qw~3#!uvHXzKJfQ1>#vq3!?mzXke8zLe!f>{q{E^%HFBAi4N0epk -jMk3y3CZ;F*^(fCC1!&c>E$Yv{_k)}al|8FL%hZeap%whr1h3~_`VArY3jVDi`lKt~RW5cNc8AP;Q{2 -<HEj;(|CA%XER<)h|Hx$(?!9f{Ig7^>I?IN{j8m8*Yr`mjXWma2`m=YDD4{3;bGkAXUo8_$4$NxZ#R3 -{krqY<nj6t<d!1~E5}y1ddqueCjEk+rzg`~S7B-kqP-Ruys-T36B&Xj2~8ZTu+@oa-7<`M_6*h4xAO4 -2w^t3@AkZ#r_p9^543$opr4modQ&GGBK0cM-_eObR<sgOeCBR53O_YHkYdFkN{6V*3~Apf~XOr?@L)m -&-s*;GJh?Fg0C+w<iLuZmtGd1uA0ezK_21HR~ge^HW%gTqhJ71N5QVopj=}2CV|;v?ZB=Ukf<BX&P2L -%W3DNTSQrUj<aQ94)P@cy>IzBH8P`C=cU(opj1viAA{T)gA!xh4rD%%<NF}uB=B2Rn*G-c8R$1h8Bvo -Z>1>>^)XnfK{-X29b+eS#;dm`QAlLwotf%F6KEG*+S|9n4afX8IY<0T+2C=`F(<9+v<aGyb_#71Bkqu -SA81EWUDJ$clJ6w?sG!3x5a$Dep|yRN2wb*Ni>+48=O#A`K~waT+F4o~>gV6mlJTGta1;&?1SVHCinu -j}{27O3x%yY1kmDpi7QsO=bUk#BAQgB7mA)~3Ed=zd);c<DjBuFhcb<{BsyaDhi(-EnKlB2A01<5ist -(NpD$x!xBB%<Z9$fD&lVB?ESV6tG&mO=LljgjZ#?3|ob}juUy=<WR|0O0lm*$#QS=GLd&Q)Ex_Xrvf5 -+2<%f{3+(FxKl}%ixX|A1{$csQKrveP2;C%w$Q>q2n1y74Q)1oI437QpnoG1wG(3PnMzNtp(R<NxOy( -UoB;9ibpT~cgoTE%0hR)u4CnZg)`+?5#<hk*c7b%YmLIRV%B%aGJTM|OA^(PH#rvWNY-f!i+)jLCe^D -6|2|6Chi%i4J8E#v<URqsf$qauqdcyoQ^IBLmq_R($9=9n#$)r!*zpt;b8h+A!?^&v#-t|Y3ohotGVi -1_zVyVC34@jsRQVaoo+CZNaW-*P+oH*fp6B0y^)>}dK*97Y3lo<xhb`Rj4Ig5NDC5Y_e9D%uv0<ID4R -r>}oH`{~^JG8n&&7yJ3ABwOa6O7VeBHA4BZukbxdWS$O;YBvJ<xT`q4`V!QqTCm&%4rc`p2JT&D_f|n -r0D<oxOL)Ln$U)>TnV`ga)qsXh<w!ijR0ggosNXVOOJY&qV^Jdu=Dej&;R_}?1<R#$_6A+#P`d=;6eL -@kiW1>s@%-}n_~z=4klt_ZkkUOh9f`}Bf*P$MhYQ!i5??#1d_D8VqN&z1L4uF#=P#4x?9L#D6@LHHdM -4I>`Q=XGx|eUg6zy*6v=)}Ax6JB<J*QHsNm`1HhRU5AnAHC)Af6FZNmfdps3ryYN$DOnOnrabQmRXI) -I@+u_knOF0Sl->+g$-6B7Ud`D@VFlmBXpC04}j#tu5ypE}{i*Vp#;7Br3i-(+Y|O%H)Qc?Q36-%W9eL -s_`cjKm@z5%xTg-hi?w=f5}v7ZD*Qz9xs=22BekL18YxQr~_rE(#P!Ija7CJa9hPzt{Tx?KfsV{@Nk8 -Q)g3V9O`zH?+mCwnyH?tI%`)h2gMQUF@izC)2jBwtnf^Oy;)m>S{^#Oq_`VH$2l}m`G<$gxK)fBbg;0 -f?){~Zt<9c}S2=~KlaNfkP5(HkB{)P2aS4#3T^#4dBRPt*fbiU_ucX+7lfAKs=z~Gbhm5cgmS{<Fmh* -?{X%VWLMQi!9W?Alpa_PWaVVGCcTw`6smF@(5}xJyuf7Sw)WO!=mvI4p2FjJN1^92^{&09K!<4fX$)g -q|;|cp)#bQdMAy&-#i;+4MgknG;;g|ARypE2^Ex&OEv%NqPUshB(&}sX-*;AaQ8<_Z=J$P|9yL_+AWx -hID5U`lh)5{h+ZjcUNG@W^jwJ$&d8VlN9@DEFP+SYs&n9NOKt~bzeO`wnntw$&c=7trFXE(1iaCz|Qx -o#P`$<<sP?*1bRDFVluF@KvBp+xyu&)(A<rkd(C=;>|dBvZZp(;+a}weL5wNhdl6jWR<caWMO-{2`Qz -};A_y097JrPBln%4wQp!n!4Lb*iJU0}1o5}niP)h>@6aWAK2ml;P_Ezx<rcl)Z008O)000^Q003}la4 -%nWWo~3|axZdeV`wjPba`xLWG--dtyIBoq%aJ<^A%S10usvyAW>;Fs=BMycB{6Ro}!cqOe9F6kg3GqZ --NsDRK1l`9KUBj+cBL{BiLCB*@GChG8SInp6==S*Zuj=@5hHM>pY?wIh$^VN6cR|M=osuOuYA21iYXb -opv5p?u$2GXU(%rbo*>|2JS;ntK_6M))~z*9{y=7+^K|TE-&0X^XWF&XtDR0A!`RVO_=k7;Rzupt%n& -Hpf0Q2(X7NOTVN;CPe}0J=7xNqqp0B|=N&(iFnqoi?4e0c6ww;x1llVH*Dv8(e2nDuqM{4$fKnlar8J --T(3J_c2C~;hN=)S(s{m5K&pUWjl5dsyKvhy+lLXy^P<ex4Q%Od&R~qK!r0rNG1c%cRM(30%oZfa9#z -_|LqLQS8CH0}HO$=N0+|uPP-$WLNx$z4P?{i9+=*tfcSj81d9V<7y>uMQZ$onZr=zOZe-i%!1eCl1;u -5asIvYz!(MB?+k%iFkEDsI%FAw{+<Dy5Q*P9ii75K2cTB&DPV_yO9meq=RB<ph6lvu&{!x}qO0lrojC -G;Xst!u=e+gjJeJK1A@7H?U`T--Lb67f(*Ed>9ldN+3$Y`*3sb9ML{YzHo}{KTt~p1QY-O00;maO7>R -nTCYs$9{>Pli2wi^0001RX>c!Jc4cm4Z*nhkX=7+Fb9rubVR$ZZdF?&za@<C8|M?UM^dq|#2uaQ*m9P -%3(2{KHPLfq39Vg*2Ah<irg@pz70IaAzpC2U;kypx-q(5c`^93v^%f74B!7dRWJu^K$J^eL3v*l*nw0 -+cc>9*+CM<qXQtD;{u?M6MfLfv)yPTlt6Lx0;A+oM(6Y@*_N5y=myUp`IXx$E0v(Qib*Zk7y#O;qKzf -_sB4(uaP(E$bWges&bWbz1Kex_MSEdcJ$ni?+C~1V6njJNf=~u@TGj-Bx}1cH5UtT~z#ZCjPh+^+Kp8 -S;&At-*4sJcQq7Dj^;-a;c}bi??t_A+H||W*@(LD(n@>~t-|#sJ{$t>6!eYgb9$3s@ADe4PNJKg=sNi -lNS?3CO5m4?I=g;f30378JrrH^Mt-Ijhe}%*(Hn))M9IE+Cu)0;o;Dl&#>9KxwoS{oUyE9_<$@o6FZQ -=hyBx+!-t9KmqE#aXBipOeXMGFoAjbw9<=gMqWiPsIfkQc;z;oA^l|u7rRdn6!rvIwh)yu%B0+Q==(b -RoW*2X}+gr{x<dRr`)2DiT9$3)#cD*=lR*r=1urFqpfTLq5yFvxA!%dZPjRk~e#0A{Gwx29?|t3AbsB -m(}gmw9`0tzqh}8TjETKPKvi=R%i6zuR?vx!S*?`Itm+p%&4;72U2<nEbHY?)!nYf5(rn$`7T&XCsPk -*Xp)j@gq`Q0(64LKr<&lChDeBU>*l2{0C>EghBD5K+fU*=!jSWA)<_D?*)jMBudlt^62RM7q6dv`~4Y -wQo<_*S=EcpY#wD<6n|gB2;O$_(X;1YoqqT7JU{>D`K#vu9&ehuc~_M2(b0qGd@Z6?Q&r6^j<B361@! -p3=)^K=>S*2f+wSDiqnol{@2-LRn@5WAhMViExqh@Mp!s%qi8vKKyy_moKbsN+6!0uGdK#_7ZM12Y<* -Hm1G+fcGfJQgPQXCzfzCL@AzkKoaH|HlL3okSsB+)LR7e5Y@<%HkP=I*RfABd~6_!d9J5=u^F1+pwR* -?GGY_Sf`HE4FR3a4K5ti(1tq=eh%NUG0PekzxlXDpC?5{ob!`Q``VHg#ty9l76`>tG=u!Y9z3)cJ%@& -?7-c$LfC-#Pl#$%V-oFf_EaDxOfpeHk~qQYr%FBlun^k-VqOQHiA6(%8KDUXh^AV4_5WMZmZ&<NQmt5 -8wWHAJi-8YDz)pLR(AT?uY5)oFytr{$p)GILeQt6Di+cxdFK`y>%1BpCaFtXzK%PqU!s9<~)aZtSe^G -a$^$S@1pkTid#nM33rLzJ%+g-11$b&<qioOBKx9tx#KzjCI4?|G+IlzTKNg?y>^zH9It&Gv5T`b;x3Q -;5LyMx5>*=$1a1gf2qKN9@zVkl7mlr)mycNa=#{r8nkR%0I{qQ*KmCaE0i-A`cod_E<&Mxe*U*H}+}S -t;gM^@)X9h@C!_OglK3e|gdN_Qlh0^0WVVeSZ4yZ1ka#_+wmvk)Bsrb$k*HHdYexmu1nuQy)++{&e*E -yH{U6e|wfc{r2T|uU_ZMj(l_a?AeRgUqhXr9~~VnaE3)^dmzRKFeW!*2Hx=egwT%T_)9P&BZdKUFe<> -GM#!i~&=dfU2=ZSY?-}1M#mey3&{ZUVY}Sctl|*!(_axf1?4C!*Uoe#z0g1%dqQ{oW24^g8N^o$r2g# -KYHmX!xlz=$+Q7<-NcO#To(kMjHgJ|0pH=E)ls+(xhya#vqU>~kQ9o)3&l5uya6BF11d7`0AL__{_@R -P%&U1nprjQe5O&Wurle~TV^Qi+=alpYYvAe=pn*xfuY>$1;tHBJa|!f^(6UvQu<Ea(05l1TBosSQeC@ -l+1}qFAiOl%oDg7b{m$*_9+57h*=OCouHwe5e_(zTMj|h9;H&qS_|PWq#m*E1z4n2vQlg6aKT?iGi#I -c&+i!mZ&;m*E?A!VS40{*5FBYyR(T(QWtu>GM;Cd5_~r-uflE4kABIiPGP!%S-B(TEb_RZ75%QQecrn -maJU=>fd?DRESArQ8O)~aG{Ie33>XAiE{p{YkU1V{y{oF3Q-jA$cqyK+k-LcLeSGP`%YhD*kY562Y*z -6;Yc#U>K^#4lD8UTp8^k+`A3UZjPJ+c1`*8&dN2o&GQYB&L9H|jCxz|N_8DEAAlzmZ^3$F;j9xF8Hb+ -?@U5-K_m$b=C#M((4?se)F#PcJ`Cds)-REv2;(ni%)gKuxs6VFIBJW{T8@-K5^(UT=!+nA#XqIl7=C5 -Z*h|Zc}!kV{Y=vsWmMa!_aqDcb`~nzHFLz(QYdzWLc8|!Vl2<UrS~_V9dx=M9IA_!6j`M>%9Z@y@+Zd -mdF-24U73r)AjgVi2`oAtyo}e(J3d=n>3omtEK_VIleAh{`04Jjzz5x^T>E*&niuECBHS7r0~gB0<?e -t`WJ(@qY~U!1{QBwaJTES5?rS*t~E*;J#KIAL4xp;z-0#}V((0X5M}{n)OFp8;+^+JcO3s-oE$&7{27 -7?uU|npvBY`PbS3)yI^<qrI3NDG)bcB5$Zx=vB6sR-QQwH!uqHPMG5UK7#yS8XKdn^}oMMIanxf|V2e -If=0=@zn*Y;Nt2)gJ>)XOUh#(#bc2#6b8uOU|I5?}@lnBz31wUtN$;F#h|R1i^3?l;vtqk1vMPt)beo -LZn+E*1^kI^{va?lv{NU5XEG;m7k-ckoEF$%(O`!7riANn}%%zCgFU_qHQBGnZlpa#GNv-7R{Tc1YWn -)_0VDsVOZ`TP#J&n4Y#b-M|s}0XqlILG%>w%^^xP7_WcMXyr5dGdmN!4yqIr@SM;KC3;z|X>T4an??7 -C*F+x;Q<1gWjNG9{uH6z2Xpu;trFdtUt~?PBG{dVmj~>9Rz`;5$j;pfkkDJwT@xCZ43@#lr%sh>ru}? -wnoL&(c`n(iNT-KUhH%(>X_`Jq?kO<|L*039JxIpoiMHSuZsHk24R|ObZ20ei{bLP!%yagUl*@D5&-D -KUwbvc30XyzIfpD8ZpiYOE?UhxwLVV=Y@EfjzgP;ioLkoT8Xb1zmh%+RfyUA2s^1+XnmU+fVpSU`v-B -J`C}(Ttp0;_oziUsO9Phz%(X&9%WK#bq?XGnes%Y20ja@w%4od)W$#ybkqhPA77~NSuitJ9Y`UpMqHE -UBZt{51d8$ZMp2%C(-x#2g@zwbds}jhI*!~7uAkdlFeG@K(scxy25^4U8xyWR8^$8Hlo^x7W?8l@5(= -gh8W)>b&G3fIDaz~$DnwQi5%n1haeGxAd3$rJ(t;=!YUKPi{4N#Y3yVVSq5-q$HEkWh9*%0*L{AoE0- -cPTh7+atpth~XmWn2wfvd4cn@{ScUTO1UhP5mPzQ)tNv_&;KgMxYRk}(c=+&NtqCX5S14V{2Aj4`@Fc -4Ft0<%R0$`HdOR*cE0g$;e<MJQfiIvXl@WLdp-Scx-Pe7{9q($t{z5=-XW{WB^@P@JrO?A8e@5Q>@SL -;2+{u*%D+kddk@6cxn6Ls{7$BaCEuT$U4)Sc2gMHAP~pQZ-VfLMb?Bc(R`*F2zQM6%e;F8xlu%okTcS -0E%Wn64X9pFoPC3A@QC?Pm+K(7^eFLs|EdtVl;`Y$4kVRG{%?&HmXyi*e_#BTdRH#Qb|eGh2JE;1RNu -PE9i{2aJam-EGacssT33^e&P_oK4!QvublKrM!k1jX12~UW-a@hG-5Kz5%x#R3dt<Ca03F`q{s};2-L -=^H#0cI268oS=ILP25ukY8u)r|pk_7x<18Jq0>5;bq2DO(B3}Ax<Lc-H=-#~Q34&&KDU@!bjkvO+e3d -zakc3qi65?d{1HUrwAO66sW0o_2jl7sX#Xci~DKlrRb*(DDzusSAXUIaZtoFx~R6G{x7sT@;82a=&SG -v*6Ua!Y=S8it?d5WL1*u3f)6{^!^euzI$7k~SbG{$gTwLXv8)+sAiOIR8zghDEB3r^c4?Gwx5zr4!7} -O^4}Xd(VnRl?RR4&1e;_I7$_A6-*XZ#h$BYFx$C36I%M-$nAfQBpVynujz%S=y9=2#-(mca3av_+V#! -xQuNR<v5a(L_9H?RQ(-avCSV!;_4wyvQ!KjJ#_^MS=$Jg<5dIf*((PIN2_1Efxa+L5EcwOU^H1eU<Mr -#i)5P&V&!xuezHYVZmtD(Wz{SSv6T8`X{i3e6Zs{$#W{z0CU}=7d+~)*JF&MNd_Q>wr7K6UDjKU#b%A -YqCgdHi(NW{-jcFxmQ6w4e_)@MqfXX<7?V27S9uqs<60l}W3#giIaLa6qH+RN}Cqb})$LV=k#VG_UY# -Fyw9i|&9J&G=6;Dgra}Apk}KCmU{)5n-1Nx5<<U$(-k8L`G!8Z4#W&nYu~BlQq+K$>corZ1-e*{$$ou -5}Fm6{5yP{PlbC72BCn@U>eIPL&%mQ!v~)2fDcwh{9aUL(J5K4HF;&m_4Ou*f-N1?1x2mp0_oV0AbTM -tb_tfj4yJc0mY{)pwn#`G!}rZ~S<~hRg##5)%Q9+P6rzH*3+|sFi8dINqU$Ym)95Soo<0<q5|-fHQxz -d1S68%{ldk(sb#-O66UqHRUG(e+VBTi1cf|%bm(bP_5+jt)RYx&a@^DGOv9_~#f{G;>V&hFG)OH<grG -grF1;?+UM@wptn~NQ*4nI>%AQ$a%7^II$ep(f?YFMnB4mzU;S)&Y6jU{zDY5Yp-_q5)hktK_JX|~b`c -1cUJUXAg-*#QzA0luq2u?)C@sbg!AVUa4V1nsV~d^bsiJLSNT2Lk{nFbiZSR$`EAMM`MJR<0%<_3Dt$ -!HGsBAg&#mR)`((?WX7#Yq?@!HS@@xNv0BVeOogA)nvD!C~*$`W0g8*Y9x{vwy+E(YbgyiwqemwRUeZ -CxP`BGQItX4@&uU_kdymZ(+(&|+L*MnKeQ`^4=?g-ZinjNKCQ@en8j&4Ppjq@M6O?-MIU#M=S<i5N$3 -)wiF%uo3>WUaj2teoU@soqxd`Fxw?KJ{=DXI&0B6L-IW3_R_sR9`WWJ5H>L9t-Nf+d#+hFd)JbD-o%( --}5H9M$tE(R(2gQ-M%GLmn68CYA9Ry+(@QSawkwy^KTiPuv?c4!*hIo&iGwwz-^U)XIU&t6HKL*mLsT -srr>JDWXx<xL>UluBKh!r2_BvGKV}4yT#f!uwyPA+&9qt!Vqb9vrrRG&ebN&?5c0sZgLls0pP4SG_Vc -L3CS4(Qi=gye&D|dsRwPfnl%ra<OVfiMFJDusqIN+nJ!yl1nmkW*aMNMl3(!s7`oE&43&1hmnjlUod& -o+-%nWh;p#5GAHJyE)a1$@W(6KdEtLXe;Ms>D>!e18H;lVMWgH!sXEOO+DW+265J<Qz9J4hw{!}Ot`2 -|?wyeavAmCwbb!y7rF)hdL%w()bTT2uv@zb#m2@C2diX5{KrfFxU8%g&)%=Lp>(Bi_;76ViKz#G_4?4 -9i15{tHRcris)l=jfiZd<hIi5a01&YG^o$}oxyFS}>E0()#XBeBWkU)RBf7PF!85nps-F4PUXqi6-$% -T=a}sP1yTOf#w*9oakdP}wcKZby>DGdIu{_R}JfHfgclih4P-%|73VC|Bl8^Q6Or=vC7q3xVrH$vaE! -Iy7~)kK{TNI-X7II*EbW&Pl{?g;;i&$Gh6K0Ni2@P%Ags7i4Tho0w2op%V<uQImwneW&okH-fMO6tGD -69^;_a@}^gW^b~$4qC*d6Bq`KECQ{JgQ760_6*fsR{~HZj*6|%v1)M9vabU|vGA~p?t#XQiDy{hAu54 -K=ZHjjydbNMEkJd1R`{+2j73_WK5m(8uQPH!`+%_Oe{7&LUdR41)X(C|;2OEppj_R0G!u`Z+GOO1c4T -4LeTHJCB$<DL|UjUc|$9oq4p^n3LySnzJsFqeAh8Dn#R854(nEM96IdM^Nl*wlu*57!i*Z7D(ZR+<pd -c&Ag)uV$g;j#!EpLXUj-H6LVLA(an#)9ATf#VgQ^TToUM9*k`Lt^xCm^U6oXYa~wgj??vmb)6yXd(4O -<%8vz6%>-cHPIPoji7&Mb;@Vc3`Q5^JL5LaCDJN6>zgeNE$xM#Y%81%t}f=dndD&#(T&2ElE+ezIo)m -9ubHFoFhziL53}gW$jH#fTadR>`WfQ_4c%|1Gx^3bvb*c5EYlhIwaH-AuH||m*SN6Y7ny!P-4b3r=Dz -(qC`%;?J)tqTi-leBKt(~EKAzC`l;vI>_8TB-IGJX0y9M=9YW>+N28I7)u$G@<dwC_CmSP)c1VYP9F5 -nEC_19Q>I(`UWpsbf=q@8Vh8eZ;y5>EV2f?5AWJU`>hl=!F1B?d4TV0D6L&c>b$$hW;|6eV`-vyd@G> -5s|`&t=(dt74D4Ct!g4zwhLVs#p&8`b%@27LBDR#}pz?q<l8FM##gG9y7$GS0hsdG@)d`m|v@9z`z>0 -w~DO`8U)}qCzTdX+o!HBjAh}(!us;cP03h}wSu31b{kfxB*d@Es1EO}VUHq`hA6<z=T5}RT%5B4S9Es -RNwlh(0yX;M^dE@bDAqF!Pauo!6GYmklj+z;lZkQWgbs-fGD_jr{g#$p&WC>GKnoy3IA}oKO{JS?IG8 -YoBDe$GjRI2OEj=e$VW8@jH&AuI-4Ru<O89>aeY8+DWz`{Zwr=nUMm=kHg8MbMeNYeQN$5q}bX~qGmf --ke>mfhY8UV`o!<bSf`k6+4J{ImX85*V)FY*rIKbWM!P_oRK!3CjpfyYsx7~9FvoXj5?;5s>JQ+u_4X -wb5imA<i(`<&Q~Rn*ti74A>%d48IywGW3>SNI3aGB$Jq8v9{1eK5&Lh)tyr7zjF2ggeADvy%cuCPkd6 -(*-&1MWXVI#gh5QkADvgm}oJHme#Nnu+v*!?Hng_Kt=`BXza)qBvS#Q;50P1C@0>zRpA}Xw6aD-;xM+ -H?x-+k@#p{ePq?*KPbSxdHEFN6NCN|xwa-Fs#{!Yt195mmp818jx8|u8BPwPdC>&G?V^LqchCGkIIuh -tJi<0OL)Oei!%g-i=?*KSN@g~AUmpSi7+{t<<-tP$xuMZY($w*t~ZW%mGHJ2xfdb?%@NfS#^6RQw*H@ -uUFo5q9X92;kn8ri*h645DA3Ep9_m$J7g<tE+LTj<NoOpYIVJ7mjKsfS#RrvZ#D38QX}QUY!PDe8mz4 -L&Li9y-pe90#Mnv+;ToZhh#N+Ho;x8Co)@*M<-aE3WZ&EHI6`^LDl=KFrifw-l+G5Aq(}OhjU?yzx%P -mO^_U4l7_uMbq>DIKsJ%EBSMRarH^Onr&^a9hlZUi`U%fBa=lkeSGe05IO9@%@$50bDuaWDc+(B2V>+ -E2rUG1gVLeR4%`2jgtpAg2JbA?7#G!~V};0m+C(-?Gl$sv%Lvhp<vJanmDIfqd)&&9RAZo*?5#{vOh8 -fj$3?x5Fmzikit5q2Y0E$1%2?&i2KyM1;Of+vVKZX97<4hVNZG^d5B5ybDusC|3ms3%q~qvGFr~(uiX -ITnWUsXeb092Vtpq1suLEd^i-Gs*WtTT~URQ})<q_!IERDmb_%*$p=_-x03V1=#-oQ4qD@)u>aDED~z -vqs#0NvF-`}Noonyhr_-bg?V#9i|qm}s|Jl^+6YA`hao60;?v1t#Et&xEU+#;yhmgqa1xyWHr@v_Y<} -hX*Y)c_3`4=#;HvR6ZJ#VD4}T8Q4#!#z1jy(Jjg{$A!r-opJpM$&CT(+^TA3FZn9zivRlPQysW!vZ|U -}%-#bRdmDTB-r1SKi)AgP^(gOzhc_HVMijJe$yEP$+hx&<nVWHaC=wiwXS0CUTR?5B`1J&C!7m5!1mj -fTtj&0Llv>H>B!Ga;PFN0V@UXLi7iz<BCJbI`HL)9k@kxnV#~>BjNhamO>k`Ij8^8fG(%1t!B;=z!(H -ni8UA>sY#^kfttq7!9t#Ff%8!8z#Dq0xWMbI{UoS6HeEOjHdG0J_MxY-naw#$TnvEfq9JThiUz$LiZr -@6%=sOxvxAR$ML$gprVQT!rOR%;hncar3E`=_>4cNa!gCyKt8{u0K=384RP;#iT+?++#9gctSGADU7P -kpJ;sGFf*@9$Lt*aG=&Pe)9=om;yoLD!Yq!C55A82h4juB$;(ldn1i!$*?p@^IYwL$n(L8mL~AvkPKa -s@(d40li%d%*ph)VNGRPX245YyU15&L=`QwwF8xf0Ow0P;|NfuI$QBz7W(VZ36^*z<6vPNuTUNIn1(n -*#=$3L^^SVj22P>cyEvqvdCf>;j4^5FW_vDRj1Nu^i_6&;UM<`8yr<J;Fo>H9jv6}MkN)qK-*m^mn7D -w!f!EMI<#54lR#?js~JZ5nmn8^l5$`rh?W_3s4LN)83>KaBfSV<5HFEy#sVu^#m0Y}h7H|A*xp-VgRl -TgmsYtL-D)O|);UH2Vvb%iq(E{}pUXFME)mr3;;IXMTUOu-dwDu(|)3ybWB_%ZS1(H)ICI<GLXu%aNC -{++0q#U>-UF1Y-Nz~lKT)LpqGjR&{L9I?8Yr!Df-Y{b|9e9j#lt+-q{N<~*Zoh-w~siwNA9};WTfq#D -HF4=o_W!#amQ1nEe*XV>DX)TU${O{Y$A+!(IGL0zL9pv^y&VpHJ0#@fl9!3f|-DPo$uMavf_r+-lBZg -Cb<W?R^Wv6wY1Bo}ZEnQW@*&mdZS=edtg9zJoYL_E#?oo#pSld^5JwazR>;3P&kqa}uAqX3vQ3p=!O$ -B3>g?cALVB|Y(E3o@a%Z|oJ+A6-9dJw%7m^oA|mr=7r<L(+|U_tw3iarv>VjXp0Xsg5-)XH`r9w$zXu -hTD6Nk6nABTCdRyJ)k6x>oeNYM9<sOPG!53uAS^L#U#Q;{S@#PmTZZpRwKEXTGAP4VY}9Q7((0D2N<P -P{_KiNO2z!rP{L9&vCz1RorwLe0}xZ%kvj6U%Y;9&s^t>a`YrAyofChpDu0l(&k+9{O^$ECbM?Qh$T; -e@{q`rld*uU%scZHo;&D?gG1^k?K-9z#jbyuw%x>3KY~YHw-VUpp(S@uIrRGL=3E)_#S0lH!$u<`L4p -s_z%>7H34?RyJxrZu*Qo%tIu-*&&MnVV-eop;MK%7gAj~TKRnI=^8vM7YZi{_K5#b13UMSC-eJDPW$a -5a300xf*wp6rx=v%)?=Tid5+>Ufkd2kk5<^~E~F1(A#r3!ETglAFI#wo71YeAbgdb6>yj``Le?<ZJm{ -N#zwI%4mfRbY<D5G|4i%{ghu8qixy;NuQfW)0-g()))b)W!?jb3*;ht~|caS!$STqgNh)M9tVRgJ(P5 -ru`xnAGR=OaL=9{9r4lt##dC1j*j#q-d$vXJMT~Q5BJLbcM9A~o3*!pmU<;m4W;Bh8g@Rx+dN@HvW2} -7SGCmz56bp*;><!-P7E0@gtkZp%0fdLnmk=VCXg~NbqO|(v8hkt5zXvAtK${aXWShk@V5c@#00b31KK -u;sDcCJpglh-V;Rp;qGOa?dFzu6%mE{Li%wtO5hdh7RJhp{Z3g3Lb;?$D0Ih~@0XIBqpa+9yQ5BmlRM -E+Epu0wv$Hl5bpQK=9>r$41#T7h)lv_vH9rer|Rw)JzZ&Ky-GB4w_F;llypjh_$3#$nX6NTD{ejClqQ -eX%eev`4y744!c1M(_JEdo&3ne`q^lg5Y~(7qQNoeQHpU~&n?CO|HAtq<_zkt>rp9(pIxe;jjf5V^Mw -VK*{_D^axx&jYDW6`sQHp;Zn<68_o)ZGO&k`dQ#S-+;B7=kZDKm%?aR`8SA*_GVkOoiN|wuc6a3eZjD -%f=WSR?9iusLth4wz7*Y}EomlZ@muSVe*54l)^2ah#agB}84aaiZ0Ch+VW>OCJ(I@imuMG*HIc<{PS3 -wF-mgWq&El<bKq1ZUV`*(J%US~8rOo4oQFDBJ40SBTF=sWJr(<?~7Sp%f{Z=fP8eQMCf)b3af|Tc+IY -$Lk52!kMq5_{vP#>$GR_^Z8h0^W<FAp5^@_^R~Yw_T|-EcO~b3fEJ4C_F(``};M_~Q&Xmf;)^eKR<AS -L_*0nJsOm<=zL$TN_D=FBz|JuTfT-hmJA6F5DDD+^PctLGWxr_RJ(OZ-X%ozMS6&@zy~cj4_X@I#~Zn -7(yQm7*<(C}WQ?re;^X4SiBA3zTKgvH!GO`<L2QJYY1IM#3jR>ggA?=dm@_?T88<3yq|JaO~-Cpr= -(%&ebayt~9azP3p<1aU`1n7f7Ij-2@|Xp<I$AnqxR_aV&(XPV=7yo2q_S+5V~@uoE&8f$#I6E0gGCYj -R)4|@J;JRYmj8-Tb)nRa-OQ99PaRT6Fo#Kt%o>_D|gigWv?g4DsHU^@KW+&Uq{q7)$9(Q(?;1^R=Xz& -u*|&PVK)+cXCoc?tG8CXl8|%}Y~4rYRmtV~D?H>h+8@r&4YiR-YQ$RHmu&dvnPbkEOwPr0mh)IW}TpD -)DWPKd%TQLZ?`or>(PHlBu5|^5Ov5$YGO=$G~$F2T3xd@n-B`M($epbVfeTk{|+ST6$+U65xFfaHIlv -IK@$t+BwRR_{%xZ@<#%--~QxonX*Ia&S<28^V0Fs!~M5$`K881Ew|H&u`_j&lvbDAoPL}i{U1<E0|XQ -R000O897^_9W+k|TWFG(k1e*W=82|tPaA|NaUv_0~WN&gWa%p2|FLYsIY-KKRdF?%GliS9T-}NhSbgm -3a5NlVClXx#kMUj-)x!6ugI;T>5TUaa!?!p2I1^~6%OC`Vk`Z2Gb8GziioyrHHN-Gl6Gu_kE)6?D4Gh -BD=CRvq3xopb5ull6k?AmUyud-xaSIsI*x@y;y%j(e@YYcb0dV8&b(?<zBZ~yw|SH+7jU%mM6ufF+1M -z3Dh%Yi?AHB?=B)l~fLPj#=}e^YL%)!Y3}mwdY$>ULW;{OwKkw|%u;sxk-cf3^UXJ(@paau%ABtM)^d -R9)A0y(%f1w%zGs{9LT-t{)2M+mP`K{HURK_41vD#?Qr7+cvteD}gv&N?(c<^rWk=_CuAaH(j;bYc?& -)roP_l8sAmjP%q2oIllb58gAN^0{ecyy8{Mkz(4ZWuj>!>RzYm4vfp==hWMJlZmO-Od{?ek&XD|>zh? -Tw%Nk&NV4CL3u4{*O**3aD-2>&@6_1jF>8oqRph4d7S6w*VHHMxy_$A~2-rntW14H$})P4(}Gx|#akL -tCQm@^t!uD1j_TiZIz7d|hzAoE|a*!1@OANT!GukV=4_Vu^#t8U%2xBmOrrt3(Y|NeE=?;9nsAaaj>Y -i7qI`U_Mv`^}bnFq_R@R_l5TbE!<0RFK@(!%e+~@Be&@I2Mlx@_BdNpBYp`JwT6BlI(L3D(2Nimb7Y0 -%+HdyH<f~G*U5liu(^Z>u39DKz;D~#A^{>wpt^@|$v5p5kZMfJl3F|l7d5Zp4VtS8SU82@wq6Z4Nm_4 -*ph+$QW-M>Yu3Unc_o6dUp-V0=vAxSnY`NSI?WUxO)7*hF8m16$>TRKrYfW+vRD?YPz<RUaD00RLSi_ -fXtHGyGgX&3A__O#O>L3T*w_7t@DAz-|h3dcngx%dG`yMz7t*yH9mVm0&HONldS5<P>RqM0Ma<>D{*B -?L^eYl)Q=|kiV%ABMSQGEI8`FDRU;O|RIYhSLbf(SNTLOmzh^s?@0_z}(-tl<WvY}IZ*g}-$VYr<X9q -J(c(?QNel)pfbNO8^pBRyHL0$>R<*Y}GvmYN79v#JAnvVWQSzX`r?QX{wZZzpR=D*ab2V8o0i`0g=0E -2ap-i?$vsjOLXZ;mYmL=xzILEx$CRKU`9p=WUsb73m6h%U^F#&*|q!aiiwbzeqT1d>{)>$JB~m%39S= -gq)o}J>cg%C+>r*kz$yr+3KNH3l<&*Bp_ly*mh%ME@Z}}8dwB_M07Q3N_mxwZXUJ{cG%)XJHa>-^xZF -48P^~7r+~2gf#Z6U$(uffG21-FAs`AcPD6*^6)VghlsistU&{T}9k)e2rldvR_S0jszX!k>3ucXpFNG -(mrF%(>QRSmaQwM{BmmF^DG-2kWJ68g=4a|Im-@~)b4`_5~<!+DwRx@y_%SMdJw($aT%>CKN5rx&!qy -Nd)Z@1Bz2x(XQQ;|PalTToat+d5EHP$i%Z&B1dv>7b!bV$d22desluN2tl@Kqr9oZrTpTwcLUlsuUe{ -pIq1Pq3=Kp{ZSQIjLQbZWDDXurOsI{i=&u8ue5Y<MX&SB5H50<z!LiaBwR6ygo|eG!qh#iCtPugNo0# -Wpk=Cego*Nird7?uRDaJFA}qAntkaw_9g_{&h%D0~y|X2l!h+A5=KC}pr8aE(2G+F(*S5&y|I(D<f`K -N+P@#p9!rTA~=A$|V3{|#6SuD?znY4muNe(a?RF<7N7PFc4TGgX-$ktkk6oAf}8(b`%KOC1{3#M?nQ~ -1pKCIXdt%VuF8naLjQ4{uLRTGQTx8)C1*Hl!pDxGLNpVk+7|rcvM!2n^^?kOVEJ<fADE#WtR#Tr)G$2 -%pHjnvnrITko4@W_kTy`L;kq#LXp2z(R`>qO0N<lDn)#7)Zb>fOk``R!yZ4vvKF3Zk105sHJ;HSYb}o -V72uUwFXpk(Xx`P9lPj|^8n4D0?`eKva{qbt_Q))lO}q);`uk%-b`ZbCq`$n8~5d26nyRbGBGL+Ix?1 -s^20-jC_fxe1j9}dL9vv35%8LVGtdw?RLL!_`<l&YG#N)6sGAy|6)0r<py0JOwS;Zk;<hVyX9+4|pok -QzCJEnxchZ4D2l9(>J7v+wXPM-{<s~(Cd1<i~;8s;1&cIz90N07e^A*0eOm^VOX*i<*+qth}k%1J<(_ -Jps;M29;U5=*JoLhh*Xmxi7{%5nECr^Kq%s9F+v!M!7(ZjymQiKD1Sd#u)$3ci3W9KoTiXKv{nIbbkz -feejyX)E=sDV360s>eXboemrlc4Gk)c`uAQ9hwybp|6hz$-L@aZDWLt{b>R-f#p85igj^F$&jB^`Qnb -ERi(&E;%o5DvTy7<|vVZPr7Q1QG{6q8hfIdWIhsfdJQVi3It3ojFM28=DO_IIVGRMUvJF3F-wd;v)G` -*>9E^@R)!Cv9T<V4ua?+Kd>Vjwf<g!P5J6Em6m$mjvR*1@5(ozOvm|E)e3flgg5JRKGPqPfix)5qsSO -m*O|PFP=#Dq+Dkl_RV;gvMi5>4DHetrYMnXeNMK^&|Ie@0FT?u3HUbnJ_<Yf;-tD@f&Doov2u-kJTBD -EBlAd==nEXw$p<-XT8^$RsQ(Cq?alE13S0sd80V?-b+dt+Xa@;oC7&o2Mj!Ei1Z8&|!AVZadA(zmxiM -m9f2Ha|u-KSnk`Mm9f2Ha|u-KSnk`Mm9f2Hj|$^vdJ!&_J`R*y?CT1seTQ9)P?nZ3vjvXp(t$50lBP! -0ezN)26QF|!f~~9+JpAAGM~3c!A?YFvd~aG1PDuk1ETCZ1e3N^7T8vz7T8un%WAzp3zJU(l<kyk)J~B -uWfqtjrW{wM%rhCrDmx4INPTA=o@``-1iSc*wV)O{6VJ)ylH|pLX<f-8>xwe~CNN^1`EWdBAUy8>OGT -bV75Ra>N<U{&{X7+S$YN^uxC%m@-Ur82%v?vj#}wdkm5geONdpCpkgl^wLeVUuDhukKUr0DlfkhzLoz -A(x9unpE=DKIHm<{8c^^GjDZfI^bjRZjxlaz>jZ9KEwC=v-^9F<(_jm3Tomi)U^70e~P@jG&(8@vXU8 -<8vJ;L+pQ@VToXB4En?&Rs1L0aMhN&k+zdU~@-TNFZ$r=UP_;(jlF?JkXyWQnDa&)-SS1*nzn;3vr`m -Cc%Y8mrDaL0xoQ`T&RMGm>M|eTU2BXp!gnZabm6tfH<0o+8&6<RAaN`RsjSv*XVJb;41YM`U9!sMgV& -;RIXd$s7ayX$+^%Q3odljcc&fE+Qjv2I1nGOrs`ft?NSCIduA@-Ob0;D6mkWf^M7*zUV*L)8&Ez3?`x -2hZ&R24c~C?2Hr1FoC{JO?jg73L0e9WiD{H(hoBqDG+obh!a)jX`t%AUA@oa)|!-aQWC=5Icw>eA@19 -b7WWzRUXky{vd<x1HFMuvi2j{Gab!48iPMZ>V8hvQKvvhANP@Fim*?%*DdeW_MC1d1MA7)bD<B33y5{ -Q_ZzNZtqZr0Om2oIF>}hawQ!_kxL<Mny9dZ^3HFr8(z_Q?CBcCgmabUr2Dr63D%&YKnPgjTYk|#|pKy -<oZJv8SI?@vqhtOqzpK*|M;dF2Hpn*SK{e66h*T3UA@^gH3%a&GrAY4ttgo1Ze@3GlE_od^ng<tM;?u -tP<4(0EGdrB6F28Z*aC1vSF&YlnFAhIphF2zNk47=uk=o!4mJoXwB37R-e4d?o4iPxGzI0P;Mz~}<XN -ox2yC!CCQp-7f0)<?AK?a?5lc`#!!#=>z_jl=%v;!+pes5VF~KloA%K%Oa9s_Bv0K!jtBuMt%p;&rvn -;V$4MdR5b($i}L`S7)D0`6FSZw!Alg<MMJ0_Q$tyK9*u8CY=2Q2YUy>m8L{!?^amCYU7%)Hfh8FGj#U -o51pTCW{wXFeTGqNzO(CN3dzVp_N`7wQaA5Zj6l5wA79eW#At%&ckR973`*o9rQAfNEo5-UR~_C==Ov -w=oOvwqhZEot((ZiWd%*7<xLH+r`UK6dHl6JfeN-_ZzuRsZ<fYUMfSC;k_jdAH{3K;KhEo!fLFpET*R -}b<!%f-|QzdxY8@|UfZs3ELYI1Jr@YPTIrEA&odQpmE=-1SmnNKg|lM7Y~(_1M;mr~yawhwlrQvNH== -OfBObSd^W;eq8`rrz!uLU|a@`(?79SAZRL%gD{?LPpiTyk_ia@k0>4J}$?B7^@w~JuWZ+58+`2=dlsW -7(uC=<&rK9s_9PWcn!PngI>>#(XnZk_0;hr+MGJuAeeBAamVMm?@KQ}o<7dgah>b+qGDOYLmFO{Qu40 -o#LMkM9>AmNxe>L19_r9-s%anJws%S;w}*k-5S@)t1YF)LJLjKc4<-fugCXL3r7b;^$!Cnlq_j>DmqL -sThIIbMVf{io7GtZUtr7jU5V*UM)UiTW}`JbvneuFzT?!eK6jCPh9qo!XV^e;d_-{JGE15yZI2LT=PL -lAAn8gLSsPWK{(C6u{@RSVtlSsAZ_N8w{=WYU$$!!DAUO77tMbcq*`W_Q~^HD)FA^u4FMn}1zMjZsZ= -NP;D`ZeoMp$D)@`%G|Bbrw(Af78r!Yu8d|CB1rY?Gk_c9UD4x5e>wKli?z~~*7dHCa;K^QUqr||wL#} -1_5K*`qupMS5CwpF<|Inu8B+aAUNlaTm~KL;rQJ5j>#h{_-{DI`H@_E<t#HSkdZj^|N&rOIX$#|>=4x -s1A*FUC)J;TawHaCklsq7PX_X{z9V7Ex`v(o>_VHV-$QV(lp4aLXwRRa-t<th7+B{?DSSB-bCZ=seH$ -hb)|$IosOtxs#huSzO3-^C=6ZF{i&-Oh$6`zZ)+!3<)=eQthD$!?SB|NAq3m3hU+_1m`dwWa^EcBsgr -vU^ECLRF=BwjSdGeNl6n5>j6XR<?_ZkNq`78ASx6RckPV!>U$s=6@)%Zf_r6ha7bo64OFTeMmlK_Tay -i=<jS};-xQ#GY=P3Mw*zRNFv~L3D-OS-I~K@TU5@cgb({eAmJVzKly&b1*Z3Nq#W(F>W#tvVJ4?P=Cw -J|h0<L|F>mzcJ(yx~#re9y#%>NPfWn3ma8^SWJx2v+r;~No~!bj;!KJugIiX$G5;sl67ObSZE7@rw-N -7q)G`--^t_Ho@97ph?&>pb~2zgL>s>x~B;M0jXQ_)wt;KR!oJT_lf_)J2v&jnm{!0vpvq@uwxl9UGix -)poyuZ$lL}7H(4WmT^AOZ_7`+u&K3-{)W5DNLgXxQj}B^z~JM_8Xqf3XR~?O<doKR;o=+QhJ4k6iXHp -RaM{>L<T*++kn2%Ed;bpGU6DVcL3e^2?plXRVq7hRu~K~2v;9_Ya5B2&?*q&$m(oR1Y|Bkm6#w`yvoV -e8m-ad%sv9__%(c}lK<X`@v<0F@@ii=yj**eM`ZRYw&%NbUy|zKHku_~w-5T|qI=VM0*XR#B8zJ+B(1 -y-Fhrh#N_8^{~UMyVw&v^>LCV`6e{%D&7GxrLu*_ogjgZ?7vO_0vVG1aAG>Fj^Ep7e4U%?WA$3w9o?< -#OcK0dE5skfXK<e&7~?{Y0@Hv2(%b{J^vmnZ&Uw6kdmqOo1em%~l6TW;330nGA(_DfHT$GG#)=a;}h< -TNn{K$tuy|3F<R*e_R%1%x05;LzSIramQp+N*7T>=eGU*0B4XE3J#P`I?xSwLP1!Dki`@(7Bcxtx6p- -vv>AZqq9isWJkmnaovs-f%jMAP0rz|+e;+ECRh;)8nZ|Ug`oIX|V_ONW5#}s!^wQmobdzK1XAx#PADQ -0GB9^)CRhTW9jc_+O8m@S2rmAFLrsjRP6Rp$ze<+JoJNILf$eA>3Qg073%FBE7S!EZJgG%lPEhuDd2O -CB&%#|90K8j0eRuwsQ%3QG?o6h|4E(PE$RhjZ|+_G}OiYMTrE4SAXV?4G~8|=B7y;W~Nb$lz;EIsFp* -lb%u{Zlr4={>gM(q~)1R0G8+Z>bAP?!7ST388X=!k7n94!u*CApp52y6aBAu^j}`S1JUCa=E=rxxI)% -yRJV}tHLrWYJr|89OxfvG^~y#U*qPhVRPmT+W*zN)MdFYi=@9^ghT@kh2HrdBU+j0%FMwL$3;IFHVsy -cxJSAR<MQS{A)k)yPVL$$u7QI#i#tdW2M)PmM$o^MH<hicJ9_a_V~2^6RT<-qvSoagI<Mlcq;hgCyBr -61)MJgaE)Ite6QCSJy3@rnNWXmo&ICB9en*b54aK7FLjA_sz6=dP$Hvv^m18L|{61W5&ZW>Qzm@_~sH -Rn+ig%9a!Hcljk-(}Pz;SlCP@g1tS2QfrecKJV=;Kw-Mit?$Kh2%5fR17zKGlb1)%S)5x8BnvTyX;Ky -Vp;rZev+;eu^<1jGL%lX#*uRR1PyF9Q(0_4WFYHH|gO_B@^L;1Ft$3QK@6f^dc^^k;U<3a&dI0N9uCv -*N)~g$)LQv&9T`?+L+y1a~x5sEF1O`aYj8qDO81Px`fkkT%`2cEXWhCn|^2+1h7d0GmC00kqsYAiXK< -wg}W>Wr!ywO&hT=bC)hlXtEz_IJ-M+I%r9K0*k;-4+n{0xPsSA=9zs#|&#e8L(T*KQsp+M<sKiMU0kA -`c?`zgUs>6NDVRXJLXDAySxjjYAOtX{wB&wa%Ae%FBXiIaMw<)c<plVPToGSReD!1xxm0H~kMRu8<yP -NVZ>2JDv`)+jm7xRSutzHTTQrCy}(0K&Qx#T$o*_x3axpqIXZ*oQO6}D3$rm&SUsyXIO*4vx9sYDy71 -_X-V_!+L6O(tdxU*b_zZopBTWz)2`yvgiM0z)4WY``Ysr26SA(Ce$>J`@QQ)MI}CAGzBx(lRH}X71Oe -BRZj6)>XY;R~;VBO9UxT!(N8*7303dP4iP)I+WOm){z0W8*|n1akKmf^gJ}gRY2Bpm=emH7($-JZPTl -+D&Iu~RLxZ22(A^<HVGP^d$!7hEFNv=TkLkB2yLB%Q(Zszobr*SgH{Uk!}x~7BVr<oLH5jqex)}&?Gj -;b1E4$e;&&rb(hA)yMMnqC`7}J@qxYHpn{V-n96gR6Nj4Rn^V#COwhQ1k<kts5ba0_qnoL>)!@uR??U -@y3r_kyQwA;tw;>T=EW#cn1%jHdVMn7wF&WX&tiLO@e(cEVA(*FJr8SZv`@szvKVO}aXNaULD$0knGF -d>O}NJ<io$3{|%$71j{FwqaC79!hsD!NR?(s>%Wp^Q)F+w^P~iGO%@OdYu+99KIE6RtET3hz^<CK_(X -Mh$!8dW^bYn}qH`i~M#T^aR^8XMAG_kM2RZ!r|tBd7yHqPMb$-TfvIf#hy*!J<K9m*O{;5*VaXAu#}! -hCG^6PW*H}Bi7Wyk>&jbk6E4pkXR9chq~TnkQSgp0tuePEDMSQE&1D4s*{mSU>0Ur1`rzHd;2l5<^W$ -_FkAX(a7g2A*<x<^DQx`syjW`N|ax_9p6}U^JRnRJ%*M?{oJTP%OEQXA#&BGlO_o5!rh<8DS$H_2x@H -kGo^^W1B3!lkG<}$YCtZyDS{#<%TNxXh`Jg<3*WJ#)!IT;biZtus=QX|Qc5G3zF@lCtY3C}2^MVeeEB -O?n}Hzw9k5z-HUm&4GBCT2Pn6Ko(l9F>@W-y)u+DTgIYLP5@rFw1I;AC)&we}3|QOY>5O`L%WFS&~Pc -jHZ3b*tw^IBPL46t8Z#8i&}JM6LfO%H=%H4pGDnX2bEf-&6}r|s^H9(0eWJA9L9NJN@<)smT+LCo3ha -jOmT0Bo2_WA_vm?A=ODD+^FdR6<LAA{eis6tqqAb%leDMzJxP1yE}_5O<l^^Z|M9$>Pm<r`Zini3!~u -`cI;Ps4$e<-Ln=F+pzydv}LJdV4337g7PYvij=-VpUR(vnA{!K@H5W|j{j-$HaLTR8FWaA*};v8r!aq -j90>=+GJesK5RqUMfDPSAtw@E9$h=$dZ@f&E<*`4^I4V*P#qy9SOa(tHA9JLH&IJ(iPb*^%O(cp<0~{ -NqUG_z_z_TA5lNQ|!!s<v7l1koj*#M%6H1RbV~bxjHO!htBj0B51$CPQD=E&vXQ({+yX?)996Go2GQM -&BMozNq76%P7g>ji3I7bb{<O><GqMcPat)!VN<rTsp{R4=C<@?tR+#$Gq!cU4TpDvQ|!}I(VK~Z;S__ -CJKXVmyyV>&p;tzRRhBFk3!5pAA<W03H;yBqE)k4$4lge4_gDQ;4|_jb5g(%{@B+fz{Jd`}?k6-dW8O -?{S~*v^i1#GpUbdsx0sN0fch{6Kv&h?8;meeiL7^{|F<G+ijfI?lf>=$n+lp@##LG}PX?B5M)8o$?cv -m8NI3<|9647(YB$yijjNFSTu0)iVB-+rOxf0R6A<>D>sovUtyJkfZT&@Ez3iZpz@gRNN%GYR88aHGKS -(2HU#Ut)bq^^mKJfyO50}j=XygH_LIFb+T9o2nk@2K)m-MdZw;Gx5+5A7S)eQ4K$w6>8;rtnezs=$qE -W@vXd{X?K1X+kTM36I*JOU|~rxC=^8Uh(qCP@1qS)$)^y0Ek{#=5jp>0w8+*na`s!I6U!}b7+MVI3l` -_>7Wn~gHu9~f%a4&J`6UJ#%phf!ktBnFS<LI;!5Dqsuu@K&q&&Mkh&q^&<5lDd?55x6uHZ_{i8(d!jG -CNIvo<tEtK(4vMV3a3%qm}rmIdw@$iwik{Po{v;EY}CwFZfNr(*XBJDMj6%)@#(t>9*lVZCo_c(f?A3 -_j2cdQ?sz^$z9XzI3p^nqfTXBUSx=b;sF{8+SpoWmbe0XzL@gTOmtL9gR{@EpIXSe!}G9}nf_PG}n&W -+e$Gxe=mcdLd?&cJ}y1MjMXQpUC+^aRilt9{CzYwyY0h&SkirRGq9!C(`f=3_iyf#qCaaGt<K!AGmub -tYCARMoulL!#rM^rb&I01Vy*ntmcVtTbT<(a&yH;L}TK<*@V*a8=~JejZtHP6x7HDp4!FIMmvuWuGXw -GbVh?2b#=xlrtE#J>Qa;YAm%Ff#vN~rnS8LZaLqYCyNKH6ru`o0=uNpB(Tr0<?jnk-0m4Lce>~u>p9$ -@YkJTl`(aHp$5tDKPo1<TjP*2X%rPrq8RxrK=Xe7nfHw8lPOBKY-rnr=P=Ir=*X*(A$v(R+Uu;p1s*D -mMAX7=pgIR7Vz2@GTXuveisL{|0tnq6tvOg=v`8}n>wq|XdPI8Hdf2-V3acxQrh-;8d%?lE(4sQ9Mmv -gup>Ls9&5v-%e`ldE$1?wanP4%)VKj(ATBAX<ontjZU7qHuv3ySp^bK8{)(9!j^t%+8dB?Su)F8QA*_ -Wqdl|kQUpPw*$A=m9t`xpW2vk#Pq{LgR&6?A=H%RK@&`0d{O9ioZJ|4V8(WDB_ih>p=#w^^(^!%oQ{~ -h7_tFIAuXN*QgJk6I`I<;VR>}6#hrqOjpEwe1mkdhWHVTjc3)OcbjXePMP1N?j(&XZMztcgcyFzEbeI -4idDDRQR`H4&r(~1?sS_B)AypAT_~_oU5M5Z}Y|z3Tw-uBhow|Wde5v-IIX}=w55Q-97T0gGCFM@yOK -X@$l+mbe(LWb;Knf2lRD9x+0M=e82$X+YhF9bJk1H<YkmF0iPuVf}@}PBpoMKPf4U8+eBT8>9B&W>dB -cgIX@<)hO-FiZneo<_27onJ)p|P;*%Ii&ehPU1=(Kn~IIFX~?EsFOrjoNNOKi8puNV?wa+HOeHme@oE -bEg5CA6)5mwd=mLuO}+2UxeUlbSWPGnh1S(WUDQTq2Ac$=?fRLO@rT4zNc5I-`U*Tk;D5<=tdjCMmp@ -D&)y7Wm;9yd`sC~OeO>jQx2jIM=d;)NYvt94a<gmHO{sB6eI`Di(PHKRIlc{_wvXNOi_h$J1#_;ia5{ -=B@@7}mX0g00w=;dc#7uqDF&nzdB^2KP<?JopiC~)9l-D4T<!q|T??AS{U9amU*7G~68@leQYCDVeR$ -MMeU42<ClV>Lx{5$=^W2hY({x$2@cx6z#PTst`yDgh{;s@3U{%2o&{wzB^J;{FY#fjj1oRHbq<z4dZb -He>AyoB>j+q8Hr$cn_9q3!Ol=x3jO@mY5I`Dymq&wm-^P`qcS-1;v^dzQS~Et2m}Pfxjve?rUukJYLU -x(1j(dzO9v*%#Tbe&sVt@g0`es|KuMuhhMmNd6qrJ^Jwr>c=m9vR=2>`wD;iJIc0b7k(ae!Mpo~B|ha -lUhw{tv0K_WBDm{nP^0r`S+|EtZ*&wjIgdl?Rvvi;baxnia!|NG?B%ID7mE8ad!=*+UnM^GF(}mPSJ} -;+QkT>Ov&j7LiJ0aZm-^WlESts@w5t<&K0gT><;e2qC$o?}_at5;5t|TRzvyxtuh9AZvphMUt?CWVN% -~F9i-24UoS%ORpr2;RrwID##lLw67}RcYp9Wo1W%;S&2*-N)Z{JC=*)Js7XF@2Bwl1r)AC(pV4^T@31 -QY-O00;maO7>PdBh$bB0{{Rj4FCWl0001RX>c!Jc4cm4Z*nhkX=7+FbY*gFX>MU`Uvy|?ZDlTSd9_wi -Z`(Eye%G%c@?>wGA(9d$8E65c@fxFXT(sI&zz764p%Y=YWJnCw{`=jLk}ZmIwm#H|nCN)-@xJ@+=<KT -UK-BkRUObWfa4aiDZu44A$oi=Ave@n?Bz-yVrRVL?bNW#3%PLb<4mQ<ByhCGZY>nS>3x6xwdVDmmo|h -S4gd}ea^d>Lhymq<wJnvz@t!t9X>X1VQ>9ah@nMdGrb#*l-It8N8N?vODNd9@21(DzIAf)k77Ig{m@L -S13O+6htubyfHf}gM3hrgey@}+nrqoE|mGXlqU-Snx`6Tq&l<o^KZx+(chjr%x7Ssk`}GQy&7hJX-hP -WG@(${mT@fE>Bix%zGZ>oellDt~%buOUuI*@)Z2ZbA(rcva-CEaV9pKdK~^Jj$(d5}A@~x!b<%RgF#< -IBhjE3Ovdk$+Eo2RhErTptaoZCIh<6NT*dM19iXPVA7iDF5YxJ?kBwp%}y=8aeVKgH<5vf8I#}M>erc --_4J%<W_t3CH3_3%&JJTc^338w<k_JYxrJJrm>Pnbu^Kg6{7OcRgaB!5<1x(B_2T#WAGc|iE<UZ6ck| -mUy;-alIDg#{Gn$N87*0sLj7<eb{)FI9^SU|Z)Z5S|%3{|D@5b(Ux@Ln3_94`sxy9{!Ck$-O(rny2$) -C^fg=_i)6pY>Rbj^msxqudG&+I$pzNiCG06kahyY+|p@`8R8N$aN-kI@J~n#Gln3E0q&b$k%$WD_eX8 -Uiw7u*Gffki&@~1v|C<;Z*8Vm)#(I3{o&ZfrZ=0CIXd2tk}X&ARqyxNL&>82Z^AGQDBoqKY<7fu+Vzp -NmtbC<!ZIK&R&<6>1M#Em6paK)&x5^7Ou1*YzW9%*jy6GR{+I`S!Rw{A<zjE+a0M3$T{R)dj#|-#iNC --ImhZ@2L_fsMwkHmL<E-q0EY$$Rp%JS!^`?&*ZFSaVRFDFh}=fP@d&A{3#yBHvB>Ug15SO5deEXkj57 -v$W`R^!-n-@dn>1Vhb-Vn0^CS1J2#iuOcg4kCgcP`)0Y$kXJz;4ZV6Fm}klF57_6QkT(y~TcMlGqFbd -0d5D{}U2`Ix?i621J_#?aiN@YL6fl^oXCkM)J%a!It3)`spyf!AN}OTrIZ8SSdzjf|sC1G`Z}?TUFvQ -CD5>^Plgt#g~ukPwA^)tpQ+~=QO`KTg*q2N$g4-L4pymitS6p56}cd=DX<$aF2TKT4P9CSoHNM@VLvS -gM+g}dlvzoONFn|oExIYqJh#V`d;Cel|~0l#BODT<9Jh1mknpw<@V?`X2!W~hYh@=q3gPKeV=ppABtv -#dAGf^$o~RRO9KQH00008031s8R>MlHts5r*0M)So02lxO0B~t=FJE?LZe(wAFLG&PXfJeScyumsdF? -%GliNme-}hI*yrc|D6i@P}t1VM?iY;Gsv89x?cUP%3Lu1L=U05JM1E5wLMX6MNLw-YkSbj<RF^`@HK< -@f+iDQ&XO8_%HGd(>$J^ezt-8F5Wwd&-uZMNCvzFzlDQ*~L%FLp)Smqj&$5}W;6m)aKnwJC75-tfa_r -`n=#TJxgp)%HsDy=wV=f4eK|EAuu#$>2Ksr+<9D`t0wYfA$YAUjAW5kDk@H{NuBts)~zB@!jX;y60an -0HS;TW!dTHFN>|(ob7k!&8uBsHZ^peTXHY{RKxSx$@GN#HD6Utvorm|->a(Vdh>EuuHRT>!0*)spvSz -tX$xC(Q@$-XYE_lB#?ri~%B$MEeug(+ss6gr_?oX(<?xI*t4h_gtW*7p?z-|{45W2a_XPlMZTT<Zt`l -$DrZTU(zAbkv{Sf|cY(ceczAH_!=XmqyqAiQs4EDSI?iR3XO8k*;zbfCAwJxz$MYnI2De)EGZj}YmsV -lrQ1zz*5dD-7qw(e`Znem^q+nqW&DKCA3IL)%(WV^Pw+7_o--DK<LEf5n<p&fVEIDnt=?acgO0_bKij -;=2+ZyEWs>=i({teP7=87H4V|Ki!7zC2s~@lUVMUVQOSr`g1-Fv%9#WTP&NebrBF;a7it{`D7MzWNK4 -_Tf?S%cj~)PEJl%ty<k&!%FCO#ah9eRza_~yRuSwJNc%2_%{<E!!z}+M-0GwqRn%d!C5xJ$CKsB$sbf -tNHPloikYA1SadnFw0>@}xrB-*Yarw<d%Y{_+^vr3DWPyOnLLAq+`dtpY`=q!T>*rwth27!s;q~$=TP -K?%62_)fm3+do2m$tAH&m)dPimPovJr+L3kJxBT6`x!=;`tZ8f44=zX&;iypdoQv%EBuT=(^tX<DwUa -}QndDpI1d8ew&Y4+$Tt^gh+Uaji)ZJk|GSMv8*Xih!<Fw6K3x@Uh=$3AL5OuYth&C3SxK5D_h%ARJf5 -eKE)Rb@{gW?6H23Co-iMet~1&Z&nJF`N8gxpYktMgdM%5F&8C`X>8?7etX=m2Xw8p*tku1#62RXP=7R -Il#d<X4%UI_*h)~>B5flP-Xj?nwlXM%y{B62I309P@cd;nju|!Th=+%;D)EV>eQ?BiLHbX=2YG_GmT~ -lOU<~Zo0u)Im4SKT3GmSW6_nPLU%*`Bd|%v#sCQ$3)?Rf!qBJ6NY~wV0x!+y@$89dN^>xt}>mGSLOlh -&%;2*Cc0rqPePyiVj26p%~dzRJe#@_SdDK_5$TZ5&vYq}B%Y%Yg&{A6idy1B|8>M>C*ai=H2BDyWFu3 ->L$o89r~{tQanb)OYI{k|uzpJi{0YOk^j)!!&p-wnAEu{ofyD=(_stlI)7R_&D8()|$XEv~V3H9Q5pT -*NH6<zjXLB!*n>=x!gtS4<=8rUC)(w_I0a#K$Ub3|USbyU}b4F#9=gkJ-Manj79f%wr<x$z(22f@sJi -?(f0;yP{LN<Rx@!9O8GpW5+$yTY0vn%^7y<N?rEAV<&46OH_-$F85W1e~CONejCWhTq}*<>EmXM4B*; -9GAHOL3cz2G=*nGJcB2i{4U3dHZZJNE%Z~Pb!atTlVH!%b1c5N5Wt1`axIUx4e`XjDmd6skp@#t9-@s -K1r1!-I38^tJBXOt8b_lb$pl*KqEq3MGZxPZSX7<}}wfHtSV7~p<Z|`?=kJoouj>7&qQoW><IV{QwUS -PXBIHjmd5REsQa;V}EM(hT;T6I;^cdHdF&2zViSBQwo%sn8O@_{Bh`N+_Se5R*WJ_0<;TZ04nY(<^-p -1=X&s=wBcmQq3~>#_$4#bFE?thZ`UQ7l5?R6raO!-8TDX5m6R6+((HEn{6o@hn<3vQ8i~$CWh7L>*ib -aXFGV^}v8QXAyA<2tcI>;CC~hu0#n(V17%qJK?Qkgk1p`2lyMJ66EReu`9<{Q*Tb@ruexJVCk2#8wLL -LUmZ0Ax{zP<$cZq;{K|$kEzH#TuaR%i?&UwWEMj3NBtVCr0*84VH7$2w8s`C8^a3D>0m{K$?xS%k*95 -$lLOaw+%j_EJodte;m`ey=>p%~O&LmWKSHa2t?x&egiH_bo5O8SGw~SM`f9f4#K%~@QfqQ}&)t;iVg# -|A<Yr0lIBq_TRHuIuhtDFkY^u~cDr_)eI>2UYgM}u{<yUnMG0(024fI=8vSb&Db<-)<fZ2A{lI3S@WL -2cxa)c4_tnv3t$x=+j*45@DV#IR^UNtr8XcX0Bu#e$pHw<uAHiEyv^UJgJjcDlO^BOU@wOnL<Lo(}bn -(o7LmC1DMtLk=+wQWyN9s5&J_d8K;P2HHV(Rk^m?4lGOkWSOKz1OWhOd9R8-j}8q%dAwG1?BTPa_d+v -Y5{A7Oc)1asb0f=HTn1-waUMOlt>%ws*^}r1Dle4P;zNPKsHTxrMVK#EFNm`^=@`O-iGD-Hh1}BdN-j -af(8&O~(Jajf^GOPk(?n&bg4#Oe*U>2G`euj!E8JSB(!8uU@Tbd(z1umN`rU<|aivA}<TM&CYGFIWkX -SRDpNkfk@zm%sP|fovOYeQ$d%S*=on4n*cGK*u4IC=7BD*L_483XEHz;bBhI?e{^0Hi)@T<B_fcXL_q -Hb;gvml}(mul7b`?3{0$9A$PL3Tz3-}AO@+I&J7>-hAB`1ok?Br94)P`dpN6{Bi1(Hqn6cP(n^`&+v< -joNu&mjns<4~oy+wNq4(-r95#$JqjPp{S48u$sdFuU<=fMu&QZYRUa>U<cHFGRj{r8}<Sh_@NU$LWQ# -f%5C*kwrhHro)V7px7oT?MUM{+@ZzdVAMUkQoQr8awCdKyPN=_{eZSlHTEszpElPh&_g?QIDTc~`%{G -$xYzH|FvD%rC8K?dde~^=EY_3V)6z4}+oVk%!B?<;K0EZaXS-Za%5L(bY^A<>|<ICju=N%w7f1_>}&a -y<zRxk#m+5%iXwhvkAK*5$KLQ5fT3Y*qytkx9(z;m_b$+8EhAp<ge*tQ$<2rcq3P4M8)ZE3yBOk-vw2 -Ev76-iIf*q2?|p=f8bVMLsMiSX>W`7#RqU=l10^z%`xx=HE4_P9k(gN>nbVmoDj+Sm$9^FRqD|Uc$EW -y6O_g(c}^H$U`X^vrb7o!W|vS$$z(c%f>Bn+>th~_$>Kzoo$n6)}$;$3Q*uhiWpjEHsVZMVG+fn`cJE -^n+i^+WlsH5FwwbJmyLz7ChA$$SzgO!@T}|WSa3FcXg`mFPEN^BrliwT_#-IN#`mW)S|!hdsi&P@uT` -D}wK;xo;u<GnO)~_emEe2QTWBUY<4Io7|1*DOExfyF8mduPB(xHKIXiI)6@*_hRyNr4qbPQWMFB@Ie@ -X`R%Tbjb;7tXSD4$u4DKcg@&tATMp@k!28Ql+JT|OXL^T)R?h}rz5FtDH6(x3_MN3=FbO8x0A4lyG|c -43`);P>YWX;1J{6q;0<)GqkzO_0+<|D7c%U}1jDQggS^e`g`m7bvAC@wPBOX7P$yFuS)e96R6eNMU4R -+__};TK&fuVCfOh(L^lt10-n;WzK(DH696<S^+rBx!JyWJlod1+WN)(buAl%j1&m7Z};oo@KS%fFVL{ -{2v%ZM8q3yZPF#_^Wb||N1tEPzahu&V^~XKxB!KYUE(s*QD>ihT=T&#D;K+tbQ9b%nZGJL&a)>QY_3V -(>0}SOBf0!=*;(79MB4D4Q34iuA(ol!dDm^tr4hcv<M&g47q{Y3ECB<xLnu0;ccVH>`fX|I9IkK$biQ -2-hGqA89pc`s;8oS5MwCj|kCw6}O{~)Zf4NO=w0jGrkj4rc0;%D`3%Ak3G5&1-SaSN+^d%^1*h);dLS -NI(FULrQFgfvTo5idluGoVhR)_~VVd$mW^XqR=@MuDnIvR7z$w24DEaDrVk*+b7e1+SP-{VD?fY-d;r -@#hoI47q2yPvxFp$X8fkQ^0@T)<VoqinDdYu&}6Y(ctVz4vlVM-hxT<Ucqz^OJIWL{`zvFW9(L+N-HM -NrmoJMh0Rm3?$}p2V@@8bGlh|9N1E!K0I_LvI;iKwvcB>(ZK=`4ANb{=U1FJ$h%+Z*S>ekZ|BE&?v71 -H43)1n9+b*mCR&>ZpfvZ(^%a+sv9kdn`c5lc&ip*W^?fEI07L5K@R9l7v5S1P;%}B80^NvF{;?c~I## -dIvPPoLNbFv&At~y#6<aQa3%s|5-Inzflwqu-Z44~;aT88{>@B-GUT{w&##`uK9AZ@vn_lYcy1_B57s -qeuOk*Mx(TW;CdkPlkN__ZZ4=Q$J6Spn01sao2nwR~9OhJ^dCahYS=O2S|#t<l^QZHDm)#Pw#DMZP@4 -L=rdac}(zom^tT0a8VWYn-w{iaBEC2)~jtuq+zzLDKT-l0*EL-+Z`awFZMmzPs#0=g$`}s>ZV?ou`?^ -|O!ClA{YxISt<fvZ>!q950K@nExzb!;dTqt5-#Bdz@PE&FE42w2tFFO-n<qO%2PXteA_>x|)$W_eBiM -0`Un-XE`1QhIR+jP;8J-VwJo6UX;q#F!VWNM~tQs6qLXGjL&m_hikr-wUui~VyrF~Sdq1}_nLhAtTBk -5bMf?e$7b%RgHLzu0rMlK9B6)3A{8TK{Zm_UMBT@`)#R&h8J#WQx!&tmG!tB(`%wudiI@_r7lk8H*lU -lmnMoL_vAKiGZ~24sI{!xbFvXN;Lov&V`3i(V}ZkcSD^B<;ThL-EN%BFF$pRZO-kD?zJL7WF#))E3ex -`&4^RrTluxeT>`%S=P(wl+dFfQzo2pXze9L1>WSe@EJyHaBuu*jcK%OR~HKA`2X_i<sPASpsL7AN-L~ -*VA@5Il?7Q*wW`?MqPnw#qw}vT|JRlOe|hBt1%l*`PD*!N{NnuSFMO@z3zZ(hA|GDd2iNvi>P&v%-ke -g<kl|nhj}QtKC~F|)ZQ(~G(tv+ai!r$xO_&EUtT{VQ#YzV&$yzPDp7DiqBSu}0AfU#a*^ko+XAd4+7x -ku6Z8sbgU};3XMVD4nA<NOmg!*ADzlWnGoLI?wT@3p9y8?Y-efoI%^eNj`+j4z9XYCo=S3T{KDJp%pC -)cW~8g#U+Hj`<x=p1mcuFCbB#pG?NZsvV+bycbSW2*D<)cC~SiFChWYxrT>mH7Mzbqj57P~+W^Z!YX^ -m*qPX)IRzB1gXTtt(khqnTB5D*{JL^BVscUYlgFJaf{pS`Wh2Q47do<AQsvC4@MVeSTs8d;uEjze7^( -Upz`;Zli$C8qi#P;PIXKzt^jy2)3?Aq?Lg37v&*L+1_(My`>`3xJJYlZgSJ=Q{t^&rln-<>qMQ1fDxv -g3B}whrXRxlje%uvBm)CaB*L+6~#|UtEpS8zRJOXw&**SxnCNy{=IGQ$LE-02XI@i<UUlsj|Ig}o`)| -;PZ6P@{D5{Fj5_BVZ@h-4lF6kWIwbPTk{AnRjdtc}e#|2N$_S`qZK8<6dctyznIvCkS_exUX%zT@NuY -;%rTvE##sBDYyaein#@>3RE2cJ}J?SEuaRU!r=pD*K+QSs(tHwwX6IFhj%q(7+QpxXG*wfdr$U3z5r4 -&f9W!%F$$?jU)D1w29a^x$vqEqp_mk6A(;RsR)!vMV|~kNlAkU>!H^j+s4ee4lO2=w58b5`!y_xiWWt -yuGG7s6Hu#Gwq)A(!)|_jR0z|lcy{B+4ja1tt(bX-!L-THiN81faz->#$zJWN0_25vc*^N87m;2kS8c -Q3Wp%Mtv`<)2eGBtZQ5qCV3Bh*NktHc{;@majhDRJU#;`PXICUpMYhSy$W)F~leXZrjwT2PV%FQ)w{8 -_PHs~w6;*Sea{A3$+*OdFj!a~`s3$~j6HPff3N0hwn5hao25(DsXSE$o{_qPq88lCi9tJxk~I3F`%Dw -fRcD$flNxW*dnb!8J}@!6n_o-iiTL7%d^`LhH|it%w#aw?+`=T^K<(9DCr{ieW~0=!s(+2(aaA%py22 -f>{axSWYQuLDP-)EMb|%=Y67A5^Tv~R3yomEG<umI94zh`AQzvh)D|2Q?c8)X$5xo#CuF;WuPMtAwfh -EZQ;QupUy#00)gmQ3?iHui}rZ?(IR{F<i{B0<>b9wJ|Es=!yhKGEJkBaF=`ZZyCFtRFHddyHqKmi2St -|P#OtC1;ZN1*O!8JGVn7bCW9o|MMm5S#xp?mN9Jt9}@E}2a$YS809&dg%e{=~C-RCtq=&s3s#g-#7L% -*3+D8`+b8IRWvYUuEQxy`5~Y=i%*ZO*`Lbf^=);=nLE{J=V(!orPUa}4i`*=CX(4zj#(U!+dVr0FQTt -ct5{@t8S|hk9Z-0PV#eUcUPJ`Df2wKeymQ5nirb$2s%I{=zk5POLt|T|7#NnM-;JwqzG~R=3#XitjU# -ijL0RQe_dDV&e^FuA7;L4X;qYtxsXbHEr|^COUGVZX4(ZNC~P%H&R%Z8(f#Yc4yoiZweBgN9b&}Q5^- -S(sK_;ikc~Ic|;FdUV25I@<@Hn(z`XtRoXGe6nvC<NiXnnqhB%2E;2t+;Ji~syT0~9WhDUUO9Vq~c`@ -@BrOkrE5r#l`lLDfRx0~>cib~87>P%z6Gh--&3E@N{vUm)82%x#%=xr~BDso+wS_y+rMVpOQ%b9p&kC -4abQ@@1`RCFptv@Z1NU>S=Y=*)^Rl)IuZ{U$YtM=41!rGy@UK{$9`h7nYot@ODt%Kekp3UEqH_e|%=o -VZ=n?s7VHr|>EXT~9-QJu<X-SzqA6?`(A!2PRGLSVnhCJ_?d@ifC#VCFYsuB^>!IOxWolc{u{mexC=- -m(z**r*_@Kws^N9M)l))>qWkIguS%aflWl4d;SNud-eeZd{0xZ1qFuVYYebT^_zM!b+H>_r@k#!wb5~ -1rq*0X3K}eV?hY}P>b$W(8kLH~vq5gU<cY`(l>OB)fhIi>hZCGoV%xm^;3obqw>b;2^wf)HVH6RAAlM -`-I3dLdMy^5GR$2RP`Gn`SJS0ZZ9zcz-rq=6zV!E~5An=y^-IxV1<R;HkJv?F3S$*Pjk%?v_lVu<W=v -)oX5mFZ%*KAm2W2|e8^?G>u)*jB5o6-niIjjCWBrnH263S5wRAaCOLjw^;>)>zNvhP)GOlpR2CgqToh -KUlcPM&<2zIAe=LG>N4U=1(GN~Y^ai6>n>)1{o2wtOGhKc&7>Cl1dey`|FuvgW_uS5+>L)vDfaF_pO5 -SZ_ddR?O}5T#VDt|G?+hEu|@YPnzP>Ko2Q1R#1VNO<WPS`ymE<{&+d0Xcg&h4`u6kd{mMS>fKQtJ)Eo -K-mu6PLG)rkJx(U-IGCYB;Idf1(LSQuFfFsZ;oFt<FsIw_NXTV&&CV8JL(EAqU+ZFht+cJ2ql8{F{mt -j|r3eFhA5Jt?#H3Y5J;hIugvGfOV_}@_R^Pim7?aI<-vUQ41e3DG;N^wh=qe^Q1@~PZr{oj1yR^;V@N -!3{+E7$(mNe(~mh*d~(Ih8`;dv8>x$#wV4jT-=i#Uf@YxEdm4zHqu-@e2Z37CY`WW%C!=lmY$(u0s-R -Y3tye_-?HR;qaGvcLe^fcQbCe`m~Yvup+brijdc!BaQ$A$HJwa=M%*&JYAJsqkY`&TUi2oD;+%8K_A9 -^|r&-ZgY^slfS$!D*(W9Nzk%)n2Pp~)ZSr53LBs>WBEzw1$Ey0As2){HpVljZ=g@;Jf?HQ3nyZfC&;# -`U>m}ZQj7`}EWtVb9yUsjDi|Eg&v0Y+e8)+*hNCz(gfj{dl5w-&nL+t7fxWS@5_<O+zVK6@<zR=YXdc -L6jMa!VhaxZVB6+vy`k9k@&DSyX5h1N+=9#AtVWeJbVFkgY>pK`^^_P#+3ql-Fs9!>sc-N!GTjS24aj -w&d&`WnB^6W9LY*H_&0h_%(EFFNh#@+!nrpJdgmB^_K^-Ok9xf@Qz0BmsXU_g}AMH<$oyZSH_JHLYzY -#0&?aXv)}*ti9X22>(Zzr;f_N1{NoSIGxq+E}<zL~BVz@&smgy;Yckj%%rR&@LdpxG)hf!>Lnn2TUus -V55JlTGY-195OyqaO8O4y^O5%PB5>Hb`yX_;gZP{29U<&n|@-v9EUhSAlvVn&ZFP*(se57*C|r}dP*U -;-a7P-^q?5gK}?0rEbFm73&seGUXocibSKVOVclD9hPUx+I;vB|H9T8a`wiLy^d_=E2{>4b6wXK|lv> -%^{cvrs@`1QWjb?lk`VnCp1KgL2+bq+r^7-kbCrem%lWej~Rve6}w2*-W^pYAbq$7P@zUS;wmg5H#;O -~=Z_P6%=6dw$25DaB_d(eG_v1AW);hCQ4bhkwRxp-76y|swO{4u-uLPWEsJwkLkXSGm5hbsLjz(+$1( -*?unpkCwo*VmzWIxN!Nkb*X8IlWiTf?ct(Hda2IIz?Q>-Oh9;^)_~?eWj|VzA{=7^RX1_>$nH88IiH; -d{w+FxBIQkM(RGB63I|<#P<lLht)Y2O+Pb{>z*EZ9<YZ^!hrjah4%f_i=|}yh9(rm7TS>jSGB`{-#$& -lfC4FzN6l*HM>XRH0(8d#`Dl?%%B#9*Rgh!Zl65k(t1RiPC{G2ArdXZm`$FJ8y(|MOrTA)^=*djb5HT -QNfdBpP|24V8^1o|4(cqB?&_BbPl17kV*{AGwA~3>s%(5VK->}{J@c!fMW6K&pBsl&7-ej4M3`rigFK -fFlTH%`wnsAExRx84I$z!C?Tdna8jk=ykG7LL%jSPt@=>iaO(Ln!}LUo-YLZdv>6P3uniWjNfwHaS1@ -6aylYRxRLsh2Q!M06cUr5l~wY@6wBioj_gKdZan*X$EKb9~ck?z2gHZjoDILKF7KV+R^`onbbf;>8D) -_-KOG9Q`ju<ISb9<))dMmKBj8Y$H?3{SEBe<t*9myPh*~o49SudY*U!Fk>QQ)hn@?EQB}o1MP3&QIF& -bu=f1wAH1~~yz`mQV6OTD1a0fuuW%V7Jbi>q-`w?lHAHegJ*|))elSt-o_86LQ_2c+fQE)Xq6R$;T&w -Jqjwim^=?yx_d6P~4YSbB$TSS~5#r*;(j6ErS3=&JQtY2yD7#fo-ET%W{Z5jH|t)46TeJVe9JIlnO<P -P&kAVemaV-F4d+1*_90EPXUv?Ot6E)?>0QZ5gQckK9FyOQa~e}?I1m5Dj<1#%_3S*<$#QCTA<jtb(aq -8HU7MKEIx#co2;K_4dxOw4L%zwjVyq{pyn7g+e?`t5JCPlh`|8xa0C*!F=wlUO}ceZ)n}wm*miw=!6D -;2+p^o>KM;HhB!$H6b0c!U+$_Y&coQp}eU;&CNyzozy{Ez9W)+a?3Ue*V1JC#07I^)+CKC>GT|~1(U2 -4eai2f2UEWyB+~vuv5k?;C`mr}<P&=kj(o@}{JhF54DphqUIQ*Ui2=HKQ0xd{f9f@Bwa#OS&U%~REJ0 -^?|GJz<qAQV`Z8S+0UU4W|R3zaYdjP136B)M%yAH>>G9rtF=tSCI+Cei}0X$#am^DSSaTZS+UV{?U-A -2mf^=FKbW%?RaRr04Mc{fLx7pP^@340kwxVL*2$ylX<*P*GD=t_;unSSmyk%I$dxzd|a*|8z>(~)D0* -8u%a=%&JcvqdZ2Z(kPn`pyz@f<Tji?rhx}8>J)l*w&Q{p4PTMG9SwQh_{iE(0?3cQFFo;kM!moE~^92 -@fT)x*{PPI<LjPvKxb|`X4%Ew9j7Ud7QdO*5oXSONB<wbA$ao_uHqw>!;#A%LH_ro@|2ZfjF1lz@DC> -3I}vQyuX__{^G4NSI9bL|g};bM0Byx45z)IGmy?*PrJD!t_VfiujyL5<E$zrzBvK2}Nh?Y)G%8{3in8 -?_P7Vwq_C+CwuTHv<U?=bv9mibve~M)!_=jCFf<nV`_l$2H5lX0wJXA@FOc?%AP_Q~(BazwY;O2Iuw} -fdSEu8p12~lqXeSF#_!Cxnw?2mlkh8TIm`CxZz{07;hKgrM!pAT44iat*S^6)xnVrG>R<dTI^u{_L?l -dsRr1ecMaMPzOF*@L*#X7_X!bzu^X4D~5nCs9FFH8(5rK^QcLeo4-3a$K*mmz3egI`#mL$W3X+dCuCm -ynYXc_1hlC$E(+@>>+0oY!4XF;dI^6$P=c@7hJ~orsGddC?3VAVKTs5q5+!?lnbyohBFS~e&a%Qtvg? -;&2d&o4#!`^G>~`SsrYETog3&^O=1i8LYt_Xw!A8#ucK-?+cP+)J2Xl0U2S*$tvH;HI`caaA{AN6J%< -S{KPNEk7_;<`qA_`UU{W7Sjrbo22jWVcjwKf`p})2%E!7N}yI95Iy`+zGRRu;%m^8?q8)NAOq?zkJeH -u8z48-xK<#_F+nEVE>d+&K8Nu2ZC#mcbo%Q<px0_4~TB(1llT-ti10oFsch+LM1PV_Gl6<K^G=w*%`% -L1bObgtviy2rdT@qQ-dHk`@<p7}Y|l>D*~Rz^mj&QMev$fKN7mk}ZtwQe#Eb)3Zqvv9eV4>J_<TYjl- -GQ(DcckqSkZ<Oqv7@iY+Ouux5i@uHL$`rf@3mE1zu};Tdtc(lM$MeUt?18!WPBPBD04HbF7WI{~qe35 -fAJ!~@O<wa}jL4wJUOI@>NsR;1p$_F|D*iqJ#n%omN~#mDQ}UH}DN7RH3df$OKI$L_k`5J>Lm3Dc9Xp -_z07X3!iIdr(fHC0$8+cUHy$(Jgq9E?$3HBcIvLNRCCm<CWjxM@9;OpTX0d!g^{-!tn9<(zCn+)JmwW -|wgdE>dX;<bknxOc9Lz95E;G9u~*<2NP5hZ4q=%@|(oo9hyKh~A(HLkPmuW1`>6^@A~U?lm6!^=RLam -GKR65Ys!JKVW}kDF;o`n~D~m+J2_t`^fg;KTN_O^254lRq-aV$bQINn6a?C&+tg__~+X2+Vsk%d+*mC -!AMkdkQ}3uV^oFL5tJpmnf4G)U~7c3;{HoK3_1Tg`r>p(<J3hX^YAI#NYNL!F+^i{rRj|7dGmNTN;5n -W>!Os3D9^pgpM`x-$f!rm;@}J-CpNj7F~<DyOs?Zc0(LCzVqGm1m+bIHw~x{t8i%F7{le30JC&XfZ?~ -~S(@GdycV++vsg&_b?_?C#?lNs?*M+V1Gl79VIgmv(>4Houl^^2c2)N^JjBCe!b$0Zf9eunQmsp3_^V -3I+*5!bA{-cG#yQL35C5W$HN@PK>?+&=&|6E@h9Qjb-F&`luIGX(hvry2NgOAF|bmx2xp4&~*=gR13{ -&#$>Ugt7Em!i9U^v~A(xxy7jKGo-c|Ji*1uDGDoRioeFJNy}G_XX*DsO<QJ?VtS9M`>(k6@6*m#yyN= -7V;q6J9Z*mTbKdECh4*1c>HWVoScUe7s;>(9c>XOD*7_WSu+s5CKNlVh&2=br_YFK8DlO(9c{!`2*>b -|q`2Vsn)dGHF)mh4-=LKQ6{i4bISY^WCY)tR^^0KA7J4zH1sKyK8lcurS(S?{oIJk{AWCGwOGkf5${f -LzA<?w!flafd2XC|o61ezauZNZh;Qa^dJ0uP@=)>pHX-kf6ATj|5!r5hMoD<x3I<O^uQHpO4vbs>Xiq -eN`uNzJoCyX!S89!4oXMUtvp*NwUSQz~=)>`yB7Tx!kxhWg3b{pr)-4AT21H2%iy`77cd<lxxZU(g04 -$RR;^=jR(Fry3%3^~7x5DJs8KHK-rBd(B%3beQ5hJ3dSr8-K=Xl)sw1|(7IglN$wBKN(I7KL)GOMv)f -8ZVKwePQy?dG=tM&mT<xW|GP(3WdLded5KJFJ3-(Fh2<OY<nAy)FCI#48~Kj*{@Z8wT8paxgNO5>r)f -``(rguko@{@vrm?^<M;<--?ezxI~T~Y&OM1vS>nBrqs#tU_i1&tFE?s1MX)Y398jOm1{`^m|M!3Xhmg -m$Ppx&Rz!IBsn_aa^)iQs3+K;v~xTC)7%~*ezV3di7(F7ly5n=lRWA1Y@Xz<w6H$iZ{91`V@^+3l^RY -xiO(Gp)IMZArqFxKglq9khU6JrO%h&u8ECNE7|6f*Hj`Z7?&Y((qXOE8dNM^m<dx}x6aO~i||y(Gvqp -p%9;!Dt#%ZpA5~WPFZ^#LT@eV<_r}iCjPWHAR18HmO}%DWAXiDJ<-6(e<3LCi4<$VWwf-8z*7}dj_Xd -FjA4zgUh{yz0!`6D@`g}JCr#+$(?mFAwTxInznRHCj3c4{Uv)G<y^-Lx7f1YtHeUI23^DBeHIT#HQn! -ShF^AJ4=5XB0pjAe*-$z(E(L<9oKYVdqTIF$)F8>@f!CHHkD$dMf=gI<7ZUhG@#Y-+=H5-S(`5_;*R% -MF)Z<we)QaXvpnObv)$$#YqJTG(MzHA;1}fmiQu+`@;$<j05KYFqIMBVx<UqH)g{Bz-Ed-H(M5Id{7H -VAznG=j|Ut#paYDMRi)e0wkwVIsbM`w0zakVW@@l*6`6r%|cDHC_)ZoUF(cGI+T`c9TnspwB-X>|(sx -p&6RTr$pY>M!9)xy{O52ZHRTsqjn-Vl#B7=ainnIkC%t<#JbcYZR6hEP9k_Hc%l`<-UUj04-p%=v7i~ -$_?7?_L$1)0v&!;&!Ev=@~SQ{@aOw|G0*;lUOcej78}$U!VefuS!`$7_j_`?!?brBkUUhoE;aLq6;f> -14MWC4WmjTL1hU*g;Y{HNgtySAh6eym;Z}(tVe<t1w0r0YkCnu>U8}B15mb_x^tP$?yB;%Dyv31bs)H -?IT~?LB5DaJ!YxSxu`V5m)7MNNEZuadwdro4K+9MhP2hDn2C^#5p>;108ujirLPmLc!EA=Yavuw8BSG -xkojmO+_T^5+7T($Ui+f>+%0ufXKIy#Nl{dNwdrq2meJI(X(vkT`Fn&S!V&65jv2p%X)lt5(x<yE;h0 -W5~P7KX5L|HZuB!?TGwe}0Tgua9+8rpT@>bt*Zt&L$wWCJT)NXHD7>;I$}ckHtm@clRbqRd+;-7u8<L -23f^-_x5lvIHEaNP$<;M7D>67Zt#BqP)h>@6aWAK2ml;P_Ezj<p^nW2006-b000>P003}la4%nWWo~3 -|axZdeV`wjQXk~3>E^v9RS50r@HW0o0R}9pPlqv%DYQRO)ZdxpmZi0>XP`H7Xk?5GML<%ImyN2QY?VT -a1FG~s1Vs)@SNDgP-yf+++x>4Ffq2yLPHB1|>7hA1ru!ly-ClG%8tte~?H^SiWyW150U=0nYaNAg+B& -!yFRaWvX+gCO>_E2%tEx-Ql>f_BizhD1(bA2DCx+(39dwNOzZGC9?VzDSHW(=%%yynXV;1xyD6?tlzk -X*x7X$UqXKG%#qNnvkz36BR@y7kLX-?S)p87?!b;@PkM{wZ5HlUMr5c;j>hr(=qCW2_GTJfxsPn8^~Z -p!UIo+J^llt8tl<U{$b@!CMc6p>OY%<j!3NmcoHA!tOwJlRF25+;J@|#E(i<qg~&Hk$~^)Hfz1-S&Nj -9&re&zc|?8`jX|CZDQup{Jqo<qrrpXm!JClsffdTr!vm~bd}-_a63BV{O71wL$#P^n3ox(FXn{Fu4si -lv+u^_~!{K=9@!7UH5(e?JZs*?m*$&yhDVgQ*Xq>L&<O^Mt#bwJV^uY*eERzL~&48SVcgj6yPB4BrnY -BqtC%b9K)HZX%^4i4HRj1LH#3$<KMyrNvd+5^U1shYe30(e!R&|d9rvG>DL~Xf5ZXi)vSOHs6c`n)=V -(93Y5nbA~VcH6!jra87FB!p)5aBKRTM0Raa~mBgz7sAuy7{MQHfYp1FXLfy0suV%{gdW)uVrv0AmG$o -bGuVz2LjcRoC4~7Dk_tPg>D3ub4!#(4I8!B1s^b)KEHy!1aIWZP&9)0MzOL}v@2=&!oOOmRmmOBp~%o -RE;K#R&Pj-alT=<L%AWh+gOTAX9|Xisg@gKl{<+zNJLMa_@^+kwNi`Z9{T^kfGx)(J?<`nf#j$q2=U) -P1t-7)yrc)XYPbR9~_;Tl72HNp+GR;}(=`g^y&HKvV`bAw8I(p#`75$l2dsKQ)WcPuH9Jcc0jl7L0=| -$^fTls)}WiTDNR^dKjx?A-E(J8VsjyKHis9NcH>ZZVDp-L>+^Mrqy+8_9o+O*+|gr*6On8=$udPZ)H% -MOLX9`ON>=eq+&C`aif;q1=||GkdH_G)37O6a;B3Gx|uJ}0185?;QN@UA5w#m0nV3X!%^pTt%BkN`8I -`Zn6NEu59f`r0@r2EWIImZPTY-m>DKYps=zufG=D0hM%}*e?uELEe6MQsFe$pc56Ix+Nh+F#6yP8FL5 -CbdN!I=ca`O)YKWxbZOpT?AE(}Yz*(X0UEV9zO%7DHGVxQVBAEwGb+b(Qw!>UsOR0Bw@;*^jXyiXAvs -?Dgs1OnY-w}(=7GNVZZ&(e%dM{y6UXLNJ>xD$dWVKOwJPaRS53=f5B*EZoglh?hOiSsawcar8H%eb9m -QU21fg{)xHG4LXS>z$1O#K;gd8s}CRnF%aWTx$Y0_5?M?>#9(~FD@XV?RCS%$iv{GX(&W{~q|@`*sjO -qNgzQ!rg7ZALF^W$aAPhLPdPACI<9V6}obXXSwjjQd>N(MRcuGU^q*gGbh46Fr9lPK*Cb@C!jAq?0ty -$*m~QYy1zF=g|`22WT{Vs@anM5Ebe({sHYd*&d{Rw?+$TV;{e-YRTeXP)h>@6aWAK2ml;P_Eu4K_E1L -v003qH000^Q003}la4%nWWo~3|axZdeV`wjQXk~3>b1rasODoFHRnSXGO-n4zDTyyGsmw_&R>;gP$S* -2UaB+2W4D|_#4-Sd+aSi5511l}bNX<=!sR#jaxVX5WDiv%YA{wYVHMsy#O9KQH00008031s8R_NHy=T -aH~0HkvO0384T0B~t=FJE?LZe(wAFLG&PXfJefVPj=tVPk79aCz-LU5^~caqs&p#>)rJQmYYZ=RsI#W -HTaV5s^rNWGn;c!*F(|_il8%GpqUF-HIUK#CfxUAVC}?M*NVE2fqY_?F7gdkpGg{wDOd{kgDqMkD0rp -NF|XxiK(6G>gww1>guZM>b`YTZ=)<*_g&wxEQ`wRu5P+0U$*t8?^wp)Clm2~Q&w!1ua24gP`C2eZj*Q -Gy4lM2cHd6ch`q?We6`8jmbDVS`ZSN$CEFAnuxs)aTjr}133i%qPO@$(O7}aB;Dfs8H|!yNnnw?1HGE -aDWpyNh<4FY1&1yfVAMfOwO}^YP{&uTeb^O<zjy3xG`(-P>-`jO%UF948_JDoTvuY)v9`-v~frz1Bzh -43Td@`GGVs_;&$sV(+sGDTBKiaaYYm*H-V~y(0QP0{oqi-4TFk6=!R^?kZf}pEUSS9PfQ*ZI>Jo-JhK -dqZ$9^Hl7@Nd6evStolfUb2l{Cdzez?qBUeaOy07Fzo6LoB#(#dCoBuG}c%Q4sFd-Me*P6@q7pEZjA$ ->-OSfwyEo#EWzIyRP99J3IujrwVEaLstPL*Xr>G4buNGKA#T<CeIQo|L&SgIXKlX$1|KzbzcY}6%$Aj -jmOco8<MQZu1OEfTk|6il5j%TNe@Fbg#`qwr?(&K$4t<C(qM%*XJJpYdXv^rEEbsQZpAYaw7VN7oKT{ -?2CW<;7W@E_Z=VP{2s2<|WWb)CSySMIr^dL&rd<VpB$F}h-O4DfiQ3(Tm+D<2v_wT)P^Zf_e2RFZ)y? -^`ew;#R-b#7cYKR<YQ|IXcS!{;}zPbQOst)mk72eXq;*lT<?iJ@Dld3YcO=@4q(tt&C<PRpV@Hh{{iJ -ERt`^K$4`lV_;E+6A=JLD@HW33bz`2}9_hh8dNeHu-K5E$ey%W$)&jRus0!^(n~Z3ciGjc}cd-&tQ62 -M@S-X++&Xi-_leKz;nJ?@W*ArvZ6<6P*gl@dgcSQ0!Vciq3!;{5W*zQj(UJ^1L)d*2h*~JBB?SDNaZ2 -t=7wrMM6~gYSHd2x8_-IM{WLVQ==HaiMm{*eY6riYx9s-WiV=l}^T>LiYsxLfe+Yn};tv<p+H^X-!(} -PTqo!OP8;i?vUKJbGBonUPL6=LpW1u+mYOi5i5Gz2jWT1zDXjZ^`cN~eSq^38nHGq^igmWVA@Ef$iSD -xmm<zyN19L1hI&!bv=nk}Rzin=;FZOV>;01FPlrzE<?);TDosHasGNNb>)szm*PjwPy9njS`*I6bWPK -H>nN%vQ%a^dB&`v#4HcW~fG6Bnn1PV>c!jqUbElx3Mtdg@A8W7tBWW4ULGaoY<O+7P1e;3L+q(HgEv? -J4EKAM<~~i9!00eI5;$%yK;4+TEr(8*m98T8b&$?cEd2@SFPqWE2TP!Vw@UwUn`Vj0*MfW%n<1GriT9 -#3vBX8Q)twNG8sl*lr0do=V$>mdYl8vP%@6&(?tGAeUP7(+kP8~avCg<bRZi{l_di<0FRc-hCK!rLC> -IaLwbX_Rn<meT_qNaZP5u*#r54qs1lHZqOR$yl|v7-0&GI2*gSdDZ`x3u0iM4Hr2-Odk#%_{l|WJVI2 -u$D7U0Hd3Dsq|t@iS5wa~edww#f+^!KnFaj-~$;lziTNqUUaFxDTr1Vpj4hliGcnO<t5R>0yIZV9Hv5 -!>b6F|`3IZqow|wl^RY^?e2|N@XZgxoRxXHbI6xF6+KE^rTSqFpYEcC0a0-VB)M;Auz%s!3_Y}QYLkC -Dm7``cEIu`#oo`Na;>y?*>XW+z<K#`GO*a<DyXPNOnRi&QS7yzlx_BLzuTkLs7J#>C|aLs1&n0)fK)! -?bfJC4d2?LXCz>GitFlEDT6q=B<9yQtpY4TMV~{;q46V%^mezWtd*N4Aou`F1wseQWm7ri`YJhDh)t9 -;VnaKA)tH%8zS}s%i*Do|yyVUp{XaHB0l>QAgA(xR<{qli~1tB$l`+%NyPrWarmAFbxy)T2647Hj1pT -?_k;Y?96#s2r1U)j=Vsr44%nb1wC{NaOWV>H!2Z7@BzjQLaU_L-hT*=kd_eZ%4sJOi*jwR}g>6;Md|( -KcV;vbd@ri@AtTx6Cm90b1e7Qv_@~T*b<Y8;+>B@@3t3H1^tR1uktAih?WV%mzt;zQq0n=ua5if#zGY -Myg&>Tg(5%L`<C|SySclwH!@Y3ZX>TuAQ8!*T9s<2Q(`gNN7OG);!uk;p?uG1%Z(Q3r1>a`BZhqO&-B -Rt5EZm6KE9%ImY{?yEO9|A&f197ZzHRF`%}&W8nCKHpjGB4YKZzFy}XW8g(!NG}CBl{Cs=@0nR#%TXB -KOj#!66o#8OV1`F`H0%i_i>y*(+O-3N2!UuxIv2L7U7+eN~mx;@sVisSz6io+TKlCVIz>Y0wSeQpm!& -V*ks$Q>K)>)9Ndb=x;TdC}J0$q!zU>;VW$ue1<p`A0G^U;~PBE%89I8*`DyTR=M(HN0`edf^Iur17al -pxR)m3Gj$rZEg0Zr_DFgi|6z!>q}xBNi*5*}_+l;HNF6S>PAr1D1Jy;*~%x>}mqYD~$ZOk|NCoJwVsN -A=7U+;H_JFT(lJ2YQyq|V!lzo18($fe#CT3SEOAQIr<E}Se6%L@w=J>=0$y~_`7B~#;;q@{ov$*rB|? -Je{_US0{YK&b7HjC9Rr`>|6%x{3~fVHQxa8Cuh39jQAD*MvlL9#a=iyo24deYDR7ObX`X_oTs~$Gj+v -pJz4=KqEuc&cs`5g3jA*dJl9BJQN8SYXv}hX8*Df@lX*5*<ev@yPMIJf2Z*gIDXJ|UIi!}~+$?Tf__) ->TU1s7)k#!&eH%*ml&^{_N-%TG<+XY>ksfm%yciDxvdpkbgBM-?n72N*nm9dtNojpER#IIw(c`EAI{z -|D(9Lr(N$h?M=iFnUpg1U0865RSyl6^{o-BZUE<dQ%uAKtBR4;bVUWxB!fx)kZm)OunVIS0?mt^e$>0 -POscqSfCTl{T1L*RZ~!o-u+T~0}{j{BZHkv$>SCZcl>y?KDi4D_E2j35J4FaKi@`)<aBY(rl|<iIZXA -oJ>rFd)*f`|o5(@TxS&Wx_(ixk@)MWsjOL5cO_ONVITEWjTjenD_PWozAtIi*n{+_KfHi5)E0!k78dO -N#?9&av%tG|jBFgD+u`3cE^$V6u0rnxd(Z)tX>~1xPWkW?RTcG5ina1Dz@U5cUzMWiqV}`$%AWv^6ug -#_!vs%SfaP_7NH8yIig!|e2y~UWC<G|ZtP`>)bgxZQu+>9R4$461U{1{jJT~il5c<p@Ed_*4Cs(WOIC -n$O?f_xYgwHGAN@3>Q>V*{56jPgA+3Wlk`C^k`Gv!6RSdb21>5goB2q=<#H^1N6nO*{kRJy5U>Mv``R -sFX;y0;T`oBbr}8oa?ti)2~X<^oxyX%2svsfrii+xJs!VQI78NG1|P9saxmKbty+%UNfMHRJ4<Rynp+ -<x9{T)?h{4Ebh?P9xC=bhL6B*(+v8_$W7!2~1(vJ=CHu3XlCzRyYuK46c&Y;{8F-&%mu1@AY}sb*gcx -1F(%!Yi=i1!X>m&QY_zdp}Q=8}Q3sW;=d&AU^@%>?EI$vmyIH&^7*(VOq-N5E<c;XF_e%@BGIkPUcU2 -IPdYs(mm3>UZ*Ta;n%R~meCZRpJ-(|Zzzwv2w5b<4G?uHyYL)f6K0qv5p<IpIx?4#Ib^CfSgF_!^%n0 -nnVjN=UDQ9q>tCHn@7PDHbDwLZAq^Jp+7)5j&ZB_#C&KxRlb&N`w{V(=g7k`A|f9Aa+V^$%g5_b`iI} -Qa)SlBGYV2&8g}jC*vj+2`w0{$>>we3xJK&ylPAEqMMVcLzuREQazDv5Yv81qfmzl%r-?*dtTU}zDbe -#8ep)BSjAIc0R*d<>vS4W0K=8qP$jXe<giH1Z?$p?Re7LYZ<J>Vm;r0bZjS=2>besT<-BZV9z*O@ouf -4q2!mmgp-T939|uR0QJNj*Jhs%F^5@KFHjmcRCr;I`HBX~$5B|gwOgpjebDQI;M0z#KI~bN_-!Xq)qI -m%9soMm9B}LhwtLt`B5ok|i3^@8d7bqPRlK_ZpwW^yf{)pv=eA&`F{xh@Nw8lBXAXQaxI9n79b0$Ug9 -skbU(Bia#YJj{AwhIrRa*6sDd7E1XwnL#TgP|?ImAMP1-Fn)_#5^Fo@a1e^;`3V*<Evs~;Qq{1iNRFQ -Ik2SPX&5F6<?hamPCh_;LMuu;_F;-_6bE+RDQilldqH{P)#VmQY}K=>5rAD!6B}FNO?g!m{Z^kv@Wrn -G>SHC&lzFM~5;fsoO3Z}#@#^9xB-O7lcH+&fR}(+M=YKbbg3nMK#i8ztj-?pQe<AS{x4l;$Qz0Q%ah3 -B_^UI8@;PVB>R`Bui)9}%e^XR6bT%}#hL*`qUzB<J?G1nRO8&iuj({Ba)C+x&22QIv1%)=|fd`R;Qry -X57<>=DsMlX<R6i74jKj|t)x`WtF1HRh)v^hWb7sODS*o9KW2GhgNO%1!y_*^(?>dP>Y#Fg>HuXB>VW -+P6BH_^ttkD(;WSLTO&dF_9)!Hw-td_XJS=EGqI-E{U`@@2ESU$q(dTl?&*W}jWaW>NNvwpIA%`o8X? -RbEk|3+5@&k;fh;V=ngXQH~$kMvT@}e)@tPCX}fZDv3e|5Z$w+bl6H9PR#Cn@Zr7t53_eZx@D(uw)vW -&+{785SvqMIK6;6lx9aL@CsNClCoi(~GDMSQ*k?Q>lplfrpSXFKnDFGs{Y6TVrefymm4U<}2gCF&9bQ -0evuK@T4&vJehhdOl{86rKG{kuflXqTHm!N_4VyYM>za&|P!O1KOq-86OXjh|8p)77OxT*Z%W?Z{LU? -Tu*Y(^MqIDrr_bu=+kc%av2>P|Q~%=3>@)l4GtK%x3|zbE*}3?-wE{6xDB-<*c)@ysQo7XL8P5&{_Tb -Xpf%7-(SI9vRT^=7Tw`=F?Kfb?MC(QC@=a<&Gc2K+{RU+o*8T;T{avPCl<oZ~~RBqC7%6M$bJ$K0^)< -ZPCCPI|l8`fng>HO-a)jG#8S9hv9LdIAMEmD$AzzrZN%B_aWlIA^_C`Cl|t*w|h+Y5}Dh&`$14X)4d{ -GMS;|LB=#LEi;qD}<vO%>Vblf?B`}Un*W!{9PqS<~KsY|Q(3e&3?~DW*X-67);Wjw;bnk6>L(Y&mLgU -+Q-T)L%mkcHpa7kPsq0d+ah)|O@wGkz2N)%64wZ4ua(0^4OdyUc}KUm#=YpDA|#N-|fnj~#3QH-$6pj -y`bxGt;MSPAC}Xci>g>8uFmQM!9(JH1)GEjyJlA0|qTq0iuk(@E)%VePAQ>18yi80Rny$2KsYSU7;1` -_xYc`3`cpkZG>KpT}Tk4fIJq1BcJd=W?gE+?p3Zx+Nc99^~UI8bg^6NDQc=Z5z+RNS_W#{ZQ_Jd}w3P --Uu5eU#wh2;O7?hqdsqnbELgs8*42*SUAU4q!kM-;6|`%zktG}Qqa3|=NPA;mS+<W8fh5)LkKX<C|Hq -Y!<LzZ^&qZ*MXURqkxjo89FJIXl#nbKRxqWn6wz{zajO8jt6T6gO0bPrjE+ZK6@gn1)QVz?ei)PtnvE -ic;FX6pkF26Cp$yNMqVeRkAsMbTczDdz*1EznA|o$#s6Ge7bS8R`W9G*zF!ua-#+>i)lz0vX?|Onk?> -k<UA2IN0S&M!W9+Ek#%1;5(iCEB4qu{|0JJdxZnqztg8K5cuk9Qb@=MAY~T*fD?I56zx4C)JG)Ga^Ub -#52Vbw4`9WZv;(q^OJ3BAsWXijebo6;M@V{KB1-LsR~dTWF+}(IrWND)fb}ej*5mPc+Vw8oG$bUUK~9 -YRZ?W>B4L=R@XQMoU^IE$O-d6or>pH;!BQGjbAo3T5sJ~D;x}`CSG5ayerB^5%9enw>o_c)oa+U5!qT -!9dU=&EP9P!n-mx2mY@3{LIZuiaEGbF5(jf|OjN^o0%N@87wI%ckw9(qE&<}ou!JtJ%7Fo+2-c`jUKB -$Gi^~htrR%Mr`KIvt%o(2CVw-Y{F41sx_DK(<JJsdAXv5XO7z&8yD16fH*s9DoA(2+yJWtA=x_ddttS -P(H3F{kvym{AH>Ru{lXdqnG@hr?-goMDvQ#Yx_4I_iLh;`m(B9!vXOVKm!pMf|`rcVbg{JYhFPP*A_A -YBhh$m9)Y6t?1#iLhPUmEDG=(*wO3OkWOlZ2bUOeHd@+mX<C|X~0BUV#aL1)1Z+{U40&g<?_iP(y1mx -$Zfb1JKKTPk=lDB=CjL-0<HV_`aHT3=(=z1x{Mc>nb5s-v0FGd(r|rL6jGKKbD+g4GHdNMX*BBLHW(H -nD_m!!WBQn10!f-1gKp4>SSmJK;%U$y`&}9kS%vBnQYN2qX|q}%5Iy;vD}wSlPZZ6EZ;Wf%8u3Mki_W -X=3oIXCTv8KE1>S<dg-0>Qq+S{)X{kS5L}1SwoRkIA0SXO;8yIqoyPi8;Vbzi|KyMEJAM4auK>s3%$s -y_kgbtDEZwjDpK%E`D1c75!2XaTW08vEA#oN3&>374kefquXpghDort&3T>Yz7a@J=bZ;-sW&DY(;xS -LPk##wTtg;Vz_tUwp3`n2Ww7hne}}<lpLPN0hF_5}Amd-y^*Kkj}Cjovc@@zG+x7Mm>H07Tt|1Obv3> -g4&UMH2a9Pxji%Dk6qNn!Dwh^1G{IVH82W|Id4@2@@r`{eXH$2<-I-iY#$kOWoKpEwQ&$bU=gCNoAiQ -nIeHRAOH;-5y9TCnJY87O<k}6v;`W`@B9F7q=DxQzfI_TBc5@f8S-4EQ;}&Cm<Ai}hTP8SZ=_{A^q(S -cN%+REV1AG#B0>}z3scT@iXf>IbMak>YjX7o<#2(7g=8#3@r!1bLlgIbzkyIEZj#vJ7tlO`p=S+W?@> -6gyrtp8)WKZDLu#Nf0!~gj6UmUz~=nT<0qo^qp7M@GrNFG&YTyz~{4wZe+0}njWPk)b|54fCo?QT<IV -|uUT;Po4a=B&nb0s!nuNI@?6%Bq&s-3Bk$$Z^vKWQ8^sC>NCRJBm8GCI*ydd%Vnz6IK#ahezY&Z8BBF -ihh;jC9%{?6;8|}j3|TC$J~J19clwN@!L76<GR}HqoO_q>UaRIlh@P8h@2L9w5{o4ppAXZr(&m+Y?xt -`;|xQFxa&bLF$#t~`>5jtFCY&VHiARqrHvC*<Lfu%)rW;=(`%g89@v$yO=rXud88P9PXiW~OVrH6=?| -is5gT)|Ep!TJ!Vfu9fFGwM?k5dhvaUpki{C7<w)#YNhIL7KuvLD3`n;u(`>}itq-#ldM#jjhcd6AZ5V -BNdNJqnRe*aZ$O}xR3nEQDD5`wmK8alfBAF#BPQG_=y$=y!dPV+PGxUh+}HKyZx(Yx}U4sYa6DnT$g2 -_GaBy||7}YSerW)}=f+L{q*=s{V=r$_FLpYBe%*8Ajt~?tm@$PNtoc-~~4hJ)40lCqsMoT$!2|x({rX -8dydnAsl4DWV3UF{UfXcnI(FkGJKSExSH6c3?FA5O;8c3{_2>P%8VuDXI;cYJzIN65kXyD_tHQOoPdJ -gu;xpegXxVoqObeJk`-VC!$2}FP}A>X;ceLH>;_W2bFr6>C%?fG!`LOWTV8nXlG9b3#0Exjh}>kb?}} -*ZF0ucnn=X8m;+(ES+t@i=?ez>y3s~BcB#EBjVAyzPPvtR><FWu5j{t69T72BMUAf+;Qw$Fd2JO6{%T -Sml;MTb#?JveE4@IosAiOpZ6}nj~Niau6?pacUd9{!2%I5M+r+G=>=$tT~%{CAH`hK|M0@+l2F5k!V1 -8CUo2IiibDm|f><q8Q!ds!cdteOGA5jZ*hfjzL7=~jgU2p1oO=}Yg%7c~Me#4h15*h1!}a2YvXO(+1x -m6T(9@Q>seISr0CHiVw?2m@w`uWW+b{Gy{;GX#Vrl*P;u7N~FxBhsGqVN*j~T7sV4V36tx$1P66p)a- -Fb$gk|Uy6_#rZ&s$15!Kl=-&MioT8p_Mq6r4SZa<~MGI&V6?^zr;%3l(5ZP#oBKIkTI_4V#rlad>F7h -(MqRX$umA9D;2lWueaNu0iGYm6&H@QMYDRwm5+H-aY2$amIbbRB)oYm4$8ofn*u<~n{s64XGpjH}jUh -j$7$kX9^`jno1napqv9JP#ZjlB8hFxZP3=lFnS0buSfvBihr*P!CU$32^Xck42JYiAhG1y&b)Vzk+w5 -H>gbPxjQnkX=4jK1_o6BVpqLdoWsx51+Q<l8eu^klG%vb~s)v_vCK8NV2EnlMcdBpojNyU_>U967#b7 -K@s{pU>Ue~WtC;q@CCqxXY5b2aR~qKaq!+4e_~LDSeAJc=Yf0pKl}H;eEt{De*Ns9fAudvdHxT-`0Ux -=fA+KQKmW65&wum>zxl}@J^#lae)jCg|M~qt{I8$>4ZuAA*<U~Z+n@jHpZ@OGfBXzffAGuazx?rk|J# -qA|L{+L^RGYs&5!;H;Nkmc&wl>=2Y;fNQB(Bnh7Q@#->|^1Z$!EA=L6Pt?UAS|1=CPnpX*by<n4T~sl -ICixE;s^`!Me}(ao-5s5}Ce(DXZ-yePM26TO!=Cv^pSF9h}QxL*^@X&$ntrnm5vT@~Fa^5fbmceLm<$ -IG4h79Y|a^Q=>GUA~hIqcezUgw4NZLK{j3D|HymwP1oK4GxEMbGx`u%?|`@)+Zmgo8n~s@dfXi4q>wX -#))yMk$Ie(de3_z`ZxI>P)h>@6aWAK2ml;P_EtW<7n)ZJ007Y=000;O003}la4%nWWo~3|axZdeV`wj -Qa%E*MaCx;_+iu**5q+Pp=+Jo}*A$_VFKZ3J1r%GmYwy}#NZRbfWWZ3vo|#_p23{-;kcZqJ^N=831PB -5oK>i?~<S)o4q^i1`Y~Ca#>ku-A?5?Wry7Z~)Zf}Y#Vbwkt>6VEk&x(q@tauStS>dv;MOnG*ZC;5i4P -%#G)OpNjvkmfiL7Zi|=E3)1BMPLa_c$yoMYzt=GK;w;eJ(#;{UXJeE<59C1S4O@{9>PT{e8yEI@Y4Tu -k$_3PK$aaKVOR*kt&LWhh<$fgT0oY2~V|%l5g=#6P(LW-C6D1iJs$!D}T<baDAoTadsws)M1Ebv)LN7 -FWE)Gxou9-S<DzbmSvr=qEVJ@vVw)I0%}%PMZK<I!rqKXPl|0Rned6jOCB@3YbR&HE_U3M2jV~uiLIc -A1QV;*NRoQmjXEyNl#@XmwX$pj+@d6QkG<fV5ZnNt8MCm-YK3iU5%J)@BDthzu}FD2BG|(YLps07Lr^ -VZ_GOmE9jPaAnXyQec^vN9dMDxttk4yCQPjMZwG-Q24F9STVP7_VhAC~aL0dXqp`V9wsicB0rKcjkVL ->2LQ3ZkB+L^~2x9h(}KhB%(Pu#A57HzmOUs>H9v-$|3w4yt(;)0>#K!t{JhlXkTNk@|a1}m~`l)zyJp -RqSt$`>8QJsGdQ)Vtdyqs5nscDu}Q@=Z0nWZK^gLa8M#wiVDXS6#9ueEh}+U4k|y{MHP85~VzmsQ1?G -VHABdk87-5HXcQ#(6$qvzYoLxo!>}9!qteEEwr=M`Wdk-iU7XI9TF^NO>Y;z8iRZk2y2Y?v0$uc+W!N -TnZEcKaMp1iv%Ajwk>J)0a>gMar9C%d6u^X8%CD8@vBhQAJF(ue1m=GUd95zMMg>c<NNfa;JTq#V_cV -(*g(M`)VW_x6fBOc2kOuTpQp__Blb22Ilw<t?%7B#4rzy+ma7P{K>lb(2FMbbYU@+su9I9z<B{}1m=Y -@F=ezehcElEM1B7>SasQ{M*ss<b6CZ;+T%u?l;r30sI+f<2W88~1TXMhI=jzOWMFj*IpOR5`}GT;fQS -3RiCp_23^uLtjKdtL6D4ykk-IQ%-m1qS`9h@<spJMCn)ylN7OQq*hOT0wOjH)OQDJ#4a_F~r4`q$Sw> -NOIBSxRQL!auCE?(T%M0Z%&?{Lh<|d&Be<%-@@DHZ_mDR+3A}XAi4<CEw>*VDx91@fB7=_;@g)mPS1h -Bwy+U=Wc^D0K0G*}-(TWyJLQYB)6<r1*@?|o$cOj8ZQlO&;r*}SPkp`DUyeJ;`@81tpC8`;2L9C7U-Z -{B?+<@!-v067hd;uf`ueN>GI-lK36!T>pSPC6Xivf`9*{$90r7dWU?PPbiCHC4_$uZur~xXy27X9pdK -6ii$NU}StP#XFVGJKw+G^=|VYwC}$kKS<9RnW~w5Dg5G}~1dU;q<_%yN96%^U3VE;GPiLJ<3?ZLM*A; -!sDj@6ef=h!HBwLsN;EZ^QLIxQ5AP*QJ4ntFiei_|Y!1QMxj{5zl1IQUQb_B``2t*RBm?Z8@tBD%b+R -#csBm_7d0P%5luq-!cb;AbNSzX3m~o#*P8I_vG&L!Im?7r}U9@rRKNMU%o7?SnDO(;+XNAR|tNGZ4;! -|m@A0wB}QlpR4N4kwY$!)im@;ZakH*?Qhrm}t&}c1zgfdvVD?!qAswP)L>_t88;*_-M3wUVpsVL9+%F -L2@?gGFX?`3@hl3*v@Ef5d!PWHbUE>E$78+3lpS!6b)l?#_yECProw6{R2i!4b)S+IGF5ElpWQ5Yt#6 -yMGbx|PZJv8zgPSl$;US|(?my{9yyx<#g)B0PXS9ixnpfh*aq7OE@jHMc&G!ne*lFjzOpz@4H&Pi673 -ZmQrsfNKikHU%%Md5QTqH5=B$|SrAsAZJ)fR%M(ld|5LgPUTWZefXImXSF|q{=8Gv%zPosGOkYMB3d8 ->SttxJd7GmzOTzlZ1z~7rr?F4j9zqs<B-l)parPKpeXJ+(;3D$>aLFsF&lve+M`6f@8uBzYH(?`@os$ -ff<uy|Lpz<Iu%3+fDn=(6$uJ~*+{pS-sTkJ4w#We0$F>Xuxml^!h(D4qrg_J4$xsoEbqkHIoTrRQ#wY -*XWmefggr{58rV3a?o?PH<#&0Fw8~de6hT#Y+yxDD|GSt!>8{HdfN5{NXhyOBvjTB}wm8xCd=mfgCK< -3xf?x^VCI-JYN-6IbUTRNEz)7L1b5BWy2=?M3D!KI(E8n3I}2$MvghoJRf1FY@^KHdh{xLGjH!^XG2w -B^MjmlRT^>W|y~CL$F{olt$)#>CCAP2Gq1=2Zx8g1Z%Yhi9_P#OVig7<ca~Q&CfW*|7i5<s~~n-}bwv ->#d0q!FW0#T(nxyT1maxYkf<V>FX(ZqK73zuXY1~p&hB5;V0~Ie=Ow`7|1q8h8jt-x|*gp$;O++Xw1@ -Jlr)24lIGe0KWdo<zjnEG2uIeK)bgR}2etDv0?bw#88e*C1TMxjOkfcrGFd^8gkX-qS}^tifIr+O;Q~ -+^{P~U-as^X5%SG-5?;!fK!o$Vfzft@GGH!kgc@h>^u!BvTOF{L03kz5d>oH0H4Sw80T<+5<ylHL$>F -XBqicVh@^#y)NU1hs3o9rUHR)v7SwD4>s5{b2P3{o$QqF|lHb&}fF8IQsIJhD_h>s#x6m|D2O3$BYW_ -wnf1nP9#U72%%ZOu{YrFtnz~f0o^_x0{VvBaf;SeXGD~vlX(1I7+R-d_gVSdcoK1=+K3K^J7#Ew$ugt -E-XrU5pX6-I$=M*+Fyt96)%wHr^io@-1+>_eR_O2m>EfZ9q!rD6O#Ijq-Jr3ht!R9gqUJa!X6zza_3L -x?xV+_jtj#n&ZV$VJ5yw*xyOD!pU>r7zsCIkibsOPg1|>d?vqEy?z3mdw+Mbpf}bMKS+=b?dz<p9sY; -oT8<{f+d9-b}EbABQwpky$ynzK4(SfU~mMehX1zo2gJvEKq9qD@`q7Wq>8COLXcQ5>A`piqkysyID#t -Fe}^L@3;Fzl)w00D$jmS$HW8V3u`Agz;2UX&^rXA<Vr;`Ez!*`{dH@4<rykR!qbRPvH&_8I#UHcy$$z -RQX@`pN7wXwjT32%*f9cSbvrZp&uAYBY6=N4E{uzyJP+f3f8yqflL);nf9QZ@I=si>}JrTR(H=>gWWU -(Y>~{*g)P4Hdzdt7W2}tv^u31EEQO%GB`?sYUz_3DsV<bE$N7Fk7{49PO2;s>%PdkW_rc-<dQ&wNYwb -xzgHf^l}azp-5lDyz(ZJQYp1yo90l&SyNljwq7()IzZc~|!`8)PswxCpJ#Pf`^)<<~hew7q?|;#CL?g -l7m%4ZxQQ6k38h1Rh$Led<x~ng}Zzz(8b0t9&W*Bfm2x^51`*Hc;ufb30&e#8C#_o1_c_Cos(-wR7A5 -cpJ1QY-O00;maO7>QdzUl{X6#xJYPyhfR0001RX>c!Jc4cm4Z*nhmWo}_(X>@rnUtei%X>?y-E^v9(J -ll5T#*y#(ieApcf@2Dnot*53iM-a#Xlx~pCTApPj#ozqX@X4>GZ4T4peU|ZAF$uGKel!0D=rkr_Cr<= -GemcFb#--h-MWAm;&r*+RoQaYh_6q+`rR@7^Y7wMn><s6cq5CC<>u%`2=i~^JkM&i6aOiTPi4FJcjAB -lr-8wR60cNM%d`vdr?Oscr1)M|dAV(O{{|`et#~hY;`=h6tLo?lfc%i9s;JdmYzk-+%}R;0wM^kZ-7^ -t?gW0mO5MRe9B0_+X?i!8%02p@VM%)3?qHM&bR)8X_#Ujg<P!FkEHzF%UTHdYmOctpU+pJm9G#W_^D1 -Oo?%2^`;S_1qUo)$iwkPQ*MYMS-*%P+UvZ7hk<xU806<_uJS`NPHQ^UJIAV<48me=KrU*P>GY*klzfb -G8$54YZ_k1{CIUE6Pg9Wu>66DUsG~l{HzhoQS$yG+S9Iz%tM3rpjiUCSa7I4A$!d0IOsnMrT*z;%X#b -on2jAO#sJ-i|g;-{dg@toV|a4c6ohqekI<$7q8!4zPY%*cy|d;Z^hZ=PvXxPmv1IQ0h?eN^{}pxejqY -K7OFY&>q@DBfJMm!)oYbzi!6n870ZoWDzPl@RaL-p#9CE%S&bW619@}6l4o~WBO7YzEGj-aI)WL?su7 -D#kv3(S*QTM~*`Lj-QgROXZ9{ga?C;$gXO^{SOcU@Esi}_^Re2}mEET%r?A7ZDJOdYH+T5vTRn8eEEs -JzhRjO!&rKi~dQ@A@TaM89etJAV7H?V<<$cDuo!BQ`{SLV5xZL+*MhJCJ7Q|$y!*r;WuYT}}jbq0*s) -WE!$XNVb4Pe2dJOaj-%3y}GL$YCg)?f{^z+|>ub6}#twvPHs&4$tdnK_{?T2P`QVl1e!5hYth=@pI<G -VX)nsyg3N`P|!lb$#@=YL;B;F@#zjQ;9>lHCbdU~qFl)JA@Yl0=H%u|ty^@oyOT`~Co}=}6wScI_6*f -cc@PN%XC{H)iCi?QN@UZhyLEfB27u=(m+d3a1??QUE=cDfbwK)LqXV>Ese-wb)aqGIZDrOR!YP8Y$}( -$`bcH4{q@@c~-pxSeJqHHXq%45oOt!hy0bOJdV9K5W%8Im7cZd+w{4=mc`8<6U7$)dA2<med(=!5$60 -dWU=gG$m1hKv0`?%L0F|g?~1>39+*>(-7r{kw2FWX%01p}3_@;6|B7&=9V(87Rv4nBKbN_v2PZ94SwS -Z9SxW<@o`pFKl*Xne2Mxdg`)z0P8uq22}gFdL8FsuU|(&5zS^4oBh=<+v`v^O22MXKOJp!54W!?yu2j -;7F1uTvmmgmjac9$QA<SsTSzakvCJ2zom-%tSSpUMd;dHEbK6Vg+p_U6HY{<3Ylij4k!X<dK0M!m4e# -|B;6^2Bmxqm4Ti%!H7w{JNukN^wJTrRSteq;%F-2#+~nXLgE#jHR|QCbU~pq0Qm~`YuP?z<jE@Y7r_2 -uECYr^m$d(208azk9A7B6U*Yo7{_vf#{qy27rB;e0EhQKpw>9K|H@!=JCSl1qeuYRxKce~#|tsmew_a -7a7sKDJ<^S1?H-BiUjkPMW;{C|^GG-~&b#%{m><Y*#h$b{1-ehqSsVZ==w$FM{3S+Tnv!<=a@!DYX$c -4te_-O;%*=VNBVXf!%wr;nFSQoy@77shK9XkJ7mAs(E^FapqCzDwSpU;X$4uA!WL1g|%8v%M+LSSEOm -HMDtsS1A0^A}?h#?g2n%ozb+GLTnP;i|4aaT5QRoPdR8np^~2z##Fo#rYh#0eO;n;Xh>V-WF>U0akr@ -(F;@#PSUlaaNWheUhE1j%gJq~=v;R`;<){?BAV9y!R6eiukoV_*eV@F&IRD|z)l?IDFRP5gI*x;OL~E -ntvYJt+`DU&Jx&P}bs#U%iYlN3)e>tDhVzW6e6yhi%SlC#BmnS$np(skEK;cZLpK8N5UVA`X6JJ5}sU -Y~h0j+lnyBG1CJYy5TTeH$J-FT)L4{!;1gQO-26Dy9tLEXuW!@nBX3firyU?9lmDE?T2%q>Qb#I2{($ -E9kJ2{e4dJRJW^^)#ZT(j%@Adt;C6v7Mlzqagqz!6XSWJ4xVIA@5X@JVlR|h^O($ryN=a3D<bNeK6uk -3V`J?a-yjP*P{_RIU>D2nmCRkA85Y<N?5)$6KD)=%w~-mqkc;#14%^Qd(6cZvo$#tbbKOuLRuj-K))| -Ii!|3Ft7`HIBl?B&{8+#OZb(B+H2f`)q0r(?S#!|r^oyt0>|q#G#)J%Yu%1}u82Mvk$hh;WDyu%Fb6% -u!4Z)G5!?42aN9}AD1kw#9XgFb{J&k2{kEdv}j;(C>@DmXkXMQS1Zz(_@4e`^52KM=n4sf$pRWy$6L_ -XBm5mG5qkxs-$O?+9hHXpfpfqk8+<Auy}HFrS7b;Q;K%TZ<IoeB&1nex8p9Nj#2CVsjd+1=F&{x7lsC -#kaA%FlKmL0lU3(CpnWjyCDg!gi6=pe?(?hS9jST^=y(miOeN2ZgDErHA{@*2V*WAZmh%CiV&9--P`M -PdBnHzCnFpW&8Fv9CR=9O*kq9chHz-QmD8C=n*+4@wMs18Ap1QKA#qLR+jl~AYq1VcHA0vjnGI~()^x -K?%JG=;e@+9Kol9=6NhZ#7BL=&Ld=qOU2VuUyV}CumRn)b#g1v9LqbAchz|-}+TvduaC+}K&B($(LA$ ->JRJ-_j()D@4h4#|MCeCv|NC-jIL}#yFYY7YlcR*CECbz!WjnTGQ0VI>o1~H)t(YDe6Z#=k?a0IMJIY -JPd0&sBXUILu;ED_Fzwb6LupYm#F4wVHR$hY|eS>c9DX&+5*9bxR}&`@-BFqR;2Ytxcg=6Z+ld9=oZ@ -p(epaw_o5K<`@#V%K6>qR?!CPOPWe?Y?o=3{kqLfsxu1`y6`NWe*8%t3PA?>Hk(2#w08+VFv{xEFe9) -)W}2Fr46px*|3viX1!m1;}S!r|Ja_JZPuyTkFXn}X<#7+Jtn0eQ;TQwypwKs%L=z`*#oY(s69qEI|G5 -&KhK_c<5L}U@~zhebF=@{)&XX)rwjHCVufG_ImNJVkX8<6l)FpVH^?c5?uv)b;68j-L;O1E+PcDE{XC -tqpKDru804r%o@H~WPz+UV#d0tjPrH2X3bmFQnu^_4-v)Y)D|m5uiOZL&I{u`b6s3FCvI5T$wzC%LN) -}5+fkL6wTqg~@rEoCeJD%=@*>iR31utwVJtgQFD|2iDczB*T#n^(z^WsC}^TcV(7BsQm2d9RKr&3x2S -PK0S+%oZ%WNQo^1b+xMOgxR-J4w>vl;1w-YUR$_NSwpfQPU())O{>*Lfv7G>zec`>V4?6a1Y|t{e6ga -mxq0PaOy%!WhjS>(H{o`By$2}BTgP3vpM6PK0JwN)Ivhi`Dmr_X(HMXB$1C+0(&5MqaWP~=z(ELeRPc -JfziVG=t)Ko6pQ1dlfI|%H={OJzg<@)M8?g|@)&*YtZuTjc3f`aH(A<XI>~6CK%;PYETouclv%;tS_! -fAroh{K52McH;otR&svImlrJ-j^V9dGWWF>|Q7=2b{o`bitk`V0BMcPcM!V8>>SbRWuPKU#+RG(1t2< -XNP`F&Py>U@VV^@>u{6pci)jq|8<(aD&*Hnm!8a*VgW#1viuT)vY!ng2=cI9*49Q%&SLf;0h{u7cPCT -8)LuRzSbbJx0W_DPovTfh&rUQ!+o~(94%h`OBBcC(_s3m284tw|~HMOk7479g->s{Nss$<sw@vOc2AC -U=9)R!opv^?8n1q048j<z;s~IM@ru23d~C_Xh*i*1`FwVn!(>v(!6s)<L}CQ_*s`GEhJOS$s*Ti^{S{ -hm7;5her$kiXTwKc3+)F`JI|FBpB+S=xTPVxp+RY0>;3EDHY`N22dl3-*p2NW$Lu$%E)l_+z+~P*u$s -YE>rpibovb+ctwHs$w!|uzE;_A}j!nhRJgeXtR!LH5p2oa9IyFkBE0WnBY`od!wh;Fj>{RKWZ$?4Fp5 -hTp@xCD9Yos1jTqYy7iVh0sjr(klw_GUSz$3X_R%(e!9l98j6`r^rG~WDl(?ZlUo5r!PRlMBFZrZjr& -ikNEiao5Y%cGm3JeI}om<QeZ`5i1KJ2Uxw^51%rDBTJ09w(J`6Lr<%L_9wA<|q15Im@=K<hnK~^{KG8 -L!^G~Q=oOR71(btc=%d{<;oNIDLHkB^vuD+e$kArK|c5G!?(6xD`qMeZiR+)pe|WNFJ-l?b^3V%dgar -0AQ#=koCp?9<9XotD42s?1awq;Ch;1E*wx+%3JAUF@YmQa&qZZsZ8p-z;T;jf`;cS4ftueA4JPt!s7e -p}@wELKi?1_|0gg$V-8!L~DNy@EDOBysSks(>POsX*x$D0H4@g!`f);&*AqW15?@CanWs#-(2I@?5Qf -%&Ks-nSP4MS(3z!MNlf;(}G$-sj-DBaAm#zB?6#hjQ+OY6YcD|<r;=(jK*9haL1EVk2ycxkdBC!?EiH -8%pLqGBj9YuC(xkvCtj;;<`-Jh9BMfDDUHu@*%OCQzntAjlGCwYh+au*ao-!3!`q$zy+INN&_c4En+O -q5-wz-s6Rn*~<+dzn6E~pS32KkT1j1LPcB&tTk0S*wE5O;uB_(@#3r2uq4bK^3bynX71nP-ax*y%f7z -p8?krm5&9w3`lcOv;f{_6DC5*dml#UbS;Ph~YE2wMv4L)hPj^!(b=8gi4e{9Bzt-+;ff;xbpS02@yor -T+fE{KVb{gF4>TA@#K}Ms9F9x!%y~^i#;ErDV0u@__Jz)*eUeWhK2Tp)h3tWO>ZjZ4`-*2=o&YJi;Rl -sgHWpxwY_;IdGXUtlLflWs^uXk$~>RjWu6sL?3t?4N$8aAw_zE8AWVI@CaC57v!;vbqiYaRd7!E=HoP -)^NZ?UB`%<L(jIQE5WRg2U!fdEZR50X_5hq6d*DxL+hv3Cpfk=IvoFD**W0^Y<NTs;$yde5=siNdqdI -;oGi75!~!h*-^WM$-CqXTrbxex?o-svW=>Jf9qEn;8mTUvvg$!rp3zzv@fIoNmuzZP7-%=40vjf)uPa -cial0+thC$uPjIw45t>^o70-irQgqzy&Hx>e1y}6WO`D2Wzd!kUV3MJ0?s`|F=}Itr6OG4Rf4f>9W5a -Eimfj=RH=A~L_`m-TdP7?fkcwv_Wh%Qw7V3IUV&lzMx8j>q@q5P0l{sW!vh<q0P<)pr<_@k<x;=7)JT -t)R1b&P{@PX1JDI%Sl02>dQr5T&z6~zU0l%5da@hw$jW8l37Eum=#1{J;4T<xNwRuB|o!RywbVJHL3U -c9s5cs<pZZ{4mGWr(D!#6bUIrcha~bR8bQJxA;ryutCjJKsUk^wEa23=61YFgTmEiRgZyhg}n4i)ScM -UrFz!7rwdYiz;2*)w-h6=wWS`V0^2$m&-x@WpL1jK5<Ax5ZZ)u2L}S3+fZi^+53D{GejT!7Q73CLi=V -_yp>^k!d$9s_+3FMFaruIoMcu<`+PfRY~X;<4j4Y)m`sDJn6`1WSC7`1c?Pl99u8T<@PxdWGU>b|3c4 -t90Ke|Kp0!Rd>`N|Kgm>(~X_*L7`Rle(U<(isy|ty$n$<IXFIriWL%fTEESZnvtXgic6uCBUmo7dRDY -6k&1N`SB{<GR`%W978zi<NHDVTzP9Qm_g4qR&|jo!Q)*(spxDl|IhK{5w0{(v>0I&mVjRYbjP57-z}$ -Ma2UD0eFg=h8R=>0~`%OPc+K7@;!j$UQoG5hqp-gDJSoV_*g>1TXY!ZFI%MmE4(X6{(moa>`XBt$-Gg -U4l*5W$$>2GFNFfcMPd~2@f%Q0dPRJ7Yc_J-#r(6-9(5VEw(t(t$FS6uRkH?7v{Cv2GAV06@k-qgZ|L -I<ff6r)?N<G-Urn(;9qnSmtj64th4uQ1UnUADf~2bNO4o|Q+sUYv{TeWS^(LyPUGH{PlovbC?-HpxDs -a|Lt`V1e@$g}n{}@GD{CjAUq2CjwXy$AOc~t{nUi0eNp4YQ72w|fa(+EirqDV_L&rx)P9u8Jai<#R^i -W*kqv$O?cTVAH2<#{GdZ%2BbRs!=bTz(x<rA(O-_vm9wOu9;Gphi={TR?>QpQi-#S^GmD(L6;Br1GKD -hkx=M11X4DuWY<beYw5>FxMvqdz|CL9i54{qZ!lrSC5ud!*>;51KH{C_d6pXd-jNi<pW>{_*q;*4lsD -#Q4nwSi}6tUS&mS^Paipi{p53_>tz%&#qNIq)z#u8s+Ne)F=N6waLG@F8NoiN#0YB+*3M8%5mgs21k9 ->$V0V)KerND8+SLxbM&3y-TIQ}r0wOrb>})CyxHx!m)5VmVjTB(6My_Ye6>&CQR`{eWo_P?b>1^` -1)`9RO3HwcifPaV(MjYaROZ@dX9UtmnnZ~20(h;P{w!}~P;2?4Ui_X6{5F6v#;$cH1X(Q{QqME_Wvf} -3Dp=0k3C$IZ#Dm-VU4+iHZ>K^!>^YGKVSdvr);fTqX4|1&qHSQ*@tcrxEmiSb9&>Bhgs=({rbR*8MPD -|+m$tRp^|_1mpz7pXb)6v0q63;3%u7=(o><YCiwc-AOriRQp|`aF=5nsulB(?=k}<Np|UXKPu!X{%7S -%f-&;U!p}{?hX#x83;sbbJ=`m^kL~q3z|2cxoWAVH!5{oyj18PWp!dFPt5G2F^%vb<6gKyDzACuVRZJ -U4~@3!8Qm8ER6S)CUO@vW8oFg%XX`k*SH--nV)Jf#oJizpR@#sH_$;=W;q%{~d_B4N>g0sq6Xyjo;lr -pk*jCL9@)l?Cjm(7Z6=1<PtR>t57)|^Z0Bbkk``E3vViz{}=5e@(4CkJ1_tBgVQ1=5ly&&wZbh`SQ$v -X&}dOv8hhhF^&nrDb@LFt!ry$AoRGPa}hC77Nbsu&2{-R_wWx&+U`qI*8oV!GVtRl*kjmP*j(eflG4r ->~?0E&eA_f(~@Tf(HI5Nl(-8Z0=hnL)5jp-G@Y4E!wp*t@bM)VM7b5{qc?7_SP7Z7xUnKM1dPjWs7;X -pExiL_7=-ET=}x)UJo}dUS=g|V&6@-gty8*GHY7=vEH*zfBU`8ku%tRwFiy2NB;*<O9KQH00008031s -8Rt3#!Hs=HY0N)J&03ZMW0B~t=FJE?LZe(wAFLY&YVPk1@c`sjKb9ruKX>TrYdA(QLZsRr(eb-kEoEI -sOl{761)P;*WiMQ)^>lCqfgGFEnv^=u8RY)yK#c_*%K)<U$)*&TdWZB6E1*!*`B8O+rTuGn6mCRR)&l -d(R&cFH={`uQ*6awKAm1c=|vM=y+k&ysgGx13l2bQH?6b#-nmC5D)^4D#8eFL{_1#e|GL*<>2$UB~(& -^Uua&=i;jLN8|t{ZuO<d>}Gh3b=^Q!M6gfYN-``PY5enzypB_X`s+Z5L`pbGX#7}FgL&jB=RB8I1>rN -lADE7Q-MST@v(xCQ^QD_k$g^H>8>0w;|MQ|$vbCf%jGg+j%Xy+{46Vl^x3<?Rew0@w~4G1e=joB8Wes -mxFR#BD_}WsN!XMaW^4&k0h=qNH6tz8rQ(K*c?epjX2}#1%8YBH__Q!JN3EHWy}JVBDkh-S8^K`Ig3I -1$FbWCdZZLj(^L`9>z1!Q~a6IUb;N}*tZid%`@!)1iUvHo{{0P4chSwn=xrx-^Q?4w3BFU`_ac2EBLa -Y%;Wl2cqnDCS*WS5v1Y>qIOkEjHh139V(u5BPS(VG!U#viz0#?3U0iad`LN@XA|L}H}O^m;<CHbb+@E -jH6&yi~~t8m&aaC9Fj=#M~>Fa-K)=BZ`?+kwL){ZdPl#o-z24n_rnA(&}aTOQ!J_jarfRm!+>|h5sd@ -BS-l~L8twSW!Z>ah@N++D6MezM$kf`#2C6@qVX!n4@~*3{nb{m-Ec&*6~a_fSh^;%YHYgRM^O}#aBs; -daCU;mVl|lrp64YQqde(Z|F1pc@46}IctDSfNC$R6@6${&GdT$Cxji#XA&$A=CXRiLSsK0)hD>xDLO4 -DBol0u1?N(X}p#1|3rNEM$BUn(T`a!f&xZV<MMTkP=0N21JPnUcZ+k|-0W`Gl$q}TyI7gFK9tp~+tIH -{q9kctj$d`~=gNH$ozt&aMBTsw7+Q=D_*2i|5@*<i%lrVLT9=a646%IPOeOn1$yn-UwVyK7$|ltjAwE -?F*Y!yT()$CEB}(z?iU;fCD0qrbZ|4r+UNN*#?0TA_aJ&t$kQprDR!9|CDkmbU65Go+r`bRbjw)6#@y -K-W)oVA!<nyCL<ajt!xZpIHYkzdOG;qH1GGq|wB<-t1Gais*}SDV2T@G}3{1wC%*C$tBZx%&@w)(onz -rsT+maA!oW4bHJ6mz|{70I(uSj?Xkco6SFb`e$#8Ef44<JTJ~8SGDW$RwHdPS6d~J8tlFhOy$4VdRXx -DvzlnZAfr=Ta?(01~bY)$>CtKx;aXPPTx9ck<so&Ka7L>_v4^(@bu-a@JX$89+*glCmM(aoo)+Xa;3v -p9>r3tR!{9sdifBqGCdrq`FnmvfQ!0j-tyQuSDs<&ZAqlRfS`LW(y>tPrfnLFPNtfOtcd_nRa?*x@E> -PEhX^y{jn0rr2?%rU=h@^eWig7y!bDfRPW3!T~v!1~ZDcc)^@<plad7YZFP3E7w`OypefKj^MWH!piz -R<fWwE0%XP;uCF;oF6y$w*%<gY;~i!R5J6QJ^rf7r%~NORs4^)`yHcxqi%`n(cbE-d$X>ST2qN!fXPL -vsD_OeP6%x>f$X16o&$;9Uym(P`TacHexcW38+%Kk_9M#*I#K=wP)h>@6aWAK2ml;P_EyH4)Bf87004 -ss0015U003}la4%nWWo~3|axZjcZee3-ba^jdb#!TLb1rasomE|L+cp$^_pi86Fu(>J*-48%c*_PY$r -g8=GsMoaA_x>(x{}#Yq)Jk8w4(ogm$VdHvo{pegC$)aoqO)5kKkODwdVQC!s+<rTX<IqjuI}I{HUtl( -cZB#tBS!D(?YHPdHm*>e%`_jtKmwC6m{>2An$pC(qIaeBoo*bLR7MZZq3OM{y=TGl5iT1q3-}ea}*4| -BZgX4P!Oq97Ak{8!3|_wAmB@ar3Ee_QAH^@lL^9_+m(0Ikc33>p`lPq%LvT~U(#E)ivwo8;FY!IWHef -@*CF#lL#6YP*nrIF{q+2DHorV3u^xUa1sVeyKUG{)n9CYiNm>%NB!z;lL1|#QMmn>~X<ch>xy*-PRA$ -#qBeA61Sk0G}?IfyIM)B?fC{;{C5Y1sa58$V0KAjJV<8HdRy1re&U37C3%@)(kIb7es`St8#x|m+i=< -R2SW*^|!>Fi<%NNFNB_)==8pG0z(LQGx0=7=2unc4_4B_=%M3B@JziscBodPXfN94Jv2+_*v-l9v*T; -03qLddpr=VXsFHm9}7N(>~g|B&uGfRRJlpXnBFqp3!rP!m?hExap&?U@wOMg%f&>BxTlOPCjz}?BqCC -1mHzgz%vsS)tBy?`?9#o*CoR5b!;3(Y$2hPTJ}V`evAH$@1p4f&UU@P2u{g!iW&8uOk<@}E}7_;%EYo -NCeHr=j(-5E)1(J<`7};^KN)H$l;N5`@e)(cd`r2v(WT4<H!DYhnhA4sz2S9+CC!Cr;u$n<;Oq>>8+v -zXw3Vh-u&cn^P;{Xu`%q&KLr?diGCd4^vk%p~(6{jY*(;tNPybV~!M)Q%35IXrWISjpVAWUTza<MkH< -&M<4-pT(1PyDBHcprjOO`yvk`>rbmXoF@!*e=ty>lOi;jlGEvVQ0~4T9hov~I&RM37ZN)W@GHMya9k0 -!K{E@4(ZHmYO&C_FE#9TBTJ&sK-Z*r6vJ`$458+j*iSUSWR4RP#cH-ZZI!UT0>oX|KKfF*W1jt$F$Q* -lqnI1aqL7n?{PfX6l1ebBipQ+ORbgOa&!p)m2{WzD@ff{GV|K#Zp*j4dyUcN<Us4}iKB(MqQ5d-Nxz; -p3&@l!E?<CKx1^D2v-vk^vM-gyA3G!@$OlzWSp<dEb<xQIr=_NCe?07d@&6LB6LSy-;YY<~zxCvXz%9 -eLlHA6AkDav*c`Iq#-qR=yArp$x?R9NFY-h({qGW3NuPhVj68fI@1l>_`mhD%eRhBkY%QkS?;)e2I-5 ->E5w<BWUtG4wv==}{)O9KQH00008031s8R&f6yFGvFb0Fnj(0384T0B~t=FJE?LZe(wAFLY&YVPk1@c -`spRbY*fbaCwzfO>f&q5WVwP3}^(F0GW1^q6f7Npvp?E){qKGX<!5au_A}$Hp^XhcW8z%{NFoE(jT-B -L3xnCoi}gZn;Gs2EKSu~nHL0aFMjw5{-~8i4VOayW9s1KRoJ+q7H}o3GR@2IyEFdz5q6@5E2C1h!3jg -IWrEsa3bp1VpaNl0iG=@#$PE5Q>!i`}HoAa`2ZTc?oc_!Vt*N18Qf&xohfE<IWKtpEw*)H!sUb0CrKH -daLL;f@$_ykCQ``&`=179kg7Fo<WzTUSs1sZeRrB-nrfDM435|@+&s7g{=hy4yYO`ORvDgm&Q7d!~Ed -E<d%QlZKh>Eo&;>Ze>XuwzyxkZkV@md=zN$PwC&ScaGi_DTrM^+wd8a3)c8T)+>;8qC@;bIT#eF(oT_ -UrwOIX<lqSKE&V__WyV7MsI*wTJBvmfOwc`mo+^`0WEMHaGC+dUH7g<Th~`{8m}7pG8XFLQH+X_J|_^ -ndt?&3KN;hgnj9}7CAz0ZqaJC0~Oj*IzLFq@=|6|vXmsKJ9%X)3IZ-@ECIC@=LbP%O$n8(qWBhdYHUQ -PMIxz%0T|aLmE*i@$cYX&f34!>)oRI}exC=x&wy1X&pTFs_Fd*3l5LklsXgn(AP7>-KxBkA=B+E3Xkt -Aic0N9baGVfM;p{zZjK*F=7={a<3<)EE2gjJaW%q(0HRxa<jTks8#;PYBgO`t%3k^P^>+T?&Jw#)Lx2 -Wd4Pt>0|Oky5WDQNC1!mkj%xrp9noYJWqI_5R|&HViNrH3!G&cT=OTj27}@3J!`4obVpW>QO6@PY~=E -Gz2mc{cCRi<b1i`q<4ggJ&sGrv2A2hWO_MHrvB$;`mx9XgX)v`jj}6saq)ci$pyG{(PW8C~HShDHOcf -Wm~l)qD;qHurKc4FSY)vO{3q3j|f!mMd2rWzn)Q!6#J$fMe?-^O~(4CkLi8uqQ{{>JMYIk8&?WHJT$l -)3QyqlZYY0$3gHWIw^4BSv={JZ)JYB)ox0dbzBT=srTdAS&R!99_iZCwH{-j(C7IaRRBE9{_J+yFx-O -4sr}sdTd*kK$D?;*0Jb9Y-yTR$T)x&xO{{c`-0|XQR000O897^_9MPooF5d#1K8U_FW9smFUaA|NaUv -_0~WN&gWbY*T~V`+4GFJfh8Z*pZWaCw!KQE%He5Xay3DGtg*Y(P=6ZrFpn6>uDH@fO&H?JNj_LZGFS% -#|WF@)T7l`rUVwv@}W{+6jgQk^lSO@9rp_z`|6mmBo?Z&BYHt!ymPhsNqWJzfB#SyxKPISPQroR+;AI -_K#=$_Y-VI3)e<vXoC}$+{hHQ!whQ8OF&12c_mW54LcG1h1N-<;Z1x26E6sdt#JC59a>XE$)?&6)DGD -~I>@C$z)vYw1X4q4%1TM0Q-ns+u}d?U#B6atSeOF|Rtwfw{FFb}fuIifNL0<v&zq)+MF$!iTb!$2<j! -wai{*N^JY(2SeybHa2NwUSrR6dYEr^O)QgL8HB^odmL}8Kl$avPqN|L&Wz?qyHVUb-j>B!1MO`}HrN5 -=I&7jUbDhH$=v)h>j~`EIp~*yC=szuw&L;cmX&&e!|ZatE6&EH>+_)qb^E^V4rIU*E%@tMyd`$Zg^@_ -^Gm<pCP4hA!fc`JH!z{Zh9bBVJdT(a$UNpMS)P5N3@#DfeLLYogbuQyo_CxEF}r*R$dhq2LUHEmVnxd -<AWf#ri4mXaq@^dGd3pFB9+v_AWUkK%5hvi#Kimi_se8)y<Bijzs~~TYtSlF6rHPI`=;|2$+ioj)Q)* -E2!afAI3Sme2_L&7J58+DB+d(F5RN0lDV)87wb9r^gkgBuMMKIG;L)+DXt{ntkQsC^xW=p;r(^Jmhey -j<hAQHlZXt|(S&70&R5LzF)MXu7;aU8Vdw6)s_95!XK70on+dF?sohcD|if(3t2+N9kTJPe4J&UCO)t -7ESIXnxAbM24!SmLh}Sa0^riR1VDNYfe9>QmxKwr=6buNdkG_<eu|p{yN2rBLuuE!(Oc8Ra_Bg3I|8! -e46rQJY4;3!fCI+>69t_5FE^3#7#N>LAjO-PUBxKYa@CI~My9jx3+17L7B7+$8J21^q0z@u#1M^j}UR -2w$kX4<G;hL_QC2WD;XDsf8L*4FgMbT^`U*zW~XypSaH^d6HjIru|4cytaCnYVa>mO9KQH00008031s -8Rz$^xy5|D`07MA@03-ka0B~t=FJE?LZe(wAFLY&YVPk1@c`ssRW^Zz3Uvq3_WpFNVd8JidZ`(E$eb= -wJP#$Ijiqdt%9=x@H<G72rz$t8ZMNkw1EnUf6X;LMrC_?K0-b+extbD93=7%^Y?>+aN`^6)esIt+#*j -RY^;^*JsuS#%~aK_}nstS%CT`RMx7@RXLRQ>S!mt*?#D=b(8=SpO#gCjDz;3-Oj8B~&vz-|!6B}?h6y -NTc*)P^ewFXI<5a0X#_6%KzVgho}cB~Ym>R0aux8_2mpz?&3H3tU2~wx!@qrU*5+8y}_vi3#GWgHUVB -$eNLTNx$+#J7Crm-dJ0XPEP8&j+rMKD_xw3*2tV(%qG+Ma(YZ;z4<#S&=}D8x#F5+t{Y$_aY@;l7z$Q -{(!dIhbZ3?0T5E2(EFv%}w>8s9C>b|a^L1r=iMnG(dJhdKRZK!SUczh{!s&Q9TSkQOezrQle7A!4<Hc -e;U(KdVxLm;Ga(*^j%`WHk>kW+OSMc|2eii{znkWq3l-ltplH8>bGncO=Vvj(sT0*A8l;=DpU9zZHfl -#Px)RN>tiF(V8E2JTM8KDTi<(650@<>!11Qbwd3$`iAKL~QIwovjiPOedAO2-x@OSx^JGfXPWg(1JZ^ -NCkiZ>P!Rd^#abe~tp6PiHGsQFv5$_D$pkTHQ>T5KH2VK@en^!x~98CPpBZ2{qq_@CMphCdQeKAnf~v -LpXj7b0x8*5{BWa$AFYffC@-PMMGI&7BYnfI@Fjfp9)GM1|G?&K}`WWS@DHG2&22(MBp`w5w(|X&uBC -fE^{@4wNe6J!5b!M)&ftl%bp|dy7a?`heAF^UdG4o&_ThCYiy&o*zxpbX4c}iw5>FU;?y~&-2PA!TY( -ffxtDax3{L&*yS4G9mH5Rw1$!szl7l$0s%+{g(k%7C-A6M{UB0NK<y)L;t@I%5xDLH&H`r|o?r>^mz@ -QC>&qkDZV-uEoj{i66A=bAecO2uK(U#2mLGgx~;VEOhOXy(ObD;TNM{vzVh2$A}(peZm9^T?joFu7W# -v}>-C)pO0WH$o3*o8q4g&6MZ*SmOJ-yh_M)Ysnu>H9x;-sz!Cw3U`#=u>29XI8>KVDfZKfTO+i{nYz6 -qJertkF8X&*Y<2l^JjYK2<Dfo>A+B-H+DFpwvj(s@}%x*U_((*MnKO7)Ck+kSSSV3^uV?$n;uXuef^y -FKPvf2s#?Ad|07@b_U&4Z3$%%A+BHi*`Kv*n|3SO9Ya-sSw}bO`kwyJb?TT=Z%xxET2O%BPV|x3{#Kn -Gt?r2a_B{O=F3~&p#uF5<5a%JAdVf0`$+A6*37xLbylhF1?x6FdCP)h>@6aWAK2ml;P_Ex5BveVoG00 -3tN000{R003}la4%nWWo~3|axZjcZee3-ba^jsVQ?;Rd2LkDZrU&uedjB#!V63^bltQErcR=i4Yn#wg -s!Tl37O<3xHEQUJ5BQm`>y@iuAP)YM}%-<AD?^9@lCogQAMqJzO`_1{`wvK`E5B$iExG5u%y#{3HV$J -0>Cws52`$|tjxA#Fk@P%>gDpAGx~cAOIE{7i4=9GOOP9$pfs35DQODq7GYelgobuy0N+RqR}wD5bLcr -h&@Ki2_ry@E5_Uu?m4(tEQE&qp7YO*2U}1qvNYt(noXG^C;&$uHv?L)>+_w~JV;P|t;R|}o4spP&7re -E$7!8M2RfWt84VBJ^q5+xV&3rPA;^`TQ_3&FM&=}D8tK^z&Zfal!X-U|I6be>>(!g?!v}TplT4`>%%m --jpW-F$VSW<4R=9|(U1@)|q{2l@*DkdQq$1slrxEjavct9L?^VMu|yMnv%aygDx^Jxr=B}^94^?Ws7M -D+9##?d`|nMc<HK#GaV;8UTUeiF%DgqXU#V#Ff>nQ8=?0u!F`gnY@oWH~~v9#KoO0|n|GH|`(}$xDev -@Ey0z`kDVsg`Ex+RN8{&JKW#b1#!_**4~Dz`>)gWWHz0U>`$W((DjVnYGkR0cT&v22*jdiFi|o!Bglk -ewhw0?AW{;Wok0-zF?LX(M483BCMISfMZs!AfnZWP&E7PFoIlbFA<Nx{^i#*Q{3PEItz0kC&lw{PtQ2 --nJ8&`hw%Z`=RPxguU1>dUDLENH;~F76lIGF~kF4~`Um_SClAm6ehBmE{WZAu|Q-&(Wt!bOZqh0@z6o -WQ&)%;!;+<MJP&U#G+MK)-#BMA2ShEq2ayvWjBZbR5`UpD&=SraD2p4Isx_oL@?T@)^4CcgV~`f-B13 -(;aV?QQ+X=7IG`&71E6eMR4bSHKcmQi<9-ZF;mRazN2$2)udM8?D4bAwZAgKT3SS#QO6=Dp>c!6DC7f -sMi*`Y{!1*FHlPZ1QY-O00;maO7>P#)YmVn1^@smA^-p#0001RX>c!Jc4cm4Z*nhmWo}_(X>@rna%FU -Kc`k5y?O9)M+cpq?_op~G53vJRX|rJu9x}{Lv&CJJ46(bS2m+OsXq&A}suUI17zXS+>>KWr?2h^`%ZZ -bv-GassiA>)8?l13-)(#x0aHYj;Zs6eQv+w@?^RI)a2hZST90)Gq1(WYp+}f#8!Alj*V+JQo2Wna0{^ -kk(`4-OE3QknubKTlOl2^jxGU7hO5|_ZtISfMP;lFgJ2fuM02_@mcc?umOXs284?)QkWQZXzLR4M~;# -1TS7Fckp@{>kH^0U^Oti!cyOdK{L*%&nLd#6gI+DTJCBhSUt{L;N-^(*ZM9;khwke}8|uTsq7u>L@+i -4-%qi|JCs5_;hsq1eLYquVuia2sHl~3yo$@R=`5k#bXoHFknki8rV#8+%t-FU20*3ob@15Q?q26BZ@B -~qs1gP6-Q;7p}l1SbQP1(9*kf(YQyuvXgKO2#+%{z<m~kr-VDyq2dCrV@d(b&;ppu2#c(`4JH>B5!Qk -{Q{4zX!(F2ZdLNWYPs7ZfRQjiO|PyQNlUQuAG5{06Wdtxd)v`fxnHsdf;S6oXp2STnFBBDS>sGg4~fm -jH`j9pnX%4xMwpwb4|#LFJh7wMB(g$Rl?)AZ39zy0;tJvuo)Lj8a4w*Ws=trif9&~dN0^p$oDm&_Ap1 -u4ooH+pr%f?$Mt@K&qk1<VEum)!}Acn5_$gXc%x1hCz14<_hn<{6-ENa)FY%LBA$_)PG~LE4sO`jIeL -%C_KUu6(=h^C`HlhtgfQ6Y*f$O9e-yOdr}+?b=;<@&ini3KCuD6QcB12@L(3V=0Osq7=p?2<ZaCwhJI -!i?xJ&tBlbtOHg`i0dlobfLzrCw5+Yq5n~L8Swvq;OpS{IzL#x~Pw4nuT-1GZ*|Q$Hyv$?iCj63P9(D -?>BB1Bxz^yO^nE^|U%D(5Gp=@2@a})=r2<klqFLlXJEQl!eN_wITDr$G@*05m7R?*hxB;;Snp0SP#b5 -hBNHO0HNqb8<qQmZlGTU$kRc+db#0G7L)AJAi1gK&cZ)-E3_t>JY;g%l<?G^gsXCm5yVaR!}bmo@%WN -nRLFNKOuf2ItTB=3lh4#Nw#fU{|xnzp9Fj1ru1E&SPoBf*)(Gbf=w*?*ctgFXC9aIAlmm7NH%cogVnj -GMy>I_Uczf76CYH<S7E&t?;3Ug0<0@O$KFpC)xluKifdo(ArgjX`WUi*2%dFVvYy1-^7|7*-a_zVjA( -z`g%2=n{s!KA((KSu&lj4jUZ?Mb>9U=ig2S1xm-!bUSUK<si<Eqt`+ODMv8Rxyl<q7Lp&kZFoEMZCDu -z!jC?m)-gJ;^N+V-!r67+(Dv(a@hJY<5J_9^bA`%i)5NEy)wvHM=x1j{#0C|@frc>r)96wVWX|BIrEM -q%!-zAn*UxI2Vv4}hd@yi6UaN~n(lsm<cMUx7uAXO=eh$G3OvX<nOZQE;Qx?0PpTlCzU`|UmT+8g`qH -4W5bc#|(5+x2lUZ=d-^-7-blxAf3fG;BP<i95#xFz4O}x;_&>ZB~%8FBL?e@HF>g9f>O*te}&Wkg1S9 -T~G<ST22ylZ_ex!&au=hFj?NYsnzbgZf56KQ(205H`SN_TVeQI^Ybky=jA;8k&7&#TGBi^qYmZD`^j_ -iOzT|}hweI(^-HM^)%Ow;DiT`ta<E}`PVS>O9d>)JE#>{*^3sKYTz!>SygT%vT2*i2PD9$g`-O@I@>? -f{=F`|b=EZ-M7sT>Ka-*nO3!L@Y>~8n%lo$BN7{%DZfEgSEZaLSdFnI=@S#%a$L`G9Tq$riBNyHYk4Y -`K;XDT!4r$`Oqr#_v;e%k)s#sgD;9O%0EB-sK>^B<TEhJBzLZ1P+GZVJ6ie%Q6xyFDAxi8Ax*w2R47% -JX&g`mKsq<ivExol38m0{c*zCK__TmJXTuhlliYU}c;vQ<u+UNpLCMNY{1ug<8#Q8+PcG5vF;^5_KEQ -q4j@h3~hEuq+`)KRg1dU*_27Y?f~5?73|9yIfG}#yDFw<@q$a!m>K1KSiAV;s^0iB%jVOYZEbZ+e`p7 -J&10$L9;Eq}5$@oP0cV}&)8>{_qFQ!0x2N<{zK79`a01-h`>?c+=_S1c+F7G{*q8LjD|huU(tEh=uh- -f87Ej^THdEk=1;W2}zS>Lq`lZ*Zo2IBt#9=1vzF$sRi^~&9H+gwW*YdIkYn}>%8$A^S8{EV&D<7Jl$l -k5|^bb%=0|XQR000O897^_91aQO$69fPN4h#SQ8~^|SaA|NaUv_0~WN&gWbY*T~V`+4GFLQKna4v9p) -mBk&;zkgD_pcZ^FHjLDmsWkC%Bh5K4c8N?fb<kak+s-k*vjm>yXz3%`XBla`%5~rHek4ryGnT}4}f=P -zWL^x+3}u0Ul(g5=L-iH=kI>}=dZsn&M)4<$1<0w;996ZbQzo+Siwha7o~t3VRF4X-2VQQzJ7qQSi_C -ZQ#8Q|nS7E7DvK$Uik84F5PF43=%?Q4!0%|R)Cw-5b7-+aSZ{^xp9o>COIQ-9(hf?C1R*VCGDpDY1Pc -dJL86yME`>@ER?;nem>MJ^i2E8s&zvA@LG}ebWlcK}&J$iZS9H(LR;yJcJkdy-`B`2W*|Sf>{$Mm2oD -x}Yey4J@77YGbN<(SR)*uSvl86~G%*6_{0Wmj7drmXgm61-Wc?Yb{+)5ZElvG-0<g9diLT#8)zD)y?N -+<|>6BtfHxav)YlMZ2g9!_s=@22p%Hy-y!)8SwOw`1tvj;@E(;q8c?K0t4D55Epa*BwBTiNfG>VVFOW -lq?~ptk(o_k3gm?Lbkv}W-_6?)VvgPgt>k~qbMCH&@83pLRzAi5=t(Y(h28RzDOzxD4sSB#4OqTb?bt -Vf*><`356`8_z6|2P2^CCM7lN9hH>d+Zi7H(wNEs?|7{TWZw7tJ?w4)=^x1$e42sm_^6FQy$LP$uFY< -gs+%X7(Bo`!*b-IXW!eWaEN4=|lyNVKqVQ)sY5s3rdhRU23V;A5phjWQGBGZb)&kP}IuO+&LPW^g{8N -_iyvE#U9G0!^GSHvc^Or;CqKDV$9r|)5=bzV{7PeH+h1{hUhi>0~ZgtASg0;rw|G~B^Z*wQH2>@)$|O -?Yj-5nZj1p{w-)dN85&D*~9p<)*xMin{1w3*FhQvle{N9v%+0dF*&)9v}BB=)-Mbb|vJHK;1;!o3Y@l -muQtr?qEKHPa>D;u8NfcQc1Vf;5&A*-CeVI2}WAsE_t?$yd9<Ie}lIweyuC#_}pqZw|zT4^YGb4ZyyN -5RenX7JbytII_U=gKe|wg|3#PB(^W_l?j>nPyy2N1=KdCBKZxA&^x1JBS(=Ov>bF{;ifKc+*rGdHN;d -O_oJ+C=@4&rHKCf2L8xsHRG>rzl5*{mL1$<fgy|p&G2$8ft-NR<i9GX}-hs)v{w4hhulhh@3bL9c=FX -_7Qya9Msn1)@f%H@n_pj7UdE?=6%<qH^Ztyse?ItWj>9%1&9rYYv)_ypZ5>f{ouS1mtf(pc9N*WV1jD -yxsxtzY&LL&hcB(Cj}tK(>B-T53m4Ey5$qwzj+NHxrm<V^iEZQfwvNMS0Em<F(J!7e+|BER0LVc@2!w -rWJ0fw1NNdZL)N51d^}A)cRrjwOYUA+bp;jBls6kO9KQH00008031s8R#wR>KdA!%0A2_H03rYY0B~t -=FJE?LZe(wAFLY&YVPk1@c`tNta&BQ{Z+B&4E^v93R!wi)I1s(-R}7Sk6evnImqlH;SjTZ&V+&^yJ1M -e;A<)uD=2j+ElB%PBze9c4a_pkJI#?oSIP>0{A?XVk%c4>|+ZedL`R#X@<XmF~e>3q-Iv36beBm()jR -}+@K?P=mFe+F~uhtU4Gb+ucfZOl}JnP`LCf9#Y5h_{2mQ^66fl?!d;2Kh%Bj9U{g#j)gmfIrdOvDH~Z -Z>tAHb_VzUfK|HZ5Vko@-JwV_WgjF8t}%LVsL%E+wDSD0}Z9huJgu8Uw@g7C$stFion+HPa;RHLE-n3 -E26osfE9!#W@|#2vmHnUEK^7}BQ4gQ;)aVX04-CqV+tus!nIL+U791II%LGR??6&90q$rH)42<Gqxp0 -mP>iqB#pj2o1$-SnK8|LK>0}NMk1&3i-A@<OhZ&7N!f5sae@<uj0U*glY4EjB7C(XHRzggyUUS4F0I6 -&M=>lV(@|bvutYjHNCV!w3L<b5~Tdr*(HNi_LO3t_3FjLQ*kP01#5=v!2SGxN&RY9Q~CslF_1uw$r2Z -}_h(4b&3Hx;ywcTD3W8dX{MUwYrmkukU}%zts6=ZM9x9qa64mgjS#h%ICzm0*eNd@>ZoGHq#vi<iG9( -fIRZOcnSvaDblvsxX!!E|o%Ix&R+bQ&N985oLR3`2vRfSXF_~OnGi+a(%~f;+#<}7frlQAFnT#-{eg& -g(%{Jn<(-$<|%cf<vjqmO<<|n7G5sXTr#r?S}@C*6u4Ts1cm5@^{N0aFTYVIXL``#8;Qz?s}Eqko0Rs -^C3T7Chx^psI{)B8V4A3up?*8H?GKwRmP(eic@W^jX2JpROh`gStrxF))MA29@sGj=`%x;+5DmjH=-@ -vI>e^*H_=Ex#qbe;A<O1k_cSSg;w4WiV4tX!%YSc5GQLwSrI=cTKi#s?Lb&VMpp6~2umF<a0+x{i3j~ -m)+jB@=C#%9=bNGgV@2*9Eo+MfU#$iufa+->aXyijGY^mS>Zt*OPr4fR1U|FHM%AFZM7!!;LVp~KxvW -N_Hc{&95sP>|EfhN~`fL+LAyc|ugY%Z9>f2X;?;yV%_`sXwVD2Db5p{LTh&_wMHQC#m*SLX9TEZm~xv -T}UHp{#1Itf6~N+<H}B~PO;<~e@5&$TSL@qUdN;`KPP5=-kp)MADHflf-b6v?tw_)tBF`s0q<0`M&H9 -OrYvt!oTH)`{cosG6zaoLiF(<;P)h>@6aWAK2ml;P_Et$~)vT@w003AY000~S003}la4%nWWo~3|axZ -jcZee3-ba^j#VQF+OaCyC1&2k&L5x(;&Q1l_BOb#V^?E_OvEiKEjoQ<54<R~tciUkfq67~!*3(T0}p7 -IWP!#qj82IiL<QgZBF9&8e5H2U}JM(Y_n)yc-l<tk;zhexme`|tl8A08jE_gN%`VsE(mth3IuEh_e2+ -f~NdJ8mMq-rjyO#6Lf=OTJ<6bTk*H^9&@v$WSON<}6cKV(Ch-Ny0<?m+uVNKZUVUD|Q?lvK|q1^Q~_G -&)~4p8H>SG>6B$wfQ7VdAtS-WeJGNYNyS1PCz0eT6l^WimAfWq5`e|0oQ0mH9Ml~234Sf=bd0A?;8mI -?<I!lnUI*L>8fdc|MV`oxemOrqySO?VLRd%sQANU9X2h?VG*EN4VLX8>A)i6Qh_9J8j4zGAUaCpfwUM -b*%K@``k*>KB;4+ssHFB1v4MP=@LEkz7OvM%JPOjMbRhPY<T%BJHz~kop`rU_**X(9;c{#bbK0mu+A1 ->MHhl@Ao*XJKD@arv`Tzq1GJHL1{U;<{sHR3)oBtL|dWI{0~dtC|95MZIbKsFJfT*wf5sb$8Of-Ut|V -HDJ1i7>IW<VXwg=HL>^Sf)I6D-V<kIvrf7P0IKzEWR2X)N%1E-6UY#=`4(nSt65Q`c+`x1gTIwl<9`$ -gwrgQkp;s=ekQp7^pCUY>ASO2DErrOhvD-mmrIeF%_)zfD+nz*olY2WSZ2*-I-PMVdJr_2ygu!Fe%)? -&GJ{iim@?XCo}5fYM;L9TVkw0UK-zI<ekK+?KNX8~rRQ#aE*5M$4RQB$+Or~B3=mL|W@<^4G3z#E>-O -33FKiKMo_bm6li>DFjT@iOOJ<sU4K}4No`e65+?h!wx)m$jof*aIyLCqW`ZeYW_vB9bs1ORb%}WP$;= -4+OXUNwti2Rf#8bL+5gzTa8kFzM134YT#Tc!IflTkWEe%UN$i%f+ScqKoCh7*pRoUp?&@rO{btXwK># -4X_mH_~b~q=1fia#tR$S%kFQwi2xcg}Dp+bZ#KrYv^>%PMYeM+760!aw~zw?d`Uk?*`4Y&f^1MNP2g7 -*9_2wychFc$-Iiun_4VxU?`sEhU3hgVLaBEN*x%=7-kgdTA&07K%Wo7Dtx`irNSkJ$BEZCPr!f}Of%X -h<2u)0XeBDII$Krp!ZyW8J+&g#YHpnljR^a`w5WTjy18jQ1tELY=3e8?wXo_>-iRm}441=Z$a>*rBX8 -|CSes2UAZM>1lyryvrgR<@ztOk;&@Si3QjKDMzt^*%+2L5Y?GXF?e)s-Sr6}c^(!cVSAn-y?aZ_s~V7 -<TR6u)mj#qWR5@TtlCob~*#Aa_xp9k5=jpu<)U{Vh)ySli<2Q@;f^fF~X~daAl@Ri?$62Nm78s%ZN&6 -cB1*;p*g%w`vym?t8V<C$;Z=S4!`xW7-mG+iENHbged{4VJDobvH3(Xp7anQs)bo$kjSSUxwyr#WRbR -Yv3vjEWbhLV{18w&I~ol7jc4q!5678In%eA`YVpMN{q*yQu&{ql1|{0ngR#6H6TCo+Dp<N@v;=X7yUc --yit={K6Mtyp2g>i#mjGH@zS&SQnC1{->*`VBB4?M^!;&zdty+jdLE^Yd}s6mkeP}&N$r3g`=yuV619 -!&rEQb2X4`JR@b3?b_L|dwpJ*>57lj5_An^&L>Tw_BCYY)$o(VGmehye9RBubbn(<4fBy^MNwsGN*9o -=mwUP-Vs`I;#vRcJ&k6eZ8jLWDO-Ne6`5Dm~75zN^TU&9ek{GcGBqn8N<~udh7Hgo}v!<?eZv?@{p7` -8jSqI)N7r9!sG+K#7|rD6#%ILS3ZQkOv-+F*-%Zs~_x%sYbL6s$V4Oz6x3Oo`nK?>g8dLes5*X*Z)5G -*Ysv`em!WE*WDowSzD{6+u5qJrM#^t%H6F~e^foT=>MyjC%vBMMYob0Wq5aXQAX4fDNhN?$V1ol^!y! -zQmySWjW;t)jCkbH6T31u5dgl_PU6iNe$k6XQGi@0sn;G8ISWyDbS!^Elbk<zBqXQcMw;=NjOgKtSS~ -`H;@mOvu}*~GRz$sh5cWg>U8@wx<+w(=0JVj|qA!BJQ}4+@1RjQ|=mA$gOIX$PX^i1VGPR=USlJA(e| -or)Ml&996;eWyV_bn<qG+I&MmVIx4O_1SO=ikL3N+K12}Qv!Q~WEJQOOZ@$kZ35*NV+E<HigFJObf-r -PG7v?ZhkkO2Y)=gt$z}30hSRaq*~3j1GmhqVR)V@wzYp`)IwL>#bbft;MJ$qM$P@<TUE|W^k!|K5jk% -;hTZai93Rg9|0Qlfd(#$_uh6~yX}$3!Baq~7S|^=g|~>F{5IH&KMl%4S&$cBe;h!8pxFiCiUO|6iw_< -LsIBos9rbF4J0SKoFS>c?2Q;dXYJFymHsdWu)pG`hX#>F=2n*}?pN5GKGoiPQl@&r>`p2nzLc94*jVb -~X$hmMM#kB<8I!C67YJ<-Tb*K*~n2W_+Vr5^J=XeroZRS#OnyEgL_tXK`N3eE-XF+TO;AIX^06;e(^# -fb9SSyLvq}w8LmuO?bm783PU>UG80#+q_3xogH+I(>%VuI;V8;FrmFq3|6K>jwvYvsK|;4TWsQX7~tM -gZFoA_{7n@;3?Ynnij^W3)7XgwTZBjz=TDwgHd%Z(0R-d5(z8j<^X|G8G}>L5ynB4|C~<5NYVKf8^Pn -m6IZ-!!R?}cXIgz!Zm+x=DrjtKvb-plffDU<mIB=1bYhM(~F=lfR2@K`0^=#E>3Y-dmosG+S$WL+pZw -5<T^PFUOM0-WG8p~=w(=LebO{OkmBUkVZU0S`R6@*b!eRdb(VTjZm38Wuh_B*R)w*QSEx4w08-;!Zn} -z#nDXN21R>#5#*eLXOQKLVlBYEv24%moo#j<R_IwItlvKsAu`qw%{W)ev^;Rr|A@OqCZ<WdK1LKukt_ -U^D5nIk~=c{K65A*R3iW{sD6D$(P-R<DiC&u@8g)YcFv&S36GT?B<pbTg~pxkCdc;)`m;~M20vkIvy_ -@F*-+yIL((%C#%YQ2Q32rh8F;Y%@^>(Gvz5r+k%s+Dv?cnGkrjuf&Uu;YUR8lgQjaoJerns~3QUF)d| -ob`AU(i8LlXs>c9#y(zJ8mVIa8yctLNUclqnmo8=S3^|T=A@9Xt-+~R?Va6BgTPCHZU5!RWmn1gp$}^ -pS4s5;v_@5U5%1@P%GHIBH%N_6tGz|q{Z9NJP)h>@6aWAK2ml;P_Ex5<CH)rx004{u0012T003}la4% -nWWo~3|axZjmZER^TUtei%X>?y-E^v8WP|J$KKoGp=D~fp81r3^`u!mqG2I2!8VLc6F(&}I`6FQS!_w -RS2p1gDybX9d%kFejR-;+X@WICGU6&a_`ns|<NE`rf>ywo)<Z2QOha&?04ZjN{w&mfecT4UAUZrYIX^ -p{ZuXR+Ha(VL1G3JYr->r?M6Be^h9;}=CiAf>8nDe;Amu(qn|!Z99T=wiDrQYvjl8MEc^)6;*5J8jKF -62{RqnuWj!=@y%<K$hkLVwLYv<eLoZWOGQ0;uxXG1WtX^#xFe%A}?}r9E3h+aAw;elC9#-->aL}vcuc -{F^0pQwF`XM9g`#DvtD%vx|h_t!TMKqD4CS=Z@3au6ucQlQZ}~gYkH)R(x}G6;2%&+0|XQR000O897^ -_90=|xEj1~X@X;=UN8~^|SaA|NaUv_0~WN&gWbZ>2JX)j-JVRCb2axQRr#XQ+^+enh{{EBM$fn=LvOR -~K)%~(wYTc)QOBgqbl-sxS50fS&sL<<DiI4r3(`uEMuI#7j!hqaz%ge?-N%B!;Ss^b;A`t<&{gR{WrQ -OXa-a~@^EBH+n@osTE2SK{@DAmpd<`Y{P^m)V3rWCM15cznbrUc|$I{hHt11rd*+xdb$4S<F6NePDSs -=Lz%JX&hxqFw3(zVZ+;m^A#ZKw_1xNUNP5Q<XN6@*JZ(K9VZ#{qA1S1EQq62w(;XI<UT#=doy1(9A`Z -7W+89M-zi{;Zbg^uam`cJ@Z4Lk;mxNcet4X~3*7`Bsy4&uvB!Q1A}@Iyf9$afZ^h@6d=1b=>%N<C)wa -`O@VOkh?}wAoWPCpAsRw5tPlspLlZ(&izl<)$&y|<?OE-(%xtH-QSn<;1F!sH$=6RH_W<2S&x{4HwyM -J(?{F9fY{6iRf8GMgHaKo$9@z_0`T%NHL2HpO|p~*V_GU)_ewt%4sSP-$qi*9-6&2hKO{#9yrbo`fYw -*}*R!GmlGBN;Ck{7pH77JxnS!+g%!AGsVYpf|Z=0C?v4cWLOQ%RZYd`6KfZ4p96&NnqT=N4E5$c?fFa -r2uK|B_Isudns}hAqKWaW)il@BRS};@!8qv@53|qm*Lg;)V-Qqx~IPmFRy?#gU<tl0p})jy1Lu>XBd> -T@x^E_05=hU&@j%%lhGyoHTyP@RfBg^??&nh<fk9c&qo)Nt%zHbkLPFZKd-DYcNhsnzH)~b@7;^hKM^ -4`Qyu<g@s6DTG6ePg$LPN`(xQQwX?-vCgTM`W1`{!5ujK^n&x6|_!{5$<3vdv`_+mU6BOek}3AT;gX+ -y7HN58!v|9w1Z#=hha0uu~UA&1e`>G0FYy&Qcy8=j6(XxO=I0mKY`qW|&Z+}zBZ0sP4i4-fz9^cZ_3) -OhXr+-#NURzHhYnKv`vNBaFxybr-RE;yf?jTXAmsb~b#amC8565Z;(XytoJ5_q?qB^)efq}#S{KxDG* -@v&%&v(h3Q+Q=sFP7VHWno_f8ur95Z55H5=iTB)(=X{hTankuOFU-Z)?tmIQjx&rH$0uMx0<`(T0xbP -J_H#7uEJzs`arV^<gE@igLl=NQ=L-f#YTf~}zaAL&_Q#%>_3i>~*ub!7IQ00p%MSj==7FDG!}#~mUQa -bK)SB=xvXCB|5oERi=f&dL@8CU%0&G76h={(Qa3G{h&$8rkprw^UgIRx00+8?dgU{FCBr@U1gfNO8Bm -;(uB?P8l5Pj%D*(y&nHUnbTJVJ3rio_LQ=`r5F?Xw(!e8C2t_9Bk^S-c9{J=RWU?d}&x!|VzkFXBiHu -+Rn)YuZUIIi48byN38vkbgR0B*<@*JStEW|KSbT>CcBp&Ep{FDvdridW9~5rEBgpFAU@R6r6kXl_wdx -V&^7-354MTS|AY0S016Hq+=KT!vNiWnD*Hj&)O;I97|*DlY&1CgT*7UgGi}En)o!{DGc{IgxTB?Sb9u -YIc&3zamWwpdz>TRAM<RTXPpb4W_<o0SnqUu>_h0?rk$?nvjpYANC~_zw3ljP2ofHyygTlu-h#Wv^Nu -|vf+rz27*Jppydg~?0O2tV24tHK#w!pXfCF7|FG{I7S{IZMi9C(-#OH#N`z0#fB*}T9rLWjgpIzMrYt -bzP4p8dQG~>3R69P%0sp~I+whl<KhfjOTUr5pg*yFzBAjv}x12cMn@y&=p5i@{+!@&k@CN=OmU_6>*B -b=xWuaMaCD?eVLkjjtm_~TDs(OAJq1WEZV_y7cnnvD7q1~4N#5R1SR{L1kOdaVcoKN3c_f)nfoL@LyM -w{9fs42(l)%Nf3cVgorL3@8M!eci{hL-;}Q<4`32HHd$z-${csh7kLqWQ_1L16uF&6R^z!&Iu{K-4w_ -A^$9z&(L%@`L^-d309~v2^D4X(90`|3!bP1h^atiwPfi}o@N{c{Y*s)miqPcmy2M^ZqWDR{wnuXUO;! -*B5HzQSpdolUnp)kq2)qOpAZh!oKEQc@fhMHC0Lvc+e}Y{AeFW9$*vtbv7N{Doq>Pj#0iDoJ7nQn3<T -e5xrhG?usO?+fecNdL0DQeF@g*E-nlBc?1E0GPVHmKSaU=o?Z6qDb484)ot!x}j^293*)aw6MTQ0-$U -_w)8qrUG<{h@BA)(EGngN3vNFA!@){JzAAj?=tFMk#tBQ43<%k|9|MGvq*xhE&$;qn7CCk=&#X&FB~S -0B~n3Z;j@XCjA^OMEa99o2eNhoI@g+G7o(JYL#bbAq)G;IzdF-Krrk*B2V%+wd)E~`r-29|BNoQPuCD -Z6kzj-m?dPNGY)2$KcE>7FfkQ64~Z#A$p`ciIEfhY<3vI!!nYg)4DxKwH6fllEPaeJ??DhS`t8%%_!P -32i_z7DX}Mwi<+?!>WUkvudAOj^3N3{ZeZu3uONL@#L|yo83Xq<jOD&}hQ9U3*y3Vj}aZPoBAj+oL4f -CdML4-G-YvY4pdN>>dQA$8S1MJvHoQ1LvusWSP)w640so1#&ma!V40Z_nK!<nU+)Bt(X-Fl#uehz`(S -AOyV!b8Im*AeYQ^pltp$uYHbA-pQdqlR2`jwDh&P&OyX0d&6}92`w;vSE7PQDOuw5K7eumr^?e9saq# -n_fE+1*Oi^qNl%(*C>o@z}X{u4c;heZW?9E0JQ7|Y!=61!E_Pl4-XID>>>j6{4m8iLdNev>`DX#BoKO -tRMyH&_S{!$QZ_g}9HPb<2#p6bs9AH%Z=@gxFsGjPlQ>eOSZgFqbeGNkPiV6tURSy!UHTb$c_vX#X_n -IbEYu=M-7S+Jbzxv~jm%<W+b;=kK(h|@MSGVdj)kEGLuxC@_n$(79J^~2@x-+Uw+vfZprUP6%+p4km~ -Yi-k_oM%Or=R;P7PDf8g)!FqZFfVa1>vH2FV9{Py0oM)m90Pkg9U^MSeWk*}sVjfD8f<D{6{N6Df^V> -SNn)^nZg=6+*Z}jrkS~cno3|kt@o%W5MW|A{Y9upZr*S^?V3NQi`NgVGglO3L`6;=xT`V5C%w*QfZ2Z -)LT=bUtrianW!>UlLd-q0*F^2#*2L3!7e>Ye!KPf6xf5K3S6SK3<{a80VSeU5V9zVIWX$Df<nfC!mt@ -%20&W2gl8Zcr(4!F1aE{al)cli(pm{Hu%D~0Q4eKe3e=$1nR`byotnw0-_{No<z7m9s_8ZvQm4l8C<} -2I$!aExX-Nh`*+>*J7I6;3Y?i4eurCDJd3rXJvT{Ob^8id;KRr+NyjSHhy+|fW$7En&SOt1015-)_WD -U|z6=fk3Qj7tvUG*phg70d54=4PT1{dB6L{|1CYF#SvqOl<W&1H@aIoTTcGjp7EY!RJDSr7`dqA71l_ -=0+g0CO+nwX`o(GI!%>P%LK<clKMC#|vS3daVt7Ltf{~+&1z10W#AOh-GeTuv(Px>-vX0!hz_Tx^5A( -Q<5&>K@d^oo=<|HAChOstXsE?$)FJRgLEFGzsG^d&v7sZ66CboINH*DYQZ)S`X<sP*&k>U1+vV5TIBh -dAU`Q|#D}RKl0ZwZiyA{ovp0-ob17=NO=HXTCbJr5)>kCOWi?hGB?l~h^;7{~O7*069kOTX$cY_rbvH -~RDWTK_*W^+j@7~v00$W~nC2eTw&Nz5j?jmFm1EMmAe{)^RTnz2j_Nx?(j449xPRc~o2FHa2>I!QW3m -E5MJcN}cA&88gUV$@^0jSb$U21l&oz`xA>va$Eo+vh|#KQM-X$;sb3YVBMP{vKhyl+)Gx)@D1HWd{aV -;XOniKny+1ROs&90(hp0Ms+f?gO98`Bz}lWq=x@8ma=;)YDb0`T)T)qskNS$cJJh{>qd4B*-}P7*)j^ -jUifchzyb}y$`Zw$C)}}Fm^?#4R3qe#w8?-s%6p76D2Y!Q`)lOlxL}!{J^!XtX5U|Map_?DC@sjTfb2 -Su>zU#+EOHGrIg_-_95Y%<Xtp~;(JkT3^ITUjxEIks27Rgjjz_(qln%>HCFw8zogkkO-k$GD+bMGd8R -`=wgwFcKEg+gty3`TAv}tg!7M;E5Idd9<Nm#7P+g4v|38IZFo&v>D3XQeEwkv@oJFO@FgtpzpGZA(fw -^&oz7!p*8PXFHGAD|}kISM4tCjV)y^43<EOm<x&`d5Ky*9w8^@0#2^%e1FOR9rlN1XN@v(NP)n3lJuf -jPqH6tzgMyki3eg4)#sH!BXOOYYx^nK+NLOsqc0f;~LpVz)}dVX$av0apb;cd5otI}8n{Z`&7zuHGf? -vACt}ji$n|GYZSIV=gb_zDf^TCVJzX5(Pt1;1WjL+;f7{ftm?>AlZ-2b@D<wavfbZ0{D6fUv*bIGA%Q -pmjrapf3t)d%(kss`&jVWn07~VZex8mw%oMpvab|%epB>d!~6bLP>Rwl86q7o$01!0uA*7XZB$zl_OM -vVD;x&;Bqe7>oKgB9;62vCP*_$#x`P^RLic2v30oaZ2ZhOjAQt(yitmK1J}0R)l8r`sqbasSA9I)5mg -uFTUf&@h#6{&3XMZnv($?$5(&T!joi@fkDxGfc71r7QihgZ!Q^gRP{;oWnO&MiVeA-ifE3-T&J}8Zps -yLzpQ%!o^z1XhHW^4BpY*K<PicqHvWrgUMHyPNXwQ^#sl(NsJkG+H|1&r9r!rc{bd0s0lTeJZyasQs$ -49p>W3$(Gsj-jip%k5aqut8Po=+p)&)}RNPcC%R2t`>`g2<4Vbu%$_9tc>n$r`^yUn0L`<xHB&e{2C~ -`?fSuGrN9e~vK&T&!Y1JWJNCHOW8GN;EPc1wsdCYSs3Od8m!Hm&OiIW>)@IHPzNAbQy2d)P2=G8;kSF -YV+NxNfrb3%NggX=+N)-ZvwW%scCV6**uDMaG6VPK*J+6_XV&)l}`38z`Yca<srJpw1zcQz~8=B4DUK -`gwM}8RNdM811Y|e^pRo^grJC9&9Z>Fk>;LfFp?IjvZyOnA*RxEx~@e|FWvAtTPcC=aSMD4V$>hmT?Q -zM4wt%__ARIJ)I>hz0pYy9lJIYw?t*j~)qs)YL%wD402NMzDuO0B+Xs<||mqRShz8grrTGiv92ND8qz -C)z=9?{nIzjY2b%A9OrV3UIM9q~z3)e(a;t_}SHvJ#R5&wVJLWyuhZJGI1=cv~#Y9pW0I7rW8*Ja_^| -rG<e#XyFB&1^@ifykA|1m+d{;eS9260fVvR9R0r{RYTCzRWy3TQO0Ek4ptw)Y%?+cID|ir1{EeJvv(i -PSb>pM~E%d?IKV&S5qXXkj5k~2K!3G>G6U}44&uC_f(yG-xNcENjT=`O)jQi&J7sS(k=9}8H2fNM#{M -2sdZ`ycG^54E|-wcu+d;9ao-PqK3%M1|$nBxh(w#b{sQKr(qjBn85`i09HUaVoD10XkfQ=Gr#4}{M^_ -qN*v<?|j;{#sMuFlpU*eDhjkw$iPAD`=ZW!(2(&U>saMH}^^<>az!BaO#o>VdP9wOrcgx6TS?2RP5WV -B?DVw5?i%IvcJv<vEVLScTxG}do&d2bnT<L5SgU;nkS-4CpzsqCMvaqepabbP6&xtQy<99lp0Zw9sP$ -^P_ePf&7%MhZn_}d&`V_MA$#w>1SD0ZFp}~_tH(YI_)NgJ$Tn3PPtYr@)<~9;>Ae$DZRIJ@#d^F4ud* -awFGYY+S3ocfN@?qd!F0QB$4BMhdTG~(-tt<%lw2)4X!^zafJwb6COsJ%1Vs*6%F@`hzDaa%n$iT?>t -g2#c4CHeLZZ?w<~$5Ab_cN)0WBnI&7xM~F57<lfzxioK-gZaJSZFP6{zp2hpKpOdW{r>UD$<zWMgVc< -3w}!T1wL1HK^p#cG`B*q`~h}K9QCWJHKMX`JB<Yp@(3VuUK{;gYnN2&(N9lCpzh#;t;82+LZs1^T<~R -XJO{PMbq_8Yzw3#Jq!a=?$MI&?|3r%P2V&lB?TeYnlnkoVl~};5jc=DwQMd&S#1Sa_9HuPh;W-GQ7Ni -zo<?SHS`e;OY^Mt?v|<ox!ULvN)u{N}8hxw5`!Z}TYc9y}sm_@0T)O{;a{aa#28_@ui0G7BP4J?iG?i -ryovazjswxT_u2rm|hHOACX?ojnoOWF$s)FXt?r18}GKstCz_JKdE4i^ib+Q94S;?78Ez#;D)v2Z)XJ -fE>+rFTo(!Y_P#=WjvY8c}%<hNG!{0YC>WsAb=83sf|P&F4mykvE>SQz~tOD)p!kIz4SyqpX#CIhhlx -O|L<ssq}!z+m>n90K!^t~n<^;NvC{ib%kRguxw{(`6jb6|i5>T*yh6DtlNv%l4QDR%%cQdF0^9(4$;E -+kK5ia&RW#H1S}q|I|cD6qme|2fKW;!zz=KK6oa)^`b&_wwdS*@NKV!zwH%Aw@l!R&A=BpAlsq8>#1W -?f|ntd-K(5jHzm}1{iv?8tW@17!c{>(HGwYI`!`^C?_rpQa|16W5jfO6W-eV-2D8t&6Rl6rs*6o_pA8 -;VH;iY$(`_oH%hNhGq)J)2IP!oujq!c_tjbFf1BQ+YlXAAaEKQq~KCWPOdlm=OLtpS_3QXS_*Cer0ug -XxC-Ye|YYvnqnmWK9Z{1*3-;qW?9oUFXi5tskS{axbJUIMKi*gfts#e4kb0bWK!oOsbA-MLp}rL^13! -+nwgK$AdFBYSvXPXxVbGwh5L{dDY}Hkr`va0nn4x?<>@AVu7UXG&1qvDYL%vwcN&=F5uU#LJG^rhaZ* -t$|ChtU_Y+a1kW933iE_f~ysmH@enhwxben5G}B@8+le`w;U{)Hwqabx(4n=oYxh5-j+~PGs1izQNNa -d50D1@y@{5$b+jN%DV*IVnyRA6Ln5Wtl_+DC-qJIQDoVGN2|B^yUJ5cj_NCO~3*NtzaCv_j=v9iBs^R -WwiI;Sj!1yr)4is<G9!qh<QgKxUZIQ<&Zo=1%<s5ioxe*lH--<(5wVuN%-PBRk7|70xBVT@;N0}^N91 -5k!h~2~`T0=-zKHeARt4PG1R+qYyfJV~;!kdV*W)|YIb}Sr1{e=HN_Y{;T@%P!W?hz^9H@9$}V1%Dp2 -a^9MTfPF>b64w1Q^gOT(3bnU)9ey&=aBs;9@msD@yEM&$3MTLqb!|we|huvZKc7{(a~G@r_gV`<Eyet -Ui{RWIz%fOCmvpq3MLU@vM&aVFAOpCh0N?1bgi7&HY^-b;Abh4PYbR+Ft5Ic*UE{DJL%p~k;BG$h-)` -&r4?SC$)-ctB9JKdcLJzvnbU1;3%dM7#P0gC&c5^yNCd!;{9pyu3qx8hB}0(1FNItFA`DSci4ooDQdX -I*5W#&VC&Lqg>^)4dzDPM}G!g#_PDDUTOK{l7HTaR>PnhhPuJ@RCw&9|d7&Kf0gFc`<x8M%>wI8pbVU -Whr0j@cR-nw!$o_ZRWZj_aR{>SLHFkO%Z6_ZW8w|5tmdN!@D8eKQ8u?k~cj6laRx!<fy)$`c~R%<$!I -dA<hP)h>@6aWAK2ml;P_EvT5lQDh-004gr000;O003}la4%nWWo~3|axZjmZER^TUvgzGaCxOxZExE) -5dN-TK`39OR1zd-YZ_s$m!=LDAZdfdEsA-DqDYjjRTd43Dq_d^?>oNf&Dn-w{*aKzyW`#S+#Pj<?r%S -SbFcFRmlbxeQe3h;%P|en&DG2}lE;^MfiK8rOY`N5&F~Wo(a0YKXcm{a$kA{0_wRX$OHfyiQp5<ly}v -|tnPQ4!bU{i+^T(PIiq4l5<27958Ae9Q8bwi7vzp>4Liu__C_`~s5*D+Zl$Fv+V}@D2##)2#okr@Q_H -T*{7R%+1lw7#W%Zx}jSzRWKkfPFl3R*`=oUE{+1Qbh6w%z3AQmdVpTNQ{G!3l2cZ(~~F%Ywwrfb^%{( -u034^8N5+6#Bk*CVoAc5zVe{rqSIrx}V*lF`}k5_k+dUch4645&Sz@*dd7ApQWt7u_oako+Z}Lf%Epo -7RzIMVj2dx{PgAK!&G?1UP9IzV9qiS{HSS~hHrqm*gkQybN4cKvjxbaNoQ{#gTfJ7;U}TG7k?jlj7l? -*D*fLPdd$m?0RfMvjqlS#lOseDX4uBwn7?rs6VUYc^8k`*;sG1Gqn_f#L3zpW5^8D_QwG`G{*rO<`R= -{AR^TIydu}G(Yd5^I;sRwfPSjGkQ}%N_U5Jogb<?rOPaCMPl1XdZ0EivoBrD=&H3ka4PVYW^zMnd92; -^LUzBs?;<oEgM)`QUdcs`pRs!19%&ZFZ0`KOl`+qHaw+CBi`XwmNH!AKR=iJ(kCDB1=?nWEtA-8(k`l -hdXs<}-#CV)fjO=|ux$&41r5?7hXovHzuL2T+OLC0SNs0BZ8jNEt?oGqjFbvWggqbdy^`5^_jx_{v7^ -`*tqu#Zu-0-eKVUz<iRRhYp|*(kq`%58Bexiw6Y5sV{zj5yc(e#d!ri|1~aZJf#%$@(i&RR_;;)hcK~ -FLMX)*6onXoG5Qe~c`5>vEkT=jJsqgT*3i|t#W9U4Mx92ohS9m|i_&=87pzD<w93nx;l8ZG$xtbwr0U -Cdbx}uRnl>UyTU6!CvahQS4sTZn!ys%ZXn~lwq@><dmTl;q9hoN|>08i(F1IukwrF~*!9nd62+{@6p` -$=~g+4)BhD|gS!|PHC=&j*h(wy5m3Nwe}q(aa>bqGy9N}v#xP9&PjvW3<w{;Vrzy>*c3o3_nEZ4VJHD -vW%c!vN_v1-1*-I|hZ$vx95Ivz10{*H+JKq`X4L@SetACIWAI*49Bc2)I?ht6t3#rCs5W_j*ARXmpOU -%a!_OJZ57+hG^;`A<iKgjsi?S<zu$vL*m!w?S{$lROLH7=C{~ldbHqZAVMTkZ(&e^25i0+GexH;Gw0` -!K*0IYx@bH`<{MM8=LX%xv~f#H^HI|0iN{rqh4<q@vGw$1z&*`w9S*oVn4W@_za5_~!EL>C3q_BNZpp -sd!~eJVJLp;erSo)T2YHwE`VrG%(hh&BD;$ZBhOqPXCeVPdyim7dCr8U{zA;SuV61c;T3sXC?j|OZ=$ -<;rw~fC5P)h>@6aWAK2ml;P_Exj+5@*E#008~~000{R003}la4%nWWo~3|axZjmZER^TUvznJWpgfYc -|DE6YQsPbMDP0*f?OTb<{0Q9xR``CV2BTe;KQa?T#>c3Xl2O$eK&3Cb>7UI6`Z=)kM%o!A}3rQMr5Na -p>E-L=-uiUw-m6En3bk4>+x<|*gS2Xq4$h|V87gM#K@)oCmO*7x>E}akEr0G5jLgEVxq8{6mc#`wR2a -M87xQQ322U@20P9bG(H4>30OhD#DK1-`y3HGvzRv$POkHsunpo3Uj7H?b21&Ohh=bYm<#$bJmL!Kx*l -97sief_z5!560|XQR000O897^_9PlF&RY6SoQ1q}cI9{>OVaA|NaUv_0~WN&gWb#iQMX<{=kUtei%X> -?y-E^v93R_kxuHW2@=zv7^xh+TL}*A2s9z`(pFZGyJ0k+|E3VGwBPY;&PRm89%wfBlXxOU`3O{UOmE? -|%2-J(#9xvh2)G)^N32EkW?LVyc4!H#;ypg{=HRvkgKa>lzEgNwASp@OnFe4Hrn1HlW+4k;+V<)u>>j -IM$`;Ccx?vDyc9@$<9W}3i5o@npR<+1Fx(Ou(g(=HJE!kNnXG$8YpqYT46xQ?Ut;;j<5uQ8wqSLc?s! -49+?~2)@2F@rfQPaSrV{=awOxqcO@c+!$m8^mB&lGKo*bizQD%D9yGIjk4oEI1c5v<@;pfN`LgMXayG -|rk0(nynK<6<LuRj@TfDqgA^_W@yPQYg>Oz*7SClK>FlF+MR8`3g3-Z={#cH;tGzArF;*)1hV5#JNcc -dCiJv6CMHxxS#qqqsYAkrExNbYNky=N7>!+b{-M5#FyGgM(g=*AMmQ^PBi?Ga?<$)N-}7EiZm@*O3^7 -R_ungT?37C9FQf&E<0b_QU-B<;^Y37Z>oy<>KNqeUl7HE(J1*rbK}Tsmi&AwUEW##D7y=@B-*V)}kYE -N+^&`YK@;@jkaP+u8rbrD%ukEoWZhNUT3auaSA(Q8a+Kf-%<;;Ybu25JZK;PbFC>+=Wl-b^>sqwPZOY -D2r0<q8VlPdcyAN~cmbws2%K+gY9}IV`ISxK-OsOoOni01wbQ>;N-7W7Fs&058a;Vz4*M~3Ec;8(g2l -hQ#lO$M+oS}P*eEQR4byh=feS$y0ELy@6EE#Scnu7EXVbCIuiPBd_9nZ}=&G5Y20+p-(=HFwA<p+DFP -$7Ut(RM=y4gkWnOf&hA8{|F4J+;h?orI%c<wk!@|?9a02NK78Km>NRM^3i%2MuO#2lG5j{HsU*uV0S) -o8{k=?PvSwSZUrbiJ~?;~XH~a4J|cLO8b1efoG7gmBU)CPF+KwC<5LXy742?9j+_ofe7ER*__7nQKFh -s&YFOd!Q%gP&}e0U~7SStgFa>b|6K8*tC%z&WXr7okPT>iwg5PBmIxg$x)uytfKsnGYTNg?$Kb5kH(~ -y&?bRL0gikbM9hoJ-@m*c`$n<5%KpDX(YW2B;A_jNa5@WP`=7zBq19Mj^*hPz5Ik}QUo>u7VHF)tiR; -!|NgPcV(W+WImAJsz#@N3eo}28%kr%MC-BKZyX$duAsjbO%-$;4RYi{y9YdU*E8FJ_`KeSF1HH8Ui6g -h3KzB>tkI3;yv=@!3j=2{Yfq8U=$QDJ$1e0)^F|8o;gFh<o&p5$wEB9&=0@2EtWG4@)5LeEKGj+id&S -{Q41>F>=Nb5w;|lYe8Kj>iKZhxHK5oE($Mj~2(HogBH_8m05Hv{Mg!(LD7E@$yr6Nkt2%@hf-3Q8=;N -Da$f=OLMV?w#ld@#p!#4B<3_+LoeBv6@{+hRn=<q%HA|<8oDBKsjUUY44rJx+^nUk(m{dBFjoxB-Mn2 -}dM8^^)@O#)r{J#hz%@>&yw2=}(+=J-Rr>X&tu+dYK4?VK4)>2jf~l~eIJmCdxu(}gUD&0GmEU-@Gq~ -x(s3l+~4y@C#l{Ei1u<qhRE=!IJNYknl=wlqEUV(Dhzp}Ciu#*t}Y^7QpTeI!@AFAiMFbhh1Z`{WmjZ -5pPZDIFBc*cBi?}7cN@E>_`UHg@}6wKHm*ZWaQoA<qaNw3iykoqk=j`Reygag7IVnbK)&GbC!-!qmU= -V@{MiS{KO1&PNgqUy1E`ab)Qa35IqL-*l^7#)}N0Lrea0P^km>k-`urf!MztAF+n)t`ySzo00b=*&3z -4^T@31QY-O00;maO7>PAKNE5S4FCW;DgXc@0001RX>c!Jc4cm4Z*nhna%^mAVlyvaV{dG1Wn*+{Z*Fr -gaCxm-ZExE+68@fFK{zNZcWt5V9<V?F7uU;fZ;RXA7Ht=cLoRS=iB7nYB~_&SvWNTc_Y6r%q@+0M-uX -jfTf^bJ&oiVqRk3BO)uz^UB~~jYw`Eaj#@DLIYAsgw^VylMju&SPuMI6oiYya}mPM{&zD}A|Kl8Gb`R -$zjTx-70g!_CZ4v8o=duOPAsH&nG=k*w$PzZfj37+EnX4%J|isXK5Gse!@hm7k@QEeBh6p7r(<bwTDI -39}e9hVtxb!PY{8CS~kvm4SY6&qMe<XTj#Ris3=nRO58RbtUupZp-Tqn<N}w$jH^*mpag)p)Bbo`^M1 -?nk+uJ!GTzRVpfxelHX4h+?a`PxLOwCNljII*Q6smDq~kik3#nL+?q9ubQV4+TM$!nwxh<WJtAI@hn5 -MEZNoMqex(r?D(q^>1B~?E^|>$=4|rg=g%MP&LrgI8p^DGsk02LiuLbMCz|0aXX-H~QRseWpUGrm{(q ->7olKzzcV1j5z7Z_NUW-iL3mDDuVf#Co+_5b_&=-o;CDVmra&xog2POXyH#dybB+^U}!(va7#rOP(Pl -9EFE4`?kn2Q>6+68NIEb_F^EVglQQSyp!nfto)@6Y@oxAm6g^>z*UiVd@znaIQz{}trJS0ru7DV3@$l -t8}bNyqMoov0wD+zQ5Xa@3Yd#l#M#fS4{>JcG>Jl{Ys&$H@4123ufx0vC%kX6zDgC_bGT_Yy9=71|NB -J~3}v-(6-3ehz}POA48LN#TsMeEDJ?sJHy3$c2{^L>;djHF&#s;d7q>X#9_7Jx*PCEbTYG><G<(IzuG -@ov8>Eww*4p1R1<l2SMQpeU8XpAmjv6iCjRWP#KX+WlNKr>1&av6a?lic?~(tGKdnljP_FBb)tlo!Z> -`{S1T@yG9qaL+8)sr2(Gb~SOjzkzPhrp<ZG*j+RmAcnocGcc(%ZSxykw`X@W9cC?(g~(K4|XIY_0+UX -~y1G{v^lU}1mDzAfOT$jEABd6G#CtFxYX?>1~tH73oc+KGsa3niQr$yVOpX?DkVf_&U6(_?3<3TvtgG -gZZSv(4GHxRrTMyj^^BI)yQ?0kb^n=`v%l!@LR2O|O+P%VYLKERkFhinU(8<(U$*&NSG2n0y=|9dboY -$qQ{ga53~iP>6z+LB6FTJCSdvg6o8CHcw6}^q9m$N#TznPB<l?%egT>2Gw&EfK*&60Z5|(d~6dDsX;$ -cu*c*bR&!He3Um#G6qS0@gYl-$sdFL{5wmO2pd+-^c+zt5WJwUe)z@fvjs{U4Sy@OzQKrkGiCE77Vj# -YAtS^O$^sPgE10Pan$&hhT2T2A7JDK9K75u9_4(#Y6NajwAVKO})7K9o8OiVQDw(CP>8ypp4uG0X@L5 -e#=?kV%el>LepQqkE+k);c(ddX#_V!(1#Ey`sl0^8P^mIymb%yPa3N^I35uO`J7+o8NAT-lD8E2-rU! -4@K%`#rC2eQDBEQn>PLC<(<+X+k%rw*+Pq9oJ>bb%(*;xbJ~#da#gOs&r9NbtS_wYdPf>zU_2j5Z#bM -0V-@Kv>{pOaVB}52;*DB?c>`^_T8&*U&O4-z_Nj`6z&@+q%Fgi9fb=b1NI|X1y3xm{;tLvPU>G3sdID -V^=fFYj!^nwQhs0ITV;(&J9FKr!^D@GXQMk<y$XVJWa$P<x2B!KM5T<`TZrj#w!D1qm?LtfVP}@0wrB -uWmWw_3gpmu8$<Anqcog$Ay}2>Guq9_%QIt+w^y4u0oJQ?_W17%I3LE&(;x8vA1gq)<UWTHyZ4*dy*N -M^1C7zf%iCjhu*=SJ3R#;fPwyd&3X(!<8*RPulL)Ge~=d4dcnnu%4LN6|h;$DjBoJ}`Hv0U?N`T#M!y -hvK&HUDGzr9K>n)K^mqe6)oH`pd1pn-a#Eem5P`efr^Z!|~cYZA6%}mi=(mrQ`mS<8D_v{_T7)g8v-{ -1NZ0b`Ey$UeBfV~m<2=A%}u?W#VxNMUJuZ{H-&g~DEW<J95NvZddPZ%XB4oM%aJ3W_uM#ppbtQX^0*= --*Q^Yik^qW&V5vC3mg#UA<muPP{u*b#r-1gsa1~%+G^0K2KBG9fYL;Agc*8cPQwyIyCV}%1n1#H0`_c -hJ{5x<2b=a$y7uR0_67lrOaytt304pbrx0*^+kGaoJd}%oqs4A7m3(ln|^a9RM%$wt|nJG3za>o_dx@ -w+J2oy|aqrkyn^~blMQz;8edTh*d_@*PUOJ;o&P#=h*`^F52mYHc<_juRZgmA@HRJS6HW;3>2+Eu}ZC -s>$`10G|bbhXOGgEn@;k`b(vtV5hiXU;}S9^w!Gd}YrKkNOU+`c-E`hr(c#5MIU2lYq2EtRuwDaT?LC -Frr~~6`YQBI*kq!|I@&5&fe!}h7N<676&MVX%mS2Xxe5U$T<kCMnXJxFuWH%M+2c~&D9Gpt!U!%N)f) -|XyVJp1RfJKj_>V&b~R70XKeAB?dH&X3natbNv=JKGs)o$V&~+l5&+_P+79O3#Qe?x@uu!?3iNY`L7y -!L8pAj27H}bVF|?=Y>L220Mk+%{^Hv)Bl6t1KD2(I?-OgwzFxW4Z82f4H-*5?&rnP7egUU+o2pL&p!~ -?ECVQ^A)G|5B8Vf&(nnZ<#|4tvZ*;}t<>i)d<C!sqj;K+NbVX)E&`ojcMZ;B=97WbI*l^YZ6sb4b!1_ -}C-&#yo=_>KsgFb6IC~8+Jcq)v-F}Sae$snrBnhL(x1I-hmDUA;z?XSLtY3ALu^L{G{I9Z2;{?Sna{? -i`c=KLnql0Wn6QjW?((yvJi@nn_BR0yya%m4V@zLjOO&CCl|)WW{jcNNfb)xZrUNt9=%1GZ;Qgg%W<k -J!idw(GSdbwPDc|2HdvV|4{5yK**?ceurifq6ndP);-Yj}zTG03s9G_8k6EIy=Vv7%p5mHg(4iwX{4e -dvVi#R*gMK9gT5`b_wPMa&i2^Lvis=doy&vQZELfI=%*f|mKsdN&W8yhswo&j4tNmR-EZJVNwH1WQG0 -%^tHPfJOU19G&Yzyg<`Ay18x(h%EDRcI->GvZ$>;zMuJGUl-deeM+Sb@N3hq+?YWOfTSM;-5uDUFisH -GA2^EanXBGxQlbxiYMr)n-iddm76%+hW#YFUh;jF~MZG4ExpgUM2eXi~rcdKAXgJAINpoN)+Pr?o$JT -hzO0Wr^OQ6Q#oS21EnF#IypBOq~l^eL_5X-{nkpa#tl(hQ@r{(DnWP>)Z4n<^|74{ktv0}4W9x``<un -)Nb6DU#`o+u0pE!BsP0J$`KNT_Y;0o2qpo<E7bQ9-A9H&5WWe*$v@7Zcw2o4X&PdyuuZ(o`k$OdHk3C -}6uF5;}Y)gH#Or*U$AiFp1#59T6PtLK9KT;vb=d%AJ2C(h=YP5+zjsv=GuV^l`jyPw3;|ci?UDljOX} -Ok|5s${0cUqU3TpLQbtLv1`cg+L%0reueLk5l0NV*s8zIx);u{~}1omb69biLl^W3hZC%CW<LHxxfp( -K9uhuxBjl1~!<QB4xFj+i`0+iTTq)cW5y_L7lD@c96Gu-30#N4l=AvJ3163!jTei&b}`wR&!y`>JWoF -bCp_`nKzh(yPHjeVo0wioN!#TZ-|9=zX4nHO`T*#F2aF$7Cwx7HXMw~hN|18EAhRpkel|bSlGK73JM! -{=5m;RlaVJ`Z3dha7Lkb|#gibdJ&(}_e?G+<X0Aas88&oVF!s$un|guwWObn_Eg9;Gm@xTTeU-vrqi? -H<(d5*r)2Ivm>zg+3ToZ9?|7vb-wos!;TV@nID_54HBr^t3ir<Ra_@RVp8^B>rSu*#>yrpX@T*IZohv -Cp#8tPZ^ccw=eMC)csPR9f#eDdbQJ9`yzAS_A_F~{$2TaTC6Y-A$MwRX%t(<NhzTPv}!Kf0>;-Uf1a- -R<P_7+Fc}b@G9JE2ZsqiNCLtj;@lLg~eK}Hbs^iAIrQJ=_+eWb~G`b{Fk0|x!D!;tLqR5kcbpZPPTY( -VMZ^4g!F?A6tzk#0?E<CB8*fzcQQB1yEDdb!u(hO@HK@`yjoyyJ?!QdqQC#`6HPs-P)Q}%?sqyvj?nA -l+sg&rOtDYj#;@YPICsfBHF-uj#Ms(wW4FX)SL+8DQZ~BZY)}Z%B({@9tr}@j#oh0SFum~{5MFb9k~$ -t`Xh(wJcWlG4pm|L!0doeomu$uwLqRUsGewP()EZ?t8+<!{U{5a(D=yoSc=7Ujl-PStvFNS+h9NNV*F -{n#%V;(fgI-NYg}+Y;#IQ_|^*WkdAlzSuoZ9i;4yT?N?am$`ZabIiE+zg8P)h>@6aWAK2ml;P_Ev;x1 -+72;002M$0018V003}la4%nWWo~3|axZmqY;0*_GcR9uWpZ<AZ*DGdc~e#h$;d2LNXyJgRRGcjMfoME -$t9^N3T2sz3eNs6uKwYEu0g?E@$qG;Ma7x<dGYZIwhBsydPZh?hGt4!08mQ<1QY-O00;maO7>RogHbz -17XScEPXGWR0001RX>c!Jc4cm4Z*nhna%^mAVlyveZ*Fd7V{~b6ZZ2?n?L7T=+cuKF>#snS%b99r=5z -N_?dk2Rw$k|3wX?R;yuECerbtL)O_3}?TG95pfBVi101^NxC+X{ZcRy6^izyJ884TtdfL3L`WkIm2tG -eVtz>;l|mlX?_B2Vjz2lD%1pxWcG;#IQc`g@wM*Gab4Uvr_K%BG9Rqg!6-Z@aL}V1O8`5V3rxk@B+4O -BM=tP0e%s+Sd;W$m^=@xsVM5+1W3`=r&w)q5F&EgY(9RCV!jX!PBOyiXci8o;C1aEf%j&@+{*~mE;+s -3GAlNhBp5Y@q&P{2Q15f3McI4^T$sVoVrR<zbNw$dp#y9IWRh)wm^t9i1MuBA7F-6xt}1AlYCnwDUaD -MsW$BT`uxuW1|L0Rkq+qlH=*G0l32;6*zW7E15QLS?~KM!+nCL&s!W!!^7MT~xL&7WwaUxwu_$<ytde -NLE^@@_6Al0hpfB=_OPo;}3SnXP@Jqvk(S*9;r+}UVIVoxbT>EMRY<e~UHo*$RzsGqoW;=dVau&uh$P -TMEiC|R@e>uy-Ef=s59Atzgz_~DEORo69V@YAVa+(oNi{`}zK%)kSoTtXboT1)F=4DMvLB06xruI#l- -}3BrQgA&rr=>eJb6yi`$?TE$%}fd|h-I2eUI<g%U-2;J<!KUCTHcul6RYwviNbUY#sRe@W=Y2Go{luI -J6;M@5d|pF4MCuKa7|Bx%rlo)Spg}?^x}f=oYj);*Y)y8Xq=@La^<ZwN$S;JRD6q|n&y$ArW*0}cW1A -ISM%BF{Ax^JUeCTcpR1PZF^gPVK{}3_Y?BV$<Yg7C01+>XGRZ1QhB5$knWo9|nO1-KE)hXefV`Ak2-y -Npd3wi#2w|1{C#M<FDqfDY#s<4GECOj)?I{wK+pvl@!6p|KN};Ct1mL6ohsr#RncZ(N0Dk}?sJw!|=G -8eo^3n?ed>;g(!2lrzOE7EEh6Cs+`+0~~b2woy9*-G43;6Q<`LkaJg9q&GhG!)GIcNi!e$<b;Ku;vq< -t|KXj#fGZ=|m^Af|;-DG%SHU;3&_+EaCvlOJD>S$f5`gbU+{gz$#2qAa|sp0yaSLuRpRauze#y>A?DN -(#fbUOSJ9S&mUaPPv#ek;B>Z_!#uQa^zp%a`uOS7F?$04!<>VY%ZtVA?Bbdpt}f4mlUK8=;0lM8+>fL -&_sZeBe;j}D;6EPz=h2s6`Tq!R{`X&xkG~F&|2aGUpZ7z6GmwgEdn3>BPGgpncq^?P4u_2^h#BbDgn& -$Lkkh{ORlW`3hJgoQ;C=3r7?=)r2ZXN-QL05%))6Q&fn0(E1cx4rW1K-)B}-srwP$I#=OwVM+HqLCJO -yI_Kw_5h9Xv_fBYbIkW?=XbXPB~EzTf3#jH?L3Qh~&>5cpmr-LN2leU+?hG?v;)30!Pimxgv}7H1Kf3 -U0wlvM8-%u1wxBySahMfQ`DjnXqdv*Ei0idJ7B*$ypoBQkv+uh>AQ<9lpJWrkfUeUY8LMl%`576=9KY -n0muNx-8*xCnJHOrUtpRe;Sx}$V{~(#R#d+faU2PJ&GLYv$GX>R5gOfW9*nIyB_mZSf`cbcbbFsju}~ -mn;UzEzUmpc^swC~i8h+Yg2jmlm#9?=!$r7G`4J#U*Wd-J&6atB1H#40>)_(@bbdbj8?NyaP{J%lrr4 -{BYP#f`1cWGL6c#D*VeBPvkADcaMasu4S+RXyLr^3(2o6+#nQ}zJzT>=LvoyKm=ypOSb=ucz28<O@1h -P%mn~EIXMC0;(peg3Z%M_+RnXrOHdC+)A_DS4gU$J-X5d3&*m9D`uTwk7iH(!id(-eF+pTC}+pZzdLV -=`_>zSoE^OG$9Jhxj@p>m~Wmt;w<Fo~DChfjYe{P*=e(Gmrage+;Yr?)}Zp$Zzb%zz~jrT)>ps_WPYQ --ink56LzW)cNZM6D^R}f3<&kq!G&I3E-nLDt7h(oaNyK|Hj5yKt5fz_z#59d!vL2`=}Zif1DA=KB1I8 -h9Ly$aJ)p0hvFaBC0WZT;@P5EDzBj;oAggHFMm8eZPomR+I#^|5VB>BBaNrL_Pf3<kK>%8ouEy-kuv` -oH^X2W%2<8%H6Cizg{kNwROD1o3evud6P}<1hnBb3EQHL0^<i`SykY(rmrUzp7?Uz6%z=f~?;94(+Cg -cfQkddUEPp_`>Mlp&JnK%fXlvQi`fb}w==ph(mV}DZ_^q3C0jz~3ZuwDQ=sC&O8I$Xl_ymuBh2~q%B% -=EqCf46HO{h~WUHFp=zi5C2OBt;JT3&1Nt0{4w@p>$GrLzZ-yfuC=A1s<1y-`(Wox@Eu*Mh9kH%4iE* -ZG{paLZY0-B-@Rm$(WM@kC%Tvz3^M&&oZ{=880!5fb7!L4DdO5c2sE>M8HgB8Vy;$2H>hr)BW*Jb(l& -$igSz^Dfb#v%u;P?LB4XY;6u2XP?#v$l7h``9VtZa8xFDnZfXs11m<}LNIhTWBxS^b&bjqSXs@>1Smz -Q$ce3rMtNa5v@JjMD;^@sf^F(qQK{I&wD&KK{HMZGI^#hwvVCKMLW2%ODPA{%yCQ&1Ke}XPH2h%*itq -TRGLrapTEu-=b{!v*8^$iPrS0>0#T<O-i!6YCB!kFHGPeq>|1cHZUB(V$1-@sC<Hp%>!Snzf}m=|2r1 -P!{(Y?RZy#TWshfX9La2Ih}!0<)4sKt*91S`nIs0Tbwg)(FCDA<34I&AEAr&%wXa%1HhpSJligP7xJG -OM>Rm01l%H<dUKn!*7I9nG2!fEm=HR6G(s~IM9ju4P5@I2B>1>_iAX#tGdjj6$#=@PzvXlXzam&_}U! -*g_;Gab65MvGW9xO1g@nK(828u4!dF6mKbvR7LzwoYwaNRs&E_mE!CtUvJL+K#4z-LZoqFOrvWG-;7E -y7Dl%ksg7d9lC|7x=q9a5|P8#5pVToRNm8WUGW1>!~e&*R+1H(&fFnllMIcR>f9veAtRyx!k&Rkod6J -2TsK_(<o_>A_7;(DZ}fi#f|IKdJ}7fwIfl*0wLJ50HMF=K!pM{UOfdgMFTYrn^uVt4eQ2fFDX4@0+{t -O4C@Z=pAJL;XP(z#xMYs*uvQcy{E?F!;9CQ@M6D3nTTc3eM;iHL(^H!@H_#n^l*#X$0#9=Ax%&)uoJ- -tkXI)YSW<e4`o#ZQu`WAo2O=~i{#UXVl?c4c&H|A%vbdvjX!B-b6u+EeUt0f-44u+4PS;-#kOo<h=l@ -U5hpOmA<)bZk*2H}jxe+k!s8lqouH}#QtB$>1NLp6Lyp2`MZxA7*n3P@v`L9`umtFE0TjGp3J6Jvix= -WqG)l@Q4$ZE1_(fzDB`+XQZ4HF178;Z_GOt9rqfMQujqFu;z!sOMmlO6f`M_ikRYJyDVGI-V0zE~Z8M -uJ`I=!$6X>d3wz7NaWPR<lcrj@*=EU*hLtg9RpnWLIMZn>gBxND^JS<=y1RVNCzIZC{20T*?pT%qE%3 -`)o7VXR;mpKMcY8P5l7PU&)-N9ZKM-7a|)>ZAff%eH8=Vkff1CBuu9Hw7gF8rCzY+)kyo9aq7nOy7~I -DtLy#5lpLHmueS@%CEqngY`vUhC!Z$HZmoN#`bCN59rMfXzlQONmdkQxXxIYrr0*mjw_l?v<XXyTQFp -OSTb)#krO!C6r64aP5s75FACA*uOZ$lywT_*>h2~opSRSOh-_%XLJgB&pewoc`-DQ}&yd!5iNI(d3(e -jgSk$T<ku$$z)2X>xK;h6GZG5=E@zXP<dr51JbBeYB@_3#J+{gt2JlWZYSO&(AMnozg?(9~4whZW6DD -4)QlcT^()CKxZ!Hyn^qu$jX9*x=2(EkylR&N^?9uN!er^5Q3psg*hL*r;P8u!WrF5o?@zRctO6fLmko -uF@)8+fDl5>SsJw^Z@ek!UuW<qm_6ud$;-=^J1csI|laun)NDAy7WLWz3QvW7)?yrO5FhNPzYnI0RP? -zf8LJ6uVM@E=lz)Uv9-=YW@hX3roMWLPMSk?mCv)U7o~jo5#s&FE=cCGZ<@&w5tc4^7W#O4&YHwev}t -`&oWFyEQ%b5kmpxJEwr8^+qbP)qek6g9|dvLJF|DgHwbk`P%*F!faig(-yp_-Fq+P#hD^nC_g2V5HM8 -pq8~)P@o2IEFtU<J?vs)1LUnR7r5t^l7Z8LBTcU)JqqkOvsVN<9Y;4)=I85UNaiTGsxu83khi}F~OiD -PNvP_#Ltx_2)XorQ%Q+LR^P8r<@|ActOg?>>D=-y4f^n-oDvyE{Qc<&+I&)3I(EwxbEBJzk}4LyFK2_ -M|MJ^(mHAS?kqD)3mQ~+@ha0PYv9UDuF>|k0oe*g(>Re!-C%8Lw;-5B5hsEdq1flX?7z_2ctFEo(H5$ -nOFfm?b3YibQT)KT!R1`sYG??1cM;lig3?1e<b9GZ7IcckbDHyzThOHAf2*RHGRdr<-X#=@k0RG@cmN -z9cT{k@I%y0ne1-^#KoY=A&>BVceIK-s8{zbelRdgvYH<nYLHA&!06!IdMG7mM9x(H^=TowH>|7Gi{Y -p<AmthAGg*QU9(<D+Mx%F6C+|DGAsZm4Iwb<avJCg0f}jzNx;XTxuVC2l@8#dKZk%CsA^g7vhV-z|$y -1%J%KmIsaar2}rba0y17oznVY&;!%56fdc*BbvogyyepbK|7e2l0Gy}iGGZEWz{KFHbE{~oLAY8%|x? -Iu?slQX?%PrJLyNh?obY!qK#pA$S)O<L~3$b}j0uuqEpWL0NTyA9qP6fusG+<gANq0k$L&B+zLkwuLm -ooMN63*w~gZ4Rr@Y&VX+n9bc|H|E<a6+w~(_y>)DQo4J4)&`rks%`azN-NDboV;}DO%vEXARy&Vb0i7 -tv}1Q%J3JxbypmgVPNS~>sNK)t+w;qBX6M1_{N?P;`65`HeLuf^voL_Prwm>2v<1-|@^Ri`LPcLj6Jx -94-Yq6sbwZYmHSO}xxS`spxHbDwjpk_1;g*+rv^z9BM4P3byD&666&(H5QPY+$@&ILX7Srx#Gl^mxtH -rb&S6ZrcHJproTaJ>|DE7qv+JCH~HY!r@6543M(zXGOtVL7sN6lX6Or4L#cRus*c*~g(;MgBL`@<i*^ -^?5HqdcXMh_td5bBNSPvkr;*XG(FS=btX!+6p+$N`((dWmm!bp`sl*^af0c@#;YIy)bGuVw2ZtEOWpm -E>xP*iK__wf_a9_N(b#+&@MThtqjAcVwYwIdB=~^RPUUe%&!)~)%>q-&aURC`UuSq{7))!1EBOt8QS_ -2CDZb(7{(e>&~P71!N%%V0un`s4E6yeecZ}gE!w&<Ra5&nH0WReW(h}A_isn~1`*c4Zj$PP>YR@BoE` -Ds%&3@Ho9AC?cO3bKzD`STciW?N8y$LE2irVi#+M7f2&;|HKNRp4a|TbpAN4{|?%4cxKOF3G2$Xc;=G -Twbi67uGLh~?yI#UzbWmmVbeqU+XvgB&3q;;-MgkT2-rr3Y1NU!_#L>pasK1jJ@2o0xmAD$*$Z7X!+U -X%7kSsSEFR-S;}5(+$;e*}om+QaRzyyXTcvoq4%FOW(0l0#Def3d01g1iJ#D3iE7UD6&^z><dCL08_B -P8Fd1;o(P{Y*!wv4WUD^5+*^ex;AFf>3UC{uNzu)#~T7D0t}yme6?~<CHqw#LxMG8|ILiE%O+{YV4Dh -kamUApo=w!=#BnH()5~MqFhNL+7?R~Fclh(;Uq-(4q57oA5|((+y15vEOChz#00)o$m>Mpx4vFrlk&h -Qw!pbwIJL+z!_MG~+pqRniTgZ5Hl0^D#Q_=`mnPZAhHZ?JKejphGWO0D+rA=*KHpj`Vm{ZypV~zT}YF -BLffsw+S-FkxD{>ukFTexj<HSM`;;5DFCLl5KIc(CiGZI^m@W7>$$ow>MO%pjsSFmO<s%f2Z0D0z4|n -q6Ku#|YH|V^sx=2`1R<<c??N#=zUWyv1M)<QwGUZIZ?LPB2dyd!f$5Kl7h|WmV2>e$zQk(`Q?6b(z-n -$)C^(-K*QHM|3)UHld&`3w<>OloMFf6dH*}qdMd`KfNH`F`gTkDX-@g8*J`i+Y~*9EhG?KQ4V4Scy<@ -W+4gDTx(=K+JL!aR4nUo*SgY0BhmsF>$qw|yWTdljV@H$iJl*;3bT-m`>voa;v|+-ueQdi}x&e8Lbfe -N9Li}LdC{R0Q#*L_UAQ-O2`Ssls+$^96{|RO-)uzmMEM%v=D7mz&$}SsY^}#YaqIOtuK1G&YL!}MsL7 -{I16U1JPaVnuLSlpn~7IB1m*3UzlDi*QToQJ<0(vy#P-Qfja=T#yPwGyyLnvLygdz?+II0<=U*GUeMS -n|J+wW^B)bn-x-!n=FwKZgIBtB>-qVGkhO@|7Ntp45#+c?*NiJVPdsCQ(wQ@<?>HJ_a;BfFulKNsfkn -hn8&S_V|~s1RZoE+Oc+%CVNS`@B0roN#fSLDmX8xgtAPsummFn5y=$&us&XPPnsra)K9d_Z)5B8Y+uN -WzEl&qxV)Hm1QWf0-g0j3H=SH=%ms)i1s(^)+D%VY^lHZ{onuLFH<&+bu>$;f2Spe~b2`|85n=<Fj)b -7ZVMy+PL-hxFS7$f(W0g6`vndMVl8)AJpIzr@T4<7Z5Etud2f&?6a18PR&<TK<f&Zp6y$vy%JYgpZxX -k9EMQiyx`$m}x5Y>eU>ryJP9|XFa2!6yM;HSS8KSSdJC)rPkztN`Q9f}(p|IL`Kz>d>Frw}-X_wR^xI -4nF6pA(K7x%*5&sCNb#pp5ZX5Le>;J-W<=p!G#y+-wMcguY8K{DLn2Wqp>aL1Nf57<={dggt%n<b|qq -QVnzR=+PRCNWH|{m5-FjHGdN<hKfhezy7cLupsp@=t+_ae>BvogkJk@YK@;BBZQxOt{hvVtrq7Ru7|= -h?$<w{)baOj9A)1Y`nVOD8dgMC7Og>qvcL3X<g#wWKzk?MsztjqVAL-9ORnY-YE)OFQlNIV<P{njjHv -IjW=dB^)LeUEJ2z@Nw`^LLS{aksr8faV=h8O2X7Oy*Tn1`s4cjYY(m?N;bMhxM(hqre*MVi-h>`W)6! -N(kOVS+Ad)fo^MS%OFYnpF=ge|4ZjywAUPKRkz<N2UV?oCTOKZ@a`0!}RF#>i%Z*Y~bBV81^|zb7tt! -(=eD<Rf;WFs`RHw@P|0sF4YkEH*${rA~Pv$trZp^2D#pn*RS}Fdt7{dZow->iRbkI#E(5GCG9xV5sza -+#~mze-C<o4|?eH8wNdxqME*&(1$es-iSs!LiuY|g8{`Uy`;!^hsSNCrGMAwvMyO&hzcCl);ao*$7m3 -_197BAlJyS@NRH{g8^uq+_cZxur~{j`*ZKz|po?{#L&1=j0q|ns_3VPW(6s`2EmB@S1@?bIz3HM~Va% -b~Ei~GEbseyN_g+;u<OV_W>oZ;ljG??8aJVvVf4Q30J+4pWIrUd}lHA{=aV{pM`Px?|#5NO_X^0bP{v -{jbJzEebjSw#(`6ed1m1GNZhstiP(ezUKsolM#dr-}9g`qhpxjc{$tEqlg49~<-WhKe*$2=+n4At2vy -ugd5kv7`c+&~?xQ|Zl5MYPogKR~k`C}WO)TJ1n0v{oECP%1gD6lo}b8{=3TA9;n#{81-;+U>O7ZuiD% -H}}_T-l+3xV3hErLP)>Y15NFalT=^i^_$aY>W8ZIPaKF;!gG$+!8{%G#xJzJc=7}w{Gbd=ccjxY_%~2 -X0|XQR000O897^_9m?wif4=VrwHk<$eB>(^baA|NaUv_0~WN&gWb#iQMX<{=kV{dM5Wn*+{Z*FjJZ)` -4bdF_2`bKBUJ;CKBB3{@_XUJA18B;BJLb;_~T-Kz0JYsqn?dU{ESxTFw)0E35QCYAZ^dtUbq%JQZs)w -LCt%OZh`b6@A4_c>TL^*Wi&mVMVZYBo!X^`>sRB)e|wvhUQ4fA8(db=5Rgt$&pDYE@J#{j*W}TU#$~R -cC%}TmAJuYbto6-CJU}+$^!6>n6$C<dQC*;m@IVU9nbm-`SQ|d|{6pr;EC()S@fuN<T5)OW^Z|tW}qn -ZwT&`uQc_osxFF+axT8^*X!*o1A{OAcy)C#bnWc(LT&s@mtng<s-{>LDj&Rw<C|S?XYJxft<`jIB9l- -WaO+RvRav(xzo_fd8S>eB(`|!mKdLNO%|+I<u-@+Vy6s-wWYtRL&eij(RSQ6X59%+yYP(OoO?>Z7y~u -DRf6U6>U8uL&=MSoDw$7z@>fTP!xqi{qUA^$e2bVs(kA8sh%0@a@{r&Rq>!sRci`#6a%tE!r=ip8Xm( -q28XWPImdnK(Jp0mCsOYl~8H+9~cHth!XLg_}hmmlPsH0isd9KgMzo!N`Cys0-EmAj8@a3OSSrzsArf -PQB;UALKaJ=`eW=V%K0xi`hK{@>1=s6{ZbR&}#wQL5RdZVT+fZ|hGmYg+}Fc|%w<+b|mW55U&jHG?1S --L@@f>#SSc%x(bRs%&ilzXGsu8~~-1bHe#4eX^ygKG#l*zA5$Hk4-sEW~y4$xteuZvr@ZS&Z@duXJzq -MMWaE&;a}PD96+So(*)<QW^ik74<>q&B>TxlnRQEma@cOv0w;8mTx<bls^kUXswQ|UyKU5RkFLoN*oB -HZPfqovRA1WTgP*+Yx~919Ws$zn<8y)@;QTdw!6CG1)U7`@bA4~`bAyBdhGh;+%9r-`fY!rxq4+5*%^ -Uctn(=IgyE~gr_V#A4)iUeL4%*e%e+D!j!^J%qI8Y|J((WxvK&`}53A{Pxo0Aio$7nP%^g7|@OJodX= -^PIroORhwleS;nz=qNTC)D_4p8C`pdzdF#mHQ1YgBB_8QJMmBbn1l1f)v+lhWJr$R5hL?d94tUI*UvR -40EHJg{rzkM$Ci}Gx_-8yww2jZweT5(I$PXmOWtGGTGLBqnpCHyHgE8uMXg6zoE_Y;pQ5c13xvZM_-t -uz+SwoD@9j`K)fnjxMt}E-O1GwWPqY7y4h^ps&Y9^1o5HkQv@(E>w)9NSz`lx5kE~<z>dZ2Vmx|RQ}a -YHSLNwwvS*&f4pX{+8lKfL4}<4&N)7q@#D985RCFdl@K0LS_kf;3J6g)qghd)V^R{bb;?6vQ!u3s+jG -nYKiqj{JtjCjPGD@B#<8HfA{7|Y-!PHJ>YI~fxeZeNG-M!&euk~kVPk=Veuv7kamz8qq+JQrzE>KEv= -Dv><8o_^`m9Rx!4c#5`c4gHTX4S!{imXhm*bxqlp0p$59)daOlS{`28_=P}ld5v(?6!0m^P<hJOBl?J -q9*Aem<=3QA|h8eaAM$Jmx0K}v<?~L$<fixD%}trOzUQKwBYYY$mx#0$+GM0o9D;sdhzV&O>uq1k|ea ->FQ5PR`QGfhgbP5>W+d0*$@m+6OV3{Z@bdiKG?8DQ-hX`a`VVj3zxvO=!)TZ&#Z+eO|C|Q0L_puJZW` -dOhi$f0Az>qe2d9oPnOFS;m{7J3jvY#KNJnydqQf=9VL3!A8LM=aCL@?=R^r2>$&^+Vo++xXHlQ?d#8 -m|ZDgYw_LOS<Hf|zYba)Br73nM{7f_sRP4PY<yfT;NGGczJfV_;-oKO#8B#ljiWs|*Iz0wc*UyR7TmH -$_Frf328S<w(mA|6018lz4xUA=!l{#PscuKx)Vm7<G};#Ey>BXGrgl(_{DXe{^l}6R{xtysye_a$h&M -a0)8J_)|U?G<^kh1y{FN0S%=Q7>UGRCK0nNcvho~VpSj+0*uU=@v02jRh1WaMc!vF6PDg##SAD|w=7w -fb=KkHz#=FR5~jlQKmu)Py>(BFDvB{h#MP;Rg-jph=n9s%S^#rhnso#wTo%_aSYi_~aW0*#3Y7DKqb6 -%u1_KO)9Cf&YZLgRXbqxw7$Z55hEQ4y(<mD2V5(fqi0jc^$2V=R(T4$O-gcw1ljO_3)EAO){V#$v2v6 -SQQ#X9@k0<*Jw@vdKAL+3DAmtX?Yw%HvLOITP~Z$e>($1P3X!Zh(ll^k2C!Z}IF8f3DfBWeS42id<T1 -`QKEUncW8(ZKl}pKTSLNTT&qfBoFi+!sLBVFU{R*#St9Q*pJnd;^68xQXM<fru@L#BUGol)rj3cyBFe -Aa*5Sa5A2&ribBFHI0a;I-kqR!N7-xMwBS)?CGWLO_NVI&^16>HcI&{2_R>8Sy3WWn)2o&_hNuJG6Sm -zUReS}hiC(C@T?kDs*JWpGptO@d2Ipmpjs~B5k!24#eqh&=*z6xxl@4J3dV=z(@3578Iw<d?(Y<>kF1 -V2MGzrb41=dOjk-hn3rDriQKI*m45@vs!)N#cK3P<YvWJ=6!$66@%lQFeyst_HjIoBrYcvd6SUi)KMy -Su5vRD*dx%GQRm9kJyucTJu6qd!RZ)hp>jIXyShLE;F1JQ#(e5dosB83Z{WkiQ#(eX`K|Ni*l4G3&Eb -zkNhfeD3jP{9{4(kam)m=cP0DkALqz>`(uZB~H>*31WbpG7PC61t%M$(k)sg$E=JA0Cu*%I)C3Vo?9} -Ur(PRhRkm7oe||ZnFoN>8@|HZNS(t5@VUn`)ZRqBIqV@|anqg47ChsqW^+UTcj`AI<f<%E+2>fz@dqG -wCN^}~2F8vPt3sYsZHG_dy*<BLN3xe#5IJQ!Y7Ztef>U7#>FcxaUw(XZHM=^0d-ne0m2D`8_w?9aA_^ -1&6dVaUmtz!MW&9hwI2(o|H~IJl_YB(56-NaKwB?;j<-|GUu8bT#!9xqRMP6VuRL~cDSCrGD)o3%8Ri -A2e(!^I<wJ36`@299+%t(aM&rUq}vc5>$aZv&tSZ<y&@zQ%74BvJt-~8Jah<pnkCl%q8ziXv_EJzb5y -o5K<mN{4eh6v56Z1liAjToklxd7tO-~K-I1Y?VRfPdSL_ml6Dp(1-_17^QT+M4B>yaq;uR=4paK?7>% -FkhsKz`sg6Oq3mGNbcD}W#;eihgq+5(|4qROx(d--6+&j8)Ts^P*j#k0UdE9q@}9so=jfJrf)W&(zdB -T?W$kTTqb*(Jc}C`?iAgXV+1$!fpSsJF04PR{p747<@sH<D%Amso~yb6=CP&;;1hr~Q>4||T@4xwS_M -ItS~l5g4Q!uSX&Qk1M7j^2p4+Ov*QycFd=h<=EJv9{GhK1X)NCx6;vU|c=Nq*tGnV^;KFR|1*=U1g?k -UK7(!qGdJ<Ozs(KPw#XJ_leM}Hd8GL3%L=fcP79nA$jgQo_N_H|8U1$DdR09ziQK8OM$nptt35408aA -ocO9qGhzVL5V|teyh|5)f-jiBs7(vUICVkL43TOki3uMaX|fHoBX+Nc?^V|u*^%43Q54OjTr?+vihFY -tX0-r1Jei8Docerj03I{85p}^s(D@K+eD##h_>4YUpU+5k{|r;E|fL<Xua;0b2y61j`LbAS(;bQ<FQR -ev?ips!E{i4&`*Y@Y~da=GE>d4KlhMMX#}oSu2T2Z;312an9#C7?uqpHp=Sq4#s4}@j!lcQUZq5A#va -m+E<02YV83CAtS38a$M{J;IZ2+hCr{vj#K<0WIMBkEWXxqUlL8?bef!LT>l{CXs!_lby8O|T-E>DsBs -Q7e{Ciqba+#$T5@(vB`@?35%MlLz`%j;`$KRQf{w8KlY~bJpx_}H`OwG6gi@3YfKLAzCJR8ZUf|Mjdp -2!-ChfnNcM*nn-LFafhcWbKb*FffYGG}H_iu`;|qT+l`nk@8d*(M>c+kGp8GwL{gcA1Lsb1B9lAPe_d -(dm=CVhYx8XiR8eLzkiZU?}!mYjf(mu;-fl5T!tiA>Kx~KD>c>qpe`R;}i<k8ixp>S`+YA7qv-nK!Jq -CZ!1w*RER~y-5xwEyov1Si;iTE4;=i0c%ut>iU^wTK9T-NoZ@x#C#2<wz`Wvj>#zSfYK0$P335L?yap -|WfZHI673+STkO2a5L0fJjEJjv^vx%Wjd|H8g7Z&jS4N&^BoWlPH=niB(G$Y#RpfsYq%aqQS)<%a`kQ -Ss6G=A7erU{H37&)vJAoL1YeO|P3+citGRgNY#=-40Qr9cF=lzjxMrs{~AOM7PsNXJKx|7a3nW#rb8A -pwGBfNaz^pi0(v^$dNK0PT2^oPx|5@A|%DpJH(__g4_)abwh4_Z{2$wgYfno3?~0fc%atB+{TURVHJg -2p~?NV2?7;05F&b9(6L(Z)w+w3ZPUriJH5|d5Df92V?J`Vec-_2Zg|;?ZM8ubmOA;X?j9JANeS(_bMc -v*xX-t#}y(%jkbR;`ldmI<nRPoI*GwBlsR1blQpQzK>5tf<~Uh%RkN+R&q!Q~nw4l}1cj%^^CY%zhbJ -(h(Vn_R);LaQ*wO{MR#4<e>Z5W#^?2aPs2m=20|D6&5UR>EUJ-}V21_w_0nz}jG;B-VISC%5@VH<O#z -;Ldkzw`_u>xOt<m2TSVtkAg#6#WePBmK~IB?8ij5+kYoq}>(sWhb70gnijrHEam5m6jw0^h@)hQR2!Y -g?kaBc%=~Q021+q!!3QBLXIYdog1eIasa7$~YyfjmzLuxikr%As0vz39)7mV(HP}p1&Y~@x*W9y1$(c -dGbi&VN(ZA@{}>g(|CmL$AW?($(F2;ix9}=BWcSkV1j_2O|iN$l2m4VQm~loELYPcGcG9|4B2Y;%R`Q -HGpY^f<Zu$%Dl<H)eZVosT3C&|CgKz*9FFlLfR7YML?K^R_NV=$DmOF_U@zh><8y<2=t1wEJ2w;#wXd ->Gbl6d3h|}>DR)Z+v5RH9n-s3HW0x<-pZ=>cM9=eZcJQ0U*-?BHeJ0jbnbr9h?BO1aH1EG3RuQyp&To -+~0ZKnY|<N3qbtUM`U`<tOLe$kXkdq$F9uxqMmrb&;Xb#fi?xet_`b7spDu)FAbz~Qa9*x-@hi^{|CC -2nLV1xUei7$bhX2{ZsNt~cBU0vm>l#)OIILsJ=HYZ_gi;Ibs+MqfY?{z*&mJl=!@O5z-nOT{rO*){9| -ZWkKV@E1&vqeeW>dvb2Q^~f)8vOCw{frcIl=c7ejV9+E=NXW0co2I_^9Oks-?#h9TMzS9*+lZo7Ml5~ -7_mqC)aKb>BU)PepqDgP+wk=Slbs@F92o*(pU%uf5V9zzmmcI39k)hif&VX6B8t5vTgi^F_R*KzMdCl -s8mSXCqO9UmV2;}wFjVmhJwpYi`o`3V)UH*|-ff0pG@J>v~c9IwDwZju#D$rACi6*9@w;u46HA--}Cn -L>&B+t`t(%<|__KWDoI=fZcq#d}(5*Cuy<jnC2$*HE(sB87rt;)rnl{|flYYrq|10C=ydE&TgFb>vXl -Qmja$jO{A^Kb=0k+q$`vATD>?~fGTJ^7!ZR1}kfp_^e`>Lcwa4~E?!`pW!loDId-ctCc=+K~85@e?RB -U;wu6hc?%XK){b9TF7jK1ewbXIhdoMoChsD9t)oiM(B8vIiY}MqjWe#R)^?3Y-Ba=7P7Ef`ChOa5JDS -xJh{cN$bkpa7VWTF<9FCTNrABwu~BVZ-l>_mGr~RyWMI(r9aBKKU^gi|Q+@6l2|eQ&h<lfo*|iwfUjl -)YguYO17<&wN>ZQs|kn~29&BgXPlcAPrDR~UM3>#?jLN_T$nQc9MA8-Q&5(&`6Q$<ANG?qwC-G!gT<k -4MBYN`p=gxof*XSaB&?@l#W5fTQ7?!eJlZI0zRO0jJ%5Rooo*eTN1#U1%D?eTeFn^3!8iWu8z+@a5;) -z~AiL)6n>k61DdAwLG9vksrwW!m180S`5XAd@N?OWf?m`Ni2JVY3gd1qZhmtplx8s{-~BFcgJI3JI=7 -2MbhsR)Shp<?I0CXiS~D;yTMdVIYk#d62jYARbeps0&q~>}(TW05Ll@(Pudu--FW;OfEhOPTGh53@PX -5@6U9K+rW7e5fO>*I$ONIJbF`9{pX+=Ehx1)yZrIv)$8}4-qBWs>t9=;bIQ#xKD@trfAuGL8YWz^$)> -KjtDqCy{T4(Z)f9`{E`{B>>95nGJ^~?fb@cq%@o$cfkB^T3{V2;ZhOCFBJS?h1<0?PQ4oyV)VcmW{yj -4x5%0sw)6e7M78I^)Is^o7GnmULSTL9#yUW%O!%;fzRf8SvZcX6Fewu3>dc*w`WDR<0}Sw6FD!6p0dE -w`tan@w_7tqKY9!zg4_768u?Hkw8~$v?3AVw=%42|QB_*{UEf5)%Q>5(4WRqPLLWhBZhE)xJlw8Zh1f -90uia(=4~P6QX>Z8pV*tMuu)(Ix7M|08V1pG_S~lcx~e(LRE@eVsI>uJM=H@vs$Vjph3bp?AJstV75C -Tvyl>~6M_?YL%Rnk4=MSpYHEWGVzL3+PnHu$XbVx@M~OkJ{9^@s{Cu@=@8MktEpjS&qXm+&BWP_0UqL -KO$=4yq1;)CSiSN)iCIhUBO;Hu4Q)Nl4i|p*h9rMIL#6<OFdxY?l5O0~%ZvGryV4x-j|C=d?r1r}tkW -9b=z)y*2=dRl5Y0F?`FdYAb3#2cN4ZKsd$Oh}g9OY^|$dkPBy@+lN&gZeCirp}pOM>usW{+OP<Ltmbk -ok(1-b}#mhCRNE8_)?{32b<N$(Tcuapfsr!5-_fxK+vJ7O2Mh>~qmg(jB1QW5n`(K~~?Stm|8OG=oiD ->8KUVyBh|8*^(@};w;8W$ne)l*;6;`eMsc~dI8x#4KA#R$pPyb<~(=kEXC~vPGjdz8Oi$AX~>B<Vfn7 -DFs%+)(umS!em}Bf*b(b;@C2m}ie|yAyM+FY_|L&Wl#0%ok8V5=)#6_kvDdqXE9qTuXB*#f&r8aQKwo -H7s%q8U42IQ2Cvz|jdmMpWx2qW21}Xs9^F}Ckvr&)AWp?*%w<GBLtSDJ2rNkJM05C@U1RnH|gJ)*yO+ -aIOU=lZk(GCcBpBJ;DTGm7(L;sH>jge3juA5`i^7?1iy2-kmI6?Cx-jC8zr(vj57~VwCP6=d6dE~n1e -^w%;i6(XYi9`Mkhbp`lz}aGf5sHqF%rvUYe8x_*C@`5X`_B2Vh!3>0*b&4x)_pss$)cU1sf$yGjexXk -VRgg@g-Vj~aE^v6PKC;VIOt3)V?xvA15mT{EI^L&Z|Cv@XtpA?nC3Aa9gT(^OyqxcO+oKpzdymO42ib -QN|O|h?9Pf-IJ)aC6<Z*2mC|}N92ZX+JDGCxTHz|WW2K1}oM;qd%A<0%B~9Cz$j4Th+#eH2Z013Zucm -0xzQsve92Dp04p}sAI*Bdnf=pEWIC<W-x(Y>dh3Vs}l#~G<ECYB5!eEDku_)ts?I|p0>=BSJB#!I41D ->_hNf`+^na9O2vNuTJ_?py_MsdPXKx2hBnFANxj?Dh%4xMB-l+x{r(&y-$2e*8ufj2j-Xc8r;Xd?dwX -F?dSX$4V^rbb-Q{)Wm+RJ9&l*9(OaZE!kDb*D<sAVlOA_0V`MC}18mYm8#krd(#eTO^Kl5m8~u?g0Zj -;I8dplCX=1Z#m3vy{;?DS?e%2V1r?jO@X0ul08QghGSJwc(<53q19cH`!;yc-%ZgBKT&6HYH#SUBbnN -8CbJ84?(XuO?GQL#w$&*Tem`$0@(#|s_v8j1twF3s*MO=d!)orvBk8nAG{!#WQCwk7i;S%hb_aCnYzu -!Wk_cw(>&(|6T+@#3aNNfpC0=BoXt>y<cVVno^@p>oX>#%Y694}Q|EX?~P9m^y&V86yFrSYf-jEn3c< -UG?5={FDVc-$+fxOPTjB^mGTr*`20b9dp3QF?S$N`c*AcX#Pz3o&x_oXp(8g;56fx^k;#s`mr=UDGYd -(t6kVP4*}Gwvvtl7?=xDbY;Sw_R;o>M2>&#Q=@Nmn*bQc~H)mhe%Hj-=dj`*B)KYL}QpRxaqB&hYk1j -5elN&DalAbpxwcM?>bM0YjD)1k-v50c+OFdEPh@|hAhi~mB}F2d1ROdgqC`3tdiL5z>}zV;lBsMv%Ok -hbH^s<XXIR9#O8dC%LGysl^H=}Aty|u!%xibL<mK9;fKC36kBpCrE$#N2+E<<eh(Zu5c6V5`7A&kKnZ -G{^-1G7aHJ0UQ}uG1$vCWngAq8IX^oqROf69VFgL!cB`4bStiu?nGqxwz5}C%c+zZe#is;vSE8&%Rt~ -kh%J%-wbg3<j{>cY40t%1B1<Z(%pmt|X<^k!NXjUIl9H?(wXQJ{@5+}yGTHXVUElwN=<VUYO|`#se~3 -AF!tfF9@(oP=w~^#d?2dJPns18r_HOuVua0>aBxJkZS3CNG{HPvO7k{ybkidx2NK!T-LUq{$hU#xN6K -)PU&X3gxkj3WbZQGdW#wv_M*Y(_k=buZ|}dN?Xw+b?U>E!6N?yGS^7W2;3nO+iNF+)+WvS<HD*J5+YC -eVD~nhD=Z%<6%`!p#AEJO1i??=TJ@BIHAIr)3{>_dFn2-vRIDl*>j3#1jHAFp5xTI{ln#4S<f`>pyYI -Y#QxRofI6mEVwsi}cjBRAb<R6KDh^OO9!ttDx4Z+Y_yA;IWAY?{siG9XMQI;TZw|o*rk-a$c`P}UhNV -E<((HT2oA_!*&hRETBiQ7aZl#)bLK=>$q6!kz#kt_T~bCyGH;<-iZaY}J;ekp+n+{6Byqqtr!MPeBbC -q9Wcc#LG4(Oh8rf~PRAjCTWFo1D&qXQb6<%0SlA1?sULlt>7rBRjF0gjW*o0Qw;HmLCeeU2c~Ltsad} -+y4Z^=4BHlW03{OF`qZ7yCvfZphaEz6M{yDpHmF%*DSmvITaj+#YdClkb(mQJz2et)a`>{%?_qS&nNS -N^E4PnVHkiMN*x*{M~l*4dt!L<c+xdl)h>h3S}MGUCKc-~cmznPE>-2ABZS8YXLHEbU_6~`U>8iST2q -84o+2!*(RuxOUPxI_mU7iC7i)3kXd0FrQLg?1h%2lrslz~G=0+)+jD=+qk-4wYJ)qGE>-?zB=wI$~_| -iY{-os73=}Xc=&F-_MhoTYUsbX~!2OIp^?ygcI@z$MBwnRy_Av_{}x)ne;URtcgbI)90jTclk2F=81U -($6!eFIuf1q3KoYi7!n*ayYr<3&Jg?O@O{Ys)aOk%)gjRP;imjVV{5i0zDCjS8AI;FW#KSbVHdB8>FZ -El?5G#jsRlmxbABahilDeH5JZk(_kTeoRJND%$FF9STRrGDxHKtirxMm_{`y*o+<jdOTe$z~Bp4sB_< -|11HOo6DhD1k(91Tg4&&rG72-Ip@&gXkLXkz`(<xwP7fs_48m~mk&xH3XGf+?j7UVv4hNPrnK|2T@aV -R>q@I+%5-rntl(_~h$dRZPM-5h+Zi$+H+~iCXV5RP|rXXPgF<PP50rdE(m-mbDVrV1^j7TW5c4YdwY3 -hE3_8N{#=_^yJF2kZ(Xcb#J(A-7|4~r^iIKktFQw>_KuHBgm?a47>-7rC!>>XDW<9Mv1Yc&ZpT2i|Ss -v7J&kTLCmV$hTQ-~IMD`RVv)lIV<KaOfFq^dCB!OTxGo_4-JNp!rL1+arMcU1W*HeX$4D&fcPiQ=eKF -t<EKK;DJ)sz5~$~-<Uezr4Yw-fS{VEy+ip{!FjMLqsENF)f00Q(}bjf`7_t3eE;s<*{dr|5^#W#EfPh -hdb4HyNyso3?6L(<5-i|}nHxkrxN1!&_*b`HdIGh;kVIApm!;S^Q6bvm;PB{@D7V?BA$1>G=3Q(;&l> ->+5gYnePseT?7yI!S6f2HUsS-al;~G?55&$yTF66(RvWFLAFi>rbe8~H3{K^XSTvEc!$BH0f&0tnIoZ -!o*8K6S{Nn;^W1m{sxBiso<P26NGn5%MUxUBxLi0uGkO4#C~c`YQGf%F>|n<^A~?0D!N)#HU>In{6(+ -y`}Ez>1KFrR%FtnT(NegCR(DlbcLmQ-j@tAX65-h5>K`p|yj;8Z+c0F%#*>wMa-ZLQv;@%qCmi<e_+j -eO-=ghfjp_OMNxuYoqFEF`Xg{w#bI|3AsvYQ1d4Uw|^j<-hU2=7^X@avSLd-aQS`f>NK*04r}q?=rQ; -amtK=7lrHWYyZG{X#*eOU?PhOs2!F6|Z_(c4Tl$%3u{0Ye#Q3{75c<Vk4=4M0OA%ci3ai0S6k3CyppX -V`W!#87n1sgBE$zwF1ry^jisMlJ?hF#)bp&mZ#kf^165O!00ng@qE>z+~n`HxFo)WD?tF-P!RkoN6`k -);RGk~W{qEXTTYHiN&BxjH-V@UW`UiUzd52Z-}Yz^X-j|4^_mjl9*{L;0#@GT<mK51r{WX~2m6pZbIi -M0gUCYr7eO&IPOOLOV01BOGzx%g|eSNt9W!QF$_vF)Jjg^oNF#O@o+bZ-Rj2m96N?o@~Ll))JD!vhoJ -9a6E=;hHISuTQ--k6UVwyjIPk2C<`Ce<IX&>Jr=|Ls?;v_P_b$)n#&iAc}BP-#!>}kJm+xD872osZOP -QjX?@~O#00ihT*SCESfSy_FDNtjyfvNYZJe4Mt=rg?xR0Wpr(Ig;4L@$6Tf@NKpVUoz9q$p7930;dCj -#JLK-Eh3auOKP8RM^b73grj|BatZ?y5MQlC4g4i;xmrMq`4kc{v{0d}Z_x8;l+Uo#{<*^0wuSt*dZ1i -Hl}=7gAbgmf9mo~}`#I!f%MY%Kzq9DMrl{@o9=Kc0QKJb(Xg_U_}`Kb(CyKquS)JiYX6HUgTIXB3%6? -m|LV^3IaRP*5JPGEs2SVSFC<MKciUydYpmiLNuuZooRu{}w%@hku%kl2Q6+;5_3-r7aMcZan(w|73@M -{TWLGfiPlMNWb7>5=Ug~xTEL>en$6A4eO`FciFv3Ny&N?n7j<EvO?Oq5uA1#L|`LIbH$UF4ay`Ug=<N -2)c{lJ7!6V8jVOW5ZeM&LuCs`34OAuA?2N4$b0FE<2LYUMp_0GR&4UxuhyWf;`FE>twC2v=Cjk_le*) -W^<vG@!Di*p7f?hlh9xFHqB}21Nln4^<i(CI7$i9r)Vh1}aT<Y78J8WtgHc8mKVcXlOHf>4?=62*gFm -Qws!R>p$cA)2<@UVzu5ZHFcVH*@5geGP}1udcz8h|K142it;sB<H|*jlg>9wTU!qG{!17YvON)^42Ta -Q^dp(PBoNs*aA+=f6uoV=f%-Uw+u*Vy8FVy4(SBpI{!+SPp564)F?K7zmKYk46XBv@g|4qku*qp~ilu -LC9PtJGRQ{^ou>XOmW~faFa=Zw_ik#(JQVVrjyaBW<6pZ5W=q=kH^e+&DP`IW4Ejk$mmT+W$F?Ykh-W -+b4pdKup~%~-d>U|Z9Hag%&eT4%wPtKTQqN|({|gYI=X#4`RV!34=9<s^R`rKGmglyZ#1!`TWlsH9u< -k~_sJDoVH}38HJ*^D(OwxrV3>U;H%P33jS{n^I2a>hNkB%9+^5#+k15+R0FD^3uJhq03EyX1{U!qYrU -7U!MfAHmPU6vV={~5bsh?m>ThJ+cGC56GLM#U00gKp(Vn;>=af@1Sv?<M8N+e;?#p81IFhhKYssJ()# -A2~8!pl}g4F|KwBDFNprH-9<k4QZ>FD76B80-UCg*#!`+UCt`=@hJ3sm@BF{Dz4Ea8V6YkynkF8n2|- -QFO__z=WdlH(Co8WwKQkWT8Er2}5o*s^<Iz6KyDK-CajY*2dV{gD1^_)O|F*H(i10;p1*<TSal<`twy -rm<LTOJGIiG8{#jFWrx5;_eDd{utGf>vJnoA!-*qze|)8RNUse=nCmb9k4pG{@}nPf_Iq<nUzwHi@;q -WF5?03HQR1OS43Aomz1)rHc0{X#d^MEdUOamdQvosLfPDAE+11FWBZEn#53xg!`{@xF^M}g^2UA_WP{ -g=r`(6gg#3Z-VP&}X=t1Lo}k)ygi=wQn%w8Y6=@eumCWRC~#vFsUe;u&$_v3_zA(Hm1kmS=_Z<w=_ye -#i7fmNnS=UyyD@uzx8kvfH*5har5CtepOf&g|RFwtG`gl|?+Ab7%3>Jav<`jDa)eSEn$Zx-{shgHAY5 -gHGZhy(Vom35buJdx2(-eV8K~b{M{v<=0PMcp|@k;_?`hLT@$JbmZ45Z2XH%*wy<b$V7x<&TCDBcO#G -E*K!2!GQGs4Q%nVW;1$eM%7q~C`o(NJ-p4#o=)Ij%U~fK`%>vbPrJ4<h`rTZzi_AU!n(;Zm>3KfK3z* -3(vC(yta}vj$YB0$zs%d+^90UfBN=$Mk&lVz~VQFWo$xM%9+SPo1tG48NM|a?SzTiQ7KO6OzR(@tPyw -cjK$dwr&F*iXQp4e&m0>Z}-qkEVR&XnE>$c8a`m+8s6&QI_$4qo))vne+O%k9a_NyCUp^WJuJm(4h<m -|}kW&8mT;Ne}~NPuC(wa9KqKI^Ak#JKojS?tWRDg9QJ29h-ks<5rj!tC4KzI%3-Z7>z>VBZ86P>RBud -?gYnW_^xwmhx<c(|I+K_%$=C7q%nHXs3XVg@GEG7Iw1qEjv1utf)hcm7rh$9?{tW(4RSKx{Gn^JK_LD -b;U|1ap2iqBTl%Ztz~BzrnDqC7CWuD534V{e(HJFN>7M~C!7l_QUk4i?LfAI=%Wvi&B>L^`FTYuUozO -J6GT7WfSNnu>aiFI9;!%a(FSs?4(D~dFQJ~{X`|gGZsj)p;Sl=1s&+D>iZ#d<K0*R0Zn1CjJ!LB<LS5 -SBC<s8rSM`CU&56EyJmvh}MG_%3F#B!h^QXT@v5{gHKA}kt^iVT(W5qC#RqI*964z$$d&O^?f?TAc;X -u4C<G&FGt6?Z=6(#jo38HO);Bc;vpPe*WILh;Xr@;>%80WMCTX&j`weS(9Id?3Ntew3|6!>i~4eASbI -2{@iLR2D$$bek$&I;hQmjZCpNk@je~$B6zDA;89cbkHW}7bi&gcN`6a;1Z^+1Mr9r`_(zTP~|v!)_Z? -r>?|EPS6$fxFPq^XCy?5=;j;_Clp(fT_Yb_nE_^M$D~kV*zt8USpZY?(-~8sq@Eh&iDlooes^22yUj< -Bk-LKbMdvz$Q#JEtS6OaDQ1JAw5i-FE*jqpg=QKkl|zAu#yQnhc13mootGW<@4nbheq3lrX#qBUlPhE -aES9iV}37}>qfc6CTCsap@ZANyKCr}J2<J9Ro7l;(cHR|`IlH$8?kehpXL`9i~x!ut`#q4(?8^vasH2 -jV>*us<-NoeY;UH;?Zp-`CB;=%>OwOzn%F;z%@vFyuC*0}oZ#^(!W>X&ER(1A}gpIh7@y`zSI%w4KiA -cG1r6L<I9snfMu7ayZ6>WJegy$4WyJ!s6@?C!pXi;gZntJ$TX{q`QJ(FxL{(V{P0>WD0?UQCBN0;GN$ -U<Qo2GN7aCkbEuaJ%iYqVMuZ4I10gi$Rf|blO0pk5F`S*D;&J(976P0-)YxJyNdF_7>iWRZT*h`7zQ+ -Xi|DQem1^01}DlgguH42TBG+wNKe|sO;H-Dh=fSE}LB`K=12F$?J>DGs!R6oQ+V=2_{U2JcFJ1wLrg% -A)4ZRHA@IyJzrAE(RH5j2VC!3<BK#6)8G_2pk4pEkq}6q9->6){O7LB2-;!C2`AbHcdfu5yN#CKt%v( -bg(u3Vq<1&Fv;}W2%6n*NPA1aZ8jfWpy?^zPeh^)Tw4>K<%1liuIkao&wcL<nn4f4MZp^@oQk1mw#!? -jxpU(^(UUn+2;(4H@Wr9zWeSwH%uo)C>?9Ms_PX<Y?ys{F!3I4bd_bDWOMMt*%d~m>V_HzA6dcCDSb$ -<+uBvYaGHGkjGsVhZ?|?L*goVIa4Ma$K13&np7fKD9T<-T!6)>g0+Yc3eWzP;<(QzNBo{cL3UL@y#PU -cR7^y{!eW*`vxNr1Nozg?)6)>&|<D2f4IUUy+bEi5=<U7B(`yFCCXkNM^_<nNfy!&e^9^2?)bemAdk9 -{F3Zm!8Uvg27a*<TCFbj7@%7T?882lOvJTAmC*Nex2<S+G16Koa3Rbzd=KD+$rXJ9(v@t@D-HL1{QY* -7w+O>b=~~FOi4kRA_5BjTTl>ze!GDJZ0m@Q=&R)LK)Bxy`1a$x4(Vy?;4?r;JS(RKgny+=!U9tx%{)6 -Z!Z{te||bXIXvc&OI<t|MG3*n9TjOeo@4BF!-=k(G)dLy9A%lp`4CK-;A@l7*_CQ!_MG4MH)x<mBf#K -$s)JWl54@Ok@a2^nf)`Er(3_<7E0|xC&+GpJP)h>@6aWAK2ml;P_EuiZNww<<000>v001EX003}la4% -nWWo~3|axZmqY;0*_GcRR$V`Xr3X>V?GE^v9hSzT`%yAgfYuOJi{kqbo$dS3$JIzX<XGyxnZu<Z76P3 -=+=>s@k7awQ8F?QieQko&1!Tkb;x#FCce%<#<c%nWy9bjG4+Q@Fy2C}J|pwQ-EEtxgLkBL90d+Tgrd& -f`bE6?SIj(=5|___lK{kK$Ac<;un1Rjji-6;9j=o-l41PD<rEYLARYZ`dE)3buTTMed|lb~GBrDYuq= -ySw|fG)9|AHF!B6G59wgk7<!8pR>Y>gsqRv?WARyPKs2_VAhDH=OC>m^&i|QskW2w*^zqiPhTPPm)5D -bw6b~7(v3Du;0()RPAU!(G$_Vd4q|EziP(Twq>?U*CRU`IDNUHNOjrvZ2paGoj?Qq9UD2FspfYFHku< -)rb9Q0J?1D|&QZJj@jYx`EgjEfNZ`fDZMlR#W6p_jclWPl+P)#rbf=PM9qKHt6qA8o)XeFi$|6W$;-H -Lw|!a5IN1?95<R<kU4hdZ|8djUaabu769Nbhg2?HNcGW*ANw12o}p^|(^n1+xv{{{g?!z%G)j)%9Q)- -f~I7wi62Hu~--<H!=pi*oMp0GK@h*A+ut!R!YQ(_fW_i{d7D_ncInmIOa4)I<EF=pLJ8fbm~vcl>LR9 -t!;X$$OXhqWs8UAvUX6vfVQW#kz1*F8qpkZI(=3<{UTzWh_klJ3#T*gWDI+OMd;c!$5Gh#LMsOZ`R?w -Ri|)?5$T}TALnuv+R%Zg)1K3K5ryMYbksZ%-p@6ew^3M3f_1*}Z1G%0u*qb>VK*cjy2d-%;XX^seKq_ -eqc<k1|{lJb1P#17GY;-MC>5j9}qVn%DVAv9bYS^{ln?9QV!Jlr0Ga;CoWH2008Gn*lkug<dYhjq);D -IqxKoDD^3XzCp=Jz?zx#1Zd(mA_p2V+H+bBAv6bLM2%{NX=v!XRV)Hmes9L!(RT4I?W&G!<De1pQ%xy -5Iq1r9dWOVnu0oR>1<Zxz)<AEL0*)dPHd<Bm*4h(3%%?MFi2IHa`ST@?S>PXgDn}G6t_yn3jN2rt%xR -uxzs6Wrn;kmy}5wiZ5%aO_%mlXN!mHOs%b3?6}&B<lNW*{t{2pIwDofhg;z+@J;Xm1u@6JLT(k?fr4| -hM8M+ew+5IExb9$(4v@~#jFyTPY=~1csk|1Pjw8K;u1fPN?CxYHbm3MG=>04rK{i0t070qtaOe{VWXu -i3*UpRUC#<0BJcb0uiXVk5CHlZ-I*tot!+~9J7ZasX;pHbBWST;~1OsfX0nItY<op3E$fkBn>woV){` -3IbO2V3Oa$C#T?>$dHJ<QtYt+nZ{j!E;!l${Z(T_ijPFep<bjabM%f{<_r;e@3(tPo}|%n5@7SpZONL -=z2hp>$aqVMWBab3ERG0f>fzBW=;UQtgD1&g%ej1$mgX>e?~vxCf%vrvI01mduLI)`J`L`ftRclV&D8 -CQVsS1=%#{;Il940|)VSD(wz5D{*KRJ?!2VJWY>mx%hc=bG!U{zgm77NZ89PcgMN~ctO7}^O-3iK@%R -EhF<GkqoLg};5Gc8ruqQ6tY7sag|abuh3=9Fp%M|smd5Z6{G!B4KX=fstp&`FN&JBBYYpcSZ2mh>i@- -7U*C~6sDumrZ*wz)y!D#%8WXai9?qL>2tyFp8Ua;X8H#XRCYF57ikQpLkXE-cYW-{d_)WHxLIm#nIdM -xNk6lqY}pB%n|Sf3q8ZkYzkMK5=2?bf2A|55<xsAQGMfZZ!N>zTM$k4hiZ*|_j}%M=KZ5Fk{G9NT)BV -@c?<VE8HhP}~3`)xuDdpB*6aKRV@ocPm3heixn~`Kpv!Q@1aL2NTvkf`MDdlj*ora5$)PP=Q=S0fie$ -G4E6N-l}73fd00;S>AqMM9bUTpSK8s({Q}GI##m0HFiwXSHG5v?_Yc8|A`5?uo1Q+|2|z^HGu*M7OL{ -{lB03qQEw3+RH<JW*j<K4(1x{)8ds_ZJTLVhzg4mRClJ@?)ZIV>Q7Y^h(66-1{B@zkTdip(LtVmFpKk -_O;JYHbMM%1@vLoY<q3kIXq#jTUBfbX?Tsfe0b%dHe!_@OCeU_F{HYD~dY-rj5g|+Y;`1~$^rQD&vUI -#Zo3W3b-u2=7=``2nCw}tWiA$_U9_dryT5e4?EkQ#!bApmZ^|M1Q^JJL$9+W?c>F%^Qu+J*tGUj!7`i -BR$L@lBsi)!<+#e*~mz+-=4as%*=v&Tzfw1F#G^O&u9e1J4D$vb?4lstf&r1fpB)3iT+GNvjo}vR(oX -tLmx@Vj=eHkzKS&FhOf%9(dr8ooIOI65$V>9KnQd{?c_3y7g4_(H(u_0%pMtX@a`T9vE+JXZ~uJ`rgv -e2bRi5Pt+4%VJf!C5n?0P1)N)`@1R!q*I1SrehBtn5|iRKqOiZo<#TwpuZwH*rvn$too!XXrb2DOw^$ -adw+;dTTZ!t%q`aKDrdi$$AUAIURA_y0wDmp^jbX6{{&H-OP9`z9-G>KA{7&-p!B5+3Xs==bf%p$94@ -i!hsMO-ovkr#vLIz>#Mq6K->V;3M{hZv8wQW5~pr-=bmzcRZy}}GPl;e(rE+ktY9rPZC6v0m_Wh=pSP -f!V|a&>9J=}5V<9=dD<2X(4+(7fwj6Ch!=56m(^D3zBd@AT5F2mNx=G>GT{ziZ`*16tdzv^tTdlgnDe -%qswgWWePRIt@r#n3W6YV!(gxRE~bLSHa}hc>4tLEo6=$@4}GB>i`&Xx1ZnR?UOh-arQS5D|*W|yfWL --DBdscCEZwY-(l?NT#|t2F0|Vv^Ji<Z5((Yr^rWV)Rny`hTtOAuXuU(BOMOIDEBa!zvH_a+pI?4X+`E -r4L=IayotGUsasxHxZ96bT_kW#zn4MpMzhQ5&K}fO4dW-pwny<B>7f{fJ8mh#pIWhjjHr7^4=N~_O{J -`FQ3JR{O0Sr-m70Bd<`fK?_cQ^Ix40v8v<51C7>&EkT1e66kURw671;cTqy{OS#kQZnxJ5F7+UpFoD8 -r07w6q(2k^Y`zu`NOXkzK<)hBDI4`+QCfjZ>v3RmY}z(OhCM!)m{EO>4p4ZsGzD}e4N`G^~HH*>ZGqK -`6|LiTv@JJ2$fjiJ2#_??JhjWmpS3;y|MX$x36?Qv0VqbFWnffkN8dxLO=4yI?DaJDZQ9D(Df12><$Y -eY9dm-ot1BI>Gm?iMEx9j!z0YPQ?Q)kK8f(Yt-p7@XiTGPIcVe!5nPah9vufqjJqN`t~&+dW!K#+BMw -p}SRP}&Hi%z%alxQm)dk-4(4Aj-l}gty<``NpFA~68gT%Je{tHk`0|XQR000O897^_9$0$oIAPN8ggC -PI_9RL6TaA|NaUv_0~WN&gWb#iQMX<{=kW@%+?WOFWXdEHriZ`;Tb|6iYC!5|Qslh(F;K?Aia>T~S70 -C5^5IkbgsP%CmJF{Vf!cNtqv)6d?SeUQtCe955?pn?I3%bnSI{N}Y@m-&u_;kuGl$-|H&yCN?oVJnfR -mE@s*9*xX8-?1d6l}u7$mv+gH%YDJ?g_4g(Yh+6c7TvK87nZ9?9!8^4%-3X7aUsGe&m_-eh~)k{NqNS -0d_rIYt5Uh}SW%=&#AK3ZM|mW<oC;ZTw)2Adh``75JoWt}awBrfiFdA9PCo!kkK}8@2r{N4wQ*jslI@ -5+N^`-_2cWg9MCMw)0~{-nWE(Qy<?(!3E5D@f0Y-y{|Eo30@-DB4Wn{(mSv;=w#`Blvw_$4)P1Xalmm -GYTHGZJlxGkdw*T=UcFYOT{ht4i($E@>m$7HzWEaqjXv<b^~G@G5C_}V+4SX%Lp1AgLZ!Ar8PvIw1p8 -fZp@Wik1s$|VO!pxshVG;gAKa|yq+LBZIH7r2;7zS*N-NycN6WaQoDIYAMO8{e{0CQ+5LGTj3;Usoxf -*W)b6{WgiVV4BTV5=0wIGQ}awv+3FU^H;C5I$}c7<W56?pqhdLBoYB!(=@*qie{;#IDPSgyysfY@9Fp -C4_he<F+Vzzd7cWIaJi;=xjEX(U3!F;1A-?)6HI~NkIS$P#y$`g2mxpazgm|G8c>#KDgICZKd=m#8St -a^$g_0c!k|*D%~&lBa4yRHQxXG1CdhKR+DpLm65+Ch6PFg+fR~2dnR3b$oif#~MuDm<iSn2mL3`Luz| -lgoEaJWrWr7)ju9A$Edxh7aIY7(0(BCxX$k+EOxt_l8f|2Ez<p{C84^9S{Xc|O<eja-_H#g-?HV)iq5 -g20&QjMRAh4)l=WAc==uwCz!<-Q?oh$+vsG)zQE;x+sEL&OV7{GYWMF4VS*vdqE8X6+@f*Mc_hf(g-Z -N(Jv8t)f*+Q0tHOd;7Q9oRBBv?OtvHl(R!Nv{JWh_=M<X8{~vVsDl8jnm4h99fq=&LcLYWPt6{~%j^W -xTVcqmk`B*?LmMi>p*bD7vO5)rwneoVsugm{z_HI3;M|^Xe~aY?(Ptc@c0lqBfBJCs`g!>7;_d6R^NX -vCHy_>u{b#kc@@}f*<Jruc!_TMiJu&ur$BUFjP-JdAa-Ya8{J8O`L-YJx(deIMVKVwM8a*LrX{u6MnZ -x%Mf;mzdPgUOIhvQ?+4#y8Cm*km-<uiQxfer~ut0IP+>#Ku5*G51Sp_{g)A4P$Z{qy{I_SY{S)gh0|^ -==h*5&E%Y*@pWl!$eE)9XV<Cf$d=%1}<#%QKpH0`DGNCA{3U|F5wQao)l@FE;7#Jl#396WcTc#o(dC6 -NNbi$ALNU+L9a|6VsWkZ(@mLIg?}8}Y9|+%*MMpP<TT261r!LsVd?$DqaX7m^RMAG7ZHP!s}Bg2J@ju ->^w6>Nj_-vZ+-eil&@ws798X2H@~vWRBzMxn!5WU`==p!Cf-8X4b^L!-vsIB>YFYl0mv<=P%aW~i^V5 -{@lVduY(cdjYrKv&z*TgHnWuFp|5h`X>m8sqUnE(vFD&Yu_)@Vm52?vhqAJgE`_6_%^5#2!SS1X$2x@ -~}VK^0X&@$rd{0<fQ2oI<Fw|A!8uQvxRHyC{GO@`pHFLBQmoNR!?E(;bD~axei6B+qsrKGIcS(!K<ft -Y9j-XJss=m{4H4StV&A!Sn-h3$h%HW?&el&@@05`31s3UM4(^{e1NiT-%B6GlHP8(S&gha+I2ktnzs8 -#NXF<rx0tF#~RP3<f=k`+<LY>6M+P6PPlTUO^!0OcK62|=s5ENgNdchsAiD(4Pt0JiebKS63MB`D%y< -5-w<G^Bv~R8mg)qiY$(;-h==yi2yI_n4j&c)Ck7Y?CXi;qn7~v;q;7LmwlO&vk1=vk^25GnXJ)sFb_V ->-F@evQ2QlN!lXb-mL)0q_o4O`=x}MZe3dGHk;I!t+I%4rA&zwz0*1^@rEQ^C;Y8oeYQ6d^DmoJn+oi -{Zg7PUz29SZ*oC4KvabuaX4U)&z0hm!#cgo|$;gCVw!uCTkiq&@H_6~hpE+dQsaf=yf~D@Z)Tk5Z^~3 -S&+-nS6sW9W&Z|prA<R>gf6MpHSP<WOYi_DT2EBWJ%VLdh>Fx8_PV6r$X)#v?yIaZQ$p9Rp51xz<dKa -y@C>m7bahK8k|xyY8niPLuiytvaln=*_)SY6+N!Rp`cX#fZ@>i+Pz*v1e2>*R~JN82&2mVmX};bTKx) -H*l?vaE6m~if$e~3J|DI4F<$5ScuvMER*ol~H|&n14Di~=ZR%D^KFINejLkimKsC*)anPYJIZJDL;P2 -4q1<(9uLqOqY><3*As8Q^&_`6~OwX$Ym)@lwQTC!sse)O^6o1R3_kAXc6!<G)s8x35rMPof&(EXauaK -<l!?1r*-7qx>mUpcTdPQylEtak)tu^^}I_xR~z!o82QjY5m4KbH5|3=-m}!~KyfQ0GRWcc7E$FuRT(I -idHyC7v@FsQ|1S4oEnD=g2zwXgk$eztOyxj(XY7atnqJraK6bux@pISC@tR5V(??;m6_Q)U}dlCKXCw -l{C_yfAHht>(8HfSthZn%iF^<(V<D`k?M@)9-HIA@_;RJO*hzj;pgAb+B^I^?Y%wVYg&9Zc++QX+4aw -$#sjx9U8f1-wWg%ilYZB2zhQiJ4E}R7j<&W4-I_6|3)rgXLeD04C?JXCFr$$Rx}i;O9NSC&mx%z91mz -hMQ|x+9c6Dp};tcEtxP~-`XZm+wD^scj4pyu#sMv)p-91+K7CRiw?oJlorxWk@<ZcE(X7Gbjx*SflN+ -QSx*SAgX1-GfdShU1Gkel5t6V)npGxRV!s;ufeVXkgc8nobbily!4e6vHS3nol}{dBEQVK8ZCv9H@lH -&eK{?B|*ajArh9G#(r18YTuhit_=qzEeAe+t!<DqBl|v(x))P8Q(NrCv;pPUMAtXH-JHJ()s_B^ZYv3 -|7G)TTSm7$(c(4#p2^*&m~J@aTC;URE*aFXpzi{ufOSCy<MN!CyV{1<WqWOxZ-Wjl402jUs76UkG6So -g_znkqD|tZIHo-vp{B`vXitFmtA;<q<ctIbCYF$H7Q8-ZS)YA4~SGNgq0}ef@wHk=dQfeTwsJn^-;J$ -*h#Q>DSu#lM;sm1Cd-MJe8T0IewT-RgZ_*Iz3bl*tTgSR`(yY~i7{q7}b*ChR7Id)GUcdsLwTa5vR)} -W6twQ?U|JZSz_*bLh27JIxt1hA-7UVX#(Z5+Q_xS6q~(RD9GD$kqr7JG@f(}dcO4-tXk<4v4P0hm-^* -><D#tGb^KdaOFbOq2Hp=XghN1vA%#2#jB$Y0|4hXZ=6=7f?$B1QY-O00;maO7>QVtG}au0{{Ss2><{e -0001RX>c!Jc4cm4Z*nhna%^mAVlyvhX>4V1Z*z1maCwzg!H(ND5WVXw1}YYi3Y$S1AShhyC1?Wpkfca -@DVjo}q|usPid0BycYVpXXGl@9EqgZ`0fr@V=FQA|!(nT52Sw2iZZKFBAi7=~2fVUc4i1a)J4xbtB^0 --{5Yu<98?5d0rESuBJfSC?H+zS6`!N~USu0RBcG~=eUk9}AonMRwJ+E*14bCQ3JS=t?Els;slH42N(7 -<)fgh{P$hdxUO*RFq0^M7Ccmn2DpEz~=$Ef$p?RKv|a%Qp$olcs6-|2P=HuHwdUYlXUz`?aMg62V|Ed -5s+^2dy^Hi4L9C(y|34I{}<lDYc0-w!;T0+I^-i8w^*C?y{G!^E}v#7L*PJv%miNZA@;7GX<hbsoE?J -sOji$kQ7w2O|06JQv}uvUHy->v)QP@qWmq{afhJqh|JM~C1L0D(0i^eNMT9g7P8wF+~wc~BF6$%0gWK -sRe1GAmaKy7rj|tJru;S-DMj@v%Fm8<FJqV~5u!m5|JHF;W6X6GBIE~71d-v1^3~C=n~Mq-C@r4adb` -;q?06x=0tf}-$of3|>ZDJPvhdG7U<A8){WSi;>KKOkrY=SfvtNUMekR!?S}_I<_6BPbtl4bfC3~IxK* -Yay2)t>86Iyu<pQQ|R{FW4UJ7J+6RPCJun)bs19WvMwQ^<*;!6IzD(WX3axpD>fJ5ldqkJ{%q2SkLQ> -_ztTEftSX77=}a_&47k7dtKX(GzZSzXerM`6F9&gLI<j#ua4RHQezzq3Psaf6xjSlD`e!z(dv~gP#Xf -ep!yrWk~|i&?2o6<`6G@h_#Oa@3-&Y`s6z9B9$Am;9X4eK*OIW_;FlQQ3t|tzj~f_`Dvu7yhE&QoOnI -ff&i$CD1Ajmj-&A~`R;|3P$Ar)3Ju<j)y_b%@eavI?6q~v`CKjsbmNC=yrHsr3eRDw?Y$HiNAcNha%r -smVD?T)uyBWERhF*TSN4nfqEfhmY{Jf`Uh~g*-DTb_kA4A@8B`60+tF!6W3zav_$M^L^_Uj(AIT%r&h -M=#akrRp5x_bVOmcu<;0@iz_uNo()Vk}r6P1v{?VpDB2g%`sE8M=vMUV@Hg<wxi)g$gk(~GR8fzY^lP -WO8KIN`Ncj&A*sZX_VRaJv3D9NjDHk!GNi84+UNpu6L8z${;#z$f1UP)h>@6aWAK2ml;P_Ev#JWMowq -001aW001HY003}la4%nWWo~3|axZmqY;0*_GcRy&Z)|O0ZeeF-axQRrwLJZA+eWg#>#x|Sps<vuFile -2>ocGNdA_s_nxsLT-r<l7sFk#`wx&oOm$a-N`oF*V*iVwOo!*^+*b;Ylc6PpJc9>0F?L?k$+NP~lo(s -L(S9K%g(o{v;sGPr#M)vutDhjn~bX6MnXw#Ofrm716ps22{ba^!zZ4h>rM{6AT4{D{#ra1m$)cT?-8> -vfG+xe@iEP47Kpt==5e*F0U!jHU%kr_R^>^{WV`SO^X)mH74g{f{=YM)>*8437#Q>`RE{);SH^{TF`d -PdLR%G(dBsgKd4_jPr9yd<E%l-Ff-C<mUKc8}22n#X?m@TRk3Y7yGY)wR4*9v!1^J0lr9%68Qad}`~W -&`TJpjdBa%*{_u@?V?)!qgAE}<fX4~RkN+u#?EOQU1WR2R(NJQ(&Y$1*UIGErrGCB3j;;Gu10DE@bD! -b1!UY9A(_L2(J0SlQGiIz#iudy=B+H@VD)$=#zeH}JE4^$L|i)lJQ|HaieROcrR+*IZ{VY<CwX4V9Z2 -eQG`hTelmGPUZ-4#y!=Eo<F0*uetpJiP)R=iNUMUcW-UB$W@egE<&-`~|iu^{^1_;xclCO0g&jJcI>b -7x@aO=G^=1|pZKTXvDE8kY8LBz)>1EWXcWl;!{2?2|6zL51*y92E-qS;DhPFt+SQVF2Vjb5v@Xet<i@ -2C|!rrk{F#sD;YW@e(QX+~SFRb3o`ZV`)3CO&R82%HhEVQ4UDnz~(qx-(QjB^%{TKvk?wN>tV;V3&9# -U|kr%vkg2(dEm#oY{KJ4?^M->5yW~^RFXb?<iRi-1y3uJ%x3uuc)^U7g|~!bgpp-Yt*(a#Ox4yamCN- -SWZn$m9)xIcC@{G<9EscT7)xG%%nM;}D3Qlg3t2P=*Lo>s8k$CyD<!IpfWZuu=z_<Qv}|f#uv+8VXgm -Pj$y=j;Qv=N1DhaY@53vTegrS_2oJYt?tOZ*mG!~s%_rt+MZS)mSSQWsJn7gZM)#Mdhe4bKhFpqHLNu -h33Atr$J6clDpO6k7dpc|ksNDH9jbSj#5U#JK;K{qMz6hXiR`4KeU$)5#^zOg%b0}oZbhp{0|>e&!C1 -5L>}=(Q5~d`-AAH3pO%AQ`c-HX;}XQvD3!piNq}rUAPSa|P?W5oSxKNSCXkT`O8`&4VuC8yFOvEzyeX -bg6gkE*qh}{|TPX<A@;(NKVFf2Am}_IB=eXy^$SC?X4KY`EoeSLDp-a9eyO=WyaGHd6x?Ua2En$79ug -QEnqWRtBuIvmu!oM5G|{ECkv4NdP3TV#GVQ3fE|L<b7tOnOn)zGB^wo4SphZ<rBS+t!Y(9H0#s!UmYC -MQT&*fPA~N&C_ZQ;D|9<<Y8OT$!B~~z(ge=zr<pbOZFjpG&1QcDBMmPFKWdsStq*g#DHDj((;D!R=k7 -O9^l4b?Tq0O!5AxL-v6eL-44CYReiPsx(tXgr<W=q1il_1x=-BNAkjRwOzb1scw$)ZtpiR4*9xFDCHY -`Ai<AgL%rD7RQxikyS>kR+l^eWtZNp_P7s00JToTUGYYfo_hSp%v{V@+QcJhj-AH$cu%;fe5`=AgSRC -sZ=WYgkf{sD-mJX1#XYfk(zLjmysMiDfBg1>*cQ?#4a?Th}r2e$qli?^C8Bfy9rw>o&nyqtxM4S*naR -Hz*`^-SrG|m>>3P?6&MKaa}JR(Yjh&{kHn=$XLC?u*EYyyL^>R929eCQBJg{VDP0>jr0!VrF8UcxoJ` -|MpT;&a`Apj0d6pH`0d%#qf<l&LK0ooZE%qQ$AV#QDq!}J@2uVm1O2t+dNY&J`G{6R+Bl^TjKsfswXr -OA?dmx8Uae#4?aqw^Bp2r(^T+B4ch2A(2jzEZnI|B@T#`vzR8u6|wRah6Foo3Agc9VD@(~a7h$uuT_N -c|~cu#-pD8uF`-66O>sq=iNT#$pqIn!pB(^TE=m{+n3`M~{~b9y2gMg@ET}s~>^zM|>;yY!<+mTp1T; -qe55@mw4AFY|U_gNMelvA%^S?WZXgvQw=K7StG#gd5;OPS50<^Ov_n*mUU$V3F=sqp?v{n44e>c%UJx -ku-tSD_SGKUl0Vy@*>kZ)MPh-`vYQ#OS;inPl*vWL#G^z=BU0XyW!5z&BFWQ`9YHXMWshbezK9Cr$R; -T4FnRpgInfbCH?b{b+q9E=v`E(Tp?G=UVT~90Ta%<U6enqu7&csr?uQP40Fidn4ZBh2I3S<LbFP(v9C -=N!Udh!~L|HA_G2;vwxOS3~2y;VXb#(i4pwR+2gmzU_OE|$%po^wFPM2#9KC-2!6-%KD-Lp~GHv&cf$ -#xfGpz(Pq%3#%?(XyDF2x4Z=Y)@wafcc{kejkmHgv?20QUo1tL!}(Q?LbWjfR5O!NA#YgHI7ce1(9rZ -;9ytQOAYo2IAA@Afv7+i)=0tGs1OBAS9^*NYPq@w{t=j<;T`YCpdr#pLz1%H<un|m|6RLVf^>jD^gv* -I1X842ytUS5C2gn&PYWfjGh{X4iWv(ohwSmz)_sJHf8+<ai;LXJ=72zXO3XxCf}Jt~d>bHXVUX-!LD* -P&VCr^X=#_^3(_R1mchXi@MIzo`AEG#Bz1E}vg`fqhaqxY5!lCg7^6;%+cFs}L!eygrNia*rW8w9}Sm -a*a${pC>^Yf91_}zEkxta-xVk}3VXY=RNWI9f?OI&?za`wZkk7qM+hSGZe^yyVqU4cJaRlBEW|H|T>) -Ww$rILd8R4Q*bia^lv~(ZcZak=GOYz!|u;$Nqs$gAzMUiBJwvZj<K|ql(Qei2MB6*E1(Qb6heLLvj)M -u~d7r4qyu^ppB2SK0tPSormcnR<-$X#W^s48bsw0RfW;)LU0r+Zq}qxtV13G3_7b#Bu(UAB1jda?X~8 -l+2#fbW`l-ucpzOo-~hUhT%;Uv4=A8&OXY|e)&=9!WcF>u5_P-EG0x{tH?pvgmJuB064)&lZZi=+F!= -9fVaQw8>Pam%hSeo{+y<}$_aZ`#zKa;Gj4&(Jfw*Q-<KxaK{pI?9FCQnNj4*Y60)KpR4q(63@+>8qF| -g?I-VPs-6u$``RYu0p#u;hhHw!`tdGun@IRu1m5K_2uFqVGf@0g|aAbNOl?KsqjY!<vDEsQI}a@BC;V -a+qFjYH7Xk3o))`(sICc@*ae?R*jGr7P<%5{iJ`+RGB5?5q(GujxRLFsO3v(<-Y%Ye?kL=W=~Y|3=p~ -*&su${-D<1p=h7@&*wOh?GPNX>E}`1N%K?IDN#UHg_i{!wY}OVsrwc<r{I)F2pPfmhoB?4N5{Ka1S_r -KAP{)aRJC5&n9&6bp-SX*1Z@~y>jh{w(b-qV$tWg6nfNPKP#|P|`Tn)5=D@acg}Q13Zp@HVvj=Re72a -K~1Ba6I*Iy-!?cKqcE(@l2QraaqGh#|aS4<796`Z>WH~~a^A8_mV$|#+4a>GM!KWmnpoK0fofBd*x3J -iveO=HLS#*+JLw{NgEh-G4o2q9`@6+?!tA@`sPklIlYhtg40MnzVGwE3W65R);v+28_QKG_udY8&78L -FBh=8%{|4{H2Oc_=GDz8_bSSRSR`m;ew;})<2xNV+W8{&dYnU*_eTuIA;#dgjFMy!@KPF4+`sVf7EcJ -(8v5kN?ZTgvBo$~CKz*i3XjPI6Zt^kAz*=L>yS)GHN)1pnm_(5P9d3IT`v}y+t|~A_78@x;|g}Fz5)z -<)zZbqX9l43?bBl6A>GJYlQ!e=JE1w%KfpD1>^^10z?B#wtO3P3@54;1r6^@c?2ejKFwnn>pN!vCT+= -ptwbC06pvQ?C4jST|$dE@=n?#?dr<NyGL~BmKY_KqP4}qLY4?&mT^G^2xm9tLn<7$mF@$J`lphcGPvx -R+nny+Z$hn}tKx+u~`yS9tr9op+wumTTXdi?wKvvWrhDdtd&v}>^<*>L`x)XF1`q#G-cbsfb>eEUbss -kCXm)zD2uxJ7lEbHXyZ;QU@8NTV03hPmofRXfq{h4?66{BhbB(LS6Zz3cX<^x!!_E;H%CJRv>z$({o> -aUc3I`@_Z317o>74e~$gMtme5ijI+>I;22&hHss?bV*^G6<X{L!dsJNbS1_2KoFR{jBcIK{*&BNsW}z -(nZK<{GZOF6xS%^MzvN0H_m2G(sSrIvAJvaAL1xJ!t}8|UawnVB7E(NjP%*}>_EB+(!6d;6j@yhZC3) -5{x<Kf8j36q6qx3YHt2ve$3i^CBH|pT@mhYyhIMqRfOT5a}gazit$?E%6KbcN`ZeTK-^&wYt!cm+gP? -R=5AYtw)Uvf52@K27|pRIWqjFL}lF6fz6TKM$fknd9ObRlaDQqD00I;pQiS!h45OT#O+o<6GvC&7Y9w -2W@K;)FO{6M*6kXM+se#a3AE(o{bWDLP2gmzkfT_%OJEeyM;qN6)1sr2g-!#@ZaciI0dXi!?~0I-87h -NVxW0Bvwjhsr~EHRMz2?NL(sC3^KMwDRLcz6ZkiMkTapAB9YKGi?WM0iwiUG)hR$MZqa8CDK4J%qe_- -rSK>P%s&8=_kT<#s0?Xm+f)sP`ZNjN4LMOd*>=C<atvAP$rBM`IrkSzaMHB+rUzSI%W7^=zqZDDv7X~ -&ksy5*YG3Kbv^h4rf(~!86Wr#B9J7ap@Ur6zy9SAs(=cC_ejNxQ%p1arXn|}aiXAc#7+)q;<hX+_bir -#7HHhpjf*Ez*cio1(XgWbEPwq$i-PM|o50T7i=*HxqL<Veu@2EaE2gA(Sx8yxTSU64gBd^mhU@?V!A0 -dx(kH_krX@+}+!wk0sCERY+8z<?4!j7Y6ecC(#K0E_V6u{io$cnX*}@#J<NwlElF*!CoG@$<WPuP#0Y -OH1v|!%~U0B=T<DC_P*N>{g|tr?~q)ebuR@3cJms&-Ml;CUe%g2Z)Um@K~>b)|PoZlUN5J8I|B>?eGb -<{l$W^ZOD+ED6S?oph5e_HlnR7@$t<ivI+l0u^aHigL;2#wpIBYgF&(+ZRn53LL9b?7YggtlDqRB&Jf -$G>MlS2Ywj<Q2RJnvhL!z+#rigT|F`Gd?*cUG@hdykl{l1n4Zk@s=_&V^?yI<cjoa-aZ9z8GR8r<4#0 -Hy_#(gknH(EMfusUGQT)-1J13YEMiRUShNZ^3>7@}L5;sU-6;UE~MLgoBp-O@c^a_^T!aoBk)jk_^$F -;BleAhX+r;D*G>wyLh`%9tk<KfAs0wE?{%Hj#NSs$82mV0qHkI!bVBvO6}Sr}Erlk@#JEAMVD&Wp*eR -SQ80K+^)8)J79n09vHH(H7Jw^_k}s8YZ!qO+B*>4d~x)|8Nfr#go}=%JRT7o@XjIhdPuYt!Mi?u8r!~ -SgYR<q(iNN3c$(vAG#o3W@1t|wM{)CkgW=|Uc4x2;diOKVJlyXB+uluu*@G@Bdm-%vc9LiYse)hDcjW -g1ag6|gkaplA|HG8Z3tLE~6w&Gf2ZIbAbL6}?d(tZ)^`;DZK?gOy<+@~B0%L{5_G9$u9OF8e_)5>6nA -_KzCW%S$6OubM?1}!L=P#bk#HB4y|0(+>`zAh)Ke_=|(;B=cdhzv(^gQ+w6r8~iuRe|wzfRqrbC4x&P -js)O^eCo{D+^BSoEg8X(vubkl14L9BwaRPl{cd9LvrFvn6>xaIy+fk^Yt(ISGl1pcI$%NwXcH$(;Nx2 -2;Rk3t*&hx@A^=43SQiuQzhh0rPtI@=kDuE)f}q&np*G3AnW)FkR(`}px~1!_FaK##MV*l&E{52Bq<I -rk5~zVNj4qf7ZS6Si$tC54n&<}?(g1VKu4fLP?d7Z(Rj{nndtu^k*KLHGchgGv_OKg&SQ9<UT;=(C?0 -cFV4QvbF^A*-1RuJ(<Zr#}%U&)M<k9V|OUU#wGMjXKJL}QheZco7z)8)K-jQkJ3@3SsGTkxeCdNW{pU -$iA8YY(*YQ^Tt&q6>CGg0hWSc^Z0W1sds?n?jx5e86cQ%%Mnf=v@&8S&&h_&x3fLqnG9?o-9(j;<r<L -G{kS^+`srS5Bh#q)wOQ|KS@M!1rG<hM~6%Txb%lS@2achfs0zpbI<+6qiCbx^!=K&1?>a11{#YCKi>0 -gH`kkX+t4<UN~_2QU|7lRh&g~If@HO{q;SCOL~ZHbse#D`pv11y~%~6HojqoG6l$G>75!64{)K(k}lB -c?Er<~XeGs_3fqHyb&MNMJ2@?p;Hjexf)C&b5QVN4_WOzpcVR#!JR~3?=3&VemV#M!w!Kf1=<TVLv`k -M-$D*zmSEdB)<+7lcd0=Xq>RA$nFq!~S3eK!g5|R|B`_rU}?Odl~D+PX2taegM9^{^oTQI+zrwdZajH -AsvxUtaefaQ2)gYP318z)w)LL<#>b(H#bvDQgt1Uz`BcpxyB>dSTpiukHTl9A|RgH9o@U{ID;$Sj_Lb -5Ud#8gSi99c7Tp8;CCOhTfOi0(p;*ABW5cJIEmxU^Ed8>})pv4)wnMB9iGFNEI?6UcVRiMcJ8XWDO2m -xHl0Y=6d%!^b?Wn%Hkl8#^D?2R)yEam>mi;Dw3B#De9Rwc;mJ1H1m2u*x~BhR$U5}7(CY>i`KEAc7qq -so`2ix(0zv45~=r>clSQOZ!P{=>N2b9tD){(Ufb!-eU|R=;?6zH-J8_k+`GB~Lj|$SsRrUf6kl}Ohm) -q@B-xy$x`!q`JW3je{nMm@xU>AOvB<P_#!s1<IT@5NZ>U+B2B+sqb{GZt;Zy_fGjyUzKNqu$uaNfe>n -lALUx|LT$4_>*6nD&^tox2}O2j)goMcu~F!1ZrlsGAt*))6NdbDiitefEU>s#Dg5W`A$v6pTnau4sVi -Q%PfG|3TZ76h34LL%$1N`b#345AX_yyIJ=B40=c((mAp|M~mSf=D#|qUhPs65o0sy`Mbkt(={d?M~e$ -73xp+ZNpFtNzZzEMc%8TB#$2gflt;2z)vGiw0jI%BZJO$@o9KTz?%>Mrof5!4gS+@i2cUX;Ue-Khr0h -N6Mu%<%kR6q#Gip?oPPn6sCLc>MGq`)-Rk<6-LXP+mr7gQ8xXsIQx#<e0iaV#dndF!x)Ai-^$}8oG~Z -djq(){6V1BHku*{VR#m`(nj^W1b0m~!*k1GZo=^#ojeWw@Tc(?Jn7(agcc>H@{PN^D*R(j>zjGrfVlA -a7!De_O_A6+HYE{s<WRw3NdtleW_c+z|G#)^%b_wTp@aCLw5o0H4waIJslYwg_%d-kA$w{<D^UB%sV` -{s++-KMAS@l}NA)+=N@E+YVeg?%78W$EEATHD#*0p{IEnWPk*6m%mF>daoo@pf*f4mg+wDFbEWx>5Fa -6ro}AbcP~whW(KU8{azMM#*eQETW=kcs)HXp{M?Ku-HDJ)Ui5$iG>=hs`pBzp%{W<n*PsHlTe6fj@mt -w{K3aT^Qdh9|4>T<1QY-O00;maO7>R#kM07e2LJ$J7XSbr0001RX>c!Jc4cm4Z*nhna%^mAVlyvtWpQ -<7b963ndBs>uZ{s);zWY}cv<KT6wfe9(1HmHb&TaxsI>EFDduTLl+M;4kBvDIIaXgLu_x*~Zo>u08!O -R#zY>~xcJ-&J=F*>8oCaG*?<Yq%EE3~mBcBM`$D>wD?Y?d%xl&Dk|y0i_M%=bE$o2*K$Dul6{M4K!YR -(SeC?4QJ=ETdArM45iZugavU+F{3(vSEX@n$v8y*@!fS9GCPZ_(A@!lBK<q_Mqc3_&S@-_NgdK8g4A~ -?kBmo%hinV34*|Vf6)1}%oX@b%G8U>39^wpFH1TeG+&;|Oy<y*RvCD$wh%-YGT&0>Scg<r`-5XAN?N( -YjtCn3GrC!?A8<>KyOqu#v`)7q^4O7&X?gcf<gkU=Ml(n9VDz(!A<Ir4#Iu5MEMO*{RQ^bNon<;Fdn! -Pn6XLtb)M|U-%J#BY?j57!LG2Ij3?FHz6D8BQ_7rornyONI89o;{ny5W&ehTX)Z;8ks-*^{8ku9mx$y -mzVvGOF&nsBDO2vQm87}W=3g5~W&(vLrUPYX6DoAN)`>yU1)uRezK@%sDg_4P9P#oKo}KK-%lFPOyz+ -l8MR+f*epYT--ZemoxEF^b={psbDD%FZG@+<%4w4?pt1tM!MQH^gs6_FfhFiSQ%txhEuL>8R3_Qmvn; -Dp<Z6aYbQtVU)14^BzkkEPI~4NII8|N@9obB74*=Jm6{ETQln^?M1!Kl~p2DKTAW<UEq{7<;v^fR_Gu -_>=wy?Zt4YQt@3?Z#S*exm<94T?g**MQ;8_mxYRT}*e~>`5Rxr3`BJ26uWWjX+Q@Z3dYIcZ%3RX7poU -5iQULt$7bA$j?;qB;_n$rouQMMH2~wJZf}72vlxY$+Qe1w5#g?5uycsnTUbeErW8Zqbd{$Ttj)m=$&l -T-6$h!xIox8PL>dVrtj#KI7+El&mF2(M2mB+%2xn5j69o@rnMf4B4+LhLby>0i6Pyoy)ZEu^jC*x~lw -CU7xPWa$6q<pbH&W70*lGOR%=gwew96ncu^f9Mxn@yW^8g;bG&bl5q-ce2BWh45Kt`!}c4eEOCo2O&X -p-uMZ&mF*z)IN;$aiVwdb@4M5ZaQhXZMU^F&}Jt}Bo<vKmhH9{8S9A1*hd$C)(1pC{sgjluNFCK97Pz -jXv)CY%qW!tQi=@jwH(x$$SaX{_(%}@HlkZgdy%7Pxa&B*Wn7R;Wh=pT2=RwHkV+~oXB93job`QD;g2 -quj$=56#uT%&I9F&yXz2?=n?#NWnG;GJ0vedB3nH>$%gozzqFRJ+?73Xt;TEwbVVv3o`pBM2v5<~E6; -1lsTl2C(SXC6#ES9r=FnW}H2^vAL7JS7Se0PK@X_&#JE-y@^q16EFMxtr*#ODSW##JZm5Zm=vhi?Bp1 -o(i{vV%lg%HJ#zoBhudX&lXcJN(Uo-3#2VCun&w1<pimv?8jKDs@$R+;61{_nx&bAxXQRMkg@UloW7g -{f6%9Do?)<b(lmBHUf5V)z9w+tLE7286Dt{=36d$790S)HpEZ{(9(C86#Ofo@47~OQIqzL_o3Ak#DPy -QE*df3hQknqzoU%y0rRI9(h<u4A{4T1eme}u9jHfP%kjUQx3}9#V?c%loFlNf4EgR(kX2IU`)+J`bH3 -Yp8Dp*-es=3CQ;1WlMLb<zQ4TG)4m_zubkA+#5zWc85cQ-OwaDylZg{un=C}kMr7MH)U*1i0^7G-{ow -@GX5umO8uFq-8tSf^&`MM??<rV3Wn{Z|4B^)G5or_(1>YyzW=|?SY@KI9gZrG}f%e~eS-JsY#OXCKBO -q^&3HcySSJ4Wg;$DM8At+l?ts_daB{%6!ZbO$^V`tmN)KIGa4pBsxOd3ygW(u!LI1KuTFefrq4;$2qI -R_O2|x}x@>?qwGIoP%3P41|#GZtt$0IhRzE!B%F7hL(g`H1b9CZ?63>f?LVeYBtD9ewahvJ1bf9MC<v -A<~w2L;lwV&l0^i`f=T&zWMAw&q`7y#o2dQPd^y1bo=96BxTnX%<-Lwzi83qV#d3-ZD;)RO{Os85RNk -`jYb}>^CL@+A6OZ!!PlbG(lsnh#7=PtJ+is^e?Z|Skqr?F}B6{7(>ii#4;oeqsE6k1-?A$~d1j+zm{h -)N1SoR%HyNX+1e#L<aqfQ|^m*7-}&a-_T0!BNdk0nxk59*j;WZgZZpl!Fl1_0wcV3rkU02#ZiM)MD~1 ->UXUiMcNqZrJX|GtAEj!lO|Zlz7|=AF{E8ivU62=Eo;!4CxG_UT4(Q4j)1-zxowSFE>KVg5ORw8GiHz -f)l<RGwp)kF>m_)ZeB*^wEfa@Ueo$9|CjbA-(FvTwdKHaz_tiDFLuRtbq45qW@Yb9OscI?O?`aSmRw$ -|-?{9Nagh$({d1SB=X@!GkL{^*Hlv$%PW&1r3eK1>XJe_y<?vi$z9DRi%*Lg>%eUW>PAk;(-)(<#?%o -Mm`%mYC!JD#8i*VKlPG_dzR|{@%esE;g21j3NNbp?7Ki;5efcDkFt{>mPUSGA>bENi8H;uAiSf0`TVk -iB(TH*f#P)h>@6aWAK2ml;P_Eu0JxH@AX006Of0018V003}la4%nWWo~3|axZmqY;0*_GcR&wb8v5Nb -7d}YdF?%GciXs?-~B7F^69ZOkvX<APj}o-;y4|5lQ_rrY}%9NNR$N0tSM6E!;1Q0fBW7C00JOLd$zN) -`(brv9E$`lfQyU!zVNch*J3hR)>U1|$wVaUO<q(Yo|So8S8~GN_x9BDB-g*C`D&G9EB&?HmHO9hTx9U -ZeE(;f%=VTz&OFa5`MHAcdK~p+9cS@M7Tl`L=l8PGEo4#Tg@{XWLys@;Yp7k7tYuzTP0L$;u(vlWau` -yaiFbJ>_qcDQyVX^asz;M~o~CkMC3#lr*FW9fzW+(a3t7BM=9Ov)lg_xEZuT-R<;~3-n%tN=U3{L)4K -`7Ir2cL|5BCIoUgnG4yS)0Tsy2X@^L)LDt7MkSF}-~y=lMc1Sb9L9o3EGI9D1a(lGiXv{p=x5lg0U6o -!!5Y*{Zs8p7Uz>(R;v54y(2xA{>P|=V`ftsY{qC!If$(v*x{#TIVL7-@{g#RhG$T^#(B=6$+4kos^U1 -W-?Fn5<ucN-C$DXlRKEp-X0Jd?42UFXeFyR@T)9_lSvk@fn-N}dwcUVE=$1HGL0+ANGpc<?C-Ekqf?s -cLN0;KlPswwlVK^-rFxDZ{2EP`Nl{jls@TD3w?!?z*NeD{;mvF?@Ls?$@EnOeT1eauSV9R8hcK~bWSD -ncRfQUSEO74D6bcFFFB7WO&_GrV8%WI%3J}iA0+cL8mRIz&d1#G*FZTS_9s+_L&6KQF4r%bc5T>4;@l -g6z3v2^LE&zW$;O$<?(&^}e4DaRZI4xyIJGH6A7(&RhhBEK@B=d$7b8;u~lnFdSIEVD??Tf!mKD@lVy ->T(nLZrV(9)<8CT^P$Gi_<g!r;QbTw*K_bWTOt&4bZ4;P8R`reR+LzJ9&HY_T|MjbUmVnSGPZ1T&ssS -@bs8@#)lVg-duf{yn1o_0v?`(hWMptw-c4e--u_T3!U7z#N|M5e}$2~rvHtj41kc~>?#=-MZ6o1>|^W -9JurC(%OF5|nF5Yc4&h5P#P%*pCGo-2Cy^f>_$Qv>M-C8vpzA}D*QMDUYq_n)`{Hty<%Oj6iFjGbLR5 -EB&>3X?p@Yynx8BBHt1n>RpI-okL;UR(^2A@HX}$%V#z_joO|0T#2EtRsbHq>#YJf;Gk;7sNv4R1_JW -XU)l|g9Tdudw4iN}c4NpCi;&T8Ow6Nh!HHHRta@sS@vwS%W$!X<-88x+;0PzqmC(wvcvDK5o)<|Vxja -vI*1n|g!FNhxN4dU3$uHoF56XA5z_-4BG;bgYhLlFcR3-cFQvF;HY|G(<f6k+=o2tnv-aFwW+8PG4-k -goEl02UDm(d(s`aiJF4x-Nzt(OfvZBRfEf7*pjh#ap^O!L4*Cls6%ozO*$mH%LhO#{xU$DBA+7^XW`4 -VF7HCC?pO!44=tgk=rH6_kYj=xsO8q%I<3OwG*HUoYgB-*U!Q+_^8C0N_i`zKG?6*4k$Xwd<rio-!K@ -#om`Rz5cmq}e=tos9Vi+1R0_Q(QJ7SD<W{I+FL2NIsnof5%(6>L|+=5WbWPt}U7UyVrW!2$@YGFX#k% -0i*Q>F_Bm?kA01_U?fPC^3(?u3u?0(-z0kQ(#5M(4wWu$6cYcuJAMN?5Ls0TT;Zw#55_k&DFe5yh{5F -kDAvRV16?Xha8NjdLInQ3(T9!@+nk`qT^-Bo$}d^++F&KAG)*vcSeEEN}`S9RP-03|*ie%_-))=$4j_ -&b~+Ja#jyN6-=OYSgT%sYjF;VQnx+b4ZooP8=!z0w0hb~S<|V_VToB8ShJ!H$z{6=mU`z|ZjDKY_O3Q -Qhe;k?UZJV&9WQKTOjM%LH~~73c!-z4r?+vjC=chxx)$36IQuD$aXP&N<2z!}8rcI*#jLJ~z>V2DozB -2upH5-v1U${*uq<ftyekVh(}xSW#wXi5$>(D_#Vv$hz`!=LsCI}s6!K_TL;}Qu0>_KSmuZ;`f4&In{j -R#pfm$mV02T#j6GTI?J1E5|VE=TQ<WqtKU+PqjX=ZZ}Lok&&G8IrZBw%`heiCFU@q*M0W?T9^E3b^mm -&5=F;IaS-w#|!sh1QGDptgVz#K#q$O{D&r1l|RT5$l_ZT_My*QLQBODFMWuh}ntaHxAE4opkK%$^lC1 -1+bbVO>v2;H!N~d7pPYO7~m5%xoje5Al|f|aR?^J5V;1G71%I$py6rESzOYdJKXp{!8_FK_dsz~cksM -OR%nSCr$;mX2PU1wJpp1{04GIOTN+lr5aeEopMYZnop*aIk_u1<bA6B*w#M~=29wrmfqH(-*yOBUiA` -N>@)G!~xP-n9KvYq;pj`@9Al-GsAukeHHmkd(&7+6<xUzhK1yp7o|5+C)koR-#IReuoy2hW=hAQ#11y -aUA^=>n1{G*m-<<3K9u#mag?MX`Bv1VEq{N6}8elI}pn%|@EiJWzcWx;SW(DGyfoL;PJnD#oZEZO%Er -?tcbq~$ET;uIZ>l@Wo*BNA5{dt+A7*=F&C<@wdS+lzO%lUEn#SFhNf{>VI=bTi_ggHPQIx>;rm(lZ1F -ESq~@U%a}!zBs>~+}ysn{rTpCMtXj9JQmN7PVmQb{P8XR`0i6ckUO$_Y`)=XIU5X`2aJjG3@6t-MLVG -`&yJcWC`#en+K+&3mGH#xStRqyZsu{3Gdj_h?r0x<?`7*~dV_89JoO$mUSaRWx?Fir6zzLY!{m8J?jy -S|QT7D5?p?lU0p^!*a=bTjUFGa&wN|RVH;QNyuwPKH%;ivR&e(H+hwKW~6sSb~)-0%{;Cmfh;CfKcLB -kY*b^!h2zEs2kZ`E(^YbF$U%fI-5kzfcg{^GuLsRPwC=Yc;A^RhF&v+nEg#zO1x3%7H#anPap(sH`8> -f}2!`6WrJ;G5+p{Jcf~(5&^W1#3bsfC*|9#tCTN!!dw|@YCyN(JUd*d~;}%mVnBPMWpy_EQV$Bnf5YU -O{(2S0@2bmMnNN3p#uN$QHW<6Ug1C98!O;*W}S0qg4)#NNevJOzL9C6+#P>kyZ|F<3(~XH0&LD<mcz2 -zr6fl{+seu%?6B4;{^(9pb!hpUo0mXd%gW#Gs+a&kZDp$yh*6f|K#yp&7?d=FQIzIeY5NTJ#j89!Ks9 -e(v*&FiflNTlg=x=G-NZ%3WJb~!R;b)8l5!3TEWS#b<J8!zXJQCnw0%b^2u>6=RGPA7;W>`cfkFfsLk -3)6BN~KJw8vf!Dzs}bA+!bn>j=|4zXuXtg9?L7(cTJ@h5UBta_o^k(&bVUJchrNyfVsVWUtE;W`xKlc -7x4($XzqT#n6*_?pMp!MLV;Qi=+TjpQQPmd=9?pJg|acH+OlRE|7?IH=%5x0)1Y8Y?gh>8dQ0Th_CK; -O$R-W;Ny(T26!u2W!yCK!~lLsCCAYy!fC)nV0a<1qq(;90Vo7IaO{qBinwPMng9(N1yP~h^QvK@oC__ -*syoi+oI^dUfkis1F&}laX+R<%=V&`yd*y`sh}Eg6fY0JWvkI|F_*qxYP&NoZ#NzNz4lC&?FF@nXf)l -neicx7cvYBhZ??^WK)R6<gNGkHHC`-1myaH+pQL~tzGZIyH2gls9<~@U5xHnEP{gh0vnZ!9L+=E#V&+ -pNaB1VXK3a+RXM`?~|gFO`~88%UWI}2jmmv-QZo=vRXrax*QM6(63d>{Gy;x(G{p6i6&5Hc>nxGaP+& -%{ym7440B9<|OvfIB%(H&+;%Udv5)A41eT2Gh(@;746+Z1$|z{pZVe><Sb|=?NVj?F@#Yp18$GE19N! -q<u9*^OvY4tJgEYD@YqsV8GZ;Q*<sosDRcM_>U-av5bpIyp4Bo8kVRLAQd)*1r6hMUT5UK(bB>;T2E0 -Bold9Pyw+#LaTXAUr&D`Zcv7);RU5Yl&ub{7)mSv~@==)X9dtVyqh(6k(vv-{o($~}L6{8$U6VM~lAF -zNR304vAbF*hB7TUI6#ZY}xf(sa&6Bl*hnv`(8NjN3LF3z|aHWB?BN6-L5p1SRPN*f!l@DN?d5J${yj -AGu12t?GijacflF0+R{nW4#55gD)=xJIS-lZL0xG#2WpaJMG*O^>m1OuHHr0QkDq&r2ezG=RSREpTJ^ -^&&WT2HoU5CF@jXq@LxLB2BxL%G%JtB!C0(kr!S_)mT&LQQu_9kXPy0G+f05}cXq*XQEfljlbOV=kUY -&!dxwqs|ET>2p$eB_%%>DxB3U6E>$c>(ee+dK=rX1Cd`ob&crNpI|tD-&rmRI$E+QH*%gV(b8RGKmq8 -_^OcoIg8_ImDYPdz#wh6udIlY1fxgICBCqwS`08W~|Buvurl_pTtgHc*M4EK&+i`LZvjV9rO)<%;Qkf -(%r4FV!(l5i90=-PF!+bmr!DCpp;*8j@q)@Nr)We4=s)n@3d3b??p-_nYrW$^PxecKun?CRhB9EKc!L -9aQGXokbXe03laopZwA`0>~I%$F71Bsu3w_Q5QvS>&lOsCYj&d588bgz&#{9QR3h~Ej%<zau?OEU~vE -iT&Rn_)1y<Ueqfi*Ry@fznF*3P+?Hj{bu<3Zv2mX=zdC=v*(1%|H(JiguJVsv@zyQeY2)WX#uasz9+T -$KsB&Le=rbfQ^C!l6^4w`Q5+2yZZ31Pp8zbGo&TUBxz}wUFb3Zj+{lIL!1_&IakRCs3aRu`2r}65VNP -lLS<tV4Ns1~LND@HBQ!;hkB-C-+Q|o)K7sEvf-U$dxcJk>i&q18o(BI%EfYx*n5SIm5Ne-6E33nLLx< -OR*U-b0%<4*#IVF*M$HgwJJ?sN9RPt1FNaICOItk+nIU{cNVFFmpO3+;%fMH;WN3&oH-i=|#C+4Yk9U -AC;+R7u29HV*b<pQ?~YA>xpwTbJ87CJKwjknSXX!~%zqn$QUZog%FAlsAlF?eXDb}j|qlEW!9l*N669 -bu9NawlS1JwJ8vakGv<#>#&Kp#($CVsdePeRVxKfAivo!#u;wD`iVI$$7lUM?y+rfX@J;N;e`<V>=_7 -r)VWoj6E0onA0`%S~^bYt0o>xW;`0Yl9Dh`tZ#CJlwh(eL*s@FvD0}&nQk3{Vf+MBsawp~KTYlJbF%O -Bq&ky96sxAzVSIz$;+@rBlRMDLNoBCA650wwm-g<Daw>j@p8C29=nVt3bvW%w#oLoALT$lcPg^6C?jw -h}IrJ3B#W5+YPQzi_?bhr(k+R#oN2I*QhDt-#`>h?Pc?L8}(twQqWNEkJe37a~LN?IY@5JHu&}jVxII -EX^v^N_J!ijIt?U~ojNtCkN>e%&<UYU=<9I=JT9CgEf%$;Ks(9XADaX-jZY&Z?3sj3+Z3=5$xT*yOhh -$;_<f${(fR}3ou7`-T*+GZeH1v;q6BM(Sre9yeZPVTr%R(GmTyh$u?;uX#(sm9tB=sOFa<`|qq-)w?_ -Oem+D#{|u{9cJ#iW}f05PGMBY?t6Xtm$w(E;&LI0Wp3pGW*FT|KQjblb;@bw7YyN%4*LrLt3bv(Spjl -+nPMC75HzqMP_58~K@L^Qdr>6QHj|hK`NIwy$Ml$l(-=7s22-FBoUR%e$S8;u+ld-rp)O)dwGhy2Wrd -06Y6a|xBUw|SKcw1X`lbe3{;>rTRT*+Vqob089%iNkqP~Q}AVb+9_xBMxXNsT)A*ECxm<i@-0quYJ_Q -g5jl~ab;dtOLF-a_CSdTc^H@1gWi_CJCDq2sr9Jlvzs{a`N+Q)KCR!@5YusdgKpL2FKCk>AS<BvOGw2 -Bz+>n<8~UwT4L`C0BPvzJ&>IjWQoU<jI0bo7m6B15#(&W=PVVJ5A@<JLPA=VjY?g47^Cl+~Rm8k{-cH -cQmU^GD*-xMU14H*M$ei4vg4ulpfT~E4&Ss7jO;mu?q?@a)*<22Ogr>=_*%#uNv$BLQEpgc9aT@xsR0 -bkRY$vVjp(yFw^$<Y7+AEJRuxot+XTQp-<y(HI8V?!@!9Fiy2-usc9a*v|uMMS-o5)bDfOGnI3I$m|h -G55EUTA6^BVFYdjWrIVuxNA4!Z)CvUESSLJyRTDn4mE<P+e3L-*NEX~i!E^OS$b)`}gnS5aDt<&W}Q# -!_zWo-XW6MO91SQ7#2s(WzauC|f0+)!vkSvm2#>Wy!D8Z)i|w48c%S25iyZ+s|LWFVz+vEo92jPib$i -SoKWKRKMy?<8tt;>+S8iAjtk>~}Iy?g8}~d!bMZT9D@opkXL#i6u*1l})p{i|H-r-97;2TD6jZ@F}c% -ik_TlFk@m0V=t09vM%<)qE~#D$~7L3M(08qW=C$3@mQ0z_vH)mJo*k@N#`n8`UiOMee^BNa2_M;0i1# -OuHC2xy4uRqFTY#?=IdDm^5jdUJ(_=$vaDtK<;mB_&-dwfXtYL?=J@#Qldr%2{`;e&$eD)@kR}<X+X6 -w;wr+M;uol4jArdP*#a~M<Idc2k3phSv3xRUV8K;X}vMr8#+-z@Htwgi9FqOWIV46>$%VZsY#!^i21t -9NO9I8r9wS%sW*S7eEFdI5Q`0pPYh;8=>P{A;qH)D=p>rE#>_nS_Kp<Ln1o5{_^`OnuEx7RP;-MqiLz -HPM~>W1(CdiDO|9UcOhUAZfDN+Aro%mMYo=VNhvWaSu*T6WZu94|>8y~Lw<dF2_+`{Jc66Vy|tu!srg -V$lw=1s4OUe@@o*nj>?fO#UgyzJLVb2;<Bv4A_B;+|g0IBL#A47=y(@W;;@&Js8T13ddd1R^&C98e~s -}{0E37JlZGXPsvN93gR`a`bZ_V^xS=|!mNakwV~CNbix2L8Mh3FeR1;jH{vY}jn*%Rmh&}ea_*!ZoN6 -jQ`Oay>)vWklxioRJ@$0{xg<Sd=8s@g)0IvSn!-D>W2Vv~aC+s4`9*1X5_qG=!7>H;MX^+(JU0QBb%0 -&0XdP_X<GXn_stv5{n(Y8n`87TIpnSiNGvmsRj6RGMsCJDy(nwaYn%U*$Iy%XZ@bmM}+5y7}2Pr98i( -?T0qNt8-<c||0Mx-!|b0Q{`0>fgl};wnH8G?v%YlKigJ=Ui+*<D4J5Ni1aWcLgMpbpqlYQK(Wlx+*<5 -d4s)ctV(R*#4Q#H>PT^u-P%;|oMMfVGrj4Q_~dlzOmI52gs>{BfCaip{|V0Yx}M)zYG|c2TAWyfnxGC -PFBk(9L?}ghpP;eoGFT<Hlge!2I=-iXa!HN}njo%)5<g6SBy*`{ou=L<D;%}f(dY90*Xn`r^H@!gH4z -8nee)<$<!75hrT5S=D-rj`Qo?XFuDVVu-&AV40aD=n>J8&!ZS|$b%F=X)JG4wpsaVt$t?5rfWjKIvJT -AMu7TY+hRQ+4z7r^1Z!2*-425mPl?)@wiF5|~)G8h;7^8uSqRb{_5kKq-_k%ALAP~RlwXzDK&b3aDGV -`U}mHXdKIrlm&~;h0#fS|CtE5X^83gY%Ov9S3tO!`q~v!5jD1iRET22K;U?=3bUnMx22gx_;PjovKOM -a@Zp2pJoEY6zwZ=)N(D!+m<c<>KyL}e!|kwIVGL<ytMRJ{n66jXpXHr5AZWOMH%uwjjLr|tPd5}nxBf -7^=h@#MJE)H4=Ggo!ybT^N0^lPELRDrr8$pb7#)yxLKBMBY!Ne`-I8U-=>uO{VnR&Vn4WY1i&Na)9dO -!+_&9nR#?CU8=e_Z-Q0`X;xL0y6$xc1~dMr+kj!(o8Cj)jC*k5JDu%f(Jv2k_$&B^!QjbQK&a9mW190 -V+(c?hFu>H=dVqmZs!Ag6ODIAAcvnk%*y@(?gUpsG<EAiSSO?rT>^sL`Wztv{L{bkqrT+eXSw+?};^) -DDp8k6RvQe>xn__-UvObNm)7PF_%c0F|uL#O~&lxw`0BHN#^$FqZ{Wm(Dmgwa-bKRJ%xgKrdns7*K97 -Y{k_iLe(57JpuiOe!gUwBp8<Rk*jLb5(}o++SSIyg{hLnJre+1U{OF1I6phEK%}8lCrn!S(V1EHoDEC -2Qf9|tx^S~m+X{WCT<aMnRfTWd3KL(ibrkM$Xb;jYV^nIuQ<4Jq{JHk%PR-I)Rg4?J55{(R_bpAHtjp -tXg35e{-u^<@YJ<(G3%Hkgp%gb%Ym{9cK~p3yRmhGN2cUi71%(=vR&F>IySXQXwot{+9DWGH5ClgZb$ -sW_+4^g!_2`tdmWqo|NX0xVm#GsV&e*{4cBO(~Y_p(e+@x=nWs|f^O8&eCE69q2;|Gm8?H%JHI_q{h9 -42a{8QqHl>ibTY8R1MFXc;y{kERyL|A&l)5QTXO<&DHpZpCt<-q2YueFYDRkuqo#tGYsWVW&oa*;q#m -nt=8g=j@dsAr>s6=+BtZYUtS$CfJV21R0|{`-T(zNH-GjAvLT4kK05Ey`i?e&(m@&fX2S~!dzr|zwO` -)e@Y(kik~N3+#qzxD=>g!Ivwl75nD&P-~q`Gr~&p?cuchg)gb5EaBAyb4-{A`t4ak{{2D2~TLWEqG3H -OZ2F7&SuB9)g(=Z`7rQrqE3%4$+{KXaOcrudD(fhxigu<7~zkU*Z+j`kmq#ilj-l|x~PuN^}tm-`i9= -L|1>C}fhnC9)G)LAw0=b$R1KSYK8bVa+#Qf+KpUFxpwL)fbUKLo?@$i8u?#PVc|oL%LTZgD7Fy-{D}p -m)U8HTXV<LS-JiFZI<9g?75TuhlgVg(~Cs0n>F4{Ez!8KyYpY=X9Dkt$UZS5%0!+;1(g$OqJy3+i$wg -uVER0eT5`H*Gb=*OqDS%$_I{T&jK+*iMYT^!RCCU50=}iD{w&P$}tDewZsQNIyxxza1tFyM-gb5oHoV -R5jhlRZffAd*K`*RTs-2qtGw8qy;8G)E&RYMX;H!ao^qznPR88`w{sKs+E}yh+eC)HjO(<ec>Quj{>p -enS7iu^lxyisee_$RGcbIMv|XdiBI!K8Pvqa@CUFmAV||5`&K~Xy<)Opt3sFZk_jnn2Y)1D~EVF75He -=fP29KsLJf5;(58m9m;RzSLj>wvSX9a4oi1aDL=t5I>v_(WW(dr8yEj8<j?nT!hLEYTz63Kh0b07S>E -c{qWlOypc$fp71Rz2FIy^2OD1C26kk>=wVVT1chrG`0T7xNpkoPEwZS5b{a<UDwM#oYR_6|1@Tg|pmw -wsefat#XbZQjkks>ejwS48H5Mz(DeKT;w&dKzrSAbmv8~0Ugh6Z$-R<cPqBMul6=*?}5`G=8;<%<V!n -SO)0PJai6!D?;|_l-}tES$7`3z+qJXgeEmlaLUKV&6EERY7w~z0ET37r#LHp)DpzuD_G=D^HmGAcp(A -GIUY&xEu-ypDtd4@HI_e?L*~ilc#3vXGe+dCGjVwP)*ih}u2*)C{Qs>EgK`Mv-QxIRJ3i~!@{G&FPjx -T)x^3VAYVN!)GseE^7T`El>sZFDHQ-Cv}h=;xcaf`*hWxb{_rY`3z;w{JX!N_VHlBz10YxNyVyuYMAb -ZRyOI~%RufJrMS`Z6F>Uhm%ffVXC2+T8)xoF^;vp5outXs*JERd$EI%E#)=z3|$5<rFeG-TcQo+IK@( -HxqR_6jeA(e<fFimDr%d@A%kao~jl8qbjy$gWm&3I39gGYKpDG*Kj!3C1LF(LV>Q|Jh^akU)R;@YJ1# -P%04y$Xt0)NUdorSl$~JZP5W<qC|-dRw72>WHYZhE9n3z|o-J<T7sK|2>~sf%|4A7yWs~P<VJ}ocVhu -_EhE+NX=E;cIUtV%R|NQ#RYoS8hGHX&@5mpG7oi|^Ru*OyX;J0+w%jKHk^|lge+GF}p4uzkr)4~gl*q --NE3)sIp(ccKuPg*2M6AI)|4xtCIAJQ)-#NTr5#+6`C+7<bRzds>g=*g);z3D)4)|(9!N(TD>w4dL^l -i!<+V#<)NC8gW3QlfN1x_=uHl%RdW7fJJG>ry3l)7GdoruizFJHoiJv_qHD=$aq@uRsOMKN};13P|*A -GXYD3y`bWtb<^Of?skA+)(J&+Bj5H2P5)^T4_;5#-`)zWif;aGO7^?7M$$5aOTE;$Be1iUJ+_&nHuCN -H0qwB0@W$Kq#1tNVMdOVBmWW+QK;%nW9p0<ZT%2rof23|A@MpV*9qqd+D0<3i{Puow6tC}cX=gvv4eF -f9Qs}GWJcj~zqpK*jgJr#z3#{MsYqKo(LDc0z=$cvA-_dDS9@5H#*|{xA6U<%4PdHQ8m6wi&7)%J(7u -tJa`QV5I=8-6z7rQ?TCu{|muBOr(t>Y%Ggn&Nwj-P$3+trm8NGI=i?{{`l9|wbVEuFbVAOOgebem8!f -c!H<26$hrlhs}Ig$9NBBmp3)tk4_1#M?j~Fs2R0C$jWxw~cr0lo5ZE{L=LvWOih>{kbQPtq0Y3Eez6^ -7Q~=6DFO7i;&0ihxw$d%cuU^_d77nXEsZJ+lCE_9eQ|@A>y!y5Pw479nW?&*1DxkUc-`Rxg)S4CA^ur -F>^<l^jvlr?aPo&$%lCULrHx#MgQs%gU(QsG0=hz;)q6qVwUS3Tt)H*oaI)7{=~-o7<Bj>G@g=3DW$E -6ROZz^4?%e$80;iL?VHLGQOSQ42U6WD5X~0}Q=-nRMpCh5~>h}M32|A_h1`$l4%8Ol(%g}52@$mRl)V -edb$6@BUA6pk+t4sAkb8G)mCsTCvv2kV4rBZYRbsC3CUJ6`v-;R<40cU)(4uS||+uAm}aj5()3tWQ3O -ky?|M1RkdY{+vRiD%sR<IyMhmAbZi;u1caNqjs$1&sFb{Lh_`FcXYmbV6uQXd1Tf;OVZz3GG044^^^4 -Rg9_#$5CJTz1uI0#=ZXnP)h>@6aWAK2ml;P_ErD@0006200000001Wd003}la4%nWWo~3|axZmqY;0* -_GcRLrZgg^KVlQ7`X>MtBUtcb8c>@4YO9KQH00008031s8Rw{$(6}15X0KEeM05Jdn0B~t=FJE?LZe( -wAFLiQkY-wUMFJo_RbaH88FJEDBaAj_1X>Mg-Wo~w9a&K-faCya(L2KMF5QXpl6@xC_z+yu#fj|xmaY -7E=1ZUeGN->HwYm3SnA&s5xzprF=8)qAOt#2NWzIl3YEQBa_y@@c89xZ|oG#QQQ9i@xF1R5C?1NR6U@ -1b^`aR}%p6UYtdxGY416lU-g7$_D+p>Yo;w$gi?+gBIY1*9h+kHO_nmXx&12B47ZX}(^TKY+DSI{iYw -PS7;H!8|*H+0QytYdQg8bk4XAjGL=_6Cy*04ufPv4vw6%m@&K55>b)U%bvtwGbBG`KuAXP&LrXX0FjN -g87)toHN1=rhG$xKbW}Z9j7bPa4o0z=a1D`;{7gB}2(hQpYWIo3A?j?o>QViKeRd?dn{g2ldS)N5t4d -iKb=eVh7E47#^~ae?lZsX3q(=r_owT1^I*VXwemaqoE03vu7n`T2dVBw{t=s0ycK7hP7C+$T282IwPw -w(cyyfy&lJBDafRs&pn{_t2?2uP8U>5ycH(%?feSW;#ecLp(Si|ue7iGF;iu~1ZzY@1Np(UTUu@Z}&I -p3!LAnkt6Y4Pj)Ltr~hLtL!&E&6~;GV1ayzB_3n7QX>dO9KQH00008031s8RtoNuiDV1_030g-04M+e -0B~t=FJE?LZe(wAFLiQkY-wUMFJo_RbaH88FJW+SWo~C_Ze=cTd9_;WbKAHP|IWVxRVHKUMyB(a=?71 -B9be+)JeOSDSectndqYDcB;iaFJc5+1cG|zayLb^GDaCGD%_OG4#bO`7eE`s8GKrR3E=eJ>HfN-&#g1 -o85=tr|a#GNeZdgs4Ep13E;l+C)Hb8h$RpheV@RFU#==RI!5ARr$ZpjU+cRXd}Pur%c<oVfInu|7zH) ->LxisFn`6;t!hGLg!&YTs-{dDhnX8X0_lo5WFc`9O;b7HK6cetsTB1U~Cp6r|!+oa|Vci8_WkIbXddy -r@LokZX|lqZaolJxEbDHDAR}63YQ}(kdA?bHZifs1ixbY$YDFG<-e!aymO#ukrJ2z))Mzjh;y240myT -MOJLf%M5JIh)h|@q+^BFB#QyR=}b|uTrz)I&k}k?N~B2dSaX`Q9m^lLmd6B^QEzJ)#<y|Jes7s<rYG+ -&mnU;_Vx8@|`2^-Hx2$G_!oS;`7rdbj7o~hMHvS%2beuiARzt~OTG3E2f0-qUvjp6bMksZhNu|LeP!Z -k$l=q|*4QL)A*$NaO=~f`cTGV7O+M0j>IZu_GG3mr_wl!l!R9b$dZY3`_kwu^=hhYJzeHoL#ik76bL^ -qK0G^bLY-}b$DOYV8Ib#lj@23&b16|y;H>orRoz5}q97?pdH@;Yq`+0ZgY7fX_ha)W=BCMtA*f#MBQK -xO3R`5}&8h4N7_PhHU53HomvF&-9f$!bqnNmn@-z`zPv0qYz6OlU3z+0tFl>*$3VY+mzJ4d9fgBEc*N -h(Mfs+)sh~sm~qpfGa9FD46CRVquM5{2if#`K;_Lj_j5~8Nn<u2Ye9OqVENf6-)Vguh6v?IWR-r!Klj -8x3?f{yr)Heduwx*ipp}A>}buwR7`f^iJ$ium&uo#%jD+Mo1ZS1H_4C7<@JZFAILd5Y3i1pMA7S*T&< -D6!k<DLx$VG3-sS9p1LNq?CS02tXJDGS;%xn{asa?6qjeTp-v=&742iZO3U;Dg^G#bT!xIPvWgS2b=* -w$S7OZTD(>snPP+=mKi<4yCHek{uu?d&1q{!QbCHi|5nQ<=cQ!X|ej5PE0p4KINm4;&+vxk(Kurwr7W -ofkNWnGJU?!Nw_=jwrv^x-pW>b*yEU5iGfBKL-FZa#S5mb_qK1v4_UB2+ZJ12f53@`tz(J9yG@18-{S -iVKYWCU|LQnG|Z@e%4<<GB9)|J0e+uYK{l0@!5=7nzrFN5P~ipFZdF?ZnWf<z$ju!?5J1Fj4PuE7@c> -;)PT#;!4vn?Qz<&q9wAq1SlLQ*umn&;eikK*q6mBoUyO(24QoEYBUGCtDQN*HfeI2SG<J3GI;Rb!-@^ -EE>iN|a-U{ds&r|YD9XO88vBfWRjhTX|#=mbwSu&M!T&slTVNeZ-=@0x01HqwjrTQ<wUXPZsjMuPI4s -I@G!)Qjt+9U>(+X*XL(354VNCN=py7Wm%WUJp`F6J`FHptDAK+l&#Qv{O%qsR<p@Z^Ua(qd@qu)oF9s -K~yp(L)YDLq1-iS`gkm&q+-=7Nc@lF9R>$LJQVq)$jbGsmeUvQJ!NCiajEmQ=5hrm9mFUfG`KN8p*G7 -w9UE&v2<bZ(zt9Zovh@+wJ5P+F8M!HH7<l|CqTQGFG#^QbhU4o9GPYUe>m^;tAq1UwN~4%Esc0Ab21b -P!5}vn3AFljy}bJL^NsPs4{R?~KPZ4fN&$uQo<~e`V0#{hPB0Rv9FGqfTSJ=XC2x{s>V%UlU(dV#60p -l^xxg&YjbaAltUtP=InMynNy_SmuQ71gVhJU(Be8%=EQjv3*Na2Dj-ar_VL8_N9Y_`drBe1F(unG_VA -Lyx@g!g{>-qy*%VK;8mzlV&jWi+d)*Nd!U2?IRAzX6;iNZE&y*6hwsd$-(^;y|yx1C`Pb0AY-gvVT*v -GVL?{OXVK!&%MNkRqTpJ?n3~woQ@8lX<}RP=fEMJi~<vId*tcFthNQ1?Y>%fCR;7Y&e|QhZjuh4@KdO -j?g|qK~Ob0etY@u;>(AnA1eS6RvY0xyu#GBE)~Oo`oYr_Ds9s2E2f`76*II7_Mo3Nr+3hnt7f)lr#8d -xVUOQ{0IGX)jZ|L-HM0`}v=@-r4@I|5GC_EDUsfX9_agi$*`Q_`uDuLkx|@Y*Ypj)%<<-Z_PhXZD;dk -HJyqetI+YHfP6a1#!m_S2fJv=pk=S~C<j;=?tAH79LEU89<em1)x#VmG%e^`(g!J7t3VjiX_TM#<<#p -?fIehMsZKNa2Qf@TZ!!0@eh+M@5fzK_gb#PdJ@H6)`-ZP>t+7)IGb0cS|oH_u``&d?rx(jl`9M1q|tT -Xa5in+k)Asrfq_&K@l<2lGWZze_Nt<8^*{Yh=2Fah9=6)e)??Y^?0~y9yiF9=iI>uSz8v<mf|eq0~(p -AxKW^4Vz$1f^G4X&CUnvKdtWJr>lLosc<XJ{Tc-YWirmdv?bCqfC5)xT6+1SSSeYd;ptZgXN%$RY{a6 -$Ms9k{m~X{>iD7ZfluJ-howqm?KEkHK_R@G2;}V!qDar-=Ho5H{5M=v+wm*)rr#Ch(+Z^<+b>q;>6Fb ->@_Vugdo*l&1LA7B!{-z7Z<4W7D`%ycZVA7q$|JsO|V7foF8wH(S&&hK@&~sZT2|J`cwpxjo_jQKz@} -wzcjYtC0P$oM%cQw`3vSB&wN$`yP2w50fO$+@$4@z;83%!}`7r8*BSl80tlxY_P5NLzfp%<Q!H(Qq8s -ok|($nx(8?cs{zYA-r95v7yr$&svbY%ei{Q5_!3d*X$*k+7$3p-EVf*DqcV>G5NBZVNJbf4Q7Q1DZh# -(z&VEi^jZ6Yla(>@dV$k<`R|`a}fwVCkb8;saiS8XEqFT9eaU2$Awm4c(j|Gs^97^&t};62Ko+7ZY7j -CV^spER5065gK5JBa<PdswrV%i$!8-6ZttE;a{4_c250qNFbp|45}2U7LOfoaK7P8}V8nx#-v1nG3i~ -pQQ;heU_%Y4oA;w{@I=cG8K8%yu?Sc6_PBfki?I*~IIu8Lz?_nFg6>YAwioPDeqeT}p-SNzpN{x?%u3 -^6i{#rr!gkXt{MKD<+I)M800;wmnUZOOSY*<chypE-nd4K6%%W^D1JTVW17z==o`N^SsHYR|MqhrzYD -8L>9>nJ|eZgd==y&cbx;Hv<A1USD6%)_9Z1>4pG=}H|LJfdH4S+XPSH3$ASSzmltwaB^)gXyeatf809 -T7545{^Alqh<yZ}GOzK3ny@kz874m3HllzOmBQw6KPRiUQGHX78+K6uO0m<IRc^L+PaII=F%zISaYTz -ywJ^*K^{J(v%)(R;+71~)9X5(ghV>|8`S^l=8!q;%e~Lg$xn}hv<+kL$;GMmGVfNxv9bH>bo=B_A+#{ -CI;<M%iuORNso##EC_m?MVbk(_vwg!;w^fhz3ZOc2B5!fEn*oVc43ScQi-m{b?!OSz57t1Q=pya&YP} -xbb2E)`b59tn=e`vE`v89?%VpTaEcMk%h=74XS`+c~72{-Kl^$Kr9Gjj=)F=GbU1l^1JZjN>>TG%vKz -z(lT5zNLTVA&ooa30UuY0kkbLfzklKv(IDi}(k;3Ap++4Yf9Gdxsu{+$_edlfa9R(q_O>TZW{%()1|x -U;-BC?eD(2>o5uJu$liG#s6>W3=pyyj66Yqm9j?<v2>EQM_IwehP&OB<iHW=pys22@oW`w_7+d-{j0$ -fm8WT&H*uKt@s0q0ZDLQ<=61c=;Ml}a#0g#y*ozXiA_Rtend;k9|NStb9=Rv6pCg;@4Fr9gQ@1EI5Dm -86&>0;#p{m&q4;ggas*_lvf>~LlI|i{z95}1``i(~C`Vr???%_#r__7BXdseNHGCZ*!T!wiLb=0a?JJ -=)YTMYayK*FIx9IVkbJJwzc|4L*QbP=}mvmj6#dwVjDH&OogvEAQSfH4_Au`(|84+R`(Mo+U+u_^Hu* -2t;O@SrOW&mpk?uV_u70mT|U0*c20VweZrB~$c_T;v=Iux@gt{!Pa4R~rc1f`WhGAF0|^&QtY^KaMv| -YnsBgB=Uc{2!0(hiG7M_?3a#TpXPor34^#1%^$I5k1iUtng?fwWW$L`u`A>wXDiz1KTt~p1QY-O00;m -aO7>P2Y3Vmo1^@uC5dZ)u0001RX>c!Jc4cm4Z*nhna%^mAVlyveZ*FvQX<{#KbZl*KZ*OcaaCyyF-*4 -MC5PtVxaZ?f0?o`D|S70z;3_<E8!P2y7T=XFc1X?;<Y$Q=5skqtD|9wYNKP@K(_Ao3jp~&O$<9B!8(V -pjxu9lbYft5PJT=R%&o^PNKBK08>xt4rYYK&p^2q^h|gfU8`CCf*n3#Ceg7e`Yc6ygjLt&7>=VI*P<H -bQJt3?h*o7Kf!wQ@(n0$jt_I7^7x9{f)=-qv^;a1ZycW2*Y)$ONn6!JS&9Mz*b76ba?2#N26+f%VbU< -mD`t!&Bj2k7B{FbX$IxUE$2GT>NPX2rh}lKJYOz9UZ09Q$4GOLf25n&CIyS`*#=dh__rVv4>U4&45O4 -2S5G(?jcR;>8H`6jf8H`dcv<lfRJ;ZTk74>HWFjt81g;>)LLx<hC}(*LTb`z{LXc?AkHK^9cn*~_csL -HGw45SS=r^<EDHn!9@~Q=>vandWhC+%0W%>v)1+Q{P7LxXhTtUi}Ihzi!(Q;8$6xI#bNx8BSt>d{9*W -=?~kAvFf#Tp((2}~j|C>2T&YtRYds_t4?#FS%MX35NH6~T;&M1#OM4LskvdsneSOJ5wj{%A59QS4#fh -I|}`Im;-6XlWFsOerwQ-4E_~PrxTL2ikMsFERpWkSK})4C+JV@IXai{?naU8;YoLY740GX$LAw$S1+| -ETh$IjBCn#o^u_BV}<G3w`BQHY<+tu`S#%zlN&|<UfplasDj&tZ2l^96MF_!p)n=#=TDa)9JS<@VAGI -kV?ueL39Kt^bH|`@WWz-!X4e-^ezvMcCB=$z>ah;jyASVAF0O8G&8ndu)<R}Xx2}q9?Wmw|Y=w-CiJd -Teg1r}^Y^7ihLuYg*T~C6Buw7nS4`dhAe9UWR`pc4S?M3GnN$>Ju!6XIWtput_xgLABx1JA2J7*BbjJ -TM0w%ttc0xCDU!H#X`w94}6u5UqX&55#3YUH>LO<LL9=*0a6d_-x;cI4U|O(^6lVfW}_tS}-ub?a?r2 -4JK}iRd16$6Hn^ZFJ@y3k@U?IcyW28r}JmO4}3y6>{N@#5m}~&dV%pPf+ml9F7_bs?i|ERk;~AQ#Rh$ -nkX>BZL!;;>=sZi0yv0U`8iMrsuF|e&fa5@2&MN-*TvPWOh(NxL1x+<1><k8O+jx4-XDm?>ywl}p!dB -oCz3+9#gz96ITn)tWtGC~7^$LTwcT!CcSHrf_H=U{GTG6ovAM^*y%88eci(2zLH`1-ky=NN8=<+=s|= -N*PPTi&n-=+<0cAr$Ji~$Ql|e*Zf%>nR4zCtxAC?y<%SHHpaeaMqwipjNtxBpx=`ahtPcEfu3^Q|}Uw -=({ECf~hjlHwQ()0U)gDdJ2dp4S!pS$hU84T@|7dY-2B(VuX%p*OPrmOGz=)rXkKxw8+3)dkw8{M26y -AJxikN%w<kmq;AOf!4tO%MckUUO7DKAKJ^y{Lb(Zv<QK64xj(k8JbTO~Dg`qG|vdB9_}X0#$vK3S}EX -$D4Cgp%AODl!Y+fBE7z-Ta(v&s)UYfD;hnHgLOe1n;`X5({>@1h%$|<1I#l=C)Bi}grzCw8yqC833`> -O;R8!c8)L`cO{cQ%YO(ggn>@X_##I}bmZVHi8y++3WjSAix|zMDVyUae>l-|EoVs~CYsH@242`Hy8c= -<Il5wJc@hu`<HX<-M%=?_<x571Y$`aYnv{_Zn;|@puKHerh$3rpMdH?K&$3^wD4j<KKB|i9j$~GoeR! -^wwsY*^x&rdEd7guLb$jN}7J(^-|GPS9_ch&0T^YVOgwY)feQm_V)n;z|VTf1L(=G{B(0rX>4ts(y}b -@9Iuy@BZdTm75d%t!(|nM+mG!h@gYa6Fw3%C}=dHT=u;Xjs3yHRn~DCGo4Pvx@y0Y^9(FO!N396{%mj --sIUb_P*Gis&?!yThm+>>^`D9mD!irJsh@g2OzZcZ09P$E;5PqgFCk=(LOmTg^ZN9#bSSzG+!Cg>n3i -$drzp9h#%)R{dQ|&XO>Qu9M$|ycPi%e8&A)dvg}wApD1;x%<nq;0&15#&tVE|{bt)Mqn!uc_d&UKpLn -)lJCD3wu732>WWZjBGs~6bsHslBX2Ngo?+>orQJQ}MP)h>@6aWAK2ml;P_Et_>>pRgD006l{001Ze00 -3}la4%nWWo~3|axZmqY;0*_GcRLrZgg^KVlQxcZ*XO9b8~DiaCzlhZFAc=lK#$Lfl_WNR7Pg(WOiy!y -V_chEpJqt*go5t>})DUK_Vn^Oc7jyw5-|M`|a1=07#IcWM}q1+>58CB9V<occZ)UbOY-3dfwgpTegXd -6}!Ehgh#5(GMN`_A#--UEmksRZvu89lSFP<u@XwKI8{Yn&Wl*4ip2}Il_lHAGKst-z89>J>_O!5V#|> -8T;xT(i08ZzK%6=}FJ&PH$dW~3!ONszNj%GW9s^+{y;rF$Ucm>K1DmhJ{60>Xzo$u4AtIa(h<FsmC=g -FTl>DBA;7J_8Ag>_;jLVfs7J=v8tztzy6iKll9f3K^`23zPNnTa(BoWcj^IoxOw!O+kdVBkR8ZsZ46) --(n?&SO6I5_Sj%{<>`g<R%5TWyhS9jEcST(gtlZSdWIEpoYL*;WD{r4kwuM=5tH-vq~o&gIqjymxXVz -_NpSJXj7sfc#)lmw3Q7t9ZV0U*jwTrX;>e1ltI&grx-KK=)k08pOGn7s-~bM2@c+3}j`-R{Q}?l8b~F -@q++@h1k><%EjMH7#V>%e})yA^VAv*ZMxRxX<BzK*K3}lNrM2sMB-?c$oc(n$YxxvJdeTOzk!bACr4n -dIIDQpn!D<fa<HD@2H=$s<R~3ZGXU|D#2YTkbUvK^XPGD9aBqXTOp8381r_fgPJaPggmGHP&`?eFilF -yc7e>*&nSekM<c%}21pi)hoQl1>ySpaifS0I%k*lF`W?*TVVhl0Prc)IcVqU63uH#?Dbn2~TR3;D=5P -ZB~Jl!%0#>-g|uLY~;g11?gpmyN$dSb;&g%eMwR^sWv#3RhzVQg(+ZSEr94(S8_#cN6cVD=z<056bvu --8<Kt9nf;4hJpi_lZtC&P7(R2~9T6bD7r?WLzoFyM%<ZH9m#DIt1ekEA4P*$^kN8!>Vp|1{#3PA{H0m -ci=5HmqB9lHY<^mBU+DT+SZEkT-1RMetfEZ2#txRGjtFt5Iifcb44a$<sclGiX#Y>#R9Zsasg4K_$<M -pkR@J2{`0`wvs@^J3+1Fg<|_!g>DkTX!x)yjfOwjQ{eYG!RB1e9tD?x%@bznv2AlXk&O{XRK<3NW`0e -$r$RQPkmwYY4Ng5efpwaUjokjC}iVe*lf-LhgkBe<69<xNoMV}Z|%UE;SY&K4u02?!79g8)s`!t9pQD -UIh6iY}B<qW)P{rdiw=ru)g4|XI9wJ=<iMVX5*v>wT4N+x9?LjB$I%yW~J13h8;Dg5v4WK+xX@ps4nz -WX*<@n6@x2xeeG%%6evb~DO6M;A12Li5P;s!-bHij!FuA5-I;A{svyzynurUrfB{Bxm58OOs0)y8Uqk -d&o&}Ok?K>1XJgDe@xTCr+z#1v`J!VrTuXWyWQkUKUR=GL}6bE6ca6ROOHwFE;`I$vMjWLP^D|wP#~Y -Jk5ne+n5u_WaMbo|@(35Ob;%i~lrCEx=K7YnIxN@-AV@0e$%4RcYqavnSOt*J1&(po9zTTkMdgNxTtX -gR+OL=p?Z>UMA2&Qtfk+t>Lrj<#Wf3P{OAPx?#gFzCk_G5+_TBZ()!o(E)%y^VO?dWxGQPa?JUdH(AA -HiV_i}F%e`!-3I20fTzyTbQ4Q5hGqccpJYxw}rdYTvQUOGGx83+#P8M2?50le=qU^jwej-}+P6KSkeD -TbCuM-njOtAA;Ldj016AC7wi?ad(BQs&#yxsemR_mfsu6DZ7j3BaUe^k(1zXbMBf>ySf6>~pVUH|h;o -PdpYm0EZAwTs{Bdc`tC|fV{uqTScf+1>U>U+Yq0Q*j-)<r1`)z?LJm}fS%VDC?eR&K*||dH{&^E>q6v -5fJ{NJzzc2mfK;vsO^?_=NDW$McWH-iKEwYX-n<PzjPKrEoomHA{NTwkn8V$14=2qb^r#x~Pw?~w?tr -kh<UWiA(^aF9``cchoW_zktbmj#46~leI6DUT+z^R|d;z1h^{{*nNu-58IVh8%`8ui0ptf91UQbK*<{ -6T``7M&Y>6YwGC7BnhA_7+pAq*UbSg~3EL$+t*o4fGx>T=w4il4?elZ&6}#h^)hb$vIvx;%Z~Nq;>a- -?Zp&#{cngax*^POHbtAcD=ngoxBex7a#=@hR6>+w9*GuGfGyP0Z1x*|6#!H`&8ZD57-0droGk(0GzLt --|u6X+kmEwC{qNSfS3f7et#jTP8*yD6yc|v$=x{o@%`1=Uv4LV8^g>e-@pCgJI|AOybLk2!#aylpqsA -_0q{A4G!2=_(x6yD{TNme_8WL<cAa1;iudqQ<bD{Yhzdgx+k?uQbz*SsPrVN^y%*afNKsHN+5|>5Tb0 -6&2--vlXl-*K=;^W{v?X?^3r&&Ep?D7=$pOf(^H@Wfimz3qB5P@QkhV6UwOy0Vf%lW!@cQSg>+vP7rb -*+?!Ce&ElwCVTWy_CHD#3<V8x+fc*_N4lv#Y4IhTJt%mn$4H)nWSD96LU^*Kh|YTL!v-(&z~rY7%Y4L -tbM{+0z)|Ck#Vu2Nf#_vC11>D%*cJqMe?(e6V4Gr7~1|z%d{`cdJ}(6q`C=af*#AsN}X({-v_0sqO5r -wF^Lw5%!kA{~=Q}nmeP>NpLd#J&olLJWe=n@<1h%2r71)p%2sofv`}#LV6WASK2W^NC<4&AL>`IJ;1} -T8XZD53kl}~nn6h0M<j<IYFwZ57%-Y+0Ka;r(V;6{1qj!Gz;yS=)XeD0y3GdFV!#ZRtGL|dTUKVkB%< -nBvIlB=VLKxg8<7V!y-5%+Sk+Wx$HB>Wv?cNxfK96T8+8pPZA&|g(})l*EUsW7)p4318Y`YbnTST9M2 -+>gNDJ(O!FmE$yEZ|+IL#W;F2`SyEfG=eHlhcnf#EC-zJx^~DgK2es4Vep`#))ZGHJK<bu31yqTQm}F -Ma&libKdJV6sBNE*D+iV$XrymQ+KXCV*#C>I~9jh}MK!vbyD$uW=P4%!2U10`xTEd1RWsTfHiRErCVV -9x)3PXxpE;PLSnbnz?Xg;rOLYV{C5$|6F%&I2K!qT7yTCz;{u-+^4r^lL?3gWo^JdiK>%K)R0J!6S1) -DBrY~KmT)(uE|YGYVOL33a=*pKDK&~L!?`vcezX!k#GHM+yEyuR`KY)yyH1}9^t#@D)P&&$NP0{2pQh -1m{HvfoZc#UPkxJG4`o>-p%4`f55}Rk3prC|vRExCS8!X<ShD*s&p~_r>UnSOhRzJ;0FOOPblMT74`# -8(6U1t4+J`mi1c|tvp>r1Xb;opxELSTap^p#A6;^6JHGB~5LW@Fv2bBPWYun8CwWQN!-i;A0GZc_JU! -G0+ftQ=opw;Ef%y2l=9p{7GzMr<llvnwJ$tr!8ki{|K_D7tOj@&_45W)}kggFL?uI+fDh{km~#^N8+G -SHim8RvHGBkfavzBkmuc%igO1(n#40dS9A^ChwqZ0R$3+Bw{sRkL~Z$;vX&Fi2nJUh}06Z;g?Qw;}M$ -5n9T2SHIHK`SiWVBCH3-p9i#UXnYIlP%w;Zu$@%4JtNrURq6Upg?B^2KR$=39a{cf<Zp+wMC3uj_a;e -W5kRQ`i=YdVsy<rb6i=sIBSWkfu^%TZZI}U8Q(EHuA?np`+CP1pTDlkb55Z^*#PtJckV8_lPISUi$So -V8mu{ipnr)O-)N7)*8eFcd(<Visw-_L}AtsfFhD`Wqe!j-3PC!#(P8K4(G#F#wHK@C$npTqYmp_>qBV -WMknC*p{?No!r_PS_@2m+)aG3gE|1uP2JU9Q#1ks@Tf6QUdl+*oRz(J;z=&;fPh#L5tQNECAB12O$(2 -wRZO)D%V-)*u!tVznHuq-~D_&4o`0{PX_gj{kANG;u6UtfU-Gl{|&Yg9@e!w#1-y=U1!5nGT{Qi4B7P -d^paJuE?}qXzL^ApHj#9u1u4vri<inUTX2PTh76Sgh0HLCSEmjA-7_9tG>{c*5E|@3m4t7C?j64$P&3 -Ot(jn>!tzOFFLY8>kXXkzau>$@E-cijpu+EM~5bLbi0z6Pf&<?WCU)+gm{6tfpm-<LdRC5n1g0BAepg -G(j`Ljqx&J)z{Zkq|04eiX7uk_PCq7UIJcWSo?iUKM`7HEL_DD>|o!8h!f+CVZMgG;W;wQ$&_lDt9#D -@Z;D%+{t!<T5b*-WH&&B|#vB8Lfo6Fc*#}?lGy^-k_pNi>lRIF|*A9+Ts=(eQTdRfCQa`&lWqbkIdZp -O<72ukDy+kETHJ$sNSG4+*y)-hmY(=n0Z$rMm!|EKGhqD7PW~3=MYbNJGr(YhVhH9G$O>6opUTvkZO( -Peh9TiK}p@Bbedl2gK%#7nDK%6dds7P&@nr|ywxeUlER=iW>Fj0X#&E<ft&*k{tP>VbdBM)zZBqWiyS -afPN$j!2GtR*HWbnuTyzaXo4DNalOPYdi+hVgAG6|Rg4$$|$}w`yeGFoWJ6pXLgp2KhAbw;}<>f|Yy> -B$ps?|HFc4usmf36nX?}5nxC^ZoVZZmqP#>4o`-z{+ln0P4J=|((dx&i`SC%SX(B>kGDv-hKT)mHzd7 -EGtn$ajRBTr=ZgAR`!GgNc4az=MKJtcPkz%+BG!0z9eH=X;-Ee*ieH&)|H0zEwj4*nW@fK}1ZcXG8S4 -d&{S8u0Xk$3Uc5h;%>?cystB4)wx#)2oW41jB=Uzx|I!&AR_QfuKfZlR@(KUfZ+LzFSXs~GD%<pcmpX -g+h*I2G9m=r6c-_$O(%;1)=@^LfjJZ$(D6Q+C(QYBDWXuwg&JYE&H)W{)u$een_l&$No0;1M}~dtWye -%V+VQwKuxTzBa@=}9Pb5~zRg28(k7H6v+V^+BrXz4*2rFE1CNu0m(&Z#d);3WDzXR3Ed@l6OmCDeNGC -;Oavx}u_&xvrhLzO?W<0fS9B03telU+ty=Z?|z!m5J8<zoI|Jm3}2m*8)&Ufpl-lOy0xJq5c6$JJ@Be -L&3GY}%Dc<EUw?&Hx~f?Gd+VPGj}ybPkLM5#SVT1la!waAfae3MD5911mGWy6ANjY-W9Dz2<h=#IzML -HI$rlcOSEio47i3`kTn*4b9R~by<xZqfyPVDvL;NQi$wP^JwX2d^Vo^G(Hb+-+jD0zxs6f-=WeW@jt= --fhWt|!ee%(9`uGo?!auC1Fi3b%b*cEpq#mv;P<;$gA8mbdUteth(`$NbA9y+-$mGo==GnYofEy?&gc -L?ygYdlyv3_V#S!58NUb2W7%ve46!yZ;0aNXBTdftI!U2``n;xkp^eu{S@*ew!xi$NaG8RrjoHb*Wjy -JwOU|qws0#<YUUlFy(|JP#n*$Vx?iP$~f_&+LatAJFst#m}1Z-?=OGs@CCs0`b0A(WAE65>5p!x$5R! -&P4~MkLl$VJGg}A~-&b6ZyoqxlG*-_6g78J3MT!m(k(<Z+5d?SL^T4;5Dl_EyYvfKasBLsk)Mev(`|( -B}w;s6tdt+NM~R!0M*Ony!->h261aJ{+Xc~y|rCnM_gp^*<m|$=lGU&+>vOuqMNpK$Bsx6M{AqpT9EY -xyO{j-!x()FkAB@-Si)X<RQ5Cj@490ls*Cx!1>jwmtWs(%fkv#)L(G3*C(nq7R#{NpPiQzqcg$G$?2_ -)wF#7`Wz^=a+;8)gwu)$_2whD|V&f=8kTMW7Nh$<Y%Oy*3rYxk;JuC|rx<X98WIJy%>JXVLchT4&#bH -KmW9meS#=?u?*G}~RKz1|x#-}ig?3kaEFlcA@_2ez{hG=4ugyX+6}zfK;fNkJor9mfGAOFitL^~#vTh -(q;cdkJz`NT}59T{As{yBFwczs0f3Nxp43iS8Ku#*k^0iND2F@m`*D3HZsY$d%ZZnQ`nj)X>;TTd4R~ -F*-VVjtN>;cf{yoI?%~QcQibYlzh$==jz7tsOz$Fqf-<(v^9z8DYb83?X;EX-wESu#;b;s9%`FD_36` -eYPd|NO!Eo!P=MeWBxB6Y#E*vNJXMMP2?jRG3Xw1PT-cWR&Lx8Bw3f4)f%s7~H%aifT<*o(r#nv8|Jw -^|pM%MEuVdPmUs}#EFCJT$GObY?Jo~L-((F__Z6o?gQ{8ZGbdUZ7++Zn+ZKauEb13-jRECB5Mqp6nos -0&InwC3$U&~yd3^fdaOf8kKdF&Hh-@^<sEcOV$_rmArdOm8fI-L6Egy2uk!?vdFnfGaH_0jbH-n*oqY -511`vyz}wVt6+3dT4$MX{i9UtajF|IdkWT7T0;4t-wWXFI9hQX5U!RZ=lk-@Xh-H{_Y?^C#9Zr3lbV4 -Y^dr_)m;Ji40~5xO&#L#o}I`Mmd;X*CUny2xZ9j#dKzK(9lxNW)fa@E^rfkk9^&@xTS{<~{Pc&tDiAB -2@DM9{KQbTovf9CXwRyUg*P>aCo8XS*qHgD2xt=qH`FW48c^&RWd`)>;rgSHgPOYI(E$|EqK&^X{)K# -~VkVq8HS3FMb^1}mdiF>hiJOO{Pw2^t#UjABXKq)Ss(_Cru^)1uJQd^GujcOpM6Ek*<4jO|vJHiJ4D* -mJD<6d`ZYJveoL%=>WKjG_H#M!HGSn=tKI#fT)>1VNEIjy%bAzlrvP0&agJjv1u1FF`Z=;n^<8J^84x --+EkXM5TPex?t+@F%=A>6dmIZ>m_&t^9h*T0R6D=DfmhC|pBdeCvGEzm~)wYw9Ybeig~E>e7UOat#V5 -)a5YPchs~qhuxF4chXz;4oljB0}Sf+D<kM5u4c*O_*!eGojm;<khn)`D#sd6c098Q*_)&HXU9~pYyq| -hIdOolCt4gF_I8L_5ZGB;b>LTZnUI^i)K6E*2l|#q`+dDjbUj+ZuWuvuzz6VN#J(;isq)Om($gKKX11 -Pj{4tWTPscF;{>?zc`<-I9dHM{dt{m80_-{fUO`$JMi#!igssD{YgO$As6r$G|o0(}eEw;0dz5fDGO9 -KQH00008031s8R>drF9>6640FZ_N04@Lk0B~t=FJE?LZe(wAFLiQkY-wUMFJo_RbaH88FLPyMb#i5Na -$#<BaBp&SE^v9}efx9cHqzkl`YW)S+8TKxbI0Q(U&<Hnu11z;RPk6oOS5yiREnV}$l{tJb$nQ(z54$5 -uO9#jfRy~m?$zy`E0wWHpwVbF`h{+=+wFFyGAuJW%YtN+W`)Sh4gI@JGf`%79L-O~LllUx*llF)bvm< -El#6w6FLSYpg96&EkCUK?9;BFEO-1k!L~$^Wr6|%0K$*)d7ij|h!pT%@qhghog(z0C1FuB76fi)#-bA -s?JV7JCe?cOmH6jxvfR79cz*Ed+7+@dhD{giGClNP6cpu!!&Nx}fuh?;&K19hKA^@$^wFKyZ+QW(W?l -{ekSJB-{W&%)pkXau_SrD*=Tn1%ah{;AK)9F>GSOq|hRkX<oUxhkAPtrn!!G`7tm@iTsOTkCv;b{`@# -5UL=2ARy$_(1|Vo)kQ~Ls~I7CJan8hzpr1GD3&4h+tyS7BSmoDU7w&s0Kx+YQX@J9`!QjNHSQcFOpvH -!U>qNNj&IS0a=%ML9@!_|0<(QI*Sn$uk()XxrsKK20<LBTe;v#x*dfCnn8cXFRDwF6cQF`!Ak?pVfs; -8=0L7EP413?25V>f&{NId>mY4c=|<ADad~b=H{!c*Pho-LSjY#N6eVD_6GU>MNS>FHxj6?47Gk@K!c} -Jjs|LRVd4TwtED(EYAErr>MRVYxMHx#^ye|=LT8Dgv8v}9dW6wm=L^^sfiQEd)Bi2KBO9l#K0$jzb@Z -YB(G<E>Ix{qL8(`CmUdYXEkN9zWo1(`%*@?ujrZq^q$3=4DStwKB!C4ZM8j9Q$Xbvgom)H_%_&j%_k( -#%s^(^G?bIq^@S`9}o6Aoe4I<UI3uC?ANK`U+(4sMGlvY&JXG6hMqWC>{vY1+82l=0RQr*&@n;fUpO1 -Tx{4$NJ46~OiP-D_=4;DK1~*{L3-q2w%Y)`VT>%ucAgj{LM9-7fPrB5&WX&LBUjOy7JVKE|DXjy3;^v -YR=nVe%QWLnp2;9jlfGX61+8=$FOWrnJbAQ$HPAd8rVsSjJO!CB-)RvCTO^J`nZV-U3cw4E@9P{E!Se -|4@jOn$d%Y^dbhFDq7!{%y9*K8vPrf^b|9xN2TKtHN{nzare)ket{F(dR00#nFtNo7*0>j<Gk`!{$7t -2hNTnbk~b_eVMXa~toY=F*4=6MlB2~s2=SRvrRv?qzMEVe<$QwZ`r4Wj^Hf`|*tHEgbcw&fD`cP@IkT -HUGY(LL%DI2ddpgIMnv{kr0JkcPl*A;RfHqcARMyXe<(w2pWbh6W&rKw8T63Ew`leze4YB~5Wt&f_Rw -^#!mLGILqrw!nw9B8(c$=}#$&eIPDCiC_+j=QNf|z@|tmz(bLY#@?>dHK{9vRLu%Vwk)#*hGzCyq(DL -%nf9L&-^&yQB~BBVX%XS<a>W5C(1JN|6wQly0puj0tz<n)zk0RRt9%7Q4tbFYC~>Rs6pg86h(?a8GlK -QNy^7<yQ}z@dA4g(3xtx6&+>XR}DsFBke;Z$nE<|@Qg}=Lf@nt;wIQcvi(BgJ*J^NWqF2&&bXYtec`l -2sJ|KsL%G@XjcErA<<y15#U;Q9D^c=h>WeEmVZhrZX7nYbE%8qWamY(j%7aO2Sw0e%|Y4nM-5gZJaB@ -$6?_x6ASD8ev~fZpA>{3~p!R;peNtt+@Godo!7i0F4U(eLcRuyoHfQpGMa+4@QP(V)QroLrgyouC8!6 -f;adKGr2`v#c*=-^X>S<$C>yzxw;s^!}lY=aPa<W#KXY^hgXB~r@putd>VWhQLhO=;(20I##DUyIKsy -`?g0K9&c>5#oYHV|J-dZJ`!M6%S=If^cslBf!R>eoDDyOLCol|>7<x?z5cItsF(f3vy-Lso|NcB3**I -N{23G)ciU7<GUZ)Gj-ZBF|_Wfmvwv_KzN@Gq+SNi;Sr=y;ua*$sO5OCEKvL^IjGRu-w|B>e2CMZ_=&w -K@1Jg)u%xhIS2ue^RyWMx>rC{`ehQ6%UGTN&JEa@k?b4F#rA&!eyECCFIyj0RTE@OKZ!tL6&4J(~<CS -3YPbe+YbfJyUIcSGmn2(&oADI!rTpiMlCZ0Y)}gRP5^ChOozqec(U}_%T>1v4+>974t#T%B=8{)CYQ| -8MD1VFQa(j7jf>F$$gS;6F&_608FbwH3+d&kY&Nn#{vBfn272P5D^wLT%t5g?zoY97pK9(590{LIYR( -F5hdznArUc9uKvB;sTZKli)?o$#4B;5?frZs!)O_WXWFcJNBwEuywZA#K5C1U<Y7mC4dtc~V|p{fsXh -Yrl(DKoh;wnBCbAyP1C}G>KlkSF3j)qPbWX63#zDXF^@~o&2TI1k|L5YDZi@*60<Q~vp9S!oXse(9+U -dL!)9W#aTCnfIGf1=hyz_A|_3`1km}MnEPeGFV$asGJhWJqZX*2*&W5}CKw?SU@>c==BnNJH=o3J>jc -S^LKK<$%?ge?PhY#if6QR}dh2SaNGT7*3@)LpNr5$W3u>@xtsYh`#`U~9{w00TNgGa4FYX%K>91(iy6 -6YwFJm9OI%fGtuGv*4EjKgZF%gx_nkNjre~y1cuKrHhJ#00IMBIV{kORh9!0AdxiZTe-ARAjPP$W9uJ -RLW}{@T`6<$Q(wWaUn(PApxp&FG#Qp`>yX?*j}n1K32wohM*(YlktVMT)aMZm3b2sK`JcA1$w9j+BsI --*cKg_lMEa7^ewRW^Fr!)jgUUyg;O7L$R%nlClY(kj#6ocBBBeHPpeLZf9)`sP3=V!a>86YWvi@>d{U -nqwhU}g!*wvd?uWN7~15*xcJvI|!U4m8SVt@v-+_AGuEJ!;tD#(ngaLaLC3Hi)vvIL8)V0RjAQe})V@ -zFftWz*bvm!^v|5iM~+RzbatF7@I4YcNtX@G7E^{XZZ$puSB28hOw%LkSZgWwf!2_PE#a!-~s%&@(yg -LZx!NFYxc*g1D3y)s(@taXR>f(Rr=7yeoKsF3>A+h1RT4ECa}&e1HGG-fJq(0G<t5y_)r2qYVd^dwLv -VGy(vi!vWBk_hIo0@IV!>p?8^7zUZ6ajfPcOk032^Fg7jGBZoP|sQ#B*FvI-!SCipS)A9ct!3<8mKmF -m`jzRvk1TP-^`Ug-t;41^&YWZ|Ax*UAIn)$==4HzC%MqYm11mxY5XPW{j)SnO00-SOYMjMK{lt>NF+? -osJ=3BuDbZpWs3R^p_A+})AqW6#S03O|+eulYBQI@lLZt7wWwfty!@o|LzpALMqr2N5X>c9K$d;i1ml -MmJ*OuYY`t|#w)&|Lw_;jXtY9rO03BO1tpH4Xp0d+Xm!u6{l_ef!<>P=0Rr7tZ&eHCsL6@cr;5t7>$8 -HaDn#&&Ag0`b;i*>KylVd?xQbb$<IgK8s@>AM7PFd*QrZGOMSv{?obr1^em+d#aiswEW>2ZJ&wz<79u -qN<Eh$_OB{g`R{{VSrb|zQJ__xktVLZNKmE^?@mz%gE5()z9tJU5NLv=OVp=$G{7M>foBh>Nvq?6OMn -F~VFnHl8jdo?AlDY->?-~p6goueRj|;O@ZMoaSRdD*($%LcCvUwUzUla292aSr#y+?;>nH)|=PRhl|4 -qaoMQ%F6XQF2l=pG*4C<rHxe`~*dr$T=%e)aE!`k$Q+7=NoE4~in|f!zUKnN9cZ(HXmlEtCBPI(T;TU -x5JZb2mBS9$M(p-}Rr~=;#p~PoIb5=~Hn$eF~1JkK;%j^>iGm`9U15C4PFNM{)F@i>3c`JfDW>lQDe; -U#bpI#&kbxwzL8-q_dDq(RxV37-CQm|NWFE_i}f<2?}ti^|38EYK{SZj4l_58{o2IC44*!63G@Ttl>b -=fsLxM6Y+RLk2<WPBPuqq1MkQ1_h|U}b~L*kTu*N>D67IYHi-T0n5J#vA(yD16Yy=;24zvi&v)W%Stj -AxZ!OF6+heqBiyR%I<l*);of;vly%asrvXy3+0qC@+5SJS=b$#@veeL1*44*q%^u;150)JjEmw0|pe} -IR2SFC(G)s>mE46X}l#mj1k9G`GdZ93D3+A=R#2jeINY>sgrRP|B?Jm_SY<7n2XD#Ychc&HJ%#Bgf0i -yO_{h=g}13!4B(RcDNi*!^K1I8F^8e;8p$V8|>3mKZ0LcMw<Y=Rq!OWNhf33fFaNz(gWwzzYC9T9)IN -x4+h1ifAn{KG1*-(^T(z^#my(ZqklNMczou1fje&K$~<W+O9APY&8F|fwA2|(NyE8h>3@3`q7_Z#AYA -W52IYf<l7(u$&hBm#yx|ieGTZS9SBV?i1Lc1hyXo0XYodZ4}<YFs2hYqQI_servWCDYjwhV-dvw!gBp -#VyrWPPsbrrJ4+k>wriOXsk-Q5Qi%jNuuXPT_?iAk~8t<s_BwUrry`M+_kbs3jHZPOm0}0BW-u5+0Ef -lC0{F`$FX4_IzV6tj)aAj+-2i9)?P8-H)E*Bp_X~<<6w?df15cf6j^KnVf<b)#(C_8BCJt93mj<a3@? -)+ZGn~9&%7vZOWI2R^wH7C}-or$&fu4^^sc?BJhGH*xI(G2&J`|@UdGioR4qvRaSbz+Lu4R=sYho{WJ -6sZRP{Gqvro-A6w;9<ynj1QXvlbXNn7z;e2fAD<YUfWjTuGi2Jbhaq<Wd#z5><)fV4Jh?XLF<2&{w3f -qR={9%agrBk;+z80d>oL-0?&Z{|5L*AT_JOHFqp1;Rj|1opp}yG`iQvbS*vOTJ^H8WZ(6mdXl`owql3 -%8SYy)||5}yp_E!3bsbXq9c(kBpY4)MkwRV%H2-836C})MKe3%7`2QD$FZAv!M$CP|@Gk(1$TI3}kG- -mR3-U4r3f_M0UXJU8=mx72{M|qWAM~sCjAYQ8)QJncpjq+K|l>c`tJEE`K`rk&)+1vqW6Y~Hy4sERe_ -Y|9z4{$H#1{odC8@HG-fv$KCkU;v$B*c^ZIC_wD{7lE(Al}4>;p+v9COX?xskky}Xt<E_Ac6w(X^QG- -KM?5mb85573I-sUuZhRyYq?G_s}&Qj#a1O!c%E0T;D7UA;fbGRu<BFS*EwfVq!~PZ5AQm*!>rd|hf;t -j7#6sNHkW`x&u)FxarFJ3?q9GG_qW?)oGFY0kSt$#y{5EWJ*KK-4GeC^$CxD^6wy420km4=jN|H*`SZ -Fu9(OWD)IzDW#p@KfR#a&{q^bMDUu5Z~cf^O_@C;U|cSON*TzqufQ9A(n?t*NNbpr@0Ou_aD3wV<*0g -0PkZAZ{AWEFu20$RfF<uYFO6-I_uz{g&twUwH-UWQd%#!-my&YlM8NBez9qQHu%)Gy7A(E?kia~*!`F -QOJ@&0{+WW4c+@j&@fbJYa&wQk5;p2Ttxk#?+7KuB0q#rIuCMMFIm*mP3&mp#CAVw6+TuD8_Ymz?Q2T -04>Z1LnzA(a9dD@g-$YBNduS~Q6=|qI!P=8m9ww$K{S*liDeC$W;n#r0H!k2DCMY&iTm-c%ez})q&K( -f9^4_ZbjtbQA&nL$YS<F&U3ed|8m$q6=@1#5m8k76gWcMVFS9{jH+ZY8xxd!gotiP%K>`~ht2v%jj1L -Ac8#M^gV0gWyX<O@LQK5kF<gmPAE;(Hd^Qd7r6S-6Y$08NuKTRl*RzY$rS;Tm0W(#5aI`wB2Arpv-{W -*)jg5}~w>lUV&N;cboq<|GtsZI4B3YLXr8L<q)qFw^x$N(1+PXjS629u4pfllxS-pCC&xmWLxF&4~VG -E_A<F1pN(_@Uq(?zPf)&o;OBpZvOsqcB3~oVXQIJm1WF+eMNz3-2bCN>wJ9!58lgXjDzZi)7MQYy&2` ->PZC+b;cZK=TP1s)5L%m8Du0JY=gv}++KUYSm!1|oF{!-kX1w^D)(%Ynhp4>t0D7Y<M^DrlpkXMsRZk -xB$J{lj8fe|L+`5UGOpagRnbe2;;)u42U4tHB|vQDT$)oI`-1eKV_#cb)*GPAi*!wLa*@g$*ND)=@{r -_?>Od4yC?2q~A}`3dR^?tnhW330PHSbI%|*_mO4h4N?$FS|NESXwF!5|nl?H8OQzXKeqiJaj>G2eE#l -#z!b<(p^y^fB0Z|nz#DVQUfZNmi?XOv({>SCx?vV|*HQuH-S{gz>?UiEKo@^+6AIC3~Bh&M@f7?>*qq -Wb#@JT<twxvo2CO{I`-r>$~tt4?k9ef6kng~{R+0BOr1@6{;p_ucm`0Z!q@B0)`bYj}HW?xnD9u#6In -2iZv2srugV@>b&Jkv(UmdYO2q_~6|}&`GK_dXO1a8WkD5_U9$q7kid#$l<Fk8a0%$`oOzeZ9xSXu|ZL --vmQ~7ZqY%=rLjWGD9eE?1PhHWqc?6g5Y160QOZX-@%4YB9iB_9Fyd~tL?H(~&}h&^#KrrXXKqpUQ4u -Pv(}?|NU5uv#URokk?|mxj6>4f!1qvw_^S<~yj-3a)GXR~&p3ACC>{dRl^<Wu-)<lHO6Lb7=(;#FxLu -_w}T|OtOx<D@aPwxfn8cMUr0k&rjshD3WBMg?{KBBihi;LXQg#`fEqMB(lXy9yKenbhu=c3DT2TX516 -MtNE#UDk_1l>2HbBFzOUek-TUU`%|1b*Mp8WN10(a5rYWZEdMql`L<15Xn3qp%Jdc_zW~wH4Uxl*H}u -V$C*SNTI0OUn#><M&(cSj`o?xASL1$<VtvCph{*!V;ij3a)CvWmaP<ng^XU$xj5-#d^&nSlM*W}WM(z -vN9f!2)oXGM-U2>p5-w`HHQf}*;9R6YH7>nw6m|PJz}vkRKK=$hbr5ZeIYpD<PotT3R^gG4)nTLCJ`L -eOaxEhj*32mffh0q(i+dW2bZ~~eU%^HOQy9d~A9GxC<_1%;I-7t6>mGqhW-M8e6f%Tuz;O|(Y{1$j^c -BmEB|22$nHS~gKKJ%O#ve*(Nx_D(8udjtn|CSNxNPn<vn4Fa(xWq7gRAR0EZ2ADJ!2}uO1dmf2n|{CN -_;@yQ4B8!1eaYYP?q3Kve}4(V&MbP%8s{M__S4tIbz5ed2-)ZH8!ZjvIW|Jg;y;L-e16Ou`p)C7*1yx -Y<A$WA)%u#Tw$-aQy(jaFk(<<VmQb-a}vuJ3M|s4Lm&rObeCW$jFT~mJb@cO@7H04Aiqc6h?EP8B0`l -s8>nF<!>oRqm++H>l%mP?A!dhG!v>4EZ=}p-6>l4+Bp<QNcNwfV5&h_ywhjI$<w*ToR6)xgy`&9EaYr -ogW;U!sn{LuT%e2(OqR|G_NV8$R>2sb)-(a&R&gu6II!WT49vG9bUNWSkpj$R2zL~+2xz6F<E+Zw`Dw -;GFT#fhKb#Jw4wT;kZg1y!*GhO49#1IjCUG0N#&Bb@a@aDWdIxMPn0S4&uRd6qB(~Z=D@fY68;;+CBO -@g(oUnoP|maSTVS5Gm=QmK36Veqy2(1>U@9^T7c+cSRy%eGl%L2is_dv+@Ca!-g%pIobQG?wIeX--9! -S{P*|$gmPD_COc4&1;jx4vMqX<Kjzn@aI*eo6jgRN0!+(`=xR<luLp!p@{Abm`6p<g0M1wz{UXGYo4R -9bT_~Sq7r``+08k^2Vzx;=Uk}|18yaooM>lgXM}2zOJk~JM%xEKHg4pV(=i$@;xt;czMU2Tag95_#n9 -j9&W<N|6ml?>(0(Y>chf8Mi)V)ynBpJR4KdY{r0Y$oLYj5eE%1TmcVg`@hiL3*d4yNd&^-8pnN+-c^X -BwK98=xuvMPoMVw~KrSxJhlWWXbrk51d71egV{5m8yN7}YP~uNaYEMpPd`mzU&V?;4yyMq69ir7f@2R -L@}s9H;|Z^xes~|MBe)r{913AGR4t*#)WtOu)_dXbQp#cu)QIjW{_lfD7;!?)9tk3p<Z8S6%z;m=p}? -c?>dMR`G~H30P4HSbU}Gws~V>JTOfy1KSbG4Xs31JLO=S7Fc21b7eT6Gq<EqI1Pz9))Nn80*J0&w=9; -&KRm&3A>yGqc9CLw;5EQ#CMnt!ZD5OWKj)#Xy`O7*pxaxhIG&CP+j7o|GVkeWM*!OZI6+4HPZuh|1a% -p$OAZf%mZaZNA1Q5_dyg`z4(R=jdwhyqhBY+ubGY`Y;{{*c@oHuN>|LS~UtpK$D4BWD7o9ssMJ+}7>< -)buGeq7Da$ry#<KcodC~ZH`>?;C9XF?hppH0$9iUCf$T{<#p_<sRK^Utss$=NL(!c-Y@3%dHrRL&(kO -;Msx=W@9x3P&kart7=cP~5jvQ%ScLO(-Dr*e+~Q%4YZXNWV!kCF%`e7X7+r<K^4ZT5`7Yh_G#|Zc@px -9c@zB$LW3NZ*{!ha?6V2aO^*G-*bJ-9_kvHnC7lw(jFk-Ue#2)Wj$Atwxa#qbz$v{%i9vX;W3<J=@!+ -}iv7pR`!Er2$)TqtU<PpRu%?>=wI`#?ObFBm@7>DG7l+aTW&G&y^*$J;Sd&`FMLQm9Nt~mN)<ccf{z# -%IDVwSD7<OqN@<}lb{lgjWm3xTsyCikbS(RUD20K+lwRErOD!pTH&k9|Yqi+!MzJpaLvyg8VtYeZ38K -N1<;G(o~wp$%a+gUk(c5_MF8XcdDlO`ZO+;8cvqplTlSnQypr1Nr_NB=PJs%kWJi3T6jsY5z`+f%*jP -L$_IWl!p0qFGPj_E8y|{Q8%(8pN;ex=?1eg*-#9W<c;0f^d%N!wUCePMW$|6V_`qx%8e!x+>w&QeQMk -d;Yb0cTV;lV`c38{k1RLPZhq@1g7q~_Xf|2fbAE)9;AYTWhH){bb~)n7G$kL3<>s_HnoZF#HAc$UE9` -Jn;G3>L}lifKdjKfjil0dwslY#U1&;8=<?mLcs-T@isqMhJuy|6e4&BTR|zvXf-6`1cIQR`O<yPWR&T -D;>l8H8&SIdKiSha*lL9J=Vw8oXC`vJA@`W)WhK#R(q&f<9&jI!^-AcM^Slu^^0dyAuI`NCZaN~O#^( -pcjK;ex8jy5u_2yVT;y7E=gk`9s$r|$0@`-L7|+GSk_7<T5pWMd7qa~OqVc}U8Ze0pFOt<v!LfW-$6+ -sp-T*NrGQTGgVd4q=vu&U{<><caMy_ZVlrE>G|sU+c8M3#HJ9hLu-Ina;rmnf7V{=u%M8I2PH0+u%_K -YqgaYw)L(goON+?lsI5EAosy>jH}y=De>4Sk-<xd;R#-^%!0>|+Ag1tF|k<Zf+0VZcTO&U>oH-|7I=# -Bjps~Tb$J~!A>Q&F%rT!1&%H5xX;M*Py#-R?R;tT^6g6Qf48oagr+T(BbFH?F{77{^*(myO^DotJHH< -qO#vTjCZ}g)w4<40@J?eh{C-n+tcR!|BSm2-rB}`waS)L)6HETRc5E(+qo^Pwfp_GGmiSrVE{=)T2{k -_aQ!$VEHxD0PL<5HR}_jx|Ea>ha{&lG79#C}y{RWS#7RmRI7>t%F}(xgr=))h#<7(LHSFyDxl>*Rj5m -)>k{mZQ*IR%L-n9`2TTGBaBz10<PRoI4yTtX^6M=xlN^In!chjN&?sB`9f)7zyCNU>eMrW2i;?m&e?M -AH_+Vn^0x&H)0nWj>7sGCvo;<-EN1f4lMi|Ui))Vc+BrNsj#P(pcOG4!f4`Sp2q&9T3twVhI@9`CL)h -aWq(J$)Y!|`VD7rDF}$;H&PM&k<0TjP)8g|!u6Fl2qo#^N(<RioQQ#^>cxZ#AkLz<PEU`An=j?8U5-m -xwV6c``uZ%VyIf8~lZCjl$owYVS@hD4DxOo#gt7MhN3!Ue$63+PEU!6Q+z!IW0C+rp8VakK3L;4R^%x -X~ZXF~YaSN!d*nbQJnurz_4g50j(4zK%M>;bS1m^hbVx?ZPr;9#mOvh8f7*;PlIkYm1RbEzrQjkaLXQ -IHq(s)@+A79!KZwH2f!BXcb|x*Ooptyp8COi1COuV*$2K}{iN7IfcfZW4qwzADAG<J|m%DU*}&#gs3- -AH)UHz_XjpJ@JVgs5zQWB-#t-PGfQ*cUF4Q;5xUxDU+3|OJcJ$&piwypy{XnB16{6NS9l&f*p_6@Krk -G`+E#{e^+dn$&IA)9ZgNnY;p_yKta6GN1%)J4SuXctj$n+x{+BxN1b3hlxvk=Y2?~hA2HcFo;2P%Y%) -5Yt4Y58mXKV=!JYYW9mPgQ0s!4xjNigYs&hUAo{>sSUM439H@+XEJE&6uLryrxBpFx4I4b?fB^KQftS -S~@&4Czn0!#q;Aj2@e9?6;0&9IvaQCYHcA+yR>whLt1lI*fzZpfOvNV9*3l&@FfMw^%FT$dL;sn7g5% -Dlt7y{};dM0a<QZ1Kcd$=Gz#)U9sVX{>}TP>0w|CmOX(qK4HrlL4N81r)VlMqblR#VgEjNvgY_d4|=* -T7n9ohUjgY-v32ZasK2lPoFbN{>Nvl)Q3*^dTURa*Oox-ORKClI;_;i=$7M2%>+)x+a@-SsJ?&}Jshb -O1r5VS!zd94;0-GXLBe#es6kJIIBJ5ZqNV#lyoXuc6xlu)#wI;{4TXX5<H>P)uxIA6HSzl=B--gHi=J -t1g6V8@#}Uy7^^UC3=iO#jcAHEBnqSMiw4e|6IEUm1tDPMGo%%hi(8(a0?q56T2kt05ZBrw59_#*U0r -inO%vCt?PTgqXv+#J=dalq_H?($t2jr7OkWYRO<O6`83)Z|Xv>hzpV)}BhdkD-IxE}Ck+Bo7f7kHRSD -!SC9X5MP6sp5ZUr?q)W-&kG}-yra`6Tx;@|M&Q6c)h6c&67vJyi%d9fho^!oi3z4*OTYRCr=@Pvq%OS -Z9w}RQ#t31><&%xu`jwD!uGtIb@kyDXoGXk=6n-mcRBp?=6;L6xy2%?+N|!@dTnVPL9ahV!5?-spix0 -{1xA-NkkpCPJtAOp0m4#!R`Auy$#<vZN}{)QRIBkCiW!4bRBe2Z#-%NHZO$Bc!@6Lj{?g64sK0HauHt -CFL$&=*j<E>VV1?<6I2eGwCc~wq`u<*@T{d_ctE40XMTA-g`a>JAfeWz4u#QCa6TkgdUq$-cZ`#9Gm! -xnJ2tjJ~NDf`dQAvOXqZ?V_74KJRVwhIbc2BQ<_NxOe<=Xz18#+|xRQnAbP94$VOEwNRxR;GeBlo?Ls -@~qzP7bu3rN3ej0&v*Xk<*n7@2h0U!)5RdKN<Bk#ZA#Atx`P+B<>GgEXr4*<2Evj0dxW0daZ7HGXq#h -eCml`;RD8R&u>>-jxX+|+1Zn!i!qEFFIuMB=Nqs7U1p3czi%NG>+TDJf01zvG99Eqd(363YnHik0i#U -jXFK(!MwD3!(-!(55w|wV-qH+f6j@r%@iV8R98UxylC4HaOD5$SLnw5gLiOFk>6M;@8(QN}>9YH%Ln) ->D9H)vbk>FnHQ+OB^KfSc8g_x}h)_u%@+^!_%2)ZZgst}F8L*p=;B_`BTsJ~oxGZ&=EXL?;eZz%5*); -^9BslK0tpN(|0fNRlYoESCPfaR2r`exrrC0Jd<(e2E?9sT#u<J-|iZT=`BM|F2qv+K$ANR4IycW3L4+ -nli@M{(QY$d#4Z#EbAyS4Zn{Fd151xS?SASRmTM_tR8;_7%_a+vBKP8R0EkcHYWX#oW*~Fhh0Zo~-tU -%K6*bGEm&xH$HAv-<CvwQl6*6Jx)W;3Naw@U6~5`$}cJtl}g<Fz*1nDK)A>zIQ|xKz+nmeNUPp(I><; -HoNmuCZZ)HNT)TWk-*cjtkjSp;FoDEeorIY)80hC{FnydBoAv3=8EEWSWcv6Dq$yUVY}Iv!6hoCk20A -aJ>8dYnSBcrUPtCQ#9ZSj2MsTwhmdH0mbj>&vm^_$@xR1+@Y)&+9kEyN~vAFP(KWo>o^0@W)w9W65TU -V~w>B#C5l|P*Czdq)<F<X6EjP|tE?Gg69FWn=Db}qx}IR~h&lsS)|PA^u~9~gaUW(7`uB4X%o%f)p7S -#=??&Tws75cC7d>Q9=v6=WcLjK5C^3?%ceb?i^KXYj~miC5j_*C=<=#<|7*%MPpRbZ*&_)?D)|{<IpF -Y81QzBCu04Id{BH8dr-053omHfZb@U6ApzJ47!WcW~*u#hwN1aeLo!AX4S*nd+Fu(=(Jp-!>2DO(@^< -me4%jBxLc=!qc2LqtgSJgtD%V|7uA(11U|BuXWvyRDmJdaBBFyQeF}@Xcja{5^c`Zk79^V4I}Prxj$s -H{+Fz0J;h>Xu-`EL)&J7Vwzu}iW`s#rth2InABc0ynh<rz^_^YY?YrT-@W~$8Vy=A~w2B@mW!Vj_Y8F -l??k^0rK0H%njBVh_j7yw|_cwxPt1$TFH;mdTHyG`thFWv<7wqY=A)y;K$+Rf=9R7Fdcfz%;*%FtA{S -0r=eo&f_MN>VE2rBsuA6|MVxG%Wf1;siur8yfI+nL1O@`uvJQ4=mi9(T(`-+tbQ_NBK!#Wv?454Ef@f -ini|SJ+yV3wGp?O==Ykwh?<f?a+l(<)Yd%o<UDrK{5GtL4;b*Mh8U0PM12jNd2+sq?ebCgZg2aJQhaO -)bcGmt2-WQO0P|YP*;{z2@4T!{+_pFEh3)nG))IH)bz8A}{kpa6z46*AfNy)-S_)q`Y%7Y#AM+4{^Eo -YgcK!=cO9KQH00008031s8R?AYzKUoL>0J$3g03-ka0B~t=FJE?LZe(wAFLiQkY-wUMFJo_RbaH88FL -Q5WYjZAed94|1Z`(%lJAcK3K~Tw%=(gt+2O=t3<bei<OO2D$Tu}t{iX2%)C@#xgS`mu=_nX-VxqSJYH -vC|byYrsed90tX^~IW{BFoFWm^Es@{wJ*jVHgHChg`Cw$eIEWqEtLDC97(2pUYg7ykN4aDp4!87d6}d -{Ni6*+WnM+Wcyki*(q0tybPMUDDvGuBIeVxsM6qFt?ciQY{5$gpA?kDgNeP}Sgsf^vp|15LsEi4$#+O -7M;iO4OqCWXSLYQ2<O?-JX%#ODc75K8^rK{=TSB>HU?m|baRJ!vtt7bHTjF2yC_n>%)hj<%1snlwKzu -ss32)yZ#hRCQK;l|$*&euRYLF3oqZluw2>M8(D8vbkZW%c6I0)9AEpBhgpyvdMZobmeUGezxGK!+x+h -q$l2{!_JW;CtgC={@lZ?{uu&kl2Vg-Frkb7(%+I|+5kj~E5$F;;OYPomDGjuO>cRFepTC}Jhb6UPB#W -GRf08d7mYTW63lC0HX{*J$a`KS;=~Xmj9-Ob<XDG2D>OSu_OEN{Il90!E^RQ3S5E9%yY*G}@oYH4`P6 -uq7Fdm53H9b8mwQct##hiyQ-CE%OY6=Kv+0jS?^b(V57GBdH@E6-G9|AhJGcz5nL={z_ZM1Cw18I^VZ -vAhK=<dK6al_q)}I5Hfr}C6kpxo5V(YWBr8IA-eXsnLW>R!70c1-r<o&tr?ddcAk;xA@y;McWd~)0jX -l`V9YMC-eCZJjAK@v)j^a2nU-~76n5TxZYY2MgWg>qgjC@}N<EuXicEu=*!b(T45qYXQ(8J=myU>L+u -&BI@|0tMv~JU+K2u#C&d(i_@8jo=%|Lg`#X2&RWZzJhND@j&lzI71$1o)3I|x*L)<?+!Xhs2iN}*Ehj -b3|I*P`wLop@cMQKb=6vx*{vgZ7dR>?KrmD$Dfz-XIuwhaJ(&LNC$Nz0nhzxNsE%!__593Y8qsqBf&V -(A-6os7zjGVV_#&M8RScGg(2J@6jVgf$87o`-rjEm?(~-CbF1(j+*KUJq$x~2c;^B&Tyrw#-onnWFnP -OE-s<G{3iPLyXey;mBBjSMF({(o@m>yZOQ8>E?4dA$YN$|ssGkImk=1w5-Cv5&_EudAl&L@?XW30l^; -Pgs)M{S3zldUxdTHf&Y=8sb94QoU0vz#ZMQH+tb{10k*{%QM1U59*$A?5R!pteioJzXhwtecMa28aOM -XWQ*iaz)|29hw3R8Fyq30Y(#cK(4%qC8QEN0IF?y(Jfi)A1Pg0#S+X!1)Z+oG@k(%{kQq~9M|RbU!kE -6m*5D$KLKE;{yGviqF7>}8Td)Kbzf8SL?_=Vh*vWFev0uh<2z?<D?Qd_2*c<*nt${V36~m<Vg`4KrY9 -!D<oqH^XIz+Eh?423oE(#bwkAFl6n?Si&hGt+bGyOwK0syuuT`D{^^2l@Z>z3fW=M5k!+TbVHVWJfUK -L{MoMNd!xL>a-TxNvkcRSjC)7hVg45Op~4SHYXUo%piU>tS#O@Y59L$$*E{NMWV(mULP$DwrI>&)sdu -L8CsTT~$s?)|#$geKvzL0@V~UPCSFo9g6eGAyu*IQXBm6K&fXp*Z!0hW%HH%HMJ%mmB^VqIJPE&BZ4{ -*0-bw&caJC9#yrJTm4ohdw<m<^Ks7(-oLxcKR9Edwv^b*}0q_kP&uA~Ka%#}T6w$!Ilv;bkeoo=Pn|H -oA?9*uq9&tI$)q3`ZoMj)T#{58`pGnF;r6GV?1}^q{Zd6EipFG*t4t949t}IY5E6XNR>fS5(lCl7!!Z -PA8%)&e)ZlX~`7XK0S;WoY_p3B~mp+JqSGc;0`VV#Uq7Hectq-MnFgf=Va<<$`lr0YF*Eh%Q0noKEtK -%nRcyvzJQC}^JrJQXE`=rA>kp#$L+xX(VK;@IfjL9&SAFL#He?O@@q#tLeyz7KTpKJBHoD5TsrX13kC -H{*wegtk6-S>Lmos^WDEzD6dCGk50Hacf4o9}TNzK08gPs;^Bgu?PuP2)`THw{bPVmRsR}(|=>z=>4u -tz0vdeeny?td_E^!bvK~0SyQnB6pWhY2fo%Q*~%#d=rNFZv1j@3+lyr7;Rq4_;QLy7cKQP&8A$wXq$O -&XhvC0``Ei}0kPF@x>Srr$FcOy=GT$sK{0vg>!I#b}hEIYo~$E}vOB7!~ozZ%qdz#+}>%z$P53c>NxC -+}JP1OBTCZd{I!RIbb>_yq%!DeLU&mgwmt0D~Fv27T#<y>dkF~<8CS3@af|lr`4Fta2V}kNV+!FwY_< -Xj-GGcX=q8bh#-^QIWbpL)VX%8EzO%@JZJk=A5i*`+bPgLC&q@}e9%#B?;yIRw!Na+$AffTQ-8T^jtQ -wKH{X2Stse03poIsp7Z;rwHIi#}yvnDiwG7SEj%|xp#$~S?cXCoIKzw@Fi-Sd?8PQD*t(QXSy?#2Em| ->LTYk(uYwg}^}Uki|V0XXE)?viab?Avi=aMG<hkv4{huY+agVq(MWO;9+H&2P%vso?rQKmYgF<mT7wS -Bbq6^l_*cMbOv0@ERT{9$<R-a$Ilf=5b7~{u0ltzo+RH|8iUhnhu);Q%`^4MFXaehVRV(DX6G{g8GQ* -!)6c1U*BVxia8bfX1a456tV8zgBgtffAoYJ40&;1|9<1<&vUUesBZVB!1UnOg3;Fitewu{?t}~ox%n$ -@PtE{BPg${cK)2If1B`RbZ^J8(56;KqLEO6o@r%Le7NjRqn*>)b^R4ES9X%s=&J~G~ATyxB{{T=+0|X -QR000O897^_9000000ssI200000H~;_uaA|NaUv_0~WN&gWb#iQMX<{=kV{dMBa%o~OUvp(+b#i5Na$ -#<BaBp&SFJE72ZfSI1UoLQY0{~D<0|XQR000O897^_9F3&AZ?hpU~;6wlbH~;_uaA|NaUv_0~WN&gWb -#iQMX<{=kV{dMBa%o~OUvp(+b#i5Na$#<BaBp&SFJftKWNB_^b1ras#T#pH;z;s4zoL)RYCy*j$ZImA -%jt+Q6SM>nCX*elR>+tp_+o6IA9?Jrzp8Gx-R%cBv%9*{Xa;xJyQ`|JU(IH-vE11q*?XJVp(GAzNUZ4 -1hyNmvtZjEgO!Bhxpl=<!){b~vvV|X!?YSW_q1%EVk?BSu*#_ReVNfd$=rS<f(D#C<OO`uI9zD|`I~q -`8GrE4@J=+^fBIt9xmyZs8rVbg*$Iw|yA*93vY#N5tjcn6#-WaZyU{*-f!OsQ&zI^~>KcG?cMjit%WJ -0`n!4rA0qg}VbZD4sDCZI{yCJ+cVc1SnmnFb+{M#YgO1KN5q@UdO;U^@=E@!ZXaka(dLy!oJjW3K}<c -<YjZOQ`DwdoK>jhOQ$d?!5p_;J&l>Kqeq-$Nb%PAAvTSCNOP>HOFC>jJyDZHzN{IGxXdJhhYMQJ1=%N -WKEf}V9J0~Wev~lYwbllvVJ3R;DA79A3~7JqApqzWQPtR?}zY9qe0-0=J{`d{kV%r%W9L;UjO1F{BxN -pN&fi)KmYx*hTmP6M*re?a~kaJkQoW&!(m>dnPCLzrUPC<DH_k(nZYCNpp>TjMtm?UT6G<nwu=TZ87& -KB;HCyrp|_1*aNJR1GYmb;Hi0JDcvidzM=){B$<}tjTU$6dO(Vf*wmXa*Fxyb@Js2wN7u{^wy%;SUMu -E+IrvpHi6K_x!(e2oKn{(mRfCMuT^B;(n4wJWo(PMA%f67$!<F#XlyAA;l0`luPg2oUV*#L0SK&KNJ= -#YYOfr<?}BrYbTWbVtt1q~b}CgZ-l^Y#eKD5Y9~$+mIe0&DIK8xKs#IRA%Q5w;-tt>-|@p_<@38=J*V -;sF?|<{BJ`>BW7)^&$|Pi-LpVXQQ2Tg*ymHbUkiBijl!plvE2)3>KCUz61lC#cNLGZX(C6PK?=T`7l` -MWNeW6V)ku3)Q6-wFyOn{ArIr_?d*O@0AewiF29r6hzzFR$<O2IutW4;<_q00$ZWyLjqm1@u@3FysW! -PEj;CMA4d6~^OEMYXjh8@pIb%!{a%0^<f_M5tyM@oe&3H0ie&^#h8ZW0vdo){+0htdL%dvJp87#>Bel -edJI*2g@($n#Dv;a=}ojzT5fitub{TqA`<90BaAUj5Ha1WX+P*$SN=HD0NueVEbJDUu3XuQ!u!okf%= -j=d1Z88|&b;xjVH~6YEtQk<^dLk&7lsw$(*o=G!@K;-oXH!&3n@yJs`0Rkji)D)bFgElK87#&Ih|JYo -%zzD=7_erH5a3RAP6^GgjuL?2_r0O3G7a^?1ZWyaKt|{`nlSg^ltEUjZ5%<$U#*C}N6!Es3_S;;X2ri -7jilXo%m}jMp5rC+RMOYtIczwY@Nv>c_fu{8eXjG*`D{F0>I?p1t=69Bq`%)HDt=>@TKVG3cB8XX@!@ -#xqxc=#ztdGDzG4L~mI0qVdxP}avdG;yf;6AVy@fe;l}s584%O{;ebag}9|1J9Uj-yg4k2B!S+-$sQ) -6_)w=kmnR-63only)I0I}Wt!uT@`GG^#{5O_hWIdfs|+?&?Sz;qGDKK9W~v)yQjneI9x4S*|XZnb~y{ -U-XsDq9bLqS$w6Yj653P`@MQ$!_R7cGPNio9%WR#Z<8VNm~70hg`K~`5<VRY^(|Ya3Mj$Ur4{#y<)k? -r7tvKML;TZ2NMwaDeV3fHdEZ6NK57ja(5IFe(nF(X276uV?(!4f0&z<wQ-!5YwjWEg34al@2&cmE8mQ -EiKO7H69B~G09_2{PY%9?B!{_l4FiT5_Q~~LT!NScObO!mFaLp_&gPHc?Mo`?-^q>rNQ^jOH4(LTu5G -cxrr(EBD<Utf8sikmCZ-~NCs-1lHI1NTp(ur8uBk(DvgC-}6f8dy|GMTw(Z6hGGT|R4`gPt6DF}5!T8 -be1F*9Xb=8YqTfGVmo{-}y(#yIETfCrTIGF?7MF8m>-0QDTqc5FOaNV|guThSnJz3XKVCj!t{i~5mZl -JU=?sig!6&Vh*<;9D@hw!>#rbd)Ce7t^gnrk+dDhgi94Lt%L>xf1so(FOBW^Tc3LdNSdpPeuWd!4fn) -5n$b|XiJ-#kT^6ipd&0edAU<$qXIN}>N&(vMUdDQD4~KkkSeK(jCtB@Xrr;ap|7j~a~(7oQ0BOgx(mf -Ay5V)26rpcuf_q-4xiE!R+Xg{kzNt-jab&I?TGBJ*B^wTr($4)zX<9<UEw+q@Tt+5-(zbwPa4qJE7H? -~#WKb?yX5<ANAf?op83q)GP}^UNsiKjnn<s^B?Nsr6FK=xNBjmeTV>@S$JdoViRxDJICGAN$YLItsAb -*8bR{ohDhxukYF)f9{5YZ?Ud|SwHQO?c+s*O<kYeWOrbYSJPhjowSMpEY(ygD7#tb4q{rD61TfIMO*v -HptxjvVtb%#+E%fa-G-0|b~WS^+HdLA_wRl`M_PJn$mV@*IVWG0|)v)=5TeM>OB#!LsQ!I-mulwy?UN -QE(|672&X%b_s46J5h-VS?|n8)S_uJT?|~h7o<*j7RVYCgR<oUCoK0h8tIIf=0If#y0B#AMcy^}HO<^ -<jCG`@G_<ltVV#0wwGYAw|B|4pe5aJoK@U=iN)A*cm8F9O>9<3c!j&vHy+})q0=N`}Uuneipkm@8hf< -V`m&m3?ULqXpGAhE?;Q|J%%Rm9GLt9c^3n={iU`IRjJcW@uKXfwZJZQ@t!AzV&syr+gtkMe-6-XSGM3 -9h8lBiI^8=%=Fdj~NM>k}Sz3VY#xoitUJ@GmDLi;%{1wQFTYl=P`e8OaQ<gr91r@?g$pmFg%wC{LZh6 -nTJCC|5yUoAMTU;mKRXdQ-F{#oHkeNn0r&Rcf1)^*!nhVQrFAPi0!oEkUirZT_=n^iSVCfhZNz4`pM8 -aiyfjWI@f%D0VI8=gB5TD+`<a6rKfAN1E{Y4n(^xh(3T6v_Lgg;}H3bDDH%`OSp&yv#K%9?9q6JOha{ -0<uaxttK3mU&6`jmczmcC_?*%pm-}<<)4)mhZA$qjgle*_$~ZaRnb(x^d|#f(qYUC`=RucE51K#AeIg -qilSL+6SFF^fj(CFNd*y;;q~75JLvIghVhUx}pX3V?!8&5xn(ijtnNJ7U7g=RUby#2!y-&H4P%a9=$k -yS{;`T2PfYYrbf#!JOy9~?`>X3%oa2oH|xF}1u7x^0PU})7)u9|L5sSe7MRWpiU#kpNsa+a)rQVq%{w -{l5phNtf0*2G^Uzq%D)8q7KN?{bE6(f^<){Fp$0r4`@f1wUv``shXM^p+#miK?8q<rdA;eYZSfSL0i9 -e({5b6=V*Xu9|7B<Oho;oS4`yO)dLndqpM2Q_0mStQjN()WEf%Jdo;zFkjLOwucI!gY^EGICy-7B8BB -LRa8MoDb^NBe>R=CP#MZ16o*J`$rVN_PqVfZUzM6p^I|uu5~zY_83lQb&W-_UaUVns_K=@2fLekGV(- -{B0e5H1)g(-+mW9ezjvV~*)@LV|6{L;Ns@PYVOLEJBTRL|td#6WAYX$ajv9FS?TV|_C>&`wVkU%J}v5 -VAxP!99;&y>S_t&~GKzs->uOy*NT>d10T&4@>7l}Lj)$+_krN^ThCjyL~K(sGS>c${wY)9BNGq#(W-m -TeOM|F`&*EfVRgeC3eArJp5}oph?AMqM6MI<b+yiWHR-9JQfxhcMx<G*oVRrNB}{d3sDC#a9)Wbna7Z -EFcw5;|gsmigX@Y5x-BUx^y%$2M_djff?o;qHDXW^n6>U&>_ug8qH*zs)8juEJ^JCBkW{+!K%SSEq6p -8*?amo)|ESH*G3D9_Z@R52+97;ZwFEGM;2+^lpsLf&#jY>GvPQH7rft4!Jz!e<rs_Or!NH*K0?yIdPy -=mI(-*6&hz&b<Y~LM3<ok<1r4lX_^){s<V=?xUlyc0D3?kzlSwFDQ=lq~mYk}VnUmFHf5^U)D6$glzD -YSAZsC`lm*mgmvOOuK#5_c<@+7Pj2_&CT_c7Y##88d_k6>05)m2zGZxJoJP%VZ6RW`D?rcsWU9*Z10o -T`dF^)^j*cyg?-#HGq_qm)CacTo<yUqL@*^yM?5qXq)=GRFCFQ4W^Ku{2piuYT(1*LnWrfhrjc_1e%u -1Ir@Giij%sxF*TnruQlIrwJ{%%d+QgVjWUp;QQ3wl=(%DNWPdpPOjEm&9E@L7S{jyg~$=qx;aW<F&WF -&{Tbh5Ik}Wn&CK;AImVD~O(=4?+ezM1sQXkJSp5~L$W>;MCq_@@ow{25iWH7>JbF{FHs^9m?~$PL9^e -nipwd!`?t-%<c}q!>)m|ka(-1BNmG5iHRo;=rEf8|kN3vpXsY~{D<yC!to7Hx0d@^IRS7QAA0AAK_SP -m?FfQg2$-C7=d;*(ugXa5ff2lA5lKlql+w4xBNRLf84Om?R^^i7Mh$7iZ)j8yujuA6dTKc4cn-u-fPC -0R=}w|cL=t6s0y@AWd_#WL$JP(hHc7CgUUb_3b|Y33R<c%}iKfP)sj3|4FeoI-QI(0T@~r@VDJF+^)0 -TF;BE*!-#3jFhjE1*M_Bfg~Fbawp!QPaZ!IKqUR{8KKYA#ryRUKD+yX&l7~g%nWu^<b$&IdxiEp^EKN -sx+b4Lf6kQG92+d1-22S5hask>xQm<GiduYgV6NX8^uIB6Ey_8j{nEz6*nI}y-Z1=<ZV=9*OrCyX8TL -~1(e&}vgb#B8$b}Cr{5bHvkbdEB)Ly_la+JWwwsx@Zke8ip?Gj=(zRLtExNE%WmI*MVE^Zc_mG#}j;8 -4rn+DyRnGLQvj&oObHXRRaCc3@xu{Gtqe1Vy@&1H3E)oZ)zj+wPyZWoZzo+gBeyL&Qm45BO&E24=ITr -1MPbWGCgDuK@(mHWt_y1%RnH^&)%w#sT`51%SaC-IJqV%7XoZJM<dvV`XEGK%Zn1>_KYM@mcB^yL{Uz -VJmBeWc63y4roHLf1c|FiNCWVLh$U%dfmJ1$<D&_*cn3taVkMfy<Dekw_7ia@RG=#9fHqWI}UO#gWxG -!deZ|3mcyK$=V0zb8fYeji{l7g&SWDzK!QRz-QUqYIF&QJg-MzNUdSfNa+v1reY`lAkUQ^7Q0SY%W(J -U3$9qWtBwwP|HyXfDkN681=)e4Q)w`1Vr=B=5iy+10T>tU(;`H)N0>Mo)us@qkc>kH?lhDt7p_I;Py1 -mA>Rw4J<cs58LDBsccZG3XI!!LYc8V3-}ywI}}1pdy%#P_aA{)f~GfEFZ*T@?A@my?qXz99E}Jd*aoR -$a^6pC}KEPr_s_Iq6?q^kDcuhM}|KELKdW6`svezAX<Kb){>=TOI#31}l6ixf<xk>h$7r^;NrD8MlM8 -t8+|vuUhX^%ONd}qMY>(^XZ>n2_(Q5d~Oc$DMuMq^U-bx@b|R0n$ITR`)9oi1yvh-uHtqK@hU~EV~k$ -!^Qao3L@PkhkB^deqvb~F{MaZJQLbw9NiceYnoJV-{`p~BCD57bmp8Q#66mx17?!wMjs<9acFfI+D4% -Nc5r(Stu5$SP*<l|k8tPLm1YxL*d<}mcmIIgjs#Z<8AoSS*%0=Mglm+C)QL+i7lrJhYf_U#MFeN4en9 -~9s4PdTvlrBo4RG9O|{{T=+0|XQR000O897^_9t}3UzSrGsLVm1H(IRF3vaA|NaUv_0~WN&gWb#iQMX -<{=kV{dMBa%o~OUvp(+b#i5Na$#<BaBp&SFKlmjUu<P|Wo#~RdDR<jZ`-)}yMG1G#i8=e71Ea-iU8S= -rs-X<wkhIt#n3ARTBc)NWKl;-alK*xea{Oik+R*U-M%b98;K$xKJRa2#^dqmwcb1`)txHEN|m)TRxGs -<%}R-x%3GtZjjU{~O(W(-wJ53^n~p};D`l0CMu~UZW~D2!Y^%H}bY)?sZ0Jj+8?h*i%A0a4j4EZL7NX -GvdR5%4+^(nZF6?ODx-}|S)=IO*i8rdj$!mPxXmgti*mf(5Dlgjw>@GGdT`Dn$tye-XMd>LSooS<9>9 -$%(#7V3HCLk{4T;o2~0!G#vHd)I`-l(;z8iFlyUFFIE5k&<%7gntGqAk@3QIq9b+eW}#pb02qV2#-#W -WZ3~>7oN%DtT*Zr`qVd0@*f_H9Xg*06x%{)~aP&3JJK`M#9D+bChxH$@M~|qcI4oShEzQRX;!TZ+Ww= -mGy5$qfDc9*$wFK$teG1ZP`6Grp+7w)~I#8EP&k6(&)8Fy}X6{e)j4N1l&wT%-$(0O3`dbqX)o7V4G1 -lZ7GdVpKF7>2N}R95KIbiW8_@CJAWf!y%fkr5T2wFkmaHTdNX**&d#r{XW7-cI01lZuGcjnmy87b%*T -)L=f(Li7jFg5yLfeRc6xnIqrX*2`qN)0zg6^h{`Te0jPVp9zP!9Xef@eg8I48@wG>&t%n+jtsn6!yM% -je^Zwzo@a!ebeAn^Au#ht1E>3+gg<VKNffl)7svia|z{DPQSkcI&h;&1ELHcXI$FINim2AMS9k|N}?E -R{*4jg4wrQw>CrGSo9dfH{OegGsk%uTINS=d#h}rCQ3i1X+dzl&T6TCO8py3bJu9Pv%k6)+I2Be;r^@ -3CfM~b$){9_PnZ4|8-uFa{wy39b&43oo(??1sZ|4x{XIP<$?Hs{==ylyN+O;xK&%W$U9lK%97rZnJZ! -CS_y3yp4T+>L?q3}qfhJ&X{Or^XE+!%=kb9#z%UPJM_SilwO7E^pN5o8lAmx<2ch5Sn_%!V$C-mF(=G -cB#p&icGNS?Bz8@MOIQ_y#NL7#6-_-UDjNpaLZ|(h8{T;U-tPAuQ)H|uS*&Kc!P+F&~-~dr`&?!XLJt -O;IUBR%y_Cm&de?!hQSO$V+51!^(zLF-ZJIuTW@T?u-F%B%a4@I*&<ALv#A?_0JmmNK>VW{U7gdzC-{ -`%E(&(1)z7|V{qgcI`_)@0HcxlKyj+|NVoW%|HPylERbFV!hR?!`bG-9rkr;7S%&p+mrUn9gRe&y4{q -##BZYCFDH=X)Tcs5X4(uDH?&ue;n#Of8LQ3;mBfgSob3ORx#nvQT*z(XTCLRIdl=uE*JxE4U>NTq<bo -sl&vup$I%7``6S*@T0<;K#_ua6gK{25Rk^h1hj9-QT_U6-YxIgB`xt1a*3KGn;v|~UV+7yh#s3XfJAy -kP1}C@Ex>nVK+)2XBnL3nWkW0|nvb+yir;|wtMSady-G~=3eol{=FG(xZaVVgD!ub+-nA{`D{0cRFFT -==!j>V65EPfP;nofph4ikcWz!`X>v$iTQQBBD45A2+kA52ZW=ULugQexEmQ<oE^;yv1ImuI6QDa6>Jf -~hEZUwZ!sCKClF^_7NL3vv99wjeiM>V|6(O5}Zgf_W$nU^-c<&#{#g`kAyD=JHt`cxP!FCT{A7-d$e2 -y*|H6I{(dUCNAhY8V`EzUsU5<_B$|uPEZ33reF5Ofhz_Laa#g$=%jj0nYYWO3PTM$XeT}Xnmj&w@+{C -7Wx?~@2m9EY?V!)lrvky>hnSuqM-+Mi#%7;ix|}&>X78Qrn#!@WNX7hSkSqnRpc4?Im=fx{ti=6ec6J -N-Azdg^{c+nYA3YyO7Q-{V#Xtyy@+_-#M*5u4|5IoFz}+k_Vaf^aHZ-A?0@qDJ%-bT`5oWW^%IFQnu? -`Lr08^o6E%*cRrqO``MbKe7PdPaeN5_E<;7%hS{%A_p5$|ih6duli?IeIVSiIjTrx}huqKBYB%3Ze&y -Zt@RW3UOY`I3u^XM0-QF3t=D26eaZiD<{;p1=;Bc6>RTHL_`~bA9Y@I_AUz+BLA@gp<hAx+I+Rbucqw -6#Cp0^@E%+7g)7gC-5)hviML5N*^(U!sXPvz)~9g=2}95heEX6M=2_F_QD0XZUv_^=qhv27D%0Zp$;Z -dEI8@Ki2^dzqKZA{17HR0Q({qu>e(0Z4=rSNz<=eNMmW7E2AI^pq@b0h%vCZU|7L!xpgf0%YV2eRby> -!worsUUSED{iI{*2ZGeDp=U!^xjw{`M(GNHghW5|)Hp^z@Iv(bRp3z$oQKY5u`^UCiV*u<VV`c@00F; -{`9#j?mL*x6d;@S+x;h+eecnk9Zqh8Sdr-<uguLKgH`f0+kgOuly0WfTo^mzoVIo;|GgOrs{z$=>cv2 -V#Hj=oTN!9>0NtAx=a8*Gs-H$gm-k>}-9XmW)R{S{x&B*eklV2RZVs+?cmTxnQC>KkFoV5SQK5xzi#h -?i*-{GUP5h?um%HK1-w63$dNe73dic^s#Z?&Ve#a2o1)_G=`)r$T&B$Y7pE)vsVP}bx~C3Aa;8!G%nr -%<EBAr8NjkD-2&ebqx6s^$CNUI1}S^g!0BiCcu`og8m^z>=y0Xj@n4%(5e4Fg;zi##!sH-yTCrnSpTU -D+wS7?4AqPZI7cY}2=h-2$pGRn781}#eI*J8m{LS|JX@R`Q!MGPC7jE+ZkPK{~YlB^`TeYQNnG7hoj% -ty-tBksp;*HFOU(M>bQ52UUDEosDu>t?WQN<`CLzdR{m%FtswKqVc)uX0>x~PVH0~RkRYYcb9mcP#qZ -R0Hlok)r%!9?QLD|v?&qWV2*C@ZYaZ<RYgVcr2l5Ek(GZ*C%r$oFN?BnB;+sXNob%o0a1XC6R!36_E? -8tH@Nek&$2?z}48kh5bXyjl69m5ypoEa-F!&ucjQ(NzO$EjH^1NzVHUTuIYbAg*#d4R>OP50pdQX^7) -~KiTn#MdLuNm4q!=sOXeYuIpQinBgjX1^rf)GDSX+QYtQ>dQx&Rb+9(-A&BcnyCbNsMcFUwNo27jm<r -q7ZY!!2QU{K;)6duxWr+fN4z8$LKpn-=8uS5PL4=e|x-1M81$0o8D|XPV1|ZQ=nD4dlQEhZXdbJAliR -mFS=s*GhZj=Kj?JeaE&yFIXsmrc$#N`twLff?Eq2$>Sn{`LlNtZc3{#jL&Ifko09zXvy*;~_f2J|%u& -yPP%5aTya<0*|6P~tw~8W*M0%jKjycT3l|3w%yofc0$2NTY}<d`f=@c_$H&X-D29br^N1kNPmFH(hLV -suFR(XsjxiX|(siX$JP?+@<BZY5%n0xk5w{pEr4~PNp4$r{WdplH$s78Yi+If<K(X|91*&#;GIyS9wR -Cg^*c9G*8hGJx^*X?ywiV^!_4j+`GWgFO5XtV?e3pBEtw_Ia5W!B>fsB{6HOtN7UfVZ~?Fez*tO0*=- -qACC<OBKTve#9OeUbu;t3Qp1Aaov&4=&<S;mQSr~v!EqKZYd^6sK(gNFSFpotIMnO)*Poj){&?gUzAS -l;dLDfO)$GEA}l|<B6rw<t1gsw?9P)o*UKAvDdbQ#tl8{(`h4wg_r%0;rb)aYm3>&z5??vtd47_cUXB -Yhe-?5TaF2J8*1UouQwK)EjHL_Ws4#|Cts684=Uf(;5jzjE#ZF=y*Qy>A=xu;3^5ulm64RM1DTNFQ}6 -eJCth(n41cv5R2TegGQ)@X-2WSJw2y%Z_M`yL_-L<&E7B74#kK%E&dID`OhyE{LE#*DC|Qy4$e@TZlL -5O_Ks(;10pKAQ?bDqM^k#VCa%UxlRbo6^+<EI<VuacyUlsJrJi|gT}QV?-YaycUy$QHW~xb*(kGCi^A -tKyxu6hbO8qEZf8&srQ0=KqM$xEM!MkZy^3>$0U(z^RfD>Uf<24O7hbnY)ncWg-~pw;)8OOIX)vgcsj -@^%-9j$OJ*gjt=8=O*>}@;~OR(>Z6Jn-EeT4#&lg}t{h{-o93BgX{;+Kx6zOWM&ucyrg0*p4C@+Omg( -82=)92(x1=@0G)WpuH>o(q5W)Q_03?m0dqB@JA0DybabGgFnt;R5XYH}5_E?$$e}Wq?7*-g};L#VYXi -BD?p^VK`61NEfnf5=Hd9EMOWpXt}cM9mh`?r-t`mUc;(58q&Qpxt%M%U*b-`s&+kxDhlid@q;SvSGEl -7n}Wg0lA!6O!<VkHbq>N+EOdBQQ32$uTF|d)Z@~XlMq?v<t)2IaD|xJzoErdl(H7KzBx9m#g!%+Te@G -A~B^>nk^@T5Qxiw<J)imnH73B}YQp14q;Y}P!svzc&Z^8((migt3%MWyaSnG?eZUKv!KnJR=fNz#&P= -(3?LoK)f^G)x#7UN_GD-;Y#zQSPIpqPdXXI-%WMAkDx37tfKmUwPRXO0W4EPFw|v{;l|4{5o?+NQXiP -4Eb;>5pT8pcRGN%7WtcaeWElOHpl4EP!H{D01-dI@6GP%9Ai;uQ-5vYC~Ehmd`k)t#w)C;D8-M;PxAN -tGZN^w2(9h8|1D=pi}(dg46?XF7eJ~<*GzflPEKZ+67MWx=4ctr50oW4jSH$``}<v8CgT50+O46m{2$ -N^+URd^FY+5xI@fgY0QF4yk!X#6KbB~PV=GqgrOYI+9*?@u$eb4IxAWN_4hI;NV`ymz=qNRgjc{tsLb -U2*n#GPTLQ6{UHh=F<PjZ|M4y(2)|PBm1+W}ZvbN;{9$blT4W@9*Nml`IrQ8fM88RZw9QJ9EYk$CQ4{ -dPK#(~@6;s?eR9gB0Kdp%NLxDXb{!rz>EFvKD9Q;)QHMCx+TM^UfIL4qJqYp|txQ35dXS(vTx{&d}v@ -$$_KuPMH=3p+D@E_JGmT64aFjPp05`BDNB2{zwlSJ(){bgBU5D!eoC8&XGY!TWYK-fZ@IMr||j(WM4l -JG3C71jFnv1NSlrEc$*$mRky`exv9NRLmhHQLJ)@arlT=3#q?=G|~f-Lth{)Q@MKJ00%uq7OjW_ccnI -27+mq)ALD(kOzvP0a;!e9fD{(9ig=UVlbS983g#0MQOb?6%DV-H={7lO?rHwfD(h~J9OIEd=RW#=^Iy -R)1kk|8M|}ml?~IO+LVj%C9$bG&;Ld7#q7HI(d!VBo*O2(Lw@Krt2X_d2hV7nQ^}-4H`tj(~phFWP7- -JE?9qig15V%VtWAM@BohFyz%#XdiDQ+<D46&bLZnMEP0<ADOz;S}a^2RrV{m&N<aXNLYb)6hdA|-Rk` -I?Cj)+7qF^E~8-v5vAs@7d!(gPCv6{eRv!3@-<Ef3uKsUVShhKORVDc+5!o7=<FPOfauRF5*UL%G7#* -+CxnTfaWTft{3iW6EO##+_Dq*T7;pNj{VR{Tj!tGUr~;ov(P|%Q^7S+Py$ml4W{g`mymrB3;zr59aLf -fi-phi>sj{h>hk*X?DBQ?_w%dS#pT->sN26d$%puL_hfu5lB213;v`IiPjT?+R2=z10Ce}*4L*(rQ$P -G99)9A6pTh9JeGNv&k~O8x+6rrhD$8XiORSZ_UE?2^49c$;xB#^QfC`!j+|99jkIcjLk>QB5)4>%$Ww -N#Weaa7HV|$tL(e3-mwMO9;JW{rV0<(lQN1u<L(3gd>xheS0PmepzczQ%L*4AAnYx5?p!Df>2UtYWzP -X|D!2S80ckgQad`@;x$^M{#8bB0FC?4pey|2g=$XYUuk(jUkSmQHtgGxgg}#GmjntgCtX=s!?P0|XQR -000O897^_9000000ssI200000C;$KeaA|NaUv_0~WN&gWb#iQMX<{=kaA9L>VP|D?FJE72ZfSI1UoLQ -Y0{~D<0|XQR000O897^_9T$CBCCLsU-X@>v+BLDyZaA|NaUv_0~WN&gWb#iQMX<{=kaA9L>VP|D?FLP -;lE^v9pJ^ORpHj}^WufQqOsgx?b#7=v6nYvTQaT?v{*U3)PUcL-XiIBybB2_+YtKWS8`|Se&!KY+7cj -w7OB(S?!EOr-*2Z3keC|<3T;AWAD!E7k@UcP$yV(;bNOYv4le|XCv5*IR)Ng7AJXT4|ek}QKX4dO@ys -aVKFPS@fl@uE!nBQZ~;6!Bcl7G82AM<R=b7p=vL@I^e$ydVmq8{vr=lnUekHd_FpG@fVoULpb97hami -v%mw2!jEV9Qbw7VVTtn~l&KhG3n}`S3Zp-yVtna^Ko8i(T%9TIgKQD!nMh=sCBY1-i~wjB=05VFv%_E -+s4@_p#E}9yAe^UA59D?vma!kq@mEsiR{1mx(#1&l0TQ3)86>8dIFk`#L0$eePDCn0WDRHpz&+Kt;E< -rOoD~W-Q=&>S<$e(_%e4uRr+J=4P^=^@KL*iJsei~>hAD_JkHav&#|qBk$Pchy=^JXkE6DYx@tve9ak -EEp1{^aV*cPjziB(p*@WN0`rIH*J4RZEMwMvkOGy^>dyily-gbJ<J)?p?-9E;2I_g9||C&yxZDJ~}Gz -mDG>zZ3n#OL*^(#HaDqhx3nD0w5-bXIH<A^Y`NL?050E@!7kPIR5Qoa(sCy&L==@e0p&*K8Dos+0n_z -cjL2P#9P2TJHHYq<J0jKki9ymA{DXm@g<TwJ)RtWfY-yf<CF2#?;{}fetdO?bl;y(#G$x2oLr5MKAs# --#Kp(S#rfqiu<#BDpN-GnPoSLR)8n%%2g-#sar`U1h|3R$Cns1KP&@nxb(kQR;^_S1_sRH|4_D&D`N_ -LuNPK$?+#S9>Ip)HkYDXuB<I|CNcX)dE%Q0b{10Ad(0y2-{(}!bB#4-=z-_h0h{0u8|bbfX<f!7h#b# -i5pKaDSsN8)fYzC^LSpPZj!HBqpDb53Lc^X!=EpwP>010eYR@$%S^6z`4?Pk`DbB6CGGxYO(P`~8nu5 -Q4^mPRv0m?h|+>J@h4Lf(MqEqgsGhS%c|CVvqE09}s)Jc>)UWy7N5C6Y07lSfU<*zNT>q#^v&Rucy-I -c{I!7I81dy0Dh{J5Q8dvS)AzibZxS-^-89_p6hx!@R2}i2clnddE&>ZO8R+4{5o-R^HU$t?jRpDobg^ -cuYPb|LJdF~A5%HcL#jN$tfA&!l1icA!B@=Z;55-p&_bNv#qWDS0yuLt$sn4?pI?3v2M1ygviIAw_c8 -l*WB!}HFXE>IG1wo8*FzB5Tma~so`64eR?&@15&+x*ypM*I6Mz@Lkx7vS2`XzAf>$mw@ImEd@*$%P<R -eQcZ5l*gvev27b%wIWjMKy4F310UtXN)p4{7k1?8z{d&Ad&$RB~Duiz1Apn|40Av7IB#x`M|#-+2_Eh -BokyHR6Kj#PTZiGHBbS1HLZFQtUtm{Xe`ruRr7(;NLUxpRC<pc<-%K>_bwqzXznV)G<(nET9g9!7K6O -k7EDTP`nVYn8QLWOmv)m3*I>f*E|g+`uc?jjvOTz&j%y|@h=DZ{bKE=_~>TCqDYdC_-znVcVTgif4-c -9^@S3YdH{XaypoN7i3HP(gkrU4^0Q=J1_mmF-v+~>Nt6#Wxyr;jXz3jKrsE`ulQPOPkkAW|P$_YvjOu -b?T0gwriq;SN6<WRw#c$ePUNcqlOYAqoVCv-H;k0i`S90cJz8l7#FB4mpD_KzPSsY1l5+rEP_g#o?2I -$2`80RQ)gC{)ntAP*3QS9%~XP~nrz97MIkqWsX_|?RjI~M|$Jd}gTTgrm^m^tUXk!n)((b!RQs_^FE| -0n?zCIiZuDb&@(U8dW!^nz@fD5Re;^9%69D(9Yff34ribe5ELk97`$!b~aMNLbvG7$MQYG^io|^ens^ -S)c(~F!Ys$2{B(DW@y7m!iCp3ypw~WMH<AL5l5q<oRLBtlF3DP@hupy>!w(i)2{ItTS4#y|2(vFk>7+ -6Dnd{Q-IDO`;=oU_?^BXSup0=5!8cZ@Byt(w86Y1;7ObETb1JqPYSuvm*y*`eC2EFun5hu8!SYssZAp -!ql4W4p?-W8t|CH6KXv^+Kgf<CbOc2TY15|vwO>^j&2Nq4{eCQY|<vQ5Cmz4&TQQk<r?y4|TX^fpr5& -|8?JbB;YLM%Y2hNX2{k18%w$*p2~n#!=Ew%B+^SomU5Qn($8d*_8Y<|{%2R~s`?s_A!8%7{^iRjw(uY -^<uWx$EQ?>N~f#TWVvA)P^?Zx*BJuUX^C+3|oqRkkmUWtR!~)pZf{}1{3gzMZxoz3fy-9h)?WaFl56w -9Ncj6OVm);)25StsmhJWFjEi*=Tl-A+(inb%Fq{po+JT9z5!cUjU@8=rEF%#R3B$)s03tf{D3J~4A~y -1o7ZMjH0ADWjaYK0MY_uJx~&qSny7Q*w2=oOUFUWn%?Cj>FoJ(|U(kT5i>g;clUA@>yO^e0Z?2GmXp? -G{-;IvUc%N2RrXiIPXfL$1%-ms5WIW1c@Nf!X7hbmD_(NKOfR0S)_fRYW5c;HSp@J-oL}C+g1rH9|P) -g%Qh^KMhLB$*nQ=)#D%LSxRVi<+J^2PDR{>wcv4<d}l5S;@v7{X`TVy8GUvV_7h#3pJO;hVv#^F2>cg -(38-K}thgHSVIh4u;z|6>2kDsD%=%+Y#<mpvo|}QG6e%Z1f`k_@`AG2A5W|(bUyQJcog4h?G*RK=gV# -9X+3cY0%YDnV$<*zY~3@5C3ai7@T5>7DE`Rl^D{X^&a$bB^700yEd0GB5kUAJ}@u4-t}V30<gHNa?D| -Ui4P3^8@YfO6{kkCuf$Ddj4>z*BdhM_)ZMCCYLRYxI~A>>VO8|`H@R+zI}<NRrC@(R*@HgWt{N}-F(` -HvX95e+Zpm(ZE2u)0$Jd1Bi)UU+bJiYI49PUs)f(75vXZ6Xnw`ChZ7kszHL~;}NP`GxRA+KP=4-{vm7 -zJ4h5ws^#d^O(fJ$RbuvK`Mrn)MFu85^%<3Z}KyxFaH)6oLj$>ZOIX=F(b+8XdYF@pQLsc9&sNIJz_! -zTcfQq5IEU$Ka3CLE**t~*I^8XV0+aQBju12@RZk?%XN1#l^`Pk8;kHT<_3RFzzKsfnUnT8&~%v~Gwo -Eu}<IoL1_T$E0eRESo>`Ai))tz!ofu#B^!Wx0&tW4)t8#0Y(n})|#y@wau>GOCY&4&XbuMZBTWPUW$I -oOHEo)=~*JZOqOjC+oQ$NmkbxcoQh$~2k>y!uB>bUWMRFYYodjN=6FL71FW!wOlq9TWonO9tdIl~$+= -)p4^D!@cdc5chu4iy!90p*=_R))9@TEhT~pvs$d#DCKf9#)&ha@8T}m%OjQ^XI;iwUR9)wU^g4grm_% -h8Q9UKZ}6fo+knO32v3^w<`m((biUn-FHE0JsAI*3+z#)CD*DUaQ3wiEB(HE{gUN(~B)8pwfjYr|Q3t -8Sqw0Q_ko0oE|P_Yo*gi~l(_FCM$mr_K1q)3gIW&NC$+2xFHJs}cnWkylAPlWA+^6EC`v8^r%$fcRmP -&Tx0CjJJWdnNjVlA?0i8t0;p?A^c9Q0T-FinrNG~p|%RAi%>qef97#U=&N8QSyY&g51iG4ZCho<LR&C -CrZRaK%&2MX=UE(vlBRWASw-*@7;I=%{k$bA^QV!Ew=K{gzMfk2{|Yvkmjb|_O_~KTF0OY-7DR_PszB -PWHN8?ZUL~&VdN;w&;%FY+tZ<2s-02a$U+{YaLQw}x{H`~h^+%0aEy)gI=p`w8;ZLvm?GKeL)oC?XW3 -^7CQj68v#pfnCf4X#UB6el)jKA>XU{V`+RKRI)O6nAj>*vem+RYXaO!&48+S1DijgtA11oIzSFl8c5+ -%K|h1;I^x8^}Mrgk^&-=&|4hvz;P)1BH~e10O5MX$$Hyba9zDQ@EHw?`sH)Op0SbT8R|O`QhsH<iflW -`l?k^74u;LC1{RIHRqfrOu6)e&|L-)Y~lJXqEM1^IzByqTS`G7hk!N^g5LM0LTOx1B2o;tfz~nyi-ww -KWqPOeWTIJscj~NFKomzUWk6`%R!j-0RVl4fZ~?na{i>8gR0*hw5VpgItE-DkncT5L)KjRTQ+{otarD -c$j8IG1MB$Q#Gi98nv`uto7s2e7qYUeD#ZOHLf95hLnE#@OCXhs~5~cC@*a(xxvs;;^1@H8J+0LkOJE -C7a>BJ_4?3RLA1iMm?9bm2>cwtPA{GEAHd5+5KLdP9;1&R0YRwrY@bdgGD3HCj{R?|!Mu9Z}iE5UUVB -)urOV?C+!SAy#zm<1H+UGa}b$J9=&?3TdQkH&)6E-VNXXm?!74Ox2CG>XK|7LI(Tp&m@@Mx6=-9E5Q) -Tg0*Q|Jm&krX1NRnhy)Io8)qd8w`sUIHHt#o0K3srF&ae!R+=)N;r=rrEKrblOhne^j;cu3Bx7mOs28 -Yj#GYr8<(`jg6ghTReQ7Bo%J_QLhwu6u>+!>*PzL9S{rdH5DJ5P`!13ar-M34Y6wk|-`h!c5$nwB;4+ -D)aaM#il~=`>o!Ug}VHqZ?nHAu0f^zu$(iP+={It?-{dRgXxi~61E=8#5y1wAnP~R8#LFC8xDb0-q^I -#^-B35Om8E*9J1N8o0pXa>lQ%T?HxuhDGfT!YmS3Rn_eChS<_3j!?wTDS>FeoO<cq4(@DO2n>D9=~(U -W4WdYco&h*vnLm(PtIFNq$qxu!noHc<s{SqrN(i^M2K|UXK?G56W|WHLdFpd(C`Nu4b%1v{veAU5=ON -Aj`E)ZkNeKTJ_P3n`HyWX~tfufbC}!Dc+yZW*%i6o1KC^(E%}kwmUjA`)B$T+;A6UfPrCB;@#|s{6`! -_JEGd~kHt+<+&kjt(Njv!qn*n(lW4}PZ;$4#!aRLEZXWGes6yPW*kY`w$z-uho0~gGjYNstDq`2{CeV -=)uC6@3p46By#!1#Y;%3Hl9*dcm`r${R(l)dm8Z`y~i^jfGUHPN+9|=S<3**_&=m6m@cXD)uZnxFru@ -l@58r*F({x9WDzq3mzM*yAuT|-Pz^x2)5&AoUhU%i%|T1ls~Tiy^UD-rjbg6MjVHt^o&sDPs6uND<>% -w38KC~5ns;N#@vxE#pub;k4-D$dL7ihBfOE-=xnIKEuy#pgzIH&mJxwz;<3DJ<dcq_Bk9sj$s_?WC|u -W7-t9Ea!fMdNe7l&e^Q6i3Ep~W?xNZ6}__3s>JQp7VzSgjG8r17ty*T3}cfpbdi8;QQi$Ca4E=t3IW_ -DfDO6_;Ej5}0Ux0DG>u*GZ)CPg;)kFmVA+5@QQ5oH{G5dLF2L<MZLVVj33NQ~<lKXy2sw@qUgU>6HU! -d|NT1kwDji<bx#0En9qR_z59_BeLUZ>|tjGm8g!?%0Pj9{ojZZ<gQ0+C5Ubx(e=HWEW5^t74{eszHo- -LkQ$*)3)n(M1j()D{6;F|Q;sNmP3L^b?+Og$C<@+kyx0{Kb!Pvif{n=RxMX?%=mqwQ10NPhEao(iB63 -2*XlrydBPW})<=e6<TUgss)y_YuwLMYHvjC}7{YhH*P?INS-J#xu089tJyhq)g*h{&}|@jphKlE%Mqf -gjU!)1<?w(GmLKIZl^%nM6#`+bVcIjU|MH3h0{geHUV|IileVMHLM9%LuyXlKBfja>P;FA`mD-mQAWU ->g>fnu5CZK=0QcrR1-CtvF3{VIphZ^OS^=Z)Xa<bD!46s&+|dxU26k9NS>#nyP`S;vU^2HbhGK2*>)C -^~-d8q>B4c~2m>?1c4#j?{t(F;EG_8Y$EtRdHu$#UW_>C&Zs<REh*u1-FpWWo`3RqvX?YFjaqZ*d-H) ->+j=gnFLkLW`N;nh@)zEVk7-b|lpBU8DY;#YY135)*1q=4G~GXVr5=8LZ{QO4Fs9Zge{>aY-u?Y6{Il -ShQ7I<YM=O<$>S+32@M*6xL|i?-U9fUO=IzXeyHnSAb>>2R}o!Svkts2x|?#J}`*(erlQ?&DWNr36w> -<ezEZ@nUoN7!WVQQ;nARfm5M|`n#XT)p-O_&Vk6OGU!+d?nx@=flMfei=mTF>IIcPoYO~7lu9i=UfXc -qMC}_q^j%yUHsdUF-OrEygs@!LpdW#>^4Wsuj>I=fUwk8|)}tZH!~THX#V^QQ{9FJJa&qa(b^BHxY8B -_<6XtOyL1OrmCzA8ki$P}y{9=l;;i;VG^Ylo{`TDI4a}&l>FH|7v1tE&h`pQ)Zmh{+E1IWV1whGwqO* -JqtZB-~GwA8_V$6ng#gXiDj))5!?@8g+W^a=e#)>F-Y2Cb*s-`IT>We{X_^A9oy=?t*p@d4;o@oY9`U -Kn~)`u<%%cCnyg@MHFR*<Q3BV8i3Qv)jjr;1+u$qv`bV^(}v?9?>aPL<jPhNz5OrX<aoXqI1lnX`DyC -t4{<PsDwHPDudD0r+JL4zMMQzhhv@6D|UgkPx*9djG+!JnuTe-G|Xc3anXt#v?+akS~VP{+%*;(7;J2 -iYF!Ih`mZ=}WcUOrv=qYUa3F?i4Qh8SsQQsyST<>H!&zKbNdtXW2g2%3u-B@~=G-ZQXljKKb_&19j8B -qOi2_f_q>rT4`D1I{CI$pM3)EQZy{YnsBx->=ijNM401)~h(>Si7jiuaGI|f$~F?0cz8*4<fU0W5Cy; -}zw090@+r`L|BfhxF#FKkCuFpc()PU}{#(*Yjn@cj0^$>RYb-ytA^7?!bVm&Im$1=d6%pj~vE2ryI=K -F(Zi#%CxS|1OaCSS?$4tTd?KfYis_z6H&dXou%~8-uuRN1$wgueh_#twQohibi={n=rQBB#&wlMz<Q| -QSHIlR	I8XDqJEn;9E(JBT6ag2-80tb&a(H*id@dd<&e8e5qfqa|KCj@)R+QAK>HXUYZ10_|rO|$} -znL9}hfGd4k7mNvmq?;@W%Cyo}v_CVqUs}oc8vW07(9q?j4sTQ&^l=|j^x~C0Jj)v~I3Ew*Tws&{|8p -JGF+W+7L(srUQMQMh<@hvCNOmsiXVCxYZGY(C;8~RwYCL>Jls&+;wFV`xJnc(;o~SP$Xe*u#2QUa~q^ -be%*=93{nMM5#FoML6ext0nh^lkci(wb=@zKRo!;<U>`qS+A&)f?!Qm&?PK;7_V<L6gj#E%E!m9@p1a -VK=r!$jW5hk~G$xa!w1DzF4~>SeQq-l}K;pT$*pol-_AA3(AtZ(FhU2$uR)kKL@t`Yg9kadPV=9N*yC -)|nUiUI-DKn1Z^c5V|ckD7ZROc91%WT!r3D4wC-g|K1-7{DFrd?FJ<nSEe&>CAG~Mo8X744Pa7H3#H_ -PX#)#!;zRo9mtSmmZ}fdI&F3Q#w4mkl&w<9XEx>$OkGtRStnY#O;2J-^T#XQYXxoUfhN`6$mZ1~NmeX -MsH0xkl#p4uyYh{0gq8m><rT7`^CPH$(A-r0iI;VX62(FZ`W`Zg;R!5#Z_mZ2GduM!7O;$O6jX`Td8x -E@2rLrvP>|B^dV^e8QD`$%mbj$2qh$hfjjy-ckC(~GmaPlOUK0E+t8v(%X2NOxNRfBA$I`)ysrqy%6Y -V%`IBp>(LdIX?84K!O>r#{)JFgV0bCK6p29;?o$YGu=g^POorjgj!&qyle{P0PeBP?J6nB0OTKOjol< -rwZ8_+0-0~T=C5$+5u0PLBrs1D0S6AmTnl&)JypwrDH(KGs#EI<NXB147_8XloZT0#b%Mt6LtC?bh9` -WP49zO<=Sfs2Mq4a^_Z>N0L*TC<Ei|D4!l>%V5C6V#hhrkfwUp37`0|o<xC7f9`wK>rll%|)AD7Xq!H -YKE$FRuxunOeD<#-oqrMa>p<7H@T`lIJ^X>6OhvAzpHnCtjAa9^bro-|$tZrqLHJ0YW3-D%!OUhmFT+ -!z(*r=2awO&D2m~}cBg6Q+i(h#MjP>e<x1~{YU(MtA%SA#_I{zaOtL&+G$^bZC><`B%+bO`32^L@##< -}2Wp2|KHJMF&ygstPt;n)z{_l}@(<@J7vL-&`DphV0`l5^~^snK!ICM|5S@mxl;662-Lv4Tsnx2#+P0 -WC`Gz81qqd$UUC@hC?VC+~6Gq{3La7$A^OknNwwIP%G48aSnEX)Q2@7I?}XS7gbg>^nB%L=Coh0`Pl{ -$&_Y;h=@#<D%VVigs9F`~8n5$sT|>LiSMK!N8UTOvxY4S|NKq&=005R26zXyBML2~SsA;_Sc+i;1Ol4 -IkA*EJ7bT4vci?60+R-*uD(I#~XRQS0{@^WL4=dS21kxWZxfa^bY2{?<ambQ@7Wu9huQZ2HIH}81r+K -j$+=wswpYA)%tfLhHZsoYjI2hguwb0WEA&5_eBY7T{PwVM_SEpkBwjyCXd_6IjC3qZ;Fq+q;^3BBK7S -SE|S+m)<@4aiP%Ly<?V^tvzsrc0RH2vq+~6Y1UBjJ7ig{yhvL>&BBo|L;-1Y-zl+!GaL|uERtNl1QqN -5>RL`wz|5pxe```iq_#-$rS@dKLiaCjC5Pb2wFAqGLm>&?>>SCMJ7K3%#`KA$v~w@<|JUFD@yrM9mu5 -?Yq?`RP+jsPx@fz91-ISVzs|!vT~xbcOapjwkp(C-R3GeEGGc1n-LyLk@X!QEE3Ia@s{+Ll?=)a5#2% -HFRMllB!)D>VETs2Z$w6JRK_>&t2XB^zYwE1&IMRFEjDv4)Fl>2qy;|?TDW)s(m5<AK_ldV!$>ds*GX -V~fEUu+8hkEl(DErPHpAs%J-sN+B?J82f>t1VWW|tIFy1v$BU8^-vb!0h}6@8nDLK?Jp2V{Vk<;8PF4 -a>1MX`yohmiY3u>uVUT1~>2q)RFA<HCK?{6DjBhH{3fHDQcP>->~Bt-E+&r8CVKV38PAaUnFQY4hl(s -njBtS98cWC%ggaEXLw24WdX0aYykgw@$T^ISb<g!DAyb6bZKSHtBslQuX;y@=Dc!82L5evMGF4SVrYP -<)~hvL7Lb+-O<FGBuxqB|QYLlNL}sW|dC*w1k@&|yhr?<EI+nJAOw@BR@Zk9n1+2D*ly$<onxoC8>X& -q2Mq1UT|5N3$HYSv3Ez6_jaz#d((}O~^np6ESGR&x7Lr?{$RQE=ym2!I4MjpzjgR1#0nvcP|5oqJU0H -45L(@3Y-%w;w$V!GO5K!X%d7*sQAQ{FV;!>0AcMKR95tU@oMtEb+O8=B&`P9pH7hyEV|q@{O@rO>I1i -k6{IdW`{EDDPxQ*MX`nF6w?rb<ZYkousMp6fbhXRey6<xAJ~7JhR&3obs4jA&IQGmPRWc?uNK`-N7tO -^$jU_TsR#^2q}I&4rrcW;KMZktsy{DveVc4K^L0DcowaXM~aK@e|V`YXv?;N3Q0RlJTXJBJ-A2Dy#!f -PXGUEet~sm)A4KY#{V7h3mOA;}=SrH5Jt~<~`98hIp<M-Cb@TMn9G?1k$4;CCH;jST>p-FOyoHCXaa% -{!hs;Am56s0}7815&F%bNjB*V+X6<t_?nt8Y{uUQ|O_ts#sj*ZJ`N`O5J66Ne@jWcQq5l<#@1q3e>q! -fs~21D}C_P)=OLDQ3E&7|qRoW;C?i-twpk<=Z!?dDx_!PupjcPde{-FY-jha9sZ&B4=O?Hkg<n0L8oc -#b?>mon(IdrO5FdfRa{0=EtRbh)4D;Y%r>*5jynV2C~iz?V9Wf@chW4aTr81dflj3~Hm~8r(gMw-PyT -0EH^*>jFsC02tR`)b&%9iW<6~%V1wjqZEnN4y{ldhGeLb!czu0DvBs;tm)`U4P`{TR{7q`K{_(iT?hR -<o4@$?zMhde&@(!ghQ<;v2YCKGeg0f;QnoJ8RM$4Vw`LEu3|@$9HNw0WFMd)JYjl&tHI#B)K;augaB` -L2{+l|aO^enoEo%Hu^sFr1BUV&&WM2l_v|8MVV=fl$*eB6E*;SjQKtqDg7!Pp98v*f3(r>>>zs3E`y! -UT7EH@%fYVOv8>2o9d|DRT?5GWc7{a>w+B8EAKapW@iOGPX1@xDqO^~Jp3g%6*ki(VYvWJ-MKt$=2G) -8h5Km1)^0H8IVC;ibNHqTRaYuo$|?R;LxAzcGxK$=4Pg9;tIBNtF~ZqaCYH&_MJchU@J$(Y!P$mdX0x -Q^Q9(jx8E<dxcXtc9iu5N5c19yL);9(Jk&n8{C$|6Z$<=VMr0BP~Z!sf`~3o)pT4^c^6$2JaeFyikvQ -EGfPWE@}r%$uV+k9y%)f}zU2+S@mSFglk!#KIv~R7k5DZKV~03WJV92O2}_$vIJh-~Zh2d+XnH9qRW4 -?iQVd5d6#!>Zv;n;LRY83=&Fc35rWxvAaf*N&trpSrf9_};aBmSs?2;G{KvU~0FMVMDn-pMXUY<&OE= -tKpF+3PLs2ZBxN(_R3Ma-jtigrFQX+*3B$-+Mnp|_m+9^C`<MqglLr~nIkPa%7dlGh<pbl>_>jK{8KQ -e9t+hkcqWlGGLJYOKZ^17Ik|vxGQ%9M9D?QhehSx}O!^EtRiylKKXfh)}R^fy1CLwy&tFecz`>f4qkb -$Ax(RAgUHVzyAIeVGuGQnQzDNf+fD3O6>pegZOzO>HJv#kR~6nW;kK0b{v49bWo1B!9kc=55aYwV=hZ -{Q|TqM1#LH=+aV0oiZ}5ynjtEM|Ere-^zpzmp*|J^O9TrASKV+~BL?+BL?1`WwO~bCB{ASHQ%ALg7Xh -sW2B8rR9Doo_MDS<6{1sYp4H=0Hs730AHt9QJa0!aAqFEBs;odWD8X6tMO9`M}3XMP1Q_ILGwGT@~tr -D0!qe@E!CHT_4?jK|#zfDaEAq*z*7D$<<Z^U85V(Dwg-DmxhEGX8QWpJ~|EP`OJbEp%K=xD<s$_PpU2 -Ek?BlU;*-lDQUL!Vq<Jwve-1tcgX>6jy5(t68k}(-gsLh9O-jZxMq`38?%TqLvi7S3j7~fypSdJ)!b? -WyeL`i$)$AXF{hMH(k?Jc3KoA>5nk^TFk;uiYd4HCxxXZ{2Y{rkj07_ZNe?o0JP{mZ}Ax6=$vF_UqVV -grXpE^ryn@IQh^Sswm&c*kPdtQ15ir?1QY-O00;maO7>O&00002000000000o0001RX>c!Jc4cm4Z*n -hna%^mAVlyvrVPk7yXJvCQVqs%zaBp&Sb1z?CX>MtBUtcb8c>@4YO9KQH00008031s8R^GT{vq%B}0E -q<v05Sjo0B~t=FJE?LZe(wAFLiQkY-wUMFK}UFYhh<)b1!0HV{344a&&VqZDDI=W@&6?E^v8ulwE7vF -cgOG^(zh<g?LNM#u$uJU#u*Fz*tK^7T8Uq#K)^vTMCjqFO==KPoIw0xV~s3o%cNF=+&`b!R+-6cCzH+ -$2qj7ntgOTgi=bjZ1=dA%ILgdk67^<$={QQkjo?k^MG)DFb`6|d)REW+&!Y{lQ$b^&<0DWq=Hr>blf} -u6E?$Ex7o~)jtK{nuv5qk0s~svd<p>ua{Ci^CingE#+3ywNu^|y6mj>~ua;MYkP<6MXIZCiCIsxGv96 -}j$Px>x=oGeXRiU!o6knylDWC|}q@_|)>9`Qs)m)%ok?h>_TwCsc@&sfxYJ_h%S(Sgt|4Zf-2x)9@X5 -u=_;G%#h-yZGUpDq0ps<}roZk_zb>K5m&y9wpu7pr;cPX%WRCQ{S~P*dpa`GD26?6AxzoPozrv&_Rf# -f`g$!c_q-e7=v^n<!&M^%1al=(>z)UdXgYd*-CKieYri1yct{**@d5&J%5<Hy|>G=M17ZzKbM_{Bc=F -6W*fJJWRrsM_txWLEcZsT4ALf;9aWHPX%xd?z)flj-di(BMBGqc3jM5{&~LmbpPdUeR;oF%x~7W%kT4 -3Kv4_{aWsOJ$L;Y!Xhpza3EEgg8x2jXZ8k;#&5pjIX_aucJi7t=ewL>;2XHvXWh`>Dx@KHWEW+D6c$q ->OtjF$klw?I1Nhc6Ja6b;*aLQg{uB_$-rt|xmq0x>Y^t%Rsn?Ss?zm``k#rAs(43guQB7G$K??cw7=W -)shFP5+3V&orCO9KQH00008031s8Rt?`Pc8dl80N)e<06G8w0B~t=FJE?LZe(wAFLiQkY-wUMFK}UFY -hh<)b1!0HV{344a&&VqcV%H~a%E;;W@&C=Y-xIBE^v9(SX*z~HWYr>uOJ)*lLJS<u$LiShPJ~B6exya -DA0!>P-uy=SxclrQgO7R`|UgDkkrMp)2`^t{17SRxqRo!LtU`zt7}&1QmV}jYh88yGp;0y#UferVz<} -E+3X<r&WI|nq~f*wTO|L?eo68=k~6mz?9a|^wPHW9hljwOMec_O)(F@wGg4C--LO2bTGtwp=S(&zh4H -o3b?Zd#|4)*zE}bw=>)OTz+gUFo=!pX0HA(WE*EI;eWp|5XD;D=jk`y(!mK|@Udi_xpZh4b1_yNk_h^ -*3v1rqKgn5V1A%Gb4Ep34%`Sk#JDttwXRikppv$JOqDZ%e=kMk~uWD*z|Sh<t{mc!}(=mBp4FWL>khA -X-tvqEJY{q-7g!)_en78ny~2%8b3=iU7n|$DC{g1*VseY(bKAOg!?s<xW_Fnj+E>P!hyd*#kyNM%cD? -8GBVhNMJ?Uxq?#ga)q2E0o6gGp}vo;b-lDdv=SLnd_bE}%HHUW;SCc{5;BUb4u~5r6|(mld_=r+Trd} -G02X*SBiE2Wh{Bmx^xiYAVp4&)M-TupGbKQUKo&+&P(6^>9bm6G7#Jl6Iay4JgkCP#o8I0KepYJrgJW -C%C<wT9AOST1L<v*}l`)J?$G8ze2)U!R5DRYEPIRD4vs&w2yJz`ZRq0;1RKfWhX`Sgvl(a#NP!@^^<G ->w~b>MQPv_rf19Et)^aIB2$qAO~!h4}K^*4kMrlhnsLkMd#Z(`UbAx2-DyJuJQ9we`?*sY>ybV^zX>U -z}N?Tjip#QX1Dy*}QyVM42C?+vdT^k;bPB6&;yBEyx+@Slf#gTVVd;6B8GoK80z8bl@9-UM#&Dh%-oo -)N*;AT2WUk_DszV2xP_3waAg3v1cIm@%bQF!#fs<DUxJ2>Y|R)XoGdip|VvWAZ`V3gU<#r6h*g%goTR -ag;+7jbRTrc(k(YlEv%g|#jZ-QlF61|%Oa@M8-#0!YB`}jZj|Q?hoHQNVi|meDSR7zMFCw-_Tmu(H1O -B=Oe8*{LO?)*kLd=61~%|9-SAO^t?&Z<0=vx-_gTytWeV&l@#KPMhKwK3jg!E1clhr;)&q#>Y39C*bw -O%JxmeJl6>>4ZMZlxHgWmHN5}=lk)X^blxY=Rfz-Bw@(nBX7=kJSNjs|9PkXA%`)Ps%fWYGGCv)B88j -Bt(1ffx|LP#3XjOe-NM>|>f<^-)Bq={R%{u}`0uqgpM6<HeRRe2Z7c2eMcAy*#rKK1Bwf;OTrjxMiH_ ->BMv47)QUME~0+k?<XDVZR_2-Vk5WCeLA>wFU0PP4*ehb@4GqYCCnjvIMce`RpgKpzJkdGt)7lQL_9V -;KtXmq$)^rDtCHH&SLw7{-PYx3NQ5JS4!v)1e!#kh^PCEDImBRmjJyozhZW9+sr3l-is5iMPT8-85PH -fqoYR&~@VxwS3pHYILJR!{z5g}u&gR_WmrEOmcnHPi#nTIFNWU)FB}-km52=*px#A66e;^f0zclC(Fc -E#VbexDUP59TVnXuyTl-?Op#4+C?c2N5TZlsuQ#G<0X&ffutkbyF=BM1C6d!$7@9=0ynU*2ZwN2416w -t2{NG#lAqcB@MP!!%ucdiHmC156<k<&sFlE0iFp8KnZ8>Wxj8lz1V>?gt^6g&8V^@%*;t&AQ|`?>0B| -_wL7gKP$}Y=dL=^`0oBWH^jMXX8$WVQsV?J)uY~t(-)yr*A*`TFAAeu9}SrB>f1H+PIX;!(P$-$FkD) -HiCGJwMq)l{so;V+vQsF$y5^f=GUHRKnC_@}tEtCt=9%Ls)lHGiw<=i9;9MbnWxAYm&jC$ly73Q0mC_ -<%x||X0g~D$lz&{xm;}2X7cXbqf8iK5P386jUv2tbtJS}31f}D0-B6HY1zO%FDG(Ja|@%#)r&x2Y+YV -1z#;`koeX<Rvt?_|{D?*hU?9}awEO1K7SmO`Dh4LU+;7IX9&5g~h*{(FS3Ykdfjzy+=94%!HWM5<?nN -ITrid~G#yvxSS6k(&)vO#EW-j1ao1DRDUZtaH+NXWS*83bA+WcY1)f^S-m4%{=v1>s@*k{?8@dw@yn3 -&%&(1eCUtcVb4M6>+bkEyT^|x%F$O2y10%T5`K~sPoiiY`o3%pK4J&^!liQbsbN;Wkfx&opL+w!+V6r -t{{>J>0|XQR000O897^_9=8Bn`*Z}|lg9HEoBme*aaA|NaUv_0~WN&gWb#iQMX<{=kb#!TLFJE72ZfS -I1UoLQYZIi)n+b|4<?|up)yKI2bH|QbDJTz#K7<PKtiBN315n@{!B`53KPmV=LY3h^s{S+nrq#M$m0B -8m`5CRC*8BI>egVpWe5T-auzKP$O#6ec4i=^6$N_R#&bx^HxAE_{;&#K0--3oV<P7D@n;j}oQI3nRw( -u{{aRl4u7a!U7nnzC?%P?I(W>yS<OcR=enwR~OY@RBWmWkq@o^5xG>7D$<jPM#2sC~G7;SFlF+7NgS| -168YSbcmx5){8L+g0=1J$@fI~Z@J00kQclCZnfK#>6N`KODMPNDOi_~|Jmi)wk$U@DYMmEk?o7+w#;| -Me&SpO_FTwsS?S*4KR3nFS|kUJ>fezJsXlQ3B;B47s!{b0*?T<R`s@wxZcf4oE+h?DU7gSu`4QgdREK -()-Q7=NDyo49dk3Q)QU_`|?Ty-0yrYAowm#WNvIxTnt?~2V?@QK&Z5OHL^5YsBP5#QVPH*9bl*1$ekZ -tQ{@Htq$2)-_+M=WAzBlgK#R&HK0iT!4F-%h625#S)0!l8dWFCW{(O6(uAFQ+^b=b>cA4s$&F%pe|iW -)GwBS%`*%rKoE&x}O-vcO86y*FMhv-~QAX-TkkNaT5OnP)h>@6aWAK2ml;P_Ezkw<PVw$001Qu001Tc -003}la4%nWWo~3|axZmqY;0*_GcR>?X>2cJZ*Fd7V{~b6ZZ2?nomks$BR3L#*H;u|1a28hduB3m76Rt -MnRpUoC$<sG*@qx#QQefpm?AqQTblm+t>UFyEopYK>j%r?rLLz=6}>Wg3q`SNTw{1qfY{dBIABYwW#f -1ezK=$6-Rkm{<JT2k%kxqzXT&nyDp*}}wHAsOT<wI>DjnosN?tpml}%?q>ypvJ6El|I8KX@)TeI?&t$ -BCSiZ5|%&xA{>5BguMo#QXzK56sp?eb!#K*x%eHihA=8jVI3UxBa%8mo9oI*ZC^w6w}-X)*)2fG5cuU -fF(YYhH?#C`W)l<MG&k{>CvpX#3nW9K;IThC?q7g+r7GOjTevx{(zu@r=}#SNX^bnbpj&t-m+(3x2Vb -%-Y#v<6NDWQgG$+U*_|tkDc@d=;dGdXO!}w9iIWZ40SZwf)uYDZtMEa$9{_Dp+$QkB`~>Xtp(%lhsEL -(la?<Q;ItPex%0jxQLsV#<-j+?%NFfYYjB1si$0)<vIRU2jm-yPB6Pq9SaZjmGd{Xg7}M%_3SRZZpTh -|HqiCgHJ)ePD?@|}8=!m~{Eb2k4AgPZX`cD{WV<I54O}PPPVc7yjT#Dr+KNe0&_G`|xeWET-KtPh&Qe -wRK8-Zds+;G@(Mi_UOsDpEraB-|-0MU#*z^sWa*Nyw|CVvyc6pH5SNdG^>HX2>PoDi~VREOVE*8&6N> -ns#`Ubi5WhsRUvHhAn^{sUNt2w|o|85lgnObd=%EYe0ep2KZbp%kYv0u~E*tr+nNDbNZ*vk0OK9k^hT -qnJm<fmM~D6((V;EAoOR!`y~B*yE9%7Fbh4RUV5P?w@uyV7b|GV^K^cY^m{YRF78w^zfYO)V9{~EmWF -Yb?Fe{J09*P_n8!~%{@z$m<}Yp9{!mRA)05nwbOu#n5Gz|;^)tgKi+;We!BZ~`|^2S%<q4_dwiKsV?i -{g<VC#yfe<?FDy5G@+?dQ#HAMuIn^*Djm8X`NNbi>yF(e1Px8n*)q~x7@Ilx(Q8H0D<x~9f*Uo5hXwl -0`P>^fO2CjVI<z!UP8PX+D;KbZ6au406)z!M&K+ypYRk!|8WLgG-cP=u{AfOg3d)0lLJsYBTz<1sC$` -+fyVA1Fec*rvvE<`uDDkg=9}iGaeqvPQa2D_Y?N2G<ZS$OSVB)-0kkNB)YJ;+;jH8jFO7Z0^-x4O1IT -ATJzj8>|N;e+D7CdIcf8A+%l=vFCyB=o}%Nn2ANuB+#W$Y}spyb`Q_MUAGEIJ}J7q1nLabAm3nNN@@L -#$7fQ3*86YKxt_cIAH9i4;Zb>_SlY`mJ;vF+aGPxW$9U3HqgVbR9WtWE{XfT%!;HZ#!gtVe0WTeDc1$ -9Zddgu^>OHTDH50{(ZG~*JNn#%wGWZwo9(5M9OsJKn-esf6hGH)X;rk88D~7z?Yx4?ZEmiw_&j{Gdw5 -jYg)PMI4Bev9TlSgTD0<;lGpopFmM(9~{&|59JkVFPa!4C@N8Rtf)9mdBGOIKGs8;eS@@t_U7C_!6+` -Hz_$XQbRPVR=E}%(`v*Ii0k!W_<aLy_|w%OD=&*tfeS8jbYVlJ%(?*HIr$`T#^*6Ch!`X&lL0(lk#!^ -^=S;jG#z_>{P@q}dH&no?XL&$VXJV!wKewA+GwYzP%?!fNA|!yhA~8a-Gw-23``qD^59U^96qu$s-jQ -n=YonGH+G^TE}@c+H7fZIV-*=YRb|43TIT~X1zs$MBp<u{aPdexwX8@}$R|oC<zMSELzk1=xu-ZUCX1 -hwV>Lti`idOlq-=O{auVb`#vrq7xS61dXL>Iqn4?>q&`7MuhZY3Z;HO51Nsj{Kr@ixL`(ZDeoZTFd5s -D;DXC?Y-qU~@rd_6Qf8y~V!#{w#rlN8or0f*Pe*Wr+GFiQp{fTe-<sM7li#Di3U@%(I19fSb-#Lesqe -<eH4F;O>koXmt3rwK01bDm942s!lGJ`6Mp(-a(JrxEG)Q}Ocf{B-v*%yV4>q6x!G@Y6xfjemkLPt}$) -gERFia&us8nn*mEC!Xz^SI4!z%KL}Ac?#+;x6j4>)9*KZl+IiTHjWOU8xEx$ZkR1Zy}R)Y*N5%g+c3_ -YNMf<CtLQ)|qWtK=)G=97fopMAr_~FZ=pl^s-5g8v4)tnsD>`9)fLQ4o%yUb^FqnTg+OarlMQN(pF0n -`IRd>%1+1^_2XB?s__>1NkOaqD{Lh^~FAq`(FDfJhjKT<<yi6<53_=L1pwyB{$bM9YTc6NQe#)jN1ku -$c}jgk0-_^$gD);8Q;zkUDyCgtt)9|}1><oiX74lnhWY;w{N55gyspLq)J;j69-d8%L+^H|1L&z{liX -j==3m5}C%n-u^2K-9hS+3{pTvlq=JLqJeU4sQcj^n%2ha;^^qRWvhiDckAw6J|<+64v4|nhw4B?_sVR -DX(wdzCCkm*{m%-`^fEFn{~*@&G-NK?%fanW1}6G;mw(@;d@IQ7T!#T2M)@hdyLahY#w*%pGiYQYJ89 -kGJeE~hixIEBq_oYPZWVV`$`|rW^a+i{|!(}0|XQR000O897^_93eQ{zUIG9BMFs!>ApigXaA|NaUv_ -0~WN&gWb#iQMX<{=kb#!TLFK}{iczG^xd3{t(kDD+Mz4I$Z^sq!iTzXq6r>Nals<Nxy^o$%Bf+b?pu} -L=nzGLHn^R--n@qE1ZX2uQaJru@tCCGiR$wEaaES3Xxo!oveE3GVk+8hXt?haU1NVX*WXJ(TNKOh;YR -gxq%Ho#E|E6WDwI!N{`TWkB$4t&sM3GmaC{ye!t%e7XRhkp)j<Sv+MG*&9%6Pc>TJ^F)W@$56CY3kqa -Xa`aTHZ&l}25gHF1UN$gq2SkM^9HNe_4>zZ!+xZPUF-dQ^&;{4o_j%J4}ahP%pk{#?r~<_#6eNao3pG -uhYLb;xc7k3I*{iEjcY@%b+;Ev?2wB76el&7?np7G+%S~Ub_N!C7m&#U!O71(bFUoGR*MS-zrpVYj`& -0fN?RC=R67tOgPcup6eqBn50K4c7f0SK_oNX>1Fk<aGV+~)pQ1CEgi5{z5kLb9d3?@o3fUPz&WJ#CT- -rdR=_sh4YTn8L%O#|aUix+UkD>R2&Kb{H9oeI_t%vsE`A9!5b+E)}CkWY8W)h&df@0Fi$0dsg;^9HT8 -kaLL_vv@X_=v^V<X*Y?bd+Y&?Y3bd%<al~TgR0jLAYfOOFt5fwmXMt`zzt^0uxp>{Fb$(Ym2br?%KYf -LS6u;G%MVQp|hhBt|kN!PHB#XRv7hUVT-7o(?Ql)!}jE+-6vzBR9vKwn85PEy*BqSqPe_tv1QTsBA=o -rJ(f53V>W#S|3z{;Id0j`LS9Tnbl@a?e8%El9I{TrTFN5!Ii#Hybs01stEG$Ud5R*6TmLM;591R#C;t -IZO9KQH00008031s8R!#%<pZov-0P+C<03iSX0B~t=FJE?LZe(wAFLiQkY-wUMFLiWjY%g(jWp!mPaC -vP|%}T^D5WeRr2KLeg30l0kuvbqjD0>i3r8JXeFwLZ$M#ZN$NxQVDfk62F3H5=;2|9KTyNTF~Qg-AXv -<_|e-d<3EW{uF-Z%QXj_x!PnhKLcBBAey<`K>-ENM{ExnE<*9(SYSKi3|c-o4N(q!_ygF$s7I@4QI@H -Nv>U8Kj@OPw9H|xKoflwG)>PYI&5Y<wRs-e13cc}-YKOz*NVW2EEm2i8+Cc_=XnM#G~{Wj1f9KsX2J8 -xh%Od5ZvROeOlY-NYr-J(jZ1_>e@u51G~yITpNVSC+}cCD_S1y@zY}yD0(w&w!Nz*Q+4{F`;|(0r+#g -U&0|XQR000O897^_9H;!%bs|5f6oeuy2BLDyZaA|NaUv_0~WN&gWb#iQMX<{=kb#!TLFLGsZb!BsOE^ -v9JSL<)vHW2@=zk<+E*v4$N!-`@skfKiNuEByNSkiqN3YnJ9F&l~0NGgt7^nc$S^`aEJ-NOiCi@f*!? -xBrVIg8^>X-f@p%tT%&Z5dx1m6aCa>NyBDM7QP!UcGE+)~{ZIOjHW>Z4|*{0)-Vynug|s)UXpW<?9Si -Rk~klt#m_P@Z_G~fr*TGY=uslkQVMh$97+U34$NkH8+NF{9_M1D}n8V-3rN8t1a*pv{|i~Rm|Lr0*N6 -P)(UyYjLLz%zrDR?H5s#8j-F{?JWU~GytFFkRwO*j_7Sq)Zh<M8?VmE3vLNe-37=N0MM93wmgGL_TCJ -wYzFNIk#^P_rWr|N94CvY74kVsM!Od^y*YW%1;_dQxcEZ9pZ{Bz(_!K&d>&5BCvOc^)I*in3kOu7d&y -ZJ2p;j7BS-3@o^j(rFPO8F>lOR}}oh`3#<K^Yq)!XySUrFEHXHiU3*ks&77zFXV#rehZ?d|g70&ms&6 -C`$woB@)soZmxS$6y>V{M-W+G0(&UoLnjiQ+HU|6F2sFH)Kxi%<&EpJR*rP=v(iw(CTp?AG}J1A=JbP -PqvNP$=qFqVd%bZwwRQpw1#bzW~dJ|ce&T_R|&>8iHrhAJ}<cDx#vtJjXviaOxUe1!KE)v4I3p&N{kA -kdG1(dj%8HK?28<PqLX{ZC0irl*jlL!xSX;~7&~QXuCW?Pqn5PM&#dOsP@W9IdgNzr)RAAH9IS*aL%% -Kiq=ZCtuJ<fadCohs8>girL_;t$DU}k&{Xt+6^xf$4HXjPmP-rlCLl1WAB-M~(dsVU>m*|!$lP!vGnZ -sglw@S`Ron>PE^Ya(ctFWiB%e)sel_84(qM(u^O_Jw;EXM4VPV3OQq>qSKY4Mp?nQ{WLw?v~>9#I_3+ -7NvI)dVMJ_CE~iLH*mHB#IeA(`uE?nN%}(GC<|>k>^DQ^Lfz9dj0x!zplNKCKXe^Xv0%(b1t9%6uk&1 -t%xsPNsQ)f<Q2t~jXFHgT_<4l^|%eg4nl_b`UV}31ox`pYp)wLUHgQ6sV>Ckcwyq5FhUy3WdcJ(rj*` -EM@%2ee0u=dclfEw2Lc8()Rd=TM1?zKpLlu<d{4@t*|*enIG)apkH|C-6EyKU)B##S{**x(9c{~gsI| -829eNyl*x@H^1sp2I&Jn-DDjBD)%0l*Iw~dU~<4($C5~biy!_sbMzaX3&RmZEpRd}GVkE`vaX+0i_?~ -;1lq$7Qxi=bcql_gCFs6(g$_c+;b)bkwIhj=4UZlR1IC&p`B#ik4&2Lly54rdJ&0=%6QQ<kd-U?hcxl -3R=lgs!b7%@s}ry%Pr8$PPw0YPhwK7nW!>I*Sd{lS@srS~v+qQO^QOj54HJD$8i<cX6mz$(W4yJP6u? -#6gI9b$u6F$TD1xNXF!_K&$tIB3INth(99ku~&(1wPoY;E4RW<+0~8vF(`6cB2iT;HXG11E!`M*`>xw -y819;CM}=Fu>7H<#YzGoJ+i;9Cu8@@tD@M&uv)vXXnd~O8s-xj%u`~F9Bi@$Rg9qN$(0CeB`X4_<#== -jiQ%r>P$XNo~av|FUSEgKRk#j9@opwtHCB0e8G^7GyfqNTm%4n1pFj&$^dKcPv7>`*d?x9{)D*)D8xj -}%#eV-kXN#=ACt{d>tn*x&4H=0a<?gP;I?<h`&fTGg|P;J9%$vuQQx4iMt#B}g(Gx-J*Te&Uszs92GS -dfR`!1~R~xxbJM=!&T%DK%!O!du1c@6;~uRW_?EKBolkqp&B_E6c_Kijap$ude^8q2UKfw_aCq4XM{y -I)nQLg+2Sz(yed&xD$;7{s68F{exaY4_VhbnwO*p!Mb6T=qBrweq*sUGl8o+ZsE^N6tZWI=0KV!!QW6 -z0|XQR000O897^_9HYnA!U<CjGwhaIPBme*aaA|NaUv_0~WN&gWb#iQMX<{=kb#!TLFLGsbaBpsNWiD -`etyWEM<2Dez`&SU&Lu|lNg66Vy5ftfew#gyepqnlV6oo@eBa4khdP&M&qv(I{8<LV`C&;2eb+ILKKK -SO%8<y5IVzDS&-&$HMglg8tdLft2)UBsQd>@TU-bam8bw<`2>$;tHZSB=sT7RoI(kiL_XJu;XmC^61q -}<QMCy(WyOsflNcOQ-az<=Xna-3!KHK#Qj^^R{y7G&?GbxN<UIcB$aE%PV2B9}S!HEYa<dYj7o^&+no -X&k|Y*IF${qftSnP;OE3s&Q0I%<`}4d?fIU$K&w(uA=<OiETx`A}gd=sSRmSs+vw~^+W<D$QW)!^pTB -%-5iIP4X;Lj{5(|j+|V15bBwGH8~%8^+Z(=#X^2PVQlisGc(M*KDlKy9NZjvyW%Pw83^{$`g(EK><L< -|7;OXZZaqC=5;?4Kpz3snSLZvn5l<i}L)mQ>?<-Ju))IMOoPi-xodnMzIk^;a9Q<f@MvfiKnG@XAdci -Bs6#3cTQ6jT{A=<6g!ZnT$5qn@QfO|=QNeO{VM`hmL@d4~*Z0^Ef#8hKT+bxcn&p=_0jn}>({U&*b(S -DL<fs&dU4d^DQ=+sUj{sPSi6w{g#8{F|1`nwUNXd9n?T)3Y>2Nqihn6Vu_0tY1{2gBI)9LX-IFj%a@s -_6~So*COo{mE4e661u>(c}~uiZC&pKJ7oH^`Sn+CWe$7NIocZe0kNbIp<THmmK;<9)DS6`E<$RdUo^a -KjYazb;mB`saoAtn%UNvgjM2YCIuL=*(>&>gW1Kc*Rk`cz1ENl}wuTm543s8&E;0Lx-0qW2$B`CI&C+ -$$z;Dp*D8g0&xe@{?9O$Jzjs!w(Db$vmmyy_71BXva7YPm7a80w$kr9mqEel$<t5t|Co#Lt#1=tG~LC -<pKheCoNpfzZqwDVHu)D?Qx>E95q>HdU~X%D+~M>KdxGoXH*U9y>p6$1Qy{!cc}&_<2)6A!DNP}6Ayq -6m`i#3eV71k?AKjMLh97Fr?-4t9Z@yV}U&MVrBTZx;+(9Vxgdq?a)5y9`(ijOK?e-N#~O$bBoB%W<SN -@u1y-v%&5k22Qqg0uC5vs|r+ij8-abA~{k}{=|ivNYQlDQKS&Pw^X*S5ip$ky^}$aqBsmN>hhW-EC&7 -t6iAz9VzS(M0+`O*>5<!)kW6+Rn5k+*AQLwNh?p)7lT`BIgBFUVDRyCP16*0RhVWHTk|PBW#6vc$be; -pgj&$LMVZ(M2(nN=ctdqdG$uxFgtN{1gz_24F6lGtGF5S?V{6*z$E$wi6ej=KOl-&I6Y^8kFF0<S;XG -uo-U&SNVoxMFj9}TSycfML_1Hv#nN>kTn%Ljh})6>_kNW+c%@ZBP>rD{Mu$7aAh+F`<icL3B5b*c;T& -5PP`psS9veK-KWqytuCl!3+=4@-W92-2ZQ^0SwPKMwd8zaM<!Ass(+VUpo7&5zXX8K;YM?VP*<>g?Na -Ob;CI-~JpOb%#LG2YqxbvCqfMB$-~O-`Syq%Y(P+{{GtWcHvDR|D^ly`dv24(--hG4B<h$R$xpR@KW4 -dU%fv~yJGQfq%Lao2%CRtRT$5uxLU8THD(jNKA*eWQ6FoMO25?Ii2IwHRd9?NpiNRHy-~|ou@g@6gs= -7>A<kw7vp5p>!|m^P*K_d>!x9Zx82E)UIMYyNwwTed0cB;l&2X5tRU7H47oSCR`(tny|AV;Q8M3t8F< -?N$xWKn`Kb><X_aGBb%TtG`s&FZuGjtT7JH9Y>fiA_x=-KD2g_(uOVR_5|j7R?hP)h>@6aWAK2ml;P_ -EtJb%aZ&S008q<001EX003}la4%nWWo~3|axZmqY;0*_GcR>?X>2cYWpr|RE^v9}JZp2?Mv~w8E2ij6 -2}~%Ml9S7YwY)^O=vZ}j<dW#kUHN<<NDf7;L4b#cD8=Rd?c3e+9srb+(|*`Jevm-SOwaUVdiph77x|V -&(Ymhcf=3Zcw!6HjSiC6nw61t0zV~|aJ>SMjs=lQ8%}tWssILWAPgSzj&-=K@pi|jf<4nsuP5H7)@~l -)-W$~7;s(P1l(Iu&PQRR86J5=#UzTYI!E;@uEzgzO110?7%_`Jxo44}_o`n;~DMUfXnYPiU5<1|^l;_ --^hS8w9GD_#}%R<E~3UgfYt_tl-<<q9A)!C&!m2aDnI)j+Lt7cW1?H(al>OzwI;pc<Pf+J!f~dJT`f2 -%-on5k-SuulIzV$5qVAs;HO97`Dy}pzp5WCC@4t$EpoyTVBO0?3b^h@qcSxRwXpV$cnN~E0$y|hG)Ps ->|KctuadILi+fmsp}Qbn-|f*KviE(MVUw@mv0oP{{^N)tK9p5l)g?X^e3cYH^(f7kF*2q9p(k*dU7lZ -#f%fe7l<hfN#u+STo8NL+WKuGL3Qt*_tq7N88kZ&8C)I|n5LW=lS1cEt4tvo#U&n~ngyoCBz>EP-BL+ -pp%QpZdsP1=sFea3K+7<Z@r0Jf%t@xUqPhXzBdp(QZOlPky&!b;oUCgGhFRo|7GA-pG{3xLf@gdN!iA -?WGr2i337<R!sVt}B91ftk?;p~$%WeYAzvO;Fvo`$24y(_s7{_OSZ%U`GGa++&^o|P4dVt?qsJeLy!y -?zxKnD&8w0)eQDi~+`7@Oy%KUC4zcuV9mY5mAQ>c3#c@ztHvoQ9*2p6uk#T^J;p2aW#E0i(XC7&Zk$` -(eu}5FaF~(gtQy-Ba`%M`sVV_Q$5Y)FM8@nm)!2DJR$BzzDt}BGvW~h`yZYkU&e@s1phf8efjcb^ych -8|EPppARd`?F676RT?@9PjrGQtN{>qa2l4v{AXW#Jj3o7b0$VDKSF1=H4uP=&2GS~^7lAMqB&GWOKD` -A?G+QS(bwNuB1^uV-awF^|76b9OJ1}1n{bj*{JYY*@d@q1X3q%+z^=?JfqqPBN%ABBqiFQv$4^Xd+*F -3!k*mcQQayA5%fN?0h0F%KQ0v?nw(Mp;+X!pfz2j=j2+_PngMouJ#OJVm;z8gYQyqcWie_@qPzB5$aR -Mif~yai});w(m^Q$m`^|F*aalNS2puu$5U!O_pt+0l?4;mh&Ur~EG7f(02a^X=24fmq>X!C-?Q%MmO9 -+a1UX!c!E<ikD=%+W6sj#BkuE`1|J{D#A<zSx!cSK|86FGG3%W>%~3WfuP{#n9pCvY02mF$6Eyflq(? -Dpk!({?TdJ~6T4|lvO1ps6-?|jSv<46o6vDm=B&<AUY0#u1meP=GemHL+RM1)MA&6q6M7n`UP2KkMi$ -4rxQM~`%D~;qt2i}kWrkl_R&N))5RQhJxXM|arujZ(Gw{z!hTEF2c(&xkYL>(71?;jqtIE(&^qS)gK< -!`h42X@-wod?(3{Fps>p)$!j&ZHvMKM@7K{P6&6Y@xaU4y5J!;lK=q$n%p2{lJZ&f^zJOPU?LHrTWCI -Z-Ogvq*0$IiN{Axf2cfUgdkXjk9~z0vv#yk&?dPLMDg=q*F3$akCBhdc<DYP4Eji2YW{FR_!q9OCccf -dYgl`DtU3MoL&3~!2mxDq^;g^wgE+x<uIy9(EkL`I9QBAP;gE!LE7w@em}KQVu-Qml{LwQ+Ny<C7(a0 -6LLDU`8Z?shK~hN?#p{X}4vF@$OCw1fP}TU=+V7(KHogb?fKZm8v5xtA4V?P}vi2bMLY!JCpqhvZpiP -12+mO9Zwn-%+!uGq(6VxDZY$O%eLo~27&v*8s&vX}*n3%nq&E6UfM<*GE9MG=^X<c#lY;-b&Kd1QT8U -Fd6<z@pu8~xkkP~`8l6$K_=BwY&-E(`Idh>>hb#kY-tG$fLOa&X}9K{0WMblbRE!blBfJ{PSKFmlP$q -^$IkA5Wf0L4Fa!LOD0~)1~#=Ry`C`!tbarq#_fhhA}iiG!z9C+}3TnO>Q=oIe#8uuM)t&({9Dj#Ttgv -sR+Xpp)|obhtsw?!hLj;=OCaf9wY3Mn+-amUAm-`N<%}7r_T7@4i<@L!0Lw6X<d?>H}*8H%ihR}-9R+ -4Iq(eTWCm~Yl_l<oG$2%inNcA8mDum19|M9eBwyh~C^vbXuG&ta=l9A~8)C;iBO_Kyk(^VWEGQp%d;= -xuFv)?*8V<bN?%-4ct_E9xmVmirVwR+Ph}AJ1OoSl^1VNI3B&t!vqE0Akd=LVfoQ=U)FUIqOVV#!U7F -+6uOm}CC;Ko5JS>wV`Ia#)ih@ZCwzfJPG1nLm;H3}rm6lsOY1id04S0z=zkXYb=s!K4;J+};fu9NWeU -&9dzNta93E+M|+8CwTJDTD-+2L}^CNQkWneF-5TDyB@5Vql4Puy7RJM67%5Y-}le)CI`liSB%^fgzG& -pgf#x)vAUcRH(Mx5=W4r%IYVHQWmI7wRM^U!f0{k>vgn_msMWa1d}aHw2&0-@MK!>YR`G5+{V&UYbA$ -W0r(X68cwjyfgHBo!pl4*R&GI5ka!659?xSvnwFi{pole`6&RBDunDB+AOxdKIo~0td?EehF8(w7ngy -rqYxw)gnD?aT)LHkL9kUbVL($fw)s!LXM8wS{6cTw9o*>166ytTBEywea)-$)(=BUE=qi_T#=qNm;zu -&^&FbqFvg36V^jM5j+INGNm{b`=vSpEP=YSyj^tN=onh$za~QWBIxO^gPvh%CTWWeq!I%zoW)JU)j?> -TQ=v8FPuT2>9IwT(b(jHdH$Z57_NyrI-*g89Iu6W3B0?iVY%8wr6*D02XL;X!+7eV%K0<rf~sVG|ni! -l(!jM;2c}-1fgpm9|DKW_?m=3WA(-*0ZPf8jgDUDz7}YZR!~M59`_o|0tH3W(?ypOTx=t9T4OXt)E9B -w8|?(HD<0Hzc&+LJ6Pub>F}c(reL$Bn>ML;9g^(rL64Wr9Yx9tR<BFw<Lg0C^a%9vx^z!AhE?}}ygq_ -4d&>lD%mL?)tDmdWg=H_iI1?plJj?{2O>L=PzzSHnbil~q&>MjCE$7iIiM0Y&=oHM`#rZgaDpIuF7SN -|2Ay_`+2qU+h&?A>+r;_`fYJxA_?vD9%ciPKB2v2^y5by5S`6jE5r)s<GnfU>NP<%oL62%3?zY?WZl5 -d=GSoFE~a#;XQv5IdnN5O76TzVfZkPz4hOZcoNcB`1|pMD`EEa3ATpuH&vdSp?Yq#sQ1U#B$&FF}#jR -*Po{|{P*@9{X3t&p3bKDboq96arw(NKF+SrUQGKRXz-x1O!t)c*V^2JB8=9-X=k<XzdZqG@!QiMhU~l -1vk%RwEk?Stc1wgutb@4*YbE`&8faZ4zsbC`SqtddWLs~w;zt)Lbmnlw&L^j%o({!F5t=wrWEfNObZy -icouQMHk$Iy6v}ke+Em?|JjaSmGbzcj9crVF`^WJ$vHc>fqACzIO2f#hiCl(G(*Lzmfyro?()@_waw} -Eb#((-|Kibe~Hs`B7mThK$LGNh@jyZR=%2W?=PP;glJy_Gkp1{uXA2YBo_++P!s{TaOxG68}{5B$h{& -H^NW9eHycwIp%$xFa8fBM{abaVW^ONpN8ohzpU{5w2j3IUs)l&4B~w&4EOfg<Q*0$?CaMZpOj16#+V& -x@yp^Jz<5PLrE+30jXbpOu;x!C#P<!i@h%rlZI5;64xR??ZVRpi#n;Zz{8rNduw&ic3_M*@k9A}A{`D -8j>kkOPq#^GPiT}+ZZpM(C!|f?26@I!q|S32MF?ynvkERj4Ehuw5N0?oPrdP}p>ZF%4Zg~R9yGq^W1y -QGQCtfXqqH?n)+>y^ajc1QMmFWbd*gQZ9J+~j9(c=cL9g+yV~FOB_r~qM(ba0&XfK3G@8j8hk`Ph58h -s!K#Ja^E!_WIoi1aLi0a-B{)H2<0KIpLnV^3s!ACLtB&iKc@mC`4R8Hohut2eE%G0e_!RgSVZ?Cmr3W -EN}>y?y*Pd9*sh>GqL_yd|A(yD(17PHP)&86mAw?vC*+lNNCu9^QPDcA@PUWh3albVn%5#uiwgo}I?a -17hdH>9m#}*aJgf?C_%tH1U{0DY$1h$t`$LAi*ez=-T4}zu&|d=oW2Yv|F3>2@Xc9K{UdEjEmSW)mDJ -!tScH%X)N$$L-s2s|Ch;%TR;{RpT^v@bWroUkPa|rDbW>cF$bJNA_0g}MQh9y>^aRRiw(4;&;o|UbDx -y<f+Xe*8zBVqqt%XtN&7zNK2ZjG0x8Kt@t|4l4a2bo7<42qM-gg+C~6vy4;WVXc{JmSfIXUlg`Y1mvI -dPeLPfrB((8k=M7qv9{P4zEZo~BX)d|v5*r6y03P6`z4h%)XFttRweh_^9wdgH(<WD5;0-`<{Fv0=OW -+f`VWbn%>?ja{hg)zyuvQCeFzyBQcBM8H)JYMG89nf}>q)BzJ%Wm@2gw!y_99JR6G!%rylzV_oAb8*K -QFTbFo(D$gN8wN4D5A4n)aBS)Nr{3HXG<Pv3`r0NjoFZdvX5P)qt9rJgazvRfJ7JP*InVHjm)B9K|zz -Idbl2y<~QMrFY241|02(BLFaHoHp(20*;fTS{&)D>x7cLO)(`}%%@_jUiACy2!-#~C6o;cPflGB769< -u}wZ08N(ZozAFAROg1xnpm<Th+rmcj$AypKi7Rps!6hlh|sFe&X@@+C}nt5dn9ip~WWH(6eocv(3xi6 -LuTB*sN492FA=e_b7g+qS8-^zDxzjkk+c%<jhQP8%iq(t#3CBtLKn&Xd4CkO!{jFy98YBzCOzPZM_1D -vBdRWW_d-NSw4<(>mYMF^@>Lcynx%EO0z3D=;;5r?pH<P%U7wScZT!Fs(P1Tmk=4Z<f1w337r(ZRPms -Q@Vr`CcFX@uDE%+skZ6UV!izS^x5c1DNC82g{R@SuD%GV_8}<x|MTDF*Y8KiKYaKG9{#1@H93A{UJ2- -i%FgbmyERp{=!Tj$5>ft%xSkXOVPWA!0@3<gJ4n4`4^FGDqZuhW<6I^R`toZ_BptK@9P(eW-!u99A3o -^$kuh)Y;XugPX=5!<*qNx~dN+H4fU=x|n7^UAr3wl#1(S7Rg|5xW%S^&O4Zj~Un^02f!~$gXsRj#z2J -TM_yhO!>)@<ajC6Sh+s*>4$#3r1o!m8S`1zap<_vXdISlsQY6|8+g92&$O19iV)!Du*ue~s3Y(fC8JL -&QAc(pUsOltG7JTcC~w2BhH!&QYkk|A~#dHpr;wYY5rq9wTjAUt~qx^W<l$SK+b%0vKqEaiW2TI@Mvw -B2wHF4LFnz4BlxA`WBr2z>BY#(OqT*;zcKS6IoD&P3`7vF--_cH={o(`g(-$?Ijm0n#iZ5reOy@E*`{ -XT0^(~k!YbI*TB^Z6;awjpd(ejZyTsghP86XlyH`;I>X5}YNNe=WuYL)_~d<ns314jRFGgN^mTc?TWJ -TvAWKBZu}~?>SXO|64?3S)VuguemH76eIcWHaItcRrWR<_l_##p&k%y6PDrSha#VT)EVttneNDHb}dK ->1%yNhwE2pM_>C)_U-!O93+l_6{sTjIG@0210n^wh-Rh?mHe3(|OcB;`9DqxH8(Q@YiBII8716td#R& -^#%%#3f3~$W%cK!$(RFJi9WZ%H=l{RXD=bY@8HekCrtRKgX3_t-ONc7deL|=n0jQH_8O5d@!k0t%AIg -p)0;zT3e`F&Iv4XXk7^QOc-dzGomQKSW0e^EKUW6{-*W;w%l3vXojJgFQOKag~|$Aswy#%LWL4Ac|j> -L5hW1>F*`>X6+VR*{01anmV~3nkyPy@>%cN-T%2}qTMs;(r8`f&!D<1Cxp?g&|6;?JA4^J>$S{;$=xF -#YysZ_hcUYLR;ya$L2$Qwpw=CUQru9mMGmr#b0R-2B60x+GRPwL~X}!f=FZ7L!s^Aq7tP~Nt2rL?y3h -O}jS$7KPiH>q%C=LBGRALk!qni@7E<>Zj(FMrLM?`8_gWI$9=Cn$3|44}GpD%CsP-c#Z(aD>pN74bIG -hEb?;FEXZ;W?zz-C&@igq@YX_;D--@1?OVaCebHF~*R9HdGOLtOpsQuCR|4d6CK4br+?5ggvzjH1($a -kp<6HWS3Tt<P#`@^j1Y~@_e^(k>C*UTWYK&F1->urz}z5JsRqOag|$G3$sD*JjW-qhT!t$fti%%)VEJ -*)0dlCA+H!!7Ltn`+}ba!G4`3Ofz&WDt*CG!WrKA{xMM+Pp{rQmpjGE2YgvkpJGM<{Hne3!QW{1@Bdb -W3l#vasBD$-JTP4qW>1qy>!E$#JPJ7tOY4rD`w$UE6;n7vnWJieXy`#$vTViu(V4Cbj&cj@k`_VfcVR -_=}8fb?uQVg5#Ta$Pl`MX1DyRLj)Tc&Q%wQh>kt&<d8A{BHq9R>qmMD5lukwz=@<p4&%*y4sNz3i&P6 -7uhr9MwhIQiP;k7xS7dF7I80_f-9NRQXXA@zRFiO2(C{fo;D)tTEy05{4{Awf!SmKdJ3{D!G^Lj{rvH -wt^qh@^J0rHp-i7Nn;$0F<xv<)VQIlhoGgUe*9+cuXL)foDwNv!Sbo4)YdjthxRQq{7^JV-z88b&~d5 -k{S_V>Xqc|+G_@~yjs=oPDkQx09>H%E^y)PFt%4L?1A-bv;Nh(82|KrL-%^>W^eT=;v=A3f<J^dqXv9 -nG1*d2F-I{=U4u)dH(3UMLhN4PkT6AZ!HkB$W`{D&9sQGxpP7FX(U}NhVYlBdMjn+0+gIn~|tocwH7r -3pxPPfiO)!`TgWR?}zboIJlXCJ|+&iWo)XmYYU&7{D@3nBq|gaqpIrPV3rE&kmT<*A7s`lIh7D;l<!2 ->n5p+r#0Qb!KU2ugy-E$uzzNd&|9S#~WR@4x~vk>@ul8V30f(Y1CS}=|Vlah~i@{?n1Vso!bSI?Q@AP -Et6>lW(R3xpwScGpoJB3!*#L4RIVK&gX~4Cvs?6rtMc5thwQp(Z9DBDTwHTQmw%~IQY{?tuAZ<9bxu< -CD;LYn*E&Kd#XC(t;$52WMk7$k9*9;07j?7<9XMCi4mtlextyPW3xA&eGQGNZ5lyeIF0Yy#YU93tRoN -QgXwZXfHDr~&8|>{~^Yz>5i;I_P(V-{>u<hlEx7KDM#={&n#e7a}-#4Ba>|S*Vl!FSkhgJmAfNhH5pt -aCR<=XYsSa8=o6ekA?>AGv^4wTOwuAH-2)mA#!QZ=V4%^F2!Zhl3h8#?}q?+22~b?%!5WZv4OMwRYJN -<i{sUkS8|BQ7j6Rv5XMKn&30KKiOW8jMAK1cBF!95l>+-DKamz#l)1BH!t1bt(Iwu+l{RoZ{y|F!z(O -mOc+PUq9If54`t&{D?UGNgF<&tum2Mj>Yp?38j25zI+}ScmuVoU~v;u1~epzr20KO1R8-7#XD9K<ssb -+vk=F~G~N}POj_c2zS<O_$t&w;R_qvDn#5(Jo((_$?D0N3qu8b90f$zHRk9~2YmCtmu7Z;T$trV>kr% -|ypm(yUE3u6Z!j#Yi82lYg3@R^FB^PrmxdPCZ$!(m<-%9}ek8e-HA3#*D>`Sovr=p$>dVd2@O9KQH00 -008031s8R-}^q$EOwm02xC703ZMW0B~t=FJE?LZe(wAFLiQkY-wUMFLiWjY%g<jY+o*LdCfd)bKA&~- -}x&hRMnZxLXahSogD9US6qr-vm#46QNArFl>>*skemnv7yuN-Y&O6Bx_cg&0YTYYmk*~>S$OpH^z`(* -2VNBUnnlrKTWt#wMNF<Yc~LPwFY|O;iAdddI{Nu)&0}+&m*%S6+shp<GMO#Q&H@q7WyZ@`N`rPKUQ)T -(2W*?^O9i*$<tmkP1GY}S4_LY4=k)Kz_wPFjEDXg<EH;(Qv(mu!It+d$St(*z!F|fBMP96bQe*`5^1j -Gl_S1MJ*5Y$kZZ|kiB<kJtcJfJ<CBS+^rqi2oQRGF?>6@uHJbvO!VJ9x-i+;5&QuFYKhv8^^GoDVP$^ -C!7kA~OR4}Xjv#sP!dcW}|^0OnDiRpO;$SL`;=1U`8zcvcbu{p{m#8Ubl=`+=vW=uD>3{g=D@@ht$m5 -2xeN=ZEp*!|--`fA{ccUkz{WZ=?H%yT`lH-OUsp|EasGs?FJXc;5YUr*pzS@lDC9m0+pJmeq>o3&vR@ -VSN>=a=6~)z?FF_Xm8kJo5jd>wkh&t8v~zUuq^cmB=_To&$pxK)9@Z9`}y)>pf>T{+kxK5_wNRJGk@u -HI*C}YD28pU;NSIzgX}3((Hz)}oapg@&HDq|jc&I~e@6<GRl8izTq5D(uUnp)g~*H%UY@~1<XVIs8u| -!JHAB{0Sma#b&}zRCtgMQ&`MwfmNT3e_bO8kHvDgYG7sMqylvnX8U_46{qgf7bi=8Y*=uujTa+~6Af+ -F>RvL5fVQzWrB@AnA;q!jKKRlo|lTvbT--{hu;bnv3!dl&%>uy-&_@xsCW_bbA{{zswE6C?3<{wwwtx -ZTQWAZ{rtUR6a8wK`y3|9v<3$`18AovPRm7&~E)h!0nU;<*qUjY&!L7-cC_wQ5utxG~R1<A+C3i~ssO -c^F>@Y*+A2ROa!Ms5(m3*@OT|85ILIye!qstr(5w097A(iTeGYzY0|dxGJlT8mX(IU%_U1VocF#xe>8 -k$aui+_tgq?=rVlYO1jb4=<#N%q}DzG0-i4}Vaq(2W0cqxy*i7=2~0Yi_!}likYfaVeK_1+yt0cfXf( -Q+jBg*0uC@iXN$V>!-Q7pGchTtX)BOXO?aAG3pdS(0?#<;<3XTl`GTy$Nzonl5E-%!jGsc;hfC<78A_ -et08U11W2)?ysJV``?#^Nio<PQ7_-5NVi|4z+*!iG%wQwD~bgCz;!*)-o4G59~!^K}mIWQOw1$uGb!? -rJPIU=Pbd=L80vGW0p+;OuNCpJces|0dIvhk3C)n<92u?ct($7DY6biJ+bGM(uW}jVajB5NyyH_@2Lr -xGK-)U~Wz~1qYV|1f9t&5ijAYTBqLd)jktX;aZ&W0^m{rT=60i=;TlLu$I%En4gw3e|ZY?oND6Fh<J1 -uOOc5JT#E#M4emtZx?qA$Ar_+0Yh~qDg6jY;!677C;ERnY7C<L53c{fTSy_m9&wAG%$7kaa{M!#)MD& -Q|KnKGM<nLTmmBxfD&SK$>;MtxH$J5gvN1w<SjaD3fFWxF7=I!W*(Gg@g2=Fnr%dig~c7vIaS=4h8^K -FUoK#{<*#3_$skph1pmck*x9`L;Db)G3?i7YwB54WFhZW!N!pUhwzNLm8+>H2&2X*enac0HXce@dQ|h ->|*(GtxwhFqDF8<0ZJIkS4jkdmIl)^3KD{#*Sd50IP+VErH!B^6hd(F%Iq#Z71w%vEZ?wNwd5Ha|Tfl -K+pGVr1h(}7u9e2L?Gf58Lo*Sv}WiCVgCl+@@Fnn1PD9V;}65nH;>V1a{qDsfab0{=!SpEWu^kwKUq8 -3rS1O?I0!uN2F>TAk3;yqc<a7thd&05cv``a%!!W=0o^AL(_zb4{nUN*8;-m0JrM^_Ko-1vkO+PM=T8 -3>%k4zcU@1T4iGaWd9=7{?LJ_Cnqn&}he2x~S{}qRQVX33IHIkXEqNrDjbP-@gT;*||MrcPsxScqSk% -py<(7=EgG{HUK6ZW~ZHkUo~bc^;D*UeGxQ-}1!Ng%<ApQ2S>RvBLln+hDj!NibwMQdOf00Bcoio$O1Z -pST1c@&ERB43@D9024x9m7cTa5M~E$W$C1{Ur9UzBd*?zxVbb&3Qt^Me&M*Ua9RcQwB`qZrcxsE_3-B -ZThNZdd<r;SB9-LL~w+^LYnbr!>g6ONqEKSrj@Xo-3mv?g8^Hku%WR<i-mZ6H270+NJwlB+v|>oVD`W -TRe2$W8fepCj3x3EbVmz&+3mN?iA4YUIdRapPlik_1?;BUbHhryi^!(8a?DDI3+ZEZ(h7}L-N0WJei) -_Eo1~wX5R_bz5;Z0^MUD_JdIzlN4j}^H3fDj>J7YLl`w0j$;2HScXYfcR>mK6T7HKNym&yu2KDLlc@P -m+lW2(hBU`{rL1RtF4$w{sGo+&@wf(u0pG=+u&s!YU6cOl_l07W7Dl5b&j#<rVf!NELGB_I<!*svCK+ -Ja#otqmo>mwEaus5lU^4=s@*a<`Q@6SnCEhhXm#aI8rlm!ZthM0R!_Uc3)q&Uo^SF-&s0Ey1@_+}DEc -1S2}LQI3BxKd)Ad%unCDdjfPzl(e4@r_&~)JMe7B;j~?2Zw#chS1q907+6q!e*|k(h`(A`$H=#U18<D -~F$0WWYJ;xTfuQZ35BrOErwb9D>S?9ZDtqPXZ@_;0TgBhLE)RjH#zie)Q$ztWo>e_uWx$*#&H4~}z!E -LiQi4Lckg9ScRLu+RQ7XY4Awu-@pg+1!G}!Qhujxgt^P?IJ(`Bj^X_XG$QO<nz;13QFFu1HpdqHPb;w -6zw3HwPpHy0`*h3KQuK`3koMY?8<DhzV)UAcFlF`E>^*&ali0l@deGzZP?DIwOy8(k&4qFR*8Ndm%JA -C~&yy<5@?m#}*t0tF6?MssFHIR&bQGjMqTE0-CBHZsvAy8-+8?JwO>SqP6N?Ho?nPXeqE@I+)W2z0Lx -yaTI(X~AZHdGT*-mlv?_Sf1QpkQv-uUWQF>MQY!!>f*CIS!i(UNlBw@rOYgmM6e&K=RFOo+0a@o>p6I -WLu&d*dFCn88;5~dbWLbN66uhQUm#vZ=h{U+25bqhx<8)-OWzo#9_X|~NMNe+E~)(^X3!{SA;`{0*6# -E`gn=$@owU)(2L-7V5A=Jx#@tIe7Pu~CZ0ofF+pT20GTMOkG)&!cRnvmujxn(n>9e%}*OMs!NXiWv0+ -_vRs!OuhDw-xQH^7i&FtahQsXWdU=)@QfZq!tg&jvz(R3ruI!bvE?&Q)#LmYcz|!o4yGKmpA&)3h*<R -Zw-t=W}rOl3byhv^UM!Ui)2@dF<KD5{Aie1)dNmn;oH9R&OA#5E2t;Hp38R2J%tVtJn#>1hbwLo$Fq$ -L~VkSd9#vwA5`23!G*ga?nd}^ZweN*AmB`Xtf+m0w+yR7vXnGC7%+<>z!ms~Z>MYx><yR$OF^}Tl_aH -yL>$4>C91mYyBcG^NjMg@-733<Y-ok!UXSWUDxbum8vS}^9@cLEAMnx=^?&1M3}RY|NJoTdUnyy)Ar6 -mCYGs(H?{#Ks-s+%(^2mBGhG}Z8QVC}MS?PC)`n?t$Lqhc0Gt}kC5&PLp2Mj;hN>HF$VzyP5<XD7)Jh -3vCg0P~mqG}-xC&Zy%s77QKI-4mRxl`?Z_g%;)l`dzTvTIdjqnZX5pQ-Gu>S^eQfWfxLaLT3v4G?l2% -mR4~NVkwS719|Nb&Op>tF)8l3N>C8z6^e2uabN)s8cO6!5g^=VPmo+FG3T_Z!4KPouJ5$h;1hnABRWw -yWfPjMTdX6V*j9#Zk3*(zgP-u&ezLuc*A<-c3xJp0wQ6rXEUcHKbxr-0&MAQM#yI~ZRJ_YAuvc~2Bvk -MKa0K}KRVJ`YYX)tMF|!)v1K4;k|-b!vNoL%?j(q%DFbN-h(FDqin7xLoeA*!m<SSeE4f@@<YK3x^7K -5fRu&hrMQuEa3s%I*+3+;gCH)1v+lUO4MV-KV!LC)edVxQ!1o<FX3%uCMLJ{Lc*^KfMT?W>RO=<^iG0 -j?h^vs)Hi$Fd3R9EdR(Ha705l&SNh*Q{|uFY%~G^Tb03SN2-Jpoa==Dt?#lm@l7FH*CLJgnbBfS@Ran -BCnP%&0|LCmPC9I*3N-vx_aM^I^eZ2SI_3Dlp&CEYYa2`8{Zs6piya@!NH@PoOg~uNwWQ^S5pg><B)F -Jnrq4-;}GD-~qL^{!DbDjfGRdb;kBRu+S|fnIaKT)F{l`6a$Q7rH(b!qJmjQfaZTEsIWrrA<LZ*6K%6 -TB13Z<op1}QMu5qmTLA4#nZQ#7wf{G~G#2i_<+jyZPn7vbV8Kg?(OQu|VH^vxNo|=7({;2vD_*P@+mz -lU9Fu^2TOJ_)`<2_%Y|L|s*$_zOGxf&6!hl6xmu9XE<o6p9Upk1jBl9dX$iA+OvC+fi)0jbo!7;%{gK -V_?Jbe3|gQq7U&=u_D^6kI&kI(L?urn3}?)f~tfIUt3A^V(xUoFW+ikD3)V+mn!fDQ%a9PJyOm5~??= -p0?6L8FG^Qlhw&Ie4BqFlQ$dJZF=EPLfn%M=1pz!nPC&ox((Wn8n3@V~;2)tQDoak{q}!pD>`$V@cXb -N-pt83sn~M49-}6h(((eU4#VBz$=yGlzMW!dlGvrNah<+02hw4P`8#nm2-fMrP10oR(^Mrm(}SCmR_z -ngui}QkhWE~@>G@Z$B*pf{Qc#-kllYA0^J%}CSuqbUhHWEOrA&_55gFy5~T&zsfnDJq_Kw`vr__Ps*v -+-9btRY_3u{z4<d$^gJLn&CX{7mOW7KiHbP}x4GkIAEl`+D*x?3pzk^VYlEQ`SA8TaRODc&_ZAVPKFn -r{oTp&LhnGyNly}S6mwPs-1O+|ISU6$cS(S*%+g0G>0f}Ufz+AJ4Z@_iZVHAYy@W&d%-dazHw3)s89Y -LJ>7pc$?~LVz0|*^Q5IZ@NL<^Xa$u7K~iAj0XFM=d+Z2VXmOt&5_>)>p2MzuG7n0481j({$Nd^M_gSA -`RXB`3vV(iVuA6%Fe~3>-WCTSOmVtRQ2!QgrAHeHQDgx3EE)(6oe<(obK7s1%5QnFhLJ~FgpNAo1$Jk -2zA_gWjbM;Vc986Y+dZT-!$YYttvQ`INVXJomwX{kms?&WZts=6h-2b;=DtLA)yVuAu5jA}my9dyT%O -(CKY}$M-sqr`OfZm$xTyzWkb!?m#fv@7u)|Hs-c;-f9oJ3=ux&?*D9WA-jM5X04Ag>Rp1gqud51k>2_ -^{w>dKai7U0@eU=LKH;|6S@&G=u{#6#WiySaWLfpp`DUJw8VAA@fL{gyd>W1r^Br7m@&-7U3OCkOK^I -Yn79ibn-<gy&>L_AHA$qXOYGFC=2oDBl35{xJS>bNAzi$<6ppU|gC$Ye;_4G}Tzos^IUx>w|7Q$qf_h -O|{n@b<1mzz=i<;;(+W38!}`8`d*Z(-s+}sUWS@rDvx(P3cFtI#2Y$j)y&4kDt@d7`DGFvuB#$RqcEY -XBXF%E0NsgFRS+Abwmfo5C+eB*HaU-4yQS^b7=^;Axzuo){KKiDL>A6dpgh8oBY3=|4cPS2)#EBH!7o -MdN40E&PNU%FS9<gj5p}Z2TUFo^sY@v}eUt;(f^@S?ga?7p$b%ipz);}R0d+<wKXl7SjdFocf|pTec! -m`Pygs>3a|=`Ux8~f`qZ{FbQ<BiDs__re{GO7f9MIvI!K}7PGt=Y3Vo-*m5%sF`XUHXh2z-D>(INxmX -bhXT_V%*QR}$o*(<w9Q+fL|u6s}T*dT2k|iWBvYxhTykh&|~Lm$YxAq06!o1G_b3e-iuzYz*Q91C9z) -VlG(Q1AC}pzBlpWo06T5hIBw<k@6)v2%=S;*>Jiab=9Kw0PP1#`rf)+ov0Ufx6$#hd1cI_Il|&5743Y -&zQ`dyy#=o`>wf%+sXh}GGROqOy~Tz^)%sx$lhFL4QYDVBbHOFLR`r_X&#HG;e@LOb6k1gvU`G<#S{8 -l{GImNK=#BNugEagE?kk9~DcG39tTBB<5u31xrzuTs{1|ZxLNh!>nC0LbG0JnWZFS4n9QS~v47=kPG? -tJfrio4BZ5@Vq3R4wg4Jw%}y=0NH{zTLXT)oUARaVD@JGJz>aIXK>Jx_a936n6#Lb|t}Sb4|N9h#2px -jpXSVh=prwU^cQyf?X1-|euwDP8nY?3x`5ztbx8l0>Rpb=25&V)9|AKt$V$J)P6&yYd06MIl5mAjZ~| -2-0+{cLKx&B9)(HmgKvV^-S4RMKD<IKa9Q(C+^uQ))3-uh;(q`1e7bL<EcA5$y|{*F7teWy*%(@GB<I -)9&3z+DkE5XLCZJ!FfX4dNl}JP4@3putO^cH#kh`&8KPKAv>;R!(k)DZ?1luW4tC9y2<4hKkM)r(BYc -UFktM5lc)ai62%2&ckV`$I35NlGb%nXpY0f8IN5FNU<fV{pWWFNR&iTZ{lZmzTdU5!#LK1isY2rOiYY -lX<I?B^c7MTu#C%rBOhmbx0>oT26C<O$oIKd1H{hUbD*;}gbiG=|B^$aEx4B==JP*XbH@xAW49Zusp5 -F_9d5@#*jjj)NbfQ(J<@hb@|BBCg&ZViM`8UZW`2?3?kb`>)?oz^iP$G}7?1Ly4F!|3w+ckkI$9h1XS -H{k%tsLZ6BMmGsTu|>QfxpJe4={11*wp4@1&}zp8=*z>EWyiZHIyBD`qzZ`X9T14*=<lNXXrAjbNXsX -L2;7)n)o3)m*Qx-DN9%~SFdJ2|+Bd@-^}!g{yt3+#c+B@&IBk>gS|DFJaoHVa?BnC({nXZEv9K@~nD; -|m8?gDdGBUt=>U$G*ixm2&2D_6i(JbvdQUZdY`ybxPO|;tNWjDG46gJV>GO#K%_&pu0aqFUo%s}QaET -wrGNSsY~Psb>f#93WB1+ws)yVfI|4V>mg=RfWE=0EZ1=Bvjxk9@1Egwx2BQ3Suegn=KZM$|}_@$=@?7 -bnV`>&j&vYaSjJZqt%lQ+%8LRU(eg+jmocgGT56o_(=~#pb=&WF|{n)}qd^(NA^K$(YRNcW4;k?|WlB -L!C93CX^_>*P>J<^*^GUo?MrWgtjW|Oau1O%!wWN7Y>nu@Y<OJ?_1lW<~(@)n_JU?lrQ1^mkZsGvgcs -x^uBrU4xGyMEgPPKUW-&8?!+*CI2}zUR4@d|pQlbN?O1+m(-J|)2fOsWd)M2vd7h^|{Q-DLhxY2dLar -bAXuJt(&fXo5hax8+a<*UMx7`^19OQz!f*BeX(vId3>sf3NDimD`q8H95rTFbK9(@3}wD6;b6Lyp5PX -uva<niev^_brU<J-~0m;1-@wFeE9b?uujqC>PT9~US_))jyKK$ou-TV7EsucGssN;}_Wpft85np(=-T -(ijm_1%#QcLVjsQuEw@OFq*6zZA55T|n+geQv3PR$Ch~fjN5vv%b+iYTv>-A6&R=2qW!H)af<NtO)Q$ -H5Yo$tAoQ_F19wdAA~=(#XeH}a%`RnMw`dUziO1*Z1FeX?RWkcP)h>@6aWAK2ml;P_EtY}x4P*F004d -#001rk003}la4%nWWo~3|axZmqY;0*_GcR>?X>2cZb8KI2VRU0?UubW0bZ%j7WiD`etyud{8%YxW-G4 -=CP{f#+A;4`mXB{h{gzO?^feXoAblIHMp6S7zjJxNi+Zf+pe_wUaqYZ45dk~43epG!`_0^-DB+0vlq@ -{5AVzw~WX|a^)n97yToidur#w_V-;}-aQoZ;Vuq_t8zB`R7kq^6Zs`i8Er-(*RWj7B?jVVs=OyM?k;s -!9_6U+F?N<e=&5`ZZN5m)c4a)-UCz;9pB=gEn5Py+#PLuBg;JBcg?K_4MGNFuBdbc4nHJgX4o%T()q_ -YBW;I+BA+D*?qDb%cxW>ilPB_T0rky0{L9zU-*bD$Qe4yo<Aj}p}JPkcV3cmj9qE#L{;GsTmWngYGa* -TPGGv^L%6&Ux`3(YSEsF#YuVh&=Ctw-wUjz`#~PY}0-_Y#7OdDm&VCq^f#hbbAkgS)LxrJN7uO*!a4+ -z9e*%YDTU=c^Rb|#zv+c++l-wXVdgVXQC1YfDT?~)1AG48bHq#MYO0A1}-;Cs4E^9~Ue*LUzOw%6hy? -286YB?IsX0XqKBC{FR5*U#^%ML++QC<n0dnp^IN|g&Iy`1znQLVzqagbT#7>*aRq*<XY;}7Pfg`QAn( -gaSpo2^w<<f19;$zgjNWc#)C4v9QBO~IdF^V`=i>G|Q&4->L7aQJ!lr|fv-Z?z<H##A;_(v_Y=%$$R! -%=y|*duu=3YE`v>9ozr$Q*cR1+Bhn7z{5X{bgM?wYf)Jl^zG19Aed)%2>9{7-DoH7rtOJJmTn1aC$!h -drBFUsP9Qk5b){U|>}I>;7C_?>3|mQ-gsn~pcKxZ3&jQL=V%RvGehS!npJJ=Kp5<nxU7GB*VqxTP?5F -Ke40i9(xwT;2&f$-Le(`Kd;?}5w3aL>fESVCKXl{|EG~WPF87juoAV&uY4k-lg%U&PV09`iXW{GNp1U -MzTLQZX1o<vH{D`gk5h(y!|rC>v1X+l9_dRLOK3y!EIyD)3c2G{0>h%Pr$Sfe2owP;}gHXFh!I4>U%y -5IL40j1y`y@~vVtjmW>KB1Y>Q%dM5^wkZBKJKNAJI2^r0_3XZng~-U7tp>wFoWcne~*Ntr6E{?Y9Skx -^OKW4pSrb9+aIJ0{#?x!svI3=?MZGFd8Ob^y8h+z{hL>Garusf!=c)H)F&?qs!=F#ialL$rzjO731_S -qDqoDca7U5O7oril!zq|tH}Ez}9aUm3t56sNJNOP0b>9=+Z)cq=2L7WM?Ikfc|HfTvcW;-Ax#$_iTvX -1=s+=$(Ja(^EBlp=NF2b(jqBw}^>DaGvO~^!DOI@VN$A4s>p0=4Is|ZyFz9RS5$}Q65PVet0sQAqglZ -V@}0pASKaTcBapTZQ$L33~9AH@l-l*_sFy^LWax(LweejBq`&iih$<Rc0S8}0K^RO(;2UKp-WJ~JM7Y -a=shb5YB*bLY5ov6Zo(F1sE&@!{@6s{2r4oM=#cFvDc%sq6K6?|U_7$k$5b5+(Qdy<|c@)~J$w9-%*a -XN7{x1+F8D1;K7KsvT{W2Y;_Lp~i7~^rd?G4N!ccQ;ZWR-`L~K!L-HrPJMkze$SHZvr#%_DdVv8cR<J -C^Pev+-=4iZy*?X{qKbioS?ItWGsj(nc4oHHibu87%s;pE1jCi}^O4T|`h*=khMfh^NLe=_C|w%*3#G -@CEnWw&pf^_Hi+q8F*DsC^nW1)7`?;j<XO?~-?XN={4397&s2ZQ)`IAK0Tq&3;xlr4agu|XYBpsA!^G -`ALs$$b2pfk0fb=qk})nN`{pI~#CKhExu4E>D81V6u`_O7&92vC>2B=69&bLISWC#~Ma>>x{}nHCuAZ -cKwbT6#wCu;?$RUBVw?Y&)WTN-kH96<z11mdQBVnop1cU<x<BrPz2v3UX*(6{FK~U9mE_S8(C@49OTz -FJRiPjexh3UMU3c1|F4RbXnE#p%lw$Gz#W|jc7;T`35ZxXWDTQvFQ(Hs-CqU)0jxXu}CcrPo0jpxX2< --I-j?px%W)r<~j_DLtK87jVd?XGaT*lp*>2GUxj3?1$!8R`1KJ~VQIeccj3BglYfyeyO9oExZ%sd)t3 -@Z@V!pqUKXNz^y2V^r+gRcV8*KA+Jmew4NvW|n9v--iz(u_xrt+d#n>IN#R>w2?oS?Eef>=0pCly$yh -2XXrAAyK$fDpd(5;jSrdrnK9~4`}X-5gRHku;*)H6)&_vW3@A^}F5c*>dF3lexI3vR2)_H|~d^}c2q{ -1?Al<el^FgrxFq|K6pSXK&xlF0bC5UtXNP;d_4J?b%=7pT9kOH5?8^>R&nk4@UD(OUCb^c2CN-Q-x<$ -`aW!Xe@^JZizomcmZ$ud=JGI*hSF#%97nfe(bKOO`-`~sMWB%UfM;J1<}(SL_yT@Jf;%^0)q?Q@c`;3 -|s>09FRYkt!qW)t{<=4EniXR=AtROU!#v?$lPibH3ye*G-**`QR_nkVRKn}_1VfwAu{)*NTX{^+|5e; -}-hY6&Y!L4k-Wxej{7W*E-<+1S);xWil!s=VOb<1awUumDX(F@YT87Dq@xZb46c2!3E>PjM4g)ee5p< -AW~yA4;TF?Q_w$ro>oWE(a%JLIidzE<6PaeKiJYU!3CzJP2kcNTRMiWf4DJQD!}gWIo0zKV|-IAFZri -6fLlBmVC}_AmHwA|@0M(QP;wmj6x$9RT&J2;X`+KOK9-R9swhz%YNH<izuhzSn5`Jq{?gx)<VB_(R;c -ZF__OtNBCocj&{14-dZ$;RY32f`1|5eVKE$rkA0TY#|#&Emt_(eu0!d*pEUR3X-SnLrCq}|CnxHiD>u -p^~hFIr`?G${X~cNJKHzj^L+z*@}LcM<6C%0wXF(6*%O=46H13~uK1l0M)0MmQ-1MJdeq}_{PgGF?Ta -yn4flQ<_ZHM`Y)_hdh&s_9pM84t5%pcJ0p;QH#^9yS-)ju<r$Fn7@q|ZZh5o;meh^yeBJR@v22e`_1Q -Y-O00;maO7>Q=5cjtK2LJ%?8UO$&0001RX>c!Jc4cm4Z*nhna%^mAVlyvwbZKlab8~ETa$#<BaBp&SE -^v9xS#59QxDo#DU%~otSi9%bWw(c-IIMwg_7Yss^b#cA25nIYv`pLVN~B9tcHE->y)#2fCM_u&^ux9O -khR5`hx7iTmDNrg$D|%f|IO;+vvBP%TaHF+qbrtW;<*qzC$+LHoZcJ#e0(gnq7t8!t#|lPtQz_qFFx~ -)XsNAy9*rI!Z}ZFByN`c(y!p!&o3ppS{mt*bAB{#u$*pB@x-eW>r2k>W;4>bN>EFdxB&Y0P_|7t}n0S -`fNwo=*!=n`w*70R2?N$&8FtS1`B?=Tj8xi71t(@WJ$ed>PN4M4L4T)NUHp+3NWO|Lfj|4np62Qw+A1 -piS8rh01mx{oux^xm)+2Zywy2=98M!2mo8M|?SzvITqqAs~9kF2(0U6)L*2~P>J0&;?D#UQ+cbX%$LY -Y-ic;SCmyZds+RLvi7*#t<LwZ<yW*L#o)UH79-fy+sv^3WU=uda@F0mhX8fSKNsl9G`<8PCUDOtxfJq -n@ffNOroQycT(&q{5)`J(eeWUf*PZoJEQk<1-~OiR&e#kv86!ktXf16flQH@p)rM4U`!+aQA^{ECc*A -o?z}M~>~Nu_gEtsK`BLgPEtt1PFjZnMa>|-1?bw!E?wpCuFk|BeY#f;+FhSgB_kVtuKF5ziGY!~i(xE -1KPBv&1rlk4k<;WT-CR29U%3=$aKx>Zs!A=f=Q1>ao-gRlG$rDjp@&Bg^-*Z_)%40Bqm(;fkqI)kQz& -^cBaSyRAU7nvrwW3_lLMF{v;%h6+UYL9f8K-z9=09sCW|WDbg3S%zY{V)TdTr+mQwxF|NR*F8K(d7rb -*gRL=o+e6$m7~#bsI{UtQQ!?&!j4Jg}ifQ$o?oQZH|{Wcav#Kr)#&-{d6f|pN`1X^Z1O>Ycg-T%h{<d -_44oj_ExRd|B2rcy=JNSUC*5TZjmCrzGC;nKy|4YMu6lc<hNScE&nXCR7xs|Qs<@CyGbN>w$gdalf)F -1BDg&#;wS)&aJ5kcnovJe1p2`HbsjO$Wksp2m_+z%Sqi0J01sBr0%61oQMU>g!O{Hf#k=okY+0|@!ca -61;N|2KGy?$uYr~ab7yAzOy5t)>zld<5F49Bxt2w(!>xr)=f8u2=u8h%UGRB1dr!YFOU=^lDjIBgL$0 -$o|v~=}&`byEyM1}(3bdcNYG-GOcbi#)G{^e94Q6fFy9xoA%HWM!u_P8@w;U^r<(e{(ZH_f3av4th<1 -KjAfUOSTYJXw$Ltxzk_B$yHA2>wgiE!-Sgt$-4W73ZRTf@2i4cr0#vDGn2qZ_2o3_-jUgvw~YU8DEa+ -IjWiC<5Wmq1!%HyLz8w%Xj#yUybSLHN4IP4vF1^xg7_z>zY^aMf17p~Jm5ETwoi@zKeBj|Y|y$CK+V5 -UEe}RI;YIDFY6Egou7aA1_3OMbS9&GpV>51o5XyhZQvuCk75zk|njBW*P)g-H_DgNKT?e+#?TS+3Oj+ -YZ+lWJ%=x;`|Xz;gCR93N#{<K)!M>D0hv;`r{K{R82Gr7Z3kxa9aQnOajl3Wc#jDXRWgWq>Y0@y)(3Y -_ypZHLFLOcdX?0tcOv02&kC4fpM!MLPTvZ3rtEx(Zhw`)7zS?^@v|XznR{KWG0Un~x9pXF2}&mtsjOS -}4d}>}$g&epH_^$hTz^R?{*2n$Z=rY1El9Q2bB=*J0=(MHDgK)^KXtQwCcCiX2#5V%U@fn7ZKss&k5^ -RJaPxQLFA<{6Oe%nph{`og2Xue?yYR<l)X?^20d3vYnPPzkk9!=3_swoDFe-7IV%B7|Q_gZMTJ>`n{$ -9bUbI@4luqyFCH<I)Y*?$*B?IJF7nGy*Vk7MId1s<K=V!+3bE$hFtlF8kyWcU{j38=RFIstrNz;MjMM -7bR2Y8f@u1JmKKF#iOX^*Q3m=~Dxik}iB40!$=&aTD#z!wA5Q>1<3wFM8g@8Vf;vxJethvMZ=$jtH2a -|b*_JkH`LSMkQo4Y3%tabq23{6e_ZAx!jb*BkL7BcEAsp&>MKed2b;p}!k=f2!zJWn*4`02S1BjinIy -xs`66T%c==VmM<8{ylKYJSbZCqrYmmmvm-SfeXoH?dNy7e{!H)lkM7$=w#r{$<`kn2c#9lzmv#c)3$K -ER{|dx_kxH0AnAt`Y(~y5b%~mAm?5g`x?ZQA-0^ZXkC4s>0|0dQRieOVD}8svB%;x5L^+lCriRC#(8; -@i-_Yzb0rEW`MD>Ox?`QBKXiy=q;yMax45C@&<&J~my;8*6WFNI(JN+p3-S1POQjwManWfOB7^FpG<K -3eoL@aW+&$!1ch^+S2j5rpG#4-Q1-=Xbidp+0OGsaM@fBI{Txl4`YgNEP&&|fB<7RmAKyRpTzPn?{1O -3Y#1k94nJC5(#mouo<X?Dw!w>?{3mn*syN^1MkDJTbzXy83fR<xW%OsQJIvaFqw2i<+T0F|709aF4VI -rPk_I0?WEHc37E^x@}4{&4l-#~JH6czU>5Tur;M`1y)OylBP~2ZJI3Lhh*e%$UYk^_Cuj5LqvppG8FH -tT9{AVw4a-pf{UQ<50g#r{+qFhF_+Ebvo+AKV8;4$q`Nx5Y(*BV!6fWWKe6XE^MSl5R%^ZB>$(=U0VI -<*YBF-eV*S9y}}*q_GaGz1Sa~VXS;Nx{{T=+0|XQR000O897^_9{T7%r<_iD-xF-MrBLDyZaA|NaUv_ -0~WN&gWb#iQMX<{=kb#!TLFLY^bWp8zKE^v9(T3d75xD|f)ufW*ju{6V_-A&VNx$DlRNjA+)c9WSn+e -Zl^Aqfpda0$?g`q1Cra}F*9L@IXDcBa)sB9XwsxqRmeuRFD4i^aM(eJ2(RCU>ps4C5=U>fVTj{e5=ko -*TInXJ;4eZYx+N*1WF`)2jR^>?_rqjP+VnY;|B;W7=A-m{CkNl`Odt%xt+~jq;1xp6l<KZbd2A((W=q -87OpTYvjz)cBe01y?OhWXKxlSUjFp#!<)Os-RqxUzWs2Qv5hc}8%OxeZqIY^sT8e|s?navon7(X06#C -gPIV~HGp0pjWFu;J&+A@1#Pl@Jumx!KT@7MCIa|DN3c6)#^><O4+58O8`k)1o%6F<!Mm4fza?SWXmo; -D2B0nqpt^;lsxCl0baNL+~hCefQ9(J8)mJI%bl*^iH?ZunfBj?2#gU|W-xqHq^)vV>F?>H(YKcm;~on -|F(*orI*s;C&q$%C2Ks)JvxQgvZ><v9?m#5b!Nj8qh?J(#U(>^t~)ZQTZz;OGW;y8Sl4$yg_Nb^Bd@G -xzHeF0l9=9Pl%5_(oWXVdJg)KP>HpZo#6c9Nd+6;<sLCGrM~A^6n~QSNO2Fz80VOt_6jbYIl7#w~W2* -SSz}3+zvL|Z)Le<>Rxo6tb`_0#uDRilzIL*p}&T+%&Y3wE9!SQ^Z5zONR1dF)M)`|Z#InAwPllcd?$? -PG@^I8{6#flxqKYojar<x7ZP#?!>|9283tL06A`;et{?$`cf;$#p8=6Zg7j*)0z_K#IJOvXDq_l$1P^ -aOaNzKJS{J_y<n|J@1&Y)du@tQ%H><_kAPN}8jpP_(#I7|td)?skKuO$#kJ{L<Qf3Rj;dgjVB7@w@!+ -0l#n2|B^C1fy=d&DN>N^c>C0h=KfIeB;su~t-huqboUhroblbFT_>XoXWUDlB8`T5&@x;j+XQPNLWvg -6;Sxx$Ad~?^F*OP;0BfnQTC-u%ps*Jaf;b4;qdP1e`#~X%!c8*w&%y;k)k3Qh*rj?M_;BC&;$qdjE{A -ajbi1TYb=Qj^B~7wo@x`paWat+f5C>0=<zbP$0@bd3y*ie{iVYZgT5Gx#~98rTu=rmbJM4!_AY`@2jV -Odh*@VKVH9)tLs4JqJH}1>7SR2Jdi_`Td5F{;N%j*b0duiT%ZaE1$xEl#GKwv4;mC9_x09X39}cX!Q< -dvZ{+=80P;2kv6b6wyLJ$FAtJbywe=|jr+yk4I`QU5SvQbMt^B`b-NcGyoYN+R5DuAN6vg1<kSGsq%} -b*?n<DsnO<u4SK7^!ZMXR{_1eMqcDElI(Y}jA#?%oBfMbYFZ*ysXz#@>-St~7h`%X?g`YINU9L4XDhq -1q9L5Lr>xA%+EVs<8&Ns$*~AM;8R4m>Nq%lK7NOa>%Bv`)aW9R&KWJ`MVDc^ahcVe(F7MZO{Z<YzX~* -(@@3)TfoXaypXDs<^bXUUewvZUdI%%v=Uo>4{LO!3djSzswBcZ8=#4C+cFx`k!k>nJHa)S)<dRoPIS_ -764eCHcaBm*kZ){~7@TR~8@2yg+go;>BE9`7LZf9(?9L7XWci(f^=_Ze65B#{?zp6qUzEJpB4TVX54X -tBHe~`YvIB~%gF#c;9igD6qSoepX}9ru&kuTt&!`BlA<bjm?6Ze9pvfKTPgufW(hj^st_{X47tAtDu1 -7TiDCpZ8zreaHDYBCrs6sQ!^l+%^0aUR9X{F&G2d!y56Ewe*4Kz=bdc9_20Ik_U^&Q(NSSszR9_<9uf -IoZke2p28+t3kAxyN#^#40YyR~ZFmC}BH>h((Y)iP-s`n-ai$4$Rvq8lA^9_(5cKIy(1FgXQ_6i2Ebk -SisU2FhUPEN!9FuL46eMKWf*YTs+ap+2eo^bfg$27mJw|^*Xb7c6F$)N_~6fDpUV+UPRWY*ZIO%2Dk1 -v@Fgo~>wNj?%Uo!!+_&@j5ed@T$^G~iHsgQCJFOp{+)1xtEB!w@RU6)!i2WfGSPh{CoQ5KyolBoz>QK -L5c1}n5#j5hMo1e2wHVfMbN05XpxqPu`AR#XnS+XEe=+rAx#rV0EGdy>_%>~E+PP<rOe7*<hRurOEy! -^Q5T}4%Y3qf%uYY5S_#c#L`;#*QbQtt~D#8y>7LoP8b954ra*E+NzW5ta|39~tdnJC=B{`?ryqShfKe -ukw9@F6qgDj7qSM+|}gJ>QD*qs@nW=nxD<rd5xjQ!^qM#THlR5ygTEyu=^T_dO5Cd+>O>1;0_+h_(-> -MkGR*PHavCAS~u7q#rQC3mmjSF4P(tdp#6Lh1I$})>E~~6e2u+g@CHD?se>JBnD%WC8mNINV8w@G0k) -e46>5U#aYwuL?=t9ff|@Vl{T2=A>LueRtf+A5S^mhi{!`3%;zC2;EbT8kXC4UY_;$maAVJe{XRYw$x# -k;6OcNaq(TKHoEaWW?3_HoM&p>K)UtsP)0AT7@VByaj$}6~HqvVvFi74oSmF)p2zybYB)GQ|du`aRhm -3YU-i^zfsOAj{P1g>w(R7EDMcQUX7*^S_ADi8Q^@#B-65{J+v}(W9Gy=Q?&s||iaMD>(CS;tF4udbcn -REX6k+i494QTk`mfaMi!yXofSbAo=Nav?eV1P_fbLB-t2N(-P6wJu%ZluCvKRdPg$o<&O0~)bf@!y<v -gK<+eT)6&(J^BAJ^Vmx#^9Od(3k&!YSqzf~WMP9|*oeKK<=OrlnjW#?<sr=pQT7<;i=$yabh&6}JBZV -mCj4@hPRCr4Fq>y?PFLPTB6UrT?<8FMD2ZW=)CCD$EFIU&p+vVuCuPELJ`U)iZs_Bl%S{HBOZQ~Cj0# -cwv~Ylhy}`5BeN#r0aQyf=q$OZe)3n~g4m(rx8;)~CD4l(YY^536`#>jTL$6d?7`?}XiqmR}laGVcT~ -wv|LHbZc4<lF)F=#Csaa>f!s45j;;HWrod=5Br&!Mn`#@0wQF3vKcy$9Xn03K)R<W_>0+tBhfLR5%@H -Pmj~5j772#Y96rHSNWWi2bF+j(ZP{9+u75a8w)aI+D3)Q1WL*`6`uPu)kqv+FTj*8zP@qLbP<w&>nNw -I`Ud82Y%<RM~7cfL45Mo%idjt@e`h@?VU|PTvXXyfO(A{4$*CugJXUQG9Dyp*>78ksNQ!i#Zc)-Xi9p -R2~@qu_lf?gwRM+>Ro~f8HbfIY{*29OYd<&DiZ1-}(M?~0*%MmtK!rsgOoYUZt+YF9C`8tZ<_Gu=OVb -*KKAbH0rg}G5KBBKrl^!ELXCV_=PLK(AZo*9dV9yv|CC=u@hMw3nm<}2t|8P;c`@#tezVgwSW=x{yEm -{t0%Tl;OO-&iTz*JT&lf#x%Zu!!YaC1ICm&r#iNzwJcf&&npd6C^9JB0*#cw&ezM8o5eFfKEmQ+(MBv -%!?rBka=D&7<W+N$s1E1S{;D)A0Dw#r4CGH5^cUTRVvp!b507F&6H(G?{bvnDI47Iv>Xml?vgyi?vEi -ynq-gu8?+zW0LGTYsCF<b2bkhUido(dz&ymIY9GyddW0~WIVesuwxDh<G4v%j*|Zra_szQ8Zfa7C)P= -zcLX{-b@YNBJf?{pcp6o%J86SMlqW_BVGJ7#X^+OtFuxvdf{yV4IU1UM5J|bxl$^jvB{ymw!whTGsC3 -=6c6xh!?ZjJ@pp)R8^&uVTrse`jXXEYgq7toWDx8A5F@G5BCevJ+DmVU5OOEa~b3AWCj^OXB_<8}#D! -!_v-r@~1RM-#~i{(Eb6D614+Xh?Hpnu9UevQ3)+ED*VU-`0N59*rCJ_*FV@(#j<c1&D=8L|^t&X#5;1 -AQ8(Q#AP8pDe+yXuNF76{ok^q4a~)lVzW!K0ofFUpI8iG6li0wj!A237s!Vf`qX+t|fmV5xw2<PqUkB -2s&1WE@Mp=F7qrRIgdsO^(fYQg?@pFCZnZe^05rYJn7E`ds52308mQ<1QY-O00;maO7>PO)#zRq6953 -%Hvj-10001RX>c!Jc4cm4Z*nhna%^mAVlyvwbZKlab#iPjaCxmedtci~lK=Zt^onII1tasGjBXf0f|G -DZfHg3?8*qedwXrs`<k5rRgxqJps_Jg3Wyz4-oqsb}Zq=)+yX)B*C-IcI?l{l#gu5;arn5N7m^V!0Fw -eLvez#h3JmIY|VvOQ2<fANzqg0_p-jw@UJ_~tEz}Pl_81Y#J=p-I_IB@PIDeomooG93tH~Q?|@d7dp9 -$KwD30*JCl9cVUYa<;^_>>zRW_Wov!S6|&X84U5^zDi9KXabU@nM{JcT*l^#-P<&VgKMPj>0+n;zb$D -Viv{8)C+^JoB^YheF?G&^CI^C^77ogu$bUy10uW*gW)y{qA>?yuKFheI?h2=5{{Xtal|d8JLGJVWiz{ -Vde;ANcyj#l@byX0y?FD!_n~(IQ!x#EO%s6c6dni_MLZ0rFem1PA&bW>oA8t~m{rCTP~sP!aOU$QxaU -42y#W9qwUhB^``4FyZ8nYlJme0sPn~Y}4us5y_9&iqXLFD@TA$2kJn2e=)_Jf0rgwVj_In^!!Vz#5gx -pMw)oX8ke7OF0WBu2`x2^An)e`bIfPOL$9Dx3Mxc+e<zX5A)eelA0>{@_%)jzJGwHSN^uGxTW1GeQ@2 -Zn?Lux{79{&aKGJy?NP+MDZ7G@?P?9KhfL)Pb{N+Bou8qa((+eRX>L=Ip4)9`VP~+2!HMNv8$NaD4v9 -j(dK1i4r5`H7Q}Uv;F<Xw!UqDFMk`Y_q~5gPy>fSW1u&DxdSgxF1EMSTcGo8!XLhizmMO7+5OIU%dp3 -|2{RK0_a&_k!*}~i3ajO&`4Er5Hv^yyhZS%}m~L;ufa3GL<=%Tq;E6K_XNG3F!k+l-nQXGT#|+0{7DI -A`g3_*{Ojhbx-}b(*n)u2}rS6tdG#nta+f31MDl~WNG_Mz^A(erkx$~Tq*1-b(ohJG(Hg!50{q3dnb) -pB$m~A&Q+gieG>xY<q+vse4U&e5&k>U0dhEkUXJwC;7TW6?VG;!Kl&Z+!7#c8L?sm@{dM>xRvG6uU1Q -_<<~HPc^4Zcir%bikino%VYdz5XA)qrz4kzJ7Dmd;9MF@qhl;$%oUk^S}2mF0cOh$3Oq|(Ho9@KE9g- -|Nb0Kqj>gbl4kk+mxuY+jm@p?o!z}(UjAykH|zgxp!M0)jE2G1nDJ=X|Bi#mynbM-Oqc_(8|(o*64Q? -Sz(Qa!g&)sOd+za(MrL(u_i@!iV}=A5WCx_d<ATMv)}$zhM@RjS#T0J{zmRcFSV$bxdE&5ja5FGk{oX -tG^bq`pZcjhmT;B{<9W>=Nwl9p<<zfF_ugNKWGP}~+SFJo+cQEc?+m-cR#5F!iv3Jyj5tgR06m+i!Dp -c_VLa8f>_PT%grgzf2xNv`x!1b21zBN!}lx}O7W~1hB2BZo1{n^E(dw$lxl-dVQ=4$##|Dg(<jTZ;z< -HqClCMaKcH9VT+B`w%#!b|H*C{B>lWARH996hMUcv0f2Or0fe*s2__H}4Po7&oOn6B7NO4;r2`h-j`} -yGOl~;|~=M#$W#Wx3+1$SnK@9J_au!#PR9dvjV0j*dtpc^a!rnF}}B8hVM(fDj|e<g)v|k0RMi~>;J2 -OeA_>K_W{E)HK5T!v;)9swML<rLM)nuW*K^$2K)x1Mc`~%j?kDPOxux{LBN_N`3M7kG9n3|B@kvtSrF -Z+@E1c|n_Z<4XL>1wxCsaFh~0Z(PDn({8RyZ+xt(Dw?*hkLo4t-9godD0#l&9Zvk3*Xz^n+ji6}tLah -OOA5pU$Bd_9Ojlr+d7#%11U6em841wnQH?Hh(Mt6j{89$YsK<1B^L1-7>(#$W@$c*MWBuGla58HH)5_ -#wpG$FRE`#H?ar2xVUw!dzo<$g3ez2C^`wk`ZlKt`2^JG0`EFMR7(y>@@R|EX7pAgngnxE4FCeyJ!RO -hfYf_K#&qK<XA<P@Ap-f6ULBTfCANfx#DRK>4FKHs)Gu&?3!AYY9*ZxX|Y3!>yWNGBw9ykq*ExNARyQ -5)hvmDRW>hH5J}+9Hd7vswW-6>zlCi(goN>nm-y*AnilYX!ypW@xya&RH`2DWA?Iu3)(b|Qg~4YI+s? -~ubsF@E0uviqE)yr=FoQIMjUF^ebSM*Mu_!?_3Uje>;VjV1@zB9Qg*A{On**E)4Q2(4*{Uofz7zzOE+ -vv#gMDy-`=CT<Elv^OmQ60=Ss0HR=5@-mFLCmjg)(v1rY6oc>{iOYwP`7_al9(26vSACsM0sk!4zuml -sNTG_}tpSayQ6cJim#fdyX{)0D%dBG4T+kRM6!Fl#AAkrkFxrANr6>!^VLn2|1YAB+es$9hPt=Hkh=1 -wr>0`CwxJ2uypW>O}#lS-H<c>;El3yE^MTS7LqI>fd$blhfLoGYgf>z^Xaf*p0OZPVj|H$^8idUoGLa -Hq|sQK+`hBP6{H0@QQ~03(2G9Py1_^ovWW-Q)&ZfX@jdq~yVOkY!JE#oqTo2K%2NLR`|s=uc5fk=*~X -#+)*RyaE+mKFoq9poZCiCj8`ZCmE=8{6Dpu_dYv(CX&_*~j@P)8ZeH_G{f)wES<wmDMz_xAH?&4uXKs -qM)po~)6S}ItL(<{ZsdAUIp4~X1KL91~q{-l+Z=0UR<Aq?e)W+bSr1=2A?GY|&*!eyCj0%tWv2RiX)G -aiX8z^AiJnWU7Nu*)}C_2~V83qfJllmh|NlN+F?iW$IJK8sI4i2bU9OXlS{Trvt85^d?{kaC0a6_~wQ -o3k+A&k$Jjwa?mT$(9VXu+18FvDVKMSV01X2d&%pP>+9Le&DDV%%W~l3BHBE=?q+_I}RXLHo=wqJPfA -kLgWZ1$Hzz!`~deIhi%$hyMo<2h}9zI$?Zfg0m8^2<B2y6Io2_WAP!)hfV>!(S+rBc5&}vvu2OOdXtT -bM6x@$QnPDhI)Dd&)Ww7sj4MPZXJSHU)$qqv5jF1GXnMU$Znq1|Y1p#I8G<%0;M^{mM9LL?EmmCbeuV -_9Fy8D`uqt`gBLFh*CIckumEK<{7w~J~qzP=cN-A^I3iMW@9GWv<~>5wOd;!_(iVBS9WLW=l9FS+A&s -LFCrgUAj12e3BCtr#LueGuvSScVWpw0M?~Q+pglzUfyE8NT|BZB#e;D8>vV=aukBNdaqy9MK&MWci{> -qLdl_*4`-5eZirbx*Dp8rw$DyYqD0~YU$(Gjzk;4_P$mm*4QR<V5HzJ51Y%QQS5U!h`?tDzB`(L3pFu -_1;P<{0x!g1T)yZq0*C#%Z{*o{{iRW!%X6NL0ApPc#60b)f6NL>MT;WgVEV&3&>+m1A|N=iA-wSCY*r -!TmjtRi0u)w~mMW|1sDKa}DiQXvqhmvAhkd4uKV;>M<yKw+imD&OAA*$f(M8#Y^Nh=#y238O>cUh~&Q -Ul#)Y{xB?pL})d6!IA(n@1=nIlk3`Wb>eY{0Zv+YHwLA~x*$49QYpxFj$|lLojZQXp*!B@b8e$6|chY -q8UO7?mkh=uL;dCoGyHzU(^)IA`Vt#3M6Iz^sm@S;Ub#gOJ`Ol>q&6*@S$i+%K?eLFq|+2ZkGi7ek!I -AayHJf^zqp<lZltK(v!bnK?98B@Kz_>dTCfUXplom5rl?2+%?#UUbLJjSfWAky#M6H17nl4C+_zCGaR -90(g*O5ybKfHv=Aoss`uO*J4}jZ*03Dgm6rg{5pW}Hozk}sKB@o$N?PuHSuS~N|_BBLhmDJ!$eUHXfv -wGa6$Grwz>7Pz_5Kzi(;WBDkr?mgsax9uG}@D-Db176wQXi#=!=oyr2OrW1C7y>w3!>sQqHuU&o++bF -0{OmQ^uyb<%QDYP(p<#EDG8#X!mR<IGJtg)FIwBXXWA?1GC%DTIw#9EYhL@N8_y$z6AnO+(eBTuDWzd -41R3vUg}Z%~GEG@jCJ*Qi?p=mt_-luT(K1GeL30q{z)F{|mvupzl+t!ZPL=#smB8dVq+>QIG|~AR#){ -*)gI40vK?k>B%TbB(!q3OPaXSioCwZ+jd(8AtN}L2<Zn9SOF~v{lO3gcM*~ez>oxFYN-k{4)Zuq^&P7 -Cz-BaTV~IO0`5s1d$_9kd!b(U4ve*z%l&K`;2tMVYB%qvHvAIHx?O%}XB42@E3p%C*wKOS?aV=m@Snb -niAS40u!VGutTgo+yXCzGMY0>@)2*WFtBoa>WZ<Gnhn1!!79+z7}RM|xA1fg0HW6JFS!isz;PPAB3m? -24xLicE$z?8FWD&P@m69ZI98%T<$>y3eS{-wlN3{5gLnTGKLlEc0NdhiVo!qcJ>J>O>--B3NFlyF7G> -v$Xh#A8_k88?o!W!kMK0V^q{0CTXZWDU!1)y0*IUdXD-Jzd$o5@3aqDC)s3rg5gM0#P<8Y0EUQQX~z) -DZsR&5my)xR}6#5OXhAipYa7NN@-*z_`tjmN3Ck1O(we$Yr3>ir3sE9nBDII*-BH#Cf6-#SK!AArAkM -x=Q)r<q*Pw{KpQe;ZO?Irt6yQ|+EhJPE(qNRmgkw5HV{km(FDCXRe<(h{<7mpLR-5;%4S#5pLv`Ki}n -$Qj*ptiK%|g(V34pr74Z>IQ%?k2g>R<dmDucTZ2SWHi)SF+@wr_iM`{6Ol}#)=g%F`pRZ?9d7OK6$4{ -dpjiqUb4U@4t>k-1qXgddzWgyT%q3a$y;0pvle5gd3+jLOjk^~uAl=%Mk$(Pkm5oaNK?wlipi=3&Zzh -R)^^IwhoV_05@vgzD59S<MQR3r^Z|NGAi;EC3dY<(dEh#Wu*ce1017S_eX41|pxAO<nzn)hVicta{cP -84tl>%9c8aA9+$$X6OxhXvr)Y9`U%5bTXs>yEmxo$<oc8C{zm*r<2C&VQJSQPqxRrXl`Qs`Czf%_bFs -7I{O+1ezIg<oikkln*}r5y$8i(m@V$kA=lC?(j`20Ot0w5-9jS>v;~Gg<t~z|YpZ@`&or(g6$erIm&} -n$HqoxMQ37=v&9FK(qSeM&slvu-O1&aYThpc5FdcGaqip{&$vOV;x7`HzrZiwJDuT!yADtfl|L7t&PH -`pMt7%&m@RV&tCSn(1tAiG^Qx;CD6PI(;=T)R}UOEZ_!&)dGWLU(>O!4(pO+YrTn1ICi5_@2{PT*BUU -zSM=p{2Vj>(|QCU{{Kp8S)@X?jl`H<>8f#_LtZnL9uLU3nay%8Aq1IwKln>4$>3FS1Cx*8!Jn%Qr!YT -Dz@xo!2b)yPgUZ~u@PFhK*I2uL!Ef%*1k%@TkRgK&0d4v*ZFuXs?tKA5Xggj7ZJ8NJwb#CRmd}O57lO -G10MQfLbD{k576yXp9TVSoS|^B)U+ZB2~J=2$H}ND?@vX6Fz~RJBayhm3FEt9Bs%mw#E?NXz*5>3Ll5 -UR;of}^Lg*V2I`sm5j3xt-Qr+IlEbaDI9(T#e!2n{4M-wOIkcrS{OgY$6#R(E{%CJ>dZ}fuc5luMY=- -jGa@9onC+@ESxVUtPT5m3D*x(d)PaoQd2DuB2G(3W&M*k`hqaW6?YFE^Tb3YyC}zTD_&R}P-!)g8z2! -O%;dWg}-%n~*4Fi`xuX(AMXs6$Wvu;xcR5S+B@6v;&9CW!#;{Ian%JcC=*IO_D0E8mmCDJdyYjI7XK) -J``P#ir>)tY;h7~^W_aTaXVQWG-On@X80*H71^>cI%BGCT)joHERAT$IDYI_hK^TEsfsE(imq5sm*Rl -^64p+z_YvUnHjP(?RYR4)IG37>D%+H3p!K_5T0BN98+4~hE$_Byx~#`=QkG^nAm&)TNLAw`<b?gv5Sz -<6RAyL@P8XZA5~HL2t*pq?T}Md)Y~Dh<QDP&Oxxs$h7m)D1x4XN&+Z5koXwn#jz^*MNk}2<#`E^D9>h -`899dK3}FB?5m*=t1ki6~&HKy+-Y68-NYhNT>oMOX~63p>%wM*(yeZtY18%b?Tz18>gJVs+SI2Jz}J& -&2PB=4>?zZCLNpc3PEg;0k*yYgDQCnL4k9^JELRq#z7{V7;LnM0fne^<q&k9c!T?BrDim4)A7+0F=l> -K96P9OjcRx8Ltsah|9C1Gl%tQ`-lqQ7i`XgAj5=vpO;B$>wclSEt`Trv|rCR)YZ*7;|U`mVame}E=|< -bD17D~7Fw{MEQ>Z6;9!@D-GU--i%XI#&rVD$Xi<2H%a0AR#cGyJX)#Kxchg$+Ni2m2`O13&iU#n46tu -P%A5g-wLy8=9!hljK^`U=X@WJ~!2Wfp4?p*2+IAASYz|`MU>c4OslP=JdL*4>OvP_FtGj#wOu^KLF>O -g8x!l`r&@&{pF>q)~=ab1G0($??GGF*7>`PDw_ta7W0OuMGxnJr@kyeugH8QIKMcO~(e{=we=08mQ<1 -QY-O00;maO7>P()K=BM2LJ#Y6#xJr0001RX>c!Jc4cm4Z*nhna%^mAVlyvwbZKlacVTICE^v9(SX*x! -#}$6(ub5H~qFjnrYXkvYvw;gZsF74MYz2M@3}U!@mYi~SXEQUa6@mWvd}l7pB}F;zTT9sDWzPBL+%K! -@)>tpd+Qv*&{NhMc;fHT~H>s?tMb$NhH%2>=PFiWbl6o@ncK>=J@CtNZ)s#tU(-?0WRZQrypw^4`;rD -me8v6`O_$=Lsb+TGXtye3t6u(Yy&1bp4#~<Z?H1?Azb`;^Jb207l>#8z#Wl5GtKlE04ntqu~CWV&HiD -zME?}DJpG*?l;7UW>N5dSp2a9h*qQuHJkS(rw+!0LXOT!7?$OBTZ8zweFk`<9$Am3aH%y%T%Wi9$A_b -0i>908q_lgz;MVEzV?9?15FAk}S@=^i*{^f@rlPL9NmH<?gqRI+_dFl!4D^&_{Aj&~Ts!R`lpg=3B6k -C#WoNZSaSxN)?J4FZwMtLFBD`fJQ<a&#Ew16jpd6c0{f4Ru(%P&BdAu$=YR29eI|l7F`Q13(BHK8}JF ->5^!+4TZn&jo~>&dy%+RAY$iy9yRyBdaIl)DB!`gr7np&?_@!ws{lIl3VbppK&S0<;Q?U_b;X8y{H2> -Hh3-QTBuSZ-~AR2XcCE!f9?Cfe0g5cKlbFoFRl!2w#8UyMz`JSjbaIvtF?FVt!u#lzVu#;N+(x^vr^T -BbT-XbHQI;ffrFd-zzPGOn{NCz%x1WVL%hlqoroMs^)SS6Ka%V=*l1g-5n1m9L|w%1KpuMw}Ms1)p3k -}Irgy|FIFNNW_7h1sH%LIs~!>JfN+TQDSUPSUcjt)+^NtpU|OtEMzPD11l{;4~(K&L9i~*Cd@6ANGC= -z|xRoC$`o+sFI_vx3X=?0*-}O{tCg?`5?um6L&uyV$Y1O8;q9$LoEBPa%|aWP5C#`YN<w^>W$qwDBe( -1>63Xqx`*{1heOOrj@^A9^d*hcM3gKeK0_<*3@e2D#hL>Y#vQK2^@SYh*<{Yt#6h*TW`{6>8EWM?6&9 -0;s<=uoaHWI%E7ep+{Cz2Aujb;rRK+gDzhXU!HlD|LvE;2n#DJUa;KX{5IH+W&ec-}pv0|eAD&TrMtC -$z*W;&ms`30H|;8iorXOju*oiD#b(PXnE>7x*C@!wsds{A7x<kmEFIEz5Cgf9twqS8kC*%X$TUJWz{f -zEIY?FQ!lbG~OXQ1@HTk$c;nAPlW<{5oTe@iENtDfF5U&9B6prD*qD>)wc0i|=yWE@&W0r%UnI#rH=@ -sj1Eq-ZASHcTsvO-G#WMg|r*@>&=%-L>fvpDk0a96zI5dZTxnSk{ve&eu4<c42a@S%Q#Ie-o3xQ|M>L -!U?8a+Jvn*mpTWw>?aPD5uE!ob%QOm?H{#|z@G<z!AK@&IBkNl*IZV%zq2QqZcZAu3GawpxH4H4Vz0L -S-E_j?-{)mc!?iD7P{3YG9<Xe(B5Epg{EWva9CGd>0mCY|cb`7(~sb^YuD8R0zLRI@iMFuQ)fN(ztf4 --hSr_8d&mQcMgn|%r2`;+e~vX5>L1PiX{O&Jut%7iC!_RmmWh|fGll!gnpgoe%aTH`d;@dk#RBRpIfU -Om+)aB9Pi)pbR|4S&5)IJLBaE6f9NpkNu~TGL|Ow@kO$&J&6o!2|#*6B-&XQf^9lf|Pn1N_{KQyoBK- -=8H;Ip-U1^L_i2SW*LG35?UU#hJ1u-aYR6ap2aB+xv);5gTBo(W5=x={Vu8`>x_oBhh7owS2b`?n%-w -Av*X)5d1sz%pWl<K*^zsWf%yIy-huU%@*NptL0n^dm_-n7VEynZ0$rt4;HLL~m<Y9WyP=3YiTZH*pJg -tjAMSqs`TgxPaes#P?w9+xjj(OZ`rl$WjU&R*;lk2JA@FUo8sl9}QXpX63Bv@-=XerGGlmbd<IrFm%o -mu99C6gSp;4D+73fd<a-8b?nXc@`i>3I>&CQ{>rf3+XO@Napp>h&d>Fz^p<$!6rGXe908`507c(LpGQ -<67&{Q2!~+T<zhnttolgVekY$p?(lTok7H$`#L&D{h!bt7wv8(t6t>x4?!KCKx&wp|nbk{1&G$p3xmw -4rh45iK`+M&zT$74Ta<+#Ur#RI||cc9$`&WsZD2N6X$9Xrz|wc9qn7`3(oz77WQpa4J*Us7Z*yNd^P! -(8;cbMAL3wkG~0YN@c4D&tRwHv#Z4s41It^F!4o4qrMV@I8c!$6klvB?XgWy8oPNn8-{$`duE!;5xsQ -t(7hcSE#g-pGXsRjCLdoh}8g$&tm38UqL{FDC*HxaIsSIVl2+szv^{KFyj-F@abp=krB2Z)bio05>`D -XA=iL%2pJm(b04wsz`SMy%+V+XkZ#H&ZqBrD{6LJBe_86aQyb)(H1UGT(Gxd=TU()>DM;s$c2OeaqP4 -GXJ;lV`cFOyh^?S0T?2K?nD<Vjr~hIIFK?jaJ2LPB>~dVLy8w`&^M2SDZhJpVKho@}BDJndUQ{PPw|o -?#-m3!yD|Whhh>RXKd61<wrnK{*OT*7lJz!*TZmvD$8KZ9oGAh9+@WBZhCB$%|3@9U(<5bR%2Vsx*Yb -nW3@x8`bNE(_J3OMLk~Zr`0r3l0|XQR000O897^_9c+eklG7A6zQz-xdBme*aaA|NaUv_0~WN&gWcV% -K_Zewp`X>Mn8FJE72ZfSI1UoLQY?OOeA+eQ-qUr(_Yqo9OJjFVh@E)g5B9i=hqI6>sJxJv?RMXoH?)K -cIsE$fN~d5r_^UM^2^Gy6d<Kjf&%9Z(b%l1Spt%+AjI=3__MBT*J7{3;-YoR1EA_wL>6^$5JyY{s}=6 -Y9Zx=cP$57l|P7hmw~YxyU$4maCL48JAQh@HLwgxnN}a)3f8tpS~w!BaR43c}(+I33<GbauwXaZ#VPB -ibei<LFM|&&+@DLM^m3n7$dL7$4{P*$vn$R%p^@x;cGR5C|hmv<Z2-Ua%w-4hx-p6lG%n#k|n4zp{s; -z>NJTM7c3wrlP5zWK=S$7>G)#O6s;^V&$A^7!+9Z#oP{BtFv}$=cmmq8Fij-OX)1a>vw%+{Vfg%%&R8 -le)A{kq_<Yjq^?n?`nw-73Acw@;_rLKUc<^kGOtK{-oGuwK@XA;;ho_k&H#ALRYiRgP1rt7b#g=r1Ru -;_fz5M&-vlkcP#qsm;1cd*h&g&&28yy^c^WErRlz4&r-5Y9(+tHFnqX-O_f^m?h_T5myvxLh`EGz*Wk -#f7bPI#QH#pvK~f5r7^g&%(H^-hmZpN&x&_}q)xoKO)ZNtkA9miL9s;fRAkiO9j=mpSDE+^{75jHjCc -Ii8%JospDDu(KdCBZ`qk6diax`Uk=fEU;oRF4ECIEhbhpr%R$Y07_0?YnPcvzNX3<_>~JFAe^mRG&Ph -L0yaU2Otn&|!zckHagoU6hV6#tJ$3$3llf>GD*h#v(E{BLv14Tr4I|%Z1L^@tDoPB%RAfrOA)$bF;08 -qG01FIW?I5N2>10B#*=C*Pu_#rI*^R$`q?C(<SgU_WfVP5(`+Jre^lO+SPUdr#L#z{pbqw@i$>buKzF -%zuu%NG8H6{2ki}65p^Xja!UL?^%AAo|uNCMdT$XIv*PK?m=`V0ahL?##@=yE(e?7Ad~O0~b{0tj8PK -r4%{qoX5xXux6NozUp*#V<dM&wo6-Ad|E2FMhqsvx3K7je`ooAZ87tK1+W<4pG94M%Q=nxCl4=1M-){ -rmUS=?Vek-R&p>|;rpKUk3u!c3W-rMV`NT+RDht|<}P1itff>kql%6Ni+u$?*7u+)9C!n(vk%$Ld2B* -D&9dua)mJbz!EE(8hb4tQ*to<qWaUH(4Qsy!D)b^o%*PM^5@dSCq|3KsfJGUP*h-Ep#R$Xzd;w!uS)R -znQg1maR+yC`rcIW{M4Ki8pJ4Q`dL~gsm?t{(N9jvQG(nVtH-o9o;8T*#eg<F<378>(&%yK}<7{fpQt -)e@t+_Qv!<{c64XQm?2Hp@bl8F_KAOXJqdVhcayP<wRHt(nA9f}*2S@rqhzSdW50YTuxOmC}p=zDMFT -mE+bHYeUdg97UjFzC|dgC&iZ)nYQ&>)<#%QDp@KC48u!m7YH&svamo$Xd!NDO$4ZCJ+Tss36JZBfwn3 -S?pCrD#NLgdmAE2Xh?`#mcxY4vyuf|&gueIs<wva$Zjz$^&OH*Yx~**r*CS^DtThCNdk<jY$2eCSY$; -SV?3&2?$^XrD#GTvjqpuiIkKy*9h+LD85Ju@6}2+^8(e<}47G?d&MKejm<~bn&_3(i4`G&vU15G4VaO -4dsJi3Ey2d_2-^I5HDoYjI6*tIB4Rp5@@9oT%lqS$F1teg%5fmu+7u1CoRru%1#N#~A@|_|Q;JBcIN} -0EfGK9XTw7oZI#Y2ms*NhJ1@V2=>9VhCD#5qpidu`59ZzKZpRqm0m+S&}Zz(JX|0+}{!1%OuoZRlep- -UG^tUF|6ftnY%nzI-}5&~;ozMg)e2NGQ81Raq2bDrRGQ-zRABWL8KP1S$lp@_tI8VMrpH>NH{Q9F_VV -0-S76iow1LG%r9-_btXs9F{B;;25XLtOVbC6Sk-Lb_U|>D8v_DWP*9Y0fmM*XIEHs@@WHTDhNTzM22B -suyn3-Pc6JF?<0Y4GMBPXZK0i8oYU)#a<<CNMs47FkIU=GSK<i4Q|^aXmq1xhIk<8inUvYC^fC6>P@W -}rjaZwo)29+TTi`vY;P0ucD7F_NEIj!3eB4-j@NLRqS+Ab7S7)s3O-#d*@Kpg7cuvz4ySFm44GF_o5r --ZaAcdmpH8R^1#gD!Q>a=k+FlkH)$KGJJk(R<;Z|%BMzpyRuS+tfBCROi`*+F*~N}VZ*Gia3I=Exvn- -QWpMUOe|}*;kz$oVQu2xKZDMm;<Pl1MkA>7o^pCI;tge$1r3%?Lz~r+-5lj(<!vJ5S^$lZQkjszyxT) -s<uXH)>dov6fXLN(Ht5qu-%lE_Qx9)2e0ZYx1(jtk$}8<p=?p;q&mx%4&;=BkTqr!938@{2I!z!4_rR -PLrZ*D%67utuftz^eDG%f-LO^fTe>(2UWxB_9AYpeYpD5Pt_{KqG+Aah80_{+sHl9Wc<Kj2(p(B;?a# -cow@;tK-*HF9wDE7Yd-E`OcekK13fn5^WM@HR(CFj@{&oq&Y-I&KGJ>3z*DM*snv0b6fU)19mSK|*0y -vV*+@qkoWA529;P_wkS-;<GQBS#z0Jom+Y-9&+kThIW28r<?&iKMFtt0nd7HN8KG^1DxwXnR)lWt{D! -^N4-cFsBN+|w2UolYQW&68Z<U5ATe3A_AUz&FOT;%b340s}l>!mX&@AX!OTGw644b(J$UBvpA9BfIK) -V3}8Y0Da7sm~hwl9C?l1^(80~H4yz-33tVIeWq|%Ev#&z53LEyD&}CQF@GC27;6Pk&GYI7RQK($He;w -Wc6Cn3nO;%>8!Fcsk8<5ar@Dp8+qJQbHN|_yIH)Q!<PM#f3(Ex?eP)+dwdCwp_Dky8b*6mUE_^#})hv -e8QCFEo$KEDkY20Z%d-H)HF+|!=aAhj4xllKxx_esp0kwEoCJ+6ttC(ph@F;F4fp7!)Ji5l86dDP}>~ -973HDNU}fGE-=^(l#&R9Y?E3n~6gQO<nqOP#hw-a(=_t1ZlOMz6J(Ytx!NfEVh{ZWpvr6FV&2IPSDb& -J2g!X|8$dndd<|PdH5vFZ05gul$yCe&UQ<EZKQ%jo04)&3&y+cQQzau$myJP<}zb^YO#Ku}XgY@E=nr -wXDuM*{qMP;Bh$qpzV)n8KI*|_>$|6Hh(>t>z=e4ew8`gbWyd|%K=0?wd&`CS{nWYZSWhy!r<_W!@~X -$@>x-#M`s<iusKAl@Glk>{yY1`KYOS<1LRXfwB1|x&kY-Vsrgv=+4F)*gw_pls6I4SX9fNUi-Q8sYb; -f*Sgll<VVxOuw$ak=@rEvM<0q_SUNT@&EUy?b*)V7735@+S=4*2NCB)F1%ZYAZfTMOzak*Va4ZVh)90 -Q|f=(r2mKtn|7QsTkXIgJK;pHq?jltP!`I3G}C#(yXhGs(4`2J4|gbq~8^66iOH)MoYcbH?K&qSE|m# -51zYa_3@4Zvcdt<m*2fJ;w{)%(j}CmyAcMA5+1-IBHKFXx6Gn=l^(cBS>4#La7EVH>X+>r#q^j(3Av2 -*LUqcsCKoDYz^ICn|X>Q+If&>bld)$i6KZCH*DlFd8EdNcnIw$3nhcqm`Yj)cMXSCMAmg~n8Arwbt3F -;^+pKp7MFwWEs3SWS6$=4q^d;L6K<LrxR;9ROqI;0=bN$DQs-{Bx9g*AFLtYso&Dh-soPVseBb;Znjm -OQ6Wz46H5YYH1|7oRPd>V1n%7auce-0N!e`4gumjNS(;>ucFI?|{{|it{0|XQR000O897^_9$E^s91q -J{B6C(fsA^-pYaA|NaUv_0~WN&gWcV%K_Zewp`X>Mn8FKl6AWo&aUaCwcIO>?t05P<Lb6>56$CCXS}K -J1wu`hFZbllGDx-W!9lVk^er0o*w4w7<Q8F-W^Bz&Rvd9#;D$vFzmW@$un-)t?W!m06PSRJJdl(|9Y> -vX%dbKeroxkI(FW2fN+Cs+?5^sS1|GC;5EiHc5W|EY$u`ZP?fQpUhbbhiyOEt2*TwdyUU3yV0piWLC- -z`||qjiIq~am*2jA|Ks&Ld&>*9lU1zJvR3`r82&T+@#6>kma{CcnB1xAr&{#qL6z)HrIOXZ<4cvF;z} -iPntrmq%w!Q)a@Q<<I^L{)K7T$uy!`s*`^zi)h5gf-vAATac1?0o|6Hm!9xgVmxc&2~V|uy%K@3I!6Z -$?z*g|bj&6N&H&J+frvirUnfhdI1ROV?NxXjVWMJ?oE=&iZaYa1jRHU+AJi=~(bvBDA1f!<PJG}p!s+ -=z7;bTk2`4v{eugdwznL%>}!;4TWdOFQGDfUl=PtZ)Q$Z2@;t9B0_rfla_e6!0EQ-SL3CM!*qFfJ4An -WWZM_;49jh6%4poPJ>wC2)MEZe1+mT!^RGz1Kxw_YCPa8Bj5-oz#-sC{SZj&gTA?G0KFd6E>jvklo^l -q+Jl){S;FJN%y^c}K+v0GV>H*s4x}^FgK-gWVQ_S?Kf~kll=EO2+H5or`$ptTaw`y^ngO=C)~zK#nVj -N!$5<=eN4fUtI1(V&ycq}8B-m7s6HG6SO&kHybD9F9xn6f5{p2DtvoEAPA}|1%u~yFjrg;^uooP^Ca2 -iBy69H-xGCToFp(Tz1OkrS2Aq0a-ulvl*u(1Q_6!u_w$s&1)KsX7o->xCOuR~lE2e~ce2i&ebs9&a>2 -~lQ3+G_%&w`&Mf=+4lHR~`Yag&U&G%vibu=`*|s|5D{8PG`h%NFjaVhV|KnBT1fT8k*+&=8XufPohI< -_@n`Kvjf*R`X3wFq|&o&34_Ec$4C<-$&`BAqDkoX4BzSQU7%)LSXyI53R_z)@GF6!TUmiRPhn|<5Gia -usv!EhHN86S*Mv7sVsMNUwvJ8U25WNlbUjfagh!U$p*?qxxe5!o<r*O`?oj=Wngk$-8Yy6i!__D#ngj -6*4P6HBPI02LDlZRu90p;>)dI>vibL8c?#gQsFY;5Ijjp@POCARBEoJecvR(dhyM!{T&nYY<2FFMfB* -{vZ+;^5U?9@f$b|z=xcu?g)wikg?^9B;Va!N0WwxAd@KoAB9+5iCz5OxE4G|oyDUESvu7i+)YJ388rV -d64Tcn^|jyF4E4&}b;|nL?xeX-d|gjy4lJtd>UmswQg{qV3pdIS0i`N70dN;UU~CTRYTfnJF|y1!zZM -^zG=S<V3}gs39Xu+X1Bw2b<O+#N#dvbqNDp+5i_A00(^(+JboeqoG8j;8{u=pTcWf4WOypDx8C2rK9N -D9sxX3n`LW<HubtD>U9{ac~kXjPT&wuqK1sDffc9$IGG_6+km46c!U8SZGZ<1fFm{vZ9&|qYp72c;L` -^9zyLU<q0kl##taAu0|MHB02lyg3>4aecx0lXAz?sB8xR5m;2ScHHk}w8-9oVeUyenrGS#<k7C1SmOq -LS(w%Biv!@;uOI<A1{r9sqN&kJu@cz?3#1f>BI5rGf{56wrXLEr(HNp!~<h`CN&Ii<y1MTAQib&+@Re -U|fgt%yUHba4l6)t)$vZek7Lhhv$PhAtgRGEOKmk&;@<K(72sr~z8!B{?5=Z>Q=#KF3|{ENUTtKi{G5 -8(hkSuAIUE)RvaBbR2_g^Vmo=QWuSrNm(A$TlKEYaJIszk=|dE%IFwp@38$qTr1!}osElTa1gO@_k+R -}@4Cl`yK+h+=GxRA(MxobkYh1Gbsc*CQfMt9g1T>1{s*XUEzBpo2_5r78gHK@R7OeE*u-_C#-OzoYJD -3IK@CNi0?<7<Yr{Ph%&xkPU=1~E2J0>wC!2qM5dIdN=!4k6P+)K36ksW>ZNRSlQp$qw<XinT*=f%wL; -Upc@5BF4O9KQH00008031s8R#1O2A4CEG02u`U03-ka0B~t=FJE?LZe(wAFLz~PWo~0{WNB_^b1!XcY -++($Y;!JfdA(CjkJ>O0z2{d<sgRwDX4^d?ap>-HSc&#fdO%`PWRd~Ab!^u*0#voXef^OHu~d7kBPEXg -=8fk)&tNdfGVtSoYm}9$x!l^K`6<{Mg^fFZ|20z3cif_6hB*Yc!%L3D0FA2m0*iznS4y7@-|pNP?z<` -6e)@b1>l4g*qa@6k<}#rLuTWYX!`=L01QroykN4AW^C@hUff^m-!g}gKD1tXy83)f+$;_G4I8tnkYG7 -}K;A?0B{!eL?86GRt4j$v`)EH&1LJEVw_GsPf&@8KQ1I$`9t`zEkhFWKQ)p?>wJCN33GHGW;g60up(C -v+EcUnd-CI&I7Pt;OrW}JlyED0e`sn9F8-u5a5d}SKC2xzTwD!9fCNY?xhhu*_tv495!QaQkyyLW!+$ -BtXraDm{zZ0}UV9Iu!Vr(TXar0%X{p-)*h`*Js(&AlwYGq1}ko~13yOBH{^pa!*}7d}N)o);nruPND+ -eAMG1;yam^B<Mm`7vQ`HhXN~qx~(!N;4)r3?=Y(^ZSP66(cd9f)4ZtBvmzzTR-C`)>7DUB9p{qt4!0F -{=vYI5o==*JC#wW(*s&BSy%v5({j4qf96gGj2aXh(pD$a1M~AYeeM%BuLpvT?{~kR_0z;rJ3-Qkfpk2 -a`a88z|9QpOp-%8H34#~+Ma?vJ)6wiuF8bP^l7rueA3^ZjK8jO@>!?-L<(zcE7Do6W%B0J~w_~xb)tg -srZ;;>`xuq~9?-kh5$*cj}20Z>Z=1QY-O00;maO7>P~IB=)A1pok}82|tw0001RX>c!Jc4cm4Z*nhpW -nyJ+V{c?>ZfA2ZbY*jNb1raswO31T+eQ$+>sKri1f&8<kX$6O1o&XZ5@0}a3dlKG2C<}8_BJ#raF?-s ->7o52y%s3Y-g|TVOZrPX`y!Vw>tRQ*OmaEjH;<j28NEh9yrj|12&H`0J#M{v^{UlE@VO^GiPSsR<AiZ -0mw&E&l=vy~F{1$zl8B|06SRsGG|?12B{d4-^+Q5$Zutm(G`HxeKR81E1DeyjI6`y0rje2kX+R=IMrb -@g>mWu5nw@`~T+Anudr3H^Ap>e@^eTz(kms#Zo+iZe5WQQ+2}fx}!35%kU{ZoZrUiTEy&J~y*L2-Mv( -xcpHtztfknbSrJzNFOGmG*;zmYatpYte4$Q_9|4$q``(y`ZMD8$;A%jt2u)oLxt3Sq`b!o37jMwm-B0 -a<ezM;)|Eqd?ug#mNnW%iFK_;;ucCdU^6N$_y~VZdq1JC{~n_=eUGGtW>N?DB_G>qjiFB?(hgjF=WO! -lH|g|Msz9-29`;Z#EI*i(Itp-{q_y(Ip|HU%D5@A!V9qvT3qdb@*Jt?yN=90r`?P29YH52NH5fhe%V9 -xa=NQ1y!kGYXg5)`NEVThU+^8d!3IPbx`-np_U*?9eha5Z2D#T5;m6;KD7bb{=O53{(fzGBvuuq6q7Q -31mUAU(n|Dv6Wqi-NgQIsxwN_FVcaM+X4ZDNAU?Ju-+7B{2y*$4-K#Q=<M5KZD-@h&f#jwdhbmJ&|Km -mrlr%<ILMmhaP`9sf6dK`wO#22MYt^i6Go%}><<*MAczT<S1Y+HEb%133FT5Xqssx-Mp9MI&Y0<<S&O -)wYgulgM{fWM>bQK6c}DPO0&gFJL%*FX0PsIJjl&0usCpeB5jaaYku8?LS!rL3CjUe)oJ36wDj*j6pM -ZpoxVK$Bh`SV?LHrcn@TF^zC|a+##03{qB?EYXF&!4eJWWjj^bq9(zLAqE8b7>3AnYa|W;LpUMm8xEm -7tMo%Wj`IYRhXfLU5$>uS?169!J*eHTWTQ?wfys}TxY~(MBdJX#d$Guy_BN9|vT@{X)^`@0$#k(9kKq -f~;D^Nq55ZYSGdk^URHjoq|NOoeuF%=9uJ?u-z57Ay#)N~=*+5~Ttqsu`Tx_>lS}!)oeGx2EX;pps@0 -UOF5|h1aKgCcHK7=XXbk$rHhuqF$*WF4WhpWTk4rT$RnE}5(+8p{_6G?p*7YS=j66aUWDd?W^TQvUss -nwuhI)N{c_xp<t*-qXay!VNvVDP>>p5#gzbWD{VG8B4t(Giw(%(m;$el+M<q-5Cd*ZZ=?>W0WPFiOjt -f}K+-zs8eoac&^Wy;MZAr-;Hmh_=$~$dh|^K;+9|nr$O{%EL0*Zu^&)Jl!gbCC~Iv)g0`4r-I=$3+Kh -iDiSX#p806)%Qk@UdQXUNL3E4@t=pRLbnL`CYuV$m$9MwMg-atj8LnWk^>OgkGh>G}He}OdHj)&l$VQ -6N4^x=5dOyW9GIONuX1#H;6Wd$tI6HvEP<t3ohO&Z%(C>u4C1Ds>;c9tD21iU#&!-7PN%TCLEa$5c5s -h?5j+!=lV1%=DD$+U~eLnTg_fddzH5GQeNT<{3*`6vKGc3!S{GT1JXS-DL<lu9mIBKl;^YQOpIZE@+G -dwCyHP7E}9p`CvFO(Yn@N&9tGgfohH{BEnx=^WUM3&~XLS}uK4CRq6SNPiQ=$jf__!Vv&UHGZ_B&t|O -_rO6&YLJ!Y+@v-8<tM){%Ve7LQ!RI2HZ?K79G`FVnf|_&FUv4VrxVApHzk=?BeSubWE)S&dRo@xnNqh -z0(R5^`vUm-i_HLkUTl`b*HE?KslS3NM8fwu+`t1qhAVdTFk&bw4C(5F;DC!}5qCrJUoeRWxdd$DUh~ --|;i?X^RGd#WsNvwb8lR7-mB`f$X&I=NQ)_Jf4^T@31QY-O00;maO7>RU2K?5g1ONcj5C8xw0001RX> -c!Jc4cm4Z*nhpWnyJ+V{c?>ZfA2ZcwcpMWpZC+WoBt^Wn?aJd8L<ad)qV=hQH@mh?J6qr6Eq&HVzBW^ -#uxJlyxv*FF}@$8iV5m*`X~j`|T+9QS_u;KkOo3?sF_lI`^^MtKJf7uG9Q-B$lPw88({DW}_k8?}`%2 ->#?GDJy{lHCz?!}ldi_!-v6r?ILt*lTVyn&yp&}+&&Aw`a!TTQXSLW4FDCphy?WY6%@;Q|y_}XKapXf -W=tl#Q+=z>G<`%k;i!`tA&Qe8rK_l__;<zgcBJt$x=;Z0ei7<03G?g;V3b%CSW$b(=CKIzPmzE}zRef -_?ie;X<5@?d8C0UsjjRp^_t}2%{wzjrhF)k5@=V$JM%4AX0SK9SWy(;O9Y6<67dr`Zf%ydPXFP3Fjkh -ODLj9W!%Q&qOy?Sg-nTunLe*i%z!XL2#&H8y5<*BzUbGRdeDwsdp<_m;fItu3poxFxsXELXOE!r4hxt -M&c3JHlJv*Bf^lWHvr^{ipZr%W9e4J<WO9fBmjvkLkW*c?61mS6APs*v*b^6nm?!SnNe<NzPu_)tPKp -hpX!s#v$H);ilZ0`i!K$XKFpPIdyf!*Dt)7&Gj;))oFK&uBJ}X+|0#T;AuZ|m)g}Dxt!6swfSPVy46t -qsK)iX(&^P{mz%pWRHyY&8XibJ!;bGBs5`gTD{S1#kF&nDsO)WJKgL$z@Kx2<F*do|=x~RQ`GJY&s|V -(;iSwIs>i#6{j$FL@lcQWg!pi)T+Jn9Q&PXh5nwRa?YJ+Xt65B#e-MJH~akoAa(O@XZog$Y!5dG`ZgM -Po$X>6Vg*Y>*2tykCmerp{@AsmEoH-ryExEI3x5FUhZ=)=+nc^FJWsC;O{H433whf%0B3YA8o(kN6Kg --WAPX%s4rLZ#6#gmDOE2t&1z3ZV{Rs5kQU3g!pQCUcAVA#<DgQO#znS?6uO-eG>se8B87cbGlqCrsZg --zncF-y`23-yPo?-xuE$-;ojXQ|2S)nE4s=bLJP!L*`@V5%ZXN!aQYu$^43W#{8Q34f6@}Tjo>dcg%C -<_snO^3+8j?56mB#FPJ|ue`fx|eCZ$cD-K>W-!Lc4Uzz?K`9tJSkUu{D?D&Io$(%A%=5Ng3nHh7&^l# -UkxnTam^siUJ^snWT`6u&=dCk0G{>A*8`4977=G*l<aIk)7m*!yD$0WjJfXOZ<4>8%pWFM0QOoo`mm` -F?#OcW*>6T$?2V)Tj8Cq|zbePZ;9(I-Zq7=2>&iP0xUpBQ~&^oh|YMxPjcB>G77k?14QN1~5JABjE^e -I)uw^pWTz(MO_>L?4Mh5`7Z%Nzf-jp9Fmp^hwYsL7xPD67)&XCqbVCeG>FZ&?iBk1br0xDD+Y2qtHj8 -k3t`XJ_>yl`Y7~K=%dg_p^rizg+2;>H2P@t(deVmN28BMAB{d5eKh)L^wH>}(MO|?Mjwqn8hr?T2z>~ -B2z>~B2z>~B2z>~B2z>~B2z>~B2z>~B2z?Ct81ymdW6;N-k3k=UJ_daZ`WW;v=wr~wppQWxgFeRjbn1 -VvPxu2wRR8xjHoxV<*N6YIN|tG++qb_>{{v7<0Rj{N6aWAK2ml*O_EvJ33*7hs003nH000jF0000000 -000006du00000aA|NaUtei%X>?y-E^v8JO928D02BZK00;mZO7>Q7_pjHy0RRA20{{RI00000000000 -002Cfh7R|0B~t=FJE76VQFq(UoLQYP)h*<6aW+e000O88%p+8eg`F$&;kGeqy+!~6#xJL0000000000 -wt)@<003}la4%n9aA|NYa&>NQWpZC%E^v8JO928D02BZK00;maO7>RG$G|nf0000U0RR9D000000000 -00002Cfe{7(0B~t=FK~G-ba`-PWKc^10u%rg0000802@m7R+hDJp-}+<06hW#02u%P00000000000Je -eq1^@tXX>c!JX>N37a&BR4FJE72ZfSI1UoLQYP)h*<6aW+e000O88%p+83?7JMTMPgI11JCh8UO$Q00 -00000000wt<5P003}la4%nJZggdGZeeUMVs&Y3WM5@&b}n#vP)h*<6aW+e000O88%p+8(ZR!S5DWkSy -(j<x761SM0000000000wt*HE003}la4%nJZggdGZeeUMV_{=xWiD`eP)h*<6aW+e000O88%p+8N-^Lq -fe-)y4>kY*9smFU0000000000wt-q9003}la4%nJZggdGZeeUMV{dL|X=inEVRUJ4ZZ2?nP)h*<6aW+ -e000O88%p+8$(OSQyc+-jxm*AM8vp<R0000000000wt*Ki003}la4%nJZggdGZeeUMWq4y{aCB*JZgV -bhc~DCM0u%rg0000802@m7Rwn?Xr|19x08{}002KfL00000000000Jeb)P5=OKX>c!JX>N37a&BR4FK -uCIZZ2?nP)h*<6aW+e000O88%p+8X^Lvwun7PF`5OQL8UO$Q0000000000wt**4003}la4%nJZggdGZ -eeUMaCvZYZ)#;@bS`jtP)h*<6aW+e000O88%p+8c;#0fxe5RP=N|w7Bme*a0000000000wt){>003}l -a4%nJZggdGZeeUMb7gF1UvG7EWMOn=WM5-wWn*hDaCuNm0Rj{N6aWAK2ml*O_EzZ%`(R`Y002TR0015 -U0000000000006du3S<BPaA|NaUukZ1WpZv|Y%h0cWo2w%Vs&Y3WMy(LaCuNm0Rj{N6aWAK2ml*O_Ey -e!>NIEo004vl0012T0000000000006dus&D`RaA|NaUukZ1WpZv|Y%gPMX)j-2X>MtBUtcb8c~DCM0u -%rg0000802@m7RzQwlr3MH902CSk03!eZ00000000000JecmaR2~tX>c!JX>N37a&BR4FJo+JFJX0bZ -)0z5aBO9CX>V>WaCuNm0Rj{N6aWAK2ml*O_Evldu6ol7000&u001EX0000000000006dulz9LEaA|Na -UukZ1WpZv|Y%gPMX)j`7b7fy+Z*6U1Ze%WSc~DCM0u%rg0000802@m7R!w)w)H5Ie08VuP03QGV0000 -0000000Jedqga80=X>c!JX>N37a&BR4FJo+JFJo<FZ*X*JZ*FrgaCuNm0Rj{N6aWAK2ml*O_EsWCO)V -<{000I9001Na0000000000006du7Nr0HaA|NaUukZ1WpZv|Y%gPMX)j}MZEaz0WM5-%ZggdMbS`jtP) -h*<6aW+e000O88%p+8W^Syw5(NMN01E&B82|tP0000000000wt<7D003}la4%nJZggdGZeeUMV{B<JZ -DDC{E^v8JO928D02BZK00;mZO7>PjxE^|C1^@u^5C8xm00000000000002Cfy}D_0B~t=FJEbHbY*gG -VQepBY-ulTVQFq(aA9(DWpXZXc~DCM0u%rg0000802@m7R+NCe|H}*j06{7M02=@R00000000000Jec -|vH$>ZX>c!JX>N37a&BR4FJo+JFK}UUb7gWaaCuNm0Rj{N6aWAK2ml*O_Errx8c*#4006KD001HY000 -0000000006dubH4xpaA|NaUukZ1WpZv|Y%gPMX)kbcZ)b94b8}x}VRCaWaCuNm0Rj{N6aWAK2ml*O_E -sNWs53qk000O`001BW0000000000006dupuzwEaA|NaUukZ1WpZv|Y%gPMX)khRabII^ZEaz0WG--dP -)h*<6aW+e000O88%p+8smxi)o(2E_{u2NI9RL6T0000000000wt*bi003}la4%nJZggdGZeeUMV{B<J -b8u;HZe?<FE^v8JO928D02BZK00;mZO7>R$dH_pU0001V0000X00000000000002Cf%V-00B~t=FJEb -HbY*gGVQepBY-ulZbYXOLb6;a`WMy+MaCuNm0Rj{N6aWAK2ml*O_Ezha)iII;001fv001HY00000000 -00006dujNSkMaA|NaUukZ1WpZv|Y%gPPZEaz0WOFZHUukY>bYEXCaCuNm0Rj{N6aWAK2ml*O_Ewn`ka -dL!005mG0018V0000000000006duUgH1&aA|NaUukZ1WpZv|Y%gPPZEaz0WOFZLVPj}zE^v8JO928D0 -2BZK00;mZO7>QL=HuQ?0ssK^1^@sb00000000000002CfgtPv0B~t=FJEbHbY*gGVQepBZ*6U1Ze(*W -V`yb#Yc6nkP)h*<6aW+e000O88%p+8q@aj{<pcl#k`Dj?Bme*a0000000000wt=ed003}la4%nJZggd -GZeeUMV{dJ3VQyq|FJo_QaBO9CX>V>WaCuNm0Rj{N6aWAK2ml*O_Eus~!Z{WT0037e001Wd00000000 -00006du(enTRaA|NaUukZ1WpZv|Y%gPPZEaz0WOFZLZ*FF3XLWL6bZKvHE^v8JO928D02BZK00;mZO7 ->QQO%33i2mk=T82|tu00000000000002Cfh_+30B~t=FJEbHbY*gGVQepBZ*6U1Ze(*WWMyJ?XD)DgP -)h*<6aW+e000O88%p+8>IGKA`UL<0*AxH%A^-pY0000000000wt)l)0RV7ma4%nJZggdGZeeUMV{dJ3 -VQyq|FJy0bZftL1WG--dP)h*<6aW+e000O88%p+8pAhN|5(EGMWDEcRAOHXW0000000000wt+ql0RV7 -ma4%nJZggdGZeeUMV{dJ3VQyq|FJ^LOWqM^UaCuNm0Rj{N6aWAK2ml*O_Ex{h`{3gO005^30015U000 -0000000006dujuHU?aA|NaUukZ1WpZv|Y%gPPZEaz0WOFZQVRL9MaCuNm0Rj{N6aWAK2ml*O_Ew3*ls -xJI003+R0015U0000000000006dutrY<PaA|NaUukZ1WpZv|Y%gPPZEaz0WOFZQWo&RRaCuNm0Rj{N6 -aWAK2ml*O_EtGg<rLlp006lX0018V0000000000006du(-#2%aA|NaUukZ1WpZv|Y%gPPZEaz0WOFZR -Ze(S6E^v8JO928D02BZK00;mZO7>RfItHdr1ONbZ3;+Nj00000000000002Cf$kjv0B~t=FJEbHbY*g -GVQepBZ*6U1Ze(*WX>N0HWn*+MaCuNm0Rj{N6aWAK2ml*O_EyV2Ht<^<000JY001EX0000000000006 -dudm;e<aA|NaUukZ1WpZv|Y%gPPZEaz0WOFZRZgX^DY-}!Yc~DCM0u%rg0000802@m7RxUZKBw!2x0I -4tl03HAU00000000000Jeb@KLG%6X>c!JX>N37a&BR4FJo_QZDDR?b1!UZb963nc~DCM0u%rg000080 -2@m7R#&d`FJcD(06`W203ZMW00000000000Jed#O923IX>c!JX>N37a&BR4FJo_QZDDR?b1!pcVRB<= -E^v8JO928D02BZK00;mZO7>P&AVkH%2LJ#Q82|tt00000000000002Cfl*Td0B~t=FJEbHbY*gGVQep -BZ*6U1Ze(*Wb7*gOE^v8JO928D02BZK00;mZO7>QZp>!kW1ONao4*&oo00000000000002CflgZi0B~ -t=FJEbHbY*gGVQepBZ*6U1Ze(*Wb#7^Hb97;BY%XwlP)h*<6aW+e000O88%p+8)jKDVP6q%0Oc?+G9{ ->OV0000000000wt;nE0RV7ma4%nJZggdGZeeUMV{dJ3VQyq|FL!8VWo#~Rc~DCM0u%rg0000802@m7R -?~G2E;|7L09pe804D$d00000000000JebuXaN9lX>c!JX>N37a&BR4FJx(RbaH88b#!TOZgVeRUukY> -bYEXCaCuNm0Rj{N6aWAK2ml*O_Ewaha2N*y006}V001KZ0000000000006dufN22$aA|NaUukZ1WpZv -|Y%gSKb98cPVs&(BZ*FrhVqtS-E^v8JO928D02BZK00;mZO7>P4m-%-~0RRBm0ssIg0000000000000 -2CfyiqC0B~t=FJEbHbY*gGVQepCX>)XPX<~JBX>V?GFKKRbbYX04Wn?aJc~DCM0u%rg0000802@m7Rz -Vi|@ZSai0A3jY03-ka00000000000JecyZ2<sqX>c!JX>N37a&BR4FJx(RbaH88b#!TOZgVelWNCABE -^v8JO928D02BZK00;mZO7>R5>)-<B0RRAu1ONae00000000000002CfqHZS0B~t=FJEbHbY*gGVQepC -X>)XPX<~JBX>V?GFL!8VWo#~Rc~DCM0u%rg0000802@m7Rzp8a&L98)03HAU03QGV00000000000Jed -mb^!ozX>c!JX>N37a&BR4FKKRMWq2=NUukY>bYEXCaCuNm0Rj{N6aWAK2ml*O_Escr*$K%L004ME001 -BW0000000000006du|8@ZYaA|NaUukZ1WpZv|Y%ghUWMz0SV{dG1Wn*-2axQRrP)h*<6aW+e000O88% -p+8Z2uE)ks|;A@sj`mB>(^b0000000000wt)tV0RV7ma4%nJZggdGZeeUMX>Md?crS2aV{2h&WnX4#Z -e(S0E^v8JO928D02BZK00;mZO7>QlMPlUc1pok?82|tt00000000000002Cf!eMC0B~t=FJEbHbY*gG -VQepHZe(S6FLQ5oa${w4E^v8JO928D02BZK00;mZO7>QQB1p0>5&!@NJOBVA00000000000002CfdsV -y0B~t=FJEbHbY*gGVQepKZ)0I}X>V?GFJE72ZfSI1UoLQYP)h*<6aW+e000O88%p+8b)*io5eWbQ)E5 -8%B>(^b0000000000wt;iU0RV7ma4%nJZggdGZeeUMY;R*>bZKvHb1z?HX>)XSbZKmJE^v8JO928D02 -BZK00;mZO7>Pjqo%9S2><{99smF(00000000000002CfydAR0B~t=FJEbHbY*gGVQepKZ)0I}X>V?GF -JE(cb7OCAW@%?GaCuNm0Rj{N6aWAK2ml*O_ExE$MN)wT008_60018V0000000000006du+S&mCaA|Na -UukZ1WpZv|Y%gqYV_|e@Z*FrhVqtS-E^v8JO928D02BZK00;mZO7>QKBT?aD1polJ5C8xo000000000 -00002CftcR`0B~t=FJEbHbY*gGVQepLWprU=VRT_HUtei%X>?y-E^v8JO928D02BZK00;mZO7>PkZ6D -*(0{{Rc3IG5f00000000000002CfjQ*?0B~t=FJEbHbY*gGVQepLWprU=VRT_HUutu2ZZ2?nP)h*<6a -W+e000O88%p+8;9veW`xyWLy<z|W9smFU0000000000wt-0L0RV7ma4%nJZggdGZeeUMZDn*}WMOn+F -JfVHWiD`eP)h*<6aW+e000O88%p+8^(!W{2nzrJEhYc}CjbBd0000000000wt;^G0swGna4%nJZggdG -ZeeUMZDn*}WMOn+FK}yTUvg!0Z*_8GWpgfYc~DCM0u%rg0000802@m7R)8{dL{0zz0BZmM04x9i0000 -0000000Jee54gvshX>c!JX>N37a&BR4FKuOXVPs)+VJ~TIaBp&SY-wUIUtei%X>?y-E^v8JO928D02B -ZK00;mZO7>QPj@R{B0{{S82LJ#o00000000000002Cfn*N?0B~t=FJEbHbY*gGVQepLWprU=VRT_HX> -D+Ca&&BIVlQ7~Z*6d4bS`jtP)h*<6aW+e000O88%p+8BE&_;v<UzJ^&bELDgXcg0000000000wt)r{0 -swGna4%nJZggdGZeeUMZDn*}WMOn+FKKOXZ*p{OX<{#5WNCABb1rasP)h*<6aW+e000O88%p+8Y)E<& -7YP6W3mpIeDF6Tf0000000000wt)g20swGna4%nJZggdGZeeUMZDn*}WMOn+FKKOXZ*p{OX<{#5Wo~w -JE^v8JO928D02BZK00;mZO7>QJ$teCi0000#0000W00000000000002CfnX*A0B~t=FJEbHbY*gGVQe -pLZ)9a`b1z?CX>MtBUtcb8c~DCM0u%rg0000802@m7RuwRyPk8|V0Nw)t03iSX00000000000JeeICI -SF(X>c!JX>N37a&BR4FKusRWo&aVV_|M&X=Gt^WiD`eP)h*<6aW+e000O88%p+8JE<F%s0RQ56B_^kA -^-pY0000000000wt<l-0swGna4%nJZggdGZeeUMZEs{{Y;!MUX>w&_bYFFHY%XwlP)h*<6aW+e000O8 -8%p+8V(5)yXafKM*a-jtCIA2c0000000000wt;yt0swGna4%nJZggdGZeeUMZEs{{Y;!MWZ*py6bYEj -{Zgg^QY%XwlP)h*<6aW+e000O88%p+8-<PS)!T|sP1_S^A9RL6T0000000000wt*!y0swGna4%nJZgg -dGZeeUMZEs{{Y;!MZZe(S6E^v8JO928D02BZK00;mZO7>P4Zd=I!1ONar3IG5r00000000000002Cfg -&~n0B~t=FJEbHbY*gGVQepLZ)9a`b1!Lbb97;BY+-b1Z*E_5WpHnDbS`jtP)h*<6aW+e000O88%p+8$ -K8-vx)=ZeQ&9i_8~^|S0000000000wt;Ip0swGna4%nJZggdGZeeUMZEs{{Y;!McX>MySaCuNm0Rj{N -6aWAK2ml*O_EsAl^6G2>0080w0015U0000000000006duUsD1AaA|NaUukZ1WpZv|Y%gtZWMyn~FLPs -PWo>0HaCuNm0Rj{N6aWAK2ml*O_Ez}ke8Ff2001Kr001Na0000000000006du2UP+9aA|NaUukZ1WpZ -v|Y%gtZWMyn~FLPyKa${&;b7OCCWiD`eP)h*<6aW+e000O88%p+8ih`)-&jJ7da|ZwbCjbBd0000000 -000wt=x*0swGna4%nJZggdGZeeUMZEs{{Y;!MjWo%_*bZKvHUvP3|W^*oZc~DCM0u%rg0000802@m7R -#62<WxoUf01^)X03`qb00000000000Jed}UIGAcX>c!JX>N37a&BR4FKusRWo&aVbYXI5WprO~d30!R -ZZ2?nP)h*<6aW+e000O88%p+8X#?@S0R;d65DowU9RL6T0000000000wt>fE0swGna4%nJZggdGZeeU -MZEs{{Y;!MnXk}$=E^v8JO928D02BZK00;mZO7>O`AAw3T0000o0000X00000000000002Cfdgp*0B~ -t=FJEbHbY*gGVQepMWpsCMa%(SNUukY>bYEXCaCuNm0Rj{N6aWAK2ml*O_Etk!O8<-%002Eu0012T00 -00000000006dubZG(raA|NaUukZ1WpZv|Y%gwQba!uZYcFASbZ9Pcc~DCM0u%rg0000802@m7R!m7DT -}}f40AUCK03HAU00000000000JecUe*yq-X>c!JX>N37a&BR4FK%UYcW-iQFJob2Xk{*Nc~DCM0u%rg -0000802@m7R-!8&==}x&0MHiz03iSX00000000000Jed}f&u_=X>c!JX>N37a&BR4FK%UYcW-iQFJy0 -bZftL1WG--dP)h*<6aW+e000O88%p+8^{UMQ*9ias)*S!<BLDyZ0000000000wt)eP0swGna4%nJZgg -dGZeeUMZe?_LZ*prdY+-tNUw3F_Wo#~Rc~DCM0u%rg0000802@m7R-dh8<cb#n0Ix^@03ZMW0000000 -0000Jeb{lmY;7X>c!JX>N37a&BR4FK%UYcW-iQFLPycb7^mGE^v8JO928D02BZK00;mZO7>Q?wHpV)1 -pol)4*&oj00000000000002Cf#ItH0B~t=FJEbHbY*gGVQepMWpsCMa%(SjbZKmJE^v8JO928D02BZK -00;mZO7>PQuX|s*0ssL21^@sb00000000000002Cf!?tK0B~t=FJEbHbY*gGVQepMWpsCMa%(SmZESL -IV=i!cP)h*<6aW+e000O88%p+8000000ssI200000Bme*a0000000000wt>~O0swGna4%nJZggdGZee -UMZ*XODVRUJ4ZgVeRUukY>bYEXCaCuNm0Rj{N6aWAK2ml*O_EuPwuiBOe005R6001EX000000000000 -6du8MOicaA|NaUukZ1WpZv|Y%gzcWpZJ3X>V?GFJowBV{0yOc~DCM0u%rg0000802@m7R^~jS+%*aS0 -9Ymf03rYY00000000000JeedyaE7lX>c!JX>N37a&BR4FK=*Va$$67Z*FrhW^!d^dSxzfc~DCM0u%rg -0000802@m7R*Rxwyv!W{0K{+r03!eZ00000000000Jec+#{vLwX>c!JX>N37a&BR4FK=*Va$$67Z*Fr -haB^jEVRB_IaCuNm0Rj{N6aWAK2ml*O_ErD@0006200000001fg0000000000006duaODC3aA|NaUuk -Z1WpZv|Y%gzcWpZJ3X>V?GFJg6RY-BHAUukY>bYEXCaCuNm0Rj{N6aWAK2ml*O_Ex2i#`J*&001Qr00 -1ul0000000000006duy5#}@aA|NaUukZ1WpZv|Y%gzcWpZJ3X>V?GFJg6RY-BHDb!lv5UvzR|V{2t{E -^v8JO928D02BZK00;mZO7>QM@PA8Q0ssJx1pojl00000000000002Cfr#q@0B~t=FJEbHbY*gGVQepN -aAk5~bZKvHb1!0bX>4RKZDn*}WMOn+E^v8JO928D02BZK00;mZO7>QOCoIZr0ssKQ1poju000000000 -00002CfiCU>0B~t=FJEbHbY*gGVQepNaAk5~bZKvHb1!0bX>4RKZDn*}WMOn+Uu9%zbYWs_WiD`eP)h -*<6aW+e000O88%p+8GPDpbG6MhrmIwd<F#rGn0000000000wt?&L0swGna4%nJZggdGZeeUMZ*XODVR -UJ4ZgVeUb!lv5FKuOXVPs)+VP9-zXJKP`E^v8JO928D02BZK00;mZO7>O|{>5eL0RR9q1ONah000000 -00000002Cfo${w0B~t=FJEbHbY*gGVQepNaAk5~bZKvHb1!0bX>4RKcW7m0Y%XwlP)h*<6aW+e000O8 -8%p+8*Qcn*J^}y$i3I=vFaQ7m0000000000wt<`W0swGna4%nJZggdGZeeUMZ*XODVRUJ4ZgVeUb!lv -5FL!8VWo%z%WNCC^Vr*qDaCuNm0Rj{N6aWAK2ml*O_EtwsgCGF}008(4001rk0000000000006duC;0 -*ZaA|NaUukZ1WpZv|Y%gzcWpZJ3X>V?GFJg6RY-BHYXk}$=Uu<P(VPknNaCuNm0Rj{N6aWAK2ml*O_E -zED6nixQ001)p001li0000000000006dubo~MVaA|NaUukZ1WpZv|Y%gzcWpZJ3X>V?GFKKRbbYX04F -JE72ZfSI1UoLQYP)h*<6aW+e000O88%p+8UbgC>3jzQD0tEm7GXMYp0000000000wt@5g0swGna4%nJ -ZggdGZeeUMZ*XODVRUJ4ZgVebZgX^DY-}%OWNCC^Vr*q!Y-ML*V|gxcc~DCM0u%rg0000802@m7Rt== -d!N4E@08?uK04V?f00000000000Jeco00RJUX>c!JX>N37a&BR4FK=*Va$$67Z*FrhX>N0LVQg$KcW7 -m0Y%XwlP)h*<6aW+e000O88%p+8y}5(Hivs`vvI+nI9RL6T0000000000wt-e50|0Poa4%nJZggdGZe -eUMa%FKZUtei%X>?y-E^v8JO928D02BZK00;mZO7>R1z_J+)5&!_=KmY(C00000000000002CfgB|R0 -B~t=FJEbHbY*gGVQepQWpOWKZ*FsRa&=>LZ*p@kaCuNm0Rj{N6aWAK2ml*O_Ev7YiIQ9t007WM0012T -0000000000006duXg31@aA|NaUukZ1WpZv|Y%g+UaW8UZabIR>Y-KKRc~DCM0u%rg0000802@m7Rx!* -+x`!eF06c*J03ZMW00000000000JeeuO9KFKX>c!JX>N37a&BR4FLGsZFLGsZUukZ0bYX04E^v8JO92 -8D02BZK00;mZO7>PKomn*b1ONbF5&!@k00000000000002Cfy8bD0B~t=FJEbHbY*gGVQepQWpOWZWp -Q6~WpplZc~DCM0u%rg0000802@m7Rv1kPWzrh}0A^qS03rYY00000000000Jeema{~ZyX>c!JX>N37a -&BR4FLGsZFLGsZUv+M2ZgX^DY-}!Yc~DCM0u%rg0000802@m7RsaA100IC20000003-ka0000000000 -0Jeb%kOKg4X>c!JX>N37a&BR4FLGsbZ)|mRX>V>XUtei%X>?y-E^v8JO928D02BZK00;mZO7>Re8_TK -x0000-0ssIY00000000000002CflZJD0B~t=FJEbHbY*gGVQepQWpi(Ab#!TOZZBeCb7d}Yc~DCM0u% -rg0000802@m7RsaA100IC20000004o3h00000000000JedOkplp5X>c!JX>N37a&BR4FLGsbZ)|mRX> -V>XY-ML*V|g!MUukY>bYEXCaCuNm0Rj{N6aWAK2ml*O_ErYZCo(b`002N<001ih0000000000006du) -sX`LaA|NaUukZ1WpZv|Y%g+Ub8l>QbZKvHFKlIJVPknOa%FRGY<6XGE^v8JO928D02BZK00;mZO7>O& -00002000000000l00000000000002Cfl#ai0B~t=FJEbHbY*gGVQepQWpi(Ab#!TOZZC3Wb8l>RWo&6 -;FJE72ZfSI1UoLQYP)h*<6aW+e000O88%p+8!vG@RNCf}@WE21ZD*ylh0000000000wt=6l0|0Poa4% -nJZggdGZeeUMa%FRGY;|;LZ*DJgWpi(Ac4cg7VlQH0b7d}Yc~DCM0u%rg0000802@m7R(s_xK5G#G02 -xXE05Jdn00000000000JecJvI78cX>c!JX>N37a&BR4FLGsbZ)|mRX>V>Xa%FRGY<6XAX<{#9VQyq;W -MOn=b1rasP)h*<6aW+e000O88%p+8Dt&gR=o<h4#cTioE&u=k0000000000wt?!y0|0Poa4%nJZggdG -ZeeUMa%FRGY;|;LZ*DJgWpi(Ac4cg7VlQT4V{~tFc`k5yP)h*<6aW+e000O88%p+8Db-rPyaoUONfrP -AHvj+t0000000000wt*ht0|0Poa4%nJZggdGZeeUMa%FRGY;|;LZ*DJgWpi(Ac4cg7VlQTIb#7!|V_| -M&X=Gt^WpgfYc~DCM0u%rg0000802@m7R<*OmdWZ}F0AMBn051Rl00000000000JecI=K}z6X>c!JX> -N37a&BR4FLGsbZ)|mRX>V>Xa%FRGY<6XAX<{#Ma&LBNWMy(LaCuNm0Rj{N6aWAK2ml*O_ExMKo!sXG0 -00~e001ul0000000000006du1oQ&{aA|NaUukZ1WpZv|Y%g+Ub8l>QbZKvHFLGsbZ)|pDY-wUIa%FID -a&%>KE^v8JO928D02BZK00;mZO7>QQtT5f|1ONa|6#xJ;00000000000002CfjIaB0B~t=FJEbHbY*g -GVQepQWpi(Ab#!TOZZC3Wb8l>RWo&6;FLGsZb!l>CZDnqBb1rasP)h*<6aW+e000O88%p+8((7NZhz< -Y%dMy9|F8}}l0000000000wt;p10|0Poa4%nJZggdGZeeUMa%FRGY;|;LZ*DJgWpi(Ac4cg7VlQ%Kb8 -l>RWpXZXc~DCM0u%rg0000802@m7RsaA100IC20000003QGV00000000000Jecj3<LmhX>c!JX>N37a -&BR4FLiWjY;!MPUukY>bYEXCaCuNm0Rj{N6aWAK2ml*O_Ez^Ml55xn000*a001KZ0000000000006du -i3|h)aA|NaUukZ1WpZv|Y%g_mX>4;ZUut1;VPkJ!bY*ySE^v8JO928D02BZK00;mZO7>PtcsW1T0RRB -^0{{RU00000000000002Cfua%w0B~t=FJEbHbY*gGVQepTbZKmJFJEkLXD)DgP)h*<6aW+e000O88%p -+819C#bmjVC)fd&8o9smFU0000000000wt=w}1ORYpa4%nJZggdGZeeUMb#!TLb1z|VaAaw6b1rasP) -h*<6aW+e000O88%p+8<YSF%<pTf!Tn7LE9RL6T0000000000wt<8f1ORYpa4%nJZggdGZeeUMb#!TLb -1!3WZE#_9E^v8JO928D02BZK00;mZO7>Q^w285E1^@s76#xJ!00000000000002CfutJ*0B~t=FJEbH -bY*gGVQepTbZKmJFJo_QaA9<5Vrgt?ba`KNVP|tLaCuNm0Rj{N6aWAK2ml*O_Eu~YJ+7Dl008m;0018 -V0000000000006duULphlaA|NaUukZ1WpZv|Y%g_mX>4;ZWMOn=bZKp6E^v8JO928D02BZK00;mZO7> -RJw#AN21pojm4gdfm00000000000002Cfioin0B~t=FJEbHbY*gGVQepTbZKmJFJxtKa%E#-bZKvHE^ -v8JO928D02BZK00;mZO7>PJj`dyb0{{Sq3;+Nr00000000000002CfxjpO0B~t=FJEbHbY*gGVQepTb -ZKmJFJx(QWn*+-b#iQ9Xk~10WpZ;aaCuNm0Rj{N6aWAK2ml*O_EszUN|z1;002e^0018V0000000000 -006du^DG1aaA|NaUukZ1WpZv|Y%g_mX>4;ZWoKt!Y-w(5E^v8JO928D02BZK00;mZO7>R98_*XH0ssJ -!1ONaZ00000000000002Cfj%$<0B~t=FJEbHbY*gGVQepTbZKmJFJ*3HZ)9n1XD)DgP)h*<6aW+e000 -O88%p+8JY;3*(F6bh_zM64A^-pY0000000000wt<N<1ORYpa4%nJZggdGZeeUMb#!TLb1!9XbaHucZ) -t9Hb1rasP)h*<6aW+e000O88%p+8l?9u(>jwY;0u%rMApigX0000000000wt<>A1ORYpa4%nJZggdGZ -eeUMb#!TLb1!CTY-MwKb97~GE^v8JO928D02BZK00;mZO7>Qx)lV&00RRBZ0ssIY00000000000002C -fy6%q0B~t=FJEbHbY*gGVQepTbZKmJFJ@_MWpsIPWpgfYc~DCM0u%rg0000802@m7Ruo!&&;<nm04WR -r02}}S00000000000JeczK?DGBX>c!JX>N37a&BR4FLiWjY;!MXY-wU+E^v8JO928D02BZK00;mZO7> -Q2YVO4#2LJ&66951m00000000000002Cftf}G0B~t=FJEbHbY*gGVQepTbZKmJFKA(NXk~LQaCuNm0R -j{N6aWAK2ml*O_Ey(_5u>63000{U001oj0000000000006du^i2c+aA|NaUukZ1WpZv|Y%g_mX>4;ZX ->Mv|V{~70Wn*=6Wpr|3ZgX&Na&#_mc~DCM0u%rg0000802@m7R{3)aly?mP0B|h;03HAU0000000000 -0JeeQPXqvPX>c!JX>N37a&BR4FLiWjY;!McZ)ay|Zf7oVc~DCM0u%rg0000802@m7R<*HoXg3=G07q8 -<02=@R00000000000JedYT?7DdX>c!JX>N37a&BR4FLiWjY;!MdX>(&PaCuNm0Rj{N6aWAK2ml*O_Et -Nz46t_r005~30012T0000000000006du1bGAiaA|NaUukZ1WpZv|Y%g_mX>4;ZZEs{{Y;!Jfc~DCM0u -%rg0000802@m7R>4fIqtF8Y06Yi)03ZMW00000000000Jed)dISJ)X>c!JX>N37a&BR4FLiWjY;!MgV -Pk7yXK8L{E^v8JO928D02BZK00;mZO7>P<`C(i91pok35dZ)u00000000000002Cfy90U0B~t=FJEbH -bY*gGVQepTbZKmJFLPydb#QcVZ)|g4Vs&Y3WG--dP)h*<6aW+e000O88%p+8@r{%i#|r=e@FM^KApig -X0000000000wt)qO1ORYpa4%nJZggdGZeeUMb#!TLb1!psVsLVAV`X!5E^v8JO928D02BZK00;mZO7> -R8Iuuml2><{V9smFz00000000000002CfeVoY0B~t=FJEbHbY*gGVQepTbZKmJFLY&Xa9?C;axQRrP) -h*<6aW+e000O88%p+8JA<z_-U$Ezbs_)&AOHXW0000000000wt*>|1ORYpa4%nJZggdGZeeUMb#!TLb -1!vnaA9L>X>MmOaCuNm0Rj{N6aWAK2ml*O_EvtOju$xt007?x000{R0000000000006duMWqA)aA|Na -UukZ1WpZv|Y%g_mX>4;Zb#iQTE^v8JO928D02BZK00;mZO7>Pww&sZ+1pokm4FCWk00000000000002 -Cfw!mx0B~t=FJEbHbY*gGVQepTbZKmJFLr5ibai2DWo~vZaCuNm0Rj{N6aWAK2ml*O_Ezo^D5y&Y006 -}i000~S0000000000006du6|MvTaA|NaUukZ1WpZv|Y%g_mX>4;ZcW7m0Y%XwlP)h*<6aW+e000O88% -p+8FRk9iF984mR00419RL6T0000000000wt<?o1ORYpa4%nJZggdGZeeUMc4KodUtei%X>?y-E^v8JO -928D02BZK00;mZO7>R$3Jidy1ONcP4FCWe00000000000002CfdsY$0B~t=FJEbHbY*gGVQepUV{<QJ -VR~U<axQRrP)h*<6aW+e000O88%p+8Q}91`vlRdU#6|!B7ytkO0000000000wt?ch1ORYpa4%nJZggd -GZeeUMc4KodXK8dUaCuNm0Rj{N6aWAK2ml*O_EwY2jo<qP004Xx0015U0000000000006du%g_V>aA| -NaUukZ1WpZv|Y%g|Wb1!XWa$|LJX<=+GaCuNm0Rj{N6aWAK2ml*O_EzjemM&xt007Y~0018V0000000 -000006du0@nlpaA|NaUukZ1WpZv|Y%g|Wb1!psVs>S6b7^mGE^v8JO928D02BZK00;mZO7>PpyV$aX7 -ytkpSpWbd00000000000002CfurRF0B~t=FJEbHbY*gGVQepUV{<QdWpZ<AZ*F66Zgg^QY%XwlP)h*< -6aW+e000O88%p+8uPnR!UIqXFW)lDa7XSbN0000000000wt;B=1ORYpa4%nWWo~3|axY(BX>MtBUtcb -8c~DCM0u%rg00008031s8R?_w4&jBF-0QH6d01^NI00000000000Jeeq1O)(aX>c!Jc4cm4Z*nhlX?Q -Mhc~DCM0u%rg00008031s8R>6_5z`kby02;CZ03ZMW00000000000JecFCItX+X>c!Jc4cm4Z*nhmd2 -nfNXJ2J_bY*UHX>V?GE^v8JO928D02BZK00;maO7>PC6?fq+0RRBo0RR9N00000000000002Cfhdjz0 -B~t=FJE?LZe(wAFLq^aWN&gVba-@7O928D02BZK00;mZO7>O(bDXyj0RRBe0RR9b00000000000002C -fr*a=0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%gD5X>MtBUtcb8c~DCM0u%rg0000802@m7R?<DWkVFC -i0AmFJ03ZMW00000000000JeeKkOcs6X>c!Jc4cm4Z*nhVVPj}zV{dMBa&K%eUt?`#E^v8JO928D02B -ZK00;mZO7>Qh=}f=>1pol46951s00000000000002CfnAdY0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY% -gJCVQ_S1axQRrP)h*<6aW+e000O88%p+85lF+qT>=0A{{;X5ApigX0000000000wt=0Q1pshqa4%nWW -o~3|axY_HV`yb#Z*FvQZ)`7PVPj}zE^v8JO928D02BZK00;mZO7>Q!HL1E!0RR9B0{{Rb0000000000 -0002CfjOK70B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%gPPZE#_9E^v8JO928D02BZK00;mZO7>P?7DzG -Z5dZ)nKmY(H00000000000002CfykW&0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%gPPZgg^QY;0w6E^v -8JO928D02BZK00;mZO7>O=fxlfz1^@tR4*&os00000000000002Cf%LBh0B~t=FJE?LZe(wAFJob2Xk -}w>Zgg^QY%gYMY-M+HVQ_F|axQRrP)h*<6aW+e000O88%p+8N_1|4?F9e;IuHN=CIA2c0000000000w -t<4S1pshqa4%nWWo~3|axY_HV`yb#Z*FvQZ)`7UWp#3Cb98BAb1rasP)h*<6aW+e000O88%p+89*Jjx -7zqFX!5aVoB>(^b0000000000wt=&}1pshqa4%nWWo~3|axY_HV`yb#Z*FvQZ)`7fWpZg@Y-xIBE^v8 -JO928D02BZK00;mZO7>Qq5k_J%0RR970{{Rc00000000000002Cfeyw60B~t=FJE?LZe(wAFJob2Xk} -w>Zgg^QY%h0mVQ_F|axQRrP)h*<6aW+e000O88%p+8jsAzepa1{>@&Et;D*ylh0000000000wt<1i1p -shqa4%nWWo~3|axY_HV`yb#Z*FvQZ)`7PVPj}zb1z?CX>MtBUtcb8c~DCM0u%rg0000802@m7RyaU7m -~96D0GAX104)Fj00000000000Jec@$OQm!X>c!Jc4cm4Z*nhVVPj}zV{dMBa&K%eV_{=xWpgiPX>4U* -V_{=xWiD`eP)h*<6aW+e000O88%p+8Uefd&!2tjO2?PKDE&u=k0000000000wt*th1pshqa4%nWWo~3 -|axY_HV`yb#Z*FvQZ)`7PVPj}zb1!mbWNC9>V_{=xWiD`eP)h*<6aW+e000O88%p+8s1pqUQUCw|UH| -|99{>OV0000000000wt+9w1pshqa4%nWWo~3|axY_La&&2CX)j-2X>MtBUtcb8c~DCM0u%rg0000802 -@m7Rxco};hq2h0RI3003QGV00000000000Jed?(ggr;X>c!Jc4cm4Z*nhVWpZ?BW@#^9Uu|J&ZeL$6a -CuNm0Rj{N6aWAK2ml;P_EuW$l#3Tq0syE%1OOfY0000000000006dunbQRTaA|NaUv_0~WN&gWV`Xx5 -X=Z6JV_{=ua&#_mWo=MP0Rj{N6aWAK2ml;P_EyM7nV-r8006fT000{R0000000000006du>?H^QaA|N -aUv_0~WN&gWV`Xx5X=Z6JV{dY0E^v8JO928D02BZK00;maO7>RUNtf2i1polO5&!@n0000000000000 -2Cf$u5^0B~t=FJE?LZe(wAFJow7a%5$6FJE72ZfSI1UoLQYP)h*<6aW+e000O897^_9e{)wH{W$;tDt -Z6_9{>OV0000000000wt@992mo+ta4%nWWo~3|axY_OVRB?;bT49QXEkPWWpOTWc~DCM0u%rg000080 -31s8R(v6Y`a%N$0OJM#03iSX00000000000JecIYX|^vX>c!Jc4cm4Z*nhVXkl_>WppoMX=gQXa&KZ~ -axQRrP)h*<6aW+e000O897^_9EG^V_p$Py0Fed;2CjbBd0000000000wt=v22mo+ta4%nWWo~3|axY_ -OVRB?;bT4CQVRB??b98cPVs&(BZ*DGdc~DCM0u%rg00008031s8Ry5(hA;1Ix080-504V?f00000000 -000JedacnAP+X>c!Jc4cm4Z*nhVXkl_>WppoNXkl`5Wprn9Z*_2Ra&KZ~axQRrP)h*<6aW+e000O897 -^_95#q;SKnMT;EENC%Bme*a0000000000wt<~}2mo+ta4%nWWo~3|axY_OVRB?;bT4CQVRCb2bZ~NSV -r6nJaCuNm0Rj{N6aWAK2ml;P_EtHwD}l)c005K@001cf0000000000006duABG43aA|NaUv_0~WN&gW -V`yP=WMy<OV{c?>ZfA3JVRU6}VPj}%Ze=cTc~DCM0u%rg00008031s8R<SU;UlIWT03HGW04)Fj0000 -0000000JecIj0ga5X>c!Jc4cm4Z*nhVXkl_>WppoNZ)9n1XLEF6bY*Q}V`yn^Wn^h%bS`jtP)h*<6aW -+e000O897^_9g;B-=Zvy}TL<ax>A^-pY0000000000wt<X|2mo+ta4%nWWo~3|axY_OVRB?;bT4CYIW -#$Na&KZ~axQRrP)h*<6aW+e000O897^_9A=kVX;{pHxlLi0)8~^|S0000000000wt+j52mo+ta4%nWW -o~3|axY_OVRB?;bT4IYb!~GlaCuNm0Rj{N6aWAK2ml;P_Ey*v2=;CT005>B001BW0000000000006du -Sd<6=aA|NaUv_0~WN&gWV`yP=WMy<OWpiV2a&KZ~axQRrP)h*<6aW+e000O897^_9we#2caRvYYkS_o -L8~^|S0000000000wt)ni2mo+ta4%nWWo~3|axY_OVRB?;bT4IdV{>gTaCuNm0Rj{N6aWAK2ml;P_Es -n1s)bwy003SO001HY0000000000006duub>D3aA|NaUv_0~WN&gWV`yP=WMy<OWp!g}aBy;OVr6nJaC -uNm0Rj{N6aWAK2ml;P_Eu=iy2@=B0090p001BW0000000000006duOQr|_aA|NaUv_0~WN&gWV`yP=W -My<OWp!g~a%OU6aV~IqP)h*<6aW+e000O897^_9oK{>vJ_7&%*#-arA^-pY0000000000wt@D(2mo+t -a4%nWWo~3|axY_OVRB?;bT4IfV{3A7a&KZ~axQRrP)h*<6aW+e000O897^_96_4{_*Es+HF^~WNAOHX -W0000000000wt;lQ2mo+ta4%nWWo~3|axY_OVRB?;bT4IfV{~_Ba%FKYaCuNm0Rj{N6aWAK2ml;P_Et -=Q;D0{@007wr001HY0000000000006duiTnrvaA|NaUv_0~WN&gWV`yP=WMy<OWp!h8cW`oVVr6nJaC -uNm0Rj{N6aWAK2ml;P_Es>7j3jX<0093`001EX0000000000006du2mlEHaA|NaUv_0~WN&gWV`yP=W -My<OXJRrlF*0UyWpOTWc~DCM0u%rg00008031s8RwnGr9X<m90N(}x03!eZ00000000000Jed+CkX&> -X>c!Jc4cm4Z*nhVXkl_>WppoRVlp!^GH`NlVr6nJaCuNm0Rj{N6aWAK2ml;P_Ew)4J((I4007B2001K -Z0000000000006duH!BGMaA|NaUv_0~WN&gWV`yP=WMy<OXk}t@Wp{9LZ(?O~E^v8JO928D02BZK00; -maO7>RkB-#KWFaQ9=WB>pj00000000000002Cfs#H60B~t=FJE?LZe(wAFJow7a%5$6FKTIXW^!e5E^ -v8JO928D02BZK00;maO7>PtR1xl<F#rGprT_pS00000000000002Cf$we!0B~t=FJE?LZe(wAFJow7a -%5$6FKTaSVPa--WpOTWc~DCM0u%rg00008031s8R-o>6mp=ml0N4fq03rYY00000000000Jee5pa}qQ -X>c!Jc4cm4Z*nhVXkl_>WppoUZ)jm+aB^>AWpXZXc~DCM0u%rg00008031s8R;%8m)9Dld0Iz8P0384 -T00000000000JeckqzM3UX>c!Jc4cm4Z*nhVXkl_>WppoUaAR(CcrI{xP)h*<6aW+e000O897^_9b4q -F4UmXAda+m=CDF6Tf0000000000wt;WC2>@_ua4%nWWo~3|axY_OVRB?;bT4dSZf9b3Y-eF|X<=?{Z) -9a`E^v8JO928D02BZK00;maO7>PsLtEjW7XSdXfB^s{00000000000002Cffd&Y0B~t=FJE?LZe(wAF -Jow7a%5$6FKl6MXJ>L{WovD3WMynFaCuNm0Rj{N6aWAK2ml;P_EuatQl;7!005MK0RScd0000000000 -006du_wES*aA|NaUv_0~WN&gWV`yP=WMy<OY+-I^Xk}t@Wp{0FWMynFaCuNm0Rj{N6aWAK2ml;P_Etk -<RhkDI008rg0RSlg0000000000006du6$T0baA|NaUv_0~WN&gWV`yP=WMy<OY+-I^XmxI9VRC6<Zf$ -R5Wo#~Rc~DCM0u%rg00008031s8R_91_uy`i`03-AP04D$d00000000000Jec+AqoI+X>c!Jc4cm4Z* -nhVXkl_>WppoWVQyz~b#rrRVQy`2WMynFaCuNm0Rj{N6aWAK2ml;P_EuwXtW6#p004H80RSWb000000 -0000006duAV~@UaA|NaUv_0~WN&gWV`yP=WMy<OY+-I^bZB8|ZEs{{Y%XwlP)h*<6aW+e000O897^_9 -3{;~n*c$)<jC272CjbBd0000000000wt;|T3IK3va4%nWWo~3|axY_OVRB?;bT4dSZfA6La%*XGXl-v -~Wo#~Rc~DCM0u%rg00008031s8R-iv52+Rfm00b2P03!eZ00000000000JedhfC>O`X>c!Jc4cm4Z*n -hVXkl_>WppoWVRUJ3F>rEkVr6nJaCuNm0Rj{N6aWAK2ml;P_Eu*P$$JP0006xg001Qb000000000000 -6dus)q^yaA|NaUv_0~WN&gWV`yP=WMy<OZDC__Z*5_2aB^>AWpXZXc~DCM0u%rg00008031s8R++Y&k -~#$d0D}$y044wc00000000000Jeekj|u>AX>c!Jc4cm4Z*nhVXkl_>WppoXVq<7wa&u*LaB^>AWpXZX -c~DCM0u%rg00008031s8RzJEWEu8}Z08<D6044wc00000000000Jed1l?niGX>c!Jc4cm4Z*nhVXkl_ ->WppoXVq<e>a&L8TaB^>AWpXZXc~DCM0u%rg00008031s8Rw-8I@=*=|0JnAk0384T00000000000Je -ctnF;`KX>c!Jc4cm4Z*nhVXkl_>WppoXVq<f2Z7y(mP)h*<6aW+e000O897^_97MzNm<p2Nxk^uk!Ap -igX0000000000wt?WM3IK3va4%nWWo~3|axY_OVRB?;bT4vcb9HQVWNBk`E^v8JO928D02BZK00;maO -7>P<?V|8e2mk;882|t#00000000000002Cfdr`v0B~t=FJE?LZe(wAFJow7a%5$6FLPpJXkl`5Wpr?I -Z(?O~E^v8JO928D02BZK00;maO7>PFa+w;D1pojk5C8xs00000000000002Cftj%i0B~t=FJE?LZe(w -AFJow7a%5$6FLPpJb7yjIb#QQUZ(?O~E^v8JO928D02BZK00;maO7>R!jHo_V1pol24*&om00000000 -000002Cfo``70B~t=FJE?LZe(wAFJow7a%5$6FLP>Xb8vERVr6nJaCuNm0Rj{N6aWAK2ml;P_Et(OZa -LNu0000w001Ze0000000000006du1HB3WaA|NaUv_0~WN&gWV`yP=WMy<Ob#7^PWpZ<2Y-DA0Wn*-2a -xQRrP)h*<6aW+e000O897^_90>&H&Q3wD4IUxW5Bme*a0000000000wt*kb3IK3va4%nWWo~3|axY_O -VRB?;bT4&uW-&H1GH`NlVr6nJaCuNm0Rj{N6aWAK2ml;P_E!Ht`?y~O008_7001EX0000000000006d -uvegOzaA|NaUv_0~WN&gWV`yP=WMy<Ob#!JpaB^>AWpXZXc~DCM0u%rg00008031s8R-W;lL%9F|0Q3 -L=03HAU00000000000Jecp+6n-0X>c!Jc4cm4Z*nhVXkl_>WppogWpZ<AZ*DGdc~DCM0u%rg0000803 -1s8RsaA100IC20000003!eZ00000000000Jece+X?`1X>c!Jc4cm4Z*nhVXkl_>WppoNY-ulFUukY>b -YEXCaCuNm0Rj{N6aWAK2ml;P_ExC1H<bAV0062C001Qb0000000000006duh}#MPaA|NaUv_0~WN&gW -V`yP=WMy<OV{B<JV`yP=WMy<^V{|TXc~DCM0u%rg00008031s8RsaA100IC20000004M+e000000000 -00Jed|;0ge6X>c!Jc4cm4Z*nhVXkl_>WppoXWprU=VRT_HUtei%X>?y-E^v8JO928D02BZK00;maO7> -Pa1ya~85dZ-AGyni800000000000002Cfehga0B~t=FJE?LZe(wAFJow7a%5$6FKuOXVPs)+VJ~c9Zf -A92XJvCPaCuNm0Rj{N6aWAK2ml;P_Ewc%k4VM<000UB001BW0000000000006dufbt3eaA|NaUv_0~W -N&gWV{dG4a$#*@FJE72ZfSI1UoLQYP)h*<6aW+e000O897^_9QrWGBiUR-u+6e#v8~^|S0000000000 -wt<B63IK3va4%nWWo~3|axY_VY;SU5ZDB8AZgXiaaCuNm0Rj{N6aWAK2ml;P_EuDTtY<t7004L^001K -Z0000000000006duNcRc=aA|NaUv_0~WN&gWV{dG4a$#*@FJW$TX>@OQX>KzzE^v8JO928D02BZK00; -maO7>RFgOr9w1ONd23;+Nk00000000000002CfyDz00B~t=FJE?LZe(wAFJo_PZ*pO6VJ~TJX>@5}Y- -w|4E^v8JO928D02BZK00;maO7>Q|JvhnS1pojg7ytkr00000000000002CflCMr0B~t=FJE?LZe(wAF -Jo_PZ*pO6VJ~-SZZk42aCuNm0Rj{N6aWAK2ml;P_Etl!N7U^G007<_0018V0000000000006duVh#%c -aA|NaUv_0~WN&gWV{dG4a$#*@FL!BfbY*gFE^v8JO928D02BZK00;maO7>R$#!nGV0000>0000c0000 -0000000002Cfs7Rk0B~t=FJE?LZe(wAFJo_PZ*pO6VJ~!Lb98erUtei%X>?y-E^v8JO928D02BZK00; -maO7>QiMV_qh0ssIP3jhEo00000000000002CfgKhL0B~t=FJE?LZe(wAFJo_PZ*pO6VJ~!Lb98erVQ -zD2Uvy=2bS`jtP)h*<6aW+e000O897^_97Haq2Hwgd$wkZGrE&u=k0000000000wt-O@3jlCwa4%nWW -o~3|axY_VY;SU5ZDB8TWpi|MFJW$TX>@OQX>KzzUvy=2bS`jtP)h*<6aW+e000O897^_9V|XKJ<^=!% -RT=;QEdT%j0000000000wt>_l3jlCwa4%nWWo~3|axY_VY;SU5ZDB8TWpi|MFKKRRbZKF1X>(;?bY*j -NE^v8JO928D02BZK00;maO7>RR7i?(j0RR9>2LJ#m00000000000002CfdwfG0B~t=FJE?LZe(wAFJo -_PZ*pO6VJ~!Lb98erX>(z8ba`KNWpi{caCuNm0Rj{N6aWAK2ml;P_Etd1GVy=`001`x001KZ0000000 -000006duH!BMOaA|NaUv_0~WN&gWV{dG4a$#*@FLY&dbaO9tbZKmJE^v8JO928D02BZK00;maO7>Q+^ -#_p-0{{Sh4gdfu00000000000002Cf%q&70B~t=FJE?LZe(wAFJo_PZ*pO6VJ~!Lb98ercWG{PWpZs_ -bY*jNE^v8JO928D02BZK00;maO7>QOMi_-&0RR9+0ssIX00000000000002Cfle?B0B~t=FJE?LZe(w -AFJx(RbZlv2FJE72ZfSI1UoLQYP)h*<6aW+e000O897^_9p(e#RMk@dSE1>`Y9RL6T0000000000wt? -v}3jlCwa4%nWWo~3|axY|Qb98KJVlQKFZE#_9E^v8JO928D02BZK00;maO7>RDH+b5zFaQAY$p8Q!00 -000000000002Cfofd~0B~t=FJE?LZe(wAFJx(RbZlv2FJxhKVPau(WiD`eP)h*<6aW+e000O897^_9D -v}@B@e}|6Vo?A98~^|S0000000000wt-oW3jlCwa4%nWWo~3|axY|Qb98KJVlQcKWMz0RaCuNm0Rj{N -6aWAK2ml;P_EyH=5KS#J000-u0018V0000000000006dugrf@paA|NaUv_0~WN&gWWNCABY-wUIY;R* ->bZ>HVE^v8JO928D02BZK00;maO7>QGrZs155C8z%IRF4300000000000002Cf$r7|0B~t=FJE?LZe( -wAFJx(RbZlv2FKuCNX=Y_}bS`jtP)h*<6aW+e000O897^_9mm)w!1_uBD!V>@h9smFU0000000000wt -<)D3jlCwa4%nWWo~3|axY|Qb98KJVlQoBa%*LBb1rasP)h*<6aW+e000O897^_9K-pa)btM1*d7A(L9 -{>OV0000000000wt?C13jlCwa4%nWWo~3|axY|Qb98KJVlQoFbYWy+bYU)Vc~DCM0u%rg00008031s8 -R-L`ofUpYy07NPP03ZMW00000000000JedP6bt}xX>c!Jc4cm4Z*nhWX>)XJX<{#OWpi(Ja${w4E^v8 -JO928D02BZK00;maO7>QZn{?EU6#xLXMgRaF00000000000002Cfq5Vd0B~t=FJE?LZe(wAFJx(RbZl -v2FLPsZX>fFNE^v8JO928D02BZK00;maO7>QSN_i6MyZ`_IegOa*00000000000002CfkQS70B~t=FJ -E?LZe(wAFJx(RbZlv2FLX09E@gOSP)h*<6aW+e000O897^_9oCtaWPCfwu0LlUY9{>OV0000000000w -t;5z3;=Lxa4%nWWo~3|axY|Qb98KJVlQ+yG%aCrZ7yYaWl&220u%rg00008031s8R$OHR8I#Na005=| -02=@R00000000000JeegF%AH5X>c!Jc4cm4Z*nhWX>)XJX<{#QHZ(3}cx6ya0Rj{N6aWAK2ml;P_Ert -06<wl7007nk0RS5S0000000000006duz5WgWaA|NaUv_0~WN&gWWNCABY-wUIb#!TLE^v8JO928D02B -ZK00;maO7>Q#r847w82|v;TL1ta00000000000002CftW@Q0B~t=FJE?LZe(wAFJx(RbZlv2FLq^eb7 -^mGE^v8JO928D02BZK00;maO7>Qjlx|=qv;Y7AW&r>j00000000000002Cfl^=(0B~t=FJE?LZe(wAF -Jx(RbZlv2FLyICE@gOSP)h*<6aW+e000O897^_9Ekq02^(_Ga0FnX#9{>OV0000000000wt=w}5CCv# -a4%nWWo~3|axY|Qb98KJVlQ_#G%aCrZ7yYaWl&220u%rg00008031s8R{rp!E>6V&0052w02=@R0000 -0000000JeeSLJ<IPX>c!Jc4cm4Z*nhWX>)XJX<{#THZ(3}cx6ya0Rj{N6aWAK2ml;P_EyAaw>TUs004 -Tc000~S0000000000006duY6ublaA|NaUv_0~WN&gWWNCABY-wUIcW7m0Y%XwlP)h*<6aW+e000O897 -^_9`(SX~BLM&a)dK(k9smFU0000000000wt>Jh5&&>%a4%nWWo~3|axY|Qb98cVFJE72ZfSI1UoLQYP -)h*<6aW+e000O897^_99aOw&JOBUyKmY&$9smFU0000000000wt*is5&&>%a4%nWWo~3|axY|Qb98cV -FJE76VQFq(UoLQYP)h*<6aW+e000O897^_9lL`lV6fFP%vcLcU8~^|S0000000000wt<&45&&>%a4%n -WWo~3|axY|Qb98cVFJx(RbaHPlaCuNm0Rj{N6aWAK2ml;P_Ev>>x~Loh002<~000~S0000000000006 -du<zW&4aA|NaUv_0~WN&gWX=H9;FJE72ZfSI1UoLQYP)h*<6aW+e000O897^_9Wia+LAp-yaE)4(x82 -|tP0000000000wt+ii5&&>%a4%nWWo~3|axZCQZecHDZ)9a-E^v8JO928D02BZK00;maO7>Porw0ze0 -000%0RR9R00000000000002Cfs<wu0B~t=FJE?LZe(wAFKJ|MVJ~BEZE#_9E^v8JO928D02BZK00;ma -O7>R%I2yp=3jhF?G5`P=00000000000002Cfs1Dn0B~t=FJE?LZe(wAFKJ|MVJ~BEa%C=Xc~DCM0u%r -g00008031s8RslBCm>wkn09UO502}}S00000000000Jedma}oe>X>c!Jc4cm4Z*nhbWNu+EX=H9;WMO -n+E^v8JO928D02BZK00;maO7>P99Dq|H0{{S72LJ#a00000000000002Cf%=#d0B~t=FJE?LZe(wAFK -J|MVJ~TJbaG*CXJvCPaCuNm0Rj{N6aWAK2ml;P_Et6gD8m;3000#L001BW0000000000006duR-6(5a -A|NaUv_0~WN&gWX=H9;FK}UFYhh<)Uu0o)VJ>iaP)h*<6aW+e000O897^_96_mWCoSXmv%O(Q=9RL6T -0000000000wt=gh5&&>%a4%nWWo~3|axZCQZecHVbaON|WMOn+E^v8JO928D02BZK00;maO7>PmGBg+ -T0RRAO1ONaZ00000000000002Cfr2>`0B~t=FJE?LZe(wAFKu&YaA9L>FJE72ZfSI1UoLQYP)h*<6aW -+e000O897^_9J3F1ztpNZ4IRpRzApigX0000000000wt=%d698~&a4%nWWo~3|axZOjXK-O-YcFMZV` -Xr3X>V?GE^v8JO928D02BZK00;maO7>QJSNR$J1^@uR7XSbn00000000000002CfuB7S0B~t=FJE?LZ -e(wAFKu&YaA9L>FJ*XiE^v8JO928D02BZK00;maO7>RwNYAS38~_0Dh5!H`00000000000002Cfz(73 -0B~t=FJE?LZe(wAFKu&YaA9L>FJ@tEY+_+!Yc6nkP)h*<6aW+e000O897^_9M&V-~W&r>Il>z_&A^-p -Y0000000000wt@R$698~&a4%nWWo~3|axZXUV{2h&X>MmPUteKjZ*_EEUoLQYP)h*<6aW+e000O897^ -_96|It>^Z)<=@c{q;ApigX0000000000wt=Bz698~&a4%nWWo~3|axZXUV{2h&X>MmPUtei%X>?y-E^ -v8JO928D02BZK00;maO7>P8Dmr6`4gdh)EC2u_00000000000002Cfz)IZ0B~t=FJE?LZe(wAFK}UFY -hh<;Zf7rFZDDSCY-w(FcrI{xP)h*<6aW+e000O897^_9opdo8Fb4nt8W8{hBLDyZ0000000000wt<~< -698~&a4%nWWo~3|axZXUV{2h&X>MmPUu|`BY;0+6b$Bjtc~DCM0u%rg00008031s8RxqRTl3)P<0G9; --03-ka00000000000Jeb+dlLX~X>c!Jc4cm4Z*nhiVPk7yXK8L{FJE(Xa&=>Lb#i5ME^v8JO928D02B -ZK00;maO7>Q5{OUh@3IG5nApig%00000000000002Cfv|iN0B~t=FJE?LZe(wAFK}UFYhh<;Zf7rTVR -CC_a&s<lc~DCM0u%rg00008031s8R&J9)TJi<}07Mc103`qb00000000000Jec?hZ6vBX>c!Jc4cm4Z -*nhiVPk7yXK8L{FLGsZb!l>CZDnqBb1rasP)h*<6aW+e000O897^_9HIncK=o$b3o^=2KBLDyZ00000 -00000wt=3G698~&a4%nWWo~3|axZXUV{2h&X>MmPb8uy2X=Z6<a&s<lc~DCM0u%rg00008031s8R=Np -obBqxH08>2x0384T00000000000Jee0sS^NjX>c!Jc4cm4Z*nhiVPk7yXK8L{FLYsNb1rasP)h*<6aW -+e000O897^_9LG$P{&IJGfXb=DZ9smFU0000000000wt<ej698~&a4%nWWo~3|axZXUV{2h&X>MmPb# -!TLb1rasP)h*<6aW+e000O897^_93o;9(?+*X~NjU%jAOHXW0000000000wt<+z698~&a4%nWWo~3|a -xZXUV{2h&X>MmPc4cyNX>V>WaCuNm0Rj{N6aWAK2ml;P_EsEIHn&=I001<r0RSZc0000000000006du -#nBT0aA|NaUv_0~WN&gWaBF8@a%FRGb#h~6b1z?CX>MtBUtcb8c~DCM0u%rg00008031s8R{pRO|6B$ -D0J}~A03-ka00000000000Jec*Mic;WX>c!Jc4cm4Z*nhiY+-a}Z*py9X>xNfUtei%X>?y-E^v8JO92 -8D02BZK00;maO7>Q9R-#L@0RRBR1pojf00000000000002CfdEYu0B~t=FJE?LZe(wAFK}#ObY^dIZD -eV3b1z?CZDDC{Utcb8c~DCM0u%rg00008031s8R{AJ&uZ#r%04p2-03!eZ00000000000JeekP80xeX ->c!Jc4cm4Z*nhiY+-a}Z*py9X>xNfVQyq{Z)s#MaCuNm0Rj{N6aWAK2ml;P_Ez;7u)uN#007(@0018V -0000000000006du!c-IhaA|NaUv_0~WN&gWaBN|8W^ZzBWNC79FJW+LE^v8JO928D02BZK00;maO7>P -TWwO)m0ssJB4gdfl00000000000002CfpJ?D0B~t=FJE?LZe(wAFK}#ObY^dIZDeV3b1!XSV{daVaCu -Nm0Rj{N6aWAK2ml;P_Et<4clRL(003zs001BW0000000000006duo?a9HaA|NaUv_0~WN&gWaBN|8W^ -ZzBWNC79FLiEdcrI{xP)h*<6aW+e000O897^_9aDBB_aR2}Spa1{>BLDyZ0000000000wt@X-6aa8(a -4%nWWo~3|axZXfVRUA1a&2U3a&s?sWpZ<AZ*DGdc~DCM0u%rg00008031s8R>$El7NrRQ0A(cr03!eZ -00000000000JedzXA}T%X>c!Jc4cm4Z*nhiY+-a}Z*py9X>xNfcWG{9Z+CMpaCuNm0Rj{N6aWAK2ml; -P_Ev_(RX_6t005^8001BW0000000000006dum2ngRaA|NaUv_0~WN&gWaCv8KWo~qHFJE72ZfSI1UoL -QYP)h*<6aW+e000O897^_9d0@(k>Hq)$VF3UDAOHXW0000000000wt>cW6aa8(a4%nWWo~3|axZXsXK -iI}baO9XUu|J&ZeL$6aCuNm0Rj{N6aWAK2ml;P_EyZ|8Oq5Q004zt0018V0000000000006du?spUba -A|NaUv_0~WN&gWaCv8KWo~qHFJo<FY-w&~E^v8JO928D02BZK00;maO7>PC-+6zK0ssJ^1^@sb00000 -000000002Cf%K0Q0B~t=FJE?LZe(wAFK~HhZDnqBb1!3WZgX#JWiD`eP)h*<6aW+e000O897^_9ofr9 -Y00RI3k_P|)9smFU0000000000wt>Nt6aa8(a4%nWWo~3|axZXsXKiI}baO9eX>4?5axQRrP)h*<6aW -+e000O897^_9w_G<cg9ZQqQV;+DApigX0000000000wt@YX6aa8(a4%nWWo~3|axZXsXKiI}baO9eZ* -py6baZ8ME^v8JO928D02BZK00;maO7>Rm)vr{PBme+9hX4Q_00000000000002Cfxny-0B~t=FJE?LZ -e(wAFK~HhZDnqBb1!UVcx7@faCuNm0Rj{N6aWAK2ml;P_Eu*QObOrt007zp001BW0000000000006du -j=>ZFaA|NaUv_0~WN&gWaCv8KWo~qHFKusRWo&6~WiD`eP)h*<6aW+e000O897^_9V;P~5T>}6B9|`~ -f9smFU0000000000wt=j}6aa8(a4%nWWo~3|axZXsXKiI}baO9oY;|X8ZZ2?nP)h*<6aW+e000O897^ -_9t8ypvO#}b{01N;CAOHXW0000000000wt+>*6aa8(a4%nWWo~3|axZXsXKiI}baO9qWoKo0Z*X)jaC -uNm0Rj{N6aWAK2ml;P_EtBkmbrig000yW0018V0000000000006du(90A6aA|NaUv_0~WN&gWaCv8KW -o~qHFLPsIZf<3AE^v8JO928D02BZK00;maO7>PaFo^(=2LJ%#8UO$x00000000000002CfsN1<0B~t= -FJE?LZe(wAFK~HhZDnqBb1!pnXlZVEWq5QhaCuNm0Rj{N6aWAK2ml;P_EutI+xegd0040q0012T0000 -000000006duT-X!<aA|NaUv_0~WN&gWaCv8KWo~qHFLQKxY-KKRc~DCM0u%rg00008031s8R+5;!9(x -A>04Nv$0384T00000000000JecQ-xL6FX>c!Jc4cm4Z*nhid1q~9Zgg`mbZ={AZZ2?nP)h*<6aW+e00 -0O897^_9djSQI$4meK_x1n)ApigX0000000000wt?;D6aa8(a4%nWWo~3|axZXsXKiI}baO9tZfSFLa -%pa7E^v8JO928D02BZK00;maO7>RvHr8Tu4FCZ4CjbB(00000000000002Cf%7vJ0B~t=FJE?LZe(wA -FK~HhZDnqBb1!vtX>2ZVc~DCM0u%rg00008031s8R=Lz9k**&A0K%OB04M+e00000000000JedkK@|X -SX>c!Jc4cm4Z*nhid1q~9Zgg`mW@&76WpZ;bUtei%X>?y-E^v8JO928D02BZK00;maO7>PaAa-5S1^@ -ss6#xJ$00000000000002Cfs|nt0B~t=FJE?LZe(wAFK~HhZDnqBb1!CZa&2LBbY*gLFJE72ZfSI1Uo -LQYP)h*<6aW+e000O897^_9j*9)vAO!#bP!IqBD*ylh0000000000wt=r`6##H)a4%nWWo~3|axZXsX -KiI}baO9eZ*py6baZ8Mb1z?QVQ_G1Zf7oVc~DCM0u%rg00008031s8R@(R#e0u}{0P+j~04V?f00000 -000000Jeb`ZWRD<X>c!Jc4cm4Z*nhid1q~9Zgg`mW^ZzBVRUq5a&s?YVq<S)WiD`eP)h*<6aW+e000O -897^_9aeqi)9R>gZ<`Vz_C;$Ke0000000000wt?Dm6##H)a4%nWWo~3|axZXsXKiI}baO9eZ*py6baZ -8Mb1!FdZ)RpLaCuNm0Rj{N6aWAK2ml;P_Ez+;X(dV~000_`001Wd0000000000006duJ$V%XaA|NaUv -_0~WN&gWaCv8KWo~qHFJ^CYZDDkDWpZ;bXmo9CE^v8JO928D02BZK00;maO7>RDgfbwC6#xLTRR91c0 -0000000000002Cfy|#30B~t=FJE?LZe(wAFK~HhZDnqBb1!CZa&2LBbY*gLFKKOOE^v8JO928D02BZK -00;maO7>Q*=vR5t1^@tc6951v00000000000002Cfts}y0B~t=FJE?LZe(wAFK~HhZDnqBb1!CZa&2L -BbY*gLFKKdPE^v8JO928D02BZK00;maO7>QhWF^!|761U3O8@{U00000000000002Cfv~(40B~t=FJE -?LZe(wAFK~HhZDnqBb1!CZa&2LBbY*gLFKl6SWq2-dc~DCM0u%rg00008031s8RydFgR%`|U0MQcw04 -M+e00000000000JecY(-i=4X>c!Jc4cm4Z*nhid1q~9Zgg`mW^ZzBVRUq5a&s?lbZBLAE^v8JO928D0 -2BZK00;maO7>RoS;bWU0ssJ{2mk;s00000000000002Cf$`ZD0B~t=FJE?LZe(wAFK~HhZDnqBb1!CZ -a&2LBbY*gLFK}UQXK!s`a%**PE^v8JO928D02BZK00;maO7>Qb2I4IL1^@t-6951v00000000000002 -Cfjr$60B~t=FJE?LZe(wAFK~HhZDnqBb1!CZa&2LBbY*gLFLHEdE^v8JO928D02BZK00;maO7>Q)SdE -gz2><}68~^|&00000000000002Cfq&!`0B~t=FJE?LZe(wAFK~HhZDnqBb1!CZa&2LBbY*gLFLQQhE^ -v8JO928D02BZK00;maO7>P?2=CiW1^@s;5&!@z00000000000002CfrsuD0B~t=FJE?LZe(wAFK~HhZ -DnqBb1!CZa&2LBbY*gLFLY&cZE0>{Y%XwlP)h*<6aW+e000O897^_9r%g4+?F#?^=`8>NE&u=k00000 -00000wt*b=6##H)a4%nWWo~3|axZXsXKiI}baO9eZ*py6baZ8Mb1!sda&2jDVQexrHZE{^P)h*<6aW+ -e000O897^_9X~uYkK@9)^VlMyyCjbBd0000000000wt-av765Q*a4%nWWo~3|axZXsXKiI}baO9kWq4 -(Bb1z?CX>MtBUtcb8c~DCM0u%rg00008031s8RwL+a%#u0)09hIV04D$d00000000000JeeK4i*4#X> -c!Jc4cm4Z*nhid1q~9Zgg`mY-M<5a&s?VZDDY5X>MmOaCuNm0Rj{N6aWAK2ml;P_EsNFNE|LJ006Mi0 -01Qb0000000000006duvPl*IaA|NaUv_0~WN&gWaCv8KWo~qHFKlIaWpZ;baCvlSZ*DGdc~DCM0u%rg -00008031s8RvzWQdPoHT0CWxj04D$d00000000000Jec6brt|{X>c!Jc4cm4Z*nhid1q~9Zgg`mb98x -ZWpgiIUukY>bYEXCaCuNm0Rj{N6aWAK2ml;P_EvU@@7Q?_005jL001EX0000000000006duuzD5%aA| -NaUv_0~WN&gWaCvZHa&u{JXD?r0X>MtBUtcb8c~DCM0u%rg00008031s8R(*MWGja$30H+xM03ZMW00 -000000000Jec>h!y~FX>c!Jc4cm4Z*nhid2nHJb7^j8FJWVJX>V?GE^v8JO928D02BZK00;maO7>O`h -$tr^4*&p5Gynh}00000000000002Cff$h%0B~t=FJE?LZe(wAFK~HqVRCb6Zf7rJZ*6UFZZ2?nP)h*< -6aW+e000O897^_9<bt{tQ^)`Sy=(&j9RL6T0000000000wt;q_765Q*a4%nWWo~3|axZXsaA9(DX>Mm -PV{dY0E^v8JO928D02BZK00;maO7>Q5Se3$Y3jhE!B>(^;00000000000002Cfdpw60B~t=FJE?LZe( -wAFK~HqVRCb6Zf7rLcw=R7bZKvHb1rasP)h*<6aW+e000O897^_9L~CIrQY!!e_LcwuAOHXW0000000 -000wt=>E7XWZ+a4%nWWo~3|axZXsaA9(DX>MmPXk~10WpZ;aaCuNm0Rj{N6aWAK2ml;P_EsB*V8Bos0 -02a2001BW0000000000006duMxYk}aA|NaUv_0~WN&gWaCvZHa&u{JXD@PPb9HQVb1rasP)h*<6aW+e -000O897^_9+Prz-e+>WturvSwAOHXW0000000000wt>{T7XWZ+a4%nWWo~3|axZXsaA9(DX>MmPbY*j -NX>MmOaCuNm0Rj{N6aWAK2ml;P_ErNEN#}J7005RL001BW0000000000006duk;oSSaA|NaUv_0~WN& -gWaCvZHa&u{JXD@YbX=86>WiD`eP)h*<6aW+e000O897^_9cUI9%b_xIh-XQ=09RL6T0000000000wt -+;{7XWZ+a4%nWWo~3|axZXsaA9(DX>MmPb#!TLE^v8JO928D02BZK00;maO7>Qw0AcWg8UO&7UH||o0 -0000000000002Cf%V=O0B~t=FJE?LZe(wAFK~HqVRCb6Zf7rKX<=t_VQnv8UukY>bYEXCaCuNm0Rj{N -6aWAK2ml;P_EvxAUzqCv008R&001Wd0000000000006duzWEmbaA|NaUv_0~WN&gWaCvZYZ)#;@bYEz -1Z)<ZeUtei%X>?y-E^v8JO928D02BZK00;maO7>RWYjPN60001r0000c00000000000002Cf$sVj0B~ -t=FJE?LZe(wAFK~Hqa&Ky7V{~6=Z*OaJFJEJCZE#_9E^v8JO928D02BZK00;maO7>QU7S+gb3IG6*E& -u=|00000000000002CftULi0B~t=FJE?LZe(wAFK~Hqa&Ky7V{~6=Z*OaJFJEbGaBMDcc~DCM0u%rg0 -0008031s8R;cxgWE24a03rea05bpp00000000000Jeci1{eTvX>c!Jc4cm4Z*nhid2n)XYGq?|UubV{ -YjZDOX>MO|a&Kd0b8|0WUukY>bYEXCaCuNm0Rj{N6aWAK2ml;P_EzNdG{hnc006Hl001@s000000000 -0006dut_K(ZaA|NaUv_0~WN&gWaCvZYZ)#;@bYEz1Z)<ZeUukY%aB^>BWpi^cUukY%aB^>BWpi^baCu -Nm0Rj{N6aWAK2ml;P_Et#W{Qq_b001!*001BW0000000000006duBoi0_aA|NaUv_0~WN&gWa%FLKWp -i|MFJE72ZfSI1UoLQYP)h*<6aW+e000O897^_98nQ+C0|5X4vjG4ABLDyZ0000000000wt?6h7yxi-a -4%nWWo~3|axZdaadl;LbaO9XUv_13b7^mGUtcb8c~DCM0u%rg00008031s8R>&yK>4yRU0M`Wo04D$d -00000000000Jeb~92fv_X>c!Jc4cm4Z*nhkWpQ<7b98erUukZ1WpZv|Y+rSBX>4;YaCuNm0Rj{N6aWA -K2ml;P_ExDs2p;?r008k!001BW0000000000006du=pGmVaA|NaUv_0~WN&gWa%FLKWpi|MFJWY1aCB -vIb1rasP)h*<6aW+e000O897^_9?0G{&Qw9J4F&O{=8vp<R0000000000wt*rt7yxi-a4%nWWo~3|ax -Zdaadl;LbaO9ZaA_`Zc~DCM0u%rg00008031s8RycQN-FyoG0Lv!;02}}S00000000000JedyI2ZtMX ->c!Jc4cm4Z*nhkWpQ<7b98erVRdw9E^v8JO928D02BZK00;maO7>Qq{=flQ0RR9$0ssIV0000000000 -0002Cfn-D&0B~t=FJE?LZe(wAFLGsZb!BsOb1!3Ma&&VpaCuNm0Rj{N6aWAK2ml;P_ErGNiWpl0000I -B0015U0000000000006du_(d21aA|NaUv_0~WN&gWa%FLKWpi|MFJo_QaA9;VaCuNm0Rj{N6aWAK2ml -;P_Es-YtdqSH004kU0018V0000000000006duk4P8*aA|NaUv_0~WN&gWa%FLKWpi|MFJo_SYiVV3E^ -v8JO928D02BZK00;maO7>RWKr%|_1ONc<4gdfm00000000000002Cfr(rg0B~t=FJE?LZe(wAFLGsZb -!BsOb1!9hV`Xr3X>V?GE^v8JO928D02BZK00;maO7>QV@>(vA1ONah4*&oh00000000000002Cfv{m1 -0B~t=FJE?LZe(wAFLGsZb!BsOb1!IRY;Z1cc~DCM0u%rg00008031s8R;__Y7-s<h0Nnxr0384T0000 -0000000Jed6W*7i)X>c!Jc4cm4Z*nhkWpQ<7b98erXm4+8b1rasP)h*<6aW+e000O897^_9WkA^Jx+V -Ys*ogoD9smFU0000000000wt*UG7yxi-a4%nWWo~3|axZdaadl;LbaO9lZ)9a`b1rasP)h*<6aW+e00 -0O897^_95<K34YXJZNw*mkFAOHXW0000000000wt*0j7yxi-a4%nWWo~3|axZdaadl;LbaO9oVPk7yX -JvCPaCuNm0Rj{N6aWAK2ml;P_Et!@QL9-Y005<S001BW0000000000006duxsVtDaA|NaUv_0~WN&gW -a%FLKWpi|MFLPycb7^mGb1rasP)h*<6aW+e000O897^_9vUJuifCc~nix2<+Bme*a0000000000wt-N -x7yxi-a4%nWWo~3|axZdaadl;LbaO9rbYXOLb6;a`WMy+MaCuNm0Rj{N6aWAK2ml;P_Eu36Ou1VG003 -YM001HY0000000000006du61f-vaA|NaUv_0~WN&gWa%FLKWpi|MFLQKqbz^jOa%FQaaCuNm0Rj{N6a -WAK2ml;P_Ex@CWj$Fb006Xt0012T0000000000006dut-TlkaA|NaUv_0~WN&gWa%FLKWpi|MFLiWjY -;!Jfc~DCM0u%rg00008031s8R$_k-57qzx02u-R03rYY00000000000Jeca=NJHRX>c!Jc4cm4Z*nhk -Wpi(Ac4cg7VlQ7`X>MtBUtcb8c~DCM0u%rg00008031s8R!<ka>N*Di0Phw603!eZ00000000000Jec -w=okQSX>c!Jc4cm4Z*nhkWpi(Ac4cg7VlQxVZ+2;9WpZ;aaCuNm0Rj{N6aWAK2ml;P_Exq>z$!HY002 -P-001KZ0000000000006du((f1maA|NaUv_0~WN&gWa%FRGY<6XAX<{#OWpHnDbY*gLE^v8JO928D02 -BZK00;maO7>QJT($@K6aWApPyhfU00000000000002Cfk^Tg0B~t=FJE?LZe(wAFLGsbZ)|pDY-wUIa -%FRGY<6XGb1rasP)h*<6aW+e000O897^_9R`W2XhXnutV-o-XApigX0000000000wt<2N831r;a4%nW -Wo~3|axZdab8l>RWo&6;FLQKqbz^jME^v8JO928D02BZK00;maO7>O&00002000000000f000000000 -00002Cfk+J*0B~t=FJE?LZe(wAFLGsbZ)|pDY-wUIV{dJ6VRSEFUukY>bYEXCaCuNm0Rj{N6aWAK2ml -;P_EsC$E@xu^005i-001xm0000000000006dukqsFDaA|NaUv_0~WN&gWa%FRGY<6XAX<{#9Z*6d4bT -4CXY;0v?bZKvHb6;U%V=i!cP)h*<6aW+e000O897^_9VS}l~00;m8$`=3t8~^|S0000000000wt+$p8 -31r;a4%nWWo~3|axZdeV`wj5UukY>bYEXCaCuNm0Rj{N6aWAK2ml;P_Ev3u%=rHc0015#000~S00000 -00000006dud=?o1aA|NaUv_0~WN&gWa%p2|FJE76VQFq(UoLQYP)h*<6aW+e000O897^_9-@||wHwpj -%a3=r&AOHXW0000000000wt=-G831r;a4%nWWo~3|axZdeV`wj5V`Xe?Uw3I_bZB!faCuNm0Rj{N6aW -AK2ml;P_Evu`?tm<D007G)0stTY0000000000006duDlHiRaA|NaUv_0~WN&gWa%p2|FJEPCZ)#~@V{ -c?-b1rasP)h*<6aW+e000O897^_9<9YA7)&T$jC<FiiA^-pY0000000000wt<wM831r;a4%nWWo~3|a -xZdeV`wj5Wo>V2X<u?>aBN{?WiD`eP)h*<6aW+e000O897^_9L+eR2FarPpGzb6yA^-pY0000000000 -wt=dk831r;a4%nWWo~3|axZdeV`wj5Wq5FJa&%v2Z*py6bS`jtP)h*<6aW+e000O897^_9Nz}L7n*aa -+2>}2A9smFU0000000000wt*U?831r;a4%nWWo~3|axZdeV`wj5Wq5RDZgXjGZZ2?nP)h*<6aW+e000 -O897^_9?ZLwqhXDWp9|HgY8vp<R0000000000wt?}a831r;a4%nWWo~3|axZdeV`wj5W@&6?Zf`Ddc~ -DCM0u%rg00008031s8Rs(<cesl`}0N*7502}}S00000000000Jed#rWpWmX>c!Jc4cm4Z*nhkX=7+FU -ukZ0aAjk3E^v8JO928D02BZK00;maO7>P3tL7WG0{{S-3;+Nh00000000000002CfnTy20B~t=FJE?L -Ze(wAFLG&PXfI!EZ)aa}Wo~3;axQRrP)h*<6aW+e000O897^_9x)16eB>?~c)C2$k82|tP000000000 -0wt-W&831r;a4%nWWo~3|axZdeV`wj5Y;SLHE^v8JO928D02BZK00;maO7>Q@sU0Yz0RRAN1pojZ000 -00000000002Cfv>k20B~t=FJE?LZe(wAFLG&PXfI!Gb!=>3W@&6?E^v8JO928D02BZK00;maO7>P4p; -s-11ONb+8vp<u00000000000002CfsVNu0B~t=FJE?LZe(wAFLG&PXfI!IVQgh|bY*icaCuNm0Rj{N6 -aWAK2ml;P_Ezce?o8nT005@}000>P0000000000006duPQDocaA|NaUv_0~WN&gWa%p2|FJEwJV{0yO -c~DCM0u%rg00008031s8RsiXjWYh)#0ALjW02%-Q00000000000Jec<zZn2<X>c!Jc4cm4Z*nhkX=7+ -FUvgn|X>TrYc~DCM0u%rg00008031s8R>m={R9_AN0MAVT0384T00000000000Jed0#u)%`X>c!Jc4c -m4Z*nhkX=7+FUvqG2Zf<3Ab1rasP)h*<6aW+e000O897^_9=1~*U+yDRoUjYCB8UO$Q0000000000wt -)=Q831r;a4%nWWo~3|axZdeV`wj5b97;2Yc6nkP)h*<6aW+e000O897^_9VA>K~<p2Nxp#cB@8UO$Q0 -000000000wt*nl831r;a4%nWWo~3|axZdeV`wj5bZKp6axQRrP)h*<6aW+e000O897^_9KUf%5;S&G= -Bv}9eA^-pY0000000000wt+p@831r;a4%nWWo~3|axZdeV`wj5cWG`jGGAkFZgX#JWiD`eP)h*<6aW+ -e000O897^_9Lu=vMy#fFLh6exu8~^|S0000000000wt-&j831r;a4%nWWo~3|axZdeV`wj5cWG{9Z+C -MpaCuNm0Rj{N6aWAK2ml;P_Ew|@raj#P007?#001Qb0000000000006duRqh!8aA|NaUv_0~WN&gWa% -p2|FJE_QZe(wFb6;|0Ze(S0WpXZXc~DCM0u%rg00008031s8Rx2!w9h3q905Ast02u%P00000000000 -Jed3@fiScX>c!Jc4cm4Z*nhkX=7+FUw3k0a4v9pP)h*<6aW+e000O897^_94r@hGjR61vdIJCe7XSbN -0000000000wt+zO831r;a4%nWWo~3|axZdeV`wj7Vq-3Fc~DCM0u%rg00008031s8R*0o;!>9-V0Dvd -}02u%P00000000000Jebw_89<hX>c!Jc4cm4Z*nhkX=7+FVQgt<ZZ2?nP)h*<6aW+e000O897^_9T2B -j+um=DD`WgTL7ytkO0000000000wt?aP831r;a4%nWWo~3|axZdeV`wj7ZgXiaaCuNm0Rj{N6aWAK2m -l;P_EyU7-6vZF006)Y000*N0000000000006du#|9bzaA|NaUv_0~WN&gWa%p2|FJfVGE^v8JO928D0 -2BZK00;maO7>PT9RE;X3IG6dCIA2z00000000000002CfmaI}0B~t=FJE?LZe(wAFLG&PXfI-KcrI{x -P)h*<6aW+e000O897^_9u2ys*+XVmsoe=;482|tP0000000000wt?#v8US!<a4%nWWo~3|axZdeV`wj -9Wo&G7E^v8JO928D02BZK00;maO7>RiM8@6A5&!@&M*sjB00000000000002Cf&CjA0B~t=FJE?LZe( -wAFLG&PXfI=LY;STdaCuNm0Rj{N6aWAK2ml;P_Eu>`4Nj5)0015Y001EX0000000000006du|1KH;aA -|NaUv_0~WN&gWa%p2|FJo_PZ*pIBa%pgEWpplZc~DCM0u%rg00008031s8R-Q~!@stMu0NWb?02=@R0 -0000000000Jee9Fd6`GX>c!Jc4cm4Z*nhkX=7+FV{dGAZEkZeaCuNm0Rj{N6aWAK2ml;P_EruSxfxki -005GM0RS5S0000000000006duoj4i*aA|NaUv_0~WN&gWa%p2|FJo_Rb8l>AE^v8JO928D02BZK00;m -aO7>QZOwvi-0RR991pojY00000000000002CfiI340B~t=FJE?LZe(wAFLG&PXfI=LZgX^UVQFqIaCu -Nm0Rj{N6aWAK2ml;P_Ezf_F5Sij004Ov0015U0000000000006duNRS!;aA|NaUv_0~WN&gWa%p2|FJ -o_RbYW?3WpZ;aaCuNm0Rj{N6aWAK2ml;P_EsGcJ0b7~008D0000{R0000000000006duN|qV`aA|NaU -v_0~WN&gWa%p2|FJo_RbaHQOE^v8JO928D02BZK00;maO7>RP^2FW`2LJ$)9{>O%00000000000002C -fpeZ30B~t=FJE?LZe(wAFLG&PXfI@CW?^+~bYF9Hd2D5KE^v8JO928D02BZK00;maO7>PcN3Wi~0RRB -Z0{{RV00000000000002Cfx@L40B~t=FJE?LZe(wAFLG&PXfI@GVP|e{b7d}Yc~DCM0u%rg00008031 -s8R^SZ>Mfd{%0L2La02u%P00000000000Jed;ry2loX>c!Jc4cm4Z*nhkX=7+FWo>V2X)bViP)h*<6a -W+e000O897^_9B1j?A?EnA(f&u^l8UO$Q0000000000wt?xZ8US!<a4%nWWo~3|axZdeV`wjBa&m8Sb -1rasP)h*<6aW+e000O897^_9YTj=YjRF7wlLi0)9smFU0000000000wt)_<8US!<a4%nWWo~3|axZde -V`wjCX>4U*aB^>Wc`k5yP)h*<6aW+e000O897^_9-vH^DLIeN+%n1Mh8~^|S0000000000wt?5L8US! -<a4%nWWo~3|axZdeV`wjCX>4V4X?kTYaCuNm0Rj{N6aWAK2ml;P_EtyqA~8V=003|$0018V00000000 -00006duQ?wcYaA|NaUv_0~WN&gWa%p2|FKB6JXl!X`Xmn+AE^v8JO928D02BZK00;maO7>O;`U+4h1p -ol36951h00000000000002CfziJj0B~t=FJE?LZe(wAFLG&PXfJAWZ*DGdc~DCM0u%rg00008031s8R -ye^}$cqF30JIDM02=@R00000000000JecL#To!`X>c!Jc4cm4Z*nhkX=7+FYISgVbY*fbaCuNm0Rj{N -6aWAK2ml;P_ExcB%--(}006f(000^Q0000000000006du_Q@ImaA|NaUv_0~WN&gWa%p2|FKl6XZ*_D -oaCuNm0Rj{N6aWAK2ml;P_EyTExYM-`006-^000;O0000000000006du9oQNGaA|NaUv_0~WN&gWa%p -2|FKlUcWiD`eP)h*<6aW+e000O897^_9_O^!vFa!VqQw{(C9{>OV0000000000wt)!e8US!<a4%nWWo -~3|axZdeV`wjIX?A5_a%FC0WpXZXc~DCM0u%rg00008031s8RvT}A)E5o_0Dmq302=@R00000000000 -Jed3>ly%XX>c!Jc4cm4Z*nhkX=7+FY;R|0X>MmOaCuNm0Rj{N6aWAK2ml;P_EwuiVqW_R000Ic000^Q -0000000000006du#rYZlaA|NaUv_0~WN&gWa%p2|FKuCRYjtogaCuNm0Rj{N6aWAK2ml;P_E!I_7zAt -u006lZ000{R0000000000006du_yZdNaA|NaUv_0~WN&gWa%p2|FKuOEb9HiME^v8JO928D02BZK00; -maO7>Rihu;h11pokQ6951k00000000000002Cft?8(0B~t=FJE?LZe(wAFLG&PXfJSKWMpY>XD)DgP) -h*<6aW+e000O897^_94#pLNa{&MVJOcm#82|tP0000000000wt=}18vt-=a4%nWWo~3|axZdeV`wjMV -P|D>E^v8JO928D02BZK00;maO7>Pb06t&41ONa;4FCWe00000000000002CfnyOH0B~t=FJE?LZe(wA -FLG&PXfJSKY-MzGWiD`eP)h*<6aW+e000O897^_9CS=Ms@d*F`PALEY82|tP0000000000wt-g`8vt- -=a4%nWWo~3|axZdeV`wjMVQyt?E^v8JO928D02BZK00;maO7>QYNaq$M9{>Ohi~s-{0000000000000 -2Cfqx(y0B~t=FJE?LZe(wAFLG&PXfJSbWps3TE^v8JO928D02BZK00;maO7>Qp(`0^OE&u>J=>Py600 -000000000002Cf!seE0B~t=FJE?LZe(wAFLG&PXfJSbZ)b94b8{|mc~DCM0u%rg00008031s8R^Zr}G -z$p;0OcP503ZMW00000000000Jed5ZW{n_X>c!Jc4cm4Z*nhkX=7+FaB^>Fa%FRKUt(c$E^v8JO928D -02BZK00;maO7>O+aOYX&3IG5nEC2u+00000000000002Cfxveg0B~t=FJE?LZe(wAFLG&PXfJSbZ*6d -NE^v8JO928D02BZK00;maO7>P*nETT?0ssJS1pojX00000000000002Cf!%@|0B~t=FJE?LZe(wAFLG -&PXfJSbZ**^CZ)`4bc~DCM0u%rg00008031s8R$aob*L45@0Hy!{02%-Q00000000000Jecpg&P2HX> -c!Jc4cm4Z*nhkX=7+Fa%E>}Z*DGdc~DCM0u%rg00008031s8R@c|jQxpXN08bGB02lxO00000000000 -Jeesg&P2HX>c!Jc4cm4Z*nhkX=7+Fa%FIGE^v8JO928D02BZK00;maO7>QgX#;IV1pom05dZ)f00000 -000000002Cfk%rQ0B~t=FJE?LZe(wAFLG&PXfJYgY-KKRc~DCM0u%rg00008031s8Ru6^sD|7?^02>P -c02u%P00000000000Jed`kQ)GSX>c!Jc4cm4Z*nhkX=7+Fb7OCCWiD`eP)h*<6aW+e000O897^_9KQ; -cYQUU+~HwFLz8UO$Q0000000000wt;Px8vt-=a4%nWWo~3|axZdeV`wjPV{&C>ZZ2?nP)h*<6aW+e00 -0O897^_9V^uN6G86y+w_X4M8vp<R0000000000wt@GT8vt-=a4%nWWo~3|axZdeV`wjPWoK<=Zgehic -~DCM0u%rg00008031s8R>&%)<5&d%0P_$402=@R00000000000Jec*tQ!DuX>c!Jc4cm4Z*nhkX=7+F -b8u;HZe?;VaCuNm0Rj{N6aWAK2ml;P_EwxIF?03=002o5000^Q0000000000006du^RXKMaA|NaUv_0 -~WN&gWa%p2|FLQKZbaitsaCuNm0Rj{N6aWAK2ml;P_Ex?)Jfo}@006;h000>P0000000000006duA-5 -X<aA|NaUv_0~WN&gWa%p2|FLQKxY-KKRc~DCM0u%rg00008031s8R`Cj^P}Knd0O|w)02%-Q0000000 -0000Jeby&Km%5X>c!Jc4cm4Z*nhkX=7+Fb98xZWn?aJc~DCM0u%rg00008031s8R_<D_Oz9s00A+~)0 -2%-Q00000000000Jeb<&>H}7X>c!Jc4cm4Z*nhkX=7+Fb9rubVR$ZZc~DCM0u%rg00008031s8R%Ru* -gJd5700f%=02u%P00000000000JecL@EZVdX>c!Jc4cm4Z*nhkX=7+FbYWs_WiD`eP)h*<6aW+e000O -897^_9IwRA+{sRC2Dh&VtA^-pY0000000000wt>wL8~|`>a4%nWWo~3|axZdeV`wjQWpZt4ZeeU+bZB -L5WiD`eP)h*<6aW+e000O897^_9!%D2J8z%q&)v*8o7ytkO0000000000wt)*28~|`>a4%nWWo~3|ax -ZdeV`wjQWq5QhaCuNm0Rj{N6aWAK2ml;P_Ezj<p^nW2006-b000>P0000000000006duTss^9aA|NaU -v_0~WN&gWa%p2|FLY>SZDlTSc~DCM0u%rg00008031s8R#A2KP)7g&0A>IH02%-Q00000000000Jec( -KpX&YX>c!Jc4cm4Z*nhkX=7+FbZBL5WpgfYc~DCM0u%rg00008031s8R_NHy=TaH~0HkvO0384T0000 -0000000JeeOKpX&YX>c!Jc4cm4Z*nhkX=7+FbaG*1Wny7tYc6nkP)h*<6aW+e000O897^_9KD`&3R|) -_C(IWr=7ytkO0000000000wt;M08~|`>a4%nWWo~3|axZdeV`wjQa%E*MaCuNm0Rj{N6aWAK2ml;P_E -wL+>IZNY000e8001BW0000000000006du`DGjcaA|NaUv_0~WN&gWbY*T~V`+4GFJE72ZfSI1UoLQYP -)h*<6aW+e000O897^_91<h(U=L7%%-wgl&AOHXW0000000000wt=U68~|`>a4%nWWo~3|axZjcZee3- -ba^jdVRLzIV`*<LaCuNm0Rj{N6aWAK2ml;P_EyH4)Bf87004ss0015U0000000000006du%zzvKaA|N -aUv_0~WN&gWbY*T~V`+4GFJE<ZX>4;YaCuNm0Rj{N6aWAK2ml;P_EvEJATLM*005E(0012T00000000 -00006du<AfXlaA|NaUv_0~WN&gWbY*T~V`+4GFJWeMWpXZXc~DCM0u%rg00008031s8Rz+h#CJ_Sw02 -&4W03HAU00000000000Jec<h#UZLX>c!Jc4cm4Z*nhmWo}_(X>@rnVr6D;a%C=Xc~DCM0u%rg000080 -31s8Rz$^xy5|D`07MA@03-ka00000000000Jed%iyQ!OX>c!Jc4cm4Z*nhmWo}_(X>@rnVr6D;a%Eq0 -Y-MF|E^v8JO928D02BZK00;maO7>Q!Y_ikb0ssJK1pojW00000000000002Cf!vQA0B~t=FJE?LZe(w -AFLY&YVPk1@c`t5Za4v9pP)h*<6aW+e000O897^_9Qq<Qkss;c6Dk1;?9RL6T0000000000wt?}I8~| -`>a4%nWWo~3|axZjcZee3-ba^jwWpr|RE^v8JO928D02BZK00;maO7>O+aKr}_1ONaI3;+Ne0000000 -0000002Cf!3KE0B~t=FJE?LZe(wAFLY&YVPk1@c`tKxZ*VSfc~DCM0u%rg00008031s8R#wR>KdA!%0 -A2_H03rYY00000000000Jec6o*V#hX>c!Jc4cm4Z*nhmWo}_(X>@rnbZ>HQVPtQ2WnwOHc~DCM0u%rg -00008031s8R!L~ptgZ<F09YRY02}}S00000000000Jeb)q8tElX>c!Jc4cm4Z*nhmWo}_(X>@rncVTI -CE^v8JO928D02BZK00;maO7>Q!swMpw0RRAu0RR9U00000000000002Cf%K~!0B~t=FJE?LZe(wAFLZ -BhY-ulFUukY>bYEXCaCuNm0Rj{N6aWAK2ml;P_ErMEj%kb*003!N000~S0000000000006duMy(tGaA -|NaUv_0~WN&gWbZ>2JX)j-JVRCb2axQRrP)h*<6aW+e000O897^_9b?lQdegpsje+vKr7ytkO000000 -0000wt)=98~|`>a4%nWWo~3|axZjmZER^TUvgzGaCuNm0Rj{N6aWAK2ml;P_Exj+5@*E#008~~000{R -0000000000006duz{nf`aA|NaUv_0~WN&gWbZ>2JX)j-Nd2nTOE^v8JO928D02BZK00;maO7>PygCHn -s1pojA4FCWi00000000000002CfxgKc0B~t=FJE?LZe(wAFLiQkY-wUMFJE72ZfSI1UoLQYP)h*<6aW -+e000O897^_99X}It0u2BFJ1PJGBLDyZ0000000000wt;2O8~|`>a4%nWWo~3|axZmqY;0*_GcR9bZ) -|L3V{~b6ZgVbhc~DCM0u%rg00008031s8R)lE<tv~<(06+i$03QGV00000000000Jeds+#CRKX>c!Jc -4cm4Z*nhna%^mAVlyvac4cyNX>V>WaCuNm0Rj{N6aWAK2ml;P_EztMQ9DK#002x+001EX0000000000 -006duCEXkVaA|NaUv_0~WN&gWb#iQMX<{=kV{dM5Wn*+{Z*DGdc~DCM0u%rg00008031s8R+uM)I}a- -W05+Te03`qb00000000000Jedu^c(<iX>c!Jc4cm4Z*nhna%^mAVlyveZ*Fd7V{~b6Zg6jJY%XwlP)h -*<6aW+e000O897^_9Ud&0g>j?k=86W@vApigX0000000000wt@T~9RP4?a4%nWWo~3|axZmqY;0*_Gc -RR$V`Xr3X>V?GE^v8JO928D02BZK00;maO7>RAC`&9L3IG6uApig!00000000000002CfhH;)0B~t=F -JE?LZe(wAFLiQkY-wUMFJ@_FY-DpTaCuNm0Rj{N6aWAK2ml;P_Ev|hzoUKw004*y0018V0000000000 -006dufixWeaA|NaUv_0~WN&gWb#iQMX<{=kW@&6?aBp*TE^v8JO928D02BZK00;maO7>QPL}X-D761S -!O#lEQ00000000000002Cfjl@J0B~t=FJE?LZe(wAFLiQkY-wUMFK};fY;9p~VP|D>E^v8JO928D02B -ZK00;maO7>R#kM07e2LJ$J7XSbr00000000000002CfzeJK0B~t=FJE?LZe(wAFLiQkY-wUMFLGsZb! -BsOE^v8JO928D02BZK00;maO7>PzAh<eXAOHZdcK`q%00000000000002CfwWc~0B~t=FJE?LZe(wAF -LiQkY-wUMFLGsbaBpsNWiD`eP)h*<6aW+e000O897^_9000000ssI200000CjbBd0000000000wt-Z4 -9RP4?a4%nWWo~3|axZmqY;0*_GcRLrZgg^KVlQ7`X>MtBUtcb8c~DCM0u%rg00008031s8Rw{$(6}15 -X0KEeM05Jdn00000000000JedfcO3w5X>c!Jc4cm4Z*nhna%^mAVlyveZ*FvQX<{#5VQ_F|Zf9w3WnX -1(c4=~NZZ2?nP)h*<6aW+e000O897^_93htAMWDEcR94i0-C;$Ke0000000000wt=5{9RP4?a4%nWWo -~3|axZmqY;0*_GcRLrZgg^KVlQEEaAj_1X>MgMaCuNm0Rj{N6aWAK2ml;P_Er^X={Hga006KN001Wd0 -000000000006duNroK&aA|NaUv_0~WN&gWb#iQMX<{=kV{dMBa%o~OZggyIaBpvHE^v8JO928D02BZK -00;maO7>PxTI)N}6aWCZLI40L00000000000002Cf#8fC0B~t=FJE?LZe(wAFLiQkY-wUMFJo_RbaH8 -8FK~HpaAj_Db8Iefc~DCM0u%rg00008031s8R>drF9>6640FZ_N04@Lk00000000000Jeemp&bBlX>c -!Jc4cm4Z*nhna%^mAVlyveZ*FvQX<{#PWn*=6Wpr|3ZgX&Na&#_mc~DCM0u%rg00008031s8R?AYzKU -oL>0J$3g03-ka00000000000Jebx$Q=N1X>c!Jc4cm4Z*nhna%^mAVlyveZ*FvQX<{#PZ)0n7E^v8JO -928D02BZK00;maO7>O&00002000000000u00000000000002Cfu7JE0B~t=FJE?LZe(wAFLiQkY-wUM -FJo_RbaH88FJE(IV|8+6baG*Cb8v5RbT40DX>MtBUtcb8c~DCM0u%rg00008031s8RxZyiP3{l?0N_L -b05|{u00000000000Jeel&>aA9X>c!Jc4cm4Z*nhna%^mAVlyveZ*FvQX<{#5b7f<7a%FUKVQzD9Z*p -`mVrgz<X>Mn8E^v8JO928D02BZK00;maO7>Q+DyO_z5dZ*UHUI!Q00000000000002CfjZ(H0B~t=FJ -E?LZe(wAFLiQkY-wUMFJo_RbaH88FJE(IV|8+6baG*Cb8v5RbT4dgcVBE}c4cfXaCuNm0Rj{N6aWAK2 -ml;P_ErD@0006200000001Ze0000000000006du>hm1{aA|NaUv_0~WN&gWb#iQMX<{=kaA9L>VP|D? -FJE72ZfSI1UoLQYP)h*<6aW+e000O897^_9T$CBCCLsU-X@>v+BLDyZ0000000000wt+JA9RP4?a4%n -WWo~3|axZmqY;0*_GcRyqV{2h&WpgicX?QMhc~DCM0u%rg00008031s8RsaA100IC20000005Sjo000 -00000000Jedd6&?U^X>c!Jc4cm4Z*nhna%^mAVlyvrVPk7yXJvCQVqs%zaBp&Sb1z?CX>MtBUtcb8c~ -DCM0u%rg00008031s8R^GT{vq%B}0Eq<v05Sjo00000000000Jeea6&?U^X>c!Jc4cm4Z*nhna%^mAV -lyvrVPk7yXJvCQVqs%zaBp&Sb1!XSYh`9>Y-KKRc~DCM0u%rg00008031s8Rt?`Pc8dl80N)e<06G8w -00000000000JedH7#;v{X>c!Jc4cm4Z*nhna%^mAVlyvrVPk7yXJvCQVqs%zaBp&Sb1!#gVQX?_W?yD -$ZeeU`dSxzfc~DCM0u%rg00008031s8R_2PCn%DsV0D}Yo03-ka00000000000Jec<A07a3X>c!Jc4c -m4Z*nhna%^mAVlyvwbZKlaUtei%X>?y-E^v8JO928D02BZK00;maO7>Rls^kxv2LJ#i6951v0000000 -0000002Cfq)?%0B~t=FJE?LZe(wAFLiQkY-wUMFLiWjY%gPPZf<2`bZKvHE^v8JO928D02BZK00;maO -7>O?&s+yy0ssI-1^@sd00000000000002CfnF&d0B~t=FJE?LZe(wAFLiQkY-wUMFLiWjY%g$fZ+Lkw -aCuNm0Rj{N6aWAK2ml;P_Et^<_MiL!008m<001EX0000000000006du`zsy*aA|NaUv_0~WN&gWb#iQ -MX<{=kb#!TLFL8Bcb!9Gac~DCM0u%rg00008031s8RyU4q@v8*@0G$s203!eZ00000000000JecPEgk -@HX>c!Jc4cm4Z*nhna%^mAVlyvwbZKlaa%FLKWpi{caCuNm0Rj{N6aWAK2ml;P_Et71)wEy*006cP00 -1Na0000000000006duA~PNUaA|NaUv_0~WN&gWb#iQMX<{=kb#!TLFLGsbaBpsNWiD`eP)h*<6aW+e0 -00O897^_9I!Mcs{1yNJ^Hl%<ApigX0000000000wt>Vr9sqD@a4%nWWo~3|axZmqY;0*_GcR>?X>2cY -Wpr|RE^v8JO928D02BZK00;maO7>QylKaP}761SlLjV9E00000000000002Cf&Wh)0B~t=FJE?LZe(w -AFLiQkY-wUMFLiWjY%g<jY+o*Lc~DCM0u%rg00008031s8RzGpKy6Ff20Dcw#04@Lk00000000000Je -eTW*z`=X>c!Jc4cm4Z*nhna%^mAVlyvwbZKlab8~E8ZDDj{XkTb=b98QDZDlTSc~DCM0u%rg0000803 -1s8R<aQHw*LnJ0Ph+A04M+e00000000000Jeb{a2^0~X>c!Jc4cm4Z*nhna%^mAVlyvwbZKlab8~ETa -$#<BaBp&SE^v8JO928D02BZK00;maO7>R$7ML^U3jhGPCjbB=00000000000002CfnInX0B~t=FJE?L -Ze(wAFLiQkY-wUMFLiWjY%g?aZDntDbS`jtP)h*<6aW+e000O897^_9E7j;;7ZU&g*f#(G9{>OV0000 -000000wt<C&9sqD@a4%nWWo~3|axZmqY;0*_GcR>?X>2cba%?Vec~DCM0u%rg00008031s8R#wzj)xQ -S-02>tm03ZMW00000000000JeeImmUCcX>c!Jc4cm4Z*nhna%^mAVlyvwbZKlacVTICE^v8JO928D02 -BZK00;maO7>QG&>wL!3jhF9DF6T@00000000000002Cf!3cM0B~t=FJE?LZe(wAFLz~PWo~0{WNB_^b -1z?CX>MtBUtcb8c~DCM0u%rg00008031s8R>!Rfiv<P%023ns03rYY00000000000Jecjs~!MwX>c!J -c4cm4Z*nhpWnyJ+V{c?>ZfA2ZY++($Y;!Jfc~DCM0u%rg00008031s8R#1O2A4CEG02u`U03-ka0000 -0000000JedTu^s?$X>c!Jc4cm4Z*nhpWnyJ+V{c?>ZfA2ZZEI{{Vr6V|E^v8JO928D02BZK00;maO7> -P~IB=)A1pok}82|tw00000000000002CffckK0B~t=FJE?LZe(wAFLz~PWo~0{WNB_^b1!sdb98eqaC -uNm0Rj{N6aWAK2ml;P_Ey^l{MMxe007ev001fg0000000000006du4Z0oxaA|NaUv_0~WN&gWcV%K_Z -ewp`X>Mn8FL+;db7gX0WMyV)Ze?UHaCuNm1qJ{B008s>^a044008>F9smFU -""" - - -if __name__ == "__main__": - main() diff --git a/go-applio-manager-recode.bat b/go-applio-manager-recode.bat deleted file mode 100644 index 91b8acfc0c69a356fd5b1d77650b2cd728b1072b..0000000000000000000000000000000000000000 --- a/go-applio-manager-recode.bat +++ /dev/null @@ -1,322 +0,0 @@ -@echo off -title Applio Installer - -::: _ _ _____ _ -::: /\ | (_) | __ \ | | -::: / \ _ __ _ __ | |_ ___ | |__) |___ ___ ___ __| | ___ -::: / /\ \ | '_ \| '_ \| | |/ _ \ | _ // _ \/ __/ _ \ / _` |/ _ \ -::: / ____ \| |_) | |_) | | | (_) | | | \ \ __/ (_| (_) | (_| | __/ -::: /_/ \_\ .__/| .__/|_|_|\___/ |_| \_\___|\___\___/ \__,_|\___| -::: | | | | -::: |_| |_| -::: -::: - -setlocal -set "branch=applio-recode" -set "runtime=runtime-recode" -set "repoUrl=https://github.com/IAHispano/Applio-RVC-Fork/archive/refs/heads/%branch%.zip" -set "fixesFolder=fixes" -set "localFixesPy=local_fixes.py" -set "principal=%cd%" -set "URL_BASE=https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main" -set "URL_EXTRA=https://huggingface.co/IAHispano/applio/resolve/main" - -:menu -for /f "delims=: tokens=*" %%A in ('findstr /b ":::" "%~f0"') do @echo(%%A - -echo [1] Reinstall Applio -echo [2] Update Applio -echo [3] Update Applio + Runtime -echo. - -set /p choice=Select an option: -set choice=%choice: =% - -if "%choice%"=="1" ( - cls - echo Starting Applio Reinstaller... - echo. - goto reinstaller - pause - cls - goto menu - -) - -if "%choice%"=="2" ( - cls - echo Starting Applio Updater... - echo. - goto updater - pause - cls - goto menu -) - -if "%choice%"=="3" ( - cls - echo Updating Applio + Runtime... - echo. - goto updaterRuntime - pause - cls - goto menu - -) - -cls -echo Invalid option. Please enter a number from 1 to 3. -echo. -echo Press 'Enter' to access the main menu... -pause>nul -cls -goto menu - -:reinstaller - -echo WARNING: Remember to install Microsoft C++ Build Tools, Redistributable, Python, and Git before continuing. -echo. -echo Step-by-step guide: https://rentry.org/appliolocal -echo Build Tools: https://aka.ms/vs/17/release/vs_BuildTools.exe -echo Redistributable: https://aka.ms/vs/17/release/vc_redist.x64.exe -echo Git: https://github.com/git-for-windows/git/releases/download/v2.42.0.windows.2/Git-2.42.0.2-64-bit.exe -echo Python: Add this route to the windows enviroment variables the user path variable: %principal%\runtime\Scripts -echo. -pause -cls - -echo Downloading ZIP file... -powershell -command "& { Invoke-WebRequest -Uri '%repoUrl%' -OutFile '%principal%\repo.zip' }" -echo. - -echo Extracting ZIP file... -powershell -command "& { Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory('%principal%\repo.zip', '%principal%') }" -echo. - -echo Copying folder and file structure from subdirectory to main directory... -robocopy "%principal%\Applio-RVC-Fork-%branch%" "%principal%" /E -echo. - -echo Deleting contents of subdirectory (files and folders)... -rmdir "%principal%\Applio-RVC-Fork-%branch%" /S /Q -echo. - -echo Cleaning up... -del "%principal%\repo.zip" -echo. -cls - -echo Proceeding to download the models... -echo. - -echo WARNING: At this point, it's recommended to disable antivirus or firewall, as errors might occur when downloading pretrained models. -pause -cls - -echo Downloading models in the assets folder... -cd "assets" -echo. -echo Downloading the "pretrained" folder... -cd "pretrained" -curl -LJO "%URL_BASE%/pretrained/D32k.pth" -curl -LJO "%URL_BASE%/pretrained/D40k.pth" -curl -LJO "%URL_BASE%/pretrained/D48k.pth" -curl -LJO "%URL_BASE%/pretrained/G32k.pth" -curl -LJO "%URL_BASE%/pretrained/G40k.pth" -curl -LJO "%URL_BASE%/pretrained/G48k.pth" -curl -LJO "%URL_BASE%/pretrained/f0D32k.pth" -curl -LJO "%URL_BASE%/pretrained/f0D40k.pth" -curl -LJO "%URL_BASE%/pretrained/f0D48k.pth" -curl -LJO "%URL_BASE%/pretrained/f0G32k.pth" -curl -LJO "%URL_BASE%/pretrained/f0G40k.pth" -curl -LJO "%URL_BASE%/pretrained/f0G48k.pth" -cd ".." -echo. -cls - -echo Downloading the "pretrained_v2" folder... -cd "pretrained_v2" -curl -LJO "%URL_BASE%/pretrained_v2/D32k.pth" -curl -LJO "%URL_BASE%/pretrained_v2/D40k.pth" -curl -LJO "%URL_BASE%/pretrained_v2/D48k.pth" -curl -LJO "%URL_BASE%/pretrained_v2/G32k.pth" -curl -LJO "%URL_BASE%/pretrained_v2/G40k.pth" -curl -LJO "%URL_BASE%/pretrained_v2/G48k.pth" -curl -LJO "%URL_BASE%/pretrained_v2/f0D32k.pth" -curl -LJO "%URL_BASE%/pretrained_v2/f0D40k.pth" -curl -LJO "%URL_BASE%/pretrained_v2/f0D48k.pth" -curl -LJO "%URL_BASE%/pretrained_v2/f0G32k.pth" -curl -LJO "%URL_BASE%/pretrained_v2/f0G40k.pth" -curl -LJO "%URL_BASE%/pretrained_v2/f0G48k.pth" -cd ".." -echo. -cls - -echo Downloading the hubert_base.pt file... -cd "hubert" -curl -LJO "%URL_BASE%/hubert_base.pt" -cd ".." -echo. -cls - - -echo Downloading the rmvpe.pt file... -cd "rmvpe" -curl -LJO "%URL_BASE%/rmvpe.pt" -echo. -cls - -echo Downloading the rmvpe.onnx file... -curl -LJO "%URL_BASE%/rmvpe.onnx" -cd ".." -cd ".." -echo. -cls - -echo Downloading the rest of the large files - -echo Downloading the "uvr5_weights" folder... -cd "uvr5_weights" -curl -LJO "%URL_BASE%/uvr5_weights/HP2_all_vocals.pth" -curl -LJO "%URL_BASE%/uvr5_weights/HP3_all_vocals.pth" -curl -LJO "%URL_BASE%/uvr5_weights/HP5_only_main_vocal.pth" -curl -LJO "%URL_BASE%/uvr5_weights/VR-DeEchoAggressive.pth" -curl -LJO "%URL_BASE%/uvr5_weights/VR-DeEchoDeReverb.pth" -curl -LJO "%URL_BASE%/uvr5_weights/VR-DeEchoNormal.pth" -cd ".." -echo. -cls - -echo Downloading the ffmpeg.exe file... -curl -LJO "%URL_BASE%/ffmpeg.exe" -echo. -cls - -echo Downloading the ffprobe.exe file... -curl -LJO "%URL_BASE%/ffprobe.exe" -echo. -cls - -echo Downloading the runtime.zip file... -curl -LJO "%URL_EXTRA%/%runtime%.zip" -echo. -cls - -echo Extracting the runtime.zip file, this might take a while... -powershell -Command "Expand-Archive -Path '%runtime%.zip' -DestinationPath '.'" -del %runtime%.zip -echo. -cls - -echo Downloads completed! -echo. - -echo Checking if the local_fixes.py file exists in the Fixes folder... -if exist "%fixesFolder%\%localFixesPy%" ( - echo Running the file... - runtime\python.exe "%fixesFolder%\%localFixesPy%" -) else ( - echo The "%localFixesPy%" file was not found in the "Fixes" folder. -) -echo. - -echo Fixes Applied! -echo. - -echo Applio has been reinstalled! -echo. -echo Press 'Enter' to access the main menu... -pause>nul -cls -goto menu - - -:updater - -echo Downloading the ZIP file... -powershell -command "& { Invoke-WebRequest -Uri '%repoUrl%' -OutFile '%principal%\repo.zip' }" -echo. - -echo Extracting ZIP file... -powershell -command "& { Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory('%principal%\repo.zip', '%principal%') }" -echo. - -echo Copying folder and file structure from subdirectory to main directory... -robocopy "%principal%\Applio-RVC-Fork-%branch%" "%principal%" /E -echo. - -echo Deleting contents of the subdirectory (files and folders)... -rmdir "%principal%\Applio-RVC-Fork-%branch%" /S /Q -echo. - -echo Cleaning up... -del "%principal%\repo.zip" -echo. -cls - -echo Verifying if the local_fixes.py file exists in the Fixes folder... -if exist "%fixesFolder%\%localFixesPy%" ( - echo Running the file... - runtime\python.exe "%fixesFolder%\%localFixesPy%" -) else ( - echo The file "%localFixesPy%" was not found in the "Fixes" folder. -) -echo. - -echo Applio has been updated! -echo. -echo Press 'Enter' to access the main menu... -pause>nul -cls -goto menu - - -:updaterRuntime - -echo Downloading the ZIP file... -powershell -command "& { Invoke-WebRequest -Uri '%repoUrl%' -OutFile '%principal%\repo.zip' }" -echo. - -echo Extracting ZIP file... -powershell -command "& { Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory('%principal%\repo.zip', '%principal%') }" -echo. - -echo Copying folder and file structure from subdirectory to main directory... -robocopy "%principal%\Applio-RVC-Fork-%branch%" "%principal%" /E -echo. - -echo Deleting contents of the subdirectory (files and folders)... -rmdir "%principal%\Applio-RVC-Fork-%branch%" /S /Q -echo. - -echo Cleaning up... -del "%principal%\repo.zip" -echo. -cls - -echo Downloading the runtime.zip file... -curl -LJO "%URL_EXTRA%/%runtime%.zip" -echo. -cls -echo Extracting the runtime.zip file, this might take a while... -powershell -Command "Expand-Archive -Path '%runtime%.zip' -DestinationPath '.'" -del runtime.zip -echo. -cls - -echo Verifying if the local_fixes.py file exists in the Fixes folder... -if exist "%fixesFolder%\%localFixesPy%" ( - echo Running the file... - runtime\python.exe "%fixesFolder%\%localFixesPy%" -) else ( - echo The file "%localFixesPy%" was not found in the "Fixes" folder. -) -echo. - -echo Applio has been updated! -echo. -echo Press 'Enter' to access the main menu... -pause>nul -cls -goto menu diff --git a/go-applio.bat b/go-applio.bat deleted file mode 100644 index 60c0c41d34a8aee5e14e744accb33d028d807245..0000000000000000000000000000000000000000 --- a/go-applio.bat +++ /dev/null @@ -1,92 +0,0 @@ -@echo off -setlocal -title Start Applio - -::: -::: _ _ -::: /\ | (_) -::: / \ _ __ _ __ | |_ ___ -::: / /\ \ | '_ \| '_ \| | |/ _ \ -::: / ____ \| |_) | |_) | | | (_) | -::: /_/ \_\ .__/| .__/|_|_|\___/ -::: | | | | -::: |_| |_| -::: -::: - -:menu -for /f "delims=: tokens=*" %%A in ('findstr /b ":::" "%~f0"') do @echo(%%A - -echo [1] Start Applio -echo [2] Start Applio (DML) -echo [3] Start Realtime GUI (DML) -echo [4] Start Realtime GUI (V0) -echo [5] Start Realtime GUI (V1) -echo. - -set /p choice=Select an option: -set choice=%choice: =% - -cls -echo WARNING: It's recommended to disable antivirus or firewall, as errors might occur when starting the ssl. -pause - -if "%choice%"=="1" ( - cls - echo WARNING: At this point, it's recommended to disable antivirus or firewall, as errors might occur when downloading pretrained models. - pause>null - echo Starting Applio... - echo. - runtime\python.exe infer-web.py --pycmd runtime\python.exe --port 7897 - pause - cls - goto menu -) - -if "%choice%"=="2" ( - cls - echo Starting Applio ^(DML^)... - echo. - runtime\python.exe infer-web.py --pycmd runtime\python.exe --port 7897 --dml - pause - cls - goto menu -) - -if "%choice%"=="3" ( - cls - echo Starting Realtime GUI ^(DML^)... - echo. - runtime\python.exe gui_v1.py --pycmd runtime\python.exe --dml - pause - cls - goto menu -) - -if "%choice%"=="4" ( - cls - echo Starting Realtime GUI ^(V0^)... - echo. - runtime\python.exe gui_v0.py - pause - cls - goto menu -) - -if "%choice%"=="5" ( - cls - echo Starting Realtime GUI ^(V1^)... - echo. - runtime\python.exe gui_v1.py - pause - cls - goto menu -) - -cls -echo Invalid option. Please enter a number from 1 to 5. -echo. -echo Press 'Enter' to access the main menu... -pause>nul -cls -goto menu diff --git a/go-tensorboard.bat b/go-tensorboard.bat deleted file mode 100644 index cb81c17d3865513adec8eb0b832b7888cd1e4078..0000000000000000000000000000000000000000 --- a/go-tensorboard.bat +++ /dev/null @@ -1,2 +0,0 @@ -python fixes/tensor-launch.py -pause \ No newline at end of file diff --git a/gui_v0.py b/gui_v0.py deleted file mode 100644 index 88c3cf9eb1eaa0fa812b32ae4d3750b4ce0a8699..0000000000000000000000000000000000000000 --- a/gui_v0.py +++ /dev/null @@ -1,786 +0,0 @@ -import os, sys, traceback, re - -import json - -now_dir = os.getcwd() -sys.path.append(now_dir) -from configs.config import Config - -Config = Config() -import PySimpleGUI as sg -import sounddevice as sd -import noisereduce as nr -import numpy as np -from fairseq import checkpoint_utils -import librosa, torch, pyworld, faiss, time, threading -import torch.nn.functional as F -import torchaudio.transforms as tat -import scipy.signal as signal -import torchcrepe - -# import matplotlib.pyplot as plt -from lib.infer_pack.models import ( - SynthesizerTrnMs256NSFsid, - SynthesizerTrnMs256NSFsid_nono, - SynthesizerTrnMs768NSFsid, - SynthesizerTrnMs768NSFsid_nono, -) -from i18n import I18nAuto - -i18n = I18nAuto() -device = torch.device("cuda" if torch.cuda.is_available() else "cpu") -current_dir = os.getcwd() - - -class RVC: - def __init__( - self, key, f0_method, hubert_path, pth_path, index_path, npy_path, index_rate - ) -> None: - """ - 初始化 - """ - try: - self.f0_up_key = key - self.time_step = 160 / 16000 * 1000 - self.f0_min = 50 - self.f0_max = 1100 - self.f0_mel_min = 1127 * np.log(1 + self.f0_min / 700) - self.f0_mel_max = 1127 * np.log(1 + self.f0_max / 700) - self.f0_method = f0_method - self.sr = 16000 - self.window = 160 - - # Get Torch Device - if torch.cuda.is_available(): - self.torch_device = torch.device( - f"cuda:{0 % torch.cuda.device_count()}" - ) - elif torch.backends.mps.is_available(): - self.torch_device = torch.device("mps") - else: - self.torch_device = torch.device("cpu") - - if index_rate != 0: - self.index = faiss.read_index(index_path) - # self.big_npy = np.load(npy_path) - self.big_npy = self.index.reconstruct_n(0, self.index.ntotal) - print("index search enabled") - self.index_rate = index_rate - model_path = hubert_path - print("load model(s) from {}".format(model_path)) - models, saved_cfg, task = checkpoint_utils.load_model_ensemble_and_task( - [model_path], - suffix="", - ) - self.model = models[0] - self.model = self.model.to(device) - if Config.is_half: - self.model = self.model.half() - else: - self.model = self.model.float() - self.model.eval() - cpt = torch.load(pth_path, map_location="cpu") - self.tgt_sr = cpt["config"][-1] - cpt["config"][-3] = cpt["weight"]["emb_g.weight"].shape[0] # n_spk - self.if_f0 = cpt.get("f0", 1) - self.version = cpt.get("version", "v1") - if self.version == "v1": - if self.if_f0 == 1: - self.net_g = SynthesizerTrnMs256NSFsid( - *cpt["config"], is_half=Config.is_half - ) - else: - self.net_g = SynthesizerTrnMs256NSFsid_nono(*cpt["config"]) - elif self.version == "v2": - if self.if_f0 == 1: - self.net_g = SynthesizerTrnMs768NSFsid( - *cpt["config"], is_half=Config.is_half - ) - else: - self.net_g = SynthesizerTrnMs768NSFsid_nono(*cpt["config"]) - del self.net_g.enc_q - print(self.net_g.load_state_dict(cpt["weight"], strict=False)) - self.net_g.eval().to(device) - if Config.is_half: - self.net_g = self.net_g.half() - else: - self.net_g = self.net_g.float() - except: - print(traceback.format_exc()) - - def get_regular_crepe_computation(self, x, f0_min, f0_max, model="full"): - batch_size = 512 - # Compute pitch using first gpu - audio = torch.tensor(np.copy(x))[None].float() - f0, pd = torchcrepe.predict( - audio, - self.sr, - self.window, - f0_min, - f0_max, - model, - batch_size=batch_size, - device=self.torch_device, - return_periodicity=True, - ) - pd = torchcrepe.filter.median(pd, 3) - f0 = torchcrepe.filter.mean(f0, 3) - f0[pd < 0.1] = 0 - f0 = f0[0].cpu().numpy() - return f0 - - def get_harvest_computation(self, x, f0_min, f0_max): - f0, t = pyworld.harvest( - x.astype(np.double), - fs=self.sr, - f0_ceil=f0_max, - f0_floor=f0_min, - frame_period=10, - ) - f0 = pyworld.stonemask(x.astype(np.double), f0, t, self.sr) - f0 = signal.medfilt(f0, 3) - return f0 - - def get_f0(self, x, f0_up_key, inp_f0=None): - # Calculate Padding and f0 details here - p_len = x.shape[0] // 512 # For Now This probs doesn't work - x_pad = 1 - f0_min = 50 - f0_max = 1100 - f0_mel_min = 1127 * np.log(1 + f0_min / 700) - f0_mel_max = 1127 * np.log(1 + f0_max / 700) - - f0 = 0 - # Here, check f0_methods and get their computations - if self.f0_method == "harvest": - f0 = self.get_harvest_computation(x, f0_min, f0_max) - elif self.f0_method == "reg-crepe": - f0 = self.get_regular_crepe_computation(x, f0_min, f0_max) - elif self.f0_method == "reg-crepe-tiny": - f0 = self.get_regular_crepe_computation(x, f0_min, f0_max, "tiny") - - # Calculate f0_course and f0_bak here - f0 *= pow(2, f0_up_key / 12) - # with open("test.txt","w")as f:f.write("\n".join([str(i)for i in f0.tolist()])) - tf0 = self.sr // self.window # 每秒f0点数 - if inp_f0 is not None: - delta_t = np.round( - (inp_f0[:, 0].max() - inp_f0[:, 0].min()) * tf0 + 1 - ).astype("int16") - replace_f0 = np.interp( - list(range(delta_t)), inp_f0[:, 0] * 100, inp_f0[:, 1] - ) - shape = f0[x_pad * tf0 : x_pad * tf0 + len(replace_f0)].shape[0] - f0[x_pad * tf0 : x_pad * tf0 + len(replace_f0)] = replace_f0[:shape] - # with open("test_opt.txt","w")as f:f.write("\n".join([str(i)for i in f0.tolist()])) - f0bak = f0.copy() - f0_mel = 1127 * np.log(1 + f0 / 700) - f0_mel[f0_mel > 0] = (f0_mel[f0_mel > 0] - f0_mel_min) * 254 / ( - f0_mel_max - f0_mel_min - ) + 1 - f0_mel[f0_mel <= 1] = 1 - f0_mel[f0_mel > 255] = 255 - f0_coarse = np.rint(f0_mel).astype(np.int) - return f0_coarse, f0bak # 1-0 - - def infer(self, feats: torch.Tensor) -> np.ndarray: - """ - 推理函数 - """ - audio = feats.clone().cpu().numpy() - assert feats.dim() == 1, feats.dim() - feats = feats.view(1, -1) - padding_mask = torch.BoolTensor(feats.shape).fill_(False) - if Config.is_half: - feats = feats.half() - else: - feats = feats.float() - inputs = { - "source": feats.to(device), - "padding_mask": padding_mask.to(device), - "output_layer": 9 if self.version == "v1" else 12, - } - torch.cuda.synchronize() - with torch.no_grad(): - logits = self.model.extract_features(**inputs) - feats = ( - self.model.final_proj(logits[0]) if self.version == "v1" else logits[0] - ) - - ####索引优化 - try: - if ( - hasattr(self, "index") - and hasattr(self, "big_npy") - and self.index_rate != 0 - ): - npy = feats[0].cpu().numpy().astype("float32") - score, ix = self.index.search(npy, k=8) - weight = np.square(1 / score) - weight /= weight.sum(axis=1, keepdims=True) - npy = np.sum(self.big_npy[ix] * np.expand_dims(weight, axis=2), axis=1) - if Config.is_half: - npy = npy.astype("float16") - feats = ( - torch.from_numpy(npy).unsqueeze(0).to(device) * self.index_rate - + (1 - self.index_rate) * feats - ) - else: - print("index search FAIL or disabled") - except: - traceback.print_exc() - print("index search FAIL") - feats = F.interpolate(feats.permute(0, 2, 1), scale_factor=2).permute(0, 2, 1) - torch.cuda.synchronize() - print(feats.shape) - if self.if_f0 == 1: - pitch, pitchf = self.get_f0(audio, self.f0_up_key) - p_len = min(feats.shape[1], 13000, pitch.shape[0]) # 太大了爆显存 - else: - pitch, pitchf = None, None - p_len = min(feats.shape[1], 13000) # 太大了爆显存 - torch.cuda.synchronize() - # print(feats.shape,pitch.shape) - feats = feats[:, :p_len, :] - if self.if_f0 == 1: - pitch = pitch[:p_len] - pitchf = pitchf[:p_len] - pitch = torch.LongTensor(pitch).unsqueeze(0).to(device) - pitchf = torch.FloatTensor(pitchf).unsqueeze(0).to(device) - p_len = torch.LongTensor([p_len]).to(device) - ii = 0 # sid - sid = torch.LongTensor([ii]).to(device) - with torch.no_grad(): - if self.if_f0 == 1: - infered_audio = ( - self.net_g.infer(feats, p_len, pitch, pitchf, sid)[0][0, 0] - .data.cpu() - .float() - ) - else: - infered_audio = ( - self.net_g.infer(feats, p_len, sid)[0][0, 0].data.cpu().float() - ) - torch.cuda.synchronize() - return infered_audio - - -class GUIConfig: - def __init__(self) -> None: - self.hubert_path: str = "" - self.pth_path: str = "" - self.index_path: str = "" - self.npy_path: str = "" - self.f0_method: str = "" - self.pitch: int = 12 - self.samplerate: int = 44100 - self.block_time: float = 1.0 # s - self.buffer_num: int = 1 - self.threhold: int = -30 - self.crossfade_time: float = 0.08 - self.extra_time: float = 0.04 - self.I_noise_reduce = False - self.O_noise_reduce = False - self.index_rate = 0.3 - - -class GUI: - def __init__(self) -> None: - self.config = GUIConfig() - self.flag_vc = False - - self.launcher() - - def load(self): - ( - input_devices, - output_devices, - input_devices_indices, - output_devices_indices, - ) = self.get_devices() - try: - with open("values1.json", "r") as j: - data = json.load(j) - except: - # Injecting f0_method into the json data - with open("values1.json", "w") as j: - data = { - "pth_path": "", - "index_path": "", - "sg_input_device": input_devices[ - input_devices_indices.index(sd.default.device[0]) - ], - "sg_output_device": output_devices[ - output_devices_indices.index(sd.default.device[1]) - ], - "threhold": "-45", - "pitch": "0", - "index_rate": "0", - "block_time": "1", - "crossfade_length": "0.04", - "extra_time": "1", - } - return data - - def launcher(self): - data = self.load() - sg.theme("DarkTeal12") - input_devices, output_devices, _, _ = self.get_devices() - layout = [ - [ - sg.Frame( - title="Proudly forked by Mangio621", - ), - sg.Frame( - title=i18n("Load model"), - layout=[ - [ - sg.Input( - default_text="hubert_base.pt", - key="hubert_path", - disabled=True, - ), - sg.FileBrowse( - i18n("Hubert Model"), - initial_folder=os.path.join(os.getcwd()), - file_types=(("pt files", "*.pt"),), - ), - ], - [ - sg.Input( - default_text=data.get("pth_path", ""), - key="pth_path", - ), - sg.FileBrowse( - i18n("Select the .pth file"), - initial_folder=os.path.join(os.getcwd(), "weights"), - file_types=(("weight files", "*.pth"),), - ), - ], - [ - sg.Input( - default_text=data.get("index_path", ""), - key="index_path", - ), - sg.FileBrowse( - i18n("Select the .index file"), - initial_folder=os.path.join(os.getcwd(), "logs"), - file_types=(("index files", "*.index"),), - ), - ], - [ - sg.Input( - default_text="你不需要填写这个You don't need write this.", - key="npy_path", - disabled=True, - ), - sg.FileBrowse( - i18n("Select the .npy file"), - initial_folder=os.path.join(os.getcwd(), "logs"), - file_types=(("feature files", "*.npy"),), - ), - ], - ], - ), - ], - [ - # Mangio f0 Selection frame Here - sg.Frame( - layout=[ - [ - sg.Radio( - "Harvest", "f0_method", key="harvest", default=True - ), - sg.Radio("Crepe", "f0_method", key="reg-crepe"), - sg.Radio("Crepe Tiny", "f0_method", key="reg-crepe-tiny"), - ] - ], - title="Select an f0 Method", - ) - ], - [ - sg.Frame( - layout=[ - [ - sg.Text(i18n("Input device")), - sg.Combo( - input_devices, - key="sg_input_device", - default_value=data.get("sg_input_device", ""), - ), - ], - [ - sg.Text(i18n("Output device")), - sg.Combo( - output_devices, - key="sg_output_device", - default_value=data.get("sg_output_device", ""), - ), - ], - ], - title=i18n("Audio device (please use the same type of driver)"), - ) - ], - [ - sg.Frame( - layout=[ - [ - sg.Text(i18n("Response threshold")), - sg.Slider( - range=(-60, 0), - key="threhold", - resolution=1, - orientation="h", - default_value=data.get("threhold", ""), - ), - ], - [ - sg.Text(i18n("Pitch settings")), - sg.Slider( - range=(-24, 24), - key="pitch", - resolution=1, - orientation="h", - default_value=data.get("pitch", ""), - ), - ], - [ - sg.Text(i18n("Index Rate")), - sg.Slider( - range=(0.0, 1.0), - key="index_rate", - resolution=0.01, - orientation="h", - default_value=data.get("index_rate", ""), - ), - ], - ], - title=i18n("General settings"), - ), - sg.Frame( - layout=[ - [ - sg.Text(i18n("Sample length")), - sg.Slider( - range=(0.1, 3.0), - key="block_time", - resolution=0.1, - orientation="h", - default_value=data.get("block_time", ""), - ), - ], - [ - sg.Text(i18n("Fade length")), - sg.Slider( - range=(0.01, 0.15), - key="crossfade_length", - resolution=0.01, - orientation="h", - default_value=data.get("crossfade_length", ""), - ), - ], - [ - sg.Text(i18n("Extra推理时长")), - sg.Slider( - range=(0.05, 3.00), - key="extra_time", - resolution=0.01, - orientation="h", - default_value=data.get("extra_time", ""), - ), - ], - [ - sg.Checkbox(i18n("Input noise reduction"), key="I_noise_reduce"), - sg.Checkbox(i18n("Output noise reduction"), key="O_noise_reduce"), - ], - ], - title=i18n("Performance settings"), - ), - ], - [ - sg.Button(i18n("开始音频Convert"), key="start_vc"), - sg.Button(i18n("停止音频Convert"), key="stop_vc"), - sg.Text(i18n("Inference time (ms):")), - sg.Text("0", key="infer_time"), - ], - ] - self.window = sg.Window("RVC - GUI", layout=layout) - self.event_handler() - - def event_handler(self): - while True: - event, values = self.window.read() - if event == sg.WINDOW_CLOSED: - self.flag_vc = False - exit() - if event == "start_vc" and self.flag_vc == False: - if self.set_values(values) == True: - print("using_cuda:" + str(torch.cuda.is_available())) - self.start_vc() - settings = { - "pth_path": values["pth_path"], - "index_path": values["index_path"], - "f0_method": self.get_f0_method_from_radios(values), - "sg_input_device": values["sg_input_device"], - "sg_output_device": values["sg_output_device"], - "threhold": values["threhold"], - "pitch": values["pitch"], - "index_rate": values["index_rate"], - "block_time": values["block_time"], - "crossfade_length": values["crossfade_length"], - "extra_time": values["extra_time"], - } - with open("values1.json", "w") as j: - json.dump(settings, j) - if event == "stop_vc" and self.flag_vc == True: - self.flag_vc = False - - # Function that returns the used f0 method in string format "harvest" - def get_f0_method_from_radios(self, values): - f0_array = [ - {"name": "harvest", "val": values["harvest"]}, - {"name": "reg-crepe", "val": values["reg-crepe"]}, - {"name": "reg-crepe-tiny", "val": values["reg-crepe-tiny"]}, - ] - # Filter through to find a true value - used_f0 = "" - for f0 in f0_array: - if f0["val"] == True: - used_f0 = f0["name"] - break - if used_f0 == "": - used_f0 = "harvest" # Default Harvest if used_f0 is empty somehow - return used_f0 - - def set_values(self, values): - if len(values["pth_path"].strip()) == 0: - sg.popup(i18n("Select the pth file")) - return False - if len(values["index_path"].strip()) == 0: - sg.popup(i18n("Select the index file")) - return False - pattern = re.compile("[^\x00-\x7F]+") - if pattern.findall(values["hubert_path"]): - sg.popup(i18n("The hubert model path must not contain Chinese characters")) - return False - if pattern.findall(values["pth_path"]): - sg.popup(i18n("The pth file path must not contain Chinese characters.")) - return False - if pattern.findall(values["index_path"]): - sg.popup(i18n("The index file path must not contain Chinese characters.")) - return False - self.set_devices(values["sg_input_device"], values["sg_output_device"]) - self.config.hubert_path = os.path.join(current_dir, "hubert_base.pt") - self.config.pth_path = values["pth_path"] - self.config.index_path = values["index_path"] - self.config.npy_path = values["npy_path"] - self.config.f0_method = self.get_f0_method_from_radios(values) - self.config.threhold = values["threhold"] - self.config.pitch = values["pitch"] - self.config.block_time = values["block_time"] - self.config.crossfade_time = values["crossfade_length"] - self.config.extra_time = values["extra_time"] - self.config.I_noise_reduce = values["I_noise_reduce"] - self.config.O_noise_reduce = values["O_noise_reduce"] - self.config.index_rate = values["index_rate"] - return True - - def start_vc(self): - torch.cuda.empty_cache() - self.flag_vc = True - self.block_frame = int(self.config.block_time * self.config.samplerate) - self.crossfade_frame = int(self.config.crossfade_time * self.config.samplerate) - self.sola_search_frame = int(0.012 * self.config.samplerate) - self.delay_frame = int(0.01 * self.config.samplerate) # 往前预留0.02s - self.extra_frame = int(self.config.extra_time * self.config.samplerate) - self.rvc = None - self.rvc = RVC( - self.config.pitch, - self.config.f0_method, - self.config.hubert_path, - self.config.pth_path, - self.config.index_path, - self.config.npy_path, - self.config.index_rate, - ) - self.input_wav: np.ndarray = np.zeros( - self.extra_frame - + self.crossfade_frame - + self.sola_search_frame - + self.block_frame, - dtype="float32", - ) - self.output_wav: torch.Tensor = torch.zeros( - self.block_frame, device=device, dtype=torch.float32 - ) - self.sola_buffer: torch.Tensor = torch.zeros( - self.crossfade_frame, device=device, dtype=torch.float32 - ) - self.fade_in_window: torch.Tensor = torch.linspace( - 0.0, 1.0, steps=self.crossfade_frame, device=device, dtype=torch.float32 - ) - self.fade_out_window: torch.Tensor = 1 - self.fade_in_window - self.resampler1 = tat.Resample( - orig_freq=self.config.samplerate, new_freq=16000, dtype=torch.float32 - ) - self.resampler2 = tat.Resample( - orig_freq=self.rvc.tgt_sr, - new_freq=self.config.samplerate, - dtype=torch.float32, - ) - thread_vc = threading.Thread(target=self.soundinput) - thread_vc.start() - - def soundinput(self): - """ - 接受音频输入 - """ - with sd.Stream( - channels=2, - callback=self.audio_callback, - blocksize=self.block_frame, - samplerate=self.config.samplerate, - dtype="float32", - ): - while self.flag_vc: - time.sleep(self.config.block_time) - print("Audio block passed.") - print("ENDing VC") - - def audio_callback( - self, indata: np.ndarray, outdata: np.ndarray, frames, times, status - ): - """ - 音频处理 - """ - start_time = time.perf_counter() - indata = librosa.to_mono(indata.T) - if self.config.I_noise_reduce: - indata[:] = nr.reduce_noise(y=indata, sr=self.config.samplerate) - - """noise gate""" - frame_length = 2048 - hop_length = 1024 - rms = librosa.feature.rms( - y=indata, frame_length=frame_length, hop_length=hop_length - ) - db_threhold = librosa.amplitude_to_db(rms, ref=1.0)[0] < self.config.threhold - # print(rms.shape,db.shape,db) - for i in range(db_threhold.shape[0]): - if db_threhold[i]: - indata[i * hop_length : (i + 1) * hop_length] = 0 - self.input_wav[:] = np.append(self.input_wav[self.block_frame :], indata) - - # infer - print("input_wav:" + str(self.input_wav.shape)) - # print('infered_wav:'+str(infer_wav.shape)) - infer_wav: torch.Tensor = self.resampler2( - self.rvc.infer(self.resampler1(torch.from_numpy(self.input_wav))) - )[-self.crossfade_frame - self.sola_search_frame - self.block_frame :].to( - device - ) - print("infer_wav:" + str(infer_wav.shape)) - - # SOLA algorithm from https://github.com/yxlllc/DDSP-SVC - cor_nom = F.conv1d( - infer_wav[None, None, : self.crossfade_frame + self.sola_search_frame], - self.sola_buffer[None, None, :], - ) - cor_den = torch.sqrt( - F.conv1d( - infer_wav[None, None, : self.crossfade_frame + self.sola_search_frame] - ** 2, - torch.ones(1, 1, self.crossfade_frame, device=device), - ) - + 1e-8 - ) - sola_offset = torch.argmax(cor_nom[0, 0] / cor_den[0, 0]) - print("sola offset: " + str(int(sola_offset))) - - # crossfade - self.output_wav[:] = infer_wav[sola_offset : sola_offset + self.block_frame] - self.output_wav[: self.crossfade_frame] *= self.fade_in_window - self.output_wav[: self.crossfade_frame] += self.sola_buffer[:] - if sola_offset < self.sola_search_frame: - self.sola_buffer[:] = ( - infer_wav[ - -self.sola_search_frame - - self.crossfade_frame - + sola_offset : -self.sola_search_frame - + sola_offset - ] - * self.fade_out_window - ) - else: - self.sola_buffer[:] = ( - infer_wav[-self.crossfade_frame :] * self.fade_out_window - ) - - if self.config.O_noise_reduce: - outdata[:] = np.tile( - nr.reduce_noise( - y=self.output_wav[:].cpu().numpy(), sr=self.config.samplerate - ), - (2, 1), - ).T - else: - outdata[:] = self.output_wav[:].repeat(2, 1).t().cpu().numpy() - total_time = time.perf_counter() - start_time - self.window["infer_time"].update(int(total_time * 1000)) - print("infer time:" + str(total_time)) - print("f0_method: " + str(self.config.f0_method)) - - def get_devices(self, update: bool = True): - """获取设备列表""" - if update: - sd._terminate() - sd._initialize() - devices = sd.query_devices() - hostapis = sd.query_hostapis() - for hostapi in hostapis: - for device_idx in hostapi["devices"]: - devices[device_idx]["hostapi_name"] = hostapi["name"] - input_devices = [ - f"{d['name']} ({d['hostapi_name']})" - for d in devices - if d["max_input_channels"] > 0 - ] - output_devices = [ - f"{d['name']} ({d['hostapi_name']})" - for d in devices - if d["max_output_channels"] > 0 - ] - input_devices_indices = [ - d["index"] if "index" in d else d["name"] - for d in devices - if d["max_input_channels"] > 0 - ] - output_devices_indices = [ - d["index"] if "index" in d else d["name"] - for d in devices - if d["max_output_channels"] > 0 - ] - return ( - input_devices, - output_devices, - input_devices_indices, - output_devices_indices, - ) - - def set_devices(self, input_device, output_device): - """设置输出设备""" - ( - input_devices, - output_devices, - input_device_indices, - output_device_indices, - ) = self.get_devices() - sd.default.device[0] = input_device_indices[input_devices.index(input_device)] - sd.default.device[1] = output_device_indices[ - output_devices.index(output_device) - ] - print("input device:" + str(sd.default.device[0]) + ":" + str(input_device)) - print("output device:" + str(sd.default.device[1]) + ":" + str(output_device)) - - -gui = GUI() diff --git a/gui_v1.py b/gui_v1.py deleted file mode 100644 index becba80cdda6987c1ad70c89e68a4e3a4da44639..0000000000000000000000000000000000000000 --- a/gui_v1.py +++ /dev/null @@ -1,708 +0,0 @@ -import os -import logging -import sys -from dotenv import load_dotenv - -load_dotenv() - -os.environ["OMP_NUM_THREADS"] = "4" -if sys.platform == "darwin": - os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1" - -now_dir = os.getcwd() -sys.path.append(now_dir) -import multiprocessing - -logger = logging.getLogger(__name__) - - -class Harvest(multiprocessing.Process): - def __init__(self, inp_q, opt_q): - multiprocessing.Process.__init__(self) - self.inp_q = inp_q - self.opt_q = opt_q - - def run(self): - import numpy as np - import pyworld - - while 1: - idx, x, res_f0, n_cpu, ts = self.inp_q.get() - f0, t = pyworld.harvest( - x.astype(np.double), - fs=16000, - f0_ceil=1100, - f0_floor=50, - frame_period=10, - ) - res_f0[idx] = f0 - if len(res_f0.keys()) >= n_cpu: - self.opt_q.put(ts) - - -if __name__ == "__main__": - import json - import multiprocessing - import re - import threading - import time - import traceback - from multiprocessing import Queue, cpu_count - from queue import Empty - - import librosa - from tools.torchgate import TorchGate - import numpy as np - import PySimpleGUI as sg - import sounddevice as sd - import torch - import torch.nn.functional as F - import torchaudio.transforms as tat - - import tools.rvc_for_realtime as rvc_for_realtime - from i18n.i18n import I18nAuto - - i18n = I18nAuto() - device = rvc_for_realtime.config.device - # device = torch.device( - # "cuda" - # if torch.cuda.is_available() - # else ("mps" if torch.backends.mps.is_available() else "cpu") - # ) - current_dir = os.getcwd() - inp_q = Queue() - opt_q = Queue() - n_cpu = min(cpu_count(), 8) - for _ in range(n_cpu): - Harvest(inp_q, opt_q).start() - - class GUIConfig: - def __init__(self) -> None: - self.pth_path: str = "" - self.index_path: str = "" - self.pitch: int = 0 - self.samplerate: int = 40000 - self.block_time: float = 1.0 # s - self.buffer_num: int = 1 - self.threhold: int = -60 - self.crossfade_time: float = 0.04 - self.extra_time: float = 2.0 - self.I_noise_reduce = False - self.O_noise_reduce = False - self.rms_mix_rate = 0.0 - self.index_rate = 0.3 - self.n_cpu = min(n_cpu, 6) - self.f0method = "harvest" - self.sg_input_device = "" - self.sg_output_device = "" - - class GUI: - def __init__(self) -> None: - self.config = GUIConfig() - self.flag_vc = False - - self.launcher() - - def load(self): - input_devices, output_devices, _, _ = self.get_devices() - try: - with open("configs/config.json", "r") as j: - data = json.load(j) - data["pm"] = data["f0method"] == "pm" - data["harvest"] = data["f0method"] == "harvest" - data["crepe"] = data["f0method"] == "crepe" - data["rmvpe"] = data["f0method"] == "rmvpe" - except: - with open("configs/config.json", "w") as j: - data = { - "pth_path": " ", - "index_path": " ", - "sg_input_device": input_devices[sd.default.device[0]], - "sg_output_device": output_devices[sd.default.device[1]], - "threhold": "-60", - "pitch": "0", - "index_rate": "0", - "rms_mix_rate": "0", - "block_time": "0.25", - "crossfade_length": "0.04", - "extra_time": "2", - "f0method": "rmvpe", - } - data["pm"] = data["f0method"] == "pm" - data["harvest"] = data["f0method"] == "harvest" - data["crepe"] = data["f0method"] == "crepe" - data["rmvpe"] = data["f0method"] == "rmvpe" - return data - - def launcher(self): - data = self.load() - sg.theme("LightBlue3") - input_devices, output_devices, _, _ = self.get_devices() - layout = [ - [ - sg.Frame( - title=i18n("加载模型"), - layout=[ - [ - sg.Input( - default_text=data.get("pth_path", ""), - key="pth_path", - ), - sg.FileBrowse( - i18n("选择.pth文件"), - initial_folder=os.path.join( - os.getcwd(), "assets/weights" - ), - file_types=((". pth"),), - ), - ], - [ - sg.Input( - default_text=data.get("index_path", ""), - key="index_path", - ), - sg.FileBrowse( - i18n("选择.index文件"), - initial_folder=os.path.join(os.getcwd(), "logs"), - file_types=((". index"),), - ), - ], - ], - ) - ], - [ - sg.Frame( - layout=[ - [ - sg.Text(i18n("输入设备")), - sg.Combo( - input_devices, - key="sg_input_device", - default_value=data.get("sg_input_device", ""), - ), - ], - [ - sg.Text(i18n("输出设备")), - sg.Combo( - output_devices, - key="sg_output_device", - default_value=data.get("sg_output_device", ""), - ), - ], - [sg.Button(i18n("重载设备列表"), key="reload_devices")], - ], - title=i18n("音频设备(请使用同种类驱动)"), - ) - ], - [ - sg.Frame( - layout=[ - [ - sg.Text(i18n("响应阈值")), - sg.Slider( - range=(-60, 0), - key="threhold", - resolution=1, - orientation="h", - default_value=data.get("threhold", "-60"), - enable_events=True, - ), - ], - [ - sg.Text(i18n("音调设置")), - sg.Slider( - range=(-24, 24), - key="pitch", - resolution=1, - orientation="h", - default_value=data.get("pitch", "0"), - enable_events=True, - ), - ], - [ - sg.Text(i18n("Index Rate")), - sg.Slider( - range=(0.0, 1.0), - key="index_rate", - resolution=0.01, - orientation="h", - default_value=data.get("index_rate", "0"), - enable_events=True, - ), - ], - [ - sg.Text(i18n("响度因子")), - sg.Slider( - range=(0.0, 1.0), - key="rms_mix_rate", - resolution=0.01, - orientation="h", - default_value=data.get("rms_mix_rate", "0"), - enable_events=True, - ), - ], - [ - sg.Text(i18n("音高算法")), - sg.Radio( - "pm", - "f0method", - key="pm", - default=data.get("pm", "") == True, - enable_events=True, - ), - sg.Radio( - "harvest", - "f0method", - key="harvest", - default=data.get("harvest", "") == True, - enable_events=True, - ), - sg.Radio( - "crepe", - "f0method", - key="crepe", - default=data.get("crepe", "") == True, - enable_events=True, - ), - sg.Radio( - "rmvpe", - "f0method", - key="rmvpe", - default=data.get("rmvpe", "") == True, - enable_events=True, - ), - ], - ], - title=i18n("常规设置"), - ), - sg.Frame( - layout=[ - [ - sg.Text(i18n("采样长度")), - sg.Slider( - range=(0.05, 2.4), - key="block_time", - resolution=0.01, - orientation="h", - default_value=data.get("block_time", "0.25"), - enable_events=True, - ), - ], - [ - sg.Text(i18n("harvest进程数")), - sg.Slider( - range=(1, n_cpu), - key="n_cpu", - resolution=1, - orientation="h", - default_value=data.get( - "n_cpu", min(self.config.n_cpu, n_cpu) - ), - enable_events=True, - ), - ], - [ - sg.Text(i18n("淡入淡出长度")), - sg.Slider( - range=(0.01, 0.15), - key="crossfade_length", - resolution=0.01, - orientation="h", - default_value=data.get("crossfade_length", "0.04"), - enable_events=True, - ), - ], - [ - sg.Text(i18n("额外推理时长")), - sg.Slider( - range=(0.05, 5.00), - key="extra_time", - resolution=0.01, - orientation="h", - default_value=data.get("extra_time", "2.0"), - enable_events=True, - ), - ], - [ - sg.Checkbox( - i18n("输入降噪"), - key="I_noise_reduce", - enable_events=True, - ), - sg.Checkbox( - i18n("输出降噪"), - key="O_noise_reduce", - enable_events=True, - ), - ], - ], - title=i18n("性能设置"), - ), - ], - [ - sg.Button(i18n("开始音频转换"), key="start_vc"), - sg.Button(i18n("停止音频转换"), key="stop_vc"), - sg.Text(i18n("推理时间(ms):")), - sg.Text("0", key="infer_time"), - ], - ] - self.window = sg.Window("RVC - GUI", layout=layout, finalize=True) - self.event_handler() - - def event_handler(self): - while True: - event, values = self.window.read() - if event == sg.WINDOW_CLOSED: - self.flag_vc = False - exit() - if event == "reload_devices": - prev_input = self.window["sg_input_device"].get() - prev_output = self.window["sg_output_device"].get() - input_devices, output_devices, _, _ = self.get_devices(update=True) - if prev_input not in input_devices: - self.config.sg_input_device = input_devices[0] - else: - self.config.sg_input_device = prev_input - self.window["sg_input_device"].Update(values=input_devices) - self.window["sg_input_device"].Update( - value=self.config.sg_input_device - ) - if prev_output not in output_devices: - self.config.sg_output_device = output_devices[0] - else: - self.config.sg_output_device = prev_output - self.window["sg_output_device"].Update(values=output_devices) - self.window["sg_output_device"].Update( - value=self.config.sg_output_device - ) - if event == "start_vc" and self.flag_vc == False: - if self.set_values(values) == True: - logger.info("Use CUDA: %s", torch.cuda.is_available()) - self.start_vc() - settings = { - "pth_path": values["pth_path"], - "index_path": values["index_path"], - "sg_input_device": values["sg_input_device"], - "sg_output_device": values["sg_output_device"], - "threhold": values["threhold"], - "pitch": values["pitch"], - "rms_mix_rate": values["rms_mix_rate"], - "index_rate": values["index_rate"], - "block_time": values["block_time"], - "crossfade_length": values["crossfade_length"], - "extra_time": values["extra_time"], - "n_cpu": values["n_cpu"], - "f0method": ["pm", "harvest", "crepe", "rmvpe"][ - [ - values["pm"], - values["harvest"], - values["crepe"], - values["rmvpe"], - ].index(True) - ], - } - with open("configs/config.json", "w") as j: - json.dump(settings, j) - if event == "stop_vc" and self.flag_vc == True: - self.flag_vc = False - - # Parameter hot update - if event == "threhold": - self.config.threhold = values["threhold"] - elif event == "pitch": - self.config.pitch = values["pitch"] - if hasattr(self, "rvc"): - self.rvc.change_key(values["pitch"]) - elif event == "index_rate": - self.config.index_rate = values["index_rate"] - if hasattr(self, "rvc"): - self.rvc.change_index_rate(values["index_rate"]) - elif event == "rms_mix_rate": - self.config.rms_mix_rate = values["rms_mix_rate"] - elif event in ["pm", "harvest", "crepe", "rmvpe"]: - self.config.f0method = event - elif event == "I_noise_reduce": - self.config.I_noise_reduce = values["I_noise_reduce"] - elif event == "O_noise_reduce": - self.config.O_noise_reduce = values["O_noise_reduce"] - elif event != "start_vc" and self.flag_vc == True: - # Other parameters do not support hot update - self.flag_vc = False - - def set_values(self, values): - if len(values["pth_path"].strip()) == 0: - sg.popup(i18n("请选择pth文件")) - return False - if len(values["index_path"].strip()) == 0: - sg.popup(i18n("请选择index文件")) - return False - pattern = re.compile("[^\x00-\x7F]+") - if pattern.findall(values["pth_path"]): - sg.popup(i18n("pth文件路径不可包含中文")) - return False - if pattern.findall(values["index_path"]): - sg.popup(i18n("index文件路径不可包含中文")) - return False - self.set_devices(values["sg_input_device"], values["sg_output_device"]) - self.config.pth_path = values["pth_path"] - self.config.index_path = values["index_path"] - self.config.threhold = values["threhold"] - self.config.pitch = values["pitch"] - self.config.block_time = values["block_time"] - self.config.crossfade_time = values["crossfade_length"] - self.config.extra_time = values["extra_time"] - self.config.I_noise_reduce = values["I_noise_reduce"] - self.config.O_noise_reduce = values["O_noise_reduce"] - self.config.rms_mix_rate = values["rms_mix_rate"] - self.config.index_rate = values["index_rate"] - self.config.n_cpu = values["n_cpu"] - self.config.f0method = ["pm", "harvest", "crepe", "rmvpe"][ - [ - values["pm"], - values["harvest"], - values["crepe"], - values["rmvpe"], - ].index(True) - ] - return True - - def start_vc(self): - torch.cuda.empty_cache() - self.flag_vc = True - self.rvc = rvc_for_realtime.RVC( - self.config.pitch, - self.config.pth_path, - self.config.index_path, - self.config.index_rate, - self.config.n_cpu, - inp_q, - opt_q, - device, - self.rvc if hasattr(self, "rvc") else None - ) - self.config.samplerate = self.rvc.tgt_sr - self.zc = self.rvc.tgt_sr // 100 - self.block_frame = int(np.round(self.config.block_time * self.config.samplerate / self.zc)) * self.zc - self.block_frame_16k = 160 * self.block_frame // self.zc - self.crossfade_frame = int(np.round(self.config.crossfade_time * self.config.samplerate / self.zc)) * self.zc - self.sola_search_frame = self.zc - self.extra_frame = int(np.round(self.config.extra_time * self.config.samplerate / self.zc)) * self.zc - self.input_wav: torch.Tensor = torch.zeros( - self.extra_frame - + self.crossfade_frame - + self.sola_search_frame - + self.block_frame, - device=device, - dtype=torch.float32, - ) - self.input_wav_res: torch.Tensor= torch.zeros(160 * self.input_wav.shape[0] // self.zc, device=device,dtype=torch.float32) - self.pitch: np.ndarray = np.zeros( - self.input_wav.shape[0] // self.zc, - dtype="int32", - ) - self.pitchf: np.ndarray = np.zeros( - self.input_wav.shape[0] // self.zc, - dtype="float64", - ) - self.sola_buffer: torch.Tensor = torch.zeros( - self.crossfade_frame, device=device, dtype=torch.float32 - ) - self.nr_buffer: torch.Tensor = self.sola_buffer.clone() - self.output_buffer: torch.Tensor = self.input_wav.clone() - self.res_buffer: torch.Tensor = torch.zeros(2 * self.zc, device=device,dtype=torch.float32) - self.valid_rate = 1 - (self.extra_frame - 1) / self.input_wav.shape[0] - self.fade_in_window: torch.Tensor = ( - torch.sin( - 0.5 - * np.pi - * torch.linspace( - 0.0, - 1.0, - steps=self.crossfade_frame, - device=device, - dtype=torch.float32, - ) - ) - ** 2 - ) - self.fade_out_window: torch.Tensor = 1 - self.fade_in_window - self.resampler = tat.Resample( - orig_freq=self.config.samplerate, new_freq=16000, dtype=torch.float32 - ).to(device) - self.tg = TorchGate(sr=self.config.samplerate, n_fft=4*self.zc, prop_decrease=0.9).to(device) - thread_vc = threading.Thread(target=self.soundinput) - thread_vc.start() - - def soundinput(self): - """ - 接受音频输入 - """ - channels = 1 if sys.platform == "darwin" else 2 - with sd.Stream( - channels=channels, - callback=self.audio_callback, - blocksize=self.block_frame, - samplerate=self.config.samplerate, - dtype="float32", - ): - while self.flag_vc: - time.sleep(self.config.block_time) - logger.debug("Audio block passed.") - logger.debug("ENDing VC") - - def audio_callback( - self, indata: np.ndarray, outdata: np.ndarray, frames, times, status - ): - """ - 音频处理 - """ - start_time = time.perf_counter() - indata = librosa.to_mono(indata.T) - if self.config.threhold > -60: - rms = librosa.feature.rms( - y=indata, frame_length=4*self.zc, hop_length=self.zc - ) - db_threhold = ( - librosa.amplitude_to_db(rms, ref=1.0)[0] < self.config.threhold - ) - for i in range(db_threhold.shape[0]): - if db_threhold[i]: - indata[i * self.zc : (i + 1) * self.zc] = 0 - self.input_wav[: -self.block_frame] = self.input_wav[self.block_frame :].clone() - self.input_wav[-self.block_frame: ] = torch.from_numpy(indata).to(device) - self.input_wav_res[ : -self.block_frame_16k] = self.input_wav_res[self.block_frame_16k :].clone() - # input noise reduction and resampling - if self.config.I_noise_reduce: - input_wav = self.input_wav[-self.crossfade_frame -self.block_frame-2*self.zc: ] - input_wav = self.tg(input_wav.unsqueeze(0), self.input_wav.unsqueeze(0))[0, 2*self.zc:] - input_wav[: self.crossfade_frame] *= self.fade_in_window - input_wav[: self.crossfade_frame] += self.nr_buffer * self.fade_out_window - self.nr_buffer[:] = input_wav[-self.crossfade_frame: ] - input_wav = torch.cat((self.res_buffer[:], input_wav[: self.block_frame])) - self.res_buffer[:] = input_wav[-2*self.zc: ] - self.input_wav_res[-self.block_frame_16k-160: ] = self.resampler(input_wav)[160: ] - else: - self.input_wav_res[-self.block_frame_16k-160: ] = self.resampler(self.input_wav[-self.block_frame-2*self.zc: ])[160: ] - # infer - f0_extractor_frame = self.block_frame_16k + 800 - if self.config.f0method == 'rmvpe': - f0_extractor_frame = 5120 * ((f0_extractor_frame - 1) // 5120 + 1) - infer_wav = self.rvc.infer( - self.input_wav_res, - self.input_wav_res[-f0_extractor_frame :].cpu().numpy(), - self.block_frame_16k, - self.valid_rate, - self.pitch, - self.pitchf, - self.config.f0method, - ) - infer_wav = infer_wav[ - -self.crossfade_frame - self.sola_search_frame - self.block_frame : - ] - # output noise reduction - if self.config.O_noise_reduce: - self.output_buffer[: -self.block_frame] = self.output_buffer[self.block_frame :].clone() - self.output_buffer[-self.block_frame: ] = infer_wav[-self.block_frame:] - infer_wav = self.tg(infer_wav.unsqueeze(0), self.output_buffer.unsqueeze(0)).squeeze(0) - # volume envelop mixing - if self.config.rms_mix_rate < 1: - rms1 = librosa.feature.rms( - y=self.input_wav_res[-160*infer_wav.shape[0]//self.zc :].cpu().numpy(), - frame_length=640, - hop_length=160, - ) - rms1 = torch.from_numpy(rms1).to(device) - rms1 = F.interpolate( - rms1.unsqueeze(0), size=infer_wav.shape[0] + 1, mode="linear",align_corners=True, - )[0,0,:-1] - rms2 = librosa.feature.rms( - y=infer_wav[:].cpu().numpy(), frame_length=4*self.zc, hop_length=self.zc - ) - rms2 = torch.from_numpy(rms2).to(device) - rms2 = F.interpolate( - rms2.unsqueeze(0), size=infer_wav.shape[0] + 1, mode="linear",align_corners=True, - )[0,0,:-1] - rms2 = torch.max(rms2, torch.zeros_like(rms2) + 1e-3) - infer_wav *= torch.pow(rms1 / rms2, torch.tensor(1 - self.config.rms_mix_rate)) - # SOLA algorithm from https://github.com/yxlllc/DDSP-SVC - conv_input = infer_wav[None, None, : self.crossfade_frame + self.sola_search_frame] - cor_nom = F.conv1d(conv_input, self.sola_buffer[None, None, :]) - cor_den = torch.sqrt( - F.conv1d(conv_input ** 2, torch.ones(1, 1, self.crossfade_frame, device=device)) + 1e-8) - if sys.platform == "darwin": - _, sola_offset = torch.max(cor_nom[0, 0] / cor_den[0, 0]) - sola_offset = sola_offset.item() - else: - sola_offset = torch.argmax(cor_nom[0, 0] / cor_den[0, 0]) - logger.debug("sola_offset = %d", int(sola_offset)) - infer_wav = infer_wav[sola_offset: sola_offset + self.block_frame + self.crossfade_frame] - infer_wav[: self.crossfade_frame] *= self.fade_in_window - infer_wav[: self.crossfade_frame] += self.sola_buffer *self.fade_out_window - self.sola_buffer[:] = infer_wav[-self.crossfade_frame:] - if sys.platform == "darwin": - outdata[:] = infer_wav[:-self.crossfade_frame].cpu().numpy()[:, np.newaxis] - else: - outdata[:] = infer_wav[:-self.crossfade_frame].repeat(2, 1).t().cpu().numpy() - total_time = time.perf_counter() - start_time - self.window["infer_time"].update(int(total_time * 1000)) - logger.info("Infer time: %.2f", total_time) - - def get_devices(self, update: bool = True): - """获取设备列表""" - if update: - sd._terminate() - sd._initialize() - devices = sd.query_devices() - hostapis = sd.query_hostapis() - for hostapi in hostapis: - for device_idx in hostapi["devices"]: - devices[device_idx]["hostapi_name"] = hostapi["name"] - input_devices = [ - f"{d['name']} ({d['hostapi_name']})" - for d in devices - if d["max_input_channels"] > 0 - ] - output_devices = [ - f"{d['name']} ({d['hostapi_name']})" - for d in devices - if d["max_output_channels"] > 0 - ] - input_devices_indices = [ - d["index"] if "index" in d else d["name"] - for d in devices - if d["max_input_channels"] > 0 - ] - output_devices_indices = [ - d["index"] if "index" in d else d["name"] - for d in devices - if d["max_output_channels"] > 0 - ] - return ( - input_devices, - output_devices, - input_devices_indices, - output_devices_indices, - ) - - def set_devices(self, input_device, output_device): - """设置输出设备""" - ( - input_devices, - output_devices, - input_device_indices, - output_device_indices, - ) = self.get_devices() - sd.default.device[0] = input_device_indices[ - input_devices.index(input_device) - ] - sd.default.device[1] = output_device_indices[ - output_devices.index(output_device) - ] - logger.info( - "Input device: %s:%s", str(sd.default.device[0]), input_device - ) - logger.info( - "Output device: %s:%s", str(sd.default.device[1]), output_device - ) - - gui = GUI() \ No newline at end of file diff --git a/guidml.py b/guidml.py deleted file mode 100644 index aa35e9f8e3386bfec61fc9ad6f807b458ab35882..0000000000000000000000000000000000000000 --- a/guidml.py +++ /dev/null @@ -1,710 +0,0 @@ -""" -0416后的更新: - 引入config中half - 重建npy而不用填写 - v2支持 - 无f0模型支持 - 修复 - - int16: - 增加无索引支持 - f0算法改harvest(怎么看就只有这个会影响CPU占用),但是不这么改效果不好 -""" -import os, sys, traceback, re - -import json - -now_dir = os.getcwd() -sys.path.append(now_dir) -from configs.config import Config - -Config = Config() - -import torch_directml -import PySimpleGUI as sg -import sounddevice as sd -import noisereduce as nr -import numpy as np -from fairseq import checkpoint_utils -import librosa, torch, pyworld, faiss, time, threading -import torch.nn.functional as F -import torchaudio.transforms as tat -import scipy.signal as signal - - -# import matplotlib.pyplot as plt -from lib.infer_pack.models import ( - SynthesizerTrnMs256NSFsid, - SynthesizerTrnMs256NSFsid_nono, - SynthesizerTrnMs768NSFsid, - SynthesizerTrnMs768NSFsid_nono, -) -from i18n import I18nAuto - -i18n = I18nAuto() -device = torch_directml.device(torch_directml.default_device()) -current_dir = os.getcwd() - - -class RVC: - def __init__( - self, key, hubert_path, pth_path, index_path, npy_path, index_rate - ) -> None: - """ - 初始化 - """ - try: - self.f0_up_key = key - self.time_step = 160 / 16000 * 1000 - self.f0_min = 50 - self.f0_max = 1100 - self.f0_mel_min = 1127 * np.log(1 + self.f0_min / 700) - self.f0_mel_max = 1127 * np.log(1 + self.f0_max / 700) - self.sr = 16000 - self.window = 160 - if index_rate != 0: - self.index = faiss.read_index(index_path) - # self.big_npy = np.load(npy_path) - self.big_npy = self.index.reconstruct_n(0, self.index.ntotal) - print("index search enabled") - self.index_rate = index_rate - model_path = hubert_path - print("load model(s) from {}".format(model_path)) - models, saved_cfg, task = checkpoint_utils.load_model_ensemble_and_task( - [model_path], - suffix="", - ) - self.model = models[0] - self.model = self.model.to(device) - if Config.is_half: - self.model = self.model.half() - else: - self.model = self.model.float() - self.model.eval() - cpt = torch.load(pth_path, map_location="cpu") - self.tgt_sr = cpt["config"][-1] - cpt["config"][-3] = cpt["weight"]["emb_g.weight"].shape[0] # n_spk - self.if_f0 = cpt.get("f0", 1) - self.version = cpt.get("version", "v1") - if self.version == "v1": - if self.if_f0 == 1: - self.net_g = SynthesizerTrnMs256NSFsid( - *cpt["config"], is_half=Config.is_half - ) - else: - self.net_g = SynthesizerTrnMs256NSFsid_nono(*cpt["config"]) - elif self.version == "v2": - if self.if_f0 == 1: - self.net_g = SynthesizerTrnMs768NSFsid( - *cpt["config"], is_half=Config.is_half - ) - else: - self.net_g = SynthesizerTrnMs768NSFsid_nono(*cpt["config"]) - del self.net_g.enc_q - print(self.net_g.load_state_dict(cpt["weight"], strict=False)) - self.net_g.eval().to(device) - if Config.is_half: - self.net_g = self.net_g.half() - else: - self.net_g = self.net_g.float() - except: - print(traceback.format_exc()) - - def get_f0(self, x, f0_up_key, inp_f0=None): - x_pad = 1 - f0_min = 50 - f0_max = 1100 - f0_mel_min = 1127 * np.log(1 + f0_min / 700) - f0_mel_max = 1127 * np.log(1 + f0_max / 700) - f0, t = pyworld.harvest( - x.astype(np.double), - fs=self.sr, - f0_ceil=f0_max, - f0_floor=f0_min, - frame_period=10, - ) - f0 = pyworld.stonemask(x.astype(np.double), f0, t, self.sr) - f0 = signal.medfilt(f0, 3) - f0 *= pow(2, f0_up_key / 12) - # with open("test.txt","w")as f:f.write("\n".join([str(i)for i in f0.tolist()])) - tf0 = self.sr // self.window # 每秒f0点数 - if inp_f0 is not None: - delta_t = np.round( - (inp_f0[:, 0].max() - inp_f0[:, 0].min()) * tf0 + 1 - ).astype("int16") - replace_f0 = np.interp( - list(range(delta_t)), inp_f0[:, 0] * 100, inp_f0[:, 1] - ) - shape = f0[x_pad * tf0 : x_pad * tf0 + len(replace_f0)].shape[0] - f0[x_pad * tf0 : x_pad * tf0 + len(replace_f0)] = replace_f0[:shape] - # with open("test_opt.txt","w")as f:f.write("\n".join([str(i)for i in f0.tolist()])) - f0bak = f0.copy() - f0_mel = 1127 * np.log(1 + f0 / 700) - f0_mel[f0_mel > 0] = (f0_mel[f0_mel > 0] - f0_mel_min) * 254 / ( - f0_mel_max - f0_mel_min - ) + 1 - f0_mel[f0_mel <= 1] = 1 - f0_mel[f0_mel > 255] = 255 - f0_coarse = np.rint(f0_mel).astype(np.int) - return f0_coarse, f0bak # 1-0 - - def infer(self, feats: torch.Tensor) -> np.ndarray: - """ - 推理函数 - """ - audio = feats.clone().cpu().numpy() - assert feats.dim() == 1, feats.dim() - feats = feats.view(1, -1) - padding_mask = torch.BoolTensor(feats.shape).fill_(False) - if Config.is_half: - feats = feats.half() - else: - feats = feats.float() - inputs = { - "source": feats.to(device), - "padding_mask": padding_mask.to(device), - "output_layer": 9 if self.version == "v1" else 12, - } - torch.cuda.synchronize() - with torch.no_grad(): - logits = self.model.extract_features(**inputs) - feats = ( - self.model.final_proj(logits[0]) if self.version == "v1" else logits[0] - ) - - ####索引优化 - try: - if ( - hasattr(self, "index") - and hasattr(self, "big_npy") - and self.index_rate != 0 - ): - npy = feats[0].cpu().numpy().astype("float32") - score, ix = self.index.search(npy, k=8) - weight = np.square(1 / score) - weight /= weight.sum(axis=1, keepdims=True) - npy = np.sum(self.big_npy[ix] * np.expand_dims(weight, axis=2), axis=1) - if Config.is_half: - npy = npy.astype("float16") - feats = ( - torch.from_numpy(npy).unsqueeze(0).to(device) * self.index_rate - + (1 - self.index_rate) * feats - ) - else: - print("index search FAIL or disabled") - except: - traceback.print_exc() - print("index search FAIL") - feats = F.interpolate(feats.permute(0, 2, 1), scale_factor=2).permute(0, 2, 1) - torch.cuda.synchronize() - print(feats.shape) - if self.if_f0 == 1: - pitch, pitchf = self.get_f0(audio, self.f0_up_key) - p_len = min(feats.shape[1], 13000, pitch.shape[0]) # 太大了爆显存 - else: - pitch, pitchf = None, None - p_len = min(feats.shape[1], 13000) # 太大了爆显存 - torch.cuda.synchronize() - # print(feats.shape,pitch.shape) - feats = feats[:, :p_len, :] - if self.if_f0 == 1: - pitch = pitch[:p_len] - pitchf = pitchf[:p_len] - pitch = torch.LongTensor(pitch).unsqueeze(0).to(device) - pitchf = torch.FloatTensor(pitchf).unsqueeze(0).to(device) - p_len = torch.LongTensor([p_len]).to(device) - ii = 0 # sid - sid = torch.LongTensor([ii]).to(device) - with torch.no_grad(): - if self.if_f0 == 1: - infered_audio = ( - self.net_g.infer(feats, p_len, pitch, pitchf, sid)[0][0, 0] - .data.cpu() - .float() - ) - else: - infered_audio = ( - self.net_g.infer(feats, p_len, sid)[0][0, 0].data.cpu().float() - ) - torch.cuda.synchronize() - return infered_audio - - -class GUIConfig: - def __init__(self) -> None: - self.hubert_path: str = "" - self.pth_path: str = "" - self.index_path: str = "" - self.npy_path: str = "" - self.pitch: int = 12 - self.samplerate: int = 44100 - self.block_time: float = 1.0 # s - self.buffer_num: int = 1 - self.threhold: int = -30 - self.crossfade_time: float = 0.08 - self.extra_time: float = 0.04 - self.I_noise_reduce = False - self.O_noise_reduce = False - self.index_rate = 0.3 - - -class GUI: - def __init__(self) -> None: - self.config = GUIConfig() - self.flag_vc = False - - self.launcher() - - def load(self): - ( - input_devices, - output_devices, - input_devices_indices, - output_devices_indices, - ) = self.get_devices() - try: - with open("values1.json", "r") as j: - data = json.load(j) - except: - with open("values1.json", "w") as j: - data = { - "pth_path": "", - "index_path": "", - "sg_input_device": input_devices[ - input_devices_indices.index(sd.default.device[0]) - ], - "sg_output_device": output_devices[ - output_devices_indices.index(sd.default.device[1]) - ], - "threhold": "-45", - "pitch": "0", - "index_rate": "0", - "block_time": "1", - "crossfade_length": "0.04", - "extra_time": "1", - } - return data - - def launcher(self): - data = self.load() - sg.theme("LightBlue3") - input_devices, output_devices, _, _ = self.get_devices() - layout = [ - [ - sg.Frame( - title=i18n("Load model"), - layout=[ - [ - sg.Input( - default_text="hubert_base.pt", - key="hubert_path", - disabled=True, - ), - sg.FileBrowse( - i18n("Hubert Model"), - initial_folder=os.path.join(os.getcwd()), - file_types=(("pt files", "*.pt"),), - ), - ], - [ - sg.Input( - default_text=data.get("pth_path", ""), - key="pth_path", - ), - sg.FileBrowse( - i18n("Select the .pth file"), - initial_folder=os.path.join(os.getcwd(), "weights"), - file_types=(("weight files", "*.pth"),), - ), - ], - [ - sg.Input( - default_text=data.get("index_path", ""), - key="index_path", - ), - sg.FileBrowse( - i18n("Select the .index file"), - initial_folder=os.path.join(os.getcwd(), "logs"), - file_types=(("index files", "*.index"),), - ), - ], - [ - sg.Input( - default_text="你不需要填写这个You don't need write this.", - key="npy_path", - disabled=True, - ), - sg.FileBrowse( - i18n("Select the .npy file"), - initial_folder=os.path.join(os.getcwd(), "logs"), - file_types=(("feature files", "*.npy"),), - ), - ], - ], - ) - ], - [ - sg.Frame( - layout=[ - [ - sg.Text(i18n("Input device")), - sg.Combo( - input_devices, - key="sg_input_device", - default_value=data.get("sg_input_device", ""), - ), - ], - [ - sg.Text(i18n("Output device")), - sg.Combo( - output_devices, - key="sg_output_device", - default_value=data.get("sg_output_device", ""), - ), - ], - ], - title=i18n("Audio device (please use the same type of driver)"), - ) - ], - [ - sg.Frame( - layout=[ - [ - sg.Text(i18n("Response threshold")), - sg.Slider( - range=(-60, 0), - key="threhold", - resolution=1, - orientation="h", - default_value=data.get("threhold", ""), - ), - ], - [ - sg.Text(i18n("Pitch settings")), - sg.Slider( - range=(-24, 24), - key="pitch", - resolution=1, - orientation="h", - default_value=data.get("pitch", ""), - ), - ], - [ - sg.Text(i18n("Index Rate")), - sg.Slider( - range=(0.0, 1.0), - key="index_rate", - resolution=0.01, - orientation="h", - default_value=data.get("index_rate", ""), - ), - ], - ], - title=i18n("General settings"), - ), - sg.Frame( - layout=[ - [ - sg.Text(i18n("Sample length")), - sg.Slider( - range=(0.1, 3.0), - key="block_time", - resolution=0.1, - orientation="h", - default_value=data.get("block_time", ""), - ), - ], - [ - sg.Text(i18n("Fade length")), - sg.Slider( - range=(0.01, 0.15), - key="crossfade_length", - resolution=0.01, - orientation="h", - default_value=data.get("crossfade_length", ""), - ), - ], - [ - sg.Text(i18n("Extra推理时长")), - sg.Slider( - range=(0.05, 3.00), - key="extra_time", - resolution=0.01, - orientation="h", - default_value=data.get("extra_time", ""), - ), - ], - [ - sg.Checkbox(i18n("Input noise reduction"), key="I_noise_reduce"), - sg.Checkbox(i18n("Output noise reduction"), key="O_noise_reduce"), - ], - ], - title=i18n("Performance settings"), - ), - ], - [ - sg.Button(i18n("开始音频Convert"), key="start_vc"), - sg.Button(i18n("停止音频Convert"), key="stop_vc"), - sg.Text(i18n("Inference time (ms):")), - sg.Text("0", key="infer_time"), - ], - ] - self.window = sg.Window("RVC - GUI", layout=layout) - self.event_handler() - - def event_handler(self): - while True: - event, values = self.window.read() - if event == sg.WINDOW_CLOSED: - self.flag_vc = False - exit() - if event == "start_vc" and self.flag_vc == False: - if self.set_values(values) == True: - print("using_cuda:" + str(torch.cuda.is_available())) - self.start_vc() - settings = { - "pth_path": values["pth_path"], - "index_path": values["index_path"], - "sg_input_device": values["sg_input_device"], - "sg_output_device": values["sg_output_device"], - "threhold": values["threhold"], - "pitch": values["pitch"], - "index_rate": values["index_rate"], - "block_time": values["block_time"], - "crossfade_length": values["crossfade_length"], - "extra_time": values["extra_time"], - } - with open("values1.json", "w") as j: - json.dump(settings, j) - if event == "stop_vc" and self.flag_vc == True: - self.flag_vc = False - - def set_values(self, values): - if len(values["pth_path"].strip()) == 0: - sg.popup(i18n("Select the pth file")) - return False - if len(values["index_path"].strip()) == 0: - sg.popup(i18n("Select the index file")) - return False - pattern = re.compile("[^\x00-\x7F]+") - if pattern.findall(values["hubert_path"]): - sg.popup(i18n("The hubert model path must not contain Chinese characters")) - return False - if pattern.findall(values["pth_path"]): - sg.popup(i18n("The pth file path must not contain Chinese characters.")) - return False - if pattern.findall(values["index_path"]): - sg.popup(i18n("The index file path must not contain Chinese characters.")) - return False - self.set_devices(values["sg_input_device"], values["sg_output_device"]) - self.config.hubert_path = os.path.join(current_dir, "hubert_base.pt") - self.config.pth_path = values["pth_path"] - self.config.index_path = values["index_path"] - self.config.npy_path = values["npy_path"] - self.config.threhold = values["threhold"] - self.config.pitch = values["pitch"] - self.config.block_time = values["block_time"] - self.config.crossfade_time = values["crossfade_length"] - self.config.extra_time = values["extra_time"] - self.config.I_noise_reduce = values["I_noise_reduce"] - self.config.O_noise_reduce = values["O_noise_reduce"] - self.config.index_rate = values["index_rate"] - return True - - def start_vc(self): - torch.cuda.empty_cache() - self.flag_vc = True - self.block_frame = int(self.config.block_time * self.config.samplerate) - self.crossfade_frame = int(self.config.crossfade_time * self.config.samplerate) - self.sola_search_frame = int(0.012 * self.config.samplerate) - self.delay_frame = int(0.01 * self.config.samplerate) # 往前预留0.02s - self.extra_frame = int(self.config.extra_time * self.config.samplerate) - self.rvc = None - self.rvc = RVC( - self.config.pitch, - self.config.hubert_path, - self.config.pth_path, - self.config.index_path, - self.config.npy_path, - self.config.index_rate, - ) - self.input_wav: np.ndarray = np.zeros( - self.extra_frame - + self.crossfade_frame - + self.sola_search_frame - + self.block_frame, - dtype="float32", - ) - self.output_wav: torch.Tensor = torch.zeros( - self.block_frame, device=device, dtype=torch.float32 - ) - self.sola_buffer: torch.Tensor = torch.zeros( - self.crossfade_frame, device=device, dtype=torch.float32 - ) - self.fade_in_window: torch.Tensor = torch.linspace( - 0.0, 1.0, steps=self.crossfade_frame, device=device, dtype=torch.float32 - ) - self.fade_out_window: torch.Tensor = 1 - self.fade_in_window - self.resampler1 = tat.Resample( - orig_freq=self.config.samplerate, new_freq=16000, dtype=torch.float32 - ) - self.resampler2 = tat.Resample( - orig_freq=self.rvc.tgt_sr, - new_freq=self.config.samplerate, - dtype=torch.float32, - ) - thread_vc = threading.Thread(target=self.soundinput) - thread_vc.start() - - def soundinput(self): - """ - 接受音频输入 - """ - with sd.Stream( - channels=2, - callback=self.audio_callback, - blocksize=self.block_frame, - samplerate=self.config.samplerate, - dtype="float32", - ): - while self.flag_vc: - time.sleep(self.config.block_time) - print("Audio block passed.") - print("ENDing VC") - - def audio_callback( - self, indata: np.ndarray, outdata: np.ndarray, frames, times, status - ): - """ - 音频处理 - """ - start_time = time.perf_counter() - indata = librosa.to_mono(indata.T) - if self.config.I_noise_reduce: - indata[:] = nr.reduce_noise(y=indata, sr=self.config.samplerate) - - """noise gate""" - frame_length = 2048 - hop_length = 1024 - rms = librosa.feature.rms( - y=indata, frame_length=frame_length, hop_length=hop_length - ) - db_threhold = librosa.amplitude_to_db(rms, ref=1.0)[0] < self.config.threhold - # print(rms.shape,db.shape,db) - for i in range(db_threhold.shape[0]): - if db_threhold[i]: - indata[i * hop_length : (i + 1) * hop_length] = 0 - self.input_wav[:] = np.append(self.input_wav[self.block_frame :], indata) - - # infer - print("input_wav:" + str(self.input_wav.shape)) - # print('infered_wav:'+str(infer_wav.shape)) - infer_wav: torch.Tensor = self.resampler2( - self.rvc.infer(self.resampler1(torch.from_numpy(self.input_wav))) - )[-self.crossfade_frame - self.sola_search_frame - self.block_frame :].to( - device - ) - print("infer_wav:" + str(infer_wav.shape)) - - # SOLA algorithm from https://github.com/yxlllc/DDSP-SVC - cor_nom = F.conv1d( - infer_wav[None, None, : self.crossfade_frame + self.sola_search_frame], - self.sola_buffer[None, None, :], - ) - cor_den = torch.sqrt( - F.conv1d( - infer_wav[None, None, : self.crossfade_frame + self.sola_search_frame] - ** 2, - torch.ones(1, 1, self.crossfade_frame, device=device), - ) - + 1e-8 - ) - sola_offset = torch.argmax(cor_nom[0, 0] / cor_den[0, 0]) - print("sola offset: " + str(int(sola_offset))) - - # crossfade - self.output_wav[:] = infer_wav[sola_offset : sola_offset + self.block_frame] - self.output_wav[: self.crossfade_frame] *= self.fade_in_window - self.output_wav[: self.crossfade_frame] += self.sola_buffer[:] - if sola_offset < self.sola_search_frame: - self.sola_buffer[:] = ( - infer_wav[ - -self.sola_search_frame - - self.crossfade_frame - + sola_offset : -self.sola_search_frame - + sola_offset - ] - * self.fade_out_window - ) - else: - self.sola_buffer[:] = ( - infer_wav[-self.crossfade_frame :] * self.fade_out_window - ) - - if self.config.O_noise_reduce: - outdata[:] = np.tile( - nr.reduce_noise( - y=self.output_wav[:].cpu().numpy(), sr=self.config.samplerate - ), - (2, 1), - ).T - else: - outdata[:] = self.output_wav[:].repeat(2, 1).t().cpu().numpy() - total_time = time.perf_counter() - start_time - self.window["infer_time"].update(int(total_time * 1000)) - print("infer time:" + str(total_time)) - - def get_devices(self, update: bool = True): - """获取设备列表""" - if update: - sd._terminate() - sd._initialize() - devices = sd.query_devices() - hostapis = sd.query_hostapis() - for hostapi in hostapis: - for device_idx in hostapi["devices"]: - devices[device_idx]["hostapi_name"] = hostapi["name"] - input_devices = [ - f"{d['name']} ({d['hostapi_name']})" - for d in devices - if d["max_input_channels"] > 0 - ] - output_devices = [ - f"{d['name']} ({d['hostapi_name']})" - for d in devices - if d["max_output_channels"] > 0 - ] - input_devices_indices = [ - d["index"] if "index" in d else d["name"] - for d in devices - if d["max_input_channels"] > 0 - ] - output_devices_indices = [ - d["index"] if "index" in d else d["name"] - for d in devices - if d["max_output_channels"] > 0 - ] - return ( - input_devices, - output_devices, - input_devices_indices, - output_devices_indices, - ) - - def set_devices(self, input_device, output_device): - """设置输出设备""" - ( - input_devices, - output_devices, - input_device_indices, - output_device_indices, - ) = self.get_devices() - sd.default.device[0] = input_device_indices[input_devices.index(input_device)] - sd.default.device[1] = output_device_indices[ - output_devices.index(output_device) - ] - print("input device:" + str(sd.default.device[0]) + ":" + str(input_device)) - print("output device:" + str(sd.default.device[1]) + ":" + str(output_device)) - - -gui = GUI() diff --git a/i18n.py b/i18n.py deleted file mode 100644 index b958c6f7244c4b920e097a9a9e67e81990d03f59..0000000000000000000000000000000000000000 --- a/i18n.py +++ /dev/null @@ -1,43 +0,0 @@ -import json - -def load_language_list(language): - try: - with open(f"./i18n/locale/{language}.json", "r", encoding="utf-8") as f: - return json.load(f) - except FileNotFoundError: - raise FileNotFoundError( - f"Failed to load language file for {language}. Check if the correct .json file exists." - ) - - -class I18nAuto: - """ - A class used for internationalization using JSON language files. - - Examples - -------- - >>> i18n = I18nAuto('en_US') - >>> i18n.print() - Using Language: en_US - """ - def __init__(self, language=None): - from locale import getdefaultlocale - language = language or getdefaultlocale()[0] - if not self._language_exists(language): - language = "en_US" - - self.language_map = load_language_list(language) - self.language = language - - @staticmethod - def _language_exists(language): - from os.path import exists - return exists(f"./i18n/locale/{language}.json") - - def __call__(self, key): - """Returns the translation of the given key if it exists, else returns the key itself.""" - return self.language_map.get(key, key) - - def print(self): - """Prints the language currently in use.""" - print(f"Using Language: {self.language}") \ No newline at end of file diff --git a/i18n/locale/ar_AR.json b/i18n/locale/ar_AR.json deleted file mode 100644 index c54cb50c0ae1b7100a96acadf93f3320113ea8f2..0000000000000000000000000000000000000000 --- a/i18n/locale/ar_AR.json +++ /dev/null @@ -1,247 +0,0 @@ -{ - "Unfortunately, there is no compatible GPU available to support your training.": "لسوء الحظ، لا تتوفر وحدة معالجة رسومات متوافقة لدعم تدريبك.", - "Yes": "نعم", - "Select your dataset:": "حدد مجموعة البيانات الخاصة بك.", - "Update list": "قائمة التحديث.", - "Download Model": "تحميل الموديل", - "Download Backup": "تحميل النسخ الاحتياطي", - "Download Dataset": "تحميل مجموعة البيانات", - "Download": "تحميل", - "Url:": "عنوان URL:", - "Build the index before saving.": "قم ببناء الفهرس قبل الحفظ.", - "Save your model once the training ends.": "احفظ النموذج الخاص بك بمجرد انتهاء التدريب.", - "Save type": "حفظ النوع", - "Save model": "حفظ النموذج", - "Choose the method": "اختر الطريقة", - "Save all": "احفظ الكل", - "Save D and G": "احفظ D وG", - "Save voice": "حفظ الصوت", - "Downloading the file: ": "تنزيل الملف:", - "Stop training": "توقف عن التدريب", - "Too many users have recently viewed or downloaded this file": "لقد قام عدد كبير جدًا من المستخدمين مؤخرًا بعرض هذا الملف أو تنزيله", - "Cannot get file from this private link": "لا يمكن الحصول على الملف من هذا الرابط الخاص", - "Full download": "تحميل كامل", - "An error occurred downloading": "حدث خطأ أثناء التنزيل", - "Model saved successfully": "تم حفظ النموذج بنجاح", - "Saving the model...": "جارٍ حفظ النموذج...", - "Saved without index...": "تم الحفظ بدون فهرس...", - "model_name": "اسم النموذج", - "Saved without inference model...": "تم الحفظ بدون نموذج الاستدلال...", - "An error occurred saving the model": "حدث خطأ أثناء حفظ النموذج", - "The model you want to save does not exist, be sure to enter the correct name.": "النموذج الذي تريد حفظه غير موجود، تأكد من إدخال الاسم الصحيح.", - "The file could not be downloaded.": "لا يمكن تحميل الملف.", - "Unzip error.": "خطأ في فك الضغط.", - "Path to your added.index file (if it didn't automatically find it)": "المسار إلى ملف add.index (إذا لم يتم العثور عليه تلقائيًا)", - "It has been downloaded successfully.": "لقد تم تحميله بنجاح.", - "Proceeding with the extraction...": "المضي قدما في عملية الاستخراج...", - "The Backup has been uploaded successfully.": "تم تحميل النسخة الاحتياطية بنجاح.", - "The Dataset has been loaded successfully.": "تم تحميل مجموعة البيانات بنجاح.", - "The Model has been loaded successfully.": "تم تحميل النموذج بنجاح.", - "It is used to download your inference models.": "يتم استخدامه لتنزيل نماذج الاستدلال الخاصة بك.", - "It is used to download your training backups.": "يتم استخدامه لتنزيل النسخ الاحتياطية للتدريب.", - "Download the dataset with the audios in a compatible format (.wav/.flac) to train your model.": "قم بتنزيل مجموعة البيانات مع التسجيلات الصوتية بتنسيق متوافق (.wav/.flac) لتدريب النموذج الخاص بك.", - "No relevant file was found to upload.": "لم يتم العثور على ملف ذي صلة للتحميل.", - "The model works for inference, and has the .index file.": "يعمل النموذج من أجل الاستدلال، ويحتوي على ملف .index.", - "The model works for inference, but it doesn't have the .index file.": "يعمل النموذج من أجل الاستدلال، لكنه لا يحتوي على ملف .index.", - "This may take a few minutes, please wait...": "قد يستغرق ذلك بضع دقائق، يرجى الانتظار...", - "Resources": "موارد", - "Step 1: Processing data": "الخطوة 1: معالجة البيانات", - "Step 2: Skipping pitch extraction": "الخطوة 2 أ: تخطي استخراج الملعب", - "Step 3: Extracting features": "الخطوة 2 ب: استخراج الميزات", - "Step 4: Model training started": "الخطوة 3 أ: بدأ التدريب النموذجي", - "Step 5: Export lowest points on a graph of the model": "الخطوة 4: تصدير أدنى النقاط على الرسم البياني للنموذج", - "Training is done, check train.log": "تم الانتهاء من التدريب، قم بزيارة Train.log", - "All processes have been completed!": "تم الانتهاء من جميع العمليات!", - "Model Inference": "الاستدلال النموذجي", - "Inferencing voice:": "الاستدلال الصوتي:", - "Model_Name": "اسم النموذج", - "Dataset_Name": "اسم مجموعة البيانات", - "Whether the model has pitch guidance.": "ما إذا كان النموذج يحتوي على توجيهات في الملعب.", - "Whether to save only the latest .ckpt file to save hard drive space": "ما إذا كان سيتم حفظ أحدث ملف .ckpt فقط لتوفير مساحة على القرص الصلب", - "Cache all training sets to GPU memory. Caching small datasets (less than 10 minutes) can speed up training": "قم بتخزين جميع مجموعات التدريب مؤقتًا في ذاكرة GPU. يمكن أن يؤدي تخزين مجموعات البيانات الصغيرة مؤقتًا (أقل من 10 دقائق) إلى تسريع عملية التدريب", - "Save a small final model to the 'weights' folder at each save point": "احفظ نموذجًا نهائيًا صغيرًا في مجلد \"الأوزان\" عند كل نقطة حفظ", - "Refresh": "تحديث قائمة الصوت ومسار الفهرس والملفات الصوتية", - "Unload voice to save GPU memory": "قم بإلغاء تحميل الصوت لحفظ ذاكرة GPU:", - "Select Speaker/Singer ID:": "حدد معرف المتحدث/المغني:", - "Recommended +12 key for male to female conversion, and -12 key for female to male conversion. If the sound range goes too far and the voice is distorted, you can also adjust it to the appropriate range by yourself.": "يوصى باستخدام مفتاح +12 للتحويل من ذكر إلى أنثى، ومفتاح -12 للتحويل من أنثى إلى ذكر. إذا تجاوز نطاق الصوت كثيرًا وكان الصوت مشوهًا، فيمكنك أيضًا ضبطه على النطاق المناسب بنفسك.", - "Transpose (integer, number Fof semitones, raise by an octave: 12, lower by an octave: -12):": "تبديل الموضع (عدد صحيح، عدد نصف النغمات، رفع بمقدار أوكتاف: 12، خفض بمقدار أوكتاف: -12):", - "Enter the path of the audio file to be processed (default is the correct format example):": "أدخل مسار الملف الصوتي المراد معالجته (الافتراضي هو مثال التنسيق الصحيح):", - "Select the pitch extraction algorithm:": "حدد خوارزمية استخراج الملعب:", - "Mangio-Crepe Hop Length (Only applies to mangio-crepe): Hop length refers to the time it takes for the speaker to jump to a dramatic pitch. Lower hop lengths take more time to infer but are more pitch accurate.": "طول قفزة المانجيو-كريب (ينطبق فقط على كريب المانجيو): يشير طول القفزة إلى الوقت الذي يستغرقه المتحدث للانتقال إلى طبقة الصوت الدرامية. يستغرق استنتاج أطوال القفزات المنخفضة وقتًا أطول ولكنها أكثر دقة في درجة الصوت.", - "Feature search dataset file path": "مسار ملف مجموعة بيانات البحث عن المعالم", - "If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness.": "إذا كان > = 3: قم بتطبيق التصفية المتوسطة على نتائج العرض التقديمي المحصودة. تمثل القيمة نصف قطر المرشح ويمكن أن تقلل من التنفس.", - "Path to the feature index file. Leave blank to use the selected result from the dropdown:": "المسار إلى ملف فهرس الميزات. اتركه فارغًا لاستخدام النتيجة المحددة من القائمة المنسدلة:", - "Auto-detect index path and select from the dropdown:": "الكشف التلقائي عن مسار الفهرس والاختيار من القائمة المنسدلة", - "Path to feature file:": "المسار إلى ملف الميزة:", - "Search feature ratio:": "نسبة ميزة البحث:", - "Resample the output audio in post-processing to the final sample rate. Set to 0 for no resampling:": "قم بإعادة تشكيل الصوت الناتج في مرحلة ما بعد المعالجة إلى معدل العينة النهائي. اضبط على 0 لعدم إعادة التشكيل:", - "Use the volume envelope of the input to replace or mix with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is used:": "استخدم مظروف حجم الإدخال لاستبدال أو مزج مظروف حجم الإخراج. كلما اقتربت النسبة من 1، زاد استخدام مظروف الإخراج:", - "Protect voiceless consonants and breath sounds to prevent artifacts such as tearing in electronic music. Set to 0.5 to disable. Decrease the value to increase protection, but it may reduce indexing accuracy:": "قم بحماية الحروف الساكنة وأصوات التنفس التي لا صوت لها لمنع المؤثرات مثل تمزيق الموسيقى الإلكترونية. اضبط على 0.5 للتعطيل. قم بتقليل القيمة لزيادة الحماية، ولكنه قد يقلل من دقة الفهرسة:", - "F0 curve file (optional). One pitch per line. Replaces the default F0 and pitch modulation:": "ملف منحنى F0 (اختياري). خطوة واحدة لكل سطر. يستبدل الإعداد الافتراضي F0 وتعديل درجة الصوت:", - "Convert": "يتحول", - "Output information:": "معلومات الإخراج", - "Export audio (click on the three dots in the lower right corner to download)": "تصدير الصوت (انقر على النقاط الثلاث في الزاوية اليمنى السفلية للتنزيل)", - "Batch conversion. Enter the folder containing the audio files to be converted or upload multiple audio files. The converted audio will be output in the specified folder (default: 'opt').": "تحويل دفعة. أدخل المجلد الذي يحتوي على الملفات الصوتية المراد تحويلها أو قم بتحميل ملفات صوتية متعددة. سيتم إخراج الصوت المحول في المجلد المحدد (الافتراضي: \"اختياري\").", - "Specify output folder:": "تحديد مجلد الإخراج:", - "Enter the path of the audio folder to be processed (copy it from the address bar of the file manager):": "أدخل مسار مجلد الصوت المراد معالجته (انسخه من شريط العناوين الخاص بمدير الملفات):", - "You can also input audio files in batches. Choose one of the two options. Priority is given to reading from the folder.": "يمكنك أيضًا إدخال الملفات الصوتية على دفعات. اختر أحد الخيارين. تعطى الأولوية للقراءة من المجلد.", - "Export file format": "تصدير تنسيق الملف", - "UVR5": "الأشعة فوق البنفسجية5", - "Enter the path of the audio folder to be processed:": "أدخل مسار مجلد الصوت المراد معالجته:", - "Model": "نموذج", - "Vocal Extraction Aggressive": "استخراج الصوتية العدوانية", - "Specify the output folder for vocals:": "حدد مجلد الإخراج للغناء:", - "Specify the output folder for accompaniment:": "حدد مجلد الإخراج للمرافقة:", - "Train": "يدرب", - "Enter the model name:": "أدخل اسم النموذج:", - "Target sample rate:": "معدل العينة المستهدف:", - "Whether the model has pitch guidance (required for singing, optional for speech):": "ما إذا كان النموذج يحتوي على إرشادات لطبقة الصوت (مطلوبة للغناء، واختيارية للكلام):", - "Version": "إصدار", - "Number of CPU processes:": "عدد عمليات وحدة المعالجة المركزية المستخدمة لاستخراج الملعب ومعالجة البيانات:", - "Enter the path of the training folder:": "أدخل مسار مجلد التدريب:", - "Specify the model ID:": "يرجى تحديد معرف النموذج:", - "Auto detect audio path and select from the dropdown:": "الكشف التلقائي عن مسار الصوت والاختيار من القائمة المنسدلة:", - "Add audio's name to the path to the audio file to be processed (default is the correct format example) Remove the path to use an audio from the dropdown list:": "أضف اسم الصوت إلى المسار إلى الملف الصوتي المراد معالجته (الافتراضي هو مثال التنسيق الصحيح) قم بإزالة المسار لاستخدام الصوت من القائمة المنسدلة:", - "Advanced Settings": "إعدادات متقدمة", - "Settings": "إعدادات", - "Status:": "حالة", - "Process data": "معالجة البيانات", - "Drag your audio here:": "اسحب الصوت الخاص بك هنا واضغط على زر التحديث", - "Or record an audio:": "أو تسجيل الصوت.", - "Formant shift inference audio": "تحويل صيغة الاستدلال الصوتي", - "Used for male to female and vice-versa conversions": "يستخدم للتحويل من ذكر إلى أنثى والعكس", - "Provide the GPU index(es) separated by '-', like 0-1-2 for using GPUs 0, 1, and 2:": "يرجى تقديم فهرس (فهارس) وحدة معالجة الرسومات مفصولة بـ \"-\"، مثل 0-1-2 لاستخدام وحدات معالجة الرسومات 0 و1 و2:", - "GPU Information:": "معلومات وحدة معالجة الرسومات", - "Feature extraction": "ميزة استخراج", - "Save frequency:": "حفظ التردد:", - "Training epochs:": "فترات التدريب:", - "Batch size per GPU:": "حجم الدفعة لكل GPU:", - "Save only the latest '.ckpt' file to save disk space:": "احفظ فقط أحدث ملف '.ckpt' لتوفير مساحة على القرص:", - "No": "لا", - "Save a small final model to the 'weights' folder at each save point:": "احفظ نموذجًا نهائيًا صغيرًا في مجلد \"الأوزان\" عند كل نقطة حفظ:", - "Load pre-trained base model G path:": "تحميل مسار G للنموذج الأساسي المُدرب مسبقًا:", - "Load pre-trained base model D path:": "تحميل المسار D للنموذج الأساسي المُدرب مسبقًا:", - "Train model": "نموذج القطار", - "Train feature index": "مؤشر ميزة القطار", - "One-click training": "التدريب بنقرة واحدة", - "Processing": "يعالج", - "Model fusion, can be used to test timbre fusion": "يمكن استخدام نموذج الاندماج لاختبار دمج الجرس", - "Path to Model A:": "المسار إلى النموذج أ:", - "Path to Model B:": "المسار إلى النموذج ب:", - "Weight for Model A:": "الوزن للنموذج أ:", - "Whether the model has pitch guidance:": "ما إذا كان النموذج يحتوي على توجيه الملعب:", - "Model information to be placed:": "معلومات النموذج المراد وضعها:", - "Model architecture version:": "نسخة البنية النموذجية:", - "Fusion": "انصهار", - "Modify model information": "تعديل معلومات النموذج", - "Path to Model:": "المسار إلى النموذج:", - "Model information to be modified:": "معلومات النموذج المراد تعديلها:", - "Save file name:": "حفظ اسم الملف:", - "Modify": "يُعدِّل", - "View model information": "عرض معلومات النموذج", - "View": "منظر", - "Model extraction": "استخراج النموذج (أدخل مسار نموذج الملف الكبير ضمن مجلد \"السجلات\"). يعد هذا مفيدًا إذا كنت تريد إيقاف التدريب في منتصف الطريق واستخراج ملف نموذج صغير وحفظه يدويًا، أو إذا كنت تريد اختبار نموذج متوسط:", - "Name:": "حفظ الاسم:", - "Whether the model has pitch guidance (1: yes, 0: no):": "ما إذا كان النموذج يحتوي على توجيه درجة الصوت (1: نعم، 0: لا):", - "Extract": "يستخرج", - "Export Onnx": "تصدير اونكس", - "RVC Model Path:": "مسار نموذج RVC:", - "Onnx Export Path:": "مسار تصدير Onnx:", - "MoeVS Model": "نموذج MoVS", - "Export Onnx Model": "تصدير نموذج Onnx", - "Load model": "نموذج التحميل", - "Hubert Model": "نموذج هيوبرت", - "Select the .pth file": "حدد ملف .pth", - "Select the .index file": "حدد ملف الفهرس", - "Select the .npy file": "حدد ملف .npy", - "Input device": "جهاز الإدخال", - "Output device": "جهاز إخراج", - "Audio device (please use the same type of driver)": "جهاز الصوت (يرجى استخدام نفس نوع برنامج التشغيل)", - "Response threshold": "عتبة الاستجابة", - "Pitch settings": "إعدادات الملعب", - "Whether to use note names instead of their hertz value. E.G. [C5, D6] instead of [523.25, 1174.66]Hz": "ما إذا كان سيتم استخدام أسماء الملاحظات بدلاً من قيمتها بالهيرتز. على سبيل المثال. [C5، D6] بدلاً من [523.25، 1174.66] هرتز", - "Index Rate": "معدل المؤشر", - "General settings": "الاعدادات العامة", - "Sample length": "طول العينة", - "Fade length": "طول التلاشي", - "Extra inference time": "وقت الاستدلال الإضافي", - "Input noise reduction": "تقليل ضوضاء الإدخال", - "Output noise reduction": "الحد من الضوضاء الناتج", - "Performance settings": "إعدادات الأداء", - "Start audio conversion": "ابدأ تحويل الصوت", - "Stop audio conversion": "إيقاف تحويل الصوت", - "Inference time (ms):": "وقت الاستدلال (مللي ثانية):", - "Select the pth file": "حدد ملف pth", - "Select the .index file:": "حدد ملف الفهرس", - "The hubert model path must not contain Chinese characters": "يجب ألا يحتوي مسار نموذج Hubert على أحرف صينية", - "The pth file path must not contain Chinese characters.": "يجب ألا يحتوي مسار الملف pth على أحرف صينية.", - "The index file path must not contain Chinese characters.": "يجب ألا يحتوي مسار ملف الفهرس على أحرف صينية.", - "Step algorithm": "خوارزمية الخطوة", - "Number of epoch processes": "عدد عمليات العصر", - "Lowest points export": "أدنى نقاط التصدير", - "How many lowest points to save:": "كم عدد أدنى النقاط للحفظ", - "Export lowest points of a model": "تصدير أدنى نقاط النموذج", - "Output models:": "نماذج الإخراج", - "Stats of selected models:": "إحصائيات النماذج المختارة", - "Custom f0 [Root pitch] File": "ملف f0 مخصص [درجة الجذر]", - "Min pitch:": "الملعب دقيقة", - "Specify minimal pitch for inference [HZ]": "تحديد الحد الأدنى من درجة الاستدلال [HZ]", - "Specify minimal pitch for inference [NOTE][OCTAVE]": "تحديد الحد الأدنى من درجة الصوت للاستدلال [ملاحظة] [أوكتاف]", - "Max pitch:": "ماكس الملعب", - "Specify max pitch for inference [HZ]": "تحديد أقصى درجة للاستدلال [HZ]", - "Specify max pitch for inference [NOTE][OCTAVE]": "تحديد أقصى درجة للاستدلال [ملاحظة] [أوكتاف]", - "Browse presets for formanting": "تصفح الإعدادات المسبقة للتشكيل", - "Presets are located in formantshiftcfg/ folder": "توجد الإعدادات المسبقة في المجلدformantshiftcfg/", - "Default value is 1.0": "القيمة الافتراضية هي 1.0", - "Quefrency for formant shifting": "التردد لتحويل الصياغة", - "Timbre for formant shifting": "Timbre لتحويل الصياغة", - "Apply": "يتقدم", - "Single": "أعزب", - "Batch": "حزمة", - "Separate YouTube tracks": "مسارات يوتيوب منفصلة", - "Download audio from a YouTube video and automatically separate the vocal and instrumental tracks": "قم بتنزيل الصوت من مقطع فيديو على YouTube وفصل المسارات الصوتية والمسارات الآلية تلقائيًا", - "Extra": "إضافي", - "Merge": "دمج", - "Merge your generated audios with the instrumental": "دمج الصوتيات التي تم إنشاؤها مع الآلات الموسيقية", - "Choose your instrumental:": "اختر آلتك الموسيقية", - "Choose the generated audio:": "اختر الصوت الذي تم إنشاؤه", - "Combine": "يجمع", - "Download and Separate": "تحميل وفصل", - "Enter the YouTube link:": "أدخل رابط اليوتيوب", - "This section contains some extra utilities that often may be in experimental phases": "يحتوي هذا القسم على بعض الأدوات المساعدة الإضافية التي غالبًا ما تكون في مراحل تجريبية", - "Merge Audios": "دمج صوتيات", - "Audio files have been moved to the 'audios' folder.": "تم نقل الملفات الصوتية إلى مجلد \"التسجيلات الصوتية\".", - "Downloading audio from the video...": "تحميل الصوت من الفيديو...", - "Audio downloaded!": "تحميل الصوت!", - "An error occurred:": "حدث خطأ:", - "Separating audio...": "فصل الصوت...", - "File moved successfully.": "تم نقل الملف بنجاح.", - "Finished!": "انتهى!", - "The source file does not exist.": "الملف المصدر غير موجود.", - "Error moving the file:": "خطأ في نقل الملف:", - "Downloading {name} from drive": "تنزيل {name} من محرك الأقراص", - "The attempt to download using Drive didn't work": "لم تنجح محاولة التنزيل باستخدام Drive", - "Error downloading the file: {str(e)}": "حدث خطأ أثناء تنزيل الملف: {str(e)}", - "Downloading {name} from mega": "تنزيل {name} من ميجا", - "Downloading {name} from basic url": "تنزيل {name} من عنوان url الأساسي", - "Download Audio": "تحميل الصوت", - "Download audios of any format for use in inference (recommended for mobile users).": "تنزيل صوتيات بأي تنسيق لاستخدامها في الاستدلال (موصى به لمستخدمي الأجهزة المحمولة)", - "Any ConnectionResetErrors post-conversion are irrelevant and purely visual; they can be ignored.\n": "تعتبر أي أخطاء في ConnectionResetErrors بعد التحويل غير ذات صلة ومرئية بحتة؛ يمكن تجاهلها.", - "Processed audio saved at: ": "تم حفظ الصوت المعالج في:", - "Conversion complete!": "اكتمل التحويل!", - "Reverb": "تردد", - "Compressor": "ضاغط", - "Noise Gate": "بوابة الضجيج", - "Volume": "مقدار", - "Drag the audio here and click the Refresh button": "اسحب الصوت هنا وانقر على زر التحديث", - "Select the generated audio": "حدد الصوت الذي تم إنشاؤه", - "Volume of the instrumental audio:": "حجم الصوت الآلي", - "Volume of the generated audio:": "حجم الصوت الذي تم إنشاؤه", - "### Add the effects": "### أضف التأثيرات", - "Starting audio conversion... (This might take a moment)": "بدء تحويل الصوت... (قد يستغرق ذلك بعض الوقت)", - "TTS Model:": "أصوات TTS", - "TTS": "TTS", - "TTS Method:": "طريقة TTS", - "Audio TTS:": "صوت TTS", - "Audio RVC:": "نموذج صوتي" -} diff --git a/i18n/locale/de_DE.json b/i18n/locale/de_DE.json deleted file mode 100644 index b83c2de56f93bb58ba2ab92e2887ee63835eeac8..0000000000000000000000000000000000000000 --- a/i18n/locale/de_DE.json +++ /dev/null @@ -1,252 +0,0 @@ -{ - "Unfortunately, there is no compatible GPU available to support your training.": "Leider steht keine kompatible GPU zur Unterstützung Ihres Trainings zur Verfügung.", - "Yes": "Ja", - "Select your dataset:": "Wählen Sie Ihren Datensatz:", - "Update list": "Liste aktualisieren", - "Download Model": "Modell herunterladen", - "Download Backup": "Backup herunterladen", - "Download Dataset": "Datensatz herunterladen", - "Download": "Download", - "Url:": "Url:", - "Build the index before saving.": "Erstellen Sie den Index vor dem Speichern.", - "Save your model once the training ends.": "Speichern Sie Ihr Modell, sobald das Training beendet ist.", - "Save type": "Speicherart", - "Save model": "Modell speichern", - "Choose the method": "Wählen Sie die Methode", - "Save all": "Speicher alle", - "Save D and G": "D. und G.", - "Save voice": "Stimme speichern", - "Downloading the file: ": "Datei Downloaden:", - "Stop training": "Beenden Sie das Training", - "Too many users have recently viewed or downloaded this file": "Zu viele Benutzer haben diese Datei kürzlich angesehen oder heruntergeladen", - "Cannot get file from this private link": "Datei kann nicht von diesem privaten Link abgerufen werden", - "Full download": "Vollständiger Download", - "An error occurred downloading": "Beim Herunterladen der Datei ist ein Fehler aufgetreten. ", - "Model saved successfully": "Modell erfolgreich gespeichert", - "Saving the model...": "Modell wird gespeichert...", - "Saved without index...": "Ohne Index gespeichert...", - "Saved without inference model...": "Ohne Inferenzmodell gespeichert...", - "An error occurred saving the model": "Beim Speichern des Modells ist ein Fehler aufgetreten", - "The model you want to save does not exist, be sure to enter the correct name.": "Das Modell, das Sie speichern möchten, existiert nicht, geben Sie den richtigen Namen ein.", - "The file could not be downloaded.": "Die Datei konnte nicht heruntergeladen werden", - "Unzip error.": "Unzip-Fehler.", - "Path to your added.index file (if it didn't automatically find it)": "Pfad zu Ihrer Datei added.index (falls diese nicht automatisch gefunden wurde)", - "It has been downloaded successfully.": "wurde erfolgreich heruntergeladen.", - "Proceeding with the extraction...": "Fahren Sie mit der Extraktion fort...", - "The Backup has been uploaded successfully.": "Das Backup wurde erfolgreich hochgeladen.", - "The Dataset has been loaded successfully.": "Der Datensatz wurde erfolgreich geladen.", - "The Model has been loaded successfully.": "Das Modell wurde erfolgreich geladen.", - "It is used to download your inference models.": "Es wird verwendet, um Ihre Inferenzmodelle herunterzuladen.", - "It is used to download your training backups.": "Es wird verwendet, um Ihre Trainings-Backups herunterzuladen.", - "Download the dataset with the audios in a compatible format (.wav/.flac) to train your model.": "Laden Sie den Datensatz mit den Audios in einem kompatiblen Format (.wav/.flac) herunter, um Ihr Modell zu trainieren.", - "No relevant file was found to upload.": "Keine relevante Datei zum Hochladen gefunden.", - "The model works for inference, and has the .index file.": "Das Modell funktioniert für Inferenz und hat eine .index Datei.", - "The model works for inference, but it doesn't have the .index file.": "Das Modell funktioniert für Inferenz, hat jedoch keine .index Datei.", - "This may take a few minutes, please wait...": "Es kann einige Minuten dauern, bitte warten.", - "Resources": "Ressourcen", - "Step 1: Processing data": "Schritt 1: Datenverarbeitung", - "Step 2: Skipping pitch extraction": "Schritt 2: Pitch-Extraktion", - "Step 3: Extracting features": "Schritt 3: Merkmale extrahieren", - "Step 4: Model training started": "Schritt 4: Modelltraining gestartet", - "Step 5: Export lowest points on a graph of the model": "Schritt 5: Exportieren Sie die niedrigsten Punkte in einem Diagramm des Modells", - "Training is done, check train.log": "Training ist abgeschlossen, überprüfen Sie train.log", - "All processes have been completed!": "Alle Prozesse sind abgeschlossen!", - "Model Inference": "Modell Inferenz", - "Inferencing voice:": "Inferenz Stimme:", - "Model_Name": "Model Name", - "Dataset_Name": "Name des Datensatzes", - "Whether the model has pitch guidance.": "Ob das Modell eine Tonhöhenführung hat.", - "Whether to save only the latest .ckpt file to save hard drive space": "Gibt an, ob nur die neueste .ckpt-Datei gespeichert werden soll, um Speicherplatz auf der Festplatte zu sparen", - "Cache all training sets to GPU memory. Caching small datasets (less than 10 minutes) can speed up training": "Alle Trainings-Sets im GPU-Speicher zwischenspeichern. Das Zwischenspeichern kleiner Datensätze (weniger als 10 Minuten) kann das Training beschleunigen", - "Save a small final model to the 'weights' folder at each save point": "Speichern Sie an jedem Speicherpunkt ein kleines endgültiges Modell im Ordner \"Weights\"", - "Refresh": "Stimmenliste, Indexpfad und Audiodateien aktualisieren", - "Unload voice to save GPU memory": "Stimme entladen, um GPU-Speicher zu sparen", - "Select Speaker/Singer ID:": "Lautsprecher-/Sänger-ID auswählen:", - "Recommended +12 key for male to female conversion, and -12 key for female to male conversion. If the sound range goes too far and the voice is distorted, you can also adjust it to the appropriate range by yourself.": "Empfohlen wird +12-Taste für die Umwandlung von Mann zu Frau und -12-Taste für die Umwandlung von Frau zu Mann. Wenn der Klangbereich zu weit geht und die Stimme verzerrt ist, können Sie ihn auch selbst auf den entsprechenden Bereich einstellen.", - "Transpose (integer, number Fof semitones, raise by an octave: 12, lower by an octave: -12):": "Transponieren (Ganzzahl, Anzahl der Halbtöne, um eine Oktave erhöhen: 12, um eine Oktave senken: -12):", - "Feature search database file path:": "Dateipfad der Funktionssuchdatenbank:", - "Enter the path of the audio file to be processed (default is the correct format example):": "Geben Sie den Pfad der zu verarbeitenden Audiodatei ein (Standard ist das richtige Formatbeispiel):", - "Select the pitch extraction algorithm:": "Wählen Sie den Pitch-Extraktionsalgorithmus:", - "Mangio-Crepe Hop Length (Only applies to mangio-crepe): Hop length refers to the time it takes for the speaker to jump to a dramatic pitch. Lower hop lengths take more time to infer but are more pitch accurate.": "Mangio-Crepe Hopfenlänge (Gilt nur für Mangio-Crepe): Die Hopfenlänge bezieht sich auf die Zeit, die der Sprecher benötigt, um zu einer dramatischen Tonhöhe zu springen. Niedrigere Hopfenlängen benötigen mehr Zeit zur Inferenz, sind aber genauer.", - "Feature search dataset file path": "Dateipfad für Feature-Suche-Datensatz", - "If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness.": "Wenn >=3: Wendet es die Medianfilterung auf die geernteten Pitch-Ergebnisse an. Der Wert stellt den Filterradius dar und kann die Atmungsaktivität reduzieren.", - "Path to the feature index file. Leave blank to use the selected result from the dropdown:": "Pfad zur Feature-Indexdatei. Leer lassen, um das ausgewählte Ergebnis aus der Dropdown-Liste zu verwenden:", - "Auto-detect index path and select from the dropdown:": "Indexpfad automatisch erkennen und aus dem Dropdown-Menü auswählen:", - "Path to feature file:": "Pfad zur Feature-Datei:", - "Search feature ratio:": "Verhältnis der Suchfunktionen:", - "Resample the output audio in post-processing to the final sample rate. Set to 0 for no resampling:": "Sample das ausgegebene Audio in der Nachbearbeitung auf die endgültige Samplerate zurück. Für kein Resampling auf 0 setzen:", - "Use the volume envelope of the input to replace or mix with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is used:": "Verwende die Volumenhüllkurve der Eingabe, um die Volumenhüllkurve der Ausgabe zu ersetzen oder mit ihr zu mischen. Je näher das Verhältnis bei 1 liegt, desto mehr wird die Ausgabehüllkurve verwendet:", - "Protect voiceless consonants and breath sounds to prevent artifacts such as tearing in electronic music. Set to 0.5 to disable. Decrease the value to increase protection, but it may reduce indexing accuracy:": "Schütze stimmlose Konsonanten und Atemgeräusche, um Artefakte wie das Reißen in elektronischer Musik zu verhindern. Zum Deaktivieren auf 0,5 setzen. Verringern Sie den Wert, um den Schutz zu erhöhen, aber es kann die Indexierungsgenauigkeit verringern:", - "F0 curve file (optional). One pitch per line. Replaces the default F0 and pitch modulation:": "F0-Kurvendatei (optional). Eine Tonhöhe pro Linie. Ersetzt die voreingestellte F0- und Tonhöhenmodulation:", - "Convert": "Konvertieren", - "Output information:": "Ausgangs informationen", - "Export audio (click on the three dots in the lower right corner to download)": "Audio exportieren (klicken Sie auf die drei Punkte in der unteren rechten Ecke, um sie herunterzuladen)", - "Batch conversion. Enter the folder containing the audio files to be converted or upload multiple audio files. The converted audio will be output in the specified folder (default: 'opt').": "Stapelkonvertierung. Geben Sie den Ordner mit den zu konvertierenden Audiodateien ein oder laden Sie mehrere Audiodateien hoch. Das konvertierte Audio wird im angegebenen Ordner ausgegeben (Standard: 'opt').", - "Specify output folder:": "Ausgabeordner festlegen:", - "Enter the path of the audio folder to be processed (copy it from the address bar of the file manager):": "Geben Sie den Pfad des zu verarbeitenden Audioordners ein (kopieren Sie ihn aus der Adressleiste des Dateimanagers):", - "You can also input audio files in batches. Choose one of the two options. Priority is given to reading from the folder.": "Sie können Audiodateien auch stapelweise eingeben. Wählen Sie eine der beiden Optionen. Das Lesen aus dem Ordner hat Vorrang.", - "Export file format:": "Export Dateiformat", - "UVR5": "UVR5", - "Enter the path of the audio folder to be processed:": "Geben Sie den Pfad des zu verarbeitenden Audioordners ein:", - "Model:": "Modell:", - "Vocal Extraction Aggressive": "Vokale Extraktion aggressiv", - "Specify the output folder for vocals:": "Geben Sie den Ausgabeordner für Vocals an:", - "Specify the output folder for accompaniment:": "Geben Sie den Ausgabeordner für die Begleitung an:", - "Train": "Trainieren", - "Enter the model name:": "Modellname eingeben", - "Target sample rate:": "Sample Rate Ziel:", - "Whether the model has pitch guidance (required for singing, optional for speech):": "Ob das Modell eine Tonhöhenführung hat (erforderlich für Gesang, optional für Sprache):", - "Version:": "Version:", - "Number of CPU processes:": "Anzahl der Prozesse,", - "Enter the path of the training folder:": "Geben Sie den Pfad des Trainingsordners ein:", - "Specify the model ID:": "Geben Sie die Modell-ID an:", - "Auto detect audio path and select from the dropdown:": "Audiopfad automatisch erkennen und aus der Dropdown-Liste auswählen:", - "Add audio's name to the path to the audio file to be processed (default is the correct format example) Remove the path to use an audio from the dropdown list:": "Fügen Sie dem Pfad zur zu verarbeitenden Audiodatei den Namen des Audios hinzu (Standard ist das richtige Formatbeispiel) Entfernen Sie den Pfad zur Verwendung eines Audios aus der Dropdown-Liste:", - "Advanced Settings": "Erweiterte Einstellungen", - "Settings": "Einstellungen", - "Status:": "Status:", - "Process data": "Betriebsdaten", - "Drag your audio here:": "Ziehen Sie Ihr Audio hierher:", - "Or record an audio:": "Oder nehmen Sie ein Audio auf:", - "Formant shift inference audio": "Formant Shift Inferenz-Audio", - "Used for male to female and vice-versa conversions": "Wird für Konvertierungen von Männern zu Frauen und umgekehrt verwendet", - "Provide the GPU index(es) separated by '-', like 0-1-2 for using GPUs 0, 1, and 2:": "Geben Sie den/die GPU-Index (e) getrennt durch '-' an, wie 0-1-2 für die Verwendung von GPUs 0, 1 und 2:", - "GPU Information:": "GPU-Informationen:", - "Feature extraction": "Merkmalsextraktion", - "Save frequency:": "Speicher-Häufigkeit", - "Training epochs:": "Trainingsepochen:", - "Batch size per GPU:": "Batch-Size pro GPU:", - "Save only the latest '.ckpt' file to save disk space:": "Speicher nur die neueste '.ckpt' -Datei, um Speicherplatz zu sparen:", - "No": "Nein", - "Save a small final model to the 'weights' folder at each save point:": "Speicher an jedem Speicherpunkt ein kleines endgültiges Modell im Ordner \"Gewichte\":", - "Load pre-trained base model G path:": "Vortrainiertes Basismodell G Pfad:", - "Load pre-trained base model D path:": "Vorgeschultes Basismodell D Pfad:", - "Train model": "Modell trainieren", - "Train feature index": "Trainiere-Feature-Index", - "One-click training": "Ein-Klick-Training", - "Processing": "Es wird bearbeitet", - "Model fusion, can be used to test timbre fusion": "Modellfusion, kann zum Testen der Timbrefusion verwendet werden", - "Path to Model A:": "Pfad zu Modell A:", - "Path to Model B:": "Pfad zu Modell B:", - "Weight for Model A:": "Gewicht für Modell A:", - "Whether the model has pitch guidance:": "Ob das Modell eine Tonhöhenführung hat:", - "Model information to be placed:": "Zu platzierende Modellinformationen:", - "Model architecture version:": "Modellarchitekturversion:", - "Fusion": "Fusion", - "Modify model information": "Modellinformationen ändern", - "Path to Model:": "Pfad zum Modell:", - "Model information to be modified:": "Zu ändernde Modellinformationen:", - "Save file name:": "Dateiname zu speichern:", - "Modify": "Modifizieren", - "View model information": "Modellinformationen", - "View": "Ansehen", - "Model extraction": "Modellextraktion", - "Name:": "Name:", - "Whether the model has pitch guidance (1: yes, 0: no):": "Ob das Modell eine Pitchführung hat (1: ja, 0: nein):", - "Extract": "Extrahieren", - "Export Onnx": "Onnx exportieren", - "RVC Model Path:": "RVC-Modellpfad:", - "Onnx Export Path:": "ONNX-Exportpfad:", - "MoeVS Model": "MoeVS-Modell", - "Export Onnx Model": "Onnx-Modell exportieren", - "Load model": "Lastmodell", - "Hubert Model": "Hubert-Modell", - "Select the .pth file": "Wählen Sie die Datei aus. ", - "Select the .index file": "Wählen Sie die .index-Datei", - "Select the .npy file": "Wählen Sie die Datei aus. ", - "Input device": "Eingabegerät", - "Output device": "Ausgabegerät", - "Audio device (please use the same type of driver)": "Audiogerät (bitte verwenden Sie den gleichen Treibertyp)", - "Response threshold": "Ansprechschwelle", - "Pitch settings": "Tonhöheneinstellungen", - "Whether to use note names instead of their hertz value. E.G. [C5, D6] instead of [523.25, 1174.66]Hz": "Gibt an, ob Notiznamen anstelle ihres Hertz-Wertes verwendet werden sollen. Z.B. [C5, D6] statt [523.25, 1174.66]Hz", - "Index Rate": "Indexsatz", - "General settings": "Allgemeine Einstellungen", - "Sample length": "Probenlänge:", - "Fade length": "Ausblendlänge", - "Extra inference time": "Zusätzliche Inferenzzeit", - "Input noise reduction": "Eingangsgeräuschreduzierung", - "Output noise reduction": "Ausgangsgeräuschreduzierung", - "Performance settings": "Leistungseinstellungen", - "Start audio conversion": "Audiokonvertierung starten", - "Stop audio conversion": "Audiokonvertierung stoppen", - "Inference time (ms):": "Inferenzzeit (ms):", - "Select the pth file": "Wähle die Datei aus...", - "Select the .index file:": "Wählen Sie die Indexdatei aus", - "The hubert model path must not contain Chinese characters": "Der Hubert-Modellpfad darf keine chinesischen Schriftzeichen enthalten", - "The pth file path must not contain Chinese characters.": "Der pth-Dateipfad darf keine chinesischen Zeichen enthalten.", - "The index file path must not contain Chinese characters.": "Der Indexdateipfad darf keine chinesischen Zeichen enthalten.", - "Step algorithm": "Schritt-Algorithmus", - "Number of epoch processes": "Anzahl der Epochenprozesse", - "Lowest points export": "Export der niedrigsten Punkte", - "How many lowest points to save:": "Wie viele niedrigste Punkte zu sparen sind:", - "Export lowest points of a model": "Niedrigste Punkte eines Modells exportieren", - "Output models:": "Ausgabemodelle:", - "Stats of selected models:": "Statistiken ausgewählter Modelle:", - "Custom f0 [Root pitch] File": "Benutzerdefinierte f0 [Root Pitch] -Datei", - "Min pitch:": "Min. Tonhöhe:", - "Specify minimal pitch for inference [HZ]": "Minimale Tonhöhe für Inferenz angeben [HZ]", - "Specify minimal pitch for inference [NOTE][OCTAVE]": "Geben Sie die minimale Tonhöhe für die Inferenz an [HINWEIS][OKTAVE]", - "Max pitch:": "Max. Tonhöhe ", - "Specify max pitch for inference [HZ]": "Max. Tonhöhe für Inferenz angeben [HZ]", - "Specify max pitch for inference [NOTE][OCTAVE]": "Maximale Tonhöhe für Inferenz angeben [HINWEIS][OKTAVE]", - "Browse presets for formanting": "Voreinstellungen für Formanting durchsuchen", - "Presets are located in formantshiftcfg/ folder": "Voreinstellungen befinden sich in formantshiftcfg/ Ordner", - "Default value is 1.0": "Standardwert ist 1", - "Quefrency for formant shifting": "Quefrency für Formant-Verschiebung", - "Timbre for formant shifting": "Timbre für Formantverschiebung", - "Apply": "Übernehmen", - "Single": "Einzel", - "Batch": "Batch", - "Separate YouTube tracks": "Separate YouTube-Tracks", - "Download audio from a YouTube video and automatically separate the vocal and instrumental tracks": "Laden Sie Audio von einem YouTube-Video herunter und trennen Sie automatisch die Gesangs- und Instrumentalspuren", - "Extra": "Extra", - "Merge": "Zusammenführen", - "Merge your generated audios with the instrumental": "Fügen Sie Ihre generierten Audios mit dem Instrumental", - "Choose your instrumental:": "Wählen Sie Ihr Instrumental:", - "Choose the generated audio:": "Wählen Sie das erzeugte Audio:", - "Combine": "Kombinieren", - "Download and Separate": "Herunterladen und trennen", - "Enter the YouTube link:": "Youtube Link eingeben:", - "This section contains some extra utilities that often may be in experimental phases": "Dieser Abschnitt enthält einige zusätzliche Dienstprogramme, die sich oft in experimentellen Phasen befinden", - "Merge Audios": "Audios zusammenführen", - "Audio files have been moved to the 'audios' folder.": "Audiodateien wurden in den Ordner 'audios' verschoben.", - "Downloading audio from the video...": "Audio aus dem Video wird heruntergeladen...", - "Audio downloaded!": "Audio heruntergeladen!", - "An error occurred:": "Ein Fehler ist aufgetreten:", - "Separating audio...": "Audio wird getrennt...", - "File moved successfully.": "Datei erfolgreich verschoben.", - "Finished!": "Abgeschlossen!", - "The source file does not exist.": "Die Quelldatei ist nicht vorhanden!", - "Error moving the file:": "Fehler beim Verschieben der Datei:", - "Downloading {name} from drive": "{name} wird vom Drive heruntergeladen", - "The attempt to download using Drive didn't work": "Der Versuch, mit Drive herunterzuladen, hat nicht funktioniert", - "Error downloading the file: {str(e)}": "Fehler beim Herunterladen der Datei: {str(e)}", - "Downloading {name} from mega": "{name} wird von Mega heruntergeladen", - "Downloading {name} from basic url": "{name} wird von der Basis-URL heruntergeladen", - "Download Audio": "Audio herunterladen", - "Download audios of any format for use in inference (recommended for mobile users).": "Laden Sie Audios in jedem Format zur Verwendung in Inferenz herunter (empfohlen für mobile Benutzer).", - "Any ConnectionResetErrors post-conversion are irrelevant and purely visual; they can be ignored.\n": "Alle ConnectionResetErrors nach der Konvertierung sind irrelevant und rein visuell; sie können ignoriert werden.", - "Processed audio saved at: ": "Verarbeitete Audiodaten gespeichert unter:", - "Conversion complete!": "Konvertierung abgeschlossen", - "Reverb": "Nachhall", - "Compressor": "Kompressor", - "Noise Gate": "Noise-Gate", - "Volume": "Lautstärke", - "Drag the audio here and click the Refresh button": "Ziehen Sie das Audio hierher und klicken Sie auf den Aktuallisierungs Knopf", - "Select the generated audio": "Wählen Sie das erzeugte Audio", - "Volume of the instrumental audio:": "Lautstärke des Instrumental-Audios:", - "Volume of the generated audio:": "Lautstärke des erzeugten Audios:", - "### Audio settings:": "### Audio-Einstellungen", - "### Instrumental settings:": "### Instrumentale Einstellungen:", - "### Add the effects:": "### Fügen Sie die Effekte hinzu:", - "Name for saving": "Name zum Speichern", - "Path to model": "Pfad zum Modell", - "Model information to be placed": "Zu platzierende Modellinformationen", - "Starting audio conversion... (This might take a moment)": "Starte Audio-Konvertierung... (Das kann einen Moment dauern)", - "TTS Model:": "TTS-Stimmen", - "TTS": "TTS", - "TTS Method:": "TTS-Methode", - "Audio TTS:": "Audio-TTS", - "Audio RVC:": "Audio-Modell" -} diff --git a/i18n/locale/en_US.json b/i18n/locale/en_US.json deleted file mode 100644 index 239004dd917e67d6ad7db96ec127e1359c5f4a5c..0000000000000000000000000000000000000000 --- a/i18n/locale/en_US.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "Unfortunately, there is no compatible GPU available to support your training.": "Unfortunately, there is no compatible GPU available to support your training.", - "Yes": "Yes", - "Select your dataset:": "Select your dataset:", - "Update list": "Update list", - "Download Model": "Download Model", - "Download Backup": "Download Backup", - "Download Dataset": "Download Dataset", - "Download": "Download", - "Url:": "Url:", - "Build the index before saving.": "Build the index before saving.", - "Save your model once the training ends.": "Save your model once the training ends.", - "Save type": "Save type:", - "Save model": "Save model", - "Choose the method": "Choose the method", - "Save all": "Save all", - "Save D and G": "Save D and G", - "Save voice": "Save voice", - "Downloading the file: ": "Downloading the file: ", - "Stop training": "Stop training", - "Too many users have recently viewed or downloaded this file": "Too many users have recently viewed or downloaded this file", - "Cannot get file from this private link": "Cannot get file from this private link", - "Full download": "Full download", - "An error occurred downloading": "An error occurred downloading", - "Model saved successfully": "Model saved successfully", - "Saving the model...": "Saving the model...", - "Saved without index...": "Saved without index...", - "Saved without inference model...": "Saved without inference model...", - "An error occurred saving the model": "An error occurred saving the model", - "The model you want to save does not exist, be sure to enter the correct name.": "The model you want to save does not exist, be sure to enter the correct name.", - "The file could not be downloaded.": "The file could not be downloaded.", - "Unzip error.": "Unzip error.", - "Path to your added.index file (if it didn't automatically find it)": "Path to your added.index file (if it didn't automatically find it)", - "It has been downloaded successfully.": "It has been downloaded successfully.", - "Proceeding with the extraction...": "Proceeding with the extraction...", - "The Backup has been uploaded successfully.": "The Backup has been uploaded successfully.", - "The Dataset has been loaded successfully.": "The Dataset has been loaded successfully.", - "The Model has been loaded successfully.": "The Model has been loaded successfully.", - "It is used to download your inference models.": "It is used to download your inference models.", - "It is used to download your training backups.": "It is used to download your training backups.", - "Download the dataset with the audios in a compatible format (.wav/.flac) to train your model.": "Download the dataset with the audios in a compatible format (.wav/.flac) to train your model.", - "No relevant file was found to upload.": "No relevant file was found to upload.", - "The model works for inference, and has the .index file.": "The model works for inference, and has the .index file.", - "The model works for inference, but it doesn't have the .index file.": "The model works for inference, but it doesn't have the .index file.", - "This may take a few minutes, please wait...": "This may take a few minutes, please wait...", - "Resources": "Resources", - "Step 1: Processing data": "Step 1: Processing data", - "Step 2: Skipping pitch extraction": "Step 2: Skipping pitch extraction", - "Step 3: Extracting features": "Step 3: Extracting features", - "Step 4: Model training started": "Step 4: Model training started", - "Step 5: Export lowest points on a graph of the model": "Step 5: Export lowest points on a graph of the model", - "Training is done, check train.log": "Training is done, check train.log", - "All processes have been completed!": "All processes have been completed!", - "Model Inference": "Model Inference", - "Inferencing voice:": "Inferencing voice:", - "Model_Name": "Model_Name", - "Dataset_Name": "Dataset_Name", - "Whether the model has pitch guidance.": "Whether the model has pitch guidance.", - "Whether to save only the latest .ckpt file to save hard drive space": "Whether to save only the latest .ckpt file to save hard drive space", - "Cache all training sets to GPU memory. Caching small datasets (less than 10 minutes) can speed up training": "Cache all training sets to GPU memory. Caching small datasets (less than 10 minutes) can speed up training", - "Save a small final model to the 'weights' folder at each save point": "Save a small final model to the 'weights' folder at each save point", - "Refresh": "Refresh", - "Unload voice to save GPU memory": "Unload voice to save GPU memory", - "Select Speaker/Singer ID:": "Select Speaker/Singer ID:", - "Recommended +12 key for male to female conversion, and -12 key for female to male conversion. If the sound range goes too far and the voice is distorted, you can also adjust it to the appropriate range by yourself.": "Recommended +12 key for male to female conversion, and -12 key for female to male conversion. If the sound range goes too far and the voice is distorted, you can also adjust it to the appropriate range by yourself.", - "Transpose (integer, number Fof semitones, raise by an octave: 12, lower by an octave: -12):": "Transpose (integer, number of semitones, raise by an octave: 12, lower by an octave: -12):", - "Feature search database file path:": "Feature search database file path:", - "Enter the path of the audio file to be processed (default is the correct format example):": "Enter the path of the audio file to be processed (default is the correct format example):", - "Select the pitch extraction algorithm:": "Select the pitch extraction algorithm:", - "Mangio-Crepe Hop Length (Only applies to mangio-crepe): Hop length refers to the time it takes for the speaker to jump to a dramatic pitch. Lower hop lengths take more time to infer but are more pitch accurate.": "Mangio-Crepe Hop Length (Only applies to mangio-crepe): Hop length refers to the time it takes for the speaker to jump to a dramatic pitch. Lower hop lengths take more time to infer but are more pitch accurate.", - "Feature search dataset file path": "Feature search dataset file path", - "If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness.": "If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness.", - "Path to the feature index file. Leave blank to use the selected result from the dropdown:": "Path to the feature index file. Leave blank to use the selected result from the dropdown:", - "Auto-detect index path and select from the dropdown:": "Auto-detect index path and select from the dropdown:", - "Path to feature file:": "Path to feature file:", - "Search feature ratio:": "Search feature ratio:", - "Resample the output audio in post-processing to the final sample rate. Set to 0 for no resampling:": "Resample the output audio in post-processing to the final sample rate. Set to 0 for no resampling:", - "Use the volume envelope of the input to replace or mix with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is used:": "Use the volume envelope of the input to replace or mix with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is used:", - "Protect voiceless consonants and breath sounds to prevent artifacts such as tearing in electronic music. Set to 0.5 to disable. Decrease the value to increase protection, but it may reduce indexing accuracy:": "Protect voiceless consonants and breath sounds to prevent artifacts such as tearing in electronic music. Set to 0.5 to disable. Decrease the value to increase protection, but it may reduce indexing accuracy:", - "F0 curve file (optional). One pitch per line. Replaces the default F0 and pitch modulation:": "F0 curve file (optional). One pitch per line. Replaces the default F0 and pitch modulation:", - "Convert": "Convert", - "Output information:": "Output information:", - "Export audio (click on the three dots in the lower right corner to download)": "Export audio (click on the three dots in the lower right corner to download)", - "Batch conversion. Enter the folder containing the audio files to be converted or upload multiple audio files. The converted audio will be output in the specified folder (default: 'opt').": "Batch conversion. Enter the folder containing the audio files to be converted or upload multiple audio files. The converted audio will be output in the specified folder (default: 'opt').", - "Specify output folder:": "Specify output folder:", - "Enter the path of the audio folder to be processed (copy it from the address bar of the file manager):": "Enter the path of the audio folder to be processed (copy it from the address bar of the file manager):", - "You can also input audio files in batches. Choose one of the two options. Priority is given to reading from the folder.": "You can also input audio files in batches. Choose one of the two options. Priority is given to reading from the folder.", - "Export file format:": "Export file format:", - "UVR5": "UVR5", - "Enter the path of the audio folder to be processed:": "Enter the path of the audio folder to be processed:", - "Model:": "Model:", - "Vocal Extraction Aggressive": "Vocal Extraction Aggressive", - "Specify the output folder for vocals:": "Specify the output folder for vocals:", - "Specify the output folder for accompaniment:": "Specify the output folder for accompaniment:", - "Train": "Train", - "Enter the model name:": "Enter the model name:", - "Target sample rate:": "Target sample rate:", - "Whether the model has pitch guidance (required for singing, optional for speech):": "Whether the model has pitch guidance (required for singing, optional for speech):", - "Version:": "Version:", - "Number of CPU processes:": "Number of CPU processes:", - "Enter the path of the training folder:": "Enter the path of the training folder:", - "Specify the model ID:": "Specify the model ID:", - "Auto detect audio path and select from the dropdown:": "Auto detect audio path and select from the dropdown:", - "Add audio's name to the path to the audio file to be processed (default is the correct format example) Remove the path to use an audio from the dropdown list:": "Add audio's name to the path to the audio file to be processed (default is the correct format example) Remove the path to use an audio from the dropdown list:", - "Advanced Settings": "Advanced Settings", - "Settings": "Settings", - "Status:": "Status:", - "Process data": "Process data", - "Drag your audio here:": "Drag your audio here:", - "Or record an audio:": "Or record an audio:", - "Formant shift inference audio": "Formant shift inference audio", - "Used for male to female and vice-versa conversions": "Used for male to female and vice-versa conversions", - "Provide the GPU index(es) separated by '-', like 0-1-2 for using GPUs 0, 1, and 2:": "Provide the GPU index(es) separated by '-', like 0-1-2 for using GPUs 0, 1, and 2:", - "GPU Information:": "GPU Information:", - "Feature extraction": "Feature extraction", - "Save frequency:": "Save frequency:", - "Training epochs:": "Training epochs:", - "Batch size per GPU:": "Batch size per GPU:", - "Save only the latest '.ckpt' file to save disk space:": "Save only the latest '.ckpt' file to save disk space:", - "No": "No", - "Save a small final model to the 'weights' folder at each save point:": "Save a small final model to the 'weights' folder at each save point:", - "Load pre-trained base model G path:": "Load pre-trained base model G path:", - "Load pre-trained base model D path:": "Load pre-trained base model D path:", - "Train model": "Train model", - "Train feature index": "Train feature index", - "One-click training": "One-click training", - "Processing": "Processing", - "Model fusion, can be used to test timbre fusion": "Model fusion, can be used to test timbre fusion", - "Path to Model A:": "Path to Model A:", - "Path to Model B:": "Path to Model B:", - "Weight for Model A:": "Weight for Model A:", - "Whether the model has pitch guidance:": "Whether the model has pitch guidance:", - "Model information to be placed:": "Model information to be placed:", - "Model architecture version:": "Model architecture version:", - "Fusion": "Fusion", - "Modify model information": "Modify model information", - "Path to Model:": "Path to Model:", - "Model information to be modified:": "Model information to be modified:", - "Save file name:": "Save file name:", - "Modify": "Modify", - "View model information": "View model information", - "View": "View", - "Model extraction": "Model extraction", - "Name:": "Name:", - "Whether the model has pitch guidance (1: yes, 0: no):": "Whether the model has pitch guidance (1: yes, 0: no):", - "Extract": "Extract", - "Export Onnx": "Export Onnx", - "RVC Model Path:": "RVC Model Path:", - "Onnx Export Path:": "Onnx Export Path:", - "MoeVS Model": "MoeVS Model", - "Export Onnx Model": "Export Onnx Model", - "Load model": "Load model", - "Hubert Model": "Hubert Model", - "Select the .pth file": "Select the .pth file", - "Select the .index file": "Select the .index file", - "Select the .npy file": "Select the .npy file", - "Input device": "Input device", - "Output device": "Output device", - "Audio device (please use the same type of driver)": "Audio device (please use the same type of driver)", - "Response threshold": "Response threshold", - "Pitch settings": "Pitch settings", - "Whether to use note names instead of their hertz value. E.G. [C5, D6] instead of [523.25, 1174.66]Hz": "Whether to use note names instead of their hertz value. E.G. [C5, D6] instead of [523.25, 1174.66]Hz", - "Index Rate": "Index Rate", - "General settings": "General settings", - "Sample length": "Sample length", - "Fade length": "Fade length", - "Extra inference time": "Extra inference time", - "Input noise reduction": "Input noise reduction", - "Output noise reduction": "Output noise reduction", - "Performance settings": "Performance settings", - "Start audio conversion": "Start audio conversion", - "Stop audio conversion": "Stop audio conversion", - "Inference time (ms):": "Inference time (ms):", - "Select the pth file": "Select the pth file", - "Select the .index file:": "Select the .index file:", - "The hubert model path must not contain Chinese characters": "The hubert model path must not contain Chinese characters", - "The pth file path must not contain Chinese characters.": "The pth file path must not contain Chinese characters.", - "The index file path must not contain Chinese characters.": "The index file path must not contain Chinese characters.", - "Step algorithm": "Step algorithm", - "Number of epoch processes": "Number of epoch processes", - "Lowest points export": "Lowest points export", - "How many lowest points to save:": "How many lowest points to save:", - "Export lowest points of a model": "Export lowest points of a model", - "Output models:": "Output models:", - "Stats of selected models:": "Stats of selected models:", - "Custom f0 [Root pitch] File": "Custom f0 [Root pitch] File", - "Min pitch:": "Min pitch:", - "Specify minimal pitch for inference [HZ]": "Specify minimal pitch for inference [HZ]", - "Specify minimal pitch for inference [NOTE][OCTAVE]": "Specify minimal pitch for inference [NOTE][OCTAVE]", - "Max pitch:": "Max pitch:", - "Specify max pitch for inference [HZ]": "Specify max pitch for inference [HZ]", - "Specify max pitch for inference [NOTE][OCTAVE]": "Specify max pitch for inference [NOTE][OCTAVE]", - "Browse presets for formanting": "Browse presets for formanting", - "Presets are located in formantshiftcfg/ folder": "Presets are located in formantshiftcfg/ folder", - "Default value is 1.0": "Default value is 1.0", - "Quefrency for formant shifting": "Quefrency for formant shifting", - "Timbre for formant shifting": "Timbre for formant shifting", - "Apply": "Apply", - "Single": "Single", - "Batch": "Batch", - "Separate YouTube tracks": "Separate YouTube tracks", - "Download audio from a YouTube video and automatically separate the vocal and instrumental tracks": "Download audio from a YouTube video and automatically separate the vocal and instrumental tracks", - "Extra": "Extra", - "Merge": "Merge", - "Merge your generated audios with the instrumental": "Merge your generated audios with the instrumental", - "Choose your instrumental:": "Choose your instrumental:", - "Choose the generated audio:": "Choose the generated audio:", - "Combine": "Combine", - "Download and Separate": "Download and Separate", - "Enter the YouTube link:": "Enter the YouTube link:", - "This section contains some extra utilities that often may be in experimental phases": "This section contains some extra utilities that often may be in experimental phases", - "Merge Audios": "Merge Audios", - "Audio files have been moved to the 'audios' folder.": "Audio files have been moved to the 'audios' folder.", - "Downloading audio from the video...": "Downloading audio from the video...", - "Audio downloaded!": "Audio downloaded!", - "An error occurred:": "An error occurred:", - "Separating audio...": "Separating audio...", - "File moved successfully.": "File moved successfully.", - "Finished!": "Finished!", - "The source file does not exist.": "The source file does not exist.", - "Error moving the file:": "Error moving the file:", - "Downloading {name} from drive": "Downloading {name} from drive", - "The attempt to download using Drive didn't work": "The attempt to download using Drive didn't work", - "Error downloading the file: {str(e)}": "Error downloading the file: {str(e)}", - "Downloading {name} from mega": "Downloading {name} from mega", - "Downloading {name} from basic url": "Downloading {name} from basic url", - "Download Audio": "Download Audio", - "Download audios of any format for use in inference (recommended for mobile users).": "Download audios of any format for use in inference (recommended for mobile users).", - "Any ConnectionResetErrors post-conversion are irrelevant and purely visual; they can be ignored.\n": "Any ConnectionResetErrors post-conversion are irrelevant and purely visual; they can be ignored.\n", - "Processed audio saved at: ": "Processed audio saved at: ", - "Conversion complete!": "Conversion complete!", - "Reverb": "Reverb", - "Compressor": "Compressor", - "Noise Gate": "Noise Gate", - "Volume": "Volume", - "Drag the audio here and click the Refresh button": "Drag the audio here and click the Refresh button", - "Select the generated audio": "Select the generated audio", - "Volume of the instrumental audio:": "Volume of the instrumental audio:", - "Volume of the generated audio:": "Volume of the generated audio:", - "### Audio settings:": "### Audio settings:", - "### Instrumental settings:": "### Instrumental settings:", - "### Add the effects:": "### Add the effects:", - "Name for saving": "Name for saving", - "Path to model": "Path to model", - "Model information to be placed": "Model information to be placed", - "Starting audio conversion... (This might take a moment)": "Starting audio conversion... (This might take a moment)", - "Error no reformatted.wav found:": "Error no reformatted.wav found:", - "Error at separating audio:": "Error at separating audio:", - "Vocal": "Vocal", - "Instrumental": "Instrumental", - "Finished": "Finished", - "TTS Model:": "TTS Model:", - "TTS": "TTS", - "RVC Model:": "RVC Model:", - "TTS Method:": "TTS Method:", - "Audio TTS:": "Audio TTS:", - "Audio RVC:": "Audio RVC:", - "Enter the text you want to convert to voice...": "Enter the text you want to convert to voice...", - "Text:": "Text:" -} diff --git a/i18n/locale/es_ES.json b/i18n/locale/es_ES.json deleted file mode 100644 index 959775e010487ba1dfcff27164b219ed16e62274..0000000000000000000000000000000000000000 --- a/i18n/locale/es_ES.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "Unfortunately, there is no compatible GPU available to support your training.": "Lamentablemente, no hay una GPU compatible disponible para respaldar tu formación.", - "Yes": "Sí", - "Select your dataset:": "Seleccione su dataset:", - "Update list": "Actualizar lista", - "Download Model": "Descargar modelo", - "Download Backup": "Descargar copias de seguridad", - "Download Dataset": "Descargar dataset", - "Download": "Descargar", - "Url:": "Enlace:", - "Build the index before saving.": "Genere el índice antes de guardarlo.", - "Save your model once the training ends.": "Guarde su modelo una vez finalice el entrenamiento.", - "Save type": "Método de guardado:", - "Save model": "Guardar modelo", - "Choose the method": "Elige el método", - "Save all": "Guardar todos los archivos", - "Save D and G": "Guardar archivos G y D", - "Save voice": "Guadar modelo para inferencia", - "Downloading the file: ": "Descargando el archivo:", - "Stop training": "Detener entrenamiento", - "Too many users have recently viewed or downloaded this file": "Demasiados usuarios han visto o descargado recientemente este archivo", - "Cannot get file from this private link": "No se puede obtener el archivo de este enlace privado", - "Full download": "Descarga completa", - "An error occurred downloading": "Se ha producido un error al descargar", - "Model saved successfully": "Modelo guardado correctamente", - "Saving the model...": "Guardando el modelo...", - "Saved without index...": "Guardado sin archivo .index...", - "Saved without inference model...": "Guardado sin modelo de inferencia...", - "An error occurred saving the model": "Se ha producido un error al guardar el modelo", - "The model you want to save does not exist, be sure to enter the correct name.": "El modelo que desea guardar no existe, asegúrese de introducir el nombre correcto.", - "The file could not be downloaded.": "No se pudo bajar el archivo", - "Unzip error.": "Error al descomprimir.", - "Path to your added.index file (if it didn't automatically find it)": "Ruta a su archivo added.index (si no lo encontró automáticamente)", - "It has been downloaded successfully.": "Se ha descargado con éxito.", - "Proceeding with the extraction...": "Continuando con la extracción...", - "The Backup has been uploaded successfully.": "La copia de seguridad se ha cargado correctamente.", - "The Dataset has been loaded successfully.": "El dataset se ha cargado correctamente.", - "The Model has been loaded successfully.": "El modelo se ha cargado correctamente.", - "It is used to download your inference models.": "Se utiliza para descargar sus modelos de inferencia.", - "It is used to download your training backups.": "Se utiliza para descargar las copias de seguridad de entrenamientos.", - "Download the dataset with the audios in a compatible format (.wav/.flac) to train your model.": "Descargue el dataset con los audios en un formato compatible (.wav/.flac) para entrenar su modelo.", - "No relevant file was found to upload.": "No se ha encontrado ningún archivo relevante para cargar.", - "The model works for inference, and has the .index file.": "El modelo funciona para inferencia y tiene el archivo .index.", - "The model works for inference, but it doesn't have the .index file.": "El modelo funciona para inferencia, pero no tiene el archivo .index.", - "This may take a few minutes, please wait...": "Esto puede tardar unos minutos, espere por favor.", - "Resources": "Recursos", - "Step 1: Processing data": "Paso 1: Procesamiento de datos", - "Step 2: Skipping pitch extraction": "Paso 2: Extracción de tono", - "Step 3: Extracting features": "Paso 3: Extracción de funciones", - "Step 4: Model training started": "Paso 4: Entrenamiento del modelo", - "Step 5: Export lowest points on a graph of the model": "Paso 5: Exporte los puntos más bajos en un gráfico del modelo", - "Training is done, check train.log": "El entrenamiento ha finalizado, revisa train.log.", - "All processes have been completed!": "¡Todos los procesos se han completado!", - "Model Inference": "Inferencia", - "Inferencing voice:": "Modelo de voz:", - "Model_Name": "Nombre_Modelo", - "Dataset_Name": "Nombre_Dataset", - "Whether the model has pitch guidance.": "Si el modelo tiene guía de tono.", - "Whether to save only the latest .ckpt file to save hard drive space": "Si guardar solo el último archivo .ckpt para ahorrar espacio en el disco duro", - "Cache all training sets to GPU memory. Caching small datasets (less than 10 minutes) can speed up training": "El almacenamiento en caché de pequeños conjuntos de datos (menos de 10 minutos) puede acelerar el entrenamiento", - "Save a small final model to the 'weights' folder at each save point": "Guarde un pequeño modelo final en la carpeta 'weights' en cada punto de guardado", - "Refresh": "Actualizar", - "Unload voice to save GPU memory": "Eliminar voz para ahorrar memoria de GPU", - "Select Speaker/Singer ID:": "Seleccionar ID de orador/cantante:", - "Transpose (integer, number of semitones, raise by an octave: 12, lower by an octave: -12):": "Transponer (entero, número de semitonos, subir una octava: 12, bajar una octava -12):", - "Recommended +12 key for male to female conversion, and -12 key for female to male conversion. If the sound range goes too far and the voice is distorted, you can also adjust it to the appropriate range by yourself.": "Se recomienda la tecla +12 para la conversión de hombre a mujer y la tecla -12 para la conversión de mujer a hombre. Si el rango de sonido va demasiado lejos y la voz está distorsionada, también puede ajustarlo al rango apropiado usted mismo.", - "Enter the path of the audio file to be processed (default is the correct format example):": "Introduzca la ruta del archivo de audio a procesar (el ejemplo de formato correcto es el predeterminado):", - "Select the pitch extraction algorithm:": "Seleccione el algoritmo de extracción de tono:", - "Mangio-Crepe Hop Length (Only applies to mangio-crepe): Hop length refers to the time it takes for the speaker to jump to a dramatic pitch. Lower hop lengths take more time to infer but are more pitch accurate.": "Longitud de salto de mangio-crepe (solo se aplica a mangio-crepe): la longitud de salto se refiere al tiempo que tarda el hablante en saltar a un tono dramático. Las longitudes de salto más bajas tardan más tiempo en inferirse, pero son más precisas en el tono.", - "Feature search dataset file path": "Ruta del archivo del dataset de búsqueda de funciones", - "If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness.": "Si >=3: aplicar filtrado de mediana a los resultados de brea cosechada. El valor representa el radio del filtro y puede reducir la transpiración.", - "Path to the feature index file. Leave blank to use the selected result from the dropdown:": "Ruta al archivo .index de entidades. Déjelo en blanco para usar el resultado seleccionado del menú desplegable:", - "Auto-detect index path and select from the dropdown:": "Detectar automáticamente la ruta del archivo .index y seleccionar en el menú desplegable:", - "Path to feature file:": "Ruta del archivo de características:", - "Search feature ratio:": "Proporción de función de búsqueda:", - "Resample the output audio in post-processing to the final sample rate. Set to 0 for no resampling:": "Vuelva a muestrear el audio de salida en el posprocesamiento a la frecuencia de muestreo final. Establecer en 0 para no volver a muestrear:", - "Use the volume envelope of the input to replace or mix with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is used:": "Utilice la envolvente de volumen de la entrada para reemplazar o mezclar con la envolvente de volumen de la salida. Cuanto más cerca esté la relación a 1, más se utilizará la envolvente de salida:", - "Protect voiceless consonants and breath sounds to prevent artifacts such as tearing in electronic music. Set to 0.5 to disable. Decrease the value to increase protection, but it may reduce indexing accuracy:": "Proteja las consonantes sordas y los sonidos de la respiración para evitar artefactos como el desgarro en la música electrónica. Establecer en 0.5 para desactivar. Disminuya el valor para aumentar la protección, pero puede reducir la precisión de la indexación:", - "F0 curve file (optional). One pitch per line. Replaces the default F0 and pitch modulation:": "Archivo de curva F0 (opcional). Un paso por línea. Sustituye la modulación de paso y F0 predeterminada:", - "Convert": "Convertir", - "Output information:": "Información de salida:", - "Export audio (click on the three dots in the lower right corner to download)": "Exportar audio (haga clic en los tres puntos en la esquina inferior derecha para descargar)", - "Batch conversion. Enter the folder containing the audio files to be converted or upload multiple audio files. The converted audio will be output in the specified folder (default: 'opt').": "Conversión por lotes. Introduzca la carpeta que contiene los archivos de audio a convertir o cargue varios archivos de audio. El audio convertido se emitirá en la carpeta especificada (predeterminado: 'opt').", - "Specify output folder:": "Especificar carpeta de salida:", - "Enter the path of the audio folder to be processed (copy it from the address bar of the file manager):": "Introduzca la ruta de la carpeta de audio a procesar (cópiela desde la barra de direcciones del gestor de archivos):", - "You can also input audio files in batches. Choose one of the two options. Priority is given to reading from the folder.": "También puede introducir archivos de audio en lotes. Elige una de las dos opciones. Se da prioridad a la lectura de la carpeta.", - "Export file format:": "Formato de archivo de exportación:", - "UVR5": "UVR5", - "Enter the path of the audio folder to be processed:": "Introduzca la ruta de la carpeta de audio a procesar:", - "Model:": "Modelo:", - "Vocal Extraction Aggressive": "Extracción vocal agresiva", - "Specify the output folder for vocals:": "Especifique la carpeta de salida para las voces:", - "Specify the output folder for accompaniment:": "Especifique la carpeta de salida para el acompañamiento:", - "Train": "Entrenar", - "Enter the model name:": "Nombre del modelo:", - "Target sample rate:": "Tasa de muestreo objetivo:", - "Whether the model has pitch guidance (required for singing, optional for speech):": "Si el modelo tiene guía de tono (requerido para cantar, opcional para el habla):", - "Version:": "Versión:", - "Number of CPU processes:": "Número de procesos de CPU:", - "Enter the path of the training folder:": "Introduzca la ruta de la carpeta de formación:", - "Specify the model ID:": "Especifique el ID del modelo:", - "Auto detect audio path and select from the dropdown:": "Detectar automáticamente la ruta de audio y seleccionar en el menú desplegable:", - "Add audio's name to the path to the audio file to be processed (default is the correct format example) Remove the path to use an audio from the dropdown list:": "Agregue el nombre del audio a la ruta del archivo de audio que se procesará (el ejemplo de formato correcto es el predeterminado) Elimine la ruta para usar un audio de la lista desplegable:", - "Advanced Settings": "Ajustes avanzados", - "Settings": "Configuración", - "Status:": "Estado:", - "Process data": "Procesar datos", - "Drag your audio here:": "Arrastra tu audio aquí:", - "Or record an audio:": "O graba un audio:", - "Formant shift inference audio": "Audio de inferencia de desplazamiento formante", - "Used for male to female and vice-versa conversions": "Se utiliza para conversiones de hombre a mujer y viceversa", - "Provide the GPU index(es) separated by '-', like 0-1-2 for using GPUs 0, 1, and 2:": "Proporcione los índices de la GPU separados por '-', como 0-1-2 para usar las GPU 0, 1 y 2:", - "GPU Information:": "Información de la GPU:", - "Feature extraction": "Extracción de característicos", - "Save frequency:": "Frecuencia de guardado:", - "Training epochs:": "Epochs de entrenamiento:", - "Batch size per GPU:": "Tamaño de lote por GPU:", - "Save only the latest '.ckpt' file to save disk space:": "Guarde solo el último archivo '.ckpt' para ahorrar espacio en disco:", - "No": "No", - "Save a small final model to the 'weights' folder at each save point:": "Guarde un pequeño modelo final en la carpeta 'pesos' en cada punto de guardado:", - "Load pre-trained base model G path:": "Cargar ruta base modelo G pre-entrenada:", - "Load pre-trained base model D path:": "Ruta del modelo D base de carga pre-entrenada:", - "Train model": "Entrenar modelo", - "Train feature index": "Índice de características", - "One-click training": "Entrenamiento con un solo clic", - "Processing": "Procesamiento", - "Model fusion, can be used to test timbre fusion": "Modelo de fusión, se puede utilizar para probar la fusión de timbre", - "Path to Model A:": "Ruta al Modelo A:", - "Path to Model B:": "Ruta al Modelo B:", - "Weight for Model A:": "Peso para el modelo A:", - "Whether the model has pitch guidance:": "Si el modelo tiene guía de tono:", - "Model information to be placed:": "Información del modelo a colocar:", - "Name:": "Nombre:", - "Model architecture version:": "Versión de la arquitectura del modelo:", - "Fusion": "Fusión", - "Modify model information": "Modificar información del modelo", - "Path to Model:": "Ruta al modelo:", - "Model information to be modified:": "Información del modelo a modificar:", - "Save file name:": "Guardar nombre de archivo:", - "Modify": "Modificar", - "View model information": "Información del modelo", - "View": "Ver", - "Model extraction": "Extracción del modelo", - "Whether the model has pitch guidance (1: yes, 0: no):": "Si el modelo tiene guía de tono (1: sí, 0: no):", - "Extract": "Extraer", - "Export Onnx": "Exportar Onnx", - "RVC Model Path:": "Ruta del modelo RVC:", - "Onnx Export Path:": "Ruta de exportación Onnx:", - "MoeVS Model": "Modelo MoeVS", - "Export Onnx Model": "Exportar modelo Onnx", - "Load model": "Cargar modelo", - "Hubert Model": "Modelo Hubert", - "Select the .pth file": "Seleccione un archivo.", - "Select the .index file": "Seleccione el archivo .index", - "Select the .npy file": "Seleccione un archivo.", - "Input device": "Dispositivo de entrada", - "Output device": "Dispositivo de salida", - "Audio device (please use the same type of driver)": "Dispositivo de audio (utilice el mismo tipo de controlador)", - "Response threshold": "Umbral de respuesta", - "Pitch settings": "Ajustes de tono", - "Whether to use note names instead of their hertz value. E.G. [C5, D6] instead of [523.25, 1174.66]Hz": "Si se deben usar nombres de notas en lugar de su valor de hercios. POR EJEMPLO, [C5, D6] en lugar de [523,25, 1174,66]Hz", - "Index Rate": "Tasa de Índice", - "General settings": "Configuración general", - "Sample length": "Longitud de la muestra", - "Fade length": "Longitud del desvanecimiento", - "Extra inference time": "Tiempo de inferencia adicional", - "Input noise reduction": "Reducción de ruido de entrada", - "Output noise reduction": "Reducción de ruido de salida", - "Performance settings": "Ajustes de rendimiento", - "Start audio conversion": "Iniciar conversión de audio", - "Stop audio conversion": "Detener conversión de audio", - "Inference time (ms):": "Tiempo de inferencia (ms):", - "Select the pth file": "Seleccione un archivo.", - "Select the .index file:": "Selecciona el archivo .index:", - "The hubert model path must not contain Chinese characters": "La ruta del modelo hubert no debe contener caracteres chinos", - "The pth file path must not contain Chinese characters.": "La ruta del archivo pth no debe contener caracteres chinos.", - "The index file path must not contain Chinese characters.": "La ruta del archivo .index no debe contener caracteres chinos.", - "Step algorithm": "Algoritmo de pasos", - "Number of epoch processes": "Número de procesos de Epoch", - "Lowest points export": "Exportación de puntos más bajos", - "How many lowest points to save:": "Cuántos puntos bajos quieres guardar:", - "Export lowest points of a model": "Exportar los puntos más bajos de un modelo", - "Output models:": "Modelos de salida:", - "Stats of selected models:": "Estadísticas de los modelos seleccionados:", - "Custom f0 [Root pitch] File": "Archivo personalizado f0 [Root pitch]", - "Min pitch:": "Tono mínimo:", - "Feature search database file path:": "Ruta del archivo de la base de datos de búsqueda de características:", - "Specify minimal pitch for inference [HZ]": "Especificar paso mínimo para inferencia [HZ]", - "Specify minimal pitch for inference [NOTE][OCTAVE]": "Especifique el tono mínimo para la inferencia [NOTA][OCTAVA]", - "Max pitch:": "Tono máximo:", - "Specify max pitch for inference [HZ]": "Especifique el paso máximo para la inferencia [HZ]", - "Specify max pitch for inference [NOTE][OCTAVE]": "Especifique el tono máximo para la inferencia [NOTA][OCTAVA]", - "Browse presets for formanting": "Examinar ajustes preestablecidos para formatear", - "Presets are located in formantshiftcfg/ folder": "Los ajustes preestablecidos se encuentran en formantshiftcfg/ folder", - "Default value is 1.0": "El valor por defecto es 1.", - "Quefrency for formant shifting": "Quefrencia para desplazamiento de formantes", - "Timbre for formant shifting": "Timbre para el cambio de formantes", - "Apply": "Aplicar", - "Single": "Individual", - "Batch": "Lote", - "Separate YouTube tracks": "Pistas separadas de YouTube", - "Download audio from a YouTube video and automatically separate the vocal and instrumental tracks": "Descarga el audio de un vídeo de YouTube y separa automáticamente las pistas vocales e instrumentales.", - "Extra": "Extra", - "Merge": "Combinar", - "Merge your generated audios with the instrumental": "Combina tus audios generados con el instrumental", - "Choose your instrumental:": "Elige tu instrumental:", - "Choose the generated audio:": "Elige el audio generado:", - "Combine": "Combinar", - "Download and Separate": "Descargar y separar", - "Enter the YouTube link:": "Introduce el enlace de YouTube:", - "This section contains some extra utilities that often may be in experimental phases": "Esta sección contiene algunas utilidades adicionales que a menudo pueden estar en fases experimentales", - "Merge Audios": "Combinar audios", - "Audio files have been moved to the 'audios' folder.": "Los archivos de audio se han movido a la carpeta 'audios'.", - "Downloading audio from the video...": "Descargando audio del vídeo...", - "Audio downloaded!": "¡Audio descargado!", - "An error occurred:": "Se ha producido un error:", - "Separating audio...": "Separando audio...", - "File moved successfully.": "El artículo se ha movido correctamente", - "Finished!": "¡Listo!", - "The source file does not exist.": "El archivo no existe.", - "Error moving the file:": "Error al mover el archivo:", - "Downloading {name} from drive": "Descargando {name} de la unidad", - "The attempt to download using Drive didn't work": "El intento de descarga con Drive no ha funcionado", - "Error downloading the file: {str(e)}": "Error al descargar el archivo: {str(e)}", - "Downloading {name} from mega": "Descargando {name} de mega", - "Downloading {name} from basic url": "Descargando {name} desde la URL básica", - "Download Audio": "Descargar audio", - "Download audios of any format for use in inference (recommended for mobile users).": "Descargar audios de cualquier formato para su uso en inferencia (recomendado para usuarios móviles).", - "Any ConnectionResetErrors post-conversion are irrelevant and purely visual; they can be ignored.\n": "Cualquier posconversión de ConnectionResetErrors es irrelevante y puramente visual; se puede ignorar.\n", - "Processed audio saved at: ": "Audio procesado guardado en:", - "Conversion complete!": "Actualización finalizada", - "Reverb": "Reverberación", - "Compressor": "Compresor", - "Noise Gate": "Puerta de ruido", - "Volume": "Volumen", - "Drag the audio here and click the Refresh button": "Arrastre el audio aquí y haga clic en el botón Actualizar", - "Select the generated audio": "Selecciona el audio generado", - "Volume of the instrumental audio:": "Volumen del audio instrumental:", - "Volume of the generated audio:": "Volumen del audio generado:", - "### Audio settings:": "### Audio generado:", - "### Instrumental settings:": "### Audio de instrumental:", - "### Add the effects:": "### Añade los efectos:", - "Name for saving": "Nombre de guardado", - "Path to model": "Ruta al modelo", - "Model information to be placed": "Información del modelo a modificar", - "Starting audio conversion... (This might take a moment)": "Iniciando la conversión del audio... (Esto podría llevar un tiempo)", - "Error no reformatted.wav found:": "Error no se encontró el archivo reformatted.wav:", - "Error at separating audio:": "Error al separar el audio:", - "Vocal": "Vocal", - "Instrumental": "Instrumental", - "Finished": "Terminado", - "TTS Model:": "Modelo TTS:", - "TTS": "TTS", - "RVC Model:": "Modelo RVC:", - "TTS Method:": "Método TTS:", - "Audio TTS:": "Audio TTS:", - "Audio RVC:": "Audio RVC:", - "Enter the text you want to convert to voice...": "Introduce el texto que desea convertir en voz...", - "Text:": "Texto:" -} diff --git a/i18n/locale/id_ID.json b/i18n/locale/id_ID.json deleted file mode 100644 index 4b19a691e97c392276d80e526d917523e8bcaeec..0000000000000000000000000000000000000000 --- a/i18n/locale/id_ID.json +++ /dev/null @@ -1,248 +0,0 @@ -{ - "Unfortunately, there is no compatible GPU available to support your training.": "Sayangnya, tidak ada GPU kompatibel yang tersedia untuk mendukung pelatihan Anda.", - "Yes": "Ya", - "Select your dataset:": "Pilih kumpulan data Anda.", - "Update list": "Perbarui daftar.", - "Download Model": "Unduh Model", - "Download Backup": "Unduh Cadangan", - "Download Dataset": "Unduh Kumpulan Data", - "Download": "Unduh", - "Url:": "URL:", - "Build the index before saving.": "Bangun indeks sebelum menyimpan.", - "Save your model once the training ends.": "Simpan model Anda setelah pelatihan berakhir.", - "Save type": "Simpan jenis", - "Save model": "Simpan modelnya", - "Choose the method": "Pilih metodenya", - "Save all": "Simpan semua", - "Save D and G": "Simpan D dan G", - "Save voice": "Simpan suara", - "Downloading the file: ": "Mengunduh file:", - "Stop training": "Hentikan pelatihan", - "Too many users have recently viewed or downloaded this file": "Terlalu banyak pengguna yang baru-baru ini melihat atau mengunduh file ini", - "Cannot get file from this private link": "Tidak dapat memperoleh file dari tautan pribadi ini", - "Full download": "Unduhan penuh", - "An error occurred downloading": "Terjadi kesalahan saat mengunduh", - "Model saved successfully": "Model berhasil disimpan", - "Saving the model...": "Menyimpan model...", - "Saved without index...": "Disimpan tanpa indeks...", - "model_name": "nama model", - "Saved without inference model...": "Disimpan tanpa model inferensi...", - "An error occurred saving the model": "Terjadi kesalahan saat menyimpan model", - "The model you want to save does not exist, be sure to enter the correct name.": "Model yang ingin disimpan tidak ada, pastikan memasukkan nama yang benar.", - "The file could not be downloaded.": "File tidak dapat diunduh.", - "Unzip error.": "Kesalahan buka zip.", - "Path to your added.index file (if it didn't automatically find it)": "Jalur ke file add.index Anda (jika tidak menemukannya secara otomatis)", - "It has been downloaded successfully.": "Itu telah berhasil diunduh.", - "Proceeding with the extraction...": "Melanjutkan ekstraksi...", - "The Backup has been uploaded successfully.": "Cadangan telah berhasil diunggah.", - "The Dataset has been loaded successfully.": "Dataset telah berhasil dimuat.", - "The Model has been loaded successfully.": "Model telah berhasil dimuat.", - "It is used to download your inference models.": "Ini digunakan untuk mengunduh model inferensi Anda.", - "It is used to download your training backups.": "Ini digunakan untuk mengunduh cadangan pelatihan Anda.", - "Download the dataset with the audios in a compatible format (.wav/.flac) to train your model.": "Unduh kumpulan data dengan audio dalam format yang kompatibel (.wav/.flac) untuk melatih model Anda.", - "No relevant file was found to upload.": "Tidak ada file relevan yang ditemukan untuk diunggah.", - "The model works for inference, and has the .index file.": "Model ini berfungsi untuk inferensi, dan memiliki file .index.", - "The model works for inference, but it doesn't have the .index file.": "Model ini berfungsi untuk inferensi, tetapi tidak memiliki file .index.", - "This may take a few minutes, please wait...": "Ini mungkin memakan waktu beberapa menit, harap tunggu...", - "Resources": "Sumber daya", - "Step 1: Processing data": "Langkah 1: Memproses data", - "Step 2: Skipping pitch extraction": "Langkah 2a: Melewatkan ekstraksi nada", - "Step 3: Extracting features": "Langkah 2b: Mengekstraksi fitur", - "Step 4: Model training started": "Langkah 3a: Pelatihan model dimulai", - "Step 5: Export lowest points on a graph of the model": "Langkah 4: Ekspor titik terendah pada grafik model", - "Training is done, check train.log": "Pelatihan selesai, periksa train.log", - "All processes have been completed!": "Semua proses telah selesai!", - "Model Inference": "Inferensi Model", - "Inferencing voice:": "Menyimpulkan suara:", - "Model_Name": "Nama model", - "Dataset_Name": "Kumpulan Data_Nama", - "Whether the model has pitch guidance.": "Apakah model memiliki panduan nada.", - "Whether to save only the latest .ckpt file to save hard drive space": "Apakah hanya menyimpan file .ckpt terbaru untuk menghemat ruang hard drive", - "Cache all training sets to GPU memory. Caching small datasets (less than 10 minutes) can speed up training": "Simpan semua set pelatihan ke memori GPU. Menyimpan kumpulan data kecil (kurang dari 10 menit) dapat mempercepat pelatihan", - "Save a small final model to the 'weights' folder at each save point": "Simpan model akhir kecil ke folder 'bobot' di setiap titik penyimpanan", - "Refresh": "Segarkan daftar suara, jalur indeks, dan file audio", - "Unload voice to save GPU memory": "Bongkar suara untuk menghemat memori GPU:", - "Select Speaker/Singer ID:": "Pilih ID Pembicara/Penyanyi:", - "Recommended +12 key for male to female conversion, and -12 key for female to male conversion. If the sound range goes too far and the voice is distorted, you can also adjust it to the appropriate range by yourself.": "Direkomendasikan kunci +12 untuk konversi pria ke wanita, dan -12 kunci untuk konversi wanita ke pria. Jika rentang suara terlalu jauh dan suaranya terdistorsi, Anda juga dapat menyesuaikannya sendiri ke rentang yang sesuai.", - "Transpose (integer, number Fof semitones, raise by an octave: 12, lower by an octave: -12):": "Transpos (bilangan bulat, jumlah seminada, dinaikkan satu oktaf: 12, diturunkan satu oktaf: -12):", - "Enter the path of the audio file to be processed (default is the correct format example):": "Masukkan jalur file audio yang akan diproses (defaultnya adalah contoh format yang benar):", - "Select the pitch extraction algorithm:": "Pilih algoritma ekstraksi nada:", - "Mangio-Crepe Hop Length (Only applies to mangio-crepe): Hop length refers to the time it takes for the speaker to jump to a dramatic pitch. Lower hop lengths take more time to infer but are more pitch accurate.": "Panjang Hop Mangio-Crepe (Hanya berlaku untuk mangio-crepe): Panjang hop mengacu pada waktu yang dibutuhkan pembicara untuk melompat ke nada dramatis. Panjang lompatan yang lebih rendah membutuhkan lebih banyak waktu untuk menyimpulkan tetapi nadanya lebih akurat.", - "Feature search dataset file path": "Jalur file kumpulan data pencarian fitur", - "If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness.": "Jika >=3: terapkan pemfilteran median pada hasil pitch yang dipanen. Nilai tersebut mewakili radius filter dan dapat mengurangi sesak napas.", - "Path to the feature index file. Leave blank to use the selected result from the dropdown:": "Jalur ke file indeks fitur. Biarkan kosong untuk menggunakan hasil yang dipilih dari dropdown:", - "Auto-detect index path and select from the dropdown:": "Deteksi jalur indeks secara otomatis dan pilih dari dropdown", - "Path to feature file:": "Jalur ke file fitur:", - "Search feature ratio:": "Rasio fitur pencarian:", - "Resample the output audio in post-processing to the final sample rate. Set to 0 for no resampling:": "Sampel ulang audio keluaran dalam pasca-pemrosesan ke laju sampel akhir. Setel ke 0 tanpa pengambilan sampel ulang:", - "Use the volume envelope of the input to replace or mix with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is used:": "Gunakan amplop volume masukan untuk menggantikan atau mencampur dengan amplop volume keluaran. Semakin dekat rasionya ke 1, semakin banyak amplop keluaran yang digunakan:", - "Protect voiceless consonants and breath sounds to prevent artifacts such as tearing in electronic music. Set to 0.5 to disable. Decrease the value to increase protection, but it may reduce indexing accuracy:": "Lindungi konsonan tak bersuara dan bunyi napas untuk mencegah artefak seperti robek pada musik elektronik. Setel ke 0,5 untuk menonaktifkan. Turunkan nilainya untuk meningkatkan perlindungan, namun hal ini dapat mengurangi akurasi pengindeksan:", - "F0 curve file (optional). One pitch per line. Replaces the default F0 and pitch modulation:": "File kurva F0 (opsional). Satu nada per baris. Menggantikan F0 dan modulasi nada default:", - "Convert": "Mengubah", - "Output information:": "Informasi keluaran", - "Export audio (click on the three dots in the lower right corner to download)": "Ekspor audio (klik tiga titik di pojok kanan bawah untuk mengunduh)", - "Batch conversion. Enter the folder containing the audio files to be converted or upload multiple audio files. The converted audio will be output in the specified folder (default: 'opt').": "Konversi batch. Masuk ke folder yang berisi file audio yang akan dikonversi atau unggah beberapa file audio. Audio yang dikonversi akan dikeluarkan di folder yang ditentukan (default: 'opt').", - "Specify output folder:": "Tentukan folder keluaran:", - "Enter the path of the audio folder to be processed (copy it from the address bar of the file manager):": "Masukkan jalur folder audio yang akan diproses (salin dari bilah alamat pengelola file):", - "You can also input audio files in batches. Choose one of the two options. Priority is given to reading from the folder.": "Anda juga dapat memasukkan file audio secara berkelompok. Pilih salah satu dari dua opsi. Prioritas diberikan untuk membaca dari folder.", - "Export file format": "Ekspor format file", - "UVR5": "UVR5", - "Enter the path of the audio folder to be processed:": "Masukkan jalur folder audio yang akan diproses:", - "Model": "Model", - "Vocal Extraction Aggressive": "Ekstraksi Vokal Agresif", - "Specify the output folder for vocals:": "Tentukan folder keluaran untuk vokal:", - "Specify the output folder for accompaniment:": "Tentukan folder keluaran untuk pengiring:", - "Train": "Kereta", - "Enter the model name:": "Masukkan nama model:", - "Target sample rate:": "Tingkat sampel target:", - "Whether the model has pitch guidance (required for singing, optional for speech):": "Apakah model memiliki panduan nada (wajib untuk bernyanyi, opsional untuk berbicara):", - "Version": "Versi: kapan", - "Number of CPU processes:": "Jumlah proses CPU yang digunakan untuk ekstraksi nada dan pemrosesan data:", - "Enter the path of the training folder:": "Masukkan jalur folder pelatihan:", - "Specify the model ID:": "Silakan tentukan ID model:", - "Auto detect audio path and select from the dropdown:": "Deteksi otomatis jalur audio dan pilih dari dropdown:", - "Add audio's name to the path to the audio file to be processed (default is the correct format example) Remove the path to use an audio from the dropdown list:": "Tambahkan nama audio ke jalur ke file audio yang akan diproses (standarnya adalah contoh format yang benar) Hapus jalur untuk menggunakan audio dari daftar dropdown:", - "Advanced Settings": "Pengaturan lanjutan", - "Settings": "Pengaturan", - "Status:": "Status:", - "Process data": "Data proses", - "Drag your audio here:": "Seret audio Anda ke sini dan tekan tombol segarkan", - "Or record an audio:": "Atau rekam audio.", - "Formant shift inference audio": "Audio inferensi pergeseran formant", - "Used for male to female and vice-versa conversions": "Digunakan untuk konversi pria ke wanita dan sebaliknya", - "Provide the GPU index(es) separated by '-', like 0-1-2 for using GPUs 0, 1, and 2:": "Harap berikan indeks GPU yang dipisahkan dengan '-', seperti 0-1-2 untuk menggunakan GPU 0, 1, dan 2:", - "GPU Information:": "Informasi GPU", - "Feature extraction": "Ekstraksi fitur", - "Save frequency:": "Simpan frekuensi:", - "Training epochs:": "Zaman pelatihan:", - "Batch size per GPU:": "Ukuran batch per GPU:", - "Save only the latest '.ckpt' file to save disk space:": "Simpan hanya file '.ckpt' terbaru untuk menghemat ruang disk:", - "No": "TIDAK", - "Save a small final model to the 'weights' folder at each save point:": "Simpan model akhir kecil ke folder 'bobot' di setiap titik penyimpanan:", - "Load pre-trained base model G path:": "Memuat jalur G model dasar terlatih:", - "Load pre-trained base model D path:": "Memuat jalur model D dasar yang telah dilatih sebelumnya:", - "Train model": "Model kereta api", - "Train feature index": "Indeks fitur kereta", - "One-click training": "Pelatihan sekali klik", - "Processing": "Pengolahan", - "Model fusion, can be used to test timbre fusion": "Fusi model, dapat digunakan untuk menguji fusi timbre", - "Path to Model A:": "Jalan menuju Model A:", - "Path to Model B:": "Jalan menuju Model B:", - "Weight for Model A:": "Berat untuk Model A:", - "Whether the model has pitch guidance:": "Apakah model memiliki panduan nada:", - "Model information to be placed:": "Informasi model yang akan ditempatkan:", - "Name:": "Nama model yang disimpan (tanpa ekstensi):", - "Model architecture version:": "Versi arsitektur model:", - "Fusion": "Fusi", - "Modify model information": "Ubah informasi model", - "Path to Model:": "Jalur Menuju Model:", - "Model information to be modified:": "Informasi model yang akan dimodifikasi:", - "Save file name:": "Simpan nama file:", - "Modify": "Memodifikasi", - "View model information": "Lihat informasi model", - "View": "Melihat", - "Model extraction": "Ekstraksi model (masukkan jalur model file besar di bawah folder 'logs'). Ini berguna jika Anda ingin menghentikan pelatihan di tengah jalan dan mengekstrak serta menyimpan file model kecil secara manual, atau jika Anda ingin menguji model perantara:", - "Name:": "Simpan nama:", - "Whether the model has pitch guidance (1: yes, 0: no):": "Apakah model memiliki panduan nada (1: ya, 0: tidak):", - "Extract": "Ekstrak", - "Export Onnx": "Ekspor Onnx", - "RVC Model Path:": "Jalur Model RVC:", - "Onnx Export Path:": "Jalur Ekspor Onnx:", - "MoeVS Model": "Model MoeVS", - "Export Onnx Model": "Ekspor Model Onnx", - "Load model": "Model beban", - "Hubert Model": "Model Hubert", - "Select the .pth file": "Pilih file .pth", - "Select the .index file": "Pilih file .index", - "Select the .npy file": "Pilih file .npy", - "Input device": "Alat input", - "Output device": "Perangkat keluaran", - "Audio device (please use the same type of driver)": "Perangkat audio (harap gunakan jenis driver yang sama)", - "Response threshold": "Ambang batas respons", - "Pitch settings": "Pengaturan nada", - "Whether to use note names instead of their hertz value. E.G. [C5, D6] instead of [523.25, 1174.66]Hz": "Apakah akan menggunakan nama nada dan bukan nilai hertznya. MISALNYA. [C5, D6] bukannya [523.25, 1174.66]Hz", - "Index Rate": "Tingkat Indeks", - "General settings": "Pengaturan Umum", - "Sample length": "Panjang sampel", - "Fade length": "Panjang pudar", - "Extra inference time": "Waktu inferensi ekstra", - "Input noise reduction": "Pengurangan kebisingan masukan", - "Output noise reduction": "Pengurangan kebisingan keluaran", - "Performance settings": "Pengaturan kinerja", - "Start audio conversion": "Mulai konversi audio", - "Stop audio conversion": "Hentikan konversi audio", - "Inference time (ms):": "Waktu inferensi (ms):", - "Select the pth file": "Pilih file pth", - "Select the .index file:": "Pilih file indeks", - "The hubert model path must not contain Chinese characters": "Jalur model hubert tidak boleh berisi karakter China", - "The pth file path must not contain Chinese characters.": "Jalur file pth tidak boleh berisi karakter Cina.", - "The index file path must not contain Chinese characters.": "Jalur file indeks tidak boleh berisi karakter Cina.", - "Step algorithm": "Algoritma langkah", - "Number of epoch processes": "Jumlah proses zaman", - "Lowest points export": "Ekspor poin terendah", - "How many lowest points to save:": "Berapa banyak poin terendah yang harus disimpan", - "Export lowest points of a model": "Ekspor titik terendah suatu model", - "Output models:": "Model keluaran", - "Stats of selected models:": "Statistik model yang dipilih", - "Custom f0 [Root pitch] File": "File f0 [Root pitch] khusus", - "Min pitch:": "nada minimal", - "Specify minimal pitch for inference [HZ]": "Tentukan nada minimal untuk inferensi [HZ]", - "Specify minimal pitch for inference [NOTE][OCTAVE]": "Tentukan nada minimal untuk inferensi [CATATAN][OCTAVE]", - "Max pitch:": "Nada maksimal", - "Specify max pitch for inference [HZ]": "Tentukan nada maksimal untuk inferensi [HZ]", - "Specify max pitch for inference [NOTE][OCTAVE]": "Tentukan nada maksimal untuk inferensi [CATATAN][OCTAVE]", - "Browse presets for formanting": "Telusuri preset untuk pembentukan", - "Presets are located in formantshiftcfg/ folder": "Preset terletak di folder formantshiftcfg/", - "Default value is 1.0": "Nilai defaultnya adalah 1,0", - "Quefrency for formant shifting": "Quefrency untuk pergeseran formant", - "Timbre for formant shifting": "Timbre untuk pergeseran formant", - "Apply": "Menerapkan", - "Single": "Lajang", - "Batch": "Kelompok", - "Separate YouTube tracks": "Pisahkan trek YouTube", - "Download audio from a YouTube video and automatically separate the vocal and instrumental tracks": "Unduh audio dari video YouTube dan pisahkan trek vokal dan instrumental secara otomatis", - "Extra": "Tambahan", - "Merge": "Menggabungkan", - "Merge your generated audios with the instrumental": "Gabungkan audio yang Anda hasilkan dengan instrumental", - "Choose your instrumental:": "Pilih instrumen Anda", - "Choose the generated audio:": "Pilih audio yang dihasilkan", - "Combine": "Menggabungkan", - "Download and Separate": "Unduh dan Pisahkan", - "Enter the YouTube link:": "Masukkan tautan youtube", - "This section contains some extra utilities that often may be in experimental phases": "Bagian ini berisi beberapa utilitas tambahan yang mungkin sering berada dalam tahap percobaan", - "Merge Audios": "Gabungkan Audio", - "Audio files have been moved to the 'audios' folder.": "File audio telah dipindahkan ke folder 'audios'.", - "Downloading audio from the video...": "Mengunduh audio dari video...", - "Audio downloaded!": "Unduhan audio!", - "An error occurred:": "Terjadi kesalahan:", - "Separating audio...": "Memisahkan audio...", - "File moved successfully.": "File berhasil dipindahkan.", - "Finished!": "Selesai!", - "The source file does not exist.": "File sumber tidak ada.", - "Error moving the file:": "Kesalahan saat memindahkan file:", - "Downloading {name} from drive": "Mengunduh {name} dari drive", - "The attempt to download using Drive didn't work": "Upaya mengunduh menggunakan Drive tidak berhasil", - "Error downloading the file: {str(e)}": "Kesalahan saat mengunduh berkas: {str(e)}", - "Downloading {name} from mega": "Mengunduh {name} dari mega", - "Downloading {name} from basic url": "Mengunduh {name} dari url dasar", - "Download Audio": "Unduh Audio", - "Download audios of any format for use in inference (recommended for mobile users).": "Mengunduh audio dalam format apa pun untuk digunakan dalam inferensi (disarankan untuk pengguna seluler)", - "Any ConnectionResetErrors post-conversion are irrelevant and purely visual; they can be ignored.\n": "Setiap ConnectionResetErrors pasca-konversi tidak relevan dan murni visual; mereka dapat diabaikan.", - "Processed audio saved at: ": "Audio yang diproses disimpan di:", - "Conversion complete!": "Konversi selesai!", - "Reverb": "Berkumandang", - "Compressor": "Kompresor", - "Noise Gate": "Gerbang Kebisingan", - "Volume": "Volume", - "Drag the audio here and click the Refresh button": "Seret audio ke sini dan klik tombol Refresh", - "Select the generated audio": "Pilih audio yang dihasilkan", - "Volume of the instrumental audio:": "Volume audio instrumental", - "Volume of the generated audio:": "Volume audio yang dihasilkan", - "### Add the effects": "### Tambahkan efeknya", - "Starting audio conversion... (This might take a moment)": "Memulai konversi audio... (Ini mungkin memerlukan waktu sebentar)", - "TTS Model:": "Suara TTS", - "TTS": "TTS", - "TTS Method:": "Metode TTS", - "Audio TTS:": "Audio TTS:", - "Audio RVC:": "Model Audio" -} diff --git a/i18n/locale/it_IT.json b/i18n/locale/it_IT.json deleted file mode 100644 index 70afb3f72c1ff512aaf613c2d42d302fc77722c9..0000000000000000000000000000000000000000 --- a/i18n/locale/it_IT.json +++ /dev/null @@ -1,252 +0,0 @@ -{ - "Unfortunately, there is no compatible GPU available to support your training.": "Purtroppo non è disponibile una GPU compatibile per supportare l'addestramento.", - "Yes": "Sì", - "Select your dataset:": "Seleziona il tuo dataset:", - "Update list": "Aggiorna la lista", - "Download Model": "Scarica il modello", - "Download Backup": "Scarica il backup", - "Download Dataset": "Scarica il dataset", - "Download": "Scarica", - "Url:": "Link:", - "Build the index before saving.": "Genera l'indice prima di salvarlo.", - "Save your model once the training ends.": "Salva il modello una volta terminato il training.", - "Save type": "Metodo di salvataggio:", - "Save model": "Salva modello", - "Choose the method": "Scegli il metodo", - "Save all": "Salva tutto", - "Save D and G": "Salva i file G e D", - "Save voice": "Salva il modello", - "Downloading the file: ": "Scaricamento del file: ", - "Stop training": "Interrompi training", - "Too many users have recently viewed or downloaded this file": "Troppi utenti hanno visto o scaricato di recente questo file", - "Cannot get file from this private link": "Impossibile ottenere il file, il link è privato", - "Full download": "Download completato", - "An error occurred downloading": "Si è verificato un errore durante il download", - "Model saved successfully": "Modello salvato con successo", - "Saving the model...": "Salvando il modello...", - "Saved without index...": "Salvataggio senza file .index...", - "Saved without inference model...": "Salvataggio senza modello di inferenza...", - "An error occurred saving the model": "Si è verificato un errore durante il salvataggio del modello", - "The model you want to save does not exist, be sure to enter the correct name.": "Il modello che vuoi salvare non esiste, assicurati di inserire il nome corretto.", - "The file could not be downloaded.": "Impossibile scaricare il file.", - "Unzip error.": "Estrazione non riuscita.", - "Path to your added.index file (if it didn't automatically find it)": "Percorso del tuo file added.index (se non l'ha trovato automaticamente)", - "It has been downloaded successfully.": "Scaricato con successo.", - "Proceeding with the extraction...": "Proseguo con l'estrazione...", - "The Backup has been uploaded successfully.": "Il backup è stato caricato correttamente.", - "The Dataset has been loaded successfully.": "Il dataset è stato caricato correttamente.", - "The Model has been loaded successfully.": "Il modello è stato caricato correttamente.", - "It is used to download your inference models.": "Serve per scaricare i suoi modelli di inferenza.", - "It is used to download your training backups.": "Serve per scaricare i backup degi training.", - "Download the dataset with the audios in a compatible format (.wav/.flac) to train your model.": "Scarica il dataset con gli audio in un formato compatibile (.wav/.flac) per trainare il tuo modello.", - "No relevant file was found to upload.": "Non è stato trovato alcun file rilevante da caricare.", - "The model works for inference, and has the .index file.": "Il modello funziona per l'inferenza ed ha il file .index.", - "The model works for inference, but it doesn't have the .index file.": "Il modello funziona per l'inferenza, ma non ha il file .index.", - "This may take a few minutes, please wait...": "Potrebbe richiedere alcuni minuti, attendere per favore.", - "Resources": "Risorse", - "Step 1: Processing data": "Fase 1: Elaborazione dei dati", - "Step 2: Skipping pitch extraction": "Fase 2: Estrazione del pitch", - "Step 3: Extracting features": "Fase 3: Estrazione delle caratteristiche", - "Step 4: Model training started": "Fase 4: Training del modello", - "Step 5: Export lowest points on a graph of the model": "Fase 5: Esportare i punti più bassi su un grafico del modello", - "Training is done, check train.log": "Il training è terminato, controlla train.log.", - "All processes have been completed!": "Tutti i processi sono stati completati!", - "Model Inference": "Inferenza del modello", - "Inferencing voice:": "Modello vocale:", - "Model_Name": "Nome_Modello", - "Dataset_Name": "Nome_Dataset", - "Whether the model has pitch guidance.": "Indica se il modello ha una guida tonale.", - "Whether to save only the latest .ckpt file to save hard drive space": "Indica se salvare solo l'ultimo file .ckpt per risparmiare spazio sul disco rigido", - "Cache all training sets to GPU memory. Caching small datasets (less than 10 minutes) can speed up training": "La memorizzazione nella cache di piccoli dataset (meno di 10 minuti) può accelerare l'allenamento", - "Save a small final model to the 'weights' folder at each save point": "Salva un piccolo modello finale nella cartella 'weights' in ogni punto di salvataggio", - "Refresh": "Aggiorna la lista dei modelli, il percorso del file .index e gli audio", - "Unload voice to save GPU memory": "Rimuovi modelli per risparmiare memoria GPU", - "Select Speaker/Singer ID:": "Seleziona ID della persona che parla o del cantante:", - "Transpose (integer, number of semitones, raise by an octave: 12, lower by an octave: -12):": "Trasporre (numero intero, numero di semitoni, per alzare di un'ottava: 12, per scendere di un'ottava: -12):", - "Recommended +12 key for male to female conversion, and -12 key for female to male conversion. If the sound range goes too far and the voice is distorted, you can also adjust it to the appropriate range by yourself.": "Si consiglia +12 per la conversione da uomo a donna e -12 per la conversione da donna a uomo. Se la gamma sonora va troppo oltre e la voce è distorta, puoi anche regolarla tu stesso nella gamma appropriata.", - "Enter the path of the audio file to be processed (default is the correct format example):": "Inserisci il percorso del file audio da elaborare (l'esempio di formato corretto è quello predefinito):", - "Select the pitch extraction algorithm:": "Selezionare l'algoritmo di estrazione del pitch:", - "Mangio-Crepe Hop Length (Only applies to mangio-crepe): Hop length refers to the time it takes for the speaker to jump to a dramatic pitch. Lower hop lengths take more time to infer but are more pitch accurate.": "Lunghezza di salto di Mangio-Crepe (si applica solo a mangio-crepe): la lunghezza di salto si riferisce al tempo impiegato dal parlante per saltare in una tonalità drammatica. Le lunghezze di salto più basse richiedono più tempo per essere dedotte, ma sono più precise nel tono.", - "Feature search dataset file path": "Percorso del file del dataset di ricerca delle caratteristiche", - "If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness.": "Se >=3: applica un filtro di media usati con il metodo di tonalità harvest. Il valore rappresenta il raggio del filtro e può ridurre la traspirazione.", - "Path to the feature index file. Leave blank to use the selected result from the dropdown:": "Percorso al file .index. Lasciarlo vuoto per utilizzare il risultato selezionato dal menu a tendina:", - "Auto-detect index path and select from the dropdown:": "Rilevare automaticamente il percorso del file .index e selezionare dal menu a tendina:", - "Path to feature file:": "Percorso al file delle caratteristiche:", - "Search feature ratio:": "Proporzione della caratteristiche di ricerca:", - "Resample the output audio in post-processing to the final sample rate. Set to 0 for no resampling:": "Ricampionare l'audio in uscita in post-elaborazione alla frequenza di campionamento finale. Impostare a 0 per non campionare di nuovo:", - "Use the volume envelope of the input to replace or mix with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is used:": "Utilizzare l'inviluppo del volume dell'ingresso per sostituire o mescolare con l'inviluppo del volume dell'uscita. Più il rapporto è vicino a 1, più verrà utilizzato l'inviluppo di uscita:", - "Protect voiceless consonants and breath sounds to prevent artifacts such as tearing in electronic music. Set to 0.5 to disable. Decrease the value to increase protection, but it may reduce indexing accuracy:": "Proteggi le consonanti sorde e i suoni del respiro per evitare artefatti come la lacerazione nella musica elettronica. Impostare su 0.5 per disattivare. Diminuire il valore per aumentare la protezione, ma può ridurre la precisione dell'indicizzazione:", - "F0 curve file (optional). One pitch per line. Replaces the default F0 and pitch modulation:": "File curva F0 (opzionale). Un passo per riga. Sostituisce la modulazione di passo e F0 di default:", - "Convert": "Conversione", - "Output information:": "Informazioni in uscita", - "Export audio (click on the three dots in the lower right corner to download)": "Esporta audio (clicca sui tre puntini nell'angolo in basso a destra per scaricare)", - "Batch conversion. Enter the folder containing the audio files to be converted or upload multiple audio files. The converted audio will be output in the specified folder (default: 'opt').": "Conversione batch. Inserire la cartella contenente i file audio da convertire o caricare più file audio. L'audio convertito verrà emesso nella cartella specificata (default: 'opt').", - "Specify output folder:": "Specifica cartella di output:", - "Enter the path of the audio folder to be processed (copy it from the address bar of the file manager):": "Inserire il percorso della cartella audio da elaborare (copiarla dalla barra degli indirizzi del file manager):", - "You can also input audio files in batches. Choose one of the two options. Priority is given to reading from the folder.": "Puoi anche inserire file audio in batch. Scegli una delle due opzioni. Viene data priorità alla lettura della cartella.", - "Export file format:": "Formato file di esportazione:", - "UVR5": "UVR5", - "Enter the path of the audio folder to be processed:": "Inserire il percorso della cartella audio da elaborare:", - "Model:": "Modello:", - "Vocal Extraction Aggressive": "Estrazione vocale aggressiva", - "Specify the output folder for vocals:": "Specificare la cartella di output per le voci:", - "Specify the output folder for accompaniment:": "Specificare la cartella di uscita per l'accompagnamento:", - "Train": "Addestramento", - "Enter the model name:": "Inserisci il nome del modello:", - "Target sample rate:": "Tasso di campionamento target:", - "Whether the model has pitch guidance (required for singing, optional for speech):": "Se il modello ha una guida di pitch (richiesto per cantare, opzionale per parlare):", - "Version:": "Versione:", - "Number of CPU processes:": "Numero di processi della CPU:", - "Enter the path of the training folder:": "Inserire il percorso della cartella del training:", - "Specify the model ID:": "Specificare l'ID del modello:", - "Auto detect audio path and select from the dropdown:": "Rileva automaticamente il percorso audio e seleziona dal menu a tendina:", - "Add audio's name to the path to the audio file to be processed (default is the correct format example) Remove the path to use an audio from the dropdown list:": "Aggiungere il nome dell'audio al percorso del file audio da elaborare (l'esempio di formato corretto è quello predefinito) Eliminare il percorso per utilizzare un audio dall'elenco a discesa:", - "Advanced Settings": "Impostazioni avanzate", - "Settings": "Impostazioni", - "Status:": "Stato:", - "Process data": "Elabora dati", - "Drag your audio here:": "Trascina il tuo audio qui:", - "Or record an audio:": "Oppure registra un audio:", - "Formant shift inference audio": "Audio di inferenza di spostamento formante", - "Used for male to female and vice-versa conversions": "Viene utilizzato per le conversioni da uomo a donna e viceversa", - "Provide the GPU index(es) separated by '-', like 0-1-2 for using GPUs 0, 1, and 2:": "Fornire gli indici GPU separati da '-', come 0-1-2 per utilizzare le GPU 0, 1 e 2:", - "GPU Information:": "Informazioni GPU:", - "Feature extraction": "Estrazione delle caratteristiche", - "Save frequency:": "Frequenza di salvataggio:", - "Training epochs:": "Epoch di addestramento:", - "Batch size per GPU:": "Dimensione del lotto per GPU:", - "Save only the latest '.ckpt' file to save disk space:": "Salvare solo l'ultimo file '.ckpt' per risparmiare spazio su disco:", - "No": "No", - "Save a small final model to the 'weights' folder at each save point:": "Salvare un piccolo modello finale nella cartella \"pesi\" in ogni punto di salvataggio:", - "Load pre-trained base model G path:": "Carica percorso base modello G pre-allenato:", - "Load pre-trained base model D path:": "Percorso del modello D base di ricarica pre-allenata:", - "Train model": "Allena modello", - "Train feature index": "Allena l'indice delle caratteristiche", - "One-click training": "Allenamento con un clic", - "Processing": "Elaborazione", - "Model fusion, can be used to test timbre fusion": "Modello di fusione, può essere utilizzato per testare la fusione del timbro", - "Path to Model A:": "Percorso al Modello A:", - "Path to Model B:": "Percorso al Modello B:", - "Weight for Model A:": "Peso per il modello A:", - "Whether the model has pitch guidance:": "Indica se il modello ha una guida di tono:", - "Model information to be placed:": "Informazioni sul modello da mettere:", - "Name:": "Nome:", - "Model architecture version:": "Versione dell'architettura del modello:", - "Fusion": "Fusione", - "Modify model information": "Modifica informazioni modello", - "Path to Model:": "Percorso al modello:", - "Model information to be modified:": "Informazioni sul modello da modificare:", - "Save file name:": "Salva nome file:", - "Modify": "Modifica", - "View model information": "Visualizza informazioni sul modello", - "View": "Vedi", - "Model extraction": "Estrazione del modello", - "Whether the model has pitch guidance (1: yes, 0: no):": "Indica se il modello ha una guida di tono (1: sì, 0: no):", - "Extract": "Estrai", - "Export Onnx": "Esporta Onnx", - "RVC Model Path:": "Percorso del modello RVC:", - "Onnx Export Path:": "Percorso di esportazione:", - "MoeVS Model": "Modello MoeVS", - "Export Onnx Model": "Esporta modello", - "Load model": "Carica modello", - "Hubert Model": "Modello Hubert", - "Select the .pth file": "Seleziona il file .pth", - "Select the .index file": "Seleziona il file .index", - "Select the .npy file": "Seleziona il file .npy", - "Input device": "Dispositivo di input", - "Output device": "Dispositivo di output", - "Audio device (please use the same type of driver)": "Dispositivo audio (utilizzare lo stesso tipo di dispositivo)", - "Response threshold": "Soglia di risposta", - "Pitch settings": "Impostazioni di tonalità (pitch)", - "Whether to use note names instead of their hertz value. E.G. [C5, D6] instead of [523.25, 1174.66]Hz": "Indica se i nomi delle note devono essere utilizzati al posto del loro valore di hertz. AD ESEMPIO, [C5, D6] anziché [523,25, 1174,66]Hz", - "Index Rate": "Tasso dell'indice", - "General settings": "Impostazioni generali", - "Sample length": "Lunghezza campione", - "Fade length": "Lunghezza sbiadimento/fade", - "Extra inference time": "Tempo di inferenza aggiuntivo", - "Input noise reduction": "Riduzione del rumore in ingresso", - "Output noise reduction": "Riduzione del rumore in uscita", - "Performance settings": "Impostazioni delle prestazioni", - "Start audio conversion": "Avvia conversione audio", - "Stop audio conversion": "Interrompi la conversione audio", - "Inference time (ms):": "Tempo di inferenza (ms):", - "Select the pth file": "Seleziona il file .pth", - "Select the .index file:": "Seleziona il file .index", - "The hubert model path must not contain Chinese characters": "Il percorso del modello hubert non deve contenere caratteri cinesi", - "The pth file path must not contain Chinese characters.": "Il percorso del file pth non deve contenere caratteri cinesi.", - "The index file path must not contain Chinese characters.": "Il percorso del file index non deve contenere caratteri cinesi.", - "Step algorithm": "Algoritmo dei passi", - "Number of epoch processes": "Numero di processi dell'epoch", - "Lowest points export": "Esportazione dei punti più bassi", - "How many lowest points to save:": "Quanti punti bassi vuoi salvare:", - "Export lowest points of a model": "Esporta i punti più bassi di un modello", - "Output models:": "Modelli di uscita:", - "Stats of selected models:": "Statistiche dei modelli selezionati:", - "Custom f0 [Root pitch] File": "File personalizzato f0 [Root pitch]", - "Min pitch:": "Tonalità minima:", - "Feature search database file path:": "Percorso del file del database di ricerca delle caratteristiche:", - "Specify minimal pitch for inference [HZ]": "Specificare tonalità minima per l'inferenza [HZ]", - "Specify minimal pitch for inference [NOTE][OCTAVE]": "Specificare tonalità minima per l'inferenza [NOTA][OTTAVA]", - "Max pitch:": "Tonalità massima:", - "Specify max pitch for inference [HZ]": "Specificare tonalità massima per l'inferenza [HZ]", - "Specify max pitch for inference [NOTE][OCTAVE]": "Specificare tonalità massima per l'inferenza [NOTA][OTTAVA]", - "Browse presets for formanting": "Sfoglia i preset per il formante", - "Presets are located in formantshiftcfg/ folder": "I preset si trovano nella cartella /formantshiftcfg/", - "Default value is 1.0": "Il valore di default è 1.0", - "Quefrency for formant shifting": "Frequenza per spostamento formanti", - "Timbre for formant shifting": "Timbro per il format shifting", - "Apply": "Applica", - "Single": "Singola", - "Batch": "Batch", - "Separate YouTube tracks": "Separa tracce di YouTube", - "Download audio from a YouTube video and automatically separate the vocal and instrumental tracks": "Scarica l'audio di un video da YouTube e separa automaticamente le tracce vocali e strumentali.", - "Extra": "Altro", - "Merge": "Unisci", - "Merge your generated audios with the instrumental": "Combina i tuoi audio generati con la base strumentale", - "Choose your instrumental:": "Scegli la base strumentale:", - "Choose the generated audio:": "Scegli l'audio generato:", - "Combine": "Combina", - "Download and Separate": "Scaricare e separare", - "Enter the YouTube link:": "Inserisci il link di YouTube:", - "This section contains some extra utilities that often may be in experimental phases": "Questa sezione contiene alcune utility aggiuntive che spesso possono essere in fase sperimentale", - "Merge Audios": "Unisci audio", - "Audio files have been moved to the 'audios' folder.": "I file audio sono stati spostati nella cartella 'audios'.", - "Downloading audio from the video...": "Scaricamento audio del video in corso...", - "Audio downloaded!": "Audio scaricato!", - "An error occurred:": "Si è verificato un errore:", - "Separating audio...": "Separazione audio in corso...", - "File moved successfully.": "Il file è stato spostato correttamente", - "Finished!": "Finito!", - "The source file does not exist.": "Il file sorgente non esiste.", - "Error moving the file:": "Errore durante lo spostamento del file:", - "Downloading {name} from drive": "Download di {name} da Google Drive", - "The attempt to download using Drive didn't work": "Il tentativo di download con Drive non ha funzionato", - "Error downloading the file: {str(e)}": "Errore durante il download del file: {str(e)}", - "Downloading {name} from mega": "Download di {name} da MEGA", - "Downloading {name} from basic url": "Download di {name} dall'URL di base", - "Download Audio": "Scarica Audio", - "Download audios of any format for use in inference (recommended for mobile users).": "Scarica audio di qualsiasi formato per l'uso in inferenza (consigliato per utenti mobili).", - "Any ConnectionResetErrors post-conversion are irrelevant and purely visual; they can be ignored.\n": "Qualsiasi post-conversione di ConnectionResetErrors è irrilevante e puramente visiva; può essere ignorata.", - "Processed audio saved at: ": "Audio elaborato salvato in:", - "Conversion complete!": "Conversione completata", - "Reverb": "Riverbero", - "Compressor": "Compressore", - "Noise Gate": "Riduzione del Rumore", - "Volume": "Volume", - "Drag the audio here and click the Refresh button": "Trascina l'audio qui e fai clic sul pulsante Aggiorna", - "Select the generated audio": "Seleziona l'audio generato", - "Volume of the instrumental audio:": "Volume della base strumentale:", - "Volume of the generated audio:": "Volume dell'audio generato:", - "### Audio settings:": "### Impostazioni audio:", - "### Instrumental settings:": "### Impostazioni base strumentale:", - "### Add the effects:": "### Aggiungi gli effetti:", - "Name for saving": "Nome salvataggio", - "Path to model": "Percorso al modello", - "Model information to be placed": "Informazioni sul modello da modificare", - "Starting audio conversion... (This might take a moment)": "Avvio conversione audio... (Questo potrebbe richiedere un po' di tempo)", - "TTS Model:": "Voci TTS", - "TTS": "TTS", - "TTS Method:": "Metodo TTS", - "Audio TTS:": "Audio TTS:", - "Audio RVC:": "Modello Audio" -} diff --git a/i18n/locale/pt_PT.json b/i18n/locale/pt_PT.json deleted file mode 100644 index 1a08dded1bbc4cec458d01e355075cb2a7262093..0000000000000000000000000000000000000000 --- a/i18n/locale/pt_PT.json +++ /dev/null @@ -1,247 +0,0 @@ -{ - "Unfortunately, there is no compatible GPU available to support your training.": "Infelizmente, não há GPU compatível disponível para apoiar o seu treinamento.", - "Yes": "Sim", - "Select your dataset:": "Selecione seu conjunto de dados.", - "Update list": "Lista de atualização.", - "Download Model": "Baixar modelo", - "Download Backup": "Baixar cópia de segurança", - "Download Dataset": "Baixar conjunto de dados", - "Download": "Download", - "Url:": "URL:", - "Build the index before saving.": "Crie o índice antes de salvar.", - "Save your model once the training ends.": "Salve seu modelo quando o treinamento terminar.", - "Save type": "Salvar tipo", - "Save model": "Salvar modelo", - "Choose the method": "Escolha o método", - "Save all": "Salvar tudo", - "Save D and G": "Salve D e G", - "Save voice": "Salvar voz", - "Downloading the file: ": "Baixando o arquivo:", - "Stop training": "Pare de treinar", - "Too many users have recently viewed or downloaded this file": "Muitos usuários visualizaram ou baixaram este arquivo recentemente", - "Cannot get file from this private link": "Não é possível obter o arquivo deste link privado", - "Full download": "Download completo", - "An error occurred downloading": "Ocorreu um erro ao baixar", - "Model saved successfully": "Modelo salvo com sucesso", - "Saving the model...": "Salvando o modelo...", - "Saved without index...": "Salvo sem índice...", - "model_name": "nome_modelo", - "Saved without inference model...": "Salvo sem modelo de inferência...", - "An error occurred saving the model": "Ocorreu um erro ao salvar o modelo", - "The model you want to save does not exist, be sure to enter the correct name.": "O modelo que você deseja salvar não existe, certifique-se de inserir o nome correto.", - "The file could not be downloaded.": "O arquivo não pôde ser baixado.", - "Unzip error.": "Erro ao descompactar.", - "Path to your added.index file (if it didn't automatically find it)": "Caminho para o seu arquivo add.index (se não o encontrou automaticamente)", - "It has been downloaded successfully.": "Ele foi baixado com sucesso.", - "Proceeding with the extraction...": "Prosseguindo com a extração...", - "The Backup has been uploaded successfully.": "O backup foi carregado com sucesso.", - "The Dataset has been loaded successfully.": "O conjunto de dados foi carregado com sucesso.", - "The Model has been loaded successfully.": "O modelo foi carregado com sucesso.", - "It is used to download your inference models.": "Ele é usado para baixar seus modelos de inferência.", - "It is used to download your training backups.": "Ele é usado para baixar seus backups de treinamento.", - "Download the dataset with the audios in a compatible format (.wav/.flac) to train your model.": "Baixe o conjunto de dados com os áudios em formato compatível (.wav/.flac) para treinar seu modelo.", - "No relevant file was found to upload.": "Nenhum arquivo relevante foi encontrado para upload.", - "The model works for inference, and has the .index file.": "O modelo funciona para inferência e possui o arquivo .index.", - "The model works for inference, but it doesn't have the .index file.": "O modelo funciona para inferência, mas não possui o arquivo .index.", - "This may take a few minutes, please wait...": "Isso pode levar alguns minutos, aguarde...", - "Resources": "Recursos", - "Step 1: Processing data": "Etapa 1: Processamento de dados", - "Step 2: Skipping pitch extraction": "Passo 2a: Ignorando a extração do tom", - "Step 3: Extracting features": "Etapa 2b: Extraindo recursos", - "Step 4: Model training started": "Etapa 3a: treinamento do modelo iniciado", - "Step 5: Export lowest points on a graph of the model": "Etapa 4: Exportar os pontos mais baixos em um gráfico do modelo", - "Training is done, check train.log": "O treinamento foi concluído, verifique train.log", - "All processes have been completed!": "Todos os processos foram concluídos!", - "Model Inference": "Inferência de modelo", - "Inferencing voice:": "Inferência de voz:", - "Model_Name": "Nome_modelo", - "Dataset_Name": "Conjunto de dados_Nome", - "Whether the model has pitch guidance.": "Se o modelo tem orientação de pitch.", - "Whether to save only the latest .ckpt file to save hard drive space": "Se deseja salvar apenas o arquivo .ckpt mais recente para economizar espaço no disco rígido", - "Cache all training sets to GPU memory. Caching small datasets (less than 10 minutes) can speed up training": "Armazene em cache todos os conjuntos de treinamento na memória da GPU. Armazenar pequenos conjuntos de dados em cache (menos de 10 minutos) pode acelerar o treinamento", - "Save a small final model to the 'weights' folder at each save point": "Salve um pequeno modelo final na pasta 'pesos' em cada ponto de salvamento", - "Refresh": "Atualizar lista de voz, caminho de índice e arquivos de áudio", - "Unload voice to save GPU memory": "Descarregue a voz para economizar memória da GPU:", - "Select Speaker/Singer ID:": "Selecione o ID do palestrante/cantor:", - "Recommended +12 key for male to female conversion, and -12 key for female to male conversion. If the sound range goes too far and the voice is distorted, you can also adjust it to the appropriate range by yourself.": "Chave recomendada +12 para conversão de homem para mulher e chave -12 para conversão de mulher para homem. Se o alcance do som for muito longe e a voz estiver distorcida, você também poderá ajustá-lo para o alcance apropriado.", - "Transpose (integer, number Fof semitones, raise by an octave: 12, lower by an octave: -12):": "Transpor (inteiro, número de semitons, aumentar uma oitava: 12, diminuir uma oitava: -12):", - "Enter the path of the audio file to be processed (default is the correct format example):": "Digite o caminho do arquivo de áudio a ser processado (o padrão é o exemplo de formato correto):", - "Select the pitch extraction algorithm:": "Selecione o algoritmo de extração de pitch:", - "Mangio-Crepe Hop Length (Only applies to mangio-crepe): Hop length refers to the time it takes for the speaker to jump to a dramatic pitch. Lower hop lengths take more time to infer but are more pitch accurate.": "Comprimento do salto do Mangio-Crepe (aplica-se apenas ao mangio-crepe): A duração do salto refere-se ao tempo que leva para o locutor saltar para um tom dramático. Comprimentos de salto mais baixos levam mais tempo para serem inferidos, mas são mais precisos no tom.", - "Feature search dataset file path": "Caminho do arquivo do conjunto de dados de pesquisa de recursos", - "If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness.": "Se >=3: aplique filtragem mediana aos resultados de pitch colhidos. O valor representa o raio do filtro e pode reduzir a soprosidade.", - "Path to the feature index file. Leave blank to use the selected result from the dropdown:": "Caminho para o arquivo de índice de recursos. Deixe em branco para usar o resultado selecionado no menu suspenso:", - "Auto-detect index path and select from the dropdown:": "Detecte automaticamente o caminho do índice e selecione no menu suspenso", - "Path to feature file:": "Caminho para o arquivo de recurso:", - "Search feature ratio:": "Proporção de recursos de pesquisa:", - "Resample the output audio in post-processing to the final sample rate. Set to 0 for no resampling:": "Faça uma nova amostragem do áudio de saída no pós-processamento para a taxa de amostragem final. Defina como 0 para nenhuma reamostragem:", - "Use the volume envelope of the input to replace or mix with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is used:": "Use o envelope de volume da entrada para substituir ou mixar com o envelope de volume da saída. Quanto mais próxima a proporção estiver de 1, mais o envelope de saída será usado:", - "Protect voiceless consonants and breath sounds to prevent artifacts such as tearing in electronic music. Set to 0.5 to disable. Decrease the value to increase protection, but it may reduce indexing accuracy:": "Proteja consoantes surdas e sons respiratórios para evitar artefatos como lacrimejamento na música eletrônica. Defina como 0,5 para desativar. Diminua o valor para aumentar a proteção, mas poderá reduzir a precisão da indexação:", - "F0 curve file (optional). One pitch per line. Replaces the default F0 and pitch modulation:": "Arquivo de curva F0 (opcional). Um tom por linha. Substitui o F0 padrão e a modulação de pitch:", - "Convert": "Converter", - "Output information:": "Informações de saída", - "Export audio (click on the three dots in the lower right corner to download)": "Exportar áudio (clique nos três pontos no canto inferior direito para fazer o download)", - "Batch conversion. Enter the folder containing the audio files to be converted or upload multiple audio files. The converted audio will be output in the specified folder (default: 'opt').": "Conversão em lote. Entre na pasta que contém os arquivos de áudio a serem convertidos ou carregue vários arquivos de áudio. O áudio convertido será enviado para a pasta especificada (padrão: 'opt').", - "Specify output folder:": "Especifique a pasta de saída:", - "Enter the path of the audio folder to be processed (copy it from the address bar of the file manager):": "Digite o caminho da pasta de áudio a ser processada (copie-o da barra de endereço do gerenciador de arquivos):", - "You can also input audio files in batches. Choose one of the two options. Priority is given to reading from the folder.": "Você também pode inserir arquivos de áudio em lotes. Escolha uma das duas opções. É dada prioridade à leitura da pasta.", - "Export file format": "Exportar formato de arquivo", - "UVR5": "UVR5", - "Enter the path of the audio folder to be processed:": "Digite o caminho da pasta de áudio a ser processada:", - "Model": "Modelo", - "Vocal Extraction Aggressive": "Extração Vocal Agressiva", - "Specify the output folder for vocals:": "Especifique a pasta de saída para vocais:", - "Specify the output folder for accompaniment:": "Especifique a pasta de saída para acompanhamento:", - "Train": "Trem", - "Enter the model name:": "Digite o nome do modelo:", - "Target sample rate:": "Taxa de amostragem desejada:", - "Whether the model has pitch guidance (required for singing, optional for speech):": "Se o modelo possui orientação de tom (obrigatório para canto, opcional para fala):", - "Version": "Versão", - "Number of CPU processes:": "Número de processos de CPU usados para extração de pitch e processamento de dados:", - "Enter the path of the training folder:": "Digite o caminho da pasta de treinamento:", - "Specify the model ID:": "Especifique o ID do modelo:", - "Auto detect audio path and select from the dropdown:": "Detecte automaticamente o caminho de áudio e selecione no menu suspenso:", - "Add audio's name to the path to the audio file to be processed (default is the correct format example) Remove the path to use an audio from the dropdown list:": "Adicione o nome do áudio ao caminho do arquivo de áudio a ser processado (o padrão é o exemplo de formato correto) Remova o caminho para usar um áudio da lista suspensa:", - "Advanced Settings": "Configurações avançadas", - "Settings": "Configurações", - "Status:": "Status:", - "Process data": "Processar dados", - "Drag your audio here:": "Arraste seu áudio aqui", - "Or record an audio:": "Ou grave um áudio.", - "Formant shift inference audio": "Áudio de inferência de mudança de formante", - "Used for male to female and vice-versa conversions": "Usado para conversões de homem para mulher e vice-versa", - "Provide the GPU index(es) separated by '-', like 0-1-2 for using GPUs 0, 1, and 2:": "Forneça os índices de GPU separados por '-', como 0-1-2 para usar GPUs 0, 1 e 2:", - "GPU Information:": "Informações da GPU", - "Feature extraction": "Extração de recursos", - "Save frequency:": "Salvar frequência:", - "Training epochs:": "Épocas de treinamento:", - "Batch size per GPU:": "Tamanho do lote por GPU:", - "Save only the latest '.ckpt' file to save disk space:": "Salve apenas o arquivo '.ckpt' mais recente para economizar espaço em disco:", - "No": "Não", - "Save a small final model to the 'weights' folder at each save point:": "Salve um pequeno modelo final na pasta 'pesos' em cada ponto de salvamento:", - "Load pre-trained base model G path:": "Carregar caminho G do modelo base pré-treinado:", - "Load pre-trained base model D path:": "Carregar caminho D do modelo base pré-treinado:", - "Train model": "Modelo de trem", - "Train feature index": "Índice de recursos de trem", - "One-click training": "Treinamento com um clique", - "Processing": "Em processamento", - "Model fusion, can be used to test timbre fusion": "Fusão de modelos, pode ser usada para testar a fusão de timbres", - "Path to Model A:": "Caminho para o modelo A:", - "Path to Model B:": "Caminho para o modelo B:", - "Weight for Model A:": "Peso para o Modelo A:", - "Whether the model has pitch guidance:": "Se o modelo tem orientação de pitch:", - "Model information to be placed:": "Informações do modelo a ser colocado:", - "Model architecture version:": "Versão da arquitetura do modelo:", - "Fusion": "Fusão", - "Modify model information": "Modificar informações do modelo", - "Path to Model:": "Caminho para o modelo:", - "Model information to be modified:": "Informações do modelo a serem modificadas:", - "Save file name:": "Salvar nome do arquivo:", - "Modify": "Modificar", - "View model information": "Ver informações do modelo", - "View": "Visualizar", - "Model extraction": "Extração de modelo (insira o caminho do modelo de arquivo grande na pasta 'logs'). Isso é útil se você quiser interromper o treinamento no meio e extrair e salvar manualmente um arquivo de modelo pequeno, ou se quiser testar um modelo intermediário:", - "Name:": "Salvar nome:", - "Whether the model has pitch guidance (1: yes, 0: no):": "Se o modelo possui orientação de pitch (1: sim, 0: não):", - "Extract": "Extrair", - "Export Onnx": "Exportar Onnx", - "RVC Model Path:": "Caminho do modelo RVC:", - "Onnx Export Path:": "Caminho de exportação Onnx:", - "MoeVS Model": "Modelo MoeVS", - "Export Onnx Model": "Exportar modelo Onnx", - "Load model": "Modelo de carga", - "Hubert Model": "Modelo Hubert", - "Select the .pth file": "Selecione o arquivo .pth", - "Select the .index file": "Selecione o arquivo .index", - "Select the .npy file": "Selecione o arquivo .npy", - "Input device": "Dispositivo de entrada", - "Output device": "Dispositivo de saída", - "Audio device (please use the same type of driver)": "Dispositivo de áudio (use o mesmo tipo de driver)", - "Response threshold": "Limite de resposta", - "Pitch settings": "Configurações de tom", - "Whether to use note names instead of their hertz value. E.G. [C5, D6] instead of [523.25, 1174.66]Hz": "Se deve usar nomes de notas em vez de seu valor em hertz. POR EXEMPLO. [C5, D6] em vez de [523,25, 1174,66] Hz", - "Index Rate": "Taxa de índice", - "General settings": "Configurações Gerais", - "Sample length": "Comprimento da amostra", - "Fade length": "Comprimento do esmaecimento", - "Extra inference time": "Tempo extra de inferência", - "Input noise reduction": "Redução de ruído de entrada", - "Output noise reduction": "Redução de ruído de saída", - "Performance settings": "Configurações de desempenho", - "Start audio conversion": "Iniciar conversão de áudio", - "Stop audio conversion": "Pare a conversão de áudio", - "Inference time (ms):": "Tempo de inferência (ms):", - "Select the pth file": "Selecione o arquivo pth", - "Select the .index file:": "Selecione o arquivo de índice", - "The hubert model path must not contain Chinese characters": "O caminho do modelo Hubert não deve conter caracteres chineses", - "The pth file path must not contain Chinese characters.": "O caminho do arquivo pth não deve conter caracteres chineses.", - "The index file path must not contain Chinese characters.": "O caminho do arquivo de índice não deve conter caracteres chineses.", - "Step algorithm": "Algoritmo de etapas", - "Number of epoch processes": "Número de processos de época", - "Lowest points export": "Exportação de pontos mais baixos", - "How many lowest points to save:": "Quantos pontos mais baixos salvar", - "Export lowest points of a model": "Exportar os pontos mais baixos de um modelo", - "Output models:": "Modelos de saída", - "Stats of selected models:": "Estatísticas dos modelos selecionados", - "Custom f0 [Root pitch] File": "Arquivo f0 [inclinação da raiz] personalizado", - "Min pitch:": "Passo mínimo", - "Specify minimal pitch for inference [HZ]": "Especifique o tom mínimo para inferência [HZ]", - "Specify minimal pitch for inference [NOTE][OCTAVE]": "Especifique o tom mínimo para inferência [NOTA][OCTAVE]", - "Max pitch:": "Tom máximo", - "Specify max pitch for inference [HZ]": "Especifique o tom máximo para inferência [HZ]", - "Specify max pitch for inference [NOTE][OCTAVE]": "Especifique o tom máximo para inferência [NOTE][OCTAVE]", - "Browse presets for formanting": "Procure predefinições para formatação", - "Presets are located in formantshiftcfg/ folder": "As predefinições estão localizadas na pasta formantshiftcfg/", - "Default value is 1.0": "O valor padrão é 1,0", - "Quefrency for formant shifting": "Quefrency para mudança de formantes", - "Timbre for formant shifting": "Timbre para mudança de formantes", - "Apply": "Aplicar", - "Single": "Solteiro", - "Batch": "Lote", - "Separate YouTube tracks": "Faixas separadas do YouTube", - "Download audio from a YouTube video and automatically separate the vocal and instrumental tracks": "Baixe o áudio de um vídeo do YouTube e separe automaticamente as faixas vocais e instrumentais", - "Extra": "Extra", - "Merge": "Mesclar", - "Merge your generated audios with the instrumental": "Mescle seus áudios gerados com o instrumental", - "Choose your instrumental:": "Escolha seu instrumental", - "Choose the generated audio:": "Escolha o áudio gerado", - "Combine": "Combinar", - "Download and Separate": "Baixe e separe", - "Enter the YouTube link:": "Digite o link do youtube", - "This section contains some extra utilities that often may be in experimental phases": "Esta seção contém alguns utilitários extras que muitas vezes podem estar em fases experimentais", - "Merge Audios": "Mesclar áudios", - "Audio files have been moved to the 'audios' folder.": "Os arquivos de áudio foram movidos para a pasta ‘audios’.", - "Downloading audio from the video...": "Baixando o áudio do vídeo...", - "Audio downloaded!": "Baixar áudio!", - "An error occurred:": "Um erro ocorreu:", - "Separating audio...": "Separando áudio...", - "File moved successfully.": "Arquivo movido com sucesso.", - "Finished!": "Finalizado!", - "The source file does not exist.": "O arquivo de origem não existe.", - "Error moving the file:": "Erro ao mover o arquivo:", - "Downloading {name} from drive": "Baixando {name} da unidade", - "The attempt to download using Drive didn't work": "A tentativa de download usando o Drive não funcionou", - "Error downloading the file: {str(e)}": "Erro ao baixar o arquivo: {str(e)}", - "Downloading {name} from mega": "Baixando {nome} do mega", - "Downloading {name} from basic url": "Baixando {nome} do URL básico", - "Download Audio": "Baixar áudio", - "Download audios of any format for use in inference (recommended for mobile users).": "Baixe áudios de qualquer formato para uso em inferência (recomendado para usuários móveis)", - "Any ConnectionResetErrors post-conversion are irrelevant and purely visual; they can be ignored.\n": "Qualquer ConnectionResetErrors pós-conversão é irrelevante e puramente visual; eles podem ser ignorados.", - "Processed audio saved at: ": "Áudio processado salvo em:", - "Conversion complete!": "Conversão concluída!", - "Reverb": "Ressonância", - "Compressor": "Compressor", - "Noise Gate": "Portão de Ruído", - "Volume": "Volume", - "Drag the audio here and click the Refresh button": "Arraste o áudio aqui e clique no botão Atualizar", - "Select the generated audio": "Selecione o áudio gerado", - "Volume of the instrumental audio:": "Volume do áudio instrumental", - "Volume of the generated audio:": "Volume do áudio gerado", - "### Add the effects": "### Adicione os efeitos", - "Starting audio conversion... (This might take a moment)": "Iniciando a conversão de áudio... (Isso pode levar um tempo)", - "TTS Model:": "Vozes TTS", - "TTS": "TTS", - "TTS Method:": "Método TTS", - "Audio TTS:": "Áudio TTS", - "Audio RVC:": "Modelo de Áudio" -} diff --git a/i18n/locale/ru_RU.json b/i18n/locale/ru_RU.json deleted file mode 100644 index dc4990659b3d068f039047cc3671d8e6cbee2401..0000000000000000000000000000000000000000 --- a/i18n/locale/ru_RU.json +++ /dev/null @@ -1,247 +0,0 @@ -{ - "Unfortunately, there is no compatible GPU available to support your training.": "К сожалению, для вашего обучения не существует совместимого графического процессора.", - "Yes": "Да", - "Select your dataset:": "Выберите свой набор данных.", - "Update list": "Обновить список.", - "Download Model": "Скачать модель", - "Download Backup": "Скачать резервную копию", - "Download Dataset": "Скачать набор данных", - "Download": "Скачать", - "Url:": "URL:", - "Build the index before saving.": "Создайте индекс перед сохранением.", - "Save your model once the training ends.": "Сохраните свою модель после окончания обучения.", - "Save type": "Тип сохранения", - "Save model": "Сохранить модель", - "Choose the method": "Выберите метод", - "Save all": "Сохранить все", - "Save D and G": "Спасите D и G", - "Save voice": "Сохранить голос", - "Downloading the file: ": "Скачиваем файл:", - "Stop training": "Прекратить тренировку", - "Too many users have recently viewed or downloaded this file": "Слишком много пользователей недавно просмотрели или скачали этот файл.", - "Cannot get file from this private link": "Невозможно получить файл по этой частной ссылке", - "Full download": "Полная загрузка", - "An error occurred downloading": "Произошла ошибка при загрузке", - "Model saved successfully": "Модель успешно сохранена", - "Saving the model...": "Сохраняем модель...", - "Saved without index...": "Сохранено без индекса...", - "model_name": "название модели", - "Saved without inference model...": "Сохранено без модели вывода...", - "An error occurred saving the model": "Произошла ошибка при сохранении модели.", - "The model you want to save does not exist, be sure to enter the correct name.": "Модель, которую вы хотите сохранить, не существует. Обязательно введите правильное имя.", - "The file could not be downloaded.": "Не удалось загрузить файл.", - "Unzip error.": "Ошибка разархивирования.", - "Path to your added.index file (if it didn't automatically find it)": "Путь к файлу add.index (если он не был найден автоматически)", - "It has been downloaded successfully.": "Он был успешно загружен.", - "Proceeding with the extraction...": "Приступаем к извлечению...", - "The Backup has been uploaded successfully.": "Резервная копия успешно загружена.", - "The Dataset has been loaded successfully.": "Набор данных успешно загружен.", - "The Model has been loaded successfully.": "Модель успешно загружена.", - "It is used to download your inference models.": "Он используется для загрузки ваших моделей вывода.", - "It is used to download your training backups.": "Он используется для загрузки резервных копий тренировок.", - "Download the dataset with the audios in a compatible format (.wav/.flac) to train your model.": "Загрузите набор данных со звуками в совместимом формате (.wav/.flac), чтобы обучить свою модель.", - "No relevant file was found to upload.": "Не найден соответствующий файл для загрузки.", - "The model works for inference, and has the .index file.": "Модель работает для вывода и имеет файл .index.", - "The model works for inference, but it doesn't have the .index file.": "Модель работает для вывода, но у нее нет файла .index.", - "This may take a few minutes, please wait...": "Это может занять несколько минут, пожалуйста, подождите...", - "Resources": "Ресурсы", - "Step 1: Processing data": "Шаг 1: Обработка данных", - "Step 2: Skipping pitch extraction": "Шаг 2а: Пропуск извлечения высоты тона", - "Step 3: Extracting features": "Шаг 2б: Извлечение объектов", - "Step 4: Model training started": "Шаг 3а: Начало обучения модели", - "Step 5: Export lowest points on a graph of the model": "Шаг 4. Экспортируйте самые низкие точки на графике модели.", - "Training is done, check train.log": "Обучение завершено, проверьте train.log", - "All processes have been completed!": "Все процессы завершены!", - "Model Inference": "Вывод модели", - "Inferencing voice:": "Выводящий голос:", - "Model_Name": "Название модели", - "Dataset_Name": "Имя_набора данных", - "Whether the model has pitch guidance.": "Имеет ли модель наведение по тангажу.", - "Whether to save only the latest .ckpt file to save hard drive space": "Сохранять ли только последний файл .ckpt для экономии места на жестком диске", - "Cache all training sets to GPU memory. Caching small datasets (less than 10 minutes) can speed up training": "Кэшируйте все обучающие наборы в память графического процессора. Кэширование небольших наборов данных (менее 10 минут) может ускорить обучение.", - "Save a small final model to the 'weights' folder at each save point": "Сохраняйте небольшую окончательную модель в папке «веса» в каждой точке сохранения.", - "Refresh": "Обновить список голосов, индексный путь и аудиофайлы.", - "Unload voice to save GPU memory": "Выгрузите голос, чтобы сэкономить память графического процессора:", - "Select Speaker/Singer ID:": "Выберите идентификатор докладчика/певца:", - "Recommended +12 key for male to female conversion, and -12 key for female to male conversion. If the sound range goes too far and the voice is distorted, you can also adjust it to the appropriate range by yourself.": "Рекомендуемый ключ +12 для преобразования мужчины в женщину и ключ -12 для преобразования женщины в мужчину. Если звуковой диапазон заходит слишком далеко и голос искажается, вы также можете самостоятельно настроить его на соответствующий диапазон.", - "Transpose (integer, number Fof semitones, raise by an octave: 12, lower by an octave: -12):": "Транспонирование (целое число, количество полутонов, повышение на октаву: 12, понижение на октаву: -12):", - "Enter the path of the audio file to be processed (default is the correct format example):": "Введите путь к аудиофайлу, который необходимо обработать (по умолчанию — правильный пример формата):", - "Select the pitch extraction algorithm:": "Выберите алгоритм извлечения высоты звука:", - "Mangio-Crepe Hop Length (Only applies to mangio-crepe): Hop length refers to the time it takes for the speaker to jump to a dramatic pitch. Lower hop lengths take more time to infer but are more pitch accurate.": "Длина прыжка с манжио-крепом (применяется только к крепу с манжио): длина прыжка означает время, необходимое говорящему, чтобы перейти на драматический тон. Для определения более низкой длины скачка требуется больше времени, но они более точны по высоте.", - "Feature search dataset file path": "Путь к файлу набора данных поиска объектов", - "If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness.": "Если >=3: применить медианную фильтрацию к собранным результатам высоты тона. Значение представляет собой радиус фильтра и может уменьшить одышку.", - "Path to the feature index file. Leave blank to use the selected result from the dropdown:": "Путь к индексному файлу объекта. Оставьте поле пустым, чтобы использовать выбранный результат из раскрывающегося списка:", - "Auto-detect index path and select from the dropdown:": "Автоматическое определение пути к индексу и выбор из раскрывающегося списка.", - "Path to feature file:": "Путь к файлу объекта:", - "Search feature ratio:": "Соотношение функций поиска:", - "Resample the output audio in post-processing to the final sample rate. Set to 0 for no resampling:": "Повторно дискретизируйте выходной звук при постобработке до окончательной частоты дискретизации. Установите значение 0, чтобы не выполнять повторную выборку:", - "Use the volume envelope of the input to replace or mix with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is used:": "Используйте огибающую громкости входа для замены или смешивания с огибающей громкости выхода. Чем ближе соотношение к 1, тем больше используется выходная огибающая:", - "Protect voiceless consonants and breath sounds to prevent artifacts such as tearing in electronic music. Set to 0.5 to disable. Decrease the value to increase protection, but it may reduce indexing accuracy:": "Защищайте глухие согласные и звуки дыхания, чтобы предотвратить появление таких артефактов, как разрывы в электронной музыке. Установите значение 0,5, чтобы отключить. Уменьшите значение, чтобы повысить защиту, но это может снизить точность индексации:", - "F0 curve file (optional). One pitch per line. Replaces the default F0 and pitch modulation:": "Файл кривой F0 (опционально). Один шаг на строку. Заменяет стандартную F0 и модуляцию высоты тона:", - "Convert": "Конвертировать", - "Output information:": "Выходная информация", - "Export audio (click on the three dots in the lower right corner to download)": "Экспортируйте аудио (нажмите на три точки в правом нижнем углу, чтобы загрузить)", - "Batch conversion. Enter the folder containing the audio files to be converted or upload multiple audio files. The converted audio will be output in the specified folder (default: 'opt').": "Пакетное преобразование. Введите папку, содержащую аудиофайлы, которые нужно преобразовать, или загрузите несколько аудиофайлов. Конвертированный звук будет выводиться в указанную папку (по умолчанию: «opt»).", - "Specify output folder:": "Укажите выходную папку:", - "Enter the path of the audio folder to be processed (copy it from the address bar of the file manager):": "Введите путь к папке аудио, подлежащей обработке (скопируйте его из адресной строки файлового менеджера):", - "You can also input audio files in batches. Choose one of the two options. Priority is given to reading from the folder.": "Вы также можете вводить аудиофайлы в пакетном режиме. Выберите один из двух вариантов. Приоритет отдается чтению из папки.", - "Export file format": "Формат файла экспорта", - "UVR5": "УВР5", - "Enter the path of the audio folder to be processed:": "Введите путь к аудиопапке, которую необходимо обработать:", - "Model": "Модель", - "Vocal Extraction Aggressive": "Извлечение вокала агрессивное", - "Specify the output folder for vocals:": "Укажите выходную папку для вокала:", - "Specify the output folder for accompaniment:": "Укажите выходную папку для аккомпанемента:", - "Train": "Тренироваться", - "Enter the model name:": "Введите название модели:", - "Target sample rate:": "Целевая частота дискретизации:", - "Whether the model has pitch guidance (required for singing, optional for speech):": "Имеет ли модель управление высотой тона (обязательно для пения, необязательно для речи):", - "Version": "Версия", - "Number of CPU processes:": "Количество процессов ЦП, используемых для извлечения высоты звука и обработки данных:", - "Enter the path of the training folder:": "Введите путь к папке обучения:", - "Specify the model ID:": "Пожалуйста, укажите идентификатор модели:", - "Auto detect audio path and select from the dropdown:": "Автоматическое определение пути аудио и выбор из раскрывающегося списка:", - "Add audio's name to the path to the audio file to be processed (default is the correct format example) Remove the path to use an audio from the dropdown list:": "Добавьте имя аудио к пути к обрабатываемому аудиофайлу (по умолчанию используется правильный пример формата). Удалите путь для использования аудио из раскрывающегося списка:", - "Advanced Settings": "Расширенные настройки", - "Settings": "Настройки", - "Status:": "Положение дел", - "Process data": "Данные обработки", - "Drag your audio here:": "Перетащите сюда свой аудиофайл и нажмите кнопку «Обновить».", - "Or record an audio:": "Или записать звук.", - "Formant shift inference audio": "Звук вывода формантного сдвига", - "Used for male to female and vice-versa conversions": "Используется для преобразования мужского и женского пола и наоборот.", - "Provide the GPU index(es) separated by '-', like 0-1-2 for using GPUs 0, 1, and 2:": "Укажите индексы графического процессора, разделенные знаком «-», например 0-1-2, для использования графических процессоров 0, 1 и 2:", - "GPU Information:": "Информация о графическом процессоре", - "Feature extraction": "Извлечение признаков", - "Save frequency:": "Частота сохранения:", - "Training epochs:": "Эпохи обучения:", - "Batch size per GPU:": "Размер пакета на графический процессор:", - "Save only the latest '.ckpt' file to save disk space:": "Сохраните только последний файл «.ckpt», чтобы сэкономить место на диске:", - "No": "Нет", - "Save a small final model to the 'weights' folder at each save point:": "Сохраните небольшую окончательную модель в папке «веса» в каждой точке сохранения:", - "Load pre-trained base model G path:": "Загрузите предварительно обученную базовую модель G-путь:", - "Load pre-trained base model D path:": "Загрузите путь D предварительно обученной базовой модели:", - "Train model": "Модель поезда", - "Train feature index": "Индекс характеристик поезда", - "One-click training": "Обучение в один клик", - "Processing": "Обработка", - "Model fusion, can be used to test timbre fusion": "Модель Fusion, можно использовать для проверки синтеза тембров.", - "Path to Model A:": "Путь к модели А:", - "Path to Model B:": "Путь к модели Б:", - "Weight for Model A:": "Вес модели А:", - "Whether the model has pitch guidance:": "Имеет ли модель наведение по тангажу:", - "Model information to be placed:": "Информация о модели, которую необходимо разместить:", - "Model architecture version:": "Версия архитектуры модели:", - "Fusion": "Слияние", - "Modify model information": "Изменить информацию о модели", - "Path to Model:": "Путь к модели:", - "Model information to be modified:": "Информация о модели, которую необходимо изменить:", - "Save file name:": "Имя файла сохранения:", - "Modify": "Изменить", - "View model information": "Просмотр информации о модели", - "View": "Вид", - "Model extraction": "Извлечение модели (введите путь к модели большого файла в папке «logs»). Это полезно, если вы хотите остановить обучение на полпути и вручную извлечь и сохранить небольшой файл модели или если вы хотите протестировать промежуточную модель:", - "Name:": "Сохранить имя:", - "Whether the model has pitch guidance (1: yes, 0: no):": "Имеет ли модель управление по тангажу (1: да, 0: нет):", - "Extract": "Извлекать", - "Export Onnx": "Экспортировать Onnx", - "RVC Model Path:": "Путь модели RVC:", - "Onnx Export Path:": "Путь экспорта Onnx:", - "MoeVS Model": "Модель МоэВС", - "Export Onnx Model": "Экспорт модели Onnx", - "Load model": "Загрузить модель", - "Hubert Model": "Хьюберт Модель", - "Select the .pth file": "Выберите файл .pth.", - "Select the .index file": "Выберите файл .index.", - "Select the .npy file": "Выберите файл .npy.", - "Input device": "Устройство ввода", - "Output device": "Устройство вывода", - "Audio device (please use the same type of driver)": "Аудиоустройство (пожалуйста, используйте драйвер того же типа)", - "Response threshold": "Порог ответа", - "Pitch settings": "Настройки высоты тона", - "Whether to use note names instead of their hertz value. E.G. [C5, D6] instead of [523.25, 1174.66]Hz": "Использовать ли названия нот вместо их значения в герцах. НАПРИМЕР. [C5, D6] вместо [523,25, 1174,66] Гц", - "Index Rate": "Индексная ставка", - "General settings": "Общие настройки", - "Sample length": "Длина образца", - "Fade length": "Длина затухания", - "Extra inference time": "Дополнительное время вывода", - "Input noise reduction": "Снижение входного шума", - "Output noise reduction": "Снижение выходного шума", - "Performance settings": "Настройки производительности", - "Start audio conversion": "Начать преобразование аудио", - "Stop audio conversion": "Остановить преобразование аудио", - "Inference time (ms):": "Время вывода (мс):", - "Select the pth file": "Выберите pth-файл", - "Select the .index file:": "Выберите индексный файл", - "The hubert model path must not contain Chinese characters": "Путь модели Хьюберта не должен содержать китайские символы.", - "The pth file path must not contain Chinese characters.": "Путь к файлу pth не должен содержать китайских символов.", - "The index file path must not contain Chinese characters.": "Путь к индексному файлу не должен содержать китайских символов.", - "Step algorithm": "Пошаговый алгоритм", - "Number of epoch processes": "Количество эпохальных процессов", - "Lowest points export": "Экспорт наименьших баллов", - "How many lowest points to save:": "Сколько самых низких баллов нужно сохранить", - "Export lowest points of a model": "Экспортировать самые низкие точки модели", - "Output models:": "Выходные модели", - "Stats of selected models:": "Статистика выбранных моделей", - "Custom f0 [Root pitch] File": "Пользовательский файл f0 [Шаг основного тона]", - "Min pitch:": "Минимальный шаг", - "Specify minimal pitch for inference [HZ]": "Укажите минимальный шаг для вывода [Гц]", - "Specify minimal pitch for inference [NOTE][OCTAVE]": "Укажите минимальный шаг для вывода [NOTE][OCTAVE]", - "Max pitch:": "Максимальный шаг", - "Specify max pitch for inference [HZ]": "Укажите максимальную высоту звука для вывода [Гц]", - "Specify max pitch for inference [NOTE][OCTAVE]": "Укажите максимальный шаг для вывода [ПРИМЕЧАНИЕ][ОКТАВА]", - "Browse presets for formanting": "Просмотр пресетов для форматирования", - "Presets are located in formantshiftcfg/ folder": "Пресеты находятся в папке formantshiftcfg/.", - "Default value is 1.0": "Значение по умолчанию — 1,0.", - "Quefrency for formant shifting": "Quefrency для сдвига форманты", - "Timbre for formant shifting": "Тембр для смещения форманты", - "Apply": "Применять", - "Single": "Одинокий", - "Batch": "Партия", - "Separate YouTube tracks": "Отдельные треки YouTube", - "Download audio from a YouTube video and automatically separate the vocal and instrumental tracks": "Загрузите аудио из видео YouTube и автоматически разделите вокальные и инструментальные дорожки.", - "Extra": "Дополнительный", - "Merge": "Объединить", - "Merge your generated audios with the instrumental": "Объедините сгенерированные аудио с инструментальной композицией.", - "Choose your instrumental:": "Выберите свой инструментал", - "Choose the generated audio:": "Выберите сгенерированный звук", - "Combine": "Объединить", - "Download and Separate": "Скачать и отделить", - "Enter the YouTube link:": "Введите ссылку на ютуб", - "This section contains some extra utilities that often may be in experimental phases": "Этот раздел содержит некоторые дополнительные утилиты, которые часто могут находиться на экспериментальной стадии.", - "Merge Audios": "Объединить аудио", - "Audio files have been moved to the 'audios' folder.": "Аудиофайлы перемещены в папку «audios».", - "Downloading audio from the video...": "Загрузка звука из видео...", - "Audio downloaded!": "Аудио скачать!", - "An error occurred:": "Произошла ошибка:", - "Separating audio...": "Разделение звука...", - "File moved successfully.": "Файл успешно перемещен.", - "Finished!": "Законченный!", - "The source file does not exist.": "Исходный файл не существует.", - "Error moving the file:": "Ошибка перемещения файла:", - "Downloading {name} from drive": "Загрузка {name} с диска", - "The attempt to download using Drive didn't work": "Попытка скачать с Диска не удалась.", - "Error downloading the file: {str(e)}": "Ошибка загрузки файла: {str(e)}", - "Downloading {name} from mega": "Скачиваю {name} из мега", - "Downloading {name} from basic url": "Загрузка {name} с основного URL", - "Download Audio": "Скачать аудио", - "Download audios of any format for use in inference (recommended for mobile users).": "Загрузите аудио любого формата для использования в умозаключениях (рекомендуется для мобильных пользователей)", - "Any ConnectionResetErrors post-conversion are irrelevant and purely visual; they can be ignored.\n": "Любые пост-преобразования ConnectionResetErrors не имеют значения и являются чисто визуальными; их можно игнорировать.", - "Processed audio saved at: ": "Обработанный звук сохранен по адресу:", - "Conversion complete!": "Преобразование завершено!", - "Reverb": "Реверберация", - "Compressor": "Компрессор", - "Noise Gate": "Шумовые ворота", - "Volume": "Объем", - "Drag the audio here and click the Refresh button": "Перетащите аудио сюда и нажмите кнопку «Обновить».", - "Select the generated audio": "Выберите сгенерированный звук", - "Volume of the instrumental audio:": "Громкость инструментального звука", - "Volume of the generated audio:": "Громкость сгенерированного звука", - "### Add the effects": "### Добавьте эффекты", - "Starting audio conversion... (This might take a moment)": "Начинается конвертация аудио... (Это может занять некоторое время)", - "TTS Model:": "Голоса TTS", - "TTS": "TTS", - "TTS Method:": "Метод TTS", - "Audio TTS:": "Аудио TTS", - "Audio RVC:": "Аудио Модель" -} diff --git a/i18n/locale/tr_TR.json b/i18n/locale/tr_TR.json deleted file mode 100644 index 3175bd8d8617b27d2c98cf703149bd348eb7aa02..0000000000000000000000000000000000000000 --- a/i18n/locale/tr_TR.json +++ /dev/null @@ -1,249 +0,0 @@ -{ - "Unfortunately, there is no compatible GPU available to support your training.": "Üzgünüz, eğitiminizi desteklemek için uyumlu bir GPU bulunmuyor.", - "Yes": "Evet", - "Select your dataset:": "Veri setinizi seçin:", - "Update list": "Listeyi güncelle.", - "Download Model": "Modeli İndir", - "Download Backup": "Yedeklemeyi İndir", - "Download Dataset": "Veri Setini İndir", - "Download": "İndir", - "Url:": "URL:", - "Build the index before saving.": "Kaydetmeden önce dizini oluşturun.", - "Save your model once the training ends.": "Eğitim sona erdiğinde modelinizi kaydedin.", - "Save type": "Kaydetme türü:", - "Save model": "Modeli Kaydet", - "Choose the method": "Yöntemi seçin", - "Save all": "Hepsini kaydet", - "Save D and G": "D ve G'yi kaydet", - "Save voice": "Sesi kaydet", - "Downloading the file: ": "Dosya indiriliyor: ", - "Stop training": "Eğitimi durdur", - "Too many users have recently viewed or downloaded this file": "Çok sayıda kullanıcı bu dosyayı yakın zamanda görüntüledi veya indirdi", - "Cannot get file from this private link": "Bu özel bağlantıdan dosya alınamıyor", - "Full download": "Tam indirme", - "An error occurred downloading": "İndirme sırasında bir hata oluştu", - "Model saved successfully": "Model başarıyla kaydedildi", - "Saving the model...": "Model kaydediliyor...", - "Saved without index...": "Dizin oluşturulmadan kaydedildi...", - "Saved without inference model...": "Çıkarsama modeli oluşturulmadan kaydedildi...", - "An error occurred saving the model": "Model kaydedilirken bir hata oluştu", - "The model you want to save does not exist, be sure to enter the correct name.": "Kaydetmek istediğiniz model mevcut değil, doğru adı girdiğinizden emin olun.", - "The file could not be downloaded.": "Dosya indirilemedi.", - "Unzip error.": "Sıkıştırılmış dosya açma hatası.", - "Path to your added.index file (if it didn't automatically find it)": "added.index dosyanızın yolu (eğer otomatik olarak bulunmadıysa)", - "It has been downloaded successfully.": "Başarıyla indirildi.", - "Proceeding with the extraction...": "Çıkarma işlemine devam ediliyor...", - "The Backup has been uploaded successfully.": "Yedekleme başarıyla yüklendi.", - "The Dataset has been loaded successfully.": "Veri seti başarıyla yüklendi.", - "The Model has been loaded successfully.": "Model başarıyla yüklendi.", - "It is used to download your inference models.": "Çıkarsama modellerinizi indirmek için kullanılır.", - "It is used to download your training backups.": "Eğitim yedeklemelerinizi indirmek için kullanılır.", - "Download the dataset with the audios in a compatible format (.wav/.flac) to train your model.": "Modelinizi eğitmek için ses içeren uyumlu bir format (.wav/.flac) ile veri setini indirin.", - "No relevant file was found to upload.": "Yüklemek için ilgili dosya bulunamadı.", - "The model works for inference, and has the .index file.": "Model çıkarsama için çalışır ve .index dosyasına sahiptir.", - "The model works for inference, but it doesn't have the .index file.": "Model çıkarsama için çalışır, ancak .index dosyasına sahip değildir.", - "This may take a few minutes, please wait...": "Bu birkaç dakika sürebilir, lütfen bekleyin...", - "Resources": "Kaynaklar", - "Step 1: Processing data": "Adım 1: Verileri işleme", - "Step 2: Skipping pitch extraction": "Adım 2: Pitch çıkarma atlanıyor", - "Step 3: Extracting features": "Adım 3: Özellik çıkarma", - "Step 4: Model training started": "Adım 4: Model eğitimi başladı", - "Step 5: Export lowest points on a graph of the model": "Adım 5: Modelin grafikteki en düşük noktalarını dışa aktarın", - "Training is done, check train.log": "Eğitim tamamlandı, train.log dosyasını kontrol edin", - "All processes have been completed!": "Tüm işlemler tamamlandı!", - "Model Inference": "Model Çıkarsama", - "Inferencing voice:": "Ses çıkarma:", - "Model_Name": "Model_Adı", - "Dataset_Name": "Veri_Seti_Adı", - "Whether the model has pitch guidance.": "Modelin pitch rehberi olup olmadığı.", - "Whether to save only the latest .ckpt file to save hard drive space": "Sadece en son .ckpt dosyasını kaydetmek için kayıt alanı tasarrufu yapılıp yapılmayacağı", - "Cache all training sets to GPU memory. Caching small datasets (less than 10 minutes) can speed up training": "Tüm eğitim setlerini GPU belleğine önbelleğe alın. Küçük veri setlerini önbelleğe almak (10 dakikadan az) eğitimi hızlandırabilir.", - "Save a small final model to the 'weights' folder at each save point": "Her kaydetme noktasında 'weights' klasörüne küçük bir nihai modeli kaydedin", - "Refresh": "Ses listesini, dizin yolunu ve ses dosyalarını yenileyin", - "Unload voice to save GPU memory": "GPU belleğini kaydetmek için sesi boşalt", - "Select Speaker/Singer ID:": "Konuşmacı/Şarkıcı Kimliği Seç:", - "Recommended +12 key for male to female conversion, and -12 key for female to male conversion. If the sound range goes too far and the voice is distorted, you can also adjust it to the appropriate range by yourself.": "Erkekten kadına dönüşüm için önerilen +12 ton, kadından erkeğe dönüşüm için -12 ton. Ses aralığı fazla uzaklaşırsa ve ses bozulursa, uygun aralığı kendiniz ayarlayabilirsiniz.", - "Transpose (integer, number Fof semitones, raise by an octave: 12, lower by an octave: -12):": "Transpoze et (tamsayı, yarıton Fof sayısı, bir oktav yukarı: 12, bir oktav aşağı: -12):", - "Feature search database file path:": "Özellik arama veritabanı dosya yolu:", - "Enter the path of the audio file to be processed (default is the correct format example):": "İşlenecek ses dosyasının yolunu girin (varsayılan olarak doğru format örneğidir):", - "Select the pitch extraction algorithm:": "Pitch çıkarma algoritmasını seçin:", - "Mangio-Crepe Hop Length (Only applies to mangio-crepe): Hop length refers to the time it takes for the speaker to jump to a dramatic pitch. Lower hop lengths take more time to infer but are more pitch accurate.": "Mangio-Crepe Hop Uzunluğu (Sadece mangio-crepe için geçerlidir): Hop uzunluğu, konuşmacının dramatik bir pitch'e atlama süresini belirtir. Daha düşük hop uzunlukları daha fazla çıkarım süresi alır, ancak daha doğru pitch verir.", - "Feature search dataset file path": "Özellik arama veri seti dosya yolu", - "If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness.": "Eğer >=3 ise: elde edilen pitch sonuçlarına medyan filtreleme uygulayın. Değer, filtre yarıçapını temsil eder ve nefes sesini azaltabilir.", - "Path to the feature index file. Leave blank to use the selected result from the dropdown:": "Özellik dizin dosyasının yolu. Seçilen sonucu kullanmak için boş bırakın:", - "Auto-detect index path and select from the dropdown:": "Dizin yolunu otomatik algılayın ve açılır menüden seçin:", - "Path to feature file:": "Özellik dosyasının yolu:", - "Search feature ratio:": "Özellik oranını arayın:", - "Resample the output audio in post-processing to the final sample rate. Set to 0 for no resampling:": "Çıkış sesini son işlemde nihai örnekleme hızına göre yeniden örnekleme yapın. Örnekleme yapmamak için 0 olarak ayarlayın:", - "Use the volume envelope of the input to replace or mix with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is used:": "Girişin ses zarfını çıkışın ses zarfıyla değiştirin veya karıştırın. Oran 1'e ne kadar yakınsa, çıkış zarfı o kadar çok kullanılır:", - "Protect voiceless consonants and breath sounds to prevent artifacts such as tearing in electronic music. Set to 0.5 to disable. Decrease the value to increase protection, but it may reduce indexing accuracy:": "Sessiz ünsüzleri ve nefes seslerini koruyarak elektronik müzikte yırtılma gibi sanat efektlerini önleyin. Devre dışı bırakmak için 0.5 olarak ayarlayın. Korumayı artırmak için değeri azaltın, ancak dizinleme doğruluğunu azaltabilir:", - "F0 curve file (optional). One pitch per line. Replaces the default F0 and pitch modulation:": "F0 eğrisi dosyası (isteğe bağlı). Her satırda bir pitch bulunur. Varsayılan F0 ve pitch modülasyonunu değiştirir:", - "Convert": "Dönüştür", - "Output information:": "Çıkış bilgisi:", - "Export audio (click on the three dots in the lower right corner to download)": "Sesi dışa aktar (indirmek için sağ alt köşedeki üç noktaya tıklayın)", - "Batch conversion. Enter the folder containing the audio files to be converted or upload multiple audio files. The converted audio will be output in the specified folder (default: 'opt').": "Toplu dönüşüm. Dönüştürülecek ses dosyalarını içeren klasörü girin veya birden fazla ses dosyası yükleyin. Dönüştürülen ses, belirtilen klasöre (varsayılan: 'opt') çıktı olarak verilir.", - "Specify output folder:": "Çıkış klasörünü belirtin:", - "Enter the path of the audio folder to be processed (copy it from the address bar of the file manager):": "İşlenecek ses klasörünün yolunu girin (dosya yöneticisinin adres çubuğundan kopyalayın):", - "You can also input audio files in batches. Choose one of the two options. Priority is given to reading from the folder.": "Ses dosyalarını toplu olarak da girebilirsiniz. İki seçenekten birini seçin. Öncelik klasörden okuma yapmaya verilir.", - "Export file format:": "Çıkış dosya formatı:", - "UVR5": "UVR5", - "Enter the path of the audio folder to be processed:": "İşlenecek ses klasörünün yolunu girin:", - "Model:": "Model:", - "Vocal Extraction Aggressive": "Vokal Çıkarma Agresif", - "Specify the output folder for vocals:": "Vokaller için çıkış klasörünü belirtin:", - "Specify the output folder for accompaniment:": "Eşlik için çıkış klasörünü belirtin:", - "Train": "Eğit", - "Enter the model name:": "Model adını girin:", - "Target sample rate:": "Hedef örnek hızı:", - "Whether the model has pitch guidance (required for singing, optional for speech):": "Modelin ton yönü rehberliği olup olmadığı (şarkı için gereklidir, konuşma için isteğe bağlıdır):", - "Version:": "Sürüm:", - "Number of CPU processes:": "CPU işlem sayısı:", - "Enter the path of the training folder:": "Eğitim klasörünün yolunu girin:", - "Specify the model ID:": "Model kimliğini belirtin:", - "Auto detect audio path and select from the dropdown:": "Otomatik olarak ses yolunu algıla ve açılır menüden seç:", - "Add audio's name to the path to the audio file to be processed (default is the correct format example) Remove the path to use an audio from the dropdown list:": "İşlenecek ses dosyasının yoluna ses dosyasının adını ekleyin (varsayılan olarak doğru format örneği) Yolu kaldırarak açılır menüden bir ses kullanın:", - "Advanced Settings": "Gelişmiş Ayarlar", - "Settings": "Ayarlar", - "Status:": "Durum:", - "Process data": "Veriyi işle", - "Drag your audio here:": "Sesinizi buraya sürükleyin:", - "Or record an audio:": "Veya bir ses kaydedin", - "Formant shift inference audio": "Formant kaydırma çıkarsama sesi", - "Used for male to female and vice-versa conversions": "Erkekten kadına ve tam tersine dönüşümler için kullanılır", - "Provide the GPU index(es) separated by '-', like 0-1-2 for using GPUs 0, 1, and 2:": "GPU dizinini '-' ile ayırarak belirtin, örneğin 0-1-2; GPU'ları 0, 1 ve 2 kullanmak için:", - "GPU Information:": "GPU Bilgileri:", - "Feature extraction": "Özellik çıkarma", - "Save frequency:": "Kaydetme frekansı:", - "Training epochs:": "Eğitim dönemleri:", - "Batch size per GPU:": "Her GPU için toplu iş boyutu:", - "Save only the latest '.ckpt' file to save disk space:": "Sadece en son '.ckpt' dosyasını kaydederek disk alanı tasarrufu yapın:", - "No": "Hayır", - "Save a small final model to the 'weights' folder at each save point:": "Her kaydetme noktasında 'weights' klasörüne küçük bir son model kaydedin:", - "Load pre-trained base model G path:": "Önceden eğitilmiş temel G model yolu yükle:", - "Load pre-trained base model D path:": "Önceden eğitilmiş temel D model yolu yükle:", - "Train model": "Modeli eğit", - "Train feature index": "Eğitim özellik dizini", - "One-click training": "Bir tıklamayla eğitim", - "Processing": "İşleniyor", - "Model fusion, can be used to test timbre fusion": "Model birleştirme, timbre birleştirmeyi test etmek için kullanılabilir", - "Path to Model A:": "Model A'nın yolu:", - "Path to Model B:": "Model B'nin yolu:", - "Weight for Model A:": "Model A için ağırlık:", - "Whether the model has pitch guidance:": "Modelin ton yönü rehberliği olup olmadığı:", - "Model information to be placed:": "Yerleştirilecek model bilgisi:", - "Model architecture version:": "Model mimari sürümü:", - "Fusion": "Birleştirme", - "Modify model information": "Model bilgisini değiştir", - "Path to Model:": "Model yoluna:", - "Model information to be modified:": "Değiştirilecek model bilgisi:", - "Save file name:": "Dosya adını kaydet:", - "Modify": "Değiştir", - "View model information": "Model bilgisini görüntüle", - "View": "Görüntüle", - "Model extraction": "Model çıkarımı (büyük dosya modelinin 'logs' klasörünün altına yolunu girin). Eğitimi yarıda kesmek ve manuel olarak küçük bir model dosyası çıkarmak ve kaydetmek istiyorsanız veya ara bir modeli test etmek isterseniz bu yararlı olabilir:", - "Name:": "Adı kaydet:", - "Whether the model has pitch guidance (1: yes, 0: no):": "Modelin ton yönü rehberliği olup olmadığı (1: evet, 0: hayır):", - "Extract": "Çıkar", - "Export Onnx": "Onnx'i dışa aktar", - "RVC Model Path:": "RVC Model Yolu:", - "Onnx Export Path:": "Onnx Dışa Aktarma Yolu:", - "MoeVS Model": "MoeVS Modeli", - "Export Onnx Model": "Onnx Modelini Dışa Aktar", - "Load model": "Modeli yükle", - "Hubert Model": "Hubert Modeli", - "Select the .pth file": ".pth dosyasını seçin", - "Select the .index file": ".index dosyasını seçin", - "Select the .npy file": ".npy dosyasını seçin", - "Input device": "Giriş cihazı", - "Output device": "Çıkış cihazı", - "Audio device (please use the same type of driver)": "Ses cihazı (lütfen aynı sürücü türünü kullanın)", - "Response threshold": "Yanıt eşiği", - "Pitch settings": "Ton ayarları", - "Whether to use note names instead of their hertz value. E.G. [C5, D6] instead of [523.25, 1174.66]Hz": "Hertz değeri yerine nota isimlerinin kullanılıp kullanılmayacağı. Örn. [C5, D6] yerine [523.25, 1174.66]Hz", - "Index Rate": "Dizin Oranı", - "General settings": "Genel ayarlar", - "Sample length": "Örnek uzunluğu", - "Fade length": "Solma uzunluğu", - "Extra inference time": "Ek çıkarsama süresi", - "Input noise reduction": "Giriş gürültü azaltma", - "Output noise reduction": "Çıkış gürültü azaltma", - "Performance settings": "Performans ayarları", - "Start audio conversion": "Ses dönüşümünü başlat", - "Stop audio conversion": "Ses dönüşümünü durdur", - "Inference time (ms):": "Çıkarsama süresi (ms):", - "Select the pth file": ".pth dosyasını seçin", - "Select the .index file:": ".index dosyasını seçin", - "The hubert model path must not contain Chinese characters": "Hubert model yolu Çince karakter içermemelidir", - "The pth file path must not contain Chinese characters.": ".pth dosya yolu Çince karakter içermemelidir.", - "The index file path must not contain Chinese characters.": ".index dosya yolu Çince karakter içermemelidir.", - "Step algorithm": "Adım algoritması", - "Number of epoch processes": "Dönem işlem sayısı", - "Lowest points export": "En düşük noktaları dışa aktar", - "How many lowest points to save:": "Kaç en düşük noktanın kaydedileceği", - "Export lowest points of a model": "Bir modelin en düşük noktalarını dışa aktar", - "Output models:": "Modelleri dışa aktar", - "Stats of selected models:": "Seçilen modellerin istatistikleri", - "Custom f0 [Root pitch] File": "Özel f0 [Kök ton] Dosyası", - "Min pitch:": "Minimum ton yüksekliği:", - "Specify minimal pitch for inference [HZ]": "Çıkarsama için minimum ton yüksekliğini belirt [HZ]", - "Specify minimal pitch for inference [NOTE][OCTAVE]": "Çıkarsama için minimum ton yüksekliğini belirt [NOTA][OKTAV]", - "Max pitch:": "Maksimum ton yüksekliği:", - "Specify max pitch for inference [HZ]": "Çıkarsama için maksimum ton yüksekliğini belirt [HZ]", - "Specify max pitch for inference [NOTE][OCTAVE]": "Çıkarsama için maksimum ton yüksekliğini belirt [NOTA][OKTAV]", - "Browse presets for formanting": "Formant ayarları için ön ayarları göz at", - "Presets are located in formantshiftcfg/ folder": "Ön ayarlar formantshiftcfg/ klasöründe bulunur", - "Default value is 1.0": "Varsayılan değer 1.0'dır", - "Quefrency for formant shifting": "Formant kaydırma için kvarakfrekans", - "Timbre for formant shifting": "Formant kaydırma için timbre", - "Apply": "Uygula", - "Single": "Tek", - "Batch": "Toplu", - "Separate YouTube tracks": "YouTube parçalarını ayır", - "Download audio from a YouTube video and automatically separate the vocal and instrumental tracks": "YouTube videosundan ses indirin ve otomatik olarak vokal ve enstrümantal parçaları ayırın", - "Extra": "Ekstra", - "Merge": "Birleştir", - "Merge your generated audios with the instrumental": "Üretilen seslerinizi enstrümantal ile birleştirin", - "Choose your instrumental:": "Enstrümantal seçin:", - "Choose the generated audio:": "Üretilen sesi seçin:", - "Combine": "Birleştir", - "Download and Separate": "İndir ve Ayır", - "Enter the YouTube link:": "YouTube bağlantısını girin:", - "This section contains some extra utilities that often may be in experimental phases": "Bu bölüm genellikle deneysel aşamalarda olabilecek bazı ek hizmet programlarını içerir", - "Merge Audios": "Sesleri Birleştir", - "Audio files have been moved to the 'audios' folder.": "Ses dosyaları 'audios' klasörüne taşındı.", - "Downloading audio from the video...": "Videodan ses indiriliyor...", - "Audio downloaded!": "Ses indirildi!", - "An error occurred:": "Bir hata oluştu:", - "Separating audio...": "Ses ayrıştırılıyor...", - "File moved successfully.": "Dosya başarıyla taşındı.", - "Finished!": "Tamamlandı!", - "The source file does not exist.": "Kaynak dosya mevcut değil.", - "Error moving the file:": "Dosya taşınırken hata oluştu:", - "Downloading {name} from drive": "{name} Google Drive'dan indiriliyor", - "The attempt to download using Drive didn't work": "Drive kullanılarak indirme denemesi başarısız oldu", - "Error downloading the file: {str(e)}": "Dosya indirilirken hata oluştu: {str(e)}", - "Downloading {name} from mega": "{name} Mega'dan indiriliyor", - "Downloading {name} from basic url": "{name} temel URL'den indiriliyor", - "Download Audio": "Ses İndir", - "Download audios of any format for use in inference (recommended for mobile users).": "Çıkarsama için herhangi bir formatta ses indirin (mobil kullanıcılar için önerilir).", - "Any ConnectionResetErrors post-conversion are irrelevant and purely visual; they can be ignored.\n": "Dönüşümden sonra herhangi bir ConnectionResetErrors önemsizdir ve sadece görseldir; ihmal edilebilirler.\n", - "Processed audio saved at: ": "İşlenmiş ses kaydedildi: ", - "Conversion complete!": "Dönüşüm tamamlandı!", - "Reverb": "Yankı", - "Compressor": "Sıkıştırıcı", - "Noise Gate": "Gürültü Kapısı", - "Volume": "Ses Düzeyi", - "Drag the audio here and click the Refresh button": "Sesi buraya sürükleyin ve Yenile düğmesine tıklayın", - "Select the generated audio": "Üretilen sesi seçin", - "Volume of the instrumental audio:": "Enstrümantal sesin ses düzeyi:", - "Volume of the generated audio:": "Üretilen sesin ses düzeyi:", - "### Audio settings:": "### Ses ayarları:", - "### Instrumental settings:": "### Enstrümantal ayarları:", - "### Add the effects:": "### Efektleri ekle:", - "Starting audio conversion... (This might take a moment)": "Ses dönüşümü başlatılıyor... (Bu biraz zaman alabilir)", - "TTS Model:": "TTS Sesleri", - "TTS": "TTS", - "TTS Method:": "TTS Yöntemi", - "Audio TTS:": "Sesli TTS", - "Audio RVC:": "Sesli Model" -} diff --git a/i18n/locale/ur_UR.json b/i18n/locale/ur_UR.json deleted file mode 100644 index e58c68312476bbe2fe512cab31e8c05d7799e490..0000000000000000000000000000000000000000 --- a/i18n/locale/ur_UR.json +++ /dev/null @@ -1,247 +0,0 @@ -{ - "Unfortunately, there is no compatible GPU available to support your training.": "بدقسمتی سے، آپ کی تربیت کو سپورٹ کرنے کے لیے کوئی ہم آہنگ GPU دستیاب نہیں ہے۔", - "Yes": "جی ہاں", - "Select your dataset:": "اپنا ڈیٹا سیٹ منتخب کریں۔", - "Update list": "فہرست کو اپ ڈیٹ کریں۔", - "Download Model": "ماڈل ڈاؤن لوڈ کریں۔", - "Download Backup": "بیک اپ ڈاؤن لوڈ کریں۔", - "Download Dataset": "ڈیٹا سیٹ ڈاؤن لوڈ کریں۔", - "Download": "ڈاؤن لوڈ کریں", - "Url:": "یو آر ایل:", - "Build the index before saving.": "محفوظ کرنے سے پہلے انڈیکس بنائیں۔", - "Save your model once the training ends.": "ٹریننگ ختم ہونے کے بعد اپنے ماڈل کو محفوظ کریں۔", - "Save type": "قسم محفوظ کریں۔", - "Save model": "ماڈل کو محفوظ کریں۔", - "Choose the method": "طریقہ منتخب کریں۔", - "Save all": "محفوظ کریں", - "Save D and G": "ڈی اور جی کو محفوظ کریں۔", - "Save voice": "آواز محفوظ کریں۔", - "Downloading the file: ": "فائل ڈاؤن لوڈ کرنا:", - "Stop training": "تربیت بند کرو", - "Too many users have recently viewed or downloaded this file": "بہت سارے صارفین نے حال ہی میں اس فائل کو دیکھا یا ڈاؤن لوڈ کیا ہے۔", - "Cannot get file from this private link": "اس نجی لنک سے فائل حاصل نہیں کی جا سکتی", - "Full download": "مکمل ڈاؤن لوڈ", - "An error occurred downloading": "ڈاؤن لوڈ کرنے میں ایک خرابی پیش آگئی", - "Model saved successfully": "ماڈل کامیابی سے محفوظ ہو گیا۔", - "Saving the model...": "ماڈل محفوظ ہو رہا ہے...", - "Saved without index...": "انڈیکس کے بغیر محفوظ کیا گیا...", - "model_name": "ماڈل_نام", - "Saved without inference model...": "بغیر کسی اندازہ کے ماڈل کے محفوظ کیا گیا...", - "An error occurred saving the model": "ماڈل کو محفوظ کرنے میں ایک خرابی پیش آگئی", - "The model you want to save does not exist, be sure to enter the correct name.": "آپ جس ماڈل کو محفوظ کرنا چاہتے ہیں وہ موجود نہیں ہے، درست نام ضرور درج کریں۔", - "The file could not be downloaded.": "فائل ڈاؤن لوڈ نہیں ہو سکی۔", - "Unzip error.": "ان زپ کی خرابی۔", - "Path to your added.index file (if it didn't automatically find it)": "آپ کی add.index فائل کا راستہ (اگر یہ خود بخود اسے نہیں مل پاتی ہے)", - "It has been downloaded successfully.": "اسے کامیابی کے ساتھ ڈاؤن لوڈ کر لیا گیا ہے۔", - "Proceeding with the extraction...": "نکالنے کے ساتھ آگے بڑھ رہا ہے...", - "The Backup has been uploaded successfully.": "بیک اپ کامیابی کے ساتھ اپ لوڈ ہو گیا ہے۔", - "The Dataset has been loaded successfully.": "ڈیٹا سیٹ کامیابی کے ساتھ لوڈ ہو گیا ہے۔", - "The Model has been loaded successfully.": "ماڈل کامیابی کے ساتھ لوڈ ہو گیا ہے۔", - "It is used to download your inference models.": "یہ آپ کے انفرنس ماڈلز کو ڈاؤن لوڈ کرنے کے لیے استعمال ہوتا ہے۔", - "It is used to download your training backups.": "یہ آپ کے تربیتی بیک اپ کو ڈاؤن لوڈ کرنے کے لیے استعمال ہوتا ہے۔", - "Download the dataset with the audios in a compatible format (.wav/.flac) to train your model.": "اپنے ماڈل کو تربیت دینے کے لیے ڈیٹاسیٹ کو آڈیوز کے ساتھ مطابقت پذیر فارمیٹ (.wav/.flac) میں ڈاؤن لوڈ کریں۔", - "No relevant file was found to upload.": "اپ لوڈ کرنے کے لیے کوئی متعلقہ فائل نہیں ملی۔", - "The model works for inference, and has the .index file.": "ماڈل تخمینہ کے لیے کام کرتا ہے، اور اس میں .index فائل ہے۔", - "The model works for inference, but it doesn't have the .index file.": "ماڈل تخمینہ کے لیے کام کرتا ہے، لیکن اس میں .index فائل نہیں ہے۔", - "This may take a few minutes, please wait...": "اس میں کچھ منٹ لگ سکتے ہیں، براہ کرم انتظار کریں...", - "Resources": "حوالہ جات", - "Step 1: Processing data": "مرحلہ 1: ڈیٹا پر کارروائی کرنا", - "Step 2: Skipping pitch extraction": "مرحلہ 2a: پچ نکالنا چھوڑنا", - "Step 3: Extracting features": "مرحلہ 2b: خصوصیات کو نکالنا", - "Step 4: Model training started": "مرحلہ 3a: ماڈل ٹریننگ شروع ہوئی۔", - "Step 5: Export lowest points on a graph of the model": "مرحلہ 4: ماڈل کے گراف پر سب سے کم پوائنٹس برآمد کریں۔", - "Training is done, check train.log": "ٹریننگ ہو چکی ہے، ٹرین ڈاٹ لاگ چیک کریں۔", - "All processes have been completed!": "تمام عمل مکمل ہو چکے ہیں!", - "Model Inference": "ماڈل کا اندازہ", - "Inferencing voice:": "اندازہ لگانے والی آواز:", - "Model_Name": "ماڈل_نام", - "Dataset_Name": "ڈیٹا سیٹ_نام", - "Whether the model has pitch guidance.": "آیا ماڈل میں پچ گائیڈنس ہے۔", - "Whether to save only the latest .ckpt file to save hard drive space": "آیا ہارڈ ڈرائیو کی جگہ بچانے کے لیے صرف تازہ ترین .ckpt فائل کو محفوظ کرنا ہے۔", - "Cache all training sets to GPU memory. Caching small datasets (less than 10 minutes) can speed up training": "تمام تربیتی سیٹوں کو GPU میموری میں کیش کریں۔ چھوٹے ڈیٹا سیٹس (10 منٹ سے کم) کیشنگ ٹریننگ کو تیز کر سکتی ہے۔", - "Save a small final model to the 'weights' folder at each save point": "ہر سیو پوائنٹ پر ایک چھوٹا فائنل ماڈل 'وزن' فولڈر میں محفوظ کریں۔", - "Refresh": "آواز کی فہرست، انڈیکس پاتھ اور آڈیو فائلوں کو ریفریش کریں۔", - "Unload voice to save GPU memory": "GPU میموری کو بچانے کے لیے آواز اتاریں:", - "Select Speaker/Singer ID:": "اسپیکر/گلوکار کی شناخت منتخب کریں:", - "Recommended +12 key for male to female conversion, and -12 key for female to male conversion. If the sound range goes too far and the voice is distorted, you can also adjust it to the appropriate range by yourself.": "مرد سے خاتون کی تبدیلی کے لیے تجویز کردہ +12 کلید، اور عورت سے مرد کی تبدیلی کے لیے -12 کلید۔ اگر آواز کی حد بہت دور جاتی ہے اور آواز بگڑ جاتی ہے، تو آپ اسے خود بھی مناسب رینج میں ایڈجسٹ کر سکتے ہیں۔", - "Transpose (integer, number Fof semitones, raise by an octave: 12, lower by an octave: -12):": "ٹرانسپوز (انٹیجر، سیمیٹونز کی تعداد، ایک آکٹیو سے بڑھائیں: 12، ایک آکٹیو سے کم: -12):", - "Enter the path of the audio file to be processed (default is the correct format example):": "کارروائی کی جانے والی آڈیو فائل کا راستہ درج کریں (پہلے سے طے شدہ فارمیٹ کی صحیح مثال ہے):", - "Select the pitch extraction algorithm:": "پچ نکالنے کا الگورتھم منتخب کریں:", - "Mangio-Crepe Hop Length (Only applies to mangio-crepe): Hop length refers to the time it takes for the speaker to jump to a dramatic pitch. Lower hop lengths take more time to infer but are more pitch accurate.": "Mangio-Crepe Hop Length (صرف mangio-crepe پر لاگو ہوتا ہے): ہاپ کی لمبائی سے مراد وہ وقت ہوتا ہے جو اسپیکر کو ڈرامائی انداز میں چھلانگ لگانے میں لگتا ہے۔ نچلی ہاپ کی لمبائی کا اندازہ لگانے میں زیادہ وقت لگتا ہے لیکن پچ زیادہ درست ہوتی ہے۔", - "Feature search dataset file path": "فیچر سرچ ڈیٹاسیٹ فائل پاتھ", - "If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness.": "اگر >=3: کٹائی ہوئی پچ کے نتائج پر میڈین فلٹرنگ لگائیں۔ قدر فلٹر کے رداس کی نمائندگی کرتی ہے اور سانس لینے میں کمی کر سکتی ہے۔", - "Path to the feature index file. Leave blank to use the selected result from the dropdown:": "فیچر انڈیکس فائل کا راستہ۔ ڈراپ ڈاؤن سے منتخب کردہ نتیجہ کو استعمال کرنے کے لیے خالی چھوڑ دیں:", - "Auto-detect index path and select from the dropdown:": "انڈیکس پاتھ کا خود بخود پتہ لگائیں اور ڈراپ ڈاؤن سے منتخب کریں۔", - "Path to feature file:": "فیچر فائل کا راستہ:", - "Search feature ratio:": "تلاش کی خصوصیت کا تناسب:", - "Resample the output audio in post-processing to the final sample rate. Set to 0 for no resampling:": "پوسٹ پروسیسنگ میں آؤٹ پٹ آڈیو کو حتمی نمونے کی شرح پر دوبارہ نمونہ دیں۔ دوبارہ نمونے لینے کے لیے 0 پر سیٹ کریں:", - "Use the volume envelope of the input to replace or mix with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is used:": "آؤٹ پٹ کے والیوم لفافے کو تبدیل کرنے یا ملانے کے لیے ان پٹ کے والیوم لفافے کا استعمال کریں۔ تناسب 1 کے جتنا قریب ہوگا، اتنا ہی زیادہ آؤٹ پٹ لفافہ استعمال ہوتا ہے:", - "Protect voiceless consonants and breath sounds to prevent artifacts such as tearing in electronic music. Set to 0.5 to disable. Decrease the value to increase protection, but it may reduce indexing accuracy:": "الیکٹرونک میوزک میں پھاڑنے جیسے فن پاروں کو روکنے کے لیے بے آواز تلفظ اور سانس کی آوازوں کی حفاظت کریں۔ غیر فعال کرنے کے لیے 0.5 پر سیٹ کریں۔ تحفظ کو بڑھانے کے لیے قدر کو کم کریں، لیکن یہ اشاریہ سازی کی درستگی کو کم کر سکتا ہے:", - "F0 curve file (optional). One pitch per line. Replaces the default F0 and pitch modulation:": "F0 وکر فائل (اختیاری)۔ فی لائن ایک پچ۔ پہلے سے طے شدہ F0 اور پچ ماڈیولیشن کو بدل دیتا ہے:", - "Convert": "تبدیل کریں", - "Output information:": "آؤٹ پٹ کی معلومات", - "Export audio (click on the three dots in the lower right corner to download)": "آڈیو برآمد کریں (ڈاؤن لوڈ کرنے کے لیے نیچے دائیں کونے میں تین نقطوں پر کلک کریں)", - "Batch conversion. Enter the folder containing the audio files to be converted or upload multiple audio files. The converted audio will be output in the specified folder (default: 'opt').": "بیچ کی تبدیلی۔ وہ فولڈر درج کریں جس میں آڈیو فائلیں تبدیل کی جائیں یا متعدد آڈیو فائلیں اپ لوڈ کریں۔ تبدیل شدہ آڈیو مخصوص فولڈر میں آؤٹ پٹ ہو گا (پہلے سے طے شدہ: 'opt')۔", - "Specify output folder:": "آؤٹ پٹ فولڈر کی وضاحت کریں:", - "Enter the path of the audio folder to be processed (copy it from the address bar of the file manager):": "آڈیو فولڈر کا راستہ درج کریں جس پر کارروائی کی جائے (اسے فائل مینیجر کے ایڈریس بار سے کاپی کریں):", - "You can also input audio files in batches. Choose one of the two options. Priority is given to reading from the folder.": "آپ آڈیو فائلوں کو بیچوں میں بھی ڈال سکتے ہیں۔ دو آپشنز میں سے ایک کا انتخاب کریں۔ فولڈر سے پڑھنے کو ترجیح دی جاتی ہے۔", - "Export file format": "فائل کی شکل برآمد کریں۔", - "UVR5": "UVR5", - "Enter the path of the audio folder to be processed:": "جس آڈیو فولڈر پر کارروائی کی جائے گی اس کا راستہ درج کریں:", - "Model": "ماڈل", - "Vocal Extraction Aggressive": "آواز نکالنا جارحانہ", - "Specify the output folder for vocals:": "آواز کے لیے آؤٹ پٹ فولڈر کی وضاحت کریں:", - "Specify the output folder for accompaniment:": "ساتھ کے لیے آؤٹ پٹ فولڈر کی وضاحت کریں:", - "Train": "ٹرین", - "Enter the model name:": "ماڈل کا نام درج کریں:", - "Target sample rate:": "ہدف نمونہ کی شرح:", - "Whether the model has pitch guidance (required for singing, optional for speech):": "آیا ماڈل میں پچ گائیڈنس ہے (گانے کے لیے ضروری، تقریر کے لیے اختیاری):", - "Version": "ورژن", - "Number of CPU processes:": "پچ نکالنے اور ڈیٹا پروسیسنگ کے لیے استعمال ہونے والے CPU عملوں کی تعداد:", - "Enter the path of the training folder:": "ٹریننگ فولڈر کا راستہ درج کریں:", - "Specify the model ID:": "براہ کرم ماڈل ID کی وضاحت کریں:", - "Auto detect audio path and select from the dropdown:": "آڈیو پاتھ کا خود بخود پتہ لگائیں اور ڈراپ ڈاؤن سے منتخب کریں:", - "Add audio's name to the path to the audio file to be processed (default is the correct format example) Remove the path to use an audio from the dropdown list:": "آڈیو فائل کے راستے میں آڈیو کا نام شامل کریں جس پر کارروائی کی جائے (پہلے سے طے شدہ فارمیٹ کی صحیح مثال ہے) ڈراپ ڈاؤن فہرست سے آڈیو استعمال کرنے کے لیے راستے کو ہٹا دیں:", - "Advanced Settings": "اعلی درجے کی ترتیبات", - "Settings": "ترتیبات", - "Status:": "حالت", - "Process data": "ڈیٹا پر کارروائی کریں۔", - "Drag your audio here:": "اپنے آڈیو کو یہاں گھسیٹیں اور ریفریش بٹن کو دبائیں۔", - "Or record an audio:": "یا آڈیو ریکارڈ کریں۔", - "Formant shift inference audio": "فارمینٹ شفٹ انفرنس آڈیو", - "Used for male to female and vice-versa conversions": "مرد سے عورت اور اس کے برعکس تبادلوں کے لیے استعمال کیا جاتا ہے۔", - "Provide the GPU index(es) separated by '-', like 0-1-2 for using GPUs 0, 1, and 2:": "براہ کرم '-' سے الگ کردہ GPU انڈیکس فراہم کریں، جیسے GPUs 0، 1، اور 2 استعمال کرنے کے لیے 0-1-2:", - "GPU Information:": "GPU کی معلومات", - "Feature extraction": "خصوصیت کا اخراج", - "Save frequency:": "تعدد کو محفوظ کریں:", - "Training epochs:": "تربیتی دور:", - "Batch size per GPU:": "بیچ سائز فی GPU:", - "Save only the latest '.ckpt' file to save disk space:": "ڈسک کی جگہ بچانے کے لیے صرف تازہ ترین '.ckpt' فائل کو محفوظ کریں:", - "No": "نہیں", - "Save a small final model to the 'weights' folder at each save point:": "ہر سیو پوائنٹ پر ایک چھوٹا فائنل ماڈل 'وزن' فولڈر میں محفوظ کریں:", - "Load pre-trained base model G path:": "پہلے سے تربیت یافتہ بیس ماڈل جی پاتھ لوڈ کریں:", - "Load pre-trained base model D path:": "پہلے سے تربیت یافتہ بیس ماڈل ڈی پاتھ لوڈ کریں:", - "Train model": "ٹرین ماڈل", - "Train feature index": "ٹرین فیچر انڈیکس", - "One-click training": "ایک کلک کی تربیت", - "Processing": "پروسیسنگ", - "Model fusion, can be used to test timbre fusion": "ماڈل فیوژن، ٹمبر فیوژن کو جانچنے کے لیے استعمال کیا جا سکتا ہے۔", - "Path to Model A:": "ماڈل A کا راستہ:", - "Path to Model B:": "ماڈل B کا راستہ:", - "Weight for Model A:": "ماڈل A کے لیے وزن:", - "Whether the model has pitch guidance:": "آیا ماڈل میں پچ گائیڈنس ہے:", - "Model information to be placed:": "ماڈل کی معلومات رکھی جائے گی:", - "Model architecture version:": "ماڈل آرکیٹیکچر ورژن:", - "Fusion": "امتزاج", - "Modify model information": "ماڈل کی معلومات میں ترمیم کریں۔", - "Path to Model:": "ماڈل کا راستہ:", - "Model information to be modified:": "ماڈل کی معلومات میں ترمیم کی جائے گی:", - "Save file name:": "فائل کا نام محفوظ کریں:", - "Modify": "ترمیم کریں۔", - "View model information": "ماڈل کی معلومات دیکھیں", - "View": "دیکھیں", - "Model extraction": "ماڈل نکالنا ('لاگز' فولڈر کے نیچے بڑی فائل ماڈل کا راستہ داخل کریں)۔ یہ مفید ہے اگر آپ تربیت کو آدھے راستے سے روکنا چاہتے ہیں اور دستی طور پر ایک چھوٹی ماڈل فائل کو نکالنا اور محفوظ کرنا چاہتے ہیں، یا اگر آپ انٹرمیڈیٹ ماڈل کی جانچ کرنا چاہتے ہیں:", - "Name:": "نام محفوظ کریں:", - "Whether the model has pitch guidance (1: yes, 0: no):": "آیا ماڈل میں پچ گائیڈنس ہے (1: ہاں، 0: نہیں):", - "Extract": "نکالنا", - "Export Onnx": "Onnx برآمد کریں۔", - "RVC Model Path:": "RVC ماڈل کا راستہ:", - "Onnx Export Path:": "Onnx برآمد کا راستہ:", - "MoeVS Model": "MoeVS ماڈل", - "Export Onnx Model": "Onnx ماڈل برآمد کریں۔", - "Load model": "لوڈ ماڈل", - "Hubert Model": "ہیوبرٹ ماڈل", - "Select the .pth file": ".pth فائل کو منتخب کریں۔", - "Select the .index file": ".index فائل کو منتخب کریں۔", - "Select the .npy file": ".npy فائل کو منتخب کریں۔", - "Input device": "ان پٹ ڈیوائس", - "Output device": "آؤٹ پٹ ڈیوائس", - "Audio device (please use the same type of driver)": "آڈیو ڈیوائس (براہ کرم ایک ہی قسم کا ڈرائیور استعمال کریں)", - "Response threshold": "جوابی حد", - "Pitch settings": "پچ کی ترتیبات", - "Whether to use note names instead of their hertz value. E.G. [C5, D6] instead of [523.25, 1174.66]Hz": "آیا نوٹ کے نام ان کی ہرٹز قدر کے بجائے استعمال کیے جائیں۔ ای جی [C5, D6] بجائے [523.25, 1174.66]Hz", - "Index Rate": "انڈیکس ریٹ", - "General settings": "عام ترتیبات", - "Sample length": "نمونہ کی لمبائی", - "Fade length": "دھندلا لمبائی", - "Extra inference time": "اضافی تخمینہ کا وقت", - "Input noise reduction": "ان پٹ شور کی کمی", - "Output noise reduction": "آؤٹ پٹ شور کی کمی", - "Performance settings": "کارکردگی کی ترتیبات", - "Start audio conversion": "آڈیو کی تبدیلی شروع کریں۔", - "Stop audio conversion": "آڈیو تبادلوں کو روکیں۔", - "Inference time (ms):": "انفرنس ٹائم (ms):", - "Select the pth file": "pth فائل کو منتخب کریں۔", - "Select the .index file:": "انڈیکس فائل کو منتخب کریں۔", - "The hubert model path must not contain Chinese characters": "ہیوبرٹ ماڈل پاتھ میں چینی حروف نہیں ہونے چاہئیں", - "The pth file path must not contain Chinese characters.": "pth فائل کا راستہ چینی حروف پر مشتمل نہیں ہونا چاہیے۔", - "The index file path must not contain Chinese characters.": "انڈیکس فائل کا راستہ چینی حروف پر مشتمل نہیں ہونا چاہیے۔", - "Step algorithm": "مرحلہ الگورتھم", - "Number of epoch processes": "عہد کے عمل کی تعداد", - "Lowest points export": "کم ترین پوائنٹس کی برآمد", - "How many lowest points to save:": "کتنے کم پوائنٹس کو بچانا ہے۔", - "Export lowest points of a model": "ماڈل کے سب سے کم پوائنٹس برآمد کریں۔", - "Output models:": "آؤٹ پٹ ماڈلز", - "Stats of selected models:": "منتخب ماڈلز کے اعدادوشمار", - "Custom f0 [Root pitch] File": "اپنی مرضی کے مطابق f0 [روٹ پچ] فائل", - "Min pitch:": "منٹ پچ", - "Specify minimal pitch for inference [HZ]": "تخمینہ کے لیے کم سے کم پچ کی وضاحت کریں [HZ]", - "Specify minimal pitch for inference [NOTE][OCTAVE]": "قیاس کے لیے کم سے کم پچ کی وضاحت کریں [NOTE][OCTAVE]", - "Max pitch:": "زیادہ سے زیادہ پچ", - "Specify max pitch for inference [HZ]": "تخمینہ کے لیے زیادہ سے زیادہ پچ کی وضاحت کریں [HZ]", - "Specify max pitch for inference [NOTE][OCTAVE]": "تخمینہ کے لیے زیادہ سے زیادہ پچ کی وضاحت کریں [NOTE][OCTAVE]", - "Browse presets for formanting": "فارمیٹنگ کے لیے پیش سیٹوں کو براؤز کریں۔", - "Presets are located in formantshiftcfg/ folder": "presets formantshiftcfg/ فولڈر میں واقع ہیں۔", - "Default value is 1.0": "پہلے سے طے شدہ قدر 1.0 ہے۔", - "Quefrency for formant shifting": "فارمینٹ شفٹنگ کے لیے Quefrency", - "Timbre for formant shifting": "فارمینٹ شفٹنگ کے لیے ٹمبر", - "Apply": "درخواست دیں", - "Single": "سنگل", - "Batch": "بیچ", - "Separate YouTube tracks": "یوٹیوب ٹریکس کو الگ کریں۔", - "Download audio from a YouTube video and automatically separate the vocal and instrumental tracks": "یوٹیوب ویڈیو سے آڈیو ڈاؤن لوڈ کریں اور خودکار طور پر آواز اور ساز کے ٹریک کو الگ کریں۔", - "Extra": "اضافی", - "Merge": "ضم", - "Merge your generated audios with the instrumental": "اپنے تیار کردہ آڈیوز کو انسٹرومینٹل کے ساتھ ضم کریں۔", - "Choose your instrumental:": "اپنے آلے کا انتخاب کریں۔", - "Choose the generated audio:": "تیار کردہ آڈیو کا انتخاب کریں۔", - "Combine": "یکجا", - "Download and Separate": "ڈاؤن لوڈ کریں اور الگ کریں۔", - "Enter the YouTube link:": "یوٹیوب کا لنک درج کریں۔", - "This section contains some extra utilities that often may be in experimental phases": "اس حصے میں کچھ اضافی افادیتیں ہیں جو اکثر تجرباتی مراحل میں ہو سکتی ہیں۔", - "Merge Audios": "آڈیوز کو ضم کریں۔", - "Audio files have been moved to the 'audios' folder.": "آڈیو فائلوں کو 'آڈیوز' فولڈر میں منتقل کر دیا گیا ہے۔", - "Downloading audio from the video...": "ویڈیو سے آڈیو ڈاؤن لوڈ ہو رہا ہے...", - "Audio downloaded!": "آڈیو ڈاؤن لوڈ!", - "An error occurred:": "ایک خرابی آگئی:", - "Separating audio...": "آڈیو کو الگ کیا جا رہا ہے...", - "File moved successfully.": "فائل کامیابی سے منتقل ہو گئی۔", - "Finished!": "ختم!", - "The source file does not exist.": "سورس فائل موجود نہیں ہے۔", - "Error moving the file:": "فائل کو منتقل کرنے میں خرابی:", - "Downloading {name} from drive": "ڈرائیو سے {name} ڈاؤن لوڈ ہو رہا ہے۔", - "The attempt to download using Drive didn't work": "Drive کا استعمال کرتے ہوئے ڈاؤن لوڈ کرنے کی کوشش نے کام نہیں کیا۔", - "Error downloading the file: {str(e)}": "فائل ڈاؤن لوڈ کرنے میں خرابی: {str(e)}", - "Downloading {name} from mega": "میگا سے {name} ڈاؤن لوڈ ہو رہا ہے۔", - "Downloading {name} from basic url": "بنیادی url سے {name} ڈاؤن لوڈ ہو رہا ہے۔", - "Download Audio": "آڈیو ڈاؤن لوڈ کریں۔", - "Download audios of any format for use in inference (recommended for mobile users).": "کسی بھی فارمیٹ کے آڈیوز کو قیاس میں استعمال کرنے کے لیے ڈاؤن لوڈ کریں (موبائل صارفین کے لیے تجویز کردہ)", - "Any ConnectionResetErrors post-conversion are irrelevant and purely visual; they can be ignored.\n": "تبدیلی کے بعد کی کوئی بھی ConnectionResetErrors غیر متعلقہ اور خالصتاً بصری ہیں۔ انہیں نظر انداز کیا جا سکتا ہے.", - "Processed audio saved at: ": "پروسیس شدہ آڈیو کو محفوظ کیا گیا:", - "Conversion complete!": "تبدیلی مکمل!", - "Reverb": "Reverb", - "Compressor": "کمپریسر", - "Noise Gate": "شور گیٹ", - "Volume": "حجم", - "Drag the audio here and click the Refresh button": "آڈیو کو یہاں گھسیٹیں اور ریفریش بٹن پر کلک کریں۔", - "Select the generated audio": "تیار کردہ آڈیو کو منتخب کریں۔", - "Volume of the instrumental audio:": "آلہ ساز آڈیو کا حجم", - "Volume of the generated audio:": "تیار کردہ آڈیو کا حجم", - "### Add the effects": "### اثرات شامل کریں۔", - "Starting audio conversion... (This might take a moment)": "آڈیو کنورشن شروع ہورہی ہے... (یہ تھوڑی دیر لگ سکتی ہے)", - "TTS Model:": "TTS آوازیں", - "TTS": "TTS", - "TTS Method:": "TTS میثاق", - "Audio TTS:": "آڈیو TTS", - "Audio RVC:": "آڈیو ماڈل" -} diff --git a/i18n/locale/zh_CN.json b/i18n/locale/zh_CN.json deleted file mode 100644 index c1c1b420120e32978b44d8aa0002e9a023a901d8..0000000000000000000000000000000000000000 --- a/i18n/locale/zh_CN.json +++ /dev/null @@ -1,247 +0,0 @@ -{ - "Unfortunately, there is no compatible GPU available to support your training.": "不幸的是,没有可用的兼容 GPU 来支持您的训练。", - "Yes": "是的", - "Select your dataset:": "选择您的数据集。", - "Update list": "更新列表。", - "Download Model": "下载模型", - "Download Backup": "下载备份", - "Download Dataset": "下载数据集", - "Download": "下载", - "Url:": "网址:", - "Build the index before saving.": "保存前构建索引。", - "Save your model once the training ends.": "训练结束后保存您的模型。", - "Save type": "保存类型", - "Save model": "保存模型", - "Choose the method": "选择方法", - "Save all": "保存全部", - "Save D and G": "保存D和G", - "Save voice": "保存语音", - "Downloading the file: ": "下载文件:", - "Stop training": "停止训练", - "Too many users have recently viewed or downloaded this file": "最近有太多用户查看或下载了此文件", - "Cannot get file from this private link": "无法从此私人链接获取文件", - "Full download": "完整下载", - "An error occurred downloading": "下载时发生错误", - "Model saved successfully": "模型保存成功", - "Saving the model...": "保存模型...", - "Saved without index...": "保存时没有索引...", - "model_name": "型号名称", - "Saved without inference model...": "保存时没有推理模型...", - "An error occurred saving the model": "保存模型时出错", - "The model you want to save does not exist, be sure to enter the correct name.": "您要保存的模型不存在,请务必输入正确的名称。", - "The file could not be downloaded.": "无法下载该文件。", - "Unzip error.": "解压错误。", - "Path to your added.index file (if it didn't automatically find it)": "添加的.index 文件的路径(如果没有自动找到它)", - "It has been downloaded successfully.": "已经下载成功了。", - "Proceeding with the extraction...": "继续提取...", - "The Backup has been uploaded successfully.": "备份已成功上传。", - "The Dataset has been loaded successfully.": "数据集已成功加载。", - "The Model has been loaded successfully.": "模型已成功加载。", - "It is used to download your inference models.": "它用于下载您的推理模型。", - "It is used to download your training backups.": "它用于下载您的训练备份。", - "Download the dataset with the audios in a compatible format (.wav/.flac) to train your model.": "下载包含兼容格式 (.wav/.flac) 音频的数据集来训练您的模型。", - "No relevant file was found to upload.": "没有找到相关文件可以上传。", - "The model works for inference, and has the .index file.": "该模型用于推理,并具有 .index 文件。", - "The model works for inference, but it doesn't have the .index file.": "该模型适用于推理,但没有 .index 文件。", - "This may take a few minutes, please wait...": "这可能需要几分钟,请稍候...", - "Resources": "资源", - "Step 1: Processing data": "步骤一:处理数据", - "Step 2: Skipping pitch extraction": "步骤 2a:跳过音调提取", - "Step 3: Extracting features": "步骤2b:提取特征", - "Step 4: Model training started": "步骤3a:模型训练开始", - "Step 5: Export lowest points on a graph of the model": "步骤 4:导出模型图表上的最低点", - "Training is done, check train.log": "训练完成,查看train.log", - "All processes have been completed!": "所有流程已完成!", - "Model Inference": "模型推理", - "Inferencing voice:": "推理语音:", - "Model_Name": "型号名称", - "Dataset_Name": "数据集_名称", - "Whether the model has pitch guidance.": "模型是否有俯仰引导。", - "Whether to save only the latest .ckpt file to save hard drive space": "是否仅保存最新的.ckpt文件以节省硬盘空间", - "Cache all training sets to GPU memory. Caching small datasets (less than 10 minutes) can speed up training": "将所有训练集缓存到 GPU 内存。缓存小数据集(少于 10 分钟)可以加快训练速度", - "Save a small final model to the 'weights' folder at each save point": "在每个保存点将一个小的最终模型保存到“权重”文件夹中", - "Refresh": "刷新语音列表、索引路径和音频文件", - "Unload voice to save GPU memory": "卸载语音以节省 GPU 内存:", - "Select Speaker/Singer ID:": "选择演讲者/歌手 ID:", - "Recommended +12 key for male to female conversion, and -12 key for female to male conversion. If the sound range goes too far and the voice is distorted, you can also adjust it to the appropriate range by yourself.": "建议+12键用于男性到女性的转换,-12键用于女性到男性的转换。如果音域走得太远,声音失真,也可以自行调整到合适的音域。", - "Transpose (integer, number Fof semitones, raise by an octave: 12, lower by an octave: -12):": "移调(整数,半音数,升高八度:12,降低八度:-12):", - "Enter the path of the audio file to be processed (default is the correct format example):": "输入要处理的音频文件的路径(默认为正确格式示例):", - "Select the pitch extraction algorithm:": "选择音高提取算法:", - "Mangio-Crepe Hop Length (Only applies to mangio-crepe): Hop length refers to the time it takes for the speaker to jump to a dramatic pitch. Lower hop lengths take more time to infer but are more pitch accurate.": "Mangio-Crepe 跳跃长度(仅适用于 mangio-crepe):跳跃长度是指说话者跳跃到戏剧性音高所需的时间。较短的跳跃长度需要更多的时间来推断,但音高更准确。", - "Feature search dataset file path": "特征搜索数据集文件路径", - "If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness.": "如果 >=3:对收获的音高结果应用中值滤波。该值代表过滤半径,可以减少呼吸味。", - "Path to the feature index file. Leave blank to use the selected result from the dropdown:": "功能索引文件的路径。留空以使用下拉列表中选定的结果:", - "Auto-detect index path and select from the dropdown:": "自动检测索引路径并从下拉列表中选择", - "Path to feature file:": "功能文件的路径:", - "Search feature ratio:": "搜索特征比例:", - "Resample the output audio in post-processing to the final sample rate. Set to 0 for no resampling:": "在后处理中将输出音频重新采样到最终采样率。设置为 0 表示不重采样:", - "Use the volume envelope of the input to replace or mix with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is used:": "使用输入的音量包络来替换或与输出的音量包络混合。该比率越接近 1,使用的输出包络就越多:", - "Protect voiceless consonants and breath sounds to prevent artifacts such as tearing in electronic music. Set to 0.5 to disable. Decrease the value to increase protection, but it may reduce indexing accuracy:": "保护清辅音和呼吸音,以防止电子音乐中出现撕裂等伪影。设置为 0.5 以禁用。减小该值可增强保护,但可能会降低索引精度:", - "F0 curve file (optional). One pitch per line. Replaces the default F0 and pitch modulation:": "F0 曲线文件(可选)。每行一个音高。替换默认的 F0 和音调调制:", - "Convert": "转变", - "Output information:": "输出信息", - "Export audio (click on the three dots in the lower right corner to download)": "导出音频(点击右下角三点即可下载)", - "Batch conversion. Enter the folder containing the audio files to be converted or upload multiple audio files. The converted audio will be output in the specified folder (default: 'opt').": "批量转换。输入包含要转换的音频文件的文件夹或上传多个音频文件。转换后的音频将输出到指定文件夹(默认:“opt”)。", - "Specify output folder:": "指定输出文件夹:", - "Enter the path of the audio folder to be processed (copy it from the address bar of the file manager):": "输入要处理的音频文件夹路径(从文件管理器地址栏复制):", - "You can also input audio files in batches. Choose one of the two options. Priority is given to reading from the folder.": "您还可以批量输入音频文件。选择两个选项之一。优先从文件夹中读取。", - "Export file format": "导出文件格式", - "UVR5": "紫外线5", - "Enter the path of the audio folder to be processed:": "输入要处理的音频文件夹路径:", - "Model": "模型", - "Vocal Extraction Aggressive": "声音提取 攻击性", - "Specify the output folder for vocals:": "指定人声的输出文件夹:", - "Specify the output folder for accompaniment:": "指定伴奏的输出文件夹:", - "Train": "火车", - "Enter the model name:": "输入型号名称:", - "Target sample rate:": "目标采样率:", - "Whether the model has pitch guidance (required for singing, optional for speech):": "模型是否有音调引导(唱歌时需要,语音时可选):", - "Version": "版本", - "Number of CPU processes:": "用于音高提取和数据处理的CPU进程数:", - "Enter the path of the training folder:": "输入训练文件夹的路径:", - "Specify the model ID:": "请指定型号 ID:", - "Auto detect audio path and select from the dropdown:": "自动检测音频路径并从下拉列表中选择:", - "Add audio's name to the path to the audio file to be processed (default is the correct format example) Remove the path to use an audio from the dropdown list:": "将音频的名称添加到要处理的音频文件的路径中(默认是正确的格式示例)从下拉列表中删除使用音频的路径:", - "Advanced Settings": "高级设置", - "Settings": "设置", - "Status:": "地位", - "Process data": "处理数据", - "Drag your audio here:": "将音频拖到此处并点击刷新按钮", - "Or record an audio:": "或者录制音频。", - "Formant shift inference audio": "共振峰移位推断音频", - "Used for male to female and vice-versa conversions": "用于男性到女性的转换,反之亦然", - "Provide the GPU index(es) separated by '-', like 0-1-2 for using GPUs 0, 1, and 2:": "请提供以“-”分隔的 GPU 索引,例如使用 GPU 0、1 和 2 时为 0-1-2:", - "GPU Information:": "GPU信息", - "Feature extraction": "特征提取", - "Save frequency:": "保存频率:", - "Training epochs:": "训练时期:", - "Batch size per GPU:": "每个 GPU 的批量大小:", - "Save only the latest '.ckpt' file to save disk space:": "仅保存最新的“.ckpt”文件以节省磁盘空间:", - "No": "不", - "Save a small final model to the 'weights' folder at each save point:": "在每个保存点将一个小的最终模型保存到“权重”文件夹中:", - "Load pre-trained base model G path:": "加载预训练的基础模型G路径:", - "Load pre-trained base model D path:": "加载预训练的基础模型D路径:", - "Train model": "火车模型", - "Train feature index": "列车特征指标", - "One-click training": "一键培训", - "Processing": "加工", - "Model fusion, can be used to test timbre fusion": "模型融合,可用于测试音色融合", - "Path to Model A:": "模型 A 的路径:", - "Path to Model B:": "模型 B 的路径:", - "Weight for Model A:": "A 型重量:", - "Whether the model has pitch guidance:": "模型是否有俯仰引导:", - "Model information to be placed:": "需放置的型号信息:", - "Model architecture version:": "模型架构版本:", - "Fusion": "融合", - "Modify model information": "修改型号信息", - "Path to Model:": "模型路径:", - "Model information to be modified:": "待修改型号信息:", - "Save file name:": "保存文件名:", - "Modify": "调整", - "View model information": "查看型号信息", - "View": "看法", - "Model extraction": "模型提取(输入“logs”文件夹下大文件模型的路径)。如果您想中途停止训练并手动提取并保存一个小模型文件,或者如果您想测试中间模型,这非常有用:", - "Name:": "保存名称:", - "Whether the model has pitch guidance (1: yes, 0: no):": "模型是否有俯仰引导(1:有,0:无):", - "Extract": "提炼", - "Export Onnx": "导出Onnx", - "RVC Model Path:": "RVC模型路径:", - "Onnx Export Path:": "Onnx 导出路径:", - "MoeVS Model": "MoeVS模型", - "Export Onnx Model": "导出 Onnx 模型", - "Load model": "负载模型", - "Hubert Model": "休伯特模型", - "Select the .pth file": "选择 .pth 文件", - "Select the .index file": "选择.index文件", - "Select the .npy file": "选择.npy 文件", - "Input device": "输入设备", - "Output device": "输出设备", - "Audio device (please use the same type of driver)": "音频设备(请使用同类型驱动程序)", - "Response threshold": "反应阈值", - "Pitch settings": "音调设置", - "Whether to use note names instead of their hertz value. E.G. [C5, D6] instead of [523.25, 1174.66]Hz": "是否使用音符名称而不是赫兹值。例如。 [C5,D6]而不是[523.25,1174.66]Hz", - "Index Rate": "指数率", - "General settings": "常规设置", - "Sample length": "样品长度", - "Fade length": "淡入淡出长度", - "Extra inference time": "额外的推理时间", - "Input noise reduction": "输入噪声降低", - "Output noise reduction": "输出噪声降低", - "Performance settings": "性能设置", - "Start audio conversion": "开始音频转换", - "Stop audio conversion": "停止音频转换", - "Inference time (ms):": "推理时间(毫秒):", - "Select the pth file": "选择.pth文件", - "Select the .index file:": "选择索引文件", - "The hubert model path must not contain Chinese characters": "hubert模型路径不能包含中文字符", - "The pth file path must not contain Chinese characters.": "pth文件路径不能包含中文字符。", - "The index file path must not contain Chinese characters.": "索引文件路径不能包含中文字符。", - "Step algorithm": "步进算法", - "Number of epoch processes": "纪元进程数", - "Lowest points export": "最低点导出", - "How many lowest points to save:": "保存多少个最低点", - "Export lowest points of a model": "导出模型的最低点", - "Output models:": "输出型号", - "Stats of selected models:": "所选模型的统计数据", - "Custom f0 [Root pitch] File": "自定义 f0 [根音] 文件", - "Min pitch:": "最小间距", - "Specify minimal pitch for inference [HZ]": "指定推理的最小间距 [HZ]", - "Specify minimal pitch for inference [NOTE][OCTAVE]": "指定推理的最小间距 [NOTE][OCTAVE]", - "Max pitch:": "最大螺距", - "Specify max pitch for inference [HZ]": "指定推理的最大间距 [HZ]", - "Specify max pitch for inference [NOTE][OCTAVE]": "指定推理的最大音高 [NOTE][OCTAVE]", - "Browse presets for formanting": "浏览共振峰预设", - "Presets are located in formantshiftcfg/ folder": "预设位于formantshiftcfg/文件夹中", - "Default value is 1.0": "默认值为 1.0", - "Quefrency for formant shifting": "共振峰移位频率", - "Timbre for formant shifting": "共振峰转换的音色", - "Apply": "申请", - "Single": "单身的", - "Batch": "批", - "Separate YouTube tracks": "单独的 YouTube 曲目", - "Download audio from a YouTube video and automatically separate the vocal and instrumental tracks": "从 YouTube 视频下载音频并自动分离人声和器乐曲目", - "Extra": "额外的", - "Merge": "合并", - "Merge your generated audios with the instrumental": "将生成的音频与乐器合并", - "Choose your instrumental:": "选择您的乐器", - "Choose the generated audio:": "选择生成的音频", - "Combine": "结合", - "Download and Separate": "下载并分离", - "Enter the YouTube link:": "输入 YouTube 链接", - "This section contains some extra utilities that often may be in experimental phases": "本节包含一些通常可能处于实验阶段的额外实用程序", - "Merge Audios": "合并音频", - "Audio files have been moved to the 'audios' folder.": "音频文件已移至“audios”文件夹。", - "Downloading audio from the video...": "正在从视频下载音频...", - "Audio downloaded!": "音频下载!", - "An error occurred:": "发生错误:", - "Separating audio...": "分离音频...", - "File moved successfully.": "文件移动成功。", - "Finished!": "完成的!", - "The source file does not exist.": "源文件不存在。", - "Error moving the file:": "移动文件时出错:", - "Downloading {name} from drive": "正在从驱动器下载 {name}", - "The attempt to download using Drive didn't work": "尝试使用云端硬盘下载失败", - "Error downloading the file: {str(e)}": "下载文件时出错:{str(e)}", - "Downloading {name} from mega": "正在从 mega 下载 {name}", - "Downloading {name} from basic url": "从基本网址下载 {name}", - "Download Audio": "下载音频", - "Download audios of any format for use in inference (recommended for mobile users).": "下载任何格式的音频用于推理(推荐移动用户)", - "Any ConnectionResetErrors post-conversion are irrelevant and purely visual; they can be ignored.\n": "转换后的任何 ConnectionResetErrors 都是无关紧要的并且纯粹是视觉上的;它们可以被忽略。", - "Processed audio saved at: ": "处理后的音频保存在:", - "Conversion complete!": "转换完成!", - "Reverb": "混响", - "Compressor": "压缩机", - "Noise Gate": "噪声门", - "Volume": "体积", - "Drag the audio here and click the Refresh button": "将音频拖至此处并单击刷新按钮", - "Select the generated audio": "选择生成的音频", - "Volume of the instrumental audio:": "乐器音频的音量", - "Volume of the generated audio:": "生成音频的音量", - "### Add the effects": "### 添加效果", - "Starting audio conversion... (This might take a moment)": "开始音频转换...(这可能需要一点时间)", - "TTS Model:": "TTS 语音", - "TTS": "TTS", - "TTS Method:": "TTS 方法", - "Audio TTS:": "音频 TTS", - "Audio RVC:": "音频模型" -} diff --git a/i18n/locale_diff.py b/i18n/locale_diff.py deleted file mode 100644 index 387ddfe1b16c2f9f32b6b9682b61353837b06bd8..0000000000000000000000000000000000000000 --- a/i18n/locale_diff.py +++ /dev/null @@ -1,45 +0,0 @@ -import json -import os -from collections import OrderedDict - -# Define the standard file name -standard_file = "en_US.json" - -# Find all JSON files in the directory -dir_path = "./" -languages = [ - f for f in os.listdir(dir_path) if f.endswith(".json") and f != standard_file -] - -# Load the standard file -with open(standard_file, "r", encoding="utf-8") as f: - standard_data = json.load(f, object_pairs_hook=OrderedDict) - -# Loop through each language file -for lang_file in languages: - # Load the language file - with open(lang_file, "r", encoding="utf-8") as f: - lang_data = json.load(f, object_pairs_hook=OrderedDict) - - # Find the difference between the language file and the standard file - diff = set(standard_data.keys()) - set(lang_data.keys()) - - miss = set(lang_data.keys()) - set(standard_data.keys()) - - # Add any missing keys to the language file - for key in diff: - lang_data[key] = key - - # Del any extra keys to the language file - for key in miss: - del lang_data[key] - - # Sort the keys of the language file to match the order of the standard file - lang_data = OrderedDict( - sorted(lang_data.items(), key=lambda x: list(standard_data.keys()).index(x[0])) - ) - - # Save the updated language file - with open(lang_file, "w", encoding="utf-8") as f: - json.dump(lang_data, f, ensure_ascii=False, indent=4) - f.write("\n") diff --git a/images/icon.png b/images/icon.png deleted file mode 100644 index f9aae65bbbb712383531d26e6a956362576634fb..0000000000000000000000000000000000000000 Binary files a/images/icon.png and /dev/null differ diff --git a/infer/lib/audio.py b/infer/lib/audio.py deleted file mode 100644 index 9ad4ff74218957cf18782fa71add40a734b47e78..0000000000000000000000000000000000000000 --- a/infer/lib/audio.py +++ /dev/null @@ -1,197 +0,0 @@ -import librosa -import numpy as np -import av -from io import BytesIO -import ffmpeg -import os -import sys - -import random -from infer.lib.csvutil import CSVutil -#import csv - -platform_stft_mapping = { - 'linux': 'stftpitchshift', - 'darwin': 'stftpitchshift', - 'win32': 'stftpitchshift.exe', -} - -stft = platform_stft_mapping.get(sys.platform) - -def wav2(i, o, format): - inp = av.open(i, 'rb') - if format == "m4a": format = "mp4" - out = av.open(o, 'wb', format=format) - if format == "ogg": format = "libvorbis" - if format == "mp4": format = "aac" - - ostream = out.add_stream(format) - - for frame in inp.decode(audio=0): - for p in ostream.encode(frame): out.mux(p) - - for p in ostream.encode(None): out.mux(p) - - out.close() - inp.close() - -def audio2(i, o, format, sr): - inp = av.open(i, 'rb') - out = av.open(o, 'wb', format=format) - if format == "ogg": format = "libvorbis" - if format == "f32le": format = "pcm_f32le" - - ostream = out.add_stream(format, channels=1) - ostream.sample_rate = sr - - for frame in inp.decode(audio=0): - for p in ostream.encode(frame): out.mux(p) - - out.close() - inp.close() - -def load_audion(file, sr): - try: - file = ( - file.strip(" ").strip('"').strip("\n").strip('"').strip(" ") - ) # 防止小白拷路径头尾带了空格和"和回车 - with open(file, "rb") as f: - with BytesIO() as out: - audio2(f, out, "f32le", sr) - return np.frombuffer(out.getvalue(), np.float32).flatten() - - except AttributeError: - audio = file[1] / 32768.0 - if len(audio.shape) == 2: - audio = np.mean(audio, -1) - return librosa.resample(audio, orig_sr=file[0], target_sr=16000) - - except Exception as e: - raise RuntimeError(f"Failed to load audio: {e}") - - - - -def load_audio(file, sr, DoFormant=False, Quefrency=1.0, Timbre=1.0): - converted = False - DoFormant, Quefrency, Timbre = CSVutil("csvdb/formanting.csv", "r", "formanting") - try: - # https://github.com/openai/whisper/blob/main/whisper/audio.py#L26 - # This launches a subprocess to decode audio while down-mixing and resampling as necessary. - # Requires the ffmpeg CLI and `ffmpeg-python` package to be installed. - file = ( - file.strip(" ").strip('"').strip("\n").strip('"').strip(" ") - ) # 防止小白拷路径头尾带了空格和"和回车 - file_formanted = file.strip(" ").strip('"').strip("\n").strip('"').strip(" ") - - # print(f"dofor={bool(DoFormant)} timbr={Timbre} quef={Quefrency}\n") - - if ( - lambda DoFormant: True - if DoFormant.lower() == "true" - else (False if DoFormant.lower() == "false" else DoFormant) - )(DoFormant): - numerator = round(random.uniform(1, 4), 4) - # os.system(f"stftpitchshift -i {file} -q {Quefrency} -t {Timbre} -o {file_formanted}") - # print('stftpitchshift -i "%s" -p 1.0 --rms -w 128 -v 8 -q %s -t %s -o "%s"' % (file, Quefrency, Timbre, file_formanted)) - - if not file.endswith(".wav"): - if not os.path.isfile(f"{file_formanted}.wav"): - converted = True - # print(f"\nfile = {file}\n") - # print(f"\nfile_formanted = {file_formanted}\n") - converting = ( - ffmpeg.input(file_formanted, threads=0) - .output(f"{file_formanted}.wav") - .run( - cmd=["ffmpeg", "-nostdin"], - capture_stdout=True, - capture_stderr=True, - ) - ) - else: - pass - - file_formanted = ( - f"{file_formanted}.wav" - if not file_formanted.endswith(".wav") - else file_formanted - ) - - print(f" · Formanting {file_formanted}...\n") - - os.system( - '%s -i "%s" -q "%s" -t "%s" -o "%sFORMANTED_%s.wav"' - % ( - stft, - file_formanted, - Quefrency, - Timbre, - file_formanted, - str(numerator), - ) - ) - - print(f" · Formanted {file_formanted}!\n") - - # filepraat = (os.path.abspath(os.getcwd()) + '\\' + file).replace('/','\\') - # file_formantedpraat = ('"' + os.path.abspath(os.getcwd()) + '/' + 'formanted'.join(file_formanted) + '"').replace('/','\\') - # print("%sFORMANTED_%s.wav" % (file_formanted, str(numerator))) - - out, _ = ( - ffmpeg.input( - "%sFORMANTED_%s.wav" % (file_formanted, str(numerator)), threads=0 - ) - .output("-", format="f32le", acodec="pcm_f32le", ac=1, ar=sr) - .run( - cmd=["ffmpeg", "-nostdin"], capture_stdout=True, capture_stderr=True - ) - ) - - try: - os.remove("%sFORMANTED_%s.wav" % (file_formanted, str(numerator))) - except Exception: - pass - print("couldn't remove formanted type of file") - - else: - out, _ = ( - ffmpeg.input(file, threads=0) - .output("-", format="f32le", acodec="pcm_f32le", ac=1, ar=sr) - .run( - cmd=["ffmpeg", "-nostdin"], capture_stdout=True, capture_stderr=True - ) - ) - except Exception as e: - raise RuntimeError(f"Failed to load audio: {e}") - - if converted: - try: - os.remove(file_formanted) - except Exception: - pass - print("couldn't remove converted type of file") - converted = False - - return np.frombuffer(out, np.float32).flatten() - - -def check_audio_duration(file): - try: - file = file.strip(" ").strip('"').strip("\n").strip('"').strip(" ") - - probe = ffmpeg.probe(file) - - duration = float(probe['streams'][0]['duration']) - - if duration < 0.76: - print( - f"\n------------\n" - f"Audio file, {file.split('/')[-1]}, under ~0.76s detected - file is too short. Target at least 1-2s for best results." - f"\n------------\n\n" - ) - return False - - return True - except Exception as e: - raise RuntimeError(f"Failed to check audio duration: {e}") \ No newline at end of file diff --git a/infer/lib/csvutil.py b/infer/lib/csvutil.py deleted file mode 100644 index 79f432b6933f181d9194c50581656f2fd6e66c0c..0000000000000000000000000000000000000000 --- a/infer/lib/csvutil.py +++ /dev/null @@ -1,41 +0,0 @@ - -import numpy as np - -# import praatio -# import praatio.praat_scripts -import os -import sys - -import random - -import csv - -# praatEXE = join('.',os.path.abspath(os.getcwd()) + r"\Praat.exe") - - -def CSVutil(file, rw, type, *args): - if type == "formanting": - if rw == "r": - with open(file) as fileCSVread: - csv_reader = list(csv.reader(fileCSVread)) - return ( - (csv_reader[0][0], csv_reader[0][1], csv_reader[0][2]) - if csv_reader is not None - else (lambda: exec('raise ValueError("No data")'))() - ) - else: - if args: - doformnt = args[0] - else: - doformnt = False - qfr = args[1] if len(args) > 1 else 1.0 - tmb = args[2] if len(args) > 2 else 1.0 - with open(file, rw, newline="") as fileCSVwrite: - csv_writer = csv.writer(fileCSVwrite, delimiter=",") - csv_writer.writerow([doformnt, qfr, tmb]) - elif type == "stop": - stop = args[0] if args else False - with open(file, rw, newline="") as fileCSVwrite: - csv_writer = csv.writer(fileCSVwrite, delimiter=",") - csv_writer.writerow([stop]) - diff --git a/infer/lib/infer_pack/attentions.py b/infer/lib/infer_pack/attentions.py deleted file mode 100644 index 19a0a670021aacb9ae1c7f8f54ca1bff8e065375..0000000000000000000000000000000000000000 --- a/infer/lib/infer_pack/attentions.py +++ /dev/null @@ -1,417 +0,0 @@ -import copy -import math - -import numpy as np -import torch -from torch import nn -from torch.nn import functional as F - -from infer.lib.infer_pack import commons, modules -from infer.lib.infer_pack.modules import LayerNorm - - -class Encoder(nn.Module): - def __init__( - self, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size=1, - p_dropout=0.0, - window_size=10, - **kwargs - ): - super().__init__() - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.window_size = window_size - - self.drop = nn.Dropout(p_dropout) - self.attn_layers = nn.ModuleList() - self.norm_layers_1 = nn.ModuleList() - self.ffn_layers = nn.ModuleList() - self.norm_layers_2 = nn.ModuleList() - for i in range(self.n_layers): - self.attn_layers.append( - MultiHeadAttention( - hidden_channels, - hidden_channels, - n_heads, - p_dropout=p_dropout, - window_size=window_size, - ) - ) - self.norm_layers_1.append(LayerNorm(hidden_channels)) - self.ffn_layers.append( - FFN( - hidden_channels, - hidden_channels, - filter_channels, - kernel_size, - p_dropout=p_dropout, - ) - ) - self.norm_layers_2.append(LayerNorm(hidden_channels)) - - def forward(self, x, x_mask): - attn_mask = x_mask.unsqueeze(2) * x_mask.unsqueeze(-1) - x = x * x_mask - for i in range(self.n_layers): - y = self.attn_layers[i](x, x, attn_mask) - y = self.drop(y) - x = self.norm_layers_1[i](x + y) - - y = self.ffn_layers[i](x, x_mask) - y = self.drop(y) - x = self.norm_layers_2[i](x + y) - x = x * x_mask - return x - - -class Decoder(nn.Module): - def __init__( - self, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size=1, - p_dropout=0.0, - proximal_bias=False, - proximal_init=True, - **kwargs - ): - super().__init__() - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.proximal_bias = proximal_bias - self.proximal_init = proximal_init - - self.drop = nn.Dropout(p_dropout) - self.self_attn_layers = nn.ModuleList() - self.norm_layers_0 = nn.ModuleList() - self.encdec_attn_layers = nn.ModuleList() - self.norm_layers_1 = nn.ModuleList() - self.ffn_layers = nn.ModuleList() - self.norm_layers_2 = nn.ModuleList() - for i in range(self.n_layers): - self.self_attn_layers.append( - MultiHeadAttention( - hidden_channels, - hidden_channels, - n_heads, - p_dropout=p_dropout, - proximal_bias=proximal_bias, - proximal_init=proximal_init, - ) - ) - self.norm_layers_0.append(LayerNorm(hidden_channels)) - self.encdec_attn_layers.append( - MultiHeadAttention( - hidden_channels, hidden_channels, n_heads, p_dropout=p_dropout - ) - ) - self.norm_layers_1.append(LayerNorm(hidden_channels)) - self.ffn_layers.append( - FFN( - hidden_channels, - hidden_channels, - filter_channels, - kernel_size, - p_dropout=p_dropout, - causal=True, - ) - ) - self.norm_layers_2.append(LayerNorm(hidden_channels)) - - def forward(self, x, x_mask, h, h_mask): - """ - x: decoder input - h: encoder output - """ - self_attn_mask = commons.subsequent_mask(x_mask.size(2)).to( - device=x.device, dtype=x.dtype - ) - encdec_attn_mask = h_mask.unsqueeze(2) * x_mask.unsqueeze(-1) - x = x * x_mask - for i in range(self.n_layers): - y = self.self_attn_layers[i](x, x, self_attn_mask) - y = self.drop(y) - x = self.norm_layers_0[i](x + y) - - y = self.encdec_attn_layers[i](x, h, encdec_attn_mask) - y = self.drop(y) - x = self.norm_layers_1[i](x + y) - - y = self.ffn_layers[i](x, x_mask) - y = self.drop(y) - x = self.norm_layers_2[i](x + y) - x = x * x_mask - return x - - -class MultiHeadAttention(nn.Module): - def __init__( - self, - channels, - out_channels, - n_heads, - p_dropout=0.0, - window_size=None, - heads_share=True, - block_length=None, - proximal_bias=False, - proximal_init=False, - ): - super().__init__() - assert channels % n_heads == 0 - - self.channels = channels - self.out_channels = out_channels - self.n_heads = n_heads - self.p_dropout = p_dropout - self.window_size = window_size - self.heads_share = heads_share - self.block_length = block_length - self.proximal_bias = proximal_bias - self.proximal_init = proximal_init - self.attn = None - - self.k_channels = channels // n_heads - self.conv_q = nn.Conv1d(channels, channels, 1) - self.conv_k = nn.Conv1d(channels, channels, 1) - self.conv_v = nn.Conv1d(channels, channels, 1) - self.conv_o = nn.Conv1d(channels, out_channels, 1) - self.drop = nn.Dropout(p_dropout) - - if window_size is not None: - n_heads_rel = 1 if heads_share else n_heads - rel_stddev = self.k_channels**-0.5 - self.emb_rel_k = nn.Parameter( - torch.randn(n_heads_rel, window_size * 2 + 1, self.k_channels) - * rel_stddev - ) - self.emb_rel_v = nn.Parameter( - torch.randn(n_heads_rel, window_size * 2 + 1, self.k_channels) - * rel_stddev - ) - - nn.init.xavier_uniform_(self.conv_q.weight) - nn.init.xavier_uniform_(self.conv_k.weight) - nn.init.xavier_uniform_(self.conv_v.weight) - if proximal_init: - with torch.no_grad(): - self.conv_k.weight.copy_(self.conv_q.weight) - self.conv_k.bias.copy_(self.conv_q.bias) - - def forward(self, x, c, attn_mask=None): - q = self.conv_q(x) - k = self.conv_k(c) - v = self.conv_v(c) - - x, self.attn = self.attention(q, k, v, mask=attn_mask) - - x = self.conv_o(x) - return x - - def attention(self, query, key, value, mask=None): - # reshape [b, d, t] -> [b, n_h, t, d_k] - b, d, t_s, t_t = (*key.size(), query.size(2)) - query = query.view(b, self.n_heads, self.k_channels, t_t).transpose(2, 3) - key = key.view(b, self.n_heads, self.k_channels, t_s).transpose(2, 3) - value = value.view(b, self.n_heads, self.k_channels, t_s).transpose(2, 3) - - scores = torch.matmul(query / math.sqrt(self.k_channels), key.transpose(-2, -1)) - if self.window_size is not None: - assert ( - t_s == t_t - ), "Relative attention is only available for self-attention." - key_relative_embeddings = self._get_relative_embeddings(self.emb_rel_k, t_s) - rel_logits = self._matmul_with_relative_keys( - query / math.sqrt(self.k_channels), key_relative_embeddings - ) - scores_local = self._relative_position_to_absolute_position(rel_logits) - scores = scores + scores_local - if self.proximal_bias: - assert t_s == t_t, "Proximal bias is only available for self-attention." - scores = scores + self._attention_bias_proximal(t_s).to( - device=scores.device, dtype=scores.dtype - ) - if mask is not None: - scores = scores.masked_fill(mask == 0, -1e4) - if self.block_length is not None: - assert ( - t_s == t_t - ), "Local attention is only available for self-attention." - block_mask = ( - torch.ones_like(scores) - .triu(-self.block_length) - .tril(self.block_length) - ) - scores = scores.masked_fill(block_mask == 0, -1e4) - p_attn = F.softmax(scores, dim=-1) # [b, n_h, t_t, t_s] - p_attn = self.drop(p_attn) - output = torch.matmul(p_attn, value) - if self.window_size is not None: - relative_weights = self._absolute_position_to_relative_position(p_attn) - value_relative_embeddings = self._get_relative_embeddings( - self.emb_rel_v, t_s - ) - output = output + self._matmul_with_relative_values( - relative_weights, value_relative_embeddings - ) - output = ( - output.transpose(2, 3).contiguous().view(b, d, t_t) - ) # [b, n_h, t_t, d_k] -> [b, d, t_t] - return output, p_attn - - def _matmul_with_relative_values(self, x, y): - """ - x: [b, h, l, m] - y: [h or 1, m, d] - ret: [b, h, l, d] - """ - ret = torch.matmul(x, y.unsqueeze(0)) - return ret - - def _matmul_with_relative_keys(self, x, y): - """ - x: [b, h, l, d] - y: [h or 1, m, d] - ret: [b, h, l, m] - """ - ret = torch.matmul(x, y.unsqueeze(0).transpose(-2, -1)) - return ret - - def _get_relative_embeddings(self, relative_embeddings, length): - max_relative_position = 2 * self.window_size + 1 - # Pad first before slice to avoid using cond ops. - pad_length = max(length - (self.window_size + 1), 0) - slice_start_position = max((self.window_size + 1) - length, 0) - slice_end_position = slice_start_position + 2 * length - 1 - if pad_length > 0: - padded_relative_embeddings = F.pad( - relative_embeddings, - commons.convert_pad_shape([[0, 0], [pad_length, pad_length], [0, 0]]), - ) - else: - padded_relative_embeddings = relative_embeddings - used_relative_embeddings = padded_relative_embeddings[ - :, slice_start_position:slice_end_position - ] - return used_relative_embeddings - - def _relative_position_to_absolute_position(self, x): - """ - x: [b, h, l, 2*l-1] - ret: [b, h, l, l] - """ - batch, heads, length, _ = x.size() - # Concat columns of pad to shift from relative to absolute indexing. - x = F.pad(x, commons.convert_pad_shape([[0, 0], [0, 0], [0, 0], [0, 1]])) - - # Concat extra elements so to add up to shape (len+1, 2*len-1). - x_flat = x.view([batch, heads, length * 2 * length]) - x_flat = F.pad( - x_flat, commons.convert_pad_shape([[0, 0], [0, 0], [0, length - 1]]) - ) - - # Reshape and slice out the padded elements. - x_final = x_flat.view([batch, heads, length + 1, 2 * length - 1])[ - :, :, :length, length - 1 : - ] - return x_final - - def _absolute_position_to_relative_position(self, x): - """ - x: [b, h, l, l] - ret: [b, h, l, 2*l-1] - """ - batch, heads, length, _ = x.size() - # padd along column - x = F.pad( - x, commons.convert_pad_shape([[0, 0], [0, 0], [0, 0], [0, length - 1]]) - ) - x_flat = x.view([batch, heads, length**2 + length * (length - 1)]) - # add 0's in the beginning that will skew the elements after reshape - x_flat = F.pad(x_flat, commons.convert_pad_shape([[0, 0], [0, 0], [length, 0]])) - x_final = x_flat.view([batch, heads, length, 2 * length])[:, :, :, 1:] - return x_final - - def _attention_bias_proximal(self, length): - """Bias for self-attention to encourage attention to close positions. - Args: - length: an integer scalar. - Returns: - a Tensor with shape [1, 1, length, length] - """ - r = torch.arange(length, dtype=torch.float32) - diff = torch.unsqueeze(r, 0) - torch.unsqueeze(r, 1) - return torch.unsqueeze(torch.unsqueeze(-torch.log1p(torch.abs(diff)), 0), 0) - - -class FFN(nn.Module): - def __init__( - self, - in_channels, - out_channels, - filter_channels, - kernel_size, - p_dropout=0.0, - activation=None, - causal=False, - ): - super().__init__() - self.in_channels = in_channels - self.out_channels = out_channels - self.filter_channels = filter_channels - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.activation = activation - self.causal = causal - - if causal: - self.padding = self._causal_padding - else: - self.padding = self._same_padding - - self.conv_1 = nn.Conv1d(in_channels, filter_channels, kernel_size) - self.conv_2 = nn.Conv1d(filter_channels, out_channels, kernel_size) - self.drop = nn.Dropout(p_dropout) - - def forward(self, x, x_mask): - x = self.conv_1(self.padding(x * x_mask)) - if self.activation == "gelu": - x = x * torch.sigmoid(1.702 * x) - else: - x = torch.relu(x) - x = self.drop(x) - x = self.conv_2(self.padding(x * x_mask)) - return x * x_mask - - def _causal_padding(self, x): - if self.kernel_size == 1: - return x - pad_l = self.kernel_size - 1 - pad_r = 0 - padding = [[0, 0], [0, 0], [pad_l, pad_r]] - x = F.pad(x, commons.convert_pad_shape(padding)) - return x - - def _same_padding(self, x): - if self.kernel_size == 1: - return x - pad_l = (self.kernel_size - 1) // 2 - pad_r = self.kernel_size // 2 - padding = [[0, 0], [0, 0], [pad_l, pad_r]] - x = F.pad(x, commons.convert_pad_shape(padding)) - return x diff --git a/infer/lib/infer_pack/commons.py b/infer/lib/infer_pack/commons.py deleted file mode 100644 index ccd334b7320543b0c3a2166f82093564c9721317..0000000000000000000000000000000000000000 --- a/infer/lib/infer_pack/commons.py +++ /dev/null @@ -1,167 +0,0 @@ -import math - -import numpy as np -import torch -from torch import nn -from torch.nn import functional as F - - -def init_weights(m, mean=0.0, std=0.01): - classname = m.__class__.__name__ - if classname.find("Conv") != -1: - m.weight.data.normal_(mean, std) - - -def get_padding(kernel_size, dilation=1): - return int((kernel_size * dilation - dilation) / 2) - - -def convert_pad_shape(pad_shape): - l = pad_shape[::-1] - pad_shape = [item for sublist in l for item in sublist] - return pad_shape - - -def kl_divergence(m_p, logs_p, m_q, logs_q): - """KL(P||Q)""" - kl = (logs_q - logs_p) - 0.5 - kl += ( - 0.5 * (torch.exp(2.0 * logs_p) + ((m_p - m_q) ** 2)) * torch.exp(-2.0 * logs_q) - ) - return kl - - -def rand_gumbel(shape): - """Sample from the Gumbel distribution, protect from overflows.""" - uniform_samples = torch.rand(shape) * 0.99998 + 0.00001 - return -torch.log(-torch.log(uniform_samples)) - - -def rand_gumbel_like(x): - g = rand_gumbel(x.size()).to(dtype=x.dtype, device=x.device) - return g - - -def slice_segments(x, ids_str, segment_size=4): - ret = torch.zeros_like(x[:, :, :segment_size]) - for i in range(x.size(0)): - idx_str = ids_str[i] - idx_end = idx_str + segment_size - ret[i] = x[i, :, idx_str:idx_end] - return ret - - -def slice_segments2(x, ids_str, segment_size=4): - ret = torch.zeros_like(x[:, :segment_size]) - for i in range(x.size(0)): - idx_str = ids_str[i] - idx_end = idx_str + segment_size - ret[i] = x[i, idx_str:idx_end] - return ret - - -def rand_slice_segments(x, x_lengths=None, segment_size=4): - b, d, t = x.size() - if x_lengths is None: - x_lengths = t - ids_str_max = x_lengths - segment_size + 1 - ids_str = (torch.rand([b]).to(device=x.device) * ids_str_max).to(dtype=torch.long) - ret = slice_segments(x, ids_str, segment_size) - return ret, ids_str - - -def get_timing_signal_1d(length, channels, min_timescale=1.0, max_timescale=1.0e4): - position = torch.arange(length, dtype=torch.float) - num_timescales = channels // 2 - log_timescale_increment = math.log(float(max_timescale) / float(min_timescale)) / ( - num_timescales - 1 - ) - inv_timescales = min_timescale * torch.exp( - torch.arange(num_timescales, dtype=torch.float) * -log_timescale_increment - ) - scaled_time = position.unsqueeze(0) * inv_timescales.unsqueeze(1) - signal = torch.cat([torch.sin(scaled_time), torch.cos(scaled_time)], 0) - signal = F.pad(signal, [0, 0, 0, channels % 2]) - signal = signal.view(1, channels, length) - return signal - - -def add_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4): - b, channels, length = x.size() - signal = get_timing_signal_1d(length, channels, min_timescale, max_timescale) - return x + signal.to(dtype=x.dtype, device=x.device) - - -def cat_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4, axis=1): - b, channels, length = x.size() - signal = get_timing_signal_1d(length, channels, min_timescale, max_timescale) - return torch.cat([x, signal.to(dtype=x.dtype, device=x.device)], axis) - - -def subsequent_mask(length): - mask = torch.tril(torch.ones(length, length)).unsqueeze(0).unsqueeze(0) - return mask - - -@torch.jit.script -def fused_add_tanh_sigmoid_multiply(input_a, input_b, n_channels): - n_channels_int = n_channels[0] - in_act = input_a + input_b - t_act = torch.tanh(in_act[:, :n_channels_int, :]) - s_act = torch.sigmoid(in_act[:, n_channels_int:, :]) - acts = t_act * s_act - return acts - - -def convert_pad_shape(pad_shape): - l = pad_shape[::-1] - pad_shape = [item for sublist in l for item in sublist] - return pad_shape - - -def shift_1d(x): - x = F.pad(x, convert_pad_shape([[0, 0], [0, 0], [1, 0]]))[:, :, :-1] - return x - - -def sequence_mask(length, max_length=None): - if max_length is None: - max_length = length.max() - x = torch.arange(max_length, dtype=length.dtype, device=length.device) - return x.unsqueeze(0) < length.unsqueeze(1) - - -def generate_path(duration, mask): - """ - duration: [b, 1, t_x] - mask: [b, 1, t_y, t_x] - """ - device = duration.device - - b, _, t_y, t_x = mask.shape - cum_duration = torch.cumsum(duration, -1) - - cum_duration_flat = cum_duration.view(b * t_x) - path = sequence_mask(cum_duration_flat, t_y).to(mask.dtype) - path = path.view(b, t_x, t_y) - path = path - F.pad(path, convert_pad_shape([[0, 0], [1, 0], [0, 0]]))[:, :-1] - path = path.unsqueeze(1).transpose(2, 3) * mask - return path - - -def clip_grad_value_(parameters, clip_value, norm_type=2): - if isinstance(parameters, torch.Tensor): - parameters = [parameters] - parameters = list(filter(lambda p: p.grad is not None, parameters)) - norm_type = float(norm_type) - if clip_value is not None: - clip_value = float(clip_value) - - total_norm = 0 - for p in parameters: - param_norm = p.grad.data.norm(norm_type) - total_norm += param_norm.item() ** norm_type - if clip_value is not None: - p.grad.data.clamp_(min=-clip_value, max=clip_value) - total_norm = total_norm ** (1.0 / norm_type) - return total_norm diff --git a/infer/lib/infer_pack/models.py b/infer/lib/infer_pack/models.py deleted file mode 100644 index 7a387b888f63ecd6f1f1bd3ed10aa2176a944d2c..0000000000000000000000000000000000000000 --- a/infer/lib/infer_pack/models.py +++ /dev/null @@ -1,1174 +0,0 @@ -import math -import logging - -logger = logging.getLogger(__name__) - -import numpy as np -import torch -from torch import nn -from torch.nn import AvgPool1d, Conv1d, Conv2d, ConvTranspose1d -from torch.nn import functional as F -from torch.nn.utils import remove_weight_norm, spectral_norm, weight_norm - -from infer.lib.infer_pack import attentions, commons, modules -from infer.lib.infer_pack.commons import get_padding, init_weights -has_xpu = bool(hasattr(torch, "xpu") and torch.xpu.is_available()) - -class TextEncoder256(nn.Module): - def __init__( - self, - out_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - f0=True, - ): - super().__init__() - self.out_channels = out_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.emb_phone = nn.Linear(256, hidden_channels) - self.lrelu = nn.LeakyReLU(0.1, inplace=True) - if f0 == True: - self.emb_pitch = nn.Embedding(256, hidden_channels) # pitch 256 - self.encoder = attentions.Encoder( - hidden_channels, filter_channels, n_heads, n_layers, kernel_size, p_dropout - ) - self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1) - - def forward(self, phone, pitch, lengths): - if pitch == None: - x = self.emb_phone(phone) - else: - x = self.emb_phone(phone) + self.emb_pitch(pitch) - x = x * math.sqrt(self.hidden_channels) # [b, t, h] - x = self.lrelu(x) - x = torch.transpose(x, 1, -1) # [b, h, t] - x_mask = torch.unsqueeze(commons.sequence_mask(lengths, x.size(2)), 1).to( - x.dtype - ) - x = self.encoder(x * x_mask, x_mask) - stats = self.proj(x) * x_mask - - m, logs = torch.split(stats, self.out_channels, dim=1) - return m, logs, x_mask - - -class TextEncoder768(nn.Module): - def __init__( - self, - out_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - f0=True, - ): - super().__init__() - self.out_channels = out_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.emb_phone = nn.Linear(768, hidden_channels) - self.lrelu = nn.LeakyReLU(0.1, inplace=True) - if f0 == True: - self.emb_pitch = nn.Embedding(256, hidden_channels) # pitch 256 - self.encoder = attentions.Encoder( - hidden_channels, filter_channels, n_heads, n_layers, kernel_size, p_dropout - ) - self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1) - - def forward(self, phone, pitch, lengths): - if pitch == None: - x = self.emb_phone(phone) - else: - x = self.emb_phone(phone) + self.emb_pitch(pitch) - x = x * math.sqrt(self.hidden_channels) # [b, t, h] - x = self.lrelu(x) - x = torch.transpose(x, 1, -1) # [b, h, t] - x_mask = torch.unsqueeze(commons.sequence_mask(lengths, x.size(2)), 1).to( - x.dtype - ) - x = self.encoder(x * x_mask, x_mask) - stats = self.proj(x) * x_mask - - m, logs = torch.split(stats, self.out_channels, dim=1) - return m, logs, x_mask - - -class ResidualCouplingBlock(nn.Module): - def __init__( - self, - channels, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - n_flows=4, - gin_channels=0, - ): - super().__init__() - self.channels = channels - self.hidden_channels = hidden_channels - self.kernel_size = kernel_size - self.dilation_rate = dilation_rate - self.n_layers = n_layers - self.n_flows = n_flows - self.gin_channels = gin_channels - - self.flows = nn.ModuleList() - for i in range(n_flows): - self.flows.append( - modules.ResidualCouplingLayer( - channels, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - gin_channels=gin_channels, - mean_only=True, - ) - ) - self.flows.append(modules.Flip()) - - def forward(self, x, x_mask, g=None, reverse=False): - if not reverse: - for flow in self.flows: - x, _ = flow(x, x_mask, g=g, reverse=reverse) - else: - for flow in reversed(self.flows): - x = flow(x, x_mask, g=g, reverse=reverse) - return x - - def remove_weight_norm(self): - for i in range(self.n_flows): - self.flows[i * 2].remove_weight_norm() - - -class PosteriorEncoder(nn.Module): - def __init__( - self, - in_channels, - out_channels, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - gin_channels=0, - ): - super().__init__() - self.in_channels = in_channels - self.out_channels = out_channels - self.hidden_channels = hidden_channels - self.kernel_size = kernel_size - self.dilation_rate = dilation_rate - self.n_layers = n_layers - self.gin_channels = gin_channels - - self.pre = nn.Conv1d(in_channels, hidden_channels, 1) - self.enc = modules.WN( - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - gin_channels=gin_channels, - ) - self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1) - - def forward(self, x, x_lengths, g=None): - x_mask = torch.unsqueeze(commons.sequence_mask(x_lengths, x.size(2)), 1).to( - x.dtype - ) - x = self.pre(x) * x_mask - x = self.enc(x, x_mask, g=g) - stats = self.proj(x) * x_mask - m, logs = torch.split(stats, self.out_channels, dim=1) - z = (m + torch.randn_like(m) * torch.exp(logs)) * x_mask - return z, m, logs, x_mask - - def remove_weight_norm(self): - self.enc.remove_weight_norm() - - -class Generator(torch.nn.Module): - def __init__( - self, - initial_channel, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=0, - ): - super(Generator, self).__init__() - self.num_kernels = len(resblock_kernel_sizes) - self.num_upsamples = len(upsample_rates) - self.conv_pre = Conv1d( - initial_channel, upsample_initial_channel, 7, 1, padding=3 - ) - resblock = modules.ResBlock1 if resblock == "1" else modules.ResBlock2 - - self.ups = nn.ModuleList() - for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)): - self.ups.append( - weight_norm( - ConvTranspose1d( - upsample_initial_channel // (2**i), - upsample_initial_channel // (2 ** (i + 1)), - k, - u, - padding=(k - u) // 2, - ) - ) - ) - - self.resblocks = nn.ModuleList() - for i in range(len(self.ups)): - ch = upsample_initial_channel // (2 ** (i + 1)) - for j, (k, d) in enumerate( - zip(resblock_kernel_sizes, resblock_dilation_sizes) - ): - self.resblocks.append(resblock(ch, k, d)) - - self.conv_post = Conv1d(ch, 1, 7, 1, padding=3, bias=False) - self.ups.apply(init_weights) - - if gin_channels != 0: - self.cond = nn.Conv1d(gin_channels, upsample_initial_channel, 1) - - def forward(self, x, g=None): - x = self.conv_pre(x) - if g is not None: - x = x + self.cond(g) - - for i in range(self.num_upsamples): - x = F.leaky_relu(x, modules.LRELU_SLOPE) - x = self.ups[i](x) - xs = None - for j in range(self.num_kernels): - if xs is None: - xs = self.resblocks[i * self.num_kernels + j](x) - else: - xs += self.resblocks[i * self.num_kernels + j](x) - x = xs / self.num_kernels - x = F.leaky_relu(x) - x = self.conv_post(x) - x = torch.tanh(x) - - return x - - def remove_weight_norm(self): - for l in self.ups: - remove_weight_norm(l) - for l in self.resblocks: - l.remove_weight_norm() - - -class SineGen(torch.nn.Module): - """Definition of sine generator - SineGen(samp_rate, harmonic_num = 0, - sine_amp = 0.1, noise_std = 0.003, - voiced_threshold = 0, - flag_for_pulse=False) - samp_rate: sampling rate in Hz - harmonic_num: number of harmonic overtones (default 0) - sine_amp: amplitude of sine-wavefrom (default 0.1) - noise_std: std of Gaussian noise (default 0.003) - voiced_thoreshold: F0 threshold for U/V classification (default 0) - flag_for_pulse: this SinGen is used inside PulseGen (default False) - Note: when flag_for_pulse is True, the first time step of a voiced - segment is always sin(np.pi) or cos(0) - """ - - def __init__( - self, - samp_rate, - harmonic_num=0, - sine_amp=0.1, - noise_std=0.003, - voiced_threshold=0, - flag_for_pulse=False, - ): - super(SineGen, self).__init__() - self.sine_amp = sine_amp - self.noise_std = noise_std - self.harmonic_num = harmonic_num - self.dim = self.harmonic_num + 1 - self.sampling_rate = samp_rate - self.voiced_threshold = voiced_threshold - - def _f02uv(self, f0): - # generate uv signal - uv = torch.ones_like(f0) - uv = uv * (f0 > self.voiced_threshold) - if uv.device.type == "privateuseone": # for DirectML - uv = uv.float() - return uv - - def forward(self, f0, upp): - """sine_tensor, uv = forward(f0) - input F0: tensor(batchsize=1, length, dim=1) - f0 for unvoiced steps should be 0 - output sine_tensor: tensor(batchsize=1, length, dim) - output uv: tensor(batchsize=1, length, 1) - """ - with torch.no_grad(): - f0 = f0[:, None].transpose(1, 2) - f0_buf = torch.zeros(f0.shape[0], f0.shape[1], self.dim, device=f0.device) - # fundamental component - f0_buf[:, :, 0] = f0[:, :, 0] - for idx in np.arange(self.harmonic_num): - f0_buf[:, :, idx + 1] = f0_buf[:, :, 0] * ( - idx + 2 - ) # idx + 2: the (idx+1)-th overtone, (idx+2)-th harmonic - rad_values = (f0_buf / self.sampling_rate) % 1 ###%1意味着n_har的乘积无法后处理优化 - rand_ini = torch.rand( - f0_buf.shape[0], f0_buf.shape[2], device=f0_buf.device - ) - rand_ini[:, 0] = 0 - rad_values[:, 0, :] = rad_values[:, 0, :] + rand_ini - tmp_over_one = torch.cumsum(rad_values, 1) # % 1 #####%1意味着后面的cumsum无法再优化 - tmp_over_one *= upp - tmp_over_one = F.interpolate( - tmp_over_one.transpose(2, 1), - scale_factor=upp, - mode="linear", - align_corners=True, - ).transpose(2, 1) - rad_values = F.interpolate( - rad_values.transpose(2, 1), scale_factor=upp, mode="nearest" - ).transpose( - 2, 1 - ) ####### - tmp_over_one %= 1 - tmp_over_one_idx = (tmp_over_one[:, 1:, :] - tmp_over_one[:, :-1, :]) < 0 - cumsum_shift = torch.zeros_like(rad_values) - cumsum_shift[:, 1:, :] = tmp_over_one_idx * -1.0 - sine_waves = torch.sin( - torch.cumsum(rad_values + cumsum_shift, dim=1) * 2 * np.pi - ) - sine_waves = sine_waves * self.sine_amp - uv = self._f02uv(f0) - uv = F.interpolate( - uv.transpose(2, 1), scale_factor=upp, mode="nearest" - ).transpose(2, 1) - noise_amp = uv * self.noise_std + (1 - uv) * self.sine_amp / 3 - noise = noise_amp * torch.randn_like(sine_waves) - sine_waves = sine_waves * uv + noise - return sine_waves, uv, noise - - -class SourceModuleHnNSF(torch.nn.Module): - """SourceModule for hn-nsf - SourceModule(sampling_rate, harmonic_num=0, sine_amp=0.1, - add_noise_std=0.003, voiced_threshod=0) - sampling_rate: sampling_rate in Hz - harmonic_num: number of harmonic above F0 (default: 0) - sine_amp: amplitude of sine source signal (default: 0.1) - add_noise_std: std of additive Gaussian noise (default: 0.003) - note that amplitude of noise in unvoiced is decided - by sine_amp - voiced_threshold: threhold to set U/V given F0 (default: 0) - Sine_source, noise_source = SourceModuleHnNSF(F0_sampled) - F0_sampled (batchsize, length, 1) - Sine_source (batchsize, length, 1) - noise_source (batchsize, length 1) - uv (batchsize, length, 1) - """ - - def __init__( - self, - sampling_rate, - harmonic_num=0, - sine_amp=0.1, - add_noise_std=0.003, - voiced_threshod=0, - is_half=True, - ): - super(SourceModuleHnNSF, self).__init__() - - self.sine_amp = sine_amp - self.noise_std = add_noise_std - self.is_half = is_half - # to produce sine waveforms - self.l_sin_gen = SineGen( - sampling_rate, harmonic_num, sine_amp, add_noise_std, voiced_threshod - ) - - # to merge source harmonics into a single excitation - self.l_linear = torch.nn.Linear(harmonic_num + 1, 1) - self.l_tanh = torch.nn.Tanh() - - def forward(self, x, upp=None): - if hasattr(self, "ddtype") == False: - self.ddtype = self.l_linear.weight.dtype - sine_wavs, uv, _ = self.l_sin_gen(x, upp) - # print(x.dtype,sine_wavs.dtype,self.l_linear.weight.dtype) - # if self.is_half: - # sine_wavs = sine_wavs.half() - # sine_merge = self.l_tanh(self.l_linear(sine_wavs.to(x))) - # print(sine_wavs.dtype,self.ddtype) - if sine_wavs.dtype != self.ddtype: - sine_wavs = sine_wavs.to(self.ddtype) - sine_merge = self.l_tanh(self.l_linear(sine_wavs)) - return sine_merge, None, None # noise, uv - - -class GeneratorNSF(torch.nn.Module): - def __init__( - self, - initial_channel, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels, - sr, - is_half=False, - ): - super(GeneratorNSF, self).__init__() - self.num_kernels = len(resblock_kernel_sizes) - self.num_upsamples = len(upsample_rates) - - self.f0_upsamp = torch.nn.Upsample(scale_factor=np.prod(upsample_rates)) - self.m_source = SourceModuleHnNSF( - sampling_rate=sr, harmonic_num=0, is_half=is_half - ) - self.noise_convs = nn.ModuleList() - self.conv_pre = Conv1d( - initial_channel, upsample_initial_channel, 7, 1, padding=3 - ) - resblock = modules.ResBlock1 if resblock == "1" else modules.ResBlock2 - - self.ups = nn.ModuleList() - for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)): - c_cur = upsample_initial_channel // (2 ** (i + 1)) - self.ups.append( - weight_norm( - ConvTranspose1d( - upsample_initial_channel // (2**i), - upsample_initial_channel // (2 ** (i + 1)), - k, - u, - padding=(k - u) // 2, - ) - ) - ) - if i + 1 < len(upsample_rates): - stride_f0 = np.prod(upsample_rates[i + 1 :]) - self.noise_convs.append( - Conv1d( - 1, - c_cur, - kernel_size=stride_f0 * 2, - stride=stride_f0, - padding=stride_f0 // 2, - ) - ) - else: - self.noise_convs.append(Conv1d(1, c_cur, kernel_size=1)) - - self.resblocks = nn.ModuleList() - for i in range(len(self.ups)): - ch = upsample_initial_channel // (2 ** (i + 1)) - for j, (k, d) in enumerate( - zip(resblock_kernel_sizes, resblock_dilation_sizes) - ): - self.resblocks.append(resblock(ch, k, d)) - - self.conv_post = Conv1d(ch, 1, 7, 1, padding=3, bias=False) - self.ups.apply(init_weights) - - if gin_channels != 0: - self.cond = nn.Conv1d(gin_channels, upsample_initial_channel, 1) - - self.upp = np.prod(upsample_rates) - - def forward(self, x, f0, g=None): - har_source, noi_source, uv = self.m_source(f0, self.upp) - har_source = har_source.transpose(1, 2) - x = self.conv_pre(x) - if g is not None: - x = x + self.cond(g) - - for i in range(self.num_upsamples): - x = F.leaky_relu(x, modules.LRELU_SLOPE) - x = self.ups[i](x) - x_source = self.noise_convs[i](har_source) - x = x + x_source - xs = None - for j in range(self.num_kernels): - if xs is None: - xs = self.resblocks[i * self.num_kernels + j](x) - else: - xs += self.resblocks[i * self.num_kernels + j](x) - x = xs / self.num_kernels - x = F.leaky_relu(x) - x = self.conv_post(x) - x = torch.tanh(x) - return x - - def remove_weight_norm(self): - for l in self.ups: - remove_weight_norm(l) - for l in self.resblocks: - l.remove_weight_norm() - - -sr2sr = { - "32k": 32000, - "40k": 40000, - "48k": 48000, -} - - -class SynthesizerTrnMs256NSFsid(nn.Module): - def __init__( - self, - spec_channels, - segment_size, - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - spk_embed_dim, - gin_channels, - sr, - **kwargs - ): - super().__init__() - if type(sr) == type("strr"): - sr = sr2sr[sr] - self.spec_channels = spec_channels - self.inter_channels = inter_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.resblock = resblock - self.resblock_kernel_sizes = resblock_kernel_sizes - self.resblock_dilation_sizes = resblock_dilation_sizes - self.upsample_rates = upsample_rates - self.upsample_initial_channel = upsample_initial_channel - self.upsample_kernel_sizes = upsample_kernel_sizes - self.segment_size = segment_size - self.gin_channels = gin_channels - # self.hop_length = hop_length# - self.spk_embed_dim = spk_embed_dim - self.enc_p = TextEncoder256( - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - ) - self.dec = GeneratorNSF( - inter_channels, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=gin_channels, - sr=sr, - is_half=kwargs["is_half"], - ) - self.enc_q = PosteriorEncoder( - spec_channels, - inter_channels, - hidden_channels, - 5, - 1, - 16, - gin_channels=gin_channels, - ) - self.flow = ResidualCouplingBlock( - inter_channels, hidden_channels, 5, 1, 3, gin_channels=gin_channels - ) - self.emb_g = nn.Embedding(self.spk_embed_dim, gin_channels) - logger.debug( - "gin_channels: " - + str(gin_channels) - + ", self.spk_embed_dim: " - + str(self.spk_embed_dim) - ) - - def remove_weight_norm(self): - self.dec.remove_weight_norm() - self.flow.remove_weight_norm() - self.enc_q.remove_weight_norm() - - def forward( - self, phone, phone_lengths, pitch, pitchf, y, y_lengths, ds - ): # 这里ds是id,[bs,1] - # print(1,pitch.shape)#[bs,t] - g = self.emb_g(ds).unsqueeze(-1) # [b, 256, 1]##1是t,广播的 - m_p, logs_p, x_mask = self.enc_p(phone, pitch, phone_lengths) - z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g) - z_p = self.flow(z, y_mask, g=g) - z_slice, ids_slice = commons.rand_slice_segments( - z, y_lengths, self.segment_size - ) - # print(-1,pitchf.shape,ids_slice,self.segment_size,self.hop_length,self.segment_size//self.hop_length) - pitchf = commons.slice_segments2(pitchf, ids_slice, self.segment_size) - # print(-2,pitchf.shape,z_slice.shape) - o = self.dec(z_slice, pitchf, g=g) - return o, ids_slice, x_mask, y_mask, (z, z_p, m_p, logs_p, m_q, logs_q) - - def infer(self, phone, phone_lengths, pitch, nsff0, sid, rate=None): - g = self.emb_g(sid).unsqueeze(-1) - m_p, logs_p, x_mask = self.enc_p(phone, pitch, phone_lengths) - z_p = (m_p + torch.exp(logs_p) * torch.randn_like(m_p) * 0.66666) * x_mask - if rate: - head = int(z_p.shape[2] * rate) - z_p = z_p[:, :, -head:] - x_mask = x_mask[:, :, -head:] - nsff0 = nsff0[:, -head:] - z = self.flow(z_p, x_mask, g=g, reverse=True) - o = self.dec(z * x_mask, nsff0, g=g) - return o, x_mask, (z, z_p, m_p, logs_p) - - -class SynthesizerTrnMs768NSFsid(nn.Module): - def __init__( - self, - spec_channels, - segment_size, - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - spk_embed_dim, - gin_channels, - sr, - **kwargs - ): - super().__init__() - if type(sr) == type("strr"): - sr = sr2sr[sr] - self.spec_channels = spec_channels - self.inter_channels = inter_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.resblock = resblock - self.resblock_kernel_sizes = resblock_kernel_sizes - self.resblock_dilation_sizes = resblock_dilation_sizes - self.upsample_rates = upsample_rates - self.upsample_initial_channel = upsample_initial_channel - self.upsample_kernel_sizes = upsample_kernel_sizes - self.segment_size = segment_size - self.gin_channels = gin_channels - # self.hop_length = hop_length# - self.spk_embed_dim = spk_embed_dim - self.enc_p = TextEncoder768( - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - ) - self.dec = GeneratorNSF( - inter_channels, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=gin_channels, - sr=sr, - is_half=kwargs["is_half"], - ) - self.enc_q = PosteriorEncoder( - spec_channels, - inter_channels, - hidden_channels, - 5, - 1, - 16, - gin_channels=gin_channels, - ) - self.flow = ResidualCouplingBlock( - inter_channels, hidden_channels, 5, 1, 3, gin_channels=gin_channels - ) - self.emb_g = nn.Embedding(self.spk_embed_dim, gin_channels) - logger.debug( - "gin_channels: " - + str(gin_channels) - + ", self.spk_embed_dim: " - + str(self.spk_embed_dim) - ) - - def remove_weight_norm(self): - self.dec.remove_weight_norm() - self.flow.remove_weight_norm() - self.enc_q.remove_weight_norm() - - def forward( - self, phone, phone_lengths, pitch, pitchf, y, y_lengths, ds - ): # 这里ds是id,[bs,1] - # print(1,pitch.shape)#[bs,t] - g = self.emb_g(ds).unsqueeze(-1) # [b, 256, 1]##1是t,广播的 - m_p, logs_p, x_mask = self.enc_p(phone, pitch, phone_lengths) - z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g) - z_p = self.flow(z, y_mask, g=g) - z_slice, ids_slice = commons.rand_slice_segments( - z, y_lengths, self.segment_size - ) - # print(-1,pitchf.shape,ids_slice,self.segment_size,self.hop_length,self.segment_size//self.hop_length) - pitchf = commons.slice_segments2(pitchf, ids_slice, self.segment_size) - # print(-2,pitchf.shape,z_slice.shape) - o = self.dec(z_slice, pitchf, g=g) - return o, ids_slice, x_mask, y_mask, (z, z_p, m_p, logs_p, m_q, logs_q) - - def infer(self, phone, phone_lengths, pitch, nsff0, sid, rate=None): - g = self.emb_g(sid).unsqueeze(-1) - m_p, logs_p, x_mask = self.enc_p(phone, pitch, phone_lengths) - z_p = (m_p + torch.exp(logs_p) * torch.randn_like(m_p) * 0.66666) * x_mask - if rate: - head = int(z_p.shape[2] * rate) - z_p = z_p[:, :, -head:] - x_mask = x_mask[:, :, -head:] - nsff0 = nsff0[:, -head:] - z = self.flow(z_p, x_mask, g=g, reverse=True) - o = self.dec(z * x_mask, nsff0, g=g) - return o, x_mask, (z, z_p, m_p, logs_p) - - -class SynthesizerTrnMs256NSFsid_nono(nn.Module): - def __init__( - self, - spec_channels, - segment_size, - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - spk_embed_dim, - gin_channels, - sr=None, - **kwargs - ): - super().__init__() - self.spec_channels = spec_channels - self.inter_channels = inter_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.resblock = resblock - self.resblock_kernel_sizes = resblock_kernel_sizes - self.resblock_dilation_sizes = resblock_dilation_sizes - self.upsample_rates = upsample_rates - self.upsample_initial_channel = upsample_initial_channel - self.upsample_kernel_sizes = upsample_kernel_sizes - self.segment_size = segment_size - self.gin_channels = gin_channels - # self.hop_length = hop_length# - self.spk_embed_dim = spk_embed_dim - self.enc_p = TextEncoder256( - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - f0=False, - ) - self.dec = Generator( - inter_channels, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=gin_channels, - ) - self.enc_q = PosteriorEncoder( - spec_channels, - inter_channels, - hidden_channels, - 5, - 1, - 16, - gin_channels=gin_channels, - ) - self.flow = ResidualCouplingBlock( - inter_channels, hidden_channels, 5, 1, 3, gin_channels=gin_channels - ) - self.emb_g = nn.Embedding(self.spk_embed_dim, gin_channels) - logger.debug( - "gin_channels: " - + str(gin_channels) - + ", self.spk_embed_dim: " - + str(self.spk_embed_dim) - ) - - def remove_weight_norm(self): - self.dec.remove_weight_norm() - self.flow.remove_weight_norm() - self.enc_q.remove_weight_norm() - - def forward(self, phone, phone_lengths, y, y_lengths, ds): # 这里ds是id,[bs,1] - g = self.emb_g(ds).unsqueeze(-1) # [b, 256, 1]##1是t,广播的 - m_p, logs_p, x_mask = self.enc_p(phone, None, phone_lengths) - z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g) - z_p = self.flow(z, y_mask, g=g) - z_slice, ids_slice = commons.rand_slice_segments( - z, y_lengths, self.segment_size - ) - o = self.dec(z_slice, g=g) - return o, ids_slice, x_mask, y_mask, (z, z_p, m_p, logs_p, m_q, logs_q) - - def infer(self, phone, phone_lengths, sid, rate=None): - g = self.emb_g(sid).unsqueeze(-1) - m_p, logs_p, x_mask = self.enc_p(phone, None, phone_lengths) - z_p = (m_p + torch.exp(logs_p) * torch.randn_like(m_p) * 0.66666) * x_mask - if rate: - head = int(z_p.shape[2] * rate) - z_p = z_p[:, :, -head:] - x_mask = x_mask[:, :, -head:] - z = self.flow(z_p, x_mask, g=g, reverse=True) - o = self.dec(z * x_mask, g=g) - return o, x_mask, (z, z_p, m_p, logs_p) - - -class SynthesizerTrnMs768NSFsid_nono(nn.Module): - def __init__( - self, - spec_channels, - segment_size, - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - spk_embed_dim, - gin_channels, - sr=None, - **kwargs - ): - super().__init__() - self.spec_channels = spec_channels - self.inter_channels = inter_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.resblock = resblock - self.resblock_kernel_sizes = resblock_kernel_sizes - self.resblock_dilation_sizes = resblock_dilation_sizes - self.upsample_rates = upsample_rates - self.upsample_initial_channel = upsample_initial_channel - self.upsample_kernel_sizes = upsample_kernel_sizes - self.segment_size = segment_size - self.gin_channels = gin_channels - # self.hop_length = hop_length# - self.spk_embed_dim = spk_embed_dim - self.enc_p = TextEncoder768( - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - f0=False, - ) - self.dec = Generator( - inter_channels, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=gin_channels, - ) - self.enc_q = PosteriorEncoder( - spec_channels, - inter_channels, - hidden_channels, - 5, - 1, - 16, - gin_channels=gin_channels, - ) - self.flow = ResidualCouplingBlock( - inter_channels, hidden_channels, 5, 1, 3, gin_channels=gin_channels - ) - self.emb_g = nn.Embedding(self.spk_embed_dim, gin_channels) - logger.debug( - "gin_channels: " - + str(gin_channels) - + ", self.spk_embed_dim: " - + str(self.spk_embed_dim) - ) - - def remove_weight_norm(self): - self.dec.remove_weight_norm() - self.flow.remove_weight_norm() - self.enc_q.remove_weight_norm() - - def forward(self, phone, phone_lengths, y, y_lengths, ds): # 这里ds是id,[bs,1] - g = self.emb_g(ds).unsqueeze(-1) # [b, 256, 1]##1是t,广播的 - m_p, logs_p, x_mask = self.enc_p(phone, None, phone_lengths) - z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g) - z_p = self.flow(z, y_mask, g=g) - z_slice, ids_slice = commons.rand_slice_segments( - z, y_lengths, self.segment_size - ) - o = self.dec(z_slice, g=g) - return o, ids_slice, x_mask, y_mask, (z, z_p, m_p, logs_p, m_q, logs_q) - - def infer(self, phone, phone_lengths, sid, rate=None): - g = self.emb_g(sid).unsqueeze(-1) - m_p, logs_p, x_mask = self.enc_p(phone, None, phone_lengths) - z_p = (m_p + torch.exp(logs_p) * torch.randn_like(m_p) * 0.66666) * x_mask - if rate: - head = int(z_p.shape[2] * rate) - z_p = z_p[:, :, -head:] - x_mask = x_mask[:, :, -head:] - z = self.flow(z_p, x_mask, g=g, reverse=True) - o = self.dec(z * x_mask, g=g) - return o, x_mask, (z, z_p, m_p, logs_p) - - -class MultiPeriodDiscriminator(torch.nn.Module): - def __init__(self, use_spectral_norm=False): - super(MultiPeriodDiscriminator, self).__init__() - periods = [2, 3, 5, 7, 11, 17] - # periods = [3, 5, 7, 11, 17, 23, 37] - - discs = [DiscriminatorS(use_spectral_norm=use_spectral_norm)] - discs = discs + [ - DiscriminatorP(i, use_spectral_norm=use_spectral_norm) for i in periods - ] - self.discriminators = nn.ModuleList(discs) - - def forward(self, y, y_hat): - y_d_rs = [] # - y_d_gs = [] - fmap_rs = [] - fmap_gs = [] - for i, d in enumerate(self.discriminators): - y_d_r, fmap_r = d(y) - y_d_g, fmap_g = d(y_hat) - # for j in range(len(fmap_r)): - # print(i,j,y.shape,y_hat.shape,fmap_r[j].shape,fmap_g[j].shape) - y_d_rs.append(y_d_r) - y_d_gs.append(y_d_g) - fmap_rs.append(fmap_r) - fmap_gs.append(fmap_g) - - return y_d_rs, y_d_gs, fmap_rs, fmap_gs - - -class MultiPeriodDiscriminatorV2(torch.nn.Module): - def __init__(self, use_spectral_norm=False): - super(MultiPeriodDiscriminatorV2, self).__init__() - # periods = [2, 3, 5, 7, 11, 17] - periods = [2, 3, 5, 7, 11, 17, 23, 37] - - discs = [DiscriminatorS(use_spectral_norm=use_spectral_norm)] - discs = discs + [ - DiscriminatorP(i, use_spectral_norm=use_spectral_norm) for i in periods - ] - self.discriminators = nn.ModuleList(discs) - - def forward(self, y, y_hat): - y_d_rs = [] # - y_d_gs = [] - fmap_rs = [] - fmap_gs = [] - for i, d in enumerate(self.discriminators): - y_d_r, fmap_r = d(y) - y_d_g, fmap_g = d(y_hat) - # for j in range(len(fmap_r)): - # print(i,j,y.shape,y_hat.shape,fmap_r[j].shape,fmap_g[j].shape) - y_d_rs.append(y_d_r) - y_d_gs.append(y_d_g) - fmap_rs.append(fmap_r) - fmap_gs.append(fmap_g) - - return y_d_rs, y_d_gs, fmap_rs, fmap_gs - - -class DiscriminatorS(torch.nn.Module): - def __init__(self, use_spectral_norm=False): - super(DiscriminatorS, self).__init__() - norm_f = weight_norm if use_spectral_norm == False else spectral_norm - self.convs = nn.ModuleList( - [ - norm_f(Conv1d(1, 16, 15, 1, padding=7)), - norm_f(Conv1d(16, 64, 41, 4, groups=4, padding=20)), - norm_f(Conv1d(64, 256, 41, 4, groups=16, padding=20)), - norm_f(Conv1d(256, 1024, 41, 4, groups=64, padding=20)), - norm_f(Conv1d(1024, 1024, 41, 4, groups=256, padding=20)), - norm_f(Conv1d(1024, 1024, 5, 1, padding=2)), - ] - ) - self.conv_post = norm_f(Conv1d(1024, 1, 3, 1, padding=1)) - - def forward(self, x): - fmap = [] - - for l in self.convs: - x = l(x) - x = F.leaky_relu(x, modules.LRELU_SLOPE) - fmap.append(x) - x = self.conv_post(x) - fmap.append(x) - x = torch.flatten(x, 1, -1) - - return x, fmap - - -class DiscriminatorP(torch.nn.Module): - def __init__(self, period, kernel_size=5, stride=3, use_spectral_norm=False): - super(DiscriminatorP, self).__init__() - self.period = period - self.use_spectral_norm = use_spectral_norm - norm_f = weight_norm if use_spectral_norm == False else spectral_norm - self.convs = nn.ModuleList( - [ - norm_f( - Conv2d( - 1, - 32, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 32, - 128, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 128, - 512, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 512, - 1024, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 1024, - 1024, - (kernel_size, 1), - 1, - padding=(get_padding(kernel_size, 1), 0), - ) - ), - ] - ) - self.conv_post = norm_f(Conv2d(1024, 1, (3, 1), 1, padding=(1, 0))) - - def forward(self, x): - fmap = [] - - # 1d to 2d - b, c, t = x.shape - if t % self.period != 0: # pad first - n_pad = self.period - (t % self.period) - if has_xpu and x.dtype == torch.bfloat16: - x = F.pad(x.to(dtype=torch.float16), (0, n_pad), "reflect").to(dtype=torch.bfloat16) - else: - x = F.pad(x, (0, n_pad), "reflect") - t = t + n_pad - x = x.view(b, c, t // self.period, self.period) - - for l in self.convs: - x = l(x) - x = F.leaky_relu(x, modules.LRELU_SLOPE) - fmap.append(x) - x = self.conv_post(x) - fmap.append(x) - x = torch.flatten(x, 1, -1) - - return x, fmap diff --git a/infer/lib/infer_pack/models_onnx.py b/infer/lib/infer_pack/models_onnx.py deleted file mode 100644 index 3e99763bf3ed7988eb2ae33d9066f85d37adf119..0000000000000000000000000000000000000000 --- a/infer/lib/infer_pack/models_onnx.py +++ /dev/null @@ -1,824 +0,0 @@ -import math -import logging - -logger = logging.getLogger(__name__) - -import numpy as np -import torch -from torch import nn -from torch.nn import AvgPool1d, Conv1d, Conv2d, ConvTranspose1d -from torch.nn import functional as F -from torch.nn.utils import remove_weight_norm, spectral_norm, weight_norm - -from infer.lib.infer_pack import attentions, commons, modules -from infer.lib.infer_pack.commons import get_padding, init_weights - - -class TextEncoder256(nn.Module): - def __init__( - self, - out_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - f0=True, - ): - super().__init__() - self.out_channels = out_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.emb_phone = nn.Linear(256, hidden_channels) - self.lrelu = nn.LeakyReLU(0.1, inplace=True) - if f0 == True: - self.emb_pitch = nn.Embedding(256, hidden_channels) # pitch 256 - self.encoder = attentions.Encoder( - hidden_channels, filter_channels, n_heads, n_layers, kernel_size, p_dropout - ) - self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1) - - def forward(self, phone, pitch, lengths): - if pitch == None: - x = self.emb_phone(phone) - else: - x = self.emb_phone(phone) + self.emb_pitch(pitch) - x = x * math.sqrt(self.hidden_channels) # [b, t, h] - x = self.lrelu(x) - x = torch.transpose(x, 1, -1) # [b, h, t] - x_mask = torch.unsqueeze(commons.sequence_mask(lengths, x.size(2)), 1).to( - x.dtype - ) - x = self.encoder(x * x_mask, x_mask) - stats = self.proj(x) * x_mask - - m, logs = torch.split(stats, self.out_channels, dim=1) - return m, logs, x_mask - - -class TextEncoder768(nn.Module): - def __init__( - self, - out_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - f0=True, - ): - super().__init__() - self.out_channels = out_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.emb_phone = nn.Linear(768, hidden_channels) - self.lrelu = nn.LeakyReLU(0.1, inplace=True) - if f0 == True: - self.emb_pitch = nn.Embedding(256, hidden_channels) # pitch 256 - self.encoder = attentions.Encoder( - hidden_channels, filter_channels, n_heads, n_layers, kernel_size, p_dropout - ) - self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1) - - def forward(self, phone, pitch, lengths): - if pitch == None: - x = self.emb_phone(phone) - else: - x = self.emb_phone(phone) + self.emb_pitch(pitch) - x = x * math.sqrt(self.hidden_channels) # [b, t, h] - x = self.lrelu(x) - x = torch.transpose(x, 1, -1) # [b, h, t] - x_mask = torch.unsqueeze(commons.sequence_mask(lengths, x.size(2)), 1).to( - x.dtype - ) - x = self.encoder(x * x_mask, x_mask) - stats = self.proj(x) * x_mask - - m, logs = torch.split(stats, self.out_channels, dim=1) - return m, logs, x_mask - - -class ResidualCouplingBlock(nn.Module): - def __init__( - self, - channels, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - n_flows=4, - gin_channels=0, - ): - super().__init__() - self.channels = channels - self.hidden_channels = hidden_channels - self.kernel_size = kernel_size - self.dilation_rate = dilation_rate - self.n_layers = n_layers - self.n_flows = n_flows - self.gin_channels = gin_channels - - self.flows = nn.ModuleList() - for i in range(n_flows): - self.flows.append( - modules.ResidualCouplingLayer( - channels, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - gin_channels=gin_channels, - mean_only=True, - ) - ) - self.flows.append(modules.Flip()) - - def forward(self, x, x_mask, g=None, reverse=False): - if not reverse: - for flow in self.flows: - x, _ = flow(x, x_mask, g=g, reverse=reverse) - else: - for flow in reversed(self.flows): - x = flow(x, x_mask, g=g, reverse=reverse) - return x - - def remove_weight_norm(self): - for i in range(self.n_flows): - self.flows[i * 2].remove_weight_norm() - - -class PosteriorEncoder(nn.Module): - def __init__( - self, - in_channels, - out_channels, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - gin_channels=0, - ): - super().__init__() - self.in_channels = in_channels - self.out_channels = out_channels - self.hidden_channels = hidden_channels - self.kernel_size = kernel_size - self.dilation_rate = dilation_rate - self.n_layers = n_layers - self.gin_channels = gin_channels - - self.pre = nn.Conv1d(in_channels, hidden_channels, 1) - self.enc = modules.WN( - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - gin_channels=gin_channels, - ) - self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1) - - def forward(self, x, x_lengths, g=None): - x_mask = torch.unsqueeze(commons.sequence_mask(x_lengths, x.size(2)), 1).to( - x.dtype - ) - x = self.pre(x) * x_mask - x = self.enc(x, x_mask, g=g) - stats = self.proj(x) * x_mask - m, logs = torch.split(stats, self.out_channels, dim=1) - z = (m + torch.randn_like(m) * torch.exp(logs)) * x_mask - return z, m, logs, x_mask - - def remove_weight_norm(self): - self.enc.remove_weight_norm() - - -class Generator(torch.nn.Module): - def __init__( - self, - initial_channel, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=0, - ): - super(Generator, self).__init__() - self.num_kernels = len(resblock_kernel_sizes) - self.num_upsamples = len(upsample_rates) - self.conv_pre = Conv1d( - initial_channel, upsample_initial_channel, 7, 1, padding=3 - ) - resblock = modules.ResBlock1 if resblock == "1" else modules.ResBlock2 - - self.ups = nn.ModuleList() - for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)): - self.ups.append( - weight_norm( - ConvTranspose1d( - upsample_initial_channel // (2**i), - upsample_initial_channel // (2 ** (i + 1)), - k, - u, - padding=(k - u) // 2, - ) - ) - ) - - self.resblocks = nn.ModuleList() - for i in range(len(self.ups)): - ch = upsample_initial_channel // (2 ** (i + 1)) - for j, (k, d) in enumerate( - zip(resblock_kernel_sizes, resblock_dilation_sizes) - ): - self.resblocks.append(resblock(ch, k, d)) - - self.conv_post = Conv1d(ch, 1, 7, 1, padding=3, bias=False) - self.ups.apply(init_weights) - - if gin_channels != 0: - self.cond = nn.Conv1d(gin_channels, upsample_initial_channel, 1) - - def forward(self, x, g=None): - x = self.conv_pre(x) - if g is not None: - x = x + self.cond(g) - - for i in range(self.num_upsamples): - x = F.leaky_relu(x, modules.LRELU_SLOPE) - x = self.ups[i](x) - xs = None - for j in range(self.num_kernels): - if xs is None: - xs = self.resblocks[i * self.num_kernels + j](x) - else: - xs += self.resblocks[i * self.num_kernels + j](x) - x = xs / self.num_kernels - x = F.leaky_relu(x) - x = self.conv_post(x) - x = torch.tanh(x) - - return x - - def remove_weight_norm(self): - for l in self.ups: - remove_weight_norm(l) - for l in self.resblocks: - l.remove_weight_norm() - - -class SineGen(torch.nn.Module): - """Definition of sine generator - SineGen(samp_rate, harmonic_num = 0, - sine_amp = 0.1, noise_std = 0.003, - voiced_threshold = 0, - flag_for_pulse=False) - samp_rate: sampling rate in Hz - harmonic_num: number of harmonic overtones (default 0) - sine_amp: amplitude of sine-wavefrom (default 0.1) - noise_std: std of Gaussian noise (default 0.003) - voiced_thoreshold: F0 threshold for U/V classification (default 0) - flag_for_pulse: this SinGen is used inside PulseGen (default False) - Note: when flag_for_pulse is True, the first time step of a voiced - segment is always sin(np.pi) or cos(0) - """ - - def __init__( - self, - samp_rate, - harmonic_num=0, - sine_amp=0.1, - noise_std=0.003, - voiced_threshold=0, - flag_for_pulse=False, - ): - super(SineGen, self).__init__() - self.sine_amp = sine_amp - self.noise_std = noise_std - self.harmonic_num = harmonic_num - self.dim = self.harmonic_num + 1 - self.sampling_rate = samp_rate - self.voiced_threshold = voiced_threshold - - def _f02uv(self, f0): - # generate uv signal - uv = torch.ones_like(f0) - uv = uv * (f0 > self.voiced_threshold) - return uv - - def forward(self, f0, upp): - """sine_tensor, uv = forward(f0) - input F0: tensor(batchsize=1, length, dim=1) - f0 for unvoiced steps should be 0 - output sine_tensor: tensor(batchsize=1, length, dim) - output uv: tensor(batchsize=1, length, 1) - """ - with torch.no_grad(): - f0 = f0[:, None].transpose(1, 2) - f0_buf = torch.zeros(f0.shape[0], f0.shape[1], self.dim, device=f0.device) - # fundamental component - f0_buf[:, :, 0] = f0[:, :, 0] - for idx in np.arange(self.harmonic_num): - f0_buf[:, :, idx + 1] = f0_buf[:, :, 0] * ( - idx + 2 - ) # idx + 2: the (idx+1)-th overtone, (idx+2)-th harmonic - rad_values = (f0_buf / self.sampling_rate) % 1 ###%1意味着n_har的乘积无法后处理优化 - rand_ini = torch.rand( - f0_buf.shape[0], f0_buf.shape[2], device=f0_buf.device - ) - rand_ini[:, 0] = 0 - rad_values[:, 0, :] = rad_values[:, 0, :] + rand_ini - tmp_over_one = torch.cumsum(rad_values, 1) # % 1 #####%1意味着后面的cumsum无法再优化 - tmp_over_one *= upp - tmp_over_one = F.interpolate( - tmp_over_one.transpose(2, 1), - scale_factor=upp, - mode="linear", - align_corners=True, - ).transpose(2, 1) - rad_values = F.interpolate( - rad_values.transpose(2, 1), scale_factor=upp, mode="nearest" - ).transpose( - 2, 1 - ) ####### - tmp_over_one %= 1 - tmp_over_one_idx = (tmp_over_one[:, 1:, :] - tmp_over_one[:, :-1, :]) < 0 - cumsum_shift = torch.zeros_like(rad_values) - cumsum_shift[:, 1:, :] = tmp_over_one_idx * -1.0 - sine_waves = torch.sin( - torch.cumsum(rad_values + cumsum_shift, dim=1) * 2 * np.pi - ) - sine_waves = sine_waves * self.sine_amp - uv = self._f02uv(f0) - uv = F.interpolate( - uv.transpose(2, 1), scale_factor=upp, mode="nearest" - ).transpose(2, 1) - noise_amp = uv * self.noise_std + (1 - uv) * self.sine_amp / 3 - noise = noise_amp * torch.randn_like(sine_waves) - sine_waves = sine_waves * uv + noise - return sine_waves, uv, noise - - -class SourceModuleHnNSF(torch.nn.Module): - """SourceModule for hn-nsf - SourceModule(sampling_rate, harmonic_num=0, sine_amp=0.1, - add_noise_std=0.003, voiced_threshod=0) - sampling_rate: sampling_rate in Hz - harmonic_num: number of harmonic above F0 (default: 0) - sine_amp: amplitude of sine source signal (default: 0.1) - add_noise_std: std of additive Gaussian noise (default: 0.003) - note that amplitude of noise in unvoiced is decided - by sine_amp - voiced_threshold: threhold to set U/V given F0 (default: 0) - Sine_source, noise_source = SourceModuleHnNSF(F0_sampled) - F0_sampled (batchsize, length, 1) - Sine_source (batchsize, length, 1) - noise_source (batchsize, length 1) - uv (batchsize, length, 1) - """ - - def __init__( - self, - sampling_rate, - harmonic_num=0, - sine_amp=0.1, - add_noise_std=0.003, - voiced_threshod=0, - is_half=True, - ): - super(SourceModuleHnNSF, self).__init__() - - self.sine_amp = sine_amp - self.noise_std = add_noise_std - self.is_half = is_half - # to produce sine waveforms - self.l_sin_gen = SineGen( - sampling_rate, harmonic_num, sine_amp, add_noise_std, voiced_threshod - ) - - # to merge source harmonics into a single excitation - self.l_linear = torch.nn.Linear(harmonic_num + 1, 1) - self.l_tanh = torch.nn.Tanh() - - def forward(self, x, upp=None): - sine_wavs, uv, _ = self.l_sin_gen(x, upp) - if self.is_half: - sine_wavs = sine_wavs.half() - sine_merge = self.l_tanh(self.l_linear(sine_wavs)) - return sine_merge, None, None # noise, uv - - -class GeneratorNSF(torch.nn.Module): - def __init__( - self, - initial_channel, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels, - sr, - is_half=False, - ): - super(GeneratorNSF, self).__init__() - self.num_kernels = len(resblock_kernel_sizes) - self.num_upsamples = len(upsample_rates) - - self.f0_upsamp = torch.nn.Upsample(scale_factor=np.prod(upsample_rates)) - self.m_source = SourceModuleHnNSF( - sampling_rate=sr, harmonic_num=0, is_half=is_half - ) - self.noise_convs = nn.ModuleList() - self.conv_pre = Conv1d( - initial_channel, upsample_initial_channel, 7, 1, padding=3 - ) - resblock = modules.ResBlock1 if resblock == "1" else modules.ResBlock2 - - self.ups = nn.ModuleList() - for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)): - c_cur = upsample_initial_channel // (2 ** (i + 1)) - self.ups.append( - weight_norm( - ConvTranspose1d( - upsample_initial_channel // (2**i), - upsample_initial_channel // (2 ** (i + 1)), - k, - u, - padding=(k - u) // 2, - ) - ) - ) - if i + 1 < len(upsample_rates): - stride_f0 = np.prod(upsample_rates[i + 1 :]) - self.noise_convs.append( - Conv1d( - 1, - c_cur, - kernel_size=stride_f0 * 2, - stride=stride_f0, - padding=stride_f0 // 2, - ) - ) - else: - self.noise_convs.append(Conv1d(1, c_cur, kernel_size=1)) - - self.resblocks = nn.ModuleList() - for i in range(len(self.ups)): - ch = upsample_initial_channel // (2 ** (i + 1)) - for j, (k, d) in enumerate( - zip(resblock_kernel_sizes, resblock_dilation_sizes) - ): - self.resblocks.append(resblock(ch, k, d)) - - self.conv_post = Conv1d(ch, 1, 7, 1, padding=3, bias=False) - self.ups.apply(init_weights) - - if gin_channels != 0: - self.cond = nn.Conv1d(gin_channels, upsample_initial_channel, 1) - - self.upp = np.prod(upsample_rates) - - def forward(self, x, f0, g=None): - har_source, noi_source, uv = self.m_source(f0, self.upp) - har_source = har_source.transpose(1, 2) - x = self.conv_pre(x) - if g is not None: - x = x + self.cond(g) - - for i in range(self.num_upsamples): - x = F.leaky_relu(x, modules.LRELU_SLOPE) - x = self.ups[i](x) - x_source = self.noise_convs[i](har_source) - x = x + x_source - xs = None - for j in range(self.num_kernels): - if xs is None: - xs = self.resblocks[i * self.num_kernels + j](x) - else: - xs += self.resblocks[i * self.num_kernels + j](x) - x = xs / self.num_kernels - x = F.leaky_relu(x) - x = self.conv_post(x) - x = torch.tanh(x) - return x - - def remove_weight_norm(self): - for l in self.ups: - remove_weight_norm(l) - for l in self.resblocks: - l.remove_weight_norm() - - -sr2sr = { - "32k": 32000, - "40k": 40000, - "48k": 48000, -} - - -class SynthesizerTrnMsNSFsidM(nn.Module): - def __init__( - self, - spec_channels, - segment_size, - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - spk_embed_dim, - gin_channels, - sr, - version, - **kwargs - ): - super().__init__() - if type(sr) == type("strr"): - sr = sr2sr[sr] - self.spec_channels = spec_channels - self.inter_channels = inter_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.resblock = resblock - self.resblock_kernel_sizes = resblock_kernel_sizes - self.resblock_dilation_sizes = resblock_dilation_sizes - self.upsample_rates = upsample_rates - self.upsample_initial_channel = upsample_initial_channel - self.upsample_kernel_sizes = upsample_kernel_sizes - self.segment_size = segment_size - self.gin_channels = gin_channels - # self.hop_length = hop_length# - self.spk_embed_dim = spk_embed_dim - if version == "v1": - self.enc_p = TextEncoder256( - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - ) - else: - self.enc_p = TextEncoder768( - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - ) - self.dec = GeneratorNSF( - inter_channels, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=gin_channels, - sr=sr, - is_half=kwargs["is_half"], - ) - self.enc_q = PosteriorEncoder( - spec_channels, - inter_channels, - hidden_channels, - 5, - 1, - 16, - gin_channels=gin_channels, - ) - self.flow = ResidualCouplingBlock( - inter_channels, hidden_channels, 5, 1, 3, gin_channels=gin_channels - ) - self.emb_g = nn.Embedding(self.spk_embed_dim, gin_channels) - self.speaker_map = None - logger.debug( - "gin_channels: " - + gin_channels - + ", self.spk_embed_dim: " - + self.spk_embed_dim - ) - - def remove_weight_norm(self): - self.dec.remove_weight_norm() - self.flow.remove_weight_norm() - self.enc_q.remove_weight_norm() - - def construct_spkmixmap(self, n_speaker): - self.speaker_map = torch.zeros((n_speaker, 1, 1, self.gin_channels)) - for i in range(n_speaker): - self.speaker_map[i] = self.emb_g(torch.LongTensor([[i]])) - self.speaker_map = self.speaker_map.unsqueeze(0) - - def forward(self, phone, phone_lengths, pitch, nsff0, g, rnd, max_len=None): - if self.speaker_map is not None: # [N, S] * [S, B, 1, H] - g = g.reshape((g.shape[0], g.shape[1], 1, 1, 1)) # [N, S, B, 1, 1] - g = g * self.speaker_map # [N, S, B, 1, H] - g = torch.sum(g, dim=1) # [N, 1, B, 1, H] - g = g.transpose(0, -1).transpose(0, -2).squeeze(0) # [B, H, N] - else: - g = g.unsqueeze(0) - g = self.emb_g(g).transpose(1, 2) - - m_p, logs_p, x_mask = self.enc_p(phone, pitch, phone_lengths) - z_p = (m_p + torch.exp(logs_p) * rnd) * x_mask - z = self.flow(z_p, x_mask, g=g, reverse=True) - o = self.dec((z * x_mask)[:, :, :max_len], nsff0, g=g) - return o - - -class MultiPeriodDiscriminator(torch.nn.Module): - def __init__(self, use_spectral_norm=False): - super(MultiPeriodDiscriminator, self).__init__() - periods = [2, 3, 5, 7, 11, 17] - # periods = [3, 5, 7, 11, 17, 23, 37] - - discs = [DiscriminatorS(use_spectral_norm=use_spectral_norm)] - discs = discs + [ - DiscriminatorP(i, use_spectral_norm=use_spectral_norm) for i in periods - ] - self.discriminators = nn.ModuleList(discs) - - def forward(self, y, y_hat): - y_d_rs = [] # - y_d_gs = [] - fmap_rs = [] - fmap_gs = [] - for i, d in enumerate(self.discriminators): - y_d_r, fmap_r = d(y) - y_d_g, fmap_g = d(y_hat) - # for j in range(len(fmap_r)): - # print(i,j,y.shape,y_hat.shape,fmap_r[j].shape,fmap_g[j].shape) - y_d_rs.append(y_d_r) - y_d_gs.append(y_d_g) - fmap_rs.append(fmap_r) - fmap_gs.append(fmap_g) - - return y_d_rs, y_d_gs, fmap_rs, fmap_gs - - -class MultiPeriodDiscriminatorV2(torch.nn.Module): - def __init__(self, use_spectral_norm=False): - super(MultiPeriodDiscriminatorV2, self).__init__() - # periods = [2, 3, 5, 7, 11, 17] - periods = [2, 3, 5, 7, 11, 17, 23, 37] - - discs = [DiscriminatorS(use_spectral_norm=use_spectral_norm)] - discs = discs + [ - DiscriminatorP(i, use_spectral_norm=use_spectral_norm) for i in periods - ] - self.discriminators = nn.ModuleList(discs) - - def forward(self, y, y_hat): - y_d_rs = [] # - y_d_gs = [] - fmap_rs = [] - fmap_gs = [] - for i, d in enumerate(self.discriminators): - y_d_r, fmap_r = d(y) - y_d_g, fmap_g = d(y_hat) - # for j in range(len(fmap_r)): - # print(i,j,y.shape,y_hat.shape,fmap_r[j].shape,fmap_g[j].shape) - y_d_rs.append(y_d_r) - y_d_gs.append(y_d_g) - fmap_rs.append(fmap_r) - fmap_gs.append(fmap_g) - - return y_d_rs, y_d_gs, fmap_rs, fmap_gs - - -class DiscriminatorS(torch.nn.Module): - def __init__(self, use_spectral_norm=False): - super(DiscriminatorS, self).__init__() - norm_f = weight_norm if use_spectral_norm == False else spectral_norm - self.convs = nn.ModuleList( - [ - norm_f(Conv1d(1, 16, 15, 1, padding=7)), - norm_f(Conv1d(16, 64, 41, 4, groups=4, padding=20)), - norm_f(Conv1d(64, 256, 41, 4, groups=16, padding=20)), - norm_f(Conv1d(256, 1024, 41, 4, groups=64, padding=20)), - norm_f(Conv1d(1024, 1024, 41, 4, groups=256, padding=20)), - norm_f(Conv1d(1024, 1024, 5, 1, padding=2)), - ] - ) - self.conv_post = norm_f(Conv1d(1024, 1, 3, 1, padding=1)) - - def forward(self, x): - fmap = [] - - for l in self.convs: - x = l(x) - x = F.leaky_relu(x, modules.LRELU_SLOPE) - fmap.append(x) - x = self.conv_post(x) - fmap.append(x) - x = torch.flatten(x, 1, -1) - - return x, fmap - - -class DiscriminatorP(torch.nn.Module): - def __init__(self, period, kernel_size=5, stride=3, use_spectral_norm=False): - super(DiscriminatorP, self).__init__() - self.period = period - self.use_spectral_norm = use_spectral_norm - norm_f = weight_norm if use_spectral_norm == False else spectral_norm - self.convs = nn.ModuleList( - [ - norm_f( - Conv2d( - 1, - 32, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 32, - 128, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 128, - 512, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 512, - 1024, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 1024, - 1024, - (kernel_size, 1), - 1, - padding=(get_padding(kernel_size, 1), 0), - ) - ), - ] - ) - self.conv_post = norm_f(Conv2d(1024, 1, (3, 1), 1, padding=(1, 0))) - - def forward(self, x): - fmap = [] - - # 1d to 2d - b, c, t = x.shape - if t % self.period != 0: # pad first - n_pad = self.period - (t % self.period) - x = F.pad(x, (0, n_pad), "reflect") - t = t + n_pad - x = x.view(b, c, t // self.period, self.period) - - for l in self.convs: - x = l(x) - x = F.leaky_relu(x, modules.LRELU_SLOPE) - fmap.append(x) - x = self.conv_post(x) - fmap.append(x) - x = torch.flatten(x, 1, -1) - - return x, fmap diff --git a/infer/lib/infer_pack/modules.py b/infer/lib/infer_pack/modules.py deleted file mode 100644 index 2201a58bee9b7808d386b3ef9ac2d1f9630e56ef..0000000000000000000000000000000000000000 --- a/infer/lib/infer_pack/modules.py +++ /dev/null @@ -1,521 +0,0 @@ -import copy -import math - -import numpy as np -import scipy -import torch -from torch import nn -from torch.nn import AvgPool1d, Conv1d, Conv2d, ConvTranspose1d -from torch.nn import functional as F -from torch.nn.utils import remove_weight_norm, weight_norm - -from infer.lib.infer_pack import commons -from infer.lib.infer_pack.commons import get_padding, init_weights -from infer.lib.infer_pack.transforms import piecewise_rational_quadratic_transform - -LRELU_SLOPE = 0.1 - - -class LayerNorm(nn.Module): - def __init__(self, channels, eps=1e-5): - super().__init__() - self.channels = channels - self.eps = eps - - self.gamma = nn.Parameter(torch.ones(channels)) - self.beta = nn.Parameter(torch.zeros(channels)) - - def forward(self, x): - x = x.transpose(1, -1) - x = F.layer_norm(x, (self.channels,), self.gamma, self.beta, self.eps) - return x.transpose(1, -1) - - -class ConvReluNorm(nn.Module): - def __init__( - self, - in_channels, - hidden_channels, - out_channels, - kernel_size, - n_layers, - p_dropout, - ): - super().__init__() - self.in_channels = in_channels - self.hidden_channels = hidden_channels - self.out_channels = out_channels - self.kernel_size = kernel_size - self.n_layers = n_layers - self.p_dropout = p_dropout - assert n_layers > 1, "Number of layers should be larger than 0." - - self.conv_layers = nn.ModuleList() - self.norm_layers = nn.ModuleList() - self.conv_layers.append( - nn.Conv1d( - in_channels, hidden_channels, kernel_size, padding=kernel_size // 2 - ) - ) - self.norm_layers.append(LayerNorm(hidden_channels)) - self.relu_drop = nn.Sequential(nn.ReLU(), nn.Dropout(p_dropout)) - for _ in range(n_layers - 1): - self.conv_layers.append( - nn.Conv1d( - hidden_channels, - hidden_channels, - kernel_size, - padding=kernel_size // 2, - ) - ) - self.norm_layers.append(LayerNorm(hidden_channels)) - self.proj = nn.Conv1d(hidden_channels, out_channels, 1) - self.proj.weight.data.zero_() - self.proj.bias.data.zero_() - - def forward(self, x, x_mask): - x_org = x - for i in range(self.n_layers): - x = self.conv_layers[i](x * x_mask) - x = self.norm_layers[i](x) - x = self.relu_drop(x) - x = x_org + self.proj(x) - return x * x_mask - - -class DDSConv(nn.Module): - """ - Dialted and Depth-Separable Convolution - """ - - def __init__(self, channels, kernel_size, n_layers, p_dropout=0.0): - super().__init__() - self.channels = channels - self.kernel_size = kernel_size - self.n_layers = n_layers - self.p_dropout = p_dropout - - self.drop = nn.Dropout(p_dropout) - self.convs_sep = nn.ModuleList() - self.convs_1x1 = nn.ModuleList() - self.norms_1 = nn.ModuleList() - self.norms_2 = nn.ModuleList() - for i in range(n_layers): - dilation = kernel_size**i - padding = (kernel_size * dilation - dilation) // 2 - self.convs_sep.append( - nn.Conv1d( - channels, - channels, - kernel_size, - groups=channels, - dilation=dilation, - padding=padding, - ) - ) - self.convs_1x1.append(nn.Conv1d(channels, channels, 1)) - self.norms_1.append(LayerNorm(channels)) - self.norms_2.append(LayerNorm(channels)) - - def forward(self, x, x_mask, g=None): - if g is not None: - x = x + g - for i in range(self.n_layers): - y = self.convs_sep[i](x * x_mask) - y = self.norms_1[i](y) - y = F.gelu(y) - y = self.convs_1x1[i](y) - y = self.norms_2[i](y) - y = F.gelu(y) - y = self.drop(y) - x = x + y - return x * x_mask - - -class WN(torch.nn.Module): - def __init__( - self, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - gin_channels=0, - p_dropout=0, - ): - super(WN, self).__init__() - assert kernel_size % 2 == 1 - self.hidden_channels = hidden_channels - self.kernel_size = (kernel_size,) - self.dilation_rate = dilation_rate - self.n_layers = n_layers - self.gin_channels = gin_channels - self.p_dropout = p_dropout - - self.in_layers = torch.nn.ModuleList() - self.res_skip_layers = torch.nn.ModuleList() - self.drop = nn.Dropout(p_dropout) - - if gin_channels != 0: - cond_layer = torch.nn.Conv1d( - gin_channels, 2 * hidden_channels * n_layers, 1 - ) - self.cond_layer = torch.nn.utils.weight_norm(cond_layer, name="weight") - - for i in range(n_layers): - dilation = dilation_rate**i - padding = int((kernel_size * dilation - dilation) / 2) - in_layer = torch.nn.Conv1d( - hidden_channels, - 2 * hidden_channels, - kernel_size, - dilation=dilation, - padding=padding, - ) - in_layer = torch.nn.utils.weight_norm(in_layer, name="weight") - self.in_layers.append(in_layer) - - # last one is not necessary - if i < n_layers - 1: - res_skip_channels = 2 * hidden_channels - else: - res_skip_channels = hidden_channels - - res_skip_layer = torch.nn.Conv1d(hidden_channels, res_skip_channels, 1) - res_skip_layer = torch.nn.utils.weight_norm(res_skip_layer, name="weight") - self.res_skip_layers.append(res_skip_layer) - - def forward(self, x, x_mask, g=None, **kwargs): - output = torch.zeros_like(x) - n_channels_tensor = torch.IntTensor([self.hidden_channels]) - - if g is not None: - g = self.cond_layer(g) - - for i in range(self.n_layers): - x_in = self.in_layers[i](x) - if g is not None: - cond_offset = i * 2 * self.hidden_channels - g_l = g[:, cond_offset : cond_offset + 2 * self.hidden_channels, :] - else: - g_l = torch.zeros_like(x_in) - - acts = commons.fused_add_tanh_sigmoid_multiply(x_in, g_l, n_channels_tensor) - acts = self.drop(acts) - - res_skip_acts = self.res_skip_layers[i](acts) - if i < self.n_layers - 1: - res_acts = res_skip_acts[:, : self.hidden_channels, :] - x = (x + res_acts) * x_mask - output = output + res_skip_acts[:, self.hidden_channels :, :] - else: - output = output + res_skip_acts - return output * x_mask - - def remove_weight_norm(self): - if self.gin_channels != 0: - torch.nn.utils.remove_weight_norm(self.cond_layer) - for l in self.in_layers: - torch.nn.utils.remove_weight_norm(l) - for l in self.res_skip_layers: - torch.nn.utils.remove_weight_norm(l) - - -class ResBlock1(torch.nn.Module): - def __init__(self, channels, kernel_size=3, dilation=(1, 3, 5)): - super(ResBlock1, self).__init__() - self.convs1 = nn.ModuleList( - [ - weight_norm( - Conv1d( - channels, - channels, - kernel_size, - 1, - dilation=dilation[0], - padding=get_padding(kernel_size, dilation[0]), - ) - ), - weight_norm( - Conv1d( - channels, - channels, - kernel_size, - 1, - dilation=dilation[1], - padding=get_padding(kernel_size, dilation[1]), - ) - ), - weight_norm( - Conv1d( - channels, - channels, - kernel_size, - 1, - dilation=dilation[2], - padding=get_padding(kernel_size, dilation[2]), - ) - ), - ] - ) - self.convs1.apply(init_weights) - - self.convs2 = nn.ModuleList( - [ - weight_norm( - Conv1d( - channels, - channels, - kernel_size, - 1, - dilation=1, - padding=get_padding(kernel_size, 1), - ) - ), - weight_norm( - Conv1d( - channels, - channels, - kernel_size, - 1, - dilation=1, - padding=get_padding(kernel_size, 1), - ) - ), - weight_norm( - Conv1d( - channels, - channels, - kernel_size, - 1, - dilation=1, - padding=get_padding(kernel_size, 1), - ) - ), - ] - ) - self.convs2.apply(init_weights) - - def forward(self, x, x_mask=None): - for c1, c2 in zip(self.convs1, self.convs2): - xt = F.leaky_relu(x, LRELU_SLOPE) - if x_mask is not None: - xt = xt * x_mask - xt = c1(xt) - xt = F.leaky_relu(xt, LRELU_SLOPE) - if x_mask is not None: - xt = xt * x_mask - xt = c2(xt) - x = xt + x - if x_mask is not None: - x = x * x_mask - return x - - def remove_weight_norm(self): - for l in self.convs1: - remove_weight_norm(l) - for l in self.convs2: - remove_weight_norm(l) - - -class ResBlock2(torch.nn.Module): - def __init__(self, channels, kernel_size=3, dilation=(1, 3)): - super(ResBlock2, self).__init__() - self.convs = nn.ModuleList( - [ - weight_norm( - Conv1d( - channels, - channels, - kernel_size, - 1, - dilation=dilation[0], - padding=get_padding(kernel_size, dilation[0]), - ) - ), - weight_norm( - Conv1d( - channels, - channels, - kernel_size, - 1, - dilation=dilation[1], - padding=get_padding(kernel_size, dilation[1]), - ) - ), - ] - ) - self.convs.apply(init_weights) - - def forward(self, x, x_mask=None): - for c in self.convs: - xt = F.leaky_relu(x, LRELU_SLOPE) - if x_mask is not None: - xt = xt * x_mask - xt = c(xt) - x = xt + x - if x_mask is not None: - x = x * x_mask - return x - - def remove_weight_norm(self): - for l in self.convs: - remove_weight_norm(l) - - -class Log(nn.Module): - def forward(self, x, x_mask, reverse=False, **kwargs): - if not reverse: - y = torch.log(torch.clamp_min(x, 1e-5)) * x_mask - logdet = torch.sum(-y, [1, 2]) - return y, logdet - else: - x = torch.exp(x) * x_mask - return x - - -class Flip(nn.Module): - def forward(self, x, *args, reverse=False, **kwargs): - x = torch.flip(x, [1]) - if not reverse: - logdet = torch.zeros(x.size(0)).to(dtype=x.dtype, device=x.device) - return x, logdet - else: - return x - - -class ElementwiseAffine(nn.Module): - def __init__(self, channels): - super().__init__() - self.channels = channels - self.m = nn.Parameter(torch.zeros(channels, 1)) - self.logs = nn.Parameter(torch.zeros(channels, 1)) - - def forward(self, x, x_mask, reverse=False, **kwargs): - if not reverse: - y = self.m + torch.exp(self.logs) * x - y = y * x_mask - logdet = torch.sum(self.logs * x_mask, [1, 2]) - return y, logdet - else: - x = (x - self.m) * torch.exp(-self.logs) * x_mask - return x - - -class ResidualCouplingLayer(nn.Module): - def __init__( - self, - channels, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - p_dropout=0, - gin_channels=0, - mean_only=False, - ): - assert channels % 2 == 0, "channels should be divisible by 2" - super().__init__() - self.channels = channels - self.hidden_channels = hidden_channels - self.kernel_size = kernel_size - self.dilation_rate = dilation_rate - self.n_layers = n_layers - self.half_channels = channels // 2 - self.mean_only = mean_only - - self.pre = nn.Conv1d(self.half_channels, hidden_channels, 1) - self.enc = WN( - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - p_dropout=p_dropout, - gin_channels=gin_channels, - ) - self.post = nn.Conv1d(hidden_channels, self.half_channels * (2 - mean_only), 1) - self.post.weight.data.zero_() - self.post.bias.data.zero_() - - def forward(self, x, x_mask, g=None, reverse=False): - x0, x1 = torch.split(x, [self.half_channels] * 2, 1) - h = self.pre(x0) * x_mask - h = self.enc(h, x_mask, g=g) - stats = self.post(h) * x_mask - if not self.mean_only: - m, logs = torch.split(stats, [self.half_channels] * 2, 1) - else: - m = stats - logs = torch.zeros_like(m) - - if not reverse: - x1 = m + x1 * torch.exp(logs) * x_mask - x = torch.cat([x0, x1], 1) - logdet = torch.sum(logs, [1, 2]) - return x, logdet - else: - x1 = (x1 - m) * torch.exp(-logs) * x_mask - x = torch.cat([x0, x1], 1) - return x - - def remove_weight_norm(self): - self.enc.remove_weight_norm() - - -class ConvFlow(nn.Module): - def __init__( - self, - in_channels, - filter_channels, - kernel_size, - n_layers, - num_bins=10, - tail_bound=5.0, - ): - super().__init__() - self.in_channels = in_channels - self.filter_channels = filter_channels - self.kernel_size = kernel_size - self.n_layers = n_layers - self.num_bins = num_bins - self.tail_bound = tail_bound - self.half_channels = in_channels // 2 - - self.pre = nn.Conv1d(self.half_channels, filter_channels, 1) - self.convs = DDSConv(filter_channels, kernel_size, n_layers, p_dropout=0.0) - self.proj = nn.Conv1d( - filter_channels, self.half_channels * (num_bins * 3 - 1), 1 - ) - self.proj.weight.data.zero_() - self.proj.bias.data.zero_() - - def forward(self, x, x_mask, g=None, reverse=False): - x0, x1 = torch.split(x, [self.half_channels] * 2, 1) - h = self.pre(x0) - h = self.convs(h, x_mask, g=g) - h = self.proj(h) * x_mask - - b, c, t = x0.shape - h = h.reshape(b, c, -1, t).permute(0, 1, 3, 2) # [b, cx?, t] -> [b, c, t, ?] - - unnormalized_widths = h[..., : self.num_bins] / math.sqrt(self.filter_channels) - unnormalized_heights = h[..., self.num_bins : 2 * self.num_bins] / math.sqrt( - self.filter_channels - ) - unnormalized_derivatives = h[..., 2 * self.num_bins :] - - x1, logabsdet = piecewise_rational_quadratic_transform( - x1, - unnormalized_widths, - unnormalized_heights, - unnormalized_derivatives, - inverse=reverse, - tails="linear", - tail_bound=self.tail_bound, - ) - - x = torch.cat([x0, x1], 1) * x_mask - logdet = torch.sum(logabsdet * x_mask, [1, 2]) - if not reverse: - return x, logdet - else: - return x diff --git a/infer/lib/infer_pack/modules/F0Predictor/DioF0Predictor.py b/infer/lib/infer_pack/modules/F0Predictor/DioF0Predictor.py deleted file mode 100644 index 55abcfdb87636a9ee85b8df5cdc1bec64098b5da..0000000000000000000000000000000000000000 --- a/infer/lib/infer_pack/modules/F0Predictor/DioF0Predictor.py +++ /dev/null @@ -1,91 +0,0 @@ -import numpy as np -import pyworld - -from infer.lib.infer_pack.modules.F0Predictor.F0Predictor import F0Predictor - - -class DioF0Predictor(F0Predictor): - def __init__(self, hop_length=512, f0_min=50, f0_max=1100, sampling_rate=44100): - self.hop_length = hop_length - self.f0_min = f0_min - self.f0_max = f0_max - self.sampling_rate = sampling_rate - - def interpolate_f0(self, f0): - """ - 对F0进行插值处理 - """ - - data = np.reshape(f0, (f0.size, 1)) - - vuv_vector = np.zeros((data.size, 1), dtype=np.float32) - vuv_vector[data > 0.0] = 1.0 - vuv_vector[data <= 0.0] = 0.0 - - ip_data = data - - frame_number = data.size - last_value = 0.0 - for i in range(frame_number): - if data[i] <= 0.0: - j = i + 1 - for j in range(i + 1, frame_number): - if data[j] > 0.0: - break - if j < frame_number - 1: - if last_value > 0.0: - step = (data[j] - data[i - 1]) / float(j - i) - for k in range(i, j): - ip_data[k] = data[i - 1] + step * (k - i + 1) - else: - for k in range(i, j): - ip_data[k] = data[j] - else: - for k in range(i, frame_number): - ip_data[k] = last_value - else: - ip_data[i] = data[i] # 这里可能存在一个没有必要的拷贝 - last_value = data[i] - - return ip_data[:, 0], vuv_vector[:, 0] - - def resize_f0(self, x, target_len): - source = np.array(x) - source[source < 0.001] = np.nan - target = np.interp( - np.arange(0, len(source) * target_len, len(source)) / target_len, - np.arange(0, len(source)), - source, - ) - res = np.nan_to_num(target) - return res - - def compute_f0(self, wav, p_len=None): - if p_len is None: - p_len = wav.shape[0] // self.hop_length - f0, t = pyworld.dio( - wav.astype(np.double), - fs=self.sampling_rate, - f0_floor=self.f0_min, - f0_ceil=self.f0_max, - frame_period=1000 * self.hop_length / self.sampling_rate, - ) - f0 = pyworld.stonemask(wav.astype(np.double), f0, t, self.sampling_rate) - for index, pitch in enumerate(f0): - f0[index] = round(pitch, 1) - return self.interpolate_f0(self.resize_f0(f0, p_len))[0] - - def compute_f0_uv(self, wav, p_len=None): - if p_len is None: - p_len = wav.shape[0] // self.hop_length - f0, t = pyworld.dio( - wav.astype(np.double), - fs=self.sampling_rate, - f0_floor=self.f0_min, - f0_ceil=self.f0_max, - frame_period=1000 * self.hop_length / self.sampling_rate, - ) - f0 = pyworld.stonemask(wav.astype(np.double), f0, t, self.sampling_rate) - for index, pitch in enumerate(f0): - f0[index] = round(pitch, 1) - return self.interpolate_f0(self.resize_f0(f0, p_len)) diff --git a/infer/lib/infer_pack/modules/F0Predictor/F0Predictor.py b/infer/lib/infer_pack/modules/F0Predictor/F0Predictor.py deleted file mode 100644 index f56e49e7f0e6eab3babf0711cae2933371b9f9cc..0000000000000000000000000000000000000000 --- a/infer/lib/infer_pack/modules/F0Predictor/F0Predictor.py +++ /dev/null @@ -1,16 +0,0 @@ -class F0Predictor(object): - def compute_f0(self, wav, p_len): - """ - input: wav:[signal_length] - p_len:int - output: f0:[signal_length//hop_length] - """ - pass - - def compute_f0_uv(self, wav, p_len): - """ - input: wav:[signal_length] - p_len:int - output: f0:[signal_length//hop_length],uv:[signal_length//hop_length] - """ - pass diff --git a/infer/lib/infer_pack/modules/F0Predictor/HarvestF0Predictor.py b/infer/lib/infer_pack/modules/F0Predictor/HarvestF0Predictor.py deleted file mode 100644 index f9664fb1f89ef068e923211179e1c7e1ce7fdbd2..0000000000000000000000000000000000000000 --- a/infer/lib/infer_pack/modules/F0Predictor/HarvestF0Predictor.py +++ /dev/null @@ -1,87 +0,0 @@ -import numpy as np -import pyworld - -from infer.lib.infer_pack.modules.F0Predictor.F0Predictor import F0Predictor - - -class HarvestF0Predictor(F0Predictor): - def __init__(self, hop_length=512, f0_min=50, f0_max=1100, sampling_rate=44100): - self.hop_length = hop_length - self.f0_min = f0_min - self.f0_max = f0_max - self.sampling_rate = sampling_rate - - def interpolate_f0(self, f0): - """ - 对F0进行插值处理 - """ - - data = np.reshape(f0, (f0.size, 1)) - - vuv_vector = np.zeros((data.size, 1), dtype=np.float32) - vuv_vector[data > 0.0] = 1.0 - vuv_vector[data <= 0.0] = 0.0 - - ip_data = data - - frame_number = data.size - last_value = 0.0 - for i in range(frame_number): - if data[i] <= 0.0: - j = i + 1 - for j in range(i + 1, frame_number): - if data[j] > 0.0: - break - if j < frame_number - 1: - if last_value > 0.0: - step = (data[j] - data[i - 1]) / float(j - i) - for k in range(i, j): - ip_data[k] = data[i - 1] + step * (k - i + 1) - else: - for k in range(i, j): - ip_data[k] = data[j] - else: - for k in range(i, frame_number): - ip_data[k] = last_value - else: - ip_data[i] = data[i] # 这里可能存在一个没有必要的拷贝 - last_value = data[i] - - return ip_data[:, 0], vuv_vector[:, 0] - - def resize_f0(self, x, target_len): - source = np.array(x) - source[source < 0.001] = np.nan - target = np.interp( - np.arange(0, len(source) * target_len, len(source)) / target_len, - np.arange(0, len(source)), - source, - ) - res = np.nan_to_num(target) - return res - - def compute_f0(self, wav, p_len=None): - if p_len is None: - p_len = wav.shape[0] // self.hop_length - f0, t = pyworld.harvest( - wav.astype(np.double), - fs=self.hop_length, - f0_ceil=self.f0_max, - f0_floor=self.f0_min, - frame_period=1000 * self.hop_length / self.sampling_rate, - ) - f0 = pyworld.stonemask(wav.astype(np.double), f0, t, self.fs) - return self.interpolate_f0(self.resize_f0(f0, p_len))[0] - - def compute_f0_uv(self, wav, p_len=None): - if p_len is None: - p_len = wav.shape[0] // self.hop_length - f0, t = pyworld.harvest( - wav.astype(np.double), - fs=self.sampling_rate, - f0_floor=self.f0_min, - f0_ceil=self.f0_max, - frame_period=1000 * self.hop_length / self.sampling_rate, - ) - f0 = pyworld.stonemask(wav.astype(np.double), f0, t, self.sampling_rate) - return self.interpolate_f0(self.resize_f0(f0, p_len)) diff --git a/infer/lib/infer_pack/modules/F0Predictor/PMF0Predictor.py b/infer/lib/infer_pack/modules/F0Predictor/PMF0Predictor.py deleted file mode 100644 index 06f2b79f5e5c6f2049bf8220c29ae20c3f82d524..0000000000000000000000000000000000000000 --- a/infer/lib/infer_pack/modules/F0Predictor/PMF0Predictor.py +++ /dev/null @@ -1,98 +0,0 @@ -import numpy as np -import parselmouth - -from infer.lib.infer_pack.modules.F0Predictor.F0Predictor import F0Predictor - - -class PMF0Predictor(F0Predictor): - def __init__(self, hop_length=512, f0_min=50, f0_max=1100, sampling_rate=44100): - self.hop_length = hop_length - self.f0_min = f0_min - self.f0_max = f0_max - self.sampling_rate = sampling_rate - - def interpolate_f0(self, f0): - """ - 对F0进行插值处理 - """ - - data = np.reshape(f0, (f0.size, 1)) - - vuv_vector = np.zeros((data.size, 1), dtype=np.float32) - vuv_vector[data > 0.0] = 1.0 - vuv_vector[data <= 0.0] = 0.0 - - ip_data = data - - frame_number = data.size - last_value = 0.0 - for i in range(frame_number): - if data[i] <= 0.0: - j = i + 1 - for j in range(i + 1, frame_number): - if data[j] > 0.0: - break - if j < frame_number - 1: - if last_value > 0.0: - step = (data[j] - data[i - 1]) / float(j - i) - for k in range(i, j): - ip_data[k] = data[i - 1] + step * (k - i + 1) - else: - for k in range(i, j): - ip_data[k] = data[j] - else: - for k in range(i, frame_number): - ip_data[k] = last_value - else: - ip_data[i] = data[i] # 这里可能存在一个没有必要的拷贝 - last_value = data[i] - - return ip_data[:, 0], vuv_vector[:, 0] - - def compute_f0(self, wav, p_len=None): - x = wav - if p_len is None: - p_len = x.shape[0] // self.hop_length - else: - assert abs(p_len - x.shape[0] // self.hop_length) < 4, "pad length error" - time_step = self.hop_length / self.sampling_rate * 1000 - f0 = ( - parselmouth.Sound(x, self.sampling_rate) - .to_pitch_ac( - time_step=time_step / 1000, - voicing_threshold=0.6, - pitch_floor=self.f0_min, - pitch_ceiling=self.f0_max, - ) - .selected_array["frequency"] - ) - - pad_size = (p_len - len(f0) + 1) // 2 - if pad_size > 0 or p_len - len(f0) - pad_size > 0: - f0 = np.pad(f0, [[pad_size, p_len - len(f0) - pad_size]], mode="constant") - f0, uv = self.interpolate_f0(f0) - return f0 - - def compute_f0_uv(self, wav, p_len=None): - x = wav - if p_len is None: - p_len = x.shape[0] // self.hop_length - else: - assert abs(p_len - x.shape[0] // self.hop_length) < 4, "pad length error" - time_step = self.hop_length / self.sampling_rate * 1000 - f0 = ( - parselmouth.Sound(x, self.sampling_rate) - .to_pitch_ac( - time_step=time_step / 1000, - voicing_threshold=0.6, - pitch_floor=self.f0_min, - pitch_ceiling=self.f0_max, - ) - .selected_array["frequency"] - ) - - pad_size = (p_len - len(f0) + 1) // 2 - if pad_size > 0 or p_len - len(f0) - pad_size > 0: - f0 = np.pad(f0, [[pad_size, p_len - len(f0) - pad_size]], mode="constant") - f0, uv = self.interpolate_f0(f0) - return f0, uv diff --git a/infer/lib/infer_pack/modules/F0Predictor/__init__.py b/infer/lib/infer_pack/modules/F0Predictor/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/infer/lib/infer_pack/onnx_inference.py b/infer/lib/infer_pack/onnx_inference.py deleted file mode 100644 index 6633659fc83b19d82611d3c9cc840e9c547734d0..0000000000000000000000000000000000000000 --- a/infer/lib/infer_pack/onnx_inference.py +++ /dev/null @@ -1,149 +0,0 @@ -import librosa -import numpy as np -import onnxruntime -import soundfile - -import logging - -logger = logging.getLogger(__name__) - - -class ContentVec: - def __init__(self, vec_path="pretrained/vec-768-layer-12.onnx", device=None): - logger.info("Load model(s) from {}".format(vec_path)) - if device == "cpu" or device is None: - providers = ["CPUExecutionProvider"] - elif device == "cuda": - providers = ["CUDAExecutionProvider", "CPUExecutionProvider"] - elif device == "dml": - providers = ["DmlExecutionProvider"] - else: - raise RuntimeError("Unsportted Device") - self.model = onnxruntime.InferenceSession(vec_path, providers=providers) - - def __call__(self, wav): - return self.forward(wav) - - def forward(self, wav): - feats = wav - if feats.ndim == 2: # double channels - feats = feats.mean(-1) - assert feats.ndim == 1, feats.ndim - feats = np.expand_dims(np.expand_dims(feats, 0), 0) - onnx_input = {self.model.get_inputs()[0].name: feats} - logits = self.model.run(None, onnx_input)[0] - return logits.transpose(0, 2, 1) - - -def get_f0_predictor(f0_predictor, hop_length, sampling_rate, **kargs): - if f0_predictor == "pm": - from lib.infer_pack.modules.F0Predictor.PMF0Predictor import PMF0Predictor - - f0_predictor_object = PMF0Predictor( - hop_length=hop_length, sampling_rate=sampling_rate - ) - elif f0_predictor == "harvest": - from lib.infer_pack.modules.F0Predictor.HarvestF0Predictor import ( - HarvestF0Predictor, - ) - - f0_predictor_object = HarvestF0Predictor( - hop_length=hop_length, sampling_rate=sampling_rate - ) - elif f0_predictor == "dio": - from lib.infer_pack.modules.F0Predictor.DioF0Predictor import DioF0Predictor - - f0_predictor_object = DioF0Predictor( - hop_length=hop_length, sampling_rate=sampling_rate - ) - else: - raise Exception("Unknown f0 predictor") - return f0_predictor_object - - -class OnnxRVC: - def __init__( - self, - model_path, - sr=40000, - hop_size=512, - vec_path="vec-768-layer-12", - device="cpu", - ): - vec_path = f"pretrained/{vec_path}.onnx" - self.vec_model = ContentVec(vec_path, device) - if device == "cpu" or device is None: - providers = ["CPUExecutionProvider"] - elif device == "cuda": - providers = ["CUDAExecutionProvider", "CPUExecutionProvider"] - elif device == "dml": - providers = ["DmlExecutionProvider"] - else: - raise RuntimeError("Unsportted Device") - self.model = onnxruntime.InferenceSession(model_path, providers=providers) - self.sampling_rate = sr - self.hop_size = hop_size - - def forward(self, hubert, hubert_length, pitch, pitchf, ds, rnd): - onnx_input = { - self.model.get_inputs()[0].name: hubert, - self.model.get_inputs()[1].name: hubert_length, - self.model.get_inputs()[2].name: pitch, - self.model.get_inputs()[3].name: pitchf, - self.model.get_inputs()[4].name: ds, - self.model.get_inputs()[5].name: rnd, - } - return (self.model.run(None, onnx_input)[0] * 32767).astype(np.int16) - - def inference( - self, - raw_path, - sid, - f0_method="dio", - f0_up_key=0, - pad_time=0.5, - cr_threshold=0.02, - ): - f0_min = 50 - f0_max = 1100 - f0_mel_min = 1127 * np.log(1 + f0_min / 700) - f0_mel_max = 1127 * np.log(1 + f0_max / 700) - f0_predictor = get_f0_predictor( - f0_method, - hop_length=self.hop_size, - sampling_rate=self.sampling_rate, - threshold=cr_threshold, - ) - wav, sr = librosa.load(raw_path, sr=self.sampling_rate) - org_length = len(wav) - if org_length / sr > 50.0: - raise RuntimeError("Reached Max Length") - - wav16k = librosa.resample(wav, orig_sr=self.sampling_rate, target_sr=16000) - wav16k = wav16k - - hubert = self.vec_model(wav16k) - hubert = np.repeat(hubert, 2, axis=2).transpose(0, 2, 1).astype(np.float32) - hubert_length = hubert.shape[1] - - pitchf = f0_predictor.compute_f0(wav, hubert_length) - pitchf = pitchf * 2 ** (f0_up_key / 12) - pitch = pitchf.copy() - f0_mel = 1127 * np.log(1 + pitch / 700) - f0_mel[f0_mel > 0] = (f0_mel[f0_mel > 0] - f0_mel_min) * 254 / ( - f0_mel_max - f0_mel_min - ) + 1 - f0_mel[f0_mel <= 1] = 1 - f0_mel[f0_mel > 255] = 255 - pitch = np.rint(f0_mel).astype(np.int64) - - pitchf = pitchf.reshape(1, len(pitchf)).astype(np.float32) - pitch = pitch.reshape(1, len(pitch)) - ds = np.array([sid]).astype(np.int64) - - rnd = np.random.randn(1, 192, hubert_length).astype(np.float32) - hubert_length = np.array([hubert_length]).astype(np.int64) - - out_wav = self.forward(hubert, hubert_length, pitch, pitchf, ds, rnd).squeeze() - out_wav = np.pad(out_wav, (0, 2 * self.hop_size), "constant") - return out_wav[0:org_length] diff --git a/infer/lib/infer_pack/transforms.py b/infer/lib/infer_pack/transforms.py deleted file mode 100644 index 6f30b7177d17fc61a4173c21b4233172a890be58..0000000000000000000000000000000000000000 --- a/infer/lib/infer_pack/transforms.py +++ /dev/null @@ -1,207 +0,0 @@ -import numpy as np -import torch -from torch.nn import functional as F - -DEFAULT_MIN_BIN_WIDTH = 1e-3 -DEFAULT_MIN_BIN_HEIGHT = 1e-3 -DEFAULT_MIN_DERIVATIVE = 1e-3 - - -def piecewise_rational_quadratic_transform( - inputs, - unnormalized_widths, - unnormalized_heights, - unnormalized_derivatives, - inverse=False, - tails=None, - tail_bound=1.0, - min_bin_width=DEFAULT_MIN_BIN_WIDTH, - min_bin_height=DEFAULT_MIN_BIN_HEIGHT, - min_derivative=DEFAULT_MIN_DERIVATIVE, -): - if tails is None: - spline_fn = rational_quadratic_spline - spline_kwargs = {} - else: - spline_fn = unconstrained_rational_quadratic_spline - spline_kwargs = {"tails": tails, "tail_bound": tail_bound} - - outputs, logabsdet = spline_fn( - inputs=inputs, - unnormalized_widths=unnormalized_widths, - unnormalized_heights=unnormalized_heights, - unnormalized_derivatives=unnormalized_derivatives, - inverse=inverse, - min_bin_width=min_bin_width, - min_bin_height=min_bin_height, - min_derivative=min_derivative, - **spline_kwargs - ) - return outputs, logabsdet - - -def searchsorted(bin_locations, inputs, eps=1e-6): - bin_locations[..., -1] += eps - return torch.sum(inputs[..., None] >= bin_locations, dim=-1) - 1 - - -def unconstrained_rational_quadratic_spline( - inputs, - unnormalized_widths, - unnormalized_heights, - unnormalized_derivatives, - inverse=False, - tails="linear", - tail_bound=1.0, - min_bin_width=DEFAULT_MIN_BIN_WIDTH, - min_bin_height=DEFAULT_MIN_BIN_HEIGHT, - min_derivative=DEFAULT_MIN_DERIVATIVE, -): - inside_interval_mask = (inputs >= -tail_bound) & (inputs <= tail_bound) - outside_interval_mask = ~inside_interval_mask - - outputs = torch.zeros_like(inputs) - logabsdet = torch.zeros_like(inputs) - - if tails == "linear": - unnormalized_derivatives = F.pad(unnormalized_derivatives, pad=(1, 1)) - constant = np.log(np.exp(1 - min_derivative) - 1) - unnormalized_derivatives[..., 0] = constant - unnormalized_derivatives[..., -1] = constant - - outputs[outside_interval_mask] = inputs[outside_interval_mask] - logabsdet[outside_interval_mask] = 0 - else: - raise RuntimeError("{} tails are not implemented.".format(tails)) - - ( - outputs[inside_interval_mask], - logabsdet[inside_interval_mask], - ) = rational_quadratic_spline( - inputs=inputs[inside_interval_mask], - unnormalized_widths=unnormalized_widths[inside_interval_mask, :], - unnormalized_heights=unnormalized_heights[inside_interval_mask, :], - unnormalized_derivatives=unnormalized_derivatives[inside_interval_mask, :], - inverse=inverse, - left=-tail_bound, - right=tail_bound, - bottom=-tail_bound, - top=tail_bound, - min_bin_width=min_bin_width, - min_bin_height=min_bin_height, - min_derivative=min_derivative, - ) - - return outputs, logabsdet - - -def rational_quadratic_spline( - inputs, - unnormalized_widths, - unnormalized_heights, - unnormalized_derivatives, - inverse=False, - left=0.0, - right=1.0, - bottom=0.0, - top=1.0, - min_bin_width=DEFAULT_MIN_BIN_WIDTH, - min_bin_height=DEFAULT_MIN_BIN_HEIGHT, - min_derivative=DEFAULT_MIN_DERIVATIVE, -): - if torch.min(inputs) < left or torch.max(inputs) > right: - raise ValueError("Input to a transform is not within its domain") - - num_bins = unnormalized_widths.shape[-1] - - if min_bin_width * num_bins > 1.0: - raise ValueError("Minimal bin width too large for the number of bins") - if min_bin_height * num_bins > 1.0: - raise ValueError("Minimal bin height too large for the number of bins") - - widths = F.softmax(unnormalized_widths, dim=-1) - widths = min_bin_width + (1 - min_bin_width * num_bins) * widths - cumwidths = torch.cumsum(widths, dim=-1) - cumwidths = F.pad(cumwidths, pad=(1, 0), mode="constant", value=0.0) - cumwidths = (right - left) * cumwidths + left - cumwidths[..., 0] = left - cumwidths[..., -1] = right - widths = cumwidths[..., 1:] - cumwidths[..., :-1] - - derivatives = min_derivative + F.softplus(unnormalized_derivatives) - - heights = F.softmax(unnormalized_heights, dim=-1) - heights = min_bin_height + (1 - min_bin_height * num_bins) * heights - cumheights = torch.cumsum(heights, dim=-1) - cumheights = F.pad(cumheights, pad=(1, 0), mode="constant", value=0.0) - cumheights = (top - bottom) * cumheights + bottom - cumheights[..., 0] = bottom - cumheights[..., -1] = top - heights = cumheights[..., 1:] - cumheights[..., :-1] - - if inverse: - bin_idx = searchsorted(cumheights, inputs)[..., None] - else: - bin_idx = searchsorted(cumwidths, inputs)[..., None] - - input_cumwidths = cumwidths.gather(-1, bin_idx)[..., 0] - input_bin_widths = widths.gather(-1, bin_idx)[..., 0] - - input_cumheights = cumheights.gather(-1, bin_idx)[..., 0] - delta = heights / widths - input_delta = delta.gather(-1, bin_idx)[..., 0] - - input_derivatives = derivatives.gather(-1, bin_idx)[..., 0] - input_derivatives_plus_one = derivatives[..., 1:].gather(-1, bin_idx)[..., 0] - - input_heights = heights.gather(-1, bin_idx)[..., 0] - - if inverse: - a = (inputs - input_cumheights) * ( - input_derivatives + input_derivatives_plus_one - 2 * input_delta - ) + input_heights * (input_delta - input_derivatives) - b = input_heights * input_derivatives - (inputs - input_cumheights) * ( - input_derivatives + input_derivatives_plus_one - 2 * input_delta - ) - c = -input_delta * (inputs - input_cumheights) - - discriminant = b.pow(2) - 4 * a * c - assert (discriminant >= 0).all() - - root = (2 * c) / (-b - torch.sqrt(discriminant)) - outputs = root * input_bin_widths + input_cumwidths - - theta_one_minus_theta = root * (1 - root) - denominator = input_delta + ( - (input_derivatives + input_derivatives_plus_one - 2 * input_delta) - * theta_one_minus_theta - ) - derivative_numerator = input_delta.pow(2) * ( - input_derivatives_plus_one * root.pow(2) - + 2 * input_delta * theta_one_minus_theta - + input_derivatives * (1 - root).pow(2) - ) - logabsdet = torch.log(derivative_numerator) - 2 * torch.log(denominator) - - return outputs, -logabsdet - else: - theta = (inputs - input_cumwidths) / input_bin_widths - theta_one_minus_theta = theta * (1 - theta) - - numerator = input_heights * ( - input_delta * theta.pow(2) + input_derivatives * theta_one_minus_theta - ) - denominator = input_delta + ( - (input_derivatives + input_derivatives_plus_one - 2 * input_delta) - * theta_one_minus_theta - ) - outputs = input_cumheights + numerator / denominator - - derivative_numerator = input_delta.pow(2) * ( - input_derivatives_plus_one * theta.pow(2) - + 2 * input_delta * theta_one_minus_theta - + input_derivatives * (1 - theta).pow(2) - ) - logabsdet = torch.log(derivative_numerator) - 2 * torch.log(denominator) - - return outputs, logabsdet diff --git a/infer/lib/rmvpe.py b/infer/lib/rmvpe.py deleted file mode 100644 index 2a387ebe73c7e1dd8bb7ccad1ea9e0ea89848ece..0000000000000000000000000000000000000000 --- a/infer/lib/rmvpe.py +++ /dev/null @@ -1,717 +0,0 @@ -import pdb, os - -import numpy as np -import torch -try: - #Fix "Torch not compiled with CUDA enabled" - import intel_extension_for_pytorch as ipex # pylint: disable=import-error, unused-import - if torch.xpu.is_available(): - from infer.modules.ipex import ipex_init - ipex_init() -except Exception: - pass -import torch.nn as nn -import torch.nn.functional as F -from librosa.util import normalize, pad_center, tiny -from scipy.signal import get_window - -import logging - -logger = logging.getLogger(__name__) - - -###stft codes from https://github.com/pseeth/torch-stft/blob/master/torch_stft/util.py -def window_sumsquare( - window, - n_frames, - hop_length=200, - win_length=800, - n_fft=800, - dtype=np.float32, - norm=None, -): - """ - # from librosa 0.6 - Compute the sum-square envelope of a window function at a given hop length. - This is used to estimate modulation effects induced by windowing - observations in short-time fourier transforms. - Parameters - ---------- - window : string, tuple, number, callable, or list-like - Window specification, as in `get_window` - n_frames : int > 0 - The number of analysis frames - hop_length : int > 0 - The number of samples to advance between frames - win_length : [optional] - The length of the window function. By default, this matches `n_fft`. - n_fft : int > 0 - The length of each analysis frame. - dtype : np.dtype - The data type of the output - Returns - ------- - wss : np.ndarray, shape=`(n_fft + hop_length * (n_frames - 1))` - The sum-squared envelope of the window function - """ - if win_length is None: - win_length = n_fft - - n = n_fft + hop_length * (n_frames - 1) - x = np.zeros(n, dtype=dtype) - - # Compute the squared window at the desired length - win_sq = get_window(window, win_length, fftbins=True) - win_sq = normalize(win_sq, norm=norm) ** 2 - win_sq = pad_center(win_sq, n_fft) - - # Fill the envelope - for i in range(n_frames): - sample = i * hop_length - x[sample : min(n, sample + n_fft)] += win_sq[: max(0, min(n_fft, n - sample))] - return x - - -class STFT(torch.nn.Module): - def __init__( - self, filter_length=1024, hop_length=512, win_length=None, window="hann" - ): - """ - This module implements an STFT using 1D convolution and 1D transpose convolutions. - This is a bit tricky so there are some cases that probably won't work as working - out the same sizes before and after in all overlap add setups is tough. Right now, - this code should work with hop lengths that are half the filter length (50% overlap - between frames). - - Keyword Arguments: - filter_length {int} -- Length of filters used (default: {1024}) - hop_length {int} -- Hop length of STFT (restrict to 50% overlap between frames) (default: {512}) - win_length {[type]} -- Length of the window function applied to each frame (if not specified, it - equals the filter length). (default: {None}) - window {str} -- Type of window to use (options are bartlett, hann, hamming, blackman, blackmanharris) - (default: {'hann'}) - """ - super(STFT, self).__init__() - self.filter_length = filter_length - self.hop_length = hop_length - self.win_length = win_length if win_length else filter_length - self.window = window - self.forward_transform = None - self.pad_amount = int(self.filter_length / 2) - scale = self.filter_length / self.hop_length - fourier_basis = np.fft.fft(np.eye(self.filter_length)) - - cutoff = int((self.filter_length / 2 + 1)) - fourier_basis = np.vstack( - [np.real(fourier_basis[:cutoff, :]), np.imag(fourier_basis[:cutoff, :])] - ) - forward_basis = torch.FloatTensor(fourier_basis[:, None, :]) - inverse_basis = torch.FloatTensor( - np.linalg.pinv(scale * fourier_basis).T[:, None, :] - ) - - assert filter_length >= self.win_length - # get window and zero center pad it to filter_length - fft_window = get_window(window, self.win_length, fftbins=True) - fft_window = pad_center(fft_window, size=filter_length) - fft_window = torch.from_numpy(fft_window).float() - - # window the bases - forward_basis *= fft_window - inverse_basis *= fft_window - - self.register_buffer("forward_basis", forward_basis.float()) - self.register_buffer("inverse_basis", inverse_basis.float()) - - def transform(self, input_data): - """Take input data (audio) to STFT domain. - - Arguments: - input_data {tensor} -- Tensor of floats, with shape (num_batch, num_samples) - - Returns: - magnitude {tensor} -- Magnitude of STFT with shape (num_batch, - num_frequencies, num_frames) - phase {tensor} -- Phase of STFT with shape (num_batch, - num_frequencies, num_frames) - """ - num_batches = input_data.shape[0] - num_samples = input_data.shape[-1] - - self.num_samples = num_samples - - # similar to librosa, reflect-pad the input - input_data = input_data.view(num_batches, 1, num_samples) - # print(1234,input_data.shape) - input_data = F.pad( - input_data.unsqueeze(1), - (self.pad_amount, self.pad_amount, 0, 0, 0, 0), - mode="reflect", - ).squeeze(1) - # print(2333,input_data.shape,self.forward_basis.shape,self.hop_length) - # pdb.set_trace() - forward_transform = F.conv1d( - input_data, self.forward_basis, stride=self.hop_length, padding=0 - ) - - cutoff = int((self.filter_length / 2) + 1) - real_part = forward_transform[:, :cutoff, :] - imag_part = forward_transform[:, cutoff:, :] - - magnitude = torch.sqrt(real_part**2 + imag_part**2) - # phase = torch.atan2(imag_part.data, real_part.data) - - return magnitude # , phase - - def inverse(self, magnitude, phase): - """Call the inverse STFT (iSTFT), given magnitude and phase tensors produced - by the ```transform``` function. - - Arguments: - magnitude {tensor} -- Magnitude of STFT with shape (num_batch, - num_frequencies, num_frames) - phase {tensor} -- Phase of STFT with shape (num_batch, - num_frequencies, num_frames) - - Returns: - inverse_transform {tensor} -- Reconstructed audio given magnitude and phase. Of - shape (num_batch, num_samples) - """ - recombine_magnitude_phase = torch.cat( - [magnitude * torch.cos(phase), magnitude * torch.sin(phase)], dim=1 - ) - - inverse_transform = F.conv_transpose1d( - recombine_magnitude_phase, - self.inverse_basis, - stride=self.hop_length, - padding=0, - ) - - if self.window is not None: - window_sum = window_sumsquare( - self.window, - magnitude.size(-1), - hop_length=self.hop_length, - win_length=self.win_length, - n_fft=self.filter_length, - dtype=np.float32, - ) - # remove modulation effects - approx_nonzero_indices = torch.from_numpy( - np.where(window_sum > tiny(window_sum))[0] - ) - window_sum = torch.from_numpy(window_sum).to(inverse_transform.device) - inverse_transform[:, :, approx_nonzero_indices] /= window_sum[ - approx_nonzero_indices - ] - - # scale by hop ratio - inverse_transform *= float(self.filter_length) / self.hop_length - - inverse_transform = inverse_transform[..., self.pad_amount :] - inverse_transform = inverse_transform[..., : self.num_samples] - inverse_transform = inverse_transform.squeeze(1) - - return inverse_transform - - def forward(self, input_data): - """Take input data (audio) to STFT domain and then back to audio. - - Arguments: - input_data {tensor} -- Tensor of floats, with shape (num_batch, num_samples) - - Returns: - reconstruction {tensor} -- Reconstructed audio given magnitude and phase. Of - shape (num_batch, num_samples) - """ - self.magnitude, self.phase = self.transform(input_data) - reconstruction = self.inverse(self.magnitude, self.phase) - return reconstruction - - -from time import time as ttime - - -class BiGRU(nn.Module): - def __init__(self, input_features, hidden_features, num_layers): - super(BiGRU, self).__init__() - self.gru = nn.GRU( - input_features, - hidden_features, - num_layers=num_layers, - batch_first=True, - bidirectional=True, - ) - - def forward(self, x): - return self.gru(x)[0] - - -class ConvBlockRes(nn.Module): - def __init__(self, in_channels, out_channels, momentum=0.01): - super(ConvBlockRes, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - in_channels=in_channels, - out_channels=out_channels, - kernel_size=(3, 3), - stride=(1, 1), - padding=(1, 1), - bias=False, - ), - nn.BatchNorm2d(out_channels, momentum=momentum), - nn.ReLU(), - nn.Conv2d( - in_channels=out_channels, - out_channels=out_channels, - kernel_size=(3, 3), - stride=(1, 1), - padding=(1, 1), - bias=False, - ), - nn.BatchNorm2d(out_channels, momentum=momentum), - nn.ReLU(), - ) - if in_channels != out_channels: - self.shortcut = nn.Conv2d(in_channels, out_channels, (1, 1)) - self.is_shortcut = True - else: - self.is_shortcut = False - - def forward(self, x): - if self.is_shortcut: - return self.conv(x) + self.shortcut(x) - else: - return self.conv(x) + x - - -class Encoder(nn.Module): - def __init__( - self, - in_channels, - in_size, - n_encoders, - kernel_size, - n_blocks, - out_channels=16, - momentum=0.01, - ): - super(Encoder, self).__init__() - self.n_encoders = n_encoders - self.bn = nn.BatchNorm2d(in_channels, momentum=momentum) - self.layers = nn.ModuleList() - self.latent_channels = [] - for i in range(self.n_encoders): - self.layers.append( - ResEncoderBlock( - in_channels, out_channels, kernel_size, n_blocks, momentum=momentum - ) - ) - self.latent_channels.append([out_channels, in_size]) - in_channels = out_channels - out_channels *= 2 - in_size //= 2 - self.out_size = in_size - self.out_channel = out_channels - - def forward(self, x): - concat_tensors = [] - x = self.bn(x) - for i in range(self.n_encoders): - _, x = self.layers[i](x) - concat_tensors.append(_) - return x, concat_tensors - - -class ResEncoderBlock(nn.Module): - def __init__( - self, in_channels, out_channels, kernel_size, n_blocks=1, momentum=0.01 - ): - super(ResEncoderBlock, self).__init__() - self.n_blocks = n_blocks - self.conv = nn.ModuleList() - self.conv.append(ConvBlockRes(in_channels, out_channels, momentum)) - for i in range(n_blocks - 1): - self.conv.append(ConvBlockRes(out_channels, out_channels, momentum)) - self.kernel_size = kernel_size - if self.kernel_size is not None: - self.pool = nn.AvgPool2d(kernel_size=kernel_size) - - def forward(self, x): - for i in range(self.n_blocks): - x = self.conv[i](x) - if self.kernel_size is not None: - return x, self.pool(x) - else: - return x - - -class Intermediate(nn.Module): # - def __init__(self, in_channels, out_channels, n_inters, n_blocks, momentum=0.01): - super(Intermediate, self).__init__() - self.n_inters = n_inters - self.layers = nn.ModuleList() - self.layers.append( - ResEncoderBlock(in_channels, out_channels, None, n_blocks, momentum) - ) - for i in range(self.n_inters - 1): - self.layers.append( - ResEncoderBlock(out_channels, out_channels, None, n_blocks, momentum) - ) - - def forward(self, x): - for i in range(self.n_inters): - x = self.layers[i](x) - return x - - -class ResDecoderBlock(nn.Module): - def __init__(self, in_channels, out_channels, stride, n_blocks=1, momentum=0.01): - super(ResDecoderBlock, self).__init__() - out_padding = (0, 1) if stride == (1, 2) else (1, 1) - self.n_blocks = n_blocks - self.conv1 = nn.Sequential( - nn.ConvTranspose2d( - in_channels=in_channels, - out_channels=out_channels, - kernel_size=(3, 3), - stride=stride, - padding=(1, 1), - output_padding=out_padding, - bias=False, - ), - nn.BatchNorm2d(out_channels, momentum=momentum), - nn.ReLU(), - ) - self.conv2 = nn.ModuleList() - self.conv2.append(ConvBlockRes(out_channels * 2, out_channels, momentum)) - for i in range(n_blocks - 1): - self.conv2.append(ConvBlockRes(out_channels, out_channels, momentum)) - - def forward(self, x, concat_tensor): - x = self.conv1(x) - x = torch.cat((x, concat_tensor), dim=1) - for i in range(self.n_blocks): - x = self.conv2[i](x) - return x - - -class Decoder(nn.Module): - def __init__(self, in_channels, n_decoders, stride, n_blocks, momentum=0.01): - super(Decoder, self).__init__() - self.layers = nn.ModuleList() - self.n_decoders = n_decoders - for i in range(self.n_decoders): - out_channels = in_channels // 2 - self.layers.append( - ResDecoderBlock(in_channels, out_channels, stride, n_blocks, momentum) - ) - in_channels = out_channels - - def forward(self, x, concat_tensors): - for i in range(self.n_decoders): - x = self.layers[i](x, concat_tensors[-1 - i]) - return x - - -class DeepUnet(nn.Module): - def __init__( - self, - kernel_size, - n_blocks, - en_de_layers=5, - inter_layers=4, - in_channels=1, - en_out_channels=16, - ): - super(DeepUnet, self).__init__() - self.encoder = Encoder( - in_channels, 128, en_de_layers, kernel_size, n_blocks, en_out_channels - ) - self.intermediate = Intermediate( - self.encoder.out_channel // 2, - self.encoder.out_channel, - inter_layers, - n_blocks, - ) - self.decoder = Decoder( - self.encoder.out_channel, en_de_layers, kernel_size, n_blocks - ) - - def forward(self, x): - x, concat_tensors = self.encoder(x) - x = self.intermediate(x) - x = self.decoder(x, concat_tensors) - return x - - -class E2E(nn.Module): - def __init__( - self, - n_blocks, - n_gru, - kernel_size, - en_de_layers=5, - inter_layers=4, - in_channels=1, - en_out_channels=16, - ): - super(E2E, self).__init__() - self.unet = DeepUnet( - kernel_size, - n_blocks, - en_de_layers, - inter_layers, - in_channels, - en_out_channels, - ) - self.cnn = nn.Conv2d(en_out_channels, 3, (3, 3), padding=(1, 1)) - if n_gru: - self.fc = nn.Sequential( - BiGRU(3 * 128, 256, n_gru), - nn.Linear(512, 360), - nn.Dropout(0.25), - nn.Sigmoid(), - ) - else: - self.fc = nn.Sequential( - nn.Linear(3 * nn.N_MELS, nn.N_CLASS), nn.Dropout(0.25), nn.Sigmoid() - ) - - def forward(self, mel): - # print(mel.shape) - mel = mel.transpose(-1, -2).unsqueeze(1) - x = self.cnn(self.unet(mel)).transpose(1, 2).flatten(-2) - x = self.fc(x) - # print(x.shape) - return x - - -from librosa.filters import mel - - -class MelSpectrogram(torch.nn.Module): - def __init__( - self, - is_half, - n_mel_channels, - sampling_rate, - win_length, - hop_length, - n_fft=None, - mel_fmin=0, - mel_fmax=None, - clamp=1e-5, - ): - super().__init__() - n_fft = win_length if n_fft is None else n_fft - self.hann_window = {} - mel_basis = mel( - sr=sampling_rate, - n_fft=n_fft, - n_mels=n_mel_channels, - fmin=mel_fmin, - fmax=mel_fmax, - htk=True, - ) - mel_basis = torch.from_numpy(mel_basis).float() - self.register_buffer("mel_basis", mel_basis) - self.n_fft = win_length if n_fft is None else n_fft - self.hop_length = hop_length - self.win_length = win_length - self.sampling_rate = sampling_rate - self.n_mel_channels = n_mel_channels - self.clamp = clamp - self.is_half = is_half - - def forward(self, audio, keyshift=0, speed=1, center=True): - factor = 2 ** (keyshift / 12) - n_fft_new = int(np.round(self.n_fft * factor)) - win_length_new = int(np.round(self.win_length * factor)) - hop_length_new = int(np.round(self.hop_length * speed)) - keyshift_key = str(keyshift) + "_" + str(audio.device) - if keyshift_key not in self.hann_window: - self.hann_window[keyshift_key] = torch.hann_window(win_length_new).to( - # "cpu"if(audio.device.type=="privateuseone") else audio.device - audio.device - ) - # fft = torch.stft(#doesn't support pytorch_dml - # # audio.cpu() if(audio.device.type=="privateuseone")else audio, - # audio, - # n_fft=n_fft_new, - # hop_length=hop_length_new, - # win_length=win_length_new, - # window=self.hann_window[keyshift_key], - # center=center, - # return_complex=True, - # ) - # magnitude = torch.sqrt(fft.real.pow(2) + fft.imag.pow(2)) - # print(1111111111) - # print(222222222222222,audio.device,self.is_half) - if hasattr(self, "stft") == False: - # print(n_fft_new,hop_length_new,win_length_new,audio.shape) - self.stft = STFT( - filter_length=n_fft_new, - hop_length=hop_length_new, - win_length=win_length_new, - window="hann", - ).to(audio.device) - magnitude = self.stft.transform(audio) # phase - # if (audio.device.type == "privateuseone"): - # magnitude=magnitude.to(audio.device) - if keyshift != 0: - size = self.n_fft // 2 + 1 - resize = magnitude.size(1) - if resize < size: - magnitude = F.pad(magnitude, (0, 0, 0, size - resize)) - magnitude = magnitude[:, :size, :] * self.win_length / win_length_new - mel_output = torch.matmul(self.mel_basis, magnitude) - if self.is_half == True: - mel_output = mel_output.half() - log_mel_spec = torch.log(torch.clamp(mel_output, min=self.clamp)) - # print(log_mel_spec.device.type) - return log_mel_spec - - -class RMVPE: - def __init__(self, model_path, is_half, device=None): - self.resample_kernel = {} - self.resample_kernel = {} - self.is_half = is_half - if device is None: - device = "cuda" if torch.cuda.is_available() else "cpu" - self.device = device - self.mel_extractor = MelSpectrogram( - is_half, 128, 16000, 1024, 160, None, 30, 8000 - ).to(device) - if "privateuseone" in str(device): - import onnxruntime as ort - - ort_session = ort.InferenceSession( - "%s/rmvpe.onnx" % os.environ["rmvpe_root"], - providers=["DmlExecutionProvider"], - ) - self.model = ort_session - else: - model = E2E(4, 1, (2, 2)) - ckpt = torch.load(model_path, map_location="cpu") - model.load_state_dict(ckpt) - model.eval() - if is_half == True: - model = model.half() - self.model = model - self.model = self.model.to(device) - cents_mapping = 20 * np.arange(360) + 1997.3794084376191 - self.cents_mapping = np.pad(cents_mapping, (4, 4)) # 368 - - def mel2hidden(self, mel): - with torch.no_grad(): - n_frames = mel.shape[-1] - mel = F.pad( - mel, (0, 32 * ((n_frames - 1) // 32 + 1) - n_frames), mode="constant" - ) - if "privateuseone" in str(self.device): - onnx_input_name = self.model.get_inputs()[0].name - onnx_outputs_names = self.model.get_outputs()[0].name - hidden = self.model.run( - [onnx_outputs_names], - input_feed={onnx_input_name: mel.cpu().numpy()}, - )[0] - else: - hidden = self.model(mel) - return hidden[:, :n_frames] - - def decode(self, hidden, thred=0.03): - cents_pred = self.to_local_average_cents(hidden, thred=thred) - f0 = 10 * (2 ** (cents_pred / 1200)) - f0[f0 == 10] = 0 - # f0 = np.array([10 * (2 ** (cent_pred / 1200)) if cent_pred else 0 for cent_pred in cents_pred]) - return f0 - - def infer_from_audio(self, audio, thred=0.03): - # torch.cuda.synchronize() - t0 = ttime() - mel = self.mel_extractor( - torch.from_numpy(audio).float().to(self.device).unsqueeze(0), center=True - ) - # print(123123123,mel.device.type) - # torch.cuda.synchronize() - t1 = ttime() - hidden = self.mel2hidden(mel) - # torch.cuda.synchronize() - t2 = ttime() - # print(234234,hidden.device.type) - if "privateuseone" not in str(self.device): - hidden = hidden.squeeze(0).cpu().numpy() - else: - hidden = hidden[0] - if self.is_half == True: - hidden = hidden.astype("float32") - - f0 = self.decode(hidden, thred=thred) - # torch.cuda.synchronize() - t3 = ttime() - # print("hmvpe:%s\t%s\t%s\t%s"%(t1-t0,t2-t1,t3-t2,t3-t0)) - return f0 - - def infer_from_audio_with_pitch(self, audio, thred=0.03, f0_min=50, f0_max=1100): - audio = torch.from_numpy(audio).float().to(self.device).unsqueeze(0) - mel = self.mel_extractor(audio, center=True) - hidden = self.mel2hidden(mel) - hidden = hidden.squeeze(0).cpu().numpy() - if self.is_half == True: - hidden = hidden.astype("float32") - f0 = self.decode(hidden, thred=thred) - f0[(f0 < f0_min) | (f0 > f0_max)] = 0 - return f0 - - def to_local_average_cents(self, salience, thred=0.05): - # t0 = ttime() - center = np.argmax(salience, axis=1) # 帧长#index - salience = np.pad(salience, ((0, 0), (4, 4))) # 帧长,368 - # t1 = ttime() - center += 4 - todo_salience = [] - todo_cents_mapping = [] - starts = center - 4 - ends = center + 5 - for idx in range(salience.shape[0]): - todo_salience.append(salience[:, starts[idx] : ends[idx]][idx]) - todo_cents_mapping.append(self.cents_mapping[starts[idx] : ends[idx]]) - # t2 = ttime() - todo_salience = np.array(todo_salience) # 帧长,9 - todo_cents_mapping = np.array(todo_cents_mapping) # 帧长,9 - product_sum = np.sum(todo_salience * todo_cents_mapping, 1) - weight_sum = np.sum(todo_salience, 1) # 帧长 - devided = product_sum / weight_sum # 帧长 - # t3 = ttime() - maxx = np.max(salience, axis=1) # 帧长 - devided[maxx <= thred] = 0 - # t4 = ttime() - # print("decode:%s\t%s\t%s\t%s" % (t1 - t0, t2 - t1, t3 - t2, t4 - t3)) - return devided - - -if __name__ == "__main__": - import librosa - import soundfile as sf - - audio, sampling_rate = sf.read(r"C:\Users\liujing04\Desktop\Z\冬之花clip1.wav") - if len(audio.shape) > 1: - audio = librosa.to_mono(audio.transpose(1, 0)) - audio_bak = audio.copy() - if sampling_rate != 16000: - audio = librosa.resample(audio, orig_sr=sampling_rate, target_sr=16000) - model_path = r"D:\BaiduNetdiskDownload\RVC-beta-v2-0727AMD_realtime\rmvpe.pt" - thred = 0.03 # 0.01 - device = "cuda" if torch.cuda.is_available() else "cpu" - rmvpe = RMVPE(model_path, is_half=False, device=device) - t0 = ttime() - f0 = rmvpe.infer_from_audio(audio, thred=thred) - # f0 = rmvpe.infer_from_audio(audio, thred=thred) - # f0 = rmvpe.infer_from_audio(audio, thred=thred) - # f0 = rmvpe.infer_from_audio(audio, thred=thred) - # f0 = rmvpe.infer_from_audio(audio, thred=thred) - t1 = ttime() - logger.info("%s %.2f", f0.shape, t1 - t0) diff --git a/infer/lib/slicer2.py b/infer/lib/slicer2.py deleted file mode 100644 index 5b29ee262aa54045e807be2cffeb41687499ba58..0000000000000000000000000000000000000000 --- a/infer/lib/slicer2.py +++ /dev/null @@ -1,260 +0,0 @@ -import numpy as np - - -# This function is obtained from librosa. -def get_rms( - y, - frame_length=2048, - hop_length=512, - pad_mode="constant", -): - padding = (int(frame_length // 2), int(frame_length // 2)) - y = np.pad(y, padding, mode=pad_mode) - - axis = -1 - # put our new within-frame axis at the end for now - out_strides = y.strides + tuple([y.strides[axis]]) - # Reduce the shape on the framing axis - x_shape_trimmed = list(y.shape) - x_shape_trimmed[axis] -= frame_length - 1 - out_shape = tuple(x_shape_trimmed) + tuple([frame_length]) - xw = np.lib.stride_tricks.as_strided(y, shape=out_shape, strides=out_strides) - if axis < 0: - target_axis = axis - 1 - else: - target_axis = axis + 1 - xw = np.moveaxis(xw, -1, target_axis) - # Downsample along the target axis - slices = [slice(None)] * xw.ndim - slices[axis] = slice(0, None, hop_length) - x = xw[tuple(slices)] - - # Calculate power - power = np.mean(np.abs(x) ** 2, axis=-2, keepdims=True) - - return np.sqrt(power) - - -class Slicer: - def __init__( - self, - sr: int, - threshold: float = -40.0, - min_length: int = 5000, - min_interval: int = 300, - hop_size: int = 20, - max_sil_kept: int = 5000, - ): - if not min_length >= min_interval >= hop_size: - raise ValueError( - "The following condition must be satisfied: min_length >= min_interval >= hop_size" - ) - if not max_sil_kept >= hop_size: - raise ValueError( - "The following condition must be satisfied: max_sil_kept >= hop_size" - ) - min_interval = sr * min_interval / 1000 - self.threshold = 10 ** (threshold / 20.0) - self.hop_size = round(sr * hop_size / 1000) - self.win_size = min(round(min_interval), 4 * self.hop_size) - self.min_length = round(sr * min_length / 1000 / self.hop_size) - self.min_interval = round(min_interval / self.hop_size) - self.max_sil_kept = round(sr * max_sil_kept / 1000 / self.hop_size) - - def _apply_slice(self, waveform, begin, end): - if len(waveform.shape) > 1: - return waveform[ - :, begin * self.hop_size : min(waveform.shape[1], end * self.hop_size) - ] - else: - return waveform[ - begin * self.hop_size : min(waveform.shape[0], end * self.hop_size) - ] - - # @timeit - def slice(self, waveform): - if len(waveform.shape) > 1: - samples = waveform.mean(axis=0) - else: - samples = waveform - if samples.shape[0] <= self.min_length: - return [waveform] - rms_list = get_rms( - y=samples, frame_length=self.win_size, hop_length=self.hop_size - ).squeeze(0) - sil_tags = [] - silence_start = None - clip_start = 0 - for i, rms in enumerate(rms_list): - # Keep looping while frame is silent. - if rms < self.threshold: - # Record start of silent frames. - if silence_start is None: - silence_start = i - continue - # Keep looping while frame is not silent and silence start has not been recorded. - if silence_start is None: - continue - # Clear recorded silence start if interval is not enough or clip is too short - is_leading_silence = silence_start == 0 and i > self.max_sil_kept - need_slice_middle = ( - i - silence_start >= self.min_interval - and i - clip_start >= self.min_length - ) - if not is_leading_silence and not need_slice_middle: - silence_start = None - continue - # Need slicing. Record the range of silent frames to be removed. - if i - silence_start <= self.max_sil_kept: - pos = rms_list[silence_start : i + 1].argmin() + silence_start - if silence_start == 0: - sil_tags.append((0, pos)) - else: - sil_tags.append((pos, pos)) - clip_start = pos - elif i - silence_start <= self.max_sil_kept * 2: - pos = rms_list[ - i - self.max_sil_kept : silence_start + self.max_sil_kept + 1 - ].argmin() - pos += i - self.max_sil_kept - pos_l = ( - rms_list[ - silence_start : silence_start + self.max_sil_kept + 1 - ].argmin() - + silence_start - ) - pos_r = ( - rms_list[i - self.max_sil_kept : i + 1].argmin() - + i - - self.max_sil_kept - ) - if silence_start == 0: - sil_tags.append((0, pos_r)) - clip_start = pos_r - else: - sil_tags.append((min(pos_l, pos), max(pos_r, pos))) - clip_start = max(pos_r, pos) - else: - pos_l = ( - rms_list[ - silence_start : silence_start + self.max_sil_kept + 1 - ].argmin() - + silence_start - ) - pos_r = ( - rms_list[i - self.max_sil_kept : i + 1].argmin() - + i - - self.max_sil_kept - ) - if silence_start == 0: - sil_tags.append((0, pos_r)) - else: - sil_tags.append((pos_l, pos_r)) - clip_start = pos_r - silence_start = None - # Deal with trailing silence. - total_frames = rms_list.shape[0] - if ( - silence_start is not None - and total_frames - silence_start >= self.min_interval - ): - silence_end = min(total_frames, silence_start + self.max_sil_kept) - pos = rms_list[silence_start : silence_end + 1].argmin() + silence_start - sil_tags.append((pos, total_frames + 1)) - # Apply and return slices. - if len(sil_tags) == 0: - return [waveform] - else: - chunks = [] - if sil_tags[0][0] > 0: - chunks.append(self._apply_slice(waveform, 0, sil_tags[0][0])) - for i in range(len(sil_tags) - 1): - chunks.append( - self._apply_slice(waveform, sil_tags[i][1], sil_tags[i + 1][0]) - ) - if sil_tags[-1][1] < total_frames: - chunks.append( - self._apply_slice(waveform, sil_tags[-1][1], total_frames) - ) - return chunks - - -def main(): - import os.path - from argparse import ArgumentParser - - import librosa - import soundfile - - parser = ArgumentParser() - parser.add_argument("audio", type=str, help="The audio to be sliced") - parser.add_argument( - "--out", type=str, help="Output directory of the sliced audio clips" - ) - parser.add_argument( - "--db_thresh", - type=float, - required=False, - default=-40, - help="The dB threshold for silence detection", - ) - parser.add_argument( - "--min_length", - type=int, - required=False, - default=5000, - help="The minimum milliseconds required for each sliced audio clip", - ) - parser.add_argument( - "--min_interval", - type=int, - required=False, - default=300, - help="The minimum milliseconds for a silence part to be sliced", - ) - parser.add_argument( - "--hop_size", - type=int, - required=False, - default=10, - help="Frame length in milliseconds", - ) - parser.add_argument( - "--max_sil_kept", - type=int, - required=False, - default=500, - help="The maximum silence length kept around the sliced clip, presented in milliseconds", - ) - args = parser.parse_args() - out = args.out - if out is None: - out = os.path.dirname(os.path.abspath(args.audio)) - audio, sr = librosa.load(args.audio, sr=None, mono=False) - slicer = Slicer( - sr=sr, - threshold=args.db_thresh, - min_length=args.min_length, - min_interval=args.min_interval, - hop_size=args.hop_size, - max_sil_kept=args.max_sil_kept, - ) - chunks = slicer.slice(audio) - if not os.path.exists(out): - os.makedirs(out) - for i, chunk in enumerate(chunks): - if len(chunk.shape) > 1: - chunk = chunk.T - soundfile.write( - os.path.join( - out, - f"%s_%d.wav" - % (os.path.basename(args.audio).rsplit(".", maxsplit=1)[0], i), - ), - chunk, - sr, - ) - - -if __name__ == "__main__": - main() diff --git a/infer/lib/train/data_utils.py b/infer/lib/train/data_utils.py deleted file mode 100644 index 51a176cceba860acf79157ed0bad2b82c8e80406..0000000000000000000000000000000000000000 --- a/infer/lib/train/data_utils.py +++ /dev/null @@ -1,517 +0,0 @@ -import os -import traceback -import logging - -logger = logging.getLogger(__name__) - -import numpy as np -import torch -import torch.utils.data - -from infer.lib.train.mel_processing import spectrogram_torch -from infer.lib.train.utils import load_filepaths_and_text, load_wav_to_torch - - -class TextAudioLoaderMultiNSFsid(torch.utils.data.Dataset): - """ - 1) loads audio, text pairs - 2) normalizes text and converts them to sequences of integers - 3) computes spectrograms from audio files. - """ - - def __init__(self, audiopaths_and_text, hparams): - self.audiopaths_and_text = load_filepaths_and_text(audiopaths_and_text) - self.max_wav_value = hparams.max_wav_value - self.sampling_rate = hparams.sampling_rate - self.filter_length = hparams.filter_length - self.hop_length = hparams.hop_length - self.win_length = hparams.win_length - self.sampling_rate = hparams.sampling_rate - self.min_text_len = getattr(hparams, "min_text_len", 1) - self.max_text_len = getattr(hparams, "max_text_len", 5000) - self._filter() - - def _filter(self): - """ - Filter text & store spec lengths - """ - # Store spectrogram lengths for Bucketing - # wav_length ~= file_size / (wav_channels * Bytes per dim) = file_size / (1 * 2) - # spec_length = wav_length // hop_length - audiopaths_and_text_new = [] - lengths = [] - for audiopath, text, pitch, pitchf, dv in self.audiopaths_and_text: - if self.min_text_len <= len(text) and len(text) <= self.max_text_len: - audiopaths_and_text_new.append([audiopath, text, pitch, pitchf, dv]) - lengths.append(os.path.getsize(audiopath) // (3 * self.hop_length)) - self.audiopaths_and_text = audiopaths_and_text_new - self.lengths = lengths - - def get_sid(self, sid): - sid = torch.LongTensor([int(sid)]) - return sid - - def get_audio_text_pair(self, audiopath_and_text): - # separate filename and text - file = audiopath_and_text[0] - phone = audiopath_and_text[1] - pitch = audiopath_and_text[2] - pitchf = audiopath_and_text[3] - dv = audiopath_and_text[4] - - phone, pitch, pitchf = self.get_labels(phone, pitch, pitchf) - spec, wav = self.get_audio(file) - dv = self.get_sid(dv) - - len_phone = phone.size()[0] - len_spec = spec.size()[-1] - # print(123,phone.shape,pitch.shape,spec.shape) - if len_phone != len_spec: - len_min = min(len_phone, len_spec) - # amor - len_wav = len_min * self.hop_length - - spec = spec[:, :len_min] - wav = wav[:, :len_wav] - - phone = phone[:len_min, :] - pitch = pitch[:len_min] - pitchf = pitchf[:len_min] - - return (spec, wav, phone, pitch, pitchf, dv) - - def get_labels(self, phone, pitch, pitchf): - phone = np.load(phone) - phone = np.repeat(phone, 2, axis=0) - pitch = np.load(pitch) - pitchf = np.load(pitchf) - n_num = min(phone.shape[0], 900) # DistributedBucketSampler - # print(234,phone.shape,pitch.shape) - phone = phone[:n_num, :] - pitch = pitch[:n_num] - pitchf = pitchf[:n_num] - phone = torch.FloatTensor(phone) - pitch = torch.LongTensor(pitch) - pitchf = torch.FloatTensor(pitchf) - return phone, pitch, pitchf - - def get_audio(self, filename): - audio, sampling_rate = load_wav_to_torch(filename) - if sampling_rate != self.sampling_rate: - raise ValueError( - "{} SR doesn't match target {} SR".format( - sampling_rate, self.sampling_rate - ) - ) - audio_norm = audio - # audio_norm = audio / self.max_wav_value - # audio_norm = audio / np.abs(audio).max() - - audio_norm = audio_norm.unsqueeze(0) - spec_filename = filename.replace(".wav", ".spec.pt") - if os.path.exists(spec_filename): - try: - spec = torch.load(spec_filename) - except: - logger.warn("%s %s", spec_filename, traceback.format_exc()) - spec = spectrogram_torch( - audio_norm, - self.filter_length, - self.sampling_rate, - self.hop_length, - self.win_length, - center=False, - ) - spec = torch.squeeze(spec, 0) - torch.save(spec, spec_filename, _use_new_zipfile_serialization=False) - else: - spec = spectrogram_torch( - audio_norm, - self.filter_length, - self.sampling_rate, - self.hop_length, - self.win_length, - center=False, - ) - spec = torch.squeeze(spec, 0) - torch.save(spec, spec_filename, _use_new_zipfile_serialization=False) - return spec, audio_norm - - def __getitem__(self, index): - return self.get_audio_text_pair(self.audiopaths_and_text[index]) - - def __len__(self): - return len(self.audiopaths_and_text) - - -class TextAudioCollateMultiNSFsid: - """Zero-pads model inputs and targets""" - - def __init__(self, return_ids=False): - self.return_ids = return_ids - - def __call__(self, batch): - """Collate's training batch from normalized text and aduio - PARAMS - ------ - batch: [text_normalized, spec_normalized, wav_normalized] - """ - # Right zero-pad all one-hot text sequences to max input length - _, ids_sorted_decreasing = torch.sort( - torch.LongTensor([x[0].size(1) for x in batch]), dim=0, descending=True - ) - - max_spec_len = max([x[0].size(1) for x in batch]) - max_wave_len = max([x[1].size(1) for x in batch]) - spec_lengths = torch.LongTensor(len(batch)) - wave_lengths = torch.LongTensor(len(batch)) - spec_padded = torch.FloatTensor(len(batch), batch[0][0].size(0), max_spec_len) - wave_padded = torch.FloatTensor(len(batch), 1, max_wave_len) - spec_padded.zero_() - wave_padded.zero_() - - max_phone_len = max([x[2].size(0) for x in batch]) - phone_lengths = torch.LongTensor(len(batch)) - phone_padded = torch.FloatTensor( - len(batch), max_phone_len, batch[0][2].shape[1] - ) # (spec, wav, phone, pitch) - pitch_padded = torch.LongTensor(len(batch), max_phone_len) - pitchf_padded = torch.FloatTensor(len(batch), max_phone_len) - phone_padded.zero_() - pitch_padded.zero_() - pitchf_padded.zero_() - # dv = torch.FloatTensor(len(batch), 256)#gin=256 - sid = torch.LongTensor(len(batch)) - - for i in range(len(ids_sorted_decreasing)): - row = batch[ids_sorted_decreasing[i]] - - spec = row[0] - spec_padded[i, :, : spec.size(1)] = spec - spec_lengths[i] = spec.size(1) - - wave = row[1] - wave_padded[i, :, : wave.size(1)] = wave - wave_lengths[i] = wave.size(1) - - phone = row[2] - phone_padded[i, : phone.size(0), :] = phone - phone_lengths[i] = phone.size(0) - - pitch = row[3] - pitch_padded[i, : pitch.size(0)] = pitch - pitchf = row[4] - pitchf_padded[i, : pitchf.size(0)] = pitchf - - # dv[i] = row[5] - sid[i] = row[5] - - return ( - phone_padded, - phone_lengths, - pitch_padded, - pitchf_padded, - spec_padded, - spec_lengths, - wave_padded, - wave_lengths, - # dv - sid, - ) - - -class TextAudioLoader(torch.utils.data.Dataset): - """ - 1) loads audio, text pairs - 2) normalizes text and converts them to sequences of integers - 3) computes spectrograms from audio files. - """ - - def __init__(self, audiopaths_and_text, hparams): - self.audiopaths_and_text = load_filepaths_and_text(audiopaths_and_text) - self.max_wav_value = hparams.max_wav_value - self.sampling_rate = hparams.sampling_rate - self.filter_length = hparams.filter_length - self.hop_length = hparams.hop_length - self.win_length = hparams.win_length - self.sampling_rate = hparams.sampling_rate - self.min_text_len = getattr(hparams, "min_text_len", 1) - self.max_text_len = getattr(hparams, "max_text_len", 5000) - self._filter() - - def _filter(self): - """ - Filter text & store spec lengths - """ - # Store spectrogram lengths for Bucketing - # wav_length ~= file_size / (wav_channels * Bytes per dim) = file_size / (1 * 2) - # spec_length = wav_length // hop_length - audiopaths_and_text_new = [] - lengths = [] - for audiopath, text, dv in self.audiopaths_and_text: - if self.min_text_len <= len(text) and len(text) <= self.max_text_len: - audiopaths_and_text_new.append([audiopath, text, dv]) - lengths.append(os.path.getsize(audiopath) // (3 * self.hop_length)) - self.audiopaths_and_text = audiopaths_and_text_new - self.lengths = lengths - - def get_sid(self, sid): - sid = torch.LongTensor([int(sid)]) - return sid - - def get_audio_text_pair(self, audiopath_and_text): - # separate filename and text - file = audiopath_and_text[0] - phone = audiopath_and_text[1] - dv = audiopath_and_text[2] - - phone = self.get_labels(phone) - spec, wav = self.get_audio(file) - dv = self.get_sid(dv) - - len_phone = phone.size()[0] - len_spec = spec.size()[-1] - if len_phone != len_spec: - len_min = min(len_phone, len_spec) - len_wav = len_min * self.hop_length - spec = spec[:, :len_min] - wav = wav[:, :len_wav] - phone = phone[:len_min, :] - return (spec, wav, phone, dv) - - def get_labels(self, phone): - phone = np.load(phone) - phone = np.repeat(phone, 2, axis=0) - n_num = min(phone.shape[0], 900) # DistributedBucketSampler - phone = phone[:n_num, :] - phone = torch.FloatTensor(phone) - return phone - - def get_audio(self, filename): - audio, sampling_rate = load_wav_to_torch(filename) - if sampling_rate != self.sampling_rate: - raise ValueError( - "{} SR doesn't match target {} SR".format( - sampling_rate, self.sampling_rate - ) - ) - audio_norm = audio - # audio_norm = audio / self.max_wav_value - # audio_norm = audio / np.abs(audio).max() - - audio_norm = audio_norm.unsqueeze(0) - spec_filename = filename.replace(".wav", ".spec.pt") - if os.path.exists(spec_filename): - try: - spec = torch.load(spec_filename) - except: - logger.warn("%s %s", spec_filename, traceback.format_exc()) - spec = spectrogram_torch( - audio_norm, - self.filter_length, - self.sampling_rate, - self.hop_length, - self.win_length, - center=False, - ) - spec = torch.squeeze(spec, 0) - torch.save(spec, spec_filename, _use_new_zipfile_serialization=False) - else: - spec = spectrogram_torch( - audio_norm, - self.filter_length, - self.sampling_rate, - self.hop_length, - self.win_length, - center=False, - ) - spec = torch.squeeze(spec, 0) - torch.save(spec, spec_filename, _use_new_zipfile_serialization=False) - return spec, audio_norm - - def __getitem__(self, index): - return self.get_audio_text_pair(self.audiopaths_and_text[index]) - - def __len__(self): - return len(self.audiopaths_and_text) - - -class TextAudioCollate: - """Zero-pads model inputs and targets""" - - def __init__(self, return_ids=False): - self.return_ids = return_ids - - def __call__(self, batch): - """Collate's training batch from normalized text and aduio - PARAMS - ------ - batch: [text_normalized, spec_normalized, wav_normalized] - """ - # Right zero-pad all one-hot text sequences to max input length - _, ids_sorted_decreasing = torch.sort( - torch.LongTensor([x[0].size(1) for x in batch]), dim=0, descending=True - ) - - max_spec_len = max([x[0].size(1) for x in batch]) - max_wave_len = max([x[1].size(1) for x in batch]) - spec_lengths = torch.LongTensor(len(batch)) - wave_lengths = torch.LongTensor(len(batch)) - spec_padded = torch.FloatTensor(len(batch), batch[0][0].size(0), max_spec_len) - wave_padded = torch.FloatTensor(len(batch), 1, max_wave_len) - spec_padded.zero_() - wave_padded.zero_() - - max_phone_len = max([x[2].size(0) for x in batch]) - phone_lengths = torch.LongTensor(len(batch)) - phone_padded = torch.FloatTensor( - len(batch), max_phone_len, batch[0][2].shape[1] - ) - phone_padded.zero_() - sid = torch.LongTensor(len(batch)) - - for i in range(len(ids_sorted_decreasing)): - row = batch[ids_sorted_decreasing[i]] - - spec = row[0] - spec_padded[i, :, : spec.size(1)] = spec - spec_lengths[i] = spec.size(1) - - wave = row[1] - wave_padded[i, :, : wave.size(1)] = wave - wave_lengths[i] = wave.size(1) - - phone = row[2] - phone_padded[i, : phone.size(0), :] = phone - phone_lengths[i] = phone.size(0) - - sid[i] = row[3] - - return ( - phone_padded, - phone_lengths, - spec_padded, - spec_lengths, - wave_padded, - wave_lengths, - sid, - ) - - -class DistributedBucketSampler(torch.utils.data.distributed.DistributedSampler): - """ - Maintain similar input lengths in a batch. - Length groups are specified by boundaries. - Ex) boundaries = [b1, b2, b3] -> any batch is included either {x | b1 < length(x) <=b2} or {x | b2 < length(x) <= b3}. - - It removes samples which are not included in the boundaries. - Ex) boundaries = [b1, b2, b3] -> any x s.t. length(x) <= b1 or length(x) > b3 are discarded. - """ - - def __init__( - self, - dataset, - batch_size, - boundaries, - num_replicas=None, - rank=None, - shuffle=True, - ): - super().__init__(dataset, num_replicas=num_replicas, rank=rank, shuffle=shuffle) - self.lengths = dataset.lengths - self.batch_size = batch_size - self.boundaries = boundaries - - self.buckets, self.num_samples_per_bucket = self._create_buckets() - self.total_size = sum(self.num_samples_per_bucket) - self.num_samples = self.total_size // self.num_replicas - - def _create_buckets(self): - buckets = [[] for _ in range(len(self.boundaries) - 1)] - for i in range(len(self.lengths)): - length = self.lengths[i] - idx_bucket = self._bisect(length) - if idx_bucket != -1: - buckets[idx_bucket].append(i) - - for i in range(len(buckets) - 1, -1, -1): # - if len(buckets[i]) == 0: - buckets.pop(i) - self.boundaries.pop(i + 1) - - num_samples_per_bucket = [] - for i in range(len(buckets)): - len_bucket = len(buckets[i]) - total_batch_size = self.num_replicas * self.batch_size - rem = ( - total_batch_size - (len_bucket % total_batch_size) - ) % total_batch_size - num_samples_per_bucket.append(len_bucket + rem) - return buckets, num_samples_per_bucket - - def __iter__(self): - # deterministically shuffle based on epoch - g = torch.Generator() - g.manual_seed(self.epoch) - - indices = [] - if self.shuffle: - for bucket in self.buckets: - indices.append(torch.randperm(len(bucket), generator=g).tolist()) - else: - for bucket in self.buckets: - indices.append(list(range(len(bucket)))) - - batches = [] - for i in range(len(self.buckets)): - bucket = self.buckets[i] - len_bucket = len(bucket) - ids_bucket = indices[i] - num_samples_bucket = self.num_samples_per_bucket[i] - - # add extra samples to make it evenly divisible - rem = num_samples_bucket - len_bucket - ids_bucket = ( - ids_bucket - + ids_bucket * (rem // len_bucket) - + ids_bucket[: (rem % len_bucket)] - ) - - # subsample - ids_bucket = ids_bucket[self.rank :: self.num_replicas] - - # batching - for j in range(len(ids_bucket) // self.batch_size): - batch = [ - bucket[idx] - for idx in ids_bucket[ - j * self.batch_size : (j + 1) * self.batch_size - ] - ] - batches.append(batch) - - if self.shuffle: - batch_ids = torch.randperm(len(batches), generator=g).tolist() - batches = [batches[i] for i in batch_ids] - self.batches = batches - - assert len(self.batches) * self.batch_size == self.num_samples - return iter(self.batches) - - def _bisect(self, x, lo=0, hi=None): - if hi is None: - hi = len(self.boundaries) - 1 - - if hi > lo: - mid = (hi + lo) // 2 - if self.boundaries[mid] < x and x <= self.boundaries[mid + 1]: - return mid - elif x <= self.boundaries[mid]: - return self._bisect(x, lo, mid) - else: - return self._bisect(x, mid + 1, hi) - else: - return -1 - - def __len__(self): - return self.num_samples // self.batch_size diff --git a/infer/lib/train/mel_processing.py b/infer/lib/train/mel_processing.py deleted file mode 100644 index f458775bf62b79f791b419ca7ed62c550ae252d5..0000000000000000000000000000000000000000 --- a/infer/lib/train/mel_processing.py +++ /dev/null @@ -1,132 +0,0 @@ -import torch -import torch.utils.data -from librosa.filters import mel as librosa_mel_fn -import logging - -logger = logging.getLogger(__name__) - -MAX_WAV_VALUE = 32768.0 - - -def dynamic_range_compression_torch(x, C=1, clip_val=1e-5): - """ - PARAMS - ------ - C: compression factor - """ - return torch.log(torch.clamp(x, min=clip_val) * C) - - -def dynamic_range_decompression_torch(x, C=1): - """ - PARAMS - ------ - C: compression factor used to compress - """ - return torch.exp(x) / C - - -def spectral_normalize_torch(magnitudes): - return dynamic_range_compression_torch(magnitudes) - - -def spectral_de_normalize_torch(magnitudes): - return dynamic_range_decompression_torch(magnitudes) - - -# Reusable banks -mel_basis = {} -hann_window = {} - - -def spectrogram_torch(y, n_fft, sampling_rate, hop_size, win_size, center=False): - """Convert waveform into Linear-frequency Linear-amplitude spectrogram. - - Args: - y :: (B, T) - Audio waveforms - n_fft - sampling_rate - hop_size - win_size - center - Returns: - :: (B, Freq, Frame) - Linear-frequency Linear-amplitude spectrogram - """ - # Validation - if torch.min(y) < -1.07: - logger.debug("min value is %s", str(torch.min(y))) - if torch.max(y) > 1.07: - logger.debug("max value is %s", str(torch.max(y))) - - # Window - Cache if needed - global hann_window - dtype_device = str(y.dtype) + "_" + str(y.device) - wnsize_dtype_device = str(win_size) + "_" + dtype_device - if wnsize_dtype_device not in hann_window: - hann_window[wnsize_dtype_device] = torch.hann_window(win_size).to( - dtype=y.dtype, device=y.device - ) - - # Padding - y = torch.nn.functional.pad( - y.unsqueeze(1), - (int((n_fft - hop_size) / 2), int((n_fft - hop_size) / 2)), - mode="reflect", - ) - y = y.squeeze(1) - - # Complex Spectrogram :: (B, T) -> (B, Freq, Frame, RealComplex=2) - spec = torch.stft( - y, - n_fft, - hop_length=hop_size, - win_length=win_size, - window=hann_window[wnsize_dtype_device], - center=center, - pad_mode="reflect", - normalized=False, - onesided=True, - return_complex=False, - ) - - # Linear-frequency Linear-amplitude spectrogram :: (B, Freq, Frame, RealComplex=2) -> (B, Freq, Frame) - spec = torch.sqrt(spec.pow(2).sum(-1) + 1e-6) - return spec - - -def spec_to_mel_torch(spec, n_fft, num_mels, sampling_rate, fmin, fmax): - # MelBasis - Cache if needed - global mel_basis - dtype_device = str(spec.dtype) + "_" + str(spec.device) - fmax_dtype_device = str(fmax) + "_" + dtype_device - if fmax_dtype_device not in mel_basis: - mel = librosa_mel_fn( - sr=sampling_rate, n_fft=n_fft, n_mels=num_mels, fmin=fmin, fmax=fmax - ) - mel_basis[fmax_dtype_device] = torch.from_numpy(mel).to( - dtype=spec.dtype, device=spec.device - ) - - # Mel-frequency Log-amplitude spectrogram :: (B, Freq=num_mels, Frame) - melspec = torch.matmul(mel_basis[fmax_dtype_device], spec) - melspec = spectral_normalize_torch(melspec) - return melspec - - -def mel_spectrogram_torch( - y, n_fft, num_mels, sampling_rate, hop_size, win_size, fmin, fmax, center=False -): - """Convert waveform into Mel-frequency Log-amplitude spectrogram. - - Args: - y :: (B, T) - Waveforms - Returns: - melspec :: (B, Freq, Frame) - Mel-frequency Log-amplitude spectrogram - """ - # Linear-frequency Linear-amplitude spectrogram :: (B, T) -> (B, Freq, Frame) - spec = spectrogram_torch(y, n_fft, sampling_rate, hop_size, win_size, center) - - # Mel-frequency Log-amplitude spectrogram :: (B, Freq, Frame) -> (B, Freq=num_mels, Frame) - melspec = spec_to_mel_torch(spec, n_fft, num_mels, sampling_rate, fmin, fmax) - - return melspec diff --git a/infer/lib/train/process_ckpt.py b/infer/lib/train/process_ckpt.py deleted file mode 100644 index 36d359d5f853452da4e1a696a84b8457b8386c29..0000000000000000000000000000000000000000 --- a/infer/lib/train/process_ckpt.py +++ /dev/null @@ -1,261 +0,0 @@ -import os -import sys -import traceback -from collections import OrderedDict - -import torch - -from i18n import I18nAuto - -i18n = I18nAuto() - - -def savee(ckpt, sr, if_f0, name, epoch, version, hps): - try: - opt = OrderedDict() - opt["weight"] = {} - for key in ckpt.keys(): - if "enc_q" in key: - continue - opt["weight"][key] = ckpt[key].half() - opt["config"] = [ - hps.data.filter_length // 2 + 1, - 32, - hps.model.inter_channels, - hps.model.hidden_channels, - hps.model.filter_channels, - hps.model.n_heads, - hps.model.n_layers, - hps.model.kernel_size, - hps.model.p_dropout, - hps.model.resblock, - hps.model.resblock_kernel_sizes, - hps.model.resblock_dilation_sizes, - hps.model.upsample_rates, - hps.model.upsample_initial_channel, - hps.model.upsample_kernel_sizes, - hps.model.spk_embed_dim, - hps.model.gin_channels, - hps.data.sampling_rate, - ] - opt["info"] = "%sepoch" % epoch - opt["sr"] = sr - opt["f0"] = if_f0 - opt["version"] = version - torch.save(opt, "weights/%s.pth" % name) - return "Success." - except: - return traceback.format_exc() - - -def show_info(path): - try: - a = torch.load(path, map_location="cpu") - return "模型信息:%s\n采样率:%s\n模型是否输入音高引导:%s\n版本:%s" % ( - a.get("info", "None"), - a.get("sr", "None"), - a.get("f0", "None"), - a.get("version", "None"), - ) - except: - return traceback.format_exc() - - -def extract_small_model(path, name, sr, if_f0, info, version): - try: - ckpt = torch.load(path, map_location="cpu") - if "model" in ckpt: - ckpt = ckpt["model"] - opt = OrderedDict() - opt["weight"] = {} - for key in ckpt.keys(): - if "enc_q" in key: - continue - opt["weight"][key] = ckpt[key].half() - if sr == "40k": - opt["config"] = [ - 1025, - 32, - 192, - 192, - 768, - 2, - 6, - 3, - 0, - "1", - [3, 7, 11], - [[1, 3, 5], [1, 3, 5], [1, 3, 5]], - [10, 10, 2, 2], - 512, - [16, 16, 4, 4], - 109, - 256, - 40000, - ] - elif sr == "48k": - if version == "v1": - opt["config"] = [ - 1025, - 32, - 192, - 192, - 768, - 2, - 6, - 3, - 0, - "1", - [3, 7, 11], - [[1, 3, 5], [1, 3, 5], [1, 3, 5]], - [10, 6, 2, 2, 2], - 512, - [16, 16, 4, 4, 4], - 109, - 256, - 48000, - ] - else: - opt["config"] = [ - 1025, - 32, - 192, - 192, - 768, - 2, - 6, - 3, - 0, - "1", - [3, 7, 11], - [[1, 3, 5], [1, 3, 5], [1, 3, 5]], - [12, 10, 2, 2], - 512, - [24, 20, 4, 4], - 109, - 256, - 48000, - ] - elif sr == "32k": - if version == "v1": - opt["config"] = [ - 513, - 32, - 192, - 192, - 768, - 2, - 6, - 3, - 0, - "1", - [3, 7, 11], - [[1, 3, 5], [1, 3, 5], [1, 3, 5]], - [10, 4, 2, 2, 2], - 512, - [16, 16, 4, 4, 4], - 109, - 256, - 32000, - ] - else: - opt["config"] = [ - 513, - 32, - 192, - 192, - 768, - 2, - 6, - 3, - 0, - "1", - [3, 7, 11], - [[1, 3, 5], [1, 3, 5], [1, 3, 5]], - [10, 8, 2, 2], - 512, - [20, 16, 4, 4], - 109, - 256, - 32000, - ] - if info == "": - info = "Extracted model." - opt["info"] = info - opt["version"] = version - opt["sr"] = sr - opt["f0"] = int(if_f0) - torch.save(opt, "weights/%s.pth" % name) - return "Success." - except: - return traceback.format_exc() - - -def change_info(path, info, name): - try: - ckpt = torch.load(path, map_location="cpu") - ckpt["info"] = info - if name == "": - name = os.path.basename(path) - torch.save(ckpt, "weights/%s" % name) - return "Success." - except: - return traceback.format_exc() - - -def merge(path1, path2, alpha1, sr, f0, info, name, version): - try: - - def extract(ckpt): - a = ckpt["model"] - opt = OrderedDict() - opt["weight"] = {} - for key in a.keys(): - if "enc_q" in key: - continue - opt["weight"][key] = a[key] - return opt - - ckpt1 = torch.load(path1, map_location="cpu") - ckpt2 = torch.load(path2, map_location="cpu") - cfg = ckpt1["config"] - if "model" in ckpt1: - ckpt1 = extract(ckpt1) - else: - ckpt1 = ckpt1["weight"] - if "model" in ckpt2: - ckpt2 = extract(ckpt2) - else: - ckpt2 = ckpt2["weight"] - if sorted(list(ckpt1.keys())) != sorted(list(ckpt2.keys())): - return "Fail to merge the models. The model architectures are not the same." - opt = OrderedDict() - opt["weight"] = {} - for key in ckpt1.keys(): - # try: - if key == "emb_g.weight" and ckpt1[key].shape != ckpt2[key].shape: - min_shape0 = min(ckpt1[key].shape[0], ckpt2[key].shape[0]) - opt["weight"][key] = ( - alpha1 * (ckpt1[key][:min_shape0].float()) - + (1 - alpha1) * (ckpt2[key][:min_shape0].float()) - ).half() - else: - opt["weight"][key] = ( - alpha1 * (ckpt1[key].float()) + (1 - alpha1) * (ckpt2[key].float()) - ).half() - # except: - # pdb.set_trace() - opt["config"] = cfg - """ - if(sr=="40k"):opt["config"] = [1025, 32, 192, 192, 768, 2, 6, 3, 0, "1", [3, 7, 11], [[1, 3, 5], [1, 3, 5], [1, 3, 5]], [10, 10, 2, 2], 512, [16, 16, 4, 4,4], 109, 256, 40000] - elif(sr=="48k"):opt["config"] = [1025, 32, 192, 192, 768, 2, 6, 3, 0, "1", [3, 7, 11], [[1, 3, 5], [1, 3, 5], [1, 3, 5]], [10,6,2,2,2], 512, [16, 16, 4, 4], 109, 256, 48000] - elif(sr=="32k"):opt["config"] = [513, 32, 192, 192, 768, 2, 6, 3, 0, "1", [3, 7, 11], [[1, 3, 5], [1, 3, 5], [1, 3, 5]], [10, 4, 2, 2, 2], 512, [16, 16, 4, 4,4], 109, 256, 32000] - """ - opt["sr"] = sr - opt["f0"] = 1 if f0 == i18n("是") else 0 - opt["version"] = version - opt["info"] = info - torch.save(opt, "weights/%s.pth" % name) - return "Success." - except: - return traceback.format_exc() diff --git a/infer/lib/train/utils.py b/infer/lib/train/utils.py deleted file mode 100644 index dd965fc4dd2af09e445a7f625f2681460874da7a..0000000000000000000000000000000000000000 --- a/infer/lib/train/utils.py +++ /dev/null @@ -1,478 +0,0 @@ -import argparse -import glob -import json -import logging -import os -import subprocess -import sys -import shutil - -import numpy as np -import torch -from scipy.io.wavfile import read - -MATPLOTLIB_FLAG = False - -logging.basicConfig(stream=sys.stdout, level=logging.DEBUG) -logger = logging - - -def load_checkpoint_d(checkpoint_path, combd, sbd, optimizer=None, load_opt=1): - assert os.path.isfile(checkpoint_path) - checkpoint_dict = torch.load(checkpoint_path, map_location="cpu") - - ################## - def go(model, bkey): - saved_state_dict = checkpoint_dict[bkey] - if hasattr(model, "module"): - state_dict = model.module.state_dict() - else: - state_dict = model.state_dict() - new_state_dict = {} - for k, v in state_dict.items(): # 模型需要的shape - try: - new_state_dict[k] = saved_state_dict[k] - if saved_state_dict[k].shape != state_dict[k].shape: - logger.warn( - "shape-%s-mismatch. need: %s, get: %s", - k, - state_dict[k].shape, - saved_state_dict[k].shape, - ) # - raise KeyError - except: - # logger.info(traceback.format_exc()) - logger.info("%s is not in the checkpoint", k) # pretrain缺失的 - new_state_dict[k] = v # 模型自带的随机值 - if hasattr(model, "module"): - model.module.load_state_dict(new_state_dict, strict=False) - else: - model.load_state_dict(new_state_dict, strict=False) - return model - - go(combd, "combd") - model = go(sbd, "sbd") - ############# - logger.info("Loaded model weights") - - iteration = checkpoint_dict["iteration"] - learning_rate = checkpoint_dict["learning_rate"] - if ( - optimizer is not None and load_opt == 1 - ): ###加载不了,如果是空的的话,重新初始化,可能还会影响lr时间表的更新,因此在train文件最外围catch - # try: - optimizer.load_state_dict(checkpoint_dict["optimizer"]) - # except: - # traceback.print_exc() - logger.info("Loaded checkpoint '{}' (epoch {})".format(checkpoint_path, iteration)) - return model, optimizer, learning_rate, iteration - - -# def load_checkpoint(checkpoint_path, model, optimizer=None): -# assert os.path.isfile(checkpoint_path) -# checkpoint_dict = torch.load(checkpoint_path, map_location='cpu') -# iteration = checkpoint_dict['iteration'] -# learning_rate = checkpoint_dict['learning_rate'] -# if optimizer is not None: -# optimizer.load_state_dict(checkpoint_dict['optimizer']) -# # print(1111) -# saved_state_dict = checkpoint_dict['model'] -# # print(1111) -# -# if hasattr(model, 'module'): -# state_dict = model.module.state_dict() -# else: -# state_dict = model.state_dict() -# new_state_dict= {} -# for k, v in state_dict.items(): -# try: -# new_state_dict[k] = saved_state_dict[k] -# except: -# logger.info("%s is not in the checkpoint" % k) -# new_state_dict[k] = v -# if hasattr(model, 'module'): -# model.module.load_state_dict(new_state_dict) -# else: -# model.load_state_dict(new_state_dict) -# logger.info("Loaded checkpoint '{}' (epoch {})" .format( -# checkpoint_path, iteration)) -# return model, optimizer, learning_rate, iteration -def load_checkpoint(checkpoint_path, model, optimizer=None, load_opt=1): - assert os.path.isfile(checkpoint_path) - checkpoint_dict = torch.load(checkpoint_path, map_location="cpu") - - saved_state_dict = checkpoint_dict["model"] - if hasattr(model, "module"): - state_dict = model.module.state_dict() - else: - state_dict = model.state_dict() - new_state_dict = {} - for k, v in state_dict.items(): # 模型需要的shape - try: - new_state_dict[k] = saved_state_dict[k] - if saved_state_dict[k].shape != state_dict[k].shape: - logger.warn( - "shape-%s-mismatch|need-%s|get-%s", - k, - state_dict[k].shape, - saved_state_dict[k].shape, - ) # - raise KeyError - except: - # logger.info(traceback.format_exc()) - logger.info("%s is not in the checkpoint", k) # pretrain缺失的 - new_state_dict[k] = v # 模型自带的随机值 - if hasattr(model, "module"): - model.module.load_state_dict(new_state_dict, strict=False) - else: - model.load_state_dict(new_state_dict, strict=False) - logger.info("Loaded model weights") - - iteration = checkpoint_dict["iteration"] - learning_rate = checkpoint_dict["learning_rate"] - if ( - optimizer is not None and load_opt == 1 - ): ###加载不了,如果是空的的话,重新初始化,可能还会影响lr时间表的更新,因此在train文件最外围catch - # try: - optimizer.load_state_dict(checkpoint_dict["optimizer"]) - # except: - # traceback.print_exc() - logger.info("Loaded checkpoint '{}' (epoch {})".format(checkpoint_path, iteration)) - return model, optimizer, learning_rate, iteration - - -def save_checkpoint(model, optimizer, learning_rate, iteration, checkpoint_path): - logger.info( - "Saving model and optimizer state at epoch {} to {}".format( - iteration, checkpoint_path - ) - ) - if hasattr(model, "module"): - state_dict = model.module.state_dict() - else: - state_dict = model.state_dict() - torch.save( - { - "model": state_dict, - "iteration": iteration, - "optimizer": optimizer.state_dict(), - "learning_rate": learning_rate, - }, - checkpoint_path, - ) - - -def save_checkpoint_d(combd, sbd, optimizer, learning_rate, iteration, checkpoint_path): - logger.info( - "Saving model and optimizer state at epoch {} to {}".format( - iteration, checkpoint_path - ) - ) - if hasattr(combd, "module"): - state_dict_combd = combd.module.state_dict() - else: - state_dict_combd = combd.state_dict() - if hasattr(sbd, "module"): - state_dict_sbd = sbd.module.state_dict() - else: - state_dict_sbd = sbd.state_dict() - torch.save( - { - "combd": state_dict_combd, - "sbd": state_dict_sbd, - "iteration": iteration, - "optimizer": optimizer.state_dict(), - "learning_rate": learning_rate, - }, - checkpoint_path, - ) - - -def summarize( - writer, - global_step, - scalars={}, - histograms={}, - images={}, - audios={}, - audio_sampling_rate=22050, -): - for k, v in scalars.items(): - writer.add_scalar(k, v, global_step) - for k, v in histograms.items(): - writer.add_histogram(k, v, global_step) - for k, v in images.items(): - writer.add_image(k, v, global_step, dataformats="HWC") - for k, v in audios.items(): - writer.add_audio(k, v, global_step, audio_sampling_rate) - - -def latest_checkpoint_path(dir_path, regex="G_*.pth"): - f_list = glob.glob(os.path.join(dir_path, regex)) - f_list.sort(key=lambda f: int("".join(filter(str.isdigit, f)))) - x = f_list[-1] - logger.debug(x) - return x - - -def plot_spectrogram_to_numpy(spectrogram): - global MATPLOTLIB_FLAG - if not MATPLOTLIB_FLAG: - import matplotlib - - matplotlib.use("Agg") - MATPLOTLIB_FLAG = True - mpl_logger = logging.getLogger("matplotlib") - mpl_logger.setLevel(logging.WARNING) - import matplotlib.pylab as plt - import numpy as np - - fig, ax = plt.subplots(figsize=(10, 2)) - im = ax.imshow(spectrogram, aspect="auto", origin="lower", interpolation="none") - plt.colorbar(im, ax=ax) - plt.xlabel("Frames") - plt.ylabel("Channels") - plt.tight_layout() - - fig.canvas.draw() - data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep="") - data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,)) - plt.close() - return data - - -def plot_alignment_to_numpy(alignment, info=None): - global MATPLOTLIB_FLAG - if not MATPLOTLIB_FLAG: - import matplotlib - - matplotlib.use("Agg") - MATPLOTLIB_FLAG = True - mpl_logger = logging.getLogger("matplotlib") - mpl_logger.setLevel(logging.WARNING) - import matplotlib.pylab as plt - import numpy as np - - fig, ax = plt.subplots(figsize=(6, 4)) - im = ax.imshow( - alignment.transpose(), aspect="auto", origin="lower", interpolation="none" - ) - fig.colorbar(im, ax=ax) - xlabel = "Decoder timestep" - if info is not None: - xlabel += "\n\n" + info - plt.xlabel(xlabel) - plt.ylabel("Encoder timestep") - plt.tight_layout() - - fig.canvas.draw() - data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep="") - data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,)) - plt.close() - return data - - -def load_wav_to_torch(full_path): - sampling_rate, data = read(full_path) - return torch.FloatTensor(data.astype(np.float32)), sampling_rate - - -def load_filepaths_and_text(filename, split="|"): - with open(filename, encoding="utf-8") as f: - filepaths_and_text = [line.strip().split(split) for line in f] - return filepaths_and_text - - -def get_hparams(init=True): - """ - todo: - 结尾七人组: - 保存频率、总epoch done - bs done - pretrainG、pretrainD done - 卡号:os.en["CUDA_VISIBLE_DEVICES"] done - if_latest done - 模型:if_f0 done - 采样率:自动选择config done - 是否缓存数据集进GPU:if_cache_data_in_gpu done - - -m: - 自动决定training_files路径,改掉train_nsf_load_pretrain.py里的hps.data.training_files done - -c不要了 - """ - parser = argparse.ArgumentParser() - parser.add_argument( - "-se", - "--save_every_epoch", - type=int, - required=True, - help="checkpoint save frequency (epoch)", - ) - parser.add_argument( - "-te", "--total_epoch", type=int, required=True, help="total_epoch" - ) - parser.add_argument( - "-pg", "--pretrainG", type=str, default="", help="Pretrained Discriminator path" - ) - parser.add_argument( - "-pd", "--pretrainD", type=str, default="", help="Pretrained Generator path" - ) - parser.add_argument("-g", "--gpus", type=str, default="0", help="split by -") - parser.add_argument( - "-bs", "--batch_size", type=int, required=True, help="batch size" - ) - parser.add_argument( - "-e", "--experiment_dir", type=str, required=True, help="experiment dir" - ) # -m - parser.add_argument( - "-sr", "--sample_rate", type=str, required=True, help="sample rate, 32k/40k/48k" - ) - parser.add_argument( - "-sw", - "--save_every_weights", - type=str, - default="0", - help="save the extracted model in weights directory when saving checkpoints", - ) - parser.add_argument( - "-v", "--version", type=str, required=True, help="model version" - ) - parser.add_argument( - "-f0", - "--if_f0", - type=int, - required=True, - help="use f0 as one of the inputs of the model, 1 or 0", - ) - parser.add_argument( - "-l", - "--if_latest", - type=int, - required=True, - help="if only save the latest G/D pth file, 1 or 0", - ) - parser.add_argument( - "-c", - "--if_cache_data_in_gpu", - type=int, - required=True, - help="if caching the dataset in GPU memory, 1 or 0", - ) - - args = parser.parse_args() - name = args.experiment_dir - experiment_dir = os.path.join("./logs", args.experiment_dir) - - config_save_path = os.path.join(experiment_dir, "config.json") - with open(config_save_path, "r") as f: - config = json.load(f) - - hparams = HParams(**config) - hparams.model_dir = hparams.experiment_dir = experiment_dir - hparams.save_every_epoch = args.save_every_epoch - hparams.name = name - hparams.total_epoch = args.total_epoch - hparams.pretrainG = args.pretrainG - hparams.pretrainD = args.pretrainD - hparams.version = args.version - hparams.gpus = args.gpus - hparams.train.batch_size = args.batch_size - hparams.sample_rate = args.sample_rate - hparams.if_f0 = args.if_f0 - hparams.if_latest = args.if_latest - hparams.save_every_weights = args.save_every_weights - hparams.if_cache_data_in_gpu = args.if_cache_data_in_gpu - hparams.data.training_files = "%s/filelist.txt" % experiment_dir - return hparams - - -def get_hparams_from_dir(model_dir): - config_save_path = os.path.join(model_dir, "config.json") - with open(config_save_path, "r") as f: - data = f.read() - config = json.loads(data) - - hparams = HParams(**config) - hparams.model_dir = model_dir - return hparams - - -def get_hparams_from_file(config_path): - with open(config_path, "r") as f: - data = f.read() - config = json.loads(data) - - hparams = HParams(**config) - return hparams - - -def check_git_hash(model_dir): - source_dir = os.path.dirname(os.path.realpath(__file__)) - if not os.path.exists(os.path.join(source_dir, ".git")): - logger.warn( - "{} is not a git repository, therefore hash value comparison will be ignored.".format( - source_dir - ) - ) - return - - cur_hash = subprocess.getoutput("git rev-parse HEAD") - - path = os.path.join(model_dir, "githash") - if os.path.exists(path): - saved_hash = open(path).read() - if saved_hash != cur_hash: - logger.warn( - "git hash values are different. {}(saved) != {}(current)".format( - saved_hash[:8], cur_hash[:8] - ) - ) - else: - open(path, "w").write(cur_hash) - - -def get_logger(model_dir, filename="train.log"): - global logger - logger = logging.getLogger(os.path.basename(model_dir)) - logger.setLevel(logging.DEBUG) - - formatter = logging.Formatter("%(asctime)s\t%(name)s\t%(levelname)s\t%(message)s") - if not os.path.exists(model_dir): - os.makedirs(model_dir) - h = logging.FileHandler(os.path.join(model_dir, filename)) - h.setLevel(logging.DEBUG) - h.setFormatter(formatter) - logger.addHandler(h) - return logger - - -class HParams: - def __init__(self, **kwargs): - for k, v in kwargs.items(): - if type(v) == dict: - v = HParams(**v) - self[k] = v - - def keys(self): - return self.__dict__.keys() - - def items(self): - return self.__dict__.items() - - def values(self): - return self.__dict__.values() - - def __len__(self): - return len(self.__dict__) - - def __getitem__(self, key): - return getattr(self, key) - - def __setitem__(self, key, value): - return setattr(self, key, value) - - def __contains__(self, key): - return key in self.__dict__ - - def __repr__(self): - return self.__dict__.__repr__() diff --git a/infer/lib/uvr5_pack/lib_v5/dataset.py b/infer/lib/uvr5_pack/lib_v5/dataset.py deleted file mode 100644 index cfd01a174978d97180a897e40cb59ecadec1d12e..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/dataset.py +++ /dev/null @@ -1,183 +0,0 @@ -import os -import random - -import numpy as np -import torch -import torch.utils.data -from tqdm import tqdm - -from . import spec_utils - - -class VocalRemoverValidationSet(torch.utils.data.Dataset): - def __init__(self, patch_list): - self.patch_list = patch_list - - def __len__(self): - return len(self.patch_list) - - def __getitem__(self, idx): - path = self.patch_list[idx] - data = np.load(path) - - X, y = data["X"], data["y"] - - X_mag = np.abs(X) - y_mag = np.abs(y) - - return X_mag, y_mag - - -def make_pair(mix_dir, inst_dir): - input_exts = [".wav", ".m4a", ".mp3", ".mp4", ".flac"] - - X_list = sorted( - [ - os.path.join(mix_dir, fname) - for fname in os.listdir(mix_dir) - if os.path.splitext(fname)[1] in input_exts - ] - ) - y_list = sorted( - [ - os.path.join(inst_dir, fname) - for fname in os.listdir(inst_dir) - if os.path.splitext(fname)[1] in input_exts - ] - ) - - filelist = list(zip(X_list, y_list)) - - return filelist - - -def train_val_split(dataset_dir, split_mode, val_rate, val_filelist): - if split_mode == "random": - filelist = make_pair( - os.path.join(dataset_dir, "mixtures"), - os.path.join(dataset_dir, "instruments"), - ) - - random.shuffle(filelist) - - if len(val_filelist) == 0: - val_size = int(len(filelist) * val_rate) - train_filelist = filelist[:-val_size] - val_filelist = filelist[-val_size:] - else: - train_filelist = [ - pair for pair in filelist if list(pair) not in val_filelist - ] - elif split_mode == "subdirs": - if len(val_filelist) != 0: - raise ValueError( - "The `val_filelist` option is not available in `subdirs` mode" - ) - - train_filelist = make_pair( - os.path.join(dataset_dir, "training/mixtures"), - os.path.join(dataset_dir, "training/instruments"), - ) - - val_filelist = make_pair( - os.path.join(dataset_dir, "validation/mixtures"), - os.path.join(dataset_dir, "validation/instruments"), - ) - - return train_filelist, val_filelist - - -def augment(X, y, reduction_rate, reduction_mask, mixup_rate, mixup_alpha): - perm = np.random.permutation(len(X)) - for i, idx in enumerate(tqdm(perm)): - if np.random.uniform() < reduction_rate: - y[idx] = spec_utils.reduce_vocal_aggressively( - X[idx], y[idx], reduction_mask - ) - - if np.random.uniform() < 0.5: - # swap channel - X[idx] = X[idx, ::-1] - y[idx] = y[idx, ::-1] - if np.random.uniform() < 0.02: - # mono - X[idx] = X[idx].mean(axis=0, keepdims=True) - y[idx] = y[idx].mean(axis=0, keepdims=True) - if np.random.uniform() < 0.02: - # inst - X[idx] = y[idx] - - if np.random.uniform() < mixup_rate and i < len(perm) - 1: - lam = np.random.beta(mixup_alpha, mixup_alpha) - X[idx] = lam * X[idx] + (1 - lam) * X[perm[i + 1]] - y[idx] = lam * y[idx] + (1 - lam) * y[perm[i + 1]] - - return X, y - - -def make_padding(width, cropsize, offset): - left = offset - roi_size = cropsize - left * 2 - if roi_size == 0: - roi_size = cropsize - right = roi_size - (width % roi_size) + left - - return left, right, roi_size - - -def make_training_set(filelist, cropsize, patches, sr, hop_length, n_fft, offset): - len_dataset = patches * len(filelist) - - X_dataset = np.zeros((len_dataset, 2, n_fft // 2 + 1, cropsize), dtype=np.complex64) - y_dataset = np.zeros((len_dataset, 2, n_fft // 2 + 1, cropsize), dtype=np.complex64) - - for i, (X_path, y_path) in enumerate(tqdm(filelist)): - X, y = spec_utils.cache_or_load(X_path, y_path, sr, hop_length, n_fft) - coef = np.max([np.abs(X).max(), np.abs(y).max()]) - X, y = X / coef, y / coef - - l, r, roi_size = make_padding(X.shape[2], cropsize, offset) - X_pad = np.pad(X, ((0, 0), (0, 0), (l, r)), mode="constant") - y_pad = np.pad(y, ((0, 0), (0, 0), (l, r)), mode="constant") - - starts = np.random.randint(0, X_pad.shape[2] - cropsize, patches) - ends = starts + cropsize - for j in range(patches): - idx = i * patches + j - X_dataset[idx] = X_pad[:, :, starts[j] : ends[j]] - y_dataset[idx] = y_pad[:, :, starts[j] : ends[j]] - - return X_dataset, y_dataset - - -def make_validation_set(filelist, cropsize, sr, hop_length, n_fft, offset): - patch_list = [] - patch_dir = "cs{}_sr{}_hl{}_nf{}_of{}".format( - cropsize, sr, hop_length, n_fft, offset - ) - os.makedirs(patch_dir, exist_ok=True) - - for i, (X_path, y_path) in enumerate(tqdm(filelist)): - basename = os.path.splitext(os.path.basename(X_path))[0] - - X, y = spec_utils.cache_or_load(X_path, y_path, sr, hop_length, n_fft) - coef = np.max([np.abs(X).max(), np.abs(y).max()]) - X, y = X / coef, y / coef - - l, r, roi_size = make_padding(X.shape[2], cropsize, offset) - X_pad = np.pad(X, ((0, 0), (0, 0), (l, r)), mode="constant") - y_pad = np.pad(y, ((0, 0), (0, 0), (l, r)), mode="constant") - - len_dataset = int(np.ceil(X.shape[2] / roi_size)) - for j in range(len_dataset): - outpath = os.path.join(patch_dir, "{}_p{}.npz".format(basename, j)) - start = j * roi_size - if not os.path.exists(outpath): - np.savez( - outpath, - X=X_pad[:, :, start : start + cropsize], - y=y_pad[:, :, start : start + cropsize], - ) - patch_list.append(outpath) - - return VocalRemoverValidationSet(patch_list) diff --git a/infer/lib/uvr5_pack/lib_v5/layers.py b/infer/lib/uvr5_pack/lib_v5/layers.py deleted file mode 100644 index 4fc1b5cb85a3327f60cbb9f5deffbeeaaac516ad..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/layers.py +++ /dev/null @@ -1,118 +0,0 @@ -import torch -import torch.nn.functional as F -from torch import nn - -from . import spec_utils - - -class Conv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(Conv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nout, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - bias=False, - ), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class SeperableConv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(SeperableConv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nin, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - groups=nin, - bias=False, - ), - nn.Conv2d(nin, nout, kernel_size=1, bias=False), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class Encoder(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): - super(Encoder, self).__init__() - self.conv1 = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.conv2 = Conv2DBNActiv(nout, nout, ksize, stride, pad, activ=activ) - - def __call__(self, x): - skip = self.conv1(x) - h = self.conv2(skip) - - return h, skip - - -class Decoder(nn.Module): - def __init__( - self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.ReLU, dropout=False - ): - super(Decoder, self).__init__() - self.conv = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.dropout = nn.Dropout2d(0.1) if dropout else None - - def __call__(self, x, skip=None): - x = F.interpolate(x, scale_factor=2, mode="bilinear", align_corners=True) - if skip is not None: - skip = spec_utils.crop_center(skip, x) - x = torch.cat([x, skip], dim=1) - h = self.conv(x) - - if self.dropout is not None: - h = self.dropout(h) - - return h - - -class ASPPModule(nn.Module): - def __init__(self, nin, nout, dilations=(4, 8, 16), activ=nn.ReLU): - super(ASPPModule, self).__init__() - self.conv1 = nn.Sequential( - nn.AdaptiveAvgPool2d((1, None)), - Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ), - ) - self.conv2 = Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ) - self.conv3 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[0], dilations[0], activ=activ - ) - self.conv4 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[1], dilations[1], activ=activ - ) - self.conv5 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.bottleneck = nn.Sequential( - Conv2DBNActiv(nin * 5, nout, 1, 1, 0, activ=activ), nn.Dropout2d(0.1) - ) - - def forward(self, x): - _, _, h, w = x.size() - feat1 = F.interpolate( - self.conv1(x), size=(h, w), mode="bilinear", align_corners=True - ) - feat2 = self.conv2(x) - feat3 = self.conv3(x) - feat4 = self.conv4(x) - feat5 = self.conv5(x) - out = torch.cat((feat1, feat2, feat3, feat4, feat5), dim=1) - bottle = self.bottleneck(out) - return bottle diff --git a/infer/lib/uvr5_pack/lib_v5/layers_123812KB .py b/infer/lib/uvr5_pack/lib_v5/layers_123812KB .py deleted file mode 100644 index 4fc1b5cb85a3327f60cbb9f5deffbeeaaac516ad..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/layers_123812KB .py +++ /dev/null @@ -1,118 +0,0 @@ -import torch -import torch.nn.functional as F -from torch import nn - -from . import spec_utils - - -class Conv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(Conv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nout, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - bias=False, - ), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class SeperableConv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(SeperableConv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nin, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - groups=nin, - bias=False, - ), - nn.Conv2d(nin, nout, kernel_size=1, bias=False), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class Encoder(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): - super(Encoder, self).__init__() - self.conv1 = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.conv2 = Conv2DBNActiv(nout, nout, ksize, stride, pad, activ=activ) - - def __call__(self, x): - skip = self.conv1(x) - h = self.conv2(skip) - - return h, skip - - -class Decoder(nn.Module): - def __init__( - self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.ReLU, dropout=False - ): - super(Decoder, self).__init__() - self.conv = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.dropout = nn.Dropout2d(0.1) if dropout else None - - def __call__(self, x, skip=None): - x = F.interpolate(x, scale_factor=2, mode="bilinear", align_corners=True) - if skip is not None: - skip = spec_utils.crop_center(skip, x) - x = torch.cat([x, skip], dim=1) - h = self.conv(x) - - if self.dropout is not None: - h = self.dropout(h) - - return h - - -class ASPPModule(nn.Module): - def __init__(self, nin, nout, dilations=(4, 8, 16), activ=nn.ReLU): - super(ASPPModule, self).__init__() - self.conv1 = nn.Sequential( - nn.AdaptiveAvgPool2d((1, None)), - Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ), - ) - self.conv2 = Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ) - self.conv3 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[0], dilations[0], activ=activ - ) - self.conv4 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[1], dilations[1], activ=activ - ) - self.conv5 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.bottleneck = nn.Sequential( - Conv2DBNActiv(nin * 5, nout, 1, 1, 0, activ=activ), nn.Dropout2d(0.1) - ) - - def forward(self, x): - _, _, h, w = x.size() - feat1 = F.interpolate( - self.conv1(x), size=(h, w), mode="bilinear", align_corners=True - ) - feat2 = self.conv2(x) - feat3 = self.conv3(x) - feat4 = self.conv4(x) - feat5 = self.conv5(x) - out = torch.cat((feat1, feat2, feat3, feat4, feat5), dim=1) - bottle = self.bottleneck(out) - return bottle diff --git a/infer/lib/uvr5_pack/lib_v5/layers_123821KB.py b/infer/lib/uvr5_pack/lib_v5/layers_123821KB.py deleted file mode 100644 index 4fc1b5cb85a3327f60cbb9f5deffbeeaaac516ad..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/layers_123821KB.py +++ /dev/null @@ -1,118 +0,0 @@ -import torch -import torch.nn.functional as F -from torch import nn - -from . import spec_utils - - -class Conv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(Conv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nout, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - bias=False, - ), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class SeperableConv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(SeperableConv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nin, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - groups=nin, - bias=False, - ), - nn.Conv2d(nin, nout, kernel_size=1, bias=False), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class Encoder(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): - super(Encoder, self).__init__() - self.conv1 = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.conv2 = Conv2DBNActiv(nout, nout, ksize, stride, pad, activ=activ) - - def __call__(self, x): - skip = self.conv1(x) - h = self.conv2(skip) - - return h, skip - - -class Decoder(nn.Module): - def __init__( - self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.ReLU, dropout=False - ): - super(Decoder, self).__init__() - self.conv = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.dropout = nn.Dropout2d(0.1) if dropout else None - - def __call__(self, x, skip=None): - x = F.interpolate(x, scale_factor=2, mode="bilinear", align_corners=True) - if skip is not None: - skip = spec_utils.crop_center(skip, x) - x = torch.cat([x, skip], dim=1) - h = self.conv(x) - - if self.dropout is not None: - h = self.dropout(h) - - return h - - -class ASPPModule(nn.Module): - def __init__(self, nin, nout, dilations=(4, 8, 16), activ=nn.ReLU): - super(ASPPModule, self).__init__() - self.conv1 = nn.Sequential( - nn.AdaptiveAvgPool2d((1, None)), - Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ), - ) - self.conv2 = Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ) - self.conv3 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[0], dilations[0], activ=activ - ) - self.conv4 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[1], dilations[1], activ=activ - ) - self.conv5 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.bottleneck = nn.Sequential( - Conv2DBNActiv(nin * 5, nout, 1, 1, 0, activ=activ), nn.Dropout2d(0.1) - ) - - def forward(self, x): - _, _, h, w = x.size() - feat1 = F.interpolate( - self.conv1(x), size=(h, w), mode="bilinear", align_corners=True - ) - feat2 = self.conv2(x) - feat3 = self.conv3(x) - feat4 = self.conv4(x) - feat5 = self.conv5(x) - out = torch.cat((feat1, feat2, feat3, feat4, feat5), dim=1) - bottle = self.bottleneck(out) - return bottle diff --git a/infer/lib/uvr5_pack/lib_v5/layers_33966KB.py b/infer/lib/uvr5_pack/lib_v5/layers_33966KB.py deleted file mode 100644 index 9b127bc6427f5c60c8cf85603a3d8a093c3501c4..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/layers_33966KB.py +++ /dev/null @@ -1,126 +0,0 @@ -import torch -import torch.nn.functional as F -from torch import nn - -from . import spec_utils - - -class Conv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(Conv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nout, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - bias=False, - ), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class SeperableConv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(SeperableConv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nin, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - groups=nin, - bias=False, - ), - nn.Conv2d(nin, nout, kernel_size=1, bias=False), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class Encoder(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): - super(Encoder, self).__init__() - self.conv1 = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.conv2 = Conv2DBNActiv(nout, nout, ksize, stride, pad, activ=activ) - - def __call__(self, x): - skip = self.conv1(x) - h = self.conv2(skip) - - return h, skip - - -class Decoder(nn.Module): - def __init__( - self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.ReLU, dropout=False - ): - super(Decoder, self).__init__() - self.conv = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.dropout = nn.Dropout2d(0.1) if dropout else None - - def __call__(self, x, skip=None): - x = F.interpolate(x, scale_factor=2, mode="bilinear", align_corners=True) - if skip is not None: - skip = spec_utils.crop_center(skip, x) - x = torch.cat([x, skip], dim=1) - h = self.conv(x) - - if self.dropout is not None: - h = self.dropout(h) - - return h - - -class ASPPModule(nn.Module): - def __init__(self, nin, nout, dilations=(4, 8, 16, 32, 64), activ=nn.ReLU): - super(ASPPModule, self).__init__() - self.conv1 = nn.Sequential( - nn.AdaptiveAvgPool2d((1, None)), - Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ), - ) - self.conv2 = Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ) - self.conv3 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[0], dilations[0], activ=activ - ) - self.conv4 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[1], dilations[1], activ=activ - ) - self.conv5 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.conv6 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.conv7 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.bottleneck = nn.Sequential( - Conv2DBNActiv(nin * 7, nout, 1, 1, 0, activ=activ), nn.Dropout2d(0.1) - ) - - def forward(self, x): - _, _, h, w = x.size() - feat1 = F.interpolate( - self.conv1(x), size=(h, w), mode="bilinear", align_corners=True - ) - feat2 = self.conv2(x) - feat3 = self.conv3(x) - feat4 = self.conv4(x) - feat5 = self.conv5(x) - feat6 = self.conv6(x) - feat7 = self.conv7(x) - out = torch.cat((feat1, feat2, feat3, feat4, feat5, feat6, feat7), dim=1) - bottle = self.bottleneck(out) - return bottle diff --git a/infer/lib/uvr5_pack/lib_v5/layers_537227KB.py b/infer/lib/uvr5_pack/lib_v5/layers_537227KB.py deleted file mode 100644 index 9b127bc6427f5c60c8cf85603a3d8a093c3501c4..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/layers_537227KB.py +++ /dev/null @@ -1,126 +0,0 @@ -import torch -import torch.nn.functional as F -from torch import nn - -from . import spec_utils - - -class Conv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(Conv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nout, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - bias=False, - ), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class SeperableConv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(SeperableConv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nin, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - groups=nin, - bias=False, - ), - nn.Conv2d(nin, nout, kernel_size=1, bias=False), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class Encoder(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): - super(Encoder, self).__init__() - self.conv1 = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.conv2 = Conv2DBNActiv(nout, nout, ksize, stride, pad, activ=activ) - - def __call__(self, x): - skip = self.conv1(x) - h = self.conv2(skip) - - return h, skip - - -class Decoder(nn.Module): - def __init__( - self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.ReLU, dropout=False - ): - super(Decoder, self).__init__() - self.conv = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.dropout = nn.Dropout2d(0.1) if dropout else None - - def __call__(self, x, skip=None): - x = F.interpolate(x, scale_factor=2, mode="bilinear", align_corners=True) - if skip is not None: - skip = spec_utils.crop_center(skip, x) - x = torch.cat([x, skip], dim=1) - h = self.conv(x) - - if self.dropout is not None: - h = self.dropout(h) - - return h - - -class ASPPModule(nn.Module): - def __init__(self, nin, nout, dilations=(4, 8, 16, 32, 64), activ=nn.ReLU): - super(ASPPModule, self).__init__() - self.conv1 = nn.Sequential( - nn.AdaptiveAvgPool2d((1, None)), - Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ), - ) - self.conv2 = Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ) - self.conv3 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[0], dilations[0], activ=activ - ) - self.conv4 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[1], dilations[1], activ=activ - ) - self.conv5 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.conv6 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.conv7 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.bottleneck = nn.Sequential( - Conv2DBNActiv(nin * 7, nout, 1, 1, 0, activ=activ), nn.Dropout2d(0.1) - ) - - def forward(self, x): - _, _, h, w = x.size() - feat1 = F.interpolate( - self.conv1(x), size=(h, w), mode="bilinear", align_corners=True - ) - feat2 = self.conv2(x) - feat3 = self.conv3(x) - feat4 = self.conv4(x) - feat5 = self.conv5(x) - feat6 = self.conv6(x) - feat7 = self.conv7(x) - out = torch.cat((feat1, feat2, feat3, feat4, feat5, feat6, feat7), dim=1) - bottle = self.bottleneck(out) - return bottle diff --git a/infer/lib/uvr5_pack/lib_v5/layers_537238KB.py b/infer/lib/uvr5_pack/lib_v5/layers_537238KB.py deleted file mode 100644 index 9b127bc6427f5c60c8cf85603a3d8a093c3501c4..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/layers_537238KB.py +++ /dev/null @@ -1,126 +0,0 @@ -import torch -import torch.nn.functional as F -from torch import nn - -from . import spec_utils - - -class Conv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(Conv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nout, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - bias=False, - ), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class SeperableConv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(SeperableConv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nin, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - groups=nin, - bias=False, - ), - nn.Conv2d(nin, nout, kernel_size=1, bias=False), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class Encoder(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): - super(Encoder, self).__init__() - self.conv1 = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.conv2 = Conv2DBNActiv(nout, nout, ksize, stride, pad, activ=activ) - - def __call__(self, x): - skip = self.conv1(x) - h = self.conv2(skip) - - return h, skip - - -class Decoder(nn.Module): - def __init__( - self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.ReLU, dropout=False - ): - super(Decoder, self).__init__() - self.conv = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.dropout = nn.Dropout2d(0.1) if dropout else None - - def __call__(self, x, skip=None): - x = F.interpolate(x, scale_factor=2, mode="bilinear", align_corners=True) - if skip is not None: - skip = spec_utils.crop_center(skip, x) - x = torch.cat([x, skip], dim=1) - h = self.conv(x) - - if self.dropout is not None: - h = self.dropout(h) - - return h - - -class ASPPModule(nn.Module): - def __init__(self, nin, nout, dilations=(4, 8, 16, 32, 64), activ=nn.ReLU): - super(ASPPModule, self).__init__() - self.conv1 = nn.Sequential( - nn.AdaptiveAvgPool2d((1, None)), - Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ), - ) - self.conv2 = Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ) - self.conv3 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[0], dilations[0], activ=activ - ) - self.conv4 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[1], dilations[1], activ=activ - ) - self.conv5 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.conv6 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.conv7 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.bottleneck = nn.Sequential( - Conv2DBNActiv(nin * 7, nout, 1, 1, 0, activ=activ), nn.Dropout2d(0.1) - ) - - def forward(self, x): - _, _, h, w = x.size() - feat1 = F.interpolate( - self.conv1(x), size=(h, w), mode="bilinear", align_corners=True - ) - feat2 = self.conv2(x) - feat3 = self.conv3(x) - feat4 = self.conv4(x) - feat5 = self.conv5(x) - feat6 = self.conv6(x) - feat7 = self.conv7(x) - out = torch.cat((feat1, feat2, feat3, feat4, feat5, feat6, feat7), dim=1) - bottle = self.bottleneck(out) - return bottle diff --git a/infer/lib/uvr5_pack/lib_v5/layers_new.py b/infer/lib/uvr5_pack/lib_v5/layers_new.py deleted file mode 100644 index 44153b6a23399c6938affc61c71919eaa172bcee..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/layers_new.py +++ /dev/null @@ -1,125 +0,0 @@ -import torch -import torch.nn.functional as F -from torch import nn - -from . import spec_utils - - -class Conv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(Conv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nout, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - bias=False, - ), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class Encoder(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): - super(Encoder, self).__init__() - self.conv1 = Conv2DBNActiv(nin, nout, ksize, stride, pad, activ=activ) - self.conv2 = Conv2DBNActiv(nout, nout, ksize, 1, pad, activ=activ) - - def __call__(self, x): - h = self.conv1(x) - h = self.conv2(h) - - return h - - -class Decoder(nn.Module): - def __init__( - self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.ReLU, dropout=False - ): - super(Decoder, self).__init__() - self.conv1 = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - # self.conv2 = Conv2DBNActiv(nout, nout, ksize, 1, pad, activ=activ) - self.dropout = nn.Dropout2d(0.1) if dropout else None - - def __call__(self, x, skip=None): - x = F.interpolate(x, scale_factor=2, mode="bilinear", align_corners=True) - - if skip is not None: - skip = spec_utils.crop_center(skip, x) - x = torch.cat([x, skip], dim=1) - - h = self.conv1(x) - # h = self.conv2(h) - - if self.dropout is not None: - h = self.dropout(h) - - return h - - -class ASPPModule(nn.Module): - def __init__(self, nin, nout, dilations=(4, 8, 12), activ=nn.ReLU, dropout=False): - super(ASPPModule, self).__init__() - self.conv1 = nn.Sequential( - nn.AdaptiveAvgPool2d((1, None)), - Conv2DBNActiv(nin, nout, 1, 1, 0, activ=activ), - ) - self.conv2 = Conv2DBNActiv(nin, nout, 1, 1, 0, activ=activ) - self.conv3 = Conv2DBNActiv( - nin, nout, 3, 1, dilations[0], dilations[0], activ=activ - ) - self.conv4 = Conv2DBNActiv( - nin, nout, 3, 1, dilations[1], dilations[1], activ=activ - ) - self.conv5 = Conv2DBNActiv( - nin, nout, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.bottleneck = Conv2DBNActiv(nout * 5, nout, 1, 1, 0, activ=activ) - self.dropout = nn.Dropout2d(0.1) if dropout else None - - def forward(self, x): - _, _, h, w = x.size() - feat1 = F.interpolate( - self.conv1(x), size=(h, w), mode="bilinear", align_corners=True - ) - feat2 = self.conv2(x) - feat3 = self.conv3(x) - feat4 = self.conv4(x) - feat5 = self.conv5(x) - out = torch.cat((feat1, feat2, feat3, feat4, feat5), dim=1) - out = self.bottleneck(out) - - if self.dropout is not None: - out = self.dropout(out) - - return out - - -class LSTMModule(nn.Module): - def __init__(self, nin_conv, nin_lstm, nout_lstm): - super(LSTMModule, self).__init__() - self.conv = Conv2DBNActiv(nin_conv, 1, 1, 1, 0) - self.lstm = nn.LSTM( - input_size=nin_lstm, hidden_size=nout_lstm // 2, bidirectional=True - ) - self.dense = nn.Sequential( - nn.Linear(nout_lstm, nin_lstm), nn.BatchNorm1d(nin_lstm), nn.ReLU() - ) - - def forward(self, x): - N, _, nbins, nframes = x.size() - h = self.conv(x)[:, 0] # N, nbins, nframes - h = h.permute(2, 0, 1) # nframes, N, nbins - h, _ = self.lstm(h) - h = self.dense(h.reshape(-1, h.size()[-1])) # nframes * N, nbins - h = h.reshape(nframes, N, 1, nbins) - h = h.permute(1, 2, 3, 0) - - return h diff --git a/infer/lib/uvr5_pack/lib_v5/model_param_init.py b/infer/lib/uvr5_pack/lib_v5/model_param_init.py deleted file mode 100644 index b995c0bfb1194746187692e2ab1c2a6dbaaaec6c..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/model_param_init.py +++ /dev/null @@ -1,69 +0,0 @@ -import json -import os -import pathlib - -default_param = {} -default_param["bins"] = 768 -default_param["unstable_bins"] = 9 # training only -default_param["reduction_bins"] = 762 # training only -default_param["sr"] = 44100 -default_param["pre_filter_start"] = 757 -default_param["pre_filter_stop"] = 768 -default_param["band"] = {} - - -default_param["band"][1] = { - "sr": 11025, - "hl": 128, - "n_fft": 960, - "crop_start": 0, - "crop_stop": 245, - "lpf_start": 61, # inference only - "res_type": "polyphase", -} - -default_param["band"][2] = { - "sr": 44100, - "hl": 512, - "n_fft": 1536, - "crop_start": 24, - "crop_stop": 547, - "hpf_start": 81, # inference only - "res_type": "sinc_best", -} - - -def int_keys(d): - r = {} - for k, v in d: - if k.isdigit(): - k = int(k) - r[k] = v - return r - - -class ModelParameters(object): - def __init__(self, config_path=""): - if ".pth" == pathlib.Path(config_path).suffix: - import zipfile - - with zipfile.ZipFile(config_path, "r") as zip: - self.param = json.loads( - zip.read("param.json"), object_pairs_hook=int_keys - ) - elif ".json" == pathlib.Path(config_path).suffix: - with open(config_path, "r") as f: - self.param = json.loads(f.read(), object_pairs_hook=int_keys) - else: - self.param = default_param - - for k in [ - "mid_side", - "mid_side_b", - "mid_side_b2", - "stereo_w", - "stereo_n", - "reverse", - ]: - if not k in self.param: - self.param[k] = False diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr16000_hl512.json b/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr16000_hl512.json deleted file mode 100644 index 72cb4499867ad2827185e85687f06fb73d33eced..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr16000_hl512.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "bins": 1024, - "unstable_bins": 0, - "reduction_bins": 0, - "band": { - "1": { - "sr": 16000, - "hl": 512, - "n_fft": 2048, - "crop_start": 0, - "crop_stop": 1024, - "hpf_start": -1, - "res_type": "sinc_best" - } - }, - "sr": 16000, - "pre_filter_start": 1023, - "pre_filter_stop": 1024 -} \ No newline at end of file diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr32000_hl512.json b/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr32000_hl512.json deleted file mode 100644 index 3c00ecf0a105e55a6a86a3c32db301a2635b5b41..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr32000_hl512.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "bins": 1024, - "unstable_bins": 0, - "reduction_bins": 0, - "band": { - "1": { - "sr": 32000, - "hl": 512, - "n_fft": 2048, - "crop_start": 0, - "crop_stop": 1024, - "hpf_start": -1, - "res_type": "kaiser_fast" - } - }, - "sr": 32000, - "pre_filter_start": 1000, - "pre_filter_stop": 1021 -} \ No newline at end of file diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr33075_hl384.json b/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr33075_hl384.json deleted file mode 100644 index 55666ac9a8d0547751fb4b4d3bffb1ee2c956913..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr33075_hl384.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "bins": 1024, - "unstable_bins": 0, - "reduction_bins": 0, - "band": { - "1": { - "sr": 33075, - "hl": 384, - "n_fft": 2048, - "crop_start": 0, - "crop_stop": 1024, - "hpf_start": -1, - "res_type": "sinc_best" - } - }, - "sr": 33075, - "pre_filter_start": 1000, - "pre_filter_stop": 1021 -} \ No newline at end of file diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl1024.json b/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl1024.json deleted file mode 100644 index 665abe20eb3cc39fe0f8493dad8f25f6ef634a14..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl1024.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "bins": 1024, - "unstable_bins": 0, - "reduction_bins": 0, - "band": { - "1": { - "sr": 44100, - "hl": 1024, - "n_fft": 2048, - "crop_start": 0, - "crop_stop": 1024, - "hpf_start": -1, - "res_type": "sinc_best" - } - }, - "sr": 44100, - "pre_filter_start": 1023, - "pre_filter_stop": 1024 -} \ No newline at end of file diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl256.json b/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl256.json deleted file mode 100644 index 0e8b16f89b0231d06eabe8d2f7c2670c7caa2272..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl256.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "bins": 256, - "unstable_bins": 0, - "reduction_bins": 0, - "band": { - "1": { - "sr": 44100, - "hl": 256, - "n_fft": 512, - "crop_start": 0, - "crop_stop": 256, - "hpf_start": -1, - "res_type": "sinc_best" - } - }, - "sr": 44100, - "pre_filter_start": 256, - "pre_filter_stop": 256 -} \ No newline at end of file diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512.json b/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512.json deleted file mode 100644 index 3b38fcaf60ba204e03a47f5bd3f5bcfe75e1983a..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "bins": 1024, - "unstable_bins": 0, - "reduction_bins": 0, - "band": { - "1": { - "sr": 44100, - "hl": 512, - "n_fft": 2048, - "crop_start": 0, - "crop_stop": 1024, - "hpf_start": -1, - "res_type": "sinc_best" - } - }, - "sr": 44100, - "pre_filter_start": 1023, - "pre_filter_stop": 1024 -} \ No newline at end of file diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512_cut.json b/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512_cut.json deleted file mode 100644 index 630df3524e340f43a1ddb7b33ff02cc91fc1cb47..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512_cut.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "bins": 1024, - "unstable_bins": 0, - "reduction_bins": 0, - "band": { - "1": { - "sr": 44100, - "hl": 512, - "n_fft": 2048, - "crop_start": 0, - "crop_stop": 700, - "hpf_start": -1, - "res_type": "sinc_best" - } - }, - "sr": 44100, - "pre_filter_start": 1023, - "pre_filter_stop": 700 -} \ No newline at end of file diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/2band_32000.json b/infer/lib/uvr5_pack/lib_v5/modelparams/2band_32000.json deleted file mode 100644 index ab9cf1150a818eb6252105408311be0a40d423b3..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/2band_32000.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "bins": 768, - "unstable_bins": 7, - "reduction_bins": 705, - "band": { - "1": { - "sr": 6000, - "hl": 66, - "n_fft": 512, - "crop_start": 0, - "crop_stop": 240, - "lpf_start": 60, - "lpf_stop": 118, - "res_type": "sinc_fastest" - }, - "2": { - "sr": 32000, - "hl": 352, - "n_fft": 1024, - "crop_start": 22, - "crop_stop": 505, - "hpf_start": 44, - "hpf_stop": 23, - "res_type": "sinc_medium" - } - }, - "sr": 32000, - "pre_filter_start": 710, - "pre_filter_stop": 731 -} diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/2band_44100_lofi.json b/infer/lib/uvr5_pack/lib_v5/modelparams/2band_44100_lofi.json deleted file mode 100644 index 7faa216d7b49aeece24123dbdd868847a1dbc03c..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/2band_44100_lofi.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "bins": 512, - "unstable_bins": 7, - "reduction_bins": 510, - "band": { - "1": { - "sr": 11025, - "hl": 160, - "n_fft": 768, - "crop_start": 0, - "crop_stop": 192, - "lpf_start": 41, - "lpf_stop": 139, - "res_type": "sinc_fastest" - }, - "2": { - "sr": 44100, - "hl": 640, - "n_fft": 1024, - "crop_start": 10, - "crop_stop": 320, - "hpf_start": 47, - "hpf_stop": 15, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 510, - "pre_filter_stop": 512 -} diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/2band_48000.json b/infer/lib/uvr5_pack/lib_v5/modelparams/2band_48000.json deleted file mode 100644 index 7e78175052b09cb1a32345e54006475992712f9a..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/2band_48000.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "bins": 768, - "unstable_bins": 7, - "reduction_bins": 705, - "band": { - "1": { - "sr": 6000, - "hl": 66, - "n_fft": 512, - "crop_start": 0, - "crop_stop": 240, - "lpf_start": 60, - "lpf_stop": 240, - "res_type": "sinc_fastest" - }, - "2": { - "sr": 48000, - "hl": 528, - "n_fft": 1536, - "crop_start": 22, - "crop_stop": 505, - "hpf_start": 82, - "hpf_stop": 22, - "res_type": "sinc_medium" - } - }, - "sr": 48000, - "pre_filter_start": 710, - "pre_filter_stop": 731 -} \ No newline at end of file diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/3band_44100.json b/infer/lib/uvr5_pack/lib_v5/modelparams/3band_44100.json deleted file mode 100644 index d881d767ff83fbac0e18dfe2587ef16925b29b3c..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/3band_44100.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "bins": 768, - "unstable_bins": 5, - "reduction_bins": 733, - "band": { - "1": { - "sr": 11025, - "hl": 128, - "n_fft": 768, - "crop_start": 0, - "crop_stop": 278, - "lpf_start": 28, - "lpf_stop": 140, - "res_type": "polyphase" - }, - "2": { - "sr": 22050, - "hl": 256, - "n_fft": 768, - "crop_start": 14, - "crop_stop": 322, - "hpf_start": 70, - "hpf_stop": 14, - "lpf_start": 283, - "lpf_stop": 314, - "res_type": "polyphase" - }, - "3": { - "sr": 44100, - "hl": 512, - "n_fft": 768, - "crop_start": 131, - "crop_stop": 313, - "hpf_start": 154, - "hpf_stop": 141, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 757, - "pre_filter_stop": 768 -} diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/3band_44100_mid.json b/infer/lib/uvr5_pack/lib_v5/modelparams/3band_44100_mid.json deleted file mode 100644 index 77ec198573b19f36519a028a509767d30764c0e2..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/3band_44100_mid.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "mid_side": true, - "bins": 768, - "unstable_bins": 5, - "reduction_bins": 733, - "band": { - "1": { - "sr": 11025, - "hl": 128, - "n_fft": 768, - "crop_start": 0, - "crop_stop": 278, - "lpf_start": 28, - "lpf_stop": 140, - "res_type": "polyphase" - }, - "2": { - "sr": 22050, - "hl": 256, - "n_fft": 768, - "crop_start": 14, - "crop_stop": 322, - "hpf_start": 70, - "hpf_stop": 14, - "lpf_start": 283, - "lpf_stop": 314, - "res_type": "polyphase" - }, - "3": { - "sr": 44100, - "hl": 512, - "n_fft": 768, - "crop_start": 131, - "crop_stop": 313, - "hpf_start": 154, - "hpf_stop": 141, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 757, - "pre_filter_stop": 768 -} diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/3band_44100_msb2.json b/infer/lib/uvr5_pack/lib_v5/modelparams/3band_44100_msb2.json deleted file mode 100644 index 85ee8a7d44541c9176e85ea3dce8728d34990938..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/3band_44100_msb2.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "mid_side_b2": true, - "bins": 640, - "unstable_bins": 7, - "reduction_bins": 565, - "band": { - "1": { - "sr": 11025, - "hl": 108, - "n_fft": 1024, - "crop_start": 0, - "crop_stop": 187, - "lpf_start": 92, - "lpf_stop": 186, - "res_type": "polyphase" - }, - "2": { - "sr": 22050, - "hl": 216, - "n_fft": 768, - "crop_start": 0, - "crop_stop": 212, - "hpf_start": 68, - "hpf_stop": 34, - "lpf_start": 174, - "lpf_stop": 209, - "res_type": "polyphase" - }, - "3": { - "sr": 44100, - "hl": 432, - "n_fft": 640, - "crop_start": 66, - "crop_stop": 307, - "hpf_start": 86, - "hpf_stop": 72, - "res_type": "kaiser_fast" - } - }, - "sr": 44100, - "pre_filter_start": 639, - "pre_filter_stop": 640 -} diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100.json b/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100.json deleted file mode 100644 index df123754204372aa50d464fbe9102a401f48cc73..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "bins": 768, - "unstable_bins": 7, - "reduction_bins": 668, - "band": { - "1": { - "sr": 11025, - "hl": 128, - "n_fft": 1024, - "crop_start": 0, - "crop_stop": 186, - "lpf_start": 37, - "lpf_stop": 73, - "res_type": "polyphase" - }, - "2": { - "sr": 11025, - "hl": 128, - "n_fft": 512, - "crop_start": 4, - "crop_stop": 185, - "hpf_start": 36, - "hpf_stop": 18, - "lpf_start": 93, - "lpf_stop": 185, - "res_type": "polyphase" - }, - "3": { - "sr": 22050, - "hl": 256, - "n_fft": 512, - "crop_start": 46, - "crop_stop": 186, - "hpf_start": 93, - "hpf_stop": 46, - "lpf_start": 164, - "lpf_stop": 186, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 512, - "n_fft": 768, - "crop_start": 121, - "crop_stop": 382, - "hpf_start": 138, - "hpf_stop": 123, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 740, - "pre_filter_stop": 768 -} diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_mid.json b/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_mid.json deleted file mode 100644 index e91b699eb63d3382c3b9e9edf46d40ed91d6122b..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_mid.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "bins": 768, - "unstable_bins": 7, - "mid_side": true, - "reduction_bins": 668, - "band": { - "1": { - "sr": 11025, - "hl": 128, - "n_fft": 1024, - "crop_start": 0, - "crop_stop": 186, - "lpf_start": 37, - "lpf_stop": 73, - "res_type": "polyphase" - }, - "2": { - "sr": 11025, - "hl": 128, - "n_fft": 512, - "crop_start": 4, - "crop_stop": 185, - "hpf_start": 36, - "hpf_stop": 18, - "lpf_start": 93, - "lpf_stop": 185, - "res_type": "polyphase" - }, - "3": { - "sr": 22050, - "hl": 256, - "n_fft": 512, - "crop_start": 46, - "crop_stop": 186, - "hpf_start": 93, - "hpf_stop": 46, - "lpf_start": 164, - "lpf_stop": 186, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 512, - "n_fft": 768, - "crop_start": 121, - "crop_stop": 382, - "hpf_start": 138, - "hpf_stop": 123, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 740, - "pre_filter_stop": 768 -} diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_msb.json b/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_msb.json deleted file mode 100644 index f852f280ec9d98fc1b65cec688290eaafec61b84..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_msb.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "mid_side_b": true, - "bins": 768, - "unstable_bins": 7, - "reduction_bins": 668, - "band": { - "1": { - "sr": 11025, - "hl": 128, - "n_fft": 1024, - "crop_start": 0, - "crop_stop": 186, - "lpf_start": 37, - "lpf_stop": 73, - "res_type": "polyphase" - }, - "2": { - "sr": 11025, - "hl": 128, - "n_fft": 512, - "crop_start": 4, - "crop_stop": 185, - "hpf_start": 36, - "hpf_stop": 18, - "lpf_start": 93, - "lpf_stop": 185, - "res_type": "polyphase" - }, - "3": { - "sr": 22050, - "hl": 256, - "n_fft": 512, - "crop_start": 46, - "crop_stop": 186, - "hpf_start": 93, - "hpf_stop": 46, - "lpf_start": 164, - "lpf_stop": 186, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 512, - "n_fft": 768, - "crop_start": 121, - "crop_stop": 382, - "hpf_start": 138, - "hpf_stop": 123, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 740, - "pre_filter_stop": 768 -} \ No newline at end of file diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_msb2.json b/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_msb2.json deleted file mode 100644 index f852f280ec9d98fc1b65cec688290eaafec61b84..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_msb2.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "mid_side_b": true, - "bins": 768, - "unstable_bins": 7, - "reduction_bins": 668, - "band": { - "1": { - "sr": 11025, - "hl": 128, - "n_fft": 1024, - "crop_start": 0, - "crop_stop": 186, - "lpf_start": 37, - "lpf_stop": 73, - "res_type": "polyphase" - }, - "2": { - "sr": 11025, - "hl": 128, - "n_fft": 512, - "crop_start": 4, - "crop_stop": 185, - "hpf_start": 36, - "hpf_stop": 18, - "lpf_start": 93, - "lpf_stop": 185, - "res_type": "polyphase" - }, - "3": { - "sr": 22050, - "hl": 256, - "n_fft": 512, - "crop_start": 46, - "crop_stop": 186, - "hpf_start": 93, - "hpf_stop": 46, - "lpf_start": 164, - "lpf_stop": 186, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 512, - "n_fft": 768, - "crop_start": 121, - "crop_stop": 382, - "hpf_start": 138, - "hpf_stop": 123, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 740, - "pre_filter_stop": 768 -} \ No newline at end of file diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_reverse.json b/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_reverse.json deleted file mode 100644 index 7a07d5541bd83dc1caa20b531c3b43a2ffccac88..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_reverse.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "reverse": true, - "bins": 768, - "unstable_bins": 7, - "reduction_bins": 668, - "band": { - "1": { - "sr": 11025, - "hl": 128, - "n_fft": 1024, - "crop_start": 0, - "crop_stop": 186, - "lpf_start": 37, - "lpf_stop": 73, - "res_type": "polyphase" - }, - "2": { - "sr": 11025, - "hl": 128, - "n_fft": 512, - "crop_start": 4, - "crop_stop": 185, - "hpf_start": 36, - "hpf_stop": 18, - "lpf_start": 93, - "lpf_stop": 185, - "res_type": "polyphase" - }, - "3": { - "sr": 22050, - "hl": 256, - "n_fft": 512, - "crop_start": 46, - "crop_stop": 186, - "hpf_start": 93, - "hpf_stop": 46, - "lpf_start": 164, - "lpf_stop": 186, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 512, - "n_fft": 768, - "crop_start": 121, - "crop_stop": 382, - "hpf_start": 138, - "hpf_stop": 123, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 740, - "pre_filter_stop": 768 -} \ No newline at end of file diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_sw.json b/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_sw.json deleted file mode 100644 index ba0cf342106de793e6ec3e876854c7fd451fbf76..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_sw.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "stereo_w": true, - "bins": 768, - "unstable_bins": 7, - "reduction_bins": 668, - "band": { - "1": { - "sr": 11025, - "hl": 128, - "n_fft": 1024, - "crop_start": 0, - "crop_stop": 186, - "lpf_start": 37, - "lpf_stop": 73, - "res_type": "polyphase" - }, - "2": { - "sr": 11025, - "hl": 128, - "n_fft": 512, - "crop_start": 4, - "crop_stop": 185, - "hpf_start": 36, - "hpf_stop": 18, - "lpf_start": 93, - "lpf_stop": 185, - "res_type": "polyphase" - }, - "3": { - "sr": 22050, - "hl": 256, - "n_fft": 512, - "crop_start": 46, - "crop_stop": 186, - "hpf_start": 93, - "hpf_stop": 46, - "lpf_start": 164, - "lpf_stop": 186, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 512, - "n_fft": 768, - "crop_start": 121, - "crop_stop": 382, - "hpf_start": 138, - "hpf_stop": 123, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 740, - "pre_filter_stop": 768 -} \ No newline at end of file diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_v2.json b/infer/lib/uvr5_pack/lib_v5/modelparams/4band_v2.json deleted file mode 100644 index 33281a0cf9916fc33558ddfda7a0287a2547faf4..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_v2.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "bins": 672, - "unstable_bins": 8, - "reduction_bins": 637, - "band": { - "1": { - "sr": 7350, - "hl": 80, - "n_fft": 640, - "crop_start": 0, - "crop_stop": 85, - "lpf_start": 25, - "lpf_stop": 53, - "res_type": "polyphase" - }, - "2": { - "sr": 7350, - "hl": 80, - "n_fft": 320, - "crop_start": 4, - "crop_stop": 87, - "hpf_start": 25, - "hpf_stop": 12, - "lpf_start": 31, - "lpf_stop": 62, - "res_type": "polyphase" - }, - "3": { - "sr": 14700, - "hl": 160, - "n_fft": 512, - "crop_start": 17, - "crop_stop": 216, - "hpf_start": 48, - "hpf_stop": 24, - "lpf_start": 139, - "lpf_stop": 210, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 480, - "n_fft": 960, - "crop_start": 78, - "crop_stop": 383, - "hpf_start": 130, - "hpf_stop": 86, - "res_type": "kaiser_fast" - } - }, - "sr": 44100, - "pre_filter_start": 668, - "pre_filter_stop": 672 -} \ No newline at end of file diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_v2_sn.json b/infer/lib/uvr5_pack/lib_v5/modelparams/4band_v2_sn.json deleted file mode 100644 index 2e5c770fe188779bf6b0873190b7a324d6a867b2..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_v2_sn.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "bins": 672, - "unstable_bins": 8, - "reduction_bins": 637, - "band": { - "1": { - "sr": 7350, - "hl": 80, - "n_fft": 640, - "crop_start": 0, - "crop_stop": 85, - "lpf_start": 25, - "lpf_stop": 53, - "res_type": "polyphase" - }, - "2": { - "sr": 7350, - "hl": 80, - "n_fft": 320, - "crop_start": 4, - "crop_stop": 87, - "hpf_start": 25, - "hpf_stop": 12, - "lpf_start": 31, - "lpf_stop": 62, - "res_type": "polyphase" - }, - "3": { - "sr": 14700, - "hl": 160, - "n_fft": 512, - "crop_start": 17, - "crop_stop": 216, - "hpf_start": 48, - "hpf_stop": 24, - "lpf_start": 139, - "lpf_stop": 210, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 480, - "n_fft": 960, - "crop_start": 78, - "crop_stop": 383, - "hpf_start": 130, - "hpf_stop": 86, - "convert_channels": "stereo_n", - "res_type": "kaiser_fast" - } - }, - "sr": 44100, - "pre_filter_start": 668, - "pre_filter_stop": 672 -} \ No newline at end of file diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_v3.json b/infer/lib/uvr5_pack/lib_v5/modelparams/4band_v3.json deleted file mode 100644 index edb908b8853c6359d1e98ae381888d1a9906ca0f..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/4band_v3.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "bins": 672, - "unstable_bins": 8, - "reduction_bins": 530, - "band": { - "1": { - "sr": 7350, - "hl": 80, - "n_fft": 640, - "crop_start": 0, - "crop_stop": 85, - "lpf_start": 25, - "lpf_stop": 53, - "res_type": "polyphase" - }, - "2": { - "sr": 7350, - "hl": 80, - "n_fft": 320, - "crop_start": 4, - "crop_stop": 87, - "hpf_start": 25, - "hpf_stop": 12, - "lpf_start": 31, - "lpf_stop": 62, - "res_type": "polyphase" - }, - "3": { - "sr": 14700, - "hl": 160, - "n_fft": 512, - "crop_start": 17, - "crop_stop": 216, - "hpf_start": 48, - "hpf_stop": 24, - "lpf_start": 139, - "lpf_stop": 210, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 480, - "n_fft": 960, - "crop_start": 78, - "crop_stop": 383, - "hpf_start": 130, - "hpf_stop": 86, - "res_type": "kaiser_fast" - } - }, - "sr": 44100, - "pre_filter_start": 668, - "pre_filter_stop": 672 -} \ No newline at end of file diff --git a/infer/lib/uvr5_pack/lib_v5/modelparams/ensemble.json b/infer/lib/uvr5_pack/lib_v5/modelparams/ensemble.json deleted file mode 100644 index ee69beb46fc82f34619c5e48761e329fcabbbd00..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/modelparams/ensemble.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "mid_side_b2": true, - "bins": 1280, - "unstable_bins": 7, - "reduction_bins": 565, - "band": { - "1": { - "sr": 11025, - "hl": 108, - "n_fft": 2048, - "crop_start": 0, - "crop_stop": 374, - "lpf_start": 92, - "lpf_stop": 186, - "res_type": "polyphase" - }, - "2": { - "sr": 22050, - "hl": 216, - "n_fft": 1536, - "crop_start": 0, - "crop_stop": 424, - "hpf_start": 68, - "hpf_stop": 34, - "lpf_start": 348, - "lpf_stop": 418, - "res_type": "polyphase" - }, - "3": { - "sr": 44100, - "hl": 432, - "n_fft": 1280, - "crop_start": 132, - "crop_stop": 614, - "hpf_start": 172, - "hpf_stop": 144, - "res_type": "polyphase" - } - }, - "sr": 44100, - "pre_filter_start": 1280, - "pre_filter_stop": 1280 -} \ No newline at end of file diff --git a/infer/lib/uvr5_pack/lib_v5/nets.py b/infer/lib/uvr5_pack/lib_v5/nets.py deleted file mode 100644 index 5da3948c2f2e9edcc3cdac49bdf9f738e403de40..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/nets.py +++ /dev/null @@ -1,123 +0,0 @@ -import layers -import torch -import torch.nn.functional as F -from torch import nn - -from . import spec_utils - - -class BaseASPPNet(nn.Module): - def __init__(self, nin, ch, dilations=(4, 8, 16)): - super(BaseASPPNet, self).__init__() - self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) - self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) - self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) - self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) - - self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) - - self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) - self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) - self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) - self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) - - def __call__(self, x): - h, e1 = self.enc1(x) - h, e2 = self.enc2(h) - h, e3 = self.enc3(h) - h, e4 = self.enc4(h) - - h = self.aspp(h) - - h = self.dec4(h, e4) - h = self.dec3(h, e3) - h = self.dec2(h, e2) - h = self.dec1(h, e1) - - return h - - -class CascadedASPPNet(nn.Module): - def __init__(self, n_fft): - super(CascadedASPPNet, self).__init__() - self.stg1_low_band_net = BaseASPPNet(2, 16) - self.stg1_high_band_net = BaseASPPNet(2, 16) - - self.stg2_bridge = layers.Conv2DBNActiv(18, 8, 1, 1, 0) - self.stg2_full_band_net = BaseASPPNet(8, 16) - - self.stg3_bridge = layers.Conv2DBNActiv(34, 16, 1, 1, 0) - self.stg3_full_band_net = BaseASPPNet(16, 32) - - self.out = nn.Conv2d(32, 2, 1, bias=False) - self.aux1_out = nn.Conv2d(16, 2, 1, bias=False) - self.aux2_out = nn.Conv2d(16, 2, 1, bias=False) - - self.max_bin = n_fft // 2 - self.output_bin = n_fft // 2 + 1 - - self.offset = 128 - - def forward(self, x, aggressiveness=None): - mix = x.detach() - x = x.clone() - - x = x[:, :, : self.max_bin] - - bandw = x.size()[2] // 2 - aux1 = torch.cat( - [ - self.stg1_low_band_net(x[:, :, :bandw]), - self.stg1_high_band_net(x[:, :, bandw:]), - ], - dim=2, - ) - - h = torch.cat([x, aux1], dim=1) - aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) - - h = torch.cat([x, aux1, aux2], dim=1) - h = self.stg3_full_band_net(self.stg3_bridge(h)) - - mask = torch.sigmoid(self.out(h)) - mask = F.pad( - input=mask, - pad=(0, 0, 0, self.output_bin - mask.size()[2]), - mode="replicate", - ) - - if self.training: - aux1 = torch.sigmoid(self.aux1_out(aux1)) - aux1 = F.pad( - input=aux1, - pad=(0, 0, 0, self.output_bin - aux1.size()[2]), - mode="replicate", - ) - aux2 = torch.sigmoid(self.aux2_out(aux2)) - aux2 = F.pad( - input=aux2, - pad=(0, 0, 0, self.output_bin - aux2.size()[2]), - mode="replicate", - ) - return mask * mix, aux1 * mix, aux2 * mix - else: - if aggressiveness: - mask[:, :, : aggressiveness["split_bin"]] = torch.pow( - mask[:, :, : aggressiveness["split_bin"]], - 1 + aggressiveness["value"] / 3, - ) - mask[:, :, aggressiveness["split_bin"] :] = torch.pow( - mask[:, :, aggressiveness["split_bin"] :], - 1 + aggressiveness["value"], - ) - - return mask * mix - - def predict(self, x_mag, aggressiveness=None): - h = self.forward(x_mag, aggressiveness) - - if self.offset > 0: - h = h[:, :, :, self.offset : -self.offset] - assert h.size()[3] > 0 - - return h diff --git a/infer/lib/uvr5_pack/lib_v5/nets_123812KB.py b/infer/lib/uvr5_pack/lib_v5/nets_123812KB.py deleted file mode 100644 index 167d4cb2198863cf43e93440f7e63c5342fc7605..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/nets_123812KB.py +++ /dev/null @@ -1,122 +0,0 @@ -import torch -import torch.nn.functional as F -from torch import nn - -from . import layers_123821KB as layers - - -class BaseASPPNet(nn.Module): - def __init__(self, nin, ch, dilations=(4, 8, 16)): - super(BaseASPPNet, self).__init__() - self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) - self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) - self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) - self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) - - self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) - - self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) - self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) - self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) - self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) - - def __call__(self, x): - h, e1 = self.enc1(x) - h, e2 = self.enc2(h) - h, e3 = self.enc3(h) - h, e4 = self.enc4(h) - - h = self.aspp(h) - - h = self.dec4(h, e4) - h = self.dec3(h, e3) - h = self.dec2(h, e2) - h = self.dec1(h, e1) - - return h - - -class CascadedASPPNet(nn.Module): - def __init__(self, n_fft): - super(CascadedASPPNet, self).__init__() - self.stg1_low_band_net = BaseASPPNet(2, 32) - self.stg1_high_band_net = BaseASPPNet(2, 32) - - self.stg2_bridge = layers.Conv2DBNActiv(34, 16, 1, 1, 0) - self.stg2_full_band_net = BaseASPPNet(16, 32) - - self.stg3_bridge = layers.Conv2DBNActiv(66, 32, 1, 1, 0) - self.stg3_full_band_net = BaseASPPNet(32, 64) - - self.out = nn.Conv2d(64, 2, 1, bias=False) - self.aux1_out = nn.Conv2d(32, 2, 1, bias=False) - self.aux2_out = nn.Conv2d(32, 2, 1, bias=False) - - self.max_bin = n_fft // 2 - self.output_bin = n_fft // 2 + 1 - - self.offset = 128 - - def forward(self, x, aggressiveness=None): - mix = x.detach() - x = x.clone() - - x = x[:, :, : self.max_bin] - - bandw = x.size()[2] // 2 - aux1 = torch.cat( - [ - self.stg1_low_band_net(x[:, :, :bandw]), - self.stg1_high_band_net(x[:, :, bandw:]), - ], - dim=2, - ) - - h = torch.cat([x, aux1], dim=1) - aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) - - h = torch.cat([x, aux1, aux2], dim=1) - h = self.stg3_full_band_net(self.stg3_bridge(h)) - - mask = torch.sigmoid(self.out(h)) - mask = F.pad( - input=mask, - pad=(0, 0, 0, self.output_bin - mask.size()[2]), - mode="replicate", - ) - - if self.training: - aux1 = torch.sigmoid(self.aux1_out(aux1)) - aux1 = F.pad( - input=aux1, - pad=(0, 0, 0, self.output_bin - aux1.size()[2]), - mode="replicate", - ) - aux2 = torch.sigmoid(self.aux2_out(aux2)) - aux2 = F.pad( - input=aux2, - pad=(0, 0, 0, self.output_bin - aux2.size()[2]), - mode="replicate", - ) - return mask * mix, aux1 * mix, aux2 * mix - else: - if aggressiveness: - mask[:, :, : aggressiveness["split_bin"]] = torch.pow( - mask[:, :, : aggressiveness["split_bin"]], - 1 + aggressiveness["value"] / 3, - ) - mask[:, :, aggressiveness["split_bin"] :] = torch.pow( - mask[:, :, aggressiveness["split_bin"] :], - 1 + aggressiveness["value"], - ) - - return mask * mix - - def predict(self, x_mag, aggressiveness=None): - h = self.forward(x_mag, aggressiveness) - - if self.offset > 0: - h = h[:, :, :, self.offset : -self.offset] - assert h.size()[3] > 0 - - return h diff --git a/infer/lib/uvr5_pack/lib_v5/nets_123821KB.py b/infer/lib/uvr5_pack/lib_v5/nets_123821KB.py deleted file mode 100644 index 167d4cb2198863cf43e93440f7e63c5342fc7605..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/nets_123821KB.py +++ /dev/null @@ -1,122 +0,0 @@ -import torch -import torch.nn.functional as F -from torch import nn - -from . import layers_123821KB as layers - - -class BaseASPPNet(nn.Module): - def __init__(self, nin, ch, dilations=(4, 8, 16)): - super(BaseASPPNet, self).__init__() - self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) - self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) - self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) - self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) - - self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) - - self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) - self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) - self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) - self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) - - def __call__(self, x): - h, e1 = self.enc1(x) - h, e2 = self.enc2(h) - h, e3 = self.enc3(h) - h, e4 = self.enc4(h) - - h = self.aspp(h) - - h = self.dec4(h, e4) - h = self.dec3(h, e3) - h = self.dec2(h, e2) - h = self.dec1(h, e1) - - return h - - -class CascadedASPPNet(nn.Module): - def __init__(self, n_fft): - super(CascadedASPPNet, self).__init__() - self.stg1_low_band_net = BaseASPPNet(2, 32) - self.stg1_high_band_net = BaseASPPNet(2, 32) - - self.stg2_bridge = layers.Conv2DBNActiv(34, 16, 1, 1, 0) - self.stg2_full_band_net = BaseASPPNet(16, 32) - - self.stg3_bridge = layers.Conv2DBNActiv(66, 32, 1, 1, 0) - self.stg3_full_band_net = BaseASPPNet(32, 64) - - self.out = nn.Conv2d(64, 2, 1, bias=False) - self.aux1_out = nn.Conv2d(32, 2, 1, bias=False) - self.aux2_out = nn.Conv2d(32, 2, 1, bias=False) - - self.max_bin = n_fft // 2 - self.output_bin = n_fft // 2 + 1 - - self.offset = 128 - - def forward(self, x, aggressiveness=None): - mix = x.detach() - x = x.clone() - - x = x[:, :, : self.max_bin] - - bandw = x.size()[2] // 2 - aux1 = torch.cat( - [ - self.stg1_low_band_net(x[:, :, :bandw]), - self.stg1_high_band_net(x[:, :, bandw:]), - ], - dim=2, - ) - - h = torch.cat([x, aux1], dim=1) - aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) - - h = torch.cat([x, aux1, aux2], dim=1) - h = self.stg3_full_band_net(self.stg3_bridge(h)) - - mask = torch.sigmoid(self.out(h)) - mask = F.pad( - input=mask, - pad=(0, 0, 0, self.output_bin - mask.size()[2]), - mode="replicate", - ) - - if self.training: - aux1 = torch.sigmoid(self.aux1_out(aux1)) - aux1 = F.pad( - input=aux1, - pad=(0, 0, 0, self.output_bin - aux1.size()[2]), - mode="replicate", - ) - aux2 = torch.sigmoid(self.aux2_out(aux2)) - aux2 = F.pad( - input=aux2, - pad=(0, 0, 0, self.output_bin - aux2.size()[2]), - mode="replicate", - ) - return mask * mix, aux1 * mix, aux2 * mix - else: - if aggressiveness: - mask[:, :, : aggressiveness["split_bin"]] = torch.pow( - mask[:, :, : aggressiveness["split_bin"]], - 1 + aggressiveness["value"] / 3, - ) - mask[:, :, aggressiveness["split_bin"] :] = torch.pow( - mask[:, :, aggressiveness["split_bin"] :], - 1 + aggressiveness["value"], - ) - - return mask * mix - - def predict(self, x_mag, aggressiveness=None): - h = self.forward(x_mag, aggressiveness) - - if self.offset > 0: - h = h[:, :, :, self.offset : -self.offset] - assert h.size()[3] > 0 - - return h diff --git a/infer/lib/uvr5_pack/lib_v5/nets_33966KB.py b/infer/lib/uvr5_pack/lib_v5/nets_33966KB.py deleted file mode 100644 index 73a5b836177b706c306e27875f8391c1aed4b948..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/nets_33966KB.py +++ /dev/null @@ -1,122 +0,0 @@ -import torch -import torch.nn.functional as F -from torch import nn - -from . import layers_33966KB as layers - - -class BaseASPPNet(nn.Module): - def __init__(self, nin, ch, dilations=(4, 8, 16, 32)): - super(BaseASPPNet, self).__init__() - self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) - self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) - self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) - self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) - - self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) - - self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) - self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) - self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) - self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) - - def __call__(self, x): - h, e1 = self.enc1(x) - h, e2 = self.enc2(h) - h, e3 = self.enc3(h) - h, e4 = self.enc4(h) - - h = self.aspp(h) - - h = self.dec4(h, e4) - h = self.dec3(h, e3) - h = self.dec2(h, e2) - h = self.dec1(h, e1) - - return h - - -class CascadedASPPNet(nn.Module): - def __init__(self, n_fft): - super(CascadedASPPNet, self).__init__() - self.stg1_low_band_net = BaseASPPNet(2, 16) - self.stg1_high_band_net = BaseASPPNet(2, 16) - - self.stg2_bridge = layers.Conv2DBNActiv(18, 8, 1, 1, 0) - self.stg2_full_band_net = BaseASPPNet(8, 16) - - self.stg3_bridge = layers.Conv2DBNActiv(34, 16, 1, 1, 0) - self.stg3_full_band_net = BaseASPPNet(16, 32) - - self.out = nn.Conv2d(32, 2, 1, bias=False) - self.aux1_out = nn.Conv2d(16, 2, 1, bias=False) - self.aux2_out = nn.Conv2d(16, 2, 1, bias=False) - - self.max_bin = n_fft // 2 - self.output_bin = n_fft // 2 + 1 - - self.offset = 128 - - def forward(self, x, aggressiveness=None): - mix = x.detach() - x = x.clone() - - x = x[:, :, : self.max_bin] - - bandw = x.size()[2] // 2 - aux1 = torch.cat( - [ - self.stg1_low_band_net(x[:, :, :bandw]), - self.stg1_high_band_net(x[:, :, bandw:]), - ], - dim=2, - ) - - h = torch.cat([x, aux1], dim=1) - aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) - - h = torch.cat([x, aux1, aux2], dim=1) - h = self.stg3_full_band_net(self.stg3_bridge(h)) - - mask = torch.sigmoid(self.out(h)) - mask = F.pad( - input=mask, - pad=(0, 0, 0, self.output_bin - mask.size()[2]), - mode="replicate", - ) - - if self.training: - aux1 = torch.sigmoid(self.aux1_out(aux1)) - aux1 = F.pad( - input=aux1, - pad=(0, 0, 0, self.output_bin - aux1.size()[2]), - mode="replicate", - ) - aux2 = torch.sigmoid(self.aux2_out(aux2)) - aux2 = F.pad( - input=aux2, - pad=(0, 0, 0, self.output_bin - aux2.size()[2]), - mode="replicate", - ) - return mask * mix, aux1 * mix, aux2 * mix - else: - if aggressiveness: - mask[:, :, : aggressiveness["split_bin"]] = torch.pow( - mask[:, :, : aggressiveness["split_bin"]], - 1 + aggressiveness["value"] / 3, - ) - mask[:, :, aggressiveness["split_bin"] :] = torch.pow( - mask[:, :, aggressiveness["split_bin"] :], - 1 + aggressiveness["value"], - ) - - return mask * mix - - def predict(self, x_mag, aggressiveness=None): - h = self.forward(x_mag, aggressiveness) - - if self.offset > 0: - h = h[:, :, :, self.offset : -self.offset] - assert h.size()[3] > 0 - - return h diff --git a/infer/lib/uvr5_pack/lib_v5/nets_537227KB.py b/infer/lib/uvr5_pack/lib_v5/nets_537227KB.py deleted file mode 100644 index 823b44fb64898e8dcbb12180ba45d1718f9b03f7..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/nets_537227KB.py +++ /dev/null @@ -1,123 +0,0 @@ -import numpy as np -import torch -import torch.nn.functional as F -from torch import nn - -from . import layers_537238KB as layers - - -class BaseASPPNet(nn.Module): - def __init__(self, nin, ch, dilations=(4, 8, 16)): - super(BaseASPPNet, self).__init__() - self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) - self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) - self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) - self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) - - self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) - - self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) - self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) - self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) - self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) - - def __call__(self, x): - h, e1 = self.enc1(x) - h, e2 = self.enc2(h) - h, e3 = self.enc3(h) - h, e4 = self.enc4(h) - - h = self.aspp(h) - - h = self.dec4(h, e4) - h = self.dec3(h, e3) - h = self.dec2(h, e2) - h = self.dec1(h, e1) - - return h - - -class CascadedASPPNet(nn.Module): - def __init__(self, n_fft): - super(CascadedASPPNet, self).__init__() - self.stg1_low_band_net = BaseASPPNet(2, 64) - self.stg1_high_band_net = BaseASPPNet(2, 64) - - self.stg2_bridge = layers.Conv2DBNActiv(66, 32, 1, 1, 0) - self.stg2_full_band_net = BaseASPPNet(32, 64) - - self.stg3_bridge = layers.Conv2DBNActiv(130, 64, 1, 1, 0) - self.stg3_full_band_net = BaseASPPNet(64, 128) - - self.out = nn.Conv2d(128, 2, 1, bias=False) - self.aux1_out = nn.Conv2d(64, 2, 1, bias=False) - self.aux2_out = nn.Conv2d(64, 2, 1, bias=False) - - self.max_bin = n_fft // 2 - self.output_bin = n_fft // 2 + 1 - - self.offset = 128 - - def forward(self, x, aggressiveness=None): - mix = x.detach() - x = x.clone() - - x = x[:, :, : self.max_bin] - - bandw = x.size()[2] // 2 - aux1 = torch.cat( - [ - self.stg1_low_band_net(x[:, :, :bandw]), - self.stg1_high_band_net(x[:, :, bandw:]), - ], - dim=2, - ) - - h = torch.cat([x, aux1], dim=1) - aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) - - h = torch.cat([x, aux1, aux2], dim=1) - h = self.stg3_full_band_net(self.stg3_bridge(h)) - - mask = torch.sigmoid(self.out(h)) - mask = F.pad( - input=mask, - pad=(0, 0, 0, self.output_bin - mask.size()[2]), - mode="replicate", - ) - - if self.training: - aux1 = torch.sigmoid(self.aux1_out(aux1)) - aux1 = F.pad( - input=aux1, - pad=(0, 0, 0, self.output_bin - aux1.size()[2]), - mode="replicate", - ) - aux2 = torch.sigmoid(self.aux2_out(aux2)) - aux2 = F.pad( - input=aux2, - pad=(0, 0, 0, self.output_bin - aux2.size()[2]), - mode="replicate", - ) - return mask * mix, aux1 * mix, aux2 * mix - else: - if aggressiveness: - mask[:, :, : aggressiveness["split_bin"]] = torch.pow( - mask[:, :, : aggressiveness["split_bin"]], - 1 + aggressiveness["value"] / 3, - ) - mask[:, :, aggressiveness["split_bin"] :] = torch.pow( - mask[:, :, aggressiveness["split_bin"] :], - 1 + aggressiveness["value"], - ) - - return mask * mix - - def predict(self, x_mag, aggressiveness=None): - h = self.forward(x_mag, aggressiveness) - - if self.offset > 0: - h = h[:, :, :, self.offset : -self.offset] - assert h.size()[3] > 0 - - return h diff --git a/infer/lib/uvr5_pack/lib_v5/nets_537238KB.py b/infer/lib/uvr5_pack/lib_v5/nets_537238KB.py deleted file mode 100644 index 823b44fb64898e8dcbb12180ba45d1718f9b03f7..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/nets_537238KB.py +++ /dev/null @@ -1,123 +0,0 @@ -import numpy as np -import torch -import torch.nn.functional as F -from torch import nn - -from . import layers_537238KB as layers - - -class BaseASPPNet(nn.Module): - def __init__(self, nin, ch, dilations=(4, 8, 16)): - super(BaseASPPNet, self).__init__() - self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) - self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) - self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) - self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) - - self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) - - self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) - self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) - self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) - self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) - - def __call__(self, x): - h, e1 = self.enc1(x) - h, e2 = self.enc2(h) - h, e3 = self.enc3(h) - h, e4 = self.enc4(h) - - h = self.aspp(h) - - h = self.dec4(h, e4) - h = self.dec3(h, e3) - h = self.dec2(h, e2) - h = self.dec1(h, e1) - - return h - - -class CascadedASPPNet(nn.Module): - def __init__(self, n_fft): - super(CascadedASPPNet, self).__init__() - self.stg1_low_band_net = BaseASPPNet(2, 64) - self.stg1_high_band_net = BaseASPPNet(2, 64) - - self.stg2_bridge = layers.Conv2DBNActiv(66, 32, 1, 1, 0) - self.stg2_full_band_net = BaseASPPNet(32, 64) - - self.stg3_bridge = layers.Conv2DBNActiv(130, 64, 1, 1, 0) - self.stg3_full_band_net = BaseASPPNet(64, 128) - - self.out = nn.Conv2d(128, 2, 1, bias=False) - self.aux1_out = nn.Conv2d(64, 2, 1, bias=False) - self.aux2_out = nn.Conv2d(64, 2, 1, bias=False) - - self.max_bin = n_fft // 2 - self.output_bin = n_fft // 2 + 1 - - self.offset = 128 - - def forward(self, x, aggressiveness=None): - mix = x.detach() - x = x.clone() - - x = x[:, :, : self.max_bin] - - bandw = x.size()[2] // 2 - aux1 = torch.cat( - [ - self.stg1_low_band_net(x[:, :, :bandw]), - self.stg1_high_band_net(x[:, :, bandw:]), - ], - dim=2, - ) - - h = torch.cat([x, aux1], dim=1) - aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) - - h = torch.cat([x, aux1, aux2], dim=1) - h = self.stg3_full_band_net(self.stg3_bridge(h)) - - mask = torch.sigmoid(self.out(h)) - mask = F.pad( - input=mask, - pad=(0, 0, 0, self.output_bin - mask.size()[2]), - mode="replicate", - ) - - if self.training: - aux1 = torch.sigmoid(self.aux1_out(aux1)) - aux1 = F.pad( - input=aux1, - pad=(0, 0, 0, self.output_bin - aux1.size()[2]), - mode="replicate", - ) - aux2 = torch.sigmoid(self.aux2_out(aux2)) - aux2 = F.pad( - input=aux2, - pad=(0, 0, 0, self.output_bin - aux2.size()[2]), - mode="replicate", - ) - return mask * mix, aux1 * mix, aux2 * mix - else: - if aggressiveness: - mask[:, :, : aggressiveness["split_bin"]] = torch.pow( - mask[:, :, : aggressiveness["split_bin"]], - 1 + aggressiveness["value"] / 3, - ) - mask[:, :, aggressiveness["split_bin"] :] = torch.pow( - mask[:, :, aggressiveness["split_bin"] :], - 1 + aggressiveness["value"], - ) - - return mask * mix - - def predict(self, x_mag, aggressiveness=None): - h = self.forward(x_mag, aggressiveness) - - if self.offset > 0: - h = h[:, :, :, self.offset : -self.offset] - assert h.size()[3] > 0 - - return h diff --git a/infer/lib/uvr5_pack/lib_v5/nets_61968KB.py b/infer/lib/uvr5_pack/lib_v5/nets_61968KB.py deleted file mode 100644 index 167d4cb2198863cf43e93440f7e63c5342fc7605..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/nets_61968KB.py +++ /dev/null @@ -1,122 +0,0 @@ -import torch -import torch.nn.functional as F -from torch import nn - -from . import layers_123821KB as layers - - -class BaseASPPNet(nn.Module): - def __init__(self, nin, ch, dilations=(4, 8, 16)): - super(BaseASPPNet, self).__init__() - self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) - self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) - self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) - self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) - - self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) - - self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) - self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) - self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) - self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) - - def __call__(self, x): - h, e1 = self.enc1(x) - h, e2 = self.enc2(h) - h, e3 = self.enc3(h) - h, e4 = self.enc4(h) - - h = self.aspp(h) - - h = self.dec4(h, e4) - h = self.dec3(h, e3) - h = self.dec2(h, e2) - h = self.dec1(h, e1) - - return h - - -class CascadedASPPNet(nn.Module): - def __init__(self, n_fft): - super(CascadedASPPNet, self).__init__() - self.stg1_low_band_net = BaseASPPNet(2, 32) - self.stg1_high_band_net = BaseASPPNet(2, 32) - - self.stg2_bridge = layers.Conv2DBNActiv(34, 16, 1, 1, 0) - self.stg2_full_band_net = BaseASPPNet(16, 32) - - self.stg3_bridge = layers.Conv2DBNActiv(66, 32, 1, 1, 0) - self.stg3_full_band_net = BaseASPPNet(32, 64) - - self.out = nn.Conv2d(64, 2, 1, bias=False) - self.aux1_out = nn.Conv2d(32, 2, 1, bias=False) - self.aux2_out = nn.Conv2d(32, 2, 1, bias=False) - - self.max_bin = n_fft // 2 - self.output_bin = n_fft // 2 + 1 - - self.offset = 128 - - def forward(self, x, aggressiveness=None): - mix = x.detach() - x = x.clone() - - x = x[:, :, : self.max_bin] - - bandw = x.size()[2] // 2 - aux1 = torch.cat( - [ - self.stg1_low_band_net(x[:, :, :bandw]), - self.stg1_high_band_net(x[:, :, bandw:]), - ], - dim=2, - ) - - h = torch.cat([x, aux1], dim=1) - aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) - - h = torch.cat([x, aux1, aux2], dim=1) - h = self.stg3_full_band_net(self.stg3_bridge(h)) - - mask = torch.sigmoid(self.out(h)) - mask = F.pad( - input=mask, - pad=(0, 0, 0, self.output_bin - mask.size()[2]), - mode="replicate", - ) - - if self.training: - aux1 = torch.sigmoid(self.aux1_out(aux1)) - aux1 = F.pad( - input=aux1, - pad=(0, 0, 0, self.output_bin - aux1.size()[2]), - mode="replicate", - ) - aux2 = torch.sigmoid(self.aux2_out(aux2)) - aux2 = F.pad( - input=aux2, - pad=(0, 0, 0, self.output_bin - aux2.size()[2]), - mode="replicate", - ) - return mask * mix, aux1 * mix, aux2 * mix - else: - if aggressiveness: - mask[:, :, : aggressiveness["split_bin"]] = torch.pow( - mask[:, :, : aggressiveness["split_bin"]], - 1 + aggressiveness["value"] / 3, - ) - mask[:, :, aggressiveness["split_bin"] :] = torch.pow( - mask[:, :, aggressiveness["split_bin"] :], - 1 + aggressiveness["value"], - ) - - return mask * mix - - def predict(self, x_mag, aggressiveness=None): - h = self.forward(x_mag, aggressiveness) - - if self.offset > 0: - h = h[:, :, :, self.offset : -self.offset] - assert h.size()[3] > 0 - - return h diff --git a/infer/lib/uvr5_pack/lib_v5/nets_new.py b/infer/lib/uvr5_pack/lib_v5/nets_new.py deleted file mode 100644 index 1c0f4fa96d921e979fe31bd4151701b7783fbcea..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/nets_new.py +++ /dev/null @@ -1,133 +0,0 @@ -import torch -import torch.nn.functional as F -from torch import nn - -from . import layers_new - - -class BaseNet(nn.Module): - def __init__( - self, nin, nout, nin_lstm, nout_lstm, dilations=((4, 2), (8, 4), (12, 6)) - ): - super(BaseNet, self).__init__() - self.enc1 = layers_new.Conv2DBNActiv(nin, nout, 3, 1, 1) - self.enc2 = layers_new.Encoder(nout, nout * 2, 3, 2, 1) - self.enc3 = layers_new.Encoder(nout * 2, nout * 4, 3, 2, 1) - self.enc4 = layers_new.Encoder(nout * 4, nout * 6, 3, 2, 1) - self.enc5 = layers_new.Encoder(nout * 6, nout * 8, 3, 2, 1) - - self.aspp = layers_new.ASPPModule(nout * 8, nout * 8, dilations, dropout=True) - - self.dec4 = layers_new.Decoder(nout * (6 + 8), nout * 6, 3, 1, 1) - self.dec3 = layers_new.Decoder(nout * (4 + 6), nout * 4, 3, 1, 1) - self.dec2 = layers_new.Decoder(nout * (2 + 4), nout * 2, 3, 1, 1) - self.lstm_dec2 = layers_new.LSTMModule(nout * 2, nin_lstm, nout_lstm) - self.dec1 = layers_new.Decoder(nout * (1 + 2) + 1, nout * 1, 3, 1, 1) - - def __call__(self, x): - e1 = self.enc1(x) - e2 = self.enc2(e1) - e3 = self.enc3(e2) - e4 = self.enc4(e3) - e5 = self.enc5(e4) - - h = self.aspp(e5) - - h = self.dec4(h, e4) - h = self.dec3(h, e3) - h = self.dec2(h, e2) - h = torch.cat([h, self.lstm_dec2(h)], dim=1) - h = self.dec1(h, e1) - - return h - - -class CascadedNet(nn.Module): - def __init__(self, n_fft, nout=32, nout_lstm=128): - super(CascadedNet, self).__init__() - - self.max_bin = n_fft // 2 - self.output_bin = n_fft // 2 + 1 - self.nin_lstm = self.max_bin // 2 - self.offset = 64 - - self.stg1_low_band_net = nn.Sequential( - BaseNet(2, nout // 2, self.nin_lstm // 2, nout_lstm), - layers_new.Conv2DBNActiv(nout // 2, nout // 4, 1, 1, 0), - ) - - self.stg1_high_band_net = BaseNet( - 2, nout // 4, self.nin_lstm // 2, nout_lstm // 2 - ) - - self.stg2_low_band_net = nn.Sequential( - BaseNet(nout // 4 + 2, nout, self.nin_lstm // 2, nout_lstm), - layers_new.Conv2DBNActiv(nout, nout // 2, 1, 1, 0), - ) - self.stg2_high_band_net = BaseNet( - nout // 4 + 2, nout // 2, self.nin_lstm // 2, nout_lstm // 2 - ) - - self.stg3_full_band_net = BaseNet( - 3 * nout // 4 + 2, nout, self.nin_lstm, nout_lstm - ) - - self.out = nn.Conv2d(nout, 2, 1, bias=False) - self.aux_out = nn.Conv2d(3 * nout // 4, 2, 1, bias=False) - - def forward(self, x): - x = x[:, :, : self.max_bin] - - bandw = x.size()[2] // 2 - l1_in = x[:, :, :bandw] - h1_in = x[:, :, bandw:] - l1 = self.stg1_low_band_net(l1_in) - h1 = self.stg1_high_band_net(h1_in) - aux1 = torch.cat([l1, h1], dim=2) - - l2_in = torch.cat([l1_in, l1], dim=1) - h2_in = torch.cat([h1_in, h1], dim=1) - l2 = self.stg2_low_band_net(l2_in) - h2 = self.stg2_high_band_net(h2_in) - aux2 = torch.cat([l2, h2], dim=2) - - f3_in = torch.cat([x, aux1, aux2], dim=1) - f3 = self.stg3_full_band_net(f3_in) - - mask = torch.sigmoid(self.out(f3)) - mask = F.pad( - input=mask, - pad=(0, 0, 0, self.output_bin - mask.size()[2]), - mode="replicate", - ) - - if self.training: - aux = torch.cat([aux1, aux2], dim=1) - aux = torch.sigmoid(self.aux_out(aux)) - aux = F.pad( - input=aux, - pad=(0, 0, 0, self.output_bin - aux.size()[2]), - mode="replicate", - ) - return mask, aux - else: - return mask - - def predict_mask(self, x): - mask = self.forward(x) - - if self.offset > 0: - mask = mask[:, :, :, self.offset : -self.offset] - assert mask.size()[3] > 0 - - return mask - - def predict(self, x, aggressiveness=None): - mask = self.forward(x) - pred_mag = x * mask - - if self.offset > 0: - pred_mag = pred_mag[:, :, :, self.offset : -self.offset] - assert pred_mag.size()[3] > 0 - - return pred_mag diff --git a/infer/lib/uvr5_pack/lib_v5/spec_utils.py b/infer/lib/uvr5_pack/lib_v5/spec_utils.py deleted file mode 100644 index a9634fd51ff47bf90211839231774719154c37cf..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/lib_v5/spec_utils.py +++ /dev/null @@ -1,672 +0,0 @@ -import hashlib -import json -import math -import os - -import librosa -import numpy as np -import soundfile as sf -from tqdm import tqdm - - -def crop_center(h1, h2): - h1_shape = h1.size() - h2_shape = h2.size() - - if h1_shape[3] == h2_shape[3]: - return h1 - elif h1_shape[3] < h2_shape[3]: - raise ValueError("h1_shape[3] must be greater than h2_shape[3]") - - # s_freq = (h2_shape[2] - h1_shape[2]) // 2 - # e_freq = s_freq + h1_shape[2] - s_time = (h1_shape[3] - h2_shape[3]) // 2 - e_time = s_time + h2_shape[3] - h1 = h1[:, :, :, s_time:e_time] - - return h1 - - -def wave_to_spectrogram( - wave, hop_length, n_fft, mid_side=False, mid_side_b2=False, reverse=False -): - if reverse: - wave_left = np.flip(np.asfortranarray(wave[0])) - wave_right = np.flip(np.asfortranarray(wave[1])) - elif mid_side: - wave_left = np.asfortranarray(np.add(wave[0], wave[1]) / 2) - wave_right = np.asfortranarray(np.subtract(wave[0], wave[1])) - elif mid_side_b2: - wave_left = np.asfortranarray(np.add(wave[1], wave[0] * 0.5)) - wave_right = np.asfortranarray(np.subtract(wave[0], wave[1] * 0.5)) - else: - wave_left = np.asfortranarray(wave[0]) - wave_right = np.asfortranarray(wave[1]) - - spec_left = librosa.stft(wave_left, n_fft, hop_length=hop_length) - spec_right = librosa.stft(wave_right, n_fft, hop_length=hop_length) - - spec = np.asfortranarray([spec_left, spec_right]) - - return spec - - -def wave_to_spectrogram_mt( - wave, hop_length, n_fft, mid_side=False, mid_side_b2=False, reverse=False -): - import threading - - if reverse: - wave_left = np.flip(np.asfortranarray(wave[0])) - wave_right = np.flip(np.asfortranarray(wave[1])) - elif mid_side: - wave_left = np.asfortranarray(np.add(wave[0], wave[1]) / 2) - wave_right = np.asfortranarray(np.subtract(wave[0], wave[1])) - elif mid_side_b2: - wave_left = np.asfortranarray(np.add(wave[1], wave[0] * 0.5)) - wave_right = np.asfortranarray(np.subtract(wave[0], wave[1] * 0.5)) - else: - wave_left = np.asfortranarray(wave[0]) - wave_right = np.asfortranarray(wave[1]) - - def run_thread(**kwargs): - global spec_left - spec_left = librosa.stft(**kwargs) - - thread = threading.Thread( - target=run_thread, - kwargs={"y": wave_left, "n_fft": n_fft, "hop_length": hop_length}, - ) - thread.start() - spec_right = librosa.stft(wave_right, n_fft, hop_length=hop_length) - thread.join() - - spec = np.asfortranarray([spec_left, spec_right]) - - return spec - - -def combine_spectrograms(specs, mp): - l = min([specs[i].shape[2] for i in specs]) - spec_c = np.zeros(shape=(2, mp.param["bins"] + 1, l), dtype=np.complex64) - offset = 0 - bands_n = len(mp.param["band"]) - - for d in range(1, bands_n + 1): - h = mp.param["band"][d]["crop_stop"] - mp.param["band"][d]["crop_start"] - spec_c[:, offset : offset + h, :l] = specs[d][ - :, mp.param["band"][d]["crop_start"] : mp.param["band"][d]["crop_stop"], :l - ] - offset += h - - if offset > mp.param["bins"]: - raise ValueError("Too much bins") - - # lowpass fiter - if ( - mp.param["pre_filter_start"] > 0 - ): # and mp.param['band'][bands_n]['res_type'] in ['scipy', 'polyphase']: - if bands_n == 1: - spec_c = fft_lp_filter( - spec_c, mp.param["pre_filter_start"], mp.param["pre_filter_stop"] - ) - else: - gp = 1 - for b in range( - mp.param["pre_filter_start"] + 1, mp.param["pre_filter_stop"] - ): - g = math.pow( - 10, -(b - mp.param["pre_filter_start"]) * (3.5 - gp) / 20.0 - ) - gp = g - spec_c[:, b, :] *= g - - return np.asfortranarray(spec_c) - - -def spectrogram_to_image(spec, mode="magnitude"): - if mode == "magnitude": - if np.iscomplexobj(spec): - y = np.abs(spec) - else: - y = spec - y = np.log10(y**2 + 1e-8) - elif mode == "phase": - if np.iscomplexobj(spec): - y = np.angle(spec) - else: - y = spec - - y -= y.min() - y *= 255 / y.max() - img = np.uint8(y) - - if y.ndim == 3: - img = img.transpose(1, 2, 0) - img = np.concatenate([np.max(img, axis=2, keepdims=True), img], axis=2) - - return img - - -def reduce_vocal_aggressively(X, y, softmask): - v = X - y - y_mag_tmp = np.abs(y) - v_mag_tmp = np.abs(v) - - v_mask = v_mag_tmp > y_mag_tmp - y_mag = np.clip(y_mag_tmp - v_mag_tmp * v_mask * softmask, 0, np.inf) - - return y_mag * np.exp(1.0j * np.angle(y)) - - -def mask_silence(mag, ref, thres=0.2, min_range=64, fade_size=32): - if min_range < fade_size * 2: - raise ValueError("min_range must be >= fade_area * 2") - - mag = mag.copy() - - idx = np.where(ref.mean(axis=(0, 1)) < thres)[0] - starts = np.insert(idx[np.where(np.diff(idx) != 1)[0] + 1], 0, idx[0]) - ends = np.append(idx[np.where(np.diff(idx) != 1)[0]], idx[-1]) - uninformative = np.where(ends - starts > min_range)[0] - if len(uninformative) > 0: - starts = starts[uninformative] - ends = ends[uninformative] - old_e = None - for s, e in zip(starts, ends): - if old_e is not None and s - old_e < fade_size: - s = old_e - fade_size * 2 - - if s != 0: - weight = np.linspace(0, 1, fade_size) - mag[:, :, s : s + fade_size] += weight * ref[:, :, s : s + fade_size] - else: - s -= fade_size - - if e != mag.shape[2]: - weight = np.linspace(1, 0, fade_size) - mag[:, :, e - fade_size : e] += weight * ref[:, :, e - fade_size : e] - else: - e += fade_size - - mag[:, :, s + fade_size : e - fade_size] += ref[ - :, :, s + fade_size : e - fade_size - ] - old_e = e - - return mag - - -def align_wave_head_and_tail(a, b): - l = min([a[0].size, b[0].size]) - - return a[:l, :l], b[:l, :l] - - -def cache_or_load(mix_path, inst_path, mp): - mix_basename = os.path.splitext(os.path.basename(mix_path))[0] - inst_basename = os.path.splitext(os.path.basename(inst_path))[0] - - cache_dir = "mph{}".format( - hashlib.sha1(json.dumps(mp.param, sort_keys=True).encode("utf-8")).hexdigest() - ) - mix_cache_dir = os.path.join("cache", cache_dir) - inst_cache_dir = os.path.join("cache", cache_dir) - - os.makedirs(mix_cache_dir, exist_ok=True) - os.makedirs(inst_cache_dir, exist_ok=True) - - mix_cache_path = os.path.join(mix_cache_dir, mix_basename + ".npy") - inst_cache_path = os.path.join(inst_cache_dir, inst_basename + ".npy") - - if os.path.exists(mix_cache_path) and os.path.exists(inst_cache_path): - X_spec_m = np.load(mix_cache_path) - y_spec_m = np.load(inst_cache_path) - else: - X_wave, y_wave, X_spec_s, y_spec_s = {}, {}, {}, {} - - for d in range(len(mp.param["band"]), 0, -1): - bp = mp.param["band"][d] - - if d == len(mp.param["band"]): # high-end band - X_wave[d], _ = librosa.load( - mix_path, bp["sr"], False, dtype=np.float32, res_type=bp["res_type"] - ) - y_wave[d], _ = librosa.load( - inst_path, - bp["sr"], - False, - dtype=np.float32, - res_type=bp["res_type"], - ) - else: # lower bands - X_wave[d] = librosa.resample( - X_wave[d + 1], - mp.param["band"][d + 1]["sr"], - bp["sr"], - res_type=bp["res_type"], - ) - y_wave[d] = librosa.resample( - y_wave[d + 1], - mp.param["band"][d + 1]["sr"], - bp["sr"], - res_type=bp["res_type"], - ) - - X_wave[d], y_wave[d] = align_wave_head_and_tail(X_wave[d], y_wave[d]) - - X_spec_s[d] = wave_to_spectrogram( - X_wave[d], - bp["hl"], - bp["n_fft"], - mp.param["mid_side"], - mp.param["mid_side_b2"], - mp.param["reverse"], - ) - y_spec_s[d] = wave_to_spectrogram( - y_wave[d], - bp["hl"], - bp["n_fft"], - mp.param["mid_side"], - mp.param["mid_side_b2"], - mp.param["reverse"], - ) - - del X_wave, y_wave - - X_spec_m = combine_spectrograms(X_spec_s, mp) - y_spec_m = combine_spectrograms(y_spec_s, mp) - - if X_spec_m.shape != y_spec_m.shape: - raise ValueError("The combined spectrograms are different: " + mix_path) - - _, ext = os.path.splitext(mix_path) - - np.save(mix_cache_path, X_spec_m) - np.save(inst_cache_path, y_spec_m) - - return X_spec_m, y_spec_m - - -def spectrogram_to_wave(spec, hop_length, mid_side, mid_side_b2, reverse): - spec_left = np.asfortranarray(spec[0]) - spec_right = np.asfortranarray(spec[1]) - - wave_left = librosa.istft(spec_left, hop_length=hop_length) - wave_right = librosa.istft(spec_right, hop_length=hop_length) - - if reverse: - return np.asfortranarray([np.flip(wave_left), np.flip(wave_right)]) - elif mid_side: - return np.asfortranarray( - [np.add(wave_left, wave_right / 2), np.subtract(wave_left, wave_right / 2)] - ) - elif mid_side_b2: - return np.asfortranarray( - [ - np.add(wave_right / 1.25, 0.4 * wave_left), - np.subtract(wave_left / 1.25, 0.4 * wave_right), - ] - ) - else: - return np.asfortranarray([wave_left, wave_right]) - - -def spectrogram_to_wave_mt(spec, hop_length, mid_side, reverse, mid_side_b2): - import threading - - spec_left = np.asfortranarray(spec[0]) - spec_right = np.asfortranarray(spec[1]) - - def run_thread(**kwargs): - global wave_left - wave_left = librosa.istft(**kwargs) - - thread = threading.Thread( - target=run_thread, kwargs={"stft_matrix": spec_left, "hop_length": hop_length} - ) - thread.start() - wave_right = librosa.istft(spec_right, hop_length=hop_length) - thread.join() - - if reverse: - return np.asfortranarray([np.flip(wave_left), np.flip(wave_right)]) - elif mid_side: - return np.asfortranarray( - [np.add(wave_left, wave_right / 2), np.subtract(wave_left, wave_right / 2)] - ) - elif mid_side_b2: - return np.asfortranarray( - [ - np.add(wave_right / 1.25, 0.4 * wave_left), - np.subtract(wave_left / 1.25, 0.4 * wave_right), - ] - ) - else: - return np.asfortranarray([wave_left, wave_right]) - - -def cmb_spectrogram_to_wave(spec_m, mp, extra_bins_h=None, extra_bins=None): - wave_band = {} - bands_n = len(mp.param["band"]) - offset = 0 - - for d in range(1, bands_n + 1): - bp = mp.param["band"][d] - spec_s = np.ndarray( - shape=(2, bp["n_fft"] // 2 + 1, spec_m.shape[2]), dtype=complex - ) - h = bp["crop_stop"] - bp["crop_start"] - spec_s[:, bp["crop_start"] : bp["crop_stop"], :] = spec_m[ - :, offset : offset + h, : - ] - - offset += h - if d == bands_n: # higher - if extra_bins_h: # if --high_end_process bypass - max_bin = bp["n_fft"] // 2 - spec_s[:, max_bin - extra_bins_h : max_bin, :] = extra_bins[ - :, :extra_bins_h, : - ] - if bp["hpf_start"] > 0: - spec_s = fft_hp_filter(spec_s, bp["hpf_start"], bp["hpf_stop"] - 1) - if bands_n == 1: - wave = spectrogram_to_wave( - spec_s, - bp["hl"], - mp.param["mid_side"], - mp.param["mid_side_b2"], - mp.param["reverse"], - ) - else: - wave = np.add( - wave, - spectrogram_to_wave( - spec_s, - bp["hl"], - mp.param["mid_side"], - mp.param["mid_side_b2"], - mp.param["reverse"], - ), - ) - else: - sr = mp.param["band"][d + 1]["sr"] - if d == 1: # lower - spec_s = fft_lp_filter(spec_s, bp["lpf_start"], bp["lpf_stop"]) - wave = librosa.resample( - spectrogram_to_wave( - spec_s, - bp["hl"], - mp.param["mid_side"], - mp.param["mid_side_b2"], - mp.param["reverse"], - ), - bp["sr"], - sr, - res_type="sinc_fastest", - ) - else: # mid - spec_s = fft_hp_filter(spec_s, bp["hpf_start"], bp["hpf_stop"] - 1) - spec_s = fft_lp_filter(spec_s, bp["lpf_start"], bp["lpf_stop"]) - wave2 = np.add( - wave, - spectrogram_to_wave( - spec_s, - bp["hl"], - mp.param["mid_side"], - mp.param["mid_side_b2"], - mp.param["reverse"], - ), - ) - # wave = librosa.core.resample(wave2, bp['sr'], sr, res_type="sinc_fastest") - wave = librosa.core.resample(wave2, bp["sr"], sr, res_type="scipy") - - return wave.T - - -def fft_lp_filter(spec, bin_start, bin_stop): - g = 1.0 - for b in range(bin_start, bin_stop): - g -= 1 / (bin_stop - bin_start) - spec[:, b, :] = g * spec[:, b, :] - - spec[:, bin_stop:, :] *= 0 - - return spec - - -def fft_hp_filter(spec, bin_start, bin_stop): - g = 1.0 - for b in range(bin_start, bin_stop, -1): - g -= 1 / (bin_start - bin_stop) - spec[:, b, :] = g * spec[:, b, :] - - spec[:, 0 : bin_stop + 1, :] *= 0 - - return spec - - -def mirroring(a, spec_m, input_high_end, mp): - if "mirroring" == a: - mirror = np.flip( - np.abs( - spec_m[ - :, - mp.param["pre_filter_start"] - - 10 - - input_high_end.shape[1] : mp.param["pre_filter_start"] - - 10, - :, - ] - ), - 1, - ) - mirror = mirror * np.exp(1.0j * np.angle(input_high_end)) - - return np.where( - np.abs(input_high_end) <= np.abs(mirror), input_high_end, mirror - ) - - if "mirroring2" == a: - mirror = np.flip( - np.abs( - spec_m[ - :, - mp.param["pre_filter_start"] - - 10 - - input_high_end.shape[1] : mp.param["pre_filter_start"] - - 10, - :, - ] - ), - 1, - ) - mi = np.multiply(mirror, input_high_end * 1.7) - - return np.where(np.abs(input_high_end) <= np.abs(mi), input_high_end, mi) - - -def ensembling(a, specs): - for i in range(1, len(specs)): - if i == 1: - spec = specs[0] - - ln = min([spec.shape[2], specs[i].shape[2]]) - spec = spec[:, :, :ln] - specs[i] = specs[i][:, :, :ln] - - if "min_mag" == a: - spec = np.where(np.abs(specs[i]) <= np.abs(spec), specs[i], spec) - if "max_mag" == a: - spec = np.where(np.abs(specs[i]) >= np.abs(spec), specs[i], spec) - - return spec - - -def stft(wave, nfft, hl): - wave_left = np.asfortranarray(wave[0]) - wave_right = np.asfortranarray(wave[1]) - spec_left = librosa.stft(wave_left, nfft, hop_length=hl) - spec_right = librosa.stft(wave_right, nfft, hop_length=hl) - spec = np.asfortranarray([spec_left, spec_right]) - - return spec - - -def istft(spec, hl): - spec_left = np.asfortranarray(spec[0]) - spec_right = np.asfortranarray(spec[1]) - - wave_left = librosa.istft(spec_left, hop_length=hl) - wave_right = librosa.istft(spec_right, hop_length=hl) - wave = np.asfortranarray([wave_left, wave_right]) - - -if __name__ == "__main__": - import argparse - import sys - import time - - import cv2 - from model_param_init import ModelParameters - - p = argparse.ArgumentParser() - p.add_argument( - "--algorithm", - "-a", - type=str, - choices=["invert", "invert_p", "min_mag", "max_mag", "deep", "align"], - default="min_mag", - ) - p.add_argument( - "--model_params", - "-m", - type=str, - default=os.path.join("modelparams", "1band_sr44100_hl512.json"), - ) - p.add_argument("--output_name", "-o", type=str, default="output") - p.add_argument("--vocals_only", "-v", action="store_true") - p.add_argument("input", nargs="+") - args = p.parse_args() - - start_time = time.time() - - if args.algorithm.startswith("invert") and len(args.input) != 2: - raise ValueError("There should be two input files.") - - if not args.algorithm.startswith("invert") and len(args.input) < 2: - raise ValueError("There must be at least two input files.") - - wave, specs = {}, {} - mp = ModelParameters(args.model_params) - - for i in range(len(args.input)): - spec = {} - - for d in range(len(mp.param["band"]), 0, -1): - bp = mp.param["band"][d] - - if d == len(mp.param["band"]): # high-end band - wave[d], _ = librosa.load( - args.input[i], - bp["sr"], - False, - dtype=np.float32, - res_type=bp["res_type"], - ) - - if len(wave[d].shape) == 1: # mono to stereo - wave[d] = np.array([wave[d], wave[d]]) - else: # lower bands - wave[d] = librosa.resample( - wave[d + 1], - mp.param["band"][d + 1]["sr"], - bp["sr"], - res_type=bp["res_type"], - ) - - spec[d] = wave_to_spectrogram( - wave[d], - bp["hl"], - bp["n_fft"], - mp.param["mid_side"], - mp.param["mid_side_b2"], - mp.param["reverse"], - ) - - specs[i] = combine_spectrograms(spec, mp) - - del wave - - if args.algorithm == "deep": - d_spec = np.where(np.abs(specs[0]) <= np.abs(spec[1]), specs[0], spec[1]) - v_spec = d_spec - specs[1] - sf.write( - os.path.join("{}.wav".format(args.output_name)), - cmb_spectrogram_to_wave(v_spec, mp), - mp.param["sr"], - ) - - if args.algorithm.startswith("invert"): - ln = min([specs[0].shape[2], specs[1].shape[2]]) - specs[0] = specs[0][:, :, :ln] - specs[1] = specs[1][:, :, :ln] - - if "invert_p" == args.algorithm: - X_mag = np.abs(specs[0]) - y_mag = np.abs(specs[1]) - max_mag = np.where(X_mag >= y_mag, X_mag, y_mag) - v_spec = specs[1] - max_mag * np.exp(1.0j * np.angle(specs[0])) - else: - specs[1] = reduce_vocal_aggressively(specs[0], specs[1], 0.2) - v_spec = specs[0] - specs[1] - - if not args.vocals_only: - X_mag = np.abs(specs[0]) - y_mag = np.abs(specs[1]) - v_mag = np.abs(v_spec) - - X_image = spectrogram_to_image(X_mag) - y_image = spectrogram_to_image(y_mag) - v_image = spectrogram_to_image(v_mag) - - cv2.imwrite("{}_X.png".format(args.output_name), X_image) - cv2.imwrite("{}_y.png".format(args.output_name), y_image) - cv2.imwrite("{}_v.png".format(args.output_name), v_image) - - sf.write( - "{}_X.wav".format(args.output_name), - cmb_spectrogram_to_wave(specs[0], mp), - mp.param["sr"], - ) - sf.write( - "{}_y.wav".format(args.output_name), - cmb_spectrogram_to_wave(specs[1], mp), - mp.param["sr"], - ) - - sf.write( - "{}_v.wav".format(args.output_name), - cmb_spectrogram_to_wave(v_spec, mp), - mp.param["sr"], - ) - else: - if not args.algorithm == "deep": - sf.write( - os.path.join("ensembled", "{}.wav".format(args.output_name)), - cmb_spectrogram_to_wave(ensembling(args.algorithm, specs), mp), - mp.param["sr"], - ) - - if args.algorithm == "align": - trackalignment = [ - { - "file1": '"{}"'.format(args.input[0]), - "file2": '"{}"'.format(args.input[1]), - } - ] - - for i, e in tqdm(enumerate(trackalignment), desc="Performing Alignment..."): - os.system(f"python lib/align_tracks.py {e['file1']} {e['file2']}") - - # print('Total time: {0:.{1}f}s'.format(time.time() - start_time, 1)) diff --git a/infer/lib/uvr5_pack/name_params.json b/infer/lib/uvr5_pack/name_params.json deleted file mode 100644 index 8ed51a68370607a7a8693b99cfb35fc5d92b04af..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/name_params.json +++ /dev/null @@ -1,263 +0,0 @@ -{ - "equivalent" : [ - { - "model_hash_name" : [ - { - "hash_name": "47939caf0cfe52a0e81442b85b971dfd", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100.json", - "param_name": "4band_44100" - }, - { - "hash_name": "4e4ecb9764c50a8c414fee6e10395bbe", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_v2.json", - "param_name": "4band_v2" - }, - { - "hash_name": "ca106edd563e034bde0bdec4bb7a4b36", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_v2.json", - "param_name": "4band_v2" - }, - { - "hash_name": "e60a1e84803ce4efc0a6551206cc4b71", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100.json", - "param_name": "4band_44100" - }, - { - "hash_name": "a82f14e75892e55e994376edbf0c8435", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100.json", - "param_name": "4band_44100" - }, - { - "hash_name": "6dd9eaa6f0420af9f1d403aaafa4cc06", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_v2_sn.json", - "param_name": "4band_v2_sn" - }, - { - "hash_name": "08611fb99bd59eaa79ad27c58d137727", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_v2_sn.json", - "param_name": "4band_v2_sn" - }, - { - "hash_name": "5c7bbca45a187e81abbbd351606164e5", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/3band_44100_msb2.json", - "param_name": "3band_44100_msb2" - }, - { - "hash_name": "d6b2cb685a058a091e5e7098192d3233", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/3band_44100_msb2.json", - "param_name": "3band_44100_msb2" - }, - { - "hash_name": "c1b9f38170a7c90e96f027992eb7c62b", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100.json", - "param_name": "4band_44100" - }, - { - "hash_name": "c3448ec923fa0edf3d03a19e633faa53", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100.json", - "param_name": "4band_44100" - }, - { - "hash_name": "68aa2c8093d0080704b200d140f59e54", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/3band_44100.json", - "param_name": "3band_44100" - }, - { - "hash_name": "fdc83be5b798e4bd29fe00fe6600e147", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/3band_44100_mid.json", - "param_name": "3band_44100_mid.json" - }, - { - "hash_name": "2ce34bc92fd57f55db16b7a4def3d745", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/3band_44100_mid.json", - "param_name": "3band_44100_mid.json" - }, - { - "hash_name": "52fdca89576f06cf4340b74a4730ee5f", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100.json", - "param_name": "4band_44100.json" - }, - { - "hash_name": "41191165b05d38fc77f072fa9e8e8a30", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100.json", - "param_name": "4band_44100.json" - }, - { - "hash_name": "89e83b511ad474592689e562d5b1f80e", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/2band_32000.json", - "param_name": "2band_32000.json" - }, - { - "hash_name": "0b954da81d453b716b114d6d7c95177f", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/2band_32000.json", - "param_name": "2band_32000.json" - } - - ], - "v4 Models": [ - { - "hash_name": "6a00461c51c2920fd68937d4609ed6c8", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr16000_hl512.json", - "param_name": "1band_sr16000_hl512" - }, - { - "hash_name": "0ab504864d20f1bd378fe9c81ef37140", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr32000_hl512.json", - "param_name": "1band_sr32000_hl512" - }, - { - "hash_name": "7dd21065bf91c10f7fccb57d7d83b07f", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr32000_hl512.json", - "param_name": "1band_sr32000_hl512" - }, - { - "hash_name": "80ab74d65e515caa3622728d2de07d23", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr32000_hl512.json", - "param_name": "1band_sr32000_hl512" - }, - { - "hash_name": "edc115e7fc523245062200c00caa847f", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr33075_hl384.json", - "param_name": "1band_sr33075_hl384" - }, - { - "hash_name": "28063e9f6ab5b341c5f6d3c67f2045b7", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr33075_hl384.json", - "param_name": "1band_sr33075_hl384" - }, - { - "hash_name": "b58090534c52cbc3e9b5104bad666ef2", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512.json", - "param_name": "1band_sr44100_hl512" - }, - { - "hash_name": "0cdab9947f1b0928705f518f3c78ea8f", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512.json", - "param_name": "1band_sr44100_hl512" - }, - { - "hash_name": "ae702fed0238afb5346db8356fe25f13", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl1024.json", - "param_name": "1band_sr44100_hl1024" - } - ] - } - ], - "User Models" : [ - { - "1 Band": [ - { - "hash_name": "1band_sr16000_hl512", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr16000_hl512.json", - "param_name": "1band_sr16000_hl512" - }, - { - "hash_name": "1band_sr32000_hl512", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr32000_hl512.json", - "param_name": "1band_sr16000_hl512" - }, - { - "hash_name": "1band_sr33075_hl384", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr33075_hl384.json", - "param_name": "1band_sr33075_hl384" - }, - { - "hash_name": "1band_sr44100_hl256", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl256.json", - "param_name": "1band_sr44100_hl256" - }, - { - "hash_name": "1band_sr44100_hl512", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512.json", - "param_name": "1band_sr44100_hl512" - }, - { - "hash_name": "1band_sr44100_hl1024", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl1024.json", - "param_name": "1band_sr44100_hl1024" - } - ], - "2 Band": [ - { - "hash_name": "2band_44100_lofi", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/2band_44100_lofi.json", - "param_name": "2band_44100_lofi" - }, - { - "hash_name": "2band_32000", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/2band_32000.json", - "param_name": "2band_32000" - }, - { - "hash_name": "2band_48000", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/2band_48000.json", - "param_name": "2band_48000" - } - ], - "3 Band": [ - { - "hash_name": "3band_44100", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/3band_44100.json", - "param_name": "3band_44100" - }, - { - "hash_name": "3band_44100_mid", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/3band_44100_mid.json", - "param_name": "3band_44100_mid" - }, - { - "hash_name": "3band_44100_msb2", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/3band_44100_msb2.json", - "param_name": "3band_44100_msb2" - } - ], - "4 Band": [ - { - "hash_name": "4band_44100", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100.json", - "param_name": "4band_44100" - }, - { - "hash_name": "4band_44100_mid", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_mid.json", - "param_name": "4band_44100_mid" - }, - { - "hash_name": "4band_44100_msb", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_msb.json", - "param_name": "4band_44100_msb" - }, - { - "hash_name": "4band_44100_msb2", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_msb2.json", - "param_name": "4band_44100_msb2" - }, - { - "hash_name": "4band_44100_reverse", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_reverse.json", - "param_name": "4band_44100_reverse" - }, - { - "hash_name": "4band_44100_sw", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_44100_sw.json", - "param_name": "4band_44100_sw" - }, - { - "hash_name": "4band_v2", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_v2.json", - "param_name": "4band_v2" - }, - { - "hash_name": "4band_v2_sn", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/4band_v2_sn.json", - "param_name": "4band_v2_sn" - }, - { - "hash_name": "tmodelparam", - "model_params": "infer/lib/uvr5_pack/lib_v5/modelparams/tmodelparam.json", - "param_name": "User Model Param Set" - } - ] - } - ] -} \ No newline at end of file diff --git a/infer/lib/uvr5_pack/utils.py b/infer/lib/uvr5_pack/utils.py deleted file mode 100644 index f4805cdb25e7c50611412a19340ad525d1251d7b..0000000000000000000000000000000000000000 --- a/infer/lib/uvr5_pack/utils.py +++ /dev/null @@ -1,121 +0,0 @@ -import json - -import numpy as np -import torch -from tqdm import tqdm - - -def load_data(file_name: str = "./infer/lib/uvr5_pack/name_params.json") -> dict: - with open(file_name, "r") as f: - data = json.load(f) - - return data - - -def make_padding(width, cropsize, offset): - left = offset - roi_size = cropsize - left * 2 - if roi_size == 0: - roi_size = cropsize - right = roi_size - (width % roi_size) + left - - return left, right, roi_size - - -def inference(X_spec, device, model, aggressiveness, data): - """ - data : dic configs - """ - - def _execute( - X_mag_pad, roi_size, n_window, device, model, aggressiveness, is_half=True - ): - model.eval() - with torch.no_grad(): - preds = [] - - iterations = [n_window] - - total_iterations = sum(iterations) - for i in tqdm(range(n_window)): - start = i * roi_size - X_mag_window = X_mag_pad[ - None, :, :, start : start + data["window_size"] - ] - X_mag_window = torch.from_numpy(X_mag_window) - if is_half: - X_mag_window = X_mag_window.half() - X_mag_window = X_mag_window.to(device) - - pred = model.predict(X_mag_window, aggressiveness) - - pred = pred.detach().cpu().numpy() - preds.append(pred[0]) - - pred = np.concatenate(preds, axis=2) - return pred - - def preprocess(X_spec): - X_mag = np.abs(X_spec) - X_phase = np.angle(X_spec) - - return X_mag, X_phase - - X_mag, X_phase = preprocess(X_spec) - - coef = X_mag.max() - X_mag_pre = X_mag / coef - - n_frame = X_mag_pre.shape[2] - pad_l, pad_r, roi_size = make_padding(n_frame, data["window_size"], model.offset) - n_window = int(np.ceil(n_frame / roi_size)) - - X_mag_pad = np.pad(X_mag_pre, ((0, 0), (0, 0), (pad_l, pad_r)), mode="constant") - - if list(model.state_dict().values())[0].dtype == torch.float16: - is_half = True - else: - is_half = False - pred = _execute( - X_mag_pad, roi_size, n_window, device, model, aggressiveness, is_half - ) - pred = pred[:, :, :n_frame] - - if data["tta"]: - pad_l += roi_size // 2 - pad_r += roi_size // 2 - n_window += 1 - - X_mag_pad = np.pad(X_mag_pre, ((0, 0), (0, 0), (pad_l, pad_r)), mode="constant") - - pred_tta = _execute( - X_mag_pad, roi_size, n_window, device, model, aggressiveness, is_half - ) - pred_tta = pred_tta[:, :, roi_size // 2 :] - pred_tta = pred_tta[:, :, :n_frame] - - return (pred + pred_tta) * 0.5 * coef, X_mag, np.exp(1.0j * X_phase) - else: - return pred * coef, X_mag, np.exp(1.0j * X_phase) - - -def _get_name_params(model_path, model_hash): - data = load_data() - flag = False - ModelName = model_path - for type in list(data): - for model in list(data[type][0]): - for i in range(len(data[type][0][model])): - if str(data[type][0][model][i]["hash_name"]) == model_hash: - flag = True - elif str(data[type][0][model][i]["hash_name"]) in ModelName: - flag = True - - if flag: - model_params_auto = data[type][0][model][i]["model_params"] - param_name_auto = data[type][0][model][i]["param_name"] - if type == "equivalent": - return param_name_auto, model_params_auto - else: - flag = False - return param_name_auto, model_params_auto diff --git a/infer/modules/ipex/__init__.py.py b/infer/modules/ipex/__init__.py.py deleted file mode 100644 index 9f53b2d3f7025b2d71369dababa4e6f2a4affc48..0000000000000000000000000000000000000000 --- a/infer/modules/ipex/__init__.py.py +++ /dev/null @@ -1,165 +0,0 @@ -import os -import sys -import contextlib -import torch -import intel_extension_for_pytorch as ipex # pylint: disable=import-error, unused-import -from .hijacks import ipex_hijacks -from .attention import attention_init - -# pylint: disable=protected-access, missing-function-docstring, line-too-long - -def ipex_init(): # pylint: disable=too-many-statements - try: - #Replace cuda with xpu: - torch.cuda.current_device = torch.xpu.current_device - torch.cuda.current_stream = torch.xpu.current_stream - torch.cuda.device = torch.xpu.device - torch.cuda.device_count = torch.xpu.device_count - torch.cuda.device_of = torch.xpu.device_of - torch.cuda.getDeviceIdListForCard = torch.xpu.getDeviceIdListForCard - torch.cuda.get_device_name = torch.xpu.get_device_name - torch.cuda.get_device_properties = torch.xpu.get_device_properties - torch.cuda.init = torch.xpu.init - torch.cuda.is_available = torch.xpu.is_available - torch.cuda.is_initialized = torch.xpu.is_initialized - torch.cuda.is_current_stream_capturing = lambda: False - torch.cuda.set_device = torch.xpu.set_device - torch.cuda.stream = torch.xpu.stream - torch.cuda.synchronize = torch.xpu.synchronize - torch.cuda.Event = torch.xpu.Event - torch.cuda.Stream = torch.xpu.Stream - torch.cuda.FloatTensor = torch.xpu.FloatTensor - torch.Tensor.cuda = torch.Tensor.xpu - torch.Tensor.is_cuda = torch.Tensor.is_xpu - torch.cuda._initialization_lock = torch.xpu.lazy_init._initialization_lock - torch.cuda._initialized = torch.xpu.lazy_init._initialized - torch.cuda._lazy_seed_tracker = torch.xpu.lazy_init._lazy_seed_tracker - torch.cuda._queued_calls = torch.xpu.lazy_init._queued_calls - torch.cuda._tls = torch.xpu.lazy_init._tls - torch.cuda.threading = torch.xpu.lazy_init.threading - torch.cuda.traceback = torch.xpu.lazy_init.traceback - torch.cuda.Optional = torch.xpu.Optional - torch.cuda.__cached__ = torch.xpu.__cached__ - torch.cuda.__loader__ = torch.xpu.__loader__ - torch.cuda.ComplexFloatStorage = torch.xpu.ComplexFloatStorage - torch.cuda.Tuple = torch.xpu.Tuple - torch.cuda.streams = torch.xpu.streams - torch.cuda._lazy_new = torch.xpu._lazy_new - torch.cuda.FloatStorage = torch.xpu.FloatStorage - torch.cuda.Any = torch.xpu.Any - torch.cuda.__doc__ = torch.xpu.__doc__ - torch.cuda.default_generators = torch.xpu.default_generators - torch.cuda.HalfTensor = torch.xpu.HalfTensor - torch.cuda._get_device_index = torch.xpu._get_device_index - torch.cuda.__path__ = torch.xpu.__path__ - torch.cuda.Device = torch.xpu.Device - torch.cuda.IntTensor = torch.xpu.IntTensor - torch.cuda.ByteStorage = torch.xpu.ByteStorage - torch.cuda.set_stream = torch.xpu.set_stream - torch.cuda.BoolStorage = torch.xpu.BoolStorage - torch.cuda.os = torch.xpu.os - torch.cuda.torch = torch.xpu.torch - torch.cuda.BFloat16Storage = torch.xpu.BFloat16Storage - torch.cuda.Union = torch.xpu.Union - torch.cuda.DoubleTensor = torch.xpu.DoubleTensor - torch.cuda.ShortTensor = torch.xpu.ShortTensor - torch.cuda.LongTensor = torch.xpu.LongTensor - torch.cuda.IntStorage = torch.xpu.IntStorage - torch.cuda.LongStorage = torch.xpu.LongStorage - torch.cuda.__annotations__ = torch.xpu.__annotations__ - torch.cuda.__package__ = torch.xpu.__package__ - torch.cuda.__builtins__ = torch.xpu.__builtins__ - torch.cuda.CharTensor = torch.xpu.CharTensor - torch.cuda.List = torch.xpu.List - torch.cuda._lazy_init = torch.xpu._lazy_init - torch.cuda.BFloat16Tensor = torch.xpu.BFloat16Tensor - torch.cuda.DoubleStorage = torch.xpu.DoubleStorage - torch.cuda.ByteTensor = torch.xpu.ByteTensor - torch.cuda.StreamContext = torch.xpu.StreamContext - torch.cuda.ComplexDoubleStorage = torch.xpu.ComplexDoubleStorage - torch.cuda.ShortStorage = torch.xpu.ShortStorage - torch.cuda._lazy_call = torch.xpu._lazy_call - torch.cuda.HalfStorage = torch.xpu.HalfStorage - torch.cuda.random = torch.xpu.random - torch.cuda._device = torch.xpu._device - torch.cuda.classproperty = torch.xpu.classproperty - torch.cuda.__name__ = torch.xpu.__name__ - torch.cuda._device_t = torch.xpu._device_t - torch.cuda.warnings = torch.xpu.warnings - torch.cuda.__spec__ = torch.xpu.__spec__ - torch.cuda.BoolTensor = torch.xpu.BoolTensor - torch.cuda.CharStorage = torch.xpu.CharStorage - torch.cuda.__file__ = torch.xpu.__file__ - torch.cuda._is_in_bad_fork = torch.xpu.lazy_init._is_in_bad_fork - #torch.cuda.is_current_stream_capturing = torch.xpu.is_current_stream_capturing - - #Memory: - torch.cuda.memory = torch.xpu.memory - if 'linux' in sys.platform and "WSL2" in os.popen("uname -a").read(): - torch.xpu.empty_cache = lambda: None - torch.cuda.empty_cache = torch.xpu.empty_cache - torch.cuda.memory_stats = torch.xpu.memory_stats - torch.cuda.memory_summary = torch.xpu.memory_summary - torch.cuda.memory_snapshot = torch.xpu.memory_snapshot - torch.cuda.memory_allocated = torch.xpu.memory_allocated - torch.cuda.max_memory_allocated = torch.xpu.max_memory_allocated - torch.cuda.memory_reserved = torch.xpu.memory_reserved - torch.cuda.memory_cached = torch.xpu.memory_reserved - torch.cuda.max_memory_reserved = torch.xpu.max_memory_reserved - torch.cuda.max_memory_cached = torch.xpu.max_memory_reserved - torch.cuda.reset_peak_memory_stats = torch.xpu.reset_peak_memory_stats - torch.cuda.reset_max_memory_cached = torch.xpu.reset_peak_memory_stats - torch.cuda.reset_max_memory_allocated = torch.xpu.reset_peak_memory_stats - torch.cuda.memory_stats_as_nested_dict = torch.xpu.memory_stats_as_nested_dict - torch.cuda.reset_accumulated_memory_stats = torch.xpu.reset_accumulated_memory_stats - - #RNG: - torch.cuda.get_rng_state = torch.xpu.get_rng_state - torch.cuda.get_rng_state_all = torch.xpu.get_rng_state_all - torch.cuda.set_rng_state = torch.xpu.set_rng_state - torch.cuda.set_rng_state_all = torch.xpu.set_rng_state_all - torch.cuda.manual_seed = torch.xpu.manual_seed - torch.cuda.manual_seed_all = torch.xpu.manual_seed_all - torch.cuda.seed = torch.xpu.seed - torch.cuda.seed_all = torch.xpu.seed_all - torch.cuda.initial_seed = torch.xpu.initial_seed - - #AMP: - torch.cuda.amp = torch.xpu.amp - if not hasattr(torch.cuda.amp, "common"): - torch.cuda.amp.common = contextlib.nullcontext() - torch.cuda.amp.common.amp_definitely_not_available = lambda: False - try: - torch.cuda.amp.GradScaler = torch.xpu.amp.GradScaler - except Exception: # pylint: disable=broad-exception-caught - try: - from .gradscaler import gradscaler_init # pylint: disable=import-outside-toplevel, import-error - gradscaler_init() - torch.cuda.amp.GradScaler = torch.xpu.amp.GradScaler - except Exception: # pylint: disable=broad-exception-caught - torch.cuda.amp.GradScaler = ipex.cpu.autocast._grad_scaler.GradScaler - - #C - torch._C._cuda_getCurrentRawStream = ipex._C._getCurrentStream - ipex._C._DeviceProperties.major = 2023 - ipex._C._DeviceProperties.minor = 2 - - #Fix functions with ipex: - torch.cuda.mem_get_info = lambda device=None: [(torch.xpu.get_device_properties(device).total_memory - torch.xpu.memory_allocated(device)), torch.xpu.get_device_properties(device).total_memory] - torch._utils._get_available_device_type = lambda: "xpu" - torch.has_cuda = True - torch.cuda.has_half = True - torch.cuda.is_bf16_supported = lambda *args, **kwargs: True - torch.cuda.is_fp16_supported = lambda *args, **kwargs: True - torch.version.cuda = "11.7" - torch.cuda.get_device_capability = lambda *args, **kwargs: [11,7] - torch.cuda.get_device_properties.major = 11 - torch.cuda.get_device_properties.minor = 7 - torch.cuda.ipc_collect = lambda *args, **kwargs: None - torch.cuda.utilization = lambda *args, **kwargs: 0 - - ipex_hijacks() - attention_init() - except Exception as e: - return False, e - return True, None \ No newline at end of file diff --git a/infer/modules/ipex/attention.py b/infer/modules/ipex/attention.py deleted file mode 100644 index 0eed59630d76a56e3fd96aa5bb6518b0c61e81bb..0000000000000000000000000000000000000000 --- a/infer/modules/ipex/attention.py +++ /dev/null @@ -1,128 +0,0 @@ -import torch -import intel_extension_for_pytorch as ipex # pylint: disable=import-error, unused-import - -# pylint: disable=protected-access, missing-function-docstring, line-too-long - -original_torch_bmm = torch.bmm -def torch_bmm(input, mat2, *, out=None): - if input.dtype != mat2.dtype: - mat2 = mat2.to(input.dtype) - - #ARC GPUs can't allocate more than 4GB to a single block, Slice it: - batch_size_attention, input_tokens, mat2_shape = input.shape[0], input.shape[1], mat2.shape[2] - block_multiply = 2.4 if input.dtype == torch.float32 else 1.2 - block_size = (batch_size_attention * input_tokens * mat2_shape) / 1024 * block_multiply #MB - split_slice_size = batch_size_attention - if block_size >= 4000: - do_split = True - #Find something divisible with the input_tokens - while ((split_slice_size * input_tokens * mat2_shape) / 1024 * block_multiply) > 4000: - split_slice_size = split_slice_size // 2 - if split_slice_size <= 1: - split_slice_size = 1 - break - else: - do_split = False - - split_block_size = (split_slice_size * input_tokens * mat2_shape) / 1024 * block_multiply #MB - split_2_slice_size = input_tokens - if split_block_size >= 4000: - do_split_2 = True - #Find something divisible with the input_tokens - while ((split_slice_size * split_2_slice_size * mat2_shape) / 1024 * block_multiply) > 4000: - split_2_slice_size = split_2_slice_size // 2 - if split_2_slice_size <= 1: - split_2_slice_size = 1 - break - else: - do_split_2 = False - - if do_split: - hidden_states = torch.zeros(input.shape[0], input.shape[1], mat2.shape[2], device=input.device, dtype=input.dtype) - for i in range(batch_size_attention // split_slice_size): - start_idx = i * split_slice_size - end_idx = (i + 1) * split_slice_size - if do_split_2: - for i2 in range(input_tokens // split_2_slice_size): # pylint: disable=invalid-name - start_idx_2 = i2 * split_2_slice_size - end_idx_2 = (i2 + 1) * split_2_slice_size - hidden_states[start_idx:end_idx, start_idx_2:end_idx_2] = original_torch_bmm( - input[start_idx:end_idx, start_idx_2:end_idx_2], - mat2[start_idx:end_idx, start_idx_2:end_idx_2], - out=out - ) - else: - hidden_states[start_idx:end_idx] = original_torch_bmm( - input[start_idx:end_idx], - mat2[start_idx:end_idx], - out=out - ) - else: - return original_torch_bmm(input, mat2, out=out) - return hidden_states - -original_scaled_dot_product_attention = torch.nn.functional.scaled_dot_product_attention -def scaled_dot_product_attention(query, key, value, attn_mask=None, dropout_p=0.0, is_causal=False): - #ARC GPUs can't allocate more than 4GB to a single block, Slice it: - shape_one, batch_size_attention, query_tokens, shape_four = query.shape - block_multiply = 2.4 if query.dtype == torch.float32 else 1.2 - block_size = (shape_one * batch_size_attention * query_tokens * shape_four) / 1024 * block_multiply #MB - split_slice_size = batch_size_attention - if block_size >= 4000: - do_split = True - #Find something divisible with the shape_one - while ((shape_one * split_slice_size * query_tokens * shape_four) / 1024 * block_multiply) > 4000: - split_slice_size = split_slice_size // 2 - if split_slice_size <= 1: - split_slice_size = 1 - break - else: - do_split = False - - split_block_size = (shape_one * split_slice_size * query_tokens * shape_four) / 1024 * block_multiply #MB - split_2_slice_size = query_tokens - if split_block_size >= 4000: - do_split_2 = True - #Find something divisible with the batch_size_attention - while ((shape_one * split_slice_size * split_2_slice_size * shape_four) / 1024 * block_multiply) > 4000: - split_2_slice_size = split_2_slice_size // 2 - if split_2_slice_size <= 1: - split_2_slice_size = 1 - break - else: - do_split_2 = False - - if do_split: - hidden_states = torch.zeros(query.shape, device=query.device, dtype=query.dtype) - for i in range(batch_size_attention // split_slice_size): - start_idx = i * split_slice_size - end_idx = (i + 1) * split_slice_size - if do_split_2: - for i2 in range(query_tokens // split_2_slice_size): # pylint: disable=invalid-name - start_idx_2 = i2 * split_2_slice_size - end_idx_2 = (i2 + 1) * split_2_slice_size - hidden_states[:, start_idx:end_idx, start_idx_2:end_idx_2] = original_scaled_dot_product_attention( - query[:, start_idx:end_idx, start_idx_2:end_idx_2], - key[:, start_idx:end_idx, start_idx_2:end_idx_2], - value[:, start_idx:end_idx, start_idx_2:end_idx_2], - attn_mask=attn_mask[:, start_idx:end_idx, start_idx_2:end_idx_2] if attn_mask is not None else attn_mask, - dropout_p=dropout_p, is_causal=is_causal - ) - else: - hidden_states[:, start_idx:end_idx] = original_scaled_dot_product_attention( - query[:, start_idx:end_idx], - key[:, start_idx:end_idx], - value[:, start_idx:end_idx], - attn_mask=attn_mask[:, start_idx:end_idx] if attn_mask is not None else attn_mask, - dropout_p=dropout_p, is_causal=is_causal - ) - else: - return original_scaled_dot_product_attention( - query, key, value, attn_mask=attn_mask, dropout_p=dropout_p, is_causal=is_causal - ) - return hidden_states - -def attention_init(): - #ARC GPUs can't allocate more than 4GB to a single block: - torch.bmm = torch_bmm - torch.nn.functional.scaled_dot_product_attention = scaled_dot_product_attention \ No newline at end of file diff --git a/infer/modules/ipex/gradscaler.py b/infer/modules/ipex/gradscaler.py deleted file mode 100644 index 3c265ddb37453f02870afb481360c9cc30b05d81..0000000000000000000000000000000000000000 --- a/infer/modules/ipex/gradscaler.py +++ /dev/null @@ -1,179 +0,0 @@ -from collections import defaultdict -import torch -import intel_extension_for_pytorch as ipex # pylint: disable=import-error, unused-import -import intel_extension_for_pytorch._C as core # pylint: disable=import-error, unused-import - -# pylint: disable=protected-access, missing-function-docstring, line-too-long - -OptState = ipex.cpu.autocast._grad_scaler.OptState -_MultiDeviceReplicator = ipex.cpu.autocast._grad_scaler._MultiDeviceReplicator -_refresh_per_optimizer_state = ipex.cpu.autocast._grad_scaler._refresh_per_optimizer_state - -def _unscale_grads_(self, optimizer, inv_scale, found_inf, allow_fp16): # pylint: disable=unused-argument - per_device_inv_scale = _MultiDeviceReplicator(inv_scale) - per_device_found_inf = _MultiDeviceReplicator(found_inf) - - # To set up _amp_foreach_non_finite_check_and_unscale_, split grads by device and dtype. - # There could be hundreds of grads, so we'd like to iterate through them just once. - # However, we don't know their devices or dtypes in advance. - - # https://stackoverflow.com/questions/5029934/defaultdict-of-defaultdict - # Google says mypy struggles with defaultdicts type annotations. - per_device_and_dtype_grads = defaultdict(lambda: defaultdict(list)) # type: ignore[var-annotated] - # sync grad to master weight - if hasattr(optimizer, "sync_grad"): - optimizer.sync_grad() - with torch.no_grad(): - for group in optimizer.param_groups: - for param in group["params"]: - if param.grad is None: - continue - if (not allow_fp16) and param.grad.dtype == torch.float16: - raise ValueError("Attempting to unscale FP16 gradients.") - if param.grad.is_sparse: - # is_coalesced() == False means the sparse grad has values with duplicate indices. - # coalesce() deduplicates indices and adds all values that have the same index. - # For scaled fp16 values, there's a good chance coalescing will cause overflow, - # so we should check the coalesced _values(). - if param.grad.dtype is torch.float16: - param.grad = param.grad.coalesce() - to_unscale = param.grad._values() - else: - to_unscale = param.grad - - # -: is there a way to split by device and dtype without appending in the inner loop? - to_unscale = to_unscale.to("cpu") - per_device_and_dtype_grads[to_unscale.device][ - to_unscale.dtype - ].append(to_unscale) - - for _, per_dtype_grads in per_device_and_dtype_grads.items(): - for grads in per_dtype_grads.values(): - core._amp_foreach_non_finite_check_and_unscale_( - grads, - per_device_found_inf.get("cpu"), - per_device_inv_scale.get("cpu"), - ) - - return per_device_found_inf._per_device_tensors - -def unscale_(self, optimizer): - """ - Divides ("unscales") the optimizer's gradient tensors by the scale factor. - :meth:`unscale_` is optional, serving cases where you need to - :ref:`modify or inspect gradients<working-with-unscaled-gradients>` - between the backward pass(es) and :meth:`step`. - If :meth:`unscale_` is not called explicitly, gradients will be unscaled automatically during :meth:`step`. - Simple example, using :meth:`unscale_` to enable clipping of unscaled gradients:: - ... - scaler.scale(loss).backward() - scaler.unscale_(optimizer) - torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm) - scaler.step(optimizer) - scaler.update() - Args: - optimizer (torch.optim.Optimizer): Optimizer that owns the gradients to be unscaled. - .. warning:: - :meth:`unscale_` should only be called once per optimizer per :meth:`step` call, - and only after all gradients for that optimizer's assigned parameters have been accumulated. - Calling :meth:`unscale_` twice for a given optimizer between each :meth:`step` triggers a RuntimeError. - .. warning:: - :meth:`unscale_` may unscale sparse gradients out of place, replacing the ``.grad`` attribute. - """ - if not self._enabled: - return - - self._check_scale_growth_tracker("unscale_") - - optimizer_state = self._per_optimizer_states[id(optimizer)] - - if optimizer_state["stage"] is OptState.UNSCALED: # pylint: disable=no-else-raise - raise RuntimeError( - "unscale_() has already been called on this optimizer since the last update()." - ) - elif optimizer_state["stage"] is OptState.STEPPED: - raise RuntimeError("unscale_() is being called after step().") - - # FP32 division can be imprecise for certain compile options, so we carry out the reciprocal in FP64. - assert self._scale is not None - inv_scale = self._scale.to("cpu").double().reciprocal().float().to(self._scale.device) - found_inf = torch.full( - (1,), 0.0, dtype=torch.float32, device=self._scale.device - ) - - optimizer_state["found_inf_per_device"] = self._unscale_grads_( - optimizer, inv_scale, found_inf, False - ) - optimizer_state["stage"] = OptState.UNSCALED - -def update(self, new_scale=None): - """ - Updates the scale factor. - If any optimizer steps were skipped the scale is multiplied by ``backoff_factor`` - to reduce it. If ``growth_interval`` unskipped iterations occurred consecutively, - the scale is multiplied by ``growth_factor`` to increase it. - Passing ``new_scale`` sets the new scale value manually. (``new_scale`` is not - used directly, it's used to fill GradScaler's internal scale tensor. So if - ``new_scale`` was a tensor, later in-place changes to that tensor will not further - affect the scale GradScaler uses internally.) - Args: - new_scale (float or :class:`torch.FloatTensor`, optional, default=None): New scale factor. - .. warning:: - :meth:`update` should only be called at the end of the iteration, after ``scaler.step(optimizer)`` has - been invoked for all optimizers used this iteration. - """ - if not self._enabled: - return - - _scale, _growth_tracker = self._check_scale_growth_tracker("update") - - if new_scale is not None: - # Accept a new user-defined scale. - if isinstance(new_scale, float): - self._scale.fill_(new_scale) # type: ignore[union-attr] - else: - reason = "new_scale should be a float or a 1-element torch.FloatTensor with requires_grad=False." - assert isinstance(new_scale, torch.FloatTensor), reason # type: ignore[attr-defined] - assert new_scale.numel() == 1, reason - assert new_scale.requires_grad is False, reason - self._scale.copy_(new_scale) # type: ignore[union-attr] - else: - # Consume shared inf/nan data collected from optimizers to update the scale. - # If all found_inf tensors are on the same device as self._scale, this operation is asynchronous. - found_infs = [ - found_inf.to(device="cpu", non_blocking=True) - for state in self._per_optimizer_states.values() - for found_inf in state["found_inf_per_device"].values() - ] - - assert len(found_infs) > 0, "No inf checks were recorded prior to update." - - found_inf_combined = found_infs[0] - if len(found_infs) > 1: - for i in range(1, len(found_infs)): - found_inf_combined += found_infs[i] - - to_device = _scale.device - _scale = _scale.to("cpu") - _growth_tracker = _growth_tracker.to("cpu") - - core._amp_update_scale_( - _scale, - _growth_tracker, - found_inf_combined, - self._growth_factor, - self._backoff_factor, - self._growth_interval, - ) - - _scale = _scale.to(to_device) - _growth_tracker = _growth_tracker.to(to_device) - # To prepare for next iteration, clear the data collected from optimizers this iteration. - self._per_optimizer_states = defaultdict(_refresh_per_optimizer_state) - -def gradscaler_init(): - torch.xpu.amp.GradScaler = ipex.cpu.autocast._grad_scaler.GradScaler - torch.xpu.amp.GradScaler._unscale_grads_ = _unscale_grads_ - torch.xpu.amp.GradScaler.unscale_ = unscale_ - torch.xpu.amp.GradScaler.update = update - return torch.xpu.amp.GradScaler \ No newline at end of file diff --git a/infer/modules/ipex/hijacks.py b/infer/modules/ipex/hijacks.py deleted file mode 100644 index b06f3a9c1a70ef515c30d0e7d749923ecb8d0bfe..0000000000000000000000000000000000000000 --- a/infer/modules/ipex/hijacks.py +++ /dev/null @@ -1,196 +0,0 @@ -import contextlib -import importlib -import torch -import intel_extension_for_pytorch as ipex # pylint: disable=import-error, unused-import - -# pylint: disable=protected-access, missing-function-docstring, line-too-long, unnecessary-lambda, no-else-return - -class CondFunc: # pylint: disable=missing-class-docstring - def __new__(cls, orig_func, sub_func, cond_func): - self = super(CondFunc, cls).__new__(cls) - if isinstance(orig_func, str): - func_path = orig_func.split('.') - for i in range(len(func_path)-1, -1, -1): - try: - resolved_obj = importlib.import_module('.'.join(func_path[:i])) - break - except ImportError: - pass - for attr_name in func_path[i:-1]: - resolved_obj = getattr(resolved_obj, attr_name) - orig_func = getattr(resolved_obj, func_path[-1]) - setattr(resolved_obj, func_path[-1], lambda *args, **kwargs: self(*args, **kwargs)) - self.__init__(orig_func, sub_func, cond_func) - return lambda *args, **kwargs: self(*args, **kwargs) - def __init__(self, orig_func, sub_func, cond_func): - self.__orig_func = orig_func - self.__sub_func = sub_func - self.__cond_func = cond_func - def __call__(self, *args, **kwargs): - if not self.__cond_func or self.__cond_func(self.__orig_func, *args, **kwargs): - return self.__sub_func(self.__orig_func, *args, **kwargs) - else: - return self.__orig_func(*args, **kwargs) - -_utils = torch.utils.data._utils -def _shutdown_workers(self): - if torch.utils.data._utils is None or torch.utils.data._utils.python_exit_status is True or torch.utils.data._utils.python_exit_status is None: - return - if hasattr(self, "_shutdown") and not self._shutdown: - self._shutdown = True - try: - if hasattr(self, '_pin_memory_thread'): - self._pin_memory_thread_done_event.set() - self._worker_result_queue.put((None, None)) - self._pin_memory_thread.join() - self._worker_result_queue.cancel_join_thread() - self._worker_result_queue.close() - self._workers_done_event.set() - for worker_id in range(len(self._workers)): - if self._persistent_workers or self._workers_status[worker_id]: - self._mark_worker_as_unavailable(worker_id, shutdown=True) - for w in self._workers: # pylint: disable=invalid-name - w.join(timeout=torch.utils.data._utils.MP_STATUS_CHECK_INTERVAL) - for q in self._index_queues: # pylint: disable=invalid-name - q.cancel_join_thread() - q.close() - finally: - if self._worker_pids_set: - torch.utils.data._utils.signal_handling._remove_worker_pids(id(self)) - self._worker_pids_set = False - for w in self._workers: # pylint: disable=invalid-name - if w.is_alive(): - w.terminate() - -class DummyDataParallel(torch.nn.Module): # pylint: disable=missing-class-docstring, unused-argument, too-few-public-methods - def __new__(cls, module, device_ids=None, output_device=None, dim=0): # pylint: disable=unused-argument - if isinstance(device_ids, list) and len(device_ids) > 1: - print("IPEX backend doesn't support DataParallel on multiple XPU devices") - return module.to("xpu") - -def return_null_context(*args, **kwargs): # pylint: disable=unused-argument - return contextlib.nullcontext() - -def check_device(device): - return bool((isinstance(device, torch.device) and device.type == "cuda") or (isinstance(device, str) and "cuda" in device) or isinstance(device, int)) - -def return_xpu(device): - return f"xpu:{device[-1]}" if isinstance(device, str) and ":" in device else f"xpu:{device}" if isinstance(device, int) else torch.device("xpu") if isinstance(device, torch.device) else "xpu" - -def ipex_no_cuda(orig_func, *args, **kwargs): - torch.cuda.is_available = lambda: False - orig_func(*args, **kwargs) - torch.cuda.is_available = torch.xpu.is_available - -original_autocast = torch.autocast -def ipex_autocast(*args, **kwargs): - if len(args) > 0 and args[0] == "cuda": - return original_autocast("xpu", *args[1:], **kwargs) - else: - return original_autocast(*args, **kwargs) - -original_torch_cat = torch.cat -def torch_cat(tensor, *args, **kwargs): - if len(tensor) == 3 and (tensor[0].dtype != tensor[1].dtype or tensor[2].dtype != tensor[1].dtype): - return original_torch_cat([tensor[0].to(tensor[1].dtype), tensor[1], tensor[2].to(tensor[1].dtype)], *args, **kwargs) - else: - return original_torch_cat(tensor, *args, **kwargs) - -original_interpolate = torch.nn.functional.interpolate -def interpolate(tensor, size=None, scale_factor=None, mode='nearest', align_corners=None, recompute_scale_factor=None, antialias=False): # pylint: disable=too-many-arguments - if antialias or align_corners is not None: - return_device = tensor.device - return_dtype = tensor.dtype - return original_interpolate(tensor.to("cpu", dtype=torch.float32), size=size, scale_factor=scale_factor, mode=mode, - align_corners=align_corners, recompute_scale_factor=recompute_scale_factor, antialias=antialias).to(return_device, dtype=return_dtype) - else: - return original_interpolate(tensor, size=size, scale_factor=scale_factor, mode=mode, - align_corners=align_corners, recompute_scale_factor=recompute_scale_factor, antialias=antialias) - -original_linalg_solve = torch.linalg.solve -def linalg_solve(A, B, *args, **kwargs): # pylint: disable=invalid-name - if A.device != torch.device("cpu") or B.device != torch.device("cpu"): - return_device = A.device - return original_linalg_solve(A.to("cpu"), B.to("cpu"), *args, **kwargs).to(return_device) - else: - return original_linalg_solve(A, B, *args, **kwargs) - -def ipex_hijacks(): - CondFunc('torch.Tensor.to', - lambda orig_func, self, device=None, *args, **kwargs: orig_func(self, return_xpu(device), *args, **kwargs), - lambda orig_func, self, device=None, *args, **kwargs: check_device(device)) - CondFunc('torch.Tensor.cuda', - lambda orig_func, self, device=None, *args, **kwargs: orig_func(self, return_xpu(device), *args, **kwargs), - lambda orig_func, self, device=None, *args, **kwargs: check_device(device)) - CondFunc('torch.empty', - lambda orig_func, *args, device=None, **kwargs: orig_func(*args, device=return_xpu(device), **kwargs), - lambda orig_func, *args, device=None, **kwargs: check_device(device)) - CondFunc('torch.load', - lambda orig_func, *args, map_location=None, **kwargs: orig_func(*args, return_xpu(map_location), **kwargs), - lambda orig_func, *args, map_location=None, **kwargs: map_location is None or check_device(map_location)) - CondFunc('torch.randn', - lambda orig_func, *args, device=None, **kwargs: orig_func(*args, device=return_xpu(device), **kwargs), - lambda orig_func, *args, device=None, **kwargs: check_device(device)) - CondFunc('torch.ones', - lambda orig_func, *args, device=None, **kwargs: orig_func(*args, device=return_xpu(device), **kwargs), - lambda orig_func, *args, device=None, **kwargs: check_device(device)) - CondFunc('torch.zeros', - lambda orig_func, *args, device=None, **kwargs: orig_func(*args, device=return_xpu(device), **kwargs), - lambda orig_func, *args, device=None, **kwargs: check_device(device)) - CondFunc('torch.tensor', - lambda orig_func, *args, device=None, **kwargs: orig_func(*args, device=return_xpu(device), **kwargs), - lambda orig_func, *args, device=None, **kwargs: check_device(device)) - CondFunc('torch.linspace', - lambda orig_func, *args, device=None, **kwargs: orig_func(*args, device=return_xpu(device), **kwargs), - lambda orig_func, *args, device=None, **kwargs: check_device(device)) - - CondFunc('torch.Generator', - lambda orig_func, device=None: torch.xpu.Generator(device), - lambda orig_func, device=None: device is not None and device != torch.device("cpu") and device != "cpu") - - CondFunc('torch.batch_norm', - lambda orig_func, input, weight, bias, *args, **kwargs: orig_func(input, - weight if weight is not None else torch.ones(input.size()[1], device=input.device), - bias if bias is not None else torch.zeros(input.size()[1], device=input.device), *args, **kwargs), - lambda orig_func, input, *args, **kwargs: input.device != torch.device("cpu")) - CondFunc('torch.instance_norm', - lambda orig_func, input, weight, bias, *args, **kwargs: orig_func(input, - weight if weight is not None else torch.ones(input.size()[1], device=input.device), - bias if bias is not None else torch.zeros(input.size()[1], device=input.device), *args, **kwargs), - lambda orig_func, input, *args, **kwargs: input.device != torch.device("cpu")) - - #Functions with dtype errors: - CondFunc('torch.nn.modules.GroupNorm.forward', - lambda orig_func, self, input: orig_func(self, input.to(self.weight.data.dtype)), - lambda orig_func, self, input: input.dtype != self.weight.data.dtype) - CondFunc('torch.nn.modules.linear.Linear.forward', - lambda orig_func, self, input: orig_func(self, input.to(self.weight.data.dtype)), - lambda orig_func, self, input: input.dtype != self.weight.data.dtype) - CondFunc('torch.nn.modules.conv.Conv2d.forward', - lambda orig_func, self, input: orig_func(self, input.to(self.weight.data.dtype)), - lambda orig_func, self, input: input.dtype != self.weight.data.dtype) - CondFunc('torch.nn.functional.layer_norm', - lambda orig_func, input, normalized_shape=None, weight=None, *args, **kwargs: - orig_func(input.to(weight.data.dtype), normalized_shape, weight, *args, **kwargs), - lambda orig_func, input, normalized_shape=None, weight=None, *args, **kwargs: - weight is not None and input.dtype != weight.data.dtype) - - #Diffusers Float64 (ARC GPUs doesn't support double or Float64): - if not torch.xpu.has_fp64_dtype(): - CondFunc('torch.from_numpy', - lambda orig_func, ndarray: orig_func(ndarray.astype('float32')), - lambda orig_func, ndarray: ndarray.dtype == float) - - #Broken functions when torch.cuda.is_available is True: - CondFunc('torch.utils.data.dataloader._BaseDataLoaderIter.__init__', - lambda orig_func, *args, **kwargs: ipex_no_cuda(orig_func, *args, **kwargs), - lambda orig_func, *args, **kwargs: True) - - #Functions that make compile mad with CondFunc: - torch.utils.data.dataloader._MultiProcessingDataLoaderIter._shutdown_workers = _shutdown_workers - torch.nn.DataParallel = DummyDataParallel - torch.autocast = ipex_autocast - torch.cat = torch_cat - torch.linalg.solve = linalg_solve - torch.nn.functional.interpolate = interpolate - torch.backends.cuda.sdp_kernel = return_null_context \ No newline at end of file diff --git a/infer/modules/onnx/export.py b/infer/modules/onnx/export.py deleted file mode 100644 index ed4a4162ff04b7e12642fcbe96847f8ea9db06aa..0000000000000000000000000000000000000000 --- a/infer/modules/onnx/export.py +++ /dev/null @@ -1,52 +0,0 @@ -import torch - -from infer.lib.infer_pack.models_onnx import SynthesizerTrnMsNSFsidM - - -def export_onnx(ModelPath, ExportedPath): - cpt = torch.load(ModelPath, map_location="cpu") - cpt["config"][-3] = cpt["weight"]["emb_g.weight"].shape[0] - vec_channels = 256 if cpt.get("version", "v1") == "v1" else 768 - - test_phone = torch.rand(1, 200, vec_channels) # hidden unit - test_phone_lengths = torch.tensor([200]).long() # hidden unit 长度(貌似没啥用) - test_pitch = torch.randint(size=(1, 200), low=5, high=255) # 基频(单位赫兹) - test_pitchf = torch.rand(1, 200) # nsf基频 - test_ds = torch.LongTensor([0]) # 说话人ID - test_rnd = torch.rand(1, 192, 200) # 噪声(加入随机因子) - - device = "cpu" # 导出时设备(不影响使用模型) - - net_g = SynthesizerTrnMsNSFsidM( - *cpt["config"], is_half=False, version=cpt.get("version", "v1") - ) # fp32导出(C++要支持fp16必须手动将内存重新排列所以暂时不用fp16) - net_g.load_state_dict(cpt["weight"], strict=False) - input_names = ["phone", "phone_lengths", "pitch", "pitchf", "ds", "rnd"] - output_names = [ - "audio", - ] - # net_g.construct_spkmixmap(n_speaker) 多角色混合轨道导出 - torch.onnx.export( - net_g, - ( - test_phone.to(device), - test_phone_lengths.to(device), - test_pitch.to(device), - test_pitchf.to(device), - test_ds.to(device), - test_rnd.to(device), - ), - ExportedPath, - dynamic_axes={ - "phone": [1], - "pitch": [1], - "pitchf": [1], - "rnd": [2], - }, - do_constant_folding=False, - opset_version=13, - verbose=False, - input_names=input_names, - output_names=output_names, - ) - return "Finished" diff --git a/infer/modules/train/extract/extract_f0_print.py b/infer/modules/train/extract/extract_f0_print.py deleted file mode 100644 index 14ef598d73b807974204664f100c828918199816..0000000000000000000000000000000000000000 --- a/infer/modules/train/extract/extract_f0_print.py +++ /dev/null @@ -1,298 +0,0 @@ -import os -import sys -import traceback - -import parselmouth - -now_dir = os.getcwd() -sys.path.append(now_dir) -import logging -from LazyImport import lazyload - -import numpy as np -import pyworld -torchcrepe = lazyload("torchcrepe") # Fork Feature. Crepe algo for training and preprocess -torch = lazyload("torch") -#from torch import Tensor # Fork Feature. Used for pitch prediction for torch crepe. -tqdm = lazyload("tqdm") -from infer.lib.audio import load_audio - -logging.getLogger("numba").setLevel(logging.WARNING) -from multiprocessing import Process - -exp_dir = sys.argv[1] -f = open("%s/extract_f0_feature.log" % exp_dir, "a+") - -DoFormant = False -Quefrency = 1.0 -Timbre = 1.0 - -def printt(strr): - print(strr) - f.write(f"{strr}\n") - f.flush() - - -n_p = int(sys.argv[2]) -f0method = sys.argv[3] -extraction_crepe_hop_length = 0 -try: - extraction_crepe_hop_length = int(sys.argv[4]) -except: - print("Temp Issue. echl is not being passed with argument!") - extraction_crepe_hop_length = 128 - -class FeatureInput(object): - def __init__(self, samplerate=16000, hop_size=160): - self.fs = samplerate - self.hop = hop_size - - self.f0_bin = 256 - self.f0_max = 1100.0 - self.f0_min = 50.0 - self.f0_mel_min = 1127 * np.log(1 + self.f0_min / 700) - self.f0_mel_max = 1127 * np.log(1 + self.f0_max / 700) - - def mncrepe(self, method, x, p_len, crepe_hop_length): - f0 = None - torch_device_index = 0 - torch_device = torch.device( - f"cuda:{torch_device_index % torch.cuda.device_count()}" - ) if torch.cuda.is_available() \ - else torch.device("mps") if torch.backends.mps.is_available() \ - else torch.device("cpu") - - audio = torch.from_numpy(x.astype(np.float32)).to(torch_device, copy=True) - audio /= torch.quantile(torch.abs(audio), 0.999) - audio = torch.unsqueeze(audio, dim=0) - if audio.ndim == 2 and audio.shape[0] > 1: - audio = torch.mean(audio, dim=0, keepdim=True).detach() - audio = audio.detach() - - if method == 'mangio-crepe': - pitch: torch.Tensor = torchcrepe.predict( - audio, - self.fs, - crepe_hop_length, - self.f0_min, - self.f0_max, - "full", - batch_size=crepe_hop_length * 2, - device=torch_device, - pad=True, - ) - p_len = p_len or x.shape[0] // crepe_hop_length - # Resize the pitch - source = np.array(pitch.squeeze(0).cpu().float().numpy()) - source[source < 0.001] = np.nan - target = np.interp( - np.arange(0, len(source) * p_len, len(source)) / p_len, - np.arange(0, len(source)), - source, - ) - f0 = np.nan_to_num(target) - - elif method == 'crepe': - batch_size = 512 - audio = torch.tensor(np.copy(x))[None].float() - f0, pd = torchcrepe.predict( - audio, - self.fs, - 160, - self.f0_min, - self.f0_max, - "full", - batch_size=batch_size, - device=torch_device, - return_periodicity=True, - ) - pd = torchcrepe.filter.median(pd, 3) - f0 = torchcrepe.filter.mean(f0, 3) - f0[pd < 0.1] = 0 - f0 = f0[0].cpu().numpy() - f0 = f0[1:] # Get rid of extra first frame - - return f0 - - def get_pm(self, x, p_len): - f0 = parselmouth.Sound(x, self.fs).to_pitch_ac( - time_step=160 / 16000, - voicing_threshold=0.6, - pitch_floor=self.f0_min, - pitch_ceiling=self.f0_max, - ).selected_array["frequency"] - - return np.pad( - f0, - [[max(0, (p_len - len(f0) + 1) // 2), max(0, p_len - len(f0) - (p_len - len(f0) + 1) // 2)]], - mode="constant" - ) - - def get_harvest(self, x): - f0_spectral = pyworld.harvest( - x.astype(np.double), - fs=self.fs, - f0_ceil=self.f0_max, - f0_floor=self.f0_min, - frame_period=1000 * self.hop / self.fs, - ) - return pyworld.stonemask(x.astype(np.double), *f0_spectral, self.fs) - - def get_dio(self, x): - f0_spectral = pyworld.dio( - x.astype(np.double), - fs=self.fs, - f0_ceil=self.f0_max, - f0_floor=self.f0_min, - frame_period=1000 * self.hop / self.fs, - ) - return pyworld.stonemask(x.astype(np.double), *f0_spectral, self.fs) - - def get_rmvpe(self, x): - if hasattr(self, "model_rmvpe") == False: - from infer.lib.rmvpe import RMVPE - - print("Loading rmvpe model") - self.model_rmvpe = RMVPE( - "assets/rmvpe/rmvpe.pt", is_half=False, device="cpu" - ) - return self.model_rmvpe.infer_from_audio(x, thred=0.03) - - def get_rmvpe_dml(self, x): - ... - - def get_f0_method_dict(self): - return { - "pm": self.get_pm, - "harvest": self.get_harvest, - "dio": self.get_dio, - "rmvpe": self.get_rmvpe - } - - def get_f0_hybrid_computation( - self, - methods_str, - x, - p_len, - crepe_hop_length, - ): - # Get various f0 methods from input to use in the computation stack - s = methods_str - s = s.split("hybrid")[1] - s = s.replace("[", "").replace("]", "") - methods = s.split("+") - f0_computation_stack = [] - - for method in methods: - if method in self.f0_method_dict: - f0 = self.f0_method_dict[method](x, p_len) if method == 'pm' else self.f0_method_dict[method](x) - f0_computation_stack.append(f0) - elif method == 'crepe' or method == 'mangio-crepe': - self.the_other_complex_function(x, method, crepe_hop_length) - - if len(f0_computation_stack) != 0: - f0_median_hybrid = np.nanmedian(f0_computation_stack, axis=0) if len(f0_computation_stack)>1 else f0_computation_stack[0] - return f0_median_hybrid - else: - raise ValueError("No valid methods were provided") - - def compute_f0(self, path, f0_method, crepe_hop_length): - x = load_audio(path, self.fs, DoFormant, Quefrency, Timbre) - p_len = x.shape[0] // self.hop - - if f0_method in self.f0_method_dict: - f0 = self.f0_method_dict[f0_method](x, p_len) if f0_method == 'pm' else self.f0_method_dict[f0_method](x) - elif f0_method in ['crepe', 'mangio-crepe']: - f0 = self.mncrepe(f0_method, x, p_len, crepe_hop_length) - elif "hybrid" in f0_method: # EXPERIMENTAL - # Perform hybrid median pitch estimation - f0 = self.get_f0_hybrid_computation( - f0_method, - x, - p_len, - crepe_hop_length, - ) - return f0 - - def coarse_f0(self, f0): - f0_mel = 1127 * np.log(1 + f0 / 700) - f0_mel[f0_mel > 0] = (f0_mel[f0_mel > 0] - self.f0_mel_min) * ( - self.f0_bin - 2 - ) / (self.f0_mel_max - self.f0_mel_min) + 1 - - # use 0 or 1 - f0_mel[f0_mel <= 1] = 1 - f0_mel[f0_mel > self.f0_bin - 1] = self.f0_bin - 1 - f0_coarse = np.rint(f0_mel).astype(int) - assert f0_coarse.max() <= 255 and f0_coarse.min() >= 1, ( - f0_coarse.max(), - f0_coarse.min(), - ) - return f0_coarse - - def go(self, paths, f0_method, crepe_hop_length, thread_n): - if len(paths) == 0: - printt("no-f0-todo") - return - with tqdm.tqdm(total=len(paths), leave=True, position=thread_n) as pbar: - description = f"thread:{thread_n}, f0ing, Hop-Length:{crepe_hop_length}" - pbar.set_description(description) - - for idx, (inp_path, opt_path1, opt_path2) in enumerate(paths): - try: - if ( - os.path.exists(opt_path1 + ".npy") - and os.path.exists(opt_path2 + ".npy") - ): - pbar.update(1) - continue - - featur_pit = self.compute_f0(inp_path, f0_method, crepe_hop_length) - np.save( - opt_path2, - featur_pit, - allow_pickle=False, - ) # nsf - coarse_pit = self.coarse_f0(featur_pit) - np.save( - opt_path1, - coarse_pit, - allow_pickle=False, - ) # ori - pbar.update(1) - except Exception as e: - printt(f"f0fail-{idx}-{inp_path}-{traceback.format_exc()}") - - -if __name__ == "__main__": - # exp_dir=r"E:\codes\py39\dataset\mi-test" - # n_p=16 - # f = open("%s/log_extract_f0.log"%exp_dir, "w") - printt(sys.argv) - featureInput = FeatureInput() - paths = [] - inp_root = "%s/1_16k_wavs" % (exp_dir) - opt_root1 = "%s/2a_f0" % (exp_dir) - opt_root2 = "%s/2b-f0nsf" % (exp_dir) - - os.makedirs(opt_root1, exist_ok=True) - os.makedirs(opt_root2, exist_ok=True) - for name in sorted(list(os.listdir(inp_root))): - inp_path = "%s/%s" % (inp_root, name) - if "spec" in inp_path: - continue - opt_path1 = "%s/%s" % (opt_root1, name) - opt_path2 = "%s/%s" % (opt_root2, name) - paths.append([inp_path, opt_path1, opt_path2]) - - ps = [] - print("Using f0 method: " + f0method) - for i in range(n_p): - p = Process( - target=featureInput.go, - args=(paths[i::n_p], f0method, extraction_crepe_hop_length, i), - ) - ps.append(p) - p.start() - for i in range(n_p): - ps[i].join() \ No newline at end of file diff --git a/infer/modules/train/extract/extract_f0_rmvpe.py b/infer/modules/train/extract/extract_f0_rmvpe.py deleted file mode 100644 index c6c90440d9e612b37c6d5a514786a6d0fffb19ba..0000000000000000000000000000000000000000 --- a/infer/modules/train/extract/extract_f0_rmvpe.py +++ /dev/null @@ -1,141 +0,0 @@ -import os -import sys -import traceback - -import parselmouth - -now_dir = os.getcwd() -sys.path.append(now_dir) -import logging - -import numpy as np -import pyworld - -from infer.lib.audio import load_audio - -logging.getLogger("numba").setLevel(logging.WARNING) - -n_part = int(sys.argv[1]) -i_part = int(sys.argv[2]) -i_gpu = sys.argv[3] -os.environ["CUDA_VISIBLE_DEVICES"] = str(i_gpu) -exp_dir = sys.argv[4] -is_half = sys.argv[5] -f = open("%s/extract_f0_feature.log" % exp_dir, "a+") - - -def printt(strr): - print(strr) - f.write("%s\n" % strr) - f.flush() - - -class FeatureInput(object): - def __init__(self, samplerate=16000, hop_size=160): - self.fs = samplerate - self.hop = hop_size - - self.f0_bin = 256 - self.f0_max = 1100.0 - self.f0_min = 50.0 - self.f0_mel_min = 1127 * np.log(1 + self.f0_min / 700) - self.f0_mel_max = 1127 * np.log(1 + self.f0_max / 700) - - def compute_f0(self, path, f0_method): - x = load_audio(path, self.fs) - # p_len = x.shape[0] // self.hop - if f0_method == "rmvpe": - if hasattr(self, "model_rmvpe") == False: - from infer.lib.rmvpe import RMVPE - - print("Loading rmvpe model") - self.model_rmvpe = RMVPE( - "assets/rmvpe/rmvpe.pt", is_half=is_half, device="cuda" - ) - f0 = self.model_rmvpe.infer_from_audio(x, thred=0.03) - return f0 - - def coarse_f0(self, f0): - f0_mel = 1127 * np.log(1 + f0 / 700) - f0_mel[f0_mel > 0] = (f0_mel[f0_mel > 0] - self.f0_mel_min) * ( - self.f0_bin - 2 - ) / (self.f0_mel_max - self.f0_mel_min) + 1 - - # use 0 or 1 - f0_mel[f0_mel <= 1] = 1 - f0_mel[f0_mel > self.f0_bin - 1] = self.f0_bin - 1 - f0_coarse = np.rint(f0_mel).astype(int) - assert f0_coarse.max() <= 255 and f0_coarse.min() >= 1, ( - f0_coarse.max(), - f0_coarse.min(), - ) - return f0_coarse - - def go(self, paths, f0_method): - if len(paths) == 0: - printt("no-f0-todo") - else: - printt("todo-f0-%s" % len(paths)) - n = max(len(paths) // 5, 1) # 每个进程最多打印5条 - for idx, (inp_path, opt_path1, opt_path2) in enumerate(paths): - try: - if idx % n == 0: - printt("f0ing,now-%s,all-%s,-%s" % (idx, len(paths), inp_path)) - if ( - os.path.exists(opt_path1 + ".npy") == True - and os.path.exists(opt_path2 + ".npy") == True - ): - continue - featur_pit = self.compute_f0(inp_path, f0_method) - np.save( - opt_path2, - featur_pit, - allow_pickle=False, - ) # nsf - coarse_pit = self.coarse_f0(featur_pit) - np.save( - opt_path1, - coarse_pit, - allow_pickle=False, - ) # ori - except: - printt("f0fail-%s-%s-%s" % (idx, inp_path, traceback.format_exc())) - - -if __name__ == "__main__": - # exp_dir=r"E:\codes\py39\dataset\mi-test" - # n_p=16 - # f = open("%s/log_extract_f0.log"%exp_dir, "w") - printt(sys.argv) - featureInput = FeatureInput() - paths = [] - inp_root = "%s/1_16k_wavs" % (exp_dir) - opt_root1 = "%s/2a_f0" % (exp_dir) - opt_root2 = "%s/2b-f0nsf" % (exp_dir) - - os.makedirs(opt_root1, exist_ok=True) - os.makedirs(opt_root2, exist_ok=True) - for name in sorted(list(os.listdir(inp_root))): - inp_path = "%s/%s" % (inp_root, name) - if "spec" in inp_path: - continue - opt_path1 = "%s/%s" % (opt_root1, name) - opt_path2 = "%s/%s" % (opt_root2, name) - paths.append([inp_path, opt_path1, opt_path2]) - try: - featureInput.go(paths[i_part::n_part], "rmvpe") - except: - printt("f0_all_fail-%s" % (traceback.format_exc())) - # ps = [] - # for i in range(n_p): - # p = Process( - # target=featureInput.go, - # args=( - # paths[i::n_p], - # f0method, - # ), - # ) - # ps.append(p) - # p.start() - # for i in range(n_p): - # ps[i].join() diff --git a/infer/modules/train/extract/extract_f0_rmvpe_dml.py b/infer/modules/train/extract/extract_f0_rmvpe_dml.py deleted file mode 100644 index 6abb1898550664ca600cebbb6d37ba0de8a3d312..0000000000000000000000000000000000000000 --- a/infer/modules/train/extract/extract_f0_rmvpe_dml.py +++ /dev/null @@ -1,139 +0,0 @@ -import os -import sys -import traceback - -import parselmouth - -now_dir = os.getcwd() -sys.path.append(now_dir) -import logging - -import numpy as np -import pyworld - -from infer.lib.audio import load_audio - -logging.getLogger("numba").setLevel(logging.WARNING) - -exp_dir = sys.argv[1] -import torch_directml - -device = torch_directml.device(torch_directml.default_device()) -f = open("%s/extract_f0_feature.log" % exp_dir, "a+") - - -def printt(strr): - print(strr) - f.write("%s\n" % strr) - f.flush() - - -class FeatureInput(object): - def __init__(self, samplerate=16000, hop_size=160): - self.fs = samplerate - self.hop = hop_size - - self.f0_bin = 256 - self.f0_max = 1100.0 - self.f0_min = 50.0 - self.f0_mel_min = 1127 * np.log(1 + self.f0_min / 700) - self.f0_mel_max = 1127 * np.log(1 + self.f0_max / 700) - - def compute_f0(self, path, f0_method): - x = load_audio(path, self.fs) - # p_len = x.shape[0] // self.hop - if f0_method == "rmvpe": - if hasattr(self, "model_rmvpe") == False: - from infer.lib.rmvpe import RMVPE - - print("Loading rmvpe model") - self.model_rmvpe = RMVPE( - "assets/rmvpe/rmvpe.pt", is_half=False, device=device - ) - f0 = self.model_rmvpe.infer_from_audio(x, thred=0.03) - return f0 - - def coarse_f0(self, f0): - f0_mel = 1127 * np.log(1 + f0 / 700) - f0_mel[f0_mel > 0] = (f0_mel[f0_mel > 0] - self.f0_mel_min) * ( - self.f0_bin - 2 - ) / (self.f0_mel_max - self.f0_mel_min) + 1 - - # use 0 or 1 - f0_mel[f0_mel <= 1] = 1 - f0_mel[f0_mel > self.f0_bin - 1] = self.f0_bin - 1 - f0_coarse = np.rint(f0_mel).astype(int) - assert f0_coarse.max() <= 255 and f0_coarse.min() >= 1, ( - f0_coarse.max(), - f0_coarse.min(), - ) - return f0_coarse - - def go(self, paths, f0_method): - if len(paths) == 0: - printt("no-f0-todo") - else: - printt("todo-f0-%s" % len(paths)) - n = max(len(paths) // 5, 1) # 每个进程最多打印5条 - for idx, (inp_path, opt_path1, opt_path2) in enumerate(paths): - try: - if idx % n == 0: - printt("f0ing,now-%s,all-%s,-%s" % (idx, len(paths), inp_path)) - if ( - os.path.exists(opt_path1 + ".npy") == True - and os.path.exists(opt_path2 + ".npy") == True - ): - continue - featur_pit = self.compute_f0(inp_path, f0_method) - np.save( - opt_path2, - featur_pit, - allow_pickle=False, - ) # nsf - coarse_pit = self.coarse_f0(featur_pit) - np.save( - opt_path1, - coarse_pit, - allow_pickle=False, - ) # ori - except: - printt("f0fail-%s-%s-%s" % (idx, inp_path, traceback.format_exc())) - - -if __name__ == "__main__": - # exp_dir=r"E:\codes\py39\dataset\mi-test" - # n_p=16 - # f = open("%s/log_extract_f0.log"%exp_dir, "w") - printt(sys.argv) - featureInput = FeatureInput() - paths = [] - inp_root = "%s/1_16k_wavs" % (exp_dir) - opt_root1 = "%s/2a_f0" % (exp_dir) - opt_root2 = "%s/2b-f0nsf" % (exp_dir) - - os.makedirs(opt_root1, exist_ok=True) - os.makedirs(opt_root2, exist_ok=True) - for name in sorted(list(os.listdir(inp_root))): - inp_path = "%s/%s" % (inp_root, name) - if "spec" in inp_path: - continue - opt_path1 = "%s/%s" % (opt_root1, name) - opt_path2 = "%s/%s" % (opt_root2, name) - paths.append([inp_path, opt_path1, opt_path2]) - try: - featureInput.go(paths, "rmvpe") - except: - printt("f0_all_fail-%s" % (traceback.format_exc())) - # ps = [] - # for i in range(n_p): - # p = Process( - # target=featureInput.go, - # args=( - # paths[i::n_p], - # f0method, - # ), - # ) - # ps.append(p) - # p.start() - # for i in range(n_p): - # ps[i].join() diff --git a/infer/modules/train/extract_feature_print.py b/infer/modules/train/extract_feature_print.py deleted file mode 100644 index f771dd9b8ba92262e6844e7b5781de43c342833a..0000000000000000000000000000000000000000 --- a/infer/modules/train/extract_feature_print.py +++ /dev/null @@ -1,137 +0,0 @@ -import os -import sys -import traceback - -os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1" -os.environ["PYTORCH_MPS_HIGH_WATERMARK_RATIO"] = "0.0" - -device = sys.argv[1] -n_part = int(sys.argv[2]) -i_part = int(sys.argv[3]) -if len(sys.argv) == 6: - exp_dir = sys.argv[4] - version = sys.argv[5] -else: - i_gpu = sys.argv[4] - exp_dir = sys.argv[5] - os.environ["CUDA_VISIBLE_DEVICES"] = str(i_gpu) - version = sys.argv[6] -import fairseq -import numpy as np -import soundfile as sf -import torch -import torch.nn.functional as F - -if "privateuseone" not in device: - device = "cpu" - if torch.cuda.is_available(): - device = "cuda" - elif torch.backends.mps.is_available(): - device = "mps" -else: - import torch_directml - - device = torch_directml.device(torch_directml.default_device()) - - def forward_dml(ctx, x, scale): - ctx.scale = scale - res = x.clone().detach() - return res - - fairseq.modules.grad_multiply.GradMultiply.forward = forward_dml - -f = open("%s/extract_f0_feature.log" % exp_dir, "a+") - - -def printt(strr): - print(strr) - f.write("%s\n" % strr) - f.flush() - - -printt(sys.argv) -model_path = "assets/hubert/hubert_base.pt" - -printt(exp_dir) -wavPath = "%s/1_16k_wavs" % exp_dir -outPath = ( - "%s/3_feature256" % exp_dir if version == "v1" else "%s/3_feature768" % exp_dir -) -os.makedirs(outPath, exist_ok=True) - - -# wave must be 16k, hop_size=320 -def readwave(wav_path, normalize=False): - wav, sr = sf.read(wav_path) - assert sr == 16000 - feats = torch.from_numpy(wav).float() - if feats.dim() == 2: # double channels - feats = feats.mean(-1) - assert feats.dim() == 1, feats.dim() - if normalize: - with torch.no_grad(): - feats = F.layer_norm(feats, feats.shape) - feats = feats.view(1, -1) - return feats - - -# HuBERT model -printt("load model(s) from {}".format(model_path)) -# if hubert model is exist -if os.access(model_path, os.F_OK) == False: - printt( - "Error: Extracting is shut down because %s does not exist, you may download it from https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main" - % model_path - ) - exit(0) -models, saved_cfg, task = fairseq.checkpoint_utils.load_model_ensemble_and_task( - [model_path], - suffix="", -) -model = models[0] -model = model.to(device) -printt("move model to %s" % device) -if device not in ["mps", "cpu"]: - model = model.half() -model.eval() - -todo = sorted(list(os.listdir(wavPath)))[i_part::n_part] -n = max(1, len(todo) // 10) # 最多打印十条 -if len(todo) == 0: - printt("no-feature-todo") -else: - printt("all-feature-%s" % len(todo)) - for idx, file in enumerate(todo): - try: - if file.endswith(".wav"): - wav_path = "%s/%s" % (wavPath, file) - out_path = "%s/%s" % (outPath, file.replace("wav", "npy")) - - if os.path.exists(out_path): - continue - - feats = readwave(wav_path, normalize=saved_cfg.task.normalize) - padding_mask = torch.BoolTensor(feats.shape).fill_(False) - inputs = { - "source": feats.half().to(device) - if device not in ["mps", "cpu"] - else feats.to(device), - "padding_mask": padding_mask.to(device), - "output_layer": 9 if version == "v1" else 12, # layer 9 - } - with torch.no_grad(): - logits = model.extract_features(**inputs) - feats = ( - model.final_proj(logits[0]) if version == "v1" else logits[0] - ) - - feats = feats.squeeze(0).float().cpu().numpy() - if np.isnan(feats).sum() == 0: - np.save(out_path, feats, allow_pickle=False) - else: - printt("%s-contains nan" % file) - if idx % n == 0: - printt("now-%s,all-%s,%s,%s" % (len(todo), idx, file, feats.shape)) - except: - printt(traceback.format_exc()) - printt("all-feature-done") diff --git a/infer/modules/train/preprocess.py b/infer/modules/train/preprocess.py deleted file mode 100644 index fbe81307ee661a95b2ac479336671a44ee02151a..0000000000000000000000000000000000000000 --- a/infer/modules/train/preprocess.py +++ /dev/null @@ -1,147 +0,0 @@ -import multiprocessing -import os -import sys - -from scipy import signal - -now_dir = os.getcwd() -sys.path.append(now_dir) -print(sys.argv) -inp_root = sys.argv[1] -sr = int(sys.argv[2]) -n_p = int(sys.argv[3]) -exp_dir = sys.argv[4] -noparallel = sys.argv[5] == "True" -per = float(sys.argv[6]) -import multiprocessing -import os -import traceback - -import librosa -import numpy as np -from scipy.io import wavfile - -from infer.lib.audio import load_audio -from infer.lib.slicer2 import Slicer - -mutex = multiprocessing.Lock() -f = open("%s/preprocess.log" % exp_dir, "a+") - - -def println(strr): - mutex.acquire() - print(strr) - f.write("%s\n" % strr) - f.flush() - mutex.release() - - -class PreProcess: - def __init__(self, sr, exp_dir, per=3.7): - self.slicer = Slicer( - sr=sr, - threshold=-42, - min_length=1500, - min_interval=400, - hop_size=15, - max_sil_kept=500, - ) - self.sr = sr - self.bh, self.ah = signal.butter(N=5, Wn=48, btype="high", fs=self.sr) - self.per = per - self.overlap = 0.3 - self.tail = self.per + self.overlap - self.max = 0.9 - self.alpha = 0.75 - self.exp_dir = exp_dir - self.gt_wavs_dir = "%s/0_gt_wavs" % exp_dir - self.wavs16k_dir = "%s/1_16k_wavs" % exp_dir - os.makedirs(self.exp_dir, exist_ok=True) - os.makedirs(self.gt_wavs_dir, exist_ok=True) - os.makedirs(self.wavs16k_dir, exist_ok=True) - - def norm_write(self, tmp_audio, idx0, idx1): - tmp_max = np.abs(tmp_audio).max() - if tmp_max > 2.5: - print("%s-%s-%s-filtered" % (idx0, idx1, tmp_max)) - return - tmp_audio = (tmp_audio / tmp_max * (self.max * self.alpha)) + ( - 1 - self.alpha - ) * tmp_audio - wavfile.write( - "%s/%s_%s.wav" % (self.gt_wavs_dir, idx0, idx1), - self.sr, - tmp_audio.astype(np.float32), - ) - tmp_audio = librosa.resample( - tmp_audio, orig_sr=self.sr, target_sr=16000 - ) # , res_type="soxr_vhq" - wavfile.write( - "%s/%s_%s.wav" % (self.wavs16k_dir, idx0, idx1), - 16000, - tmp_audio.astype(np.float32), - ) - - def pipeline(self, path, idx0): - try: - audio = load_audio(path, self.sr) - # zero phased digital filter cause pre-ringing noise... - # audio = signal.filtfilt(self.bh, self.ah, audio) - audio = signal.lfilter(self.bh, self.ah, audio) - - idx1 = 0 - for audio in self.slicer.slice(audio): - i = 0 - while 1: - start = int(self.sr * (self.per - self.overlap) * i) - i += 1 - if len(audio[start:]) > self.tail * self.sr: - tmp_audio = audio[start : start + int(self.per * self.sr)] - self.norm_write(tmp_audio, idx0, idx1) - idx1 += 1 - else: - tmp_audio = audio[start:] - idx1 += 1 - break - self.norm_write(tmp_audio, idx0, idx1) - println("%s->Suc." % path) - except: - println("%s->%s" % (path, traceback.format_exc())) - - def pipeline_mp(self, infos): - for path, idx0 in infos: - self.pipeline(path, idx0) - - def pipeline_mp_inp_dir(self, inp_root, n_p): - try: - infos = [ - ("%s/%s" % (inp_root, name), idx) - for idx, name in enumerate(sorted(list(os.listdir(inp_root)))) - ] - if noparallel: - for i in range(n_p): - self.pipeline_mp(infos[i::n_p]) - else: - ps = [] - for i in range(n_p): - p = multiprocessing.Process( - target=self.pipeline_mp, args=(infos[i::n_p],) - ) - ps.append(p) - p.start() - for i in range(n_p): - ps[i].join() - except: - println("Fail. %s" % traceback.format_exc()) - - -def preprocess_trainset(inp_root, sr, n_p, exp_dir, per): - pp = PreProcess(sr, exp_dir, per) - println("start preprocess") - println(sys.argv) - pp.pipeline_mp_inp_dir(inp_root, n_p) - println("end preprocess") - - -if __name__ == "__main__": - preprocess_trainset(inp_root, sr, n_p, exp_dir, per) diff --git a/infer/modules/uvr5/mdxnet.py b/infer/modules/uvr5/mdxnet.py deleted file mode 100644 index 86a066893ad99cfed77788027a9deb8ed486a7f2..0000000000000000000000000000000000000000 --- a/infer/modules/uvr5/mdxnet.py +++ /dev/null @@ -1,246 +0,0 @@ -import os -import logging - -logger = logging.getLogger(__name__) - -import librosa -import numpy as np -import soundfile as sf -import torch -from tqdm import tqdm - -cpu = torch.device("cpu") - - -class ConvTDFNetTrim: - def __init__( - self, device, model_name, target_name, L, dim_f, dim_t, n_fft, hop=1024 - ): - super(ConvTDFNetTrim, self).__init__() - - self.dim_f = dim_f - self.dim_t = 2**dim_t - self.n_fft = n_fft - self.hop = hop - self.n_bins = self.n_fft // 2 + 1 - self.chunk_size = hop * (self.dim_t - 1) - self.window = torch.hann_window(window_length=self.n_fft, periodic=True).to( - device - ) - self.target_name = target_name - self.blender = "blender" in model_name - - self.dim_c = 4 - out_c = self.dim_c * 4 if target_name == "*" else self.dim_c - self.freq_pad = torch.zeros( - [1, out_c, self.n_bins - self.dim_f, self.dim_t] - ).to(device) - - self.n = L // 2 - - def stft(self, x): - x = x.reshape([-1, self.chunk_size]) - x = torch.stft( - x, - n_fft=self.n_fft, - hop_length=self.hop, - window=self.window, - center=True, - return_complex=True, - ) - x = torch.view_as_real(x) - x = x.permute([0, 3, 1, 2]) - x = x.reshape([-1, 2, 2, self.n_bins, self.dim_t]).reshape( - [-1, self.dim_c, self.n_bins, self.dim_t] - ) - return x[:, :, : self.dim_f] - - def istft(self, x, freq_pad=None): - freq_pad = ( - self.freq_pad.repeat([x.shape[0], 1, 1, 1]) - if freq_pad is None - else freq_pad - ) - x = torch.cat([x, freq_pad], -2) - c = 4 * 2 if self.target_name == "*" else 2 - x = x.reshape([-1, c, 2, self.n_bins, self.dim_t]).reshape( - [-1, 2, self.n_bins, self.dim_t] - ) - x = x.permute([0, 2, 3, 1]) - x = x.contiguous() - x = torch.view_as_complex(x) - x = torch.istft( - x, n_fft=self.n_fft, hop_length=self.hop, window=self.window, center=True - ) - return x.reshape([-1, c, self.chunk_size]) - - -def get_models(device, dim_f, dim_t, n_fft): - return ConvTDFNetTrim( - device=device, - model_name="Conv-TDF", - target_name="vocals", - L=11, - dim_f=dim_f, - dim_t=dim_t, - n_fft=n_fft, - ) - - -class Predictor: - def __init__(self, args): - import onnxruntime as ort - - logger.info(ort.get_available_providers()) - self.args = args - self.model_ = get_models( - device=cpu, dim_f=args.dim_f, dim_t=args.dim_t, n_fft=args.n_fft - ) - self.model = ort.InferenceSession( - os.path.join(args.onnx, self.model_.target_name + ".onnx"), - providers=[ - "CUDAExecutionProvider", - "DmlExecutionProvider", - "CPUExecutionProvider", - ], - ) - logger.info("ONNX load done") - - def demix(self, mix): - samples = mix.shape[-1] - margin = self.args.margin - chunk_size = self.args.chunks * 44100 - assert not margin == 0, "margin cannot be zero!" - if margin > chunk_size: - margin = chunk_size - - segmented_mix = {} - - if self.args.chunks == 0 or samples < chunk_size: - chunk_size = samples - - counter = -1 - for skip in range(0, samples, chunk_size): - counter += 1 - - s_margin = 0 if counter == 0 else margin - end = min(skip + chunk_size + margin, samples) - - start = skip - s_margin - - segmented_mix[skip] = mix[:, start:end].copy() - if end == samples: - break - - sources = self.demix_base(segmented_mix, margin_size=margin) - """ - mix:(2,big_sample) - segmented_mix:offset->(2,small_sample) - sources:(1,2,big_sample) - """ - return sources - - def demix_base(self, mixes, margin_size): - chunked_sources = [] - progress_bar = tqdm(total=len(mixes)) - progress_bar.set_description("Processing") - for mix in mixes: - cmix = mixes[mix] - sources = [] - n_sample = cmix.shape[1] - model = self.model_ - trim = model.n_fft // 2 - gen_size = model.chunk_size - 2 * trim - pad = gen_size - n_sample % gen_size - mix_p = np.concatenate( - (np.zeros((2, trim)), cmix, np.zeros((2, pad)), np.zeros((2, trim))), 1 - ) - mix_waves = [] - i = 0 - while i < n_sample + pad: - waves = np.array(mix_p[:, i : i + model.chunk_size]) - mix_waves.append(waves) - i += gen_size - mix_waves = torch.tensor(mix_waves, dtype=torch.float32).to(cpu) - with torch.no_grad(): - _ort = self.model - spek = model.stft(mix_waves) - if self.args.denoise: - spec_pred = ( - -_ort.run(None, {"input": -spek.cpu().numpy()})[0] * 0.5 - + _ort.run(None, {"input": spek.cpu().numpy()})[0] * 0.5 - ) - tar_waves = model.istft(torch.tensor(spec_pred)) - else: - tar_waves = model.istft( - torch.tensor(_ort.run(None, {"input": spek.cpu().numpy()})[0]) - ) - tar_signal = ( - tar_waves[:, :, trim:-trim] - .transpose(0, 1) - .reshape(2, -1) - .numpy()[:, :-pad] - ) - - start = 0 if mix == 0 else margin_size - end = None if mix == list(mixes.keys())[::-1][0] else -margin_size - if margin_size == 0: - end = None - sources.append(tar_signal[:, start:end]) - - progress_bar.update(1) - - chunked_sources.append(sources) - _sources = np.concatenate(chunked_sources, axis=-1) - # del self.model - progress_bar.close() - return _sources - - def prediction(self, m, vocal_root, others_root, format): - os.makedirs(vocal_root, exist_ok=True) - os.makedirs(others_root, exist_ok=True) - basename = os.path.basename(m) - mix, rate = librosa.load(m, mono=False, sr=44100) - if mix.ndim == 1: - mix = np.asfortranarray([mix, mix]) - mix = mix.T - sources = self.demix(mix.T) - opt = sources[0].T - if format in ["wav", "flac"]: - sf.write( - "%s/%s_main_vocal.%s" % (vocal_root, basename, format), mix - opt, rate - ) - sf.write("%s/%s_others.%s" % (others_root, basename, format), opt, rate) - else: - path_vocal = "%s/%s_main_vocal.wav" % (vocal_root, basename) - path_other = "%s/%s_others.wav" % (others_root, basename) - sf.write(path_vocal, mix - opt, rate) - sf.write(path_other, opt, rate) - if os.path.exists(path_vocal): - os.system( - "ffmpeg -i %s -vn %s -q:a 2 -y" - % (path_vocal, path_vocal[:-4] + ".%s" % format) - ) - if os.path.exists(path_other): - os.system( - "ffmpeg -i %s -vn %s -q:a 2 -y" - % (path_other, path_other[:-4] + ".%s" % format) - ) - - -class MDXNetDereverb: - def __init__(self, chunks, device): - self.onnx = "assets/uvr5_weights/onnx_dereverb_By_FoxJoy" - self.shifts = 10 # 'Predict with randomised equivariant stabilisation' - self.mixing = "min_mag" # ['default','min_mag','max_mag'] - self.chunks = chunks - self.margin = 44100 - self.dim_t = 9 - self.dim_f = 3072 - self.n_fft = 6144 - self.denoise = True - self.pred = Predictor(self) - self.device = device - - def path_audio(self, input, vocal_root, others_root, format): - self.pred.prediction(input, vocal_root, others_root, format) diff --git a/infer/modules/uvr5/modules.py b/infer/modules/uvr5/modules.py deleted file mode 100644 index f63ac6a794100cc95da21dcba78b23377a1f133d..0000000000000000000000000000000000000000 --- a/infer/modules/uvr5/modules.py +++ /dev/null @@ -1,107 +0,0 @@ -import os -import traceback -import logging - -logger = logging.getLogger(__name__) - -import ffmpeg -import torch - -from configs.config import Config -from infer.modules.uvr5.mdxnet import MDXNetDereverb -from infer.modules.uvr5.preprocess import AudioPre, AudioPreDeEcho - -config = Config() - - -def uvr(model_name, inp_root, save_root_vocal, paths, save_root_ins, agg, format0): - infos = [] - try: - inp_root = inp_root.strip(" ").strip('"').strip("\n").strip('"').strip(" ") - save_root_vocal = ( - save_root_vocal.strip(" ").strip('"').strip("\n").strip('"').strip(" ") - ) - save_root_ins = ( - save_root_ins.strip(" ").strip('"').strip("\n").strip('"').strip(" ") - ) - if model_name == "onnx_dereverb_By_FoxJoy": - pre_fun = MDXNetDereverb(15, config.device) - else: - func = AudioPre if "DeEcho" not in model_name else AudioPreDeEcho - pre_fun = func( - agg=int(agg), - model_path=os.path.join( - os.getenv("weight_uvr5_root"), model_name + ".pth" - ), - device=config.device, - is_half=config.is_half, - ) - if inp_root != "": - paths = [os.path.join(inp_root, name) for name in os.listdir(inp_root)] - else: - paths = [path.name for path in paths] - for path in paths: - inp_path = os.path.join(inp_root, path) - need_reformat = 1 - done = 0 - try: - info = ffmpeg.probe(inp_path, cmd="ffprobe") - if ( - info["streams"][0]["channels"] == 2 - and info["streams"][0]["sample_rate"] == "44100" - ): - need_reformat = 0 - pre_fun._path_audio_( - inp_path, save_root_ins, save_root_vocal, format0 - ) - done = 1 - except: - need_reformat = 1 - traceback.print_exc() - if need_reformat == 1: - tmp_path = "%s/%s.reformatted.wav" % ( - os.path.join(os.environ["TEMP"]), - os.path.basename(inp_path), - ) - os.system( - "ffmpeg -i %s -vn -acodec pcm_s16le -ac 2 -ar 44100 %s -y" - % (inp_path, tmp_path) - ) - inp_path = tmp_path - try: - if done == 0: - pre_fun.path_audio( - inp_path, save_root_ins, save_root_vocal, format0 - ) - infos.append("%s->Success" % (os.path.basename(inp_path))) - yield "\n".join(infos) - except: - try: - if done == 0: - pre_fun._path_audio_( - inp_path, save_root_ins, save_root_vocal, format0 - ) - infos.append("%s->Success" % (os.path.basename(inp_path))) - yield "\n".join(infos) - except: - infos.append( - "%s->%s" % (os.path.basename(inp_path), traceback.format_exc()) - ) - yield "\n".join(infos) - except: - infos.append(traceback.format_exc()) - yield "\n".join(infos) - finally: - try: - if model_name == "onnx_dereverb_By_FoxJoy": - del pre_fun.pred.model - del pre_fun.pred.model_ - else: - del pre_fun.model - del pre_fun - except: - traceback.print_exc() - if torch.cuda.is_available(): - torch.cuda.empty_cache() - logger.info("Executed torch.cuda.empty_cache()") - yield "\n".join(infos) diff --git a/infer/modules/uvr5/preprocess.py b/infer/modules/uvr5/preprocess.py deleted file mode 100644 index 19f11110ea822eeb140fb885c600536290a1adff..0000000000000000000000000000000000000000 --- a/infer/modules/uvr5/preprocess.py +++ /dev/null @@ -1,346 +0,0 @@ -import os -import logging - -logger = logging.getLogger(__name__) - -import librosa -import numpy as np -import soundfile as sf -import torch - -from infer.lib.uvr5_pack.lib_v5 import nets_61968KB as Nets -from infer.lib.uvr5_pack.lib_v5 import spec_utils -from infer.lib.uvr5_pack.lib_v5.model_param_init import ModelParameters -from infer.lib.uvr5_pack.lib_v5.nets_new import CascadedNet -from infer.lib.uvr5_pack.utils import inference - - -class AudioPre: - def __init__(self, agg, model_path, device, is_half): - self.model_path = model_path - self.device = device - self.data = { - # Processing Options - "postprocess": False, - "tta": False, - # Constants - "window_size": 512, - "agg": agg, - "high_end_process": "mirroring", - } - mp = ModelParameters("infer/lib/uvr5_pack/lib_v5/modelparams/4band_v2.json") - model = Nets.CascadedASPPNet(mp.param["bins"] * 2) - cpk = torch.load(model_path, map_location="cpu") - model.load_state_dict(cpk) - model.eval() - if is_half: - model = model.half().to(device) - else: - model = model.to(device) - - self.mp = mp - self.model = model - - def _path_audio_(self, music_file, ins_root=None, vocal_root=None, format="flac"): - if ins_root is None and vocal_root is None: - return "No save root." - name = os.path.basename(music_file) - if ins_root is not None: - os.makedirs(ins_root, exist_ok=True) - if vocal_root is not None: - os.makedirs(vocal_root, exist_ok=True) - X_wave, y_wave, X_spec_s, y_spec_s = {}, {}, {}, {} - bands_n = len(self.mp.param["band"]) - # print(bands_n) - for d in range(bands_n, 0, -1): - bp = self.mp.param["band"][d] - if d == bands_n: # high-end band - ( - X_wave[d], - _, - ) = librosa.core.load( # 理论上librosa读取可能对某些音频有bug,应该上ffmpeg读取,但是太麻烦了弃坑 - music_file, - bp["sr"], - False, - dtype=np.float32, - res_type=bp["res_type"], - ) - if X_wave[d].ndim == 1: - X_wave[d] = np.asfortranarray([X_wave[d], X_wave[d]]) - else: # lower bands - X_wave[d] = librosa.core.resample( - X_wave[d + 1], - self.mp.param["band"][d + 1]["sr"], - bp["sr"], - res_type=bp["res_type"], - ) - # Stft of wave source - X_spec_s[d] = spec_utils.wave_to_spectrogram_mt( - X_wave[d], - bp["hl"], - bp["n_fft"], - self.mp.param["mid_side"], - self.mp.param["mid_side_b2"], - self.mp.param["reverse"], - ) - # pdb.set_trace() - if d == bands_n and self.data["high_end_process"] != "none": - input_high_end_h = (bp["n_fft"] // 2 - bp["crop_stop"]) + ( - self.mp.param["pre_filter_stop"] - self.mp.param["pre_filter_start"] - ) - input_high_end = X_spec_s[d][ - :, bp["n_fft"] // 2 - input_high_end_h : bp["n_fft"] // 2, : - ] - - X_spec_m = spec_utils.combine_spectrograms(X_spec_s, self.mp) - aggresive_set = float(self.data["agg"] / 100) - aggressiveness = { - "value": aggresive_set, - "split_bin": self.mp.param["band"][1]["crop_stop"], - } - with torch.no_grad(): - pred, X_mag, X_phase = inference( - X_spec_m, self.device, self.model, aggressiveness, self.data - ) - # Postprocess - if self.data["postprocess"]: - pred_inv = np.clip(X_mag - pred, 0, np.inf) - pred = spec_utils.mask_silence(pred, pred_inv) - y_spec_m = pred * X_phase - v_spec_m = X_spec_m - y_spec_m - - if ins_root is not None: - if self.data["high_end_process"].startswith("mirroring"): - input_high_end_ = spec_utils.mirroring( - self.data["high_end_process"], y_spec_m, input_high_end, self.mp - ) - wav_instrument = spec_utils.cmb_spectrogram_to_wave( - y_spec_m, self.mp, input_high_end_h, input_high_end_ - ) - else: - wav_instrument = spec_utils.cmb_spectrogram_to_wave(y_spec_m, self.mp) - logger.info("%s instruments done" % name) - if format in ["wav", "flac"]: - sf.write( - os.path.join( - ins_root, - "instrument_{}_{}.{}".format(name, self.data["agg"], format), - ), - (np.array(wav_instrument) * 32768).astype("int16"), - self.mp.param["sr"], - ) # - else: - path = os.path.join( - ins_root, "instrument_{}_{}.wav".format(name, self.data["agg"]) - ) - sf.write( - path, - (np.array(wav_instrument) * 32768).astype("int16"), - self.mp.param["sr"], - ) - if os.path.exists(path): - os.system( - "ffmpeg -i %s -vn %s -q:a 2 -y" - % (path, path[:-4] + ".%s" % format) - ) - if vocal_root is not None: - if self.data["high_end_process"].startswith("mirroring"): - input_high_end_ = spec_utils.mirroring( - self.data["high_end_process"], v_spec_m, input_high_end, self.mp - ) - wav_vocals = spec_utils.cmb_spectrogram_to_wave( - v_spec_m, self.mp, input_high_end_h, input_high_end_ - ) - else: - wav_vocals = spec_utils.cmb_spectrogram_to_wave(v_spec_m, self.mp) - logger.info("%s vocals done" % name) - if format in ["wav", "flac"]: - sf.write( - os.path.join( - vocal_root, - "vocal_{}_{}.{}".format(name, self.data["agg"], format), - ), - (np.array(wav_vocals) * 32768).astype("int16"), - self.mp.param["sr"], - ) - else: - path = os.path.join( - vocal_root, "vocal_{}_{}.wav".format(name, self.data["agg"]) - ) - sf.write( - path, - (np.array(wav_vocals) * 32768).astype("int16"), - self.mp.param["sr"], - ) - if os.path.exists(path): - os.system( - "ffmpeg -i %s -vn %s -q:a 2 -y" - % (path, path[:-4] + ".%s" % format) - ) - - -class AudioPreDeEcho: - def __init__(self, agg, model_path, device, is_half): - self.model_path = model_path - self.device = device - self.data = { - # Processing Options - "postprocess": False, - "tta": False, - # Constants - "window_size": 512, - "agg": agg, - "high_end_process": "mirroring", - } - mp = ModelParameters("infer/lib/uvr5_pack/lib_v5/modelparams/4band_v3.json") - nout = 64 if "DeReverb" in model_path else 48 - model = CascadedNet(mp.param["bins"] * 2, nout) - cpk = torch.load(model_path, map_location="cpu") - model.load_state_dict(cpk) - model.eval() - if is_half: - model = model.half().to(device) - else: - model = model.to(device) - - self.mp = mp - self.model = model - - def _path_audio_( - self, music_file, vocal_root=None, ins_root=None, format="flac" - ): # 3个VR模型vocal和ins是反的 - if ins_root is None and vocal_root is None: - return "No save root." - name = os.path.basename(music_file) - if ins_root is not None: - os.makedirs(ins_root, exist_ok=True) - if vocal_root is not None: - os.makedirs(vocal_root, exist_ok=True) - X_wave, y_wave, X_spec_s, y_spec_s = {}, {}, {}, {} - bands_n = len(self.mp.param["band"]) - # print(bands_n) - for d in range(bands_n, 0, -1): - bp = self.mp.param["band"][d] - if d == bands_n: # high-end band - ( - X_wave[d], - _, - ) = librosa.core.load( # 理论上librosa读取可能对某些音频有bug,应该上ffmpeg读取,但是太麻烦了弃坑 - music_file, - bp["sr"], - False, - dtype=np.float32, - res_type=bp["res_type"], - ) - if X_wave[d].ndim == 1: - X_wave[d] = np.asfortranarray([X_wave[d], X_wave[d]]) - else: # lower bands - X_wave[d] = librosa.core.resample( - X_wave[d + 1], - self.mp.param["band"][d + 1]["sr"], - bp["sr"], - res_type=bp["res_type"], - ) - # Stft of wave source - X_spec_s[d] = spec_utils.wave_to_spectrogram_mt( - X_wave[d], - bp["hl"], - bp["n_fft"], - self.mp.param["mid_side"], - self.mp.param["mid_side_b2"], - self.mp.param["reverse"], - ) - # pdb.set_trace() - if d == bands_n and self.data["high_end_process"] != "none": - input_high_end_h = (bp["n_fft"] // 2 - bp["crop_stop"]) + ( - self.mp.param["pre_filter_stop"] - self.mp.param["pre_filter_start"] - ) - input_high_end = X_spec_s[d][ - :, bp["n_fft"] // 2 - input_high_end_h : bp["n_fft"] // 2, : - ] - - X_spec_m = spec_utils.combine_spectrograms(X_spec_s, self.mp) - aggresive_set = float(self.data["agg"] / 100) - aggressiveness = { - "value": aggresive_set, - "split_bin": self.mp.param["band"][1]["crop_stop"], - } - with torch.no_grad(): - pred, X_mag, X_phase = inference( - X_spec_m, self.device, self.model, aggressiveness, self.data - ) - # Postprocess - if self.data["postprocess"]: - pred_inv = np.clip(X_mag - pred, 0, np.inf) - pred = spec_utils.mask_silence(pred, pred_inv) - y_spec_m = pred * X_phase - v_spec_m = X_spec_m - y_spec_m - - if ins_root is not None: - if self.data["high_end_process"].startswith("mirroring"): - input_high_end_ = spec_utils.mirroring( - self.data["high_end_process"], y_spec_m, input_high_end, self.mp - ) - wav_instrument = spec_utils.cmb_spectrogram_to_wave( - y_spec_m, self.mp, input_high_end_h, input_high_end_ - ) - else: - wav_instrument = spec_utils.cmb_spectrogram_to_wave(y_spec_m, self.mp) - logger.info("%s instruments done" % name) - if format in ["wav", "flac"]: - sf.write( - os.path.join( - ins_root, - "instrument_{}_{}.{}".format(name, self.data["agg"], format), - ), - (np.array(wav_instrument) * 32768).astype("int16"), - self.mp.param["sr"], - ) # - else: - path = os.path.join( - ins_root, "instrument_{}_{}.wav".format(name, self.data["agg"]) - ) - sf.write( - path, - (np.array(wav_instrument) * 32768).astype("int16"), - self.mp.param["sr"], - ) - if os.path.exists(path): - os.system( - "ffmpeg -i %s -vn %s -q:a 2 -y" - % (path, path[:-4] + ".%s" % format) - ) - if vocal_root is not None: - if self.data["high_end_process"].startswith("mirroring"): - input_high_end_ = spec_utils.mirroring( - self.data["high_end_process"], v_spec_m, input_high_end, self.mp - ) - wav_vocals = spec_utils.cmb_spectrogram_to_wave( - v_spec_m, self.mp, input_high_end_h, input_high_end_ - ) - else: - wav_vocals = spec_utils.cmb_spectrogram_to_wave(v_spec_m, self.mp) - logger.info("%s vocals done" % name) - if format in ["wav", "flac"]: - sf.write( - os.path.join( - vocal_root, - "vocal_{}_{}.{}".format(name, self.data["agg"], format), - ), - (np.array(wav_vocals) * 32768).astype("int16"), - self.mp.param["sr"], - ) - else: - path = os.path.join( - vocal_root, "vocal_{}_{}.wav".format(name, self.data["agg"]) - ) - sf.write( - path, - (np.array(wav_vocals) * 32768).astype("int16"), - self.mp.param["sr"], - ) - if os.path.exists(path): - os.system( - "ffmpeg -i %s -vn %s -q:a 2 -y" - % (path, path[:-4] + ".%s" % format) - ) diff --git a/infer/modules/vc/__init__.py b/infer/modules/vc/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/infer/modules/vc/modules.py b/infer/modules/vc/modules.py deleted file mode 100644 index 458cfbe860b23bdd8f07abc2934443e6b8b01c3a..0000000000000000000000000000000000000000 --- a/infer/modules/vc/modules.py +++ /dev/null @@ -1,526 +0,0 @@ -import os, sys -import traceback -import logging -now_dir = os.getcwd() -sys.path.append(now_dir) -logger = logging.getLogger(__name__) -import lib.globals.globals as rvc_globals -import numpy as np -import soundfile as sf -import torch -from io import BytesIO -from infer.lib.audio import load_audio -from infer.lib.audio import wav2 -from infer.lib.infer_pack.models import ( - SynthesizerTrnMs256NSFsid, - SynthesizerTrnMs256NSFsid_nono, - SynthesizerTrnMs768NSFsid, - SynthesizerTrnMs768NSFsid_nono, -) -from infer.modules.vc.pipeline import Pipeline -from infer.modules.vc.utils import * -import time -import scipy.io.wavfile as wavfile - -def note_to_hz(note_name): - SEMITONES = {'C': -9, 'C#': -8, 'D': -7, 'D#': -6, 'E': -5, 'F': -4, 'F#': -3, 'G': -2, 'G#': -1, 'A': 0, 'A#': 1, 'B': 2} - pitch_class, octave = note_name[:-1], int(note_name[-1]) - semitone = SEMITONES[pitch_class] - note_number = 12 * (octave - 4) + semitone - frequency = 440.0 * (2.0 ** (1.0/12)) ** note_number - return frequency - -class VC: - def __init__(self, config): - self.n_spk = None - self.tgt_sr = None - self.net_g = None - self.pipeline = None - self.cpt = None - self.version = None - self.if_f0 = None - self.version = None - self.hubert_model = None - - self.config = config - - def get_vc(self, sid, *to_return_protect): - logger.info("Get sid: " + sid) - - to_return_protect0 = { - "visible": self.if_f0 != 0, - "value": to_return_protect[0] - if self.if_f0 != 0 and to_return_protect - else 0.5, - "__type__": "update", - } - to_return_protect1 = { - "visible": self.if_f0 != 0, - "value": to_return_protect[1] - if self.if_f0 != 0 and to_return_protect - else 0.33, - "__type__": "update", - } - - if not sid: - if self.hubert_model is not None: # 考虑到轮询, 需要加个判断看是否 sid 是由有模型切换到无模型的 - logger.info("Clean model cache") - del ( - self.net_g, - self.n_spk, - self.vc, - self.hubert_model, - self.tgt_sr, - ) # ,cpt - self.hubert_model = ( - self.net_g - ) = self.n_spk = self.vc = self.hubert_model = self.tgt_sr = None - if torch.cuda.is_available(): - torch.cuda.empty_cache() - ###楼下不这么折腾清理不干净 - self.if_f0 = self.cpt.get("f0", 1) - self.version = self.cpt.get("version", "v1") - if self.version == "v1": - if self.if_f0 == 1: - self.net_g = SynthesizerTrnMs256NSFsid( - *self.cpt["config"], is_half=self.config.is_half - ) - else: - self.net_g = SynthesizerTrnMs256NSFsid_nono(*self.cpt["config"]) - elif self.version == "v2": - if self.if_f0 == 1: - self.net_g = SynthesizerTrnMs768NSFsid( - *self.cpt["config"], is_half=self.config.is_half - ) - else: - self.net_g = SynthesizerTrnMs768NSFsid_nono(*self.cpt["config"]) - del self.net_g, self.cpt - if torch.cuda.is_available(): - torch.cuda.empty_cache() - return ( - {"visible": False, "__type__": "update"}, - { - "visible": True, - "value": to_return_protect0, - "__type__": "update", - }, - { - "visible": True, - "value": to_return_protect1, - "__type__": "update", - }, - "", - "", - ) - #person = f'{os.getenv("weight_root")}/{sid}' - person = f'{sid}' - #logger.info(f"Loading: {person}") - logger.info(f"Loading...") - self.cpt = torch.load(person, map_location="cpu") - self.tgt_sr = self.cpt["config"][-1] - self.cpt["config"][-3] = self.cpt["weight"]["emb_g.weight"].shape[0] # n_spk - self.if_f0 = self.cpt.get("f0", 1) - self.version = self.cpt.get("version", "v1") - - synthesizer_class = { - ("v1", 1): SynthesizerTrnMs256NSFsid, - ("v1", 0): SynthesizerTrnMs256NSFsid_nono, - ("v2", 1): SynthesizerTrnMs768NSFsid, - ("v2", 0): SynthesizerTrnMs768NSFsid_nono, - } - - self.net_g = synthesizer_class.get( - (self.version, self.if_f0), SynthesizerTrnMs256NSFsid - )(*self.cpt["config"], is_half=self.config.is_half) - - del self.net_g.enc_q - - self.net_g.load_state_dict(self.cpt["weight"], strict=False) - self.net_g.eval().to(self.config.device) - if self.config.is_half: - self.net_g = self.net_g.half() - else: - self.net_g = self.net_g.float() - - self.pipeline = Pipeline(self.tgt_sr, self.config) - n_spk = self.cpt["config"][-3] - index = {"value": get_index_path_from_model(sid), "__type__": "update"} - logger.info("Select index: " + index["value"]) - - return ( - ( - {"visible": False, "maximum": n_spk, "__type__": "update"}, - to_return_protect0, - to_return_protect1 - ) - if to_return_protect - else {"visible": False, "maximum": n_spk, "__type__": "update"} - ) - - - def vc_single( - self, - sid, - input_audio_path0, - input_audio_path1, - f0_up_key, - f0_file, - f0_method, - file_index, - file_index2, - index_rate, - filter_radius, - resample_sr, - rms_mix_rate, - protect, - crepe_hop_length, - f0_min, - note_min, - f0_max, - note_max, - f0_autotune, - ): - global total_time - total_time = 0 - start_time = time.time() - if not input_audio_path0 and not input_audio_path1: - return "You need to upload an audio", None - - if (not os.path.exists(input_audio_path0)) and (not os.path.exists(os.path.join(now_dir, input_audio_path0))): - return "Audio was not properly selected or doesn't exist", None - - input_audio_path1 = input_audio_path1 or input_audio_path0 - print(f"\nStarting inference for '{os.path.basename(input_audio_path1)}'") - print("-------------------") - f0_up_key = int(f0_up_key) - if rvc_globals.NotesOrHertz and f0_method != 'rmvpe': - f0_min = note_to_hz(note_min) if note_min else 50 - f0_max = note_to_hz(note_max) if note_max else 1100 - print(f"Converted Min pitch: freq - {f0_min}\n" - f"Converted Max pitch: freq - {f0_max}") - else: - f0_min = f0_min or 50 - f0_max = f0_max or 1100 - try: - input_audio_path1 = input_audio_path1 or input_audio_path0 - print(f"Attempting to load {input_audio_path1}....") - audio = load_audio(file=input_audio_path1, - sr=16000, - DoFormant=rvc_globals.DoFormant, - Quefrency=rvc_globals.Quefrency, - Timbre=rvc_globals.Timbre) - - audio_max = np.abs(audio).max() / 0.95 - if audio_max > 1: - audio /= audio_max - times = [0, 0, 0] - - if self.hubert_model is None: - self.hubert_model = load_hubert(self.config) - - try: - self.if_f0 = self.cpt.get("f0", 1) - except NameError: - message = "Model was not properly selected" - print(message) - return message, None - - file_index = ( - ( - file_index.strip(" ") - .strip('"') - .strip("\n") - .strip('"') - .strip(" ") - .replace("trained", "added") - ) - if file_index != "" - else file_index2 - ) # 防止小白写错,自动帮他替换掉 - - try: - audio_opt = self.pipeline.pipeline( - self.hubert_model, - self.net_g, - sid, - audio, - input_audio_path1, - times, - f0_up_key, - f0_method, - file_index, - index_rate, - self.if_f0, - filter_radius, - self.tgt_sr, - resample_sr, - rms_mix_rate, - self.version, - protect, - crepe_hop_length, - f0_autotune, - f0_file=f0_file, - f0_min=f0_min, - f0_max=f0_max - ) - except AssertionError: - message = "Mismatching index version detected (v1 with v2, or v2 with v1)." - print(message) - return message, None - except NameError: - message = "RVC libraries are still loading. Please try again in a few seconds." - print(message) - return message, None - - if self.tgt_sr != resample_sr >= 16000: - self.tgt_sr = resample_sr - index_info = ( - "Index:\n%s." % file_index - if os.path.exists(file_index) - else "Index not used." - ) - end_time = time.time() - total_time = end_time - start_time - - output_folder = "audio-outputs" - os.makedirs(output_folder, exist_ok=True) - output_filename = "generated_audio_{}.wav" - output_count = 1 - while True: - current_output_path = os.path.join(output_folder, output_filename.format(output_count)) - if not os.path.exists(current_output_path): - break - output_count += 1 - - wavfile.write(current_output_path, self.tgt_sr, audio_opt) - print(f"Generated audio saved to: {current_output_path}") - return f"Success.\n {index_info}\nTime:\n npy:{times[0]}, f0:{times[1]}, infer:{times[2]}\nTotal Time: {total_time} seconds", (self.tgt_sr, audio_opt) - except: - info = traceback.format_exc() - logger.warn(info) - return info, (None, None) - - def vc_single_dont_save( - self, - sid, - input_audio_path0, - input_audio_path1, - f0_up_key, - f0_file, - f0_method, - file_index, - file_index2, - index_rate, - filter_radius, - resample_sr, - rms_mix_rate, - protect, - crepe_hop_length, - f0_min, - note_min, - f0_max, - note_max, - f0_autotune, - ): - global total_time - total_time = 0 - start_time = time.time() - if not input_audio_path0 and not input_audio_path1: - return "You need to upload an audio", None - - if (not os.path.exists(input_audio_path0)) and (not os.path.exists(os.path.join(now_dir, input_audio_path0))): - return "Audio was not properly selected or doesn't exist", None - - input_audio_path1 = input_audio_path1 or input_audio_path0 - print(f"\nStarting inference for '{os.path.basename(input_audio_path1)}'") - print("-------------------") - f0_up_key = int(f0_up_key) - if rvc_globals.NotesOrHertz and f0_method != 'rmvpe': - f0_min = note_to_hz(note_min) if note_min else 50 - f0_max = note_to_hz(note_max) if note_max else 1100 - print(f"Converted Min pitch: freq - {f0_min}\n" - f"Converted Max pitch: freq - {f0_max}") - else: - f0_min = f0_min or 50 - f0_max = f0_max or 1100 - try: - input_audio_path1 = input_audio_path1 or input_audio_path0 - print(f"Attempting to load {input_audio_path1}....") - audio = load_audio(file=input_audio_path1, - sr=16000, - DoFormant=rvc_globals.DoFormant, - Quefrency=rvc_globals.Quefrency, - Timbre=rvc_globals.Timbre) - - audio_max = np.abs(audio).max() / 0.95 - if audio_max > 1: - audio /= audio_max - times = [0, 0, 0] - - if self.hubert_model is None: - self.hubert_model = load_hubert(self.config) - - try: - self.if_f0 = self.cpt.get("f0", 1) - except NameError: - message = "Model was not properly selected" - print(message) - return message, None - - file_index = ( - ( - file_index.strip(" ") - .strip('"') - .strip("\n") - .strip('"') - .strip(" ") - .replace("trained", "added") - ) - if file_index != "" - else file_index2 - ) # 防止小白写错,自动帮他替换掉 - - try: - audio_opt = self.pipeline.pipeline( - self.hubert_model, - self.net_g, - sid, - audio, - input_audio_path1, - times, - f0_up_key, - f0_method, - file_index, - index_rate, - self.if_f0, - filter_radius, - self.tgt_sr, - resample_sr, - rms_mix_rate, - self.version, - protect, - crepe_hop_length, - f0_autotune, - f0_file=f0_file, - f0_min=f0_min, - f0_max=f0_max - ) - except AssertionError: - message = "Mismatching index version detected (v1 with v2, or v2 with v1)." - print(message) - return message, None - except NameError: - message = "RVC libraries are still loading. Please try again in a few seconds." - print(message) - return message, None - - if self.tgt_sr != resample_sr >= 16000: - self.tgt_sr = resample_sr - index_info = ( - "Index:\n%s." % file_index - if os.path.exists(file_index) - else "Index not used." - ) - end_time = time.time() - total_time = end_time - start_time - - return f"Success.\n {index_info}\nTime:\n npy:{times[0]}, f0:{times[1]}, infer:{times[2]}\nTotal Time: {total_time} seconds", (self.tgt_sr, audio_opt) - except: - info = traceback.format_exc() - logger.warn(info) - return info, (None, None) - - - def vc_multi( - self, - sid, - dir_path, - opt_root, - paths, - f0_up_key, - f0_method, - file_index, - file_index2, - index_rate, - filter_radius, - resample_sr, - rms_mix_rate, - protect, - format1, - crepe_hop_length, - f0_min, - note_min, - f0_max, - note_max, - f0_autotune, - ): - if rvc_globals.NotesOrHertz and f0_method != 'rmvpe': - f0_min = note_to_hz(note_min) if note_min else 50 - f0_max = note_to_hz(note_max) if note_max else 1100 - print(f"Converted Min pitch: freq - {f0_min}\n" - f"Converted Max pitch: freq - {f0_max}") - else: - f0_min = f0_min or 50 - f0_max = f0_max or 1100 - try: - dir_path = ( - dir_path.strip(" ").strip('"').strip("\n").strip('"').strip(" ") - ) # 防止小白拷路径头尾带了空格和"和回车 - opt_root = opt_root.strip(" ").strip('"').strip("\n").strip('"').strip(" ") - os.makedirs(opt_root, exist_ok=True) - try: - if dir_path != "": - paths = [ - os.path.join(dir_path, name) for name in os.listdir(dir_path) - ] - else: - paths = [path.name for path in paths] - except: - traceback.print_exc() - paths = [path.name for path in paths] - infos = [] - for path in paths: - info, opt = self.vc_single( - sid, - path, - f0_up_key, - None, - f0_method, - file_index, - file_index2, - # file_big_npy, - index_rate, - filter_radius, - resample_sr, - rms_mix_rate, - protect, - ) - if "Success" in info: - try: - tgt_sr, audio_opt = opt - if format1 in ["wav", "flac"]: - sf.write( - "%s/%s.%s" - % (opt_root, os.path.basename(path), format1), - audio_opt, - tgt_sr, - ) - else: - path = "%s/%s.%s" % (opt_root, os.path.basename(path), format1) - with BytesIO() as wavf: - sf.write( - wavf, - audio_opt, - tgt_sr, - format="wav" - ) - wavf.seek(0, 0) - with open(path, "wb") as outf: - wav2(wavf, outf, format1) - except: - info += traceback.format_exc() - infos.append("%s->%s" % (os.path.basename(path), info)) - yield "\n".join(infos) - yield "\n".join(infos) - except: - yield traceback.format_exc() diff --git a/infer/modules/vc/pipeline.py b/infer/modules/vc/pipeline.py deleted file mode 100644 index 76e712c649b95e21f9bbe6416ae8b7050317b479..0000000000000000000000000000000000000000 --- a/infer/modules/vc/pipeline.py +++ /dev/null @@ -1,655 +0,0 @@ -import os -import sys -import traceback -import logging - -logger = logging.getLogger(__name__) - -from functools import lru_cache -from time import time as ttime -from torch import Tensor -import faiss -import librosa -import numpy as np -import parselmouth -import pyworld -import torch -import torch.nn.functional as F -import torchcrepe -from scipy import signal -from tqdm import tqdm - -import random -now_dir = os.getcwd() -sys.path.append(now_dir) -import re -from functools import partial -bh, ah = signal.butter(N=5, Wn=48, btype="high", fs=16000) - -input_audio_path2wav = {} -from LazyImport import lazyload -torchcrepe = lazyload("torchcrepe") # Fork Feature. Crepe algo for training and preprocess -torch = lazyload("torch") -from infer.lib.rmvpe import RMVPE - -@lru_cache -def cache_harvest_f0(input_audio_path, fs, f0max, f0min, frame_period): - audio = input_audio_path2wav[input_audio_path] - f0, t = pyworld.harvest( - audio, - fs=fs, - f0_ceil=f0max, - f0_floor=f0min, - frame_period=frame_period, - ) - f0 = pyworld.stonemask(audio, f0, t, fs) - return f0 - - -def change_rms(data1, sr1, data2, sr2, rate): # 1是输入音频,2是输出音频,rate是2的占比 - # print(data1.max(),data2.max()) - rms1 = librosa.feature.rms( - y=data1, frame_length=sr1 // 2 * 2, hop_length=sr1 // 2 - ) # 每半秒一个点 - rms2 = librosa.feature.rms(y=data2, frame_length=sr2 // 2 * 2, hop_length=sr2 // 2) - rms1 = torch.from_numpy(rms1) - rms1 = F.interpolate( - rms1.unsqueeze(0), size=data2.shape[0], mode="linear" - ).squeeze() - rms2 = torch.from_numpy(rms2) - rms2 = F.interpolate( - rms2.unsqueeze(0), size=data2.shape[0], mode="linear" - ).squeeze() - rms2 = torch.max(rms2, torch.zeros_like(rms2) + 1e-6) - data2 *= ( - torch.pow(rms1, torch.tensor(1 - rate)) - * torch.pow(rms2, torch.tensor(rate - 1)) - ).numpy() - return data2 - - -class Pipeline(object): - def __init__(self, tgt_sr, config): - self.x_pad, self.x_query, self.x_center, self.x_max, self.is_half = ( - config.x_pad, - config.x_query, - config.x_center, - config.x_max, - config.is_half, - ) - self.sr = 16000 # hubert输入采样率 - self.window = 160 # 每帧点数 - self.t_pad = self.sr * self.x_pad # 每条前后pad时间 - self.t_pad_tgt = tgt_sr * self.x_pad - self.t_pad2 = self.t_pad * 2 - self.t_query = self.sr * self.x_query # 查询切点前后查询时间 - self.t_center = self.sr * self.x_center # 查询切点位置 - self.t_max = self.sr * self.x_max # 免查询时长阈值 - self.device = config.device - self.model_rmvpe = RMVPE("%s/rmvpe.pt" % os.environ["rmvpe_root"], is_half=self.is_half, device=self.device) - self.f0_method_dict = { - "pm": self.get_pm, - "harvest": self.get_harvest, - "dio": self.get_dio, - "rmvpe": self.get_rmvpe, - "rmvpe+": self.get_pitch_dependant_rmvpe, - "crepe": self.get_f0_official_crepe_computation, - "crepe-tiny": partial(self.get_f0_official_crepe_computation, model='model'), - "mangio-crepe": self.get_f0_crepe_computation, - "mangio-crepe-tiny": partial(self.get_f0_crepe_computation, model='model'), - - } - self.note_dict = [ - 65.41, 69.30, 73.42, 77.78, 82.41, 87.31, - 92.50, 98.00, 103.83, 110.00, 116.54, 123.47, - 130.81, 138.59, 146.83, 155.56, 164.81, 174.61, - 185.00, 196.00, 207.65, 220.00, 233.08, 246.94, - 261.63, 277.18, 293.66, 311.13, 329.63, 349.23, - 369.99, 392.00, 415.30, 440.00, 466.16, 493.88, - 523.25, 554.37, 587.33, 622.25, 659.25, 698.46, - 739.99, 783.99, 830.61, 880.00, 932.33, 987.77, - 1046.50, 1108.73, 1174.66, 1244.51, 1318.51, 1396.91, - 1479.98, 1567.98, 1661.22, 1760.00, 1864.66, 1975.53, - 2093.00, 2217.46, 2349.32, 2489.02, 2637.02, 2793.83, - 2959.96, 3135.96, 3322.44, 3520.00, 3729.31, 3951.07 - ] - - # Fork Feature: Get the best torch device to use for f0 algorithms that require a torch device. Will return the type (torch.device) - def get_optimal_torch_device(self, index: int = 0) -> torch.device: - if torch.cuda.is_available(): - return torch.device( - f"cuda:{index % torch.cuda.device_count()}" - ) # Very fast - elif torch.backends.mps.is_available(): - return torch.device("mps") - return torch.device("cpu") - - # Fork Feature: Compute f0 with the crepe method - def get_f0_crepe_computation( - self, - x, - f0_min, - f0_max, - p_len, - *args, # 512 before. Hop length changes the speed that the voice jumps to a different dramatic pitch. Lower hop lengths means more pitch accuracy but longer inference time. - **kwargs, # Either use crepe-tiny "tiny" or crepe "full". Default is full - ): - x = x.astype( - np.float32 - ) # fixes the F.conv2D exception. We needed to convert double to float. - x /= np.quantile(np.abs(x), 0.999) - torch_device = self.get_optimal_torch_device() - audio = torch.from_numpy(x).to(torch_device, copy=True) - audio = torch.unsqueeze(audio, dim=0) - if audio.ndim == 2 and audio.shape[0] > 1: - audio = torch.mean(audio, dim=0, keepdim=True).detach() - audio = audio.detach() - hop_length = kwargs.get('crepe_hop_length', 160) - model = kwargs.get('model', 'full') - print("Initiating prediction with a crepe_hop_length of: " + str(hop_length)) - pitch: Tensor = torchcrepe.predict( - audio, - self.sr, - hop_length, - f0_min, - f0_max, - model, - batch_size=hop_length * 2, - device=torch_device, - pad=True, - ) - p_len = p_len or x.shape[0] // hop_length - # Resize the pitch for final f0 - source = np.array(pitch.squeeze(0).cpu().float().numpy()) - source[source < 0.001] = np.nan - target = np.interp( - np.arange(0, len(source) * p_len, len(source)) / p_len, - np.arange(0, len(source)), - source, - ) - f0 = np.nan_to_num(target) - return f0 # Resized f0 - - def get_f0_official_crepe_computation( - self, - x, - f0_min, - f0_max, - *args, - **kwargs - ): - # Pick a batch size that doesn't cause memory errors on your gpu - batch_size = 512 - # Compute pitch using first gpu - audio = torch.tensor(np.copy(x))[None].float() - model = kwargs.get('model', 'full') - f0, pd = torchcrepe.predict( - audio, - self.sr, - self.window, - f0_min, - f0_max, - model, - batch_size=batch_size, - device=self.device, - return_periodicity=True, - ) - pd = torchcrepe.filter.median(pd, 3) - f0 = torchcrepe.filter.mean(f0, 3) - f0[pd < 0.1] = 0 - f0 = f0[0].cpu().numpy() - return f0 - - # Fork Feature: Compute pYIN f0 method - def get_f0_pyin_computation(self, x, f0_min, f0_max): - y, sr = librosa.load("saudio/Sidney.wav", self.sr, mono=True) - f0, _, _ = librosa.pyin(y, sr=self.sr, fmin=f0_min, fmax=f0_max) - f0 = f0[1:] # Get rid of extra first frame - return f0 - - def get_pm(self, x, p_len, *args, **kwargs): - f0 = parselmouth.Sound(x, self.sr).to_pitch_ac( - time_step=160 / 16000, - voicing_threshold=0.6, - pitch_floor=kwargs.get('f0_min'), - pitch_ceiling=kwargs.get('f0_max'), - ).selected_array["frequency"] - - return np.pad( - f0, - [[max(0, (p_len - len(f0) + 1) // 2), max(0, p_len - len(f0) - (p_len - len(f0) + 1) // 2)]], - mode="constant" - ) - - def get_harvest(self, x, *args, **kwargs): - f0_spectral = pyworld.harvest( - x.astype(np.double), - fs=self.sr, - f0_ceil=kwargs.get('f0_max'), - f0_floor=kwargs.get('f0_min'), - frame_period=1000 * kwargs.get('hop_length', 160) / self.sr, - ) - return pyworld.stonemask(x.astype(np.double), *f0_spectral, self.sr) - - def get_dio(self, x, *args, **kwargs): - f0_spectral = pyworld.dio( - x.astype(np.double), - fs=self.sr, - f0_ceil=kwargs.get('f0_max'), - f0_floor=kwargs.get('f0_min'), - frame_period=1000 * kwargs.get('hop_length', 160) / self.sr, - ) - return pyworld.stonemask(x.astype(np.double), *f0_spectral, self.sr) - - - def get_rmvpe(self, x, *args, **kwargs): - if not hasattr(self, "model_rmvpe"): - from infer.lib.rmvpe import RMVPE - - logger.info( - "Loading rmvpe model,%s" % "%s/rmvpe.pt" % os.environ["rmvpe_root"] - ) - self.model_rmvpe = RMVPE( - "%s/rmvpe.pt" % os.environ["rmvpe_root"], - is_half=self.is_half, - device=self.device, - ) - f0 = self.model_rmvpe.infer_from_audio(x, thred=0.03) - - return f0 - - - def get_pitch_dependant_rmvpe(self, x, f0_min=1, f0_max=40000, *args, **kwargs): - return self.model_rmvpe.infer_from_audio_with_pitch(x, thred=0.03, f0_min=f0_min, f0_max=f0_max) - - def autotune_f0(self, f0): - autotuned_f0 = [] - for freq in f0: - closest_notes = [x for x in self.note_dict if abs(x - freq) == min(abs(n - freq) for n in self.note_dict)] - autotuned_f0.append(random.choice(closest_notes)) - return np.array(autotuned_f0, np.float64) - - # Fork Feature: Acquire median hybrid f0 estimation calculation - def get_f0_hybrid_computation( - self, - methods_str, - input_audio_path, - x, - f0_min, - f0_max, - p_len, - filter_radius, - crepe_hop_length, - time_step - ): - # Get various f0 methods from input to use in the computation stack - params = {'x': x, 'p_len': p_len, 'f0_min': f0_min, - 'f0_max': f0_max, 'time_step': time_step, 'filter_radius': filter_radius, - 'crepe_hop_length': crepe_hop_length, 'model': "full" - } - methods_str = re.search('hybrid\[(.+)\]', methods_str) - if methods_str: # Ensure a match was found - methods = [method.strip() for method in methods_str.group(1).split('+')] - f0_computation_stack = [] - - print(f"Calculating f0 pitch estimations for methods: {str(methods)}") - x = x.astype(np.float32) - x /= np.quantile(np.abs(x), 0.999) - # Get f0 calculations for all methods specified - - for method in methods: - if method not in self.f0_method_dict: - print(f"Method {method} not found.") - continue - f0 = self.f0_method_dict[method](**params) - if method == 'harvest' and filter_radius > 2: - f0 = signal.medfilt(f0, 3) - f0 = f0[1:] # Get rid of first frame. - f0_computation_stack.append(f0) - - for fc in f0_computation_stack: - print(len(fc)) - - print(f"Calculating hybrid median f0 from the stack of: {str(methods)}") - f0_median_hybrid = np.nanmedian(f0_computation_stack, axis=0) - return f0_median_hybrid - - def get_f0( - self, - input_audio_path, - x, - p_len, - f0_up_key, - f0_method, - filter_radius, - crepe_hop_length, - f0_autotune, - inp_f0=None, - f0_min=50, - f0_max=1100, - ): - global input_audio_path2wav - time_step = self.window / self.sr * 1000 - f0_min = 50 - f0_max = 1100 - f0_mel_min = 1127 * np.log(1 + f0_min / 700) - f0_mel_max = 1127 * np.log(1 + f0_max / 700) - params = {'x': x, 'p_len': p_len, 'f0_up_key': f0_up_key, 'f0_min': f0_min, - 'f0_max': f0_max, 'time_step': time_step, 'filter_radius': filter_radius, - 'crepe_hop_length': crepe_hop_length, 'model': "full" - } - - if "hybrid" in f0_method: - # Perform hybrid median pitch estimation - input_audio_path2wav[input_audio_path] = x.astype(np.double) - f0 = self.get_f0_hybrid_computation( - f0_method,+ - input_audio_path, - x, - f0_min, - f0_max, - p_len, - filter_radius, - crepe_hop_length, - time_step, - ) - else: - f0 = self.f0_method_dict[f0_method](**params) - - if "privateuseone" in str(self.device): # clean ortruntime memory - del self.model_rmvpe.model - del self.model_rmvpe - logger.info("Cleaning ortruntime memory") - - if f0_autotune: - f0 = self.autotune_f0(f0) - - f0 *= pow(2, f0_up_key / 12) - # with open("test.txt","w")as f:f.write("\n".join([str(i)for i in f0.tolist()])) - tf0 = self.sr // self.window # 每秒f0点数 - if inp_f0 is not None: - delta_t = np.round( - (inp_f0[:, 0].max() - inp_f0[:, 0].min()) * tf0 + 1 - ).astype("int16") - replace_f0 = np.interp( - list(range(delta_t)), inp_f0[:, 0] * 100, inp_f0[:, 1] - ) - shape = f0[self.x_pad * tf0 : self.x_pad * tf0 + len(replace_f0)].shape[0] - f0[self.x_pad * tf0 : self.x_pad * tf0 + len(replace_f0)] = replace_f0[ - :shape - ] - # with open("test_opt.txt","w")as f:f.write("\n".join([str(i)for i in f0.tolist()])) - f0bak = f0.copy() - f0_mel = 1127 * np.log(1 + f0 / 700) - f0_mel[f0_mel > 0] = (f0_mel[f0_mel > 0] - f0_mel_min) * 254 / ( - f0_mel_max - f0_mel_min - ) + 1 - f0_mel[f0_mel <= 1] = 1 - f0_mel[f0_mel > 255] = 255 - f0_coarse = np.rint(f0_mel).astype(np.int32) - return f0_coarse, f0bak # 1-0 - - def vc( - self, - model, - net_g, - sid, - audio0, - pitch, - pitchf, - times, - index, - big_npy, - index_rate, - version, - protect, - ): # ,file_index,file_big_npy - feats = torch.from_numpy(audio0) - if self.is_half: - feats = feats.half() - else: - feats = feats.float() - if feats.dim() == 2: # double channels - feats = feats.mean(-1) - assert feats.dim() == 1, feats.dim() - feats = feats.view(1, -1) - padding_mask = torch.BoolTensor(feats.shape).to(self.device).fill_(False) - - inputs = { - "source": feats.to(self.device), - "padding_mask": padding_mask, - "output_layer": 9 if version == "v1" else 12, - } - t0 = ttime() - with torch.no_grad(): - logits = model.extract_features(**inputs) - feats = model.final_proj(logits[0]) if version == "v1" else logits[0] - if protect < 0.5 and pitch is not None and pitchf is not None: - feats0 = feats.clone() - if ( - not isinstance(index, type(None)) - and not isinstance(big_npy, type(None)) - and index_rate != 0 - ): - npy = feats[0].cpu().numpy() - if self.is_half: - npy = npy.astype("float32") - - # _, I = index.search(npy, 1) - # npy = big_npy[I.squeeze()] - - score, ix = index.search(npy, k=8) - weight = np.square(1 / score) - weight /= weight.sum(axis=1, keepdims=True) - npy = np.sum(big_npy[ix] * np.expand_dims(weight, axis=2), axis=1) - - if self.is_half: - npy = npy.astype("float16") - feats = ( - torch.from_numpy(npy).unsqueeze(0).to(self.device) * index_rate - + (1 - index_rate) * feats - ) - - feats = F.interpolate(feats.permute(0, 2, 1), scale_factor=2).permute(0, 2, 1) - if protect < 0.5 and pitch is not None and pitchf is not None: - feats0 = F.interpolate(feats0.permute(0, 2, 1), scale_factor=2).permute( - 0, 2, 1 - ) - t1 = ttime() - p_len = audio0.shape[0] // self.window - if feats.shape[1] < p_len: - p_len = feats.shape[1] - if pitch is not None and pitchf is not None: - pitch = pitch[:, :p_len] - pitchf = pitchf[:, :p_len] - - if protect < 0.5 and pitch is not None and pitchf is not None: - pitchff = pitchf.clone() - pitchff[pitchf > 0] = 1 - pitchff[pitchf < 1] = protect - pitchff = pitchff.unsqueeze(-1) - feats = feats * pitchff + feats0 * (1 - pitchff) - feats = feats.to(feats0.dtype) - p_len = torch.tensor([p_len], device=self.device).long() - with torch.no_grad(): - hasp = pitch is not None and pitchf is not None - arg = (feats, p_len, pitch, pitchf, sid) if hasp else (feats, p_len, sid) - audio1 = (net_g.infer(*arg)[0][0, 0]).data.cpu().float().numpy() - del hasp, arg - del feats, p_len, padding_mask - if torch.cuda.is_available(): - torch.cuda.empty_cache() - t2 = ttime() - times[0] += t1 - t0 - times[2] += t2 - t1 - return audio1 - def process_t(self, t, s, window, audio_pad, pitch, pitchf, times, index, big_npy, index_rate, version, protect, t_pad_tgt, if_f0, sid, model, net_g): - t = t // window * window - if if_f0 == 1: - return self.vc( - model, - net_g, - sid, - audio_pad[s : t + t_pad_tgt + window], - pitch[:, s // window : (t + t_pad_tgt) // window], - pitchf[:, s // window : (t + t_pad_tgt) // window], - times, - index, - big_npy, - index_rate, - version, - protect, - )[t_pad_tgt : -t_pad_tgt] - else: - return self.vc( - model, - net_g, - sid, - audio_pad[s : t + t_pad_tgt + window], - None, - None, - times, - index, - big_npy, - index_rate, - version, - protect, - )[t_pad_tgt : -t_pad_tgt] - - - def pipeline( - self, - model, - net_g, - sid, - audio, - input_audio_path, - times, - f0_up_key, - f0_method, - file_index, - index_rate, - if_f0, - filter_radius, - tgt_sr, - resample_sr, - rms_mix_rate, - version, - protect, - crepe_hop_length, - f0_autotune, - f0_file=None, - f0_min=50, - f0_max=1100 - ): - if ( - file_index != "" - # and file_big_npy != "" - # and os.path.exists(file_big_npy) == True - and os.path.exists(file_index) - and index_rate != 0 - ): - try: - index = faiss.read_index(file_index) - # big_npy = np.load(file_big_npy) - big_npy = index.reconstruct_n(0, index.ntotal) - except: - traceback.print_exc() - index = big_npy = None - else: - index = big_npy = None - audio = signal.filtfilt(bh, ah, audio) - audio_pad = np.pad(audio, (self.window // 2, self.window // 2), mode="reflect") - opt_ts = [] - if audio_pad.shape[0] > self.t_max: - audio_sum = np.zeros_like(audio) - for i in range(self.window): - audio_sum += audio_pad[i : i - self.window] - for t in range(self.t_center, audio.shape[0], self.t_center): - opt_ts.append( - t - - self.t_query - + np.where( - np.abs(audio_sum[t - self.t_query : t + self.t_query]) - == np.abs(audio_sum[t - self.t_query : t + self.t_query]).min() - )[0][0] - ) - s = 0 - audio_opt = [] - t = None - t1 = ttime() - audio_pad = np.pad(audio, (self.t_pad, self.t_pad), mode="reflect") - p_len = audio_pad.shape[0] // self.window - inp_f0 = None - if hasattr(f0_file, "name"): - try: - with open(f0_file.name, "r") as f: - lines = f.read().strip("\n").split("\n") - inp_f0 = [] - for line in lines: - inp_f0.append([float(i) for i in line.split(",")]) - inp_f0 = np.array(inp_f0, dtype="float32") - except: - traceback.print_exc() - sid = torch.tensor(sid, device=self.device).unsqueeze(0).long() - pitch, pitchf = None, None - if if_f0: - pitch, pitchf = self.get_f0( - input_audio_path, - audio_pad, - p_len, - f0_up_key, - f0_method, - filter_radius, - crepe_hop_length, - f0_autotune, - inp_f0, - f0_min, - f0_max - ) - pitch = pitch[:p_len] - pitchf = pitchf[:p_len] - if self.device == "mps" or "xpu" in self.device: - pitchf = pitchf.astype(np.float32) - pitch = torch.tensor(pitch, device=self.device).unsqueeze(0).long() - pitchf = torch.tensor(pitchf, device=self.device).unsqueeze(0).float() - t2 = ttime() - times[1] += t2 - t1 - - with tqdm(total=len(opt_ts), desc="Processing", unit="window") as pbar: - for i, t in enumerate(opt_ts): - t = t // self.window * self.window - start = s - end = t + self.t_pad2 + self.window - audio_slice = audio_pad[start:end] - pitch_slice = pitch[:, start // self.window:end // self.window] if if_f0 else None - pitchf_slice = pitchf[:, start // self.window:end // self.window] if if_f0 else None - audio_opt.append(self.vc(model, net_g, sid, audio_slice, pitch_slice, pitchf_slice, times, index, big_npy, index_rate, version, protect)[self.t_pad_tgt : -self.t_pad_tgt]) - s = t - pbar.update(1) - pbar.refresh() - - audio_slice = audio_pad[t:] - pitch_slice = pitch[:, t // self.window:] if if_f0 and t is not None else pitch - pitchf_slice = pitchf[:, t // self.window:] if if_f0 and t is not None else pitchf - audio_opt.append(self.vc(model, net_g, sid, audio_slice, pitch_slice, pitchf_slice, times, index, big_npy, index_rate, version, protect)[self.t_pad_tgt : -self.t_pad_tgt]) - - audio_opt = np.concatenate(audio_opt) - if rms_mix_rate != 1: - audio_opt = change_rms(audio, 16000, audio_opt, tgt_sr, rms_mix_rate) - if tgt_sr != resample_sr >= 16000: - audio_opt = librosa.resample( - audio_opt, orig_sr=tgt_sr, target_sr=resample_sr - ) - audio_max = np.abs(audio_opt).max() / 0.99 - max_int16 = 32768 - if audio_max > 1: - max_int16 /= audio_max - audio_opt = (audio_opt * max_int16).astype(np.int16) - del pitch, pitchf, sid - if torch.cuda.is_available(): - torch.cuda.empty_cache() - - print("Returning completed audio...") - print("-------------------") - return audio_opt diff --git a/infer/modules/vc/utils.py b/infer/modules/vc/utils.py deleted file mode 100644 index a1cb0ff84097d1c7eb82373ccf19db061f595096..0000000000000000000000000000000000000000 --- a/infer/modules/vc/utils.py +++ /dev/null @@ -1,42 +0,0 @@ -import os -import re -from fairseq import checkpoint_utils - - -def get_index_path_from_model(sid): - sid0strip = re.sub(r'\.pth|\.onnx$', '', sid) - sid0name = os.path.split(sid0strip)[-1] # Extract only the name, not the directory - - # Check if the sid0strip has the specific ending format _eXXX_sXXX - if re.match(r'.+_e\d+_s\d+$', sid0name): - base_model_name = sid0name.rsplit('_', 2)[0] - else: - base_model_name = sid0name - - return next( - ( - f - for f in [ - os.path.join(root, name) - for root, _, files in os.walk(os.getenv("index_root"), topdown=False) - for name in files - if name.endswith(".index") and "trained" not in name - ] - if base_model_name in f - ), - "", - ) - - -def load_hubert(config): - models, _, _ = checkpoint_utils.load_model_ensemble_and_task( - ["assets/hubert/hubert_base.pt"], - suffix="", - ) - hubert_model = models[0] - hubert_model = hubert_model.to(config.device) - if config.is_half: - hubert_model = hubert_model.half() - else: - hubert_model = hubert_model.float() - return hubert_model.eval() diff --git a/infer_batch_rvc.py b/infer_batch_rvc.py deleted file mode 100644 index 15c862a3d6bf815fa68003cc7054b694cae50c2a..0000000000000000000000000000000000000000 --- a/infer_batch_rvc.py +++ /dev/null @@ -1,215 +0,0 @@ -""" -v1 -runtime\python.exe myinfer-v2-0528.py 0 "E:\codes\py39\RVC-beta\todo-songs" "E:\codes\py39\logs\mi-test\added_IVF677_Flat_nprobe_7.index" harvest "E:\codes\py39\RVC-beta\output" "E:\codes\py39\test-20230416b\weights\mi-test.pth" 0.66 cuda:0 True 3 0 1 0.33 -v2 -runtime\python.exe myinfer-v2-0528.py 0 "E:\codes\py39\RVC-beta\todo-songs" "E:\codes\py39\test-20230416b\logs\mi-test-v2\aadded_IVF677_Flat_nprobe_1_v2.index" harvest "E:\codes\py39\RVC-beta\output_v2" "E:\codes\py39\test-20230416b\weights\mi-test-v2.pth" 0.66 cuda:0 True 3 0 1 0.33 -""" -import os, sys, pdb, torch - -now_dir = os.getcwd() -sys.path.append(now_dir) -import sys -import torch -import tqdm as tq -from multiprocessing import cpu_count - - -class Config: - def __init__(self, device, is_half): - self.device = device - self.is_half = is_half - self.n_cpu = 0 - self.gpu_name = None - self.gpu_mem = None - self.x_pad, self.x_query, self.x_center, self.x_max = self.device_config() - - def device_config(self) -> tuple: - if torch.cuda.is_available(): - i_device = int(self.device.split(":")[-1]) - self.gpu_name = torch.cuda.get_device_name(i_device) - if ( - ("16" in self.gpu_name and "V100" not in self.gpu_name.upper()) - or "P40" in self.gpu_name.upper() - or "1060" in self.gpu_name - or "1070" in self.gpu_name - or "1080" in self.gpu_name - ): - print("16系/10系显卡和P40强制单精度") - self.is_half = False - for config_file in ["32k.json", "40k.json", "48k.json"]: - with open(f"configs/{config_file}", "r") as f: - strr = f.read().replace("true", "false") - with open(f"configs/{config_file}", "w") as f: - f.write(strr) - with open("infer/modules/train/preprocess.py", "r") as f: - strr = f.read().replace("3.7", "3.0") - with open("infer/modules/train/preprocess.py", "w") as f: - f.write(strr) - else: - self.gpu_name = None - self.gpu_mem = int( - torch.cuda.get_device_properties(i_device).total_memory - / 1024 - / 1024 - / 1024 - + 0.4 - ) - if self.gpu_mem <= 4: - with open("infer/modules/train/preprocess.py", "r") as f: - strr = f.read().replace("3.7", "3.0") - with open("infer/modules/train/preprocess.py", "w") as f: - f.write(strr) - elif torch.backends.mps.is_available(): - print("没有发现支持的N卡, 使用MPS进行推理") - self.device = "mps" - else: - print("没有发现支持的N卡, 使用CPU进行推理") - self.device = "cpu" - self.is_half = True - - if self.n_cpu == 0: - self.n_cpu = cpu_count() - - if self.is_half: - # 6G显存配置 - x_pad = 3 - x_query = 10 - x_center = 60 - x_max = 65 - else: - # 5G显存配置 - x_pad = 1 - x_query = 6 - x_center = 38 - x_max = 41 - - if self.gpu_mem != None and self.gpu_mem <= 4: - x_pad = 1 - x_query = 5 - x_center = 30 - x_max = 32 - - return x_pad, x_query, x_center, x_max - - -f0up_key = sys.argv[1] -input_path = sys.argv[2] -index_path = sys.argv[3] -f0method = sys.argv[4] # harvest or pm -opt_path = sys.argv[5] -model_path = sys.argv[6] -index_rate = float(sys.argv[7]) -device = sys.argv[8] -is_half = sys.argv[9].lower() != "false" -filter_radius = int(sys.argv[10]) -resample_sr = int(sys.argv[11]) -rms_mix_rate = float(sys.argv[12]) -protect = float(sys.argv[13]) -print(sys.argv) -config = Config(device, is_half) -now_dir = os.getcwd() -sys.path.append(now_dir) -from infer.modules.vc.modules import VC -from lib.infer_pack.models import ( - SynthesizerTrnMs256NSFsid, - SynthesizerTrnMs256NSFsid_nono, - SynthesizerTrnMs768NSFsid, - SynthesizerTrnMs768NSFsid_nono, -) -from infer.lib.audio import load_audio -from fairseq import checkpoint_utils -from scipy.io import wavfile - -hubert_model = None - - -def load_hubert(): - global hubert_model - models, saved_cfg, task = checkpoint_utils.load_model_ensemble_and_task( - ["hubert_base.pt"], - suffix="", - ) - hubert_model = models[0] - hubert_model = hubert_model.to(device) - if is_half: - hubert_model = hubert_model.half() - else: - hubert_model = hubert_model.float() - hubert_model.eval() - - -def vc_single(sid, input_audio, f0_up_key, f0_file, f0_method, file_index, index_rate): - global tgt_sr, net_g, vc, hubert_model, version - if input_audio is None: - return "You need to upload an audio", None - f0_up_key = int(f0_up_key) - audio = load_audio(input_audio, 16000) - times = [0, 0, 0] - if hubert_model == None: - load_hubert() - if_f0 = cpt.get("f0", 1) - # audio_opt=vc.pipeline(hubert_model,net_g,sid,audio,times,f0_up_key,f0_method,file_index,file_big_npy,index_rate,if_f0,f0_file=f0_file) - audio_opt = vc.pipeline( - hubert_model, - net_g, - sid, - audio, - input_audio, - times, - f0_up_key, - f0_method, - file_index, - index_rate, - if_f0, - filter_radius, - tgt_sr, - resample_sr, - rms_mix_rate, - version, - protect, - f0_file=f0_file, - ) - print(times) - return audio_opt - - -def get_vc(model_path): - global n_spk, tgt_sr, net_g, vc, cpt, device, is_half, version - print("loading pth %s" % model_path) - cpt = torch.load(model_path, map_location="cpu") - tgt_sr = cpt["config"][-1] - cpt["config"][-3] = cpt["weight"]["emb_g.weight"].shape[0] # n_spk - if_f0 = cpt.get("f0", 1) - version = cpt.get("version", "v1") - if version == "v1": - if if_f0 == 1: - net_g = SynthesizerTrnMs256NSFsid(*cpt["config"], is_half=is_half) - else: - net_g = SynthesizerTrnMs256NSFsid_nono(*cpt["config"]) - elif version == "v2": - if if_f0 == 1: # - net_g = SynthesizerTrnMs768NSFsid(*cpt["config"], is_half=is_half) - else: - net_g = SynthesizerTrnMs768NSFsid_nono(*cpt["config"]) - del net_g.enc_q - print(net_g.load_state_dict(cpt["weight"], strict=False)) # 不加这一行清不干净,真奇葩 - net_g.eval().to(device) - if is_half: - net_g = net_g.half() - else: - net_g = net_g.float() - vc = VC(tgt_sr, config) - n_spk = cpt["config"][-3] - # return {"visible": True,"maximum": n_spk, "__type__": "update"} - - -get_vc(model_path) -audios = os.listdir(input_path) -for file in tq.tqdm(audios): - if file.endswith(".wav"): - file_path = input_path + "/" + file - wav_opt = vc_single( - 0, file_path, f0up_key, None, f0method, index_path, index_rate - ) - out_path = opt_path + "/" + file - wavfile.write(out_path, tgt_sr, wav_opt) diff --git a/infer_uvr5.py b/infer_uvr5.py deleted file mode 100644 index 8c8c05429a1d65dd8b198f16a8ea8c6e68991c07..0000000000000000000000000000000000000000 --- a/infer_uvr5.py +++ /dev/null @@ -1,363 +0,0 @@ -import os, sys, torch, warnings, pdb - -now_dir = os.getcwd() -sys.path.append(now_dir) -from json import load as ll - -warnings.filterwarnings("ignore") -import librosa -import importlib -import numpy as np -import hashlib, math -from tqdm import tqdm -from lib.uvr5_pack.lib_v5 import spec_utils -from lib.uvr5_pack.utils import _get_name_params, inference -from lib.uvr5_pack.lib_v5.model_param_init import ModelParameters -import soundfile as sf -from lib.uvr5_pack.lib_v5.nets_new import CascadedNet -from lib.uvr5_pack.lib_v5 import nets_61968KB as nets - - -class _audio_pre_: - def __init__(self, agg, model_path, device, is_half): - self.model_path = model_path - self.device = device - self.data = { - # Processing Options - "postprocess": False, - "tta": False, - # Constants - "window_size": 512, - "agg": agg, - "high_end_process": "mirroring", - } - mp = ModelParameters("lib/uvr5_pack/lib_v5/modelparams/4band_v2.json") - model = nets.CascadedASPPNet(mp.param["bins"] * 2) - cpk = torch.load(model_path, map_location="cpu") - model.load_state_dict(cpk) - model.eval() - if is_half: - model = model.half().to(device) - else: - model = model.to(device) - - self.mp = mp - self.model = model - - def _path_audio_(self, music_file, ins_root=None, vocal_root=None, format="flac"): - if ins_root is None and vocal_root is None: - return "No save root." - name = os.path.basename(music_file) - if ins_root is not None: - os.makedirs(ins_root, exist_ok=True) - if vocal_root is not None: - os.makedirs(vocal_root, exist_ok=True) - X_wave, y_wave, X_spec_s, y_spec_s = {}, {}, {}, {} - bands_n = len(self.mp.param["band"]) - # print(bands_n) - for d in range(bands_n, 0, -1): - bp = self.mp.param["band"][d] - if d == bands_n: # high-end band - ( - X_wave[d], - _, - ) = librosa.core.load( - music_file, - bp["sr"], - False, - dtype=np.float32, - res_type=bp["res_type"], - ) - if X_wave[d].ndim == 1: - X_wave[d] = np.asfortranarray([X_wave[d], X_wave[d]]) - else: # lower bands - X_wave[d] = librosa.core.resample( - X_wave[d + 1], - self.mp.param["band"][d + 1]["sr"], - bp["sr"], - res_type=bp["res_type"], - ) - # Stft of wave source - X_spec_s[d] = spec_utils.wave_to_spectrogram_mt( - X_wave[d], - bp["hl"], - bp["n_fft"], - self.mp.param["mid_side"], - self.mp.param["mid_side_b2"], - self.mp.param["reverse"], - ) - # pdb.set_trace() - if d == bands_n and self.data["high_end_process"] != "none": - input_high_end_h = (bp["n_fft"] // 2 - bp["crop_stop"]) + ( - self.mp.param["pre_filter_stop"] - self.mp.param["pre_filter_start"] - ) - input_high_end = X_spec_s[d][ - :, bp["n_fft"] // 2 - input_high_end_h : bp["n_fft"] // 2, : - ] - - X_spec_m = spec_utils.combine_spectrograms(X_spec_s, self.mp) - aggresive_set = float(self.data["agg"] / 100) - aggressiveness = { - "value": aggresive_set, - "split_bin": self.mp.param["band"][1]["crop_stop"], - } - with torch.no_grad(): - pred, X_mag, X_phase = inference( - X_spec_m, self.device, self.model, aggressiveness, self.data - ) - # Postprocess - if self.data["postprocess"]: - pred_inv = np.clip(X_mag - pred, 0, np.inf) - pred = spec_utils.mask_silence(pred, pred_inv) - y_spec_m = pred * X_phase - v_spec_m = X_spec_m - y_spec_m - - if ins_root is not None: - if self.data["high_end_process"].startswith("mirroring"): - input_high_end_ = spec_utils.mirroring( - self.data["high_end_process"], y_spec_m, input_high_end, self.mp - ) - wav_instrument = spec_utils.cmb_spectrogram_to_wave( - y_spec_m, self.mp, input_high_end_h, input_high_end_ - ) - else: - wav_instrument = spec_utils.cmb_spectrogram_to_wave(y_spec_m, self.mp) - print("%s instruments done" % name) - if format in ["wav", "flac"]: - sf.write( - os.path.join( - ins_root, - "instrument_{}_{}.{}".format(name, self.data["agg"], format), - ), - (np.array(wav_instrument) * 32768).astype("int16"), - self.mp.param["sr"], - ) # - else: - path = os.path.join( - ins_root, "instrument_{}_{}.wav".format(name, self.data["agg"]) - ) - sf.write( - path, - (np.array(wav_instrument) * 32768).astype("int16"), - self.mp.param["sr"], - ) - if os.path.exists(path): - os.system( - "ffmpeg -i %s -vn %s -q:a 2 -y" - % (path, path[:-4] + ".%s" % format) - ) - if vocal_root is not None: - if self.data["high_end_process"].startswith("mirroring"): - input_high_end_ = spec_utils.mirroring( - self.data["high_end_process"], v_spec_m, input_high_end, self.mp - ) - wav_vocals = spec_utils.cmb_spectrogram_to_wave( - v_spec_m, self.mp, input_high_end_h, input_high_end_ - ) - else: - wav_vocals = spec_utils.cmb_spectrogram_to_wave(v_spec_m, self.mp) - print("%s vocals done" % name) - if format in ["wav", "flac"]: - sf.write( - os.path.join( - vocal_root, - "vocal_{}_{}.{}".format(name, self.data["agg"], format), - ), - (np.array(wav_vocals) * 32768).astype("int16"), - self.mp.param["sr"], - ) - else: - path = os.path.join( - vocal_root, "vocal_{}_{}.wav".format(name, self.data["agg"]) - ) - sf.write( - path, - (np.array(wav_vocals) * 32768).astype("int16"), - self.mp.param["sr"], - ) - if os.path.exists(path): - os.system( - "ffmpeg -i %s -vn %s -q:a 2 -y" - % (path, path[:-4] + ".%s" % format) - ) - - -class _audio_pre_new: - def __init__(self, agg, model_path, device, is_half): - self.model_path = model_path - self.device = device - self.data = { - # Processing Options - "postprocess": False, - "tta": False, - # Constants - "window_size": 512, - "agg": agg, - "high_end_process": "mirroring", - } - mp = ModelParameters("lib/uvr5_pack/lib_v5/modelparams/4band_v3.json") - nout = 64 if "DeReverb" in model_path else 48 - model = CascadedNet(mp.param["bins"] * 2, nout) - cpk = torch.load(model_path, map_location="cpu") - model.load_state_dict(cpk) - model.eval() - if is_half: - model = model.half().to(device) - else: - model = model.to(device) - - self.mp = mp - self.model = model - - def _path_audio_( - self, music_file, vocal_root=None, ins_root=None, format="flac" - ): # 3个VR模型vocal和ins是反的 - if ins_root is None and vocal_root is None: - return "No save root." - name = os.path.basename(music_file) - if ins_root is not None: - os.makedirs(ins_root, exist_ok=True) - if vocal_root is not None: - os.makedirs(vocal_root, exist_ok=True) - X_wave, y_wave, X_spec_s, y_spec_s = {}, {}, {}, {} - bands_n = len(self.mp.param["band"]) - # print(bands_n) - for d in range(bands_n, 0, -1): - bp = self.mp.param["band"][d] - if d == bands_n: # high-end band - ( - X_wave[d], - _, - ) = librosa.core.load( - music_file, - bp["sr"], - False, - dtype=np.float32, - res_type=bp["res_type"], - ) - if X_wave[d].ndim == 1: - X_wave[d] = np.asfortranarray([X_wave[d], X_wave[d]]) - else: # lower bands - X_wave[d] = librosa.core.resample( - X_wave[d + 1], - self.mp.param["band"][d + 1]["sr"], - bp["sr"], - res_type=bp["res_type"], - ) - # Stft of wave source - X_spec_s[d] = spec_utils.wave_to_spectrogram_mt( - X_wave[d], - bp["hl"], - bp["n_fft"], - self.mp.param["mid_side"], - self.mp.param["mid_side_b2"], - self.mp.param["reverse"], - ) - # pdb.set_trace() - if d == bands_n and self.data["high_end_process"] != "none": - input_high_end_h = (bp["n_fft"] // 2 - bp["crop_stop"]) + ( - self.mp.param["pre_filter_stop"] - self.mp.param["pre_filter_start"] - ) - input_high_end = X_spec_s[d][ - :, bp["n_fft"] // 2 - input_high_end_h : bp["n_fft"] // 2, : - ] - - X_spec_m = spec_utils.combine_spectrograms(X_spec_s, self.mp) - aggresive_set = float(self.data["agg"] / 100) - aggressiveness = { - "value": aggresive_set, - "split_bin": self.mp.param["band"][1]["crop_stop"], - } - with torch.no_grad(): - pred, X_mag, X_phase = inference( - X_spec_m, self.device, self.model, aggressiveness, self.data - ) - # Postprocess - if self.data["postprocess"]: - pred_inv = np.clip(X_mag - pred, 0, np.inf) - pred = spec_utils.mask_silence(pred, pred_inv) - y_spec_m = pred * X_phase - v_spec_m = X_spec_m - y_spec_m - - if ins_root is not None: - if self.data["high_end_process"].startswith("mirroring"): - input_high_end_ = spec_utils.mirroring( - self.data["high_end_process"], y_spec_m, input_high_end, self.mp - ) - wav_instrument = spec_utils.cmb_spectrogram_to_wave( - y_spec_m, self.mp, input_high_end_h, input_high_end_ - ) - else: - wav_instrument = spec_utils.cmb_spectrogram_to_wave(y_spec_m, self.mp) - print("%s instruments done" % name) - if format in ["wav", "flac"]: - sf.write( - os.path.join( - ins_root, - "instrument_{}_{}.{}".format(name, self.data["agg"], format), - ), - (np.array(wav_instrument) * 32768).astype("int16"), - self.mp.param["sr"], - ) # - else: - path = os.path.join( - ins_root, "instrument_{}_{}.wav".format(name, self.data["agg"]) - ) - sf.write( - path, - (np.array(wav_instrument) * 32768).astype("int16"), - self.mp.param["sr"], - ) - if os.path.exists(path): - os.system( - "ffmpeg -i %s -vn %s -q:a 2 -y" - % (path, path[:-4] + ".%s" % format) - ) - if vocal_root is not None: - if self.data["high_end_process"].startswith("mirroring"): - input_high_end_ = spec_utils.mirroring( - self.data["high_end_process"], v_spec_m, input_high_end, self.mp - ) - wav_vocals = spec_utils.cmb_spectrogram_to_wave( - v_spec_m, self.mp, input_high_end_h, input_high_end_ - ) - else: - wav_vocals = spec_utils.cmb_spectrogram_to_wave(v_spec_m, self.mp) - print("%s vocals done" % name) - if format in ["wav", "flac"]: - sf.write( - os.path.join( - vocal_root, - "vocal_{}_{}.{}".format(name, self.data["agg"], format), - ), - (np.array(wav_vocals) * 32768).astype("int16"), - self.mp.param["sr"], - ) - else: - path = os.path.join( - vocal_root, "vocal_{}_{}.wav".format(name, self.data["agg"]) - ) - sf.write( - path, - (np.array(wav_vocals) * 32768).astype("int16"), - self.mp.param["sr"], - ) - if os.path.exists(path): - os.system( - "ffmpeg -i %s -vn %s -q:a 2 -y" - % (path, path[:-4] + ".%s" % format) - ) - - -if __name__ == "__main__": - device = "cuda" - is_half = True - # model_path = "uvr5_weights/2_HP-UVR.pth" - # model_path = "uvr5_weights/VR-DeEchoDeReverb.pth" - # model_path = "uvr5_weights/VR-DeEchoNormal.pth" - model_path = "uvr5_weights/DeEchoNormal.pth" - # pre_fun = _audio_pre_(model_path=model_path, device=device, is_half=True,agg=10) - pre_fun = _audio_pre_new(model_path=model_path, device=device, is_half=True, agg=10) - audio_path = "雪雪伴奏对消HP5.wav" - save_path = "opt" - pre_fun._path_audio_(audio_path, save_path, save_path) diff --git a/inference-presets.json b/inference-presets.json deleted file mode 100644 index 7f68a27d96b01d89265d0507aa6f7af5a67065c1..0000000000000000000000000000000000000000 --- a/inference-presets.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "presets": [ - { - "name": "Default Preset", - "model": "", - "transpose": 0, - "audio_file": "", - "f0_method": "pm", - "crepe_hop_length": 160, - "median_filtering": 3, - "feature_path": "", - "auto_feature_path": "", - "search_feature_ratio": 0.88, - "resample": 0, - "volume_envelope": 1, - "protect_voiceless": 0.33, - "f0_file_path": "" - } - ] -} diff --git a/julius/__init__.py b/julius/__init__.py deleted file mode 100644 index 69811b0415a291ca1beb845531785ba03c57099a..0000000000000000000000000000000000000000 --- a/julius/__init__.py +++ /dev/null @@ -1,41 +0,0 @@ -# File under the MIT license, see https://github.com/adefossez/julius/LICENSE for details. -# Author: adefossez, 2020 - -# flake8: noqa -""" -.. image:: ../logo.png - -Julius contains different Digital Signal Processing algorithms implemented -with PyTorch, so that they are differentiable and available on CUDA. -Note that all the modules implemented here can be used with TorchScript. - -For now, I have implemented: - -- `julius.resample`: fast sinc resampling. -- `julius.fftconv`: FFT based convolutions. -- `julius.lowpass`: FIR low pass filter banks. -- `julius.filters`: FIR high pass and band pass filters. -- `julius.bands`: Decomposition of a waveform signal over mel-scale frequency bands. - -Along that, you might found useful utilities in: - -- `julius.core`: DSP related functions. -- `julius.utils`: Generic utilities. - - -Please checkout [the Github repository](https://github.com/adefossez/julius) for other informations. -For a verification of the speed and correctness of Julius, check the benchmark module `bench`. - - -This package is named in this honor of -[Julius O. Smith](https://ccrma.stanford.edu/~jos/), -whose books and website were a gold mine of information for me to learn about DSP. Go checkout his website if you want -to learn more about DSP. -""" - -from .bands import SplitBands, split_bands -from .fftconv import fft_conv1d, FFTConv1d -from .filters import bandpass_filter, BandPassFilter -from .filters import highpass_filter, highpass_filters, HighPassFilter, HighPassFilters -from .lowpass import lowpass_filter, lowpass_filters, LowPassFilters, LowPassFilter -from .resample import resample_frac, ResampleFrac diff --git a/julius/bands.py b/julius/bands.py deleted file mode 100644 index ef2162440b69e960770aa7bf81b9aaec48a63243..0000000000000000000000000000000000000000 --- a/julius/bands.py +++ /dev/null @@ -1,119 +0,0 @@ -# File under the MIT license, see https://github.com/adefossez/julius/LICENSE for details. -# Author: adefossez, 2020 -""" -Decomposition of a signal over frequency bands in the waveform domain. -""" -from typing import Optional, Sequence -import torch - -from .core import mel_frequencies -from .lowpass import LowPassFilters -from .utils import simple_repr - - -class SplitBands(torch.nn.Module): - """ - Decomposes a signal over the given frequency bands in the waveform domain using - a cascade of low pass filters as implemented by `julius.lowpass.LowPassFilters`. - You can either specify explicitely the frequency cutoffs, or just the number of bands, - in which case the frequency cutoffs will be spread out evenly in mel scale. - - Args: - sample_rate (float): Sample rate of the input signal in Hz. - n_bands (int or None): number of bands, when not giving them explictely with `cutoffs`. - In that case, the cutoff frequencies will be evenly spaced in mel-space. - cutoffs (list[float] or None): list of frequency cutoffs in Hz. - pad (bool): if True, appropriately pad the input with zero over the edge. If `stride=1`, - the output will have the same length as the input. - zeros (float): Number of zero crossings to keep. See `LowPassFilters` for more informations. - fft (bool or None): See `LowPassFilters` for more info. - - ..note:: - The sum of all the bands will always be the input signal. - - ..warning:: - Unlike `julius.lowpass.LowPassFilters`, the cutoffs frequencies must be provided in Hz along - with the sample rate. - - Shape: - - - Input: `[*, T]` - - Output: `[B, *, T']`, with `T'=T` if `pad` is True. - If `n_bands` was provided, `B = n_bands` otherwise `B = len(cutoffs) + 1` - - >>> bands = SplitBands(sample_rate=128, n_bands=10) - >>> x = torch.randn(6, 4, 1024) - >>> list(bands(x).shape) - [10, 6, 4, 1024] - """ - - def __init__(self, sample_rate: float, n_bands: Optional[int] = None, - cutoffs: Optional[Sequence[float]] = None, pad: bool = True, - zeros: float = 8, fft: Optional[bool] = None): - super().__init__() - if (cutoffs is None) + (n_bands is None) != 1: - raise ValueError("You must provide either n_bands, or cutoffs, but not boths.") - - self.sample_rate = sample_rate - self.n_bands = n_bands - self._cutoffs = list(cutoffs) if cutoffs is not None else None - self.pad = pad - self.zeros = zeros - self.fft = fft - - if cutoffs is None: - if n_bands is None: - raise ValueError("You must provide one of n_bands or cutoffs.") - if not n_bands >= 1: - raise ValueError(f"n_bands must be greater than one (got {n_bands})") - cutoffs = mel_frequencies(n_bands + 1, 0, sample_rate / 2)[1:-1] - else: - if max(cutoffs) > 0.5 * sample_rate: - raise ValueError("A cutoff above sample_rate/2 does not make sense.") - if len(cutoffs) > 0: - self.lowpass = LowPassFilters( - [c / sample_rate for c in cutoffs], pad=pad, zeros=zeros, fft=fft) - else: - # Here I cannot make both TorchScript and MyPy happy. - # I miss the good old times, before all this madness was created. - self.lowpass = None # type: ignore - - def forward(self, input): - if self.lowpass is None: - return input[None] - lows = self.lowpass(input) - low = lows[0] - bands = [low] - for low_and_band in lows[1:]: - # Get a bandpass filter by substracting lowpasses - band = low_and_band - low - bands.append(band) - low = low_and_band - # Last band is whatever is left in the signal - bands.append(input - low) - return torch.stack(bands) - - @property - def cutoffs(self): - if self._cutoffs is not None: - return self._cutoffs - elif self.lowpass is not None: - return [c * self.sample_rate for c in self.lowpass.cutoffs] - else: - return [] - - def __repr__(self): - return simple_repr(self, overrides={"cutoffs": self._cutoffs}) - - -def split_bands(signal: torch.Tensor, sample_rate: float, n_bands: Optional[int] = None, - cutoffs: Optional[Sequence[float]] = None, pad: bool = True, - zeros: float = 8, fft: Optional[bool] = None): - """ - Functional version of `SplitBands`, refer to this class for more information. - - >>> x = torch.randn(6, 4, 1024) - >>> list(split_bands(x, sample_rate=64, cutoffs=[12, 24]).shape) - [3, 6, 4, 1024] - """ - return SplitBands(sample_rate, n_bands, cutoffs, pad, zeros, fft).to(signal)(signal) diff --git a/julius/core.py b/julius/core.py deleted file mode 100644 index 6b750418424e76c9540663ac4b2a16005adaf422..0000000000000000000000000000000000000000 --- a/julius/core.py +++ /dev/null @@ -1,122 +0,0 @@ -# File under the MIT license, see https://github.com/adefossez/julius/LICENSE for details. -# Author: adefossez, 2020 -""" -Signal processing or PyTorch related utilities. -""" -import math -import typing as tp - -import torch -from torch.nn import functional as F - - -def sinc(x: torch.Tensor): - """ - Implementation of sinc, i.e. sin(x) / x - - __Warning__: the input is not multiplied by `pi`! - """ - return torch.where(x == 0, torch.tensor(1., device=x.device, dtype=x.dtype), torch.sin(x) / x) - - -def pad_to(tensor: torch.Tensor, target_length: int, mode: str = 'constant', value: float = 0): - """ - Pad the given tensor to the given length, with 0s on the right. - """ - return F.pad(tensor, (0, target_length - tensor.shape[-1]), mode=mode, value=value) - - -def hz_to_mel(freqs: torch.Tensor): - """ - Converts a Tensor of frequencies in hertz to the mel scale. - Uses the simple formula by O'Shaughnessy (1987). - - Args: - freqs (torch.Tensor): frequencies to convert. - - """ - return 2595 * torch.log10(1 + freqs / 700) - - -def mel_to_hz(mels: torch.Tensor): - """ - Converts a Tensor of mel scaled frequencies to Hertz. - Uses the simple formula by O'Shaughnessy (1987). - - Args: - mels (torch.Tensor): mel frequencies to convert. - """ - return 700 * (10**(mels / 2595) - 1) - - -def mel_frequencies(n_mels: int, fmin: float, fmax: float): - """ - Return frequencies that are evenly spaced in mel scale. - - Args: - n_mels (int): number of frequencies to return. - fmin (float): start from this frequency (in Hz). - fmax (float): finish at this frequency (in Hz). - - - """ - low = hz_to_mel(torch.tensor(float(fmin))).item() - high = hz_to_mel(torch.tensor(float(fmax))).item() - mels = torch.linspace(low, high, n_mels) - return mel_to_hz(mels) - - -def volume(x: torch.Tensor, floor=1e-8): - """ - Return the volume in dBFS. - """ - return torch.log10(floor + (x**2).mean(-1)) * 10 - - -def pure_tone(freq: float, sr: float = 128, dur: float = 4, device=None): - """ - Return a pure tone, i.e. cosine. - - Args: - freq (float): frequency (in Hz) - sr (float): sample rate (in Hz) - dur (float): duration (in seconds) - """ - time = torch.arange(int(sr * dur), device=device).float() / sr - return torch.cos(2 * math.pi * freq * time) - - -def unfold(input, kernel_size: int, stride: int): - """1D only unfolding similar to the one from PyTorch. - However PyTorch unfold is extremely slow. - - Given an input tensor of size `[*, T]` this will return - a tensor `[*, F, K]` with `K` the kernel size, and `F` the number - of frames. The i-th frame is a view onto `i * stride: i * stride + kernel_size`. - This will automatically pad the input to cover at least once all entries in `input`. - - Args: - input (Tensor): tensor for which to return the frames. - kernel_size (int): size of each frame. - stride (int): stride between each frame. - - Shape: - - - Inputs: `input` is `[*, T]` - - Output: `[*, F, kernel_size]` with `F = 1 + ceil((T - kernel_size) / stride)` - - - ..Warning:: unlike PyTorch unfold, this will pad the input - so that any position in `input` is covered by at least one frame. - """ - shape = list(input.shape) - length = shape.pop(-1) - n_frames = math.ceil((max(length, kernel_size) - kernel_size) / stride) + 1 - tgt_length = (n_frames - 1) * stride + kernel_size - padded = F.pad(input, (0, tgt_length - length)).contiguous() - strides: tp.List[int] = [] - for dim in range(padded.dim()): - strides.append(padded.stride(dim)) - assert strides.pop(-1) == 1, 'data should be contiguous' - strides = strides + [stride, 1] - return padded.as_strided(shape + [n_frames, kernel_size], strides) diff --git a/julius/fftconv.py b/julius/fftconv.py deleted file mode 100644 index 1920e5369bb49b76eeea1832b7be2a0ddbc8db6b..0000000000000000000000000000000000000000 --- a/julius/fftconv.py +++ /dev/null @@ -1,183 +0,0 @@ -# File under the MIT license, see https://github.com/adefossez/julius/LICENSE for details. -# Author: adefossez, 2020 - -""" -Implementation of a FFT based 1D convolution in PyTorch. -While FFT is used in CUDNN for small kernel sizes, it is not the case for long ones, e.g. 512. -This module implements efficient FFT based convolutions for such convolutions. A typical -application is for evaluationg FIR filters with a long receptive field, typically -evaluated with a stride of 1. -""" -from typing import Optional - -import torch -try: - import torch.fft as new_fft -except ImportError: - new_fft = None # type: ignore -from torch.nn import functional as F - -from .core import pad_to, unfold -from .utils import simple_repr - - -# This is quite verbose, but sadly needed to make TorchScript happy. -def _new_rfft(x: torch.Tensor): - z = new_fft.rfft(x, dim=-1) - return torch.view_as_real(z) - - -def _old_rfft(x: torch.Tensor): - return torch.rfft(x, 1) # type: ignore - - -def _old_irfft(x: torch.Tensor, length: int): - result = torch.irfft(x, 1, signal_sizes=(length,)) # type: ignore - return result - - -def _new_irfft(x: torch.Tensor, length: int): - x = torch.view_as_complex(x) - return new_fft.irfft(x, length, dim=-1) - - -if new_fft is None: - _rfft = _old_rfft - _irfft = _old_irfft -else: - _rfft = _new_rfft - _irfft = _new_irfft - - -def _compl_mul_conjugate(a: torch.Tensor, b: torch.Tensor): - """ - Given a and b two tensors of dimension 4 - with the last dimension being the real and imaginary part, - returns a multiplied by the conjugate of b, the multiplication - being with respect to the second dimension. - - """ - # PyTorch 1.7 supports complex number, but not for all operations. - # Once the support is widespread, this can likely go away. - - op = "bcft,dct->bdft" - return torch.stack([ - torch.einsum(op, a[..., 0], b[..., 0]) + torch.einsum(op, a[..., 1], b[..., 1]), - torch.einsum(op, a[..., 1], b[..., 0]) - torch.einsum(op, a[..., 0], b[..., 1]) - ], - dim=-1) - - -def fft_conv1d( - input: torch.Tensor, weight: torch.Tensor, - bias: Optional[torch.Tensor] = None, stride: int = 1, padding: int = 0, - block_ratio: float = 5): - """ - Same as `torch.nn.functional.conv1d` but using FFT for the convolution. - Please check PyTorch documentation for more information. - - Args: - input (Tensor): input signal of shape `[B, C, T]`. - weight (Tensor): weight of the convolution `[D, C, K]` with `D` the number - of output channels. - bias (Tensor or None): if not None, bias term for the convolution. - stride (int): stride of convolution. - padding (int): padding to apply to the input. - block_ratio (float): can be tuned for speed. The input is splitted in chunks - with a size of `int(block_ratio * kernel_size)`. - - Shape: - - - Inputs: `input` is `[B, C, T]`, `weight` is `[D, C, K]` and bias is `[D]`. - - Output: `(*, T)` - - - ..note:: - This function is faster than `torch.nn.functional.conv1d` only in specific cases. - Typically, the kernel size should be of the order of 256 to see any real gain, - for a stride of 1. - - ..Warning:: - Dilation and groups are not supported at the moment. This function might use - more memory than the default Conv1d implementation. - """ - input = F.pad(input, (padding, padding)) - batch, channels, length = input.shape - out_channels, _, kernel_size = weight.shape - - if length < kernel_size: - raise RuntimeError(f"Input should be at least as large as the kernel size {kernel_size}, " - f"but it is only {length} samples long.") - if block_ratio < 1: - raise RuntimeError("Block ratio must be greater than 1.") - - # We are going to process the input blocks by blocks, as for some reason it is faster - # and less memory intensive (I think the culprit is `torch.einsum`. - block_size: int = min(int(kernel_size * block_ratio), length) - fold_stride = block_size - kernel_size + 1 - weight = pad_to(weight, block_size) - weight_z = _rfft(weight) - - # We pad the input and get the different frames, on which - frames = unfold(input, block_size, fold_stride) - - frames_z = _rfft(frames) - out_z = _compl_mul_conjugate(frames_z, weight_z) - out = _irfft(out_z, block_size) - # The last bit is invalid, because FFT will do a circular convolution. - out = out[..., :-kernel_size + 1] - out = out.reshape(batch, out_channels, -1) - out = out[..., ::stride] - target_length = (length - kernel_size) // stride + 1 - out = out[..., :target_length] - if bias is not None: - out += bias[:, None] - return out - - -class FFTConv1d(torch.nn.Module): - """ - Same as `torch.nn.Conv1d` but based on `fft_conv1d`. - Please check PyTorch documentation for more information. - - Args: - in_channels (int): number of input channels. - out_channels (int): number of output channels. - kernel_size (int): kernel size of convolution. - stride (int): stride of convolution. - padding (int): padding to apply to the input. - bias (bool): if True, use a bias term. - - ..note:: - This module is faster than `torch.nn.Conv1d` only in specific cases. - Typically, `kernel_size` should be of the order of 256 to see any real gain, - for a stride of 1. - - ..warning:: - Dilation and groups are not supported at the moment. This module might use - more memory than the default Conv1d implementation. - - >>> fftconv = FFTConv1d(12, 24, 128, 4) - >>> x = torch.randn(4, 12, 1024) - >>> print(list(fftconv(x).shape)) - [4, 24, 225] - """ - def __init__(self, in_channels: int, out_channels: int, kernel_size: int, - stride: int = 1, padding: int = 0, bias: bool = True): - super().__init__() - self.in_channels = in_channels - self.out_channels = out_channels - self.kernel_size = kernel_size - self.stride = stride - self.padding = padding - - conv = torch.nn.Conv1d(in_channels, out_channels, kernel_size, bias=bias) - self.weight = conv.weight - self.bias = conv.bias - - def forward(self, input: torch.Tensor): - return fft_conv1d( - input, self.weight, self.bias, self.stride, self.padding) - - def __repr__(self): - return simple_repr(self, overrides={"bias": self.bias is not None}) diff --git a/julius/filters.py b/julius/filters.py deleted file mode 100644 index afabcc0158e4cf45d215174b4f946ca1b0e3acaa..0000000000000000000000000000000000000000 --- a/julius/filters.py +++ /dev/null @@ -1,258 +0,0 @@ -# File under the MIT license, see https://github.com/adefossez/julius/LICENSE for details. -# Author: adefossez, 2021 -""" -FIR windowed sinc highpass and bandpass filters. -Those are convenience wrappers around the filters defined in `julius.lowpass`. -""" - -from typing import Sequence, Optional - -import torch - -# Import all lowpass filters for consistency. -from .lowpass import lowpass_filter, lowpass_filters, LowPassFilter, LowPassFilters # noqa -from .utils import simple_repr - - -class HighPassFilters(torch.nn.Module): - """ - Bank of high pass filters. See `julius.lowpass.LowPassFilters` for more - details on the implementation. - - Args: - cutoffs (list[float]): list of cutoff frequencies, in [0, 0.5] expressed as `f/f_s` where - f_s is the samplerate and `f` is the cutoff frequency. - The upper limit is 0.5, because a signal sampled at `f_s` contains only - frequencies under `f_s / 2`. - stride (int): how much to decimate the output. Probably not a good idea - to do so with a high pass filters though... - pad (bool): if True, appropriately pad the input with zero over the edge. If `stride=1`, - the output will have the same length as the input. - zeros (float): Number of zero crossings to keep. - Controls the receptive field of the Finite Impulse Response filter. - For filters with low cutoff frequency, e.g. 40Hz at 44.1kHz, - it is a bad idea to set this to a high value. - This is likely appropriate for most use. Lower values - will result in a faster filter, but with a slower attenuation around the - cutoff frequency. - fft (bool or None): if True, uses `julius.fftconv` rather than PyTorch convolutions. - If False, uses PyTorch convolutions. If None, either one will be chosen automatically - depending on the effective filter size. - - - ..warning:: - All the filters will use the same filter size, aligned on the lowest - frequency provided. If you combine a lot of filters with very diverse frequencies, it might - be more efficient to split them over multiple modules with similar frequencies. - - Shape: - - - Input: `[*, T]` - - Output: `[F, *, T']`, with `T'=T` if `pad` is True and `stride` is 1, and - `F` is the numer of cutoff frequencies. - - >>> highpass = HighPassFilters([1/4]) - >>> x = torch.randn(4, 12, 21, 1024) - >>> list(highpass(x).shape) - [1, 4, 12, 21, 1024] - """ - - def __init__(self, cutoffs: Sequence[float], stride: int = 1, pad: bool = True, - zeros: float = 8, fft: Optional[bool] = None): - super().__init__() - self._lowpasses = LowPassFilters(cutoffs, stride, pad, zeros, fft) - - @property - def cutoffs(self): - return self._lowpasses.cutoffs - - @property - def stride(self): - return self._lowpasses.stride - - @property - def pad(self): - return self._lowpasses.pad - - @property - def zeros(self): - return self._lowpasses.zeros - - @property - def fft(self): - return self._lowpasses.fft - - def forward(self, input): - lows = self._lowpasses(input) - - # We need to extract the right portion of the input in case - # pad is False or stride > 1 - if self.pad: - start, end = 0, input.shape[-1] - else: - start = self._lowpasses.half_size - end = -start - input = input[..., start:end:self.stride] - highs = input - lows - return highs - - def __repr__(self): - return simple_repr(self) - - -class HighPassFilter(torch.nn.Module): - """ - Same as `HighPassFilters` but applies a single high pass filter. - - Shape: - - - Input: `[*, T]` - - Output: `[*, T']`, with `T'=T` if `pad` is True and `stride` is 1. - - >>> highpass = HighPassFilter(1/4, stride=1) - >>> x = torch.randn(4, 124) - >>> list(highpass(x).shape) - [4, 124] - """ - - def __init__(self, cutoff: float, stride: int = 1, pad: bool = True, - zeros: float = 8, fft: Optional[bool] = None): - super().__init__() - self._highpasses = HighPassFilters([cutoff], stride, pad, zeros, fft) - - @property - def cutoff(self): - return self._highpasses.cutoffs[0] - - @property - def stride(self): - return self._highpasses.stride - - @property - def pad(self): - return self._highpasses.pad - - @property - def zeros(self): - return self._highpasses.zeros - - @property - def fft(self): - return self._highpasses.fft - - def forward(self, input): - return self._highpasses(input)[0] - - def __repr__(self): - return simple_repr(self) - - -def highpass_filters(input: torch.Tensor, cutoffs: Sequence[float], - stride: int = 1, pad: bool = True, - zeros: float = 8, fft: Optional[bool] = None): - """ - Functional version of `HighPassFilters`, refer to this class for more information. - """ - return HighPassFilters(cutoffs, stride, pad, zeros, fft).to(input)(input) - - -def highpass_filter(input: torch.Tensor, cutoff: float, - stride: int = 1, pad: bool = True, - zeros: float = 8, fft: Optional[bool] = None): - """ - Functional version of `HighPassFilter`, refer to this class for more information. - Output will not have a dimension inserted in the front. - """ - return highpass_filters(input, [cutoff], stride, pad, zeros, fft)[0] - - -class BandPassFilter(torch.nn.Module): - """ - Single band pass filter, implemented as a the difference of two lowpass filters. - - Args: - cutoff_low (float): lower cutoff frequency, in [0, 0.5] expressed as `f/f_s` where - f_s is the samplerate and `f` is the cutoff frequency. - The upper limit is 0.5, because a signal sampled at `f_s` contains only - frequencies under `f_s / 2`. - cutoff_high (float): higher cutoff frequency, in [0, 0.5] expressed as `f/f_s`. - This must be higher than cutoff_high. Note that due to the fact - that filter are not perfect, the output will be non zero even if - cutoff_high == cutoff_low. - stride (int): how much to decimate the output. - pad (bool): if True, appropriately pad the input with zero over the edge. If `stride=1`, - the output will have the same length as the input. - zeros (float): Number of zero crossings to keep. - Controls the receptive field of the Finite Impulse Response filter. - For filters with low cutoff frequency, e.g. 40Hz at 44.1kHz, - it is a bad idea to set this to a high value. - This is likely appropriate for most use. Lower values - will result in a faster filter, but with a slower attenuation around the - cutoff frequency. - fft (bool or None): if True, uses `julius.fftconv` rather than PyTorch convolutions. - If False, uses PyTorch convolutions. If None, either one will be chosen automatically - depending on the effective filter size. - - - Shape: - - - Input: `[*, T]` - - Output: `[*, T']`, with `T'=T` if `pad` is True and `stride` is 1. - - ..Note:: There is no BandPassFilters (bank of bandpasses) because its - signification would be the same as `julius.bands.SplitBands`. - - >>> bandpass = BandPassFilter(1/4, 1/3) - >>> x = torch.randn(4, 12, 21, 1024) - >>> list(bandpass(x).shape) - [4, 12, 21, 1024] - """ - - def __init__(self, cutoff_low: float, cutoff_high: float, stride: int = 1, pad: bool = True, - zeros: float = 8, fft: Optional[bool] = None): - super().__init__() - if cutoff_low > cutoff_high: - raise ValueError(f"Lower cutoff {cutoff_low} should be less than " - f"higher cutoff {cutoff_high}.") - self._lowpasses = LowPassFilters([cutoff_low, cutoff_high], stride, pad, zeros, fft) - - @property - def cutoff_low(self): - return self._lowpasses.cutoffs[0] - - @property - def cutoff_high(self): - return self._lowpasses.cutoffs[1] - - @property - def stride(self): - return self._lowpasses.stride - - @property - def pad(self): - return self._lowpasses.pad - - @property - def zeros(self): - return self._lowpasses.zeros - - @property - def fft(self): - return self._lowpasses.fft - - def forward(self, input): - lows = self._lowpasses(input) - return lows[1] - lows[0] - - def __repr__(self): - return simple_repr(self) - - -def bandpass_filter(input: torch.Tensor, cutoff_low: float, cutoff_high: float, - stride: int = 1, pad: bool = True, - zeros: float = 8, fft: Optional[bool] = None): - """ - Functional version of `BandPassfilter`, refer to this class for more information. - Output will not have a dimension inserted in the front. - """ - return BandPassFilter(cutoff_low, cutoff_high, stride, pad, zeros, fft).to(input)(input) diff --git a/julius/lowpass.py b/julius/lowpass.py deleted file mode 100644 index 0eb46e382b20bfc2d93482f9f027986b863de6f0..0000000000000000000000000000000000000000 --- a/julius/lowpass.py +++ /dev/null @@ -1,181 +0,0 @@ -# File under the MIT license, see https://github.com/adefossez/julius/LICENSE for details. -# Author: adefossez, 2020 -""" -FIR windowed sinc lowpass filters. -""" - -import math -from typing import Sequence, Optional - -import torch -from torch.nn import functional as F - -from .core import sinc -from .fftconv import fft_conv1d -from .utils import simple_repr - - -class LowPassFilters(torch.nn.Module): - """ - Bank of low pass filters. Note that a high pass or band pass filter can easily - be implemented by substracting a same signal processed with low pass filters with different - frequencies (see `julius.bands.SplitBands` for instance). - This uses a windowed sinc filter, very similar to the one used in - `julius.resample`. However, because we do not change the sample rate here, - this filter can be much more efficiently implemented using the FFT convolution from - `julius.fftconv`. - - Args: - cutoffs (list[float]): list of cutoff frequencies, in [0, 0.5] expressed as `f/f_s` where - f_s is the samplerate and `f` is the cutoff frequency. - The upper limit is 0.5, because a signal sampled at `f_s` contains only - frequencies under `f_s / 2`. - stride (int): how much to decimate the output. Keep in mind that decimation - of the output is only acceptable if the cutoff frequency is under `1/ (2 * stride)` - of the original sampling rate. - pad (bool): if True, appropriately pad the input with zero over the edge. If `stride=1`, - the output will have the same length as the input. - zeros (float): Number of zero crossings to keep. - Controls the receptive field of the Finite Impulse Response filter. - For lowpass filters with low cutoff frequency, e.g. 40Hz at 44.1kHz, - it is a bad idea to set this to a high value. - This is likely appropriate for most use. Lower values - will result in a faster filter, but with a slower attenuation around the - cutoff frequency. - fft (bool or None): if True, uses `julius.fftconv` rather than PyTorch convolutions. - If False, uses PyTorch convolutions. If None, either one will be chosen automatically - depending on the effective filter size. - - - ..warning:: - All the filters will use the same filter size, aligned on the lowest - frequency provided. If you combine a lot of filters with very diverse frequencies, it might - be more efficient to split them over multiple modules with similar frequencies. - - ..note:: - A lowpass with a cutoff frequency of 0 is defined as the null function - by convention here. This allows for a highpass with a cutoff of 0 to - be equal to identity, as defined in `julius.filters.HighPassFilters`. - - Shape: - - - Input: `[*, T]` - - Output: `[F, *, T']`, with `T'=T` if `pad` is True and `stride` is 1, and - `F` is the numer of cutoff frequencies. - - >>> lowpass = LowPassFilters([1/4]) - >>> x = torch.randn(4, 12, 21, 1024) - >>> list(lowpass(x).shape) - [1, 4, 12, 21, 1024] - """ - - def __init__(self, cutoffs: Sequence[float], stride: int = 1, pad: bool = True, - zeros: float = 8, fft: Optional[bool] = None): - super().__init__() - self.cutoffs = list(cutoffs) - if min(self.cutoffs) < 0: - raise ValueError("Minimum cutoff must be larger than zero.") - if max(self.cutoffs) > 0.5: - raise ValueError("A cutoff above 0.5 does not make sense.") - self.stride = stride - self.pad = pad - self.zeros = zeros - self.half_size = int(zeros / min([c for c in self.cutoffs if c > 0]) / 2) - if fft is None: - fft = self.half_size > 32 - self.fft = fft - window = torch.hann_window(2 * self.half_size + 1, periodic=False) - time = torch.arange(-self.half_size, self.half_size + 1) - filters = [] - for cutoff in cutoffs: - if cutoff == 0: - filter_ = torch.zeros_like(time) - else: - filter_ = 2 * cutoff * window * sinc(2 * cutoff * math.pi * time) - # Normalize filter to have sum = 1, otherwise we will have a small leakage - # of the constant component in the input signal. - filter_ /= filter_.sum() - filters.append(filter_) - self.register_buffer("filters", torch.stack(filters)[:, None]) - - def forward(self, input): - shape = list(input.shape) - input = input.view(-1, 1, shape[-1]) - if self.pad: - input = F.pad(input, (self.half_size, self.half_size), mode='replicate') - if self.fft: - out = fft_conv1d(input, self.filters, stride=self.stride) - else: - out = F.conv1d(input, self.filters, stride=self.stride) - shape.insert(0, len(self.cutoffs)) - shape[-1] = out.shape[-1] - return out.permute(1, 0, 2).reshape(shape) - - def __repr__(self): - return simple_repr(self) - - -class LowPassFilter(torch.nn.Module): - """ - Same as `LowPassFilters` but applies a single low pass filter. - - Shape: - - - Input: `[*, T]` - - Output: `[*, T']`, with `T'=T` if `pad` is True and `stride` is 1. - - >>> lowpass = LowPassFilter(1/4, stride=2) - >>> x = torch.randn(4, 124) - >>> list(lowpass(x).shape) - [4, 62] - """ - - def __init__(self, cutoff: float, stride: int = 1, pad: bool = True, - zeros: float = 8, fft: Optional[bool] = None): - super().__init__() - self._lowpasses = LowPassFilters([cutoff], stride, pad, zeros, fft) - - @property - def cutoff(self): - return self._lowpasses.cutoffs[0] - - @property - def stride(self): - return self._lowpasses.stride - - @property - def pad(self): - return self._lowpasses.pad - - @property - def zeros(self): - return self._lowpasses.zeros - - @property - def fft(self): - return self._lowpasses.fft - - def forward(self, input): - return self._lowpasses(input)[0] - - def __repr__(self): - return simple_repr(self) - - -def lowpass_filters(input: torch.Tensor, cutoffs: Sequence[float], - stride: int = 1, pad: bool = True, - zeros: float = 8, fft: Optional[bool] = None): - """ - Functional version of `LowPassFilters`, refer to this class for more information. - """ - return LowPassFilters(cutoffs, stride, pad, zeros, fft).to(input)(input) - - -def lowpass_filter(input: torch.Tensor, cutoff: float, - stride: int = 1, pad: bool = True, - zeros: float = 8, fft: Optional[bool] = None): - """ - Same as `lowpass_filters` but with a single cutoff frequency. - Output will not have a dimension inserted in the front. - """ - return lowpass_filters(input, [cutoff], stride, pad, zeros, fft)[0] diff --git a/julius/resample.py b/julius/resample.py deleted file mode 100644 index fd3b9b547d4c33ec7136d32e5f086420d0a72e14..0000000000000000000000000000000000000000 --- a/julius/resample.py +++ /dev/null @@ -1,216 +0,0 @@ -# File under the MIT license, see https://github.com/adefossez/julius/LICENSE for details. -# Author: adefossez, 2020 -""" -Differentiable, Pytorch based resampling. -Implementation of Julius O. Smith algorithm for resampling. -See https://ccrma.stanford.edu/~jos/resample/ for details. -This implementation is specially optimized for when new_sr / old_sr is a fraction -with a small numerator and denominator when removing the gcd (e.g. new_sr = 700, old_sr = 500). - -Very similar to [bmcfee/resampy](https://github.com/bmcfee/resampy) except this implementation -is optimized for the case mentioned before, while resampy is slower but more general. - -""" - -import math -from typing import Optional - -import torch -from torch.nn import functional as F - -from .core import sinc -from .utils import simple_repr - - -class ResampleFrac(torch.nn.Module): - """ - Resampling from the sample rate `old_sr` to `new_sr`. - """ - def __init__(self, old_sr: int, new_sr: int, zeros: int = 24, rolloff: float = 0.945): - """ - Args: - old_sr (int): sample rate of the input signal x. - new_sr (int): sample rate of the output. - zeros (int): number of zero crossing to keep in the sinc filter. - rolloff (float): use a lowpass filter that is `rolloff * new_sr / 2`, - to ensure sufficient margin due to the imperfection of the FIR filter used. - Lowering this value will reduce anti-aliasing, but will reduce some of the - highest frequencies. - - Shape: - - - Input: `[*, T]` - - Output: `[*, T']` with `T' = int(new_sr * T / old_sr) - - - .. caution:: - After dividing `old_sr` and `new_sr` by their GCD, both should be small - for this implementation to be fast. - - >>> import torch - >>> resample = ResampleFrac(4, 5) - >>> x = torch.randn(1000) - >>> print(len(resample(x))) - 1250 - """ - super().__init__() - if not isinstance(old_sr, int) or not isinstance(new_sr, int): - raise ValueError("old_sr and new_sr should be integers") - gcd = math.gcd(old_sr, new_sr) - self.old_sr = old_sr // gcd - self.new_sr = new_sr // gcd - self.zeros = zeros - self.rolloff = rolloff - - self._init_kernels() - - def _init_kernels(self): - if self.old_sr == self.new_sr: - return - - kernels = [] - sr = min(self.new_sr, self.old_sr) - # rolloff will perform antialiasing filtering by removing the highest frequencies. - # At first I thought I only needed this when downsampling, but when upsampling - # you will get edge artifacts without this, the edge is equivalent to zero padding, - # which will add high freq artifacts. - sr *= self.rolloff - - # The key idea of the algorithm is that x(t) can be exactly reconstructed from x[i] (tensor) - # using the sinc interpolation formula: - # x(t) = sum_i x[i] sinc(pi * old_sr * (i / old_sr - t)) - # We can then sample the function x(t) with a different sample rate: - # y[j] = x(j / new_sr) - # or, - # y[j] = sum_i x[i] sinc(pi * old_sr * (i / old_sr - j / new_sr)) - - # We see here that y[j] is the convolution of x[i] with a specific filter, for which - # we take an FIR approximation, stopping when we see at least `zeros` zeros crossing. - # But y[j+1] is going to have a different set of weights and so on, until y[j + new_sr]. - # Indeed: - # y[j + new_sr] = sum_i x[i] sinc(pi * old_sr * ((i / old_sr - (j + new_sr) / new_sr)) - # = sum_i x[i] sinc(pi * old_sr * ((i - old_sr) / old_sr - j / new_sr)) - # = sum_i x[i + old_sr] sinc(pi * old_sr * (i / old_sr - j / new_sr)) - # so y[j+new_sr] uses the same filter as y[j], but on a shifted version of x by `old_sr`. - # This will explain the F.conv1d after, with a stride of old_sr. - self._width = math.ceil(self.zeros * self.old_sr / sr) - # If old_sr is still big after GCD reduction, most filters will be very unbalanced, i.e., - # they will have a lot of almost zero values to the left or to the right... - # There is probably a way to evaluate those filters more efficiently, but this is kept for - # future work. - idx = torch.arange(-self._width, self._width + self.old_sr).float() - for i in range(self.new_sr): - t = (-i/self.new_sr + idx/self.old_sr) * sr - t = t.clamp_(-self.zeros, self.zeros) - t *= math.pi - window = torch.cos(t/self.zeros/2)**2 - kernel = sinc(t) * window - # Renormalize kernel to ensure a constant signal is preserved. - kernel.div_(kernel.sum()) - kernels.append(kernel) - - self.register_buffer("kernel", torch.stack(kernels).view(self.new_sr, 1, -1)) - - def forward(self, x: torch.Tensor, output_length: Optional[int] = None, full: bool = False): - """ - Resample x. - Args: - x (Tensor): signal to resample, time should be the last dimension - output_length (None or int): This can be set to the desired output length - (last dimension). Allowed values are between 0 and - ceil(length * new_sr / old_sr). When None (default) is specified, the - floored output length will be used. In order to select the largest possible - size, use the `full` argument. - full (bool): return the longest possible output from the input. This can be useful - if you chain resampling operations, and want to give the `output_length` only - for the last one, while passing `full=True` to all the other ones. - """ - if self.old_sr == self.new_sr: - return x - shape = x.shape - length = x.shape[-1] - x = x.reshape(-1, length) - x = F.pad(x[:, None], (self._width, self._width + self.old_sr), mode='replicate') - ys = F.conv1d(x, self.kernel, stride=self.old_sr) # type: ignore - y = ys.transpose(1, 2).reshape(list(shape[:-1]) + [-1]) - - float_output_length = self.new_sr * length / self.old_sr - max_output_length = int(math.ceil(float_output_length)) - default_output_length = int(float_output_length) - if output_length is None: - output_length = max_output_length if full else default_output_length - elif output_length < 0 or output_length > max_output_length: - raise ValueError(f"output_length must be between 0 and {max_output_length}") - else: - if full: - raise ValueError("You cannot pass both full=True and output_length") - return y[..., :output_length] - - def __repr__(self): - return simple_repr(self) - - -def resample_frac(x: torch.Tensor, old_sr: int, new_sr: int, - zeros: int = 24, rolloff: float = 0.945, - output_length: Optional[int] = None, full: bool = False): - """ - Functional version of `ResampleFrac`, refer to its documentation for more information. - - ..warning:: - If you call repeatidly this functions with the same sample rates, then the - resampling kernel will be recomputed everytime. For best performance, you should use - and cache an instance of `ResampleFrac`. - """ - return ResampleFrac(old_sr, new_sr, zeros, rolloff).to(x)(x, output_length, full) - - -# Easier implementations for downsampling and upsampling by a factor of 2 -# Kept for testing and reference - -def _kernel_upsample2_downsample2(zeros): - # Kernel for upsampling and downsampling by a factor of 2. Interestingly, - # it is the same kernel used for both. - win = torch.hann_window(4 * zeros + 1, periodic=False) - winodd = win[1::2] - t = torch.linspace(-zeros + 0.5, zeros - 0.5, 2 * zeros) - t *= math.pi - kernel = (sinc(t) * winodd).view(1, 1, -1) - return kernel - - -def _upsample2(x, zeros=24): - """ - Upsample x by a factor of two. The output will be exactly twice as long as the input. - Args: - x (Tensor): signal to upsample, time should be the last dimension - zeros (int): number of zero crossing to keep in the sinc filter. - - This function is kept only for reference, you should use the more generic `resample_frac` - one. This function does not perform anti-aliasing filtering. - """ - *other, time = x.shape - kernel = _kernel_upsample2_downsample2(zeros).to(x) - out = F.conv1d(x.view(-1, 1, time), kernel, padding=zeros)[..., 1:].view(*other, time) - y = torch.stack([x, out], dim=-1) - return y.view(*other, -1) - - -def _downsample2(x, zeros=24): - """ - Downsample x by a factor of two. The output length is half of the input, ceiled. - Args: - x (Tensor): signal to downsample, time should be the last dimension - zeros (int): number of zero crossing to keep in the sinc filter. - - This function is kept only for reference, you should use the more generic `resample_frac` - one. This function does not perform anti-aliasing filtering. - """ - if x.shape[-1] % 2 != 0: - x = F.pad(x, (0, 1)) - xeven = x[..., ::2] - xodd = x[..., 1::2] - *other, time = xodd.shape - kernel = _kernel_upsample2_downsample2(zeros).to(x) - out = xeven + F.conv1d(xodd.view(-1, 1, time), kernel, padding=zeros)[..., :-1].view( - *other, time) - return out.view(*other, -1).mul(0.5) diff --git a/julius/utils.py b/julius/utils.py deleted file mode 100644 index 944b973ad1a38700c1ba98ab7306c233cb87868d..0000000000000000000000000000000000000000 --- a/julius/utils.py +++ /dev/null @@ -1,101 +0,0 @@ -# File under the MIT license, see https://github.com/adefossez/julius/LICENSE for details. -# Author: adefossez, 2020 -""" -Non signal processing related utilities. -""" - -import inspect -import typing as tp -import sys -import time - - -def simple_repr(obj, attrs: tp.Optional[tp.Sequence[str]] = None, - overrides: dict = {}): - """ - Return a simple representation string for `obj`. - If `attrs` is not None, it should be a list of attributes to include. - """ - params = inspect.signature(obj.__class__).parameters - attrs_repr = [] - if attrs is None: - attrs = list(params.keys()) - for attr in attrs: - display = False - if attr in overrides: - value = overrides[attr] - elif hasattr(obj, attr): - value = getattr(obj, attr) - else: - continue - if attr in params: - param = params[attr] - if param.default is inspect._empty or value != param.default: # type: ignore - display = True - else: - display = True - - if display: - attrs_repr.append(f"{attr}={value}") - return f"{obj.__class__.__name__}({','.join(attrs_repr)})" - - -class MarkdownTable: - """ - Simple MarkdownTable generator. The column titles should be large enough - for the lines content. This will right align everything. - - >>> import io # we use io purely for test purposes, default is sys.stdout. - >>> file = io.StringIO() - >>> table = MarkdownTable(["Item Name", "Price"], file=file) - >>> table.header(); table.line(["Honey", "5"]); table.line(["Car", "5,000"]) - >>> print(file.getvalue().strip()) # Strip for test purposes - | Item Name | Price | - |-----------|-------| - | Honey | 5 | - | Car | 5,000 | - """ - def __init__(self, columns, file=sys.stdout): - self.columns = columns - self.file = file - - def _writeln(self, line): - self.file.write("|" + "|".join(line) + "|\n") - - def header(self): - self._writeln(f" {col} " for col in self.columns) - self._writeln("-" * (len(col) + 2) for col in self.columns) - - def line(self, line): - out = [] - for val, col in zip(line, self.columns): - val = format(val, '>' + str(len(col))) - out.append(" " + val + " ") - self._writeln(out) - - -class Chrono: - """ - Measures ellapsed time, calling `torch.cuda.synchronize` if necessary. - `Chrono` instances can be used as context managers (e.g. with `with`). - Upon exit of the block, you can access the duration of the block in seconds - with the `duration` attribute. - - >>> with Chrono() as chrono: - ... _ = sum(range(10_000)) - ... - >>> print(chrono.duration < 10) # Should be true unless on a really slow computer. - True - """ - def __init__(self): - self.duration = None - - def __enter__(self): - self._begin = time.time() - return self - - def __exit__(self, exc_type, exc_value, exc_tracebck): - import torch - if torch.cuda.is_available(): - torch.cuda.synchronize() - self.duration = time.time() - self._begin diff --git a/lib/globals/globals.py b/lib/globals/globals.py deleted file mode 100644 index d0da59d56e8c2e482bcda5eeae7cf797b830560e..0000000000000000000000000000000000000000 --- a/lib/globals/globals.py +++ /dev/null @@ -1,5 +0,0 @@ -DoFormant: bool = False -Quefrency: float = 8.0 -Timbre: float = 1.2 - -NotesOrHertz: bool = False \ No newline at end of file diff --git a/lib/infer_pack/attentions.py b/lib/infer_pack/attentions.py deleted file mode 100644 index 05501be1871643f78dddbeaa529c96667031a8db..0000000000000000000000000000000000000000 --- a/lib/infer_pack/attentions.py +++ /dev/null @@ -1,417 +0,0 @@ -import copy -import math -import numpy as np -import torch -from torch import nn -from torch.nn import functional as F - -from lib.infer_pack import commons -from lib.infer_pack import modules -from lib.infer_pack.modules import LayerNorm - - -class Encoder(nn.Module): - def __init__( - self, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size=1, - p_dropout=0.0, - window_size=10, - **kwargs - ): - super().__init__() - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.window_size = window_size - - self.drop = nn.Dropout(p_dropout) - self.attn_layers = nn.ModuleList() - self.norm_layers_1 = nn.ModuleList() - self.ffn_layers = nn.ModuleList() - self.norm_layers_2 = nn.ModuleList() - for i in range(self.n_layers): - self.attn_layers.append( - MultiHeadAttention( - hidden_channels, - hidden_channels, - n_heads, - p_dropout=p_dropout, - window_size=window_size, - ) - ) - self.norm_layers_1.append(LayerNorm(hidden_channels)) - self.ffn_layers.append( - FFN( - hidden_channels, - hidden_channels, - filter_channels, - kernel_size, - p_dropout=p_dropout, - ) - ) - self.norm_layers_2.append(LayerNorm(hidden_channels)) - - def forward(self, x, x_mask): - attn_mask = x_mask.unsqueeze(2) * x_mask.unsqueeze(-1) - x = x * x_mask - for i in range(self.n_layers): - y = self.attn_layers[i](x, x, attn_mask) - y = self.drop(y) - x = self.norm_layers_1[i](x + y) - - y = self.ffn_layers[i](x, x_mask) - y = self.drop(y) - x = self.norm_layers_2[i](x + y) - x = x * x_mask - return x - - -class Decoder(nn.Module): - def __init__( - self, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size=1, - p_dropout=0.0, - proximal_bias=False, - proximal_init=True, - **kwargs - ): - super().__init__() - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.proximal_bias = proximal_bias - self.proximal_init = proximal_init - - self.drop = nn.Dropout(p_dropout) - self.self_attn_layers = nn.ModuleList() - self.norm_layers_0 = nn.ModuleList() - self.encdec_attn_layers = nn.ModuleList() - self.norm_layers_1 = nn.ModuleList() - self.ffn_layers = nn.ModuleList() - self.norm_layers_2 = nn.ModuleList() - for i in range(self.n_layers): - self.self_attn_layers.append( - MultiHeadAttention( - hidden_channels, - hidden_channels, - n_heads, - p_dropout=p_dropout, - proximal_bias=proximal_bias, - proximal_init=proximal_init, - ) - ) - self.norm_layers_0.append(LayerNorm(hidden_channels)) - self.encdec_attn_layers.append( - MultiHeadAttention( - hidden_channels, hidden_channels, n_heads, p_dropout=p_dropout - ) - ) - self.norm_layers_1.append(LayerNorm(hidden_channels)) - self.ffn_layers.append( - FFN( - hidden_channels, - hidden_channels, - filter_channels, - kernel_size, - p_dropout=p_dropout, - causal=True, - ) - ) - self.norm_layers_2.append(LayerNorm(hidden_channels)) - - def forward(self, x, x_mask, h, h_mask): - """ - x: decoder input - h: encoder output - """ - self_attn_mask = commons.subsequent_mask(x_mask.size(2)).to( - device=x.device, dtype=x.dtype - ) - encdec_attn_mask = h_mask.unsqueeze(2) * x_mask.unsqueeze(-1) - x = x * x_mask - for i in range(self.n_layers): - y = self.self_attn_layers[i](x, x, self_attn_mask) - y = self.drop(y) - x = self.norm_layers_0[i](x + y) - - y = self.encdec_attn_layers[i](x, h, encdec_attn_mask) - y = self.drop(y) - x = self.norm_layers_1[i](x + y) - - y = self.ffn_layers[i](x, x_mask) - y = self.drop(y) - x = self.norm_layers_2[i](x + y) - x = x * x_mask - return x - - -class MultiHeadAttention(nn.Module): - def __init__( - self, - channels, - out_channels, - n_heads, - p_dropout=0.0, - window_size=None, - heads_share=True, - block_length=None, - proximal_bias=False, - proximal_init=False, - ): - super().__init__() - assert channels % n_heads == 0 - - self.channels = channels - self.out_channels = out_channels - self.n_heads = n_heads - self.p_dropout = p_dropout - self.window_size = window_size - self.heads_share = heads_share - self.block_length = block_length - self.proximal_bias = proximal_bias - self.proximal_init = proximal_init - self.attn = None - - self.k_channels = channels // n_heads - self.conv_q = nn.Conv1d(channels, channels, 1) - self.conv_k = nn.Conv1d(channels, channels, 1) - self.conv_v = nn.Conv1d(channels, channels, 1) - self.conv_o = nn.Conv1d(channels, out_channels, 1) - self.drop = nn.Dropout(p_dropout) - - if window_size is not None: - n_heads_rel = 1 if heads_share else n_heads - rel_stddev = self.k_channels**-0.5 - self.emb_rel_k = nn.Parameter( - torch.randn(n_heads_rel, window_size * 2 + 1, self.k_channels) - * rel_stddev - ) - self.emb_rel_v = nn.Parameter( - torch.randn(n_heads_rel, window_size * 2 + 1, self.k_channels) - * rel_stddev - ) - - nn.init.xavier_uniform_(self.conv_q.weight) - nn.init.xavier_uniform_(self.conv_k.weight) - nn.init.xavier_uniform_(self.conv_v.weight) - if proximal_init: - with torch.no_grad(): - self.conv_k.weight.copy_(self.conv_q.weight) - self.conv_k.bias.copy_(self.conv_q.bias) - - def forward(self, x, c, attn_mask=None): - q = self.conv_q(x) - k = self.conv_k(c) - v = self.conv_v(c) - - x, self.attn = self.attention(q, k, v, mask=attn_mask) - - x = self.conv_o(x) - return x - - def attention(self, query, key, value, mask=None): - # reshape [b, d, t] -> [b, n_h, t, d_k] - b, d, t_s, t_t = (*key.size(), query.size(2)) - query = query.view(b, self.n_heads, self.k_channels, t_t).transpose(2, 3) - key = key.view(b, self.n_heads, self.k_channels, t_s).transpose(2, 3) - value = value.view(b, self.n_heads, self.k_channels, t_s).transpose(2, 3) - - scores = torch.matmul(query / math.sqrt(self.k_channels), key.transpose(-2, -1)) - if self.window_size is not None: - assert ( - t_s == t_t - ), "Relative attention is only available for self-attention." - key_relative_embeddings = self._get_relative_embeddings(self.emb_rel_k, t_s) - rel_logits = self._matmul_with_relative_keys( - query / math.sqrt(self.k_channels), key_relative_embeddings - ) - scores_local = self._relative_position_to_absolute_position(rel_logits) - scores = scores + scores_local - if self.proximal_bias: - assert t_s == t_t, "Proximal bias is only available for self-attention." - scores = scores + self._attention_bias_proximal(t_s).to( - device=scores.device, dtype=scores.dtype - ) - if mask is not None: - scores = scores.masked_fill(mask == 0, -1e4) - if self.block_length is not None: - assert ( - t_s == t_t - ), "Local attention is only available for self-attention." - block_mask = ( - torch.ones_like(scores) - .triu(-self.block_length) - .tril(self.block_length) - ) - scores = scores.masked_fill(block_mask == 0, -1e4) - p_attn = F.softmax(scores, dim=-1) # [b, n_h, t_t, t_s] - p_attn = self.drop(p_attn) - output = torch.matmul(p_attn, value) - if self.window_size is not None: - relative_weights = self._absolute_position_to_relative_position(p_attn) - value_relative_embeddings = self._get_relative_embeddings( - self.emb_rel_v, t_s - ) - output = output + self._matmul_with_relative_values( - relative_weights, value_relative_embeddings - ) - output = ( - output.transpose(2, 3).contiguous().view(b, d, t_t) - ) # [b, n_h, t_t, d_k] -> [b, d, t_t] - return output, p_attn - - def _matmul_with_relative_values(self, x, y): - """ - x: [b, h, l, m] - y: [h or 1, m, d] - ret: [b, h, l, d] - """ - ret = torch.matmul(x, y.unsqueeze(0)) - return ret - - def _matmul_with_relative_keys(self, x, y): - """ - x: [b, h, l, d] - y: [h or 1, m, d] - ret: [b, h, l, m] - """ - ret = torch.matmul(x, y.unsqueeze(0).transpose(-2, -1)) - return ret - - def _get_relative_embeddings(self, relative_embeddings, length): - max_relative_position = 2 * self.window_size + 1 - # Pad first before slice to avoid using cond ops. - pad_length = max(length - (self.window_size + 1), 0) - slice_start_position = max((self.window_size + 1) - length, 0) - slice_end_position = slice_start_position + 2 * length - 1 - if pad_length > 0: - padded_relative_embeddings = F.pad( - relative_embeddings, - commons.convert_pad_shape([[0, 0], [pad_length, pad_length], [0, 0]]), - ) - else: - padded_relative_embeddings = relative_embeddings - used_relative_embeddings = padded_relative_embeddings[ - :, slice_start_position:slice_end_position - ] - return used_relative_embeddings - - def _relative_position_to_absolute_position(self, x): - """ - x: [b, h, l, 2*l-1] - ret: [b, h, l, l] - """ - batch, heads, length, _ = x.size() - # Concat columns of pad to shift from relative to absolute indexing. - x = F.pad(x, commons.convert_pad_shape([[0, 0], [0, 0], [0, 0], [0, 1]])) - - # Concat extra elements so to add up to shape (len+1, 2*len-1). - x_flat = x.view([batch, heads, length * 2 * length]) - x_flat = F.pad( - x_flat, commons.convert_pad_shape([[0, 0], [0, 0], [0, length - 1]]) - ) - - # Reshape and slice out the padded elements. - x_final = x_flat.view([batch, heads, length + 1, 2 * length - 1])[ - :, :, :length, length - 1 : - ] - return x_final - - def _absolute_position_to_relative_position(self, x): - """ - x: [b, h, l, l] - ret: [b, h, l, 2*l-1] - """ - batch, heads, length, _ = x.size() - # padd along column - x = F.pad( - x, commons.convert_pad_shape([[0, 0], [0, 0], [0, 0], [0, length - 1]]) - ) - x_flat = x.view([batch, heads, length**2 + length * (length - 1)]) - # add 0's in the beginning that will skew the elements after reshape - x_flat = F.pad(x_flat, commons.convert_pad_shape([[0, 0], [0, 0], [length, 0]])) - x_final = x_flat.view([batch, heads, length, 2 * length])[:, :, :, 1:] - return x_final - - def _attention_bias_proximal(self, length): - """Bias for self-attention to encourage attention to close positions. - Args: - length: an integer scalar. - Returns: - a Tensor with shape [1, 1, length, length] - """ - r = torch.arange(length, dtype=torch.float32) - diff = torch.unsqueeze(r, 0) - torch.unsqueeze(r, 1) - return torch.unsqueeze(torch.unsqueeze(-torch.log1p(torch.abs(diff)), 0), 0) - - -class FFN(nn.Module): - def __init__( - self, - in_channels, - out_channels, - filter_channels, - kernel_size, - p_dropout=0.0, - activation=None, - causal=False, - ): - super().__init__() - self.in_channels = in_channels - self.out_channels = out_channels - self.filter_channels = filter_channels - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.activation = activation - self.causal = causal - - if causal: - self.padding = self._causal_padding - else: - self.padding = self._same_padding - - self.conv_1 = nn.Conv1d(in_channels, filter_channels, kernel_size) - self.conv_2 = nn.Conv1d(filter_channels, out_channels, kernel_size) - self.drop = nn.Dropout(p_dropout) - - def forward(self, x, x_mask): - x = self.conv_1(self.padding(x * x_mask)) - if self.activation == "gelu": - x = x * torch.sigmoid(1.702 * x) - else: - x = torch.relu(x) - x = self.drop(x) - x = self.conv_2(self.padding(x * x_mask)) - return x * x_mask - - def _causal_padding(self, x): - if self.kernel_size == 1: - return x - pad_l = self.kernel_size - 1 - pad_r = 0 - padding = [[0, 0], [0, 0], [pad_l, pad_r]] - x = F.pad(x, commons.convert_pad_shape(padding)) - return x - - def _same_padding(self, x): - if self.kernel_size == 1: - return x - pad_l = (self.kernel_size - 1) // 2 - pad_r = self.kernel_size // 2 - padding = [[0, 0], [0, 0], [pad_l, pad_r]] - x = F.pad(x, commons.convert_pad_shape(padding)) - return x diff --git a/lib/infer_pack/commons.py b/lib/infer_pack/commons.py deleted file mode 100644 index 54470986f37825b35d90d7efa7437d1c26b87215..0000000000000000000000000000000000000000 --- a/lib/infer_pack/commons.py +++ /dev/null @@ -1,166 +0,0 @@ -import math -import numpy as np -import torch -from torch import nn -from torch.nn import functional as F - - -def init_weights(m, mean=0.0, std=0.01): - classname = m.__class__.__name__ - if classname.find("Conv") != -1: - m.weight.data.normal_(mean, std) - - -def get_padding(kernel_size, dilation=1): - return int((kernel_size * dilation - dilation) / 2) - - -def convert_pad_shape(pad_shape): - l = pad_shape[::-1] - pad_shape = [item for sublist in l for item in sublist] - return pad_shape - - -def kl_divergence(m_p, logs_p, m_q, logs_q): - """KL(P||Q)""" - kl = (logs_q - logs_p) - 0.5 - kl += ( - 0.5 * (torch.exp(2.0 * logs_p) + ((m_p - m_q) ** 2)) * torch.exp(-2.0 * logs_q) - ) - return kl - - -def rand_gumbel(shape): - """Sample from the Gumbel distribution, protect from overflows.""" - uniform_samples = torch.rand(shape) * 0.99998 + 0.00001 - return -torch.log(-torch.log(uniform_samples)) - - -def rand_gumbel_like(x): - g = rand_gumbel(x.size()).to(dtype=x.dtype, device=x.device) - return g - - -def slice_segments(x, ids_str, segment_size=4): - ret = torch.zeros_like(x[:, :, :segment_size]) - for i in range(x.size(0)): - idx_str = ids_str[i] - idx_end = idx_str + segment_size - ret[i] = x[i, :, idx_str:idx_end] - return ret - - -def slice_segments2(x, ids_str, segment_size=4): - ret = torch.zeros_like(x[:, :segment_size]) - for i in range(x.size(0)): - idx_str = ids_str[i] - idx_end = idx_str + segment_size - ret[i] = x[i, idx_str:idx_end] - return ret - - -def rand_slice_segments(x, x_lengths=None, segment_size=4): - b, d, t = x.size() - if x_lengths is None: - x_lengths = t - ids_str_max = x_lengths - segment_size + 1 - ids_str = (torch.rand([b]).to(device=x.device) * ids_str_max).to(dtype=torch.long) - ret = slice_segments(x, ids_str, segment_size) - return ret, ids_str - - -def get_timing_signal_1d(length, channels, min_timescale=1.0, max_timescale=1.0e4): - position = torch.arange(length, dtype=torch.float) - num_timescales = channels // 2 - log_timescale_increment = math.log(float(max_timescale) / float(min_timescale)) / ( - num_timescales - 1 - ) - inv_timescales = min_timescale * torch.exp( - torch.arange(num_timescales, dtype=torch.float) * -log_timescale_increment - ) - scaled_time = position.unsqueeze(0) * inv_timescales.unsqueeze(1) - signal = torch.cat([torch.sin(scaled_time), torch.cos(scaled_time)], 0) - signal = F.pad(signal, [0, 0, 0, channels % 2]) - signal = signal.view(1, channels, length) - return signal - - -def add_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4): - b, channels, length = x.size() - signal = get_timing_signal_1d(length, channels, min_timescale, max_timescale) - return x + signal.to(dtype=x.dtype, device=x.device) - - -def cat_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4, axis=1): - b, channels, length = x.size() - signal = get_timing_signal_1d(length, channels, min_timescale, max_timescale) - return torch.cat([x, signal.to(dtype=x.dtype, device=x.device)], axis) - - -def subsequent_mask(length): - mask = torch.tril(torch.ones(length, length)).unsqueeze(0).unsqueeze(0) - return mask - - -@torch.jit.script -def fused_add_tanh_sigmoid_multiply(input_a, input_b, n_channels): - n_channels_int = n_channels[0] - in_act = input_a + input_b - t_act = torch.tanh(in_act[:, :n_channels_int, :]) - s_act = torch.sigmoid(in_act[:, n_channels_int:, :]) - acts = t_act * s_act - return acts - - -def convert_pad_shape(pad_shape): - l = pad_shape[::-1] - pad_shape = [item for sublist in l for item in sublist] - return pad_shape - - -def shift_1d(x): - x = F.pad(x, convert_pad_shape([[0, 0], [0, 0], [1, 0]]))[:, :, :-1] - return x - - -def sequence_mask(length, max_length=None): - if max_length is None: - max_length = length.max() - x = torch.arange(max_length, dtype=length.dtype, device=length.device) - return x.unsqueeze(0) < length.unsqueeze(1) - - -def generate_path(duration, mask): - """ - duration: [b, 1, t_x] - mask: [b, 1, t_y, t_x] - """ - device = duration.device - - b, _, t_y, t_x = mask.shape - cum_duration = torch.cumsum(duration, -1) - - cum_duration_flat = cum_duration.view(b * t_x) - path = sequence_mask(cum_duration_flat, t_y).to(mask.dtype) - path = path.view(b, t_x, t_y) - path = path - F.pad(path, convert_pad_shape([[0, 0], [1, 0], [0, 0]]))[:, :-1] - path = path.unsqueeze(1).transpose(2, 3) * mask - return path - - -def clip_grad_value_(parameters, clip_value, norm_type=2): - if isinstance(parameters, torch.Tensor): - parameters = [parameters] - parameters = list(filter(lambda p: p.grad is not None, parameters)) - norm_type = float(norm_type) - if clip_value is not None: - clip_value = float(clip_value) - - total_norm = 0 - for p in parameters: - param_norm = p.grad.data.norm(norm_type) - total_norm += param_norm.item() ** norm_type - if clip_value is not None: - p.grad.data.clamp_(min=-clip_value, max=clip_value) - total_norm = total_norm ** (1.0 / norm_type) - return total_norm diff --git a/lib/infer_pack/models.py b/lib/infer_pack/models.py deleted file mode 100644 index ec107476df968e51aafc6c3d102a9ed8c53f141a..0000000000000000000000000000000000000000 --- a/lib/infer_pack/models.py +++ /dev/null @@ -1,1144 +0,0 @@ -import math, pdb, os -from time import time as ttime -import torch -from torch import nn -from torch.nn import functional as F -from lib.infer_pack import modules -from lib.infer_pack import attentions -from lib.infer_pack import commons -from lib.infer_pack.commons import init_weights, get_padding -from torch.nn import Conv1d, ConvTranspose1d, AvgPool1d, Conv2d -from torch.nn.utils import weight_norm, remove_weight_norm, spectral_norm -from lib.infer_pack.commons import init_weights -import numpy as np -from lib.infer_pack import commons - - -class TextEncoder256(nn.Module): - def __init__( - self, - out_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - f0=True, - ): - super().__init__() - self.out_channels = out_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.emb_phone = nn.Linear(256, hidden_channels) - self.lrelu = nn.LeakyReLU(0.1, inplace=True) - if f0 == True: - self.emb_pitch = nn.Embedding(256, hidden_channels) # pitch 256 - self.encoder = attentions.Encoder( - hidden_channels, filter_channels, n_heads, n_layers, kernel_size, p_dropout - ) - self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1) - - def forward(self, phone, pitch, lengths): - if pitch == None: - x = self.emb_phone(phone) - else: - x = self.emb_phone(phone) + self.emb_pitch(pitch) - x = x * math.sqrt(self.hidden_channels) # [b, t, h] - x = self.lrelu(x) - x = torch.transpose(x, 1, -1) # [b, h, t] - x_mask = torch.unsqueeze(commons.sequence_mask(lengths, x.size(2)), 1).to( - x.dtype - ) - x = self.encoder(x * x_mask, x_mask) - stats = self.proj(x) * x_mask - - m, logs = torch.split(stats, self.out_channels, dim=1) - return m, logs, x_mask - - -class TextEncoder768(nn.Module): - def __init__( - self, - out_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - f0=True, - ): - super().__init__() - self.out_channels = out_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.emb_phone = nn.Linear(768, hidden_channels) - self.lrelu = nn.LeakyReLU(0.1, inplace=True) - if f0 == True: - self.emb_pitch = nn.Embedding(256, hidden_channels) # pitch 256 - self.encoder = attentions.Encoder( - hidden_channels, filter_channels, n_heads, n_layers, kernel_size, p_dropout - ) - self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1) - - def forward(self, phone, pitch, lengths): - if pitch == None: - x = self.emb_phone(phone) - else: - x = self.emb_phone(phone) + self.emb_pitch(pitch) - x = x * math.sqrt(self.hidden_channels) # [b, t, h] - x = self.lrelu(x) - x = torch.transpose(x, 1, -1) # [b, h, t] - x_mask = torch.unsqueeze(commons.sequence_mask(lengths, x.size(2)), 1).to( - x.dtype - ) - x = self.encoder(x * x_mask, x_mask) - stats = self.proj(x) * x_mask - - m, logs = torch.split(stats, self.out_channels, dim=1) - return m, logs, x_mask - - -class ResidualCouplingBlock(nn.Module): - def __init__( - self, - channels, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - n_flows=4, - gin_channels=0, - ): - super().__init__() - self.channels = channels - self.hidden_channels = hidden_channels - self.kernel_size = kernel_size - self.dilation_rate = dilation_rate - self.n_layers = n_layers - self.n_flows = n_flows - self.gin_channels = gin_channels - - self.flows = nn.ModuleList() - for i in range(n_flows): - self.flows.append( - modules.ResidualCouplingLayer( - channels, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - gin_channels=gin_channels, - mean_only=True, - ) - ) - self.flows.append(modules.Flip()) - - def forward(self, x, x_mask, g=None, reverse=False): - if not reverse: - for flow in self.flows: - x, _ = flow(x, x_mask, g=g, reverse=reverse) - else: - for flow in reversed(self.flows): - x = flow(x, x_mask, g=g, reverse=reverse) - return x - - def remove_weight_norm(self): - for i in range(self.n_flows): - self.flows[i * 2].remove_weight_norm() - - -class PosteriorEncoder(nn.Module): - def __init__( - self, - in_channels, - out_channels, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - gin_channels=0, - ): - super().__init__() - self.in_channels = in_channels - self.out_channels = out_channels - self.hidden_channels = hidden_channels - self.kernel_size = kernel_size - self.dilation_rate = dilation_rate - self.n_layers = n_layers - self.gin_channels = gin_channels - - self.pre = nn.Conv1d(in_channels, hidden_channels, 1) - self.enc = modules.WN( - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - gin_channels=gin_channels, - ) - self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1) - - def forward(self, x, x_lengths, g=None): - x_mask = torch.unsqueeze(commons.sequence_mask(x_lengths, x.size(2)), 1).to( - x.dtype - ) - x = self.pre(x) * x_mask - x = self.enc(x, x_mask, g=g) - stats = self.proj(x) * x_mask - m, logs = torch.split(stats, self.out_channels, dim=1) - z = (m + torch.randn_like(m) * torch.exp(logs)) * x_mask - return z, m, logs, x_mask - - def remove_weight_norm(self): - self.enc.remove_weight_norm() - - -class Generator(torch.nn.Module): - def __init__( - self, - initial_channel, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=0, - ): - super(Generator, self).__init__() - self.num_kernels = len(resblock_kernel_sizes) - self.num_upsamples = len(upsample_rates) - self.conv_pre = Conv1d( - initial_channel, upsample_initial_channel, 7, 1, padding=3 - ) - resblock = modules.ResBlock1 if resblock == "1" else modules.ResBlock2 - - self.ups = nn.ModuleList() - for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)): - self.ups.append( - weight_norm( - ConvTranspose1d( - upsample_initial_channel // (2**i), - upsample_initial_channel // (2 ** (i + 1)), - k, - u, - padding=(k - u) // 2, - ) - ) - ) - - self.resblocks = nn.ModuleList() - for i in range(len(self.ups)): - ch = upsample_initial_channel // (2 ** (i + 1)) - for j, (k, d) in enumerate( - zip(resblock_kernel_sizes, resblock_dilation_sizes) - ): - self.resblocks.append(resblock(ch, k, d)) - - self.conv_post = Conv1d(ch, 1, 7, 1, padding=3, bias=False) - self.ups.apply(init_weights) - - if gin_channels != 0: - self.cond = nn.Conv1d(gin_channels, upsample_initial_channel, 1) - - def forward(self, x, g=None): - x = self.conv_pre(x) - if g is not None: - x = x + self.cond(g) - - for i in range(self.num_upsamples): - x = F.leaky_relu(x, modules.LRELU_SLOPE) - x = self.ups[i](x) - xs = None - for j in range(self.num_kernels): - if xs is None: - xs = self.resblocks[i * self.num_kernels + j](x) - else: - xs += self.resblocks[i * self.num_kernels + j](x) - x = xs / self.num_kernels - x = F.leaky_relu(x) - x = self.conv_post(x) - x = torch.tanh(x) - - return x - - def remove_weight_norm(self): - for l in self.ups: - remove_weight_norm(l) - for l in self.resblocks: - l.remove_weight_norm() - - -class SineGen(torch.nn.Module): - """Definition of sine generator - SineGen(samp_rate, harmonic_num = 0, - sine_amp = 0.1, noise_std = 0.003, - voiced_threshold = 0, - flag_for_pulse=False) - samp_rate: sampling rate in Hz - harmonic_num: number of harmonic overtones (default 0) - sine_amp: amplitude of sine-wavefrom (default 0.1) - noise_std: std of Gaussian noise (default 0.003) - voiced_thoreshold: F0 threshold for U/V classification (default 0) - flag_for_pulse: this SinGen is used inside PulseGen (default False) - Note: when flag_for_pulse is True, the first time step of a voiced - segment is always sin(np.pi) or cos(0) - """ - - def __init__( - self, - samp_rate, - harmonic_num=0, - sine_amp=0.1, - noise_std=0.003, - voiced_threshold=0, - flag_for_pulse=False, - ): - super(SineGen, self).__init__() - self.sine_amp = sine_amp - self.noise_std = noise_std - self.harmonic_num = harmonic_num - self.dim = self.harmonic_num + 1 - self.sampling_rate = samp_rate - self.voiced_threshold = voiced_threshold - - def _f02uv(self, f0): - # generate uv signal - uv = torch.ones_like(f0) - uv = uv * (f0 > self.voiced_threshold) - if uv.device.type == "privateuseone": # for DirectML - uv = uv.float() - return uv - - def forward(self, f0, upp): - """sine_tensor, uv = forward(f0) - input F0: tensor(batchsize=1, length, dim=1) - f0 for unvoiced steps should be 0 - output sine_tensor: tensor(batchsize=1, length, dim) - output uv: tensor(batchsize=1, length, 1) - """ - with torch.no_grad(): - f0 = f0[:, None].transpose(1, 2) - f0_buf = torch.zeros(f0.shape[0], f0.shape[1], self.dim, device=f0.device) - # fundamental component - f0_buf[:, :, 0] = f0[:, :, 0] - for idx in np.arange(self.harmonic_num): - f0_buf[:, :, idx + 1] = f0_buf[:, :, 0] * ( - idx + 2 - ) # idx + 2: the (idx+1)-th overtone, (idx+2)-th harmonic - rad_values = (f0_buf / self.sampling_rate) % 1 ###%1意味着n_har的乘积无法后处理优化 - rand_ini = torch.rand( - f0_buf.shape[0], f0_buf.shape[2], device=f0_buf.device - ) - rand_ini[:, 0] = 0 - rad_values[:, 0, :] = rad_values[:, 0, :] + rand_ini - tmp_over_one = torch.cumsum(rad_values, 1) # % 1 #####%1意味着后面的cumsum无法再优化 - tmp_over_one *= upp - tmp_over_one = F.interpolate( - tmp_over_one.transpose(2, 1), - scale_factor=upp, - mode="linear", - align_corners=True, - ).transpose(2, 1) - rad_values = F.interpolate( - rad_values.transpose(2, 1), scale_factor=upp, mode="nearest" - ).transpose( - 2, 1 - ) ####### - tmp_over_one %= 1 - tmp_over_one_idx = (tmp_over_one[:, 1:, :] - tmp_over_one[:, :-1, :]) < 0 - cumsum_shift = torch.zeros_like(rad_values) - cumsum_shift[:, 1:, :] = tmp_over_one_idx * -1.0 - sine_waves = torch.sin( - torch.cumsum(rad_values + cumsum_shift, dim=1) * 2 * np.pi - ) - sine_waves = sine_waves * self.sine_amp - uv = self._f02uv(f0) - uv = F.interpolate( - uv.transpose(2, 1), scale_factor=upp, mode="nearest" - ).transpose(2, 1) - noise_amp = uv * self.noise_std + (1 - uv) * self.sine_amp / 3 - noise = noise_amp * torch.randn_like(sine_waves) - sine_waves = sine_waves * uv + noise - return sine_waves, uv, noise - - -class SourceModuleHnNSF(torch.nn.Module): - """SourceModule for hn-nsf - SourceModule(sampling_rate, harmonic_num=0, sine_amp=0.1, - add_noise_std=0.003, voiced_threshod=0) - sampling_rate: sampling_rate in Hz - harmonic_num: number of harmonic above F0 (default: 0) - sine_amp: amplitude of sine source signal (default: 0.1) - add_noise_std: std of additive Gaussian noise (default: 0.003) - note that amplitude of noise in unvoiced is decided - by sine_amp - voiced_threshold: threhold to set U/V given F0 (default: 0) - Sine_source, noise_source = SourceModuleHnNSF(F0_sampled) - F0_sampled (batchsize, length, 1) - Sine_source (batchsize, length, 1) - noise_source (batchsize, length 1) - uv (batchsize, length, 1) - """ - - def __init__( - self, - sampling_rate, - harmonic_num=0, - sine_amp=0.1, - add_noise_std=0.003, - voiced_threshod=0, - is_half=True, - ): - super(SourceModuleHnNSF, self).__init__() - - self.sine_amp = sine_amp - self.noise_std = add_noise_std - self.is_half = is_half - # to produce sine waveforms - self.l_sin_gen = SineGen( - sampling_rate, harmonic_num, sine_amp, add_noise_std, voiced_threshod - ) - - # to merge source harmonics into a single excitation - self.l_linear = torch.nn.Linear(harmonic_num + 1, 1) - self.l_tanh = torch.nn.Tanh() - - def forward(self, x, upp=None): - sine_wavs, uv, _ = self.l_sin_gen(x, upp) - if self.is_half: - sine_wavs = sine_wavs.half() - sine_merge = self.l_tanh(self.l_linear(sine_wavs)) - return sine_merge, None, None # noise, uv - - -class GeneratorNSF(torch.nn.Module): - def __init__( - self, - initial_channel, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels, - sr, - is_half=False, - ): - super(GeneratorNSF, self).__init__() - self.num_kernels = len(resblock_kernel_sizes) - self.num_upsamples = len(upsample_rates) - - self.f0_upsamp = torch.nn.Upsample(scale_factor=np.prod(upsample_rates)) - self.m_source = SourceModuleHnNSF( - sampling_rate=sr, harmonic_num=0, is_half=is_half - ) - self.noise_convs = nn.ModuleList() - self.conv_pre = Conv1d( - initial_channel, upsample_initial_channel, 7, 1, padding=3 - ) - resblock = modules.ResBlock1 if resblock == "1" else modules.ResBlock2 - - self.ups = nn.ModuleList() - for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)): - c_cur = upsample_initial_channel // (2 ** (i + 1)) - self.ups.append( - weight_norm( - ConvTranspose1d( - upsample_initial_channel // (2**i), - upsample_initial_channel // (2 ** (i + 1)), - k, - u, - padding=(k - u) // 2, - ) - ) - ) - if i + 1 < len(upsample_rates): - stride_f0 = np.prod(upsample_rates[i + 1 :]) - self.noise_convs.append( - Conv1d( - 1, - c_cur, - kernel_size=stride_f0 * 2, - stride=stride_f0, - padding=stride_f0 // 2, - ) - ) - else: - self.noise_convs.append(Conv1d(1, c_cur, kernel_size=1)) - - self.resblocks = nn.ModuleList() - for i in range(len(self.ups)): - ch = upsample_initial_channel // (2 ** (i + 1)) - for j, (k, d) in enumerate( - zip(resblock_kernel_sizes, resblock_dilation_sizes) - ): - self.resblocks.append(resblock(ch, k, d)) - - self.conv_post = Conv1d(ch, 1, 7, 1, padding=3, bias=False) - self.ups.apply(init_weights) - - if gin_channels != 0: - self.cond = nn.Conv1d(gin_channels, upsample_initial_channel, 1) - - self.upp = np.prod(upsample_rates) - - def forward(self, x, f0, g=None): - har_source, noi_source, uv = self.m_source(f0, self.upp) - har_source = har_source.transpose(1, 2) - x = self.conv_pre(x) - if g is not None: - x = x + self.cond(g) - - for i in range(self.num_upsamples): - x = F.leaky_relu(x, modules.LRELU_SLOPE) - x = self.ups[i](x) - x_source = self.noise_convs[i](har_source) - x = x + x_source - xs = None - for j in range(self.num_kernels): - if xs is None: - xs = self.resblocks[i * self.num_kernels + j](x) - else: - xs += self.resblocks[i * self.num_kernels + j](x) - x = xs / self.num_kernels - x = F.leaky_relu(x) - x = self.conv_post(x) - x = torch.tanh(x) - return x - - def remove_weight_norm(self): - for l in self.ups: - remove_weight_norm(l) - for l in self.resblocks: - l.remove_weight_norm() - - -sr2sr = { - "32k": 32000, - "40k": 40000, - "48k": 48000, -} - - -class SynthesizerTrnMs256NSFsid(nn.Module): - def __init__( - self, - spec_channels, - segment_size, - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - spk_embed_dim, - gin_channels, - sr, - **kwargs - ): - super().__init__() - if type(sr) == type("strr"): - sr = sr2sr[sr] - self.spec_channels = spec_channels - self.inter_channels = inter_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.resblock = resblock - self.resblock_kernel_sizes = resblock_kernel_sizes - self.resblock_dilation_sizes = resblock_dilation_sizes - self.upsample_rates = upsample_rates - self.upsample_initial_channel = upsample_initial_channel - self.upsample_kernel_sizes = upsample_kernel_sizes - self.segment_size = segment_size - self.gin_channels = gin_channels - # self.hop_length = hop_length# - self.spk_embed_dim = spk_embed_dim - self.enc_p = TextEncoder256( - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - ) - self.dec = GeneratorNSF( - inter_channels, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=gin_channels, - sr=sr, - is_half=kwargs["is_half"], - ) - self.enc_q = PosteriorEncoder( - spec_channels, - inter_channels, - hidden_channels, - 5, - 1, - 16, - gin_channels=gin_channels, - ) - self.flow = ResidualCouplingBlock( - inter_channels, hidden_channels, 5, 1, 3, gin_channels=gin_channels - ) - self.emb_g = nn.Embedding(self.spk_embed_dim, gin_channels) - print("gin_channels:", gin_channels, "self.spk_embed_dim:", self.spk_embed_dim) - - def remove_weight_norm(self): - self.dec.remove_weight_norm() - self.flow.remove_weight_norm() - self.enc_q.remove_weight_norm() - - def forward( - self, phone, phone_lengths, pitch, pitchf, y, y_lengths, ds - ): # 这里ds是id,[bs,1] - # print(1,pitch.shape)#[bs,t] - g = self.emb_g(ds).unsqueeze(-1) # [b, 256, 1]##1是t,广播的 - m_p, logs_p, x_mask = self.enc_p(phone, pitch, phone_lengths) - z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g) - z_p = self.flow(z, y_mask, g=g) - z_slice, ids_slice = commons.rand_slice_segments( - z, y_lengths, self.segment_size - ) - # print(-1,pitchf.shape,ids_slice,self.segment_size,self.hop_length,self.segment_size//self.hop_length) - pitchf = commons.slice_segments2(pitchf, ids_slice, self.segment_size) - # print(-2,pitchf.shape,z_slice.shape) - o = self.dec(z_slice, pitchf, g=g) - return o, ids_slice, x_mask, y_mask, (z, z_p, m_p, logs_p, m_q, logs_q) - - def infer(self, phone, phone_lengths, pitch, nsff0, sid, rate=None): - g = self.emb_g(sid).unsqueeze(-1) - m_p, logs_p, x_mask = self.enc_p(phone, pitch, phone_lengths) - z_p = (m_p + torch.exp(logs_p) * torch.randn_like(m_p) * 0.66666) * x_mask - if rate: - head = int(z_p.shape[2] * rate) - z_p = z_p[:, :, -head:] - x_mask = x_mask[:, :, -head:] - nsff0 = nsff0[:, -head:] - z = self.flow(z_p, x_mask, g=g, reverse=True) - o = self.dec(z * x_mask, nsff0, g=g) - return o, x_mask, (z, z_p, m_p, logs_p) - - -class SynthesizerTrnMs768NSFsid(nn.Module): - def __init__( - self, - spec_channels, - segment_size, - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - spk_embed_dim, - gin_channels, - sr, - **kwargs - ): - super().__init__() - if type(sr) == type("strr"): - sr = sr2sr[sr] - self.spec_channels = spec_channels - self.inter_channels = inter_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.resblock = resblock - self.resblock_kernel_sizes = resblock_kernel_sizes - self.resblock_dilation_sizes = resblock_dilation_sizes - self.upsample_rates = upsample_rates - self.upsample_initial_channel = upsample_initial_channel - self.upsample_kernel_sizes = upsample_kernel_sizes - self.segment_size = segment_size - self.gin_channels = gin_channels - # self.hop_length = hop_length# - self.spk_embed_dim = spk_embed_dim - self.enc_p = TextEncoder768( - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - ) - self.dec = GeneratorNSF( - inter_channels, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=gin_channels, - sr=sr, - is_half=kwargs["is_half"], - ) - self.enc_q = PosteriorEncoder( - spec_channels, - inter_channels, - hidden_channels, - 5, - 1, - 16, - gin_channels=gin_channels, - ) - self.flow = ResidualCouplingBlock( - inter_channels, hidden_channels, 5, 1, 3, gin_channels=gin_channels - ) - self.emb_g = nn.Embedding(self.spk_embed_dim, gin_channels) - print("gin_channels:", gin_channels, "self.spk_embed_dim:", self.spk_embed_dim) - - def remove_weight_norm(self): - self.dec.remove_weight_norm() - self.flow.remove_weight_norm() - self.enc_q.remove_weight_norm() - - def forward( - self, phone, phone_lengths, pitch, pitchf, y, y_lengths, ds - ): # 这里ds是id,[bs,1] - # print(1,pitch.shape)#[bs,t] - g = self.emb_g(ds).unsqueeze(-1) # [b, 256, 1]##1是t,广播的 - m_p, logs_p, x_mask = self.enc_p(phone, pitch, phone_lengths) - z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g) - z_p = self.flow(z, y_mask, g=g) - z_slice, ids_slice = commons.rand_slice_segments( - z, y_lengths, self.segment_size - ) - # print(-1,pitchf.shape,ids_slice,self.segment_size,self.hop_length,self.segment_size//self.hop_length) - pitchf = commons.slice_segments2(pitchf, ids_slice, self.segment_size) - # print(-2,pitchf.shape,z_slice.shape) - o = self.dec(z_slice, pitchf, g=g) - return o, ids_slice, x_mask, y_mask, (z, z_p, m_p, logs_p, m_q, logs_q) - - def infer(self, phone, phone_lengths, pitch, nsff0, sid, rate=None): - g = self.emb_g(sid).unsqueeze(-1) - m_p, logs_p, x_mask = self.enc_p(phone, pitch, phone_lengths) - z_p = (m_p + torch.exp(logs_p) * torch.randn_like(m_p) * 0.66666) * x_mask - if rate: - head = int(z_p.shape[2] * rate) - z_p = z_p[:, :, -head:] - x_mask = x_mask[:, :, -head:] - nsff0 = nsff0[:, -head:] - z = self.flow(z_p, x_mask, g=g, reverse=True) - o = self.dec(z * x_mask, nsff0, g=g) - return o, x_mask, (z, z_p, m_p, logs_p) - - -class SynthesizerTrnMs256NSFsid_nono(nn.Module): - def __init__( - self, - spec_channels, - segment_size, - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - spk_embed_dim, - gin_channels, - sr=None, - **kwargs - ): - super().__init__() - self.spec_channels = spec_channels - self.inter_channels = inter_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.resblock = resblock - self.resblock_kernel_sizes = resblock_kernel_sizes - self.resblock_dilation_sizes = resblock_dilation_sizes - self.upsample_rates = upsample_rates - self.upsample_initial_channel = upsample_initial_channel - self.upsample_kernel_sizes = upsample_kernel_sizes - self.segment_size = segment_size - self.gin_channels = gin_channels - # self.hop_length = hop_length# - self.spk_embed_dim = spk_embed_dim - self.enc_p = TextEncoder256( - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - f0=False, - ) - self.dec = Generator( - inter_channels, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=gin_channels, - ) - self.enc_q = PosteriorEncoder( - spec_channels, - inter_channels, - hidden_channels, - 5, - 1, - 16, - gin_channels=gin_channels, - ) - self.flow = ResidualCouplingBlock( - inter_channels, hidden_channels, 5, 1, 3, gin_channels=gin_channels - ) - self.emb_g = nn.Embedding(self.spk_embed_dim, gin_channels) - print("gin_channels:", gin_channels, "self.spk_embed_dim:", self.spk_embed_dim) - - def remove_weight_norm(self): - self.dec.remove_weight_norm() - self.flow.remove_weight_norm() - self.enc_q.remove_weight_norm() - - def forward(self, phone, phone_lengths, y, y_lengths, ds): # 这里ds是id,[bs,1] - g = self.emb_g(ds).unsqueeze(-1) # [b, 256, 1]##1是t,广播的 - m_p, logs_p, x_mask = self.enc_p(phone, None, phone_lengths) - z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g) - z_p = self.flow(z, y_mask, g=g) - z_slice, ids_slice = commons.rand_slice_segments( - z, y_lengths, self.segment_size - ) - o = self.dec(z_slice, g=g) - return o, ids_slice, x_mask, y_mask, (z, z_p, m_p, logs_p, m_q, logs_q) - - def infer(self, phone, phone_lengths, sid, rate=None): - g = self.emb_g(sid).unsqueeze(-1) - m_p, logs_p, x_mask = self.enc_p(phone, None, phone_lengths) - z_p = (m_p + torch.exp(logs_p) * torch.randn_like(m_p) * 0.66666) * x_mask - if rate: - head = int(z_p.shape[2] * rate) - z_p = z_p[:, :, -head:] - x_mask = x_mask[:, :, -head:] - z = self.flow(z_p, x_mask, g=g, reverse=True) - o = self.dec(z * x_mask, g=g) - return o, x_mask, (z, z_p, m_p, logs_p) - - -class SynthesizerTrnMs768NSFsid_nono(nn.Module): - def __init__( - self, - spec_channels, - segment_size, - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - spk_embed_dim, - gin_channels, - sr=None, - **kwargs - ): - super().__init__() - self.spec_channels = spec_channels - self.inter_channels = inter_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.resblock = resblock - self.resblock_kernel_sizes = resblock_kernel_sizes - self.resblock_dilation_sizes = resblock_dilation_sizes - self.upsample_rates = upsample_rates - self.upsample_initial_channel = upsample_initial_channel - self.upsample_kernel_sizes = upsample_kernel_sizes - self.segment_size = segment_size - self.gin_channels = gin_channels - # self.hop_length = hop_length# - self.spk_embed_dim = spk_embed_dim - self.enc_p = TextEncoder768( - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - f0=False, - ) - self.dec = Generator( - inter_channels, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=gin_channels, - ) - self.enc_q = PosteriorEncoder( - spec_channels, - inter_channels, - hidden_channels, - 5, - 1, - 16, - gin_channels=gin_channels, - ) - self.flow = ResidualCouplingBlock( - inter_channels, hidden_channels, 5, 1, 3, gin_channels=gin_channels - ) - self.emb_g = nn.Embedding(self.spk_embed_dim, gin_channels) - print("gin_channels:", gin_channels, "self.spk_embed_dim:", self.spk_embed_dim) - - def remove_weight_norm(self): - self.dec.remove_weight_norm() - self.flow.remove_weight_norm() - self.enc_q.remove_weight_norm() - - def forward(self, phone, phone_lengths, y, y_lengths, ds): # 这里ds是id,[bs,1] - g = self.emb_g(ds).unsqueeze(-1) # [b, 256, 1]##1是t,广播的 - m_p, logs_p, x_mask = self.enc_p(phone, None, phone_lengths) - z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g) - z_p = self.flow(z, y_mask, g=g) - z_slice, ids_slice = commons.rand_slice_segments( - z, y_lengths, self.segment_size - ) - o = self.dec(z_slice, g=g) - return o, ids_slice, x_mask, y_mask, (z, z_p, m_p, logs_p, m_q, logs_q) - - def infer(self, phone, phone_lengths, sid, rate=None): - g = self.emb_g(sid).unsqueeze(-1) - m_p, logs_p, x_mask = self.enc_p(phone, None, phone_lengths) - z_p = (m_p + torch.exp(logs_p) * torch.randn_like(m_p) * 0.66666) * x_mask - if rate: - head = int(z_p.shape[2] * rate) - z_p = z_p[:, :, -head:] - x_mask = x_mask[:, :, -head:] - z = self.flow(z_p, x_mask, g=g, reverse=True) - o = self.dec(z * x_mask, g=g) - return o, x_mask, (z, z_p, m_p, logs_p) - - -class MultiPeriodDiscriminator(torch.nn.Module): - def __init__(self, use_spectral_norm=False): - super(MultiPeriodDiscriminator, self).__init__() - periods = [2, 3, 5, 7, 11, 17] - # periods = [3, 5, 7, 11, 17, 23, 37] - - discs = [DiscriminatorS(use_spectral_norm=use_spectral_norm)] - discs = discs + [ - DiscriminatorP(i, use_spectral_norm=use_spectral_norm) for i in periods - ] - self.discriminators = nn.ModuleList(discs) - - def forward(self, y, y_hat): - y_d_rs = [] # - y_d_gs = [] - fmap_rs = [] - fmap_gs = [] - for i, d in enumerate(self.discriminators): - y_d_r, fmap_r = d(y) - y_d_g, fmap_g = d(y_hat) - # for j in range(len(fmap_r)): - # print(i,j,y.shape,y_hat.shape,fmap_r[j].shape,fmap_g[j].shape) - y_d_rs.append(y_d_r) - y_d_gs.append(y_d_g) - fmap_rs.append(fmap_r) - fmap_gs.append(fmap_g) - - return y_d_rs, y_d_gs, fmap_rs, fmap_gs - - -class MultiPeriodDiscriminatorV2(torch.nn.Module): - def __init__(self, use_spectral_norm=False): - super(MultiPeriodDiscriminatorV2, self).__init__() - # periods = [2, 3, 5, 7, 11, 17] - periods = [2, 3, 5, 7, 11, 17, 23, 37] - - discs = [DiscriminatorS(use_spectral_norm=use_spectral_norm)] - discs = discs + [ - DiscriminatorP(i, use_spectral_norm=use_spectral_norm) for i in periods - ] - self.discriminators = nn.ModuleList(discs) - - def forward(self, y, y_hat): - y_d_rs = [] # - y_d_gs = [] - fmap_rs = [] - fmap_gs = [] - for i, d in enumerate(self.discriminators): - y_d_r, fmap_r = d(y) - y_d_g, fmap_g = d(y_hat) - # for j in range(len(fmap_r)): - # print(i,j,y.shape,y_hat.shape,fmap_r[j].shape,fmap_g[j].shape) - y_d_rs.append(y_d_r) - y_d_gs.append(y_d_g) - fmap_rs.append(fmap_r) - fmap_gs.append(fmap_g) - - return y_d_rs, y_d_gs, fmap_rs, fmap_gs - - -class DiscriminatorS(torch.nn.Module): - def __init__(self, use_spectral_norm=False): - super(DiscriminatorS, self).__init__() - norm_f = weight_norm if use_spectral_norm == False else spectral_norm - self.convs = nn.ModuleList( - [ - norm_f(Conv1d(1, 16, 15, 1, padding=7)), - norm_f(Conv1d(16, 64, 41, 4, groups=4, padding=20)), - norm_f(Conv1d(64, 256, 41, 4, groups=16, padding=20)), - norm_f(Conv1d(256, 1024, 41, 4, groups=64, padding=20)), - norm_f(Conv1d(1024, 1024, 41, 4, groups=256, padding=20)), - norm_f(Conv1d(1024, 1024, 5, 1, padding=2)), - ] - ) - self.conv_post = norm_f(Conv1d(1024, 1, 3, 1, padding=1)) - - def forward(self, x): - fmap = [] - - for l in self.convs: - x = l(x) - x = F.leaky_relu(x, modules.LRELU_SLOPE) - fmap.append(x) - x = self.conv_post(x) - fmap.append(x) - x = torch.flatten(x, 1, -1) - - return x, fmap - - -class DiscriminatorP(torch.nn.Module): - def __init__(self, period, kernel_size=5, stride=3, use_spectral_norm=False): - super(DiscriminatorP, self).__init__() - self.period = period - self.use_spectral_norm = use_spectral_norm - norm_f = weight_norm if use_spectral_norm == False else spectral_norm - self.convs = nn.ModuleList( - [ - norm_f( - Conv2d( - 1, - 32, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 32, - 128, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 128, - 512, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 512, - 1024, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 1024, - 1024, - (kernel_size, 1), - 1, - padding=(get_padding(kernel_size, 1), 0), - ) - ), - ] - ) - self.conv_post = norm_f(Conv2d(1024, 1, (3, 1), 1, padding=(1, 0))) - - def forward(self, x): - fmap = [] - - # 1d to 2d - b, c, t = x.shape - if t % self.period != 0: # pad first - n_pad = self.period - (t % self.period) - x = F.pad(x, (0, n_pad), "reflect") - t = t + n_pad - x = x.view(b, c, t // self.period, self.period) - - for l in self.convs: - x = l(x) - x = F.leaky_relu(x, modules.LRELU_SLOPE) - fmap.append(x) - x = self.conv_post(x) - fmap.append(x) - x = torch.flatten(x, 1, -1) - - return x, fmap \ No newline at end of file diff --git a/lib/infer_pack/models_dml.py b/lib/infer_pack/models_dml.py deleted file mode 100644 index 958d7b29259763d2fea94caf8ba7e314c4a77d05..0000000000000000000000000000000000000000 --- a/lib/infer_pack/models_dml.py +++ /dev/null @@ -1,1124 +0,0 @@ -import math, pdb, os -from time import time as ttime -import torch -from torch import nn -from torch.nn import functional as F -from lib.infer_pack import modules -from lib.infer_pack import attentions -from lib.infer_pack import commons -from lib.infer_pack.commons import init_weights, get_padding -from torch.nn import Conv1d, ConvTranspose1d, AvgPool1d, Conv2d -from torch.nn.utils import weight_norm, remove_weight_norm, spectral_norm -from lib.infer_pack.commons import init_weights -import numpy as np -from lib.infer_pack import commons - - -class TextEncoder256(nn.Module): - def __init__( - self, - out_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - f0=True, - ): - super().__init__() - self.out_channels = out_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.emb_phone = nn.Linear(256, hidden_channels) - self.lrelu = nn.LeakyReLU(0.1, inplace=True) - if f0 == True: - self.emb_pitch = nn.Embedding(256, hidden_channels) # pitch 256 - self.encoder = attentions.Encoder( - hidden_channels, filter_channels, n_heads, n_layers, kernel_size, p_dropout - ) - self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1) - - def forward(self, phone, pitch, lengths): - if pitch == None: - x = self.emb_phone(phone) - else: - x = self.emb_phone(phone) + self.emb_pitch(pitch) - x = x * math.sqrt(self.hidden_channels) # [b, t, h] - x = self.lrelu(x) - x = torch.transpose(x, 1, -1) # [b, h, t] - x_mask = torch.unsqueeze(commons.sequence_mask(lengths, x.size(2)), 1).to( - x.dtype - ) - x = self.encoder(x * x_mask, x_mask) - stats = self.proj(x) * x_mask - - m, logs = torch.split(stats, self.out_channels, dim=1) - return m, logs, x_mask - - -class TextEncoder768(nn.Module): - def __init__( - self, - out_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - f0=True, - ): - super().__init__() - self.out_channels = out_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.emb_phone = nn.Linear(768, hidden_channels) - self.lrelu = nn.LeakyReLU(0.1, inplace=True) - if f0 == True: - self.emb_pitch = nn.Embedding(256, hidden_channels) # pitch 256 - self.encoder = attentions.Encoder( - hidden_channels, filter_channels, n_heads, n_layers, kernel_size, p_dropout - ) - self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1) - - def forward(self, phone, pitch, lengths): - if pitch == None: - x = self.emb_phone(phone) - else: - x = self.emb_phone(phone) + self.emb_pitch(pitch) - x = x * math.sqrt(self.hidden_channels) # [b, t, h] - x = self.lrelu(x) - x = torch.transpose(x, 1, -1) # [b, h, t] - x_mask = torch.unsqueeze(commons.sequence_mask(lengths, x.size(2)), 1).to( - x.dtype - ) - x = self.encoder(x * x_mask, x_mask) - stats = self.proj(x) * x_mask - - m, logs = torch.split(stats, self.out_channels, dim=1) - return m, logs, x_mask - - -class ResidualCouplingBlock(nn.Module): - def __init__( - self, - channels, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - n_flows=4, - gin_channels=0, - ): - super().__init__() - self.channels = channels - self.hidden_channels = hidden_channels - self.kernel_size = kernel_size - self.dilation_rate = dilation_rate - self.n_layers = n_layers - self.n_flows = n_flows - self.gin_channels = gin_channels - - self.flows = nn.ModuleList() - for i in range(n_flows): - self.flows.append( - modules.ResidualCouplingLayer( - channels, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - gin_channels=gin_channels, - mean_only=True, - ) - ) - self.flows.append(modules.Flip()) - - def forward(self, x, x_mask, g=None, reverse=False): - if not reverse: - for flow in self.flows: - x, _ = flow(x, x_mask, g=g, reverse=reverse) - else: - for flow in reversed(self.flows): - x = flow(x, x_mask, g=g, reverse=reverse) - return x - - def remove_weight_norm(self): - for i in range(self.n_flows): - self.flows[i * 2].remove_weight_norm() - - -class PosteriorEncoder(nn.Module): - def __init__( - self, - in_channels, - out_channels, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - gin_channels=0, - ): - super().__init__() - self.in_channels = in_channels - self.out_channels = out_channels - self.hidden_channels = hidden_channels - self.kernel_size = kernel_size - self.dilation_rate = dilation_rate - self.n_layers = n_layers - self.gin_channels = gin_channels - - self.pre = nn.Conv1d(in_channels, hidden_channels, 1) - self.enc = modules.WN( - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - gin_channels=gin_channels, - ) - self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1) - - def forward(self, x, x_lengths, g=None): - x_mask = torch.unsqueeze(commons.sequence_mask(x_lengths, x.size(2)), 1).to( - x.dtype - ) - x = self.pre(x) * x_mask - x = self.enc(x, x_mask, g=g) - stats = self.proj(x) * x_mask - m, logs = torch.split(stats, self.out_channels, dim=1) - z = (m + torch.randn_like(m) * torch.exp(logs)) * x_mask - return z, m, logs, x_mask - - def remove_weight_norm(self): - self.enc.remove_weight_norm() - - -class Generator(torch.nn.Module): - def __init__( - self, - initial_channel, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=0, - ): - super(Generator, self).__init__() - self.num_kernels = len(resblock_kernel_sizes) - self.num_upsamples = len(upsample_rates) - self.conv_pre = Conv1d( - initial_channel, upsample_initial_channel, 7, 1, padding=3 - ) - resblock = modules.ResBlock1 if resblock == "1" else modules.ResBlock2 - - self.ups = nn.ModuleList() - for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)): - self.ups.append( - weight_norm( - ConvTranspose1d( - upsample_initial_channel // (2**i), - upsample_initial_channel // (2 ** (i + 1)), - k, - u, - padding=(k - u) // 2, - ) - ) - ) - - self.resblocks = nn.ModuleList() - for i in range(len(self.ups)): - ch = upsample_initial_channel // (2 ** (i + 1)) - for j, (k, d) in enumerate( - zip(resblock_kernel_sizes, resblock_dilation_sizes) - ): - self.resblocks.append(resblock(ch, k, d)) - - self.conv_post = Conv1d(ch, 1, 7, 1, padding=3, bias=False) - self.ups.apply(init_weights) - - if gin_channels != 0: - self.cond = nn.Conv1d(gin_channels, upsample_initial_channel, 1) - - def forward(self, x, g=None): - x = self.conv_pre(x) - if g is not None: - x = x + self.cond(g) - - for i in range(self.num_upsamples): - x = F.leaky_relu(x, modules.LRELU_SLOPE) - x = self.ups[i](x) - xs = None - for j in range(self.num_kernels): - if xs is None: - xs = self.resblocks[i * self.num_kernels + j](x) - else: - xs += self.resblocks[i * self.num_kernels + j](x) - x = xs / self.num_kernels - x = F.leaky_relu(x) - x = self.conv_post(x) - x = torch.tanh(x) - - return x - - def remove_weight_norm(self): - for l in self.ups: - remove_weight_norm(l) - for l in self.resblocks: - l.remove_weight_norm() - - -class SineGen(torch.nn.Module): - """Definition of sine generator - SineGen(samp_rate, harmonic_num = 0, - sine_amp = 0.1, noise_std = 0.003, - voiced_threshold = 0, - flag_for_pulse=False) - samp_rate: sampling rate in Hz - harmonic_num: number of harmonic overtones (default 0) - sine_amp: amplitude of sine-wavefrom (default 0.1) - noise_std: std of Gaussian noise (default 0.003) - voiced_thoreshold: F0 threshold for U/V classification (default 0) - flag_for_pulse: this SinGen is used inside PulseGen (default False) - Note: when flag_for_pulse is True, the first time step of a voiced - segment is always sin(np.pi) or cos(0) - """ - - def __init__( - self, - samp_rate, - harmonic_num=0, - sine_amp=0.1, - noise_std=0.003, - voiced_threshold=0, - flag_for_pulse=False, - ): - super(SineGen, self).__init__() - self.sine_amp = sine_amp - self.noise_std = noise_std - self.harmonic_num = harmonic_num - self.dim = self.harmonic_num + 1 - self.sampling_rate = samp_rate - self.voiced_threshold = voiced_threshold - - def _f02uv(self, f0): - # generate uv signal - uv = torch.ones_like(f0) - uv = uv * (f0 > self.voiced_threshold) - return uv.float() - - def forward(self, f0, upp): - """sine_tensor, uv = forward(f0) - input F0: tensor(batchsize=1, length, dim=1) - f0 for unvoiced steps should be 0 - output sine_tensor: tensor(batchsize=1, length, dim) - output uv: tensor(batchsize=1, length, 1) - """ - with torch.no_grad(): - f0 = f0[:, None].transpose(1, 2) - f0_buf = torch.zeros(f0.shape[0], f0.shape[1], self.dim, device=f0.device) - # fundamental component - f0_buf[:, :, 0] = f0[:, :, 0] - for idx in np.arange(self.harmonic_num): - f0_buf[:, :, idx + 1] = f0_buf[:, :, 0] * ( - idx + 2 - ) # idx + 2: the (idx+1)-th overtone, (idx+2)-th harmonic - rad_values = (f0_buf / self.sampling_rate) % 1 ###%1意味着n_har的乘积无法后处理优化 - rand_ini = torch.rand( - f0_buf.shape[0], f0_buf.shape[2], device=f0_buf.device - ) - rand_ini[:, 0] = 0 - rad_values[:, 0, :] = rad_values[:, 0, :] + rand_ini - tmp_over_one = torch.cumsum(rad_values, 1) # % 1 #####%1意味着后面的cumsum无法再优化 - tmp_over_one *= upp - tmp_over_one = F.interpolate( - tmp_over_one.transpose(2, 1), - scale_factor=upp, - mode="linear", - align_corners=True, - ).transpose(2, 1) - rad_values = F.interpolate( - rad_values.transpose(2, 1), scale_factor=upp, mode="nearest" - ).transpose( - 2, 1 - ) ####### - tmp_over_one %= 1 - tmp_over_one_idx = (tmp_over_one[:, 1:, :] - tmp_over_one[:, :-1, :]) < 0 - cumsum_shift = torch.zeros_like(rad_values) - cumsum_shift[:, 1:, :] = tmp_over_one_idx * -1.0 - sine_waves = torch.sin( - torch.cumsum(rad_values + cumsum_shift, dim=1) * 2 * np.pi - ) - sine_waves = sine_waves * self.sine_amp - uv = self._f02uv(f0) - uv = F.interpolate( - uv.transpose(2, 1), scale_factor=upp, mode="nearest" - ).transpose(2, 1) - noise_amp = uv * self.noise_std + (1 - uv) * self.sine_amp / 3 - noise = noise_amp * torch.randn_like(sine_waves) - sine_waves = sine_waves * uv + noise - return sine_waves, uv, noise - - -class SourceModuleHnNSF(torch.nn.Module): - """SourceModule for hn-nsf - SourceModule(sampling_rate, harmonic_num=0, sine_amp=0.1, - add_noise_std=0.003, voiced_threshod=0) - sampling_rate: sampling_rate in Hz - harmonic_num: number of harmonic above F0 (default: 0) - sine_amp: amplitude of sine source signal (default: 0.1) - add_noise_std: std of additive Gaussian noise (default: 0.003) - note that amplitude of noise in unvoiced is decided - by sine_amp - voiced_threshold: threhold to set U/V given F0 (default: 0) - Sine_source, noise_source = SourceModuleHnNSF(F0_sampled) - F0_sampled (batchsize, length, 1) - Sine_source (batchsize, length, 1) - noise_source (batchsize, length 1) - uv (batchsize, length, 1) - """ - - def __init__( - self, - sampling_rate, - harmonic_num=0, - sine_amp=0.1, - add_noise_std=0.003, - voiced_threshod=0, - is_half=True, - ): - super(SourceModuleHnNSF, self).__init__() - - self.sine_amp = sine_amp - self.noise_std = add_noise_std - self.is_half = is_half - # to produce sine waveforms - self.l_sin_gen = SineGen( - sampling_rate, harmonic_num, sine_amp, add_noise_std, voiced_threshod - ) - - # to merge source harmonics into a single excitation - self.l_linear = torch.nn.Linear(harmonic_num + 1, 1) - self.l_tanh = torch.nn.Tanh() - - def forward(self, x, upp=None): - sine_wavs, uv, _ = self.l_sin_gen(x, upp) - if self.is_half: - sine_wavs = sine_wavs.half() - sine_merge = self.l_tanh(self.l_linear(sine_wavs)) - return sine_merge, None, None # noise, uv - - -class GeneratorNSF(torch.nn.Module): - def __init__( - self, - initial_channel, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels, - sr, - is_half=False, - ): - super(GeneratorNSF, self).__init__() - self.num_kernels = len(resblock_kernel_sizes) - self.num_upsamples = len(upsample_rates) - - self.f0_upsamp = torch.nn.Upsample(scale_factor=np.prod(upsample_rates)) - self.m_source = SourceModuleHnNSF( - sampling_rate=sr, harmonic_num=0, is_half=is_half - ) - self.noise_convs = nn.ModuleList() - self.conv_pre = Conv1d( - initial_channel, upsample_initial_channel, 7, 1, padding=3 - ) - resblock = modules.ResBlock1 if resblock == "1" else modules.ResBlock2 - - self.ups = nn.ModuleList() - for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)): - c_cur = upsample_initial_channel // (2 ** (i + 1)) - self.ups.append( - weight_norm( - ConvTranspose1d( - upsample_initial_channel // (2**i), - upsample_initial_channel // (2 ** (i + 1)), - k, - u, - padding=(k - u) // 2, - ) - ) - ) - if i + 1 < len(upsample_rates): - stride_f0 = np.prod(upsample_rates[i + 1 :]) - self.noise_convs.append( - Conv1d( - 1, - c_cur, - kernel_size=stride_f0 * 2, - stride=stride_f0, - padding=stride_f0 // 2, - ) - ) - else: - self.noise_convs.append(Conv1d(1, c_cur, kernel_size=1)) - - self.resblocks = nn.ModuleList() - for i in range(len(self.ups)): - ch = upsample_initial_channel // (2 ** (i + 1)) - for j, (k, d) in enumerate( - zip(resblock_kernel_sizes, resblock_dilation_sizes) - ): - self.resblocks.append(resblock(ch, k, d)) - - self.conv_post = Conv1d(ch, 1, 7, 1, padding=3, bias=False) - self.ups.apply(init_weights) - - if gin_channels != 0: - self.cond = nn.Conv1d(gin_channels, upsample_initial_channel, 1) - - self.upp = np.prod(upsample_rates) - - def forward(self, x, f0, g=None): - har_source, noi_source, uv = self.m_source(f0, self.upp) - har_source = har_source.transpose(1, 2) - x = self.conv_pre(x) - if g is not None: - x = x + self.cond(g) - - for i in range(self.num_upsamples): - x = F.leaky_relu(x, modules.LRELU_SLOPE) - x = self.ups[i](x) - x_source = self.noise_convs[i](har_source) - x = x + x_source - xs = None - for j in range(self.num_kernels): - if xs is None: - xs = self.resblocks[i * self.num_kernels + j](x) - else: - xs += self.resblocks[i * self.num_kernels + j](x) - x = xs / self.num_kernels - x = F.leaky_relu(x) - x = self.conv_post(x) - x = torch.tanh(x) - return x - - def remove_weight_norm(self): - for l in self.ups: - remove_weight_norm(l) - for l in self.resblocks: - l.remove_weight_norm() - - -sr2sr = { - "32k": 32000, - "40k": 40000, - "48k": 48000, -} - - -class SynthesizerTrnMs256NSFsid(nn.Module): - def __init__( - self, - spec_channels, - segment_size, - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - spk_embed_dim, - gin_channels, - sr, - **kwargs - ): - super().__init__() - if type(sr) == type("strr"): - sr = sr2sr[sr] - self.spec_channels = spec_channels - self.inter_channels = inter_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.resblock = resblock - self.resblock_kernel_sizes = resblock_kernel_sizes - self.resblock_dilation_sizes = resblock_dilation_sizes - self.upsample_rates = upsample_rates - self.upsample_initial_channel = upsample_initial_channel - self.upsample_kernel_sizes = upsample_kernel_sizes - self.segment_size = segment_size - self.gin_channels = gin_channels - # self.hop_length = hop_length# - self.spk_embed_dim = spk_embed_dim - self.enc_p = TextEncoder256( - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - ) - self.dec = GeneratorNSF( - inter_channels, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=gin_channels, - sr=sr, - is_half=kwargs["is_half"], - ) - self.enc_q = PosteriorEncoder( - spec_channels, - inter_channels, - hidden_channels, - 5, - 1, - 16, - gin_channels=gin_channels, - ) - self.flow = ResidualCouplingBlock( - inter_channels, hidden_channels, 5, 1, 3, gin_channels=gin_channels - ) - self.emb_g = nn.Embedding(self.spk_embed_dim, gin_channels) - print("gin_channels:", gin_channels, "self.spk_embed_dim:", self.spk_embed_dim) - - def remove_weight_norm(self): - self.dec.remove_weight_norm() - self.flow.remove_weight_norm() - self.enc_q.remove_weight_norm() - - def forward( - self, phone, phone_lengths, pitch, pitchf, y, y_lengths, ds - ): # 这里ds是id,[bs,1] - # print(1,pitch.shape)#[bs,t] - g = self.emb_g(ds).unsqueeze(-1) # [b, 256, 1]##1是t,广播的 - m_p, logs_p, x_mask = self.enc_p(phone, pitch, phone_lengths) - z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g) - z_p = self.flow(z, y_mask, g=g) - z_slice, ids_slice = commons.rand_slice_segments( - z, y_lengths, self.segment_size - ) - # print(-1,pitchf.shape,ids_slice,self.segment_size,self.hop_length,self.segment_size//self.hop_length) - pitchf = commons.slice_segments2(pitchf, ids_slice, self.segment_size) - # print(-2,pitchf.shape,z_slice.shape) - o = self.dec(z_slice, pitchf, g=g) - return o, ids_slice, x_mask, y_mask, (z, z_p, m_p, logs_p, m_q, logs_q) - - def infer(self, phone, phone_lengths, pitch, nsff0, sid, max_len=None): - g = self.emb_g(sid).unsqueeze(-1) - m_p, logs_p, x_mask = self.enc_p(phone, pitch, phone_lengths) - z_p = (m_p + torch.exp(logs_p) * torch.randn_like(m_p) * 0.66666) * x_mask - z = self.flow(z_p, x_mask, g=g, reverse=True) - o = self.dec((z * x_mask)[:, :, :max_len], nsff0, g=g) - return o, x_mask, (z, z_p, m_p, logs_p) - - -class SynthesizerTrnMs768NSFsid(nn.Module): - def __init__( - self, - spec_channels, - segment_size, - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - spk_embed_dim, - gin_channels, - sr, - **kwargs - ): - super().__init__() - if type(sr) == type("strr"): - sr = sr2sr[sr] - self.spec_channels = spec_channels - self.inter_channels = inter_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.resblock = resblock - self.resblock_kernel_sizes = resblock_kernel_sizes - self.resblock_dilation_sizes = resblock_dilation_sizes - self.upsample_rates = upsample_rates - self.upsample_initial_channel = upsample_initial_channel - self.upsample_kernel_sizes = upsample_kernel_sizes - self.segment_size = segment_size - self.gin_channels = gin_channels - # self.hop_length = hop_length# - self.spk_embed_dim = spk_embed_dim - self.enc_p = TextEncoder768( - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - ) - self.dec = GeneratorNSF( - inter_channels, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=gin_channels, - sr=sr, - is_half=kwargs["is_half"], - ) - self.enc_q = PosteriorEncoder( - spec_channels, - inter_channels, - hidden_channels, - 5, - 1, - 16, - gin_channels=gin_channels, - ) - self.flow = ResidualCouplingBlock( - inter_channels, hidden_channels, 5, 1, 3, gin_channels=gin_channels - ) - self.emb_g = nn.Embedding(self.spk_embed_dim, gin_channels) - print("gin_channels:", gin_channels, "self.spk_embed_dim:", self.spk_embed_dim) - - def remove_weight_norm(self): - self.dec.remove_weight_norm() - self.flow.remove_weight_norm() - self.enc_q.remove_weight_norm() - - def forward( - self, phone, phone_lengths, pitch, pitchf, y, y_lengths, ds - ): # 这里ds是id,[bs,1] - # print(1,pitch.shape)#[bs,t] - g = self.emb_g(ds).unsqueeze(-1) # [b, 256, 1]##1是t,广播的 - m_p, logs_p, x_mask = self.enc_p(phone, pitch, phone_lengths) - z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g) - z_p = self.flow(z, y_mask, g=g) - z_slice, ids_slice = commons.rand_slice_segments( - z, y_lengths, self.segment_size - ) - # print(-1,pitchf.shape,ids_slice,self.segment_size,self.hop_length,self.segment_size//self.hop_length) - pitchf = commons.slice_segments2(pitchf, ids_slice, self.segment_size) - # print(-2,pitchf.shape,z_slice.shape) - o = self.dec(z_slice, pitchf, g=g) - return o, ids_slice, x_mask, y_mask, (z, z_p, m_p, logs_p, m_q, logs_q) - - def infer(self, phone, phone_lengths, pitch, nsff0, sid, max_len=None): - g = self.emb_g(sid).unsqueeze(-1) - m_p, logs_p, x_mask = self.enc_p(phone, pitch, phone_lengths) - z_p = (m_p + torch.exp(logs_p) * torch.randn_like(m_p) * 0.66666) * x_mask - z = self.flow(z_p, x_mask, g=g, reverse=True) - o = self.dec((z * x_mask)[:, :, :max_len], nsff0, g=g) - return o, x_mask, (z, z_p, m_p, logs_p) - - -class SynthesizerTrnMs256NSFsid_nono(nn.Module): - def __init__( - self, - spec_channels, - segment_size, - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - spk_embed_dim, - gin_channels, - sr=None, - **kwargs - ): - super().__init__() - self.spec_channels = spec_channels - self.inter_channels = inter_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.resblock = resblock - self.resblock_kernel_sizes = resblock_kernel_sizes - self.resblock_dilation_sizes = resblock_dilation_sizes - self.upsample_rates = upsample_rates - self.upsample_initial_channel = upsample_initial_channel - self.upsample_kernel_sizes = upsample_kernel_sizes - self.segment_size = segment_size - self.gin_channels = gin_channels - # self.hop_length = hop_length# - self.spk_embed_dim = spk_embed_dim - self.enc_p = TextEncoder256( - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - f0=False, - ) - self.dec = Generator( - inter_channels, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=gin_channels, - ) - self.enc_q = PosteriorEncoder( - spec_channels, - inter_channels, - hidden_channels, - 5, - 1, - 16, - gin_channels=gin_channels, - ) - self.flow = ResidualCouplingBlock( - inter_channels, hidden_channels, 5, 1, 3, gin_channels=gin_channels - ) - self.emb_g = nn.Embedding(self.spk_embed_dim, gin_channels) - print("gin_channels:", gin_channels, "self.spk_embed_dim:", self.spk_embed_dim) - - def remove_weight_norm(self): - self.dec.remove_weight_norm() - self.flow.remove_weight_norm() - self.enc_q.remove_weight_norm() - - def forward(self, phone, phone_lengths, y, y_lengths, ds): # 这里ds是id,[bs,1] - g = self.emb_g(ds).unsqueeze(-1) # [b, 256, 1]##1是t,广播的 - m_p, logs_p, x_mask = self.enc_p(phone, None, phone_lengths) - z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g) - z_p = self.flow(z, y_mask, g=g) - z_slice, ids_slice = commons.rand_slice_segments( - z, y_lengths, self.segment_size - ) - o = self.dec(z_slice, g=g) - return o, ids_slice, x_mask, y_mask, (z, z_p, m_p, logs_p, m_q, logs_q) - - def infer(self, phone, phone_lengths, sid, max_len=None): - g = self.emb_g(sid).unsqueeze(-1) - m_p, logs_p, x_mask = self.enc_p(phone, None, phone_lengths) - z_p = (m_p + torch.exp(logs_p) * torch.randn_like(m_p) * 0.66666) * x_mask - z = self.flow(z_p, x_mask, g=g, reverse=True) - o = self.dec((z * x_mask)[:, :, :max_len], g=g) - return o, x_mask, (z, z_p, m_p, logs_p) - - -class SynthesizerTrnMs768NSFsid_nono(nn.Module): - def __init__( - self, - spec_channels, - segment_size, - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - spk_embed_dim, - gin_channels, - sr=None, - **kwargs - ): - super().__init__() - self.spec_channels = spec_channels - self.inter_channels = inter_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.resblock = resblock - self.resblock_kernel_sizes = resblock_kernel_sizes - self.resblock_dilation_sizes = resblock_dilation_sizes - self.upsample_rates = upsample_rates - self.upsample_initial_channel = upsample_initial_channel - self.upsample_kernel_sizes = upsample_kernel_sizes - self.segment_size = segment_size - self.gin_channels = gin_channels - # self.hop_length = hop_length# - self.spk_embed_dim = spk_embed_dim - self.enc_p = TextEncoder768( - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - f0=False, - ) - self.dec = Generator( - inter_channels, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=gin_channels, - ) - self.enc_q = PosteriorEncoder( - spec_channels, - inter_channels, - hidden_channels, - 5, - 1, - 16, - gin_channels=gin_channels, - ) - self.flow = ResidualCouplingBlock( - inter_channels, hidden_channels, 5, 1, 3, gin_channels=gin_channels - ) - self.emb_g = nn.Embedding(self.spk_embed_dim, gin_channels) - print("gin_channels:", gin_channels, "self.spk_embed_dim:", self.spk_embed_dim) - - def remove_weight_norm(self): - self.dec.remove_weight_norm() - self.flow.remove_weight_norm() - self.enc_q.remove_weight_norm() - - def forward(self, phone, phone_lengths, y, y_lengths, ds): # 这里ds是id,[bs,1] - g = self.emb_g(ds).unsqueeze(-1) # [b, 256, 1]##1是t,广播的 - m_p, logs_p, x_mask = self.enc_p(phone, None, phone_lengths) - z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g) - z_p = self.flow(z, y_mask, g=g) - z_slice, ids_slice = commons.rand_slice_segments( - z, y_lengths, self.segment_size - ) - o = self.dec(z_slice, g=g) - return o, ids_slice, x_mask, y_mask, (z, z_p, m_p, logs_p, m_q, logs_q) - - def infer(self, phone, phone_lengths, sid, max_len=None): - g = self.emb_g(sid).unsqueeze(-1) - m_p, logs_p, x_mask = self.enc_p(phone, None, phone_lengths) - z_p = (m_p + torch.exp(logs_p) * torch.randn_like(m_p) * 0.66666) * x_mask - z = self.flow(z_p, x_mask, g=g, reverse=True) - o = self.dec((z * x_mask)[:, :, :max_len], g=g) - return o, x_mask, (z, z_p, m_p, logs_p) - - -class MultiPeriodDiscriminator(torch.nn.Module): - def __init__(self, use_spectral_norm=False): - super(MultiPeriodDiscriminator, self).__init__() - periods = [2, 3, 5, 7, 11, 17] - # periods = [3, 5, 7, 11, 17, 23, 37] - - discs = [DiscriminatorS(use_spectral_norm=use_spectral_norm)] - discs = discs + [ - DiscriminatorP(i, use_spectral_norm=use_spectral_norm) for i in periods - ] - self.discriminators = nn.ModuleList(discs) - - def forward(self, y, y_hat): - y_d_rs = [] # - y_d_gs = [] - fmap_rs = [] - fmap_gs = [] - for i, d in enumerate(self.discriminators): - y_d_r, fmap_r = d(y) - y_d_g, fmap_g = d(y_hat) - # for j in range(len(fmap_r)): - # print(i,j,y.shape,y_hat.shape,fmap_r[j].shape,fmap_g[j].shape) - y_d_rs.append(y_d_r) - y_d_gs.append(y_d_g) - fmap_rs.append(fmap_r) - fmap_gs.append(fmap_g) - - return y_d_rs, y_d_gs, fmap_rs, fmap_gs - - -class MultiPeriodDiscriminatorV2(torch.nn.Module): - def __init__(self, use_spectral_norm=False): - super(MultiPeriodDiscriminatorV2, self).__init__() - # periods = [2, 3, 5, 7, 11, 17] - periods = [2, 3, 5, 7, 11, 17, 23, 37] - - discs = [DiscriminatorS(use_spectral_norm=use_spectral_norm)] - discs = discs + [ - DiscriminatorP(i, use_spectral_norm=use_spectral_norm) for i in periods - ] - self.discriminators = nn.ModuleList(discs) - - def forward(self, y, y_hat): - y_d_rs = [] # - y_d_gs = [] - fmap_rs = [] - fmap_gs = [] - for i, d in enumerate(self.discriminators): - y_d_r, fmap_r = d(y) - y_d_g, fmap_g = d(y_hat) - # for j in range(len(fmap_r)): - # print(i,j,y.shape,y_hat.shape,fmap_r[j].shape,fmap_g[j].shape) - y_d_rs.append(y_d_r) - y_d_gs.append(y_d_g) - fmap_rs.append(fmap_r) - fmap_gs.append(fmap_g) - - return y_d_rs, y_d_gs, fmap_rs, fmap_gs - - -class DiscriminatorS(torch.nn.Module): - def __init__(self, use_spectral_norm=False): - super(DiscriminatorS, self).__init__() - norm_f = weight_norm if use_spectral_norm == False else spectral_norm - self.convs = nn.ModuleList( - [ - norm_f(Conv1d(1, 16, 15, 1, padding=7)), - norm_f(Conv1d(16, 64, 41, 4, groups=4, padding=20)), - norm_f(Conv1d(64, 256, 41, 4, groups=16, padding=20)), - norm_f(Conv1d(256, 1024, 41, 4, groups=64, padding=20)), - norm_f(Conv1d(1024, 1024, 41, 4, groups=256, padding=20)), - norm_f(Conv1d(1024, 1024, 5, 1, padding=2)), - ] - ) - self.conv_post = norm_f(Conv1d(1024, 1, 3, 1, padding=1)) - - def forward(self, x): - fmap = [] - - for l in self.convs: - x = l(x) - x = F.leaky_relu(x, modules.LRELU_SLOPE) - fmap.append(x) - x = self.conv_post(x) - fmap.append(x) - x = torch.flatten(x, 1, -1) - - return x, fmap - - -class DiscriminatorP(torch.nn.Module): - def __init__(self, period, kernel_size=5, stride=3, use_spectral_norm=False): - super(DiscriminatorP, self).__init__() - self.period = period - self.use_spectral_norm = use_spectral_norm - norm_f = weight_norm if use_spectral_norm == False else spectral_norm - self.convs = nn.ModuleList( - [ - norm_f( - Conv2d( - 1, - 32, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 32, - 128, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 128, - 512, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 512, - 1024, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 1024, - 1024, - (kernel_size, 1), - 1, - padding=(get_padding(kernel_size, 1), 0), - ) - ), - ] - ) - self.conv_post = norm_f(Conv2d(1024, 1, (3, 1), 1, padding=(1, 0))) - - def forward(self, x): - fmap = [] - - # 1d to 2d - b, c, t = x.shape - if t % self.period != 0: # pad first - n_pad = self.period - (t % self.period) - x = F.pad(x, (0, n_pad), "reflect") - t = t + n_pad - x = x.view(b, c, t // self.period, self.period) - - for l in self.convs: - x = l(x) - x = F.leaky_relu(x, modules.LRELU_SLOPE) - fmap.append(x) - x = self.conv_post(x) - fmap.append(x) - x = torch.flatten(x, 1, -1) - - return x, fmap diff --git a/lib/infer_pack/models_onnx.py b/lib/infer_pack/models_onnx.py deleted file mode 100644 index 963e67b29f828e9fdd096397952054fe77cf3d10..0000000000000000000000000000000000000000 --- a/lib/infer_pack/models_onnx.py +++ /dev/null @@ -1,819 +0,0 @@ -import math, pdb, os -from time import time as ttime -import torch -from torch import nn -from torch.nn import functional as F -from lib.infer_pack import modules -from lib.infer_pack import attentions -from lib.infer_pack import commons -from lib.infer_pack.commons import init_weights, get_padding -from torch.nn import Conv1d, ConvTranspose1d, AvgPool1d, Conv2d -from torch.nn.utils import weight_norm, remove_weight_norm, spectral_norm -from lib.infer_pack.commons import init_weights -import numpy as np -from lib.infer_pack import commons - - -class TextEncoder256(nn.Module): - def __init__( - self, - out_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - f0=True, - ): - super().__init__() - self.out_channels = out_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.emb_phone = nn.Linear(256, hidden_channels) - self.lrelu = nn.LeakyReLU(0.1, inplace=True) - if f0 == True: - self.emb_pitch = nn.Embedding(256, hidden_channels) # pitch 256 - self.encoder = attentions.Encoder( - hidden_channels, filter_channels, n_heads, n_layers, kernel_size, p_dropout - ) - self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1) - - def forward(self, phone, pitch, lengths): - if pitch == None: - x = self.emb_phone(phone) - else: - x = self.emb_phone(phone) + self.emb_pitch(pitch) - x = x * math.sqrt(self.hidden_channels) # [b, t, h] - x = self.lrelu(x) - x = torch.transpose(x, 1, -1) # [b, h, t] - x_mask = torch.unsqueeze(commons.sequence_mask(lengths, x.size(2)), 1).to( - x.dtype - ) - x = self.encoder(x * x_mask, x_mask) - stats = self.proj(x) * x_mask - - m, logs = torch.split(stats, self.out_channels, dim=1) - return m, logs, x_mask - - -class TextEncoder768(nn.Module): - def __init__( - self, - out_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - f0=True, - ): - super().__init__() - self.out_channels = out_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.emb_phone = nn.Linear(768, hidden_channels) - self.lrelu = nn.LeakyReLU(0.1, inplace=True) - if f0 == True: - self.emb_pitch = nn.Embedding(256, hidden_channels) # pitch 256 - self.encoder = attentions.Encoder( - hidden_channels, filter_channels, n_heads, n_layers, kernel_size, p_dropout - ) - self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1) - - def forward(self, phone, pitch, lengths): - if pitch == None: - x = self.emb_phone(phone) - else: - x = self.emb_phone(phone) + self.emb_pitch(pitch) - x = x * math.sqrt(self.hidden_channels) # [b, t, h] - x = self.lrelu(x) - x = torch.transpose(x, 1, -1) # [b, h, t] - x_mask = torch.unsqueeze(commons.sequence_mask(lengths, x.size(2)), 1).to( - x.dtype - ) - x = self.encoder(x * x_mask, x_mask) - stats = self.proj(x) * x_mask - - m, logs = torch.split(stats, self.out_channels, dim=1) - return m, logs, x_mask - - -class ResidualCouplingBlock(nn.Module): - def __init__( - self, - channels, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - n_flows=4, - gin_channels=0, - ): - super().__init__() - self.channels = channels - self.hidden_channels = hidden_channels - self.kernel_size = kernel_size - self.dilation_rate = dilation_rate - self.n_layers = n_layers - self.n_flows = n_flows - self.gin_channels = gin_channels - - self.flows = nn.ModuleList() - for i in range(n_flows): - self.flows.append( - modules.ResidualCouplingLayer( - channels, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - gin_channels=gin_channels, - mean_only=True, - ) - ) - self.flows.append(modules.Flip()) - - def forward(self, x, x_mask, g=None, reverse=False): - if not reverse: - for flow in self.flows: - x, _ = flow(x, x_mask, g=g, reverse=reverse) - else: - for flow in reversed(self.flows): - x = flow(x, x_mask, g=g, reverse=reverse) - return x - - def remove_weight_norm(self): - for i in range(self.n_flows): - self.flows[i * 2].remove_weight_norm() - - -class PosteriorEncoder(nn.Module): - def __init__( - self, - in_channels, - out_channels, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - gin_channels=0, - ): - super().__init__() - self.in_channels = in_channels - self.out_channels = out_channels - self.hidden_channels = hidden_channels - self.kernel_size = kernel_size - self.dilation_rate = dilation_rate - self.n_layers = n_layers - self.gin_channels = gin_channels - - self.pre = nn.Conv1d(in_channels, hidden_channels, 1) - self.enc = modules.WN( - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - gin_channels=gin_channels, - ) - self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1) - - def forward(self, x, x_lengths, g=None): - x_mask = torch.unsqueeze(commons.sequence_mask(x_lengths, x.size(2)), 1).to( - x.dtype - ) - x = self.pre(x) * x_mask - x = self.enc(x, x_mask, g=g) - stats = self.proj(x) * x_mask - m, logs = torch.split(stats, self.out_channels, dim=1) - z = (m + torch.randn_like(m) * torch.exp(logs)) * x_mask - return z, m, logs, x_mask - - def remove_weight_norm(self): - self.enc.remove_weight_norm() - - -class Generator(torch.nn.Module): - def __init__( - self, - initial_channel, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=0, - ): - super(Generator, self).__init__() - self.num_kernels = len(resblock_kernel_sizes) - self.num_upsamples = len(upsample_rates) - self.conv_pre = Conv1d( - initial_channel, upsample_initial_channel, 7, 1, padding=3 - ) - resblock = modules.ResBlock1 if resblock == "1" else modules.ResBlock2 - - self.ups = nn.ModuleList() - for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)): - self.ups.append( - weight_norm( - ConvTranspose1d( - upsample_initial_channel // (2**i), - upsample_initial_channel // (2 ** (i + 1)), - k, - u, - padding=(k - u) // 2, - ) - ) - ) - - self.resblocks = nn.ModuleList() - for i in range(len(self.ups)): - ch = upsample_initial_channel // (2 ** (i + 1)) - for j, (k, d) in enumerate( - zip(resblock_kernel_sizes, resblock_dilation_sizes) - ): - self.resblocks.append(resblock(ch, k, d)) - - self.conv_post = Conv1d(ch, 1, 7, 1, padding=3, bias=False) - self.ups.apply(init_weights) - - if gin_channels != 0: - self.cond = nn.Conv1d(gin_channels, upsample_initial_channel, 1) - - def forward(self, x, g=None): - x = self.conv_pre(x) - if g is not None: - x = x + self.cond(g) - - for i in range(self.num_upsamples): - x = F.leaky_relu(x, modules.LRELU_SLOPE) - x = self.ups[i](x) - xs = None - for j in range(self.num_kernels): - if xs is None: - xs = self.resblocks[i * self.num_kernels + j](x) - else: - xs += self.resblocks[i * self.num_kernels + j](x) - x = xs / self.num_kernels - x = F.leaky_relu(x) - x = self.conv_post(x) - x = torch.tanh(x) - - return x - - def remove_weight_norm(self): - for l in self.ups: - remove_weight_norm(l) - for l in self.resblocks: - l.remove_weight_norm() - - -class SineGen(torch.nn.Module): - """Definition of sine generator - SineGen(samp_rate, harmonic_num = 0, - sine_amp = 0.1, noise_std = 0.003, - voiced_threshold = 0, - flag_for_pulse=False) - samp_rate: sampling rate in Hz - harmonic_num: number of harmonic overtones (default 0) - sine_amp: amplitude of sine-wavefrom (default 0.1) - noise_std: std of Gaussian noise (default 0.003) - voiced_thoreshold: F0 threshold for U/V classification (default 0) - flag_for_pulse: this SinGen is used inside PulseGen (default False) - Note: when flag_for_pulse is True, the first time step of a voiced - segment is always sin(np.pi) or cos(0) - """ - - def __init__( - self, - samp_rate, - harmonic_num=0, - sine_amp=0.1, - noise_std=0.003, - voiced_threshold=0, - flag_for_pulse=False, - ): - super(SineGen, self).__init__() - self.sine_amp = sine_amp - self.noise_std = noise_std - self.harmonic_num = harmonic_num - self.dim = self.harmonic_num + 1 - self.sampling_rate = samp_rate - self.voiced_threshold = voiced_threshold - - def _f02uv(self, f0): - # generate uv signal - uv = torch.ones_like(f0) - uv = uv * (f0 > self.voiced_threshold) - return uv - - def forward(self, f0, upp): - """sine_tensor, uv = forward(f0) - input F0: tensor(batchsize=1, length, dim=1) - f0 for unvoiced steps should be 0 - output sine_tensor: tensor(batchsize=1, length, dim) - output uv: tensor(batchsize=1, length, 1) - """ - with torch.no_grad(): - f0 = f0[:, None].transpose(1, 2) - f0_buf = torch.zeros(f0.shape[0], f0.shape[1], self.dim, device=f0.device) - # fundamental component - f0_buf[:, :, 0] = f0[:, :, 0] - for idx in np.arange(self.harmonic_num): - f0_buf[:, :, idx + 1] = f0_buf[:, :, 0] * ( - idx + 2 - ) # idx + 2: the (idx+1)-th overtone, (idx+2)-th harmonic - rad_values = (f0_buf / self.sampling_rate) % 1 ###%1意味着n_har的乘积无法后处理优化 - rand_ini = torch.rand( - f0_buf.shape[0], f0_buf.shape[2], device=f0_buf.device - ) - rand_ini[:, 0] = 0 - rad_values[:, 0, :] = rad_values[:, 0, :] + rand_ini - tmp_over_one = torch.cumsum(rad_values, 1) # % 1 #####%1意味着后面的cumsum无法再优化 - tmp_over_one *= upp - tmp_over_one = F.interpolate( - tmp_over_one.transpose(2, 1), - scale_factor=upp, - mode="linear", - align_corners=True, - ).transpose(2, 1) - rad_values = F.interpolate( - rad_values.transpose(2, 1), scale_factor=upp, mode="nearest" - ).transpose( - 2, 1 - ) ####### - tmp_over_one %= 1 - tmp_over_one_idx = (tmp_over_one[:, 1:, :] - tmp_over_one[:, :-1, :]) < 0 - cumsum_shift = torch.zeros_like(rad_values) - cumsum_shift[:, 1:, :] = tmp_over_one_idx * -1.0 - sine_waves = torch.sin( - torch.cumsum(rad_values + cumsum_shift, dim=1) * 2 * np.pi - ) - sine_waves = sine_waves * self.sine_amp - uv = self._f02uv(f0) - uv = F.interpolate( - uv.transpose(2, 1), scale_factor=upp, mode="nearest" - ).transpose(2, 1) - noise_amp = uv * self.noise_std + (1 - uv) * self.sine_amp / 3 - noise = noise_amp * torch.randn_like(sine_waves) - sine_waves = sine_waves * uv + noise - return sine_waves, uv, noise - - -class SourceModuleHnNSF(torch.nn.Module): - """SourceModule for hn-nsf - SourceModule(sampling_rate, harmonic_num=0, sine_amp=0.1, - add_noise_std=0.003, voiced_threshod=0) - sampling_rate: sampling_rate in Hz - harmonic_num: number of harmonic above F0 (default: 0) - sine_amp: amplitude of sine source signal (default: 0.1) - add_noise_std: std of additive Gaussian noise (default: 0.003) - note that amplitude of noise in unvoiced is decided - by sine_amp - voiced_threshold: threhold to set U/V given F0 (default: 0) - Sine_source, noise_source = SourceModuleHnNSF(F0_sampled) - F0_sampled (batchsize, length, 1) - Sine_source (batchsize, length, 1) - noise_source (batchsize, length 1) - uv (batchsize, length, 1) - """ - - def __init__( - self, - sampling_rate, - harmonic_num=0, - sine_amp=0.1, - add_noise_std=0.003, - voiced_threshod=0, - is_half=True, - ): - super(SourceModuleHnNSF, self).__init__() - - self.sine_amp = sine_amp - self.noise_std = add_noise_std - self.is_half = is_half - # to produce sine waveforms - self.l_sin_gen = SineGen( - sampling_rate, harmonic_num, sine_amp, add_noise_std, voiced_threshod - ) - - # to merge source harmonics into a single excitation - self.l_linear = torch.nn.Linear(harmonic_num + 1, 1) - self.l_tanh = torch.nn.Tanh() - - def forward(self, x, upp=None): - sine_wavs, uv, _ = self.l_sin_gen(x, upp) - if self.is_half: - sine_wavs = sine_wavs.half() - sine_merge = self.l_tanh(self.l_linear(sine_wavs)) - return sine_merge, None, None # noise, uv - - -class GeneratorNSF(torch.nn.Module): - def __init__( - self, - initial_channel, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels, - sr, - is_half=False, - ): - super(GeneratorNSF, self).__init__() - self.num_kernels = len(resblock_kernel_sizes) - self.num_upsamples = len(upsample_rates) - - self.f0_upsamp = torch.nn.Upsample(scale_factor=np.prod(upsample_rates)) - self.m_source = SourceModuleHnNSF( - sampling_rate=sr, harmonic_num=0, is_half=is_half - ) - self.noise_convs = nn.ModuleList() - self.conv_pre = Conv1d( - initial_channel, upsample_initial_channel, 7, 1, padding=3 - ) - resblock = modules.ResBlock1 if resblock == "1" else modules.ResBlock2 - - self.ups = nn.ModuleList() - for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)): - c_cur = upsample_initial_channel // (2 ** (i + 1)) - self.ups.append( - weight_norm( - ConvTranspose1d( - upsample_initial_channel // (2**i), - upsample_initial_channel // (2 ** (i + 1)), - k, - u, - padding=(k - u) // 2, - ) - ) - ) - if i + 1 < len(upsample_rates): - stride_f0 = np.prod(upsample_rates[i + 1 :]) - self.noise_convs.append( - Conv1d( - 1, - c_cur, - kernel_size=stride_f0 * 2, - stride=stride_f0, - padding=stride_f0 // 2, - ) - ) - else: - self.noise_convs.append(Conv1d(1, c_cur, kernel_size=1)) - - self.resblocks = nn.ModuleList() - for i in range(len(self.ups)): - ch = upsample_initial_channel // (2 ** (i + 1)) - for j, (k, d) in enumerate( - zip(resblock_kernel_sizes, resblock_dilation_sizes) - ): - self.resblocks.append(resblock(ch, k, d)) - - self.conv_post = Conv1d(ch, 1, 7, 1, padding=3, bias=False) - self.ups.apply(init_weights) - - if gin_channels != 0: - self.cond = nn.Conv1d(gin_channels, upsample_initial_channel, 1) - - self.upp = np.prod(upsample_rates) - - def forward(self, x, f0, g=None): - har_source, noi_source, uv = self.m_source(f0, self.upp) - har_source = har_source.transpose(1, 2) - x = self.conv_pre(x) - if g is not None: - x = x + self.cond(g) - - for i in range(self.num_upsamples): - x = F.leaky_relu(x, modules.LRELU_SLOPE) - x = self.ups[i](x) - x_source = self.noise_convs[i](har_source) - x = x + x_source - xs = None - for j in range(self.num_kernels): - if xs is None: - xs = self.resblocks[i * self.num_kernels + j](x) - else: - xs += self.resblocks[i * self.num_kernels + j](x) - x = xs / self.num_kernels - x = F.leaky_relu(x) - x = self.conv_post(x) - x = torch.tanh(x) - return x - - def remove_weight_norm(self): - for l in self.ups: - remove_weight_norm(l) - for l in self.resblocks: - l.remove_weight_norm() - - -sr2sr = { - "32k": 32000, - "40k": 40000, - "48k": 48000, -} - - -class SynthesizerTrnMsNSFsidM(nn.Module): - def __init__( - self, - spec_channels, - segment_size, - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - spk_embed_dim, - gin_channels, - sr, - version, - **kwargs - ): - super().__init__() - if type(sr) == type("strr"): - sr = sr2sr[sr] - self.spec_channels = spec_channels - self.inter_channels = inter_channels - self.hidden_channels = hidden_channels - self.filter_channels = filter_channels - self.n_heads = n_heads - self.n_layers = n_layers - self.kernel_size = kernel_size - self.p_dropout = p_dropout - self.resblock = resblock - self.resblock_kernel_sizes = resblock_kernel_sizes - self.resblock_dilation_sizes = resblock_dilation_sizes - self.upsample_rates = upsample_rates - self.upsample_initial_channel = upsample_initial_channel - self.upsample_kernel_sizes = upsample_kernel_sizes - self.segment_size = segment_size - self.gin_channels = gin_channels - # self.hop_length = hop_length# - self.spk_embed_dim = spk_embed_dim - if version == "v1": - self.enc_p = TextEncoder256( - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - ) - else: - self.enc_p = TextEncoder768( - inter_channels, - hidden_channels, - filter_channels, - n_heads, - n_layers, - kernel_size, - p_dropout, - ) - self.dec = GeneratorNSF( - inter_channels, - resblock, - resblock_kernel_sizes, - resblock_dilation_sizes, - upsample_rates, - upsample_initial_channel, - upsample_kernel_sizes, - gin_channels=gin_channels, - sr=sr, - is_half=kwargs["is_half"], - ) - self.enc_q = PosteriorEncoder( - spec_channels, - inter_channels, - hidden_channels, - 5, - 1, - 16, - gin_channels=gin_channels, - ) - self.flow = ResidualCouplingBlock( - inter_channels, hidden_channels, 5, 1, 3, gin_channels=gin_channels - ) - self.emb_g = nn.Embedding(self.spk_embed_dim, gin_channels) - self.speaker_map = None - print("gin_channels:", gin_channels, "self.spk_embed_dim:", self.spk_embed_dim) - - def remove_weight_norm(self): - self.dec.remove_weight_norm() - self.flow.remove_weight_norm() - self.enc_q.remove_weight_norm() - - def construct_spkmixmap(self, n_speaker): - self.speaker_map = torch.zeros((n_speaker, 1, 1, self.gin_channels)) - for i in range(n_speaker): - self.speaker_map[i] = self.emb_g(torch.LongTensor([[i]])) - self.speaker_map = self.speaker_map.unsqueeze(0) - - def forward(self, phone, phone_lengths, pitch, nsff0, g, rnd, max_len=None): - if self.speaker_map is not None: # [N, S] * [S, B, 1, H] - g = g.reshape((g.shape[0], g.shape[1], 1, 1, 1)) # [N, S, B, 1, 1] - g = g * self.speaker_map # [N, S, B, 1, H] - g = torch.sum(g, dim=1) # [N, 1, B, 1, H] - g = g.transpose(0, -1).transpose(0, -2).squeeze(0) # [B, H, N] - else: - g = g.unsqueeze(0) - g = self.emb_g(g).transpose(1, 2) - - m_p, logs_p, x_mask = self.enc_p(phone, pitch, phone_lengths) - z_p = (m_p + torch.exp(logs_p) * rnd) * x_mask - z = self.flow(z_p, x_mask, g=g, reverse=True) - o = self.dec((z * x_mask)[:, :, :max_len], nsff0, g=g) - return o - - -class MultiPeriodDiscriminator(torch.nn.Module): - def __init__(self, use_spectral_norm=False): - super(MultiPeriodDiscriminator, self).__init__() - periods = [2, 3, 5, 7, 11, 17] - # periods = [3, 5, 7, 11, 17, 23, 37] - - discs = [DiscriminatorS(use_spectral_norm=use_spectral_norm)] - discs = discs + [ - DiscriminatorP(i, use_spectral_norm=use_spectral_norm) for i in periods - ] - self.discriminators = nn.ModuleList(discs) - - def forward(self, y, y_hat): - y_d_rs = [] # - y_d_gs = [] - fmap_rs = [] - fmap_gs = [] - for i, d in enumerate(self.discriminators): - y_d_r, fmap_r = d(y) - y_d_g, fmap_g = d(y_hat) - # for j in range(len(fmap_r)): - # print(i,j,y.shape,y_hat.shape,fmap_r[j].shape,fmap_g[j].shape) - y_d_rs.append(y_d_r) - y_d_gs.append(y_d_g) - fmap_rs.append(fmap_r) - fmap_gs.append(fmap_g) - - return y_d_rs, y_d_gs, fmap_rs, fmap_gs - - -class MultiPeriodDiscriminatorV2(torch.nn.Module): - def __init__(self, use_spectral_norm=False): - super(MultiPeriodDiscriminatorV2, self).__init__() - # periods = [2, 3, 5, 7, 11, 17] - periods = [2, 3, 5, 7, 11, 17, 23, 37] - - discs = [DiscriminatorS(use_spectral_norm=use_spectral_norm)] - discs = discs + [ - DiscriminatorP(i, use_spectral_norm=use_spectral_norm) for i in periods - ] - self.discriminators = nn.ModuleList(discs) - - def forward(self, y, y_hat): - y_d_rs = [] # - y_d_gs = [] - fmap_rs = [] - fmap_gs = [] - for i, d in enumerate(self.discriminators): - y_d_r, fmap_r = d(y) - y_d_g, fmap_g = d(y_hat) - # for j in range(len(fmap_r)): - # print(i,j,y.shape,y_hat.shape,fmap_r[j].shape,fmap_g[j].shape) - y_d_rs.append(y_d_r) - y_d_gs.append(y_d_g) - fmap_rs.append(fmap_r) - fmap_gs.append(fmap_g) - - return y_d_rs, y_d_gs, fmap_rs, fmap_gs - - -class DiscriminatorS(torch.nn.Module): - def __init__(self, use_spectral_norm=False): - super(DiscriminatorS, self).__init__() - norm_f = weight_norm if use_spectral_norm == False else spectral_norm - self.convs = nn.ModuleList( - [ - norm_f(Conv1d(1, 16, 15, 1, padding=7)), - norm_f(Conv1d(16, 64, 41, 4, groups=4, padding=20)), - norm_f(Conv1d(64, 256, 41, 4, groups=16, padding=20)), - norm_f(Conv1d(256, 1024, 41, 4, groups=64, padding=20)), - norm_f(Conv1d(1024, 1024, 41, 4, groups=256, padding=20)), - norm_f(Conv1d(1024, 1024, 5, 1, padding=2)), - ] - ) - self.conv_post = norm_f(Conv1d(1024, 1, 3, 1, padding=1)) - - def forward(self, x): - fmap = [] - - for l in self.convs: - x = l(x) - x = F.leaky_relu(x, modules.LRELU_SLOPE) - fmap.append(x) - x = self.conv_post(x) - fmap.append(x) - x = torch.flatten(x, 1, -1) - - return x, fmap - - -class DiscriminatorP(torch.nn.Module): - def __init__(self, period, kernel_size=5, stride=3, use_spectral_norm=False): - super(DiscriminatorP, self).__init__() - self.period = period - self.use_spectral_norm = use_spectral_norm - norm_f = weight_norm if use_spectral_norm == False else spectral_norm - self.convs = nn.ModuleList( - [ - norm_f( - Conv2d( - 1, - 32, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 32, - 128, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 128, - 512, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 512, - 1024, - (kernel_size, 1), - (stride, 1), - padding=(get_padding(kernel_size, 1), 0), - ) - ), - norm_f( - Conv2d( - 1024, - 1024, - (kernel_size, 1), - 1, - padding=(get_padding(kernel_size, 1), 0), - ) - ), - ] - ) - self.conv_post = norm_f(Conv2d(1024, 1, (3, 1), 1, padding=(1, 0))) - - def forward(self, x): - fmap = [] - - # 1d to 2d - b, c, t = x.shape - if t % self.period != 0: # pad first - n_pad = self.period - (t % self.period) - x = F.pad(x, (0, n_pad), "reflect") - t = t + n_pad - x = x.view(b, c, t // self.period, self.period) - - for l in self.convs: - x = l(x) - x = F.leaky_relu(x, modules.LRELU_SLOPE) - fmap.append(x) - x = self.conv_post(x) - fmap.append(x) - x = torch.flatten(x, 1, -1) - - return x, fmap diff --git a/lib/infer_pack/modules.py b/lib/infer_pack/modules.py deleted file mode 100644 index c83289df7c79a4810dacd15c050148544ba0b6a9..0000000000000000000000000000000000000000 --- a/lib/infer_pack/modules.py +++ /dev/null @@ -1,522 +0,0 @@ -import copy -import math -import numpy as np -import scipy -import torch -from torch import nn -from torch.nn import functional as F - -from torch.nn import Conv1d, ConvTranspose1d, AvgPool1d, Conv2d -from torch.nn.utils import weight_norm, remove_weight_norm - -from lib.infer_pack import commons -from lib.infer_pack.commons import init_weights, get_padding -from lib.infer_pack.transforms import piecewise_rational_quadratic_transform - - -LRELU_SLOPE = 0.1 - - -class LayerNorm(nn.Module): - def __init__(self, channels, eps=1e-5): - super().__init__() - self.channels = channels - self.eps = eps - - self.gamma = nn.Parameter(torch.ones(channels)) - self.beta = nn.Parameter(torch.zeros(channels)) - - def forward(self, x): - x = x.transpose(1, -1) - x = F.layer_norm(x, (self.channels,), self.gamma, self.beta, self.eps) - return x.transpose(1, -1) - - -class ConvReluNorm(nn.Module): - def __init__( - self, - in_channels, - hidden_channels, - out_channels, - kernel_size, - n_layers, - p_dropout, - ): - super().__init__() - self.in_channels = in_channels - self.hidden_channels = hidden_channels - self.out_channels = out_channels - self.kernel_size = kernel_size - self.n_layers = n_layers - self.p_dropout = p_dropout - assert n_layers > 1, "Number of layers should be larger than 0." - - self.conv_layers = nn.ModuleList() - self.norm_layers = nn.ModuleList() - self.conv_layers.append( - nn.Conv1d( - in_channels, hidden_channels, kernel_size, padding=kernel_size // 2 - ) - ) - self.norm_layers.append(LayerNorm(hidden_channels)) - self.relu_drop = nn.Sequential(nn.ReLU(), nn.Dropout(p_dropout)) - for _ in range(n_layers - 1): - self.conv_layers.append( - nn.Conv1d( - hidden_channels, - hidden_channels, - kernel_size, - padding=kernel_size // 2, - ) - ) - self.norm_layers.append(LayerNorm(hidden_channels)) - self.proj = nn.Conv1d(hidden_channels, out_channels, 1) - self.proj.weight.data.zero_() - self.proj.bias.data.zero_() - - def forward(self, x, x_mask): - x_org = x - for i in range(self.n_layers): - x = self.conv_layers[i](x * x_mask) - x = self.norm_layers[i](x) - x = self.relu_drop(x) - x = x_org + self.proj(x) - return x * x_mask - - -class DDSConv(nn.Module): - """ - Dialted and Depth-Separable Convolution - """ - - def __init__(self, channels, kernel_size, n_layers, p_dropout=0.0): - super().__init__() - self.channels = channels - self.kernel_size = kernel_size - self.n_layers = n_layers - self.p_dropout = p_dropout - - self.drop = nn.Dropout(p_dropout) - self.convs_sep = nn.ModuleList() - self.convs_1x1 = nn.ModuleList() - self.norms_1 = nn.ModuleList() - self.norms_2 = nn.ModuleList() - for i in range(n_layers): - dilation = kernel_size**i - padding = (kernel_size * dilation - dilation) // 2 - self.convs_sep.append( - nn.Conv1d( - channels, - channels, - kernel_size, - groups=channels, - dilation=dilation, - padding=padding, - ) - ) - self.convs_1x1.append(nn.Conv1d(channels, channels, 1)) - self.norms_1.append(LayerNorm(channels)) - self.norms_2.append(LayerNorm(channels)) - - def forward(self, x, x_mask, g=None): - if g is not None: - x = x + g - for i in range(self.n_layers): - y = self.convs_sep[i](x * x_mask) - y = self.norms_1[i](y) - y = F.gelu(y) - y = self.convs_1x1[i](y) - y = self.norms_2[i](y) - y = F.gelu(y) - y = self.drop(y) - x = x + y - return x * x_mask - - -class WN(torch.nn.Module): - def __init__( - self, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - gin_channels=0, - p_dropout=0, - ): - super(WN, self).__init__() - assert kernel_size % 2 == 1 - self.hidden_channels = hidden_channels - self.kernel_size = (kernel_size,) - self.dilation_rate = dilation_rate - self.n_layers = n_layers - self.gin_channels = gin_channels - self.p_dropout = p_dropout - - self.in_layers = torch.nn.ModuleList() - self.res_skip_layers = torch.nn.ModuleList() - self.drop = nn.Dropout(p_dropout) - - if gin_channels != 0: - cond_layer = torch.nn.Conv1d( - gin_channels, 2 * hidden_channels * n_layers, 1 - ) - self.cond_layer = torch.nn.utils.weight_norm(cond_layer, name="weight") - - for i in range(n_layers): - dilation = dilation_rate**i - padding = int((kernel_size * dilation - dilation) / 2) - in_layer = torch.nn.Conv1d( - hidden_channels, - 2 * hidden_channels, - kernel_size, - dilation=dilation, - padding=padding, - ) - in_layer = torch.nn.utils.weight_norm(in_layer, name="weight") - self.in_layers.append(in_layer) - - # last one is not necessary - if i < n_layers - 1: - res_skip_channels = 2 * hidden_channels - else: - res_skip_channels = hidden_channels - - res_skip_layer = torch.nn.Conv1d(hidden_channels, res_skip_channels, 1) - res_skip_layer = torch.nn.utils.weight_norm(res_skip_layer, name="weight") - self.res_skip_layers.append(res_skip_layer) - - def forward(self, x, x_mask, g=None, **kwargs): - output = torch.zeros_like(x) - n_channels_tensor = torch.IntTensor([self.hidden_channels]) - - if g is not None: - g = self.cond_layer(g) - - for i in range(self.n_layers): - x_in = self.in_layers[i](x) - if g is not None: - cond_offset = i * 2 * self.hidden_channels - g_l = g[:, cond_offset : cond_offset + 2 * self.hidden_channels, :] - else: - g_l = torch.zeros_like(x_in) - - acts = commons.fused_add_tanh_sigmoid_multiply(x_in, g_l, n_channels_tensor) - acts = self.drop(acts) - - res_skip_acts = self.res_skip_layers[i](acts) - if i < self.n_layers - 1: - res_acts = res_skip_acts[:, : self.hidden_channels, :] - x = (x + res_acts) * x_mask - output = output + res_skip_acts[:, self.hidden_channels :, :] - else: - output = output + res_skip_acts - return output * x_mask - - def remove_weight_norm(self): - if self.gin_channels != 0: - torch.nn.utils.remove_weight_norm(self.cond_layer) - for l in self.in_layers: - torch.nn.utils.remove_weight_norm(l) - for l in self.res_skip_layers: - torch.nn.utils.remove_weight_norm(l) - - -class ResBlock1(torch.nn.Module): - def __init__(self, channels, kernel_size=3, dilation=(1, 3, 5)): - super(ResBlock1, self).__init__() - self.convs1 = nn.ModuleList( - [ - weight_norm( - Conv1d( - channels, - channels, - kernel_size, - 1, - dilation=dilation[0], - padding=get_padding(kernel_size, dilation[0]), - ) - ), - weight_norm( - Conv1d( - channels, - channels, - kernel_size, - 1, - dilation=dilation[1], - padding=get_padding(kernel_size, dilation[1]), - ) - ), - weight_norm( - Conv1d( - channels, - channels, - kernel_size, - 1, - dilation=dilation[2], - padding=get_padding(kernel_size, dilation[2]), - ) - ), - ] - ) - self.convs1.apply(init_weights) - - self.convs2 = nn.ModuleList( - [ - weight_norm( - Conv1d( - channels, - channels, - kernel_size, - 1, - dilation=1, - padding=get_padding(kernel_size, 1), - ) - ), - weight_norm( - Conv1d( - channels, - channels, - kernel_size, - 1, - dilation=1, - padding=get_padding(kernel_size, 1), - ) - ), - weight_norm( - Conv1d( - channels, - channels, - kernel_size, - 1, - dilation=1, - padding=get_padding(kernel_size, 1), - ) - ), - ] - ) - self.convs2.apply(init_weights) - - def forward(self, x, x_mask=None): - for c1, c2 in zip(self.convs1, self.convs2): - xt = F.leaky_relu(x, LRELU_SLOPE) - if x_mask is not None: - xt = xt * x_mask - xt = c1(xt) - xt = F.leaky_relu(xt, LRELU_SLOPE) - if x_mask is not None: - xt = xt * x_mask - xt = c2(xt) - x = xt + x - if x_mask is not None: - x = x * x_mask - return x - - def remove_weight_norm(self): - for l in self.convs1: - remove_weight_norm(l) - for l in self.convs2: - remove_weight_norm(l) - - -class ResBlock2(torch.nn.Module): - def __init__(self, channels, kernel_size=3, dilation=(1, 3)): - super(ResBlock2, self).__init__() - self.convs = nn.ModuleList( - [ - weight_norm( - Conv1d( - channels, - channels, - kernel_size, - 1, - dilation=dilation[0], - padding=get_padding(kernel_size, dilation[0]), - ) - ), - weight_norm( - Conv1d( - channels, - channels, - kernel_size, - 1, - dilation=dilation[1], - padding=get_padding(kernel_size, dilation[1]), - ) - ), - ] - ) - self.convs.apply(init_weights) - - def forward(self, x, x_mask=None): - for c in self.convs: - xt = F.leaky_relu(x, LRELU_SLOPE) - if x_mask is not None: - xt = xt * x_mask - xt = c(xt) - x = xt + x - if x_mask is not None: - x = x * x_mask - return x - - def remove_weight_norm(self): - for l in self.convs: - remove_weight_norm(l) - - -class Log(nn.Module): - def forward(self, x, x_mask, reverse=False, **kwargs): - if not reverse: - y = torch.log(torch.clamp_min(x, 1e-5)) * x_mask - logdet = torch.sum(-y, [1, 2]) - return y, logdet - else: - x = torch.exp(x) * x_mask - return x - - -class Flip(nn.Module): - def forward(self, x, *args, reverse=False, **kwargs): - x = torch.flip(x, [1]) - if not reverse: - logdet = torch.zeros(x.size(0)).to(dtype=x.dtype, device=x.device) - return x, logdet - else: - return x - - -class ElementwiseAffine(nn.Module): - def __init__(self, channels): - super().__init__() - self.channels = channels - self.m = nn.Parameter(torch.zeros(channels, 1)) - self.logs = nn.Parameter(torch.zeros(channels, 1)) - - def forward(self, x, x_mask, reverse=False, **kwargs): - if not reverse: - y = self.m + torch.exp(self.logs) * x - y = y * x_mask - logdet = torch.sum(self.logs * x_mask, [1, 2]) - return y, logdet - else: - x = (x - self.m) * torch.exp(-self.logs) * x_mask - return x - - -class ResidualCouplingLayer(nn.Module): - def __init__( - self, - channels, - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - p_dropout=0, - gin_channels=0, - mean_only=False, - ): - assert channels % 2 == 0, "channels should be divisible by 2" - super().__init__() - self.channels = channels - self.hidden_channels = hidden_channels - self.kernel_size = kernel_size - self.dilation_rate = dilation_rate - self.n_layers = n_layers - self.half_channels = channels // 2 - self.mean_only = mean_only - - self.pre = nn.Conv1d(self.half_channels, hidden_channels, 1) - self.enc = WN( - hidden_channels, - kernel_size, - dilation_rate, - n_layers, - p_dropout=p_dropout, - gin_channels=gin_channels, - ) - self.post = nn.Conv1d(hidden_channels, self.half_channels * (2 - mean_only), 1) - self.post.weight.data.zero_() - self.post.bias.data.zero_() - - def forward(self, x, x_mask, g=None, reverse=False): - x0, x1 = torch.split(x, [self.half_channels] * 2, 1) - h = self.pre(x0) * x_mask - h = self.enc(h, x_mask, g=g) - stats = self.post(h) * x_mask - if not self.mean_only: - m, logs = torch.split(stats, [self.half_channels] * 2, 1) - else: - m = stats - logs = torch.zeros_like(m) - - if not reverse: - x1 = m + x1 * torch.exp(logs) * x_mask - x = torch.cat([x0, x1], 1) - logdet = torch.sum(logs, [1, 2]) - return x, logdet - else: - x1 = (x1 - m) * torch.exp(-logs) * x_mask - x = torch.cat([x0, x1], 1) - return x - - def remove_weight_norm(self): - self.enc.remove_weight_norm() - - -class ConvFlow(nn.Module): - def __init__( - self, - in_channels, - filter_channels, - kernel_size, - n_layers, - num_bins=10, - tail_bound=5.0, - ): - super().__init__() - self.in_channels = in_channels - self.filter_channels = filter_channels - self.kernel_size = kernel_size - self.n_layers = n_layers - self.num_bins = num_bins - self.tail_bound = tail_bound - self.half_channels = in_channels // 2 - - self.pre = nn.Conv1d(self.half_channels, filter_channels, 1) - self.convs = DDSConv(filter_channels, kernel_size, n_layers, p_dropout=0.0) - self.proj = nn.Conv1d( - filter_channels, self.half_channels * (num_bins * 3 - 1), 1 - ) - self.proj.weight.data.zero_() - self.proj.bias.data.zero_() - - def forward(self, x, x_mask, g=None, reverse=False): - x0, x1 = torch.split(x, [self.half_channels] * 2, 1) - h = self.pre(x0) - h = self.convs(h, x_mask, g=g) - h = self.proj(h) * x_mask - - b, c, t = x0.shape - h = h.reshape(b, c, -1, t).permute(0, 1, 3, 2) # [b, cx?, t] -> [b, c, t, ?] - - unnormalized_widths = h[..., : self.num_bins] / math.sqrt(self.filter_channels) - unnormalized_heights = h[..., self.num_bins : 2 * self.num_bins] / math.sqrt( - self.filter_channels - ) - unnormalized_derivatives = h[..., 2 * self.num_bins :] - - x1, logabsdet = piecewise_rational_quadratic_transform( - x1, - unnormalized_widths, - unnormalized_heights, - unnormalized_derivatives, - inverse=reverse, - tails="linear", - tail_bound=self.tail_bound, - ) - - x = torch.cat([x0, x1], 1) * x_mask - logdet = torch.sum(logabsdet * x_mask, [1, 2]) - if not reverse: - return x, logdet - else: - return x diff --git a/lib/infer_pack/modules/F0Predictor/DioF0Predictor.py b/lib/infer_pack/modules/F0Predictor/DioF0Predictor.py deleted file mode 100644 index ee3171bcb7c4a5066560723108b56e055f18be45..0000000000000000000000000000000000000000 --- a/lib/infer_pack/modules/F0Predictor/DioF0Predictor.py +++ /dev/null @@ -1,90 +0,0 @@ -from lib.infer_pack.modules.F0Predictor.F0Predictor import F0Predictor -import pyworld -import numpy as np - - -class DioF0Predictor(F0Predictor): - def __init__(self, hop_length=512, f0_min=50, f0_max=1100, sampling_rate=44100): - self.hop_length = hop_length - self.f0_min = f0_min - self.f0_max = f0_max - self.sampling_rate = sampling_rate - - def interpolate_f0(self, f0): - """ - 对F0进行插值处理 - """ - - data = np.reshape(f0, (f0.size, 1)) - - vuv_vector = np.zeros((data.size, 1), dtype=np.float32) - vuv_vector[data > 0.0] = 1.0 - vuv_vector[data <= 0.0] = 0.0 - - ip_data = data - - frame_number = data.size - last_value = 0.0 - for i in range(frame_number): - if data[i] <= 0.0: - j = i + 1 - for j in range(i + 1, frame_number): - if data[j] > 0.0: - break - if j < frame_number - 1: - if last_value > 0.0: - step = (data[j] - data[i - 1]) / float(j - i) - for k in range(i, j): - ip_data[k] = data[i - 1] + step * (k - i + 1) - else: - for k in range(i, j): - ip_data[k] = data[j] - else: - for k in range(i, frame_number): - ip_data[k] = last_value - else: - ip_data[i] = data[i] # 这里可能存在一个没有必要的拷贝 - last_value = data[i] - - return ip_data[:, 0], vuv_vector[:, 0] - - def resize_f0(self, x, target_len): - source = np.array(x) - source[source < 0.001] = np.nan - target = np.interp( - np.arange(0, len(source) * target_len, len(source)) / target_len, - np.arange(0, len(source)), - source, - ) - res = np.nan_to_num(target) - return res - - def compute_f0(self, wav, p_len=None): - if p_len is None: - p_len = wav.shape[0] // self.hop_length - f0, t = pyworld.dio( - wav.astype(np.double), - fs=self.sampling_rate, - f0_floor=self.f0_min, - f0_ceil=self.f0_max, - frame_period=1000 * self.hop_length / self.sampling_rate, - ) - f0 = pyworld.stonemask(wav.astype(np.double), f0, t, self.sampling_rate) - for index, pitch in enumerate(f0): - f0[index] = round(pitch, 1) - return self.interpolate_f0(self.resize_f0(f0, p_len))[0] - - def compute_f0_uv(self, wav, p_len=None): - if p_len is None: - p_len = wav.shape[0] // self.hop_length - f0, t = pyworld.dio( - wav.astype(np.double), - fs=self.sampling_rate, - f0_floor=self.f0_min, - f0_ceil=self.f0_max, - frame_period=1000 * self.hop_length / self.sampling_rate, - ) - f0 = pyworld.stonemask(wav.astype(np.double), f0, t, self.sampling_rate) - for index, pitch in enumerate(f0): - f0[index] = round(pitch, 1) - return self.interpolate_f0(self.resize_f0(f0, p_len)) diff --git a/lib/infer_pack/modules/F0Predictor/F0Predictor.py b/lib/infer_pack/modules/F0Predictor/F0Predictor.py deleted file mode 100644 index f56e49e7f0e6eab3babf0711cae2933371b9f9cc..0000000000000000000000000000000000000000 --- a/lib/infer_pack/modules/F0Predictor/F0Predictor.py +++ /dev/null @@ -1,16 +0,0 @@ -class F0Predictor(object): - def compute_f0(self, wav, p_len): - """ - input: wav:[signal_length] - p_len:int - output: f0:[signal_length//hop_length] - """ - pass - - def compute_f0_uv(self, wav, p_len): - """ - input: wav:[signal_length] - p_len:int - output: f0:[signal_length//hop_length],uv:[signal_length//hop_length] - """ - pass diff --git a/lib/infer_pack/modules/F0Predictor/HarvestF0Predictor.py b/lib/infer_pack/modules/F0Predictor/HarvestF0Predictor.py deleted file mode 100644 index b412ba2814e114ca7bb00b6fd6ef217f63d788a3..0000000000000000000000000000000000000000 --- a/lib/infer_pack/modules/F0Predictor/HarvestF0Predictor.py +++ /dev/null @@ -1,86 +0,0 @@ -from lib.infer_pack.modules.F0Predictor.F0Predictor import F0Predictor -import pyworld -import numpy as np - - -class HarvestF0Predictor(F0Predictor): - def __init__(self, hop_length=512, f0_min=50, f0_max=1100, sampling_rate=44100): - self.hop_length = hop_length - self.f0_min = f0_min - self.f0_max = f0_max - self.sampling_rate = sampling_rate - - def interpolate_f0(self, f0): - """ - 对F0进行插值处理 - """ - - data = np.reshape(f0, (f0.size, 1)) - - vuv_vector = np.zeros((data.size, 1), dtype=np.float32) - vuv_vector[data > 0.0] = 1.0 - vuv_vector[data <= 0.0] = 0.0 - - ip_data = data - - frame_number = data.size - last_value = 0.0 - for i in range(frame_number): - if data[i] <= 0.0: - j = i + 1 - for j in range(i + 1, frame_number): - if data[j] > 0.0: - break - if j < frame_number - 1: - if last_value > 0.0: - step = (data[j] - data[i - 1]) / float(j - i) - for k in range(i, j): - ip_data[k] = data[i - 1] + step * (k - i + 1) - else: - for k in range(i, j): - ip_data[k] = data[j] - else: - for k in range(i, frame_number): - ip_data[k] = last_value - else: - ip_data[i] = data[i] # 这里可能存在一个没有必要的拷贝 - last_value = data[i] - - return ip_data[:, 0], vuv_vector[:, 0] - - def resize_f0(self, x, target_len): - source = np.array(x) - source[source < 0.001] = np.nan - target = np.interp( - np.arange(0, len(source) * target_len, len(source)) / target_len, - np.arange(0, len(source)), - source, - ) - res = np.nan_to_num(target) - return res - - def compute_f0(self, wav, p_len=None): - if p_len is None: - p_len = wav.shape[0] // self.hop_length - f0, t = pyworld.harvest( - wav.astype(np.double), - fs=self.hop_length, - f0_ceil=self.f0_max, - f0_floor=self.f0_min, - frame_period=1000 * self.hop_length / self.sampling_rate, - ) - f0 = pyworld.stonemask(wav.astype(np.double), f0, t, self.fs) - return self.interpolate_f0(self.resize_f0(f0, p_len))[0] - - def compute_f0_uv(self, wav, p_len=None): - if p_len is None: - p_len = wav.shape[0] // self.hop_length - f0, t = pyworld.harvest( - wav.astype(np.double), - fs=self.sampling_rate, - f0_floor=self.f0_min, - f0_ceil=self.f0_max, - frame_period=1000 * self.hop_length / self.sampling_rate, - ) - f0 = pyworld.stonemask(wav.astype(np.double), f0, t, self.sampling_rate) - return self.interpolate_f0(self.resize_f0(f0, p_len)) diff --git a/lib/infer_pack/modules/F0Predictor/PMF0Predictor.py b/lib/infer_pack/modules/F0Predictor/PMF0Predictor.py deleted file mode 100644 index b2c592527a5966e6f8e79e8c52dc5b414246dcc6..0000000000000000000000000000000000000000 --- a/lib/infer_pack/modules/F0Predictor/PMF0Predictor.py +++ /dev/null @@ -1,97 +0,0 @@ -from lib.infer_pack.modules.F0Predictor.F0Predictor import F0Predictor -import parselmouth -import numpy as np - - -class PMF0Predictor(F0Predictor): - def __init__(self, hop_length=512, f0_min=50, f0_max=1100, sampling_rate=44100): - self.hop_length = hop_length - self.f0_min = f0_min - self.f0_max = f0_max - self.sampling_rate = sampling_rate - - def interpolate_f0(self, f0): - """ - 对F0进行插值处理 - """ - - data = np.reshape(f0, (f0.size, 1)) - - vuv_vector = np.zeros((data.size, 1), dtype=np.float32) - vuv_vector[data > 0.0] = 1.0 - vuv_vector[data <= 0.0] = 0.0 - - ip_data = data - - frame_number = data.size - last_value = 0.0 - for i in range(frame_number): - if data[i] <= 0.0: - j = i + 1 - for j in range(i + 1, frame_number): - if data[j] > 0.0: - break - if j < frame_number - 1: - if last_value > 0.0: - step = (data[j] - data[i - 1]) / float(j - i) - for k in range(i, j): - ip_data[k] = data[i - 1] + step * (k - i + 1) - else: - for k in range(i, j): - ip_data[k] = data[j] - else: - for k in range(i, frame_number): - ip_data[k] = last_value - else: - ip_data[i] = data[i] # 这里可能存在一个没有必要的拷贝 - last_value = data[i] - - return ip_data[:, 0], vuv_vector[:, 0] - - def compute_f0(self, wav, p_len=None): - x = wav - if p_len is None: - p_len = x.shape[0] // self.hop_length - else: - assert abs(p_len - x.shape[0] // self.hop_length) < 4, "pad length error" - time_step = self.hop_length / self.sampling_rate * 1000 - f0 = ( - parselmouth.Sound(x, self.sampling_rate) - .to_pitch_ac( - time_step=time_step / 1000, - voicing_threshold=0.6, - pitch_floor=self.f0_min, - pitch_ceiling=self.f0_max, - ) - .selected_array["frequency"] - ) - - pad_size = (p_len - len(f0) + 1) // 2 - if pad_size > 0 or p_len - len(f0) - pad_size > 0: - f0 = np.pad(f0, [[pad_size, p_len - len(f0) - pad_size]], mode="constant") - f0, uv = self.interpolate_f0(f0) - return f0 - - def compute_f0_uv(self, wav, p_len=None): - x = wav - if p_len is None: - p_len = x.shape[0] // self.hop_length - else: - assert abs(p_len - x.shape[0] // self.hop_length) < 4, "pad length error" - time_step = self.hop_length / self.sampling_rate * 1000 - f0 = ( - parselmouth.Sound(x, self.sampling_rate) - .to_pitch_ac( - time_step=time_step / 1000, - voicing_threshold=0.6, - pitch_floor=self.f0_min, - pitch_ceiling=self.f0_max, - ) - .selected_array["frequency"] - ) - - pad_size = (p_len - len(f0) + 1) // 2 - if pad_size > 0 or p_len - len(f0) - pad_size > 0: - f0 = np.pad(f0, [[pad_size, p_len - len(f0) - pad_size]], mode="constant") - f0, uv = self.interpolate_f0(f0) - return f0, uv diff --git a/lib/infer_pack/modules/F0Predictor/__init__.py b/lib/infer_pack/modules/F0Predictor/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/lib/infer_pack/onnx_inference.py b/lib/infer_pack/onnx_inference.py deleted file mode 100644 index 6517853be49e61c427cf7cd9b5ed203f6d5f367e..0000000000000000000000000000000000000000 --- a/lib/infer_pack/onnx_inference.py +++ /dev/null @@ -1,145 +0,0 @@ -import onnxruntime -import librosa -import numpy as np -import soundfile - - -class ContentVec: - def __init__(self, vec_path="pretrained/vec-768-layer-12.onnx", device=None): - print("load model(s) from {}".format(vec_path)) - if device == "cpu" or device is None: - providers = ["CPUExecutionProvider"] - elif device == "cuda": - providers = ["CUDAExecutionProvider", "CPUExecutionProvider"] - elif device == "dml": - providers = ["DmlExecutionProvider"] - else: - raise RuntimeError("Unsportted Device") - self.model = onnxruntime.InferenceSession(vec_path, providers=providers) - - def __call__(self, wav): - return self.forward(wav) - - def forward(self, wav): - feats = wav - if feats.ndim == 2: # double channels - feats = feats.mean(-1) - assert feats.ndim == 1, feats.ndim - feats = np.expand_dims(np.expand_dims(feats, 0), 0) - onnx_input = {self.model.get_inputs()[0].name: feats} - logits = self.model.run(None, onnx_input)[0] - return logits.transpose(0, 2, 1) - - -def get_f0_predictor(f0_predictor, hop_length, sampling_rate, **kargs): - if f0_predictor == "pm": - from lib.infer_pack.modules.F0Predictor.PMF0Predictor import PMF0Predictor - - f0_predictor_object = PMF0Predictor( - hop_length=hop_length, sampling_rate=sampling_rate - ) - elif f0_predictor == "harvest": - from lib.infer_pack.modules.F0Predictor.HarvestF0Predictor import ( - HarvestF0Predictor, - ) - - f0_predictor_object = HarvestF0Predictor( - hop_length=hop_length, sampling_rate=sampling_rate - ) - elif f0_predictor == "dio": - from lib.infer_pack.modules.F0Predictor.DioF0Predictor import DioF0Predictor - - f0_predictor_object = DioF0Predictor( - hop_length=hop_length, sampling_rate=sampling_rate - ) - else: - raise Exception("Unknown f0 predictor") - return f0_predictor_object - - -class OnnxRVC: - def __init__( - self, - model_path, - sr=40000, - hop_size=512, - vec_path="vec-768-layer-12", - device="cpu", - ): - vec_path = f"pretrained/{vec_path}.onnx" - self.vec_model = ContentVec(vec_path, device) - if device == "cpu" or device is None: - providers = ["CPUExecutionProvider"] - elif device == "cuda": - providers = ["CUDAExecutionProvider", "CPUExecutionProvider"] - elif device == "dml": - providers = ["DmlExecutionProvider"] - else: - raise RuntimeError("Unsportted Device") - self.model = onnxruntime.InferenceSession(model_path, providers=providers) - self.sampling_rate = sr - self.hop_size = hop_size - - def forward(self, hubert, hubert_length, pitch, pitchf, ds, rnd): - onnx_input = { - self.model.get_inputs()[0].name: hubert, - self.model.get_inputs()[1].name: hubert_length, - self.model.get_inputs()[2].name: pitch, - self.model.get_inputs()[3].name: pitchf, - self.model.get_inputs()[4].name: ds, - self.model.get_inputs()[5].name: rnd, - } - return (self.model.run(None, onnx_input)[0] * 32767).astype(np.int16) - - def inference( - self, - raw_path, - sid, - f0_method="dio", - f0_up_key=0, - pad_time=0.5, - cr_threshold=0.02, - ): - f0_min = 50 - f0_max = 1100 - f0_mel_min = 1127 * np.log(1 + f0_min / 700) - f0_mel_max = 1127 * np.log(1 + f0_max / 700) - f0_predictor = get_f0_predictor( - f0_method, - hop_length=self.hop_size, - sampling_rate=self.sampling_rate, - threshold=cr_threshold, - ) - wav, sr = librosa.load(raw_path, sr=self.sampling_rate) - org_length = len(wav) - if org_length / sr > 50.0: - raise RuntimeError("Reached Max Length") - - wav16k = librosa.resample(wav, orig_sr=self.sampling_rate, target_sr=16000) - wav16k = wav16k - - hubert = self.vec_model(wav16k) - hubert = np.repeat(hubert, 2, axis=2).transpose(0, 2, 1).astype(np.float32) - hubert_length = hubert.shape[1] - - pitchf = f0_predictor.compute_f0(wav, hubert_length) - pitchf = pitchf * 2 ** (f0_up_key / 12) - pitch = pitchf.copy() - f0_mel = 1127 * np.log(1 + pitch / 700) - f0_mel[f0_mel > 0] = (f0_mel[f0_mel > 0] - f0_mel_min) * 254 / ( - f0_mel_max - f0_mel_min - ) + 1 - f0_mel[f0_mel <= 1] = 1 - f0_mel[f0_mel > 255] = 255 - pitch = np.rint(f0_mel).astype(np.int64) - - pitchf = pitchf.reshape(1, len(pitchf)).astype(np.float32) - pitch = pitch.reshape(1, len(pitch)) - ds = np.array([sid]).astype(np.int64) - - rnd = np.random.randn(1, 192, hubert_length).astype(np.float32) - hubert_length = np.array([hubert_length]).astype(np.int64) - - out_wav = self.forward(hubert, hubert_length, pitch, pitchf, ds, rnd).squeeze() - out_wav = np.pad(out_wav, (0, 2 * self.hop_size), "constant") - return out_wav[0:org_length] diff --git a/lib/infer_pack/transforms.py b/lib/infer_pack/transforms.py deleted file mode 100644 index a11f799e023864ff7082c1f49c0cc18351a13b47..0000000000000000000000000000000000000000 --- a/lib/infer_pack/transforms.py +++ /dev/null @@ -1,209 +0,0 @@ -import torch -from torch.nn import functional as F - -import numpy as np - - -DEFAULT_MIN_BIN_WIDTH = 1e-3 -DEFAULT_MIN_BIN_HEIGHT = 1e-3 -DEFAULT_MIN_DERIVATIVE = 1e-3 - - -def piecewise_rational_quadratic_transform( - inputs, - unnormalized_widths, - unnormalized_heights, - unnormalized_derivatives, - inverse=False, - tails=None, - tail_bound=1.0, - min_bin_width=DEFAULT_MIN_BIN_WIDTH, - min_bin_height=DEFAULT_MIN_BIN_HEIGHT, - min_derivative=DEFAULT_MIN_DERIVATIVE, -): - if tails is None: - spline_fn = rational_quadratic_spline - spline_kwargs = {} - else: - spline_fn = unconstrained_rational_quadratic_spline - spline_kwargs = {"tails": tails, "tail_bound": tail_bound} - - outputs, logabsdet = spline_fn( - inputs=inputs, - unnormalized_widths=unnormalized_widths, - unnormalized_heights=unnormalized_heights, - unnormalized_derivatives=unnormalized_derivatives, - inverse=inverse, - min_bin_width=min_bin_width, - min_bin_height=min_bin_height, - min_derivative=min_derivative, - **spline_kwargs - ) - return outputs, logabsdet - - -def searchsorted(bin_locations, inputs, eps=1e-6): - bin_locations[..., -1] += eps - return torch.sum(inputs[..., None] >= bin_locations, dim=-1) - 1 - - -def unconstrained_rational_quadratic_spline( - inputs, - unnormalized_widths, - unnormalized_heights, - unnormalized_derivatives, - inverse=False, - tails="linear", - tail_bound=1.0, - min_bin_width=DEFAULT_MIN_BIN_WIDTH, - min_bin_height=DEFAULT_MIN_BIN_HEIGHT, - min_derivative=DEFAULT_MIN_DERIVATIVE, -): - inside_interval_mask = (inputs >= -tail_bound) & (inputs <= tail_bound) - outside_interval_mask = ~inside_interval_mask - - outputs = torch.zeros_like(inputs) - logabsdet = torch.zeros_like(inputs) - - if tails == "linear": - unnormalized_derivatives = F.pad(unnormalized_derivatives, pad=(1, 1)) - constant = np.log(np.exp(1 - min_derivative) - 1) - unnormalized_derivatives[..., 0] = constant - unnormalized_derivatives[..., -1] = constant - - outputs[outside_interval_mask] = inputs[outside_interval_mask] - logabsdet[outside_interval_mask] = 0 - else: - raise RuntimeError("{} tails are not implemented.".format(tails)) - - ( - outputs[inside_interval_mask], - logabsdet[inside_interval_mask], - ) = rational_quadratic_spline( - inputs=inputs[inside_interval_mask], - unnormalized_widths=unnormalized_widths[inside_interval_mask, :], - unnormalized_heights=unnormalized_heights[inside_interval_mask, :], - unnormalized_derivatives=unnormalized_derivatives[inside_interval_mask, :], - inverse=inverse, - left=-tail_bound, - right=tail_bound, - bottom=-tail_bound, - top=tail_bound, - min_bin_width=min_bin_width, - min_bin_height=min_bin_height, - min_derivative=min_derivative, - ) - - return outputs, logabsdet - - -def rational_quadratic_spline( - inputs, - unnormalized_widths, - unnormalized_heights, - unnormalized_derivatives, - inverse=False, - left=0.0, - right=1.0, - bottom=0.0, - top=1.0, - min_bin_width=DEFAULT_MIN_BIN_WIDTH, - min_bin_height=DEFAULT_MIN_BIN_HEIGHT, - min_derivative=DEFAULT_MIN_DERIVATIVE, -): - if torch.min(inputs) < left or torch.max(inputs) > right: - raise ValueError("Input to a transform is not within its domain") - - num_bins = unnormalized_widths.shape[-1] - - if min_bin_width * num_bins > 1.0: - raise ValueError("Minimal bin width too large for the number of bins") - if min_bin_height * num_bins > 1.0: - raise ValueError("Minimal bin height too large for the number of bins") - - widths = F.softmax(unnormalized_widths, dim=-1) - widths = min_bin_width + (1 - min_bin_width * num_bins) * widths - cumwidths = torch.cumsum(widths, dim=-1) - cumwidths = F.pad(cumwidths, pad=(1, 0), mode="constant", value=0.0) - cumwidths = (right - left) * cumwidths + left - cumwidths[..., 0] = left - cumwidths[..., -1] = right - widths = cumwidths[..., 1:] - cumwidths[..., :-1] - - derivatives = min_derivative + F.softplus(unnormalized_derivatives) - - heights = F.softmax(unnormalized_heights, dim=-1) - heights = min_bin_height + (1 - min_bin_height * num_bins) * heights - cumheights = torch.cumsum(heights, dim=-1) - cumheights = F.pad(cumheights, pad=(1, 0), mode="constant", value=0.0) - cumheights = (top - bottom) * cumheights + bottom - cumheights[..., 0] = bottom - cumheights[..., -1] = top - heights = cumheights[..., 1:] - cumheights[..., :-1] - - if inverse: - bin_idx = searchsorted(cumheights, inputs)[..., None] - else: - bin_idx = searchsorted(cumwidths, inputs)[..., None] - - input_cumwidths = cumwidths.gather(-1, bin_idx)[..., 0] - input_bin_widths = widths.gather(-1, bin_idx)[..., 0] - - input_cumheights = cumheights.gather(-1, bin_idx)[..., 0] - delta = heights / widths - input_delta = delta.gather(-1, bin_idx)[..., 0] - - input_derivatives = derivatives.gather(-1, bin_idx)[..., 0] - input_derivatives_plus_one = derivatives[..., 1:].gather(-1, bin_idx)[..., 0] - - input_heights = heights.gather(-1, bin_idx)[..., 0] - - if inverse: - a = (inputs - input_cumheights) * ( - input_derivatives + input_derivatives_plus_one - 2 * input_delta - ) + input_heights * (input_delta - input_derivatives) - b = input_heights * input_derivatives - (inputs - input_cumheights) * ( - input_derivatives + input_derivatives_plus_one - 2 * input_delta - ) - c = -input_delta * (inputs - input_cumheights) - - discriminant = b.pow(2) - 4 * a * c - assert (discriminant >= 0).all() - - root = (2 * c) / (-b - torch.sqrt(discriminant)) - outputs = root * input_bin_widths + input_cumwidths - - theta_one_minus_theta = root * (1 - root) - denominator = input_delta + ( - (input_derivatives + input_derivatives_plus_one - 2 * input_delta) - * theta_one_minus_theta - ) - derivative_numerator = input_delta.pow(2) * ( - input_derivatives_plus_one * root.pow(2) - + 2 * input_delta * theta_one_minus_theta - + input_derivatives * (1 - root).pow(2) - ) - logabsdet = torch.log(derivative_numerator) - 2 * torch.log(denominator) - - return outputs, -logabsdet - else: - theta = (inputs - input_cumwidths) / input_bin_widths - theta_one_minus_theta = theta * (1 - theta) - - numerator = input_heights * ( - input_delta * theta.pow(2) + input_derivatives * theta_one_minus_theta - ) - denominator = input_delta + ( - (input_derivatives + input_derivatives_plus_one - 2 * input_delta) - * theta_one_minus_theta - ) - outputs = input_cumheights + numerator / denominator - - derivative_numerator = input_delta.pow(2) * ( - input_derivatives_plus_one * theta.pow(2) - + 2 * input_delta * theta_one_minus_theta - + input_derivatives * (1 - theta).pow(2) - ) - logabsdet = torch.log(derivative_numerator) - 2 * torch.log(denominator) - - return outputs, logabsdet diff --git a/lib/uvr5_pack/lib_v5/dataset.py b/lib/uvr5_pack/lib_v5/dataset.py deleted file mode 100644 index cfd01a174978d97180a897e40cb59ecadec1d12e..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/dataset.py +++ /dev/null @@ -1,183 +0,0 @@ -import os -import random - -import numpy as np -import torch -import torch.utils.data -from tqdm import tqdm - -from . import spec_utils - - -class VocalRemoverValidationSet(torch.utils.data.Dataset): - def __init__(self, patch_list): - self.patch_list = patch_list - - def __len__(self): - return len(self.patch_list) - - def __getitem__(self, idx): - path = self.patch_list[idx] - data = np.load(path) - - X, y = data["X"], data["y"] - - X_mag = np.abs(X) - y_mag = np.abs(y) - - return X_mag, y_mag - - -def make_pair(mix_dir, inst_dir): - input_exts = [".wav", ".m4a", ".mp3", ".mp4", ".flac"] - - X_list = sorted( - [ - os.path.join(mix_dir, fname) - for fname in os.listdir(mix_dir) - if os.path.splitext(fname)[1] in input_exts - ] - ) - y_list = sorted( - [ - os.path.join(inst_dir, fname) - for fname in os.listdir(inst_dir) - if os.path.splitext(fname)[1] in input_exts - ] - ) - - filelist = list(zip(X_list, y_list)) - - return filelist - - -def train_val_split(dataset_dir, split_mode, val_rate, val_filelist): - if split_mode == "random": - filelist = make_pair( - os.path.join(dataset_dir, "mixtures"), - os.path.join(dataset_dir, "instruments"), - ) - - random.shuffle(filelist) - - if len(val_filelist) == 0: - val_size = int(len(filelist) * val_rate) - train_filelist = filelist[:-val_size] - val_filelist = filelist[-val_size:] - else: - train_filelist = [ - pair for pair in filelist if list(pair) not in val_filelist - ] - elif split_mode == "subdirs": - if len(val_filelist) != 0: - raise ValueError( - "The `val_filelist` option is not available in `subdirs` mode" - ) - - train_filelist = make_pair( - os.path.join(dataset_dir, "training/mixtures"), - os.path.join(dataset_dir, "training/instruments"), - ) - - val_filelist = make_pair( - os.path.join(dataset_dir, "validation/mixtures"), - os.path.join(dataset_dir, "validation/instruments"), - ) - - return train_filelist, val_filelist - - -def augment(X, y, reduction_rate, reduction_mask, mixup_rate, mixup_alpha): - perm = np.random.permutation(len(X)) - for i, idx in enumerate(tqdm(perm)): - if np.random.uniform() < reduction_rate: - y[idx] = spec_utils.reduce_vocal_aggressively( - X[idx], y[idx], reduction_mask - ) - - if np.random.uniform() < 0.5: - # swap channel - X[idx] = X[idx, ::-1] - y[idx] = y[idx, ::-1] - if np.random.uniform() < 0.02: - # mono - X[idx] = X[idx].mean(axis=0, keepdims=True) - y[idx] = y[idx].mean(axis=0, keepdims=True) - if np.random.uniform() < 0.02: - # inst - X[idx] = y[idx] - - if np.random.uniform() < mixup_rate and i < len(perm) - 1: - lam = np.random.beta(mixup_alpha, mixup_alpha) - X[idx] = lam * X[idx] + (1 - lam) * X[perm[i + 1]] - y[idx] = lam * y[idx] + (1 - lam) * y[perm[i + 1]] - - return X, y - - -def make_padding(width, cropsize, offset): - left = offset - roi_size = cropsize - left * 2 - if roi_size == 0: - roi_size = cropsize - right = roi_size - (width % roi_size) + left - - return left, right, roi_size - - -def make_training_set(filelist, cropsize, patches, sr, hop_length, n_fft, offset): - len_dataset = patches * len(filelist) - - X_dataset = np.zeros((len_dataset, 2, n_fft // 2 + 1, cropsize), dtype=np.complex64) - y_dataset = np.zeros((len_dataset, 2, n_fft // 2 + 1, cropsize), dtype=np.complex64) - - for i, (X_path, y_path) in enumerate(tqdm(filelist)): - X, y = spec_utils.cache_or_load(X_path, y_path, sr, hop_length, n_fft) - coef = np.max([np.abs(X).max(), np.abs(y).max()]) - X, y = X / coef, y / coef - - l, r, roi_size = make_padding(X.shape[2], cropsize, offset) - X_pad = np.pad(X, ((0, 0), (0, 0), (l, r)), mode="constant") - y_pad = np.pad(y, ((0, 0), (0, 0), (l, r)), mode="constant") - - starts = np.random.randint(0, X_pad.shape[2] - cropsize, patches) - ends = starts + cropsize - for j in range(patches): - idx = i * patches + j - X_dataset[idx] = X_pad[:, :, starts[j] : ends[j]] - y_dataset[idx] = y_pad[:, :, starts[j] : ends[j]] - - return X_dataset, y_dataset - - -def make_validation_set(filelist, cropsize, sr, hop_length, n_fft, offset): - patch_list = [] - patch_dir = "cs{}_sr{}_hl{}_nf{}_of{}".format( - cropsize, sr, hop_length, n_fft, offset - ) - os.makedirs(patch_dir, exist_ok=True) - - for i, (X_path, y_path) in enumerate(tqdm(filelist)): - basename = os.path.splitext(os.path.basename(X_path))[0] - - X, y = spec_utils.cache_or_load(X_path, y_path, sr, hop_length, n_fft) - coef = np.max([np.abs(X).max(), np.abs(y).max()]) - X, y = X / coef, y / coef - - l, r, roi_size = make_padding(X.shape[2], cropsize, offset) - X_pad = np.pad(X, ((0, 0), (0, 0), (l, r)), mode="constant") - y_pad = np.pad(y, ((0, 0), (0, 0), (l, r)), mode="constant") - - len_dataset = int(np.ceil(X.shape[2] / roi_size)) - for j in range(len_dataset): - outpath = os.path.join(patch_dir, "{}_p{}.npz".format(basename, j)) - start = j * roi_size - if not os.path.exists(outpath): - np.savez( - outpath, - X=X_pad[:, :, start : start + cropsize], - y=y_pad[:, :, start : start + cropsize], - ) - patch_list.append(outpath) - - return VocalRemoverValidationSet(patch_list) diff --git a/lib/uvr5_pack/lib_v5/layers.py b/lib/uvr5_pack/lib_v5/layers.py deleted file mode 100644 index b82f06bb4993cd63f076e68d7e24185269b1bc42..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/layers.py +++ /dev/null @@ -1,118 +0,0 @@ -import torch -from torch import nn -import torch.nn.functional as F - -from . import spec_utils - - -class Conv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(Conv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nout, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - bias=False, - ), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class SeperableConv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(SeperableConv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nin, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - groups=nin, - bias=False, - ), - nn.Conv2d(nin, nout, kernel_size=1, bias=False), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class Encoder(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): - super(Encoder, self).__init__() - self.conv1 = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.conv2 = Conv2DBNActiv(nout, nout, ksize, stride, pad, activ=activ) - - def __call__(self, x): - skip = self.conv1(x) - h = self.conv2(skip) - - return h, skip - - -class Decoder(nn.Module): - def __init__( - self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.ReLU, dropout=False - ): - super(Decoder, self).__init__() - self.conv = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.dropout = nn.Dropout2d(0.1) if dropout else None - - def __call__(self, x, skip=None): - x = F.interpolate(x, scale_factor=2, mode="bilinear", align_corners=True) - if skip is not None: - skip = spec_utils.crop_center(skip, x) - x = torch.cat([x, skip], dim=1) - h = self.conv(x) - - if self.dropout is not None: - h = self.dropout(h) - - return h - - -class ASPPModule(nn.Module): - def __init__(self, nin, nout, dilations=(4, 8, 16), activ=nn.ReLU): - super(ASPPModule, self).__init__() - self.conv1 = nn.Sequential( - nn.AdaptiveAvgPool2d((1, None)), - Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ), - ) - self.conv2 = Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ) - self.conv3 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[0], dilations[0], activ=activ - ) - self.conv4 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[1], dilations[1], activ=activ - ) - self.conv5 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.bottleneck = nn.Sequential( - Conv2DBNActiv(nin * 5, nout, 1, 1, 0, activ=activ), nn.Dropout2d(0.1) - ) - - def forward(self, x): - _, _, h, w = x.size() - feat1 = F.interpolate( - self.conv1(x), size=(h, w), mode="bilinear", align_corners=True - ) - feat2 = self.conv2(x) - feat3 = self.conv3(x) - feat4 = self.conv4(x) - feat5 = self.conv5(x) - out = torch.cat((feat1, feat2, feat3, feat4, feat5), dim=1) - bottle = self.bottleneck(out) - return bottle diff --git a/lib/uvr5_pack/lib_v5/layers_123812KB .py b/lib/uvr5_pack/lib_v5/layers_123812KB .py deleted file mode 100644 index b82f06bb4993cd63f076e68d7e24185269b1bc42..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/layers_123812KB .py +++ /dev/null @@ -1,118 +0,0 @@ -import torch -from torch import nn -import torch.nn.functional as F - -from . import spec_utils - - -class Conv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(Conv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nout, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - bias=False, - ), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class SeperableConv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(SeperableConv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nin, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - groups=nin, - bias=False, - ), - nn.Conv2d(nin, nout, kernel_size=1, bias=False), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class Encoder(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): - super(Encoder, self).__init__() - self.conv1 = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.conv2 = Conv2DBNActiv(nout, nout, ksize, stride, pad, activ=activ) - - def __call__(self, x): - skip = self.conv1(x) - h = self.conv2(skip) - - return h, skip - - -class Decoder(nn.Module): - def __init__( - self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.ReLU, dropout=False - ): - super(Decoder, self).__init__() - self.conv = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.dropout = nn.Dropout2d(0.1) if dropout else None - - def __call__(self, x, skip=None): - x = F.interpolate(x, scale_factor=2, mode="bilinear", align_corners=True) - if skip is not None: - skip = spec_utils.crop_center(skip, x) - x = torch.cat([x, skip], dim=1) - h = self.conv(x) - - if self.dropout is not None: - h = self.dropout(h) - - return h - - -class ASPPModule(nn.Module): - def __init__(self, nin, nout, dilations=(4, 8, 16), activ=nn.ReLU): - super(ASPPModule, self).__init__() - self.conv1 = nn.Sequential( - nn.AdaptiveAvgPool2d((1, None)), - Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ), - ) - self.conv2 = Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ) - self.conv3 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[0], dilations[0], activ=activ - ) - self.conv4 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[1], dilations[1], activ=activ - ) - self.conv5 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.bottleneck = nn.Sequential( - Conv2DBNActiv(nin * 5, nout, 1, 1, 0, activ=activ), nn.Dropout2d(0.1) - ) - - def forward(self, x): - _, _, h, w = x.size() - feat1 = F.interpolate( - self.conv1(x), size=(h, w), mode="bilinear", align_corners=True - ) - feat2 = self.conv2(x) - feat3 = self.conv3(x) - feat4 = self.conv4(x) - feat5 = self.conv5(x) - out = torch.cat((feat1, feat2, feat3, feat4, feat5), dim=1) - bottle = self.bottleneck(out) - return bottle diff --git a/lib/uvr5_pack/lib_v5/layers_123821KB.py b/lib/uvr5_pack/lib_v5/layers_123821KB.py deleted file mode 100644 index b82f06bb4993cd63f076e68d7e24185269b1bc42..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/layers_123821KB.py +++ /dev/null @@ -1,118 +0,0 @@ -import torch -from torch import nn -import torch.nn.functional as F - -from . import spec_utils - - -class Conv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(Conv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nout, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - bias=False, - ), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class SeperableConv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(SeperableConv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nin, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - groups=nin, - bias=False, - ), - nn.Conv2d(nin, nout, kernel_size=1, bias=False), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class Encoder(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): - super(Encoder, self).__init__() - self.conv1 = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.conv2 = Conv2DBNActiv(nout, nout, ksize, stride, pad, activ=activ) - - def __call__(self, x): - skip = self.conv1(x) - h = self.conv2(skip) - - return h, skip - - -class Decoder(nn.Module): - def __init__( - self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.ReLU, dropout=False - ): - super(Decoder, self).__init__() - self.conv = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.dropout = nn.Dropout2d(0.1) if dropout else None - - def __call__(self, x, skip=None): - x = F.interpolate(x, scale_factor=2, mode="bilinear", align_corners=True) - if skip is not None: - skip = spec_utils.crop_center(skip, x) - x = torch.cat([x, skip], dim=1) - h = self.conv(x) - - if self.dropout is not None: - h = self.dropout(h) - - return h - - -class ASPPModule(nn.Module): - def __init__(self, nin, nout, dilations=(4, 8, 16), activ=nn.ReLU): - super(ASPPModule, self).__init__() - self.conv1 = nn.Sequential( - nn.AdaptiveAvgPool2d((1, None)), - Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ), - ) - self.conv2 = Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ) - self.conv3 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[0], dilations[0], activ=activ - ) - self.conv4 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[1], dilations[1], activ=activ - ) - self.conv5 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.bottleneck = nn.Sequential( - Conv2DBNActiv(nin * 5, nout, 1, 1, 0, activ=activ), nn.Dropout2d(0.1) - ) - - def forward(self, x): - _, _, h, w = x.size() - feat1 = F.interpolate( - self.conv1(x), size=(h, w), mode="bilinear", align_corners=True - ) - feat2 = self.conv2(x) - feat3 = self.conv3(x) - feat4 = self.conv4(x) - feat5 = self.conv5(x) - out = torch.cat((feat1, feat2, feat3, feat4, feat5), dim=1) - bottle = self.bottleneck(out) - return bottle diff --git a/lib/uvr5_pack/lib_v5/layers_33966KB.py b/lib/uvr5_pack/lib_v5/layers_33966KB.py deleted file mode 100644 index a38b7bb3ae3136b07eadfc2db445fef4c2de186b..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/layers_33966KB.py +++ /dev/null @@ -1,126 +0,0 @@ -import torch -from torch import nn -import torch.nn.functional as F - -from . import spec_utils - - -class Conv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(Conv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nout, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - bias=False, - ), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class SeperableConv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(SeperableConv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nin, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - groups=nin, - bias=False, - ), - nn.Conv2d(nin, nout, kernel_size=1, bias=False), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class Encoder(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): - super(Encoder, self).__init__() - self.conv1 = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.conv2 = Conv2DBNActiv(nout, nout, ksize, stride, pad, activ=activ) - - def __call__(self, x): - skip = self.conv1(x) - h = self.conv2(skip) - - return h, skip - - -class Decoder(nn.Module): - def __init__( - self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.ReLU, dropout=False - ): - super(Decoder, self).__init__() - self.conv = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.dropout = nn.Dropout2d(0.1) if dropout else None - - def __call__(self, x, skip=None): - x = F.interpolate(x, scale_factor=2, mode="bilinear", align_corners=True) - if skip is not None: - skip = spec_utils.crop_center(skip, x) - x = torch.cat([x, skip], dim=1) - h = self.conv(x) - - if self.dropout is not None: - h = self.dropout(h) - - return h - - -class ASPPModule(nn.Module): - def __init__(self, nin, nout, dilations=(4, 8, 16, 32, 64), activ=nn.ReLU): - super(ASPPModule, self).__init__() - self.conv1 = nn.Sequential( - nn.AdaptiveAvgPool2d((1, None)), - Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ), - ) - self.conv2 = Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ) - self.conv3 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[0], dilations[0], activ=activ - ) - self.conv4 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[1], dilations[1], activ=activ - ) - self.conv5 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.conv6 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.conv7 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.bottleneck = nn.Sequential( - Conv2DBNActiv(nin * 7, nout, 1, 1, 0, activ=activ), nn.Dropout2d(0.1) - ) - - def forward(self, x): - _, _, h, w = x.size() - feat1 = F.interpolate( - self.conv1(x), size=(h, w), mode="bilinear", align_corners=True - ) - feat2 = self.conv2(x) - feat3 = self.conv3(x) - feat4 = self.conv4(x) - feat5 = self.conv5(x) - feat6 = self.conv6(x) - feat7 = self.conv7(x) - out = torch.cat((feat1, feat2, feat3, feat4, feat5, feat6, feat7), dim=1) - bottle = self.bottleneck(out) - return bottle diff --git a/lib/uvr5_pack/lib_v5/layers_537227KB.py b/lib/uvr5_pack/lib_v5/layers_537227KB.py deleted file mode 100644 index a38b7bb3ae3136b07eadfc2db445fef4c2de186b..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/layers_537227KB.py +++ /dev/null @@ -1,126 +0,0 @@ -import torch -from torch import nn -import torch.nn.functional as F - -from . import spec_utils - - -class Conv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(Conv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nout, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - bias=False, - ), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class SeperableConv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(SeperableConv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nin, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - groups=nin, - bias=False, - ), - nn.Conv2d(nin, nout, kernel_size=1, bias=False), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class Encoder(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): - super(Encoder, self).__init__() - self.conv1 = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.conv2 = Conv2DBNActiv(nout, nout, ksize, stride, pad, activ=activ) - - def __call__(self, x): - skip = self.conv1(x) - h = self.conv2(skip) - - return h, skip - - -class Decoder(nn.Module): - def __init__( - self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.ReLU, dropout=False - ): - super(Decoder, self).__init__() - self.conv = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.dropout = nn.Dropout2d(0.1) if dropout else None - - def __call__(self, x, skip=None): - x = F.interpolate(x, scale_factor=2, mode="bilinear", align_corners=True) - if skip is not None: - skip = spec_utils.crop_center(skip, x) - x = torch.cat([x, skip], dim=1) - h = self.conv(x) - - if self.dropout is not None: - h = self.dropout(h) - - return h - - -class ASPPModule(nn.Module): - def __init__(self, nin, nout, dilations=(4, 8, 16, 32, 64), activ=nn.ReLU): - super(ASPPModule, self).__init__() - self.conv1 = nn.Sequential( - nn.AdaptiveAvgPool2d((1, None)), - Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ), - ) - self.conv2 = Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ) - self.conv3 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[0], dilations[0], activ=activ - ) - self.conv4 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[1], dilations[1], activ=activ - ) - self.conv5 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.conv6 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.conv7 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.bottleneck = nn.Sequential( - Conv2DBNActiv(nin * 7, nout, 1, 1, 0, activ=activ), nn.Dropout2d(0.1) - ) - - def forward(self, x): - _, _, h, w = x.size() - feat1 = F.interpolate( - self.conv1(x), size=(h, w), mode="bilinear", align_corners=True - ) - feat2 = self.conv2(x) - feat3 = self.conv3(x) - feat4 = self.conv4(x) - feat5 = self.conv5(x) - feat6 = self.conv6(x) - feat7 = self.conv7(x) - out = torch.cat((feat1, feat2, feat3, feat4, feat5, feat6, feat7), dim=1) - bottle = self.bottleneck(out) - return bottle diff --git a/lib/uvr5_pack/lib_v5/layers_537238KB.py b/lib/uvr5_pack/lib_v5/layers_537238KB.py deleted file mode 100644 index a38b7bb3ae3136b07eadfc2db445fef4c2de186b..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/layers_537238KB.py +++ /dev/null @@ -1,126 +0,0 @@ -import torch -from torch import nn -import torch.nn.functional as F - -from . import spec_utils - - -class Conv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(Conv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nout, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - bias=False, - ), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class SeperableConv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(SeperableConv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nin, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - groups=nin, - bias=False, - ), - nn.Conv2d(nin, nout, kernel_size=1, bias=False), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class Encoder(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): - super(Encoder, self).__init__() - self.conv1 = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.conv2 = Conv2DBNActiv(nout, nout, ksize, stride, pad, activ=activ) - - def __call__(self, x): - skip = self.conv1(x) - h = self.conv2(skip) - - return h, skip - - -class Decoder(nn.Module): - def __init__( - self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.ReLU, dropout=False - ): - super(Decoder, self).__init__() - self.conv = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - self.dropout = nn.Dropout2d(0.1) if dropout else None - - def __call__(self, x, skip=None): - x = F.interpolate(x, scale_factor=2, mode="bilinear", align_corners=True) - if skip is not None: - skip = spec_utils.crop_center(skip, x) - x = torch.cat([x, skip], dim=1) - h = self.conv(x) - - if self.dropout is not None: - h = self.dropout(h) - - return h - - -class ASPPModule(nn.Module): - def __init__(self, nin, nout, dilations=(4, 8, 16, 32, 64), activ=nn.ReLU): - super(ASPPModule, self).__init__() - self.conv1 = nn.Sequential( - nn.AdaptiveAvgPool2d((1, None)), - Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ), - ) - self.conv2 = Conv2DBNActiv(nin, nin, 1, 1, 0, activ=activ) - self.conv3 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[0], dilations[0], activ=activ - ) - self.conv4 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[1], dilations[1], activ=activ - ) - self.conv5 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.conv6 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.conv7 = SeperableConv2DBNActiv( - nin, nin, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.bottleneck = nn.Sequential( - Conv2DBNActiv(nin * 7, nout, 1, 1, 0, activ=activ), nn.Dropout2d(0.1) - ) - - def forward(self, x): - _, _, h, w = x.size() - feat1 = F.interpolate( - self.conv1(x), size=(h, w), mode="bilinear", align_corners=True - ) - feat2 = self.conv2(x) - feat3 = self.conv3(x) - feat4 = self.conv4(x) - feat5 = self.conv5(x) - feat6 = self.conv6(x) - feat7 = self.conv7(x) - out = torch.cat((feat1, feat2, feat3, feat4, feat5, feat6, feat7), dim=1) - bottle = self.bottleneck(out) - return bottle diff --git a/lib/uvr5_pack/lib_v5/layers_new.py b/lib/uvr5_pack/lib_v5/layers_new.py deleted file mode 100644 index 0c13e60b0dd136d9115a535101c6dbb2a25c6833..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/layers_new.py +++ /dev/null @@ -1,125 +0,0 @@ -import torch -from torch import nn -import torch.nn.functional as F - -from . import spec_utils - - -class Conv2DBNActiv(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, dilation=1, activ=nn.ReLU): - super(Conv2DBNActiv, self).__init__() - self.conv = nn.Sequential( - nn.Conv2d( - nin, - nout, - kernel_size=ksize, - stride=stride, - padding=pad, - dilation=dilation, - bias=False, - ), - nn.BatchNorm2d(nout), - activ(), - ) - - def __call__(self, x): - return self.conv(x) - - -class Encoder(nn.Module): - def __init__(self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.LeakyReLU): - super(Encoder, self).__init__() - self.conv1 = Conv2DBNActiv(nin, nout, ksize, stride, pad, activ=activ) - self.conv2 = Conv2DBNActiv(nout, nout, ksize, 1, pad, activ=activ) - - def __call__(self, x): - h = self.conv1(x) - h = self.conv2(h) - - return h - - -class Decoder(nn.Module): - def __init__( - self, nin, nout, ksize=3, stride=1, pad=1, activ=nn.ReLU, dropout=False - ): - super(Decoder, self).__init__() - self.conv1 = Conv2DBNActiv(nin, nout, ksize, 1, pad, activ=activ) - # self.conv2 = Conv2DBNActiv(nout, nout, ksize, 1, pad, activ=activ) - self.dropout = nn.Dropout2d(0.1) if dropout else None - - def __call__(self, x, skip=None): - x = F.interpolate(x, scale_factor=2, mode="bilinear", align_corners=True) - - if skip is not None: - skip = spec_utils.crop_center(skip, x) - x = torch.cat([x, skip], dim=1) - - h = self.conv1(x) - # h = self.conv2(h) - - if self.dropout is not None: - h = self.dropout(h) - - return h - - -class ASPPModule(nn.Module): - def __init__(self, nin, nout, dilations=(4, 8, 12), activ=nn.ReLU, dropout=False): - super(ASPPModule, self).__init__() - self.conv1 = nn.Sequential( - nn.AdaptiveAvgPool2d((1, None)), - Conv2DBNActiv(nin, nout, 1, 1, 0, activ=activ), - ) - self.conv2 = Conv2DBNActiv(nin, nout, 1, 1, 0, activ=activ) - self.conv3 = Conv2DBNActiv( - nin, nout, 3, 1, dilations[0], dilations[0], activ=activ - ) - self.conv4 = Conv2DBNActiv( - nin, nout, 3, 1, dilations[1], dilations[1], activ=activ - ) - self.conv5 = Conv2DBNActiv( - nin, nout, 3, 1, dilations[2], dilations[2], activ=activ - ) - self.bottleneck = Conv2DBNActiv(nout * 5, nout, 1, 1, 0, activ=activ) - self.dropout = nn.Dropout2d(0.1) if dropout else None - - def forward(self, x): - _, _, h, w = x.size() - feat1 = F.interpolate( - self.conv1(x), size=(h, w), mode="bilinear", align_corners=True - ) - feat2 = self.conv2(x) - feat3 = self.conv3(x) - feat4 = self.conv4(x) - feat5 = self.conv5(x) - out = torch.cat((feat1, feat2, feat3, feat4, feat5), dim=1) - out = self.bottleneck(out) - - if self.dropout is not None: - out = self.dropout(out) - - return out - - -class LSTMModule(nn.Module): - def __init__(self, nin_conv, nin_lstm, nout_lstm): - super(LSTMModule, self).__init__() - self.conv = Conv2DBNActiv(nin_conv, 1, 1, 1, 0) - self.lstm = nn.LSTM( - input_size=nin_lstm, hidden_size=nout_lstm // 2, bidirectional=True - ) - self.dense = nn.Sequential( - nn.Linear(nout_lstm, nin_lstm), nn.BatchNorm1d(nin_lstm), nn.ReLU() - ) - - def forward(self, x): - N, _, nbins, nframes = x.size() - h = self.conv(x)[:, 0] # N, nbins, nframes - h = h.permute(2, 0, 1) # nframes, N, nbins - h, _ = self.lstm(h) - h = self.dense(h.reshape(-1, h.size()[-1])) # nframes * N, nbins - h = h.reshape(nframes, N, 1, nbins) - h = h.permute(1, 2, 3, 0) - - return h diff --git a/lib/uvr5_pack/lib_v5/model_param_init.py b/lib/uvr5_pack/lib_v5/model_param_init.py deleted file mode 100644 index b995c0bfb1194746187692e2ab1c2a6dbaaaec6c..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/model_param_init.py +++ /dev/null @@ -1,69 +0,0 @@ -import json -import os -import pathlib - -default_param = {} -default_param["bins"] = 768 -default_param["unstable_bins"] = 9 # training only -default_param["reduction_bins"] = 762 # training only -default_param["sr"] = 44100 -default_param["pre_filter_start"] = 757 -default_param["pre_filter_stop"] = 768 -default_param["band"] = {} - - -default_param["band"][1] = { - "sr": 11025, - "hl": 128, - "n_fft": 960, - "crop_start": 0, - "crop_stop": 245, - "lpf_start": 61, # inference only - "res_type": "polyphase", -} - -default_param["band"][2] = { - "sr": 44100, - "hl": 512, - "n_fft": 1536, - "crop_start": 24, - "crop_stop": 547, - "hpf_start": 81, # inference only - "res_type": "sinc_best", -} - - -def int_keys(d): - r = {} - for k, v in d: - if k.isdigit(): - k = int(k) - r[k] = v - return r - - -class ModelParameters(object): - def __init__(self, config_path=""): - if ".pth" == pathlib.Path(config_path).suffix: - import zipfile - - with zipfile.ZipFile(config_path, "r") as zip: - self.param = json.loads( - zip.read("param.json"), object_pairs_hook=int_keys - ) - elif ".json" == pathlib.Path(config_path).suffix: - with open(config_path, "r") as f: - self.param = json.loads(f.read(), object_pairs_hook=int_keys) - else: - self.param = default_param - - for k in [ - "mid_side", - "mid_side_b", - "mid_side_b2", - "stereo_w", - "stereo_n", - "reverse", - ]: - if not k in self.param: - self.param[k] = False diff --git a/lib/uvr5_pack/lib_v5/modelparams/1band_sr16000_hl512.json b/lib/uvr5_pack/lib_v5/modelparams/1band_sr16000_hl512.json deleted file mode 100644 index 05b4e26892e8aa94c6865b7a8e7008337e69c4bc..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/1band_sr16000_hl512.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "bins": 1024, - "unstable_bins": 0, - "reduction_bins": 0, - "band": { - "1": { - "sr": 16000, - "hl": 512, - "n_fft": 2048, - "crop_start": 0, - "crop_stop": 1024, - "hpf_start": -1, - "res_type": "sinc_best" - } - }, - "sr": 16000, - "pre_filter_start": 1023, - "pre_filter_stop": 1024 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/1band_sr32000_hl512.json b/lib/uvr5_pack/lib_v5/modelparams/1band_sr32000_hl512.json deleted file mode 100644 index 5c8ca23dd7ac6a8800ae5fce5d5fda718ea262ac..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/1band_sr32000_hl512.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "bins": 1024, - "unstable_bins": 0, - "reduction_bins": 0, - "band": { - "1": { - "sr": 32000, - "hl": 512, - "n_fft": 2048, - "crop_start": 0, - "crop_stop": 1024, - "hpf_start": -1, - "res_type": "kaiser_fast" - } - }, - "sr": 32000, - "pre_filter_start": 1000, - "pre_filter_stop": 1021 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/1band_sr33075_hl384.json b/lib/uvr5_pack/lib_v5/modelparams/1band_sr33075_hl384.json deleted file mode 100644 index 7e7ca5d96f65e3b8cf12c3e21a60cc63375cdced..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/1band_sr33075_hl384.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "bins": 1024, - "unstable_bins": 0, - "reduction_bins": 0, - "band": { - "1": { - "sr": 33075, - "hl": 384, - "n_fft": 2048, - "crop_start": 0, - "crop_stop": 1024, - "hpf_start": -1, - "res_type": "sinc_best" - } - }, - "sr": 33075, - "pre_filter_start": 1000, - "pre_filter_stop": 1021 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl1024.json b/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl1024.json deleted file mode 100644 index ae9b45f8e1ca4639c93ae705c92e32fac84b9be4..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl1024.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "bins": 1024, - "unstable_bins": 0, - "reduction_bins": 0, - "band": { - "1": { - "sr": 44100, - "hl": 1024, - "n_fft": 2048, - "crop_start": 0, - "crop_stop": 1024, - "hpf_start": -1, - "res_type": "sinc_best" - } - }, - "sr": 44100, - "pre_filter_start": 1023, - "pre_filter_stop": 1024 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl256.json b/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl256.json deleted file mode 100644 index 7c439e2a97257f3fd09f85d8a0362192aba7a5f2..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl256.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "bins": 256, - "unstable_bins": 0, - "reduction_bins": 0, - "band": { - "1": { - "sr": 44100, - "hl": 256, - "n_fft": 512, - "crop_start": 0, - "crop_stop": 256, - "hpf_start": -1, - "res_type": "sinc_best" - } - }, - "sr": 44100, - "pre_filter_start": 256, - "pre_filter_stop": 256 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512.json b/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512.json deleted file mode 100644 index a33e4f6d06bc576b8d14581d981f486b78c8c351..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "bins": 1024, - "unstable_bins": 0, - "reduction_bins": 0, - "band": { - "1": { - "sr": 44100, - "hl": 512, - "n_fft": 2048, - "crop_start": 0, - "crop_stop": 1024, - "hpf_start": -1, - "res_type": "sinc_best" - } - }, - "sr": 44100, - "pre_filter_start": 1023, - "pre_filter_stop": 1024 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512_cut.json b/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512_cut.json deleted file mode 100644 index 25005120395e1e8467b9cf5a377228e8725a62e6..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512_cut.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "bins": 1024, - "unstable_bins": 0, - "reduction_bins": 0, - "band": { - "1": { - "sr": 44100, - "hl": 512, - "n_fft": 2048, - "crop_start": 0, - "crop_stop": 700, - "hpf_start": -1, - "res_type": "sinc_best" - } - }, - "sr": 44100, - "pre_filter_start": 1023, - "pre_filter_stop": 700 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/2band_32000.json b/lib/uvr5_pack/lib_v5/modelparams/2band_32000.json deleted file mode 100644 index 479497105f523194f585e5fc6c4292ff2a70b8aa..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/2band_32000.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "bins": 768, - "unstable_bins": 7, - "reduction_bins": 705, - "band": { - "1": { - "sr": 6000, - "hl": 66, - "n_fft": 512, - "crop_start": 0, - "crop_stop": 240, - "lpf_start": 60, - "lpf_stop": 118, - "res_type": "sinc_fastest" - }, - "2": { - "sr": 32000, - "hl": 352, - "n_fft": 1024, - "crop_start": 22, - "crop_stop": 505, - "hpf_start": 44, - "hpf_stop": 23, - "res_type": "sinc_medium" - } - }, - "sr": 32000, - "pre_filter_start": 710, - "pre_filter_stop": 731 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/2band_44100_lofi.json b/lib/uvr5_pack/lib_v5/modelparams/2band_44100_lofi.json deleted file mode 100644 index ae2ad32fd3632fb9c3c3b6a15e99f6ffc5ff9400..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/2band_44100_lofi.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "bins": 512, - "unstable_bins": 7, - "reduction_bins": 510, - "band": { - "1": { - "sr": 11025, - "hl": 160, - "n_fft": 768, - "crop_start": 0, - "crop_stop": 192, - "lpf_start": 41, - "lpf_stop": 139, - "res_type": "sinc_fastest" - }, - "2": { - "sr": 44100, - "hl": 640, - "n_fft": 1024, - "crop_start": 10, - "crop_stop": 320, - "hpf_start": 47, - "hpf_stop": 15, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 510, - "pre_filter_stop": 512 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/2band_48000.json b/lib/uvr5_pack/lib_v5/modelparams/2band_48000.json deleted file mode 100644 index 370eab704b7f1b635ff7dbaf819101f5ddee7fa0..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/2band_48000.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "bins": 768, - "unstable_bins": 7, - "reduction_bins": 705, - "band": { - "1": { - "sr": 6000, - "hl": 66, - "n_fft": 512, - "crop_start": 0, - "crop_stop": 240, - "lpf_start": 60, - "lpf_stop": 240, - "res_type": "sinc_fastest" - }, - "2": { - "sr": 48000, - "hl": 528, - "n_fft": 1536, - "crop_start": 22, - "crop_stop": 505, - "hpf_start": 82, - "hpf_stop": 22, - "res_type": "sinc_medium" - } - }, - "sr": 48000, - "pre_filter_start": 710, - "pre_filter_stop": 731 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/3band_44100.json b/lib/uvr5_pack/lib_v5/modelparams/3band_44100.json deleted file mode 100644 index cc7a51f2b4ad0ab4909cbead55d139442ffeac2c..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/3band_44100.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "bins": 768, - "unstable_bins": 5, - "reduction_bins": 733, - "band": { - "1": { - "sr": 11025, - "hl": 128, - "n_fft": 768, - "crop_start": 0, - "crop_stop": 278, - "lpf_start": 28, - "lpf_stop": 140, - "res_type": "polyphase" - }, - "2": { - "sr": 22050, - "hl": 256, - "n_fft": 768, - "crop_start": 14, - "crop_stop": 322, - "hpf_start": 70, - "hpf_stop": 14, - "lpf_start": 283, - "lpf_stop": 314, - "res_type": "polyphase" - }, - "3": { - "sr": 44100, - "hl": 512, - "n_fft": 768, - "crop_start": 131, - "crop_stop": 313, - "hpf_start": 154, - "hpf_stop": 141, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 757, - "pre_filter_stop": 768 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/3band_44100_mid.json b/lib/uvr5_pack/lib_v5/modelparams/3band_44100_mid.json deleted file mode 100644 index 47623acf6d315779a25412ba18daedb0c3928fa9..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/3band_44100_mid.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "mid_side": true, - "bins": 768, - "unstable_bins": 5, - "reduction_bins": 733, - "band": { - "1": { - "sr": 11025, - "hl": 128, - "n_fft": 768, - "crop_start": 0, - "crop_stop": 278, - "lpf_start": 28, - "lpf_stop": 140, - "res_type": "polyphase" - }, - "2": { - "sr": 22050, - "hl": 256, - "n_fft": 768, - "crop_start": 14, - "crop_stop": 322, - "hpf_start": 70, - "hpf_stop": 14, - "lpf_start": 283, - "lpf_stop": 314, - "res_type": "polyphase" - }, - "3": { - "sr": 44100, - "hl": 512, - "n_fft": 768, - "crop_start": 131, - "crop_stop": 313, - "hpf_start": 154, - "hpf_stop": 141, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 757, - "pre_filter_stop": 768 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/3band_44100_msb2.json b/lib/uvr5_pack/lib_v5/modelparams/3band_44100_msb2.json deleted file mode 100644 index 9f9db459d1ab013cac859e0edf5c986881cfd14b..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/3band_44100_msb2.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "mid_side_b2": true, - "bins": 640, - "unstable_bins": 7, - "reduction_bins": 565, - "band": { - "1": { - "sr": 11025, - "hl": 108, - "n_fft": 1024, - "crop_start": 0, - "crop_stop": 187, - "lpf_start": 92, - "lpf_stop": 186, - "res_type": "polyphase" - }, - "2": { - "sr": 22050, - "hl": 216, - "n_fft": 768, - "crop_start": 0, - "crop_stop": 212, - "hpf_start": 68, - "hpf_stop": 34, - "lpf_start": 174, - "lpf_stop": 209, - "res_type": "polyphase" - }, - "3": { - "sr": 44100, - "hl": 432, - "n_fft": 640, - "crop_start": 66, - "crop_stop": 307, - "hpf_start": 86, - "hpf_stop": 72, - "res_type": "kaiser_fast" - } - }, - "sr": 44100, - "pre_filter_start": 639, - "pre_filter_stop": 640 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/4band_44100.json b/lib/uvr5_pack/lib_v5/modelparams/4band_44100.json deleted file mode 100644 index 68b809af4a5fb1d2580be04d70e054768c0cfe77..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/4band_44100.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "bins": 768, - "unstable_bins": 7, - "reduction_bins": 668, - "band": { - "1": { - "sr": 11025, - "hl": 128, - "n_fft": 1024, - "crop_start": 0, - "crop_stop": 186, - "lpf_start": 37, - "lpf_stop": 73, - "res_type": "polyphase" - }, - "2": { - "sr": 11025, - "hl": 128, - "n_fft": 512, - "crop_start": 4, - "crop_stop": 185, - "hpf_start": 36, - "hpf_stop": 18, - "lpf_start": 93, - "lpf_stop": 185, - "res_type": "polyphase" - }, - "3": { - "sr": 22050, - "hl": 256, - "n_fft": 512, - "crop_start": 46, - "crop_stop": 186, - "hpf_start": 93, - "hpf_stop": 46, - "lpf_start": 164, - "lpf_stop": 186, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 512, - "n_fft": 768, - "crop_start": 121, - "crop_stop": 382, - "hpf_start": 138, - "hpf_stop": 123, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 740, - "pre_filter_stop": 768 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/4band_44100_mid.json b/lib/uvr5_pack/lib_v5/modelparams/4band_44100_mid.json deleted file mode 100644 index 82d558887873e406a1038a259b91982f44bfd12a..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/4band_44100_mid.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "bins": 768, - "unstable_bins": 7, - "mid_side": true, - "reduction_bins": 668, - "band": { - "1": { - "sr": 11025, - "hl": 128, - "n_fft": 1024, - "crop_start": 0, - "crop_stop": 186, - "lpf_start": 37, - "lpf_stop": 73, - "res_type": "polyphase" - }, - "2": { - "sr": 11025, - "hl": 128, - "n_fft": 512, - "crop_start": 4, - "crop_stop": 185, - "hpf_start": 36, - "hpf_stop": 18, - "lpf_start": 93, - "lpf_stop": 185, - "res_type": "polyphase" - }, - "3": { - "sr": 22050, - "hl": 256, - "n_fft": 512, - "crop_start": 46, - "crop_stop": 186, - "hpf_start": 93, - "hpf_stop": 46, - "lpf_start": 164, - "lpf_stop": 186, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 512, - "n_fft": 768, - "crop_start": 121, - "crop_stop": 382, - "hpf_start": 138, - "hpf_stop": 123, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 740, - "pre_filter_stop": 768 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/4band_44100_msb.json b/lib/uvr5_pack/lib_v5/modelparams/4band_44100_msb.json deleted file mode 100644 index 8568d9a89d6c21ca5e640e29cc4cfa85f1c3179f..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/4band_44100_msb.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "mid_side_b": true, - "bins": 768, - "unstable_bins": 7, - "reduction_bins": 668, - "band": { - "1": { - "sr": 11025, - "hl": 128, - "n_fft": 1024, - "crop_start": 0, - "crop_stop": 186, - "lpf_start": 37, - "lpf_stop": 73, - "res_type": "polyphase" - }, - "2": { - "sr": 11025, - "hl": 128, - "n_fft": 512, - "crop_start": 4, - "crop_stop": 185, - "hpf_start": 36, - "hpf_stop": 18, - "lpf_start": 93, - "lpf_stop": 185, - "res_type": "polyphase" - }, - "3": { - "sr": 22050, - "hl": 256, - "n_fft": 512, - "crop_start": 46, - "crop_stop": 186, - "hpf_start": 93, - "hpf_stop": 46, - "lpf_start": 164, - "lpf_stop": 186, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 512, - "n_fft": 768, - "crop_start": 121, - "crop_stop": 382, - "hpf_start": 138, - "hpf_stop": 123, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 740, - "pre_filter_stop": 768 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/4band_44100_msb2.json b/lib/uvr5_pack/lib_v5/modelparams/4band_44100_msb2.json deleted file mode 100644 index 8568d9a89d6c21ca5e640e29cc4cfa85f1c3179f..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/4band_44100_msb2.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "mid_side_b": true, - "bins": 768, - "unstable_bins": 7, - "reduction_bins": 668, - "band": { - "1": { - "sr": 11025, - "hl": 128, - "n_fft": 1024, - "crop_start": 0, - "crop_stop": 186, - "lpf_start": 37, - "lpf_stop": 73, - "res_type": "polyphase" - }, - "2": { - "sr": 11025, - "hl": 128, - "n_fft": 512, - "crop_start": 4, - "crop_stop": 185, - "hpf_start": 36, - "hpf_stop": 18, - "lpf_start": 93, - "lpf_stop": 185, - "res_type": "polyphase" - }, - "3": { - "sr": 22050, - "hl": 256, - "n_fft": 512, - "crop_start": 46, - "crop_stop": 186, - "hpf_start": 93, - "hpf_stop": 46, - "lpf_start": 164, - "lpf_stop": 186, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 512, - "n_fft": 768, - "crop_start": 121, - "crop_stop": 382, - "hpf_start": 138, - "hpf_stop": 123, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 740, - "pre_filter_stop": 768 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/4band_44100_reverse.json b/lib/uvr5_pack/lib_v5/modelparams/4band_44100_reverse.json deleted file mode 100644 index 52bf7e91f2c853b7d261b237224c1f2b284cef91..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/4band_44100_reverse.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "reverse": true, - "bins": 768, - "unstable_bins": 7, - "reduction_bins": 668, - "band": { - "1": { - "sr": 11025, - "hl": 128, - "n_fft": 1024, - "crop_start": 0, - "crop_stop": 186, - "lpf_start": 37, - "lpf_stop": 73, - "res_type": "polyphase" - }, - "2": { - "sr": 11025, - "hl": 128, - "n_fft": 512, - "crop_start": 4, - "crop_stop": 185, - "hpf_start": 36, - "hpf_stop": 18, - "lpf_start": 93, - "lpf_stop": 185, - "res_type": "polyphase" - }, - "3": { - "sr": 22050, - "hl": 256, - "n_fft": 512, - "crop_start": 46, - "crop_stop": 186, - "hpf_start": 93, - "hpf_stop": 46, - "lpf_start": 164, - "lpf_stop": 186, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 512, - "n_fft": 768, - "crop_start": 121, - "crop_stop": 382, - "hpf_start": 138, - "hpf_stop": 123, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 740, - "pre_filter_stop": 768 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/4band_44100_sw.json b/lib/uvr5_pack/lib_v5/modelparams/4band_44100_sw.json deleted file mode 100644 index 0efb1bcab2f2a23a1bb9d81de6ae5bcc90b2daf8..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/4band_44100_sw.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "stereo_w": true, - "bins": 768, - "unstable_bins": 7, - "reduction_bins": 668, - "band": { - "1": { - "sr": 11025, - "hl": 128, - "n_fft": 1024, - "crop_start": 0, - "crop_stop": 186, - "lpf_start": 37, - "lpf_stop": 73, - "res_type": "polyphase" - }, - "2": { - "sr": 11025, - "hl": 128, - "n_fft": 512, - "crop_start": 4, - "crop_stop": 185, - "hpf_start": 36, - "hpf_stop": 18, - "lpf_start": 93, - "lpf_stop": 185, - "res_type": "polyphase" - }, - "3": { - "sr": 22050, - "hl": 256, - "n_fft": 512, - "crop_start": 46, - "crop_stop": 186, - "hpf_start": 93, - "hpf_stop": 46, - "lpf_start": 164, - "lpf_stop": 186, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 512, - "n_fft": 768, - "crop_start": 121, - "crop_stop": 382, - "hpf_start": 138, - "hpf_stop": 123, - "res_type": "sinc_medium" - } - }, - "sr": 44100, - "pre_filter_start": 740, - "pre_filter_stop": 768 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/4band_v2.json b/lib/uvr5_pack/lib_v5/modelparams/4band_v2.json deleted file mode 100644 index ec8f8c60236c937de4ea46352c69cff3a7776168..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/4band_v2.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "bins": 672, - "unstable_bins": 8, - "reduction_bins": 637, - "band": { - "1": { - "sr": 7350, - "hl": 80, - "n_fft": 640, - "crop_start": 0, - "crop_stop": 85, - "lpf_start": 25, - "lpf_stop": 53, - "res_type": "polyphase" - }, - "2": { - "sr": 7350, - "hl": 80, - "n_fft": 320, - "crop_start": 4, - "crop_stop": 87, - "hpf_start": 25, - "hpf_stop": 12, - "lpf_start": 31, - "lpf_stop": 62, - "res_type": "polyphase" - }, - "3": { - "sr": 14700, - "hl": 160, - "n_fft": 512, - "crop_start": 17, - "crop_stop": 216, - "hpf_start": 48, - "hpf_stop": 24, - "lpf_start": 139, - "lpf_stop": 210, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 480, - "n_fft": 960, - "crop_start": 78, - "crop_stop": 383, - "hpf_start": 130, - "hpf_stop": 86, - "res_type": "kaiser_fast" - } - }, - "sr": 44100, - "pre_filter_start": 668, - "pre_filter_stop": 672 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/4band_v2_sn.json b/lib/uvr5_pack/lib_v5/modelparams/4band_v2_sn.json deleted file mode 100644 index 3fa4298b4b5325e90e179f9d8843bf42d2f41204..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/4band_v2_sn.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "bins": 672, - "unstable_bins": 8, - "reduction_bins": 637, - "band": { - "1": { - "sr": 7350, - "hl": 80, - "n_fft": 640, - "crop_start": 0, - "crop_stop": 85, - "lpf_start": 25, - "lpf_stop": 53, - "res_type": "polyphase" - }, - "2": { - "sr": 7350, - "hl": 80, - "n_fft": 320, - "crop_start": 4, - "crop_stop": 87, - "hpf_start": 25, - "hpf_stop": 12, - "lpf_start": 31, - "lpf_stop": 62, - "res_type": "polyphase" - }, - "3": { - "sr": 14700, - "hl": 160, - "n_fft": 512, - "crop_start": 17, - "crop_stop": 216, - "hpf_start": 48, - "hpf_stop": 24, - "lpf_start": 139, - "lpf_stop": 210, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 480, - "n_fft": 960, - "crop_start": 78, - "crop_stop": 383, - "hpf_start": 130, - "hpf_stop": 86, - "convert_channels": "stereo_n", - "res_type": "kaiser_fast" - } - }, - "sr": 44100, - "pre_filter_start": 668, - "pre_filter_stop": 672 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/4band_v3.json b/lib/uvr5_pack/lib_v5/modelparams/4band_v3.json deleted file mode 100644 index f0f5d4a55adf1cc7d8cf0bb79a1c98a588c6c726..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/4band_v3.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "bins": 672, - "unstable_bins": 8, - "reduction_bins": 530, - "band": { - "1": { - "sr": 7350, - "hl": 80, - "n_fft": 640, - "crop_start": 0, - "crop_stop": 85, - "lpf_start": 25, - "lpf_stop": 53, - "res_type": "polyphase" - }, - "2": { - "sr": 7350, - "hl": 80, - "n_fft": 320, - "crop_start": 4, - "crop_stop": 87, - "hpf_start": 25, - "hpf_stop": 12, - "lpf_start": 31, - "lpf_stop": 62, - "res_type": "polyphase" - }, - "3": { - "sr": 14700, - "hl": 160, - "n_fft": 512, - "crop_start": 17, - "crop_stop": 216, - "hpf_start": 48, - "hpf_stop": 24, - "lpf_start": 139, - "lpf_stop": 210, - "res_type": "polyphase" - }, - "4": { - "sr": 44100, - "hl": 480, - "n_fft": 960, - "crop_start": 78, - "crop_stop": 383, - "hpf_start": 130, - "hpf_stop": 86, - "res_type": "kaiser_fast" - } - }, - "sr": 44100, - "pre_filter_start": 668, - "pre_filter_stop": 672 -} diff --git a/lib/uvr5_pack/lib_v5/modelparams/ensemble.json b/lib/uvr5_pack/lib_v5/modelparams/ensemble.json deleted file mode 100644 index c7bd04ba7060e9fae4f827a39624d483f9cd7317..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/modelparams/ensemble.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "mid_side_b2": true, - "bins": 1280, - "unstable_bins": 7, - "reduction_bins": 565, - "band": { - "1": { - "sr": 11025, - "hl": 108, - "n_fft": 2048, - "crop_start": 0, - "crop_stop": 374, - "lpf_start": 92, - "lpf_stop": 186, - "res_type": "polyphase" - }, - "2": { - "sr": 22050, - "hl": 216, - "n_fft": 1536, - "crop_start": 0, - "crop_stop": 424, - "hpf_start": 68, - "hpf_stop": 34, - "lpf_start": 348, - "lpf_stop": 418, - "res_type": "polyphase" - }, - "3": { - "sr": 44100, - "hl": 432, - "n_fft": 1280, - "crop_start": 132, - "crop_stop": 614, - "hpf_start": 172, - "hpf_stop": 144, - "res_type": "polyphase" - } - }, - "sr": 44100, - "pre_filter_start": 1280, - "pre_filter_stop": 1280 -} diff --git a/lib/uvr5_pack/lib_v5/nets.py b/lib/uvr5_pack/lib_v5/nets.py deleted file mode 100644 index db4c5e339f7a96cd24ed1cbbf88c4f35d5031309..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/nets.py +++ /dev/null @@ -1,123 +0,0 @@ -import torch -from torch import nn -import torch.nn.functional as F - -import layers -from . import spec_utils - - -class BaseASPPNet(nn.Module): - def __init__(self, nin, ch, dilations=(4, 8, 16)): - super(BaseASPPNet, self).__init__() - self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) - self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) - self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) - self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) - - self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) - - self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) - self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) - self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) - self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) - - def __call__(self, x): - h, e1 = self.enc1(x) - h, e2 = self.enc2(h) - h, e3 = self.enc3(h) - h, e4 = self.enc4(h) - - h = self.aspp(h) - - h = self.dec4(h, e4) - h = self.dec3(h, e3) - h = self.dec2(h, e2) - h = self.dec1(h, e1) - - return h - - -class CascadedASPPNet(nn.Module): - def __init__(self, n_fft): - super(CascadedASPPNet, self).__init__() - self.stg1_low_band_net = BaseASPPNet(2, 16) - self.stg1_high_band_net = BaseASPPNet(2, 16) - - self.stg2_bridge = layers.Conv2DBNActiv(18, 8, 1, 1, 0) - self.stg2_full_band_net = BaseASPPNet(8, 16) - - self.stg3_bridge = layers.Conv2DBNActiv(34, 16, 1, 1, 0) - self.stg3_full_band_net = BaseASPPNet(16, 32) - - self.out = nn.Conv2d(32, 2, 1, bias=False) - self.aux1_out = nn.Conv2d(16, 2, 1, bias=False) - self.aux2_out = nn.Conv2d(16, 2, 1, bias=False) - - self.max_bin = n_fft // 2 - self.output_bin = n_fft // 2 + 1 - - self.offset = 128 - - def forward(self, x, aggressiveness=None): - mix = x.detach() - x = x.clone() - - x = x[:, :, : self.max_bin] - - bandw = x.size()[2] // 2 - aux1 = torch.cat( - [ - self.stg1_low_band_net(x[:, :, :bandw]), - self.stg1_high_band_net(x[:, :, bandw:]), - ], - dim=2, - ) - - h = torch.cat([x, aux1], dim=1) - aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) - - h = torch.cat([x, aux1, aux2], dim=1) - h = self.stg3_full_band_net(self.stg3_bridge(h)) - - mask = torch.sigmoid(self.out(h)) - mask = F.pad( - input=mask, - pad=(0, 0, 0, self.output_bin - mask.size()[2]), - mode="replicate", - ) - - if self.training: - aux1 = torch.sigmoid(self.aux1_out(aux1)) - aux1 = F.pad( - input=aux1, - pad=(0, 0, 0, self.output_bin - aux1.size()[2]), - mode="replicate", - ) - aux2 = torch.sigmoid(self.aux2_out(aux2)) - aux2 = F.pad( - input=aux2, - pad=(0, 0, 0, self.output_bin - aux2.size()[2]), - mode="replicate", - ) - return mask * mix, aux1 * mix, aux2 * mix - else: - if aggressiveness: - mask[:, :, : aggressiveness["split_bin"]] = torch.pow( - mask[:, :, : aggressiveness["split_bin"]], - 1 + aggressiveness["value"] / 3, - ) - mask[:, :, aggressiveness["split_bin"] :] = torch.pow( - mask[:, :, aggressiveness["split_bin"] :], - 1 + aggressiveness["value"], - ) - - return mask * mix - - def predict(self, x_mag, aggressiveness=None): - h = self.forward(x_mag, aggressiveness) - - if self.offset > 0: - h = h[:, :, :, self.offset : -self.offset] - assert h.size()[3] > 0 - - return h diff --git a/lib/uvr5_pack/lib_v5/nets_123812KB.py b/lib/uvr5_pack/lib_v5/nets_123812KB.py deleted file mode 100644 index becbfae85683a13bbb19d3ea6c840da24e61e01e..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/nets_123812KB.py +++ /dev/null @@ -1,122 +0,0 @@ -import torch -from torch import nn -import torch.nn.functional as F - -from . import layers_123821KB as layers - - -class BaseASPPNet(nn.Module): - def __init__(self, nin, ch, dilations=(4, 8, 16)): - super(BaseASPPNet, self).__init__() - self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) - self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) - self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) - self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) - - self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) - - self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) - self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) - self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) - self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) - - def __call__(self, x): - h, e1 = self.enc1(x) - h, e2 = self.enc2(h) - h, e3 = self.enc3(h) - h, e4 = self.enc4(h) - - h = self.aspp(h) - - h = self.dec4(h, e4) - h = self.dec3(h, e3) - h = self.dec2(h, e2) - h = self.dec1(h, e1) - - return h - - -class CascadedASPPNet(nn.Module): - def __init__(self, n_fft): - super(CascadedASPPNet, self).__init__() - self.stg1_low_band_net = BaseASPPNet(2, 32) - self.stg1_high_band_net = BaseASPPNet(2, 32) - - self.stg2_bridge = layers.Conv2DBNActiv(34, 16, 1, 1, 0) - self.stg2_full_band_net = BaseASPPNet(16, 32) - - self.stg3_bridge = layers.Conv2DBNActiv(66, 32, 1, 1, 0) - self.stg3_full_band_net = BaseASPPNet(32, 64) - - self.out = nn.Conv2d(64, 2, 1, bias=False) - self.aux1_out = nn.Conv2d(32, 2, 1, bias=False) - self.aux2_out = nn.Conv2d(32, 2, 1, bias=False) - - self.max_bin = n_fft // 2 - self.output_bin = n_fft // 2 + 1 - - self.offset = 128 - - def forward(self, x, aggressiveness=None): - mix = x.detach() - x = x.clone() - - x = x[:, :, : self.max_bin] - - bandw = x.size()[2] // 2 - aux1 = torch.cat( - [ - self.stg1_low_band_net(x[:, :, :bandw]), - self.stg1_high_band_net(x[:, :, bandw:]), - ], - dim=2, - ) - - h = torch.cat([x, aux1], dim=1) - aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) - - h = torch.cat([x, aux1, aux2], dim=1) - h = self.stg3_full_band_net(self.stg3_bridge(h)) - - mask = torch.sigmoid(self.out(h)) - mask = F.pad( - input=mask, - pad=(0, 0, 0, self.output_bin - mask.size()[2]), - mode="replicate", - ) - - if self.training: - aux1 = torch.sigmoid(self.aux1_out(aux1)) - aux1 = F.pad( - input=aux1, - pad=(0, 0, 0, self.output_bin - aux1.size()[2]), - mode="replicate", - ) - aux2 = torch.sigmoid(self.aux2_out(aux2)) - aux2 = F.pad( - input=aux2, - pad=(0, 0, 0, self.output_bin - aux2.size()[2]), - mode="replicate", - ) - return mask * mix, aux1 * mix, aux2 * mix - else: - if aggressiveness: - mask[:, :, : aggressiveness["split_bin"]] = torch.pow( - mask[:, :, : aggressiveness["split_bin"]], - 1 + aggressiveness["value"] / 3, - ) - mask[:, :, aggressiveness["split_bin"] :] = torch.pow( - mask[:, :, aggressiveness["split_bin"] :], - 1 + aggressiveness["value"], - ) - - return mask * mix - - def predict(self, x_mag, aggressiveness=None): - h = self.forward(x_mag, aggressiveness) - - if self.offset > 0: - h = h[:, :, :, self.offset : -self.offset] - assert h.size()[3] > 0 - - return h diff --git a/lib/uvr5_pack/lib_v5/nets_123821KB.py b/lib/uvr5_pack/lib_v5/nets_123821KB.py deleted file mode 100644 index becbfae85683a13bbb19d3ea6c840da24e61e01e..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/nets_123821KB.py +++ /dev/null @@ -1,122 +0,0 @@ -import torch -from torch import nn -import torch.nn.functional as F - -from . import layers_123821KB as layers - - -class BaseASPPNet(nn.Module): - def __init__(self, nin, ch, dilations=(4, 8, 16)): - super(BaseASPPNet, self).__init__() - self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) - self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) - self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) - self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) - - self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) - - self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) - self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) - self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) - self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) - - def __call__(self, x): - h, e1 = self.enc1(x) - h, e2 = self.enc2(h) - h, e3 = self.enc3(h) - h, e4 = self.enc4(h) - - h = self.aspp(h) - - h = self.dec4(h, e4) - h = self.dec3(h, e3) - h = self.dec2(h, e2) - h = self.dec1(h, e1) - - return h - - -class CascadedASPPNet(nn.Module): - def __init__(self, n_fft): - super(CascadedASPPNet, self).__init__() - self.stg1_low_band_net = BaseASPPNet(2, 32) - self.stg1_high_band_net = BaseASPPNet(2, 32) - - self.stg2_bridge = layers.Conv2DBNActiv(34, 16, 1, 1, 0) - self.stg2_full_band_net = BaseASPPNet(16, 32) - - self.stg3_bridge = layers.Conv2DBNActiv(66, 32, 1, 1, 0) - self.stg3_full_band_net = BaseASPPNet(32, 64) - - self.out = nn.Conv2d(64, 2, 1, bias=False) - self.aux1_out = nn.Conv2d(32, 2, 1, bias=False) - self.aux2_out = nn.Conv2d(32, 2, 1, bias=False) - - self.max_bin = n_fft // 2 - self.output_bin = n_fft // 2 + 1 - - self.offset = 128 - - def forward(self, x, aggressiveness=None): - mix = x.detach() - x = x.clone() - - x = x[:, :, : self.max_bin] - - bandw = x.size()[2] // 2 - aux1 = torch.cat( - [ - self.stg1_low_band_net(x[:, :, :bandw]), - self.stg1_high_band_net(x[:, :, bandw:]), - ], - dim=2, - ) - - h = torch.cat([x, aux1], dim=1) - aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) - - h = torch.cat([x, aux1, aux2], dim=1) - h = self.stg3_full_band_net(self.stg3_bridge(h)) - - mask = torch.sigmoid(self.out(h)) - mask = F.pad( - input=mask, - pad=(0, 0, 0, self.output_bin - mask.size()[2]), - mode="replicate", - ) - - if self.training: - aux1 = torch.sigmoid(self.aux1_out(aux1)) - aux1 = F.pad( - input=aux1, - pad=(0, 0, 0, self.output_bin - aux1.size()[2]), - mode="replicate", - ) - aux2 = torch.sigmoid(self.aux2_out(aux2)) - aux2 = F.pad( - input=aux2, - pad=(0, 0, 0, self.output_bin - aux2.size()[2]), - mode="replicate", - ) - return mask * mix, aux1 * mix, aux2 * mix - else: - if aggressiveness: - mask[:, :, : aggressiveness["split_bin"]] = torch.pow( - mask[:, :, : aggressiveness["split_bin"]], - 1 + aggressiveness["value"] / 3, - ) - mask[:, :, aggressiveness["split_bin"] :] = torch.pow( - mask[:, :, aggressiveness["split_bin"] :], - 1 + aggressiveness["value"], - ) - - return mask * mix - - def predict(self, x_mag, aggressiveness=None): - h = self.forward(x_mag, aggressiveness) - - if self.offset > 0: - h = h[:, :, :, self.offset : -self.offset] - assert h.size()[3] > 0 - - return h diff --git a/lib/uvr5_pack/lib_v5/nets_33966KB.py b/lib/uvr5_pack/lib_v5/nets_33966KB.py deleted file mode 100644 index b8986f968dc5383e65d35aac6e4367299de3378b..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/nets_33966KB.py +++ /dev/null @@ -1,122 +0,0 @@ -import torch -from torch import nn -import torch.nn.functional as F - -from . import layers_33966KB as layers - - -class BaseASPPNet(nn.Module): - def __init__(self, nin, ch, dilations=(4, 8, 16, 32)): - super(BaseASPPNet, self).__init__() - self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) - self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) - self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) - self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) - - self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) - - self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) - self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) - self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) - self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) - - def __call__(self, x): - h, e1 = self.enc1(x) - h, e2 = self.enc2(h) - h, e3 = self.enc3(h) - h, e4 = self.enc4(h) - - h = self.aspp(h) - - h = self.dec4(h, e4) - h = self.dec3(h, e3) - h = self.dec2(h, e2) - h = self.dec1(h, e1) - - return h - - -class CascadedASPPNet(nn.Module): - def __init__(self, n_fft): - super(CascadedASPPNet, self).__init__() - self.stg1_low_band_net = BaseASPPNet(2, 16) - self.stg1_high_band_net = BaseASPPNet(2, 16) - - self.stg2_bridge = layers.Conv2DBNActiv(18, 8, 1, 1, 0) - self.stg2_full_band_net = BaseASPPNet(8, 16) - - self.stg3_bridge = layers.Conv2DBNActiv(34, 16, 1, 1, 0) - self.stg3_full_band_net = BaseASPPNet(16, 32) - - self.out = nn.Conv2d(32, 2, 1, bias=False) - self.aux1_out = nn.Conv2d(16, 2, 1, bias=False) - self.aux2_out = nn.Conv2d(16, 2, 1, bias=False) - - self.max_bin = n_fft // 2 - self.output_bin = n_fft // 2 + 1 - - self.offset = 128 - - def forward(self, x, aggressiveness=None): - mix = x.detach() - x = x.clone() - - x = x[:, :, : self.max_bin] - - bandw = x.size()[2] // 2 - aux1 = torch.cat( - [ - self.stg1_low_band_net(x[:, :, :bandw]), - self.stg1_high_band_net(x[:, :, bandw:]), - ], - dim=2, - ) - - h = torch.cat([x, aux1], dim=1) - aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) - - h = torch.cat([x, aux1, aux2], dim=1) - h = self.stg3_full_band_net(self.stg3_bridge(h)) - - mask = torch.sigmoid(self.out(h)) - mask = F.pad( - input=mask, - pad=(0, 0, 0, self.output_bin - mask.size()[2]), - mode="replicate", - ) - - if self.training: - aux1 = torch.sigmoid(self.aux1_out(aux1)) - aux1 = F.pad( - input=aux1, - pad=(0, 0, 0, self.output_bin - aux1.size()[2]), - mode="replicate", - ) - aux2 = torch.sigmoid(self.aux2_out(aux2)) - aux2 = F.pad( - input=aux2, - pad=(0, 0, 0, self.output_bin - aux2.size()[2]), - mode="replicate", - ) - return mask * mix, aux1 * mix, aux2 * mix - else: - if aggressiveness: - mask[:, :, : aggressiveness["split_bin"]] = torch.pow( - mask[:, :, : aggressiveness["split_bin"]], - 1 + aggressiveness["value"] / 3, - ) - mask[:, :, aggressiveness["split_bin"] :] = torch.pow( - mask[:, :, aggressiveness["split_bin"] :], - 1 + aggressiveness["value"], - ) - - return mask * mix - - def predict(self, x_mag, aggressiveness=None): - h = self.forward(x_mag, aggressiveness) - - if self.offset > 0: - h = h[:, :, :, self.offset : -self.offset] - assert h.size()[3] > 0 - - return h diff --git a/lib/uvr5_pack/lib_v5/nets_537227KB.py b/lib/uvr5_pack/lib_v5/nets_537227KB.py deleted file mode 100644 index a1bb530e006482704f234c2e739a695174142941..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/nets_537227KB.py +++ /dev/null @@ -1,123 +0,0 @@ -import torch -import numpy as np -from torch import nn -import torch.nn.functional as F - -from . import layers_537238KB as layers - - -class BaseASPPNet(nn.Module): - def __init__(self, nin, ch, dilations=(4, 8, 16)): - super(BaseASPPNet, self).__init__() - self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) - self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) - self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) - self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) - - self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) - - self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) - self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) - self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) - self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) - - def __call__(self, x): - h, e1 = self.enc1(x) - h, e2 = self.enc2(h) - h, e3 = self.enc3(h) - h, e4 = self.enc4(h) - - h = self.aspp(h) - - h = self.dec4(h, e4) - h = self.dec3(h, e3) - h = self.dec2(h, e2) - h = self.dec1(h, e1) - - return h - - -class CascadedASPPNet(nn.Module): - def __init__(self, n_fft): - super(CascadedASPPNet, self).__init__() - self.stg1_low_band_net = BaseASPPNet(2, 64) - self.stg1_high_band_net = BaseASPPNet(2, 64) - - self.stg2_bridge = layers.Conv2DBNActiv(66, 32, 1, 1, 0) - self.stg2_full_band_net = BaseASPPNet(32, 64) - - self.stg3_bridge = layers.Conv2DBNActiv(130, 64, 1, 1, 0) - self.stg3_full_band_net = BaseASPPNet(64, 128) - - self.out = nn.Conv2d(128, 2, 1, bias=False) - self.aux1_out = nn.Conv2d(64, 2, 1, bias=False) - self.aux2_out = nn.Conv2d(64, 2, 1, bias=False) - - self.max_bin = n_fft // 2 - self.output_bin = n_fft // 2 + 1 - - self.offset = 128 - - def forward(self, x, aggressiveness=None): - mix = x.detach() - x = x.clone() - - x = x[:, :, : self.max_bin] - - bandw = x.size()[2] // 2 - aux1 = torch.cat( - [ - self.stg1_low_band_net(x[:, :, :bandw]), - self.stg1_high_band_net(x[:, :, bandw:]), - ], - dim=2, - ) - - h = torch.cat([x, aux1], dim=1) - aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) - - h = torch.cat([x, aux1, aux2], dim=1) - h = self.stg3_full_band_net(self.stg3_bridge(h)) - - mask = torch.sigmoid(self.out(h)) - mask = F.pad( - input=mask, - pad=(0, 0, 0, self.output_bin - mask.size()[2]), - mode="replicate", - ) - - if self.training: - aux1 = torch.sigmoid(self.aux1_out(aux1)) - aux1 = F.pad( - input=aux1, - pad=(0, 0, 0, self.output_bin - aux1.size()[2]), - mode="replicate", - ) - aux2 = torch.sigmoid(self.aux2_out(aux2)) - aux2 = F.pad( - input=aux2, - pad=(0, 0, 0, self.output_bin - aux2.size()[2]), - mode="replicate", - ) - return mask * mix, aux1 * mix, aux2 * mix - else: - if aggressiveness: - mask[:, :, : aggressiveness["split_bin"]] = torch.pow( - mask[:, :, : aggressiveness["split_bin"]], - 1 + aggressiveness["value"] / 3, - ) - mask[:, :, aggressiveness["split_bin"] :] = torch.pow( - mask[:, :, aggressiveness["split_bin"] :], - 1 + aggressiveness["value"], - ) - - return mask * mix - - def predict(self, x_mag, aggressiveness=None): - h = self.forward(x_mag, aggressiveness) - - if self.offset > 0: - h = h[:, :, :, self.offset : -self.offset] - assert h.size()[3] > 0 - - return h diff --git a/lib/uvr5_pack/lib_v5/nets_537238KB.py b/lib/uvr5_pack/lib_v5/nets_537238KB.py deleted file mode 100644 index a1bb530e006482704f234c2e739a695174142941..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/nets_537238KB.py +++ /dev/null @@ -1,123 +0,0 @@ -import torch -import numpy as np -from torch import nn -import torch.nn.functional as F - -from . import layers_537238KB as layers - - -class BaseASPPNet(nn.Module): - def __init__(self, nin, ch, dilations=(4, 8, 16)): - super(BaseASPPNet, self).__init__() - self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) - self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) - self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) - self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) - - self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) - - self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) - self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) - self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) - self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) - - def __call__(self, x): - h, e1 = self.enc1(x) - h, e2 = self.enc2(h) - h, e3 = self.enc3(h) - h, e4 = self.enc4(h) - - h = self.aspp(h) - - h = self.dec4(h, e4) - h = self.dec3(h, e3) - h = self.dec2(h, e2) - h = self.dec1(h, e1) - - return h - - -class CascadedASPPNet(nn.Module): - def __init__(self, n_fft): - super(CascadedASPPNet, self).__init__() - self.stg1_low_band_net = BaseASPPNet(2, 64) - self.stg1_high_band_net = BaseASPPNet(2, 64) - - self.stg2_bridge = layers.Conv2DBNActiv(66, 32, 1, 1, 0) - self.stg2_full_band_net = BaseASPPNet(32, 64) - - self.stg3_bridge = layers.Conv2DBNActiv(130, 64, 1, 1, 0) - self.stg3_full_band_net = BaseASPPNet(64, 128) - - self.out = nn.Conv2d(128, 2, 1, bias=False) - self.aux1_out = nn.Conv2d(64, 2, 1, bias=False) - self.aux2_out = nn.Conv2d(64, 2, 1, bias=False) - - self.max_bin = n_fft // 2 - self.output_bin = n_fft // 2 + 1 - - self.offset = 128 - - def forward(self, x, aggressiveness=None): - mix = x.detach() - x = x.clone() - - x = x[:, :, : self.max_bin] - - bandw = x.size()[2] // 2 - aux1 = torch.cat( - [ - self.stg1_low_band_net(x[:, :, :bandw]), - self.stg1_high_band_net(x[:, :, bandw:]), - ], - dim=2, - ) - - h = torch.cat([x, aux1], dim=1) - aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) - - h = torch.cat([x, aux1, aux2], dim=1) - h = self.stg3_full_band_net(self.stg3_bridge(h)) - - mask = torch.sigmoid(self.out(h)) - mask = F.pad( - input=mask, - pad=(0, 0, 0, self.output_bin - mask.size()[2]), - mode="replicate", - ) - - if self.training: - aux1 = torch.sigmoid(self.aux1_out(aux1)) - aux1 = F.pad( - input=aux1, - pad=(0, 0, 0, self.output_bin - aux1.size()[2]), - mode="replicate", - ) - aux2 = torch.sigmoid(self.aux2_out(aux2)) - aux2 = F.pad( - input=aux2, - pad=(0, 0, 0, self.output_bin - aux2.size()[2]), - mode="replicate", - ) - return mask * mix, aux1 * mix, aux2 * mix - else: - if aggressiveness: - mask[:, :, : aggressiveness["split_bin"]] = torch.pow( - mask[:, :, : aggressiveness["split_bin"]], - 1 + aggressiveness["value"] / 3, - ) - mask[:, :, aggressiveness["split_bin"] :] = torch.pow( - mask[:, :, aggressiveness["split_bin"] :], - 1 + aggressiveness["value"], - ) - - return mask * mix - - def predict(self, x_mag, aggressiveness=None): - h = self.forward(x_mag, aggressiveness) - - if self.offset > 0: - h = h[:, :, :, self.offset : -self.offset] - assert h.size()[3] > 0 - - return h diff --git a/lib/uvr5_pack/lib_v5/nets_61968KB.py b/lib/uvr5_pack/lib_v5/nets_61968KB.py deleted file mode 100644 index becbfae85683a13bbb19d3ea6c840da24e61e01e..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/nets_61968KB.py +++ /dev/null @@ -1,122 +0,0 @@ -import torch -from torch import nn -import torch.nn.functional as F - -from . import layers_123821KB as layers - - -class BaseASPPNet(nn.Module): - def __init__(self, nin, ch, dilations=(4, 8, 16)): - super(BaseASPPNet, self).__init__() - self.enc1 = layers.Encoder(nin, ch, 3, 2, 1) - self.enc2 = layers.Encoder(ch, ch * 2, 3, 2, 1) - self.enc3 = layers.Encoder(ch * 2, ch * 4, 3, 2, 1) - self.enc4 = layers.Encoder(ch * 4, ch * 8, 3, 2, 1) - - self.aspp = layers.ASPPModule(ch * 8, ch * 16, dilations) - - self.dec4 = layers.Decoder(ch * (8 + 16), ch * 8, 3, 1, 1) - self.dec3 = layers.Decoder(ch * (4 + 8), ch * 4, 3, 1, 1) - self.dec2 = layers.Decoder(ch * (2 + 4), ch * 2, 3, 1, 1) - self.dec1 = layers.Decoder(ch * (1 + 2), ch, 3, 1, 1) - - def __call__(self, x): - h, e1 = self.enc1(x) - h, e2 = self.enc2(h) - h, e3 = self.enc3(h) - h, e4 = self.enc4(h) - - h = self.aspp(h) - - h = self.dec4(h, e4) - h = self.dec3(h, e3) - h = self.dec2(h, e2) - h = self.dec1(h, e1) - - return h - - -class CascadedASPPNet(nn.Module): - def __init__(self, n_fft): - super(CascadedASPPNet, self).__init__() - self.stg1_low_band_net = BaseASPPNet(2, 32) - self.stg1_high_band_net = BaseASPPNet(2, 32) - - self.stg2_bridge = layers.Conv2DBNActiv(34, 16, 1, 1, 0) - self.stg2_full_band_net = BaseASPPNet(16, 32) - - self.stg3_bridge = layers.Conv2DBNActiv(66, 32, 1, 1, 0) - self.stg3_full_band_net = BaseASPPNet(32, 64) - - self.out = nn.Conv2d(64, 2, 1, bias=False) - self.aux1_out = nn.Conv2d(32, 2, 1, bias=False) - self.aux2_out = nn.Conv2d(32, 2, 1, bias=False) - - self.max_bin = n_fft // 2 - self.output_bin = n_fft // 2 + 1 - - self.offset = 128 - - def forward(self, x, aggressiveness=None): - mix = x.detach() - x = x.clone() - - x = x[:, :, : self.max_bin] - - bandw = x.size()[2] // 2 - aux1 = torch.cat( - [ - self.stg1_low_band_net(x[:, :, :bandw]), - self.stg1_high_band_net(x[:, :, bandw:]), - ], - dim=2, - ) - - h = torch.cat([x, aux1], dim=1) - aux2 = self.stg2_full_band_net(self.stg2_bridge(h)) - - h = torch.cat([x, aux1, aux2], dim=1) - h = self.stg3_full_band_net(self.stg3_bridge(h)) - - mask = torch.sigmoid(self.out(h)) - mask = F.pad( - input=mask, - pad=(0, 0, 0, self.output_bin - mask.size()[2]), - mode="replicate", - ) - - if self.training: - aux1 = torch.sigmoid(self.aux1_out(aux1)) - aux1 = F.pad( - input=aux1, - pad=(0, 0, 0, self.output_bin - aux1.size()[2]), - mode="replicate", - ) - aux2 = torch.sigmoid(self.aux2_out(aux2)) - aux2 = F.pad( - input=aux2, - pad=(0, 0, 0, self.output_bin - aux2.size()[2]), - mode="replicate", - ) - return mask * mix, aux1 * mix, aux2 * mix - else: - if aggressiveness: - mask[:, :, : aggressiveness["split_bin"]] = torch.pow( - mask[:, :, : aggressiveness["split_bin"]], - 1 + aggressiveness["value"] / 3, - ) - mask[:, :, aggressiveness["split_bin"] :] = torch.pow( - mask[:, :, aggressiveness["split_bin"] :], - 1 + aggressiveness["value"], - ) - - return mask * mix - - def predict(self, x_mag, aggressiveness=None): - h = self.forward(x_mag, aggressiveness) - - if self.offset > 0: - h = h[:, :, :, self.offset : -self.offset] - assert h.size()[3] > 0 - - return h diff --git a/lib/uvr5_pack/lib_v5/nets_new.py b/lib/uvr5_pack/lib_v5/nets_new.py deleted file mode 100644 index bfaf72e48b31cc1130f2892b0973c9aa06f195a3..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/nets_new.py +++ /dev/null @@ -1,132 +0,0 @@ -import torch -from torch import nn -import torch.nn.functional as F -from . import layers_new - - -class BaseNet(nn.Module): - def __init__( - self, nin, nout, nin_lstm, nout_lstm, dilations=((4, 2), (8, 4), (12, 6)) - ): - super(BaseNet, self).__init__() - self.enc1 = layers_new.Conv2DBNActiv(nin, nout, 3, 1, 1) - self.enc2 = layers_new.Encoder(nout, nout * 2, 3, 2, 1) - self.enc3 = layers_new.Encoder(nout * 2, nout * 4, 3, 2, 1) - self.enc4 = layers_new.Encoder(nout * 4, nout * 6, 3, 2, 1) - self.enc5 = layers_new.Encoder(nout * 6, nout * 8, 3, 2, 1) - - self.aspp = layers_new.ASPPModule(nout * 8, nout * 8, dilations, dropout=True) - - self.dec4 = layers_new.Decoder(nout * (6 + 8), nout * 6, 3, 1, 1) - self.dec3 = layers_new.Decoder(nout * (4 + 6), nout * 4, 3, 1, 1) - self.dec2 = layers_new.Decoder(nout * (2 + 4), nout * 2, 3, 1, 1) - self.lstm_dec2 = layers_new.LSTMModule(nout * 2, nin_lstm, nout_lstm) - self.dec1 = layers_new.Decoder(nout * (1 + 2) + 1, nout * 1, 3, 1, 1) - - def __call__(self, x): - e1 = self.enc1(x) - e2 = self.enc2(e1) - e3 = self.enc3(e2) - e4 = self.enc4(e3) - e5 = self.enc5(e4) - - h = self.aspp(e5) - - h = self.dec4(h, e4) - h = self.dec3(h, e3) - h = self.dec2(h, e2) - h = torch.cat([h, self.lstm_dec2(h)], dim=1) - h = self.dec1(h, e1) - - return h - - -class CascadedNet(nn.Module): - def __init__(self, n_fft, nout=32, nout_lstm=128): - super(CascadedNet, self).__init__() - - self.max_bin = n_fft // 2 - self.output_bin = n_fft // 2 + 1 - self.nin_lstm = self.max_bin // 2 - self.offset = 64 - - self.stg1_low_band_net = nn.Sequential( - BaseNet(2, nout // 2, self.nin_lstm // 2, nout_lstm), - layers_new.Conv2DBNActiv(nout // 2, nout // 4, 1, 1, 0), - ) - - self.stg1_high_band_net = BaseNet( - 2, nout // 4, self.nin_lstm // 2, nout_lstm // 2 - ) - - self.stg2_low_band_net = nn.Sequential( - BaseNet(nout // 4 + 2, nout, self.nin_lstm // 2, nout_lstm), - layers_new.Conv2DBNActiv(nout, nout // 2, 1, 1, 0), - ) - self.stg2_high_band_net = BaseNet( - nout // 4 + 2, nout // 2, self.nin_lstm // 2, nout_lstm // 2 - ) - - self.stg3_full_band_net = BaseNet( - 3 * nout // 4 + 2, nout, self.nin_lstm, nout_lstm - ) - - self.out = nn.Conv2d(nout, 2, 1, bias=False) - self.aux_out = nn.Conv2d(3 * nout // 4, 2, 1, bias=False) - - def forward(self, x): - x = x[:, :, : self.max_bin] - - bandw = x.size()[2] // 2 - l1_in = x[:, :, :bandw] - h1_in = x[:, :, bandw:] - l1 = self.stg1_low_band_net(l1_in) - h1 = self.stg1_high_band_net(h1_in) - aux1 = torch.cat([l1, h1], dim=2) - - l2_in = torch.cat([l1_in, l1], dim=1) - h2_in = torch.cat([h1_in, h1], dim=1) - l2 = self.stg2_low_band_net(l2_in) - h2 = self.stg2_high_band_net(h2_in) - aux2 = torch.cat([l2, h2], dim=2) - - f3_in = torch.cat([x, aux1, aux2], dim=1) - f3 = self.stg3_full_band_net(f3_in) - - mask = torch.sigmoid(self.out(f3)) - mask = F.pad( - input=mask, - pad=(0, 0, 0, self.output_bin - mask.size()[2]), - mode="replicate", - ) - - if self.training: - aux = torch.cat([aux1, aux2], dim=1) - aux = torch.sigmoid(self.aux_out(aux)) - aux = F.pad( - input=aux, - pad=(0, 0, 0, self.output_bin - aux.size()[2]), - mode="replicate", - ) - return mask, aux - else: - return mask - - def predict_mask(self, x): - mask = self.forward(x) - - if self.offset > 0: - mask = mask[:, :, :, self.offset : -self.offset] - assert mask.size()[3] > 0 - - return mask - - def predict(self, x, aggressiveness=None): - mask = self.forward(x) - pred_mag = x * mask - - if self.offset > 0: - pred_mag = pred_mag[:, :, :, self.offset : -self.offset] - assert pred_mag.size()[3] > 0 - - return pred_mag diff --git a/lib/uvr5_pack/lib_v5/spec_utils.py b/lib/uvr5_pack/lib_v5/spec_utils.py deleted file mode 100644 index a3fd46d333da7becc7f09f42c084ac7cde661035..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/lib_v5/spec_utils.py +++ /dev/null @@ -1,667 +0,0 @@ -import os, librosa -import numpy as np -import soundfile as sf -from tqdm import tqdm -import json, math, hashlib - - -def crop_center(h1, h2): - h1_shape = h1.size() - h2_shape = h2.size() - - if h1_shape[3] == h2_shape[3]: - return h1 - elif h1_shape[3] < h2_shape[3]: - raise ValueError("h1_shape[3] must be greater than h2_shape[3]") - - # s_freq = (h2_shape[2] - h1_shape[2]) // 2 - # e_freq = s_freq + h1_shape[2] - s_time = (h1_shape[3] - h2_shape[3]) // 2 - e_time = s_time + h2_shape[3] - h1 = h1[:, :, :, s_time:e_time] - - return h1 - - -def wave_to_spectrogram( - wave, hop_length, n_fft, mid_side=False, mid_side_b2=False, reverse=False -): - if reverse: - wave_left = np.flip(np.asfortranarray(wave[0])) - wave_right = np.flip(np.asfortranarray(wave[1])) - elif mid_side: - wave_left = np.asfortranarray(np.add(wave[0], wave[1]) / 2) - wave_right = np.asfortranarray(np.subtract(wave[0], wave[1])) - elif mid_side_b2: - wave_left = np.asfortranarray(np.add(wave[1], wave[0] * 0.5)) - wave_right = np.asfortranarray(np.subtract(wave[0], wave[1] * 0.5)) - else: - wave_left = np.asfortranarray(wave[0]) - wave_right = np.asfortranarray(wave[1]) - - spec_left = librosa.stft(wave_left, n_fft, hop_length=hop_length) - spec_right = librosa.stft(wave_right, n_fft, hop_length=hop_length) - - spec = np.asfortranarray([spec_left, spec_right]) - - return spec - - -def wave_to_spectrogram_mt( - wave, hop_length, n_fft, mid_side=False, mid_side_b2=False, reverse=False -): - import threading - - if reverse: - wave_left = np.flip(np.asfortranarray(wave[0])) - wave_right = np.flip(np.asfortranarray(wave[1])) - elif mid_side: - wave_left = np.asfortranarray(np.add(wave[0], wave[1]) / 2) - wave_right = np.asfortranarray(np.subtract(wave[0], wave[1])) - elif mid_side_b2: - wave_left = np.asfortranarray(np.add(wave[1], wave[0] * 0.5)) - wave_right = np.asfortranarray(np.subtract(wave[0], wave[1] * 0.5)) - else: - wave_left = np.asfortranarray(wave[0]) - wave_right = np.asfortranarray(wave[1]) - - def run_thread(**kwargs): - global spec_left - spec_left = librosa.stft(**kwargs) - - thread = threading.Thread( - target=run_thread, - kwargs={"y": wave_left, "n_fft": n_fft, "hop_length": hop_length}, - ) - thread.start() - spec_right = librosa.stft(wave_right, n_fft, hop_length=hop_length) - thread.join() - - spec = np.asfortranarray([spec_left, spec_right]) - - return spec - - -def combine_spectrograms(specs, mp): - l = min([specs[i].shape[2] for i in specs]) - spec_c = np.zeros(shape=(2, mp.param["bins"] + 1, l), dtype=np.complex64) - offset = 0 - bands_n = len(mp.param["band"]) - - for d in range(1, bands_n + 1): - h = mp.param["band"][d]["crop_stop"] - mp.param["band"][d]["crop_start"] - spec_c[:, offset : offset + h, :l] = specs[d][ - :, mp.param["band"][d]["crop_start"] : mp.param["band"][d]["crop_stop"], :l - ] - offset += h - - if offset > mp.param["bins"]: - raise ValueError("Too much bins") - - # lowpass fiter - if ( - mp.param["pre_filter_start"] > 0 - ): # and mp.param['band'][bands_n]['res_type'] in ['scipy', 'polyphase']: - if bands_n == 1: - spec_c = fft_lp_filter( - spec_c, mp.param["pre_filter_start"], mp.param["pre_filter_stop"] - ) - else: - gp = 1 - for b in range( - mp.param["pre_filter_start"] + 1, mp.param["pre_filter_stop"] - ): - g = math.pow( - 10, -(b - mp.param["pre_filter_start"]) * (3.5 - gp) / 20.0 - ) - gp = g - spec_c[:, b, :] *= g - - return np.asfortranarray(spec_c) - - -def spectrogram_to_image(spec, mode="magnitude"): - if mode == "magnitude": - if np.iscomplexobj(spec): - y = np.abs(spec) - else: - y = spec - y = np.log10(y**2 + 1e-8) - elif mode == "phase": - if np.iscomplexobj(spec): - y = np.angle(spec) - else: - y = spec - - y -= y.min() - y *= 255 / y.max() - img = np.uint8(y) - - if y.ndim == 3: - img = img.transpose(1, 2, 0) - img = np.concatenate([np.max(img, axis=2, keepdims=True), img], axis=2) - - return img - - -def reduce_vocal_aggressively(X, y, softmask): - v = X - y - y_mag_tmp = np.abs(y) - v_mag_tmp = np.abs(v) - - v_mask = v_mag_tmp > y_mag_tmp - y_mag = np.clip(y_mag_tmp - v_mag_tmp * v_mask * softmask, 0, np.inf) - - return y_mag * np.exp(1.0j * np.angle(y)) - - -def mask_silence(mag, ref, thres=0.2, min_range=64, fade_size=32): - if min_range < fade_size * 2: - raise ValueError("min_range must be >= fade_area * 2") - - mag = mag.copy() - - idx = np.where(ref.mean(axis=(0, 1)) < thres)[0] - starts = np.insert(idx[np.where(np.diff(idx) != 1)[0] + 1], 0, idx[0]) - ends = np.append(idx[np.where(np.diff(idx) != 1)[0]], idx[-1]) - uninformative = np.where(ends - starts > min_range)[0] - if len(uninformative) > 0: - starts = starts[uninformative] - ends = ends[uninformative] - old_e = None - for s, e in zip(starts, ends): - if old_e is not None and s - old_e < fade_size: - s = old_e - fade_size * 2 - - if s != 0: - weight = np.linspace(0, 1, fade_size) - mag[:, :, s : s + fade_size] += weight * ref[:, :, s : s + fade_size] - else: - s -= fade_size - - if e != mag.shape[2]: - weight = np.linspace(1, 0, fade_size) - mag[:, :, e - fade_size : e] += weight * ref[:, :, e - fade_size : e] - else: - e += fade_size - - mag[:, :, s + fade_size : e - fade_size] += ref[ - :, :, s + fade_size : e - fade_size - ] - old_e = e - - return mag - - -def align_wave_head_and_tail(a, b): - l = min([a[0].size, b[0].size]) - - return a[:l, :l], b[:l, :l] - - -def cache_or_load(mix_path, inst_path, mp): - mix_basename = os.path.splitext(os.path.basename(mix_path))[0] - inst_basename = os.path.splitext(os.path.basename(inst_path))[0] - - cache_dir = "mph{}".format( - hashlib.sha1(json.dumps(mp.param, sort_keys=True).encode("utf-8")).hexdigest() - ) - mix_cache_dir = os.path.join("cache", cache_dir) - inst_cache_dir = os.path.join("cache", cache_dir) - - os.makedirs(mix_cache_dir, exist_ok=True) - os.makedirs(inst_cache_dir, exist_ok=True) - - mix_cache_path = os.path.join(mix_cache_dir, mix_basename + ".npy") - inst_cache_path = os.path.join(inst_cache_dir, inst_basename + ".npy") - - if os.path.exists(mix_cache_path) and os.path.exists(inst_cache_path): - X_spec_m = np.load(mix_cache_path) - y_spec_m = np.load(inst_cache_path) - else: - X_wave, y_wave, X_spec_s, y_spec_s = {}, {}, {}, {} - - for d in range(len(mp.param["band"]), 0, -1): - bp = mp.param["band"][d] - - if d == len(mp.param["band"]): # high-end band - X_wave[d], _ = librosa.load( - mix_path, bp["sr"], False, dtype=np.float32, res_type=bp["res_type"] - ) - y_wave[d], _ = librosa.load( - inst_path, - bp["sr"], - False, - dtype=np.float32, - res_type=bp["res_type"], - ) - else: # lower bands - X_wave[d] = librosa.resample( - X_wave[d + 1], - mp.param["band"][d + 1]["sr"], - bp["sr"], - res_type=bp["res_type"], - ) - y_wave[d] = librosa.resample( - y_wave[d + 1], - mp.param["band"][d + 1]["sr"], - bp["sr"], - res_type=bp["res_type"], - ) - - X_wave[d], y_wave[d] = align_wave_head_and_tail(X_wave[d], y_wave[d]) - - X_spec_s[d] = wave_to_spectrogram( - X_wave[d], - bp["hl"], - bp["n_fft"], - mp.param["mid_side"], - mp.param["mid_side_b2"], - mp.param["reverse"], - ) - y_spec_s[d] = wave_to_spectrogram( - y_wave[d], - bp["hl"], - bp["n_fft"], - mp.param["mid_side"], - mp.param["mid_side_b2"], - mp.param["reverse"], - ) - - del X_wave, y_wave - - X_spec_m = combine_spectrograms(X_spec_s, mp) - y_spec_m = combine_spectrograms(y_spec_s, mp) - - if X_spec_m.shape != y_spec_m.shape: - raise ValueError("The combined spectrograms are different: " + mix_path) - - _, ext = os.path.splitext(mix_path) - - np.save(mix_cache_path, X_spec_m) - np.save(inst_cache_path, y_spec_m) - - return X_spec_m, y_spec_m - - -def spectrogram_to_wave(spec, hop_length, mid_side, mid_side_b2, reverse): - spec_left = np.asfortranarray(spec[0]) - spec_right = np.asfortranarray(spec[1]) - - wave_left = librosa.istft(spec_left, hop_length=hop_length) - wave_right = librosa.istft(spec_right, hop_length=hop_length) - - if reverse: - return np.asfortranarray([np.flip(wave_left), np.flip(wave_right)]) - elif mid_side: - return np.asfortranarray( - [np.add(wave_left, wave_right / 2), np.subtract(wave_left, wave_right / 2)] - ) - elif mid_side_b2: - return np.asfortranarray( - [ - np.add(wave_right / 1.25, 0.4 * wave_left), - np.subtract(wave_left / 1.25, 0.4 * wave_right), - ] - ) - else: - return np.asfortranarray([wave_left, wave_right]) - - -def spectrogram_to_wave_mt(spec, hop_length, mid_side, reverse, mid_side_b2): - import threading - - spec_left = np.asfortranarray(spec[0]) - spec_right = np.asfortranarray(spec[1]) - - def run_thread(**kwargs): - global wave_left - wave_left = librosa.istft(**kwargs) - - thread = threading.Thread( - target=run_thread, kwargs={"stft_matrix": spec_left, "hop_length": hop_length} - ) - thread.start() - wave_right = librosa.istft(spec_right, hop_length=hop_length) - thread.join() - - if reverse: - return np.asfortranarray([np.flip(wave_left), np.flip(wave_right)]) - elif mid_side: - return np.asfortranarray( - [np.add(wave_left, wave_right / 2), np.subtract(wave_left, wave_right / 2)] - ) - elif mid_side_b2: - return np.asfortranarray( - [ - np.add(wave_right / 1.25, 0.4 * wave_left), - np.subtract(wave_left / 1.25, 0.4 * wave_right), - ] - ) - else: - return np.asfortranarray([wave_left, wave_right]) - - -def cmb_spectrogram_to_wave(spec_m, mp, extra_bins_h=None, extra_bins=None): - wave_band = {} - bands_n = len(mp.param["band"]) - offset = 0 - - for d in range(1, bands_n + 1): - bp = mp.param["band"][d] - spec_s = np.ndarray( - shape=(2, bp["n_fft"] // 2 + 1, spec_m.shape[2]), dtype=complex - ) - h = bp["crop_stop"] - bp["crop_start"] - spec_s[:, bp["crop_start"] : bp["crop_stop"], :] = spec_m[ - :, offset : offset + h, : - ] - - offset += h - if d == bands_n: # higher - if extra_bins_h: # if --high_end_process bypass - max_bin = bp["n_fft"] // 2 - spec_s[:, max_bin - extra_bins_h : max_bin, :] = extra_bins[ - :, :extra_bins_h, : - ] - if bp["hpf_start"] > 0: - spec_s = fft_hp_filter(spec_s, bp["hpf_start"], bp["hpf_stop"] - 1) - if bands_n == 1: - wave = spectrogram_to_wave( - spec_s, - bp["hl"], - mp.param["mid_side"], - mp.param["mid_side_b2"], - mp.param["reverse"], - ) - else: - wave = np.add( - wave, - spectrogram_to_wave( - spec_s, - bp["hl"], - mp.param["mid_side"], - mp.param["mid_side_b2"], - mp.param["reverse"], - ), - ) - else: - sr = mp.param["band"][d + 1]["sr"] - if d == 1: # lower - spec_s = fft_lp_filter(spec_s, bp["lpf_start"], bp["lpf_stop"]) - wave = librosa.resample( - spectrogram_to_wave( - spec_s, - bp["hl"], - mp.param["mid_side"], - mp.param["mid_side_b2"], - mp.param["reverse"], - ), - bp["sr"], - sr, - res_type="sinc_fastest", - ) - else: # mid - spec_s = fft_hp_filter(spec_s, bp["hpf_start"], bp["hpf_stop"] - 1) - spec_s = fft_lp_filter(spec_s, bp["lpf_start"], bp["lpf_stop"]) - wave2 = np.add( - wave, - spectrogram_to_wave( - spec_s, - bp["hl"], - mp.param["mid_side"], - mp.param["mid_side_b2"], - mp.param["reverse"], - ), - ) - # wave = librosa.core.resample(wave2, bp['sr'], sr, res_type="sinc_fastest") - wave = librosa.core.resample(wave2, bp["sr"], sr, res_type="scipy") - - return wave.T - - -def fft_lp_filter(spec, bin_start, bin_stop): - g = 1.0 - for b in range(bin_start, bin_stop): - g -= 1 / (bin_stop - bin_start) - spec[:, b, :] = g * spec[:, b, :] - - spec[:, bin_stop:, :] *= 0 - - return spec - - -def fft_hp_filter(spec, bin_start, bin_stop): - g = 1.0 - for b in range(bin_start, bin_stop, -1): - g -= 1 / (bin_start - bin_stop) - spec[:, b, :] = g * spec[:, b, :] - - spec[:, 0 : bin_stop + 1, :] *= 0 - - return spec - - -def mirroring(a, spec_m, input_high_end, mp): - if "mirroring" == a: - mirror = np.flip( - np.abs( - spec_m[ - :, - mp.param["pre_filter_start"] - - 10 - - input_high_end.shape[1] : mp.param["pre_filter_start"] - - 10, - :, - ] - ), - 1, - ) - mirror = mirror * np.exp(1.0j * np.angle(input_high_end)) - - return np.where( - np.abs(input_high_end) <= np.abs(mirror), input_high_end, mirror - ) - - if "mirroring2" == a: - mirror = np.flip( - np.abs( - spec_m[ - :, - mp.param["pre_filter_start"] - - 10 - - input_high_end.shape[1] : mp.param["pre_filter_start"] - - 10, - :, - ] - ), - 1, - ) - mi = np.multiply(mirror, input_high_end * 1.7) - - return np.where(np.abs(input_high_end) <= np.abs(mi), input_high_end, mi) - - -def ensembling(a, specs): - for i in range(1, len(specs)): - if i == 1: - spec = specs[0] - - ln = min([spec.shape[2], specs[i].shape[2]]) - spec = spec[:, :, :ln] - specs[i] = specs[i][:, :, :ln] - - if "min_mag" == a: - spec = np.where(np.abs(specs[i]) <= np.abs(spec), specs[i], spec) - if "max_mag" == a: - spec = np.where(np.abs(specs[i]) >= np.abs(spec), specs[i], spec) - - return spec - - -def stft(wave, nfft, hl): - wave_left = np.asfortranarray(wave[0]) - wave_right = np.asfortranarray(wave[1]) - spec_left = librosa.stft(wave_left, nfft, hop_length=hl) - spec_right = librosa.stft(wave_right, nfft, hop_length=hl) - spec = np.asfortranarray([spec_left, spec_right]) - - return spec - - -def istft(spec, hl): - spec_left = np.asfortranarray(spec[0]) - spec_right = np.asfortranarray(spec[1]) - - wave_left = librosa.istft(spec_left, hop_length=hl) - wave_right = librosa.istft(spec_right, hop_length=hl) - wave = np.asfortranarray([wave_left, wave_right]) - - -if __name__ == "__main__": - import cv2 - import sys - import time - import argparse - from model_param_init import ModelParameters - - p = argparse.ArgumentParser() - p.add_argument( - "--algorithm", - "-a", - type=str, - choices=["invert", "invert_p", "min_mag", "max_mag", "deep", "align"], - default="min_mag", - ) - p.add_argument( - "--model_params", - "-m", - type=str, - default=os.path.join("modelparams", "1band_sr44100_hl512.json"), - ) - p.add_argument("--output_name", "-o", type=str, default="output") - p.add_argument("--vocals_only", "-v", action="store_true") - p.add_argument("input", nargs="+") - args = p.parse_args() - - start_time = time.time() - - if args.algorithm.startswith("invert") and len(args.input) != 2: - raise ValueError("There should be two input files.") - - if not args.algorithm.startswith("invert") and len(args.input) < 2: - raise ValueError("There must be at least two input files.") - - wave, specs = {}, {} - mp = ModelParameters(args.model_params) - - for i in range(len(args.input)): - spec = {} - - for d in range(len(mp.param["band"]), 0, -1): - bp = mp.param["band"][d] - - if d == len(mp.param["band"]): # high-end band - wave[d], _ = librosa.load( - args.input[i], - bp["sr"], - False, - dtype=np.float32, - res_type=bp["res_type"], - ) - - if len(wave[d].shape) == 1: # mono to stereo - wave[d] = np.array([wave[d], wave[d]]) - else: # lower bands - wave[d] = librosa.resample( - wave[d + 1], - mp.param["band"][d + 1]["sr"], - bp["sr"], - res_type=bp["res_type"], - ) - - spec[d] = wave_to_spectrogram( - wave[d], - bp["hl"], - bp["n_fft"], - mp.param["mid_side"], - mp.param["mid_side_b2"], - mp.param["reverse"], - ) - - specs[i] = combine_spectrograms(spec, mp) - - del wave - - if args.algorithm == "deep": - d_spec = np.where(np.abs(specs[0]) <= np.abs(spec[1]), specs[0], spec[1]) - v_spec = d_spec - specs[1] - sf.write( - os.path.join("{}.wav".format(args.output_name)), - cmb_spectrogram_to_wave(v_spec, mp), - mp.param["sr"], - ) - - if args.algorithm.startswith("invert"): - ln = min([specs[0].shape[2], specs[1].shape[2]]) - specs[0] = specs[0][:, :, :ln] - specs[1] = specs[1][:, :, :ln] - - if "invert_p" == args.algorithm: - X_mag = np.abs(specs[0]) - y_mag = np.abs(specs[1]) - max_mag = np.where(X_mag >= y_mag, X_mag, y_mag) - v_spec = specs[1] - max_mag * np.exp(1.0j * np.angle(specs[0])) - else: - specs[1] = reduce_vocal_aggressively(specs[0], specs[1], 0.2) - v_spec = specs[0] - specs[1] - - if not args.vocals_only: - X_mag = np.abs(specs[0]) - y_mag = np.abs(specs[1]) - v_mag = np.abs(v_spec) - - X_image = spectrogram_to_image(X_mag) - y_image = spectrogram_to_image(y_mag) - v_image = spectrogram_to_image(v_mag) - - cv2.imwrite("{}_X.png".format(args.output_name), X_image) - cv2.imwrite("{}_y.png".format(args.output_name), y_image) - cv2.imwrite("{}_v.png".format(args.output_name), v_image) - - sf.write( - "{}_X.wav".format(args.output_name), - cmb_spectrogram_to_wave(specs[0], mp), - mp.param["sr"], - ) - sf.write( - "{}_y.wav".format(args.output_name), - cmb_spectrogram_to_wave(specs[1], mp), - mp.param["sr"], - ) - - sf.write( - "{}_v.wav".format(args.output_name), - cmb_spectrogram_to_wave(v_spec, mp), - mp.param["sr"], - ) - else: - if not args.algorithm == "deep": - sf.write( - os.path.join("ensembled", "{}.wav".format(args.output_name)), - cmb_spectrogram_to_wave(ensembling(args.algorithm, specs), mp), - mp.param["sr"], - ) - - if args.algorithm == "align": - trackalignment = [ - { - "file1": '"{}"'.format(args.input[0]), - "file2": '"{}"'.format(args.input[1]), - } - ] - - for i, e in tqdm(enumerate(trackalignment), desc="Performing Alignment..."): - os.system(f"python lib/align_tracks.py {e['file1']} {e['file2']}") - - # print('Total time: {0:.{1}f}s'.format(time.time() - start_time, 1)) diff --git a/lib/uvr5_pack/name_params.json b/lib/uvr5_pack/name_params.json deleted file mode 100644 index f48b0b3f18272615dee33dd5407c126c897c01fc..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/name_params.json +++ /dev/null @@ -1,262 +0,0 @@ -{ - "equivalent": [ - { - "model_hash_name": [ - { - "hash_name": "47939caf0cfe52a0e81442b85b971dfd", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_44100.json", - "param_name": "4band_44100" - }, - { - "hash_name": "4e4ecb9764c50a8c414fee6e10395bbe", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_v2.json", - "param_name": "4band_v2" - }, - { - "hash_name": "ca106edd563e034bde0bdec4bb7a4b36", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_v2.json", - "param_name": "4band_v2" - }, - { - "hash_name": "e60a1e84803ce4efc0a6551206cc4b71", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_44100.json", - "param_name": "4band_44100" - }, - { - "hash_name": "a82f14e75892e55e994376edbf0c8435", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_44100.json", - "param_name": "4band_44100" - }, - { - "hash_name": "6dd9eaa6f0420af9f1d403aaafa4cc06", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_v2_sn.json", - "param_name": "4band_v2_sn" - }, - { - "hash_name": "08611fb99bd59eaa79ad27c58d137727", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_v2_sn.json", - "param_name": "4band_v2_sn" - }, - { - "hash_name": "5c7bbca45a187e81abbbd351606164e5", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/3band_44100_msb2.json", - "param_name": "3band_44100_msb2" - }, - { - "hash_name": "d6b2cb685a058a091e5e7098192d3233", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/3band_44100_msb2.json", - "param_name": "3band_44100_msb2" - }, - { - "hash_name": "c1b9f38170a7c90e96f027992eb7c62b", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_44100.json", - "param_name": "4band_44100" - }, - { - "hash_name": "c3448ec923fa0edf3d03a19e633faa53", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_44100.json", - "param_name": "4band_44100" - }, - { - "hash_name": "68aa2c8093d0080704b200d140f59e54", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/3band_44100.json", - "param_name": "3band_44100" - }, - { - "hash_name": "fdc83be5b798e4bd29fe00fe6600e147", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/3band_44100_mid.json", - "param_name": "3band_44100_mid.json" - }, - { - "hash_name": "2ce34bc92fd57f55db16b7a4def3d745", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/3band_44100_mid.json", - "param_name": "3band_44100_mid.json" - }, - { - "hash_name": "52fdca89576f06cf4340b74a4730ee5f", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_44100.json", - "param_name": "4band_44100.json" - }, - { - "hash_name": "41191165b05d38fc77f072fa9e8e8a30", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_44100.json", - "param_name": "4band_44100.json" - }, - { - "hash_name": "89e83b511ad474592689e562d5b1f80e", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/2band_32000.json", - "param_name": "2band_32000.json" - }, - { - "hash_name": "0b954da81d453b716b114d6d7c95177f", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/2band_32000.json", - "param_name": "2band_32000.json" - } - ], - "v4 Models": [ - { - "hash_name": "6a00461c51c2920fd68937d4609ed6c8", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/1band_sr16000_hl512.json", - "param_name": "1band_sr16000_hl512" - }, - { - "hash_name": "0ab504864d20f1bd378fe9c81ef37140", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/1band_sr32000_hl512.json", - "param_name": "1band_sr32000_hl512" - }, - { - "hash_name": "7dd21065bf91c10f7fccb57d7d83b07f", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/1band_sr32000_hl512.json", - "param_name": "1band_sr32000_hl512" - }, - { - "hash_name": "80ab74d65e515caa3622728d2de07d23", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/1band_sr32000_hl512.json", - "param_name": "1band_sr32000_hl512" - }, - { - "hash_name": "edc115e7fc523245062200c00caa847f", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/1band_sr33075_hl384.json", - "param_name": "1band_sr33075_hl384" - }, - { - "hash_name": "28063e9f6ab5b341c5f6d3c67f2045b7", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/1band_sr33075_hl384.json", - "param_name": "1band_sr33075_hl384" - }, - { - "hash_name": "b58090534c52cbc3e9b5104bad666ef2", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512.json", - "param_name": "1band_sr44100_hl512" - }, - { - "hash_name": "0cdab9947f1b0928705f518f3c78ea8f", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512.json", - "param_name": "1band_sr44100_hl512" - }, - { - "hash_name": "ae702fed0238afb5346db8356fe25f13", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl1024.json", - "param_name": "1band_sr44100_hl1024" - } - ] - } - ], - "User Models": [ - { - "1 Band": [ - { - "hash_name": "1band_sr16000_hl512", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/1band_sr16000_hl512.json", - "param_name": "1band_sr16000_hl512" - }, - { - "hash_name": "1band_sr32000_hl512", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/1band_sr32000_hl512.json", - "param_name": "1band_sr16000_hl512" - }, - { - "hash_name": "1band_sr33075_hl384", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/1band_sr33075_hl384.json", - "param_name": "1band_sr33075_hl384" - }, - { - "hash_name": "1band_sr44100_hl256", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl256.json", - "param_name": "1band_sr44100_hl256" - }, - { - "hash_name": "1band_sr44100_hl512", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl512.json", - "param_name": "1band_sr44100_hl512" - }, - { - "hash_name": "1band_sr44100_hl1024", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/1band_sr44100_hl1024.json", - "param_name": "1band_sr44100_hl1024" - } - ], - "2 Band": [ - { - "hash_name": "2band_44100_lofi", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/2band_44100_lofi.json", - "param_name": "2band_44100_lofi" - }, - { - "hash_name": "2band_32000", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/2band_32000.json", - "param_name": "2band_32000" - }, - { - "hash_name": "2band_48000", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/2band_48000.json", - "param_name": "2band_48000" - } - ], - "3 Band": [ - { - "hash_name": "3band_44100", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/3band_44100.json", - "param_name": "3band_44100" - }, - { - "hash_name": "3band_44100_mid", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/3band_44100_mid.json", - "param_name": "3band_44100_mid" - }, - { - "hash_name": "3band_44100_msb2", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/3band_44100_msb2.json", - "param_name": "3band_44100_msb2" - } - ], - "4 Band": [ - { - "hash_name": "4band_44100", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_44100.json", - "param_name": "4band_44100" - }, - { - "hash_name": "4band_44100_mid", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_44100_mid.json", - "param_name": "4band_44100_mid" - }, - { - "hash_name": "4band_44100_msb", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_44100_msb.json", - "param_name": "4band_44100_msb" - }, - { - "hash_name": "4band_44100_msb2", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_44100_msb2.json", - "param_name": "4band_44100_msb2" - }, - { - "hash_name": "4band_44100_reverse", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_44100_reverse.json", - "param_name": "4band_44100_reverse" - }, - { - "hash_name": "4band_44100_sw", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_44100_sw.json", - "param_name": "4band_44100_sw" - }, - { - "hash_name": "4band_v2", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_v2.json", - "param_name": "4band_v2" - }, - { - "hash_name": "4band_v2_sn", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/4band_v2_sn.json", - "param_name": "4band_v2_sn" - }, - { - "hash_name": "tmodelparam", - "model_params": "lib/uvr5_pack/lib_v5/modelparams/tmodelparam.json", - "param_name": "User Model Param Set" - } - ] - } - ] -} diff --git a/lib/uvr5_pack/utils.py b/lib/uvr5_pack/utils.py deleted file mode 100644 index 0fafe8793b0d539fa58dd024342250b24b6187a9..0000000000000000000000000000000000000000 --- a/lib/uvr5_pack/utils.py +++ /dev/null @@ -1,120 +0,0 @@ -import torch -import numpy as np -from tqdm import tqdm -import json - - -def load_data(file_name: str = "./lib/uvr5_pack/name_params.json") -> dict: - with open(file_name, "r") as f: - data = json.load(f) - - return data - - -def make_padding(width, cropsize, offset): - left = offset - roi_size = cropsize - left * 2 - if roi_size == 0: - roi_size = cropsize - right = roi_size - (width % roi_size) + left - - return left, right, roi_size - - -def inference(X_spec, device, model, aggressiveness, data): - """ - data : dic configs - """ - - def _execute( - X_mag_pad, roi_size, n_window, device, model, aggressiveness, is_half=True - ): - model.eval() - with torch.no_grad(): - preds = [] - - iterations = [n_window] - - total_iterations = sum(iterations) - for i in tqdm(range(n_window)): - start = i * roi_size - X_mag_window = X_mag_pad[ - None, :, :, start : start + data["window_size"] - ] - X_mag_window = torch.from_numpy(X_mag_window) - if is_half: - X_mag_window = X_mag_window.half() - X_mag_window = X_mag_window.to(device) - - pred = model.predict(X_mag_window, aggressiveness) - - pred = pred.detach().cpu().numpy() - preds.append(pred[0]) - - pred = np.concatenate(preds, axis=2) - return pred - - def preprocess(X_spec): - X_mag = np.abs(X_spec) - X_phase = np.angle(X_spec) - - return X_mag, X_phase - - X_mag, X_phase = preprocess(X_spec) - - coef = X_mag.max() - X_mag_pre = X_mag / coef - - n_frame = X_mag_pre.shape[2] - pad_l, pad_r, roi_size = make_padding(n_frame, data["window_size"], model.offset) - n_window = int(np.ceil(n_frame / roi_size)) - - X_mag_pad = np.pad(X_mag_pre, ((0, 0), (0, 0), (pad_l, pad_r)), mode="constant") - - if list(model.state_dict().values())[0].dtype == torch.float16: - is_half = True - else: - is_half = False - pred = _execute( - X_mag_pad, roi_size, n_window, device, model, aggressiveness, is_half - ) - pred = pred[:, :, :n_frame] - - if data["tta"]: - pad_l += roi_size // 2 - pad_r += roi_size // 2 - n_window += 1 - - X_mag_pad = np.pad(X_mag_pre, ((0, 0), (0, 0), (pad_l, pad_r)), mode="constant") - - pred_tta = _execute( - X_mag_pad, roi_size, n_window, device, model, aggressiveness, is_half - ) - pred_tta = pred_tta[:, :, roi_size // 2 :] - pred_tta = pred_tta[:, :, :n_frame] - - return (pred + pred_tta) * 0.5 * coef, X_mag, np.exp(1.0j * X_phase) - else: - return pred * coef, X_mag, np.exp(1.0j * X_phase) - - -def _get_name_params(model_path, model_hash): - data = load_data() - flag = False - ModelName = model_path - for type in list(data): - for model in list(data[type][0]): - for i in range(len(data[type][0][model])): - if str(data[type][0][model][i]["hash_name"]) == model_hash: - flag = True - elif str(data[type][0][model][i]["hash_name"]) in ModelName: - flag = True - - if flag: - model_params_auto = data[type][0][model][i]["model_params"] - param_name_auto = data[type][0][model][i]["param_name"] - if type == "equivalent": - return param_name_auto, model_params_auto - else: - flag = False - return param_name_auto, model_params_auto diff --git a/logs/mute/0_gt_wavs/mute32k.wav b/logs/mute/0_gt_wavs/mute32k.wav deleted file mode 100644 index b4b5029205bf72dee5856bbe0c65c34337dc8dd4..0000000000000000000000000000000000000000 Binary files a/logs/mute/0_gt_wavs/mute32k.wav and /dev/null differ diff --git a/logs/mute/0_gt_wavs/mute40k.wav b/logs/mute/0_gt_wavs/mute40k.wav deleted file mode 100644 index fcf1281d4d1b01417a4d6738022f4402594a6802..0000000000000000000000000000000000000000 Binary files a/logs/mute/0_gt_wavs/mute40k.wav and /dev/null differ diff --git a/logs/mute/0_gt_wavs/mute48k.wav b/logs/mute/0_gt_wavs/mute48k.wav deleted file mode 100644 index 72822a01251e77d7d2a4a7da9d94805426829083..0000000000000000000000000000000000000000 Binary files a/logs/mute/0_gt_wavs/mute48k.wav and /dev/null differ diff --git a/main b/main new file mode 160000 index 0000000000000000000000000000000000000000..ec5421d13f5ee53f0cc57016b9d01cc7df2743bb --- /dev/null +++ b/main @@ -0,0 +1 @@ +Subproject commit ec5421d13f5ee53f0cc57016b9d01cc7df2743bb diff --git a/mdx.py b/mdx.py deleted file mode 100644 index 4cc7c08b37bc371294f2f82b3382424a5455b7c2..0000000000000000000000000000000000000000 --- a/mdx.py +++ /dev/null @@ -1,228 +0,0 @@ -import torch -import onnxruntime as ort -from tqdm import tqdm -import warnings -import numpy as np -import hashlib -import queue -import threading - -warnings.filterwarnings("ignore") - -class MDX_Model: - def __init__(self, device, dim_f, dim_t, n_fft, hop=1024, stem_name=None, compensation=1.000): - self.dim_f = dim_f - self.dim_t = dim_t - self.dim_c = 4 - self.n_fft = n_fft - self.hop = hop - self.stem_name = stem_name - self.compensation = compensation - - self.n_bins = self.n_fft//2+1 - self.chunk_size = hop * (self.dim_t-1) - self.window = torch.hann_window(window_length=self.n_fft, periodic=True).to(device) - - out_c = self.dim_c - - self.freq_pad = torch.zeros([1, out_c, self.n_bins-self.dim_f, self.dim_t]).to(device) - - def stft(self, x): - x = x.reshape([-1, self.chunk_size]) - x = torch.stft(x, n_fft=self.n_fft, hop_length=self.hop, window=self.window, center=True, return_complex=True) - x = torch.view_as_real(x) - x = x.permute([0,3,1,2]) - x = x.reshape([-1,2,2,self.n_bins,self.dim_t]).reshape([-1,4,self.n_bins,self.dim_t]) - return x[:,:,:self.dim_f] - - def istft(self, x, freq_pad=None): - freq_pad = self.freq_pad.repeat([x.shape[0],1,1,1]) if freq_pad is None else freq_pad - x = torch.cat([x, freq_pad], -2) - # c = 4*2 if self.target_name=='*' else 2 - x = x.reshape([-1,2,2,self.n_bins,self.dim_t]).reshape([-1,2,self.n_bins,self.dim_t]) - x = x.permute([0,2,3,1]) - x = x.contiguous() - x = torch.view_as_complex(x) - x = torch.istft(x, n_fft=self.n_fft, hop_length=self.hop, window=self.window, center=True) - return x.reshape([-1,2,self.chunk_size]) - - -class MDX: - - DEFAULT_SR = 44100 - # Unit: seconds - DEFAULT_CHUNK_SIZE = 0 * DEFAULT_SR - DEFAULT_MARGIN_SIZE = 1 * DEFAULT_SR - - DEFAULT_PROCESSOR = 0 - - def __init__(self, model_path:str, params:MDX_Model, processor=DEFAULT_PROCESSOR): - - # Set the device and the provider (CPU or CUDA) - self.device = torch.device(f'cuda:{processor}') if processor >= 0 else torch.device('cpu') - self.provider = ['CUDAExecutionProvider'] if processor >= 0 else ['CPUExecutionProvider'] - - self.model = params - - # Load the ONNX model using ONNX Runtime - self.ort = ort.InferenceSession(model_path, providers=self.provider) - # Preload the model for faster performance - self.ort.run(None, {'input':torch.rand(1, 4, params.dim_f, params.dim_t).numpy()}) - self.process = lambda spec:self.ort.run(None, {'input': spec.cpu().numpy()})[0] - - self.prog = None - - @staticmethod - def get_hash(model_path): - try: - with open(model_path, 'rb') as f: - f.seek(- 10000 * 1024, 2) - model_hash = hashlib.md5(f.read()).hexdigest() - except: - model_hash = hashlib.md5(open(model_path,'rb').read()).hexdigest() - - return model_hash - - @staticmethod - def segment(wave, combine=True, chunk_size=DEFAULT_CHUNK_SIZE, margin_size=DEFAULT_MARGIN_SIZE): - """ - Segment or join segmented wave array - - Args: - wave: (np.array) Wave array to be segmented or joined - combine: (bool) If True, combines segmented wave array. If False, segments wave array. - chunk_size: (int) Size of each segment (in samples) - margin_size: (int) Size of margin between segments (in samples) - - Returns: - numpy array: Segmented or joined wave array - """ - - if combine: - processed_wave = None # Initializing as None instead of [] for later numpy array concatenation - for segment_count, segment in enumerate(wave): - start = 0 if segment_count == 0 else margin_size - end = None if segment_count == len(wave)-1 else -margin_size - if margin_size == 0: - end = None - if processed_wave is None: # Create array for first segment - processed_wave = segment[:, start:end] - else: # Concatenate to existing array for subsequent segments - processed_wave = np.concatenate((processed_wave, segment[:, start:end]), axis=-1) - - else: - processed_wave = [] - sample_count = wave.shape[-1] - - if chunk_size <= 0 or chunk_size > sample_count: - chunk_size = sample_count - - if margin_size > chunk_size: - margin_size = chunk_size - - for segment_count, skip in enumerate(range(0, sample_count, chunk_size)): - - margin = 0 if segment_count == 0 else margin_size - end = min(skip+chunk_size+margin_size, sample_count) - start = skip-margin - - cut = wave[:,start:end].copy() - processed_wave.append(cut) - - if end == sample_count: - break - - return processed_wave - - def pad_wave(self, wave): - """ - Pad the wave array to match the required chunk size - - Args: - wave: (np.array) Wave array to be padded - - Returns: - tuple: (padded_wave, pad, trim) - - padded_wave: Padded wave array - - pad: Number of samples that were padded - - trim: Number of samples that were trimmed - """ - n_sample = wave.shape[1] - trim = self.model.n_fft//2 - gen_size = self.model.chunk_size-2*trim - pad = gen_size - n_sample%gen_size - - # Padded wave - wave_p = np.concatenate((np.zeros((2,trim)), wave, np.zeros((2,pad)), np.zeros((2,trim))), 1) - - mix_waves = [] - for i in range(0, n_sample+pad, gen_size): - waves = np.array(wave_p[:, i:i+self.model.chunk_size]) - mix_waves.append(waves) - - mix_waves = torch.tensor(mix_waves, dtype=torch.float32).to(self.device) - - return mix_waves, pad, trim - - def _process_wave(self, mix_waves, trim, pad, q:queue.Queue, _id:int): - """ - Process each wave segment in a multi-threaded environment - - Args: - mix_waves: (torch.Tensor) Wave segments to be processed - trim: (int) Number of samples trimmed during padding - pad: (int) Number of samples padded during padding - q: (queue.Queue) Queue to hold the processed wave segments - _id: (int) Identifier of the processed wave segment - - Returns: - numpy array: Processed wave segment - """ - mix_waves = mix_waves.split(1) - with torch.no_grad(): - pw = [] - for mix_wave in mix_waves: - self.prog.update() - spec = self.model.stft(mix_wave) - processed_spec = torch.tensor(self.process(spec)) - processed_wav = self.model.istft(processed_spec.to(self.device)) - processed_wav = processed_wav[:,:,trim:-trim].transpose(0,1).reshape(2, -1).cpu().numpy() - pw.append(processed_wav) - processed_signal = np.concatenate(pw, axis=-1)[:, :-pad] - q.put({_id:processed_signal}) - return processed_signal - - def process_wave(self, wave:np.array, mt_threads=1): - """ - Process the wave array in a multi-threaded environment - - Args: - wave: (np.array) Wave array to be processed - mt_threads: (int) Number of threads to be used for processing - - Returns: - numpy array: Processed wave array - """ - self.prog = tqdm(total=0) - chunk = wave.shape[-1]//mt_threads - waves = self.segment(wave, False, chunk) - - # Create a queue to hold the processed wave segments - q = queue.Queue() - threads = [] - for c, batch in enumerate(waves): - mix_waves, pad, trim = self.pad_wave(batch) - self.prog.total = len(mix_waves)*mt_threads - thread = threading.Thread(target=self._process_wave, args=(mix_waves, trim, pad, q, c)) - thread.start() - threads.append(thread) - for thread in threads: - thread.join() - self.prog.close() - - processed_batches = [] - while not q.empty(): - processed_batches.append(q.get()) - processed_batches = [list(wave.values())[0] for wave in sorted(processed_batches, key=lambda d: list(d.keys())[0])] - assert len(processed_batches) == len(waves), 'Incomplete processed batches, please reduce batch size!' - return self.segment(processed_batches, True, chunk) \ No newline at end of file diff --git a/mdx_processing_script.py b/mdx_processing_script.py deleted file mode 100644 index 4a26fc3f850606b9c111ec2f7f59e40ef153643d..0000000000000000000000000000000000000000 --- a/mdx_processing_script.py +++ /dev/null @@ -1,153 +0,0 @@ -import gc -import requests -import subprocess -import logging -import sys -from bs4 import BeautifulSoup -import torch, pdb, os, warnings, librosa -import soundfile as sf -from tqdm import tqdm -import numpy as np -import torch -now_dir = os.getcwd() -sys.path.append(now_dir) -import mdx -branch = "https://github.com/NaJeongMo/Colab-for-MDX_B" - -model_params = "https://raw.githubusercontent.com/TRvlvr/application_data/main/mdx_model_data/model_data.json" -_Models = "https://github.com/TRvlvr/model_repo/releases/download/all_public_uvr_models/" -# _models = "https://pastebin.com/raw/jBzYB8vz" -_models = "https://raw.githubusercontent.com/TRvlvr/application_data/main/filelists/download_checks.json" -#stem_naming = "https://pastebin.com/raw/mpH4hRcF" - -file_folder = "Colab-for-MDX_B" -model_ids = requests.get(_models).json() -model_ids = model_ids["mdx_download_list"].values() -#print(model_ids) -model_params = requests.get(model_params).json() -#stem_naming = requests.get(stem_naming).json() -stem_naming = { - "Vocals": "Instrumental", - "Other": "Instruments", - "Instrumental": "Vocals", - "Drums": "Drumless", - "Bass": "Bassless" -} - -os.makedirs("tmp_models", exist_ok=True) - -warnings.filterwarnings("ignore") -cpu = torch.device("cpu") -if torch.cuda.is_available(): - device = torch.device("cuda:0") -elif torch.backends.mps.is_available(): - device = torch.device("mps") -else: - device = torch.device("cpu") - - -def get_model_list(): - return model_ids - -def id_to_ptm(mkey): - if mkey in model_ids: - mpath = f"{now_dir}/tmp_models/{mkey}" - if not os.path.exists(f'{now_dir}/tmp_models/{mkey}'): - print('Downloading model...',end=' ') - subprocess.run( - ["wget", _Models+mkey, "-O", mpath] - ) - print(f'saved to {mpath}') - # get_ipython().system(f'gdown {model_id} -O /content/tmp_models/{mkey}') - return mpath - else: - return mpath - else: - mpath = f'models/{mkey}' - return mpath - -def prepare_mdx(onnx,custom_param=False, dim_f=None, dim_t=None, n_fft=None, stem_name=None, compensation=None): - device = torch.device('cuda:0') if torch.cuda.is_available() else torch.device('cpu') - if custom_param: - assert not (dim_f is None or dim_t is None or n_fft is None or compensation is None), 'Custom parameter selected, but incomplete parameters are provided.' - mdx_model = mdx.MDX_Model( - device, - dim_f = dim_f, - dim_t = dim_t, - n_fft = n_fft, - stem_name=stem_name, - compensation=compensation - ) - else: - model_hash = mdx.MDX.get_hash(onnx) - if model_hash in model_params: - mp = model_params.get(model_hash) - mdx_model = mdx.MDX_Model( - device, - dim_f = mp["mdx_dim_f_set"], - dim_t = 2**mp["mdx_dim_t_set"], - n_fft = mp["mdx_n_fft_scale_set"], - stem_name=mp["primary_stem"], - compensation=compensation if not custom_param and compensation is not None else mp["compensate"] - ) - return mdx_model - -def run_mdx(onnx, mdx_model,filename, output_format='wav',diff=False,suffix=None,diff_suffix=None, denoise=False, m_threads=2): - mdx_sess = mdx.MDX(onnx,mdx_model) - print(f"Processing: {filename}") - if filename.lower().endswith('.wav'): - wave, sr = librosa.load(filename, mono=False, sr=44100) - else: - temp_wav = 'temp_audio.wav' - subprocess.run(['ffmpeg', '-i', filename, '-ar', '44100', '-ac', '2', temp_wav]) # Convert to WAV format - wave, sr = librosa.load(temp_wav, mono=False, sr=44100) - os.remove(temp_wav) - - #wave, sr = librosa.load(filename,mono=False, sr=44100) - # normalizing input wave gives better output - peak = max(np.max(wave), abs(np.min(wave))) - wave /= peak - if denoise: - wave_processed = -(mdx_sess.process_wave(-wave, m_threads)) + (mdx_sess.process_wave(wave, m_threads)) - wave_processed *= 0.5 - else: - wave_processed = mdx_sess.process_wave(wave, m_threads) - # return to previous peak - wave_processed *= peak - - stem_name = mdx_model.stem_name if suffix is None else suffix # use suffix if provided - save_path = os.path.basename(os.path.splitext(filename)[0]) - #vocals_save_path = os.path.join(vocals_folder, f"{save_path}_{stem_name}.{output_format}") - #instrumental_save_path = os.path.join(instrumental_folder, f"{save_path}_{stem_name}.{output_format}") - save_path = f"{os.path.basename(os.path.splitext(filename)[0])}_{stem_name}.{output_format}" - save_path = os.path.join( - 'audios', - save_path - ) - sf.write( - save_path, - wave_processed.T, - sr - ) - - print(f'done, saved to: {save_path}') - - if diff: - diff_stem_name = stem_naming.get(stem_name) if diff_suffix is None else diff_suffix # use suffix if provided - stem_name = f"{stem_name}_diff" if diff_stem_name is None else diff_stem_name - save_path = f"{os.path.basename(os.path.splitext(filename)[0])}_{stem_name}.{output_format}" - save_path = os.path.join( - 'audio-others', - save_path - ) - sf.write( - save_path, - (-wave_processed.T*mdx_model.compensation)+wave.T, - sr - ) - print(f'invert done, saved to: {save_path}') - del mdx_sess, wave_processed, wave - gc.collect() - -if __name__ == "__main__": - print() \ No newline at end of file diff --git a/packages.txt b/packages.txt deleted file mode 100644 index 5ea7c73c110e77879f55380ebd7d49e2bf2f2430..0000000000000000000000000000000000000000 --- a/packages.txt +++ /dev/null @@ -1,3 +0,0 @@ -git-lfs -aria2 -y -ffmpeg \ No newline at end of file diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index f7aad0a171d64c76d3f404939e2f0cedd0043b8d..0000000000000000000000000000000000000000 --- a/poetry.lock +++ /dev/null @@ -1,3881 +0,0 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. - -[[package]] -name = "absl-py" -version = "1.4.0" -description = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py." -optional = false -python-versions = ">=3.6" -files = [ - {file = "absl-py-1.4.0.tar.gz", hash = "sha256:d2c244d01048ba476e7c080bd2c6df5e141d211de80223460d5b3b8a2a58433d"}, - {file = "absl_py-1.4.0-py3-none-any.whl", hash = "sha256:0d3fe606adfa4f7db64792dd4c7aee4ee0c38ab75dfd353b7a83ed3e957fcb47"}, -] - -[[package]] -name = "aiofiles" -version = "23.1.0" -description = "File support for asyncio." -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "aiofiles-23.1.0-py3-none-any.whl", hash = "sha256:9312414ae06472eb6f1d163f555e466a23aed1c8f60c30cccf7121dba2e53eb2"}, - {file = "aiofiles-23.1.0.tar.gz", hash = "sha256:edd247df9a19e0db16534d4baaf536d6609a43e1de5401d7a4c1c148753a1635"}, -] - -[[package]] -name = "aiohttp" -version = "3.8.4" -description = "Async http client/server framework (asyncio)" -optional = false -python-versions = ">=3.6" -files = [ - {file = "aiohttp-3.8.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5ce45967538fb747370308d3145aa68a074bdecb4f3a300869590f725ced69c1"}, - {file = "aiohttp-3.8.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b744c33b6f14ca26b7544e8d8aadff6b765a80ad6164fb1a430bbadd593dfb1a"}, - {file = "aiohttp-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a45865451439eb320784918617ba54b7a377e3501fb70402ab84d38c2cd891b"}, - {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a86d42d7cba1cec432d47ab13b6637bee393a10f664c425ea7b305d1301ca1a3"}, - {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee3c36df21b5714d49fc4580247947aa64bcbe2939d1b77b4c8dcb8f6c9faecc"}, - {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:176a64b24c0935869d5bbc4c96e82f89f643bcdf08ec947701b9dbb3c956b7dd"}, - {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c844fd628851c0bc309f3c801b3a3d58ce430b2ce5b359cd918a5a76d0b20cb5"}, - {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5393fb786a9e23e4799fec788e7e735de18052f83682ce2dfcabaf1c00c2c08e"}, - {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e4b09863aae0dc965c3ef36500d891a3ff495a2ea9ae9171e4519963c12ceefd"}, - {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:adfbc22e87365a6e564c804c58fc44ff7727deea782d175c33602737b7feadb6"}, - {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:147ae376f14b55f4f3c2b118b95be50a369b89b38a971e80a17c3fd623f280c9"}, - {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:eafb3e874816ebe2a92f5e155f17260034c8c341dad1df25672fb710627c6949"}, - {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c6cc15d58053c76eacac5fa9152d7d84b8d67b3fde92709195cb984cfb3475ea"}, - {file = "aiohttp-3.8.4-cp310-cp310-win32.whl", hash = "sha256:59f029a5f6e2d679296db7bee982bb3d20c088e52a2977e3175faf31d6fb75d1"}, - {file = "aiohttp-3.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:fe7ba4a51f33ab275515f66b0a236bcde4fb5561498fe8f898d4e549b2e4509f"}, - {file = "aiohttp-3.8.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3d8ef1a630519a26d6760bc695842579cb09e373c5f227a21b67dc3eb16cfea4"}, - {file = "aiohttp-3.8.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b3f2e06a512e94722886c0827bee9807c86a9f698fac6b3aee841fab49bbfb4"}, - {file = "aiohttp-3.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a80464982d41b1fbfe3154e440ba4904b71c1a53e9cd584098cd41efdb188ef"}, - {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b631e26df63e52f7cce0cce6507b7a7f1bc9b0c501fcde69742130b32e8782f"}, - {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f43255086fe25e36fd5ed8f2ee47477408a73ef00e804cb2b5cba4bf2ac7f5e"}, - {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d347a172f866cd1d93126d9b239fcbe682acb39b48ee0873c73c933dd23bd0f"}, - {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3fec6a4cb5551721cdd70473eb009d90935b4063acc5f40905d40ecfea23e05"}, - {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80a37fe8f7c1e6ce8f2d9c411676e4bc633a8462844e38f46156d07a7d401654"}, - {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d1e6a862b76f34395a985b3cd39a0d949ca80a70b6ebdea37d3ab39ceea6698a"}, - {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cd468460eefef601ece4428d3cf4562459157c0f6523db89365202c31b6daebb"}, - {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:618c901dd3aad4ace71dfa0f5e82e88b46ef57e3239fc7027773cb6d4ed53531"}, - {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:652b1bff4f15f6287550b4670546a2947f2a4575b6c6dff7760eafb22eacbf0b"}, - {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80575ba9377c5171407a06d0196b2310b679dc752d02a1fcaa2bc20b235dbf24"}, - {file = "aiohttp-3.8.4-cp311-cp311-win32.whl", hash = "sha256:bbcf1a76cf6f6dacf2c7f4d2ebd411438c275faa1dc0c68e46eb84eebd05dd7d"}, - {file = "aiohttp-3.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:6e74dd54f7239fcffe07913ff8b964e28b712f09846e20de78676ce2a3dc0bfc"}, - {file = "aiohttp-3.8.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:880e15bb6dad90549b43f796b391cfffd7af373f4646784795e20d92606b7a51"}, - {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb96fa6b56bb536c42d6a4a87dfca570ff8e52de2d63cabebfd6fb67049c34b6"}, - {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a6cadebe132e90cefa77e45f2d2f1a4b2ce5c6b1bfc1656c1ddafcfe4ba8131"}, - {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f352b62b45dff37b55ddd7b9c0c8672c4dd2eb9c0f9c11d395075a84e2c40f75"}, - {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ab43061a0c81198d88f39aaf90dae9a7744620978f7ef3e3708339b8ed2ef01"}, - {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9cb1565a7ad52e096a6988e2ee0397f72fe056dadf75d17fa6b5aebaea05622"}, - {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:1b3ea7edd2d24538959c1c1abf97c744d879d4e541d38305f9bd7d9b10c9ec41"}, - {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:7c7837fe8037e96b6dd5cfcf47263c1620a9d332a87ec06a6ca4564e56bd0f36"}, - {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3b90467ebc3d9fa5b0f9b6489dfb2c304a1db7b9946fa92aa76a831b9d587e99"}, - {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:cab9401de3ea52b4b4c6971db5fb5c999bd4260898af972bf23de1c6b5dd9d71"}, - {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d1f9282c5f2b5e241034a009779e7b2a1aa045f667ff521e7948ea9b56e0c5ff"}, - {file = "aiohttp-3.8.4-cp36-cp36m-win32.whl", hash = "sha256:5e14f25765a578a0a634d5f0cd1e2c3f53964553a00347998dfdf96b8137f777"}, - {file = "aiohttp-3.8.4-cp36-cp36m-win_amd64.whl", hash = "sha256:4c745b109057e7e5f1848c689ee4fb3a016c8d4d92da52b312f8a509f83aa05e"}, - {file = "aiohttp-3.8.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:aede4df4eeb926c8fa70de46c340a1bc2c6079e1c40ccf7b0eae1313ffd33519"}, - {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ddaae3f3d32fc2cb4c53fab020b69a05c8ab1f02e0e59665c6f7a0d3a5be54f"}, - {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4eb3b82ca349cf6fadcdc7abcc8b3a50ab74a62e9113ab7a8ebc268aad35bb9"}, - {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bcb89336efa095ea21b30f9e686763f2be4478f1b0a616969551982c4ee4c3b"}, - {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c08e8ed6fa3d477e501ec9db169bfac8140e830aa372d77e4a43084d8dd91ab"}, - {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6cd05ea06daca6ad6a4ca3ba7fe7dc5b5de063ff4daec6170ec0f9979f6c332"}, - {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7a00a9ed8d6e725b55ef98b1b35c88013245f35f68b1b12c5cd4100dddac333"}, - {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:de04b491d0e5007ee1b63a309956eaed959a49f5bb4e84b26c8f5d49de140fa9"}, - {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:40653609b3bf50611356e6b6554e3a331f6879fa7116f3959b20e3528783e699"}, - {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dbf3a08a06b3f433013c143ebd72c15cac33d2914b8ea4bea7ac2c23578815d6"}, - {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854f422ac44af92bfe172d8e73229c270dc09b96535e8a548f99c84f82dde241"}, - {file = "aiohttp-3.8.4-cp37-cp37m-win32.whl", hash = "sha256:aeb29c84bb53a84b1a81c6c09d24cf33bb8432cc5c39979021cc0f98c1292a1a"}, - {file = "aiohttp-3.8.4-cp37-cp37m-win_amd64.whl", hash = "sha256:db3fc6120bce9f446d13b1b834ea5b15341ca9ff3f335e4a951a6ead31105480"}, - {file = "aiohttp-3.8.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fabb87dd8850ef0f7fe2b366d44b77d7e6fa2ea87861ab3844da99291e81e60f"}, - {file = "aiohttp-3.8.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91f6d540163f90bbaef9387e65f18f73ffd7c79f5225ac3d3f61df7b0d01ad15"}, - {file = "aiohttp-3.8.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d265f09a75a79a788237d7f9054f929ced2e69eb0bb79de3798c468d8a90f945"}, - {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d89efa095ca7d442a6d0cbc755f9e08190ba40069b235c9886a8763b03785da"}, - {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4dac314662f4e2aa5009977b652d9b8db7121b46c38f2073bfeed9f4049732cd"}, - {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe11310ae1e4cd560035598c3f29d86cef39a83d244c7466f95c27ae04850f10"}, - {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ddb2a2026c3f6a68c3998a6c47ab6795e4127315d2e35a09997da21865757f8"}, - {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e75b89ac3bd27d2d043b234aa7b734c38ba1b0e43f07787130a0ecac1e12228a"}, - {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6e601588f2b502c93c30cd5a45bfc665faaf37bbe835b7cfd461753068232074"}, - {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a5d794d1ae64e7753e405ba58e08fcfa73e3fad93ef9b7e31112ef3c9a0efb52"}, - {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a1f4689c9a1462f3df0a1f7e797791cd6b124ddbee2b570d34e7f38ade0e2c71"}, - {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3032dcb1c35bc330134a5b8a5d4f68c1a87252dfc6e1262c65a7e30e62298275"}, - {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8189c56eb0ddbb95bfadb8f60ea1b22fcfa659396ea36f6adcc521213cd7b44d"}, - {file = "aiohttp-3.8.4-cp38-cp38-win32.whl", hash = "sha256:33587f26dcee66efb2fff3c177547bd0449ab7edf1b73a7f5dea1e38609a0c54"}, - {file = "aiohttp-3.8.4-cp38-cp38-win_amd64.whl", hash = "sha256:e595432ac259af2d4630008bf638873d69346372d38255774c0e286951e8b79f"}, - {file = "aiohttp-3.8.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5a7bdf9e57126dc345b683c3632e8ba317c31d2a41acd5800c10640387d193ed"}, - {file = "aiohttp-3.8.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:22f6eab15b6db242499a16de87939a342f5a950ad0abaf1532038e2ce7d31567"}, - {file = "aiohttp-3.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7235604476a76ef249bd64cb8274ed24ccf6995c4a8b51a237005ee7a57e8643"}, - {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea9eb976ffdd79d0e893869cfe179a8f60f152d42cb64622fca418cd9b18dc2a"}, - {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92c0cea74a2a81c4c76b62ea1cac163ecb20fb3ba3a75c909b9fa71b4ad493cf"}, - {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:493f5bc2f8307286b7799c6d899d388bbaa7dfa6c4caf4f97ef7521b9cb13719"}, - {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a63f03189a6fa7c900226e3ef5ba4d3bd047e18f445e69adbd65af433add5a2"}, - {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10c8cefcff98fd9168cdd86c4da8b84baaa90bf2da2269c6161984e6737bf23e"}, - {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bca5f24726e2919de94f047739d0a4fc01372801a3672708260546aa2601bf57"}, - {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:03baa76b730e4e15a45f81dfe29a8d910314143414e528737f8589ec60cf7391"}, - {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:8c29c77cc57e40f84acef9bfb904373a4e89a4e8b74e71aa8075c021ec9078c2"}, - {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:03543dcf98a6619254b409be2d22b51f21ec66272be4ebda7b04e6412e4b2e14"}, - {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17b79c2963db82086229012cff93ea55196ed31f6493bb1ccd2c62f1724324e4"}, - {file = "aiohttp-3.8.4-cp39-cp39-win32.whl", hash = "sha256:34ce9f93a4a68d1272d26030655dd1b58ff727b3ed2a33d80ec433561b03d67a"}, - {file = "aiohttp-3.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:41a86a69bb63bb2fc3dc9ad5ea9f10f1c9c8e282b471931be0268ddd09430b04"}, - {file = "aiohttp-3.8.4.tar.gz", hash = "sha256:bf2e1a9162c1e441bf805a1fd166e249d574ca04e03b34f97e2928769e91ab5c"}, -] - -[package.dependencies] -aiosignal = ">=1.1.2" -async-timeout = ">=4.0.0a3,<5.0" -attrs = ">=17.3.0" -charset-normalizer = ">=2.0,<4.0" -frozenlist = ">=1.1.1" -multidict = ">=4.5,<7.0" -yarl = ">=1.0,<2.0" - -[package.extras] -speedups = ["Brotli", "aiodns", "cchardet"] - -[[package]] -name = "aiosignal" -version = "1.3.1" -description = "aiosignal: a list of registered asynchronous callbacks" -optional = false -python-versions = ">=3.7" -files = [ - {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, - {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, -] - -[package.dependencies] -frozenlist = ">=1.1.0" - -[[package]] -name = "altair" -version = "4.2.2" -description = "Altair: A declarative statistical visualization library for Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "altair-4.2.2-py3-none-any.whl", hash = "sha256:8b45ebeaf8557f2d760c5c77b79f02ae12aee7c46c27c06014febab6f849bc87"}, - {file = "altair-4.2.2.tar.gz", hash = "sha256:39399a267c49b30d102c10411e67ab26374156a84b1aeb9fcd15140429ba49c5"}, -] - -[package.dependencies] -entrypoints = "*" -jinja2 = "*" -jsonschema = ">=3.0" -numpy = "*" -pandas = ">=0.18" -toolz = "*" - -[package.extras] -dev = ["black", "docutils", "flake8", "ipython", "m2r", "mistune (<2.0.0)", "pytest", "recommonmark", "sphinx", "vega-datasets"] - -[[package]] -name = "antlr4-python3-runtime" -version = "4.8" -description = "ANTLR 4.8 runtime for Python 3.7" -optional = false -python-versions = "*" -files = [ - {file = "antlr4-python3-runtime-4.8.tar.gz", hash = "sha256:15793f5d0512a372b4e7d2284058ad32ce7dd27126b105fb0b2245130445db33"}, -] - -[[package]] -name = "anyio" -version = "3.6.2" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = false -python-versions = ">=3.6.2" -files = [ - {file = "anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"}, - {file = "anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"}, -] - -[package.dependencies] -idna = ">=2.8" -sniffio = ">=1.1" - -[package.extras] -doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"] -trio = ["trio (>=0.16,<0.22)"] - -[[package]] -name = "async-timeout" -version = "4.0.2" -description = "Timeout context manager for asyncio programs" -optional = false -python-versions = ">=3.6" -files = [ - {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, - {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, -] - -[[package]] -name = "attrs" -version = "22.2.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.6" -files = [ - {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, - {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, -] - -[package.extras] -cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] -tests = ["attrs[tests-no-zope]", "zope.interface"] -tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] - -[[package]] -name = "audioread" -version = "3.0.0" -description = "multi-library, cross-platform audio decoding" -optional = false -python-versions = ">=3.6" -files = [ - {file = "audioread-3.0.0.tar.gz", hash = "sha256:121995bd207eb1fda3d566beb851d3534275925bc35a4fb6da0cb11de0f7251a"}, -] - -[[package]] -name = "bitarray" -version = "2.7.3" -description = "efficient arrays of booleans -- C extension" -optional = false -python-versions = "*" -files = [ - {file = "bitarray-2.7.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:979d42e0b2c3113526f9716a461e08671788a23ce7e3b5cd090ce3e6a6762641"}, - {file = "bitarray-2.7.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:860edf8533223d82bd6201894bcaf540f828f49075f363390eecf04b12fb94cb"}, - {file = "bitarray-2.7.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:78378d8dacbe1f4f263347f42ec0a41cc2097cd671c6ac30a65a838284a5e141"}, - {file = "bitarray-2.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:888df211aafe5fad41c0792a686d95c8ba37345d5037f437aa3c09608f9c3b56"}, - {file = "bitarray-2.7.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb3f003dee96dbf24a6df71443557f249b17b20083c189995302b14eb01530bf"}, - {file = "bitarray-2.7.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c531532c21bc1063e65957a1a85a2d13601ec21801f70821c89d9339b16ebc78"}, - {file = "bitarray-2.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8fd92c8026e4ba6874e94f538890e35bef2a3a18ea54e3663c578b7916ade1"}, - {file = "bitarray-2.7.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d19c34a2121eccfeb642d4ad71163bd3342a8f3a99e6724fe824bdfbc0a5b65"}, - {file = "bitarray-2.7.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:102db74ee82ec5774aba01481e73eedaebd27ba167344a81d3b42e6fbf9ffb77"}, - {file = "bitarray-2.7.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7f6540b45b2230442f7a0614745131e0a6f28251f5d33ac19d0ed61d80db7153"}, - {file = "bitarray-2.7.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:99c9345c417a9cff98f9f6e59b0350dcc10c2e0e1ea66acf7946de1cd60541fa"}, - {file = "bitarray-2.7.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:a1d439c98e65ab8e5fbcc2b242a16e7a3f076974bff78185ff42ba2d4c220032"}, - {file = "bitarray-2.7.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:87897ec0e4876c9f2c1ae313519de0ed2ad8041a4d2210a083f9b4a239add2e3"}, - {file = "bitarray-2.7.3-cp310-cp310-win32.whl", hash = "sha256:cb46c3a4002c8322dd0e1b4b53f8a647dcb0f199f5c7a1fc03d3880c3eabbd2c"}, - {file = "bitarray-2.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:5df10eb9b794932b0cf806f412d1c6d04fb7655ca7ae5caf6354b9edc380a5f7"}, - {file = "bitarray-2.7.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:27524bc92fdeb464a5057a4677a35f482cf30be2e920bd1d11c46de533cafda6"}, - {file = "bitarray-2.7.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3cf37431de779b29e5c0d8e36868f77f6df53c3c19c20e8404137e257dc80040"}, - {file = "bitarray-2.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8abd23f94cdcce971d932a5f0a066d40fbc61901fd087aa70d32cccd1793bd20"}, - {file = "bitarray-2.7.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7659bdfe7716b14a39007e31e957fa64d7f0d9e40a1dbd024bd81b972d76bffb"}, - {file = "bitarray-2.7.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:da1570f301abdfda68f4fdb40c4d3f09af4bb6e4550b4fa5395db0d142b680bc"}, - {file = "bitarray-2.7.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8becbb9649fd29ee577f9f0405ce2fba5cf9fa2c290c9b044bc235c04473f213"}, - {file = "bitarray-2.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72fd7f6f940bc42914c86700591ccfd1daeff0e414cefcbd7843117df2fac4e9"}, - {file = "bitarray-2.7.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23b7bada6d6b62cba08f4a1b8a95da2d8592aae1db3c167dcb52abcba0a7bef5"}, - {file = "bitarray-2.7.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4b2d150a81a981537801ac7d4f4f5d082c48343612a21f4e2c4cd2e887973bd5"}, - {file = "bitarray-2.7.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1502660ab489b1f18c3493c766252cd5d24bc1cbf4bdf3594e0a30de142ed453"}, - {file = "bitarray-2.7.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:91f43f6b6c9129a56d3e2dccb8b88ffce0e4f4893dd9d69d285676bdf5b9ca14"}, - {file = "bitarray-2.7.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:a69c99274aee2ffdc7f1cfd34044ccb7155790d6f5217d677ea46a6ddead6dd2"}, - {file = "bitarray-2.7.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d63f20299441e32171f08fc62f7ea7e401cc12a96f67a36ab2d76439ecfcb118"}, - {file = "bitarray-2.7.3-cp311-cp311-win32.whl", hash = "sha256:0b84fd9dbf999cbca1090a7703aa1404cd01af4035c6ba3adf69d41280611fb6"}, - {file = "bitarray-2.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:76bbbb9ceebb9cbb2b14369b3681fecab226792b339f612e79f6575ca31fed45"}, - {file = "bitarray-2.7.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50d5e2c026b3e3d145f64c457338ea99edcbdd302fdcbd96418251ac51a98a59"}, - {file = "bitarray-2.7.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d571056115bbdc18f199a9ee4c2a1b5884f5e63a3c05fe43d2fc7fc67320515"}, - {file = "bitarray-2.7.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2a0313657e6656efca2148cfc91c50fdafca6f811b6c7d0906e6ba57134e560"}, - {file = "bitarray-2.7.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d3b5abb73c45d40d27f9795dac9d6eb1515729c13f93dd67df2be07be6549990"}, - {file = "bitarray-2.7.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7776c070943f45cd8303543a6625cf82f2e000ef9c885d52d7828be099e52f42"}, - {file = "bitarray-2.7.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:057f9c53a34e42deed6e8813a82b9c85924f4728be28e3b9b65144569ac5a387"}, - {file = "bitarray-2.7.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8591ad5768860ad186dc94fd58b2932604a7639b57eefbbff2b4865af3407691"}, - {file = "bitarray-2.7.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:bd7f4b2df89bf4e298756c0be0be67fb84d6aa49bda60d46805d43f0e643abd5"}, - {file = "bitarray-2.7.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:433f91c8ab8338662aaa86b0677e6c15c35f8f7b65d4c43d7d1647a8198bc0b0"}, - {file = "bitarray-2.7.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:31e60d8341c3189aa156ca8cb2f6370b29d79cf132e3d091714b0a5a9097eb69"}, - {file = "bitarray-2.7.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:ea33ed09157e032f0a7a2627ef87f156e9927697f59b55961439d34bf45af23a"}, - {file = "bitarray-2.7.3-cp36-cp36m-win32.whl", hash = "sha256:302149aaff75939beb8af7f32ac9bf922480033a24fb54f4ebc0c9dc175247c4"}, - {file = "bitarray-2.7.3-cp36-cp36m-win_amd64.whl", hash = "sha256:7a8995737fae8de03b31ed83acf4f4326a55b217022009d18be19ff87fc9010e"}, - {file = "bitarray-2.7.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8b2f31a4cc28aef27355ab896e4b4cc2da2204b2b7adb674d8be7fefa0c93868"}, - {file = "bitarray-2.7.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5df624ee8a4098c3b1149f4817f2a4a0121c4920e1c114af324bc52d6659e2b"}, - {file = "bitarray-2.7.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb1d60ed709989e34e7158d97fdb077a2f2dfc505998a84161a70f81a6101172"}, - {file = "bitarray-2.7.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:748847e58c45a37f23db1f53a6dc16ae32aa80ee504653d79336830de1a79ed7"}, - {file = "bitarray-2.7.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4b7fdb9772e087174f446655bbc497a1600b5758f279c6d44fcf344c13d5c8a"}, - {file = "bitarray-2.7.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:86e9c48ffeddb0f943e87ab65e1e95dccc9b44ef3761af3bf9642973ab7646d2"}, - {file = "bitarray-2.7.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0d1f49cc51919d6fa0f7eebd073d2c620b80079aa537d084a7fafb46a35c7a4d"}, - {file = "bitarray-2.7.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b43d56c7c96f5a055f4051be426496db2a616840645d0ab3733d5ceacb2f701b"}, - {file = "bitarray-2.7.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:01f8d02c3eae82c98d4259777cb2f042a0b3989d7dceeb37c643cb94b91d5a42"}, - {file = "bitarray-2.7.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d089b1d0b157c9a484f8f7475eecea813d0dc3818adc5bf352903da14fe88fc3"}, - {file = "bitarray-2.7.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1362e9fb78ca72aa52ec1f1fbd62872801302001b0156ed2a1e707850cd30ffd"}, - {file = "bitarray-2.7.3-cp37-cp37m-win32.whl", hash = "sha256:2cdf5700537e5aa4ec9f4a0b498b8d5b03b9859d503e01ea17a6a134a838aa30"}, - {file = "bitarray-2.7.3-cp37-cp37m-win_amd64.whl", hash = "sha256:1e1553933f4533040491f4e4499bcbbfcee42c4056f56d7e18010e779daab33d"}, - {file = "bitarray-2.7.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1048a29b3d72b1821a3ae9e8d64e71ed96c53a1a36b1da6db02091a424a8f795"}, - {file = "bitarray-2.7.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:10dc358fe29d7a4c5be78ab2fb5aa50cb8066babd23e0b5589eb68e26afe58d8"}, - {file = "bitarray-2.7.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8ab6770833976448a9a973bc0df63adedc4c30de4774cec5a9928fc496423ebb"}, - {file = "bitarray-2.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abe2f829f6f2d330bccf1bcde2192264ab9a15d6d00e507265f46dc66557014"}, - {file = "bitarray-2.7.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87851a82bdf849e3c40ff6d8af5f734634e17f52a8f7f7e74486c2f8ce717578"}, - {file = "bitarray-2.7.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5fc2512bdf5289a1412c936c65d17881d2b46edb0036c63a8d5605dc8d398a3"}, - {file = "bitarray-2.7.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1289f408a8b5c87cdb4fd7975d4021c6e61209ccb956d0411e72bf43c7f78463"}, - {file = "bitarray-2.7.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ee181cc00aaba38d9812f4df4e7d828105b6dde3b068cd2c43f1d8f395e0046"}, - {file = "bitarray-2.7.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:00e93f70cbcbeabd1e79accf1b6f5b2424cd40556e7877f618549523d0031c98"}, - {file = "bitarray-2.7.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3fb6a952796d16c3a309d866eef56a8f4e5591d112c22446e67d33ecb096b44b"}, - {file = "bitarray-2.7.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:0fe747a134f7f5bc0877eee58090ae7e7f23628eeb459f681ade65719c3f246a"}, - {file = "bitarray-2.7.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:2c1b2c91bf991b5c641faee78dd5a751dff6155ec51c7a6c7f922dc85431898e"}, - {file = "bitarray-2.7.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c3956ae54285ab30d802756144887e30e013f81c9f03e5ffff9daa46d8ca0154"}, - {file = "bitarray-2.7.3-cp38-cp38-win32.whl", hash = "sha256:00a6fc4355bd4e6ead54d05187dc4ea39f0af439b336ae113f0194673ed730ae"}, - {file = "bitarray-2.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:305e6f7441c007f296644ba3899c0306ce9fd7a482dbbc06b6e7b7bd6e0ddabc"}, - {file = "bitarray-2.7.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fe80c23409efb41b86efb5e45f334420a9b5b7828f5b3d08b5ff28f03a024d9e"}, - {file = "bitarray-2.7.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:16345146b61e93ca20679c83537ccf7245f78b17035f5b1a436fd2b75da04c5e"}, - {file = "bitarray-2.7.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1af9b720a048c69e999094e2310138b7cfca5471a9d2c1dbe4b53dd10e516720"}, - {file = "bitarray-2.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:088e6e9ea7f0eaf8b672679a68096dbc0a7a7b7a4ed567860f7362e1588370a6"}, - {file = "bitarray-2.7.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:122cd70ee0de2cc9d94da8b8ebcb7dca12b9f4d3beefb94c11e110e1d87503bb"}, - {file = "bitarray-2.7.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cb9a8ee23416bd0cfd457118978bc2f6f02c20b95336db486887f670bf92c2b7"}, - {file = "bitarray-2.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a544f99c24b6f658907eb9edf290a9c54f4106738b2ab84cd19dc6013cc3abf"}, - {file = "bitarray-2.7.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:980f6564218f853a9341fb045446539d4153338926ed2fb222e86dc9b2ae9b8f"}, - {file = "bitarray-2.7.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f64abe9301b918d2c352e42198cea0196f3639bc1ad23a4a9d8ae97f66068901"}, - {file = "bitarray-2.7.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:029c724bf38c6616b90b1c423b846b63f8d607ed5a23d270e3862696d88a5392"}, - {file = "bitarray-2.7.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:16cb00911584a6e9ca0f42c305714898120dc6bfbbec90dacedeed4690331a47"}, - {file = "bitarray-2.7.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:699b0134e87c0c4e3b224d879d218c4385a06e6b72df73b4c9c9d549155fb837"}, - {file = "bitarray-2.7.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b508e1bba4ec68fd0ef28505e2dad2f56de7df710c8334c97036705a562cb908"}, - {file = "bitarray-2.7.3-cp39-cp39-win32.whl", hash = "sha256:4b84230624d15868e407ba8b66df54fc69ee6a9e9cb6d51eb264b8f2614596f1"}, - {file = "bitarray-2.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:757a08bf0aed5a650a399f8c66bcba00c210bce34408b6d7b09b4837bee8f4da"}, - {file = "bitarray-2.7.3.tar.gz", hash = "sha256:f71256a32609b036adad932e1228b66a6b4e2cae6be397e588ddc0babd9a78b9"}, -] - -[[package]] -name = "cachetools" -version = "5.3.0" -description = "Extensible memoizing collections and decorators" -optional = false -python-versions = "~=3.7" -files = [ - {file = "cachetools-5.3.0-py3-none-any.whl", hash = "sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4"}, - {file = "cachetools-5.3.0.tar.gz", hash = "sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14"}, -] - -[[package]] -name = "certifi" -version = "2022.12.7" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, -] - -[[package]] -name = "cffi" -version = "1.15.1" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = "*" -files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, -] - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "charset-normalizer" -version = "3.1.0" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, - {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, -] - -[[package]] -name = "click" -version = "8.1.3" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "cmake" -version = "3.26.1" -description = "CMake is an open-source, cross-platform family of tools designed to build, test and package software" -optional = false -python-versions = "*" -files = [ - {file = "cmake-3.26.1-py2.py3-none-macosx_10_10_universal2.macosx_10_10_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:d8a7e0cc8677677a732aff3e3fd0ad64eeff43cac772614b03c436912247d0d8"}, - {file = "cmake-3.26.1-py2.py3-none-manylinux2010_i686.manylinux_2_12_i686.whl", hash = "sha256:f2f721f5aebe304c281ee4b1d2dfbf7f4a52fca003834b2b4a3ba838aeded63c"}, - {file = "cmake-3.26.1-py2.py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:63a012b72836702eadfe4fba9642aeb17337f26861f4768e837053f40e98cb46"}, - {file = "cmake-3.26.1-py2.py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2b72be88b7bfaa6ae59566cbb9d6a5553f19b2a8d14efa6ac0cf019a29860a1b"}, - {file = "cmake-3.26.1-py2.py3-none-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1278354f7210e22458aa9137d46a56da1f115a7b76ad2733f0bf6041fb40f1dc"}, - {file = "cmake-3.26.1-py2.py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:de96a5522917fba0ab0da2d01d9dd9462fa80f365218bf27162d539c2335758f"}, - {file = "cmake-3.26.1-py2.py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:449928ad7dfcd41e4dcff64c7d44f86557883c70577666a19e79e22d783bbbd0"}, - {file = "cmake-3.26.1-py2.py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19fa3e457afecf2803265f71652ef17c3f1d317173c330ba46767a0853d38fa0"}, - {file = "cmake-3.26.1-py2.py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:43360650d60d177d979e4ad0a5f31afa286e6d88f5350f7a38c29d94514900eb"}, - {file = "cmake-3.26.1-py2.py3-none-musllinux_1_1_i686.whl", hash = "sha256:16aac10363bc926da5109a59ef8fe46ddcd7e3d421de61f871b35524eef2f1ae"}, - {file = "cmake-3.26.1-py2.py3-none-musllinux_1_1_ppc64le.whl", hash = "sha256:e460ba5070be4dcac9613cb526a46db4e5fa19d8b909a8d8d5244c6cc3c777e1"}, - {file = "cmake-3.26.1-py2.py3-none-musllinux_1_1_s390x.whl", hash = "sha256:fd2ecc0899f7939a014bd906df85e8681bd63ce457de3ab0b5d9e369fa3bdf79"}, - {file = "cmake-3.26.1-py2.py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:22781a23e274ba9bf380b970649654851c1b4b9d83b65fec12ee2e2e03b6ffc4"}, - {file = "cmake-3.26.1-py2.py3-none-win32.whl", hash = "sha256:7b4e81de30ac1fb2f1eb5287063e140b53f376fd9ed7e2060c1c7b5917bd5f83"}, - {file = "cmake-3.26.1-py2.py3-none-win_amd64.whl", hash = "sha256:90845b6c87a25be07e9220f67dd7f6c891c6ec14d764d37335218d97f9ea4520"}, - {file = "cmake-3.26.1-py2.py3-none-win_arm64.whl", hash = "sha256:43bd96327e2631183bb4829ba20cb810e20b4b0c68f852fcd7082fbb5359d57c"}, - {file = "cmake-3.26.1.tar.gz", hash = "sha256:4e0eb3c03dcf2d459f78d96cc85f7482476aeb1ae5ada65150b1db35c0f70cc7"}, -] - -[package.extras] -test = ["codecov (>=2.0.5)", "coverage (>=4.2)", "flake8 (>=3.0.4)", "path.py (>=11.5.0)", "pytest (>=3.0.3)", "pytest-cov (>=2.4.0)", "pytest-runner (>=2.9)", "pytest-virtualenv (>=1.7.0)", "scikit-build (>=0.10.0)", "setuptools (>=28.0.0)", "virtualenv (>=15.0.3)", "wheel"] - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "contourpy" -version = "1.0.7" -description = "Python library for calculating contours of 2D quadrilateral grids" -optional = false -python-versions = ">=3.8" -files = [ - {file = "contourpy-1.0.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:95c3acddf921944f241b6773b767f1cbce71d03307270e2d769fd584d5d1092d"}, - {file = "contourpy-1.0.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc1464c97579da9f3ab16763c32e5c5d5bb5fa1ec7ce509a4ca6108b61b84fab"}, - {file = "contourpy-1.0.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8acf74b5d383414401926c1598ed77825cd530ac7b463ebc2e4f46638f56cce6"}, - {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c71fdd8f1c0f84ffd58fca37d00ca4ebaa9e502fb49825484da075ac0b0b803"}, - {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f99e9486bf1bb979d95d5cffed40689cb595abb2b841f2991fc894b3452290e8"}, - {file = "contourpy-1.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87f4d8941a9564cda3f7fa6a6cd9b32ec575830780677932abdec7bcb61717b0"}, - {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9e20e5a1908e18aaa60d9077a6d8753090e3f85ca25da6e25d30dc0a9e84c2c6"}, - {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a877ada905f7d69b2a31796c4b66e31a8068b37aa9b78832d41c82fc3e056ddd"}, - {file = "contourpy-1.0.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6381fa66866b0ea35e15d197fc06ac3840a9b2643a6475c8fff267db8b9f1e69"}, - {file = "contourpy-1.0.7-cp310-cp310-win32.whl", hash = "sha256:3c184ad2433635f216645fdf0493011a4667e8d46b34082f5a3de702b6ec42e3"}, - {file = "contourpy-1.0.7-cp310-cp310-win_amd64.whl", hash = "sha256:3caea6365b13119626ee996711ab63e0c9d7496f65641f4459c60a009a1f3e80"}, - {file = "contourpy-1.0.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ed33433fc3820263a6368e532f19ddb4c5990855e4886088ad84fd7c4e561c71"}, - {file = "contourpy-1.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38e2e577f0f092b8e6774459317c05a69935a1755ecfb621c0a98f0e3c09c9a5"}, - {file = "contourpy-1.0.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ae90d5a8590e5310c32a7630b4b8618cef7563cebf649011da80874d0aa8f414"}, - {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130230b7e49825c98edf0b428b7aa1125503d91732735ef897786fe5452b1ec2"}, - {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58569c491e7f7e874f11519ef46737cea1d6eda1b514e4eb5ac7dab6aa864d02"}, - {file = "contourpy-1.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54d43960d809c4c12508a60b66cb936e7ed57d51fb5e30b513934a4a23874fae"}, - {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:152fd8f730c31fd67fe0ffebe1df38ab6a669403da93df218801a893645c6ccc"}, - {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9056c5310eb1daa33fc234ef39ebfb8c8e2533f088bbf0bc7350f70a29bde1ac"}, - {file = "contourpy-1.0.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a9d7587d2fdc820cc9177139b56795c39fb8560f540bba9ceea215f1f66e1566"}, - {file = "contourpy-1.0.7-cp311-cp311-win32.whl", hash = "sha256:4ee3ee247f795a69e53cd91d927146fb16c4e803c7ac86c84104940c7d2cabf0"}, - {file = "contourpy-1.0.7-cp311-cp311-win_amd64.whl", hash = "sha256:5caeacc68642e5f19d707471890f037a13007feba8427eb7f2a60811a1fc1350"}, - {file = "contourpy-1.0.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd7dc0e6812b799a34f6d12fcb1000539098c249c8da54f3566c6a6461d0dbad"}, - {file = "contourpy-1.0.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0f9d350b639db6c2c233d92c7f213d94d2e444d8e8fc5ca44c9706cf72193772"}, - {file = "contourpy-1.0.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e96a08b62bb8de960d3a6afbc5ed8421bf1a2d9c85cc4ea73f4bc81b4910500f"}, - {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:031154ed61f7328ad7f97662e48660a150ef84ee1bc8876b6472af88bf5a9b98"}, - {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e9ebb4425fc1b658e13bace354c48a933b842d53c458f02c86f371cecbedecc"}, - {file = "contourpy-1.0.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efb8f6d08ca7998cf59eaf50c9d60717f29a1a0a09caa46460d33b2924839dbd"}, - {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6c180d89a28787e4b73b07e9b0e2dac7741261dbdca95f2b489c4f8f887dd810"}, - {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b8d587cc39057d0afd4166083d289bdeff221ac6d3ee5046aef2d480dc4b503c"}, - {file = "contourpy-1.0.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:769eef00437edf115e24d87f8926955f00f7704bede656ce605097584f9966dc"}, - {file = "contourpy-1.0.7-cp38-cp38-win32.whl", hash = "sha256:62398c80ef57589bdbe1eb8537127321c1abcfdf8c5f14f479dbbe27d0322e66"}, - {file = "contourpy-1.0.7-cp38-cp38-win_amd64.whl", hash = "sha256:57119b0116e3f408acbdccf9eb6ef19d7fe7baf0d1e9aaa5381489bc1aa56556"}, - {file = "contourpy-1.0.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:30676ca45084ee61e9c3da589042c24a57592e375d4b138bd84d8709893a1ba4"}, - {file = "contourpy-1.0.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e927b3868bd1e12acee7cc8f3747d815b4ab3e445a28d2e5373a7f4a6e76ba1"}, - {file = "contourpy-1.0.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:366a0cf0fc079af5204801786ad7a1c007714ee3909e364dbac1729f5b0849e5"}, - {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89ba9bb365446a22411f0673abf6ee1fea3b2cf47b37533b970904880ceb72f3"}, - {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71b0bf0c30d432278793d2141362ac853859e87de0a7dee24a1cea35231f0d50"}, - {file = "contourpy-1.0.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7281244c99fd7c6f27c1c6bfafba878517b0b62925a09b586d88ce750a016d2"}, - {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b6d0f9e1d39dbfb3977f9dd79f156c86eb03e57a7face96f199e02b18e58d32a"}, - {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7f6979d20ee5693a1057ab53e043adffa1e7418d734c1532e2d9e915b08d8ec2"}, - {file = "contourpy-1.0.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5dd34c1ae752515318224cba7fc62b53130c45ac6a1040c8b7c1a223c46e8967"}, - {file = "contourpy-1.0.7-cp39-cp39-win32.whl", hash = "sha256:c5210e5d5117e9aec8c47d9156d1d3835570dd909a899171b9535cb4a3f32693"}, - {file = "contourpy-1.0.7-cp39-cp39-win_amd64.whl", hash = "sha256:60835badb5ed5f4e194a6f21c09283dd6e007664a86101431bf870d9e86266c4"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ce41676b3d0dd16dbcfabcc1dc46090aaf4688fd6e819ef343dbda5a57ef0161"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a011cf354107b47c58ea932d13b04d93c6d1d69b8b6dce885e642531f847566"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:31a55dccc8426e71817e3fe09b37d6d48ae40aae4ecbc8c7ad59d6893569c436"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69f8ff4db108815addd900a74df665e135dbbd6547a8a69333a68e1f6e368ac2"}, - {file = "contourpy-1.0.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efe99298ba37e37787f6a2ea868265465410822f7bea163edcc1bd3903354ea9"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a1e97b86f73715e8670ef45292d7cc033548266f07d54e2183ecb3c87598888f"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc331c13902d0f50845099434cd936d49d7a2ca76cb654b39691974cb1e4812d"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24847601071f740837aefb730e01bd169fbcaa610209779a78db7ebb6e6a7051"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abf298af1e7ad44eeb93501e40eb5a67abbf93b5d90e468d01fc0c4451971afa"}, - {file = "contourpy-1.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:64757f6460fc55d7e16ed4f1de193f362104285c667c112b50a804d482777edd"}, - {file = "contourpy-1.0.7.tar.gz", hash = "sha256:d8165a088d31798b59e91117d1f5fc3df8168d8b48c4acc10fc0df0d0bdbcc5e"}, -] - -[package.dependencies] -numpy = ">=1.16" - -[package.extras] -bokeh = ["bokeh", "chromedriver", "selenium"] -docs = ["furo", "sphinx-copybutton"] -mypy = ["contourpy[bokeh]", "docutils-stubs", "mypy (==0.991)", "types-Pillow"] -test = ["Pillow", "matplotlib", "pytest"] -test-no-images = ["pytest"] - -[[package]] -name = "cycler" -version = "0.11.0" -description = "Composable style cycles" -optional = false -python-versions = ">=3.6" -files = [ - {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, - {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, -] - -[[package]] -name = "cython" -version = "0.29.34" -description = "The Cython compiler for writing C extensions for the Python language." -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "Cython-0.29.34-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:742544024ddb74314e2d597accdb747ed76bd126e61fcf49940a5b5be0a8f381"}, - {file = "Cython-0.29.34-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:03daae07f8cbf797506446adae512c3dd86e7f27a62a541fa1ee254baf43e32c"}, - {file = "Cython-0.29.34-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5a8de3e793a576e40ca9b4f5518610cd416273c7dc5e254115656b6e4ec70663"}, - {file = "Cython-0.29.34-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:60969d38e6a456a67e7ef8ae20668eff54e32ba439d4068ccf2854a44275a30f"}, - {file = "Cython-0.29.34-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:21b88200620d80cfe193d199b259cdad2b9af56f916f0f7f474b5a3631ca0caa"}, - {file = "Cython-0.29.34-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:308c8f1e58bf5e6e8a1c4dcf8abbd2d13d0f9b1e582f4d9ae8b89857342d8bb5"}, - {file = "Cython-0.29.34-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:d8f822fb6ecd5d88c42136561f82960612421154fc5bf23c57103a367bb91356"}, - {file = "Cython-0.29.34-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56866323f1660cecb4d5ff3a1fba92a56b91b7cfae0a8253777aa4bdb3bdf9a8"}, - {file = "Cython-0.29.34-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e971db8aeb12e7c0697cefafe65eefcc33ff1224ae3d8c7f83346cbc42c6c270"}, - {file = "Cython-0.29.34-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4401270b0dc464c23671e2e9d52a60985f988318febaf51b047190e855bbe7d"}, - {file = "Cython-0.29.34-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:dce0a36d163c05ae8b21200059511217d79b47baf2b7b0f926e8367bd7a3cc24"}, - {file = "Cython-0.29.34-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dbd79221869ee9a6ccc4953b2c8838bb6ae08ab4d50ea4b60d7894f03739417b"}, - {file = "Cython-0.29.34-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a0f4229df10bc4545ebbeaaf96ebb706011d8b333e54ed202beb03f2bee0a50e"}, - {file = "Cython-0.29.34-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fd1ea21f1cebf33ae288caa0f3e9b5563a709f4df8925d53bad99be693fc0d9b"}, - {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d7ef5f68f4c5baa93349ea54a352f8716d18bee9a37f3e93eff38a5d4e9b7262"}, - {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:459994d1de0f99bb18fad9f2325f760c4b392b1324aef37bcc1cd94922dfce41"}, - {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:1d6c809e2f9ce5950bbc52a1d2352ef3d4fc56186b64cb0d50c8c5a3c1d17661"}, - {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f674ceb5f722d364395f180fbac273072fc1a266aab924acc9cfd5afc645aae1"}, - {file = "Cython-0.29.34-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9489de5b2044dcdfd9d6ca8242a02d560137b3c41b1f5ae1c4f6707d66d6e44d"}, - {file = "Cython-0.29.34-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:5c121dc185040f4333bfded68963b4529698e1b6d994da56be32c97a90c896b6"}, - {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:b6149f7cc5b31bccb158c5b968e5a8d374fdc629792e7b928a9b66e08b03fca5"}, - {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0ab3cbf3d62b0354631a45dc93cfcdf79098663b1c65a6033af4a452b52217a7"}, - {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:4a2723447d1334484681d5aede34184f2da66317891f94b80e693a2f96a8f1a7"}, - {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e40cf86aadc29ecd1cb6de67b0d9488705865deea4fc185c7ad56d7a6fc78703"}, - {file = "Cython-0.29.34-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8c3cd8bb8e880a3346f5685601004d96e0a2221e73edcaeea57ea848618b4ac6"}, - {file = "Cython-0.29.34-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0e9032cd650b0cb1d2c2ef2623f5714c14d14c28d7647d589c3eeed0baf7428e"}, - {file = "Cython-0.29.34-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:bdb3285660e3068438791ace7dd7b1efd6b442a10b5c8d7a4f0c9d184d08c8ed"}, - {file = "Cython-0.29.34-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a8ad755f9364e720f10a36734a1c7a5ced5c679446718b589259261438a517c9"}, - {file = "Cython-0.29.34-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:7595d29eaee95633dd8060f50f0e54b27472d01587659557ebcfe39da3ea946b"}, - {file = "Cython-0.29.34-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6ef7879668214d80ea3914c17e7d4e1ebf4242e0dd4dabe95ca5ccbe75589a5"}, - {file = "Cython-0.29.34-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ccb223b5f0fd95d8d27561efc0c14502c0945f1a32274835831efa5d5baddfc1"}, - {file = "Cython-0.29.34-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:11b1b278b8edef215caaa5250ad65a10023bfa0b5a93c776552248fc6f60098d"}, - {file = "Cython-0.29.34-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:5718319a01489688fdd22ddebb8e2fcbbd60be5f30de4336ea7063c3ae29fbe5"}, - {file = "Cython-0.29.34-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:cfb2302ef617d647ee590a4c0a00ba3c2da05f301dcefe7721125565d2e51351"}, - {file = "Cython-0.29.34-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:67b850cf46b861bc27226d31e1d87c0e69869a02f8d3cc5d5bef549764029879"}, - {file = "Cython-0.29.34-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0963266dad685812c1dbb758fcd4de78290e3adc7db271c8664dcde27380b13e"}, - {file = "Cython-0.29.34-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7879992487d9060a61393eeefe00d299210256928dce44d887b6be313d342bac"}, - {file = "Cython-0.29.34-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:44733366f1604b0c327613b6918469284878d2f5084297d10d26072fc6948d51"}, - {file = "Cython-0.29.34-py2.py3-none-any.whl", hash = "sha256:be4f6b7be75a201c290c8611c0978549c60353890204573078e865423dbe3c83"}, - {file = "Cython-0.29.34.tar.gz", hash = "sha256:1909688f5d7b521a60c396d20bba9e47a1b2d2784bfb085401e1e1e7d29a29a8"}, -] - -[[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" -optional = false -python-versions = ">=3.5" -files = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, -] - -[[package]] -name = "entrypoints" -version = "0.4" -description = "Discover and load entry points from installed packages." -optional = false -python-versions = ">=3.6" -files = [ - {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, - {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, -] - -[[package]] -name = "fairseq" -version = "0.12.2" -description = "Facebook AI Research Sequence-to-Sequence Toolkit" -optional = false -python-versions = "*" -files = [ - {file = "fairseq-0.12.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fe65b07c5121b7cda0c7a17166994a6b0059259ce37881b6daa117b8c209b662"}, - {file = "fairseq-0.12.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0543905012e39f00bd8c3f3781d9f49e76ab309801eb2eb7de250f5984df0de3"}, - {file = "fairseq-0.12.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4877d65346797fc580a3a7e6e2364d2331a0026ef099c22eb8311441e49c2c6"}, - {file = "fairseq-0.12.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:26454f334ca705c67f898846dff34e14c148fcdaf53b4f52d64209773b509347"}, - {file = "fairseq-0.12.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3b8c8b6dc368d2fd23a06ff613a2af05959eee275fe90846d7cffef4a43c522a"}, - {file = "fairseq-0.12.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:08fa308c760f995cdc13d9c385e2b9d923a78b48275d8b4d78f3a854c71a8f29"}, - {file = "fairseq-0.12.2.tar.gz", hash = "sha256:34f1b18426bf3844714534162f065ab733e049597476daa35fffb4d06a92b524"}, -] - -[package.dependencies] -bitarray = "*" -cffi = "*" -cython = "*" -hydra-core = ">=1.0.7,<1.1" -numpy = {version = "*", markers = "python_version >= \"3.7\""} -omegaconf = "<2.1" -regex = "*" -sacrebleu = ">=1.4.12" -torch = "*" -torchaudio = ">=0.8.0" -tqdm = "*" - -[[package]] -name = "faiss-cpu" -version = "1.7.3" -description = "A library for efficient similarity search and clustering of dense vectors." -optional = false -python-versions = "*" -files = [ - {file = "faiss-cpu-1.7.3.tar.gz", hash = "sha256:cb71fe3f2934732d157d9d8cfb6ed2dd4020a0065571c84842ff6a3f0beab310"}, - {file = "faiss_cpu-1.7.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:343f025e0846239d987d0c719772387ad685b74e5ef62b2e5616cabef9062729"}, - {file = "faiss_cpu-1.7.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8b7b1cf693d7c24b5a633ff024717bd715fec501af4854357da0805b4899bcec"}, - {file = "faiss_cpu-1.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c37e5fc0a266839844798a53dd42dd6afbee0c5905611f3f278297053fccbd7"}, - {file = "faiss_cpu-1.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0628f7b0c6263ef4431995bb4f5f39833f999e96e6663935cbf0a1f2243dc4ac"}, - {file = "faiss_cpu-1.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:e22d1887c617156a673665c913ee82a30bfc1a3bc939ba8500b61328bce5a625"}, - {file = "faiss_cpu-1.7.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6d411449a5f3c3abfcafadaac3190ab1ab206023fc9110da86649506dcbe8a27"}, - {file = "faiss_cpu-1.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a10ea8622908f9f9ca4003e66da809dfad4af5c7d9fb7f582722d703bbc6c8bd"}, - {file = "faiss_cpu-1.7.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c5ced43ae058a62f63b12194ec9aa4c34066b0ea813ecbd936c65b7d52848c8"}, - {file = "faiss_cpu-1.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3df6371012248dea8e9509949e2d2c6d73dea7c1bdaa4ba4563eb1c3cd8021a6"}, - {file = "faiss_cpu-1.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:8b6ff7854c3f46104718c6b34e81cd48c156d970dd87703c5122ca90217bb8dc"}, - {file = "faiss_cpu-1.7.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ab6314a8fbcce11dc3ecb6f48dda8c4ec274ed11c1f336f599f480bf0561442c"}, - {file = "faiss_cpu-1.7.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:877c0bbf4c4a1806d88e091aba4c91ff3fa35c3ede5663b7fafc5b39247a369e"}, - {file = "faiss_cpu-1.7.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f199be10d30ecc6ed65350931006eca01b7bb8faa27d63069318eea0f6a0c1"}, - {file = "faiss_cpu-1.7.3-cp37-cp37m-win_amd64.whl", hash = "sha256:1ca2b7cdbfdcc6a2e8fa75a09594916b50ec8260913ca48334dc3ce797179b5f"}, - {file = "faiss_cpu-1.7.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7b3f91856c19cfb8464178bab7e8ea94a391f6947b556be6754f9fc10b3c25fb"}, - {file = "faiss_cpu-1.7.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a238a0ef4d36c614d6f60e1ea308288b3920091638a3687f708de6071d007c1"}, - {file = "faiss_cpu-1.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af53bee502c629eaaaf8b5ec648484a726be0fd2768ad4ef2bd4b829384b2682"}, - {file = "faiss_cpu-1.7.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:441d1c305595d925138f2cde63dabe8c10ee05fc8ad66bf750e278a7e8c409bd"}, - {file = "faiss_cpu-1.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:2766cc14b9004c1aae3b3943e693c3a9566eb1a25168b681981f9048276fe1e7"}, - {file = "faiss_cpu-1.7.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:20ef191bb6164c8e794b11d20427568a75d15980b6d66732071e9aa57ea06e2d"}, - {file = "faiss_cpu-1.7.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c57c293c4682066955626c2a2956be9a3b92594f69ed1a33abd72260a6911b69"}, - {file = "faiss_cpu-1.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd128170446ff3c3e28d89e813d32cd04f17fa3025794778a01a0d81524275dc"}, - {file = "faiss_cpu-1.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a14d832b5361ce9af21977eb1dcdebe23b9edcc12aad40316df7ca1bd86bc6b5"}, - {file = "faiss_cpu-1.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:52df8895c5e59d1c9eda368a63790381a6f7fceddb22bed08f9c90a706d8a148"}, -] - -[[package]] -name = "fastapi" -version = "0.95.2" -description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" -optional = false -python-versions = ">=3.7" -files = [ - {file = "fastapi-0.95.2-py3-none-any.whl", hash = "sha256:d374dbc4ef2ad9b803899bd3360d34c534adc574546e25314ab72c0c4411749f"}, - {file = "fastapi-0.95.2.tar.gz", hash = "sha256:4d9d3e8c71c73f11874bcf5e33626258d143252e329a01002f767306c64fb982"}, -] - -[package.dependencies] -pydantic = ">=1.6.2,<1.7 || >1.7,<1.7.1 || >1.7.1,<1.7.2 || >1.7.2,<1.7.3 || >1.7.3,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0" -starlette = ">=0.27.0,<0.28.0" - -[package.extras] -all = ["email-validator (>=1.1.1)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] -dev = ["pre-commit (>=2.17.0,<3.0.0)", "ruff (==0.0.138)", "uvicorn[standard] (>=0.12.0,<0.21.0)"] -doc = ["mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-markdownextradata-plugin (>=0.1.7,<0.3.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pyyaml (>=5.3.1,<7.0.0)", "typer-cli (>=0.0.13,<0.0.14)", "typer[all] (>=0.6.1,<0.8.0)"] -test = ["anyio[trio] (>=3.2.1,<4.0.0)", "black (==23.1.0)", "coverage[toml] (>=6.5.0,<8.0)", "databases[sqlite] (>=0.3.2,<0.7.0)", "email-validator (>=1.1.1,<2.0.0)", "flask (>=1.1.2,<3.0.0)", "httpx (>=0.23.0,<0.24.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.982)", "orjson (>=3.2.1,<4.0.0)", "passlib[bcrypt] (>=1.7.2,<2.0.0)", "peewee (>=3.13.3,<4.0.0)", "pytest (>=7.1.3,<8.0.0)", "python-jose[cryptography] (>=3.3.0,<4.0.0)", "python-multipart (>=0.0.5,<0.0.7)", "pyyaml (>=5.3.1,<7.0.0)", "ruff (==0.0.138)", "sqlalchemy (>=1.3.18,<1.4.43)", "types-orjson (==3.6.2)", "types-ujson (==5.7.0.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0)"] - -[[package]] -name = "ffmpeg-python" -version = "0.2.0" -description = "Python bindings for FFmpeg - with complex filtering support" -optional = false -python-versions = "*" -files = [ - {file = "ffmpeg-python-0.2.0.tar.gz", hash = "sha256:65225db34627c578ef0e11c8b1eb528bb35e024752f6f10b78c011f6f64c4127"}, - {file = "ffmpeg_python-0.2.0-py3-none-any.whl", hash = "sha256:ac441a0404e053f8b6a1113a77c0f452f1cfc62f6344a769475ffdc0f56c23c5"}, -] - -[package.dependencies] -future = "*" - -[package.extras] -dev = ["Sphinx (==2.1.0)", "future (==0.17.1)", "numpy (==1.16.4)", "pytest (==4.6.1)", "pytest-mock (==1.10.4)", "tox (==3.12.1)"] - -[[package]] -name = "ffmpy" -version = "0.3.0" -description = "A simple Python wrapper for ffmpeg" -optional = false -python-versions = "*" -files = [ - {file = "ffmpy-0.3.0.tar.gz", hash = "sha256:757591581eee25b4a50ac9ffb9b58035a2794533db47e0512f53fb2d7b6f9adc"}, -] - -[[package]] -name = "filelock" -version = "3.10.7" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.7" -files = [ - {file = "filelock-3.10.7-py3-none-any.whl", hash = "sha256:bde48477b15fde2c7e5a0713cbe72721cb5a5ad32ee0b8f419907960b9d75536"}, - {file = "filelock-3.10.7.tar.gz", hash = "sha256:892be14aa8efc01673b5ed6589dbccb95f9a8596f0507e232626155495c18105"}, -] - -[package.extras] -docs = ["furo (>=2022.12.7)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.2)", "diff-cover (>=7.5)", "pytest (>=7.2.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] - -[[package]] -name = "fonttools" -version = "4.39.3" -description = "Tools to manipulate font files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fonttools-4.39.3-py3-none-any.whl", hash = "sha256:64c0c05c337f826183637570ac5ab49ee220eec66cf50248e8df527edfa95aeb"}, - {file = "fonttools-4.39.3.zip", hash = "sha256:9234b9f57b74e31b192c3fc32ef1a40750a8fbc1cd9837a7b7bfc4ca4a5c51d7"}, -] - -[package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.0.0)", "xattr", "zopfli (>=0.1.4)"] -graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres", "scipy"] -lxml = ["lxml (>=4.0,<5)"] -pathops = ["skia-pathops (>=0.5.0)"] -plot = ["matplotlib"] -repacker = ["uharfbuzz (>=0.23.0)"] -symfont = ["sympy"] -type1 = ["xattr"] -ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=15.0.0)"] -woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] - -[[package]] -name = "frozenlist" -version = "1.3.3" -description = "A list-like structure which implements collections.abc.MutableSequence" -optional = false -python-versions = ">=3.7" -files = [ - {file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff8bf625fe85e119553b5383ba0fb6aa3d0ec2ae980295aaefa552374926b3f4"}, - {file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dfbac4c2dfcc082fcf8d942d1e49b6aa0766c19d3358bd86e2000bf0fa4a9cf0"}, - {file = "frozenlist-1.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b1c63e8d377d039ac769cd0926558bb7068a1f7abb0f003e3717ee003ad85530"}, - {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fdfc24dcfce5b48109867c13b4cb15e4660e7bd7661741a391f821f23dfdca7"}, - {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c926450857408e42f0bbc295e84395722ce74bae69a3b2aa2a65fe22cb14b99"}, - {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1841e200fdafc3d51f974d9d377c079a0694a8f06de2e67b48150328d66d5483"}, - {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f470c92737afa7d4c3aacc001e335062d582053d4dbe73cda126f2d7031068dd"}, - {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:783263a4eaad7c49983fe4b2e7b53fa9770c136c270d2d4bbb6d2192bf4d9caf"}, - {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:924620eef691990dfb56dc4709f280f40baee568c794b5c1885800c3ecc69816"}, - {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae4dc05c465a08a866b7a1baf360747078b362e6a6dbeb0c57f234db0ef88ae0"}, - {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:bed331fe18f58d844d39ceb398b77d6ac0b010d571cba8267c2e7165806b00ce"}, - {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:02c9ac843e3390826a265e331105efeab489ffaf4dd86384595ee8ce6d35ae7f"}, - {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9545a33965d0d377b0bc823dcabf26980e77f1b6a7caa368a365a9497fb09420"}, - {file = "frozenlist-1.3.3-cp310-cp310-win32.whl", hash = "sha256:d5cd3ab21acbdb414bb6c31958d7b06b85eeb40f66463c264a9b343a4e238642"}, - {file = "frozenlist-1.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:b756072364347cb6aa5b60f9bc18e94b2f79632de3b0190253ad770c5df17db1"}, - {file = "frozenlist-1.3.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b4395e2f8d83fbe0c627b2b696acce67868793d7d9750e90e39592b3626691b7"}, - {file = "frozenlist-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14143ae966a6229350021384870458e4777d1eae4c28d1a7aa47f24d030e6678"}, - {file = "frozenlist-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5d8860749e813a6f65bad8285a0520607c9500caa23fea6ee407e63debcdbef6"}, - {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23d16d9f477bb55b6154654e0e74557040575d9d19fe78a161bd33d7d76808e8"}, - {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb82dbba47a8318e75f679690190c10a5e1f447fbf9df41cbc4c3afd726d88cb"}, - {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9309869032abb23d196cb4e4db574232abe8b8be1339026f489eeb34a4acfd91"}, - {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a97b4fe50b5890d36300820abd305694cb865ddb7885049587a5678215782a6b"}, - {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c188512b43542b1e91cadc3c6c915a82a5eb95929134faf7fd109f14f9892ce4"}, - {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:303e04d422e9b911a09ad499b0368dc551e8c3cd15293c99160c7f1f07b59a48"}, - {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0771aed7f596c7d73444c847a1c16288937ef988dc04fb9f7be4b2aa91db609d"}, - {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:66080ec69883597e4d026f2f71a231a1ee9887835902dbe6b6467d5a89216cf6"}, - {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:41fe21dc74ad3a779c3d73a2786bdf622ea81234bdd4faf90b8b03cad0c2c0b4"}, - {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f20380df709d91525e4bee04746ba612a4df0972c1b8f8e1e8af997e678c7b81"}, - {file = "frozenlist-1.3.3-cp311-cp311-win32.whl", hash = "sha256:f30f1928162e189091cf4d9da2eac617bfe78ef907a761614ff577ef4edfb3c8"}, - {file = "frozenlist-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:a6394d7dadd3cfe3f4b3b186e54d5d8504d44f2d58dcc89d693698e8b7132b32"}, - {file = "frozenlist-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8df3de3a9ab8325f94f646609a66cbeeede263910c5c0de0101079ad541af332"}, - {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0693c609e9742c66ba4870bcee1ad5ff35462d5ffec18710b4ac89337ff16e27"}, - {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd4210baef299717db0a600d7a3cac81d46ef0e007f88c9335db79f8979c0d3d"}, - {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:394c9c242113bfb4b9aa36e2b80a05ffa163a30691c7b5a29eba82e937895d5e"}, - {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6327eb8e419f7d9c38f333cde41b9ae348bec26d840927332f17e887a8dcb70d"}, - {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e24900aa13212e75e5b366cb9065e78bbf3893d4baab6052d1aca10d46d944c"}, - {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3843f84a6c465a36559161e6c59dce2f2ac10943040c2fd021cfb70d58c4ad56"}, - {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:84610c1502b2461255b4c9b7d5e9c48052601a8957cd0aea6ec7a7a1e1fb9420"}, - {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c21b9aa40e08e4f63a2f92ff3748e6b6c84d717d033c7b3438dd3123ee18f70e"}, - {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:efce6ae830831ab6a22b9b4091d411698145cb9b8fc869e1397ccf4b4b6455cb"}, - {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:40de71985e9042ca00b7953c4f41eabc3dc514a2d1ff534027f091bc74416401"}, - {file = "frozenlist-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:180c00c66bde6146a860cbb81b54ee0df350d2daf13ca85b275123bbf85de18a"}, - {file = "frozenlist-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9bbbcedd75acdfecf2159663b87f1bb5cfc80e7cd99f7ddd9d66eb98b14a8411"}, - {file = "frozenlist-1.3.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:034a5c08d36649591be1cbb10e09da9f531034acfe29275fc5454a3b101ce41a"}, - {file = "frozenlist-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba64dc2b3b7b158c6660d49cdb1d872d1d0bf4e42043ad8d5006099479a194e5"}, - {file = "frozenlist-1.3.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:47df36a9fe24054b950bbc2db630d508cca3aa27ed0566c0baf661225e52c18e"}, - {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:008a054b75d77c995ea26629ab3a0c0d7281341f2fa7e1e85fa6153ae29ae99c"}, - {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:841ea19b43d438a80b4de62ac6ab21cfe6827bb8a9dc62b896acc88eaf9cecba"}, - {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e235688f42b36be2b6b06fc37ac2126a73b75fb8d6bc66dd632aa35286238703"}, - {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca713d4af15bae6e5d79b15c10c8522859a9a89d3b361a50b817c98c2fb402a2"}, - {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ac5995f2b408017b0be26d4a1d7c61bce106ff3d9e3324374d66b5964325448"}, - {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4ae8135b11652b08a8baf07631d3ebfe65a4c87909dbef5fa0cdde440444ee4"}, - {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4ea42116ceb6bb16dbb7d526e242cb6747b08b7710d9782aa3d6732bd8d27649"}, - {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:810860bb4bdce7557bc0febb84bbd88198b9dbc2022d8eebe5b3590b2ad6c842"}, - {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ee78feb9d293c323b59a6f2dd441b63339a30edf35abcb51187d2fc26e696d13"}, - {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0af2e7c87d35b38732e810befb9d797a99279cbb85374d42ea61c1e9d23094b3"}, - {file = "frozenlist-1.3.3-cp38-cp38-win32.whl", hash = "sha256:899c5e1928eec13fd6f6d8dc51be23f0d09c5281e40d9cf4273d188d9feeaf9b"}, - {file = "frozenlist-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:7f44e24fa70f6fbc74aeec3e971f60a14dde85da364aa87f15d1be94ae75aeef"}, - {file = "frozenlist-1.3.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2b07ae0c1edaa0a36339ec6cce700f51b14a3fc6545fdd32930d2c83917332cf"}, - {file = "frozenlist-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ebb86518203e12e96af765ee89034a1dbb0c3c65052d1b0c19bbbd6af8a145e1"}, - {file = "frozenlist-1.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5cf820485f1b4c91e0417ea0afd41ce5cf5965011b3c22c400f6d144296ccbc0"}, - {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c11e43016b9024240212d2a65043b70ed8dfd3b52678a1271972702d990ac6d"}, - {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8fa3c6e3305aa1146b59a09b32b2e04074945ffcfb2f0931836d103a2c38f936"}, - {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:352bd4c8c72d508778cf05ab491f6ef36149f4d0cb3c56b1b4302852255d05d5"}, - {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65a5e4d3aa679610ac6e3569e865425b23b372277f89b5ef06cf2cdaf1ebf22b"}, - {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e2c1185858d7e10ff045c496bbf90ae752c28b365fef2c09cf0fa309291669"}, - {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f163d2fd041c630fed01bc48d28c3ed4a3b003c00acd396900e11ee5316b56bb"}, - {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:05cdb16d09a0832eedf770cb7bd1fe57d8cf4eaf5aced29c4e41e3f20b30a784"}, - {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:8bae29d60768bfa8fb92244b74502b18fae55a80eac13c88eb0b496d4268fd2d"}, - {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eedab4c310c0299961ac285591acd53dc6723a1ebd90a57207c71f6e0c2153ab"}, - {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3bbdf44855ed8f0fbcd102ef05ec3012d6a4fd7c7562403f76ce6a52aeffb2b1"}, - {file = "frozenlist-1.3.3-cp39-cp39-win32.whl", hash = "sha256:efa568b885bca461f7c7b9e032655c0c143d305bf01c30caf6db2854a4532b38"}, - {file = "frozenlist-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfe33efc9cb900a4c46f91a5ceba26d6df370ffddd9ca386eb1d4f0ad97b9ea9"}, - {file = "frozenlist-1.3.3.tar.gz", hash = "sha256:58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a"}, -] - -[[package]] -name = "fsspec" -version = "2023.3.0" -description = "File-system specification" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fsspec-2023.3.0-py3-none-any.whl", hash = "sha256:bf57215e19dbfa4fe7edae53040cc1deef825e3b1605cca9a8d2c2fadd2328a0"}, - {file = "fsspec-2023.3.0.tar.gz", hash = "sha256:24e635549a590d74c6c18274ddd3ffab4753341753e923408b1904eaabafe04d"}, -] - -[package.extras] -abfs = ["adlfs"] -adl = ["adlfs"] -arrow = ["pyarrow (>=1)"] -dask = ["dask", "distributed"] -dropbox = ["dropbox", "dropboxdrivefs", "requests"] -fuse = ["fusepy"] -gcs = ["gcsfs"] -git = ["pygit2"] -github = ["requests"] -gs = ["gcsfs"] -gui = ["panel"] -hdfs = ["pyarrow (>=1)"] -http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "requests"] -libarchive = ["libarchive-c"] -oci = ["ocifs"] -s3 = ["s3fs"] -sftp = ["paramiko"] -smb = ["smbprotocol"] -ssh = ["paramiko"] -tqdm = ["tqdm"] - -[[package]] -name = "functorch" -version = "2.0.0" -description = "JAX-like composable function transforms for PyTorch" -optional = false -python-versions = "*" -files = [ - {file = "functorch-2.0.0-py2.py3-none-any.whl", hash = "sha256:ca21ace6b9048e2ec6d132fa0fd18c776eb165ca1c91ef7e3584fdc668eaa4ea"}, -] - -[package.dependencies] -torch = ">=2.0,<2.1" - -[package.extras] -aot = ["networkx"] - -[[package]] -name = "future" -version = "0.18.3" -description = "Clean single-source support for Python 3 and 2" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "future-0.18.3.tar.gz", hash = "sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307"}, -] - -[[package]] -name = "google-auth" -version = "2.17.1" -description = "Google Authentication Library" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" -files = [ - {file = "google-auth-2.17.1.tar.gz", hash = "sha256:8f379b46bad381ad2a0b989dfb0c13ad28d3c2a79f27348213f8946a1d15d55a"}, - {file = "google_auth-2.17.1-py2.py3-none-any.whl", hash = "sha256:357ff22a75b4c0f6093470f21816a825d2adee398177569824e37b6c10069e19"}, -] - -[package.dependencies] -cachetools = ">=2.0.0,<6.0" -pyasn1-modules = ">=0.2.1" -rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""} -six = ">=1.9.0" - -[package.extras] -aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "requests (>=2.20.0,<3.0.0dev)"] -enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] -pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] -reauth = ["pyu2f (>=0.1.5)"] -requests = ["requests (>=2.20.0,<3.0.0dev)"] - -[[package]] -name = "google-auth-oauthlib" -version = "1.0.0" -description = "Google Authentication Library" -optional = false -python-versions = ">=3.6" -files = [ - {file = "google-auth-oauthlib-1.0.0.tar.gz", hash = "sha256:e375064964820b47221a7e1b7ee1fd77051b6323c3f9e3e19785f78ab67ecfc5"}, - {file = "google_auth_oauthlib-1.0.0-py2.py3-none-any.whl", hash = "sha256:95880ca704928c300f48194d1770cf5b1462835b6e49db61445a520f793fd5fb"}, -] - -[package.dependencies] -google-auth = ">=2.15.0" -requests-oauthlib = ">=0.7.0" - -[package.extras] -tool = ["click (>=6.0.0)"] - -[[package]] -name = "gradio" -version = "3.34.0" -description = "Python library for easily interacting with trained machine learning models" -optional = false -python-versions = ">=3.7" -files = [ - {file = "gradio-3.34.0-py3-none-any.whl", hash = "sha256:1cd8b25b598d983561d64f0a039af819382f1376c676aa9f84972c46b6875741"}, - {file = "gradio-3.34.0.tar.gz", hash = "sha256:fd7fa7257ffc749f9dc7c297eba554eaa1e5acd1a5f9c973250b2080932d6a41"}, -] - -[package.dependencies] -aiofiles = "*" -aiohttp = "*" -altair = ">=4.2.0" -fastapi = "*" -ffmpy = "*" -gradio-client = ">=0.2.6" -httpx = "*" -huggingface-hub = ">=0.14.0" -jinja2 = "*" -markdown-it-py = {version = ">=2.0.0", extras = ["linkify"]} -markupsafe = "*" -matplotlib = "*" -mdit-py-plugins = "<=0.3.3" -numpy = "*" -orjson = "*" -pandas = "*" -pillow = "*" -pydantic = "*" -pydub = "*" -pygments = ">=2.12.0" -python-multipart = "*" -pyyaml = "*" -requests = "*" -semantic-version = "*" -typing-extensions = "*" -uvicorn = ">=0.14.0" -websockets = ">=10.0" - -[[package]] -name = "gradio-client" -version = "0.2.7" -description = "Python library for easily interacting with trained machine learning models" -optional = false -python-versions = ">=3.8" -files = [ - {file = "gradio_client-0.2.7-py3-none-any.whl", hash = "sha256:4a7ec6bb1341c626051f1ed24d50cb960ff1a4cd1a5db031dd4caaf1ee7d2d0a"}, - {file = "gradio_client-0.2.7.tar.gz", hash = "sha256:c83008df8a1dd3f81a290c0a24c03d0ab70317741991b60f713620ed39ad8f12"}, -] - -[package.dependencies] -fsspec = "*" -httpx = "*" -huggingface-hub = ">=0.13.0" -packaging = "*" -requests = "*" -typing-extensions = "*" -websockets = "*" - -[[package]] -name = "grpcio" -version = "1.53.0" -description = "HTTP/2-based RPC framework" -optional = false -python-versions = ">=3.7" -files = [ - {file = "grpcio-1.53.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:752d2949b40e12e6ad3ed8cc552a65b54d226504f6b1fb67cab2ccee502cc06f"}, - {file = "grpcio-1.53.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:8a48fd3a7222be226bb86b7b413ad248f17f3101a524018cdc4562eeae1eb2a3"}, - {file = "grpcio-1.53.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:f3e837d29f0e1b9d6e7b29d569e2e9b0da61889e41879832ea15569c251c303a"}, - {file = "grpcio-1.53.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aef7d30242409c3aa5839b501e877e453a2c8d3759ca8230dd5a21cda029f046"}, - {file = "grpcio-1.53.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6f90698b5d1c5dd7b3236cd1fa959d7b80e17923f918d5be020b65f1c78b173"}, - {file = "grpcio-1.53.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a96c3c7f564b263c5d7c0e49a337166c8611e89c4c919f66dba7b9a84abad137"}, - {file = "grpcio-1.53.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ee81349411648d1abc94095c68cd25e3c2812e4e0367f9a9355be1e804a5135c"}, - {file = "grpcio-1.53.0-cp310-cp310-win32.whl", hash = "sha256:fdc6191587de410a184550d4143e2b24a14df495c86ca15e59508710681690ac"}, - {file = "grpcio-1.53.0-cp310-cp310-win_amd64.whl", hash = "sha256:658ffe1e39171be00490db5bd3b966f79634ac4215a1eb9a85c6cd6783bf7f6e"}, - {file = "grpcio-1.53.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:1b172e6d497191940c4b8d75b53de82dc252e15b61de2951d577ec5b43316b29"}, - {file = "grpcio-1.53.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:82434ba3a5935e47908bc861ce1ebc43c2edfc1001d235d6e31e5d3ed55815f7"}, - {file = "grpcio-1.53.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:1c734a2d4843e4e14ececf5600c3c4750990ec319e1299db7e4f0d02c25c1467"}, - {file = "grpcio-1.53.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6a2ead3de3b2d53119d473aa2f224030257ef33af1e4ddabd4afee1dea5f04c"}, - {file = "grpcio-1.53.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a34d6e905f071f9b945cabbcc776e2055de1fdb59cd13683d9aa0a8f265b5bf9"}, - {file = "grpcio-1.53.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eaf8e3b97caaf9415227a3c6ca5aa8d800fecadd526538d2bf8f11af783f1550"}, - {file = "grpcio-1.53.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:da95778d37be8e4e9afca771a83424f892296f5dfb2a100eda2571a1d8bbc0dc"}, - {file = "grpcio-1.53.0-cp311-cp311-win32.whl", hash = "sha256:e4f513d63df6336fd84b74b701f17d1bb3b64e9d78a6ed5b5e8a198bbbe8bbfa"}, - {file = "grpcio-1.53.0-cp311-cp311-win_amd64.whl", hash = "sha256:ddb2511fbbb440ed9e5c9a4b9b870f2ed649b7715859fd6f2ebc585ee85c0364"}, - {file = "grpcio-1.53.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:2a912397eb8d23c177d6d64e3c8bc46b8a1c7680b090d9f13a640b104aaec77c"}, - {file = "grpcio-1.53.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:55930c56b8f5b347d6c8c609cc341949a97e176c90f5cbb01d148d778f3bbd23"}, - {file = "grpcio-1.53.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:6601d812105583948ab9c6e403a7e2dba6e387cc678c010e74f2d6d589d1d1b3"}, - {file = "grpcio-1.53.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c705e0c21acb0e8478a00e7e773ad0ecdb34bd0e4adc282d3d2f51ba3961aac7"}, - {file = "grpcio-1.53.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba074af9ca268ad7b05d3fc2b920b5fb3c083da94ab63637aaf67f4f71ecb755"}, - {file = "grpcio-1.53.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:14817de09317dd7d3fbc8272864288320739973ef0f4b56bf2c0032349da8cdf"}, - {file = "grpcio-1.53.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c7ad9fbedb93f331c2e9054e202e95cf825b885811f1bcbbdfdc301e451442db"}, - {file = "grpcio-1.53.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dad5b302a4c21c604d88a5d441973f320134e6ff6a84ecef9c1139e5ffd466f6"}, - {file = "grpcio-1.53.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:fa8eaac75d3107e3f5465f2c9e3bbd13db21790c6e45b7de1756eba16b050aca"}, - {file = "grpcio-1.53.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:104a2210edd3776c38448b4f76c2f16e527adafbde171fc72a8a32976c20abc7"}, - {file = "grpcio-1.53.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:dbc1ba968639c1d23476f75c356e549e7bbf2d8d6688717dcab5290e88e8482b"}, - {file = "grpcio-1.53.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:95952d3fe795b06af29bb8ec7bbf3342cdd867fc17b77cc25e6733d23fa6c519"}, - {file = "grpcio-1.53.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f144a790f14c51b8a8e591eb5af40507ffee45ea6b818c2482f0457fec2e1a2e"}, - {file = "grpcio-1.53.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0698c094688a2dd4c7c2f2c0e3e142cac439a64d1cef6904c97f6cde38ba422f"}, - {file = "grpcio-1.53.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6b6d60b0958be711bab047e9f4df5dbbc40367955f8651232bfdcdd21450b9ab"}, - {file = "grpcio-1.53.0-cp38-cp38-win32.whl", hash = "sha256:1948539ce78805d4e6256ab0e048ec793956d54787dc9d6777df71c1d19c7f81"}, - {file = "grpcio-1.53.0-cp38-cp38-win_amd64.whl", hash = "sha256:df9ba1183b3f649210788cf80c239041dddcb375d6142d8bccafcfdf549522cd"}, - {file = "grpcio-1.53.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:19caa5b7282a89b799e63776ff602bb39604f7ca98db6df27e2de06756ae86c3"}, - {file = "grpcio-1.53.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:b5bd026ac928c96cc23149e6ef79183125542062eb6d1ccec34c0a37e02255e7"}, - {file = "grpcio-1.53.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:7dc8584ca6c015ad82e186e82f4c0fe977394588f66b8ecfc4ec873285314619"}, - {file = "grpcio-1.53.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2eddaae8af625e45b5c8500dcca1043264d751a6872cde2eda5022df8a336959"}, - {file = "grpcio-1.53.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5fb6f3d7824696c1c9f2ad36ddb080ba5a86f2d929ef712d511b4d9972d3d27"}, - {file = "grpcio-1.53.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8270d1dc2c98ab57e6dbf36fa187db8df4c036f04a398e5d5e25b4e01a766d70"}, - {file = "grpcio-1.53.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:976a7f24eb213e8429cab78d5e120500dfcdeb01041f1f5a77b17b9101902615"}, - {file = "grpcio-1.53.0-cp39-cp39-win32.whl", hash = "sha256:9c84a481451e7174f3a764a44150f93b041ab51045aa33d7b5b68b6979114e48"}, - {file = "grpcio-1.53.0-cp39-cp39-win_amd64.whl", hash = "sha256:6beb84f83360ff29a3654f43f251ec11b809dcb5524b698d711550243debd289"}, - {file = "grpcio-1.53.0.tar.gz", hash = "sha256:a4952899b4931a6ba12951f9a141ef3e74ff8a6ec9aa2dc602afa40f63595e33"}, -] - -[package.extras] -protobuf = ["grpcio-tools (>=1.53.0)"] - -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.7" -files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] - -[[package]] -name = "httpcore" -version = "0.16.3" -description = "A minimal low-level HTTP client." -optional = false -python-versions = ">=3.7" -files = [ - {file = "httpcore-0.16.3-py3-none-any.whl", hash = "sha256:da1fb708784a938aa084bde4feb8317056c55037247c787bd7e19eb2c2949dc0"}, - {file = "httpcore-0.16.3.tar.gz", hash = "sha256:c5d6f04e2fc530f39e0c077e6a30caa53f1451096120f1f38b954afd0b17c0cb"}, -] - -[package.dependencies] -anyio = ">=3.0,<5.0" -certifi = "*" -h11 = ">=0.13,<0.15" -sniffio = "==1.*" - -[package.extras] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] - -[[package]] -name = "httpx" -version = "0.23.3" -description = "The next generation HTTP client." -optional = false -python-versions = ">=3.7" -files = [ - {file = "httpx-0.23.3-py3-none-any.whl", hash = "sha256:a211fcce9b1254ea24f0cd6af9869b3d29aba40154e947d2a07bb499b3e310d6"}, - {file = "httpx-0.23.3.tar.gz", hash = "sha256:9818458eb565bb54898ccb9b8b251a28785dd4a55afbc23d0eb410754fe7d0f9"}, -] - -[package.dependencies] -certifi = "*" -httpcore = ">=0.15.0,<0.17.0" -rfc3986 = {version = ">=1.3,<2", extras = ["idna2008"]} -sniffio = "*" - -[package.extras] -brotli = ["brotli", "brotlicffi"] -cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<13)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] - -[[package]] -name = "huggingface-hub" -version = "0.15.1" -description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "huggingface_hub-0.15.1-py3-none-any.whl", hash = "sha256:05b0fb0abbf1f625dfee864648ac3049fe225ac4371c7bafaca0c2d3a2f83445"}, - {file = "huggingface_hub-0.15.1.tar.gz", hash = "sha256:a61b7d1a7769fe10119e730277c72ab99d95c48d86a3d6da3e9f3d0f632a4081"}, -] - -[package.dependencies] -filelock = "*" -fsspec = "*" -packaging = ">=20.9" -pyyaml = ">=5.1" -requests = "*" -tqdm = ">=4.42.1" -typing-extensions = ">=3.7.4.3" - -[package.extras] -all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "numpy", "pytest", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"] -cli = ["InquirerPy (==0.3.4)"] -dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "black (>=23.1,<24.0)", "gradio", "jedi", "mypy (==0.982)", "numpy", "pytest", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "ruff (>=0.0.241)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "urllib3 (<2.0)"] -fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] -quality = ["black (>=23.1,<24.0)", "mypy (==0.982)", "ruff (>=0.0.241)"] -tensorflow = ["graphviz", "pydot", "tensorflow"] -testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "gradio", "jedi", "numpy", "pytest", "pytest-cov", "pytest-env", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] -torch = ["torch"] -typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"] - -[[package]] -name = "hydra-core" -version = "1.0.7" -description = "A framework for elegantly configuring complex applications" -optional = false -python-versions = "*" -files = [ - {file = "hydra-core-1.0.7.tar.gz", hash = "sha256:58cc3f7531995b6d8de162ca21f936e17bdaebd4d1e8614d63c32e17c2e41e45"}, - {file = "hydra_core-1.0.7-py3-none-any.whl", hash = "sha256:e800c6deb8309395508094851fa93bc13408f2285261eb97e626d37193b58a9f"}, -] - -[package.dependencies] -antlr4-python3-runtime = "4.8" -importlib-resources = {version = "*", markers = "python_version < \"3.9\""} -omegaconf = ">=2.0.5,<2.1" - -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] - -[[package]] -name = "importlib-metadata" -version = "6.1.0" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "importlib_metadata-6.1.0-py3-none-any.whl", hash = "sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09"}, - {file = "importlib_metadata-6.1.0.tar.gz", hash = "sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20"}, -] - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] - -[[package]] -name = "importlib-resources" -version = "5.12.0" -description = "Read resources from Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, - {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, -] - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] - -[[package]] -name = "jinja2" -version = "3.1.2" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.7" -files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "joblib" -version = "1.2.0" -description = "Lightweight pipelining with Python functions" -optional = false -python-versions = ">=3.7" -files = [ - {file = "joblib-1.2.0-py3-none-any.whl", hash = "sha256:091138ed78f800342968c523bdde947e7a305b8594b910a0fea2ab83c3c6d385"}, - {file = "joblib-1.2.0.tar.gz", hash = "sha256:e1cee4a79e4af22881164f218d4311f60074197fb707e082e803b61f6d137018"}, -] - -[[package]] -name = "json5" -version = "0.9.11" -description = "A Python implementation of the JSON5 data format." -optional = false -python-versions = "*" -files = [ - {file = "json5-0.9.11-py2.py3-none-any.whl", hash = "sha256:1aa54b80b5e507dfe31d12b7743a642e2ffa6f70bf73b8e3d7d1d5fba83d99bd"}, - {file = "json5-0.9.11.tar.gz", hash = "sha256:4f1e196acc55b83985a51318489f345963c7ba84aa37607e49073066c562e99b"}, -] - -[package.extras] -dev = ["hypothesis"] - -[[package]] -name = "jsonschema" -version = "4.17.3" -description = "An implementation of JSON Schema validation for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, - {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, -] - -[package.dependencies] -attrs = ">=17.4.0" -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} -pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" - -[package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] - -[[package]] -name = "kiwisolver" -version = "1.4.4" -description = "A fast implementation of the Cassowary constraint solver" -optional = false -python-versions = ">=3.7" -files = [ - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2f5e60fabb7343a836360c4f0919b8cd0d6dbf08ad2ca6b9cf90bf0c76a3c4f6"}, - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10ee06759482c78bdb864f4109886dff7b8a56529bc1609d4f1112b93fe6423c"}, - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c79ebe8f3676a4c6630fd3f777f3cfecf9289666c84e775a67d1d358578dc2e3"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbe9fa13da955feb8202e215c4018f4bb57469b1b78c7a4c5c7b93001699938"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7577c1987baa3adc4b3c62c33bd1118c3ef5c8ddef36f0f2c950ae0b199e100d"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ad8285b01b0d4695102546b342b493b3ccc6781fc28c8c6a1bb63e95d22f09"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed58b8acf29798b036d347791141767ccf65eee7f26bde03a71c944449e53de"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a68b62a02953b9841730db7797422f983935aeefceb1679f0fc85cbfbd311c32"}, - {file = "kiwisolver-1.4.4-cp310-cp310-win32.whl", hash = "sha256:e92a513161077b53447160b9bd8f522edfbed4bd9759e4c18ab05d7ef7e49408"}, - {file = "kiwisolver-1.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:3fe20f63c9ecee44560d0e7f116b3a747a5d7203376abeea292ab3152334d004"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ea21f66820452a3f5d1655f8704a60d66ba1191359b96541eaf457710a5fc6"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bc9db8a3efb3e403e4ecc6cd9489ea2bac94244f80c78e27c31dcc00d2790ac2"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d5b61785a9ce44e5a4b880272baa7cf6c8f48a5180c3e81c59553ba0cb0821ca"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2dbb44c3f7e6c4d3487b31037b1bdbf424d97687c1747ce4ff2895795c9bf69"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295ecd49304dcf3bfbfa45d9a081c96509e95f4b9d0eb7ee4ec0530c4a96514"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4bd472dbe5e136f96a4b18f295d159d7f26fd399136f5b17b08c4e5f498cd494"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf7d9fce9bcc4752ca4a1b80aabd38f6d19009ea5cbda0e0856983cf6d0023f5"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d6601aed50c74e0ef02f4204da1816147a6d3fbdc8b3872d263338a9052c51"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:877272cf6b4b7e94c9614f9b10140e198d2186363728ed0f701c6eee1baec1da"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:db608a6757adabb32f1cfe6066e39b3706d8c3aa69bbc353a5b61edad36a5cb4"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5853eb494c71e267912275e5586fe281444eb5e722de4e131cddf9d442615626"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f0a1dbdb5ecbef0d34eb77e56fcb3e95bbd7e50835d9782a45df81cc46949750"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:283dffbf061a4ec60391d51e6155e372a1f7a4f5b15d59c8505339454f8989e4"}, - {file = "kiwisolver-1.4.4-cp311-cp311-win32.whl", hash = "sha256:d06adcfa62a4431d404c31216f0f8ac97397d799cd53800e9d3efc2fbb3cf14e"}, - {file = "kiwisolver-1.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:e7da3fec7408813a7cebc9e4ec55afed2d0fd65c4754bc376bf03498d4e92686"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:62ac9cc684da4cf1778d07a89bf5f81b35834cb96ca523d3a7fb32509380cbf6"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41dae968a94b1ef1897cb322b39360a0812661dba7c682aa45098eb8e193dbdf"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02f79693ec433cb4b5f51694e8477ae83b3205768a6fb48ffba60549080e295b"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0611a0a2a518464c05ddd5a3a1a0e856ccc10e67079bb17f265ad19ab3c7597"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:db5283d90da4174865d520e7366801a93777201e91e79bacbac6e6927cbceede"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1041feb4cda8708ce73bb4dcb9ce1ccf49d553bf87c3954bdfa46f0c3f77252c"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-win32.whl", hash = "sha256:a553dadda40fef6bfa1456dc4be49b113aa92c2a9a9e8711e955618cd69622e3"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:03baab2d6b4a54ddbb43bba1a3a2d1627e82d205c5cf8f4c924dc49284b87166"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:841293b17ad704d70c578f1f0013c890e219952169ce8a24ebc063eecf775454"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4f270de01dd3e129a72efad823da90cc4d6aafb64c410c9033aba70db9f1ff0"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f9f39e2f049db33a908319cf46624a569b36983c7c78318e9726a4cb8923b26c"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c97528e64cb9ebeff9701e7938653a9951922f2a38bd847787d4a8e498cc83ae"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d1573129aa0fd901076e2bfb4275a35f5b7aa60fbfb984499d661ec950320b0"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad881edc7ccb9d65b0224f4e4d05a1e85cf62d73aab798943df6d48ab0cd79a1"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b428ef021242344340460fa4c9185d0b1f66fbdbfecc6c63eff4b7c29fad429d"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2e407cb4bd5a13984a6c2c0fe1845e4e41e96f183e5e5cd4d77a857d9693494c"}, - {file = "kiwisolver-1.4.4-cp38-cp38-win32.whl", hash = "sha256:75facbe9606748f43428fc91a43edb46c7ff68889b91fa31f53b58894503a191"}, - {file = "kiwisolver-1.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:5bce61af018b0cb2055e0e72e7d65290d822d3feee430b7b8203d8a855e78766"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8c808594c88a025d4e322d5bb549282c93c8e1ba71b790f539567932722d7bd8"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0a71d85ecdd570ded8ac3d1c0f480842f49a40beb423bb8014539a9f32a5897"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b533558eae785e33e8c148a8d9921692a9fe5aa516efbdff8606e7d87b9d5824"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:efda5fc8cc1c61e4f639b8067d118e742b812c930f708e6667a5ce0d13499e29"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7c43e1e1206cd421cd92e6b3280d4385d41d7166b3ed577ac20444b6995a445f"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc8d3bd6c72b2dd9decf16ce70e20abcb3274ba01b4e1c96031e0c4067d1e7cd"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ea39b0ccc4f5d803e3337dd46bcce60b702be4d86fd0b3d7531ef10fd99a1ac"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968f44fdbf6dd757d12920d63b566eeb4d5b395fd2d00d29d7ef00a00582aac9"}, - {file = "kiwisolver-1.4.4-cp39-cp39-win32.whl", hash = "sha256:da7e547706e69e45d95e116e6939488d62174e033b763ab1496b4c29b76fabea"}, - {file = "kiwisolver-1.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:ba59c92039ec0a66103b1d5fe588fa546373587a7d68f5c96f743c3396afc04b"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:91672bacaa030f92fc2f43b620d7b337fd9a5af28b0d6ed3f77afc43c4a64b5a"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:787518a6789009c159453da4d6b683f468ef7a65bbde796bcea803ccf191058d"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da152d8cdcab0e56e4f45eb08b9aea6455845ec83172092f09b0e077ece2cf7a"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ecb1fa0db7bf4cff9dac752abb19505a233c7f16684c5826d1f11ebd9472b871"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:28bc5b299f48150b5f822ce68624e445040595a4ac3d59251703779836eceff9"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:81e38381b782cc7e1e46c4e14cd997ee6040768101aefc8fa3c24a4cc58e98f8"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2a66fdfb34e05b705620dd567f5a03f239a088d5a3f321e7b6ac3239d22aa286"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:872b8ca05c40d309ed13eb2e582cab0c5a05e81e987ab9c521bf05ad1d5cf5cb"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:70e7c2e7b750585569564e2e5ca9845acfaa5da56ac46df68414f29fea97be9f"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9f85003f5dfa867e86d53fac6f7e6f30c045673fa27b603c397753bebadc3008"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e307eb9bd99801f82789b44bb45e9f541961831c7311521b13a6c85afc09767"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1792d939ec70abe76f5054d3f36ed5656021dcad1322d1cc996d4e54165cef9"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cb459eea32a4e2cf18ba5fcece2dbdf496384413bc1bae15583f19e567f3b2"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36dafec3d6d6088d34e2de6b85f9d8e2324eb734162fba59d2ba9ed7a2043d5b"}, - {file = "kiwisolver-1.4.4.tar.gz", hash = "sha256:d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955"}, -] - -[[package]] -name = "librosa" -version = "0.9.2" -description = "Python module for audio and music processing" -optional = false -python-versions = ">=3.6" -files = [ - {file = "librosa-0.9.2-py3-none-any.whl", hash = "sha256:322a813e6d37af9fbc369e6a637dcf5fdc5c6925ce806a0d27c68de61a81350f"}, - {file = "librosa-0.9.2.tar.gz", hash = "sha256:5b576b5efdce428e90bc988bdd5a953d12a727e5f931f30d74c53b63abbe3c89"}, -] - -[package.dependencies] -audioread = ">=2.1.9" -decorator = ">=4.0.10" -joblib = ">=0.14" -numba = ">=0.45.1" -numpy = ">=1.17.0" -packaging = ">=20.0" -pooch = ">=1.0" -resampy = ">=0.2.2" -scikit-learn = ">=0.19.1" -scipy = ">=1.2.0" -soundfile = ">=0.10.2" - -[package.extras] -display = ["matplotlib (>=3.3.0)"] -docs = ["ipython (>=7.0)", "matplotlib (>=3.3.0)", "mir-eval (>=0.5)", "numba (<0.50)", "numpydoc", "presets", "sphinx (!=1.3.1)", "sphinx-gallery (>=0.7)", "sphinx-multiversion (>=0.2.3)", "sphinx-rtd-theme (==1.*)", "sphinxcontrib-svg2pdfconverter"] -tests = ["contextlib2", "matplotlib (>=3.3.0)", "pytest", "pytest-cov", "pytest-mpl", "samplerate", "soxr"] - -[[package]] -name = "linkify-it-py" -version = "2.0.0" -description = "Links recognition library with FULL unicode support." -optional = false -python-versions = ">=3.6" -files = [ - {file = "linkify-it-py-2.0.0.tar.gz", hash = "sha256:476464480906bed8b2fa3813bf55566282e55214ad7e41b7d1c2b564666caf2f"}, - {file = "linkify_it_py-2.0.0-py3-none-any.whl", hash = "sha256:1bff43823e24e507a099e328fc54696124423dd6320c75a9da45b4b754b748ad"}, -] - -[package.dependencies] -uc-micro-py = "*" - -[package.extras] -benchmark = ["pytest", "pytest-benchmark"] -dev = ["black", "flake8", "isort", "pre-commit"] -doc = ["myst-parser", "sphinx", "sphinx-book-theme"] -test = ["coverage", "pytest", "pytest-cov"] - -[[package]] -name = "lit" -version = "16.0.0" -description = "A Software Testing Tool" -optional = false -python-versions = "*" -files = [ - {file = "lit-16.0.0.tar.gz", hash = "sha256:3c4ac372122a1de4a88deb277b956f91b7209420a0bef683b1ab2d2b16dabe11"}, -] - -[[package]] -name = "llvmlite" -version = "0.39.0" -description = "lightweight wrapper around basic LLVM functionality" -optional = false -python-versions = ">=3.7" -files = [ - {file = "llvmlite-0.39.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:589f08a1b1920e6004735819ce9aafdd85d030d4a231c1e7adaca9360724b1ed"}, - {file = "llvmlite-0.39.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:44a9a5cbe76db8ba01a5f6fa21649d91aa8a2634cc6f3a60291797e42e67d79e"}, - {file = "llvmlite-0.39.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74d89f2ec4734d3e200fb90ea0b3ca5e9be40f3b3e50eb368ca9002ed5b3e4f8"}, - {file = "llvmlite-0.39.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8b4cb4f433b48792f02ec4ab619b86b145689302a3088a3f3853f50df6c2559d"}, - {file = "llvmlite-0.39.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35db4122182cc5112912a3ec94a3c18eab9a990bd588bfda8445087c1b748563"}, - {file = "llvmlite-0.39.0-cp310-cp310-win32.whl", hash = "sha256:c00bf7a8dc56b4b3618c65b67e75046410f751512871d9e23919cf1feb1007b2"}, - {file = "llvmlite-0.39.0-cp310-cp310-win_amd64.whl", hash = "sha256:72bd2e5db9790344ec39cef77098486635853829ecb0e66e6fa516488ff6dd9e"}, - {file = "llvmlite-0.39.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:53c7c608baffdcdc2213926f4e3600036d4048aed08d6209b9f76a5439e529d6"}, - {file = "llvmlite-0.39.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3bbd23e42593f85a842614d8ddb2b2943630e4c4c8418ea0d8cf1dce9f2fa7a"}, - {file = "llvmlite-0.39.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d733eb9c02bb8b01373228a1339901b1e50be4581105239c6052b9573ddb9298"}, - {file = "llvmlite-0.39.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f575fcb9bebe5bcbe20373c56ad3ebf63bae0e27d3c22c1a4dc27fa4666d0324"}, - {file = "llvmlite-0.39.0-cp37-cp37m-win32.whl", hash = "sha256:5ca4ea962da6ec3b007bedab17065781803d71159b03435f24ce6845cf3d1c66"}, - {file = "llvmlite-0.39.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8e461608135859ac40e39211d9c63a1ce35176513f6b8be87efb554d4af3a388"}, - {file = "llvmlite-0.39.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:62a11b8e9e5fc4783d94da45d94c5a047ce6ccc4c112ae5f764109e9405fcc2c"}, - {file = "llvmlite-0.39.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9272b7e344d12b36dafeb6911054eff32d2a9be7256a2866f0c09d08f945e17f"}, - {file = "llvmlite-0.39.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3df59a7c2b60764fb9eeaf9c442d757eca1f3e87298d4f88849203667528581e"}, - {file = "llvmlite-0.39.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4cfd6688efd0f551168dd8626f386464aef25663268a2400c0f6a089b97a73dc"}, - {file = "llvmlite-0.39.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7292b394956749e51ae3d51a2085932a0e3261108b35eda61d702c1b977102c"}, - {file = "llvmlite-0.39.0-cp38-cp38-win32.whl", hash = "sha256:f8e9463a7d0152994b6f7d630012297bb160db237ad9ca8e75c8dceef7a747cf"}, - {file = "llvmlite-0.39.0-cp38-cp38-win_amd64.whl", hash = "sha256:8d8149fdaab40ae48ea4ec816ae2ae5d36d664795e1b1dfb911fc2c62bc73184"}, - {file = "llvmlite-0.39.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0929e3c26bcafb53545c77bcf7020b943dcefcf8d7d3010f414384458f805cc1"}, - {file = "llvmlite-0.39.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:56ea23c6bbcd25a7c050a26b6effe836a575a33183744cbc28fb21358b3801f8"}, - {file = "llvmlite-0.39.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82d605c5d6c8df96fe19bc3a61c934580e24cafa694cbf79cb227cdc0e426a"}, - {file = "llvmlite-0.39.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7f7a7278ba6d75533be46abc3d9e242030ab017f0016dd081b55f821cc03be9"}, - {file = "llvmlite-0.39.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56ccfe736a12aef2e39450a22e4c027eee4f488c5786c81d0b18ff8a6cf52531"}, - {file = "llvmlite-0.39.0-cp39-cp39-win32.whl", hash = "sha256:0706abf522dc510ddc818f5c9e1cdae521a1416d3c399bbfc4827813379f0164"}, - {file = "llvmlite-0.39.0-cp39-cp39-win_amd64.whl", hash = "sha256:d4a8199263859b97f174035e39297e770617d3497fac44fe738f74ce9c51d22b"}, - {file = "llvmlite-0.39.0.tar.gz", hash = "sha256:01098be54f1aa25e391cebba8ea71cd1533f8cd1f50e34c7dd7540c2560a93af"}, -] - -[[package]] -name = "lxml" -version = "4.9.2" -description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" -files = [ - {file = "lxml-4.9.2-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:76cf573e5a365e790396a5cc2b909812633409306c6531a6877c59061e42c4f2"}, - {file = "lxml-4.9.2-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b1f42b6921d0e81b1bcb5e395bc091a70f41c4d4e55ba99c6da2b31626c44892"}, - {file = "lxml-4.9.2-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9f102706d0ca011de571de32c3247c6476b55bb6bc65a20f682f000b07a4852a"}, - {file = "lxml-4.9.2-cp27-cp27m-win32.whl", hash = "sha256:8d0b4612b66ff5d62d03bcaa043bb018f74dfea51184e53f067e6fdcba4bd8de"}, - {file = "lxml-4.9.2-cp27-cp27m-win_amd64.whl", hash = "sha256:4c8f293f14abc8fd3e8e01c5bd86e6ed0b6ef71936ded5bf10fe7a5efefbaca3"}, - {file = "lxml-4.9.2-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2899456259589aa38bfb018c364d6ae7b53c5c22d8e27d0ec7609c2a1ff78b50"}, - {file = "lxml-4.9.2-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6749649eecd6a9871cae297bffa4ee76f90b4504a2a2ab528d9ebe912b101975"}, - {file = "lxml-4.9.2-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:a08cff61517ee26cb56f1e949cca38caabe9ea9fbb4b1e10a805dc39844b7d5c"}, - {file = "lxml-4.9.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:85cabf64adec449132e55616e7ca3e1000ab449d1d0f9d7f83146ed5bdcb6d8a"}, - {file = "lxml-4.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8340225bd5e7a701c0fa98284c849c9b9fc9238abf53a0ebd90900f25d39a4e4"}, - {file = "lxml-4.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1ab8f1f932e8f82355e75dda5413a57612c6ea448069d4fb2e217e9a4bed13d4"}, - {file = "lxml-4.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:699a9af7dffaf67deeae27b2112aa06b41c370d5e7633e0ee0aea2e0b6c211f7"}, - {file = "lxml-4.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9cc34af337a97d470040f99ba4282f6e6bac88407d021688a5d585e44a23184"}, - {file = "lxml-4.9.2-cp310-cp310-win32.whl", hash = "sha256:d02a5399126a53492415d4906ab0ad0375a5456cc05c3fc0fc4ca11771745cda"}, - {file = "lxml-4.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:a38486985ca49cfa574a507e7a2215c0c780fd1778bb6290c21193b7211702ab"}, - {file = "lxml-4.9.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c83203addf554215463b59f6399835201999b5e48019dc17f182ed5ad87205c9"}, - {file = "lxml-4.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:2a87fa548561d2f4643c99cd13131acb607ddabb70682dcf1dff5f71f781a4bf"}, - {file = "lxml-4.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:d6b430a9938a5a5d85fc107d852262ddcd48602c120e3dbb02137c83d212b380"}, - {file = "lxml-4.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3efea981d956a6f7173b4659849f55081867cf897e719f57383698af6f618a92"}, - {file = "lxml-4.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:df0623dcf9668ad0445e0558a21211d4e9a149ea8f5666917c8eeec515f0a6d1"}, - {file = "lxml-4.9.2-cp311-cp311-win32.whl", hash = "sha256:da248f93f0418a9e9d94b0080d7ebc407a9a5e6d0b57bb30db9b5cc28de1ad33"}, - {file = "lxml-4.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:3818b8e2c4b5148567e1b09ce739006acfaa44ce3156f8cbbc11062994b8e8dd"}, - {file = "lxml-4.9.2-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca989b91cf3a3ba28930a9fc1e9aeafc2a395448641df1f387a2d394638943b0"}, - {file = "lxml-4.9.2-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:822068f85e12a6e292803e112ab876bc03ed1f03dddb80154c395f891ca6b31e"}, - {file = "lxml-4.9.2-cp35-cp35m-win32.whl", hash = "sha256:be7292c55101e22f2a3d4d8913944cbea71eea90792bf914add27454a13905df"}, - {file = "lxml-4.9.2-cp35-cp35m-win_amd64.whl", hash = "sha256:998c7c41910666d2976928c38ea96a70d1aa43be6fe502f21a651e17483a43c5"}, - {file = "lxml-4.9.2-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:b26a29f0b7fc6f0897f043ca366142d2b609dc60756ee6e4e90b5f762c6adc53"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:ab323679b8b3030000f2be63e22cdeea5b47ee0abd2d6a1dc0c8103ddaa56cd7"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:689bb688a1db722485e4610a503e3e9210dcc20c520b45ac8f7533c837be76fe"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f49e52d174375a7def9915c9f06ec4e569d235ad428f70751765f48d5926678c"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:36c3c175d34652a35475a73762b545f4527aec044910a651d2bf50de9c3352b1"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a35f8b7fa99f90dd2f5dc5a9fa12332642f087a7641289ca6c40d6e1a2637d8e"}, - {file = "lxml-4.9.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:58bfa3aa19ca4c0f28c5dde0ff56c520fbac6f0daf4fac66ed4c8d2fb7f22e74"}, - {file = "lxml-4.9.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc718cd47b765e790eecb74d044cc8d37d58562f6c314ee9484df26276d36a38"}, - {file = "lxml-4.9.2-cp36-cp36m-win32.whl", hash = "sha256:d5bf6545cd27aaa8a13033ce56354ed9e25ab0e4ac3b5392b763d8d04b08e0c5"}, - {file = "lxml-4.9.2-cp36-cp36m-win_amd64.whl", hash = "sha256:3ab9fa9d6dc2a7f29d7affdf3edebf6ece6fb28a6d80b14c3b2fb9d39b9322c3"}, - {file = "lxml-4.9.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:05ca3f6abf5cf78fe053da9b1166e062ade3fa5d4f92b4ed688127ea7d7b1d03"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:a5da296eb617d18e497bcf0a5c528f5d3b18dadb3619fbdadf4ed2356ef8d941"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:04876580c050a8c5341d706dd464ff04fd597095cc8c023252566a8826505726"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c9ec3eaf616d67db0764b3bb983962b4f385a1f08304fd30c7283954e6a7869b"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2a29ba94d065945944016b6b74e538bdb1751a1db6ffb80c9d3c2e40d6fa9894"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a82d05da00a58b8e4c0008edbc8a4b6ec5a4bc1e2ee0fb6ed157cf634ed7fa45"}, - {file = "lxml-4.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:223f4232855ade399bd409331e6ca70fb5578efef22cf4069a6090acc0f53c0e"}, - {file = "lxml-4.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d17bc7c2ccf49c478c5bdd447594e82692c74222698cfc9b5daae7ae7e90743b"}, - {file = "lxml-4.9.2-cp37-cp37m-win32.whl", hash = "sha256:b64d891da92e232c36976c80ed7ebb383e3f148489796d8d31a5b6a677825efe"}, - {file = "lxml-4.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a0a336d6d3e8b234a3aae3c674873d8f0e720b76bc1d9416866c41cd9500ffb9"}, - {file = "lxml-4.9.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:da4dd7c9c50c059aba52b3524f84d7de956f7fef88f0bafcf4ad7dde94a064e8"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:821b7f59b99551c69c85a6039c65b75f5683bdc63270fec660f75da67469ca24"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e5168986b90a8d1f2f9dc1b841467c74221bd752537b99761a93d2d981e04889"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8e20cb5a47247e383cf4ff523205060991021233ebd6f924bca927fcf25cf86f"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:13598ecfbd2e86ea7ae45ec28a2a54fb87ee9b9fdb0f6d343297d8e548392c03"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:880bbbcbe2fca64e2f4d8e04db47bcdf504936fa2b33933efd945e1b429bea8c"}, - {file = "lxml-4.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d2278d59425777cfcb19735018d897ca8303abe67cc735f9f97177ceff8027f"}, - {file = "lxml-4.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5344a43228767f53a9df6e5b253f8cdca7dfc7b7aeae52551958192f56d98457"}, - {file = "lxml-4.9.2-cp38-cp38-win32.whl", hash = "sha256:925073b2fe14ab9b87e73f9a5fde6ce6392da430f3004d8b72cc86f746f5163b"}, - {file = "lxml-4.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:9b22c5c66f67ae00c0199f6055705bc3eb3fcb08d03d2ec4059a2b1b25ed48d7"}, - {file = "lxml-4.9.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:5f50a1c177e2fa3ee0667a5ab79fdc6b23086bc8b589d90b93b4bd17eb0e64d1"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:090c6543d3696cbe15b4ac6e175e576bcc3f1ccfbba970061b7300b0c15a2140"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:63da2ccc0857c311d764e7d3d90f429c252e83b52d1f8f1d1fe55be26827d1f4"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:5b4545b8a40478183ac06c073e81a5ce4cf01bf1734962577cf2bb569a5b3bbf"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2e430cd2824f05f2d4f687701144556646bae8f249fd60aa1e4c768ba7018947"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6804daeb7ef69e7b36f76caddb85cccd63d0c56dedb47555d2fc969e2af6a1a5"}, - {file = "lxml-4.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a6e441a86553c310258aca15d1c05903aaf4965b23f3bc2d55f200804e005ee5"}, - {file = "lxml-4.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ca34efc80a29351897e18888c71c6aca4a359247c87e0b1c7ada14f0ab0c0fb2"}, - {file = "lxml-4.9.2-cp39-cp39-win32.whl", hash = "sha256:6b418afe5df18233fc6b6093deb82a32895b6bb0b1155c2cdb05203f583053f1"}, - {file = "lxml-4.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:f1496ea22ca2c830cbcbd473de8f114a320da308438ae65abad6bab7867fe38f"}, - {file = "lxml-4.9.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b264171e3143d842ded311b7dccd46ff9ef34247129ff5bf5066123c55c2431c"}, - {file = "lxml-4.9.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0dc313ef231edf866912e9d8f5a042ddab56c752619e92dfd3a2c277e6a7299a"}, - {file = "lxml-4.9.2-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:16efd54337136e8cd72fb9485c368d91d77a47ee2d42b057564aae201257d419"}, - {file = "lxml-4.9.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0f2b1e0d79180f344ff9f321327b005ca043a50ece8713de61d1cb383fb8ac05"}, - {file = "lxml-4.9.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:7b770ed79542ed52c519119473898198761d78beb24b107acf3ad65deae61f1f"}, - {file = "lxml-4.9.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efa29c2fe6b4fdd32e8ef81c1528506895eca86e1d8c4657fda04c9b3786ddf9"}, - {file = "lxml-4.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7e91ee82f4199af8c43d8158024cbdff3d931df350252288f0d4ce656df7f3b5"}, - {file = "lxml-4.9.2-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b23e19989c355ca854276178a0463951a653309fb8e57ce674497f2d9f208746"}, - {file = "lxml-4.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:01d36c05f4afb8f7c20fd9ed5badca32a2029b93b1750f571ccc0b142531caf7"}, - {file = "lxml-4.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7b515674acfdcadb0eb5d00d8a709868173acece5cb0be3dd165950cbfdf5409"}, - {file = "lxml-4.9.2.tar.gz", hash = "sha256:2455cfaeb7ac70338b3257f41e21f0724f4b5b0c0e7702da67ee6c3640835b67"}, -] - -[package.extras] -cssselect = ["cssselect (>=0.7)"] -html5 = ["html5lib"] -htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=0.29.7)"] - -[[package]] -name = "markdown" -version = "3.4.3" -description = "Python implementation of John Gruber's Markdown." -optional = false -python-versions = ">=3.7" -files = [ - {file = "Markdown-3.4.3-py3-none-any.whl", hash = "sha256:065fd4df22da73a625f14890dd77eb8040edcbd68794bcd35943be14490608b2"}, - {file = "Markdown-3.4.3.tar.gz", hash = "sha256:8bf101198e004dc93e84a12a7395e31aac6a9c9942848ae1d99b9d72cf9b3520"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} - -[package.extras] -testing = ["coverage", "pyyaml"] - -[[package]] -name = "markdown-it-py" -version = "2.2.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -optional = false -python-versions = ">=3.7" -files = [ - {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, - {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, -] - -[package.dependencies] -linkify-it-py = {version = ">=1,<3", optional = true, markers = "extra == \"linkify\""} -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "markupsafe" -version = "2.1.2" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, -] - -[[package]] -name = "matplotlib" -version = "3.7.1" -description = "Python plotting package" -optional = false -python-versions = ">=3.8" -files = [ - {file = "matplotlib-3.7.1-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:95cbc13c1fc6844ab8812a525bbc237fa1470863ff3dace7352e910519e194b1"}, - {file = "matplotlib-3.7.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:08308bae9e91aca1ec6fd6dda66237eef9f6294ddb17f0d0b3c863169bf82353"}, - {file = "matplotlib-3.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:544764ba51900da4639c0f983b323d288f94f65f4024dc40ecb1542d74dc0500"}, - {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56d94989191de3fcc4e002f93f7f1be5da476385dde410ddafbb70686acf00ea"}, - {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e99bc9e65901bb9a7ce5e7bb24af03675cbd7c70b30ac670aa263240635999a4"}, - {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb7d248c34a341cd4c31a06fd34d64306624c8cd8d0def7abb08792a5abfd556"}, - {file = "matplotlib-3.7.1-cp310-cp310-win32.whl", hash = "sha256:ce463ce590f3825b52e9fe5c19a3c6a69fd7675a39d589e8b5fbe772272b3a24"}, - {file = "matplotlib-3.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:3d7bc90727351fb841e4d8ae620d2d86d8ed92b50473cd2b42ce9186104ecbba"}, - {file = "matplotlib-3.7.1-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:770a205966d641627fd5cf9d3cb4b6280a716522cd36b8b284a8eb1581310f61"}, - {file = "matplotlib-3.7.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f67bfdb83a8232cb7a92b869f9355d677bce24485c460b19d01970b64b2ed476"}, - {file = "matplotlib-3.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2bf092f9210e105f414a043b92af583c98f50050559616930d884387d0772aba"}, - {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89768d84187f31717349c6bfadc0e0d8c321e8eb34522acec8a67b1236a66332"}, - {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83111e6388dec67822e2534e13b243cc644c7494a4bb60584edbff91585a83c6"}, - {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a867bf73a7eb808ef2afbca03bcdb785dae09595fbe550e1bab0cd023eba3de0"}, - {file = "matplotlib-3.7.1-cp311-cp311-win32.whl", hash = "sha256:fbdeeb58c0cf0595efe89c05c224e0a502d1aa6a8696e68a73c3efc6bc354304"}, - {file = "matplotlib-3.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:c0bd19c72ae53e6ab979f0ac6a3fafceb02d2ecafa023c5cca47acd934d10be7"}, - {file = "matplotlib-3.7.1-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:6eb88d87cb2c49af00d3bbc33a003f89fd9f78d318848da029383bfc08ecfbfb"}, - {file = "matplotlib-3.7.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:cf0e4f727534b7b1457898c4f4ae838af1ef87c359b76dcd5330fa31893a3ac7"}, - {file = "matplotlib-3.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:46a561d23b91f30bccfd25429c3c706afe7d73a5cc64ef2dfaf2b2ac47c1a5dc"}, - {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8704726d33e9aa8a6d5215044b8d00804561971163563e6e6591f9dcf64340cc"}, - {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4cf327e98ecf08fcbb82685acaf1939d3338548620ab8dfa02828706402c34de"}, - {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:617f14ae9d53292ece33f45cba8503494ee199a75b44de7717964f70637a36aa"}, - {file = "matplotlib-3.7.1-cp38-cp38-win32.whl", hash = "sha256:7c9a4b2da6fac77bcc41b1ea95fadb314e92508bf5493ceff058e727e7ecf5b0"}, - {file = "matplotlib-3.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:14645aad967684e92fc349493fa10c08a6da514b3d03a5931a1bac26e6792bd1"}, - {file = "matplotlib-3.7.1-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:81a6b377ea444336538638d31fdb39af6be1a043ca5e343fe18d0f17e098770b"}, - {file = "matplotlib-3.7.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:28506a03bd7f3fe59cd3cd4ceb2a8d8a2b1db41afede01f66c42561b9be7b4b7"}, - {file = "matplotlib-3.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8c587963b85ce41e0a8af53b9b2de8dddbf5ece4c34553f7bd9d066148dc719c"}, - {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8bf26ade3ff0f27668989d98c8435ce9327d24cffb7f07d24ef609e33d582439"}, - {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:def58098f96a05f90af7e92fd127d21a287068202aa43b2a93476170ebd99e87"}, - {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f883a22a56a84dba3b588696a2b8a1ab0d2c3d41be53264115c71b0a942d8fdb"}, - {file = "matplotlib-3.7.1-cp39-cp39-win32.whl", hash = "sha256:4f99e1b234c30c1e9714610eb0c6d2f11809c9c78c984a613ae539ea2ad2eb4b"}, - {file = "matplotlib-3.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:3ba2af245e36990facf67fde840a760128ddd71210b2ab6406e640188d69d136"}, - {file = "matplotlib-3.7.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3032884084f541163f295db8a6536e0abb0db464008fadca6c98aaf84ccf4717"}, - {file = "matplotlib-3.7.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a2cb34336110e0ed8bb4f650e817eed61fa064acbefeb3591f1b33e3a84fd96"}, - {file = "matplotlib-3.7.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b867e2f952ed592237a1828f027d332d8ee219ad722345b79a001f49df0936eb"}, - {file = "matplotlib-3.7.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:57bfb8c8ea253be947ccb2bc2d1bb3862c2bccc662ad1b4626e1f5e004557042"}, - {file = "matplotlib-3.7.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:438196cdf5dc8d39b50a45cb6e3f6274edbcf2254f85fa9b895bf85851c3a613"}, - {file = "matplotlib-3.7.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21e9cff1a58d42e74d01153360de92b326708fb205250150018a52c70f43c290"}, - {file = "matplotlib-3.7.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75d4725d70b7c03e082bbb8a34639ede17f333d7247f56caceb3801cb6ff703d"}, - {file = "matplotlib-3.7.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:97cc368a7268141afb5690760921765ed34867ffb9655dd325ed207af85c7529"}, - {file = "matplotlib-3.7.1.tar.gz", hash = "sha256:7b73305f25eab4541bd7ee0b96d87e53ae9c9f1823be5659b806cd85786fe882"}, -] - -[package.dependencies] -contourpy = ">=1.0.1" -cycler = ">=0.10" -fonttools = ">=4.22.0" -importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} -kiwisolver = ">=1.0.1" -numpy = ">=1.20" -packaging = ">=20.0" -pillow = ">=6.2.0" -pyparsing = ">=2.3.1" -python-dateutil = ">=2.7" - -[[package]] -name = "matplotlib-inline" -version = "0.1.6" -description = "Inline Matplotlib backend for Jupyter" -optional = false -python-versions = ">=3.5" -files = [ - {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, - {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, -] - -[package.dependencies] -traitlets = "*" - -[[package]] -name = "mdit-py-plugins" -version = "0.3.3" -description = "Collection of plugins for markdown-it-py" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mdit-py-plugins-0.3.3.tar.gz", hash = "sha256:5cfd7e7ac582a594e23ba6546a2f406e94e42eb33ae596d0734781261c251260"}, - {file = "mdit_py_plugins-0.3.3-py3-none-any.whl", hash = "sha256:36d08a29def19ec43acdcd8ba471d3ebab132e7879d442760d963f19913e04b9"}, -] - -[package.dependencies] -markdown-it-py = ">=1.0.0,<3.0.0" - -[package.extras] -code-style = ["pre-commit"] -rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - -[[package]] -name = "mpmath" -version = "1.3.0" -description = "Python library for arbitrary-precision floating-point arithmetic" -optional = false -python-versions = "*" -files = [ - {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, - {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, -] - -[package.extras] -develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] -docs = ["sphinx"] -gmpy = ["gmpy2 (>=2.1.0a4)"] -tests = ["pytest (>=4.6)"] - -[[package]] -name = "multidict" -version = "6.0.4" -description = "multidict implementation" -optional = false -python-versions = ">=3.7" -files = [ - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, - {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, - {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, - {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, - {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, - {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, - {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, - {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, - {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, - {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, - {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, - {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, - {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, -] - -[[package]] -name = "networkx" -version = "3.1" -description = "Python package for creating and manipulating graphs and networks" -optional = false -python-versions = ">=3.8" -files = [ - {file = "networkx-3.1-py3-none-any.whl", hash = "sha256:4f33f68cb2afcf86f28a45f43efc27a9386b535d567d2127f8f61d51dec58d36"}, - {file = "networkx-3.1.tar.gz", hash = "sha256:de346335408f84de0eada6ff9fafafff9bcda11f0a0dfaa931133debb146ab61"}, -] - -[package.extras] -default = ["matplotlib (>=3.4)", "numpy (>=1.20)", "pandas (>=1.3)", "scipy (>=1.8)"] -developer = ["mypy (>=1.1)", "pre-commit (>=3.2)"] -doc = ["nb2plots (>=0.6)", "numpydoc (>=1.5)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.13)", "sphinx (>=6.1)", "sphinx-gallery (>=0.12)", "texext (>=0.6.7)"] -extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.10)", "sympy (>=1.10)"] -test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] - -[[package]] -name = "numba" -version = "0.56.4" -description = "compiling Python code using LLVM" -optional = false -python-versions = ">=3.7" -files = [ - {file = "numba-0.56.4-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:9f62672145f8669ec08762895fe85f4cf0ead08ce3164667f2b94b2f62ab23c3"}, - {file = "numba-0.56.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c602d015478b7958408d788ba00a50272649c5186ea8baa6cf71d4a1c761bba1"}, - {file = "numba-0.56.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:85dbaed7a05ff96492b69a8900c5ba605551afb9b27774f7f10511095451137c"}, - {file = "numba-0.56.4-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f4cfc3a19d1e26448032049c79fc60331b104f694cf570a9e94f4e2c9d0932bb"}, - {file = "numba-0.56.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4e08e203b163ace08bad500b0c16f6092b1eb34fd1fce4feaf31a67a3a5ecf3b"}, - {file = "numba-0.56.4-cp310-cp310-win32.whl", hash = "sha256:0611e6d3eebe4cb903f1a836ffdb2bda8d18482bcd0a0dcc56e79e2aa3fefef5"}, - {file = "numba-0.56.4-cp310-cp310-win_amd64.whl", hash = "sha256:fbfb45e7b297749029cb28694abf437a78695a100e7c2033983d69f0ba2698d4"}, - {file = "numba-0.56.4-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:3cb1a07a082a61df80a468f232e452d818f5ae254b40c26390054e4e868556e0"}, - {file = "numba-0.56.4-cp37-cp37m-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d69ad934e13c15684e7887100a8f5f0f61d7a8e57e0fd29d9993210089a5b531"}, - {file = "numba-0.56.4-cp37-cp37m-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:dbcc847bac2d225265d054993a7f910fda66e73d6662fe7156452cac0325b073"}, - {file = "numba-0.56.4-cp37-cp37m-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8a95ca9cc77ea4571081f6594e08bd272b66060634b8324e99cd1843020364f9"}, - {file = "numba-0.56.4-cp37-cp37m-win32.whl", hash = "sha256:fcdf84ba3ed8124eb7234adfbb8792f311991cbf8aed1cad4b1b1a7ee08380c1"}, - {file = "numba-0.56.4-cp37-cp37m-win_amd64.whl", hash = "sha256:42f9e1be942b215df7e6cc9948cf9c15bb8170acc8286c063a9e57994ef82fd1"}, - {file = "numba-0.56.4-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:553da2ce74e8862e18a72a209ed3b6d2924403bdd0fb341fa891c6455545ba7c"}, - {file = "numba-0.56.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4373da9757049db7c90591e9ec55a2e97b2b36ba7ae3bf9c956a513374077470"}, - {file = "numba-0.56.4-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3a993349b90569518739009d8f4b523dfedd7e0049e6838c0e17435c3e70dcc4"}, - {file = "numba-0.56.4-cp38-cp38-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:720886b852a2d62619ae3900fe71f1852c62db4f287d0c275a60219e1643fc04"}, - {file = "numba-0.56.4-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e64d338b504c9394a4a34942df4627e1e6cb07396ee3b49fe7b8d6420aa5104f"}, - {file = "numba-0.56.4-cp38-cp38-win32.whl", hash = "sha256:03fe94cd31e96185cce2fae005334a8cc712fc2ba7756e52dff8c9400718173f"}, - {file = "numba-0.56.4-cp38-cp38-win_amd64.whl", hash = "sha256:91f021145a8081f881996818474ef737800bcc613ffb1e618a655725a0f9e246"}, - {file = "numba-0.56.4-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:d0ae9270a7a5cc0ede63cd234b4ff1ce166c7a749b91dbbf45e0000c56d3eade"}, - {file = "numba-0.56.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c75e8a5f810ce80a0cfad6e74ee94f9fde9b40c81312949bf356b7304ef20740"}, - {file = "numba-0.56.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a12ef323c0f2101529d455cfde7f4135eaa147bad17afe10b48634f796d96abd"}, - {file = "numba-0.56.4-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:03634579d10a6129181129de293dd6b5eaabee86881369d24d63f8fe352dd6cb"}, - {file = "numba-0.56.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0240f9026b015e336069329839208ebd70ec34ae5bfbf402e4fcc8e06197528e"}, - {file = "numba-0.56.4-cp39-cp39-win32.whl", hash = "sha256:14dbbabf6ffcd96ee2ac827389afa59a70ffa9f089576500434c34abf9b054a4"}, - {file = "numba-0.56.4-cp39-cp39-win_amd64.whl", hash = "sha256:0da583c532cd72feefd8e551435747e0e0fbb3c0530357e6845fcc11e38d6aea"}, - {file = "numba-0.56.4.tar.gz", hash = "sha256:32d9fef412c81483d7efe0ceb6cf4d3310fde8b624a9cecca00f790573ac96ee"}, -] - -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.9\""} -llvmlite = "==0.39.*" -numpy = ">=1.18,<1.24" -setuptools = "*" - -[[package]] -name = "numpy" -version = "1.23.5" -description = "NumPy is the fundamental package for array computing with Python." -optional = false -python-versions = ">=3.8" -files = [ - {file = "numpy-1.23.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9c88793f78fca17da0145455f0d7826bcb9f37da4764af27ac945488116efe63"}, - {file = "numpy-1.23.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e9f4c4e51567b616be64e05d517c79a8a22f3606499941d97bb76f2ca59f982d"}, - {file = "numpy-1.23.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7903ba8ab592b82014713c491f6c5d3a1cde5b4a3bf116404e08f5b52f6daf43"}, - {file = "numpy-1.23.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e05b1c973a9f858c74367553e236f287e749465f773328c8ef31abe18f691e1"}, - {file = "numpy-1.23.5-cp310-cp310-win32.whl", hash = "sha256:522e26bbf6377e4d76403826ed689c295b0b238f46c28a7251ab94716da0b280"}, - {file = "numpy-1.23.5-cp310-cp310-win_amd64.whl", hash = "sha256:dbee87b469018961d1ad79b1a5d50c0ae850000b639bcb1b694e9981083243b6"}, - {file = "numpy-1.23.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ce571367b6dfe60af04e04a1834ca2dc5f46004ac1cc756fb95319f64c095a96"}, - {file = "numpy-1.23.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56e454c7833e94ec9769fa0f86e6ff8e42ee38ce0ce1fa4cbb747ea7e06d56aa"}, - {file = "numpy-1.23.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5039f55555e1eab31124a5768898c9e22c25a65c1e0037f4d7c495a45778c9f2"}, - {file = "numpy-1.23.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58f545efd1108e647604a1b5aa809591ccd2540f468a880bedb97247e72db387"}, - {file = "numpy-1.23.5-cp311-cp311-win32.whl", hash = "sha256:b2a9ab7c279c91974f756c84c365a669a887efa287365a8e2c418f8b3ba73fb0"}, - {file = "numpy-1.23.5-cp311-cp311-win_amd64.whl", hash = "sha256:0cbe9848fad08baf71de1a39e12d1b6310f1d5b2d0ea4de051058e6e1076852d"}, - {file = "numpy-1.23.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f063b69b090c9d918f9df0a12116029e274daf0181df392839661c4c7ec9018a"}, - {file = "numpy-1.23.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0aaee12d8883552fadfc41e96b4c82ee7d794949e2a7c3b3a7201e968c7ecab9"}, - {file = "numpy-1.23.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92c8c1e89a1f5028a4c6d9e3ccbe311b6ba53694811269b992c0b224269e2398"}, - {file = "numpy-1.23.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d208a0f8729f3fb790ed18a003f3a57895b989b40ea4dce4717e9cf4af62c6bb"}, - {file = "numpy-1.23.5-cp38-cp38-win32.whl", hash = "sha256:06005a2ef6014e9956c09ba07654f9837d9e26696a0470e42beedadb78c11b07"}, - {file = "numpy-1.23.5-cp38-cp38-win_amd64.whl", hash = "sha256:ca51fcfcc5f9354c45f400059e88bc09215fb71a48d3768fb80e357f3b457e1e"}, - {file = "numpy-1.23.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8969bfd28e85c81f3f94eb4a66bc2cf1dbdc5c18efc320af34bffc54d6b1e38f"}, - {file = "numpy-1.23.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7ac231a08bb37f852849bbb387a20a57574a97cfc7b6cabb488a4fc8be176de"}, - {file = "numpy-1.23.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf837dc63ba5c06dc8797c398db1e223a466c7ece27a1f7b5232ba3466aafe3d"}, - {file = "numpy-1.23.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33161613d2269025873025b33e879825ec7b1d831317e68f4f2f0f84ed14c719"}, - {file = "numpy-1.23.5-cp39-cp39-win32.whl", hash = "sha256:af1da88f6bc3d2338ebbf0e22fe487821ea4d8e89053e25fa59d1d79786e7481"}, - {file = "numpy-1.23.5-cp39-cp39-win_amd64.whl", hash = "sha256:09b7847f7e83ca37c6e627682f145856de331049013853f344f37b0c9690e3df"}, - {file = "numpy-1.23.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:abdde9f795cf292fb9651ed48185503a2ff29be87770c3b8e2a14b0cd7aa16f8"}, - {file = "numpy-1.23.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9a909a8bae284d46bbfdefbdd4a262ba19d3bc9921b1e76126b1d21c3c34135"}, - {file = "numpy-1.23.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:01dd17cbb340bf0fc23981e52e1d18a9d4050792e8fb8363cecbf066a84b827d"}, - {file = "numpy-1.23.5.tar.gz", hash = "sha256:1b1766d6f397c18153d40015ddfc79ddb715cabadc04d2d228d4e5a8bc4ded1a"}, -] - -[[package]] -name = "nvidia-cublas-cu11" -version = "11.10.3.66" -description = "CUBLAS native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cublas_cu11-11.10.3.66-py3-none-manylinux1_x86_64.whl", hash = "sha256:d32e4d75f94ddfb93ea0a5dda08389bcc65d8916a25cb9f37ac89edaeed3bded"}, - {file = "nvidia_cublas_cu11-11.10.3.66-py3-none-win_amd64.whl", hash = "sha256:8ac17ba6ade3ed56ab898a036f9ae0756f1e81052a317bf98f8c6d18dc3ae49e"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-cuda-cupti-cu11" -version = "11.7.101" -description = "CUDA profiling tools runtime libs." -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cuda_cupti_cu11-11.7.101-py3-none-manylinux1_x86_64.whl", hash = "sha256:e0cfd9854e1f2edaa36ca20d21cd0bdd5dcfca4e3b9e130a082e05b33b6c5895"}, - {file = "nvidia_cuda_cupti_cu11-11.7.101-py3-none-win_amd64.whl", hash = "sha256:7cc5b8f91ae5e1389c3c0ad8866b3b016a175e827ea8f162a672990a402ab2b0"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-cuda-nvrtc-cu11" -version = "11.7.99" -description = "NVRTC native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cuda_nvrtc_cu11-11.7.99-2-py3-none-manylinux1_x86_64.whl", hash = "sha256:9f1562822ea264b7e34ed5930567e89242d266448e936b85bc97a3370feabb03"}, - {file = "nvidia_cuda_nvrtc_cu11-11.7.99-py3-none-manylinux1_x86_64.whl", hash = "sha256:f7d9610d9b7c331fa0da2d1b2858a4a8315e6d49765091d28711c8946e7425e7"}, - {file = "nvidia_cuda_nvrtc_cu11-11.7.99-py3-none-win_amd64.whl", hash = "sha256:f2effeb1309bdd1b3854fc9b17eaf997808f8b25968ce0c7070945c4265d64a3"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-cuda-runtime-cu11" -version = "11.7.99" -description = "CUDA Runtime native Libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cuda_runtime_cu11-11.7.99-py3-none-manylinux1_x86_64.whl", hash = "sha256:cc768314ae58d2641f07eac350f40f99dcb35719c4faff4bc458a7cd2b119e31"}, - {file = "nvidia_cuda_runtime_cu11-11.7.99-py3-none-win_amd64.whl", hash = "sha256:bc77fa59a7679310df9d5c70ab13c4e34c64ae2124dd1efd7e5474b71be125c7"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-cudnn-cu11" -version = "8.5.0.96" -description = "cuDNN runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cudnn_cu11-8.5.0.96-2-py3-none-manylinux1_x86_64.whl", hash = "sha256:402f40adfc6f418f9dae9ab402e773cfed9beae52333f6d86ae3107a1b9527e7"}, - {file = "nvidia_cudnn_cu11-8.5.0.96-py3-none-manylinux1_x86_64.whl", hash = "sha256:71f8111eb830879ff2836db3cccf03bbd735df9b0d17cd93761732ac50a8a108"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-cufft-cu11" -version = "10.9.0.58" -description = "CUFFT native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cufft_cu11-10.9.0.58-py3-none-manylinux1_x86_64.whl", hash = "sha256:222f9da70c80384632fd6035e4c3f16762d64ea7a843829cb278f98b3cb7dd81"}, - {file = "nvidia_cufft_cu11-10.9.0.58-py3-none-win_amd64.whl", hash = "sha256:c4d316f17c745ec9c728e30409612eaf77a8404c3733cdf6c9c1569634d1ca03"}, -] - -[[package]] -name = "nvidia-curand-cu11" -version = "10.2.10.91" -description = "CURAND native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_curand_cu11-10.2.10.91-py3-none-manylinux1_x86_64.whl", hash = "sha256:eecb269c970fa599a2660c9232fa46aaccbf90d9170b96c462e13bcb4d129e2c"}, - {file = "nvidia_curand_cu11-10.2.10.91-py3-none-win_amd64.whl", hash = "sha256:f742052af0e1e75523bde18895a9ed016ecf1e5aa0ecddfcc3658fd11a1ff417"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-cusolver-cu11" -version = "11.4.0.1" -description = "CUDA solver native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cusolver_cu11-11.4.0.1-2-py3-none-manylinux1_x86_64.whl", hash = "sha256:72fa7261d755ed55c0074960df5904b65e2326f7adce364cbe4945063c1be412"}, - {file = "nvidia_cusolver_cu11-11.4.0.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:700b781bfefd57d161443aff9ace1878584b93e0b2cfef3d6e9296d96febbf99"}, - {file = "nvidia_cusolver_cu11-11.4.0.1-py3-none-win_amd64.whl", hash = "sha256:00f70b256add65f8c1eb3b6a65308795a93e7740f6df9e273eccbba770d370c4"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-cusparse-cu11" -version = "11.7.4.91" -description = "CUSPARSE native runtime libraries" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_cusparse_cu11-11.7.4.91-py3-none-manylinux1_x86_64.whl", hash = "sha256:a3389de714db63321aa11fbec3919271f415ef19fda58aed7f2ede488c32733d"}, - {file = "nvidia_cusparse_cu11-11.7.4.91-py3-none-win_amd64.whl", hash = "sha256:304a01599534f5186a8ed1c3756879282c72c118bc77dd890dc1ff868cad25b9"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-nccl-cu11" -version = "2.14.3" -description = "NVIDIA Collective Communication Library (NCCL) Runtime" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_nccl_cu11-2.14.3-py3-none-manylinux1_x86_64.whl", hash = "sha256:5e5534257d1284b8e825bc3a182c6f06acd6eb405e9f89d49340e98cd8f136eb"}, -] - -[[package]] -name = "nvidia-nvtx-cu11" -version = "11.7.91" -description = "NVIDIA Tools Extension" -optional = false -python-versions = ">=3" -files = [ - {file = "nvidia_nvtx_cu11-11.7.91-py3-none-manylinux1_x86_64.whl", hash = "sha256:b22c64eee426a62fc00952b507d6d29cf62b4c9df7a480fcc417e540e05fd5ac"}, - {file = "nvidia_nvtx_cu11-11.7.91-py3-none-win_amd64.whl", hash = "sha256:dfd7fcb2a91742513027d63a26b757f38dd8b07fecac282c4d132a9d373ff064"}, -] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "oauthlib" -version = "3.2.2" -description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" -optional = false -python-versions = ">=3.6" -files = [ - {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, - {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, -] - -[package.extras] -rsa = ["cryptography (>=3.0.0)"] -signals = ["blinker (>=1.4.0)"] -signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] - -[[package]] -name = "omegaconf" -version = "2.0.6" -description = "A flexible configuration library" -optional = false -python-versions = ">=3.6" -files = [ - {file = "omegaconf-2.0.6-py3-none-any.whl", hash = "sha256:9e349fd76819b95b47aa628edea1ff83fed5b25108608abdd6c7fdca188e302a"}, - {file = "omegaconf-2.0.6.tar.gz", hash = "sha256:92ca535a788d21651bf4c2eaf5c1ca4c7a8003b2dab4a87cbb09109784268806"}, -] - -[package.dependencies] -PyYAML = ">=5.1" -typing-extensions = "*" - -[[package]] -name = "orjson" -version = "3.8.9" -description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" -optional = false -python-versions = ">=3.7" -files = [ - {file = "orjson-3.8.9-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:5d029843eae7b6cbd6468b63517b8b61471afed6572162171d8b6471b6dbf41f"}, - {file = "orjson-3.8.9-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:405933c05490efb209d0f940d8ef1403d2932a97e47010a26d2694e9dd49f84d"}, - {file = "orjson-3.8.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:183de66eff4d41c330a3006f210ab0bce7affe398da6f6eda9579b67245a34ff"}, - {file = "orjson-3.8.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb4081fe340ed1df42dddfd055e1d50479cb0ccb976d13e6b5e8667a07fec6f4"}, - {file = "orjson-3.8.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d11593a2e736055dd7b9587dbf89cd1cbe4a42a70e70f186e51aee7e1b38902e"}, - {file = "orjson-3.8.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e20649359e28f34d01b2570e4650a076f439a959bae3a8bbe7f5923ad80f54e8"}, - {file = "orjson-3.8.9-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:c02ece4f36a160c83efe74adfba5f189c7c7702361f02b809ab73744923ee139"}, - {file = "orjson-3.8.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f0e19801836cf1b30f333d475b05d79051b8ae8639a8e2422fb5f64e82676ae7"}, - {file = "orjson-3.8.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d4850fe5650cead3c0f8822192e381cee9d4c3b8162eb082c86c927124572dc6"}, - {file = "orjson-3.8.9-cp310-none-win_amd64.whl", hash = "sha256:5fd4193f260d9d30112b5e379d0870b54dc88040807c93cbe8d67bfea148ba5a"}, - {file = "orjson-3.8.9-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:70eae063ad8d7405dc63873760567b600fc10728ba0da24a69d49c1a5d318d6d"}, - {file = "orjson-3.8.9-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:251653437632583d02203e6b118b72b99c04425175853f35340f4bac7034a36e"}, - {file = "orjson-3.8.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ea833751f017ba321c277e7425b51c0b1a18a2c60f8c9c0f4c6c4d7e16cbd6c"}, - {file = "orjson-3.8.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8563c2cdeb923b82a5cc5bfc76c28c786777428263ee39292d928e9687165fb4"}, - {file = "orjson-3.8.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f33e9ea45b4c9457eedca0c40f38cf5732c91b0fb68f091ac59e6ea68e03eb2"}, - {file = "orjson-3.8.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:855dee152daecb7de7b4cd7069d7854e11aa291687bffe8433156af0a224417e"}, - {file = "orjson-3.8.9-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:74fa9e02589339defc9d3662de9e7eef51d8f9f3a7f6304b43b18b39d7bbf10f"}, - {file = "orjson-3.8.9-cp311-none-win_amd64.whl", hash = "sha256:6c5b10ba1e62df8f96cbc37f6d5ae9acb3f6475926dea8b1b6a1a60f201a64f7"}, - {file = "orjson-3.8.9-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:a651123d01bc399fcd866e56acc2d76512e62aae3673652b13b470ea69faf1f4"}, - {file = "orjson-3.8.9-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:73019b6d2cc998c99556020c6bd8f8bc28420c69583186ca290c66a27916a3b7"}, - {file = "orjson-3.8.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f5c3daa8b02786ad5f0e14ae16a59bbb4e02cbae3a41989a25188e5a6c962ff"}, - {file = "orjson-3.8.9-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:598598b7f81f8fda7c3e09c88165f844152b7be223bc4ea929ec8ad59b00ea17"}, - {file = "orjson-3.8.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:090b10bdb06baae6d5cd3550d772ecbabd833bfceed7592ff167c0a82f5b4c20"}, - {file = "orjson-3.8.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd46f688ddf9c2ea10367446fe9bf3ceba0f7490c15b4f96420491c7f00bb283"}, - {file = "orjson-3.8.9-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:b8ed8d780e9fab01bc404a70d755a8b2b34ea6c0b6604b65de135daaaadaf9a9"}, - {file = "orjson-3.8.9-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8a32c9fb742868a34346f3c52e12d893a9d27f8e0c0bf3c480db7e6903d8be28"}, - {file = "orjson-3.8.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2ba366009b98ac8899e935eff6fef7672d3ea43d3ce9deb3ee33452134b6cc3a"}, - {file = "orjson-3.8.9-cp37-none-win_amd64.whl", hash = "sha256:236b9313425cb2570626c64dd5cb6caff13882d1717d491da542cff228b96e97"}, - {file = "orjson-3.8.9-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:e8efc7e9ec35336f7cc98b6692536b1262046ff1d2a545295a4d89b8a2495903"}, - {file = "orjson-3.8.9-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:8c7eba3610ae69f4aba4032ecb61b0a6fbd1e4537283d1553eb8c1cb136e9118"}, - {file = "orjson-3.8.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7742649e4c357d4e7ad483a35ff5f55d519e895de56772cc486913614ee7d23b"}, - {file = "orjson-3.8.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6566fb8daa538c7848fd6822e2409a7e1c41dae8e65e6536598d505f641a318"}, - {file = "orjson-3.8.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ce8a2a667221e2e5160021e26b09e9c13eeedafb5cda1981340c8c0c0bc8f9d"}, - {file = "orjson-3.8.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c0399631b88fa4868956badef2561fba07dffcaf050bf53959ee50d26edf6f6"}, - {file = "orjson-3.8.9-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:189ccb16ed140a824d133fa1c55175cf0d2207edaade54f1db0456a526cb5fd8"}, - {file = "orjson-3.8.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b707fa4481e1af19b3052ec9352c688bad3f539d7bdd8aa4a451f6dd7e4bae73"}, - {file = "orjson-3.8.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c3d988eb562da1dda7d49e9abd8a64b3cabc632b4299d177fb9e0c0ca9f06b8c"}, - {file = "orjson-3.8.9-cp38-none-win_amd64.whl", hash = "sha256:b30240eb6b22daab604f1595f6aacf92bcdac0d29e2d7ad507dfac68d2b39182"}, - {file = "orjson-3.8.9-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:81869a6de00bc676d10056fa8bb28cbe805b1cf498a45c14cb7b1765eee33fcb"}, - {file = "orjson-3.8.9-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:a25a5a215b19d414de8d416a3c5414f29165843a06f704cc0345ded9eac34ac1"}, - {file = "orjson-3.8.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dec0f2bea52e30ea98ce095f1f42da04535791f9a31b2aab2499caa88307bc49"}, - {file = "orjson-3.8.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7b91d88fe96b698b28bb1b95b1fce226f72757ab3ab7d8d97551e23bc629c84f"}, - {file = "orjson-3.8.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7629841ccdcccd3c43ebc6a4165abe9844909fcedb2041994c0153470f610801"}, - {file = "orjson-3.8.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d875b304e19f4b2758d233bbf2b9d627c66fac50b3150b8d31a35ba6cda3db67"}, - {file = "orjson-3.8.9-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:723ec880c5290fe4de330febb8030e57c1978fbd624fc5b9399969e7d7d74984"}, - {file = "orjson-3.8.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b11f8a71c82d19fce11ce487efeec2ca0dc3bcf5b4564445fecfc68d9c268744"}, - {file = "orjson-3.8.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b2079bf86dec62731c1b90fdfea3211f993f0c894d9261e0ce9b68ed9c9dfbec"}, - {file = "orjson-3.8.9-cp39-none-win_amd64.whl", hash = "sha256:97d94322a2eaab767ba8d52f6bf9d0ec0f35313fe36287be6e6085dd65d55d37"}, - {file = "orjson-3.8.9.tar.gz", hash = "sha256:c40bece58c11cb09aff17424d21b41f6f767d2b1252b2f745ec3ff29cce6a240"}, -] - -[[package]] -name = "packaging" -version = "23.0" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, - {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, -] - -[[package]] -name = "pandas" -version = "2.0.0" -description = "Powerful data structures for data analysis, time series, and statistics" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pandas-2.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bbb2c5e94d6aa4e632646a3bacd05c2a871c3aa3e85c9bec9be99cb1267279f2"}, - {file = "pandas-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b5337c87c4e963f97becb1217965b6b75c6fe5f54c4cf09b9a5ac52fc0bd03d3"}, - {file = "pandas-2.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ded51f7e3dd9b4f8b87f2ceb7bd1a8df2491f7ee72f7074c6927a512607199e"}, - {file = "pandas-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52c858de9e9fc422d25e67e1592a6e6135d7bcf9a19fcaf4d0831a0be496bf21"}, - {file = "pandas-2.0.0-cp310-cp310-win32.whl", hash = "sha256:2d1d138848dd71b37e3cbe7cd952ff84e2ab04d8988972166e18567dcc811245"}, - {file = "pandas-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:d08e41d96bc4de6f500afe80936c68fce6099d5a434e2af7c7fd8e7c72a3265d"}, - {file = "pandas-2.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:24472cfc7ced511ac90608728b88312be56edc8f19b9ed885a7d2e47ffaf69c0"}, - {file = "pandas-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ffb14f50c74ee541610668137830bb93e9dfa319b1bef2cedf2814cd5ac9c70"}, - {file = "pandas-2.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c24c7d12d033a372a9daf9ff2c80f8b0af6f98d14664dbb0a4f6a029094928a7"}, - {file = "pandas-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8318de0f886e4dcb8f9f36e45a3d6a6c3d1cfdc508354da85e739090f0222991"}, - {file = "pandas-2.0.0-cp311-cp311-win32.whl", hash = "sha256:57c34b79c13249505e850d0377b722961b99140f81dafbe6f19ef10239f6284a"}, - {file = "pandas-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:8f987ec26e96a8490909bc5d98c514147236e49830cba7df8690f6087c12bbae"}, - {file = "pandas-2.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b3ba8f5dd470d8bfbc4259829589f4a32881151c49e36384d9eb982b35a12020"}, - {file = "pandas-2.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fcd471c9d9f60926ab2f15c6c29164112f458acb42280365fbefa542d0c2fc74"}, - {file = "pandas-2.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9253edfd015520ce77a9343eb7097429479c039cd3ebe81d7810ea11b4b24695"}, - {file = "pandas-2.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:977326039bd1ded620001a1889e2ed4798460a6bc5a24fbaebb5f07a41c32a55"}, - {file = "pandas-2.0.0-cp38-cp38-win32.whl", hash = "sha256:78425ca12314b23356c28b16765639db10ebb7d8983f705d6759ff7fe41357fa"}, - {file = "pandas-2.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:d93b7fcfd9f3328072b250d6d001dcfeec5d3bb66c1b9c8941e109a46c0c01a8"}, - {file = "pandas-2.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:425705cee8be54db2504e8dd2a730684790b15e5904b750c367611ede49098ab"}, - {file = "pandas-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a4f789b7c012a608c08cda4ff0872fd979cb18907a37982abe884e6f529b8793"}, - {file = "pandas-2.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3bb9d840bf15656805f6a3d87eea9dcb7efdf1314a82adcf7f00b820427c5570"}, - {file = "pandas-2.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0778ab54c8f399d83d98ffb674d11ec716449956bc6f6821891ab835848687f2"}, - {file = "pandas-2.0.0-cp39-cp39-win32.whl", hash = "sha256:70db5c278bbec0306d32bf78751ff56b9594c05a5098386f6c8a563659124f91"}, - {file = "pandas-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:4f3320bb55f34af4193020158ef8118ee0fb9aec7cc47d2084dbfdd868a0a24f"}, - {file = "pandas-2.0.0.tar.gz", hash = "sha256:cda9789e61b44463c1c4fe17ef755de77bcd13b09ba31c940d20f193d63a5dc8"}, -] - -[package.dependencies] -numpy = [ - {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, - {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, -] -python-dateutil = ">=2.8.2" -pytz = ">=2020.1" -tzdata = ">=2022.1" - -[package.extras] -all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.0.0)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] -aws = ["s3fs (>=2021.08.0)"] -clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"] -compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"] -computation = ["scipy (>=1.7.1)", "xarray (>=0.21.0)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pyxlsb (>=1.0.8)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)"] -feather = ["pyarrow (>=7.0.0)"] -fss = ["fsspec (>=2021.07.0)"] -gcp = ["gcsfs (>=2021.07.0)", "pandas-gbq (>=0.15.0)"] -hdf5 = ["tables (>=3.6.1)"] -html = ["beautifulsoup4 (>=4.9.3)", "html5lib (>=1.1)", "lxml (>=4.6.3)"] -mysql = ["SQLAlchemy (>=1.4.16)", "pymysql (>=1.0.2)"] -output-formatting = ["jinja2 (>=3.0.0)", "tabulate (>=0.8.9)"] -parquet = ["pyarrow (>=7.0.0)"] -performance = ["bottleneck (>=1.3.2)", "numba (>=0.53.1)", "numexpr (>=2.7.1)"] -plot = ["matplotlib (>=3.6.1)"] -postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"] -spss = ["pyreadstat (>=1.1.2)"] -sql-other = ["SQLAlchemy (>=1.4.16)"] -test = ["hypothesis (>=6.34.2)", "pytest (>=7.0.0)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] -xml = ["lxml (>=4.6.3)"] - -[[package]] -name = "pillow" -version = "9.3.0" -description = "Python Imaging Library (Fork)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "Pillow-9.3.0-1-cp37-cp37m-win32.whl", hash = "sha256:e6ea6b856a74d560d9326c0f5895ef8050126acfdc7ca08ad703eb0081e82b74"}, - {file = "Pillow-9.3.0-1-cp37-cp37m-win_amd64.whl", hash = "sha256:32a44128c4bdca7f31de5be641187367fe2a450ad83b833ef78910397db491aa"}, - {file = "Pillow-9.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:0b7257127d646ff8676ec8a15520013a698d1fdc48bc2a79ba4e53df792526f2"}, - {file = "Pillow-9.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b90f7616ea170e92820775ed47e136208e04c967271c9ef615b6fbd08d9af0e3"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68943d632f1f9e3dce98908e873b3a090f6cba1cbb1b892a9e8d97c938871fbe"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be55f8457cd1eac957af0c3f5ece7bc3f033f89b114ef30f710882717670b2a8"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d77adcd56a42d00cc1be30843d3426aa4e660cab4a61021dc84467123f7a00c"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:829f97c8e258593b9daa80638aee3789b7df9da5cf1336035016d76f03b8860c"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:801ec82e4188e935c7f5e22e006d01611d6b41661bba9fe45b60e7ac1a8f84de"}, - {file = "Pillow-9.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:871b72c3643e516db4ecf20efe735deb27fe30ca17800e661d769faab45a18d7"}, - {file = "Pillow-9.3.0-cp310-cp310-win32.whl", hash = "sha256:655a83b0058ba47c7c52e4e2df5ecf484c1b0b0349805896dd350cbc416bdd91"}, - {file = "Pillow-9.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:9f47eabcd2ded7698106b05c2c338672d16a6f2a485e74481f524e2a23c2794b"}, - {file = "Pillow-9.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:57751894f6618fd4308ed8e0c36c333e2f5469744c34729a27532b3db106ee20"}, - {file = "Pillow-9.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7db8b751ad307d7cf238f02101e8e36a128a6cb199326e867d1398067381bff4"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3033fbe1feb1b59394615a1cafaee85e49d01b51d54de0cbf6aa8e64182518a1"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22b012ea2d065fd163ca096f4e37e47cd8b59cf4b0fd47bfca6abb93df70b34c"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a65733d103311331875c1dca05cb4606997fd33d6acfed695b1232ba1df193"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:502526a2cbfa431d9fc2a079bdd9061a2397b842bb6bc4239bb176da00993812"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:90fb88843d3902fe7c9586d439d1e8c05258f41da473952aa8b328d8b907498c"}, - {file = "Pillow-9.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89dca0ce00a2b49024df6325925555d406b14aa3efc2f752dbb5940c52c56b11"}, - {file = "Pillow-9.3.0-cp311-cp311-win32.whl", hash = "sha256:3168434d303babf495d4ba58fc22d6604f6e2afb97adc6a423e917dab828939c"}, - {file = "Pillow-9.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:18498994b29e1cf86d505edcb7edbe814d133d2232d256db8c7a8ceb34d18cef"}, - {file = "Pillow-9.3.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:772a91fc0e03eaf922c63badeca75e91baa80fe2f5f87bdaed4280662aad25c9"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa4107d1b306cdf8953edde0534562607fe8811b6c4d9a486298ad31de733b2"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4012d06c846dc2b80651b120e2cdd787b013deb39c09f407727ba90015c684f"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77ec3e7be99629898c9a6d24a09de089fa5356ee408cdffffe62d67bb75fdd72"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:6c738585d7a9961d8c2821a1eb3dcb978d14e238be3d70f0a706f7fa9316946b"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:828989c45c245518065a110434246c44a56a8b2b2f6347d1409c787e6e4651ee"}, - {file = "Pillow-9.3.0-cp37-cp37m-win32.whl", hash = "sha256:82409ffe29d70fd733ff3c1025a602abb3e67405d41b9403b00b01debc4c9a29"}, - {file = "Pillow-9.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:41e0051336807468be450d52b8edd12ac60bebaa97fe10c8b660f116e50b30e4"}, - {file = "Pillow-9.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:b03ae6f1a1878233ac620c98f3459f79fd77c7e3c2b20d460284e1fb370557d4"}, - {file = "Pillow-9.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4390e9ce199fc1951fcfa65795f239a8a4944117b5935a9317fb320e7767b40f"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40e1ce476a7804b0fb74bcfa80b0a2206ea6a882938eaba917f7a0f004b42502"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0a06a052c5f37b4ed81c613a455a81f9a3a69429b4fd7bb913c3fa98abefc20"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03150abd92771742d4a8cd6f2fa6246d847dcd2e332a18d0c15cc75bf6703040"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:15c42fb9dea42465dfd902fb0ecf584b8848ceb28b41ee2b58f866411be33f07"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:51e0e543a33ed92db9f5ef69a0356e0b1a7a6b6a71b80df99f1d181ae5875636"}, - {file = "Pillow-9.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3dd6caf940756101205dffc5367babf288a30043d35f80936f9bfb37f8355b32"}, - {file = "Pillow-9.3.0-cp38-cp38-win32.whl", hash = "sha256:f1ff2ee69f10f13a9596480335f406dd1f70c3650349e2be67ca3139280cade0"}, - {file = "Pillow-9.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:276a5ca930c913f714e372b2591a22c4bd3b81a418c0f6635ba832daec1cbcfc"}, - {file = "Pillow-9.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:73bd195e43f3fadecfc50c682f5055ec32ee2c933243cafbfdec69ab1aa87cad"}, - {file = "Pillow-9.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c7c8ae3864846fc95f4611c78129301e203aaa2af813b703c55d10cc1628535"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0918e03aa0c72ea56edbb00d4d664294815aa11291a11504a377ea018330d3"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0915e734b33a474d76c28e07292f196cdf2a590a0d25bcc06e64e545f2d146c"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0372acb5d3598f36ec0914deed2a63f6bcdb7b606da04dc19a88d31bf0c05b"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ad58d27a5b0262c0c19b47d54c5802db9b34d38bbf886665b626aff83c74bacd"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:97aabc5c50312afa5e0a2b07c17d4ac5e865b250986f8afe2b02d772567a380c"}, - {file = "Pillow-9.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9aaa107275d8527e9d6e7670b64aabaaa36e5b6bd71a1015ddd21da0d4e06448"}, - {file = "Pillow-9.3.0-cp39-cp39-win32.whl", hash = "sha256:bac18ab8d2d1e6b4ce25e3424f709aceef668347db8637c2296bcf41acb7cf48"}, - {file = "Pillow-9.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:b472b5ea442148d1c3e2209f20f1e0bb0eb556538690fa70b5e1f79fa0ba8dc2"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ab388aaa3f6ce52ac1cb8e122c4bd46657c15905904b3120a6248b5b8b0bc228"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbb8e7f2abee51cef77673be97760abff1674ed32847ce04b4af90f610144c7b"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca31dd6014cb8b0b2db1e46081b0ca7d936f856da3b39744aef499db5d84d02"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c7025dce65566eb6e89f56c9509d4f628fddcedb131d9465cacd3d8bac337e7e"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ebf2029c1f464c59b8bdbe5143c79fa2045a581ac53679733d3a91d400ff9efb"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b59430236b8e58840a0dfb4099a0e8717ffb779c952426a69ae435ca1f57210c"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12ce4932caf2ddf3e41d17fc9c02d67126935a44b86df6a206cf0d7161548627"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae5331c23ce118c53b172fa64a4c037eb83c9165aba3a7ba9ddd3ec9fa64a699"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0b07fffc13f474264c336298d1b4ce01d9c5a011415b79d4ee5527bb69ae6f65"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:073adb2ae23431d3b9bcbcff3fe698b62ed47211d0716b067385538a1b0f28b8"}, - {file = "Pillow-9.3.0.tar.gz", hash = "sha256:c935a22a557a560108d780f9a0fc426dd7459940dc54faa49d83249c8d3e760f"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "pkgutil-resolve-name" -version = "1.3.10" -description = "Resolve a name to an object." -optional = false -python-versions = ">=3.6" -files = [ - {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, - {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, -] - -[[package]] -name = "platformdirs" -version = "3.2.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-3.2.0-py3-none-any.whl", hash = "sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e"}, - {file = "platformdirs-3.2.0.tar.gz", hash = "sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08"}, -] - -[package.extras] -docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.2.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] - -[[package]] -name = "pooch" -version = "1.7.0" -description = "\"Pooch manages your Python library's sample data files: it automatically downloads and stores them in a local directory, with support for versioning and corruption checks.\"" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pooch-1.7.0-py3-none-any.whl", hash = "sha256:74258224fc33d58f53113cf955e8d51bf01386b91492927d0d1b6b341a765ad7"}, - {file = "pooch-1.7.0.tar.gz", hash = "sha256:f174a1041b6447f0eef8860f76d17f60ed2f857dc0efa387a7f08228af05d998"}, -] - -[package.dependencies] -packaging = ">=20.0" -platformdirs = ">=2.5.0" -requests = ">=2.19.0" - -[package.extras] -progress = ["tqdm (>=4.41.0,<5.0.0)"] -sftp = ["paramiko (>=2.7.0)"] -xxhash = ["xxhash (>=1.4.3)"] - -[[package]] -name = "portalocker" -version = "2.7.0" -description = "Wraps the portalocker recipe for easy usage" -optional = false -python-versions = ">=3.5" -files = [ - {file = "portalocker-2.7.0-py2.py3-none-any.whl", hash = "sha256:a07c5b4f3985c3cf4798369631fb7011adb498e2a46d8440efc75a8f29a0f983"}, - {file = "portalocker-2.7.0.tar.gz", hash = "sha256:032e81d534a88ec1736d03f780ba073f047a06c478b06e2937486f334e955c51"}, -] - -[package.dependencies] -pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""} - -[package.extras] -docs = ["sphinx (>=1.7.1)"] -redis = ["redis"] -tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)"] - -[[package]] -name = "praat-parselmouth" -version = "0.4.3" -description = "Praat in Python, the Pythonic way" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -files = [ - {file = "praat-parselmouth-0.4.3.tar.gz", hash = "sha256:93538d0ba06444b68d18b793efb436b0d645c62c0397c4977c1d27b679aee168"}, - {file = "praat_parselmouth-0.4.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:124925f3e40a6d626d65789d449bdabe43078528efbee6f3a1df6e67db60c971"}, - {file = "praat_parselmouth-0.4.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:0d3023d9b625c6b0a3cbe8a4f09cc23f666f9b9df40c59e33c4c9ca5b8ea1dac"}, - {file = "praat_parselmouth-0.4.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:6841b9d9d2a614382cf186311610d663f0170ba20824296878eb98905b04899a"}, - {file = "praat_parselmouth-0.4.3-cp27-cp27m-win32.whl", hash = "sha256:4fee56603cb57326457c6af779b89f96e7b2745114baa996659e1d52e5f245a3"}, - {file = "praat_parselmouth-0.4.3-cp27-cp27m-win_amd64.whl", hash = "sha256:dc688749a0db4144936d3ed5180996500eb927bbf321192019ddee535fb97f3d"}, - {file = "praat_parselmouth-0.4.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:c0ccf73de16c0f69162952b0d1865d4dbc929de0f9b88a9d7aea57f454de3cb8"}, - {file = "praat_parselmouth-0.4.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:87fa2dd7f8b5dd5e3127af82e97b229ae2db8e1656525329224df4c0bffa024c"}, - {file = "praat_parselmouth-0.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2bc111055efccf2bb25039a7891ec9ef106b13ddc5680293659ff0b4c5f4353f"}, - {file = "praat_parselmouth-0.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd38542210b1f381086b4a9424832b2330c42712e0fb7ea6c28c9200119c294b"}, - {file = "praat_parselmouth-0.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a536b37411c52171500984c97bfd66dc000701a7dc0807e11061b85a653a600a"}, - {file = "praat_parselmouth-0.4.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6ea1ab0632eff129516f147041aaf7874e50770561a2e9b9c81913b6de243f2a"}, - {file = "praat_parselmouth-0.4.3-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:543ba3deb32502e93074b76b1cfb3f09e598e5d9f74a0345fa5b3928fedb5a51"}, - {file = "praat_parselmouth-0.4.3-cp310-cp310-win32.whl", hash = "sha256:e0addf774a57d57a54df2b06de04ad0de34e81a3abfda03f744c732776c779ec"}, - {file = "praat_parselmouth-0.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:fc497357aeea2e3cbca2fb308d66b9de9739dc6b320ca2661ca6250f7a7489bd"}, - {file = "praat_parselmouth-0.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:afac52cb7a72cda7fe2ec1d9573d8f402786abcb06bd7a22f2ca240f95e33263"}, - {file = "praat_parselmouth-0.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b2261a79c2dc5387a7a678ec304ef8dd00ed93d9e028148bbb064fd0ac222a3a"}, - {file = "praat_parselmouth-0.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:de31b458d3c1ca7ee45506871a38fdc3aec44526c065552adf8bec2876e816bd"}, - {file = "praat_parselmouth-0.4.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:63ff24e045bed7c44f140fb7bab910d89fd3a45b7e8afe5b5e936aa2eea62904"}, - {file = "praat_parselmouth-0.4.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a40c51c628235c54c8956306fc58fd14cd04127d85359134ef73ef35ff19d651"}, - {file = "praat_parselmouth-0.4.3-cp311-cp311-win32.whl", hash = "sha256:f8ad9ee3be60d33f1ad593ec5f99466b1c266e00d29a5ec5787f969c618a7a9a"}, - {file = "praat_parselmouth-0.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:c32b1f3632e69ed67f501c635fff37ad72e1eae4ddd1c2c0827c4690c06ee990"}, - {file = "praat_parselmouth-0.4.3-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:1dcb6f55376f193c83d123953a55de471bcadd756af3b157c13d455b0c052999"}, - {file = "praat_parselmouth-0.4.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:0970facd26b771f5799a396a0e54d12a69fbf8904a4f6ae0442f3831175e4508"}, - {file = "praat_parselmouth-0.4.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:5c1104f41d9fef48cd44247738b9c8735e10a12ba0a1860e478e0bd69201813e"}, - {file = "praat_parselmouth-0.4.3-cp35-cp35m-win32.whl", hash = "sha256:3d12469e301d9a25f29f6cb5427aa9a1276e7f2f1edf1a3caede69a84c46170f"}, - {file = "praat_parselmouth-0.4.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c4142faf664dd6c7f1773d04331b278d92e17064eaaef09132954f72a9041ea0"}, - {file = "praat_parselmouth-0.4.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:5ea2079d519e8d42ed8d2de3c4f68803110060a8ae5d1c56df795c600aa1c3be"}, - {file = "praat_parselmouth-0.4.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2e88f00b740548cf3de5768b2d06e296e525164ea71ccc991920f41f2e277ad2"}, - {file = "praat_parselmouth-0.4.3-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2da226bccd52fd81223eb94a7ea43a1a7588e4384ea65ce0818329b73ef8df6d"}, - {file = "praat_parselmouth-0.4.3-cp36-cp36m-win32.whl", hash = "sha256:0f3af0413992398ac613b0eefdfbcb8cad064c36a28b972300a2bb760523c109"}, - {file = "praat_parselmouth-0.4.3-cp36-cp36m-win_amd64.whl", hash = "sha256:e0ed79941b6e37a440860511767eedd85ec003060870d10ff1f98773b2a268ae"}, - {file = "praat_parselmouth-0.4.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:10f3113ad4f5f6df5fe81d4080ca3ad46de2fe0fdb8ebbcad1ba884b1cae3b9d"}, - {file = "praat_parselmouth-0.4.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6e9338f7a1b304390014bb2eec619e5a306527a4df438e68439c92aa968627dc"}, - {file = "praat_parselmouth-0.4.3-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cb3798b2ca8163444662b6ae84a74b1add38b2c04e5af8d07bde55cf0335300a"}, - {file = "praat_parselmouth-0.4.3-cp37-cp37m-win32.whl", hash = "sha256:d947f9d1fb092b91acca1259ce4dd62ff4f456338958fd1fd41ee65efc53ca2c"}, - {file = "praat_parselmouth-0.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:2f3e026f590aeec8f68921359f56a42efa43076942f271244bee57fd22db8eef"}, - {file = "praat_parselmouth-0.4.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:28844229dab2a9335629b4526188b9540d02208856f48b1a46776279c022f937"}, - {file = "praat_parselmouth-0.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410748af84eb8c2eb69e408e300694a45090ed7c4f31375c4ec75a8c18f87169"}, - {file = "praat_parselmouth-0.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:30ff6f17babad25b9d6ab086465a54494eef9d1b4368b0722230c5282be2bf94"}, - {file = "praat_parselmouth-0.4.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ff7096bc3e87a8f719e66f5e16a90e2f6de445612abd234f86837d390b947421"}, - {file = "praat_parselmouth-0.4.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f41d121c4d2322ff12808bb2c4490609f750f89064170e327dfd74fca13cc212"}, - {file = "praat_parselmouth-0.4.3-cp38-cp38-win32.whl", hash = "sha256:9af9945db11fab0e1ed29ad20f7c97a3e7a8d016328ad6d7237a0d7819db075e"}, - {file = "praat_parselmouth-0.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:ae0c63c432e8216d7c70da44131f51c845fb81d48ac04eb5f39ebcfae34624be"}, - {file = "praat_parselmouth-0.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8e25658af5a87ed502753de6924c51bf3400d4078e67a611b5874ab08b478fdb"}, - {file = "praat_parselmouth-0.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7aa2ffd0c6e47feda35343a9d6722b2558f3677a4a51bf5ec864f27ab80e2f42"}, - {file = "praat_parselmouth-0.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3b245d9457ab39f12142da160cda12c4c2a58d9b916e5bb33e6b3ac267882d46"}, - {file = "praat_parselmouth-0.4.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:da9779a694941074bc5b199dd3cb41ad4af3306552f06af8dbfdea6ab0a87dec"}, - {file = "praat_parselmouth-0.4.3-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cfa141c04fd8a0477f91c168878112098a25cbac7ac4a20de627bc9293ee4667"}, - {file = "praat_parselmouth-0.4.3-cp39-cp39-win32.whl", hash = "sha256:6941fe602802fd57ecbedecd612b41493b7d1c6bf722ac0cbf3f47f805fbbd43"}, - {file = "praat_parselmouth-0.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:5252496e0391754a642973837670c56ecd39c8e0a1f7ec6e6b60b0cd2cc9f51d"}, - {file = "praat_parselmouth-0.4.3-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:fd7c143c6511807b67c92b3ab94733746c0ae3a7b4ba52d6763585c4d459061d"}, - {file = "praat_parselmouth-0.4.3-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:7ad0739ad6c102817c7d43b67b7270f78cb431eb72b6ecd9a17e354d1b379deb"}, - {file = "praat_parselmouth-0.4.3-pp27-pypy_73-win32.whl", hash = "sha256:f5e98ec1f41efba90bedab358cff8e6a3c6473978e1f42b55d0977e580efe673"}, - {file = "praat_parselmouth-0.4.3-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7b58c1c8fd967446f6d74775b5d9bceadfe35a928fa5f192d4d03d80cb005d92"}, - {file = "praat_parselmouth-0.4.3-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:d217df07c770156fa284aff3e7a5c11eb43e37f0226730d729d6b45be8a7c4d7"}, - {file = "praat_parselmouth-0.4.3-pp36-pypy36_pp73-win32.whl", hash = "sha256:29cb47438989f8155c3b3dca987afd48999dec71e4b79564aa7e922c3c5c1f9a"}, - {file = "praat_parselmouth-0.4.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5f772b4a097654883f4bba41efae419f9ebdd5e83ef7a857e547100d26663e2c"}, - {file = "praat_parselmouth-0.4.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:bf9634a6986732dc43a88b3a16a0000cff903da1db6556b7959a6a4897f25570"}, - {file = "praat_parselmouth-0.4.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fab1bbb6a88f47cb5d0db07a4fd6d88b9294d2775a7556aeb459e96ac372e29f"}, - {file = "praat_parselmouth-0.4.3-pp37-pypy37_pp73-win32.whl", hash = "sha256:261f03f95f25943da2cf746599e47acfcf79b7fc823c871571901d6c97bad948"}, - {file = "praat_parselmouth-0.4.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:199b8df2659a1e6f30e9ae3064b0a28a661d834d2bccb56d22051c40cc348817"}, - {file = "praat_parselmouth-0.4.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ef1f3f6bd08cc410d0d595f6a9c7dd72558e30ad3bd7949c94ea4e07a2de2605"}, - {file = "praat_parselmouth-0.4.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:28a61b7a3cf95a53554dd3ebb4f48e991d4b913ae2d2fbc3868a4e864d69794f"}, - {file = "praat_parselmouth-0.4.3-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:488833ee33690fa1a57a3c429d286e42e6882748f5c3d28dc50889abec12b8c2"}, - {file = "praat_parselmouth-0.4.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:10f181e199c47fa90fe7cad065275f7f3ccda2de6febf86394cf96aa48531079"}, - {file = "praat_parselmouth-0.4.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:52702bc5cdf59b2b4db87448fe9042307e5ebce6b67ee5ea55c2b8627ce803e0"}, - {file = "praat_parselmouth-0.4.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7d4f5d7c701517986654365f0a41b8b4a610a2ddc0365da60e48c098774259b"}, - {file = "praat_parselmouth-0.4.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dc013608a536ad74efdc3242421cabfcb8cb2e9cd1259ec9de9aeaa141c2d14"}, - {file = "praat_parselmouth-0.4.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d593065ed1500d305d9cf3d20f5ac7e3671061c3c073ef6e94e97817a664d399"}, -] - -[package.dependencies] -numpy = ">=1.7.0" - -[[package]] -name = "protobuf" -version = "3.20.3" -description = "Protocol Buffers" -optional = false -python-versions = ">=3.7" -files = [ - {file = "protobuf-3.20.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:f4bd856d702e5b0d96a00ec6b307b0f51c1982c2bf9c0052cf9019e9a544ba99"}, - {file = "protobuf-3.20.3-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9aae4406ea63d825636cc11ffb34ad3379335803216ee3a856787bcf5ccc751e"}, - {file = "protobuf-3.20.3-cp310-cp310-win32.whl", hash = "sha256:28545383d61f55b57cf4df63eebd9827754fd2dc25f80c5253f9184235db242c"}, - {file = "protobuf-3.20.3-cp310-cp310-win_amd64.whl", hash = "sha256:67a3598f0a2dcbc58d02dd1928544e7d88f764b47d4a286202913f0b2801c2e7"}, - {file = "protobuf-3.20.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:899dc660cd599d7352d6f10d83c95df430a38b410c1b66b407a6b29265d66469"}, - {file = "protobuf-3.20.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64857f395505ebf3d2569935506ae0dfc4a15cb80dc25261176c784662cdcc4"}, - {file = "protobuf-3.20.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d9e4432ff660d67d775c66ac42a67cf2453c27cb4d738fc22cb53b5d84c135d4"}, - {file = "protobuf-3.20.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:74480f79a023f90dc6e18febbf7b8bac7508420f2006fabd512013c0c238f454"}, - {file = "protobuf-3.20.3-cp37-cp37m-win32.whl", hash = "sha256:b6cc7ba72a8850621bfec987cb72623e703b7fe2b9127a161ce61e61558ad905"}, - {file = "protobuf-3.20.3-cp37-cp37m-win_amd64.whl", hash = "sha256:8c0c984a1b8fef4086329ff8dd19ac77576b384079247c770f29cc8ce3afa06c"}, - {file = "protobuf-3.20.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:de78575669dddf6099a8a0f46a27e82a1783c557ccc38ee620ed8cc96d3be7d7"}, - {file = "protobuf-3.20.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f4c42102bc82a51108e449cbb32b19b180022941c727bac0cfd50170341f16ee"}, - {file = "protobuf-3.20.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:44246bab5dd4b7fbd3c0c80b6f16686808fab0e4aca819ade6e8d294a29c7050"}, - {file = "protobuf-3.20.3-cp38-cp38-win32.whl", hash = "sha256:c02ce36ec760252242a33967d51c289fd0e1c0e6e5cc9397e2279177716add86"}, - {file = "protobuf-3.20.3-cp38-cp38-win_amd64.whl", hash = "sha256:447d43819997825d4e71bf5769d869b968ce96848b6479397e29fc24c4a5dfe9"}, - {file = "protobuf-3.20.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:398a9e0c3eaceb34ec1aee71894ca3299605fa8e761544934378bbc6c97de23b"}, - {file = "protobuf-3.20.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf01b5720be110540be4286e791db73f84a2b721072a3711efff6c324cdf074b"}, - {file = "protobuf-3.20.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:daa564862dd0d39c00f8086f88700fdbe8bc717e993a21e90711acfed02f2402"}, - {file = "protobuf-3.20.3-cp39-cp39-win32.whl", hash = "sha256:819559cafa1a373b7096a482b504ae8a857c89593cf3a25af743ac9ecbd23480"}, - {file = "protobuf-3.20.3-cp39-cp39-win_amd64.whl", hash = "sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7"}, - {file = "protobuf-3.20.3-py2.py3-none-any.whl", hash = "sha256:a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db"}, - {file = "protobuf-3.20.3.tar.gz", hash = "sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2"}, -] - -[[package]] -name = "pyasn1" -version = "0.4.8" -description = "ASN.1 types and codecs" -optional = false -python-versions = "*" -files = [ - {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"}, - {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"}, -] - -[[package]] -name = "pyasn1-modules" -version = "0.2.8" -description = "A collection of ASN.1-based protocols modules." -optional = false -python-versions = "*" -files = [ - {file = "pyasn1-modules-0.2.8.tar.gz", hash = "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e"}, - {file = "pyasn1_modules-0.2.8-py2.py3-none-any.whl", hash = "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74"}, -] - -[package.dependencies] -pyasn1 = ">=0.4.6,<0.5.0" - -[[package]] -name = "pycparser" -version = "2.21" -description = "C parser in Python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] - -[[package]] -name = "pydantic" -version = "1.10.7" -description = "Data validation and settings management using python type hints" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pydantic-1.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e79e999e539872e903767c417c897e729e015872040e56b96e67968c3b918b2d"}, - {file = "pydantic-1.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:01aea3a42c13f2602b7ecbbea484a98169fb568ebd9e247593ea05f01b884b2e"}, - {file = "pydantic-1.10.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:516f1ed9bc2406a0467dd777afc636c7091d71f214d5e413d64fef45174cfc7a"}, - {file = "pydantic-1.10.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae150a63564929c675d7f2303008d88426a0add46efd76c3fc797cd71cb1b46f"}, - {file = "pydantic-1.10.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ecbbc51391248116c0a055899e6c3e7ffbb11fb5e2a4cd6f2d0b93272118a209"}, - {file = "pydantic-1.10.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f4a2b50e2b03d5776e7f21af73e2070e1b5c0d0df255a827e7c632962f8315af"}, - {file = "pydantic-1.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:a7cd2251439988b413cb0a985c4ed82b6c6aac382dbaff53ae03c4b23a70e80a"}, - {file = "pydantic-1.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:68792151e174a4aa9e9fc1b4e653e65a354a2fa0fed169f7b3d09902ad2cb6f1"}, - {file = "pydantic-1.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe2507b8ef209da71b6fb5f4e597b50c5a34b78d7e857c4f8f3115effaef5fe"}, - {file = "pydantic-1.10.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10a86d8c8db68086f1e30a530f7d5f83eb0685e632e411dbbcf2d5c0150e8dcd"}, - {file = "pydantic-1.10.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75ae19d2a3dbb146b6f324031c24f8a3f52ff5d6a9f22f0683694b3afcb16fb"}, - {file = "pydantic-1.10.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:464855a7ff7f2cc2cf537ecc421291b9132aa9c79aef44e917ad711b4a93163b"}, - {file = "pydantic-1.10.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:193924c563fae6ddcb71d3f06fa153866423ac1b793a47936656e806b64e24ca"}, - {file = "pydantic-1.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:b4a849d10f211389502059c33332e91327bc154acc1845f375a99eca3afa802d"}, - {file = "pydantic-1.10.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cc1dde4e50a5fc1336ee0581c1612215bc64ed6d28d2c7c6f25d2fe3e7c3e918"}, - {file = "pydantic-1.10.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0cfe895a504c060e5d36b287ee696e2fdad02d89e0d895f83037245218a87fe"}, - {file = "pydantic-1.10.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:670bb4683ad1e48b0ecb06f0cfe2178dcf74ff27921cdf1606e527d2617a81ee"}, - {file = "pydantic-1.10.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:950ce33857841f9a337ce07ddf46bc84e1c4946d2a3bba18f8280297157a3fd1"}, - {file = "pydantic-1.10.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c15582f9055fbc1bfe50266a19771bbbef33dd28c45e78afbe1996fd70966c2a"}, - {file = "pydantic-1.10.7-cp37-cp37m-win_amd64.whl", hash = "sha256:82dffb306dd20bd5268fd6379bc4bfe75242a9c2b79fec58e1041fbbdb1f7914"}, - {file = "pydantic-1.10.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c7f51861d73e8b9ddcb9916ae7ac39fb52761d9ea0df41128e81e2ba42886cd"}, - {file = "pydantic-1.10.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6434b49c0b03a51021ade5c4daa7d70c98f7a79e95b551201fff682fc1661245"}, - {file = "pydantic-1.10.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64d34ab766fa056df49013bb6e79921a0265204c071984e75a09cbceacbbdd5d"}, - {file = "pydantic-1.10.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:701daea9ffe9d26f97b52f1d157e0d4121644f0fcf80b443248434958fd03dc3"}, - {file = "pydantic-1.10.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf135c46099ff3f919d2150a948ce94b9ce545598ef2c6c7bf55dca98a304b52"}, - {file = "pydantic-1.10.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0f85904f73161817b80781cc150f8b906d521fa11e3cdabae19a581c3606209"}, - {file = "pydantic-1.10.7-cp38-cp38-win_amd64.whl", hash = "sha256:9f6f0fd68d73257ad6685419478c5aece46432f4bdd8d32c7345f1986496171e"}, - {file = "pydantic-1.10.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c230c0d8a322276d6e7b88c3f7ce885f9ed16e0910354510e0bae84d54991143"}, - {file = "pydantic-1.10.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:976cae77ba6a49d80f461fd8bba183ff7ba79f44aa5cfa82f1346b5626542f8e"}, - {file = "pydantic-1.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d45fc99d64af9aaf7e308054a0067fdcd87ffe974f2442312372dfa66e1001d"}, - {file = "pydantic-1.10.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d2a5ebb48958754d386195fe9e9c5106f11275867051bf017a8059410e9abf1f"}, - {file = "pydantic-1.10.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:abfb7d4a7cd5cc4e1d1887c43503a7c5dd608eadf8bc615413fc498d3e4645cd"}, - {file = "pydantic-1.10.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:80b1fab4deb08a8292d15e43a6edccdffa5377a36a4597bb545b93e79c5ff0a5"}, - {file = "pydantic-1.10.7-cp39-cp39-win_amd64.whl", hash = "sha256:d71e69699498b020ea198468e2480a2f1e7433e32a3a99760058c6520e2bea7e"}, - {file = "pydantic-1.10.7-py3-none-any.whl", hash = "sha256:0cd181f1d0b1d00e2b705f1bf1ac7799a2d938cce3376b8007df62b29be3c2c6"}, - {file = "pydantic-1.10.7.tar.gz", hash = "sha256:cfc83c0678b6ba51b0532bea66860617c4cd4251ecf76e9846fa5a9f3454e97e"}, -] - -[package.dependencies] -typing-extensions = ">=4.2.0" - -[package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] - -[[package]] -name = "pydub" -version = "0.25.1" -description = "Manipulate audio with an simple and easy high level interface" -optional = false -python-versions = "*" -files = [ - {file = "pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"}, - {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"}, -] - -[[package]] -name = "pygments" -version = "2.15.1" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, - {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, -] - -[package.extras] -plugins = ["importlib-metadata"] - -[[package]] -name = "pyparsing" -version = "3.0.9" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -optional = false -python-versions = ">=3.6.8" -files = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, -] - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "pyrsistent" -version = "0.19.3" -description = "Persistent/Functional/Immutable data structures" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, - {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, - {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, - {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, - {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, - {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, -] - -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-multipart" -version = "0.0.6" -description = "A streaming multipart parser for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "python_multipart-0.0.6-py3-none-any.whl", hash = "sha256:ee698bab5ef148b0a760751c261902cd096e57e10558e11aca17646b74ee1c18"}, - {file = "python_multipart-0.0.6.tar.gz", hash = "sha256:e9925a80bb668529f1b67c7fdb0a5dacdd7cbfc6fb0bff3ea443fe22bdd62132"}, -] - -[package.extras] -dev = ["atomicwrites (==1.2.1)", "attrs (==19.2.0)", "coverage (==6.5.0)", "hatch", "invoke (==1.7.3)", "more-itertools (==4.3.0)", "pbr (==4.3.0)", "pluggy (==1.0.0)", "py (==1.11.0)", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-timeout (==2.1.0)", "pyyaml (==5.1)"] - -[[package]] -name = "pytz" -version = "2023.3" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, -] - -[[package]] -name = "pywin32" -version = "306" -description = "Python for Window Extensions" -optional = false -python-versions = "*" -files = [ - {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, - {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, - {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, - {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, - {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, - {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, - {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, - {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, - {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, - {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, - {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, - {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, - {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, - {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, -] - -[[package]] -name = "pyworld" -version = "0.3.2" -description = "PyWorld is a Python wrapper for WORLD vocoder." -optional = false -python-versions = "*" -files = [ - {file = "pyworld-0.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:688730fa5394709a185061e5a58e7a614b4548d814eeecc1dc825f73af53a9aa"}, - {file = "pyworld-0.3.2-cp36-cp36m-win32.whl", hash = "sha256:1e110e2f95d45b0765f4ba4e49b389f9b931c9c438cd69774dce20699cc6dc7d"}, - {file = "pyworld-0.3.2-cp36-cp36m-win_amd64.whl", hash = "sha256:e858668185a177e9e30c0ff12de3e166b39124c14b424ba3be31418694dcb2b7"}, - {file = "pyworld-0.3.2-cp37-cp37m-win32.whl", hash = "sha256:b5325e7a08f104a9bf533d54423546bd3ef05953b80b79a8ced34efbb892862b"}, - {file = "pyworld-0.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:fddd503ac264810221d9460bfdc1454c5c1313214e1c58a4ddd9417699f99bc8"}, - {file = "pyworld-0.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:502fbf577f4e56a497b3ad8c29434ec423eabc4674b93fa11046837d297c97be"}, - {file = "pyworld-0.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:a8ea62219b9bce0e514ff05ee80cfbc1248b165d8d802f00b9b8754510701f3e"}, - {file = "pyworld-0.3.2.tar.gz", hash = "sha256:668d09842c3cfa74b1f6edabdb0058a64c04f9cf17b93883e6da811e1204ad4d"}, -] - -[package.dependencies] -cython = "*" -numpy = "*" - -[package.extras] -sdist = ["cython", "numpy"] -test = ["nose"] - -[[package]] -name = "pyyaml" -version = "6.0" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] - -[[package]] -name = "regex" -version = "2023.3.23" -description = "Alternative regular expression module, to replace re." -optional = false -python-versions = ">=3.8" -files = [ - {file = "regex-2023.3.23-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:845a5e2d84389c4ddada1a9b95c055320070f18bb76512608374aca00d22eca8"}, - {file = "regex-2023.3.23-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:87d9951f5a538dd1d016bdc0dcae59241d15fa94860964833a54d18197fcd134"}, - {file = "regex-2023.3.23-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37ae17d3be44c0b3f782c28ae9edd8b47c1f1776d4cabe87edc0b98e1f12b021"}, - {file = "regex-2023.3.23-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b8eb1e3bca6b48dc721818a60ae83b8264d4089a4a41d62be6d05316ec38e15"}, - {file = "regex-2023.3.23-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df45fac182ebc3c494460c644e853515cc24f5ad9da05f8ffb91da891bfee879"}, - {file = "regex-2023.3.23-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7006105b10b59971d3b248ad75acc3651c7e4cf54d81694df5a5130a3c3f7ea"}, - {file = "regex-2023.3.23-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93f3f1aa608380fe294aa4cb82e2afda07a7598e828d0341e124b8fd9327c715"}, - {file = "regex-2023.3.23-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:787954f541ab95d8195d97b0b8cf1dc304424adb1e07365967e656b92b38a699"}, - {file = "regex-2023.3.23-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:20abe0bdf03630fe92ccafc45a599bca8b3501f48d1de4f7d121153350a2f77d"}, - {file = "regex-2023.3.23-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11d00c31aeab9a6e0503bc77e73ed9f4527b3984279d997eb145d7c7be6268fd"}, - {file = "regex-2023.3.23-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d5bbe0e1511b844794a3be43d6c145001626ba9a6c1db8f84bdc724e91131d9d"}, - {file = "regex-2023.3.23-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ea3c0cb56eadbf4ab2277e7a095676370b3e46dbfc74d5c383bd87b0d6317910"}, - {file = "regex-2023.3.23-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d895b4c863059a4934d3e874b90998df774644a41b349ebb330f85f11b4ef2c0"}, - {file = "regex-2023.3.23-cp310-cp310-win32.whl", hash = "sha256:9d764514d19b4edcc75fd8cb1423448ef393e8b6cbd94f38cab983ab1b75855d"}, - {file = "regex-2023.3.23-cp310-cp310-win_amd64.whl", hash = "sha256:11d1f2b7a0696dc0310de0efb51b1f4d813ad4401fe368e83c0c62f344429f98"}, - {file = "regex-2023.3.23-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8a9c63cde0eaa345795c0fdeb19dc62d22e378c50b0bc67bf4667cd5b482d98b"}, - {file = "regex-2023.3.23-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dd7200b4c27b68cf9c9646da01647141c6db09f48cc5b51bc588deaf8e98a797"}, - {file = "regex-2023.3.23-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22720024b90a6ba673a725dcc62e10fb1111b889305d7c6b887ac7466b74bedb"}, - {file = "regex-2023.3.23-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b190a339090e6af25f4a5fd9e77591f6d911cc7b96ecbb2114890b061be0ac1"}, - {file = "regex-2023.3.23-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e76b6fc0d8e9efa39100369a9b3379ce35e20f6c75365653cf58d282ad290f6f"}, - {file = "regex-2023.3.23-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7868b8f218bf69a2a15402fde08b08712213a1f4b85a156d90473a6fb6b12b09"}, - {file = "regex-2023.3.23-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2472428efc4127374f494e570e36b30bb5e6b37d9a754f7667f7073e43b0abdd"}, - {file = "regex-2023.3.23-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c37df2a060cb476d94c047b18572ee2b37c31f831df126c0da3cd9227b39253d"}, - {file = "regex-2023.3.23-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4479f9e2abc03362df4045b1332d4a2b7885b245a30d4f4b051c4083b97d95d8"}, - {file = "regex-2023.3.23-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2396e0678167f2d0c197da942b0b3fb48fee2f0b5915a0feb84d11b6686afe6"}, - {file = "regex-2023.3.23-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:75f288c60232a5339e0ff2fa05779a5e9c74e9fc085c81e931d4a264501e745b"}, - {file = "regex-2023.3.23-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c869260aa62cee21c5eb171a466c0572b5e809213612ef8d495268cd2e34f20d"}, - {file = "regex-2023.3.23-cp311-cp311-win32.whl", hash = "sha256:25f0532fd0c53e96bad84664171969de9673b4131f2297f1db850d3918d58858"}, - {file = "regex-2023.3.23-cp311-cp311-win_amd64.whl", hash = "sha256:5ccfafd98473e007cebf7da10c1411035b7844f0f204015efd050601906dbb53"}, - {file = "regex-2023.3.23-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6572ff287176c0fb96568adb292674b421fa762153ed074d94b1d939ed92c253"}, - {file = "regex-2023.3.23-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a610e0adfcb0fc84ea25f6ea685e39e74cbcd9245a72a9a7aab85ff755a5ed27"}, - {file = "regex-2023.3.23-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086afe222d58b88b62847bdbd92079b4699350b4acab892f88a935db5707c790"}, - {file = "regex-2023.3.23-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79e29fd62fa2f597a6754b247356bda14b866131a22444d67f907d6d341e10f3"}, - {file = "regex-2023.3.23-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c07ce8e9eee878a48ebeb32ee661b49504b85e164b05bebf25420705709fdd31"}, - {file = "regex-2023.3.23-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b036f401895e854de9fefe061518e78d506d8a919cc250dc3416bca03f6f9a"}, - {file = "regex-2023.3.23-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78ac8dd8e18800bb1f97aad0d73f68916592dddf233b99d2b5cabc562088503a"}, - {file = "regex-2023.3.23-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:539dd010dc35af935b32f248099e38447bbffc10b59c2b542bceead2bed5c325"}, - {file = "regex-2023.3.23-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9bf4a5626f2a0ea006bf81e8963f498a57a47d58907eaa58f4b3e13be68759d8"}, - {file = "regex-2023.3.23-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf86b4328c204c3f315074a61bc1c06f8a75a8e102359f18ce99fbcbbf1951f0"}, - {file = "regex-2023.3.23-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:2848bf76673c83314068241c8d5b7fa9ad9bed866c979875a0e84039349e8fa7"}, - {file = "regex-2023.3.23-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c125a02d22c555e68f7433bac8449992fa1cead525399f14e47c2d98f2f0e467"}, - {file = "regex-2023.3.23-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cd1671e9d5ac05ce6aa86874dd8dfa048824d1dbe73060851b310c6c1a201a96"}, - {file = "regex-2023.3.23-cp38-cp38-win32.whl", hash = "sha256:fffe57312a358be6ec6baeb43d253c36e5790e436b7bf5b7a38df360363e88e9"}, - {file = "regex-2023.3.23-cp38-cp38-win_amd64.whl", hash = "sha256:dbb3f87e15d3dd76996d604af8678316ad2d7d20faa394e92d9394dfd621fd0c"}, - {file = "regex-2023.3.23-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c88e8c226473b5549fe9616980ea7ca09289246cfbdf469241edf4741a620004"}, - {file = "regex-2023.3.23-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6560776ec19c83f3645bbc5db64a7a5816c9d8fb7ed7201c5bcd269323d88072"}, - {file = "regex-2023.3.23-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b1fc2632c01f42e06173d8dd9bb2e74ab9b0afa1d698058c867288d2c7a31f3"}, - {file = "regex-2023.3.23-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fdf7ad455f1916b8ea5cdbc482d379f6daf93f3867b4232d14699867a5a13af7"}, - {file = "regex-2023.3.23-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5fc33b27b1d800fc5b78d7f7d0f287e35079ecabe68e83d46930cf45690e1c8c"}, - {file = "regex-2023.3.23-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c49552dc938e3588f63f8a78c86f3c9c75301e813bca0bef13bdb4b87ccf364"}, - {file = "regex-2023.3.23-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e152461e9a0aedec7d37fc66ec0fa635eca984777d3d3c3e36f53bf3d3ceb16e"}, - {file = "regex-2023.3.23-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:db034255e72d2995cf581b14bb3fc9c00bdbe6822b49fcd4eef79e1d5f232618"}, - {file = "regex-2023.3.23-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:55ae114da21b7a790b90255ea52d2aa3a0d121a646deb2d3c6a3194e722fc762"}, - {file = "regex-2023.3.23-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ef3f528fe1cc3d139508fe1b22523745aa77b9d6cb5b0bf277f48788ee0b993f"}, - {file = "regex-2023.3.23-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:a81c9ec59ca2303acd1ccd7b9ac409f1e478e40e96f8f79b943be476c5fdb8bb"}, - {file = "regex-2023.3.23-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cde09c4fdd070772aa2596d97e942eb775a478b32459e042e1be71b739d08b77"}, - {file = "regex-2023.3.23-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3cd9f5dd7b821f141d3a6ca0d5d9359b9221e4f051ca3139320adea9f1679691"}, - {file = "regex-2023.3.23-cp39-cp39-win32.whl", hash = "sha256:7304863f3a652dab5e68e6fb1725d05ebab36ec0390676d1736e0571ebb713ef"}, - {file = "regex-2023.3.23-cp39-cp39-win_amd64.whl", hash = "sha256:54c3fa855a3f7438149de3211738dd9b5f0c733f48b54ae05aa7fce83d48d858"}, - {file = "regex-2023.3.23.tar.gz", hash = "sha256:dc80df325b43ffea5cdea2e3eaa97a44f3dd298262b1c7fe9dbb2a9522b956a7"}, -] - -[[package]] -name = "requests" -version = "2.31.0" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.7" -files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "requests-oauthlib" -version = "1.3.1" -description = "OAuthlib authentication support for Requests." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"}, - {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"}, -] - -[package.dependencies] -oauthlib = ">=3.0.0" -requests = ">=2.0.0" - -[package.extras] -rsa = ["oauthlib[signedtoken] (>=3.0.0)"] - -[[package]] -name = "resampy" -version = "0.4.2" -description = "Efficient signal resampling" -optional = false -python-versions = "*" -files = [ - {file = "resampy-0.4.2-py3-none-any.whl", hash = "sha256:4340b6c4e685a865621dfcf016e2a3dd49d865446b6025e30fe88567f22e052e"}, - {file = "resampy-0.4.2.tar.gz", hash = "sha256:0a469e6ddb89956f4fd6c88728300e4bbd186fae569dd4fd17dae51a91cbaa15"}, -] - -[package.dependencies] -numba = ">=0.53" -numpy = ">=1.17" - -[package.extras] -design = ["optuna (>=2.10.0)"] -docs = ["numpydoc", "sphinx (!=1.3.1)"] -tests = ["pytest (<8)", "pytest-cov", "scipy (>=1.0)"] - -[[package]] -name = "rfc3986" -version = "1.5.0" -description = "Validating URI References per RFC 3986" -optional = false -python-versions = "*" -files = [ - {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"}, - {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"}, -] - -[package.dependencies] -idna = {version = "*", optional = true, markers = "extra == \"idna2008\""} - -[package.extras] -idna2008 = ["idna"] - -[[package]] -name = "rsa" -version = "4.9" -description = "Pure-Python RSA implementation" -optional = false -python-versions = ">=3.6,<4" -files = [ - {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, - {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, -] - -[package.dependencies] -pyasn1 = ">=0.1.3" - -[[package]] -name = "sacrebleu" -version = "2.3.1" -description = "Hassle-free computation of shareable, comparable, and reproducible BLEU, chrF, and TER scores" -optional = false -python-versions = ">=3.6" -files = [ - {file = "sacrebleu-2.3.1-py3-none-any.whl", hash = "sha256:352227b8ca9e04ed509266d1fee6c8cff0ea1417c429f8c684645ad2db8b02e7"}, - {file = "sacrebleu-2.3.1.tar.gz", hash = "sha256:7969b294f15dae84d80fb2b76d30c83b245f49f4ecb1cac79acb553eb93cb537"}, -] - -[package.dependencies] -colorama = "*" -lxml = "*" -numpy = ">=1.17" -portalocker = "*" -regex = "*" -tabulate = ">=0.8.9" - -[package.extras] -ja = ["ipadic (>=1.0,<2.0)", "mecab-python3 (==1.0.5)"] -ko = ["mecab-ko (==1.0.0)", "mecab-ko-dic (>=1.0,<2.0)"] - -[[package]] -name = "scikit-learn" -version = "1.2.2" -description = "A set of python modules for machine learning and data mining" -optional = false -python-versions = ">=3.8" -files = [ - {file = "scikit-learn-1.2.2.tar.gz", hash = "sha256:8429aea30ec24e7a8c7ed8a3fa6213adf3814a6efbea09e16e0a0c71e1a1a3d7"}, - {file = "scikit_learn-1.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99cc01184e347de485bf253d19fcb3b1a3fb0ee4cea5ee3c43ec0cc429b6d29f"}, - {file = "scikit_learn-1.2.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e6e574db9914afcb4e11ade84fab084536a895ca60aadea3041e85b8ac963edb"}, - {file = "scikit_learn-1.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fe83b676f407f00afa388dd1fdd49e5c6612e551ed84f3b1b182858f09e987d"}, - {file = "scikit_learn-1.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e2642baa0ad1e8f8188917423dd73994bf25429f8893ddbe115be3ca3183584"}, - {file = "scikit_learn-1.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ad66c3848c0a1ec13464b2a95d0a484fd5b02ce74268eaa7e0c697b904f31d6c"}, - {file = "scikit_learn-1.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfeaf8be72117eb61a164ea6fc8afb6dfe08c6f90365bde2dc16456e4bc8e45f"}, - {file = "scikit_learn-1.2.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:fe0aa1a7029ed3e1dcbf4a5bc675aa3b1bc468d9012ecf6c6f081251ca47f590"}, - {file = "scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:065e9673e24e0dc5113e2dd2b4ca30c9d8aa2fa90f4c0597241c93b63130d233"}, - {file = "scikit_learn-1.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf036ea7ef66115e0d49655f16febfa547886deba20149555a41d28f56fd6d3c"}, - {file = "scikit_learn-1.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:8b0670d4224a3c2d596fd572fb4fa673b2a0ccfb07152688ebd2ea0b8c61025c"}, - {file = "scikit_learn-1.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9c710ff9f9936ba8a3b74a455ccf0dcf59b230caa1e9ba0223773c490cab1e51"}, - {file = "scikit_learn-1.2.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:2dd3ffd3950e3d6c0c0ef9033a9b9b32d910c61bd06cb8206303fb4514b88a49"}, - {file = "scikit_learn-1.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44b47a305190c28dd8dd73fc9445f802b6ea716669cfc22ab1eb97b335d238b1"}, - {file = "scikit_learn-1.2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:953236889928d104c2ef14027539f5f2609a47ebf716b8cbe4437e85dce42744"}, - {file = "scikit_learn-1.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:7f69313884e8eb311460cc2f28676d5e400bd929841a2c8eb8742ae78ebf7c20"}, - {file = "scikit_learn-1.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8156db41e1c39c69aa2d8599ab7577af53e9e5e7a57b0504e116cc73c39138dd"}, - {file = "scikit_learn-1.2.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fe175ee1dab589d2e1033657c5b6bec92a8a3b69103e3dd361b58014729975c3"}, - {file = "scikit_learn-1.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d5312d9674bed14f73773d2acf15a3272639b981e60b72c9b190a0cffed5bad"}, - {file = "scikit_learn-1.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea061bf0283bf9a9f36ea3c5d3231ba2176221bbd430abd2603b1c3b2ed85c89"}, - {file = "scikit_learn-1.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:6477eed40dbce190f9f9e9d0d37e020815825b300121307942ec2110302b66a3"}, -] - -[package.dependencies] -joblib = ">=1.1.1" -numpy = ">=1.17.3" -scipy = ">=1.3.2" -threadpoolctl = ">=2.0.0" - -[package.extras] -benchmark = ["matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "pandas (>=1.0.5)"] -docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "plotly (>=5.10.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)", "sphinx (>=4.0.1)", "sphinx-gallery (>=0.7.0)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] -examples = ["matplotlib (>=3.1.3)", "pandas (>=1.0.5)", "plotly (>=5.10.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)"] -tests = ["black (>=22.3.0)", "flake8 (>=3.8.2)", "matplotlib (>=3.1.3)", "mypy (>=0.961)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pytest (>=5.3.1)", "pytest-cov (>=2.9.0)", "scikit-image (>=0.16.2)"] - -[[package]] -name = "scipy" -version = "1.9.3" -description = "Fundamental algorithms for scientific computing in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "scipy-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1884b66a54887e21addf9c16fb588720a8309a57b2e258ae1c7986d4444d3bc0"}, - {file = "scipy-1.9.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:83b89e9586c62e787f5012e8475fbb12185bafb996a03257e9675cd73d3736dd"}, - {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a72d885fa44247f92743fc20732ae55564ff2a519e8302fb7e18717c5355a8b"}, - {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d01e1dd7b15bd2449c8bfc6b7cc67d630700ed655654f0dfcf121600bad205c9"}, - {file = "scipy-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:68239b6aa6f9c593da8be1509a05cb7f9efe98b80f43a5861cd24c7557e98523"}, - {file = "scipy-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b41bc822679ad1c9a5f023bc93f6d0543129ca0f37c1ce294dd9d386f0a21096"}, - {file = "scipy-1.9.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:90453d2b93ea82a9f434e4e1cba043e779ff67b92f7a0e85d05d286a3625df3c"}, - {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c06e62a390a9167da60bedd4575a14c1f58ca9dfde59830fc42e5197283dab"}, - {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abaf921531b5aeaafced90157db505e10345e45038c39e5d9b6c7922d68085cb"}, - {file = "scipy-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:06d2e1b4c491dc7d8eacea139a1b0b295f74e1a1a0f704c375028f8320d16e31"}, - {file = "scipy-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a04cd7d0d3eff6ea4719371cbc44df31411862b9646db617c99718ff68d4840"}, - {file = "scipy-1.9.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:545c83ffb518094d8c9d83cce216c0c32f8c04aaf28b92cc8283eda0685162d5"}, - {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d54222d7a3ba6022fdf5773931b5d7c56efe41ede7f7128c7b1637700409108"}, - {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cff3a5295234037e39500d35316a4c5794739433528310e117b8a9a0c76d20fc"}, - {file = "scipy-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:2318bef588acc7a574f5bfdff9c172d0b1bf2c8143d9582e05f878e580a3781e"}, - {file = "scipy-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d644a64e174c16cb4b2e41dfea6af722053e83d066da7343f333a54dae9bc31c"}, - {file = "scipy-1.9.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:da8245491d73ed0a994ed9c2e380fd058ce2fa8a18da204681f2fe1f57f98f95"}, - {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4db5b30849606a95dcf519763dd3ab6fe9bd91df49eba517359e450a7d80ce2e"}, - {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c68db6b290cbd4049012990d7fe71a2abd9ffbe82c0056ebe0f01df8be5436b0"}, - {file = "scipy-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:5b88e6d91ad9d59478fafe92a7c757d00c59e3bdc3331be8ada76a4f8d683f58"}, - {file = "scipy-1.9.3.tar.gz", hash = "sha256:fbc5c05c85c1a02be77b1ff591087c83bc44579c6d2bd9fb798bb64ea5e1a027"}, -] - -[package.dependencies] -numpy = ">=1.18.5,<1.26.0" - -[package.extras] -dev = ["flake8", "mypy", "pycodestyle", "typing_extensions"] -doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-panels (>=0.5.2)", "sphinx-tabs"] -test = ["asv", "gmpy2", "mpmath", "pytest", "pytest-cov", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] - -[[package]] -name = "semantic-version" -version = "2.10.0" -description = "A library implementing the 'SemVer' scheme." -optional = false -python-versions = ">=2.7" -files = [ - {file = "semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177"}, - {file = "semantic_version-2.10.0.tar.gz", hash = "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c"}, -] - -[package.extras] -dev = ["Django (>=1.11)", "check-manifest", "colorama (<=0.4.1)", "coverage", "flake8", "nose2", "readme-renderer (<25.0)", "tox", "wheel", "zest.releaser[recommended]"] -doc = ["Sphinx", "sphinx-rtd-theme"] - -[[package]] -name = "setuptools" -version = "67.7.2" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "setuptools-67.7.2-py3-none-any.whl", hash = "sha256:23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b"}, - {file = "setuptools-67.7.2.tar.gz", hash = "sha256:f104fa03692a2602fa0fec6c6a9e63b6c8a968de13e17c026957dd1f53d80990"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "sniffio" -version = "1.3.0" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, -] - -[[package]] -name = "soundfile" -version = "0.12.1" -description = "An audio library based on libsndfile, CFFI and NumPy" -optional = false -python-versions = "*" -files = [ - {file = "soundfile-0.12.1-py2.py3-none-any.whl", hash = "sha256:828a79c2e75abab5359f780c81dccd4953c45a2c4cd4f05ba3e233ddf984b882"}, - {file = "soundfile-0.12.1-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:d922be1563ce17a69582a352a86f28ed8c9f6a8bc951df63476ffc310c064bfa"}, - {file = "soundfile-0.12.1-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:bceaab5c4febb11ea0554566784bcf4bc2e3977b53946dda2b12804b4fe524a8"}, - {file = "soundfile-0.12.1-py2.py3-none-manylinux_2_17_x86_64.whl", hash = "sha256:2dc3685bed7187c072a46ab4ffddd38cef7de9ae5eb05c03df2ad569cf4dacbc"}, - {file = "soundfile-0.12.1-py2.py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:074247b771a181859d2bc1f98b5ebf6d5153d2c397b86ee9e29ba602a8dfe2a6"}, - {file = "soundfile-0.12.1-py2.py3-none-win32.whl", hash = "sha256:59dfd88c79b48f441bbf6994142a19ab1de3b9bb7c12863402c2bc621e49091a"}, - {file = "soundfile-0.12.1-py2.py3-none-win_amd64.whl", hash = "sha256:0d86924c00b62552b650ddd28af426e3ff2d4dc2e9047dae5b3d8452e0a49a77"}, - {file = "soundfile-0.12.1.tar.gz", hash = "sha256:e8e1017b2cf1dda767aef19d2fd9ee5ebe07e050d430f77a0a7c66ba08b8cdae"}, -] - -[package.dependencies] -cffi = ">=1.0" - -[package.extras] -numpy = ["numpy"] - -[[package]] -name = "starlette" -version = "0.27.0" -description = "The little ASGI library that shines." -optional = false -python-versions = ">=3.7" -files = [ - {file = "starlette-0.27.0-py3-none-any.whl", hash = "sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91"}, - {file = "starlette-0.27.0.tar.gz", hash = "sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75"}, -] - -[package.dependencies] -anyio = ">=3.4.0,<5" -typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} - -[package.extras] -full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] - -[[package]] -name = "sympy" -version = "1.11.1" -description = "Computer algebra system (CAS) in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "sympy-1.11.1-py3-none-any.whl", hash = "sha256:938f984ee2b1e8eae8a07b884c8b7a1146010040fccddc6539c54f401c8f6fcf"}, - {file = "sympy-1.11.1.tar.gz", hash = "sha256:e32380dce63cb7c0108ed525570092fd45168bdae2faa17e528221ef72e88658"}, -] - -[package.dependencies] -mpmath = ">=0.19" - -[[package]] -name = "tabulate" -version = "0.9.0" -description = "Pretty-print tabular data" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, - {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, -] - -[package.extras] -widechars = ["wcwidth"] - -[[package]] -name = "tensorboard" -version = "2.12.1" -description = "TensorBoard lets you watch Tensors Flow" -optional = false -python-versions = ">=3.8" -files = [ - {file = "tensorboard-2.12.1-py3-none-any.whl", hash = "sha256:58f1c2a25b4829b9c48d2b1ec951dedc9325dcd1ea4b0f601d241d2887d0ed65"}, -] - -[package.dependencies] -absl-py = ">=0.4" -google-auth = ">=1.6.3,<3" -google-auth-oauthlib = ">=0.5,<1.1" -grpcio = ">=1.48.2" -markdown = ">=2.6.8" -numpy = ">=1.12.0" -protobuf = ">=3.19.6" -requests = ">=2.21.0,<3" -setuptools = ">=41.0.0" -tensorboard-data-server = ">=0.7.0,<0.8.0" -tensorboard-plugin-wit = ">=1.6.0" -werkzeug = ">=1.0.1" -wheel = ">=0.26" - -[[package]] -name = "tensorboard-data-server" -version = "0.7.0" -description = "Fast data loading for TensorBoard" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tensorboard_data_server-0.7.0-py3-none-any.whl", hash = "sha256:753d4214799b31da7b6d93837959abebbc6afa86e69eacf1e9a317a48daa31eb"}, - {file = "tensorboard_data_server-0.7.0-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:eb7fa518737944dbf4f0cf83c2e40a7ac346bf91be2e6a0215de98be74e85454"}, - {file = "tensorboard_data_server-0.7.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:64aa1be7c23e80b1a42c13b686eb0875bb70f5e755f4d2b8de5c1d880cf2267f"}, -] - -[[package]] -name = "tensorboard-plugin-wit" -version = "1.8.1" -description = "What-If Tool TensorBoard plugin." -optional = false -python-versions = "*" -files = [ - {file = "tensorboard_plugin_wit-1.8.1-py3-none-any.whl", hash = "sha256:ff26bdd583d155aa951ee3b152b3d0cffae8005dc697f72b44a8e8c2a77a8cbe"}, -] - -[[package]] -name = "tensorboardx" -version = "2.6" -description = "TensorBoardX lets you watch Tensors Flow without Tensorflow" -optional = false -python-versions = "*" -files = [ - {file = "tensorboardX-2.6-py2.py3-none-any.whl", hash = "sha256:24a7cd076488de1e9d15ef25371b8ebf90c4f8f622af2477c611198f03f4a606"}, - {file = "tensorboardX-2.6.tar.gz", hash = "sha256:d4c036964dd2deb075a1909832b276daa383eab3f9db519ad90b99f5aea06b0c"}, -] - -[package.dependencies] -numpy = "*" -packaging = "*" -protobuf = ">=3.8.0,<4" - -[[package]] -name = "threadpoolctl" -version = "3.1.0" -description = "threadpoolctl" -optional = false -python-versions = ">=3.6" -files = [ - {file = "threadpoolctl-3.1.0-py3-none-any.whl", hash = "sha256:8b99adda265feb6773280df41eece7b2e6561b772d21ffd52e372f999024907b"}, - {file = "threadpoolctl-3.1.0.tar.gz", hash = "sha256:a335baacfaa4400ae1f0d8e3a58d6674d2f8828e3716bb2802c44955ad391380"}, -] - -[[package]] -name = "toolz" -version = "0.12.0" -description = "List processing tools and functional utilities" -optional = false -python-versions = ">=3.5" -files = [ - {file = "toolz-0.12.0-py3-none-any.whl", hash = "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f"}, - {file = "toolz-0.12.0.tar.gz", hash = "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194"}, -] - -[[package]] -name = "torch" -version = "2.0.0" -description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "torch-2.0.0-1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:c9090bda7d2eeeecd74f51b721420dbeb44f838d4536cc1b284e879417e3064a"}, - {file = "torch-2.0.0-1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:bd42db2a48a20574d2c33489e120e9f32789c4dc13c514b0c44272972d14a2d7"}, - {file = "torch-2.0.0-1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8969aa8375bcbc0c2993e7ede0a7f889df9515f18b9b548433f412affed478d9"}, - {file = "torch-2.0.0-1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:ab2da16567cb55b67ae39e32d520d68ec736191d88ac79526ca5874754c32203"}, - {file = "torch-2.0.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:7a9319a67294ef02459a19738bbfa8727bb5307b822dadd708bc2ccf6c901aca"}, - {file = "torch-2.0.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:9f01fe1f6263f31bd04e1757946fd63ad531ae37f28bb2dbf66f5c826ee089f4"}, - {file = "torch-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:527f4ae68df7b8301ee6b1158ca56350282ea633686537b30dbb5d7b4a52622a"}, - {file = "torch-2.0.0-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:ce9b5a49bd513dff7950a5a07d6e26594dd51989cee05ba388b03e8e366fd5d5"}, - {file = "torch-2.0.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:53e1c33c6896583cdb9a583693e22e99266444c4a43392dddc562640d39e542b"}, - {file = "torch-2.0.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:09651bff72e439d004c991f15add0c397c66f98ab36fe60d5514b44e4da722e8"}, - {file = "torch-2.0.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d439aec349c98f12819e8564b8c54008e4613dd4428582af0e6e14c24ca85870"}, - {file = "torch-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:2802f84f021907deee7e9470ed10c0e78af7457ac9a08a6cd7d55adef835fede"}, - {file = "torch-2.0.0-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:01858620f25f25e7a9ec4b547ff38e5e27c92d38ec4ccba9cfbfb31d7071ed9c"}, - {file = "torch-2.0.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:9a2e53b5783ef5896a6af338b36d782f28e83c8ddfc2ac44b67b066d9d76f498"}, - {file = "torch-2.0.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ec5fff2447663e369682838ff0f82187b4d846057ef4d119a8dea7772a0b17dd"}, - {file = "torch-2.0.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:11b0384fe3c18c01b8fc5992e70fc519cde65e44c51cc87be1838c1803daf42f"}, - {file = "torch-2.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:e54846aa63855298cfb1195487f032e413e7ac9cbfa978fda32354cc39551475"}, - {file = "torch-2.0.0-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:cc788cbbbbc6eb4c90e52c550efd067586c2693092cf367c135b34893a64ae78"}, - {file = "torch-2.0.0-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:d292640f0fd72b7a31b2a6e3b635eb5065fcbedd4478f9cad1a1e7a9ec861d35"}, - {file = "torch-2.0.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:6befaad784004b7af357e3d87fa0863c1f642866291f12a4c2af2de435e8ac5c"}, - {file = "torch-2.0.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:a83b26bd6ae36fbf5fee3d56973d9816e2002e8a3b7d9205531167c28aaa38a7"}, - {file = "torch-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:c7e67195e1c3e33da53954b026e89a8e1ff3bc1aeb9eb32b677172d4a9b5dcbf"}, - {file = "torch-2.0.0-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:6e0b97beb037a165669c312591f242382e9109a240e20054d5a5782d9236cad0"}, - {file = "torch-2.0.0-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:297a4919aff1c0f98a58ebe969200f71350a1d4d4f986dbfd60c02ffce780e99"}, -] - -[package.dependencies] -filelock = "*" -jinja2 = "*" -networkx = "*" -nvidia-cublas-cu11 = {version = "11.10.3.66", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cuda-cupti-cu11 = {version = "11.7.101", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cuda-nvrtc-cu11 = {version = "11.7.99", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cuda-runtime-cu11 = {version = "11.7.99", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cudnn-cu11 = {version = "8.5.0.96", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cufft-cu11 = {version = "10.9.0.58", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-curand-cu11 = {version = "10.2.10.91", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cusolver-cu11 = {version = "11.4.0.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-cusparse-cu11 = {version = "11.7.4.91", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-nccl-cu11 = {version = "2.14.3", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -nvidia-nvtx-cu11 = {version = "11.7.91", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -sympy = "*" -triton = {version = "2.0.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} -typing-extensions = "*" - -[package.extras] -opt-einsum = ["opt-einsum (>=3.3)"] - -[[package]] -name = "torchaudio" -version = "2.0.1" -description = "An audio package for PyTorch" -optional = false -python-versions = "*" -files = [ - {file = "torchaudio-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5d21ebbb55e7040d418d5062b0e882f9660d68b477b38fd436fa6c92ccbb52a"}, - {file = "torchaudio-2.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6dbcd93b29d71a2f500f36a34ea5e467f510f773da85322098e6bdd8c9dc9948"}, - {file = "torchaudio-2.0.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:5fdaba10ff06d098d603d9eb8d2ff541c3f3fe28ba178a78787190cec0d5187f"}, - {file = "torchaudio-2.0.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:6419199c773c5045c594ff950d5e5dbbfa6c830892ec09721d4ed8704b702bfd"}, - {file = "torchaudio-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:a5c81e480e5dcdcba065af1e3e31678ac29518991f00260094d37a39e63d76e5"}, - {file = "torchaudio-2.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e2a047675493c0aa258fec621ef40e8b01abe3d8dbc872152e4b5998418aa3c5"}, - {file = "torchaudio-2.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:91a28e587f708a03320eddbcc4a7dd1ad7150b3d4846b6c1557d85cc89a8d06c"}, - {file = "torchaudio-2.0.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:ba7740d98f601218ff667598ab3d9dab5f326878374fcb52d656f4ff033b9e96"}, - {file = "torchaudio-2.0.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:f401b192921c8b77cc5e478ede589b256dba463f1cee91172ecb376fea45a288"}, - {file = "torchaudio-2.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:0ef6754cf75ca5fd5117cb6243a6cf33552d67e9af0075aa6954b2c34bbf1036"}, - {file = "torchaudio-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:022ca1baa4bb819b78343bd47b57ff6dc6f9fc19fa4ef269946aadf7e62db3c0"}, - {file = "torchaudio-2.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a153ad5cdb62de8ec9fd1360a0d080bbaf39d578ae04e788db211571e675b7e0"}, - {file = "torchaudio-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:aa7897774ab4156d0b72f7078b823ebc1371ee24c50df965447782889552367a"}, - {file = "torchaudio-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:48d133593cddfe0424a350b566d54065bf6fe7469654de7add2f11b3ef03c5d9"}, - {file = "torchaudio-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:ac65eb067feee435debba81adfe8337fa007a06de6508c0d80261c5562b6d098"}, - {file = "torchaudio-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e3c6c8f9ea9f0e2df7a0b9375b0dcf955906e38fc12fab542b72a861564af8e7"}, - {file = "torchaudio-2.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1d0cf0779a334ec1861e9fa28bceb66a633c42e8f6b3322e2e37ff9f20d0ae81"}, - {file = "torchaudio-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:ab7acd2b5d351a2c65e4d935bb90b9256382bed93df57ee177bdbbe31c3cc984"}, - {file = "torchaudio-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:77b953fd7278773269a9477315b8998ae7e5011cc4b2907e0df18162327482f1"}, - {file = "torchaudio-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:c01bcea9d4c4a6616452e6cbd44d55913d8e6dee58191b925f35d46a2bf6e71b"}, -] - -[package.dependencies] -torch = "2.0.0" - -[[package]] -name = "torchgen" -version = "0.0.1" -description = "Ready to use implementations of state-of-the-art generative models in PyTorch" -optional = false -python-versions = ">=3.7, <4" -files = [ - {file = "torchgen-0.0.1-py3-none-any.whl", hash = "sha256:78d02b5e4ea0231ce46b4262564a05a9cb2047fcfcdcf4a4ab56230a0f21be66"}, -] - -[[package]] -name = "tornado" -version = "6.3.2" -description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -optional = false -python-versions = ">= 3.8" -files = [ - {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:c367ab6c0393d71171123ca5515c61ff62fe09024fa6bf299cd1339dc9456829"}, - {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b46a6ab20f5c7c1cb949c72c1994a4585d2eaa0be4853f50a03b5031e964fc7c"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2de14066c4a38b4ecbbcd55c5cc4b5340eb04f1c5e81da7451ef555859c833f"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05615096845cf50a895026f749195bf0b10b8909f9be672f50b0fe69cba368e4"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b17b1cf5f8354efa3d37c6e28fdfd9c1c1e5122f2cb56dac121ac61baa47cbe"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:29e71c847a35f6e10ca3b5c2990a52ce38b233019d8e858b755ea6ce4dcdd19d"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:834ae7540ad3a83199a8da8f9f2d383e3c3d5130a328889e4cc991acc81e87a0"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6a0848f1aea0d196a7c4f6772197cbe2abc4266f836b0aac76947872cd29b411"}, - {file = "tornado-6.3.2-cp38-abi3-win32.whl", hash = "sha256:7efcbcc30b7c654eb6a8c9c9da787a851c18f8ccd4a5a3a95b05c7accfa068d2"}, - {file = "tornado-6.3.2-cp38-abi3-win_amd64.whl", hash = "sha256:0c325e66c8123c606eea33084976c832aa4e766b7dff8aedd7587ea44a604cdf"}, - {file = "tornado-6.3.2.tar.gz", hash = "sha256:4b927c4f19b71e627b13f3db2324e4ae660527143f9e1f2e2fb404f3a187e2ba"}, -] - -[[package]] -name = "tqdm" -version = "4.65.0" -description = "Fast, Extensible Progress Meter" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"}, - {file = "tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -dev = ["py-make (>=0.1.0)", "twine", "wheel"] -notebook = ["ipywidgets (>=6)"] -slack = ["slack-sdk"] -telegram = ["requests"] - -[[package]] -name = "traitlets" -version = "5.9.0" -description = "Traitlets Python configuration system" -optional = false -python-versions = ">=3.7" -files = [ - {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, - {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, -] - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] - -[[package]] -name = "triton" -version = "2.0.0" -description = "A language and compiler for custom Deep Learning operations" -optional = false -python-versions = "*" -files = [ - {file = "triton-2.0.0-1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:38806ee9663f4b0f7cd64790e96c579374089e58f49aac4a6608121aa55e2505"}, - {file = "triton-2.0.0-1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:226941c7b8595219ddef59a1fdb821e8c744289a132415ddd584facedeb475b1"}, - {file = "triton-2.0.0-1-cp36-cp36m-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4c9fc8c89874bc48eb7e7b2107a9b8d2c0bf139778637be5bfccb09191685cfd"}, - {file = "triton-2.0.0-1-cp37-cp37m-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d2684b6a60b9f174f447f36f933e9a45f31db96cb723723ecd2dcfd1c57b778b"}, - {file = "triton-2.0.0-1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9d4978298b74fcf59a75fe71e535c092b023088933b2f1df933ec32615e4beef"}, - {file = "triton-2.0.0-1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:74f118c12b437fb2ca25e1a04759173b517582fcf4c7be11913316c764213656"}, - {file = "triton-2.0.0-1-pp37-pypy37_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9618815a8da1d9157514f08f855d9e9ff92e329cd81c0305003eb9ec25cc5add"}, - {file = "triton-2.0.0-1-pp38-pypy38_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1aca3303629cd3136375b82cb9921727f804e47ebee27b2677fef23005c3851a"}, - {file = "triton-2.0.0-1-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e3e13aa8b527c9b642e3a9defcc0fbd8ffbe1c80d8ac8c15a01692478dc64d8a"}, - {file = "triton-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f05a7e64e4ca0565535e3d5d3405d7e49f9d308505bb7773d21fb26a4c008c2"}, - {file = "triton-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb4b99ca3c6844066e516658541d876c28a5f6e3a852286bbc97ad57134827fd"}, - {file = "triton-2.0.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47b4d70dc92fb40af553b4460492c31dc7d3a114a979ffb7a5cdedb7eb546c08"}, - {file = "triton-2.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fedce6a381901b1547e0e7e1f2546e4f65dca6d91e2d8a7305a2d1f5551895be"}, - {file = "triton-2.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75834f27926eab6c7f00ce73aaf1ab5bfb9bec6eb57ab7c0bfc0a23fac803b4c"}, - {file = "triton-2.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0117722f8c2b579cd429e0bee80f7731ae05f63fe8e9414acd9a679885fcbf42"}, - {file = "triton-2.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcd9be5d0c2e45d2b7e6ddc6da20112b6862d69741576f9c3dbaf941d745ecae"}, - {file = "triton-2.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42a0d2c3fc2eab4ba71384f2e785fbfd47aa41ae05fa58bf12cb31dcbd0aeceb"}, - {file = "triton-2.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52c47b72c72693198163ece9d90a721299e4fb3b8e24fd13141e384ad952724f"}, -] - -[package.dependencies] -cmake = "*" -filelock = "*" -lit = "*" -torch = "*" - -[package.extras] -tests = ["autopep8", "flake8", "isort", "numpy", "pytest", "scipy (>=1.7.1)"] -tutorials = ["matplotlib", "pandas", "tabulate"] - -[[package]] -name = "typing-extensions" -version = "4.5.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -optional = false -python-versions = ">=3.7" -files = [ - {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, - {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, -] - -[[package]] -name = "tzdata" -version = "2023.3" -description = "Provider of IANA time zone data" -optional = false -python-versions = ">=2" -files = [ - {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, - {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, -] - -[[package]] -name = "uc-micro-py" -version = "1.0.1" -description = "Micro subset of unicode data files for linkify-it-py projects." -optional = false -python-versions = ">=3.6" -files = [ - {file = "uc-micro-py-1.0.1.tar.gz", hash = "sha256:b7cdf4ea79433043ddfe2c82210208f26f7962c0cfbe3bacb05ee879a7fdb596"}, - {file = "uc_micro_py-1.0.1-py3-none-any.whl", hash = "sha256:316cfb8b6862a0f1d03540f0ae6e7b033ff1fa0ddbe60c12cbe0d4cec846a69f"}, -] - -[package.extras] -test = ["coverage", "pytest", "pytest-cov"] - -[[package]] -name = "urllib3" -version = "1.26.15" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -files = [ - {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"}, - {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - -[[package]] -name = "uvicorn" -version = "0.21.1" -description = "The lightning-fast ASGI server." -optional = false -python-versions = ">=3.7" -files = [ - {file = "uvicorn-0.21.1-py3-none-any.whl", hash = "sha256:e47cac98a6da10cd41e6fd036d472c6f58ede6c5dbee3dbee3ef7a100ed97742"}, - {file = "uvicorn-0.21.1.tar.gz", hash = "sha256:0fac9cb342ba099e0d582966005f3fdba5b0290579fed4a6266dc702ca7bb032"}, -] - -[package.dependencies] -click = ">=7.0" -h11 = ">=0.8" - -[package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] - -[[package]] -name = "websockets" -version = "11.0" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "websockets-11.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:269e3547877a6ca55f62acdf291b256b01bc3469535e892af36afd3e17de284a"}, - {file = "websockets-11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:70a4e03d2416c1dad16ccfab97c975192337c6481b07167c90221f1926893e1e"}, - {file = "websockets-11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4100dc8566ea3b9c0528dee73284be524ab053aebd77e3fc7439a90e0d57745b"}, - {file = "websockets-11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8e0505c556b2b48078291b300d930f2fb8ba81d1e36379b637c060cfa561ae4"}, - {file = "websockets-11.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d5bc68cec8269b4b52ab6d1d8690f56dba35f7bcb83a5487518406300f81cf1"}, - {file = "websockets-11.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:067ac1f6153fc5218afc4563491dcbdb7384895cfc588a0afee962ca77fe0b58"}, - {file = "websockets-11.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:910c84c0cfe4f872905b6ebe1866c579582070331abcb7a58621935eca95c18a"}, - {file = "websockets-11.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:df0f7769450ca67a53182f917910e2b0b6dd3f8268f88cbfe54ee6be96812889"}, - {file = "websockets-11.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fe23605f5c351773b6fb82fcf680549980d63e126fab5213ed875686c0cec25d"}, - {file = "websockets-11.0-cp310-cp310-win32.whl", hash = "sha256:eb2e7cd654a05c36fccf726385c64a0e1027997d05ba0859f4d84c3d87db1623"}, - {file = "websockets-11.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb26c333751a1e3805ecc416a85dcfa3657676b185acd515fd6992f0cea898ef"}, - {file = "websockets-11.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b4a939963bae1055f14976ef2cf53e797c1997f8835ca9cf23060afc3e7d6718"}, - {file = "websockets-11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d7fc189fb632f8b31af8a5b32105919662a1bbaac20912320482415b7fed9c96"}, - {file = "websockets-11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6e3cfc890f1326c95fd7d4cc50f2bd496d3f014fb2da36b4525a10f226be565d"}, - {file = "websockets-11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9093f4c72c23ed5e475970c6a37e77c4f3a8856223421b9eb405b9fb2170629f"}, - {file = "websockets-11.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5c56547f97bc76293522ccfcfbdde12442420f1a2c0218ff45d733a0030046df"}, - {file = "websockets-11.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffb406b4449d4fa41ebc47faa3b9153a082f6fe0e4a0891f596a5ddb69fdeccd"}, - {file = "websockets-11.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8fad76be2c5e36fb3620ad507ac8004e9f358f5c4a9a1b756dbe7918d58884a0"}, - {file = "websockets-11.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:17eb1988d320e2f1f20e4a3523f1068a0bb08318ab123962fc99fd90c90ab0d6"}, - {file = "websockets-11.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9873288db9c673a2ba9c0f7b59a130576c50fc75f3336a706fff686009c41631"}, - {file = "websockets-11.0-cp311-cp311-win32.whl", hash = "sha256:cf4ef6343478bf63098d3060fe06baf54d9c011b4b1b05e65e7957091cc87ef4"}, - {file = "websockets-11.0-cp311-cp311-win_amd64.whl", hash = "sha256:713cd5fc1fd40436495c90a259274e1a4a39416c65447a256434941ddaf2f424"}, - {file = "websockets-11.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:649ddddcbafd318d427b843425c92b1c035660c32507645c472c77356226cf07"}, - {file = "websockets-11.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:564c53d84b95da527e96778f2cc873ef186038924abee601f9e8f12ebda9ad46"}, - {file = "websockets-11.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66d8df2db9801063e4093efe01458b1705c9f76382ad32617c005eeeb201a730"}, - {file = "websockets-11.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcd876ed166a82d250fcf012b729315489e9d653cb659c2e013c19daba2eb8f"}, - {file = "websockets-11.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cb00963b49d343210ebbdbe69a35004fbecad73da2158e83d481cd2a6716cf19"}, - {file = "websockets-11.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d6f7c2f822e439f47f3492ee3e48c87c7d134d619a42c6dba1a318504501bfb"}, - {file = "websockets-11.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c4b2ae9c0f1acec5d2f8000eb496eebb9db19055a63716ee166cf0694b945982"}, - {file = "websockets-11.0-cp37-cp37m-win32.whl", hash = "sha256:2b363e0f9b4247a0c7482e22c70ef39fb3259a14f7c0791c9200b93145f60b4b"}, - {file = "websockets-11.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3d372c3426f165a0a22be9250526b1cd12e3556e80b4b2afaa6fd6649c99b086"}, - {file = "websockets-11.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:7eb914d37e0574246c63b995f9ca8d7bb7c2f2d53a8d4e9b00200ea856aa43c4"}, - {file = "websockets-11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a8717a5f3a00cde308e2971064bd5fcb14e0cc08f8234b97f4eb92b505ea95d4"}, - {file = "websockets-11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a17151722349c4af221616cca2f28e79237738bfbc53e7155240e2a8a7cc02f4"}, - {file = "websockets-11.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4b60686d9b2ba500847c045595eb5887f4cca7102b4615773b6f490aa611107"}, - {file = "websockets-11.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eededf25ef6b838e650eeeb1511804b82e9ece566fe6cdc11aa909d2992dcdaf"}, - {file = "websockets-11.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7587f339f016f0e1b0b6f013e98c83e382c5929774f2b8234c1b2d3f01dd1339"}, - {file = "websockets-11.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:26369646078e16e7364729ed3e3b1a4315ab1a22ca3c48b4e25dea48fcc1a881"}, - {file = "websockets-11.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:92f51fbe87381ff76c1791dd44d599152b400f1adfa8453613f1ff6857200ee7"}, - {file = "websockets-11.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b5bb04a77c326d727c0b986c37a76147916d79db95629267307d1be47788a020"}, - {file = "websockets-11.0-cp38-cp38-win32.whl", hash = "sha256:50ac95111009178e58b9a25aa51702cdaad4ed843b98eb9b58d69b323ccb224e"}, - {file = "websockets-11.0-cp38-cp38-win_amd64.whl", hash = "sha256:7a4076cd6a3678def988668fc4b1779da598e1e5c9fa26319af5499f00c23e1c"}, - {file = "websockets-11.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:26559e8a385f71ce2a58f3bb1d005ddd3db7d3328ddbfbff1034f4039d46c4ec"}, - {file = "websockets-11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f10d283697dec8d91fa983eb8e217c9cac27bc1032057768129b89780009318e"}, - {file = "websockets-11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f74efe229e078bf5595e207e9a7b135ff37a10858263ed86be66003c4c98d47b"}, - {file = "websockets-11.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f048c88bfcc5bf0e038630cfb970b2c479f913819fd9653db920eef3b105a2b1"}, - {file = "websockets-11.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ceab6c1827fa14ad10c6b0806941d577b21d17012a3648787ac2b946182285b4"}, - {file = "websockets-11.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:817227e23897808c4bb621da7f57b1f83ee18345bdc44f5c9c1bbd3a094a73f6"}, - {file = "websockets-11.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6fdcc17348d8697c1f88bba38680cca94131f2a9db727a61fe067284e1e59e8d"}, - {file = "websockets-11.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8b21ad915b747075f29fe2fa5590111d98988d6730d2cd212acfe52bbe6a2545"}, - {file = "websockets-11.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9ae401ad881d5329062b9b2d8160f0b2a147430974f2a3f32e6cedadddc2d634"}, - {file = "websockets-11.0-cp39-cp39-win32.whl", hash = "sha256:ee84660927293f449760badfe010e06409edb99d72e1910e2e404d2eeff6990f"}, - {file = "websockets-11.0-cp39-cp39-win_amd64.whl", hash = "sha256:2b4e704a9dac1faf4994e63dceae9e2f504913ff0f865bd3e5a097cbd5874a8f"}, - {file = "websockets-11.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2d6429c9bcd70ed8126a1f9ca6069e4ab95c96a3cc141fc84ce02917f7b45ec"}, - {file = "websockets-11.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff3f67567862a853af2c0db362ede8249be50c576cd9eaf380736c6fce840414"}, - {file = "websockets-11.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b86ce3d17bcc4b6556b2a2e1277beed74ff6b1de23f002f9763e9875e8ba361d"}, - {file = "websockets-11.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59c4b458cc09ea6470a5eee98b06ccaa84f2a193b92e337a879612614df0f8eb"}, - {file = "websockets-11.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:e5e21aeb350906dfcff321bfa6c60541a1d05cadb6d431ecf9d6376365be60d4"}, - {file = "websockets-11.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8731189f6985b239a6c34a353c36b45cb3c9fed1c287fbcf7f61df9e4a7ac392"}, - {file = "websockets-11.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee3aa7660ae0d3a4e47517bb5a545b9a02ff7b9632a640f617e755990ef65f66"}, - {file = "websockets-11.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:027aabfd053715ce0f5f6fc5107e5093e05b3c94fa555fb65375aa09cb845a66"}, - {file = "websockets-11.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e8c729aa179ef105f096cad12070aef230be9e2ae509eb47c3cdd9257213c14"}, - {file = "websockets-11.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ff607c6e16409ac83f1ae59cc96167fead577bc652e8dff48f7458ce082372ff"}, - {file = "websockets-11.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ca3d7c08f472c40f28bb9fb99610d28dc97137612ab5308f80dac7ce79f87fe1"}, - {file = "websockets-11.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f179deef8288dd8ec227d644ba5b711609093b634008643561f6d9c74938c3c"}, - {file = "websockets-11.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:269d33f1573a31130da9afd63a2558f60131522d3fe86d0aa2d1612ad065d27c"}, - {file = "websockets-11.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb0b306c1180d0268341447982b415aca7c072c84b4a59688dbc1d7d2ec25df9"}, - {file = "websockets-11.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6ae209f11e433575e17d5d6e61a2f77ceda53b4bce07df55af614aa1d618e2e7"}, - {file = "websockets-11.0-py3-none-any.whl", hash = "sha256:6ebd971b9b2c0aaa2188c472016e4dad93108b3db425a33ad584bdc41b22026d"}, - {file = "websockets-11.0.tar.gz", hash = "sha256:19d638549c470f5fd3b67b52b2a08f2edba5a04e05323a706937e35f5f19d056"}, -] - -[[package]] -name = "werkzeug" -version = "2.2.3" -description = "The comprehensive WSGI web application library." -optional = false -python-versions = ">=3.7" -files = [ - {file = "Werkzeug-2.2.3-py3-none-any.whl", hash = "sha256:56433961bc1f12533306c624f3be5e744389ac61d722175d543e1751285da612"}, - {file = "Werkzeug-2.2.3.tar.gz", hash = "sha256:2e1ccc9417d4da358b9de6f174e3ac094391ea1d4fbef2d667865d819dfd0afe"}, -] - -[package.dependencies] -MarkupSafe = ">=2.1.1" - -[package.extras] -watchdog = ["watchdog"] - -[[package]] -name = "wheel" -version = "0.40.0" -description = "A built-package format for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "wheel-0.40.0-py3-none-any.whl", hash = "sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247"}, - {file = "wheel-0.40.0.tar.gz", hash = "sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873"}, -] - -[package.extras] -test = ["pytest (>=6.0.0)"] - -[[package]] -name = "yarl" -version = "1.8.2" -description = "Yet another URL library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "yarl-1.8.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bb81f753c815f6b8e2ddd2eef3c855cf7da193b82396ac013c661aaa6cc6b0a5"}, - {file = "yarl-1.8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:47d49ac96156f0928f002e2424299b2c91d9db73e08c4cd6742923a086f1c863"}, - {file = "yarl-1.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3fc056e35fa6fba63248d93ff6e672c096f95f7836938241ebc8260e062832fe"}, - {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58a3c13d1c3005dbbac5c9f0d3210b60220a65a999b1833aa46bd6677c69b08e"}, - {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10b08293cda921157f1e7c2790999d903b3fd28cd5c208cf8826b3b508026996"}, - {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de986979bbd87272fe557e0a8fcb66fd40ae2ddfe28a8b1ce4eae22681728fef"}, - {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c4fcfa71e2c6a3cb568cf81aadc12768b9995323186a10827beccf5fa23d4f8"}, - {file = "yarl-1.8.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae4d7ff1049f36accde9e1ef7301912a751e5bae0a9d142459646114c70ecba6"}, - {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bf071f797aec5b96abfc735ab97da9fd8f8768b43ce2abd85356a3127909d146"}, - {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:74dece2bfc60f0f70907c34b857ee98f2c6dd0f75185db133770cd67300d505f"}, - {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:df60a94d332158b444301c7f569659c926168e4d4aad2cfbf4bce0e8fb8be826"}, - {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:63243b21c6e28ec2375f932a10ce7eda65139b5b854c0f6b82ed945ba526bff3"}, - {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cfa2bbca929aa742b5084fd4663dd4b87c191c844326fcb21c3afd2d11497f80"}, - {file = "yarl-1.8.2-cp310-cp310-win32.whl", hash = "sha256:b05df9ea7496df11b710081bd90ecc3a3db6adb4fee36f6a411e7bc91a18aa42"}, - {file = "yarl-1.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:24ad1d10c9db1953291f56b5fe76203977f1ed05f82d09ec97acb623a7976574"}, - {file = "yarl-1.8.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2a1fca9588f360036242f379bfea2b8b44cae2721859b1c56d033adfd5893634"}, - {file = "yarl-1.8.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f37db05c6051eff17bc832914fe46869f8849de5b92dc4a3466cd63095d23dfd"}, - {file = "yarl-1.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:77e913b846a6b9c5f767b14dc1e759e5aff05502fe73079f6f4176359d832581"}, - {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0978f29222e649c351b173da2b9b4665ad1feb8d1daa9d971eb90df08702668a"}, - {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:388a45dc77198b2460eac0aca1efd6a7c09e976ee768b0d5109173e521a19daf"}, - {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2305517e332a862ef75be8fad3606ea10108662bc6fe08509d5ca99503ac2aee"}, - {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42430ff511571940d51e75cf42f1e4dbdded477e71c1b7a17f4da76c1da8ea76"}, - {file = "yarl-1.8.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3150078118f62371375e1e69b13b48288e44f6691c1069340081c3fd12c94d5b"}, - {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c15163b6125db87c8f53c98baa5e785782078fbd2dbeaa04c6141935eb6dab7a"}, - {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4d04acba75c72e6eb90745447d69f84e6c9056390f7a9724605ca9c56b4afcc6"}, - {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e7fd20d6576c10306dea2d6a5765f46f0ac5d6f53436217913e952d19237efc4"}, - {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:75c16b2a900b3536dfc7014905a128a2bea8fb01f9ee26d2d7d8db0a08e7cb2c"}, - {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6d88056a04860a98341a0cf53e950e3ac9f4e51d1b6f61a53b0609df342cc8b2"}, - {file = "yarl-1.8.2-cp311-cp311-win32.whl", hash = "sha256:fb742dcdd5eec9f26b61224c23baea46c9055cf16f62475e11b9b15dfd5c117b"}, - {file = "yarl-1.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:8c46d3d89902c393a1d1e243ac847e0442d0196bbd81aecc94fcebbc2fd5857c"}, - {file = "yarl-1.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ceff9722e0df2e0a9e8a79c610842004fa54e5b309fe6d218e47cd52f791d7ef"}, - {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f6b4aca43b602ba0f1459de647af954769919c4714706be36af670a5f44c9c1"}, - {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1684a9bd9077e922300ecd48003ddae7a7474e0412bea38d4631443a91d61077"}, - {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ebb78745273e51b9832ef90c0898501006670d6e059f2cdb0e999494eb1450c2"}, - {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3adeef150d528ded2a8e734ebf9ae2e658f4c49bf413f5f157a470e17a4a2e89"}, - {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57a7c87927a468e5a1dc60c17caf9597161d66457a34273ab1760219953f7f4c"}, - {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:efff27bd8cbe1f9bd127e7894942ccc20c857aa8b5a0327874f30201e5ce83d0"}, - {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a783cd344113cb88c5ff7ca32f1f16532a6f2142185147822187913eb989f739"}, - {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:705227dccbe96ab02c7cb2c43e1228e2826e7ead880bb19ec94ef279e9555b5b"}, - {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:34c09b43bd538bf6c4b891ecce94b6fa4f1f10663a8d4ca589a079a5018f6ed7"}, - {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a48f4f7fea9a51098b02209d90297ac324241bf37ff6be6d2b0149ab2bd51b37"}, - {file = "yarl-1.8.2-cp37-cp37m-win32.whl", hash = "sha256:0414fd91ce0b763d4eadb4456795b307a71524dbacd015c657bb2a39db2eab89"}, - {file = "yarl-1.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:d881d152ae0007809c2c02e22aa534e702f12071e6b285e90945aa3c376463c5"}, - {file = "yarl-1.8.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5df5e3d04101c1e5c3b1d69710b0574171cc02fddc4b23d1b2813e75f35a30b1"}, - {file = "yarl-1.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7a66c506ec67eb3159eea5096acd05f5e788ceec7b96087d30c7d2865a243918"}, - {file = "yarl-1.8.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2b4fa2606adf392051d990c3b3877d768771adc3faf2e117b9de7eb977741229"}, - {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e21fb44e1eff06dd6ef971d4bdc611807d6bd3691223d9c01a18cec3677939e"}, - {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93202666046d9edadfe9f2e7bf5e0782ea0d497b6d63da322e541665d65a044e"}, - {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc77086ce244453e074e445104f0ecb27530d6fd3a46698e33f6c38951d5a0f1"}, - {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dd68a92cab699a233641f5929a40f02a4ede8c009068ca8aa1fe87b8c20ae3"}, - {file = "yarl-1.8.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b372aad2b5f81db66ee7ec085cbad72c4da660d994e8e590c997e9b01e44901"}, - {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6f3515aafe0209dd17fb9bdd3b4e892963370b3de781f53e1746a521fb39fc0"}, - {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:dfef7350ee369197106805e193d420b75467b6cceac646ea5ed3049fcc950a05"}, - {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:728be34f70a190566d20aa13dc1f01dc44b6aa74580e10a3fb159691bc76909d"}, - {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ff205b58dc2929191f68162633d5e10e8044398d7a45265f90a0f1d51f85f72c"}, - {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf211dcad448a87a0d9047dc8282d7de59473ade7d7fdf22150b1d23859f946"}, - {file = "yarl-1.8.2-cp38-cp38-win32.whl", hash = "sha256:272b4f1599f1b621bf2aabe4e5b54f39a933971f4e7c9aa311d6d7dc06965165"}, - {file = "yarl-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:326dd1d3caf910cd26a26ccbfb84c03b608ba32499b5d6eeb09252c920bcbe4f"}, - {file = "yarl-1.8.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f8ca8ad414c85bbc50f49c0a106f951613dfa5f948ab69c10ce9b128d368baf8"}, - {file = "yarl-1.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:418857f837347e8aaef682679f41e36c24250097f9e2f315d39bae3a99a34cbf"}, - {file = "yarl-1.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ae0eec05ab49e91a78700761777f284c2df119376e391db42c38ab46fd662b77"}, - {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:009a028127e0a1755c38b03244c0bea9d5565630db9c4cf9572496e947137a87"}, - {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3edac5d74bb3209c418805bda77f973117836e1de7c000e9755e572c1f7850d0"}, - {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da65c3f263729e47351261351b8679c6429151ef9649bba08ef2528ff2c423b2"}, - {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ef8fb25e52663a1c85d608f6dd72e19bd390e2ecaf29c17fb08f730226e3a08"}, - {file = "yarl-1.8.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcd7bb1e5c45274af9a1dd7494d3c52b2be5e6bd8d7e49c612705fd45420b12d"}, - {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44ceac0450e648de86da8e42674f9b7077d763ea80c8ceb9d1c3e41f0f0a9951"}, - {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:97209cc91189b48e7cfe777237c04af8e7cc51eb369004e061809bcdf4e55220"}, - {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:48dd18adcf98ea9cd721a25313aef49d70d413a999d7d89df44f469edfb38a06"}, - {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e59399dda559688461762800d7fb34d9e8a6a7444fd76ec33220a926c8be1516"}, - {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d617c241c8c3ad5c4e78a08429fa49e4b04bedfc507b34b4d8dceb83b4af3588"}, - {file = "yarl-1.8.2-cp39-cp39-win32.whl", hash = "sha256:cb6d48d80a41f68de41212f3dfd1a9d9898d7841c8f7ce6696cf2fd9cb57ef83"}, - {file = "yarl-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:6604711362f2dbf7160df21c416f81fac0de6dbcf0b5445a2ef25478ecc4c778"}, - {file = "yarl-1.8.2.tar.gz", hash = "sha256:49d43402c6e3013ad0978602bf6bf5328535c48d192304b91b97a3c6790b1562"}, -] - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" - -[[package]] -name = "zipp" -version = "3.15.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.7" -files = [ - {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, - {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] - -[metadata] -lock-version = "2.0" -python-versions = "^3.8" -content-hash = "400ac506bf8f14333fa2e073fd39cc765a1941aab895d5ed6f9dd264146fc726" diff --git a/pretrained/.gitignore b/pretrained/.gitignore deleted file mode 100644 index d6b7ef32c8478a48c3994dcadc86837f4371184d..0000000000000000000000000000000000000000 --- a/pretrained/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/pretrained_v2/.gitignore b/pretrained_v2/.gitignore deleted file mode 100644 index d6b7ef32c8478a48c3994dcadc86837f4371184d..0000000000000000000000000000000000000000 --- a/pretrained_v2/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 5b152583542f7129fe688c2eccd7285ac37f1714..0000000000000000000000000000000000000000 --- a/pyproject.toml +++ /dev/null @@ -1,62 +0,0 @@ -[tool.poetry] -name = "rvc-beta" -version = "0.1.0" -description = "" -authors = ["lj1995"] -license = "MIT" - -[tool.poetry.dependencies] -python = "^3.8" -torch = "^2.0.0" -torchaudio = "^2.0.1" -Cython = "^0.29.34" -gradio = "^3.34.0" -future = "^0.18.3" -pydub = "^0.25.1" -soundfile = "^0.12.1" -ffmpeg-python = "^0.2.0" -tensorboardX = "^2.6" -functorch = "^2.0.0" -fairseq = "^0.12.2" -faiss-cpu = "^1.7.2" -Jinja2 = "^3.1.2" -json5 = "^0.9.11" -librosa = "0.9.2" -llvmlite = "0.39.0" -Markdown = "^3.4.3" -matplotlib = "^3.7.1" -matplotlib-inline = "^0.1.6" -numba = "0.56.4" -numpy = "1.23.5" -scipy = "1.9.3" -praat-parselmouth = "^0.4.3" -Pillow = "9.3.0" -pyworld = "^0.3.2" -resampy = "^0.4.2" -scikit-learn = "^1.2.2" -starlette = "^0.27.0" -tensorboard = "^2.12.1" -tensorboard-data-server = "^0.7.0" -tensorboard-plugin-wit = "^1.8.1" -torchgen = "^0.0.1" -tqdm = "^4.65.0" -tornado = "^6.3" -Werkzeug = "^2.2.3" -uc-micro-py = "^1.0.1" -sympy = "^1.11.1" -tabulate = "^0.9.0" -PyYAML = "^6.0" -pyasn1 = "^0.4.8" -pyasn1-modules = "^0.2.8" -fsspec = "^2023.3.0" -absl-py = "^1.4.0" -audioread = "^3.0.0" -uvicorn = "^0.21.1" -colorama = "^0.4.6" -torchcrepe = "0.0.20" - -[tool.poetry.dev-dependencies] - -[build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" diff --git a/requirements-dml.txt b/requirements-dml.txt deleted file mode 100644 index 445fb1e6e3691ea78275d75b0c146c1c2da321e7..0000000000000000000000000000000000000000 --- a/requirements-dml.txt +++ /dev/null @@ -1,48 +0,0 @@ -joblib>=1.1.0 -numba==0.56.4 -numpy==1.23.5 -scipy -librosa==0.9.1 -llvmlite==0.39.0 -fairseq==0.12.2 -faiss-cpu==1.7.3 -gradio==3.34.0 -Cython -pydub>=0.25.1 -soundfile>=0.12.1 -ffmpeg-python>=0.2.0 -tensorboardX -Jinja2>=3.1.2 -json5 -Markdown -matplotlib>=3.7.0 -matplotlib-inline>=0.1.3 -praat-parselmouth>=0.4.2 -Pillow>=9.1.1 -resampy>=0.4.2 -scikit-learn -tensorboard -tqdm>=4.63.1 -tornado>=6.1 -Werkzeug>=2.2.3 -uc-micro-py>=1.0.1 -sympy>=1.11.1 -tabulate>=0.8.10 -PyYAML>=6.0 -pyasn1>=0.4.8 -pyasn1-modules>=0.2.8 -fsspec>=2022.11.0 -absl-py>=1.2.0 -audioread -uvicorn>=0.21.1 -colorama>=0.4.5 -pyworld==0.3.2 -httpx -onnxruntime-directml -torchcrepe==0.0.20 -fastapi==0.88 -ffmpy==0.3.1 -python-dotenv>=1.0.0 -av -edge-tts -git+https://github.com/suno-ai/bark.git diff --git a/requirements-ipex.txt b/requirements-ipex.txt deleted file mode 100644 index afcc738df901cd1e24b3ce9be1b5ef441de54aca..0000000000000000000000000000000000000000 --- a/requirements-ipex.txt +++ /dev/null @@ -1,56 +0,0 @@ -torch==2.0.1a0 -intel_extension_for_pytorch==2.0.110+xpu -torchvision==0.15.2a0 -https://github.com/Disty0/Retrieval-based-Voice-Conversion-WebUI/releases/download/torchaudio_wheels_for_ipex/torchaudio-2.0.2+31de77d-cp310-cp310-linux_x86_64.whl --f https://developer.intel.com/ipex-whl-stable-xpu -joblib>=1.1.0 -numba==0.56.4 -numpy==1.23.5 -scipy -librosa==0.9.1 -llvmlite==0.39.0 -fairseq==0.12.2 -faiss-cpu==1.7.3 -gradio==3.34.0 -Cython -pydub>=0.25.1 -soundfile>=0.12.1 -ffmpeg-python>=0.2.0 -tensorboardX -Jinja2>=3.1.2 -json5 -Markdown -matplotlib>=3.7.0 -matplotlib-inline>=0.1.3 -praat-parselmouth>=0.4.2 -Pillow>=9.1.1 -resampy>=0.4.2 -scikit-learn -tensorboard -tqdm>=4.63.1 -tornado>=6.1 -Werkzeug>=2.2.3 -uc-micro-py>=1.0.1 -sympy>=1.11.1 -tabulate>=0.8.10 -PyYAML>=6.0 -pyasn1>=0.4.8 -pyasn1-modules>=0.2.8 -fsspec>=2022.11.0 -absl-py>=1.2.0 -audioread -uvicorn>=0.21.1 -colorama>=0.4.5 -pyworld==0.3.2 -httpx -onnxruntime; sys_platform == 'darwin' -onnxruntime-gpu; sys_platform != 'darwin' -torchcrepe==0.0.20 -fastapi==0.88 -ffmpy==0.3.1 -python-dotenv>=1.0.0 -av -PySimpleGUI -sounddevice -edge-tts -git+https://github.com/suno-ai/bark.git diff --git a/requirements-realtime-vc.txt b/requirements-realtime-vc.txt deleted file mode 100644 index 9d6935bfebd2df6533e8fafe2aa116d8ccf92085..0000000000000000000000000000000000000000 --- a/requirements-realtime-vc.txt +++ /dev/null @@ -1,29 +0,0 @@ -#1.Install torch from pytorch.org: -#torch 2.0 with cuda 11.8 -#pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 -#torch 1.11.0 with cuda 11.3 -#pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113 -einops -fairseq -flask -flask_cors -gin -gin_config -librosa -local_attention -matplotlib -praat-parselmouth -pyworld -PyYAML -resampy -scikit_learn -scipy -SoundFile -tensorboard -tqdm -wave -PySimpleGUI -sounddevice -gradio -noisereduce -torchcrepe==0.0.20 diff --git a/requirements-win-for-realtime_vc_gui-dml.txt b/requirements-win-for-realtime_vc_gui-dml.txt deleted file mode 100644 index 651498960713e42c8a843c2507f0413141794807..0000000000000000000000000000000000000000 --- a/requirements-win-for-realtime_vc_gui-dml.txt +++ /dev/null @@ -1,29 +0,0 @@ -#1.Install torch from pytorch.org: -#torch 2.0 with cuda 11.8 -#pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 -#torch 1.11.0 with cuda 11.3 -#pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113 -einops -fairseq -flask -flask_cors -gin -gin_config -librosa -local_attention -matplotlib -praat-parselmouth -pyworld -PyYAML -resampy -scikit_learn -scipy -SoundFile -tensorboard -tqdm -wave -PySimpleGUI -sounddevice -gradio -noisereduce -onnxruntime-directml \ No newline at end of file diff --git a/requirements-win-for-realtime_vc_gui.txt b/requirements-win-for-realtime_vc_gui.txt deleted file mode 100644 index 37ca23823fb800612369078bbb8908204442937a..0000000000000000000000000000000000000000 --- a/requirements-win-for-realtime_vc_gui.txt +++ /dev/null @@ -1,28 +0,0 @@ -#1.Install torch from pytorch.org: -#torch 2.0 with cuda 11.8 -#pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 -#torch 1.11.0 with cuda 11.3 -#pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113 -einops -fairseq -flask -flask_cors -gin -gin_config -librosa -local_attention -matplotlib -praat-parselmouth -pyworld -PyYAML -resampy -scikit_learn -scipy -SoundFile -tensorboard -tqdm -wave -PySimpleGUI -sounddevice -gradio -noisereduce diff --git a/requirements.txt b/requirements.txt index 2c669e0f0cbfbac01eed928a76d7592c42b90823..72c73953dd76ccd3e96769206aaa2de7781b9195 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,59 +1,40 @@ -tornado>=6.1 -setuptools -pydantic -fairseq==0.12.2 -wheel -google-auth-oauthlib -pedalboard -pydub==0.25.1 -httpx==0.23.0 -tensorboardX -faiss_cpu==1.7.3 -ffmpeg_python==0.2.0 -ffmpy==0.3.1 -websockets>=10.0 -gradio==3.34.0 -librosa==0.9.1 -elevenlabs -gTTS==2.3.2 -wget -psutil -matplotlib==3.7.2 -mega.py==1.0.8 -gdown -edge-tts -git+https://github.com/suno-ai/bark.git -nltk -noisereduce==2.0.1 -unidecode -numba==0.57.1 +# General dependencies +ffmpeg-python>=0.2.0 numpy==1.23.5 -onnxruntime -onnxruntime_gpu==1.15.1 -opencv_python==4.8.0.74 -opencv_python_headless==4.8.0.74 -pandas==2.0.3 -praat-parselmouth==0.4.2 -PySimpleGUI==4.60.5 requests==2.31.0 -resampy==0.4.2 -scikit_learn==1.3.0 +tqdm +wget + +# Audio processing +faiss-cpu==1.7.3 +librosa==0.9.2 +pyworld==0.3.4 scipy==1.11.1 -yt_dlp==2023.7.6 -pyngrok==4.1.12 -sounddevice==0.4.6 soundfile==0.12.1 -tensorboard==2.13.0 -tb_nightly==2.14.0a20230803 -torch==2.0.0 -torchcrepe==0.0.21 -torch_directml==0.2.0.dev230426 -torchaudio==2.0.1 -torchvision==0.15.1 -torchgen>=0.0.1 -tqdm==4.65.0 -python-dotenv>=1.0.0 -av +praat-parselmouth +noisereduce +audio_upscaler==0.1.4 +# Machine learning +fairseq==0.12.2 +numba; sys_platform == 'linux' +numba==0.56.4; sys_platform == 'darwin' or sys_platform == 'win32' +torch==2.2.0 +torchcrepe==0.0.22 +torchvision +einops +# Visualization +matplotlib==3.7.2 +tensorboard +gradio==4.31.4 +# Miscellaneous +ffmpy==0.3.1 +tensorboardX +edge-tts==6.1.9 +pypresence +beautifulsoup4 +flask +local-attention +spaces \ No newline at end of file diff --git a/run-install.sh b/run-install.sh new file mode 100644 index 0000000000000000000000000000000000000000..94b65ebf2f7c7693c5bf13334b13ea2edccb1dab --- /dev/null +++ b/run-install.sh @@ -0,0 +1,87 @@ +#!/bin/sh +printf "\033]0;Installer\007" +clear +rm *.bat + +# Function to create or activate a virtual environment +prepare_install() { + if [ -d ".venv" ]; then + echo "Venv found. This implies Applio has been already installed or this is a broken install" + printf "Do you want to execute run-applio.sh? (Y/N): " >&2 + read -r r + r=$(echo "$r" | tr '[:upper:]' '[:lower:]') + if [ "$r" = "y" ]; then + ./run-applio.sh && exit 1 + else + echo "Ok! The installation will continue. Good luck!" + fi + . .venv/bin/activate + else + echo "Creating venv..." + requirements_file="requirements.txt" + echo "Checking if python exists" + if command -v python3.10 > /dev/null 2>&1; then + py=$(which python3.10) + echo "Using python3.10" + else + if python --version | grep -qE "3\.(7|8|9|10)\."; then + py=$(which python) + echo "Using python" + else + echo "Please install Python3 or 3.10 manually." + exit 1 + fi + fi + + $py -m venv .venv + . .venv/bin/activate + python -m ensurepip + # Update pip within the virtual environment + pip3 install --upgrade pip + echo + echo "Installing Applio dependencies..." + python -m pip install -r requirements.txt + python -m pip uninstall torch torchvision torchaudio -y + python -m pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu121 + finish + fi +} + +# Function to finish installation (this should install missing dependencies) +finish() { + # Check if required packages are installed and install them if not + if [ -f "${requirements_file}" ]; then + installed_packages=$(python -m pip freeze) + while IFS= read -r package; do + expr "${package}" : "^#.*" > /dev/null && continue + package_name=$(echo "${package}" | sed 's/[<>=!].*//') + if ! echo "${installed_packages}" | grep -q "${package_name}"; then + echo "${package_name} not found. Attempting to install..." + python -m pip install --upgrade "${package}" + fi + done < "${requirements_file}" + else + echo "${requirements_file} not found. Please ensure the requirements file with required packages exists." + exit 1 + fi + clear + echo "Applio has been successfully downloaded. Run the file run-applio.sh to run the web interface!" + exit 0 +} + +# Loop to the main menu +if [ "$(uname)" = "Darwin" ]; then + if ! command -v brew >/dev/null 2>&1; then + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + else + brew install python@3.10 + export PYTORCH_ENABLE_MPS_FALLBACK=1 + export PYTORCH_MPS_HIGH_WATERMARK_RATIO=0.0 + fi +elif [ "$(uname)" != "Linux" ]; then + echo "Unsupported operating system. Are you using Windows...?" + echo "If yes, use the batch (.bat) file instead of this one!" + exit 1 +fi + +prepare_install diff --git a/run.sh b/run.sh deleted file mode 100644 index 704c9fff20b42b8659f7b4c797cd2928af9dec7a..0000000000000000000000000000000000000000 --- a/run.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/bash - -if [[ "$(uname)" == "Darwin" ]]; then - # macOS specific env: - export PYTORCH_ENABLE_MPS_FALLBACK=1 - export PYTORCH_MPS_HIGH_WATERMARK_RATIO=0.0 -elif [[ "$(uname)" != "Linux" ]]; then - echo "Unsupported operating system." - exit 1 -fi - -if [ -d ".venv" ]; then - echo "Activate venv..." - source .venv/bin/activate -else - echo "Create venv..." - requirements_file="requirements.txt" - - # Check if Python 3.8 is installed - if ! command -v python3 &> /dev/null; then - echo "Python 3 not found. Attempting to install 3.8..." - if [[ "$(uname)" == "Darwin" ]] && command -v brew &> /dev/null; then - brew install python@3.8 - elif [[ "$(uname)" == "Linux" ]] && command -v apt-get &> /dev/null; then - sudo apt-get update - sudo apt-get install python3.8 - else - echo "Please install Python 3.8 manually." - exit 1 - fi - fi - - python3 -m venv .venv - source .venv/bin/activate - - # Check if required packages are installed and install them if not - if [ -f "${requirements_file}" ]; then - installed_packages=$(python3 -m pip freeze) - while IFS= read -r package; do - [[ "${package}" =~ ^#.* ]] && continue - package_name=$(echo "${package}" | sed 's/[<>=!].*//') - if ! echo "${installed_packages}" | grep -q "${package_name}"; then - echo "${package_name} not found. Attempting to install..." - python3 -m pip install --upgrade "${package}" - fi - done < "${requirements_file}" - else - echo "${requirements_file} not found. Please ensure the requirements file with required packages exists." - exit 1 - fi -fi - -# Download models -./tools/dlmodels.sh - -if [[ $? -ne 0 ]]; then - exit 1 -fi - -# Run the main script -python3 infer-web.py --pycmd python3 diff --git a/rvc/configs/config.py b/rvc/configs/config.py new file mode 100644 index 0000000000000000000000000000000000000000..8afa53c205e2b3040666fbcaf9bee2052c39dd16 --- /dev/null +++ b/rvc/configs/config.py @@ -0,0 +1,164 @@ +import torch +import json +import os + +version_config_list = [ + "v1/32000.json", + "v1/40000.json", + "v1/48000.json", + "v2/48000.json", + "v2/32000.json", +] + + +def singleton_variable(func): + def wrapper(*args, **kwargs): + if not wrapper.instance: + wrapper.instance = func(*args, **kwargs) + return wrapper.instance + + wrapper.instance = None + return wrapper + + +@singleton_variable +class Config: + def __init__(self): + self.device = "cuda:0" + self.is_half = True + self.use_jit = False + self.n_cpu = 0 + self.gpu_name = None + self.json_config = self.load_config_json() + self.gpu_mem = None + self.instead = "" + self.x_pad, self.x_query, self.x_center, self.x_max = self.device_config() + + @staticmethod + def load_config_json() -> dict: + d = {} + for config_file in version_config_list: + with open(f"rvc/configs/{config_file}", "r") as f: + d[config_file] = json.load(f) + return d + + @staticmethod + def has_mps() -> bool: + if not torch.backends.mps.is_available(): + return False + try: + torch.zeros(1).to(torch.device("mps")) + return True + except Exception: + return False + + @staticmethod + def has_xpu() -> bool: + if hasattr(torch, "xpu") and torch.xpu.is_available(): + return True + else: + return False + + def use_fp32_config(self): + print( + f"Using FP32 config instead of FP16 due to GPU compatibility ({self.gpu_name})" + ) + for config_file in version_config_list: + self.json_config[config_file]["train"]["fp16_run"] = False + with open(f"rvc/configs/{config_file}", "r") as f: + strr = f.read().replace("true", "false") + with open(f"rvc/configs/{config_file}", "w") as f: + f.write(strr) + with open("rvc/train/preprocess/preprocess.py", "r") as f: + strr = f.read().replace("3.7", "3.0") + with open("rvc/train/preprocess/preprocess.py", "w") as f: + f.write(strr) + + def device_config(self) -> tuple: + if torch.cuda.is_available(): + if self.has_xpu(): + self.device = self.instead = "xpu:0" + self.is_half = True + i_device = int(self.device.split(":")[-1]) + self.gpu_name = torch.cuda.get_device_name(i_device) + if ( + ("16" in self.gpu_name and "V100" not in self.gpu_name.upper()) + or "P40" in self.gpu_name.upper() + or "P10" in self.gpu_name.upper() + or "1060" in self.gpu_name + or "1070" in self.gpu_name + or "1080" in self.gpu_name + ): + self.is_half = False + self.use_fp32_config() + self.gpu_mem = int( + torch.cuda.get_device_properties(i_device).total_memory + / 1024 + / 1024 + / 1024 + + 0.4 + ) + if self.gpu_mem <= 4: + with open("rvc/train/preprocess/preprocess.py", "r") as f: + strr = f.read().replace("3.7", "3.0") + with open("rvc/train/preprocess/preprocess.py", "w") as f: + f.write(strr) + elif self.has_mps(): + print("No supported Nvidia GPU found") + self.device = self.instead = "mps" + self.is_half = False + self.use_fp32_config() + else: + print("No supported Nvidia GPU found") + self.device = self.instead = "cpu" + self.is_half = False + self.use_fp32_config() + + if self.n_cpu == 0: + self.n_cpu = os.cpu_count() + + if self.is_half: + x_pad = 3 + x_query = 10 + x_center = 60 + x_max = 65 + else: + x_pad = 1 + x_query = 6 + x_center = 38 + x_max = 41 + + if self.gpu_mem is not None and self.gpu_mem <= 4: + x_pad = 1 + x_query = 5 + x_center = 30 + x_max = 32 + + return x_pad, x_query, x_center, x_max + + +def max_vram_gpu(gpu): + if torch.cuda.is_available(): + gpu_properties = torch.cuda.get_device_properties(gpu) + total_memory_gb = round(gpu_properties.total_memory / 1024 / 1024 / 1024) + return total_memory_gb + else: + return "0" + + +def get_gpu_info(): + ngpu = torch.cuda.device_count() + gpu_infos = [] + if torch.cuda.is_available() or ngpu != 0: + for i in range(ngpu): + gpu_name = torch.cuda.get_device_name(i) + mem = int( + torch.cuda.get_device_properties(i).total_memory / 1024 / 1024 / 1024 + + 0.4 + ) + gpu_infos.append("%s: %s %s GB" % (i, gpu_name, mem)) + if len(gpu_infos) > 0: + gpu_info = "\n".join(gpu_infos) + else: + gpu_info = "Unfortunately, there is no compatible GPU available to support your training." + return gpu_info diff --git a/configs/v1/32k.json b/rvc/configs/v1/32000.json similarity index 95% rename from configs/v1/32k.json rename to rvc/configs/v1/32000.json index d5f16d691ed798f4c974b431167c36269b2ce7d2..35bc5786470f7c8a8ce51ea59ed1989c6cdb527d 100644 --- a/configs/v1/32k.json +++ b/rvc/configs/v1/32000.json @@ -1,46 +1,46 @@ -{ - "train": { - "log_interval": 200, - "seed": 1234, - "epochs": 20000, - "learning_rate": 1e-4, - "betas": [0.8, 0.99], - "eps": 1e-9, - "batch_size": 4, - "fp16_run": true, - "lr_decay": 0.999875, - "segment_size": 12800, - "init_lr_ratio": 1, - "warmup_epochs": 0, - "c_mel": 45, - "c_kl": 1.0 - }, - "data": { - "max_wav_value": 32768.0, - "sampling_rate": 32000, - "filter_length": 1024, - "hop_length": 320, - "win_length": 1024, - "n_mel_channels": 80, - "mel_fmin": 0.0, - "mel_fmax": null - }, - "model": { - "inter_channels": 192, - "hidden_channels": 192, - "filter_channels": 768, - "n_heads": 2, - "n_layers": 6, - "kernel_size": 3, - "p_dropout": 0, - "resblock": "1", - "resblock_kernel_sizes": [3,7,11], - "resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]], - "upsample_rates": [10,4,2,2,2], - "upsample_initial_channel": 512, - "upsample_kernel_sizes": [16,16,4,4,4], - "use_spectral_norm": false, - "gin_channels": 256, - "spk_embed_dim": 109 - } -} +{ + "train": { + "log_interval": 200, + "seed": 1234, + "epochs": 20000, + "learning_rate": 1e-4, + "betas": [0.8, 0.99], + "eps": 1e-9, + "batch_size": 4, + "fp16_run": true, + "lr_decay": 0.999875, + "segment_size": 12800, + "init_lr_ratio": 1, + "warmup_epochs": 0, + "c_mel": 45, + "c_kl": 1.0 + }, + "data": { + "max_wav_value": 32768.0, + "sampling_rate": 32000, + "filter_length": 1024, + "hop_length": 320, + "win_length": 1024, + "n_mel_channels": 80, + "mel_fmin": 0.0, + "mel_fmax": null + }, + "model": { + "inter_channels": 192, + "hidden_channels": 192, + "filter_channels": 768, + "n_heads": 2, + "n_layers": 6, + "kernel_size": 3, + "p_dropout": 0, + "resblock": "1", + "resblock_kernel_sizes": [3,7,11], + "resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]], + "upsample_rates": [10,4,2,2,2], + "upsample_initial_channel": 512, + "upsample_kernel_sizes": [16,16,4,4,4], + "use_spectral_norm": false, + "gin_channels": 256, + "spk_embed_dim": 109 + } +} diff --git a/configs/v1/40k.json b/rvc/configs/v1/40000.json similarity index 95% rename from configs/v1/40k.json rename to rvc/configs/v1/40000.json index 4ffc87b9e9725fcd59d81a68d41a61962213b777..73046aa3bd582d28ee638b01d8e0ea47f4b2f703 100644 --- a/configs/v1/40k.json +++ b/rvc/configs/v1/40000.json @@ -1,46 +1,46 @@ -{ - "train": { - "log_interval": 200, - "seed": 1234, - "epochs": 20000, - "learning_rate": 1e-4, - "betas": [0.8, 0.99], - "eps": 1e-9, - "batch_size": 4, - "fp16_run": true, - "lr_decay": 0.999875, - "segment_size": 12800, - "init_lr_ratio": 1, - "warmup_epochs": 0, - "c_mel": 45, - "c_kl": 1.0 - }, - "data": { - "max_wav_value": 32768.0, - "sampling_rate": 40000, - "filter_length": 2048, - "hop_length": 400, - "win_length": 2048, - "n_mel_channels": 125, - "mel_fmin": 0.0, - "mel_fmax": null - }, - "model": { - "inter_channels": 192, - "hidden_channels": 192, - "filter_channels": 768, - "n_heads": 2, - "n_layers": 6, - "kernel_size": 3, - "p_dropout": 0, - "resblock": "1", - "resblock_kernel_sizes": [3,7,11], - "resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]], - "upsample_rates": [10,10,2,2], - "upsample_initial_channel": 512, - "upsample_kernel_sizes": [16,16,4,4], - "use_spectral_norm": false, - "gin_channels": 256, - "spk_embed_dim": 109 - } -} +{ + "train": { + "log_interval": 200, + "seed": 1234, + "epochs": 20000, + "learning_rate": 1e-4, + "betas": [0.8, 0.99], + "eps": 1e-9, + "batch_size": 4, + "fp16_run": true, + "lr_decay": 0.999875, + "segment_size": 12800, + "init_lr_ratio": 1, + "warmup_epochs": 0, + "c_mel": 45, + "c_kl": 1.0 + }, + "data": { + "max_wav_value": 32768.0, + "sampling_rate": 40000, + "filter_length": 2048, + "hop_length": 400, + "win_length": 2048, + "n_mel_channels": 125, + "mel_fmin": 0.0, + "mel_fmax": null + }, + "model": { + "inter_channels": 192, + "hidden_channels": 192, + "filter_channels": 768, + "n_heads": 2, + "n_layers": 6, + "kernel_size": 3, + "p_dropout": 0, + "resblock": "1", + "resblock_kernel_sizes": [3,7,11], + "resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]], + "upsample_rates": [10,10,2,2], + "upsample_initial_channel": 512, + "upsample_kernel_sizes": [16,16,4,4], + "use_spectral_norm": false, + "gin_channels": 256, + "spk_embed_dim": 109 + } +} diff --git a/configs/v1/48k.json b/rvc/configs/v1/48000.json similarity index 95% rename from configs/v1/48k.json rename to rvc/configs/v1/48000.json index 2d0e05beb794f6f61b769b48c7ae728bf59e6335..2ce6f3c27ab413406cbb4d3017abc7295f60a039 100644 --- a/configs/v1/48k.json +++ b/rvc/configs/v1/48000.json @@ -1,46 +1,46 @@ -{ - "train": { - "log_interval": 200, - "seed": 1234, - "epochs": 20000, - "learning_rate": 1e-4, - "betas": [0.8, 0.99], - "eps": 1e-9, - "batch_size": 4, - "fp16_run": true, - "lr_decay": 0.999875, - "segment_size": 11520, - "init_lr_ratio": 1, - "warmup_epochs": 0, - "c_mel": 45, - "c_kl": 1.0 - }, - "data": { - "max_wav_value": 32768.0, - "sampling_rate": 48000, - "filter_length": 2048, - "hop_length": 480, - "win_length": 2048, - "n_mel_channels": 128, - "mel_fmin": 0.0, - "mel_fmax": null - }, - "model": { - "inter_channels": 192, - "hidden_channels": 192, - "filter_channels": 768, - "n_heads": 2, - "n_layers": 6, - "kernel_size": 3, - "p_dropout": 0, - "resblock": "1", - "resblock_kernel_sizes": [3,7,11], - "resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]], - "upsample_rates": [10,6,2,2,2], - "upsample_initial_channel": 512, - "upsample_kernel_sizes": [16,16,4,4,4], - "use_spectral_norm": false, - "gin_channels": 256, - "spk_embed_dim": 109 - } -} +{ + "train": { + "log_interval": 200, + "seed": 1234, + "epochs": 20000, + "learning_rate": 1e-4, + "betas": [0.8, 0.99], + "eps": 1e-9, + "batch_size": 4, + "fp16_run": true, + "lr_decay": 0.999875, + "segment_size": 11520, + "init_lr_ratio": 1, + "warmup_epochs": 0, + "c_mel": 45, + "c_kl": 1.0 + }, + "data": { + "max_wav_value": 32768.0, + "sampling_rate": 48000, + "filter_length": 2048, + "hop_length": 480, + "win_length": 2048, + "n_mel_channels": 128, + "mel_fmin": 0.0, + "mel_fmax": null + }, + "model": { + "inter_channels": 192, + "hidden_channels": 192, + "filter_channels": 768, + "n_heads": 2, + "n_layers": 6, + "kernel_size": 3, + "p_dropout": 0, + "resblock": "1", + "resblock_kernel_sizes": [3,7,11], + "resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]], + "upsample_rates": [10,6,2,2,2], + "upsample_initial_channel": 512, + "upsample_kernel_sizes": [16,16,4,4,4], + "use_spectral_norm": false, + "gin_channels": 256, + "spk_embed_dim": 109 + } +} diff --git a/configs/v2/32k.json b/rvc/configs/v2/32000.json similarity index 95% rename from configs/v2/32k.json rename to rvc/configs/v2/32000.json index 70e534f4c641a5a2c8e5c1e172f61398ee97e6e0..c82e2033a9288b3c875cc77573638fe7a1956095 100644 --- a/configs/v2/32k.json +++ b/rvc/configs/v2/32000.json @@ -1,46 +1,46 @@ -{ - "train": { - "log_interval": 200, - "seed": 1234, - "epochs": 20000, - "learning_rate": 1e-4, - "betas": [0.8, 0.99], - "eps": 1e-9, - "batch_size": 4, - "fp16_run": true, - "lr_decay": 0.999875, - "segment_size": 12800, - "init_lr_ratio": 1, - "warmup_epochs": 0, - "c_mel": 45, - "c_kl": 1.0 - }, - "data": { - "max_wav_value": 32768.0, - "sampling_rate": 32000, - "filter_length": 1024, - "hop_length": 320, - "win_length": 1024, - "n_mel_channels": 80, - "mel_fmin": 0.0, - "mel_fmax": null - }, - "model": { - "inter_channels": 192, - "hidden_channels": 192, - "filter_channels": 768, - "n_heads": 2, - "n_layers": 6, - "kernel_size": 3, - "p_dropout": 0, - "resblock": "1", - "resblock_kernel_sizes": [3,7,11], - "resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]], - "upsample_rates": [10,8,2,2], - "upsample_initial_channel": 512, - "upsample_kernel_sizes": [20,16,4,4], - "use_spectral_norm": false, - "gin_channels": 256, - "spk_embed_dim": 109 - } -} +{ + "train": { + "log_interval": 200, + "seed": 1234, + "epochs": 20000, + "learning_rate": 1e-4, + "betas": [0.8, 0.99], + "eps": 1e-9, + "batch_size": 4, + "fp16_run": true, + "lr_decay": 0.999875, + "segment_size": 12800, + "init_lr_ratio": 1, + "warmup_epochs": 0, + "c_mel": 45, + "c_kl": 1.0 + }, + "data": { + "max_wav_value": 32768.0, + "sampling_rate": 32000, + "filter_length": 1024, + "hop_length": 320, + "win_length": 1024, + "n_mel_channels": 80, + "mel_fmin": 0.0, + "mel_fmax": null + }, + "model": { + "inter_channels": 192, + "hidden_channels": 192, + "filter_channels": 768, + "n_heads": 2, + "n_layers": 6, + "kernel_size": 3, + "p_dropout": 0, + "resblock": "1", + "resblock_kernel_sizes": [3,7,11], + "resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]], + "upsample_rates": [10,8,2,2], + "upsample_initial_channel": 512, + "upsample_kernel_sizes": [20,16,4,4], + "use_spectral_norm": false, + "gin_channels": 256, + "spk_embed_dim": 109 + } +} diff --git a/configs/v2/48k.json b/rvc/configs/v2/48000.json similarity index 95% rename from configs/v2/48k.json rename to rvc/configs/v2/48000.json index 75f770cdacff3467e9e925ed2393b480881d0303..ab1d480c5854cd5ce7fbfdbfb2b9cb6af19189be 100644 --- a/configs/v2/48k.json +++ b/rvc/configs/v2/48000.json @@ -1,46 +1,46 @@ -{ - "train": { - "log_interval": 200, - "seed": 1234, - "epochs": 20000, - "learning_rate": 1e-4, - "betas": [0.8, 0.99], - "eps": 1e-9, - "batch_size": 4, - "fp16_run": true, - "lr_decay": 0.999875, - "segment_size": 17280, - "init_lr_ratio": 1, - "warmup_epochs": 0, - "c_mel": 45, - "c_kl": 1.0 - }, - "data": { - "max_wav_value": 32768.0, - "sampling_rate": 48000, - "filter_length": 2048, - "hop_length": 480, - "win_length": 2048, - "n_mel_channels": 128, - "mel_fmin": 0.0, - "mel_fmax": null - }, - "model": { - "inter_channels": 192, - "hidden_channels": 192, - "filter_channels": 768, - "n_heads": 2, - "n_layers": 6, - "kernel_size": 3, - "p_dropout": 0, - "resblock": "1", - "resblock_kernel_sizes": [3,7,11], - "resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]], - "upsample_rates": [12,10,2,2], - "upsample_initial_channel": 512, - "upsample_kernel_sizes": [24,20,4,4], - "use_spectral_norm": false, - "gin_channels": 256, - "spk_embed_dim": 109 - } -} +{ + "train": { + "log_interval": 200, + "seed": 1234, + "epochs": 20000, + "learning_rate": 1e-4, + "betas": [0.8, 0.99], + "eps": 1e-9, + "batch_size": 4, + "fp16_run": true, + "lr_decay": 0.999875, + "segment_size": 17280, + "init_lr_ratio": 1, + "warmup_epochs": 0, + "c_mel": 45, + "c_kl": 1.0 + }, + "data": { + "max_wav_value": 32768.0, + "sampling_rate": 48000, + "filter_length": 2048, + "hop_length": 480, + "win_length": 2048, + "n_mel_channels": 128, + "mel_fmin": 0.0, + "mel_fmax": null + }, + "model": { + "inter_channels": 192, + "hidden_channels": 192, + "filter_channels": 768, + "n_heads": 2, + "n_layers": 6, + "kernel_size": 3, + "p_dropout": 0, + "resblock": "1", + "resblock_kernel_sizes": [3,7,11], + "resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]], + "upsample_rates": [12,10,2,2], + "upsample_initial_channel": 512, + "upsample_kernel_sizes": [24,20,4,4], + "use_spectral_norm": false, + "gin_channels": 256, + "spk_embed_dim": 109 + } +} diff --git a/model/.gitkeep b/rvc/embedders/.gitignore similarity index 50% rename from model/.gitkeep rename to rvc/embedders/.gitignore index 8b137891791fe96927ad78e64b0aad7bded08bdc..d3f5a12faa99758192ecc4ed3fc22c9249232e86 100644 --- a/model/.gitkeep +++ b/rvc/embedders/.gitignore @@ -1 +1 @@ - + diff --git a/rvc/infer/infer.py b/rvc/infer/infer.py new file mode 100644 index 0000000000000000000000000000000000000000..099e053f58e4048b293d308a12a6b9e8cd6c1248 --- /dev/null +++ b/rvc/infer/infer.py @@ -0,0 +1,340 @@ +import os +import sys +import time +import torch +import logging + +import numpy as np +import soundfile as sf +import librosa + +now_dir = os.getcwd() +sys.path.append(now_dir) + +from rvc.infer.pipeline import VC +from scipy.io import wavfile +from audio_upscaler import upscale +import noisereduce as nr +from rvc.lib.utils import load_audio +from rvc.lib.tools.split_audio import process_audio, merge_audio +from rvc.lib.infer_pack.models import ( + SynthesizerTrnMs256NSFsid, + SynthesizerTrnMs256NSFsid_nono, + SynthesizerTrnMs768NSFsid, + SynthesizerTrnMs768NSFsid_nono, +) +from rvc.configs.config import Config +from rvc.lib.utils import load_embedding + +logging.getLogger("httpx").setLevel(logging.WARNING) +logging.getLogger("httpcore").setLevel(logging.WARNING) + +config = Config() +hubert_model = None +tgt_sr = None +net_g = None +vc = None +cpt = None +version = None +n_spk = None + + +def load_hubert(embedder_model, embedder_model_custom): + global hubert_model + models, _, _ = load_embedding(embedder_model, embedder_model_custom) + hubert_model = models[0] + hubert_model = hubert_model.to(config.device) + if config.is_half: + hubert_model = hubert_model.half() + else: + hubert_model = hubert_model.float() + hubert_model.eval() + + +def remove_audio_noise(input_audio_path, reduction_strength=0.7): + try: + rate, data = wavfile.read(input_audio_path) + reduced_noise = nr.reduce_noise( + y=data, + sr=rate, + prop_decrease=reduction_strength, + ) + return reduced_noise + except Exception as error: + print(f"Error cleaning audio: {error}") + return None + + +def convert_audio_format(input_path, output_path, output_format): + try: + if output_format != "WAV": + print(f"Converting audio to {output_format} format...") + audio, sample_rate = librosa.load(input_path, sr=None) + common_sample_rates = [ + 8000, + 11025, + 12000, + 16000, + 22050, + 24000, + 32000, + 44100, + 48000, + ] + target_sr = min(common_sample_rates, key=lambda x: abs(x - sample_rate)) + audio = librosa.resample(audio, orig_sr=sample_rate, target_sr=target_sr) + sf.write(output_path, audio, target_sr, format=output_format.lower()) + return output_path + except Exception as error: + print(f"Failed to convert audio to {output_format} format: {error}") + + +def voice_conversion( + sid=0, + input_audio_path=None, + f0_up_key=None, + f0_file=None, + f0_method=None, + file_index=None, + index_rate=None, + resample_sr=0, + rms_mix_rate=None, + protect=None, + hop_length=None, + output_path=None, + split_audio=False, + f0autotune=False, + filter_radius=None, + embedder_model=None, + embedder_model_custom=None, +): + global tgt_sr, net_g, vc, hubert_model, version + + f0_up_key = int(f0_up_key) + try: + audio = load_audio(input_audio_path, 16000) + audio_max = np.abs(audio).max() / 0.95 + + if audio_max > 1: + audio /= audio_max + + if not hubert_model: + load_hubert(embedder_model, embedder_model_custom) + if_f0 = cpt.get("f0", 1) + + file_index = ( + file_index.strip(" ") + .strip('"') + .strip("\n") + .strip('"') + .strip(" ") + .replace("trained", "added") + ) + if tgt_sr != resample_sr >= 16000: + tgt_sr = resample_sr + if split_audio == "True": + result, new_dir_path = process_audio(input_audio_path) + if result == "Error": + return "Error with Split Audio", None + dir_path = ( + new_dir_path.strip(" ").strip('"').strip("\n").strip('"').strip(" ") + ) + if dir_path != "": + paths = [ + os.path.join(root, name) + for root, _, files in os.walk(dir_path, topdown=False) + for name in files + if name.endswith(".wav") and root == dir_path + ] + try: + for path in paths: + voice_conversion( + sid, + path, + f0_up_key, + None, + f0_method, + file_index, + index_rate, + resample_sr, + rms_mix_rate, + protect, + hop_length, + path, + False, + f0autotune, + filter_radius, + embedder_model, + embedder_model_custom, + ) + except Exception as error: + print(error) + return f"Error {error}" + print("Finished processing segmented audio, now merging audio...") + merge_timestamps_file = os.path.join( + os.path.dirname(new_dir_path), + f"{os.path.basename(input_audio_path).split('.')[0]}_timestamps.txt", + ) + tgt_sr, audio_opt = merge_audio(merge_timestamps_file) + os.remove(merge_timestamps_file) + + else: + audio_opt = vc.pipeline( + hubert_model, + net_g, + sid, + audio, + input_audio_path, + f0_up_key, + f0_method, + file_index, + index_rate, + if_f0, + filter_radius, + tgt_sr, + resample_sr, + rms_mix_rate, + version, + protect, + hop_length, + f0autotune, + f0_file=f0_file, + ) + if output_path is not None: + sf.write(output_path, audio_opt, tgt_sr, format="WAV") + + return (tgt_sr, audio_opt) + + except Exception as error: + print(error) + + +def get_vc(weight_root, sid): + global n_spk, tgt_sr, net_g, vc, cpt, version + if sid == "" or sid == []: + global hubert_model + if hubert_model is not None: + print("clean_empty_cache") + del net_g, n_spk, vc, hubert_model, tgt_sr + hubert_model = net_g = n_spk = vc = hubert_model = tgt_sr = None + if torch.cuda.is_available(): + torch.cuda.empty_cache() + + if_f0 = cpt.get("f0", 1) + version = cpt.get("version", "v1") + if version == "v1": + if if_f0 == 1: + net_g = SynthesizerTrnMs256NSFsid( + *cpt["config"], is_half=config.is_half + ) + else: + net_g = SynthesizerTrnMs256NSFsid_nono(*cpt["config"]) + elif version == "v2": + if if_f0 == 1: + net_g = SynthesizerTrnMs768NSFsid( + *cpt["config"], is_half=config.is_half + ) + else: + net_g = SynthesizerTrnMs768NSFsid_nono(*cpt["config"]) + del net_g, cpt + if torch.cuda.is_available(): + torch.cuda.empty_cache() + cpt = None + person = weight_root + cpt = torch.load(person, map_location="cpu") + tgt_sr = cpt["config"][-1] + cpt["config"][-3] = cpt["weight"]["emb_g.weight"].shape[0] + if_f0 = cpt.get("f0", 1) + + version = cpt.get("version", "v1") + if version == "v1": + if if_f0 == 1: + net_g = SynthesizerTrnMs256NSFsid(*cpt["config"], is_half=config.is_half) + else: + net_g = SynthesizerTrnMs256NSFsid_nono(*cpt["config"]) + elif version == "v2": + if if_f0 == 1: + net_g = SynthesizerTrnMs768NSFsid(*cpt["config"], is_half=config.is_half) + else: + net_g = SynthesizerTrnMs768NSFsid_nono(*cpt["config"]) + del net_g.enc_q + print(net_g.load_state_dict(cpt["weight"], strict=False)) + net_g.eval().to(config.device) + if config.is_half: + net_g = net_g.half() + else: + net_g = net_g.float() + vc = VC(tgt_sr, config) + n_spk = cpt["config"][-3] + + +def infer_pipeline( + f0up_key, + filter_radius, + index_rate, + rms_mix_rate, + protect, + hop_length, + f0method, + audio_input_path, + audio_output_path, + model_path, + index_path, + split_audio, + f0autotune, + clean_audio, + clean_strength, + export_format, + embedder_model, + embedder_model_custom, + upscale_audio, +): + global tgt_sr, net_g, vc, cpt + + get_vc(model_path, 0) + + try: + + if upscale_audio == "True": + upscale(audio_input_path, audio_input_path) + + start_time = time.time() + voice_conversion( + sid=0, + input_audio_path=audio_input_path, + f0_up_key=f0up_key, + f0_file=None, + f0_method=f0method, + file_index=index_path, + index_rate=float(index_rate), + rms_mix_rate=float(rms_mix_rate), + protect=float(protect), + hop_length=hop_length, + output_path=audio_output_path, + split_audio=split_audio, + f0autotune=f0autotune, + filter_radius=filter_radius, + embedder_model=embedder_model, + embedder_model_custom=embedder_model_custom, + ) + + if clean_audio == "True": + cleaned_audio = remove_audio_noise(audio_output_path, clean_strength) + if cleaned_audio is not None: + sf.write(audio_output_path, cleaned_audio, tgt_sr, format="WAV") + + output_path_format = audio_output_path.replace( + ".wav", f".{export_format.lower()}" + ) + audio_output_path = convert_audio_format( + audio_output_path, output_path_format, export_format + ) + + end_time = time.time() + elapsed_time = end_time - start_time + print( + f"Conversion completed. Output file: '{audio_output_path}' in {elapsed_time:.2f} seconds." + ) + + except Exception as error: + print(f"Voice conversion failed: {error}") diff --git a/rvc/infer/pipeline.py b/rvc/infer/pipeline.py new file mode 100644 index 0000000000000000000000000000000000000000..83c8ad31f2e4cab88ea9ab65bb9b36e46edf3559 --- /dev/null +++ b/rvc/infer/pipeline.py @@ -0,0 +1,625 @@ +import numpy as np, parselmouth, torch, pdb, sys, os +from time import time as ttime +import torch.nn.functional as F +import torchcrepe +from torch import Tensor +import scipy.signal as signal +import pyworld, os, faiss, librosa, torchcrepe +from scipy import signal +from functools import lru_cache +import random +import gc +import re + +now_dir = os.getcwd() +sys.path.append(now_dir) + +from rvc.lib.FCPEF0Predictor import FCPEF0Predictor + +bh, ah = signal.butter(N=5, Wn=48, btype="high", fs=16000) + +input_audio_path2wav = {} + + +@lru_cache +def cache_harvest_f0(input_audio_path, fs, f0max, f0min, frame_period): + audio = input_audio_path2wav[input_audio_path] + f0, t = pyworld.harvest( + audio, + fs=fs, + f0_ceil=f0max, + f0_floor=f0min, + frame_period=frame_period, + ) + f0 = pyworld.stonemask(audio, f0, t, fs) + return f0 + + +def change_rms(data1, sr1, data2, sr2, rate): + # print(data1.max(),data2.max()) + rms1 = librosa.feature.rms(y=data1, frame_length=sr1 // 2 * 2, hop_length=sr1 // 2) + rms2 = librosa.feature.rms(y=data2, frame_length=sr2 // 2 * 2, hop_length=sr2 // 2) + + rms1 = torch.from_numpy(rms1) + rms1 = F.interpolate( + rms1.unsqueeze(0), size=data2.shape[0], mode="linear" + ).squeeze() + + rms2 = torch.from_numpy(rms2) + rms2 = F.interpolate( + rms2.unsqueeze(0), size=data2.shape[0], mode="linear" + ).squeeze() + rms2 = torch.max(rms2, torch.zeros_like(rms2) + 1e-6) + + data2 *= ( + torch.pow(rms1, torch.tensor(1 - rate)) + * torch.pow(rms2, torch.tensor(rate - 1)) + ).numpy() + return data2 + + +class VC(object): + def __init__(self, tgt_sr, config): + self.x_pad, self.x_query, self.x_center, self.x_max, self.is_half = ( + config.x_pad, + config.x_query, + config.x_center, + config.x_max, + config.is_half, + ) + self.sr = 16000 + self.window = 160 + self.t_pad = self.sr * self.x_pad + self.t_pad_tgt = tgt_sr * self.x_pad + self.t_pad2 = self.t_pad * 2 + self.t_query = self.sr * self.x_query + self.t_center = self.sr * self.x_center + self.t_max = self.sr * self.x_max + self.device = config.device + self.ref_freqs = [ + 65.41, + 82.41, + 110.00, + 146.83, + 196.00, + 246.94, + 329.63, + 440.00, + 587.33, + 783.99, + 1046.50, + ] + # Generate interpolated frequencies + self.note_dict = self.generate_interpolated_frequencies() + + def generate_interpolated_frequencies(self): + # Generate interpolated frequencies based on the reference frequencies. + note_dict = [] + for i in range(len(self.ref_freqs) - 1): + freq_low = self.ref_freqs[i] + freq_high = self.ref_freqs[i + 1] + # Interpolate between adjacent reference frequencies + interpolated_freqs = np.linspace( + freq_low, freq_high, num=10, endpoint=False + ) + note_dict.extend(interpolated_freqs) + # Add the last reference frequency + note_dict.append(self.ref_freqs[-1]) + return note_dict + + def autotune_f0(self, f0): + # Autotunes the given fundamental frequency (f0) to the nearest musical note. + autotuned_f0 = np.zeros_like(f0) + for i, freq in enumerate(f0): + # Find the closest note + closest_note = min(self.note_dict, key=lambda x: abs(x - freq)) + autotuned_f0[i] = closest_note + return autotuned_f0 + + def get_optimal_torch_device(self, index: int = 0) -> torch.device: + if torch.cuda.is_available(): + return torch.device(f"cuda:{index % torch.cuda.device_count()}") + elif torch.backends.mps.is_available(): + return torch.device("mps") + return torch.device("cpu") + + def get_f0_crepe_computation( + self, + x, + f0_min, + f0_max, + p_len, + hop_length, + model="full", + ): + x = x.astype(np.float32) + x /= np.quantile(np.abs(x), 0.999) + torch_device = self.get_optimal_torch_device() + audio = torch.from_numpy(x).to(torch_device, copy=True) + audio = torch.unsqueeze(audio, dim=0) + if audio.ndim == 2 and audio.shape[0] > 1: + audio = torch.mean(audio, dim=0, keepdim=True).detach() + audio = audio.detach() + pitch: Tensor = torchcrepe.predict( + audio, + self.sr, + hop_length, + f0_min, + f0_max, + model, + batch_size=hop_length * 2, + device=torch_device, + pad=True, + ) + p_len = p_len or x.shape[0] // hop_length + source = np.array(pitch.squeeze(0).cpu().float().numpy()) + source[source < 0.001] = np.nan + target = np.interp( + np.arange(0, len(source) * p_len, len(source)) / p_len, + np.arange(0, len(source)), + source, + ) + f0 = np.nan_to_num(target) + return f0 + + def get_f0_official_crepe_computation( + self, + x, + f0_min, + f0_max, + model="full", + ): + batch_size = 512 + audio = torch.tensor(np.copy(x))[None].float() + f0, pd = torchcrepe.predict( + audio, + self.sr, + self.window, + f0_min, + f0_max, + model, + batch_size=batch_size, + device=self.device, + return_periodicity=True, + ) + pd = torchcrepe.filter.median(pd, 3) + f0 = torchcrepe.filter.mean(f0, 3) + f0[pd < 0.1] = 0 + f0 = f0[0].cpu().numpy() + return f0 + + def get_f0_hybrid_computation( + self, + methods_str, + x, + f0_min, + f0_max, + p_len, + hop_length, + ): + methods_str = re.search("hybrid\[(.+)\]", methods_str) + if methods_str: + methods = [method.strip() for method in methods_str.group(1).split("+")] + f0_computation_stack = [] + print(f"Calculating f0 pitch estimations for methods {str(methods)}") + x = x.astype(np.float32) + x /= np.quantile(np.abs(x), 0.999) + for method in methods: + f0 = None + if method == "crepe": + f0 = self.get_f0_crepe_computation( + x, f0_min, f0_max, p_len, int(hop_length) + ) + elif method == "rmvpe": + if hasattr(self, "model_rmvpe") == False: + from rvc.lib.rmvpe import RMVPE + + self.model_rmvpe = RMVPE( + "rmvpe.pt", is_half=self.is_half, device=self.device + ) + f0 = self.model_rmvpe.infer_from_audio(x, thred=0.03) + f0 = f0[1:] + elif method == "fcpe": + self.model_fcpe = FCPEF0Predictor( + "fcpe.pt", + f0_min=int(f0_min), + f0_max=int(f0_max), + dtype=torch.float32, + device=self.device, + sampling_rate=self.sr, + threshold=0.03, + ) + f0 = self.model_fcpe.compute_f0(x, p_len=p_len) + del self.model_fcpe + gc.collect() + f0_computation_stack.append(f0) + + print(f"Calculating hybrid median f0 from the stack of {str(methods)}") + f0_computation_stack = [fc for fc in f0_computation_stack if fc is not None] + f0_median_hybrid = None + if len(f0_computation_stack) == 1: + f0_median_hybrid = f0_computation_stack[0] + else: + f0_median_hybrid = np.nanmedian(f0_computation_stack, axis=0) + return f0_median_hybrid + + def get_f0( + self, + input_audio_path, + x, + p_len, + f0_up_key, + f0_method, + filter_radius, + hop_length, + f0autotune, + inp_f0=None, + ): + global input_audio_path2wav + time_step = self.window / self.sr * 1000 + f0_min = 50 + f0_max = 1100 + f0_mel_min = 1127 * np.log(1 + f0_min / 700) + f0_mel_max = 1127 * np.log(1 + f0_max / 700) + if f0_method == "pm": + f0 = ( + parselmouth.Sound(x, self.sr) + .to_pitch_ac( + time_step=time_step / 1000, + voicing_threshold=0.6, + pitch_floor=f0_min, + pitch_ceiling=f0_max, + ) + .selected_array["frequency"] + ) + pad_size = (p_len - len(f0) + 1) // 2 + if pad_size > 0 or p_len - len(f0) - pad_size > 0: + f0 = np.pad( + f0, [[pad_size, p_len - len(f0) - pad_size]], mode="constant" + ) + elif f0_method == "harvest": + input_audio_path2wav[input_audio_path] = x.astype(np.double) + f0 = cache_harvest_f0(input_audio_path, self.sr, f0_max, f0_min, 10) + if int(filter_radius) > 2: + f0 = signal.medfilt(f0, 3) + elif f0_method == "dio": + f0, t = pyworld.dio( + x.astype(np.double), + fs=self.sr, + f0_ceil=f0_max, + f0_floor=f0_min, + frame_period=10, + ) + f0 = pyworld.stonemask(x.astype(np.double), f0, t, self.sr) + f0 = signal.medfilt(f0, 3) + elif f0_method == "crepe": + f0 = self.get_f0_crepe_computation( + x, f0_min, f0_max, p_len, int(hop_length) + ) + elif f0_method == "crepe-tiny": + f0 = self.get_f0_crepe_computation( + x, f0_min, f0_max, p_len, int(hop_length), "tiny" + ) + elif f0_method == "rmvpe": + if hasattr(self, "model_rmvpe") == False: + from rvc.lib.rmvpe import RMVPE + + self.model_rmvpe = RMVPE( + "rmvpe.pt", is_half=self.is_half, device=self.device + ) + f0 = self.model_rmvpe.infer_from_audio(x, thred=0.03) + elif f0_method == "fcpe": + self.model_fcpe = FCPEF0Predictor( + "fcpe.pt", + f0_min=int(f0_min), + f0_max=int(f0_max), + dtype=torch.float32, + device=self.device, + sampling_rate=self.sr, + threshold=0.03, + ) + f0 = self.model_fcpe.compute_f0(x, p_len=p_len) + del self.model_fcpe + gc.collect() + elif "hybrid" in f0_method: + input_audio_path2wav[input_audio_path] = x.astype(np.double) + f0 = self.get_f0_hybrid_computation( + f0_method, + x, + f0_min, + f0_max, + p_len, + hop_length, + ) + + if f0autotune == "True": + f0 = self.autotune_f0(f0) + + f0 *= pow(2, f0_up_key / 12) + tf0 = self.sr // self.window + if inp_f0 is not None: + delta_t = np.round( + (inp_f0[:, 0].max() - inp_f0[:, 0].min()) * tf0 + 1 + ).astype("int16") + replace_f0 = np.interp( + list(range(delta_t)), inp_f0[:, 0] * 100, inp_f0[:, 1] + ) + shape = f0[self.x_pad * tf0 : self.x_pad * tf0 + len(replace_f0)].shape[0] + f0[self.x_pad * tf0 : self.x_pad * tf0 + len(replace_f0)] = replace_f0[ + :shape + ] + f0bak = f0.copy() + f0_mel = 1127 * np.log(1 + f0 / 700) + f0_mel[f0_mel > 0] = (f0_mel[f0_mel > 0] - f0_mel_min) * 254 / ( + f0_mel_max - f0_mel_min + ) + 1 + f0_mel[f0_mel <= 1] = 1 + f0_mel[f0_mel > 255] = 255 + f0_coarse = np.rint(f0_mel).astype(np.int) + + return f0_coarse, f0bak + + def vc( + self, + model, + net_g, + sid, + audio0, + pitch, + pitchf, + index, + big_npy, + index_rate, + version, + protect, + ): + feats = torch.from_numpy(audio0) + if self.is_half: + feats = feats.half() + else: + feats = feats.float() + if feats.dim() == 2: + feats = feats.mean(-1) + assert feats.dim() == 1, feats.dim() + feats = feats.view(1, -1) + padding_mask = torch.BoolTensor(feats.shape).to(self.device).fill_(False) + + inputs = { + "source": feats.to(self.device), + "padding_mask": padding_mask, + "output_layer": 9 if version == "v1" else 12, + } + t0 = ttime() + with torch.no_grad(): + logits = model.extract_features(**inputs) + feats = model.final_proj(logits[0]) if version == "v1" else logits[0] + if protect < 0.5 and pitch != None and pitchf != None: + feats0 = feats.clone() + if ( + isinstance(index, type(None)) == False + and isinstance(big_npy, type(None)) == False + and index_rate != 0 + ): + npy = feats[0].cpu().numpy() + if self.is_half: + npy = npy.astype("float32") + + score, ix = index.search(npy, k=8) + weight = np.square(1 / score) + weight /= weight.sum(axis=1, keepdims=True) + npy = np.sum(big_npy[ix] * np.expand_dims(weight, axis=2), axis=1) + + if self.is_half: + npy = npy.astype("float16") + feats = ( + torch.from_numpy(npy).unsqueeze(0).to(self.device) * index_rate + + (1 - index_rate) * feats + ) + + feats = F.interpolate(feats.permute(0, 2, 1), scale_factor=2).permute(0, 2, 1) + if protect < 0.5 and pitch != None and pitchf != None: + feats0 = F.interpolate(feats0.permute(0, 2, 1), scale_factor=2).permute( + 0, 2, 1 + ) + t1 = ttime() + p_len = audio0.shape[0] // self.window + if feats.shape[1] < p_len: + p_len = feats.shape[1] + if pitch != None and pitchf != None: + pitch = pitch[:, :p_len] + pitchf = pitchf[:, :p_len] + + if protect < 0.5 and pitch != None and pitchf != None: + pitchff = pitchf.clone() + pitchff[pitchf > 0] = 1 + pitchff[pitchf < 1] = protect + pitchff = pitchff.unsqueeze(-1) + feats = feats * pitchff + feats0 * (1 - pitchff) + feats = feats.to(feats0.dtype) + p_len = torch.tensor([p_len], device=self.device).long() + with torch.no_grad(): + if pitch != None and pitchf != None: + audio1 = ( + (net_g.infer(feats, p_len, pitch, pitchf, sid)[0][0, 0]) + .data.cpu() + .float() + .numpy() + ) + else: + audio1 = ( + (net_g.infer(feats, p_len, sid)[0][0, 0]).data.cpu().float().numpy() + ) + del feats, p_len, padding_mask + if torch.cuda.is_available(): + torch.cuda.empty_cache() + t2 = ttime() + return audio1 + + def pipeline( + self, + model, + net_g, + sid, + audio, + input_audio_path, + f0_up_key, + f0_method, + file_index, + index_rate, + if_f0, + filter_radius, + tgt_sr, + resample_sr, + rms_mix_rate, + version, + protect, + hop_length, + f0autotune, + f0_file=None, + ): + if file_index != "" and os.path.exists(file_index) == True and index_rate != 0: + try: + index = faiss.read_index(file_index) + big_npy = index.reconstruct_n(0, index.ntotal) + except Exception as error: + print(error) + index = big_npy = None + else: + index = big_npy = None + audio = signal.filtfilt(bh, ah, audio) + audio_pad = np.pad(audio, (self.window // 2, self.window // 2), mode="reflect") + opt_ts = [] + if audio_pad.shape[0] > self.t_max: + audio_sum = np.zeros_like(audio) + for i in range(self.window): + audio_sum += audio_pad[i : i - self.window] + for t in range(self.t_center, audio.shape[0], self.t_center): + opt_ts.append( + t + - self.t_query + + np.where( + np.abs(audio_sum[t - self.t_query : t + self.t_query]) + == np.abs(audio_sum[t - self.t_query : t + self.t_query]).min() + )[0][0] + ) + s = 0 + audio_opt = [] + t = None + t1 = ttime() + audio_pad = np.pad(audio, (self.t_pad, self.t_pad), mode="reflect") + p_len = audio_pad.shape[0] // self.window + inp_f0 = None + if hasattr(f0_file, "name") == True: + try: + with open(f0_file.name, "r") as f: + lines = f.read().strip("\n").split("\n") + inp_f0 = [] + for line in lines: + inp_f0.append([float(i) for i in line.split(",")]) + inp_f0 = np.array(inp_f0, dtype="float32") + except Exception as error: + print(error) + sid = torch.tensor(sid, device=self.device).unsqueeze(0).long() + pitch, pitchf = None, None + if if_f0 == 1: + pitch, pitchf = self.get_f0( + input_audio_path, + audio_pad, + p_len, + f0_up_key, + f0_method, + filter_radius, + hop_length, + f0autotune, + inp_f0, + ) + pitch = pitch[:p_len] + pitchf = pitchf[:p_len] + if self.device == "mps": + pitchf = pitchf.astype(np.float32) + pitch = torch.tensor(pitch, device=self.device).unsqueeze(0).long() + pitchf = torch.tensor(pitchf, device=self.device).unsqueeze(0).float() + t2 = ttime() + for t in opt_ts: + t = t // self.window * self.window + if if_f0 == 1: + audio_opt.append( + self.vc( + model, + net_g, + sid, + audio_pad[s : t + self.t_pad2 + self.window], + pitch[:, s // self.window : (t + self.t_pad2) // self.window], + pitchf[:, s // self.window : (t + self.t_pad2) // self.window], + index, + big_npy, + index_rate, + version, + protect, + )[self.t_pad_tgt : -self.t_pad_tgt] + ) + else: + audio_opt.append( + self.vc( + model, + net_g, + sid, + audio_pad[s : t + self.t_pad2 + self.window], + None, + None, + index, + big_npy, + index_rate, + version, + protect, + )[self.t_pad_tgt : -self.t_pad_tgt] + ) + s = t + if if_f0 == 1: + audio_opt.append( + self.vc( + model, + net_g, + sid, + audio_pad[t:], + pitch[:, t // self.window :] if t is not None else pitch, + pitchf[:, t // self.window :] if t is not None else pitchf, + index, + big_npy, + index_rate, + version, + protect, + )[self.t_pad_tgt : -self.t_pad_tgt] + ) + else: + audio_opt.append( + self.vc( + model, + net_g, + sid, + audio_pad[t:], + None, + None, + index, + big_npy, + index_rate, + version, + protect, + )[self.t_pad_tgt : -self.t_pad_tgt] + ) + audio_opt = np.concatenate(audio_opt) + if rms_mix_rate != 1: + audio_opt = change_rms(audio, 16000, audio_opt, tgt_sr, rms_mix_rate) + if resample_sr >= 16000 and tgt_sr != resample_sr: + audio_opt = librosa.resample( + audio_opt, orig_sr=tgt_sr, target_sr=resample_sr + ) + audio_max = np.abs(audio_opt).max() / 0.99 + max_int16 = 32768 + if audio_max > 1: + max_int16 /= audio_max + audio_opt = (audio_opt * max_int16).astype(np.int16) + del pitch, pitchf, sid + if torch.cuda.is_available(): + torch.cuda.empty_cache() + return audio_opt diff --git a/rvc/infer/vc_infer_pipeline.py b/rvc/infer/vc_infer_pipeline.py new file mode 100644 index 0000000000000000000000000000000000000000..e293cae07404edfb9bc379802e8d750c7a16ebfa --- /dev/null +++ b/rvc/infer/vc_infer_pipeline.py @@ -0,0 +1,494 @@ +import numpy as np, parselmouth, torch, pdb, sys, os +from time import time as ttime +import torch.nn.functional as F +import torchcrepe +from torch import Tensor +import scipy.signal as signal +import pyworld, os, faiss, librosa, torchcrepe +from scipy import signal +from functools import lru_cache + +now_dir = os.getcwd() +sys.path.append(now_dir) + +bh, ah = signal.butter(N=5, Wn=48, btype="high", fs=16000) + +input_audio_path2wav = {} + + +@lru_cache +def cache_harvest_f0(input_audio_path, fs, f0max, f0min, frame_period): + audio = input_audio_path2wav[input_audio_path] + f0, t = pyworld.harvest( + audio, + fs=fs, + f0_ceil=f0max, + f0_floor=f0min, + frame_period=frame_period, + ) + f0 = pyworld.stonemask(audio, f0, t, fs) + return f0 + + +def change_rms(data1, sr1, data2, sr2, rate): + rms1 = librosa.feature.rms(y=data1, frame_length=sr1 // 2 * 2, hop_length=sr1 // 2) + rms2 = librosa.feature.rms(y=data2, frame_length=sr2 // 2 * 2, hop_length=sr2 // 2) + rms1 = torch.from_numpy(rms1) + rms1 = F.interpolate( + rms1.unsqueeze(0), size=data2.shape[0], mode="linear" + ).squeeze() + rms2 = torch.from_numpy(rms2) + rms2 = F.interpolate( + rms2.unsqueeze(0), size=data2.shape[0], mode="linear" + ).squeeze() + rms2 = torch.max(rms2, torch.zeros_like(rms2) + 1e-6) + data2 *= ( + torch.pow(rms1, torch.tensor(1 - rate)) + * torch.pow(rms2, torch.tensor(rate - 1)) + ).numpy() + return data2 + + +class VC(object): + def __init__(self, tgt_sr, config): + self.x_pad, self.x_query, self.x_center, self.x_max, self.is_half = ( + config.x_pad, + config.x_query, + config.x_center, + config.x_max, + config.is_half, + ) + self.sr = 16000 + self.window = 160 + self.t_pad = self.sr * self.x_pad + self.t_pad_tgt = tgt_sr * self.x_pad + self.t_pad2 = self.t_pad * 2 + self.t_query = self.sr * self.x_query + self.t_center = self.sr * self.x_center + self.t_max = self.sr * self.x_max + self.device = config.device + + def get_optimal_torch_device(self, index: int = 0) -> torch.device: + if torch.cuda.is_available(): + return torch.device(f"cuda:{index % torch.cuda.device_count()}") + elif torch.backends.mps.is_available(): + return torch.device("mps") + return torch.device("cpu") + + def get_f0_crepe_computation( + self, + x, + f0_min, + f0_max, + p_len, + hop_length=120, + model="full", + ): + x = x.astype(np.float32) + x /= np.quantile(np.abs(x), 0.999) + torch_device = self.get_optimal_torch_device() + audio = torch.from_numpy(x).to(torch_device, copy=True) + audio = torch.unsqueeze(audio, dim=0) + if audio.ndim == 2 and audio.shape[0] > 1: + audio = torch.mean(audio, dim=0, keepdim=True).detach() + audio = audio.detach() + print("Initiating prediction with a hop_length of: " + str(hop_length)) + pitch: Tensor = torchcrepe.predict( + audio, + self.sr, + hop_length, + f0_min, + f0_max, + model, + batch_size=hop_length * 2, + device=torch_device, + pad=True, + ) + p_len = p_len or x.shape[0] // hop_length + source = np.array(pitch.squeeze(0).cpu().float().numpy()) + source[source < 0.001] = np.nan + target = np.interp( + np.arange(0, len(source) * p_len, len(source)) / p_len, + np.arange(0, len(source)), + source, + ) + f0 = np.nan_to_num(target) + return f0 + + def get_f0_official_crepe_computation( + self, + x, + f0_min, + f0_max, + model="full", + ): + batch_size = 512 + audio = torch.tensor(np.copy(x))[None].float() + f0, pd = torchcrepe.predict( + audio, + self.sr, + self.window, + f0_min, + f0_max, + model, + batch_size=batch_size, + device=self.device, + return_periodicity=True, + ) + pd = torchcrepe.filter.median(pd, 3) + f0 = torchcrepe.filter.mean(f0, 3) + f0[pd < 0.1] = 0 + f0 = f0[0].cpu().numpy() + return f0 + + def get_f0( + self, + input_audio_path, + x, + p_len, + f0_up_key, + f0_method, + filter_radius, + hop_length, + inp_f0=None, + ): + global input_audio_path2wav + time_step = self.window / self.sr * 1000 + f0_min = 50 + f0_max = 1100 + f0_mel_min = 1127 * np.log(1 + f0_min / 700) + f0_mel_max = 1127 * np.log(1 + f0_max / 700) + if f0_method == "pm": + f0 = ( + parselmouth.Sound(x, self.sr) + .to_pitch_ac( + time_step=time_step / 1000, + voicing_threshold=0.6, + pitch_floor=f0_min, + pitch_ceiling=f0_max, + ) + .selected_array["frequency"] + ) + pad_size = (p_len - len(f0) + 1) // 2 + if pad_size > 0 or p_len - len(f0) - pad_size > 0: + f0 = np.pad( + f0, [[pad_size, p_len - len(f0) - pad_size]], mode="constant" + ) + elif f0_method == "harvest": + input_audio_path2wav[input_audio_path] = x.astype(np.double) + f0 = cache_harvest_f0(input_audio_path, self.sr, f0_max, f0_min, 10) + if int(filter_radius) > 2: + f0 = signal.medfilt(f0, 3) + elif f0_method == "dio": + f0, t = pyworld.dio( + x.astype(np.double), + fs=self.sr, + f0_ceil=f0_max, + f0_floor=f0_min, + frame_period=10, + ) + f0 = pyworld.stonemask(x.astype(np.double), f0, t, self.sr) + f0 = signal.medfilt(f0, 3) + elif f0_method == "crepe": + f0 = self.get_f0_crepe_computation( + x, f0_min, f0_max, p_len, int(hop_length) + ) + elif f0_method == "crepe-tiny": + f0 = self.get_f0_crepe_computation( + x, f0_min, f0_max, p_len, int(hop_length), "tiny" + ) + elif f0_method == "rmvpe": + if hasattr(self, "model_rmvpe") == False: + from rvc.lib.rmvpe import RMVPE + + self.model_rmvpe = RMVPE( + "rmvpe.pt", is_half=self.is_half, device=self.device + ) + f0 = self.model_rmvpe.infer_from_audio(x, thred=0.03) + + f0 *= pow(2, f0_up_key / 12) + tf0 = self.sr // self.window + if inp_f0 is not None: + delta_t = np.round( + (inp_f0[:, 0].max() - inp_f0[:, 0].min()) * tf0 + 1 + ).astype("int16") + replace_f0 = np.interp( + list(range(delta_t)), inp_f0[:, 0] * 100, inp_f0[:, 1] + ) + shape = f0[self.x_pad * tf0 : self.x_pad * tf0 + len(replace_f0)].shape[0] + f0[self.x_pad * tf0 : self.x_pad * tf0 + len(replace_f0)] = replace_f0[ + :shape + ] + f0bak = f0.copy() + f0_mel = 1127 * np.log(1 + f0 / 700) + f0_mel[f0_mel > 0] = (f0_mel[f0_mel > 0] - f0_mel_min) * 254 / ( + f0_mel_max - f0_mel_min + ) + 1 + f0_mel[f0_mel <= 1] = 1 + f0_mel[f0_mel > 255] = 255 + f0_coarse = np.rint(f0_mel).astype(np.int) + + return f0_coarse, f0bak + + def vc( + self, + model, + net_g, + sid, + audio0, + pitch, + pitchf, + index, + big_npy, + index_rate, + version, + protect, + ): + feats = torch.from_numpy(audio0) + if self.is_half: + feats = feats.half() + else: + feats = feats.float() + if feats.dim() == 2: + feats = feats.mean(-1) + assert feats.dim() == 1, feats.dim() + feats = feats.view(1, -1) + padding_mask = torch.BoolTensor(feats.shape).to(self.device).fill_(False) + + inputs = { + "source": feats.to(self.device), + "padding_mask": padding_mask, + "output_layer": 9 if version == "v1" else 12, + } + t0 = ttime() + with torch.no_grad(): + logits = model.extract_features(**inputs) + feats = model.final_proj(logits[0]) if version == "v1" else logits[0] + if protect < 0.5 and pitch != None and pitchf != None: + feats0 = feats.clone() + if ( + isinstance(index, type(None)) == False + and isinstance(big_npy, type(None)) == False + and index_rate != 0 + ): + npy = feats[0].cpu().numpy() + if self.is_half: + npy = npy.astype("float32") + + score, ix = index.search(npy, k=8) + weight = np.square(1 / score) + weight /= weight.sum(axis=1, keepdims=True) + npy = np.sum(big_npy[ix] * np.expand_dims(weight, axis=2), axis=1) + + if self.is_half: + npy = npy.astype("float16") + feats = ( + torch.from_numpy(npy).unsqueeze(0).to(self.device) * index_rate + + (1 - index_rate) * feats + ) + + feats = F.interpolate(feats.permute(0, 2, 1), scale_factor=2).permute(0, 2, 1) + if protect < 0.5 and pitch != None and pitchf != None: + feats0 = F.interpolate(feats0.permute(0, 2, 1), scale_factor=2).permute( + 0, 2, 1 + ) + t1 = ttime() + p_len = audio0.shape[0] // self.window + if feats.shape[1] < p_len: + p_len = feats.shape[1] + if pitch != None and pitchf != None: + pitch = pitch[:, :p_len] + pitchf = pitchf[:, :p_len] + + if protect < 0.5 and pitch != None and pitchf != None: + pitchff = pitchf.clone() + pitchff[pitchf > 0] = 1 + pitchff[pitchf < 1] = protect + pitchff = pitchff.unsqueeze(-1) + feats = feats * pitchff + feats0 * (1 - pitchff) + feats = feats.to(feats0.dtype) + p_len = torch.tensor([p_len], device=self.device).long() + with torch.no_grad(): + if pitch != None and pitchf != None: + audio1 = ( + (net_g.infer(feats, p_len, pitch, pitchf, sid)[0][0, 0]) + .data.cpu() + .float() + .numpy() + ) + else: + audio1 = ( + (net_g.infer(feats, p_len, sid)[0][0, 0]).data.cpu().float().numpy() + ) + del feats, p_len, padding_mask + if torch.cuda.is_available(): + torch.cuda.empty_cache() + t2 = ttime() + return audio1 + + def pipeline( + self, + model, + net_g, + sid, + audio, + input_audio_path, + f0_up_key, + f0_method, + file_index, + index_rate, + if_f0, + filter_radius, + tgt_sr, + resample_sr, + rms_mix_rate, + version, + protect, + hop_length, + f0_file=None, + ): + if file_index != "" and os.path.exists(file_index) == True and index_rate != 0: + try: + index = faiss.read_index(file_index) + big_npy = index.reconstruct_n(0, index.ntotal) + except Exception as error: + print(error) + index = big_npy = None + else: + index = big_npy = None + audio = signal.filtfilt(bh, ah, audio) + audio_pad = np.pad(audio, (self.window // 2, self.window // 2), mode="reflect") + opt_ts = [] + if audio_pad.shape[0] > self.t_max: + audio_sum = np.zeros_like(audio) + for i in range(self.window): + audio_sum += audio_pad[i : i - self.window] + for t in range(self.t_center, audio.shape[0], self.t_center): + opt_ts.append( + t + - self.t_query + + np.where( + np.abs(audio_sum[t - self.t_query : t + self.t_query]) + == np.abs(audio_sum[t - self.t_query : t + self.t_query]).min() + )[0][0] + ) + s = 0 + audio_opt = [] + t = None + t1 = ttime() + audio_pad = np.pad(audio, (self.t_pad, self.t_pad), mode="reflect") + p_len = audio_pad.shape[0] // self.window + inp_f0 = None + if hasattr(f0_file, "name") == True: + try: + with open(f0_file.name, "r") as f: + lines = f.read().strip("\n").split("\n") + inp_f0 = [] + for line in lines: + inp_f0.append([float(i) for i in line.split(",")]) + inp_f0 = np.array(inp_f0, dtype="float32") + except Exception as error: + print(error) + sid = torch.tensor(sid, device=self.device).unsqueeze(0).long() + pitch, pitchf = None, None + if if_f0 == 1: + pitch, pitchf = self.get_f0( + input_audio_path, + audio_pad, + p_len, + f0_up_key, + f0_method, + filter_radius, + hop_length, + inp_f0, + ) + pitch = pitch[:p_len] + pitchf = pitchf[:p_len] + if self.device == "mps": + pitchf = pitchf.astype(np.float32) + pitch = torch.tensor(pitch, device=self.device).unsqueeze(0).long() + pitchf = torch.tensor(pitchf, device=self.device).unsqueeze(0).float() + t2 = ttime() + for t in opt_ts: + t = t // self.window * self.window + if if_f0 == 1: + audio_opt.append( + self.vc( + model, + net_g, + sid, + audio_pad[s : t + self.t_pad2 + self.window], + pitch[:, s // self.window : (t + self.t_pad2) // self.window], + pitchf[:, s // self.window : (t + self.t_pad2) // self.window], + index, + big_npy, + index_rate, + version, + protect, + )[self.t_pad_tgt : -self.t_pad_tgt] + ) + else: + audio_opt.append( + self.vc( + model, + net_g, + sid, + audio_pad[s : t + self.t_pad2 + self.window], + None, + None, + index, + big_npy, + index_rate, + version, + protect, + )[self.t_pad_tgt : -self.t_pad_tgt] + ) + s = t + if if_f0 == 1: + audio_opt.append( + self.vc( + model, + net_g, + sid, + audio_pad[t:], + pitch[:, t // self.window :] if t is not None else pitch, + pitchf[:, t // self.window :] if t is not None else pitchf, + index, + big_npy, + index_rate, + version, + protect, + )[self.t_pad_tgt : -self.t_pad_tgt] + ) + else: + audio_opt.append( + self.vc( + model, + net_g, + sid, + audio_pad[t:], + None, + None, + index, + big_npy, + index_rate, + version, + protect, + )[self.t_pad_tgt : -self.t_pad_tgt] + ) + audio_opt = np.concatenate(audio_opt) + if rms_mix_rate != 1: + audio_opt = change_rms(audio, 16000, audio_opt, tgt_sr, rms_mix_rate) + if resample_sr >= 16000 and tgt_sr != resample_sr: + audio_opt = librosa.resample( + audio_opt, orig_sr=tgt_sr, target_sr=resample_sr + ) + audio_max = np.abs(audio_opt).max() / 0.99 + max_int16 = 32768 + if audio_max > 1: + max_int16 /= audio_max + audio_opt = (audio_opt * max_int16).astype(np.int16) + del pitch, pitchf, sid + if torch.cuda.is_available(): + torch.cuda.empty_cache() + return audio_opt diff --git a/csvdb/formanting.csv b/rvc/pretraineds/.gitignore similarity index 100% rename from csvdb/formanting.csv rename to rvc/pretraineds/.gitignore diff --git a/csvdb/stop.csv b/rvc/pretraineds/pretrained_v1/.gitignore similarity index 100% rename from csvdb/stop.csv rename to rvc/pretraineds/pretrained_v1/.gitignore diff --git a/formantshiftcfg/Put your formantshift presets here as a txt file b/rvc/pretraineds/pretrained_v2/.gitignore similarity index 100% rename from formantshiftcfg/Put your formantshift presets here as a txt file rename to rvc/pretraineds/pretrained_v2/.gitignore diff --git a/train/data_utils.py b/rvc/train/data_utils.py similarity index 79% rename from train/data_utils.py rename to rvc/train/data_utils.py index 71c0eff1815469a52399dc90a093a2f8a29223eb..e7dc73954556ddb384d333134f68f6aeadd94748 100644 --- a/train/data_utils.py +++ b/rvc/train/data_utils.py @@ -1,512 +1,452 @@ -import os, traceback -import numpy as np -import torch -import torch.utils.data - -from mel_processing import spectrogram_torch -from utils import load_wav_to_torch, load_filepaths_and_text - - -class TextAudioLoaderMultiNSFsid(torch.utils.data.Dataset): - """ - 1) loads audio, text pairs - 2) normalizes text and converts them to sequences of integers - 3) computes spectrograms from audio files. - """ - - def __init__(self, audiopaths_and_text, hparams): - self.audiopaths_and_text = load_filepaths_and_text(audiopaths_and_text) - self.max_wav_value = hparams.max_wav_value - self.sampling_rate = hparams.sampling_rate - self.filter_length = hparams.filter_length - self.hop_length = hparams.hop_length - self.win_length = hparams.win_length - self.sampling_rate = hparams.sampling_rate - self.min_text_len = getattr(hparams, "min_text_len", 1) - self.max_text_len = getattr(hparams, "max_text_len", 5000) - self._filter() - - def _filter(self): - """ - Filter text & store spec lengths - """ - # Store spectrogram lengths for Bucketing - # wav_length ~= file_size / (wav_channels * Bytes per dim) = file_size / (1 * 2) - # spec_length = wav_length // hop_length - audiopaths_and_text_new = [] - lengths = [] - for audiopath, text, pitch, pitchf, dv in self.audiopaths_and_text: - if self.min_text_len <= len(text) and len(text) <= self.max_text_len: - audiopaths_and_text_new.append([audiopath, text, pitch, pitchf, dv]) - lengths.append(os.path.getsize(audiopath) // (3 * self.hop_length)) - self.audiopaths_and_text = audiopaths_and_text_new - self.lengths = lengths - - def get_sid(self, sid): - sid = torch.LongTensor([int(sid)]) - return sid - - def get_audio_text_pair(self, audiopath_and_text): - # separate filename and text - file = audiopath_and_text[0] - phone = audiopath_and_text[1] - pitch = audiopath_and_text[2] - pitchf = audiopath_and_text[3] - dv = audiopath_and_text[4] - - phone, pitch, pitchf = self.get_labels(phone, pitch, pitchf) - spec, wav = self.get_audio(file) - dv = self.get_sid(dv) - - len_phone = phone.size()[0] - len_spec = spec.size()[-1] - # print(123,phone.shape,pitch.shape,spec.shape) - if len_phone != len_spec: - len_min = min(len_phone, len_spec) - # amor - len_wav = len_min * self.hop_length - - spec = spec[:, :len_min] - wav = wav[:, :len_wav] - - phone = phone[:len_min, :] - pitch = pitch[:len_min] - pitchf = pitchf[:len_min] - - return (spec, wav, phone, pitch, pitchf, dv) - - def get_labels(self, phone, pitch, pitchf): - phone = np.load(phone) - phone = np.repeat(phone, 2, axis=0) - pitch = np.load(pitch) - pitchf = np.load(pitchf) - n_num = min(phone.shape[0], 900) # DistributedBucketSampler - # print(234,phone.shape,pitch.shape) - phone = phone[:n_num, :] - pitch = pitch[:n_num] - pitchf = pitchf[:n_num] - phone = torch.FloatTensor(phone) - pitch = torch.LongTensor(pitch) - pitchf = torch.FloatTensor(pitchf) - return phone, pitch, pitchf - - def get_audio(self, filename): - audio, sampling_rate = load_wav_to_torch(filename) - if sampling_rate != self.sampling_rate: - raise ValueError( - "{} SR doesn't match target {} SR".format( - sampling_rate, self.sampling_rate - ) - ) - audio_norm = audio - # audio_norm = audio / self.max_wav_value - # audio_norm = audio / np.abs(audio).max() - - audio_norm = audio_norm.unsqueeze(0) - spec_filename = filename.replace(".wav", ".spec.pt") - if os.path.exists(spec_filename): - try: - spec = torch.load(spec_filename) - except: - print(spec_filename, traceback.format_exc()) - spec = spectrogram_torch( - audio_norm, - self.filter_length, - self.sampling_rate, - self.hop_length, - self.win_length, - center=False, - ) - spec = torch.squeeze(spec, 0) - torch.save(spec, spec_filename, _use_new_zipfile_serialization=False) - else: - spec = spectrogram_torch( - audio_norm, - self.filter_length, - self.sampling_rate, - self.hop_length, - self.win_length, - center=False, - ) - spec = torch.squeeze(spec, 0) - torch.save(spec, spec_filename, _use_new_zipfile_serialization=False) - return spec, audio_norm - - def __getitem__(self, index): - return self.get_audio_text_pair(self.audiopaths_and_text[index]) - - def __len__(self): - return len(self.audiopaths_and_text) - - -class TextAudioCollateMultiNSFsid: - """Zero-pads model inputs and targets""" - - def __init__(self, return_ids=False): - self.return_ids = return_ids - - def __call__(self, batch): - """Collate's training batch from normalized text and aduio - PARAMS - ------ - batch: [text_normalized, spec_normalized, wav_normalized] - """ - # Right zero-pad all one-hot text sequences to max input length - _, ids_sorted_decreasing = torch.sort( - torch.LongTensor([x[0].size(1) for x in batch]), dim=0, descending=True - ) - - max_spec_len = max([x[0].size(1) for x in batch]) - max_wave_len = max([x[1].size(1) for x in batch]) - spec_lengths = torch.LongTensor(len(batch)) - wave_lengths = torch.LongTensor(len(batch)) - spec_padded = torch.FloatTensor(len(batch), batch[0][0].size(0), max_spec_len) - wave_padded = torch.FloatTensor(len(batch), 1, max_wave_len) - spec_padded.zero_() - wave_padded.zero_() - - max_phone_len = max([x[2].size(0) for x in batch]) - phone_lengths = torch.LongTensor(len(batch)) - phone_padded = torch.FloatTensor( - len(batch), max_phone_len, batch[0][2].shape[1] - ) # (spec, wav, phone, pitch) - pitch_padded = torch.LongTensor(len(batch), max_phone_len) - pitchf_padded = torch.FloatTensor(len(batch), max_phone_len) - phone_padded.zero_() - pitch_padded.zero_() - pitchf_padded.zero_() - # dv = torch.FloatTensor(len(batch), 256)#gin=256 - sid = torch.LongTensor(len(batch)) - - for i in range(len(ids_sorted_decreasing)): - row = batch[ids_sorted_decreasing[i]] - - spec = row[0] - spec_padded[i, :, : spec.size(1)] = spec - spec_lengths[i] = spec.size(1) - - wave = row[1] - wave_padded[i, :, : wave.size(1)] = wave - wave_lengths[i] = wave.size(1) - - phone = row[2] - phone_padded[i, : phone.size(0), :] = phone - phone_lengths[i] = phone.size(0) - - pitch = row[3] - pitch_padded[i, : pitch.size(0)] = pitch - pitchf = row[4] - pitchf_padded[i, : pitchf.size(0)] = pitchf - - # dv[i] = row[5] - sid[i] = row[5] - - return ( - phone_padded, - phone_lengths, - pitch_padded, - pitchf_padded, - spec_padded, - spec_lengths, - wave_padded, - wave_lengths, - # dv - sid, - ) - - -class TextAudioLoader(torch.utils.data.Dataset): - """ - 1) loads audio, text pairs - 2) normalizes text and converts them to sequences of integers - 3) computes spectrograms from audio files. - """ - - def __init__(self, audiopaths_and_text, hparams): - self.audiopaths_and_text = load_filepaths_and_text(audiopaths_and_text) - self.max_wav_value = hparams.max_wav_value - self.sampling_rate = hparams.sampling_rate - self.filter_length = hparams.filter_length - self.hop_length = hparams.hop_length - self.win_length = hparams.win_length - self.sampling_rate = hparams.sampling_rate - self.min_text_len = getattr(hparams, "min_text_len", 1) - self.max_text_len = getattr(hparams, "max_text_len", 5000) - self._filter() - - def _filter(self): - """ - Filter text & store spec lengths - """ - # Store spectrogram lengths for Bucketing - # wav_length ~= file_size / (wav_channels * Bytes per dim) = file_size / (1 * 2) - # spec_length = wav_length // hop_length - audiopaths_and_text_new = [] - lengths = [] - for audiopath, text, dv in self.audiopaths_and_text: - if self.min_text_len <= len(text) and len(text) <= self.max_text_len: - audiopaths_and_text_new.append([audiopath, text, dv]) - lengths.append(os.path.getsize(audiopath) // (3 * self.hop_length)) - self.audiopaths_and_text = audiopaths_and_text_new - self.lengths = lengths - - def get_sid(self, sid): - sid = torch.LongTensor([int(sid)]) - return sid - - def get_audio_text_pair(self, audiopath_and_text): - # separate filename and text - file = audiopath_and_text[0] - phone = audiopath_and_text[1] - dv = audiopath_and_text[2] - - phone = self.get_labels(phone) - spec, wav = self.get_audio(file) - dv = self.get_sid(dv) - - len_phone = phone.size()[0] - len_spec = spec.size()[-1] - if len_phone != len_spec: - len_min = min(len_phone, len_spec) - len_wav = len_min * self.hop_length - spec = spec[:, :len_min] - wav = wav[:, :len_wav] - phone = phone[:len_min, :] - return (spec, wav, phone, dv) - - def get_labels(self, phone): - phone = np.load(phone) - phone = np.repeat(phone, 2, axis=0) - n_num = min(phone.shape[0], 900) # DistributedBucketSampler - phone = phone[:n_num, :] - phone = torch.FloatTensor(phone) - return phone - - def get_audio(self, filename): - audio, sampling_rate = load_wav_to_torch(filename) - if sampling_rate != self.sampling_rate: - raise ValueError( - "{} SR doesn't match target {} SR".format( - sampling_rate, self.sampling_rate - ) - ) - audio_norm = audio - # audio_norm = audio / self.max_wav_value - # audio_norm = audio / np.abs(audio).max() - - audio_norm = audio_norm.unsqueeze(0) - spec_filename = filename.replace(".wav", ".spec.pt") - if os.path.exists(spec_filename): - try: - spec = torch.load(spec_filename) - except: - print(spec_filename, traceback.format_exc()) - spec = spectrogram_torch( - audio_norm, - self.filter_length, - self.sampling_rate, - self.hop_length, - self.win_length, - center=False, - ) - spec = torch.squeeze(spec, 0) - torch.save(spec, spec_filename, _use_new_zipfile_serialization=False) - else: - spec = spectrogram_torch( - audio_norm, - self.filter_length, - self.sampling_rate, - self.hop_length, - self.win_length, - center=False, - ) - spec = torch.squeeze(spec, 0) - torch.save(spec, spec_filename, _use_new_zipfile_serialization=False) - return spec, audio_norm - - def __getitem__(self, index): - return self.get_audio_text_pair(self.audiopaths_and_text[index]) - - def __len__(self): - return len(self.audiopaths_and_text) - - -class TextAudioCollate: - """Zero-pads model inputs and targets""" - - def __init__(self, return_ids=False): - self.return_ids = return_ids - - def __call__(self, batch): - """Collate's training batch from normalized text and aduio - PARAMS - ------ - batch: [text_normalized, spec_normalized, wav_normalized] - """ - # Right zero-pad all one-hot text sequences to max input length - _, ids_sorted_decreasing = torch.sort( - torch.LongTensor([x[0].size(1) for x in batch]), dim=0, descending=True - ) - - max_spec_len = max([x[0].size(1) for x in batch]) - max_wave_len = max([x[1].size(1) for x in batch]) - spec_lengths = torch.LongTensor(len(batch)) - wave_lengths = torch.LongTensor(len(batch)) - spec_padded = torch.FloatTensor(len(batch), batch[0][0].size(0), max_spec_len) - wave_padded = torch.FloatTensor(len(batch), 1, max_wave_len) - spec_padded.zero_() - wave_padded.zero_() - - max_phone_len = max([x[2].size(0) for x in batch]) - phone_lengths = torch.LongTensor(len(batch)) - phone_padded = torch.FloatTensor( - len(batch), max_phone_len, batch[0][2].shape[1] - ) - phone_padded.zero_() - sid = torch.LongTensor(len(batch)) - - for i in range(len(ids_sorted_decreasing)): - row = batch[ids_sorted_decreasing[i]] - - spec = row[0] - spec_padded[i, :, : spec.size(1)] = spec - spec_lengths[i] = spec.size(1) - - wave = row[1] - wave_padded[i, :, : wave.size(1)] = wave - wave_lengths[i] = wave.size(1) - - phone = row[2] - phone_padded[i, : phone.size(0), :] = phone - phone_lengths[i] = phone.size(0) - - sid[i] = row[3] - - return ( - phone_padded, - phone_lengths, - spec_padded, - spec_lengths, - wave_padded, - wave_lengths, - sid, - ) - - -class DistributedBucketSampler(torch.utils.data.distributed.DistributedSampler): - """ - Maintain similar input lengths in a batch. - Length groups are specified by boundaries. - Ex) boundaries = [b1, b2, b3] -> any batch is included either {x | b1 < length(x) <=b2} or {x | b2 < length(x) <= b3}. - - It removes samples which are not included in the boundaries. - Ex) boundaries = [b1, b2, b3] -> any x s.t. length(x) <= b1 or length(x) > b3 are discarded. - """ - - def __init__( - self, - dataset, - batch_size, - boundaries, - num_replicas=None, - rank=None, - shuffle=True, - ): - super().__init__(dataset, num_replicas=num_replicas, rank=rank, shuffle=shuffle) - self.lengths = dataset.lengths - self.batch_size = batch_size - self.boundaries = boundaries - - self.buckets, self.num_samples_per_bucket = self._create_buckets() - self.total_size = sum(self.num_samples_per_bucket) - self.num_samples = self.total_size // self.num_replicas - - def _create_buckets(self): - buckets = [[] for _ in range(len(self.boundaries) - 1)] - for i in range(len(self.lengths)): - length = self.lengths[i] - idx_bucket = self._bisect(length) - if idx_bucket != -1: - buckets[idx_bucket].append(i) - - for i in range(len(buckets) - 1, -1, -1): # - if len(buckets[i]) == 0: - buckets.pop(i) - self.boundaries.pop(i + 1) - - num_samples_per_bucket = [] - for i in range(len(buckets)): - len_bucket = len(buckets[i]) - total_batch_size = self.num_replicas * self.batch_size - rem = ( - total_batch_size - (len_bucket % total_batch_size) - ) % total_batch_size - num_samples_per_bucket.append(len_bucket + rem) - return buckets, num_samples_per_bucket - - def __iter__(self): - # deterministically shuffle based on epoch - g = torch.Generator() - g.manual_seed(self.epoch) - - indices = [] - if self.shuffle: - for bucket in self.buckets: - indices.append(torch.randperm(len(bucket), generator=g).tolist()) - else: - for bucket in self.buckets: - indices.append(list(range(len(bucket)))) - - batches = [] - for i in range(len(self.buckets)): - bucket = self.buckets[i] - len_bucket = len(bucket) - ids_bucket = indices[i] - num_samples_bucket = self.num_samples_per_bucket[i] - - # add extra samples to make it evenly divisible - rem = num_samples_bucket - len_bucket - ids_bucket = ( - ids_bucket - + ids_bucket * (rem // len_bucket) - + ids_bucket[: (rem % len_bucket)] - ) - - # subsample - ids_bucket = ids_bucket[self.rank :: self.num_replicas] - - # batching - for j in range(len(ids_bucket) // self.batch_size): - batch = [ - bucket[idx] - for idx in ids_bucket[ - j * self.batch_size : (j + 1) * self.batch_size - ] - ] - batches.append(batch) - - if self.shuffle: - batch_ids = torch.randperm(len(batches), generator=g).tolist() - batches = [batches[i] for i in batch_ids] - self.batches = batches - - assert len(self.batches) * self.batch_size == self.num_samples - return iter(self.batches) - - def _bisect(self, x, lo=0, hi=None): - if hi is None: - hi = len(self.boundaries) - 1 - - if hi > lo: - mid = (hi + lo) // 2 - if self.boundaries[mid] < x and x <= self.boundaries[mid + 1]: - return mid - elif x <= self.boundaries[mid]: - return self._bisect(x, lo, mid) - else: - return self._bisect(x, mid + 1, hi) - else: - return -1 - - def __len__(self): - return self.num_samples // self.batch_size +import os +import numpy as np +import torch +import torch.utils.data + +from mel_processing import spectrogram_torch +from utils import load_filepaths_and_text, load_wav_to_torch + + +class TextAudioLoaderMultiNSFsid(torch.utils.data.Dataset): + def __init__(self, hparams): + self.audiopaths_and_text = load_filepaths_and_text(hparams.training_files) + self.max_wav_value = hparams.max_wav_value + self.sampling_rate = hparams.sampling_rate + self.filter_length = hparams.filter_length + self.hop_length = hparams.hop_length + self.win_length = hparams.win_length + self.sampling_rate = hparams.sampling_rate + self.min_text_len = getattr(hparams, "min_text_len", 1) + self.max_text_len = getattr(hparams, "max_text_len", 5000) + self._filter() + + def _filter(self): + audiopaths_and_text_new = [] + lengths = [] + for audiopath, text, pitch, pitchf, dv in self.audiopaths_and_text: + if self.min_text_len <= len(text) and len(text) <= self.max_text_len: + audiopaths_and_text_new.append([audiopath, text, pitch, pitchf, dv]) + lengths.append(os.path.getsize(audiopath) // (3 * self.hop_length)) + self.audiopaths_and_text = audiopaths_and_text_new + self.lengths = lengths + + def get_sid(self, sid): + sid = torch.LongTensor([int(sid)]) + return sid + + def get_audio_text_pair(self, audiopath_and_text): + file = audiopath_and_text[0] + phone = audiopath_and_text[1] + pitch = audiopath_and_text[2] + pitchf = audiopath_and_text[3] + dv = audiopath_and_text[4] + + phone, pitch, pitchf = self.get_labels(phone, pitch, pitchf) + spec, wav = self.get_audio(file) + dv = self.get_sid(dv) + + len_phone = phone.size()[0] + len_spec = spec.size()[-1] + if len_phone != len_spec: + len_min = min(len_phone, len_spec) + len_wav = len_min * self.hop_length + + spec = spec[:, :len_min] + wav = wav[:, :len_wav] + + phone = phone[:len_min, :] + pitch = pitch[:len_min] + pitchf = pitchf[:len_min] + + return (spec, wav, phone, pitch, pitchf, dv) + + def get_labels(self, phone, pitch, pitchf): + phone = np.load(phone) + phone = np.repeat(phone, 2, axis=0) + pitch = np.load(pitch) + pitchf = np.load(pitchf) + n_num = min(phone.shape[0], 900) + phone = phone[:n_num, :] + pitch = pitch[:n_num] + pitchf = pitchf[:n_num] + phone = torch.FloatTensor(phone) + pitch = torch.LongTensor(pitch) + pitchf = torch.FloatTensor(pitchf) + return phone, pitch, pitchf + + def get_audio(self, filename): + audio, sampling_rate = load_wav_to_torch(filename) + if sampling_rate != self.sampling_rate: + raise ValueError( + "{} SR doesn't match target {} SR".format( + sampling_rate, self.sampling_rate + ) + ) + audio_norm = audio + audio_norm = audio_norm.unsqueeze(0) + spec_filename = filename.replace(".wav", ".spec.pt") + if os.path.exists(spec_filename): + try: + spec = torch.load(spec_filename) + except Exception as error: + print(f"{spec_filename}: {error}") + spec = spectrogram_torch( + audio_norm, + self.filter_length, + self.hop_length, + self.win_length, + center=False, + ) + spec = torch.squeeze(spec, 0) + torch.save(spec, spec_filename, _use_new_zipfile_serialization=False) + else: + spec = spectrogram_torch( + audio_norm, + self.filter_length, + self.hop_length, + self.win_length, + center=False, + ) + spec = torch.squeeze(spec, 0) + torch.save(spec, spec_filename, _use_new_zipfile_serialization=False) + return spec, audio_norm + + def __getitem__(self, index): + return self.get_audio_text_pair(self.audiopaths_and_text[index]) + + def __len__(self): + return len(self.audiopaths_and_text) + + +class TextAudioCollateMultiNSFsid: + def __init__(self, return_ids=False): + self.return_ids = return_ids + + def __call__(self, batch): + _, ids_sorted_decreasing = torch.sort( + torch.LongTensor([x[0].size(1) for x in batch]), dim=0, descending=True + ) + + max_spec_len = max([x[0].size(1) for x in batch]) + max_wave_len = max([x[1].size(1) for x in batch]) + spec_lengths = torch.LongTensor(len(batch)) + wave_lengths = torch.LongTensor(len(batch)) + spec_padded = torch.FloatTensor(len(batch), batch[0][0].size(0), max_spec_len) + wave_padded = torch.FloatTensor(len(batch), 1, max_wave_len) + spec_padded.zero_() + wave_padded.zero_() + + max_phone_len = max([x[2].size(0) for x in batch]) + phone_lengths = torch.LongTensor(len(batch)) + phone_padded = torch.FloatTensor( + len(batch), max_phone_len, batch[0][2].shape[1] + ) + pitch_padded = torch.LongTensor(len(batch), max_phone_len) + pitchf_padded = torch.FloatTensor(len(batch), max_phone_len) + phone_padded.zero_() + pitch_padded.zero_() + pitchf_padded.zero_() + sid = torch.LongTensor(len(batch)) + + for i in range(len(ids_sorted_decreasing)): + row = batch[ids_sorted_decreasing[i]] + + spec = row[0] + spec_padded[i, :, : spec.size(1)] = spec + spec_lengths[i] = spec.size(1) + + wave = row[1] + wave_padded[i, :, : wave.size(1)] = wave + wave_lengths[i] = wave.size(1) + + phone = row[2] + phone_padded[i, : phone.size(0), :] = phone + phone_lengths[i] = phone.size(0) + + pitch = row[3] + pitch_padded[i, : pitch.size(0)] = pitch + pitchf = row[4] + pitchf_padded[i, : pitchf.size(0)] = pitchf + + sid[i] = row[5] + + return ( + phone_padded, + phone_lengths, + pitch_padded, + pitchf_padded, + spec_padded, + spec_lengths, + wave_padded, + wave_lengths, + sid, + ) + + +class TextAudioLoader(torch.utils.data.Dataset): + def __init__(self, hparams): + self.audiopaths_and_text = load_filepaths_and_text(hparams.training_files) + self.max_wav_value = hparams.max_wav_value + self.sampling_rate = hparams.sampling_rate + self.filter_length = hparams.filter_length + self.hop_length = hparams.hop_length + self.win_length = hparams.win_length + self.sampling_rate = hparams.sampling_rate + self.min_text_len = getattr(hparams, "min_text_len", 1) + self.max_text_len = getattr(hparams, "max_text_len", 5000) + self._filter() + + def _filter(self): + audiopaths_and_text_new = [] + lengths = [] + for entry in self.audiopaths_and_text: + if len(entry) >= 3: + audiopath, text, dv = entry[:3] + if self.min_text_len <= len(text) and len(text) <= self.max_text_len: + audiopaths_and_text_new.append([audiopath, text, dv]) + lengths.append(os.path.getsize(audiopath) // (3 * self.hop_length)) + + self.audiopaths_and_text = audiopaths_and_text_new + self.lengths = lengths + + def get_sid(self, sid): + sid = os.path.basename(os.path.dirname(sid)) + + try: + sid = torch.LongTensor([int("".join(filter(str.isdigit, sid)))]) + except ValueError as error: + print(f"Error converting speaker ID '{sid}' to integer. Exception: {error}") + sid = torch.LongTensor([0]) + + return sid + + def get_audio_text_pair(self, audiopath_and_text): + file = audiopath_and_text[0] + phone = audiopath_and_text[1] + dv = audiopath_and_text[2] + + phone = self.get_labels(phone) + spec, wav = self.get_audio(file) + dv = self.get_sid(dv) + + len_phone = phone.size()[0] + len_spec = spec.size()[-1] + if len_phone != len_spec: + len_min = min(len_phone, len_spec) + len_wav = len_min * self.hop_length + spec = spec[:, :len_min] + wav = wav[:, :len_wav] + phone = phone[:len_min, :] + return (spec, wav, phone, dv) + + def get_labels(self, phone): + phone = np.load(phone) + phone = np.repeat(phone, 2, axis=0) + n_num = min(phone.shape[0], 900) + phone = phone[:n_num, :] + phone = torch.FloatTensor(phone) + return phone + + def get_audio(self, filename): + audio, sampling_rate = load_wav_to_torch(filename) + if sampling_rate != self.sampling_rate: + raise ValueError( + "{} SR doesn't match target {} SR".format( + sampling_rate, self.sampling_rate + ) + ) + audio_norm = audio + audio_norm = audio_norm.unsqueeze(0) + spec_filename = filename.replace(".wav", ".spec.pt") + if os.path.exists(spec_filename): + try: + spec = torch.load(spec_filename) + except Exception as error: + print(f"{spec_filename}: {error}") + spec = spectrogram_torch( + audio_norm, + self.filter_length, + self.hop_length, + self.win_length, + center=False, + ) + spec = torch.squeeze(spec, 0) + torch.save(spec, spec_filename, _use_new_zipfile_serialization=False) + else: + spec = spectrogram_torch( + audio_norm, + self.filter_length, + self.hop_length, + self.win_length, + center=False, + ) + spec = torch.squeeze(spec, 0) + torch.save(spec, spec_filename, _use_new_zipfile_serialization=False) + return spec, audio_norm + + def __getitem__(self, index): + return self.get_audio_text_pair(self.audiopaths_and_text[index]) + + def __len__(self): + return len(self.audiopaths_and_text) + + +class TextAudioCollate: + def __init__(self, return_ids=False): + self.return_ids = return_ids + + def __call__(self, batch): + _, ids_sorted_decreasing = torch.sort( + torch.LongTensor([x[0].size(1) for x in batch]), dim=0, descending=True + ) + + max_spec_len = max([x[0].size(1) for x in batch]) + max_wave_len = max([x[1].size(1) for x in batch]) + spec_lengths = torch.LongTensor(len(batch)) + wave_lengths = torch.LongTensor(len(batch)) + spec_padded = torch.FloatTensor(len(batch), batch[0][0].size(0), max_spec_len) + wave_padded = torch.FloatTensor(len(batch), 1, max_wave_len) + spec_padded.zero_() + wave_padded.zero_() + + max_phone_len = max([x[2].size(0) for x in batch]) + phone_lengths = torch.LongTensor(len(batch)) + phone_padded = torch.FloatTensor( + len(batch), max_phone_len, batch[0][2].shape[1] + ) + phone_padded.zero_() + sid = torch.LongTensor(len(batch)) + + for i in range(len(ids_sorted_decreasing)): + row = batch[ids_sorted_decreasing[i]] + + spec = row[0] + spec_padded[i, :, : spec.size(1)] = spec + spec_lengths[i] = spec.size(1) + + wave = row[1] + wave_padded[i, :, : wave.size(1)] = wave + wave_lengths[i] = wave.size(1) + + phone = row[2] + phone_padded[i, : phone.size(0), :] = phone + phone_lengths[i] = phone.size(0) + + sid[i] = row[3] + + return ( + phone_padded, + phone_lengths, + spec_padded, + spec_lengths, + wave_padded, + wave_lengths, + sid, + ) + + +class DistributedBucketSampler(torch.utils.data.distributed.DistributedSampler): + def __init__( + self, + dataset, + batch_size, + boundaries, + num_replicas=None, + rank=None, + shuffle=True, + ): + super().__init__(dataset, num_replicas=num_replicas, rank=rank, shuffle=shuffle) + self.lengths = dataset.lengths + self.batch_size = batch_size + self.boundaries = boundaries + + self.buckets, self.num_samples_per_bucket = self._create_buckets() + self.total_size = sum(self.num_samples_per_bucket) + self.num_samples = self.total_size // self.num_replicas + + def _create_buckets(self): + buckets = [[] for _ in range(len(self.boundaries) - 1)] + for i in range(len(self.lengths)): + length = self.lengths[i] + idx_bucket = self._bisect(length) + if idx_bucket != -1: + buckets[idx_bucket].append(i) + + for i in range(len(buckets) - 1, -1, -1): # + if len(buckets[i]) == 0: + buckets.pop(i) + self.boundaries.pop(i + 1) + + num_samples_per_bucket = [] + for i in range(len(buckets)): + len_bucket = len(buckets[i]) + total_batch_size = self.num_replicas * self.batch_size + rem = ( + total_batch_size - (len_bucket % total_batch_size) + ) % total_batch_size + num_samples_per_bucket.append(len_bucket + rem) + return buckets, num_samples_per_bucket + + def __iter__(self): + g = torch.Generator() + g.manual_seed(self.epoch) + + indices = [] + if self.shuffle: + for bucket in self.buckets: + indices.append(torch.randperm(len(bucket), generator=g).tolist()) + else: + for bucket in self.buckets: + indices.append(list(range(len(bucket)))) + + batches = [] + for i in range(len(self.buckets)): + bucket = self.buckets[i] + len_bucket = len(bucket) + ids_bucket = indices[i] + num_samples_bucket = self.num_samples_per_bucket[i] + + rem = num_samples_bucket - len_bucket + ids_bucket = ( + ids_bucket + + ids_bucket * (rem // len_bucket) + + ids_bucket[: (rem % len_bucket)] + ) + + ids_bucket = ids_bucket[self.rank :: self.num_replicas] + + # batching + for j in range(len(ids_bucket) // self.batch_size): + batch = [ + bucket[idx] + for idx in ids_bucket[ + j * self.batch_size : (j + 1) * self.batch_size + ] + ] + batches.append(batch) + + if self.shuffle: + batch_ids = torch.randperm(len(batches), generator=g).tolist() + batches = [batches[i] for i in batch_ids] + self.batches = batches + + assert len(self.batches) * self.batch_size == self.num_samples + return iter(self.batches) + + def _bisect(self, x, lo=0, hi=None): + if hi is None: + hi = len(self.boundaries) - 1 + + if hi > lo: + mid = (hi + lo) // 2 + if self.boundaries[mid] < x and x <= self.boundaries[mid + 1]: + return mid + elif x <= self.boundaries[mid]: + return self._bisect(x, lo, mid) + else: + return self._bisect(x, mid + 1, hi) + else: + return -1 + + def __len__(self): + return self.num_samples // self.batch_size diff --git a/rvc/train/extract/extract_f0_print.py b/rvc/train/extract/extract_f0_print.py new file mode 100644 index 0000000000000000000000000000000000000000..9bab64a426ab305ebdbbff79f38d7fb7e395d807 --- /dev/null +++ b/rvc/train/extract/extract_f0_print.py @@ -0,0 +1,237 @@ +import os +import sys +import numpy as np +import pyworld +import torchcrepe +import torch +import parselmouth +import tqdm +from multiprocessing import Process, cpu_count + +current_directory = os.getcwd() +sys.path.append(current_directory) + + +from rvc.lib.utils import load_audio + + +exp_dir = sys.argv[1] +f0_method = sys.argv[2] +num_processes = cpu_count() + +try: + hop_length = int(sys.argv[3]) +except ValueError: + hop_length = 128 + +DoFormant = False +Quefrency = 1.0 +Timbre = 1.0 + + +class FeatureInput: + def __init__(self, sample_rate=16000, hop_size=160): + self.fs = sample_rate + self.hop = hop_size + + self.f0_method_dict = self.get_f0_method_dict() + + self.f0_bin = 256 + self.f0_max = 1100.0 + self.f0_min = 50.0 + self.f0_mel_min = 1127 * np.log(1 + self.f0_min / 700) + self.f0_mel_max = 1127 * np.log(1 + self.f0_max / 700) + + def mncrepe(self, method, x, p_len, hop_length): + f0 = None + torch_device_index = 0 + torch_device = ( + torch.device(f"cuda:{torch_device_index % torch.cuda.device_count()}") + if torch.cuda.is_available() + else ( + torch.device("mps") + if torch.backends.mps.is_available() + else torch.device("cpu") + ) + ) + + audio = torch.from_numpy(x.astype(np.float32)).to(torch_device, copy=True) + audio /= torch.quantile(torch.abs(audio), 0.999) + audio = torch.unsqueeze(audio, dim=0) + if audio.ndim == 2 and audio.shape[0] > 1: + audio = torch.mean(audio, dim=0, keepdim=True).detach() + audio = audio.detach() + + if method == "crepe": + pitch = torchcrepe.predict( + audio, + self.fs, + hop_length, + self.f0_min, + self.f0_max, + "full", + batch_size=hop_length * 2, + device=torch_device, + pad=True, + ) + p_len = p_len or x.shape[0] // hop_length + source = np.array(pitch.squeeze(0).cpu().float().numpy()) + source[source < 0.001] = np.nan + target = np.interp( + np.arange(0, len(source) * p_len, len(source)) / p_len, + np.arange(0, len(source)), + source, + ) + f0 = np.nan_to_num(target) + + return f0 + + def get_pm(self, x, p_len): + f0 = ( + parselmouth.Sound(x, self.fs) + .to_pitch_ac( + time_step=160 / 16000, + voicing_threshold=0.6, + pitch_floor=self.f0_min, + pitch_ceiling=self.f0_max, + ) + .selected_array["frequency"] + ) + + return np.pad( + f0, + [ + [ + max(0, (p_len - len(f0) + 1) // 2), + max(0, p_len - len(f0) - (p_len - len(f0) + 1) // 2), + ] + ], + mode="constant", + ) + + def get_harvest(self, x): + f0_spectral = pyworld.harvest( + x.astype(np.double), + fs=self.fs, + f0_ceil=self.f0_max, + f0_floor=self.f0_min, + frame_period=1000 * self.hop / self.fs, + ) + return pyworld.stonemask(x.astype(np.double), *f0_spectral, self.fs) + + def get_dio(self, x): + f0_spectral = pyworld.dio( + x.astype(np.double), + fs=self.fs, + f0_ceil=self.f0_max, + f0_floor=self.f0_min, + frame_period=1000 * self.hop / self.fs, + ) + return pyworld.stonemask(x.astype(np.double), *f0_spectral, self.fs) + + def get_rmvpe(self, x): + if not hasattr(self, "model_rmvpe"): + from rvc.lib.rmvpe import RMVPE + + self.model_rmvpe = RMVPE("rmvpe.pt", is_half=False, device="cpu") + return self.model_rmvpe.infer_from_audio(x, thred=0.03) + + def get_f0_method_dict(self): + return { + "pm": self.get_pm, + "harvest": self.get_harvest, + "dio": self.get_dio, + "rmvpe": self.get_rmvpe, + } + + def compute_f0(self, path, f0_method, hop_length): + x = load_audio(path, self.fs) + p_len = x.shape[0] // self.hop + + if f0_method in self.f0_method_dict: + f0 = ( + self.f0_method_dict[f0_method](x, p_len) + if f0_method == "pm" + else self.f0_method_dict[f0_method](x) + ) + elif f0_method == "crepe": + f0 = self.mncrepe(f0_method, x, p_len, hop_length) + return f0 + + def coarse_f0(self, f0): + f0_mel = 1127 * np.log(1 + f0 / 700) + f0_mel[f0_mel > 0] = (f0_mel[f0_mel > 0] - self.f0_mel_min) * ( + self.f0_bin - 2 + ) / (self.f0_mel_max - self.f0_mel_min) + 1 + + # use 0 or 1 + f0_mel[f0_mel <= 1] = 1 + f0_mel[f0_mel > self.f0_bin - 1] = self.f0_bin - 1 + f0_coarse = np.rint(f0_mel).astype(int) + assert f0_coarse.max() <= 255 and f0_coarse.min() >= 1, ( + f0_coarse.max(), + f0_coarse.min(), + ) + return f0_coarse + + def process_paths(self, paths, f0_method, hop_length, thread_n): + if len(paths) == 0: + print("There are no paths to process.") + return + with tqdm.tqdm(total=len(paths), leave=True, position=thread_n) as pbar: + description = f"Thread {thread_n} | Hop-Length {hop_length}" + pbar.set_description(description) + + for idx, (inp_path, opt_path1, opt_path2) in enumerate(paths): + try: + if os.path.exists(opt_path1 + ".npy") and os.path.exists( + opt_path2 + ".npy" + ): + pbar.update(1) + continue + + feature_pit = self.compute_f0(inp_path, f0_method, hop_length) + np.save( + opt_path2, + feature_pit, + allow_pickle=False, + ) # nsf + coarse_pit = self.coarse_f0(feature_pit) + np.save( + opt_path1, + coarse_pit, + allow_pickle=False, + ) # ori + pbar.update(1) + except Exception as error: + print(f"f0fail-{idx}-{inp_path}-{error}") + + +if __name__ == "__main__": + feature_input = FeatureInput() + paths = [] + input_root = f"{exp_dir}/1_16k_wavs" + output_root1 = f"{exp_dir}/2a_f0" + output_root2 = f"{exp_dir}/2b-f0nsf" + + os.makedirs(output_root1, exist_ok=True) + os.makedirs(output_root2, exist_ok=True) + for name in sorted(list(os.listdir(input_root))): + input_path = f"{input_root}/{name}" + if "spec" in input_path: + continue + output_path1 = f"{output_root1}/{name}" + output_path2 = f"{output_root2}/{name}" + paths.append([input_path, output_path1, output_path2]) + + processes = [] + print("Using f0 method: " + f0_method) + for i in range(num_processes): + p = Process( + target=feature_input.process_paths, + args=(paths[i::num_processes], f0_method, hop_length, i), + ) + processes.append(p) + p.start() + for i in range(num_processes): + processes[i].join() diff --git a/rvc/train/extract/extract_feature_print.py b/rvc/train/extract/extract_feature_print.py new file mode 100644 index 0000000000000000000000000000000000000000..610b5a77b85971579bb82c230a3a1e7e85b1b21d --- /dev/null +++ b/rvc/train/extract/extract_feature_print.py @@ -0,0 +1,98 @@ +import os +import sys +import tqdm +import torch +import torch.nn.functional as F +import soundfile as sf +import numpy as np + +now_dir = os.getcwd() +sys.path.append(now_dir) +from rvc.lib.utils import load_embedding + +device = sys.argv[1] +n_parts = int(sys.argv[2]) +i_part = int(sys.argv[3]) +i_gpu = sys.argv[4] +exp_dir = sys.argv[5] +os.environ["CUDA_VISIBLE_DEVICES"] = str(i_gpu) +version = sys.argv[6] +is_half = bool(sys.argv[7]) +embedder_model = sys.argv[8] +try: + embedder_model_custom = sys.argv[9] +except: + embedder_model_custom = None + + +wav_path = f"{exp_dir}/1_16k_wavs" +out_path = f"{exp_dir}/3_feature256" if version == "v1" else f"{exp_dir}/3_feature768" +os.makedirs(out_path, exist_ok=True) + + +def read_wave(wav_path, normalize=False): + wav, sr = sf.read(wav_path) + assert sr == 16000 + feats = torch.from_numpy(wav) + feats = feats.half() if is_half else feats.float() + feats = feats.mean(-1) if feats.dim() == 2 else feats + feats = feats.view(1, -1) + if normalize: + with torch.no_grad(): + feats = F.layer_norm(feats, feats.shape) + return feats + + +print("Starting feature extraction...") +models, saved_cfg, task = load_embedding(embedder_model, embedder_model_custom) +model = models[0] +model = model.to(device) +if device not in ["mps", "cpu"]: + model = model.half() +model.eval() + +todo = sorted(os.listdir(wav_path))[i_part::n_parts] +n = max(1, len(todo) // 10) + +if len(todo) == 0: + print( + "An error occurred in the feature extraction, make sure you have provided the audios correctly." + ) +else: + print(f"{len(todo)}") + with tqdm.tqdm(total=len(todo)) as pbar: + for idx, file in enumerate(todo): + try: + if file.endswith(".wav"): + wav_file_path = os.path.join(wav_path, file) + out_file_path = os.path.join(out_path, file.replace("wav", "npy")) + + if os.path.exists(out_file_path): + continue + + feats = read_wave(wav_file_path, normalize=saved_cfg.task.normalize) + padding_mask = torch.BoolTensor(feats.shape).fill_(False) + inputs = { + "source": feats.to(device), + "padding_mask": padding_mask.to(device), + "output_layer": 9 if version == "v1" else 12, + } + with torch.no_grad(): + logits = model.extract_features(**inputs) + feats = ( + model.final_proj(logits[0]) + if version == "v1" + else logits[0] + ) + + feats = feats.squeeze(0).float().cpu().numpy() + if np.isnan(feats).sum() == 0: + np.save(out_file_path, feats, allow_pickle=False) + else: + print(f"{file} - contains nan") + pbar.set_description(f"Processing {file} {feats.shape}") + except Exception as error: + print(error) + pbar.update(1) + + print("Feature extraction completed successfully!") diff --git a/rvc/train/extract/preparing_files.py b/rvc/train/extract/preparing_files.py new file mode 100644 index 0000000000000000000000000000000000000000..1c5f4a1664a4983fb99af91194c5c7df78dbea9b --- /dev/null +++ b/rvc/train/extract/preparing_files.py @@ -0,0 +1,71 @@ +import os +import json +import pathlib +from random import shuffle + +from rvc.configs.config import Config + +config = Config() +current_directory = os.getcwd() + + +def generate_config(rvc_version, sampling_rate, model_path): + if rvc_version == "v1" or sampling_rate == "40000": + config_path = f"v1/{sampling_rate}.json" + else: + config_path = f"v2/{sampling_rate}.json" + config_save_path = os.path.join(model_path, "config.json") + if not pathlib.Path(config_save_path).exists(): + with open(config_save_path, "w", encoding="utf-8") as f: + json.dump( + config.json_config[config_path], + f, + ensure_ascii=False, + indent=4, + sort_keys=True, + ) + f.write("\n") + + +def generate_filelist(f0_method, model_path, rvc_version, sampling_rate): + gt_wavs_dir = f"{model_path}/0_gt_wavs" + feature_dir = ( + f"{model_path}/3_feature256" + if rvc_version == "v1" + else f"{model_path}/3_feature768" + ) + if f0_method: + f0_dir = f"{model_path}/2a_f0" + f0nsf_dir = f"{model_path}/2b-f0nsf" + names = ( + set([name.split(".")[0] for name in os.listdir(gt_wavs_dir)]) + & set([name.split(".")[0] for name in os.listdir(feature_dir)]) + & set([name.split(".")[0] for name in os.listdir(f0_dir)]) + & set([name.split(".")[0] for name in os.listdir(f0nsf_dir)]) + ) + else: + names = set([name.split(".")[0] for name in os.listdir(gt_wavs_dir)]) & set( + [name.split(".")[0] for name in os.listdir(feature_dir)] + ) + options = [] + for name in names: + if f0_method: + options.append( + f"{gt_wavs_dir}/{name}.wav|{feature_dir}/{name}.npy|{f0_dir}/{name}.wav.npy|{f0nsf_dir}/{name}.wav.npy|0" + ) + else: + options.append(f"{gt_wavs_dir}/{name}.wav|{feature_dir}/{name}.npy|0") + fea_dim = 256 if rvc_version == "v1" else 768 + if f0_method: + for _ in range(2): + options.append( + f"{current_directory}/logs/mute/0_gt_wavs/mute{sampling_rate}.wav|{current_directory}/logs/mute/3_feature{fea_dim}/mute.npy|{current_directory}/logs/mute/2a_f0/mute.wav.npy|{current_directory}/logs/mute/2b-f0nsf/mute.wav.npy|0" + ) + else: + for _ in range(2): + options.append( + f"{current_directory}/logs/mute/0_gt_wavs/mute{sampling_rate}.wav|{current_directory}/logs/mute/3_feature{fea_dim}/mute.npy|0" + ) + shuffle(options) + with open(f"{model_path}/filelist.txt", "w") as f: + f.write("\n".join(options)) diff --git a/rvc/train/index_generator.py b/rvc/train/index_generator.py new file mode 100644 index 0000000000000000000000000000000000000000..32bfb5e0c141525d8cce0a1d57ef406ab58a0848 --- /dev/null +++ b/rvc/train/index_generator.py @@ -0,0 +1,85 @@ +import os +import sys +import faiss +import numpy as np +from sklearn.cluster import MiniBatchKMeans +from multiprocessing import cpu_count + +exp_dir = sys.argv[1] +version = sys.argv[2] + +try: + if version == "v1": + feature_dir = os.path.join(exp_dir, "3_feature256") + elif version == "v2": + feature_dir = os.path.join(exp_dir, "3_feature768") + + npys = [] + listdir_res = sorted(os.listdir(feature_dir)) + + for name in listdir_res: + file_path = os.path.join(feature_dir, name) + phone = np.load(file_path) + npys.append(phone) + + big_npy = np.concatenate(npys, axis=0) + + big_npy_idx = np.arange(big_npy.shape[0]) + np.random.shuffle(big_npy_idx) + big_npy = big_npy[big_npy_idx] + + if big_npy.shape[0] > 2e5: + big_npy = ( + MiniBatchKMeans( + n_clusters=10000, + verbose=True, + batch_size=256 * cpu_count(), + compute_labels=False, + init="random", + ) + .fit(big_npy) + .cluster_centers_ + ) + + np.save(os.path.join(exp_dir, "total_fea.npy"), big_npy) + + n_ivf = min(int(16 * np.sqrt(big_npy.shape[0])), big_npy.shape[0] // 39) + + # index_trained + index_trained = faiss.index_factory( + 256 if version == "v1" else 768, f"IVF{n_ivf},Flat" + ) + index_ivf_trained = faiss.extract_index_ivf(index_trained) + index_ivf_trained.nprobe = 1 + index_trained.train(big_npy) + + index_filename_trained = ( + f"trained_IVF{n_ivf}_Flat_nprobe_{index_ivf_trained.nprobe}_{version}.index" + ) + index_filepath_trained = os.path.join(exp_dir, index_filename_trained) + + faiss.write_index(index_trained, index_filepath_trained) + + # index_added + index_added = faiss.index_factory( + 256 if version == "v1" else 768, f"IVF{n_ivf},Flat" + ) + index_ivf_added = faiss.extract_index_ivf(index_added) + index_ivf_added.nprobe = 1 + index_added.train(big_npy) + + index_filename_added = ( + f"added_IVF{n_ivf}_Flat_nprobe_{index_ivf_added.nprobe}_{version}.index" + ) + index_filepath_added = os.path.join(exp_dir, index_filename_added) + + batch_size_add = 8192 + for i in range(0, big_npy.shape[0], batch_size_add): + index_added.add(big_npy[i : i + batch_size_add]) + + faiss.write_index(index_added, index_filepath_added) + +except Exception as error: + print(f"Failed to train index: {error}") + +print("Index training finished!") diff --git a/infer/lib/train/losses.py b/rvc/train/losses.py similarity index 95% rename from infer/lib/train/losses.py rename to rvc/train/losses.py index b1b263e4c205e78ffe970f622ab6ff68f36d3b17..aa7bd81cf596884a8b33e802ae49254d7810a860 100644 --- a/infer/lib/train/losses.py +++ b/rvc/train/losses.py @@ -1,58 +1,58 @@ -import torch - - -def feature_loss(fmap_r, fmap_g): - loss = 0 - for dr, dg in zip(fmap_r, fmap_g): - for rl, gl in zip(dr, dg): - rl = rl.float().detach() - gl = gl.float() - loss += torch.mean(torch.abs(rl - gl)) - - return loss * 2 - - -def discriminator_loss(disc_real_outputs, disc_generated_outputs): - loss = 0 - r_losses = [] - g_losses = [] - for dr, dg in zip(disc_real_outputs, disc_generated_outputs): - dr = dr.float() - dg = dg.float() - r_loss = torch.mean((1 - dr) ** 2) - g_loss = torch.mean(dg**2) - loss += r_loss + g_loss - r_losses.append(r_loss.item()) - g_losses.append(g_loss.item()) - - return loss, r_losses, g_losses - - -def generator_loss(disc_outputs): - loss = 0 - gen_losses = [] - for dg in disc_outputs: - dg = dg.float() - l = torch.mean((1 - dg) ** 2) - gen_losses.append(l) - loss += l - - return loss, gen_losses - - -def kl_loss(z_p, logs_q, m_p, logs_p, z_mask): - """ - z_p, logs_q: [b, h, t_t] - m_p, logs_p: [b, h, t_t] - """ - z_p = z_p.float() - logs_q = logs_q.float() - m_p = m_p.float() - logs_p = logs_p.float() - z_mask = z_mask.float() - - kl = logs_p - logs_q - 0.5 - kl += 0.5 * ((z_p - m_p) ** 2) * torch.exp(-2.0 * logs_p) - kl = torch.sum(kl * z_mask) - l = kl / torch.sum(z_mask) - return l +import torch + + +def feature_loss(fmap_r, fmap_g): + loss = 0 + for dr, dg in zip(fmap_r, fmap_g): + for rl, gl in zip(dr, dg): + rl = rl.float().detach() + gl = gl.float() + loss += torch.mean(torch.abs(rl - gl)) + + return loss * 2 + + +def discriminator_loss(disc_real_outputs, disc_generated_outputs): + loss = 0 + r_losses = [] + g_losses = [] + for dr, dg in zip(disc_real_outputs, disc_generated_outputs): + dr = dr.float() + dg = dg.float() + r_loss = torch.mean((1 - dr) ** 2) + g_loss = torch.mean(dg**2) + loss += r_loss + g_loss + r_losses.append(r_loss.item()) + g_losses.append(g_loss.item()) + + return loss, r_losses, g_losses + + +def generator_loss(disc_outputs): + loss = 0 + gen_losses = [] + for dg in disc_outputs: + dg = dg.float() + l = torch.mean((1 - dg) ** 2) + gen_losses.append(l) + loss += l + + return loss, gen_losses + + +def kl_loss(z_p, logs_q, m_p, logs_p, z_mask): + """ + z_p, logs_q: [b, h, t_t] + m_p, logs_p: [b, h, t_t] + """ + z_p = z_p.float() + logs_q = logs_q.float() + m_p = m_p.float() + logs_p = logs_p.float() + z_mask = z_mask.float() + + kl = logs_p - logs_q - 0.5 + kl += 0.5 * ((z_p - m_p) ** 2) * torch.exp(-2.0 * logs_p) + kl = torch.sum(kl * z_mask) + l = kl / torch.sum(z_mask) + return l diff --git a/train/mel_processing.py b/rvc/train/mel_processing.py similarity index 56% rename from train/mel_processing.py rename to rvc/train/mel_processing.py index 1c871ab6b838b174407d163c201df899cc3e2b14..1856a622603627c2a74149fd23942087ef11fbf9 100644 --- a/train/mel_processing.py +++ b/rvc/train/mel_processing.py @@ -1,130 +1,84 @@ -import torch -import torch.utils.data -from librosa.filters import mel as librosa_mel_fn - - -MAX_WAV_VALUE = 32768.0 - - -def dynamic_range_compression_torch(x, C=1, clip_val=1e-5): - """ - PARAMS - ------ - C: compression factor - """ - return torch.log(torch.clamp(x, min=clip_val) * C) - - -def dynamic_range_decompression_torch(x, C=1): - """ - PARAMS - ------ - C: compression factor used to compress - """ - return torch.exp(x) / C - - -def spectral_normalize_torch(magnitudes): - return dynamic_range_compression_torch(magnitudes) - - -def spectral_de_normalize_torch(magnitudes): - return dynamic_range_decompression_torch(magnitudes) - - -# Reusable banks -mel_basis = {} -hann_window = {} - - -def spectrogram_torch(y, n_fft, sampling_rate, hop_size, win_size, center=False): - """Convert waveform into Linear-frequency Linear-amplitude spectrogram. - - Args: - y :: (B, T) - Audio waveforms - n_fft - sampling_rate - hop_size - win_size - center - Returns: - :: (B, Freq, Frame) - Linear-frequency Linear-amplitude spectrogram - """ - # Validation - if torch.min(y) < -1.07: - print("min value is ", torch.min(y)) - if torch.max(y) > 1.07: - print("max value is ", torch.max(y)) - - # Window - Cache if needed - global hann_window - dtype_device = str(y.dtype) + "_" + str(y.device) - wnsize_dtype_device = str(win_size) + "_" + dtype_device - if wnsize_dtype_device not in hann_window: - hann_window[wnsize_dtype_device] = torch.hann_window(win_size).to( - dtype=y.dtype, device=y.device - ) - - # Padding - y = torch.nn.functional.pad( - y.unsqueeze(1), - (int((n_fft - hop_size) / 2), int((n_fft - hop_size) / 2)), - mode="reflect", - ) - y = y.squeeze(1) - - # Complex Spectrogram :: (B, T) -> (B, Freq, Frame, RealComplex=2) - spec = torch.stft( - y, - n_fft, - hop_length=hop_size, - win_length=win_size, - window=hann_window[wnsize_dtype_device], - center=center, - pad_mode="reflect", - normalized=False, - onesided=True, - return_complex=False, - ) - - # Linear-frequency Linear-amplitude spectrogram :: (B, Freq, Frame, RealComplex=2) -> (B, Freq, Frame) - spec = torch.sqrt(spec.pow(2).sum(-1) + 1e-6) - return spec - - -def spec_to_mel_torch(spec, n_fft, num_mels, sampling_rate, fmin, fmax): - # MelBasis - Cache if needed - global mel_basis - dtype_device = str(spec.dtype) + "_" + str(spec.device) - fmax_dtype_device = str(fmax) + "_" + dtype_device - if fmax_dtype_device not in mel_basis: - mel = librosa_mel_fn( - sr=sampling_rate, n_fft=n_fft, n_mels=num_mels, fmin=fmin, fmax=fmax - ) - mel_basis[fmax_dtype_device] = torch.from_numpy(mel).to( - dtype=spec.dtype, device=spec.device - ) - - # Mel-frequency Log-amplitude spectrogram :: (B, Freq=num_mels, Frame) - melspec = torch.matmul(mel_basis[fmax_dtype_device], spec) - melspec = spectral_normalize_torch(melspec) - return melspec - - -def mel_spectrogram_torch( - y, n_fft, num_mels, sampling_rate, hop_size, win_size, fmin, fmax, center=False -): - """Convert waveform into Mel-frequency Log-amplitude spectrogram. - - Args: - y :: (B, T) - Waveforms - Returns: - melspec :: (B, Freq, Frame) - Mel-frequency Log-amplitude spectrogram - """ - # Linear-frequency Linear-amplitude spectrogram :: (B, T) -> (B, Freq, Frame) - spec = spectrogram_torch(y, n_fft, sampling_rate, hop_size, win_size, center) - - # Mel-frequency Log-amplitude spectrogram :: (B, Freq, Frame) -> (B, Freq=num_mels, Frame) - melspec = spec_to_mel_torch(spec, n_fft, num_mels, sampling_rate, fmin, fmax) - - return melspec +import torch +import torch.utils.data +from librosa.filters import mel as librosa_mel_fn + + +def dynamic_range_compression_torch(x, C=1, clip_val=1e-5): + return torch.log(torch.clamp(x, min=clip_val) * C) + + +def dynamic_range_decompression_torch(x, C=1): + return torch.exp(x) / C + + +def spectral_normalize_torch(magnitudes): + return dynamic_range_compression_torch(magnitudes) + + +def spectral_de_normalize_torch(magnitudes): + return dynamic_range_decompression_torch(magnitudes) + + +mel_basis = {} +hann_window = {} + + +def spectrogram_torch(y, n_fft, hop_size, win_size, center=False): + global hann_window + dtype_device = str(y.dtype) + "_" + str(y.device) + wnsize_dtype_device = str(win_size) + "_" + dtype_device + if wnsize_dtype_device not in hann_window: + hann_window[wnsize_dtype_device] = torch.hann_window(win_size).to( + dtype=y.dtype, device=y.device + ) + + y = torch.nn.functional.pad( + y.unsqueeze(1), + (int((n_fft - hop_size) / 2), int((n_fft - hop_size) / 2)), + mode="reflect", + ) + y = y.squeeze(1) + + spec = torch.stft( + y, + n_fft, + hop_length=hop_size, + win_length=win_size, + window=hann_window[wnsize_dtype_device], + center=center, + pad_mode="reflect", + normalized=False, + onesided=True, + return_complex=True, + ) + + spec = torch.sqrt(spec.real.pow(2) + spec.imag.pow(2) + 1e-6) + + return spec + + +def spec_to_mel_torch(spec, n_fft, num_mels, sampling_rate, fmin, fmax): + global mel_basis + dtype_device = str(spec.dtype) + "_" + str(spec.device) + fmax_dtype_device = str(fmax) + "_" + dtype_device + if fmax_dtype_device not in mel_basis: + mel = librosa_mel_fn( + sr=sampling_rate, n_fft=n_fft, n_mels=num_mels, fmin=fmin, fmax=fmax + ) + mel_basis[fmax_dtype_device] = torch.from_numpy(mel).to( + dtype=spec.dtype, device=spec.device + ) + + melspec = torch.matmul(mel_basis[fmax_dtype_device], spec) + melspec = spectral_normalize_torch(melspec) + return melspec + + +def mel_spectrogram_torch( + y, n_fft, num_mels, sampling_rate, hop_size, win_size, fmin, fmax, center=False +): + spec = spectrogram_torch(y, n_fft, hop_size, win_size, center) + + melspec = spec_to_mel_torch(spec, n_fft, num_mels, sampling_rate, fmin, fmax) + + return melspec diff --git a/rvc/train/preprocess/preprocess.py b/rvc/train/preprocess/preprocess.py new file mode 100644 index 0000000000000000000000000000000000000000..e3bd89c54d63f2308eb703c7c87cd061d21e407e --- /dev/null +++ b/rvc/train/preprocess/preprocess.py @@ -0,0 +1,130 @@ +from multiprocessing import cpu_count +import os +import sys + +from scipy import signal +from scipy.io import wavfile +import librosa +import numpy as np + +now_directory = os.getcwd() +sys.path.append(now_directory) + +from rvc.lib.utils import load_audio +from rvc.train.slicer import Slicer + +experiment_directory = sys.argv[1] +input_root = sys.argv[2] +sampling_rate = int(sys.argv[3]) +percentage = float(sys.argv[4]) +num_processes = cpu_count() + +import multiprocessing + + +class PreProcess: + def __init__(self, sr, exp_dir, per=3.0): + self.slicer = Slicer( + sr=sr, + threshold=-42, + min_length=1500, + min_interval=400, + hop_size=15, + max_sil_kept=500, + ) + self.sr = sr + self.b_high, self.a_high = signal.butter(N=5, Wn=48, btype="high", fs=self.sr) + self.per = per + self.overlap = 0.3 + self.tail = self.per + self.overlap + self.max_amplitude = 0.9 + self.alpha = 0.75 + self.exp_dir = exp_dir + self.gt_wavs_dir = f"{exp_dir}/0_gt_wavs" + self.wavs16k_dir = f"{exp_dir}/1_16k_wavs" + os.makedirs(self.exp_dir, exist_ok=True) + os.makedirs(self.gt_wavs_dir, exist_ok=True) + os.makedirs(self.wavs16k_dir, exist_ok=True) + + def normalize_and_write(self, tmp_audio, idx0, idx1): + tmp_max = np.abs(tmp_audio).max() + if tmp_max > 2.5: + print(f"{idx0}-{idx1}-{tmp_max}-filtered") + return + tmp_audio = (tmp_audio / tmp_max * (self.max_amplitude * self.alpha)) + ( + 1 - self.alpha + ) * tmp_audio + wavfile.write( + f"{self.gt_wavs_dir}/{idx0}_{idx1}.wav", + self.sr, + tmp_audio.astype(np.float32), + ) + tmp_audio = librosa.resample( + tmp_audio, orig_sr=self.sr, target_sr=16000 + ) # , res_type="soxr_vhq" + wavfile.write( + f"{self.wavs16k_dir}/{idx0}_{idx1}.wav", + 16000, + tmp_audio.astype(np.float32), + ) + + def process_audio(self, path, idx0): + try: + audio = load_audio(path, self.sr) + audio = signal.lfilter(self.b_high, self.a_high, audio) + + idx1 = 0 + for audio_segment in self.slicer.slice(audio): + i = 0 + while 1: + start = int(self.sr * (self.per - self.overlap) * i) + i += 1 + if len(audio_segment[start:]) > self.tail * self.sr: + tmp_audio = audio_segment[ + start : start + int(self.per * self.sr) + ] + self.normalize_and_write(tmp_audio, idx0, idx1) + idx1 += 1 + else: + tmp_audio = audio_segment[start:] + idx1 += 1 + break + self.normalize_and_write(tmp_audio, idx0, idx1) + except Exception as error: + print(f"{path}: {error}") + + def process_audio_multiprocessing(self, infos): + for path, idx0 in infos: + self.process_audio(path, idx0) + + def process_audio_multiprocessing_input_directory(self, input_root, num_processes): + try: + infos = [ + (f"{input_root}/{name}", idx) + for idx, name in enumerate(sorted(list(os.listdir(input_root)))) + ] + processes = [] + for i in range(num_processes): + p = multiprocessing.Process( + target=self.process_audio_multiprocessing, + args=(infos[i::num_processes],), + ) + processes.append(p) + p.start() + for i in range(num_processes): + processes[i].join() + except Exception as error: + print(error) + + +def preprocess_training_set(input_root, sr, num_processes, exp_dir, per): + pp = PreProcess(sr, exp_dir, per) + print("Starting preprocessing...") + pp.process_audio_multiprocessing_input_directory(input_root, num_processes) + print("Preprocessing completed!") + + +if __name__ == "__main__": + preprocess_training_set( + input_root, sampling_rate, num_processes, experiment_directory, percentage + ) diff --git a/rvc/train/process/change_info.py b/rvc/train/process/change_info.py new file mode 100644 index 0000000000000000000000000000000000000000..357c9a203d791e1cc23b059218fecea3124e8a92 --- /dev/null +++ b/rvc/train/process/change_info.py @@ -0,0 +1,14 @@ +import os +import torch + + +def change_info(path, info, name): + try: + ckpt = torch.load(path, map_location="cpu") + ckpt["info"] = info + if name == "": + name = os.path.basename(path) + torch.save(ckpt, f"logs/{name}/{name}") + return "Success." + except Exception as error: + print(error) diff --git a/rvc/train/process/extract_index.py b/rvc/train/process/extract_index.py new file mode 100644 index 0000000000000000000000000000000000000000..d56375bd6b04010e299b7992df1c97d53ae08fc2 --- /dev/null +++ b/rvc/train/process/extract_index.py @@ -0,0 +1,88 @@ +import os +import sys +import faiss +import numpy as np +from sklearn.cluster import MiniBatchKMeans +from multiprocessing import cpu_count + +exp_dir = sys.argv[1] +version = sys.argv[2] + +try: + if version == "v1": + feature_dir = os.path.join(exp_dir, "3_feature256") + elif version == "v2": + feature_dir = os.path.join(exp_dir, "3_feature768") + + npys = [] + listdir_res = sorted(os.listdir(feature_dir)) + + for name in listdir_res: + file_path = os.path.join(feature_dir, name) + phone = np.load(file_path) + npys.append(phone) + + big_npy = np.concatenate(npys, axis=0) + + big_npy_idx = np.arange(big_npy.shape[0]) + np.random.shuffle(big_npy_idx) + big_npy = big_npy[big_npy_idx] + + if big_npy.shape[0] > 2e5: + big_npy = ( + MiniBatchKMeans( + n_clusters=10000, + verbose=True, + batch_size=256 * cpu_count(), + compute_labels=False, + init="random", + ) + .fit(big_npy) + .cluster_centers_ + ) + + np.save(os.path.join(exp_dir, "total_fea.npy"), big_npy) + + n_ivf = min(int(16 * np.sqrt(big_npy.shape[0])), big_npy.shape[0] // 39) + + # index_trained + index_trained = faiss.index_factory( + 256 if version == "v1" else 768, f"IVF{n_ivf},Flat" + ) + index_ivf_trained = faiss.extract_index_ivf(index_trained) + index_ivf_trained.nprobe = 1 + index_trained.train(big_npy) + + index_filename_trained = ( + f"trained_IVF{n_ivf}_Flat_nprobe_{index_ivf_trained.nprobe}_{version}.index" + ) + index_filepath_trained = os.path.join(exp_dir, index_filename_trained) + + faiss.write_index(index_trained, index_filepath_trained) + + # index_added + index_added = faiss.index_factory( + 256 if version == "v1" else 768, f"IVF{n_ivf},Flat" + ) + index_ivf_added = faiss.extract_index_ivf(index_added) + index_ivf_added.nprobe = 1 + index_added.train(big_npy) + + index_filename_added = ( + f"added_IVF{n_ivf}_Flat_nprobe_{index_ivf_added.nprobe}_{version}.index" + ) + index_filepath_added = os.path.join(exp_dir, index_filename_added) + + batch_size_add = 8192 + for i in range(0, big_npy.shape[0], batch_size_add): + index_added.add(big_npy[i : i + batch_size_add]) + + faiss.write_index(index_added, index_filepath_added) + print(f"Saved index file '{index_filepath_added}'") + +except Exception as error: + print(f"Failed to train index: {error}") + if "one array to concatenate" in str(error): + print( + "If you are running this code in a virtual environment, make sure you have enough GPU available to generate the Index file." + ) diff --git a/rvc/train/process/extract_model.py b/rvc/train/process/extract_model.py new file mode 100644 index 0000000000000000000000000000000000000000..067ac889b6954fb6aaa5baded9ade9211b3eb239 --- /dev/null +++ b/rvc/train/process/extract_model.py @@ -0,0 +1,82 @@ +import os +import torch +import hashlib +import datetime +from collections import OrderedDict + + +def replace_keys_in_dict(d, old_key_part, new_key_part): + if isinstance(d, OrderedDict): + updated_dict = OrderedDict() + else: + updated_dict = {} + for key, value in d.items(): + new_key = key.replace(old_key_part, new_key_part) + if isinstance(value, dict): + value = replace_keys_in_dict(value, old_key_part, new_key_part) + updated_dict[new_key] = value + return updated_dict + + +def extract_model(ckpt, sr, if_f0, name, model_dir, epoch, step, version, hps): + try: + print(f"Saved model '{model_dir}' (epoch {epoch} and step {step})") + pth_file = f"{name}_{epoch}e_{step}s.pth" + pth_file_old_version_path = os.path.join( + model_dir, f"{pth_file}_old_version.pth" + ) + opt = OrderedDict( + weight={ + key: value.half() for key, value in ckpt.items() if "enc_q" not in key + } + ) + opt["config"] = [ + hps.data.filter_length // 2 + 1, + 32, + hps.model.inter_channels, + hps.model.hidden_channels, + hps.model.filter_channels, + hps.model.n_heads, + hps.model.n_layers, + hps.model.kernel_size, + hps.model.p_dropout, + hps.model.resblock, + hps.model.resblock_kernel_sizes, + hps.model.resblock_dilation_sizes, + hps.model.upsample_rates, + hps.model.upsample_initial_channel, + hps.model.upsample_kernel_sizes, + hps.model.spk_embed_dim, + hps.model.gin_channels, + hps.data.sampling_rate, + ] + + opt["epoch"] = epoch + opt["step"] = step + opt["sr"] = sr + opt["f0"] = if_f0 + opt["version"] = version + opt["creation_date"] = datetime.datetime.now().isoformat() + + hash_input = f"{str(ckpt)} {epoch} {step} {datetime.datetime.now().isoformat()}" + model_hash = hashlib.sha256(hash_input.encode()).hexdigest() + opt["model_hash"] = model_hash + + torch.save(opt, model_dir) + + model = torch.load(model_dir, map_location=torch.device("cpu")) + torch.save( + replace_keys_in_dict( + replace_keys_in_dict( + model, ".parametrizations.weight.original1", ".weight_v" + ), + ".parametrizations.weight.original0", + ".weight_g", + ), + pth_file_old_version_path, + ) + os.remove(model_dir) + os.rename(pth_file_old_version_path, model_dir) + + except Exception as error: + print(error) diff --git a/rvc/train/process/extract_small_model.py b/rvc/train/process/extract_small_model.py new file mode 100644 index 0000000000000000000000000000000000000000..546209197afac0f6a2e5d1b3e70c9dbbf8bd13fb --- /dev/null +++ b/rvc/train/process/extract_small_model.py @@ -0,0 +1,175 @@ +import os +import torch +import hashlib +import datetime +from collections import OrderedDict + + +def replace_keys_in_dict(d, old_key_part, new_key_part): + # Use OrderedDict if the original is an OrderedDict + if isinstance(d, OrderedDict): + updated_dict = OrderedDict() + else: + updated_dict = {} + for key, value in d.items(): + # Replace the key part if found + new_key = key.replace(old_key_part, new_key_part) + # If the value is a dictionary, apply the function recursively + if isinstance(value, dict): + value = replace_keys_in_dict(value, old_key_part, new_key_part) + updated_dict[new_key] = value + return updated_dict + + +def extract_small_model(path, name, sr, if_f0, version, epoch, step): + try: + ckpt = torch.load(path, map_location="cpu") + pth_file = f"{name}.pth" + pth_file_old_version_path = os.path.join("logs", f"{pth_file}_old_version.pth") + opt = OrderedDict( + weight={ + key: value.half() for key, value in ckpt.items() if "enc_q" not in key + } + ) + if "model" in ckpt: + ckpt = ckpt["model"] + opt = OrderedDict() + opt["weight"] = {} + for key in ckpt.keys(): + if "enc_q" in key: + continue + opt["weight"][key] = ckpt[key].half() + if sr == "40000": + opt["config"] = [ + 1025, + 32, + 192, + 192, + 768, + 2, + 6, + 3, + 0, + "1", + [3, 7, 11], + [[1, 3, 5], [1, 3, 5], [1, 3, 5]], + [10, 10, 2, 2], + 512, + [16, 16, 4, 4], + 109, + 256, + 40000, + ] + elif sr == "48000": + if version == "v1": + opt["config"] = [ + 1025, + 32, + 192, + 192, + 768, + 2, + 6, + 3, + 0, + "1", + [3, 7, 11], + [[1, 3, 5], [1, 3, 5], [1, 3, 5]], + [10, 6, 2, 2, 2], + 512, + [16, 16, 4, 4, 4], + 109, + 256, + 48000, + ] + else: + opt["config"] = [ + 1025, + 32, + 192, + 192, + 768, + 2, + 6, + 3, + 0, + "1", + [3, 7, 11], + [[1, 3, 5], [1, 3, 5], [1, 3, 5]], + [12, 10, 2, 2], + 512, + [24, 20, 4, 4], + 109, + 256, + 48000, + ] + elif sr == "32000": + if version == "v1": + opt["config"] = [ + 513, + 32, + 192, + 192, + 768, + 2, + 6, + 3, + 0, + "1", + [3, 7, 11], + [[1, 3, 5], [1, 3, 5], [1, 3, 5]], + [10, 4, 2, 2, 2], + 512, + [16, 16, 4, 4, 4], + 109, + 256, + 32000, + ] + else: + opt["config"] = [ + 513, + 32, + 192, + 192, + 768, + 2, + 6, + 3, + 0, + "1", + [3, 7, 11], + [[1, 3, 5], [1, 3, 5], [1, 3, 5]], + [10, 8, 2, 2], + 512, + [20, 16, 4, 4], + 109, + 256, + 32000, + ] + + opt["epoch"] = epoch + opt["step"] = step + opt["sr"] = sr + opt["f0"] = int(if_f0) + opt["version"] = version + opt["creation_date"] = datetime.datetime.now().isoformat() + + hash_input = f"{str(ckpt)} {epoch} {step} {datetime.datetime.now().isoformat()}" + model_hash = hashlib.sha256(hash_input.encode()).hexdigest() + opt["model_hash"] = model_hash + + model = torch.load(pth_file_old_version_path, map_location=torch.device("cpu")) + torch.save( + replace_keys_in_dict( + replace_keys_in_dict( + model, ".parametrizations.weight.original1", ".weight_v" + ), + ".parametrizations.weight.original0", + ".weight_g", + ), + pth_file_old_version_path, + ) + os.remove(pth_file_old_version_path) + os.rename(pth_file_old_version_path, pth_file) + except Exception as error: + print(error) diff --git a/rvc/train/process/model_blender.py b/rvc/train/process/model_blender.py new file mode 100644 index 0000000000000000000000000000000000000000..bcb8aa9ee066a874a9d45f0fa653a030834fb6b5 --- /dev/null +++ b/rvc/train/process/model_blender.py @@ -0,0 +1,63 @@ +import os +import torch +from collections import OrderedDict + + +def extract(ckpt): + a = ckpt["model"] + opt = OrderedDict() + opt["weight"] = {} + for key in a.keys(): + if "enc_q" in key: + continue + opt["weight"][key] = a[key] + return opt + + +def model_blender(name, path1, path2, ratio): + try: + message = f"Model {path1} and {path2} are merged with alpha {ratio}." + ckpt1 = torch.load(path1, map_location="cpu") + ckpt2 = torch.load(path2, map_location="cpu") + cfg = ckpt1["config"] + cfg_f0 = ckpt1["f0"] + cfg_version = ckpt1["version"] + + if "model" in ckpt1: + ckpt1 = extract(ckpt1) + else: + ckpt1 = ckpt1["weight"] + if "model" in ckpt2: + ckpt2 = extract(ckpt2) + else: + ckpt2 = ckpt2["weight"] + + if sorted(list(ckpt1.keys())) != sorted(list(ckpt2.keys())): + return "Fail to merge the models. The model architectures are not the same." + + opt = OrderedDict() + opt["weight"] = {} + for key in ckpt1.keys(): + if key == "emb_g.weight" and ckpt1[key].shape != ckpt2[key].shape: + min_shape0 = min(ckpt1[key].shape[0], ckpt2[key].shape[0]) + opt["weight"][key] = ( + ratio * (ckpt1[key][:min_shape0].float()) + + (1 - ratio) * (ckpt2[key][:min_shape0].float()) + ).half() + else: + opt["weight"][key] = ( + ratio * (ckpt1[key].float()) + (1 - ratio) * (ckpt2[key].float()) + ).half() + + opt["config"] = cfg + opt["sr"] = message + opt["f0"] = cfg_f0 + opt["version"] = cfg_version + opt["info"] = message + + torch.save(opt, os.path.join("logs", "%s.pth" % name)) + print(message) + return message, os.path.join("logs", "%s.pth" % name) + except Exception as error: + print(error) + return error diff --git a/rvc/train/process/model_information.py b/rvc/train/process/model_information.py new file mode 100644 index 0000000000000000000000000000000000000000..eea5e52ab9b2e7ef20c635306dde0a2818012d12 --- /dev/null +++ b/rvc/train/process/model_information.py @@ -0,0 +1,40 @@ +import torch +from datetime import datetime + + +def prettify_date(date_str): + if date_str is None: + return "None" + try: + date_time_obj = datetime.strptime(date_str, "%Y-%m-%dT%H:%M:%S.%f") + return date_time_obj.strftime("%Y-%m-%d %H:%M:%S") + except ValueError: + return "Invalid date format" + + +def model_information(path): + model_data = torch.load(path, map_location="cpu") + + print(f"Loaded model from {path}") + + epochs = model_data.get("epoch", "None") + steps = model_data.get("step", "None") + sr = model_data.get("sr", "None") + f0 = model_data.get("f0", "None") + version = model_data.get("version", "None") + creation_date = model_data.get("creation_date", "None") + model_hash = model_data.get("model_hash", None) + + pitch_guidance = "True" if f0 == 1 else "False" + + creation_date_str = prettify_date(creation_date) if creation_date else "None" + + return ( + f"Epochs: {epochs}\n" + f"Steps: {steps}\n" + f"RVC Version: {version}\n" + f"Sampling Rate: {sr}\n" + f"Pitch Guidance: {pitch_guidance}\n" + f"Creation Date: {creation_date_str}\n" + f"Hash (ID): {model_hash}" + ) diff --git a/rvc/train/process_ckpt.py b/rvc/train/process_ckpt.py new file mode 100644 index 0000000000000000000000000000000000000000..30ef58d24773d8c4de7ab8820af9a004d0b5ae87 --- /dev/null +++ b/rvc/train/process_ckpt.py @@ -0,0 +1,221 @@ +import os +import torch +from collections import OrderedDict + +logs_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "logs") + + +def replace_keys_in_dict(d, old_key_part, new_key_part): + # Use OrderedDict if the original is an OrderedDict + if isinstance(d, OrderedDict): + updated_dict = OrderedDict() + else: + updated_dict = {} + for key, value in d.items(): + # Replace the key part if found + new_key = key.replace(old_key_part, new_key_part) + # If the value is a dictionary, apply the function recursively + if isinstance(value, dict): + value = replace_keys_in_dict(value, old_key_part, new_key_part) + updated_dict[new_key] = value + return updated_dict + + +def save_final(ckpt, sr, if_f0, name, epoch, version, hps): + try: + pth_file = f"{name}_{epoch}e.pth" + pth_file_path = os.path.join("logs", pth_file) + pth_file_old_version_path = os.path.join("logs", f"{pth_file}_old_version.pth") + + opt = OrderedDict( + weight={ + key: value.half() for key, value in ckpt.items() if "enc_q" not in key + } + ) + opt["config"] = [ + hps.data.filter_length // 2 + 1, + 32, + hps.model.inter_channels, + hps.model.hidden_channels, + hps.model.filter_channels, + hps.model.n_heads, + hps.model.n_layers, + hps.model.kernel_size, + hps.model.p_dropout, + hps.model.resblock, + hps.model.resblock_kernel_sizes, + hps.model.resblock_dilation_sizes, + hps.model.upsample_rates, + hps.model.upsample_initial_channel, + hps.model.upsample_kernel_sizes, + hps.model.spk_embed_dim, + hps.model.gin_channels, + hps.data.sampling_rate, + ] + opt["info"], opt["sr"], opt["f0"], opt["version"] = epoch, sr, if_f0, version + torch.save(opt, pth_file_path) + + model = torch.load(pth_file_path, map_location=torch.device("cpu")) + torch.save( + replace_keys_in_dict( + replace_keys_in_dict( + model, ".parametrizations.weight.original1", ".weight_v" + ), + ".parametrizations.weight.original0", + ".weight_g", + ), + pth_file_old_version_path, + ) + os.remove(pth_file_path) + os.rename(pth_file_old_version_path, pth_file_path) + + return "Success!" + except Exception as error: + print(error) + + +def extract_small_model(path, name, sr, if_f0, info, version): + try: + ckpt = torch.load(path, map_location="cpu") + if "model" in ckpt: + ckpt = ckpt["model"] + opt = OrderedDict( + weight={ + key: value.half() for key, value in ckpt.items() if "enc_q" not in key + } + ) + opt["config"] = { + "40000": [ + 1025, + 32, + 192, + 192, + 768, + 2, + 6, + 3, + 0, + "1", + [3, 7, 11], + [[1, 3, 5], [1, 3, 5], [1, 3, 5]], + [10, 10, 2, 2], + 512, + [16, 16, 4, 4], + 109, + 256, + 40000, + ], + "48000": { + "v1": [ + 1025, + 32, + 192, + 192, + 768, + 2, + 6, + 3, + 0, + "1", + [3, 7, 11], + [[1, 3, 5], [1, 3, 5], [1, 3, 5]], + [10, 6, 2, 2, 2], + 512, + [16, 16, 4, 4, 4], + 109, + 256, + 48000, + ], + "v2": [ + 1025, + 32, + 192, + 192, + 768, + 2, + 6, + 3, + 0, + "1", + [3, 7, 11], + [[1, 3, 5], [1, 3, 5], [1, 3, 5]], + [12, 10, 2, 2], + 512, + [24, 20, 4, 4], + 109, + 256, + 48000, + ], + }, + "32000": { + "v1": [ + 513, + 32, + 192, + 192, + 768, + 2, + 6, + 3, + 0, + "1", + [3, 7, 11], + [[1, 3, 5], [1, 3, 5], [1, 3, 5]], + [10, 4, 2, 2, 2], + 512, + [16, 16, 4, 4, 4], + 109, + 256, + 32000, + ], + "v2": [ + 513, + 32, + 192, + 192, + 768, + 2, + 6, + 3, + 0, + "1", + [3, 7, 11], + [[1, 3, 5], [1, 3, 5], [1, 3, 5]], + [10, 8, 2, 2], + 512, + [20, 16, 4, 4], + 109, + 256, + 32000, + ], + }, + } + opt["config"] = ( + opt["config"][sr] + if isinstance(opt["config"][sr], list) + else opt["config"][sr][version] + ) + if info == "": + info = "Extracted model." + opt["info"], opt["version"], opt["sr"], opt["f0"] = ( + info, + version, + sr, + int(if_f0), + ) + torch.save(opt, f"logs/{name}/{name}.pth") + return "Success." + except Exception as error: + print(error) + + +def change_info(path, info, name): + try: + ckpt = torch.load(path, map_location="cpu") + ckpt["info"] = info + if name == "": + name = os.path.basename(path) + torch.save(ckpt, f"logs/weights/{name}") + return "Success." + except Exception as error: + print(error) diff --git a/slicer2.py b/rvc/train/slicer.py similarity index 60% rename from slicer2.py rename to rvc/train/slicer.py index 5b29ee262aa54045e807be2cffeb41687499ba58..e2380dfa1add991a68951f6cffbf848cebee63f8 100644 --- a/slicer2.py +++ b/rvc/train/slicer.py @@ -1,260 +1,171 @@ -import numpy as np - - -# This function is obtained from librosa. -def get_rms( - y, - frame_length=2048, - hop_length=512, - pad_mode="constant", -): - padding = (int(frame_length // 2), int(frame_length // 2)) - y = np.pad(y, padding, mode=pad_mode) - - axis = -1 - # put our new within-frame axis at the end for now - out_strides = y.strides + tuple([y.strides[axis]]) - # Reduce the shape on the framing axis - x_shape_trimmed = list(y.shape) - x_shape_trimmed[axis] -= frame_length - 1 - out_shape = tuple(x_shape_trimmed) + tuple([frame_length]) - xw = np.lib.stride_tricks.as_strided(y, shape=out_shape, strides=out_strides) - if axis < 0: - target_axis = axis - 1 - else: - target_axis = axis + 1 - xw = np.moveaxis(xw, -1, target_axis) - # Downsample along the target axis - slices = [slice(None)] * xw.ndim - slices[axis] = slice(0, None, hop_length) - x = xw[tuple(slices)] - - # Calculate power - power = np.mean(np.abs(x) ** 2, axis=-2, keepdims=True) - - return np.sqrt(power) - - -class Slicer: - def __init__( - self, - sr: int, - threshold: float = -40.0, - min_length: int = 5000, - min_interval: int = 300, - hop_size: int = 20, - max_sil_kept: int = 5000, - ): - if not min_length >= min_interval >= hop_size: - raise ValueError( - "The following condition must be satisfied: min_length >= min_interval >= hop_size" - ) - if not max_sil_kept >= hop_size: - raise ValueError( - "The following condition must be satisfied: max_sil_kept >= hop_size" - ) - min_interval = sr * min_interval / 1000 - self.threshold = 10 ** (threshold / 20.0) - self.hop_size = round(sr * hop_size / 1000) - self.win_size = min(round(min_interval), 4 * self.hop_size) - self.min_length = round(sr * min_length / 1000 / self.hop_size) - self.min_interval = round(min_interval / self.hop_size) - self.max_sil_kept = round(sr * max_sil_kept / 1000 / self.hop_size) - - def _apply_slice(self, waveform, begin, end): - if len(waveform.shape) > 1: - return waveform[ - :, begin * self.hop_size : min(waveform.shape[1], end * self.hop_size) - ] - else: - return waveform[ - begin * self.hop_size : min(waveform.shape[0], end * self.hop_size) - ] - - # @timeit - def slice(self, waveform): - if len(waveform.shape) > 1: - samples = waveform.mean(axis=0) - else: - samples = waveform - if samples.shape[0] <= self.min_length: - return [waveform] - rms_list = get_rms( - y=samples, frame_length=self.win_size, hop_length=self.hop_size - ).squeeze(0) - sil_tags = [] - silence_start = None - clip_start = 0 - for i, rms in enumerate(rms_list): - # Keep looping while frame is silent. - if rms < self.threshold: - # Record start of silent frames. - if silence_start is None: - silence_start = i - continue - # Keep looping while frame is not silent and silence start has not been recorded. - if silence_start is None: - continue - # Clear recorded silence start if interval is not enough or clip is too short - is_leading_silence = silence_start == 0 and i > self.max_sil_kept - need_slice_middle = ( - i - silence_start >= self.min_interval - and i - clip_start >= self.min_length - ) - if not is_leading_silence and not need_slice_middle: - silence_start = None - continue - # Need slicing. Record the range of silent frames to be removed. - if i - silence_start <= self.max_sil_kept: - pos = rms_list[silence_start : i + 1].argmin() + silence_start - if silence_start == 0: - sil_tags.append((0, pos)) - else: - sil_tags.append((pos, pos)) - clip_start = pos - elif i - silence_start <= self.max_sil_kept * 2: - pos = rms_list[ - i - self.max_sil_kept : silence_start + self.max_sil_kept + 1 - ].argmin() - pos += i - self.max_sil_kept - pos_l = ( - rms_list[ - silence_start : silence_start + self.max_sil_kept + 1 - ].argmin() - + silence_start - ) - pos_r = ( - rms_list[i - self.max_sil_kept : i + 1].argmin() - + i - - self.max_sil_kept - ) - if silence_start == 0: - sil_tags.append((0, pos_r)) - clip_start = pos_r - else: - sil_tags.append((min(pos_l, pos), max(pos_r, pos))) - clip_start = max(pos_r, pos) - else: - pos_l = ( - rms_list[ - silence_start : silence_start + self.max_sil_kept + 1 - ].argmin() - + silence_start - ) - pos_r = ( - rms_list[i - self.max_sil_kept : i + 1].argmin() - + i - - self.max_sil_kept - ) - if silence_start == 0: - sil_tags.append((0, pos_r)) - else: - sil_tags.append((pos_l, pos_r)) - clip_start = pos_r - silence_start = None - # Deal with trailing silence. - total_frames = rms_list.shape[0] - if ( - silence_start is not None - and total_frames - silence_start >= self.min_interval - ): - silence_end = min(total_frames, silence_start + self.max_sil_kept) - pos = rms_list[silence_start : silence_end + 1].argmin() + silence_start - sil_tags.append((pos, total_frames + 1)) - # Apply and return slices. - if len(sil_tags) == 0: - return [waveform] - else: - chunks = [] - if sil_tags[0][0] > 0: - chunks.append(self._apply_slice(waveform, 0, sil_tags[0][0])) - for i in range(len(sil_tags) - 1): - chunks.append( - self._apply_slice(waveform, sil_tags[i][1], sil_tags[i + 1][0]) - ) - if sil_tags[-1][1] < total_frames: - chunks.append( - self._apply_slice(waveform, sil_tags[-1][1], total_frames) - ) - return chunks - - -def main(): - import os.path - from argparse import ArgumentParser - - import librosa - import soundfile - - parser = ArgumentParser() - parser.add_argument("audio", type=str, help="The audio to be sliced") - parser.add_argument( - "--out", type=str, help="Output directory of the sliced audio clips" - ) - parser.add_argument( - "--db_thresh", - type=float, - required=False, - default=-40, - help="The dB threshold for silence detection", - ) - parser.add_argument( - "--min_length", - type=int, - required=False, - default=5000, - help="The minimum milliseconds required for each sliced audio clip", - ) - parser.add_argument( - "--min_interval", - type=int, - required=False, - default=300, - help="The minimum milliseconds for a silence part to be sliced", - ) - parser.add_argument( - "--hop_size", - type=int, - required=False, - default=10, - help="Frame length in milliseconds", - ) - parser.add_argument( - "--max_sil_kept", - type=int, - required=False, - default=500, - help="The maximum silence length kept around the sliced clip, presented in milliseconds", - ) - args = parser.parse_args() - out = args.out - if out is None: - out = os.path.dirname(os.path.abspath(args.audio)) - audio, sr = librosa.load(args.audio, sr=None, mono=False) - slicer = Slicer( - sr=sr, - threshold=args.db_thresh, - min_length=args.min_length, - min_interval=args.min_interval, - hop_size=args.hop_size, - max_sil_kept=args.max_sil_kept, - ) - chunks = slicer.slice(audio) - if not os.path.exists(out): - os.makedirs(out) - for i, chunk in enumerate(chunks): - if len(chunk.shape) > 1: - chunk = chunk.T - soundfile.write( - os.path.join( - out, - f"%s_%d.wav" - % (os.path.basename(args.audio).rsplit(".", maxsplit=1)[0], i), - ), - chunk, - sr, - ) - - -if __name__ == "__main__": - main() +import numpy as np + + +class Slicer: + def __init__( + self, + sr: int, + threshold: float = -40.0, + min_length: int = 5000, + min_interval: int = 300, + hop_size: int = 20, + max_sil_kept: int = 5000, + ): + if not min_length >= min_interval >= hop_size: + raise ValueError("min_length >= min_interval >= hop_size is required") + if not max_sil_kept >= hop_size: + raise ValueError("max_sil_kept >= hop_size is required") + + min_interval = sr * min_interval / 1000 + self.threshold = 10 ** (threshold / 20.0) + self.hop_size = round(sr * hop_size / 1000) + self.win_size = min(round(min_interval), 4 * self.hop_size) + self.min_length = round(sr * min_length / 1000 / self.hop_size) + self.min_interval = round(min_interval / self.hop_size) + self.max_sil_kept = round(sr * max_sil_kept / 1000 / self.hop_size) + + def _apply_slice(self, waveform, begin, end): + start_idx = begin * self.hop_size + if len(waveform.shape) > 1: + end_idx = min(waveform.shape[1], end * self.hop_size) + return waveform[:, start_idx:end_idx] + else: + end_idx = min(waveform.shape[0], end * self.hop_size) + return waveform[start_idx:end_idx] + + def slice(self, waveform): + samples = waveform.mean(axis=0) if len(waveform.shape) > 1 else waveform + if samples.shape[0] <= self.min_length: + return [waveform] + + rms_list = get_rms( + y=samples, frame_length=self.win_size, hop_length=self.hop_size + ).squeeze(0) + sil_tags = [] + silence_start, clip_start = None, 0 + + for i, rms in enumerate(rms_list): + if rms < self.threshold: + if silence_start is None: + silence_start = i + continue + + if silence_start is None: + continue + + is_leading_silence = silence_start == 0 and i > self.max_sil_kept + need_slice_middle = ( + i - silence_start >= self.min_interval + and i - clip_start >= self.min_length + ) + + if not is_leading_silence and not need_slice_middle: + silence_start = None + continue + + if i - silence_start <= self.max_sil_kept: + pos = rms_list[silence_start : i + 1].argmin() + silence_start + if silence_start == 0: + sil_tags.append((0, pos)) + else: + sil_tags.append((pos, pos)) + clip_start = pos + elif i - silence_start <= self.max_sil_kept * 2: + pos = rms_list[ + i - self.max_sil_kept : silence_start + self.max_sil_kept + 1 + ].argmin() + pos += i - self.max_sil_kept + pos_l = ( + rms_list[ + silence_start : silence_start + self.max_sil_kept + 1 + ].argmin() + + silence_start + ) + pos_r = ( + rms_list[i - self.max_sil_kept : i + 1].argmin() + + i + - self.max_sil_kept + ) + if silence_start == 0: + sil_tags.append((0, pos_r)) + clip_start = pos_r + else: + sil_tags.append((min(pos_l, pos), max(pos_r, pos))) + clip_start = max(pos_r, pos) + else: + pos_l = ( + rms_list[ + silence_start : silence_start + self.max_sil_kept + 1 + ].argmin() + + silence_start + ) + pos_r = ( + rms_list[i - self.max_sil_kept : i + 1].argmin() + + i + - self.max_sil_kept + ) + if silence_start == 0: + sil_tags.append((0, pos_r)) + else: + sil_tags.append((pos_l, pos_r)) + clip_start = pos_r + silence_start = None + + total_frames = rms_list.shape[0] + + if ( + silence_start is not None + and total_frames - silence_start >= self.min_interval + ): + silence_end = min(total_frames, silence_start + self.max_sil_kept) + pos = rms_list[silence_start : silence_end + 1].argmin() + silence_start + sil_tags.append((pos, total_frames + 1)) + + if not sil_tags: + return [waveform] + else: + chunks = [] + if sil_tags[0][0] > 0: + chunks.append(self._apply_slice(waveform, 0, sil_tags[0][0])) + + for i in range(len(sil_tags) - 1): + chunks.append( + self._apply_slice(waveform, sil_tags[i][1], sil_tags[i + 1][0]) + ) + + if sil_tags[-1][1] < total_frames: + chunks.append( + self._apply_slice(waveform, sil_tags[-1][1], total_frames) + ) + + return chunks + + +def get_rms( + y, + frame_length=2048, + hop_length=512, + pad_mode="constant", +): + padding = (int(frame_length // 2), int(frame_length // 2)) + y = np.pad(y, padding, mode=pad_mode) + + axis = -1 + out_strides = y.strides + tuple([y.strides[axis]]) + x_shape_trimmed = list(y.shape) + x_shape_trimmed[axis] -= frame_length - 1 + out_shape = tuple(x_shape_trimmed) + tuple([frame_length]) + xw = np.lib.stride_tricks.as_strided(y, shape=out_shape, strides=out_strides) + + if axis < 0: + target_axis = axis - 1 + else: + target_axis = axis + 1 + + xw = np.moveaxis(xw, -1, target_axis) + slices = [slice(None)] * xw.ndim + slices[axis] = slice(0, None, hop_length) + x = xw[tuple(slices)] + + power = np.mean(np.abs(x) ** 2, axis=-2, keepdims=True) + return np.sqrt(power) diff --git a/infer/modules/train/train.py b/rvc/train/train.py similarity index 58% rename from infer/modules/train/train.py rename to rvc/train/train.py index 550bef391444c9b6c0d8c44ae3a3809b3ade4218..9cae79a1863d1a9701ad5f9504941d0f2b58e255 100644 --- a/infer/modules/train/train.py +++ b/rvc/train/train.py @@ -1,723 +1,746 @@ -import os -import sys -import logging - -logger = logging.getLogger(__name__) - -now_dir = os.getcwd() -sys.path.append(os.path.join(now_dir)) - -import datetime - -from infer.lib.train import utils - -hps = utils.get_hparams() -os.environ["CUDA_VISIBLE_DEVICES"] = hps.gpus.replace("-", ",") -n_gpus = len(hps.gpus.split("-")) -from random import randint, shuffle - -import torch -try: - import intel_extension_for_pytorch as ipex # pylint: disable=import-error, unused-import - if torch.xpu.is_available(): - from infer.modules.ipex import ipex_init - from infer.modules.ipex.gradscaler import gradscaler_init - from torch.xpu.amp import autocast - GradScaler = gradscaler_init() - ipex_init() - else: - from torch.cuda.amp import GradScaler, autocast -except Exception: - from torch.cuda.amp import GradScaler, autocast - -torch.backends.cudnn.deterministic = False -torch.backends.cudnn.benchmark = False -from time import sleep -from time import time as ttime - -import torch.distributed as dist -import torch.multiprocessing as mp - -from torch.nn import functional as F -from torch.nn.parallel import DistributedDataParallel as DDP -from torch.utils.data import DataLoader -from torch.utils.tensorboard import SummaryWriter - -from infer.lib.infer_pack import commons -from infer.lib.train.data_utils import ( - DistributedBucketSampler, - TextAudioCollate, - TextAudioCollateMultiNSFsid, - TextAudioLoader, - TextAudioLoaderMultiNSFsid, -) - -if hps.version == "v1": - from infer.lib.infer_pack.models import MultiPeriodDiscriminator - from infer.lib.infer_pack.models import SynthesizerTrnMs256NSFsid as RVC_Model_f0 - from infer.lib.infer_pack.models import ( - SynthesizerTrnMs256NSFsid_nono as RVC_Model_nof0, - ) -else: - from infer.lib.infer_pack.models import ( - SynthesizerTrnMs768NSFsid as RVC_Model_f0, - SynthesizerTrnMs768NSFsid_nono as RVC_Model_nof0, - MultiPeriodDiscriminatorV2 as MultiPeriodDiscriminator, - ) - -from infer.lib.train.losses import ( - discriminator_loss, - feature_loss, - generator_loss, - kl_loss, -) -from infer.lib.train.mel_processing import mel_spectrogram_torch, spec_to_mel_torch -from infer.lib.train.process_ckpt import savee - -global_step = 0 -import csv - -class EpochRecorder: - def __init__(self): - self.last_time = ttime() - - def record(self): - now_time = ttime() - elapsed_time = now_time - self.last_time - self.last_time = now_time - elapsed_time_str = str(datetime.timedelta(seconds=elapsed_time)) - current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") - return f"[{current_time}] | ({elapsed_time_str})" - -def reset_stop_flag(): - with open("csvdb/stop.csv", "w+", newline="") as STOPCSVwrite: - csv_writer = csv.writer(STOPCSVwrite, delimiter=",") - csv_writer.writerow(["False"]) - -def create_model(hps, model_f0, model_nof0): - filter_length_adjusted = hps.data.filter_length // 2 + 1 - segment_size_adjusted = hps.train.segment_size // hps.data.hop_length - is_half = hps.train.fp16_run - sr = hps.sample_rate - - model = model_f0 if hps.if_f0 == 1 else model_nof0 - - return model( - filter_length_adjusted, - segment_size_adjusted, - **hps.model, - is_half=is_half, - sr=sr - ) - -def move_model_to_cuda_if_available(model, rank): - if torch.cuda.is_available(): - return model.cuda(rank) - else: - return model - -def create_optimizer(model, hps): - return torch.optim.AdamW( - model.parameters(), - hps.train.learning_rate, - betas=hps.train.betas, - eps=hps.train.eps, - ) - -def create_ddp_model(model, rank): - if torch.cuda.is_available(): - return DDP(model, device_ids=[rank]) - else: - return DDP(model) - -def create_dataset(hps, if_f0=True): - return TextAudioLoaderMultiNSFsid(hps.data.training_files, hps.data) if if_f0 else TextAudioLoader(hps.data.training_files, hps.data) - -def create_sampler(dataset, batch_size, n_gpus, rank): - return DistributedBucketSampler( - dataset, - batch_size * n_gpus, - # [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200,1400], # 16s - [100, 200, 300, 400, 500, 600, 700, 800, 900], # 16s - num_replicas=n_gpus, - rank=rank, - shuffle=True, - ) - -def set_collate_fn(if_f0=True): - return TextAudioCollateMultiNSFsid() if if_f0 else TextAudioCollate() - - -def main(): - n_gpus = torch.cuda.device_count() - - if torch.cuda.is_available() == False and torch.backends.mps.is_available() == True: - n_gpus = 1 - if n_gpus < 1: - # patch to unblock people without gpus. there is probably a better way. - logger.warn("NO GPU DETECTED: falling back to CPU - this may take a while") - n_gpus = 1 - os.environ["MASTER_ADDR"] = "localhost" - os.environ["MASTER_PORT"] = str(randint(20000, 55555)) - children = [] - for i in range(n_gpus): - subproc = mp.Process( - target=run, - args=( - i, - n_gpus, - hps, - ), - ) - children.append(subproc) - subproc.start() - - for i in range(n_gpus): - children[i].join() - - -def run(rank, n_gpus, hps): - global global_step - if rank == 0: - logger = utils.get_logger(hps.model_dir) - logger.info(hps) - # utils.check_git_hash(hps.model_dir) - writer = SummaryWriter(log_dir=hps.model_dir) - writer_eval = SummaryWriter(log_dir=os.path.join(hps.model_dir, "eval")) - - dist.init_process_group( - backend="gloo", init_method="env://", world_size=n_gpus, rank=rank - ) - torch.manual_seed(hps.train.seed) - if torch.cuda.is_available(): - torch.cuda.set_device(rank) - - if hps.if_f0 == 1: - train_dataset = TextAudioLoaderMultiNSFsid(hps.data.training_files, hps.data) - else: - train_dataset = TextAudioLoader(hps.data.training_files, hps.data) - train_sampler = DistributedBucketSampler( - train_dataset, - hps.train.batch_size * n_gpus, - # [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200,1400], # 16s - [100, 200, 300, 400, 500, 600, 700, 800, 900], # 16s - num_replicas=n_gpus, - rank=rank, - shuffle=True, - ) - # It is possible that dataloader's workers are out of shared memory. Please try to raise your shared memory limit. - # num_workers=8 -> num_workers=4 - if hps.if_f0 == 1: - collate_fn = TextAudioCollateMultiNSFsid() - else: - collate_fn = TextAudioCollate() - train_loader = DataLoader( - train_dataset, - num_workers=4, - shuffle=False, - pin_memory=True, - collate_fn=collate_fn, - batch_sampler=train_sampler, - persistent_workers=True, - prefetch_factor=8, - ) - if hps.if_f0 == 1: - net_g = RVC_Model_f0( - hps.data.filter_length // 2 + 1, - hps.train.segment_size // hps.data.hop_length, - **hps.model, - is_half=hps.train.fp16_run, - sr=hps.sample_rate, - ) - else: - net_g = RVC_Model_nof0( - hps.data.filter_length // 2 + 1, - hps.train.segment_size // hps.data.hop_length, - **hps.model, - is_half=hps.train.fp16_run, - ) - if torch.cuda.is_available(): - net_g = net_g.cuda(rank) - net_d = MultiPeriodDiscriminator(hps.model.use_spectral_norm) - if torch.cuda.is_available(): - net_d = net_d.cuda(rank) - optim_g = torch.optim.AdamW( - net_g.parameters(), - hps.train.learning_rate, - betas=hps.train.betas, - eps=hps.train.eps, - ) - optim_d = torch.optim.AdamW( - net_d.parameters(), - hps.train.learning_rate, - betas=hps.train.betas, - eps=hps.train.eps, - ) - # net_g = DDP(net_g, device_ids=[rank], find_unused_parameters=True) - # net_d = DDP(net_d, device_ids=[rank], find_unused_parameters=True) - if hasattr(torch, "xpu") and torch.xpu.is_available(): - pass - elif torch.cuda.is_available(): - net_g = DDP(net_g, device_ids=[rank]) - net_d = DDP(net_d, device_ids=[rank]) - else: - net_g = DDP(net_g) - net_d = DDP(net_d) - - try: # 如果能加载自动resume - _, _, _, epoch_str = utils.load_checkpoint( - utils.latest_checkpoint_path(hps.model_dir, "D_*.pth"), net_d, optim_d - ) # D多半加载没事 - if rank == 0: - logger.info("loaded D") - # _, _, _, epoch_str = utils.load_checkpoint(utils.latest_checkpoint_path(hps.model_dir, "G_*.pth"), net_g, optim_g,load_opt=0) - _, _, _, epoch_str = utils.load_checkpoint( - utils.latest_checkpoint_path(hps.model_dir, "G_*.pth"), net_g, optim_g - ) - global_step = (epoch_str - 1) * len(train_loader) - # epoch_str = 1 - # global_step = 0 - except: # 如果首次不能加载,加载pretrain - # traceback.print_exc() - epoch_str = 1 - global_step = 0 - if hps.pretrainG != "": - if rank == 0: - logger.info("loaded pretrained %s" % (hps.pretrainG)) - if hasattr(net_g, "module"): - logger.info( - net_g.module.load_state_dict( - torch.load(hps.pretrainG, map_location="cpu")["model"] - ) - ) ##测试不加载优化器 - else: - logger.info( - net_g.load_state_dict( - torch.load(hps.pretrainG, map_location="cpu")["model"] - ) - ) ##测试不加载优化器 - if hps.pretrainD != "": - if rank == 0: - logger.info("loaded pretrained %s" % (hps.pretrainD)) - if hasattr(net_d, "module"): - logger.info( - net_d.module.load_state_dict( - torch.load(hps.pretrainD, map_location="cpu")["model"] - ) - ) - else: - logger.info( - net_d.load_state_dict( - torch.load(hps.pretrainD, map_location="cpu")["model"] - ) - ) - - scheduler_g = torch.optim.lr_scheduler.ExponentialLR( - optim_g, gamma=hps.train.lr_decay, last_epoch=epoch_str - 2 - ) - scheduler_d = torch.optim.lr_scheduler.ExponentialLR( - optim_d, gamma=hps.train.lr_decay, last_epoch=epoch_str - 2 - ) - - scaler = GradScaler(enabled=hps.train.fp16_run) - - cache = [] - for epoch in range(epoch_str, hps.train.epochs + 1): - if rank == 0: - train_and_evaluate( - rank, - epoch, - hps, - [net_g, net_d], - [optim_g, optim_d], - [scheduler_g, scheduler_d], - scaler, - [train_loader, None], - logger, - [writer, writer_eval], - cache, - ) - else: - train_and_evaluate( - rank, - epoch, - hps, - [net_g, net_d], - [optim_g, optim_d], - [scheduler_g, scheduler_d], - scaler, - [train_loader, None], - None, - None, - cache, - ) - scheduler_g.step() - scheduler_d.step() - - -def train_and_evaluate( - rank, epoch, hps, nets, optims, schedulers, scaler, loaders, logger, writers, cache -): - net_g, net_d = nets - optim_g, optim_d = optims - train_loader, eval_loader = loaders - if writers is not None: - writer, writer_eval = writers - - train_loader.batch_sampler.set_epoch(epoch) - global global_step - - net_g.train() - net_d.train() - - # Prepare data iterator - if hps.if_cache_data_in_gpu == True: - # Use Cache - data_iterator = cache - if cache == []: - # Make new cache - for batch_idx, info in enumerate(train_loader): - # Unpack - if hps.if_f0 == 1: - ( - phone, - phone_lengths, - pitch, - pitchf, - spec, - spec_lengths, - wave, - wave_lengths, - sid, - ) = info - else: - ( - phone, - phone_lengths, - spec, - spec_lengths, - wave, - wave_lengths, - sid, - ) = info - # Load on CUDA - if torch.cuda.is_available(): - phone = phone.cuda(rank, non_blocking=True) - phone_lengths = phone_lengths.cuda(rank, non_blocking=True) - if hps.if_f0 == 1: - pitch = pitch.cuda(rank, non_blocking=True) - pitchf = pitchf.cuda(rank, non_blocking=True) - sid = sid.cuda(rank, non_blocking=True) - spec = spec.cuda(rank, non_blocking=True) - spec_lengths = spec_lengths.cuda(rank, non_blocking=True) - wave = wave.cuda(rank, non_blocking=True) - wave_lengths = wave_lengths.cuda(rank, non_blocking=True) - # Cache on list - if hps.if_f0 == 1: - cache.append( - ( - batch_idx, - ( - phone, - phone_lengths, - pitch, - pitchf, - spec, - spec_lengths, - wave, - wave_lengths, - sid, - ), - ) - ) - else: - cache.append( - ( - batch_idx, - ( - phone, - phone_lengths, - spec, - spec_lengths, - wave, - wave_lengths, - sid, - ), - ) - ) - else: - # Load shuffled cache - shuffle(cache) - else: - # Loader - data_iterator = enumerate(train_loader) - - # Run steps - epoch_recorder = EpochRecorder() - for batch_idx, info in data_iterator: - # Data - ## Unpack - if hps.if_f0 == 1: - ( - phone, - phone_lengths, - pitch, - pitchf, - spec, - spec_lengths, - wave, - wave_lengths, - sid, - ) = info - else: - phone, phone_lengths, spec, spec_lengths, wave, wave_lengths, sid = info - ## Load on CUDA - if (hps.if_cache_data_in_gpu == False) and torch.cuda.is_available(): - phone = phone.cuda(rank, non_blocking=True) - phone_lengths = phone_lengths.cuda(rank, non_blocking=True) - if hps.if_f0 == 1: - pitch = pitch.cuda(rank, non_blocking=True) - pitchf = pitchf.cuda(rank, non_blocking=True) - sid = sid.cuda(rank, non_blocking=True) - spec = spec.cuda(rank, non_blocking=True) - spec_lengths = spec_lengths.cuda(rank, non_blocking=True) - wave = wave.cuda(rank, non_blocking=True) - # wave_lengths = wave_lengths.cuda(rank, non_blocking=True) - - # Calculate - with autocast(enabled=hps.train.fp16_run): - if hps.if_f0 == 1: - ( - y_hat, - ids_slice, - x_mask, - z_mask, - (z, z_p, m_p, logs_p, m_q, logs_q), - ) = net_g(phone, phone_lengths, pitch, pitchf, spec, spec_lengths, sid) - else: - ( - y_hat, - ids_slice, - x_mask, - z_mask, - (z, z_p, m_p, logs_p, m_q, logs_q), - ) = net_g(phone, phone_lengths, spec, spec_lengths, sid) - mel = spec_to_mel_torch( - spec, - hps.data.filter_length, - hps.data.n_mel_channels, - hps.data.sampling_rate, - hps.data.mel_fmin, - hps.data.mel_fmax, - ) - y_mel = commons.slice_segments( - mel, ids_slice, hps.train.segment_size // hps.data.hop_length - ) - with autocast(enabled=False): - y_hat_mel = mel_spectrogram_torch( - y_hat.float().squeeze(1), - hps.data.filter_length, - hps.data.n_mel_channels, - hps.data.sampling_rate, - hps.data.hop_length, - hps.data.win_length, - hps.data.mel_fmin, - hps.data.mel_fmax, - ) - if hps.train.fp16_run == True: - y_hat_mel = y_hat_mel.half() - wave = commons.slice_segments( - wave, ids_slice * hps.data.hop_length, hps.train.segment_size - ) # slice - - # Discriminator - y_d_hat_r, y_d_hat_g, _, _ = net_d(wave, y_hat.detach()) - with autocast(enabled=False): - loss_disc, losses_disc_r, losses_disc_g = discriminator_loss( - y_d_hat_r, y_d_hat_g - ) - optim_d.zero_grad() - scaler.scale(loss_disc).backward() - scaler.unscale_(optim_d) - grad_norm_d = commons.clip_grad_value_(net_d.parameters(), None) - scaler.step(optim_d) - - with autocast(enabled=hps.train.fp16_run): - # Generator - y_d_hat_r, y_d_hat_g, fmap_r, fmap_g = net_d(wave, y_hat) - with autocast(enabled=False): - loss_mel = F.l1_loss(y_mel, y_hat_mel) * hps.train.c_mel - loss_kl = kl_loss(z_p, logs_q, m_p, logs_p, z_mask) * hps.train.c_kl - loss_fm = feature_loss(fmap_r, fmap_g) - loss_gen, losses_gen = generator_loss(y_d_hat_g) - loss_gen_all = loss_gen + loss_fm + loss_mel + loss_kl - optim_g.zero_grad() - scaler.scale(loss_gen_all).backward() - scaler.unscale_(optim_g) - grad_norm_g = commons.clip_grad_value_(net_g.parameters(), None) - scaler.step(optim_g) - scaler.update() - - if rank == 0: - if global_step % hps.train.log_interval == 0: - lr = optim_g.param_groups[0]["lr"] - logger.info( - "Train Epoch: {} [{:.0f}%]".format( - epoch, 100.0 * batch_idx / len(train_loader) - ) - ) - # Amor For Tensorboard display - if loss_mel > 75: - loss_mel = 75 - if loss_kl > 9: - loss_kl = 9 - - logger.info([global_step, lr]) - logger.info( - f"loss_disc={loss_disc:.3f}, loss_gen={loss_gen:.3f}, loss_fm={loss_fm:.3f},loss_mel={loss_mel:.3f}, loss_kl={loss_kl:.3f}" - ) - scalar_dict = { - "loss/g/total": loss_gen_all, - "loss/d/total": loss_disc, - "learning_rate": lr, - "grad_norm_d": grad_norm_d, - "grad_norm_g": grad_norm_g, - } - scalar_dict.update( - { - "loss/g/fm": loss_fm, - "loss/g/mel": loss_mel, - "loss/g/kl": loss_kl, - } - ) - - scalar_dict.update( - {"loss/g/{}".format(i): v for i, v in enumerate(losses_gen)} - ) - scalar_dict.update( - {"loss/d_r/{}".format(i): v for i, v in enumerate(losses_disc_r)} - ) - scalar_dict.update( - {"loss/d_g/{}".format(i): v for i, v in enumerate(losses_disc_g)} - ) - image_dict = { - "slice/mel_org": utils.plot_spectrogram_to_numpy( - y_mel[0].data.cpu().numpy() - ), - "slice/mel_gen": utils.plot_spectrogram_to_numpy( - y_hat_mel[0].data.cpu().numpy() - ), - "all/mel": utils.plot_spectrogram_to_numpy( - mel[0].data.cpu().numpy() - ), - } - utils.summarize( - writer=writer, - global_step=global_step, - images=image_dict, - scalars=scalar_dict, - ) - global_step += 1 - # /Run steps - - if epoch % hps.save_every_epoch == 0 and rank == 0: - if hps.if_latest == 0: - utils.save_checkpoint( - net_g, - optim_g, - hps.train.learning_rate, - epoch, - os.path.join(hps.model_dir, "G_{}.pth".format(global_step)), - ) - utils.save_checkpoint( - net_d, - optim_d, - hps.train.learning_rate, - epoch, - os.path.join(hps.model_dir, "D_{}.pth".format(global_step)), - ) - else: - utils.save_checkpoint( - net_g, - optim_g, - hps.train.learning_rate, - epoch, - os.path.join(hps.model_dir, "G_{}.pth".format(2333333)), - ) - utils.save_checkpoint( - net_d, - optim_d, - hps.train.learning_rate, - epoch, - os.path.join(hps.model_dir, "D_{}.pth".format(2333333)), - ) - if rank == 0 and hps.save_every_weights == "1": - if hasattr(net_g, "module"): - ckpt = net_g.module.state_dict() - else: - ckpt = net_g.state_dict() - logger.info( - "saving ckpt %s_e%s:%s" - % ( - hps.name, - epoch, - savee( - ckpt, - hps.sample_rate, - hps.if_f0, - hps.name + "_e%s_s%s" % (epoch, global_step), - epoch, - hps.version, - hps, - ), - ) - ) - - stopbtn = False - try: - with open("csvdb/stop.csv", 'r') as csv_file: - stopbtn_str = next(csv.reader(csv_file), [None])[0] - if stopbtn_str is not None: stopbtn = stopbtn_str.lower() == 'true' - except (ValueError, TypeError, FileNotFoundError, IndexError) as e: - print(f"Handling exception: {e}") - stopbtn = False - - if stopbtn: - logger.info("Stop Button was pressed. The program is closed.") - ckpt = net_g.module.state_dict() if hasattr(net_g, "module") else net_g.state_dict() - logger.info( - "saving final ckpt:%s" - % ( - savee( - ckpt, hps.sample_rate, hps.if_f0, hps.name, epoch, hps.version, hps - ) - ) - ) - sleep(1) - reset_stop_flag() - os._exit(2333333) - - if rank == 0: - logger.info("====> Epoch: {} {}".format(epoch, epoch_recorder.record())) - if epoch >= hps.total_epoch and rank == 0: - logger.info("Training is done. The program is closed.") - - if hasattr(net_g, "module"): - ckpt = net_g.module.state_dict() - else: - ckpt = net_g.state_dict() - logger.info( - "saving final ckpt:%s" - % ( - savee( - ckpt, hps.sample_rate, hps.if_f0, hps.name, epoch, hps.version, hps - ) - ) - ) - sleep(1) - os._exit(2333333) - - -if __name__ == "__main__": - torch.multiprocessing.set_start_method("spawn") - main() +import torch +import sys +import os +import datetime +import glob +import json +import re + +from utils import ( + get_hparams, + plot_spectrogram_to_numpy, + summarize, + load_checkpoint, + save_checkpoint, + latest_checkpoint_path, +) +from random import randint, shuffle +from time import sleep +from time import time as ttime + +from torch.cuda.amp import GradScaler, autocast + +from torch.nn import functional as F +from torch.nn.parallel import DistributedDataParallel as DDP +from torch.utils.data import DataLoader +from torch.utils.tensorboard import SummaryWriter +import torch.distributed as dist +import torch.multiprocessing as mp + +now_dir = os.getcwd() +sys.path.append(os.path.join(now_dir)) + + +from data_utils import ( + DistributedBucketSampler, + TextAudioCollate, + TextAudioCollateMultiNSFsid, + TextAudioLoader, + TextAudioLoaderMultiNSFsid, +) + +from losses import ( + discriminator_loss, + feature_loss, + generator_loss, + kl_loss, +) +from mel_processing import mel_spectrogram_torch, spec_to_mel_torch + +from rvc.train.process.extract_model import extract_model + +from rvc.lib.infer_pack import commons + +hps = get_hparams() +if hps.version == "v1": + from rvc.lib.infer_pack.models import MultiPeriodDiscriminator + from rvc.lib.infer_pack.models import SynthesizerTrnMs256NSFsid as RVC_Model_f0 + from rvc.lib.infer_pack.models import ( + SynthesizerTrnMs256NSFsid_nono as RVC_Model_nof0, + ) +elif hps.version == "v2": + from rvc.lib.infer_pack.models import ( + SynthesizerTrnMs768NSFsid as RVC_Model_f0, + SynthesizerTrnMs768NSFsid_nono as RVC_Model_nof0, + MultiPeriodDiscriminatorV2 as MultiPeriodDiscriminator, + ) + +os.environ["CUDA_VISIBLE_DEVICES"] = hps.gpus.replace("-", ",") +n_gpus = len(hps.gpus.split("-")) + + +torch.backends.cudnn.deterministic = False +torch.backends.cudnn.benchmark = False + +global_step = 0 +lowest_value = {"step": 0, "value": float("inf"), "epoch": 0} +last_loss_gen_all = 0 + + +class EpochRecorder: + def __init__(self): + self.last_time = ttime() + + def record(self): + now_time = ttime() + elapsed_time = now_time - self.last_time + self.last_time = now_time + elapsed_time = round(elapsed_time, 1) + elapsed_time_str = str(datetime.timedelta(seconds=int(elapsed_time))) + current_time = datetime.datetime.now().strftime("%H:%M:%S") + return f"time={current_time} | training_speed={elapsed_time_str}" + + +def main(): + def start(): + children = [] + pid_file_path = os.path.join(now_dir, "rvc", "train", "train_pid.txt") + with open(pid_file_path, "w") as pid_file: + for i in range(n_gpus): + subproc = mp.Process( + target=run, + args=(i, n_gpus, hps), + ) + children.append(subproc) + subproc.start() + pid_file.write(str(subproc.pid) + "\n") + + for i in range(n_gpus): + children[i].join() + + n_gpus = torch.cuda.device_count() + + if torch.cuda.is_available() == False and torch.backends.mps.is_available() == True: + n_gpus = 1 + if n_gpus < 1: + print("GPU not detected, reverting to CPU (not recommended)") + n_gpus = 1 + + if hps.sync_graph == 1: + print( + "Sync graph is now activated! With sync graph enabled, the model undergoes a single epoch of training. Once the graphs are synchronized, training proceeds for the previously specified number of epochs." + ) + hps.custom_total_epoch = 1 + hps.custom_save_every_weights = "1" + start() + + logs_path = os.path.join(now_dir, "logs") + model_config_file = os.path.join(now_dir, "logs", hps.name, "config.json") + rvc_config_file = os.path.join( + now_dir, "rvc", "configs", hps.version, str(hps.sample_rate) + ".json" + ) + if not os.path.exists(rvc_config_file): + rvc_config_file = os.path.join( + now_dir, "rvc", "configs", "v1", str(hps.sample_rate) + ".json" + ) + + pattern = rf"{os.path.basename(hps.name)}_1e_(\d+)s\.pth" + + for filename in os.listdir(logs_path): + match = re.match(pattern, filename) + if match: + steps = int(match.group(1)) + + def edit_config(config_file): + with open(config_file, "r", encoding="utf8") as json_file: + config_data = json.load(json_file) + + config_data["train"]["log_interval"] = steps + + with open(config_file, "w", encoding="utf8") as json_file: + json.dump( + config_data, + json_file, + indent=2, + separators=(",", ": "), + ensure_ascii=False, + ) + + edit_config(model_config_file) + edit_config(rvc_config_file) + + for root, dirs, files in os.walk( + os.path.join(now_dir, "logs", hps.name), topdown=False + ): + for name in files: + file_path = os.path.join(root, name) + file_name, file_extension = os.path.splitext(name) + if file_extension == ".0": + os.remove(file_path) + elif ("D" in name or "G" in name) and file_extension == ".pth": + os.remove(file_path) + elif ( + "added" in name or "trained" in name + ) and file_extension == ".index": + os.remove(file_path) + for name in dirs: + if name == "eval": + folder_path = os.path.join(root, name) + for item in os.listdir(folder_path): + item_path = os.path.join(folder_path, item) + if os.path.isfile(item_path): + os.remove(item_path) + os.rmdir(folder_path) + + print("Successfully synchronized graphs!") + hps.custom_total_epoch = hps.total_epoch + hps.custom_save_every_weights = hps.save_every_weights + start() + else: + hps.custom_total_epoch = hps.total_epoch + hps.custom_save_every_weights = hps.save_every_weights + start() + + +def run( + rank, + n_gpus, + hps, +): + global global_step + if rank == 0: + writer = SummaryWriter(log_dir=hps.model_dir) + writer_eval = SummaryWriter(log_dir=os.path.join(hps.model_dir, "eval")) + + os.environ["MASTER_ADDR"] = "localhost" + os.environ["MASTER_PORT"] = str(randint(20000, 55555)) + dist.init_process_group( + backend="gloo", init_method="env://", world_size=n_gpus, rank=rank + ) + torch.manual_seed(hps.train.seed) + if torch.cuda.is_available(): + torch.cuda.set_device(rank) + + if hps.if_f0 == 1: + train_dataset = TextAudioLoaderMultiNSFsid(hps.data) + else: + train_dataset = TextAudioLoader(hps.data) + + train_sampler = DistributedBucketSampler( + train_dataset, + hps.train.batch_size * n_gpus, + [100, 200, 300, 400, 500, 600, 700, 800, 900], + num_replicas=n_gpus, + rank=rank, + shuffle=True, + ) + + if hps.if_f0 == 1: + collate_fn = TextAudioCollateMultiNSFsid() + else: + collate_fn = TextAudioCollate() + train_loader = DataLoader( + train_dataset, + num_workers=4, + shuffle=False, + pin_memory=True, + collate_fn=collate_fn, + batch_sampler=train_sampler, + persistent_workers=True, + prefetch_factor=8, + ) + if hps.if_f0 == 1: + net_g = RVC_Model_f0( + hps.data.filter_length // 2 + 1, + hps.train.segment_size // hps.data.hop_length, + **hps.model, + is_half=hps.train.fp16_run, + sr=hps.sample_rate, + ) + else: + net_g = RVC_Model_nof0( + hps.data.filter_length // 2 + 1, + hps.train.segment_size // hps.data.hop_length, + **hps.model, + is_half=hps.train.fp16_run, + ) + if torch.cuda.is_available(): + net_g = net_g.cuda(rank) + net_d = MultiPeriodDiscriminator(hps.model.use_spectral_norm) + if torch.cuda.is_available(): + net_d = net_d.cuda(rank) + optim_g = torch.optim.AdamW( + net_g.parameters(), + hps.train.learning_rate, + betas=hps.train.betas, + eps=hps.train.eps, + ) + optim_d = torch.optim.AdamW( + net_d.parameters(), + hps.train.learning_rate, + betas=hps.train.betas, + eps=hps.train.eps, + ) + if torch.cuda.is_available(): + net_g = DDP(net_g, device_ids=[rank]) + net_d = DDP(net_d, device_ids=[rank]) + else: + net_g = DDP(net_g) + net_d = DDP(net_d) + + try: + print("Starting training...") + _, _, _, epoch_str = load_checkpoint( + latest_checkpoint_path(hps.model_dir, "D_*.pth"), net_d, optim_d + ) + _, _, _, epoch_str = load_checkpoint( + latest_checkpoint_path(hps.model_dir, "G_*.pth"), net_g, optim_g + ) + global_step = (epoch_str - 1) * len(train_loader) + + except: + epoch_str = 1 + global_step = 0 + if hps.pretrainG != "": + if rank == 0: + print(f"Loaded pretrained_G {hps.pretrainG}") + if hasattr(net_g, "module"): + print( + net_g.module.load_state_dict( + torch.load(hps.pretrainG, map_location="cpu")["model"] + ) + ) + else: + print( + net_g.load_state_dict( + torch.load(hps.pretrainG, map_location="cpu")["model"] + ) + ) + if hps.pretrainD != "": + if rank == 0: + print(f"Loaded pretrained_D {hps.pretrainD}") + if hasattr(net_d, "module"): + print( + net_d.module.load_state_dict( + torch.load(hps.pretrainD, map_location="cpu")["model"] + ) + ) + else: + print( + net_d.load_state_dict( + torch.load(hps.pretrainD, map_location="cpu")["model"] + ) + ) + + scheduler_g = torch.optim.lr_scheduler.ExponentialLR( + optim_g, gamma=hps.train.lr_decay, last_epoch=epoch_str - 2 + ) + scheduler_d = torch.optim.lr_scheduler.ExponentialLR( + optim_d, gamma=hps.train.lr_decay, last_epoch=epoch_str - 2 + ) + + scaler = GradScaler(enabled=hps.train.fp16_run) + + cache = [] + for epoch in range(epoch_str, hps.train.epochs + 1): + if rank == 0: + train_and_evaluate( + rank, + epoch, + hps, + [net_g, net_d], + [optim_g, optim_d], + scaler, + [train_loader, None], + [writer, writer_eval], + cache, + ) + else: + train_and_evaluate( + rank, + epoch, + hps, + [net_g, net_d], + [optim_g, optim_d], + scaler, + [train_loader, None], + None, + cache, + ) + + scheduler_g.step() + scheduler_d.step() + + +def train_and_evaluate(rank, epoch, hps, nets, optims, scaler, loaders, writers, cache): + global global_step, last_loss_gen_all, lowest_value + + if epoch == 1: + lowest_value = {"step": 0, "value": float("inf"), "epoch": 0} + last_loss_gen_all = 0.0 + + net_g, net_d = nets + optim_g, optim_d = optims + train_loader = loaders[0] if loaders is not None else None + if writers is not None: + writer = writers[0] + + train_loader.batch_sampler.set_epoch(epoch) + + net_g.train() + net_d.train() + + if hps.if_cache_data_in_gpu == True: + data_iterator = cache + if cache == []: + for batch_idx, info in enumerate(train_loader): + if hps.if_f0 == 1: + ( + phone, + phone_lengths, + pitch, + pitchf, + spec, + spec_lengths, + wave, + wave_lengths, + sid, + ) = info + else: + ( + phone, + phone_lengths, + spec, + spec_lengths, + wave, + wave_lengths, + sid, + ) = info + if torch.cuda.is_available(): + phone = phone.cuda(rank, non_blocking=True) + phone_lengths = phone_lengths.cuda(rank, non_blocking=True) + if hps.if_f0 == 1: + pitch = pitch.cuda(rank, non_blocking=True) + pitchf = pitchf.cuda(rank, non_blocking=True) + sid = sid.cuda(rank, non_blocking=True) + spec = spec.cuda(rank, non_blocking=True) + spec_lengths = spec_lengths.cuda(rank, non_blocking=True) + wave = wave.cuda(rank, non_blocking=True) + wave_lengths = wave_lengths.cuda(rank, non_blocking=True) + if hps.if_f0 == 1: + cache.append( + ( + batch_idx, + ( + phone, + phone_lengths, + pitch, + pitchf, + spec, + spec_lengths, + wave, + wave_lengths, + sid, + ), + ) + ) + else: + cache.append( + ( + batch_idx, + ( + phone, + phone_lengths, + spec, + spec_lengths, + wave, + wave_lengths, + sid, + ), + ) + ) + else: + shuffle(cache) + else: + data_iterator = enumerate(train_loader) + + epoch_recorder = EpochRecorder() + for batch_idx, info in data_iterator: + if hps.if_f0 == 1: + ( + phone, + phone_lengths, + pitch, + pitchf, + spec, + spec_lengths, + wave, + wave_lengths, + sid, + ) = info + else: + phone, phone_lengths, spec, spec_lengths, wave, wave_lengths, sid = info + if (hps.if_cache_data_in_gpu == False) and torch.cuda.is_available(): + phone = phone.cuda(rank, non_blocking=True) + phone_lengths = phone_lengths.cuda(rank, non_blocking=True) + if hps.if_f0 == 1: + pitch = pitch.cuda(rank, non_blocking=True) + pitchf = pitchf.cuda(rank, non_blocking=True) + sid = sid.cuda(rank, non_blocking=True) + spec = spec.cuda(rank, non_blocking=True) + spec_lengths = spec_lengths.cuda(rank, non_blocking=True) + wave = wave.cuda(rank, non_blocking=True) + + with autocast(enabled=hps.train.fp16_run): + if hps.if_f0 == 1: + ( + y_hat, + ids_slice, + x_mask, + z_mask, + (z, z_p, m_p, logs_p, m_q, logs_q), + ) = net_g(phone, phone_lengths, pitch, pitchf, spec, spec_lengths, sid) + else: + ( + y_hat, + ids_slice, + x_mask, + z_mask, + (z, z_p, m_p, logs_p, m_q, logs_q), + ) = net_g(phone, phone_lengths, spec, spec_lengths, sid) + mel = spec_to_mel_torch( + spec, + hps.data.filter_length, + hps.data.n_mel_channels, + hps.data.sampling_rate, + hps.data.mel_fmin, + hps.data.mel_fmax, + ) + y_mel = commons.slice_segments( + mel, ids_slice, hps.train.segment_size // hps.data.hop_length + ) + with autocast(enabled=False): + y_hat_mel = mel_spectrogram_torch( + y_hat.float().squeeze(1), + hps.data.filter_length, + hps.data.n_mel_channels, + hps.data.sampling_rate, + hps.data.hop_length, + hps.data.win_length, + hps.data.mel_fmin, + hps.data.mel_fmax, + ) + if hps.train.fp16_run == True: + y_hat_mel = y_hat_mel.half() + wave = commons.slice_segments( + wave, ids_slice * hps.data.hop_length, hps.train.segment_size + ) + + y_d_hat_r, y_d_hat_g, _, _ = net_d(wave, y_hat.detach()) + with autocast(enabled=False): + loss_disc, losses_disc_r, losses_disc_g = discriminator_loss( + y_d_hat_r, y_d_hat_g + ) + optim_d.zero_grad() + scaler.scale(loss_disc).backward() + scaler.unscale_(optim_d) + grad_norm_d = commons.clip_grad_value_(net_d.parameters(), None) + scaler.step(optim_d) + + with autocast(enabled=hps.train.fp16_run): + y_d_hat_r, y_d_hat_g, fmap_r, fmap_g = net_d(wave, y_hat) + with autocast(enabled=False): + loss_mel = F.l1_loss(y_mel, y_hat_mel) * hps.train.c_mel + loss_kl = kl_loss(z_p, logs_q, m_p, logs_p, z_mask) * hps.train.c_kl + loss_fm = feature_loss(fmap_r, fmap_g) + loss_gen, losses_gen = generator_loss(y_d_hat_g) + loss_gen_all = loss_gen + loss_fm + loss_mel + loss_kl + + if loss_gen_all < lowest_value["value"]: + lowest_value["value"] = loss_gen_all + lowest_value["step"] = global_step + lowest_value["epoch"] = epoch + # print(f'Lowest generator loss updated: {lowest_value["value"]} at epoch {epoch}, step {global_step}') + if epoch > lowest_value["epoch"]: + print( + "Alert: The lower generating loss has been exceeded by a lower loss in a subsequent epoch." + ) + + optim_g.zero_grad() + scaler.scale(loss_gen_all).backward() + scaler.unscale_(optim_g) + grad_norm_g = commons.clip_grad_value_(net_g.parameters(), None) + scaler.step(optim_g) + scaler.update() + + if rank == 0: + if global_step % hps.train.log_interval == 0: + lr = optim_g.param_groups[0]["lr"] + # print("Epoch: {} [{:.0f}%]".format(epoch, 100.0 * batch_idx / len(train_loader))) + + if loss_mel > 75: + loss_mel = 75 + if loss_kl > 9: + loss_kl = 9 + + scalar_dict = { + "loss/g/total": loss_gen_all, + "loss/d/total": loss_disc, + "learning_rate": lr, + "grad_norm_d": grad_norm_d, + "grad_norm_g": grad_norm_g, + } + scalar_dict.update( + { + "loss/g/fm": loss_fm, + "loss/g/mel": loss_mel, + "loss/g/kl": loss_kl, + } + ) + + scalar_dict.update( + {"loss/g/{}".format(i): v for i, v in enumerate(losses_gen)} + ) + scalar_dict.update( + {"loss/d_r/{}".format(i): v for i, v in enumerate(losses_disc_r)} + ) + scalar_dict.update( + {"loss/d_g/{}".format(i): v for i, v in enumerate(losses_disc_g)} + ) + image_dict = { + "slice/mel_org": plot_spectrogram_to_numpy( + y_mel[0].data.cpu().numpy() + ), + "slice/mel_gen": plot_spectrogram_to_numpy( + y_hat_mel[0].data.cpu().numpy() + ), + "all/mel": plot_spectrogram_to_numpy(mel[0].data.cpu().numpy()), + } + summarize( + writer=writer, + global_step=global_step, + images=image_dict, + scalars=scalar_dict, + ) + + # optim_g.step() + # optim_d.step() + + global_step += 1 + + if epoch % hps.save_every_epoch == 0 and rank == 0: + checkpoint_suffix = "{}.pth".format( + global_step if hps.if_latest == 0 else 2333333 + ) + save_checkpoint( + net_g, + optim_g, + hps.train.learning_rate, + epoch, + os.path.join(hps.model_dir, "G_" + checkpoint_suffix), + ) + save_checkpoint( + net_d, + optim_d, + hps.train.learning_rate, + epoch, + os.path.join(hps.model_dir, "D_" + checkpoint_suffix), + ) + + if rank == 0 and hps.custom_save_every_weights == "1": + if hasattr(net_g, "module"): + ckpt = net_g.module.state_dict() + else: + ckpt = net_g.state_dict() + extract_model( + ckpt, + hps.sample_rate, + hps.if_f0, + hps.name, + os.path.join( + hps.model_dir, "{}_{}e_{}s.pth".format(hps.name, epoch, global_step) + ), + epoch, + global_step, + hps.version, + hps, + ) + + if hps.overtraining_detector == 1: + if epoch >= (lowest_value["epoch"] + hps.overtraining_threshold): + print( + "Stopping training due to possible overtraining. Lowest generator loss: {} at epoch {}, step {}".format( + lowest_value["value"], lowest_value["epoch"], lowest_value["step"] + ) + ) + os._exit(2333333) + + best_epoch = lowest_value["epoch"] + hps.overtraining_threshold - epoch + + if rank == 0: + if epoch > 1: + print( + f"{hps.name} | epoch={epoch} | step={global_step} | {epoch_recorder.record()} | lowest_value={lowest_value['value']} (epoch {lowest_value['epoch']} and step {lowest_value['step']}) | Number of epochs remaining for overtraining: {lowest_value['epoch'] + hps.overtraining_threshold - epoch}" + ) + else: + print( + f"{hps.name} | epoch={epoch} | step={global_step} | {epoch_recorder.record()}" + ) + last_loss_gen_all = loss_gen_all + + if best_epoch == hps.overtraining_threshold: + old_model_files = glob.glob( + os.path.join( + hps.model_dir, + "{}_{}e_{}s_best_epoch.pth".format(hps.name, "*", "*"), + ) + ) + for file in old_model_files: + os.remove(file) + + if hasattr(net_g, "module"): + ckpt = net_g.module.state_dict() + else: + ckpt = net_g.state_dict() + + extract_model( + ckpt, + hps.sample_rate, + hps.if_f0, + hps.name, + os.path.join( + hps.model_dir, + "{}_{}e_{}s_best_epoch.pth".format(hps.name, epoch, global_step), + ), + epoch, + global_step, + hps.version, + hps, + ) + + if epoch >= hps.custom_total_epoch and rank == 0: + print( + f"Training has been successfully completed with {epoch} epoch, {global_step} steps and {round(loss_gen_all.item(), 3)} loss gen." + ) + print( + f"Lowest generator loss: {lowest_value['value']} at epoch {lowest_value['epoch']}, step {lowest_value['step']}" + ) + + pid_file_path = os.path.join(now_dir, "rvc", "train", "train_pid.txt") + os.remove(pid_file_path) + + if hasattr(net_g, "module"): + ckpt = net_g.module.state_dict() + else: + ckpt = net_g.state_dict() + + extract_model( + ckpt, + hps.sample_rate, + hps.if_f0, + hps.name, + os.path.join( + hps.model_dir, "{}_{}e_{}s.pth".format(hps.name, epoch, global_step) + ), + epoch, + global_step, + hps.version, + hps, + ) + sleep(1) + os._exit(2333333) + + +if __name__ == "__main__": + torch.multiprocessing.set_start_method("spawn") + main() diff --git a/rvc/train/utils.py b/rvc/train/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..94192df7700430a0d769fa838dfb50caa741c8da --- /dev/null +++ b/rvc/train/utils.py @@ -0,0 +1,311 @@ +import os +import glob +import json +import torch +import argparse +import numpy as np +from scipy.io.wavfile import read +from collections import OrderedDict + + +def replace_keys_in_dict(d, old_key_part, new_key_part): + if isinstance(d, OrderedDict): + updated_dict = OrderedDict() + else: + updated_dict = {} + for key, value in d.items(): + if isinstance(key, str): + new_key = key.replace(old_key_part, new_key_part) + else: + new_key = key + if isinstance(value, dict): + value = replace_keys_in_dict(value, old_key_part, new_key_part) + updated_dict[new_key] = value + return updated_dict + + +def load_checkpoint(checkpoint_path, model, optimizer=None, load_opt=1): + assert os.path.isfile(checkpoint_path) + checkpoint_old_dict = torch.load(checkpoint_path, map_location="cpu") + checkpoint_new_version_path = os.path.join( + os.path.dirname(checkpoint_path), + f"{os.path.splitext(os.path.basename(checkpoint_path))[0]}_new_version.pth", + ) + + torch.save( + replace_keys_in_dict( + replace_keys_in_dict( + checkpoint_old_dict, ".weight_v", ".parametrizations.weight.original1" + ), + ".weight_g", + ".parametrizations.weight.original0", + ), + checkpoint_new_version_path, + ) + + os.remove(checkpoint_path) + os.rename(checkpoint_new_version_path, checkpoint_path) + + checkpoint_dict = torch.load(checkpoint_path, map_location="cpu") + saved_state_dict = checkpoint_dict["model"] + if hasattr(model, "module"): + state_dict = model.module.state_dict() + else: + state_dict = model.state_dict() + new_state_dict = {} + for k, v in state_dict.items(): + try: + new_state_dict[k] = saved_state_dict[k] + if saved_state_dict[k].shape != state_dict[k].shape: + print( + "shape-%s-mismatch|need-%s|get-%s", + k, + state_dict[k].shape, + saved_state_dict[k].shape, + ) + raise KeyError + except: + print("%s is not in the checkpoint", k) + new_state_dict[k] = v + if hasattr(model, "module"): + model.module.load_state_dict(new_state_dict, strict=False) + else: + model.load_state_dict(new_state_dict, strict=False) + + iteration = checkpoint_dict["iteration"] + learning_rate = checkpoint_dict["learning_rate"] + if optimizer is not None and load_opt == 1: + optimizer.load_state_dict(checkpoint_dict["optimizer"]) + print(f"Loaded checkpoint '{checkpoint_path}' (epoch {iteration})") + return model, optimizer, learning_rate, iteration + + +def save_checkpoint(model, optimizer, learning_rate, iteration, checkpoint_path): + print(f"Saved model '{checkpoint_path}' (epoch {iteration})") + checkpoint_old_version_path = os.path.join( + os.path.dirname(checkpoint_path), + f"{os.path.splitext(os.path.basename(checkpoint_path))[0]}_old_version.pth", + ) + if hasattr(model, "module"): + state_dict = model.module.state_dict() + else: + state_dict = model.state_dict() + torch.save( + { + "model": state_dict, + "iteration": iteration, + "optimizer": optimizer.state_dict(), + "learning_rate": learning_rate, + }, + checkpoint_path, + ) + checkpoint = torch.load(checkpoint_path, map_location=torch.device("cpu")) + torch.save( + replace_keys_in_dict( + replace_keys_in_dict( + checkpoint, ".parametrizations.weight.original1", ".weight_v" + ), + ".parametrizations.weight.original0", + ".weight_g", + ), + checkpoint_old_version_path, + ) + os.remove(checkpoint_path) + os.rename(checkpoint_old_version_path, checkpoint_path) + + +def summarize( + writer, + global_step, + scalars={}, + histograms={}, + images={}, + audios={}, + audio_sampling_rate=22050, +): + for k, v in scalars.items(): + writer.add_scalar(k, v, global_step) + for k, v in histograms.items(): + writer.add_histogram(k, v, global_step) + for k, v in images.items(): + writer.add_image(k, v, global_step, dataformats="HWC") + for k, v in audios.items(): + writer.add_audio(k, v, global_step, audio_sampling_rate) + + +def latest_checkpoint_path(dir_path, regex="G_*.pth"): + f_list = glob.glob(os.path.join(dir_path, regex)) + f_list.sort(key=lambda f: int("".join(filter(str.isdigit, f)))) + x = f_list[-1] + return x + + +def plot_spectrogram_to_numpy(spectrogram): + import matplotlib.pylab as plt + import numpy as np + + fig, ax = plt.subplots(figsize=(10, 2)) + im = ax.imshow(spectrogram, aspect="auto", origin="lower", interpolation="none") + plt.colorbar(im, ax=ax) + plt.xlabel("Frames") + plt.ylabel("Channels") + plt.tight_layout() + + fig.canvas.draw() + data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep="") + data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,)) + plt.close() + return data + + +def load_wav_to_torch(full_path): + sampling_rate, data = read(full_path) + return torch.FloatTensor(data.astype(np.float32)), sampling_rate + + +def load_filepaths_and_text(filename, split="|"): + with open(filename, encoding="utf-8") as f: + filepaths_and_text = [line.strip().split(split) for line in f] + return filepaths_and_text + + +def get_hparams(): + parser = argparse.ArgumentParser() + parser.add_argument( + "-se", + "--save_every_epoch", + type=int, + required=True, + help="checkpoint save frequency (epoch)", + ) + parser.add_argument( + "-te", "--total_epoch", type=int, required=True, help="total_epoch" + ) + parser.add_argument( + "-pg", "--pretrainG", type=str, default="", help="Pretrained Discriminator path" + ) + parser.add_argument( + "-pd", "--pretrainD", type=str, default="", help="Pretrained Generator path" + ) + parser.add_argument("-g", "--gpus", type=str, default="0", help="split by -") + parser.add_argument( + "-bs", "--batch_size", type=int, required=True, help="batch size" + ) + parser.add_argument( + "-e", "--experiment_dir", type=str, required=True, help="experiment dir" + ) + parser.add_argument( + "-sr", "--sample_rate", type=str, required=True, help="sample rate, 32k/40k/48k" + ) + parser.add_argument( + "-sw", + "--save_every_weights", + type=str, + default="0", + help="save the extracted model in weights directory when saving checkpoints", + ) + parser.add_argument( + "-v", "--version", type=str, required=True, help="model version" + ) + parser.add_argument( + "-f0", + "--if_f0", + type=int, + required=True, + help="use f0 as one of the inputs of the model, 1 or 0", + ) + parser.add_argument( + "-l", + "--if_latest", + type=int, + required=True, + help="if only save the latest G/D pth file, 1 or 0", + ) + parser.add_argument( + "-c", + "--if_cache_data_in_gpu", + type=int, + required=True, + help="if caching the dataset in GPU memory, 1 or 0", + ) + + parser.add_argument( + "-od", + "--overtraining_detector", + type=int, + required=True, + help="Detect overtraining or not, 1 or 0", + ) + parser.add_argument( + "-ot", + "--overtraining_threshold", + type=int, + default=50, + help="overtraining_threshold", + ) + parser.add_argument( + "-sg", + "--sync-graph", + type=int, + required=True, + help="Sync graph or not, 1 or 0", + ) + + args = parser.parse_args() + name = args.experiment_dir + experiment_dir = os.path.join("./logs", args.experiment_dir) + config_save_path = os.path.join(experiment_dir, "config.json") + with open(config_save_path, "r") as f: + config = json.load(f) + hparams = HParams(**config) + hparams.model_dir = hparams.experiment_dir = experiment_dir + hparams.save_every_epoch = args.save_every_epoch + hparams.name = name + hparams.total_epoch = args.total_epoch + hparams.pretrainG = args.pretrainG + hparams.pretrainD = args.pretrainD + hparams.version = args.version + hparams.gpus = args.gpus + hparams.train.batch_size = args.batch_size + hparams.sample_rate = args.sample_rate + hparams.if_f0 = args.if_f0 + hparams.if_latest = args.if_latest + hparams.save_every_weights = args.save_every_weights + hparams.if_cache_data_in_gpu = args.if_cache_data_in_gpu + hparams.data.training_files = f"{experiment_dir}/filelist.txt" + hparams.overtraining_detector = args.overtraining_detector + hparams.overtraining_threshold = args.overtraining_threshold + hparams.sync_graph = args.sync_graph + return hparams + + +class HParams: + def __init__(self, **kwargs): + for k, v in kwargs.items(): + if type(v) == dict: + v = HParams(**v) + self[k] = v + + def keys(self): + return self.__dict__.keys() + + def items(self): + return self.__dict__.items() + + def values(self): + return self.__dict__.values() + + def __len__(self): + return len(self.__dict__) + + def __getitem__(self, key): + return getattr(self, key) + + def __setitem__(self, key, value): + return setattr(self, key, value) + + def __contains__(self, key): + return key in self.__dict__ + + def __repr__(self): + return self.__dict__.__repr__() diff --git a/rvc_for_realtime.py b/rvc_for_realtime.py deleted file mode 100644 index 55070f668c385ba0a9ba50989b282448cd75e59b..0000000000000000000000000000000000000000 --- a/rvc_for_realtime.py +++ /dev/null @@ -1,297 +0,0 @@ -import faiss, torch, traceback, parselmouth, numpy as np, torchcrepe, torch.nn as nn, pyworld -from fairseq import checkpoint_utils -from lib.infer_pack.models import ( - SynthesizerTrnMs256NSFsid, - SynthesizerTrnMs256NSFsid_nono, - SynthesizerTrnMs768NSFsid, - SynthesizerTrnMs768NSFsid_nono, -) -import os, sys -from time import time as ttime -import torch.nn.functional as F -import scipy.signal as signal - -now_dir = os.getcwd() -sys.path.append(now_dir) -from configs.config import Config -from multiprocessing import Manager as M - -mm = M() -config = Config() - - -class RVC: - def __init__( - self, key, pth_path, index_path, index_rate, n_cpu, inp_q, opt_q, device - ) -> None: - """ - 初始化 - """ - try: - global config - self.inp_q = inp_q - self.opt_q = opt_q - self.device = device - self.f0_up_key = key - self.time_step = 160 / 16000 * 1000 - self.f0_min = 50 - self.f0_max = 1100 - self.f0_mel_min = 1127 * np.log(1 + self.f0_min / 700) - self.f0_mel_max = 1127 * np.log(1 + self.f0_max / 700) - self.sr = 16000 - self.window = 160 - self.n_cpu = n_cpu - if index_rate != 0: - self.index = faiss.read_index(index_path) - self.big_npy = self.index.reconstruct_n(0, self.index.ntotal) - print("index search enabled") - self.index_rate = index_rate - models, _, _ = checkpoint_utils.load_model_ensemble_and_task( - ["hubert_base.pt"], - suffix="", - ) - hubert_model = models[0] - hubert_model = hubert_model.to(config.device) - if config.is_half: - hubert_model = hubert_model.half() - else: - hubert_model = hubert_model.float() - hubert_model.eval() - self.model = hubert_model - cpt = torch.load(pth_path, map_location="cpu") - self.tgt_sr = cpt["config"][-1] - cpt["config"][-3] = cpt["weight"]["emb_g.weight"].shape[0] - self.if_f0 = cpt.get("f0", 1) - self.version = cpt.get("version", "v1") - if self.version == "v1": - if self.if_f0 == 1: - self.net_g = SynthesizerTrnMs256NSFsid( - *cpt["config"], is_half=config.is_half - ) - else: - self.net_g = SynthesizerTrnMs256NSFsid_nono(*cpt["config"]) - elif self.version == "v2": - if self.if_f0 == 1: - self.net_g = SynthesizerTrnMs768NSFsid( - *cpt["config"], is_half=config.is_half - ) - else: - self.net_g = SynthesizerTrnMs768NSFsid_nono(*cpt["config"]) - del self.net_g.enc_q - print(self.net_g.load_state_dict(cpt["weight"], strict=False)) - self.net_g.eval().to(device) - if config.is_half: - self.net_g = self.net_g.half() - else: - self.net_g = self.net_g.float() - self.is_half = config.is_half - except: - print(traceback.format_exc()) - - def get_f0_post(self, f0): - f0_min = self.f0_min - f0_max = self.f0_max - f0_mel_min = 1127 * np.log(1 + f0_min / 700) - f0_mel_max = 1127 * np.log(1 + f0_max / 700) - f0bak = f0.copy() - f0_mel = 1127 * np.log(1 + f0 / 700) - f0_mel[f0_mel > 0] = (f0_mel[f0_mel > 0] - f0_mel_min) * 254 / ( - f0_mel_max - f0_mel_min - ) + 1 - f0_mel[f0_mel <= 1] = 1 - f0_mel[f0_mel > 255] = 255 - f0_coarse = np.rint(f0_mel).astype(np.int_) - return f0_coarse, f0bak - - def get_f0(self, x, f0_up_key, n_cpu, method="harvest"): - n_cpu = int(n_cpu) - if method == "crepe": - return self.get_f0_crepe(x, f0_up_key) - if method == "rmvpe": - return self.get_f0_rmvpe(x, f0_up_key) - if method == "pm": - p_len = x.shape[0] // 160 - f0 = ( - parselmouth.Sound(x, 16000) - .to_pitch_ac( - time_step=0.01, - voicing_threshold=0.6, - pitch_floor=50, - pitch_ceiling=1100, - ) - .selected_array["frequency"] - ) - - pad_size = (p_len - len(f0) + 1) // 2 - if pad_size > 0 or p_len - len(f0) - pad_size > 0: - print(pad_size, p_len - len(f0) - pad_size) - f0 = np.pad( - f0, [[pad_size, p_len - len(f0) - pad_size]], mode="constant" - ) - - f0 *= pow(2, f0_up_key / 12) - return self.get_f0_post(f0) - if n_cpu == 1: - f0, t = pyworld.harvest( - x.astype(np.double), - fs=16000, - f0_ceil=1100, - f0_floor=50, - frame_period=10, - ) - f0 = signal.medfilt(f0, 3) - f0 *= pow(2, f0_up_key / 12) - return self.get_f0_post(f0) - f0bak = np.zeros(x.shape[0] // 160, dtype=np.float64) - length = len(x) - part_length = int(length / n_cpu / 160) * 160 - ts = ttime() - res_f0 = mm.dict() - for idx in range(n_cpu): - tail = part_length * (idx + 1) + 320 - if idx == 0: - self.inp_q.put((idx, x[:tail], res_f0, n_cpu, ts)) - else: - self.inp_q.put( - (idx, x[part_length * idx - 320 : tail], res_f0, n_cpu, ts) - ) - while 1: - res_ts = self.opt_q.get() - if res_ts == ts: - break - f0s = [i[1] for i in sorted(res_f0.items(), key=lambda x: x[0])] - for idx, f0 in enumerate(f0s): - if idx == 0: - f0 = f0[:-3] - elif idx != n_cpu - 1: - f0 = f0[2:-3] - else: - f0 = f0[2:-1] - f0bak[ - part_length * idx // 160 : part_length * idx // 160 + f0.shape[0] - ] = f0 - f0bak = signal.medfilt(f0bak, 3) - f0bak *= pow(2, f0_up_key / 12) - return self.get_f0_post(f0bak) - - def get_f0_crepe(self, x, f0_up_key): - audio = torch.tensor(np.copy(x))[None].float() - f0, pd = torchcrepe.predict( - audio, - self.sr, - 160, - self.f0_min, - self.f0_max, - "full", - batch_size=512, - device=self.device, - return_periodicity=True, - ) - pd = torchcrepe.filter.median(pd, 3) - f0 = torchcrepe.filter.mean(f0, 3) - f0[pd < 0.1] = 0 - f0 = f0[0].cpu().numpy() - f0 *= pow(2, f0_up_key / 12) - return self.get_f0_post(f0) - - def get_f0_rmvpe(self, x, f0_up_key): - if hasattr(self, "model_rmvpe") == False: - from infer.lib.rmvpe import RMVPE - - print("loading rmvpe model") - self.model_rmvpe = RMVPE( - "rmvpe.pt", is_half=self.is_half, device=self.device - ) - # self.model_rmvpe = RMVPE("aug2_58000_half.pt", is_half=self.is_half, device=self.device) - f0 = self.model_rmvpe.infer_from_audio(x, thred=0.03) - f0 *= pow(2, f0_up_key / 12) - return self.get_f0_post(f0) - - def infer( - self, - feats: torch.Tensor, - indata: np.ndarray, - rate1, - rate2, - cache_pitch, - cache_pitchf, - f0method, - ) -> np.ndarray: - feats = feats.view(1, -1) - if config.is_half: - feats = feats.half() - else: - feats = feats.float() - feats = feats.to(self.device) - t1 = ttime() - with torch.no_grad(): - padding_mask = torch.BoolTensor(feats.shape).to(self.device).fill_(False) - inputs = { - "source": feats, - "padding_mask": padding_mask, - "output_layer": 9 if self.version == "v1" else 12, - } - logits = self.model.extract_features(**inputs) - feats = ( - self.model.final_proj(logits[0]) if self.version == "v1" else logits[0] - ) - t2 = ttime() - try: - if hasattr(self, "index") and self.index_rate != 0: - leng_replace_head = int(rate1 * feats[0].shape[0]) - npy = feats[0][-leng_replace_head:].cpu().numpy().astype("float32") - score, ix = self.index.search(npy, k=8) - weight = np.square(1 / score) - weight /= weight.sum(axis=1, keepdims=True) - npy = np.sum(self.big_npy[ix] * np.expand_dims(weight, axis=2), axis=1) - if config.is_half: - npy = npy.astype("float16") - feats[0][-leng_replace_head:] = ( - torch.from_numpy(npy).unsqueeze(0).to(self.device) * self.index_rate - + (1 - self.index_rate) * feats[0][-leng_replace_head:] - ) - else: - print("index search FAIL or disabled") - except: - traceback.print_exc() - print("index search FAIL") - feats = F.interpolate(feats.permute(0, 2, 1), scale_factor=2).permute(0, 2, 1) - t3 = ttime() - if self.if_f0 == 1: - pitch, pitchf = self.get_f0(indata, self.f0_up_key, self.n_cpu, f0method) - cache_pitch[:] = np.append(cache_pitch[pitch[:-1].shape[0] :], pitch[:-1]) - cache_pitchf[:] = np.append( - cache_pitchf[pitchf[:-1].shape[0] :], pitchf[:-1] - ) - p_len = min(feats.shape[1], 13000, cache_pitch.shape[0]) - else: - cache_pitch, cache_pitchf = None, None - p_len = min(feats.shape[1], 13000) - t4 = ttime() - feats = feats[:, :p_len, :] - if self.if_f0 == 1: - cache_pitch = cache_pitch[:p_len] - cache_pitchf = cache_pitchf[:p_len] - cache_pitch = torch.LongTensor(cache_pitch).unsqueeze(0).to(self.device) - cache_pitchf = torch.FloatTensor(cache_pitchf).unsqueeze(0).to(self.device) - p_len = torch.LongTensor([p_len]).to(self.device) - ii = 0 # sid - sid = torch.LongTensor([ii]).to(self.device) - with torch.no_grad(): - if self.if_f0 == 1: - infered_audio = ( - self.net_g.infer( - feats, p_len, cache_pitch, cache_pitchf, sid, rate2 - )[0][0, 0] - .data.cpu() - .float() - ) - else: - infered_audio = ( - self.net_g.infer(feats, p_len, sid, rate2)[0][0, 0] - .data.cpu() - .float() - ) - t5 = ttime() - print("time->fea-index-f0-model:", t2 - t1, t3 - t2, t4 - t3, t5 - t4) - return infered_audio diff --git a/separated/.gitkeep b/separated/.gitkeep deleted file mode 100644 index 8b137891791fe96927ad78e64b0aad7bded08bdc..0000000000000000000000000000000000000000 --- a/separated/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/stftpitchshift b/stftpitchshift deleted file mode 100644 index 4f62e31529b9aafede1b7c08de1f41b980fdf132..0000000000000000000000000000000000000000 --- a/stftpitchshift +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:eb2f50ea8e5ca1a11a587f11f25ba9182f9b24e2367ac480f430b3f04062782e -size 1822104 diff --git a/stftpitchshift.exe b/stftpitchshift.exe deleted file mode 100644 index 39c73ad888644657dc44dd7df62e1a77859355f9..0000000000000000000000000000000000000000 Binary files a/stftpitchshift.exe and /dev/null differ diff --git a/tabs/download/download.py b/tabs/download/download.py new file mode 100644 index 0000000000000000000000000000000000000000..5e51d1fe0964ad0451a3730bb8aaba345e6f5bc6 --- /dev/null +++ b/tabs/download/download.py @@ -0,0 +1,188 @@ +import os, sys, shutil +import tempfile +import gradio as gr +import pandas as pd +import requests +import wget +from core import run_download_script + +from assets.i18n.i18n import I18nAuto + +from rvc.lib.utils import format_title + +i18n = I18nAuto() + +now_dir = os.getcwd() +sys.path.append(now_dir) + +gradio_temp_dir = os.path.join(tempfile.gettempdir(), "gradio") + +if os.path.exists(gradio_temp_dir): + shutil.rmtree(gradio_temp_dir) + + +def save_drop_model(dropbox): + if "pth" not in dropbox and "index" not in dropbox: + raise gr.Error( + message="The file you dropped is not a valid model file. Please try again." + ) + else: + file_name = format_title(os.path.basename(dropbox)) + if ".pth" in dropbox: + model_name = format_title(file_name.split(".pth")[0]) + else: + if "v2" not in dropbox: + model_name = format_title( + file_name.split("_nprobe_1_")[1].split("_v1")[0] + ) + else: + model_name = format_title( + file_name.split("_nprobe_1_")[1].split("_v2")[0] + ) + model_path = os.path.join(now_dir, "logs", model_name) + if not os.path.exists(model_path): + os.makedirs(model_path) + if os.path.exists(os.path.join(model_path, file_name)): + os.remove(os.path.join(model_path, file_name)) + shutil.move(dropbox, os.path.join(model_path, file_name)) + print(f"{file_name} saved in {model_path}") + gr.Info(f"{file_name} saved in {model_path}") + return None + + +def search_models(name): + url = f"https://cjtfqzjfdimgpvpwhzlv.supabase.co/rest/v1/models?name=ilike.%25{name}%25&order=created_at.desc&limit=15" + headers = { + "apikey": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImNqdGZxempmZGltZ3B2cHdoemx2Iiwicm9sZSI6ImFub24iLCJpYXQiOjE2OTUxNjczODgsImV4cCI6MjAxMDc0MzM4OH0.7z5WMIbjR99c2Ooc0ma7B_FyGq10G8X-alkCYTkKR10" + } + response = requests.get(url, headers=headers) + data = response.json() + if len(data) == 0: + gr.Info(i18n("We couldn't find models by that name.")) + return None + else: + df = pd.DataFrame(data)[["name", "link", "epochs", "type"]] + df["link"] = df["link"].apply( + lambda x: f'<a href="{x}" target="_blank">{x}</a>' + ) + return df + + +json_url = "https://huggingface.co/IAHispano/Applio/raw/main/pretrains.json" + + +def fetch_pretrained_data(): + response = requests.get(json_url) + response.raise_for_status() + return response.json() + + +def get_pretrained_list(): + data = fetch_pretrained_data() + return list(data.keys()) + + +def get_pretrained_sample_rates(model): + data = fetch_pretrained_data() + return list(data[model].keys()) + + +def download_pretrained_model(model, sample_rate): + data = fetch_pretrained_data() + paths = data[model][sample_rate] + pretraineds_custom_path = os.path.join("rvc", "pretraineds", "pretraineds_custom") + os.makedirs(pretraineds_custom_path, exist_ok=True) + + d_url = f"https://huggingface.co/{paths['D']}" + g_url = f"https://huggingface.co/{paths['G']}" + + gr.Info("Downloading Pretrained Model...") + print("Downloading Pretrained Model...") + wget.download(d_url, out=pretraineds_custom_path) + wget.download(g_url, out=pretraineds_custom_path) + + +def update_sample_rate_dropdown(model): + return { + "choices": get_pretrained_sample_rates(model), + "value": get_pretrained_sample_rates(model)[0], + "__type__": "update", + } + + +def download_tab(): + with gr.Column(): + gr.Markdown(value=i18n("## Download Model")) + model_link = gr.Textbox( + label=i18n("Model Link"), + placeholder=i18n("Introduce the model link"), + interactive=True, + ) + model_download_output_info = gr.Textbox( + label=i18n("Output Information"), + info=i18n("The output information will be displayed here."), + value="", + max_lines=8, + interactive=False, + ) + model_download_button = gr.Button(i18n("Download Model")) + model_download_button.click( + fn=run_download_script, + inputs=[model_link], + outputs=[model_download_output_info], + api_name="model_download", + ) + gr.Markdown(value=i18n("## Drop files")) + dropbox = gr.File( + label=i18n( + "Drag your .pth file and .index file into this space. Drag one and then the other." + ), + type="filepath", + ) + + dropbox.upload( + fn=save_drop_model, + inputs=[dropbox], + outputs=[dropbox], + ) + gr.Markdown(value=i18n("## Search Model")) + search_name = gr.Textbox( + label=i18n("Model Name"), + placeholder=i18n("Introduce the model name to search."), + interactive=True, + ) + search_table = gr.Dataframe(datatype="markdown") + search = gr.Button(i18n("Search")) + search.click( + fn=search_models, + inputs=[search_name], + outputs=[search_table], + ) + search_name.submit(search_models, [search_name], search_table) + gr.Markdown(value=i18n("## Download Pretrained Models")) + pretrained_model = gr.Dropdown( + label=i18n("Pretrained"), + info=i18n("Select the pretrained model you want to download."), + choices=get_pretrained_list(), + value="Titan", + interactive=True, + ) + pretrained_sample_rate = gr.Dropdown( + label=i18n("Sampling Rate"), + info=i18n("And select the sampling rate."), + choices=get_pretrained_sample_rates(pretrained_model.value), + value="40k", + interactive=True, + allow_custom_value=True, + ) + pretrained_model.change( + update_sample_rate_dropdown, + inputs=[pretrained_model], + outputs=[pretrained_sample_rate], + ) + download_pretrained = gr.Button(i18n("Download")) + download_pretrained.click( + fn=download_pretrained_model, + inputs=[pretrained_model, pretrained_sample_rate], + outputs=[], + ) diff --git a/tabs/extra/analyzer/analyzer.py b/tabs/extra/analyzer/analyzer.py new file mode 100644 index 0000000000000000000000000000000000000000..5ae8c862e378765bc3cc348c538504b68dea7cb3 --- /dev/null +++ b/tabs/extra/analyzer/analyzer.py @@ -0,0 +1,32 @@ +import os, sys +import gradio as gr + +now_dir = os.getcwd() +sys.path.append(now_dir) + +from core import run_audio_analyzer_script +from assets.i18n.i18n import I18nAuto + +i18n = I18nAuto() + + +def analyzer(): + with gr.Column(): + audio_input = gr.Audio(type="filepath") + output_info = gr.Textbox( + label=i18n("Output Information"), + info=i18n("The output information will be displayed here."), + value="", + max_lines=8, + interactive=False, + ) + get_info_button = gr.Button( + value=i18n("Get information about the audio"), variant="primary" + ) + image_output = gr.Image(type="filepath", interactive=False) + + get_info_button.click( + fn=run_audio_analyzer_script, + inputs=[audio_input], + outputs=[output_info, image_output], + ) diff --git a/tabs/extra/extra.py b/tabs/extra/extra.py new file mode 100644 index 0000000000000000000000000000000000000000..5e7d81c2c6b978dfde47a8a1b611bb2395743455 --- /dev/null +++ b/tabs/extra/extra.py @@ -0,0 +1,22 @@ +import gradio as gr + +import tabs.extra.processing.processing as processing +import tabs.extra.analyzer.analyzer as analyzer + +from assets.i18n.i18n import I18nAuto + +i18n = I18nAuto() + + +def extra_tab(): + gr.Markdown( + value=i18n( + "This section contains some extra utilities that often may be in experimental phases." + ) + ) + +# with gr.TabItem(i18n("Processing")): +# processing.processing() + + with gr.TabItem(i18n("Audio Analyzer")): + analyzer.analyzer() diff --git a/tabs/extra/model_information.py b/tabs/extra/model_information.py new file mode 100644 index 0000000000000000000000000000000000000000..8d39c996d1915969d12d44f62210d5d502cf7d19 --- /dev/null +++ b/tabs/extra/model_information.py @@ -0,0 +1,30 @@ +import gradio as gr +from core import run_model_information_script + +from assets.i18n.i18n import I18nAuto + +i18n = I18nAuto() + + +def model_information_tab(): + with gr.Column(): + model_name = gr.Textbox( + label=i18n("Path to Model"), + info=i18n("Introduce the model pth path"), + placeholder=i18n("Introduce the model pth path"), + interactive=True, + ) + model_information_output_info = gr.Textbox( + label=i18n("Output Information"), + info=i18n("The output information will be displayed here."), + value="", + max_lines=8, + interactive=False, + ) + model_information_button = gr.Button(i18n("See Model Information")) + model_information_button.click( + fn=run_model_information_script, + inputs=[model_name], + outputs=[model_information_output_info], + api_name="model_information", + ) diff --git a/tabs/extra/processing/processing.py b/tabs/extra/processing/processing.py new file mode 100644 index 0000000000000000000000000000000000000000..cd119f2e6b7817dd9f363026c17a93bd46901e27 --- /dev/null +++ b/tabs/extra/processing/processing.py @@ -0,0 +1,38 @@ +import os, sys + +now_dir = os.getcwd() +sys.path.append(now_dir) + +from core import run_model_information_script +from assets.i18n.i18n import I18nAuto + +i18n = I18nAuto() + +import gradio as gr + + +def processing(): + with gr.Accordion(label=i18n("View model information")): + with gr.Row(): + with gr.Column(): + model_view_model_path = gr.Textbox( + label=i18n("Path to Model"), + info=i18n("Introduce the model pth path"), + value="", + interactive=True, + placeholder=i18n("Enter path to model"), + ) + + model_view_output_info = gr.Textbox( + label=i18n("Output Information"), + info=i18n("The output information will be displayed here."), + value="", + max_lines=8, + ) + model_view_button = gr.Button(i18n("View"), variant="primary") + model_view_button.click( + fn=run_model_information_script, + inputs=[model_view_model_path], + outputs=[model_view_output_info], + api_name="model_info", + ) diff --git a/tabs/inference/inference.py b/tabs/inference/inference.py new file mode 100644 index 0000000000000000000000000000000000000000..26394039d221c7888e39538d321f8df963d18884 --- /dev/null +++ b/tabs/inference/inference.py @@ -0,0 +1,805 @@ +import os, sys +import gradio as gr +import regex as re +import shutil +import datetime +import random + +from core import ( + run_infer_script, + run_batch_infer_script, +) + +from assets.i18n.i18n import I18nAuto + +from rvc.lib.utils import format_title + +i18n = I18nAuto() + +now_dir = os.getcwd() +sys.path.append(now_dir) + +model_root = os.path.join(now_dir, "logs") +audio_root = os.path.join(now_dir, "assets", "audios") +custom_embedder_root = os.path.join(now_dir, "rvc", "embedders", "embedders_custom") + +os.makedirs(custom_embedder_root, exist_ok=True) + +custom_embedder_root_relative = os.path.relpath(custom_embedder_root, now_dir) +model_root_relative = os.path.relpath(model_root, now_dir) +audio_root_relative = os.path.relpath(audio_root, now_dir) + +sup_audioext = { + "wav", + "mp3", + "flac", + "ogg", + "opus", + "m4a", + "mp4", + "aac", + "alac", + "wma", + "aiff", + "webm", + "ac3", +} + +names = [ + os.path.join(root, file) + for root, _, files in os.walk(model_root_relative, topdown=False) + for file in files + if ( + file.endswith((".pth", ".onnx")) + and not (file.startswith("G_") or file.startswith("D_")) + ) +] + +indexes_list = [ + os.path.join(root, name) + for root, _, files in os.walk(model_root_relative, topdown=False) + for name in files + if name.endswith(".index") and "trained" not in name +] + +audio_paths = [ + os.path.join(root, name) + for root, _, files in os.walk(audio_root_relative, topdown=False) + for name in files + if name.endswith(tuple(sup_audioext)) + and root == audio_root_relative + and "_output" not in name +] + +custom_embedders = [ + os.path.join(dirpath, filename) + for dirpath, _, filenames in os.walk(custom_embedder_root_relative) + for filename in filenames + if filename.endswith(".pt") +] + + +def output_path_fn(input_audio_path): + original_name_without_extension = os.path.basename(input_audio_path).rsplit(".", 1)[ + 0 + ] + new_name = original_name_without_extension + "_output.wav" + output_path = os.path.join(os.path.dirname(input_audio_path), new_name) + return output_path + + +def change_choices(): + names = [ + os.path.join(root, file) + for root, _, files in os.walk(model_root_relative, topdown=False) + for file in files + if ( + file.endswith((".pth", ".onnx")) + and not (file.startswith("G_") or file.startswith("D_")) + ) + ] + + indexes_list = [ + os.path.join(root, name) + for root, _, files in os.walk(model_root_relative, topdown=False) + for name in files + if name.endswith(".index") and "trained" not in name + ] + + audio_paths = [ + os.path.join(root, name) + for root, _, files in os.walk(audio_root_relative, topdown=False) + for name in files + if name.endswith(tuple(sup_audioext)) + and root == audio_root_relative + and "_output" not in name + ] + + custom_embedder = [ + os.path.join(dirpath, filename) + for dirpath, _, filenames in os.walk(custom_embedder_root_relative) + for filename in filenames + if filename.endswith(".pt") + ] + + return ( + {"choices": sorted(names), "__type__": "update"}, + {"choices": sorted(indexes_list), "__type__": "update"}, + {"choices": sorted(audio_paths), "__type__": "update"}, + {"choices": sorted(custom_embedder), "__type__": "update"}, + {"choices": sorted(custom_embedder), "__type__": "update"}, + ) + + +def get_indexes(): + indexes_list = [ + os.path.join(dirpath, filename) + for dirpath, _, filenames in os.walk(model_root_relative) + for filename in filenames + if filename.endswith(".index") and "trained" not in filename + ] + + return indexes_list if indexes_list else "" + + +def save_to_wav(record_button): + if record_button is None: + pass + else: + path_to_file = record_button + new_name = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + ".wav" + target_path = os.path.join(audio_root_relative, os.path.basename(new_name)) + + shutil.move(path_to_file, target_path) + return target_path, output_path_fn(target_path) + + +def save_to_wav2(upload_audio): + file_path = upload_audio + formated_name = format_title(os.path.basename(file_path)) + target_path = os.path.join(audio_root_relative, formated_name) + + if os.path.exists(target_path): + os.remove(target_path) + + shutil.copy(file_path, target_path) + return target_path, output_path_fn(target_path) + + +def delete_outputs(): + gr.Info(f"Outputs cleared!") + for root, _, files in os.walk(audio_root_relative, topdown=False): + for name in files: + if name.endswith(tuple(sup_audioext)) and name.__contains__("_output"): + os.remove(os.path.join(root, name)) + + +def match_index(model_file_value): + if model_file_value: + model_folder = os.path.dirname(model_file_value) + index_files = get_indexes() + for index_file in index_files: + if os.path.dirname(index_file) == model_folder: + return index_file + return "" + + +def save_drop_custom_embedder(dropbox): + if ".pt" not in dropbox: + gr.Info( + i18n("The file you dropped is not a valid embedder file. Please try again.") + ) + else: + file_name = os.path.basename(dropbox) + custom_embedder_path = os.path.join(custom_embedder_root, file_name) + if os.path.exists(custom_embedder_path): + os.remove(custom_embedder_path) + os.rename(dropbox, custom_embedder_path) + gr.Info( + i18n( + "Click the refresh button to see the embedder file in the dropdown menu." + ) + ) + return None + + +# Inference tab +def inference_tab(): + default_weight = random.choice(names) if names else None + with gr.Row(): + with gr.Row(): + model_file = gr.Dropdown( + label=i18n("Voice Model"), + info=i18n("Select the voice model to use for the conversion."), + choices=sorted(names, key=lambda path: os.path.getsize(path)), + interactive=True, + value=default_weight, + allow_custom_value=True, + ) + + index_file = gr.Dropdown( + label=i18n("Index File"), + info=i18n("Select the index file to use for the conversion."), + choices=get_indexes(), + value=match_index(default_weight) if default_weight else "", + interactive=True, + allow_custom_value=True, + ) + with gr.Column(): + refresh_button = gr.Button(i18n("Refresh")) + unload_button = gr.Button(i18n("Unload Voice")) + + unload_button.click( + fn=lambda: ( + {"value": "", "__type__": "update"}, + {"value": "", "__type__": "update"}, + ), + inputs=[], + outputs=[model_file, index_file], + ) + + model_file.select( + fn=lambda model_file_value: match_index(model_file_value), + inputs=[model_file], + outputs=[index_file], + ) + + # Single inference tab + with gr.Tab(i18n("Single")): + with gr.Column(): + upload_audio = gr.Audio( + label=i18n("Upload Audio"), type="filepath", editable=False + ) + with gr.Row(): + audio = gr.Dropdown( + label=i18n("Select Audio"), + info=i18n("Select the audio to convert."), + choices=sorted(audio_paths), + value=audio_paths[0] if audio_paths else "", + interactive=True, + allow_custom_value=True, + ) + + with gr.Accordion(i18n("Advanced Settings"), open=False): + with gr.Column(): + clear_outputs_infer = gr.Button( + i18n("Clear Outputs (Deletes all audios in assets/audios)") + ) + output_path = gr.Textbox( + label=i18n("Output Path"), + placeholder=i18n("Enter output path"), + info=i18n( + "The path where the output audio will be saved, by default in assets/audios/output.wav" + ), + value=( + output_path_fn(audio_paths[0]) + if audio_paths + else os.path.join(now_dir, "assets", "audios", "output.wav") + ), + interactive=True, + ) + export_format = gr.Radio( + label=i18n("Export Format"), + info=i18n("Select the format to export the audio."), + choices=["WAV", "MP3", "FLAC", "OGG", "M4A"], + value="WAV", + interactive=True, + ) + split_audio = gr.Checkbox( + label=i18n("Split Audio"), + info=i18n( + "Split the audio into chunks for inference to obtain better results in some cases." + ), + visible=True, + value=False, + interactive=True, + ) + autotune = gr.Checkbox( + label=i18n("Autotune"), + info=i18n( + "Apply a soft autotune to your inferences, recommended for singing conversions." + ), + visible=True, + value=False, + interactive=True, + ) + clean_audio = gr.Checkbox( + label=i18n("Clean Audio"), + info=i18n( + "Clean your audio output using noise detection algorithms, recommended for speaking audios." + ), + visible=True, + value=False, + interactive=True, + ) + clean_strength = gr.Slider( + minimum=0, + maximum=1, + label=i18n("Clean Strength"), + info=i18n( + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed." + ), + visible=False, + value=0.5, + interactive=True, + ) + upscale_audio = gr.Checkbox( + label=i18n("Upscale Audio"), + info=i18n( + "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)" + ), + visible=True, + value=False, + interactive=True, + ) + pitch = gr.Slider( + minimum=-24, + maximum=24, + step=1, + label=i18n("Pitch"), + info=i18n( + "Set the pitch of the audio, the higher the value, the higher the pitch." + ), + value=0, + interactive=True, + ) + filter_radius = gr.Slider( + minimum=0, + maximum=7, + label=i18n("Filter Radius"), + info=i18n( + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration." + ), + value=3, + step=1, + interactive=True, + ) + index_rate = gr.Slider( + minimum=0, + maximum=1, + label=i18n("Search Feature Ratio"), + info=i18n( + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio." + ), + value=0.75, + interactive=True, + ) + rms_mix_rate = gr.Slider( + minimum=0, + maximum=1, + label=i18n("Volume Envelope"), + info=i18n( + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed." + ), + value=1, + interactive=True, + ) + protect = gr.Slider( + minimum=0, + maximum=0.5, + label=i18n("Protect Voiceless Consonants"), + info=i18n( + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect." + ), + value=0.5, + interactive=True, + ) + hop_length = gr.Slider( + minimum=1, + maximum=512, + step=1, + label=i18n("Hop Length"), + info=i18n( + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy." + ), + visible=False, + value=128, + interactive=True, + ) + f0method = gr.Radio( + label=i18n("Pitch extraction algorithm"), + info=i18n( + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases." + ), + choices=[ + "pm", + "harvest", + "dio", + "crepe", + "crepe-tiny", + "rmvpe", + "fcpe", + "hybrid[rmvpe+fcpe]", + ], + value="rmvpe", + interactive=True, + ) + embedder_model = gr.Radio( + label=i18n("Embedder Model"), + info=i18n("Model used for learning speaker embedding."), + choices=["hubert", "contentvec", "custom"], + value="hubert", + interactive=True, + ) + with gr.Column(visible=False) as embedder_custom: + with gr.Accordion(i18n("Custom Embedder"), open=True): + embedder_upload_custom = gr.File( + label=i18n("Upload Custom Embedder"), + type="filepath", + interactive=True, + ) + embedder_custom_refresh = gr.Button(i18n("Refresh")) + embedder_model_custom = gr.Dropdown( + label=i18n("Custom Embedder"), + info=i18n( + "Select the custom embedder to use for the conversion." + ), + choices=sorted(custom_embedders), + interactive=True, + allow_custom_value=True, + ) + + convert_button1 = gr.Button(i18n("Convert")) + + with gr.Row(): + vc_output1 = gr.Textbox( + label=i18n("Output Information"), + info=i18n("The output information will be displayed here."), + ) + vc_output2 = gr.Audio(label=i18n("Export Audio")) + + # Batch inference tab + with gr.Tab(i18n("Batch")): + with gr.Row(): + with gr.Column(): + input_folder_batch = gr.Textbox( + label=i18n("Input Folder"), + info=i18n("Select the folder containing the audios to convert."), + placeholder=i18n("Enter input path"), + value=os.path.join(now_dir, "assets", "audios"), + interactive=True, + ) + output_folder_batch = gr.Textbox( + label=i18n("Output Folder"), + info=i18n( + "Select the folder where the output audios will be saved." + ), + placeholder=i18n("Enter output path"), + value=os.path.join(now_dir, "assets", "audios"), + interactive=True, + ) + with gr.Accordion(i18n("Advanced Settings"), open=False): + with gr.Column(): + clear_outputs_batch = gr.Button( + i18n("Clear Outputs (Deletes all audios in assets/audios)") + ) + export_format_batch = gr.Radio( + label=i18n("Export Format"), + info=i18n("Select the format to export the audio."), + choices=["WAV", "MP3", "FLAC", "OGG", "M4A"], + value="WAV", + interactive=True, + ) + split_audio_batch = gr.Checkbox( + label=i18n("Split Audio"), + info=i18n( + "Split the audio into chunks for inference to obtain better results in some cases." + ), + visible=True, + value=False, + interactive=True, + ) + autotune_batch = gr.Checkbox( + label=i18n("Autotune"), + info=i18n( + "Apply a soft autotune to your inferences, recommended for singing conversions." + ), + visible=True, + value=False, + interactive=True, + ) + clean_audio_batch = gr.Checkbox( + label=i18n("Clean Audio"), + info=i18n( + "Clean your audio output using noise detection algorithms, recommended for speaking audios." + ), + visible=True, + value=False, + interactive=True, + ) + clean_strength_batch = gr.Slider( + minimum=0, + maximum=1, + label=i18n("Clean Strength"), + info=i18n( + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed." + ), + visible=False, + value=0.5, + interactive=True, + ) + upscale_audio_batch = gr.Checkbox( + label=i18n("Upscale Audio"), + info=i18n( + "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)" + ), + visible=True, + value=False, + interactive=True, + ) + pitch_batch = gr.Slider( + minimum=-24, + maximum=24, + step=1, + label=i18n("Pitch"), + info=i18n( + "Set the pitch of the audio, the higher the value, the higher the pitch." + ), + value=0, + interactive=True, + ) + filter_radius_batch = gr.Slider( + minimum=0, + maximum=7, + label=i18n("Filter Radius"), + info=i18n( + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration." + ), + value=3, + step=1, + interactive=True, + ) + index_rate_batch = gr.Slider( + minimum=0, + maximum=1, + label=i18n("Search Feature Ratio"), + info=i18n( + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio." + ), + value=0.75, + interactive=True, + ) + rms_mix_rate_batch = gr.Slider( + minimum=0, + maximum=1, + label=i18n("Volume Envelope"), + info=i18n( + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed." + ), + value=1, + interactive=True, + ) + protect_batch = gr.Slider( + minimum=0, + maximum=0.5, + label=i18n("Protect Voiceless Consonants"), + info=i18n( + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect." + ), + value=0.5, + interactive=True, + ) + hop_length_batch = gr.Slider( + minimum=1, + maximum=512, + step=1, + label=i18n("Hop Length"), + info=i18n( + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy." + ), + visible=False, + value=128, + interactive=True, + ) + f0method_batch = gr.Radio( + label=i18n("Pitch extraction algorithm"), + info=i18n( + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases." + ), + choices=[ + "pm", + "harvest", + "dio", + "crepe", + "crepe-tiny", + "rmvpe", + "fcpe", + "hybrid[rmvpe+fcpe]", + ], + value="rmvpe", + interactive=True, + ) + embedder_model_bacth = gr.Radio( + label=i18n("Embedder Model"), + info=i18n("Model used for learning speaker embedding."), + choices=["hubert", "contentvec", "custom"], + value="hubert", + interactive=True, + ) + with gr.Column(visible=False) as embedder_custom_bacth: + with gr.Accordion(i18n("Custom Embedder"), open=True): + embedder_upload_custom_bacth = gr.File( + label=i18n("Upload Custom Embedder"), + type="filepath", + interactive=True, + ) + embedder_custom_refresh_bacth = gr.Button(i18n("Refresh")) + embedder_model_custom_bacth = gr.Dropdown( + label=i18n("Custom Embedder"), + info=i18n( + "Select the custom embedder to use for the conversion." + ), + choices=sorted(custom_embedders), + interactive=True, + allow_custom_value=True, + ) + + convert_button2 = gr.Button(i18n("Convert")) + + with gr.Row(): + vc_output3 = gr.Textbox( + label=i18n("Output Information"), + info=i18n("The output information will be displayed here."), + ) + + def toggle_visible(checkbox): + return {"visible": checkbox, "__type__": "update"} + + def toggle_visible_hop_length(f0method): + if f0method == "crepe" or f0method == "crepe-tiny": + return {"visible": True, "__type__": "update"} + return {"visible": False, "__type__": "update"} + + def toggle_visible_embedder_custom(embedder_model): + if embedder_model == "custom": + return {"visible": True, "__type__": "update"} + return {"visible": False, "__type__": "update"} + + clean_audio.change( + fn=toggle_visible, + inputs=[clean_audio], + outputs=[clean_strength], + ) + clean_audio_batch.change( + fn=toggle_visible, + inputs=[clean_audio_batch], + outputs=[clean_strength_batch], + ) + f0method.change( + fn=toggle_visible_hop_length, + inputs=[f0method], + outputs=[hop_length], + ) + f0method_batch.change( + fn=toggle_visible_hop_length, + inputs=[f0method_batch], + outputs=[hop_length_batch], + ) + refresh_button.click( + fn=change_choices, + inputs=[], + outputs=[ + model_file, + index_file, + audio, + embedder_model_custom, + embedder_model_custom_bacth, + ], + ) + audio.change( + fn=output_path_fn, + inputs=[audio], + outputs=[output_path], + ) + upload_audio.upload( + fn=save_to_wav2, + inputs=[upload_audio], + outputs=[audio, output_path], + ) + upload_audio.stop_recording( + fn=save_to_wav, + inputs=[upload_audio], + outputs=[audio, output_path], + ) + clear_outputs_infer.click( + fn=delete_outputs, + inputs=[], + outputs=[], + ) + clear_outputs_batch.click( + fn=delete_outputs, + inputs=[], + outputs=[], + ) + embedder_model.change( + fn=toggle_visible_embedder_custom, + inputs=[embedder_model], + outputs=[embedder_custom], + ) + embedder_upload_custom.upload( + fn=save_drop_custom_embedder, + inputs=[embedder_upload_custom], + outputs=[embedder_upload_custom], + ) + embedder_custom_refresh.click( + fn=change_choices, + inputs=[], + outputs=[ + model_file, + index_file, + audio, + embedder_model_custom, + embedder_model_custom_bacth, + ], + ) + embedder_model_bacth.change( + fn=toggle_visible_embedder_custom, + inputs=[embedder_model_bacth], + outputs=[embedder_custom_bacth], + ) + embedder_upload_custom_bacth.upload( + fn=save_drop_custom_embedder, + inputs=[embedder_upload_custom_bacth], + outputs=[embedder_upload_custom_bacth], + ) + embedder_custom_refresh_bacth.click( + fn=change_choices, + inputs=[], + outputs=[ + model_file, + index_file, + audio, + embedder_model_custom, + embedder_model_custom_bacth, + ], + ) + convert_button1.click( + fn=run_infer_script, + inputs=[ + pitch, + filter_radius, + index_rate, + rms_mix_rate, + protect, + hop_length, + f0method, + audio, + output_path, + model_file, + index_file, + split_audio, + autotune, + clean_audio, + clean_strength, + export_format, + embedder_model, + embedder_model_custom, + upscale_audio, + ], + outputs=[vc_output1, vc_output2], + ) + convert_button2.click( + fn=run_batch_infer_script, + inputs=[ + pitch_batch, + filter_radius_batch, + index_rate_batch, + rms_mix_rate_batch, + protect_batch, + hop_length_batch, + f0method_batch, + input_folder_batch, + output_folder_batch, + model_file, + index_file, + split_audio_batch, + autotune_batch, + clean_audio_batch, + clean_strength_batch, + export_format_batch, + embedder_model_bacth, + embedder_model_custom_bacth, + upscale_audio_batch, + ], + outputs=[vc_output3], + ) diff --git a/tabs/plugins/plugins.py b/tabs/plugins/plugins.py new file mode 100644 index 0000000000000000000000000000000000000000..945b2a2cb152742322d41a20d7c75bed11456050 --- /dev/null +++ b/tabs/plugins/plugins.py @@ -0,0 +1,34 @@ +import os, sys +import gradio as gr +import importlib.util +import tabs.plugins.plugins_core as plugins_core + +from assets.i18n.i18n import I18nAuto + +i18n = I18nAuto() + +now_dir = os.getcwd() +sys.path.append(now_dir) + +plugins_core.check_new_folders() + + +def plugins_tab(): + with gr.TabItem(i18n("Plugin Installer")): + dropbox = gr.File( + label=i18n("Drag your plugin.zip to install it"), + type="filepath", + ) + + dropbox.upload( + fn=plugins_core.save_plugin_dropbox, + inputs=[dropbox], + outputs=[dropbox], + ) + + for plugin in os.listdir(os.path.join(now_dir, "tabs", "plugins", "installed")): + plugin_main = f"tabs.plugins.installed.{plugin}.plugin" + plugin_import = importlib.import_module(plugin_main) + + with gr.TabItem(plugin): + plugin_import.applio_plugin() diff --git a/tabs/plugins/plugins_core.py b/tabs/plugins/plugins_core.py new file mode 100644 index 0000000000000000000000000000000000000000..a96f4d693cc09b6cd783bd732fe36195dcd807d7 --- /dev/null +++ b/tabs/plugins/plugins_core.py @@ -0,0 +1,122 @@ +import os, sys, shutil +import json +import gradio as gr +import zipfile +import subprocess + +from assets.i18n.i18n import I18nAuto + +i18n = I18nAuto() + +now_dir = os.getcwd() +sys.path.append(now_dir) + +from tabs.settings.restart import restart_applio + +plugins_path = os.path.join(now_dir, "tabs", "plugins", "installed") +if not os.path.exists(plugins_path): + os.makedirs(plugins_path) +json_file_path = os.path.join(now_dir, "assets", "config.json") +current_folders = os.listdir(plugins_path) + + +def get_existing_folders(): + if os.path.exists(json_file_path): + with open(json_file_path, "r") as file: + config = json.load(file) + return config["plugins"] + else: + return [] + + +def save_existing_folders(existing_folders): + with open(json_file_path, "r") as file: + config = json.load(file) + config["plugins"] = existing_folders + with open(json_file_path, "w") as file: + json.dump(config, file, indent=2) + + +def save_plugin_dropbox(dropbox): + if "zip" not in dropbox: + raise gr.Error( + message="The file you dropped is not a valid plugin.zip. Please try again." + ) + else: + file_name = os.path.basename(dropbox) + folder_name = file_name.split(".zip")[0] + folder_path = os.path.join(plugins_path, folder_name) + zip_file_path = os.path.join(plugins_path, file_name) + + if os.path.exists(folder_name): + os.remove(folder_name) + + shutil.move(dropbox, os.path.join(plugins_path, file_name)) + print("Proceeding with the extraction...") + + with zipfile.ZipFile(zip_file_path, "r") as zip_ref: + zip_ref.extractall(plugins_path) + os.remove(zip_file_path) + + if os.path.exists(os.path.join(folder_path, "requirements.txt")): + if os.name == "nt": + subprocess.run( + [ + os.path.join("env", "python.exe"), + "-m", + "pip", + "install", + "-r", + os.path.join(folder_path, "requirements.txt"), + ] + ) + else: + subprocess.run( + [ + "python", + "-m", + "pip", + "install", + "-r", + os.path.join(folder_path, "requirements.txt"), + ] + ) + else: + print("No requirements.txt file found in the plugin folder.") + + save_existing_folders(get_existing_folders() + [folder_name]) + + print( + f"{folder_name} plugin installed in {plugins_path}! Restarting applio to apply the changes." + ) + gr.Info( + f"{folder_name} plugin installed in {plugins_path}! Restarting applio to apply the changes." + ) + restart_applio() + return None + + +def check_new_folders(): + existing_folders = get_existing_folders() + new_folders = set(current_folders) - set(existing_folders) + save_existing_folders(current_folders) + if new_folders: + for new_folder in new_folders: + complete_path = os.path.join(plugins_path, new_folder) + print(f"New plugin {new_folder} found, installing it...") + + if os.path.exists(os.path.join(complete_path, "requirements.txt")): + subprocess.run( + [ + os.path.join("env", "python.exe"), + "-m", + "pip", + "install", + "-r", + os.path.join(complete_path, "requirements.txt"), + ] + ) + else: + print("No requirements.txt file found in the plugin folder.") + print("Plugins checked and installed! Restarting applio to apply the changes.") + restart_applio() diff --git a/tabs/report/main.js b/tabs/report/main.js new file mode 100644 index 0000000000000000000000000000000000000000..3a5535c946d6584abdbf09b4ec9a4edfce8b137a --- /dev/null +++ b/tabs/report/main.js @@ -0,0 +1,74 @@ +// main.js +if (!ScreenCastRecorder.isSupportedBrowser()) { + console.error("Screen Recording not supported in this browser"); +} +let recorder; +let outputBlob; +const stopRecording = () => __awaiter(void 0, void 0, void 0, function* () { + let currentState = "RECORDING"; + // We should do nothing if the user try to stop recording when it is not started + if (currentState === "OFF" || recorder == null) { + return; + } + // if (currentState === "COUNTDOWN") { + // this.setState({ + // currentState: "OFF", + // }) + // } + if (currentState === "RECORDING") { + if (recorder.getState() === "inactive") { + // this.setState({ + // currentState: "OFF", + // }) + console.log("Inactive"); + } + else { + outputBlob = yield recorder.stop(); + console.log("Done recording"); + // this.setState({ + // outputBlob, + // currentState: "PREVIEW_FILE", + // }) + window.currentState = "PREVIEW_FILE"; + const videoSource = URL.createObjectURL(outputBlob); + window.videoSource = videoSource; + const fileName = "recording"; + const link = document.createElement("a"); + link.setAttribute("href", videoSource); + link.setAttribute("download", `${fileName}.webm`); + link.click(); + } + } +}); +const startRecording = () => __awaiter(void 0, void 0, void 0, function* () { + const recordAudio = false; + recorder = new ScreenCastRecorder({ + recordAudio, + onErrorOrStop: () => stopRecording(), + }); + try { + yield recorder.initialize(); + } + catch (e) { + console.warn(`ScreenCastRecorder.initialize error: ${e}`); + // this.setState({ currentState: "UNSUPPORTED" }) + window.currentState = "UNSUPPORTED"; + return; + } + // this.setState({ currentState: "COUNTDOWN" }) + const hasStarted = recorder.start(); + if (hasStarted) { + // this.setState({ + // currentState: "RECORDING", + // }) + console.log("Started recording"); + window.currentState = "RECORDING"; + } + else { + stopRecording().catch(err => console.warn(`withScreencast.stopRecording threw an error: ${err}`)); + } +}); + +// Set global functions to window. +window.startRecording = startRecording; +window.stopRecording = stopRecording; \ No newline at end of file diff --git a/tabs/report/record_button.js b/tabs/report/record_button.js new file mode 100644 index 0000000000000000000000000000000000000000..deb5defcec46018bda0768d864e4d120a2f9f1e5 --- /dev/null +++ b/tabs/report/record_button.js @@ -0,0 +1,40 @@ +// Setup if needed and start recording. +async () => { + // Set up recording functions if not already initialized + if (!window.startRecording) { + let recorder_js = null; + let main_js = null; + } + + // Function to fetch and convert video blob to base64 using async/await without explicit Promise + async function getVideoBlobAsBase64(objectURL) { + const response = await fetch(objectURL); + if (!response.ok) { + throw new Error('Failed to fetch video blob.'); + } + + const blob = await response.blob(); + + const reader = new FileReader(); + reader.readAsDataURL(blob); + + return new Promise((resolve, reject) => { + reader.onloadend = () => { + if (reader.result) { + resolve(reader.result.split(',')[1]); // Return the base64 string (without data URI prefix) + } else { + reject('Failed to convert blob to base64.'); + } + }; + }); + } + + if (window.currentState === "RECORDING") { + await window.stopRecording(); + const base64String = await getVideoBlobAsBase64(window.videoSource); + return base64String; + } else { + window.startRecording(); + return "Record"; + } +} diff --git a/tabs/report/recorder.js b/tabs/report/recorder.js new file mode 100644 index 0000000000000000000000000000000000000000..9e8db0d0d1e548a3e2d2e7ab99e424e3a2ab4a4f --- /dev/null +++ b/tabs/report/recorder.js @@ -0,0 +1,112 @@ +// recorder.js +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +const BLOB_TYPE = "video/webm"; +class ScreenCastRecorder { + /** True if the current browser likely supports screencasts. */ + static isSupportedBrowser() { + return (navigator.mediaDevices != null && + navigator.mediaDevices.getUserMedia != null && + navigator.mediaDevices.getDisplayMedia != null && + MediaRecorder.isTypeSupported(BLOB_TYPE)); + } + constructor({ recordAudio, onErrorOrStop }) { + this.recordAudio = recordAudio; + this.onErrorOrStopCallback = onErrorOrStop; + this.inputStream = null; + this.recordedChunks = []; + this.mediaRecorder = null; + } + /** + * This asynchronous method will initialize the screen recording object asking + * for permissions to the user which are needed to start recording. + */ + initialize() { + return __awaiter(this, void 0, void 0, function* () { + const desktopStream = yield navigator.mediaDevices.getDisplayMedia({ + video: true, + }); + let tracks = desktopStream.getTracks(); + if (this.recordAudio) { + const voiceStream = yield navigator.mediaDevices.getUserMedia({ + video: false, + audio: true, + }); + tracks = tracks.concat(voiceStream.getAudioTracks()); + } + this.recordedChunks = []; + this.inputStream = new MediaStream(tracks); + this.mediaRecorder = new MediaRecorder(this.inputStream, { + mimeType: BLOB_TYPE, + }); + this.mediaRecorder.ondataavailable = e => this.recordedChunks.push(e.data); + }); + } + getState() { + if (this.mediaRecorder) { + return this.mediaRecorder.state; + } + return "inactive"; + } + /** + * This method will start the screen recording if the user has granted permissions + * and the mediaRecorder has been initialized + * + * @returns {boolean} + */ + start() { + if (!this.mediaRecorder) { + console.warn(`ScreenCastRecorder.start: mediaRecorder is null`); + return false; + } + const logRecorderError = (e) => { + console.warn(`mediaRecorder.start threw an error: ${e}`); + }; + this.mediaRecorder.onerror = (e) => { + logRecorderError(e); + this.onErrorOrStopCallback(); + }; + this.mediaRecorder.onstop = () => this.onErrorOrStopCallback(); + try { + this.mediaRecorder.start(); + } + catch (e) { + logRecorderError(e); + return false; + } + return true; + } + /** + * This method will stop recording and then return the generated Blob + * + * @returns {(Promise|undefined)} + * A Promise which will return the generated Blob + * Undefined if the MediaRecorder could not initialize + */ + stop() { + if (!this.mediaRecorder) { + return undefined; + } + let resolver; + const promise = new Promise(r => { + resolver = r; + }); + this.mediaRecorder.onstop = () => resolver(); + this.mediaRecorder.stop(); + if (this.inputStream) { + this.inputStream.getTracks().forEach(s => s.stop()); + this.inputStream = null; + } + return promise.then(() => this.buildOutputBlob()); + } + buildOutputBlob() { + return new Blob(this.recordedChunks, { type: BLOB_TYPE }); + } +} \ No newline at end of file diff --git a/tabs/report/report.py b/tabs/report/report.py new file mode 100644 index 0000000000000000000000000000000000000000..328b276e19b8065de27f4c757b2620a0b08266dd --- /dev/null +++ b/tabs/report/report.py @@ -0,0 +1,79 @@ +import os +import sys +import base64 +import pathlib +import tempfile +import gradio as gr + +from assets.i18n.i18n import I18nAuto + +now_dir = os.getcwd() +sys.path.append(now_dir) + +i18n = I18nAuto() + +recorder_js_path = os.path.join(now_dir, "tabs", "report", "recorder.js") +main_js_path = os.path.join(now_dir, "tabs", "report", "main.js") +record_button_js_path = os.path.join(now_dir, "tabs", "report", "record_button.js") + +recorder_js = pathlib.Path(recorder_js_path).read_text() +main_js = pathlib.Path(main_js_path).read_text() +record_button_js = ( + pathlib.Path(record_button_js_path) + .read_text() + .replace("let recorder_js = null;", recorder_js) + .replace("let main_js = null;", main_js) +) + + +def save_base64_video(base64_string): + base64_video = base64_string + video_data = base64.b64decode(base64_video) + with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as temp_file: + temp_filename = temp_file.name + temp_file.write(video_data) + print(f"Temporary MP4 file saved as: {temp_filename}") + return temp_filename + + +def report_tab(): + instructions = [ + i18n("# How to Report an Issue on GitHub"), + i18n( + "1. Click on the 'Record Screen' button below to start recording the issue you are experiencing." + ), + i18n( + "2. Once you have finished recording the issue, click on the 'Stop Recording' button (the same button, but the label changes depending on whether you are actively recording or not)." + ), + i18n( + "3. Go to [GitHub Issues](https://github.com/IAHispano/Applio/issues) and click on the 'New Issue' button." + ), + i18n( + "4. Complete the provided issue template, ensuring to include details as needed, and utilize the assets section to upload the recorded file from the previous step." + ), + ] + components = [gr.Markdown(value=instruction) for instruction in instructions] + + start_button = gr.Button("Record Screen") + video_component = gr.Video(interactive=False) + + def toggle_button_label(returned_string): + if returned_string.startswith("Record"): + return gr.Button(value="Stop Recording"), None + else: + try: + temp_filename = save_base64_video(returned_string) + except Exception as error: + return gr.Button(value="Record Screen"), gr.Warning( + f"Failed to convert video to mp4:\n{error}" + ) + return gr.Button(value="Record Screen"), gr.Video( + value=temp_filename, interactive=False + ) + + start_button.click( + fn=toggle_button_label, + inputs=[start_button], + outputs=[start_button, video_component], + js=record_button_js, + ) diff --git a/tabs/settings/fake_gpu.py b/tabs/settings/fake_gpu.py new file mode 100644 index 0000000000000000000000000000000000000000..4708a6494aea8ac850ef8277ba6a16f12a54986e --- /dev/null +++ b/tabs/settings/fake_gpu.py @@ -0,0 +1,55 @@ +import os, sys +import torch +import json +import gradio as gr +from assets.i18n.i18n import I18nAuto +from tabs.settings.restart import restart_applio + +now_dir = os.getcwd() +sys.path.append(now_dir) +i18n = I18nAuto() + +ngpu = torch.cuda.device_count() +config_file = os.path.join(now_dir, "assets", "config.json") + + +def gpu_available(): + if torch.cuda.is_available() or ngpu != 0: + return True + + +def load_fake_gpu(): + with open(config_file, "r", encoding="utf8") as file: + config = json.load(file) + return config["fake_gpu"] + + +def save_config(value): + with open(config_file, "r", encoding="utf8") as file: + config = json.load(file) + config["fake_gpu"] = value + with open(config_file, "w", encoding="utf8") as file: + json.dump(config, file, indent=2) + + +def fake_gpu_tab(): + with gr.Row(): + with gr.Column(): + presence = gr.Checkbox( + label=i18n("Enable fake GPU"), + info=i18n( + "Activates the train tab. However, please note that this device lacks GPU capabilities, hence training is not supported. This option is only for testing purposes. (This option will restart Applio)" + ), + interactive=True, + value=load_fake_gpu(), + ) + presence.change( + fn=toggle, + inputs=[presence], + outputs=[], + ) + + +def toggle(checkbox): + save_config(bool(checkbox)) + restart_applio() diff --git a/tabs/settings/flask_server.py b/tabs/settings/flask_server.py new file mode 100644 index 0000000000000000000000000000000000000000..217adb89fe0bc20e3f0146332d4ad912ebdbd093 --- /dev/null +++ b/tabs/settings/flask_server.py @@ -0,0 +1,43 @@ +import os +import sys +import gradio as gr +from assets.i18n.i18n import I18nAuto +import requests + +now_dir = os.getcwd() +sys.path.append(now_dir) + +from assets.flask.server import start_flask, load_config_flask, save_config + +i18n = I18nAuto() + + +def flask_server_tab(): + with gr.Row(): + with gr.Column(): + flask_checkbox = gr.Checkbox( + label=i18n( + "Enable Applio integration with applio.org/models using flask" + ), + info=i18n( + "It will activate the possibility of downloading models with a click from the website." + ), + interactive=True, + value=load_config_flask(), + ) + flask_checkbox.change( + fn=toggle, + inputs=[flask_checkbox], + outputs=[], + ) + + +def toggle(checkbox): + save_config(bool(checkbox)) + if load_config_flask() == True: + start_flask() + else: + try: + requests.post("http://localhost:8000/shutdown") + except requests.exceptions.ConnectionError: + pass diff --git a/tabs/settings/lang.py b/tabs/settings/lang.py new file mode 100644 index 0000000000000000000000000000000000000000..73f77f16b76a2c742c29a830137da1a050a3ab71 --- /dev/null +++ b/tabs/settings/lang.py @@ -0,0 +1,57 @@ +import os, sys +import json +import gradio as gr +from assets.i18n.i18n import I18nAuto + +now_dir = os.getcwd() +sys.path.append(now_dir) + +i18n = I18nAuto() + +config_file = os.path.join(now_dir, "assets", "config.json") + + +def get_language_settings(): + with open(config_file, "r", encoding="utf8") as file: + config = json.load(file) + + if config["lang"]["override"] == False: + return "Language automatically detected in the system" + else: + return config["lang"]["selected_lang"] + + +def save_lang_settings(selected_language): + with open(config_file, "r", encoding="utf8") as file: + config = json.load(file) + + if selected_language == "Language automatically detected in the system": + config["lang"]["override"] = False + else: + config["lang"]["override"] = True + config["lang"]["selected_lang"] = selected_language + + gr.Info("Language have been saved. Restart Applio to apply the changes.") + + with open(config_file, "w", encoding="utf8") as file: + json.dump(config, file, indent=2) + + +def lang_tab(): + with gr.Column(): + selected_language = gr.Dropdown( + label=i18n("Language"), + info=i18n( + "Select the language you want to use. (Requires restarting Applio)" + ), + value=get_language_settings(), + choices=["Language automatically detected in the system"] + + i18n._get_available_languages(), + interactive=True, + ) + + selected_language.change( + fn=save_lang_settings, + inputs=[selected_language], + outputs=[], + ) diff --git a/tabs/settings/presence.py b/tabs/settings/presence.py new file mode 100644 index 0000000000000000000000000000000000000000..89be18b009e4c7527ac74a8b7531bce707ac062b --- /dev/null +++ b/tabs/settings/presence.py @@ -0,0 +1,55 @@ +import os +import sys +import gradio as gr +import json +from assets.i18n.i18n import I18nAuto +from assets.discord_presence import RPCManager + +now_dir = os.getcwd() +sys.path.append(now_dir) + +i18n = I18nAuto() +config_file = os.path.join(now_dir, "assets", "config.json") + + +def load_config_presence(): + with open(config_file, "r", encoding="utf8") as file: + config = json.load(file) + return config["discord_presence"] + + +def save_config(value): + with open(config_file, "r", encoding="utf8") as file: + config = json.load(file) + config["discord_presence"] = value + with open(config_file, "w", encoding="utf8") as file: + json.dump(config, file, indent=2) + + +def presence_tab(): + with gr.Row(): + with gr.Column(): + presence = gr.Checkbox( + label=i18n("Enable Applio integration with Discord presence"), + info=i18n( + "It will activate the possibility of displaying the current Applio activity in Discord." + ), + interactive=True, + value=load_config_presence(), + ) + presence.change( + fn=toggle, + inputs=[presence], + outputs=[], + ) + + +def toggle(checkbox): + save_config(bool(checkbox)) + if load_config_presence() == True: + try: + RPCManager.start_presence() + except KeyboardInterrupt: + RPCManager.stop_presence() + else: + RPCManager.stop_presence() diff --git a/tabs/settings/restart.py b/tabs/settings/restart.py new file mode 100644 index 0000000000000000000000000000000000000000..9c14b287d5eba248056127ef8612e0da6eee0fae --- /dev/null +++ b/tabs/settings/restart.py @@ -0,0 +1,39 @@ +import gradio as gr +import os +import sys + +now_dir = os.getcwd() +pid_file_path = os.path.join(now_dir, "rvc", "train", "train_pid.txt") + + +def restart_applio(): + if os.name != "nt": + os.system("clear") + else: + os.system("cls") + try: + with open(pid_file_path, "r") as pid_file: + pids = [int(pid) for pid in pid_file.readlines()] + for pid in pids: + os.kill(pid, 9) + os.remove(pid_file_path) + except: + pass + python = sys.executable + os.execl(python, python, *sys.argv) + + +from assets.i18n.i18n import I18nAuto + +i18n = I18nAuto() + + +def restart_tab(): + with gr.Row(): + with gr.Column(): + restart_button = gr.Button(i18n("Restart Applio")) + restart_button.click( + fn=restart_applio, + inputs=[], + outputs=[], + ) diff --git a/tabs/settings/themes.py b/tabs/settings/themes.py new file mode 100644 index 0000000000000000000000000000000000000000..2fb26ca1fccaf774acf51d8dd1ad218a2ddf2d12 --- /dev/null +++ b/tabs/settings/themes.py @@ -0,0 +1,33 @@ +import os +import sys +import base64 +import pathlib +import tempfile +import gradio as gr + +from assets.i18n.i18n import I18nAuto +import assets.themes.loadThemes as loadThemes + +now_dir = os.getcwd() +sys.path.append(now_dir) + +i18n = I18nAuto() + + +def theme_tab(): + with gr.Row(): + with gr.Column(): + themes_select = gr.Dropdown( + loadThemes.get_list(), + value=loadThemes.read_json(), + label=i18n("Theme"), + info=i18n( + "Select the theme you want to use. (Requires restarting Applio)" + ), + visible=True, + ) + themes_select.change( + fn=loadThemes.select_theme, + inputs=themes_select, + outputs=[], + ) diff --git a/tabs/settings/version.py b/tabs/settings/version.py new file mode 100644 index 0000000000000000000000000000000000000000..839ae71f05dcf006ffc07703194a4aac0a8cb8c8 --- /dev/null +++ b/tabs/settings/version.py @@ -0,0 +1,24 @@ +import gradio as gr + +from assets.version_checker import compare_version +from assets.i18n.i18n import I18nAuto + +i18n = I18nAuto() + + +def version_tab(): + with gr.Row(): + with gr.Column(): + version_check = gr.Textbox( + label=i18n("Version Checker"), + info=i18n( + "Check which version of Applio is the latest to see if you need to update." + ), + interactive=False, + ) + version_button = gr.Button(i18n("Check for updates")) + version_button.click( + fn=compare_version, + inputs=[], + outputs=[version_check], + ) diff --git a/tabs/train/train.py b/tabs/train/train.py new file mode 100644 index 0000000000000000000000000000000000000000..d5e7c3f75fb9823349b81ff9f93f1fc88713f381 --- /dev/null +++ b/tabs/train/train.py @@ -0,0 +1,869 @@ +import os +import subprocess +import sys +import shutil +import gradio as gr +from assets.i18n.i18n import I18nAuto +from core import ( + run_preprocess_script, + run_extract_script, + run_train_script, + run_index_script, + run_prerequisites_script, +) +from rvc.configs.config import max_vram_gpu, get_gpu_info +from rvc.lib.utils import format_title +from tabs.settings.restart import restart_applio + +i18n = I18nAuto() +now_dir = os.getcwd() +sys.path.append(now_dir) + +pretraineds_v1 = [ + ( + "pretrained_v1/", + [ + "D32k.pth", + "D40k.pth", + "D48k.pth", + "G32k.pth", + "G40k.pth", + "G48k.pth", + "f0D32k.pth", + "f0D40k.pth", + "f0D48k.pth", + "f0G32k.pth", + "f0G40k.pth", + "f0G48k.pth", + ], + ), +] + +folder_mapping = { + "pretrained_v1/": "rvc/pretraineds/pretrained_v1/", +} + +sup_audioext = { + "wav", + "mp3", + "flac", + "ogg", + "opus", + "m4a", + "mp4", + "aac", + "alac", + "wma", + "aiff", + "webm", + "ac3", +} + +# Custom Pretraineds +pretraineds_custom_path = os.path.join( + now_dir, "rvc", "pretraineds", "pretraineds_custom" +) + +pretraineds_custom_path_relative = os.path.relpath(pretraineds_custom_path, now_dir) + +custom_embedder_root = os.path.join(now_dir, "rvc", "embedders", "embedders_custom") +custom_embedder_root_relative = os.path.relpath(custom_embedder_root, now_dir) + +os.makedirs(custom_embedder_root, exist_ok=True) +os.makedirs(pretraineds_custom_path_relative, exist_ok=True) + + +def get_pretrained_list(suffix): + return [ + os.path.join(dirpath, filename) + for dirpath, _, filenames in os.walk(pretraineds_custom_path_relative) + for filename in filenames + if filename.endswith(".pth") and suffix in filename + ] + + +pretraineds_list_d = get_pretrained_list("D") +pretraineds_list_g = get_pretrained_list("G") + + +def refresh_custom_pretraineds(): + return ( + {"choices": sorted(get_pretrained_list("G")), "__type__": "update"}, + {"choices": sorted(get_pretrained_list("D")), "__type__": "update"}, + ) + + +# Dataset Creator +datasets_path = os.path.join(now_dir, "assets", "datasets") + +if not os.path.exists(datasets_path): + os.makedirs(datasets_path) + +datasets_path_relative = os.path.relpath(datasets_path, now_dir) + + +def get_datasets_list(): + return [ + dirpath + for dirpath, _, filenames in os.walk(datasets_path_relative) + if any(filename.endswith(tuple(sup_audioext)) for filename in filenames) + ] + + +def refresh_datasets(): + return {"choices": sorted(get_datasets_list()), "__type__": "update"} + + +# Model Names +models_path = os.path.join(now_dir, "logs") + + +def get_models_list(): + return [ + os.path.basename(dirpath) + for dirpath in os.listdir(models_path) + if os.path.isdir(os.path.join(models_path, dirpath)) + and all(excluded not in dirpath for excluded in ["zips", "mute"]) + ] + + +def refresh_models(): + return {"choices": sorted(get_models_list()), "__type__": "update"} + + +# Refresh Models and Datasets +def refresh_models_and_datasets(): + return ( + {"choices": sorted(get_models_list()), "__type__": "update"}, + {"choices": sorted(get_datasets_list()), "__type__": "update"}, + ) + + +# Refresh Custom Pretraineds +def get_embedder_custom_list(): + return [ + os.path.join(dirpath, filename) + for dirpath, _, filenames in os.walk(custom_embedder_root_relative) + for filename in filenames + if filename.endswith(".pt") + ] + + +def refresh_custom_embedder_list(): + return {"choices": sorted(get_embedder_custom_list()), "__type__": "update"} + + +# Drop Model +def save_drop_model(dropbox): + if ".pth" not in dropbox: + gr.Info( + i18n( + "The file you dropped is not a valid pretrained file. Please try again." + ) + ) + else: + file_name = os.path.basename(dropbox) + pretrained_path = os.path.join(pretraineds_custom_path_relative, file_name) + if os.path.exists(pretrained_path): + os.remove(pretrained_path) + os.rename(dropbox, pretrained_path) + gr.Info( + i18n( + "Click the refresh button to see the pretrained file in the dropdown menu." + ) + ) + return None + + +# Drop Dataset +def save_drop_dataset_audio(dropbox, dataset_name): + if not dataset_name: + gr.Info("Please enter a valid dataset name. Please try again.") + return None, None + else: + file_extension = os.path.splitext(dropbox)[1][1:].lower() + if file_extension not in sup_audioext: + gr.Info("The file you dropped is not a valid audio file. Please try again.") + else: + dataset_name = format_title(dataset_name) + audio_file = format_title(os.path.basename(dropbox)) + dataset_path = os.path.join(now_dir, "assets", "datasets", dataset_name) + if not os.path.exists(dataset_path): + os.makedirs(dataset_path) + destination_path = os.path.join(dataset_path, audio_file) + if os.path.exists(destination_path): + os.remove(destination_path) + os.rename(dropbox, destination_path) + gr.Info( + i18n( + "The audio file has been successfully added to the dataset. Please click the preprocess button." + ) + ) + dataset_path = os.path.dirname(destination_path) + relative_dataset_path = os.path.relpath(dataset_path, now_dir) + + return None, relative_dataset_path + + +# Drop Custom Embedder +def save_drop_custom_embedder(dropbox): + if ".pt" not in dropbox: + gr.Info( + i18n("The file you dropped is not a valid embedder file. Please try again.") + ) + else: + file_name = os.path.basename(dropbox) + custom_embedder_path = os.path.join(custom_embedder_root, file_name) + if os.path.exists(custom_embedder_path): + os.remove(custom_embedder_path) + os.rename(dropbox, custom_embedder_path) + gr.Info( + i18n( + "Click the refresh button to see the embedder file in the dropdown menu." + ) + ) + return None + + +# Export +## Get Pth and Index Files +def get_pth_list(): + return [ + os.path.relpath(os.path.join(dirpath, filename), now_dir) + for dirpath, _, filenames in os.walk(models_path) + for filename in filenames + if filename.endswith(".pth") + ] + + +def get_index_list(): + return [ + os.path.relpath(os.path.join(dirpath, filename), now_dir) + for dirpath, _, filenames in os.walk(models_path) + for filename in filenames + if filename.endswith(".index") and "trained" not in filename + ] + + +def refresh_pth_and_index_list(): + return ( + {"choices": sorted(get_pth_list()), "__type__": "update"}, + {"choices": sorted(get_index_list()), "__type__": "update"}, + ) + + +## Export Pth and Index Files +def export_pth(pth_path): + if pth_path and os.path.exists(pth_path): + return pth_path + return None + + +def export_index(index_path): + if index_path and os.path.exists(index_path): + return index_path + return None + + +## Upload to Google Drive +def upload_to_google_drive(pth_path, index_path): + def upload_file(file_path): + if file_path: + try: + gr.Info(f"Uploading {pth_path} to Google Drive...") + google_drive_folder = "/content/drive/MyDrive/ApplioExported" + if not os.path.exists(google_drive_folder): + os.makedirs(google_drive_folder) + google_drive_file_path = os.path.join( + google_drive_folder, os.path.basename(file_path) + ) + if os.path.exists(google_drive_file_path): + os.remove(google_drive_file_path) + shutil.copy2(file_path, google_drive_file_path) + gr.Info("File uploaded successfully.") + except Exception as error: + print(error) + gr.Info("Error uploading to Google Drive") + + upload_file(pth_path) + upload_file(index_path) + + +# Train Tab +def train_tab(): + with gr.Accordion(i18n("Preprocess")): + with gr.Row(): + with gr.Column(): + model_name = gr.Dropdown( + label=i18n("Model Name"), + info=i18n("Name of the new model."), + choices=get_models_list(), + value="my-project", + interactive=True, + allow_custom_value=True, + ) + dataset_path = gr.Dropdown( + label=i18n("Dataset Path"), + info=i18n("Path to the dataset folder."), + # placeholder=i18n("Enter dataset path"), + choices=get_datasets_list(), + allow_custom_value=True, + interactive=True, + ) + refresh = gr.Button(i18n("Refresh")) + dataset_creator = gr.Checkbox( + label=i18n("Dataset Creator"), + value=False, + interactive=True, + visible=True, + ) + + with gr.Column(visible=False) as dataset_creator_settings: + with gr.Accordion(i18n("Dataset Creator")): + dataset_name = gr.Textbox( + label=i18n("Dataset Name"), + info=i18n("Name of the new dataset."), + placeholder=i18n("Enter dataset name"), + interactive=True, + ) + upload_audio_dataset = gr.File( + label=i18n("Upload Audio Dataset"), + type="filepath", + interactive=True, + ) + + with gr.Column(): + sampling_rate = gr.Radio( + label=i18n("Sampling Rate"), + info=i18n("The sampling rate of the audio files."), + choices=["32000", "40000", "48000"], + value="40000", + interactive=True, + ) + + rvc_version = gr.Radio( + label=i18n("RVC Version"), + info=i18n("The RVC version of the model."), + choices=["v1", "v2"], + value="v2", + interactive=True, + ) + + preprocess_output_info = gr.Textbox( + label=i18n("Output Information"), + info=i18n("The output information will be displayed here."), + value="", + max_lines=8, + interactive=False, + ) + + with gr.Row(): + preprocess_button = gr.Button(i18n("Preprocess Dataset")) + preprocess_button.click( + fn=run_preprocess_script, + inputs=[model_name, dataset_path, sampling_rate], + outputs=[preprocess_output_info], + api_name="preprocess_dataset", + ) + + with gr.Accordion(i18n("Extract")): + with gr.Row(): + hop_length = gr.Slider( + 1, + 512, + 128, + step=1, + label=i18n("Hop Length"), + info=i18n( + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy." + ), + visible=False, + interactive=True, + ) + with gr.Row(): + with gr.Column(): + f0method = gr.Radio( + label=i18n("Pitch extraction algorithm"), + info=i18n( + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases." + ), + choices=["pm", "dio", "crepe", "crepe-tiny", "harvest", "rmvpe"], + value="rmvpe", + interactive=True, + ) + embedder_model = gr.Radio( + label=i18n("Embedder Model"), + info=i18n("Model used for learning speaker embedding."), + choices=["hubert", "contentvec", "custom"], + value="hubert", + interactive=True, + ) + with gr.Column(visible=False) as embedder_custom: + with gr.Accordion(i18n("Custom Embedder"), open=True): + embedder_upload_custom = gr.File( + label=i18n("Upload Custom Embedder"), + type="filepath", + interactive=True, + ) + embedder_custom_refresh = gr.Button(i18n("Refresh")) + embedder_model_custom = gr.Dropdown( + label=i18n("Custom Embedder"), + info=i18n( + "Select the custom embedder to use for the conversion." + ), + choices=sorted(get_embedder_custom_list()), + interactive=True, + allow_custom_value=True, + ) + + extract_output_info = gr.Textbox( + label=i18n("Output Information"), + info=i18n("The output information will be displayed here."), + value="", + max_lines=8, + interactive=False, + ) + extract_button = gr.Button(i18n("Extract Features")) + extract_button.click( + fn=run_extract_script, + inputs=[ + model_name, + rvc_version, + f0method, + hop_length, + sampling_rate, + embedder_model, + embedder_model_custom, + ], + outputs=[extract_output_info], + api_name="extract_features", + ) + + with gr.Accordion(i18n("Train")): + with gr.Row(): + batch_size = gr.Slider( + 1, + 50, + max_vram_gpu(0), + step=1, + label=i18n("Batch Size"), + info=i18n( + "It's advisable to align it with the available VRAM of your GPU. A setting of 4 offers improved accuracy but slower processing, while 8 provides faster and standard results." + ), + interactive=True, + ) + save_every_epoch = gr.Slider( + 1, + 100, + 10, + step=1, + label=i18n("Save Every Epoch"), + info=i18n("Determine at how many epochs the model will saved at."), + interactive=True, + ) + total_epoch = gr.Slider( + 1, + 10000, + 500, + step=1, + label=i18n("Total Epoch"), + info=i18n( + "Specifies the overall quantity of epochs for the model training process." + ), + interactive=True, + ) + with gr.Row(): + pitch_guidance = gr.Checkbox( + label=i18n("Pitch Guidance"), + info=i18n( + "By employing pitch guidance, it becomes feasible to mirror the intonation of the original voice, including its pitch. This feature is particularly valuable for singing and other scenarios where preserving the original melody or pitch pattern is essential." + ), + value=True, + interactive=True, + ) + pretrained = gr.Checkbox( + label=i18n("Pretrained"), + info=i18n( + "Utilize pretrained models when training your own. This approach reduces training duration and enhances overall quality." + ), + value=True, + interactive=True, + ) + save_only_latest = gr.Checkbox( + label=i18n("Save Only Latest"), + info=i18n( + "Enabling this setting will result in the G and D files saving only their most recent versions, effectively conserving storage space." + ), + value=False, + interactive=True, + ) + save_every_weights = gr.Checkbox( + label=i18n("Save Every Weights"), + info=i18n( + "This setting enables you to save the weights of the model at the conclusion of each epoch." + ), + value=True, + interactive=True, + ) + custom_pretrained = gr.Checkbox( + label=i18n("Custom Pretrained"), + info=i18n( + "Utilizing custom pretrained models can lead to superior results, as selecting the most suitable pretrained models tailored to the specific use case can significantly enhance performance." + ), + value=False, + interactive=True, + ) + multiple_gpu = gr.Checkbox( + label=i18n("GPU Settings"), + info=( + i18n( + "Sets advanced GPU settings, recommended for users with better GPU architecture." + ) + ), + value=False, + interactive=True, + ) + overtraining_detector = gr.Checkbox( + label=i18n("Overtraining Detector"), + info=i18n( + "Detect overtraining to prevent the model from learning the training data too well and losing the ability to generalize to new data." + ), + value=False, + interactive=True, + ) + sync_graph = gr.Checkbox( + label=i18n("Sync Graph"), + info=i18n( + "Synchronize the graph of the tensorbaord. Only enable this setting if you are training a new model." + ), + value=False, + interactive=True, + ) + + with gr.Row(): + with gr.Column(visible=False) as pretrained_custom_settings: + with gr.Accordion(i18n("Pretrained Custom Settings")): + upload_pretrained = gr.File( + label=i18n("Upload Pretrained Model"), + type="filepath", + interactive=True, + ) + refresh_custom_pretaineds_button = gr.Button( + i18n("Refresh Custom Pretraineds") + ) + g_pretrained_path = gr.Dropdown( + label=i18n("Custom Pretrained G"), + info=i18n( + "Select the custom pretrained model for the generator." + ), + choices=sorted(pretraineds_list_g), + interactive=True, + allow_custom_value=True, + ) + d_pretrained_path = gr.Dropdown( + label=i18n("Custom Pretrained D"), + info=i18n( + "Select the custom pretrained model for the discriminator." + ), + choices=sorted(pretraineds_list_d), + interactive=True, + allow_custom_value=True, + ) + with gr.Column(visible=False) as gpu_custom_settings: + with gr.Accordion(i18n("GPU Settings")): + gpu = gr.Textbox( + label=i18n("GPU Number"), + info=i18n( + "Specify the number of GPUs you wish to utilize for training by entering them separated by hyphens (-)." + ), + placeholder=i18n("0 to ∞ separated by -"), + value="0", + interactive=True, + ) + gr.Textbox( + label=i18n("GPU Information"), + info=i18n("The GPU information will be displayed here."), + value=get_gpu_info(), + interactive=False, + ) + with gr.Column(visible=False) as overtraining_settings: + with gr.Accordion(i18n("Overtraining Detector Settings")): + overtraining_threshold = gr.Slider( + 1, + 100, + 50, + step=1, + label=i18n("Overtraining Threshold"), + info=i18n( + "Set the maximum number of epochs you want your model to stop training if no improvement is detected." + ), + interactive=True, + ) + + with gr.Row(): + train_output_info = gr.Textbox( + label=i18n("Output Information"), + info=i18n("The output information will be displayed here."), + value="", + max_lines=8, + interactive=False, + ) + + with gr.Row(): + train_button = gr.Button(i18n("Start Training")) + train_button.click( + fn=run_train_script, + inputs=[ + model_name, + rvc_version, + save_every_epoch, + save_only_latest, + save_every_weights, + total_epoch, + sampling_rate, + batch_size, + gpu, + pitch_guidance, + overtraining_detector, + overtraining_threshold, + pretrained, + custom_pretrained, + sync_graph, + g_pretrained_path, + d_pretrained_path, + ], + outputs=[train_output_info], + api_name="start_training", + ) + + stop_train_button = gr.Button( + i18n("Stop Training & Restart Applio"), visible=False + ) + stop_train_button.click( + fn=restart_applio, + inputs=[], + outputs=[], + ) + + index_button = gr.Button(i18n("Generate Index")) + index_button.click( + fn=run_index_script, + inputs=[model_name, rvc_version], + outputs=[train_output_info], + api_name="generate_index", + ) + + with gr.Accordion(i18n("Export Model"), open=False): + if not os.name == "nt": + gr.Markdown( + i18n( + "The button 'Upload' is only for google colab: Uploads the exported files to the ApplioExported folder in your Google Drive." + ) + ) + with gr.Row(): + with gr.Column(): + pth_file_export = gr.File( + label=i18n("Exported Pth file"), + type="filepath", + value=None, + interactive=False, + ) + pth_dropdown_export = gr.Dropdown( + label=i18n("Pth file"), + info=i18n("Select the pth file to be exported"), + choices=get_pth_list(), + value=None, + interactive=True, + allow_custom_value=True, + ) + with gr.Column(): + index_file_export = gr.File( + label=i18n("Exported Index File"), + type="filepath", + value=None, + interactive=False, + ) + index_dropdown_export = gr.Dropdown( + label=i18n("Index File"), + info=i18n("Select the index file to be exported"), + choices=get_index_list(), + value=None, + interactive=True, + allow_custom_value=True, + ) + with gr.Row(): + with gr.Column(): + refresh_export = gr.Button(i18n("Refresh")) + if not os.name == "nt": + upload_exported = gr.Button(i18n("Upload"), variant="primary") + upload_exported.click( + fn=upload_to_google_drive, + inputs=[pth_dropdown_export, index_dropdown_export], + outputs=[], + ) + + def toggle_visible(checkbox): + return {"visible": checkbox, "__type__": "update"} + + def toggle_visible_hop_length(f0method): + if f0method == "crepe" or f0method == "crepe-tiny": + return {"visible": True, "__type__": "update"} + return {"visible": False, "__type__": "update"} + + def toggle_pretrained(pretrained, custom_pretrained): + if custom_pretrained == False: + return {"visible": pretrained, "__type__": "update"}, { + "visible": False, + "__type__": "update", + } + else: + return {"visible": pretrained, "__type__": "update"}, { + "visible": pretrained, + "__type__": "update", + } + + def enable_stop_train_button(): + return {"visible": False, "__type__": "update"}, { + "visible": True, + "__type__": "update", + } + + def disable_stop_train_button(): + return {"visible": True, "__type__": "update"}, { + "visible": False, + "__type__": "update", + } + + def download_prerequisites(version): + for remote_folder, file_list in pretraineds_v1: + local_folder = folder_mapping.get(remote_folder, "") + missing = False + for file in file_list: + destination_path = os.path.join(local_folder, file) + if not os.path.exists(destination_path): + missing = True + if version == "v1" and missing == True: + gr.Info( + "Downloading prerequisites... Please wait till it finishes to start preprocessing." + ) + run_prerequisites_script("True", "False", "True", "True") + gr.Info( + "Prerequisites downloaded successfully, you may now start preprocessing." + ) + + def toggle_visible_embedder_custom(embedder_model): + if embedder_model == "custom": + return {"visible": True, "__type__": "update"} + return {"visible": False, "__type__": "update"} + + rvc_version.change( + fn=download_prerequisites, + inputs=[rvc_version], + outputs=[], + ) + + refresh.click( + fn=refresh_models_and_datasets, + inputs=[], + outputs=[model_name, dataset_path], + ) + + dataset_creator.change( + fn=toggle_visible, + inputs=[dataset_creator], + outputs=[dataset_creator_settings], + ) + + upload_audio_dataset.upload( + fn=save_drop_dataset_audio, + inputs=[upload_audio_dataset, dataset_name], + outputs=[upload_audio_dataset, dataset_path], + ) + + f0method.change( + fn=toggle_visible_hop_length, + inputs=[f0method], + outputs=[hop_length], + ) + + embedder_model.change( + fn=toggle_visible_embedder_custom, + inputs=[embedder_model], + outputs=[embedder_custom], + ) + embedder_upload_custom.upload( + fn=save_drop_custom_embedder, + inputs=[embedder_upload_custom], + outputs=[embedder_upload_custom], + ) + embedder_custom_refresh.click( + fn=refresh_custom_embedder_list, + inputs=[], + outputs=[embedder_model_custom], + ) + + pretrained.change( + fn=toggle_pretrained, + inputs=[pretrained, custom_pretrained], + outputs=[custom_pretrained, pretrained_custom_settings], + ) + + custom_pretrained.change( + fn=toggle_visible, + inputs=[custom_pretrained], + outputs=[pretrained_custom_settings], + ) + + refresh_custom_pretaineds_button.click( + fn=refresh_custom_pretraineds, + inputs=[], + outputs=[g_pretrained_path, d_pretrained_path], + ) + + upload_pretrained.upload( + fn=save_drop_model, + inputs=[upload_pretrained], + outputs=[upload_pretrained], + ) + + overtraining_detector.change( + fn=toggle_visible, + inputs=[overtraining_detector], + outputs=[overtraining_settings], + ) + + multiple_gpu.change( + fn=toggle_visible, + inputs=[multiple_gpu], + outputs=[gpu_custom_settings], + ) + + train_button.click( + fn=enable_stop_train_button, + inputs=[], + outputs=[train_button, stop_train_button], + ) + + train_output_info.change( + fn=disable_stop_train_button, + inputs=[], + outputs=[train_button, stop_train_button], + ) + + pth_dropdown_export.change( + fn=export_pth, + inputs=[pth_dropdown_export], + outputs=[pth_file_export], + ) + + index_dropdown_export.change( + fn=export_index, + inputs=[index_dropdown_export], + outputs=[index_file_export], + ) + + refresh_export.click( + fn=refresh_pth_and_index_list, + inputs=[], + outputs=[pth_dropdown_export, index_dropdown_export], + ) diff --git a/tabs/tts/tts.py b/tabs/tts/tts.py new file mode 100644 index 0000000000000000000000000000000000000000..9c07093fd899d44010b578259fa038bff7a157a0 --- /dev/null +++ b/tabs/tts/tts.py @@ -0,0 +1,455 @@ +import os, sys +import gradio as gr +import regex as re +import json +import random + +from core import ( + run_tts_script, +) + +from assets.i18n.i18n import I18nAuto + +i18n = I18nAuto() + +now_dir = os.getcwd() +sys.path.append(now_dir) + +model_root = os.path.join(now_dir, "logs") +model_root_relative = os.path.relpath(model_root, now_dir) +custom_embedder_root = os.path.join(now_dir, "rvc", "embedders", "embedders_custom") + +os.makedirs(custom_embedder_root, exist_ok=True) + +custom_embedder_root_relative = os.path.relpath(custom_embedder_root, now_dir) + +names = [ + os.path.join(root, file) + for root, _, files in os.walk(model_root_relative, topdown=False) + for file in files + if ( + file.endswith((".pth", ".onnx")) + and not (file.startswith("G_") or file.startswith("D_")) + ) +] + +indexes_list = [ + os.path.join(root, name) + for root, _, files in os.walk(model_root_relative, topdown=False) + for name in files + if name.endswith(".index") and "trained" not in name +] + +custom_embedders = [ + os.path.join(dirpath, filename) + for dirpath, _, filenames in os.walk(custom_embedder_root_relative) + for filename in filenames + if filename.endswith(".pt") +] + + +def change_choices(): + names = [ + os.path.join(root, file) + for root, _, files in os.walk(model_root_relative, topdown=False) + for file in files + if ( + file.endswith((".pth", ".onnx")) + and not (file.startswith("G_") or file.startswith("D_")) + ) + ] + + indexes_list = [ + os.path.join(root, name) + for root, _, files in os.walk(model_root_relative, topdown=False) + for name in files + if name.endswith(".index") and "trained" not in name + ] + + custom_embedders = [ + os.path.join(dirpath, filename) + for dirpath, _, filenames in os.walk(custom_embedder_root_relative) + for filename in filenames + if filename.endswith(".pt") + ] + return ( + {"choices": sorted(names), "__type__": "update"}, + {"choices": sorted(indexes_list), "__type__": "update"}, + {"choices": sorted(custom_embedders), "__type__": "update"}, + {"choices": sorted(custom_embedders), "__type__": "update"}, + ) + + +def get_indexes(): + indexes_list = [ + os.path.join(dirpath, filename) + for dirpath, _, filenames in os.walk(model_root_relative) + for filename in filenames + if filename.endswith(".index") and "trained" not in filename + ] + + return indexes_list if indexes_list else "" + + +def process_input(file_path): + with open(file_path, "r") as file: + file_contents = file.read() + gr.Info(f"The text from the txt file has been loaded!") + return file_contents, None + + +def match_index(model_file_value): + if model_file_value: + model_folder = os.path.dirname(model_file_value) + index_files = get_indexes() + for index_file in index_files: + if os.path.dirname(index_file) == model_folder: + return index_file + return "" + + +def save_drop_custom_embedder(dropbox): + if ".pt" not in dropbox: + gr.Info( + i18n("The file you dropped is not a valid embedder file. Please try again.") + ) + else: + file_name = os.path.basename(dropbox) + custom_embedder_path = os.path.join(custom_embedder_root, file_name) + if os.path.exists(custom_embedder_path): + os.remove(custom_embedder_path) + os.rename(dropbox, custom_embedder_path) + gr.Info( + i18n( + "Click the refresh button to see the embedder file in the dropdown menu." + ) + ) + return None + + +# TTS tab +def tts_tab(): + default_weight = random.choice(names) if names else "" + with gr.Row(): + with gr.Row(): + model_file = gr.Dropdown( + label=i18n("Voice Model"), + info=i18n("Select the voice model to use for the conversion."), + choices=sorted(names, key=lambda path: os.path.getsize(path)), + interactive=True, + value=default_weight, + allow_custom_value=True, + ) + best_default_index_path = match_index(model_file.value) + index_file = gr.Dropdown( + label=i18n("Index File"), + info=i18n("Select the index file to use for the conversion."), + choices=get_indexes(), + value=best_default_index_path, + interactive=True, + allow_custom_value=True, + ) + with gr.Column(): + refresh_button = gr.Button(i18n("Refresh")) + unload_button = gr.Button(i18n("Unload Voice")) + + unload_button.click( + fn=lambda: ( + {"value": "", "__type__": "update"}, + {"value": "", "__type__": "update"}, + ), + inputs=[], + outputs=[model_file, index_file], + ) + + model_file.select( + fn=lambda model_file_value: match_index(model_file_value), + inputs=[model_file], + outputs=[index_file], + ) + + json_path = os.path.join("rvc", "lib", "tools", "tts_voices.json") + with open(json_path, "r") as file: + tts_voices_data = json.load(file) + + short_names = [voice.get("ShortName", "") for voice in tts_voices_data] + + tts_voice = gr.Dropdown( + label=i18n("TTS Voices"), + info=i18n("Select the TTS voice to use for the conversion."), + choices=short_names, + interactive=True, + value=None, + ) + + tts_rate = gr.Slider( + minimum=-100, + maximum=100, + step=1, + label=i18n("TTS Speed"), + info=i18n("Increase or decrease TTS speed"), + value=0, + interactive=True, + ) + + tts_text = gr.Textbox( + label=i18n("Text to Synthesize"), + info=i18n("Enter the text to synthesize."), + placeholder=i18n("Enter text to synthesize"), + lines=3, + ) + + txt_file = gr.File( + label=i18n("Or you can upload a .txt file"), + type="filepath", + ) + + with gr.Accordion(i18n("Advanced Settings"), open=False): + with gr.Column(): + output_tts_path = gr.Textbox( + label=i18n("Output Path for TTS Audio"), + placeholder=i18n("Enter output path"), + value=os.path.join(now_dir, "assets", "audios", "tts_output.wav"), + interactive=True, + ) + output_rvc_path = gr.Textbox( + label=i18n("Output Path for RVC Audio"), + placeholder=i18n("Enter output path"), + value=os.path.join(now_dir, "assets", "audios", "tts_rvc_output.wav"), + interactive=True, + ) + export_format = gr.Radio( + label=i18n("Export Format"), + info=i18n("Select the format to export the audio."), + choices=["WAV", "MP3", "FLAC", "OGG", "M4A"], + value="WAV", + interactive=True, + ) + split_audio = gr.Checkbox( + label=i18n("Split Audio"), + info=i18n( + "Split the audio into chunks for inference to obtain better results in some cases." + ), + visible=True, + value=False, + interactive=True, + ) + autotune = gr.Checkbox( + label=i18n("Autotune"), + info=i18n( + "Apply a soft autotune to your inferences, recommended for singing conversions." + ), + visible=True, + value=False, + interactive=True, + ) + clean_audio = gr.Checkbox( + label=i18n("Clean Audio"), + info=i18n( + "Clean your audio output using noise detection algorithms, recommended for speaking audios." + ), + visible=True, + value=True, + interactive=True, + ) + clean_strength = gr.Slider( + minimum=0, + maximum=1, + label=i18n("Clean Strength"), + info=i18n( + "Set the clean-up level to the audio you want, the more you increase it the more it will clean up, but it is possible that the audio will be more compressed." + ), + visible=True, + value=0.5, + interactive=True, + ) + upscale_audio = gr.Checkbox( + label=i18n("Upscale Audio"), + info=i18n( + "Upscale the audio to a higher quality, recommended for low-quality audios. (It could take longer to process the audio)" + ), + visible=True, + value=False, + interactive=True, + ) + pitch = gr.Slider( + minimum=-24, + maximum=24, + step=1, + label=i18n("Pitch"), + info=i18n( + "Set the pitch of the audio, the higher the value, the higher the pitch." + ), + value=0, + interactive=True, + ) + filter_radius = gr.Slider( + minimum=0, + maximum=7, + label=i18n("Filter Radius"), + info=i18n( + "If the number is greater than or equal to three, employing median filtering on the collected tone results has the potential to decrease respiration." + ), + value=3, + step=1, + interactive=True, + ) + index_rate = gr.Slider( + minimum=0, + maximum=1, + label=i18n("Search Feature Ratio"), + info=i18n( + "Influence exerted by the index file; a higher value corresponds to greater influence. However, opting for lower values can help mitigate artifacts present in the audio." + ), + value=0.75, + interactive=True, + ) + rms_mix_rate = gr.Slider( + minimum=0, + maximum=1, + label=i18n("Volume Envelope"), + info=i18n( + "Substitute or blend with the volume envelope of the output. The closer the ratio is to 1, the more the output envelope is employed." + ), + value=1, + interactive=True, + ) + protect = gr.Slider( + minimum=0, + maximum=0.5, + label=i18n("Protect Voiceless Consonants"), + info=i18n( + "Safeguard distinct consonants and breathing sounds to prevent electro-acoustic tearing and other artifacts. Pulling the parameter to its maximum value of 0.5 offers comprehensive protection. However, reducing this value might decrease the extent of protection while potentially mitigating the indexing effect." + ), + value=0.5, + interactive=True, + ) + hop_length = gr.Slider( + minimum=1, + maximum=512, + step=1, + label=i18n("Hop Length"), + info=i18n( + "Denotes the duration it takes for the system to transition to a significant pitch change. Smaller hop lengths require more time for inference but tend to yield higher pitch accuracy." + ), + value=128, + interactive=True, + ) + f0method = gr.Radio( + label=i18n("Pitch extraction algorithm"), + info=i18n( + "Pitch extraction algorithm to use for the audio conversion. The default algorithm is rmvpe, which is recommended for most cases." + ), + choices=[ + "pm", + "harvest", + "dio", + "crepe", + "crepe-tiny", + "rmvpe", + "fcpe", + "hybrid[rmvpe+fcpe]", + ], + value="rmvpe", + interactive=True, + ) + embedder_model = gr.Radio( + label=i18n("Embedder Model"), + info=i18n("Model used for learning speaker embedding."), + choices=["hubert", "contentvec", "custom"], + value="hubert", + interactive=True, + ) + with gr.Column(visible=False) as embedder_custom: + with gr.Accordion(i18n("Custom Embedder"), open=True): + embedder_upload_custom = gr.File( + label=i18n("Upload Custom Embedder"), + type="filepath", + interactive=True, + ) + embedder_custom_refresh = gr.Button(i18n("Refresh")) + embedder_model_custom = gr.Dropdown( + label=i18n("Custom Embedder"), + info=i18n( + "Select the custom embedder to use for the conversion." + ), + choices=sorted(custom_embedders), + interactive=True, + allow_custom_value=True, + ) + + convert_button1 = gr.Button(i18n("Convert")) + + with gr.Row(): + vc_output1 = gr.Textbox( + label=i18n("Output Information"), + info=i18n("The output information will be displayed here."), + ) + vc_output2 = gr.Audio(label=i18n("Export Audio")) + + def toggle_visible(checkbox): + return {"visible": checkbox, "__type__": "update"} + + def toggle_visible_embedder_custom(embedder_model): + if embedder_model == "custom": + return {"visible": True, "__type__": "update"} + return {"visible": False, "__type__": "update"} + + clean_audio.change( + fn=toggle_visible, + inputs=[clean_audio], + outputs=[clean_strength], + ) + refresh_button.click( + fn=change_choices, + inputs=[], + outputs=[model_file, index_file], + ) + txt_file.upload( + fn=process_input, + inputs=[txt_file], + outputs=[tts_text, txt_file], + ) + embedder_model.change( + fn=toggle_visible_embedder_custom, + inputs=[embedder_model], + outputs=[embedder_custom], + ) + embedder_upload_custom.upload( + fn=save_drop_custom_embedder, + inputs=[embedder_upload_custom], + outputs=[embedder_upload_custom], + ) + embedder_custom_refresh.click( + fn=change_choices, + inputs=[], + outputs=[model_file, index_file, embedder_model_custom], + ) + convert_button1.click( + fn=run_tts_script, + inputs=[ + tts_text, + tts_voice, + tts_rate, + pitch, + filter_radius, + index_rate, + rms_mix_rate, + protect, + hop_length, + f0method, + output_tts_path, + output_rvc_path, + model_file, + index_file, + split_audio, + autotune, + clean_audio, + clean_strength, + export_format, + embedder_model, + embedder_model_custom, + upscale_audio, + ], + outputs=[vc_output1, vc_output2], + ) diff --git a/tabs/voice_blender/voice_blender.py b/tabs/voice_blender/voice_blender.py new file mode 100644 index 0000000000000000000000000000000000000000..09fb108c042580b423ae180fa28c33c0bc28f9e9 --- /dev/null +++ b/tabs/voice_blender/voice_blender.py @@ -0,0 +1,99 @@ +import os, sys +import gradio as gr +import shutil + +now_dir = os.getcwd() +sys.path.append(now_dir) + +from assets.i18n.i18n import I18nAuto +from core import run_model_blender_script + +i18n = I18nAuto() + + +def update_model_fusion(dropbox): + return dropbox, None + + +def voice_blender_tab(): + gr.Markdown(i18n("## Voice Blender")) + gr.Markdown( + i18n( + "Select two voice models, set your desired blend percentage, and blend them into an entirely new voice." + ) + ) + with gr.Column(): + model_fusion_name = gr.Textbox( + label=i18n("Model Name"), + info=i18n("Name of the new model."), + value="", + max_lines=1, + interactive=True, + placeholder=i18n("Enter model name"), + ) + with gr.Row(): + with gr.Column(): + model_fusion_a_dropbox = gr.File( + label=i18n("Drag and drop your model here"), type="filepath" + ) + model_fusion_a = gr.Textbox( + label=i18n("Path to Model"), + value="", + interactive=True, + placeholder=i18n("Enter path to model"), + info=i18n("You can also use a custom path."), + ) + with gr.Column(): + model_fusion_b_dropbox = gr.File( + label=i18n("Drag and drop your model here"), type="filepath" + ) + model_fusion_b = gr.Textbox( + label=i18n("Path to Model"), + value="", + interactive=True, + placeholder=i18n("Enter path to model"), + info=i18n("You can also use a custom path."), + ) + alpha_a = gr.Slider( + minimum=0, + maximum=1, + label=i18n("Blend Ratio"), + value=0.5, + interactive=True, + info=i18n( + "Adjusting the position more towards one side or the other will make the model more similar to the first or second." + ), + ) + model_fusion_button = gr.Button(i18n("Fusion"), variant="primary") + with gr.Row(): + model_fusion_output_info = gr.Textbox( + label=i18n("Output Information"), + info=i18n("The output information will be displayed here."), + value="", + ) + model_fusion_pth_output = gr.File( + label=i18n("Download Model"), type="filepath", interactive=False + ) + + model_fusion_button.click( + fn=run_model_blender_script, + inputs=[ + model_fusion_name, + model_fusion_a, + model_fusion_b, + alpha_a, + ], + outputs=[model_fusion_output_info, model_fusion_pth_output], + ) + + model_fusion_a_dropbox.upload( + fn=update_model_fusion, + inputs=model_fusion_a_dropbox, + outputs=[model_fusion_a, model_fusion_a_dropbox], + ) + + model_fusion_b_dropbox.upload( + fn=update_model_fusion, + inputs=model_fusion_b_dropbox, + outputs=[model_fusion_b, model_fusion_b_dropbox], + ) diff --git a/tensorlowest.py b/tensorlowest.py deleted file mode 100644 index eccd4dbf3494434e59f7defaae6ab91797263b90..0000000000000000000000000000000000000000 --- a/tensorlowest.py +++ /dev/null @@ -1,123 +0,0 @@ -from tensorboard.backend.event_processing import event_accumulator - -import os -from shutil import copy2 -from re import search as RSearch -import pandas as pd -from ast import literal_eval as LEval - -weights_dir = 'weights/' - -def find_biggest_tensorboard(tensordir): - try: - files = [f for f in os.listdir(tensordir) if f.endswith('.0')] - if not files: - print("No files with the '.0' extension found!") - return - - max_size = 0 - biggest_file = "" - - for file in files: - file_path = os.path.join(tensordir, file) - if os.path.isfile(file_path): - file_size = os.path.getsize(file_path) - if file_size > max_size: - max_size = file_size - biggest_file = file - - return biggest_file - - except FileNotFoundError: - print("Couldn't find your model!") - return - -def main(model_name, save_freq, lastmdls): - global lowestval_weight_dir, scl - - tensordir = os.path.join('logs', model_name) - lowestval_weight_dir = os.path.join(tensordir, "lowestvals") - - latest_file = find_biggest_tensorboard(tensordir) - - if latest_file is None: - print("Couldn't find a valid tensorboard file!") - return - - tfile = os.path.join(tensordir, latest_file) - - ea = event_accumulator.EventAccumulator(tfile, - size_guidance={ - event_accumulator.COMPRESSED_HISTOGRAMS: 500, - event_accumulator.IMAGES: 4, - event_accumulator.AUDIO: 4, - event_accumulator.SCALARS: 0, - event_accumulator.HISTOGRAMS: 1, - }) - - ea.Reload() - ea.Tags() - - scl = ea.Scalars('loss/g/total') - - listwstep = {} - - for val in scl: - if (val.step // save_freq) * save_freq in [val.step for val in scl]: - listwstep[float(val.value)] = (val.step // save_freq) * save_freq - - lowest_vals = sorted(listwstep.keys())[:lastmdls] - - sorted_dict = {value: step for value, step in listwstep.items() if value in lowest_vals} - - return sorted_dict - -def selectweights(model_name, file_dict, weights_dir, lowestval_weight_dir): - os.makedirs(lowestval_weight_dir, exist_ok=True) - logdir = [] - files = [] - lbldict = { - 'Values': {}, - 'Names': {} - } - weights_dir_path = os.path.join(weights_dir, "") - low_val_path = os.path.join(os.getcwd(), os.path.join(lowestval_weight_dir, "")) - - try: - file_dict = LEval(file_dict) - except Exception as e: - print(f"Error! {e}") - return f"Couldn't load tensorboard file! {e}" - - weights = [f for f in os.scandir(weights_dir)] - for key, value in file_dict.items(): - pattern = fr"^{model_name}_.*_s{value}\.pth$" - matching_weights = [f.name for f in weights if f.is_file() and RSearch(pattern, f.name)] - for weight in matching_weights: - source_path = weights_dir_path + weight - destination_path = os.path.join(lowestval_weight_dir, weight) - - copy2(source_path, destination_path) - - logdir.append(f"File = {weight} Value: {key}, Step: {value}") - - lbldict['Names'][weight] = weight - lbldict['Values'][weight] = key - - files.append(low_val_path + weight) - - print(f"File = {weight} Value: {key}, Step: {value}") - - yield ('\n'.join(logdir), files, pd.DataFrame(lbldict)) - - - return ''.join(logdir), files, pd.DataFrame(lbldict) - - -if __name__ == "__main__": - model = str(input("Enter the name of the model: ")) - sav_freq = int(input("Enter save frequency of the model: ")) - ds = main(model, sav_freq) - - if ds: selectweights(model, ds, weights_dir, lowestval_weight_dir) - \ No newline at end of file diff --git a/tools/app.py b/tools/app.py deleted file mode 100644 index 602fbb71a49f2537295337cdcecf501abdd74153..0000000000000000000000000000000000000000 --- a/tools/app.py +++ /dev/null @@ -1,148 +0,0 @@ -import logging -import os - -# os.system("wget -P cvec/ https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt") -import gradio as gr -from dotenv import load_dotenv - -from configs.config import Config -from i18n import I18nAuto -from infer.modules.vc.pipeline import Pipeline -VC = Pipeline - -logging.getLogger("numba").setLevel(logging.WARNING) -logging.getLogger("markdown_it").setLevel(logging.WARNING) -logging.getLogger("urllib3").setLevel(logging.WARNING) -logging.getLogger("matplotlib").setLevel(logging.WARNING) -logger = logging.getLogger(__name__) - -i18n = I18nAuto() -#(i18n) - -load_dotenv() -config = Config() -vc = VC(config) - -weight_root = os.getenv("weight_root") -weight_uvr5_root = os.getenv("weight_uvr5_root") -index_root = os.getenv("index_root") -names = [] -hubert_model = None -for name in os.listdir(weight_root): - if name.endswith(".pth"): - names.append(name) -index_paths = [] -for root, dirs, files in os.walk(index_root, topdown=False): - for name in files: - if name.endswith(".index") and "trained" not in name: - index_paths.append("%s/%s" % (root, name)) - - -app = gr.Blocks() -with app: - with gr.Tabs(): - with gr.TabItem("在线demo"): - gr.Markdown( - value=""" - RVC 在线demo - """ - ) - sid = gr.Dropdown(label=i18n("推理音色"), choices=sorted(names)) - with gr.Column(): - spk_item = gr.Slider( - minimum=0, - maximum=2333, - step=1, - label=i18n("请选择说话人id"), - value=0, - visible=False, - interactive=True, - ) - sid.change(fn=vc.get_vc, inputs=[sid], outputs=[spk_item]) - gr.Markdown( - value=i18n("男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. ") - ) - vc_input3 = gr.Audio(label="上传音频(长度小于90秒)") - vc_transform0 = gr.Number(label=i18n("变调(整数, 半音数量, 升八度12降八度-12)"), value=0) - f0method0 = gr.Radio( - label=i18n("选择音高提取算法,输入歌声可用pm提速,harvest低音好但巨慢无比,crepe效果好但吃GPU"), - choices=["pm", "harvest", "crepe", "rmvpe"], - value="pm", - interactive=True, - ) - filter_radius0 = gr.Slider( - minimum=0, - maximum=7, - label=i18n(">=3则使用对harvest音高识别的结果使用中值滤波,数值为滤波半径,使用可以削弱哑音"), - value=3, - step=1, - interactive=True, - ) - with gr.Column(): - file_index1 = gr.Textbox( - label=i18n("特征检索库文件路径,为空则使用下拉的选择结果"), - value="", - interactive=False, - visible=False, - ) - file_index2 = gr.Dropdown( - label=i18n("自动检测index路径,下拉式选择(dropdown)"), - choices=sorted(index_paths), - interactive=True, - ) - index_rate1 = gr.Slider( - minimum=0, - maximum=1, - label=i18n("检索特征占比"), - value=0.88, - interactive=True, - ) - resample_sr0 = gr.Slider( - minimum=0, - maximum=48000, - label=i18n("后处理重采样至最终采样率,0为不进行重采样"), - value=0, - step=1, - interactive=True, - ) - rms_mix_rate0 = gr.Slider( - minimum=0, - maximum=1, - label=i18n("输入源音量包络替换输出音量包络融合比例,越靠近1越使用输出包络"), - value=1, - interactive=True, - ) - protect0 = gr.Slider( - minimum=0, - maximum=0.5, - label=i18n("保护清辅音和呼吸声,防止电音撕裂等artifact,拉满0.5不开启,调低加大保护力度但可能降低索引效果"), - value=0.33, - step=0.01, - interactive=True, - ) - f0_file = gr.File(label=i18n("F0曲线文件, 可选, 一行一个音高, 代替默认F0及升降调")) - but0 = gr.Button(i18n("转换"), variant="primary") - vc_output1 = gr.Textbox(label=i18n("输出信息")) - vc_output2 = gr.Audio(label=i18n("输出音频(右下角三个点,点了可以下载)")) - but0.click( - vc.vc_single, - [ - spk_item, - vc_input3, - vc_transform0, - f0_file, - f0method0, - file_index1, - file_index2, - # file_big_npy1, - index_rate1, - filter_radius0, - resample_sr0, - rms_mix_rate0, - protect0, - ], - [vc_output1, vc_output2], - ) - - -app.launch() diff --git a/tools/calc_rvc_model_similarity.py b/tools/calc_rvc_model_similarity.py deleted file mode 100644 index 42496e088e51dc5162d0714470c2226f696e260c..0000000000000000000000000000000000000000 --- a/tools/calc_rvc_model_similarity.py +++ /dev/null @@ -1,96 +0,0 @@ -# This code references https://huggingface.co/JosephusCheung/ASimilarityCalculatior/blob/main/qwerty.py -# Fill in the path of the model to be queried and the root directory of the reference models, and this script will return the similarity between the model to be queried and all reference models. -import os -import logging - -logger = logging.getLogger(__name__) - -import torch -import torch.nn as nn -import torch.nn.functional as F - - -def cal_cross_attn(to_q, to_k, to_v, rand_input): - hidden_dim, embed_dim = to_q.shape - attn_to_q = nn.Linear(hidden_dim, embed_dim, bias=False) - attn_to_k = nn.Linear(hidden_dim, embed_dim, bias=False) - attn_to_v = nn.Linear(hidden_dim, embed_dim, bias=False) - attn_to_q.load_state_dict({"weight": to_q}) - attn_to_k.load_state_dict({"weight": to_k}) - attn_to_v.load_state_dict({"weight": to_v}) - - return torch.einsum( - "ik, jk -> ik", - F.softmax( - torch.einsum("ij, kj -> ik", attn_to_q(rand_input), attn_to_k(rand_input)), - dim=-1, - ), - attn_to_v(rand_input), - ) - - -def model_hash(filename): - try: - with open(filename, "rb") as file: - import hashlib - - m = hashlib.sha256() - - file.seek(0x100000) - m.update(file.read(0x10000)) - return m.hexdigest()[0:8] - except FileNotFoundError: - return "NOFILE" - - -def eval(model, n, input): - qk = f"enc_p.encoder.attn_layers.{n}.conv_q.weight" - uk = f"enc_p.encoder.attn_layers.{n}.conv_k.weight" - vk = f"enc_p.encoder.attn_layers.{n}.conv_v.weight" - atoq, atok, atov = model[qk][:, :, 0], model[uk][:, :, 0], model[vk][:, :, 0] - - attn = cal_cross_attn(atoq, atok, atov, input) - return attn - - -def main(path, root): - torch.manual_seed(114514) - model_a = torch.load(path, map_location="cpu")["weight"] - - logger.info("Query:\t\t%s\t%s" % (path, model_hash(path))) - - map_attn_a = {} - map_rand_input = {} - for n in range(6): - hidden_dim, embed_dim, _ = model_a[ - f"enc_p.encoder.attn_layers.{n}.conv_v.weight" - ].shape - rand_input = torch.randn([embed_dim, hidden_dim]) - - map_attn_a[n] = eval(model_a, n, rand_input) - map_rand_input[n] = rand_input - - del model_a - - for name in sorted(list(os.listdir(root))): - path = "%s/%s" % (root, name) - model_b = torch.load(path, map_location="cpu")["weight"] - - sims = [] - for n in range(6): - attn_a = map_attn_a[n] - attn_b = eval(model_b, n, map_rand_input[n]) - - sim = torch.mean(torch.cosine_similarity(attn_a, attn_b)) - sims.append(sim) - - logger.info( - "Reference:\t%s\t%s\t%s" - % (path, model_hash(path), f"{torch.mean(torch.stack(sims)) * 1e2:.2f}%") - ) - - -if __name__ == "__main__": - query_path = r"assets\weights\mi v3.pth" - reference_root = r"assets\weights" - main(query_path, reference_root) diff --git a/tools/dlmodels.bat b/tools/dlmodels.bat deleted file mode 100644 index 5d80f50369b1f3ed37c045d07a9e2ce8954f09d4..0000000000000000000000000000000000000000 --- a/tools/dlmodels.bat +++ /dev/null @@ -1,348 +0,0 @@ -@echo off && chcp 65001 - -echo working dir is %cd% -echo downloading requirement aria2 check. -echo= -dir /a:d/b | findstr "aria2" > flag.txt -findstr "aria2" flag.txt >nul -if %errorlevel% ==0 ( - echo aria2 checked. - echo= -) else ( - echo failed. please downloading aria2 from webpage! - echo unzip it and put in this directory! - timeout /T 5 - start https://github.com/aria2/aria2/releases/tag/release-1.36.0 - echo= - goto end -) - -echo envfiles checking start. -echo= - -for /f %%x in ('findstr /i /c:"aria2" "flag.txt"') do (set aria2=%%x)&goto endSch -:endSch - -set d32=f0D32k.pth -set d40=f0D40k.pth -set d48=f0D48k.pth -set g32=f0G32k.pth -set g40=f0G40k.pth -set g48=f0G48k.pth - -set d40v2=f0D40k.pth -set g40v2=f0G40k.pth - -set dld32=https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0D32k.pth -set dld40=https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0D40k.pth -set dld48=https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0D48k.pth -set dlg32=https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0G32k.pth -set dlg40=https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0G40k.pth -set dlg48=https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0G48k.pth - -set dld40v2=https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/f0D40k.pth -set dlg40v2=https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/f0G40k.pth - -set hp2_all=HP2_all_vocals.pth -set hp3_all=HP3_all_vocals.pth -set hp5_only=HP5_only_main_vocal.pth -set VR_DeEchoAggressive=VR-DeEchoAggressive.pth -set VR_DeEchoDeReverb=VR-DeEchoDeReverb.pth -set VR_DeEchoNormal=VR-DeEchoNormal.pth -set onnx_dereverb=vocals.onnx - -set dlhp2_all=https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/HP2_all_vocals.pth -set dlhp3_all=https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/HP3_all_vocals.pth -set dlhp5_only=https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/HP5_only_main_vocal.pth -set dlVR_DeEchoAggressive=https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/VR-DeEchoAggressive.pth -set dlVR_DeEchoDeReverb=https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/VR-DeEchoDeReverb.pth -set dlVR_DeEchoNormal=https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/VR-DeEchoNormal.pth -set dlonnx_dereverb=https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/onnx_dereverb_By_FoxJoy/vocals.onnx - -set hb=hubert_base.pt - -set dlhb=https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt - -echo dir check start. -echo= - -if exist "%~dp0assets\pretrained" ( - echo dir .\assets\pretrained checked. - ) else ( - echo failed. generating dir .\assets\pretrained. - mkdir pretrained - ) -if exist "%~dp0assets\pretrained_v2" ( - echo dir .\assets\pretrained_v2 checked. - ) else ( - echo failed. generating dir .\assets\pretrained_v2. - mkdir pretrained_v2 - ) -if exist "%~dp0assets\uvr5_weights" ( - echo dir .\assets\uvr5_weights checked. - ) else ( - echo failed. generating dir .\assets\uvr5_weights. - mkdir uvr5_weights - ) -if exist "%~dp0assets\uvr5_weights\onnx_dereverb_By_FoxJoy" ( - echo dir .\assets\uvr5_weights\onnx_dereverb_By_FoxJoy checked. - ) else ( - echo failed. generating dir .\assets\uvr5_weights\onnx_dereverb_By_FoxJoy. - mkdir uvr5_weights\onnx_dereverb_By_FoxJoy - ) - -echo= -echo dir check finished. - -echo= -echo required files check start. - -echo checking D32k.pth -if exist "%~dp0assets\pretrained\D32k.pth" ( - echo D32k.pth in .\assets\pretrained checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/D32k.pth -d %~dp0assets\pretrained -o D32k.pth - if exist "%~dp0assets\pretrained\D32k.pth" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking D40k.pth -if exist "%~dp0assets\pretrained\D40k.pth" ( - echo D40k.pth in .\assets\pretrained checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/D40k.pth -d %~dp0assets\pretrained -o D40k.pth - if exist "%~dp0assets\pretrained\D40k.pth" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking D40k.pth -if exist "%~dp0assets\pretrained_v2\D40k.pth" ( - echo D40k.pth in .\assets\pretrained_v2 checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/D40k.pth -d %~dp0assets\pretrained_v2 -o D40k.pth - if exist "%~dp0assets\pretrained_v2\D40k.pth" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking D48k.pth -if exist "%~dp0assets\pretrained\D48k.pth" ( - echo D48k.pth in .\assets\pretrained checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/D48k.pth -d %~dp0assets\pretrained -o D48k.pth - if exist "%~dp0assets\pretrained\D48k.pth" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking G32k.pth -if exist "%~dp0assets\pretrained\G32k.pth" ( - echo G32k.pth in .\assets\pretrained checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/G32k.pth -d %~dp0assets\pretrained -o G32k.pth - if exist "%~dp0assets\pretrained\G32k.pth" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking G40k.pth -if exist "%~dp0assets\pretrained\G40k.pth" ( - echo G40k.pth in .\assets\pretrained checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/G40k.pth -d %~dp0assets\pretrained -o G40k.pth - if exist "%~dp0assets\pretrained\G40k.pth" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking G40k.pth -if exist "%~dp0assets\pretrained_v2\G40k.pth" ( - echo G40k.pth in .\assets\pretrained_v2 checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/G40k.pth -d %~dp0assets\pretrained_v2 -o G40k.pth - if exist "%~dp0assets\pretrained_v2\G40k.pth" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking G48k.pth -if exist "%~dp0assets\pretrained\G48k.pth" ( - echo G48k.pth in .\assets\pretrained checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/G48k.pth -d %~dp0assets\pretrained -o G48k.pth - if exist "%~dp0assets\pretrained\G48k.pth" (echo download successful.) else (echo please try again! - echo=) - ) - -echo checking %d32% -if exist "%~dp0assets\pretrained\%d32%" ( - echo %d32% in .\assets\pretrained checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M %dld32% -d %~dp0assets\pretrained -o %d32% - if exist "%~dp0assets\pretrained\%d32%" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking %d40% -if exist "%~dp0assets\pretrained\%d40%" ( - echo %d40% in .\assets\pretrained checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M %dld40% -d %~dp0assets\pretrained -o %d40% - if exist "%~dp0assets\pretrained\%d40%" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking %d40v2% -if exist "%~dp0assets\pretrained_v2\%d40v2%" ( - echo %d40v2% in .\assets\pretrained_v2 checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M %dld40v2% -d %~dp0assets\pretrained_v2 -o %d40v2% - if exist "%~dp0assets\pretrained_v2\%d40v2%" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking %d48% -if exist "%~dp0assets\pretrained\%d48%" ( - echo %d48% in .\assets\pretrained checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M %dld48% -d %~dp0assets\pretrained -o %d48% - if exist "%~dp0assets\pretrained\%d48%" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking %g32% -if exist "%~dp0assets\pretrained\%g32%" ( - echo %g32% in .\assets\pretrained checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M %dlg32% -d %~dp0assets\pretrained -o %g32% - if exist "%~dp0assets\pretrained\%g32%" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking %g40% -if exist "%~dp0assets\pretrained\%g40%" ( - echo %g40% in .\assets\pretrained checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M %dlg40% -d %~dp0assets\pretrained -o %g40% - if exist "%~dp0assets\pretrained\%g40%" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking %g40v2% -if exist "%~dp0assets\pretrained_v2\%g40v2%" ( - echo %g40v2% in .\assets\pretrained_v2 checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M %dlg40v2% -d %~dp0assets\pretrained_v2 -o %g40v2% - if exist "%~dp0assets\pretrained_v2\%g40v2%" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking %g48% -if exist "%~dp0assets\pretrained\%g48%" ( - echo %g48% in .\assets\pretrained checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M %dlg48% -d %~dp0assets\pretrained -o %g48% - if exist "%~dp0assets\pretrained\%g48%" (echo download successful.) else (echo please try again! - echo=) - ) - -echo checking %hp2_all% -if exist "%~dp0assets\uvr5_weights\%hp2_all%" ( - echo %hp2_all% in .\assets\uvr5_weights checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M %dlhp2_all% -d %~dp0assets\uvr5_weights -o %hp2_all% - if exist "%~dp0assets\uvr5_weights\%hp2_all%" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking %hp3_all% -if exist "%~dp0assets\uvr5_weights\%hp3_all%" ( - echo %hp3_all% in .\assets\uvr5_weights checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M %dlhp3_all% -d %~dp0assets\uvr5_weights -o %hp3_all% - if exist "%~dp0assets\uvr5_weights\%hp3_all%" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking %hp5_only% -if exist "%~dp0assets\uvr5_weights\%hp5_only%" ( - echo %hp5_only% in .\assets\uvr5_weights checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M %dlhp5_only% -d %~dp0assets\uvr5_weights -o %hp5_only% - if exist "%~dp0assets\uvr5_weights\%hp5_only%" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking %VR_DeEchoAggressive% -if exist "%~dp0assets\uvr5_weights\%VR_DeEchoAggressive%" ( - echo %VR_DeEchoAggressive% in .\assets\uvr5_weights checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M %dlVR_DeEchoAggressive% -d %~dp0assets\uvr5_weights -o %VR_DeEchoAggressive% - if exist "%~dp0assets\uvr5_weights\%VR_DeEchoAggressive%" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking %VR_DeEchoDeReverb% -if exist "%~dp0assets\uvr5_weights\%VR_DeEchoDeReverb%" ( - echo %VR_DeEchoDeReverb% in .\assets\uvr5_weights checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M %dlVR_DeEchoDeReverb% -d %~dp0assets\uvr5_weights -o %VR_DeEchoDeReverb% - if exist "%~dp0assets\uvr5_weights\%VR_DeEchoDeReverb%" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking %VR_DeEchoNormal% -if exist "%~dp0assets\uvr5_weights\%VR_DeEchoNormal%" ( - echo %VR_DeEchoNormal% in .\assets\uvr5_weights checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M %dlVR_DeEchoNormal% -d %~dp0assets\uvr5_weights -o %VR_DeEchoNormal% - if exist "%~dp0assets\uvr5_weights\%VR_DeEchoNormal%" (echo download successful.) else (echo please try again! - echo=) - ) -echo checking %onnx_dereverb% -if exist "%~dp0assets\uvr5_weights\onnx_dereverb_By_FoxJoy\%onnx_dereverb%" ( - echo %onnx_dereverb% in .\assets\uvr5_weights\onnx_dereverb_By_FoxJoy checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M %dlonnx_dereverb% -d %~dp0assets\uvr5_weights\onnx_dereverb_By_FoxJoy -o %onnx_dereverb% - if exist "%~dp0assets\uvr5_weights\onnx_dereverb_By_FoxJoy\%onnx_dereverb%" (echo download successful.) else (echo please try again! - echo=) - ) - -echo checking %hb% -if exist "%~dp0assets\hubert\%hb%" ( - echo %hb% in .\assets\hubert\pretrained checked. - echo= - ) else ( - echo failed. starting download from huggingface. - %~dp0%aria2%\aria2c --console-log-level=error -c -x 16 -s 16 -k 1M %dlhb% -d %~dp0assets\hubert\ -o %hb% - if exist "%~dp0assets\hubert\%hb%" (echo download successful.) else (echo please try again! - echo=) - ) - -echo required files check finished. -echo envfiles check complete. -pause -:end -del flag.txt diff --git a/tools/dlmodels.sh b/tools/dlmodels.sh deleted file mode 100644 index 5fba0edef345c0a4384aa9402cfd5e93e29efdc3..0000000000000000000000000000000000000000 --- a/tools/dlmodels.sh +++ /dev/null @@ -1,566 +0,0 @@ -#!/bin/bash - -echo working dir is $(pwd) -echo downloading requirement aria2 check. - -if command -v aria2c &> /dev/null -then - echo "aria2c command found" -else - echo failed. please install aria2 - sleep 5 - exit 1 -fi - -d32="f0D32k.pth" -d40="f0D40k.pth" -d48="f0D48k.pth" -g32="f0G32k.pth" -g40="f0G40k.pth" -g48="f0G48k.pth" - -d40v2="f0D40k.pth" -g40v2="f0G40k.pth" - -dld32="https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0D32k.pth" -dld40="https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0D40k.pth" -dld48="https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0D48k.pth" -dlg32="https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0G32k.pth" -dlg40="https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0G40k.pth" -dlg48="https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/f0G48k.pth" - -dld40v2="https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/f0D40k.pth" -dlg40v2="https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/f0G40k.pth" - -hp2_all="HP2_all_vocals.pth" -hp3_all="HP3_all_vocals.pth" -hp5_only="HP5_only_main_vocal.pth" -VR_DeEchoAggressive="VR-DeEchoAggressive.pth" -VR_DeEchoDeReverb="VR-DeEchoDeReverb.pth" -VR_DeEchoNormal="VR-DeEchoNormal.pth" -onnx_dereverb="vocals.onnx" -rmvpe="rmvpe.pt" - -dlhp2_all="https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/HP2_all_vocals.pth" -dlhp3_all="https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/HP3_all_vocals.pth" -dlhp5_only="https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/HP5_only_main_vocal.pth" -dlVR_DeEchoAggressive="https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/VR-DeEchoAggressive.pth" -dlVR_DeEchoDeReverb="https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/VR-DeEchoDeReverb.pth" -dlVR_DeEchoNormal="https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/VR-DeEchoNormal.pth" -dlonnx_dereverb="https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/onnx_dereverb_By_FoxJoy/vocals.onnx" -dlrmvpe="https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/rmvpe.pt" - -hb="hubert_base.pt" - -dlhb="https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt" - -echo dir check start. - -if [ -d "./assets/pretrained" ]; then - echo dir ./assets/pretrained checked. -else - echo failed. generating dir ./assets/pretrained. - mkdir pretrained -fi - -if [ -d "./assets/pretrained_v2" ]; then - echo dir ./assets/pretrained_v2 checked. -else - echo failed. generating dir ./assets/pretrained_v2. - mkdir pretrained_v2 -fi - -if [ -d "./assets/uvr5_weights" ]; then - echo dir ./assets/uvr5_weights checked. -else - echo failed. generating dir ./assets/uvr5_weights. - mkdir uvr5_weights -fi - -if [ -d "./assets/uvr5_weights/onnx_dereverb_By_FoxJoy" ]; then - echo dir ./assets/uvr5_weights/onnx_dereverb_By_FoxJoy checked. -else - echo failed. generating dir ./assets/uvr5_weights/onnx_dereverb_By_FoxJoy. - mkdir uvr5_weights/onnx_dereverb_By_FoxJoy -fi - -echo dir check finished. - -echo required files check start. - -echo checking D32k.pth -if [ -f "./assets/pretrained/D32k.pth" ]; then - echo D32k.pth in ./assets/pretrained checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/D32k.pth -d ./assets/pretrained -o D32k.pth - if [ -f "./assets/pretrained/D32k.pth" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking D40k.pth -if [ -f "./assets/pretrained/D40k.pth" ]; then - echo D40k.pth in ./assets/pretrained checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/D40k.pth -d ./assets/pretrained -o D40k.pth - if [ -f "./assets/pretrained/D40k.pth" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking D40k.pth -if [ -f "./assets/pretrained_v2/D40k.pth" ]; then - echo D40k.pth in ./assets/pretrained_v2 checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/D40k.pth -d ./assets/pretrained_v2 -o D40k.pth - if [ -f "./assets/pretrained_v2/D40k.pth" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking D48k.pth -if [ -f "./assets/pretrained/D48k.pth" ]; then - echo D48k.pth in ./assets/pretrained checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/D48k.pth -d ./assets/pretrained -o D48k.pth - if [ -f "./assets/pretrained/D48k.pth" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking G32k.pth -if [ -f "./assets/pretrained/G32k.pth" ]; then - echo G32k.pth in ./assets/pretrained checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/G32k.pth -d ./assets/pretrained -o G32k.pth - if [ -f "./assets/pretrained/G32k.pth" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking G40k.pth -if [ -f "./assets/pretrained/G40k.pth" ]; then - echo G40k.pth in ./assets/pretrained checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/G40k.pth -d ./assets/pretrained -o G40k.pth - if [ -f "./assets/pretrained/G40k.pth" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking G40k.pth -if [ -f "./assets/pretrained_v2/G40k.pth" ]; then - echo G40k.pth in ./assets/pretrained_v2 checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/G40k.pth -d ./assets/pretrained_v2 -o G40k.pth - if [ -f "./assets/pretrained_v2/G40k.pth" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking G48k.pth -if [ -f "./assets/pretrained/G48k.pth" ]; then - echo G48k.pth in ./assets/pretrained checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained/G48k.pth -d ./assets/pretrained -o G48k.pth - if [ -f "./assets/pretrained/G48k.pth" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking $d32 -if [ -f "./assets/pretrained/$d32" ]; then - echo $d32 in ./assets/pretrained checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M $dld32 -d ./assets/pretrained -o $d32 - if [ -f "./assets/pretrained/$d32" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking $d40 -if [ -f "./assets/pretrained/$d40" ]; then - echo $d40 in ./assets/pretrained checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M $dld40 -d ./assets/pretrained -o $d40 - if [ -f "./assets/pretrained/$d40" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking $d40v2 -if [ -f "./assets/pretrained_v2/$d40v2" ]; then - echo $d40v2 in ./assets/pretrained_v2 checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M $dld40v2 -d ./assets/pretrained_v2 -o $d40v2 - if [ -f "./assets/pretrained_v2/$d40v2" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking $d48 -if [ -f "./assets/pretrained/$d48" ]; then - echo $d48 in ./assets/pretrained checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M $dld48 -d ./assets/pretrained -o $d48 - if [ -f "./assets/pretrained/$d48" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking $g32 -if [ -f "./assets/pretrained/$g32" ]; then - echo $g32 in ./assets/pretrained checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M $dlg32 -d ./assets/pretrained -o $g32 - if [ -f "./assets/pretrained/$g32" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking $g40 -if [ -f "./assets/pretrained/$g40" ]; then - echo $g40 in ./assets/pretrained checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M $dlg40 -d ./assets/pretrained -o $g40 - if [ -f "./assets/pretrained/$g40" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking $g40v2 -if [ -f "./assets/pretrained_v2/$g40v2" ]; then - echo $g40v2 in ./assets/pretrained_v2 checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M $dlg40v2 -d ./assets/pretrained_v2 -o $g40v2 - if [ -f "./assets/pretrained_v2/$g40v2" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking $g48 -if [ -f "./assets/pretrained/$g48" ]; then - echo $g48 in ./assets/pretrained checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M $dlg48 -d ./assets/pretrained -o $g48 - if [ -f "./assets/pretrained/$g48" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking $hp2_all -if [ -f "./assets/uvr5_weights/$hp2_all" ]; then - echo $hp2_all in ./assets/uvr5_weights checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M $dlhp2_all -d ./assets/uvr5_weights -o $hp2_all - if [ -f "./assets/uvr5_weights/$hp2_all" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking $hp3_all -if [ -f "./assets/uvr5_weights/$hp3_all" ]; then - echo $hp3_all in ./assets/uvr5_weights checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M $dlhp3_all -d ./assets/uvr5_weights -o $hp3_all - if [ -f "./assets/uvr5_weights/$hp3_all" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking $hp5_only -if [ -f "./assets/uvr5_weights/$hp5_only" ]; then - echo $hp5_only in ./assets/uvr5_weights checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M $dlhp5_only -d ./assets/uvr5_weights -o $hp5_only - if [ -f "./assets/uvr5_weights/$hp5_only" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking $VR_DeEchoAggressive -if [ -f "./assets/uvr5_weights/$VR_DeEchoAggressive" ]; then - echo $VR_DeEchoAggressive in ./assets/uvr5_weights checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M $dlVR_DeEchoAggressive -d ./assets/uvr5_weights -o $VR_DeEchoAggressive - if [ -f "./assets/uvr5_weights/$VR_DeEchoAggressive" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking $VR_DeEchoDeReverb -if [ -f "./assets/uvr5_weights/$VR_DeEchoDeReverb" ]; then - echo $VR_DeEchoDeReverb in ./assets/uvr5_weights checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M $dlVR_DeEchoDeReverb -d ./assets/uvr5_weights -o $VR_DeEchoDeReverb - if [ -f "./assets/uvr5_weights/$VR_DeEchoDeReverb" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking $VR_DeEchoNormal -if [ -f "./assets/uvr5_weights/$VR_DeEchoNormal" ]; then - echo $VR_DeEchoNormal in ./assets/uvr5_weights checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M $dlVR_DeEchoNormal -d ./assets/uvr5_weights -o $VR_DeEchoNormal - if [ -f "./assets/uvr5_weights/$VR_DeEchoNormal" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking $onnx_dereverb -if [ -f "./assets/uvr5_weights/onnx_dereverb_By_FoxJoy/$onnx_dereverb" ]; then - echo $onnx_dereverb in ./assets/uvr5_weights/onnx_dereverb_By_FoxJoy checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M $dlonnx_dereverb -d ./assets/uvr5_weights/onnx_dereverb_By_FoxJoy -o $onnx_dereverb - if [ -f "./assets/uvr5_weights/onnx_dereverb_By_FoxJoy/$onnx_dereverb" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking $rmvpe -if [ -f "./assets/rmvpe/$rmvpe" ]; then - echo $rmvpe in ./assets/rmvpe checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M $dlrmvpe -d ./assets/rmvpe -o $rmvpe - if [ -f "./assets/rmvpe/$rmvpe" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo checking $hb -if [ -f "./assets/hubert/$hb" ]; then - echo $hb in ./assets/hubert/pretrained checked. -else - echo failed. starting download from huggingface. - if command -v aria2c &> /dev/null; then - aria2c --console-log-level=error -c -x 16 -s 16 -k 1M $dlhb -d ./assets/hubert/ -o $hb - if [ -f "./assets/hubert/$hb" ]; then - echo download successful. - else - echo please try again! - exit 1 - fi - else - echo aria2c command not found. Please install aria2c and try again. - exit 1 - fi -fi - -echo required files check finished. diff --git a/tools/infer/infer-pm-index256.py b/tools/infer/infer-pm-index256.py deleted file mode 100644 index da5430421f1de17a57379aefbe7919dd555b2f50..0000000000000000000000000000000000000000 --- a/tools/infer/infer-pm-index256.py +++ /dev/null @@ -1,202 +0,0 @@ -""" - -对源特征进行检索 -""" -import os -import logging - -logger = logging.getLogger(__name__) - -import parselmouth -import torch - -os.environ["CUDA_VISIBLE_DEVICES"] = "0" -# import torchcrepe -from time import time as ttime - -# import pyworld -import librosa -import numpy as np -import soundfile as sf -import torch.nn.functional as F -from fairseq import checkpoint_utils - -# from models import SynthesizerTrn256#hifigan_nonsf -# from lib.infer_pack.models import SynthesizerTrn256NSF as SynthesizerTrn256#hifigan_nsf -from infer.lib.infer_pack.models import ( - SynthesizerTrnMs256NSFsid as SynthesizerTrn256, -) # hifigan_nsf -from scipy.io import wavfile - -# from lib.infer_pack.models import SynthesizerTrnMs256NSFsid_sim as SynthesizerTrn256#hifigan_nsf -# from models import SynthesizerTrn256NSFsim as SynthesizerTrn256#hifigan_nsf -# from models import SynthesizerTrn256NSFsimFlow as SynthesizerTrn256#hifigan_nsf - - -device = torch.device("cuda" if torch.cuda.is_available() else "cpu") -model_path = r"E:\codes\py39\vits_vc_gpu_train\assets\hubert\hubert_base.pt" # -logger.info("Load model(s) from {}".format(model_path)) -models, saved_cfg, task = checkpoint_utils.load_model_ensemble_and_task( - [model_path], - suffix="", -) -model = models[0] -model = model.to(device) -model = model.half() -model.eval() - -# net_g = SynthesizerTrn256(1025,32,192,192,768,2,6,3,0.1,"1", [3,7,11],[[1,3,5], [1,3,5], [1,3,5]],[10,10,2,2],512,[16,16,4,4],183,256,is_half=True)#hifigan#512#256 -# net_g = SynthesizerTrn256(1025,32,192,192,768,2,6,3,0.1,"1", [3,7,11],[[1,3,5], [1,3,5], [1,3,5]],[10,10,2,2],512,[16,16,4,4],109,256,is_half=True)#hifigan#512#256 -net_g = SynthesizerTrn256( - 1025, - 32, - 192, - 192, - 768, - 2, - 6, - 3, - 0, - "1", - [3, 7, 11], - [[1, 3, 5], [1, 3, 5], [1, 3, 5]], - [10, 10, 2, 2], - 512, - [16, 16, 4, 4], - 183, - 256, - is_half=True, -) # hifigan#512#256#no_dropout -# net_g = SynthesizerTrn256(1025,32,192,192,768,2,3,3,0.1,"1", [3,7,11],[[1,3,5], [1,3,5], [1,3,5]],[10,10,2,2],512,[16,16,4,4],0)#ts3 -# net_g = SynthesizerTrn256(1025,32,192,192,768,2,6,3,0.1,"1", [3,7,11],[[1,3,5], [1,3,5], [1,3,5]],[10,10,2],512,[16,16,4],0)#hifigan-ps-sr -# -# net_g = SynthesizerTrn(1025, 32, 192, 192, 768, 2, 6, 3, 0.1, "1", [3, 7, 11], [[1, 3, 5], [1, 3, 5], [1, 3, 5]], [5,5], 512, [15,15], 0)#ms -# net_g = SynthesizerTrn(1025, 32, 192, 192, 768, 2, 6, 3, 0.1, "1", [3, 7, 11], [[1, 3, 5], [1, 3, 5], [1, 3, 5]], [10,10], 512, [16,16], 0)#idwt2 - -# weights=torch.load("infer/ft-mi_1k-noD.pt") -# weights=torch.load("infer/ft-mi-freeze-vocoder-flow-enc_q_1k.pt") -# weights=torch.load("infer/ft-mi-freeze-vocoder_true_1k.pt") -# weights=torch.load("infer/ft-mi-sim1k.pt") -weights = torch.load("infer/ft-mi-no_opt-no_dropout.pt") -logger.debug(net_g.load_state_dict(weights, strict=True)) - -net_g.eval().to(device) -net_g.half() - - -def get_f0(x, p_len, f0_up_key=0): - time_step = 160 / 16000 * 1000 - f0_min = 50 - f0_max = 1100 - f0_mel_min = 1127 * np.log(1 + f0_min / 700) - f0_mel_max = 1127 * np.log(1 + f0_max / 700) - - f0 = ( - parselmouth.Sound(x, 16000) - .to_pitch_ac( - time_step=time_step / 1000, - voicing_threshold=0.6, - pitch_floor=f0_min, - pitch_ceiling=f0_max, - ) - .selected_array["frequency"] - ) - - pad_size = (p_len - len(f0) + 1) // 2 - if pad_size > 0 or p_len - len(f0) - pad_size > 0: - f0 = np.pad(f0, [[pad_size, p_len - len(f0) - pad_size]], mode="constant") - f0 *= pow(2, f0_up_key / 12) - f0bak = f0.copy() - - f0_mel = 1127 * np.log(1 + f0 / 700) - f0_mel[f0_mel > 0] = (f0_mel[f0_mel > 0] - f0_mel_min) * 254 / ( - f0_mel_max - f0_mel_min - ) + 1 - f0_mel[f0_mel <= 1] = 1 - f0_mel[f0_mel > 255] = 255 - # f0_mel[f0_mel > 188] = 188 - f0_coarse = np.rint(f0_mel).astype(np.int32) - return f0_coarse, f0bak - - -import faiss - -index = faiss.read_index("infer/added_IVF512_Flat_mi_baseline_src_feat.index") -big_npy = np.load("infer/big_src_feature_mi.npy") -ta0 = ta1 = ta2 = 0 -for idx, name in enumerate( - [ - "冬之花clip1.wav", - ] -): ## - wav_path = "todo-songs/%s" % name # - f0_up_key = -2 # - audio, sampling_rate = sf.read(wav_path) - if len(audio.shape) > 1: - audio = librosa.to_mono(audio.transpose(1, 0)) - if sampling_rate != 16000: - audio = librosa.resample(audio, orig_sr=sampling_rate, target_sr=16000) - - feats = torch.from_numpy(audio).float() - if feats.dim() == 2: # double channels - feats = feats.mean(-1) - assert feats.dim() == 1, feats.dim() - feats = feats.view(1, -1) - padding_mask = torch.BoolTensor(feats.shape).fill_(False) - inputs = { - "source": feats.half().to(device), - "padding_mask": padding_mask.to(device), - "output_layer": 9, # layer 9 - } - if torch.cuda.is_available(): - torch.cuda.synchronize() - t0 = ttime() - with torch.no_grad(): - logits = model.extract_features(**inputs) - feats = model.final_proj(logits[0]) - - ####索引优化 - npy = feats[0].cpu().numpy().astype("float32") - D, I = index.search(npy, 1) - feats = ( - torch.from_numpy(big_npy[I.squeeze()].astype("float16")).unsqueeze(0).to(device) - ) - - feats = F.interpolate(feats.permute(0, 2, 1), scale_factor=2).permute(0, 2, 1) - if torch.cuda.is_available(): - torch.cuda.synchronize() - t1 = ttime() - # p_len = min(feats.shape[1],10000,pitch.shape[0])#太大了爆显存 - p_len = min(feats.shape[1], 10000) # - pitch, pitchf = get_f0(audio, p_len, f0_up_key) - p_len = min(feats.shape[1], 10000, pitch.shape[0]) # 太大了爆显存 - if torch.cuda.is_available(): - torch.cuda.synchronize() - t2 = ttime() - feats = feats[:, :p_len, :] - pitch = pitch[:p_len] - pitchf = pitchf[:p_len] - p_len = torch.LongTensor([p_len]).to(device) - pitch = torch.LongTensor(pitch).unsqueeze(0).to(device) - sid = torch.LongTensor([0]).to(device) - pitchf = torch.FloatTensor(pitchf).unsqueeze(0).to(device) - with torch.no_grad(): - audio = ( - net_g.infer(feats, p_len, pitch, pitchf, sid)[0][0, 0] - .data.cpu() - .float() - .numpy() - ) # nsf - if torch.cuda.is_available(): - torch.cuda.synchronize() - t3 = ttime() - ta0 += t1 - t0 - ta1 += t2 - t1 - ta2 += t3 - t2 - # wavfile.write("ft-mi_1k-index256-noD-%s.wav"%name, 40000, audio)## - # wavfile.write("ft-mi-freeze-vocoder-flow-enc_q_1k-%s.wav"%name, 40000, audio)## - # wavfile.write("ft-mi-sim1k-%s.wav"%name, 40000, audio)## - wavfile.write("ft-mi-no_opt-no_dropout-%s.wav" % name, 40000, audio) ## - - -logger.debug("%.2fs %.2fs %.2fs", ta0, ta1, ta2) # diff --git a/tools/infer/train-index-v2.py b/tools/infer/train-index-v2.py deleted file mode 100644 index cbeed5d4fbf65fcb9a697a99d5f7b41c844e95d6..0000000000000000000000000000000000000000 --- a/tools/infer/train-index-v2.py +++ /dev/null @@ -1,79 +0,0 @@ -""" -格式:直接cid为自带的index位;aid放不下了,通过字典来查,反正就5w个 -""" -import os -import traceback -import logging - -logger = logging.getLogger(__name__) - -from multiprocessing import cpu_count - -import faiss -import numpy as np -from sklearn.cluster import MiniBatchKMeans - -# ###########如果是原始特征要先写save -n_cpu = 0 -if n_cpu == 0: - n_cpu = cpu_count() -inp_root = r"./logs/anz/3_feature768" -npys = [] -listdir_res = list(os.listdir(inp_root)) -for name in sorted(listdir_res): - phone = np.load("%s/%s" % (inp_root, name)) - npys.append(phone) -big_npy = np.concatenate(npys, 0) -big_npy_idx = np.arange(big_npy.shape[0]) -np.random.shuffle(big_npy_idx) -big_npy = big_npy[big_npy_idx] -logger.debug(big_npy.shape) # (6196072, 192)#fp32#4.43G -if big_npy.shape[0] > 2e5: - # if(1): - info = "Trying doing kmeans %s shape to 10k centers." % big_npy.shape[0] - logger.info(info) - try: - big_npy = ( - MiniBatchKMeans( - n_clusters=10000, - verbose=True, - batch_size=256 * n_cpu, - compute_labels=False, - init="random", - ) - .fit(big_npy) - .cluster_centers_ - ) - except: - info = traceback.format_exc() - logger.warn(info) - -np.save("tools/infer/big_src_feature_mi.npy", big_npy) - -##################train+add -# big_npy=np.load("/bili-coeus/jupyter/jupyterhub-liujing04/vits_ch/inference_f0/big_src_feature_mi.npy") -n_ivf = min(int(16 * np.sqrt(big_npy.shape[0])), big_npy.shape[0] // 39) -index = faiss.index_factory(768, "IVF%s,Flat" % n_ivf) # mi -logger.info("Training...") -index_ivf = faiss.extract_index_ivf(index) # -index_ivf.nprobe = 1 -index.train(big_npy) -faiss.write_index( - index, "tools/infer/trained_IVF%s_Flat_baseline_src_feat_v2.index" % (n_ivf) -) -logger.info("Adding...") -batch_size_add = 8192 -for i in range(0, big_npy.shape[0], batch_size_add): - index.add(big_npy[i : i + batch_size_add]) -faiss.write_index( - index, "tools/infer/added_IVF%s_Flat_mi_baseline_src_feat.index" % (n_ivf) -) -""" -大小(都是FP32) -big_src_feature 2.95G - (3098036, 256) -big_emb 4.43G - (6196072, 192) -big_emb双倍是因为求特征要repeat后再加pitch - -""" diff --git a/tools/infer/train-index.py b/tools/infer/train-index.py deleted file mode 100644 index 44b447ef32148c181eb4bcd9013a22a82371b82c..0000000000000000000000000000000000000000 --- a/tools/infer/train-index.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -格式:直接cid为自带的index位;aid放不下了,通过字典来查,反正就5w个 -""" -import os -import logging - -logger = logging.getLogger(__name__) - -import faiss -import numpy as np - -# ###########如果是原始特征要先写save -inp_root = r"E:\codes\py39\dataset\mi\2-co256" -npys = [] -for name in sorted(list(os.listdir(inp_root))): - phone = np.load("%s/%s" % (inp_root, name)) - npys.append(phone) -big_npy = np.concatenate(npys, 0) -logger.debug(big_npy.shape) # (6196072, 192)#fp32#4.43G -np.save("infer/big_src_feature_mi.npy", big_npy) - -##################train+add -# big_npy=np.load("/bili-coeus/jupyter/jupyterhub-liujing04/vits_ch/inference_f0/big_src_feature_mi.npy") -logger.debug(big_npy.shape) -index = faiss.index_factory(256, "IVF512,Flat") # mi -logger.info("Training...") -index_ivf = faiss.extract_index_ivf(index) # -index_ivf.nprobe = 9 -index.train(big_npy) -faiss.write_index(index, "infer/trained_IVF512_Flat_mi_baseline_src_feat.index") -logger.info("Adding...") -index.add(big_npy) -faiss.write_index(index, "infer/added_IVF512_Flat_mi_baseline_src_feat.index") -""" -大小(都是FP32) -big_src_feature 2.95G - (3098036, 256) -big_emb 4.43G - (6196072, 192) -big_emb双倍是因为求特征要repeat后再加pitch - -""" diff --git a/tools/infer/trans_weights.py b/tools/infer/trans_weights.py deleted file mode 100644 index 1c54eefd6e7c678238d31e251a2e15479bf35d5b..0000000000000000000000000000000000000000 --- a/tools/infer/trans_weights.py +++ /dev/null @@ -1,18 +0,0 @@ -import pdb - -import torch - -# a=torch.load(r"E:\codes\py39\vits_vc_gpu_train\logs\ft-mi-suc\G_1000.pth")["model"]#sim_nsf# -# a=torch.load(r"E:\codes\py39\vits_vc_gpu_train\logs\ft-mi-freeze-vocoder-flow-enc_q\G_1000.pth")["model"]#sim_nsf# -# a=torch.load(r"E:\codes\py39\vits_vc_gpu_train\logs\ft-mi-freeze-vocoder\G_1000.pth")["model"]#sim_nsf# -# a=torch.load(r"E:\codes\py39\vits_vc_gpu_train\logs\ft-mi-test\G_1000.pth")["model"]#sim_nsf# -a = torch.load( - r"E:\codes\py39\vits_vc_gpu_train\logs\ft-mi-no_opt-no_dropout\G_1000.pth" -)[ - "model" -] # sim_nsf# -for key in a.keys(): - a[key] = a[key].half() -# torch.save(a,"ft-mi-freeze-vocoder_true_1k.pt")# -# torch.save(a,"ft-mi-sim1k.pt")# -torch.save(a, "ft-mi-no_opt-no_dropout.pt") # diff --git a/tools/infer_batch_rvc.py b/tools/infer_batch_rvc.py deleted file mode 100644 index 763d17f14877a2ce35f750202e91356c1f24270f..0000000000000000000000000000000000000000 --- a/tools/infer_batch_rvc.py +++ /dev/null @@ -1,72 +0,0 @@ -import argparse -import os -import sys - -print("Command-line arguments:", sys.argv) - -now_dir = os.getcwd() -sys.path.append(now_dir) -import sys - -import tqdm as tq -from dotenv import load_dotenv -from scipy.io import wavfile - -from configs.config import Config -from infer.modules.vc.modules import VC - - -def arg_parse() -> tuple: - parser = argparse.ArgumentParser() - parser.add_argument("--f0up_key", type=int, default=0) - parser.add_argument("--input_path", type=str, help="input path") - parser.add_argument("--index_path", type=str, help="index path") - parser.add_argument("--f0method", type=str, default="harvest", help="harvest or pm") - parser.add_argument("--opt_path", type=str, help="opt path") - parser.add_argument("--model_name", type=str, help="store in assets/weight_root") - parser.add_argument("--index_rate", type=float, default=0.66, help="index rate") - parser.add_argument("--device", type=str, help="device") - parser.add_argument("--is_half", type=bool, help="use half -> True") - parser.add_argument("--filter_radius", type=int, default=3, help="filter radius") - parser.add_argument("--resample_sr", type=int, default=0, help="resample sr") - parser.add_argument("--rms_mix_rate", type=float, default=1, help="rms mix rate") - parser.add_argument("--protect", type=float, default=0.33, help="protect") - - args = parser.parse_args() - sys.argv = sys.argv[:1] - - return args - - -def main(): - load_dotenv() - args = arg_parse() - config = Config() - config.device = args.device if args.device else config.device - config.is_half = args.is_half if args.is_half else config.is_half - vc = VC(config) - vc.get_vc(args.model_name) - audios = os.listdir(args.input_path) - for file in tq.tqdm(audios): - if file.endswith(".wav"): - file_path = os.path.join(args.input_path, file) - _, wav_opt = vc.vc_single( - 0, - file_path, - args.f0up_key, - None, - args.f0method, - args.index_path, - None, - args.index_rate, - args.filter_radius, - args.resample_sr, - args.rms_mix_rate, - args.protect, - ) - out_path = os.path.join(args.opt_path, file) - wavfile.write(out_path, wav_opt[0], wav_opt[1]) - - -if __name__ == "__main__": - main() diff --git a/tools/infer_cli.py b/tools/infer_cli.py deleted file mode 100644 index bbe0a53c1aac6a8f2d42613d554b2bdd07abea2d..0000000000000000000000000000000000000000 --- a/tools/infer_cli.py +++ /dev/null @@ -1,67 +0,0 @@ -import argparse -import os -import sys - -now_dir = os.getcwd() -sys.path.append(now_dir) -from dotenv import load_dotenv -from scipy.io import wavfile - -from configs.config import Config -from infer.modules.vc.modules import VC - -#### -# USAGE -# -# In your Terminal or CMD or whatever - - -def arg_parse() -> tuple: - parser = argparse.ArgumentParser() - parser.add_argument("--f0up_key", type=int, default=0) - parser.add_argument("--input_path", type=str, help="input path") - parser.add_argument("--index_path", type=str, help="index path") - parser.add_argument("--f0method", type=str, default="harvest", help="harvest or pm") - parser.add_argument("--opt_path", type=str, help="opt path") - parser.add_argument("--model_name", type=str, help="store in assets/weight_root") - parser.add_argument("--index_rate", type=float, default=0.66, help="index rate") - parser.add_argument("--device", type=str, help="device") - parser.add_argument("--is_half", type=bool, help="use half -> True") - parser.add_argument("--filter_radius", type=int, default=3, help="filter radius") - parser.add_argument("--resample_sr", type=int, default=0, help="resample sr") - parser.add_argument("--rms_mix_rate", type=float, default=1, help="rms mix rate") - parser.add_argument("--protect", type=float, default=0.33, help="protect") - - args = parser.parse_args() - sys.argv = sys.argv[:1] - - return args - - -def main(): - load_dotenv() - args = arg_parse() - config = Config() - config.device = args.device if args.device else config.device - config.is_half = args.is_half if args.is_half else config.is_half - vc = VC(config) - vc.get_vc(args.model_name) - _, wav_opt = vc.vc_single( - 0, - args.input_path, - args.f0up_key, - None, - args.f0method, - args.index_path, - None, - args.index_rate, - args.filter_radius, - args.resample_sr, - args.rms_mix_rate, - args.protect, - ) - wavfile.write(args.opt_path, wav_opt[0], wav_opt[1]) - - -if __name__ == "__main__": - main() diff --git a/tools/rvc_for_realtime.py b/tools/rvc_for_realtime.py deleted file mode 100644 index f746cde4dfd9c3b87fe844304aa3a975d68b3433..0000000000000000000000000000000000000000 --- a/tools/rvc_for_realtime.py +++ /dev/null @@ -1,381 +0,0 @@ -import os -import sys -import traceback -import logging - -logger = logging.getLogger(__name__) - -from time import time as ttime - -import fairseq -import faiss -import numpy as np -import parselmouth -import pyworld -import scipy.signal as signal -import torch -import torch.nn as nn -import torch.nn.functional as F -import torchcrepe - -from infer.lib.infer_pack.models import ( - SynthesizerTrnMs256NSFsid, - SynthesizerTrnMs256NSFsid_nono, - SynthesizerTrnMs768NSFsid, - SynthesizerTrnMs768NSFsid_nono, -) - -now_dir = os.getcwd() -sys.path.append(now_dir) -from multiprocessing import Manager as M - -from configs.config import Config - -config = Config() - -mm = M() -if config.dml == True: - - def forward_dml(ctx, x, scale): - ctx.scale = scale - res = x.clone().detach() - return res - - fairseq.modules.grad_multiply.GradMultiply.forward = forward_dml - - -# config.device=torch.device("cpu")########强制cpu测试 -# config.is_half=False########强制cpu测试 -class RVC: - def __init__( - self, - key, - pth_path, - index_path, - index_rate, - n_cpu, - inp_q, - opt_q, - device, - last_rvc=None, - ) -> None: - """ - 初始化 - """ - try: - global config - self.inp_q = inp_q - self.opt_q = opt_q - # device="cpu"########强制cpu测试 - self.device = device - self.f0_up_key = key - self.time_step = 160 / 16000 * 1000 - self.f0_min = 50 - self.f0_max = 1100 - self.f0_mel_min = 1127 * np.log(1 + self.f0_min / 700) - self.f0_mel_max = 1127 * np.log(1 + self.f0_max / 700) - self.sr = 16000 - self.window = 160 - self.n_cpu = n_cpu - if index_rate != 0: - self.index = faiss.read_index(index_path) - self.big_npy = self.index.reconstruct_n(0, self.index.ntotal) - logger.info("Index search enabled") - self.pth_path = pth_path - self.index_path = index_path - self.index_rate = index_rate - - if last_rvc is None: - models, _, _ = fairseq.checkpoint_utils.load_model_ensemble_and_task( - ["assets/hubert/hubert_base.pt"], - suffix="", - ) - hubert_model = models[0] - hubert_model = hubert_model.to(device) - if config.is_half: - hubert_model = hubert_model.half() - else: - hubert_model = hubert_model.float() - hubert_model.eval() - self.model = hubert_model - else: - self.model = last_rvc.model - - if last_rvc is None or last_rvc.pth_path != self.pth_path: - cpt = torch.load(self.pth_path, map_location="cpu") - self.tgt_sr = cpt["config"][-1] - cpt["config"][-3] = cpt["weight"]["emb_g.weight"].shape[0] - self.if_f0 = cpt.get("f0", 1) - self.version = cpt.get("version", "v1") - if self.version == "v1": - if self.if_f0 == 1: - self.net_g = SynthesizerTrnMs256NSFsid( - *cpt["config"], is_half=config.is_half - ) - else: - self.net_g = SynthesizerTrnMs256NSFsid_nono(*cpt["config"]) - elif self.version == "v2": - if self.if_f0 == 1: - self.net_g = SynthesizerTrnMs768NSFsid( - *cpt["config"], is_half=config.is_half - ) - else: - self.net_g = SynthesizerTrnMs768NSFsid_nono(*cpt["config"]) - del self.net_g.enc_q - logger.debug(self.net_g.load_state_dict(cpt["weight"], strict=False)) - self.net_g.eval().to(device) - # print(2333333333,device,config.device,self.device)#net_g是device,hubert是config.device - if config.is_half: - self.net_g = self.net_g.half() - else: - self.net_g = self.net_g.float() - self.is_half = config.is_half - else: - self.tgt_sr = last_rvc.tgt_sr - self.if_f0 = last_rvc.if_f0 - self.version = last_rvc.version - self.net_g = last_rvc.net_g - self.is_half = last_rvc.is_half - - if last_rvc is not None and hasattr(last_rvc, "model_rmvpe"): - self.model_rmvpe = last_rvc.model_rmvpe - except: - logger.warn(traceback.format_exc()) - - def change_key(self, new_key): - self.f0_up_key = new_key - - def change_index_rate(self, new_index_rate): - if new_index_rate != 0 and self.index_rate == 0: - self.index = faiss.read_index(self.index_path) - self.big_npy = self.index.reconstruct_n(0, self.index.ntotal) - logger.info("Index search enabled") - self.index_rate = new_index_rate - - def get_f0_post(self, f0): - f0_min = self.f0_min - f0_max = self.f0_max - f0_mel_min = 1127 * np.log(1 + f0_min / 700) - f0_mel_max = 1127 * np.log(1 + f0_max / 700) - f0bak = f0.copy() - f0_mel = 1127 * np.log(1 + f0 / 700) - f0_mel[f0_mel > 0] = (f0_mel[f0_mel > 0] - f0_mel_min) * 254 / ( - f0_mel_max - f0_mel_min - ) + 1 - f0_mel[f0_mel <= 1] = 1 - f0_mel[f0_mel > 255] = 255 - f0_coarse = np.rint(f0_mel).astype(np.int32) - return f0_coarse, f0bak - - def get_f0(self, x, f0_up_key, n_cpu, method="harvest"): - n_cpu = int(n_cpu) - if method == "crepe": - return self.get_f0_crepe(x, f0_up_key) - if method == "rmvpe": - return self.get_f0_rmvpe(x, f0_up_key) - if method == "pm": - p_len = x.shape[0] // 160 + 1 - f0 = ( - parselmouth.Sound(x, 16000) - .to_pitch_ac( - time_step=0.01, - voicing_threshold=0.6, - pitch_floor=50, - pitch_ceiling=1100, - ) - .selected_array["frequency"] - ) - - pad_size = (p_len - len(f0) + 1) // 2 - if pad_size > 0 or p_len - len(f0) - pad_size > 0: - # print(pad_size, p_len - len(f0) - pad_size) - f0 = np.pad( - f0, [[pad_size, p_len - len(f0) - pad_size]], mode="constant" - ) - - f0 *= pow(2, f0_up_key / 12) - return self.get_f0_post(f0) - if n_cpu == 1: - f0, t = pyworld.harvest( - x.astype(np.double), - fs=16000, - f0_ceil=1100, - f0_floor=50, - frame_period=10, - ) - f0 = signal.medfilt(f0, 3) - f0 *= pow(2, f0_up_key / 12) - return self.get_f0_post(f0) - f0bak = np.zeros(x.shape[0] // 160 + 1, dtype=np.float64) - length = len(x) - part_length = 160 * ((length // 160 - 1) // n_cpu + 1) - n_cpu = (length // 160 - 1) // (part_length // 160) + 1 - ts = ttime() - res_f0 = mm.dict() - for idx in range(n_cpu): - tail = part_length * (idx + 1) + 320 - if idx == 0: - self.inp_q.put((idx, x[:tail], res_f0, n_cpu, ts)) - else: - self.inp_q.put( - (idx, x[part_length * idx - 320 : tail], res_f0, n_cpu, ts) - ) - while 1: - res_ts = self.opt_q.get() - if res_ts == ts: - break - f0s = [i[1] for i in sorted(res_f0.items(), key=lambda x: x[0])] - for idx, f0 in enumerate(f0s): - if idx == 0: - f0 = f0[:-3] - elif idx != n_cpu - 1: - f0 = f0[2:-3] - else: - f0 = f0[2:] - f0bak[ - part_length * idx // 160 : part_length * idx // 160 + f0.shape[0] - ] = f0 - f0bak = signal.medfilt(f0bak, 3) - f0bak *= pow(2, f0_up_key / 12) - return self.get_f0_post(f0bak) - - def get_f0_crepe(self, x, f0_up_key): - if "privateuseone" in str(self.device): ###不支持dml,cpu又太慢用不成,拿pm顶替 - return self.get_f0(x, f0_up_key, 1, "pm") - audio = torch.tensor(np.copy(x))[None].float() - # print("using crepe,device:%s"%self.device) - f0, pd = torchcrepe.predict( - audio, - self.sr, - 160, - self.f0_min, - self.f0_max, - "full", - batch_size=512, - # device=self.device if self.device.type!="privateuseone" else "cpu",###crepe不用半精度全部是全精度所以不愁###cpu延迟高到没法用 - device=self.device, - return_periodicity=True, - ) - pd = torchcrepe.filter.median(pd, 3) - f0 = torchcrepe.filter.mean(f0, 3) - f0[pd < 0.1] = 0 - f0 = f0[0].cpu().numpy() - f0 *= pow(2, f0_up_key / 12) - return self.get_f0_post(f0) - - def get_f0_rmvpe(self, x, f0_up_key): - if hasattr(self, "model_rmvpe") == False: - from infer.lib.rmvpe import RMVPE - - logger.info("Loading rmvpe model") - self.model_rmvpe = RMVPE( - # "rmvpe.pt", is_half=self.is_half if self.device.type!="privateuseone" else False, device=self.device if self.device.type!="privateuseone"else "cpu"####dml时强制对rmvpe用cpu跑 - # "rmvpe.pt", is_half=False, device=self.device####dml配置 - # "rmvpe.pt", is_half=False, device="cpu"####锁定cpu配置 - "assets/rmvpe/rmvpe.pt", - is_half=self.is_half, - device=self.device, ####正常逻辑 - ) - # self.model_rmvpe = RMVPE("aug2_58000_half.pt", is_half=self.is_half, device=self.device) - f0 = self.model_rmvpe.infer_from_audio(x, thred=0.03) - f0 *= pow(2, f0_up_key / 12) - return self.get_f0_post(f0) - - def infer( - self, - feats: torch.Tensor, - indata: np.ndarray, - block_frame_16k, - rate, - cache_pitch, - cache_pitchf, - f0method, - ) -> np.ndarray: - feats = feats.view(1, -1) - if config.is_half: - feats = feats.half() - else: - feats = feats.float() - feats = feats.to(self.device) - t1 = ttime() - with torch.no_grad(): - padding_mask = torch.BoolTensor(feats.shape).to(self.device).fill_(False) - inputs = { - "source": feats, - "padding_mask": padding_mask, - "output_layer": 9 if self.version == "v1" else 12, - } - logits = self.model.extract_features(**inputs) - feats = ( - self.model.final_proj(logits[0]) if self.version == "v1" else logits[0] - ) - feats = F.pad(feats, (0, 0, 1, 0)) - t2 = ttime() - try: - if hasattr(self, "index") and self.index_rate != 0: - leng_replace_head = int(rate * feats[0].shape[0]) - npy = feats[0][-leng_replace_head:].cpu().numpy().astype("float32") - score, ix = self.index.search(npy, k=8) - weight = np.square(1 / score) - weight /= weight.sum(axis=1, keepdims=True) - npy = np.sum(self.big_npy[ix] * np.expand_dims(weight, axis=2), axis=1) - if config.is_half: - npy = npy.astype("float16") - feats[0][-leng_replace_head:] = ( - torch.from_numpy(npy).unsqueeze(0).to(self.device) * self.index_rate - + (1 - self.index_rate) * feats[0][-leng_replace_head:] - ) - else: - logger.warn("Index search FAILED or disabled") - except: - traceback.print_exc() - logger.warn("Index search FAILED") - feats = F.interpolate(feats.permute(0, 2, 1), scale_factor=2).permute(0, 2, 1) - t3 = ttime() - if self.if_f0 == 1: - pitch, pitchf = self.get_f0(indata, self.f0_up_key, self.n_cpu, f0method) - start_frame = block_frame_16k // 160 - end_frame = len(cache_pitch) - (pitch.shape[0] - 4) + start_frame - cache_pitch[:] = np.append(cache_pitch[start_frame:end_frame], pitch[3:-1]) - cache_pitchf[:] = np.append( - cache_pitchf[start_frame:end_frame], pitchf[3:-1] - ) - p_len = min(feats.shape[1], 13000, cache_pitch.shape[0]) - else: - cache_pitch, cache_pitchf = None, None - p_len = min(feats.shape[1], 13000) - t4 = ttime() - feats = feats[:, :p_len, :] - if self.if_f0 == 1: - cache_pitch = cache_pitch[:p_len] - cache_pitchf = cache_pitchf[:p_len] - cache_pitch = torch.LongTensor(cache_pitch).unsqueeze(0).to(self.device) - cache_pitchf = torch.FloatTensor(cache_pitchf).unsqueeze(0).to(self.device) - p_len = torch.LongTensor([p_len]).to(self.device) - ii = 0 # sid - sid = torch.LongTensor([ii]).to(self.device) - with torch.no_grad(): - if self.if_f0 == 1: - # print(12222222222,feats.device,p_len.device,cache_pitch.device,cache_pitchf.device,sid.device,rate2) - infered_audio = ( - self.net_g.infer( - feats, p_len, cache_pitch, cache_pitchf, sid, rate - )[0][0, 0] - .data - .float() - ) - else: - infered_audio = ( - self.net_g.infer(feats, p_len, sid, rate)[0][0, 0] - .data - .float() - ) - t5 = ttime() - logger.info( - "Spent time: fea = %.2fs, index = %.2fs, f0 = %.2fs, model = %.2fs", - t2 - t1, - t3 - t2, - t4 - t3, - t5 - t4, - ) - return infered_audio \ No newline at end of file diff --git a/tools/torchgate/__init__.py b/tools/torchgate/__init__.py deleted file mode 100644 index b4a12675828dceb6e6270f9439cdf98ea28ea96d..0000000000000000000000000000000000000000 --- a/tools/torchgate/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -""" -TorchGating is a PyTorch-based implementation of Spectral Gating -================================================ -Author: Asaf Zorea - -Contents --------- -torchgate imports all the functions from PyTorch, and in addition provides: - TorchGating --- A PyTorch module that applies a spectral gate to an input signal - -""" -from .torchgate import TorchGate diff --git a/tools/torchgate/torchgate.py b/tools/torchgate/torchgate.py deleted file mode 100644 index 086f2ab38e4ad79e432a51c38ed7e59defae0acd..0000000000000000000000000000000000000000 --- a/tools/torchgate/torchgate.py +++ /dev/null @@ -1,264 +0,0 @@ -import torch -from torch.nn.functional import conv1d, conv2d -from typing import Union, Optional -from .utils import linspace, temperature_sigmoid, amp_to_db - - -class TorchGate(torch.nn.Module): - """ - A PyTorch module that applies a spectral gate to an input signal. - - Arguments: - sr {int} -- Sample rate of the input signal. - nonstationary {bool} -- Whether to use non-stationary or stationary masking (default: {False}). - n_std_thresh_stationary {float} -- Number of standard deviations above mean to threshold noise for - stationary masking (default: {1.5}). - n_thresh_nonstationary {float} -- Number of multiplies above smoothed magnitude spectrogram. for - non-stationary masking (default: {1.3}). - temp_coeff_nonstationary {float} -- Temperature coefficient for non-stationary masking (default: {0.1}). - n_movemean_nonstationary {int} -- Number of samples for moving average smoothing in non-stationary masking - (default: {20}). - prop_decrease {float} -- Proportion to decrease signal by where the mask is zero (default: {1.0}). - n_fft {int} -- Size of FFT for STFT (default: {1024}). - win_length {[int]} -- Window length for STFT. If None, defaults to `n_fft` (default: {None}). - hop_length {[int]} -- Hop length for STFT. If None, defaults to `win_length` // 4 (default: {None}). - freq_mask_smooth_hz {float} -- Frequency smoothing width for mask (in Hz). If None, no smoothing is applied - (default: {500}). - time_mask_smooth_ms {float} -- Time smoothing width for mask (in ms). If None, no smoothing is applied - (default: {50}). - """ - - @torch.no_grad() - def __init__( - self, - sr: int, - nonstationary: bool = False, - n_std_thresh_stationary: float = 1.5, - n_thresh_nonstationary: float = 1.3, - temp_coeff_nonstationary: float = 0.1, - n_movemean_nonstationary: int = 20, - prop_decrease: float = 1.0, - n_fft: int = 1024, - win_length: bool = None, - hop_length: int = None, - freq_mask_smooth_hz: float = 500, - time_mask_smooth_ms: float = 50, - ): - super().__init__() - - # General Params - self.sr = sr - self.nonstationary = nonstationary - assert 0.0 <= prop_decrease <= 1.0 - self.prop_decrease = prop_decrease - - # STFT Params - self.n_fft = n_fft - self.win_length = self.n_fft if win_length is None else win_length - self.hop_length = self.win_length // 4 if hop_length is None else hop_length - - # Stationary Params - self.n_std_thresh_stationary = n_std_thresh_stationary - - # Non-Stationary Params - self.temp_coeff_nonstationary = temp_coeff_nonstationary - self.n_movemean_nonstationary = n_movemean_nonstationary - self.n_thresh_nonstationary = n_thresh_nonstationary - - # Smooth Mask Params - self.freq_mask_smooth_hz = freq_mask_smooth_hz - self.time_mask_smooth_ms = time_mask_smooth_ms - self.register_buffer("smoothing_filter", self._generate_mask_smoothing_filter()) - - @torch.no_grad() - def _generate_mask_smoothing_filter(self) -> Union[torch.Tensor, None]: - """ - A PyTorch module that applies a spectral gate to an input signal using the STFT. - - Returns: - smoothing_filter (torch.Tensor): a 2D tensor representing the smoothing filter, - with shape (n_grad_freq, n_grad_time), where n_grad_freq is the number of frequency - bins to smooth and n_grad_time is the number of time frames to smooth. - If both self.freq_mask_smooth_hz and self.time_mask_smooth_ms are None, returns None. - """ - if self.freq_mask_smooth_hz is None and self.time_mask_smooth_ms is None: - return None - - n_grad_freq = ( - 1 - if self.freq_mask_smooth_hz is None - else int(self.freq_mask_smooth_hz / (self.sr / (self.n_fft / 2))) - ) - if n_grad_freq < 1: - raise ValueError( - f"freq_mask_smooth_hz needs to be at least {int((self.sr / (self._n_fft / 2)))} Hz" - ) - - n_grad_time = ( - 1 - if self.time_mask_smooth_ms is None - else int(self.time_mask_smooth_ms / ((self.hop_length / self.sr) * 1000)) - ) - if n_grad_time < 1: - raise ValueError( - f"time_mask_smooth_ms needs to be at least {int((self.hop_length / self.sr) * 1000)} ms" - ) - - if n_grad_time == 1 and n_grad_freq == 1: - return None - - v_f = torch.cat( - [ - linspace(0, 1, n_grad_freq + 1, endpoint=False), - linspace(1, 0, n_grad_freq + 2), - ] - )[1:-1] - v_t = torch.cat( - [ - linspace(0, 1, n_grad_time + 1, endpoint=False), - linspace(1, 0, n_grad_time + 2), - ] - )[1:-1] - smoothing_filter = torch.outer(v_f, v_t).unsqueeze(0).unsqueeze(0) - - return smoothing_filter / smoothing_filter.sum() - - @torch.no_grad() - def _stationary_mask( - self, X_db: torch.Tensor, xn: Optional[torch.Tensor] = None - ) -> torch.Tensor: - """ - Computes a stationary binary mask to filter out noise in a log-magnitude spectrogram. - - Arguments: - X_db (torch.Tensor): 2D tensor of shape (frames, freq_bins) containing the log-magnitude spectrogram. - xn (torch.Tensor): 1D tensor containing the audio signal corresponding to X_db. - - Returns: - sig_mask (torch.Tensor): Binary mask of the same shape as X_db, where values greater than the threshold - are set to 1, and the rest are set to 0. - """ - if xn is not None: - XN = torch.stft( - xn, - n_fft=self.n_fft, - hop_length=self.hop_length, - win_length=self.win_length, - return_complex=True, - pad_mode="constant", - center=True, - window=torch.hann_window(self.win_length).to(xn.device), - ) - - XN_db = amp_to_db(XN).to(dtype=X_db.dtype) - else: - XN_db = X_db - - # calculate mean and standard deviation along the frequency axis - std_freq_noise, mean_freq_noise = torch.std_mean(XN_db, dim=-1) - - # compute noise threshold - noise_thresh = mean_freq_noise + std_freq_noise * self.n_std_thresh_stationary - - # create binary mask by thresholding the spectrogram - sig_mask = X_db > noise_thresh.unsqueeze(2) - return sig_mask - - @torch.no_grad() - def _nonstationary_mask(self, X_abs: torch.Tensor) -> torch.Tensor: - """ - Computes a non-stationary binary mask to filter out noise in a log-magnitude spectrogram. - - Arguments: - X_abs (torch.Tensor): 2D tensor of shape (frames, freq_bins) containing the magnitude spectrogram. - - Returns: - sig_mask (torch.Tensor): Binary mask of the same shape as X_abs, where values greater than the threshold - are set to 1, and the rest are set to 0. - """ - X_smoothed = ( - conv1d( - X_abs.reshape(-1, 1, X_abs.shape[-1]), - torch.ones( - self.n_movemean_nonstationary, - dtype=X_abs.dtype, - device=X_abs.device, - ).view(1, 1, -1), - padding="same", - ).view(X_abs.shape) - / self.n_movemean_nonstationary - ) - - # Compute slowness ratio and apply temperature sigmoid - slowness_ratio = (X_abs - X_smoothed) / (X_smoothed + 1e-6) - sig_mask = temperature_sigmoid( - slowness_ratio, self.n_thresh_nonstationary, self.temp_coeff_nonstationary - ) - - return sig_mask - - def forward( - self, x: torch.Tensor, xn: Optional[torch.Tensor] = None - ) -> torch.Tensor: - """ - Apply the proposed algorithm to the input signal. - - Arguments: - x (torch.Tensor): The input audio signal, with shape (batch_size, signal_length). - xn (Optional[torch.Tensor]): The noise signal used for stationary noise reduction. If `None`, the input - signal is used as the noise signal. Default: `None`. - - Returns: - torch.Tensor: The denoised audio signal, with the same shape as the input signal. - """ - assert x.ndim == 2 - if x.shape[-1] < self.win_length * 2: - raise Exception(f"x must be bigger than {self.win_length * 2}") - - assert xn is None or xn.ndim == 1 or xn.ndim == 2 - if xn is not None and xn.shape[-1] < self.win_length * 2: - raise Exception(f"xn must be bigger than {self.win_length * 2}") - - # Compute short-time Fourier transform (STFT) - X = torch.stft( - x, - n_fft=self.n_fft, - hop_length=self.hop_length, - win_length=self.win_length, - return_complex=True, - pad_mode="constant", - center=True, - window=torch.hann_window(self.win_length).to(x.device), - ) - - # Compute signal mask based on stationary or nonstationary assumptions - if self.nonstationary: - sig_mask = self._nonstationary_mask(X.abs()) - else: - sig_mask = self._stationary_mask(amp_to_db(X), xn) - - # Propagate decrease in signal power - sig_mask = self.prop_decrease * (sig_mask * 1.0 - 1.0) + 1.0 - - # Smooth signal mask with 2D convolution - if self.smoothing_filter is not None: - sig_mask = conv2d( - sig_mask.unsqueeze(1), - self.smoothing_filter.to(sig_mask.dtype), - padding="same", - ) - - # Apply signal mask to STFT magnitude and phase components - Y = X * sig_mask.squeeze(1) - - # Inverse STFT to obtain time-domain signal - y = torch.istft( - Y, - n_fft=self.n_fft, - hop_length=self.hop_length, - win_length=self.win_length, - center=True, - window=torch.hann_window(self.win_length).to(Y.device), - ) - - return y.to(dtype=x.dtype) diff --git a/tools/torchgate/utils.py b/tools/torchgate/utils.py deleted file mode 100644 index dc97d45a399c112c76e80cdd8c73cfebaf3ef6ad..0000000000000000000000000000000000000000 --- a/tools/torchgate/utils.py +++ /dev/null @@ -1,66 +0,0 @@ -import torch -from torch.types import Number - - -@torch.no_grad() -def amp_to_db(x: torch.Tensor, eps=torch.finfo(torch.float64).eps, top_db=40) -> torch.Tensor: - """ - Convert the input tensor from amplitude to decibel scale. - - Arguments: - x {[torch.Tensor]} -- [Input tensor.] - - Keyword Arguments: - eps {[float]} -- [Small value to avoid numerical instability.] - (default: {torch.finfo(torch.float64).eps}) - top_db {[float]} -- [threshold the output at ``top_db`` below the peak] - ` (default: {40}) - - Returns: - [torch.Tensor] -- [Output tensor in decibel scale.] - """ - x_db = 20 * torch.log10(x.abs() + eps) - return torch.max(x_db, (x_db.max(-1).values - top_db).unsqueeze(-1)) - - -@torch.no_grad() -def temperature_sigmoid(x: torch.Tensor, x0: float, temp_coeff: float) -> torch.Tensor: - """ - Apply a sigmoid function with temperature scaling. - - Arguments: - x {[torch.Tensor]} -- [Input tensor.] - x0 {[float]} -- [Parameter that controls the threshold of the sigmoid.] - temp_coeff {[float]} -- [Parameter that controls the slope of the sigmoid.] - - Returns: - [torch.Tensor] -- [Output tensor after applying the sigmoid with temperature scaling.] - """ - return torch.sigmoid((x - x0) / temp_coeff) - - -@torch.no_grad() -def linspace(start: Number, stop: Number, num: int = 50, endpoint: bool = True, **kwargs) -> torch.Tensor: - """ - Generate a linearly spaced 1-D tensor. - - Arguments: - start {[Number]} -- [The starting value of the sequence.] - stop {[Number]} -- [The end value of the sequence, unless `endpoint` is set to False. - In that case, the sequence consists of all but the last of ``num + 1`` - evenly spaced samples, so that `stop` is excluded. Note that the step - size changes when `endpoint` is False.] - - Keyword Arguments: - num {[int]} -- [Number of samples to generate. Default is 50. Must be non-negative.] - endpoint {[bool]} -- [If True, `stop` is the last sample. Otherwise, it is not included. - Default is True.] - **kwargs -- [Additional arguments to be passed to the underlying PyTorch `linspace` function.] - - Returns: - [torch.Tensor] -- [1-D tensor of `num` equally spaced samples from `start` to `stop`.] - """ - if endpoint: - return torch.linspace(start, stop, num, **kwargs) - else: - return torch.linspace(start, stop, num + 1, **kwargs)[:-1] diff --git a/tracks/.gitkeep b/tracks/.gitkeep deleted file mode 100644 index 8b137891791fe96927ad78e64b0aad7bded08bdc..0000000000000000000000000000000000000000 --- a/tracks/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/train/cmd.txt b/train/cmd.txt deleted file mode 100644 index e4b895e54fbcd4ffa5ba4ded7d0f37f04f67392f..0000000000000000000000000000000000000000 --- a/train/cmd.txt +++ /dev/null @@ -1 +0,0 @@ -python train_nsf_sim_cache_sid.py -c configs/mi_mix40k_nsf_co256_cs1sid_ms2048.json -m ft-mi \ No newline at end of file diff --git a/train/losses.py b/train/losses.py deleted file mode 100644 index b89038f14d06d7fae43628183e9ffb465e4edafd..0000000000000000000000000000000000000000 --- a/train/losses.py +++ /dev/null @@ -1,59 +0,0 @@ -import torch -from torch.nn import functional as F - - -def feature_loss(fmap_r, fmap_g): - loss = 0 - for dr, dg in zip(fmap_r, fmap_g): - for rl, gl in zip(dr, dg): - rl = rl.float().detach() - gl = gl.float() - loss += torch.mean(torch.abs(rl - gl)) - - return loss * 2 - - -def discriminator_loss(disc_real_outputs, disc_generated_outputs): - loss = 0 - r_losses = [] - g_losses = [] - for dr, dg in zip(disc_real_outputs, disc_generated_outputs): - dr = dr.float() - dg = dg.float() - r_loss = torch.mean((1 - dr) ** 2) - g_loss = torch.mean(dg**2) - loss += r_loss + g_loss - r_losses.append(r_loss.item()) - g_losses.append(g_loss.item()) - - return loss, r_losses, g_losses - - -def generator_loss(disc_outputs): - loss = 0 - gen_losses = [] - for dg in disc_outputs: - dg = dg.float() - l = torch.mean((1 - dg) ** 2) - gen_losses.append(l) - loss += l - - return loss, gen_losses - - -def kl_loss(z_p, logs_q, m_p, logs_p, z_mask): - """ - z_p, logs_q: [b, h, t_t] - m_p, logs_p: [b, h, t_t] - """ - z_p = z_p.float() - logs_q = logs_q.float() - m_p = m_p.float() - logs_p = logs_p.float() - z_mask = z_mask.float() - - kl = logs_p - logs_q - 0.5 - kl += 0.5 * ((z_p - m_p) ** 2) * torch.exp(-2.0 * logs_p) - kl = torch.sum(kl * z_mask) - l = kl / torch.sum(z_mask) - return l diff --git a/train/process_ckpt.py b/train/process_ckpt.py deleted file mode 100644 index e3c3dba6df4b4f71a4d0865cdc96241d17da8781..0000000000000000000000000000000000000000 --- a/train/process_ckpt.py +++ /dev/null @@ -1,259 +0,0 @@ -import torch, traceback, os, pdb, sys - -now_dir = os.getcwd() -sys.path.append(now_dir) -from collections import OrderedDict -from i18n import I18nAuto - -i18n = I18nAuto() - - -def savee(ckpt, sr, if_f0, name, epoch, version, hps): - try: - opt = OrderedDict() - opt["weight"] = {} - for key in ckpt.keys(): - if "enc_q" in key: - continue - opt["weight"][key] = ckpt[key].half() - opt["config"] = [ - hps.data.filter_length // 2 + 1, - 32, - hps.model.inter_channels, - hps.model.hidden_channels, - hps.model.filter_channels, - hps.model.n_heads, - hps.model.n_layers, - hps.model.kernel_size, - hps.model.p_dropout, - hps.model.resblock, - hps.model.resblock_kernel_sizes, - hps.model.resblock_dilation_sizes, - hps.model.upsample_rates, - hps.model.upsample_initial_channel, - hps.model.upsample_kernel_sizes, - hps.model.spk_embed_dim, - hps.model.gin_channels, - hps.data.sampling_rate, - ] - opt["info"] = "%sepoch" % epoch - opt["sr"] = sr - opt["f0"] = if_f0 - opt["version"] = version - torch.save(opt, "weights/%s.pth" % name) - return "Success." - except: - return traceback.format_exc() - - -def show_info(path): - try: - a = torch.load(path, map_location="cpu") - return "Epochs: %s\nSample rate: %s\nPitch guidance: %s\nRVC Version: %s" % ( - a.get("info", "None"), - a.get("sr", "None"), - a.get("f0", "None"), - a.get("version", "None"), - ) - except: - return traceback.format_exc() - - -def extract_small_model(path, name, sr, if_f0, info, version): - try: - ckpt = torch.load(path, map_location="cpu") - if "model" in ckpt: - ckpt = ckpt["model"] - opt = OrderedDict() - opt["weight"] = {} - for key in ckpt.keys(): - if "enc_q" in key: - continue - opt["weight"][key] = ckpt[key].half() - if sr == "40k": - opt["config"] = [ - 1025, - 32, - 192, - 192, - 768, - 2, - 6, - 3, - 0, - "1", - [3, 7, 11], - [[1, 3, 5], [1, 3, 5], [1, 3, 5]], - [10, 10, 2, 2], - 512, - [16, 16, 4, 4], - 109, - 256, - 40000, - ] - elif sr == "48k": - if version == "v1": - opt["config"] = [ - 1025, - 32, - 192, - 192, - 768, - 2, - 6, - 3, - 0, - "1", - [3, 7, 11], - [[1, 3, 5], [1, 3, 5], [1, 3, 5]], - [10, 6, 2, 2, 2], - 512, - [16, 16, 4, 4, 4], - 109, - 256, - 48000, - ] - else: - opt["config"] = [ - 1025, - 32, - 192, - 192, - 768, - 2, - 6, - 3, - 0, - "1", - [3, 7, 11], - [[1, 3, 5], [1, 3, 5], [1, 3, 5]], - [12, 10, 2, 2], - 512, - [24, 20, 4, 4], - 109, - 256, - 48000, - ] - elif sr == "32k": - if version == "v1": - opt["config"] = [ - 513, - 32, - 192, - 192, - 768, - 2, - 6, - 3, - 0, - "1", - [3, 7, 11], - [[1, 3, 5], [1, 3, 5], [1, 3, 5]], - [10, 4, 2, 2, 2], - 512, - [16, 16, 4, 4, 4], - 109, - 256, - 32000, - ] - else: - opt["config"] = [ - 513, - 32, - 192, - 192, - 768, - 2, - 6, - 3, - 0, - "1", - [3, 7, 11], - [[1, 3, 5], [1, 3, 5], [1, 3, 5]], - [10, 8, 2, 2], - 512, - [20, 16, 4, 4], - 109, - 256, - 32000, - ] - if info == "": - info = "Extracted model." - opt["info"] = info - opt["version"] = version - opt["sr"] = sr - opt["f0"] = int(if_f0) - torch.save(opt, "weights/%s.pth" % name) - return "Success." - except: - return traceback.format_exc() - - -def change_info(path, info, name): - try: - ckpt = torch.load(path, map_location="cpu") - ckpt["info"] = info - if name == "": - name = os.path.basename(path) - torch.save(ckpt, "weights/%s" % name) - return "Success." - except: - return traceback.format_exc() - - -def merge(path1, path2, alpha1, sr, f0, info, name, version): - try: - - def extract(ckpt): - a = ckpt["model"] - opt = OrderedDict() - opt["weight"] = {} - for key in a.keys(): - if "enc_q" in key: - continue - opt["weight"][key] = a[key] - return opt - - ckpt1 = torch.load(path1, map_location="cpu") - ckpt2 = torch.load(path2, map_location="cpu") - cfg = ckpt1["config"] - if "model" in ckpt1: - ckpt1 = extract(ckpt1) - else: - ckpt1 = ckpt1["weight"] - if "model" in ckpt2: - ckpt2 = extract(ckpt2) - else: - ckpt2 = ckpt2["weight"] - if sorted(list(ckpt1.keys())) != sorted(list(ckpt2.keys())): - return "Fail to merge the models. The model architectures are not the same." - opt = OrderedDict() - opt["weight"] = {} - for key in ckpt1.keys(): - # try: - if key == "emb_g.weight" and ckpt1[key].shape != ckpt2[key].shape: - min_shape0 = min(ckpt1[key].shape[0], ckpt2[key].shape[0]) - opt["weight"][key] = ( - alpha1 * (ckpt1[key][:min_shape0].float()) - + (1 - alpha1) * (ckpt2[key][:min_shape0].float()) - ).half() - else: - opt["weight"][key] = ( - alpha1 * (ckpt1[key].float()) + (1 - alpha1) * (ckpt2[key].float()) - ).half() - # except: - # pdb.set_trace() - opt["config"] = cfg - """ - if(sr=="40k"):opt["config"] = [1025, 32, 192, 192, 768, 2, 6, 3, 0, "1", [3, 7, 11], [[1, 3, 5], [1, 3, 5], [1, 3, 5]], [10, 10, 2, 2], 512, [16, 16, 4, 4,4], 109, 256, 40000] - elif(sr=="48k"):opt["config"] = [1025, 32, 192, 192, 768, 2, 6, 3, 0, "1", [3, 7, 11], [[1, 3, 5], [1, 3, 5], [1, 3, 5]], [10,6,2,2,2], 512, [16, 16, 4, 4], 109, 256, 48000] - elif(sr=="32k"):opt["config"] = [513, 32, 192, 192, 768, 2, 6, 3, 0, "1", [3, 7, 11], [[1, 3, 5], [1, 3, 5], [1, 3, 5]], [10, 4, 2, 2, 2], 512, [16, 16, 4, 4,4], 109, 256, 32000] - """ - opt["sr"] = sr - opt["f0"] = 1 if f0 else 0 - opt["version"] = version - opt["info"] = info - torch.save(opt, "weights/%s.pth" % name) - return "Success." - except: - return traceback.format_exc() diff --git a/train/utils.py b/train/utils.py deleted file mode 100644 index aae833b08acc24b848aa70114fd9b7aad8b1a6ad..0000000000000000000000000000000000000000 --- a/train/utils.py +++ /dev/null @@ -1,500 +0,0 @@ -import os, traceback -import glob -import sys -import argparse -import logging -import json -import subprocess -import numpy as np -from scipy.io.wavfile import read -import torch - -MATPLOTLIB_FLAG = False - -logging.basicConfig(stream=sys.stdout, level=logging.DEBUG) -logger = logging - - -def load_checkpoint_d(checkpoint_path, combd, sbd, optimizer=None, load_opt=1): - assert os.path.isfile(checkpoint_path) - checkpoint_dict = torch.load(checkpoint_path, map_location="cpu") - - ################## - def go(model, bkey): - saved_state_dict = checkpoint_dict[bkey] - if hasattr(model, "module"): - state_dict = model.module.state_dict() - else: - state_dict = model.state_dict() - new_state_dict = {} - for k, v in state_dict.items(): # 模型需要的shape - try: - new_state_dict[k] = saved_state_dict[k] - if saved_state_dict[k].shape != state_dict[k].shape: - print( - "shape-%s-mismatch|need-%s|get-%s" - % (k, state_dict[k].shape, saved_state_dict[k].shape) - ) # - raise KeyError - except: - # logger.info(traceback.format_exc()) - logger.info("%s is not in the checkpoint" % k) # pretrain缺失的 - new_state_dict[k] = v # 模型自带的随机值 - if hasattr(model, "module"): - model.module.load_state_dict(new_state_dict, strict=False) - else: - model.load_state_dict(new_state_dict, strict=False) - - go(combd, "combd") - go(sbd, "sbd") - ############# - logger.info("Loaded model weights") - - iteration = checkpoint_dict["iteration"] - learning_rate = checkpoint_dict["learning_rate"] - if ( - optimizer is not None and load_opt == 1 - ): ###加载不了,如果是空的的话,重新初始化,可能还会影响lr时间表的更新,因此在train文件最外围catch - # try: - optimizer.load_state_dict(checkpoint_dict["optimizer"]) - # except: - # traceback.print_exc() - logger.info("Loaded checkpoint '{}' (epoch {})".format(checkpoint_path, iteration)) - return model, optimizer, learning_rate, iteration - - -# def load_checkpoint(checkpoint_path, model, optimizer=None): -# assert os.path.isfile(checkpoint_path) -# checkpoint_dict = torch.load(checkpoint_path, map_location='cpu') -# iteration = checkpoint_dict['iteration'] -# learning_rate = checkpoint_dict['learning_rate'] -# if optimizer is not None: -# optimizer.load_state_dict(checkpoint_dict['optimizer']) -# # print(1111) -# saved_state_dict = checkpoint_dict['model'] -# # print(1111) -# -# if hasattr(model, 'module'): -# state_dict = model.module.state_dict() -# else: -# state_dict = model.state_dict() -# new_state_dict= {} -# for k, v in state_dict.items(): -# try: -# new_state_dict[k] = saved_state_dict[k] -# except: -# logger.info("%s is not in the checkpoint" % k) -# new_state_dict[k] = v -# if hasattr(model, 'module'): -# model.module.load_state_dict(new_state_dict) -# else: -# model.load_state_dict(new_state_dict) -# logger.info("Loaded checkpoint '{}' (epoch {})" .format( -# checkpoint_path, iteration)) -# return model, optimizer, learning_rate, iteration -def load_checkpoint(checkpoint_path, model, optimizer=None, load_opt=1): - assert os.path.isfile(checkpoint_path) - checkpoint_dict = torch.load(checkpoint_path, map_location="cpu") - - saved_state_dict = checkpoint_dict["model"] - if hasattr(model, "module"): - state_dict = model.module.state_dict() - else: - state_dict = model.state_dict() - new_state_dict = {} - for k, v in state_dict.items(): # 模型需要的shape - try: - new_state_dict[k] = saved_state_dict[k] - if saved_state_dict[k].shape != state_dict[k].shape: - print( - "shape-%s-mismatch|need-%s|get-%s" - % (k, state_dict[k].shape, saved_state_dict[k].shape) - ) # - raise KeyError - except: - # logger.info(traceback.format_exc()) - logger.info("%s is not in the checkpoint" % k) # pretrain缺失的 - new_state_dict[k] = v # 模型自带的随机值 - if hasattr(model, "module"): - model.module.load_state_dict(new_state_dict, strict=False) - else: - model.load_state_dict(new_state_dict, strict=False) - logger.info("Loaded model weights") - - iteration = checkpoint_dict["iteration"] - learning_rate = checkpoint_dict["learning_rate"] - if ( - optimizer is not None and load_opt == 1 - ): ###加载不了,如果是空的的话,重新初始化,可能还会影响lr时间表的更新,因此在train文件最外围catch - # try: - optimizer.load_state_dict(checkpoint_dict["optimizer"]) - # except: - # traceback.print_exc() - logger.info("Loaded checkpoint '{}' (epoch {})".format(checkpoint_path, iteration)) - return model, optimizer, learning_rate, iteration - - -def save_checkpoint(model, optimizer, learning_rate, iteration, checkpoint_path): - logger.info( - "Saving model and optimizer state at epoch {} to {}".format( - iteration, checkpoint_path - ) - ) - if hasattr(model, "module"): - state_dict = model.module.state_dict() - else: - state_dict = model.state_dict() - torch.save( - { - "model": state_dict, - "iteration": iteration, - "optimizer": optimizer.state_dict(), - "learning_rate": learning_rate, - }, - checkpoint_path, - ) - - -def save_checkpoint_d(combd, sbd, optimizer, learning_rate, iteration, checkpoint_path): - logger.info( - "Saving model and optimizer state at epoch {} to {}".format( - iteration, checkpoint_path - ) - ) - if hasattr(combd, "module"): - state_dict_combd = combd.module.state_dict() - else: - state_dict_combd = combd.state_dict() - if hasattr(sbd, "module"): - state_dict_sbd = sbd.module.state_dict() - else: - state_dict_sbd = sbd.state_dict() - torch.save( - { - "combd": state_dict_combd, - "sbd": state_dict_sbd, - "iteration": iteration, - "optimizer": optimizer.state_dict(), - "learning_rate": learning_rate, - }, - checkpoint_path, - ) - - -def summarize( - writer, - global_step, - scalars={}, - histograms={}, - images={}, - audios={}, - audio_sampling_rate=22050, -): - for k, v in scalars.items(): - writer.add_scalar(k, v, global_step) - for k, v in histograms.items(): - writer.add_histogram(k, v, global_step) - for k, v in images.items(): - writer.add_image(k, v, global_step, dataformats="HWC") - for k, v in audios.items(): - writer.add_audio(k, v, global_step, audio_sampling_rate) - - -def latest_checkpoint_path(dir_path, regex="G_*.pth"): - f_list = glob.glob(os.path.join(dir_path, regex)) - f_list.sort(key=lambda f: int("".join(filter(str.isdigit, f)))) - x = f_list[-1] - print(x) - return x - - -def plot_spectrogram_to_numpy(spectrogram): - global MATPLOTLIB_FLAG - if not MATPLOTLIB_FLAG: - import matplotlib - - matplotlib.use("Agg") - MATPLOTLIB_FLAG = True - mpl_logger = logging.getLogger("matplotlib") - mpl_logger.setLevel(logging.WARNING) - import matplotlib.pylab as plt - import numpy as np - - fig, ax = plt.subplots(figsize=(10, 2)) - im = ax.imshow(spectrogram, aspect="auto", origin="lower", interpolation="none") - plt.colorbar(im, ax=ax) - plt.xlabel("Frames") - plt.ylabel("Channels") - plt.tight_layout() - - fig.canvas.draw() - data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep="") - data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,)) - plt.close() - return data - - -def plot_alignment_to_numpy(alignment, info=None): - global MATPLOTLIB_FLAG - if not MATPLOTLIB_FLAG: - import matplotlib - - matplotlib.use("Agg") - MATPLOTLIB_FLAG = True - mpl_logger = logging.getLogger("matplotlib") - mpl_logger.setLevel(logging.WARNING) - import matplotlib.pylab as plt - import numpy as np - - fig, ax = plt.subplots(figsize=(6, 4)) - im = ax.imshow( - alignment.transpose(), aspect="auto", origin="lower", interpolation="none" - ) - fig.colorbar(im, ax=ax) - xlabel = "Decoder timestep" - if info is not None: - xlabel += "\n\n" + info - plt.xlabel(xlabel) - plt.ylabel("Encoder timestep") - plt.tight_layout() - - fig.canvas.draw() - data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep="") - data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,)) - plt.close() - return data - - -def load_wav_to_torch(full_path): - sampling_rate, data = read(full_path) - return torch.FloatTensor(data.astype(np.float32)), sampling_rate - - -def load_filepaths_and_text(filename, split="|"): - with open(filename, encoding='utf-8') as f: - filepaths_and_text = [line.strip().split(split) for line in f] - filepaths_and_text = [item for item in filepaths_and_text if len(item) == 5] # ensure there are 5 items. - return filepaths_and_text - - -def get_hparams(init=True): - """ - todo: - 结尾七人组: - 保存频率、总epoch done - bs done - pretrainG、pretrainD done - 卡号:os.en["CUDA_VISIBLE_DEVICES"] done - if_latest done - 模型:if_f0 done - 采样率:自动选择config done - 是否缓存数据集进GPU:if_cache_data_in_gpu done - - -m: - 自动决定training_files路径,改掉train_nsf_load_pretrain.py里的hps.data.training_files done - -c不要了 - """ - parser = argparse.ArgumentParser() - # parser.add_argument('-c', '--config', type=str, default="configs/40k.json",help='JSON file for configuration') - parser.add_argument( - "-se", - "--save_every_epoch", - type=int, - required=True, - help="checkpoint save frequency (epoch)", - ) - parser.add_argument( - "-te", "--total_epoch", type=int, required=True, help="total_epoch" - ) - parser.add_argument( - "-pg", "--pretrainG", type=str, default="", help="Pretrained Discriminator path" - ) - parser.add_argument( - "-pd", "--pretrainD", type=str, default="", help="Pretrained Generator path" - ) - parser.add_argument("-g", "--gpus", type=str, default="0", help="split by -") - parser.add_argument( - "-bs", "--batch_size", type=int, required=True, help="batch size" - ) - parser.add_argument( - "-e", "--experiment_dir", type=str, required=True, help="experiment dir" - ) # -m - parser.add_argument( - "-sr", "--sample_rate", type=str, required=True, help="sample rate, 32k/40k/48k" - ) - parser.add_argument( - "-sw", - "--save_every_weights", - type=str, - default="0", - help="save the extracted model in weights directory when saving checkpoints", - ) - parser.add_argument( - "-v", "--version", type=str, required=True, help="model version" - ) - parser.add_argument( - "-f0", - "--if_f0", - type=int, - required=True, - help="use f0 as one of the inputs of the model, 1 or 0", - ) - parser.add_argument( - "-l", - "--if_latest", - type=int, - required=True, - help="if only save the latest G/D pth file, 1 or 0", - ) - parser.add_argument( - "-c", - "--if_cache_data_in_gpu", - type=int, - required=True, - help="if caching the dataset in GPU memory, 1 or 0", - ) - parser.add_argument( - "-li", "--log_interval", type=int, required=True, help="log interval" - ) - - args = parser.parse_args() - name = args.experiment_dir - experiment_dir = os.path.join("./logs", args.experiment_dir) - - if not os.path.exists(experiment_dir): - os.makedirs(experiment_dir) - - if args.version == "v1" or args.sample_rate == "40k": - config_path = "configs/%s.json" % args.sample_rate - else: - config_path = "configs/%s_v2.json" % args.sample_rate - config_save_path = os.path.join(experiment_dir, "config.json") - if init: - with open(config_path, "r") as f: - data = f.read() - with open(config_save_path, "w") as f: - f.write(data) - else: - with open(config_save_path, "r") as f: - data = f.read() - config = json.loads(data) - - hparams = HParams(**config) - hparams.model_dir = hparams.experiment_dir = experiment_dir - hparams.save_every_epoch = args.save_every_epoch - hparams.name = name - hparams.total_epoch = args.total_epoch - hparams.pretrainG = args.pretrainG - hparams.pretrainD = args.pretrainD - hparams.version = args.version - hparams.gpus = args.gpus - hparams.train.batch_size = args.batch_size - hparams.sample_rate = args.sample_rate - hparams.if_f0 = args.if_f0 - hparams.if_latest = args.if_latest - hparams.save_every_weights = args.save_every_weights - hparams.if_cache_data_in_gpu = args.if_cache_data_in_gpu - hparams.data.training_files = "%s/filelist.txt" % experiment_dir - - hparams.train.log_interval = args.log_interval - - # Update log_interval in the 'train' section of the config dictionary - config["train"]["log_interval"] = args.log_interval - - # Save the updated config back to the config_save_path - with open(config_save_path, "w") as f: - json.dump(config, f, indent=4) - - return hparams - - -def get_hparams_from_dir(model_dir): - config_save_path = os.path.join(model_dir, "config.json") - with open(config_save_path, "r") as f: - data = f.read() - config = json.loads(data) - - hparams = HParams(**config) - hparams.model_dir = model_dir - return hparams - - -def get_hparams_from_file(config_path): - with open(config_path, "r") as f: - data = f.read() - config = json.loads(data) - - hparams = HParams(**config) - return hparams - - -def check_git_hash(model_dir): - source_dir = os.path.dirname(os.path.realpath(__file__)) - if not os.path.exists(os.path.join(source_dir, ".git")): - logger.warn( - "{} is not a git repository, therefore hash value comparison will be ignored.".format( - source_dir - ) - ) - return - - cur_hash = subprocess.getoutput("git rev-parse HEAD") - - path = os.path.join(model_dir, "githash") - if os.path.exists(path): - saved_hash = open(path).read() - if saved_hash != cur_hash: - logger.warn( - "git hash values are different. {}(saved) != {}(current)".format( - saved_hash[:8], cur_hash[:8] - ) - ) - else: - open(path, "w").write(cur_hash) - - -def get_logger(model_dir, filename="train.log"): - global logger - logger = logging.getLogger(os.path.basename(model_dir)) - logger.setLevel(logging.DEBUG) - - formatter = logging.Formatter("%(asctime)s\t%(name)s\t%(levelname)s\t%(message)s") - if not os.path.exists(model_dir): - os.makedirs(model_dir) - h = logging.FileHandler(os.path.join(model_dir, filename)) - h.setLevel(logging.DEBUG) - h.setFormatter(formatter) - logger.addHandler(h) - return logger - - -class HParams: - def __init__(self, **kwargs): - for k, v in kwargs.items(): - if type(v) == dict: - v = HParams(**v) - self[k] = v - - def keys(self): - return self.__dict__.keys() - - def items(self): - return self.__dict__.items() - - def values(self): - return self.__dict__.values() - - def __len__(self): - return len(self.__dict__) - - def __getitem__(self, key): - return getattr(self, key) - - def __setitem__(self, key, value): - return setattr(self, key, value) - - def __contains__(self, key): - return key in self.__dict__ - - def __repr__(self): - return self.__dict__.__repr__() diff --git a/utils/README.md b/utils/README.md deleted file mode 100644 index fb45a36b5909585aa964f2033762ee59b55526b0..0000000000000000000000000000000000000000 --- a/utils/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# External Colab Code -Code used to make Google Colab work correctly -- Repo link: https://github.com/IAHispano/Applio-RVC-Fork/ - -Thanks to https://github.com/kalomaze/externalcolabcode - diff --git a/utils/backups.py b/utils/backups.py deleted file mode 100644 index b814f8184792e80e2324685436053d61487110b1..0000000000000000000000000000000000000000 --- a/utils/backups.py +++ /dev/null @@ -1,141 +0,0 @@ -import os -import shutil -import hashlib -import time -import base64 - - - - -LOGS_FOLDER = '/content/Applio-RVC-Fork/logs' -WEIGHTS_FOLDER = '/content/Applio-RVC-Fork/weights' -GOOGLE_DRIVE_PATH = '/content/drive/MyDrive/RVC_Backup' - -def import_google_drive_backup(): - print("Importing Google Drive backup...") - weights_exist = False - for root, dirs, files in os.walk(GOOGLE_DRIVE_PATH): - for filename in files: - filepath = os.path.join(root, filename) - if os.path.isfile(filepath) and not filepath.startswith(os.path.join(GOOGLE_DRIVE_PATH, 'weights')): - backup_filepath = os.path.join(LOGS_FOLDER, os.path.relpath(filepath, GOOGLE_DRIVE_PATH)) - backup_folderpath = os.path.dirname(backup_filepath) - if not os.path.exists(backup_folderpath): - os.makedirs(backup_folderpath) - print(f'Created backup folder: {backup_folderpath}', flush=True) - shutil.copy2(filepath, backup_filepath) # copy file with metadata - print(f'Imported file from Google Drive backup: {filename}') - elif filepath.startswith(os.path.join(GOOGLE_DRIVE_PATH, 'weights')) and filename.endswith('.pth'): - weights_exist = True - weights_filepath = os.path.join(WEIGHTS_FOLDER, os.path.relpath(filepath, os.path.join(GOOGLE_DRIVE_PATH, 'weights'))) - weights_folderpath = os.path.dirname(weights_filepath) - if not os.path.exists(weights_folderpath): - os.makedirs(weights_folderpath) - print(f'Created weights folder: {weights_folderpath}', flush=True) - shutil.copy2(filepath, weights_filepath) # copy file with metadata - print(f'Imported file from weights: {filename}') - if weights_exist: - print("Copied weights from Google Drive backup to local weights folder.") - else: - print("No weights found in Google Drive backup.") - print("Google Drive backup import completed.") - -def get_md5_hash(file_path): - hash_md5 = hashlib.md5() - with open(file_path, "rb") as f: - for chunk in iter(lambda: f.read(4096), b""): - hash_md5.update(chunk) - return hash_md5.hexdigest() - -def copy_weights_folder_to_drive(): - destination_folder = os.path.join(GOOGLE_DRIVE_PATH, 'weights') - try: - if not os.path.exists(destination_folder): - os.makedirs(destination_folder) - - num_copied = 0 - for filename in os.listdir(WEIGHTS_FOLDER): - if filename.endswith('.pth'): - source_file = os.path.join(WEIGHTS_FOLDER, filename) - destination_file = os.path.join(destination_folder, filename) - if not os.path.exists(destination_file): - shutil.copy2(source_file, destination_file) - num_copied += 1 - print(f"Copied {filename} to Google Drive!") - - if num_copied == 0: - print("No new finished models found for copying.") - else: - print(f"Finished copying {num_copied} files to Google Drive!") - - except Exception as e: - print(f"An error occurred while copying weights: {str(e)}") - # You can log the error or take appropriate actions here. - -def backup_files(): - print("\nStarting backup loop...") - last_backup_timestamps_path = os.path.join(LOGS_FOLDER, 'last_backup_timestamps.txt') - fully_updated = False # boolean to track if all files are up to date - - while True: - try: - updated = False # flag to check if any files were updated - last_backup_timestamps = {} - - try: - with open(last_backup_timestamps_path, 'r') as f: - last_backup_timestamps = dict(line.strip().split(':') for line in f) - except FileNotFoundError: - pass # File does not exist yet, which is fine - - for root, dirs, files in os.walk(LOGS_FOLDER): - for filename in files: - if filename != 'last_backup_timestamps.txt': - filepath = os.path.join(root, filename) - if os.path.isfile(filepath): - backup_filepath = os.path.join(GOOGLE_DRIVE_PATH, os.path.relpath(filepath, LOGS_FOLDER)) - backup_folderpath = os.path.dirname(backup_filepath) - if not os.path.exists(backup_folderpath): - os.makedirs(backup_folderpath) - print(f'Created backup folder: {backup_folderpath}', flush=True) - # check if file has changed since last backup - last_backup_timestamp = last_backup_timestamps.get(filepath) - current_timestamp = os.path.getmtime(filepath) - if last_backup_timestamp is None or float(last_backup_timestamp) < current_timestamp: - shutil.copy2(filepath, backup_filepath) # copy file with metadata - last_backup_timestamps[filepath] = str(current_timestamp) # update last backup timestamp - if last_backup_timestamp is None: - print(f'Backed up file: {filename}') - else: - print(f'Updating backed up file: {filename}') - updated = True - fully_updated = False # if a file is updated, all files are not up to date - - # check if any files were deleted in Colab and delete them from the backup drive - for filepath in list(last_backup_timestamps.keys()): - if not os.path.exists(filepath): - backup_filepath = os.path.join(GOOGLE_DRIVE_PATH, os.path.relpath(filepath, LOGS_FOLDER)) - if os.path.exists(backup_filepath): - os.remove(backup_filepath) - print(f'Deleted file: {filepath}') - del last_backup_timestamps[filepath] - updated = True - fully_updated = False # if a file is deleted, all files are not up to date - - if not updated and not fully_updated: - print("Files are up to date.") - fully_updated = True # if all files are up to date, set the boolean to True - copy_weights_folder_to_drive() - sleep_time = 15 - else: - sleep_time = 0.1 - - with open(last_backup_timestamps_path, 'w') as f: - for filepath, timestamp in last_backup_timestamps.items(): - f.write(f'{filepath}:{timestamp}\n') - - time.sleep(sleep_time) # wait for 15 seconds before checking again, or 0.1s if not fully up to date to speed up backups - - except Exception as e: - print(f"An error occurred: {str(e)}") - # You can log the error or take appropriate actions here. diff --git a/utils/backups_test.py b/utils/backups_test.py deleted file mode 100644 index f3edf15811b5035ee82f21e54e87b7e87ce413eb..0000000000000000000000000000000000000000 --- a/utils/backups_test.py +++ /dev/null @@ -1,138 +0,0 @@ - -import os -import shutil -import hashlib -import time - -LOGS_FOLDER = '/content/Applio-RVC-Fork/logs' -WEIGHTS_FOLDER = '/content/Applio-RVC-Fork/weights' -GOOGLE_DRIVE_PATH = '/content/drive/MyDrive/RVC_Backup' - -def import_google_drive_backup(): - print("Importing Google Drive backup...") - GOOGLE_DRIVE_PATH = '/content/drive/MyDrive/RVC_Backup' # change this to your Google Drive path - LOGS_FOLDER = '/content/Applio-RVC-Fork/logs' - WEIGHTS_FOLDER = '/content/Applio-RVC-Fork/weights' - weights_exist = False - files_to_copy = [] - weights_to_copy = [] - - def handle_files(root, files, is_weight_files=False): - for filename in files: - filepath = os.path.join(root, filename) - if filename.endswith('.pth') and is_weight_files: - weights_exist = True - backup_filepath = os.path.join(WEIGHTS_FOLDER, os.path.relpath(filepath, GOOGLE_DRIVE_PATH)) - else: - backup_filepath = os.path.join(LOGS_FOLDER, os.path.relpath(filepath, GOOGLE_DRIVE_PATH)) - backup_folderpath = os.path.dirname(backup_filepath) - if not os.path.exists(backup_folderpath): - os.makedirs(backup_folderpath) - print(f'Created folder: {backup_folderpath}', flush=True) - if is_weight_files: - weights_to_copy.append((filepath, backup_filepath)) - else: - files_to_copy.append((filepath, backup_filepath)) - - for root, dirs, files in os.walk(os.path.join(GOOGLE_DRIVE_PATH, 'logs')): - handle_files(root, files) - - for root, dirs, files in os.walk(os.path.join(GOOGLE_DRIVE_PATH, 'weights')): - handle_files(root, files, True) - - # Copy files in batches - total_files = len(files_to_copy) - start_time = time.time() - for i, (source, dest) in enumerate(files_to_copy, start=1): - with open(source, 'rb') as src, open(dest, 'wb') as dst: - shutil.copyfileobj(src, dst, 1024*1024) # 1MB buffer size - # Report progress every 5 seconds or after every 100 files, whichever is less frequent - if time.time() - start_time > 5 or i % 100 == 0: - print(f'\rCopying file {i} of {total_files} ({i * 100 / total_files:.2f}%)', end="") - start_time = time.time() - print(f'\nImported {len(files_to_copy)} files from Google Drive backup') - - # Copy weights in batches - total_weights = len(weights_to_copy) - start_time = time.time() - for i, (source, dest) in enumerate(weights_to_copy, start=1): - with open(source, 'rb') as src, open(dest, 'wb') as dst: - shutil.copyfileobj(src, dst, 1024*1024) # 1MB buffer size - # Report progress every 5 seconds or after every 100 files, whichever is less frequent - if time.time() - start_time > 5 or i % 100 == 0: - print(f'\rCopying weight file {i} of {total_weights} ({i * 100 / total_weights:.2f}%)', end="") - start_time = time.time() - if weights_exist: - print(f'\nImported {len(weights_to_copy)} weight files') - print("Copied weights from Google Drive backup to local weights folder.") - else: - print("\nNo weights found in Google Drive backup.") - print("Google Drive backup import completed.") - -def backup_files(): - print("\n Starting backup loop...") - last_backup_timestamps_path = os.path.join(LOGS_FOLDER, 'last_backup_timestamps.txt') - fully_updated = False # boolean to track if all files are up to date - try: - with open(last_backup_timestamps_path, 'r') as f: - last_backup_timestamps = dict(line.strip().split(':') for line in f) - except: - last_backup_timestamps = {} - - while True: - updated = False - files_to_copy = [] - files_to_delete = [] - - for root, dirs, files in os.walk(LOGS_FOLDER): - for filename in files: - if filename != 'last_backup_timestamps.txt': - filepath = os.path.join(root, filename) - if os.path.isfile(filepath): - backup_filepath = os.path.join(GOOGLE_DRIVE_PATH, os.path.relpath(filepath, LOGS_FOLDER)) - backup_folderpath = os.path.dirname(backup_filepath) - - if not os.path.exists(backup_folderpath): - os.makedirs(backup_folderpath) - print(f'Created backup folder: {backup_folderpath}', flush=True) - - # check if file has changed since last backup - last_backup_timestamp = last_backup_timestamps.get(filepath) - current_timestamp = os.path.getmtime(filepath) - if last_backup_timestamp is None or float(last_backup_timestamp) < current_timestamp: - files_to_copy.append((filepath, backup_filepath)) # add to list of files to copy - last_backup_timestamps[filepath] = str(current_timestamp) # update last backup timestamp - updated = True - fully_updated = False # if a file is updated, all files are not up to date - - # check if any files were deleted in Colab and delete them from the backup drive - for filepath in list(last_backup_timestamps.keys()): - if not os.path.exists(filepath): - backup_filepath = os.path.join(GOOGLE_DRIVE_PATH, os.path.relpath(filepath, LOGS_FOLDER)) - if os.path.exists(backup_filepath): - files_to_delete.append(backup_filepath) # add to list of files to delete - del last_backup_timestamps[filepath] - updated = True - fully_updated = False # if a file is deleted, all files are not up to date - - # Copy files in batches - if files_to_copy: - for source, dest in files_to_copy: - shutil.copy2(source, dest) - print(f'Copied or updated {len(files_to_copy)} files') - - # Delete files in batches - if files_to_delete: - for file in files_to_delete: - os.remove(file) - print(f'Deleted {len(files_to_delete)} files') - - if not updated and not fully_updated: - print("Files are up to date.") - fully_updated = True # if all files are up to date, set the boolean to True - copy_weights_folder_to_drive() - - with open(last_backup_timestamps_path, 'w') as f: - for filepath, timestamp in last_backup_timestamps.items(): - f.write(f'{filepath}:{timestamp}\n') - time.sleep(15) # wait for 15 seconds before checking again diff --git a/utils/clonerepo_experimental.py b/utils/clonerepo_experimental.py deleted file mode 100644 index b0ae02648c1307562cf48033908edcf2996db5e2..0000000000000000000000000000000000000000 --- a/utils/clonerepo_experimental.py +++ /dev/null @@ -1,253 +0,0 @@ -import os -import subprocess -import shutil -from concurrent.futures import ThreadPoolExecutor, as_completed -from tqdm.notebook import tqdm -from pathlib import Path -import requests - -def run_script(): - def run_cmd(cmd): - process = subprocess.run(cmd, shell=True, check=True, text=True) - return process.stdout - - # Change the current directory to /content/ - os.chdir('/content/') - print("Changing dir to /content/") - - # Your function to edit the file - def edit_file(file_path): - temp_file_path = "/tmp/temp_file.py" - changes_made = False - with open(file_path, "r") as file, open(temp_file_path, "w") as temp_file: - previous_line = "" - second_previous_line = "" - for line in file: - new_line = line.replace("value=160", "value=128") - if new_line != line: - print("Replaced 'value=160' with 'value=128'") - changes_made = True - line = new_line - - new_line = line.replace("crepe hop length: 160", "crepe hop length: 128") - if new_line != line: - print("Replaced 'crepe hop length: 160' with 'crepe hop length: 128'") - changes_made = True - line = new_line - - new_line = line.replace("value=0.88", "value=0.75") - if new_line != line: - print("Replaced 'value=0.88' with 'value=0.75'") - changes_made = True - line = new_line - - if "label=i18n(\"输入源音量包络替换输出音量包络融合比例,越靠近1越使用输出包络\")" in previous_line and "value=1," in line: - new_line = line.replace("value=1,", "value=0.25,") - if new_line != line: - print("Replaced 'value=1,' with 'value=0.25,' based on the condition") - changes_made = True - line = new_line - - if "label=i18n(\"总训练轮数total_epoch\")" in previous_line and "value=20," in line: - new_line = line.replace("value=20,", "value=500,") - if new_line != line: - print("Replaced 'value=20,' with 'value=500,' based on the condition for DEFAULT EPOCH") - changes_made = True - line = new_line - - if 'choices=["pm", "harvest", "dio", "crepe", "crepe-tiny", "mangio-crepe", "mangio-crepe-tiny"], # Fork Feature. Add Crepe-Tiny' in previous_line: - if 'value="pm",' in line: - new_line = line.replace('value="pm",', 'value="mangio-crepe",') - if new_line != line: - print("Replaced 'value=\"pm\",' with 'value=\"mangio-crepe\",' based on the condition") - changes_made = True - line = new_line - - new_line = line.replace('label=i18n("输入训练文件夹路径"), value="E:\\\\语音音频+标注\\\\米津玄师\\\\src"', 'label=i18n("输入训练文件夹路径"), value="/content/dataset/"') - if new_line != line: - print("Replaced 'label=i18n(\"输入训练文件夹路径\"), value=\"E:\\\\语音音频+标注\\\\米津玄师\\\\src\"' with 'label=i18n(\"输入训练文件夹路径\"), value=\"/content/dataset/\"'") - changes_made = True - line = new_line - - if 'label=i18n("是否仅保存最新的ckpt文件以节省硬盘空间"),' in second_previous_line: - if 'value=i18n("否"),' in line: - new_line = line.replace('value=i18n("否"),', 'value=i18n("是"),') - if new_line != line: - print("Replaced 'value=i18n(\"否\"),' with 'value=i18n(\"是\"),' based on the condition for SAVE ONLY LATEST") - changes_made = True - line = new_line - - if 'label=i18n("是否在每次保存时间点将最终小模型保存至weights文件夹"),' in second_previous_line: - if 'value=i18n("否"),' in line: - new_line = line.replace('value=i18n("否"),', 'value=i18n("是"),') - if new_line != line: - print("Replaced 'value=i18n(\"否\"),' with 'value=i18n(\"是\"),' based on the condition for SAVE SMALL WEIGHTS") - changes_made = True - line = new_line - - temp_file.write(line) - second_previous_line = previous_line - previous_line = line - - # After finished, we replace the original file with the temp one - import shutil - shutil.move(temp_file_path, file_path) - - if changes_made: - print("Changes made and file saved successfully.") - else: - print("No changes were needed.") - - # Define the repo path - repo_path = '/content/Applio-RVC-Fork' - - def copy_all_files_in_directory(src_dir, dest_dir): - # Iterate over all files in source directory - for item in Path(src_dir).glob('*'): - if item.is_file(): - # Copy each file to destination directory - shutil.copy(item, dest_dir) - else: - # If it's a directory, make a new directory in the destination and copy the files recursively - new_dest = Path(dest_dir) / item.name - new_dest.mkdir(exist_ok=True) - copy_all_files_in_directory(str(item), str(new_dest)) - - def clone_and_copy_repo(repo_path): - # New repository link - new_repo_link = "https://github.com/IAHispano/Applio-RVC-Fork/" - # Temporary path to clone the repository - temp_repo_path = "/content/temp_Applio-RVC-Fork" - # New folder name - new_folder_name = "Applio-RVC-Fork" - - # Clone the latest code from the new repository to a temporary location - run_cmd(f"git clone {new_repo_link} {temp_repo_path}") - os.chdir(temp_repo_path) - - run_cmd(f"git checkout 3fa4dad3d8961e5ca2522e9e12c0b4ddb71ad402") - run_cmd(f"git checkout f9e606c279cb49420597519b0a83b92be81e42e4") - run_cmd(f"git checkout 9e305588844c5442d58add1061b29beeca89d679") - run_cmd(f"git checkout bf92dc1eb54b4f28d6396a4d1820a25896cc9af8") - run_cmd(f"git checkout c3810e197d3cb98039973b2f723edf967ecd9e61") - run_cmd(f"git checkout a33159efd134c2413b0afe26a76b7dc87926d2de") - run_cmd(f"git checkout 24e251fb62c662e39ac5cf9253cc65deb9be94ec") - run_cmd(f"git checkout ad5667d3017e93232dba85969cddac1322ba2902") - run_cmd(f"git checkout ce9715392cf52dd5a0e18e00d1b5e408f08dbf27") - run_cmd(f"git checkout 7c7da3f2ac68f3bd8f3ad5ca5c700f18ab9f90eb") - run_cmd(f"git checkout 4ac395eab101955e8960b50d772c26f592161764") - run_cmd(f"git checkout b15b358702294c7375761584e5276c811ffab5e8") - run_cmd(f"git checkout 1501793dc490982db9aca84a50647764caa66e51") - run_cmd(f"git checkout 21f7faf57219c75e6ba837062350391a803e9ae2") - run_cmd(f"git checkout b5eb689fbc409b49f065a431817f822f554cebe7") - run_cmd(f"git checkout 7e02fae1ebf24cb151bf6cbe787d06734aa65862") - run_cmd(f"git checkout 6aea5ea18ed0b9a1e03fa5d268d6bc3c616672a9") - run_cmd(f"git checkout f0f9b25717e59116473fb42bd7f9252cfc32b398") - run_cmd(f"git checkout b394de424088a81fc081224bc27338a8651ad3b2") - run_cmd(f"git checkout f1999406a88b80c965d2082340f5ea2bfa9ab67a") - run_cmd(f"git checkout d98a0fa8dc715308dfc73eac5c553b69c6ee072b") - run_cmd(f"git checkout d73267a415fb0eba98477afa43ef71ffd82a7157") - run_cmd(f"git checkout 1a03d01356ae79179e1fb8d8915dc9cc79925742") - run_cmd(f"git checkout 81497bb3115e92c754300c9b3992df428886a3e9") - run_cmd(f"git checkout c5af1f8edcf79cb70f065c0110e279e78e48caf9") - run_cmd(f"git checkout cdb3c90109387fa4dfa92f53c3864c71170ffc77") - - # Edit the file here, before copying - #edit_file(f"{temp_repo_path}/infer-web.py") - - # Copy all files from the cloned repository to the existing path - copy_all_files_in_directory(temp_repo_path, repo_path) - print(f"Copying all {new_folder_name} files from GitHub.") - - # Change working directory back to /content/ - os.chdir('/content/') - print("Changed path back to /content/") - - # Remove the temporary cloned repository - shutil.rmtree(temp_repo_path) - - # Call the function - clone_and_copy_repo(repo_path) - - # Download the credentials file for RVC archive sheet - os.makedirs('/content/Applio-RVC-Fork/stats/', exist_ok=True) - run_cmd("wget -q https://cdn.discordapp.com/attachments/945486970883285045/1114717554481569802/peppy-generator-388800-07722f17a188.json -O /content/Applio-RVC-Fork/stats/peppy-generator-388800-07722f17a188.json") - - # Forcefully delete any existing torchcrepe dependencies downloaded from an earlier run just in case - shutil.rmtree('/content/Applio-RVC-Fork/torchcrepe', ignore_errors=True) - shutil.rmtree('/content/torchcrepe', ignore_errors=True) - - # Download the torchcrepe folder from the maxrmorrison/torchcrepe repository - run_cmd("git clone https://github.com/maxrmorrison/torchcrepe.git") - shutil.move('/content/torchcrepe/torchcrepe', '/content/Applio-RVC-Fork/') - shutil.rmtree('/content/torchcrepe', ignore_errors=True) # Delete the torchcrepe repository folder - - # Change the current directory to /content/Applio-RVC-Fork - os.chdir('/content/Applio-RVC-Fork') - os.makedirs('pretrained', exist_ok=True) - os.makedirs('uvr5_weights', exist_ok=True) - -def download_file(url, filepath): - response = requests.get(url, stream=True) - response.raise_for_status() - - with open(filepath, "wb") as file: - for chunk in response.iter_content(chunk_size=8192): - if chunk: - file.write(chunk) - -def download_pretrained_models(): - pretrained_models = { - "pretrained": [ - "D40k.pth", - "G40k.pth", - "f0D40k.pth", - "f0G40k.pth" - ], - "pretrained_v2": [ - "D40k.pth", - "G40k.pth", - "f0D40k.pth", - "f0G40k.pth", - "f0G48k.pth", - "f0D48k.pth" - ], - "uvr5_weights": [ - "HP2-人声vocals+非人声instrumentals.pth", - "HP5-主旋律人声vocals+其他instrumentals.pth", - "VR-DeEchoNormal.pth", - "VR-DeEchoDeReverb.pth", - "VR-DeEchoAggressive.pth", - "HP5_only_main_vocal.pth", - "HP3_all_vocals.pth", - "HP2_all_vocals.pth" - ] - } - part2 = "I" - base_url = "https://huggingface.co/lj1995/VoiceConversionWebU" + part2 + "/resolve/main/" - base_path = "/content/Applio-RVC-Fork/" - base_pathm = base_path - - # Calculate total number of files to download - total_files = sum(len(files) for files in pretrained_models.values()) + 1 # +1 for hubert_base.pt - - with tqdm(total=total_files, desc="Downloading files") as pbar: - for folder, models in pretrained_models.items(): - folder_path = os.path.join(base_path, folder) - os.makedirs(folder_path, exist_ok=True) - for model in models: - url = base_url + folder + "/" + model - filepath = os.path.join(folder_path, model) - download_file(url, filepath) - pbar.update() - - # Download hubert_base.pt to the base path - hubert_url = base_url + "hubert_base.pt" - hubert_filepath = os.path.join(base_pathm, "hubert_base.pt") - download_file(hubert_url, hubert_filepath) - pbar.update() -def clone_repository(run_download): - with ThreadPoolExecutor(max_workers=2) as executor: - executor.submit(run_script) - if run_download: - executor.submit(download_pretrained_models) diff --git a/utils/dependency.py b/utils/dependency.py deleted file mode 100644 index b70338b02d31b1ef455fbac817d418d328db518d..0000000000000000000000000000000000000000 --- a/utils/dependency.py +++ /dev/null @@ -1,170 +0,0 @@ -import os -import csv -import shutil -import tarfile -import subprocess -from pathlib import Path -from datetime import datetime - -def install_packages_but_jank_af(): - packages = ['build-essential', 'python3-dev', 'ffmpeg', 'aria2'] - pip_packages = ['pip', 'setuptools', 'wheel', 'httpx==0.23.0', 'faiss-gpu', 'fairseq', 'gradio==3.34.0', - 'ffmpeg', 'ffmpeg-python', 'praat-parselmouth', 'pyworld', 'numpy==1.23.5', - 'numba==0.56.4', 'librosa==0.9.2', 'mega.py', 'gdown', 'onnxruntime', 'pyngrok==4.1.12', - 'gTTS', 'elevenlabs', 'wget', 'tensorboardX', 'unidecode', 'huggingface-hub', 'stftpitchshift==1.5.1', - 'yt-dlp', 'pedalboard', 'pathvalidate', 'nltk', 'edge-tts', 'git+https://github.com/suno-ai/bark.git', 'python-dotenv' , 'av'] - - print("Updating and installing system packages...") - for package in packages: - print(f"Installing {package}...") - subprocess.check_call(['apt-get', 'install', '-qq', '-y', package]) - - print("Updating and installing pip packages...") - subprocess.check_call(['pip', 'install', '--upgrade'] + pip_packages) - - print('Packages up to date.') - - -def setup_environment(ForceUpdateDependencies, ForceTemporaryStorage): - # Mounting Google Drive - if not ForceTemporaryStorage: - from google.colab import drive - - if not os.path.exists('/content/drive'): - drive.mount('/content/drive') - else: - print('Drive is already mounted. Proceeding...') - - # Function to install dependencies with progress - def install_packages(): - packages = ['build-essential', 'python3-dev', 'ffmpeg', 'aria2'] - pip_packages = ['pip', 'setuptools', 'wheel', 'httpx==0.23.0', 'faiss-gpu', 'fairseq', 'gradio==3.34.0', - 'ffmpeg', 'ffmpeg-python', 'praat-parselmouth', 'pyworld', 'numpy==1.23.5', - 'numba==0.56.4', 'librosa==0.9.2', 'mega.py', 'gdown', 'onnxruntime', 'pyngrok==4.1.12', - 'gTTS', 'elevenlabs', 'wget', 'tensorboardX', 'unidecode', 'huggingface-hub', 'stftpitchshift==1.5.1', - 'yt-dlp', 'pedalboard', 'pathvalidate', 'nltk', 'edge-tts', 'git+https://github.com/suno-ai/bark.git', 'python-dotenv' , 'av'] - - print("Updating and installing system packages...") - for package in packages: - print(f"Installing {package}...") - subprocess.check_call(['apt-get', 'install', '-qq', '-y', package]) - - print("Updating and installing pip packages...") - subprocess.check_call(['pip', 'install', '--upgrade'] + pip_packages) - - - print('Packages up to date.') - - # Function to scan a directory and writes filenames and timestamps - def scan_and_write(base_path, output_file): - with open(output_file, 'w', newline='') as f: - writer = csv.writer(f) - for dirpath, dirs, files in os.walk(base_path): - for filename in files: - fname = os.path.join(dirpath, filename) - try: - mtime = os.path.getmtime(fname) - writer.writerow([fname, mtime]) - except Exception as e: - print(f'Skipping irrelevant nonexistent file {fname}: {str(e)}') - print(f'Finished recording filesystem timestamps to {output_file}.') - - # Function to compare files - def compare_files(old_file, new_file): - old_files = {} - new_files = {} - - with open(old_file, 'r') as f: - reader = csv.reader(f) - old_files = {rows[0]:rows[1] for rows in reader} - - with open(new_file, 'r') as f: - reader = csv.reader(f) - new_files = {rows[0]:rows[1] for rows in reader} - - removed_files = old_files.keys() - new_files.keys() - added_files = new_files.keys() - old_files.keys() - unchanged_files = old_files.keys() & new_files.keys() - - changed_files = {f for f in unchanged_files if old_files[f] != new_files[f]} - - for file in removed_files: - print(f'File has been removed: {file}') - - for file in changed_files: - print(f'File has been updated: {file}') - - return list(added_files) + list(changed_files) - - # Check if CachedRVC.tar.gz exists - if ForceTemporaryStorage: - file_path = '/content/CachedRVC.tar.gz' - else: - file_path = '/content/drive/MyDrive/RVC_Cached/CachedRVC.tar.gz' - - content_file_path = '/content/CachedRVC.tar.gz' - extract_path = '/' - - if not os.path.exists(file_path): - folder_path = os.path.dirname(file_path) - os.makedirs(folder_path, exist_ok=True) - print('No cached dependency install found. Attempting to download GitHub backup..') - - try: - download_url = "https://github.com/kalomaze/QuickMangioFixes/releases/download/release3/CachedRVC.tar.gz" - subprocess.run(["wget", "-O", file_path, download_url]) - print('Download completed successfully!') - except Exception as e: - print('Download failed:', str(e)) - - # Delete the failed download file - if os.path.exists(file_path): - os.remove(file_path) - print('Failed download file deleted. Continuing manual backup..') - - if Path(file_path).exists(): - if ForceTemporaryStorage: - print('Finished downloading CachedRVC.tar.gz.') - else: - print('CachedRVC.tar.gz found on Google Drive. Proceeding to copy and extract...') - - # Check if ForceTemporaryStorage is True and skip copying if it is - if ForceTemporaryStorage: - pass - else: - shutil.copy(file_path, content_file_path) - - print('Beginning backup copy operation...') - - with tarfile.open(content_file_path, 'r:gz') as tar: - for member in tar.getmembers(): - target_path = os.path.join(extract_path, member.name) - try: - tar.extract(member, extract_path) - except Exception as e: - print('Failed to extract a file (this isn\'t normal)... forcing an update to compensate') - ForceUpdateDependencies = True - print(f'Extraction of {content_file_path} to {extract_path} completed.') - - if ForceUpdateDependencies: - install_packages() - ForceUpdateDependencies = False - else: - print('CachedRVC.tar.gz not found. Proceeding to create an index of all current files...') - scan_and_write('/usr/', '/content/usr_files.csv') - - install_packages() - - scan_and_write('/usr/', '/content/usr_files_new.csv') - changed_files = compare_files('/content/usr_files.csv', '/content/usr_files_new.csv') - - with tarfile.open('/content/CachedRVC.tar.gz', 'w:gz') as new_tar: - for file in changed_files: - new_tar.add(file) - print(f'Added to tar: {file}') - - os.makedirs('/content/drive/MyDrive/RVC_Cached', exist_ok=True) - shutil.copy('/content/CachedRVC.tar.gz', '/content/drive/MyDrive/RVC_Cached/CachedRVC.tar.gz') - print('Updated CachedRVC.tar.gz copied to Google Drive.') - print('Dependencies fully up to date; future runs should be faster.') - diff --git a/utils/i18n.py b/utils/i18n.py deleted file mode 100644 index 8e75d2bc26ff86ab1716b8d7f239ad9f5cc1e32d..0000000000000000000000000000000000000000 --- a/utils/i18n.py +++ /dev/null @@ -1,28 +0,0 @@ -import locale -import json -import os - - -def load_language_list(language): - with open(f"./i18n/{language}.json", "r", encoding="utf-8") as f: - language_list = json.load(f) - return language_list - - -class I18nAuto: - def __init__(self, language=None): - if language in ["Auto", None]: - language = "es_ES" - if not os.path.exists(f"./i18n/{language}.json"): - language = "es_ES" - language = "es_ES" - self.language = language - # print("Use Language:", language) - self.language_map = load_language_list(language) - - def __call__(self, key): - return self.language_map.get(key, key) - - def print(self): - # print("Use Language:", self.language) - print("") diff --git a/uvr5_weights/.gitignore b/uvr5_weights/.gitignore deleted file mode 100644 index d6b7ef32c8478a48c3994dcadc86837f4371184d..0000000000000000000000000000000000000000 --- a/uvr5_weights/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/venv.sh b/venv.sh deleted file mode 100644 index aa230992e892292cb8aa5924ecdafc5758f14e95..0000000000000000000000000000000000000000 --- a/venv.sh +++ /dev/null @@ -1 +0,0 @@ -python3.8 -m venv .venv diff --git a/weights/.gitignore b/weights/.gitignore deleted file mode 100644 index d6b7ef32c8478a48c3994dcadc86837f4371184d..0000000000000000000000000000000000000000 --- a/weights/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore