From 269203ce43509d5c21c085fcfddb156a0be96762 Mon Sep 17 00:00:00 2001 From: ljc545w Date: Sun, 21 Aug 2022 14:15:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84http=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DWeChatRobot/DWeChatRobot.vcxproj | 3 +- DWeChatRobot/DWeChatRobot.vcxproj.filters | 5 +- DWeChatRobot/DbExecuteSql.cpp | 100 ++++--- DWeChatRobot/DbExecuteSql.h | 14 +- DWeChatRobot/LogMsgInfo.cpp | 117 ++++---- DWeChatRobot/ReceiveMessage.cpp | 1 - DWeChatRobot/base64/README.md | 6 + DWeChatRobot/base64/base64.cpp | 312 ++++++++++++++++++++++ DWeChatRobot/base64/base64.h | 35 +++ DWeChatRobot/base64/pch.h | 1 + DWeChatRobot/pch.cpp | 3 +- DWeChatRobot/wxsocket.cpp | 14 +- DWeChatRobot/wxsocketapi.h | 1 + README.md | 197 +++++++------- Release/socket/SWeChatRobot.dll | Bin 231936 -> 242688 bytes Release/socket/wxDriver.dll | Bin 20480 -> 20480 bytes Release/socket/wxDriver.py | 103 ++++++- Release/socket/wxDriver64.dll | Bin 27648 -> 27648 bytes wxDriver/inject.cpp | 4 +- 19 files changed, 703 insertions(+), 213 deletions(-) create mode 100644 DWeChatRobot/base64/README.md create mode 100644 DWeChatRobot/base64/base64.cpp create mode 100644 DWeChatRobot/base64/base64.h create mode 100644 DWeChatRobot/base64/pch.h diff --git a/DWeChatRobot/DWeChatRobot.vcxproj b/DWeChatRobot/DWeChatRobot.vcxproj index fdd7e9c..287ff4a 100644 --- a/DWeChatRobot/DWeChatRobot.vcxproj +++ b/DWeChatRobot/DWeChatRobot.vcxproj @@ -340,6 +340,7 @@ + @@ -386,4 +387,4 @@ - \ No newline at end of file + diff --git a/DWeChatRobot/DWeChatRobot.vcxproj.filters b/DWeChatRobot/DWeChatRobot.vcxproj.filters index c373ad7..997b5c1 100644 --- a/DWeChatRobot/DWeChatRobot.vcxproj.filters +++ b/DWeChatRobot/DWeChatRobot.vcxproj.filters @@ -338,5 +338,8 @@ 群相关\获取群成员昵称 + + wxsocket + - \ No newline at end of file + diff --git a/DWeChatRobot/DbExecuteSql.cpp b/DWeChatRobot/DbExecuteSql.cpp index cf9f03d..f650488 100644 --- a/DWeChatRobot/DbExecuteSql.cpp +++ b/DWeChatRobot/DbExecuteSql.cpp @@ -1,4 +1,5 @@ #include "pch.h" +#include // sqlite3_callbackָ typedef int (*sqlite3_callback)( @@ -17,10 +18,10 @@ typedef int(__cdecl *Sqlite3_exec)( ); /* -* ⲿʱݵIJṹ -* ptrDbݿ -* ptrSqlsqlĵַ -*/ + * ⲿʱݵIJṹ + * ptrDbݿ + * ptrSqlsqlĵַ + */ #ifndef USE_SOCKET struct executeParams { @@ -30,10 +31,10 @@ struct executeParams #endif /* -* ѯĽṹ -* ColNameֶl_ColName`ColName`ַ -* contentֵֶl_content`content`ַ -*/ + * ѯĽṹ + * ColNameֶl_ColName`ColName`ַ + * contentֵֶl_content`content`ַ + */ struct SQLResultStruct { char *ColName; @@ -44,10 +45,10 @@ struct SQLResultStruct }; /* -* ⲿʱķ -* SQLResultAddr`SQLResult`׳Աַ -* lengthѯ -*/ + * ⲿʱķ + * SQLResultAddr`SQLResult`׳Աַ + * lengthѯ + */ struct executeResult { DWORD SQLResultAddr; @@ -60,8 +61,8 @@ executeResult result = {0}; vector> SQLResult; /* -* ȡݿϢĻص -*/ + * ȡݿϢĻص + */ int GetDbInfo(void *data, int argc, char **argv, char **azColName) { DbInfoStruct *pdata = (DbInfoStruct *)data; @@ -112,8 +113,8 @@ int GetDbInfo(void *data, int argc, char **argv, char **azColName) } /* -* DLLڲѯõĻصֱʾѯô -*/ + * DLLڲѯõĻصֱʾѯô + */ int query(void *data, int argc, char **argv, char **azColName) { for (int i = 0; i < argc; i++) @@ -126,9 +127,9 @@ int query(void *data, int argc, char **argv, char **azColName) } /* -* ⲿʱʹõĻص`SQLResult` -* returnintִгɹ`0`ִʧܷط0ֵ -*/ + * ⲿʱʹõĻص`SQLResult` + * returnintִгɹ`0`ִʧܷط0ֵ + */ int selectdbinfo(void *data, int argc, char **argv, char **azColName) { executeResult *pdata = (executeResult *)data; @@ -159,9 +160,9 @@ int selectdbinfo(void *data, int argc, char **argv, char **azColName) } /* -* ղѯͷڴ -* returnvoid -*/ + * ղѯͷڴ + * returnvoid + */ void ClearResultArray() { if (SQLResult.size() == 0) @@ -190,13 +191,13 @@ void ClearResultArray() } /* -* ִSQLں -* ptrDbݿ -* sqlҪִеSQL -* callbackصַ -* dataݸصIJ -* returnvoid*ִгɹָ룬ִʧܷ`0` -*/ + * ִSQLں + * ptrDbݿ + * sqlҪִеSQL + * callbackصַ + * dataݸصIJ + * returnvoid*ִгɹָ룬ִʧܷ`0` + */ void *ExecuteSQL(DWORD ptrDb, const char *sql, DWORD callback, void *data) { DWORD WeChatWinBase = GetWeChatWinBase(); @@ -209,10 +210,10 @@ void *ExecuteSQL(DWORD ptrDb, const char *sql, DWORD callback, void *data) } /* -* ⲿõִSQLӿ -* lpParameter`executeParams`ͽṹָ -* returnDWORDSQLִгɹ`SQLResult`׳Աַ򷵻0 -*/ + * ⲿõִSQLӿ + * lpParameter`executeParams`ͽṹָ + * returnDWORDSQLִгɹ`SQLResult`׳Աַ򷵻0 + */ #ifndef USE_SOCKET DWORD ExecuteSQLRemote(LPVOID lpParameter) { @@ -316,4 +317,37 @@ int SelectDataRemote(LPVOID lpParameter) } return 0; } +#else +vector> SelectData(DWORD db_hanle, const char *sql) +{ + vector> ret; + ClearResultArray(); + void *status = SelectData(db_hanle, sql, &result); + if (SQLResult.size() == 0) + return ret; + vector index; + for (size_t i = 0; i < SQLResult[0].size(); i++) + index.push_back(SQLResult[0][i].ColName); + ret.push_back(index); + for (auto it : SQLResult) + { + vector item; + for (size_t i = 0; i < it.size(); i++) + { + if (!it[i].isblob) + { + string content(it[i].content); + item.push_back(content); + } + else + { + string b64_str = base64_encode((BYTE *)it[i].content, it[i].l_content); + item.push_back(b64_str); + } + } + ret.push_back(item); + } + ClearResultArray(); + return ret; +} #endif diff --git a/DWeChatRobot/DbExecuteSql.h b/DWeChatRobot/DbExecuteSql.h index be96319..699f8fd 100644 --- a/DWeChatRobot/DbExecuteSql.h +++ b/DWeChatRobot/DbExecuteSql.h @@ -1,12 +1,14 @@ #pragma once -#include +#include -int GetDbInfo(void* data, int argc, char** argv, char** azColName); -int selectdbinfo(void* data, int argc, char** argv, char** azColName); -int query(void* data, int argc, char** argv, char** azColName); +int GetDbInfo(void *data, int argc, char **argv, char **azColName); +int selectdbinfo(void *data, int argc, char **argv, char **azColName); +int query(void *data, int argc, char **argv, char **azColName); #ifndef USE_SOCKET extern "C" __declspec(dllexport) DWORD ExecuteSQLRemote(LPVOID lpParameter); extern "C" __declspec(dllexport) int SelectDataRemote(LPVOID lpParameter); +#else +vector> SelectData(DWORD db_hanle, const char *sql); #endif -void* ExecuteSQL(DWORD ptrDb, const char* sql, DWORD callback, void* data); -void* SelectData(DWORD db, const char* sql, void* data); \ No newline at end of file +void *ExecuteSQL(DWORD ptrDb, const char *sql, DWORD callback, void *data); +void *SelectData(DWORD db, const char *sql, void *data); diff --git a/DWeChatRobot/LogMsgInfo.cpp b/DWeChatRobot/LogMsgInfo.cpp index 4a61dd5..5c91f35 100644 --- a/DWeChatRobot/LogMsgInfo.cpp +++ b/DWeChatRobot/LogMsgInfo.cpp @@ -18,48 +18,49 @@ static DWORD JmpBackAddr = WeChatWinBase + HookLogMsgJmpBackOffset; // Ƿ־HOOK־ static BOOL LogMsgHooked = false; // HOOKǰָڻָ -char LogOldAsmCode[5] = { 0 }; +char LogOldAsmCode[5] = {0}; -static void SendLogToComServer(wchar_t* logmsg) { - // _variant_t log = logmsg; - // PostComMessage(WX_LOG_MESSAGE, &log); - delete[] logmsg; - logmsg = NULL; +static void SendLogToComServer(wchar_t *logmsg) +{ + // _variant_t log = logmsg; + // PostComMessage(WX_LOG_MESSAGE, &log); + delete[] logmsg; + logmsg = NULL; } /* -* ӡ־Ϣ -* msg־Ϣ -* returnvoid -*/ -VOID PrintMsg(DWORD msg) { - if (!msg) - return; - DWORD dwId = 0; - char* utf8_message = (char*)msg; - int c_size = MultiByteToWideChar(CP_UTF8, 0, utf8_message, -1, 0, 0); - wchar_t* wmessage = new wchar_t[c_size + 1]; - memset(wmessage, 0, (c_size + 1) * 2); - MultiByteToWideChar(CP_UTF8, 0, utf8_message, -1, wmessage, c_size); - c_size = WideCharToMultiByte(CP_ACP, 0, wmessage, -1, 0, 0, 0, 0); - char* message = new char[c_size + 1]; - memset(message, 0, c_size + 1); - WideCharToMultiByte(CP_ACP, 0, wmessage, -1, message, c_size, 0, 0); - delete[] wmessage; - wmessage = NULL; -#ifdef _DEBUG - cout << message; -#endif - delete[] message; - message = NULL; - return; + * ӡ־Ϣ + * msg־Ϣ + * returnvoid + */ +VOID PrintMsg(DWORD msg) +{ + if (!msg) + return; + DWORD dwId = 0; + char *utf8_message = (char *)msg; + int c_size = MultiByteToWideChar(CP_UTF8, 0, utf8_message, -1, 0, 0); + wchar_t *wmessage = new wchar_t[c_size + 1]; + memset(wmessage, 0, (c_size + 1) * 2); + MultiByteToWideChar(CP_UTF8, 0, utf8_message, -1, wmessage, c_size); + c_size = WideCharToMultiByte(CP_ACP, 0, wmessage, -1, 0, 0, 0, 0); + char *message = new char[c_size + 1]; + memset(message, 0, c_size + 1); + WideCharToMultiByte(CP_ACP, 0, wmessage, -1, message, c_size, 0, 0); + delete[] wmessage; + wmessage = NULL; + cout << message; + delete[] message; + message = NULL; + return; } /* -* HOOKľʵ֣־ô -*/ -__declspec(naked) void doprintmsg(){ - __asm { + * HOOKľʵ֣־ô + */ +__declspec(naked) void doprintmsg() +{ + __asm { pushad; pushfd; push eax; @@ -69,31 +70,33 @@ __declspec(naked) void doprintmsg(){ popad; call NextCallAddr; jmp JmpBackAddr; - } + } } /* -* ʼHOOK΢־ -* returnvoid -*/ -VOID HookLogMsgInfo() { - WeChatWinBase = GetWeChatWinBase(); - if (LogMsgHooked || !WeChatWinBase) - return; - HookLogMsgInfoAddr = WeChatWinBase + HookLogMsgInfoAddrOffset; - NextCallAddr = WeChatWinBase + HookLogMsgInfoNextCallOffset; - JmpBackAddr = WeChatWinBase + HookLogMsgJmpBackOffset; - HookAnyAddress(HookLogMsgInfoAddr,(LPVOID)doprintmsg, LogOldAsmCode); - LogMsgHooked = true; + * ʼHOOK΢־ + * returnvoid + */ +VOID HookLogMsgInfo() +{ + WeChatWinBase = GetWeChatWinBase(); + if (LogMsgHooked || !WeChatWinBase) + return; + HookLogMsgInfoAddr = WeChatWinBase + HookLogMsgInfoAddrOffset; + NextCallAddr = WeChatWinBase + HookLogMsgInfoNextCallOffset; + JmpBackAddr = WeChatWinBase + HookLogMsgJmpBackOffset; + HookAnyAddress(HookLogMsgInfoAddr, (LPVOID)doprintmsg, LogOldAsmCode); + LogMsgHooked = true; } /* -* ֹͣHOOK΢־ -* returnvoid -*/ -VOID UnHookLogMsgInfo() { - if (!LogMsgHooked) - return; - UnHookAnyAddress(HookLogMsgInfoAddr, LogOldAsmCode); - LogMsgHooked = false; -} \ No newline at end of file + * ֹͣHOOK΢־ + * returnvoid + */ +VOID UnHookLogMsgInfo() +{ + if (!LogMsgHooked) + return; + UnHookAnyAddress(HookLogMsgInfoAddr, LogOldAsmCode); + LogMsgHooked = false; +} diff --git a/DWeChatRobot/ReceiveMessage.cpp b/DWeChatRobot/ReceiveMessage.cpp index 3460c13..a0fc968 100644 --- a/DWeChatRobot/ReceiveMessage.cpp +++ b/DWeChatRobot/ReceiveMessage.cpp @@ -232,7 +232,6 @@ _declspec(naked) void dealReceiveMessage() __asm { pushad; pushfd; - // mov eax, [edi]; push edi; call ReceiveMessage; add esp, 0x4; diff --git a/DWeChatRobot/base64/README.md b/DWeChatRobot/base64/README.md new file mode 100644 index 0000000..22ca9cc --- /dev/null +++ b/DWeChatRobot/base64/README.md @@ -0,0 +1,6 @@ +# ע +˴Դ²ֿ⣺ +[cpp-base64](https://github.com/ReneNyffenegger/cpp-base64) + +# Thanks +[cpp-base64](https://github.com/ReneNyffenegger/cpp-base64) diff --git a/DWeChatRobot/base64/base64.cpp b/DWeChatRobot/base64/base64.cpp new file mode 100644 index 0000000..cb27e53 --- /dev/null +++ b/DWeChatRobot/base64/base64.cpp @@ -0,0 +1,312 @@ +#include "pch.h" +/* + base64.cpp and base64.h + + base64 encoding and decoding with C++. + More information at + https://renenyffenegger.ch/notes/development/Base64/Encoding-and-decoding-base-64-with-cpp + + Version: 2.rc.08 (release candidate) + + Copyright (C) 2004-2017, 2020, 2021 René Nyffenegger + + This source code is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this source code must not be misrepresented; you must not + claim that you wrote the original source code. If you use this source code + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original source code. + + 3. This notice may not be removed or altered from any source distribution. + + René Nyffenegger rene.nyffenegger@adp-gmbh.ch + +*/ + +#include "base64.h" + +#include +#include + +// +// Depending on the url parameter in base64_chars, one of +// two sets of base64 characters needs to be chosen. +// They differ in their last two characters. +// +static const char *base64_chars[2] = { + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789" + "+/", + + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789" + "-_"}; + +static unsigned int pos_of_char(const unsigned char chr) +{ + // + // Return the position of chr within base64_encode() + // + + if (chr >= 'A' && chr <= 'Z') + return chr - 'A'; + else if (chr >= 'a' && chr <= 'z') + return chr - 'a' + ('Z' - 'A') + 1; + else if (chr >= '0' && chr <= '9') + return chr - '0' + ('Z' - 'A') + ('z' - 'a') + 2; + else if (chr == '+' || chr == '-') + return 62; // Be liberal with input and accept both url ('-') and non-url ('+') base 64 characters ( + else if (chr == '/' || chr == '_') + return 63; // Ditto for '/' and '_' + else + // + // 2020-10-23: Throw std::exception rather than const char* + //(Pablo Martin-Gomez, https://github.com/Bouska) + // + throw std::runtime_error("Input is not valid base64-encoded data."); +} + +static std::string insert_linebreaks(std::string str, size_t distance) +{ + // + // Provided by https://github.com/JomaCorpFX, adapted by me. + // + if (!str.length()) + { + return ""; + } + + size_t pos = distance; + + while (pos < str.size()) + { + str.insert(pos, "\n"); + pos += distance + 1; + } + + return str; +} + +template +static std::string encode_with_line_breaks(String s) +{ + return insert_linebreaks(base64_encode(s, false), line_length); +} + +template +static std::string encode_pem(String s) +{ + return encode_with_line_breaks(s); +} + +template +static std::string encode_mime(String s) +{ + return encode_with_line_breaks(s); +} + +template +static std::string encode(String s, bool url) +{ + return base64_encode(reinterpret_cast(s.data()), s.length(), url); +} + +std::string base64_encode(unsigned char const *bytes_to_encode, size_t in_len, bool url) +{ + + size_t len_encoded = (in_len + 2) / 3 * 4; + + unsigned char trailing_char = url ? '.' : '='; + + // + // Choose set of base64 characters. They differ + // for the last two positions, depending on the url + // parameter. + // A bool (as is the parameter url) is guaranteed + // to evaluate to either 0 or 1 in C++ therefore, + // the correct character set is chosen by subscripting + // base64_chars with url. + // + const char *base64_chars_ = base64_chars[url]; + + std::string ret; + ret.reserve(len_encoded); + + unsigned int pos = 0; + + while (pos < in_len) + { + ret.push_back(base64_chars_[(bytes_to_encode[pos + 0] & 0xfc) >> 2]); + + if (pos + 1 < in_len) + { + ret.push_back(base64_chars_[((bytes_to_encode[pos + 0] & 0x03) << 4) + ((bytes_to_encode[pos + 1] & 0xf0) >> 4)]); + + if (pos + 2 < in_len) + { + ret.push_back(base64_chars_[((bytes_to_encode[pos + 1] & 0x0f) << 2) + ((bytes_to_encode[pos + 2] & 0xc0) >> 6)]); + ret.push_back(base64_chars_[bytes_to_encode[pos + 2] & 0x3f]); + } + else + { + ret.push_back(base64_chars_[(bytes_to_encode[pos + 1] & 0x0f) << 2]); + ret.push_back(trailing_char); + } + } + else + { + + ret.push_back(base64_chars_[(bytes_to_encode[pos + 0] & 0x03) << 4]); + ret.push_back(trailing_char); + ret.push_back(trailing_char); + } + + pos += 3; + } + + return ret; +} + +template +static std::string decode(String encoded_string, bool remove_linebreaks) +{ + // + // decode(…) is templated so that it can be used with String = const std::string& + // or std::string_view (requires at least C++17) + // + + if (encoded_string.empty()) + return std::string(); + + if (remove_linebreaks) + { + + std::string copy(encoded_string); + + copy.erase(std::remove(copy.begin(), copy.end(), '\n'), copy.end()); + + return base64_decode(copy, false); + } + + size_t length_of_string = encoded_string.length(); + size_t pos = 0; + + // + // The approximate length (bytes) of the decoded string might be one or + // two bytes smaller, depending on the amount of trailing equal signs + // in the encoded string. This approximation is needed to reserve + // enough space in the string to be returned. + // + size_t approx_length_of_decoded_string = length_of_string / 4 * 3; + std::string ret; + ret.reserve(approx_length_of_decoded_string); + + while (pos < length_of_string) + { + // + // Iterate over encoded input string in chunks. The size of all + // chunks except the last one is 4 bytes. + // + // The last chunk might be padded with equal signs or dots + // in order to make it 4 bytes in size as well, but this + // is not required as per RFC 2045. + // + // All chunks except the last one produce three output bytes. + // + // The last chunk produces at least one and up to three bytes. + // + + size_t pos_of_char_1 = pos_of_char(encoded_string[pos + 1]); + + // + // Emit the first output byte that is produced in each chunk: + // + ret.push_back(static_cast(((pos_of_char(encoded_string[pos + 0])) << 2) + ((pos_of_char_1 & 0x30) >> 4))); + + if ((pos + 2 < length_of_string) && // Check for data that is not padded with equal signs (which is allowed by RFC 2045) + encoded_string[pos + 2] != '=' && + encoded_string[pos + 2] != '.' // accept URL-safe base 64 strings, too, so check for '.' also. + ) + { + // + // Emit a chunk's second byte (which might not be produced in the last chunk). + // + unsigned int pos_of_char_2 = pos_of_char(encoded_string[pos + 2]); + ret.push_back(static_cast(((pos_of_char_1 & 0x0f) << 4) + ((pos_of_char_2 & 0x3c) >> 2))); + + if ((pos + 3 < length_of_string) && + encoded_string[pos + 3] != '=' && + encoded_string[pos + 3] != '.') + { + // + // Emit a chunk's third byte (which might not be produced in the last chunk). + // + ret.push_back(static_cast(((pos_of_char_2 & 0x03) << 6) + pos_of_char(encoded_string[pos + 3]))); + } + } + + pos += 4; + } + + return ret; +} + +std::string base64_decode(std::string const &s, bool remove_linebreaks) +{ + return decode(s, remove_linebreaks); +} + +std::string base64_encode(std::string const &s, bool url) +{ + return encode(s, url); +} + +std::string base64_encode_pem(std::string const &s) +{ + return encode_pem(s); +} + +std::string base64_encode_mime(std::string const &s) +{ + return encode_mime(s); +} + +#if __cplusplus >= 201703L +// +// Interface with std::string_view rather than const std::string& +// Requires C++17 +// Provided by Yannic Bonenberger (https://github.com/Yannic) +// + +std::string base64_encode(std::string_view s, bool url) +{ + return encode(s, url); +} + +std::string base64_encode_pem(std::string_view s) +{ + return encode_pem(s); +} + +std::string base64_encode_mime(std::string_view s) +{ + return encode_mime(s); +} + +std::string base64_decode(std::string_view s, bool remove_linebreaks) +{ + return decode(s, remove_linebreaks); +} + +#endif // __cplusplus >= 201703L diff --git a/DWeChatRobot/base64/base64.h b/DWeChatRobot/base64/base64.h new file mode 100644 index 0000000..3d2bab7 --- /dev/null +++ b/DWeChatRobot/base64/base64.h @@ -0,0 +1,35 @@ +// +// base64 encoding and decoding with C++. +// Version: 2.rc.08 (release candidate) +// +#pragma once +#ifndef BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A +#define BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A + +#include + +#if __cplusplus >= 201703L +#include +#endif // __cplusplus >= 201703L + +std::string base64_encode(std::string const &s, bool url = false); +std::string base64_encode_pem(std::string const &s); +std::string base64_encode_mime(std::string const &s); + +std::string base64_decode(std::string const &s, bool remove_linebreaks = false); +std::string base64_encode(unsigned char const *, size_t len, bool url = false); + +#if __cplusplus >= 201703L +// +// Interface with std::string_view rather than const std::string& +// Requires C++17 +// Provided by Yannic Bonenberger (https://github.com/Yannic) +// +std::string base64_encode(std::string_view s, bool url = false); +std::string base64_encode_pem(std::string_view s); +std::string base64_encode_mime(std::string_view s); + +std::string base64_decode(std::string_view s, bool remove_linebreaks = false); +#endif // __cplusplus >= 201703L + +#endif /* BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A */ diff --git a/DWeChatRobot/base64/pch.h b/DWeChatRobot/base64/pch.h new file mode 100644 index 0000000..6f70f09 --- /dev/null +++ b/DWeChatRobot/base64/pch.h @@ -0,0 +1 @@ +#pragma once diff --git a/DWeChatRobot/pch.cpp b/DWeChatRobot/pch.cpp index 47eb8c9..44fe86a 100644 --- a/DWeChatRobot/pch.cpp +++ b/DWeChatRobot/pch.cpp @@ -237,7 +237,8 @@ void PrintProcAddr() printf("AddFriendByV3 0x%08X\n", (DWORD)AddFriendByV3); printf("AddFriendByWxid 0x%08X\n", (DWORD)AddFriendByWxid); printf("AddBrandContact 0x%08X\n", (DWORD)AddBrandContact); - printf("SelectData 0x%08X\n", (DWORD)SelectData); + void *(*select_data)(DWORD, const char *, void *) = SelectData; + printf("SelectData 0x%08X\n", (DWORD)select_data); void *(__stdcall * search_contact_by_net)(wchar_t *) = SearchContactByNet; printf("SearchContactByNet 0x%08X\n", (DWORD)search_contact_by_net); printf("AddChatRoomMember 0x%08X\n", (DWORD)AddChatRoomMember); diff --git a/DWeChatRobot/wxsocket.cpp b/DWeChatRobot/wxsocket.cpp index e30a890..6d9a3a2 100644 --- a/DWeChatRobot/wxsocket.cpp +++ b/DWeChatRobot/wxsocket.cpp @@ -468,8 +468,18 @@ void request_event(mg_http_message *hm, string &ret) DWORD db_handle = get_http_param_int(hm, jData, "db_handle", method); wstring sql = get_http_param_str(hm, jData, "sql", method); string a_sql = unicode_to_utf8(WS2LW(sql)); - // TODO: ݿѯĿǰ - // SelectData(db_handle, a_sql.c_str(), NULL); + vector> items = SelectData(db_handle, a_sql.c_str()); + json ret_data = {{"data", json::array()}, {"result", "OK"}}; + for (auto it : items) + { + json temp_arr = json::array(); + for (size_t i = 0; i < it.size(); i++) + { + temp_arr.push_back(it[i]); + } + ret_data["data"].push_back(temp_arr); + } + ret = ret_data.dump(); break; } case WECHAT_SET_VERSION: diff --git a/DWeChatRobot/wxsocketapi.h b/DWeChatRobot/wxsocketapi.h index 592b3e0..7a5600d 100644 --- a/DWeChatRobot/wxsocketapi.h +++ b/DWeChatRobot/wxsocketapi.h @@ -3,6 +3,7 @@ #include // mongoose: https://github.com/cesanta/mongoose #include "mongoose/mongoose.h" +#include "base64/base64.h" #pragma comment(lib, "ws2_32.lib") extern "C" __declspec(dllexport) void http_start(int port); extern "C" __declspec(dllexport) int http_close(); diff --git a/README.md b/README.md index d10ed57..a442efb 100644 --- a/README.md +++ b/README.md @@ -1,46 +1,46 @@ # 描述 PC微信机器人,实现以下功能: -1. 获取通讯录 -2. 发送文本、图片、文件、xml文章、名片、群艾特消息 -3. 根据wxid查询好友信息 -4. 根据群ID获取所有群成员wxid -5. 检测好友状态(是否好友、被删除、被拉黑) -6. 接收各类消息,可写回调函数进行处理 -7. 封装COM接口,方便使用自己喜欢的语言进行调用 -8. 群管理 -9. 微信多开 +1. 获取通讯录 +2. 发送文本、图片、文件、xml文章、名片、群艾特消息 +3. 根据wxid查询好友信息 +4. 根据群ID获取所有群成员wxid +5. 检测好友状态(是否好友、被删除、被拉黑) +6. 接收各类消息,可写回调函数进行处理 +7. 封装COM接口,方便使用自己喜欢的语言进行调用 +8. 群管理 +9. 微信多开 # 用途 -1. 淘客发单 -2. 无痕清粉 -3. 微信公众号采集 -4. 聊天记录备份 -5. 其他你能想到的用途 +1. 淘客发单 +2. 无痕清粉 +3. 微信公众号采集 +4. 聊天记录备份 +5. 其他你能想到的用途 # 可用版本 -微信电脑版**3.5.0.46** -微信电脑版**3.6.0.18** +微信电脑版**3.5.0.46** +微信电脑版**3.6.0.18** 微信电脑版**3.7.0.26** -微信电脑版**3.7.0.30** -主分支对应微信3.7.0.30版本,其他版本请查看对应分支。 +微信电脑版**3.7.0.30** +主分支对应微信3.7.0.30版本,其他版本请查看对应分支。 # 编译环境 **Visual Studio 2019**(平台配置:win32(x86)) # 原理 -通过逆向PC微信,定位到关键CALL,dll内联汇编调用 -注册32位COM组件,供64位/32位进程外部调用 +通过逆向PC微信,定位到关键CALL,dll内联汇编调用 +注册32位COM组件,供64位/32位进程外部调用 # 目录说明 -`./CWeChatRobot`:COM组件的实现代码 -`./DWeChatRobot`:注入的DLL实现代码,根据平台配置可编译出socket版和COM版 -`./wxRobot`: 包含C#的调用示例 -`./Python`:python示例和接口测试文件 -`./wxDriver`:driver的实现代码,有些函数具有一定的学习意义 -`./Release/CWeChatRobot.exe`:编译的COM组件 -`./Release/DWeChatRobot.dll`:编译的DLL文件 -`./Release/socket`:包含wxDriver.dll和socket接口的DLL -`./Release/WeChatTools.exe`:用于调试时注入或卸载DLL程序,具体参阅相关代码 +`./CWeChatRobot`:COM组件的实现代码 +`./DWeChatRobot`:注入的DLL实现代码,根据平台配置可编译出socket版和COM版 +`./wxRobot`: 包含C#的调用示例 +`./Python`:python示例和接口测试文件 +`./wxDriver`:driver的实现代码,有些函数具有一定的学习意义 +`./Release/CWeChatRobot.exe`:编译的COM组件 +`./Release/DWeChatRobot.dll`:编译的DLL文件 +`./Release/socket`:包含wxDriver.dll和socket接口的DLL +`./Release/WeChatTools.exe`:用于调试时注入或卸载DLL程序,具体参阅相关代码 # 注册COM -以管理员权限执行以下命令: +以管理员权限执行以下命令: ```shell # 安装 CWeChatRobot.exe /regserver @@ -48,81 +48,84 @@ CWeChatRobot.exe /regserver CWeChatRobot.exe /unregserver ``` # 调用 -**Python:** -参考[wxRobot.py](/Python/wxRobot.py) -**C#:** -参考[ComWechatRobotCsharp](https://github.com/RingoStudio/ComWechatRobotCsharp),感谢@RingoStudio 的贡献 -**易语言:** -参考[ESDK](/ESDK),感谢@lovezm 的贡献 -# 更多功能 -后续计划功能: -1. 实现http调用 +**Python:** +参考[wxRobot.py](/Python/wxRobot.py) +**C#:** +参考[ComWechatRobotCsharp](https://github.com/RingoStudio/ComWechatRobotCsharp),感谢@RingoStudio 的贡献 +**易语言:** +参考[ESDK](/ESDK),感谢@lovezm 的贡献 +# 更多功能 +1. 尝试添加issue中的功能 -有空的时候会按照上述顺序进行开发,不过嘛,计划只是计划,如果未实现也请见谅 -**也欢迎您提交PR** +有空的时候会按照上述顺序进行开发,不过嘛,计划只是计划,如果未实现也请见谅 +**也欢迎您提交PR** # 更新记录 ## 2022.04.01 -1. 使用SAFEARRAY返回通讯录列表,可正确显示好友昵称中的特殊符号 -2. README中添加目录说明 -3. 更新C#示例代码,添加好友列表的遍历示例 -## 2022.04.11 -1. 修改获取个人信息接口和发送文章接口,兼容老版wxid(未经测试,如有问题请提ISSUE) -2. 添加接收消息的接口,可以写回调对消息进行处理(参考Python示例文件) +1. 使用SAFEARRAY返回通讯录列表,可正确显示好友昵称中的特殊符号 +2. README中添加目录说明 +3. 更新C#示例代码,添加好友列表的遍历示例 +## 2022.04.11 +1. 修改获取个人信息接口和发送文章接口,兼容老版wxid(未经测试,如有问题请提ISSUE) +2. 添加接收消息的接口,可以写回调对消息进行处理(参考Python示例文件) ## 2022.04.12 -1. 添加发送群艾特消息的接口 +1. 添加发送群艾特消息的接口 ## 2022.04.12 -1. 添加通过群ID获取所有群成员wxid接口 +1. 添加通过群ID获取所有群成员wxid接口 ## 2022.04.13 -1. 更新群艾特接口,可同时艾特多人 +1. 更新群艾特接口,可同时艾特多人 ## 2022.04.18 -1. 添加获取数据库句柄接口(部分句柄,获取全量句柄需Hook) -2. 添加执行SQL命令接口 -3. 添加在线数据库备份接口 -## 2022.06.01 -1. 适配微信**3.7.0.26**版本,部分功能未经测试,如有问题请报issue -## 2022.06.02 -1. 添加通过好友申请接口(配合接收消息接口可自动通过好友) -2. 添加获取聊天记录数据库句柄(好友申请消息类型为0x25) -3. 优化了StartService接口,重复注入时不再关闭远程进程 -## 2022.06.04 -1. 完成通过wxid和v3数据加好友的COM接口(后续添加通过微信号、手机号、QQ号查询V3数据接口) -2. 优化接收消息逻辑,添加消息时间;新增Hook发送消息,返回数据中以一个BOOL值区分发送和接收 -3. 修复了一个BUG,该BUG可能导致Release配置下,COM接口无法正常加载DWeChatRobot.dll计算偏移 -## 2022.06.07 -1. 添加获取当前微信版本(读注册表)和启动微信的接口 -2. 优化数据库查询接口,现在可以正常查询BLOB类型 -## 2022.06.10 -1. 新增关注公众号、网络查询用户信息、Hook语音、未加密图片、自定义微信版本号接口 -2. Hook语音和图片的接口暂时还有瑕疵,图片收到后有可能不会自动下载;语音消息的文件名暂时是时间戳,计划替换为该条消息id。有空再做优化。 -## 2022.06.13 -1. 优化发送艾特消息接口,新增一个参数,指示是否自动填充被艾特人昵称 -2. 优化发送文章消息接口,新增一个参数,用于展示消息卡片缩略图 -3. 新增删除好友接口 -4. 新增发送小程序接口 -## 2022.06.18 -1. 修复了多个BUG -2. 整理代码结构,方便后续开发基于websocket的接口 -3. 添加64位程序注入DLL到32位程序的driver -## 2022.06.24 -1. 解决Python脚本中,socket接收数据可能不完整的问题 -2. 解决心跳时如果同步了同一个人的多条消息,只会返回一条的问题 -3. 感谢@shangdev 提供的思路,现在开启hook图片的时会修改自动下载图片时段为全天 -## 2022.06.30 -1. 已适配3.7.0.30版本 -## 2022.07.19 -1. 新增修改备注接口 -2. 新增群管理功能,包括添加成员、删除成员、设置公告、修改群名称、设置群内个人昵称、获取群成员昵称 -## 2022.07.24 -1. 添加多开管理 -## 2022.07.28 -1. 解决部分已知问题,优化多开管理 -2. 重构COM中的部分实现 -## 2022.08.13 -1. 现在消息HOOK内容包含消息ID -2. 完成发送消息的http接口,可参考[wxDriverTest.py](/Release/socket/wxDriverTest.py),其他接口还需要一点时间 -3. 新增项目配置文件,感谢@amchii 提供的方法 +1. 添加获取数据库句柄接口(部分句柄,获取全量句柄需Hook) +2. 添加执行SQL命令接口 +3. 添加在线数据库备份接口 +## 2022.06.01 +1. 适配微信**3.7.0.26**版本,部分功能未经测试,如有问题请报issue +## 2022.06.02 +1. 添加通过好友申请接口(配合接收消息接口可自动通过好友) +2. 添加获取聊天记录数据库句柄(好友申请消息类型为0x25) +3. 优化了StartService接口,重复注入时不再关闭远程进程 +## 2022.06.04 +1. 完成通过wxid和v3数据加好友的COM接口(后续添加通过微信号、手机号、QQ号查询V3数据接口) +2. 优化接收消息逻辑,添加消息时间;新增Hook发送消息,返回数据中以一个BOOL值区分发送和接收 +3. 修复了一个BUG,该BUG可能导致Release配置下,COM接口无法正常加载DWeChatRobot.dll计算偏移 +## 2022.06.07 +1. 添加获取当前微信版本(读注册表)和启动微信的接口 +2. 优化数据库查询接口,现在可以正常查询BLOB类型 +## 2022.06.10 +1. 新增关注公众号、网络查询用户信息、Hook语音、未加密图片、自定义微信版本号接口 +2. Hook语音和图片的接口暂时还有瑕疵,图片收到后有可能不会自动下载;语音消息的文件名暂时是时间戳,计划替换为该条消息id。有空再做优化。 +## 2022.06.13 +1. 优化发送艾特消息接口,新增一个参数,指示是否自动填充被艾特人昵称 +2. 优化发送文章消息接口,新增一个参数,用于展示消息卡片缩略图 +3. 新增删除好友接口 +4. 新增发送小程序接口 +## 2022.06.18 +1. 修复了多个BUG +2. 整理代码结构,方便后续开发基于websocket的接口 +3. 添加64位程序注入DLL到32位程序的driver +## 2022.06.24 +1. 解决Python脚本中,socket接收数据可能不完整的问题 +2. 解决心跳时如果同步了同一个人的多条消息,只会返回一条的问题 +3. 感谢@shangdev 提供的思路,现在开启hook图片的时会修改自动下载图片时段为全天 +## 2022.06.30 +1. 已适配3.7.0.30版本 +## 2022.07.19 +1. 新增修改备注接口 +2. 新增群管理功能,包括添加成员、删除成员、设置公告、修改群名称、设置群内个人昵称、获取群成员昵称 +## 2022.07.24 +1. 添加多开管理 +## 2022.07.28 +1. 解决部分已知问题,优化多开管理 +2. 重构COM中的部分实现 +## 2022.08.13 +1. 现在消息HOOK内容包含消息ID +2. 完成发送消息的http接口,可参考[wxDriver.py](/Release/socket/wxDriver.py),其他接口还需要一点时间 +3. 新增项目配置文件,感谢@amchii 提供的方法 + +## 2022.08.21 +1. 所有功能http接口封装完成,可接受get、post请求 +2. 提供http接口调用示例,参考[wxDriver.py](/Release/socket/wxDriver.py) # 打赏作者 -请给作者一个star,感谢感谢 +请给作者一个star,感谢感谢 # 免责声明 代码仅供交流学习使用,请勿用于非法用途和商业用途!如因此产生任何法律纠纷,均与作者无关! diff --git a/Release/socket/SWeChatRobot.dll b/Release/socket/SWeChatRobot.dll index 0048524d03610380cb2afaac94fede274815c3e9..88b7a5528d94779ff6980495a6afd6effa29c1b5 100644 GIT binary patch delta 107746 zcmbTf4_s75_dmY(?gEQ0?xKL8Ab&(bK}7*Y0YzmI6?72=E&rC;Mpk5?RvOSkxn8%h zvDTifG%dBP$I_C_6qEp!6w8!)tf;82K}BUsM(*!@=I-*RKcDCM{&>B(ckaxYGiPSb zIdkUBpDo_fr&#V&o+P%bHcy;V6nEFCP5HXXpS%9=FZkf|<@gS}-}u=B{5|Ef)%>0M z*=_ut@>v1i%WqHlYz^M|x|Gk~!u$36(?84M@5!It%il*oSKd?k_nbR!HB%WX=by=_ zQe_BkGgWzY!mX~zCY2c4Tj&#{`dL(|jw`Xb#}GCkY*15#frk<0t|WK9Rc&mJ5aCm< zR;@*fd9zyOFCegAt!m#K>Z7Yvt6IZVs>&?2Dt~k6K);wdYE_C81%Cm3oVYo3K;MxC zx2-Ke)byX61^>)?iG#+z^%&xahH|{GBB|S7ib|C-a{01?Wr#cCiN|)p5rL1e#bWSi z(4e9Wn|KWnQ2tUV*Q(oA-gB#p)20HAs-Z}G?7(Z{9AR^ew#c0Br#3izlMHHuo1tL7 zYG=wGwc$j4=U?~qwf7-C^-t;LH$;Q{(jHN@fafyDIPm>c*LOL6KhpKxRo>2(d(=hU z%i@LZK&-)S=!pANJM*b1<$Gx;z6~r@);*X3u+(QPvBdBVO9fB>hngds>4r@m$!1eOxr&+ScAaOHe zi#&pg0BJLB0kFnovn_Wx99da;!rP6YM}D+cP??MG6AXD`p1-Y(5&@?+$=NT8-4cw| zh*g>7S|ep%S#I^Bsw~KmzFu^~JV`*}iwNK`&kyH8+J40ly8N$lly?S9-UclPJsA1eD^_v z@C3B0RE5@`tf`%>Nk>|(5Q8Vz4g_FBf}ll=$>G~-P_uvQ0ta+`8qf+?jas3gcb+as zesUZ8S~on1l7Uer8MT&54f3_2FiW+z)*YBxwAbMO1HuOoE4}=SmI6oFNxiWOgrE&` zq@O^jElp#pb^j;yQqAH;$2F)f;4Q5>Tjmw{jT;V!dEw(~19;9PKl8H48-u5t(Dq#| zZjcJKwZ#U`kMM42IIcH3vF9l z)_mRJK!}~|drqu-lI`jj6Wj{Ev7B^Rssqa^_32f_(w)px(YBlY(r;MN-@zzM{!n)& zpNr=Gi@;mwotJ*H7S>6b+KN|Re)(l<;r3c%H8r{vv=&6!ri-ns&n7f zrupa*sQOa0E^4fCFGBxxP>OVB4)W57E(t9YFdA`=zfPl(&zj*DOHS@eJ z-NDPd_Jwr(oSb4c*6ZJzc0-zFkaB#gWN~Al|As|viKp%huuT@MX$Gmra^0{>l-xH2 zYHL!pf~uvjqp+>USgCRp7FA|RXJi|w)W0?RhGaZ%`9cjW>e{L=G>Jy7-jWECfZb6g zYt&UzX5+>{EehJOsP(_#Z>=#N0sbR|ex!olK?3xJo{0QH9B*vUTOL&v5q6I%*}VsH z`M)5SYm5~@UO~t|aN{UInx$zHaJvX>29CggXn@OZsFkCzxyD#@5buMRf1n;PqH+SS zT+@Fkzp2K!ANlrE`PnF6Y5K%d`iIMasK&TYm6z-&+;`dD6YZtHqAlvtDVJ)Ddw_Qj z;qB0L;k~c_pDMDVR-;W;wRqVL^mW31!E)lrVEn&B#y#n_;>)T%9a z)eF+1Mt#|vkVL7b+gPw<@y#SU_LLt4yZYaoMf)c|Kx03S!1W)5!Rn?RqCMnCVVHUp zVlsXd{MAn*=Jp?jq3V1D%6}Aw6rCt1sn$A~|K=r&fe^aQ;mcKf00@_xuQ(heoe;jP zZ0Tbu+ebPs%``++S=#lh965HMXq8{d4SKK9 z#5!8^(v6ZI>8r)<7)jegG@r?qrq40S?`;=Vxn@eskq;pJHl;_M&9XgC__A!eiCOY9 zh__USODB|?AJ?k#^p;jF4X4s+M`1^vUiLsPY89l}+mgil)$1P@?JJYTAoU^yHYJOL z2T>W;%#NH@*;1ms<9QJb)}CU@MShuK*n2-&9Fp-3WF75djqNPU$JHn%lKprY8mX>Dj6DevOtJPc zhCTOBpmFK+I8yXHj%m2g{UXv9a$HqX3vT&vo1EIanqlP)H#XF&XH39 zw7o85fDR2JUu^57$DHcx9GBVQpg8fPZLBS*aKaZ7nxPJZY}v_zHMYrvElo|<^o|y9 zeD=+e1@Npk- z(5kWTFP04(Q6bLDyd>uX1xoX@l2`j~3<3|EU~O62-SlavtUPAXiET?Icawa9;;S{w zo^|-9z^-!)NyXDeFf7hjYrH$ntQ_ay!dPeblVT?{NbzwPlw60e4hT(d z4&PK*R@;0B_~EnGjfkLujTc+%*1nt7`)(IUY+!f$MY!*J3JrLgecxxm$ecV!Hjsh0 zFb_3Y3(wnT!Z;}=%2r5f%L&CiiTb$K*t!%Q^_Aa>1gc(PpcJn`24`&xyz+WEE?APO z?NtTeVWg8|A4M6|b(+}sA=2_IkFb*d!EAs3(dyeD5!vJ?`_EZ?LgAzCy{H&oNuB0x z2P`9)0a7xxC$Egvc*$|mlB`ALRZ?4Fs?x9*^^tD-vsk8ocpm`5Uew}M>!#hqiu`Z! zHj`WwYHg3~511&J@x^}jzf=6Qlr0HJ72V6&ivc6Ne&0fZplk7ZJ0Izv2ZV}yOPM$z z#_O3L36lndiqlKkEl5aoCU_pB9M2C37F#T=a=;j`|1brW=TS;<3@8^D`LWFdhZK3EeKtUj(UrEZHoY0bPsw#XUuLw4+ctc%*Eq*#jW zsJMN_iWO2utS0L0waZo4)y{kccg6lk(j-Fr_~!{GdDz3Es#cRo-3Z}P3Y1cd5@FyJ z1Q38H0i-5sdqNo7Ehl^&#ttbXMk6J~M4jcObuVYUv18R%3FJWK8?RVXV>P@^N?j}` zbk3qsDbU=lUgM2d^baSEhxFZ?c&(tnJ{ZQA?D-{xu|}78t?*|hpEaJEq}EMGor}L( zH-j^@WHBpF^DFwayM4H{lS|sV&w(T(EODKaSN1E8jy#pEykXx&0oJ3fqIma2!B!sg z7CzVSv(9UEyhk?)mGykTamHJl;_9+D>=?ts(sLy z9!%n0FpC4u}rbCDuXn(`KoTPY$SGG}g?6*7dS= zeQRu`b$tgI8?%+i{E%56oT4&u1PzYDOHvyT*28kVWHnask2=I#jg34E(vDcFL!=s; zN!X}ODLq;ETh#Fslf1SVB6vn>ppxcoA#281xlx#0T8Z?`N*bPX=E!Tfm7ufD5;nT0 z@uZ(D>nk+Y!mU!_5g6A6@nu&F2Bzi6!-1^`Rd2K!x0&S0Jewi5vSoChDC?01?lf*g zQ7f!k#171nuNR4`PIzwxz5-nfTw7+d z`~@bR(t24kUV^24DbaXPzv%}IHbpjLvq>%_>(96!aE=s>b7n2?{~WwUO}@|B3#AVs z1CQCWgX9g-J?twfvn}?0`P+y1Sfb2PlsQOdZRZGJX?c7Q$Hmy1 zxmB92A#Ky8HuR;R0zTHE4=$yAD#>S@bgI^PkiyPsRjsj(%(WUs+U^xx{BtI2jxF<` z9Q_mbgNTx`A<=lgU?{ruU@c`<9oCO@=F)qse$hWK`6~ZkCKP&}AhWTMPP0 zb@K3jWMa#@7QHgUpsZ%u*b8NOQG4&8_P1u1qoWe*^ratxDJ3EHsx)0wgl1I)6=GXQ z^{^H~Hmfn=v>G=gRu!Z~)j6p^b5cA0T=he+`sWbL|8q@GSl8l%9TRhQ>jq>X-!-+a+-hP@EL`#|5 z?B}Ayfkj1-H}szQLEd{(W;LguD$e_m7*A5#OsNQ({^7yYcbT%y*l0@3Y%S<5FZOo! zTyIAqy0lqd4-TPXzeXq7GAoHwWb1z@SGlE1hfYk)+@ddwy5X4Qkms}`9+HzOOY>SK z2+V8^xWXxwwMJQKn`U}hJ*>G}c{4}aEH6NeJ?os{t9|SNMIW%z!O^oW(?q4VS1qKXa{Q*OR*e@8w#!0ieS7JC-_U2A`wrNtTnne3+wSu4LVCg4Q zj(p>O#RpfU*vpr1{-o20r}D^_#k{>$n=J(quO^K@D8{K%u>F@-|! z3Bk5+8D&yPpaiFJ`8TC}3{G|09e-bnQHMfoJ}K}Rv43v~9(Q;RuUJp4=%HjZhi*-# zO;e2iO{P_(Rl{uQgA?mkkI$0X8n!HY0PkUCQg|1~0-`ml*h+fJo59FbElfO~>^|y* z{H^Efwl?Xw)z~C`Y+WRi8NpRXmrj=Y!RX3tm8NLaCooz_Ys01dkg_7jy8cCdz_Z?E zj&)u|n#7-0dqn+Y`CQe~hYwr*jOV5GjZ)!xDJ4NVWnFY0wCXYHNGfT1g2SYd`q6-( zxXTE$WvxzCpczxyGE_=Q0&Gy?iGl#B&f&Wq1~&nte9Jn2ol3u@vPIl46m1|S*8%oZ z!Mf=6HZjHJZ}EU6i-46<{e6a1k_@${6eO?Uj!{rLx<~_>qa-z$dt+)qij)zMu))|2 z|B=JD0wr169ffYTbhnmemKulUqNC-s)LWXY!9=F86@$K%;h*5}-3GuSj0uI&Wgiqq z0&6VCI^s`Qo5)J&#OlFGZ0Y61dlK_^wFEmO)jtGO!)W#or*}&TM&~>sPa}ySQGLqc zdjzFbI3}qKCnWSw<|U=pMwO(_Q)Lm%X$1!H)CdmWE!1L#=g}-$>5Rj7D?ZUEZjw8S zg9V-d`Erv4he<1)u!qhTg6+?%1$UDUvs`XFz+sbrUy6Bt_ zSdHx*hz9$vxGTxv#Q6V{#C$BpDwY;}12Z*I7yjH#t&}==c+YlfcD57QSO2A*tc9{%0R8AF z)Jg3wL4n1#{u0{Fra5a%_lL}qT-M3!nlV20ma;X}7P)APerStaYUgYXH&3L zOYetRyPD6szR?L)L5To8RdqR7eM&la?z^btumv7X1GG)kOS+a=tDo9da)aY|G=|5n zwidQR#THqO=M^;@!PTt(k-kXIk{j+N{j8xG^Y6r@YX@7tZL&`5Xz^1t?|vm+YKNQ4 z0aR#S$ULST&JM!>ZPPqz%h!?Ktg{w2$h$CxIlJl-?<#L}Rq#YIA)S47DMvQYXDm7j zs_G_bssO@%*6v1kKccl#?1;&AhL>1Qm-wdV671rBg)BA2jc zo9=PzOw3WvtIuLk?lD*C>2~||Jlt;EKLjrs8_@ZWpe(NSWcd{YdFNX(_p;x8uNcrL z2lEqd6wr`;fo}zvN{8UlLDrWB!^ViVg(#%T-@t@v5%mcWz`v z*rpB!;3K<{Y?7zl-O2ss1mBJO|5MXsTNPk<`Hxu{AJ!(tSDGO({ zX*4{kYSW;0Fo(qSQxY&WvO-`m%d0Aw*KG=PzH2IJf}W7oSBV$TOVAe$m_|4X8?1iT z9E~lm7><>yZ^St^jh}V0R_;sF?#w1|f@G{$*H|ZOBwsQ*rNYK6Wsa7c_;Z1;wBUjq ziiIpCkyPXv(vW>9ig%JCdwG092hj_b8WjryBDnW`MFhz%=djYEI;BgxWU**6XRiw@ zow8VMO{V!Fm&YcON8aN$U80ru<^Lg*7aJgx51%EOB!%4gi&G&t%QmdBaGAUl6C;RG z_dolC_lmvQTLZI2re?hZ@YRi>;t@)Sf!Y0wJo_y(6}St>(Ja`ZZO zM_`P2&z!EeZ410L`umg-MxE^l~@^2kW;bp=cEEAx$2qd@;-g(lL6ju&b<4E=GeZtX;C` zxNDK5dm}6IKd-Acme#;7uMRXpSFLEAGitHbgZO_ki2>G%Co9ve7}SY;QEmECT5y!= zI2$SM6j8cf^<%L5dahhfNx;%*(-c`V8?6C0%?axQ4S3$!I^5`nAJFA1TGR|{p3H;w zScvSvWIaWdBb}DlVnS#+;cp44@kcs(rzK1J5b;&yKQcmaG}if8w2`XpRr5rj_)})E zNw*~t)S0FyWYf{~1k+FTpQk4W%rrd-A?8sANgHqgZ@1~m>-7!?n;jG?=5W}&F4&mA zz|I9MwYua9CuZ4&9~_SEKDFYm)^|32SEEawf8`hZW4na`e#FZdz7kIr7%^N_l`Hy* zwZ9i##QhtB%2MT@c&ZTV=@%gJe%NC}Is$t*{>orkGIXY=oyELV(b_!pXshx5KJ*ldl(nc?9M!zez869vMtkGI(b%~jCI|}Qu7*@N) z$;?ugCQI^^pMP9FE_~|mPgpu(7VLB_c4#KRAD>I2n!QiR=s9_I<2Y1`L@>2Lwf6AEXwh+$(Z@nQkJOdC8cmN2A5OrWCIMGVzZE^z-S z$qRX2iwK|e(qgV?__Qans!5}+wI&nLlEr8Wv;pi4fT|5WEwY2hq5YRsIUM%Qp9_Bd zx|kgfWX05A6C%U=QDb8eclv6TCciiGb2aVy$sShaMJ)<%D7m{{En}g>1I5IJY|`+z z#6Bz8wc#%rmO_8SdBcspEApH>*{e~b#edzznxgvqQ{G${PdA_`yI|V#m_B-tc5ex48BgLQ^QbB}J* zF{hQ4Ue8_{vDEvI?zIkql(YUL<3;~HY}UwNUc>y6N$UDsk?lAU(C39*MPK=2X!qH} zE{q)K;e%F{8*-V?s4yLcN$zUhkblak8GNhSZu*3n2c)=VN8n?t3*$r8yEXSKEFdUT4hjKc5GS0#g z4~)N0{LaM6<8#H$CU!Y~fjHL0aubJVcJ321V1+AlyIb44lZ7nv_867Hybc(191S~& zawK87Dl5^=j1NBRj0b(Fm&J{e16!~%enQXAB#!b7#3USc$D^~^FJqskx{Y(zZQR`g zV>1$x#GfzSy=0x>6(g^&Mx`i*Ss_;OBv)P&XI#hIYLKRY}jMSN%`>zJ@W z96Xcikn#V!4q=#n^{m5w_I~0xv0w&sPkLAQm{lju;>G(W-`#5gX4TfRRJ1NLC5-Aj z18Yd=pEuK8{iEak^GC9WSdh;9=QRxf=%0Xewrt`peS7v#<}O*wKAO0VV=tI=pSU@V zU7nOHCZw?`DGS6;jqKT!QGcq~k$>(StlstLoQo*BXT@$~{*%Xv!;CCz@~Yv~Wwl1~ zO{ltesrZ*%(Bl;2x)6(&l3Kl;73CU~u9u_@iRzHzXQ3#h3AHQ@DvrU;H?wHCx zo)SBTlmx1O+f+p#mZhWRdf30p`q?<7(-tv=k4ifK}%tjeUL>$T@5M9gQsB?4BOMCE16UlByFx*8? zWHE~|M*Jv+y=e^Rqmlf>F6iN>ce1aIHwmAzl(azckcll$OGuA7)hY0n)_?S_Dzm?2 zYB27zp~>G_-a6MVtIzS4`z$R^H1AFeO zVnsL61m!*I{U}Vn;Wl{8iaw>taaNwWM>q8xsC-^P10CDWj->~RdotLk>7R-3C$V>@ z591p4^7J)AD_b^Wpzr1k()fWkohl2PIc&N?S@J^}Z1ap2MI;D`Rjb3`sY#~rD*uw- z=*{h!l4*z4`-s3WOHHgki9KKm zHeDvA!N1?3K9eQCiuCRq!gQ*);kIY1XQm5}v12ob4ooi2XA@ZNtU>C17$(-viX3``YASyNEo7;Ndag^6E*7u1W3pWi$CTc9CQmR|0<>n< zEMY72ogHtiMuwKr#lKA}^e$e%d3s@JQd(h;M=GIk)SG=jcqdd#N4jE zPtI*q4qw_wg?Y7`Sw^yJ87(xR92Q#0#i9YzxD+4hLN%D1rconFq}Ce@Ax zOENEuPP!QMWpyZ%ypol8D_g&8Tj`*S8=Y>k22suU8JA<_#VUhss++Tk`AL_k-_hol zAE&wTO<&oL3p;41S7(*8X`Q(Nor`^6Xr87T^<|UwK>_TO=LTSS_x8 zJKh7J)EMl8>ZeR``H`jiEg4WhCMiUFeVYt&mAwmp29wv`|oi- z#VB29IpvU!lV!dsobObsmoGX~qRyWCO{(gVbR>pV&hrc3<%Dqg;`*KL)W#*PyU;Y$ z@Ym-}@P8A4HeDe`CT#7>avaKsLd=m*q_B*f3Dbtc`QIr{O9kYd6?jBX~MNH z_2pI9KJHzYC6A+ItXwFlj9arD`%3|vD^E#b@8?WNei450T$*poUyK5z?{Wx51=LHC zR9GK%9C|#l1{({o+GTXeQjG2ot0-Gn#~{_mF6%C*}BHcNXBN=jZ9&&VEPC~ai z<>*Nu?6R)0tB{w%4{sH&!Tjt#m+a7)EjK!-WeuXb@Z(y?mRg;%(+V^yerStir`7Uf zr|3XxhP#=me%a0qlPLg%d=#;jC<7r+B@rj0w@m+Y%XD zsVKm@NQH;GIRxHxMwty%S|-+^p2N1KE&Sk1t4V%-oXdOZt<<2oy`*&^x{x~i@x}df zK`|C(3xYv?0>a$Suozkbb4OKdy=-)%&%>TDUp}&I3a9MX8W#_&jIF=cC=Yf*I5{{Q z`y>qzjz1QU6lX=U5ld!h--AmxM|O*3MN5K6Zk}5bDjtqtRZC`RZU2Hm%XdYv{!2sS zAgFvVE~ehH|6J^m&c>w1xm8t4rh!8WqWz%-8C^`rRxS;W0e^rxzMsw5p#4vEVurKv9UikRH0LrERKEu zX1Q*N(o4iNF5UTBcS&m>VQS+Tg}6f3%Ai1=F^ zd+C;>K4ZhVA=%;wN5Q}2SlcZN#rnZ))~%gvzHTts++TA-KK~Rud~2|8OIK;xC9N?q zT&cT%xOKGXF_?ueA3bIln8o^#&iZCEMt0abP_k&E^VCH8(q-u1Ja;UTgGCd-$@)WH z=l8JE<)OK8_*!8t`v942W#{oUnYREF0mdLH&tNNSpjgM7b$B^^qY;U5bi*&eZ&rZ} zTbYamI=nP&G)~mjsj=7@9mYDAj~-D0M3zc}$!g;?2}F`INR`zikGTS{NT zrqFoz+-+gvr=!{N+rq^|qnV7?=FzOrim0^ZKo3dAnN!M_E4@nuK}niG5%D|ifk;4V z7g0EF;2Vk5Tx*#^dbcrllftocwYyJ9m4S zI=Zi#UA;Z5*L-SMpB#DRuPn@*5b$L+$xs-P0Kb|oHQWcIok>ponzfr_Ja3?}Fw)#T zi0v~^^qK=$Kp3RcCiyLP&72@!4q~J47$$tlZoXq!pNbPovdK0pMjnXt(Vm}y804Q7 z#Om*e9FX1xkS@RS6*zltc(~=dcGW0WoabZDA1xT%R{{LXK$eg4``d{K-QEud&w5? zp<~EaJQWeDU%D+KZ@0Yx%*=Hd#5iOA2NO zH)B&^s#=X#;H~L2@uHC%aczzUDF_xG3tSlxNobYf`{;Jyb(+F?Zc*2Afz~na3O5eJ z_pn7PL%fMjV*Q&HjsMU9_Snh+;V#watVgXIRgG9kU-|@|(7EM%nEo!`k*F)jMs#%Q zM82!On_lGBwG_XNXGwNt3IDHIYTbA%qCl+ZkU{=R09$s~Y~As0+wIuCy9S6;0$AN$ zK|==z@a|u%$O|17#o3ZtcarpiK3w>7WQRZNefJQt(VvaEJ6A07XVTqs#3+CE`P~`f zr~TQ8d(uVLpRK`bdVf}Rk8=F=i+f@W^ZOHW%}yUEX=}3oUKX0)Ph1ee#^whP@o}aF z^0W{<%NzxMHXU}T!ujG@?QfEOBiI9gZ17XC%;k{t{{k6plFtogNAtrBRwraQhm73I z+VcIxM~5=)y`Ck%mmWC+!j~+rbu$B=Sa|1h1a5XM z>Oe-ZwzboMI37hZEn|>y%Je>PpJT{DJo#CF2>#M-jzS-~Mp+#qv9I7Dl^g`=JE-TO zMtbLoCi$IyM6q@U^?)mGw=<5oz!k@wany^hxFTm9wIh!!0>V3;kHH#~5 zsxyu{$Q3ur8Amy}5 zAR6k&bsNC{sny6<`jb}kqWn&+R=$II7Y2x$z0hERVbY>joLoXG@qqjdRz4MT?L#-y zPowyJf#ns>Dk4U3oQT7oZmbVx9*` zRl#>;5mP3`0{h0mhidHAblG1|)pyQaEv;mKsmUUmusTC5H?R$>L)CSdYVTV;NPo*) z7|o2ds4GgzK6}~6tE0rox0w5yxT(%Ttya%jEe}WUoSQk#jnHT|+B(RmGPTAw+Df~E zc2*pH(}hkgB?s(@jG8<^Xgco((^CpMhEaA9luM{I*Sv1z2_aInbQ2vI)Row!H) zD8zYop}X>r=pH)gBF;@pj^4}O1-kSe=)Uz*(7AV^)As+Tx_)-Rh0YxZzrYOlM~Hh4 zbf<2b6J58;`u`)kiJj;?q~z4S><^&R_CU8=r%o#=W=$qV;NX=R#GToYyE|12* zUhKzp39heCJTaG8;PZZ$z+_um{rQo8_U!tX#1FO1_|RK^UKm}VaEl-EQWZ2x>Lqz8 zCiypy1Kvf$Me%(%mRyo1mbtOAl1y=|8^-Mb_I=4n_4gWngs^i3IO*ZCNd=&=+ocp_ z$~Cu@v?f4%xNPgv@Hl+IcF46BgliS!t{_~;O}i&7K0d!<-xky+jL?K!^9JCP;LIEX`syTW1+2R;$@=%V?UEequ?|`T;Cg&QY^Lr4zzlz)A}_ zKS2;SU&`-y>W`AvZ5aMYeLPTVif|Qi(;hyNg4{a~Z)UgIE=jhCHDFw1J##+{Olt^V#-VG2Yj~UQ}<|)sD6n>JvvbBMoIjOhaDLX7`5@#hiC|=_lG)Q{^T%hNjxtk-XU^c6Bb}eM zWzh&ZGZT!QL74{{J9^n{G5F3Sl~6_@p4;rNequwAsDF_KZy2av2Wpcy1PLFon>UOU z4zP_IW(Ziw+YlUH2d6F!25TPV>NI&&HM_@}s9yYsz+SalLXs+BrJO|}ln4+1HsG?^ zHsJ$Bc+1~2)5a7*$L_Yqd;SYm#Jnf5gPq+tMZESq6Uu#9gycP9d(ZMIvmA1a%BP^^ ztf8y)@yFTk<#B^(*9=gZf5&ziY^^S92AsO=Af9Hh3Ogi4sdu4WzLr9a;46c?3PoeI zTyIu^=}fk=Hb9!>%bwt3TO-0!*&aL{aV0iQiM5Q*fGaRgfyrhwHf5;6T8f!RyJVZmYcu?@ z;iB(vEa$O!@gWapdu&29P2O7lrF!d&RP{X3TnD_atzOD*gULR`SaRZX?3c%8`u^~& z!*Mta5!C-STP1SI-?8k+=LJ?Dc9mXomN!yohkx=eHMyr5a*ZbUyoPQY;`eu5Hs&x( zD)$%D75EEiX~3_!%2;`VZ^PeI*v6X51B9LIdU=xJgI{@1I^N{x??+x`X`82r#lNzR zn4 zI>A>UvBLI54jS;&Ty`&ePI#3WwoFbs^fRx>|HFA9I9SQmDvwsN5vl!I^Ol>$UO%&x zCx`TlAVEY?i;(f9M-OC{3*l4R>{+uc!b=%D=)LL&L*s zTf=p`1X^}wx&&!FGGM;DcB^VoX(L8fQ(1Lvt>2b$(ldVy6aovZ*RTtuu`7CoIc*LvH~K^-5`j4erL(gSj3-O*zsp3^>G>sDJ`JR*uXyb>>ut! zVQet;Q7N>Z?xGbdp-#WxjBVq@$QEYV7Q+Wj6x?~}u2oUl#zy)1a&~rGN?3jvKkXtw zkD!4eoKQIf^3>)Hh{riUIk}vTepV7UU1mq0oh(kj%!KFS#WWjBc}yew~6^YpXpmpX!)I908-1kO%6xwN%r`pVD{wm z^&DuY2Fe*c2 zYLgeh(}~j;w3v`(-U{M*hh@tL53^o7cZkpZ%wF9YFE)I|ns-*HX?5@UU3@92cGm={4lQ$dv%1DgU6IMrs$UD9##e?fEaDvNBBf4~!ct;*n!ZKctR_6~< zvj<-e82FDP#Ic9jzh6%3Tk>$%2q6;F7PCKIUKpDFJd{e|5z86TT6hEl%{q_=O95n{ z5I0#<%pQ1UnYg2fefmmj9~vBNndM0FkY^XMQTvj_dv~zA_9cqjKVdK9>y}TLyf0hy z`h+FFx?s>7A9Iz7eEszxxf%TP`E_ayPuH>~8}PY5TO&;HTDPPNj3(GG@)*}&cSTdrX+h7ai5ui5hb zQ~Lk#52e1lf0C11o4QKSy*^32(abVme=+zF4solmV#zm6H05EPcNz(yu`S1uzcN=o z`Ze=@BW_^CgQV#kvkGfpu?g6Gt~481UA3QT+7`#43>8TM^yQ$vwNy zaPHyDpL}n=xcUsMsmN5vpAovQT^#%Nk+9|ObM~U`A>&a#4zyXmXtGZ3Xz7RJWL`OP z>if*+@bBXIdglF3R0N@yXF@;9S4X;pm3MU*{$z%a~fw*5`G!A#DnLua?=C1D%UY;1d)aFKZ*n=3Y7V7DJLijUQ@ z*N*vnKii$?80w9S$7YGs?qU&@5o+2Cl~p-QZN?JX3zdmMG;s03*kIk?c2k0QlsLNGoqwi!>j;|Dt=CS?9$BRp< zS<^&k(W=<5I!nzIvR! zQawnt9cQPj_lO@=vBLM_hx2azbO^e214c$zTR1#)14ntB2l@t2C-%c>&U+i!`S&)W zCzjO2i*KG~Pu1j!6DpZlo0@awm_kg{+;9V(L+h~v=b|g|^ts=bNLBD#_@k-#8rczN zl2dOe6)0&XAtjP8)kUedk5IE-Cx@u_;XUSLTEr$WA@mL;X$f7#^$VJvJR4kwX+J=^ zViU9HPmbtI+9WkxYr-SdipZLg8cJ<_RG4Uvyd};vdv+&fgM1VTifm+^G zFy@-)VieG9fjb5RMa z2aZmeHE0S_*D0sj%=$>WSPHpJj&Tm(rNCNJ@2@U}rLe7jjJggDbgq6z7NPN=Wns0+ z@gY=`v%%={Jx=hXcbxT8k`RgJqzkg-AL>|y~qJdbrQj5U^i_Z*Duf_Yp zGePPCZ}ov^&Ri2iWDsv1lX&gEp>zOhqkB@Xf&l%|N>jE2+isD_-Z(c>P4BPH#fhul zV*ww8sb#eJ#19gE@iyRabq6^jX8KDPv&@%}^4JGa;;b6>&Icohhhsk$0LVWA@s--( zm6tA<%uUEAuc2JH?cjovtKWxt>Q>|~{xDVBf%JFqVD%s7s5K+iY{>a=HLeb38Rv(q z4S3&wehwJ8{`^R_55E359~O;*$>w@w6m3u-f^ZEgY_wijK>d^Gj6T3-el*N85H}H@ zsE9=N^&bTlg{uXFBfRX2C>SbYcuEp~rt{}~{#?nQ1^ijcpXL0yoj>>SX9a)O(X-?? zI15w-?iFo3u8E#t?I%&hGx*TH!Z;omh&Y_s zKwJnyCLR}#5P9Tk%gBGIz(se$k&|#Phl}fkOF(Eok4r+RKhK+jP(F`Kr8{mw4G^Xy zRKO!M5E{heObBh^adQz;3Z9S9RvxzyA-c!CmU{|!@wnxkaAt(|@VJ$oaQO%w^+tLZQ6`}JyZW}@hf!h&k z;&HnWQYx|sq2?kUxeq~12vG2TgxYxA!A`&mgs$+oBM9N57Qj^^q=})ftL}uWLrBZx z>JbXya198B^SJY!aE%B>^0-SkiX09)`Bz)kgvbOQ+1v>zBb3DBS`ktRY(prW$6e`! zYey)9$8{jom*Z1m$X&|gGzcj*)*`f=$LSE_yj4_YK(Lrc`XHq60?jZ>c^u7n$(N|i zc(?L6n(;cB5TR{6j%K{rlLk1N@$TbsG~-pej%K_Ec^u7n6?`<~t&73s@ye7}L70xn zdJc#QoU>(22wmcFa}iSD<|EX^<1nFc@&e6ATY22_PB=3{Z9HxzLJBYBBhk#71Wh^#Ogt3$tY24t$zc%siGM0z)uPxZ`4r6+29I=OS8*ftM_Gq5A zOUbt%5Y&aV7t{ zq!81zj(;^PX>##sHJknEQSq*qnf|jpQFxg>_}Lh5;!IitK1_^xvwUPqBa`9+fW#hdKqFQ%w9W7O=&FD$`MbPBS!p{@;53SDz;tjjVtAj{@2{l#-H z9(d);Rf0Mic|w}g)jGWIY#z&%`>y6t^;~?{HAfH1AA`aDO{%19!wqYaO^aX!HUHsC zfb{)(!m#}s!C=i_X`P=>W+=CL2JTcW4}}Dr3prsvh=L2hjvD16&b8t36s}U_2Bp(H zp$QJzmFt`~>DjLXe9#5id84fB!b7BKTE`llxei5ld>xnA0P4)w(N1pzS|zW?`8wXz z`qImY$Tl}2UH%pQ>KniGojVkoElrxYHL+^LVQOP+#53qqPk|>g!hMh_vY@|Ni$uOgk{4-` zAII%@@Bp;22JS@5@hqJJzK_w6&fNc@_?hSa$GHh6Fl;~n-AMhBeIPmwm(J)UKVsNR-)&F>8@s*b13*k@U0B39r63$^%~?e| z4x2{gFX(ET)eDg=JJ*~NkNT_y3E9%Z@W@>AQh;R3M*(7%6P#7emS5uwYteibfX8z4 z{=Nd%s8Ykjah@K>C8~AigzUa7Tnkfe=oo0s4 zMW=;7!{&cKeXu`T3MMcaIl1y;xWv(@J>V+-#j3v_CffdW;K%RNMDepdY+Tz^F=+x@ z*EULwo4{Ue8!c=<@Oj%%IKg)_kDq6Xkx#L?KSzr8m)Ju;r$-%pQt4jD>U76yli4(Z z+TkZ0ALuNoP9aEolKu4a{(x0460N#n51BC6I*%k!19FdVVTXSi$A$LFFCzw%<^UUl zO>|gSnS(o658G5AGp2VIcITek#Zs??ap^@{(WJ}j!F>wWCAguDmQ+rdmrr12 zS3<>t32e`m!Cs`As%iJAfEeyz8 z$WyvvJdOgAP5L!7WI3p#9)e5W9o%VX8Gxq`{lkzYUMv1}Jk9SA69{8J2R8_t%oP*Z z>0d{9ZYFU^mc7+XxH>p8=Lx0tXlLe_N~I~LIODi&N3&6yZDw4JRa2&iug1r8YK3-X z6V3r#)7Lr82UUo+ zX}@VZP<#DD!T0`cyz48VI#f}$n3?6sm;S~6-Ep(1O=P-17Ar%-AMu?=@`q*rDLf|y zp?G%ik7Xe~iI9Wckbt*oWRkaDB_^Y>!r)k)Y7S3i@i!h3&unGy-WZU&9p1FqlWzL} zn4^CJr(SY<*Gbp$b0y9hv(n220XsGTFa=k-ti*dKeOS{{(f#q}ghV#bF-S~JWQmRt z5nqcO0|qEsF4vp^QsfFwfKHjbu+0v?eldu~tQIT)j?~qrE!|(o4m%>^2zj26V|{E7 z=&`z6<0(RZ?->Ylni+xu9`|yrUI|ZzfFsF>K9{I(`4VSt;$X4$wQj{IrUDIC>z0qu22fY)wicmnM1I|)-FuyP zdMn5Sw>jAdy9ljMlI@oL2(RZz&0!Vo%0jy-w488TKYCs;Ok~l2o0|T4W<8qc$jR)4W^1}eCkuH zFg+);%tSp}pJ?AM3dQ0tPuj!Of>~@UwQo`jfx>qCUbT>__Ca}VYGEKRxQ|8{In+e8 zZ-*nKpQX-0E`@e%ogG%HRI|)+e-ieFBhxNVAw0NmEVxsFxNLE;Y&%Zx6MtW{*k9BL ziP6m<%6thXy8HpI1XY+Vlp`^iavW<+jx`G%Yf>C*Qq8T2cAcA0Fn}@MIM5Ds`>`R% zBu$&EK7rj4%>FMoVI*ij=_XhQX_A1r7X(2Wi*LqtAPV+A*=GMFd%nBiCtfMBZ*Uie ziZO}y{q91b8eC;R>n?=$NuX-dxx>O~W=)d)hPyCmGU|ncFmXUD`-0Ss#zVkIijbQa zDJ4n`^EC7$EqNN)v5*V6K#&V$jvzFPJcL0Z3Yrw4Y01YS16u2(|5L7% zW=dA6VpOYw&1MjiBM+_Q6n2(hU1YD&3L*ZbJoSfTJySOo+1s?jJ?bRz(Jh|BaQ{dm zgLux(a@Nrj11^j1 z48kO_J;|PH5S|k?$@XgoVYNC0sPnyrvE5bTes3X3Y)Z2K;Ee^BEvT;fR?-K2Xp8=m za~*~@m$vx}@4V4hFwuz_yIVhDusEmi(C~gji3t6&&sP}kw`-NF3M2$XKmB}!z13Hk z7vQq3JRnPbiAOTRwXnd#R@raz6Qaal@3lYbhl@|1DY1X$Cp;?lEwQicFFYhhCfi&4 z3yj_+{=#Lkc!GUpfDo!JhF0IWdBX(zlL11uu>H{G03l24)npWK?`}s$NZO&)K%r3( zladb&8YDyrV*DNUX~9A@DAk1sLkFe6Ky_OES@NP^sopS96}1&@wwpqP2#-|298OQR zKNKPiOEh(5a1_?JJi0| z*ewEJ@N3g4?X^m5o_ks4+c#q~hGVjUmFI;oW|23_ko? zk8a->NSr@E7MLri-eON1Duj5y*1ceo4f~p*!ad^9kL>bLVS#x1ynSkf5ZmX%nHvuC zE>sPr=Pk0AMhK%L7T?Q<$Qn&7ek>?Ei++S0jbN-G6uO zPYq#@9VU#347>-sCRC2q8mZAr2a0m#UWk#}aKkjN076O(#a+GIzG0XUA-;e2q1T5A zUyI_8?5ZyivkPkGJ7vlI8{4|ClU{R5#2Q*z8-=Tzy+S-@bl| zFxWmKM)34De$Z{njqY}{Pm2*A5q#}uVg!>oYo$G8G$@*oYd4J+;zUiZ{n8{MNc{L# z`-`K67#GHUIkZwJmgLxfA1w^j+q!UaiiV64CWy9s?aRgpHO?Hpm#o1lC z4WD+a2K|_tJuP0CBgQSKdc^dKfox*?(xEv@b$*E#qQyJrP<1lIfphHlj1|(wb6NJc z#|oV%L`$-09n>B)P6+r5X~uCvw8v>U7CTA%($s^rCrq3)HZZcc{?)FZ^56{|pCE*K z=Cs_P%u*Zu&W@`wug&I-iJ#eVx9?97+znnIcJ_A`&s&oqM0xaH!wc@7b8%-*FS}{H z;QkkiZyPU+@|b^s7pm~tu~|JRzGs%wm=h-m+P~!HTsr+=x7-bxJ#rUkc6CL+KUJ6} zAg8#C^Ka_?O@^!9ZuZK=zoGukDZ(gsOSk4WW%MXs#Sth%@)zQHXSICWjrdz; z_Q>6LCMTXc%V7L-i@%jD#EX+#?cXO0aq8P=^vKwM24xJgmroSjy=`4NvHg}f5Wl`s zDtOqVCka!<%rEWtP7+3l-=*8PPZBzBI(RLei>Ssj4_B&XjS&69Z%^j~{_$`+bB{3} zJL&(5d0dK6YLA*E7=@Pz?MPu-53GZxDOi8Wc47^?h&zYjS?G@S?=+FPpuqm?WMQm& zQCg3RdZkfChyA5#i7&*x_bYksGWN(5Wc(lUtWWKcXGE%!=T97D=OU8^5By(5#y*vD z^zRfI?~l57LpXIqgi%PQ)23Jtoh4++4^Fk`8-;;bF1Oo^LVU=Kw{AGH<>6DEKb~rA z#8y&Ve}Nxrz@@J8$|LqKjlvkQV2a%@O)w7K4|5cXWatzc`n0%Tk%lqM|W+5mf%QzqMIOcMfq zE_9*k+-G5bV45()d&p$;YNM3qlL8-1w*1y?`$yA+L|q5O96vN6oi)i>_P}%@x_3$n zCpTN(kz&tI7e=^#*h@$e?0;N^`reT)`1YIlQKz=Cv?eJw$jNl!j!}oP`bF2oJh2dl zcAeZ(ru;C5Wi76I5OIHg18%yI-TGs;kIO0Fb+a#i7O{?s8&k#n5 zEy-L(|1m`HvRBR!+D_aGK4|GMEj@=A!VSGbNVK^YUA##Ox?H3+<)h)Vg{V`igL4POWz z{VsIt71{$uJbgVwcpzmhmM5uOO!Il2_Lls)TQF^}?hBzodpF7d`u}Kq6S%61_kWx- zEP|q36ciN|755Fr9T!A#1-+=a@1`OyX@Z$c7eh+CUd6P=T*@^mm+X@Znk9yc7H&yO zsikE#C>AamnRuRADQ!YSIw)>O z+~9)4Yt_4oYY)R3MtqU>5h0Mdgzq1ONwzl^)3~;+*2YqnW*!YBd%=n_yCocxKD5k;Y%5}g^rh8A@^xH@%+$!{IGb$&fGl$25cQ;t z>P>6s1Zy!!#tqU2s|k71J4E&M5Ur(enC5Fs>!^Bo+T>~zQO+RBiJ)vt%Y+p)%bC^m z;&3~&Vzc>D{zr~Q(#{*37d#s#gZh|7g9w+qoM{mYG|HQWud4@D13W62#ly~|6yrZ6 z5g)tInm7`aspQA=+Hp!X%f>diJK9D*A`JLLG+&!700is@Ww-$|aP5U(KNUTXB!m)f zqu}Bzz{q+Pz&k6)hC!l-`irq~*TnLMfbYqGS{j?wKt~kt9cfi659Wt|3s$dd&A*IO zYFj8L>CrdEO2kTi-oWpz#eFd?5qfY_u3|XH(v(mnE1ybgP3btLJ;Q0=V)@so+UO!D z^HEr0yjTs7+_V>%?pKQGnS*d_vIZrsa&bPjjO$=JZAY=$G^YEDs?zrbrdKY-^g)9R zOb;l7>D@-FOdqe^(@h{m{ZuuJ@@R7gIB5B*W)}B5x_D?z$A|p|@F<(7Z+=p=PbH0PW~8Oms&koXoz zaW_E$%4n#qOJU^tfYKOgBNAj(9V19SJi*ykMSto00!G?8Fk(@qb1Eo1q;q>0jNsO| zzv$q1J*V9zs%BZIJ{J(WiwDA~EJe z(hUxXq`@i*_Mq8nEZqugVY{BC0AV6P{I*jEM1;mtk0GT1Q6J|v0T786i2V|zip+Kq z`BX=WceNc=IIx4mz z)o7uVW)nxW9$K_M6zvM~7>RkSg#aY23S&7$hhw?!1V>*4h_a8Mq%OE3n__X=pU5n{7-B&yRSRqAh4s=uQ`*21956VBoJd3>(S>MJY>&diGCVu78X|@O#%)yi>dH1 z!c{|Sf5=oFt?xH=p!KuuDq6pxZV&u*hd|Rn(zrABt*Wx<9t2L|(nwH%B(pd~SzBU# z8&FV1*&vPeW=z}aqRa!eAzqd%RXW_vDsCbv@?YEZ$Z=ZaDtcrvOUl7EE|CXY^DHC? zV<>i(BlZw2_7!TABt>y`Oh@EhuxidsI%xI_~U*D6?SheAf9U~)!{SQpHpO@^$ahup24f1x;7j zjS`b2Q4MvY%@$YK{RJwjnxj%prgvSX9czT$H{@f4-6*tC1G)&GD9m_Vj{~j4;Groj z6U?F_JS+$^(cmjvmUz^vOxP8mIqR^)WHWLq71$nIRoIQBo*tZ91Noux`%P(;xLE{i zpWKW37I~{4c`{`uN5&-J zOmPBd9NGf`2kmdFQ#AF1D}@tbR~!h@0dj6GN+$s_O$SIKi7Fi+38eti0=j|`AbWdB z)qA?yr%DMWUYiS@%oQPtB3e?_5HbT)jdG~~REz)_LGL<1W*Gspk9>>(>59f^;Is-5 z%hQ)}xifSigO7%gIc8Ceo)GmhSCzPhIVEUFM)gNB&+7x7d9P^o9~x7Nc|GMisLs53 zD)U|<=2_0Zug6Z(V*d_ZK(c-wanDCaCGI6VxwoUE-t6Z)nYS8_6iiJ0?gi#mnS;uZ z%zIU5-u@)2Ig8f37nI`OJap_v?mdi>+TYHtY5O zhF1TH)XKG{mqdMGx**A`b1zlp-W=kdpCj@zEpiJza;nWnyQ)QuOXM^)@&bzdE%uM6 zTBP3mrWU&xeW^@3&1REA!_Ou5TWaiO6#E^DEh8`2B7deweoGTR-~KN1jXFqoYE@EX zjBrG@tk7c5*JGy>>ekDsggUDeb>Z!G)U9;sY-&2(ZE9zeKIJC$H|`GiRrqiSm65)) z3!da9+G(ULPgmR0sFum~GF&N1vElLy2p&F5M{tIY;725pbn&yM6o3z-gEs=W1KwTL zqPKbj;EtrZs}RSm)GN+EcXr0PWQ&)q2tq%k4i?-~KzkwO~9Pc97}UIg%Z zvsl}tECj!277JZHG_`1hSxkgS8ER29M4sM1y;s-KKkeI~_D`o}m$^o5kQ${F}zV(`1!~zy1@fk{#cWM{xp(Sk93h7%m4>0B7VKj zf!!Jh=Fuo07edoF{%&HYUbJ zqAF6s)1EllRMlkn+AO#b9_+l;8lv*pAJ`l~lLG4GBn^h9Pe&z4uI(7 zrI>aWmo^!h)(`Klt$x1<1WiYyw@Ac%DsGW@Nz+>We@byJNm6xk?NI~;)>{1mBh&gL zq+=um?uqZw9A0GFA+y-oKr+puXftn`(s9@@2=%& z_1W*Lt-e6^r0axfBO3CKaB%Mm+IZmx*uXu@i|p%*h-#ZYqOor(jq)ArTYgJt-%&J4 z;$B01lp`+v^#b?y(cF>b-sd{^2F#?Y)3|rcY_qtGWh+s|8U_`sI+teO7h)8MI@l+< z_oZkkscPIiUW$81K*XprcA|HkdzKSM_N|7O3;SwA7`@0o?BBdozpOTQ5*yK7Jv8o} zGK(yDyvRL^*hE7DZRVx8rh|Q+@2Kpn)dRUjqlt&0EG%pd_T7C5+fT41V(ugbqFD5k zqYP<%evCHQ$Tp-^$7#`YD$PRB@=2~WPvmu?>IkKwtba86KP;?(Ig9a*0B6KN@{V2y z``4%$q5)rmx=4}{3o!Mdj?Er*bTCKb=QkpIii0`X>Qr)`SP3C%OQU!odJaS>w46Gq z*NOB$Td{-WHjs487+gS5iiMyjMG5)XUP3+`{1MC0-5HpprEtkC%=KKDqvh^fv*_UJ zfznwhQEzv>2LMBmKxND4^3`L8D^uo@dJf-_Vkcq-2jf3pL)6?2nltl@n4{>^!AUmANe1tjlQ(`sAR#LudS8zz2{wq>1oLrwgqn)pZLkyN#T z9o6A1+>dCDYQb+U%YLm&0}GOHR!cUuRh4x+Dd0tI0woI|Q6=fmy4qtFpOO5cv4_Nv z#NRLCPdHl7fTKT)Wz_G>2^hTI5}s>_wq#C!Bki#c+P9swM-c5jI&FgXuVS4}`nG7| zO8VoB=XMKK|ATdgOnW*A|K=p@MufABgnt)Zbi%)hOR|F`#>zYo24Rv}8;o@KLTss( zff;;Nku!@-3uIHmNh9GxaT{*3GK6@|mGG0*Ae@E_;{1C}$PsEklMzIh_NX}|+ZM@E zv6|DbT6J}$HJ<`kmDWeFBCq)tkt_S06ukEqHQTzm;gBG|H|jlA&yi3UP6#)^)k_qe z1d%STW2%zSkf@qSIa5Q-cMufUa0OFg_vVOEN>3vGi+ih3|7w-o(R$hnD6g(P%iK2o zLGNtu;^2Q|fco20jggTMRC2;aS#u=$NLz}XfC`ZPZ4t6dVpZIE2~Kjd7Nx!Ckf`d^ z@!oJLe@V!zBE1Ea0!>}ggytXOpYd>0$4Ht;|5KcjR5gKH>=5Z{KQRJC)DA@@TF{1a zMLo&`gj9PJ%p12xF#8+}4vdqF(9o5#(GwcvIfX=|N6?6Z%aZ4RK_hbY&@%KG3uN$c zcD5@2kU}>a$7p@++X2Kpi{#!e8zJU^I4-+5S@Dn1?h2PT{V%L*j|eK~{?<4*6sm&@ z=jIjYoGWp1u2LiLpQ5cjer_ zA__EJIrmgll0>zNdPe$}+8e8^+bXG&E}&AaOYf3(z`v7q3*jsS=$!L`U@65p^j`{z zSn+L*vY3a1zK@WH#W^C@GUaX-Ti{a$_m8G2y>tqrohD$1<_R9I2=8riTZbO@oYkYqX7b{ zUgFy^#1_f}UdxH?kP6frNRS=E@J8b;JiW!0i3n@a+h+Mv46YtVl$=fTy;h|eTtQ4h zYOW0S6|IS?u5DEWQ6qm(f{3wc_G%@|Pi@oB$l%Qs&N%jL4w+Vp!HDB;7A5!~(cqy; zjml>6ldFfu+$v^q8Xkxnpw@~-v{_+Xqo%$a-SPpkk;W$)v;Q;^vt_sLfzad~OtN0> za^oOIiC_KjTX>`4i%h>w!q%FuGd)mpQ?65g*dFC~Vfv|jVtVsLoC1j}r=LQ=W3*cy zZnX7G4t9pr2Ld3!tnSoBXxm!$L2lz?s#sb-2@)ZVkU89IPQebeAp1>eUk^L(8>7pD zmcY6UCs|o8LGAFX15K7(N5B;jA+C!elti_HW_2+Z5{IB9@jVA4IET(&L-f%6B+Q1w zPZdoyo&D?}2yvS3$94&)FshM8{lB^|=TE>*_PI4h0GgQw+4q)HIx@*s(yGbiAmLYu zYN1Hyy|KYX$uz$DJqD!oFd+Fa;>W^G z7XZ8!x~8g4lOkh?3XkM1Yr&Y6;l>EIO4X};>J^4+A$D@9RtfHcxdOaRNFA=r*Fse1u@GQfqgoK`Ott%11qv523r)??l{L}=VhF)Ym z-d)rL%hPtE8Hl=~r@i=l6j9Zf)u9x6R!FK&HK9DcOYn3uf@d;08^QAct;&EA0*?hn zi7<;V(VZK7H1u@AG?}Z1mZ7fD3E@#%%AjAE0|}~w=VW;YcrN0uu+lpCQ{tQ@B~?cc z_6O_e*+|mRp$n)2@bGy85UB&*DWF3cA5;r1xWa0o{NfEtO?VyKb z75ER|UT_i}psyHtbr`*f3$LC=iBu4EWmQixNK(~m275+adi2CL3MwpcA% z7a#1S^GdXSL+#@GwWO@e&gb|czfWktR45}tpYsBj%4LHPT`8X_TkN_B1x+%xh)LSxkjz~qJGh8U7SabXZ zaC|u!Wg~D{o|<)Zj2;d*9Ub^qPn-Nw!BN|x4XAv4A6+7d4>tA!i6H6g&W79%RMmz&Ork^TVz|f&r}^j|2u>J+uss zGF!wq@F@cwpFnu%4cWb%4vs><$1nB*axi_IX0oJGKiUa`A86?9XvYA-KVKU`Fb4ZS z47vb;;5C&Ds&=df0xoI5VT=ZXLy`u8U|eYs45+SyV7vx`PH>@+BIU~$K=6f`)}N$^ zn4p7TRJ;KM6H9@hRwz6T(tLA$34%#R5KISAR}f4V?IcmH&R=o?fyFM)fQnH>^rd$x z&8Hecu$7#RAPA!o$qN!9!7QGl(>8c$Aee3zzqoo(hDiP=n#I@fDFX!iAeD3wFpR=f zwY0F(qZg&QiKO|LOLP$6D@qhXcH`gEAl?Xqk~0JXlH@bh@t2P#l*Pr@%%ZNVhgL%i&B7ZVVCSO3uDtadN)?M_N!`UdOBOp>(uEqggC*+LxDl8Y z(RNvYGdQ8Z*)nAVFIXfAA%WL5#y+M2J}pZvp^-w6j8DxHZHiWkNwuTdvi*U2qfBuw z6>o&2gPj(U_c>Z;3?Ss-_)-xRON`Pu{)Q+7JqO31{%GWQst6`|uFLK;mE#si&ptkc zDCsN@6F;FRbLIG(Vs}hwj=v>djU%dB1urkf@$!zmE)8?diGz)-N^D+ z(C@y;@s(IEMjveO(7q0^Malnx!* zL83#4C>RrKr2+Tfvyo_$y?bM??N^odz)fJYh7c^%SD6Ezm`?Nche#Ln-@ zDt7FEmd2NtFyW+OrwJrc;TM&i*l~f*48&ETv)>7wH__obp@aTsr#v@E?h=H!`P4YE_o{|O}KGpIuNz$M`?6cCU<=;TMI#X}}RZaccuW+G|qWOzBncmx> zS{~Ga;xzz8*MV}#02IQ>+3Hj;PMq|^JBS}Ps+NHu>WY&raf@V`-bEd8!3k8$BuUi? zlt)1bErEg!AB=n-{rj7=mjH~N` zp8epYgWz;25S*z-_22|SU%Vr7t`P(Qpy>*NGvX#mB^?B3br3-Q$$ca9BvmH}9#*AX ztpnk2j39`iU`7yJL+f}E1n10R7nbM^9-6SgRb8uGJS=*S@Bw==e98d9NC+q$1ba)U z@Dc<^e*Z5Zm_Anr!9^zsmZ5ug0m1fT5(E})!ugUB1f*k%`YIXJz_%I*dPo{@xTN=H zk_Lg`a%m9!r7lOnD_;Y_FL0rdqWob42rTN9;j}2KZUVt~ItV=az)1(el~N$c4WxQ- zf}juH5&5bS1XV!O6$Az1CrAee2)+kVxwRZgN)WsvsX9UM03Edof@?+)44_~}5d47F zVc@kU32vChhtFL+G!Xn~7B=0(g4IdfNT_ugKbb`me98d92uL3t1bZG+;Ux&NumoD|C^W=O%%0){tk*%8~C&a`=*|Ogi*^| zLhrKi6*}wvy0}8l#(JNEe7{)lcg>>pGZzo7-iyp4$kn6Z8Ssbl-ZKk3b;Gfn@bZUP zRRc#KXjPfMq)608r%N}wYcDQv8I+JMQgX%OIs}wl$+G+@<|4J>8sB#MOLDq6wuTK84E2`K%NYH>cwdkHrwB)E z>o8mfN_Y?rF3Gl!G#=aeI8pRRM{g#bqdJXuQ$|dCEFfyABoB8b6NY)Ew^E34^!8#OHv9TMXOIJ{RgeE2j zJyVdby3Zc2f6>xDMTc(!&>%`ENt-vU>IC8fyeABmImZ$kW$&@*CF#bfHTgGU?tqV| zBgqwqO0d??az%#Mpe(Aw3u;Xwk1f+Hmlv#1F@ z!r5pXOZ%Q?!CZV~NfE^h*M$CKj3TQR9_7s9qN|5i{W#<0Fg$GXS~#--`r8P1mE~nr1ypG3CD0 zoPh5^>Xm8MuL1>htl#XwIzFUHEbf7JS!}y0nnn=8o8X5p;2^hC<#wm2DgrG}X?q1p zT^%edP(?=hO$WNV%I`|zN@uvaY^U-Q+ay&@eq%4DzJenW+fEX7_M8VRQm&vrS)O8F zslG#3Hkt}Ds4G}GB#;x6GB^qpU>1}AcJa{KVIYq4boJ1(g(D$a!^6;j()bc3r{qLs z8aruAIaB|nT9C|NltA6443Q!GHYuo1pG6V`@qQshIzb?1nf*UfHB%)UpimvbMGfS~v9+SbH<-i1*nb2{hl;8p zf)`L3WX4;c#jKz8is~u0lPYh)eRn&I^M*A=QAa8nX#&CMtXBD=HlPSx0g7D|fm)&p zdFhHkol;n8Po4%{;82CqSPBtubj13FE12qvfl?}JT*Dp%7ckL*^hR}HBE3s>AhZ;g z4$F`v51fLpC(2L?OBNIpCsp|U<>I4(2`5!Ne&phzWvj7S+<=Fw6f_YtfgY_=Z~5p} zbdD$Sf>m!won^Ps@Sz_pBLN^czL$`6PMr@B>K%Lsxr>A9y(#LwI^`d7X(B`c>RlB* z@N0$*-L+7+*p@xSK@fYmCB55-q(i!+tVhBwVl|iZn7>M%Xim+~aNyNjv)tU@@o z-L-JGpN~MYbo)8=i7rH2QouC1f1M^H#y)>;7YlH$tcwgiBYtg%V9~U*xfMzyW#}7_ zfDYJ)m4bb=k3RO)x41+09#H#pE`e#V?`RgD4_u;X+3I8#MfY7~sLEt1AkP6@ zI+N?(q5MiFx1a0~p#%KLRdO>00`G1$afJ5oi*+^Z_PZ7AfeARBPV~X5vn@7H)Ingw zp>lMDE*&a&M*?X%Y@vnhm2~IiNoI z{`Zus-Of3W@`{tkmbo5*XZ_P4&ByHUe)@Ht`fM{X!?q;HXbKK%7>WLbRh(+>X-8Ux;_@JqUfK(jrH=se__oO^KVM<;Ig>$-g{^9U|gRd<*B{2wdX--$tZz=!q zt%#{KctA{`@xlp&&0;*7D?}r<(I5Jaz)2qB8`K>lR00g`$tOh-#%Wn!f328ua0PGb z5`lA5@)O-~G$Nkn1iCjR;SB0zn5fc;giFxf;YT--PGiHy{uw%P%UxS)KP^N>Y=OFi3s9gen6xCRL!F2+-`bk{`XgbZ@sf`{llT)O6Z z&crc|;fg!f2`!cTMf)hXgzS6>?(OQGNftEpBXwo7P9`Ys;tySV6QH@@5J<S5zrlwrgDmVJVt}Af}q;*cH87JQ3R?XA6m*c)XTRzuw{YU(p50u88 z{+R`6yhPVDl%U5|PftHJL}ymTggNjMZ6)_S#LDdF_VMA_4xZBs%NuXndA!SRt$Xk1u~gIqn_#MxS; zWMRKEW)r=S21Mdw0`X25n)T7PkZKxS>7>oD))FPQ=&Xd7GAPt(baHgqq9xWfQ*^Xs zDH*Ni%Bu@Yw%o0rh`YawPJ1yikfvXwi_kNr_x4W5e8_xn>+2p7uX`s&SmV7{u;t~f zQQp@6zUh6u(+ByUW^TDrXne?26#7bJrniTQ3e+tfLn1e~k?7-Ok$_6;`Qc(BhHr-Q z>b~M^uxo*N&+STRd96t3o_Xsbtg6XaB)a#O^X*C)v;54@ZddBEF+cO7?aH_|S_At1 zmRdEv8@nbbyWC^&q>KgOSaY$IFW#Xv(^7l0SgpW-Dt|b*y0j<*niVDZ!wx0U=dVAZ zF9e8xZ}QlkN>}dyoL`^o<`Ku=-l;_UPJ$=yd9nv?!kO^Dz=iq$$(w$tG+=-K#N$51 z>9ptm;Ilte;ytEAPV*z1l*an;piw{Zk`I-U5#Rr)W-dU*sd`ed>&f!2tkjR1{kbw7 zHQTgGq%-RfK-y`qyOf^F1YR*yY2v@x=--9P)hAQw=zr!1+y^k%JJEZpUzO;5k#&P- zWTHDuzrl}ZBLCtd|1DEVVnx^an2(fRN*BKMBiubu`#Nv>u~O4xcr4Bm?e{SbE8lyK zZ~Ryp%7$O#_diyu`w~NNCloGCZgY)S-Hj_CR^8Ho}__m?Q|fA3Z%`5d?*uN}?2!6)reCgafL(|eRq zr47HkM+sAKRPJ7!X8g2($Lv*xC|&uMy~uw@{_9?)L+wfhY98oHad8>?b$WERE%uBp zI@>IIwc(xjDYb{IK>QBfsW{vDxjo~R>x${qYl>+Hj2oR_DgShN5ca17Ib{h0Or{R> zKJDcu#_><~DRswyzeB9wL!H1i>fW}V9_CzkI@upOg`2#pH?WvQuX_w;9}&pf$2YyF zudQc5ZcmfE06+~F0C7#>a0D7WMxX=Fb#L6loyUBlH0t@kK#m{!1Xp29y}}=TqQuHG zV8@Sh$U(JBNiB*bc8uAtH0;{85K!vvZS_lC;NfQVPp*~75)vTB?1ORh7cR5tg3By+ ze5b=aWr?qw-?HTpZ3s3qk{{o%v}doL=YQ{4MzcAQeCVf2z3NGbZdL4N4=Zl-vc-f( z_D+XId~lDi{!|%4!ES#F&{fXoo&TdmvIUX+=6@6@A^*We1FskH{r>?1RL2&q>t*iu znNl-oF=!T^^>TAlbAY26CkonQ`}HJc--P{<{45CcxuQ~Df;ywiI@CHJcM$F>afzXLOzChk$21CnC!3l+QZ6a-*l*V%X`>Yc*HMnz+cHy z2DBy@T&iYT9tGFf<>Vjrd{|)!D#kwF*FN7{+^9=8%4sDCb2t3Iduc(<79*V40b93OQAnL3rn-#Vf+s=R74ias>7 zR~(WJ!nEP4xjg%bQhUtIJV$j^NH~MS-YuurriltmNQw#Vh3jhaM3f`s)C_+>_rsqs z3i}xn;{m*e7h<6Bl#^&Q{66+!lYdFqw zHlZ+sd9!26)QS~|y=t_KpZWX8lxo4{uyG@OzDIid^!d1y7-J16`>}aY^4-K9e(9Lf zqJHQ-w8C)fd8-$O&%?wg4Z+lo_Vyy`EG*vkaM9^3uloh=NBHv$pYes#+kMv=x3xVQ z2353%Cx#3YZ=R7os8rKOjm3-Bl?ReQ7XzC;w@=NeSEQH*z>J3Zrg!?yBzEB|7z8DTU_&Cse8rLvG(gCU!4c2xI2iB@ zR4O2zhE03KKIkIA9&ScTxVV~hs+S1oLdkT1dV87iO6<+CF_GX^16Jj`gAi7?Y(UNe|k zu+M|hYxn=Q3u*p8?n5FW0gAGfM*aR5`Ve$UCXgF*0+%NA`i^fsp#-y+Pw?X>a8pP7 z=e*)qO7&{hiyeLE(xQ`KiFPV_*RPaVW^Tw=euX<5@SF3Ma=>THBiZSvJmM)i%4@z! zs5|%biRI!%zt6enNo6C;>%q63RJvNAPMeQ*fdoS9z!!m;;uvP{B#$#Sy?O9OH@6k> z4{Wg+;wDnH7F#dtYPM|w4WKt1$8Z>50N7~00Av)=QN;=DOwyKvZ@M2!5s#-ehlx**^N&s|wdG0g5)?qhFpQC*QusoU z_+>znyvJ{!hT7AXH_26AR&Mk6a&eUZsxNt7uF}{YO`89mt2F7{`%9Gm42E*h*ecq3 z)K9&6GrjLq8kN{(yN5`|tV0MwAq+W(XUic=uX=pc8KqV03tz|z82gpC7D2_R+V;me zxr_NujkQP5DAOwa+Y~GK%P^G!eSGy1-s-H= z23X2y!Ykz|gMF`KO-7xe5p(&>JY^6=HonNiWimPY`Q1FFX64@Z9ngfTBkybpI;V_f z)0*>F&nXQCWSdD?jKU0&`6zwM2K?YjGFkjZ3o9g2@-$RfAwQqlJGH&@VwJ*Zl|6pCZoy3dvBPgFe?mx&J3J4 zW`IUkG`^q-7o0m9&BHG!hm^Ja&IP4L)yAhV!tUb{bhlEo`ke&U*gdw@O&m zwYwd?24bn*TwWgk>5@{l!Qq__QYyDt?%GA@;j4CEmVSzzO>4RC#lEuJ=M zV9IcrxHXXGOi+ObNahTS!}?fkfmqa=hu(m0oBJuR8_ObD+Nb>88_o;F27Su&ZYXub zY50&n-Z!_8VblF-$DKEzK+|!Q^HyKb-e8r$eCN8@M%|+!O9SR^a`4E@-F`U z6^tqW`1swcO4TYqI_WqDtWB;e!)q=MhFEBe&Ki|z0+Z|=U?~TS^)xSTfZMV5Usb9H zRD9^*h%*~Et|~oP?YDVI0kToJhQ}A+-mEY7a%%zZ;EUYJD}9gjk7V+8-z&FGni`v0 z$ovjTRkq0wN+0QJPreQP7OrEV;HLbbJT5bAkE-5o6h#@*1IemZ0M@u;I~W_2Rkxda46gdS+FA>Stvj^C{$kzbMfY>Ot07qaV>^ z;Bb%BY|I8>gG5DD09r2$vnQ7f5w!*B&5!6}LrlVWyNMe<&+TeQp*_{6mSU_cy}#J- zqcUC*{K=0>Nar?ZK*$dXK?}EzEs7fw@l{e4>qXHNa*>ipCStw8LQ!26lrjSXcLM$X z?i^O9_Q>DRnJ3@G@|*Y(`wMBVROCU_h-_>pke8N}3C$xv0h+#5z?n#N(Lm&utr|2r zEIKqJZ(`)R`XC>J-+(WTCGpjS#)_ND$V#0mQ_n|qE{Jnm`2Cwoc;n;91I7WTJ!)&$ z?_qp~>-W5eh(ETV(_5^Deq{@fxrGZWCptp&Pj4xKeso`-Bf{%jsAp^#P^Q$nb4%%8 zNtlp<9V*GiA5aE@`M95zYUO8trstvzy4DYfZY{p$7i9#C+{T~$qSUNbf14EbDVBe&EC1s*L__(lJnUDcwp2Ode#K>vo44@Ia9~Te@Gt0h>=u55 ze!Fhr&wf>!1Z;ZbXx>YUaKy8^Q1lx}9pA?n|E3(Ra|OqO*wV(Uni*ZBLW?%1rGp|q zs?6hmS0cv5U=Kjb613B0r$GZ;yM`&s)Dl0xWry&d=$RXhnIP&`3lf5&&`6>&(N4X1 zksp3e!&BVx$6{7=0i>^wInmFi9;}5uu2J5+=yzxeZF}$f$nI3VQ{B8fy_1h-3REX-rLFZ9zcGaUcS!UKANGVDrP{G^wQFG!;3BY zn)Nb>LIjVm;+DUZw!!Pe$3!cALE+gExgI!N(fsJ#RvSY^sDu# zAv0lIo{gU@TDVB>(-?D6@&@jj8T`|~m8vz|Q5Wc!a-4B+iwqO-cvK)LOJ4K4mV(?nfUzxzujSm!~6r&2yPef z`!dX1FdyI@I_a8!lsY{5A7!rpmqw_{OZEQ#N0|{ild3%WHZ5%5PV_OKjxKT&!`>t` zkTVH`taSe76Q!Mdoc$U9@(FahKUeY_Pn4RLr;SmyS%{yLbw)l5uy4Oi5%-yYrLJlpHpt8^7ei0{G_V zSh>lJ;zyq=!T!a@I+OQ7{{CEvXZySIZgwTaXHQ!Ru}y9HG&?G2&XZ^S1G|#WPIe($ zH7fhPwF2{0euq*{ssWF+ z+o^fC{-x)=mJD6Tv{DVQTqWw;>s?RK{PvNW2R5k#U+Kw0eKx6~*0oKuiE@N~!e^QQ3ua({w zc^v4Q`cL`fAbaoNHrctogD4zIlhBK&c(Wje-woc(%vf7q-oN+ul=#Yb0QeVg{fva_|fZ)!<-zh!m6 zh1BdHQ%i>Uy;Tc#gf8wWL!ZG9`i@S+MV(5u29&+LU)_)=e1k2mpUf$rz;J>xxm zfr>S-yza{)-3P*Q0v4|d_heXGMG9My)$}@31c$X;I?RNFds@*mzM>-HM8R^dBAd@X zYRRK3u@P)gOa4J6w%z^fJI{EuAB%Bc1j{-<*2p~$mM{HSUw1E9d`v9L{Y2q2KG4K^ zxi5s}9TRXC0ZYCKVT#2wUdJDnovlMk6iz8|JfS|jo2fVK(W-p{*>Qm!QQl8>I++P}w?44f zRqbZ7(^+hA-$HhLOHTG;vOiPN8QB+hEXk952HAgA?KjE(JvQHwM_50+oKrm(ko|;e zKSOrR2T_=y{;+?f+9!}5sxi4|l6{S8FClxHYVSJ$b+s4)){|u(EP^bFuyl-pWg;xg zV=S2Eo!e7M9+yEFeo)ShC5|78cV$Sen5yfh_f4$s|j4Sc=I)(y-$oSjxeY z0*jO}F53xc0GpGsJd&Aq!yJxe7E=x^7htZz{0{RF#tu`V2QyWJsSnc%CIY4p%n+FI zFf(9Yg-L~33G)uj`!Ks;_QM>3`3mM6n0%NUFu%e42~z^ovpX}biwtF^XC0Yo0bcgO zoPf!P`5nd^nec~EqIk0$7$&qcGfji}80H>KSOhc8gIOHO2Ucaf+^hZa zjF(hpBiY6VYKJ(j8td*p_2*~&qiQUer3~V^)mU99TZPqF3QG;;GlC#hOfU0eK`hw+ z!E99^V^oi6BASjZ3}TSQ_ZIU%s2y4*rcsX_6Cwd1qI^q}!v)F5JIf;2ev)EXUKMY}W z+b_qiKWi-Rgl$U-<7hDqsS#AE;?%j7`Xz?$ARA4LrlK~~WfNK75&T(QC={Dp@wj>{ zG;msdIcK^hAIX#Q}8PiHP2z>>2W&xvK#Le%HF9w8LI=7$xrBG9o&c< z9>VX2vKH)7EncGm>lEly1DeRPL`)iBE{5h14kY9alC!w%r|-C>0h`hO!IftiqSN+M zF^$n^T`ntKCs%BV&&O}!U`$damN(GI)@U^Pj(2Ft#=B=?(%`*@EF^F(R*_RrB7@k` zX``>Lup|@8&o^Y9>VNkgr9*C_zk+?RIO1MTZa6ZAaXw8ivs(GQMF=8_^AnBO z?C`z$j*QlGqvB?W4djGezK!2P6BtFaB@TkVJye3fe#>8L%o3Si@=4!vj0F;zUW%VC zaZ3}tduZXuT;i-Ln_}5nX#&@74*r`Y1x!xdZbQiK=Z)r`fkUq|!5nz7z&^Jw0+IqSy;kLJsp zvljaBICwPwvN>zmSo6(gOI6(~6d%&Ho~|xgQ9bE0q{?M^_C6LwTC(nJZykQAC9BQuRps|vvW{%+XS`V})`QI% z$Y-}g|1oGKKi-OUtnq6sa1ebUHPXXW=py64aYSfh6ra_a)nuWo_=?sb z)Mf?0-Wr4gYV#+pSyz@8!#lMBp=IfOMH^)3$pB}Ddb?AGvSo%IbmQ0CAVZ%I;O^m| zb7VP>568G>TW`KH9PwK(=QqMxc(vf(&iEy$HyQbAXWpnS3t_)T^L}j+dEQ%mV_O!> zUh2p1v_<60Z}NzCNc{W0&dBe8^S1cgGXC5MZfl3cH}vHPut?6l-{fBH*%5~Jd7?cU z{F^6vL3@_QE>z;?-PbNJ~FY(~iLlOzzb zAQDALF@5kJV!^D9S=ZrwwU&~8SO6S5PB-$EP7 zyt0b4Bby)XtcoN_ux>W*8lj3L`TqWKo*e;^^gHJNS41B#LnK*=^SVe%q9TmO5J?kB z^llb&N6|oU@ier6@sKU!m}wA<*Fo&VIIBvN32(Q+jSO6($ zcEXIw__#=HA|Ay%4hdv^#Zp*4&oexpScyk#`M|D zv=qh$Sub)syPO*MwEoq#!r+4atr*28{ zYK5N>)u(dLXx6J*6{siai^9;mLA*gMV3DjqJb#r>h{nvsww`=pH0uF<{a7?>#5(jm z{A)DxQdrk0ey=xc_`kGSD3~@2^iUZPw_kCMZ3IO_#IlFAw6x&lKK6go5L3u`TZD- zihOuTEHs4N2$$9EH4!eW+eGevy1EUNxvp+kh>)w>>{e$UF_6^)$VU#u^wKm;uMUK+ z(x)@OKah1)+;~&;=WIlOK6Vg>up2w^)q_}_E;CUh)IaFkpTyqHkgg*(LAq*xDu&HQ z{_Eq)JAFXBn^`BX(3!w(PrhX^3*;?^u!?WD z^a_|`q!y}=bmP!jX3pS;;y`Wo3|<_^hO(d;y!T+XiY-s%R|d0AEH;t*4`J>6HybHP z(J_1od!Ln?#s40Hv0#Vj>J)=VXTMG$~4)O7N_wM!?0l`qYZ67t^4MHw2p|Le~Xr*Wy zsit>_s1K2%K1(#%$Mzh7js8k=Gi- zg6jR+T(4to5dR|K;bYhq)~=o_VdV_}codt(5>tupTiiO1ja8EP^U;9!FdjUHRd4j9 ziG#E*ZSW=Df1!V{jw^juFhCU4?v?V~e-aBUqcYSy*D6I* zj8ti^SfbLL@e*jR8==yiKSHHhgDX=&bJhzL+-M5RWVYe_(iEVI#?8J{**tb*7+*RS z6>M3^|D4KxVyoi$#c8PEIq_@ftPf~Vgs*V}>gpAtHq^Z@l1^ZoS;rClbb^z2q1uX*# zBL?$mblUu#KB&CutZ+?`Rh!M~vd}@i^K3SORd2?>T!f|j1G6zRc(y4on$0=~xIHs8 zFnyy?=a<{dxKpSr94J$?RS7$V29BbgLiLu6#CToZ zDa1x=JB5lHK~K27NR#aJ)m=bHS@}qugM4_5;$P2U%{sqT9<@_OKI+Ubm5)krFyy1o zNXkdefg>FGxQr~x9ZM$~A|D4A^67I~;_QE90N?cJr>VabyXRm_y*WMl(P^k4epe#B zMQ4opoXJ0x8>XsZ!&JRw0&3}9TX58~K)bd;+I82~YrMxRY|`u||Icau0DY>gGzTY@ zk!Dvo8qyqy&v#wYtSHl*JPYoaul;YuT=-v-d}Cf2NzQ_!A<5T=l}fVf0)A^A3k--X zi@D{KFeyHL7@v~F!r95bd_xjz-e@X5H^4`fXpA_kiuS;LV-|zqMyZ@1j{RuRHpRqv zelLmDC?EK$t{X@QO)#dSPg-|Q#(1xDJYSd0>PGe%0O}416+3u1elDddC{^dqyZ&(0 z3s*Emj2>#YuT9xs%|rOjf40`txa_@`o#wOQ<;J8yF&ks%d_MH8&}N5!n9uUu{aqU&mVVv8Ak5IRYyr2~SzXy0B@rWW#6g`tX89Na_%RsXGXB_?oWR zMQThYL=zqT7qe(q&6lrP%mOM8UxGP;K6K-bVzvzo5?5RB!;9JcfblUjY(I->4cVTC zV=`B6{;OQ^xk0RS970)7Sb}-1p}Tqd61LaUuos=@SB$++w&>!c>OSoUfX@s2v~7SZ zxL}Lc_i5M1gmU0+W-^+;K4zvBFf(BCVRS$0kJY{?%$OhFVIK5VFF*1+^qb$i^50)) zt;%3eBMbVFg7a;%Fh$8L)m-n?rH;PL(< zo|3|X>O8;#FmX)H?tdZkFrqY>&&%<9MCOl$l1#HGCz;gSC1~gJvv%xh+C3LDsNVRR zDfKLivj;wcn&~*>^c>j1Nf>` z*1YL#jF`cT^azZ3)D5U6?Nfyz!^M?AEygg>CxCZ(i&by+!2&4oiPQB)s&NC``%o|H zKKZ8roArtHzCDokEi_-oY6gwL#EM*h@r}5jTp{6RBU-uI0X1a&GFGkf4$M1JH6@ft z_x*5RzKnHNrt&^%tW$aHTi1pU+$#+l^3U$PZyM_%wOT08J=kwm_=PmKpB-j=>6>VM z>lokhCTm&cT4l<8fHfL*R_vaOGyE&dGB=~6oBnH=Eov-887AgcmWB4|lZ--Fo{EOp zayhFX)C{k(oA%Z}TTs{W`1Iv$I6Icazgo^3((2!GmNCLT34vpuT66Jj-MP_X5)>XP zY}WpduyY4B^_qvZoOKQ)p*^r|Wg14>uUJdc>`9gJwWDH%qTqDLN2bH>23ftV=eIB4 z!7rt=fQmctG4bQ%AIIfHR0Q}Rq_gfp6<)%e-wh~MfSqG2;G@d!yx$78K-s~+TEVut zBPl-3%4*~NO)Cq-&tWTTgP%KA*1!a+A{gRkWLkEzUqa>%US}n%+8M6t6}QOe4*ATK z&pq9N zF7M=W;*SbgG^&uWX$K!;Llf?Zxn~<|FEg5B!!Do^tGM4PsF;-VwyW4|iwRMaz3qW3 zVM*}uaLcv_`ofA&f0OVd(^*;+iuszvYWBbdaKgtro{4PaxhC7Qc2ZFe&@*s9J!|cu zXS+;#cHM#J)Rlo3)7^qFE!N?6(`wH%__0R2Z9gV|J+^1# z7iSf0&!hLW>rb)G)6*Mv#Z7VBN}k(KqTsonS$I;;b3Kp2M$;p?o@X>$qQ{6C*>1Th zd3Xn2ad{iPTft`JF~+kb01hW^!ofpxNGL(g99YfjQO!_UvDy27sjUCwqTWVPw|4%& zDj{;2zMKjv^S?R++Tns#{Lc*5i~!^2mv%~4OU4e~cnz!LeGzRWArB=Tw1!m;I74q8 z@esEmBu9?S^+dSW*09L()Ryd5?4J3%c+MKuy2kod2-Fk8ZfpK7sve6+c=p}teYeBE z(%Y;?b*km$8KTcWG_UUk6>>fvsSQA`$J=ajKsH5ROM+^NZ<;;XuTxh<%zB%}vkPx? zzqPC?JN!0pw3ZEI)sFF3*RqIOZrI6;rs)};9eKA3#4Z|gvabXzA^5^t*0pCag5)Xz zc*=7~ihOOcj|8q$wI^Iha<*t(EP4`2Qg@fy;5xF6vu#3CEBb=rN@95lYCdQk+gTZ2 zsTY*=t~X)1>t)3+_j-qQj-Xd}>)7J06eaZx%k?BGgtP7B^7jchH`MU5wQxv1H_~ z#*JjB%;{4EdOs_FnX}gAW*=mx1c=RDoYiZDbkI|TM?XRq?19VhiWv65zN!VQcgRc% zvR}+u0A#!8de+H8b$Drfx@>~uauNixWDi`97^)p#h9I{&qTCpC0ewAEy+hOcdWh=x zpP7WD%|hJ6_{*4^|uJt7{?t3KS?4P8KabOy3hz-cn4Jt7{yQiximuptyS zWGr^~{J#aZH+YKd*c&{O&ztgjT|NusGhaS0%4eQ@(g`;91{w0XTt1J+*R~J`dozUjYUP;&G{6ukSiM_dVvTG&w0#J0qVZ^0@;+N(Nuw6?RPEukT=0E&Iqjg}mR0VG+Al)|&DU6gJ zn+iMPw{(KbkxV5=f*zD$0VQ}BjYdsMPcXl*B#jctFAPcL<340neNW@F{H(U)5PI*^ zch9k!mI4slNRE5R@eP%Pp>%ohUqt>Myz8(Foe z#!$#|h;AKN=(ievOV`{oM7B}njubgbqmJx&7m6vAi>j7!@K&=ilmaGEzz98{R=Y$# za|)7?2VNF#me$1()rD`96}WqXv-LDzi_z)zg?mB7! zwyZ6(2A(*e#V34-tw+tsYs5rUPG!{#M+OuwM{C2L&%zY?wPCixUYHDPDK4xa4=_U9 z(bM@6wyga`>=b%jwUT9Pd@*wWV~Dx$&Oklt4vJbtQLT=sI)P(_C9)Oe7Z%g6JlU@B zS81hX`obTiZ%W~}llkJ!ta{yOM}{JZYS1K5t*26@+^nB0n^2odj$j@X>?I0zw?xmk zo_L7Xw!I6@llk+_&Z3YyH-{-tSuPA1|)$XYXe}``OQa_U+j-XJ+zi zDEbF}57XFgyODv`Pp5A_45E28fh1Lsq(MGOzUsrgW#d`3!*YIP6XTTEGoE_ql=nG~ z&vJBgoX2q{$H^SWa(sm2L*qR+Heo5*SBKh#38;PBzn<)OOr|9q3ugJ^wOMVxuW zIp<$b%FDW*?ytv@Qu*}ElXuN))an$hmfkXuwKr;e-)7M~qHbo()<*m2IQ) zLkI$li49?a89_3R7>#TZpGc66)pq#V;oD)g*rE1P;v>&*qO7+mb#h77803n6<1&-((4W>ameSZ;xLDX{TSr^o70>woyDf!3(M5i5(H zh+2=G_cv-q|5~hWo~E01En`(kxoJr&_?L-!lM3fi;nn9o_RYE|%cU{@Gxt>DE+y`v ztSVaB%E3=9tMTM-)^$uZ`1R^d%r(RuLCn-idEjl-oZ8zz)^6Ed_uE+T1hB<)$hH1ZXqy_euK(-K@inz?7; zlZZ2&I0v8g6m8K(b}VBY(cT(7NkN>&EM4o(EMnWb+|FN1IF&7=vghD?lhyMFtKM{8 zK9$#$qSa(Q{4=;~i2Fm%P5kNJSjLy^jb^BNqj>oUUOsHJ=kRN~b{!W|`OfJmKQX9$ zn78^dmfvFt<)>4=F(^OUTMX}!+EJwOg|{QVwZwO=-c$dYuI;0E41^d`8Dp(C_T`)V znAYCIKl#kN7qPN(67g2Oud~>oLxaM+QA|#?w`3&iTK7_axdl`%bPCE%;N=1@XYIc> zx$YcB2-eOtn$zR)GvlCKymIwh$_O8N6;*(51J+Qm?f3ok`ZiM4qrlrN=RtN-=0OU z>)JHWMhPle5OTxw^6R>`ZOR^H6ROPn5X&j^K7g`&bnSX{p|Z79Hk4}&n?`w~xBw9X zZa_e%OT!_6?n4C5DRtLrLj5?LDbc(1M+j1$Tp|{wI0GC{7CP7H)WE7QNRPu37Ixo#0L2X!=+O0Juxi3q1UF5kdUdi&R~#%m5~&2{Ys(caI7 zp(R0uNvGtxenItbEcDm^Jfe)ZLH)X0)_(?r2~A-2KZW}7=}qqkkHCytvlE$AdPlX_ z0Tpi2;BBqAW`TePcW4^mrPSI-d$FE!{rO`UTXlsBvMJyGfCIg{)1KtPwmk(w?F zBV8h^d<3tG)a%aGdy=!xpy@f`B1s|Vgqe7GfZOjYU+Lq2HpV&8}e$+ zv^LUQYfp?%^X=C(E3R@6r8+~&jK9$AhB{9%60>Y2C#4e!mfg+MWem$P@%WW) z@rOUMp~DOu6VSLrfY(h9q^9yRVh-vrP37541dQE;tNeX3)ydS8xjF}l1oe9GbjN^N z@4j#gLv{>>}|@`*u+R@ zh;(k4TT^ufqp@L7gGo#!vl)rm`72JENF><#Q=a~iVY&BhhBe;T2=nbE`9(x|TkmP8 zzSh*2zt={Fo0wY$+Ny8JthIGEF$Y;d8ySx?5f~YNUq)N=6G_tEAyh3>x&u>&QQsjd z^llm;U19Sx`KMZ;(=2N9|w|V2FXJK0iN)B)v0_Ix6i3*}n~w z8gm2DSa1ZDPXjHvE?d)}npFIK9f>HW=qW^lc!`!=m()lDDwJGj(j=r&&HFBqg!2^r z_|o;k+IFgImCLu&YudM}ygy>{V%Mu8zN3h za5c*qyv>`Z74DgX>qo6}aWhm{G_eNFh7w8CRUyz=u8`iDs~rfvZ>_=f=X z+`rTaMlBCezh_i8BflRY9{`yTxv!q`??fqfF`xTIso;!eJ808 z!NGNXvmvvlYe!P*rrrtlsk;8WU)5>QfKQv%;y1TC?>>Q`;G&_S=k^?B?B!XpnxIEnDAG>#Ik3U$6SdZ^{X%ix0dqOjxe< zU`EAm<-XxPa?(#efG9U|T*GQL6$@Dfnq`{@R1_NWYAR+DZ;;}eVMqB?JX6n9WG?0B z34R^h1$2CiQK91vuNY9VXF$c}`3)?isd)KFp!27IfzOyR4S6*c4Eca7mF^(vnu0sO2^g?1IJg0$ zZ>3)W@dioI^qbElz<%KY{eHSn)6Wvn!knu2!*$WZ|W-(GPG19l10ZzUMGev2CN zYWDl5@>cqtBq}Y5)Bj@jXG3h(aMWQ9wUHh8#U>Nmr1{nBl zoN*0#(VyUTf1@!+6LUOc&ZelbAv4kNJt~b?C5A}GOJ@devxdCdIpRs;)rN-uGpzWk zr6wVU{M55&&}6rE6g&{`Z{1Er`LMl%tx~K{wk~VXP@*N*wbP{0sPirX10M?W8}e#H z;g7?9eS%!hDmRh&ouLV&kfx6s(C2QZ4?8A26PWSs88wBPzl|LQn3f@=1V&B=ND7)3 znzmE4s+hLbd0bof4ewWo2Qh2vI&P`%U785yX>LDFBG}mNL>gc`zsg9=xEm1ltphGH zC~LqMY)N3MKBCp?zoe(>c;G8$4yL2Yr{fK8-&?8p67dEpPKA=|mS_@~5|L1%(dF6Y zG%9h0_Q03gWqLP0w1sF{#57#2-2z{m@#B>b-YDqWsPLeAlw3vZVNZj7j*lG|pR2ri zPHJW{jfJQ2smUP4h?ZRUX9a6oG%<_@1D+K34u4h(=Io!7Tz7!jf(jFVa@~8Z@Zi1P z`~UDfwM*CG&Wq)wKi!l*gIJkL`W%HbN*dEGz&Z!s^j4v3EAL{A^ec{1V!T9*FL6fJ zJXWCETYilCu-2P;oZY~Ac&@)(29=9hh;qaH6;yfC9XFeYE`2+RJB7G=`fDNcs1A1N zeq>9^&!zke@GUhB=o)(%ZchP%3O1zisH_NAcXonB@@2?gEZz-0 zUV?Ax>m)+Dby5C1jh$Mr$OP{6R_9VhRo;@GT7`MGn+>-T^2hk)4=4GBB;WS!jWAyY zo*dlQ>(-a@*iU_0YjsoGikpz=3UB=Ho*|#(Hps<&{=tV>*(DNn6ds|bVvRS2sZ!$= z8J2sitv9Pw43*yT%h^J5;&LEo1()M%c7A>$&6sr%p}ic|yF7v7gA2URFj_Wc&tuV4 zie@0n3I}>`c^ooOpNncqr&@YddG7i`*To$R=EnEM*iR^~?FDNovDU(4Wb*O{hkLW9 zVOeW*KWW9_GOzF(J{h$Fz48bc@HTw!LktVN4^RQnU6js;KX=2cuqayxTJ*jXmet6A z_3%`Ff!{Mcftpva+isIdhZ@ph$WhOYFLXVdCt7HLW2JRj*lY@KODrjiz;gA7XXqYX z8-18XoA~Y@_8@B|W$lB%rkRr_nu>{b^WE!mZ!#_yKsJ8Jb&HuzGcO+kHN_T_=rR&L z)i0V=5OlxKb7haNnLAy*g?;NF%t0c~lZY6f2->(*@KgIlhPmEYVB^kQpmpYzFMR6! zgIHPgGmupc-%M*M{>LN<^=`@=;x(HxU9!{dk7CUKQ9#{Xz7bxRxldnKG0l)sdvraLfF< zBN7rG!T3d`XT?4&T;--)XkQEI8;NxRvF7?@uE?h;;BA{uqp*TT;q5G% zM$~r~(%j0V=oX4%V=4slGCxhG5xv2Cf?>J$iJwVEDo!r=^-phF7^=NasFI%_NfHb! zifa)!yv5^)QzU8^qJr_YJ~ZAL>2}6=l^AarsW>~ZX0b9%k{8rQ##>IRqlG(n-?-61 zGvND(mK9TDUw}8p_&t@c=_12dPzGDAXMOECxnI}8o(+Mx8(g`#23K&kU#(VNqhDx^ zr3`#;$2$@c#t`afxIzq0qencTYwzsomk{A+_?sBQDWj3HgJ_BS=`(1NlMD6A4||pz zzyn+53cK~}-iREn32TU_ig@P3zhY9f{~8T}Y5o%9s06zqpBP*sz`tC*!3?GP8M}dz zo&)sV3HR8`bzwbYm0RddW9Zs0)F3Q@PPO>-Nx80*yUuV6)*7&WO003jx&^)$)13CB zx~HhiOT8s1hnqXl$NL(KrckuwSQ=FY-sgz~uH_7|rUzL59Ye#170fW;LJ_g0akkNn zZ8S;xCcrj;<(7J#oXfq?Qo`Qq8FLCKf zYX1iBZiz6*TSmyjPzW9F_ailb^+(gVwmI22(bJ#+AnJ) z=NdxjMzH~mjh!<;39yNrEtX-9H=1#k(K@m&z;!$4(s8cKqF?=)0j^r2qLHT<=6I|8 zT%)`L18loE+jh?Oj-SnYXMk%1=PKY_c>%6#kNI0UOY~elr0X!S|0h1%+Yl>@cow$r zagg<1U>dWPzZ2!N$*$A#X(B|iN(#LZqGwD6-kI>r$3Af<5G$+8gSg!|sbDBndoP`& zekk|WpY&|1(6#Hc)z4f=%rVQryqK8T(5dkzV$zY{7oY9<0sP^Uh%24A27iekv3Hwn zV*=>(AyF3d7o)fUwg3b*ftHBo#I=P4oGowMMEb$|>5q_KP5DQ(e5yT6)7HHUnc6~G zN^G&q!S<5I#_D2PYs2xie$=03-i;jB0UPPFoCYbXOlMN531dj=29ny}FO?Rs?C;p= z(WC6q-O;z7pFM`yYlywMpIy^~HUjm#>mG5Bu5I7H%1CRHUyE2-@(L6QdWLw;LjWH;{8u^b=e*8)Zy6=|xHp<^X`8^Ii z*tlOvKqq3TCkEY30%(`Gvcs4EGtLdHMHoHp*{G2ZBU9_Qy~Gxm4>50PY{+3mRD zgP3VtUf=Fh@jPN>XGro%91{HcAu@7>F|nAQCd+a=A6el@LL8qlqt}KGYk%#=;{Euj z*_^W)&x#hw$kjg6eE47Q*l#ZL&ot+U#(!R;^SpB)q}`A>_La27s1HxU9%w?cahn&< z9+G4&Mp7s?1`lJ=Yte$$si=5mII{7G;ouc5Mi;Mn=dP|}`?43$wD*amd`(b_KQ@}j z_T1>nC9Y_ZN^-tzm74?R6>Zay8acFXUp8Ez7U@Wot%(`<{0d`gvFF8abj}BIKI9rx zF-<%b(PG3;v0G@oqHS^!o`1U>Hp{%Cg}unr?TD_YjdZ{>)Gaib20VkA1SU-uvEz9{ zVbZI1#P(FIXqz4oFkBPh`!xC6rA#RjkmeUa?3#e#On~+TcxILV0eb$lbTS_DOM8`7 zs=YY#qZ%}$)%GUU09;9`qodpTH2(Q$dTy9?#78T)=$l4(uYZ8o7ksYU;VxaP7Y-sE zL8wExiqLwUUg(O@2SG(hKzJBo62bz6RR~20+YojmR3g+OTt>KkyD@viBI6OV5e_1g{)#<_BZO_x3queJ5K0lYK|lq<8H8Bm zrz6ncDwN%TQ2l~l*o9Dvun8dtVJbo@!bk)=LJUG{gw5c;y20~vl}^^xZt%4GR@ckD z=_S1|0O3u9WQ6T6LN_4&$-r2IBcOHVv{K*}q_-jLLZH74p0^G1*Yf!7$Xiv2`jOs^ za0KBDLQBy4AUuOGrcggt$UtN+!T<#NO97LJ!YzUG5ke7$Abl0#EJ8b^>wvQm79!B! z55RIBe-W6<;}M0Pj>mM{SBp&?!}Jj!;{ir`hM1l$rczPE^%1+HgovCDLPRC1yA;I-FdvbToCTP z@BW1T10F~mIOxHo!9yNO9{TXG;Uh*qlJe-NapNbXO`J42eah5n8PjLX%zR?j?5sI+ z=Vd=RUzB8nVl5 zZvRf#TDK$ml&&OvM^tNlif%_`oi47)fUHMg>R}-f5f6t%7&e&8C>gz)y3J}B>@kUIflkt!&>6X(4FFGfk@aM^l)W>>?BK291Of3(Y zKqPuhcNjv|qk5srr41Ti9vv(r5n@MSw8uBh!&Ci2H4592XAk6grnS{S+!AZm8K{s2 z9(qXmP+R?okeztboW6Z%_3QcwtToX+(l_fPA~CkW!~W=L;uxgkI4ym%XGS}HyJp0b z4S_n(6YcbE99c*vB5XjYMc}0wkcMfEXjGKS6ahn+2-9vPZ&jR3QQD|D6(jzgMNAuG z7)D3qYDseebOPVsPLw0wYG1XH$w8V*_k!d{+N6BOS9+i8vIdNqjb ztDF?t26~QW!ltE&pW5u{+CksmjS=c&qnfjk6`aluN)w%GqAGkmgr`6Yhn(FAKJ88+ zeu>NWVdO}d9l>WW5%Iyngrr6c>5bC4jnctoBVP5HpxI8amH3lQE09#TXoKez;+J4d zZSXWZgJdkU=gF%`X1+qn?j7`zVHmM>EJXvYS!X1bKr#-=ZAfZnciWNl*@Wzvz}rqV zN+$=UsXImorP(lTl+J3D&TW)l+c51GwgeHV!qT8Lk^3`23>9~p_P<4Y5gb;vBi zG%^v{CYVNc3imgft?78V0f=O$U`DbT87r7Zh9isN;deK{$=DzCtH_g;4huDmknZ zrXw6e82dGN5dK2wS*a5qN7#sP9YOpCX@qwWE+F(jq7(8FzDH6!4Zx0dJNR@Loaz@B9<+ay|iXq!RG{Hv#Wn6Yz>I0WZ)J@X9ISTZ9(Z zO=!V&XonC*9i4-Jjs6}UmN3kE&6vA9S4!A+x3ltzbz5Iu-$kF$tUnkj^zsbuqQBD} z@xD&zmo+gvD`q-83VhZXVvp1wAf#eqAL8Lcn_R|U?`c2fd zN?(l%NLj7>WMayAUeA0DPJ;+R$N?>=n-!wb5k&_Fj`Nv_CKTbs0O-dXosD!o$)_~z zlfGHi3(+)QG{S5uleY!J@zRlg<7cz9Py+9mgv^>fYeI}jE}oED;^`Qz?-!bccO<~K zU4Os6S*!iJh#pPWbbxpvTO)f?qxE4CsX-ZA0vQboRC0RGz)=Ffzh7Mf6Ha`UTzJhGPrv*1aErBi_FfHC~cejXZROC+9AGDBW4PL5-l+lY*hCTITLp zeY4xkH7h2T>pWxc()SLd7LMi&=&xqoIKxLAKL`5ybwhwJETW!gw1$9ko)O($AMQT! zrB;OqWNihK8u#<`5FmBbNFcr3W*nzy0IAdG@$@r5dVT3~AO^Ouj?;^P`+3GUK%Wg3jMEIiavU>!bP>|=DCGNlZ=PmMGDj8i$e1*IqmvJ6tw{k= zYf^zedqj-)Gd63*>C_@Srv;KkAX(!IkSc3>C?GG7m!pnq#p%RTs?pc? zME8IUijV^&b@DhHiLB?vX%@8yoyNgQo=*mgouH{py_6nXp$UoxlAwDz4&*qLuzF8a4QH?-(batu82!nXy1xai;=l$jkxKkjVj3<5mF40Qs%nk{%h-?!Ku4v;G~GGFX?1}S?rkkPC!=pYHjKvJj#NDcgi)2R+>K;pze7bOZ` zYlS)ksZb1%3dM0$fK-tkNLG0ONLG0m=u>)|CXj|ss~~bUuZJzToKB)c@l-kueOhqa zS8CNq0e#|Bp3heH3F1l ze|6^qi(L$!9rw-8h~#fH?Wne7Uq&xX6ws+~9*_hVa6YPRCFi60*`D*&@q9AqZY`g- zwY!dJVq$?LMg)=w6-Y**YD3cl`b1~)0@=Jk4rineisy{+nBVtszB10Y8%To7fh4pN z=(GAtUM}KJ^x{#CPP}D76-SB408LOi0|_}3#1Ngy8M1-YlpM}Tl47T5O`w_Dp7WLS zeA0Y0&nFG;!Btj}gf>8u)0L+QsZt5()4Z6MW8)=wPpS&ah$`a}N_a^c#CRE*eAZZ+OOvC>;o$4StWG^ciRQyJfhBn(s zMKDvQ%JF_)_)#D!mBw)f@t)&mFIr}#762Csu7_Q zzi|9Z%Mb|LfF62W7eQ-zM9ILNfFFIWBpUtoL_S`|E!+*n>$?S&rwO|veLt`p zecSO-M4~}R<2aLL2m;}qpf3T&0AJ#1!frfGf+$TD`H&Q$wC`^#@+tlf@NVEo96tx% zLudIfDFXZkNS^QSKpA+J<26nvq|;WLYJAHT*c(V`LMlf{atHx}#L)t@Bb~r835d7) z3y%QZ6d8+1Ja96{nZWyyp2yQ}j?01lK`#Oh0KUa>JEs#41ib<{2>3Hk6H+j#0qjNJj(dh#1S$B1aoA1@xgnd`n0e&2ciP6OIP` zX&}D8CamGO`0iNY}jnfG; zKyUM%E@C>cH;~f3-H1>@B9LH0fFNw&L;vFRyY#Ae_f96JMvPWT#725to=@-!jk6K>)N z5R#E5e2n8H;M+*gAf);KBqHwup97WvU*z~2rxShv`X|6r;5R%?NaYAgAR$0F!Lb(j zG16x^{tMiRbc^qG5uXC1fNqN1i3nv7?gmf&>e9Y86Si2HLwy$X+kPUNP-BdBEl-*N#M7@-+;$}x*xPO zVKve%fG2>xd7AJf(hBetFqx;5f580z0fZC~egr-Vq%`4Az(v5Hfh&311FS`QGf%$_ z{0-?cp56njL;5ffAe`V>3p|bV-yAOk|3o^%{i818FGM;Fe0KpS3h0l_MnigjBz9J0gT_fi7f3bL7JunIMO+RD)Q{)X0h5$=Be#Y@2 zkiPp}1AG{Gn&U-ICmaEK_%FJMk-#26N)u8!LXt~J3iRP<1dayX@rzrFB!Vyogkc=V zaGU}h2f7M&VNx;u}nvlv7l3YSk;7g8Gzzon&k>Kfw{0^J}Jj>IB znMhv)J^^e~tBaTg?8>n>km!VSfG*%%;0T^3qLrC=yk|K|Dbf+WoG%{v$TnKa{ zy_Dl>;3A|8fzJS6=V`)Rq~8ZF0hR-o0*`Y1fzt_>fqovi9C-V$TAC2$+>Ahih(Hw) zl7_80b^)#iJ(i;ZxCUt_$AKJ&1J{E-73cxZ;h4kegfD`=9{3V)8%tySQ-lfw1spjib6n1G9dJA7Zvl4zw{!fQ(+NKY{W$Ow;GaM@5hy|h2}v*^ zDR6Z=w9G);CYTWIGyl2(A(C*9{~2P!~7>gUl6Du zAqgfV1q{F%q@BQ@fCG7&@E4?q0&9VjfxiN0aeSK73F|;#1M~vl;AuiC_l6r05<~>5 zi107qd%(YeJ2@WUcm#MB^zV7Pj^jDt1<;#$brBbVksP}L>1(`3;D5k)jt>H_AnhK9 z2z^d6gX26P38I2GfW%05DTq#=|I7#KfUoj2A>|ViKOvPTqz15jSn?g>!{0|7_X3;a zUas)977@M!wt%2|U`yZ?j!pm2=!AEG-Wk{$DDyNSl_P{ehE$OQX~IN~!+>qk+X7Kj3u2J3;>v7z6x~rwOSXA;}@^#IZN< z52X75F97?x5xIs4X&QD~!#2Qvpm*ii8z>^}0!qL^97k|EA>FB)1~dW}@iZZoBP4l* zzH4T2PixnfR`-nX(Dk@Z$RiynzZEbO`RF}iG|;m7l z!X?lN^=GuJ#vOo7kdEOP$LWN0DcS{W1{}fDgmig~kmUG~uBm{(1G^?x0tE(rsa+Ez z9Xl^%*R$AVVU(jLP}xL{>|u8*KnF>v=J`}?0new)(5?Oqn5LN1*$om-*Mq-`)7c%H zOk|M2Y>qjcu_0KLQp(J1vwE#y4bmj@G%rYb)x03<6Yx>J zbnhi>QQ%T$N**#m6LNr5h+0PY3QxZQq!zvhByB$8_&Jd5UI8Tj<3L}_7ibmGRr>b- zXyPqE$|lwlUO&6^oXImt`BOm|(Z#%E5s*rK9wZ^^8Lb8EvisS9MH4ukTHFnE6cZAG zR6d#W(KyJ__{j3@K_<&nyL}3laxpZ=Tk&Efq9(Z7bAf8Z7YBN}mxv7T3M!Ba#dAhB zyTC}al*QV;lnkWfk@o%Nw+bjx6cF016_?QtjFp_uE=1QLgS0=*E4v7!ibBq7!yz0< zy%))`8<1w(T|g>#50I7=E0C6y`+zh=1_PS|Q+PgKO4#Tiem?#!Hzt6AnmY}62XHR1 zHEYiE_x34#}8K`!Pf%m&cK$y7$EHq_we#oAerhuAem|qkW4j#=cfYOBApJT z4$lO(2R_B~mjdzCIAImABXB*CE}g%k-oF9K-v0o}-d8Va_U;2dvbPK*ds~5I z@BX|z4Lu~;nEhWsw_k8FDkOWS0Lk8|z-Zt!uE<;<*?S?7?7b8i16y7f=Z7hm0-2dw|=3B5()KuLH_R*8>f}OF#vv zzpQmEjr#CqfsT#l)BHv{7-+dj<&4x#i2=rDcYzL)P|VR+&Nu5x@Jh~4H{rT*d38V< zFg`vSH01%gVNs0*(YUx8#GnK-kcPKPqYQJ=XwW1t*P2JGXL7+6ty#oCf43^!SZHHD z--Ou71=FS$cajVKg`-b!CDJ5-3XwKpc+SjsQ!zREs-_JwH?F0z7QS?2J`zmpcXp8A z6kqMBK^6F{?i2JsVPigD1@%D{jPX@a^#4)?Gz`-4;2Tw*wNm>%RvyyvNc;Y#6l!CZ zcz1H%3XM0qrV;Okje+qUiO0;y=%Ge`Gr7F z4t}t9`)=fdAe3M8j2x`*5nY0ucp~t>rf+JcsZ=eO${d&L0eS?!dglA#gf98Ir{xfR zyQUA7;rdybr_T_5SKW+{JcEYlJ2w6FBb=!}@=PV#pidb_MC{TOp!)QPd&D97$nj?o zYyO#*Q-mjDDEADiA%jIer;iX3h=!jYGNcheY5Fw|&J1ioJhhL=r5rNI^Zeo+uyan27~+00jPS_l?QT1D_o zpWx0ANG-~3B$$4S-neYeJl>bQL0P=)?nY(l2k)%xINohkaq{ejg-cL~nCQ=^y$Qc$ zrIAPqQHVl120=t9SOs_Ws}Laq;Q^$FB8*<`={HnwbK{4tzQ0X)e2sq39JwYyJBG*G z)`FHBM5_la^bR~n7eu@Cf?mM)&jb-aiuL^!;%PBFlPIJI(RP7W2U;!9IdZ9-uXt?Nd;&>4KyK^4b?mIA)>LA3FpWr5Z?sB9i+g`mX*(cavs4;Ao@ zw$vW;&5lpd7~`e*doff)U9&UiWKD?omC_20pEK!yEXS%D zdT;;4g!oayzEGEY_Qb5&S>v)M`ejU+iCX@LT79Kc62}ffd7*0)*PIy>#?6_Wo;7x2 z_JoO<^!%fy;iLDC9g;FiNYJ^)J~Vq$wqJashPiKQnZFK{7JkxNIKyB3|GtG|2PNN^ zFm@2BnXY$D%9t}d-7h7eM9*8B*Qdn2_l}h0_>>)oN9yI<)>P`^*N@Rh#^zkag9rZ# z5y_YF94JB!f^bEMh(?G9aBV4tk259HZ~TB7cw7TUexTDvw+l!y{&2*6gu*2jlqw6y|#b z*OT>R=ESj6W=xtHAJ6JooT~56xPMI5xAp8y)kphMk}uNM6FW|y*E~pyr{6gJQ*e?& z+F={7Z>b9{(F?0rcW<*JHBG-o=cXT%bQVowqL?KfR+<^x7&{qz8xxEv#)nMBrb*`Q z>ObngYG3OC>yOrY>wnhvHj6F6mTb$mEw{a5d)>C(w#Qa)>t=t%KHi>gf6~6lzRCWE z{XP33`w{yI`vv8@F>r`)b0*XypgUC=^= ziwC$v>?Vdw8B&E5C;ug1kjENw47&|q8U&@O60WpUOiF)coHA9JVp?x{&2+^SW^Q9n zR9C4R)y?XQww<;wZ1>ndw?F1MWJB4KUf)M_M__p|=I8}O0`cA5qK9oO|f04bi(Xi3* zsv!-E&sSbjK38g$Ka>#T<8EWN@oD3$MzhIjns3@{+GhIA^rz{fNpJ3DR?TC~Gt9|q zq~%}hQ?{4wO&x6=Nsj4`Dn|>nEZ(`&`L^=|=RsGctIj2);>S#=yqy>;J}#z-GsL;# zQ{p1AO01T03{lDqW0o=3xXifPxXD;ztTruHV=arU&syCcYoT?E^*yw#wSAA{31@}t zi0fz9@2iKM}gx5 zx5Mg8c206mcg}M@?Of;F1;Lto)?BP+ly5Ebo^48}bdulse@$Qx8*L zlWZDpYG#g72dI-(_Y5`0@`PocmQO5SSiZEJu>5FgYHe$M$XbG4-)a5A zdKlxs*6Ouhvfg2fvURhWG1Ts|%XYi{e*1&=q4r1ZsrD!A^XzW>Qu|u_E{y*_?M)na zIAq5t#}$Xi`L1)jbEk8U^GoL+&VQUuT@kJhF2!YYyOLeg(B5ZV+g;_<;sTtR0WHJ} zl0{CE-%Z(AHVHmWxSvpyIT13lpmUWhQEgxDA zSiZ3ww|sB;#d5~d&f3Y^$9j)dvEFMtlqwi&_Mfe}T_|yD3&I6A%lZtga(GE3G;)@&>*E?W{h zp`By31Engp)v%=)DHe%;is!_;r3(4H{Jr59gVos5)XB8ew82zk`po>L`KbAO^Y7+= z%va2`bahbgRPR=2s>SMF^##jN>q(nx-)_HXZ;rJi6|2V_=P~DLXPnF85^8Xlj#jJ> z#26_LJ@vPALAp)8LvAm3k$cIioFI>sACpt%9Qj#!m0T_9;VHu#hObN$%o&#DmIBLM>k_Ofo2{|-srK{sYxY)-u8xb2CeDS}Dr`1F1HMI#w zdUwls%M8mh%P#b3C#%Ui%KD6TrPX6Cwti$if(eA!v)?CYB1 zddhXeRZp`E2c0lF>xk3EQt>0Pwe+Y(nk0QJ{UNoI`^ahXRC&3)T3#;~%A3*NcjQvG zeC(Gi(DG{eH~9>@;F5e*77U?=FhjT@!Vrmx*%?FkcI81O4MX!6<-9V^ILo-)^VW2I zfA*jM4fTc#h89XsV;0!IXjR^9yV=9nANc^UVig&-MZR3)$x+!E5|;U5FH|rWAu}Fhcr@}Ev<*;_DfeJo!nWD zlauA?u-Ql0w5^7jhSv=T3{?iVUddD18ZE}<#uLWZFywDDU$%_0K5u=++QfFJ?SSoP zI1iU>*KEz~y|Ii=w$HRL#1z_OFSdVU|Jkm0^mGh%jCIU)EO9*NSmSuXvC;9dBO7}} zg|o_eziXf?1AV*7C5R!yHYny1zZb8FaneJW!oN$Gr5$ehKFr`vhMk5Q!x=-k(ptF> z{WMK^Ldj8XYgU^(FNc^=ZpXmNzX2EvGFVY_YccFpa;n{bf6E3w5~r zJAQRM?p%+3?UeHgS3bNQES>QoY+-m&{!W$*-zhVVqfAem7MqTn`dDO3xb3pNhvP2C zWJiX><0y2LIQBX!9i5%^&PwX{mPeBhtaVQdr=z_oEjpe13HNV z#9?9xw$}Tlf23a6OzRE36oc}k($09NalUb@vDDbcGyq$V&TKN@k7cKqYJeTKt9#TZ zEL$xfSjJk{!=o5wTWVWpbMLXYLmv)vZiT0khKc_woQe?gD}>?LG}ed-(p+gV9Hpk% zAco2FWTLVi#&1m9&E@9z)UlQ=mSdPHw`1cCu@A7P*k7>!XK&*e z0y~vEesWyK%C^ZVxSF_{V{@H?9rYL2RX4RPCxm%1ZN=wBLFy{am)1xnQi8ll{sCUu zBZh5;eTF*2PX{MdGiD6W9k9;fY;P{mQu?d))`o? zYpvI;l5K|VkS!Koz$W_+`)PZuW1?fT<44D{&hMOmIY+r>yWA^Dfr1eBXz!ik1UORB zaH7^r?@B*QiaZCq`zblmFwQXF@V7x!7Aqb_Z|rO|!l~+Fl1v*-+f84ahMT`K4^Tf- zhgjaQgjgT7uCflYt+v%--i)))x395>V8eOI@vbAvsW=BaKXEp9WxH0w-xZ2N+{`0w zDc&V+6Q7p%$h{1U;X+(Av{GV~g%}xvajfxu<9_2krbN>?(+*6}QE)kro9oTZ)OqlH zqb*OvGpdLG)&p(cW$kWTh=uhZ+wJx{;p=~iy>5`>14ji0c{}G=_`$Mkfa_g2GC#S5 z60*7*KNP`A+Y#I9A}q3cEEMbH)ACTm7DJh#yJA&_VL@tboMSvtMDL>e)zhe+?1X+21h!XG}7s z!qj!95Ob!v&|CyZqS(9*dwi+6%)HaQ+q@Tpu)vdz0F~J!nW1+q3wtbAB(qLvE8suw{O6pde2^CZ;ScU7ZcTrULNTf?U?Gw#Co`Z zt%$EW-f&bq&N;TbusFkK2oZ7tzlj&cMR30MOUK>PBKTVSkg4US^RHY`H>9Y-B^Iwhys zIS3ok1m_gz8s{s{*PS23qdn>z=b8`CaJ%b!I29qnPAD-;TrcV*_lweXX%Jk9pJb=< zGOE6&^f3-Mt~dT}jKzs(kZGy80N%@K^9UTZvf-~qS`>?Fv0LIT36?}lk|o(P+>&D1 zZrNw)YVY8Pal|^}9HK*Us1Ca$9`=~%SmhXq!&fs`q$|qR*%j@IamBjgTq2xn)%75` z*CSn{UE^`uoZ-rXmN~9m90ymr3S4V(#3;mqyv4Q0^^NPe>krp|@Jd41dld9yGtnU4 zD?T8O5~ql>#V5r9(qqz_(od2{-XwRxfwYs7g*_w}+uKT|Kv}D7PzseUXxbDsEz&&N zyxqJXBgH*HwOb}xvMtA~=dHc$Ci_n8Y8P=Z=!H|4XRJ@#X4_Xfwqr}Wgk$wwSn@E*iNg_|Duk$N*U{qA|mmi9>WAPP|=Bs_AW0si~T+0!`IU>RI(a zb-ZPYw!zp+=wb;+j7$zE@H9l)PZhpn`I?l3D){E9K+m|@APPO-U_QK?N ziFz(s$1aF8HS98&lyW7}D8LbEinF__CaOtlvN~K%QAguSNSc}sk0(>jQnTIa0yRg? zRr4?~iq&J7wIi&#@agC>!Va8cRIJbGw!=0dRmWV4vC3d$6O7Ph=6i7_c>qpjm^IuQ zVU2`Ro#FGw;Nn1>Rm3S(h4&ke3k8YTY`(Dlh8^x6cGY93V~lg6b1tqB9KtH^zUtJw z?sE0RMV%VgX=+8LPFM@*f{PzB#stSaVaEA%oZ1jE5!nFt+-v>C$__d zf(eEv4D$@j4KLuD%o~PduvaHz52I>yu|Cd4FRz62@u6`IyuR1XAG1T&3G+qsZLr3A zxB8m;HP-VQILA>qUz@ECoZw!!-fr(@$5{*B2s_~9=$Mx`P#%rTC0ph5hEQWG%!C0r z94s*A;A%`Bt0Kp=9`dGH$X$BOKG(U#`JhWE&*Af||Oai*J#liRQIMR+pD%)gr3VX~O4 z1FVy+F}6Xr;kFdpXj`f+4V{%?%d}zSXO0*w#uwnzBw@dJ-nG^B5q63S7dbV%bwU-aG8+RcSNu%;5_9^bSdXhxv63WN zr9^2cjz{yQd^j94<>%xVa2@A!xSP?2o`ys$IjM%}aKt_}>^FRc%tfyMo~azOb?IjWq1SN^wh&8Rmu zGqo~3XnNlCIWCA!Grs{Z<-9o(*DzN=M>FRT z=PKtJXAXBCbnJB31Sf!}#81S|QiAjZjuy@23GyrOn7SJtHN0gwX9#gC-4q$iWiFP= zKa_`!pBQ_X5=@!6BC*HxH-=gQT&Sh!>FZEog}MXlxZRR&S!g+8xo(NHrd!wIO3cG> zB-g@`>|!^-huw;O@sd3TKF*Vl*BqZXt~l>gApRKt4s^4AT0lz8O>SmuHg&TtIGw;WzacV~k0 zDL7l3*agJv&M?;_tzBJRlFR0r3Xf)?YZ=C75iX&Zk*RP8SHb@wVso*r*jLP>O>^1>Xg);)+|O5`(i&oRXj+#xU?QGC*mqk3f%b&d8NDo9>{KZA5|D4 zSLHDDh+?p#SCS0F4WrR78MuhMz>tfcDKYH!{P?WCw>u98FNIrGgM(+7F#_g}H70Qz zlZDB?1-L)46V|LVhT&pGXOkVaOgCkj*20ckFuKa%GhT%iW6g?rI4qb33l_k7Td+4) zz;LHvxG)^VqHqLDfD1Dm?n@dRmjbnLl)4iRNTph@UVq8Lmkj+>&@WB&k@qGO;=oz|Gl)HDWhTNp-m3c*!c*u={x4eMaBO zQ}K*G%JbVZ`e;wsV*U4_nR=mYhj+1lu+G!(8GX}`1drhv{XgyqoM7TH<})zES31_> z8qXFSu}U2~;Z|3mn@>4v9cSRb3h3rIXA)MMRA&zE_H2XWUhS-L);Z5RBXQP=!8u29 z+0oVMxGI>9qfH);H5+iC+3Tu8m)GJ#{dt#=gP%jt&u+wMxJQaOJOh4F8v4FK+<;5V z#bSxL6TM%Dn{JVqYcW!sq)2wG{YlbrDHZp7@}#v=skEDogL>(z)LD+@;~-7W<>O$l zTr1bh5$q-fje~S754kwxmw0~6)!%(L^?Qj@hN)H#xB8TF6;mzNsG#Rl(c?6eXddmv z_52EBm1p7-y`@Vf4hEM@f|;g^op*EwE(tHdWLfDsx{yu7sa(6?;IqJ<{IU9%GNQE4bs6Xiv81;x11SE>oVepTX7@ z%@*ubN4g^ivvnJ~vfNRJE{sG6inzg*;mmXvI7=`;t9TdIqZ6+>BXDS?PE5o(bvR~h zD(lKDY<<*`MI*2SZo>pFgWI9?Xr0!l1$bdCx|F7J6#6v=JuAZLP2$s<9Nru;50iTf m{IpWB3|+ietj5w`CkjQLG0XIQ^xLF5&x&RGIk-_?@_zsqBo%M~ delta 98265 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 diff --git a/Release/socket/wxDriver.dll b/Release/socket/wxDriver.dll index c906eee83925ababfe112cbbf212fdac1cda7470..7dad9332b465ffd825d6f49fc64ba431d9844338 100644 GIT binary patch delta 2997 zcmai0dvp_38ozVfqAO-+^030XNsK=>|WD`|OjgTLy&D2Kk z2JFJPD3gSQJV>o2kA|F~z9DynuB7fGABQqHTO>b+-cI!rXILX%sU`1*72&K|WGw6} zTpmMCYBO9Qu&bSn7p055Iz^b9z(tiH{#|P z5)n~DogvF3s^gza^{?tIrk&2tGMbiGN0Q?awKzT1J3I0!ggD&MKx^ zId)u8JWtRpl7z-NNT+Rk83>!0BBTRtR(>EJq4sWVTRWftr1uun2?(_ywAh7Q$fr+pG1n{L8w@mojlL&_Y)QBkvoWMUVH@5TO*#_w zcvCdlkvJuN27h1q%_9> zDUs*C2P>_E>IRa}LbItJvT%wMXHAfeQ>=L4XYYTe7%05^C!)zPW%Ra2>$S-^TrMpeMyiyqS4sH6E~&H9@?sAT+R3rcKMO}NJgv1x3whp7Di22wsD z9ja|m3n3UdAvPcRVS1^4M-;SgC^)U+*2wE8C+F*Yo+mYmwry`8SxT>_HjpE9J$0Dm z&d8v)kw@B3Fd%gM>?NePtMP}lWHQRxy(IQ5U9m3*MN_MDe`ofJLUUS zb%2A6-9EVqCT~+d7m`1PFxt9nv@Zhc0<^8$?boOejKkz5Fc=&LW%+k7lIOt(CUAww zC&+iX*>{gXq1V*Z`Q%q%0Q^x+>EMxkNrip#xF6KEU4UQJ+&L8<_!hqECG?~Qxx)^H zq`(47?g#?<9*}?w!NzW2>M6ac`)Ovp}Fz)T|`5S3fol%rZ*O!mxP zMAee;yyvN8vLUY^{C3EJn#MBnXJlJ`7)l(r4F7kO5^cMaOxKx02CFeXR7dP99Z zaT*gMazMSa{EGp7Ke^YKn$mbfTm_@9z6D4(kP7YAyC26=@3I;S(>#eVb5ymr#C(LJ z5Q(*V`0M{pFxXoJ?;Z2tXJ6yiz#fxnZ=RI|jtman6wdNyK(7fW2W_s1VstqK1FLM9F7>VRf zA(v>xDAFh7gugAS)re3Ri4`-cL1GXyqu((GFcsfM>cr%bP7~7YB#(-wkhg3|x1YQt zZpYnIy-OW$Mp2_Aq-=XjC>P5u3&#pWxeU(E9pS#`lK7eY=X@W3nV;ap1X^$i3xo>c_rfw^mGC#=q|h%6 z3b|sD_?Wm>+$$atPmAA)iukZ&r{g0>kK-$FbHbtivt*%7hA}Y=&9n&2GA72r8Ri?B z466*!7$n1b!`Fs0hD2kgG2d8fY&7;5PZ|Ge`rI^Z%3^1;7FJ-LY(2Z2b+N12hu9}r z5BnVZ0=u5w%>IMj#lFve#P+Z!*{|7e*>mg&`y(4}PBqUm8_kQ%OU(C}CG$(>*UWF5 z51ElA+@fo-Bw5leIhM_qxz=UYb=F?%uyw*3Z%egh+Gf~h+YC0Vt;}|(t;u$;t=0CN z?FXA;n_g%s#9S7a$CYpuTqSoG_ZZj0t>xa~j&nLbkF;eSS~aRvT#u- R6}O4!y`NX)Q!g;V{|B}NJ?sDg delta 2905 zcmZ8j3vg3a8b0Url|Is>kB~HNX^W9}A&+~L^yc0KO2hK11jN=_TIhg7w&MCA8F8ev znsmn+quV{ZC^KTwMNrmV3Skf(m1uyvShOp?(5l^v?5!Xm-JMbxvBI~Jwk!wicnvuc4A|fQjXWKt~pdYW;rc3)9%bgWUG>XoM|RCN}83` zfOpc3S@i`AixO7h8iU6ZUSTkZ3$o~YS&ih3E;1+k2TZaw)SwKvFQ1Zh{G>JdZe}-@2W8{A-4h?>gwuM^--V;J*rtX;6E=e zNr7z!1M;TC>ZDJg7&T%g^%T5Erv4{VUbqu$x2SGh z#UKG!ClgoUQPBa-LQ<@v1ylBry}9(&Ddi-XOFy4dT+&|*YHmf~cuv=1b?9VQbK$z? z#-_JZk+|(Uny;-UzG7OZ4U&M84r=velaj`@rQ~mVs?}9Z8_Y>W>nfA0*$BYjRv<|; z1PH~7i;^V1ev#g$M?AD8@bu}?>TE@I~V z1Q!Ku+GPpFCLO9L9o||e`oN-oQs1kiYxTvMnlXsd3kzL;lcwE}Y_Jnu?rXOuI%`$9 zc2Je)9u&i%5@;JjA^*8hsTc71Gc3|b6I@j16;;p!duyr}sbQN2T_tIFxpU&3k}5b8 zWMTJ&r*)baK||JqZ~+Lz?y)}ixP1B0i1iZ70I$8zJtlJ!ohfOI!0K|xJEN-LXEImv zNSe(F({T@^ob1xXLGDv8>X0qL|CvDBI8p^)2b<@XfCMgE273_baBaNLJpl*w%NcOT zWsan2mm|ukeZ{R3w0|<##IFY8xfMyDsTOIpC0skvmox{5P})iF$>B<-kZ@@Eg~Rx- z9F9(z#O|yg&73^SMLcs%o`aBEgxSrWAd30fGWyK!-OT~@N}a%ph(P^pYGRt z$m*-~n%+i=u145m6DH^5)LX)mW9hV~~69uMV>7(BPBAcT#1Q}PQ#1Bq`~`K* zvfysIW!B$wWh4!;ql%449TWG_`LkPa3+=bh} zCbj_4i({=w9DsC!(FWC@fx7{?!Kgo>QJ*|#h_}FD^a3c0HEagz+FLns0h;n^SQ7^d6J+U%Du-B9nLyUm4JOF%tb`{BrfVfv=INVn;K;wCs99a@Ui zBSqIGDe~~*7JP_NVDceHvse!2M%?VX82%3A*#eFme;o+KTM6H_i{Z<`0X{cmG8Xvh zLN9~t<^Rj*`?jJK(20!NmJ;O)AoxT;$m&GMPZx4!>iT12p{EzURP#E!_^-=yoOVD-oLKyK}40aQE-z7`;N|BKI00y#n1Y%+6Fh<;M~s9sNR>levD9^3ptK8GfFc zoMlR{IjJFQHPR-hHm$~j)Enr7PD|RIcBI})4?6deKa@u9aP7~*ahkSbUwZ~8a4Wdm zxpiC@_b2WZ?pyAAF2kXA6gz(Fc+jEb-NG*6kZ@EuD+~+cg33AH`G!;Ls&uig<*sJe zJ+AGpM_n(vUUBuiF1t`UfQHz_m}{&sE;2r1l#D$lt3}IhVjpJ@u*cbcc8I;qrdtcF zC046-gZ2J)YnwG_?Xn)W#;osIKeDQ9OKody9kz(=OWU~ZXIq*5KKtYLXYB{={dQl~ z-l`*2EnF)Xk;jw6nfjxBr#-_1Y6?-Py-UkM|^MIkPvIF(MD^FC+5 z8FHR-4m?-ySs7V|9N;?~6``FX$8TKo-&U)3V zw=K7Ax9x%aPuT`+AKM0P!#2@&(UxM@*~{!V+imuR_LuBO?4Q{$*k7$WTlIC-wW>5O zi!0?!oRwS3wQ$?HD0c!XbDsN-+u`VO>~jn|#vI=}t~(0&5`H list: pass return pid_list -def test(): - test_port = 8000 - pids = get_wechat_pid_list() - if len(pids) == 0: - pids.append(new_wechat()) - start_listen(pids[0],test_port) - +def start_socket_server(port: int = 10808, + request_handler = ReceiveMsgSocketServer, + main_thread: bool = True) -> int or None: + ip_port = ("127.0.0.1", port) + try: + s = socketserver.ThreadingTCPServer(ip_port, request_handler) + if main_thread: + s.serve_forever() + else: + socket_server = threading.Thread(target=s.serve_forever) + socket_server.setDaemon(True) + socket_server.start() + return socket_server.ident + except KeyboardInterrupt: + pass + except Exception as e: + print(e) + return None + +def test(test_port): + post_wechat_http_api(APIS.WECHAT_LOG_START_HOOK,port = test_port) if post_wechat_http_api(APIS.WECHAT_IS_LOGIN,port = test_port)["is_login"] == 1: print(post_wechat_http_api(APIS.WECHAT_GET_SELF_INFO,port = test_port)) @@ -239,8 +303,21 @@ def test(): print(post_wechat_http_api(APIS.WECHAT_CONTACT_GET_LIST,port = test_port)) data = {"wxid":"filehelper"} print(post_wechat_http_api(APIS.WECHAT_CONTACT_CHECK_STATUS,data = data,port = test_port)) - - stop_listen(pids[0]) + dbs = post_wechat_http_api(APIS.WECHAT_DATABASE_GET_HANDLES,port = test_port) + db_handle = dbs['data'][0]['handle'] + sql = "select * from Contact limit 1;" + data = {"db_handle":db_handle,"sql":sql} + res = post_wechat_http_api(APIS.WECHAT_DATABASE_QUERY,data = data,port = test_port) + print(res) + post_wechat_http_api(APIS.WECHAT_LOG_STOP_HOOK,port = test_port) if __name__ == '__main__': - test() + port = 8000 + pids = get_wechat_pid_list() + if len(pids) == 0: + pids.append(new_wechat()) + start_listen(pids[0],port) + post_wechat_http_api(APIS.WECHAT_LOG_START_HOOK,8000) + post_wechat_http_api(APIS.WECHAT_MSG_START_HOOK,8000,{"port":10808}) + start_socket_server() + stop_listen(pids[0]) diff --git a/Release/socket/wxDriver64.dll b/Release/socket/wxDriver64.dll index fdc9d6c8f28f75922b6af34819fb3043639a11dd..c1fe9d73a2d0505b80c622afa5e506c4c1581928 100644 GIT binary patch delta 6668 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