From f95c36c5d5f4032c77bc7b02de3f68922d9553fa Mon Sep 17 00:00:00 2001 From: ttttupup Date: Wed, 20 Dec 2023 17:56:37 +0800 Subject: [PATCH] feat: 3.9.8.25 --- README.md | 203 +-- app/wxhelper/src/db.cc | 2 +- app/wxhelper/src/global_manager.cc | 2 + app/wxhelper/src/http_url_handler.cc | 16 + app/wxhelper/src/http_url_handler.h | 2 + app/wxhelper/src/wechat_function.h | 162 +-- app/wxhelper/src/wechat_hook.cc | 2 +- app/wxhelper/src/wechat_service.cc | 46 +- app/wxhelper/src/wechat_service.h | 2 + doc/3.9.5.81.md | 2 +- doc/3.9.7.29.md | 2 +- doc/3.9.8.25.md | 481 +++++++ go_client/main.go | 11 - go_client/tcpserver/tcpserver.go | 44 - java_client/.gitignore | 33 - java_client/README.md | 21 - java_client/pom.xml | 184 --- .../com/example/wxhk/WxhkApplication.java | 22 - .../com/example/wxhk/constant/WxMsgType.java | 37 - .../wxhk/controller/WxMsgController.java | 14 - .../main/java/com/example/wxhk/infe/Resp.java | 11 - .../java/com/example/wxhk/infe/SendMsg.java | 17 - .../example/wxhk/model/PrivateChatMsg.java | 49 - .../wxhk/model/dto/PayoutInformation.java | 21 - .../wxhk/model/request/AddFriends.java | 20 - .../wxhk/model/request/ConfirmThePayment.java | 27 - .../wxhk/model/request/FindWeChat.java | 19 - .../wxhk/model/request/ForwardMessages.java | 23 - .../wxhk/model/request/GetGroupMembers.java | 16 - .../GetsTheNicknameOfAGroupMember.java | 23 - .../request/IncreaseGroupMembership.java | 23 - .../example/wxhk/model/request/OpenHook.java | 18 - .../wxhk/model/request/SendAtText.java | 25 - .../example/wxhk/model/request/SendFile.java | 22 - .../example/wxhk/model/request/SendImg.java | 22 - .../example/wxhk/model/request/SendMsg.java | 52 - .../example/wxhk/model/request/SendText.java | 18 - .../wxhk/model/request/ThroughFriends.java | 27 - .../wxhk/model/response/ContactList.java | 50 - .../wxhk/model/response/GroupMembers.java | 37 - .../com/example/wxhk/msg/WxMsgHandle.java | 250 ---- .../com/example/wxhk/server/WxSmgServer.java | 30 - .../wxhk/server/impl/WxSmgServerImpl.java | 64 - .../com/example/wxhk/tcp/vertx/ArrHandle.java | 90 -- .../example/wxhk/tcp/vertx/InitWeChat.java | 158 --- .../com/example/wxhk/tcp/vertx/VertxTcp.java | 91 -- .../com/example/wxhk/util/HttpAsyncUtil.java | 77 -- .../com/example/wxhk/util/HttpSendUtil.java | 151 --- .../com/example/wxhk/util/HttpSyncUtil.java | 36 - .../src/main/resources/application.properties | 4 - java_client/src/main/resources/exec/c.exe | Bin 24064 -> 0 bytes .../src/main/resources/exec/wxhelper.dll | Bin 385024 -> 0 bytes .../src/main/resources/logback-spring.xml | 171 --- java_client/src/main/resources/spy.properties | 10 - .../example/wxhk/WxhkApplicationTests.java | 13 - .../example/wxhk/tcp/HttpAsyncUtilTest.java | 48 - .../java/com/example/wxhk/tcp/XmlTest.java | 92 -- .../example/wxhk/util/HttpSendUtilTest.java | 45 - python/3.9.5.81/http_client.py | 493 ------- python/client.py | 595 --------- python/decrypt.py | 51 - python/http_server.py | 26 - python/readme.md | 10 - python/tcpserver.py | 57 - source/CMakeLists.txt | 20 - source/getopt.h | 659 ---------- source/injector.cc | 1170 ----------------- tool/injector/ConsoleApplication.exe | Bin 129024 -> 0 bytes tool/injector/injector.dll | Bin 43008 -> 0 bytes tool/injector/readme.md | 14 - tool/injector/微信DLL注入器V1.0.3.exe | Bin 31744 -> 0 bytes weChatHook-java/.idea/.gitignore | 8 - weChatHook-java/.idea/compiler.xml | 13 - .../inspectionProfiles/Project_Default.xml | 36 - weChatHook-java/.idea/jarRepositories.xml | 20 - weChatHook-java/.idea/misc.xml | 14 - weChatHook-java/README.md | 29 - weChatHook-java/pom.xml | 77 -- .../com/example/client/WeChatHookClient.java | 619 --------- .../service/WeChatHookNettyServer.java | 272 ---- .../src/main/resources/ConsoleInject.exe | Bin 16896 -> 0 bytes .../src/main/resources/injector.dll | Bin 43008 -> 0 bytes .../src/main/resources/wxhelper.dll | Bin 383488 -> 0 bytes 83 files changed, 608 insertions(+), 6713 deletions(-) create mode 100644 doc/3.9.8.25.md delete mode 100644 go_client/main.go delete mode 100644 go_client/tcpserver/tcpserver.go delete mode 100644 java_client/.gitignore delete mode 100644 java_client/README.md delete mode 100644 java_client/pom.xml delete mode 100644 java_client/src/main/java/com/example/wxhk/WxhkApplication.java delete mode 100644 java_client/src/main/java/com/example/wxhk/constant/WxMsgType.java delete mode 100644 java_client/src/main/java/com/example/wxhk/controller/WxMsgController.java delete mode 100644 java_client/src/main/java/com/example/wxhk/infe/Resp.java delete mode 100644 java_client/src/main/java/com/example/wxhk/infe/SendMsg.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/PrivateChatMsg.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/dto/PayoutInformation.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/request/AddFriends.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/request/ConfirmThePayment.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/request/FindWeChat.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/request/ForwardMessages.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/request/GetGroupMembers.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/request/GetsTheNicknameOfAGroupMember.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/request/IncreaseGroupMembership.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/request/OpenHook.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/request/SendAtText.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/request/SendFile.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/request/SendImg.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/request/SendMsg.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/request/SendText.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/request/ThroughFriends.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/response/ContactList.java delete mode 100644 java_client/src/main/java/com/example/wxhk/model/response/GroupMembers.java delete mode 100644 java_client/src/main/java/com/example/wxhk/msg/WxMsgHandle.java delete mode 100644 java_client/src/main/java/com/example/wxhk/server/WxSmgServer.java delete mode 100644 java_client/src/main/java/com/example/wxhk/server/impl/WxSmgServerImpl.java delete mode 100644 java_client/src/main/java/com/example/wxhk/tcp/vertx/ArrHandle.java delete mode 100644 java_client/src/main/java/com/example/wxhk/tcp/vertx/InitWeChat.java delete mode 100644 java_client/src/main/java/com/example/wxhk/tcp/vertx/VertxTcp.java delete mode 100644 java_client/src/main/java/com/example/wxhk/util/HttpAsyncUtil.java delete mode 100644 java_client/src/main/java/com/example/wxhk/util/HttpSendUtil.java delete mode 100644 java_client/src/main/java/com/example/wxhk/util/HttpSyncUtil.java delete mode 100644 java_client/src/main/resources/application.properties delete mode 100644 java_client/src/main/resources/exec/c.exe delete mode 100644 java_client/src/main/resources/exec/wxhelper.dll delete mode 100644 java_client/src/main/resources/logback-spring.xml delete mode 100644 java_client/src/main/resources/spy.properties delete mode 100644 java_client/src/test/java/com/example/wxhk/WxhkApplicationTests.java delete mode 100644 java_client/src/test/java/com/example/wxhk/tcp/HttpAsyncUtilTest.java delete mode 100644 java_client/src/test/java/com/example/wxhk/tcp/XmlTest.java delete mode 100644 java_client/src/test/java/com/example/wxhk/util/HttpSendUtilTest.java delete mode 100644 python/3.9.5.81/http_client.py delete mode 100644 python/client.py delete mode 100644 python/decrypt.py delete mode 100644 python/http_server.py delete mode 100644 python/readme.md delete mode 100644 python/tcpserver.py delete mode 100644 source/CMakeLists.txt delete mode 100644 source/getopt.h delete mode 100644 source/injector.cc delete mode 100644 tool/injector/ConsoleApplication.exe delete mode 100644 tool/injector/injector.dll delete mode 100644 tool/injector/readme.md delete mode 100644 tool/injector/微信DLL注入器V1.0.3.exe delete mode 100644 weChatHook-java/.idea/.gitignore delete mode 100644 weChatHook-java/.idea/compiler.xml delete mode 100644 weChatHook-java/.idea/inspectionProfiles/Project_Default.xml delete mode 100644 weChatHook-java/.idea/jarRepositories.xml delete mode 100644 weChatHook-java/.idea/misc.xml delete mode 100644 weChatHook-java/README.md delete mode 100644 weChatHook-java/pom.xml delete mode 100644 weChatHook-java/src/main/java/com/example/client/WeChatHookClient.java delete mode 100644 weChatHook-java/src/main/java/com/example/service/WeChatHookNettyServer.java delete mode 100644 weChatHook-java/src/main/resources/ConsoleInject.exe delete mode 100644 weChatHook-java/src/main/resources/injector.dll delete mode 100644 weChatHook-java/src/main/resources/wxhelper.dll diff --git a/README.md b/README.md index 80345c5..a2bbd9e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # wxhelper -wechat hook 。PC端微信逆向学习。支持3.8.0.41,3.8.1.26, 3.9.0.28, 3.9.2.23,3.9.2.26版本。 +wechat hook 。PC端微信逆向学习。 #### 免责声明: 本仓库发布的内容,仅用于学习研究,请勿用于非法用途和商业用途!如因此产生任何法律纠纷,均与作者无关! @@ -18,26 +18,23 @@ dll在注入成功时,创建了一个默认端口为19088的http服务端, |-------------------------- |----------------- -------------- -------- ``` -#### 使用说明: -支持的版本3.8.0.41、3.8.1.26、3.9.0.28、3.9.2.23、3.9.2.26 、3.9.5.81。 -源码和主要实现在相应的分支内。 -src:主要的dll代码 -tool:简单的注入工具,一个是控制台,一个是图形界面。 -python: tcpserver.py: 简单的服务器,用以接收消息内容。decrpty.py: 微信数据库解密工具。 http_server.py:http server端。 -source: 简单的命令行远程注入源码。 -其他目录:热心作者提供的一些客户端。 +#### 快速开始: -#### 0.首先安装对应的版本的微信,分支名称即代表的是微信对应的版本。dll的前缀都会带有微信版本。 -#### 1.使用注入工具注入wxhelper.dll,注入成功后,即可通过postman直接调用对应的接口。 -#### 2.可以使用python/clent.py进行简单测试。 +1.使用注入工具将wxhelper.dll注入到WeChat中。 +2.执行 + +``` +curl --location --request POST '127.0.0.1:19088/api/checkLogin' +``` +即可检查登录状态。 +如果已经登录则执行获取登录用户信息 +``` +curl --location --request POST '127.0.0.1:19088/api/userInfo' +``` + +3.其他更多接口参考相关文档。 -##### 特别注意: - -##### 1.hook相关的接口都需要先调用对应的hook接口,server端才会收到相应消息。 -##### 2.注意个别接口在一些版本没有实现,功能预览里没有的功能就是没有实现。 -##### 3.如果注入不成功,请先检查注入工具,或者使用其他注入工具。 -##### 4.相关功能只在win11环境下进行简单测试,其他环境无法保证。 #### 参与项目 @@ -54,7 +51,7 @@ source: 简单的命令行远程注入源码。 #### 编译环境 -Visual Studio 2022(x86) +Visual Studio 2022 Visual Studio code @@ -63,8 +60,6 @@ cmake vcpkg #### 编译构建 -先准备好编译环境。 -#### 以下是x86环境构建,3.9.5.81是x64环境,具体参考对应分支。 ``` cd wxhelper mkdir build @@ -72,173 +67,11 @@ cd build cmake -DCMAKE_C_COMPILER=cl.exe \ -DCMAKE_CXX_COMPILER=cl.exe \ -DCMAKE_BUILD_TYPE=Debug \ --DCMAKE_INSTALL_PREFIX=C:/other/codeSource/windows/wxhelper/out/install/x86-debug \ --DCMAKE_TOOLCHAIN_FILE:FILEPATH=C:/vcpkg/scripts/buildsystems/vcpkg.cmake \ +-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${vcpkg install dir}/scripts/buildsystems/vcpkg.cmake \ -SC:/wxhelper \ --BC:/wxhelper/build/x86-debug\ +-BC:/wxhelper/build/x64-debug\ -G Ninja -cmake --build .. -``` - -以下是在vscode中操作,vs中的操作类似。 -1.安装vcpkg,cmake,vscode - -2.安装相应的库,如果安装的版本不同,则根据vcpkg安装成功后提示的find_package修改CMakeLists.txt内容即可。或者自己编译。 -``` - vcpkg install mongoose - vcpkg install nlohmann-json -``` -3.vscode 配置CMakePresets.json,主要设置CMAKE_C_COMPILER 和CMAKE_CXX_COMPILER 为cl.exe.参考如下 -``` - { - "name": "x86-release", - "displayName": "x86-release", - "description": "Sets Ninja generator, build and install directory", - "generator": "Ninja", - "binaryDir": "${sourceDir}/out/build/${presetName}", - "architecture":{ - "value": "x86", - "strategy": "external" - }, - "cacheVariables": { - "CMAKE_C_COMPILER": "cl.exe", - "CMAKE_CXX_COMPILER": "cl.exe", - "CMAKE_BUILD_TYPE": "Release", - "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}", - "CMAKE_TOOLCHAIN_FILE": { - "value": "C:/soft/vcpkg/scripts/buildsystems/vcpkg.cmake", - "type": "FILEPATH" - } - }, - "environment": { - - } - - } -``` -4.执行cmake build vscode中右键configure all projects,在Terminal中点击Run Task,如没有先配置build任务,然后运行即可 - -5.命令行注入工具,注入命令 -``` javascript - //-i 注入程序名 -p 注入dll路径 - // -u 卸载程序名 -d 卸载dll名称 - // -m pid 关闭微信互斥体,多开微信 - // -P port 指定http端口,需要使用 specify-port 分支的生成的dll - // -I 注入程序的pid - //注入 - ConsoleInject.exe -i demo.exe -p E:\testInject.dll - //卸载 - ConsoleInject.exe -u demo.exe -d testInject.dll - //多开 - ConsoleInject.exe -m 1222 - // 注入并指定http端口 - ConsoleInject.exe -i demo.exe -p E:\testInject.dll -P 18888 - // 注入指定pid并关闭多开限制 - ConsoleInject.exe -I 15048 -p E:\testInject.dll -m 15048 - -``` - -6.如果想改变端口,可以在微信目录下创建config.ini配置文件,修改端口即可。不创建则默认端口19088。 -``` shell -[config] -port=19099 - -``` - -#### 更新说明 -2022-12-26 : 增加3.8.1.26版本支持。 - -2022-12-29 : 新增提取文字功能。 - -2023-01-02 : 退出微信登录。 - -2023-01-31 : 新增修改群昵称(仅支持3.8.1.26)。 - -2023-02-01 : 新增拍一拍(仅支持3.8.1.26)。 - -2023-02-04 : 新增群消息置顶和取消置顶。 - -2023-02-06 : 新增确认收款。 - -2023-02-08 : 新增朋友圈消息。 - -2023-02-09 : 新增3.9.0.28版本基础功能。 - -2023-02-13 : 新增群昵称和微信名称。 - -2023-02-17 : 新增通过wxid添加好友,搜索查找微信。 - -2023-03-02 : 新增发送@消息 - -2023-03-04 : 新增消息附件下载 - -2023-03-21 : 新增hook语音 - -2023-03-30 : 新增获取语音文件(推荐使用这个非hook接口) - -2023-04-08 : 3.9.2.23版本功能更新 - -2023-06-05 :3.9.2.26版本更新 - -2023-07-07 :3.9.5.81版本更新 - -#### 功能预览: -0.检查是否登录 -1.获取登录微信信息 -2.发送文本 -3.发送@文本 -5.发送图片 -6.发送文件 -9.hook消息 -10.取消hook消息 -11.hook图片 -12.取消hook图片 -13.hook语音 -14.取消hook语音 -17.删除好友 -19.通过手机或qq查找微信 -20.通过wxid添加好友 -23.通过好友申请 -25.获取群成员 -26.获取群成员昵称 -27.删除群成员 -28.增加群成员 -31.修改群昵称 -32.获取数据库句柄 -34.查询数据库 -35.hook日志 -36.取消hook日志 -40.转发消息 -44.退出登录 -45.确认收款 -46.联系人列表 -47.获取群详情 -48.获取解密图片 -49.图片提取文字ocr -50.拍一拍 -51.群消息置顶消息 -52.群消息取消置顶 -53.朋友圈首页 -54.朋友圈下一页 -55.获取联系人或者群名称 -56.获取消息附件(图片,视频,文件) -57.获取语音文件(silk3格式) -58.登录二维码 -59.邀请入群 -60.获取群/群成员详情 -61.撤回消息 -62.发送公众号消息 -63.转发公众号消息 -64.发送小程序 -65.退款 -66.下载头像(勿用,没什么用) -#### 感谢 -https://github.com/ljc545w/ComWeChatRobot - -https://github.com/NationalSecurityAgency/ghidra - -https://github.com/x64dbg/x64dbg #### 讨论组 https://t.me/+LmvAauweyUpjYzJl diff --git a/app/wxhelper/src/db.cc b/app/wxhelper/src/db.cc index d5f341f..ccacea8 100644 --- a/app/wxhelper/src/db.cc +++ b/app/wxhelper/src/db.cc @@ -3,7 +3,7 @@ #include "base64.h" #include "spdlog/spdlog.h" #include "utils.h" -namespace offset = wxhelper::V3_9_7_29::offset; +namespace offset = wxhelper::V3_9_8_25::offset; namespace wxhelper { void FreeResult(std::vector> &data) { diff --git a/app/wxhelper/src/global_manager.cc b/app/wxhelper/src/global_manager.cc index c8da1d4..9646317 100644 --- a/app/wxhelper/src/global_manager.cc +++ b/app/wxhelper/src/global_manager.cc @@ -32,6 +32,8 @@ void GlobalManager::initialize(HMODULE module) { http_server->AddHttpApiUrl("/api/userInfo", GetSelfInfo); http_server->AddHttpApiUrl("/api/getDBInfo", GetDBInfo); http_server->AddHttpApiUrl("/api/execSql", ExecSql); + http_server->AddHttpApiUrl("/api/lockWeChat", LockWeChat); + http_server->AddHttpApiUrl("/api/unlockWeChat", UnLockWeChat); http_server->Start(); base::ThreadPool::GetInstance().Create(2, 8); diff --git a/app/wxhelper/src/http_url_handler.cc b/app/wxhelper/src/http_url_handler.cc index 87d7cba..e8d3662 100644 --- a/app/wxhelper/src/http_url_handler.cc +++ b/app/wxhelper/src/http_url_handler.cc @@ -135,6 +135,8 @@ std::string GetSelfInfo(mg_http_message* hm) { {"dataSavePath", self_info.data_save_path}, {"currentDataPath", self_info.current_data_path}, {"dbKey", self_info.db_key}, + {"publicKey", self_info.public_key}, + {"privateKey", self_info.private_key}, }; ret_data["data"] = j_info; } @@ -190,4 +192,18 @@ std::string ExecSql(mg_http_message* hm) { return ret_data.dump(); } +std::string LockWeChat(struct mg_http_message* hm) { + INT64 success = WechatService::GetInstance().LockWeChat(); + nlohmann::json ret_data = { + {"code", success}, {"data", {}}, {"msg", "success"}}; + return ret_data.dump(); +} + +std::string UnLockWeChat(struct mg_http_message* hm) { + INT64 success = WechatService::GetInstance().UnLockWeChat(); + nlohmann::json ret_data = { + {"code", success}, {"data", {}}, {"msg", "success"}}; + return ret_data.dump(); +} + } // namespace wxhelper \ No newline at end of file diff --git a/app/wxhelper/src/http_url_handler.h b/app/wxhelper/src/http_url_handler.h index ed09d6a..715bcd5 100644 --- a/app/wxhelper/src/http_url_handler.h +++ b/app/wxhelper/src/http_url_handler.h @@ -12,6 +12,8 @@ std::string CheckLogin(struct mg_http_message *hm); std::string GetSelfInfo(struct mg_http_message *hm); std::string GetDBInfo(struct mg_http_message *hm); std::string ExecSql(struct mg_http_message *hm); +std::string LockWeChat(struct mg_http_message *hm); +std::string UnLockWeChat(struct mg_http_message *hm); } // namespace wxhelper #endif \ No newline at end of file diff --git a/app/wxhelper/src/wechat_function.h b/app/wxhelper/src/wechat_function.h index 77172ee..d546f81 100644 --- a/app/wxhelper/src/wechat_function.h +++ b/app/wxhelper/src/wechat_function.h @@ -131,6 +131,8 @@ struct SelfInfoInner { std::string signature; std::string current_data_path; std::string db_key; + std::string public_key; + std::string private_key; }; struct ContactInner { @@ -205,7 +207,7 @@ struct ContactProfileInner { }; } // namespace common -namespace V3_9_5_81 { +namespace V3_9_8_25 { namespace function { typedef UINT64 (*__GetAccountService)(); @@ -284,6 +286,11 @@ typedef UINT64 (*__SendPatMsg)(UINT64, UINT64); typedef UINT64 (*__GetOCRManager)(); typedef UINT64 (*__DoOCRTask)(UINT64, UINT64, UINT64, UINT64, UINT64); + +typedef UINT64 (*__GetLockWechatMgr)(); +typedef UINT64 (*__RequestLockWechat)(UINT64); +typedef UINT64 (*__RequestUnLockWechat)(UINT64); + } // namespace function namespace prototype { @@ -343,51 +350,48 @@ struct WeChatStr { } // namespace prototype namespace offset { -const UINT64 kGetAccountServiceMgr = 0x8c1230; +const UINT64 kGetAccountServiceMgr = 0x94e510; const UINT64 kSyncMsg = 0xc39680; const UINT64 kSyncMsgNext = 0xc39680; -const UINT64 kGetCurrentDataPath = 0xf5d130; -const UINT64 kGetAppDataSavePath = 0x12d7040; -const UINT64 kGetSendMessageMgr = 0x8c00e0; -const UINT64 kSendTextMsg = 0xfcd8d0; -const UINT64 kFreeChatMsg = 0x8aaa00; +const UINT64 kGetCurrentDataPath = 0x101a920; +const UINT64 kGetAppDataSavePath = 0x13a5b90; +const UINT64 kGetSendMessageMgr = 0x94cd10; +const UINT64 kSendTextMsg = 0x1091F70; +const UINT64 kFreeChatMsg = 0x94e590; -const UINT64 kDoAddMsg = 0x1010d80; +const UINT64 kDoAddMsg = 0x10d9450; const UINT64 kSendImageMsg = 0xfc3d30; const UINT64 kChatMsgInstanceCounter = 0x8c7fd0; const UINT64 kSendFileMsg = 0xdd27f0; const UINT64 kGetAppMsgMgr = 0x8c33f0; -const UINT64 kGetContactMgr = 0x8ae3d0; -const UINT64 kGetContactList = 0xeab270; +const UINT64 kGetContactMgr = 0x93a570; +const UINT64 kGetContactList = 0xf6cb70; -const UINT64 k_sqlite3_exec = 0x252e340; -const UINT64 k_sqlite3_prepare = 0x2535eb0; -const UINT64 k_sqlite3_open = 0x256d6b0; -const UINT64 k_sqlite3_backup_init = 0x24e8450; -const UINT64 k_sqlite3_errcode = 0x256bfb0; -const UINT64 k_sqlite3_close = 0x256a110; -const UINT64 k_sqlite3_step = 0x24f2350; -const UINT64 k_sqlite3_column_count = 0x24f2b70; -const UINT64 k_sqlite3_column_name = 0x24f3570; -const UINT64 k_sqlite3_column_type = 0x24f33c0; -const UINT64 k_sqlite3_column_blob = 0x24f2ba0; -const UINT64 k_sqlite3_column_bytes = 0x24f2c90; -const UINT64 k_sqlite3_finalize = 0x24f1400; +const UINT64 k_sqlite3_exec = 0x26e4f20; +const UINT64 k_sqlite3_prepare = 0x26ecaa0; +const UINT64 k_sqlite3_open = 0x27242a0; +const UINT64 k_sqlite3_step = 0x26a8f30; +const UINT64 k_sqlite3_column_count = 0x26a9750; +const UINT64 k_sqlite3_column_name = 0x26aa150; +const UINT64 k_sqlite3_column_type = 0x26a9fa0; +const UINT64 k_sqlite3_column_blob = 0x26a9780; +const UINT64 k_sqlite3_column_bytes = 0x26a9870; +const UINT64 k_sqlite3_finalize = 0x26a7fe0; -const UINT64 kGPInstance = 0x3a6f908; +const UINT64 kGPInstance = 0x3d8b4f8; const UINT64 kMicroMsgDB = 0xb8; const UINT64 kChatMsgDB = 0x2c8; const UINT64 kMiscDB = 0x5f0; -const UINT64 kEmotionDB = 0x838; -const UINT64 kMediaDB = 0xef8; -const UINT64 kBizchatMsgDB = 0x1a70; -const UINT64 kFunctionMsgDB = 0x1b48; +const UINT64 kEmotionDB = 0x888; +const UINT64 kMediaDB = 0xF48; +const UINT64 kBizchatMsgDB = 0x1AC0; +const UINT64 kFunctionMsgDB = 0x1b98; const UINT64 kDBName = 0x28; const UINT64 kStorageStart = 0x0; const UINT64 kStorageEnd = 0x0; -const UINT64 kMultiDBMgr = 0x3acfb68; -const UINT64 kPublicMsgMgr = 0x3acc268; -const UINT64 kFavoriteStorageMgr = 0x3acf0d0; +const UINT64 kMultiDBMgr = 0x3e00910; +const UINT64 kPublicMsgMgr = 0x3dfe098; +const UINT64 kFavoriteStorageMgr = 0x3e01478; const UINT64 kChatRoomMgr = 0x8e9d30; const UINT64 kGetChatRoomDetailInfo = 0xe73590; @@ -444,99 +448,13 @@ const UINT64 kSendPatMsg = 0x195f340; const UINT64 kGetOCRManager = 0x999780; const UINT64 kDoOCRTask = 0x190b2a0; -} // namespace offset -} // namespace V3_9_5_81 - -namespace V3_9_7_29 { - -namespace prototype { -struct WeChatString { - wchar_t *ptr; - DWORD length; - DWORD max_length; - INT64 c_ptr = 0; - DWORD c_len = 0; - WeChatString() { WeChatString(NULL); } - - WeChatString(const std::wstring &s) { - ptr = (wchar_t *)(s.c_str()); - length = static_cast(s.length()); - max_length = static_cast(s.length()); - } - WeChatString(const wchar_t *pStr) { WeChatString((wchar_t *)pStr); } - WeChatString(int tmp) { - ptr = NULL; - length = 0x0; - max_length = 0x0; - } - WeChatString(wchar_t *pStr) { - ptr = pStr; - length = static_cast(wcslen(pStr)); - max_length = static_cast(wcslen(pStr)); - } - void set_value(const wchar_t *pStr) { - ptr = (wchar_t *)pStr; - length = static_cast(wcslen(pStr)); - max_length = static_cast(wcslen(pStr) * 2); - } -}; - -} // namespace prototype - -namespace offset { -const UINT64 k_sqlite3_exec = 0x2654db0; -const UINT64 k_sqlite3_prepare = 0x265c920; -const UINT64 k_sqlite3_open = 0x2694120; -const UINT64 k_sqlite3_backup_init = 0x260eec0; -const UINT64 k_sqlite3_errcode = 0x2692a20; -const UINT64 k_sqlite3_close = 0x2690b80; -const UINT64 k_sqlite3_step = 0x2618dc0; -const UINT64 k_sqlite3_column_count = 0x26195e0; -const UINT64 k_sqlite3_column_name = 0x2619fe0; -const UINT64 k_sqlite3_column_type = 0x2619e30; -const UINT64 k_sqlite3_column_blob = 0x2619610; -const UINT64 k_sqlite3_column_bytes = 0x2619700; -const UINT64 k_sqlite3_finalize = 0x2617e70; - -const UINT64 kGPInstance = 0x3c19fe8; -const UINT64 kMicroMsgDB = 0xb8; -const UINT64 kChatMsgDB = 0x2c8; -const UINT64 kMiscDB = 0x5f0; -const UINT64 kEmotionDB = 0x888; -const UINT64 kMediaDB = 0xf48; -const UINT64 kBizchatMsgDB = 0x1ac0; -const UINT64 kFunctionMsgDB = 0x1b98; -const UINT64 kDBName = 0x28; -const UINT64 kStorageStart = 0x0; -const UINT64 kStorageEnd = 0x0; -const UINT64 kMultiDBMgr = 0x3c8ef40; -const UINT64 kPublicMsgMgr = 0x3c8c6c8; -const UINT64 kFavoriteStorageMgr = 0x3c8fac0; - -const UINT64 kGetSendMessageMgr = 0x8fe740; -const UINT64 kFreeChatMsg = 0x8fffc0; -const UINT64 kSendTextMsg = 0x1024370; -const UINT64 kDoAddMsg = 0x106b810; -const UINT64 kGetContactMgr = 0x8ebfb0; -const UINT64 kGetContactList = 0xeff050; -const UINT64 kGetAccountServiceMgr = 0x8fff40; -const UINT64 kGetAppDataSavePath = 0x1336c60; -const UINT64 kGetCurrentDataPath = 0xfacb50; - +const UINT64 kGetLockWechatMgr = 0xa727b0; +const UINT64 kRequestLockWechat = 0xa2cc70; +const UINT64 kRequestUnLockWechat = 0xa2cf10; } // namespace offset -namespace function { -typedef UINT64 (*__GetSendMessageMgr)(); -typedef UINT64 (*__SendTextMsg)(UINT64, UINT64, UINT64, UINT64, UINT64, UINT64, - UINT64, UINT64); -typedef UINT64 (*__FreeChatMsg)(UINT64); -typedef UINT64 (*__GetContactMgr)(); -typedef UINT64 (*__GetContactList)(UINT64, UINT64); -typedef UINT64(*__GetAccountService)(); -typedef UINT64 (*__GetDataSavePath)(UINT64); -typedef UINT64 (*__GetCurrentDataPath)(UINT64); -} // namespace function -} // namespace V3_9_7_29 +} // namespace V3_9_8_15 + } // namespace wxhelper #endif \ No newline at end of file diff --git a/app/wxhelper/src/wechat_hook.cc b/app/wxhelper/src/wechat_hook.cc index edfe59f..b2d2829 100644 --- a/app/wxhelper/src/wechat_hook.cc +++ b/app/wxhelper/src/wechat_hook.cc @@ -12,7 +12,7 @@ #include "spdlog/spdlog.h" #include "thread_pool.h" #include "wxutils.h" -namespace offset = wxhelper::V3_9_7_29::offset; +namespace offset = wxhelper::V3_9_8_25::offset; namespace common = wxhelper::common; namespace hook { diff --git a/app/wxhelper/src/wechat_service.cc b/app/wxhelper/src/wechat_service.cc index 140b94f..f3bdb51 100644 --- a/app/wxhelper/src/wechat_service.cc +++ b/app/wxhelper/src/wechat_service.cc @@ -1,9 +1,9 @@ #include "wechat_service.h" #include "wxutils.h" #include "utils.h" -namespace offset = wxhelper::V3_9_7_29::offset; -namespace prototype = wxhelper::V3_9_7_29::prototype; -namespace func = wxhelper::V3_9_7_29::function; +namespace offset = wxhelper::V3_9_8_25::offset; +namespace prototype = wxhelper::V3_9_8_25::prototype; +namespace func = wxhelper::V3_9_8_25::function; namespace wxhelper { WechatService::~WechatService() {} @@ -142,6 +142,22 @@ INT64 WechatService::GetSelfInfo(common::SelfInfoInner& out) { *(INT64 *)(service_addr + 0x450 + 0x10)); } + if (*(INT64 *)(service_addr + 0x7B8) == 0 || + *(INT64 *)(service_addr + 0x7B8 + 0x10) == 0) { + out.public_key = std::string(); + } else { + out.public_key = std::string(*(char **)(service_addr + 0x7B8), + *(INT64 *)(service_addr + 0x7B8 + 0x10)); + } + + if (*(INT64 *)(service_addr + 0x7D8) == 0 || + *(INT64 *)(service_addr + 0x7D8 + 0x10) == 0) { + out.private_key = std::string(); + } else { + out.private_key = std::string(*(char **)(service_addr + 0x7D8), + *(INT64 *)(service_addr + 0x7D8 + 0x10)); + } + if (*(INT64 *)(service_addr + 0x6E0) == 0 || *(INT64 *)(service_addr + 0x6E8) == 0) { out.db_key = std::string(); @@ -375,6 +391,30 @@ INT64 WechatService::DoOCRTask(const std::wstring& img_path, return INT64(); } +INT64 WechatService::LockWeChat() { + INT64 success = -1; + UINT64 lock_mgr_addr = base_addr_ + offset::kGetLockWechatMgr; + UINT64 request_lock_addr = base_addr_ + offset::kRequestLockWechat; + func::__GetLockWechatMgr GetLockMgr = (func::__GetLockWechatMgr)lock_mgr_addr; + func::__RequestLockWechat request_lock = + (func::__RequestLockWechat)request_lock_addr; + UINT64 mgr = GetLockMgr(); + success = request_lock(mgr); + return success; +} + +INT64 WechatService::UnLockWeChat() { + INT64 success = -1; + UINT64 lock_mgr_addr = base_addr_ + offset::kGetLockWechatMgr; + UINT64 request_unlock_addr = base_addr_ + offset::kRequestUnLockWechat; + func::__GetLockWechatMgr GetLockMgr = (func::__GetLockWechatMgr)lock_mgr_addr; + func::__RequestUnLockWechat request_unlock = + (func::__RequestUnLockWechat)request_unlock_addr; + UINT64 mgr = GetLockMgr(); + success = request_unlock(mgr); + return success; +} + void WechatService::SetBaseAddr(UINT64 addr) { base_addr_ = addr; } void WechatService::SetJsApiAddr(UINT64 addr) { js_api_addr_ = addr; } diff --git a/app/wxhelper/src/wechat_service.h b/app/wxhelper/src/wechat_service.h index 9e93052..9790f84 100644 --- a/app/wxhelper/src/wechat_service.h +++ b/app/wxhelper/src/wechat_service.h @@ -70,6 +70,8 @@ class WechatService : public base::Singleton { const std::string& index_page); INT64 SendPatMsg(const std::wstring& room_id, const std::wstring& wxid); INT64 DoOCRTask(const std::wstring& img_path, std::string& result); + INT64 LockWeChat(); + INT64 UnLockWeChat(); void SetBaseAddr(UINT64 addr); void SetJsApiAddr(UINT64 addr); diff --git a/doc/3.9.5.81.md b/doc/3.9.5.81.md index e6462b4..cb6d94d 100644 --- a/doc/3.9.5.81.md +++ b/doc/3.9.5.81.md @@ -132,7 +132,7 @@ data: 接口返回的数据 "dataSavePath": "C:\\wechatDir\\WeChat Files\\", "dbKey": "965715e30e474da09250cb5aa047e3940ffa1c8f767c4263b132bb512933db49", "headImage": "https://wx.qlogo.cn/mmhead/ver_1/MiblV0loY0GILewQ4u2121", - "mobile": "13949175447", + "mobile": "13913913913", "name": "xxx", "province": "Henan", "signature": "xxx", diff --git a/doc/3.9.7.29.md b/doc/3.9.7.29.md index c14d492..e39b034 100644 --- a/doc/3.9.7.29.md +++ b/doc/3.9.7.29.md @@ -116,7 +116,7 @@ HiddenDll=0 //1隐藏 0不隐藏 "dataSavePath": "C:\\wechatDir\\WeChat Files\\", "dbKey": "965715e30e474da09250cb5aa047e3940ffa1c8f767c4263b132bb512933db49", "headImage": "https://wx.qlogo.cn/mmhead/ver_1/MiblV0loY0GILewQ4u2121", - "mobile": "13949175447", + "mobile": "13913913913", "name": "xxx", "province": "Henan", "signature": "xxx", diff --git a/doc/3.9.8.25.md b/doc/3.9.8.25.md new file mode 100644 index 0000000..17b6bc0 --- /dev/null +++ b/doc/3.9.8.25.md @@ -0,0 +1,481 @@ +#### 编译构建 +环境: +cl.exe目录= c:/cl.exe +ml64.exe目录 =c:/ml64.exe +vcpkg目录 = c:/vcpkg +wxhelper目录 = c:/wxhelper +``` + +vcpkg install detours:x64-windows +vcpkg install nlohmann-json:x64-windows + +cd wxhelper +mkdir build +cd build +cmake -DCMAKE_C_COMPILER=cl.exe \ +-DCMAKE_CXX_COMPILER=cl.exe \ +-DCMAKE_ASM_MASM_COMPILER=ml64.exe \ +-DCMAKE_BUILD_TYPE=Debug \ +-DCMAKE_INSTALL_PREFIX=C:/wxhelper/install/x64-debug \ +-DCMAKE_TOOLCHAIN_FILE:FILEPATH=C:/vcpkg/scripts/buildsystems/vcpkg.cmake \ +-SC:c:/wxhelper \ +-BC:c:/wxhelper/build/x64-debug\ +-G Ninja +cmake --build .. +``` +如果有错误按错误提示修正即可。 + +## 3.9.5.81版本,http接口文档,文档仅供参考。 + +### 简单说明: + 所有接口只支持post方法。 + 全部使用json格式。 + 格式: http://host:port/api/xxxx + host: 绑定的host + port: 监听的端口 + xxxx: 对应的功能路径 + 返回结构的json格式: + ``` javascript + { + "code": 1, + "data": {}, + "msg": "success" +} +``` +code: 错误码 +msg: 成功/错误信息 +data: 接口返回的数据 + + + +#### 0.检查微信登录** +###### 接口功能 +> 检查微信是否登录 + +###### 接口地址 +> [/api/checkLogin](/api/checkLogin) + +###### HTTP请求方式 +> POST JSON + +###### 请求参数 +|参数|必选|类型|说明| +|---|---|---|---| + + +###### 返回字段 +|返回字段|字段类型|说明 | +|---|---|---| +|code|int|返回状态,1 成功, 0失败| +|result|string|成功提示| +|data|string|响应内容| + +###### 接口示例 +入参: +``` javascript +``` +响应: +``` javascript +{ + "code": 1, + "msg": "success", + "data":null +} +``` + + +#### 1.获取登录用户信息** +###### 接口功能 +> 获取登录用户信息 + +###### 接口地址 +> [/api/userInfo](/api/userInfo) + +###### HTTP请求方式 +> POST JSON + +###### 请求参数 +|参数|必选|类型|说明| +|---|---|---|---| + + +###### 返回字段 +|返回字段|字段类型|说明 | +|---|---|---| +|code|int|返回状态,1 成功, 0失败| +|result|string|成功提示| +|data|object|响应内容| +|  account|string|账号| +|  headImage|string|头像| +|  city|string|城市| +|  country|string|国家| +|  currentDataPath|string|当前数据目录,登录的账号目录| +|  dataSavePath|string|微信保存目录| +|  mobile|string|手机| +|  name|string|昵称| +|  province|string|省| +|  wxid|string|wxid| +|  signature|string|个人签名| +|  dbKey|string|数据库的SQLCipher的加密key,可以使用该key配合decrypt.py解密数据库 + +###### 接口示例 +入参: +``` javascript +``` +响应: +``` javascript +{ + "code": 1, + "data": { + "account": "xxx", + "city": "Zhengzhou", + "country": "CN", + "currentDataPath": "C:\\WeChat Files\\wxid_xxx\\", + "dataSavePath": "C:\\wechatDir\\WeChat Files\\", + "dbKey": "965715e30e474da09250cb5aa047e3940ffa1c8f767c4263b132bb512933db49", + "headImage": "https://wx.qlogo.cn/mmhead/ver_1/MiblV0loY0GILewQ4u2121", + "mobile": "13912341234", + "name": "xxx", + "province": "Henan", + "signature": "xxx", + "wxid": "wxid_22222", + "privateKey":"-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQCsC8wKKfylbnl0QpcowI4XDoCMlDptEeVq1aY0w9nR62llfjVL\nKIDbHMf9+tCxv5MWBuxrZgldzLkSQ/M5XwL5HQrO+XTj9Sx/ -END RSA PRIVATE KEY-----\n", + "publicKey":"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQAB\n-----END PUBLIC KEY-----\n" + }, + "msg": "success" +} +``` + + +#### 2.发送文本消息** +###### 接口功能 +> 发送文本消息 + +###### 接口地址 +> [/api/sendTextMsg](/api/sendTextMsg) + +###### HTTP请求方式 +> POST JSON + +###### 请求参数 +|参数|必选|类型|说明| +|---|---|---|---| +|wxid |true |string| 接收人wxid | +|msg|true |string|消息文本内容| + +###### 返回字段 +|返回字段|字段类型|说明 | +|---|---|---| +|code|int|返回状态,不为0成功, 0失败| +|msg|string|成功提示| +|data|object|null| + + +###### 接口示例 + +入参: +``` javascript +{ + "wxid": "filehelper", + "msg": "1112222" +} +``` +响应: +``` javascript +{"code":345686720,"msg":"success","data":null} +``` + +#### 3.hook消息** +###### 接口功能 +> hook接收文本消息,图片消息,群消息.该接口将hook的消息通过tcp回传给本地的端口。 +enableHttp=1时,使用url,timeout参数配置服务端的接收地址。请求为post,Content-Type 为json。 +enableHttp=0时,使用ip,port的tcp服务回传消息。 + +###### 接口地址 +> [/api/hookSyncMsg](/api/hookSyncMsg) + +###### HTTP请求方式 +> POST JSON + +###### 请求参数 +|参数|必选|类型|说明| +|---|---|---|---| +|port |true |string| 本地服务端端口,用来接收消息内容 | +|ip |true |string| 服务端ip地址,用来接收消息内容,可以是任意ip,即tcp客户端连接的服务端的ip| +|url |true |string| http的请求地址,enableHttp=1时,不能为空 | +|timeout |true |string| 超时时间,单位ms| +|enableHttp |true |bool| true/false :true.启用http false.不启用http| + +###### 返回字段 +|返回字段|字段类型|说明 | +|---|---|---| +|code|int|返回状态,0成功, 非0失败| +|data|object|null| +|msg|string|成功提示| + + +###### 接口示例 +入参: +``` javascript +{ + "port": "19099", + "ip":"127.0.0.1", + "url":"http://localhost:8080", + "timeout":"3000", + "enableHttp":false +} +``` +响应: +``` javascript +{"code":0,"msg":"success","data":null} +``` + +#### 4.取消hook消息** +###### 接口功能 +> 取消hook消息 + +###### 接口地址 +> [/api/unhookSyncMsg](/api/unhookSyncMsg) + +###### HTTP请求方式 +> POST JSON + +###### 请求参数 +|参数|必选|类型|说明| +|---|---|---|---| + + +###### 返回字段 +|返回字段|字段类型|说明 | +|---|---|---| +|code|int|返回状态,0成功, 非0失败| +|data|object|null| +|msg|string|成功提示| + + +###### 接口示例 +入参: +``` javascript + +``` +响应: +``` javascript +{"code":0,"msg":"success","data":null} +``` + +#### 5.好友列表** +###### 接口功能 +> 好友列表 + +###### 接口地址 +> [/api/getContactList](/api/getContactList) + +###### HTTP请求方式 +> POST JSON + +###### 请求参数 +|参数|必选|类型|说明| +|---|---|---|---| + + +###### 返回字段 +|返回字段|字段类型|说明 | +|---|---|---| +|code|int|返回状态,0成功, 非0失败| +|data|object|好友信息| +|  customAccount|string|自定义账号| +|  encryptName|string|昵称| +|  nickname|string|昵称| +|  pinyin|string|简拼| +|  pinyinAll|string|全拼| +|  reserved1|number|未知| +|  reserved2|number|未知| +|  type|number|未知| +|  verifyFlag|number|未知| +|  wxid|string|wxid| +|msg|string|成功提示| + + +###### 接口示例 +入参: +``` javascript + +``` +响应: +``` javascript +{ + "code": 1, + "data": [ + { + "customAccount": "", + "encryptName": "v3_020b3826fd03010000000000e04128fddf4d90000000501ea9a3dba12f95f6b60a0536a1adb6b40fc4086288f46c0b89e6c4eb8062bb1661b4b6fbab708dc4f89d543d7ade135b2be74c14b9cfe3accef377b9@stranger", + "nickname": "文件传输助手", + "pinyin": "WJCSZS", + "pinyinAll": "wenjianchuanshuzhushou", + "reserved1": 1, + "reserved2": 1, + "type": 3, + "verifyFlag": 0, + "wxid": "filehelper" + } + ]. + "msg": "success" + +``` + +#### 6.获取数据库信息** +###### 接口功能 +> 获取数据库信息和句柄 + +###### 接口地址 +> [/api/getDBInfo](/api/getDBInfo) + +###### HTTP请求方式 +> POST JSON + +###### 请求参数 +|参数|必选|类型|说明| +|---|---|---|---| + + +###### 返回字段 +|返回字段|字段类型|说明 | +|---|---|---| +|code|int|返回状态,0成功, 非0失败| +|msg|string|返回信息| +|data|array|好友信息| +|  databaseName|string|数据库名称| +|  handle|number|句柄| +|  tables|array|表信息| +|    name|string|表名| +|    rootpage|string|rootpage| +|    sql|string|ddl语句| +|    tableName|string|表名| + + +###### 接口示例 +入参: +``` javascript + +``` +响应: +``` javascript +{ + "code": 1, + "data": [ + { + "databaseName": "MicroMsg.db", + "handle": 1755003930784, + "tables": [ + { + "name": "Contact", + "rootpage": "2", + "sql": "CREATE TABLE Contact(UserName TEXT PRIMARY KEY ,Alias TEXT,EncryptUserName TEXT,DelFlag INTEGER DEFAULT 0,Type INTEGER DEFAULT 0,VerifyFlag INTEGER DEFAULT 0,Reserved1 INTEGER DEFAULT 0,Reserved2 INTEGER DEFAULT 0,Reserved3 TEXT,Reserved4 TEXT,Remark TEXT,NickName TEXT,LabelIDList TEXT,DomainList TEXT,ChatRoomType int,PYInitial TEXT,QuanPin TEXT,RemarkPYInitial TEXT,RemarkQuanPin TEXT,BigHeadImgUrl TEXT,SmallHeadImgUrl TEXT,HeadImgMd5 TEXT,ChatRoomNotify INTEGER DEFAULT 0,Reserved5 INTEGER DEFAULT 0,Reserved6 TEXT,Reserved7 TEXT,ExtraBuf BLOB,Reserved8 INTEGER DEFAULT 0,Reserved9 INTEGER DEFAULT 0,Reserved10 TEXT,Reserved11 TEXT)", + "tableName": "Contact" + } + ] + } + ], + "msg":"success" +} +``` + + +#### 7.查询数据库** +###### 接口功能 +> 查询数据库 + +###### 接口地址 +> [/api/execSql](/api/execSql) + +###### HTTP请求方式 +> POST JSON + +###### 请求参数 +|参数|必选|类型|说明| +|---|---|---|---| +|dbHandle |true |number| | +|sql |true |string| 执行的sql | + +###### 返回字段 +|返回字段|字段类型|说明 | +|---|---|---| +|code|int|返回状态,0成功, 非0失败| +|msg|string|返回信息| +|data|array|sqlite返回的结果| + + + +###### 接口示例 +入参: +``` javascript +{ + "dbHandle":2006119800400, + "sql":"select * from MSG where localId =301;" +} +``` +响应: +``` javascript +{ + "code": 1, + "data": [ + [ + "localId", + "TalkerId", + "MsgSvrID", + "Type", + "SubType", + "IsSender", + "CreateTime", + "Sequence", + "StatusEx", + "FlagEx", + "Status", + "MsgServerSeq", + "MsgSequence", + "StrTalker", + "StrContent", + "DisplayContent", + "Reserved0", + "Reserved1", + "Reserved2", + "Reserved3", + "Reserved4", + "Reserved5", + "Reserved6", + "CompressContent", + "BytesExtra", + "BytesTrans" + ], + [ + "301", + "1", + "8824834301214701891", + "1", + "0", + "0", + "1685401473", + "1685401473000", + "0", + "0", + "2", + "1", + "795781866", + "wxid_123", + "testtest", + "", + "0", + "2", + "", + "", + "", + "", + "", + "", + "CgQIEBAAGo0BCAcSiAE8bXNnc291cmNlPJPHNpZ25hdHVyZT52MV9wd12bTZyRzwvc2lnbmF0dXJPgoJPHRtcF9ub2RlPgoJCTxwsaXNoZXItaWQ+Jmx0OyFbQ0RBVEFbXV0mZ3Q7PC9wdWJsaXNoZXItaWQ+Cgk8L3RtcF9ub2RlPgo8L21zZ3NvdXJjZT4KGiQIAhIgNDE1MDA0NjRhZTRmMjk2NjhjMzY2ZjFkOTdmMjAwNDg=", + "" + ] + ], + "msg": "success" +} +``` diff --git a/go_client/main.go b/go_client/main.go deleted file mode 100644 index 6859a43..0000000 --- a/go_client/main.go +++ /dev/null @@ -1,11 +0,0 @@ -package main - -import ( - "go_client/tcpserver" - "log" -) - -func main() { - log.SetFlags(log.LstdFlags | log.Lshortfile) - tcpserver.Listen(19099) -} diff --git a/go_client/tcpserver/tcpserver.go b/go_client/tcpserver/tcpserver.go deleted file mode 100644 index edee43b..0000000 --- a/go_client/tcpserver/tcpserver.go +++ /dev/null @@ -1,44 +0,0 @@ -package tcpserver - -import ( - "bufio" - "log" - "net" - "strconv" -) - -func Listen(port int) { - p := strconv.Itoa(port) - adress := "127.0.0.1:" + p - ln, err := net.Listen("tcp", adress) - if err != nil { - log.Fatal(err) - } - defer ln.Close() - log.Println("tcp server started") - for { - conn, err := ln.Accept() - if err != nil { - log.Println(err) - continue - } - go handle(conn) - } -} - -func handle(conn net.Conn) { - defer func() { - if err := recover(); err != nil { - log.Println("发生了未处理的异常", err) - } - }() - defer conn.Close() - scanner := bufio.NewScanner(conn) - for scanner.Scan() { - line := scanner.Bytes() - log.Println("收到消息:", string(line)) - } - if err := scanner.Err(); err != nil { - log.Println("错误:", err) - } -} diff --git a/java_client/.gitignore b/java_client/.gitignore deleted file mode 100644 index 549e00a..0000000 --- a/java_client/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/java_client/README.md b/java_client/README.md deleted file mode 100644 index 590f061..0000000 --- a/java_client/README.md +++ /dev/null @@ -1,21 +0,0 @@ -环境为jdk17 -执行之后会在当前项目所处磁盘根路径生成一个exec文件夹,然后会把src/main/resources/exec下的文件放在那避免因为路径问题出错 -java_client/src/main/resources/exec/c.exe 为注入器,只不过把名字改短了,更新的话换成最新版,改个名字就行, wxhelper.dll同理 - -项目启动之后,会生成一个tcp服务端,用来接受hook信息,然后把接收的信息放在队列中,之后用一个线程去循环处理消息. -具体实现可以看 -```com.example.wxhk.tcp.vertx```包下的三个文件 - -com.example.wxhk.tcp.vertx.VertxTcp 这个是tcp服务端,接受信息 - -com.example.wxhk.tcp.vertx.InitWeChat 微信环境初始化 - -com.example.wxhk.tcp.vertx.ArrHandle 循环消息处理 - -com.example.wxhk.server.WxSmgServer 为消息处理接口,实现其中的方法即可 - -![image](https://github.com/sglmsn/wxhelper/assets/36943585/59d49401-a492-46a9-8ed9-dab7fb1822b4) - - - -启动项目需要去修改配置文件的微信路径 diff --git a/java_client/pom.xml b/java_client/pom.xml deleted file mode 100644 index 3a98e6f..0000000 --- a/java_client/pom.xml +++ /dev/null @@ -1,184 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.1.0 - - - com.example - wxhk - 0.0.1-SNAPSHOT - wxhk - wxhk - - 17 - - - - org.springframework.boot - spring-boot-starter-mail - - - - - - - org.springframework.boot - spring-boot-starter-validation - - - - - - - - - - io.netty - netty-all - 4.1.92.Final - - - com.squareup.okhttp3 - okhttp - 4.11.0 - - - - io.vertx - vertx-core - 4.4.2 - - - io.vertx - vertx-web - 4.4.2 - - - io.vertx - vertx-web-client - 4.4.2 - - - io.vertx - vertx-mysql-client - 4.4.2 - - - org.springframework.boot - spring-boot-devtools - runtime - true - - - org.springframework.boot - spring-boot-configuration-processor - true - - - org.projectlombok - lombok - true - - - org.dromara.hutool - hutool-all - 6.0.0.M3 - - - com.fasterxml.jackson.core - jackson-databind - 2.15.1 - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - - - - - - - - - **/com/example/wxhk/** - - - - - - - true - lib/ - false - - com.example.wxhk.WxhkApplication - - - - resources/ - - - - ${project.build.directory}/pack/ - - - - org.apache.maven.plugins - maven-dependency-plugin - - - - copy-dependencies - package - - copy-dependencies - - - - ${project.build.directory}/pack/lib - - - - - - maven-resources-plugin - - - - copy-resources - package - - copy-resources - - - - - src/main/resources - - - - ${project.build.directory}/pack/resources - - - - - - - - diff --git a/java_client/src/main/java/com/example/wxhk/WxhkApplication.java b/java_client/src/main/java/com/example/wxhk/WxhkApplication.java deleted file mode 100644 index da0ccbd..0000000 --- a/java_client/src/main/java/com/example/wxhk/WxhkApplication.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.example.wxhk; - -import io.vertx.core.Vertx; -import io.vertx.core.VertxOptions; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class WxhkApplication { - public static final Vertx vertx; - - static { - vertx = Vertx.vertx(new VertxOptions().setWorkerPoolSize(5).setEventLoopPoolSize(5)); - } - - //ConsoleInject.exe -i WeChat.exe -p D:\wxhelper.dll - //ConsoleApplication.exe -I 4568 -p C:\wxhelper.dll -m 17484 -P 1888 - public static void main(String[] args) { - SpringApplication.run(WxhkApplication.class, args); - } - -} diff --git a/java_client/src/main/java/com/example/wxhk/constant/WxMsgType.java b/java_client/src/main/java/com/example/wxhk/constant/WxMsgType.java deleted file mode 100644 index de9f7ad..0000000 --- a/java_client/src/main/java/com/example/wxhk/constant/WxMsgType.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.example.wxhk.constant; - -/** - * 接受到的微信消息类型 - * - * @author wt - * @date 2023/05/26 - */ -public enum WxMsgType { - - /** - * - */ - 私聊信息(1), - 好友请求(37), - 收到名片(42), - 表情(47), - 转账和收款(49), - 收到转账之后或者文件助手等信息(51), - - 入群(10000), - /** - * 扫码触发,会触发2次, 有一次有编号,一次没有,还有登陆之后也有,很多情况都会调用这个 - */ - 扫码触发(10002), - - ; - Integer type; - - WxMsgType(Integer type) { - this.type = type; - } - - public Integer getType() { - return type; - } -} diff --git a/java_client/src/main/java/com/example/wxhk/controller/WxMsgController.java b/java_client/src/main/java/com/example/wxhk/controller/WxMsgController.java deleted file mode 100644 index 78b2e5d..0000000 --- a/java_client/src/main/java/com/example/wxhk/controller/WxMsgController.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.example.wxhk.controller; - - -import org.dromara.hutool.log.Log; - -public class WxMsgController { - - protected static final Log log = Log.get(); - - - void init() { - - } -} diff --git a/java_client/src/main/java/com/example/wxhk/infe/Resp.java b/java_client/src/main/java/com/example/wxhk/infe/Resp.java deleted file mode 100644 index 1c3fd04..0000000 --- a/java_client/src/main/java/com/example/wxhk/infe/Resp.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.example.wxhk.infe; - -/** - * http 响应 - * @author wt - * @date 2023/06/01 - */ -public interface Resp extends java.io.Serializable{ - - -} diff --git a/java_client/src/main/java/com/example/wxhk/infe/SendMsg.java b/java_client/src/main/java/com/example/wxhk/infe/SendMsg.java deleted file mode 100644 index 4050bd6..0000000 --- a/java_client/src/main/java/com/example/wxhk/infe/SendMsg.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.example.wxhk.infe; - -import io.vertx.core.json.JsonObject; - -/** - * http接口请求的基础接口 - * - * @author wt - * @date 2023/06/01 - */ -public interface SendMsg extends java.io.Serializable{ - - default JsonObject toJson(){ - return JsonObject.mapFrom(this); - } - -} diff --git a/java_client/src/main/java/com/example/wxhk/model/PrivateChatMsg.java b/java_client/src/main/java/com/example/wxhk/model/PrivateChatMsg.java deleted file mode 100644 index 25424b7..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/PrivateChatMsg.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.example.wxhk.model; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -/** - * 私聊 - * - * @author wt - * @date 2023/05/26 - */ -@Data -@Accessors(chain = true) -@JsonIgnoreProperties(ignoreUnknown = true) -public class PrivateChatMsg implements Serializable { - - String path; - /** - * 内容 - */ - - private String content; - /** - * 当是群聊的时候 为群id,否则为微信id - */ - private String fromGroup; - /** - * 微信id - */ - private String fromUser; - private Integer isSendMsg; - /** - * 1通过手机发送 - */ - private Integer isSendByPhone; - private Long msgId; - private Integer pid; - private String sign; - private String signature; - private String time; - private Integer timestamp; - /** - * 类型 - */ - private Integer type; -} diff --git a/java_client/src/main/java/com/example/wxhk/model/dto/PayoutInformation.java b/java_client/src/main/java/com/example/wxhk/model/dto/PayoutInformation.java deleted file mode 100644 index 5ed4396..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/dto/PayoutInformation.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.example.wxhk.model.dto; - -import java.math.BigDecimal; - -/** - * 支付信息 - * - * @author wt - * @param receiverUsername 付款人 - * @param decimal 收款金额 - * @param remark 备注 - * @param transcationid - * @param transferid - * @date 2023/06/06 - */ -public record PayoutInformation(String receiverUsername, BigDecimal decimal, String remark,String transcationid,String transferid) implements java.io.Serializable { - - public PayoutInformation(String receiverUsername, BigDecimal decimal, String remark) { - this(receiverUsername, decimal, remark, null, null); - } -} \ No newline at end of file diff --git a/java_client/src/main/java/com/example/wxhk/model/request/AddFriends.java b/java_client/src/main/java/com/example/wxhk/model/request/AddFriends.java deleted file mode 100644 index 42178aa..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/request/AddFriends.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.example.wxhk.model.request; - -import com.example.wxhk.infe.SendMsg; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 添加wxid 好友 - * @author wt - * @date 2023/06/01 - */ -@Data -@Accessors(chain = true) -public class AddFriends implements SendMsg { - String wxid; - /** - * 验证信息 - */ - String msg; -} diff --git a/java_client/src/main/java/com/example/wxhk/model/request/ConfirmThePayment.java b/java_client/src/main/java/com/example/wxhk/model/request/ConfirmThePayment.java deleted file mode 100644 index d17d7ff..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/request/ConfirmThePayment.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.example.wxhk.model.request; - -import com.example.wxhk.infe.SendMsg; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 确认收款 - * @author wt - * @date 2023/06/01 - */ -@Data -@Accessors(chain = true) -public class ConfirmThePayment implements SendMsg { - /** - * 转账人微信id,从hook的消息中获取 - */ - String wxid; - /** - * 从hook的消息中获取对应的字段内容 - */ - String transcationId; - /** - * 从hook的消息中获取对应的字段内容。 - */ - String transferId; -} diff --git a/java_client/src/main/java/com/example/wxhk/model/request/FindWeChat.java b/java_client/src/main/java/com/example/wxhk/model/request/FindWeChat.java deleted file mode 100644 index 68a80a9..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/request/FindWeChat.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.example.wxhk.model.request; - -import com.example.wxhk.infe.SendMsg; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 通过手机或者qq查找微信 - * @author wt - * @date 2023/06/01 - */ -@Data -@Accessors(chain = true) -public class FindWeChat implements SendMsg { - /** - * 通过 手机或qq查询信息 - */ - String keyword; -} diff --git a/java_client/src/main/java/com/example/wxhk/model/request/ForwardMessages.java b/java_client/src/main/java/com/example/wxhk/model/request/ForwardMessages.java deleted file mode 100644 index fed4d28..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/request/ForwardMessages.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.example.wxhk.model.request; - -import com.example.wxhk.infe.SendMsg; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 转发消息 - * @author wt - * @date 2023/06/01 - */ -@Data -@Accessors(chain = true) -public class ForwardMessages implements SendMsg { - /** - * 消息接收人wxid - */ - String wxid; - /** - * 消息id - */ - String msgid; -} diff --git a/java_client/src/main/java/com/example/wxhk/model/request/GetGroupMembers.java b/java_client/src/main/java/com/example/wxhk/model/request/GetGroupMembers.java deleted file mode 100644 index 036fa9d..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/request/GetGroupMembers.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.example.wxhk.model.request; - -import com.example.wxhk.infe.SendMsg; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 获取群成员 - * @author wt - * @date 2023/06/01 - */ -@Data -@Accessors(chain = true) -public class GetGroupMembers implements SendMsg { - String chatRoomId; -} diff --git a/java_client/src/main/java/com/example/wxhk/model/request/GetsTheNicknameOfAGroupMember.java b/java_client/src/main/java/com/example/wxhk/model/request/GetsTheNicknameOfAGroupMember.java deleted file mode 100644 index 5d68590..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/request/GetsTheNicknameOfAGroupMember.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.example.wxhk.model.request; - -import com.example.wxhk.infe.SendMsg; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 获取群成员昵称 - * @author wt - * @date 2023/06/01 - */ -@Data -@Accessors(chain = true) -public class GetsTheNicknameOfAGroupMember implements SendMsg { - /** - * 聊天室id - */ - String chatRoomId; - /** - * 成员id - */ - String memberId; -} diff --git a/java_client/src/main/java/com/example/wxhk/model/request/IncreaseGroupMembership.java b/java_client/src/main/java/com/example/wxhk/model/request/IncreaseGroupMembership.java deleted file mode 100644 index a80cee2..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/request/IncreaseGroupMembership.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.example.wxhk.model.request; - -import com.example.wxhk.infe.SendMsg; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 增加群成员 - * @author wt - * @date 2023/06/01 - */ -@Data -@Accessors(chain = true) -public class IncreaseGroupMembership implements SendMsg { - /** - * 聊天室id - */ - String chatRoomId; - /** - * 成员id,以,分割 - */ - String memberIds; -} diff --git a/java_client/src/main/java/com/example/wxhk/model/request/OpenHook.java b/java_client/src/main/java/com/example/wxhk/model/request/OpenHook.java deleted file mode 100644 index 12929d0..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/request/OpenHook.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.example.wxhk.model.request; - -import com.example.wxhk.infe.SendMsg; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 开启hook - * - * @author wt - * @date 2023/06/01 - */ -@Data -@Accessors(chain = true) -public class OpenHook implements SendMsg { - String port; - String ip; -} diff --git a/java_client/src/main/java/com/example/wxhk/model/request/SendAtText.java b/java_client/src/main/java/com/example/wxhk/model/request/SendAtText.java deleted file mode 100644 index d158bc3..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/request/SendAtText.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.example.wxhk.model.request; - -import com.example.wxhk.infe.SendMsg; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 发送at文本 - * @author wt - * @date 2023/06/01 - */ -@Data -@Accessors(chain = true) -public class SendAtText implements SendMsg { - /** - * 聊天室id,群聊用 - */ - String chatRoomId; - /** - * 群聊的时候用at多个用逗号隔开,@所有人则是notify@all - */ - String wxids; - - String msg; -} diff --git a/java_client/src/main/java/com/example/wxhk/model/request/SendFile.java b/java_client/src/main/java/com/example/wxhk/model/request/SendFile.java deleted file mode 100644 index 54fcfb9..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/request/SendFile.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.example.wxhk.model.request; - -import com.example.wxhk.infe.SendMsg; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 发送文件 - * - * @author wt - * @date 2023/06/01 - */ -@Data -@Accessors(chain = true) -public class SendFile implements SendMsg { - String wxid; - /** - * 发送文件路径 - * "filePath": "C:/Users/123.txt" - */ - String filePath; -} diff --git a/java_client/src/main/java/com/example/wxhk/model/request/SendImg.java b/java_client/src/main/java/com/example/wxhk/model/request/SendImg.java deleted file mode 100644 index cd62977..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/request/SendImg.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.example.wxhk.model.request; - -import com.example.wxhk.infe.SendMsg; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 发送图片 - * - * @author wt - * @date 2023/06/01 - */ -@Data -@Accessors(chain = true) -public class SendImg implements SendMsg { - String wxid; - /** - * 发送图片接口 - * "imagePath": "C:/Users/123.png" - */ - String imagePath; -} diff --git a/java_client/src/main/java/com/example/wxhk/model/request/SendMsg.java b/java_client/src/main/java/com/example/wxhk/model/request/SendMsg.java deleted file mode 100644 index e86b213..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/request/SendMsg.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.example.wxhk.model.request; - -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * http请求参数 - * - * @author wt - * @date 2023/06/01 - */ -@Data -@Accessors(chain = true) -public class SendMsg { - /** - * wxid - */ - String wxid; - /** - * 消息内容 - */ - String msg; - - /** - * 聊天室id,群聊用 - */ - String chatRoomId; - /** - * 成员id - */ - String memberId; - - /** - * 群聊的时候用at多个用逗号隔开,@所有人则是notify@all - */ - String wxids; - /** - * 发送图片接口 - * "imagePath": "C:/Users/123.png" - */ - String imagePath; - /** - * 发送文件路径 - * "filePath": "C:/Users/123.txt" - */ - String filePath; - /** - * 通过 手机或qq查询信息 - */ - String keyword; - -} diff --git a/java_client/src/main/java/com/example/wxhk/model/request/SendText.java b/java_client/src/main/java/com/example/wxhk/model/request/SendText.java deleted file mode 100644 index a749c3d..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/request/SendText.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.example.wxhk.model.request; - -import com.example.wxhk.infe.SendMsg; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 发送文本 - * - * @author wt - * @date 2023/06/01 - */ -@Data -@Accessors(chain = true) -public class SendText implements SendMsg { - String wxid; - String msg; -} diff --git a/java_client/src/main/java/com/example/wxhk/model/request/ThroughFriends.java b/java_client/src/main/java/com/example/wxhk/model/request/ThroughFriends.java deleted file mode 100644 index 4e68332..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/request/ThroughFriends.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.example.wxhk.model.request; - -import com.example.wxhk.infe.SendMsg; -import lombok.Data; -import lombok.experimental.Accessors; - -/** - * 通过好友请求 - * @author wt - * @date 2023/06/01 - */ -@Data -@Accessors(chain = true) -public class ThroughFriends implements SendMsg { - /** - * 添加好友消息内容里的encryptusername - */ - String v3; - /** - * 添加好友消息内容里的ticket - */ - String v4; - /** - * 好友权限,0是无限制,1是不让他看我,2是不看他,3是1+2 - */ - String permission; -} diff --git a/java_client/src/main/java/com/example/wxhk/model/response/ContactList.java b/java_client/src/main/java/com/example/wxhk/model/response/ContactList.java deleted file mode 100644 index fcd1770..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/response/ContactList.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.example.wxhk.model.response; - -import com.example.wxhk.infe.Resp; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.util.List; - -/** - * 联系人列表 - * @author wt - * @date 2023/06/01 - */ -@Data -@Accessors(chain = true) -@JsonIgnoreProperties(ignoreUnknown = true) -public class ContactList implements Resp { - - /** - * code : 1 - * data : [{"customAccount":"","delFlag":0,"type":1,"userName":"朋友推荐消息","verifyFlag":0,"wxid":"fmessage"},{"customAccount":"tencent_cloud","delFlag":0,"type":3,"userName":"腾讯云助手","verifyFlag":24,"wxid":"gh_a73e2407e0f8"},{"customAccount":"","delFlag":0,"type":1,"userName":"语音记事本","verifyFlag":0,"wxid":"medianote"},{"customAccount":"","delFlag":0,"type":1,"userName":"漂流瓶","verifyFlag":0,"wxid":"floatbottle"},{"customAccount":"jys-wt","delFlag":0,"type":8651011,"userName":"时光似水戏流年","verifyFlag":0,"wxid":"wxid_gf1fogt5a0pq22"},{"customAccount":"wxzhifu","delFlag":0,"type":3,"userName":"微信支付","verifyFlag":24,"wxid":"gh_3dfda90e39d6"},{"customAccount":"dhkzfr","delFlag":0,"type":3,"userName":"阿芙(代发)","verifyFlag":0,"wxid":"wxid_kh16lri40gzj22"},{"customAccount":"","delFlag":0,"type":3,"userName":"文件传输助手","verifyFlag":0,"wxid":"filehelper"},{"customAccount":"","delFlag":0,"type":3,"userName":"fff","verifyFlag":0,"wxid":"24964676359@chatroom"},{"customAccount":"","delFlag":0,"type":2,"userName":"最美阿芙","verifyFlag":0,"wxid":"23793178249@chatroom"},{"customAccount":"afu943344","delFlag":0,"type":2,"userName":"A-阿芙4号-LOL永劫云顶出租-代发","verifyFlag":0,"wxid":"wxid_1gxthknqbmwv22"},{"customAccount":"","delFlag":0,"type":3,"userName":"微信收款助手","verifyFlag":24,"wxid":"gh_f0a92aa7146c"},{"customAccount":"","delFlag":0,"type":0,"userName":"","verifyFlag":0,"wxid":"25984984710827869@openim"}] - * result : OK - */ - - private Integer code; - private String result; - private List data; - - @Data - @Accessors(chain = true) - public static class DataBean implements Serializable { - /** - * customAccount : - * delFlag : 0 - * type : 1 - * userName : 朋友推荐消息 - * verifyFlag : 0 - * wxid : fmessage - */ - - private String customAccount; - private Integer delFlag; - private Integer type; - private String userName; - private Integer verifyFlag; - private String wxid; - } -} diff --git a/java_client/src/main/java/com/example/wxhk/model/response/GroupMembers.java b/java_client/src/main/java/com/example/wxhk/model/response/GroupMembers.java deleted file mode 100644 index f13cf09..0000000 --- a/java_client/src/main/java/com/example/wxhk/model/response/GroupMembers.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.example.wxhk.model.response; - -import com.example.wxhk.infe.Resp; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.io.Serializable; - -@Data -@Accessors(chain = true) -@JsonIgnoreProperties(ignoreUnknown = true) -public class GroupMembers implements Resp { - - /** - * code : 1 - * data : {"admin":"wxid_gf1fogt5a0pq22","chatRoomId":"24964676359@chatroom","members":"wxid_gf1fogt5a0pq22^Gwxid_4yr8erik0uho22"} - * result : OK - */ - - private Integer code; - private DataBean data; - private String result; - - @Data - public static class DataBean implements Serializable { - /** - * admin : wxid_gf1fogt5a0pq22 - * chatRoomId : 24964676359@chatroom - * members : wxid_gf1fogt5a0pq22^Gwxid_4yr8erik0uho22 - */ - - private String admin; - private String chatRoomId; - private String members; - } -} diff --git a/java_client/src/main/java/com/example/wxhk/msg/WxMsgHandle.java b/java_client/src/main/java/com/example/wxhk/msg/WxMsgHandle.java deleted file mode 100644 index dbfc8aa..0000000 --- a/java_client/src/main/java/com/example/wxhk/msg/WxMsgHandle.java +++ /dev/null @@ -1,250 +0,0 @@ -package com.example.wxhk.msg; - -import com.example.wxhk.constant.WxMsgType; -import com.example.wxhk.model.PrivateChatMsg; -import com.example.wxhk.model.dto.PayoutInformation; -import com.example.wxhk.server.WxSmgServer; -import com.example.wxhk.tcp.vertx.InitWeChat; -import jakarta.annotation.PostConstruct; -import org.dromara.hutool.core.util.XmlUtil; -import org.dromara.hutool.log.Log; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import java.math.BigDecimal; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.locks.ReentrantReadWriteLock; - -@Component -public class WxMsgHandle { - public static final ConcurrentHashMap map = new ConcurrentHashMap<>(32); - protected static final Log log = Log.get(); - /** - * 文件传输助手 - */ - public static final String FILEHELPER = "filehelper"; - /** - * 收款码缓存 因为有2段信息,一段是交易id,里面可以解析出来源方,二段解析出金额 - */ - public static ConcurrentHashMap collection_code_caching = new ConcurrentHashMap<>(); - - - public static WxSmgServer wxSmgServer; - /** - * 看 - */ - public static final ReentrantReadWriteLock LOOK = new ReentrantReadWriteLock(); - - @Autowired - public void setWxSmgServer(WxSmgServer wxSmgServer) { - WxMsgHandle.wxSmgServer = wxSmgServer; - } - - @PostConstruct - public void init() { - add(chatMsg -> { - wxSmgServer.私聊(chatMsg); - return null; - }, WxMsgType.私聊信息); - add(chatMsg -> { - if (FILEHELPER.equals(chatMsg.getFromUser())) { - wxSmgServer.文件助手(chatMsg); - } - return 1; - }, WxMsgType.收到转账之后或者文件助手等信息); - add(chatMsg -> { - wxSmgServer.收到名片(chatMsg); - return 1; - }, WxMsgType.收到名片); - add(chatMsg -> { - wxSmgServer.收到好友请求(chatMsg); - return 1; - }, WxMsgType.好友请求);// 好友请求 - add(chatMsg -> { - boolean f = 解析扫码支付第二段(chatMsg); - if (f) { - f = 解析收款信息1段(chatMsg); - if (f) { - 解析收款信息2段(chatMsg); - } - } - return null; - }, WxMsgType.转账和收款); - add(chatMsg -> { - boolean f = 解析扫码支付第一段(chatMsg); - return null; - }, WxMsgType.扫码触发); - } - - /** - * 解析扫码支付第一段,得到交易id和微信id - * - * @param chatMsg - * @return boolean 返回true 则继续解析,否则解析成功,不需要解析了 - */ - public static boolean 解析扫码支付第一段(PrivateChatMsg chatMsg) { - try { - Document document = XmlUtil.parseXml(chatMsg.getContent()); - Element documentElement = document.getDocumentElement(); - String localName = documentElement.getLocalName(); - if ("sysmsg".equals(localName)) { - String type = documentElement.getAttribute("type"); - if ("paymsg".equals(type)) { - NodeList outtradeno = documentElement.getElementsByTagName("outtradeno"); - if (outtradeno.getLength() > 0) { - String textContent = outtradeno.item(0).getTextContent(); - String textContent1 = documentElement.getElementsByTagName("username").item(0).getTextContent(); - collection_code_caching.put(textContent, textContent1); - return false; - } - } - } - } catch (Exception e) { - log.error(e); - } - return true; - } - - - /** - * 解析扫码支付第二段 - * - * @param chatMsg 聊天味精 - * @return boolean true 则 继续解析, false则解析成功,不需要再解析了 - */ - public static boolean 解析扫码支付第二段(PrivateChatMsg chatMsg) { - try { - Document document = XmlUtil.parseXml(chatMsg.getContent()); - Element documentElement = document.getDocumentElement(); - String localName = documentElement.getLocalName(); - if ("msg".equals(localName)) { - NodeList outtradeno = documentElement.getElementsByTagName("weapp_path"); - if (outtradeno.getLength() > 1) { - String textContent = outtradeno.item(1).getTextContent(); - Set> entries = collection_code_caching.entrySet(); - Iterator> iterator = entries.iterator(); - while (iterator.hasNext()) { - Map.Entry next = iterator.next(); - if (textContent.contains(next.getKey())) { - // 得到了交易信息 - NodeList word = documentElement.getElementsByTagName("word"); - String monery = word.item(1).getTextContent(); - String remark = word.item(3).getTextContent(); - if (monery.startsWith("¥")) { - String substring = monery.substring(1); - BigDecimal decimal = new BigDecimal(substring); - log.info("扫码收款:{},付款人:{},付款备注:{}", decimal.stripTrailingZeros().toPlainString(), next.getValue(), remark); - wxSmgServer.扫码收款(new PayoutInformation(next.getValue(),decimal,remark)); - iterator.remove(); - return false; - } - } - } - - - } - } - } catch (Exception e) { - log.error(e); - } - return true; - } - - public static boolean 解析收款信息2段(PrivateChatMsg chatMsg) { - try { - Document document = XmlUtil.parseXml(chatMsg.getContent()); - Element documentElement = document.getDocumentElement(); - String localName = documentElement.getLocalName(); - if ("msg".equals(localName)) { - if (documentElement.getElementsByTagName("transcationid").getLength() > 0) { - String remark = documentElement.getElementsByTagName("pay_memo").item(0).getTextContent(); - String monery = documentElement.getElementsByTagName("feedesc").item(0).getTextContent(); - String receiver_username = documentElement.getElementsByTagName("receiver_username").item(0).getTextContent(); - // 如果是机器人发出的,则跳过解析 - if (InitWeChat.WXID_MAP.contains(receiver_username) ) { - return false; - } - if (monery.startsWith("¥")) { - String substring = monery.substring(1); - BigDecimal decimal = new BigDecimal(substring); - log.info("收款:{},付款人:{},付款备注:{}", decimal.stripTrailingZeros().toPlainString(), chatMsg.getFromUser(), remark); - wxSmgServer.收款之后(new PayoutInformation(chatMsg.getFromUser(), decimal, remark)); - return false; - }; - - } - } - } catch (Exception e) { - log.error(e); - } - return true; - } - - - /** - * 解析收款信息1段 - * 会自动进行收款 - * - * @param chatMsg - * @return boolean true则 继续解析,false则不需要解析了 - */ - public static boolean 解析收款信息1段(PrivateChatMsg chatMsg) { - try { - String content = chatMsg.getContent(); - Document document = XmlUtil.parseXml(content); - NodeList paysubtype1 = document.getElementsByTagName("paysubtype"); - if (paysubtype1.getLength() == 0) { - return true; - } - Node paysubtype = paysubtype1.item(0); - if ("1".equals(paysubtype.getTextContent().trim())) { - // 手机发出去的 - String textContent = document.getElementsByTagName("receiver_username").item(0).getTextContent(); - if (!InitWeChat.WXID_MAP.contains(textContent)) { - // 如果不是机器人收款,则认为不需要解析了,大概率是机器人自己发出去的 - return false; - } - - String remark = document.getElementsByTagName("pay_memo").item(0).getTextContent(); - String monery = document.getElementsByTagName("feedesc").item(0).getTextContent(); - String receiver_username = document.getElementsByTagName("receiver_username").item(0).getTextContent(); - if (monery.startsWith("¥")) { - String substring = monery.substring(1); - BigDecimal decimal = new BigDecimal(substring); - Node transcationid = document.getDocumentElement().getElementsByTagName("transcationid").item(0); - Node transferid = document.getDocumentElement().getElementsByTagName("transferid").item(0); - wxSmgServer.接到收款(new PayoutInformation(chatMsg.getFromUser(), decimal, remark, transcationid.getTextContent(), transferid.getTextContent())); - return false; - } - } - - } catch (Exception e) { - log.error(e); - } - return true; - } - - public static void exec(PrivateChatMsg chatMsg) { - Handle handle = map.get(chatMsg.getType()); - if (handle != null) { - handle.handle(chatMsg); - } - } - - public void add(Handle handle, WxMsgType... type) { - for (WxMsgType integer : type) { - map.put(integer.getType(), handle); - } - } - - public interface Handle { - Object handle(PrivateChatMsg chatMsg); - } -} diff --git a/java_client/src/main/java/com/example/wxhk/server/WxSmgServer.java b/java_client/src/main/java/com/example/wxhk/server/WxSmgServer.java deleted file mode 100644 index fe2bd3a..0000000 --- a/java_client/src/main/java/com/example/wxhk/server/WxSmgServer.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.example.wxhk.server; - -import com.example.wxhk.model.PrivateChatMsg; -import com.example.wxhk.model.dto.PayoutInformation; - -/** - * 微信消息处理提取 - * @author wt - * @date 2023/06/06 - */ -public interface WxSmgServer { - /** - * 接到收款 - * - * @param payoutInformation 支付信息 - */ - void 接到收款(PayoutInformation payoutInformation); - - void 收款之后(PayoutInformation pay); - - void 私聊(PrivateChatMsg chatMsg); - - void 文件助手(PrivateChatMsg chatMsg); - - void 收到名片(PrivateChatMsg chatMsg); - - void 收到好友请求(PrivateChatMsg chatMsg); - - void 扫码收款(PayoutInformation payoutInformation); -} diff --git a/java_client/src/main/java/com/example/wxhk/server/impl/WxSmgServerImpl.java b/java_client/src/main/java/com/example/wxhk/server/impl/WxSmgServerImpl.java deleted file mode 100644 index 3bfebd9..0000000 --- a/java_client/src/main/java/com/example/wxhk/server/impl/WxSmgServerImpl.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.example.wxhk.server.impl; - -import com.example.wxhk.model.PrivateChatMsg; -import com.example.wxhk.model.dto.PayoutInformation; -import com.example.wxhk.model.request.ConfirmThePayment; -import com.example.wxhk.util.HttpSendUtil; -import org.dromara.hutool.core.text.StrUtil; -import org.dromara.hutool.core.util.XmlUtil; -import org.dromara.hutool.log.Log; -import org.springframework.stereotype.Service; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import java.util.Objects; - -@Service -public class WxSmgServerImpl implements com.example.wxhk.server.WxSmgServer { - - protected static final Log log=Log.get(); - - public static final String FILEHELPER = "filehelper"; - @Override - public void 接到收款(PayoutInformation payoutInformation) { - HttpSendUtil.确认收款(new ConfirmThePayment().setWxid(payoutInformation.receiverUsername()).setTranscationId(payoutInformation.transcationid()).setTransferId(payoutInformation.transferid())); - } - @Override - public void 收款之后(PayoutInformation pay) { - HttpSendUtil.发送文本(pay.receiverUsername(), StrUtil.format("收到款项:{},备注:{}", pay.decimal().stripTrailingZeros().toPlainString(), pay.remark())); - } - - @Override - public void 私聊(PrivateChatMsg chatMsg) { - if (Objects.equals(chatMsg.getIsSendMsg(), 1) && Objects.equals(chatMsg.getIsSendByPhone(), 1)) { - log.info("手机端对:{}发出:{}", chatMsg.getFromUser(), chatMsg.getContent()); - } - } - - @Override - public void 文件助手(PrivateChatMsg chatMsg) { - - } - - @Override - public void 收到名片(PrivateChatMsg chatMsg) { - if (FILEHELPER.equals(chatMsg.getFromUser())) { - Document document = XmlUtil.parseXml(chatMsg.getContent()); - Element documentElement = document.getDocumentElement(); - String username = documentElement.getAttribute("username"); - if (StrUtil.isNotBlank(username)) { - HttpSendUtil.发送文本(username); - } - } - } - - @Override - public void 收到好友请求(PrivateChatMsg chatMsg) { - HttpSendUtil.通过好友请求(chatMsg); - } - - @Override - public void 扫码收款(PayoutInformation payoutInformation) { - HttpSendUtil.发送文本(payoutInformation.receiverUsername(), StrUtil.format("扫码收款:{},备注:{}", payoutInformation.decimal().stripTrailingZeros().toPlainString(), payoutInformation.remark())); - } -} diff --git a/java_client/src/main/java/com/example/wxhk/tcp/vertx/ArrHandle.java b/java_client/src/main/java/com/example/wxhk/tcp/vertx/ArrHandle.java deleted file mode 100644 index a827f7d..0000000 --- a/java_client/src/main/java/com/example/wxhk/tcp/vertx/ArrHandle.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.example.wxhk.tcp.vertx; - -import com.example.wxhk.model.PrivateChatMsg; -import com.example.wxhk.msg.WxMsgHandle; -import com.example.wxhk.util.HttpSendUtil; -import io.vertx.core.json.JsonObject; -import jakarta.annotation.PostConstruct; -import org.dromara.hutool.core.thread.NamedThreadFactory; -import org.dromara.hutool.log.Log; -import org.springframework.stereotype.Component; - -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -/** - * 消息处理 - * - * @author wt - * @date 2023/05/31 - */ -@Component -public class ArrHandle { - - /** - * 线程处理消息队列,但是必须保证核心数大于2,其中必定要有一个线程可以单独处理交易队列信息 - */ - public static final ThreadPoolExecutor sub = new ThreadPoolExecutor(4, 10, 30, TimeUnit.MINUTES, new LinkedBlockingQueue<>(), new NamedThreadFactory("sub", false)); - public static final ThreadLocal chatMsgThreadLocal = new InheritableThreadLocal<>(); - protected static final Log log = Log.get(); - - /** - * 得到当前正在处理的消息 - * - * @return {@link PrivateChatMsg} - */ - public static PrivateChatMsg getPriMsg() { - return chatMsgThreadLocal.get(); - } - - @PostConstruct - public void exec() { - for (int i = 0; i < sub.getCorePoolSize()-1; i++) { - sub.submit(() -> { - while (!Thread.currentThread().isInterrupted()) { - try { - JsonObject take = VertxTcp.LINKED_BLOCKING_QUEUE.take(); - log.info("{}", take.encode()); - PrivateChatMsg privateChatMsg = take.mapTo(PrivateChatMsg.class); - chatMsgThreadLocal.set(privateChatMsg); - if ("weixin".equals(privateChatMsg.getFromUser())) { - String s = HttpSendUtil.获取当前登陆微信id(); - InitWeChat.WXID_MAP.add(s); - continue; - } - WxMsgHandle.exec(privateChatMsg); - } catch (Exception e) { - log.error(e); - }finally { - chatMsgThreadLocal.remove(); - } - } - log.error("退出线程了"); - }); - } - sub.submit(() -> { - while (!Thread.currentThread().isInterrupted()) { - try { - JsonObject take = VertxTcp.LINKED_BLOCKING_QUEUE_MON.take(); - log.info("{}", take.encode()); - PrivateChatMsg privateChatMsg = take.mapTo(PrivateChatMsg.class); - chatMsgThreadLocal.set(privateChatMsg); - if ("weixin".equals(privateChatMsg.getFromUser())) { - String s = HttpSendUtil.获取当前登陆微信id(); - InitWeChat.WXID_MAP.add(s); - continue; - } - WxMsgHandle.exec(privateChatMsg); - } catch (Exception e) { - log.error(e); - }finally { - chatMsgThreadLocal.remove(); - } - } - log.error("退出线程了"); - }); - - } - -} diff --git a/java_client/src/main/java/com/example/wxhk/tcp/vertx/InitWeChat.java b/java_client/src/main/java/com/example/wxhk/tcp/vertx/InitWeChat.java deleted file mode 100644 index fb3a231..0000000 --- a/java_client/src/main/java/com/example/wxhk/tcp/vertx/InitWeChat.java +++ /dev/null @@ -1,158 +0,0 @@ -package com.example.wxhk.tcp.vertx; - -import com.example.wxhk.util.HttpAsyncUtil; -import com.example.wxhk.util.HttpSyncUtil; -import io.vertx.core.impl.ConcurrentHashSet; -import io.vertx.core.json.JsonObject; -import org.dromara.hutool.core.io.file.FileUtil; -import org.dromara.hutool.core.net.NetUtil; -import org.dromara.hutool.core.text.StrUtil; -import org.dromara.hutool.core.thread.ThreadUtil; -import org.dromara.hutool.log.Log; -import org.dromara.hutool.setting.Setting; -import org.jetbrains.annotations.NotNull; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.CommandLineRunner; -import org.springframework.core.annotation.Order; -import org.springframework.core.io.ClassPathResource; -import org.springframework.stereotype.Component; - -import java.io.File; -import java.io.IOException; - -/** - * 微信注入环境初始化和相关方法 - * - * @author wt - * @date 2023/05/16 - */ -@Order(-1) -@Component -public class InitWeChat implements CommandLineRunner { - - public final static Log log = Log.get(); - public static final ConcurrentHashSet WXID_MAP = new ConcurrentHashSet<>(); - public static String wxPath; - public static Integer wxPort; - public static Integer vertxPort; - /** - * wxhelper.dll 所在路径 - */ - public static File DLL_PATH; - - public static void 注入dll(String wxPid) throws IOException { - String format = StrUtil.format("cmd /C c.exe -I {} -p {}\\wxhelper.dll -m {}", wxPid, DLL_PATH.getAbsolutePath(), wxPid); - Process exec = Runtime.getRuntime().exec(format, null, DLL_PATH); - log.info("注入结果:{}", new String(exec.getInputStream().readAllBytes(), "gbk")); - } - - @NotNull - private static File 环境初始化() { - File target = new File(new File("").getAbsolutePath().split("\\\\")[0] + "\\exec\\"); - try { - File wxPathFile = new File(wxPath); - File config = new File(wxPathFile.getParentFile(), "config.ini"); - Setting setting = new Setting(config.getAbsolutePath()); - setting.getGroupedMap().put("config", "port", String.valueOf(wxPort)); - setting.store(); - ClassPathResource classPathResource = new ClassPathResource("exec"); - File file = classPathResource.getFile(); - target.mkdir(); - for (File listFile : file.listFiles()) { - FileUtil.copy(listFile, target, true); - } - } catch (Exception e) { - log.error(e, "环境初始化失败,请检查"); - } - return target; - } - - /** - * 返回最后一个微信的pid - * - * @return {@link String} - * @throws IOException ioexception - */ - public static String createWx() throws IOException { - Runtime.getRuntime().exec("cmd /C \"" + wxPath + "\""); - return getWxPid(); - } - - @NotNull - private static String getWxPid() throws IOException { - String line = null; - try { - Process exec = Runtime.getRuntime().exec("cmd /C tasklist /FI \"IMAGENAME eq WeChat.exe\" "); - byte[] bytes = exec.getInputStream().readAllBytes(); - line = new String(bytes, "gbk"); - String[] split = line.split("\n"); - if (!line.contains("WeChat.exe")) { - return createWx(); - } - String[] split1 = split[split.length - 1].replaceAll("\\s{2,}", " ").split(" "); - return split1[1]; - } catch (IOException e) { - log.error("获取端口错误:{}", line); - throw e; - } - } - - public static Integer getWxPort() { - return wxPort; - } - - @Value("${wx.port}") - public void setWxPort(Integer wxPort) { - InitWeChat.wxPort = wxPort; - } - - public static String getWxPath() { - return wxPath; - } - - @Value("${wx.path}") - public void setWxPath(String wxPath) { - InitWeChat.wxPath = wxPath; - } - - public static Integer getVertxPort() { - return vertxPort; - } - - @Value("${vertx.port}") - public void setVertxPort(Integer vertxPort) { - InitWeChat.vertxPort = vertxPort; - } - - @Override - public void run(String... args) throws Exception { - //tasklist /FI "IMAGENAME eq WeChat.exe" /m - boolean usableLocalPort = NetUtil.isUsableLocalPort(wxPort); - if (usableLocalPort) { - DLL_PATH = 环境初始化(); - String wxPid = getWxPid(); - 注入dll(wxPid); - } - ThreadUtil.execute(() -> { - while (!Thread.currentThread().isInterrupted()) { - JsonObject exec = HttpSyncUtil.exec(HttpAsyncUtil.Type.检查微信登陆, new JsonObject()); - if (exec.getInteger("code").equals(1)) { - JsonObject dl = HttpSyncUtil.exec(HttpAsyncUtil.Type.获取登录信息, new JsonObject()); - JsonObject jsonObject = dl.getJsonObject("data"); - String wx = jsonObject.getString("wxid"); - WXID_MAP.add(wx); - if (log.isDebugEnabled()) { - log.debug("检测到微信登陆:{}", wx); - } - break; - } - ThreadUtil.safeSleep(500); - } - - }); - // FIXME: 2023/6/2 程序结束后关闭hook会偶尔出现微信闪退情况,暂时禁用 -// Runtime.getRuntime().addShutdownHook(new Thread(HttpSendUtil::关闭hook)); - //netstat -aon|findstr "端口号" - // c.exe -I 4568 -p D:\exec\wxhelper.dll -m 4568 - } -} diff --git a/java_client/src/main/java/com/example/wxhk/tcp/vertx/VertxTcp.java b/java_client/src/main/java/com/example/wxhk/tcp/vertx/VertxTcp.java deleted file mode 100644 index 069f603..0000000 --- a/java_client/src/main/java/com/example/wxhk/tcp/vertx/VertxTcp.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.example.wxhk.tcp.vertx; - -import com.example.wxhk.WxhkApplication; -import com.example.wxhk.constant.WxMsgType; -import com.example.wxhk.util.HttpAsyncUtil; -import io.vertx.core.AbstractVerticle; -import io.vertx.core.DeploymentOptions; -import io.vertx.core.Future; -import io.vertx.core.Promise; -import io.vertx.core.json.JsonObject; -import io.vertx.core.net.NetServer; -import io.vertx.core.net.NetServerOptions; -import io.vertx.core.parsetools.JsonParser; -import org.dromara.hutool.log.Log; -import org.springframework.boot.CommandLineRunner; -import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Component; - -import java.util.Objects; -import java.util.concurrent.LinkedBlockingQueue; - -/** - * 接受微信hook信息 - * - * @author wt - * @date 2023/05/26 - */ -@Component -@Order() -public class VertxTcp extends AbstractVerticle implements CommandLineRunner { - public final static LinkedBlockingQueue LINKED_BLOCKING_QUEUE = new LinkedBlockingQueue<>(); - /** - * 这个只保留交易相关的类型 - */ - public final static LinkedBlockingQueue LINKED_BLOCKING_QUEUE_MON = new LinkedBlockingQueue<>(); - protected static final Log log = Log.get(); - NetServer netServer; - - @Override - public void start(Promise startPromise) throws Exception { - netServer = vertx.createNetServer(new NetServerOptions() - .setPort(InitWeChat.getVertxPort()) - .setIdleTimeout(0) - .setLogActivity(false) - ); - netServer.connectHandler(socket -> { - JsonParser parser = JsonParser.newParser(); - parser.objectValueMode(); - parser.handler(event -> { - switch (event.type()) { - case START_OBJECT -> { - } - case END_OBJECT -> { - } - case START_ARRAY -> { - } - case END_ARRAY -> { - } - case VALUE -> { - JsonObject entries = event.objectValue(); - - if(Objects.equals(entries.getInteger("type"), WxMsgType.扫码触发.getType()) || - Objects.equals(entries.getInteger("type"), WxMsgType.转账和收款.getType())){ - LINKED_BLOCKING_QUEUE_MON.add(entries); - }else{ - LINKED_BLOCKING_QUEUE.add(entries); - } - } - } - }); - socket.handler(parser); - }); - - Future listen = netServer.listen(); - listen.onComplete(event -> { - boolean succeeded = event.succeeded(); - if (succeeded) { - HttpAsyncUtil.exec(HttpAsyncUtil.Type.开启hook, new JsonObject().put("port", InitWeChat.getVertxPort().toString()).put("ip", "127.0.0.1")); - startPromise.complete(); - } else { - startPromise.fail(event.cause()); - } - - }); - } - - @Override - public void run(String... args) throws Exception { - WxhkApplication.vertx.deployVerticle(this, new DeploymentOptions().setWorkerPoolSize(6)); - } -} diff --git a/java_client/src/main/java/com/example/wxhk/util/HttpAsyncUtil.java b/java_client/src/main/java/com/example/wxhk/util/HttpAsyncUtil.java deleted file mode 100644 index db408bf..0000000 --- a/java_client/src/main/java/com/example/wxhk/util/HttpAsyncUtil.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.example.wxhk.util; - -import com.example.wxhk.WxhkApplication; -import com.example.wxhk.tcp.vertx.InitWeChat; -import io.vertx.core.AsyncResult; -import io.vertx.core.Future; -import io.vertx.core.Handler; -import io.vertx.core.buffer.Buffer; -import io.vertx.core.json.JsonObject; -import io.vertx.ext.web.client.HttpResponse; -import io.vertx.ext.web.client.WebClient; -import io.vertx.ext.web.client.WebClientOptions; -import org.dromara.hutool.log.Log; - -/** - * http异步请求 - * - * @author wt - * @date 2023/05/25 - */ -public class HttpAsyncUtil { - public static final WebClient client = WebClient.create(WxhkApplication.vertx, new WebClientOptions().setDefaultHost("localhost").setDefaultPort(InitWeChat.wxPort) - .setConnectTimeout(10000).setMaxPoolSize(10).setPoolEventLoopSize(10)); - protected static final Log log = Log.get(); - - public static Future> exec(Type type, JsonObject object) { - return client.post(InitWeChat.wxPort, "localhost", "/api/?type=" + type.getType()) - .sendJsonObject(object) - .onSuccess(event -> - { - if (log.isDebugEnabled()) { - log.debug("type:{},{}", type.getType(), event.bodyAsJsonObject()); - } - } - ); - } - - public static Future> exec(Type type, JsonObject object, Handler>> handler) { - return client.post(InitWeChat.wxPort, "localhost", "/api/?type=" + type.getType()) - .sendJsonObject(object) - .onComplete(handler) - ; - - - } - - public enum Type { - 检查微信登陆("0"), - 获取登录信息("1"), - 发送文本("2"), - 发送at文本("3"), - 发送图片("5"), - 发送文件("6"), - 开启hook("9"), - 关闭hook("10"), - 添加好友("20"), - 通过好友申请("23"), - 获取群成员("25"), - 获取群成员昵称("26"), - 删除群成员("27"), - 确认收款("45"), - 联系人列表("46"), - 查询微信信息("55"), - - - ; - String type; - - Type(String type) { - this.type = type; - } - - public String getType() { - return type; - } - } -} diff --git a/java_client/src/main/java/com/example/wxhk/util/HttpSendUtil.java b/java_client/src/main/java/com/example/wxhk/util/HttpSendUtil.java deleted file mode 100644 index 281db83..0000000 --- a/java_client/src/main/java/com/example/wxhk/util/HttpSendUtil.java +++ /dev/null @@ -1,151 +0,0 @@ -package com.example.wxhk.util; - -import com.example.wxhk.model.PrivateChatMsg; -import com.example.wxhk.model.request.*; -import com.example.wxhk.model.response.ContactList; -import com.example.wxhk.model.response.GroupMembers; -import com.example.wxhk.tcp.vertx.ArrHandle; -import com.example.wxhk.tcp.vertx.InitWeChat; -import io.vertx.core.json.JsonObject; -import org.dromara.hutool.core.util.XmlUtil; -import org.dromara.hutool.log.Log; -import org.w3c.dom.Document; -import org.w3c.dom.Node; - -/** - * 常见方法 - * - * @author wt - * @date 2023/05/29 - */ -public class HttpSendUtil { - - protected static final Log log = Log.get(); - - public static JsonObject 通过好友请求(PrivateChatMsg msg) { - Document document = XmlUtil.parseXml(msg.getContent()); - String encryptusername = document.getDocumentElement().getAttribute("encryptusername"); - String ticket = document.getDocumentElement().getAttribute("ticket"); - return HttpSyncUtil.exec(HttpAsyncUtil.Type.通过好友申请, new JsonObject().put("v3", encryptusername).put("v4", ticket).put("permission", "0")); - } - - public static JsonObject 确认收款(PrivateChatMsg msg) { - try { - String content = msg.getContent(); - Document document = XmlUtil.parseXml(content); - Node paysubtype = document.getElementsByTagName("paysubtype").item(0); - if ("1".equals(paysubtype.getTextContent().trim())) { - // 手机发出去的 - String textContent = document.getElementsByTagName("receiver_username").item(0).getTextContent(); - if (!InitWeChat.WXID_MAP.contains(textContent)) { - return new JsonObject().put("spick", true); - } - Node transcationid = document.getDocumentElement().getElementsByTagName("transcationid").item(0); - Node transferid = document.getDocumentElement().getElementsByTagName("transferid").item(0); - return HttpSyncUtil.exec(HttpAsyncUtil.Type.确认收款, new JsonObject().put("wxid", msg.getFromUser()) - .put("transcationId", transcationid.getTextContent()) - .put("transferId", transferid.getTextContent())); - - } - // 如果是确认接受收款,则跳过 - return new JsonObject(); - - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - - public static JsonObject 发送文本(String wxid, String msg) { - return HttpSyncUtil.exec(HttpAsyncUtil.Type.发送文本, JsonObject.mapFrom(new SendMsg().setMsg(msg).setWxid(wxid))); - } - - public static JsonObject 发送文本(String msg) { - return 发送文本(ArrHandle.getPriMsg().getFromUser(), msg); - } - - public static JsonObject 发送at文本(String chatRoomId, String wxids, String msg) { - return HttpSyncUtil.exec(HttpAsyncUtil.Type.发送at文本, JsonObject.mapFrom(new SendMsg().setMsg(msg).setWxids(wxids).setChatRoomId(chatRoomId))); - } - - public static JsonObject 发送at文本(String wxids, String msg) { - return 发送at文本(ArrHandle.getPriMsg().getFromGroup(), wxids, msg); - } - - public static JsonObject 发送图片(String wxid, String msg) { - return HttpSyncUtil.exec(HttpAsyncUtil.Type.发送图片, JsonObject.mapFrom(new SendMsg().setImagePath(msg).setWxid(wxid))); - } - - public static JsonObject 发送图片(String msg) { - return 发送图片(ArrHandle.getPriMsg().getFromUser(), msg); - } - - public static JsonObject 发送文件(String wxid, String msg) { - return HttpSyncUtil.exec(HttpAsyncUtil.Type.发送文件, JsonObject.mapFrom(new SendMsg().setFilePath(msg).setWxid(wxid))); - } - - public static JsonObject 发送文件(String msg) { - return 发送文件(ArrHandle.getPriMsg().getFromUser(), msg); - } - - public static JsonObject 添加好友(AddFriends p) { - return HttpSyncUtil.exec(HttpAsyncUtil.Type.添加好友, p.toJson()); - } - - - public static String 获取当前登陆微信id() { - JsonObject exec = HttpSyncUtil.exec(HttpAsyncUtil.Type.获取登录信息, new JsonObject()); - return exec.getJsonObject("data").getString("wxid"); - } - - public static ContactList 联系人列表(){ - JsonObject exec = HttpSyncUtil.exec(HttpAsyncUtil.Type.联系人列表, new JsonObject()); - return exec.mapTo(ContactList.class); - } - public static JsonObject 开启hook(OpenHook hook){ - JsonObject exec = HttpSyncUtil.exec(HttpAsyncUtil.Type.开启hook,hook.toJson()); - return exec; - } - public static JsonObject 关闭hook(){ - JsonObject exec = HttpSyncUtil.exec(HttpAsyncUtil.Type.关闭hook,new JsonObject()); - return exec; - } - - public static GroupMembers 获取群成员(GetGroupMembers p){ - return HttpSyncUtil.exec(HttpAsyncUtil.Type.获取群成员, p.toJson()).mapTo(GroupMembers.class); - - } - - - public static JsonObject 确认收款(ConfirmThePayment payment){ - return HttpSyncUtil.exec(HttpAsyncUtil.Type.确认收款, payment.toJson()); - } - - - @Deprecated - public static com.example.wxhk.infe.SendMsg of(HttpAsyncUtil.Type type) { - switch (type) { - - case 检查微信登陆 -> { - - } - case 获取登录信息 -> { - } - case 发送文本 -> { - return new SendText(); - } - case 发送at文本 -> { - return new SendAtText(); - } - case 发送图片 -> { - return new SendImg(); - } - case 发送文件 -> { - return new SendFile(); - } - - } - return new SendText(); - } - -} diff --git a/java_client/src/main/java/com/example/wxhk/util/HttpSyncUtil.java b/java_client/src/main/java/com/example/wxhk/util/HttpSyncUtil.java deleted file mode 100644 index 21686ac..0000000 --- a/java_client/src/main/java/com/example/wxhk/util/HttpSyncUtil.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.example.wxhk.util; - -import com.example.wxhk.tcp.vertx.InitWeChat; -import io.vertx.core.json.JsonObject; -import org.dromara.hutool.http.client.ClientConfig; -import org.dromara.hutool.http.client.Request; -import org.dromara.hutool.http.client.engine.ClientEngine; -import org.dromara.hutool.http.client.engine.ClientEngineFactory; -import org.dromara.hutool.http.meta.Method; -import org.dromara.hutool.log.Log; - -/** - * http同步请求 - * - * @author wt - * @date 2023/05/25 - */ -public class HttpSyncUtil { - protected static final Log log = Log.get(); - static final ClientEngine engine; - - static { - ClientConfig clientConfig = ClientConfig.of() - .setTimeout(30 * 1000); - engine = ClientEngineFactory.createEngine(clientConfig); - - } - - public static JsonObject exec(HttpAsyncUtil.Type type, JsonObject obj) { - String post = engine.send(Request.of("http://localhost:" + InitWeChat.wxPort + "/api/?type=" + type.getType()).method(Method.POST).body(obj.encode())).bodyStr(); - if (log.isDebugEnabled()) { - log.debug("type:{},{}", type.getType(), post); - } - return new JsonObject(post); - } -} diff --git a/java_client/src/main/resources/application.properties b/java_client/src/main/resources/application.properties deleted file mode 100644 index 199c37a..0000000 --- a/java_client/src/main/resources/application.properties +++ /dev/null @@ -1,4 +0,0 @@ -wx.path=D:\\Program Files (x86)\\Tencent\\WeChat\\[3.9.2.23]\\WeChat.exe -wx.port=19088 -spring.profiles.active=local -vertx.port=8080 \ No newline at end of file diff --git a/java_client/src/main/resources/exec/c.exe b/java_client/src/main/resources/exec/c.exe deleted file mode 100644 index 68787d2a018e282bf3c66f2e1c5bedc80bafefd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24064 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 OdZB;+c>eE5;C}(gpByIu diff --git a/java_client/src/main/resources/exec/wxhelper.dll b/java_client/src/main/resources/exec/wxhelper.dll deleted file mode 100644 index 168a32b95f98fc269861dc7f0f6309b904ab77ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385024 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 \\t \\t \\t\\t \\t\\t \\t\\t\\t \\t\\t\\t \\t\\t \\t\\t<![CDATA[收款到账通知]]>\\n\\n1685325848\\n\\n\\n1\\n1\\n\\n\\n0\\n\\n\\n1\\n1\\n1\\n0\\n\\n0\\n\\n\\n\\n0\\n\\n\\n\\n\\n \\t\\t1\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n1\\n\\n\\n\\n\\n1\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n1\\n967\\n0\\n\\n0\\n0\\n\\n0\\n\\n\\n\\n0\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n1\\n967\\n0\\n\\n0\\n0\\n\\n0\\n\\n\\n\\n0\\n\\n\\n1\\n\\n0\\n \\t 0 \\t \\t \\t \\t 01\",\"fromGroup\":\"gh_f0a92aa7146c\",\"fromUser\":\"gh_f0a92aa7146c\",\"isSendMsg\":0,\"msgId\":4286533159027281478,\"pid\":14268,\"sign\":\"65bd099003179e79b95fbbab461d1f6c\",\"signature\":\"\\n\\t3\\n\\t\\n\\t\\t2\\n\\t\\t\\n\\t\\n\\tv1_xf1t7z4t\\n\\t\\n\\t\\t<![CDATA[]]>\\n\\t\\n\\n\",\"time\":\"2023-05-29 10:04:09\",\"timestamp\":1685325849,\"type\":49}"; - - WxMsgHandle.解析扫码支付第二段(new JsonObject(smg).mapTo(PrivateChatMsg.class)); - } - - - @Test - void 解析名片(){ - String con = "{\"content\":\"\\n\\n\",\"fromGroup\":\"filehelper\",\"fromUser\":\"filehelper\",\"isSendByPhone\":1,\"isSendMsg\":1,\"msgId\":3235211232446491438,\"pid\":21868,\"sign\":\"bfb1db52fe99dc947586af50e6964c37\",\"signature\":\"\\n\\tv1_aebFg5gw\\n\\t\\n\\t\\t<![CDATA[]]>\\n\\t\\n\\n\",\"time\":\"2023-06-01 16:48:39\",\"timestamp\":1685609319,\"type\":42}"; - PrivateChatMsg privateChatMsg = new JsonObject(con).mapTo(PrivateChatMsg.class); - Document document = XmlUtil.parseXml(privateChatMsg.getContent()); - Element documentElement = document.getDocumentElement(); - String username = documentElement.getAttribute("username"); - String alias = documentElement.getAttribute("alias"); - Console.log(alias,username); - } - - @Test - void 公众号(){ - String con = "{\"content\":\"请问您指的是账单的什么问题呢?请回复数字选择:\\n1.如何导出微信账单记录\\n2.如何查看已删除账单\\n3.怎么删除交易记录\",\"fromGroup\":\"gh_3dfda90e39d6\",\"fromUser\":\"gh_3dfda90e39d6\",\"isSendMsg\":0,\"msgId\":9025889923001869810,\"pid\":9920,\"sign\":\"0a66d3dab6b64ca646f512cd278d5f3d\",\"signature\":\"\\n\\t3\\n\\t\\n\\t\\t3\\n\\t\\t\\n\\t\\n\\t1\\n\\t1\\n\\t13\\n\\tv1_iJNyfNLb\\n\\t\\n\\t\\t<![CDATA[]]>\\n\\t\\n\\n\",\"time\":\"2023-06-05 11:32:17\",\"timestamp\":1685935937,\"type\":1}"; - PrivateChatMsg privateChatMsg = new JsonObject(con).mapTo(PrivateChatMsg.class); - Document document = XmlUtil.parseXml(privateChatMsg.getSignature()); - Element documentElement = document.getDocumentElement(); - } -} diff --git a/java_client/src/test/java/com/example/wxhk/util/HttpSendUtilTest.java b/java_client/src/test/java/com/example/wxhk/util/HttpSendUtilTest.java deleted file mode 100644 index 442acae..0000000 --- a/java_client/src/test/java/com/example/wxhk/util/HttpSendUtilTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.example.wxhk.util; - -import com.example.wxhk.model.request.GetGroupMembers; -import com.example.wxhk.model.response.ContactList; -import com.example.wxhk.model.response.GroupMembers; -import org.dromara.hutool.core.lang.Console; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -import java.util.List; - -@SpringBootTest -class HttpSendUtilTest { - - - @Test - void 获取当前登陆微信id() { - String s = HttpSendUtil.获取当前登陆微信id(); - } - - @Test - void 联系人列表() { - ContactList contactList = HttpSendUtil.联系人列表(); - - List data = contactList.getData(); - for (ContactList.DataBean datum : data) { - Console.log(datum.getWxid(),datum.getUserName()); - } - Console.log(contactList); - } - @Test - void 开启hook() { - - } - @Test - void 关闭ook() { - HttpSendUtil.关闭hook(); - } - - @Test - void 获取群成员() { - GroupMembers 获取群成员 = HttpSendUtil.获取群成员(new GetGroupMembers().setChatRoomId("24964676359@chatroom")); - Console.log(获取群成员); - } -} \ No newline at end of file diff --git a/python/3.9.5.81/http_client.py b/python/3.9.5.81/http_client.py deleted file mode 100644 index c661baa..0000000 --- a/python/3.9.5.81/http_client.py +++ /dev/null @@ -1,493 +0,0 @@ -import requests -import json - - -def checkLogin(): - url = "127.0.0.1:19088/api/checkLogin" - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def userInfo(): - url = "127.0.0.1:19088/api/userInfo" - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def sendTextMsg(): - url = "127.0.0.1:19088/api/sendTextMsg" - payload = json.dumps({ - "wxid": "filehelper", - "msg": "12www" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def sendImagesMsg(): - url = "127.0.0.1:19088/api/sendImagesMsg" - print("modify imagePath") - raise RuntimeError("modify imagePath then deleted me") - payload = json.dumps({ - "wxid": "filehelper", - "imagePath": "C:\\pic.png" - }) - headers = { - 'Content-Type': 'application/json' - } - - response = requests.request("POST", url, headers=headers, data=payload) - - print(response.text) - - -def sendFileMsg(): - url = "127.0.0.1:19088/api/sendFileMsg" - print("modify filePath") - raise RuntimeError("modify filePath then deleted me") - payload = json.dumps({ - "wxid": "filehelper", - "filePath": "C:\\test.zip" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def hookSyncMsg(): - url = "127.0.0.1:19088/api/hookSyncMsg" - print("modify ip port url ") - raise RuntimeError("modify ip port url then deleted me") - payload = json.dumps({ - "port": "19099", - "ip": "127.0.0.1", - "url": "http://localhost:8080", - "timeout": "3000", - "enableHttp": "0" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def unhookSyncMsg(): - url = "127.0.0.1:19088/api/unhookSyncMsg" - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def getContactList(): - url = "127.0.0.1:19088/api/getContactList" - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def getDBInfo(): - url = "127.0.0.1:19088/api/getDBInfo" - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def execSql(): - url = "127.0.0.1:19088/api/execSql" - print("modify dbHandle ") - raise RuntimeError("modify dbHandle then deleted me") - payload = json.dumps({ - "dbHandle": 1713425147584, - "sql": "select * from MSG where localId =100;" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def getChatRoomDetailInfo(): - url = "127.0.0.1:19088/api/getChatRoomDetailInfo" - print("modify chatRoomId ") - raise RuntimeError("modify chatRoomId then deleted me") - payload = json.dumps({ - "chatRoomId": "123333@chatroom" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def addMemberToChatRoom(): - url = "127.0.0.1:19088/api/addMemberToChatRoom" - print("modify chatRoomId memberIds ") - raise RuntimeError("modify chatRoomId memberIds then deleted me") - payload = json.dumps({ - "chatRoomId": "123@chatroom", - "memberIds": "wxid_123" - }) - headers = { - 'Content-Type': 'application/json' - } - - response = requests.request("POST", url, headers=headers, data=payload) - - print(response.text) - - -def delMemberFromChatRoom(): - url = "127.0.0.1:19088/api/delMemberFromChatRoom" - print("modify chatRoomId memberIds ") - raise RuntimeError("modify chatRoomId memberIds then deleted me") - payload = json.dumps({ - "chatRoomId": "21363231004@chatroom", - "memberIds": "wxid_123" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def modifyNickname(): - url = "127.0.0.1:19088/api/modifyNickname" - print("modify chatRoomId wxid nickName") - raise RuntimeError("modify chatRoomId wxid nickName then deleted me") - payload = json.dumps({ - "chatRoomId": "123@chatroom", - "wxid": "wxid_123", - "nickName": "test" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def getMemberFromChatRoom(): - print("modify chatRoomId ") - raise RuntimeError("modify chatRoomId then deleted me") - url = "127.0.0.1:19088/api/getMemberFromChatRoom" - payload = json.dumps({ - "chatRoomId": "123@chatroom" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def topMsg(): - print("modify msgId ") - raise RuntimeError("modify msgId then deleted me") - url = "127.0.0.1:19088/api/topMsg" - payload = json.dumps({ - "msgId": 1222222 - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def removeTopMsg(): - print("modify msgId chatRoomId ") - raise RuntimeError("modify msgId chatRoomId then deleted me") - - url = "127.0.0.1:19088/api/removeTopMsg" - - payload = json.dumps({ - "chatRoomId": "123@chatroom", - "msgId": 123 - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def InviteMemberToChatRoom(): - print("modify memberIds chatRoomId ") - raise RuntimeError("modify memberIds chatRoomId then deleted me") - - url = "127.0.0.1:19088/api/InviteMemberToChatRoom" - - payload = json.dumps({ - "chatRoomId": "123@chatroom", - "memberIds": "wxid_123" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def hookLog(): - url = "127.0.0.1:19088/api/hookLog" - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def unhookLog(): - url = "127.0.0.1:19088/api/unhookLog" - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def createChatRoom(): - print("modify memberIds ") - raise RuntimeError("modify memberIds then deleted me") - url = "127.0.0.1:19088/api/createChatRoom" - - payload = json.dumps({ - "memberIds": "wxid_8yn4k908tdqp22,wxid_oyb662qhop4422" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - -def quitChatRoom(): - print("modify chatRoomId ") - raise RuntimeError("modify chatRoomId then deleted me") - url = "127.0.0.1:19088/api/quitChatRoom" - - payload = json.dumps({ - "chatRoomId": "123@chatroom" - }) - headers = { - 'Content-Type': 'application/json' - } - - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - -def forwardMsg(): - print("modify msgId ") - raise RuntimeError("modify msgId then deleted me") - url = "127.0.0.1:19088/api/forwardMsg" - - payload = json.dumps({ - "wxid": "filehelper", - "msgId": "12331" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - -def getSNSFirstPage(): - url = "127.0.0.1:19088/api/getSNSFirstPage" - - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - -def getSNSNextPage(): - print("modify snsId ") - raise RuntimeError("modify snsId then deleted me") - url = "127.0.0.1:19088/api/getSNSNextPage" - - payload = json.dumps({ - "snsId": "" - }) - headers = { - 'Content-Type': 'application/json' - } - - response = requests.request("POST", url, headers=headers, data=payload) - - print(response.text) - -def addFavFromMsg(): - print("modify msgId ") - raise RuntimeError("modify msgId then deleted me") - url = "127.0.0.1:19088/api/addFavFromMsg" - - payload = json.dumps({ - "msgId": "1222222" - }) - headers = { - 'Content-Type': 'application/json' - } - - response = requests.request("POST", url, headers=headers, data=payload) - - print(response.text) - -def addFavFromImage(): - print("modify wxid imagePath ") - raise RuntimeError("modify wxid imagePath then deleted me") - url = "127.0.0.1:19088/api/addFavFromImage" - - payload = json.dumps({ - "wxid": "", - "imagePath": "" - }) - headers = { - 'Content-Type': 'application/json' - } - - response = requests.request("POST", url, headers=headers, data=payload) - - print(response.text) - -def getContactProfile(): - print("modify wxid ") - raise RuntimeError("modify wxid then deleted me") - url = "127.0.0.1:19088/api/getContactProfile" - - payload = json.dumps({ - "wxid": "" - }) - headers = { - 'Content-Type': 'application/json' - } - - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def sendAtText(): - print("modify wxids chatRoomId") - raise RuntimeError("modify wxids chatRoomId then deleted me") - url = "127.0.0.1:19088/api/sendAtText" - - payload = json.dumps({ - "wxids": "notify@all", - "chatRoomId": "123@chatroom", - "msg": "你好啊" - }) - headers = { - 'Content-Type': 'application/json' - } - - response = requests.request("POST", url, headers=headers, data=payload) - - print(response.text) - -def forwardPublicMsg(): - print("modify param ") - raise RuntimeError("modify param then deleted me") - url = "127.0.0.1:19088/api/forwardPublicMsg" - - payload = json.dumps({ - "appName": "", - "userName": "", - "title": "", - "url": "", - "thumbUrl": "", - "digest": "", - "wxid": "filehelper" - }) - headers = { - 'Content-Type': 'application/json' - } - - response = requests.request("POST", url, headers=headers, data=payload) - - print(response.text) - -def forwardPublicMsgByMsgId(): - print("modify param ") - raise RuntimeError("modify param then deleted me") - url = "127.0.0.1:19088/api/forwardPublicMsgByMsgId" - - payload = json.dumps({ - "msgId": 123, - "wxid": "filehelper" - }) - headers = { - 'Content-Type': 'application/json' - } - - response = requests.request("POST", url, headers=headers, data=payload) - - print(response.text) - -def downloadAttach(): - print("modify param ") - raise RuntimeError("modify param then deleted me") - url = "127.0.0.1:19088/api/downloadAttach" - - payload = json.dumps({ - "msgId": 123 - }) - headers = { - 'Content-Type': 'application/json' - } - - response = requests.request("POST", url, headers=headers, data=payload) - - print(response.text) - - -def decodeImage(): - print("modify param ") - raise RuntimeError("modify param then deleted me") - url = "127.0.0.1:19088/api/decodeImage" - - payload = json.dumps({ - "filePath": "C:\\66664816980131.dat", - "storeDir": "C:\\test" - }) - headers = { - 'Content-Type': 'application/json' - } - - response = requests.request("POST", url, headers=headers, data=payload) - - print(response.text) - - -def getVoiceByMsgId(): - print("modify param ") - raise RuntimeError("modify param then deleted me") - url = "127.0.0.1:19088/api/getVoiceByMsgId" - - payload = json.dumps({ - "msgId": 7880439644200, - "storeDir": "c:\\test" - }) - headers = { - 'Content-Type': 'application/json' - } - - response = requests.request("POST", url, headers=headers, data=payload) - - print(response.text) - - - -if __name__ == '__main__': - checkLogin() - # userInfo() diff --git a/python/client.py b/python/client.py deleted file mode 100644 index 9188e10..0000000 --- a/python/client.py +++ /dev/null @@ -1,595 +0,0 @@ -import requests -import json - - -def check_login(): - """ - 0.检查是否登录 - :return: - """ - url = "127.0.0.1:19088/api/?type=0" - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def user_info(): - """ - 登录用户信息 - :return: - """ - url = "127.0.0.1:19088/api/?type=8" - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def send_text(): - """ - 发送文本 - :return: - """ - url = "127.0.0.1:19088/api/?type=2" - payload = json.dumps({ - "wxid": "filehelper", - "msg": "123" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def send_at(): - """ - 发送@消息 - :return: - """ - url = "127.0.0.1:19088/api/?type=3" - payload = json.dumps({ - "chatRoomId": "12333@chatroom", - "wxids": "notify@all", - "msg": "12333" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def send_img(): - """ - 发送图片 - :return: - """ - url = "127.0.0.1:19088/api/?type=5" - payload = json.dumps({ - "wxid": "filehelper", - "imagePath": "C:/123.png" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def send_file(): - """ - 发送文件 - :return: - """ - url = "127.0.0.1:19088/api/?type=6" - payload = json.dumps({ - "wxid": "filehelper", - "filePath": "C:/test.txt" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def hook_msg(): - """ - hook 消息 - :return: - """ - url = "127.0.0.1:19088/api/?type=9" - payload = json.dumps({ - "port": "19099", - "ip": "127.0.0.1" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def unhook_msg(): - """ - 取消消息hook - :return: - """ - url = "127.0.0.1:19088/api/?type=10" - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def hook_img(): - """ - hook 图片 - :return: - """ - url = "127.0.0.1:19088/api/?type=11" - payload = json.dumps({ - "imgDir": "C:\\img" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def unhook_img(): - """ - 取消hook 图片 - :return: - """ - url = "127.0.0.1:19088/api/?type=12" - payload = json.dumps({ - "imgDir": "C:\\img" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def hook_voice(): - """ - hook 语音 - :return: - """ - url = "127.0.0.1:19088/api/?type=56" - payload = json.dumps({ - "msgId": 322456091115784000 - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def unhook_voice(): - """ - 取消hook 语音 - :return: - """ - url = "127.0.0.1:19088/api/?type=14" - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def del_friend(): - """ - 删除好友 - :return: - """ - url = "127.0.0.1:19088/api/?type=17" - payload = json.dumps({ - "wxid": "wxid_1124423322" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def search_friend(): - """ - 网络搜素用户 - :return: - """ - url = "127.0.0.1:19088/api/?type=19" - payload = json.dumps({ - "keyword": "13812345678" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def add_friend(): - """ - 添加好友 - :return: - """ - url = "127.0.0.1:19088/api/?type=20" - payload = json.dumps({ - "wxid": "wxid_o11222334422" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def fetch_chat_room_members(): - """ - 群成员 - :return: - """ - url = "127.0.0.1:19088/api/?type=25" - payload = json.dumps({ - "chatRoomId": "2112222004@chatroom" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def get_member_nickname(): - """ - 群成员昵称 - :return: - """ - url = "127.0.0.1:19088/api/?type=26" - payload = json.dumps({ - "chatRoomId": "322333384@chatroom", - "memberId": "wxid_4m1112222u22" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def del_member(): - """ - 删除群成员 - :return: - """ - url = "127.0.0.1:19088/api/?type=27" - payload = json.dumps({ - "chatRoomId": "31122263384@chatroom", - "memberIds": "wxid_12223334422" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def add_member(): - """ - 增加群成员 - :return: - """ - url = "127.0.0.1:19088/api/?type=28" - payload = json.dumps({ - "chatRoomId": "1111163384@chatroom", - "memberIds": "wxid_o12222222" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def modify_room_name(): - """ - 修改群昵称 - :return: - """ - url = "127.0.0.1:19088/api/?type=31" - payload = json.dumps({ - "chatRoomId": "222285428@chatroom", - "wxid": "wxid_222222512", - "nickName": "qqq" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def get_db_handlers(): - """ - 获取sqlite3的操作句柄 - :return: - """ - url = "127.0.0.1:19088/api/?type=32" - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def query_db_by_sql(): - """ - 查询数据库 - :return: - """ - url = "127.0.0.1:19088/api/?type=34" - payload = json.dumps({ - "dbHandle": 116201928, - "sql": "select localId from MSG where MsgSvrID= 7533111101686156" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def hook_log(): - """ - hook 日志 - :return: - """ - url = "127.0.0.1:19088/api/?type=36" - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def unhook_log(): - """ - 取消hook日志 - :return: - """ - url = "127.0.0.1:19088/api/?type=37" - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def forward(): - """ - 转发消息 - :return: - """ - url = "127.0.0.1:19088/api/?type=40" - payload = json.dumps({ - "wxid": "filehelper", - "msgid": "705117679011122708" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def logout(): - """ - 退出登录 - :return: - """ - url = "127.0.0.1:19088/api/?type=44" - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def confirm_receipt(): - """ - 确认收款 - :return: - """ - url = "127.0.0.1:19088/api/?type=45" - payload = json.dumps({ - "wxid": "wxid_1111112622", - "transcationId": "10000500012312222212243388865912", - "transferId": "100005000120212222173123036" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def contact_list(): - """ - 好友列表 - :return: - """ - url = "127.0.0.1:19088/api/?type=46" - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def room_detail(): - """ - 群详情 - :return: - """ - url = "127.0.0.1:19088/api/?type=47" - payload = json.dumps({ - "chatRoomId": "199134446111@chatroom" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def ocr(): - """ - ocr提取文字 - :return: - """ - url = "127.0.0.1:19088/api/?type=49" - payload = json.dumps({ - "imagePath": "C:\\WeChat Files\\b23e84997144dd12f21554b0.dat" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def pat(): - """ - 拍一拍 - :return: - """ - url = "127.0.0.1:19088/api/?type=50" - payload = json.dumps({ - "chatRoomId": "211111121004@chatroom", - "wxid": "wxid_111111111422" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def top_msg(): - """ - 消息置顶 - :return: - """ - url = "127.0.0.1:19088/api/?type=51" - payload = json.dumps({ - "wxid": "wxid_o11114422", - "msgid": 3728307145189195000 - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def close_top_msg(): - """ - 取消置顶 - :return: - """ - url = "127.0.0.1:19088/api/?type=52" - payload = json.dumps({ - "chatRoomId": "213222231004@chatroom", - "msgid": 3728307145189195000 - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def sns_first(): - """ - 朋友圈首页 - :return: - """ - url = "127.0.0.1:19088/api/?type=53" - payload = {} - headers = {} - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def sns_next(): - """ - 朋友圈下一页 - :return: - """ - url = "127.0.0.1:19088/api/?type=54" - payload = json.dumps({ - "snsId": "14091988153735844377" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def query_nickname(): - """ - 查询联系人或群名称 - :return: - """ - url = "127.0.0.1:19088/api/?type=55" - - payload = json.dumps({ - "id": "wxid_1112p4422" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def download_msg_attach(): - """ - 下载消息附件 - :return: - """ - url = "127.0.0.1:19088/api/?type=56" - payload = json.dumps({ - "msgId": 6080100336053626000 - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -def get_member_info(): - """ - 获取群/群成员信息 - :return: - """ - url = "127.0.0.1:19088/api/?type=57" - payload = json.dumps({ - "wxid": "wxid_tx8k6tu21112" - }) - headers = { - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print(response.text) - - -if __name__ == '__main__': - check_login() - user_info() - send_text() \ No newline at end of file diff --git a/python/decrypt.py b/python/decrypt.py deleted file mode 100644 index eae7a97..0000000 --- a/python/decrypt.py +++ /dev/null @@ -1,51 +0,0 @@ -import ctypes -import hashlib -import hmac - -# pip install pycryptodome -from Crypto.Cipher import AES - - -def decrypt(password, input_file, out_file): - password = bytes.fromhex(password.replace(' ', '')) - with open(input_file, 'rb') as (f): - blist = f.read() - print(len(blist)) - salt = blist[:16] - key = hashlib.pbkdf2_hmac('sha1', password, salt, DEFAULT_ITER, KEY_SIZE) - first = blist[16:DEFAULT_PAGESIZE] - mac_salt = bytes([x ^ 58 for x in salt]) - mac_key = hashlib.pbkdf2_hmac('sha1', key, mac_salt, 2, KEY_SIZE) - hash_mac = hmac.new(mac_key, digestmod='sha1') - hash_mac.update(first[:-32]) - hash_mac.update(bytes(ctypes.c_int(1))) - if hash_mac.digest() == first[-32:-12]: - print('decrypt success') - else: - print('password error') - return - blist = [blist[i:i + DEFAULT_PAGESIZE] for i in range(DEFAULT_PAGESIZE, len(blist), DEFAULT_PAGESIZE)] - with open(out_file, 'wb') as (f): - f.write(SQLITE_FILE_HEADER) - t = AES.new(key, AES.MODE_CBC, first[-48:-32]) - f.write(t.decrypt(first[:-48])) - f.write(first[-48:]) - for i in blist: - t = AES.new(key, AES.MODE_CBC, i[-48:-32]) - f.write(t.decrypt(i[:-48])) - f.write(i[-48:]) - - -def main(): - password = '565735E30E474DA09250CB5AA047E3940FFA1C6F767C4263B13ABB512933DA49' - input_file = 'C:/var/Applet.db' - out_file = 'c:/var/out/Applet.db' - decrypt(password, input_file, out_file) - - -if __name__ == '__main__': - SQLITE_FILE_HEADER = bytes('SQLite format 3', encoding='ASCII') + bytes(1) - KEY_SIZE = 32 - DEFAULT_PAGESIZE = 4096 - DEFAULT_ITER = 64000 - main() \ No newline at end of file diff --git a/python/http_server.py b/python/http_server.py deleted file mode 100644 index 98c154c..0000000 --- a/python/http_server.py +++ /dev/null @@ -1,26 +0,0 @@ -from fastapi import FastAPI, Request - - -app = FastAPI() - -# pip install fastapi -# run command :uvicorn test:app --reload -# 127.0.0.1:8000/api - -@app.post("/api") -def create_item(request: Request): - print("recv msg") - return {"code": 0, "msg": "success"} - - -@app.middleware("http") -async def TestCustomMiddleware(request: Request, call_next): - the_headers = request.headers - the_body = await request.json() - - print(the_headers) - print(the_body) - - response = await call_next(request) - - return response \ No newline at end of file diff --git a/python/readme.md b/python/readme.md deleted file mode 100644 index bf344d2..0000000 --- a/python/readme.md +++ /dev/null @@ -1,10 +0,0 @@ -### 常用的一些工具 - - -client.py : 快速测试dll的http接口。 - -decrpt.py : 微信数据库解密工具。password 为dll个人信息里返回的dbkey。 - -http_server.py : 一个简单的http server,用来接收hook的消息。 - -tcpserver.py: 一个简单的tcp server,用来接收hook的消息。 \ No newline at end of file diff --git a/python/tcpserver.py b/python/tcpserver.py deleted file mode 100644 index 4d52c7e..0000000 --- a/python/tcpserver.py +++ /dev/null @@ -1,57 +0,0 @@ -import json -import threading -import socketserver - - -class ReceiveMsgSocketServer(socketserver.BaseRequestHandler): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def handle(self): - conn = self.request - while True: - try: - ptr_data = b"" - while True: - data = conn.recv(1024) - ptr_data += data - if len(data) == 0 or data[-1] == 0xA: - break - - msg = json.loads(ptr_data) - ReceiveMsgSocketServer.msg_callback(msg) - - except OSError: - break - except json.JSONDecodeError: - pass - conn.sendall("200 OK".encode()) - conn.close() - - @staticmethod - def msg_callback(msg): - print(msg) - - -def start_socket_server(port: int = 19099, - 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 - - -if __name__ == '__main__': - start_socket_server() diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt deleted file mode 100644 index a59d1c5..0000000 --- a/source/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -cmake_minimum_required(VERSION 3.0.0) -project(injector VERSION 1.0.0) - - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED True) - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D '_UNICODE' /D 'UNICODE'") - -file(GLOB INJECT_CPP_FILES ${PROJECT_SOURCE_DIR}/*.cc ${PROJECT_SOURCE_DIR}/*.cpp) - -add_executable (injector ${INJECT_CPP_FILES}) - -SET_TARGET_PROPERTIES(injector PROPERTIES LINKER_LANGUAGE C - ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin - LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin - RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin - OUTPUT_NAME "injector" - PREFIX "") - \ No newline at end of file diff --git a/source/getopt.h b/source/getopt.h deleted file mode 100644 index 54e9208..0000000 --- a/source/getopt.h +++ /dev/null @@ -1,659 +0,0 @@ -#ifndef __GETOPT_H__ -/** - * DISCLAIMER - * This file is part of the mingw-w64 runtime package. - * - * The mingw-w64 runtime package and its code is distributed in the hope that it - * will be useful but WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESSED OR - * IMPLIED ARE HEREBY DISCLAIMED. This includes but is not limited to - * warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ - /* - * Copyright (c) 2002 Todd C. Miller - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Sponsored in part by the Defense Advanced Research Projects - * Agency (DARPA) and Air Force Research Laboratory, Air Force - * Materiel Command, USAF, under agreement number F39502-99-1-0512. - */ - /*- - * Copyright (c) 2000 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Dieter Baron and Thomas Klausner. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#pragma warning(disable:4996); - -#define __GETOPT_H__ - - /* All the headers include this file. */ -#include -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define REPLACE_GETOPT /* use this getopt as the system getopt(3) */ - -#ifdef REPLACE_GETOPT - int opterr = 1; /* if error message should be printed */ - int optind = 1; /* index into parent argv vector */ - int optopt = '?'; /* character checked for validity */ -#undef optreset /* see getopt.h */ -#define optreset __mingw_optreset - int optreset; /* reset getopt */ - char* optarg; /* argument associated with option */ -#endif - - //extern int optind; /* index of first non-option in argv */ - //extern int optopt; /* single option character, as parsed */ - //extern int opterr; /* flag to enable built-in diagnostics... */ - // /* (user may set to zero, to suppress) */ - // - //extern char *optarg; /* pointer to argument of current option */ - -#define PRINT_ERROR ((opterr) && (*options != ':')) - -#define FLAG_PERMUTE 0x01 /* permute non-options to the end of argv */ -#define FLAG_ALLARGS 0x02 /* treat non-options as args to option "-1" */ -#define FLAG_LONGONLY 0x04 /* operate as getopt_long_only */ - -/* return values */ -#define BADCH (int)'?' -#define BADARG ((*options == ':') ? (int)':' : (int)'?') -#define INORDER (int)1 - -#ifndef __CYGWIN__ -#define __progname __argv[0] -#else - extern char __declspec(dllimport)* __progname; -#endif - -#ifdef __CYGWIN__ - static char EMSG[] = ""; -#else -#define EMSG "" -#endif - - static int getopt_internal(int, char* const*, const char*, - const struct option*, int*, int); - static int parse_long_options(char* const*, const char*, - const struct option*, int*, int); - static int gcd(int, int); - static void permute_args(int, int, int, char* const*); - - static char* place = EMSG; /* option letter processing */ - - /* XXX: set optreset to 1 rather than these two */ - static int nonopt_start = -1; /* first non option argument (for permute) */ - static int nonopt_end = -1; /* first option after non options (for permute) */ - - /* Error messages */ - static const char recargchar[] = "option requires an argument -- %c"; - static const char recargstring[] = "option requires an argument -- %s"; - static const char ambig[] = "ambiguous option -- %.*s"; - static const char noarg[] = "option doesn't take an argument -- %.*s"; - static const char illoptchar[] = "unknown option -- %c"; - static const char illoptstring[] = "unknown option -- %s"; - - static void - _vwarnx(const char* fmt, va_list ap) - { - (void)fprintf(stderr, "%s: ", __progname); - if (fmt != NULL) - (void)vfprintf(stderr, fmt, ap); - (void)fprintf(stderr, "\n"); - } - - static void - warnx(const char* fmt, ...) - { - va_list ap; - va_start(ap, fmt); - _vwarnx(fmt, ap); - va_end(ap); - } - - /* - * Compute the greatest common divisor of a and b. - */ - static int - gcd(int a, int b) - { - int c; - - c = a % b; - while (c != 0) { - a = b; - b = c; - c = a % b; - } - - return (b); - } - - /* - * Exchange the block from nonopt_start to nonopt_end with the block - * from nonopt_end to opt_end (keeping the same order of arguments - * in each block). - */ - static void - permute_args(int panonopt_start, int panonopt_end, int opt_end, - char* const* nargv) - { - int cstart, cyclelen, i, j, ncycle, nnonopts, nopts, pos; - char* swap; - - /* - * compute lengths of blocks and number and size of cycles - */ - nnonopts = panonopt_end - panonopt_start; - nopts = opt_end - panonopt_end; - ncycle = gcd(nnonopts, nopts); - cyclelen = (opt_end - panonopt_start) / ncycle; - - for (i = 0; i < ncycle; i++) { - cstart = panonopt_end + i; - pos = cstart; - for (j = 0; j < cyclelen; j++) { - if (pos >= panonopt_end) - pos -= nnonopts; - else - pos += nopts; - swap = nargv[pos]; - /* LINTED const cast */ - ((char**)nargv)[pos] = nargv[cstart]; - /* LINTED const cast */ - ((char**)nargv)[cstart] = swap; - } - } - } - -#ifdef REPLACE_GETOPT - /* - * getopt -- - * Parse argc/argv argument vector. - * - * [eventually this will replace the BSD getopt] - */ - int - getopt(int nargc, char* const* nargv, const char* options) - { - - /* - * We don't pass FLAG_PERMUTE to getopt_internal() since - * the BSD getopt(3) (unlike GNU) has never done this. - * - * Furthermore, since many privileged programs call getopt() - * before dropping privileges it makes sense to keep things - * as simple (and bug-free) as possible. - */ - return (getopt_internal(nargc, nargv, options, NULL, NULL, 0)); - } -#endif /* REPLACE_GETOPT */ - - //extern int getopt(int nargc, char * const *nargv, const char *options); - -#ifdef _BSD_SOURCE -/* - * BSD adds the non-standard `optreset' feature, for reinitialisation - * of `getopt' parsing. We support this feature, for applications which - * proclaim their BSD heritage, before including this header; however, - * to maintain portability, developers are advised to avoid it. - */ -# define optreset __mingw_optreset - extern int optreset; -#endif -#ifdef __cplusplus -} -#endif -/* - * POSIX requires the `getopt' API to be specified in `unistd.h'; - * thus, `unistd.h' includes this header. However, we do not want - * to expose the `getopt_long' or `getopt_long_only' APIs, when - * included in this manner. Thus, close the standard __GETOPT_H__ - * declarations block, and open an additional __GETOPT_LONG_H__ - * specific block, only when *not* __UNISTD_H_SOURCED__, in which - * to declare the extended API. - */ -#endif /* !defined(__GETOPT_H__) */ - -#if !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__) -#define __GETOPT_LONG_H__ - -#ifdef __cplusplus -extern "C" { -#endif - - struct option /* specification for a long form option... */ - { - const char* name; /* option name, without leading hyphens */ - int has_arg; /* does it take an argument? */ - int* flag; /* where to save its status, or NULL */ - int val; /* its associated status value */ - }; - - enum /* permitted values for its `has_arg' field... */ - { - no_argument = 0, /* option never takes an argument */ - required_argument, /* option always requires an argument */ - optional_argument /* option may take an argument */ - }; - - /* - * parse_long_options -- - * Parse long options in argc/argv argument vector. - * Returns -1 if short_too is set and the option does not match long_options. - */ - static int - parse_long_options(char* const* nargv, const char* options, - const struct option* long_options, int* idx, int short_too) - { - char* current_argv, * has_equal; - size_t current_argv_len; - int i, ambiguous, match; - -#define IDENTICAL_INTERPRETATION(_x, _y) \ - (long_options[(_x)].has_arg == long_options[(_y)].has_arg && \ - long_options[(_x)].flag == long_options[(_y)].flag && \ - long_options[(_x)].val == long_options[(_y)].val) - - current_argv = place; - match = -1; - ambiguous = 0; - - optind++; - - if ((has_equal = strchr(current_argv, '=')) != NULL) { - /* argument found (--option=arg) */ - current_argv_len = has_equal - current_argv; - has_equal++; - } - else - current_argv_len = strlen(current_argv); - - for (i = 0; long_options[i].name; i++) { - /* find matching long option */ - if (strncmp(current_argv, long_options[i].name, - current_argv_len)) - continue; - - if (strlen(long_options[i].name) == current_argv_len) { - /* exact match */ - match = i; - ambiguous = 0; - break; - } - /* - * If this is a known short option, don't allow - * a partial match of a single character. - */ - if (short_too && current_argv_len == 1) - continue; - - if (match == -1) /* partial match */ - match = i; - else if (!IDENTICAL_INTERPRETATION(i, match)) - ambiguous = 1; - } - if (ambiguous) { - /* ambiguous abbreviation */ - if (PRINT_ERROR) - warnx(ambig, (int)current_argv_len, - current_argv); - optopt = 0; - return (BADCH); - } - if (match != -1) { /* option found */ - if (long_options[match].has_arg == no_argument - && has_equal) { - if (PRINT_ERROR) - warnx(noarg, (int)current_argv_len, - current_argv); - /* - * XXX: GNU sets optopt to val regardless of flag - */ - if (long_options[match].flag == NULL) - optopt = long_options[match].val; - else - optopt = 0; - return (BADARG); - } - if (long_options[match].has_arg == required_argument || - long_options[match].has_arg == optional_argument) { - if (has_equal) - optarg = has_equal; - else if (long_options[match].has_arg == - required_argument) { - /* - * optional argument doesn't use next nargv - */ - optarg = nargv[optind++]; - } - } - if ((long_options[match].has_arg == required_argument) - && (optarg == NULL)) { - /* - * Missing argument; leading ':' indicates no error - * should be generated. - */ - if (PRINT_ERROR) - warnx(recargstring, - current_argv); - /* - * XXX: GNU sets optopt to val regardless of flag - */ - if (long_options[match].flag == NULL) - optopt = long_options[match].val; - else - optopt = 0; - --optind; - return (BADARG); - } - } - else { /* unknown option */ - if (short_too) { - --optind; - return (-1); - } - if (PRINT_ERROR) - warnx(illoptstring, current_argv); - optopt = 0; - return (BADCH); - } - if (idx) - *idx = match; - if (long_options[match].flag) { - *long_options[match].flag = long_options[match].val; - return (0); - } - else - return (long_options[match].val); -#undef IDENTICAL_INTERPRETATION - } - - /* - * getopt_internal -- - * Parse argc/argv argument vector. Called by user level routines. - */ - static int - getopt_internal(int nargc, char* const* nargv, const char* options, - const struct option* long_options, int* idx, int flags) - { - char* oli; /* option letter list index */ - int optchar, short_too; - static int posixly_correct = -1; - - if (options == NULL) - return (-1); - - /* - * XXX Some GNU programs (like cvs) set optind to 0 instead of - * XXX using optreset. Work around this braindamage. - */ - if (optind == 0) - optind = optreset = 1; - - /* - * Disable GNU extensions if POSIXLY_CORRECT is set or options - * string begins with a '+'. - * - * CV, 2009-12-14: Check POSIXLY_CORRECT anew if optind == 0 or - * optreset != 0 for GNU compatibility. - */ - if (posixly_correct == -1 || optreset != 0) - posixly_correct = (getenv("POSIXLY_CORRECT") != NULL); - if (*options == '-') - flags |= FLAG_ALLARGS; - else if (posixly_correct || *options == '+') - flags &= ~FLAG_PERMUTE; - if (*options == '+' || *options == '-') - options++; - - optarg = NULL; - if (optreset) - nonopt_start = nonopt_end = -1; - start: - if (optreset || !*place) { /* update scanning pointer */ - optreset = 0; - if (optind >= nargc) { /* end of argument vector */ - place = EMSG; - if (nonopt_end != -1) { - /* do permutation, if we have to */ - permute_args(nonopt_start, nonopt_end, - optind, nargv); - optind -= nonopt_end - nonopt_start; - } - else if (nonopt_start != -1) { - /* - * If we skipped non-options, set optind - * to the first of them. - */ - optind = nonopt_start; - } - nonopt_start = nonopt_end = -1; - return (-1); - } - if (*(place = nargv[optind]) != '-' || - (place[1] == '\0' && strchr(options, '-') == NULL)) { - place = EMSG; /* found non-option */ - if (flags & FLAG_ALLARGS) { - /* - * GNU extension: - * return non-option as argument to option 1 - */ - optarg = nargv[optind++]; - return (INORDER); - } - if (!(flags & FLAG_PERMUTE)) { - /* - * If no permutation wanted, stop parsing - * at first non-option. - */ - return (-1); - } - /* do permutation */ - if (nonopt_start == -1) - nonopt_start = optind; - else if (nonopt_end != -1) { - permute_args(nonopt_start, nonopt_end, - optind, nargv); - nonopt_start = optind - - (nonopt_end - nonopt_start); - nonopt_end = -1; - } - optind++; - /* process next argument */ - goto start; - } - if (nonopt_start != -1 && nonopt_end == -1) - nonopt_end = optind; - - /* - * If we have "-" do nothing, if "--" we are done. - */ - if (place[1] != '\0' && *++place == '-' && place[1] == '\0') { - optind++; - place = EMSG; - /* - * We found an option (--), so if we skipped - * non-options, we have to permute. - */ - if (nonopt_end != -1) { - permute_args(nonopt_start, nonopt_end, - optind, nargv); - optind -= nonopt_end - nonopt_start; - } - nonopt_start = nonopt_end = -1; - return (-1); - } - } - - /* - * Check long options if: - * 1) we were passed some - * 2) the arg is not just "-" - * 3) either the arg starts with -- we are getopt_long_only() - */ - if (long_options != NULL && place != nargv[optind] && - (*place == '-' || (flags & FLAG_LONGONLY))) { - short_too = 0; - if (*place == '-') - place++; /* --foo long option */ - else if (*place != ':' && strchr(options, *place) != NULL) - short_too = 1; /* could be short option too */ - - optchar = parse_long_options(nargv, options, long_options, - idx, short_too); - if (optchar != -1) { - place = EMSG; - return (optchar); - } - } - - if ((optchar = (int)*place++) == (int)':' || - (optchar == (int)'-' && *place != '\0') || - (oli = (char*)strchr(options, optchar)) == NULL) { - /* - * If the user specified "-" and '-' isn't listed in - * options, return -1 (non-option) as per POSIX. - * Otherwise, it is an unknown option character (or ':'). - */ - if (optchar == (int)'-' && *place == '\0') - return (-1); - if (!*place) - ++optind; - if (PRINT_ERROR) - warnx(illoptchar, optchar); - optopt = optchar; - return (BADCH); - } - if (long_options != NULL && optchar == 'W' && oli[1] == ';') { - /* -W long-option */ - if (*place) /* no space */ - /* NOTHING */; - else if (++optind >= nargc) { /* no arg */ - place = EMSG; - if (PRINT_ERROR) - warnx(recargchar, optchar); - optopt = optchar; - return (BADARG); - } - else /* white space */ - place = nargv[optind]; - optchar = parse_long_options(nargv, options, long_options, - idx, 0); - place = EMSG; - return (optchar); - } - if (*++oli != ':') { /* doesn't take argument */ - if (!*place) - ++optind; - } - else { /* takes (optional) argument */ - optarg = NULL; - if (*place) /* no white space */ - optarg = place; - else if (oli[1] != ':') { /* arg not optional */ - if (++optind >= nargc) { /* no arg */ - place = EMSG; - if (PRINT_ERROR) - warnx(recargchar, optchar); - optopt = optchar; - return (BADARG); - } - else - optarg = nargv[optind]; - } - place = EMSG; - ++optind; - } - /* dump back option letter */ - return (optchar); - } - - /* - * getopt_long -- - * Parse argc/argv argument vector. - */ - int - getopt_long(int nargc, char* const* nargv, const char* options, - const struct option* long_options, int* idx) - { - - return (getopt_internal(nargc, nargv, options, long_options, idx, - FLAG_PERMUTE)); - } - - /* - * getopt_long_only -- - * Parse argc/argv argument vector. - */ - int - getopt_long_only(int nargc, char* const* nargv, const char* options, - const struct option* long_options, int* idx) - { - - return (getopt_internal(nargc, nargv, options, long_options, idx, - FLAG_PERMUTE | FLAG_LONGONLY)); - } - - //extern int getopt_long(int nargc, char * const *nargv, const char *options, - // const struct option *long_options, int *idx); - //extern int getopt_long_only(int nargc, char * const *nargv, const char *options, - // const struct option *long_options, int *idx); - /* - * Previous MinGW implementation had... - */ -#ifndef HAVE_DECL_GETOPT - /* - * ...for the long form API only; keep this for compatibility. - */ -# define HAVE_DECL_GETOPT 1 -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__) */ \ No newline at end of file diff --git a/source/injector.cc b/source/injector.cc deleted file mode 100644 index 8dcd67c..0000000 --- a/source/injector.cc +++ /dev/null @@ -1,1170 +0,0 @@ -// ConsoleApplication.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 -// https://github.com/yihleego/handle-tools - -#include -#include -#include -#include "getopt.h" -#include - -#include "ntstatus.h" - - -#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0) - -bool endsWith(const std::string& str, const std::string suffix) { - if (suffix.length() > str.length()) { return false; } - return (str.rfind(suffix) == (str.length() - suffix.length())); -} - -typedef struct _UNICODE_STRING { - USHORT Length; - USHORT MaximumLength; - PWSTR Buffer; -} UNICODE_STRING, * PUNICODE_STRING; - -typedef struct _SYSTEM_HANDLE { - PVOID Object; - HANDLE UniqueProcessId; - HANDLE HandleValue; - ULONG GrantedAccess; - USHORT CreatorBackTraceIndex; - USHORT ObjectTypeIndex; - ULONG HandleAttributes; - ULONG Reserved; -} SYSTEM_HANDLE, * PSYSTEM_HANDLE; - -typedef struct _SYSTEM_HANDLE_INFORMATION_EX { - ULONG_PTR HandleCount; - ULONG_PTR Reserved; - SYSTEM_HANDLE Handles[1]; -} SYSTEM_HANDLE_INFORMATION_EX, * PSYSTEM_HANDLE_INFORMATION_EX; - -typedef struct _OBJECT_BASIC_INFORMATION { - ULONG Attributes; - ACCESS_MASK GrantedAccess; - ULONG HandleCount; - ULONG PointerCount; - ULONG PagedPoolCharge; - ULONG NonPagedPoolCharge; - ULONG Reserved[3]; - ULONG NameInfoSize; - ULONG TypeInfoSize; - ULONG SecurityDescriptorSize; - LARGE_INTEGER CreationTime; -} OBJECT_BASIC_INFORMATION, * POBJECT_BASIC_INFORMATION; - -typedef struct _OBJECT_NAME_INFORMATION { - UNICODE_STRING Name; -} OBJECT_NAME_INFORMATION, * POBJECT_NAME_INFORMATION; - -typedef struct _OBJECT_TYPE_INFORMATION { - UNICODE_STRING TypeName; - ULONG Reserved[22]; // reserved for internal use -} OBJECT_TYPE_INFORMATION, * POBJECT_TYPE_INFORMATION; - -typedef enum _SYSTEM_INFORMATION_CLASS { - SystemBasicInformation, // q: SYSTEM_BASIC_INFORMATION - SystemProcessorInformation, // q: SYSTEM_PROCESSOR_INFORMATION - SystemPerformanceInformation, // q: SYSTEM_PERFORMANCE_INFORMATION - SystemTimeOfDayInformation, // q: SYSTEM_TIMEOFDAY_INFORMATION - SystemPathInformation, // not implemented - SystemProcessInformation, // q: SYSTEM_PROCESS_INFORMATION - SystemCallCountInformation, // q: SYSTEM_CALL_COUNT_INFORMATION - SystemDeviceInformation, // q: SYSTEM_DEVICE_INFORMATION - SystemProcessorPerformanceInformation, // q: SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION - SystemFlagsInformation, // q: SYSTEM_FLAGS_INFORMATION - SystemCallTimeInformation, // not implemented // SYSTEM_CALL_TIME_INFORMATION // 10 - SystemModuleInformation, // q: RTL_PROCESS_MODULES - SystemLocksInformation, // q: RTL_PROCESS_LOCKS - SystemStackTraceInformation, // q: RTL_PROCESS_BACKTRACES - SystemPagedPoolInformation, // not implemented - SystemNonPagedPoolInformation, // not implemented - SystemHandleInformation, // q: SYSTEM_HANDLE_INFORMATION - SystemObjectInformation, // q: SYSTEM_OBJECTTYPE_INFORMATION mixed with SYSTEM_OBJECT_INFORMATION - SystemPageFileInformation, // q: SYSTEM_PAGEFILE_INFORMATION - SystemVdmInstemulInformation, // q: SYSTEM_VDM_INSTEMUL_INFO - SystemVdmBopInformation, // not implemented // 20 - SystemFileCacheInformation, // q: SYSTEM_FILECACHE_INFORMATION; s (requires SeIncreaseQuotaPrivilege) (info for WorkingSetTypeSystemCache) - SystemPoolTagInformation, // q: SYSTEM_POOLTAG_INFORMATION - SystemInterruptInformation, // q: SYSTEM_INTERRUPT_INFORMATION - SystemDpcBehaviorInformation, // q: SYSTEM_DPC_BEHAVIOR_INFORMATION; s: SYSTEM_DPC_BEHAVIOR_INFORMATION (requires SeLoadDriverPrivilege) - SystemFullMemoryInformation, // not implemented // SYSTEM_MEMORY_USAGE_INFORMATION - SystemLoadGdiDriverInformation, // s (kernel-mode only) - SystemUnloadGdiDriverInformation, // s (kernel-mode only) - SystemTimeAdjustmentInformation, // q: SYSTEM_QUERY_TIME_ADJUST_INFORMATION; s: SYSTEM_SET_TIME_ADJUST_INFORMATION (requires SeSystemtimePrivilege) - SystemSummaryMemoryInformation, // not implemented // SYSTEM_MEMORY_USAGE_INFORMATION - SystemMirrorMemoryInformation, // s (requires license value "Kernel-MemoryMirroringSupported") (requires SeShutdownPrivilege) // 30 - SystemPerformanceTraceInformation, // q; s: (type depends on EVENT_TRACE_INFORMATION_CLASS) - SystemObsolete0, // not implemented - SystemExceptionInformation, // q: SYSTEM_EXCEPTION_INFORMATION - SystemCrashDumpStateInformation, // s: SYSTEM_CRASH_DUMP_STATE_INFORMATION (requires SeDebugPrivilege) - SystemKernelDebuggerInformation, // q: SYSTEM_KERNEL_DEBUGGER_INFORMATION - SystemContextSwitchInformation, // q: SYSTEM_CONTEXT_SWITCH_INFORMATION - SystemRegistryQuotaInformation, // q: SYSTEM_REGISTRY_QUOTA_INFORMATION; s (requires SeIncreaseQuotaPrivilege) - SystemExtendServiceTableInformation, // s (requires SeLoadDriverPrivilege) // loads win32k only - SystemPrioritySeperation, // s (requires SeTcbPrivilege) - SystemVerifierAddDriverInformation, // s (requires SeDebugPrivilege) // 40 - SystemVerifierRemoveDriverInformation, // s (requires SeDebugPrivilege) - SystemProcessorIdleInformation, // q: SYSTEM_PROCESSOR_IDLE_INFORMATION - SystemLegacyDriverInformation, // q: SYSTEM_LEGACY_DRIVER_INFORMATION - SystemCurrentTimeZoneInformation, // q; s: RTL_TIME_ZONE_INFORMATION - SystemLookasideInformation, // q: SYSTEM_LOOKASIDE_INFORMATION - SystemTimeSlipNotification, // s: HANDLE (NtCreateEvent) (requires SeSystemtimePrivilege) - SystemSessionCreate, // not implemented - SystemSessionDetach, // not implemented - SystemSessionInformation, // not implemented (SYSTEM_SESSION_INFORMATION) - SystemRangeStartInformation, // q: SYSTEM_RANGE_START_INFORMATION // 50 - SystemVerifierInformation, // q: SYSTEM_VERIFIER_INFORMATION; s (requires SeDebugPrivilege) - SystemVerifierThunkExtend, // s (kernel-mode only) - SystemSessionProcessInformation, // q: SYSTEM_SESSION_PROCESS_INFORMATION - SystemLoadGdiDriverInSystemSpace, // s: SYSTEM_GDI_DRIVER_INFORMATION (kernel-mode only) (same as SystemLoadGdiDriverInformation) - SystemNumaProcessorMap, // q: SYSTEM_NUMA_INFORMATION - SystemPrefetcherInformation, // q; s: PREFETCHER_INFORMATION // PfSnQueryPrefetcherInformation - SystemExtendedProcessInformation, // q: SYSTEM_PROCESS_INFORMATION - SystemRecommendedSharedDataAlignment, // q: ULONG // KeGetRecommendedSharedDataAlignment - SystemComPlusPackage, // q; s: ULONG - SystemNumaAvailableMemory, // q: SYSTEM_NUMA_INFORMATION // 60 - SystemProcessorPowerInformation, // q: SYSTEM_PROCESSOR_POWER_INFORMATION - SystemEmulationBasicInformation, // q: SYSTEM_BASIC_INFORMATION - SystemEmulationProcessorInformation, // q: SYSTEM_PROCESSOR_INFORMATION - SystemExtendedHandleInformation, // q: SYSTEM_HANDLE_INFORMATION_EX - SystemLostDelayedWriteInformation, // q: ULONG - SystemBigPoolInformation, // q: SYSTEM_BIGPOOL_INFORMATION - SystemSessionPoolTagInformation, // q: SYSTEM_SESSION_POOLTAG_INFORMATION - SystemSessionMappedViewInformation, // q: SYSTEM_SESSION_MAPPED_VIEW_INFORMATION - SystemHotpatchInformation, // q; s: SYSTEM_HOTPATCH_CODE_INFORMATION - SystemObjectSecurityMode, // q: ULONG // 70 - SystemWatchdogTimerHandler, // s: SYSTEM_WATCHDOG_HANDLER_INFORMATION // (kernel-mode only) - SystemWatchdogTimerInformation, // q: SYSTEM_WATCHDOG_TIMER_INFORMATION // (kernel-mode only) - SystemLogicalProcessorInformation, // q: SYSTEM_LOGICAL_PROCESSOR_INFORMATION - SystemWow64SharedInformationObsolete, // not implemented - SystemRegisterFirmwareTableInformationHandler, // s: SYSTEM_FIRMWARE_TABLE_HANDLER // (kernel-mode only) - SystemFirmwareTableInformation, // SYSTEM_FIRMWARE_TABLE_INFORMATION - SystemModuleInformationEx, // q: RTL_PROCESS_MODULE_INFORMATION_EX - SystemVerifierTriageInformation, // not implemented - SystemSuperfetchInformation, // q; s: SUPERFETCH_INFORMATION // PfQuerySuperfetchInformation - SystemMemoryListInformation, // q: SYSTEM_MEMORY_LIST_INFORMATION; s: SYSTEM_MEMORY_LIST_COMMAND (requires SeProfileSingleProcessPrivilege) // 80 - SystemFileCacheInformationEx, // q: SYSTEM_FILECACHE_INFORMATION; s (requires SeIncreaseQuotaPrivilege) (same as SystemFileCacheInformation) - SystemThreadPriorityClientIdInformation, // s: SYSTEM_THREAD_CID_PRIORITY_INFORMATION (requires SeIncreaseBasePriorityPrivilege) - SystemProcessorIdleCycleTimeInformation, // q: SYSTEM_PROCESSOR_IDLE_CYCLE_TIME_INFORMATION[] - SystemVerifierCancellationInformation, // SYSTEM_VERIFIER_CANCELLATION_INFORMATION // name:wow64:whNT32QuerySystemVerifierCancellationInformation - SystemProcessorPowerInformationEx, // not implemented - SystemRefTraceInformation, // q; s: SYSTEM_REF_TRACE_INFORMATION // ObQueryRefTraceInformation - SystemSpecialPoolInformation, // q; s: SYSTEM_SPECIAL_POOL_INFORMATION (requires SeDebugPrivilege) // MmSpecialPoolTag, then MmSpecialPoolCatchOverruns != 0 - SystemProcessIdInformation, // q: SYSTEM_PROCESS_ID_INFORMATION - SystemErrorPortInformation, // s (requires SeTcbPrivilege) - SystemBootEnvironmentInformation, // q: SYSTEM_BOOT_ENVIRONMENT_INFORMATION // 90 - SystemHypervisorInformation, // q: SYSTEM_HYPERVISOR_QUERY_INFORMATION - SystemVerifierInformationEx, // q; s: SYSTEM_VERIFIER_INFORMATION_EX - SystemTimeZoneInformation, // q; s: RTL_TIME_ZONE_INFORMATION (requires SeTimeZonePrivilege) - SystemImageFileExecutionOptionsInformation, // s: SYSTEM_IMAGE_FILE_EXECUTION_OPTIONS_INFORMATION (requires SeTcbPrivilege) - SystemCoverageInformation, // q: COVERAGE_MODULES s: COVERAGE_MODULE_REQUEST // ExpCovQueryInformation (requires SeDebugPrivilege) - SystemPrefetchPatchInformation, // SYSTEM_PREFETCH_PATCH_INFORMATION - SystemVerifierFaultsInformation, // s: SYSTEM_VERIFIER_FAULTS_INFORMATION (requires SeDebugPrivilege) - SystemSystemPartitionInformation, // q: SYSTEM_SYSTEM_PARTITION_INFORMATION - SystemSystemDiskInformation, // q: SYSTEM_SYSTEM_DISK_INFORMATION - SystemProcessorPerformanceDistribution, // q: SYSTEM_PROCESSOR_PERFORMANCE_DISTRIBUTION // 100 - SystemNumaProximityNodeInformation, // q; s: SYSTEM_NUMA_PROXIMITY_MAP - SystemDynamicTimeZoneInformation, // q; s: RTL_DYNAMIC_TIME_ZONE_INFORMATION (requires SeTimeZonePrivilege) - SystemCodeIntegrityInformation, // q: SYSTEM_CODEINTEGRITY_INFORMATION // SeCodeIntegrityQueryInformation - SystemProcessorMicrocodeUpdateInformation, // s: SYSTEM_PROCESSOR_MICROCODE_UPDATE_INFORMATION - SystemProcessorBrandString, // q: CHAR[] // HaliQuerySystemInformation -> HalpGetProcessorBrandString, info class 23 - SystemVirtualAddressInformation, // q: SYSTEM_VA_LIST_INFORMATION[]; s: SYSTEM_VA_LIST_INFORMATION[] (requires SeIncreaseQuotaPrivilege) // MmQuerySystemVaInformation - SystemLogicalProcessorAndGroupInformation, // q: SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX // since WIN7 // KeQueryLogicalProcessorRelationship - SystemProcessorCycleTimeInformation, // q: SYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION[] - SystemStoreInformation, // q; s: SYSTEM_STORE_INFORMATION (requires SeProfileSingleProcessPrivilege) // SmQueryStoreInformation - SystemRegistryAppendString, // s: SYSTEM_REGISTRY_APPEND_STRING_PARAMETERS // 110 - SystemAitSamplingValue, // s: ULONG (requires SeProfileSingleProcessPrivilege) - SystemVhdBootInformation, // q: SYSTEM_VHD_BOOT_INFORMATION - SystemCpuQuotaInformation, // q; s: PS_CPU_QUOTA_QUERY_INFORMATION - SystemNativeBasicInformation, // q: SYSTEM_BASIC_INFORMATION - SystemErrorPortTimeouts, // SYSTEM_ERROR_PORT_TIMEOUTS - SystemLowPriorityIoInformation, // q: SYSTEM_LOW_PRIORITY_IO_INFORMATION - SystemTpmBootEntropyInformation, // q: TPM_BOOT_ENTROPY_NT_RESULT // ExQueryTpmBootEntropyInformation - SystemVerifierCountersInformation, // q: SYSTEM_VERIFIER_COUNTERS_INFORMATION - SystemPagedPoolInformationEx, // q: SYSTEM_FILECACHE_INFORMATION; s (requires SeIncreaseQuotaPrivilege) (info for WorkingSetTypePagedPool) - SystemSystemPtesInformationEx, // q: SYSTEM_FILECACHE_INFORMATION; s (requires SeIncreaseQuotaPrivilege) (info for WorkingSetTypeSystemPtes) // 120 - SystemNodeDistanceInformation, - SystemAcpiAuditInformation, // q: SYSTEM_ACPI_AUDIT_INFORMATION // HaliQuerySystemInformation -> HalpAuditQueryResults, info class 26 - SystemBasicPerformanceInformation, // q: SYSTEM_BASIC_PERFORMANCE_INFORMATION // name:wow64:whNtQuerySystemInformation_SystemBasicPerformanceInformation - SystemQueryPerformanceCounterInformation, // q: SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION // since WIN7 SP1 - SystemSessionBigPoolInformation, // q: SYSTEM_SESSION_POOLTAG_INFORMATION // since WIN8 - SystemBootGraphicsInformation, // q; s: SYSTEM_BOOT_GRAPHICS_INFORMATION (kernel-mode only) - SystemScrubPhysicalMemoryInformation, // q; s: MEMORY_SCRUB_INFORMATION - SystemBadPageInformation, - SystemProcessorProfileControlArea, // q; s: SYSTEM_PROCESSOR_PROFILE_CONTROL_AREA - SystemCombinePhysicalMemoryInformation, // s: MEMORY_COMBINE_INFORMATION, MEMORY_COMBINE_INFORMATION_EX, MEMORY_COMBINE_INFORMATION_EX2 // 130 - SystemEntropyInterruptTimingInformation, // q; s: SYSTEM_ENTROPY_TIMING_INFORMATION - SystemConsoleInformation, // q: SYSTEM_CONSOLE_INFORMATION - SystemPlatformBinaryInformation, // q: SYSTEM_PLATFORM_BINARY_INFORMATION (requires SeTcbPrivilege) - SystemPolicyInformation, // q: SYSTEM_POLICY_INFORMATION - SystemHypervisorProcessorCountInformation, // q: SYSTEM_HYPERVISOR_PROCESSOR_COUNT_INFORMATION - SystemDeviceDataInformation, // q: SYSTEM_DEVICE_DATA_INFORMATION - SystemDeviceDataEnumerationInformation, // q: SYSTEM_DEVICE_DATA_INFORMATION - SystemMemoryTopologyInformation, // q: SYSTEM_MEMORY_TOPOLOGY_INFORMATION - SystemMemoryChannelInformation, // q: SYSTEM_MEMORY_CHANNEL_INFORMATION - SystemBootLogoInformation, // q: SYSTEM_BOOT_LOGO_INFORMATION // 140 - SystemProcessorPerformanceInformationEx, // q: SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION_EX // since WINBLUE - SystemCriticalProcessErrorLogInformation, - SystemSecureBootPolicyInformation, // q: SYSTEM_SECUREBOOT_POLICY_INFORMATION - SystemPageFileInformationEx, // q: SYSTEM_PAGEFILE_INFORMATION_EX - SystemSecureBootInformation, // q: SYSTEM_SECUREBOOT_INFORMATION - SystemEntropyInterruptTimingRawInformation, - SystemPortableWorkspaceEfiLauncherInformation, // q: SYSTEM_PORTABLE_WORKSPACE_EFI_LAUNCHER_INFORMATION - SystemFullProcessInformation, // q: SYSTEM_PROCESS_INFORMATION with SYSTEM_PROCESS_INFORMATION_EXTENSION (requires admin) - SystemKernelDebuggerInformationEx, // q: SYSTEM_KERNEL_DEBUGGER_INFORMATION_EX - SystemBootMetadataInformation, // 150 - SystemSoftRebootInformation, // q: ULONG - SystemElamCertificateInformation, // s: SYSTEM_ELAM_CERTIFICATE_INFORMATION - SystemOfflineDumpConfigInformation, // q: OFFLINE_CRASHDUMP_CONFIGURATION_TABLE_V2 - SystemProcessorFeaturesInformation, // q: SYSTEM_PROCESSOR_FEATURES_INFORMATION - SystemRegistryReconciliationInformation, // s: NULL (requires admin) (flushes registry hives) - SystemEdidInformation, // q: SYSTEM_EDID_INFORMATION - SystemManufacturingInformation, // q: SYSTEM_MANUFACTURING_INFORMATION // since THRESHOLD - SystemEnergyEstimationConfigInformation, // q: SYSTEM_ENERGY_ESTIMATION_CONFIG_INFORMATION - SystemHypervisorDetailInformation, // q: SYSTEM_HYPERVISOR_DETAIL_INFORMATION - SystemProcessorCycleStatsInformation, // q: SYSTEM_PROCESSOR_CYCLE_STATS_INFORMATION // 160 - SystemVmGenerationCountInformation, - SystemTrustedPlatformModuleInformation, // q: SYSTEM_TPM_INFORMATION - SystemKernelDebuggerFlags, // SYSTEM_KERNEL_DEBUGGER_FLAGS - SystemCodeIntegrityPolicyInformation, // q: SYSTEM_CODEINTEGRITYPOLICY_INFORMATION - SystemIsolatedUserModeInformation, // q: SYSTEM_ISOLATED_USER_MODE_INFORMATION - SystemHardwareSecurityTestInterfaceResultsInformation, - SystemSingleModuleInformation, // q: SYSTEM_SINGLE_MODULE_INFORMATION - SystemAllowedCpuSetsInformation, - SystemVsmProtectionInformation, // q: SYSTEM_VSM_PROTECTION_INFORMATION (previously SystemDmaProtectionInformation) - SystemInterruptCpuSetsInformation, // q: SYSTEM_INTERRUPT_CPU_SET_INFORMATION // 170 - SystemSecureBootPolicyFullInformation, // q: SYSTEM_SECUREBOOT_POLICY_FULL_INFORMATION - SystemCodeIntegrityPolicyFullInformation, - SystemAffinitizedInterruptProcessorInformation, // (requires SeIncreaseBasePriorityPrivilege) - SystemRootSiloInformation, // q: SYSTEM_ROOT_SILO_INFORMATION - SystemCpuSetInformation, // q: SYSTEM_CPU_SET_INFORMATION // since THRESHOLD2 - SystemCpuSetTagInformation, // q: SYSTEM_CPU_SET_TAG_INFORMATION - SystemWin32WerStartCallout, - SystemSecureKernelProfileInformation, // q: SYSTEM_SECURE_KERNEL_HYPERGUARD_PROFILE_INFORMATION - SystemCodeIntegrityPlatformManifestInformation, // q: SYSTEM_SECUREBOOT_PLATFORM_MANIFEST_INFORMATION // since REDSTONE - SystemInterruptSteeringInformation, // SYSTEM_INTERRUPT_STEERING_INFORMATION_INPUT // 180 - SystemSupportedProcessorArchitectures, // in: HANDLE, out: SYSTEM_SUPPORTED_PROCESSOR_ARCHITECTURES_INFORMATION[] (Max 5 structs) // NtQuerySystemInformationEx - SystemMemoryUsageInformation, // q: SYSTEM_MEMORY_USAGE_INFORMATION - SystemCodeIntegrityCertificateInformation, // q: SYSTEM_CODEINTEGRITY_CERTIFICATE_INFORMATION - SystemPhysicalMemoryInformation, // q: SYSTEM_PHYSICAL_MEMORY_INFORMATION // since REDSTONE2 - SystemControlFlowTransition, - SystemKernelDebuggingAllowed, // s: ULONG - SystemActivityModerationExeState, // SYSTEM_ACTIVITY_MODERATION_EXE_STATE - SystemActivityModerationUserSettings, // SYSTEM_ACTIVITY_MODERATION_USER_SETTINGS - SystemCodeIntegrityPoliciesFullInformation, - SystemCodeIntegrityUnlockInformation, // SYSTEM_CODEINTEGRITY_UNLOCK_INFORMATION // 190 - SystemIntegrityQuotaInformation, - SystemFlushInformation, // q: SYSTEM_FLUSH_INFORMATION - SystemProcessorIdleMaskInformation, // q: ULONG_PTR // since REDSTONE3 - SystemSecureDumpEncryptionInformation, - SystemWriteConstraintInformation, // SYSTEM_WRITE_CONSTRAINT_INFORMATION - SystemKernelVaShadowInformation, // SYSTEM_KERNEL_VA_SHADOW_INFORMATION - SystemHypervisorSharedPageInformation, // SYSTEM_HYPERVISOR_SHARED_PAGE_INFORMATION // since REDSTONE4 - SystemFirmwareBootPerformanceInformation, - SystemCodeIntegrityVerificationInformation, // SYSTEM_CODEINTEGRITYVERIFICATION_INFORMATION - SystemFirmwarePartitionInformation, // SYSTEM_FIRMWARE_PARTITION_INFORMATION // 200 - SystemSpeculationControlInformation, // SYSTEM_SPECULATION_CONTROL_INFORMATION // (CVE-2017-5715) REDSTONE3 and above. - SystemDmaGuardPolicyInformation, // SYSTEM_DMA_GUARD_POLICY_INFORMATION - SystemEnclaveLaunchControlInformation, // SYSTEM_ENCLAVE_LAUNCH_CONTROL_INFORMATION - SystemWorkloadAllowedCpuSetsInformation, // SYSTEM_WORKLOAD_ALLOWED_CPU_SET_INFORMATION // since REDSTONE5 - SystemCodeIntegrityUnlockModeInformation, - SystemLeapSecondInformation, // SYSTEM_LEAP_SECOND_INFORMATION - SystemFlags2Information, // q: SYSTEM_FLAGS_INFORMATION - SystemSecurityModelInformation, // SYSTEM_SECURITY_MODEL_INFORMATION // since 19H1 - SystemCodeIntegritySyntheticCacheInformation, - SystemFeatureConfigurationInformation, // SYSTEM_FEATURE_CONFIGURATION_INFORMATION // since 20H1 // 210 - SystemFeatureConfigurationSectionInformation, // SYSTEM_FEATURE_CONFIGURATION_SECTIONS_INFORMATION - SystemFeatureUsageSubscriptionInformation, // SYSTEM_FEATURE_USAGE_SUBSCRIPTION_DETAILS - SystemSecureSpeculationControlInformation, // SECURE_SPECULATION_CONTROL_INFORMATION - SystemSpacesBootInformation, // since 20H2 - SystemFwRamdiskInformation, // SYSTEM_FIRMWARE_RAMDISK_INFORMATION - SystemWheaIpmiHardwareInformation, - SystemDifSetRuleClassInformation, - SystemDifClearRuleClassInformation, - SystemDifApplyPluginVerificationOnDriver, - SystemDifRemovePluginVerificationOnDriver, // 220 - SystemShadowStackInformation, // SYSTEM_SHADOW_STACK_INFORMATION - SystemBuildVersionInformation, // SYSTEM_BUILD_VERSION_INFORMATION - SystemPoolLimitInformation, // SYSTEM_POOL_LIMIT_INFORMATION - SystemCodeIntegrityAddDynamicStore, - SystemCodeIntegrityClearDynamicStores, - SystemDifPoolTrackingInformation, - SystemPoolZeroingInformation, // SYSTEM_POOL_ZEROING_INFORMATION - MaxSystemInfoClass -} SYSTEM_INFORMATION_CLASS; - -typedef enum _OBJECT_INFORMATION_CLASS { - ObjectBasicInformation = 0, // q: OBJECT_BASIC_INFORMATION - ObjectNameInformation = 1, // q: OBJECT_NAME_INFORMATION - ObjectTypeInformation = 2, // q: OBJECT_TYPE_INFORMATION - ObjectTypesInformation, // q: OBJECT_TYPES_INFORMATION - ObjectHandleFlagInformation, // qs: OBJECT_HANDLE_FLAG_INFORMATION - ObjectSessionInformation, // s: void // change object session // (requires SeTcbPrivilege) - ObjectSessionObjectInformation, // s: void // change object session // (requires SeTcbPrivilege) - MaxObjectInfoClass -} OBJECT_INFORMATION_CLASS; - -typedef NTSTATUS(WINAPI* PNtQuerySystemInformation)( - _In_ SYSTEM_INFORMATION_CLASS SystemInformationClass, - _Inout_ PVOID SystemInformation, - _In_ ULONG SystemInformationLength, - _Out_opt_ PULONG ReturnLength - ); - -typedef NTSTATUS(WINAPI* PNtQueryObject)( - _In_opt_ HANDLE Handle, - _In_ OBJECT_INFORMATION_CLASS ObjectInformationClass, - _Out_opt_ PVOID ObjectInformation, - _In_ ULONG ObjectInformationLength, - _Out_opt_ PULONG ReturnLength); - -typedef NTSTATUS(WINAPI* PNtDuplicateObject)( - _In_ HANDLE SourceProcessHandle, - _In_ HANDLE SourceHandle, - _In_opt_ HANDLE TargetProcessHandle, - _Out_opt_ PHANDLE TargetHandle, - _In_ ACCESS_MASK DesiredAccess, - _In_ ULONG HandleAttributes, - _In_ ULONG Options - ); - -int FindHandles(ULONG pid, LPSTR handleName, BOOL closeHandle, BOOL suffix) { - HMODULE ntdll = GetModuleHandle(TEXT("ntdll.dll")); - if (NULL == ntdll) { - printf("Failed to load 'ntdll.dll'\n"); - return 0; - } - PNtQuerySystemInformation pQuerySystemInformation = (PNtQuerySystemInformation)GetProcAddress(ntdll, "NtQuerySystemInformation"); - PNtQueryObject pQueryObject = (PNtQueryObject)GetProcAddress(ntdll, "NtQueryObject"); - PNtDuplicateObject pDuplicateObject = (PNtDuplicateObject)GetProcAddress(ntdll, "NtDuplicateObject"); - if (NULL == pQuerySystemInformation || NULL == pQueryObject || NULL == pDuplicateObject) { - printf("Failed to call 'GetProcAddress()'\n"); - return 0; - } - - ULONG len = 0x10000; - NTSTATUS status; - PSYSTEM_HANDLE_INFORMATION_EX pHandleInfo = NULL; - do { - if (len > 0x4000000) { - return 0; - } - len *= 2; - pHandleInfo = (PSYSTEM_HANDLE_INFORMATION_EX)GlobalAlloc(GMEM_ZEROINIT, len); - status = pQuerySystemInformation(SystemExtendedHandleInformation, pHandleInfo, len, &len); - } while (status == STATUS_INFO_LENGTH_MISMATCH); - - if (!NT_SUCCESS(status)) { - printf("Failed to call 'NtQuerySystemInformation()' with error code 0x%X\n", status); - return 0; - } - - HANDLE currentProcess = GetCurrentProcess(); - for (int i = 0; i < pHandleInfo->HandleCount; i++) { - SYSTEM_HANDLE handle = pHandleInfo->Handles[i]; - PVOID object = handle.Object; - HANDLE handleValue = handle.HandleValue; - HANDLE uniqueProcessId = handle.UniqueProcessId; - if (NULL != pid && HandleToLong(uniqueProcessId) != pid) { - continue; - } - LPSTR pName = NULL; - LPSTR pType = NULL; - HANDLE sourceProcess = OpenProcess(PROCESS_ALL_ACCESS | PROCESS_DUP_HANDLE | PROCESS_SUSPEND_RESUME, FALSE, HandleToULong(uniqueProcessId)); - HANDLE targetHandle = NULL; - NTSTATUS status = pDuplicateObject(sourceProcess, handleValue, currentProcess, &targetHandle, 0, FALSE, DUPLICATE_SAME_ACCESS); - if (NT_SUCCESS(status)) { - //printf("Failed to call 'NtDuplicateObject()' with error code 0x%X\n", status); - POBJECT_NAME_INFORMATION pNameInfo = (POBJECT_NAME_INFORMATION)GlobalAlloc(GMEM_ZEROINIT, len); - POBJECT_TYPE_INFORMATION pTypeInfo = (POBJECT_TYPE_INFORMATION)GlobalAlloc(GMEM_ZEROINIT, len); - if (NT_SUCCESS(pQueryObject(targetHandle, ObjectNameInformation, pNameInfo, len, NULL))) { - pName = (LPSTR)GlobalAlloc(GMEM_ZEROINIT, pNameInfo->Name.Length); - WideCharToMultiByte(CP_ACP, 0, pNameInfo->Name.Buffer, -1, pName, pNameInfo->Name.Length, NULL, NULL); - } - if (NT_SUCCESS(pQueryObject(targetHandle, ObjectTypeInformation, pTypeInfo, len, NULL))) { - pType = (LPSTR)GlobalAlloc(GMEM_ZEROINIT, pTypeInfo->TypeName.Length); - WideCharToMultiByte(CP_ACP, 0, pTypeInfo->TypeName.Buffer, -1, pType, pTypeInfo->TypeName.Length, NULL, NULL); - } - } - if (NULL != handleName) { - if (suffix) { - if (NULL == pName || !endsWith(std::string(pName), std::string(handleName))) { - continue; - } - } - else { - if (NULL == pName || 0 != strcmp(pName, handleName)) { - continue; - } - } - - if (TRUE == closeHandle) { - HANDLE hProcess = OpenProcess(PROCESS_DUP_HANDLE, FALSE, HandleToLong(uniqueProcessId)); - DuplicateHandle(hProcess, handleValue, 0, 0, 0, 0, DUPLICATE_CLOSE_SOURCE); - CloseHandle(hProcess); - } - } - printf("PID: %-6d\t", uniqueProcessId); - printf("Handle: 0x%-3x\t", handleValue); - printf("Object: 0x%-8X\t", object); - printf("Type: %-20s\t", NULL != pType ? pType : ""); - printf("Name: %-30s\t", NULL != pName ? pName : ""); - printf("\n"); - } - return 1; -} - -int DisplayHandles() { - return FindHandles(NULL, NULL, FALSE, FALSE); -} - -int DisplayHandles(ULONG pid) { - return FindHandles(pid, NULL, FALSE, FALSE); -} - -int FindHandle(ULONG pid, LPSTR handleName) { - return FindHandles(pid, handleName, FALSE, FALSE); -} - -int CloseHandle(ULONG pid, LPSTR handleName) { - return FindHandles(pid, handleName, TRUE, FALSE); -} - -HANDLE FindHandleByName(ULONG pid, LPSTR handleName) { - HMODULE ntdll = GetModuleHandle(TEXT("ntdll.dll")); - if (NULL == ntdll) { - printf("Failed to load 'ntdll.dll'\n"); - return 0; - } - PNtQuerySystemInformation pQuerySystemInformation = (PNtQuerySystemInformation)GetProcAddress(ntdll, "NtQuerySystemInformation"); - PNtQueryObject pQueryObject = (PNtQueryObject)GetProcAddress(ntdll, "NtQueryObject"); - PNtDuplicateObject pDuplicateObject = (PNtDuplicateObject)GetProcAddress(ntdll, "NtDuplicateObject"); - if (NULL == pQuerySystemInformation || NULL == pQueryObject || NULL == pDuplicateObject) { - printf("Failed to call 'GetProcAddress()'\n"); - return 0; - } - - ULONG len = 0x10000; - NTSTATUS status; - PSYSTEM_HANDLE_INFORMATION_EX pHandleInfo = NULL; - do { - if (len > 0x4000000) { - return 0; - } - len *= 2; - pHandleInfo = (PSYSTEM_HANDLE_INFORMATION_EX)GlobalAlloc(GMEM_ZEROINIT, len); - status = pQuerySystemInformation(SystemExtendedHandleInformation, pHandleInfo, len, &len); - } while (status == STATUS_INFO_LENGTH_MISMATCH); - - if (!NT_SUCCESS(status)) { - printf("Failed to call 'NtQuerySystemInformation()' with error code 0x%X\n", status); - return 0; - } - - HANDLE currentProcess = GetCurrentProcess(); - for (int i = 0; i < pHandleInfo->HandleCount; i++) { - SYSTEM_HANDLE handle = pHandleInfo->Handles[i]; - PVOID object = handle.Object; - HANDLE handleValue = handle.HandleValue; - HANDLE uniqueProcessId = handle.UniqueProcessId; - if (NULL != pid && HandleToLong(uniqueProcessId) != pid) { - continue; - } - LPSTR pName = NULL; - LPSTR pType = NULL; - HANDLE sourceProcess = OpenProcess(PROCESS_ALL_ACCESS | PROCESS_DUP_HANDLE | PROCESS_SUSPEND_RESUME, FALSE, HandleToULong(uniqueProcessId)); - HANDLE targetHandle = NULL; - NTSTATUS status = pDuplicateObject(sourceProcess, handleValue, currentProcess, &targetHandle, 0, FALSE, DUPLICATE_SAME_ACCESS); - if (NT_SUCCESS(status)) { - //printf("Failed to call 'NtDuplicateObject()' with error code 0x%X\n", status); - POBJECT_NAME_INFORMATION pNameInfo = (POBJECT_NAME_INFORMATION)GlobalAlloc(GMEM_ZEROINIT, len); - POBJECT_TYPE_INFORMATION pTypeInfo = (POBJECT_TYPE_INFORMATION)GlobalAlloc(GMEM_ZEROINIT, len); - if (NT_SUCCESS(pQueryObject(targetHandle, ObjectNameInformation, pNameInfo, len, NULL))) { - pName = (LPSTR)GlobalAlloc(GMEM_ZEROINIT, pNameInfo->Name.Length); - WideCharToMultiByte(CP_ACP, 0, pNameInfo->Name.Buffer, -1, pName, pNameInfo->Name.Length, NULL, NULL); - } - if (NT_SUCCESS(pQueryObject(targetHandle, ObjectTypeInformation, pTypeInfo, len, NULL))) { - pType = (LPSTR)GlobalAlloc(GMEM_ZEROINIT, pTypeInfo->TypeName.Length); - WideCharToMultiByte(CP_ACP, 0, pTypeInfo->TypeName.Buffer, -1, pType, pTypeInfo->TypeName.Length, NULL, NULL); - } - } - if (NULL != handleName) { - - if (NULL == pName || 0 != strcmp(pName, handleName)) { - continue; - } - return handleValue; - } - - } -} - - -std::wstring Utf8ToUnicode(const char* buffer) { - int c_size = MultiByteToWideChar(CP_UTF8, 0, buffer, -1, NULL, 0); - if (c_size > 0) { - wchar_t* temp = new wchar_t[c_size + 1]; - MultiByteToWideChar(CP_UTF8, 0, buffer, -1, temp, c_size); - temp[c_size] = L'\0'; - std::wstring ret(temp); - delete[] temp; - temp = NULL; - return ret; - } - return std::wstring(); -} - -DWORD GetPIDForProcess(wchar_t* process) -{ - HANDLE hSnapshot; - DWORD dPid = 0; - PROCESSENTRY32W pe32; - int working; - hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); - if (!hSnapshot) { - return 0; - } - pe32.dwSize = sizeof(PROCESSENTRY32); - for (working = Process32FirstW(hSnapshot, &pe32); working; working = Process32NextW(hSnapshot, &pe32)) - { - if (!wcscmp(pe32.szExeFile, process)) - { - dPid = pe32.th32ProcessID; - break; - } - } - CloseHandle(hSnapshot); - return dPid; -} - -HMODULE GetDLLHandle(wchar_t* wDllName, DWORD dPid) -{ - HMODULE result; - tagMODULEENTRY32W me32; - void* snapMod; - - if (!dPid) { - return 0; - } - - snapMod = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dPid); - me32.dwSize = sizeof(tagMODULEENTRY32W); - if (Module32FirstW(snapMod, &me32)) - { - while (wcscmp(wDllName, me32.szModule)) - { - if (!Module32NextW(snapMod, &me32)) - goto error; - } - CloseHandle(snapMod); - result = me32.hModule; - } - else - { - error: - CloseHandle(snapMod); - result = 0; - } - return result; -} - -BOOL EnableDebugPrivilege() -{ - HANDLE TokenHandle = NULL; - TOKEN_PRIVILEGES TokenPrivilege; - - LUID uID; - if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &TokenHandle)) { - if (LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &uID)) { - TokenPrivilege.PrivilegeCount = 1; - TokenPrivilege.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; - TokenPrivilege.Privileges[0].Luid = uID; - if (AdjustTokenPrivileges(TokenHandle, FALSE, &TokenPrivilege, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) { - CloseHandle(TokenHandle); - TokenHandle = INVALID_HANDLE_VALUE; - return TRUE; - } - else - goto fail; - - } - else - goto fail; - } - else - goto fail; - -fail: - CloseHandle(TokenHandle); - TokenHandle = INVALID_HANDLE_VALUE; - return FALSE; -} - - -static unsigned char GetProcAddressAsmCode[] = { - 0x55, // push ebp; - 0x8B, 0xEC, // mov ebp, esp; - 0x83, 0xEC, 0x40, // sub esp, 0x40; - 0x57, // push edi; - 0x51, // push ecx; - 0x8B, 0x7D, 0x08, // mov edi, dword ptr[ebp + 0x8]; - 0x8B, 0x07, // mov eax,dword ptr[edi]; - 0x50, // push eax; - 0xE8, 0x00, 0x00, 0x00, 0x00, // call GetModuleHandleW; - 0x83, 0xC4, 0x04, // add esp,0x4; - 0x83, 0xC7, 0x04, // add edi,0x4; - 0x8B, 0x0F, // mov ecx, dword ptr[edi]; - 0x51, // push ecx; - 0x50, // push eax; - 0xE8, 0x00, 0x00, 0x00, 0x00, // call GetProcAddress; - 0x83, 0xC4, 0x08, // add esp, 0x8; - 0x59, // pop ecx; - 0x5F, // pop edi; - 0x8B, 0xE5, // mov esp, ebp; - 0x5D, // pop ebp; - 0xC3 // retn; -}; - -LPVOID FillAsmCode(HANDLE handle) { - DWORD pGetModuleHandleW = (DWORD)GetModuleHandleW; - DWORD pGetProcAddress = (DWORD)GetProcAddress; - PVOID fillCall1 = (PVOID)&GetProcAddressAsmCode[15]; - PVOID fillCall2 = (PVOID)&GetProcAddressAsmCode[30]; - LPVOID pAsmFuncAddr = VirtualAllocEx(handle, NULL, 1, MEM_COMMIT, PAGE_EXECUTE); - if (!pAsmFuncAddr) { - return 0; - } - *(DWORD*)fillCall1 = pGetModuleHandleW - (DWORD)pAsmFuncAddr - 14 - 5; - *(DWORD*)fillCall2 = pGetProcAddress - (DWORD)pAsmFuncAddr - 29 - 5; - //*(DWORD*)fillCall1 = pGetModuleHandleW ; - //*(DWORD*)fillCall2 = pGetProcAddress; - SIZE_T dwWriteSize; - WriteProcessMemory(handle, pAsmFuncAddr, GetProcAddressAsmCode, sizeof(GetProcAddressAsmCode), &dwWriteSize); - return pAsmFuncAddr; - -} - - -int InjectDllAndStartHttp(wchar_t* szPName, wchar_t* szDllPath, DWORD port) -{ - if (!EnableDebugPrivilege()) { - return 0; - } - int result = 0; - HANDLE hRemoteThread = NULL; - LPTHREAD_START_ROUTINE lpSysLibAddr = NULL; - HINSTANCE__* hKernelModule = NULL; - LPVOID lpRemoteDllBase = NULL; - HANDLE hProcess; - unsigned int dwPid; - size_t ulDllLength; - wchar_t* dllName = (wchar_t*)L"wxhelper.dll"; - size_t dllNameLen = wcslen(dllName) * 2 + 2; - char* funcName = (char*)"http_start"; - size_t funcNameLen = strlen(funcName) + 1; - - HANDLE hStartHttp = NULL; - LPVOID portAddr = NULL; - HANDLE getProcThread = NULL; - - LPVOID paramsAddr = NULL; - LPVOID param1Addr = NULL; - LPVOID param2Addr = NULL; - LPVOID GetProcFuncAddr = NULL; - - DWORD params[2] = { 0 }; - - dwPid = GetPIDForProcess(szPName); - ulDllLength = (wcslen(szDllPath) + 1) * sizeof(wchar_t); - hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwPid); - if (!hProcess) { - goto error; - } - - lpRemoteDllBase = VirtualAllocEx(hProcess, NULL, ulDllLength, MEM_COMMIT, PAGE_READWRITE); - if (lpRemoteDllBase) - { - if (WriteProcessMemory(hProcess, lpRemoteDllBase, szDllPath, ulDllLength, NULL) - && (hKernelModule = GetModuleHandleW(L"kernel32.dll")) != 0 - && (lpSysLibAddr = (LPTHREAD_START_ROUTINE)GetProcAddress(hKernelModule, "LoadLibraryW")) != 0 - && (hRemoteThread = CreateRemoteThread(hProcess, NULL, 0, lpSysLibAddr, lpRemoteDllBase, 0, NULL)) != 0) - { - WaitForSingleObject(hRemoteThread, INFINITE); - GetProcFuncAddr = FillAsmCode(hProcess); - param1Addr = VirtualAllocEx(hProcess, NULL, dllNameLen, MEM_COMMIT, PAGE_READWRITE); - if (param1Addr) { - SIZE_T dwWriteSize; - BOOL bRet = WriteProcessMemory(hProcess, (LPVOID)param1Addr, dllName, dllNameLen, &dwWriteSize); - if (!bRet) { - goto error; - } - } - param2Addr = VirtualAllocEx(hProcess, NULL, funcNameLen, MEM_COMMIT, PAGE_READWRITE); - if (param2Addr) { - SIZE_T dwWriteSize; - BOOL bRet = WriteProcessMemory(hProcess, (LPVOID)param2Addr, funcName, funcNameLen, &dwWriteSize); - if (!bRet) { - goto error; - } - } - - params[0] = (DWORD)param1Addr; - params[1] = (DWORD)param2Addr; - - paramsAddr = VirtualAllocEx(hProcess, NULL, sizeof(params), MEM_COMMIT, PAGE_READWRITE); - if (paramsAddr) { - SIZE_T dwWriteSize; - BOOL bRet = WriteProcessMemory(hProcess, (LPVOID)paramsAddr, ¶ms[0], sizeof(params), &dwWriteSize); - if (!bRet) { - goto error; - } - } - - DWORD dwRet = 0; - getProcThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)GetProcFuncAddr, paramsAddr, 0, NULL); - - if (getProcThread) - { - WaitForSingleObject(getProcThread, INFINITE); - GetExitCodeThread(getProcThread, &dwRet); - if (dwRet) { - hStartHttp = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)dwRet, (LPVOID)port, 0, NULL); - WaitForSingleObject(hStartHttp, INFINITE); - result = 1; - } - } - } - } -error: - if (hRemoteThread) { - CloseHandle(hRemoteThread); - } - if (getProcThread) { - CloseHandle(getProcThread); - } - if (hStartHttp) { - CloseHandle(hStartHttp); - } - - if (lpRemoteDllBase) { - VirtualFreeEx(hProcess, lpRemoteDllBase, ulDllLength, MEM_DECOMMIT | MEM_RELEASE); - } - if (param1Addr) { - VirtualFreeEx(hProcess, param1Addr, dllNameLen, MEM_DECOMMIT | MEM_RELEASE); - } - - if (param2Addr) { - VirtualFreeEx(hProcess, param1Addr, funcNameLen, MEM_DECOMMIT | MEM_RELEASE); - } - - if (paramsAddr) { - VirtualFreeEx(hProcess, param1Addr, sizeof(params), MEM_DECOMMIT | MEM_RELEASE); - } - - if (GetProcFuncAddr) { - VirtualFreeEx(hProcess, GetProcFuncAddr, sizeof(GetProcAddressAsmCode), MEM_DECOMMIT | MEM_RELEASE); - } - - CloseHandle(hProcess); - return result; -} - -int InjectDllAndStartHttpByPid(unsigned int pid, wchar_t* szDllPath, DWORD port) -{ - if (!EnableDebugPrivilege()) { - return 0; - } - int result = 0; - HANDLE hRemoteThread = NULL; - LPTHREAD_START_ROUTINE lpSysLibAddr = NULL; - HINSTANCE__* hKernelModule = NULL; - LPVOID lpRemoteDllBase = NULL; - HANDLE hProcess; - size_t ulDllLength; - wchar_t* dllName = (wchar_t*)L"wxhelper.dll"; - size_t dllNameLen = wcslen(dllName) * 2 + 2; - char* funcName = (char*)"http_start"; - size_t funcNameLen = strlen(funcName) + 1; - - HANDLE hStartHttp = NULL; - LPVOID portAddr = NULL; - HANDLE getProcThread = NULL; - - LPVOID paramsAddr = NULL; - LPVOID param1Addr = NULL; - LPVOID param2Addr = NULL; - LPVOID GetProcFuncAddr = NULL; - - DWORD params[2] = { 0 }; - - ulDllLength = (wcslen(szDllPath) + 1) * sizeof(wchar_t); - hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pid); - if (!hProcess) { - goto error; - } - - lpRemoteDllBase = VirtualAllocEx(hProcess, NULL, ulDllLength, MEM_COMMIT, PAGE_READWRITE); - if (lpRemoteDllBase) - { - if (WriteProcessMemory(hProcess, lpRemoteDllBase, szDllPath, ulDllLength, NULL) - && (hKernelModule = GetModuleHandleW(L"kernel32.dll")) != 0 - && (lpSysLibAddr = (LPTHREAD_START_ROUTINE)GetProcAddress(hKernelModule, "LoadLibraryW")) != 0 - && (hRemoteThread = CreateRemoteThread(hProcess, NULL, 0, lpSysLibAddr, lpRemoteDllBase, 0, NULL)) != 0) - { - WaitForSingleObject(hRemoteThread, INFINITE); - GetProcFuncAddr = FillAsmCode(hProcess); - param1Addr = VirtualAllocEx(hProcess, NULL, dllNameLen, MEM_COMMIT, PAGE_READWRITE); - if (param1Addr) { - SIZE_T dwWriteSize; - BOOL bRet = WriteProcessMemory(hProcess, (LPVOID)param1Addr, dllName, dllNameLen, &dwWriteSize); - if (!bRet) { - goto error; - } - } - param2Addr = VirtualAllocEx(hProcess, NULL, funcNameLen, MEM_COMMIT, PAGE_READWRITE); - if (param2Addr) { - SIZE_T dwWriteSize; - BOOL bRet = WriteProcessMemory(hProcess, (LPVOID)param2Addr, funcName, funcNameLen, &dwWriteSize); - if (!bRet) { - goto error; - } - } - - params[0] = (DWORD)param1Addr; - params[1] = (DWORD)param2Addr; - - paramsAddr = VirtualAllocEx(hProcess, NULL, sizeof(params), MEM_COMMIT, PAGE_READWRITE); - if (paramsAddr) { - SIZE_T dwWriteSize; - BOOL bRet = WriteProcessMemory(hProcess, (LPVOID)paramsAddr, ¶ms[0], sizeof(params), &dwWriteSize); - if (!bRet) { - goto error; - } - } - - DWORD dwRet = 0; - getProcThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)GetProcFuncAddr, paramsAddr, 0, NULL); - - if (getProcThread) - { - WaitForSingleObject(getProcThread, INFINITE); - GetExitCodeThread(getProcThread, &dwRet); - if (dwRet) { - hStartHttp = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)dwRet, (LPVOID)port, 0, NULL); - WaitForSingleObject(hStartHttp, INFINITE); - result = 1; - } - } - } - } -error: - if (hRemoteThread) { - CloseHandle(hRemoteThread); - } - if (getProcThread) { - CloseHandle(getProcThread); - } - if (hStartHttp) { - CloseHandle(hStartHttp); - } - - if (lpRemoteDllBase) { - VirtualFreeEx(hProcess, lpRemoteDllBase, ulDllLength, MEM_DECOMMIT | MEM_RELEASE); - } - if (param1Addr) { - VirtualFreeEx(hProcess, param1Addr, dllNameLen, MEM_DECOMMIT | MEM_RELEASE); - } - - if (param2Addr) { - VirtualFreeEx(hProcess, param1Addr, funcNameLen, MEM_DECOMMIT | MEM_RELEASE); - } - - if (paramsAddr) { - VirtualFreeEx(hProcess, param1Addr, sizeof(params), MEM_DECOMMIT | MEM_RELEASE); - } - - if (GetProcFuncAddr) { - VirtualFreeEx(hProcess, GetProcFuncAddr, sizeof(GetProcAddressAsmCode), MEM_DECOMMIT | MEM_RELEASE); - } - - CloseHandle(hProcess); - return result; -} - -int InjectDll(wchar_t* szPName, wchar_t* szDllPath) -{ - if (!EnableDebugPrivilege()) { - return 0; - } - int result = 0; - HANDLE hRemoteThread; - LPTHREAD_START_ROUTINE lpSysLibAddr; - HINSTANCE__* hKernelModule; - LPVOID lpRemoteDllBase; - HANDLE hProcess; - unsigned int dwPid; - size_t ulDllLength; - - dwPid = GetPIDForProcess(szPName); - ulDllLength = (wcslen(szDllPath) + 1) * sizeof(wchar_t); - hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwPid); - if (!hProcess) { - return 0; - } - - lpRemoteDllBase = VirtualAllocEx(hProcess, NULL, ulDllLength, MEM_COMMIT, PAGE_READWRITE); - if (lpRemoteDllBase) - { - if (WriteProcessMemory(hProcess, lpRemoteDllBase, szDllPath, ulDllLength, NULL) - && (hKernelModule = GetModuleHandleW(L"kernel32.dll")) != 0 - && (lpSysLibAddr = (LPTHREAD_START_ROUTINE)GetProcAddress(hKernelModule, "LoadLibraryW")) != 0 - && (hRemoteThread = CreateRemoteThread(hProcess, NULL, 0, lpSysLibAddr, lpRemoteDllBase, 0, NULL)) != 0) - { - WaitForSingleObject(hRemoteThread, INFINITE); - VirtualFreeEx(hProcess, lpRemoteDllBase, ulDllLength, MEM_DECOMMIT | MEM_RELEASE); - CloseHandle(hRemoteThread); - CloseHandle(hProcess); - OutputDebugStringA("[DBG] dll inject success"); - printf("dll inject success"); - printf("dll path : %s ", szDllPath); - printf("dll path : %d ", dwPid); - result = 1; - } - else - { - DWORD dErrorCode = GetLastError(); - printf("dll inject fail"); - printf("error code : %d ", dErrorCode); - VirtualFreeEx(hProcess, lpRemoteDllBase, ulDllLength, MEM_DECOMMIT | MEM_RELEASE); - CloseHandle(hProcess); - result = 0; - } - } - else - { - DWORD dErrorCode = GetLastError(); - printf("dll inject fail.VirtualAllocEx method fail."); - printf("error code : %d ", dErrorCode); - CloseHandle(hProcess); - result = 0; - } - return result; -} - -int InjectDllByPid(unsigned int pid, wchar_t* szDllPath) -{ - if (!EnableDebugPrivilege()) { - return 0; - } - int result = 0; - HANDLE hRemoteThread; - LPTHREAD_START_ROUTINE lpSysLibAddr; - HINSTANCE__* hKernelModule; - LPVOID lpRemoteDllBase; - HANDLE hProcess; - size_t ulDllLength; - - ulDllLength = (wcslen(szDllPath) + 1) * sizeof(wchar_t); - hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pid); - if (!hProcess) { - return 0; - } - - lpRemoteDllBase = VirtualAllocEx(hProcess, NULL, ulDllLength, MEM_COMMIT, PAGE_READWRITE); - if (lpRemoteDllBase) - { - if (WriteProcessMemory(hProcess, lpRemoteDllBase, szDllPath, ulDllLength, NULL) - && (hKernelModule = GetModuleHandleW(L"kernel32.dll")) != 0 - && (lpSysLibAddr = (LPTHREAD_START_ROUTINE)GetProcAddress(hKernelModule, "LoadLibraryW")) != 0 - && (hRemoteThread = CreateRemoteThread(hProcess, NULL, 0, lpSysLibAddr, lpRemoteDllBase, 0, NULL)) != 0) - { - WaitForSingleObject(hRemoteThread, INFINITE); - VirtualFreeEx(hProcess, lpRemoteDllBase, ulDllLength, MEM_DECOMMIT | MEM_RELEASE); - CloseHandle(hRemoteThread); - CloseHandle(hProcess); - OutputDebugStringA("[DBG] dll inject success"); - printf("dll inject success"); - printf("dll path : %s ", szDllPath); - printf("dll path : %d ", pid); - result = 1; - } - else - { - DWORD dErrorCode = GetLastError(); - printf("dll inject fail"); - printf("error code : %d ", dErrorCode); - VirtualFreeEx(hProcess, lpRemoteDllBase, ulDllLength, MEM_DECOMMIT | MEM_RELEASE); - CloseHandle(hProcess); - result = 0; - } - } - else - { - DWORD dErrorCode = GetLastError(); - printf("dll inject fail.VirtualAllocEx method fail."); - printf("error code : %d ", dErrorCode); - CloseHandle(hProcess); - result = 0; - } - return result; -} - -int UnInjectDll(wchar_t* szPName, wchar_t* szDName) -{ - HMODULE hDll; - HANDLE lpFreeLibAddr; - HINSTANCE__* hK32; - HANDLE hProcess; - unsigned int dwPID; - - dwPID = GetPIDForProcess(szPName); - hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwPID); - if (!hProcess) { - return 0; - } - - hK32 = GetModuleHandleW(L"Kernel32.dll"); - if (!hK32) { - return 0; - } - - lpFreeLibAddr = GetProcAddress(hK32, "FreeLibraryAndExitThread"); - //lpFreeLibAddr = (LPTHREAD_START_ROUTINE)GetProcAddress(hK32, "FreeLibrary"); - hDll = GetDLLHandle(szDName, dwPID); - if (hDll) { - HANDLE hThread = CreateRemoteThread(hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)lpFreeLibAddr, hDll, NULL, NULL); - if (hThread == NULL) { - int errorCode = GetLastError(); - return 0; - } - WaitForSingleObject(hThread, INFINITE); - CloseHandle(hThread); - CloseHandle(hProcess); - return 1; - } - - CloseHandle(hProcess); - return 0; -} - -FARPROC ShellCode(DWORD param[]) { - return GetProcAddress(GetModuleHandleW((LPCWSTR)param[0]), (LPCSTR)param[1]); -} - - -int main(int argc, char** argv) -{ - int param; - char cInjectprogram[MAX_PATH] = { 0 }; - char cUnInjectprogram[MAX_PATH] = { 0 }; - char cDllPath[MAX_PATH] = { 0 }; - char cDllName[MAX_PATH] = { 0 }; - int port = 0; - - ULONG pid = 0; - unsigned int injectPid = 0; - - while ((param = getopt(argc, argv, "i:p:u:d:m:P:I:h")) != -1) - { - switch (param) - { - case 'i': - strcpy(cInjectprogram, optarg); - break; - case 'p': - strcpy(cDllPath, optarg); - break; - case 'u': - strcpy(cUnInjectprogram, optarg); - case 'd': - strcpy(cDllName, optarg); - break; - case 'h': - printf("Usage: %s [-i/u] [-p/d] [-m]\n", argv[0]); - printf("Options:\n"); - printf(" -h Print this help message.\n"); - printf(" -i Name of the running program to be injected.\n"); - printf(" -u Name of the running program to be uninstalled.\n"); - printf(" -p Full path of injection file.\n"); - printf(" -d Name of injection file.\n"); - printf(" -m WeChat.exe pid.\n"); - printf("\n"); - printf("Examples:\n"); - printf(" window> %s -i test.exe -p c:/inject.dll \n", argv[0]); - printf(" window> %s -u test.exe -d inject.dll \n", argv[0]); - printf(" window> %s -m 1988 \n", argv[0]); - exit(0); - break; - case 'm': - pid = std::stol(optarg); - break; - case 'P': - port = std::atoi(optarg); - break; - case 'I': - injectPid = std::atoi(optarg); - break; - default: - abort(); - break; - } - } - - if (pid) { - FindHandles(pid, (LPSTR)"_WeChat_App_Instance_Identity_Mutex_Name", TRUE, TRUE); - } - if (injectPid != 0 && cDllPath[0] != 0) - { - if (cDllPath[0] != '\0') - { - if (port == 0) { - std::wstring wsPath = Utf8ToUnicode(cDllPath); - int ret = InjectDllByPid(injectPid, (wchar_t*)wsPath.c_str()); - printf(" 注入结果:%i \n", ret); - } - else - { - std::wstring wsPath = Utf8ToUnicode(cDllPath); - int ret = InjectDllAndStartHttpByPid(injectPid, (wchar_t*)wsPath.c_str(), port); - printf(" 注入结果:%i \n", ret); - } - } - } - - - if (cInjectprogram[0] != 0 && cDllPath[0] != 0) - { - if (cInjectprogram[0] != '\0' && cDllPath[0] != '\0') - { - if (port == 0) { - std::wstring wsProgram = Utf8ToUnicode(cInjectprogram); - std::wstring wsPath = Utf8ToUnicode(cDllPath); - int ret = InjectDll((wchar_t*)wsProgram.c_str(), (wchar_t*)wsPath.c_str()); - printf(" 注入结果:%i \n", ret); - } - else - { - std::wstring wsProgram = Utf8ToUnicode(cInjectprogram); - std::wstring wsPath = Utf8ToUnicode(cDllPath); - int ret = InjectDllAndStartHttp((wchar_t*)wsProgram.c_str(), (wchar_t*)wsPath.c_str(), port); - printf(" 注入结果:%i \n", ret); - } - } - } - - if (cUnInjectprogram[0] != 0 && cDllName[0] != 0) - { - if (cUnInjectprogram[0] != '\0' && cDllName[0] != '\0') - { - std::wstring wsUnInjectProgram = Utf8ToUnicode(cUnInjectprogram); - std::wstring wsName = Utf8ToUnicode(cDllName); - int ret = UnInjectDll((wchar_t*)wsUnInjectProgram.c_str(), (wchar_t*)wsName.c_str()); - printf(" 卸载结果:%i \n", ret); - } - - } - - return 0; -} diff --git a/tool/injector/ConsoleApplication.exe b/tool/injector/ConsoleApplication.exe deleted file mode 100644 index 617f596d13ce04bf1fa45526d9006cadd82e8bc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129024 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%0DMA0kS8J5s=0R@Zc@|ic2if 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

Uj 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 J_H$X_e*w13Cl3Gs diff --git a/weChatHook-java/.idea/.gitignore b/weChatHook-java/.idea/.gitignore deleted file mode 100644 index 13566b8..0000000 --- a/weChatHook-java/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/weChatHook-java/.idea/compiler.xml b/weChatHook-java/.idea/compiler.xml deleted file mode 100644 index 0264bce..0000000 --- a/weChatHook-java/.idea/compiler.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/weChatHook-java/.idea/inspectionProfiles/Project_Default.xml b/weChatHook-java/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 6560a98..0000000 --- a/weChatHook-java/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - \ No newline at end of file diff --git a/weChatHook-java/.idea/jarRepositories.xml b/weChatHook-java/.idea/jarRepositories.xml deleted file mode 100644 index 712ab9d..0000000 --- a/weChatHook-java/.idea/jarRepositories.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/weChatHook-java/.idea/misc.xml b/weChatHook-java/.idea/misc.xml deleted file mode 100644 index 132404b..0000000 --- a/weChatHook-java/.idea/misc.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/weChatHook-java/README.md b/weChatHook-java/README.md deleted file mode 100644 index be80b0f..0000000 --- a/weChatHook-java/README.md +++ /dev/null @@ -1,29 +0,0 @@ -#maven打包 -```aidl -进入weChatHook-java项目根目录执行如下,命令进行打包 - -mvn package - -打包完成后在target目录下找到 -weChatHook-java-1.0-jar-with-dependencies.jar -文件就可以直接启动了 -``` -#启动命令 -####命令参数说明 -###port:监听的端口 默认端口19077 -###hookApi:消息转发的接口 为空不转发 -```aidl -java -jar .\weChatHook-java-1.0-jar-with-dependencies.jar --port=9999 --hookApi=http://localhost:29099/api/demo/msg -``` -#java接收hook消息示例 -```aidl -@RequestMapping("/api/demo") -public class DemoController { - @PostMapping("/msg") - public void getMsg(String msg){ - JSONObject jsonObject = JSON.parseObject(msg); - jsonObject.forEach((k,v)->{ - System.out.println(k+":"+v); - }); -} -``` \ No newline at end of file diff --git a/weChatHook-java/pom.xml b/weChatHook-java/pom.xml deleted file mode 100644 index 5fa9c97..0000000 --- a/weChatHook-java/pom.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - 4.0.0 - - org.example - weChatHook-java - 1.0 - - - 8 - 8 - - - - - org.jsoup - jsoup - 1.14.3 - - - - com.alibaba - fastjson - 1.2.83 - - - - org.projectlombok - lombok - 1.18.24 - - - - - io.netty - netty-all - 4.1.51.Final - - - junit - junit - 4.13.2 - test - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - - - true - com.example.service.WeChatHookNettyServer - - - - jar-with-dependencies - - - - - make-assembly - package - - single - - - - - - - - \ No newline at end of file diff --git a/weChatHook-java/src/main/java/com/example/client/WeChatHookClient.java b/weChatHook-java/src/main/java/com/example/client/WeChatHookClient.java deleted file mode 100644 index df214cb..0000000 --- a/weChatHook-java/src/main/java/com/example/client/WeChatHookClient.java +++ /dev/null @@ -1,619 +0,0 @@ -package com.example.client; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import lombok.SneakyThrows; -import org.jsoup.Connection; -import org.jsoup.Jsoup; - -import java.util.HashMap; -import java.util.Map; - -/** - * @PACKAGE_NAME: com.example.client - * @NAME: WeChatHookClient - * @AUTHOR: wxs - * @DATE: 2023/5/31 15:08 - * @PROJECT_NAME: WeChatHook-java - **/ -public class WeChatHookClient { - - private static final String apiPath = "http://127.0.0.1:19088/api/"; - - public static void main(String[] args) { - System.out.println(check_login()); - } - - /** - * 检查是否登录 - * - * @return - */ - public static JSONObject check_login() { - String url = apiPath + "?type=0"; - JSONObject response = post(url, null); - return response; - } - - /** - * 登录用户信息 - * - * @return - */ - public static JSONObject user_info() { - String url = apiPath + "?type=8"; - JSONObject response = post(url, null); - System.out.println(response); - return response; - } - - /** - * 发送文本 - * - * @param wxid - * @param msg - * @return - */ - public static JSONObject send_text(String wxid, String msg) { - String url = apiPath + "?type=2"; - Map map = new HashMap<>(); - map.put("wxid", wxid); - map.put("msg", msg); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 发送@消息 - * - * @param chatRoomId - * @param wxids notify@all - * @param msg - * @return - */ - public static JSONObject send_at(String chatRoomId, String wxids, String msg) { - String url = apiPath + "?type=3"; - Map map = new HashMap<>(); - map.put("chatRoomId", chatRoomId); - map.put("wxids", wxids); - map.put("msg", msg); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 发送图片 - * - * @param wxid - * @param imagePath C:/Users/ww/Downloads/素材图片 (4).jpg - * @return - */ - public static JSONObject send_img(String wxid, String imagePath) { - String url = apiPath + "?type=5"; - Map map = new HashMap<>(); - map.put("wxid", wxid); - map.put("imagePath", imagePath); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 发送文件 - * - * @param wxid - * @param filePath C:/test.txt - * @return - */ - public static JSONObject send_file(String wxid, String filePath) { - String url = apiPath + "?type=6"; - Map map = new HashMap<>(); - map.put("wxid", wxid); - map.put("filePath", filePath); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * hook 消息 - * - * @param ip - * @param port - * @return - */ - public static JSONObject hook_msg(String ip, String port) { - String url = apiPath + "?type=9"; - Map map = new HashMap<>(); - map.put("ip", ip); - map.put("port", port); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 取消消息hook - * - * @return - */ - public static JSONObject unhook_msg() { - String url = apiPath + "?type=10"; - JSONObject response = post(url, null); - System.out.println(response); - return response; - } - - /** - * hook 图片 - * - * @return - */ - public static JSONObject hook_img(String imgDir) { - String url = apiPath + "?type=11"; - Map map = new HashMap<>(); - map.put("imgDir", imgDir); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 取消hook 图片 - * - * @param imgDir C:\img - * @return - */ - public static JSONObject unhook_img(String imgDir) { - String url = apiPath + "?type=12"; - Map map = new HashMap<>(); - map.put("imgDir", imgDir); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * hook 语音 - * - * @return - */ - public static JSONObject hook_voice(Long msgId) { - String url = apiPath + "?type=56"; - Map map = new HashMap<>(); - map.put("msgId", msgId); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 取消hook 语音 - * - * @return - */ - public static JSONObject unhook_voice() { - String url = apiPath + "?type=14"; - JSONObject response = post(url, null); - System.out.println(response); - return response; - } - - /** - * 删除好友 - * - * @param wxid - * @return - */ - public static JSONObject del_friend(String wxid) { - String url = apiPath + "?type=17"; - Map map = new HashMap<>(); - map.put("wxid", wxid); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 网络搜素用户 - * - * @return - */ - public static JSONObject search_friend(String keyword) { - String url = apiPath + "?type=19"; - Map map = new HashMap<>(); - map.put("keyword", keyword); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 添加好友 - * - * @param wxid - * @return - */ - public static JSONObject add_friend(String wxid) { - String url = apiPath + "?type=20"; - Map map = new HashMap<>(); - map.put("wxid", wxid); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 群成员 - * - * @param chatRoomId - * @return - */ - public static JSONObject fetch_chat_room_members(String chatRoomId) { - String url = apiPath + "?type=25"; - Map map = new HashMap<>(); - map.put("chatRoomId", chatRoomId); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 群成员昵称 - * - * @param chatRoomId - * @param memberId - * @return - */ - public static JSONObject get_member_nickname(String chatRoomId, String memberId) { - String url = apiPath + "?type=26"; - Map map = new HashMap<>(); - map.put("chatRoomId", chatRoomId); - map.put("memberId", memberId); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 删除群成员 - * - * @param chatRoomId - * @param memberIds - * @return - */ - public static JSONObject del_member(String chatRoomId, String memberIds) { - String url = apiPath + "?type=27"; - Map map = new HashMap<>(); - map.put("chatRoomId", chatRoomId); - map.put("memberIds", memberIds); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 增加群成员 - * - * @param chatRoomId - * @param memberIds - * @return - */ - public static JSONObject add_member(String chatRoomId, String memberIds) { - String url = apiPath + "?type=28"; - Map map = new HashMap<>(); - map.put("chatRoomId", chatRoomId); - map.put("memberIds", memberIds); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 修改群昵称 - * - * @param chatRoomId - * @param wxid - * @param nickName - * @return - */ - public static JSONObject modify_room_name(String chatRoomId, String wxid, String nickName) { - String url = apiPath + "?type=31"; - Map map = new HashMap<>(); - map.put("chatRoomId", chatRoomId); - map.put("wxid", wxid); - map.put("nickName", nickName); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 获取sqlite3的操作句柄 - * - * @return - */ - public static JSONObject get_db_handlers() { - String url = apiPath + "?type=32"; - JSONObject response = post(url, null); - System.out.println(response); - return response; - } - - /** - * 查询数据库 - * - * @param dbHandle - * @param sql - * @return - */ - public static JSONObject query_db_by_sql(String dbHandle, String sql) { - String url = apiPath + "?type=34"; - Map map = new HashMap<>(); - map.put("dbHandle", dbHandle); - map.put("sql", sql); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * hook 日志 - * - * @return - */ - public static JSONObject hook_log() { - String url = apiPath + "?type=36"; - JSONObject response = post(url, null); - System.out.println(response); - return response; - } - - /** - * 取消hook日志 - * - * @return - */ - public static JSONObject unhook_log() { - String url = apiPath + "?type=37"; - JSONObject response = post(url, null); - System.out.println(response); - return response; - } - - /** - * 转发消息 - * - * @param wxid - * @param msgid - * @return - */ - public static JSONObject forward(String wxid, String msgid) { - String url = apiPath + "?type=40"; - Map map = new HashMap<>(); - map.put("wxid", wxid); - map.put("msgid", msgid); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 退出登录 - * - * @return - */ - public static JSONObject logout() { - String url = apiPath + "?type=44"; - JSONObject response = post(url, null); - System.out.println(response); - return response; - } - - /** - * 确认收款 - * - * @param wxid - * @param transcationId - * @param transferId - * @return - */ - public static JSONObject confirm_receipt(String wxid, String transcationId, String transferId) { - String url = apiPath + "?type=45"; - Map map = new HashMap<>(); - map.put("wxid", wxid); - map.put("transcationId", transcationId); - map.put("transferId", transferId); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 好友列表 - * - * @return - */ - public static JSONObject contact_list() { - String url = apiPath + "?type=46"; - JSONObject response = post(url, null); - System.out.println(response); - return response; - } - - /** - * 群详情 - * - * @param chatRoomId - * @return - */ - public static JSONObject room_detail(String chatRoomId) { - String url = apiPath + "?type=47"; - Map map = new HashMap<>(); - map.put("chatRoomId", chatRoomId); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * ocr提取文字 - * - * @param imagePath - * @return - */ - public static JSONObject ocr(String imagePath) { - String url = apiPath + "?type=49"; - Map map = new HashMap<>(); - map.put("imagePath", imagePath); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 拍一拍 - * - * @param chatRoomId - * @param wxid - * @return - */ - public static JSONObject pat(String chatRoomId, String wxid) { - String url = apiPath + "?type=50"; - Map map = new HashMap<>(); - map.put("chatRoomId", chatRoomId); - map.put("wxid", wxid); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 消息置顶 - * - * @param chatRoomId - * @param msgid - * @return - */ - public static JSONObject top_msg(String chatRoomId, Long msgid) { - String url = apiPath + "?type=51"; - Map map = new HashMap<>(); - map.put("chatRoomId", chatRoomId); - map.put("msgid", msgid); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 取消置顶 - * - * @param chatRoomId - * @param msgid - * @return - */ - public static JSONObject close_top_msg(String chatRoomId, Long msgid) { - String url = apiPath + "?type=52"; - Map map = new HashMap<>(); - map.put("chatRoomId", chatRoomId); - map.put("msgid", msgid); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 朋友圈首页 - * - * @return - */ - public static JSONObject sns_first() { - String url = apiPath + "?type=53"; - JSONObject response = post(url, null); - System.out.println(response); - return response; - } - - /** - * 朋友圈下一页 - * - * @param snsId - * @return - */ - public static JSONObject sns_next(String snsId) { - String url = apiPath + "?type=54"; - Map map = new HashMap<>(); - map.put("snsId", snsId); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 查询联系人或群名称 - * - * @param wxid 微信id - * @return - */ - public static JSONObject query_nickname(String wxid) { - String url = apiPath + "?type=55"; - Map map = new HashMap<>(); - map.put("id", wxid); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 下载消息附件 - * - * @param msgId - * @return - */ - public static JSONObject download_msg_attach(Long msgId) { - String url = apiPath + "?type=56"; - Map map = new HashMap<>(); - map.put("msgId", msgId); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - /** - * 获取群/群成员信息 - * - * @param wxid - * @return - */ - public static JSONObject get_member_info(String wxid) { - String url = apiPath + "?type=57"; - Map map = new HashMap<>(); - map.put("wxid", wxid); - JSONObject response = post(url, JSON.toJSONString(map)); - System.out.println(response); - return response; - } - - @SneakyThrows - public static JSONObject post(String url, String json) { - String body = Jsoup.connect(url) - .method(Connection.Method.POST) - .header("Content-Type", "application/json") - .requestBody(json) - .execute().body(); - return JSON.parseObject(body); - } - - @SneakyThrows - public static JSONObject hook(String url, String json) { - String body = Jsoup.connect(url) - .data("msg",json) - .method(Connection.Method.POST) - .timeout(1000) - .execute().body(); - return JSON.parseObject(body); - } - -} diff --git a/weChatHook-java/src/main/java/com/example/service/WeChatHookNettyServer.java b/weChatHook-java/src/main/java/com/example/service/WeChatHookNettyServer.java deleted file mode 100644 index 600ed01..0000000 --- a/weChatHook-java/src/main/java/com/example/service/WeChatHookNettyServer.java +++ /dev/null @@ -1,272 +0,0 @@ -package com.example.service; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.example.client.WeChatHookClient; -import io.netty.bootstrap.ServerBootstrap; -import io.netty.channel.Channel; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInitializer; -import io.netty.channel.ChannelOption; -import io.netty.channel.SimpleChannelInboundHandler; -import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.SocketChannel; -import io.netty.channel.socket.nio.NioServerSocketChannel; -import io.netty.handler.codec.DelimiterBasedFrameDecoder; -import io.netty.handler.codec.Delimiters; -import io.netty.handler.codec.string.StringDecoder; -import io.netty.handler.codec.string.StringEncoder; -import io.netty.util.CharsetUtil; -import io.netty.util.internal.StringUtil; - -import java.io.*; -import java.net.InetSocketAddress; -import java.util.*; - -/** - * @PACKAGE_NAME: com.example.service - * @NAME: WeChatHookNettyServer - * @AUTHOR: wxs - * @DATE: 2023/5/31 15:07 - * @PROJECT_NAME: WeChatHook-java - **/ -public class WeChatHookNettyServer { - - /** - * 直接启动main方法 - * - * @param args - */ - public static void main(String[] args) { - - Integer serverPort = 19077; - - String hookApi = null; - - for (String arg : args) { - System.out.println(arg); - if (arg.startsWith("--port")) { - serverPort = Integer.valueOf(arg.split("=")[1]); - } - if (arg.startsWith("--hookApi")) { - hookApi = arg.split("=")[1]; - } - } - - //1、注入 - inject(); - - //2、开启hook - try { - JSONObject result = WeChatHookClient.hook_msg("127.0.0.1", serverPort.toString()); - } catch (Exception e) { - System.out.println("hook 失败,请检查微信是否登录"); - return; - } - //3、启动服务 - start(serverPort, hookApi); - } - - /** - * 执行注入命令 - */ - public static void inject() { - // - File consoleInjectTemp = null; - File wxhelperTemp = null; - try { - consoleInjectTemp = createTempFile("ConsoleInject", ".exe"); - wxhelperTemp = createTempFile("wxhelper", ".dll"); - - String ConsoleInject = consoleInjectTemp.getAbsolutePath(); - - String wxhelper = wxhelperTemp.getAbsolutePath(); - - //ConsoleInject.exe -i WeChat.exe -p C:\Users\DELL\Desktop\injector\wxhelper.dll - String command = ConsoleInject + " -i WeChat.exe -p " + wxhelper; - - //重试3次 - int retryCount = 3; - do { - retryCount--; - try { - //检查登录状态 - JSONObject jsonObject = WeChatHookClient.check_login(); - //如果已登录不需要注入 - if (jsonObject.getInteger("code").equals(1)) { - return; - } - } catch (Exception e) { - System.out.println(e.getMessage() + "请确认微信已登录"); - } - //执行注入命令 - excuteShell(command); - - } while (retryCount >= 0); - - } catch (Exception e) { - e.printStackTrace(); - return; - } finally { - ////如果不为空删除临时文件 - if (Objects.nonNull(consoleInjectTemp)) { - consoleInjectTemp.delete(); - } - //如果不为空删除临时文件 - if (Objects.nonNull(wxhelperTemp)) { - wxhelperTemp.delete(); - } - } - - } - - /** - * 创建临时文件 - * - * @param fileName - * @param suffix - * @return - */ - private static File createTempFile(String fileName, String suffix) { - InputStream inputStream = WeChatHookNettyServer.class.getResourceAsStream("/" + fileName + suffix); - - FileOutputStream outputStream = null; - try { - File tempFile = File.createTempFile(fileName, suffix); - outputStream = new FileOutputStream(tempFile); - byte[] buffer = new byte[4096]; - int bytesRead; - while ((bytesRead = inputStream.read(buffer)) != -1) { - outputStream.write(buffer, 0, bytesRead); - } - return tempFile; - } catch (IOException e) { - e.printStackTrace(); - } finally { - if (Objects.nonNull(outputStream)) { - try { - outputStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - } - return null; - } - - /** - * 启动服务 - * - * @param port - */ - public static void start(Integer port, String hookApi) { - NioEventLoopGroup bossGroup = new NioEventLoopGroup(); - NioEventLoopGroup workerGroup = new NioEventLoopGroup(); - try { - ServerBootstrap serverBootstrap = new ServerBootstrap(); - serverBootstrap.group(bossGroup, workerGroup) - .channel(NioServerSocketChannel.class) - .localAddress(new InetSocketAddress(port)) - .childHandler(new ChannelInitializer() { - @Override - protected void initChannel(SocketChannel ch) { - ch.pipeline().addLast(new DelimiterBasedFrameDecoder(1024 * 100, Delimiters.lineDelimiter())); - ch.pipeline().addLast(new StringDecoder(CharsetUtil.UTF_8)); - ch.pipeline().addLast(new StringEncoder(CharsetUtil.UTF_8)); - ch.pipeline().addLast(new ReceiveMsgHandler(hookApi)); - } - }) - .option(ChannelOption.SO_BACKLOG, 128) - .childOption(ChannelOption.SO_KEEPALIVE, true); - - Channel channel = serverBootstrap.bind().sync().channel(); - System.out.println("服务启动成功 端口号 " + port); - channel.closeFuture().sync(); - } catch (InterruptedException e) { - e.printStackTrace(); - } finally { - bossGroup.shutdownGracefully(); - workerGroup.shutdownGracefully(); - } - } - - private static class ReceiveMsgHandler extends SimpleChannelInboundHandler { - - private String hookApi; - - public ReceiveMsgHandler(String hookApi) { - this.hookApi = hookApi; - } - - @Override - protected void channelRead0(ChannelHandlerContext ctx, String msg) { - JSONObject jsonObject = JSON.parseObject(msg); - - jsonObject.forEach((k, v) -> { - System.out.println(k + " = " + v); - }); - - String fromGroup = jsonObject.getString("fromGroup"); - String fromUser = jsonObject.getString("fromUser"); - String from; - if (fromGroup.equals(fromUser)) { - JSONObject fromGroupJson = WeChatHookClient.query_nickname(jsonObject.getString("fromGroup")); - String groupNname = fromGroupJson.getString("name"); - from = "消息来自:" + groupNname; - jsonObject.put("fromUserName", groupNname); - } else { - JSONObject fromGroupJson = WeChatHookClient.query_nickname(jsonObject.getString("fromGroup")); - String groupNname = fromGroupJson.getString("name"); - - JSONObject fromUserJson = WeChatHookClient.query_nickname(jsonObject.getString("fromUser")); - String fromUserName = fromUserJson.getString("name"); - jsonObject.put("fromUserName", fromUserName); - - from = "消息来自:" + groupNname + "->" + fromUserName; - } - System.out.println("----------" + from + "----------"); - //消息转发 - if (StringUtil.isNullOrEmpty(hookApi)) { - return; - } - //检查api接口是否是通的 - //转发消息 - try { - WeChatHookClient.hook(hookApi, msg); - } catch (Exception e) { - //请检查hookApi服务是否正常 - System.err.println("--》消息转发失败,请检查hookApi服务是否正常"); - } - - } - - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { - cause.printStackTrace(); - ctx.close(); - } - - } - - /** - * 执行shell 命令 - * - * @param command - */ - public static void excuteShell(String command) { - try { - Process process = Runtime.getRuntime().exec(command); - - BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); - String line; - while ((line = reader.readLine()) != null) { - System.out.println(line); - } - int exitCode = process.waitFor(); - System.out.println("Exit Code: " + exitCode); - } catch (IOException | InterruptedException e) { - e.printStackTrace(); - } - } -} diff --git a/weChatHook-java/src/main/resources/ConsoleInject.exe b/weChatHook-java/src/main/resources/ConsoleInject.exe deleted file mode 100644 index ed0fe3fe623074082106f5ff61ccb4e188ba4e23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 zcmeHu4|tT-mG_-wCXA3UK@%GlWYD3+LU8^iB$*5hBojah1VR!}U<}DS%*13S&b%)K zODJ?QD{o&$`L??2KI?v#V*BW}?uT6~(b760Y7#}k)+!2X`Kql$ldh?FbIv{YoOADe=S|IR2UsR!OpBCEGS-8V9v9F5Or~LM`s`<> zvnQ{3c}|aJ)ys3%`}|>JM<}>0)YNWlZVCi~qH(KW3`qf_KVYm{Q)g@swg?Mza;BP6 zqz7hR`|bT*VmzIqy7%JWL_0f6>b;kjclAEZ%Z}bXyxh?nqf)E(KX|p&E2F)?ONu{_ zG9#;tkITpsIbKGV5-0qOtnIwL&fn}KUg??Dx*1!g(XlIzu4+!h&aw>6G|lum%m@f2 zJYfvwv{EN?ApZXB%Tg! z(wxlKT3jshT*2mX=*NM-ci4_aI>>5W%=WzO9;<8c6#@{8zV@HVr1EAft4(}$7Q@Kw z{^)UlNW@mwngN1l7gI)}f0S~!+^*D&*QVI?W>*2ZFBUrwRIf6_>&TU^_eOs%=6jX38D2+ihGdBJY9nzifYRHx_>k_p zcw|5W8o4TcP<fbHciw<&l=Y9a>oNmhV3jm8GlZNhx zpfKfaRX?%iy^+xp!#x)GrQxYP75OffG(}A)NT8uy?&HiInxGnUJTI zae1*;_{U{CM3N>7NhU6fGJ23igGj0<%Ik-?WN%NFDJsH>lqyrUGONH022O??3$aew zWXg-47ORwj#1mM7S};l`XS3uRWEWyltJX)+$)`mqYh_rNnKXJdnlwb;ff*g7b!teS zROzK?SD6Z;aYOgtVMt_`DVG_#6;#2X77Ub;hD$7D$U~TI==MDb)hF|fTr5NPMglzv zP;K%T%Bkod4c!%hG_>l|M%!OyGLjx*D9Jc0QUj+GD`z2EDf_H4<;GT-T!z`*+%>&Q zuGcZc5Pcafvej$6N-b=4ZH6KG3_vhem@L`r>$dp0#{q$~H2JzlFmZ7vVwS%7ob_E%pyf5f6M(9 zZAbgu_bx(Ve8DCSn5g%2GVs!_RhH5S9Lo^Bhz{`J-Xxl`Q&n5s1ApJoy~K7r@%K4U z89XbESY@hEfQ)&Zpc&NGjhhF&wRfl|^08miuk$4!=}=MR;|^+=t!Nk{7bQvG;OnHu zRgsG=)QD3fYn@MTbMdG%im64O)7B<(KgRU-n>Jt>5uAFUWd^|@kuD`sGJhDj2Y#IA zV%b-^*q>&&7(qrc@f` zt`XTiD%YQvr7_0`hI=1?aE93~<~V7%_is>F-d0|mKQR9-xn|h$=I*lS;O>R7yn8bH zV)lEK3(C~kI<1lw+pd+DjmfLWBJXRYA*BY9eN?GGuSjD`*U0=ofbvjD^z`ncnEmf# z+Iy6biN2B>b7__7G<3z7+>jbNZd_&`&ImGNTae_8yVFY_P;{DlGR_GjrmY8xG}Ojmx+Z+yH-8vM&zz1+9?G3JUVE&KQ31n^jGH+H^ULYVq5aOkqhNY zO}1P!YH;_>oAQ8 zfT>E?8Ku`zKO$YJFh{?bA!kJflH}TOX2m_GXb(U)MTY2gdeY&F3@`NBJspim*C-RG zMlKXR4cB9$?rB<&%wDKisTq|s4`#!$m5-JBJlTDQ#yo<}i^R%Ow0nsVMvA8B&k@+s z;f-`^nUudaDHSC1JGgJ_DfR?u&{ej$>^>VAOxlui&AW1a0(RiVs?Amg)cA}wb&Ass zN0w#4G5|z?83r18$|<>PSjigY9eKMexV_Eg0^tb8oH-yQl|q$`g}*DA}k zj!G@mxLoh3)Js#n%JOWlqcU5Z((mR6Wg1YI8|lk+$?joD6qU&N>JzrXNY_~=hNFX0 zu&n01cq7+R(!Muo@pVoPcXR%jOh%r|RT}b?7h^CCetsG+?}`3uEDmF@UPxwnV%l5e z>b#yMXs1_H75Zs%iJ^P21@nzlnZ8t>?v0c)Ov2FpOY}j#D`U$tom;=Pe0)wYM#+Je{&*cHm1vMrYp(|b$k-AzXU{lLgFF1-zs^eeopi z{rW?iL0&S8i{(MET>+Go$)rqVis48>B%V~W@$Py-HB(vzq z^$MIb@^QJL`*~h*VBNVZmo^%rZ@}AVZVp5AII6a|Z4k$2_gN(iF6=EcNb3;yq~&l! z!;w+4`q|KVBb2^xvdA}ck#nKY9#W{hTmKB%vuBI9Omn-z&2>s1Q?XZh@k)lHX){7Jl zE~o+FN8pK&7d@@Ugf}TB+?DiITwW{cUWn1DT_W|RWM+T2Jl z0s|ta8XJPJ##CSs5EzY}YQ;@Zn;yzK_XMVw@(Y{Fy|84GRqg-71nvhWvHx@!f+I?|VViZ2bWKy& z4tv+oEfd-7o6KhJL^hMSr~&C*WDJT+V*S%0lJBRV#B-?QGeXy`2wjytbZIV32wmhN zPyp*`M5a0jnRU4#`T_u`YRe5rz9JRTHQ?%G7Wk$|Y%v_^fz z=<&!nJ#ikFMj$*%^`s2dJudGXSBOW}Afb${rmwjy z{i6uWf6WXGjq!dRy$_(LUq`ob3T*v4y4R~Unk|Jv!wel=-urcrrqBU+kOO|00`xg@ z7?34R-#HvZasAaK0@D~vG~jJ#ZQ>uOT7{}IlK3g=ts2>!_!GtR=d!nS$HnmJUnkmd zpzwYCHM}$k=zx6=9TAR2MfJ8Gggp6sveT6{0l6n(2QHP1Li!|`xkkuw` z`1jxj`j4u&F@8oF_sv>boaT>9IS#SY=cYb@OCp0z+=kIZKxteJ#W$Fcf#G#JF$knUS=f?HBLllZ?RL&6Us zl@VLAY_WJ5lVvzXl6`(Sj zxB?BuoESq3mwa=g{`cg0*;uKCP!F_sXZLAImq?%=w`)z}>qKZ{N`B>qp<=o%Y7~ZT zcWrGV4780K`xGIOcpuy`+`6ahJq7}gqbEHIJ9N!Ri;TN7uo12XX*C|k3BMt+6=+H6 zY~l`-#}l;YpA(@eI0N1?=HFq)#3a00X+gzzg_gyW`K74VCi6F;*xU!ay~8GqYW+$w ze*-{Jwyrf}9mt{K!LfMgHg^t&y-`V0@a1A>) zbfF<}A9oMY*mAG{{C~CrCaBbEhqR89Vy-Q&yf|WbVmeHF#2VkycUZH9xJJ74Oq%k7 zZWVAfiMz4ti4cVEj!Rl=d~;tyP#aTQS>iTSHx8XUtl{v*M2=-v_I`=Y%Nd+`;n} z1l9nZ`r;A>Rt?eV@hC@~dhV&(h z-UHhe+KApHuh1sYP+J*jfqt1T8(i^jr?2NIq4)Gqekr=tjSnw4UA%l#Yi8oRScHD9 ziEbh>9sua~j0W|Up&Z?h+o~MfNBINYl>gHn%746z@}G7h_wIk-5njX|y3FVwa#nsLms4zI0 z>mM|t-b3N+n3g3@U?F6)vO}AAiPsW$Km*4kb33t=tgo)&XZzs!KcUR=VfdOxWieia zO;t{$w$C>rFK8VfhR$JoBHROnOWB{py>troN%LK-C0R_f!|xfnavR?7Bh5dHUwQZs zKyV$~^R=>&NJ_Y#jimwtDc?QPa)`!p9UwAd(|!zdz?o9c!hsS$w>9{#zX4ky`9@+C z%NTiXCc+wpBWJ%KCjN?tLc%$=}Uiv}X(EV)yA_H2r7sEg4WqNTZVX<8CF593%a}pP4xqgHK zdd)~{)|MMzaJ(QjrpW760x&X_z#sdJq9Zb3RKW;FDj3^I=E)mRIZjE}gU&N&0SB=g zk2#J>IqH(R9(@?ew)X~{#9b9b5HA9F>Xck;ZA=kN0TEYBa}`5B&{;`s>A z<2*mg^B$fb<~hSDB02XFUVoJ5Kje9W=TGwdexC2=`54cigg##q|{~4(o?fX$?0XAI8*y~7fr0*kr3u!yj2BZokdS<#n z8)MER;U_fqHcEPSyLiD~S*n&jsq(25{5G_GNZXOBkiLaffwU0m2Bd#Snz{_~BiWIv zkbaG^FCu*(>3*a=z*&JZ10_ARF7QWv71CDJ>G_t67wq}MR0Yjn-SA0$0qSpzYqN0= zT>$7}a3>R3hy{?hF&ne8g{%d&HjcR}*wnJhzcthp+DWg3*zHxzmTxw;w6)>ms8*p_ zG=`<-W+5D=zFR+sPIX8SQgoIETHKv}alJ1jG_}w;KR&wYK$4JJ#(jXZ22c^bLC9ug zMQkqWMo22KyMXKGwJ;z}yuS(UZGg9ov>NSfE9$fsL8S1db-3JkqECH9qXlCG)B|XV zoEljo&G2&ToL=S6ldt)|mHv47|5EEDsnhz9Fk2eejCpQD-Ouhui)>=Dra$5I#m3JC z4^`7?t)*q~gYR~%T^qQ6nlte=Vnt~Dyg##^f2jt@qd$x4Cwlqx>>DA4D*vCiw!f6l z7q_^y?ml16zf>RT6~TT)&h|wg#B*1vdbFgMZxbHPgw_{sRDu3yJq6?VrN2$h03yYZ z@021fP)DWv=o&uYT@N?;V*Xb&mFPuyB87si(j6E59Hi0*> z-iMN4-`lxigy4ouKy6m zu2=CM1Z)NI=K`6?bXfWu>xF_UBz z2fN06j7SAYt-!epsSD{|q<=*EF4AL2hmnYK2Ft{n>R1+=!Y26QLZMS&+XOM#A*KpX zTQIO~eBBcawCzj-LPA&&8L*o|+o%viAu9X<>@OXh3ST4QO3w>)k1*p7f^|zjB`&Nj zU?!|v`l($8{|2mc94rLbC}7%gu)hVY8?gQ3U_F3kV+Ci9gS`dVL%_=$2m2FX_XCza z4mPtAv;h08=ga%or|)00vl>HwQ9yL3+fa?r9t`bd?Anawf>kvv}-zqKzd}7RpQDd3bb+fgtiWw zwJy-q5%vW|n36VyWwWlvUrFGuw(t{3wLcUFNM@C7!LYERDbUg;u=g@+f-O>;V6&#W z*%Kr!ky+Z(0&@;C_L8o_9}=aewxwtAyXm0PoA9Z-bg3sgi zx54uvg21W>B6^xSIy~ae4gvQq&=f=|EQH#dL?6Wmb}geRc>UX?kl@+jZxK9*9-zC3 zdHeyt=x=KC-<|3JKYu6~Xon>+HlKMQLK;UMIUb=@9S>33S=lFbkAOR#fV(%HjUgl| z>s2Ye^fyj8=|IK~53~{5*37sTsI`L&^%cmfj=dT+b@USE2?^W$VVbkZ*BwE!xv7m5 z;DM!rg9pvFtxe5$QVdVcRz>BQ0{%FM>nR}Y@NgkCstkP9NT!krx(Eh1QL$+&Oc;M$ z^9lb{53L`!nAzZlHC3e``ypcq1>3wG9$0oOBjxx5=w?kF{-XA9(GGv02qTK{mtUg4 zT_|d^6j_Q?Q<;RpP2+R=$1TO@V1>Ewk4Km+3E9c#^{X2EJPe=E)G?v|30-|a^$fg( zNjXAukxJMr?u|*V0Z1BVD6iD+!^UwL-`n zgvAG%g~}i_D}>l}pN@(vTiEPzP&I}C$c718w-XlDz8;IRGz?({sxfco%1bU%w+c46 zf?g+m6B6;rx=jeBCHbs9>`U1HTn*4Kw@+O2Y!#gmHJC;^(UB@$|DQX%FD3u$G@#-4 z_5xf{CXS=up7{~`Q*eCr!tY&lujwMBNl(R+&h|Frb|DnT$-_C%vd}!wC}_NH)A zyT3UU3th23O zv)*hiw=T8bVqI(9X!Te_)=ukT>$BDY>nqkPYzEs*o7J|$)?jG3sCy*Hp}@sHoUlalGQSia$6nID?CK zEPj3Q+lv!RMwT$6de`1$ZZSV;?lqq%rk{Hx=rL#PN;Y_IrH z#nFoAD_*I1r((F`I;Y85gPoco=B>wM7pznzab|Jixi`IPgh^O$qM z`HJ&3=UdLR&fhwRogX+yofnE?jI~Om}j6KayuLS{7K$mKBy& gmYIu;iwYO*S@htdA36>@jyq1`z0H@;|33}c162v&TChc zTda0fv#n`~&D5Z(HZ?XjIaG_yDx0%WWo=Xy-dLt;XsR(!OGp?!!B2W;;{H>o8y|lz z5NyehJ>Q3STk<2%zt5jrp8p)rkK!JC{%;)bvFCQ;xf1z*< zi6k_9VpxGxh?fD7%JN6*W*M^~w{Mq>)ev%@j9pCvAM%M|g`n4RpNwgT^Wg zurI5wYp6a56h?sPtq-E`NCDAHO|7n70=p!~bL+}cw+3Yql1g?ud;89yQ42Nf~ zZvtX5Hvm+s0M4c%c-KXy{LgtiK%Y~YV;DPC{$qeSSpYjJHj%(T2`ne@fg0c}w0-KQ z^g3Z8K$8YwbP9l52T+g+5JR~;rvV(NSUrsS)VA3GuM*G~0GzxCz)qxIq_hXG1$dZZ zZ&2k=Q_M|e-=J8|RDj2(1N@4LsVQw_GQj18(oV0FDI=F+jiUh`yd2Y@^p& z%ILok;6Lg0l4}8Wrvm(tYMV{q1A6`QWdJ{**L4K`KvXUzsr{D9Dyi&0W&-?@a*tmP zpr_aY$~b%_KtIJ4=>R&4%|-7zb(ms>7Xu_wtd2_Dp9Zig5uk(8c2XUOt^wFaY&=eS zyOL16Bv=!n#8Ly>D3(nGb`ZTP0`E{-9Hntm7Z8;n5b`d{=*<9FLi9>U18k(U^#nTL z1W&z03jGPSZNl{ciNwY$ROQn|KuNhbj|8ZsjAklvh(H!)EG8+|{ADZA>Ho7?tMk(^#}{};&paN+Lwb9HLaU$`f%mAt+bkm2<``s^j4 z`Zi;vBVIcIpsl^o&gJIMwARw$*4+t&u6~m@io&q5D4P6fPCc z2&l@J?2wX0B%|C~l&b@}*Ko`zp6UnXz44ufV_aJC$XnXQgo>?#VVkEsq1#iKaH8Fx z+F6(&#`r63H+qZrmeeV|6~{{Jm{bksfW&{BRQn}^YOmw9_aqNWE<^HmS*h@v(VILl z7NYtD9L>K8iV=zjG_Q#>@!GbRqzn~Z4P>ZjPwiTon##w?lxLtxcxqOG_%Xyu!lj7s z^~dKR-tNaSAifoG1#k)wuXkE&Sk3Y>>uqM%RA1w0X83O@Z(3?@JeLWCY5!jz<@U8| zgk)bYcEE(5RYDGalOAkhhe?yI@yt0=({buvG!d3=tW${npZRNY?f21t!hRosO3z`x7oiQ7Dey1wOzsXK8^t+bo1Bw- z2VPMUS#>euM5KD$Tan~?k)UMp9%Og&azw*VLGThniRhGc-9Uf`u9OFwWqH1R_u&JVdW2a31t zC85C5=TQMzdg6Fm;j<&ar-oAlx)HB$ZZ>~cwmzJ<;`XmV&3yc7e->+{fO4c!>ki@% zvJ&3~*RH*CkD;H0*Ke$27N2iC2Al%P<=?}F((7vNm6UN6S|FUMlUryX#Ue))G)DA7 zRE1K3g}gwwtF@as`7lL!{$Xkc^5DYWLn+XZijyxBin~jMir!LRa*;%2ED)hDt#HP| zR!LQK1FIKGog-m!VQFozA&7j{x?ng(*BcAZKD43aNqg+&s^kt459w>4A-}1eYkaA%W7iew(gLz#c;eM)J=ur_!4o;U#M<{#~|4spO%I7hd2K(*M3pJyt+{8$WZgz z1~iXBGOxiT)=DJehUj!TGQL}#`qX4YJ~bJfPffF9pPH=Ir>3d2PfeY{rzWrDQI9$YG4TlyEX)5kh(}dQirb#uoK@v-}!fEep zCd`$CQz2$YJu}2p>Ui$cDGP5(3Z>F`iPk3LMzGl@?%^a*^rrcP z3b)5!EK`O#xb`k(#QQ3J?o%)$=Xf}G89Demwl9v7Wa7&o(|qW2F0-*=BqD@^LjGdn z{lItaO^U?KNuX6JxIXpqDW5N*D1VXci5AF)ephRM?D89h;(p%*?+aIBJgZQaa#yw- zh5&ccqjj~y;z#T=_+&kDK$f_(7&EO&82K?%=ou&0LJ)~NJ9-jDk3S|k2-0&ryB##^ z5jG+`jxdy)p()_6?ySY~Ynjs0eZ5Rsvzd(2=-Mkn`g}E%X6VxvQEPQp}O?Bya$i08!66*>^kG<9k@))gsc*GcDeUE zV|psY2SlGwj6;%m7{C(m0yBy`G0%Gw8ITJm`!PM!#5KIoLHA)4Qd#6}z`}`(QnYh^ z6cTxeih&0P9?oJ}%GcICV-j~7J~E0cKmc;w1F4>L?{~;CK;JB0k2*YtZlR*vrDKjP znhS{7*(OBJp<@EF;4}AM?HpPLh&(QGR{<#zKUZ)LIG^bwM*vV5$?5x z;=USB0!iX0Ut;t_)$)x~Bz>+KqR+l_=+mVq#@QXDM^f-+-VRZ=g`S-TIx!+yQY*Lu z))-FWl~N`3#yCj5D@cReP6G5&ObZ~XgUSVplWIs6#V1R|zW|q1Q3n%;K*dk^yTWf% zsMlXGq{9*7&X0V)JT99!mj1AzbJ| zH^HKSRumQ^ypQDFXo&${T+jb%OT8$)8nHQ zvFkDPaoSkrB|!>dHN;R2UDzo6sx^RqTW=vuEwr@;=F5bI@$&?I3WiRP`vr7z7si9t zkHIe7?>eursP4hmt9+hO{4*cmz#Jl4m5FyEZ4A$rR+~=59 zYAo?N72+SMtL{}U+#@9SA*-D>YD_6rVO0 zoOE7L93T5e&O!T>yHYfXJNFpd)4+peENo$Nr?Eu5pVSKcy~;H|ybi=Lca80NzG~kH zcFR5)JMa8;um(uK6$)YZU5bL$`<|shro%OZc4eesBE8Q@=z7)O5>eYy^7U-PkpMX&pDR z0CrF!+c{5;5#FZ>E3D8F>}mdCYoHM4b7-L#3Cs61X++paZ5CdY7`1euBwPhCSQ%pN zP1oKOSHH|DI}kMS-Du>OdFH{E^sjk`{bBxpl;%6iiqQPOS8P*pU**JV8m{WT z0oYB4F3eTs4t7BX^pZ$dr9_Hl&S1PRxCw?_)qD&OMp}x-Vo17y>XE#a=CxbIejJc} z8%?$sVV)hfq(png>8Ri59P4u?Vbmf!aw>eya$lw`j_S!XD7X1h2 zF9{0>CeJ5$c{#xhBSHNfz}mZ$TlgcPo+uGt@Z7K1cfdWd!2 z=|Bqc-Of{R9-T}(7dVgZ=PA3onUEl-lsR$zmX&LG8-LETCnuT+*O5(~yqrQzR;4kPD<9J6c`_DNi)WS-)9tejlCWu9cR#h}$yC_ML)Df&l|o>ACNb#=&as{^BBPI0_F z88a`WVWld_+dT67TY%j2jwIqY|MNQ#anKei0(rZ7lQbPT&8L+P&hLH6>&RJDoWYC{ zd}s{);7!_u*3cd`;_HDR#l8GwYy&SapsDB$lX~yt zDtO+J!l#95x{K~m3Vg5e?}t3RpZ5G%%*Qx^irQKS2-!IbGQAOzo)p@QexC|CFGLd( zF2v2cUERtHIQtMYcBN1Okp6zylT3a7D>5g^%c8o)f`6VbF8U*lI`Y97 z$Zt-Uf)>ixrQ^itpPR1mgIUWFv#`t^?rZiGbPyW==aW1j`bAx2^C1V zZp6~ANwLL!o?=m`=!1&=MmtGTa!#@6xQZKXe9m?8wjV&iLP9<#axI*HF**!D&7O^i7x9h)+g7+aL< z;f?fE^rKO2TDtbn5mF#T*Dk4veTmP+=r6#Go#$XGKb&BP;f<2OU(M#R==*+!a``I6 zf+Ku6L9C>UAH9WMTY!^pV(Ga8XkXLOm-y6Z2pn7DjE*k`at!@WSR&-~ZuLlTXww{VpurW2Z zRD2j@u|I92M*+wXeol|#ory`ZSNT)9_Q)UdRmSK4c~myFXUAM1jtL2gUv`p z;-8Fh+R%2 zje`slgWYurT~#BD@~Eimlj?4m^6j&(Ti1$3rzaoDNJU51mV zehX~DaB#BWn8$#H>j9YCu~P9xx->}#-$z}oN10Q(&+rlL@1KS6?lOGT(}I%`p=d(e zaTH$VK<=2bBBG*Orlz{c3NJzgYbS@2oLB7vo$>I-MG&+0Px@&qhaf59&WKUg{b! z!FU{g#M8+W935<$_WvJx-LC`Mq2Kr#e;LM21exRgA$~KNBt|e?zVbP*#&o$v)JTNj zL=;#c(I7>#kt8?Jb4|}gn1NC16KT8}Fb-5K(~A2EwO>N*Kc^>=Sm5<5Hj|mdCAnG$ zu+HT5Uo7$7Gp^?nUO$aDMyb2)I>3!)SjwPRLY#@V0RIk}#t<{S0lZsc;2378=M15I z`zkOK5If%6dZ!FGf3Axa*GhF*4qzQbH{y<<*BeD0=NvbfS7Q^(<6TAY{*?qbwh(;U zLGZ<9z}ma--@qT|}Wj}1R}ufwC0*Fg(5p;+$m-i;)0h1_%h zdWsn2LeYT7y9V((tk}I3n@YtexU6t@coV+UQ_yL6lsW1ZEhegPyqMmCz`J_welq zX+EzY0no)1$wZ~8QVl33KBH*+JUB@z<&(C7*z0nosb5=maC(#_P5j1&rbTL+Fs*Qm zSx)1~*yrfJ^U~d8C~>8%MXKTJ&76Y$$#U=_norXfMZk(f5+A;O=rQCi2he~vUA4WT z+j%ou=W0>LI!iGywXH}}#oafKj;;sVZcDm?;+XRew6!E%N%43IhZQ_1b6zR7@5ji8 zaf~)dgd#cofvAQRLINJ8_*oZSWr8NY;yn`Z+Zks;hlG3rbHY$-4jia_sqjGzp8NF1 zhh<9p<@1C*?DUQn-Uw{ty7tN2&QhN3!>U`t_LTxODqotvftRoO)w#=4-Z{#HKQ6oy z(aKFxPR=R@6D}i7w*qHQbfR1L7)7Yq@7_*SgPMB zT4BS(ERV>3QQRo*fcTJ)K|^*RyzW5$x?ujuXJ;V(+BM-=0cr91c|=B_e0i`ui~++( zlJp*dOH_dG(kr^5Pe&p#CM3{{@6d3(2k?7omQip&t?|#S`Xx=7&P=A+R3B=ZOpE-! zoM|3s$y})7=;#hLcl30)xwM2$sKum!A_Xe||ZJ(TkAL zVEVa1`gBNZ6nil>lK7M4yiIzKpb?-QlpoxGKgkb6Xe`|v!b%l_JCjqaTt77=)78d@@3A6J|EtOkFj5g49d6lCSl7kbUw98-%R~G(S0c>?2Drp zndm^Aj(OF2I4|ftHq{6C*(;w+vNW2u4N!bM!Hj0jN z=%|OTfsNhgFPP}w3^7aJvT06*_=ekgrOsN_xI zM^adtWCnRF7>>8wF|m+%yCS^GJ0#NZs`zrvNBEiyX#`%AzrXE&A4WOfK@!(b3g$B* z{a__vp|545;oYQ&Efnou_tNb4SZJ=BVy6qVL zaQ@rjKkDDKN0K5A|4_J-Lj{T%B}EIbB0^s_plkCfP_OT4s>Dz8P3cY8NGu3_IG>ZQ zY`p2O2bUw)xn88=GN&MTsfN#X$(*YWoe~bYK95Pf(+*OzrJ8E9rx$tUMTzbzq}94w z&Mt6_es%%OuhydwUJ-Wv{h+J=qQpCAAlEzNLcJXJpZGHk-Zrm+@I9-G$$B^6EyepO zzE+A4P<)*fXYdM}*Gq9Z#WzTC1;sZ>@py_qD#ewE*KXd57v4o`QB4w(LY?4~-PCZ> z`Df1YA=M@YtQPl3UjYgbARY`~`=q1yYpGaZDEkhq^SdX(?L8h>TtfB^KkN09l<5+K z1ygMXj|YfEayWrFF5Z;X#nKM1QGBX{+CBlkputiI>w(~aS~tolZrbJdG0rlJR>}e8 zI^5;`X)q^Sk~5hiO3?$faR~)q3v?)xMuPa>kRUDE70(JjLpZIVvLw&98quH7olyP6J6 z;!!pF@ zN#uyXfDpG(0Bf9%No>+ zD|2C(L~<-g>*jYYh*Y!6i_33iKIfUinD0OzLTfMKSiJNFf-p+BKf!N339bEfYvN%- z1)d@t2maB7e6WC=cwEGVr5#11y@mmV6KHg(4Y+b~JyufKO+DjG!hTfFtIHFxB@??V z=V;=cF3w2*Fcmm|t=W%jfxhHb5H4iAnq=Hcm=O~4x1u1NJE66k2x=qKMBx&_HYFm> zaLj)RR&dhjv8fII$~WG=e%D8_QoWTJ;_=NfR1M=G5#I&`aDhhl8HGfz;fP<@x5lIO zp*CX|pTw98?8ysHE1?!o})sgtjX>yXZ zy2iv5J>K}}$USovp33;ZA-PbP+>P(_@Yh|(nSk$Vx1GM;-01Y5Ud9TA3EdgiM)T|o4sxVJ z$9YPl!(4yC!J&JWcNHI5Q~Vxk=vBC4%a)_Wjp^v{G>JEtlOd=Uyw;Q>#gjzHbG9A<+UIzCF0-`CG$^??B zq1YLQVz87<=1ja2s0J?lwbf!pL{U;!W zG0?}irj?1SUzXUH9mMXor{bVcaR8g$uJ=c{x|yc}r@?z&tsNs0-M<2wt936HJG9`I z>c#kns}kJy_T!QZMYt{xy$}28b9Jj6OC>~XWCsydLlD&%R1fM2ICHSSE>s+BJKl{F zuJ@UzxZP9nLR)J)y*n@G-#@%WqKTPLpwR`q(VC9HxB45}(Y3yBE(!ggcb>q4nf#GU zKLs*pU%rU-si)ve_dfL`4wW1xaX6O46b@A!PT-Kfr0-L&=5Q5-c8a65+%4!3ex z&*3%>ALVcphZ{It&*3@_*K*j*p@qY{Ib6hH4TtnaH=mkrO#0Mxq0XnKyPG~W-Bn(i$5)N~)or>5HnJ~iD*@TuwQf=^9H^FB3gulm$9prS<_((vw6(_GM} zru7y)E#w(--0&T|58aO~cj?Jz%Ubb`FvY2H=)rBRiXAZwn>dI(O%a|$cSPZ>$q&GH zQ~&NX^pczGG>Ej}iYxBq`0@1+6@MJd=Z~YS_~Qso`a2B=$-{IS4$$@FPD2;1ggXs; z=}Xg{hK@Fl`2v0S0e?C~&M|i=IOcXG$K0j@X5y0z>HNagm(RzzfwtpR5MK{ii?gYo zn`vA1eJYHUdnjc#hBP%14WMW-({DRYgpqbEb zVj-RHT?dXB&7&_-2}C6jl|WPiQ3*sP5S2hw0#OM>B@mTBR02^6L?sZFKvV)z3H*2SzT?W z-zk$mH+%`bSvIrTPj5zJjiJTrD7VO-}j+JW8@QS{+tXJ$@)cD$Q9qCy;2@JI$)5T9u*9$g8KH z)5EXpHJfeqD^zyVGSp$Jwl&%9DwC?#*;wtcHZ|gB_v-7XsZ{)@_`r|T?nJ^0VA#xd zXT5{y5el&sR;tEaU2n4anN~G5nuAEyO^wUUjhr+!D7;W}lNDFNY^un@CRL5Kw$^Mz zp<#$jOQ5g2eeKT-kg_{ejwaM^Zvg*PEq;kkaZx-mFup5=M`zwwP?HYL#9!$*Q_qmD)0E)-^c^qi0%7jY~-8oGyL@ zk$w=-&({iA3OWL5*95_#GZ50P(3{nC2Y=oP5i0%xC6ebhu4ur>rz1UpaWJ6ONe(44+JX9DJMbzQ%UR6*bh@PuTR?)b$ zv1xgus?-U6HJDX1EoSshgU!}ti=bT!ztqSa@JJ2t7%DcCS@5i8OA$A~BiUFJ!ZenE zug0iY1#nI9W#qk7DAfd5gR*wkj5HHlf%j5Y4k{{E3>-WDnYf?h9X=qmVV)8nQ&Dy} zPG*4$`AjExp_;E^YSgP@QxVjtBk~hy`z&j{xzW_XoopbjxT(eohcwrp%pjksZyqUKc?4j`$Cd3qI9${A)(ItpK-QiV{CK%}Mi1RSqlzHs{i#%B7xWWYyq_eidhJV&@^3={~`^y_mF$vKfdKcd$M z1~e0CYzVzU9X)6YAw>E+UiA09C}lDFMcS_AmZfrI;-e6u~XrT!Y-bW*`L# zm$4h!EVOSPn}N0(Adz|Cbves~G^n1rc&h==Bq=M}LH^B-Pz(MSKtj|KC-|y|936;} zcWXipNpl)nv;gU5p3}_nX9jB?8ll-9)#gM!4(P#(_rNEl75p~pAe{wp&XsN~ypCi8 zQP7XSn(6UEZ(;XJ4G+7|yU-RT&8UC821HVN~7e9ZDaNq$MJJ2c- z3FOh=8Kdtik6kZgV{e!8qA)6fs05-C7%YL(vO+lhin8D2JT&`v{hhCrt^Z2`xjln! z!7{ti)et+l8ay*!OfS%MIrkMB?h>svMhzomsh`O(k0B><6enbmKmKXk|F`*%Fd z$NM4#3ql-D8Q#UOLaadCg+L3?z|?CRjy>3He(X_*SVdzfe(p-6IZ+Ax3nV~)Nc*XA ze<&odi z3J^*WY7mwowC{&+ME*?(XAue!9z)tg2=^eYM5slWgOG`kg1``ZyJYNjg#SR;fbdg< zE~Go~T!iprgzxI3+$UpKBNQUgk00HJunwUQ{C|Y-bw4WbmWm)p(00n$7YIs(&p`8I zgrf*u2rnThfpY?RZzH^f@Cd?B5o!=p5PpmxNBB0MyLX4m{}k=fcF0(HSlUr)BhqU2 zgz&ZzZ@Xk{M_5`ec*R%whh-&dQ;}l%zT4EL@*ACwW~YO1B$YXAIBJ@KpG;)@aHGi7 zSW|CiH8Izl9dmFv#gA|qdpB;L$?Cx2c^R~NS%aYpSh2X1*J%IOFpfb(ixrPb!ZfjK`xG~o1a{D^rrtHbO^DCXzejJ+Pfqw6C; z`#)5lbfhZriKCjQD2>YbPZKfz`8gzg&{WsRn0Tpe&QHcjrYLX$qrYO_1$ zvD8q?TyqN&*vVL_iXaL*6-<#(ZZMS2HO$eZ^O+$_jtOg9dDBue4%f!B88vlIyMw

TKfnt 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Ð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

Uj zZK|p<+a0#16;<_CJMvSIUo9!1%G^?I#$5xP?Oi@xY87sVIM70t!ThLIxa0t3+omI{ zp#kNlq1>`+o1-cyW;)ZR!|QqMM?>-gDo6|Dgk2h#Xr?ogs+l%N;o>Ew=H@1wgC$44Lkkbe&|a$p_f;C$L!o$;naz%a1ge`?RN=VX zz~d$d#qR+hkd?K`-<+ytc3l5xbkrjAFELeiv!$xmS`UI%G@(DnNFcS=B{+YtYBb@d z!tyGUZOJmmeks)^UH%DVnH!f`ZB300uyn>Ah`_+@8{B8Aa?sTy#@>&qvYD4aIjF~< z6F3QH@iIu>TtcLZ-<5jlY~04WGj_I}`-LTD zo00Acpt&{jQj^t={ueMW_GxS}t|nQpTY(PVG|yUN#&sDRiy0A!mNy0S*;8>9jgp<= z+LxaKtO`wF?AEw4v*VoEYvalT?F={$<^g~HmnPdR_!(#~z~_x}eq?Jj+i=UJ!PHo7 zo{6hrRMBN&ZS|K%V|yvJYy~vcKvyzm*vZ%_#%g0{2M){4Wpkj*BD$*fCdYS};JKP- zqbts1MX|_e=1z>w;c;?Qj6Fk`{)z~LvBLpR##vPAvM3uP_7kRM^(od`?pEXrGQDt{v9&M_}Y)?ON zh1otaKQCc)uE}mUH!Q|YZV+g+>nA#GjXHa^#f*E%QyZ*w4ZNw=F%=VUoyp!XZCTnx z+-h#L)?#*F8D1Na`cZ%uUcQ9iX!iG90yw8wi6&0T+K}~F*6yr>Ss!GL)?TE&M!Qz~ zxb`LOAuY>}&mNmSAv-lYH`|vzN_Ugaq1&R{sXL+T(^chIbDqmNk`tTzgWSSgW9}bv z_vg;id-R+12ldDF3-VlfJMs?ZeV%t&{9IpU?l4p-RRMqV5r? zQ&S64f0DX9^{&*7slQ8oDs@BJp0wj>C)4866Vvn3&FO9Fe@p*Ix=b@tlc2d+Gfp#J zqt;B;q-nA=dd*DDY|V|D3eC+LlV*uV(5%xuqQs;EtxN5c4Y3&?8^Ks z^BdW$*dQ$QnlII>$Ll{uWJ9KJ*|~xkIJ5seM9yL-37YKbve3O zIsG{!bJe*w=^ONJ{U7vQ`Xl=H^dIVb^nLoj>2J?-=WWXSIPYwpD!(Y-nm>@wQsF-4`) zmu37gqcEd5qb$Rb(VF4Pcrv3ssYNjSLJ2OAika)0O z-TS&rbJRKMIfk4ka^A{0ne$xk>$xX$|B*XVf2sZo{S>`MpQktIP5OHM3jGd!hyJMk zxc-K`d3n`&O?m$(?`L`U<^4KuTi)Awzs*0L4^quKF>1Wg9G)bCCnp}-hvrMxJ8dXexAmh=DCo-PScroJy zG-1uMWwm6rWqGn5hYs4a#-m@QYm2m{+MBf-w7-G0AIp9t`>pJEvyW$=%>E?%)9laD z$Kqgr7wRs74PK?YM)xDgI7c@_cfGDySEl=ku1aUtE!EwsTdr%>xpW@g&vp0f9@cHv zJ+6B~_j}#5xIRg$5Ym_Kyr4F@dP_TnKNtgtczywT!A|Jg)jL|BF8Nf;) zVKTyDdu-au{o7VsdrR-7SKCWlz}TW@63B!PAyH~$jT#m0j!A9!s02jj{jI&veB}eM zz5l+?`#dj?X7)K}pSAa1d+qhL*IuXSt~!&&WHKrEKN2yS>hVke+~V)K|McPU$nn1) zY1%&Q)hp`FvtGU8j`I6fWG%0J=-$e2emm=1-+b`FhkRN8c28EN|G}*L9?Y6CXI|E~ zA6k0PH5XkpJlg<$QE7R@ty9x}5dGghXY&sh;yUg2l<((@-_-BB#joZ2#o{;p`$hQu zkthB8v+#TC)btWSq$SX}h0yd_b#qF=>8sQZTO`Ul~YWnG`hmS= +5~>tlmWIb}yo`!eH}-2> z(k=YUTA6B^L`^iLnzqZP#QoTx)>IR}$z&@3OfhA~ZpI4@xSxT`t*4dbxk5iT(u5B2 z?;77dt9^L3=7+|(Xslvr@fWg8rX|-@F8!wOn_K6d8K7P^ZiGvJ!g+s_ncVzbGo1NRyi$qZDB9} zAWJc^zQArptLo7fo(V?O+W*9(3M=1BPkQNzzqi?Q#vJ_AcbQt&uuOd;Eu1!mD|Wu{ z2WHd80wtX0##MJp&Zl7y5tb?J;q-&|D(rYOg|7uD0_5opHu$cRKulq`RaAB>v|?~2 zeoR{dOIvOOxCYICMDuXna|A#vf1t8BSGwXurLlt%J1*8*=lIjb zl~*Zu{}PB9F+q%%6`feBT||StbMc}D?8Ajk<(2ff=SszNXVZZL2TID=nru7ks)^v= zx>XN_Jq{JM0}=a*v1Jiowq2{Tm+&86N6>7G7dBc=^VqwA{c35=XY|6#^gqx~_wf3$ zc+1tU=C$kjW-s3XgwX35tQP=EH9uzB!DmS@&C1QDMGFKlz6KT1jo80=?Cxw^3HtNd zS?bR!^e3JA^O<$UCAxB{w$SdSUX}1P32Wg3bg7gb4;)M{t2s;WtW1BIe$b`i)TLfE zuU9WXmnzYc=6A3@eafX;m8q0^2XJM4=e1&RIStD+<>tkU1VnxWSfEa^S=rW_Q^a&D zzrB<*+i3tf9Hd@s~@~#;|0x^ZRP8( z0?{@vy0bCf!EmmP`oTic28qT^;atI)!?|L8Bve08D#oH0DBf^d@9z{l)}je`u>~3w zFTZ0lVbU5-vu_7ZFe(L8Lt`JJes;8eW~{y#KY->c=tDMcht2fR7(K>+E_jE(F4~tZ z8~9>J*=$GPl)dsQmX>SGZz#cA? z6JIDNKHao9aX2)7AXDPr%e$_jE-RnT$hMk&BPwjAy!p~(6o4NGdaTSmuQav#@s;3< zXJ~%QG*91>NJ*dOIrB~CIRn0Q5vy*&oEuDH@uEOWM6e6V&v$qd`1x{!nS+;tv&UIF z8^%0V%~K!t?4maG8fsAUY}0G(|9KpR=k=O~$`%y1qv>s$XBV2@6>Lyz7lX>!%o)MG zYVAI}$h>z1UsG#eK{2p;zN)XD!Tj~03xlVJJv{_|t~$!o?w?zx7q#=L;6=Kp-K)=D z&3{Y_pr{8kuCD(*K`Uv`WsSzfJCY|}-H%Jtg)}`TvVuJYL={Uq&V-PDJ zI5)HxFc3h?lhC?vM!x|p-gW9Sx=(bauU*~jX*an}`7ULLcPVX=+|=PWP)}%9^?Ir@*S|F04B^DU61B)PVuM-2*Px{+dV+ZI z+ynXuycYv{_!5Dh?lRz}fqxa)2CA3v$$&*So;nkWbi3m1>uZ-pM~Ts+2MHs60Cfi+ zX#;u_-0Pdq>RPGvns0WX{xC`yAw8PwACGZ0@aHfXul@vKfd3DG(Yljh%I6M&4(u>#8!I`Yi z1U`-q-W;eW-3A?`M|1t-LWV_ycZ`xTor>@dEdEF z_n}2VTP~p`<0xZD9Bt?u1V@CMdM^g9*U?{6^9d(x;}W_8acmbDT1uz^Zi)?dkGV34 zfmVb6_PPAlzYE;3gI@k?G!#Y6ug;5_3^|yeJ0u;fE8}NR#6W#32C8z|xpC44Qxh1z z+W<2yK9P_?22Nrtw-+n-AYTb$lSD(3Uhww<$=?<9i3Y!gdSB4AYS0*ZA7tX_{M$> z*EG}fK^m609v*8r0oP#hn3ly8S>X^K4h`CMn|G zr0f;i!)`kO!t#{L9_Fg(FzKojSxG}&Yq2M5Evx2%`ra8O<_q&2_7J1NU=9m?)zg3? zgia(9IAvAW6D5HFbXyVT*%VWR#wLSYnI=_S01isP-Am%cEW~#o#NHf3kxm~dD&3>{r+fTizt!eHRJ?HpK{E%=>Snj}O#J@2S%SVnzv5dJlNi5g>#v&XCRw&aG zvC8aN2j^9%F9^f4fQU8rp)o8_`y+JZ3!(OE39)-=Kh*a6<{CDNGj5~wn;~_>U8IJR zo$`SyIwsJYWUEL!!r(6Tgr|Pye^GDFtNgck9gYCQs1x>q4SGB~YLE@z3xdX~oWMp# zRro%=X8Fbsp}C(RqoKmYS|TMU4BNr57@{@~Y(Xn*W+h;nz|0`Bn2lx8Mm0%eIa*cx z26}9|Et{tvi$uzw%t*ECu(7>-+?7!a750w6jkWS?EX|9LfbLG`#=ZL-b?=k zwJ`)vRDqM<2oP2{84@g634`WKw~+~dZV(R+0fODC)c3*Mg$(nAV5LiY@$*D`(H*xJ zlgz~`t5#L7RkbjGrolWle?#z7e+4Vb63if7TV>Z)Iq)|evxbQ~PGTjtICmUi(_Ib9 z$NJrcIRy`9;iN^t#2WZDo{=-Gx+>eG)?%B&q{r(df7@f{jIoD>g5j&2iQJWvoFJqKNqXx-KI^}>QlpgmW^s5ZuyS} zs(S47#!0lL=6l+|T6Ngj%c?kfS#sFf>}pi=TB(j!a#+nTYImNt9Asft$k0iH;`q&$|Cn#8k3^pQ^RjLM>TVht_~P48^AIoG}eyzbh+}D<1DMflwc$PGx)9OaPG~3AQDPEZezdfBU`rOXG&2z@TDPDj zvRz`WQ%e>vze%(NoG7fMr{TS{l#o`k3zLj>f?0L#TaiT*dK&8{I-!;j5J!01XzhBp z-<*y>3pA&g&=yQ+|JmFpXS2&0aBT0vZuvm*ZX zV*Uy|Wx#y_DFm1ctC&knL`%(C!`+*ECeS>=*@DjKDE5t4Hyi?~04|pLBCDL#OXQ?h zN??LE4o6|_mh&12E3T>rb$uJXTt%KN=s|{JBy}X=3Qkgvx^6&az8H2|oYjjGF=_!J z!9xrznuKO)hH)V@%iKXU%Mc{UfdlhO*aPrGmo<HtR=j}@-L`fUbVs7zsLme8i6aRx(p z4PeD0H<S7R@Cd& zr<=8^_R0cwb6GL}%{bx)?O4F*4Ka5vn7hH+$FefP+E43+k`c^6$JpuOGG3}kK5#Jv z#J2$hZxc6Bn+u7vL$n{!(uk86n$?}Qae?~PNjtOLa)e=XR8!(1MR*JfF);M$EJvH=Rion)FNPEIo zioh0VCJ|L2s)?Wy9n)H158MLM(yDsY(U0wtmdab%Dgq?Ax69)XdNs~0%f zDQs&n6Nn88fad8)=4uy4a`iBv0#zM$Qg%uJq+J^YwNty16&)znr$g&KP&pe!=jGGk zR+AcqL3ADGB)UTg2@!aF&urk|%Bp&`wC-#Oq+YnABt9`S2K~`P=Hb8wsWnA5<~aiV z0gu)c;4jd5ON`o**5xe&*5zbs86d1NthEZP<* z0McXlYK`J+mcW+{V@$$V`#JITQ!Fuouiu#Hy$*2auBEsKY&F8&1#IEwMz!l!s^=l5 zwMj8cR&}8yb$U>elF0cA!1gC8jP62FG(3@u-2?Z>c~Dd=P}DX03!!KYnLEVCo`}Gg zB2Xkq3X?6U>PG+I4ZqhSvWAdo8wejAlSsZp?-2$bKT8;Z1h979Lihgn31SSu{%;Y) z9WeF;L6FoCYi78?V`6JY5=1+kPG4Zn+z&=8&{6gIpah`-+yxOtf}D@?6WD5ooF@n0 z09yGJO2t15~O_~EZV`C>L-Mpe|pX2{Pnze@CZD-K;Eq(@i01B^I0`p;9$vT z(Y4Y&7HIGZ5Iq~yrBXncfZ(Y*5(rzM9lD?$u0KK!@aAM!3>+}h`@mQBL^Xf-1Ia>h zKyNQ&YwfPj)%E)c^Q8{fNU=c^onZvo*b!;8VI%Ma4Sk}njF0J)X)F!e`b1a_*}4r+ zzT^t6%pkqm5_Yw&8tK}%O3C?ax0Q7{KkiOp-Oe@HS-NsbVHw=2JK*6$Y{nGJn(Rp> z(8;Hi@u%rllXH(35ZsnMmL|AizV78g;S0-V%?n_;VD1}jhSC~#HL2^bKzDW9_`qJZ z2Id=iBVH61(N(OmjiYl}Qih^HR;+wB0u5wY;G|IVU~8HYN|fb=L;Im_7)`eEcqv1h zZFhbS$7)ugHrs)rQ5DPn0Ajc7+L~+!E+>{CJb?)NBRIF_(E#Xw-i|92CQ;AvJCldW z_cbef3M`Gd8$U_CU3IybdsJr=K`fodhSnSHwxvA*6G7!jRu8oRG)JC zGOAB~&3AG2sjvG|t4}TVkFLK3G(ivRDa?}!6*PJmYe+3C1o^0sBtO84Ed^gbuU^EtTny znxX%=POVhfsqPH6r;R&XTwPIPINh=*QJ6o~6^XzGA#)g3BxY8houT^VA!$fTB?jZM}e zxS^uZ(lIl3TBeKP7LV5Cy*#=K&imaJ{S6UV?Io z8fXC$*da;T``~R0sq1aDZ2uN`Rjomo2rYw`#4@;??HASB$c@t;y$h@D5*JtV;3YDX z)#gW6vx8ywrRqFfx`f(iFppx`6_D*r|C4?)x-> zh_wgp3$bP?{teXo@-RW6*#M)ZB|M_o#~IYrE$n7J&+IKLrK9gu$29x_9d=p|nKr=Jxi~*V(lcL8cz72tTA|?}?T6Wme2l)@7HUyfpTqpg< z7B5P24&Z(ASKN_ptG{>IvSkRH#6FJS;9I_n z=JEGVi03k%7Q@NZl~?rXj}h~sbs=|6ncJ>WP?W-oOs-bH>I`||T#clYNoni8!r3+# zm%X^8Dqx57TrYHZd55Ty!Kx5*;B#Z7VvNp1iRjR6)i5<@~-)764!1Y3Wc>YN4e)~lJLqhKDc7F6oBvLVR9{=EYY@rhb-+{#o7l5W^ z1nH3evJ}I$vy52-4Jpfld;NbWpIKWUyk;8?$Gm13lfqhQ(d*yADUh&K zHayU1y#A-Q(^{#bds7l&Hn#Oy8ngl{YhEnkKg-xDHWh)(cg|yr71wd!NKkYb10{++ z?mx!nSXsKWCGcM7f*AIbb}3d(5L;NE9J83hw2>#)S0T&_Ysc`EY(+kM0gQkvwh5{GZl$cQx9R)UQ0p@}~h;f{A7*`Q&iB-WT;6BGV zWGryvFrwsQ`2VUB{eLqCi>KGfG_tZ|VGnGjNW_T240{@=0j*@4zBWZ2KLZ{*mKJEn z{54?uPwKa&w4K%b+n2EvF{yO3EsXsh{A)X%^Qq?V(EOdcG8$2xaP;}l(9V-bxci={ zK^@Qo{C)8N1bUAt^$b3b-GB`TV_hP>l=OgLN?Hab7|#KhzteXK{NcOf-bm)}2sAs; zi*9T(?e><^Zp{dab@O)=LaSV}9tL69BZz=_$=e-E?U1Sj#y_tm=4$u~!|6m!=n76_Rtdcb;%BRdpSE9Jw4>(3V0ZD)E0?m*^f zs}=TACY9$~*)v&Gm>i7wm7GtzuglpBpaOUTy`r0&c+oxSD|L7d`GPj`*!*{H{3M)f1WSB|yt3u^o2^(39CS z^QmwixYrJZo00%`y0+Y{&7Tp&Iq1f7Muw%tj#c#Ir_RFIeo9SGD}+frL;)n^jh#}0 zECGJ?rJ|GdH-tu{(}Ws0Vk{rocz) z3Exs@O7x|RPkKm(Bb{$>*%pUJVpGR;woT6060PAKZ1M^;gE=i z`<`GFUmzN8)yG1i@0yPn%iSOpJ(vvvQ~{-y!9hk#9hi7t*XeE)8MMZ?0t>+>aT9}p zu>Go6U;^Qcnx_?`!OvlCN4IeY9i=5x4>jM^J=q)CQHR$stSA-`iD96Dzq8MH0v{CK zfP>i-c*Fs@wu|MGy*kWW%!=yye?d_~EQ0}ftKz$b5YYJ<#Yvp9R$e$iBo(ZZ!an*_YDiyp_xIcD4Vv(+!8+Fdo6JJUKx{SsUxc%di=sGKVB zE5T%7qXcfEtBC&%L40D3SIk_dUYuHv+w{8}zu{B@1AwM*>QbY`Gr7f7K6$HR*G!sQ z(cIQ$VYkg}{y9|*i`V4~55!(2P;`$k>c*?07jt_AQFRf26oVG>jR<*ODYk6co9qqD z1s+Dq`k!=chr&+sEw0M_NuQlU61^i)={wqXww$(aNxIzt*(X%G6M9g=PP7++^}zZF zkhNa39^VtdfUE3g&uHRdP_<<146`qB2v-Clo`x7lzBPT?9H&}0QJUDwKc4| zbLjKC6Nvyqpp#yO@FFR2gvyAN0_$gO6xmVWhhm=nz=yeiKeN-T^RAeVO z9k4$LR1*COU_JdO40DCoMkJ6Hh^_kHiP)gJOO2frLz~pht2n8JDC?fX>;N=FS#FSJ z=#Noai(yjeBS{XMl{Q4Quk?%l;{5c_;{2_qhor+` zCIvfM-i}9lun$xM2|-+e1k*8cd5r{>8AHSQyIwko7wd2bI-EiMY}achKS&b(FeLm{ zkDvf$ce!Pk!90NzgO?_8QT4lYszCSjzDTUi8}Wl(+W3mw2#I#MM5`{TC$5mdWesJ_ zW+K*4y@iDpDLE2>eI+jeqNEd|AyU!-z9a?&gu&MAkrgUTk&?p@7M`BLpi0*HO)!x- z16P9!(99QR;$`pu!%X~#I4dK1Vys&J7}x@4q3bnZBR0k5lc5mt>75qCCnWsOaC2q| zKkFg~Yr+P!GX#IW-Njes>dIHyS@?>w$R+)m6(as-UHLW)@2_^VIDU)=zGY+$nsZsm$EE-HMoKiYeC*GgwVh@tUJ8$4QIhWYsKLi+JpEv^ocf6 zCgJ~VeuwPgG(D5zI7~Tv5wW^Vvl_la;m(dbZ?XG8j@!?HB8(~%R6+X(@e#!w+GpVh z6K$07dgcFuXHzbIyJ%nnrir8ZyLX**R0mwM+#}o_e#~_d!*Am*MVxp<3V;vyvgh%&!vh>*`}>JS*mF-xaHaT(BP#70jOy_@GnE zCl@RZ|014IK4lWfFBn{_AUpEF_WCa-59>T$1(z1~ z%`j26?ys^iWXgt?=lkPq|O zFfdqY?ii~V2c*FzpCR`VR3ORUd%z{HXuuufq#OJ+aU}ar^b^iS4UmL!`>vmG-Q8av z8uFQh>Jbb^3RM`I5Y8m0znFZ6ts~|0Rw{%&&&!`}^aHUQ_H3sT+cWR}jx*dYK;7(?X><#oafPw-$L*j6+KJ6-w*P&EmQ4*(xOQi3(E%VvP<9pn1iE*&=<^-7*5CTZi^opBM{8+#u2yu0<)49I(1K*vGm91^ z)0O2bT99mWmT%XBWXiLAhZbBT3K^QGn&r>eJdd;dyERW8%U_~-o@4>CR&mCQ1!w^9 zk+Q(EqOgkv2=SOf79i9k3Y!H8^DzEc{xrmoLSgcBu>9!|u`J&mRm%{b<*|l^nUBh* zaNN1zAv(v&c*SrL7-qX+;3vj(Nu*31Nd%CmTD2!D!JR1Ygg z58eUr!kn%^N{%PVRHxy=6K!}`_%(2TL1P6^A&<)zdTN~A(~6!VLnlFJrEQ3kr-jZ+ z{+76YzYnwAcFJ%<2wk;a^E}Ij4e&=q9Ub*p;IkVrOK^RVqk|oU^Ml{_2U4#@579kP zl~^wIx=y2jQ}3ym+atIechKli2LE_Kk_JCPi5vV4cx`Zl|F6G~8vL{#hcNiJ^PP0$ zQyBaN_#Za-wKs`t|L+<6Hv%4nC~19!D>zDM@o(>^!wGXglbVLPAI*ajWz&K`%mhUl z{DC-ej77r{+sb~1`2vgfR#5>=d->X*5$O;E#o5Rszz1HC45g@jFm~E8kR!L!Tf~ut z=UkAEVD+6^(eA-Ov=9ixen_A{5TBdu>|tO4x~JC5%gE3_0N;%stOr6!Tc3ej5Q)GM zoj>gp%vZ4C(lTiP;m`=o2Iz^T8Pi*EPvSHK)kat+7$6Eg$xJnhJp95vMDhIQCPQ(7 znpwRz%jCPB6=Xvg-hbhZsTIoOqJS=}4`l^?YK@B`iN<|`C zk@m{M`1(hu2QyZ*dwLNDo%5Equt&emyeTD5nE!2%3KaKjW^U*T)@tMcJ2`?O6n>~3#l%u~NnV8KNEsrvlX z?z;gY&>RW;DboEaOMwaE=Kuv;hv9|Dm?u%!<>CJ8g0K0n0m!cjkXPZQA)xxA&|VAd zSHK31J|k_DTM5sYoP|D{@S9D)-2|t?T%iEgOvSPD_>BJ2y z{gkm+`SWwoN^j_cREluQ#6EoJFR7Yev79Z{s;vB|umNqllB0PPG8t%FTxx*OMxCKh zUn&&jOvIhs0M!)9sX`y6mLmH9MZD)kaGB*S^D6`#F(1DWuriWiMH?>WkKr*42~vA4 zO$n{>FCoq-jz76R^u+a%G1&TGZz8K0n`dP%=bym62*3N(#~Lwe5k&_4ehCsF8NX2H zXtOuHdxWlxh02o`0w+X_!veNKah>&zCVv;sp5OT%yyM|4*IDeg-)?1=bL~>k7Mtxg zuVWI3jKmz|%Q?swbAUZjw!f5rc{VyzWt->KEI?ry_IfP68dRtiR$c*x68lJ9^FR*< z>K7=i$r&c(dpKg;9{V*QgLYk?`R>xoY#NlqG<~*BOJ@a&me2Y+ztC(xXMz@rzFVl3j+-LE|vuk^?})L+}+@k&YkllAYs9rG|$eYt+N zC9a>$!PXDSms2>-!^X2hVy@06P>u8WO|(ALTC$p1nN^=@cD}9^bz*f1KE?jr*6nN} zPW1<|j?yiEcDW#EY=FT)jRObG+kiImdph|7biU zCT0XDN5r_qjCC9mGe&XhMLk5FAuuORwY;gJN3bszBlLYBAsZ{w-ws2m)a&JszlnyS zWgm?A;g9R#9SEO>DQDtO!V|`4BZxS0whtUAhF=;1Od_&|LT%n)*bd3Bh1wh|Y^%7m;)fCX zOPGh=NAb{hiZdGP{1{Be*$B!u==vCqd$!fNFLWxEqW36HPf)hAv5ZbUzaq#Q0(iI( zz-6Gc`)A@6M3!P-$amUHqynVpJy)LOb$6z zl<3<-exA9!nr@;`d%V=kY~7RPqv)<7NckE;%A;P5qRIgpwzO+$ zkm{B`ZIPm_wX!{n7f_gWLR{SoM({B3Bl$z?h4P0EHkHmvUQJrs9L4ztMM;KEr$mDy zJw4(n1&qb-9k~eyD~GGK9}=?XSb=6lRuT}n>gWm8O?K1aa56mr%}yEaIT}k$WQk-%z zU%ihAO(8F63RPb{A@G+@t?*3uSm_0wFQ2nMctH{GhV3~pMH})UM7h7>)|CzVazrN` zVK`)dnD3%Ffk?(=jS!P{vU~KrGECM7>3AR~D_@yc3hv)VcXBXM;Qn`!zbVH33;!e~ zrr`d!TO|f_$SoQ}6o@1-KsDJbdZS=C`}fLKppZv9qI(x{`mo;`^Zx{T{y$6~^IOhM zAJgRXFF+sDX?YGtA5E$K>EkzaXHfc>nkO}+e~vz$gGx^}{69b+r4TAS7tzdd`pBVk z)lzW~^zl2e9YG%p{+vi3QTau>g6ixdQ5y<dVb+ zUt1T+uv@ST=F4`tTBT`;W8Lf>SF@VmE)33F)D3?HKOPuy{wLh^^6xgsCb9uH21J}c zB%d1*=hzL?ZNC;$5VkEdAwXZK4TkJ1WBraMmJYE?rUC2IY zIFNm3hLC+%3)weD^hE4fX;XFEV{DJm4RRJOAe|st?j72RY54sIG3JZ~2>fCT$|hKb zjD1G*zfi{#<=TvF$yAaA+YFolkdh6#tc5xzPXL@lw3Uc7Dg$I2f5Qy`9R3+7QFh`z zgwf1b0oG)BTODNy=Zigqa6V~2GFOEqnyVszkX#jI@YrN$Li{yC{Oy5GT|&uk$N-*& zlT7&;tPDqh>}6i?+0Tf6W@O_OhZKM%{E_J<(?ZsST_CA6@Qv@sF$VWAFy>W+QdRw( zix7JY_kyr+!H?D8PtiX#LOv{Zr-MCWr;Rx5ab_C!7^>@)h~Jl+vF5;9hZRSMP)QsY za(%}3t9gfDBTjJk3V)#b!t^xtg^Xn|OD{#-J&Zj_71XAkG1t2*#<028oCfT`;_}jl zKU(A2009)&vVt0oWp9)l|4{P(6r{!7`s1_VVR4uN?b3^|wl zoU+?^df7q*2naOIE)sbY{ij+T;5-zf_NFjYi67WXrPC{%?C~m6oJA&ihU8f2lkt{g zzBx5#@xE=tSj?bDT=noE0BfqtmvL)U_XOK~18#ew0w(Ff56I&$)pxIIj! zD^(^(CD;}9?j5)RqCJzpQvdcRuJ1wp>(YOS-9zEF>o4uz<}7jYRcmMv z4lxMw&f8YXaoB{;7;{rYEyr12vI!A2Xw?>Sa<0RB@g>#{>xOT60ShDyuT}<~_&x6L zhA(SgSs8zTjv?cK-J@^;4pcxfGhGMy0R1y;Q&5#;a}wL&>+nM@jxkySBnX32ML#AGJAqOOZeA z74mz1)QK)yPHHRAUdCb#^2L+6NXyS;P2@pFCktYoEXIPjYPlq@ZCb7kKf=p^coQwx zu?&})%d}iNahwr0KZ&iASSI~U>UMK(7PwtD6~nm`-FU9$PGTX=mL1NWEbmT{Khx;v z&c=*{qho>~Bt85pP7lR{F?)Ezdf^1qri#r4HfyqU_nRYLg{4J}Pqz|SGudX+ZIgY< zbq(EDvRkJ^a9!d$=o=Fmvyrw8XlFvyQJ-w+PT6MO2oByaon9=Fq(QbU7uFS0(a-d9 z*GqyMC2S_34jYC{fx%_iagz5-*|lZt5e0`GkuGlr7ScifO9VL^{?38t9U~80BM&Q) zYx%`+kYLu5p_4!IsBk>E4adV!%GZ@b`Fd&>9NiT2K#Fm=K%r8&KsdS+c&0Hl@zeF= zy-D=i_2U~7kM~i2e|i4wfrRsJ_u?J$aLV&;(!85W=G}q|v+v}&wC+Ekv&1V!XNNcf zH)#7OuP4F&&$fU6g|u(@W8(B#I#3lk8cw67!Rv;bP5SJ~d_KCDz#A4(P<9mOhW{ZB zZy>l~a{F+WHAdu#rfwoI0G06Ux5ez$!TQHnzbJOktZbyQc{Vb-Xv9wC5KSd@+!%le z>%$ixu)o355s?O`FIZ@y6(=P1LYu3_H;UP@%7jx7Co%OSrdE(?oT7|k zBijF);{C^d>!2I}TQUeg_3{yvc)`!bS<|sdeT47V;1NFo*^gXcwf_Nfs#&LeFzpG8 zTKgO>*i?Lmr(&itUL)X!-vWfdn*nVq=QTJ`$UPW#XQ4WB7YlX<*CF5@p$E{bauE{R zi7*#8CGw1ZStM5o`en%7atPHX;{R!ycar9vta+zsUX-V6Ubp6*p-tA7E824FGRJ2?Vm35KU}Z%}H8&ge5t@{zUv_4u+qjP;mu{+P$13UlXh9tX_xXxMOvk zF+M0z)P~W;P_#A?MQKof(xFO2k6soogfQfn z;63Ocg@dA~2l$IqkI>gC;XzI+j+)EA~L!*0$cQTxU9_R7n|7eW@|C^>z9=hBA7FkKe8qt}ZsZCG@&J$jYc{DrN* zDDg=)abKEb6W3xWpL)cHPNtXgw|5HZl4PM6bdlI#u~0}wa=fcc*+K$`w)#Jb@+$n=HT*e1J{_?BbQbWXe?6jH!xG(eM|lX@(FQ z5ojAQ5(XW{jd-T6FM{J_F-}=KAV-fj#-$F_D33z>;W5T)AW5#5UnQ=WnepJQq_c2G z18Z@(US#d{kJ3HQdpRW!)r+3zl<%J%ik??WKDE{FxCV}FiLW_0{vG5T$$)RRy5RSKxo-q#F;ekdp1*dQA-%il$&J*PmD7 z`UY!;ml^yZ!A~!<6Wgi7hGHe>=h9g*c~#Ss0YAtPQxwvI*`NS;qxIERZF2{(7Y_E} zFAbATg=0wD+y^sCd+7}Rx{ms;fVOgwPYuO1E+(EpR6*5~uqNX;+e)~$@?ODvD;4bq z4JitCP&0wH+r!xgM@_ zZ3h?StWi{+BwpVp%AL3$4xTak9uAstO``~llS;B=joqV@Me?3KR&vBj8Age@*JuI| z6Fsef=SQ$-R$YykH33<#Sw81|v#wLi+GhG&TweX}CVTm_P+8_iS|P#Z!@zDwv8&LE zFDJF|0?PPTsAP3py|9I5BH%){KvX7B#k_0SK6O-ZGNCQ##$Van8AeIZ1@`FZZeskR zPB+9EN1fi|o!ktJP4ra!NO^2^!Gug4y#8_!ktTZ`R zni4BbGfGUSIn_54)C$vFfeKbb2guN0++#KEG}}5&HHeSy6gUK~QVEafsHIrb>1_jb zR7^zO2!zYTQFl>iBI@d>9f7x*ct0GRkH2z2cN?V`-lG1VA@E1<^Jl+D_@fR`Boy#R zcL{%C3ZHD@UI^)Ma5|pLM%=N|j96)AtTZcDqQh*1^X*b_{bvP#nF%ulX)vjG6?-tiTxEC5)AjR^Gzj0pAD**WkItSaqya8!K&$l^&0k z>SCoQW2L8zQWRqZHIA_Z#B75EpVhR|o~6!F)`HYde~b+S#^`MWV^mDU*qxMNFNU!N zaE&BjjM^cLd2qPZpcI2bv)$>!WA_JTn$H%D{>!s`J@v9Q9HmT z!ojEUP$KHtSZPbFv^7?GK33WmD{YUJ>WxwqQ3N%PsNE!ef&?Ez4P~ZxqO1j}o&Ja# z0YuT;2BN5#h^Wcr`-&mzy0?-LMePVgZH*trps@)=QIiAXiA7H&y0-GyA18EClRy`~ zU4U~KK-cHM6X@zOqzh%6Nu1K5dP-6n4%%=fk!O#U9I;YHtdwb#Bzh`L0DqCT*@U~S zMj}TMWkQaT*g^|h=@u4VOi~K&9~GDMaw1~J^&}$Zl0V~JvE~p1AK6B2@ay4D)J0AW zG(QrfqZ9pnyd2$Dusk~U-}z&_sMEM$tYoktjmC(%)5UE*60Rh4ONv%jU2jn=%sY+E zoTP1@h{`#y$#yl#emD03n`8pq0+&!!|95;(+f2-b5IGw6*=`JX8p0b7tt_rGTYxy*rXmq0$?3R(+C(RXy9$Y znQL^1h@)RV1(EPW(pNiQu?a|~&(EE)gKzaf526`(=?H#zoWPZEC|t_)Y`}qAfu;zi z4(N_d=0hMf`Kaa*!*HHG61U86AcdXPBD;K++A-ZPK|e#U}~_GglQEutD+Q#^WpLH5ef9xz%3hT#v3pL4$xbtL2pIax@9}~ zp!C+@<<~%X4?%D5j7X%nBQ$2Bw=v-$2^~Ri75^EdH@YWVA1mnXdWv-zl-`c?r#I^A zKS6JfgbvNQJdxfA?NNFoS`hR`b0+AGC_&O2l~|DIAx>|eR=P*@An1+Af#?li-te5c zm@L-o2Fctp;7dAJKz&4zU*#{Py}FrN!iSY&Q%lb1Wtx~YJ3cm9%ygnfoHpJUkN6t^ z^Z?9P0KH5C4F?G*O-EP^L6)K<4Wl0&R*eo1$lEdi_Hqe3w8iK!$p-4MaL<7Q8XYFC zW5>-@6uw9N6N-yGVw- zO(qR3bn2TN?FGu?yjf8pf<;V1KrCV*O$JC_3~(G4G1VGEYWx74JT5gh3;tyA*FmHP zE$f)r7-9{#^IK}8TswnYB+DU~@KGJXI5n9~%B&aL4DOi=2Lp8;n`trbnKd}~T=gmd z2>=EU#SWX~p}CooM8*+`Tr-GUsDECYVvyc{{Ktin$Mu7e$IyPJ+YPYB%)39w%)2Sp zBtH3v{#BEI$+;*0-@#VnlmC=p7DG?|%vr2W&ogv}#FLkTsM}7Hi>#gJt&dLrmxO-| zLIQ^w*^#0mGdkVa5D^^Vk}opdzkBxo z%5>i?!NN0zPRoU?#7aci^4=F-=Hy=@kXXW(#vDu^b|y~PUk(B_JNm#lrK>r4=aORA z#tAG+-ydiW%=L`HW&_;pTaxoB(ju!u*Wd7~&*Zj;@TGkL)r)}jcJF#M--qKZV8DoCiU{c}qVVE71m zC1KL~6Jv_EVwA-2>jm;Xy9|cERZ1ta2G7InS4)8FB*1Wx0LqCRXjHPIErw*OJ8ws` zB;2c_9o=Yj^jX=_Ek;M{WJl}H-_b)-D!uWH7ajl( zxKag&iS}vOX2b3s(vKx2ADdgkpZpbJ(bhferKc!l2cIWEbjhIL9uwfKtR3L)rquZZ z!Oi2ID7ZfeaCalpb+!%QJOg?+Re-axK7d=3J(j2p4i}n!V%9J2&ZW-@=-ss~i z0w_LWfJ8z7dg}n7@Ba`(?gcDtMY<7Uoz1+$DL{bTalmc?xRn2&DBza`VAMw{_Dvp> z2gi&1oL!W~9*Emy$rmTO-_&PQ?wYJkX$9i?s6NL`A8FW>UP#vneVyh!MPosp4OhOy zH%_%PE2n|78_Dma$^EgF ziTh()u&9REA3Lh;*g|yZk-?8zunt$cFofwWe*JS6I`AiNU<1Fr71QnIEwFGaL^jHp zI6%5v%HqMxO*>Ho3Ny0edfNFx)C}yNh^OQ%c@|n0xsz@{hobuv;oy^KQm&JyVx^~z zlCINJ>`H-K;^|Y3h#FjqmjMDRFG3$# zuLdX_l@TxdMgvwC9BdQ~B<}b>VZwzez*0{1#E2voj-NSku+<`0b~yTV%X>(omGP4Q zV{n*rjf)AyxxJeB1$rdj_)q?bQHUwQJ*+UoS_O8`fVCi{%_6?y#jl8@3*Lbe24ez$ zM2W^FcN@wv2Vt=r@DVT_7P|l$xVH?cT~HBuUGR5faJeY^@HZS>jlUFrC!OzvZRs4B z4slIL)5!H!d>fBaEQmf-AW`AS-vgIeIyR9*;RZH4I}n;y{uJ6O=Eq)+M9!T=p%pc- z@2l%HBxCC_K0aRaAOW5y1D0fVS{vIU7meg^nNNmEf7a z5n$zvi_}Zevu+f*-yC|+A`dL6>wg4vvgD7NKK2;y$x}mMuyJ>lUeXfxSYe~{d9;A6 zv`P5@+c3#(r*)m4&Bga%S7P#YT93M@?uEu{;g^z|T(84jTq1WvCJtlhHjAR6_s3KgFr@4F~LLv)2>u&p8*}QFh2e3z%KB5I6Nt$n~vR!MS6h?ZEW&Fiv=>2 z@sEE1#w|7?Kt2x$Jgx<|6BY$Z;#{;6ZZ#wYjB-(1`8MK_e0^Jti_#ndRmdS|aM4bx z5#yp8Q8Ug(?|NHu(aGr6vbu1v-gr4qdvU_kb$U7o|0HI`c92KS;Ga}a@=qd!1hzLM z|D=}%|NJF_t_1(2JH$VUI=?voT!aM<{y7Gdfhj!qxR_WV#6Jc3gMSK)@kM00@1QA( z^Ute0lKJNYcq;kla+C<|$SZ|XwI~rIl>BoIN~1}1h+RU{3xa8qWAJfNrj;p$ znB<>N;ac*~r^RzxH*&Qk@K5Rk@y~R<`6B#tL*04!CxMqt>jL=a4}jwS{Bs@dN&XpGWn(%mAb#&g042UL zrVfnb*5L_^gQ)WYDQsxQ@tf}w6;IMF`}yqigta$e-vH(s{su z91x^*Kfx62CCW;~ujD6RD~iP{1$rJBf|-=q5sR;tY%~&kB_}b{ORz60g01F?V9Y6S z5d<5UXDiaI`G?b2XLoh2r$t@#yt742MZy}Uvrb!I0Rfn(+5%L|`81kO-Cu`{V{k1X z;IC-A2*HD#F~h6DzLES%7?~(BrvWi%%rOl(isvPdXXH*a7Gy5+=N^=j%jJL4cLUyf zk?!&M-onyTS;4HPKIy+A7H=-sH}+3NBDCH+T$oD;$6l6!IH>SULZZ;KtG zQ!dAFZW`xh5KfFEGxOz<8FfP`x`@FY;d!Le_USexKB>nv;n)a{D>Fp?BGAt&PtIHk z7aJ?uC4qke>6?6bX8H!SKr{O^QLN^FR`YLhp2Bp>h)vDE>*U|!Z)l#U)Y=bFQGdi5 zSZ6i)?_lF-RvQP20-TAIEZc>DEc$tA53=1iAVB-T1H@}-n<~}o@^A6o49sk;1)gy5 z#s6%#3rDL~DX0*c>gDdoXu;WK^)ykPa(z4!uWkb-p61hDA?!aZcV`r1nj6kB%`^&3 z^PicVX86m(4kR|*vaKj7#lInaJ*PekIl5AaO#A^z;vq@x)L{OH?>{Kz|4Jb11H z>DB6%d)~!I;(PRM%cs6;*6ZvuaOppQ3}t$K^>n(^fWKN*i@vd;{(aOuqSrlp)4S$W z_f@!!Z{B!%y%o?2z|}foK1SNGYYOy?>93y&wu$V=kvD+VK;KdvJ0)r5M?M_7`==a8 zH{roVj)5wql7x^C>t%^Tb#20_ArCbEK$pgLzVVv@J*nhc2*Q0);%w z=#A&FD2rSM9;+yKBKvb-cNS~bz2+#5H@dxij|Oxelu6S|wve~M(-HLv6m^hG0Lj>E zg}(}C8q9SuJ3ml$Ske4jaX?)2Z}VM`lUSD)l=77TR|-@hk0OG3#cOt)cfGbEg)hJ( zFk#R07#~vh;_juTydbguWwO3F3X3$GuBry)w6c4)sG|^`ia=-wkV9Xd+2Tb=aXtSg z)B{0qHaC#u!gm%Pe}|+eq(K2_x4t;a*Q{Wx@wM=!muM~2L)u{BMED;N=_@dFfK|aH z71L9@3~>o{@N_tA?3$`m5{eK7=)!Xny+HaHX!=sINEFBj?pF{3|0W&J&4}O> zofEn6amsXzRz-Pps}!V7Yc8~z@eMJ&kMBu3O#X|s?^s|= z#Buzq`VpH+4Xy+Em5TggI8jzfd1Bhs;D3WH!7(Ok)c%|^ii8kGfJr0vv8d!4)h15df!^TDuNV`v6*OrCV0I^&)O**HYp(WK zV4*Coo=NrUDecoR+od{Hjn z!CYXB^Z0RudqSYCQ{dCpZ?}52TeNl7Qf-C8_x>6rn#f+o*Vc@j!#M70_;7qU9o&cf z3nK9XPNrwjQFVDf(pxIMHk8N#B+goK(qUZSmMeXk7%oX<1!;z?i&^8MJDa3)q^2h7 z9C;X}1O{4Pjc*(z9GdC>ahVo8Ha;$sR=<(zmeVc%`eTA<12@qX4#rU;*m8Q#=fOo+ zzI-cukEso~Cfk`W#F~=t6^r*A-M=&XK=TveCf`-qxAk9xVJeX^rfpc_E3l~O649O$ z$Cyn*D1i;|1-OlSCmiv63B#fDvBGybg#b(cB^~=W;kd7GUJjoAb?kqW0ys$e*BHF1 z1TQj~iKMY!{^2jrXUsRD#vmXiJ-w7jPlM*mqR_LxdpO)b$A3p+(wz`VL3OJ+I zrjj=GC!{(Br@q^s&DPknf^V%GwiT_QcHgDpfR*^cfsq<##%g&ZPAida&H zDNSsF(Es5|2tJP~3cj@_2MJyyzON0I-4zFJkT$j+HmXUTfkYLQJ1X#cq&p<~K-!o{ z8Ed4Mjn+dYd{3|xpb73C)Et-{w&pjK9TxdTs;q|X%+f1N zr6RrTv@G-u>1C&7(=SVhEVUd;P8l0m8%-H|B$_goEQ7&P#wIJ`v_7LtM9?c7s@PK! zXAAM=Q0?DR5t*7Lct6X#?T8#Ey$>*(2O1u0t!Q zuv7RXbPX+2%347`-NWn0;-%QPHC{#j#fPw50gb?D9_Y&0E7OYXUaiW(FZ&*(BfdzE zds*{z+tgw{g6^PZV0T8dl8)9FFI?RsFfzixk86`rgWDhw4YcuUgd>WneL-OOr+kcngWMV2?sdOI% zI0y6=ZL$H7lvldPM$%n40jzWf<3WGW7ttm3$I;626juluJ>*?tZ-7E8vgHhO&9wS# zNCT4rqDR?(g7ja8e6k8uxZ%_Y2$H_PY~*E-jU+Hg;M%IbjKRY3pG~o#$vYW|npNK=B@h?Ot3(@Pu2F+L22pL|HT^cUPAQ0h#OhKwR z9m6vs*mx4Ycs zc%b%*Kue@o4HYQ0lyGQO-b zd_-rqjgOjzZ~E1t&!xQ1fIx_UKe`kIisbvVGtW1>PBFVPC7i)$*C`(+Czg=%?yp4& z{!;s3`V+~!g;w%=_ArDM;xjB6SvRi9$X+u_q#YlDEp1otO2yfWGo_!-BmdfKe~=Q< z5C#6>uh7z!c9DgI96_0p5zmW$4e>)D{VTG8SsBQRp5ewih-O8X5YU6}ug>m%gIVC~ z!b&t!qG!ZXqTBsfBPIG*Bs~J&_#xo=EVH{i1BVpxI6NaGOOVfu3?ZSqvj!D$OY21f zbbMSZnvj>eQAW~if3h^&vFd`Q*}%j!aS9UlGuD@b2*DwfT)m3~26_7fT}tKXI+o%} z!zaEP5frE3&WgVUPMz^h*_85)H2+nBQ=j|3x+%~6jRLd(OMz2oeVLo`Qod1;;=d?x zD&kW&$iP3rl@X9Xk$1?bX01O66D~ z|1l1;#AissUEuSq#HShfJZs=Hm+*Pkz-KPu^Q?i-++=+ECO}YR7dpfAwXDoC{x|Y& z$+rDLq+J3#SvEyQ~^>(ly zy7DRu&c89AB{;)1D+P~Qe6HMFG`|MF$uRhhGL$rtP}}_is_|J>NEFF>6;q7KNdEHW z*$Mn*@O&YZF$iB>F6luk2zzBJLkiWNoV_pac_y>w#@p;GGqK``Kd3vE8*_7-@9X`6 z*<^OzX0QB&RrQw6)$!S#Ltg$e9i%Oy9O;>quF2XAbs@==BTuar2}i8qhcl6vo3@&D z%7fimk!|oPV+(=5>Z7S5#ZP<`659hfRpY;p#Jf<@n2>(-wkKo+Y9+IxG6bQ2YQ45@)3*aMQnDMkfOh^ z1;cTLR@iSc!SGv=4u=A+QdkIG^zy%b3q36A)eEhqUSQPAAN-W?*(*}SU_QDnluJBM ziR4--1IRdSn)V$auZQJkOla0hYz)Em{!V6Vbd7{3YI#AeXX zs5t%1A^Iul#kaSRuy~)Bul+lX_sIF^2bolAR$H@g{l22seg)GSXaE*?#k3d+^#I!@ zzNykeQCmO|+(!s4gZ3(^$8AtgI^6{I6ynRSZ@4p1H(V&S_(Ewvq+^55ofURZCU{}D z$jqYJ3p400y*H8Gn;b5jD4rKi63Y)HiZu}>xI(Ktft+Hrg!Dcj4un4pq{BFwsVgt1 z{ory?1t$4WX`lgTh$*R0=?UP;3UVmIK0{A2C1Cs3y+k{R-DaWY+;dE9=%FP4hMeDD zoOgajMzMdIKl}veoiB_(U^_8Qt^IABKTM2G?h!&Z|J8Ev2Ygb2SOl1ZnBjr^0r|`Y zf5@d727l;p9)=6EtPRo5Ear014<9!WO@**n}RtFOJhw1q9`PoQJ46Ton8BY*Hl7|#L2r?6So1_?m zcg3pBwyL8FY_Qw}?Gy+SQtfW=m;xIKBL|4BATt(8A*C{jLNEhJpYaB77;N!NzHlKD z=-bH>sPk=4CrO|@_%GjH*hvzoGb(|uT9HIQg_(m%Aj(|w@)Al#g>+k1NOQqy*7O3E zb`m_DBzP!snWBwFiZ1MK%z?DwVDm^=HUar$r-xiO!}|nzGbPkL+I3nME&}7f@s1D) z9$!cZp2_DFJXhR52!HzWoJ9R)F#8C3Y!=$srRvV6L;`Ax5)eblE~$vfr#q2+@IfV8 z5(Ulk@*obDN(#Dca79M=q=hB}rOhTk|}?=I?3E=8Zj$>lCVE@SB{4mm_Fl1c>8B-4r-rIq0~-hFOD zF|aOGl#}J46hlAxSJTHmNbPWe^zm?J7$17|##oGSIrJlu&ijZ&^m$5@N^goFCl~BRRhW3Z(x2GKn5G{?oS2Uri4s$VPgB^dR|#_=W{p zJ_Gs1>-Q$|3*r#?hQmBa9UDHp{I4N~&*7@-FGSu48@m8vc=WFR#Bd`W12#m+|81V| z!O}!x0ICiB<6lh=o~{d~2W$+eYHeYRKU7fCNFgFTQhqcccsVXVKo6U4S2p52?Z1RA z9LIsk{*=&OaY2;u@cjOi@OA#Lql7pAO;7^)Q>+!k;VqWmNbJSlsk*bJ7|!D{R?2aV zUyq_p&@ zaHM#~;Vdh2PePV}gKRajL(B4H1Wk`8XCCl@O4u?Vexnz$IyYi}B^|C#1ow53E0R+0 z;$7Er#fMK(E?z`muv(ncAbzp>qU-O=-UR(^Q2#d4HbZ}_vi>6~+`*it``XC@&^qU{<{msSj&Ze0ck8I*`b}H@>F+<#&+b$XC9Li8RAe< z5^DM172`Q^=>uAD_mV%W(9Y@T8@7`K*?x-DB;X?A8$XYOlROatejL))GRppN0kB2( zip3e`ikiZSds;g!w~RuDZ;wUd*InmzTgx%y*z*KVH_;xWrfew_eMPR9yZr$5q1lSN z;?)vU8FtCI?xZ8Gdu33_L<{v#iQGzct=C})MSb}#0ejaZo)u1f$`jBDpH}v0j1WNE z_0nDOlB5?b`b!ZraH=avm?*CFg;7bYaQ#!T3Hf1sl~0r}@s->81d!}ulxX2xb_edf zSSkziAKK0Xbj3aLqw05Bp*>8%7P?bF@)%*B#U=o~*KQmFjOJ^&(R^{U$~!Hs_k!6F z5iubz_GAo&Pi{f`KcEF9VNK|@!b19r))i%CuE=E& zmlCxr0RfTG;wd!|qap6X{K2!Q7|Tg=tpv6PTr-+@R6$8e>*JF56@u0UA270cLZn8Z z&@KyZixjGAU$8JTiV~%i;HNTd|4L%2UN@#VdI=?YOglc_5Zw&whSMnI?g45-jcHng zIFZlbwa zq@g#@O|7a~)&pe+F~3`V5Ca<*sn6}~rR7U4t@Z$Kb63}Q%6O!nDCKYLPJlb9^@$N& zyCT;$S=M?k@ZsmLJhHnv99sI;St%gNLG>*30RfsRZBM@(ZQcfoBPk}rjeJKbva^Qm zf0F<-(L=$d$VWHuoGhxrI*-5oZmwf@p{s{=2nVdGMF?%hN<$lHG-v}2PXCfs=c~{m zU`*)UhS*)B_@GpOP;t@^7N$Qawd$(ER_(;FeF)Djkd8{wSl=A13;Ww%rw4@Kq_gx> z%%!d6UfVuGcPD$sc%!2U>mnnn_cUP)VT*}{C8iZxcAtX5Ktx)Uup2%H0Ici^?G2nn z)IRdc-oZXd>N5<>NM|rqti*r;L%k~8Xx}l1TI;H;$yJ13A1dB|j^P46iF0|U>hL?B z8LtUjbu&*a5u`*cvB;XdD7c%i5q7IOsrfpRNn9Xb=UT2=f(Wd!aX06?tRD!@%w?JA ztx^9ujrF$9)seg2Mj$13R=}+O*W1@b5A(&$dV4xjxUSkawlH$l48eJ`;6|Zepxn9( z#*Bzw3hwh*SON+V&5ae`fz~f^m^y42FL(E;~-snlp5*uFolQQCjm4y(v4(S?RU)I{sr^W#|=db)9?<~ zJKUEVQ#)LLX^?IX#?Y*X$PRoh3&o6*uC-M!nT54llQwDG1rpxz0kV(|TQ)3fNUx1Z%Gxwa3+R(jc+56MU( zW!ALjL}A5~jJYl_il5~0cj=%507?mk1W3z^(PJiumq&P<9`fny&o=l7g*09p&EvFA_{Yo|Q4qeNiE zD!40E-i-GPnejICmk=f%J>;B3s`{KlE}1EewI}-&;z(~~z+`!n!vsHa`Z&d5#LZ!( zA;_?@C#S!BGN!*jKJESn`t*0%jK5ibzdQD{``dfk{VnU$-|p#uv;Mv{=Cu1;J|m6) zAA=7?efoRW->$#oPrtukINkmlweU81k z7NK=nle}=(9aZatczeR*X~4DTV0AZN>(aWc{s~zF73w3 zWk~hR#zgf(>7TWDQKGt8UN%{`&+HZx7Ni!Y$F;_+rNCv#pf$luTVi`&%t2>~90Qk( zRSiYTJz@1R7oRLSOHKMPw)LX&u2j^Yi_rqAE;%VpW1E>G5wj!#Z7Ju66Rj(>eU>|A zo;Ci&M6cF_Qr);6S*+@dM4&N>jDIPcw?5(w|JwVZsoI)u|5O@BMBp@@vAx%T3b{;* z*^n#Mbf}-ETdIPuMZTaW>t-)k`6q4l%2cZ@(&|jHz9$W#0cec@C^HZU$?VWzNK8#g zYMb^4Nc9P`$Rg{enZ#g@hr*muZ&lNrwhK?%_QOo09`T>*Gi{$>qZG);C6=aZw3Q25 zO*3t-EPU#@H8W`~eK6Bwm5GmqJ_Jw<9FxdRjtr`Pf|@7d5lq z2hPl*rzbM^!c9oNLTj2gQ78+;VH@PcML0|h+UWfUO8QC^)$$MDFusu}cV{Yh3z;LacPY~^aJ!o7Gs)}vNKY=ff$!?dtPL`v zcx{=rRxVDIp&Y*6^Blouth4CEmRIVQMFwZU(y>NguN4p>e=Mc{YXvH4 zmhm3BQ)>lg>PfkdYxu=C=u*j)hXMw|XBz`yR=>JJUUwZcP5xbu3lv<9*P zomkTkg6?AU1MS{6(K7lt26x@c9IY%uQ{lLce6mR~QaLjpd5!7$U<2=O{R_oHc9|$# zz)}}lfM$UMPTGn&muqoNI)Q7^5If!DK_170D=%kw^|bg)T1=!(PNiA#pFyF)RT^*I zaqsbS&DK*_HxWI|&BUWPl&D>xU({;OBG%mu z$O|}Wwu~_2?Zcd%Q}@>m)5|b}4AYucspoduPXK9!y|tFT?+CItIcTkvi133%a}=j* zj0$xT8*X8u&Jf2sji%fQfD?uL5Z^mSD8u?>NeFsYJk)*$9vC<}Jg_Y>G z?A0MN%+Mb2<1$SNGJcf(?kVdza*In!a|ci)8@qjNx(dMWrkX*GDExMz`H^DQ@**C) zS}KXlVW4fFk^X?fx5XD@3~ntBBwQtQ=$81TK@wNxOs&|{g?5M3YKcnQQh5wY$ltTNF{{#o?W+z*h*y_ckF-*b5(B9a4$V5Q7=Sq;i^nLC1l8-m2d_z0tNVf&r`FV}DaWQ zJO)MMEu}JkyK5x7Y+%5oZAhznX!=~*jMoDf`vR^w=)pM;n9WqLkbW&M1!dB=DAyT9^Tsg>L=tCI{IfSp9Z+~4s zU&OV?{-r$Mu$~TaJHUPoe6}_`U~UWSRhac!8+Mx8Li>Mo;e+PZYrAw|(dF>%K>J_x z+X{0#$iAD~e)*7kqRn~v!bi}T3=0!bPYNq79%PtQX#OR>L7uQBT##}qJInBl<~GAJ zCdse~KNAL=D+822KUKbeC$v5srX$xk5XaO948`0f3=m~)_+OHfvk#YS01VPr-qF&iem?RbJrm-obeeX=y`pV0@(E3PAR zxiOs3=Sm+C=RrXK6#SC<)Bb9@exC?@b^6@XtN;0HPrLqvTbfG`XJ^7~GnmZ1!B5xh z^nTkfdj2AIXTXJWIg$Tun6XGL8SK^7VluT+O)bqiGL_00)m7L_y-9g-b*;E29OcA< z47!(W#GGq->`UiDgrzoNChgB4VoBsnH*HukqM#eu?hk>O7Ux0Ho#HBM8{3@!+eQ|}QmeBo5@M}+Okr+SZ> zO!=waV}dgHL(2qkRss zDq6~tSJ_|Eg)?hY;BngRU8dW+`V{S1Q$6zztmoX6iDvW(>Nn$gd8`J=DaZ57lZ{ff$6vKfCdkjjFN*)Lm>oQ{8AF|2VHDKm;fIX7g&N;>}+&Yy$-x(Y;_Ia`p4$C|?bTcy1s!T-Oey=x8rpGJE!KE1wavaoNH zpKyK?SAX*Ph4gGRpQYxvNalBidDhSTiaBt#YV?-xiT&n7M^P{|S5dJ1LaijIa=HW3 z%7*VTKl;R(-tmR1Wd3RTA|&}tadrhFA4E)?s9MiFo@zq#GyW&*@X1jbnON`5EdLjcTa}8_vtrvH(99 zHGQlt=X_ki=FQQgV=g>dwHbPt8lTUe$8p9PUusME`REKV7-H-Wk1KMy8t+3Lq`{5H zdqTkOQn&f&&M=t8t7J)k$9$(3bk>%q1_H~$!VlzQRPIh@u|^tz`hB4z5#~FyzgK7Y zkN$*ZZ^c$k;r#t!C%n@6YL(Bb9XF;hTBI6hs;S}f=i`1=TS9=v+KPCfb=4#n#-Y3H zrL*WVCIEXd0mxx9QkJTj`J7rtpNFdS|OIb}NioOI4HodHs!79S3-C&TFYkj(KKj z?S-U0*@G_W+ukg7fS93CnO3Jsi7B*FttwOJ)AnhIGCw{z4F~Fmu>Iqa8dHc0)KBQ4 z4d$hKhhQEtdKz`vcbZ2!Fh-ij3w}4jqUH4VA5|>@gERsYf`%$o$l8#r(gYs zM0)>9-Dw>{=o`$~Nc#=*L?WZ4d*w_XKSD3h&P-n(of_U~HnAT&Ri!tvtL?8lb!8R+ z>s{vSO~STn{8*+-u;(~UIPXJ`ID156|L@y*pQ7m_vx}Upf5QKn&SZ%2)%KAq^ysr9 z8VNm`S|LIKVoepN^oD%{J}%IJeaw8Fs2ySGt_e>-*r|_K1YV#kxFc18IjNI#wFZO|-a>_d~UTnUY*I$somC&PIzs^K0?Jr*JsLKu1 z`{4ol32{dIh8_qU-la{To^-FHKaa+C`}*PB2Lr!`$m;>Ql|E(2H%2d~MoU z#CmIXDw=uHiVjg;SL8`mv`|-6t4%q&YiCl+6sMM|lh&d`FblDN^0UsUCz)ENn7&j| z%P0qKrKwu_Qjcccj}@sJDoqWeObw;f@UhX*4CKeAYA7}}qyyb03PfR^MMW|QDfl;a zrZdj!R1Z%8`+d}?d-+m@GtRJSW2Wh4_34cB^SXwwq-r>EoTo`wrl)EsGJQBP3R7l$ z3AYSAwVUh|extD|kuRnLi5hJ;pe74DlUBOd7_|MF7AEc{wF%Ng$1~_G;~8XbGa>QR z&nAhO@qJjWQ@RjYO0?egV+6~v)Vp-u{twhSN{KvFCg5@v6ZQQ`=U_W8H3X-Zn>ip( zt@&p?zLASWOls2ep)0~P;Ok=QIkD>N+SZf1N#wH=W6!Tx(>5jQHi@C9{mlyzhE3aK zI6rIJ=H&2FF%~6QsV%JF6PM{u%}>;nNT(7trMf3IKG!?|Et6nm zY<;*0n46=CLJ>EsN3^sS4n7?Q3{&ikH`Y8I2FyeuoMYW1a$@_7kQ3`3ks#ZDuP+4x z_H2RhJv-&HUO#<6E-w@}mV4IA<$p;5%u_Cxx6`KBkLceD`vU#zv(M%iy)S*viA^Y2 zCHsfJ{UyvA3{DZX6YLoR=N|S##=V4&>cM(rXbR&DzrHfVug4CK=wHMcpDP{}#C&TT z#dzX#-@tq}-y(v16$Z?XF#YD2$l2_QSqi_hI}zcK<91&+-}_*k^EbN4?^5puZLaiT`- zj^nj-Rea?>bShFq^kAgsmW|@Dx1T~T``h|!Z;fgc|4rv<9ILyqFJ2hOwe<+gWUUZqy|h) zHEI`v;)C?yGqXLtKUORE(ZK_A*`m?}MC_Zv(YNR=(`(F{S4jYTW~Tr}Do2LP()fDv zuyqoykG?oR>DncKrdRT39%v$|V?a)>;`$eLktM>!b98b=s4o^-Qv>Rp@~wozEmFHo z#Md(=%wDNg=MK+ku($pX!~}oOq8Ms1t*obS|Dd`}(Sp_$RmqE^5>q#z?FU1i_HcOF zMyn|qd}T?q+V+G@efiel)BXu|D#~~HYnJaUwXJ+>b=dNJCfs1V5tkV|K%Z1p7cV|A z8EB;|tw*92Zr|!(JDR71x5meZ50rByM;ay$r&;@E(xqe#e&COfUIo3Q)prJ4RM1%)LZJqx1SLrTAEWqKfc@7ux=zR6kQ+rsm zLV-nVIynAe&gf%=SVGYOUjjfZghQ}nV z;rRTqb=hGJ>C_13{-3g2b4PD_Y%$%EK#I~>o@tD*l$jWc?y-5P7>YDDAss`J#wMg= zDAL%3?8XGiu6(sO?`LkBTk=`5d8((KAoXXdW}Ol8X=59jPE>(1!kuyD_a_i5;Aov1fo1Wf?Sd#Y5;(Hv?FgxTYT_@>2a~?Qu6>JnpVexhB6F z8A4dXEVtxmaZ9e>Y=!Qf-V|0pog(CDmwn-Xff%!)DqGrL^|w7qrNMdlM?NIA*L$rR ztT#48T1aIcwqGiN5Q|Ft!@<0!OPyhqjrQda@wk4ky;j1Qt?W@XW$NnmDy%70Gs?t3 z2TdR!#p~}Uw@G}~rbMWdTO1{1zr>yKerU=WRQX`o+HjC3_BostRdf>@c3CRkBe)N+eMlx28bywidBa7?r&-=4@P_LA6zuHeUbX5fpl zw3x2A8`ZM_Syr3lmXS|A)bG-68TpI(0=3m7{Ghj6<2&LL&q;e`XlsdlBiHG!o#g7S zy@on|DLxyuQ>ei8U6**m4EOLiURxb+oap#)5Db41krHU#V^3}tt0neT;<&ct(M~Fm zD>fXj#_n7w-k&VlWMr^4nXXGDgI+q+qVs}y&Y^T* zRZ)DlxO;b+8AmRsXMFAh@ld}rE{=tC!OZxj;E`InDYlCQt*~?5oGc;LDP^#}%_xJF zECLMzdLr_QD;p}gInyJ!G_v{83&s9kdt(Bcj7hf7L^nsL3F80{Tb25(T zojgk+rCuz1q=!t&ps@XWA>G>0YM>TD?MkNlm{CA4_fE~2IDRr`^b0?&$pe$-3=Emm z*~;JI?wGsV8ec&_c9Yh~YwzDqH*z(M+LYl?X~vX6xd|S5M{_n`DVT90TUo;)q(8Qj zll;ZPSe9S^;Q>ErFTZDF$Phc=J#Zbklf5}`&H2PWf^o+C6U)4A#L-2K_6)kiZen&+ zd0&MudDi=pecoGB(YR|(?{#lD1ru5cPIW}=_GA~|Nj)BxD2HCrQ&R#3-ES_)YOtUF zWw%d-Kg%vI{p-o?-}exK?OJqa}0v$J36o}}I<3dHh`QWcH%l_!+S zblU6(i!=Md$>qn6U)3iQBUfA}#NQky-p4bP9?fpF?>*mvU=DiqV;sP<7 zexYhQtUEh28WwkGnkgw348d%R-FZ;Rm|k%;_i8ctr`6;KteRhrafA6a52zXMs>z3t zgcA*Ji~QM%B>Ya&et50P_u9?Zg1VFMbxuT+?{`i_1iTi+)uTF7?*>hF;yg33TpM?7 z5t243%mAM&gIaR#x{z$@X-GNPJ+aY_IyGv3k@Kn?kT}R$^K;H}vO%1<=5})+?r+UG z9f!|yN6u{C1YBm=XP9;{kcMT*^p*Z)%sBnpbPyvR8? z)}Hj>I8GlN+e~eG0c1iv`srjhT0Olv+QPjrPdwVtPD2 z`_0q{(kp*dqdh3QpfgLE_2gla%&Pm%r%pLufl&Ji_0y3b_4A$d*PHI|naypCv(awt zr=;mnray9ora#c5=_f61=w&fhR|XzuHqU1NYP3sF`h}qfn=wxPSw(2u;kg zV&SRE;GxL5#{OnttjpmQD9GV+u_yXF98~Qyq1wK2&5lS}NjpyXzVg^4%TmgP~q5pl# zWD_94zYgr~Qur}b{{U+DD{um`;6e3D*2;P;N=+`dRVTA#OqgeJt$>r%tYw{{)L z3nu)r|CZjb7RK^A|Jnz+>H2-%>ZJC0yU41$h$3tLou^o0>PkKEgv+hP7sYHeG!MXDnn`QfSGroMsm%GNuVi&0IOb$xm3YZf<;UKF zXf*KxvB7#P`p&%hb2y_K$|9%IFiAh>z`^2SrQg_364ELgnvB=z6D6emTo2)#X1U7W zCa1d@^rMU@HReJ9of-3`&Y0iQV{U)}f)#G>^tZM0;Dm8sVct9AuJ_`zcNzn)(gVL( ze@o7>tK(5PSyEfd$fN!Xgz|vg66q&3emSS70YDJ8k)0BT?M1&1!}d7|!}b{t!^NDr zi>(PCTAoe8=LyEvrGv4l1mW1!F}2Hy#uj`r62LB1*RLb8y%>GRso!2+m3bqJ zVF19gYp@?5u9rimZ!(b7dtZb7ty8@(YOwF@?>)HfX#c%hq=>wTF8NSoqdh5UQ9baL`iHz7wLE6=w3SB?DosdC4$VAJ;KxeU|4v zK^4O3*Yv0^=cO}C>UtrgCpTa)?=uDru`b_%4&q0oCYixV8Z+~EyeGLwnwCI%srnIW zUhg6ENu_<;M3+laWaRua``4S9{VR5`sNXG&dT#Tq?iLZeV>zz~OlZQ_5M?Phd=2?z zM-tJ>gtIasu(R)pW=yc=TaW4pSi3}oVu$UmUxQGrJm~VbKL)VU(eJvr(b4br>!Ys# z(rMqmX_zBRAaow`-gpget|H1{$NAetzPnT+-|hG)nUts{zwwBNGGZ5^e@RUHq4ZY~ ziqIor?d=&22ng&AoWA>s+Of^Vx_duxV$2Q$|BG+Rk}s8IH{*K6QtzCA24_NP5c7y0an8a~r;f*^aeKAYnKu#X9ibz`$` z3(TxZ_(8}a9U`|km0>re#Y@xeHE$nJHj?I>kC}hO6LqCwdv!CAu0I&t?h_3Mk=?Q~ zefLp-rDbi??Vk_PtGo}COklSJ?{dv$ob$}wZ20sW&jbr1F>1asK(x2ep2-P{;zbVzMboQJO9e`qZ^z@)IMU9dmar`IZv`70C_{+d93%&N zWEPfqaudPnD3Z@2sU57o5SSjG)nH%yZ^FDtSh;d_K14PU{1vI%mV4p_ihcB4n6&tq z_zaIEfWsJd3a#AX>HPw6$>`Y_QhY|nkUcKb2(e3xs9tC2Q@SDD%08idI^ot@k=dT&v)Ji(j1(aY6PW;_tw6DdW2jxHn+9}IDb zpN%3go<|O89+kvz^awA+XO{<$;ZZPMK8*wk?f$N6hRbs)3Jg=^t0|1%7Qk^XJN*3(RTjGSkxK^hCF0TIt;cWPvlkkcz30qamYr-7hEp%>`dxnTEwV+tCEU}HqoR4`qilp}Qg@K} zTg-vaQVlR!x6O>7&54y1Jmll5h*!?bvV9b^+Pvt#oP5liw|_tPetn<&nSJg@_4)q8 z-1oTqTfQ>;y&mj0w~Qui8t1{Vy%u?uL25XV_iM+wBXwf(D(-#*!73HVf4+ARNQh|^ z*F(TC}9)I~+=0(WWoM^mYbN^=prW!&);iso9u#txRq zk}DI%dIj5Naqu;No9NPGcM|t?h8LC>eTgg}_+B4BrILRHR!L0=5Mj5N?R4nKXBu_h zHxTh`@+&>;$;#Lz5uaI7Y^9~_m1Q%U$gp-%w;HJto_ZwlD$Pn*pA!42^$?b69;Q6V zwi~%n&fl*G-;0zts;ipp@8-OXzDc($sWUJJ)+c%eEsTh}dq2x>aghG`+l86tZj_XX zU%|Sn^{A)WE!d(X`jCTW6oDq*P9Q)T~JrA8+`j+7dIIvL+}dVF2!_cD6MCs4kb zQ5DB$OE=q*W{Z8rsQ!jh37JT}nm6Bs)sa!g4i@vgM5eb4ID4>YFf`R{~sBF!1X}zAz&-@^eY6e1YWi8#^HtKRx(7vkP>|gT+tDMcY!d zT4ZKb;8&)OtJl?4Vh_LgMU0@aho3$G`ph&j&&f$L)n$>-2H%UmL>dQPD#!?Df-@~>3egBFpeMQrRYoY;_W=oY@p^m zyD@WKTYXSYrTrgiahrZQwl{Mpr?uFs;*UQhm%Z%I{3zAHMrNg$7{d-9SuaUmRI)w z{uYk;A^A*dTo|_W7h(IcPc!%R9kJ~JIo4jGzAB|p$Ho5xfC5UXRYlsj_ENpR9Oj?N z7p4Asyf(iK@=K8EXt8#)eOhjAubQRy;#hqqgFC+p7IAcI1NP z=c~6H8tuFA>8E@tkc}5+55NecF^_6Z)sKphOUrXUbyF>073Y3pe;sK@3Zuoi437bJ z8cfK7A1%LBy>1M`&e!Z-d{tnET~2*~3mG`^`5YN-if{ZTFjK#ZJ?mfnfk0?k;o}-m z=d0)Bh;`TV2gu1K=$`TXoF}+Y4M8HRs3Ahjq)6QQQChR%WPr$S_)lWfb)JTjcxb zy<2Y@Sc1-Be;!B>W9A6<&V;f3+3~!LtWr9_bZ9YkN<=Mk9g*0QJzevJhQ1t|la`mQ zKDZwcpM<`UZxI`tcC4e4iS{!7Qq-lch__dAt;UawTNU!k(a9lN+Z}(RR9

3%&$L|sF-=hrw9e5{;Qt(hi!SG*bc;^2N0>?4_+n5u_cyEP^z0;=Rp*gN1YqTe?-WTY>t{l zPDPW&Ms#vfSMZpES7s6S?FInkyfFsoyGL6u7Q7(A;L7D;iCdl*ycn1pp6U*$Df&E{ zV`7JILy*l?`+uqPof6(vq;QW*J+w4opk}?gs^a9+Bi>)$HFy}9s-D;TdSCfyFXGAo z`%C=pg2rb1S7f5qK%2`3?%w)sE)SW9&gL>5d`J@m%0_x~DgRfLR-m07YB9`3)5^AQ zLn~L|1nv;XEQvRiWxXiGF`Ot@m!g$JYHSwLSms^vhM=U}Q}EjCity4D>*d$Fgf^B@ z5E_uJLPVWqY!$g9ir)54d0UdjK6p72H2G1nX~PF7t(7)&8i!zW%4`oWQcy*6fFM(I z0foLL9K5Cq{jgXb(mxczyRrJTIF@I1TXL)nRDGvIrv+`%fQX5f4PVxl4Lh#ZigF*xGgC%O2Up1ySq*zlVMLFii zvqOB_EcQOgiPN$~&Q5i;PSIMQ)+t84A_7dD>l6k0Ut8=#MeOzd3 z0J(douE%z|@1IfHg4R0J3D4NHbqks;wZA$>TS8-IeHO>#_lVc$KN9de==00fB9GyF z*I^@f2Pcgx!inXG?=06N5gI|^A zv*%h}vXNPw+zni-JGl@k{q`Rr35diM_8BYVMajqak{25o= zE43Gmu6wUDRI9QZIPttV+F*vx_9;uz?x3ctm#7C0dn;dsJu$uVfVOezY3z~%dFT;Y3ro~Tz&fH z=&S>VhZG+qs4(_8n_gwoX6$~4RJM(qn>tg&xxUoDobgI+b78}9>t({2y@irV3~%lK zX6cJBi7kv;SkJ7LQIrxK4Qm!B%&dy=M7czC;kHR&78GZ&((ri|9U;4Io_<66j$qH z!=xr_CPganqE~{ymkg~A$cA6s70)lSk{r+R&K0ORhHy6T=MmdamqlbMd&N@`+0jLq zsYLsxm#w+E;oDPI+o>`we@?+0R*i46RqRVE^`&jbkAv{g+r-?CqxH)Y0GRaJqnvyJ z1!Y;fv(>I5nZPZsB70z0b=$pM5VG?colSpNk>};5oZvLdru%q9#~87HhgPT$JvDe+xQhY>qNQ-61q;t0|L`{T%nZ;|lWT34 zIf>>IdwG_i?#J@3kH3U?NqmWc7y>u+@?4BwxB#*31-aL@y}=KcS|oLoRuwqZ5=gOC zu#iN-W+F(YwTW}}^Ju3N$f39|J-k`gpB`S~S&~8h2gg&B6%EGZj3^2H`>dnI$BLaW zbqcrZdkf~m35E*YydhSD$>!(4bRlgYSL81fcPQRI&g5TyOWyaNKZiN-Y3A=hZ2q)@ z{|nFHq1L<1)G&ihos@@IZQj#AIH`AU`wQDpO-RstN`1}()0YAF=}RX_guZ{GjP91pA5ZsDv5)>BSwJ;6et6m;t~c_JvmZi1dP4yL(j zQ}hDULeqn@H0ktRJ)27sNTrW|gH11wNFn$Xap=h|5|tV5(RFhiT6BQ3D^==BxqU0m z;&ETvyI6`IY=ipG$QSq_fwOE|$`I5|=GX{J;-XN?r|LQ^2w87^#}M`lK74&2FXnOI zp?zJ79&Biuip==Vydh41mNXw`P%e?fSQ>1{s)0*){7128xb}ZJX6CeD&v4c>R)I0F z@P>kN#YNi8n1RJN*_JGSuRiu9=&t(Scp7-V9S_f<0sKE|w7mp~45GzeMb>Dp%82>I z`B~gIbpG3gYioCC=eZ8TOmuSDoxYUcYwqTssD!7uRiL~M-pIiG9S#1!&ce4ruGZDZKn`)v9(@Bj+=BJyq*A@$xqpuNmvHIn zB8s3B3L?%xzHbZUUr?Wy*ex7ZK&e){7MTpnR@c?66Ke=DnQ-Gly&4OLaA|gH<|i+L zj#6JQ=5qmF;)vZ4AQ)Z@G8bcbWmvxrrI#HCQiI| zf;*3Q2_*3Eo&UA!uV(t~*%k`uzDbz=&WZt zEgaUYzeZ3PW=!%|9NDZtRMBtN=N#s&m)S5RoApV&vuEAR_lvRhzPx8OGc&-F*H&gQ z&QSd#4!EKE8~Io6%5{~dX-h9ayo%Ll-3x_r9m)W(Bc-D`Z)o<1(9_FmSc=5oq{xt6rqz^|Q^?7VR z!rr*NpE|0_qb`=Zy<)wK5;fQpvv1_SmW5oRb?xdn(|e+=cOMO zou}&igszEP`|19KADS*(OSFdl+82x>HtwjXzt;8SHt38Na#8agZ4JNHN~znD zFZTn5fF8-4J(svh;hQ`a4_f=kWii(3sF9GaMl@Q{TfpD*>xt%<#QvS zD1C?f;0dH{yFL4f(%tWISCnV%vtHQ!H=TG#GK);$soW>@%J*kvys-Bzn59?z|puxRRPTe0|<_t$h-0Gh3aw0i~GN z`&4t?o*~|q3wh>!s`k3iBx8L296su5axjc;=XvekwBT4Qlf(Y!18O|R2*mfXf0g`5 zZj!TGOZ8gD(!J|*fT-Q;3FbLPe$QEiRM{9dzdJ!V94EMF;dTm3jGMAe2ZYbJYJ>Tju z`c1D@;UUuxFxefpmg>8_#J-A~aez0k zDx0RKQ~HU^ak1&;geVTb3)rkH*o&Q$L)gEn@@47=)E~7imQNmREt7hSrCv52O1&|$ zdUPa*k5!dy;?(?IN@|+^kE?n^k3WpjV_naH`KD36 zg@Rk1><>{3%|l<0)=o;JmP`)G%S%1P5$UIKyN(bheYHvY1b-{OYHVOE9%kT@k7Neg z!~S*#-BGz(&%o(_(=#A>J+!TOVyUMr^^ewlwZ#nT0 zy{_gDv#r))F9wf>2N$yQjAz%Iu#KfeP^fLz=CoHaHz*wG!gzqaXnc6(tGwddgkkiM zCJp;YoEb@3?59=KTlA1^ZT7BfOG$gFu32)z=5ZmOQ`heDuKQ;y74w_lOC?tu!ISwh zCOr8--Rlv$mZWFd-4_UeG?eXK_s5j9*Fo>gb|W+(mDwwErqylMb?g2Zkqwl}Vv3Oy zrV(5?>WD_SMc`WC^keZ85>GP3?k z-RtC^s{(3p)2Gj*S1{Iay^F}Z%cmu)H^RMFJG_ZM1U9 zvA?NfpAr5(Q5;j3Z;{ebgAKFZUyWbyN&RiCKZWtaxB}MG_F!6$^ZtIF`uoP|a z`_jocBMQb4-TF_uXFtH-KSn z4XB}o6uhEP9epXEQwv)%Q!pi>TqflVAgUFTAarArSy#`T9p}shBRzb2I|1O2fZkBk z8Qrsgm&~W*+aeawF+x;F0lE0L^lZp%@b44{mtFBRd3}GH)G6nZ&}7yjX>#rNz*6D` ziA|HxqD_`p%gRP|wPRqKY@9+f1JUHg1NLDZj3zS%td>BN5w_65(d0&>=$`97@AysCIz9%yC(CQoF>N!1j%XgOJ~Mt($HgXJpW5-FKYcMG_RMjUpUq6 ztzQo5!|-hS+Sx*4K!?6CQQZ+PBM*eu!Khz+my$%H^Z9Y18X>l>y^WbInVCkYZSa#l zdWV=ylzQa&Fn4E2Z0|j$0r;Lv-6##D^jjvrJk}lVqB}f0<$KNaLr+B~q z*IlQ$PwdO#0q9T|(OmN(nfE(pzvWL0Hi7}r2B-s)*`w@01TVh9SOH9swI)KTU@>AtBmUKzRw#1J3EfKQl zjBSY>dQ0q7!!Dtjc=luWp(pn_gsB1g=*xcWYI;Uj4p=S5eu&0c+j}tfV>hU`#PbJi zkXhDS;+9b2EX%%#9Z8}3c@sl81P|(vees`TC$Ok2TncdI`Hh*Nbi?>|jPM8L)8`ANKW*@{fGoB0w+65gljFZfglVQAM_D~}@ zNlJ!?wF|B&qM3LywENIxc)@^u9CR0S4OlHkhDc_6KR6f}+Hhzx{3TPBe5}qcc=5^s z$S@yot3#2Y7SC?@5(Oc{TQA}>`Bpeaz(~Fop7^EMR;U@Kp~t`=_+@CGGW%ih+xDIV z4`kCp8)K-;UXW~0F7>kpKscr`wIwwjmlD12b)Ys2-Qo$|j?$(R?_<613AfVwUbR#> z=)U)3+4qWZVD3ST2$l5~P4l2NB0Tfe9t^(?8%~RJ3w8M53DPpAA>*`LsP+lPz`5A% z6UpWfTO2UX!msM@TMPvpqVz%0q6zh0rr(kL+t-CmI3p{-h)M)_J z>I*SU&-!fWEJ0 z!8Vk68rT#h#--8jq2cM(%LAiqqaM5$+C7+561>9}3l>R?i=r8x>WOqOM63JOp5rIb zJJ;5OKE7;I9ZiE3H~I|pmm(Y9;XBNc8v2(RKZu;+XzsL!xfmtoNa)w>qR*-)aaCVb z?y3HAV0`Bq&*?OEsPX z8E%Y~k>N)+O69tqG1ey`{k63uU+P+A6U300;I>0?jK`_HJyep9BSW}8KzZ>9AV2`| z3u%MvI|A-nZ9H_V^B<$%vRZY?muVv`M#40aP0l)94|nzZn=q*gM6QJGPTzuGZ zTb^(BKK1&Qk#h2NCFoC~QZgJKcbvXkk6sQkDRn)0a@SgW+XC|6o!dmpT;elg#WGf0 zywzI}L}d;Z3EX=UPo?wpgtaAes_SP{e`K=yKTfQ_CRzR5#Qt+l|6_Fj2f%gZ>S+H9 z2B;t3e?tA|66@#nuW#sOLyTVPdd4U5_!Tm#>9yug826IBw$W(d$Uarj-p*BED$%}Y zSub0~?nt{8oM5%d`%kM!OHM8;z+GE5dC=}>%3ep1>`o`HvD}tU5F$Yv*IKH{g}F~P zv{IpIg^bVomJ5&R)>71wlr1fUL_;&jx0VLvcWdb!^Kq4YG?Y$gEu9Fp5Q(;!cbA%X z)6BE~1YgiK5W`gbwXLYAGy1dUdg;sJW<6=>TXBG+>H>`Ys-|Dho%0fWlKZdd8K*av0 zcnY?2!VZ>@`$PaY^LOH+xb@yfr^(kl@i4`tWld}So#2RKTu#@T4?VzEzl=?8tmQ-7 zCy|z$SpS5F$Yjv@_3OW!>Z^*tfVRBka*iyYm>Wy{kVes`!%3Ea(q+GvW;A`=(BmC0?9$j> z=G`3^`X9daSS%RZ_|e|1(!=h0nsF7hcblhrSfR3qo4eA(*$r0N!z8|~duJ3mJxQut zKZiC0VV(L_{h`Wq|BGK}u)D~X9ns^uv&F!7kqzG}Q=o3oP(7|kP@#664ZBK&Gv(h2 zr?657&NG3tiwI2-?vpg(;m$1=Z4bQ3|8w)zGpA{5+=ay8`0fXw&nXu6KOiY(H7nQU zB{IMQB%JQMFjVlb6WsDz){4x^r`$YrUq_M8*CLBt=@h|VtA4y)6DOkF1wds{SUYl!V-FY(y7OF=ig)GdD6qCT9H(vSlB5Bd5)K2JiE<2>w0IucEjMH zRh6fW(R*Fm82v`f-3Bs7HfhuzIttaBJTE%4_=0v2mpE+G-%)biGkpbSX0Z`F4 zud4bc&SUqf(Obp5D_cyYB|T1NKtLIOzf-$xO}Y4*`B!1?&TEevy_bQOH8uFxsWJcj z9N!UXPTuQ3qFVZxa!!U-D?P6<>EvqAX8N&>>ENkFi;KaT@p zv<6|Z0U^H&flIC`VryjU=bw{aF8$DJNO&>I!eRxKDHnH z$m_D0`NJpO;{#FB?S!ZFo0b!jz_BC|juSN;UpH{%cBKIa1d`HK$(OY&VqSAXAPvS@ zE*XIw6%f9xF;boklHo}p`9P;+iDJa7A?ZL&0VBTdI}fAx5rHb7-FpYDw;vvkPSX2# z5_>;J_x=^rdv^boroMyyjlIgMKZx?I%T6|{>}xzSJc|@BnqNH}DqExZ)h(n`ewbyy z2K(fFQtDx=YzHUtSZmrBg{>yZW<{p*sP7ydrfvBh0| z*OyX#_vfYhZsBhgf6wu^gTG($H-PIa?zfy5jJ)>H&2jSDvn<5{ znTwyV|6W^-$X?!ss)H>_jt zl(NI{J}LF=?;6Ew)dJfi!d*+Q(fs;{rqU|A(j87EcEnATx5`$Cz$O3+*9*;U2>DmV z1h!QN7ucj4p5~6ghNo7Xz$V91LMy2% z2yA9hmjierkVtF)J|HK=0l91e5(c4~MOwQ@L}^=EYk1S&Aktb^ZcJL+4DOs_;vjBq z7dfp#UGe8gqzjz0)QyzJ82`=2dW%^H8#m=rM1}o4<+|rtB}=Ut zcZT#)*&LWdVUc}hHb3vAM3FtUi<+dV>W$rJSohRQ>-VnU-;h4}hxNaqun414F&oKF z;t|!=tU!MIEmA<(f1fis72oP3zs(T&tw7EEsZC(WZv-qb^4m8VxKNutu_tmM=zdJ) zM~haUpyjyd6N`QF2*vJ}3EsEXZWPJwu^63x%;qfu-!A%*V!wBaL8qV6mOOjjJnQ;P zU&-zK-Gkhf9LWut`E`&54=cIUnqee2@mUth?J7_vqS$IJxjmq+-)!%Y@FX~>#Ba`2 zbJ)|6r^@A*hh`>UYHin*BEi+_e?E-LZZ|67gVLm$j9w7#*mX0=Km2_x#oot&JSQ3C zB7*gW{FmI@>AhV;zFuHWQ$J$w;fuTLX^^j9bns%`m(_A!BoV=?HrgVX2%uDSM6jwG zvpfkpME2?nOP!uhB#qc~j#4)nSiY$21svBUgF|GmzHoeo#NUTzPgL)%)HsQgy{b}< zNcIAfKf@~ft$UHZ`a*JZe@MJa>|2*Lfw|EU$NYlpuYTtwA%>SNb~hBT8w}3mFXQ>%UTL>1!#A-$-Az zhVeVnSNGQklD@8|uJME-F66$mQ+-p;NcEk--&yw zCh2k#&lq{mbwyO3>+jrbeT3XTgZpupnlTji7Jo}7zRKE9Qecz+Ond3KMBA(DDNK4_ zL*{YrUc^S5*r1tg9Xf5#w7NZ+-jxrt-=VC_JrB9`W)IHQouqWOI>P>895G0o5p%AF zO(IlEhF3P#d7Y#YQBP7<92gVQX@%0r{BFGh<)%ayp`U*csbE-$TnJbrjKkNFJB-@f ziJ*IdHB{2apeswUUbEV2ml7xUlhCo&G1ld7f|ttg;4s2vny=OW3SI8$`Ws6zbiS2F z?yjys@m)a93Xxdg41u~0e=7l;Of&v=QmeO80+1(bknQlN*0t_}lbb&iuMI}-BKqt? z9lzG=UHLy0pRNA;8rfEQtls8#-Dz)y%65j%3Ek`tkz8ROce-0bLDbb-ErxL-4wekk zUDQ#XXYGORBmj4%h%PO@x)(_F(N^?!u-g*U_ecvfJzb~ML*!=e%sNyAft%}ME|Sfa zSl2PUYlMWjS?006>EK zMn2YwW7@4hw#Lt4>r@ZrMT08`eCrl>!MW9omjge+$5*c5(eeYL-?^nATr#?-#d{Cu zbhIJOpWBE=K|L%yd30T8XK32~Zm%7CRITN`bedI2@*gzFQ{7|@62rvd)?#N{p!s;`B=zw)=&{u??z)pr_yvGwxp`1Mjfz+sAXN?U=R71IK0 z4zOgf`6t+ozrAQr^-McnnpMHoQT^*)|7M&Ig7fQNx3+uzFROZV_@r75&aen}xE*b) zABuUF`(tnYI1z)GOjqrMwBT8FtvN+C?ZHhOQp9j4cLPh%7Nc@V9Y^vZ9Kr zRtXWIgZYi*qu`3R(<&jqjbcXn@u}{tfLNaVOh;N$a=myV7i*!K9rjvb^wu&@1y-M- znrGD|KZ``z7R2sUgwgeSy`EzQ^6Hv&j5G-tr{kh+=bQJ+KxBz;mb&cj1CeGm3YTda z%9BEO{`Tcd-T9Y&-|by-l|VZIH{vRN6=;XUQ8PY+xV!+iVqYY<9^j_r#qw`?DaD*NPWClS8DmY(u`bIEO(_&wyL`M= z)-F*%T8j}AX|gz1K0+6TZg+=nC-ap=cULPV_mN`~B8)}-K^R8O*1DD)@Wkqg6b0M7 z_4iOruT{&xwJNK{m8w?mV;Fn%f_wp_GR#oTCc518^Z)(dGYZ55LNqzMyISE41k&D@ zNX1Y0NRMq6k?XsJ6ijqAAe zp_<1-{td9J%%Wg>^)z!|qX}a)J6NXdU^8qE)1NLp(!sqbiMd8*n6yPB!6rf4Qnyuu z*Ur|^QV(4xyGY%(mtnJW`COHEZZl5Wb?p42pK@%6(8jE)JW~duJex!mL3^~y_Dp^t zi%{%ehf+fR9bx|tigr}qhh8$E%GQJH;IrUO@TJ>0N4K%%X=x)j*2WxZ<2fcy{b^)e z1V;u!#0`*KdLPNZ;vcO3i`8Stz$Ub|q&(1jb&UV? z#Pgrz_7&{cJ+ft!Rw~mTo=pjfe*dirNeWv_4cV4zvTZHR6SUa3rS_F*Yw1{d7+%8N zXQ6y+DIM>^P$_x^UnmW#3KYmgrTR_@K=6sYNq|d<*GX-_K_q z`ALfD5(-GSCjiK54HM;*ll{A?6*CcYj;gz1@xd-1XMO0olLEX5!= zP$?1ibZGoozCq->0o(t0$e`NaO0ih`t(g)-$L__*Z->rjxwk4uUH&PnsE^xJToTRY zY=WT+`mVpE^5SW?#>tDtar+-D$O*0SQ6v6qPqo$UC5*=FkVzyzeBZ^XKJ^t=XTJzK z+FU~Y%dB#@t13%9!Vmadt5BHZ2i;n%*;jWHgQ+p^K`oxziLAMMO;w(nH*oz}X=%F! zPTh3_Yyh6s^-VraL>}7>x=Vu2&-zIvaX(foax!h zPc&C~>v5YiJzF^kD~o_Sz@7E#$)IKV#8lsZ^Vh=PiToaI|DDI@dpw)Yr>y^j)9a%& zHwb#YlVb7oBoQHPdOCRfQwP_6ZlCrg_TZq}e>Y=L@INcX%wm&aWJ&}%t0Xs6nwzlp z4vnu{2iMt;80C?{AMoLeI2Ak7bb7=6@)$ocBC zf9ivdo!DG}<3F>050Q`ZHn(*S=_vC#AN0vb`N$mP#KX@=nHM`h+KV@~aLJiP0u_=u z(R7^H%=Vjba5doD@CRc2V4(KwJxF!WK4`Op!pBG6r%EcrGZu;att?^nLuquzHQ~F& zIBTReqG)@}V$0sWtdczPeE6*yW8(9C^ocL%UAdX&bZoA&kH~gWk|)jU;9OcXY%Lih z541E~J=vO(6W`X+R$@A%+jTqXx*g6yc01Yft+hmNvz%suiFUFM*3P-Qo!=2x*yc$Z z9&_$8%7M6Pny;ggC665@Qzm($2G#3m-D~MVdQBRlOxmAOY=Y{RjGa6{I+btg#^3)? zFNoHXi3TUdTCOe`3w~v;F41!}Knn)E^|Ub1BqasUrq|*a{U_6(KwdfF8F^9ix?q-& zSGJ7m%T~rfgE~_WYNRtLJ>{*@bi8qMbg(G`e{yrM5y{`0k#AG;wm51whK^AtBKW@d zI?g--T!D2@fUg4qc%=rg`X2`C_bi~OM*KZeU*ld^cX7yug%woPZI4*3z20U_{!bFS zx`>Y-cX?(8z4B}RwUGsGLum7(;6PvJP&ZFU!1D&wEgzd*obx5#+r+T?^n*kuNPbJE zdRP^?g8yP(C2|?(eO^HQ-@)F)upTcSvBiVbwpCl$5M6|vl>K`&%U)K$nxnk0~ zUT@)&Y=n6oomqKYsUlgnW|*IQjqWRkKAS${^0g<+hhpt*JPzr~D$C~7wS@d(zJ|HI z4Rbx1N*e_auGgVpb_5TiXefAf%M6IP&*4fRsccSeJ`Df8KgQ4NdIE9s9g(=A0^Z)* zNtk1av93&R@Ukk8s1p9xEkb74{|4HRP_SK}!c!7NDz%v+@G!)FS0Alk2JM9kYbT|6 z>!-;9p)l6G^#@K+9x};$XT|)BN z&|Pjazc1AKT^0N~Aq(&X;N+c)k<=|`k}ck9v3cLI)*_v;r=_k*GWIOaFsqIfR_ou_ zm<*SWiDNHp0a~1Xke703&XH@}>wYGu-*zXm*D48dtY)HCl^GQ?CU>Pd_`br4SRZ`X z*@x$^qKs27e#1WV8v6J{JbfhhC*l0rOO8!~-jEEo{0EFZxJxHJJG1UC=8IGVChu6? z9i#?$g_#?MdgoTuJ5`HflU04w@@0CKs_(Q$VYeGoB>Uz5-KCavF-FmcaM~4DfSFi3 z8CRm;bZRMFTgIlgV9l#0e=HNwE18o+qi}2p&3B_AT&UyUsZSO#0lndpL_|88!WO2- ztPl7_1vvz7_XzD(pK48UYn|26MFCInD2_GlSR`vL^grZ`17ozjT0wn`qwh<>DAv(a zU!qGStUvVFbMn#Dy0sv#GnCf9e%n}UGiTzqTl3Ri+a&5C%$dvGyI;eMq4}NEg65Qr zy1$O%iR7pExYAxjG^W9k9f7F`s31N|8?Ahfi zRcR^}=$vD5bj(h9O0qk2{Jn2Unu_P2ZRo$^_~&o=2`8ZuPYNyMma8B3X`xU3hQ#`} zCDzX?SLJ=`ug%?*j_Q-fQv>Qk^K$LPxM!!?&+_A*jj*4MjeGX_dm7ZWm&QHovY$x;!M zlSx_dFkIzakyYJ~d@V9^6J;W&J;}fJj4i-CGw1Z^`}O+$y7>2KvGSE48!Eer2XvA9 z>>>*uo~0_$f!Z${^ve|q^@G{!{1^mny2KWzgz8?NqOIWT+9EI1UVIzRUDX+4802~( z-0-cMf4S0ce!n=i@?l;)D$s=|r&ktFPxZ}uRG?JPQk~Jaq)W{do!2ly;4u8{lIl49 z#?oZ>VK5t%3=Dt1OF~T68BB0?Fj`JIj zDksp|EVX;sfyi3dZ_|COwcW+pt~{4(akf>GU)MCDay>u>)E_9pOI`PDQ+IY`r2AKH zpRSj@(i&5VFsC-tw#Te0&XwqWUMuYlRA>EZOtjmf2aKcpBwPfNM?zN?p;twoKA z;i#UAb_ah;>ud$K)_ixDR+MWEc{r=sYH5Ba?T}mVnRW+$1%%9o-jB%sBEOg%Nfxfd>D>A^#dO9+>G`Z>CFB?x^|AbcJ=ZU`yV~tj$Z0 zpS4BytQG57n>_STvo?wn&a926Zsa_nHs<}1Q}?$ax~4H~1Rl8)jE!0SuuvxOahbpk zys>IFFo83~o@=o4x9y!n%-`cy*^^&n{=RK@;C~zdnLmM(4=xGx{F&7^&|3SOE_;}3 zjfDoL+*FmBdo(TC%mwt!t@Ipf=DtaZ#F-Q3FqoMuFg4AhGiJY<(Wt+o#IzUPe*vRe zbe9iyzE18u#C(0x_4d2BbqAGqYJNBjeh4xVg(8);aQA?E_YNe3x;1NNro`y*QQ3RK zbtn9IX3C?o0SWW0Wo%SkA)ojk*{e}jZ>#@ESEHP6Wlp!Jm^sZ!!b5+Pai}@{9wnSP z9W)QU##D+fM7j5iAwV5jwhQZ8Q zZ>p{tU2DT+G|`P-tv&sVthG1)e2BUGqHFC=yMttFt#XxSlp|r34p&{ExoUW^K!vz0 zBC8RX`wOhm!yI4A)#X&Ndh0(8rX&4ci?n+?RbADYTH3w#h48&|7QN#N-;;Oyzg(4% z^Xkz}(l=6io|e*|G!%6`#IM|+MqKHNrmA%AEi0#O zMSA8wQg6h?*`hg8`?Y#3D;yS|b#+4zUh>3(&aeVm4dF#RYAEZpu*X>B2`$xDICFa< zIzUI9KHy8#WQ8T5Z@` zwI<9#+W7;+)>@oJHJ6w#B_eL93J82lCdLC7g>0BQSKhV&Tl#|-9q)^u(JTYp5CQHQ z8#v9?ZQ#yG0Pex}4dT)VIip9Zrzdb=*0e*ca-p38dul=-#(K4B=WKeidK-s3*(`<+ z*LIp%bos`;9xn0J?#;mP%yM;~U%NNGdKf>eGjOgUItVZM7-g5rq|`sXV_n_D?FVii zc%R}N?p?78WLi4KR~_NMKMDOzNE8?wYdd(uoq9w4H+Ui{Qp^D|FiZ_VrC#+e0ph$* z>30vdWTb~mJfZR|Ge`-E&mfNybXMBvJc`Dgx&DjRCpm+>948bV#vw&LulTBAsd7aY zT`JBGs(Vq2*!75tb3{O$srecC(#tw|aJ2gNx6yWL%pMa*U`vw_*usQP|3FWTtiwHx z$2E8fX(Yjp=60G;C5{T-MDOV|%Q9R2^L!9hwn^YH*JE?n#qyl>&FMCsOkJ<+&^rQF zYxc3E)xXK8me;XF_NUbC_1rR^%$4D+GC2-fo1g~9veq|wMoc)s#beB^YZJz56B+|T!Y7{t>-b4(&;ij3=VTD$8v-Ym#tD;-uhge zIdUXMs;j#YOTcN+h>aM$K)?+z2)BU8>{Y+Pn%vK${m1j@IYAB-&=lHuBZL?TX=bTL zS8MDFB~b7L%BTfcff!;qF>a)*l8p3ftyFVH+D3|!!y<-U^|$dt3_BRn@j?uTNGmAj zGZ4fxuN#7}bD^~Jltar7LlaGW-7hx~>r)BaS+=RJ^Yi#Di#D;W>q{(s39pKNuB0DJ zcY>TG0XX!b7!1qdVqr*-tv9^&Db-hq@qOokBt5O_+f$#b_BgWq>uY9Q4p~|&mom#R zm-?INkr}bJ7><{0Dz@#C%Fa|=jN2HOC{D`4<=b4Y6j>}Mks`%ALMJff>}L?ypb@8^ zxeRT1>qo-2FbB+C zE6pH8{RTdadm^vL@Y>oM`q_1|8ddkV9Mqg{P?IUBS!bh0A7|}dbk|?wXL|O#HrpSg z+7QNsM{M{Nu(Yhtt1gBe*LA+#mnuh+`8=SbAaKzt z>--RJulS~v=XvU`6bDs7(LRO~h&ag>P&+uEekzvBPw1N`aiAOa%kub5mnouhq3A>1mqAzt=u4p zTG4ddsMD4)34O;m<~av9&O$F1JUkDZO~8Xo%B@^uS6!I<2%!ZqWm=B6lS4nj4L!E#*H$Dam&=!e=@pB0onX`?LFplpMK zvSg%VJsv}uLptLO$~=8hHuKvK%Gh4wNM|KW&7kbOIMQiKLOQit%jTf$!?$gejaS$4 zRY+&LP%d9y1x|;vxRUx}D(dP8`2()kYRt>ebv4Ag9|7aJF$_$ZmFgz#`LuLPy{q8u7U@;N) z@4Z_t_2aXfd+!#Oo@lA&y(fid#;5@FBN&N;tDWeaz8qGjB9Fyz@6h6C@LRXdlgPtb zsvPv^C!qhp*BtbpX3#(2KDc`)Ekw8Vg>TyE&sTrhY0&?I&_T<3PxVQ4oxA(e;KJYX zGM)z4;~8?gI3IL=)|Uh?qHNbuyhHN2>LuwF54QeU-c=UwtePi7`g{>yl2Wd&mnS-{ zab3+OUwJ5nrpe2`4)>&U0pC6qZON8-4ODJeLRbX8;qDL_naAmzTjk6^WMmFs$>FCr zY%D)663Y*wL$uq{e4aH$8-KLh9rJ6?DDTQKVojn!p|`bd8tlkM(HKPa6&Hhgb>|t( zc6??JV;fRK4Y`ZNsOIuIL>DtC{jY3Kl^b;Cx3iaM59;CNc{s#{W&aCe?Qwe;)qM;?H>}dL^U38M`!2 zf0G4$4xqmYGI4Ss)oPnP@LzzEpDp#h{BWsDUIS})<#Bas?`)x(hLFFOsQ(Ul3)vT#X zt*EF7Yn2U?o2HsyLYUJ;NnK0F1#2KEla93^mwaVUw&=ImHXUOg)@%~z5ZD3rGe}Y% zm?f;@Hrff*v~%3%ai+BuZ`Fxq=EIfJn zov#Yk!^k}9trumra0}g_m&zqA{48sztJz`JNfYa&3CbM`+AV(r4%CNUBr^6_|A!rV zqredk+w*%G^Q-Ph=1fB7KNKh+^P)Z8x^o!U!quYBlMw>z5F6cU%yy{a0-2O$?iL-k zP0Y)5fT+kuiDY4dSy5$}8cRo}Oh#zqHM|S`ZUO(AJ;l}oY0chFdryhi?48A$WiLiFEQep2B2=yQP(uc(MqD&L5Q{EasR@`i90EjgM= z3D9ZOlFsQ~cOSZ6cv57e6paGpQ-5RDtkPV8o(K(`^iK=eNB#97v>YS+d_1eZ`{?J9 zy0TTQ0HLiB-D5e5i8ERpFI={{Z8I`M`R{?OX;mR)7gnjF%e`x2Wc^* z-;JV84s9&v-@2Y`29X`N@AcY<_DCK3kQ4bsJfd&Kn-wY(-)TD6vnn!#+Pqdzro?3fx?{V? z&WbFWn0zw-%M`_UP)=gU(K(a3KA^ty_2^{gGgKyXtRA=gFq0_?5SdJQu4<7@WHRM- znws7molJRqvT#Cqu8OXuS*3X@nM?FcMm& z#>+^MdK(&O*q-4{cqGI1of%%QI)9>P*k_jOiQQ+ll*8(%Lti@>L1iiEHT`4N@R3Amspees&hDwM~jc4&T^&}?? zw!`JE)3}vIsMA|A%Q`%BU0F{^EW+BV(P$;#vU!kOHG<~G-rFr?D?DvXKe`C9Sz-s&@T=cW@T;M& z;-2&eIhQNDCmifdvo6nL37|QxC?@x+aOXB-|($#KKydO?G@^S zE$obXYbC(iS5cidjcXKD`)Q%0v*XAX1nh(2!}(Ja{mK&oV6 z5(#+J9RT2l1Yk%SG^9P%QNq|odA?FT2;r1f>?1~B@(*h`|7`%O7#LdZ(<)*B7Ly#V)k3-l#OG|3sT&BDZq@_Jm12u0kkAIsP{)Xm9;V zXE04o(q!75!oX@((b)Ru?F2q?VKxKor0bu^<|@Q2QsZW{k|LX@^M#W4WViGt2GeOF z`hlyBT{|k;ieV6Bc{7VhQ-iATmx9`(E&UD3r;qOAtG@~`l2!{Q!VeLXg@7bb>A8fY zSNYkY(Q-AH`u(Gb#KVd}feUFs&(9W(_JeCG7Wsva4%Ltp4inT$nQX~P zz4lXj_Hxm#P4k79fnuUrSwo0M#qd%GDoPl*>I6c#PC`W^He8QuwDxPjH5b2mk??Ie zBjI)YH-vwv-FNff7QUB%ji}-ExHPVYH|X$<`hOGuF&#`P0L{}|5O@D8q7&k^wpSe_ z1GSt}2USvD2-Np0gtj}8GZW=jOGVXovp|=AdXDb2o{(HX&hpRJxBI%*Z+#FYhfhOJ z4c@Y)*#8?89dEMfxR63tQ{n22=-|;Ke(&%dNt70%r3NQBuo;O(!$Uz-HM=c=mOHWM99dq$#BxI@A2U90Gd&xP`s~(qT{yI z{-}$dG9?<(46da zZ;n%Jdm))%eAgiuWk9P?8~^%Q1YOa}4I62S!LJOw6+hd=XYnP6aFpjXJa zJi-?LJ}q-GyEA5Tc&`y z%K?+8!3;YA45yT5#lc*o!4&oYCg^~ft-;Ja0Zc(q4UB^sBw!xfPUU)l)Z2k1C&?mT zDolkmAo|!gk_FW^;?_2>I7g_8rTJKU7t&0Qufd-b_GqA7&OpfS9z7#wGSdIoZE)Fc9fsN=H*hmN1bPa6Q z3BU?9un$>pnch4iBC9p5)95zu{qu?6)@uR(cpxS??#6gS0AokuhN!JqrKk0h19AE+ zTu_}dNe?h{@+}R%PM`cU^zynCdfCH$JkFW5wqC;ZkrH-%DG)xBiXI_qTVQ9MSr)P# z@Shz@ThX3OMPqE&BU;n@YcG5j6)h$PRP;n*c=+FdHN@~<3i#igFT3b>hFl#l@r^GI z|F^34f7zrnIPr|2%zf$~Wnf0PISg~V9EPb-m(t(%YEj|V+T1~PHXbaejqbMT@D!xc zlW3*-383mO7sY8H)|48xYprlyp79DP_y&Y74ip9}^8n5QG zILh9}-iXZc1sD$eG$SV$=vB?W2XuZMQ1&pfdm{sE_o@gcKT9|DcX%(uNlIawD_z{OZMKiV*;@j0Muc`mng$I?~yX z)7`n89xr;KcByz;weDJ1WQp5yjjD3j_F`|iv)`zTYTc15I$c-?z7eMu^TrQnW9IckRn#Vpu2N`6>w85cf?N_gC4QXo@PC5xzlOG ztVsIWfOjodl8^N^lzZ!zdokq@f>KznqNVJ?*Wi?6fb)Dq>PaT$_NI%?J74%}i8Y|; zs4x7K0G#ZpyUCkYJH2&`H=U1GEZtb?V1SjbYvqb85M!`*rCY4Rx{4OKYrPTfEx#nv zm)M=TRz^`_Z9leR9S@(FFm&85QpurwUsx0?1)w**w!gL!OL6PDf>j&Xq$736U@N_% zwb+|ZNz$xm)dkW6lRaxoy$xf$6f0efaXwoqG1MmrhC9|twWRDbblC^!qL1-l55O@< zd$O{B&qLt{be>Jw7kH#Po`~Z$fQmTISmA3=x32co-9pK)aB6UwMTvDGUD6Yr^S`vH z%E*sHe8tG0cQy7(4r6K{;%O8li)0mIEqRzV#ciDiT6)7D-gK_jstqHY z={jT#BkTg1h9wLbSi4;9onEX49^zE5wj0=p95^j9J^KYT8PmV(eIC=Hk9vP6xMM$LFkvKiCK*;2zypc1lEAn6B zuygYpy+)rv; zATS)QaZTy;JSE?ux7^k)J&iqo0NA6$=~f2sf|^X<14kkmoe%r|D6a>o?Z0R#XC8{Z z$Q#og3q4kEA)mb+S_Sy}nXFA55wTHubH8d-=*4u;=Ycaa}TRT%e?lRdG}owSqN zf)rxt<`jK?I?2wpwYA03kEu)M-@HAocOy4;%N5SbTH(&e`i!SJ>QSVZJA!4AX*@>fc&;1xJ?^;j(X zq|3E3Pf)hdvOGWHf&9o6zwb#1NMuPC`3fnqy=Or##0GCJpII{&e$D!FWl-HnNv1)2 zM#!VS&KIp#z_CNff`1IV6>%oBQmg8{YnO_W-jcJdcd^mrrg?~;%St37_Hvww*W>ij z%%JKOgI}q7E=}nkd z+C$q8w8r?$Tu_YEANJKCgb813AWHfeimx30;pex-iy_`Qp`+=GhE6!%VlM^p5*qQt zo6!K^2vNj-(Cb66;VYp@K~gf|Cun+2e>G#BD-(2Nex9dtX87&e%R@)|`flArw>$Qf z@H;G^oK;5^jEnEqpP6s(s-u2XwtTn#gm0_)$%$959(nl9Kfn0&w?_at z&-%z}eq25d|J~Xr)1meB;Ws(n_ZCI-AAa3+SU3gl4{Tz`S- z_YYFU%kpjN=oe~oH^1GFa{2+A6@GikoeM9LvWBh&4Naf>w|dfW6~lKq&QMc^^AT!t zB_bvFkTj9lB%wnSR!NRu&GgsQ?5981izkP)I6x$!?G00TK__<{Q&WzJE%9jp*BAg4 zGqJ=H^pb>_1OL>tXZ4U)ieTgmo0I3Kyq@MK>t*I1Y}$>^sPT+u&2WQAP(H+Vjg&ls zwKS%#exoxYwa38N+R^#x%}2y=V3yEEu3adh&-F>0E}5)coVh`}$Q>=T1KmM&q#nQ8 zgEV``N}!SKG$&dAShCHMtoESgveGPesk`+&H3NIAc5qlxt*R+lo6*qQVn)BpYg7_i zu|PXk6t{SJmtqmNs%Z?y4&+t83Ooe_8M^Aoh1MQ)ALqi zWotM5%1pJXg#BC?m&+oHJ&t|zXl*+hM>LB|t@v1119zG?`eerU@SEfNEvvfLF?4&@Pl(vdbccxY zG{?elw}tEYr?pU3Sc(fP+leL+@5GnZTkD-xo#imBCMn}6O?~ekrdVwS@QE6Lz|CJo z4k#C(uW82Uc#&;mGg>6$Vj&ybblCmd#CA+%iN7;rc+?*6H2|RqsKYM+Ohf}CH%S9b zcXxEWI})zfK@I%3g>T@WK-3PZ99MO*9li~>pr7nDd`XM(xco=o-@QFz?<7zgHLdkD zgxmS(^sw~QE=!KQ;=3pAE3PVG)9vtcI0fKAWL9efe!F}xW3M6b92IqL^hV2)lfp{c zsfycC(o{Qzw7MmfFW-{^zXlbojMVCQ66ME0vjW+GYF#a{pnYATT~hj9)Od*1ipAIQ z?%Gos(YvF5^XaM0)SoPB%Duy%3qNBuSEu>Pwl;SRK^ruy?oc}C&23xSDHz=>J+4GT z#acnQyo;=kg zR5!ZyhihJ#++v^|x{k6l&180cwEE$roBG zf|A-(sxzt@L7Hd~0ZM3F4gl(wu}t>W{}v=6aEl3K#vEbaA+~s3C3z#QyXNA;$l}22 zT-$vLTP&B*qdFMitZ;Lra#kTLR_ijD&w`Lb4D|qh^VWrge>;s8D63f*3#%DcP6TZu zTrB4+g4T}cbYv5hy!sr=XQfBws;NR7>zXjT-Qd3Et9Dg2Q7XddFcOAZhf%zduI69` zaYtIat2xT@fe=Q{T~uw0M`f)nOX^Yzl%sn6j_^syUXXPayUU8YX|sYw{Y)h~W- zChb@tnbAZ^E!grv4=uRxM?GXU>hona)?}4ZFRKz&c;%LZB7 zP2guB>yC?(kX0jTNcoGpYZhpGe4h_LK|8@Y!P8W{Th4Z_Zq@|eiSS2{4cIB}1p3O5cw{O+n*jSJjxrADP7MDXD zYR-p_3I&=x!|C3JmKX)19ZF3L5V7_pU3IuxPJ*9pBD<;%#K5NZxEb44E8WwZM&>Yx zjO%_?2V>D`&0&D9yD2-Z#;?XsOiP<8mky1pWRe{~RCiT(JnE-+dCH)oqDM#6=c@~oaok?wf#`d~ z&#lZ`hS+M+S%+V4?R}xdXZd^huTv|m-QZ2J3U)`M#hrcRTb1C}sKcFYj6^|fn3+DI zk64{OgDRNsI!Z6#nVvtOv&*enU@gt$1V;bcFXXtJMi|Ez2v! zBM0!qC;%}>k~quN206(Ny(A0rmv9ygYDyQpCgz~_{AGC~&v@6j>2Ugm9>Mo77y#rYy0NnxIFy@ov<3$&HWi2J|Wq_s<}akV~Dvti^erdFb}t@fTW_xU$Ay;>367MF(#}w5YwsU@Obr z0lt~N3J;=`wWLq$c+Z9Nd>8d<=YZ!gKHOGv^Eva{dKX@V-SyVejKWZ>%kt%SR|c(t zuurklh}njcykhbaQT+(qa=e_32fFiu_>>^68!-#^)K`6s+LrOms#IHHL}8q^4a2PV zcu#(}HLx<61XK^*oa3=Mb(F>mz&QH_oYAev#qdb6RMJEt+Eq~l2F(5_=-f#`J&SwyQb)eDA_=gSG zans?!2=_G3=o(ew_pSaGWKz#^n)Rw%{$AQz^j{xEzkQ$Y(OZk#SwaN%*Ypj&ab@%0 zd-wY*lxF*%Wl`{ar&WGn=wE%0a#2;2Uv`rN``6Y<{D#1LEIUIAwy}kXaCA$ES2s>3{_V5o8G*GKcS#l^TE;Z>mkBsecM?y!YFRAf8T6b_`h9Ay( z8?Sk7lzsNsLaiAcFA~{&*2rgD{PR2V*%<$%I2j$kiGMDXPm$c2wCBjD75|*gXXnb$ zzlSV7*QsAkuh73&E;_BpHtd{1?R}56xL%aII@8jYoEog!4*peVPF1Ilrzy8_FJ14> zi_eX+1iUaUk0sM%+pU&n)wklp;$iaD6s&5O1pTL~f0RmstWc{rsi7dGPypdS$4_Q* z;%>9@12mY^R%-+ASu?uEf>uSK)vX+*k8-d2#VlmJmX8#b)<78_DXW!ht@5SA|DtxU zMJjybvg?q{S!)CX=>M7t()R=TtKF&7bESYauyaeyZHBPZE;2#Xc&mF?6@q@uI-U2h zDj4awZS_(IEAL0;kR1wcUqCGr7mF=z)wjw+w4j; zCxa_=1|t#&$ameFp0;lO|77@Y;aSUb56?!P$9P(Kp5sYN&&YJSGkf^;>cQ{xdG(IT zQ}zDdp-A7hv2GACRR~yTmXAv?xK_9AH+mdw;bkO*vA}%aqYe9Ypxw?(CgiPitUi&e zWCw*s$sAcYA!*#oCn;%Y2E6PPuB##XEj(%I;wis*>mKC$`#itU{-B2bB_uRVd#nYF zKp%aNh0N#NCSY#Z%d_H}<_nW=6UYd?IfR%dSJxqHD_gP)^=$%g>e~eR@)a}XZ{$Bs z$)vXD`ygJn#(6lU$W^EHJ1Jv6GRldw**-374RpJpRa~Q0|2zR!`c!*H_f(j4dq&sP zXuDjm_EY@raa9O-_p6C(n1}(j^w?VHsgDa#0tXw)_Z!n|$QUB}hTF&tkr;EygI&(} z(?V4BJ+M49&U4J3h*55>Mydv2vA|m78MVk=Q)(?fR(C}P+7yeq#?tM3bWC@s`H0}H zG`1QciA&wx52YVBK+(o>fT||8sCx=my;jGz3mtj*2g&WVAU-v9r%p|X#Mj4Kt>)(B z7Hdq81U5*EjikqQi#3`S+n`&lw%oMVMs+3@7-Frp(X`e>4dokSt@TK(wH}JpKEg>} zyZoV8YmHL~xJ)y}>URJ+1;9p)V`cG8TE&`mEc}YEeh$vHu9)CH$d~WYe#4uFlYA3R zhe&DDlf1YD_8~3&NXyr*kc?X~6q{CkamTJ-T+iPGJ9#mt8iDiF|iwUpWvV=x04!H>yufP@=N9S=(r$ zZjz{2MZ)OZ-+xL;0ysBy_CaherA;rj0_$ZfLYA>*$5fN7>U3d6?Aw8E1S!_D<0Y5K zY%-CoZHO%)0NEVwrj9|CKaulH$0MD--{tXoEyQZ6+R2tQ5^uEtS=%&ooK^?{1a?c6 zOuRw$ChRNon|SQh_YST`0H(eZO2=L$jG!D6A8ryevulJWaedWZo%lDg#Pv?%2_*jh zrVRgYcsBDuZ;2?sdF!4^@^3X^F7unW&h@(t|A+W}a$K51{LkYl;7Nw{ZN8`S+?e8@ zpl#wZ^e6Y0xcoWPg))*eqNqfi&6B%OeZ!x#R(jEcDDRGN|I3U6$T)Mk#v#8M$^tEF zKG4e*U@m&;C-e;F9BcO@F0@+no1L(&k-!1;nF8J6=uKx^ZRjxty0sb;x7PNc#)Pj{ zV_Ic&j>@}-wppB??+Sf11TC7Y(mQ*hq}}G$d!0qgyK8$Dm3P$)fBrx?)9PK*%lANg zr_1-p_DFAu?;1<&=U~=!?9fqs#&qt`={s9w=W4Qd!YYi|$i3Tl(i5T^S1|;2pSI?= zdQp6&kNs@-T}7qt8W)Nv9I9mtcCpvdb16H!vu#y{r3IHF2X+VzWSyu@a*y_-M|^fFUHM z=DT*_sn)<#xxtwXpsIF#JyPx^dek^30G)v$QbpvhyVTa@C=r);!L8`K*N|)P`#f^( z59+jB8&T^4G6Bxb0%!Rn*7#weBLjS4nFF& zY|K8vCJ`4L-xpNj;ZoErr>K<46))!(;^oW``TMYxavpE~aVqD@rEtYT=LQU9rl=h%>VmTzctvG=~wl>Gy8``}I1CNkh)yNLY=tZTSvqsVcHiAiwmXoIUqdNo zGy5(YB+`(&=0fXmgYSBZEZ|WyS#&|;Uzl_bzux?o%N|?UP@1uJYttJU*5Qn;8BG^# zCjoIuA<-L$ggYxFW-k+yl6`CIy{_#J1jK3CKq38s4BP9^c!re2@T0-AfzvQx?GAYv zScy50`^FDNOS7V-+%X|HAGLA-p_AP&A?$2sdx|5yJ6)k?qGC0n)XPE8nzK1ShH7hO z(d1z@nGNaD(!9^UXPRkCb@^Y+K)&8TQzAHtZH>+hd;!9qF}%wtj|q zV}BtZW9_lOv37@A+=3X-AE2+zs%$nsfELm1rTSYKWnSo8k1{H5KCneom7IeaFw zX&u58HVUJW-xfNO?z{CU-}aRB&@(>6e=N>?TtYkZtgU+#qA?RUu)nB17Sh)W?00SD zcJ{H`u|R~zi%h3OtI^C`z7J(9$+=_Db2FoqkuAVVF_EjM`l*2mu`a^l<#Le zuMPaY0j+%b+?TlXbf(t9`^X-zb?|0cA63j$bvJ2h*LiAXg}SSU^q8vXZ3WtkY2Bj0 zHedLEWNWb}(ii}ckj9vXrJDWCRE4}y*9ex}H-I-)R`WFLudwzw^JnLk%{ZeZFUTOu zL3yzxZ#FKk)r{ZV;cv?h^wPtx;RV@4G@Undc+~em+dSWQ5WwZm^F6=aH|}4Nk$y2DRiPs*g%Icil@6!Y+t*ONjUI?oM7Z&=v(@f&d4 z-}^=9siA0JKBZvx_l|UCY9fu|`uw~}P)onwUmN}$ts;9SZIcflvOaPbLI{XZ*5JNC z$6J;+od}cU|Gn)rK2?tfIBv3cI|p7E6NJz|(`k|#rnOl`kSC)?y2MlTyl?dz zYe#d3OY#kWxH3Wq6+%VwNSg~u)AUc5N3L4*ZD?lckm2ecv`6TLZ^OIkt`DW*tyVP& zu7N}~6m(Kv*--WZq9ku{_hkz&fa-+=<_=}wLYJr|25O(oxp-v_lG_@yWwMYU--f@X zOHQw(3#veP2Q?F%<=e15-SrI7C1O_5OTIPO$c--a6uswLb1g1n25BAt`NO1*IkybGsR&YTvc zMip`hWWEv`Y)JowbcVK#h-sK=Ws4#?@UvzE5v2BVd@75=zTgY3!%NhK3ung82a!=8 z84SzcaYiehHFDv1mbiQLMM}m9^^(j$*kO z4}(yX$lpp)3kb^vM)SggCA~*6fEMSGuM|GpdQYljy+p<%KADsrrFgjuR|D~dg>~0o zdtK7)yrOT*^_v-4Q)N4ZMneH*6o3s3DS4qIaK33m`G3nOUt6Lhz>X)8n%=-57Wl8JXlju*j z2HM5a7TRwVPpJPswG#7j7(ffOyVT?w@DS@dm|uG@Qp*K^iog7(B*^^0e*>ax6FTFtd04O(yvS$T!n zg3_YE1FCot*Vk&xxEbn(29@w%nZs0%tv5;Y0W6T~f=;HxVaBE_o& zw>{7#l!A(nvDvIT8-P;ke<g-rp%r1X+G+Xf8j9nues$`;w|G@%#$o1S;zPNJU`;uWWpR-OM*eE0Kxs5 zdC#)4D`%o7UdurZbQ{$|bWr7!6&bWD8&gv1dc075?gqzm2)b1KCW;@!YWORz7YDtf zcUp5p&!?^03KrDi82(|UXi9R#Ugb*EDIS*)uk1nZx?UAHp%>F!oFKcNw+OY|q2^-O zRh~K5ak}kVxJ-lJ-%iHw;*;=C0Y5C1wcH!2Z45WvbgC=`0&fS^PjY1G>uD{HURc)I z-}tRIes=j&SWJDpf`udY2R-Q09eY}sBUmuaQxRDf{TBsiR;981RjIBx6JjZvb=l5Z zs_FAA>CgF|<}P|<7_tb1VTh5xofXsIpl71>3-8Qvr8Ac>?1UX2%u-4o)3K+wx&;THGxs0KX3^B zfu=>BkY717C(+z`w;D5}PK$6p1e2`zGphOT}k;^gZgTp}bqJS1Rv{3C86T z7l#CP+y^kIkn9r7kX-^}i!L9~W#px$F|BMByu1{IEOkQ?QrFgC0jkVecJyYS6R3Kev;agrf?h`Ya05cjTKeK$q*)ypPxP>v|>jA&!BZDaEAXB`q- z^@N|RImODTuy&xz*KX-JkuiB#DfUBAX>)FBa7z!`UXDPs}*k5k$5!(_9Hlw{m5Xo&ki(*>}Xi(nbkM4qz)R)? zn{d}XK_^DjY8F-Zv28cb*6=YFG=0>Si6x?2>6!2W zz_o?<^KZJ&g?!BpW7+~=$;$Y?yCSX5R2oW!i4<&z$nhrW^`pFFut?~NVr462_mLm|O2KHViT zmL+1ycTg=OMiNzo-pNVD;m99>zq4{ z6w1G(LW)f+g4AMFHVf5J9w@5O0d^~a$f?PlShJ#!i9OiA^=V9J% zbW-&s?U_kfGV=zWnECFB$>Io506&J)bQdhH{Q#?EpCT1n`?Q@B&kh!?H!)LbOI9_QXNopWzmvEqbt zZ&K3hW$nYl$U9TbXP(oa4p7rx3$Bjy2NjhLI#amV=Iox(&BcEEs)B_s>#Bmbv7@EH zOds}DxiPKcUXky)t=6?uy$v(oD;nde8H_|2rRhYw%#nVwXS|1axFfa2bV$64!h+fr z{-TT}14T;=$!4EOMk}X-pgj2*Fskm32`x#RluTu&ydwYhO6!DHWTpAS2oYh`wGbY2 z?|l3xviN?-vFq4Q5LtYo6nwJRuFSDYv)F~Gy(pUD2;{95*=30Ok;rDrWff^;Xl2Mg zlyq)cB%|Yf-b7k;^j|n?pD&i(0TG^x5I5Ui;dXWkPDkdRdHhB}=qP=M#JyosUOy4H z_igZy!fX`a1zDhQcfzt#I4Rbt3Hf+iX-PKn=8m5+^{+bmXUY586IL)M%~Ztvu}m`? zJjdmDw&bX{CTecK{3$@!d?A+IMPz4>XWh*@4bu(L$$1cv`%Z=ZKpWaue?O6({lL%) z@5R3G5AYzyZjzx-R4;ZLsEg<$pHSGIms^s}r>j1%s6SgN-b4#^{tOXr&E0HL z)ZB?SWzFrnh{nWqskbhc<@!dE zjmCT*kNb+uHs*VO+_ztnuO0W5t(sWeC2?QbB#-%i)$zsJs~FkHYU8O{SbL*zW3R%U zULT7%G8QqTx>qdXysyq*M8sAk1~;nTC&%s^i|tB){Z8%t`2u!za>UoaYHExBMbsgl z-7^XQ-mG-u{(o@%uh+L@#tQdS#}||-14Bi^*U0s!B%?uBIDzxlz0#iHe}HE&PYX|U zcZUDhJWudU=lfQke4gj|?%+9uJ1x!oS-qupIx#RvParE-`j)i184v&8K zF<*VX{o=Gt9RJt*ftxT#n>5VP^ffzzG^6Jwx1Wu{(9sKg^*^E|Lq{*JLFGdGBPF=H z<-Z$GnP!JCKKe5ay%}l>!UmC$oa6!33q6S?cQIc4d-Ztn@Iv@dPm%sh@ySW{M%S~_ zaoQp||9dS>c6{}}AwN;VyN@@mQX7JpID|Lbp|@X%?{OyY%qCHjlhpp)p0n;HZC)6i zoJA32I^c*!f2%YH75~0vk;C){pU0M zbDtAjPLKUWt#qeI-@O>?cnXq~W*sW}+u~(3fk^0$eCI!>m)XblZ?@^*ajtmd4uD!( z%?_e)>FQP=K) zUggRn-X8OO=!kd87r>PLf7O_>lNS=Nsp@~e4u3kCPR+9C$X>d=LeJ#(cl?rA_ONO$ zXbs4&RRf1kh(iPdwP`PWvc=~+empyNNHg`c`!0PvRJO4zbD83tZETI?{W(@SNRDo* zD>Eo^Og?v}%o(z!rfZr_U&U%F+b5wW+2>wzkjlJoD$~Ua$lBVLU0Psmhe63vJHJNF zcBvQs2ITh8M;9Sup(jHh1#0|6B1%^1qZ@tU9S~fMdeIoD2IO`eBo45&0TKMzWgLbb zyMoAkHV>EOmEe}0#}Ryw#64QgBNqoBT+z(B<(m7E_Ud`|)U&uW$7J0cB{WAu8KFN@ z#~_SH?NEj3ra9X6#>{MX-jDS4)%T;QvN=V$LQT)HEXxWV`Lb_~2XCPPuW;@IKaL!v z;pEojuhIaV7y`x!aCv0MH4FsOTFp}VwWVmLZpo9C?T%b$xCEuE1@G6w#22+w*Qa5U$y5@cy?OcVc zGv6RfhiuQt*eE#;W2pRS8lqSl6Py)`HqyV+p(C8m6-|g-I<=VZ67_vR$LbYp9LU&b zcB`XclH8}FU_ze?-*~NFcRDiYR2*M$T!}+XF9>ND9N%cFeJ?MuaFe6nzh2|@$NOV_ zB^tYRTTHY@USgt-4(`mBw%BwWWNmp*UZQNI7i z^VUll{uf@BH1WXn1e@l{NOJe&%(#T~(s1TCZ{45yZjHf=d8fq+!#h#3B+n!#WqWuZ z`q4ZMJV?e#6aTGyS^VO^dFwVx+2g+iOUQaVbnpm9&l9WGk(?@Eeq7iM9h~E}o|oOe zIQ}Qi=N_w{)+S5nWhHo)zSdupn3m+(Y=D`~WT-C?v%39y;Mn?IF6yGbH6poX)HeRz z@NM!sUX@MOipQ(6_519sKlq5OU3$K#Wo-~@dM$Khns3b_++?`#pw93iUMx(q&aqb% zXlk%q{p?!E3hmJ${E~#tPK2$Bg>m(O4!bxJc4I7Tixb9*IRyrq3ITlt(7<2!GeMs!#1yKI;)nCgrX*Z;?3xReP z?j_TS@z_gH(Ic~c;d5nf-KBo5ziYYv+3wSsL5LW+IlcM- zwD~|^*VfKcE>GK^mbR?l<J)D`CnWT{_C0_pc-Y$1uc z64{Jh7xVn5_H>CSgmReF!-gdiqA79+^$jPYP$;gJtba`650Pjm$`i7BLTEwNxMt=_ zW|4Ea-_mmRuy^ab<7_&G{afE1**Nqb?hCW@9hV{yo!@taLjMW0M z(OW)r(x4v?GxJIjf^JQn*-6WecK zmqvft*eZZ9TGg4pUq;7$) z(y3qmh>e=klDk>{c07nDZYAzt8uwgr{}{LM@A1WQ!9ILZq?gzuB?kI8Y1)eI^>eO; z2^fhK;s|G@L~Kcvxe~p?M1M%!0pm`48TTmT4vPCi<6bZBvyHo3+;XckaEkwmyN_|N z6St^!;(tKghm5=M72N+Y?mBVHW+-vm#VsewacA$x-E7=d;@)iBjpCMdFLBad#r-qm zE)%y{y~6))afgjt;qF|9=g8M^EW*(sj%pnH#PL-e!~TY27LKLjn1W-wI7)G3AHZ=r zj=AC(f#V@@Wa1G01=_mA5&Vb>Z~YY0=HGig!~a8` z^*oz+8hN(ywDaueQ9SSSq`i^h_wr=(ay0lj_{3CgCc&76#;JJ-wBhNOT13WiMKlMrar6;*R)0v@TxcGNF zaeMLZ-6zu{T$S(9bXj-j!9~>kLvs-~@WN87H9@SnXgh>jf2-KtqE8aF%v)DVj2S!= zcxLlR-8pS@#lpJd& z_71j0X0Q<@$NUkP-K39|jS4h=KCQql39Z0Kg7y@@irkM@BX7#D3C@g24RHz^2^-M@`;m13bjaphvwL*_A6vZ{NbH9>XZ(NFZY+uiJmrdQn! zA!a`cSzbs^$=_YIP9MJPGbgd}(R51nL?zuM65C0{; zrK_PAeLB8P>rBPB_x64ozI{v$6Zp2|*9m;XAYl*nd;tS>$K%`g)17+8@a+%RBLfk}Ca13V6ZR~@NdzB81>jwtV3_K7!HJ_p!7_B|vY_X$Y*s)3I;H+bH zMH#i@RbHLTDVU%@hfKwo=VK_(`;LtS)c6x)c2(tt!}Vj`{CvC~uDyc)z2} zHDe#gp3!#(GT0>A;%YXfIDsT+LSR}@8`H|fcC=NI)xt?AZXHO`$V7QBA!!gz{X)_3 zFBEOU^CM^k1l31e{fo{I41ZCjGxn|8Lj-JN19N{y(7qyY;^ZAz{ly zT^asIdA9Iu<=M`&E9u#b`>#9)c;4jc;(3?n2+t=xZps+LHF-Py!X*@cy%b+8jqFSC?cvkVO;khU2v2owY6U)<#=iG_$`P-R1 zAQds~iZT9Bvlx9z(w2}_hk;;CaCh8&RpJbje5>M5;-|FfM?aSmi?}5AsO?Q4qzA3< z&@&koTuFz1A}0<*+YmhZ%9>Nq!_k*npBR5AK=*JwA5$0ITsFf9X?4jl9n}2`u_94n zPZZ5sa5YUm{3{4hYpbi*JrP1%BGbHWzgiXV9~7Q@Y5?wL=n^V1S=xXGz=kR`;>is$8gctrXoQ%! zmGc|R_4$o*iRzRN^X^+u(ABcbI7sJ-9rp`xAy9Ctdf@DjqjIxQYn!>cDy8*~YrJ^- z{Vt{aC+op3`i>Se6&S~9R2TLYg;~pPb-C2eF(;#Px_Mor43!(_bz1nd`&KZxLJnkz zNe7N)s9$hPYphzWbFPM)L7#~Lxtzw&?YjPXXqBl6mmn)?%`Q4z`|kBAXL|&m>93{) zzG6?Jr}{>2>=u*d`>f&mdR?)dFwvd=;^DXQcX3UM++Q=qg}I1>I`nWy!cSio;j6zD z(r!)k*h|y%cSV*TaH2KJO%f89vu8uNcxBI?x44sKyKl{8qT3uAJ6zP}8`r(+6N%?r z!*NV}7lS%nJi)mgbA7{k`g#c8>Msylp=J~dZAA^=SMQSOONWO3c_1?WSm&v16ZFSG zu?gpHDy$#_33ED8ZYWtEQ@n8vRY#Z8Q<(3e%KeJkIX`l^^OR{b zr&g!~bfi`8K~sg`X_eevvrBx2QcMU3hb>62GwpvhHP}m#V1{u3s5Wn#KC;I*JS3@7-zwxB{mz;1Ox4gcGZ+w?fH9V zg7Tc$9LNRM8f)81`s$NlK7Tr%Xc>=@o34xfp{DG%F($^CEZKXU7a0|5&Mw+j`(z9g z4gP(cjDJb%v1EG~-0#GYuEh`r%0+W~PJc@W)DYbW+8QzZr7$r-MTPI)^_d&hxGOEhHTVJP0oa_iS55?qN zlN=oOt^NysM#Wf@StT_~vQuGCDW)pY25S3o1n*0hu`HAW0aJ?AKas?vzfCxD*r=n8 z`nk+9yfoV2vzXfsx;v&(28;{IHH)dec9QO5btH>zS(PUDQY5fb&W)oW>U0cZW2~ls zl~Q)=J7zDl0(Y~e8EPIG<;oflX3anSLhCotpAeo-cP9(Pcz6D6ZM-}0!uxY~r@3VI z<)Z(K?p%0kYFEaMidU+oCWF*DPp|gp6C$&pH$@v(^h^BHte4y1N~sQ)B*DRY`SQyc zP`)M9mgCxMdy5!dl>TS3$1rU4xwWUQEluZ@St{S1eb`wVcJAoKPzy*06V|X$(@5-d zH=fwegCz!`RU645sFtH>K|=$r6f-Elguj89Vs)HY1yR`-hNb|il4!^G*m01C8%R-u_SV(1J|TbM3QcX! zIZ17@61Dj~Dil&1nydDIlIv2a>yoYOvX)3a)g=keHw+x?dsxr1StOT*4NKfS_c-$U zIB-Kx=d4WPze*DFl@xj^n)DAjQmPo05+cpD0lM?KJwSgMi$O8{(&f1f0}P7g_{Noc zeRl?)!cGx0>nIEsuopk<|D_1q;G6_4#cQ#`BP~XzCggs0xsx~Bq^D?KAZL} zZ_Kd9yUlr^jEbW1o*GdqFOfrjKV;TyXrL`|onm`|=4OIg6R^rz|E$jYleIPc@A&mZ8(fEYw#)(d!<_5$rp zdx4zLQIGG|=Vfzp#y;CyE;Q5HdXiHjvr*)Kj=2gn>5%eMUXWEnJw)GCO-4z{t(cb9bA& z_astc@uJLak69lnx#SoV!r*q`Sl4;2XPNmA?+Lx0filRGc=qYCLL`QCblWP?t&?BdD!E_8#E=k)Ay;`Tc&O%q?;pXXFPcy>Xi{kv zT%}=QWND*+9r-I$?kwa)gT7qG7gVk6GqO@J_s4Jo0qVsJ^pN9QsySM#beQqJC+0m& zs%w>wHr}_!yhn>St1IAhqu{sjmir*TuHPPYt&Zj;+~8Y6W+3IcU7AX`ri-oB(pE9s zF2{{$-WgMKeq-V!~PKp6-6af6%R>z0ZY5@UI8GR1WbvRE7bSG`EtAF?s zr~2!OF2A|ILzluR@kktIzRto?<7E70M%%jGEHTR^j zE{egr+JRNNKm#f@M5%NxP-Z(&%1#PJI#kzjPz=f}1H}-$(lVfwI8X{t3gwqED1Rw5 zEmc}-8j<9-9P5-D^*IsBQd1GUusjU;HG>XLRshCPjNn zV{~w~%%i)npA$W|3$OeM$2tTFbS{ZM=57|ww691BVMxIze#7MY?f9`jCQj$bA*NNX|0l{tYvzXZ{RrQ(aT!GgX z*e6rQ;}WecuwNkPaZcX8l4fqXBFTLRknFnZ4r(czj_tRs9XU7R#iAjALjrQLNU$ zcG+6i=l=z;y?Q+)Dp*-Hm+DlfRn-wy&3Km_pO8XxbCL}OXUQBM`8InSETh`Oqj71F z;bL5pqAgs4E9V~)T83+q_M3!jDPZSC!a}mF4#&L67%pKyCCv&8*f#wy zHHhdEwT1Jf%=}FK3;3eM*lCceN##qV@;|;%l1_IjPlSG^RqXI={3NMFZSNxLw}@I5 zEatYpjOuJVENw@81iOovhLQrDrW+7c*Q5qWN09;sa0~&mFsaV1rq!z6qd-n3r>?`z z^5HcvGCW&C)Hs}mI7w}yo24-HuMjBP-p5BrQ56&7W}!#ck7dZhF7PiIuxW^Jds{_Y zah@c$!*hwm$=%-%6#47u(327ovUF@9FJJw|eAPW6ar*ee=kVd6*#6y=Bflw*V(;@! zO-@m#;b+>{soWsjmdMg*#}tV!WB0x->~-4LK`y5+vedq(1i4D2qilN;ujpp^Fvu}j zkV`z(*_I&JwHmo3Tq9RkIF4Kr64|^HEQo}+^Ka6h+B0(HoepxfM@|K~PLsOFk?V&V zxiYN&8*oIf^3SvSZ`5dZRo437;%FFqYU|k3KsU(qe9=Ou zflauiIkIR2bzZ(i&2yT=M0F79bkkxIwMo$J*aa!*Canp;GmsuL|0SWDz$YLF>#eX? zNdeLi1f0nQ5d}Ws6pVE49Jeh zZiFgzWz*c&`@F4f)o!HlRnvDu>x=zDfP!tsnwL@E|B6i7-l)dXN_FKoNx3ao9d40# zHb?hwsO~H1s)2n9oCyXF6rZvhXvjyvf1o`ngqlL;29u{_HRygJ=U%H@tl3*(nW!Cv z-_6q zGRn8+ejL6>SGyOwjG^j&oj_(_>dLi1_75fI$EX3@VM&DVxwb9Q1zCLxOB~3`;>a2h90Fbyq zx5T^`ZDl(wiGVuXwk5iN86knc0E}s1ry;&%;7bHQghE|}Nt>jx>45oiP+gXv(!fq3 zkTjo}8X%=6<57%%0vukzSKo^Xy{b_o$fSRg&+0!(Wu3PA3T3}ReAjE_ScVf2Mc^1N zDcbsX2>iPcnkIu|CdO!Wr3SO_Upm3%f@1>aYJ+1Y(iPyC1Ex{H+$&(VYcQKkj4RcV z$E7sg223$vwh5S1G?@J+(ikw&0n;vEW(b(Q8jKTTtonlne7rfrI`Sj=>q0*4Q9RpbCqpNbODnsVCn=+mj>g+n5gzQO54cIZj@;fVCn_T zhkp|+yVrmzw{3|oUDk~1#ELBQOp!8qe-wrxvv0kcuSym+1rWNKSwMu!)h9K;L4xnH!G+1LB=X`Q8CwT0r3N@i{5=$2QUkn7XTC6~eiaL#EQ_FNR8o&D zbz3aJcshf;2L3lSU>W0(w6*ZRsR2TD2v`jNO917Z|12yo=RUmqwW^Bnh2mCX1!2*D4)xRAS2Um?=k--L`t*GUeQnE>n(#sQ1%k z%8^h8r^)3e^;DgF3fWW#-(vRJIh*+%j>ajPCIRZ^Q(+{!)cl1hz^r(T{&{m(Nc^*WP!Sx|jhr!D}ejn@iQ3#UYN`Lw!K z6(5zs$2SOvaqq)%_I%5m@daU`9yb&jI61fF?rNz}Mqb#?6Jfv2mkO$^o+m zwV1pV)O8AhZLOTt04X&YM}o>lK%%?55lB$Pb&|=xTTOSbj~=5tB}DbY8Qm(dl(xi*>pk@AMIp zdVDsYDd15sG)@I2FD{Ho_4~_PZ-H2EIF4F%XSqsP*8n`v!hySrb}URv7E9b zmt&NU#BGQ=ZO0<23X9Ias+z|>=@XI#gO%2|x|^dJYAU{!GozcuUyqHTivEJZVX(RY zym8p?Z~j3Bf`iw0f;1(BsTOQEv)ni6^+RSST!OZ@Nnq>QpskU!I5B>t&H;?W#n+fr zKUM=YXh}k=-o@PH0NEfwRsqBe4hMB2%WFU!rJ79jw?H!yvOA2s`a4!|i zbppulXNDl_a;rB9NDPjBW^m|C{=AX~Gt#Kt=sR#86Y+rzkvIM=Lqy`(c7qurKUcrI zMLu${7_0my61qp>aGpO);^-B!+nl@HTSg%1?Y2S_w zGkWOsnZ8)3{~^(B8K+5mdZM~SP|K;;#X9}rc&C?1r=K2A{l`S=ZKq1=ph^8O=Z|!1 zI^FSlL`{VPGPx6jP7m-A>-3v`74LK}?cq>?um3Ko(>K%Ud4#Dao|9}wn`V2IWdJVe zj`|DhDu5r%yMj8kI+bmL#Atf1LldKI)#mdBr4z(;mM#n%HC^IfRvexp9-o21SC3rqv>>=$!5m2a74?GNT*AP zdgHKkx`f*H5&i+uq<*(VKBbM-t-Un!gtO!K(^5Nqx^&yu`o}tbYogowV-^uW1Jww@ zlWl%%oyVA|*^=nOc%qg>qJ3G?359X;Fzi}-Huk+O$ij_61l1nS$YQDo83LbV^0c~s z^v5s(fdfJH!5}~c4sadOPcIf3r{DBCi`9d)u1pE)YY!wLKr0CFLxR+ncFB7aP9V0K z_|i4|CGaUGT?YZ27~9nufN>CDn@RPI%G97G2|#wRw8bSr-WMP@1H>SJ(@{GObcrxm zMtvU!N>X<^V0H!7z%x?%*(m~4{Kywl0;G;)+|C8_1SAk(ok0Md$s>$rL4ai+3Ia%o zdi?`I00~9pY)1VawF&#JriE2A;VeOA)IV6kuEHfZI!y@^`1km@>i65EW__M!bxWmh z+%3(TV+yv{B#;VElE5kLL8>uq2^&FTq*j5+FASkf8uE z&FWPDWdmIz1f^LY1{IT<)dBNLQ2pujl-6^Kus^8oOAU}plJToS)j&X^S(ln-)tOwk z)HLh4x~(Kct$kmbRYGlhmTA`4)QlQh@!P@FVKi4p#2Lt7&GOh14QeXWwYf9a2M1DKEpahoW18S=_J}9m05t2YW0^d=+H2!WfpWOz46!<_l zfHum2tATQ8Th-=1(TTi(4NDdc^vpQ1MNMvahJ6De)IVO<3UDKr zb7Fj`e$9PJ@sb~oE*K3-)WF~QU99Bq8)!$=L=D{ghOWp*kQxWLAA9KP9cESP_wTAY zU3!V7u1W@eEV`foDZ2*#{W$PE1MOq=j>eYJ<`euD08;W{0{r^`uWHbMB?i)VQS4D~ z{VJ*O>CpvQOzRr{C2{!E4ZsX_yM{mCe7c!Q9r(op{}O?3M2$|2Udm1e-aEQr1p8_l z_})#imZ>+;GSwv-_`T+n9YFyig`XwB_nL{TZ`BWV1tgX#j01;7#3R%+oyO}2JNB$} z;7$X{3#;frS|E_t3f(bsHYY}Z_2!18HW(0Hki+yQR771EFXll5&8ODx6yV3q=RjCU z2Y7=3zfgeRt&8ZyI7LO0fe(r<$g{&`8hHByu{OvuBP2^*sDT%l&r@MP9pLK)c)JY5 zdo^$;#%Zb`8F+S-OLN0>HSk4o;3Wpy>8f2fi!&O}U`a)QG;pH;Uj%SN2HN?g9WOMa zNg@%g>Add0cQXDn-U&mrJL=rn~b7@fh zMaPl$P>0@$#{uvNiKp9E{YJ-;4pDze#F6lOO)p%=1)#)9D#UyffFysuPAo{L)}xiFVk@Z>(%_!I9?N{D5&yu92t44EH#cp1}+b(G#y8VzRF9DMUTHNv|V+0?2&4Z0@xTJ$Vv+Jkb;L=jy&PhSbLzl5BDZ)$=m>Zp$Jn=fKlq zwbWbF>MjF@YE4MM7^`8VnK`&DsD7XUFb6wcSE+V*T-%mhSb?Dqxfr}X;zqzQN;t>LCaR8gxGHOKVLBse7!$e5TUfmaNq3mi_##3)xk0gN*Nk1&3d z)oKk|l2C^!a7wrY$PK*zKkD8;KI-Cl{J-RmaA5Eb4K`NPSYpLDQBy%hgEa^js3mv^ zB&Z;$h!If{bAT2!a5>?8aY|dT)MAS*RcvXC6%-XT0ZalSf}%!6#Y)?aM2+|Z(8ztC zv%B{zV72}H_0kQX*C4Fx(T>omXa9vW=1cLE3lFB**zksMveQuOb zp|Nr?Ej9FQIb%pB_eD#o-K^;%x3F|f2KTw?8j^BcBC+Gkba;4z`RLxrex+XzfF^wamY+HX{z%kY2X4w^{X)22njdWNn%%DQf6$9@oExa z5=NUTH9=jbK}!)Zy&9v<0@*1*ofym4#dPkZ*v|z3asRUt{BwhWGV0?|_!S*ncQ-wc(dV zGtpELOi5#i*E30C&c`Q)_-fGu7oC{o>DG6Xdf<(vX*|6Np6(${_1z#49VbIaKp+=-q3CZmc|h zt&7Z5gZwNvMC|A7O!^m!AgEm|<`~<2lmUK+x?!VGYKr-sjgd%5+OT~;uybi-mGBt* z&g8gLRq6T;==zqK`tDM%uZ#7`%VKfpFFs=h6js}d;(fNE*Y=LQyWbg}b z_8^&tFK#hRq^;z-H>g^>X7I)$!4APInF*E}3z`3tfDjAz@BCA`ln_Dv^3$YsBoz!W zc>Xe|9GzXbq5h_`TOKV|6DXqX2Ej0)6wlkY*Dp zje1`Lv|MW6dck~`$-azPB_R_&pr~W?CZ3|7#ht=Po6MzHECrjfA&_lKS z1KP;{1S9_|4dS|kz+SaSgi3F~Yx%dm zW)`-zX1V!(5>m1_)X1Vs5V>)Zk;T66OV^PUwFK~3uUZzpMiw7e*Iq+&V?r3!zfH0V z^VJzTD2#8pg7WQE_<);FmsP7kzkM z-?;PDvdiLf)=PY18!>tRT6os^vY&Xq*-vaHONoZgeqxTJYYR7cqBsmD+Z{ zVRQq#gK)~?v<~<*9dIIP>Ss@jSkE#Yh_!twAW|za>dsEdZkPL-ru#be=AvY`D>QNI zRReMK4fFXdeS?qyStLNt2Z-q#RzB+tbjh$4w*}SYO7snFzgt{31l4v=X5TRIHwM*{ znF)e3%-+O%UL>UCzSzjUuH?3Bjog>)7GahYwd`Gydr6JOcJd2|=hcnlwZki_Wfdi3*}!(x$jqx;SOwMRZ`WW zt?2S5wVruOV(US`n+4aP>Vb?M2C^(&Tua)fJ?^X#M8sjW&l+7iCM_2ky$-m@s6<*B zeczju(RFVpWpws0(qwciGP;vA_4<>7Nh?8G@FJExA(5V*B3^GYTG^q&=Gdmr1&kdU zJVrKNQa{k3r3gT_Gf}lb`U#N505LLZW$9%DU1|}hXjOO!h$%OE3ub3f6>$zbEy1F| z+iAyUCJ4?{{2CWtWu?n#zL8N~$x9QAjQ;9vkx@xe?Yl%qC6)eaWb}2_I95J|m@4-| zkx|XUTLU7aLh+Vo`yW9@Z{3%W(Kj+=^!P7@=Bp@|)XkGh6EgZ{x{T@_^8YhnXvr8FBE|Gr47$KbG0@2FFC z+XOz7(0u(N2xEO5#fMBn^@QclW0FEu1ih`|>%A~dsNO}W29u`duF=))W)i_Ct`z(V zyBA2JywYifO5#E5J@wvwNujDXasN;+630x|e9HC%Apx?Szp4}sHJbPuMLS}G9Lu_VOTNJ9|^e#!Ke>UKHIh!jCM zbYw&bsP9Q_|1!Ep9DL*!rU)dOl(av%1|YUb6m&0cax_CjyY#48)eRU199aiBh^tv0?Y+|{6acLga~6m3@zb`kspFX~FvZ5@Q>Hw8J!chV= zk_0-%0PO-$DMN+{0<@n7IyC{bKm)aTyQ3DCDPpArY`RGNe6P7p3_0jt8>!j{C!z^)3}RD z{M{_yy+iQfqVJt#715G-}OgLXuHJE&I>X%t)FMMbgRt$O5Xdw@;v^lqFHlE!R{pOP}i2ABh#= zcMc?rO4m@6lSO-G6g`Hbu>cqR*oD(;&I7RiK9PL5>C^<((L5B13r}OjWwC3Fc#fNQN<4e_;Mh?=c%VHb>MQt!IM{W9 zq##=>BirVEiLS1fM(hI0nK(>+kMOp&yXG#U zoNDwA$o55Y!M1jD^_e_N94iK1gU*(%zJGwFP#xn$`Vk+E73j7U^1C<3(O;OvK<82V zd7=g-jJWYj73Zri2(l9s6pdfEZa}!vdRfc$He@?DHBU7QA-=f*V12u$d&wEK|uXflT(UGLl@|D(L+YtNhVMpraqjLBxkjWD_3t2hk%>U z;mr9636SOdRl@*c$Z4A`JivqjYTQU=hOvUVCKSn}| zoKp=sbtQMx#e|&0Ulejmih6vjkW*5bZ5eWo7IOY<807qA@60h)PxJ?3OqemYQi!Dw z;mg^fmKJG$4d9?-cQgveK^fc4TJ9LKCdb?UGTwgqUSh_7c?!lKfdPTXsC8%=y}>N- z7^?TF3(jGwsL~!6I^!mYVtUNdHcLQ@DOV(U!v^~eA+b;7^7<)a8gtCPstIFj<*#QJe zs1jj_Nik{m6rCJfTQXBL)Cw-C40`_{w3}254dE{X)j9j zoDf-)J*QN9PTf0+o-;iK<3xf2_ckO29Nzv?w! z(=f7Qd0bsq8^UZ*l-$AX#5`PbGA*%7F~4|D!CGeIyXp_cQnB&1}gw~?J)Qi=bk z=^gXsMv)*%SLYFouaP`BOYjSzh{_%!pF(%_x}Hl3&DB;N6pFVT{DI7fhS43-v4n!j z&?pqX5Ot!#5FP#f<^V|@(P_Y*KDE)#|iGhpt;vLGa2>I6)IfHADMIqp-l z0ApD{(Ue-Ksx)ZJfuA$gu|S#y$XjRyee{_#aDp68(fpdD&jlEDYBC~k77XW+n(tVCAoa>NFCtbM^FMk(plnMxBDe>coU==HAAb zFiRV^57d8|xWCa?JFzo1`4@fdd&vzEKPrYEn9m>F4ESXkLcDb(LcKUxT6hJ3Oh$dD z%#w>lk|Z)3*+i3>Q%7TU1Sko9OIg5}+>I3l5hJImYAo7;3r^%qt*>VhOc!d@zY-bM zRW(Km1QGsow3Gqp!SJk{eAo1m&fpxm{PB2}Y_ZSo>@v3bD z`b)>jy3-hm`ns9=nv&O<$hAM=CjZ_OF;XP?SxTfOKctfjkeA-zVlFu`7oMn{x64ve ze~Y5&`=xxLSRa%AfH^4 zDdel+Xm?PlJJZNly0-_5ImD~S;LRLOKFBL$@hXXZMwTs86#OfV?IwQe>^{eKONKjy zrKt>m(;4`IimO!zD&9-WVLZ`77emFZd_l$4hKkY@s$MH?EqGsYHznFSN*{T*bXlV| za6xo}iq)EmvuN}aLdEYbO;B-xq2iOYT?ztuyFhOEhd|z)fLx=gX!EXBRcVly3uILT z$cT&(pAk*)HfDADowBMd1@Rq*tCQ~85ui~F>RICGVFC2z9$0*D1mRYl>pNpGcsP9%vf7@`wvdN3k`1iaz?Jx zlet!u%1utsVV)n>e)6QXzsR)aUE2SCM*Bs{!5mHyE+@etxuT%DAiVosqf#?!{@b&O zhOF>Qo{x=I&dB4W@^~fBexuAY@?4+HL*08;c%&6yp`?+NjC>c7&#u^Pl}ok~w?ymB z!o)_@1<#0`q=)L?F$FL}D62J(Rm%t{B8in}tfqget<3ok8&rqvZ<*6ji)@2V+Stm| zyK`4!40K%1K5$SAyRLHVK*HGjg`kQYlA^d+lX@kUCh-fs zL*F%X@23kyuN28f;Yv&o;#(-9-luY|dn3lwygeD(oeb?shCWM%4%iT;DYek{57Y|g zI0ksaF}Uo5FIeV@yDs z<3n{jU=q`EQ|cpiodzvM0D{;`W&x5%$573?#RN3tGRdECaioSW8LDBRx_(zeqv<6q z3+7Y&e|Kl}CX2#nI51`=2+lzMJjjJfP}{5-hx!op1-H3rNtq=TomnD6BWzF`WzMW= z*iy`meb%RU*Q+Egxdmf<{VE|e5cW?$jddA5FbBS%RqBoDW}wiQvy$P!oNX>_x4kE! zQ0Zan*H6)lbt1ez2(L*m&<4V1KsUF!D$lP3U@mx*Np2WrLPV;NM9wd%nO(ukZ55YwVF8P9s^{+OB_NeNcg+|R5mrjDqPL0bF>AY%9NYe;ha=-=q zM{rpsxcqFb#-+2t#g#3F(jF$x@ueo@FBRkMzcE=OBjyn;(@5*KsbpSnV0BoYR7x@(N2 zX2B?5F#7WC#N1X+c#%gxxvse=dBo^dcfXMkaJ^e#tJf~4Oc=@D0d1QW>SqEI^l(`O18s< zRT)*~rB{_@s*=G#*qxDaFEmZ7N(70j3fceNm8uF6l&bE6*IGg|AUq0$1Wrh?wCXv@ zC{mu0u_m)B=|5C;T2S>*tE#|M^{zmW?wJAM$H}TFc>1H#jjNA4HU6>2>kG*|lc7O< zk8Egr4zR(@#6ZCPJUij4@v9LX1Bm}qE0IO*PI0>W&9jzI!k0Txt8@l z4|Z@y7^ot)F8aJG{=Rfd@#rlkYoZ-hi_kLaGnOdrZA0ViaV|2Y&Q|%`D&tr>Ji9-;n?Jdyo{VC&K89Mtp8>v2+k0RLzK^ukYan2VY{wmVSmH+F>8eF zlA_kH7Pd<&rXIh5__3PbPdoEa`|HRzt^lY0{-vjFj;XViTH zWSJfmZH}R8@AcpkkoTJ9(!_qkZ7=e~H`gUfE|$0W6&M8q?T zh$y^?&>N2H^(aXr*QGr8`g(>aSPX(ewK+4vwr>O%hG!-SK>)>G(yvHJ$;fUaBf9n} z^mkDW{T>&#NQ(OP-$h0w6??_V$VfHuY(C4Es97W$_O;w_bf$o4L$zm9LO@1m2*{?F zgoSnK0@D3B5fD)i73u0h?=`*33aL>Kl_~X5qhT}~(W$^4yoZ)B&fJ=)G3w|OL_J6? zsD~^*66#@eFez6>P{pc;lP9Ig)#b2rFlp*`N0>O)5bp}sg$N0^7D(c(*OGE&b6lyK zuS?2RwJ9}LZ6c192lF|OO+gD}xd1s2AVwxEi^d!1Qp;44i3Yk;nijBNu4V)M)eM=i zD6pZlCNn{BhV^VHEhQnv`U8gbx{_P_8P=cwn6Ok*)NjS5bB&~Oagt&EM0G>4db69>W^!5g@&20j05ZMdu}Sw=@qarv6R z2$v;YHLescOCAhp!{u7_iz4|H>bCrjMY^Zf$qC=s)k!@$>*XX__v7i3^hmiIMnc&| zB&*>#&|m}+gyZu>7-CXPn!QV>iypI^d3@7=`RY#qv&7wG;-cz)U4axK%RSgigapWE z{8e25VhC%Au)si<49kSLOSWbZ*Mhk>sFrQdAg(|K{(V6;FEc@KCShSv-AqD?xTS`; zx{^U>ff57dQP7fEmXLMopM|WFN^jv88vGm@sQ!JRX^?H4bn|H!b4YcFWlUo}{ZfdP zG<+X!VnNoJ&FX1UtebjkelT=jIU&iB)*VTXTsJwZf5}1cA3$b3}>> zt%m7zQ8$Jol8IK|ukrzAInvL>{YrUs1yY18OR#JR36P2WRWkr$IASUHfPpRN{`XRnBfx#oU@8uIpEFZVDs6TkyN%Q3`c$^9C`S3IPz?#OpdIOdB_wNRt-lU%HT*|qY#+wkOW_X>gsO77-l0j z_V)sLDGH9wfQ2YaeOCs@c~Wa(V@)gmpq?0)U>A*&8yc%gNjvMB6Be#5Fxk1QQ3?t% z#bi`nwk26+b3ClB1E6Kua#QLNH9}Xi&U|tpRWb{Zpa9t<3dr2BZgV`U3UmQM9jyLD zE0&0Lpw7Qu+9~HW{*0w9KvaX4D$A6=U}{^?RRa13KpSb0#UF}2W)PRU>qHt3Al-(y z+QPMV@Z!gyH6cg$e(Ps65^fl9?B@+!;ugU;s#UszqAotGX85Bkd6#Y~ z{CVVI;g6)KT!K6nqxsX!FErrQc$eDA(o>5ZD>{rL56CLJUMg?O;K;=rQyi%f<(%#c z?(C~tDe7Qcvhe1N!ks9Lx=vRImvs>sr~@0jMbL^dCkj?n8lM>dg-J#ap!L>9`P1bI zMnjGl;PNQalt8ck&4h?8VD}Dj=n);}hU?~Jv8=0k~-VZ_ynxQw-RF;mI zrpl^WJ(-XALTg<;t53YpS|x9vsPh|yZ=Udl@`V@gR}ZjdJeY^U=1b}t9zv{I^(Y<@ zoi_2!Lb*#lw~07i_VMSXY+g$vWsDoKDw&nwtUVjc4k_4Fjol{Cbe$;s6x!dI_Vgct zj;&#VvWgctSsz33}^WFYE-*@}p z=;`*qd6L^-P~i5DJI(FC@^rU+kfIjx8FU?Z5B_ zxBsQdZols)xBsD=-Tv5A@@8ebdwDwb>Xp;Em;KM%rB|=6y^hN5c66^^K7X(7y^cAy zSFb!0dmQ(@{NulWLeCRVI=SGKA0*zho1S{lF5H@WPq~%X^*BiJ*~C9UW>@sOw&e5h z?Gi!PhHBZdK)x&v9wUpFm^RxJxBYVs1G0L;+rRzbn$3Sakbmu_vKibx8`7u zFR;NWZh`AA&R0ATC4X_t<9yll&ZO`26&1JqE*0k?&i6!d%K}rct@F36l1iP&QKu-H zrcvt3`G>G?g?V&yw!%koSz%ZotIfTQf~bP7htZB;`{@a5l> z%Mq0{=TyD3Mi0a<64xGHKxl;GO>OJ)RVLj(>mQ-;4Z9q$OThH18cY zq{~O|Z+z&`3FSs-C+LMUlO@i#ymZLxhP+N&3YmqHtgEf3!A%ksE#DcO>>8o!u=?ZE z^TM+WX^%f1+R3xk96&3h^}F;YR{;kx?_DdUB~dC?e6VoY+!$z;5U(CKtD2=qOQ5;r zK=lOY(mZ)|vyam`@#bcSw+wyr9-x?c{}X)R4$omX+Xow;V(!Z;;^zI#&hnCD15X^v z1KA4CuOa@uZl}D}JnA{RIVAvoC)ggY@6~5RxUM~X;N%%4yp8?DIt?7O)o~lBu)I)o zAE+Ta{#4Np*rmO+7%~8ks93KjO++Wb%;fu(1;0H76fu`|;X z4K*PuE$;$a-ZPAd4oF2e5xvjn@7DZ0Ytv=kzMHAE=1blIJT_1V1d?2nd}q~9JAR*U zY(1f-={{#%ofFvPeuFhfR}JS{0-K1Tv#1N|siMvK()}rQ9y@zG)$YA9r4_D}1yh>v z3Rb+;3i-8Yg)DZZ13R@&z!sAcu3jbq0XZ6*gH<3=@gAdiqtqrJ}IVamRlWh5eEOHg-64$jnm!!75saXe^8Vy+ib@3#CUO2N`Atvg-PLQ6D4Fv3n%1_ zhIT?{+x}Rfr;HM?Z5md(a4aQ1w%q zG`7pr-=%X(e~gEC+FqVWajUWugyO}vU-kSh{pv&mHbW<0<>(jX{Ujy2mC=v+e@N?3 zqHvNVIjlcDREHfaeJJF0W^*PwurnIiHR+*E#G*htt>rJTvhH5iKp+}g))?5Ml}$j& zAGAwg=lsAws+vfxgtElBRPWm~1!_5r{$~uL%2;3>t=AT zxUcpq9pS#J``dv8|w|VZAL0wETk45#j|P^q20->$fCZSPw9LqHV?EwxI?%fqgYykMJP9@PRLB~ z0t)PSa5S5QZ)lT^l^&Sr`+j~sa0r~VO{qXN+P`^Tbg)k!pSn*Ck$)m$($cw{` za}LU8{IuhonR*CqG(%`|9IR9~tL+HFZxSA7kwU2>fSWc8Sg3iwEAd< zpU!_|O3HJ(pN951mwL@9$MfW1F&+{m&r6@c^uW5Hntlg*rHRKdvCv8m`f72fcR5hiSBu5rGKA%}BI&Qg zF|@qXe&poDa?545mSkjxE##ZW>-5IlTFy)W)x(3&NzEcOofOS6Ec#0(i@t$F$7OQJ zH}7RZOt>@{_)a+j<~)yD9F+|U!Mr?72sVeVvZa`(iGbv4ZoOBTQGFCCvxZC{&sKJ~7gwOjev zSS3;FeXSl?RgkZEXirt}Pb?=z=&>gKcB4M_zL4HI30F9u)ZB?HRiRT>)KKQ(rSF9!0zuAD>>tGxY=-%ZfxyR%Kn4ZfgrDTRzlNYf?1uTsM!LPj&$-E8e4kveB}l zv~s5Z?@aao3fueBEUQnPfOoPdnj`qAz$zhzCmPUKuz&;@cEPH0(?z-2t1epB8w)z9 zemP6$OVf{6iB9yO6Vv}Q^>>ey~i$Jlp&Sut|T*IBD$#donfF8Z5L!>iWQjl;8d`eUIw-=I)kY^GQJ ziKxn|2{mqixXz0W^}r24*U$4Jb4J`^{pR~lt`)>w&e0F0iCkWl!b+~%DH8XKpXn<0 zzHJ2T8m-on0{EH{Ko33Bq#rOHc<=gjZfxE91^qM&A!^K-3AL(^n(VDmbN{L#I}KMI z#=fnFf1juGZ&-?dDIpRzY#;lz967SohrrC1l_)xEL^lSStEYvo!&6z03t2&?L=?N> zSTSKl^|>s`)8@F}Z0K$Mi^f`4sDyNri_QF8OiQU;wLRD#=lS&oG&HJlDKxm8r8CIO z>`O`VbuaZh-BwDbp#=@RIG(^SJ2=@d_-#Jsf5NXQ9Y4|Yh9G)60VU2ZKL5PNz^)&i zb9Ql}LU*vLhI~@z=>M(GwJXzTB9zapGoAXLATHC?w72{J)Vkr{y{1mV$sVa`&i_`^ zo5kn7JAjI@m8tbZ1mA)fi4^k+?~7dZ3;Y?Ig@xV_?BUyM*fldp8U$ zN^(6XIGLrl73vlL|3sH_4YrdW+9MTerPIv(t9jYK_y#w+bD}%U54@S+eCJ@5oZ*ss zul(QYefCe9O0mESo@;2A^+rwe7w_OUi_`?)4ByMho0xApKgo@3u4eAQfG8v2Naqc( zc7_#t_1Ns|?rt1}p$yW4^5jp+w$QPdQiJl0nc;ReUUlV$Tvwk@b{v|+ zc$$+dfAwg82mL~H%6`i6?w)NE~EPIA2Ay6j1j&7sdJVj7=EeqoVcO!bLlib;Jf%hY)F>#Vo-e_s!3A?Of=w% z&dzgY73R6)(Q<#~NbXL5#^rK9`~ z>P9ATX-qKV#~FW28~^>xIu0{J*bH#SdHcqrvs)cE^H`@kzu^2?`GvE(-{oO;b(9nE zm$Xgy^l6jZMMuWU_o!>&W6f+uv)hFOp{~z~!fR<3nz$KEWH#&!&d)owj-C}hP+EPS z-0udgvrGlU^85Rq9GqW@?KOr~w@FUZTA5-`Dyg@iKxJ>Q;d@_n+>@DI`ekw*%5^9f z?=hAFB>{ivjL6HO(*fE0+dx*khwpto{E|oKYaEx|wb(=4Z} z^AnFVtb2dDcqgZO{4%ezF-;qczv{|_8c1?1+?qF1#H_FqDJY6gDeN7IhmH<^9iPz! zu`O)bMSZZo5NXM+;Qm;|Z&qRNr_TE64L3bA_u1XY?0=7xJZGQt{Qmdx;`%_uWdD24 zn=HT+dRk}shkM(zU4SDw!>_p92N6FJy58YeU484^Z&Q8Iv32ejsL+4x_UI@QU+uHw z1f!PYr-equ)($Efs*=*3cVWzY9#KPcQFeS)4I?y-@Nk(US-yUlEwci#dCk*-rT1p{5-|` zI3Gkl4DB92&e@2d=OyfN=@{P0U7Z|Z%eHuriBRA7WYY+T@KoUhf2-whgE8f~(@FP# zy6|YsFrjjRuX|2vZVFvoPNg5!;M|x;+eJeZ#ys62R)I4lug`{(rWx0i+>$qA99I?g zt)nbjXNYK>GQZtUU?;(7=g!Wd@SR$9{5YXPVjewf4#qsvx&O>!nNXXa8@(AE$6qy$ z#(71dx0Jj(<658J-M21Qbd0HGkf~)-6uN3Csi8q@qLYFnW1c>^FzF?@-0)qx>WfBK zj#L+aV?|oo(W-ji+JQ&_hL{`J_P1fGivY3Fo_?hYEi*dD5G&mjBYIF{8iUz9gx?MjSzTIR~S& z+hl?IJmdhaGpyM3xU6{4c9dt2oyc%Pp?H*@EB$E_za!1>)RKp^g77*=Tm5i!0x7K}hk29udef?t z30*?Y6AEI)$kBSqYgl2v^GW8w<=m3jXWx!PC7;hY-FY|swTxINM`!pMJQ)6m==rc2 zvQKgvMbIv1wqa}r-#iqU%XugKLgzVOnbGPQJzAaQyl4i)76wB#y|ansKK9c~ntc~H z#|C9NFL7PtFR&7HMT}5A=_vWZ==eOfZ8b2*7WV90hj?QtoFq7%;dG7_-J}`4pL z4TJr$OR{$yiiTPzIoaV2)>_!n7}zZZobucqU$T4_^Bm*shz8nX(?F*bd{S9oBLmAy zBd|8I!u7WN7P|+}_TY|#(b07=PZwtkTL`gRZTVEzZDc6l1QO{$ckK95yEkCUdX9+( zns94_b-be^%VI}C`PiHZXa3B^dO~bYaKr5c{INL&MOS4-1Gy7$S|f9OGtTAY20kYZNPTe47Bm7r8 zfp#!vjkmd8JV^M=5gLU;n(2*darU#wGNf?9mB)D~YX_25R%FRqOezebuA zUo7zGHVvPJy0|~{D-W^s<}V5EpgKgUs{Z6Aw$#LWg33!Mys6l<8+WfMv?Df3B3XGp z$5|{nJ1#!wW%?TU=AA}oWdXWusaBLuYygFr7)FBp6^1oN1fsD+5_P+61%lwWR=^^h zRPfK=*a`}51^ts1NR_q%+ho0V{v&6x(4%7o9hc8<0Qh_ZT<|VPf|ZIaSb^ija`_bz z1AE`xsU$gzg()2>@Xh_HBxPvsta&&q4%d`;Tvg6-8uh_EZ~kH6}<6lTY-p{Fzr9dLMN#JSvZn3ca(*3 z0H2irF6{m`Nfud{cHR-?fIYs;}swRHv?Gr}n>RKmy5KDW9a!F zQ;5tcmB_FBXA2T(<3=tk6je2h_Po{xU>WGok+rypSQG-&TY+tKA=Z)|nV0qc7Z%K5 z@*1N-o%s89JupjgGu*O<9+3>V5Sd6BiKE&UNyJPc=E1AO>lgAjtGX*^`WVA%SUHHV zSxZSA?@5TSSxs1tox#NFK)Qs|SC2}JKR-VHa8c#?hR7-a1eIKwBBI*F7p2(pzq1tz z&oZKFRrJv;DG`ews2;V*=i|B!V#1pSBu1ph>;4zvUCbskvbB2ge<8d_|2M+h&r~on zQNb?S`E6RLo2@`-(qX`uc9`(K!mvOK_ARn4*kmhc=C2u3rAh__cCQmu&b1W?3%<32 zX{LgoCn`v&y1HZqQl+gxAPVzs1xFb24sStsQ$cZ}f|bA!5_yp=(*mi|Rv-|mK%fF+|&1hsO@ZELc^X%IN15)NI6PCsoR}p6Yj;<=k zFg|GU#S@82^g?6Q#}`i^?!l{_H4FK>*B#!5f)*?-eFeF1W#D7D&Lbh)e_Em_UyL;A7y~wW`Q@PEd|KTNpJm6BvBS2y!iE9y4dZ%;#Y2e+XMKe z{}#VK_jmg*OJ~bY&zzN*k(u?3TT=6}IjzfSSZd2L(`DtLQ|@(kIDy>8fMjEK$;AW9 z&}MPwzs!~h7_v;Tp{RC^N}s^Wta$M#DZ#{;`F3i)yQMKQ)fU@vurX4d1U4}l5`QSE zfLSy18~fq-qLDF#8w0hv^1ytZWzN)nHLjE=S2VCNHfQ%AE@UFSlzG<*Nt=}b9H@~Z z(ZHg{zyb-$WNaph@zIOoqZe{4k0ATs3vd#X=n*1&;`1f4H+pF_unajXU&gZw5&eME zVgbxrH4BCJiwRAyEBgwKWU+JE)y}QET5f--a#`HE3d=tl??{| z>{LCcGD|97jxTFsy0*6{h%dF?dez&ocFR$)Rv+D>bK}y_Rye=P7Fis4GMnT>y`E< zg5^L8ua_#BoeOLkI8f;l4628F3-!d(>fHB>mi0Mo635Lf+1z7rE`mVJ0&VL_y|JlT z>J%cKm>{Gvn@>O*=4@|_EU;m)oJp``n{Vz9U`L;Ayzt0(pVvyZ_%7bToltyuF9Qt? zGbVXso~c3g#S~f6sHy?nWcF+b5~`_;_bA3e$7wS+r&PHhJT_o-O@GR%KFe4i}Ma?g>N#G@?6)_p3>z5P29FT8pDk%(Ua3v7vrlMd)yhlGOmR^2R zCuwvWx$fC<&+}ir+^_k9?V+yt**_&y!@cDaTeC0NZ+IeFRuA@`Yodqr`$-~tp+ui- zqA%`Oo`_y5(cW-V{HYa$qWY;L-;;HyDZwuq>Bp~H+k#bS)-W{txI=*GpxXTp-6R|V z*9!w+v=EfFC4Ql?d<1EmN6q6rCkumo3t=D{^jN`HV`QC;!^2-(d~|HW%SRVTZQGje z27|hOFqn%2vTDw)kD{~-9k4t*73!nq>W3|D6z>JrNCh|Ix)dg)DN>$ zLHpbE!{z9QckVITEjE?{A_|Gtn>L%q=;jJwW~M^Yj)1>;W_p(aA6_rbff&*X*5n51 zfRW?ugdF?XG1YQ>fCCJ^+DE~*YOydl<`gAj^nHOH+8#yhKt2JJ$ACOUfZorviIIH$@lRFUw8XS zvvm`59h3xwu?se)pE8rUXjMOXQ7a*WuU~ioGHJ?1+(uL;kaH6T`2YC&K3(L z>56+8A73REKK7qyd#UIzD+i*szEuvGQcC#)ciZxfteIsN}91Z)YdyQw#Tf!QSnG}e`QYV9&q{w zdjr>TjExWjhaY9EUiuBPvqpm4yv1*&9Phb=HKg$R!F(pnIz8x5Wj({$hRr8UmT@#t zr$gNXD?9FZVOCVc%2%r3bwHY3=Zytc8fzl3lFjP^VS!n+K^o#MFT#0?MBpQq>)w0^ z3d-|_Cy{1Ayw#Uu0$?j(tVedKV^O78{spb33WU zVl2=Ao>=P@=5+-A&Hd#JQ-zf;8A}5zziA+C;|x*Ab5z^jiK4_r(io;i((~^agt-KU0c~N09N?A?DHXe~$&8fdk#2`0v#LVO{IqFEO zOQ6-nxtjh$dEK|tWXOpP1+q-h&{Kl;cX5@@Gw?DF!i~2l;c`e5MUvW~HS?8NN`Hh~ z#~jIj%=tt;^av-lr#yh$Cf*IAWDpWPO=EWb!oy6a+t@Pg@uG_*gJ_@?2T}Aw=6qlF zw|6m>=e!)tI-}cSCHLSP}UR^(HUMCuJ2zp6xbuwk1=Z>ay`|_kCNEWlMn?i*YrH6tT0^HziI`r zgQ_PvNYrJ|GG(!WysUZaaz`%oZ!TG(P^^3@Q$Mf=ecev=+il&p=>-)`MFT3NcT=w z;CfffsbE*+LtpLl{56ixg9|y(!aX8P5^&4v2|{>s;~uEJqVr~!Y^Xlj?C1NQ%$ig} z!foe*F-|NEgFX3KC0j!O#t|nk7Kr0AdvRMV_conx!)={wW_j{mp~{jMs;>;UWbehX z*klnGG2fHDV|nB}+j(hH$w$@yC;l?wgIU$x@BseFr1OhI`{>4bC9iP)h1}r}viH6c z-V%2<>^-*6D?7gA?@@hT*m2OQXDzoW?kp&jg(z`s>bq54IGdAcn}l?%lxjlSpK$Ad z1ThB}_6P1zoF4~^7vW$ITn;Y0I9gpuw+p>yEQVo)okzrm75;cckYj}tUdA98RyY7( zLaKOkmh^@J9UQcbzN}Bzmjy@Emj~@hrydLF{`OXb#(dJrYh;(kAtP zH9|Jd&Bzzm!ElL8+M$)nL%9>6Qx!?_cPf7yJ4v&lfUB|7L>p2CKSOY*KFSJ*D_ZJ_ zmU<^OmgZ(<{Xw!e>f)xrlw?r>C2{H+9(&Q4*cC%{sa86ZP8blTKFi;IH)AzFoks;Y@(@+#1oCk8k;I1m|7Z-%Clrr{YJ3ap_rGye(+KtA z9hwZd`ba{chErar;>dh_xQ@4h+6B{CX8qCzo@fiy#Fyaa1kDY(}|Cx>F?btO&Jr?HO2(oV)HJEXm^RUU{8z72db=2*`0&lYRY<0_(pftNq&Z^6eV2ox7^Yg5P z;h8wNoR@iU**C8XM(c=5^~6jK)Cn!%)+O3G#1Oj#VlP;RgoO`f`4;>&2jJR*gxs<| ztIZ@D$uhR)xE^3?pc(#yY5O61J+{1AeQ%6RoN&04Q>F^bwwaSFvQUby zT|jg6jMeAYuu`Xy#Gmvor+jUn`e6dsLq@RMFO=?l>(*j%b0u|Br0|^-jkxE zhGvIn?*!+%cxXGo`^snP zH+iW=19Qrk1GjvwvQ|`F+?l5d&Xe&1GT4stnNQF8jiLeuzFRkr+ z1l&5VJ(K`P-Ktx<*G)NnBHKHy-x0|F&8skv7yum>8>}zG5)x&#!S7OQuC~jT#{Qa} zZhuXn{~XzbW*UgejCi0kXYwmTncBpUE}lYMrp?PN&vbJcn^Q|vsZ6Boh;M`6H_!%y;wf)n|2*D?6~ZCv$gKp3{D$%Pty+n97G}!rIg{pOC>~j^%z&X@70Jw{gidjfs!mBPM)X_`r`s$A9BgJbZvb@EVLt=>jXv zBFajG`6@m31y<{UFR->rH)ma)F$?Rk4Ce=$SS?|r-7KH%G|MN=%s5#1G2@zEK3O4S z+6lkN9MjC=h__W1N8t%clVDu5A(&!y6)wEsWtFVEH_`wKIW!~2UE zb;K+uSDxttIE zj`Dm6;}po>Xq^2&%kzV#g6}5Je@WN>L%)muHgkL&94uK`|gq&?;L` zHtG_WU4udWomx>0<*lFQPWbA?AZWA~p0F+vV4h%1wNRU@kg ztQA4rm0Drm{okxG&%EJVq;MBUtp8uM>i0|q-zbldqv%3iusPuF{Tm^@FpIe$ zi@2qy49}_>OnNl%8GhHF$vl#Y7wb`m*9VwT#w1#M0)CdUrYlQ@z~>Gwrwf+<5#jF! zKA^Er1IjK3B0&dYYVuYo-EH}Cu%d|%Rh6~Qjc=L9uf1+-WbRw6X!jBdIX3Ti2VhXC#*q#qaXXll5*ki+8I}E1A(8;64j(kgbgM>mQxH zI~r0dq}S1MqoF<8301G0*?L`0sI8)s%bjrlYWZ4bhPvv}UgssK@9Ul&8<^dAu{M<& zFP5b{c$%AT?{T6N2RLVodZes99*I}~Uo7|Bbc$B$ZHzBtL-d_-1^mC5}bJJI8TNuClMJ&A3Y<7+qHeiHMC?WNh9XC4gK9SR@t%s7EfsxCF})zuuV3HgSW zmF%DP@^}%CMRiwh9Dmi>{EjfH30l!yzj}}(E-*7MY_G%HivB@1XdCxMLBdMCDJS&n zA%wLw%x6p3(r~Pyp(hA9FZoTr@rmniwuTee`)-m8EreUeLe1hzt)#W09%=O@J7HXh z*BgM&0d@`Vm3dO7%F_h#NcKwS0O~c7-DZ6$!C^#?U~gfzuRBeOjmW|ty(eoRUcv|a zY{9d5SYc1KuCzT~srI5Z$&aX|bduBH^HU6;7y&Wf^mlO9H*IhnVpw4TGCAsM;ZNa4 zK8v)lCsc*gU`u8ywejp%UnM()C)k3?o@oMRd@E1ar~heulS>xN_?9uoX`&^@xb6&L z|8a~voeXmh>Dv%aiqUAnEVLLO z<6PPvZs^tLU~(8dSW&6|HePp|ZyN^x!yu>^htWW(%d_kt_$7Wgs?()*B<#?CF2roe z=s#=yY_BG@$JVW)B`^r+9eIg=YROyJcltKU9tXH$BD@*XwkJd%$`!7C>(UA%A^?XU z)m`a5p7^Ot$)1^R)gFD;sq{LRdSaflOX{b4oKO1fb9@!*DyIAOi{?a!bN5Q&(S7UYyyt2o_d!=F*euZ4j7RA)h{QY*rgOaGl!9hDp8cKE zT9}jGo&vsTPZ58lE%F!Adx`32f}Y41p;M}s0h6m$&{cx56awS^x(`<%qK>3 zC^$JzwLLQ}SLwQmvPB*l>xG#yh(obdR_W0(T0;(C`0w#w&^`41+Lx=3xhI%)!H6s_ zld8+caijL-(4M|^dpqfyvPGihHaCL;AO#cJJP}y3(pP&kHLdXbYQ_5*;F27!Kcw$l z8JHdWiFP>o?4c=b?8s+LdT1(tM^1_k^u&gEMh5{`XuyeK<(x5r-`JBPmClJn2}e6O z%#$zec&^)oic(AU`d4oFB5HqzMBRF6a0Rp(Qrw}vLm2SRi@(Y^?Bnk%jh$t}hF8em zYzG&>@zm1#|EkP|QZEB}MSPTa(Rf>m_@10?q|E6IEvwzZ z_$v&{qB_v+XdhQ7)K z$IFNk-kdc8XFX|B`k0cUj;`O|VL0mYUlhllt4c6`aN$I;=cWozm^my`?;|FPG*@^URXalOFeUnaMmx659GpAT2F4u_pYiT zt7lJTLM_06^gWrw<&RI))$jJ!w|I|g zB8jJ+o>HHC{Izeb-OV50;CgB6#L2ybiYLfKP?p9@h;L=j| zVELxdYfvU%?j4VwAHGjo?r~!B$C)R;eVZ5@A#C5Ks7`bO!=gimIe}nw2tEjdqeBKe zQSJTRsj_qumR8!*^I-SRQ8oE@W`Geo0_ z`I8%Yxw`+zN;Cg*zJLBSPw15ABv;9n>aIMJaL{Qg*%12Tvgpb2S50xWoAXNKtbj>%(bQV_C6a)>zh0BRIUjQznBEnl%wh5pNU)%=a4$s|6hk@%g`S=eZ6_`cA` zgK&843|gSQ0A@~EKdgqW)Y7N6a20>twT0pjP2_6+MB=wobB?ceBY9;K`K6Q@-mheV zF5{b9uVDz^xP5)73|S*4cS&a*(ZS5VF zhf2e{vx2y6tK3B3s6?P^BG4rf@FoJC6M>vWpi?5?Nd(-9K(+~l|CO~vNf4Km-c|Ey zfqFp8S`bB&Cze|d}66Bm*-*&{3j9GiWeTqZ4d20RtqEBG|z|5-MM{K*wm6$_!!)m^h(Lau`cnZL!4` zE50}O#g(r|*J(<=Qk; z&~JT(tyTkDFy$M2VGlT%TX7khyC*IO3j>?GC38GwkZl_XRNR2``M4;e;xc$}uK*i9 zk4OEXV9s*QwZ8yj(WbI;jq4WE96(YF9*NLi*nw}!Nu-qrTF`ZQuxM^zcfm^`Bms~{ z$=eQ2_T9G#=1%xaD_iY4N)IO2ZYEck6Ip42D?hM1tqZpX<7Q=};|eFL458&qN$}@@ z%~TI_C+3x06+^nNDh;m9#iWIL!DuO8fwcuDe=Y2vYi@uix;&PSRTR{o!HwGn$Y>fERYIV)&!Wqde-oHBIff4eH^df&$$M-USft2 znTmN06`${3bjX~X|4PjW-rCLy$#M1h}lKV`r*E7?#y?GO+P4@7! z1NPIQ4W{ zaQ0ACz}%@OTJl{fGjcPm$_zZflCnKvdFzZ(*sVCjnXs7m+}fBXF60`-Sn58>^RN#i zf(A|y1X`_`yjeRfSbE<4dfm*#%G23v5a&(nMpd5v0bR@2S?j`CQ}UB=-6@)l;1qLS z_X9;rOJ=wLx9d*us88l1XSUVMNI(|`{l*%5*ObcBH~X)Ey3)*zppE(kH)_vJ@L#Mn z;nRt|xvNrghxr|g7E^m&S^@aU~eYj6#Mp(mMvrASc1*c5uN)MdQp=(Ch#evh4 z={nnG$K|W1Cu2DR^Ddb{1iy~T56qztEH#$vv01QY!H5LRuFITuo#i|BU7^641pjm_ ztF^9#c8BllfFpSJ0Tt1UEC&fU`iL*rRJ?@bEQ}@X-RO4xR$k6xO@|srO ziBg$rZtt21#!}3u;WMUgT;(^npbIYnxtI8dO)2Qwr++c%YTuQW-=zC4CmEEijJ&TN zaIq4u%+E+ib#e1`zA?BYyrpZiqT%|FDP0>;No`NyLI_KnQHuwTr$v>E_5$cG)FHJN z63UoY8VIGdp!Ax`+$Z%lh5X90*pO32ImZ>@qd*VYJQW?R?|hdfEv>1<{mxAbT)Fn2 zcd!UF1v>34{r;)z-|=0ZcYakq^yTy@t(h&}${q}MgO+RYoHq6q26j8l-2fO{B7rrr zz#;L#`|kj24y=C~6gI|y-p5^3=5Ej+z{}Sn>N<-vSlo$`Y~|@i_UY~LPpO$}aiS6( zX%DOez%(AGGUbuihk01yWRu-@)wH}*D=+nK0$t(4qDEP)l$-FtBEbA_5o$0&z8{5x zQnG?GB6;0+*r#LGxy6!U!m|NTlcQKylX@wJb-gDi;KuU495-9z%2M77-kMNnp2qbX zCWrgg%(u{3qy$1P)}F?A&&uIM6=Vr|Ew~RpE$=P=4;1fN$9c? zLTt-Yq!vGuVSgBpX5z}{g>Kg3vAg0a8fQps$nz)5z)30dwsK85xIh9<_Hck@;T&R} zWpe&-pEZA&&yrtx|BamGuFRi2%#Y)2lOw}?*PsPng?tU45%d`@0q2MLQl{s9b^i`M zV&-eiKq7ymN(9e(1~=ZHNL`P?Mgoc;ra;oreLV?B!msasx z*c%SRS*BpEC4o7Z{fVJ7WIYXn1T7chsdi-n8<8Jr%SYxx6tGp zQkkE9r9Z85@+AM*vXVJ!+l5Sj^nrZo$RjLjRIFqAG$Q4FdH=o!?tjtsjy4;f0C7yu zZ1GfFS*j*u{!eE2^4Et@ZRXnxkv9-lsxG-+@)cf`qAsv8C=!uIbfi^f^AmR$oEK8f6H~VVFNF`(3=rAb^GeMy>LENJ4bIx1f3t@+Tfp$!v-I#1{F9 zmG6h(KnIAR9+&lLT%nG5oF(dK;0f}$lpZgKYp7C#S>x2p%Nb<~$AQlyiAv=t?!1!P zKh^`L_K)lZ)&6x0&0X8X&2ew*&$q&ah>_Nx?=)QMy|1A|`eP>!=m&j#b{}*IE%+cJXV3DUeuMGt>#XdFc@ov!( z13Dr~4^L~NQaIwP)gpv?Nhtv zdABk?C}mWP#OUC(bBNcb%cLXg_r}M{U@XhvkwhtStriz!vOjVg)r?BP$>NuW)%~yX z{=G7-ZV1Z$CFl-$ypHG55NFA}8CJ#oNz?PbzP}UQOzAS_eZ3M;Lky@PQ7E54eT30Y zs`5?VyP!8TMz0e5t4C!5P3XBrYGdvZg<$(Ojx(Oz`0 z46hqN@9?&GO1y<%TO9M$(lID7J~UC-q+$PFtEY6H`Wn1IC^xX%mDlYXW{gsSgsu^p zA?IidEmL}Rj*x30u4U3jgxi0)h54oWQAQQoJgJ>uzu3Z%7b@ zpP~DhYHT9FgbAZYr;M3!;e?Bv6E2?6>+cfXJ+_zE|Hhem>1E^6F25q(HGaaCSN(4g z{tsX>V(pXkPmE0@w_5YQKo8Za9JbH+BJ+))WpZ9vNw&{8V?LM}o$bC4(_r$?KzJmG!NDUhI@C@>wxdx33SvTY11G50qEI%`4x0 z$v63`Q+-JVxH9c)EQ5{0?QbiG*TN62t#hix^MEVwE9`!o-lTNsYlig>|FFPA1*TP# z>kIrhgUlXZ^uD~Cc2u+3B*F0gU*hewv4PVCD=)0oy(uX|rx^Syw}9LA^U+5|OUPww zG_+jCPJu$ zdX24Us3E7RRiFQ$Q}LTHdb-b8MY}MF@g0_!9-D=}Bzp8Oanl=Kl-r~HoHHEbBN(eD zhim1-K)E=m%K)s!F|4${Snu`1!eGt+E6B~1Gurg*o7ko^A8ShI&0h@ z>CUB>tEsf_`aI?(tQ=5wLhXV7qVmtlc1ui3yGGY8a@F2zi4-}NBJ4q)juA!%&dwr_ zpf{Ao{g=+#>1leBh2I}K{vl+jNuOR!NR#PTE;9;WR9rVty;)|^tbs}76TRQxB7O{l##Ahrr(ULq;d2OPb5gpJI3AGt zkgFohT#vy;@EC8Y_M&?Y_7+f zhzyAR+&tQV?NKamU>yM1vE6{9Rp@8T0`=DEwk5Eb-S2f%7=rYTjq{WDL?bJ7dD(mN zadu~iiy5Ee?-KPiRya|#p{?!6E0c0i2u+HLESm~B(g0>!bL~Uco36=5z$(|1Z99`V z+cZ|!kFnDP*9#F)DZsv9f0r_mK(&I=nj{1f$Q=JPfu^S_rB>xO8;gU|m>l-oIcM^^ z`NG;#>*%)H+wkJ=LqA?)!2^#!imY-f(^Det$~r4^@gkejj2$r8xG)09jt0g#wkfZ1 zjqRZ!H(^E;8;Q@k-!UJmz0ErMwUg5w37GitUm+~NWbmDWvk%F^;#4NG|EsPfa8sLr zdOHP;I!eT1=6=j}C~mU*HzWj>6qIWru(AIlZB9jE@A}!;e-Zcg=CE5(9P1WX)Ea$u zjT;LT%C9#8;jo$9_UO9v`zCU@G!?cZWoUsagSp0u*5xx66owS2+YOTcvBkI zzBc~z;2h`Mm?i<$9{qAgZtqx zs}8Nc%o zqi_6Lh23JQ$jZ>Ppj6G6zy{A^D9@CJ?q#mBE?2p&pgs-#_K5ES^mLNA zyB5ofUCDS^PhEB~QFy5xK63v}b?W<@PD)=c%{RPMJ)9wA*M}bZB$`D|g-y_-Z)9K{ z*ZzmI8qzy|&(KL;Horw$7UgT)SGRr+r)y`qRvT4Zxl9J#)2B+1p%Yr1TLC98J=-$( z%`3wsm9aj7dH#!)E>xY-r3Y-s6*p>#X;^R=kz0g#f$Zdh!(ntL7B%%APssSGa-9=d zV;eM#F3E-V7fVxk_6@y4Zc$9eR>elxC3EaAE*homl`V_*7nNZF%^8>+-N_U7p-lhTY+I)uRX9?op?|OE$T&VwJZOEO?(obsHV*O_2JV zJ-`tq-V+E_AK*h#yRFJK9D`sJVULdVVK1Z;0zxEvS&7%lF5VRJvMq*4(naJ7;h1Zf zC)1jiD?@j&S5)~BQnm~`;R{`tVb?;11rArkMF^4J`f~1Fu@`lh;C4Fn&`=M^mRi^x zgrVQSzB~j`)KmX{c_e&Z8UkbNr-9}~RKA6K=gdQwFP{w_x8K^UZ$@n_8%Uj=if^PI zK{$7tqVDz~9oU^nmfNkZrq|27q4uwC5 zIZpDYZ)^poY-{CYuDm!5Jq*v%^$=BQDb5v1PZ&wcG25S@ zoYIK)fKglA494s)bO&~)g4My7t;r^s^kN4?|4y$yUs855umNN$eOEzgPDX$?j}K#k z04MHo2Dn6hT59-Iw0VCD$<_pb1gGWBQ|>MZ=3JMzGJn)CK?Kt^8Emyg_aHk=3c=93ETsUko60cn z7o1|PotBapUTMZI?XYIXevIIhgh06c1 z#r527vv^SjcZ4}Ww0x9k-Tf-~RT^bO3^vAOws8(85%G>r%D^=Xu@^INWCQpT2M02?yxF%+3XIFLz$1hetBA{-LWKF`H5w@ zeO;S9BV4B3q#RP(!{MZG$ZFmRc4s?`uqFF(%FEP+5blqd#3tAbZrIh38cy~*B z50Ty9;K}xxHf5C3Q57alpojPA6wIf?dlRcZAVbQb6(WvY9)=2k>0$y0)qo`qkd!T4B$?>kyC!?OK$zJy!I(KsLEeX?8cFMJ-5g zRra|X5rr8aRgEHDID9D4+zn#w--g->)co`&<)B;DQS;3jr80jK-j_(dG)6VtS0$n- z=%v-&!~t1)i+QiR73zgF*q5#=!rVqmh+u{2mU`K%>qSo^phJs5&w?JB%y`mb<=ZxM zn=XEPRjY__NLLMN5vZXF7skzUEs1FXN#8%gTii_YrRKxwt?m|zk2GD^VSWv5;}TIq zc#pwDRDV>#EO#@Muorx~n~hZ5mk349GKWQfA;c{re>;g{cT;+!a*!li4HA1vq8KFf zT*lNJ5PK71FH{Z?tr5_L=`C)?^bQqqFi}^6NMI-e;2wL%ZlwnpF+CizR(%}L^*u@> z)VjvCAiddq8d>5%qPYjzsNDPw2z4rl^vnT#r6WdRpHcZ;44 z%^gfj^V^JiuFC^8>`fdXj-DwvJ?jCRE5JsxvM;?AF+s8wZq>+IpCMVW_o$or2aUw| zNHTLbTJ*VOtkK;HVn=Q1P3D8{c4S5KVc~t2t6bNu(rrErd}XhmEe~3Oh1P;4qFXX0 zHqk=-FWjxjj~;V3lz=j9WK1{CoFE9Bh>`CxS#X#`ffQuMW>86QG;%MN)R8O05Y*fQ z+_``(Rt~`|z%N5^94vgqX^G)D+|9s2LFfQZIUoyBEV1<%zZ}8A&Te418`F(k0@XN? z^vEPs3&s-40l;SC$9Pf%2OU3@F2vImizk&e2NlD*X$c^+l)W$+k3(?Ms0PM_4E5E1BrNBrN40Lh`57`-mWcjSP>?jC;oQ0nYKV5cA{fX>u$Zl|z9hZCo;4(z=Vz_k4 za|TMD6PKLaFA>QL;nF3~9Vj`Ph^XY$&msunL)GABf+EGklIBe5xgvQ6T)M7`2TG3WCz|HWPvs&x zb)f5N)@zt0lka{--(pPn8l zBmL9d39gLXo&vahk({|iPmk1rlA}u$mD~fk0+F1$($gbtpyVtcMsBCPg|XbOCy8rN z$x%ckw^Lp{w==)!^#jUB|J=^P!8A{U^nlZ)XMV|wmXH3DXH~Tv-8uG`QTg`)*_F(4 zl9JBaD7UJW!Ej{@g>0oMolW41 z0iV84X+~|1o{;SjDwMYc^pptOR<5_GW|lYl2R z8TF6~d}iuGv($p-!-y1d0mmUN@}cB?jP;<>n%<<#32gK{z+zR{kc;_(`Kkc49OeUu zL+HVwfd`EOWnVIRUy^n-5WH%Aio{;^af=5<5~EGPFW!!DH$2;5Q3+I^X+x$vum4 zp?$4trg+LeBv&gW2Caip1%PwvPRbl;=-eOBrAFNQ5O;p^f%HR^Txnw5&AQ~!9qM;p ziVyuslBY_Fd8CXLQ}SeJAe|IEy13FqUK&j|NpBA|C+VFg*iI=qvnYEqQXDcf{aex{ z#StasL2`m&7ouiCPK_ouGy;CfCsRDtkX&g^-k08#evne5mrFGOF*W$GxO6$$jm&VP z$x_;3dhjba97d-i4QWR1jTC1}r#B@NItwr^{BrRtG_#b4%`KAF>>j(&bCkBVS1w2H z#zGl$1Hz5inZgUC6Ppb>84`OcT*VT5hH^0Z5a^VrAD}EyfuuS6TA-0((7-_h@RI{9 z@|1?(Ea1#VqL(Y}hr=i-2tjv~c^27!Ut;<}bhyf6IW{}^oRRaXQ0At5Gqp0;{DqPF z*-U+wbL9=uKfto_TVkX`PVi-eKn6O1NNR=I{!K8EgRF|OLGDpX4kjWefNm`2tl;kr z#9WZe!EXW33(Ri;UCKFgJjGUC>z(e5dj-=y_!mh+^wRKEXx1eC5v>EGpM5Oi=?8&_ zY8(Ywc^%x&O(FugF|)X`8q~8~u~hE`QbQHQs&-~>veOd$`y1gq_r^LhE|d#ez}XyJ`mp_HqUv7Yue}Sm9+!qvnBYmSD_^Hc^cb z5*V}0&B12`gSERfoPgC^_I$yZ8^w@D9I~4mgTE3CcHvl2)s1Bmt5|MmKAIawe4oLws-f%AHC;5Utl2b#dWMQ%*)EiC|eZ7e?B*z>} zFUgkxj?y#Rx)fB_NPae)?7r&V7uFNKC1)1X(>oikXu}!pyy|J5(MNLDF|$PS-VJ9| z@~W^Xm2Fll(jNsHO|*Lr3Sb+|75H(BFFGae=EJS}h`ALdxZK=?0)ay6scI$xJ;$JW zSc=ipTvR;N!B>bm-~A;_U61I}V{C!(&DS8AV*Ubo8%5cJAySs|nH$wJeg*ig0QORM z(_xHj!p%uZq|a>Ah555O-aBk z$8Ra748S=UaGwWKuKOI!;;L500vFN`T=ocqYml>Kj^H!}Q(B?ja3~4=NeslnJH{@^ zQ^Dtm2^q=}S%$eACiCuGS217@HwrW>K6kS)A{;Oaryw$^tze^&D0|Hu8=&I4hjA-S zDD^22gR?LRYi&AiktxA%HHQ=CSrQiF*j#OqiRTH*ja3BBCptI-XTwXy*i!#iZIM13 zR>avboE>@pmauwhLXk6QxtOzJb4vATv7*$>)8;U@m8W{tBbZzY7NvUTsZV^06&jfp z%lm3&8t1Ff$Ob}aClFYPz}Vy%4i0?a-m{34V-zg&J#%Xb9&46awrZKI!nO_^gF2oP zpD*M-1t+wYT6(fdpa0C4BYMURwq?08#mcGdA<7h61=q8Ak(d?REx=~BOktf9YQ+xGX^$3(WB>t?(YmAeJWH;?9YZkPDsF$Nq7o#G?dYb ze98H1*fvyy-&kiGQh7Sfhx33J_+8vo^%)W{6(!JFB76KHX_|V~rTVgX zV7CK{sVo0odHNbZZ+l3=ykdmJX$QRt_98X!la;%o6!;!do$cD-l=l1!9@t*>4H&dN zbn_Z(RiqKl2eR$E!pc|5p@5og-+D0d@$mbJ=F_9!C13Wf-z1nL=AO}S7v*82^!+bs z_aX)?Tj8YDtH^Ef4brl3;&8u;elMDaHBC)O-9-Q*8d>pvjv&tNt@(dPH zrY9f9EpkWiSgbV4CO7P7g1#K?Jx~{8#sN<(d_h6>>OIgDGO|mbYvp0el;s=E&Dcp1 z;D$BmDAoK8Hl~mF--lz4d2icg4&DC3jD+9=+zGZo)-rG&#`gd`6Z`lqbH5t=DQ?&` z)s6U8UPIGy_V4oq|52ttc+04nX9BNjT`AaspJnn5%g^)=X(=+Lb(w35Ow;r;KY4Gj zXwI&ERbjytZWq$v_*kp> zYgv&xo%%APTC`DOi1D5O5oUcCc0u9gVin-%e!)OmZb(%pl6iwiXDRk7or z+9OooBg;W15V5bxQ)Zi%S3P*a_1XUH$_JCL_g{@%i2Djw<;+n>@55r9j)-{RU+k&C zwSi}MQwC>OzIVlGth4UHQc854H7rZ*`mRF1slv|96l(yaTJ?Z98#rh>Prdy$(ME6` zZbHey0cCq;lbPcrr#pfwCzZLLnp2lW2eVPvrdtT$y%(@=5rUq`-#{1^#2f z`V`l)G6Lt;t-KJ`w_Q0GtVkp>h6!0+KZU3q4o~3x8}) zW(V6zgs$1aieZ488iiB7J49B)0E@+KF3tDw+W{;rcqjLSH79XN5m_FtSv0tRi@K_+KjoBbD`;1ksaXDCwKd(5m>b8r|7U#P$@LD|Sr+PQDVTxW4) zTdtpycj*3Z_~wEsClB-eh2$)mh%e1NJ&SnwrPg6dudW^Icdp9+RJ!anb6unDFYp`t zgNNCF;X20V6nV7D#y?HEDYXUGS7s(%nm zb+ft;dq_|iuuwkAyO~*n=S$Tw;%g1+8QP=g*~6+Ufjb2%hLx#>SlIR;*a2~H)X$Hn z!j< zX|tL2S?+jm&s(^@>9BqJH<@o@go6I@bvTlMyO0{~)0@qQGCAXsayu4==csSs`XsjY ztRHXzu`RO^z4IA7pMX8^IG_~0g@;T{D8pqB@KkZdUkB8MqnxvGEqioA@n;dlBr(S6Xlu zC?Sb|iDrwmq<#DAatVhEl`+~JpDT+kYlcVP;~yW3)63ipDgm0&B_Mehw( zx<(#hg0XZt=9QM}MQfo{%8t@`W$J(QJvArgKtiJLDrE-CRhm*(koktWUAEv$YvkE%n}gePKS$E11ubqij_9F(eSzNNkM#<0-yjNCyuIV`0-opNIXyOaw9CBv zkqb-I5OSf?(>i_D_RHDbz~d6^+Tb=6|IOY`KzMnA&-)i*sz+L-8Zt67Hie;M0@af| z*ti#L;Eq9jG|lt&2=O0+c;o>Ka)v9o&BaoxRJ)1+5&4ezVPMEZ=DgS^J0ZR3N3e5h z|NFq_uyfBJeR&h?{8e*r;4q+|`~6p&U>B1+*oCy!FL4^6f@ziG-Ha|3?oWaTKJ!`a zvDNmdw}^^y%FrF*PKGtuLsgx>MS==<;_W|V`#>aR%?D`7KQ{YhkIov5zSOG_C}D|s zi_c!vb~0@Cjnwy>wiMb{PnrS`|JNuPxb48U+SH=o{DXd+Z(MMLs{lgc&2y9+Z>7Xl zj*U%dv9PznF;Cd=wy_VWdX9o&omT|qslH*@Fuhst`hmD}Aqb9+WaC`0H(RQWaX&xAG9zK#^4b}RT{kO@a6g1z!7C`HfHU^tCAYQCKxsn$Xv79Ieb*bN z1V3@&D|zp857mBe2&%dilP?o@*j1z7Ub(lj6!Gt3Z02v2mfN7Fp^?{XhR*2va?!%Y z!D$wp=~wjYz|sGAMhgRyi={dZ)g*4d#rDzrFZbqS<5{WN`U>@GHAd1YP{R{wJ_Ea* zO-gCD(wG@82`Fm7c!MGGIwxHO*-?UbdUhq=0!P~ zx8>+2q4@*kb_n(u7DH}Nyo$ot1fl$hhFw_{Up5%PL z%-`T91?-=bJcR=&xE$khqkoUX(--n!cZpht9g0X64!U?X`!O8qF2WlS761cc2p}d# zA$Xws)cv36dk1?(C+CBWG5pC^Xc84j0W%IPBqJ@Ev4}tJK+nos(3^N1j$mm5_Nt}@ zR@+SeODfk~bpAU3Xjl>47+mYI8Ax5r>SkROsXV>Ve?iozgcli&46JsT{5g2-!sNfU z*5l}!RC&6!Y`cFy3)fN`_t6f8tH!=?g8qXuYacvKasbJTIK6w>y zWT^es4z{Ax3Q>L?k(I@BDu$JyyMR>&=AdcpFxVn1J-Ro&ewJhY>?TNIFM<$(^GU0C zyH*D7k^&PCkA_xamo;IM61V1jivEZr?@fDv_Y+6&tDKgVdCuG@I)NUX)WaE{E@odf zBw~Xha^L@;hLsLO1uKUJ*O|>{I5$Y)dm#Kt2!AT`i@;}zs6CyWv@8u;hMAkCm!rUZ$K0eB9|P2y00v!wJ3{?7L>;m`?NQd-pV- z{yen%KR+>rc7L$e*_IIeuBrKJpQ-uWn{Dg&_Sf?>fZ2j`x1;Ie}LbLHq%DTr7XAm;3*`saPJEaQGS9m5B9p*4$#lF$}uDVDRf{O zZKkj6JNGO$hsE8?85v&>c_QPtin&G18ZoP3qC7unQHCljtjfX2mBF8mzBnU%S*X>(2M*+rQl&WG+=h`l-hFVI z+u;~;cXx*Q%e*&y7vmwWyqUK9hbdF7=BYLu0kZ`fGxFZ>e}cKQp72rVfdyfU5F?sK>?(cf+V`v_Fr-8g#L#M}MU`*nn&>dlyd>vF1#@a<7| zV#Gz+&A2yT<;0|{gD4{b>*210^b0sX7l2mxc38$zI%u73;zo|AZ8+V+Hn zWUg}3cY$K^;U2(+O(>l>;fZq^=M(&QswJ2P1s7K$Ctjg*@+|hJLp6T8x15aqQUCO1 z-Vo}_#>{H%aPnI_+#}{(F$q{Ze1VutV74SNKHg%tu&E+R{RW!fkBg9N{Gc})dI~H% zYigMNee^GGLPKqG_!mBjZMcpq_SPMqA}kNgdMOz-`tqA09ibJTy} zw8wlV-c^CsF4LOJ@eCI>phs}nZ5&^i$1&`xT#&_`-eD!&q%6aGSptBQaI?GPFDKox zN7C(fFb7)pN-FmPcjzT%sb56(Mpg4-B)pO2AH`zuFBAjXFS0nyH}o5rM4d$7k1X;K zLb{T5UH*trr#j}34V`LFFS1Hv5W5Zh>fRm2NVqE?8xrkyh%q0-wh`X-H)7P^4xssX zXQE=L`V!K5Kh7s_f%3ffFs?E6DEeL}%3Ng3MmS|nW~6sP9}nMj?`n8pWB&$1KT0<@ z@bin67UUjLJE;3{j(u09Hor@Zh)PWTuce1{wuQEx@qlX{qMC}5rV zrY=i&ku}7&9Ud&}fixU_*oKcq3$@LVaRAKlN>nC*oKh>U(pu}%C$j*k4Br4simm2J z0@PNq=MYcAaVp9h_xJHJ?K{b{KA^g1+{4_?@q zfPJ~^LXRKroCH<;apjP&>{+45oA|M7<;6HZ^sEf4cFt&L-Rx z_UdXpcAPbQJ2Jw{fUb3|-93S0Jzv^KT3ibLF)~x$x4-=5 zxUqXU5bK<>GXG0qLfLD7`ID5emQsc3yK$x}&5g8Md-18aaMzyw*(M+3zjO!Uzr+4) z`)i*x>8uHjX)8x!-hP+L8U0fofmcnZ-fsF}$O9JS(t%t@`5lSwL>NlBqA}slFV2JO zCJa};v|k+#YvaDOms<`rATCTTjkA~Sf%o33F%%fozQGQWZsDtSGXkzMAcbiKblp{D3# zqrOowql9;A`cyf1(-<^K+i$Ha`WRJra>Sp)Q4Fd()c8(s8=3eF^BV4xwf?hs*RR%p zG|%twP0n0vt6keG!b6B~de{4?^6-$Of`4=#@Yvn4s@xy0{Bfu6s#d(mMh1#Hdewmg z*-`yCS&P>b(boWt6&CeweAi~HyJ5wLPaMx!*(byX9rXO=E-%Ze_aRQnsrRw;gV0k; zvF$*2y>EW)4g~c=-;W{4$}w1xT{%QgckHWvwetOOuc@eV+^;t6pM!}zOJk8pqd-fX&{+{4PgeEl#gL7UJx+YC{stXXmiO;Z>OmUX0XG zEk6uYRLl12!@yA=#Hq8Iq7VL&P_yu3W{AL~0+fCXkD3wMn#2z#rTSOEp)Q}T-i5SO zC(y`;;oXMbfOjhl^Tl$4=^?JB$07K(}IJYcNIS+q#`qF*B+w^)Mc2|sljWaYtQQ1Nc7*Wra~lj zGBl_@3L`LHv?S0sfqAI}b%y8Tkk_eq$DT|-g}14q0li$bD-tR{V&L+Qq2lL8W+*0qi-!zGwJ~Y%F(%u3^Nv}u(#+{KwUy`!W(RDox zYzRPx*uxl6%8%hJSoKr*(7m7F(bA~*hM4!cpJ3IK-gq3ve-%1U=_Ty!sUN~0vnxi9 zdYKJ+39c}=sue&*lbaNXnEk~%>8WwjzKOb5p)k?qQf41l@I*+q_u@RXILxs&5_$A% z4h=Cov`l5~5Y^T|MX{m9VRTk~C;d_oq(^#CrxR_LWb^}2>9QuNH$!jnxc&;>F-T;2 z00`1+Of_3Sc4%wh@Lpgsg<`MERl-M#BA#i&EO^C5crOZGs3wyt66YV7@YJT4*+YDk z=9rB%FWo?MVhznn)i9TD7_(ih;akPJv{J03HDZllE!H(YSet*DR1XVxi9EGgY|B$y zUgYW{(8l-u+Oo+6gsDM-l@#NN&O_3{Y3q@zj25z(DT*Z#5i) z8vfr2&(UTL<=17ih-`W-&TKNCT@t)9?+VB;KcQk+G?{Ve8I@jOSvRirz%~o_p5WS} zCH6lnU)`}0&z)d4{(Dwjj#Oq-ijFFHpS9>j)u|cF?)580>cqS5UG`m!deLxAyw|tv z9z3RtI?BKeE<9RmR*KFh7xg5!)~>YF-fFEavH7Qg%=m6R05vHzB*ElMpR@#z0r*lU zt)Mk#l4pn+lUVSCH58s^lYgW#sR6tP4kgrzqicxnfp)KAXnF1Ivo{r;Sd)#-GCI!^ zuO6Q=`z)eV7IvO$G9g!Ba_mr|LBp&p?0%B-9f7vQ)+FkN75`K8!TEKxR(RzG9)UKC z9?DD=3pH7N4-(4c@cjgjz9zKSq8*>t%>m5p?usFc(p&JhNtr?3suN)T5&|ci(tLS= zwlv)vb)W8y;gh*Ny(6!~e;Me!+zEdWOK-$X$Z$Q$3Th{kPfodq_A~`>GZt1*e_%DW zPO%(8Zf;F*?9jXNnA!`@KB2yiu9$ZgD%D`o36FXK7|Mwi z03b*|v?@0xZHFQ_l9uwoYN4cey&wgm!mOSKm$-D3FNFl95_Mlq0i%8U)Gqxq8<#9SY@K6x1rItLTHX>=3@XF7{8N63KPfP@r8J* zH!=|c+zaTye5oUdUuGxDldL3MUv$>p?5SO*M*KY}6GltPNQ=6cK1DozG=duXMs+OM zM#r*th+d(WdTVY#oz1Bm^;cj&usapQ4VLNSDS>4tuqp9GU|A0@TXuj^1!b^^FG=IJ z8hj#RTw$R*f$ujiSFAWpJn|)|CQ>a z$VGUo=a7HsOW#9a*9iCy8$NP|$rSEHhq6|x*i(lW*Gk=rd)-1%N@UCq#G<>^4YJY(`apC?iaIN%p+oUh7EYs@$iNEjv#61sryGX{8GLeHj0H&{+?b7BzW{$vmX2=LfZseTA7U- zF|f1-r`nX6mF_lmV;2&5=2^IY4p+l=q?4wgO(JY?woO}oK*wKU*k0KE>FfY@ag5Gn z(%En^=u9){2s{j>=m?&h!P{oYX@O-&&ZBzLoS>((+>5dOAb9E%knxbrS=1Clf^u}6 z92oyLfVUAm^%8&|h=POvqgwqS@Y?~uiSXSd&)%obp;EL{_`?Jc_}h722`)vc(wg^! zMaI1o4uQdzFDU zLGrGC5p~H>tW_9K2*;_+>;Z`*8W0^KcRoifc`>zbfK?6^t#YaGID~9TpD8pPt9xP*BFn> z_LB7|7*|!m&$VfbbfNvmtH{t&ogYQN12tXbqNPQYWey@Y{3->eJ z#qggF2yX}eJcjQdhw$$Y8a|QXK8D|{hX-e?nspFPwh3oZ zemgbOAb8YE`^UhuP|nwJ?UIp@hJ}ua){r?+Ki$CFM7&fo$7io~gkJJ9d-(~niKKt3 zgY*h#g)uJ{{`~>r#GlCU-Ne6H52rjG83Xz01hAFBn=b|M@EAYA*~hecz|-C`2p-e9 z{UhMD6YurYQ8}VoVA-_p8N9yO1Ux+_K0*q+Q$gW3{U`*3ta`N9zeE)n%w|>aavPng zsMoZAiElA|w~B8*eV-BECG>qnd>7F7H{!dRzN^J|4Sm{zaVI=)47d2y8qT))5Az_aBRrZiK7B%G}V3sgYoi z4;*M8ik$b*`Tc>psBWoFeMA8#x0Iz9mO3Nra` z%+Kgd#x*l@H$a{zNHz(+tb>rx9`N0t9?MY;fsbDU;9!g%;oAm*XL&6reBlj%U)T%2 zQ>%ZPdg#=$|9fCO#7iUI_8j1ikKyUuv%XWc8o^h!v~R)h#FTf#7RLJ_CTgOXy3KgK zM*NO%!QVpsG{*n*Ao!}LZYBS!X8IQVCB$!V1Ap0|_!$QO-G3P;vXme_(Acl z2L5326TcJt;2XA0r2Hoa%CBnm2LD@N_fKcyb02*}C-I*i6u;QOFZdSxCB$D%{AGjS zAJeRYe@rtCf-mV${A!VZ0DeV|QiM6;&pTyvMw5c-`@2tKG%~v_5VmORwi!;Fwz8gy z)TZ4HB?o8k)&hT{-LBpJ*MUMeK*Q||2^?j#{>UQ|0DjeZ^8dQ@jb*} zJP`l&c>H@&ng`?m65<~x{@OYrmieS!$kdtAi#o=C=>M&Lg7lG3 ztlFn2U*fcBql74YGqkH-5#OpXSJt%CyU4@ws_+SZeIr!>zFZg|Yv)i!OIRVl9*Ta= z;@3|GslJ)(o;(WHR%d{<|H4kVsNxJeINPD+3Yl)LeKUzec&k<nhO z01Q6o=m7?wCBkR7!RI`kWK~%Bd{a-Is<8062VaA!@bo+2(?UMaWB6zA2Y$3%;R~9w zXxAWf8v48QDPcytIm&g0c3(6XWNW*11_I$F+I;b~N_{HmaN4wV9UX;N+XR4$EKF^B z)E|KdY?4DsRtbNtz{6?NzWVb(u31-1BiH3ugX>~)jfz{V`NP?Wm({9L)b3GJ43ZVu z@|hHipiK_l0{9c_88f~#RcCUld90lL6)ex(gf8Pj#i@5QEe$4iXJWLerJQRggeT-14w zX3?EhVXl>FS4O|K@hc(r~l$N6fGZ6^%Ug1O@9}B;FKsYP)q*(YcJ)HedCz_?;?EP9A zl1S!rkWKn?Mn$)EAo7eW!Px=KKM4f-lSi};oq5AZwT7JWQRws29{*; zqJ~~ASp!!ANHn{(m*hL7eIeiV+A~J< z?~C28?HQy(-VF9H03&)2CGsW&@vuW-i3y^M(_5d^*Xx9o@%7u7K^my<=VRe74+v*^ zJr)c9y&lf~b20KE?E={S_00a`5+XUI|ED7vywPG8tp0bz@6ZZf8dxCOfu9C^UC;|j zsgRV$8k9Ic;01pFcv-cmZvgrzJ8qw1=17k;81zOksGB$trH%o>dJb56Z1u#?W$}Bq z7k&ouzy2+X-g+0Dy@s{?#IQD%0KNvyXc>`t;WnHL#VI771BqZTm%uZ`*F$H19N<@R zfGgt^#>SnFI9gKN_soloO^AIiP7(N6-1n`x@4>ilQ{1;9?)z-q_s?~RJR&Y zgU>BTqI~`qu7+8xG5&zLCvwQ4g!(8+?AAKPZqqh_6zh+6e0%4jrc{a=JnAgqvff~1 zs|H3ka|dF&F&0x6V>-sh{CXoMLmwz7PLU#{Ibe%#uS%0tx?hX(`w?6X#n*yL7iO$< zenVQv^VA0TGwe38H)$&z^+F>~1Hm&7myZhwVK`Vr#{Wb{?E(}UE1Bys_X*wR5{M4Sl6;pM-f{#DH* z_HnIP>|MKbgnZ0>&6sA=`G}g-lU49{Y9_JUwcITO>2S!n8g%rU<6ctS z%9)Xs{V1~iZum9%vuWGKwrcgT`}4)hHiJ|=9PV5bqr!Z)ns`A6)9D&?y;*f8?ZBF^ zuKN8r`F1#()!H@XPXmb8+4Pib1DMY5F1Q+wF+G}&_0<4}dG-HbzK}}mpEAzv&>n+V zKbGrUI@SAQRK29y$iY0rDwqw;(P zSHn?i?kmh4MbnZt6zzQ|Q&8jgg=RZ8&T}j~B5z0)pGR zSZtMy?H-o0_5EUFd?C#%@pWiR#ID!MVfQ0C^HItlqj)VTdRemE{V1}%D;}gku(Q;I z6TuDpuLIUO%os@wBCq=Qf$>TI2k=Jv6LS+sUrjO0D1Jz*2R`+-#jrOGLT@|bUmc@& zFX{DABP$2cJED~jg1?{g$MCNuzLojW-49<`&-$rXqsvb;x+`F5k?m}B!Rbjj*mL`g zb}+;i#QdzD*zdrrpYrPnfcP5@M)mPmxEd_f|35JIq-!Fsk4-|oL)$3!Mr{-FBV(-` zgf!U$>4h=UB_w^Ei#FvX&3dZ-5#nRL0(L*vX3G2*Q3_bmjqk?|^Vc@bEBI|%+NOc{ z+You@fv8+>z}1k=zW6(sIAUDnyX|k(R!9pOc7tJWH|%=D-eTCB411&49a@cHSBkw= z>j>)lSYdp(8Q)8c?*`-BV|>@kcfD3%d~d>ce?4&i+8L8$1m##tjf^(r5O^3ezZ6?` z>^`Spy-)q?z}3Z>?3lLh2bt}xCicH)Bs1%U2Eem}zMZz-Uwm4;s*Yrn$)v!4KUTl73O7f~v*5<8QT7qGN`FB&;;m>#*H*bjXs+ZU(c zo`q`!aeIh6x)&~SSU)<^aqN%JenH2+Xg)XySHlA4gV)~epT9e_hGz%HUl06EG5kk} z|0v7HZ~Eg0Q>Yw{hx@S*?e*Orqf$&NyIJeZj!_Z$5kK=|wqa+8-Jzu!-%jJ(VSHPS zZX$>lb}&MF4%0f8lb!Z!>8&koln!Y{cA@K5xDKdM5Nf65_3x1-xZ3JjTVpc)L22L%oRvwG#AZ9kf?Cn}{(CubGMPO9q4!|LZn{ zXE6K>=85{!XBXpjh8N$8@V5sIf1cqg@%hYGUwp>@7{lv{|N8;qjNi|2$5e#>bU--c zpT}@7!@oZuT;ykX`*#t3vmPFuFSlX(L7y+TYRSJl9`0$=aHoNqzIon+h`qa@;k-bPKWC%t;DQ*8AA#K!ms zwm`)*Sskl(kbV{fb<$6fbYT%l*JG|p%11}X;PR{{Xn6rZ*Ai6zSdV#)c$XM<`5^J$ zqsKcj7H=kr^-!1DF=C)7`=Mg(+Yz*H`!y@*Nw+8Re+>|5=5|Q)UUO8M*WqfgOaj%n zJA_5fkLA8LP#%`sdIBF|{qU>~jQHcKlJdHqAYN*xE=o_;R=;^p(y#N?fpl32JVaVS zy7OXmb#3*bPtfr(`d3HkqrdSjbbEG#ZY~SYIm{F36npW@^7}eLgx|My5RrcndLlo8 zH!}&I9gH5kX6p&EV;bd;(o4}cp+BaqFGh;?>ZkG({nP?jTI=C+*!-nWSlrFdn?8Z! zd3}Js>Ijc`E=4?gejLphAH5kdIvHbdc8ZoE{lAcw#&}VGJH_tS9J(C{XKT+7lEfj< zZEga!HO#VmG1&!`8RMW2lk_g!vrp?q=V{u(1!VrGZ!mR3+OH+3L#q=zq&*x5DHD)- z?LGtKM+V4Z0a-#SIR?lq1EkOZ$rlibXruu$!2r430J%60@)(3E-T(<1APok{_BhCT1LO$<LH0Ug9Zd(3vB;{zpkrhc-;?kd_z+ zc~d~@wa=fTIy$tE#SUrj(bmOpI2Jl6|<=m^kPEg%~$7 zMsvRyInQLRll~c($%ZEyPKTBlb*5>j66kwed#~0A&DD-XonGx?up=6ZXJ{Fg)-uu! z?8`iYi7G>flxH=nH}bvW$pI-L;}{PR^~!8IN#w9cd8nkv1pmnhQiq|qB<6P#FfLi)=WlRH%VMZ)9~0n zJxc}+d%a<=HEcg@V-lo7yh7U4E!5Ih?UO&z?$mBKKxYzkJ^LHdI?2Z6r}=rFd(>>e zYKjJL z(IV%F)}dV(Mf+zQ?TTJ#*hSw5?UWwddw_;EHfTSOqjl|xDnTXY&0`hLV9`d8T8j3pN%u;i z7q(T_5<4bL|sc8$G9cFR z-GJQKp)FtBir@H4m?+E|rW?(Zc4D?{f%d|B-(Cdz8^KRbp( zc=hZ+c^eR!lkg70UmAn&)n0H)QPh_scg zH|t1o_3u~K^I%)Aemp52T*QOI)S+ExM0}Ol9ojh9f)J|*8l)Z= zN(2dr75WA_O!L_$1oUTl8(2Q@LX_nuxEgAvfMrgHVSK&67eD*K57s{hqr#5fFJe^I zl1e+Z`!K1*|Jc9qvWi1Lvb~8m`hT$dGsS$EOCqV%-lP~2>OBMT_lMsBcxx>B^Uniw z1t)&YF-)C@Ui$9@%IgHw$G@0q0*Df{vBLZCA?98OoqL7L4(++$G1Y6dzlgm>dsw6h zX}_0mj5nGo4aR@+U9UY%J1DF5Wdd5G-3PCJjMotWjLZTfdY+j|mQGN0Gr$t(YjO>W z*|3$OYUv*6m2LHV%Ir$b3I749%8YnwN0jKNa5Z#LAzxyWNLPiJaBE*l4-^C;L@5u>x5bb8oDzT2Qf{Bi@|GYI}B;AhA1uM|Ew zOv#MlV|@QD^;pk85ZiuE#+<|CkuG$v^gj;LuM@<&0w8beAicsl|M)z^moWTgJv@l> z3+1OMFV_DaqrF)x#&^GDok_k|16fbgdr796WLCyF(fQ$cq#kqzmiz76_I2m=a{mhe z^pAk^SQo`27|sZ~J&0gb-w2}frG54nFNy8S!X`*(WV{pmi{UhQ;>R+Fu z8c6;hn1Iqb*G;THe%7Zw;3wLHv!9^oJoKnkT-e_M2ln=S3cs-@>9n=OnHK8ZZCX!1 zkIIYk(S~Gc0EqmHP4!tiPl&Uf6ejHMgT`Qw`XL$$qr=5M*m~l7)I;Qg``f;-^z*2{)?rn``UTd;3{lY+mVO>} zxejZhCci7N`GlR^7nXh=^=2K`N!UvT_8!8H>I+Lhk2*q!%_i&@JE^n%2jKh&&R%+; zpGW-<8V=~8n6S+PdzP>-_l2dOM}0wuT|(H$1vcv-oR9Q{rJqNw(_vQ=_QwLdfUtM= zg{7ZIU8KWqB;9zKb1nhVKu>H^Y>_Ut{gXU{%)L7|r@`5TgfASDaOUXyM> zDkFYT((}-&&}U+1!`XF*3O3KWUm_eU{gILGR-^VeL2md9$?EvhBn!u?JimveaIuMO zhmsTGbtMbOauOnwQ8+ft^U$cso_oGCvhgN{foiB5N!rMU8);b58j~EP(q6?ZP-Dr$ zv7a$`(Pp($cnXCzYbGf9aJ;T$;n)Mx4S0|de{jX~u>W1m&ghD)ZB1u5-yq5Nt!k*> zo1|;vHOb{~Bh8L4O|oz-!}GgG3a6OJHYqtUURSbkEGZ!}8HHo-J#Fe%rZ&52tLe&Y zklOoGl7U+6Ll%y`czayklpT&et2ASPXGSGaIg=4pQ zx{cDUF}gdXd$mbsd_eN<_#%`Yj?MJUR>~~P=pK^U2$L+3SxLN^vcs_`mBK7LM> zPgO73Z<1v)OO7{FHrqVE+u3PP(14B&Y~q99+vLm)`W!m%GeW!hnz6dp%`QAEl6 z;&mkp$L^JGz=Mp!v70;(u7Vug734Qps&&kw&mTW;j;wd5B5jGGn$u9;T8E#48!| zU+H?%{_378HXKX!JcRaP_Tn?0XMRgpavTM--B{t=K+<-CvyC)Y(rS~OqvSl3-1G;M zFX15&gJjHqzhl~L$UzhyLV@2qknTP4x{@*f^>j0&+hTMFsczSpWSJWE!Q0{*RoVQ( zI++Eksj|Yce9xJqYVLlzvzqhpz&eXUf0(4L+r>s2`#aK24eCa@?~yEjN4kZI_Z>V0 z>LwZU-*20`EtkSiP~a)^HzZ$(*OiR9nGeHhgklX$u-ED7@oD^TMWZ~FEuZW=v(ltTulkTbUx{`%sUq}d2M&a1U zPnv3$D9AfDcedmyCLFfEGym-h@{<(`XS<}6yQF_L(hf;ejajN<_&Ux4O(GfdU$3;) zQfNeh38#{gcwNbO{*`XPgN%6o^*q!n-amX#9#Yg$cfYO3HtZoe#Q5E?m*fvo2zXF7 zzvt$8I3(SD#={OJ{}`_;SvdCQ#`qXy6pp6$ei>U~!k59@T^W|CaBX1T)2>q?F@ z3hW&|y!Ry2P_Y9fpS?wA-slc73VYr_I*()^Udh6-E4|V(^af#q(H*3CGvjq7<9FLU z-2&-`jP3;K4v5#4EFA0S>6S_N?eD53Yo+@;l7Sc`3&&o6qO%>6bhA+~;n<6kGGo%Y zn1z|`%D=t2vsdpRxn}z2y@RRl8rBxKiC^QWiT?O!B@5pmIp37NTxaZa@ue%9`Hxpl znQk59JzbfdAFsRI=$_~4E|Km@Mt75R`^W1_7LFZ$yt7v37ODc6|46!K%?h2;$_O_7>G@NAN*apwpP{nYg(cLHAXuPgu;aFo=IA$!D zQ8;#$=V60N`}-z^lPV8c@g5`#$I?CB)l&F^DXm1wW8-xt3&)O0C{0G;*uKY1lhL&?SQx{`%s&C(5c zkWn}`&-1WN;q3p8DnCdbM#p=QEF8=9bZezB*pxOw$>Za7B@4#}B$Os2e&*s)Q+elI z%xcvTtp7b? zYP|6v3LVD7P{r_iysl)d|9QIY(%s^fCfz6FbqkH|W773XGgp=h2*>X9Jh-}?h8Yj- zN1*(+xl7~UjO)_4GN{1|<}Qu*d1Wh& zu|W;qGk*d=yQW5zsS|~PZaLEzO#OI7lyavL#w(s9_9tkn)OnP2GrOW!uE+SHTH#|wpnV^ zgKB1TMnLTosdY&09H|AWpip`KdB{|EtE%wwMpd^&)qS31Kv%MG>^V<&r*zjF-PO`v z6R#^-IQBJ9HzwU$qq|MIag#?d6bW=wYYLB_b+qsr_`)tb4y zt1b0c#NyQcEwzw_;uNU`YNQgvu|KzU_Tb|*;_0l1W51A;YfD#L*%O_2h`%h;y`Y-& zv-e!Qv7oLiZe~Q+;RekbSD+gxLNeArJZFcbP>BN1H%iWl*Oe?BEA9%%j14kk{loJR z)m8MX$K_$q>mY4fpQ}TviklaAhFF7}%UCkd}(Q*&h*B3wSS}5A+`IY7O1mIVE>Ow_M~R|rDhMu za=mzRb>sZ?qn({`dslKg-qx%csL|*yl6K@8YoxBE%T2OSo#v021qzmo`S1Ov%A2In zjslZCC7+Ael`I^4TDk!bG787;^E`wVWO`R*&n{79`*mF(RFbd9+l*-2E=05A{Yw^( zUFLb(ukk0_#IjGiBja@?3&)Z@-GOS-fkt{Y}#j zIl5YYj{<9X(*0$;u4Jr#db(lhe%I)3lkOuXx&A|vyV>g&C_>rc*gBbcQge~1tZ?iG z&sn=_@dZ5CTHJ#NI^s^Gm&V5+SvYpFXO^mh&ou=flJ1%Dx{`%sXLJ>8t|1vQ|MxuX zRKe>X>@4`p6l`NS*~Cz$mb}6wC#Z;R=mzR0SvaDO*-waYtYU|+3*i12>$AREx3esz) z57}FQ7wzlb`~dY#*ng$(a8t-px88jsMWz zSQCwwzca9}YbX1#o&DeWCE(0f5vT*F1_n7WsW{1mFruVBf*T(DS z7~MMQ20X}!^$+8LpQiZxh9kDN-JXOB^}dQ2y^|DHw5e*;**t`Jar*zRnNIx`FZ+br zaCYQ*+rD?@RqPX5Ma4dE6nF2v0yGY~THAbR@Yg&1KKLf7tt+&l=TA)7{ldU&lK27i zaO`{JclTo@>QfKNcDFV&Jsxi>H`*1vvhm2`+c2!|EdFY_NV*mml?g7Y53)Ve{Nzch z4dEL8;M4wa?8}y2!w-EOH;?Z!><=e;8{zh|G5YPjFP8Azx%$HLo-2;{pul{h@y;5` zU9EE8Wg_m!8^fLY)y@XBGvEJPY`3`8;%18*Ew+L35&Q^H+p=0I#qR%9c_}JyS!a1~ z?_K$~Pmi$EX2b$%Z*4|*K~Y9@;Z||sAPjlhNMtsk||1F*`+YU zBy%O5(xs5orI6O8Fsw`AG?QGfA_jHo_A|-Nl73jPaJDP?u1T7LJ4hz9$L)~=I871-aIZF>=U-_PsDaOC&%+5ovlHXTuH zo;Nn5-dL62`ut!n(trQ)^J{9cTy9fz8mG1WL7&<+_tyS&X_x@72rbJcRWkme` zzYz_R=nI6Y%k4>%wRZ1AU}9|#c#WG*6kg*FS3Eh2XQYWo#clt^k%nsznX~e*uc5w0 z>i=O9uJ)(V*LS18(bNBl^ao4-XTCnahkTZ8t-$S6*Xw#I4{AaAeoxu>=X>0RN5pf9 zhS6&Dy;@u?%PLt`c3OJp!|aE??}$Oe+`Up{l_RUPPOImuf56{2xM$tRhaV~<^}PN$ z+?Z4?jNN(n$A_;eI6T@gdsYT+>0V*{+d8owO(%N7^V?*RM(C{*w_4E_iB317%~rHY zqT`HcqZK_W(Sd7Z*k(l=B>JNft+%3e61{3fcU#e25`E0&);e*u6|DsK#t?b)kR3ZN zuimv4tpUX}-RJ`(Z+SV1KVf>i>KEAGUzI zY=Dyk6+`vV3g`jo8K@ol4fGCl2s(NB04D_+15JizK$k-m&?4w&XdSc>dI5SBdK)?b zopAjC=XB_#b?|o&a5|uuq0P`;&?2Y`3PZV23UoSj67=C+_=3ItjD`pOD;=mDq$8g}ad=Nf1i zbkc3a1icCk{OSNF9l8$M3LUeOHh^w}wnGEIHozGVErOnb4nR4#4{%zcmmp^q^@8q# zegmDpntWpa3N#B!f?m3T_J{JIPidScST8my3(s9Qc($Ed~x(C_}{S?{* zy#wus{sRp{X9zS5N`=NixzOd1jt0kRZH5>nT3M=Z-)Og20F(2 zyNdKiCtsaqde?AAu=7euR7c5}3;rhb7NZD??78|oKG18B`<&K#RbzYxwLTljG5uf zW)&6BzWjB!x&2D`|)Lm3wTT|s$ls8AlWT!>yD;ugJRc=*zv^?FRpF1`6 zo`S7kV?%R|Z6U{56se3hGjS6Y6VBgtPH4vL!a`W5IZ{hB?z!&# zriMDV`P$l=Xr#2Ryg3?aau-)enj&s=X=7yKuxNQjZDiO5zJ6^(WqIwiD$i#!MNQN4CMMU`wp<|p)14ycVkgm*RI?RZ6E_X(^UtvQuS$&PZp<_>zVwv6kp06g9Lo zRYpn{*VI=vEN(9GeU>ygRhCp$q*qoF6Y*A6xYgzLRkaawK3i&QiK{5TFn>z1JGo`P ztyiR~rrdR}D9E3c@6L)eN17HzsxpFgi%_Q;r@Y%*a{g+|o15L{Xw~@f^pl#(Qm->i zsH`q;N+sPw!<$?QN~2BXHPL31d0}e6l$N0x=rCTEdtt9lc6mchWrP~c@2Sy7Qh!sg z?plCG$h|W+WozI*0iPP=of)|q34Bf*pOc###}CaduzU*xL><%|p=Vb$J9RbnEzwA` zQ_U$u>{OL66*%WY(`HPasdQfcYu3zJ@KYxhPf`cIJb%{Y znML_d@vKQx^5LgJdC(P*_^Ht4P%)HT-q;8@$+Zm&7DSqy9R;ElpO2582CBcG8!ggN}1ad3{TH z(^6+@q@u|rh+%qpQ>AXSlNy_9)W@e&-X$$2e6W@%$ZJ{9qJWFIi%04zOdV!&i&APv z!y;egI%CzL^X~|V?a>4lIy79@)smWfuSb1r3 zL0WPhaZKml2i0>qHb$GcPnhu~%{FT%Z=2VtTN){EUdqW#hp0zdnjNXq;M43$L*DbK z(ep^tHJ+rUYalrLZ25Pb1+@(onb?b0SSm4eA5)841+h ziy}=G4Rji=?n?EUNWE^PRZg^_)C34NN4XJ|H&vB#w`PFBwxOwx)9FZ|zT9*{r@5uV zyKG7unHVkn3$-rl7b<%W+S)IadhCGEPW0MZ`h|**i}&MxpV$Y2X_GC;*5Y&bz=U#+B38eiFDKYKCm&smYfHN7c_<;a|Ba7>$Hdp6oq9Dc z>=$~Q`NaNH`i1hcl0p|kYnS#5ZEo!s$|1e^d;LOL;7QP6D0eOA{Vw_d>2n|#s`@l3 z)Q|R1zcLd-a1InoC@)N(dK=mC=(f?Hoa5u;DMQ|o>Gd5S+vz)v-SnM(32oYb6t-)h zrcC-y>xzD%fl2XYw-TFQrjLnb2ki$Z#NI|<+0Z}UXX9y{=Y(>~X!Fh2^b1{FICHWF zzu7Y`oiX!@8BYF;Ns|ln^PH*E3Q11SS6fb5M7)r5aN&)u78UebSuL!kHHvXQf5c zu2La}FPvReP+D9tE5E2x0X?CFgOyzXrdABnl)W~((I)Zyw8vSMoWUq-vu8E9IoX3~? zh1!2i{+*oXucP}A_y~MmztB8lJ7aDJBcgCrrV`*Ni&+-OSR5@J&VBo%5an9lCp5d?FQ&|#&bja6NlusU5+?leV=%30rgA-P=^?EpVjkDZ?E@Q+3=!sj?p$<7 zx^vA#8cB0ZX=tgfGTOBb41JNh#^_R4gRskx%H!#R1q`OCZeuOej)>b7Nvo`mR4#Ov zGJSQuXEj@HvuB`Lr3#vt?#|$eu_>~kM$c8|d6#D%<1x~d?o6}KiYkH7rsZMe$2P5s z`KzgIpxg__2b>Cn!PAKw>)Z^N+wREcKmqHfAje9~MSyP-zU4BhjGwY30?0Ev=S#;WbHJrP+rn#C2Ter%yaz~UaFqd;@W>AV@gx})K z16|oBM&~~Zx70T@Rq@DL#RF{PgiBN1;tSn{k)@r_%J#WiQ>n_Pnnp9P@olTiiKC*W zav{&zl?^TCS$YTe>Gq-hLavDGIhVQ4kQ12GSXr)>#g&`zq+W%-a|YL?=*x^i;8 zjo;bBi=tg@D44lt+m8-Cz4$P{GI4kh{Gi_~ob>+JFaOaO4jn$Mzt}qA(2Z-KI&~kG=fk>0{P~UivxwQ23ea3vwF%cF)>(;D^J% zGXCb|pWhn&t@Fv@!>RBG?tSszU;Og6wlm=MX7DeY&OL4Y3EA(DhMxd`$1|hP{dhsn zGhz5V_zN!j>1%K8+P-2Td?EY`zxeg(Bl6z-$*u6bBRPD}|0Ms{s}C-`o1Ha>OW;>L zR&o9C+D&ip8TMhlTm10%r64}W{(Q_nqj z0(D;wzv`0ZwF62kzM2fb0=_8Yzq88@Z~LE%;8(-XKIet6ufBE0J#0ZZybk_{H;il? zzWAfJqVOBw@7(&Atq=b2t;g?#e-wV*_0g5TEPe9elkl71e|g`=JMV7Hd;VqkE$|CZ z{rrmu_Yb`NE%;>nY`*Nt{?R3(+ zpkLqBT=UK0!@oU^^d9J>pEKg~Jq2fuoj^dX2Y#*w?>RnkcwMHvQz?B~SGyJs4VX z{JMin#$9yNS4a@6QB_vzq~8+;mW^1OgazR_|*2*IgvkX{vm0mea;(^@0@$faha{LD+@XO&B4|#LxLvI&vSq#4d{-vMXH}|gF=H7M}{A&1# z^X}RHlcLevH^Hxif41%3|CDSw_ZzRkZ-D=EY1=n{_~6t({1N_9_~g~&-pGFGzQ+#1 zZ-Os*aQ!1q-}>o?Up&Tfw!pvoqrJsNFYft4Cj2(|KTR6;!D;_Iw6YNXW%$RIl>GX> zSKS@+;dj8lRdm*}e_r*)^*6!qf*+r8=DmBKYx~oE@O$9zdG^mGMZfyp#_z+w4L>38 ziAR68{JxKO!ta9*WV8K550fpP8U9j zm`7%QeeYi$4c&JEy#55-{ew0<^znV6zs`mqto#EPRQ%3O+0+QHKW}>LFQ2&X>Pz!l zSHTa5PkVDy|J=9Fdhs#%RQNj&=UsjNh6Q)D!)L=!+PZqf{iluE^?UdU@K2uc=Ph@= z@udg;1)m4MsDYK{(o&YbD}#%q)eQ{`8HkG_^;Ja;8n~uMnw!fPL{jY1;h)4nf>|4(#7O4k&qUTevW+-9lCmp2oj zCv;PrBGK`_oC)8eI62E@n(jD_HLQ=Y>MY+i&8i>kzn$sHOT*O-W&z7C&pARCQR=j~ zr)BJmn;KgD^lWcQ&LOy{R>-yTEWgp}mb!{?xp@h}l*&AMDo;yoDp)J|(rd17HZd{9 zWkImmEC{MXktQQ{mekcUztA#v52vSqvowpEQiT+)^SbA1+1i{3Z#7YCq6^R)~G%yU9C^5>}9@^(dp7qo^){UOkiSL$>Lt5 z>OyDSn9Rz|(V10Qk({yfv&Q6%DIYg_bosc7NLF^$sLV0*Ge?cds+gaZ>5fXz%uLU6 zyxOpSsrP31;<{#*?Kl+;4LpL>I~6tcTJCi^i!kMS3%G%HYhX=K?+@nA^O~*Pt>xudFwD(`si1z>e(J$dRKH)g7k7MA#V|qPK=pQ(e`uG3bvBw@e zU|`qb^gE{ifPu#mMbfbep?Iug!0G21e#Bc2z^xQ_H(B%O?mjLeLzj8Pfc8KX1CWQ@(o$rzWJ zk(rs9l{qRio1Q-=b8Kc#=D4hktjw&etWjCnS);SYWR1h8I_Zr zGdgEX&e)usoN?m_aU8{u!}U1K#!2*l>+%1q^U+w|#O>efd?sx>qIv0S(`KcIKG^Gh z&$}Nb-u9g4rS;MBC3Z%GkHytm^HE7!AYuLn*_)V#%JJ?9y~B-pUOXzC+nZ7Zq0mmLCqqqs&(n>9efjSk0!M6 zO35F@7(ev>g`v#LMBh9Q2Lu{(0<0Y`x+L88d8OCIkC;2c8LsZcNXe#8dt$5`ITB)jLK~2;xpHEHP5oxq$ zSKWKpP48WI#CZxV%?m782qZW0JDkfju^=6B{4WpZOS#U0EnoZZJtYupVU1Y?$ z=PR%y^t^6iG|nHP#u{<%2*27``1)SA9Djt{Yg-zknu{jtjVNgu(b=EoH?TioG2O6Y zshjOqGZdSO>qUB^U2_XBCl@e{b!VTKmy?l^o(@i)I<;G0WKFRuQ>W@JdLRA*%AP+j zu!N$Hh>4ZeikhmbNWH7caXA+hUCML}&Ged?IaD8Eqq%%jLv6rf_Icd1Gu#w*wT$en zO@xV8BMrmqVo8hgO(nXiM-Too-ISu41wH%Ia)GGv&**QAo5K63p8bvajQ+;DDUNj5GdpLq1A>lX$l_wdeRI8Gjmxj?&*`H|6qP;+uT5 zex|r7Q+tVPiivCf(Z`kNrc9aDb3OBnKkd;t%6jJOKG3tj{G;_V6+hE@_A~V;{bX{V z%PY+9(NX4Syw7EFpUaz)*|WdTc%RGUK9@Hot7m_o@jjQyeJ*dxsGj|O#`|0*_qn_& z***LFjQ6=r?sGFH^?YB-{EYXxOzv|If1mL_m&tu@%A{W6 z)3UcYj_&%(8=@rE_4PYuKsSG@rR}=aZY}r)&3YiKs+m8Z*WHw<8D}|fRn0b9vsTkN3-%r^ zQhB#+wyw*k)^a-Yy~c~nmrn3#g}D&w9(-y4 zkPGfTroUNBDkC#Iv#3})b&+Uw1CQOwye@Dn8mg8mi9E1L`v2wq)ro8Q>}fFjF8o(3 zbqh*qa=q=)E|YWp&D@Cfo}`r55qc4$*DXi?u0@94mh>j?m5b99xt1NmQP-=#znOzi z37GV;UsIoC=v{%M1@h*WM)O+6)8*S4Udgk$+-x>srQdd~bZ6$Jv>V&x)vo^D(#o2s zmY1EzriMi|Y#deE?15l$xxCWb4Y7C$FJ(CD8Y;}bo@y3CrqxkNWO`RpRK6%;U#B?s zO2|WOL{$}+>e6+1!i&yoXsFYh6ZtdGsPbVAwbjP=p~|SdnnuUr!e7kJ4%WLD_(eL+ zb!>sL94~Fm$0zkQl?(kkHAj{>iGA0 zX;k*<*7K~YN|=HT&y_8vl4YZYx=HpdP*$W?+iXmo{PMW()y!XN#Oe!t0KmI~!1;*s zZb{{-Fy7HrM)GRReRJ6`uNMs)KWyfu!>)JEFK?_lAHC$}6SR*?@5|DPxmS!2ZW20Q zJ?li?kg(U@?pvBYYZ^A}y*k?OFzmK%ZKpc#yma&KZR+e9Q?xZue$9qOP}kD<^Uu#n zH~)=y&R-m<@ZL3Y(+II&<(B?tFYrO`8%pnI|0nx}N}$rty@AV;uS}kvti9*Sb;-@w z+pXfx+)f2;3-mq&=-eR4K0)o>n&)z((FMkl$@0NE%H01|?o-+)WB2}aD2{}EGisg1 z?82*dBD`;JiAlOUE*@d7cq@aJ)DjbLyOR;BG+_P@~=U|%TLF$(d-tG z?tJuWjh9mF((zem%Sbo;0`m35q`V4a>7}dCG+n{udG8Io`TS-&@2sXT;5(e6h&~@s zUtncsMkHEP8L5w?EY?y@DQ}bg`=0+^&pp??U_R=8z*SgTTDQQz-|0Hl3*{c;GOvQY zd#eqvzN(nc9f+tiHeN^`bsT!3>)*5k@u)bt_g`q&b6%pRWtTd+v}CQ>O~Fo)isKi& zK+knetA57#Cq;Xzfq7A!8mQ1`Y8P{F?7m@CFOzL6_L=-@D`xj@`R=2>O4)vUT@jhW z9si1&`t&OE!nEtXlJ`Z1nk(7KpjTHpX(p8wmvTF09e^r1@VuV_dXB6QJ~FwmnADD;Y+xNpIp~u~au>WUA4P zHl;T+0Ht(#PAO-Ggg0h)?DfpVU3q$Cq_(zsZgb^4_P1pr;p4JSNxf7mGt-$zPKq)L zGy969jHqV-88I@|t(SUbRu8$+p!=+OJ!u7t>_O`S_MEbxfr&r^U-+fqc!HbZo^y^H z&2lfCNb({#Et8uZte=tTXGl&hE;6&}$h7)sN%&6N{JxaZL$_-Dj9%?%#cpu#V( zMh*35yYEETKika7y>3%MJXH;q=G#i0hWy%yUI0v9%EyQ!q7@@XUZAM!&^n)TQs&aZ z=Z&Q2OiamKo|ZZCeD*{}DpR_PZKS(=xjQ!_)y+zEGv^sMggDWyo0~~@;&dsQHSdD1 z;v4EK>97mQ=nONmsIx~Rjx0)#@*!v>n%)$t^;)Kqe6E)nO5V{d;u2x-tB=}U$0;K(xc>SJe0BfI(yJ&kCQxtfq`lB#s-^pFbHn^-$)d`} zg$qh5S~yYc;*K=T$i4U2i_(&shrX*Tn_J#bM27^sz%$Mz)#L zuyx%GzD4XHsjSwknXv8%Y*1}>NSTL4?Xj3*_WM*h%)InfoSFO1XsAysZ{b;_sV2&7 zjb}>DD)p_FnM(4#n`=XG9DObt?P8s9Ioqw-Q|&8EXZBu`#@_g-zKUcInB9dlE25dN zSKhSgE+cD|V|3Y9;ZCX6?9J#;=V`af4KtH1*NZLlA>UN?Ei2HXNW`6~4`NAcBDzgTD5h&o=GMkD2o4JKx$ zT3*x3OJ^H5dOcBI+dp_fHXtP7htAd*s(fyE5&vhe(y-vG%z*L8_NwAYOk#%%h= zB3jo(O&@RzBMa#9v&=UIDq~7*jk=1p_iL-?2o_Z8Q7zIJ)=h4{{f1I~cbYa7sfTgS z)DJJ__2puALrIlu!3~t@*u2iZq3hqhoJA2XPw(V-56SAKmzOuyloQOPT5h&8A`5tI z!gDjRG_yOYrqV=O#3GM@v^ zROyi~C*Axve)K5C=*i}0u`OqOcFvd#@1OB(-^rOLl^VWQQr(l&Mro9&>iIu1sREyq z@pVsA6Pz<4jr|>LayTI^4Y9_U!2h*XoCh-wv4^g{RJ#ay{xJ`8{@S)D(>OAFRv{+| zbrY}Rw$~}|pFJ&o)xyWmD!RTwg>&e;Ty2Cc)%nrcVais{cSXu%sf0By+Qlq3Q9t7I z+lh4<#w9O9a*sDN??_dk2<6S3Io;TLI$XL$$+_@?>Wovt2Mm#8XDZa?U-dMVa8t}` zQ*w*;eVYEo#iJXV_j?lRtzHGq0N#0~F{d?bo2oA~vU|bAmRy-!>FOWvKWA}sv)Nm$ zH2|gRu8l^8W=(){7Q;v;B^QrckkIZ$SA23tmNqQ1TIghr&dHxNb<*gx{BfDtY1w1* zCZ&xVJ!Mkbl+lwWXXH)E89h0(^Zi!mHOQtlx0?yVi6_{*?0C0xCE~;ry6%kQU7LU6 z2}P00v@0SN-oETKZ-7$+>%!*V70hJBGxHC!xn6aJ)1Hf)OZ8C7?-&&6M?6e>&Q(6! zQ*C~wUL~8hLq|(d&DG@#?KUaTm-5LA&z!+8aL^Af=AH#VrBFYZz~S%LQ5lW4KgP%A zt=o~`Vuu%RM@yv2tpCL8`t@Ls`xgd;?%~_sa#k#Ac(SW=n)!Dz>3Xn|r|2fuF4B-L zMN-K+Ng7Ymnf#jtWiYp^>U_3dh-MR7T1gp2elV}7HWF#1`Mr_d+|d~@rxclb(-z!g zj>uIWpK%;^oc4>9?mG6H_e1OXVXzpaZ{K+|)Gu#%lRFgKyOck3D*Et%P?UE08J4S` z4g9`_JoWp`?z%PDFqm)6x;fSc%G-T)vAOS@h~99%FDN^e-?kbspc|{B7p)sIAhZEm zO}lOBEGr|G(|= z^cA#|udV2{2Yk^S&QAD_1b@;~IXZ&=g0{*V@(BCO`5s<~ zgoYpHcLkt4zQZnqmP0`vb>riBB{+gH$ZzP00il6jR$Sgb@+4N7vOV+}$}7aD>~sXn z%Oy@v>eVd_pBTULS7Pt?LGfybFw`2bm;bf!ZO}I8fXxfq2FsRhJAS)6PrI!xE=@m< z!3TZr!A^NXs7&r*c`CFHc`I(=?J#_ z9-Hswa6d(F_%WWYe5j9R!{ek{mC}gLs`qMt;&+`)$sBue(;kXCic(G z2{!HU+Y@YLAB@4b@%vw}PSVwpL3xAvceRP?ITSt>Du7yTp7gq_r)=kt*WG!jvbHKm zwo&+?&+ghs_xfP_$aXdUH(Ou+xoC&q3GIXYwv%3WG0N5-Bh>f&HcA{K9%kMCD_ z;5!3CZwK^Mj|1=n`Q4wyb1U8M>JhY;&y-DE|JW<7LopP<7eoHoE}icBLeNgOI`@g^ zc_p^%1ODY_Bm8D7Q@(6<_~$T}bkIh5x`zC|FJ8wMY!3u{EB2&g=@*cH9Z9FV*n@WR zwF|vm?3C6aUt#!?fG_EE=PPI@+XLvW4*1e}+5o>9+5rtbuB*REx4ZKs`yo$t-}htW zsT>`$J=l%kMr^x_bvR`kL;g`6v*CmB_<2H=A1q5U`3?Gz%=s?oJ;Cp4`1O!~T}h|A zc!G9vm5Sc>fG^qXhVQU4->*>R2g{O7euF-YjO!zKACgS>oZ$UM zvc~T*2Rh!1U9qX&Iq(Hg@V+a(?&|H^%9re;*e$pI)?y>Mj$m6=*?h@mvk`u?m2K_8 zW_`d$b{*(-1Z0YBKl~xcp9e^%yY>#+$ydf^?w9p8*K2KbGTKhKp;cfNvl z@^uis-2q>^USseF6Z}a}G3y9kdqG>}ZGMdF|HQ6(n(H6F01Cz@z3%)4ZRM|(a+f6d zTM55D!JqWH^B1(0zedX4p5Sjcd@RAA^t$sGw3WYX^oE=iU*8n?94J^{>2>EXXsh#8 zgWsDy6X=?JNcXQ9Bq-{>mYp6=ezo; zbh`89+m+!*jiOo08 z_@@@V_JB-nv=e?0%(q+Oik+yFfVy$Q`NNOB&6eg%c6 zB{^%LA3`0Fb4ilpLb*^K^ceIe8u4eA3YU(3_CEAj!$EPI7L7o`T+lPOYJxp)#lyYJ=LL4#>F%8z>jL0s0a2 zDU`O5^8)<@`UIL-o8;UB{Q}w#CD+j&(DhIo^b2S|G`pU*hR$fDO|MOI1~lOZ+6N^! zV*`BydL6njn&dpPD9K4(f)4a|C~YbAfm)&Gpi$S+rcgWdFUVb%RPLi{DM3OUfe3Ek}G#nZMWkKVhtD#EhhKq<1+M1i> z9Dr&kB{_eD-iH1P{S7*Qa*{I^(qCY>$EE%m)RVGTWF|Q)z)P~Yz8CLuHWONtw0W^o)$k`MgYD2T$Zq`jlD4!{uWS zajp)^iaouxaWYSj_jI1WD4X3l)(80E@Vvw8%pZQ0XVZpkJ1?EnO(lkF3EQb&#NRXN zhs^6g+WP0TE*@Zh3(v|%NwyAIpr2(+roR<*`jA)Y_UcS3IS|!ui$#tQ>qIP&UIBdY(U(!5+x^<4P((@0h z<{kW<6D8h8k8qp=VCYNCX&}kGE?TVwOck@2lP*Ne}w_1=RIwbN!$byk@>1M$Ur zDMPw#0o}o;d*!L@;NjP$y`Zb!xqaw5=*q`Xi^D<1InnyiHB;M%kF{1;g3G(-) zoKG!(EcM{l<9q>B{+B?t;m%9D`rfvoJ)aZluCg}Y<8Kg%Z-rM|+ykmT)ef;fe7uq1 zW2d!MTc&=w_wv`;^QLoM-G^>jpkC|x&|QnJ>a*V3s7~#D*<9lFi}j%DE}H|r*yNJ$ zA77j6nEtAI$WEB@l>x?&`cNZj$#OuT^N`H6yS*kmGpt%X%xk=HKqAE!$TDqY^zr4lcbK$f zWeNTh{T^P>x8L;vzZ%|)a6YHk>mId0ZAVJ61PpsQJ<$cEx z#h2e^D{Ktw68y`rV%T5l_3MM6WKNZLZ43nEL)Z9@1Y4=;@O`uvc|KNwez~Eu;_K{L zcs9~eAFJ*~N3l7xJ--7%m30cJ>*p(=`u#{ydTkY6xzbtNhtJT0F5PXt=qg72#_^zG zJ=a5Jhw+D+GY1r31}esC%Qu2*!zGq)1vOr*wES97J_poTooo35kSROglX(7Gt^bvv-$w56p6jc+texN0 zFN=H8l|RMuXfHbQ*Eq*(^Ch6Ji&jwWz6#W}a}TI~`4FgUaTBP1`2whU%yv-y@;9K` z=50{@@&iz9<6P<0wcTF(KM!2{gOYo%t5fX7_BqgRpWHrdTCL5hfK9Xyn|5pS^MK99 zK5TNW&7}dGJ$=}$r7hGX>p``38>o7zokQpJ+!oSNTQ>HhqjOm{&-1?!l>bGb&gBiD z%J>?nbGZ)GxqJ}Rx%@V$bNLJ?{TD#l{{)oZjxx`043zwzpda`4USg7t%1If~bKT^> z(T**5*|FtYpyGJg;!~jXT<+h9ofJ@UWZ3(;>K5*!jGck&W_2&Re$0D%(NQcrul8cv zY;mi_c8l9V`O>wJlG1zqoy)y?4FpxM5UBc}0jh52fI4rPpxW~yQ0HwrsPi@#)HPTG zs!Uyn8~P}-j4=^4ry5k5&7kQkpy?~1%Dfj;nU8@g^I1@3{x_(yBpW!gkNVj*83>yC zS$+tpvRsQ* z&#zkkccA86e+6|;KCt{JpvL{rF$OAtFM%5OM_4@H;#g2|W(4|FN^0+Ixt4w+oAnmk zEN-;@NA)T0#fREX^R{ih=*a)aoD0;P{T9Dm;_)e<+HRD^3qkdPX*R#uVkxM$yT2UOcVWcf{?+U^IIe+g9E{lfCQLCyL8Z29*regta1n#7o;^^MPiny;Sj zk72YAtP``i-?o?PvO2BjHqVujJ)U^_$mjFz*!tH&DBXLG+nwM~eO_(a!8(QS%SXwB z&*$PB?R{_wDBtR{Ir#Q%f+*k8QNLWY=Be=PF@$xi}(zrsdaC;5IkAqMH|@M8%F<{10? z&~;{c<$MnG&+*WV_&R#tyPk#hJQwXnNAbq&9P>YRj(OTuUVEHvF%^{FSc?}~ycpDd zf2QTH0CmqRwfs)}$!<5O^U?w4g8p&g?!MO>-X?axt_Mh~-I6ln>nvHW?-cya@A~#T z0Uy5KLelb4(ud!|-}dcyUBK_7*6)^X{Hk5{a~>7;M}hOXFF{xNIuh%6`_?1xD{fZT zeWjYTY%)OO!2Tnd$_~x+$`0m9o_JqrMNjgTpx<6=6MXtU5@Y<$@B41Amu<|t{&v}z z-%jwK==V=Y(Qk&1>N>xvq~&7*=*KGb+amWeuZ{(vU&m;Iu5ahtIAPCbAn4m{?87G4 z+7twA_Vi)XZrgu*p#4MH@%0GCrdV`MR`;T#^Vv#WWp^j2I^7HE96Ssv|0#>lff}oS zX!%?lPeCA_w!X>=%+YrBq3fWl@&{TQ#pI0cxxUiPwKfF-o9sSp99y4(pnv|V`><)X z=Wk`;{B7vNrrp|X57_MN#YWZj-y04dMhiLb>~04>#UJ=G}XoQ zb!?QMc=-LdY<_q_RjrwP`3X21lbx5BA|RWNn6kibF9DAJ<2_1+I-bedxB?cGw6i9zRyUKk9jDMK3-Slb$vA^`fIX zuU+D`!F?7nG3WVlc%93qL6t95TW_=I$Aid`T!)Vy=kc%fp#NqM^4AjNetqS8>-gT= zcSyZgmk{W;nQ*-2^Fg(X{timg1-<)HxoV%XXuPk53B2@FMspAHWj)AmNs!;MD88Ik zHvb+_&yf#+dhhYLMZa7hziah<{`>HHj(i=|i_-(3o}Uj{^!1Wjl0sibevd8xJoq!= z$5{0B5ShOPUV`4)q?dui!CS1I^3Q=T#BKyQ4@?0gpxQ^rxlkkgdEh!Q72FWW*YAKm z0e?RDb1(z^bs%4xll}ld3Ot5#wF&8jK>6B$bSk`l1brNs15UE}h2VJjV#^D4epNqV zW3AVBz6Sc&^MMIH_Yvu+zJ(Ke)(QIGY0G`X;ya+OulFo3R3HBc)O~W$;`sjHpNI32 z>zPx$aC`#q%kvZDVR-eU8c_Y{W>D)9w_Eh>z5%cGi0^`0k9Y-CKl-IbU+?$uXCVJ4 zsC_4cxNg;t23z#?&V&zMi)W%g480MczGi-$pnvfj=dIKO=!Z zCxK5-;KST=egA%6a4zaSrZVc8Xp`NCjoVE*)qU8s1?E8;`p^w8^!oH1P;FfXsy^y> z+k3H!zb#iWgnRMnm)q8hj{LXU`}|6KUteo+ zJ*aZqK2Y%kSBIT?5h+ z%I-ttT0{C2)ST{E<{P?(PXe`u^d(UF(pOBn4{Yiqrd;ZXnscSaa!@hVSpHgzw}ZJ- zw8wqF?Pp>VtJr+GP%(@4P`2WbzkQ@7JCqQQWVw)k{QGx(`^}!*l_6Add7MwOFFX8 zof03beCY7waXG*8pJMw#hDE<0Bx1~7Cmo>5FxO5WWdwcru|L|2jdYTU@lY>1ig_p3 zj_UHMy{3+B@Y?buP;q?;RQ?;}t1bQvs-M0K>Rf#Y0?t|JsgI8Y)yFeI_3;VTekZ8) z^WC7Xy$(?8=kMD5e}WpXJ_a>j^>6gXtCK)jCl9&iw}qg_t71^&RVfHKPl1~EJO^st z^FvVM)pnbIJE-yME>Qbmz6EOD^O((F0GL~xE$crGJ@uv0p!(88 zP<^Su+MfWbFP#jkFP#pmFD2Xjzv4%I>3vXr>EEFG(lO+#ojL+zdgH}Cx2f7)?b6#Ln1)g>Ddhw}pHRi4BMMvd@Y@LSu zFYBf<4)#%oUzheC>gMNnhkiXuruE)_zHQ_Gq8_=_!9S+H(f2sJfmjrmuDMO5bq#Jy zh)=Ry$UiRpRo{LO1pFpl;`tp6`aXn-en0u8_r6SW#Um`lM(38KIsCQ}qqudCXte%I z`tUz+*OC4=9fkj$*8jFX{BL~iNdJQ_?K}PqbX3=&pz7rxiS5(y`jP%?kHY_2>wkG4 z{%?HsNdG&I!vB8je@`F&f4`%jxwq@w>b$9bsfD(EYP|dKK+r$mKI%MctPG& ze7`BvJ-<0%(64?&AZY8tv|7KuZI!i+CfMrx`Jk<0YM&TiZkx5;oM5YO`4es3gmU*- z+kFYPo4c`Xq`taesx8*jNS7_^Z_bU{SL3U2;0*8HqH#7%TCyP^(0NFvHg0>^JO7;- zB-BqfA{Rajst^1Rs4-}l#kZ_nsCfPbY98>pM?79AJE8pe=-)>+KIE0#2Kx8G?Flhr zW)8)w!$1EAn)(}`>OYD}`G;(sH3sL+^y)kagzY^1I_KK53qaquVyp@9rr%pVKjtuX zl(RXY?8+>!eE(Wmo=~Rrb@=7@br`$2s}7o1DZd?C`B8fg410Chncz=)I&b@JYzG4| zs}85w*ho66g9EQN8W@OG_G@qS>hcsQpU;CTTWwlE*}xHp^rWMBH};|<|7DzaIS7NY zn`8UIQj0fPx!<-qHl7R{&t-vlcK1@2;`tpx=Umov%!+5f^?!1!7uV?)Rled(wtNPt z_L>T+o|l2@Qze#PVDp8V?_LjTzI(Ujg|Zg{o#>bI0CLTDpR~9I)O`16p!UkY4r;#J zVflA$zEEp@{ciH+yQhKTg|ZjQuaACtLdl2O{5*>@!C}ZF;MriK#bs75JO}yL!4cpS zmKVxSD8D}XY@P`(+gBkFD05ie877tjt(5xBXoD>>Oz6**M%1$VM!g1hv z7RP}4<0ggR1n>%r6`I0^nya5DHki!XqA@H@eL@C}RafEU9b0t>+7 zZt?JB@DlhG@KSJ;#S6jd@WtQ^u+-u;U>Lp?ybN4r@gA@UeiK*>{=ni(;N|eU!7IQ& zTYL|^5AgZ~Bo-tt1( z3FXg6#UWmY%Kr=b!u=LM2499h_Nz&upGe2zQ1BJ_EO0wG(PDv>3xAIMYH$Y_wY*Sv zLizJiafsKU@^2(xcssZYYy)2hzhm+HRxaF)d`3J#2 z!uMb4;Yr}1;fI57gXdcuZ{@}1gC$M+3jKX8uah5g|x!6a}gH~?G$9t+-SdEr3#Z-K{yo52&n|FZZ~a1i_+@I>&h z;7Q;ImKSOw^a=O{@RZwG?*hL9o&t`vyzo@`Z19WVCE#h`Y*4=iQD%AJ>F^6dwX521 zD7@P5%b?onE1=p*zj>nea6z@lS)l4Y3{<_(235b|pz4 z7pgskY9FEcp-}x)IGOy1EwAh4kH~!_X|9{6$k+9=6)Zsi#};1&FMy*B z>EM7>9)>{4g<Tn(=UJ=<=fXEzyusqvz^joz z2$q81w)mWt3oDTS9IOQYXnCRRg!1d7;t{VyaqJ^s_-}9_@?%yfg=)bQEe-+e;nTqe zaGb?FD;G8)zY1&y8!a!ColyRSi@{~!67V)~Dfo3O7r)H%%fSus*MrZ1H-J9`Zv?l4 zt>CY%T>QSd;Pr&~Jl)dzywE5q*^6!Ah-H{a91b!J5FI2uz`a;Ci+6*2;2*H~B=`sTEf!w{JK$dj{|I(ieAmi_ZzJ!w zHYxNM@H9}oPrKnYEdCShkNo(rGya2vEuIM; z3qKk>4$QT9DR?}5Id}qCYjH6sKe9U!l-^0854E|r>+2H5yV!Q>vXz?uY9Qd)| z2yn8+>7ewLe=aEgJg^c>1(#Z0sC=RHg(^>|c!XJ?>LXq#eg*Q;;GN(Y@LS+m@ZW77 zFFoZ4?PTw_$7ATLJvM_EBL69P5%?>Md#qeI8Tkj`6ma0(9xs%gP=0(=dE#{lPqF!5 z0WU>A8!QAbvUrJ=3uhuP1H<4V%L`>Els_L6%el$suLkF!f3L-dEj|U#MgC*31bo%v z@2p%{iu`@B3>>h|9MH>Q_9j6P^GpL_G%#0!ORz_wXSg-A~sS1F3u)@HyZT;5%NKkggNb{e<*BLh29Uoj~d@;YVKi3*g--?*QHd z9Cmwj{JlUG*Z{l;NcYqA`@QQAc-I@f>kk5}ao=*_V&Fr-yFF|IK8*77z(;_u0Urgn z0apNb0UraNct>>n#Mx$PXK4*zSY31flmT!J-h?>6v~eQ>2KGq z_3&ljGbq0gd=}W@;kUr&P>xv^9sfKK|KLRY3&0bAEx<8eJ(XYb$}azf1o{c~n&uc*H@9RM7-y1;c&n6(f{~thV|4ksh@1H3xLsenRRGA@z@t`b$XtC#3NZ(s~lo`V!K56Vmz<5W}^#^gl2KNM%BLj*!}m zAiaMl%4ehgN1zVe4fF%4p2|Oas(tAW1)Kk(|QJRmAu9ta$G zC-g2b5f}|T6&M3N3pfZk#jB@stXDo9SdH=#z{S8Lfp-JrfK9-ofdBOBsr)CeObO3j zC{sVFA45>4ejNj(ek1_tJwt)?-eEv`&#^#iClN^PQj&(+IUX2y7tXr?hXbihNY@GJ zenNVlklG`p_6g~Ig!Fzw>JK6HkC5h-kmi|?=AG~i+&9`Q(>l?*Mb?Y>h063Heo=8B z;aDJx=O%f0A&^Ho-@_81i1Kwn30UXhU0yvQ{jJKCKn?h+S0<$A2&ugYQh%sSAA0}W zxK8*XFctNkz%jrs4}Srsp**-A@qb{Fho=M2LD>SP1Jga645a(%`guSqX8?o1iNLG8 zG9g_jr27f!y%D5-Qkg!~zZ-F#a49ew^$i|A3d})yjfXD+FGBe};KjgCJ^b3MC%hE( zQFlY%1CIkznUJ0%r1m06{h%^^==~|UPIxwOChBz$$9b3uoQ3)V;B4S!9#(txgvF>| z3@iaQd1XR+j*!}oAibZ;^r81Yf$N0N1LvatH4oc7{1|vS>URRKpy%!hqBC%h7P z3h*kR;*|;MIw7?iL3%%x=|k@wgX@G7f!Cux54aFm?BP7Go^TQBZvoQZV13Xl6Vh{p z)J_EHJyfO-VY7GrSr0b=m*Tmtz}tbJd-%OqPxv>~$KDIM4Lk`*WkPz6klKx4|M#8Y zT^E7(<9-MD0PtK7rvM*Bc{Xr4u+qb;flVmi0el#EKkyOYV_unX1L*x4v*9m|2Fb4j?I$S>i_#AMAhn!bW z*n;|VfG+|s@ydks93izA!T$4B=v^=O@Jit8c)CZy*Gsl5o&`>7oHP?_@Bgp~7!D+ptA|2c18@d+zN%z`fMRSo9;~ zvi;8w^{E-{QK#2>*y7Ik!T8D!Jm$;?!|h)Tr1lGdwC0xq=^fQx{q;av=fyx8 z=iOd?6OiWi2_T*KdETpk4M^u8+JN*sp^t%d?)OXJ(ZHQR>Laz;agaVHKNRlcnLz5J z0Hi+JKeiv5q9`rvzb&%NwH?qz!2JM94X;!n&_N)i8NY8a_JLV{fiqWZ}7 zwqDn%{&lVI^^Lu*AE!shTcF<0xAwYD^%>@YuMe@p*XiCEeBW0;zCry_ws)WR_s6GI zhX0O0s9yoO}K9*>Mq}N z-=tenhx@kox~~*Cvt?M7Wnuew#Jt3zEh{A@$Uz0?RDSxs7ps( zY_Gb6#W73>&-!}R>8M+QI<;5bMW|~;U1G0yRHJS_+S}KM{?5J%$^sRG=7a75tpc@x zHiNc-x=>MCbHK2PyDQJT}>#vGoxW z^bsieniys}XgO#*X!x};%%z}Zpf^D$%|{t@52zh9{JI!s7N`w$^aAt=^d>0w`WWUc z(B+`Dpn(f92cQL@jiA^YVi+A%30ei(0a9;_VQN4xftW=Y7ickPGw68mn~J`l1iAne z4SMNH%s(g%^k2-?^PqZA6(|R!g6eQz2t=Qo!Ji?}m1ygBP%~%)Xe($Ns0;KnC=T}| zf`)@efn<;mlntU!3DQsHpajqm5bVer=)Ri6K#-3$LqRwzNa4pC$gG+>Km};`Sl}@r zZ2B6==NicP8gN++wK?k+%<;`JOatgjeDA`$LO}ZHz#Pz+x)>%2Gz66HU0ZrD1v;TZ76TWHTwLF??>SK zZnU)lv;@S0Mu3t)@t{GV|DxSQ&@Rw+PzUH=pjOZ-&_J)fi}1Y(q@w%{p6dW@0hOWd zEYuYM>2ndjPXcA4YB@Mtks1n>1!q)* z0_CX~H`Pv_R~`z?$qLR1q?Xei^o_Zeu1qY+uP6$n`-}6b3Fc;IY*9(MS7uJ5JH}R& zmEk?;UtXZRd_q3{b?dR{RmkfcBzN@0ilR_(%sf<;ObzA-#uoa^n8ZPmuUREM*O~8P zruu`S@g-%GgT*t80)Lq?E07mr-tk(bu1&?i*n0s6P2X|)W6;#HU?|`g?ueOO6bO_u z69*NQhsyHilm@3VFL_U<1*!lxqa})JTWi_Ei+QMFMTVSW$qg$1**IkTtMwpfA_2c-kKgWIS|V5 zmxsocm6ensS`&r4vVwWD$CgwS<9+9iyI|6|41qr@zo-bSFwn`(DGC(N3>D@E=mB4O zDBtJ1Ff}K0Oq%Z^<`%kMQW456DabAJ7tajzyM7a04;EMYi-P&N{<4`B#3=plIVr}e zD9-a&%q$G$2CDJ`rJ-O+apa!dNjVoWA4NOmr4^w(pOZ4fUmncM#jFSXb7oW&_|m30 zDS24s+)x>ov)q>!elYys^HayAQ!hUWKVSSip3glO1I;}bjWDmEl|ZOG1cvKrC|H75 z9;6F7>A92W`83SMU&;%rdLAwb598nsU<#PRD5s#PqP*}oKb@MI&G9}ov53}Uh9B!t zR8*1|ncy5;nZq~^o10ORH#_Jp4rb1mj!r*_E8JdJs6Vxl)(WtAv|_n=Xt#H(+yKWJ z6U_JFW&R?MG0^S=divb~PA>RvW>Luuw>NY{@B7B4W~OG-dxLXIec|picMo*@MRWc0 z%5#fL@=A&;eR(DMfxOC4E_fo+{Frer!!SQbIYC-(?-pNL+LYXhGu*Wc`FtLCj2V}n zn%cV_OUUaH%g#Egw`s>(5*-z;J# zrjCP%Nezpb@ze?g-S2G06I6fgy($M4P?7amKG4Z43i!)rJRE`Bm?Jnw$Y;{kMFahhp6FvkoJ-F zJh&L(e6B*hwhx~l%9|p*9u?z+0!2kLd&U|(l&8V(5IjywK`E4eZ?)kIOQB=>jQmiS z;I|H)R=cLp$PejF-q0U~oEsl3DaBs(47p5bz+efPQcwzM=`KI-g7$=UwTBlDz9w#K z5N0{4WA?~q>g#`CHO>3&k{L~3T(a2TMQ&Wnex@P~@USRoLJu?z5z$*IP&%cJ1&Bx0RWEb(- zY>#$LWmZEkkon`zs?f7b55{zy4?f)ecots6?|SxK@VFFN^h4dB5z(GYVznJBwjZw{ zcWOVIJ$Gujli~kjr=NowtopyhZS2u(dv?OX+aTW|cdF|=yyo)p-oC@Z8;N)i^1gKJ z!5)V>Jk^!%;ZIc-o7=~A+?EZ?Jm!({rNG3@UPt;ic>k>J3@i7Il*H1u8hUxmR2B00mqBUVDLWtAKt0kN+G_TOLckl?L7MCeoaCv zdExNOo>4F-?yDAKD-IzD!AOjEYi^+%)F~5j3EeAZPK)$uUTGjVSX@w&>y10N2s<6W za2tEUlu20=CXVZwS%blS;V43>pN5a&zzuYtEiNewgeuC4-LXR46eFnUr=EvO5WzSm z{H|b$_wwAz^0}pD!QxOsE&`8#+WTtH#bX(oqLMsBYM5MCB8CvGl0|xsWpcv>_&_vU zrSquvI`_LjMBkT&doY{6Co%o-+Px$l7LS(SyQrv;L67yA+ADkHk*A(HqyLikU3?{Q= zZlH{r!Q{>@AajSgp2i-SjrA%Z+mCUWG6d7GRTv+>6@#U40)jyd3q8M?`df^+9&=0h z8#WjEJ(uJ+CX6{5Yct1N|M7H30TpnvgmHr)#eunnOe&LG9w?+~B37kf8s-WEDhSTR z=F2ViBbqjsLSo?&2H|`L5hc64=Tcx#WEH<{A^z{Vqog=c6%6HuDB6nLE|Xgpn2C*p z_jp$#F&X0AKvf_Q5!lG3@Ix2@%_GDC8bUNZH_!dT%wo`rCnwbKJE?-Wk={?=a|4XO zG&p)r`RKX9;?ZbjbQuDN82{)ZZZtPKEDHPGK?@nco%_E7;xSlqfa`?;e`)W_{rk|r z1O2aKkr3xSPz%K1{0g|)lp13H9x-$0eYM$jG0m#mi_rX zS_}bc3>Cj>r9SNU^75Fh2p@V;Zv1W~YC^eJC@C9{xIgw$CSF9tSb}S5ff*GuX9mh5 zb^hq{D*|QnG6Q7=C1tSN^8)Uy;N@pfPrYnHII)3b0#ns%Rwrj*Kc$n*{QsZ-8)hJL zHU0(wsQrm>{+_TCl(iPW{Q%{Iia;SyHE2Gl7E}jX0$K*D2Q`2iK~11$&{|LnXd|c% z)DG$db%Az+n5S{(2NVxV1SNy$zL7u{q=I~)3{VbeI;aR#3JQU$K-Hic(0tHBP#vfq z)CgJuY6h(ZwSYE)+CW=DouD0{-Jos|^Gx{uXkaWT4ipbc040KwK*=B#ln%-OWrA`* zg`g_XLQn&!1C)tzbOMP#wgZu$Wp)6gf!)9wVDz(S6Bq}i8xw$Z1}X{Y1Ev7!jLRq> zJuiA?6G-i30_px7AU&TCOa@kYSPS%_+z6}zt_9NJAzELKSI%PbKMwWup}GjMZBg;e zyHWA%mZ?=*{$j?4Gw=H+Q>KFi7hnJ>uW zq(Fhj738Z01$nY8&k&_N+vn@kX5=|Zl$05HQh+az0xTzUe!nVk!i+#b%k$4rWMzNP ziDE&XB58`OvUwbCAozs>q3`<;Yo;{m1OyU#uTO})o^UcXKM?W< zi+r=nkv{X!2d2#PPmxKyoT^@R; z`#jq_J$z{0?$hsxmM8N8%2-yyWo`~7a-zRc%l2?Is$l=f+VQps3&gvu3@kC4kd~0iiO_e>GeEJTJ#F7{MIh*t39M&4%k*? zH2Zw^&>rnG?~!pFH0{%G58(b@Dc}Bcn>(STdN*_t{r+5)Qxtkty2u zv%h1GaxVxJz-xqq)n~|k+RrE?P zJEypYLqMheP+s9!@b?Tq!q5BKM@~x5gKh_~+HF^yWVeCRb4u$-&HX*9eP~bA0JIW1}{PD*62tu@6>JOIr zQc}i_`D5MeJM{2g>yfg1FH~ZI&F&--k*_e}5ShCXw>uX_$S+kMBI9U1PPq4nEm zx#JPb4J){?!R&c8ecN$Tdfk^hDJ3PlN8R>suSaX{k!1ykqJ4WB>^rZ$v~bCcSv)oR zKU1WmxpEv~gnB3qmHpNpyQ2I59Ubro=gMQ-h-tpR^>+CYM-PjTWActm?s4XNvuHm) z*~fF)5f}FmT*rP)-A~R$_`h$zdfGn(m-Y{}e+aJjA8P*)LI8iL{X+;%9JKvja^+Ag ziXQgrEuUZy;XDQMa=HF|e<^(0+)|wN#);M<_>70(+PWIHFW-6Xg$>+Dv%a)HW^El( zU;6fAA9C`4RoA?!@7q6^dN@2zhe>|7_<<+28`UWm#+ueuutBMJkVq0?sHyxKf9Ml*2BcT=hBT~QT9C?PH}ni z|AhZgOqqUNN`L>+Yx?%F_D%I%$ZR%FS%+? zQE|C79On@9^1Q;p9Dn)fIl;WLlJb&*&}f`{(Ea6e&Z^{wC&T6s7T}miHuCt$@>#>V zv)JMGQAZ>vo1wCb^3Vj#>LIo!grCEc<;d|OdpOT+CmA2J4DKA>63C}t^&o07Gf>`h zvG?V1Zh9CU$p};iijs@yzt(Vn`Gn%ilG%Z>;mH-j)I9pVjWxW$UsN6#ZkuQKwB7gN zp7wj)vDe$pv-|YbJiBMmc-%ZYGM_e1t*54?O_+2}PLB8GkCbtA1{r+(jbb*DoyAtM z>)9Rbe_4mi;Lhi+X?l|rpUY674cjfbx@#@doU|rVJ_5bRBHnNPr8TT0LjCYN9&1|dC%Czy| zbmU|JN$l-x6Zb4^@^P$VoD zo)lumqoijgLmn?rmS@Vh%lFIM#v8_F<8$LjGtr8& zhuNpw`Oa0&R%e&Pv_LMQ&BIuYyNDadXY(`pYT-_yTD)Cs5+9e|ke179z+X=)Z!3?f z8`Lf8OWMcUGx}z|Q{QBKVXQaX&F$t6bF-Cg7uu>b88f=s`OINj@wd0p?n3Mpg=^&o zBO~Jz=3^zB%X~wz6MaCoG ztdERA=CP)2jx*0QXPTFrH=9e$U1qek+**yd=G%ju1gzwGhiM1T;++MU_t9LCJ5S6O z1L8H}An901mP~29^n|oXUL{v5*C~z4YUNqw40Vuptj1{%XkTls`t8PpMyqj{={L8U zM_WU!Q|Sxw}t-;`)T z@fEVCb%0CQ=dt5IWxrx~vV~j~cPDo)U&+tsAK!#4>Cp=i=Q&*}l zs&7HEeW%80PinKQ%dBhM-Tw~8HlOB;9pLW2;jGR*gEfie{d@u6%D*AJ1$jG0yk4qB zAM54!Wa7Ygl@4WxVyG#ashz9UYq#n5>c8sW7(W@JIo6zP&INDpv~ulBoo}dLz5%W* zKZ+f~c5{i?D~0?We48*7JEcl_TFFooF}^aR#;7&2v3px-*Jci2>hY+bEn%-@Ej$z8 zXY&jArTi!S5Mi`%i*UavOXH-Ar4fp%j8!s}yOjr($CdTU?P`ScDwd> z?N#j`+E(ooZM$}+Zs@7{HPCXe=!P-h(9C>DzDny>?B6G?ZC1c8vMcP{T?yD_|70t! z#KTU*MjODi0ZwGkXXmlEfIDAf+u1noRLKv^=Xn{YLxydeIR`<{UH4+9Vs6xkC4xjHF=D@0X%TLGDazc#J^s-59=4L zj)%njTs5`Vwa4{n<4D72OgEMqEyf~qvAND{G1o)#Z!%lWHggMPM7!Bxc7j8?Apdro z-R1&lgqNXP89UxS)fVjWcD7vr&2WQVkG=eo-DkhKc> zZ==;={n@_Au7WL43ocn{|7f4?jB_%b3!NFxm5`{U&jv8n=XNi-!)LWCmT7~Ga+!W4Eg?&`I9-pei&mNPV3)10OvAsevway3>qe!CX@@iu(G4Y z@nXJswfL+UFQrHYQkC?m^pV^R-OVbdlCE5=oB~^@0&DpXb+Pt})(EZA06ntG{LE~I z6nx&^WXC%vIjPQHoZFoHFwVE32L~{Pc-JtD@;vrJ_HOo3$lE2{;rz#ZKK8-CgnDtC zxJ$f4x>s5${V2yM$(Z-EuxH0B7b>|*P$^fgR(2^du1+JZa;%YLu*NPU)*NIdfZrEd z8|*DM(>lPljb!ML1>7=j8^4<$FXo7(7dJptcdBGrU2GNDb8V(Q+^17vLp;b9a1|VB z=Rp|#6tO_6kj__bhpgD8#%P7i_ z{b2oM4F^{i+Hcq&!Ja(HNuhb}3a@b@JA)0fH?g;|FR{DW7|zE{=2(6jp9g)m2zzTA zG|zZp1SG+Q;uVdoUq@<6- zT>|NPtKDcn1+IS=Iv~M0-EpwXZ--rpPWuKjs{w%TEm`lx-=2MVEosdL3&0oyJtr3=Loo{7Z)2!>z`<2!@>mBP8Yo~Rj zeYUOJ=i77aGS@~K11tC%rw;vn29{+Pbm~B6Bl>(8donu`GAWhy!%z7$=Wr7_KR1`V zmwSYJ5t`vs?sM)JZYaNse-ZZB7Z}q|e7tayzzgY+Bv%Scg_W?$UKhR;t{49|0RD0Ig_BAs0_!sqHN^{DWl zV{5qt{vp0q*diV&4~74+M7>P?WM8}(eH z3%2pS<_gSg5ccX_b}hAAI*?oi<}&s|ZZdBR7mI_X)1?eoQZAK#l1%x0Iae;1Z;+po z-;_J$>y$O%{0rbUzN&tv{-h>pwsw)0uU&%f)I z3NH$u!h?U3*jvsrOngs z*UvJ>U{~%mlFf(BRPgS%R-C=e-bw8>3}iL|CbDzcM)n=V31seiu7&%A`<_b>P7#WQ zYT+~CC-}EFi;eKz*NH9Y@kViz*ebS(Tg0v6SK`lNCOFS87s^K~4(zKVRUZ3o0XXbw z@YY6kliI4bfy1_{?P^df)fQ+sY3pDewrXvV86*`KU?(mxZ!+&OA2h!*zc-VtQ>}BX zNmiRRz#eSd@HaE;OnW+3rx4axwOwP+x0hf9^@s;F+pF!((7+f(^FTLlMcU_mtjp!x zBJO1_#Bb#95(bE(oUH_uPnGkuYS=w%U`@<+%AD&U6IVNHopsJ8*uQNgz41rG2fBVM zweu@%hKby0c;)Z$*;unU=>&LXFH3FmzvU}o#k{Nh10G?Fwj9=dseYS&1bl`m#;3*+ zW+gaGv@Wn;wCkM*;9m~JFHUe~l#S;SxI`|AOXgCzzVg@LCqwqX!*^r05MmbP;>*32=KWtn4lNcD+kyjA$d) zh%?eXJyvft7>&kSW25nqkKAjhMhd&Q|o(DU&iocq_k-v?vho|>A{}kWCzsA1} zZ?c2`nvWIYgm@uANEDKUWFbWuDU5=5DGI7!!n;m`T+0wLg)AXQm?lhz*I9^YN~sVM zs=#$M!hB(&P%G34ON3=Yz0e>u3QfWap;=fhG>fbE;zdImBjqEGRV0;4!{pQC3zaKf zdm|OL)dF>?`kMBQHb@_;uS6_h7qmbYq!3B?=ggN8+xVyXuK59?B%edt{{XA*S2M;s z(u#*AlnD8dY^A_c8D+7S2pwQrJ}V8nKEuj{el3NqR1L3gp>;F#+nxQi+d8YoT5oN( zKD8#pvR+{Cg7;tPTo1o|pliR8T{QywH^z-3eJpee(c*EC5ozKgk(HK7&qx~)nfp>Y zL-xrR$v?{J%B{-7$_J3-32Lr77o6|{+%`=xRHV^IKnwXCFZwV7%l4Xm+Hhf#4hn@X*j&QnbKnEZfUjDCgnlyu9dTt zOO(yZx3De9<{PT5)Sl7S!($q!Uka=JXMK$E8no!w#twL*QRZ>xx#lYK4R{+DS^3uG z)}z)j_9%OtJ==cV-f5f8wdBj;uPV}h7|iCd_p;j%{|Iqgxt-k6;4UA3Aw0T8kfG1< zn-PDE1;6}5I8wYA(UB{}6=H%k8XE5$t zp-xt3LIS?6ex=UT9*1Ws>b8EpewXV5pKRO*OM8fUu~}liV*U#}cO0yWoz^Abl3VQO z?O4c+FR4Fll&foeu=4BKX7&^I60Q=Fjwd)B`|br;1IK_{=822NM@1f%Po7*1E%}Cg zBJ}-Vux2N!7o!g^Bl?i6m1&D0Ej0ZeeHFaL6Aj(?&^R0XA8pOCUb2q0Z$f*?w+e47<6nX-9x9w6Tmkv>m~e(zDn5ot0wX2BF1ZRj^G|ZNe4BhX;=Di0 z8PF_ODqkWtGgh6dK8$Gg2kHdva%j4DVNV%)7UE-ie z4!qlEt)uJ_wu2siiFg9(`g_Q3ERCWNA#*r8oc#y;fg9)gg*}|pz>gusyQnHH#XMoFxnrE5kAOiX*tjQM;kr)X3V>7&346G)+ z*9Ktz?_k%lFCsq>&z*>P35PL`<>qnMU?k6Tn-S-sIMh0xg{CMJu7xGsD6A5m5!S;N z9)@Vd1L8a4H{xz_tn`$03Sx`T%3I_P`5ReNCcxWWsgRAaQy&2dxxiQi`S_CI!^~${ z!<^IL)va+}c0MJ3tBYb(KoYl$k3+i`g3sQOvf-z%grv#Fx;AOw=_eYa z4Bj{mQ8%U`%C#3pu`DaHsvGG(n*SRjc-s)ke?$CG%$2rCKTCsQ**VxPLAgsgT^+9R zn5{SUFTkrq%xtp|mf2iuj8p1tbpGiu%~8yJ^yOkVCvhBiGRJc^ERiYP4DK@SI;{Df z+~Zi?PVNWp2<*!9w^5-hZgZtEH)g0|6eYyUW z{;7TmBoD<;W?J*DJKzI$SV?v&;yF**Z$U$J+c&^oigJB|KjU`}KG-Jt?5*IC1+Ymr zaHX&<&KIsiTvvgIe6@I(WFc-w(cEJZC%ajG4tDd0u+P4gd1abX2k-a`B~De;Af&`q zY8}S?5-d?hOVUOl$CRyAYD=^SwRf~3u%q(zQvGs$F{Jd%`k7eYbByziBI6d=r-kqf z7s6{_Wj>2&+IMEaDuKkVw-kFh@lJb`o8vl+HP|U^8T%jh9&S1M+R1&*UCP(+%lH-i zEBq|sA$aNED2J<=YP2T9W2x6()Q;1KBZl&g{)-+mPKIuJ4_TIT?RoYp=%(S$Vpyl( z&aNn?9(GzRe&jO+@y|2iug~Vzz~^`gJN!-T?|)%;Z^PdH9y|NLt|t=D595>g;qcwh z;zeHPF93&J%IEX5_)^5ltNCjXoxho1!r#d^@XOJ^Rs351c~}XrBmTUZ-->)dCw$Ny z{Lj#OgJ8)GfgN`ethhhJhLd5zje-3(3D(4K9x^yl+7pYoMP4WW3NQ3z=)9@Q)oQJJyZQ(s?*-6! zZP2?vXbJjBIH3;`B;u2F7WgBZn!@JM&Lv8SPsQgh5@CTop_OuinL+&b$u z>)+NX_F0IC-i9dOtH^jA<{a&a&>=Gr^}WV<$a&0p0;?bG=Hnz*N7mypb_`Z!C-*ac za1#_NgmL0k80SFrJ6SqQQlwNV8=U%r^lvE&(cMvUs$3vnE!WBq$%jFIF!&`{64)sP z+HoPgwMF*b_N(wr5ZQ!n5{=)zlg>JU<)F6;up{1QzhQ@P=fL}%#fSJ?_!Gqxak@B5 z{44TE>%$Kn?0Q)##4>k~U_Q;vtfsKa{P0576b{aQU$TdIvmv~w;jlo$1@jMc_J zjbY|P=6mqR7&e+I1n(_Fc62u~Eyd72mqYg~M%>~#?rrWn#8Z#p`*WKQy5&axe*Rc^ zzaI#3q66zK1grK|@ec8BNbHB*7{>cp?PkE}~XquL(JbJ895SKyJKYzFzEqn%-h z*^Y2{$8dbkctoi$a%MS~L$}|C9lZhm=G*W#KXN*publ6lpJ;u3_bXNEnDJ(?ZL zp2(htXpzcV>{#Sxr@~GtVXs3xdl{R`oeLlBX6XF;um&$c0{jSFemH+DpUjWpCm@G3 z6Is1w{1foSmLfa-g0MySMEI}Z6UV`aoh#OeH(>=n#LRy!{viH@Y}lU>MH&OnyjUuh zu13W1Ch0cmZ&;595vyJat@<4N(ASWeco(^ePmrDX8u^KzkfDf?X|;}(Pn1uU&ydeX z#LWOlpCf0xWl)hCf{=~OS%?$h4Vc3?k>u!*jQJ@}oTfS6$xVsTF! zzZgZiu zDMFd>cf?K4My~Pi(A^WIPN_~FugpMxA`L4%AF_6celoJQHzG&grti?tfE2jT_{2C5 zk>*QaAr8P=)i|%wT1=02?d}s0t9yezg}a!$3$gW!Vg0_rpCDWej+Vus_=I=`{18XJ z0v5+Fa;lQ2UItI|MOeOPXjxhadSx{vP-MJ|Vf_vvMA-5WOI?lGJOO#MCg(}#dFKPXUf+i z%J>SrjS0vpEJAeRAIhIpLp>kXIQgZcG3$3BxAtF6(u)w4`wY?b(~TRAHO406IOzY2 z&AZKy%_FT-tXp6Me~*(1v$3llL$JMu@-Za#7#o5q&Hvf9BWBSu{X-rvOy z=O=*&R`MV6Kkz3D=ix_*k0bBVB_zRiy%Z6u-SB2J;h{B2&r5%mAC`+?^{iLAlv!#G z_Wn=mpWrJ->3_vpmZOYP*yXE?ZeygGWzIre@Efem`G^VLX0?MOhhxWIj?Cn%_7Ct* zvLX4OCL66G+VzhHu{^x^rLbS$LqvTEZ0uAw|IiM5Ohd$?Q#cd5?HEY@5po^!4s(&c zTZza~0AA91@XDE*A1ir9v0nek?VnP?`N$!3Z<5}6p*6iwAMO&{|6>1GCe=PWY^nf~d>hZdSe zW~muMoV*&caXvIvtyu>ff0auoNyODEd>}WgI zjzbPK!A`W3>|{FyXAVZ$EY2OMwrTrt@*u~a))Rd!wL{22hGUQmp#|!^NMr+Y7EN9} za;?1%=P=gW8{;+%M7I1-&CCmFe|k`PL)m(TH6|e6?Cy3){a1F_4YY zCaDz>qb|g-cS{NI1d^b=O~kFz;5%l>na~M2@-*o2d^s{t7)xt3lK|M`k)qHZO-IU@ zh!+|{?yMSnc0Qy^r@CG3Qg{w_l-h~k2o&OYgI0Pt$(h zfK6hPkxlYJE>2^os!KMQegVF|p2b%^wC5#uBYHBubqMI3y{C{KfRI3KwT@(-55 zCkW>m$P3tG|Hs0HCY}v*YZhX?#GAyG#E;G3!7b8OX*+n3k)!2UWKBo9JQ(J_X>v%O zFE5mr!G3H&ETc(o#!0bFh!pIA{n(8dRxGmQtRf;yo}pwa(_u%3lq#G~tA!W23^pX? zT-)GJw&S!?tQw~#L7Jwxc^6U5fKON0!>P4uBl1&gkzH#=?xO>IOB@@g#Ul=vqKTS{ z6FfdGU7L=4NJy)O9&bccp&1c@Er?!jNBnY!)(tx;1=fnHo4OAk;&k|?AuqSKL|>t= zL-srz@o&fJ1d8@28OcTp;u2|Y{<;vJYpGFX)VZ<$)rkJDGu9hhVb^wfJ0srP7a6W} zp9YCevOFxsn{a-l6(>g`XGV6L@opSE5&=(#Brb&vj!55S$mde5J0fK}-E$=gJPsR6Ju?^T2tJ$^K5$kadWINl1{Sb{E5s&PPioACQY@Zyi zlxtL1V7;~=G7y$AyRljcIO)g2cFcf>Q03}pvgjzrMcTOo>$F=-#2Td`>sg8%Obzm$ zOJG~JAn(|T*mJk8;uJwOP7&22BVLaT%nEo`Ek--eKXpO-GSIy7(7MT32Nn{_2Thv^ zEjt|=wiMd62CGqr^=N>kYKE+8fvlp_i`}qJ;*pI|k%`EFF04Xcy%BT22^wxU<~S}g}UtOnX^1+-O*)DEv;2lP`C&V;ehNg=r!QlZv8kJyNFfU6NrSP!YthUi(R z9H)$eJTP6qG7Hh9e5Dk!pdON-9j7h2AO{%8fl!OP-M#}>UNkJc1Xy<|ub$P7?=WRN{W5it}5%(^FE~kLb+` z@YohaqoNVTNyNDqAGoSW3W2K{pm!)wwiR4O`i88Y6zCiuES@5{3c9AzYG{N=!9yB_xG5UiB*IHsh^*JZ;;B=Yxtz2bdSoj!$#z&j-8iX1lF3AV zr4U|29b)ed;GkCMjomm&7q2Jk$;HF;&Bo)*|n8a z@KCyuiCpn?qtMkEHL#!RjAhUqO-3^`M+-8?t;Uvqk}E8?e6G|A%dD`(3d^g#IV%nv zwQpW(g7#SJ+E%TQVeR0nE?1Jp!Y)sQO+FI#xC&c59UPVeTfERNg%v&@Hunnnx9j@x zTelqz%Q_Kuv=8#G2pXgYytV?mgCt(38*9P8n*&~pb7h_ht&xGV(bL)akbEm#`)NJ9 z3DU0{=Xq0b!b60nNQ3;#!pW%o9w}Id{KQ&F!Hq8Gb;4pIN$7)DO0sVW&Y-PBd}0&d zhG=RBzuo1(6xc@@Zqzg%5-)^I_d-}m&5(EP0wc!4drO4pHWHSRiabm@axgiF=oKRW zRE4v0~f4QJ6hl?d;((eVVUTIMN|lzsLIv0#Me#QCRf`s(6cOTp&UdKs&Tex86@H+aB>%HpG3$( z)8*ePXxe(0W4A!^bsO=}t}49OELi@ePnW?vT@NkV=AMY{aOGVBEdCTPyKnaJXOS!I zYT;GZd*{_w!}1SvCwY)vh}XoyXQcD#CUk8PBwsZ+lJsqTKfY{-1dN4kGZMB9$-wD- zq+laXbZ&Cm!xnxf{+%n=zE6NPBeD_BoQ7CUZ7bS-A$M1c>u}y^6V4iKh5X%)Oh7lJZ~~(LDL92F z;#U%Bki}W>S@T_qTn$gP79MJ&tL@jpFWuxy=MH!U#P!i~oSfjw=uz-Z(+;=;)_Yb! z$A0)fL&YIwG_hy~Td zXIKHRfllOY>Lcy@?vb$FkOkSFuNAr8!+fn49z;ESh!wC;*Wql&Cd3`Lx)v(=5z%@a zeB&fHh9ttaNYgVAf1QSGR}nmlYWNhjuv_bKPHzRQ*F9RI1D3`PSh3OYE%w+OCj5&G zco@@QcZBw`Zu{CEeJu~s^})ltF(00I2=Sv@#Et5)D_0<1w9ea`Tj6zV_w3v_oWTk2 zPZ1|?(%ii5G{k_4;CocV`-tq&6^Nm(b8X-@M0q+8;UUW;4m&gnKFBD~KFM&c;`{^d z)(+QZ>2`HU0(NZ*d=e4XOB!@Z79uhE&?nWfpljiy*TarpffHow+&$a|?a~q6$J6oe z++iO_vvF(!e3O(udS)8(nMLqWs-bUcajv7c&WY^o9nd||_%&MsEbo;4YM_Jd^F!I? zjqv7I@1?0C`+R@9ymmjf`i_2StF)_IK~y9k-wT9fG${yL-tY?r-s+JA7S_ zrN6&Do`y)kfp>Xtjn{Xdi~V+b_5U{e{9t>$_YN;Qz#i||hj-C?kB4{o{Qd0l1Ml$t z?eE^ZJKEL2k^P;9Q=(b$c@Mn1w|YKFw;hMb>%Mk((Lr`MJZ9u*@b44?qS<(4=tw)4 z_S4Vph%>|?>PFFp={QeW>Ut>)p_lj8$P6@bn(MDj+e-&WcIU>uJm$1sc4QUKN3KSU zZ6mD6-JTtp1p9H{mg72T(@rrK`%Hu{GaZ_fV!AExV%iZoONM1gG22YUYbjdGG~nNR zbn}uFX^DqCi$q&SLaMRunHSTIM5cScG0bselKGgGA}-mS5jJ-#B9~iW-L$*$ON!U*@S>O$wTVOACSgD4XM0CCd(U_s@}vzo7uDNV zZ%2%?3wBT}ETMSVLWypyGX+tMQ9Th)AJ!xttC9)ZD94R{<|C?61lxWs;uqa~BF-gd z!PZ$1i6_E#se!GsTNH8rv>6e|ctjU!ptV=P zw$0RcAn&vg`mYT-FA;Vp1AUc=Q_frLQpCO1!Zu`@@$Y7mYs@C2FKhAcD&%xkyt7rz aLA;&3%{rXaY{UD~6x{g#KmX6p!2ba8UdufI diff --git a/java_client/src/main/resources/logback-spring.xml b/java_client/src/main/resources/logback-spring.xml deleted file mode 100644 index 5027603..0000000 --- a/java_client/src/main/resources/logback-spring.xml +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - - - - - - - - - - ${withLineNumber_debug} - utf-8 - - - - - - - - log_error.log - - - ${LOG_PATH}/error/%d{yyyy-MM}/log_error-%d{yyyy-MM-dd}.%i.log.gz - 50MB - 100 - - - - true - - - - ${file_pattern} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - - - - - - - - - - - - - - - - - - - - ${CONSOLE_LOG_PATTERN} - utf-8 - - - - - - - - ${LOG_PATH}/log_error.log - - - ${LOG_PATH}/error/%d{yyyy-MM}/log_error-%d{yyyy-MM-dd}.%i.log.gz - 50MB - 100 - - - - true - - - - ${file_pattern} - utf-8 - - - - - error - ACCEPT - DENY - - - - - - - - ${LOG_PATH}/log_total.log - - - ${LOG_PATH}/total/%d{yyyy-MM}/log_total-%d{yyyy-MM-dd}.%i.log.gz - 50MB - 100 - - - true - - - ${file_pattern} - utf-8 - - - - - - ${LOG_PATH}/log_business.log - - - ${LOG_PATH}/business/%d{yyyy-MM}/log_business-%d{yyyy-MM-dd}.%i.log.gz - - 50MB - 100 - - - true - - - ${file_pattern} - utf-8 - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/java_client/src/main/resources/spy.properties b/java_client/src/main/resources/spy.properties deleted file mode 100644 index d64f7b1..0000000 --- a/java_client/src/main/resources/spy.properties +++ /dev/null @@ -1,10 +0,0 @@ -logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat -# 使用Slf4J记录sql -appender=com.p6spy.engine.spy.appender.Slf4JLogger -# 是否开启慢SQL记录 -outagedetection=true -# 慢SQL记录标准,单位秒 -outagedetectioninterval=2 -#日期格式 -dateformat=HH:mm:ss -customLogMessageFormat=%(executionTime)|%(category)|connection%(connectionId)|%(sqlSingleLine) \ No newline at end of file diff --git a/java_client/src/test/java/com/example/wxhk/WxhkApplicationTests.java b/java_client/src/test/java/com/example/wxhk/WxhkApplicationTests.java deleted file mode 100644 index c7a768f..0000000 --- a/java_client/src/test/java/com/example/wxhk/WxhkApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.wxhk; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class WxhkApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/java_client/src/test/java/com/example/wxhk/tcp/HttpAsyncUtilTest.java b/java_client/src/test/java/com/example/wxhk/tcp/HttpAsyncUtilTest.java deleted file mode 100644 index 23d1ba4..0000000 --- a/java_client/src/test/java/com/example/wxhk/tcp/HttpAsyncUtilTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.example.wxhk.tcp; - -import com.example.wxhk.util.HttpAsyncUtil; -import io.vertx.core.Future; -import io.vertx.core.buffer.Buffer; -import io.vertx.core.json.JsonObject; -import io.vertx.ext.web.client.HttpResponse; -import org.dromara.hutool.core.lang.Console; -import org.dromara.hutool.core.thread.ThreadUtil; -import org.dromara.hutool.log.Log; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class HttpAsyncUtilTest { - - protected static final Log log = Log.get(); - - - @Test - void exec() { - Future> exec = HttpAsyncUtil.exec(HttpAsyncUtil.Type.联系人列表, new JsonObject()); - exec.onSuccess(event -> { - Console.log(event.bodyAsJsonObject()); - }); - } - @Test - void exec1() { - - for(int i=0;i<10000;i++){ - int finalI = i; - HttpAsyncUtil.exec(HttpAsyncUtil.Type.获取登录信息, new JsonObject(), event -> { - if (event.succeeded()) { - log.info("i:{},{}", finalI,event.result().bodyAsJsonObject()); - }else{ - event.cause().printStackTrace(); - } - }); - log.info("发出请求:{}",i); - } - - ThreadUtil.sync(this); - } - @Test - void exec2() { - - } -} \ No newline at end of file diff --git a/java_client/src/test/java/com/example/wxhk/tcp/XmlTest.java b/java_client/src/test/java/com/example/wxhk/tcp/XmlTest.java deleted file mode 100644 index 78587d1..0000000 --- a/java_client/src/test/java/com/example/wxhk/tcp/XmlTest.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.example.wxhk.tcp; - -import com.example.wxhk.model.PrivateChatMsg; -import com.example.wxhk.msg.WxMsgHandle; -import io.vertx.core.json.JsonObject; -import org.dromara.hutool.core.lang.Console; -import org.dromara.hutool.core.util.XmlUtil; -import org.dromara.hutool.http.HttpUtil; -import org.junit.jupiter.api.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -public class XmlTest { - @Test - void t(){ - String con = "{\"content\":\"\",\"fromGroup\":\"fmessage\",\"fromUser\":\"fmessage\",\"isSendMsg\":0,\"msgId\":4949224622157906392,\"pid\":1860,\"sign\":\"ab8277a517ed906cf31a64843d4c61d5\",\"signature\":\"\\n\\tv1_ZLVKn3eO\\n\\t\\n\\t\\t<![CDATA[]]>\\n\\t\\n\\n\",\"time\":\"2023-05-25 10:50:39\",\"timestamp\":1684983039,\"type\":37}"; - - - JsonObject entries = new JsonObject(con); - String content = entries.getString("content"); - Document document = XmlUtil.parseXml(content); - String encryptusername = document.getDocumentElement().getAttribute("encryptusername"); - - String ticket = document.getDocumentElement().getAttribute("ticket"); - System.out.println(ticket); - - String post = HttpUtil.post("http://127.0.0.1:19088/api/?type=23", new JsonObject().put("v3", encryptusername).put("v4", ticket) - .put("type","8") - .put("permission","5") - .encode()); - System.out.println(post); - } - - - - @Test - void 接受转账(){ - String smg = "{\"content\":\"\\n\\n<![CDATA[微信转账]]>\\n\\n\\n2000\\n\\n\\n\\n\\n\\n\\n\\n1\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\",\"fromGroup\":\"wxid_gf1fogt5a0pq22\",\"fromUser\":\"wxid_gf1fogt5a0pq22\",\"isSendMsg\":0,\"msgId\":3157044781598783480,\"path\":\"wxid_4yr8erik0uho22\\\\FileStorage\\\\Cache\\\\2023-05\\\\324af3cccfe197a57506357bff7c85f7\",\"pid\":14268,\"sign\":\"e588b9632126b915e17c5a960e4ef288\",\"signature\":\"\\n\\tv1_LzLnadY1\\n\\t\\n\\t\\t<![CDATA[]]>\\n\\t\\n\\n\",\"time\":\"2023-05-29 10:00:15\",\"timestamp\":1685325615,\"type\":49}"; - JsonObject entries = new JsonObject(smg); - String content = entries.getString("content"); - Document document = XmlUtil.parseXml(content); - Element documentElement = document.getDocumentElement(); - Node transcationid = documentElement.getElementsByTagName("transcationid").item(0); - Node transferid = documentElement.getElementsByTagName("transferid").item(0); - Console.log(transcationid); - - } - - @Test - void 扫码支付(){ - String smg = "{\"content\":\"\\n \\n 9\\n \\n \\n\\t\\t\\n\\t\\t\\n \\n\\t\\t\\n\\t\\t\\n \\n\\t\\t\\n 1685325848\\n 1\\n 1\\n \\n\\n\\n\\n 0\\n 1\\n10001071012023052901214894726608\\n \\n \\n\",\"fromGroup\":\"wxid_4yr8erik0uho22\",\"fromUser\":\"wxid_4yr8erik0uho22\",\"isSendByPhone\":1,\"isSendMsg\":1,\"msgId\":3869459965780413850,\"pid\":14268,\"sign\":\"2285732a2e5b17729e7eeb8e305add15\",\"signature\":\"\\n\\t\\n\\t\\t<![CDATA[]]>\\n\\t\\n\\n\",\"time\":\"2023-05-29 10:04:08\",\"timestamp\":1685325848,\"type\":10002}"; - JsonObject entries = new JsonObject(smg); - String content = entries.getString("content"); - Document document = XmlUtil.parseXml(content); - Element documentElement = document.getDocumentElement(); - String localName = documentElement.getLocalName(); - String type = documentElement.getAttribute("type"); - NodeList outtradeno = documentElement.getElementsByTagName("outtradeno"); - if (outtradeno.getLength()>0) { - Console.log(outtradeno.item(0).getTextContent()); - } - - } - @Test - void 扫码支付2duan(){ - String smg = "{\"content\":\" \\t<![CDATA[微信支付收款0.01元(朋友到店)]]> \\t \\t \\t5 \\t1 0 \\t \\t0 \\t \\t \\t \\t\\t0 \\t\\t \\t\\t \\t\\t \\t\\t \\t\\t \\t \\t \\t \\t \\t \\t\\t \\t\\t\\t \\t\\t\\t \\t\\t\\t\\t \\t\\t\\t\\t0 \\t\\t\\t\\t0 \\t\\t\\t\\t \\t\\t\\t \\t\\t\\t\\t \\t4 \\t<![CDATA[微信支付收款0.01元(朋友到店)]]> \\t \\t \\t \\t1685325848 \\t \\t \\t \\t0 \\t \\t \\t \\t \\t \\t\\n\\n\\n\\n\\n\\t 0 0 0 \\t \\t \\t1 \\t \\t \\t967 \\t0 0 0 \\t0 \\t \\t \\t\\t0\\t \\t 0 0 0 0