From f6fb9c04d378f269fb99dfcbbbcb87d4eb8570d8 Mon Sep 17 00:00:00 2001 From: yhjun1026 <460342015@qq.com> Date: Fri, 11 Aug 2023 14:38:27 +0800 Subject: [PATCH] feat(editor): editor api devlop editor api devlop part 2 --- pilot/openapi/api_v1/editor/api_editor_v1.py | 118 ++++++++++++------ pilot/openapi/editor_view_model.py | 25 ++-- pilot/scene/chat_dashboard/chat.py | 5 +- pilot/scene/chat_dashboard/prompt.py | 2 +- pilot/scene/chat_db/auto_execute/chat.py | 3 +- .../scene/chat_db/auto_execute/data_loader.py | 8 -- .../scene/chat_db/auto_execute/out_parser.py | 12 +- pilot/scene/chat_db/data_loader.py | 15 +++ pilot/server/static/404.html | 2 +- pilot/server/static/404/index.html | 2 +- pilot/server/static/WHITE_LOGO.png | Bin 0 -> 59160 bytes .../_next/static/chunks/2-a60cf38d8ab305bb.js | 1 + .../static/chunks/872-4a145d8028102d89.js | 16 +++ .../chunks/app/chat/page-5cbaa4028c70970e.js | 1 + .../documents/page-7560757029bdf106.js | 1 + .../app/datastores/page-e0ea3b47f190d00a.js | 1 + .../chunks/app/layout-7ae5a2339fb758d0.js | 1 + .../chunks/app/page-116b5a30ac88ed73.js | 1 + .../ehYQW3Jy0KfT03WEgdVRz/_buildManifest.js | 1 + .../ehYQW3Jy0KfT03WEgdVRz/_ssgManifest.js | 1 + pilot/server/static/chat/index.html | 2 +- pilot/server/static/chat/index.txt | 6 +- .../datastores/documents/chunklist/index.html | 2 +- .../datastores/documents/chunklist/index.txt | 4 +- .../static/datastores/documents/index.html | 2 +- .../static/datastores/documents/index.txt | 6 +- pilot/server/static/datastores/index.html | 2 +- pilot/server/static/datastores/index.txt | 6 +- pilot/server/static/index.html | 2 +- pilot/server/static/index.txt | 6 +- 30 files changed, 168 insertions(+), 86 deletions(-) delete mode 100644 pilot/scene/chat_db/auto_execute/data_loader.py create mode 100644 pilot/scene/chat_db/data_loader.py create mode 100644 pilot/server/static/WHITE_LOGO.png create mode 100644 pilot/server/static/_next/static/chunks/2-a60cf38d8ab305bb.js create mode 100644 pilot/server/static/_next/static/chunks/872-4a145d8028102d89.js create mode 100644 pilot/server/static/_next/static/chunks/app/chat/page-5cbaa4028c70970e.js create mode 100644 pilot/server/static/_next/static/chunks/app/datastores/documents/page-7560757029bdf106.js create mode 100644 pilot/server/static/_next/static/chunks/app/datastores/page-e0ea3b47f190d00a.js create mode 100644 pilot/server/static/_next/static/chunks/app/layout-7ae5a2339fb758d0.js create mode 100644 pilot/server/static/_next/static/chunks/app/page-116b5a30ac88ed73.js create mode 100644 pilot/server/static/_next/static/ehYQW3Jy0KfT03WEgdVRz/_buildManifest.js create mode 100644 pilot/server/static/_next/static/ehYQW3Jy0KfT03WEgdVRz/_ssgManifest.js diff --git a/pilot/openapi/api_v1/editor/api_editor_v1.py b/pilot/openapi/api_v1/editor/api_editor_v1.py index cbcd29abc..ba37ff247 100644 --- a/pilot/openapi/api_v1/editor/api_editor_v1.py +++ b/pilot/openapi/api_v1/editor/api_editor_v1.py @@ -1,4 +1,5 @@ import json +import time from fastapi import ( APIRouter, Body, @@ -17,17 +18,18 @@ from pilot.openapi.api_view_model import ( ) from pilot.openapi.editor_view_model import ( ChatDbRounds, + ChartList, ChartDetail, ChatChartEditContext, ChatSqlEditContext, DbTable ) -from pilot.openapi.api_v1.editor.sql_editor import DataNode,ChartRunData,SqlRunData +from pilot.openapi.api_v1.editor.sql_editor import DataNode, ChartRunData, SqlRunData from pilot.memory.chat_history.duckdb_history import DuckdbHistoryMemory from pilot.scene.message import OnceConversation from pilot.scene.chat_dashboard.data_loader import DashboardDataLoader - +from pilot.scene.chat_db.data_loader import DbDataLoader router = APIRouter() CFG = Config() @@ -83,14 +85,24 @@ async def get_editor_sql(con_uid: str, round: int): for element in once["messages"]: if element["type"] == "ai": return Result.succ(json.loads(element["data"]["content"])) - return Result.faild("没有获取到可用的SQL返回结构") + return Result.faild(msg="not have sql!") -@router.post("/v1/editor/sql/run", response_model=Result[List[dict]]) +@router.post("/v1/editor/sql/run", response_model=Result[SqlRunData]) async def editor_sql_run(db_name: str, sql: str): logger.info("get_editor_sql_run:{},{}", db_name, sql) conn = CFG.LOCAL_DB_MANAGE.get_connect(db_name) - return Result.succ(conn.run(sql)) + + start_time = time.time() * 1000 + colunms, sql_result = conn.query_ex(sql) + # 计算执行耗时 + end_time = time.time() * 1000 + sql_run_data: SqlRunData = SqlRunData(result_info="", + run_cost=(end_time - start_time) / 1000, + colunms=colunms, + values=sql_result + ) + return Result.succ(sql_run_data) @router.post("/v1/sql/editor/submit", response_model=Result) @@ -99,34 +111,43 @@ async def sql_editor_submit(sql_edit_context: ChatSqlEditContext = Body()): history_mem = DuckdbHistoryMemory(sql_edit_context.conv_uid) history_messages: List[OnceConversation] = history_mem.get_messages() if history_messages: - edit_round = list(filter(lambda x: x['chat_order'] == sql_edit_context.conv_round, history_messages))[0] + conn = CFG.LOCAL_DB_MANAGE.get_connect(sql_edit_context.db_name) + + edit_round = list(filter(lambda x: x['chat_order'] == sql_edit_context.conv_round, history_messages))[0] if edit_round: for element in edit_round["messages"]: if element["type"] == "ai": - element["data"]["content"]="" + db_resp = json.loads(element["data"]["content"]) + db_resp['thoughts'] = sql_edit_context.new_speak + db_resp['sql'] = sql_edit_context.new_sql + element["data"]["content"] = json.dumps(db_resp) if element["type"] == "view": - element["data"]["content"]="" + data_loader = DbDataLoader() + element["data"]["content"] = data_loader.get_table_view_by_conn(conn.run(sql_edit_context.new_sql), + sql_edit_context.new_speak) history_mem.update(history_messages) return Result.succ(None) - return Result.faild("Edit Faild!") + return Result.faild(msg="Edit Faild!") -@router.get("/v1/editor/chart/list", response_model=Result[ChartDetail]) +@router.get("/v1/editor/chart/list", response_model=Result[ChartList]) async def get_editor_chart_list(con_uid: str): logger.info("get_editor_sql_rounds:{}", con_uid) history_mem = DuckdbHistoryMemory(con_uid) history_messages: List[OnceConversation] = history_mem.get_messages() if history_messages: last_round = max(history_messages, key=lambda x: x['chat_order']) + db_name = last_round["param_value"] for element in last_round["messages"]: if element["type"] == "ai": - return Result.succ(json.loads(element["data"]["content"])) - - return Result.faild("没有获取到可用的SQL返回结构") + chart_list: ChartList = ChartList(round=last_round, db_name=db_name, + charts=json.loads(element["data"]["content"])) + return Result.succ(chart_list) + return Result.faild(msg="Not have charts!") @router.get("/v1/editor/chart/info", response_model=Result[ChartDetail]) -async def get_editor_chart_info(con_uid: str, chart_uid: str): +async def get_editor_chart_info(con_uid: str, chart_title: str): logger.info(f"get_editor_sql_rounds:{con_uid}") logger.info("get_editor_sql_rounds:{}", con_uid) history_mem = DuckdbHistoryMemory(con_uid) @@ -136,12 +157,12 @@ async def get_editor_chart_info(con_uid: str, chart_uid: str): db_name = last_round["param_value"] if not db_name: logger.error("this dashboard dialogue version too old, can't support editor!") - return Result.faild("this dashboard dialogue version too old, can't support editor!") + return Result.faild(msg="this dashboard dialogue version too old, can't support editor!") for element in last_round["messages"]: if element["type"] == "view": view_data: dict = json.loads(element["data"]["content"]); charts: List = view_data.get("charts") - find_chart = list(filter(lambda x: x['chart_name'] == chart_uid, charts))[0] + find_chart = list(filter(lambda x: x['chart_name'] == chart_title, charts))[0] conn = CFG.LOCAL_DB_MANAGE.get_connect(db_name) detail: ChartDetail = ChartDetail(chart_uid=find_chart['chart_uid'], @@ -155,23 +176,27 @@ async def get_editor_chart_info(con_uid: str, chart_uid: str): ) return Result.succ(detail) - return Result.faild("Can't Find Chart Detail Info!") + return Result.faild(msg="Can't Find Chart Detail Info!") @router.post("/v1/editor/chart/run", response_model=Result[ChartRunData]) async def editor_chart_run(db_name: str, sql: str): logger.info(f"editor_chart_run:{db_name},{sql}") - dashboard_data_loader:DashboardDataLoader = DashboardDataLoader() + dashboard_data_loader: DashboardDataLoader = DashboardDataLoader() db_conn = CFG.LOCAL_DB_MANAGE.get_connect(db_name) - field_names,chart_values = dashboard_data_loader.get_chart_values_by_db(db_conn, sql) + field_names, chart_values = dashboard_data_loader.get_chart_values_by_conn(db_conn, sql) - sql_run_data:SqlRunData = SqlRunData(result_info="", - run_cost="", - colunms= field_names, - values= db_conn.query_ex(sql) - ) - return Result.succ(ChartRunData(sql_data=sql_run_data,chart_values=chart_values)) + start_time = time.time() * 1000 + colunms, sql_result = db_conn.query_ex(sql) + # 计算执行耗时 + end_time = time.time() * 1000 + sql_run_data: SqlRunData = SqlRunData(result_info="", + run_cost=(end_time - start_time) / 1000, + colunms=colunms, + values=sql_result + ) + return Result.succ(ChartRunData(sql_data=sql_run_data, chart_values=chart_values)) @router.post("/v1/chart/editor/submit", response_model=Result[bool]) @@ -180,21 +205,40 @@ async def chart_editor_submit(chart_edit_context: ChatChartEditContext = Body()) history_mem = DuckdbHistoryMemory(chart_edit_context.conv_uid) history_messages: List[OnceConversation] = history_mem.get_messages() if history_messages: - edit_round = list(filter(lambda x: x['chat_order'] == chart_edit_context.conv_round, history_messages))[0] + dashboard_data_loader: DashboardDataLoader = DashboardDataLoader() + db_conn = CFG.LOCAL_DB_MANAGE.get_connect(chart_edit_context.db_name) + + edit_round = max(history_messages, key=lambda x: x['chat_order']) if edit_round: - for element in edit_round["messages"]: - if element["type"] == "ai": - view_data: dict = json.loads(element["data"]["content"]); - charts: List = view_data.get("charts") - find_chart = list(filter(lambda x: x['chart_name'] == chart_edit_context.chart_uid, charts))[0] + try: + for element in edit_round["messages"]: + if element["type"] == "view": + view_data: dict = json.loads(element["data"]["content"]); + charts: List = view_data.get("charts") + find_chart = list(filter(lambda x: x['chart_name'] == chart_edit_context.chart_title, charts))[0] + if chart_edit_context.new_chart_type: + find_chart['chart_type'] = chart_edit_context.new_chart_type + if chart_edit_context.new_comment: + find_chart['chart_desc'] = chart_edit_context.new_comment + field_names, chart_values = dashboard_data_loader.get_chart_values_by_conn(db_conn, + chart_edit_context.new_sql) + find_chart['chart_sql'] = chart_edit_context.new_sql + find_chart['values'] = [value.dict() for value in chart_values] + find_chart['column_name'] = field_names - if element["type"] == "view": - view_data: dict = json.loads(element["data"]["content"]); - charts: List = view_data.get("charts") - find_chart = list(filter(lambda x: x['chart_name'] == chart_edit_context.chart_uid, charts))[0] - + element["data"]["content"] = json.dumps(view_data, ensure_ascii=False) + if element["type"] == "ai": + ai_resp: dict = json.loads(element["data"]["content"]) + edit_item = list(filter(lambda x: x['title'] == chart_edit_context.chart_title, ai_resp))[0] + edit_item["sql"] = chart_edit_context.new_sql + edit_item["showcase"] = chart_edit_context.new_chart_type + edit_item["thoughts"] = chart_edit_context.new_comment + element["data"]["content"] = json.dumps(ai_resp, ensure_ascii=False) + except Exception as e: + logger.error(f"edit chart exception!{str(e)}" ,e) + return Result.faild(msg=f"Edit chart exception!{str(e)}") history_mem.update(history_messages) return Result.succ(None) - return Result.faild("Edit Faild!") + return Result.faild(msg="Edit Faild!") diff --git a/pilot/openapi/editor_view_model.py b/pilot/openapi/editor_view_model.py index c44b49041..64d0c3eb5 100644 --- a/pilot/openapi/editor_view_model.py +++ b/pilot/openapi/editor_view_model.py @@ -21,6 +21,12 @@ class ChatDbRounds(BaseModel): round_name: str +class ChartList(BaseModel): + round: int + db_name: str + charts: List + + class ChartDetail(BaseModel): chart_uid: str chart_type: str @@ -34,24 +40,25 @@ class ChartDetail(BaseModel): class ChatChartEditContext(BaseModel): conv_uid: str - conv_round: int - chart_uid: str - + chart_title: str + db_name: str old_sql: str - new_sql: str - comment: str - gmt_create: int - new_view_info: str + new_chart_type: str + new_sql: str + new_comment: str + gmt_create: int class ChatSqlEditContext(BaseModel): conv_uid: str + db_name: str conv_round: int old_sql: str - new_sql: str - comment: str + old_speak: str gmt_create: int + new_sql: str + new_speak: str new_view_info: str diff --git a/pilot/scene/chat_dashboard/chat.py b/pilot/scene/chat_dashboard/chat.py index ed1c22754..c33f3db0f 100644 --- a/pilot/scene/chat_dashboard/chat.py +++ b/pilot/scene/chat_dashboard/chat.py @@ -10,6 +10,7 @@ from pilot.scene.chat_dashboard.data_preparation.report_schma import ( ChartData, ReportData, ) +from pilot.scene.chat_dashboard.prompt import prompt from pilot.scene.chat_dashboard.data_loader import DashboardDataLoader CFG = Config() @@ -26,6 +27,7 @@ class ChatDashboard(BaseChat): chat_mode=ChatScene.ChatDashboard, chat_session_id=chat_session_id, current_user_input=user_input, + select_param=db_name, ) if not db_name: raise ValueError(f"{ChatScene.ChatDashboard.value} mode should choose db!") @@ -33,7 +35,6 @@ class ChatDashboard(BaseChat): self.report_name = report_name self.database = CFG.LOCAL_DB_MANAGE.get_connect(db_name) - self.db_connect = self.database.session self.top_k: int = 5 self.dashboard_template = self.__load_dashboard_template(report_name) @@ -78,7 +79,7 @@ class ChatDashboard(BaseChat): dashboard_data_loader = DashboardDataLoader() for chart_item in prompt_response: try: - field_names, values = dashboard_data_loader.get_chart_values_by_conn(self.db_connect, chart_item.sql) + field_names, values = dashboard_data_loader.get_chart_values_by_conn(self.database, chart_item.sql) chart_datas.append( ChartData( chart_uid=str(uuid.uuid1()), diff --git a/pilot/scene/chat_dashboard/prompt.py b/pilot/scene/chat_dashboard/prompt.py index 72c429ea7..6676ca678 100644 --- a/pilot/scene/chat_dashboard/prompt.py +++ b/pilot/scene/chat_dashboard/prompt.py @@ -22,7 +22,7 @@ According to the characteristics of the analyzed data, choose the most suitable Pay attention to the length of the output content of the analysis result, do not exceed 4000tokens -Give the correct {dialect} analysis SQL (don't use unprovided values such as 'paid'), analysis title, display method and summary of brief analysis thinking, and respond in the following json format: +Give the correct {dialect} analysis SQL (don't use unprovided values such as 'paid'), analysis title(don't exist the same), display method and summary of brief analysis thinking, and respond in the following json format: {response} Ensure the response is correct json and can be parsed by Python json.loads """ diff --git a/pilot/scene/chat_db/auto_execute/chat.py b/pilot/scene/chat_db/auto_execute/chat.py index ca0604f66..979634842 100644 --- a/pilot/scene/chat_db/auto_execute/chat.py +++ b/pilot/scene/chat_db/auto_execute/chat.py @@ -36,7 +36,6 @@ class ChatWithDbAutoExecute(BaseChat): ) self.db_name = db_name self.database = CFG.LOCAL_DB_MANAGE.get_connect(db_name) - self.db_connect = self.database.session self.top_k: int = 200 def generate_input_values(self): @@ -63,4 +62,4 @@ class ChatWithDbAutoExecute(BaseChat): def do_action(self, prompt_response): print(f"do_action:{prompt_response}") - return self.database.run(self.db_connect, prompt_response.sql) + return self.database.run( prompt_response.sql) diff --git a/pilot/scene/chat_db/auto_execute/data_loader.py b/pilot/scene/chat_db/auto_execute/data_loader.py deleted file mode 100644 index e36289d9f..000000000 --- a/pilot/scene/chat_db/auto_execute/data_loader.py +++ /dev/null @@ -1,8 +0,0 @@ -import json - - -class DbDataLoader: - - - def get_table_view_by_conn(self, db_conn, chart_sql: str): - pass \ No newline at end of file diff --git a/pilot/scene/chat_db/auto_execute/out_parser.py b/pilot/scene/chat_db/auto_execute/out_parser.py index a94e450f4..d3d0e0621 100644 --- a/pilot/scene/chat_db/auto_execute/out_parser.py +++ b/pilot/scene/chat_db/auto_execute/out_parser.py @@ -7,7 +7,7 @@ from pilot.utils import build_logger from pilot.out_parser.base import BaseOutputParser, T from pilot.configs.model_config import LOGDIR from pilot.configs.config import Config - +from pilot.scene.chat_db.data_loader import DbDataLoader CFG = Config() @@ -36,6 +36,7 @@ class DbChatOutputParser(BaseOutputParser): def parse_view_response(self, speak, data) -> str: ### tool out data to table view + data_loader = DbDataLoader() if len(data) <= 1: data.insert(0, ["result"]) df = pd.DataFrame(data[1:], columns=data[0]) @@ -45,13 +46,12 @@ class DbChatOutputParser(BaseOutputParser): """ html_table = df.to_html(index=False, escape=False) html = f"
{table_style}{html_table}" + view_text = f"##### {str(speak)}" + "\n" + html.replace("\n", " ") + return view_text else: - html_table = df.to_html(index=False, escape=False, sparsify=False) - table_str = "".join(html_table.split()) - html = f"""QLa;%p&}Q@$L=W|+w-`3uW_UVlQzN8mZG z$;9N1sVrSb+1Nmhv*mvqQAN-~UG?<$0hbUdr!Bov0cqeYZn*o}LMTk*zh3o;`a?+v zw#3*6jzDmvN8;>JPxYrt%J}gH53B2C?thEpyrYeG(^M?o4LPf91%7X9cs}wD42jst zv)rS<{g3wwJw$zZhn#Lp`2tHB@aMxL@==CSIfv0gZ>g}fk*UX!@Cg;t zXqmteL4a6w`0c9j|GI@g`xd^_b(!MjEp=|;gu5Ni9=nDJ+bfJpvdyK^711%|xH_(O zU)dEd<0Yc6R|w1Okmq{MUw?eTgna|=>AI=_F)?Ya@49rmYSbm46xSQ>NSp*zS&K-B z4aocb(rHpEF5{zL)DEAN+@er=5bD4yiu$T5;lq|fdTz4s<+;EJS?uwVKz_TFq8S8k z_2OBpEy3T5%GK&C8?etfDgcHgtj~E1_t(=K)*2}lD$B`1zaA0d{@msQxJ|F>3bPWc zz-5p@sF^2T&vA74zP@Hv69%b+VpUI7qtb*(c#nbPnbA`?qt{*3L+I(uK1x@_=ybTo zkw5Y2<|AM!aN5Kmt0BE+v^+woUB$<|Ftp0<`ON4`TZnhGJMdSa 1xk4u8zZGMaB1S}1jiWqaNK^c|sA=hs?3jOo)!5?e0i oK-FoYC;>CMLQw@?ZVEq@75^$%IkS7DXxj(+R;~J_mnV7Wfqtpb zxkgAVUK%wfEVPHi_&}SlY^hP3zspX>li%?G7zpt5^D6lu(ES@Sc+fT%i3HmU<1J;u z^*jzKUB#?s>BSQg5Q+WVZh6Okn`yc4oXd;5FywbnpdnlTe&9yh;S>w0e*$lc<0xt( z&dGR$C3CCDzNrQrV9#)z#^RVGPlu6jT_(kTpBwKU9yVMcHV)cC1iSjk(!XWIrrYIE z*j638Rt|smjG}abNKj$Dc?|J(F|05~mm`$(x2o_j^=frH{(7?1kh(rst~ ejo&;3Ze)pVuUB~|XtHz^B~E=0Hj zgN*5IQ3-7_WCV)m4YuH9+O3Ed{@eofS-uit>I*+7%VvH~_Dp$f;rBK(qdL8tXECdj zGRA+I_VLWVo>Z1n9mu;0LmH8-ggK>_7(}bD_4InZmJa}p@qPo~Meou*!t9s>Qv>Ka zB{EY_C$A}rWu)OSdp7<1%ic*Pj{U=xp})pVCXM0=rPC=GY>xf;55;99r#<);_$dwb zJPYqs+tb#_l+zR6ly&(Vdx44+im4*Kx)i2n+d6`Li8|5m3-%gW5pJYHSYLmXIbt&} zwG}}u)PNJk;TWPJ%RyS7gPG9CiUDDu>uiO%>F5VIqi$OhfBYkm$CPJ$EURUQ4_lLF zM2JpDmv4%Vic?pT{?v&R@O(?^tR<7sw^hWPJp>|dLqAilqpd$)Y#3I0u1S2a@%aOd zk;kAUrPGQJXJ8{Qhxb;a@-98w1AOc*jG1rE<5@f5wkg-m(=VoWn+;c{F3&xUC{yM# zydy8lpKR#dl}jA4nEtAbU@G$kevBapM;V9$qr*53gbR?!lmw=OHiDs|B1jG{S$no6 z%}UycL@SOpFgxbWGaF@;mL`s&+IsTWfdCPe-TVif(&tBk-Cda~4u}FE^BbJ%L!;P$ zT`=BTjIenT;jN9_ir{;IA51h!Ne4MgwU26QK|8NRU@m%KKXrpJF8P&!wYu~K@@6Nb z(S_?ET4)iZA!}n4l`?>xEWw=+YBGGh*42mE)Q{gf2dO(Z6kDI0+x%)Tj3_w{kVt z6^i(M&;c;!_1>IE?*Nczj9VQ6yX~z>qN>*nfSszP(wY7RF=Qz}_tU9TZ$2ik-NW-t z)QJzTfK$G~+_mMk@(?8spQUG<_A2K%G@JgqHkPzIZ)KnH`PLxAvAWU^>Ao3{8nW zvQW~krbXi4yl@wOv}^i&;Jdq_H8Zdsrp$M1!HmDr&_g_;0W&_y_d+gj$xS}e#pN^i z3>o5lC@3Je)U$=R4iba 1 As-T}56C zUi8CyTDa{TBGfvR^E`$KhX1Vtej$7vS~de?eQ}W)A^=z#?;R_%4d@imL$B00@_4$I z44V{LD{!cz6L9w+{O&GoO>YLxXDWL0%I}ZGm20?XGSxlS3i^?oOMe8+-`(lH^|pA) zp;TIgU!%SXpP5iq`^@M*oKbCdHR|3aq<^tjG(!Vg-ky(Y8&dAx*N_k3-^VWsr0G(i z>cNipF7lBhB8rI8bykmm#cFJ%nH0t2-qn+7hhx%p__(D{UB}ug8j$Mtt_Y)UjxCm_ zN=@Rqg_4eKdFYSB$vXuS!z3ZL4N-NcE+KjAh#bEG?nW4-Zzm*8>C1UtKkQ`>ui4~1 zKm&)9ZImb;AYlc`hlMxIs*!H+Fv5|;SkgY>iFoN9M=VlBm;PBjc7yXo-@Ibl>3$1E z1ItpW+g-~I %XLTKSg>02?l>lF-!;dN(Jor+fOWBX@HdpWkcrx?2Dk zi-eM;8N7Z5X5Zp*e`fTf4kCV9MuYe@ayq|%@R*V%#YS0jh~Q0>Hpcbl+su_4Pe-*3 zaOu$3{XfZnv_QfTWa-#E_^aGPx5yQ@ADXZFY6CYHE@<8fd0 2kcw$m$@87G z=n1UDb%jIN00Gl<#rtaXlSM!@v1ZnMS5V9+N rGMjkLRs<`IXqWMbY+NNt1n1Pk_Wj07MDUlJJdN55?u?mIeCJJ)N z>VTYmWYg(E3{ebPp51DD8&9V3wG`@kV7rp|LU8fFVK;730C;(eWpT!Ln%NLxWn;mQ zQrzg7ztlEQVRcri6chDi6L(7(ON(|M`_&_9K&sGgQs~Z)QOjqZ9UDPyXr}|4`>^D` zX>wn-g92C|ziMl*BIpd|OQ{g0yJ5~k%MXa- 8J?I z4@;FhjhO8nQ?f=}m?K!~%8~@jgM&g&e!#>(>)LP9&2{z;yqnA9{G=EuTbm$2?Y2ND zh&6Lw-PFKY#6#4Dcg}ZZ5t=CSr6642;v*y*!prmjb*=DyUzU!dU4_`LHJSj >HV+AlUV>ytY?i-;_dDq2r;q(D(t? zm&MqvjQq<3U{_xFRkHo(gU)j^)s^biD0W_D?d0D?Bi;yE)&Ec5Vkg0IbzQ*dFwUOd zFK1wne!^1LE`>p=R_2`6$3)dv6U{f?1TrdbR#}X{t=@JE!E?Dz_+|o@&@)p}SIhx+ z?qliGzrK`K#4}KOrFpB~dIUV{^=BYNe^f+xMri8cDM2h1h7X9zG8fWfmyRFz86ytl zid^__-0L_%M$#a#xp!0;bpCzlJpaaAxW?l9s@2!H#9iHfDQfv{K!A@f4h^42+_b)t z7X1I@P-jH|I6e$(h5a3VP=^=odNBEPo&q>VU|6|q_^3n=Z5tw7#2Gb<5&?GrC>JTF z;$EX}W%ER5zq#-`LxlG~?NP0_t|ef7Bd04LCPlh*ek6X>zKAbT$ac~0PmH36tncVM z(Y1+xH_w9g(C)!4Mt8lGJLSQ4m{G_aZsYv#AR&3&6F?0q!>NH+OX=ay;chk 4(F|hd2yEE0V3?D}0cizZU z5H(EQ__F-aWz(3?9{H+w(?wCf97opi^ZEhomYR3!Pra0_iHuuBlu|Y7ijR;|)G7^s z`<0@qS{>h4!ko8RUe;8Q0@|@AG|Hd`rSWTWwHbwvPHSGjb#YBwVVnsp`~1Eq-8PQS zkphbXT?y-q?+d$_sb{h_7vClYFz;JwC6X`cG?xOqR78e$1b9=e!ehvZH1?8Yjo}z_ z7}e?#J9&n)_H%=Xws_Pm;Rz)4CLh|Stp17ZQT`~YoNJ#jcV^BFYfE?rF0JU_8I0?t z+UAD3xWSo=gs~A9OyRmGt>#s9x(>bS>f9EWRB-(vs$ghI6Lk&J=`%A#0J%oKjrmAH zKS+8m?Yha@53-??A~t?rFY{4_s{<3_P~{B3PVu9EoSGi6I3$s4>p1k$I_6tbM48Ar z4xJ1X5tZ6E3AYQylT3Z%gXo7rx^#;#1A307tn&Ws81jQP)82|Kyt(=Nx4`OOD;I-- zZTo~mnVlCOL+SvLRoXn4)Q8Dh{T25Z()WZu=Q1WT80zPB17zsbuKy0ZP66Eyrg9kb zg)L1*r8Q$b;Q~(#GKT8OFGrged@(qZ>-Rn4%l(k3%ij_$6XwpuG2c$x-B#c>8AyDr z+`&Ik#mC%qxBE4hJr14kY#d;Ir=`E`fB`lT00w_ E0xye61v07bG2;d?T}-Lm zuX)E_;}Q-d>11yZcK-cKM4mtfz>`$}HhXoZ3}v6rIyHCf{?8Q4f9CWhR8zz|7=Glq z*nM!w@-(DG>}e5?r(5q+uh|tjX4>Thtlfo0mzDP{<6WCN+7Ec6^R0~`^yd_@NTgQN z&u%t5*$w}1+!63VIRQ^{_8aF<9nA+;a-5BAzCbnH#?`3#6i5-oDj?V~KX6n+$X_k^ zXP>*G25UuMo%K}j{#=km; eu z-+tM^RP>Kx<4<7Fo1d^8g)?r5fT%MMQDc-`E0eBe7iit<4K4qv!Ie4t)!EREF!vq~ zJtLehedmdd2DoB23ML4!_#DSMyJr$nGOGb^@?#fkUb!3EXH&O&rZqgtkGW>CsT;#t z5x=ftzUKJ?7qum-fE3ad10vP*Iy+r|24@H6WZEiV7qt=boz~M5xQcv~96!c3swgis zu;xVSx;g6D$faT(FC?eQfUf=0lf!R9S~f%Bk!J6HxYDZK(!4$N9PJn%SB N7|cF)tW*WBM~MH#u3b);?R5wlKZhl9=lyRo-f#QdA x=2@pGUDvjE$7^BtC3z`I`PwNZr z>0esH`~xLjSo>+UoFql;h8GmP?`}^r`y1_g>-+Ye>KPcnFT> ^%d)bJ00w>!%kwtsJhjhrP7-yzSyARy;0#(4U|-KsL?Mx<&`_daovyDDp+Q7m+b z`KaJ +!cBJW9P}7npY6wWaZZW2EhJa229F8 z@xlZEip1-F*r%^;A%Wb+fN=tJMd0U_N0HObyLkkUxB?~#{MK~W%{NcjTMIB0) Kg>NBt16i8dN9KPz51=tu&QHoz5Sq$IPflhy}E-U zKK!mhiW+R=0k$BHkLGkcf_8P70d=fT;q !k;TqfNdX0O9f?%J9-IP& $*3@2@lauOO6)Gi4B0Cin-2V4?KGA+3&jWTfee|?zpYPl;jYnsIT0u_op%2+i z0DD7Z?t3%kW<%iCyz}VQnVMIsf5sYqFCr$h3>Jxq;0y+ba~ss-J95jt?(OL*^Z-RE zemCbHP?W<9Jl=u|m4lDna}s4xb{qjgs} d- zav)kQ3}Ow=jJa>1g}qtYy804u!M3dGCwlf96;d5iM)B2AU?02cHY389ZNL_0%Kqlj zq1rVy008L1q+wcZzt8&CplrMQLqL6Ou3jgwTa;wGC`6s;^~Ew~V9ynZ|LQI#$`-;p zV7xTl@F>#}{=rGfwf#rS>PWU=Ml$#H@vxIy8Q8XmD386LVXR3`9#5}=s4(IEYS_S+ z(yw!-EP6t+z84D&G7&=rqbWqnv?`P|lEnGjxLqA4V#tpWvG>O7PkR{IB2g)+ uMQ?ZR$#``GF!C2)ihl)E*ilC62c1HObtqMXfpiwNMWYidjNdy z-YrP71t)w9Tqe~OW3#tSpL&E927e=jhAsnUt2L`ylE9^D_V^_7_Kw%f4h?VKggoDh zpJ2u%w~*gHXhrLr%|zxuHr-ksQAnwM>|+>K7;^_yLdn@*^>p {yj!9tG z_TIDrF0f}@s`TqUa#$Rt_A$4HpGxzB)$Boi^e ;^M4@Tu?o zsRPd 5?IRHp2iTfd0CSf&nH?M3D3FLWQlB_{u<+?BN ze_P>_%=&ls;atK=xeE`&*~c0jHEO#I8bhps@6Y}!z(?t~Sb1(MIs1RGVv*391^Jgo zm4^eP-y880Bpn)3h^2pciYH<~RpZ~Q{3zc(^}$59*HmgE!xphDsVQQc`9%KkuZkgp z^k%?Lb>w;!J)IvAMvvyo`WW;Gf6 zj$sz2ie Sq^2xjKAXiGZ>nWC;5Bm}@UP7^N6@Q{ z+_^phyZ5p2NVVN~=CaULSTH^t`3XR<9|(s;8+^tSz(Z3N6npCFV8QneL_)VX&b-y% zdkj30zGKVhxzSOMDLJ_~oTntcHm3go>Wb|Nc;skvj;C{n`=7Hol>B(H08gaBFV-Bi z7 n(6^c!---Zh3)OTQK9~zuv<(mPU%p z(fjvm>*)ytQ}c1+<(zfi5Z{_tf2Qm9>w6s1reCfKqPS{({-BiG>FtLNTT0m-2x@Z6 zz!9TIAkyP3u5Bxss$~BEAz)&FR^<3EsB`}V^`HCN;hAp|rtsPZ=P%hlI?-&H%zbfu zr)1;9xG{$Y)yY}nzCYme&sV)8h5Ty`DTIU`&OoVYfn(WhK=_IP$xplj#)UmM0Xq{6 zTI+z*r;3n-f
M&SIra}6 z#=J1TBXZtWtg%A(JckMWb7kDRDyBT7p0Sm?i-Xp;_(HWkzDVIHH?9@6 zFFJSREl4lgzIy>n$eB`*ZLO!&J zx-l0zsKW2;B~Nb-6Q&HdJCA4TC3qdzO-#1W5!~V?-_1sfoOscWNct8NHf KhoQtr_8>V{4@6)ds* zXYtp3BOe9r?o*zN!$3EP;=_@7Qn?RC?fZK<=!}qE9|$4Ge3=7H8gHj76Z(wy*)diJ zQX 5KL(E;t5G3BIW?k@1~MMPhb1|*}e zNWpevB=y&LUt2XbbcSkObarfXCF-(4C}LeYW!)bds3A~Q>Qc2QUPG~Ikdw4_qNO0$ zjy69Y)Gb)W|7=O7J3rT)^_ei|FBpn`-rO~V!-U0u9wi{{*1xk3(0b_XodVWu4$1d9 z>fzbj{*gKzp^Sv6EtC)fDcq45{`KCJJj=7R33~Q!&VzAb=!!7<0ZDfGoLH5yO0%m$ zZMu=Q)qINOu{nLM{ulCY>x99LaVgI)l_RXGO2Lm%UT0Y@Q%N2O)z-0j5b$8yGE98< z3=H)XmIunve89m;D3R_ODpO8bf-GavP#prvw~cy}C-vfn*J3xjnCwbmRtIxpinwo1 zD%vNkv+AsNf5Z>6>b<>Z;2IkiIz%xSoq$>20BRS@<0sKu$<#NyB64OYLI;MDS@ zbV8h^#oS8jD%ssG=U9)Ri2t4TxVdk+j$@;g(Nh&{;et1m548JYyOa17uYmICA?gD~ z=oqxT;^*kM@9=nb)+>$*nlQ1BIlY^C1*gjwcCs<54}(0n#vLV`&Dw1JeF ELzHRp+?2xnI1s8eC@Pja*acEn^+_COdoUxn zFV4$}r7#)lx6tZ4z1dy8861@6v`aiDo&WVir0)sU?QeY)Q)8!hKfDu)I=%a`WTxfb zgC|(w<3xf`sX4?Jbd_wpXOr5$7g)CSPT5&sBOid<*_o_^($&m=&>FLBCgJIP==JJo z+MrjK;RD}!9sbJ62G`DCoq{4E;|59JvLrx}_^oY@>1|YypZ}z#U?o^3$9%p_8lG?0 zG0fB*V_vFZ#7M*GG#n Xi)XE9Ch`y9lLItC# zp#f5{K8IjXSzA3zenN%qi6U+Q^(nf;7AvBnw$#AQQHC!ohm#-gC|RVImWmDE!3tVg z>iKyAo O_Cm)7J_{`@&98%Qo({2tAMR?l^c`K!*}~`@?T)v6ps@~qW64}Qu z78#y)r>+{%+Ti#GrMZj|bU!3up_?7bf&K8K ~RT=M}dJ!zb9wT6jXpF*$8O-3@XA;E^BB6tH=7W)(uaVKchP|SWmvO z4|cU>@NObh_;XOMzRepfQ{#vU!j`t$-U$S|0!`FxtK#m?OTUTn?xeZWKrUlxjDNeW zm#Ua_|4O0zIeLi>GjveSx@cx}8HV8;+pCReAxZ^nFwovR!N47z nAa3H ze( viNIlk3`(Y^?(_113p{sGaLfcrxP zKotuo2DVEoB?dNcuR)Rj$}!J$AXKf{d`;WlzY*M$tlvKQ52JKH7?pS)L*`_m96*zt zO^U^i7f< x&T!^}|sQiKZ;Rs4MePxTJLmM!oA^*QO>~Q{8=J zhHkp974>BT>i8UILb_^sigP#Yka{9F`NZ>gXhMEit8u%^f{6{>*)Y-jblyqZ{l s@miNQ(IqRiQheb@uxIvjg@|>GcEd@p}&d-<;w@nMScx9MO{v( zh{uK>7?n#P P5VIHoZr$q)yu- ze`ti4v(8q@FnnRr*883hK9x|z88P?%EB^f&hBEq`Py+4!PeRC}PX~k@;$3K!^(BsP z*6v-~n^9o2jsTtO=fqbUd
m^Zifw19oASO=fv#1sXD2FW_Ra)2Cdo-`pl0o zRx F$I9~6%p
OUnfS63m&M%Ate3dmOE09=`gUWxBx)MV{^Ck&lqN}LrKG9I78pTQYABgS6@a6q? z;9crYA@ScYsy`xG6}Kdgr+P1@ehmphrpMN$LIs`YqSm5f LGT0NjkB3sOpp+^+x}$~&h}|N9LptdE9k65^Wi+&$i7KUEQEa&Bw+Jhp(R&T@ zpGQ}*&~MmM;KV;;5LQdi0MY*hr0byI1(P3~J6=qStWnOFFN{7VMbOJV9I^AL=C$dD z-6#9PPKp|C6q(y<{JgS>g!gT =KJQi2y z<^xJyY0iaC1(41D@D6g)5;~j&g{rU91M{J?=s?g6Nh`YQ`kcu+H2{{i0aRi2f@ASJ zpoI{ouVQZ$ir}tM&WpOhkjPEFBVFzaMV83jwknbvTZfBRY*8%=!VrgJfn-VKBa}aR zSPatG;Y4B2?~Qj)w*Cg3a`;rMKlay(n*q*XeFmRKGtxo2ufkiv953qXG{L#hD)lRw zCQ<=Lw}~0^?3smbm3%`AVW`4r01Qo)>|=_&9W7PIDNyD8gC^fUQ@MO6F6=tLolO5* zo%W64IR09{txEG|d=%>JD~XPKUW%BGd`AaWE}Rixex7H11syJJXA)xG_@P*Vew{d& z jBr3ZwSS_*$c*qOgW`ZCF0=O6 zU`8_MlWXI2NBrC<^^??x2T+%7PtL2DG!qB1LQU^(&KlqMJ*LF5LuszB!wp3V;M&dG zIS~j$KH7FII0uaBm|`A?Xd{d(3@Rt(G=dn*OF1`%*)m8QYGZW{MN{yK0i4F?&w>J2 zMB@>ljPkSN8Q1afBW81gsbssohRya Gu8jsI>3#6B?fp5x(^)gtnuivK4 z1dtdS1WKw)qNWyQ0-}DoSerlDAS75IDd=N?DlDFzLd#7ivfMIY_>-eq(}O}ibD#VgQcmmgIaU>&=I=d`qJn(!xf0J{X8#j~rw z9qsTMq95-^^LlaWpM=$3N{P6kNOsp{EGVTa?Lrdf+7@thK}L_)<|gX_i`b G!7cy n0hijtFj!|Li0(o*>_R$xrSl&t3U<)npfr>8*}Q%JvUeF){o7=@87q} z>+{bwW5Wu=ffu?NUkMU|T2IGlu1lDiGCa+-!O648ACDijQK>92bBKJe5Qi!E$4{@r zCVM`Bc7VxsC&Osy@(!lm-j6f24F9E0*B|pSQ%u%6t9*$9zAA6t@uL6=9lgRH^2<^J zQ)}7H@ts+V&G2}N3WsRHXuL+LFc0?`yVh!&RY;0LXv`wqpn{6l-N-RN(#G|#s9&tw zJP(;s`{j?sIRQfZ5n${CVa$WJr&+?JU`VVVs#U^QZFV3q|A#hm@UB+};G%*LroeDf z({}eDB!5&3>#oXa$*P5Ak{?|Fgj&`!6%)Sb(dKR?ae0o-B~(DLHPs)UHd+k0m^uKG z^!*CIImcT~-{Div09MGtsGog>kgCDEZb^xebafs*n-|Bm5lD_hck+O3$UJCzrhxoK zSM{bbZ~g7?b#$0Qsr7Erj6TQGgGY@v?> ))DhyeqEP zalm%)zNXBtFD8naUkSDy(Y;3doU%L}z9MKNOC?1oQ@=NjFN#4dZ(Nfq)doYa#QyYw zxuiL`OqWYgY6h>!^0c_NcSovXNK28ESft(&TK$5s*=z`XBT! 2()QQNgpwN_%{SjN3+ovp8< zPz8UrR4sI7g|&{N9{^rab{z3DhHR^H@qi+hm8XeXpgjd2Iz1^SIVg {K(;JKD8*>^Cv@Ah`%`Re z36kt%_otrs?HUYr7dE^*N2w~1LkFI0O_*N20jf-GFY_lSM*z!levMH{Te>)~8ECdm zJi111Euz>5Oj&3Jd6l|!P4tGXfw@Ov<;nM+>`yG2V|`p}V#ui0)~ptE;K1U2-oO#0 z29B4 jt1x%P#C@%s-)9)O`DcPO)(EBgom@3TXo%g iSi}EEKoDB3PH3D_}qr{ z_R(D4=xO>1dE3Hq($aTA@Wu>7V$XV_@xXkhwWnhFA!jeIfJ>QQ>)yBZdRHZw?LPjz z=2fGDh+#`*5bId})=tg7e{`E@n->k8a@B&K&$9^Ba>er$p=jqoyv|h|2cN51Tncp( zNLuY5^c$ev-ywUnFGb7dDWQk{jOjh;6aWS^947-MN(W}daiYuhBZROc4@SwM6}*J$ za*Ce5^hZ}4BzXjJDScz46fIn{wq;K0V19T_rPMrcEuu#g@cz>Eh6=I^?EXv}t+PyA zo^a%}4|@6*&_m9|-f}Q1Pgs~=A8&gsIk=b!5sRdHBKcnDO`Y;rw44?qWyp -tE;QNpk-i >U3@SN9(0i#EYvAW)3JTh4 z)Nf#!QZ4QoMT@Y&PU4o#NvWfv8>FWxv;Cf*j T)M7 _OqP@05F6>n*t!8d$&vCZ 41AH-e zd9zeQcRNn1ren=$-s3^3bVllnadlQ3w?zCciCE-1DZOUIv9N4)jA%K}Z^3u-OkN># z%1kR+w~BIG^AGdpqGF^e8k^w5p?bZPWhK4?aJcEuZw~_Em~qSB>~3t~8(%b3m2+cE z0JOGcQon+j#_*Yjp380>Rb8JB>W{43hts{IY9RfX3ipl4{djJz{IGK}Ptq0%ba=0k zrbe?umMlo49!h%Vu@UOZuX8!1dU|QdIt#6sbd2}a@*^hMJ6QI5$Z;qMbZsxPsR2IX zjZd$0jnhFY_wWA;Ku_C{F{(`oUD!cr>a8lgMQB-FMx+z^kkYplcUn4ve%emb83TVO z6*LQjH}KdbwC_jWyum!~F-S{zaW7@(U85hiP3exEi;&XchK#{f)4+i}sVaOtsmbV! z_`+fq@6?MnVeko#>VOeJ(pqy%C}UnA%-&&t nZ`k7BX@B0eNTM**w)x>CoB zS`1JdqBqj7GnndHrz@ecMo|?fqRL~aAC7mw7BA1K3o@=Q&1`2J{-Y3Yz>483={Pmv zE|q0vOCKI48NFLf(srR4 3pBZQxV>LB3W#`O5+teY1hAJ?WNh3e( zV9U)M1)_#ifVh}4tBnas a-(W_$PFna2*hwCb4W`dDm-PR|_gX8R0ibQ>vO|x}At!nARjoj}!t-OEH8a zjy9=+DE+BUp(Ss!TXTlDyH#|xUyc8c_(!MINZ!cl0oIT4(C# pk%rIXkX&RaIBdT9oumykiec<^4)p2caBBoFdZT%;jaKUaclgb%OK0?em%VXF` zLDWG4%DUs)fX~9`!L{dv`Cn`AXNi}<939jR%tT(H?w7@~z`!B3g ;`eg?U>wVbIZ0H@WU;dT;^?m|W%bwg zYY%o*u{Hu@Sij=_rfhUQ7niCQn*%iyBV^)uVHcv>-?IC4e+A#*qek=`AKkXtd1Et< zv!AZ=pE6QOf83gW^_{@OLt~^ovyWL%67Wgy-O4lOU?NXUAx$|J2cpWa@?N1OT+cR2 zqA@9Z4d0)%^A8ESqI)j$uSdApzx*r{%~DR&dYq&S3^#WC)zKX$8A{8$JoI$FFiw0= zCAV4ht4FFQZQ^9JvS9_MZl}wBP}18vAhr;#cWxy6eA{9DUi@*-KSz@Gt1ts}PJg<+ zVLG;BW1_eF3nTr)7{Myrs5UAK{GbAU$j<~nkQp+Sv(LjRJ6q3ctj;r78~OIVET)}i z7vUSxBB}w!YnHOGQDVC;s*}6YCmFhErK8*8o*8nBp-oOX91?Z9Bf07WW+a_y9wqH0 zq|O#(^AV}_T@QIW?nu%?O2Ex4Kh6hdnohQEc-?D8jjb8I$T6Bag-b!V-<0ay zw+kl-bmoKXmuhwsQZ|=mvt)0V_#WKyBDNHt(8rV}pX@35)_LJW_T1@`;6c8>^DHco zjda;+Lxs|5Y4Mk)1-F^~f>nNgjX^p01?`rH%S1(N1_Ra7A4BFp=G`upgep(O9=tU* z7q6Y`qIPDZyV!Z?slw1x$E-8u$bFAbKB9JnpDe}E%0m lP18)Q z&twHY-5sKTz5&KJ~)#?|eIJBfs|g0moF_ zs*ZS3e3kqy(<4^s^7Ar?Z?}h@KK*tKcAb}y>(EfIBIeL=Z-`*Y(12{!C+tNpaDUZP zyuq8i(3Y lw^!U(s~xg)-}8bE|Ej%U zI+SgN$P9yU9WhI>;lB>`T#nX$?aB&n=pe?2L7E|E;inH}$XkcoJ9~ArazrK0ZjEWP z*W3oy{Bc96VN#OzQJ^XA#+frq6s#2@zKu^c*x=ng?bq=_X!*iY>8iPbpa%-uoBhY0 zk6g))EDksm_cvPpnqec|8-1`S-u_78sr~ g`7!CJ9~d?DdS;FDg}=K2`Xz^>nTE{g+2tC+U8VcWbe{PSJuMCi>z{!` zxoOma!?JW=yWT=~#clYd>iTE*s`e}^VpyS9%pXG}_f)^dGiq4 1hRzCNp vM9?(==s`|@hP=^F!1KEA8gjr8Gnl4}*&E~J!u8XfNi z^UN(9>H8iIB%M<$T?$Vtf`=+qnBIII_cAmXuD93UZm)8o;Qb%1v8wO{FNk@97hW)F zRfci=KUcW$mz6Kh0XKN3I4GxPV8>i%igVXWfZ5)2U6}DQC)>S+?`kWCQv`((jbplR z=vuy|(?*u|G3PR)PtufYf$OEw$}(; x6=x8+D`I3W2#| z`~$Pboz@+;ZOp!JYA 9)@=ZO($p>%q}V#t_C zls{YFn~(IDXmkBYwPuHyx6X4BcDhQ%!y^-dJ;@t8-00+Stba<9 sbw_O8bTc$GTS~l^&Dzxm4K! z GkYAKRW^`#L(@ymfhA|f{o^-v0WY p7j%6;TV!1F(;G+Xrghh}6qi!6^ LUgF&We za4Zbz7cpR8XppfbILDkm&T5nlGv`9!J4`yFcSm0Fhu(7!y8A7yyy{9RmH$Bh3#x3} zu@gcrc;D+APphU1UxT-50%7(b?V67!>{pe1Tn1EWc^diZX$9~8q9>4|dXc@IXJnM2 z&a#M+V|O-U3YkDVFI1TLR8?2oK>M2szag*w>RTm1P8?jLE G(#`y(;YN+?PQaTUFX8{hA$(u_Bq)=L;%12QVU8s|*pgWSb8|0E0T82PStz zh*yMYw;pMtDh~r^8QVvcIk4UV?^s*P-E9gfDw%G!@^9BQJcARbO1*vjnhZ?hf!0&g z063h4XU$(WjyMSi@$Yt^onJL~l89jaX-U&pLcf%6#9aq5AnOFO?9`as?FQ6;HKgdD z>DG6yxR7Y26L#6Ni87`_Nz=;jtR9%(HWNG|&t=RG4Q_@pWd={Wu-4C-z~<>H8~1jA z7`;4edK`DJkU8o~vVFT)wNW}fDYLOY(H|cg+F9|o$mUmwj&x9{<#hf0EghqU9nV$0 z&d&6py3wlc39=!=5WGF@#>&Ob692a*lA?a5U$SHD)v%GZEtnfEC#t?LIb{kou}h=X zg1GefVCHC+Y7uW op4f0F z#c#a(U@B=G9BO5n2;~vIwST7w^3*<)T8yLhbVTN7`#;Pbd-)63+ULExP&EhD3Qnk; zI)-St`S%;mh%mMgZ=boe;dxx$ZBd4d{)ro;H!8o3G4~czuP9yWVJWYAwUaSb&}6 tSNPt5dHa_Kb)ul}o6G_JhEl^!%rcvf}n|uNT2PcC>uReN8@T zDiqn-g~e5$<98()7VCX^;on7A1>>2gP_Lgzj>+K3F;xpCq7rH{&~rRl2ae{8kPhen zlXxRhmZ(y(Vb70F5c@B&-v6T#=^(c&M^*d4gYT~{|i>Vb}CQh !)f>Eq!J0{7^n+>{huP|M5IW!jxIc-`OX8uY$BPiRH@L z-h??FO|rf{CsU<%CVhrkQ#eum_^qFng?!`Mp>7SV`1fypto2_j-|~$8LqlO)CF~ zZnnuePGj!);XCd<#XGd25=G~h*0NFF1LbYkvt0wK-^7Kyzg)ZXi2?D%CCj55;Wu^l z?$uCl->vT3|KBGCeDiAt#d^o~7)M;5+yfEET$9Oo0mCK`*G>#QU1rO 6OksZWZ`U|KR4Y~BEGH1*E7WQdM z+jRVNPtolthx1F_V#QoabJ@&v;FKl9;1)@(gax1=ToqkLzwUMoohrE+8`+!u2G? zj5(iUpw5h&cPuIaM@Jc?*SA#R#Sk~(bdM`^kH+Z-`#yWkNcB8XomaVK<&(o;1h^Xn zE&P96y#-X2UGqMC=#mhmK|l%VZUh8TKuWs1yHmOwJxHe@(%pw{1PSSGP&%aRzwvpV z_xr7nwT|n!V6A)Zz4y#qGjq-C;r$kFSF`n}_odjraxzn`q5o&;%y|N!`QM|Eym*9n z&40DsUnMNTdv-+rNhGKc*}{@fk;F7SOUz}WxS8P-($F8gvNyl+kwcZoO+iFIyorc> zw$CkaAwBH=p?+P8{r2+-LEYxvrCVMw-BeIqFD&pZS9mvxPNo4WBIEIE^8$9R_tII( z)6iF6ir#nN|47jWTJ2t>3%T?rY^y_QO3YkY*AtnAk|Ql9`YSu3G%@_%GJy}`>{s$+ zA=NKi4ab&wh-q(QO>hY{d;^E3sFj!JdSa=np8I^brRs%{gND1IBU@X(Sge?Lau9vz z#B(p1j`$25yn}g{ot7OGENOW%RLs=>^)ft&Li3z2oWa?8rU=*}4tTnrS0l5Uu4)S1 zmB$GS8>$se_NVI$S{_f)^+j7Cm4zI?DL`K%j6f~ ~4R0SIu{7l>zGey9W$E2{~Msx$m(rAElPz$H^Te&QpHl z3V6$Q-pjMu=RF5f?&wf#-=Pfb|Hw2CFF1l|bVKmoKM#p6_OulW%O(^NqQ9ju&QDSQ zWhSCD_Jb_=AW__oJGqWnqXmY1dpzRwXsN7ky2_UGm~4XiXxQO)`)0vvBMQe4$8ZL3 z)%nJuhg4F=Q&BrUBk6woAWB2)NM&g0urnl5EKKQ^&HR8Lu`|0lQ0c;b3u&M5&PSh| zqfy4aV5ffPEbOB19NRY5or9ihW=$AgM{Gcg`uuD9Lw(?nRY=BZ6LT0OGScb zDtOr1%w2?iY0&}I$PFP!5tqKwUs-m%y;AIe^7oLDE8QfG^~Rr(t#v|`QxT gQfCvy C+W_dR(pR=6 zVHV1jHo2_YT4^C749%7ZcnJL=ncr1SzFDoGz{lQ@Zx);&ZxwlrTl(xb4I-?wU0MfU zO1>wkm-{ol(Ioq-l*6CR7Avq$13yy)qtO22t*TIQh1VX!M9J0kT4cfc hs4PqxmH$c zbu`DHP1n@yvQ)iv1yS)2__S2J^!ikJZ@38!0>xqsstk94eY({$DC%k(i*EYe1dr*K zbRG+?(o{UB9Sn@irZiaukTmVLRK@*JzWZTMd#aHjhn;z4XyJcp-tVu?ai`ZpU&v!n zwUm^y4_5;AlDRN2xza}?h7Q3!<@dh6j4yKy)m YrjsU@<`h&&QBDCw@H7 zc=C3sb!RqPutCeIH~Zy3q$JlJ?_U+?zW0Hb zDO~|H!GQq1g`>)Sk&YDquvVkqA#lbZM}R4B`jN!-5AuMpDH+tqn|`IA%qS-2Z-oC- zxc9Wq$McIhC4pbgIw$Wp6~?0l49pcuV{KH$E<_56AvO~>N#d4F&7~x|?zcYn%d<&p z_1tbm?fqxJ^0&XI*B+oM+p5^;zw`ENIrq(?zc~q^@kxDL6mo7yI(LrUYY8duj2D =E$O8!ogBabnSGp{OQPH#bovxv()#s^wCGb>(a%I zXtI(O-V^W+uhk2(QDr+M2+=m%#AG560w*UBxxfkNGi5pKzC_gD{De-@DF;HeZEfW; z_CopDz)Pw&AMn!AkA3j-Q Os}PD6zD#jgtv=t z3{3B*fFbHX2j-t8QBFm14BRqQ6veKm4Iu{3 pvMgNMhp+{kav3BYgyFKJfWl1(ly3H*#?JZwD?dIsx)R+hQmyzC zN|vNw4~_jJTW;I*>({@8-8MX!t!%~5$>JYrLg|zgwx62AT^_X7Q36ACxIU QZU`oy|Ql_S|`;lmDRqk_rXs3uKWCk0csXZM~jRQ z<)!j8x--5}!FY&mqc7&kxrdt$te132BxngaQ{9FDh*xN|{bevD1(L1FQrMHrr*Fz( zpGGT+mSuBuZV hHqa}*5gmrI-cl6W_3NehY`U_Y6&4UM5KX0FtMckx?t)ZBUy-b@j4(@^ zW*sXFDQ_I9aYrm{EKLw%4krd}J4{oU5= ;>%{j!t7zLzd_AzOo5?PjZ~KZdh1Cb{pG=(zKZ*C@$^T$ z#@gvO2GV6IY#Rprt|xaNy$@p0Je Y%w!6FAJ(K3lFewsKGNs){`lZFB z)!t&_v9T#1OG62W`J+p_d;M2BY3Y)WqP`)P)YJ{+nxJh7XZJ><(#OQa=m>IgR5L&g z-nN|5yh74-118edrmz)GCV`Tbw%gybxCmpcoX pHKNjs4j@& z_4)3gG@q$+hT}T`SMF3MUe)3Ud-J9%w5PW$M#_WBQHV6-8<3{(P#|K28plNn=>>mj zJ0f&d^fUucjHx0Mj?Ypz-AL{j1JM$U7rJ ub6TRN9&765 z|2SW%7){0Ah3zcZnkzmLEKQ7>d}<4l0$n>bhi8nD@)faha6p`wLxtfsLoea#jiuA+ z(m*jHD;UUfma=@S^7~(H9Rjq#pk1xzMz7J@2z`UxzZRtW(D?B`7DS>G`u+nvhJD%% z#)14m>)~C>Vb|~JEJL=7ByJhv7QGBM6Jv51-5ZKoUZ1_iqay^xu)v=gZN|gZ Y0QbnE1PraPuCi#YXA8l}_R?A$N wN=3@a9-NYXW(b3;|Z>g>xaEB zB>X`6Cm%y;JK!@|lc*g&HlAmB`wcsj{zo5k5JG8WgQebSf<>$bDv%}AOz`GpcT5$S zpz_FjP3@HrPuk)xw@^sM!iaqyLo}mCsFz!+KB)6?{;R!XKzrZ&qoZ>_#0L>3zT^|N z;LEWoD27JgSRpA8UK-U29{1Xog^?dsPCtgu1jMbdnS@BkYjnn=F*kVaTr6jg?p+HS z`Ox&=`WwZB-3r^MBCSYuxVwUEWW1f24vr>m@fZU*Ca&8^v;0pHh(bIjQc_P4AU0rC z%&~-%5@P g{47reifUlu+nB$X`umFYxBrVsmJks*Cn-jOqU^?C)y4dr# zB({<1Pl6sH)1QRUcjCV=>a8HnBBLOFtaKiuC+KMId=TyWf-QNx(yMQR)_@o6ON|`P zqy;8zHyrG8OW@s23}oCoISU5@;1`MMr}FpD{#lLJ&%x+T!`FeqDc|EHKr&H~EQ85l zPz87dG $vcrH!D zjB<`M_A$}?B~!IrMQ-@T#0h{c8DC2h5Xt@g-ie(atG*q(iuDi%uMoKCRf4x`4Pge3 z-aKz@`!xF10~CDD72X33$rA;)0b3hT(Oh7LfoWpaV8aMLWj2HKPX( ngDh|N zKlJha58FoAlU4s5BejE_sHbs?WV_^v)hm+MK+T9MF~AAY#oOlY&2>Cs0|IO?ZGD9> zOnQ}Zcg7%(I0D5s)%w!;9rEvL 6+o-Bld4f(6I?wRpyrm_=K0Z>1Q^>1!@ z8{fca@Acn4pZhZg_Zm#@*uL7{q8WTgaFaT!xbCgP-c5YF2LEw(K1XW6cGj(q7`Q+_ z+Hr~J9nc@`xqQoc_$-HT`F+(XgzL=&ezoApa4jLi X>F;U1*y}n~9(Uv|Z$-5b8&QYVd=}RIa#%$`J zRE`^G9v-hGwUIE#C2Bd@R=Tt&g|7O+0L+TKxr4+ (5a1uy z{|#tm{}oTfR1AEH=08Q{QxQ7?qL+ThE`KH{#oK!;JK}X)*fxY)zpt-PPr$Ha$@VBT zap9p@wYzzR!-v4H?m9&DlYD#F?}I0V7m)a{|DKh}Gi>L8g*qKOLQP^7rDr23bW)t8 zNJl=ljV50dd8Z{7#_f{oD^_{5ic$SmZgcOe3A_QN$QY->ID2)|c@^QK-(4){K~WmM z>svxMaLAo+iF@Pk$lRvl8nFk@IPS6FQr#C?31Ob09}jotFj%0Y*Om-RZvsBA%mwa@ ztBk4K3px(>mE@eq>=I`1&H7qXLidAhcf47>#IZ!^T(nQb>VhdKE?YFm3YnjU1ddSa zXX07DuHJXW08Y?}328GGLdiOW3DGA6rz-s>;tqp(x3q(w^1-~Ba|J*#&jza&@G$Q& zC({IGe)5;viZHuU)D^%Jzq7%3zj!)ah9&pMDlixy)ZqWrnUFoO1T4PPl|)^m`AN90 ztMcU%X? mO;+6#5^PbY$(kHN JxK-JN2i}sN{ zH#OL=fvC`^fkG2SMRSg!T+jKs+tZ63tI_?PUvuWzcR~ss#Y`?WyF=+8qTcHa>`xpc zqh+zl7t_?PW7Q1~&1VQ!x7ep1)Vl=Dddkc6r7FcnwZQCJg;FMky|PT)#IC_b0xq#1 z*_S5gDoIa)8JIqJjUn>+;2D5grkd;L=#<}Lu5d)QkRh`GT>GJ^xKv{P>$*!s?JHm1 zphFqhE-P^i^K#8L%eGALv(hYY3aAAVl<4cTfvV#8qBm#3qsWLojy>ML`y4sABS{G}~GHiZR z*Beaq|LlZ%B!M~>|AT9XQ}4plnhA_UYw!Kk5g&Sxa3FkD7QHBN0q4QBPlQYAIH>;0 zaarMs0E+~cQoD`gBP#{~8@z__7AtVU5j%PBg6mg+zi0&q0U{uz=(>FR$4`thAkvX8 zC!4`gN~*Yp@a_>en`U*LzE-!gF#mrJo~C+tv9HwyVsg^*Y-$xDnpiB3CWIbjNwHrt zlr7#@d<;~Kxb UbO;e0rshhu zOZ~elR*%!1Xr~AT8Zto%+`s@k?T3&Muno;%8$`e5{2iYgZy=to#gwnV z0pef`v9LYl-G$^3=gfZtfNGL 40$>YS zzfAJ0WFXtuQe2be>(TdA!Z%?}SECdOhR#Bpm^Gzh#`Em Jb?_)T8kj zAjLuor#xbo^+4e%s5OY NC5mbGQCkpJjwyV>WX~--cV@w=%KJw2@bttLaK5Y({yEO zTdos00Y7TT L=gy$2fDk3;=CDq2#v!Jak?oie3i=#sl{}`kr3+IH^g%Lnfkv{j`pS z7FE|0RK }1MjYg}b=^UD_y5_W?>UM))vnz-B7ui0zPKXK}oO5>&JvIgYf$(vTA?)O_ ziU|jE6Oo%%2H5v*T7Q|qHkuWw9pEu%*N6yr8A1NWj}i>v2uR?63v#^T>%K{@s;CwF z%dG7+=c@lc8WHGW O!xN_Pl`mYqB5OCGV#y1xvhLe+qE#@S 6nFZj|UxSrq zev>&8V1##he?s6&zmX-&oa?`D*#$U#VP+Y7A+$Ckqe%*D&M`M<6mIKv_wN03_jfb( z6;q3qf=w;(mR2)5rZ2+$9*>xVvUet~8if!o*7wI1B2G0uNpl=^Q $CnONo=i%p&^S9(x&q4oBNn6wi?9>w~$cr?*m`zi$^dFqi8M1d}+U#A_= zMDm%pEZV+iK7Bs#5(uE~-vijW(tQWDtghuC&Zu&YouB1*WX +D{C8LQ z&tCpmi$+Lx=ylU^S9IEyo;S5GCdy-WVaG7fIc&X+5eUsx!Ar9#=n}}L#n@sdiX7kp zH`>)`sAM1DhsI2RDAv`=lN&1QBBQ(c3|JvKO{LG-MzF`4J!ff TTCh#?ShuOhn=gmvm(=KybzmJhL2pd<<&MLfe@V9o-LuSM2y!GbO$;1x9%_DEf~t z-R~kZC_H7XeQ$cZVb|D^Ahbl(xwigs93}+xWPr17cWAanu;i;7KQqh&4=qbZ%bzWV zBI_n8g-h42U01lBpAOP%oo{rC^fqL#i|nzVG!svK y4VIfD?sMzEQAKp`I{1x6R!G; z(3J`w8;M075Wc;Zw++L8=7hqb#2~p@l0|%d1J@=@YI!^@(ke1G0@-+kHw+=$kaquM z#55v|aoaFuii%9jdvX2 ADlx9n 534Lij+7Vif3mt!Yt zc9H!WtqZ bX)Aw5*Slz#?#K|B~!*QG!4i!2LndbgkF3 zX@^}YIIHTrPMFB_Z{0W!VrI2m6V G nQ(~|oOj8&NS2j(oJiiiMWOQ&)AXC;3H}Lw&w92V}M5vt= zRR(F;&>*6M7b ~}cx7Vz+ vnbE(wi@?u_2-u4~6*JkY=@wOdluBmOEJx*A?7F>xwn> z+*LLszI(_W0bb{12%W6*RHavATRtS7^*CkTw+@FQ6W{K`x ^iZFFyEgB8{lZ3FeV(F5o3U{ zm!crZj=$j zWToIK|Gr~$3HAurZ3NUuYaiuX_eAV4YQ=r|g+hX;(W0nfUYo%>99ms>FkPf-*dR`y z45?nsAvI*$@STpn@RZ+D-xnk!h@X&kYa2=yxpv8Na|uI%6ALOt6n06j$}`u32a39+ z0Z=UWqu~8+Nj1&o5^Sr^ kG@x6p*lQPx`XzcM(%U0rgeB4b42KewEot6k!$`Y zxlGAi?6vUj#|Quv@FF{T%i+-KevT(XRU7+3nQQ_XYpf%Xy>4Q*Qn2@;Qgwt(J^B?T zw2j&i`H=BZy7P_2U_N>ZWI2TyBn*f+M7a2WFS8nGd839w1RxL`EN8E6rWAzXfJn7$;*L z#IbOf_26m>g|N_j7YCQ)vDM{i9e?{qshT%Gj0{_cJ+-vmIZDKg4{ZTdkq!Rd#lBUL zmF% gs=PGhg08?fHyIVP6X-i@{+ z?|EmjHh`OPGnrVQkI-gmwGCfgw9?Nn+yvmGzOl5*zH5Ii`qRTZP(Vj)aC`{}obf>q zvRM!+?(l7pma(8w=^n#+E#L8nFiQ8Z%)QHZe=gXdM+i2Pr6R(_=7C9&s$GrDG~yvC zMEka@eP5EJIydH4c+D{ B;`tDsf zvGdIAFJbBpItVpE%t!fko0?_|PSDw~(;v;hHP>E$*Pv8?nWI+I$UYS G+rNU0hy!@{E+Muy;i&(hd0XDr z=8u*W%2(Ay8B7gZ--{mzTI~`DMK2ithw9OQ6F^&e$cK@;2C|0u_v9u_6ikpnCzBnn zSN>wIV9~Kc4S>0fmK~Qje;vO&iiJQJF9~zy1ulv}S(*;64PU9yu+&DoSm;q(6h%s! zvw0@--=+? *)QHQ{X zhEI@S*6K|jkK>rnp2(Bp;lF^Zx6wd#7-}~Yh1o(_Do&Fm_|U)_4J8j1I04@PAupAJ zhm3H5ShGt1cNn9M8C{uA&hw=YE`Y>r?TMo}mZwEg`G=8GXv_O%MdP3%v`!ax-+a$G zm%nW@lTMN`$hDfH_0W33nY~TTCNt)nBlw=}W06>{6kmDQMvwpCa;yh@GQEHAIC@H> zO%DYpub~|h1jfv#&YtMH0MRzw(SE#DDtgj@o2FfNq5e;=dI&hWM#?I0=NM|!JdT35 zX*)M2>|`+HuO@h6dlz33=00MH#8h;hYGDC`mVsRQsbCmkoS_9XObOkTq+fld0u*?O zjbf~w>@TguwGj1f1&%$rAAyjNS{1) 3|Y>FnKI{3SL$vcCV$u=y<5M3cPr20h4z(LDG@VQmM0iT z-Xm7{le0rM%+9DPImFU#M#m6;0FVUf4$N585jwfw1@}27BtGd|Uv=_guJK06daO!j zHM1v81RS`_xWmMxrQICjXTKgNgCX0oV?V%PEsxx5ms&J}gD7wWKw~_Qf^EAK3_|E` zrM_u!$0+t&E&b}VT2geL|I_&D(r}nw zqg?81eRpI!bVc~!zs|nF#$RUbHjqbyKrC&QHzvfsV4Ip^8BV{bV0xd-bp=60v`SXP z=g~G5*No7B|BP?T?$xTDh#zgaH%tDXonx?H0G5V={o ZM3 <=oy9<;0MR3fDo^F0ECz@lO?;6gMv@G<* zFL-l2^ra0plfxo9S1QJqWa9WWJr~MBEF457rMCV{Yk3wPV4p?5w*Tqif4JVAlF{G& zok3RjzDGOPP)yOJf1J{!Ro0F7*YB4%l4s!@{Cw@1FNHMxfM|dyU=pPvl4r;aL)cjh z08(%nlGqa-oxL?~~Ta$}U&lx27<@-qg{xq{Nf$m7wC9_#_T(P78%E?`}%r^yoj1 z^mxhW`UpW(LYwdHms#Vg!#g5~0{0v&cO;J#;)fnpp|tQ#EXrwEh>>7CNC6-3*In?B zOG3ST(^W0q`>Oz)W9xGi@6 |7m_CCO)ru4t#0On z+kB4?_gWx{u}-wq#uI3S`BIo;vd!^#cT`Os-^wLj46Dbzw)8ZH`BN73?EYG1_v31W z;g2T@yv{+tS}0=1vOnXKZBc}pl6j%;6n3!rZKl-TB- -EC!w#NVjsIr}3Ve zFQQdW90t!<$E_|Nf9ixv i^vz8XKz6z&Kn%#u?aeAD6I*k+)~ z$L5^ML#9p{mqgSjgZkFeE|S#B+{3q+J$9J1Z;*^g0{S@RH7Qd;R_dP0m^C(%{<+~* zA%ab$KTkF{%ZN2O%H6)AO(ikkFal(}yNrk5;&L%>6~vDCSt@Rw7b`u4dcQK}$sdae zeG}fu>}~YC83&H0TUyh}&bRq_T}ulA8uA~;x3pcz(7<>fiP8f2Y^l-vaXCvy%Z1~M zv)P8+;wqp3y5UBp`6hLHnSbC(Hp2COBTLXa*2E5td=fajj;h-LT+t?e(*}@ti8;cI z;x_R3c{jT2RA>U2k5bj$3D0e`Z}qq0k=8_oSn?2DLCJ+Hb&rB+#&ul?um7*){bxK2 z;4)VTWFl+TSiB(1s7`U6bJ&&j&yPZ>lHW=4NM%JBiB{WIr`?2wHU-pmt->X=!mf;i zU3D{0b8W_$17p30Qa?Bs{JPlxu(?<>>U(MGdm3JnFS}kMFr$}IW#aacA%VY0jsOr; zN~(E^?qm`21D`l0Ge~YHoHH )sQgilp5jn6S}am4mX{}H(hf}X zf{ie!d8BeMZm3zLBvh%c8Vcxt!>Eo!AhDY~rmOF8=<`V1f`e?YhtisnO|K2g0!s)N z0Acy&`SRm^*m8bV{ )Njehw$XmJ1@ zVb -B znkk(>Vg2+o2$5d)!W#_< >P#o{hqmXsgR6pVD&el~l3tTFx*V zwftxtVp@xY);{ER2E=(e*?$5O-KZ%GqP2Bd;rK(g+e=5WOdj&X)XClvdOjq#<5KX@ zt&u AA1l-*6T}6244r`F!cF(f9qI-DSYYXCi*2*t1|(S3Tvl7#KU`f&Eg`=Ng|l zWf!z(F>!?~xJcAKrm$sV6w;8~PU`qN9o6&N9ydRbteA&5-d_Ile_Vhkl2Oeigjh1D z)U?PPYZ>CUg&^;aP5xQx@52n6nJp(Ng8|#8<0v#u;Vc(mjYPtyK z(SA2KQ*PAiU3Pnw|6zc>A`PB3IG+If{`0BeRG1Ywr9Lqr)$C6qNwwKjzoz%$`d4!| zPt7itFw5FSV4aC=S;?H~?41;;lJl+dpgAqzL)m_Io11gN`&k8auFV#Z$7kDtQn7q^ zf$| -3v^9VG!$ m*2qtvkAu2os=vcUWF10{xM7%vME(jrrAnZG5SZ4+QomiR;ZDn z(9W@QoNJS(Tm=TC3V}kyOBR{C*{8VX0-)-13mO8d1NXLG2cge%%7Y$n1x`YQ>$Ekn zRF4_tzHl6;Gs5UHbO*!D%E%Hu;*O)-?t870qgqdXd#Sy>U*dIARvKrXQvRoXYLg*h zWh3P~l%Gf~ef;2@U-%`KvSqn!okeipave7aePKdQ!F``Hd^Llm_U^(lPC8A1IIr&3 z59kNZ`=9i#W&=Lq^nsW->pF8mWTEH`0ogvoNQM3*0U!JmX2DQoOc5@RjC2G@{>RAd z{z!r-5a9KIRE=~WsoJLU3;lzxF^pT0{8pyC@yUIgxemOO#aoIpZniD73YJ?8=e!ju zyv8>D&2l5DzZ_oc0Y2jtMxh7Np5{pfb3q`(Bd%G3{{uROrMml(fk?04JKzd{-MY3Z z!coV&BvdiG;0;5cCKHx1a!N`%|6vRM29mG!XSRkEEGI-X7;yK0_LHjJNW~^L(q%|} zrr|`QhuxowFbnCpnJf0IsnEv1E-p54oArEX4%XVJ-HoZ`<&{gj+H2gBr9h-yh`mu; zQ0UtaZr8v5b+_Ykcr7{iTOUgx+r&ljA&7w15^JX&Ui9&p4Av3XQe10u4LmP;QSPgI zjX?XB1e9WNhRYsRTU@q)8)`sR*pGCx;1IbDR~f|(1(fte(*+7sZr)*q&?4zvKp^>m z5)&`ISYJ7w{zuZLy`+SR7)$YLFT=Ds_QMBtJUy$?IK!LaQPC{h1_Sp>ziRfcwwz$B zewek z?XD-khG7BTyID;Z_nVFvA8*|WKXayBB(CR+kcF7 z7u}iGcKC!%)@T5#Jdmt6RfP XuUW^U&5Ht1m92+v*waK%l+*+eIcnU&u2KJ&&0$l FbE*4 ne_C$3q1=Xry~z;V-_>$h8yuVW}ly0R(V>fYaA=h5^3r z08W*CFBugLBw?kwYQf#^5hP#pt&X6!l7D|P@~#8J4FW`g9ds{sVapa`X!X|YNTDm9 z9gNAxT+sA>YsP+QDq;0GU48-fweZES4ZuVN48YezAP5bm!-z> 2s`j z54l)h+E*Rjmeapp5iL6xfO>^KxxcR@jKX5YmWDBJUQgQ~`;H5>+}nJ=lI^8y9`OvE zdlbX{=b}$tqC+4s5-+2*F*@?6?P>>(en|N80}ZNvElmL2`IB0FGFPtnR^_{;ST}1{ zv}ZO~8|^o(KXX~Kpz6a-$rrA@9?dvr`O~Pp#L5w4KlfAMu*bRPXo_G+9Yc^%2Dkb& z9vV{0hz+CDbcH%#`T|7Eft5@WOt;mbj}ULz^2t8SHa*1ujg318a~x4=ZYq161~raA zxvmZ+=jIXG^@rPk|LJnA#VJX~@;U0G zZkob}Eyvb$=}bbGEqx;fH5iTf 3w^BP%AWLM^py`TY7o$-M zvI0gQ5R9VrhStNpKp{@lRa*gN-r<$E`(ub7SK1n!Em*=w6cR?jMxcTD*l0ntr*=uz zpJ|?#z<7gksur7LOQvtMrZ306i&o}-1_a+;o9Kd@Y?vr*WD4d6Ni&$9dB|wj!$l YqFqEX2{1m8)VwJn$scXH&Mw1f&mK eV9IHKd{~}x(==&*0m;eAGAKZ(YtC-z?5`KOnb|1^MQ} T?PJ z4E!to+KwP$Cn#hQR0tJ)A1PjdQ-DEz77&Hz-__(lD6|%9&AG{^3OdYYonij}Ju=mI zsH*D#$GisfUFJ;`l94$lyqe#fJ0`-J{SgUB{mOxU#@ESWP>0pPc)DgU;T21hHWeMD z-eWCStAH?Mz&S4gbO>S?V97UME4kpZ9Tw>Aw7?yxr7|f~ReovvV(YOlYT9uH&G4PQ z;5eXI;5qeI34j9j7h1eoiua8B10{m5yITm1{qSdOvuO%}^U_{T0g15F=X_|)Ya{FW zCjD7}R7}?d9&T-MlrF!xRfn&~`clXO40?I!<$eb8N)JAsUPx*}s%_9v!@sA=zpD^F z*@Mx16B86jSa%%zsl)fc0o&MCZxN|uA_^P;|M}sV(IyDNnDG&wd3}Od3i (9gy#_W$e=6udF?2S-3PqEohb ziU5{76$s @wwR3vwm4d%e~VRILJUC<4a zz_Vo%0qI!%iT;k2exV4}^eBokMYQJ#Bs*iRECgSDKXRJsvvZSy)BrV^y4W(C%?-C& zm<)NQfxZ)sX$cVs-9%liu_s3h=g2@g{4xfEYV+bHLW$uC|6_{0Qh-$2Y#u<@VFo(H zj|#xNmYdJC2(Eb6giYZTDQ5!F=&}(HdoGgs?v@l>!q+ekH~ =%x zb`el!*T#I`ItM+$ct%f_gv%G@b!%bAnZG&hhyHQYg`lV$;J<5-^(|cMXdo?V`~kks z8YL$zh!)|bS=Z5kbr=J?aK_)61~TRkmlx^;g9}o-QXYlSZlyM=z0{!Wdw}H+S|(E@ z2X0~Gs=QX84Td`+fZ-X@PLLSwCjySKsZPa1{U=m`isRrI7d|<)EQ64g{k-Gw;mO?+ z`=$UwRu3SiQ~0S?Tz1?&=o`nq_fbLZ0b-lM!zvVmQ7RC>6`*uC+5P5T`)@*NKeta7 zfQ~-U-%A3<2LZAN$MCdlk(@NU$Hl74qBR6A^A2XH+1G~XrdiWdKPS`SpVIp_Aj)EA zkiVrEpNrXMMmE(J_8`C(2t63!%m7$3|ArT|>_1uF+=-)OUf6zZ_|G0#KRg{G2v(#) zan>o))^IP^&23E_+Hw8ydQxcSW%7cOtNYJ~931GUmgpgyNpR@n;udPK2YXNe{~RgB zlzzYFD<;Y|e5l1rTXnDU!b7#mQDvmK)`WM3%*);ZHNV$k;QYij yMT`ORT=COX _&KxPV z==tT=bLTAjQo@udA5=m=#s`ravo (c8d{ecOQ7^@$1{9fps48!>*zJ&H z*9z16jk0Ig9~iaUV-D-5Z+565eIdY+2u|x#g=4=b6sK`$1Na&a>`%Xk4?tAY!OO-2 zAS4qAUSiv${VC^3VQyls=q}>8q+0e&edRE>-}U4lfAq|5qTjI-iub`2!{#)(b*fq2 zzUk9L=*kcOSt4<(BrBN&{s&3@Bj#bPSDdDqcxhxTz-TmUH{{E9OF{Z#F#JVNW_)a` z_1lTGfkCqe3)UvL)1(FuX_G^w)5?tpcUew`&>~#5CvXG=&$?J7CgNobc7sVD5+J2h zz550O>`7#do KCun0<)NnLmfgd5W$6t1VXY33N z`Oi7uIM_KH1S1hFdB3q(&e^8>l0;Kpt`3ZrJ--u*vix1UHxl_#nnAS6hR{<0^~T@WVE(BxlalsawxvcJ1_H!>4Qqv-0(-ad>qQZ?O1Jc zgy7gh^hJOwQ`%|M=bTb!_p|Y<6EkrOX;^C^fcp9adU#;qcgFo51PY|nAc?(xJX5t0 zUTM2CmfN-h>D-V4&YS_H%x$$OISuZMeb?$>6XcLA%o|H6XN-_MAXQmc76*u$G2NGt zJugS($^a?-zgdGq5P+4BA)Wej0K5rNk6AYE1aaObnyhM1F^Br-UyYGnFBZ`7bpL5S zSilS$e%j*hEzp|+x8r?gU5Ea|(f5mt8dW7B)*vxoR5SD1ag+aRD*&r~2SHVch{D$l zuDbt|`0!_tJ0-m|$f9Gi`z&Y%xKPTy!A{hLa`1n1FX _n>Ji*Wf{+Y4-bV<0rp F3wzWY^FOfhqP+3$l=WvGsVL(GzApip z=NE7`^kLkQjLBqm`i~%m8y)kr4gvEJk}#04%XB%NU7vjpfy7Yp&4>b&A0xodc%0Xd zEvxuOXkj1C9;sbyud#Yy08M_=5HwVMIm~@bZwi7QIc^oM4(L{+UEeSr5-wh+zlDEi z7bz}$xWxn$cWi9bgmF5Ec%zm~TiO^X6d@x712H<&E836!Fm61;F&;)c $7X2d<&SB3VnElw?GjThe*Pl^lKE<*jvme9n@msu oKeLg&*MDcM=Xp2WMOw%8B)ISXQMU6QW)I;&s+l)5|>avc-WVIAxO}Dz8ajR o^T!B5O6lS6)~!$bT!QRR4|njB0DmXV}d<1e)5&U3Oq+uCzDm6zuN z3g<#CM<{tD;HyOOS2C}~Sy;Ls-vA}#T@>~S;^nc2J}K%@f|_s~%Io4u$~ kTOPVDN_Dmy&RItfIA4kPMBzktk$2Xn_*GcWOvZos0JyunIVx)!2R7a|J>pT zAkh@-udLvVn}f!^yqM1u!kTlRG~ejCrX-9V&B@f4oo!hDtQ53iqF=)(6>+^co;F?d zmK$J$FpoI=f#>c8g=dXQ`z9rjbQG=8-p(rjG9(Mv26)?WUKdDV8HyB@tDYb#!USyt zR1et%B)b0F<)vb`Uq{ik2LoxxvbdJw5l13Bfk`VHArI+CkfJXh9_16Vc&1&*DM0Jn zVet8oTKhQXUX `|9G7PAXry4O@^koQO42!L!rx)=ZI~?0-_n=Ku>ArbcKvWGLJnCMSh_4Ku #(N#?|&Rclm mk?2p6)5ygf6JWtU|SDG7t7wWai?Geb}oIkxzEDe z{2ZhlFrygmxWPFOSt~kEB4;za7u>aXXxFo b4# zYM}qi^e#Qc*H7h?{Q(t}KzXz%$S-UkCy|VZSH65Ru3m5b}26jC0k%;b3q1I_OQrX9N3-& }Iaf- >#u< R6=w~~Z|WGW2V_(UJ)_s*|67@S%D=v!4fx3- z0E~0#7+BE^+iR;MzV&WUA!HI88rJ4xl9_m_x95)d#(n*#`+XjgejS+HX@9J^XFT;i zzWxCWR0}NBg|@Uk`{yBzlU_xzhe+-tnUI_X$PX1v$QzCcZcwf5l4Q;wBH+1avXnv# z{(*|3DG+oEA-rY&y{P)wLp!tNu^~9at(Y?5$){@3cxSKY|162*MYsFUT1X5qu`#}k z#)}hoSQO33xgFT@67e%NGH sndQu|55Dz zG9JY9+W@HCu57xs^X^(dw(dt>JfPujpwE*oLcF_x6FoMe7trwpQ3PDrtNRm#@P{10 z6s93=x^ypBVYur-Uv{j9_Y|+3(4Faq8L~!ZeB*9IV>8uSRa=Ve-LF}PuVlo($nueh z)dxCtWLoa`Y#j7rzfRE}2sBo^eGrRJWs&8sgP}ZHRG-g<_KY138fOHOANSISEawcB zt@wlm9k-U6uDw3&z(x`2{3L?O6#C#iZ;D{Z2@C2R(aFVbZYEF&(tnIH*Q61x759ze z#l5mn`c3q_wtViz3+Ic@Kt^#IL$wlo8YS8a(YDsUz}YaHO!5BNt1x=6adS$a_&S|@ zIGw;35QrJb^uBkJE9t&vC)y^o3r0E>dKfVw9kj&Cura$i70~G5{19QM o~T8;VALF;W9xGVrZ1XfUi@e#eSQ-u$Z)6qkG*uBQO98=Ab3_m z#b>)XU54BmO1TzjgHiV`j>S7`vcF#eDaDBEh$=qTEQ7@C#@;X29}s6Z6%a)vFLGa4 zi3}{>%0%{ts2c~u^hkaXpANFeJOyI$FG_pA06(FZmNGT^<|QhM2`Wn1qe9zz756EM z(;Y27@PtgHZA}rY<(bStzm4P7s%`?OP=XY;=*rTO+#)^f zSt36{d=YqYENzqMK7YazlXP1N=CG0RALC@A%F6>}8>3GZg!-xel;m~I>#r=kLXCka z9hpU9D$ATtb8n%<@h`IufA@JfL1t2dYt5z`UlV0$&YWhu97#Dik}3gp=D%5#_H}+E zq0H7KcX5}ciqoVp_^|TaF@3z%{vc(kO9@koKK`q8kww|sSZe-L$d2J~Uv%yA9e&l$ z0RH2BP%zwf`*i~N739IfT)MaKg@jr@l3!N506G<<3@Sh_lqz4_uWD|40>d-Wuq{rE zHYO8EpR35$E1EJQsnYK?8?jTXPuY{W>v~y1*;h9Khwn*Ov9v(i1^c%% -5gvuM_pZmQOG(OMZm6#1k+|vQmzgS#nJ_Z5a3bx+3LT20caz{zcFzG z@&}Iwkg)1AZ0M Fxe%51zx z+$`E?6H{Fz^F}zT3|OmI$R)2fAOmpY^1xSe6i&aRF53-Lt wpU|}OIO7p~B2yEE z+wdn^{1|VV$+346*`m^@I5-`+hQww-_+*VB0uO|q{F!Y(opLkC5( Gq~WmgTR6kDDY8`>HEmlOA&^iK7oKNI}M#RwVKY zn(6ITTp-_$UF;X@w0CPM63@88rfD>Fo S3ogyNY1Lk^XVy=?+Yh98zepq94Y(6>lIqob@gv74Uph?h?{q#~L4>6Z89kXT z`bp>frtbPY+82{a48*1S&L5R49Q5HRxxIHXae?!`wiwf?)gU5qLI^WOr~v)6DE777 z;N+yD#}#?bPh!IlJ2gsdN>)wcBF*)AvQ{j}M%x1I3l(}`hV|3PD;RR`0k1zfov6e? zST|6lM& ofzM~FmYZehBzYP9olx6GQGlFZ24qrnH)Q{iQdQ(xwWt>r|MB;7~EKo z>f{3A6V=Kd{K5L(C5|A>(vJ%vEuOiD3Zvo-3s!D*h0|t-zLkXC)dwMj*pfJr#V=f- z ukO>ifJPsCIDt|+-;|g6Q UFjmBSmYpkQ zBVF%eaPZxf;V6-4*I3e1=*-mS-kens2Qq_iuV5|vy78y1;(7(o+s)tCXM<=uc2hvi z>Lt&HSEb%RCJ_GeZQeU0n9AHM!uHaTIgz-M!!FN!EsCw4D~Z9U?I2{o6SYrJ?AL;7 zWJy|cEgQQ%#J%hbhr&QDQ}|7%FsZ57c)Mm8+>Q|X*vWe>UpooIZ_@Ln`uUZwl3XGA zX}-b5vQ}FGX8y|eUq0IQ94T6ys)`F-tv3&z&cu+K&+r}g#W0=w*cnM14-<;p@D%U} z%5XFCikEokyfTOyBv!(6*D_yl^fn!Kh&PyrzcA;DxLWXfJ`Gt@tb#%=XF()glUk8> z<#9GrQ4C1)?Y+X8!$~7y9B$-7db#tFSME}lxp(hkMZPpmzxb&B<6*uKP-(AvZNh7< z7DW3fR58@rJEN^v3Lc$SVO~j`XLj@$b1z$;efoU#jY+wd4`FKJt^t8`QG~N$bB;-I zhvYg%wD2hr6-n*SLG1W4-~d!1C*I~@GFP3~tUE}EJ?%oZPQyB>Q-}2XV3feDEW=Y6 z9WGdqt!4O)% +w>9pQW hWT6@$=; qQ=V8zD3&1(?Rv9w58=q6|A*mC4ZZ#|;Y&J; t&E z- PY;ZwGd$8!O*qA%gn6Sq~GVyzywcoeH8^ zqe|VuuQScw4TPpY#M`mSC9Enfa#7BjGu1nR-)6$EeOPGIt=4`Z !r82SCl(UejSHG6OCL0dQ}z6U z0|$&^;rx%zAfvn0T{7SNuLctaep`9eyF*M1w2NgGQTKI+JMSA1Lf7%#d;#nA=Kj-V z{;s@^bnGKqw0EHNhJDH^e#KX;QA$mFPCM8cy&a9PB^cKVOn(Ydt#2ctl0Nj*AGA$Z zw 1Cc=_FQ5=&S{`$DT8NJ#=CdPNWE8z6_2zo+E_N<>k6LV PoGzu&-a!hD%b8DnPlsP82=dh@)mQ3< 5Ok*)bI*7wWP=2|(G~B&&>mc4;rL}$^8h`cGt*6`#K7zPKlTX8WUQ$ISSiKG zLpQj&SfRbtc>lHm02ERWD-Bn7L8?~Faw3T66~{f9SS1OEA4g_B)_Jt?0`S<*nk0ur zXHN~JRQPq{(f4&z6E+3&1$*YYrXDbGnB>0JdghnV05FLoEV{rM#lz%z?_^Y&RAn*Z zYua4T=I5DCkQk4BYiikzN5>a{Gi23&McYIXb=!hR(>?dl%m)llUhx+`UYiz6#!7PH zDZx$9Xe1v&7OOlh*m82FlkoyT3yW4``lk9YvO5MrI0I@Tyj|^|uLUe8W3Hd)U+$AK zm3&!DVJPWssww%hDBSS-?}iJ6b(5gEl>7@^_$czhn#r{=_qeDu3M-G{&Zk7=WSU+3 zyExJF;<=GxAcMS9o6ydZfB$OLN>(0!4QN}%BV?~koNN4@%ueBFfjB&nrZ}@)IeoeR zhaL)kASDAz)hT4@fx1mV*Sp)E`)SF1Os9$Um74+7GlRnDH3?A!hQW2#JGMSMcymmH z;0=#zsR!iQU+6&9QR68P z%jkH+_7q^kJdm0Bip8}y-o1e;LZS%c<^<M@FY$iJ*{p!8;p?vyKp$TU?pr@PNwO+iTsKscyM#XXuG)`)c1uia;lc0g-Pd|o z5)MJ qU4R>Zan=S&ygrPA< zHfEyPrxbTINzfgOjuxxlVK(FD2m!+6Qq5gq)wWv^x7drq<-A;6rqJ Q^ug zRiIOo;iFKo%M~x;Acc-kpCtwe`d<>ye-NbLf1{2|nFTKuPS+kM{`7=|ly%KGZ9GkA zM@OCW`RnRFfW me&2lMgL;WK7u1=+C_!W)NPV#<`iVt51-+nem3APGJR^)R{Z{(A9DyBD- zQ!w84D)b!l=oLjcjwAt$lT^Hc5}H}l1hk3>-x;q6Gp0-(j5FQ)6}&{Qp@`D7XPI8# zyL-_BBKCfhTIbj%a1@k9G1=+Wz44rLUGO+HtE22E>hFweWp36jDkyS90pTQE2dmF) zOjTk7D2h6E-c(v1Xi=pB1A8SEGa@7X)CKl$6gAH};9ifay1O`%H_1yuiAHCpqe#gZ zWy$?}0cPP>%G(Dg+;h1{?+9A~P+hv`sN)NEUUMR?5wv}0l*Qh}@Ysj}wP2>B$ vUKOWW+UUAWZ1sB4mtyKzZf6wavCFPR}@?uFPVVbRo z>ucfO&0I4@D+y2Tc6ygbsZ%rQ07TKtfwz@zmi9DEqPi#GFZw|B^uRQ3D5ay$cPumf z3c34C 0cMW9n{z$~Y@^$fs&J5Ed!Wwyfy5*G0R%4Q7XMNW@|DuiVQcGTVINPL> zD+)bhHv3u>!Jf~I`UUsjKUts<{EsLi`{0-ODRK#wEVp 65$)k|-E@qiG^1;_$(;p$#jY;XMCvDV3m(C9V)*+cIx=Beab?lQG z4~k%)DO{BIC;85}WitY&>41!Mb+y}@nreKx)567mu4pqXc(Y2|+85eDe>pon{K}
J4b`AH-EvG9DDhQ_~a8YCaSZr~$x80IE3$v4#pxHIyMMqIC+ z#oI_au6&iYESaFX4PUKiAx`wSDxVdYT(*{zpn1_CORGh~@l|tk`92FIlaGp6=a}-} zOgEu6Djn5qayLaX`UvYQOeW+V{5SN#w+l97`@d?KT<>UA@Ev}|$ls*7KmWNZccMA+ zp#6nqOAR)EETc$%D7p|YI0q{JswQ*4BI#BrxMS^vRPLOaUJuCGmHB$WREU}*IQB~Y z@0vhk3MRvWr~Wa*)pe25(}j enVnNtrax&SDUONbeBHyo~k#+(T2RZImA6&&Xlh>$_Z#HxyL=+)! z$)S!Iv3sUWdkg9P#sb#H=KBLo+xt=GD!acG1l2nF-k<1{oXf7E@T AMO;E@>GBRoOAKlV@m&8D+(V^Z@!C5;qOYYz-hFi!J3CGw;f#{@lL z1Gi*x7wicm9|p7Q&WGhc-@XIgUOuoaQ50@|7pD{PvO!nQrJ$07fjviA1zLP1gX1F7 z^gD~K!@A_oE-7$KEZEIciadEnMqFgC8zI=$^^RRo;K%)4=X=g$#W(f5p-;;sW@pZj z;;PhrRb0=9b~&wa4SB!8uJRr9hoUD0$s-DP`3ZLn?-G8>UQUe>qW`Y1H966HjZseJ z>Zc7cNLXxH5?XikTTf;F`Yf1YrmtUZ-HrEp_Ky>-HPjR{X> vpg*azLC zvmF0%lDok >k4(Z^SSyi~weu&2rFYxSV^b*;U4J%QkjZSPDroc06@J6WE8R&F z(UEM%NU3KIPIdS+A=S2G)UzT9uSfos-Cg 8R z1=^Kw`Fef*O3>R|UOME}C*KHA&U_JG?kJ)5Vw>T(i6M8rzyR(ylm5f87)*M3-s b)UL$0Gb+ DO+ zJdf-{?=Ewp2EEhQD)6Vlg(Y2-l{@9@BkzB3Z)4{ )Bh2iyefly+iZTY8b&l~ z7cu(kE|GJ^gu_3;^gKU1qv6$40)uL42bP_UTc%u`Nr&~~= 6$cs5w<6(q=U9qV?s#IB#6NCJ1*|%RhGr8+feQQtbuE@Ep3}tOb zoqO%xh4P#=;)4e 4#54 zp~UqJ%6=w<%~#M$lql Fyd zBYuh7J5^-Mv$2YDc~?{I>>LUxDkFKg`XUTCJg7WnAR+V#xSU9liJhT26R)Cj%TDs{ zk6wDM1`piNZ_nG!EC_jbC$6pWcsrspp&6r%K}q>RW6bwWHiHNvOsITgsNkK)h?s)1 z>Gl9IfD25KWRWdgVzGBBu$9|9wD<7 X z`&6^c#Yq_TfJqJNF$%jt<`Wdt)709$4ckH38s*7nhiv$Wm7)?CNdCDjWN>@?X`U}V z#YbVRHdLJ#`F%aMcFZb?aYG|+mhEre L9cd(lhlp zvxD8N%;Oq~(XNRgBo^@fytl(;*Vh&nMv3i5Zf2Xidu~%tftihOBB9dUwW36Ijlsxu zUTw_h-CbZE3?K%s9uw{mkIHxZZhWMh^;TK91MJKY{9u2?oF4fV<4PefB$TS8uSb9K zgGy!h8<(IBwuN%X&udtG#I@}0gkyu}DUCKS{P3fo3kZa8_gu_5>HE1 q$YO+!IyMM zm(G=Rs8rJ6W&7;*btZQBMUhkkno`imMSG@JLeY>X`|*7bkXWa5K`B)%ivc^W83vI$ zc)_Hj%_kTo_!+BPpq+#F!9&W#Z}xM5I_jtqNVyZ8b=$~OqQP?uPlvQIsq#|efGKIT z3`LU1*F*1r9@tVGfnUskedKm-@;X`Dx8g8@`}_phT!`K)*wN#|)8xg9qRVU}bcykr zyji_dyA|~#SAC(*=bj&A=EiQxw3j1;S4}!vUf-wcR8%lLeHBrKVocZ^?*IL1=4VPy zztwUY8?|9&(RC?nR6`E>{$oNpCa}WtipJEMZxOu~zCtS9m3=6W<@X5y11S~-7SMHu z+wG85!3&iSi+T)Wb!e0EaSn_nSMM0Zl&^xo+C*4w-VE}KLrj8~VAW`GdX9@J2*#S2 z_Zo>iA5mHIhDcSLk=%@pT|!8E4>=W2$~shbJ*Z*tYIJnK96Nw_fcMfeV)P1DbfUUu zy>BDlPA7^vi_zCd;9!5bN<*cir$w)$yy&+x2|?;K3%_2j@0xwh_(hZihwpO&^jvID ztjuZZ_PE?<&k6(0T58&G;+*ie#oqJIOEsOFtm7}mU%E)FtxAaaiU#j|>}Aw)srQA` zKL9c_om`joEP>mR>DLu1A{*`Lq-`oD&~?x0$kY3>z#D^lsP$Cq$y8usxU>&?_EDWL zP%y4Mc6{={4KG#dIj*pbta8{Fa;0;36rK`uRR1uDY;4%(+Y7zf^o9m7;V6_-dYo|c zWNdZ!T(*|Y_T--Vmt%YCv<|SRiesAJIF`E^tZl@z3v@ZbD_8hP_2_zjn`%i~UA$88 z+EG0g#N9CHJ+2j0$&_MMW72?M^n*abu8Pb_$AZjN9-O3Tg&mQl;9JT$ekY&0>)%r( z>|WxpsHJV67~6`UlUMtC;94b^c!fNv&UK`oEZDGRyHTr{eO|?)t9kJ~Kl-v_Do0=X z_m$$Hy3fN*tSw%{>((L}oHh5>fO=k5x(d9aY85G9U?rhN!Ot7B%@E#XFlG+z+OqtW z1QJ+N7tDkoh5qccH0Ae1C7}~Gi+~)$jWeLGonmNmpav%}u{k&TqNpbHkw;$P2mdD_ zAa_oYas@ag1>_k^U4xSACbG(WD*Den6pbTaWTge0vBA?D%~<;i!es<;wj-r!rDn4x zrqwsn4Xs)>KjSWLUM+g@db@3;T(bl2{OG=?&U~QzQ$vEvVgJ3V%D~^<{+6Ba3+> X=@+N(8U8K~-Rhw$)?ysi&leGgB$%s6^|IeOrJ^WZF~Lne4((U2Av}2z912x>YEnkb~cNUurf= zVfky44%oy9TTSX0VytizSxwIL>MJWr@VH`u-bE?2SXd*Fr$=B@(_)GniLO~36*Ih4 zSIcvs3Q6`wG8E*5c_gHmic}{*jksB3L-Yx#N<#N~j)ZSsJb07Zcxe;dRyohBP^~q) zMQmD}ugF;1g(orfQ*2X6;FZY~Uux*161pSC)=_9axLI 5iHT6|x&T z+Lusp22NcR=#4P`P%^J9QahEh<+cjl^Q%uHr!u()+ |x_J#?K;wLX2lo~;iMUC9q25atx?$3II{4j8ZO49qIduzy^ zay^Iu+;8lw+Uz?V>&es!0lp( e7N 0LK>FQ##c-;va7La>xbDD z{b g?r@Qy$Ld8U4zC(j8 fK-Ae Ehmq+laFbhKYTQCRJJ}WnJZTbdr1yz7Oid*6g_w7%Y$}C)tK8Wz_qQs6 zTbt=6IZ^*=1tpe0$}1{Y@N6H2+w}pxp5EWF#Rqre=M_qWrB}7*GV_Ia0lmZ!1#cJL z4NwufBc0_+>ojsoqNL96K0+;obF^DXaae_7YhrstT#Z)iq{x>GpXhBu2qt^EA0>}9 zj@uB(I3Zglnn1WUQS= 2$tmL*r=+48-Y1k#Z`^^)^J1j2JI9btrW4Gubjs zP{j~tI_I%{iE_HlUkA|bJBq9`Z%>nj%8P^)Yx0xO!{@I?X)Pm5KB`$;@t3#kSE?)T zlf|3*SM-dWToY9;18>1O+?iq@Fj9qIL4dy~bv0#Si|kw8E{FGbLkJJ&R-a=)(?Ec> zHBCZpH_rB}T=RzrvIDR&!v=)X7l!S^miwQK!TrSogf=c=%g m7EIhh95csw(dg z8*Y+%*FV)-b0+m%y 4!-(^i%u4l2_b_}D% z6FNyZ?7UQZu{a_tpLt_n;eL=;U&lTi