From 02e57aabf2af74675d316ab53cc794fd473ae2fd Mon Sep 17 00:00:00 2001 From: "Don.Lin" <142398161+Lin-Dongzhao@users.noreply.github.com> Date: Tue, 14 May 2024 10:40:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=9F=E8=B4=A7=E5=8E=86=E5=8F=B2=E4=BA=A4?= =?UTF-8?q?=E6=98=93=E5=8F=82=E6=95=B0=E8=BF=81=E7=A7=BB=E8=87=B3mod-riceq?= =?UTF-8?q?uant-data=20(#882)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 修复增量回测出错问题 * in development * futures_trading_parameters迁移至mod-ricequant-data * update requirements * update * future_info数值调整,需更新 --------- Co-authored-by: Cuizi7 --- requirements.txt | 3 +- rqalpha/data/base_data_source/data_source.py | 37 +-- rqalpha/data/base_data_source/storages.py | 68 +---- rqalpha/data/bundle.py | 259 +++---------------- setup.cfg | 2 +- setup.py | 3 +- tests/outs/test_f_mean_reverting.pkl | Bin 111839 -> 110478 bytes tests/outs/test_f_tick_size.pkl | Bin 17176 -> 17171 bytes 8 files changed, 49 insertions(+), 323 deletions(-) diff --git a/requirements.txt b/requirements.txt index 987ed4688..f932e1074 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,7 +10,8 @@ simplejson >=3.10.0 dill ==0.2.5 PyYAML >=3.12 tabulate -rqrisk >=1.0.8 +rqrisk >=1.0.9 h5py matplotlib >=1.5.1 ; python_version >= '3.6' matplotlib >=1.5.1,<=3.0.3 ; python_version == '3.5' +filelock \ No newline at end of file diff --git a/rqalpha/data/base_data_source/data_source.py b/rqalpha/data/base_data_source/data_source.py index 33755cba9..4da9a001c 100644 --- a/rqalpha/data/base_data_source/data_source.py +++ b/rqalpha/data/base_data_source/data_source.py @@ -24,23 +24,21 @@ import pandas as pd import six from rqalpha.utils.i18n import gettext as _ -from rqalpha.const import INSTRUMENT_TYPE, TRADING_CALENDAR_TYPE, DEFAULT_ACCOUNT_TYPE +from rqalpha.const import INSTRUMENT_TYPE, TRADING_CALENDAR_TYPE from rqalpha.interface import AbstractDataSource from rqalpha.model.instrument import Instrument from rqalpha.utils.datetime_func import (convert_date_to_int, convert_int_to_date, convert_int_to_datetime) -from rqalpha.utils.exception import RQInvalidArgument, RQDatacVersionTooLow +from rqalpha.utils.exception import RQInvalidArgument from rqalpha.utils.functools import lru_cache from rqalpha.utils.typing import DateLike from rqalpha.environment import Environment -from rqalpha.data.bundle import update_futures_trading_parameters -from rqalpha.utils.logger import user_system_log from rqalpha.data.base_data_source.adjust import FIELDS_REQUIRE_ADJUSTMENT, adjust_bars from rqalpha.data.base_data_source.storage_interface import (AbstractCalendarStore, AbstractDateSet, AbstractDayBarStore, AbstractDividendStore, AbstractInstrumentStore) from rqalpha.data.base_data_source.storages import (DateSet, DayBarStore, DividendStore, ExchangeTradingCalendarStore, FutureDayBarStore, - FutureInfoStore, FuturesTradingParametersStore,InstrumentStore, + FutureInfoStore,InstrumentStore, ShareTransformationStore, SimpleFactorStore, YieldCurveStore, FuturesTradingParameters) @@ -72,8 +70,7 @@ class BaseDataSource(AbstractDataSource): INSTRUMENT_TYPE.PUBLIC_FUND, ) - def __init__(self, path, custom_future_info, futures_time_series_trading_parameters=False, end_date=None): - # type: (str, dict, bool, date) -> None + def __init__(self, path: str, custom_future_info: dict, *args, **kwargs) -> None: if not os.path.exists(path): raise RuntimeError('bundle path {} not exist'.format(os.path.abspath(path))) @@ -89,7 +86,6 @@ def _p(name): INSTRUMENT_TYPE.LOF: funds_day_bar_store } # type: Dict[INSTRUMENT_TYPE, AbstractDayBarStore] - self._futures_trading_parameters_store = None self._future_info_store = FutureInfoStore(_p("future_info.json"), custom_future_info) self._instruments_stores = {} # type: Dict[INSTRUMENT_TYPE, AbstractInstrumentStore] @@ -133,20 +129,6 @@ def _p(name): self._suspend_days = [DateSet(_p('suspended_days.h5'))] # type: List[AbstractDateSet] self._st_stock_days = DateSet(_p('st_stock_days.h5')) - if futures_time_series_trading_parameters: - try: - import rqdatac - except ImportError: - user_system_log.warn(_("RQDatac is not installed, \"config.base.futures_time_series_trading_parameters\" will be disabled.")) - else: - try: - update_futures_trading_parameters(path, end_date) - except (rqdatac.share.errors.PermissionDenied, RQDatacVersionTooLow): - user_system_log.warn(_("RQDatac does not have permission to obtain futures histrical trading parameters, \"config.base.futures_time_series_trading_parameters\" will be disabled.")) - else: - file = os.path.join(path, "futures_trading_parameters.h5") - self._futures_trading_parameters_store = FuturesTradingParametersStore(file, custom_future_info) - def register_day_bar_store(self, instrument_type, store): # type: (INSTRUMENT_TYPE, AbstractDayBarStore) -> None self._day_bars[instrument_type] = store @@ -382,15 +364,8 @@ def get_yield_curve(self, start_date, end_date, tenor=None): return self._yield_curve.get_yield_curve(start_date, end_date, tenor=tenor) @lru_cache(1024) - def get_futures_trading_parameters(self, instrument, dt): - # type: (Instrument, datetime.date) -> FuturesTradingParameters - if self._futures_trading_parameters_store: - trading_parameters = self._futures_trading_parameters_store.get_futures_trading_parameters(instrument, dt) - if trading_parameters is None: - return self._future_info_store.get_future_info(instrument.order_book_id, instrument.underlying_symbol) - return trading_parameters - else: - return self._future_info_store.get_future_info(instrument.order_book_id, instrument.underlying_symbol) + def get_futures_trading_parameters(self, instrument: Instrument, dt: datetime.date) -> FuturesTradingParameters: + return self._future_info_store.get_future_info(instrument.order_book_id, instrument.underlying_symbol) def get_merge_ticks(self, order_book_id_list, trading_date, last_dt=None): raise NotImplementedError diff --git a/rqalpha/data/base_data_source/storages.py b/rqalpha/data/base_data_source/storages.py index 6091b5470..ddccf0dfa 100644 --- a/rqalpha/data/base_data_source/storages.py +++ b/rqalpha/data/base_data_source/storages.py @@ -78,7 +78,7 @@ def __init__(self, f, custom_future_info): } self._custom_data = custom_future_info if "margin_rate" not in self._default_data[next(iter(self._default_data))]: - raise RuntimeError(_("Your bundle data is too old, please use 'rqalpha update-bundle' or 'rqalpha download-bundle' to update it to lastest before using")) + raise RuntimeError(_("The bundle data you are using is too old, please update it to lastest before using")) @classmethod def _process_future_info_item(cls, item): @@ -247,72 +247,6 @@ class FutureDayBarStore(DayBarStore): DEFAULT_DTYPE = np.dtype(DayBarStore.DEFAULT_DTYPE.descr + [("open_interest", ' FuturesTradingParameters or None - dt = convert_date_to_date_int(dt) - if dt < self.FUTURES_TRADING_PARAMETERS_START_DATE: - return None - order_book_id = instrument.order_book_id - underlying_symbol = instrument.underlying_symbol - data = self.get_futures_trading_parameters_all_time(order_book_id) - if data is None: - return None - else: - arr = data[data['datetime'] == dt] - if len(arr) == 0: - if dt >= convert_date_to_date_int(instrument.listed_date) and dt <= convert_date_to_date_int(instrument.de_listed_date): - user_system_log.info("Historical futures trading parameters are abnormal, the lastst parameters will be used for calculations.\nPlease contract RiceQuant to repair: 0755-26569969") - return None - custom_info = self._custom_data.get(order_book_id) or self._custom_data.get(underlying_symbol) - if custom_info: - arr[0] = self.set_custom_info(arr[0], custom_info) - futures_trading_parameters = self._to_namedtuple(arr[0]) - return futures_trading_parameters - - @lru_cache(1024) - def get_futures_trading_parameters_all_time(self, order_book_id): - # type: (str) -> numpy.ndarray or None - with h5_file(self._path) as h5: - try: - data = h5[order_book_id][:] - except KeyError: - return None - return data - - def set_custom_info(self, arr, custom_info): - for field in custom_info: - if field == "commission_type": - if custom_info[field] == COMMISSION_TYPE.BY_MONEY: - value = 0 - elif custom_info[field] == COMMISSION_TYPE.BY_VOLUME: - value = 1 - else: - value = custom_info[field] - arr[field] = value - return arr - - def _to_namedtuple(self, arr): - # type: (numpy.void) -> FuturesTradingParameters - dic = dict(zip(arr.dtype.names, arr)) - del dic['datetime'] - dic["commission_type"] = self.COMMISSION_TYPE_MAP[dic['commission_type']] - futures_trading_parameters = FuturesTradingParameters(**dic) - return futures_trading_parameters - - class DividendStore(AbstractDividendStore): def __init__(self, path): self._path = path diff --git a/rqalpha/data/bundle.py b/rqalpha/data/bundle.py index 5c8ccca51..f98ea35b2 100644 --- a/rqalpha/data/bundle.py +++ b/rqalpha/data/bundle.py @@ -18,20 +18,15 @@ import pickle import re from itertools import chain -from typing import Callable, Optional, List +from typing import Callable, Optional, Union, List +from filelock import FileLock, Timeout import h5py import numpy as np -import pandas as pd from rqalpha.apis.api_rqdatac import rqdatac -from rqalpha.utils.concurrent import (ProgressedProcessPoolExecutor, - ProgressedTask) -from rqalpha.utils.datetime_func import (convert_date_to_date_int, - convert_date_to_int,) -from rqalpha.utils.exception import RQDatacVersionTooLow +from rqalpha.utils.concurrent import ProgressedProcessPoolExecutor, ProgressedTask +from rqalpha.utils.datetime_func import convert_date_to_date_int, convert_date_to_int from rqalpha.utils.i18n import gettext as _ -from rqalpha.utils.logger import system_log -from rqalpha.const import TRADING_CALENDAR_TYPE from rqalpha.utils.functools import lru_cache from rqalpha.environment import Environment from rqalpha.model.instrument import Instrument @@ -445,195 +440,8 @@ def update_bundle(path, create, enable_compression=False, concurrency=1): executor.submit(_DayBarTask(order_book_id), os.path.join(path, file), field, **kwargs) -FUTURES_TRADING_PARAMETERS_FIELDS = ["long_margin_ratio", "short_margin_ratio", "commission_type", "open_commission", "close_commission", "close_commission_today"] -TRADING_PARAMETERS_START_DATE = 20100401 -FUTURES_TRADING_PARAMETERS_FILE = "futures_trading_parameters.h5" - - -class FuturesTradingParametersTask(object): - def __init__(self, order_book_ids, underlying_symbols): - self._order_book_ids = order_book_ids - self._underlying_symbols = underlying_symbols - - def __call__(self, path, fields, end_date): - if rqdatac.__version__ < '2.11.12': - raise RQDatacVersionTooLow(_("RQAlpha already supports backtesting using futures historical margins and rates, please upgrade RQDatac to version 2.11.12 and above to use it")) - - if not os.path.exists(path): - self.generate_futures_trading_parameters(path, fields, end_date) - else: - self.update_futures_trading_parameters(path, fields, end_date) - - def generate_futures_trading_parameters(self, path, fields, end_date, recreate_futures_list=None): - # type: (str, list, datetime.date, list) -> None - if not recreate_futures_list: - system_log.info(_("Futures historical trading parameters data is being updated, please wait......")) - order_book_ids = self._order_book_ids - if recreate_futures_list: - order_book_ids = recreate_futures_list - df = rqdatac.futures.get_trading_parameters(order_book_ids, TRADING_PARAMETERS_START_DATE, end_date, fields) - if not (df is None or df.empty): - df.dropna(axis=0, how="all") - df.reset_index(inplace=True) - df['datetime'] = df['trading_date'].map(convert_date_to_date_int) - del df["trading_date"] - df['commission_type'] = df['commission_type'].map(self.set_commission_type) - df.rename(columns={ - 'close_commission': "close_commission_ratio", - 'close_commission_today': "close_commission_today_ratio", - 'open_commission': 'open_commission_ratio' - }, inplace=True) - df.set_index(["order_book_id", "datetime"], inplace=True) - df.sort_index(inplace=True) - with h5py.File(path, "w") as h5: - for order_book_id in df.index.levels[0]: - h5.create_dataset(order_book_id, data=df.loc[order_book_id].to_records()) - # 更新期货连续合约的历史交易参数数据(当函数执行目的为补充上次未正常更新的数据时,不需要执行此段逻辑) - if recreate_futures_list is None: - with h5py.File(path, "a") as h5: - df = rqdatac.all_instruments("Future") - for underlying_symbol in self._underlying_symbols: - futures_continuous_contract = df[(df['underlying_symbol'] == underlying_symbol) & (df["listed_date"] == '0000-00-00')].order_book_id.tolist() - s = rqdatac.futures.get_dominant(underlying_symbol, TRADING_PARAMETERS_START_DATE, end_date) - if (s is None or s.empty): - continue - s = s.to_frame().reset_index() - s['date'] = s['date'].map(convert_date_to_date_int) - s.set_index(['date'], inplace=True) - trading_parameters_list = [] - for date in s.index: - try: - data = h5[s['dominant'][date]][:] - except KeyError: - continue - trading_parameters = data[data['datetime'] == date] - if len(trading_parameters) != 0: - trading_parameters_list.append(trading_parameters[0]) - data = np.array(trading_parameters_list) - for order_book_id in futures_continuous_contract: - h5.create_dataset(order_book_id, data=data) - - def update_futures_trading_parameters(self, path, fields, end_date): - # type: (str, list, datetime.date) -> None - try: - h5 = h5py.File(path, "a") - h5.close() - except OSError as e: - raise OSError(_("File {} update failed, if it is using, please update later, or you can delete then update again".format(path))) from e - last_date = self.get_h5_last_date(path) - recreate_futures_list = self.get_recreate_futures_list(path, last_date) - if recreate_futures_list: - self.generate_futures_trading_parameters(path, fields, last_date, recreate_futures_list=recreate_futures_list) - if end_date > last_date: - if rqdatac.get_previous_trading_date(end_date) == last_date: - return - else: - system_log.info(_("Futures historical trading parameters data is being updated, please wait......")) - start_date = rqdatac.get_next_trading_date(last_date) - df = rqdatac.futures.get_trading_parameters(self._order_book_ids, start_date, end_date, fields) - if not(df is None or df.empty): - df = df.dropna(axis=0, how="all") - df.reset_index(inplace=True) - df['datetime'] = df['trading_date'].map(convert_date_to_date_int) - del [df['trading_date']] - df['commission_type'] = df['commission_type'].map(self.set_commission_type) - df.rename(columns={ - 'close_commission': "close_commission_ratio", - 'close_commission_today': "close_commission_today_ratio", - 'open_commission': 'open_commission_ratio' - }, inplace=True) - df.set_index(['order_book_id', 'datetime'], inplace=True) - with h5py.File(path, "a") as h5: - for order_book_id in df.index.levels[0]: - if order_book_id in h5: - data = np.array( - [tuple(i) for i in chain(h5[order_book_id][:], df.loc[order_book_id].to_records())], - dtype=h5[order_book_id].dtype - ) - del h5[order_book_id] - h5.create_dataset(order_book_id, data=data) - else: - h5.create_dataset(order_book_id, data=df.loc[order_book_id].to_records()) - # 更新期货连续合约历史交易参数 - with h5py.File(path, "a") as h5: - df = rqdatac.all_instruments("Future") - for underlying_symbol in self._underlying_symbols: - futures_continuous_contract = df[(df['underlying_symbol'] == underlying_symbol) & (df["listed_date"] == '0000-00-00')].order_book_id.tolist() - s = rqdatac.futures.get_dominant(underlying_symbol, start_date, end_date) - if (s is None or s.empty): - continue - s = s.to_frame().reset_index() - s['date'] = s['date'].map(convert_date_to_date_int) - s.set_index(['date'], inplace=True) - trading_parameters_list = [] - for date in s.index: - try: - data = h5[s['dominant'][date]][:] - except KeyError: - continue - trading_parameters = data[data['datetime'] == date] - if len(trading_parameters) != 0: - trading_parameters_list.append(trading_parameters[0]) - for order_book_id in futures_continuous_contract: - if order_book_id in h5: - data = np.array( - [tuple(i) for i in chain(h5[order_book_id][:], trading_parameters_list)], - dtype=h5[order_book_id].dtype - ) - del h5[order_book_id] - h5.create_dataset(order_book_id, data=data) - else: - h5.create_dataset(order_book_id, data=np.array(trading_parameters)) - - def set_commission_type(self, commission_type): - if commission_type == "by_money": - commission_type = 0 - elif commission_type == "by_volume": - commission_type = 1 - return commission_type - - def get_h5_last_date(self, path): - last_date = TRADING_PARAMETERS_START_DATE - with h5py.File(path, "r") as h5: - for key in h5.keys(): - if int(h5[key]['datetime'][-1]) > last_date: - last_date = h5[key]['datetime'][-1] - last_date = datetime.datetime.strptime(str(last_date), "%Y%m%d").date() - return last_date - - def get_recreate_futures_list(self, path, h5_last_date): - # type: (str, datetime.date) -> list - """ - 用户在运行策略的过程中可能中断进程,进而可能导致在创建 h5 文件时,部分合约没有成功 download - 通过该函数,获取在上一次更新中因为异常而没有更新的合约 - """ - recreate_futures_list = [] - df = rqdatac.all_instruments("Future") - last_update_futures_list = df[(df['de_listed_date'] >= str(TRADING_PARAMETERS_START_DATE)) & (df['listed_date'] <= h5_last_date.strftime("%Y%m%d"))].order_book_id.to_list() - with h5py.File(path, "r") as h5: - h5_order_book_ids = h5.keys() - for order_book_id in last_update_futures_list: - if order_book_id in h5_order_book_ids: - continue - else: - recreate_futures_list.append(order_book_id) - return recreate_futures_list - - -def update_futures_trading_parameters(path, end_date): - # type: (str, datetime.date) -> None - df = rqdatac.all_instruments("Future") - order_book_ids = (df[df['de_listed_date'] >= str(TRADING_PARAMETERS_START_DATE)]).order_book_id.tolist() - underlying_symbols = list(set((df[df['de_listed_date'] >= str(TRADING_PARAMETERS_START_DATE)]).underlying_symbol.tolist())) - FuturesTradingParametersTask(order_book_ids, underlying_symbols)( - os.path.join(path, FUTURES_TRADING_PARAMETERS_FILE), - FUTURES_TRADING_PARAMETERS_FIELDS, - end_date - ) - - class AutomaticUpdateBundle(object): - def __init__(self, path: str, filename: str, api: Callable, fields: List[str], end_date: datetime.date) -> None: + def __init__(self, path: str, filename: str, api: Callable, fields: List[str], end_date: datetime.date, start_date: Union[int, datetime.date] = START_DATE) -> None: if not os.path.exists(path): os.makedirs(path) self._file = os.path.join(path, filename) @@ -641,9 +449,11 @@ def __init__(self, path: str, filename: str, api: Callable, fields: List[str], e self._filename = filename self._api = api self._fields = fields + self._start_date = start_date self._end_date = end_date self.updated = [] self._env = Environment.get_instance() + self._file_lock = FileLock(self._file + ".lock") def get_data(self, instrument: Instrument, dt: datetime.date) -> Optional[np.ndarray]: dt = convert_date_to_date_int(dt) @@ -676,34 +486,39 @@ def _auto_update_task(self, instrument: Instrument) -> None: :type instrument: `Instrument` """ order_book_id = instrument.order_book_id - start_date = START_DATE + start_date = self._start_date try: - h5 = h5py.File(self._file, "a") - if order_book_id in h5: - if len(h5[order_book_id][:]) != 0: - last_date = datetime.datetime.strptime(str(h5[order_book_id][-1]['trading_dt']), "%Y%m%d").date() - if last_date >= self._end_date: - return - start_date = self._env.data_proxy._data_source.get_next_trading_date(last_date).date() - if start_date > self._end_date: - return - arr = self._get_array(instrument, start_date) - if arr is None: - if order_book_id not in h5: - arr = np.array([]) - h5.create_dataset(order_book_id, data=arr) - else: - if order_book_id in h5: - data = np.array( - [tuple(i) for i in chain(h5[order_book_id][:], arr)], - dtype=h5[order_book_id].dtype) - del h5[order_book_id] - h5.create_dataset(order_book_id, data=data) + with self._file_lock.acquire(): + h5 = h5py.File(self._file, "a") + if order_book_id in h5 and 'trading_dt' in h5[order_book_id].dtype.names: + # 需要兼容此前的旧版数据,对字段名进行更新 + if len(h5[order_book_id][:]) != 0: + last_date = datetime.datetime.strptime(str(h5[order_book_id][-1]['trading_dt']), "%Y%m%d").date() + if last_date >= self._end_date: + return + start_date = self._env.data_proxy._data_source.get_next_trading_date(last_date).date() + if start_date > self._end_date: + return + arr = self._get_array(instrument, start_date) + if arr is None: + if order_book_id not in h5: + arr = np.array([]) + h5.create_dataset(order_book_id, data=arr) else: - h5.create_dataset(order_book_id, data=arr) - except OSError as e: + if order_book_id in h5: + if 'trading_dt' in h5[order_book_id].dtype.names: + data = np.array( + [tuple(i) for i in chain(h5[order_book_id][:], arr)], + dtype=h5[order_book_id].dtype) + else: + data = arr + del h5[order_book_id] + h5.create_dataset(order_book_id, data=data) + else: + h5.create_dataset(order_book_id, data=arr) + except (OSError, Timeout) as e: raise OSError(_("File {} update failed, if it is using, please update later, " - "or you can delete then update again".format(self._file))) from e + "or you can delete then update again".format(self._file))) from e finally: h5.close() diff --git a/setup.cfg b/setup.cfg index d84ade053..4b0fb6881 100644 --- a/setup.cfg +++ b/setup.cfg @@ -5,7 +5,7 @@ [metadata] name = rqalpha -version = 5.3.11 +version = 5.4.0 [versioneer] VCS = git diff --git a/setup.py b/setup.py index 4d338f8e3..8542a6a32 100644 --- a/setup.py +++ b/setup.py @@ -31,7 +31,8 @@ 'h5py', 'matplotlib >=3.1.0', "openpyxl", - "methodtools" + "methodtools", + "filelock" ] if sys.version_info < (3, 5): diff --git a/tests/outs/test_f_mean_reverting.pkl b/tests/outs/test_f_mean_reverting.pkl index b1c1c0923e2265062d676e06150b25565872d0e6..d51df58e07938ccaafc52ae64440d84b82d2a2ce 100644 GIT binary patch literal 110478 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

E|JT27tcr~dR~E6PZ5 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 s7@o0zpNl6qC#1SEj#zKT#J@e@Kx^?fVbHmMx zj6hscn?N9tUzn4VYVI|f6&cOrk~#=eV5SzNZ{M4oo0^kuv`Fd>t{^?XAbDGIPI_u? zvYEas-7Lt=-EOo@ic#{ZWz2kof)Ycr7ZdC*rY_G zckVS}RF-C8ZgRoio#{q9bvi3?_TtrZSFJYM+Zm$BxPs)g)cg#iLsDmCIB(7BHKDmv z$HuF_(eXydq}C2?bef+y`bZe(fuvSAsFE0+({c-QcJ3XWmS?7q&MC|;$V@fO)V(qJ zX{p(%W{lCr3Xj<;C5bV*CN)RYZBvYHWyg*hpNEX@af@3dH3K)@=&@|svPJ(Ff9kL} zP+;`jl9rqX4W#AAq~{8VF?uC^24U-u8xI=2RSC0GaVcYsKBY$Aknu&S(Jy55PihIN zE$IcR#(<128QnAdF=I0zJ}_hqDm4a&j3FwW{ESo+3L9!iXpa;UsBs{loI)45B4`Yg zIKx9mT&Xc4WQ@y6OzzA#=^}+Q z`CQNlN|Fg7BeB$&6*6Y4*1RiEDj++vV6QPJA|AaA4j#v4be1m%jkywUUdWhVYAgsD z3zZ6N)kQ>K^hp&gmbgno#?n$_S;$zPB=wS$x+i(7nYvq4VXUyD$-Owd6`vopzZYK( z8Y?AUC}gZEHCBg=HA&qNZ0G5TzV?&3ej~AyLdLpMV|~cjpp<9FHq#3V&D?xr<0m6- zl8Bo_Mslf<5;9U%?_ozw&CM-L%|`!W#ozMD_-PV|Lp*kzq^A z<#Qb$-L+>sou%5Kktq?fLdK3#BRgc|sM~#arfOE{M(+IJZySI13;dVV$-RCjIBz~k z^_SEYKXy6O3Ui!7?)+pS4aw6C8Tq9~LC7dn{l`u-Z(C+Ta&{i>2kAhKU3OH}GEW8Q z8NE&6EBq*E?3UE9GsxUs4Zw*g04vYMekWo@>gKVs(N%EFjwl5P z1oqGsy5E-Sf<~FdJRUMmlp5tBqe3ais=ds8>02G;oV26Mos~cz`2nBfFkhfMLF1I9 zP#H2#ml|h6##z;V3Ui^K-1GwbD$m)mrA7mYcV+clKF0My78ka&wmFjRM zZoYBZ?Sjv%MbKmUYs-W>#B#*xuGX7er@z+Df-%wqa9o^}&{^tDPZ;c-DKd#JA zQcn>(IN~Ytw<6L`rqjJfC(hr+J7fx{M}OH?}d!NuWo5Oa$$B_x|y6QH-YgF z?AX!N*bW=UkbJNo8wEkH{S|K{c zxA{2LuAd$>{<);}J0as=lp6msWc({tlR0_01sP~@b|d)Rh`34gfWoPr_=vQEe=TwU zP00ASrN+Mt8UJ2ghmISeh2OK|OC##fcj@A!6`7)j{~*!-W61bVrN(~_8UH1zC&G1f zyZd)k{a>A@L!lZVp`N#<=NtbmZD(rk*3^7!*tgBZC^=?MYC-Beg^d3`qS*K!MaKV( zQ~h&t&UVxIeNT+c+=6ryy-@z>9CSw8)6M*tS=o7MJC<5!F~G`9#q~@o`pda0xtop4O;}3qem@V;#MaKWN%7fl4)eKbBI8b7?z%M#Q90Oa-mU7ak)NF;{kl7l?qh=e0+u|6vxY^Y?UY!1C1#C=_nRGX<{c0R3(Srnx0G!%JBg_3ymTLJb_S&$!cs*t zymLajNQgXv^USSi1hRKcL|WUCR9Y4q|-wP8KM-V?lF7HiQLj@c{w?m`S}>!n!SXR{IgT>2BltP zFj6#oYf(k-l$RW{k8tw3WEB;u_Z3FoO>kMc`Kf8DC~0}9oi7lQUSRga&lXi~c~>+0 z<8)bJsW||@Au|@oPqqxLoP4Vl&9R?!R$DO#{`_dZ7=sX_$Q+DgT$XBDk@tscHTk36 zJayzmt2qrpv=PPTP?g3oNkctnr3O>Y;W*EdMwq2rU7Va)?P~;J$Q+5Iw6BgO=9hqW z`&v51{0e8%zD6mr(MqgkhW|aQ$Q&afXvp$zmYZ+J<5XJmSQTv?jz}E;3e54qrRD@2 z3(Sc)ZYe{otB4gyp=W$Nu$V4%^TIdicy7niTcIN`SJF9i9DM*C0SD1hI&**zfsKHC zwHH;#@kx<&VPE=Kl)`60x`=D|95n{`iHJJboP?6f^-RWZ$ef}||Fx9fQu8)5-7u%( ze3`l(lGUrKISquX$>}%~P0qk?$ef8|+~QAZGAJRgCKGTfIVY-UvvAa!oDE!R&cU(3 zoQva@!Yx_ScC*xdEEQ3(&zuKhnQGgrjPvCbZF>QJL*_yp(>Ixm@Dt~4Ad5lS4P=QD zT`Drjxy9m+rRFl6WOSE`y8*OhGLy`jn1W8&G=me$G0Z+;qZpo2#Olo8}yJ)Y-r^sh!UU-N9a)k zU8XAQ--ui*ya4Pr`RlXOBKST%h>+u&Jd58<4=usbHnA1Nc=>B#CzXPT0r~4}6AP%$ zio!3m6Mj${F_%kip#`nLZ^&GUV}TjMaf`RgSAnvte6^BXgQHY=OR4g;II-Ju<`nZA zoJm`j=T^vErvzIx=@kmh^$1Zn_~&Sj2~8sA(E&0`==rd2{-mamw*%q*4oa!}*F*-MtMnrj{vP92<3>-6VycgsTqCp^>}GWl zx~m+z$>DQ3bjJZ@xQQRP47YF=GH**zk$DF{YP=pldhCSJW6fHe7nyf)wBGVlF;8IL z!)eC1ia1SnJ`wf zXaEeE&vCSC=!JyIxJ(A=u_&FCQ2yk#TmJMUq%~(92$(M+EDz#W_zjtjI2M?%aomEk zyuq(s7J2SkWl<#$-~rt1sQDIb$b5%mVR|86tltA!Z`87UXnw${T6B}wQ8m?Le$*6J zLkm*XYwB-++GPHw1hhg4Qws{re3NimWHOG0TT~J|F-f^CFFP~O{8Jz^Fi&LuX(jV# zaE#0N{S3_en15FACiBlJO5Iz(CGZpX)}IG&EAcM?hRoj)OYy^T^tOV(EsWI){tjTs{JSE!xY^R!W+mp|lfaocNHdr# zvylO+=Er;56ktx3pB(J4R=~_Ibdzoiq6)e>i5mp&Tg%V+dZEab;RXEIs9k`)_V(K^ zzuRNvU0o2pq$~4!?-q1xdCOLN0QebK)1_4c6U|X{Qvg-Az#MYD3cf+-)&}>AVEKa2 zzuX7VmoL-3y@IlK%-~}J=rzCN(>=ZgY)dD%r3>H}i9=TI2bjZW@!EJpAf4U1lphP? zoBV=nrWXN@rK7v(grNS@ChR_d-yAN-sz`}IdberQ=LZ4W@e_W!MbLT*Qz<6pZN(2I^tq%y#%bRSqj zDw{@+_>981;PS+QbQ}`HH}i!&g+A{}=Qhv@aA|Zaj_xZ+&nD1&ZdAA#m#&;oE$KPkrBf2^ z1)X1j0KqMX^R+ot3ABnD4XjxTq?-#{V_jJwU#F8vU(gxAQL+3eOQHSr6eW1AFrS#! zqb*^wCqRw-lFxF3I%z}4GG@^^&})06QZT0^5_fQsrx^_uC;WWcu+em0Pz_qlt==+0 z6^N(eJsAoe?An1|Da0q~7S*((iwN&Ganfo9VzA8G5Tr}s*6pKXbW%Y+-Eve5x&ks5 zO{jRKf_cN&Qnf-G`ARoY8p7#8Hr>PhA(-Fr`{^U-8sI{#1f1TjAYF>x#-$c4;d6tr zM0#C>&!uA`i*5i8=2uIWD`e6!u0b;qmWzAu;)e>-W3Cv_m#A9k_nZ0HFscDu!u1;q z6~dZkF+W8M7n<*PrP8i+Q{Y7|oy{K<9+t$Hme4J*gQ+RX}$px0@O=q|WDi_q*YDac3p z3YDXK623>yz)5ruARPsIfyOO3M9=bfQXLT0%x;T&Qy`|B&e7ElbRRglZR|z`=p?`5 z5>&jf-(s=kFkPSrB7J;%FTSH-Z&dNa@$?XEMsgw@QV92LJ)cMO78-5-Hd^O9dL%I$ zCdRd+$3V0AD7{;!Ae~NHN%s`wYBY{JXyGEl6{we6XwH~=416(W%2=ug*nxSp@`DP} zo0X}^U)az17Qgs{o=UWrC}u-jdImfQuQKZA&_Hdbko#;;cUi2E|=1EkuO(FC;M<=4Dgr&>h;*PAQHxjL` zJ(}qgg{RQ>DHm;>*zkKtdq*nDk@>=BJe-KM|Uevmap#Yb|w&o5@ z2ZW{9i_=g^(#f~Qy5lQ;t?)OwRK9?vW5?6yV=Ro31oI1Yc`wig)yd5{`M6~1=*RMf zHnA){I)%5>)m#Pn6gS4B(-*ow9p{pEEIoR=nV9W;rQmu#)pH(8H%@gacov;gm>c+S)Je<~fO86>-94CvE>imcc}0A& zBTJ`G=R0O^QiyNUjR4w=u;a(lc|1V{=I!FU6IeQW`p{-Snxw!ERMnZ!D7bMX-HB!C z{1@`|E$vzL?3eQR)p`Z_t_*4F6rMz9V$r~rM9E-!F^{F^H~FGDj#al_oY4l)PJx~I z4PC)aBsiH)#P^p~rT{(uf=jY3cm+?9LrE-MJl{|4Np}_e8a?9!3~q(S2;xY>99BL5 z#qMa;XDp0WeOdRC{=VCW;as867CheH_GRhs>1ol5EQJD{@Gxss5H0194E$jF$7Na5 za8$1y)@oQ`74!IoJuWr#|2MMrvqaFr-Js+)roCEH0cTx=u0 zMrUl%PTL3D$zpJPd&yuc0s6Sq62*kWYkE1zN{p^0(|cg66f-9ePV9v~{#@pc1x{(c zmV^ll$}RB3x^3mbm3X)|3{i!kmuor?cQQ;`HX?B`A8Ui5`1|HxTBYRY4th0kl+wpa zzVnqGdoERdW#x+Ep5$92tVqc0{FhF$e6QU|n}5ScN7`9@OJ!CT^fHm(4NpACZ>Qn` zaGakHx32^J`}yICdlkliK6{jzCC_S;{S3va@!)zU0p_ju{Dl0GszcNgUino~h zE;2CCk;Ztv)!mUh-~*$}P&a(*?$ z$@imNnN_!hQM-+~t__1%dD6@EvxZrz%$R1C9oPP{gTy4BN@ z{`zDu-RhHA6r6Zqd$Zxc@b9J^4A?$k=-M}t5A)eC(-(E^naHnNC)1^we6mL(hL+Xb zI5v(edTYFk>U$+x@#xsT2>Nb+o96RvG@LPKK;nWG{H_^3kFH^B_L(uppN`1OWW z$-6KrucBMAiFD_y*%;_n#tcjhaw%V(NX1<>_l$T@D@scgNcm2S`_Lv%|!@b!U9F%DC>rR*%liG1WV)keJI)%^n!JSiw z302Ir(#w3@l!sR?ETU`cfnL&){qajf0~5c%OX$rWT#<>y6qz#)Jvs#WeW!1SCL$v~ zzLM&O30lOj3_R477@uE>$De{dhud=esxN|7T(0Phhl$EOjcW}pnkt`xL|+u5FH6x^ zBbTJ>(7*k-U9Q>-aBVDmvvqkh? zLoVhLJ?h33YK_L|C~i73uc<=wmIwjhYr5gN=wj@E%7=9KD*h)AICYk8y|_+nZKF|T88TMax6U>W7k-3 zx->@9-RX^{G3-cGNapHd;q59Oa~f<dOsi|;un>-bolmcf+b{b9fGYlVI-k)c0bniv?aUIH*veE6%O8b0ly;nJPM zY_bDC(j=W;q**GV$8okqyL63kyS~zR(^6dAPvhmnexbNV=PxDvOGKz=s{ca1`~=i7*GF1695LAF@)b~ec1CpzZkmbjTD<{Y~8m4)`ppha=L zxO%jO`qLvDQRBB514xXW`)o13w9yXaBOx2@rz$*Jin02CTYZZzFBQ?hs0O}I4bZDm zi@6v%Qh4O(ardH7*8)a?OfpmJkhFreH4yKFyZ1iQa4f@bEEf+@@H00Ci zc6fVwV51@Q)J8CWtJm-xpS2)`=kXa0=g>%niKS#r=|0y2tN5IqLIGX1!V&92x22ZoFL|?4xQLJ1xn@nb(xhUa;}cymz(zk^V>og>@KHwkRCH}R&doAkRiH?wWO1D@=LJ&C%~rhF+ExUjP;(I zTw&yPgHR_vvx;wbh7sT9s`XG#aFATsC@i;7cp9bSlgo>~Cz`*fYum~n3*I~2-SzFjuI>wU96K-yY+Ej$ zO||=Bq4_Mhr5jedU$cyWp9SG1;Yku7o;w<4;1gd$4Og~}1UARE<_iW)lk0<>zT~Tz z_dSi}x~D;UwrwkH4BoaC`Le(Y7|U0n#_EH74OT1X=-L4o3f2d^(RJ9@JXj8`<4RA_ zJy@x3L|xSfhpimLjT44TQuWjL+FsbYzeYJA|AeWr?b2(hyk5{)+Fzr1~MgLWzf0jPv|x zHWJA}GrKHbcA=*0f;xH|z8Bmxl*{sq2K>qp*UW~lE==!_6!9TKT^fpTW<1vh>Cj}l zy%OI~3BI&^ZToL9QG7Qzncud6jp|ES(tt0E;qw@?mn0(u-*1FBQ)52YpvVh)8_hD% zGV5@a^el$1G#kzLF>Q+Gc%sNez=Pl}w4@6yX281Q{!b30JAJTr7%CSg&B0W3Sg-lj z&V^74zt8H}nafuKHt$F^i}2yebu^BNiF~do5RyjoxGmjnH3qiQP$w4D;GU%i3|XM( zM!vCVS9VMA*#r4l;%DO_ox?Zz_5rxvxrqel$%0Q7K8(4CkPK?z`}z35<2+6dz;W3H z+)7uvLM(a`)j_l!eBxf<+U8hXK1!Fn$c_4>-^5{jWTV`9hv@ydJU)*v>w+EV#7aD@ z@xfGG@Jq}N;Zb>LJ#NWw==s-tGG`WGQsLTm{BSJNkneTg)9Z`{z&aupQy(Gb2dcqP zrAh``^e$l`6}O7Vvj{hEIljF*vADZDyuz?RJv|uKu*Guro=#5L+5!)u$HAVX68K6M zX3w4k501mvhexrlenL`uGmh>}nnI^V{t>>}>SnnkmG>A-(?m_~qdJJTgXp~wwWo{r zgwdWb+7m{5!e~zz?Fs*gJz;bTT;3w0>i|DuB}`w&r|I-YwKA{^b5d8kz;A`D4dA=> zlJ)SO@J_7`?4ZlLF%NrFW`r?!`f3$yyzi*hfnlrECnNIGiq}|7zhjd2u*}Qy$=)mZ za$i{=7z|6<*9WrH`T&>h!i(;WKC(o>r?z1#@otu^5FoMIe)zuro-7eqCRxi8WQjmI z8BSDl#+WgChZo!DNKP#gTv>y;<_GjhEfUb-F-xd6Mpg+h)%a4r!jn}3_nL}v_E}%L zzIlXNCEy#&F&TL=R~89!EDL&BBIr)#i}-%a34lpoW6Jp$ii?Y0p3p5-KJvp{xqQPZ zS;AjcyJc~p<8pYVf}ba)$wX=z^$hGU^?ATSsjw4 zfg-FWG^~SP5?LCsiaZ3Fr5)s|8GB_>z^$zMpi;(OJ}S!sZSlFHsvwcM!PV{TZ|$B0 z_j28^v2E3wKt%1%h{2-Mt(|H`z_~y)4DFFx76j<*)Mj#-fZdg5f@(3KcRpY2%Fhx} zX;_Ci!B;W@vLIme?ZDNe)P?T&5`K9uVkt*02Us6w!gr2Z5GWpo*_=|kD+>a+W_$`; zrsn?n?9wfrlVm+0l3hg?2GYqwwIWb4&AxrmWUbq1HYRD&=+N#{$H{^~7pVIU7CkU$ z3z-Tm2k3v8{V$z@`I?d(Sr}fd)&+N2)q&YCm&Ke~7(Owss}C;kM^B&}EEAl?eJ7wI)rx_8qeD;`%}Ng)#dJHWhhMAqAPxi6xB-n@Kh)pI ztUtXES-rn>#(I2H7yOKl4@l$3GUsn2ne)%1;+E>cj#NfY#aFc_4$7oIU6@TLviYu> z^p6-lVe$MFpI^%l$KZiuc@bEmru@s*<4jHX!%N;}dzd7TlNXER<90RYzYot`l?NVs zToOz5W`>&bH~&pD%Qeuy#c#;`cQ_W9{~pIJshiB-lQ89t^*;c8${Xu{1aEus`A>i$ z^FNEA<&E{fNSN)7^}h-&-dMA=^VKZd#p-`Ui0fkYzvC=q{tp~ei_HItpR8IOip<}~ zF)r(#5Pwb%bvSG?{}+x$=Ksdgc6R%_5~dvQMmoFwKVU=VAK+M+D$Z{I5NJ!5__)my zueMp@$2Lpc*k)PIYyU4GoY#um>urVDDJ(rXH7zZ#Ft@-AU{?g?!L}Jdk=Yza?ZLK% z;7w*rMJb)N68H%ZwynY2I%@+MGTVwEbk-Jo1xc8#vlyW>4k@qDmf9>|w$AQ6J9D$m zb`Y{Q(zCY!60*IJ;xKq?Y9{uU5~_nx;!_yAo^H>~H9O)Q4sJW)$JKskoQ2FTI7T|S z?TT}+gWGOkicHxeA}(vV=&hL?n&TilBz2egmS?9PfFZM|2-*&Adr4r_!EMyRZPdYS z)WNMdGmJX8jXJoEI=B_bjZp`;Q3tnC2e(lNw^0YTm|^_?ba2}nuNC6pwvT$@=!+vZ z3&pXCgIm4j;wK!|_ET~D;|Pbf1MuU0t%()JdaW6#BnRQBUfYzz+QB%p9M<++CF?y= z>$#{7q8_-!e$-k!i#n{unh|EoqYi5=*Q`;8wH$R=8+BM4by)jT@N^Wt#_z?W*N@&| zt$J^W9-W;+(0K+_5a0FaLQu? z*LrlouP#x4Ccmol?Q=5oxc-l^pnMfJl2rV~4__6(DwY1!(-{x{B2P!>c8}KhPrW7l zl&?SPZZqm`6Q6lT-EE>1fWIxfx^=FOvQd;856{2c*;(wSRBvqSy-(opTPx-vXhNtrdg}8n!Jg$Tx30bJi zhKN&QrxhN=HxpEF7@ycz>$KYNWm~ov-O;f=kX7~oU!q18DPb>HDUcFii&;T$T3CCF zP`EFbSyK4czS2$vUff?O5*6LR*A+w!J;1+k0Dn>gFKpR#zGa6G;zJ4rw!sxoIDkJ~ z?kj$5k#Od(D{vzm$f$4%XW%KPAUxjdJgea@$X5FvI%&l&qSp#Q*)QRFT}4Sq*DZ#_ zaeUDdoB+2!Z(QuL`7qN2Q7GFZmZc%}w(RT>Pl4I6Q)Dt>iPDx=Q7vilXWP z++d;bW_>*rUT)urDVz9?9SR>%`t}R_Nd9K(n;AE!T@&bkbi-S&FE>Gaz=!3UsCuTZ z#{e8yyh{)gk?+`dc3`U0WlVFrhsU~wqS?R2_E=$w6#e^YX@IIf)4g>78wlFBGdEIc zf+zwV&>6n0U|<4#y@iEDw^7blEz%_GK3jpO!gEDYxP{$RIlPx^EHQLwR@?;mNV2-; zgc!I^4+rFLsZK2pe&7^E;T?QCLBawFeB1)+EP9A)AgY0=2BI2>Y9OkCs0N}Mh-x6J zfnT)-oG(%A0eW;QEIJhymPQtx3TrwQrazv6FKFyJnjmWWMgE-6XRLefk7r7ZUw49Q z;8&R0uKO{}is^4^>~83LoEOWKPi^>WM|gb=|01;+jq~Hvfb+SHRprsCu^(R*MoavC zXaGx1@46)Fy%Bb_>Y6wne|&a$*Til3Th341(9Pp5lCSsanux8FtK{E=2t2N{E%0V^ zS0_!r{)L_B)45#}<(l|yf(1InMu?qT>L!}G(hZ<hNy#OJrTo?^I99$QR5ev{(3)D<+D&}>xCoqR{G!GCKI7@e0IPieveU+28!iAOi5TTP}5l~^ri zI~BWKkwNH})FblaMk|<)r?|nBrn>F3&m@rdxvRx4mj?z`` z2|c4)`{7ee#diEhbhxuB!B@*&$w@OiCz?aVOD6nu4#jWC9EM|oIUGmXZ6Z#>)XoVb zfIhWz!btG83(hYAL*`c^XziRZO2X`&6GjW|-8mskHcH5njS;eBD}*e2|AR5W?*0ey zI18C$am4Nu<3y~sne22h9?;%>LiTsCcb}L5SY%FAVGkjfB@RJ7yHB)T-0Y}132exm zjH9*t#1x?K+I`|{k=&Bh8LimfeL`>ekZ(>!nA(408bFab9Y?+Y#0zIEhLsKUp8NDJ26kvkiLhNG zSvTXQ5+*x-Scy0}FBATAhxcW@9HH1nV+DTPROr}bB*Gg z?xL|);w`YpGh1F51Xfx=}e@Mf3w^(kVW@ zTd@(4F2!zxA*9Gg!V*3=7#-Smp(8M3zrDr)iD&8vIGA58S*}PIMQ&ygiMhD$NsTQn@rnjQn&5Co;2zs5ii0(qpMSB*(rs$F) zBOuHZufUe*uHro>J#q$4qI*cf0qM}v3p%36NF1VP`8%=U9qvd6QO)eO^ih!!5cWoR zE$Tq`~-7vE8I1ni9)_u+VY z2;m5rk(@|}6zL*Zj@Dym%}PakPj1s~>@W9@9w8M#_kl7IQ z>2%Ucx~JF(2s6<-7$?89lJJ~V&^5ZnH|dEa9(nS`m?>ka9;^d)z}q-mJ_6FkJ{jn- zg^hsNvGM_4xSuNCb24!Tolc-v5O)zB;gdt@lwu>XL5KL(K5B$;1mtkHJzS>P2-u14 zwC_c)A?l*dlc;8!;#@?J_~=C3Q6lNVm%oJ{uWEWDd<5o?^mb`w&H!cR{fUW3QUZpB70#XB& zErEY$5sk#n`{G&rLD3Pg-Ap=+JH7(K5pX@9>N$^3f^-qprC`6(bBc|`+z5Mmv~H1( z#PgBx`LTQobOf9*na=j(N{}vs;IZM^ij07KW*u(*H;RtL1Np&<&-gS_aM8~FeCHd* zxriQe@nqO=o`GZ}=C>i3gjXv*5_je|u;e_&(yK(`WI7SwpQSr+5k3BbOR^Oi39q0R zJA`d!CC3QN_fvbqf>h`T_%+(v16bD!9f>h^Ig&7krKgC1e6c&9$JGe!!AEc(oH@X% z2Z_MlHVnt>y|6CYg2(>bzT5yZ0@Bl>6Ig4m8(eY$iX2Nv-06mOJ#7{b7kgeK(8H$itpXBMIb$bX zD>4Q|A9N-;nyaSgTJEOJt>D*M3|)m4H=eI`c2(L(v-HuD3=FXg9aw1Vq^nJEJs2s+ zun1 z*KTuIGDf$p`jPJBI8}XR(+Lb=X+sI~Y$m{u-RN9CUB|EFdRt#vc1{U&LuWqBredka zDj?Ucv?(;320M#Y4i&k&LFGGaeg(bLu>)GPa*wYbxq7!>XlI_40foof(JZy9>(ZGb zMOV>O^|dV-pmX{n=#0*^USy@O%RgXK5k-@6rfM8J^&~WIM3;-0$VTgUVauk-f{7{* z-g&I(RtM%(GI{}vUokYYqPl4Pho`$85SO>M>DV}z#ar4%C+)6Qk46m>bOQBs*5dN{ zn$2PGb@P+)Z%K9j z+ARPIe^;m3Ln{)m+?Hf)AALpXHiKslx_(hDH7v6^Jd^9K#{t!j(Of;1+MVM_n~Gl> zQDprTiXY*URQ08k%UGQtzqY?EuR_+> zs`2e~f=(uKd7V@f2n0r}E&#&=>*K#D5!DC!hG=uJnnCpTKx2qDhiK=hnnCn#__5v% zaPIyn!5v_Y$W2gJf~A2-`fHoU`0r7IjDE)F+srZ$dNhYQ7A3 z*C}qW8G5Xl#agCOr*=RylD;Zvip>n6#}VbA+cq8JrLWpF)#?#Q@7ZLL#k@>FFf*-WtW}E2@ zLRAtU&ap~_Sy!tdqiv!iyuG;9M(?sMxvrn4JJNkCJl>WIQC&pz={CCpY(V~2*aRlU z>moGO%+8$8fK~;h!?t9s&Vd_s+&4NkK4w#E!9*1LoR+NCktwWmCBP88IaJkLLLUWeRwPbrRZV|XlCvXV~SZThssm-3uNf&miqooJ> zN-{iO$!) zIyz|!DoT})?&%~ObtY7)rAj^NIo;hLsMxx=Mq4sLGqHB9#e;Cw#qV^A_jM+G$)*ZC zlJwk8AlK6i_1kG@DDmAk!Zo&Z3KDVYv9>hcuZO@yU{n>f zvzZ&3K4SW11n7-mj%= zL8~jtu$h@2x%N8xG3e3TJ;10%_bn&vCOZ#t)m@>xd{Kf*eTtpVR8Q)<6i#c{V~Z_7 zAEOfDm)TYVS!nd`Rb|^5nqZaOHk;V#5!-6BabVrr9$~XzfmMZzw+YzT*iQT!)8W;Q6;BF zo0;dN_10!ad(uj^S;@gI_Z*v5X~}^b4?0+ZC=u01ga)F`Awn5|QGG=95ut$}eslQY zmr$$o=a=-4F8TA*`YA}bb}6dklF=MYa)?r8r5DW0m3&CC4a5 z(K3EK7hO)rC`AcMgK%w99LhCGk^WjzbIeVYj2c^MlN7}? zl~HX?o1`ciT?EG_#YxL|RqE2UQHmop%r#1pQblN38>KiUacoi)qe|k~q&VrhMk$JN zN~f(-oVe^5r8typlcFeH7RM&V5p+ya6r=R!Sfn^Y9M%RY5mMS7B|^%vM^T(pU~P}$ zNV@hYy8809L5h=sYmlNJ$yjRD7AZeNN>#FBlcLieuZ>bvERk`IQWT}NLsi-;MbT0% z30StZR%qQUwN;8Mq^(jE^BoyDHYrL_XS+_@q&Qh@(<~&35s?T*5)W4I>H`B@m3?#_9zbJnxp*O*yFV|ijowi57X8tiV>Z&V~pZZjxCB} zbg8La+oHIFjvMP4%W)ru|;u`bO7w2Y+DqEvP@AVrb{VP6c43LQ9KN+?rc*O zH=Z&@@klvVYL1YYpm;4~DO7N#vvBBZq8iIZ4@wmVUbQ)q2?;$dCOlZX@@ zqmT$rTb_7gyQU|K7S$$b(-Xz$Yi{qDo_KC&r z^)m^uv-b(%Llr-j($4l9?_?N@@A!T3DBR00^@-FuoamQI8R2JOXLG`ze4vY8D$u+M z(^MwbFGJNs{nRHe21ZMF{3S?%=6%;3%SW10H~mx~*n~-7d(Kbp1F6W^P1?b{X1F@V zPsQf&y#$eV>H!u1jJ2=VkT}$jTf4ruNbM*ng zPzt^^u;)S@tt9)I1Z3wEN`U)!UrRtYSL5emxx`Nea5+t5p7m$I;fYNt!%tClzMo2= z^L{F!nV)G|Url8=JjWmH6WIk;_=V8UPWU-IFrWB24!7|u;u91;Yk236shmf7n=)4? z`x6W7Z^GpGnUpX63`_wY`ng!T=1s{V|@m*Kg^xx3RMP_V<2#lR?!yLu?~sCxDtvtiRD9ge1+ZO+PYkJ*__+jpqv#i_9^t1r z{F$FZCw$#sv{>vi;_J&k`EbD8iBAkS)mc9mORxP@3R-W|m{0v&EWRgeD%K!ZXJ*GGvNu9p%!TrU&QW?D|6 z#1PjjBR05R#xcKjVu_)XSH`iub!3$Btyf4H-g+s=@Yapz7~VRR7~XoLVdU+56AQqo zs|n>8TRKT$BJz(Qg|hplVwlISwvtCNj1u!iqXNQ`8?LSi55Wj+xtrAahp66=j8HnCoY9D7)&+;B|hmvW3j9U-xX^`_L6 z5hGZyj6|0Ohw<77)*-YFtPpy3pUbrgte4fcr^2fAwE?VGOdG%ot1=~R9`7)$&0mF) z#gT2={8b2*wl;qi!Yx>nB1D?Mdaqf`U%iZ&zIqw4ef2V8_v&RFn^&i3uFV&UqQ5&KgwBi5~6#<6a73MAI8UKz1&^)gLUcB0FAuva+Bh(2`d zjA|pQ4SUKXdZ$G13%MEa7wt2DeU%XH`F~|C97ATG-413tUic`ig2K6*U+16E`P+dO*>X5hre*WW<4+hfx08JWPW4Z}TusOT)@>n@6arX_feG^N5JsHV=VyJ=aA%}9M^2lHIj18=E)1oqW(tT z^j?8bm9GHek(YPSe&tW7{?ErQzYew%_Dighw?GgEGURnuoIdsd*^nNzKE=iYGM> zgC5uRq~;V6{i5wi&7oo$j?_HyV%heg=Ex`)Y91LD_h}x+ah>MGYU()638Jv}o2Do= z^`PCRxs3Lj<}mr%Ynqc#f_9pw7;SJF;WN#Vgf_I#G{wnGhU+xV5p$iUDN0XgxIWVq z?Plb$T=pm=Mck!%7}lQBoZQ4unny(3qi|M$JS;EhJ%p@-NG1wQ=AFVgN^9k{5_S^al;Zr`LfgP84uZ>T( z_AvoI?~AmeuTSKwfj^H}J;x`(*Jk+`Iz80Soa0(w)=dioPsGJOp-&k;T?qPwHqfg@ z-b-J<{O1uSpIqpTGm^y-8vy?33w` z=p)3a-beLJ^EI%7?mmL6Tlko{ZG8k>Ngng13rE{0d{jsBTlF1af01Xj`s zE%p%uX8MSx>WU@*U6ZieAL%09^-)brLpS)fPpDHDpEi2%Tc1di9%bozUmSjTz{k+D z%|52t3?DJP%~J23H=Yjpm@ngf1Qs)EeH2}#Cq621t&iYmyL}8DO7St%QB~gZ%*RG3 zUIsf^H2A1#n=AtFrPut1qzUl&?^`3FFnanXT#Vm>7SE$AezDkneul#B{8Y*pegU@fyIh^KWzU|^8`thp;-qz%JSJi5b z5(%DBSyUfUeMp0FCRBff7I50EFIseUYyZTm^4Hb=G1{tCYySVbsohB%?Qm5(HkZ}@ zR)tkFQrg|B5PBlWb+;<4Od@R~?QPX7w=p+CmC;E~`&xAf?P}FY=|Dsj6<0f2^``82 z9`w;yBciL4X+Nt@j*gpEVcaWsysUl)t;*v#SrtK*1#7pG4nrRzis9y=U938Ck%e=` zw1ZVgEYjLY)r#w1RhL2gSCu$!JvshWzk^m6rTwdV<+OiQVU?KnuPTIFUhQ60Sj&P+ zdslTLI^I=XMmtv(CZfdJxvC@R_*NCh&D8N$>Z7%1RWGd_s|srsQF}`j#?9VwtLg}H zq@bI<<5txX^q7sgf}V0(S!=JVPE_qwRS2t%X}_PsxTVuhRfTnP&`wpovW`<#CsFNG z)f-zoRrSVpoT_?-9iOT~tG4gBR24>Do_49~h-i3 zRVOxUf2zVn2x@n#u3)5ARaqTxs=6fFo2tZdOQM~rdfCYGS-Q}^RGl0hSE??fJ*j%r z@^oib6KIUMe8p%-s@|B6BUL90$B(L4(D9=xw5ulVN7c(ZZdARrcB3k+x@7G|)hnjG zs0yo!uAQg~p%kxus0!igS^H4+rsnui_0rmhs*|S2hpNg}f)s#RvERlN&WZdK=Jxy) zJ`C_v;y%@zI*aR6A0@6+y_C34^)gM(WyN`_S0 z*wzR!w>4kPZ>m?=@tZ2N)m3W0sowb7Z>q4i zDt5RRtrY0^O?A`Kep9_^X}_t$x=Nh0Bf(6UegClY;5M}-;C37f%nTg2csCEs1Z8g? zn586l;3%61HkZu46w4usqB@ASgXq2RL+lR@Ny9uWhbW5bAleS1 z_redbKS(byb1|mcf?b{SWNel32N{1@WbRbMtbnxHW^!nb!{R`RX@Iu}Y9?UF%ojn~ z<+;QxkT83gRw#5C z(U%pLn!9lpGWXzU6>~38TvpR!?gMWZ^IH{VzX-~BvcxQsFuRxsgwE4rQ#%0};cr%5q1KMOB5w^%IQGpL7Q1-yidL-yE4j9dL zTHNfYSqe5}9>uY+$UNps%b+(xTI3;JrlgOHbb4Wafq4RGOV$TT^rIYpLk_8O*gOePWS+t?F5~wz{uh`^!JEv} zic)RhjKEJQ_bhl@x#s{w=6Ml>a@&@e7bMJ9?nR-KTA>_id4;(J<|UjbwZv&odTOp& zC1)*gmS3>dysS@hGIPx<`efY1q2^V6GBJLrc}<^8M#y!2l9Rf}ynz$cUNwH)+N;4? z$h?VT*6%^O*Bb@ULsSVrQYHMd_v{~E#s9J;`@Z7;@oAuG%HP*DMf3S#XrO5e_@OaB3_V3l z@$0VvdNrgwor3%KhkPe^kd9#&mcx1c7$^J)UeAuv+okGk3f)`*_wuK#pyPC5@#>xy zzA}p{s5FNkAL$kMD@4&QX}oQvK|KUt9dsW=p7KfQ8FO z!ZE}Xltq#Xavjy+%d2ZDm)6}we3Wh~Oy{T21->zapFnIJ)lu;RKB__{a3i*ic{*E# z(D4OyoL}^`P7cxa83(o^{X0REN~n}iZL<=)x;@Rn{xovMu+FL9M~_!qCslN-We6XG zNnz+keAWmn0vF?x;v;m;v25I)<`%~00)6Q6aDIz`7@f>VNVgsenUrole*k0?nP__Qc0({ls`(Q zC;7TL&rp}h5BMGeKcXTf60*FCLYL)O86C>RPBkABtei^dc01Ubl~`wYM^I_AjY@3d zY&to01iqcV6Z~ch?97htQHtb-=2X2qo?lA3FSvYjH?$8q!8eA__QayLq|E(RQR$?G zRx!)DYFPhWs$7eb_%urP%qryjJ?&9X)hf4s^qk9M;;b0YKl{2*mL+qH!X39Fl2jaj zn9MJ>^-;Jhy-bL~Zc3m-bQ+0VjI(6Uz+XVafU&9+XoDki6zn3Q+DgN= z0kiTH{AG*%eZ{BxrMtL}Z=$-rlfA?quIc( zhIAT*xC!53Gmm%bY}STFdENT49 zJJ20?NG?{l2t69Nhu_Us`1{g9G@l=a2JrZ9pz1~Kn&AdTxB8LJ_Mvm?CZjXiXihaj zb&`YbxOC-gg%by5e~E@9H)0{ZnTeKbJ*V2ybvP1!jBj++gX+~me%l$z%VUR+!F};H zdPR@ajk*|{z*Wpc3es73Zru$}|2jOTAopr2m3+HjGDC~_Vm`|o7i-?1Sk9XG}R8Fnq1(NeJl9Rbd0D^1zT`v9+I*r}Z zV>rOv&v3848AHXuh(KhyD?|Fm|h)lx=Ux6?8pA@JqUofM;GchHw=@gYTtde0&LU%7clCJ3F8c zr~&MY%@Izl?Sp}8d9c|R{4}k70;JnwFmtmLl@0`^ie41v!^y*e`F2-2G`k;OPRfJ) zZ1@Z=*_KA7P2j)8`E&IpAQY->%-OpE~K()efVl3;E+Mfx6GE{ z0ju~<79ULpTukR@#nZc0fc!p*?!9-9QnH=1<~&c%xd z;4wNh32z&Ru#qm#UeNv6R4$H%7Wvu2gjIC117JG6ZiXgNyaXca={(-AE<>L;P?pZv zU+o0mTu8+)elfIJNy)44z6>04|K< zM}y;1fw(aNim57)isG_v^AB#se!wVu{Z{_?<)|XCzieN`;UT#2>V=CX*}DFGbRvCN z4ve>(#u4;k9NwM~P;Bs%{fTJL<-w&{bf(Q*=m<2tOYv>g~H7^S=*qYB~4ub=xAR?hrVnq9VB+k%n zoS{3}lSTu#osUM_IKC5L|A};T^|Iz7@PclS=F%ZhD^zzHUBU~lY>!Ul$D_UPtCoJ< z^BG7b8N;Y_qTFZ|bblv5psQ$v=!NHx-+~u)G>Ku;@Dg>2Z+8IRvzg0VWueKI2e)@< z3*p1+vD2I@mS<$b#eaEla5mo=Hw`mZNbu533b+0yP8!+eK~%e(Ulstbnz(Vye!N?u zk9*2h@z}8NBp$I9!L4*}K3_NBrKcj8f|s-h3;6L=U=DN1hE_%ha5>+@1jWN(-v4Xw zTAZ<5x43pmp^HsQQ9E6zREJI35v6q9C|hlX6hdDVpHz}tgivf!a2K67Tym~G5H#?0%t)^mN=^E~Uhto1!FFg0P|yPd+Ek0@3C-1Y#K zECcadZ?dKLTU-)|NADdye7S&Yf{)5J%fvHzz&Nd~pl7+x`M{^JDy_xBZ$bk;9H)A= z1WJHa%q43Y6?Fd|Po;QDCRkQfV$soaN7xz2q}iWq1;^4Pk2>%h!O-e0G_fDoje)>) z`79KR5`4E9Ap`4i;~lq3QR|baI-1`IycNWqSMvqY(>16{ITtGN#Um^sRgep=4{Lc$ zWrBmS?kvAT&5wb1d19E)uF!HiH`~kCTqFv&hENCnH}AA(V(CV zRH)k9DqCU~Qbq74D!m7sV70b@S_GY6wKkh-%o2_ZES+*`NaCKzjp4~7g6#RZM*)A5 zsI~?!C{B0lGPPSDzHZpE3tzC~L;HR51ySoo_7%xiBdw>gA5(^d%l-Y$)2 zy#%?#Krq2&n*{sZrMBg9g1ouJ-}!_fSSGMxgZ?iOYQ^>xt~FXD!j-2pc~sw`4lC6G zoGgz>ocSsOs&l1ckNwhkk6dvoGae)mE3+OR=Za&}ozRZcY_aA>?OX59ZgmRPdJItQ zI&PtAgK(kx2$g$g83;8xZ~s5 zeUf_P-3?rF)=*v0r^8q{PYG4vdw&x@)99U#aXhqbsS_`bj`jani^b-Hvs54S!6hO5 zuR@sb!2R_kKHr)xRQg{}0>8|8q26h!oW&u5U-p2-##tP4TB^lwUjkgSV;6Tt;n2D_ znA^XCmAk?Uhe*9JJ#P-cetASg;&5y|M$_&ZVi)g+vw?OEpu)&YdDLwrf67mnan)@l zY>&VqSOqT;&A1H25Y8!HDH-W*jbr#)#WpnL4omhkCH8K?5k)x-D1jrt&-;07y_U)2 zVemz)``REXufs-IdrXO=INhJ7$!$vPOq1jJ^F}O-Hw_&RG;lk$1Ym1FWKjLLZRstn zS5h~WHq2ja_i70I_*xGfh9ysHJp$`pdpeFqlxpOvh?_qrD&-#T`N07K>J7enANH%} z!*Ji~4ff&BH~Gl{#ax%~5){rQU?1?^#xK^xO|myQZyR^74pazJ|GP-8^e~8WH-GLe zfX^fvqVNc;I+XH{#uva~ot6+3Hjo~FK=GChJWD;N z6yJ+Kdk5V?6Hjv!6=h@dD`JD)w074cAI0>6W{&0&Jd+WSR&WIeGF^(%WnpUMsbnLA zdTKq#FOF#?eN)}N;A$ZmZ=njFI_IwJ-P{v?7ws+lwJFP;{FHmnh1#)8H^iJzmLr+Y z%8!jh{xe)}WZywAFQQ;WBA3E(=!rkc=n)#FhM#yULAA%oLZuic67(1ysPtjjT*x&z zDLl(lB8DfONIvts{EG&=2c59<-Zdp?U>6SW2jK01T=Va8mGfNt zabxDP)7Dzu!^_|y(rv9#=BvKwb7oN5Ep1{h&cu0F@pYrUtKnEy3>$8n7P)o%$~+jn zrFZXxA%8GCPBFbd^w7ayp=XvKHyCY#k9E-7^wr9S189RIganHj(sF}0R|n#BR*3ml zeWB9B(A~i0_OND)D&RL)t*xNt1jF6BncsSFw^EmRYAa5^jaXw)XXbr|lCWIyBFjYs zSGqenBboH@7#i7)v&Bv&%v#Sz z**PVWuOHl>rO3k%^Y$~$JTkOlJD=s@idr zrcW6sT;bU%*bUeE?tl`O#Mx(f)GbEgL3+8H3b!l9;OOR(Eclpc;_Bn;BVb5F{KX;S zrCR*INPym+J_m=h_i#5H2>Km6JRI5`!JQ_$40<3k(8brs_cz4W3q=^zOb#} zDuN%{oHOE7P~~!H?$?@=(>-4of>)g+uJ%jhvi%0`I%&(Fb}3$)5X!ZV3Zo9ughRZ- z^*j*6AGd2+IPh=Epx#|dh#}e)1r{ll%fq=3f)$>DucesWUmIz96BA&IHE?mj1L{e{ zXvV8G@oOjiMo0^Z!{D=Qh|)+qXgcl=RwPnYeiwkLrU~YDt@seEu5IEnswC{xuyORd zLn?TwVVEqszPpPVeIPgiQ(`5R#3@1DJni!sS(GE>T51qAZ^z~Uc~1s$h2uj5kHfXA zn_j`~PV%Y=$iT{b78(OYVYaNnbKqzIq7`~*hzb)7Y6PqGA*z6j4Z^P5!T4ViZX}w9 z+d$U}EXyPd9`%7p3LP{NY~Y1dmITY61~oZAPSrfF)B`TQ&%l1>lRi{yziR5hV@G=7MJ2oEAga4nT;3s>i6Pv!*N`cwz3>*2V z5jIQ}aNoM9Z|6=$$!pda{Ba2QIoj}zhU}#2SS%(dmB5@bLUmTyxv5B6bF8sPGVlwk zxsHW-#~c-adG9?uF(qF7`Hc8ngFl6rY1lv4n%IHDozPb6o&ME@^L83%zDg~fVKi&N z7EqcTzhdk3wBaHp+^*R8!IeTf=8+J4p4hGMM{J_n(UcQfkBjL%2rq5v@)zLYjSZdA zLR3kO_|*5;b3*p^ut$J)|G`9R&GAt@->NTEdVY&x^OFmf`%gtiV>D`O<)t_hw#lLh zI1OpQM;1)XT)m-$ zrR#g4r}kqYj472C%Dri~b+qK|!KNB6yP}5{>g|`xSsW7JzPM!W-2+WO5Pa!qBvmcb z!Nr|E5Ac(wr#hk>4^nd)rhXl1rI>);{kYkPRl#jP@Zj9ERmFwZuEIrMhHZq&*D+B? zwlyZEZtA?Isk2kKXt$SYn0-_ovd*NMn;HXUdF!ggHEyR;|9r(qE^x~!Crt@GR>L0x zFicdLd4^e?P=uMe5^;MEX#zJY{svRwTkXo`cXDkduHApHS6Y6+^Pag6&x9Ls=8qDl z7ku^u{ih2)KY>4YC*}ZPqX5o2byKt*;s>VKt)hM^qqbo4?-4BW{saC;nhDQRGb{ch to?-v^Ih{SyCED^Ue`>-O{%x@NPY9NTf7Zx{VLXXZbdB*w@f{08f5ddCF`i8*X~RPQ6kW=uH;S zFh{1X%R|)IJAg2s5G`ZAz_^OHj5e>r)-pY0LT!xc`bjAtyjhHn<=dWEdW0D2^1umn|Pm*!Xo<@WuV7+dB6rw`B&hm+ONJEumJj z*R00#*odM13`IXhzsLPRK;Dc&0&iP5neI+E*o=)82X2#G@_XpPuX`$)4UkZ zGGuzhsPUNNXaUcqiN+dgW}@|->wF8_jx`6UBE;)>d^LgP7<_t!^+cj6)~s)lMbbsA zB+CUvF_6Z4HkOXEraX4#AaSG>yHs-$7AVr)q76&e&a`Pq+H;6C(!SU(vQ(m5sf}Kw zwdughejmxs5bgar@v0RAWgq{bj7*CXi96DT=2*)?r){zlXwM=!D$<8p^H2XKL3c`= gI*}Y*@@qaFKjN63{KvZg{U*wP@g_`5`}h4n0AS+yivR!s delta 1463 zcmd^;L2DCH5XUEyuoMZlLPXI}$eo81i;GtI?J@-?@6 zh=?xT8m^T&NWbOkPNCKl$4?%_HV1o%P8bT^d}-vowHFMfOZi8R_cKd$nY%^2MuXGx zjDuufja%6XLzP{s8fB$*d=xy4KnPpBA~-cCwRpkXf{(c+#4oWdIFGdn*R(-=QL0aK zB*dHCR$M)!v^FMmn-^rCI)_62F?=a}aJ(P6f9zInaW3mU%%fB7yaTZ+*E zyc?{;A5vjDU_ zqLbb$eadBih2vwR9w+=68-t_LJXXz_lLv^6;wR!N+!DwBDLgl;hp;&S_OTl#e(#wPKqZ|@Qj zBD~i<`I%&o^!^T=K|`F&p)D_ptB+W9R1}iZpDrpQPLuIW_J5za_ctd#_&R4NOEbNu Nbj