From 5b937e7f8250a7894effe87b687c0714e6b3f2b1 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 25 Apr 2023 10:00:03 +0800 Subject: [PATCH 1/9] update:match xengine v8.x modify:printf self version info for parament -v --- .../ModuleAuth_Define.h | 6 +- .../ModuleAuthorize_User.cpp | 42 +++++----- .../ModuleAuthorize_User.h | 10 +-- .../XEngine_ModuleAuthorize/dllmain.cpp | 6 +- .../XEngine_ModuleAuthorize/pch.cpp | 8 +- XEngine_Source/XEngine_ModuleAuthorize/pch.h | 2 +- .../ModuleConfig_Define.h | 10 +-- .../ModuleConfigure_Json.cpp | 40 +++++----- .../ModuleConfigure_Json.h | 2 +- .../XEngine_ModuleConfigure/dllmain.cpp | 6 +- .../XEngine_ModuleConfigure/pch.cpp | 4 +- XEngine_Source/XEngine_ModuleConfigure/pch.h | 2 +- .../ModuleProtocol_Define.h | 4 +- .../ModuleProtocol_Packet.cpp | 10 +-- .../ModuleProtocol_Packet.h | 2 +- .../ModuleProtocol_Parse.cpp | 14 ++-- .../ModuleProtocol_Parse.h | 2 +- .../XEngine_ModuleProtocol/dllmain.cpp | 6 +- XEngine_Source/XEngine_ModuleProtocol/pch.cpp | 6 +- XEngine_Source/XEngine_ModuleProtocol/pch.h | 2 +- .../ModuleSession_Define.h | 10 +-- .../ModuleSession_Forward.cpp | 80 +++++++++---------- .../ModuleSession_Forward.h | 16 ++-- .../XEngine_ModuleSession/dllmain.cpp | 6 +- XEngine_Source/XEngine_ModuleSession/pch.cpp | 12 +-- XEngine_Source/XEngine_ModuleSession/pch.h | 2 +- .../XEngine_ServiceApp/XEngine_Configure.cpp | 15 ++-- .../XEngine_ServiceApp/XEngine_Configure.h | 2 +- .../XEngine_ForwardTask.cpp | 28 +++---- .../XEngine_ServiceApp/XEngine_ForwardTask.h | 4 +- .../XEngine_ServiceApp/XEngine_Hdr.h | 6 +- .../XEngine_ServiceApp/XEngine_Network.cpp | 46 +++++------ .../XEngine_ServiceApp/XEngine_Network.h | 28 +++---- .../XEngine_ServiceApp/XEngine_ServiceApp.cpp | 19 ++--- .../XEngine_ServiceApp/XEngine_SocksTask.cpp | 48 +++++------ .../XEngine_ServiceApp/XEngine_SocksTask.h | 4 +- .../XEngine_ServiceApp/XEngine_TunnelTask.cpp | 36 ++++----- .../XEngine_ServiceApp/XEngine_TunnelTask.h | 4 +- 38 files changed, 273 insertions(+), 277 deletions(-) diff --git a/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuth_Define.h b/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuth_Define.h index 026d5d0..27fc853 100644 --- a/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuth_Define.h +++ b/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuth_Define.h @@ -30,7 +30,7 @@ extern "C" DWORD ModuleAuthorize_GetLastError(int* pInt_SysError = NULL); 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL ModuleAuthorize_User_Init(LPCTSTR lpszAuthFile); +extern "C" bool ModuleAuthorize_User_Init(LPCXSTR lpszAuthFile); /************************************************************************ 函数名称:ModuleAuthorize_User_Destory 函数功能:销毁授权管理器 @@ -39,7 +39,7 @@ extern "C" BOOL ModuleAuthorize_User_Init(LPCTSTR lpszAuthFile); 意思:是否销毁成功 备注: ************************************************************************/ -extern "C" BOOL ModuleAuthorize_User_Destory(); +extern "C" bool ModuleAuthorize_User_Destory(); /******************************************************************** 函数名称:ModuleAuthorize_User_Exist 函数功能:是否验证通过 @@ -58,4 +58,4 @@ extern "C" BOOL ModuleAuthorize_User_Destory(); 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL ModuleAuthorize_User_Exist(LPCTSTR lpszUser, LPCTSTR lpszPass); \ No newline at end of file +extern "C" bool ModuleAuthorize_User_Exist(LPCXSTR lpszUser, LPCXSTR lpszPass); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuthorize_User/ModuleAuthorize_User.cpp b/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuthorize_User/ModuleAuthorize_User.cpp index 6fea7b2..a450f43 100644 --- a/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuthorize_User/ModuleAuthorize_User.cpp +++ b/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuthorize_User/ModuleAuthorize_User.cpp @@ -35,22 +35,22 @@ CModuleAuthorize_User::~CModuleAuthorize_User() 意思:是否成功 备注: *********************************************************************/ -BOOL CModuleAuthorize_User::ModuleAuthorize_User_Init(LPCTSTR lpszAuthFile) +bool CModuleAuthorize_User::ModuleAuthorize_User_Init(LPCXSTR lpszAuthFile) { - Authorize_IsErrorOccur = FALSE; + Authorize_IsErrorOccur = false; FILE* pSt_File = _tfopen(lpszAuthFile, _T("rb")); if (NULL == pSt_File) { - Authorize_IsErrorOccur = TRUE; + Authorize_IsErrorOccur = true; Authorize_dwErrorCode = ERROR_MODULE_AUTHORIZE_USER_OPENFILE; - return FALSE; + return false; } int nCount = 0; - TCHAR tszMsgBuffer[4096]; + XCHAR tszMsgBuffer[4096]; memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); - while (TRUE) + while (true) { int nRet = fread(tszMsgBuffer + nCount, 1, 1024, pSt_File); if (nRet <= 0) @@ -61,8 +61,8 @@ BOOL CModuleAuthorize_User::ModuleAuthorize_User_Init(LPCTSTR lpszAuthFile) } fclose(pSt_File); - LPCTSTR lpszLineStr = _T("\r\n"); - TCHAR* ptszTokStr = _tcstok(tszMsgBuffer, lpszLineStr); + LPCXSTR lpszLineStr = _T("\r\n"); + XCHAR* ptszTokStr = _tcstok(tszMsgBuffer, lpszLineStr); while (1) { if (NULL == ptszTokStr) @@ -77,7 +77,7 @@ BOOL CModuleAuthorize_User::ModuleAuthorize_User_Init(LPCTSTR lpszAuthFile) ptszTokStr = _tcstok(NULL, lpszLineStr); } - return TRUE; + return true; } /************************************************************************ 函数名称:ModuleAuthorize_User_Destory @@ -87,12 +87,12 @@ BOOL CModuleAuthorize_User::ModuleAuthorize_User_Init(LPCTSTR lpszAuthFile) 意思:是否销毁成功 备注: ************************************************************************/ -BOOL CModuleAuthorize_User::ModuleAuthorize_User_Destory() +bool CModuleAuthorize_User::ModuleAuthorize_User_Destory() { - Authorize_IsErrorOccur = FALSE; + Authorize_IsErrorOccur = false; stl_MapSession.clear(); - return TRUE; + return true; } /******************************************************************** 函数名称:ModuleAuthorize_User_Exist @@ -112,29 +112,29 @@ BOOL CModuleAuthorize_User::ModuleAuthorize_User_Destory() 意思:是否成功 备注: *********************************************************************/ -BOOL CModuleAuthorize_User::ModuleAuthorize_User_Exist(LPCTSTR lpszUser, LPCTSTR lpszPass) +bool CModuleAuthorize_User::ModuleAuthorize_User_Exist(LPCXSTR lpszUser, LPCXSTR lpszPass) { - Authorize_IsErrorOccur = FALSE; + Authorize_IsErrorOccur = false; unordered_map::const_iterator stl_MapIterator = stl_MapSession.find(lpszUser); if (stl_MapIterator == stl_MapSession.end()) { - Authorize_IsErrorOccur = TRUE; + Authorize_IsErrorOccur = true; Authorize_dwErrorCode = ERROR_MODULE_AUTHORIZE_USER_NOTFOUND; - return FALSE; + return false; } if (_tcslen(lpszPass) != _tcslen(stl_MapIterator->second.tszUserPass)) { - Authorize_IsErrorOccur = TRUE; + Authorize_IsErrorOccur = true; Authorize_dwErrorCode = ERROR_MODULE_AUTHORIZE_USER_PASSWORD; - return FALSE; + return false; } if (0 != _tcsncmp(lpszPass, stl_MapIterator->second.tszUserPass, _tcslen(lpszPass))) { - Authorize_IsErrorOccur = TRUE; + Authorize_IsErrorOccur = true; Authorize_dwErrorCode = ERROR_MODULE_AUTHORIZE_USER_PASSWORD; - return FALSE; + return false; } - return TRUE; + return true; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuthorize_User/ModuleAuthorize_User.h b/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuthorize_User/ModuleAuthorize_User.h index b1c455f..e81d504 100644 --- a/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuthorize_User/ModuleAuthorize_User.h +++ b/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuthorize_User/ModuleAuthorize_User.h @@ -13,8 +13,8 @@ typedef struct { - TCHAR tszUserName[64]; - TCHAR tszUserPass[64]; + XCHAR tszUserName[64]; + XCHAR tszUserPass[64]; }XENGINE_USERAUTH, * LPXENGINE_USERAUTH; class CModuleAuthorize_User @@ -23,9 +23,9 @@ public: CModuleAuthorize_User(); ~CModuleAuthorize_User(); public: - BOOL ModuleAuthorize_User_Init(LPCTSTR lpszAuthFile); - BOOL ModuleAuthorize_User_Destory(); - BOOL ModuleAuthorize_User_Exist(LPCTSTR lpszUser, LPCTSTR lpszPass); + bool ModuleAuthorize_User_Init(LPCXSTR lpszAuthFile); + bool ModuleAuthorize_User_Destory(); + bool ModuleAuthorize_User_Exist(LPCXSTR lpszUser, LPCXSTR lpszPass); private: unordered_map stl_MapSession; }; \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleAuthorize/dllmain.cpp b/XEngine_Source/XEngine_ModuleAuthorize/dllmain.cpp index daed8c8..1f76eb9 100644 --- a/XEngine_Source/XEngine_ModuleAuthorize/dllmain.cpp +++ b/XEngine_Source/XEngine_ModuleAuthorize/dllmain.cpp @@ -1,9 +1,9 @@ // dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h" -BOOL APIENTRY DllMain( HMODULE hModule, +bool APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, - LPVOID lpReserved + XPVOID lpReserved ) { switch (ul_reason_for_call) @@ -14,6 +14,6 @@ BOOL APIENTRY DllMain( HMODULE hModule, case DLL_PROCESS_DETACH: break; } - return TRUE; + return true; } diff --git a/XEngine_Source/XEngine_ModuleAuthorize/pch.cpp b/XEngine_Source/XEngine_ModuleAuthorize/pch.cpp index 08ac653..fd85109 100644 --- a/XEngine_Source/XEngine_ModuleAuthorize/pch.cpp +++ b/XEngine_Source/XEngine_ModuleAuthorize/pch.cpp @@ -11,7 +11,7 @@ // Purpose: 导出实现 // History: *********************************************************************/ -BOOL Authorize_IsErrorOccur = FALSE; +bool Authorize_IsErrorOccur = false; DWORD Authorize_dwErrorCode = 0; ////////////////////////////////////////////////////////////////////////// CModuleAuthorize_User m_User; @@ -29,15 +29,15 @@ extern "C" DWORD ModuleAuthorize_GetLastError(int* pInt_SysError) /************************************************************************/ /* 验证导出函数 */ /************************************************************************/ -extern "C" BOOL ModuleAuthorize_User_Init(LPCTSTR lpszAuthFile) +extern "C" bool ModuleAuthorize_User_Init(LPCXSTR lpszAuthFile) { return m_User.ModuleAuthorize_User_Init(lpszAuthFile); } -extern "C" BOOL ModuleAuthorize_User_Destory() +extern "C" bool ModuleAuthorize_User_Destory() { return m_User.ModuleAuthorize_User_Destory(); } -extern "C" BOOL ModuleAuthorize_User_Exist(LPCTSTR lpszUser, LPCTSTR lpszPass) +extern "C" bool ModuleAuthorize_User_Exist(LPCXSTR lpszUser, LPCXSTR lpszPass) { return m_User.ModuleAuthorize_User_Exist(lpszUser, lpszPass); } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleAuthorize/pch.h b/XEngine_Source/XEngine_ModuleAuthorize/pch.h index 6f920b9..0cf81ea 100644 --- a/XEngine_Source/XEngine_ModuleAuthorize/pch.h +++ b/XEngine_Source/XEngine_ModuleAuthorize/pch.h @@ -40,5 +40,5 @@ typedef std::string tstring; // Purpose: 公用头文件 // History: *********************************************************************/ -extern BOOL Authorize_IsErrorOccur; +extern bool Authorize_IsErrorOccur; extern DWORD Authorize_dwErrorCode; \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h index 0707ded..9a32694 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h @@ -15,8 +15,8 @@ ////////////////////////////////////////////////////////////////////////// typedef struct tag_XEngine_ServiceConfig { - TCHAR tszIPAddr[128]; //本机IP地址,根据需要配置 - BOOL bDeamon; //是否以守护进程启动,LINUX有效 + XCHAR tszIPAddr[128]; //本机IP地址,根据需要配置 + bool bDeamon; //是否以守护进程启动,LINUX有效 int nSocksPort; //Socks端口,<=0不启用 int nTunnelPort; //Tunnel服务端口 int nForwardPort; //数据转发端口 @@ -36,7 +36,7 @@ typedef struct tag_XEngine_ServiceConfig }st_XTime; //次数*时间=超时 struct { - TCHAR tszLogFile[MAX_PATH]; //日志保存路径 + XCHAR tszLogFile[MAX_PATH]; //日志保存路径 int nMaxSize; //最大日志大小 int nMaxCount; //最大日志个数 int nLogLeave; //日志等级 @@ -44,7 +44,7 @@ typedef struct tag_XEngine_ServiceConfig struct { int bAuth; //是否启用验证,大于0启用 - TCHAR tszAuthFile[MAX_PATH]; //验证地址 + XCHAR tszAuthFile[MAX_PATH]; //验证地址 }st_XAuth; struct { @@ -76,4 +76,4 @@ extern "C" DWORD ModuleConfigure_GetLastError(int* pInt_ErrorCode = NULL); 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XENGINE_SERVICECONFIG* pSt_ServerConfig); \ No newline at end of file +extern "C" bool ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XENGINE_SERVICECONFIG* pSt_ServerConfig); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index 676a8bc..ea274f7 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -40,15 +40,15 @@ CModuleConfigure_Json::~CModuleConfigure_Json() 意思:是否成功 备注: *********************************************************************/ -BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XENGINE_SERVICECONFIG* pSt_ServerConfig) +bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XENGINE_SERVICECONFIG* pSt_ServerConfig) { - Config_IsErrorOccur = FALSE; + Config_IsErrorOccur = false; if ((NULL == lpszConfigFile) || (NULL == pSt_ServerConfig)) { - Config_IsErrorOccur = TRUE; + Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_PARAMENT; - return FALSE; + return false; } Json::Value st_JsonRoot; JSONCPP_STRING st_JsonError; @@ -57,12 +57,12 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XE FILE* pSt_File = _tfopen(lpszConfigFile, _T("rb")); if (NULL == pSt_File) { - Config_IsErrorOccur = TRUE; + Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_OPENFILE; - return FALSE; + return false; } int nCount = 0; - TCHAR tszMsgBuffer[4096]; + XCHAR tszMsgBuffer[4096]; while (1) { int nRet = fread(tszMsgBuffer + nCount, 1, 2048, pSt_File); @@ -77,9 +77,9 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XE std::unique_ptr const pSt_JsonReader(st_JsonBuilder.newCharReader()); if (!pSt_JsonReader->parse(tszMsgBuffer, tszMsgBuffer + nCount, &st_JsonRoot, &st_JsonError)) { - Config_IsErrorOccur = TRUE; + Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_PARSE; - return FALSE; + return false; } _tcscpy(pSt_ServerConfig->tszIPAddr, st_JsonRoot["tszIPAddr"].asCString()); pSt_ServerConfig->bDeamon = st_JsonRoot["bDeamon"].asInt(); @@ -89,9 +89,9 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XE if (st_JsonRoot["XMax"].empty() || (4 != st_JsonRoot["XMax"].size())) { - Config_IsErrorOccur = TRUE; + Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XMAX; - return FALSE; + return false; } Json::Value st_JsonXMax = st_JsonRoot["XMax"]; pSt_ServerConfig->st_XMax.nMaxClient = st_JsonXMax["nMaxClient"].asInt(); @@ -101,9 +101,9 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XE if (st_JsonRoot["XTime"].empty() || (4 != st_JsonRoot["XTime"].size())) { - Config_IsErrorOccur = TRUE; + Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XTIME; - return FALSE; + return false; } Json::Value st_JsonXTime = st_JsonRoot["XTime"]; pSt_ServerConfig->st_XTime.nTimeCheck = st_JsonXTime["nTimeCheck"].asInt(); @@ -113,9 +113,9 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XE if (st_JsonRoot["XLog"].empty() || (4 != st_JsonRoot["XLog"].size())) { - Config_IsErrorOccur = TRUE; + Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XLOG; - return FALSE; + return false; } Json::Value st_JsonXLog = st_JsonRoot["XLog"]; pSt_ServerConfig->st_XLog.nMaxSize = st_JsonXLog["MaxSize"].asInt(); @@ -125,9 +125,9 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XE if (st_JsonRoot["XAuth"].empty() || (2 != st_JsonRoot["XAuth"].size())) { - Config_IsErrorOccur = TRUE; + Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XAUTH; - return FALSE; + return false; } Json::Value st_JsonXAuth = st_JsonRoot["XAuth"]; pSt_ServerConfig->st_XAuth.bAuth = st_JsonXAuth["bAuth"].asInt(); @@ -135,9 +135,9 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XE if (st_JsonRoot["XVer"].empty()) { - Config_IsErrorOccur = TRUE; + Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XVER; - return FALSE; + return false; } pSt_ServerConfig->st_XVer.pStl_ListVer = new list; Json::Value st_JsonXVer = st_JsonRoot["XVer"]; @@ -145,5 +145,5 @@ BOOL CModuleConfigure_Json::ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XE { pSt_ServerConfig->st_XVer.pStl_ListVer->push_back(st_JsonXVer[i].asCString()); } - return TRUE; + return true; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h index 7ff4947..e354ece 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.h @@ -17,7 +17,7 @@ public: CModuleConfigure_Json(); ~CModuleConfigure_Json(); public: - BOOL ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XENGINE_SERVICECONFIG* pSt_ServerConfig); + bool ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XENGINE_SERVICECONFIG* pSt_ServerConfig); protected: private: }; \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/dllmain.cpp b/XEngine_Source/XEngine_ModuleConfigure/dllmain.cpp index daed8c8..1f76eb9 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/dllmain.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/dllmain.cpp @@ -1,9 +1,9 @@ // dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h" -BOOL APIENTRY DllMain( HMODULE hModule, +bool APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, - LPVOID lpReserved + XPVOID lpReserved ) { switch (ul_reason_for_call) @@ -14,6 +14,6 @@ BOOL APIENTRY DllMain( HMODULE hModule, case DLL_PROCESS_DETACH: break; } - return TRUE; + return true; } diff --git a/XEngine_Source/XEngine_ModuleConfigure/pch.cpp b/XEngine_Source/XEngine_ModuleConfigure/pch.cpp index 2a4bfa5..410aa33 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/pch.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/pch.cpp @@ -11,7 +11,7 @@ // Purpose: 导出函数实现 // History: *********************************************************************/ -BOOL Config_IsErrorOccur = FALSE; +bool Config_IsErrorOccur = false; DWORD Config_dwErrorCode = 0; ////////////////////////////////////////////////////////////////////// CModuleConfigure_Json m_ConfigJson; @@ -29,7 +29,7 @@ extern "C" DWORD ModuleConfigure_GetLastError(int* pInt_ErrorCode) /************************************************************************/ /* 配置文件读取 */ /************************************************************************/ -extern "C" BOOL ModuleConfigure_Json_File(LPCTSTR lpszConfigFile, XENGINE_SERVICECONFIG * pSt_ServerConfig) +extern "C" bool ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XENGINE_SERVICECONFIG * pSt_ServerConfig) { return m_ConfigJson.ModuleConfigure_Json_File(lpszConfigFile, pSt_ServerConfig); } diff --git a/XEngine_Source/XEngine_ModuleConfigure/pch.h b/XEngine_Source/XEngine_ModuleConfigure/pch.h index 2bc4ede..b02cb5b 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/pch.h +++ b/XEngine_Source/XEngine_ModuleConfigure/pch.h @@ -35,7 +35,7 @@ using namespace std; // Purpose: 公用头文件 // History: *********************************************************************/ -extern BOOL Config_IsErrorOccur; +extern bool Config_IsErrorOccur; extern DWORD Config_dwErrorCode; #ifdef _MSC_BUILD diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Define.h b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Define.h index fcab271..fdb1f5c 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Define.h +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Define.h @@ -50,7 +50,7 @@ extern "C" DWORD ModuleProtocol_GetLastError(int* pInt_SysError = NULL); 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL ModuleProtocol_Packet_ForwardList(TCHAR* ptszMsgBuffer, int* pInt_Len, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, TCHAR*** ppptszListAddr, int nCount); +extern "C" bool ModuleProtocol_Packet_ForwardList(XCHAR* ptszMsgBuffer, int* pInt_Len, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, XCHAR*** ppptszListAddr, int nCount); /************************************************************************/ /* 解析导出函数 */ /************************************************************************/ @@ -82,4 +82,4 @@ extern "C" BOOL ModuleProtocol_Packet_ForwardList(TCHAR* ptszMsgBuffer, int* pIn 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL ModuleProtocol_Parse_ForwardBind(LPCTSTR lpszMsgBuffer, int nMsgLen, TCHAR * ptszSrcAddr, TCHAR * ptszDstAddr); \ No newline at end of file +extern "C" bool ModuleProtocol_Parse_ForwardBind(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR * ptszSrcAddr, XCHAR * ptszDstAddr); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp index cc163c6..823cca2 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.cpp @@ -55,15 +55,15 @@ CModuleProtocol_Packet::~CModuleProtocol_Packet() 意思:是否成功 备注: *********************************************************************/ -BOOL CModuleProtocol_Packet::ModuleProtocol_Packet_ForwardList(TCHAR* ptszMsgBuffer, int* pInt_Len, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, TCHAR*** ppptszListAddr, int nCount) +bool CModuleProtocol_Packet::ModuleProtocol_Packet_ForwardList(XCHAR* ptszMsgBuffer, int* pInt_Len, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, XCHAR*** ppptszListAddr, int nCount) { - Protocol_IsErrorOccur = FALSE; + Protocol_IsErrorOccur = false; if ((NULL == ptszMsgBuffer) || (NULL == pInt_Len)) { - Protocol_IsErrorOccur = TRUE; + Protocol_IsErrorOccur = true; Protocol_dwErrorCode = ERROR_MODULE_PROTOCOL_PACKET_PARAMENT; - return FALSE; + return false; } Json::Value st_JsonRoot; Json::Value st_JsonArray; @@ -80,5 +80,5 @@ BOOL CModuleProtocol_Packet::ModuleProtocol_Packet_ForwardList(TCHAR* ptszMsgBuf *pInt_Len = sizeof(XENGINE_PROTOCOLHDR) + pSt_ProtocolHdr->unPacketSize; memcpy(ptszMsgBuffer, pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR)); memcpy(ptszMsgBuffer + sizeof(XENGINE_PROTOCOLHDR), st_JsonRoot.toStyledString().c_str(), pSt_ProtocolHdr->unPacketSize); - return TRUE; + return true; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.h b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.h index 950480b..8f0d43f 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.h +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Packet/ModuleProtocol_Packet.h @@ -17,6 +17,6 @@ public: CModuleProtocol_Packet(); ~CModuleProtocol_Packet(); public: - BOOL ModuleProtocol_Packet_ForwardList(TCHAR* ptszMsgBuffer, int* pInt_Len, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, TCHAR*** ppptszListAddr, int nCount); + bool ModuleProtocol_Packet_ForwardList(XCHAR* ptszMsgBuffer, int* pInt_Len, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, XCHAR*** ppptszListAddr, int nCount); private: }; \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.cpp b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.cpp index 14d4ed4..c827a72 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.cpp +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.cpp @@ -50,15 +50,15 @@ CModuleProtocol_Parse::~CModuleProtocol_Parse() 意思:是否成功 备注: *********************************************************************/ -BOOL CModuleProtocol_Parse::ModuleProtocol_Parse_ForwardBind(LPCTSTR lpszMsgBuffer, int nMsgLen, TCHAR* ptszSrcAddr, TCHAR* ptszDstAddr) +bool CModuleProtocol_Parse::ModuleProtocol_Parse_ForwardBind(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR* ptszSrcAddr, XCHAR* ptszDstAddr) { - Protocol_IsErrorOccur = FALSE; + Protocol_IsErrorOccur = false; if (NULL == lpszMsgBuffer) { - Protocol_IsErrorOccur = TRUE; + Protocol_IsErrorOccur = true; Protocol_dwErrorCode = ERROR_MODULE_PROTOCOL_PARSE_PARAMENT; - return FALSE; + return false; } Json::Value st_JsonRoot; JSONCPP_STRING st_JsonError; @@ -67,12 +67,12 @@ BOOL CModuleProtocol_Parse::ModuleProtocol_Parse_ForwardBind(LPCTSTR lpszMsgBuff std::unique_ptr const pSt_JsonReader(st_JsonBuilder.newCharReader()); if (!pSt_JsonReader->parse(lpszMsgBuffer, lpszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) { - Protocol_IsErrorOccur = TRUE; + Protocol_IsErrorOccur = true; Protocol_dwErrorCode = ERROR_MODULE_PROTOCOL_PARSE_JSON; - return FALSE; + return false; } //_tcscpy(ptszSrcAddr, st_JsonRoot["tszSrcAddr"].asCString()); 暂时不支持 _tcscpy(ptszDstAddr, st_JsonRoot["tszDstAddr"].asCString()); - return TRUE; + return true; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.h b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.h index dd3b622..f00e686 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.h +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.h @@ -17,6 +17,6 @@ public: CModuleProtocol_Parse(); ~CModuleProtocol_Parse(); public: - BOOL ModuleProtocol_Parse_ForwardBind(LPCTSTR lpszMsgBuffer, int nMsgLen, TCHAR* ptszSrcAddr, TCHAR* ptszDstAddr); + bool ModuleProtocol_Parse_ForwardBind(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR* ptszSrcAddr, XCHAR* ptszDstAddr); private: }; \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/dllmain.cpp b/XEngine_Source/XEngine_ModuleProtocol/dllmain.cpp index daed8c8..1f76eb9 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/dllmain.cpp +++ b/XEngine_Source/XEngine_ModuleProtocol/dllmain.cpp @@ -1,9 +1,9 @@ // dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h" -BOOL APIENTRY DllMain( HMODULE hModule, +bool APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, - LPVOID lpReserved + XPVOID lpReserved ) { switch (ul_reason_for_call) @@ -14,6 +14,6 @@ BOOL APIENTRY DllMain( HMODULE hModule, case DLL_PROCESS_DETACH: break; } - return TRUE; + return true; } diff --git a/XEngine_Source/XEngine_ModuleProtocol/pch.cpp b/XEngine_Source/XEngine_ModuleProtocol/pch.cpp index 0991c41..55866ed 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/pch.cpp +++ b/XEngine_Source/XEngine_ModuleProtocol/pch.cpp @@ -12,7 +12,7 @@ // Purpose: 导出实现 // History: *********************************************************************/ -BOOL Protocol_IsErrorOccur = FALSE; +bool Protocol_IsErrorOccur = false; DWORD Protocol_dwErrorCode = 0; ////////////////////////////////////////////////////////////////////////// CModuleProtocol_Packet m_ProtocolPacket; @@ -31,14 +31,14 @@ extern "C" DWORD ModuleProtocol_GetLastError(int* pInt_SysError) /************************************************************************/ /* 封包导出函数 */ /************************************************************************/ -extern "C" BOOL ModuleProtocol_Packet_ForwardList(TCHAR * ptszMsgBuffer, int* pInt_Len, XENGINE_PROTOCOLHDR * pSt_ProtocolHdr, TCHAR * **ppptszListAddr, int nCount) +extern "C" bool ModuleProtocol_Packet_ForwardList(XCHAR * ptszMsgBuffer, int* pInt_Len, XENGINE_PROTOCOLHDR * pSt_ProtocolHdr, XCHAR * **ppptszListAddr, int nCount) { return m_ProtocolPacket.ModuleProtocol_Packet_ForwardList(ptszMsgBuffer, pInt_Len, pSt_ProtocolHdr, ppptszListAddr, nCount); } /************************************************************************/ /* 解析导出函数 */ /************************************************************************/ -extern "C" BOOL ModuleProtocol_Parse_ForwardBind(LPCTSTR lpszMsgBuffer, int nMsgLen, TCHAR * ptszSrcAddr, TCHAR * ptszDstAddr) +extern "C" bool ModuleProtocol_Parse_ForwardBind(LPCXSTR lpszMsgBuffer, int nMsgLen, XCHAR * ptszSrcAddr, XCHAR * ptszDstAddr) { return m_ProtocolParse.ModuleProtocol_Parse_ForwardBind(lpszMsgBuffer, nMsgLen, ptszSrcAddr, ptszDstAddr); } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/pch.h b/XEngine_Source/XEngine_ModuleProtocol/pch.h index bd50bec..74f9ad2 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/pch.h +++ b/XEngine_Source/XEngine_ModuleProtocol/pch.h @@ -35,7 +35,7 @@ using namespace std; // Purpose: 公用头文件 // History: *********************************************************************/ -extern BOOL Protocol_IsErrorOccur; +extern bool Protocol_IsErrorOccur; extern DWORD Protocol_dwErrorCode; #ifdef _MSC_BUILD diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h index bfc5c17..a7e7c05 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h @@ -30,7 +30,7 @@ extern "C" DWORD ModuleSession_GetLastError(int* pInt_SysError = NULL); 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL ModuleSession_Forward_Insert(LPCTSTR lpszAddr); +extern "C" bool ModuleSession_Forward_Insert(LPCXSTR lpszAddr); /******************************************************************** 函数名称:ModuleSession_Forward_List 函数功能:获取列表 @@ -54,7 +54,7 @@ extern "C" BOOL ModuleSession_Forward_Insert(LPCTSTR lpszAddr); 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL ModuleSession_Forward_List(TCHAR*** ppptszListAddr, int* pInt_Count, LPCTSTR lpszAddr = NULL); +extern "C" bool ModuleSession_Forward_List(XCHAR*** ppptszListAddr, int* pInt_Count, LPCXSTR lpszAddr = NULL); /******************************************************************** 函数名称:ModuleSession_Forward_Bind 函数功能:绑定转发需求 @@ -73,7 +73,7 @@ extern "C" BOOL ModuleSession_Forward_List(TCHAR*** ppptszListAddr, int* pInt_Co 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL ModuleSession_Forward_Bind(LPCTSTR lpszSrcAddr, LPCTSTR lpszDstAddr); +extern "C" bool ModuleSession_Forward_Bind(LPCXSTR lpszSrcAddr, LPCXSTR lpszDstAddr); /******************************************************************** 函数名称:ModuleSession_Forward_Delete 函数功能:删除用户 @@ -92,7 +92,7 @@ extern "C" BOOL ModuleSession_Forward_Bind(LPCTSTR lpszSrcAddr, LPCTSTR lpszDstA 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL ModuleSession_Forward_Delete(LPCTSTR lpszAddr, TCHAR * ptszDstAddr); +extern "C" bool ModuleSession_Forward_Delete(LPCXSTR lpszAddr, XCHAR * ptszDstAddr); /******************************************************************** 函数名称:ModuleSession_Forward_Get 函数功能:获取转发用户给 @@ -111,4 +111,4 @@ extern "C" BOOL ModuleSession_Forward_Delete(LPCTSTR lpszAddr, TCHAR * ptszDstAd 意思:是否成功 备注: *********************************************************************/ -extern "C" BOOL ModuleSession_Forward_Get(LPCTSTR lpszAddr, TCHAR* ptszDstAddr); \ No newline at end of file +extern "C" bool ModuleSession_Forward_Get(LPCXSTR lpszAddr, XCHAR* ptszDstAddr); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp index 9c35793..3688f66 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp @@ -35,15 +35,15 @@ CModuleSession_Forward::~CModuleSession_Forward() 意思:是否成功 备注: *********************************************************************/ -BOOL CModuleSession_Forward::ModuleSession_Forward_Insert(LPCTSTR lpszAddr) +bool CModuleSession_Forward::ModuleSession_Forward_Insert(LPCXSTR lpszAddr) { - Session_IsErrorOccur = FALSE; + Session_IsErrorOccur = false; if (NULL == lpszAddr) { - Session_IsErrorOccur = TRUE; + Session_IsErrorOccur = true; Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_PARAMENT; - return FALSE; + return false; } SESSION_FORWARD st_Forward; memset(&st_Forward, '\0', sizeof(SESSION_FORWARD)); @@ -54,14 +54,14 @@ BOOL CModuleSession_Forward::ModuleSession_Forward_Insert(LPCTSTR lpszAddr) unordered_map::const_iterator stl_MapIterator = stl_MapSession.find(lpszAddr); if (stl_MapIterator != stl_MapSession.end()) { - Session_IsErrorOccur = TRUE; + Session_IsErrorOccur = true; Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_EXIST; st_Locker.unlock(); - return FALSE; + return false; } stl_MapSession.insert(make_pair(lpszAddr, st_Forward)); st_Locker.unlock(); - return TRUE; + return true; } /******************************************************************** 函数名称:ModuleSession_Forward_List @@ -86,15 +86,15 @@ BOOL CModuleSession_Forward::ModuleSession_Forward_Insert(LPCTSTR lpszAddr) 意思:是否成功 备注: *********************************************************************/ -BOOL CModuleSession_Forward::ModuleSession_Forward_List(TCHAR*** ppptszListAddr, int* pInt_Count, LPCTSTR lpszAddr) +bool CModuleSession_Forward::ModuleSession_Forward_List(XCHAR*** ppptszListAddr, int* pInt_Count, LPCXSTR lpszAddr) { - Session_IsErrorOccur = FALSE; + Session_IsErrorOccur = false; if (NULL == pInt_Count) { - Session_IsErrorOccur = TRUE; + Session_IsErrorOccur = true; Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_PARAMENT; - return FALSE; + return false; } st_Locker.lock_shared(); @@ -121,7 +121,7 @@ BOOL CModuleSession_Forward::ModuleSession_Forward_List(TCHAR*** ppptszListAddr, _tcscpy((*ppptszListAddr)[i], stl_MapIterator->first.c_str()); } st_Locker.unlock_shared(); - return TRUE; + return true; } /******************************************************************** 函数名称:ModuleSession_Forward_Bind @@ -141,15 +141,15 @@ BOOL CModuleSession_Forward::ModuleSession_Forward_List(TCHAR*** ppptszListAddr, 意思:是否成功 备注: *********************************************************************/ -BOOL CModuleSession_Forward::ModuleSession_Forward_Bind(LPCTSTR lpszSrcAddr, LPCTSTR lpszDstAddr) +bool CModuleSession_Forward::ModuleSession_Forward_Bind(LPCXSTR lpszSrcAddr, LPCXSTR lpszDstAddr) { - Session_IsErrorOccur = FALSE; + Session_IsErrorOccur = false; if ((NULL == lpszSrcAddr) || (NULL == lpszDstAddr)) { - Session_IsErrorOccur = TRUE; + Session_IsErrorOccur = true; Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_PARAMENT; - return FALSE; + return false; } st_Locker.lock_shared(); //查找 @@ -157,27 +157,27 @@ BOOL CModuleSession_Forward::ModuleSession_Forward_Bind(LPCTSTR lpszSrcAddr, LPC auto stl_MapDstIterator = stl_MapSession.find(lpszDstAddr); if (stl_MapSrcIterator == stl_MapSession.end() || stl_MapDstIterator == stl_MapSession.end()) { - Session_IsErrorOccur = TRUE; + Session_IsErrorOccur = true; Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_NOTFOUND; st_Locker.unlock_shared(); - return FALSE; + return false; } //如果设置过,不允许在设置 if (stl_MapSrcIterator->second.bForward || stl_MapDstIterator->second.bForward) { - Session_IsErrorOccur = TRUE; + Session_IsErrorOccur = true; Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_BIND; st_Locker.unlock_shared(); - return FALSE; + return false; } //需要设置两方的转发内容 - stl_MapSrcIterator->second.bForward = TRUE; + stl_MapSrcIterator->second.bForward = true; _tcscpy(stl_MapSrcIterator->second.tszDstAddr, lpszDstAddr); - stl_MapDstIterator->second.bForward = TRUE; + stl_MapDstIterator->second.bForward = true; _tcscpy(stl_MapDstIterator->second.tszDstAddr, lpszSrcAddr); st_Locker.unlock_shared(); - return TRUE; + return true; } /******************************************************************** 函数名称:ModuleSession_Forward_Delete @@ -197,25 +197,25 @@ BOOL CModuleSession_Forward::ModuleSession_Forward_Bind(LPCTSTR lpszSrcAddr, LPC 意思:是否成功 备注: *********************************************************************/ -BOOL CModuleSession_Forward::ModuleSession_Forward_Delete(LPCTSTR lpszAddr, TCHAR* ptszDstAddr) +bool CModuleSession_Forward::ModuleSession_Forward_Delete(LPCXSTR lpszAddr, XCHAR* ptszDstAddr) { - Session_IsErrorOccur = FALSE; + Session_IsErrorOccur = false; if (NULL == lpszAddr) { - Session_IsErrorOccur = TRUE; + Session_IsErrorOccur = true; Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_PARAMENT; - return FALSE; + return false; } st_Locker.lock(); //查找 auto stl_MapSrcIterator = stl_MapSession.find(lpszAddr); if (stl_MapSrcIterator == stl_MapSession.end()) { - Session_IsErrorOccur = TRUE; + Session_IsErrorOccur = true; Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_NOTFOUND; st_Locker.unlock(); - return FALSE; + return false; } //如果有转发,需要清理对方的转发设置 if (stl_MapSrcIterator->second.bForward) @@ -224,13 +224,13 @@ BOOL CModuleSession_Forward::ModuleSession_Forward_Delete(LPCTSTR lpszAddr, TCHA auto stl_MapDstIterator = stl_MapSession.find(stl_MapSrcIterator->second.tszSrcAddr); if (stl_MapDstIterator == stl_MapSession.end()) { - stl_MapDstIterator->second.bForward = FALSE; + stl_MapDstIterator->second.bForward = false; memset(stl_MapDstIterator->second.tszDstAddr, '\0', sizeof(stl_MapDstIterator->second.tszDstAddr)); } } stl_MapSession.erase(stl_MapSrcIterator); st_Locker.unlock(); - return TRUE; + return true; } /******************************************************************** 函数名称:ModuleSession_Forward_Get @@ -250,35 +250,35 @@ BOOL CModuleSession_Forward::ModuleSession_Forward_Delete(LPCTSTR lpszAddr, TCHA 意思:是否成功 备注: *********************************************************************/ -BOOL CModuleSession_Forward::ModuleSession_Forward_Get(LPCTSTR lpszAddr, TCHAR* ptszDstAddr) +bool CModuleSession_Forward::ModuleSession_Forward_Get(LPCXSTR lpszAddr, XCHAR* ptszDstAddr) { - Session_IsErrorOccur = FALSE; + Session_IsErrorOccur = false; if ((NULL == lpszAddr) || (NULL == ptszDstAddr)) { - Session_IsErrorOccur = TRUE; + Session_IsErrorOccur = true; Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_PARAMENT; - return FALSE; + return false; } st_Locker.lock_shared(); //查找 auto stl_MapIterator = stl_MapSession.find(lpszAddr); if (stl_MapIterator == stl_MapSession.end()) { - Session_IsErrorOccur = TRUE; + Session_IsErrorOccur = true; Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_NOTFOUND; st_Locker.unlock_shared(); - return FALSE; + return false; } //如果有转发,需要清理对方的转发设置 if (!stl_MapIterator->second.bForward) { - Session_IsErrorOccur = TRUE; + Session_IsErrorOccur = true; Session_dwErrorCode = ERROR_MODULE_SESSION_FORWARD_NOTFORWARD; st_Locker.unlock_shared(); - return FALSE; + return false; } _tcscpy(ptszDstAddr, stl_MapIterator->second.tszDstAddr); st_Locker.unlock_shared(); - return TRUE; + return true; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.h b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.h index 5654b16..f193933 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.h +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.h @@ -12,9 +12,9 @@ *********************************************************************/ typedef struct { - TCHAR tszSrcAddr[128]; - TCHAR tszDstAddr[128]; - BOOL bForward; + XCHAR tszSrcAddr[128]; + XCHAR tszDstAddr[128]; + bool bForward; }SESSION_FORWARD, * LPSESSION_FORWARD; class CModuleSession_Forward @@ -23,11 +23,11 @@ public: CModuleSession_Forward(); ~CModuleSession_Forward(); public: - BOOL ModuleSession_Forward_Insert(LPCTSTR lpszAddr); - BOOL ModuleSession_Forward_List(TCHAR*** ppptszListAddr, int* pInt_Count, LPCTSTR lpszAddr = NULL); - BOOL ModuleSession_Forward_Bind(LPCTSTR lpszSrcAddr, LPCTSTR lpszDstAddr); - BOOL ModuleSession_Forward_Delete(LPCTSTR lpszAddr, TCHAR* ptszDstAddr); - BOOL ModuleSession_Forward_Get(LPCTSTR lpszAddr, TCHAR* ptszDstAddr); + bool ModuleSession_Forward_Insert(LPCXSTR lpszAddr); + bool ModuleSession_Forward_List(XCHAR*** ppptszListAddr, int* pInt_Count, LPCXSTR lpszAddr = NULL); + bool ModuleSession_Forward_Bind(LPCXSTR lpszSrcAddr, LPCXSTR lpszDstAddr); + bool ModuleSession_Forward_Delete(LPCXSTR lpszAddr, XCHAR* ptszDstAddr); + bool ModuleSession_Forward_Get(LPCXSTR lpszAddr, XCHAR* ptszDstAddr); private: shared_mutex st_Locker; private: diff --git a/XEngine_Source/XEngine_ModuleSession/dllmain.cpp b/XEngine_Source/XEngine_ModuleSession/dllmain.cpp index daed8c8..1f76eb9 100644 --- a/XEngine_Source/XEngine_ModuleSession/dllmain.cpp +++ b/XEngine_Source/XEngine_ModuleSession/dllmain.cpp @@ -1,9 +1,9 @@ // dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h" -BOOL APIENTRY DllMain( HMODULE hModule, +bool APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, - LPVOID lpReserved + XPVOID lpReserved ) { switch (ul_reason_for_call) @@ -14,6 +14,6 @@ BOOL APIENTRY DllMain( HMODULE hModule, case DLL_PROCESS_DETACH: break; } - return TRUE; + return true; } diff --git a/XEngine_Source/XEngine_ModuleSession/pch.cpp b/XEngine_Source/XEngine_ModuleSession/pch.cpp index 8be30dc..3a5f8bb 100644 --- a/XEngine_Source/XEngine_ModuleSession/pch.cpp +++ b/XEngine_Source/XEngine_ModuleSession/pch.cpp @@ -11,7 +11,7 @@ // Purpose: 导出实现 // History: *********************************************************************/ -BOOL Session_IsErrorOccur = FALSE; +bool Session_IsErrorOccur = false; DWORD Session_dwErrorCode = 0; ////////////////////////////////////////////////////////////////////////// CModuleSession_Forward m_Forward; @@ -29,23 +29,23 @@ extern "C" DWORD ModuleSession_GetLastError(int* pInt_SysError) /************************************************************************/ /* 转发导出函数 */ /************************************************************************/ -extern "C" BOOL ModuleSession_Forward_Insert(LPCTSTR lpszAddr) +extern "C" bool ModuleSession_Forward_Insert(LPCXSTR lpszAddr) { return m_Forward.ModuleSession_Forward_Insert(lpszAddr); } -extern "C" BOOL ModuleSession_Forward_List(TCHAR * **ppptszListAddr, int* pInt_Count, LPCTSTR lpszAddr) +extern "C" bool ModuleSession_Forward_List(XCHAR * **ppptszListAddr, int* pInt_Count, LPCXSTR lpszAddr) { return m_Forward.ModuleSession_Forward_List(ppptszListAddr, pInt_Count, lpszAddr); } -extern "C" BOOL ModuleSession_Forward_Bind(LPCTSTR lpszSrcAddr, LPCTSTR lpszDstAddr) +extern "C" bool ModuleSession_Forward_Bind(LPCXSTR lpszSrcAddr, LPCXSTR lpszDstAddr) { return m_Forward.ModuleSession_Forward_Bind(lpszSrcAddr, lpszDstAddr); } -extern "C" BOOL ModuleSession_Forward_Delete(LPCTSTR lpszAddr, TCHAR * ptszDstAddr) +extern "C" bool ModuleSession_Forward_Delete(LPCXSTR lpszAddr, XCHAR * ptszDstAddr) { return m_Forward.ModuleSession_Forward_Delete(lpszAddr, ptszDstAddr); } -extern "C" BOOL ModuleSession_Forward_Get(LPCTSTR lpszAddr, TCHAR * ptszDstAddr) +extern "C" bool ModuleSession_Forward_Get(LPCXSTR lpszAddr, XCHAR * ptszDstAddr) { return m_Forward.ModuleSession_Forward_Get(lpszAddr, ptszDstAddr); } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/pch.h b/XEngine_Source/XEngine_ModuleSession/pch.h index 9b9ffc8..000cfb0 100644 --- a/XEngine_Source/XEngine_ModuleSession/pch.h +++ b/XEngine_Source/XEngine_ModuleSession/pch.h @@ -35,7 +35,7 @@ using namespace std; // Purpose: 公用头文件 // History: *********************************************************************/ -extern BOOL Session_IsErrorOccur; +extern bool Session_IsErrorOccur; extern DWORD Session_dwErrorCode; #ifdef _UNICODE diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Configure.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_Configure.cpp index 2b3a81c..f5b59f3 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Configure.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Configure.cpp @@ -10,14 +10,14 @@ // Purpose: 配置文件读写代码 // History: *********************************************************************/ -BOOL XEngine_Configure_Parament(int argc, char** argv, XENGINE_SERVICECONFIG* pSt_Configure) +bool XEngine_Configure_Parament(int argc, char** argv, XENGINE_SERVICECONFIG* pSt_Configure) { - LPCTSTR lpszConfigFile = _T("./XEngine_Config/XEngine_Config.json"); + LPCXSTR lpszConfigFile = _T("./XEngine_Config/XEngine_Config.json"); if (!ModuleConfigure_Json_File(lpszConfigFile, pSt_Configure)) { printf("解析配置文件失败,ModuleConfigure_Json_File:%lX\n", ModuleConfigure_GetLastError()); - return FALSE; + return false; } for (int i = 0; i < argc; i++) @@ -25,7 +25,7 @@ BOOL XEngine_Configure_Parament(int argc, char** argv, XENGINE_SERVICECONFIG* pS if ((0 == _tcscmp("-h", argv[i])) || (0 == _tcscmp("-H", argv[i]))) { XEngine_Configure_Help(); - return FALSE; + return false; } else if (0 == _tcscmp("-TP", argv[i])) { @@ -41,12 +41,13 @@ BOOL XEngine_Configure_Parament(int argc, char** argv, XENGINE_SERVICECONFIG* pS } else if (0 == _tcscmp("-v", argv[i])) { - printf("XEngine版本:%s,服务版本;%s", XENGINE_VERSION_STR, st_ServiceConfig.st_XVer.pStl_ListVer->front().c_str()); - return FALSE; + string m_StrVersion = st_ServiceConfig.st_XVer.pStl_ListVer->front(); + printf("Version:%s\n", m_StrVersion.c_str()); + return false; } } - return TRUE; + return true; } void XEngine_Configure_Help() diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Configure.h b/XEngine_Source/XEngine_ServiceApp/XEngine_Configure.h index bcf8203..643682e 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Configure.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Configure.h @@ -10,5 +10,5 @@ // Purpose: 配置文件操作代码 // History: *********************************************************************/ -BOOL XEngine_Configure_Parament(int argc, char** argv, XENGINE_SERVICECONFIG* pSt_Configure); +bool XEngine_Configure_Parament(int argc, char** argv, XENGINE_SERVICECONFIG* pSt_Configure); void XEngine_Configure_Help(); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp index 25eee39..c965794 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp @@ -10,7 +10,7 @@ // Purpose: 代理转发协议 // History: *********************************************************************/ -XHTHREAD CALLBACK XEngine_Forward_Thread(LPVOID lParam) +XHTHREAD CALLBACK XEngine_Forward_Thread(XPVOID lParam) { int nPoolIndex = *(int*)lParam; int nThreadPos = nPoolIndex + 1; @@ -42,16 +42,16 @@ XHTHREAD CALLBACK XEngine_Forward_Thread(LPVOID lParam) return 0; } -BOOL XEngine_Forward_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr) +bool XEngine_Forward_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr) { int nSDLen = 10240; - TCHAR tszSDBuffer[10240]; + XCHAR tszSDBuffer[10240]; memset(tszSDBuffer, '\0', sizeof(tszSDBuffer)); //判断协议头和尾部 if ((XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER != pSt_ProtocolHdr->wHeader) || (XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL != pSt_ProtocolHdr->wTail)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Forward客户端:%s,协议错误"), lpszClientAddr); - return FALSE; + return false; } //处理验证协议 if (ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_AUTH == pSt_ProtocolHdr->unOperatorType) @@ -60,7 +60,7 @@ BOOL XEngine_Forward_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int n { pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LOGREP; ModuleSession_Forward_Insert(lpszClientAddr); - XEngine_Network_Send(lpszClientAddr, (LPCTSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); + XEngine_Network_Send(lpszClientAddr, (LPCXSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,登录到服务器"), lpszClientAddr); } } @@ -70,7 +70,7 @@ BOOL XEngine_Forward_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int n if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LISTREQ == pSt_ProtocolHdr->unOperatorCode) { int nListCount = 0; - TCHAR** pptszListAddr; + XCHAR** pptszListAddr; pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LISTREP; if (ModuleSession_Forward_List(&pptszListAddr, &nListCount, lpszClientAddr)) @@ -82,14 +82,14 @@ BOOL XEngine_Forward_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int n else { pSt_ProtocolHdr->unPacketSize = 0; - XEngine_Network_Send(lpszClientAddr, (LPCTSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); + XEngine_Network_Send(lpszClientAddr, (LPCXSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,请求可用转发列表失败,错误;%lx"), lpszClientAddr, ModuleSession_GetLastError()); } } else if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_BINDREQ == pSt_ProtocolHdr->unOperatorCode) { - TCHAR tszSrcAddr[128]; - TCHAR tszDstAddr[128]; + XCHAR tszSrcAddr[128]; + XCHAR tszDstAddr[128]; memset(tszSrcAddr, '\0', sizeof(tszSrcAddr)); memset(tszDstAddr, '\0', sizeof(tszDstAddr)); @@ -100,20 +100,20 @@ BOOL XEngine_Forward_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int n pSt_ProtocolHdr->wReserve = 401; pSt_ProtocolHdr->unPacketSize = 0; pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_BINDREP; - XEngine_Network_Send(lpszClientAddr, (LPCTSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); + XEngine_Network_Send(lpszClientAddr, (LPCXSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,请求绑定转发地址:%s 失败,错误:%lX"), lpszClientAddr, tszDstAddr); - return FALSE; + return false; } //先告知对方要转发数据 pSt_ProtocolHdr->wReserve = 0; pSt_ProtocolHdr->unPacketSize = 0; - XEngine_Network_Send(tszDstAddr, (LPCTSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); + XEngine_Network_Send(tszDstAddr, (LPCXSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); //最后返回结果 pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_BINDREP; - XEngine_Network_Send(lpszClientAddr, (LPCTSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); + XEngine_Network_Send(lpszClientAddr, (LPCXSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,请求绑定转发地址:%s 成功"), lpszClientAddr, tszDstAddr); } } - return TRUE; + return true; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.h b/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.h index 7899dbf..cd3f470 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.h @@ -11,5 +11,5 @@ // History: *********************************************************************/ //任务处理相关函数,处理包的内容 -XHTHREAD CALLBACK XEngine_Forward_Thread(LPVOID lParam); -BOOL XEngine_Forward_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr); \ No newline at end of file +XHTHREAD CALLBACK XEngine_Forward_Thread(XPVOID lParam); +bool XEngine_Forward_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h b/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h index f0c77c9..aabbc6c 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Hdr.h @@ -71,8 +71,8 @@ using namespace std; // Purpose: 公用头文件 // History: *********************************************************************/ -extern BOOL bIsRun; -extern XLOG xhLog; +extern bool bIsRun; +extern XHANDLE xhLog; //Socks服务器 extern XHANDLE xhSocksSocket; extern XHANDLE xhSocksHeart; @@ -100,7 +100,7 @@ extern XENGINE_SERVICECONFIG st_ServiceConfig; typedef struct { - TCHAR tszIPAddr[128]; + XCHAR tszIPAddr[128]; ENUM_RFCCOMPONENTS_PROXY_STATUS enStatus; XNETHANDLE xhClient; }PROXYPROTOCOL_CLIENTINFO; diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp index c41499d..78509a6 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp @@ -11,63 +11,63 @@ // History: *********************************************************************/ //////////////////////////////////////////////////////////////////////////下面是SOCKS网络IO相关代码处理函数 -BOOL CALLBACK Network_Callback_SocksLogin(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam) +bool CALLBACK Network_Callback_SocksLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { //客户端连接后要把客户端插入心跳管理器中才有效 ProxyProtocol_SocksCore_Create(lpszClientAddr); SocketOpt_HeartBeat_InsertAddrEx(xhSocksHeart, lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("SOCKS客户端:%s,连接到服务器"), lpszClientAddr); - return TRUE; + return true; } -void CALLBACK Network_Callback_SocksRecv(LPCTSTR lpszClientAddr, SOCKET hSocket, LPCTSTR lpszRecvMsg, int nMsgLen, LPVOID lParam) +void CALLBACK Network_Callback_SocksRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) { //需要激活一次 XEngine_SocksTask_Handle(lpszClientAddr, lpszRecvMsg, nMsgLen); SocketOpt_HeartBeat_ActiveAddrEx(xhSocksHeart, lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _T("SOCKS客户端:%s,投递数据包到组包队列成功,大小:%d"), lpszClientAddr, nMsgLen); } -void CALLBACK Network_Callback_SocksLeave(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam) +void CALLBACK Network_Callback_SocksLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { //交给指定函数来处理客户端离开消息 XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_SOCKS, XENGINE_CLIENT_CLOSE_NETWORK); } -void CALLBACK Network_Callback_SocksHeart(LPCSTR lpszClientAddr, SOCKET hSocket, int nStatus, LPVOID lParam) +void CALLBACK Network_Callback_SocksHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) { //同上 XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_SOCKS, XENGINE_CLIENT_CLOSE_HEARTBEAT); } //////////////////////////////////////////////////////////////////////////下面是Tunnel网络IO相关代码处理函数 -BOOL CALLBACK Network_Callback_TunnelLogin(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam) +bool CALLBACK Network_Callback_TunnelLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { ProxyProtocol_TunnelCore_Create(lpszClientAddr); SocketOpt_HeartBeat_InsertAddrEx(xhTunnelHeart, lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Tunnel客户端:%s,连接到服务器"), lpszClientAddr); - return TRUE; + return true; } -void CALLBACK Network_Callback_TunnelRecv(LPCTSTR lpszClientAddr, SOCKET hSocket, LPCTSTR lpszRecvMsg, int nMsgLen, LPVOID lParam) +void CALLBACK Network_Callback_TunnelRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) { XEngine_TunnelTask_Handle(lpszClientAddr, lpszRecvMsg, nMsgLen); SocketOpt_HeartBeat_ActiveAddrEx(xhTunnelHeart, lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _T("Tunnel客户端:%s,投递数据包到组包队列成功,大小:%d"), lpszClientAddr, nMsgLen); } -void CALLBACK Network_Callback_TunnelLeave(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam) +void CALLBACK Network_Callback_TunnelLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_TUNNEL, XENGINE_CLIENT_CLOSE_NETWORK); } -void CALLBACK Network_Callback_TunnelHeart(LPCTSTR lpszClientAddr, SOCKET hSocket, int nStatus, LPVOID lParam) +void CALLBACK Network_Callback_TunnelHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) { XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_TUNNEL, XENGINE_CLIENT_CLOSE_HEARTBEAT); } //////////////////////////////////////////////////////////////////////////下面是Tunnel网络IO相关代码处理函数 -BOOL CALLBACK Network_Callback_ForwardLogin(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam) +bool CALLBACK Network_Callback_ForwardLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { SocketOpt_HeartBeat_InsertAddrEx(xhForwardHeart, lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,连接到服务器"), lpszClientAddr); - return TRUE; + return true; } -void CALLBACK Network_Callback_ForwardRecv(LPCTSTR lpszClientAddr, SOCKET hSocket, LPCTSTR lpszRecvMsg, int nMsgLen, LPVOID lParam) +void CALLBACK Network_Callback_ForwardRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) { - TCHAR tszDstAddr[128]; + XCHAR tszDstAddr[128]; memset(tszDstAddr, '\0', sizeof(tszDstAddr)); if (ModuleSession_Forward_Get(lpszClientAddr, tszDstAddr)) @@ -86,16 +86,16 @@ void CALLBACK Network_Callback_ForwardRecv(LPCTSTR lpszClientAddr, SOCKET hSocke SocketOpt_HeartBeat_ActiveAddrEx(xhForwardHeart, lpszClientAddr); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _T("Forward客户端:%s,投递数据包到组包队列成功,大小:%d"), lpszClientAddr, nMsgLen); } -void CALLBACK Network_Callback_ForwardLeave(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam) +void CALLBACK Network_Callback_ForwardLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_FORWARD, XENGINE_CLIENT_CLOSE_NETWORK); } -void CALLBACK Network_Callback_ForwardHeart(LPCTSTR lpszClientAddr, SOCKET hSocket, int nStatus, LPVOID lParam) +void CALLBACK Network_Callback_ForwardHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam) { XEngine_Network_Close(lpszClientAddr, XENGINE_CLIENT_NETTYPE_FORWARD, XENGINE_CLIENT_CLOSE_HEARTBEAT); } //////////////////////////////////////////////////////////////////////////网络IO关闭操作 -void XEngine_Network_Close(LPCTSTR lpszClientAddr, int nIPProto, int nCloseType) +void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType) { if (XENGINE_CLIENT_NETTYPE_SOCKS == nIPProto) { @@ -177,7 +177,7 @@ void XEngine_Network_Close(LPCTSTR lpszClientAddr, int nIPProto, int nCloseType) SocketOpt_HeartBeat_DeleteAddrEx(xhForwardHeart, lpszClientAddr); NetCore_TCPXCore_CloseForClientEx(xhForwardSocket, lpszClientAddr); } - TCHAR tszClientAddr[128]; + XCHAR tszClientAddr[128]; memset(tszClientAddr, '\0', sizeof(tszClientAddr)); ModuleSession_Forward_Delete(lpszClientAddr, tszClientAddr); @@ -193,7 +193,7 @@ void XEngine_Network_Close(LPCTSTR lpszClientAddr, int nIPProto, int nCloseType) } } ////////////////////////////////////////////////////////////////////////// -BOOL XEngine_Network_Send(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen, int nIPProto) +bool XEngine_Network_Send(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, int nIPProto) { //根据客户端类型来处理发送业务逻辑 if (XENGINE_CLIENT_NETTYPE_SOCKS == nIPProto) @@ -202,7 +202,7 @@ BOOL XEngine_Network_Send(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMs if (!NetCore_TCPXCore_SendEx(xhSocksSocket, lpszClientAddr, lpszMsgBuffer, nMsgLen, 1, 1)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,发送数据失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); - return FALSE; + return false; } //发送成功激活一次心跳 SocketOpt_HeartBeat_ActiveAddrEx(xhSocksHeart, lpszClientAddr); @@ -212,7 +212,7 @@ BOOL XEngine_Network_Send(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMs if (!NetCore_TCPXCore_SendEx(xhTunnelSocket, lpszClientAddr, lpszMsgBuffer, nMsgLen, 1, 1)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Tunnel客户端:%s,发送数据失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); - return FALSE; + return false; } SocketOpt_HeartBeat_ActiveAddrEx(xhTunnelHeart, lpszClientAddr); } @@ -221,7 +221,7 @@ BOOL XEngine_Network_Send(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMs if (!NetCore_TCPXCore_SendEx(xhForwardSocket, lpszClientAddr, lpszMsgBuffer, nMsgLen, 1, 1)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Forward客户端:%s,发送数据失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); - return FALSE; + return false; } SocketOpt_HeartBeat_ActiveAddrEx(xhForwardHeart, lpszClientAddr); } @@ -229,5 +229,5 @@ BOOL XEngine_Network_Send(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMs { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("未知客户端:%s,发送数据给失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); } - return TRUE; + return true; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.h b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.h index 44baa69..654f09e 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.h @@ -11,20 +11,20 @@ // History: *********************************************************************/ //SOCKS相关 -BOOL CALLBACK Network_Callback_SocksLogin(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam); //用户连接 -void CALLBACK Network_Callback_SocksRecv(LPCTSTR lpszClientAddr, SOCKET hSocket, LPCTSTR lpszRecvMsg, int nMsgLen, LPVOID lParam); //接受到数据 -void CALLBACK Network_Callback_SocksLeave(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam); //用户离开 -void CALLBACK Network_Callback_SocksHeart(LPCSTR lpszClientAddr, SOCKET hSocket, int nStatus, LPVOID lParam); //心跳超时 +bool CALLBACK Network_Callback_SocksLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); //用户连接 +void CALLBACK Network_Callback_SocksRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); //接受到数据 +void CALLBACK Network_Callback_SocksLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); //用户离开 +void CALLBACK Network_Callback_SocksHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); //心跳超时 //Tunnel相关 -BOOL CALLBACK Network_Callback_TunnelLogin(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam); -void CALLBACK Network_Callback_TunnelRecv(LPCTSTR lpszClientAddr, SOCKET hSocket, LPCTSTR lpszRecvMsg, int nMsgLen, LPVOID lParam); -void CALLBACK Network_Callback_TunnelLeave(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam); -void CALLBACK Network_Callback_TunnelHeart(LPCTSTR lpszClientAddr, SOCKET hSocket, int nStatus, LPVOID lParam); +bool CALLBACK Network_Callback_TunnelLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +void CALLBACK Network_Callback_TunnelRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); +void CALLBACK Network_Callback_TunnelLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +void CALLBACK Network_Callback_TunnelHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); //Forward相关 -BOOL CALLBACK Network_Callback_ForwardLogin(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam); -void CALLBACK Network_Callback_ForwardRecv(LPCTSTR lpszClientAddr, SOCKET hSocket, LPCTSTR lpszRecvMsg, int nMsgLen, LPVOID lParam); -void CALLBACK Network_Callback_ForwardLeave(LPCTSTR lpszClientAddr, SOCKET hSocket, LPVOID lParam); -void CALLBACK Network_Callback_ForwardHeart(LPCTSTR lpszClientAddr, SOCKET hSocket, int nStatus, LPVOID lParam); +bool CALLBACK Network_Callback_ForwardLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +void CALLBACK Network_Callback_ForwardRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam); +void CALLBACK Network_Callback_ForwardLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam); +void CALLBACK Network_Callback_ForwardHeart(LPCXSTR lpszClientAddr, XSOCKET hSocket, int nStatus, XPVOID lParam); //关闭与发送 -void XEngine_Network_Close(LPCTSTR lpszClientAddr, int nIPProto, int nCloseType); -BOOL XEngine_Network_Send(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen, int nIPProto); \ No newline at end of file +void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType); +bool XEngine_Network_Send(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, int nIPProto); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp index 0a23ff9..25beee4 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp @@ -1,7 +1,7 @@ #include "XEngine_Hdr.h" -BOOL bIsRun = FALSE; -XLOG xhLog = NULL; +bool bIsRun = false; +XHANDLE xhLog = NULL; XHANDLE xhSocksSocket = NULL; XHANDLE xhSocksHeart = NULL; @@ -23,7 +23,7 @@ void ServiceApp_Stop(int signo) if (bIsRun) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("服务器退出...")); - bIsRun = FALSE; + bIsRun = false; //销毁Socks资源 NetCore_TCPXCore_DestroyEx(xhSocksSocket); SocketOpt_HeartBeat_DestoryEx(xhSocksHeart); @@ -84,12 +84,7 @@ int main(int argc, char** argv) WSAStartup(MAKEWORD(2, 2), &st_WSAData); #endif -#if XENGINE_VERSION_BIT < 7370001001 - printf("版本号过低,无法继续,按任意键退出!\n"); - getchar(); - return 0; -#endif - bIsRun = TRUE; + bIsRun = true; HELPCOMPONENTS_XLOG_CONFIGURE st_XLogConfig; memset(&st_XLogConfig, '\0', sizeof(HELPCOMPONENTS_XLOG_CONFIGURE)); @@ -278,9 +273,9 @@ int main(int argc, char** argv) XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("启动服务中,Forward服务没有被启用")); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("所有服务成功启动,服务运行中,XEngine版本:%s,服务版本;%s,发行次数:%d。。。"), BaseLib_OperatorVer_XGetStr(), st_ServiceConfig.st_XVer.pStl_ListVer->front().c_str(), st_ServiceConfig.st_XVer.pStl_ListVer->size()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("所有服务成功启动,服务运行中,XEngine版本:%s,服务版本;%s,发行次数:%d。。。"), BaseLib_OperatorVer_XNumberStr(), st_ServiceConfig.st_XVer.pStl_ListVer->front().c_str(), st_ServiceConfig.st_XVer.pStl_ListVer->size()); - while (TRUE) + while (true) { std::this_thread::sleep_for(std::chrono::seconds(1)); } @@ -288,7 +283,7 @@ XENGINE_SERVICEAPP_EXIT: if (bIsRun) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("有服务启动失败,服务器退出...")); - bIsRun = FALSE; + bIsRun = false; //销毁Socks资源 NetCore_TCPXCore_DestroyEx(xhSocksSocket); SocketOpt_HeartBeat_DestoryEx(xhSocksHeart); diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp index 65511db..40ecb56 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp @@ -10,17 +10,17 @@ // Purpose: Socks任务处理代码 // History: *********************************************************************/ -BOOL XEngine_SocksTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen) +bool XEngine_SocksTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen) { int nLen = 4096; - TCHAR tszMsgBuffer[4096]; + XCHAR tszMsgBuffer[4096]; memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); ENUM_RFCCOMPONENTS_PROXY_STATUS enSocksStatus; if (!ProxyProtocol_SocksCore_GetStatus(lpszClientAddr, &enSocksStatus)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,获取状态失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); - return FALSE; + return false; } //获取到的状态来处理相对应的事件 if (ENUM_RFCCOMPONENTS_PROXY_STATUS_CREATE == enSocksStatus) @@ -32,16 +32,16 @@ BOOL XEngine_SocksTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, ENUM_RFCCOMPONENTS_PROXYSOCKS_AUTH_NOAUTH); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_SOCKS); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,解析验证协议失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); - return FALSE; + return false; } - BOOL bFoundAuth = FALSE; - TCHAR tszAuthBuffer[MAX_PATH]; + bool bFoundAuth = false; + XCHAR tszAuthBuffer[MAX_PATH]; memset(tszAuthBuffer, '\0', MAX_PATH); //客户端支持的验证类型 for (int i = 0; i < nListCount; i++) { - TCHAR tszTmpBuffer[64]; + XCHAR tszTmpBuffer[64]; memset(tszTmpBuffer, '\0', sizeof(tszTmpBuffer)); _stprintf(tszTmpBuffer, _T("%d"), enListAuths[i]); @@ -50,7 +50,7 @@ BOOL XEngine_SocksTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int //服务器是否支持 if (st_ServiceConfig.st_XAuth.bAuth == enListAuths[i]) { - bFoundAuth = TRUE; + bFoundAuth = true; } } if (!bFoundAuth) @@ -58,7 +58,7 @@ BOOL XEngine_SocksTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, ENUM_RFCCOMPONENTS_PROXYSOCKS_AUTH_NOAUTH); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_SOCKS); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,解析验证协议成功,但是验证类型不支持,客户端的支持验证:%s,服务器支持的验证:%d"), lpszClientAddr, tszAuthBuffer, st_ServiceConfig.st_XAuth.bAuth); - return FALSE; + return false; } ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, st_ServiceConfig.st_XAuth.bAuth); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_SOCKS); @@ -72,8 +72,8 @@ BOOL XEngine_SocksTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int } else if (ENUM_RFCCOMPONENTS_PROXY_STATUS_AUTH == enSocksStatus) { - TCHAR tszUserName[MAX_PATH]; - TCHAR tszUserPass[MAX_PATH]; + XCHAR tszUserName[MAX_PATH]; + XCHAR tszUserPass[MAX_PATH]; ENUM_RFCCOMPONENTS_PROXYSOCKS_AUTH enProxyAuth; memset(tszUserName, '\0', MAX_PATH); @@ -84,21 +84,21 @@ BOOL XEngine_SocksTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, XENGINE_RFCCOMPONENT_PROXY_SOCKS_RESPONSE_FAILED); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_SOCKS); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,用户登录验证失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); - return FALSE; + return false; } if (enProxyAuth != st_ServiceConfig.st_XAuth.bAuth) { ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, XENGINE_RFCCOMPONENT_PROXY_SOCKS_RESPONSE_FAILED); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_SOCKS); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,用户登录验证失败,客户端发送的验证类型不支持"), lpszClientAddr); - return FALSE; + return false; } if (!ModuleAuthorize_User_Exist(tszUserName, tszUserPass)) { ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, XENGINE_RFCCOMPONENT_PROXY_SOCKS_RESPONSE_FAILED); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_SOCKS); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,用户登录验证失败,用户名:%s,或者密码:%s 不正确"), lpszClientAddr, tszUserPass, tszUserPass); - return FALSE; + return false; } ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, XENGINE_RFCCOMPONENT_PROXY_SOCKS_RESPONSE_SUCCESS); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_SOCKS); @@ -107,7 +107,7 @@ BOOL XEngine_SocksTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int else if (ENUM_RFCCOMPONENTS_PROXY_STATUS_USER == enSocksStatus) { int nPort = 0; - TCHAR tszClientAddr[1024]; + XCHAR tszClientAddr[1024]; PROXYPROTOCOL_CLIENTINFO st_ProxyClient; ENUM_RFCCOMPONENTS_PROXYSOCKS_COMMAND enCommand; ENUM_RFCCOMPONENTS_PROXYSOCKS_IPADDR enIPType; @@ -119,7 +119,7 @@ BOOL XEngine_SocksTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, XENGINE_RFCCOMPONENT_PROXY_SOCKS_RESPONSE_NETWORK); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_SOCKS); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,用户连接失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); - return FALSE; + return false; } //命令类型 if (ENUM_RFCCOMPONENTS_PROXYSOCKS_COMMAND_CONNECT == enCommand) @@ -127,10 +127,10 @@ BOOL XEngine_SocksTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int //连接类型,IP还是域名,没有IPV6环境.不好测试 if (ENUM_RFCCOMPONENTS_PROXYSOCKS_IPADDR_IPV4 == enIPType) { - if (!XClient_TCPSelect_InsertEx(xhSocksClient, tszClientAddr, nPort)) + if (!XClient_TCPSelect_InsertEx(xhSocksClient, &st_ProxyClient.xhClient, tszClientAddr, nPort)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,创建客户端连接失败,连接到服务器:%s:%d,错误:%lX"), lpszClientAddr, tszClientAddr, nPort, ProxyProtocol_GetLastError()); - return FALSE; + return false; } } else @@ -156,15 +156,15 @@ BOOL XEngine_SocksTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int if (!NetXApi_Socket_DomainToAddr(tszClientAddr, &ppszListAddr, &nListCount)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,解析域名失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); - return FALSE; + return false; } memset(tszClientAddr, '\0', sizeof(tszClientAddr)); _tcscpy(tszClientAddr, ppszListAddr[0]); //随便选择一个IP地址 BaseLib_OperatorMemory_Free((XPPPMEM)&ppszListAddr, nListCount); - if (!XClient_TCPSelect_InsertEx(xhSocksClient, tszClientAddr, nPort, &st_ProxyClient.xhClient)) + if (!XClient_TCPSelect_InsertEx(xhSocksClient, &st_ProxyClient.xhClient, tszClientAddr, nPort)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,创建客户端连接失败,连接到服务器:%s:%d,错误:%lX"), lpszClientAddr, tszClientAddr, nPort, ProxyProtocol_GetLastError()); - return FALSE; + return false; } } } @@ -184,17 +184,17 @@ BOOL XEngine_SocksTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int memset(&st_ProxyClient, '\0', sizeof(PROXYPROTOCOL_CLIENTINFO)); if (ProxyProtocol_SocksCore_GetInfo(lpszClientAddr, &st_ProxyClient)) { - XClient_TCPSelect_SendEx(xhSocksClient, st_ProxyClient.xhClient, lpszMsgBuffer, &nMsgLen); + XClient_TCPSelect_SendEx(xhSocksClient, st_ProxyClient.xhClient, lpszMsgBuffer, nMsgLen); } else { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Socks客户端:%s,转发数据失败,可能与服务器的连接已经关闭,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); } } - return TRUE; + return true; } -void CALLBACK XEngine_Socks_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, SOCKET hSocket, ENUM_NETCLIENT_TCPEVENTS enTCPClientEvents, LPCSTR lpszMsgBuffer, int nLen, LPVOID lParam) +void CALLBACK XEngine_Socks_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, XSOCKET hSocket, ENUM_NETCLIENT_TCPEVENTS enTCPClientEvents, LPCXSTR lpszMsgBuffer, int nLen, XPVOID lParam) { int nListCount = 0; PROXYPROTOCOL_CLIENTINFO** ppSt_ClientList; diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.h b/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.h index 3185490..b062e1e 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.h @@ -11,5 +11,5 @@ // History: *********************************************************************/ //任务处理相关函数,处理包的内容 -BOOL XEngine_SocksTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen); -void CALLBACK XEngine_Socks_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, SOCKET hSocket, ENUM_NETCLIENT_TCPEVENTS enTCPClientEvents, LPCSTR lpszMsgBuffer, int nLen, LPVOID lParam); \ No newline at end of file +bool XEngine_SocksTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen); +void CALLBACK XEngine_Socks_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, XSOCKET hSocket, ENUM_NETCLIENT_TCPEVENTS enTCPClientEvents, LPCXSTR lpszMsgBuffer, int nLen, XPVOID lParam); \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp index ed6e9ac..24eed87 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp @@ -10,7 +10,7 @@ // Purpose: HTTP任务处理代码 // History: *********************************************************************/ -BOOL XEngine_TunnelTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen) +bool XEngine_TunnelTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen) { PROXYPROTOCOL_CLIENTINFO st_ProxyClient; memset(&st_ProxyClient, '\0', sizeof(PROXYPROTOCOL_CLIENTINFO)); @@ -21,10 +21,10 @@ BOOL XEngine_TunnelTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in { int nLen = 0; int nIPPort = 0; - BOOL bProxy = TRUE; - TCHAR tszIPAddr[1024]; - TCHAR tszAuthInfo[MAX_PATH]; - TCHAR tszMsgBuffer[MAX_PATH]; + bool bProxy = true; + XCHAR tszIPAddr[1024]; + XCHAR tszAuthInfo[MAX_PATH]; + XCHAR tszMsgBuffer[MAX_PATH]; memset(tszIPAddr, '\0', sizeof(tszIPAddr)); memset(tszAuthInfo, '\0', MAX_PATH); @@ -34,14 +34,14 @@ BOOL XEngine_TunnelTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in ProxyProtocol_TunnelCore_Packet(tszMsgBuffer, &nLen, 400); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_TUNNEL); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Tunnel客户端:%s,解析协议失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); - return FALSE; + return false; } - TCHAR tszConnectAddr[128]; + XCHAR tszConnectAddr[128]; memset(tszConnectAddr, '\0', sizeof(tszConnectAddr)); if (st_ServiceConfig.st_XAuth.bAuth > 0) { - TCHAR tszUser[128]; - TCHAR tszPass[128]; + XCHAR tszUser[128]; + XCHAR tszPass[128]; memset(tszUser, '\0', sizeof(tszUser)); memset(tszPass, '\0', sizeof(tszPass)); @@ -50,14 +50,14 @@ BOOL XEngine_TunnelTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in ProxyProtocol_TunnelCore_Packet(tszMsgBuffer, &nLen, 401); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_TUNNEL); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Tunnel客户端:%s,失败无法继续,错误:%lX"), lpszClientAddr, OPenSsl_GetLastError()); - return FALSE; + return false; } if (!ModuleAuthorize_User_Exist(tszUser, tszPass)) { ProxyProtocol_TunnelCore_Packet(tszMsgBuffer, &nLen, 401); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_TUNNEL); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Tunnel客户端:%s,验证用户名:%s,密码:%s 失败,错误:%lX"), lpszClientAddr, tszUser, tszPass); - return FALSE; + return false; } } //是否为IP地址 @@ -90,17 +90,17 @@ BOOL XEngine_TunnelTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in ProxyProtocol_TunnelCore_Packet(tszMsgBuffer, &nLen, 500); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_TUNNEL); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Tunnel客户端:%s,解析域名:%s,失败,错误:%lX"), lpszClientAddr, tszIPAddr, ProxyProtocol_GetLastError()); - return FALSE; + return false; } _tcscpy(tszConnectAddr, ppszListAddr[0]); //随便选择一个IP地址 BaseLib_OperatorMemory_Free((XPPPMEM)&ppszListAddr, nListCount); } - if (!XClient_TCPSelect_InsertEx(xhTunnelClient, tszConnectAddr, nIPPort, &st_ProxyClient.xhClient)) + if (!XClient_TCPSelect_InsertEx(xhTunnelClient, &st_ProxyClient.xhClient, tszConnectAddr, nIPPort)) { ProxyProtocol_TunnelCore_Packet(tszMsgBuffer, &nLen, 500); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_TUNNEL); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Tunnel客户端:%s,创建客户端连接失败,连接到服务器:%s:%d,错误:%lX"), lpszClientAddr, tszConnectAddr, nIPPort, ProxyProtocol_GetLastError()); - return FALSE; + return false; } //设置属于 st_ProxyClient.enStatus = ENUM_RFCCOMPONENTS_PROXY_STATUS_FORWARD; @@ -116,19 +116,19 @@ BOOL XEngine_TunnelTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in else { //非代理协议直接发送数据,客户端->代理服务->服务器 - XClient_TCPSelect_SendEx(xhTunnelClient, st_ProxyClient.xhClient, lpszMsgBuffer, &nMsgLen); + XClient_TCPSelect_SendEx(xhTunnelClient, st_ProxyClient.xhClient, lpszMsgBuffer, nMsgLen); } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Tunnel客户端:%s,创建隧道代理服务成功,连接到服务器:%s:%d,代理模式:%s"), lpszClientAddr, tszConnectAddr, nIPPort, bProxy ? "代理" : "直连"); } else { //转发数据 - XClient_TCPSelect_SendEx(xhTunnelClient, st_ProxyClient.xhClient, lpszMsgBuffer, &nMsgLen); + XClient_TCPSelect_SendEx(xhTunnelClient, st_ProxyClient.xhClient, lpszMsgBuffer, nMsgLen); } - return TRUE; + return true; } -void CALLBACK XEngine_Tunnel_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, SOCKET hSocket, ENUM_NETCLIENT_TCPEVENTS enTCPClientEvents, LPCSTR lpszMsgBuffer, int nLen, LPVOID lParam) +void CALLBACK XEngine_Tunnel_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, XSOCKET hSocket, ENUM_NETCLIENT_TCPEVENTS enTCPClientEvents, LPCXSTR lpszMsgBuffer, int nLen, XPVOID lParam) { int nListCount = 0; PROXYPROTOCOL_CLIENTINFO** ppSt_ClientList; diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.h b/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.h index fd8b66d..6b84db1 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.h +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.h @@ -11,5 +11,5 @@ // History: *********************************************************************/ //任务处理相关函数,处理包的内容 -BOOL XEngine_TunnelTask_Handle(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, int nMsgLen); -void CALLBACK XEngine_Tunnel_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, SOCKET hSocket, ENUM_NETCLIENT_TCPEVENTS enTCPClientEvents, LPCSTR lpszMsgBuffer, int nLen, LPVOID lParam); \ No newline at end of file +bool XEngine_TunnelTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen); +void CALLBACK XEngine_Tunnel_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, XSOCKET hSocket, ENUM_NETCLIENT_TCPEVENTS enTCPClientEvents, LPCXSTR lpszMsgBuffer, int nLen, XPVOID lParam); \ No newline at end of file -- Gitee From 35fa3290b24f56eb1a13cb23b48d3b2df5967407 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 25 Apr 2023 10:02:08 +0800 Subject: [PATCH 2/9] delete:xengine version judgment update:start printf xengine ver type --- XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp index 25beee4..6fb3ce1 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp @@ -273,7 +273,7 @@ int main(int argc, char** argv) XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("启动服务中,Forward服务没有被启用")); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("所有服务成功启动,服务运行中,XEngine版本:%s,服务版本;%s,发行次数:%d。。。"), BaseLib_OperatorVer_XNumberStr(), st_ServiceConfig.st_XVer.pStl_ListVer->front().c_str(), st_ServiceConfig.st_XVer.pStl_ListVer->size()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("所有服务成功启动,服务运行中,XEngine版本:%s%s,服务版本:%s,发行次数:%d。。。"), BaseLib_OperatorVer_XNumberStr(), BaseLib_OperatorVer_XTypeStr(), st_ServiceConfig.st_XVer.pStl_ListVer->front().c_str(), st_ServiceConfig.st_XVer.pStl_ListVer->size()); while (true) { -- Gitee From da07da7c984cb0116d6372c734b109ec7ecd0eac Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 25 Apr 2023 10:13:51 +0800 Subject: [PATCH 3/9] improved:makefile --- XEngine_Source/Makefile | 25 ++----- .../XEngine_ModuleAuthorize/Makefile | 67 ++++++++++------- .../XEngine_ModuleConfigure/Makefile | 67 ++++++++++------- .../XEngine_ModuleProtocol/Makefile | 69 ++++++++++------- XEngine_Source/XEngine_ModuleSession/Makefile | 67 ++++++++++------- XEngine_Source/XEngine_ServiceApp/Makefile | 65 ++++++++++------ .../XEngine_ThirdPart/jsoncpp/Makefile | 74 +++++++++++-------- 7 files changed, 258 insertions(+), 176 deletions(-) diff --git a/XEngine_Source/Makefile b/XEngine_Source/Makefile index f828b1d..becd2de 100644 --- a/XEngine_Source/Makefile +++ b/XEngine_Source/Makefile @@ -1,7 +1,7 @@ RELEASE = 0 UNICODE = 0 -#编译的选项参数 -FLAGS = RELEASE=$(RELEASE) +PLATFORM=linux +FLAGS= #要编译的模块 THIRDPART_MODULE_JSONCPP = ./XEngine_ThirdPart/jsoncpp @@ -17,25 +17,16 @@ XENGINE_MODULES = libjsoncpp.so libXEngine_ModuleConfigure.so libXEngine_ModuleA MakeAll:$(XENGINE_MODULES) libjsoncpp.so: - make -C $(THIRDPART_MODULE_JSONCPP) $(FLAGS) + make -C $(THIRDPART_MODULE_JSONCPP) PLATFORM=$(PLATFORM) $(FLAGS) libXEngine_ModuleConfigure.so: - make -C $(MODULE_CONFIGURE_PATH) $(FLAGS) + make -C $(MODULE_CONFIGURE_PATH) PLATFORM=$(PLATFORM) $(FLAGS) libXEngine_ModuleAuthorize.so: - make -C $(MODULE_AUTHORIZE_PATH) $(FLAGS) + make -C $(MODULE_AUTHORIZE_PATH) PLATFORM=$(PLATFORM) $(FLAGS) libXEngine_ModuleProtocol.so: - make -C $(MODULE_PROTOCOL_PATH) $(FLAGS) + make -C $(MODULE_PROTOCOL_PATH) PLATFORM=$(PLATFORM) $(FLAGS) libXEngine_ModuleSession.so: - make -C $(MODULE_SESSION_PATH) $(FLAGS) + make -C $(MODULE_SESSION_PATH) PLATFORM=$(PLATFORM) $(FLAGS) XEngine_ServiceApp.exe: - make -C $(APP_SERVICE_PATH) $(FLAGS) - - -SetFlags_Install: - export FLAGS=InstallAll -InstallAll:SetFlags_Install $(NETENGINE_LIB) - -SetFlags_Clean: - export FLAGS=CleanAll -CleanAll:SetFlags_Clean $(NETENGINE_LIB) + make -C $(APP_SERVICE_PATH) PLATFORM=$(PLATFORM) $(FLAGS) diff --git a/XEngine_Source/XEngine_ModuleAuthorize/Makefile b/XEngine_Source/XEngine_ModuleAuthorize/Makefile index d1cff36..9b5ebcf 100644 --- a/XEngine_Source/XEngine_ModuleAuthorize/Makefile +++ b/XEngine_Source/XEngine_ModuleAuthorize/Makefile @@ -1,30 +1,23 @@ CC = g++ -Wall -std=c++17 -fPIC -SHAREFLAG = -shared -SHAREDLL = so +PLATFORM = linux +PLATVER = +PLATDIR = +FILEEXT = +LIBFLAG = RELEASE = 0 UNICODE = 0 -INCLUDE = -I ./ -LOADBIN = +LOADHDR = -I ./ +LOADSO = LIB = -LIBEX = -ldl -lpthread -LOADSO = -Wl,-rpath= -LIBINCLUDE = ModuleAuthorize_User.o pch.o - -ifeq ($(shell uname),Darwin) - SHAREDLL = dylib - SHAREFLAG = -dynamiclib - LOADSO = -else - SHAREDLL = so - SHAREFLAG = -shared -endif +LIBEX = +OBJECTS = ModuleAuthorize_User.o pch.o ifeq ($(RELEASE),1) -FLAGS = -c -O2 +FLAGS = -c DEBUG = else -FLAGS = -c -DEBUG = -g +FLAGS = -c -lc_p +DEBUG = -g -pg endif ifeq ($(UNICODE),1) @@ -33,24 +26,46 @@ else UNICODE = endif +ifeq ($(PLATFORM),linux) + ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) + PLATVER = -D __CENTOS__ + PLATDIR = XEngine_Linux/Centos + else + PLATVER = -D __UBUNTU__ + PLATDIR = XEngine_Linux/Ubuntu + endif + FILEEXT = so + LIBFLAG = -shared + LIBEX = -lpthread -lrt -ldl + LOADBIN = -Wl,-rpath=./,--disable-new-dtags +else ifeq ($(PLATFORM),mac) + CC += -Wno-deprecated-declarations + PLATVER = -D __MACOS__ + PLATDIR = XEngine_Mac + FILEEXT = dylib + LIBFLAG = -dynamiclib + LIBEX = -lpthread -ldl + LOADBIN = -Wl,-rpath,@loader_path/./ +endif + -all:$(LIBINCLUDE) - $(CC) $(DEBUG) $(LIBINCLUDE) -o libXEngine_ModuleAuthorize.$(SHAREDLL) $(SHAREFLAG) -fPIC $(LOADBIN) $(LIB) $(LIBEX) $(LOADSO) +all:$(OBJECTS) + $(CC) $(DEBUG) $(OBJECTS) -o libXEngine_ModuleAuthorize.$(FILEEXT) $(LIBFLAG) $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN) ModuleAuthorize_User.o:./ModuleAuthorize_User/ModuleAuthorize_User.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./ModuleAuthorize_User/ModuleAuthorize_User.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleAuthorize_User/ModuleAuthorize_User.cpp pch.o:./pch.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./pch.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./pch.cpp InstallAll:InstallSo -InstallSo:./libXEngine_ModuleAuthorize.$(SHAREDLL) - cp ./libXEngine_ModuleAuthorize.$(SHAREDLL) ../../XEngine_Release/libXEngine_ModuleAuthorize.$(SHAREDLL) +InstallSo:./libXEngine_ModuleAuthorize.$(FILEEXT) + cp ./libXEngine_ModuleAuthorize.$(FILEEXT) ../../XEngine_Release/libXEngine_ModuleAuthorize.$(FILEEXT) CleanAll:CleanObj CleanMk CleanObj: rm *.o CleanMk: - rm *.$(SHAREDLL) + rm *.$(FILEEXT) diff --git a/XEngine_Source/XEngine_ModuleConfigure/Makefile b/XEngine_Source/XEngine_ModuleConfigure/Makefile index f0ec413..ac17d52 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/Makefile +++ b/XEngine_Source/XEngine_ModuleConfigure/Makefile @@ -1,30 +1,23 @@ CC = g++ -Wall -std=c++17 -fPIC -SHAREFLAG = -shared -SHAREDLL = so +PLATFORM = linux +PLATVER = +PLATDIR = +FILEEXT = +LIBFLAG = RELEASE = 0 UNICODE = 0 -INCLUDE = -I ./ -I ../XEngine_ThirdPart/jsoncpp -LOADBIN = -L ../XEngine_ThirdPart/jsoncpp +LOADHDR = -I ./ -I ../XEngine_ThirdPart/jsoncpp +LOADSO = -L ../XEngine_ThirdPart/jsoncpp LIB = -ljsoncpp -LIBEX = -ldl -lpthread -LOADSO = -Wl,-rpath=./,--disable-new-dtags -LIBINCLUDE = ModuleConfigure_Json.o pch.o - -ifeq ($(shell uname),Darwin) - SHAREDLL = dylib - SHAREFLAG = -dynamiclib - LOADSO = -else - SHAREDLL = so - SHAREFLAG = -shared -endif +LIBEX = +OBJECTS = ModuleConfigure_Json.o pch.o ifeq ($(RELEASE),1) -FLAGS = -c -O2 +FLAGS = -c DEBUG = else -FLAGS = -c -DEBUG = -g +FLAGS = -c -lc_p +DEBUG = -g -pg endif ifeq ($(UNICODE),1) @@ -33,24 +26,46 @@ else UNICODE = endif +ifeq ($(PLATFORM),linux) + ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) + PLATVER = -D __CENTOS__ + PLATDIR = XEngine_Linux/Centos + else + PLATVER = -D __UBUNTU__ + PLATDIR = XEngine_Linux/Ubuntu + endif + FILEEXT = so + LIBFLAG = -shared + LIBEX = -lpthread -lrt -ldl + LOADBIN = -Wl,-rpath=./,--disable-new-dtags +else ifeq ($(PLATFORM),mac) + CC += -Wno-deprecated-declarations + PLATVER = -D __MACOS__ + PLATDIR = XEngine_Mac + FILEEXT = dylib + LIBFLAG = -dynamiclib + LIBEX = -lpthread -ldl + LOADBIN = -Wl,-rpath,@loader_path/./ +endif + -all:$(LIBINCLUDE) - $(CC) $(DEBUG) $(LIBINCLUDE) -o libXEngine_ModuleConfigure.$(SHAREDLL) $(SHAREFLAG) -fPIC $(LOADBIN) $(LIB) $(LIBEX) $(LOADSO) +all:$(OBJECTS) + $(CC) $(DEBUG) $(OBJECTS) -o libXEngine_ModuleConfigure.$(FILEEXT) $(LIBFLAG) $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN) ModuleConfigure_Json.o:./ModuleConfigure_Json/ModuleConfigure_Json.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./ModuleConfigure_Json/ModuleConfigure_Json.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleConfigure_Json/ModuleConfigure_Json.cpp pch.o:./pch.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./pch.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./pch.cpp InstallAll:InstallSo -InstallSo:./libXEngine_ModuleConfigure.$(SHAREDLL) - cp ./libXEngine_ModuleConfigure.$(SHAREDLL) ../../XEngine_Release/libXEngine_ModuleConfigure.$(SHAREDLL) +InstallSo:./libXEngine_ModuleConfigure.$(FILEEXT) + cp ./libXEngine_ModuleConfigure.$(FILEEXT) ../../XEngine_Release/libXEngine_ModuleConfigure.$(FILEEXT) CleanAll:CleanObj CleanMk CleanObj: rm *.o CleanMk: - rm *.$(SHAREDLL) + rm *.$(FILEEXT) diff --git a/XEngine_Source/XEngine_ModuleProtocol/Makefile b/XEngine_Source/XEngine_ModuleProtocol/Makefile index 0aa7d15..443324a 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/Makefile +++ b/XEngine_Source/XEngine_ModuleProtocol/Makefile @@ -1,30 +1,23 @@ CC = g++ -Wall -std=c++17 -fPIC -SHAREFLAG = -shared -SHAREDLL = so +PLATFORM = linux +PLATVER = +PLATDIR = +FILEEXT = +LIBFLAG = RELEASE = 0 UNICODE = 0 -INCLUDE = -I ./ -I ../XEngine_ThirdPart/jsoncpp -LOADBIN = -L ../XEngine_ThirdPart/jsoncpp +LOADHDR = -I ./ -I ../XEngine_ThirdPart/jsoncpp +LOADSO = -L ../XEngine_ThirdPart/jsoncpp LIB = -ljsoncpp -LIBEX = -ldl -lpthread -LOADSO = -Wl,-rpath=./,--disable-new-dtags -LIBINCLUDE = ModuleProtocol_Packet.o ModuleProtocol_Parse.o pch.o - -ifeq ($(shell uname),Darwin) - SHAREDLL = dylib - SHAREFLAG = -dynamiclib - LOADSO = -else - SHAREDLL = so - SHAREFLAG = -shared -endif +LIBEX = +OBJECTS = ModuleProtocol_Packet.o ModuleProtocol_Parse.o pch.o ifeq ($(RELEASE),1) -FLAGS = -c -O2 +FLAGS = -c DEBUG = else -FLAGS = -c -DEBUG = -g +FLAGS = -c -lc_p +DEBUG = -g -pg endif ifeq ($(UNICODE),1) @@ -33,26 +26,48 @@ else UNICODE = endif +ifeq ($(PLATFORM),linux) + ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) + PLATVER = -D __CENTOS__ + PLATDIR = XEngine_Linux/Centos + else + PLATVER = -D __UBUNTU__ + PLATDIR = XEngine_Linux/Ubuntu + endif + FILEEXT = so + LIBFLAG = -shared + LIBEX = -lpthread -lrt -ldl + LOADBIN = -Wl,-rpath=./,--disable-new-dtags +else ifeq ($(PLATFORM),mac) + CC += -Wno-deprecated-declarations + PLATVER = -D __MACOS__ + PLATDIR = XEngine_Mac + FILEEXT = dylib + LIBFLAG = -dynamiclib + LIBEX = -lpthread -ldl + LOADBIN = -Wl,-rpath,@loader_path/./ +endif + -all:$(LIBINCLUDE) - $(CC) $(DEBUG) $(LIBINCLUDE) -o libXEngine_ModuleProtocol.$(SHAREDLL) $(SHAREFLAG) -fPIC $(LOADBIN) $(LIB) $(LIBEX) $(LOADSO) +all:$(OBJECTS) + $(CC) $(DEBUG) $(OBJECTS) -o libXEngine_ModuleProtocol.$(FILEEXT) $(LIBFLAG) $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN) ModuleProtocol_Packet.o:./ModuleProtocol_Packet/ModuleProtocol_Packet.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./ModuleProtocol_Packet/ModuleProtocol_Packet.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleProtocol_Packet/ModuleProtocol_Packet.cpp ModuleProtocol_Parse.o:./ModuleProtocol_Parse/ModuleProtocol_Parse.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./ModuleProtocol_Parse/ModuleProtocol_Parse.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleProtocol_Parse/ModuleProtocol_Parse.cpp pch.o:./pch.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./pch.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./pch.cpp InstallAll:InstallSo -InstallSo:./libXEngine_ModuleProtocol.$(SHAREDLL) - cp ./libXEngine_ModuleProtocol.$(SHAREDLL) ../../XEngine_Release/libXEngine_ModuleProtocol.$(SHAREDLL) +InstallSo:./libXEngine_ModuleProtocol.$(FILEEXT) + cp ./libXEngine_ModuleProtocol.$(FILEEXT) ../../XEngine_Release/libXEngine_ModuleProtocol.$(FILEEXT) CleanAll:CleanObj CleanMk CleanObj: rm *.o CleanMk: - rm *.$(SHAREDLL) + rm *.$(FILEEXT) diff --git a/XEngine_Source/XEngine_ModuleSession/Makefile b/XEngine_Source/XEngine_ModuleSession/Makefile index 04d11cf..a7fbed3 100644 --- a/XEngine_Source/XEngine_ModuleSession/Makefile +++ b/XEngine_Source/XEngine_ModuleSession/Makefile @@ -1,30 +1,23 @@ CC = g++ -Wall -std=c++17 -fPIC -SHAREFLAG = -shared -SHAREDLL = so +PLATFORM = linux +PLATVER = +PLATDIR = +FILEEXT = +LIBFLAG = RELEASE = 0 UNICODE = 0 -INCLUDE = -I ./ -LOADBIN = -L /usr/local/lib/XEngine_Release/XEngine_BaseLib +LOADHDR = -I ./ -I ../XEngine_ThirdPart/jsoncpp +LOADSO = -L /usr/local/lib/XEngine_Release/XEngine_BaseLib LIB = -lXEngine_BaseLib -LIBEX = -ldl -lpthread -LOADSO = -Wl,-rpath=./,--disable-new-dtags -LIBINCLUDE = ModuleSession_Forward.o pch.o - -ifeq ($(shell uname),Darwin) - SHAREDLL = dylib - SHAREFLAG = -dynamiclib - LOADSO = -else - SHAREDLL = so - SHAREFLAG = -shared -endif +LIBEX = +OBJECTS = ModuleSession_Forward.o pch.o ifeq ($(RELEASE),1) -FLAGS = -c -O2 +FLAGS = -c DEBUG = else -FLAGS = -c -DEBUG = -g +FLAGS = -c -lc_p +DEBUG = -g -pg endif ifeq ($(UNICODE),1) @@ -33,24 +26,46 @@ else UNICODE = endif +ifeq ($(PLATFORM),linux) + ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) + PLATVER = -D __CENTOS__ + PLATDIR = XEngine_Linux/Centos + else + PLATVER = -D __UBUNTU__ + PLATDIR = XEngine_Linux/Ubuntu + endif + FILEEXT = so + LIBFLAG = -shared + LIBEX = -lpthread -lrt -ldl + LOADBIN = -Wl,-rpath=./,--disable-new-dtags +else ifeq ($(PLATFORM),mac) + CC += -Wno-deprecated-declarations + PLATVER = -D __MACOS__ + PLATDIR = XEngine_Mac + FILEEXT = dylib + LIBFLAG = -dynamiclib + LIBEX = -lpthread -ldl + LOADBIN = -Wl,-rpath,@loader_path/./ +endif + -all:$(LIBINCLUDE) - $(CC) $(DEBUG) $(LIBINCLUDE) -o libXEngine_ModuleSession.$(SHAREDLL) $(SHAREFLAG) -fPIC $(LOADBIN) $(LIB) $(LIBEX) $(LOADSO) +all:$(OBJECTS) + $(CC) $(DEBUG) $(OBJECTS) -o libXEngine_ModuleSession.$(FILEEXT) $(LIBFLAG) $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN) ModuleSession_Forward.o:./ModuleSession_Forward/ModuleSession_Forward.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./ModuleSession_Forward/ModuleSession_Forward.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleSession_Forward/ModuleSession_Forward.cpp pch.o:./pch.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) ./pch.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./pch.cpp InstallAll:InstallSo -InstallSo:./libXEngine_ModuleSession.$(SHAREDLL) - cp ./libXEngine_ModuleSession.$(SHAREDLL) ../../XEngine_Release/libXEngine_ModuleSession.$(SHAREDLL) +InstallSo:./libXEngine_ModuleSession.$(FILEEXT) + cp ./libXEngine_ModuleSession.$(FILEEXT) ../../XEngine_Release/libXEngine_ModuleSession.$(FILEEXT) CleanAll:CleanObj CleanMk CleanObj: rm *.o CleanMk: - rm *.$(SHAREDLL) + rm *.$(FILEEXT) diff --git a/XEngine_Source/XEngine_ServiceApp/Makefile b/XEngine_Source/XEngine_ServiceApp/Makefile index 29052d2..49490ec 100644 --- a/XEngine_Source/XEngine_ServiceApp/Makefile +++ b/XEngine_Source/XEngine_ServiceApp/Makefile @@ -1,26 +1,25 @@ CC = g++ -Wall -std=c++17 +PLATFORM = linux +PLATVER = +PLATDIR = RELEASE = 0 -UNICODE = 0 -LOADBIN = -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L /usr/local/lib/XEngine_Release/XEngine_Core -L /usr/local/lib/XEngine_Release/XEngine_HelpComponents -L /usr/local/lib/XEngine_Release/XEngine_RfcComponents -L /usr/local/lib/XEngine_Release/XEngine_Client -L /usr/local/lib/XEngine_Release/XEngine_NetHelp \ - -L ../XEngine_ThirdPart/jsoncpp \ - -L ../XEngine_ModuleConfigure -L ../XEngine_ModuleAuthorize -L ../XEngine_ModuleSession -L ../XEngine_ModuleProtocol +UNICODE = 0 +LOADHDR = -I ./ -I ../XEngine_ThirdPart/jsoncpp +LOADSO = -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L /usr/local/lib/XEngine_Release/XEngine_Core -L /usr/local/lib/XEngine_Release/XEngine_HelpComponents -L /usr/local/lib/XEngine_Release/XEngine_RfcComponents -L /usr/local/lib/XEngine_Release/XEngine_Client -L /usr/local/lib/XEngine_Release/XEngine_NetHelp \ + -L ../XEngine_ModuleConfigure -L ../XEngine_ModuleAuthorize -L ../XEngine_ModuleSession -L ../XEngine_ModuleProtocol \ + -L ../XEngine_ThirdPart/jsoncpp LIB = -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_OPenSsl -lXEngine_ManagePool -lXEngine_NetXApi -lHelpComponents_XLog -lHelpComponents_Packets -lRfcComponents_ProxyProtocol -lXClient_Socket -lNetHelp_APIHelp \ - -ljsoncpp \ - -lXEngine_ModuleConfigure -lXEngine_ModuleAuthorize -lXEngine_ModuleSession -lXEngine_ModuleProtocol -LIBEX = -ldl -lpthread -LOADSO = -Wl,-rpath=./,--disable-new-dtags -LIBINCLUDE = XEngine_Configure.o XEngine_Network.o XEngine_SocksTask.o XEngine_TunnelTask.o XEngine_ForwardTask.o XEngine_ServiceApp.o - -ifeq ($(shell uname),Darwin) - LOADSO = -endif + -lXEngine_ModuleConfigure -lXEngine_ModuleAuthorize -lXEngine_ModuleSession -lXEngine_ModuleProtocol \ + -ljsoncpp +LIBEX = +OBJECTS = XEngine_Configure.o XEngine_Network.o XEngine_SocksTask.o XEngine_TunnelTask.o XEngine_ForwardTask.o XEngine_ServiceApp.o ifeq ($(RELEASE),1) -FLAGS = -c -O2 +FLAGS = -c DEBUG = else -FLAGS = -c -DEBUG = -g +FLAGS = -c -lc_p +DEBUG = -g -pg endif ifeq ($(UNICODE),1) @@ -29,22 +28,40 @@ else UNICODE = endif -all:$(LIBINCLUDE) - $(CC) $(DEBUG) $(LIBINCLUDE) -o XEngine_ProxyServiceApp $(LOADBIN) $(LIB) $(LIBEX) $(LOADSO) +ifeq ($(PLATFORM),linux) + ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) + PLATVER = -D __CENTOS__ + PLATDIR = XEngine_Linux/Centos + else + PLATVER = -D __UBUNTU__ + PLATDIR = XEngine_Linux/Ubuntu + endif + LIBEX = -lpthread -lrt -ldl + LOADBIN = -Wl,-rpath=./,--disable-new-dtags +else ifeq ($(PLATFORM),mac) + CC += -Wno-deprecated-declarations + PLATVER = -D __MACOS__ + PLATDIR = XEngine_Mac + LIBEX = -lpthread -ldl + LOADBIN = -Wl,-rpath,@loader_path/./ +endif + +all:$(OBJECTS) + $(CC) $(DEBUG) $(OBJECTS) -o XEngine_ProxyServiceApp $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN) XEngine_Configure.o:./XEngine_Configure.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./XEngine_Configure.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_Configure.cpp XEngine_Network.o:./XEngine_Network.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./XEngine_Network.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_Network.cpp XEngine_SocksTask.o:./XEngine_SocksTask.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./XEngine_SocksTask.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_SocksTask.cpp XEngine_TunnelTask.o:./XEngine_TunnelTask.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./XEngine_TunnelTask.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_TunnelTask.cpp XEngine_ForwardTask.o:./XEngine_ForwardTask.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./XEngine_ForwardTask.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_ForwardTask.cpp XEngine_ServiceApp.o:./XEngine_ServiceApp.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) ./XEngine_ServiceApp.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./XEngine_ServiceApp.cpp InstallAll:InstallApp diff --git a/XEngine_Source/XEngine_ThirdPart/jsoncpp/Makefile b/XEngine_Source/XEngine_ThirdPart/jsoncpp/Makefile index 9302ec2..39af933 100644 --- a/XEngine_Source/XEngine_ThirdPart/jsoncpp/Makefile +++ b/XEngine_Source/XEngine_ThirdPart/jsoncpp/Makefile @@ -1,52 +1,66 @@ CC = g++ -Wall -std=c++17 -fPIC -SHAREFLAG = -shared -SHAREDLL = so +PLATFORM = linux +PLATVER = +PLATDIR = +FILEEXT = +LIBFLAG = RELEASE = 0 UNICODE = 0 -INCLUDE = -I ./ -FILECENTOS = /etc/redhat-release -LOADBIN = +LOADHDR = -I ./ +LOADSO = -L LIB = -LIBEX = -ldl -lpthread -LOADSO = -Wl,-rpath= -LIBINCLUDE = json_reader.o json_value.o json_writer.o - -ifeq ($(shell uname),Darwin) - SHAREDLL = dylib - SHAREFLAG = -dynamiclib - LOADSO = -else - SHAREDLL = so - SHAREFLAG = -shared -endif +LIBEX = +OBJECTS = json_reader.o json_value.o json_writer.o ifeq ($(RELEASE),1) -FLAGS = -c -O2 -DEBUG = +FLAGS = -c +DEBUG = else -FLAGS = -c -DEBUG = -g +FLAGS = -c -lc_p +DEBUG = -g -pg endif ifeq ($(UNICODE),1) UNICODE = -D _UNICODE else -UNICODE = +UNICODE = +endif + +ifeq ($(PLATFORM),linux) + ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) + PLATVER = -D __CENTOS__ + PLATDIR = XEngine_Linux/Centos + else + PLATVER = -D __UBUNTU__ + PLATDIR = XEngine_Linux/Ubuntu + endif + FILEEXT = so + LIBFLAG = -shared + LIBEX = -lpthread -lrt -ldl + LOADBIN = -Wl,-rpath=./,--disable-new-dtags +else ifeq ($(PLATFORM),mac) + CC += -Wno-deprecated-declarations + PLATVER = -D __MACOS__ + PLATDIR = XEngine_Mac + FILEEXT = dylib + LIBFLAG = -dynamiclib + LIBEX = -lpthread -ldl + LOADBIN = -Wl,-rpath,@loader_path/./ endif -all:$(LIBINCLUDE) - $(CC) $(DEBUG) $(LIBINCLUDE) -o libjsoncpp.$(SHAREDLL) $(SHAREFLAG) -fPIC $(LOADBIN) $(LIB) $(LIBEX) $(LOADSO) +all:$(OBJECTS) + $(CC) $(DEBUG) $(OBJECTS) -o libjsoncpp.$(FILEEXT) $(LIBFLAG) $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN) json_reader.o:json_reader.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) json_reader.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) json_reader.cpp json_value.o:json_value.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) json_value.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) json_value.cpp json_writer.o:json_writer.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(INCLUDE) json_writer.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) json_writer.cpp InstallAll:InstallSo -InstallSo:./libjsoncpp.$(SHAREDLL) - cp ./libjsoncpp.$(SHAREDLL) ../../../XEngine_Release/libjsoncpp.$(SHAREDLL) +InstallSo:./libjsoncpp.$(FILEEXT) + cp ./libjsoncpp.$(FILEEXT) ../../../XEngine_Release/libjsoncpp.$(FILEEXT) @@ -54,4 +68,4 @@ CleanAll:CleanObj CleanMk CleanObj: rm *.o CleanMk: - rm *.$(SHAREDLL) + rm *.$(FILEEXT) -- Gitee From 6038c163a0b74176ca8c480ff978fd66b1c593fd Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 25 Apr 2023 10:17:19 +0800 Subject: [PATCH 4/9] fixed:linux build --- .../ModuleAuth_Define.h | 2 +- .../ModuleAuthorize_User.cpp | 14 ++-- .../XEngine_ModuleAuthorize/dllmain.cpp | 2 +- .../XEngine_ModuleAuthorize/pch.cpp | 4 +- XEngine_Source/XEngine_ModuleAuthorize/pch.h | 2 +- .../ModuleConfig_Define.h | 2 +- .../ModuleConfigure_Json.cpp | 8 +- .../XEngine_ModuleConfigure/dllmain.cpp | 2 +- .../XEngine_ModuleConfigure/pch.cpp | 4 +- XEngine_Source/XEngine_ModuleConfigure/pch.h | 2 +- .../ModuleProtocol_Define.h | 2 +- .../ModuleProtocol_Parse.cpp | 4 +- .../XEngine_ModuleProtocol/dllmain.cpp | 2 +- XEngine_Source/XEngine_ModuleProtocol/pch.cpp | 4 +- XEngine_Source/XEngine_ModuleProtocol/pch.h | 2 +- .../ModuleSession_Define.h | 2 +- .../ModuleSession_Forward.cpp | 14 ++-- .../XEngine_ModuleSession/dllmain.cpp | 2 +- XEngine_Source/XEngine_ModuleSession/pch.cpp | 4 +- XEngine_Source/XEngine_ModuleSession/pch.h | 2 +- .../XEngine_ServiceApp/XEngine_Configure.cpp | 32 ++++---- .../XEngine_ForwardTask.cpp | 14 ++-- .../XEngine_ServiceApp/XEngine_Network.cpp | 36 ++++----- .../XEngine_ServiceApp/XEngine_ServiceApp.cpp | 74 +++++++++---------- .../XEngine_ServiceApp/XEngine_SocksTask.cpp | 48 ++++++------ .../XEngine_ServiceApp/XEngine_TunnelTask.cpp | 28 +++---- 26 files changed, 156 insertions(+), 156 deletions(-) diff --git a/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuth_Define.h b/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuth_Define.h index 27fc853..58d4c31 100644 --- a/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuth_Define.h +++ b/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuth_Define.h @@ -13,7 +13,7 @@ ////////////////////////////////////////////////////////////////////////// // 导出函数 ////////////////////////////////////////////////////////////////////////// -extern "C" DWORD ModuleAuthorize_GetLastError(int* pInt_SysError = NULL); +extern "C" XLONG ModuleAuthorize_GetLastError(int* pInt_SysError = NULL); /************************************************************************/ /* 验证导出函数 */ /************************************************************************/ diff --git a/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuthorize_User/ModuleAuthorize_User.cpp b/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuthorize_User/ModuleAuthorize_User.cpp index a450f43..8f6dca1 100644 --- a/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuthorize_User/ModuleAuthorize_User.cpp +++ b/XEngine_Source/XEngine_ModuleAuthorize/ModuleAuthorize_User/ModuleAuthorize_User.cpp @@ -39,7 +39,7 @@ bool CModuleAuthorize_User::ModuleAuthorize_User_Init(LPCXSTR lpszAuthFile) { Authorize_IsErrorOccur = false; - FILE* pSt_File = _tfopen(lpszAuthFile, _T("rb")); + FILE* pSt_File = _xtfopen(lpszAuthFile, _X("rb")); if (NULL == pSt_File) { Authorize_IsErrorOccur = true; @@ -61,8 +61,8 @@ bool CModuleAuthorize_User::ModuleAuthorize_User_Init(LPCXSTR lpszAuthFile) } fclose(pSt_File); - LPCXSTR lpszLineStr = _T("\r\n"); - XCHAR* ptszTokStr = _tcstok(tszMsgBuffer, lpszLineStr); + LPCXSTR lpszLineStr = _X("\r\n"); + XCHAR* ptszTokStr = _tcsxtok(tszMsgBuffer, lpszLineStr); while (1) { if (NULL == ptszTokStr) @@ -72,10 +72,10 @@ bool CModuleAuthorize_User::ModuleAuthorize_User_Init(LPCXSTR lpszAuthFile) XENGINE_USERAUTH st_UserInfo; memset(&st_UserInfo, '\0', sizeof(XENGINE_USERAUTH)); - _stscanf(ptszTokStr, _T("%s %s"), st_UserInfo.tszUserName, st_UserInfo.tszUserPass); + _stxscanf(ptszTokStr, _X("%s %s"), st_UserInfo.tszUserName, st_UserInfo.tszUserPass); stl_MapSession.insert(make_pair(st_UserInfo.tszUserName, st_UserInfo)); - ptszTokStr = _tcstok(NULL, lpszLineStr); + ptszTokStr = _tcsxtok(NULL, lpszLineStr); } return true; } @@ -124,13 +124,13 @@ bool CModuleAuthorize_User::ModuleAuthorize_User_Exist(LPCXSTR lpszUser, LPCXSTR return false; } - if (_tcslen(lpszPass) != _tcslen(stl_MapIterator->second.tszUserPass)) + if (_tcsxlen(lpszPass) != _tcsxlen(stl_MapIterator->second.tszUserPass)) { Authorize_IsErrorOccur = true; Authorize_dwErrorCode = ERROR_MODULE_AUTHORIZE_USER_PASSWORD; return false; } - if (0 != _tcsncmp(lpszPass, stl_MapIterator->second.tszUserPass, _tcslen(lpszPass))) + if (0 != _tcsxncmp(lpszPass, stl_MapIterator->second.tszUserPass, _tcsxlen(lpszPass))) { Authorize_IsErrorOccur = true; Authorize_dwErrorCode = ERROR_MODULE_AUTHORIZE_USER_PASSWORD; diff --git a/XEngine_Source/XEngine_ModuleAuthorize/dllmain.cpp b/XEngine_Source/XEngine_ModuleAuthorize/dllmain.cpp index 1f76eb9..594ff21 100644 --- a/XEngine_Source/XEngine_ModuleAuthorize/dllmain.cpp +++ b/XEngine_Source/XEngine_ModuleAuthorize/dllmain.cpp @@ -2,7 +2,7 @@ #include "pch.h" bool APIENTRY DllMain( HMODULE hModule, - DWORD ul_reason_for_call, + XLONG ul_reason_for_call, XPVOID lpReserved ) { diff --git a/XEngine_Source/XEngine_ModuleAuthorize/pch.cpp b/XEngine_Source/XEngine_ModuleAuthorize/pch.cpp index fd85109..32bdad8 100644 --- a/XEngine_Source/XEngine_ModuleAuthorize/pch.cpp +++ b/XEngine_Source/XEngine_ModuleAuthorize/pch.cpp @@ -12,13 +12,13 @@ // History: *********************************************************************/ bool Authorize_IsErrorOccur = false; -DWORD Authorize_dwErrorCode = 0; +XLONG Authorize_dwErrorCode = 0; ////////////////////////////////////////////////////////////////////////// CModuleAuthorize_User m_User; ////////////////////////////////////////////////////////////////////////// // 导出函数 ////////////////////////////////////////////////////////////////////////// -extern "C" DWORD ModuleAuthorize_GetLastError(int* pInt_SysError) +extern "C" XLONG ModuleAuthorize_GetLastError(int* pInt_SysError) { if (NULL != pInt_SysError) { diff --git a/XEngine_Source/XEngine_ModuleAuthorize/pch.h b/XEngine_Source/XEngine_ModuleAuthorize/pch.h index 0cf81ea..34a07d8 100644 --- a/XEngine_Source/XEngine_ModuleAuthorize/pch.h +++ b/XEngine_Source/XEngine_ModuleAuthorize/pch.h @@ -41,4 +41,4 @@ typedef std::string tstring; // History: *********************************************************************/ extern bool Authorize_IsErrorOccur; -extern DWORD Authorize_dwErrorCode; \ No newline at end of file +extern XLONG Authorize_dwErrorCode; \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h index 9a32694..d535a6b 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h @@ -54,7 +54,7 @@ typedef struct tag_XEngine_ServiceConfig ////////////////////////////////////////////////////////////////////////// // 导出函数定义 ////////////////////////////////////////////////////////////////////////// -extern "C" DWORD ModuleConfigure_GetLastError(int* pInt_ErrorCode = NULL); +extern "C" XLONG ModuleConfigure_GetLastError(int* pInt_ErrorCode = NULL); /************************************************************************/ /* 文件配置读取 */ /************************************************************************/ diff --git a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index ea274f7..b6ad44e 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -54,7 +54,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE JSONCPP_STRING st_JsonError; Json::CharReaderBuilder st_JsonBuilder; //读取配置文件所有内容到缓冲区 - FILE* pSt_File = _tfopen(lpszConfigFile, _T("rb")); + FILE* pSt_File = _xtfopen(lpszConfigFile, _X("rb")); if (NULL == pSt_File) { Config_IsErrorOccur = true; @@ -81,7 +81,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_PARSE; return false; } - _tcscpy(pSt_ServerConfig->tszIPAddr, st_JsonRoot["tszIPAddr"].asCString()); + _tcsxcpy(pSt_ServerConfig->tszIPAddr, st_JsonRoot["tszIPAddr"].asCString()); pSt_ServerConfig->bDeamon = st_JsonRoot["bDeamon"].asInt(); pSt_ServerConfig->nSocksPort = st_JsonRoot["nSocksPort"].asInt(); pSt_ServerConfig->nTunnelPort = st_JsonRoot["nTunnelPort"].asInt(); @@ -121,7 +121,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE pSt_ServerConfig->st_XLog.nMaxSize = st_JsonXLog["MaxSize"].asInt(); pSt_ServerConfig->st_XLog.nMaxCount = st_JsonXLog["MaxCount"].asInt(); pSt_ServerConfig->st_XLog.nLogLeave = st_JsonXLog["LogLeave"].asInt(); - _tcscpy(pSt_ServerConfig->st_XLog.tszLogFile, st_JsonXLog["tszLogFile"].asCString()); + _tcsxcpy(pSt_ServerConfig->st_XLog.tszLogFile, st_JsonXLog["tszLogFile"].asCString()); if (st_JsonRoot["XAuth"].empty() || (2 != st_JsonRoot["XAuth"].size())) { @@ -131,7 +131,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE } Json::Value st_JsonXAuth = st_JsonRoot["XAuth"]; pSt_ServerConfig->st_XAuth.bAuth = st_JsonXAuth["bAuth"].asInt(); - _tcscpy(pSt_ServerConfig->st_XAuth.tszAuthFile, st_JsonXAuth["tszAuthFile"].asCString()); + _tcsxcpy(pSt_ServerConfig->st_XAuth.tszAuthFile, st_JsonXAuth["tszAuthFile"].asCString()); if (st_JsonRoot["XVer"].empty()) { diff --git a/XEngine_Source/XEngine_ModuleConfigure/dllmain.cpp b/XEngine_Source/XEngine_ModuleConfigure/dllmain.cpp index 1f76eb9..594ff21 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/dllmain.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/dllmain.cpp @@ -2,7 +2,7 @@ #include "pch.h" bool APIENTRY DllMain( HMODULE hModule, - DWORD ul_reason_for_call, + XLONG ul_reason_for_call, XPVOID lpReserved ) { diff --git a/XEngine_Source/XEngine_ModuleConfigure/pch.cpp b/XEngine_Source/XEngine_ModuleConfigure/pch.cpp index 410aa33..51fb55f 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/pch.cpp +++ b/XEngine_Source/XEngine_ModuleConfigure/pch.cpp @@ -12,13 +12,13 @@ // History: *********************************************************************/ bool Config_IsErrorOccur = false; -DWORD Config_dwErrorCode = 0; +XLONG Config_dwErrorCode = 0; ////////////////////////////////////////////////////////////////////// CModuleConfigure_Json m_ConfigJson; ////////////////////////////////////////////////////////////////////// // 导出函数定义 ////////////////////////////////////////////////////////////////////// -extern "C" DWORD ModuleConfigure_GetLastError(int* pInt_ErrorCode) +extern "C" XLONG ModuleConfigure_GetLastError(int* pInt_ErrorCode) { if (pInt_ErrorCode != NULL) { diff --git a/XEngine_Source/XEngine_ModuleConfigure/pch.h b/XEngine_Source/XEngine_ModuleConfigure/pch.h index b02cb5b..81e37dd 100644 --- a/XEngine_Source/XEngine_ModuleConfigure/pch.h +++ b/XEngine_Source/XEngine_ModuleConfigure/pch.h @@ -36,7 +36,7 @@ using namespace std; // History: *********************************************************************/ extern bool Config_IsErrorOccur; -extern DWORD Config_dwErrorCode; +extern XLONG Config_dwErrorCode; #ifdef _MSC_BUILD #ifdef _DEBUG diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Define.h b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Define.h index fdb1f5c..4726aec 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Define.h +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Define.h @@ -13,7 +13,7 @@ ////////////////////////////////////////////////////////////////////////// // 导出函数 ////////////////////////////////////////////////////////////////////////// -extern "C" DWORD ModuleProtocol_GetLastError(int* pInt_SysError = NULL); +extern "C" XLONG ModuleProtocol_GetLastError(int* pInt_SysError = NULL); /************************************************************************/ /* 封包导出函数 */ /************************************************************************/ diff --git a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.cpp b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.cpp index c827a72..9807302 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.cpp +++ b/XEngine_Source/XEngine_ModuleProtocol/ModuleProtocol_Parse/ModuleProtocol_Parse.cpp @@ -71,8 +71,8 @@ bool CModuleProtocol_Parse::ModuleProtocol_Parse_ForwardBind(LPCXSTR lpszMsgBuff Protocol_dwErrorCode = ERROR_MODULE_PROTOCOL_PARSE_JSON; return false; } - //_tcscpy(ptszSrcAddr, st_JsonRoot["tszSrcAddr"].asCString()); 暂时不支持 - _tcscpy(ptszDstAddr, st_JsonRoot["tszDstAddr"].asCString()); + //_tcsxcpy(ptszSrcAddr, st_JsonRoot["tszSrcAddr"].asCString()); 暂时不支持 + _tcsxcpy(ptszDstAddr, st_JsonRoot["tszDstAddr"].asCString()); return true; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleProtocol/dllmain.cpp b/XEngine_Source/XEngine_ModuleProtocol/dllmain.cpp index 1f76eb9..594ff21 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/dllmain.cpp +++ b/XEngine_Source/XEngine_ModuleProtocol/dllmain.cpp @@ -2,7 +2,7 @@ #include "pch.h" bool APIENTRY DllMain( HMODULE hModule, - DWORD ul_reason_for_call, + XLONG ul_reason_for_call, XPVOID lpReserved ) { diff --git a/XEngine_Source/XEngine_ModuleProtocol/pch.cpp b/XEngine_Source/XEngine_ModuleProtocol/pch.cpp index 55866ed..3b7e0e7 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/pch.cpp +++ b/XEngine_Source/XEngine_ModuleProtocol/pch.cpp @@ -13,14 +13,14 @@ // History: *********************************************************************/ bool Protocol_IsErrorOccur = false; -DWORD Protocol_dwErrorCode = 0; +XLONG Protocol_dwErrorCode = 0; ////////////////////////////////////////////////////////////////////////// CModuleProtocol_Packet m_ProtocolPacket; CModuleProtocol_Parse m_ProtocolParse; ////////////////////////////////////////////////////////////////////////// // 导出函数 ////////////////////////////////////////////////////////////////////////// -extern "C" DWORD ModuleProtocol_GetLastError(int* pInt_SysError) +extern "C" XLONG ModuleProtocol_GetLastError(int* pInt_SysError) { if (NULL != pInt_SysError) { diff --git a/XEngine_Source/XEngine_ModuleProtocol/pch.h b/XEngine_Source/XEngine_ModuleProtocol/pch.h index 74f9ad2..38e32f9 100644 --- a/XEngine_Source/XEngine_ModuleProtocol/pch.h +++ b/XEngine_Source/XEngine_ModuleProtocol/pch.h @@ -36,7 +36,7 @@ using namespace std; // History: *********************************************************************/ extern bool Protocol_IsErrorOccur; -extern DWORD Protocol_dwErrorCode; +extern XLONG Protocol_dwErrorCode; #ifdef _MSC_BUILD #ifdef _DEBUG diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h index a7e7c05..6180c96 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h @@ -13,7 +13,7 @@ ////////////////////////////////////////////////////////////////////////// // 导出函数 ////////////////////////////////////////////////////////////////////////// -extern "C" DWORD ModuleSession_GetLastError(int* pInt_SysError = NULL); +extern "C" XLONG ModuleSession_GetLastError(int* pInt_SysError = NULL); /************************************************************************/ /* 转发导出函数 */ /************************************************************************/ diff --git a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp index 3688f66..2f7d507 100644 --- a/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp +++ b/XEngine_Source/XEngine_ModuleSession/ModuleSession_Forward/ModuleSession_Forward.cpp @@ -48,7 +48,7 @@ bool CModuleSession_Forward::ModuleSession_Forward_Insert(LPCXSTR lpszAddr) SESSION_FORWARD st_Forward; memset(&st_Forward, '\0', sizeof(SESSION_FORWARD)); - _tcscpy(st_Forward.tszSrcAddr, lpszAddr); + _tcsxcpy(st_Forward.tszSrcAddr, lpszAddr); st_Locker.lock(); unordered_map::const_iterator stl_MapIterator = stl_MapSession.find(lpszAddr); @@ -113,12 +113,12 @@ bool CModuleSession_Forward::ModuleSession_Forward_List(XCHAR*** ppptszListAddr, { if (NULL != lpszAddr) { - if (0 == _tcsncmp(lpszAddr, stl_MapIterator->first.c_str(), _tcslen(lpszAddr))) + if (0 == _tcsxncmp(lpszAddr, stl_MapIterator->first.c_str(), _tcsxlen(lpszAddr))) { continue; } } - _tcscpy((*ppptszListAddr)[i], stl_MapIterator->first.c_str()); + _tcsxcpy((*ppptszListAddr)[i], stl_MapIterator->first.c_str()); } st_Locker.unlock_shared(); return true; @@ -172,10 +172,10 @@ bool CModuleSession_Forward::ModuleSession_Forward_Bind(LPCXSTR lpszSrcAddr, LPC } //需要设置两方的转发内容 stl_MapSrcIterator->second.bForward = true; - _tcscpy(stl_MapSrcIterator->second.tszDstAddr, lpszDstAddr); + _tcsxcpy(stl_MapSrcIterator->second.tszDstAddr, lpszDstAddr); stl_MapDstIterator->second.bForward = true; - _tcscpy(stl_MapDstIterator->second.tszDstAddr, lpszSrcAddr); + _tcsxcpy(stl_MapDstIterator->second.tszDstAddr, lpszSrcAddr); st_Locker.unlock_shared(); return true; } @@ -220,7 +220,7 @@ bool CModuleSession_Forward::ModuleSession_Forward_Delete(LPCXSTR lpszAddr, XCHA //如果有转发,需要清理对方的转发设置 if (stl_MapSrcIterator->second.bForward) { - _tcscpy(ptszDstAddr, stl_MapSrcIterator->second.tszDstAddr); + _tcsxcpy(ptszDstAddr, stl_MapSrcIterator->second.tszDstAddr); auto stl_MapDstIterator = stl_MapSession.find(stl_MapSrcIterator->second.tszSrcAddr); if (stl_MapDstIterator == stl_MapSession.end()) { @@ -278,7 +278,7 @@ bool CModuleSession_Forward::ModuleSession_Forward_Get(LPCXSTR lpszAddr, XCHAR* st_Locker.unlock_shared(); return false; } - _tcscpy(ptszDstAddr, stl_MapIterator->second.tszDstAddr); + _tcsxcpy(ptszDstAddr, stl_MapIterator->second.tszDstAddr); st_Locker.unlock_shared(); return true; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ModuleSession/dllmain.cpp b/XEngine_Source/XEngine_ModuleSession/dllmain.cpp index 1f76eb9..594ff21 100644 --- a/XEngine_Source/XEngine_ModuleSession/dllmain.cpp +++ b/XEngine_Source/XEngine_ModuleSession/dllmain.cpp @@ -2,7 +2,7 @@ #include "pch.h" bool APIENTRY DllMain( HMODULE hModule, - DWORD ul_reason_for_call, + XLONG ul_reason_for_call, XPVOID lpReserved ) { diff --git a/XEngine_Source/XEngine_ModuleSession/pch.cpp b/XEngine_Source/XEngine_ModuleSession/pch.cpp index 3a5f8bb..e6741b2 100644 --- a/XEngine_Source/XEngine_ModuleSession/pch.cpp +++ b/XEngine_Source/XEngine_ModuleSession/pch.cpp @@ -12,13 +12,13 @@ // History: *********************************************************************/ bool Session_IsErrorOccur = false; -DWORD Session_dwErrorCode = 0; +XLONG Session_dwErrorCode = 0; ////////////////////////////////////////////////////////////////////////// CModuleSession_Forward m_Forward; ////////////////////////////////////////////////////////////////////////// // 导出函数 ////////////////////////////////////////////////////////////////////////// -extern "C" DWORD ModuleSession_GetLastError(int* pInt_SysError) +extern "C" XLONG ModuleSession_GetLastError(int* pInt_SysError) { if (NULL != pInt_SysError) { diff --git a/XEngine_Source/XEngine_ModuleSession/pch.h b/XEngine_Source/XEngine_ModuleSession/pch.h index 000cfb0..bf917ba 100644 --- a/XEngine_Source/XEngine_ModuleSession/pch.h +++ b/XEngine_Source/XEngine_ModuleSession/pch.h @@ -36,7 +36,7 @@ using namespace std; // History: *********************************************************************/ extern bool Session_IsErrorOccur; -extern DWORD Session_dwErrorCode; +extern XLONG Session_dwErrorCode; #ifdef _UNICODE typedef std::wstring tstring; diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Configure.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_Configure.cpp index f5b59f3..d230c5a 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Configure.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Configure.cpp @@ -12,7 +12,7 @@ *********************************************************************/ bool XEngine_Configure_Parament(int argc, char** argv, XENGINE_SERVICECONFIG* pSt_Configure) { - LPCXSTR lpszConfigFile = _T("./XEngine_Config/XEngine_Config.json"); + LPCXSTR lpszConfigFile = _X("./XEngine_Config/XEngine_Config.json"); if (!ModuleConfigure_Json_File(lpszConfigFile, pSt_Configure)) { @@ -22,24 +22,24 @@ bool XEngine_Configure_Parament(int argc, char** argv, XENGINE_SERVICECONFIG* pS for (int i = 0; i < argc; i++) { - if ((0 == _tcscmp("-h", argv[i])) || (0 == _tcscmp("-H", argv[i]))) + if ((0 == _tcsxcmp("-h", argv[i])) || (0 == _tcsxcmp("-H", argv[i]))) { XEngine_Configure_Help(); return false; } - else if (0 == _tcscmp("-TP", argv[i])) + else if (0 == _tcsxcmp("-TP", argv[i])) { - pSt_Configure->nSocksPort = _ttoi(argv[i + 1]); + pSt_Configure->nSocksPort = _ttxoi(argv[i + 1]); } - else if (0 == _tcscmp("-HP", argv[i])) + else if (0 == _tcsxcmp("-HP", argv[i])) { - pSt_Configure->nTunnelPort = _ttoi(argv[i + 1]); + pSt_Configure->nTunnelPort = _ttxoi(argv[i + 1]); } - else if (0 == _tcscmp("-d", argv[i])) + else if (0 == _tcsxcmp("-d", argv[i])) { - pSt_Configure->bDeamon = _ttoi(argv[i + 1]); + pSt_Configure->bDeamon = _ttxoi(argv[i + 1]); } - else if (0 == _tcscmp("-v", argv[i])) + else if (0 == _tcsxcmp("-v", argv[i])) { string m_StrVersion = st_ServiceConfig.st_XVer.pStl_ListVer->front(); printf("Version:%s\n", m_StrVersion.c_str()); @@ -52,11 +52,11 @@ bool XEngine_Configure_Parament(int argc, char** argv, XENGINE_SERVICECONFIG* pS void XEngine_Configure_Help() { - printf(_T("--------------------------启动参数帮助开始--------------------------\n")); - printf(_T("网络消息队列服务启动参数:程序 参数 参数值,参数是区分大小写的。如果不指定将会加载默认的ini配置文件里面的参数\n")); - printf(_T("-h or -H:启动参数帮助提示信息\n")); - printf(_T("-TP:设置消息队列TCP服务端口号\n")); - printf(_T("-HP:设置消息队列HTTP服务端口号\n")); - printf(_T("-d:1 启用守护进程,2不启用\n")); - printf(_T("--------------------------启动参数帮助结束--------------------------\n")); + printf(_X("--------------------------启动参数帮助开始--------------------------\n")); + printf(_X("网络消息队列服务启动参数:程序 参数 参数值,参数是区分大小写的。如果不指定将会加载默认的ini配置文件里面的参数\n")); + printf(_X("-h or -H:启动参数帮助提示信息\n")); + printf(_X("-TP:设置消息队列TCP服务端口号\n")); + printf(_X("-HP:设置消息队列HTTP服务端口号\n")); + printf(_X("-d:1 启用守护进程,2不启用\n")); + printf(_X("--------------------------启动参数帮助结束--------------------------\n")); } diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp index c965794..debf044 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ForwardTask.cpp @@ -27,7 +27,7 @@ XHTHREAD CALLBACK XEngine_Forward_Thread(XPVOID lParam) for (int i = 0; i < nListCount; i++) { int nMsgLen = 0; - CHAR* ptszMsgBuffer = NULL; + XCHAR* ptszMsgBuffer = NULL; XENGINE_PROTOCOLHDR st_ProtocolHdr; memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR)); @@ -50,7 +50,7 @@ bool XEngine_Forward_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n //判断协议头和尾部 if ((XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER != pSt_ProtocolHdr->wHeader) || (XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL != pSt_ProtocolHdr->wTail)) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Forward客户端:%s,协议错误"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Forward客户端:%s,协议错误"), lpszClientAddr); return false; } //处理验证协议 @@ -61,7 +61,7 @@ bool XEngine_Forward_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LOGREP; ModuleSession_Forward_Insert(lpszClientAddr); XEngine_Network_Send(lpszClientAddr, (LPCXSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,登录到服务器"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Forward客户端:%s,登录到服务器"), lpszClientAddr); } } //处理转发协议 @@ -77,13 +77,13 @@ bool XEngine_Forward_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n { ModuleProtocol_Packet_ForwardList(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, &pptszListAddr, nListCount); XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_CLIENT_NETTYPE_FORWARD); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,请求可用转发列表成功"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Forward客户端:%s,请求可用转发列表成功"), lpszClientAddr); } else { pSt_ProtocolHdr->unPacketSize = 0; XEngine_Network_Send(lpszClientAddr, (LPCXSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,请求可用转发列表失败,错误;%lx"), lpszClientAddr, ModuleSession_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Forward客户端:%s,请求可用转发列表失败,错误;%lx"), lpszClientAddr, ModuleSession_GetLastError()); } } else if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_BINDREQ == pSt_ProtocolHdr->unOperatorCode) @@ -101,7 +101,7 @@ bool XEngine_Forward_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n pSt_ProtocolHdr->unPacketSize = 0; pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_BINDREP; XEngine_Network_Send(lpszClientAddr, (LPCXSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,请求绑定转发地址:%s 失败,错误:%lX"), lpszClientAddr, tszDstAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Forward客户端:%s,请求绑定转发地址:%s 失败,错误:%lX"), lpszClientAddr, tszDstAddr); return false; } //先告知对方要转发数据 @@ -111,7 +111,7 @@ bool XEngine_Forward_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n //最后返回结果 pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_BINDREP; XEngine_Network_Send(lpszClientAddr, (LPCXSTR)pSt_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR), XENGINE_CLIENT_NETTYPE_FORWARD); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,请求绑定转发地址:%s 成功"), lpszClientAddr, tszDstAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Forward客户端:%s,请求绑定转发地址:%s 成功"), lpszClientAddr, tszDstAddr); } } diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp index 78509a6..5b7a801 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_Network.cpp @@ -16,7 +16,7 @@ bool CALLBACK Network_Callback_SocksLogin(LPCXSTR lpszClientAddr, XSOCKET hSocke //客户端连接后要把客户端插入心跳管理器中才有效 ProxyProtocol_SocksCore_Create(lpszClientAddr); SocketOpt_HeartBeat_InsertAddrEx(xhSocksHeart, lpszClientAddr); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("SOCKS客户端:%s,连接到服务器"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("SOCKS客户端:%s,连接到服务器"), lpszClientAddr); return true; } void CALLBACK Network_Callback_SocksRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) @@ -24,7 +24,7 @@ void CALLBACK Network_Callback_SocksRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket //需要激活一次 XEngine_SocksTask_Handle(lpszClientAddr, lpszRecvMsg, nMsgLen); SocketOpt_HeartBeat_ActiveAddrEx(xhSocksHeart, lpszClientAddr); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _T("SOCKS客户端:%s,投递数据包到组包队列成功,大小:%d"), lpszClientAddr, nMsgLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("SOCKS客户端:%s,投递数据包到组包队列成功,大小:%d"), lpszClientAddr, nMsgLen); } void CALLBACK Network_Callback_SocksLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { @@ -41,14 +41,14 @@ bool CALLBACK Network_Callback_TunnelLogin(LPCXSTR lpszClientAddr, XSOCKET hSock { ProxyProtocol_TunnelCore_Create(lpszClientAddr); SocketOpt_HeartBeat_InsertAddrEx(xhTunnelHeart, lpszClientAddr); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Tunnel客户端:%s,连接到服务器"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Tunnel客户端:%s,连接到服务器"), lpszClientAddr); return true; } void CALLBACK Network_Callback_TunnelRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) { XEngine_TunnelTask_Handle(lpszClientAddr, lpszRecvMsg, nMsgLen); SocketOpt_HeartBeat_ActiveAddrEx(xhTunnelHeart, lpszClientAddr); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _T("Tunnel客户端:%s,投递数据包到组包队列成功,大小:%d"), lpszClientAddr, nMsgLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("Tunnel客户端:%s,投递数据包到组包队列成功,大小:%d"), lpszClientAddr, nMsgLen); } void CALLBACK Network_Callback_TunnelLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { @@ -62,7 +62,7 @@ void CALLBACK Network_Callback_TunnelHeart(LPCXSTR lpszClientAddr, XSOCKET hSock bool CALLBACK Network_Callback_ForwardLogin(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { SocketOpt_HeartBeat_InsertAddrEx(xhForwardHeart, lpszClientAddr); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,连接到服务器"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Forward客户端:%s,连接到服务器"), lpszClientAddr); return true; } void CALLBACK Network_Callback_ForwardRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam) @@ -80,11 +80,11 @@ void CALLBACK Network_Callback_ForwardRecv(LPCXSTR lpszClientAddr, XSOCKET hSock //没有绑定转发,投递到包中处理 if (!HelpComponents_Datas_PostEx(xhForwardPacket, lpszClientAddr, lpszRecvMsg, nMsgLen)) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Forward客户端:%s,投递数据包失败,大小:%d,错误:%lX"), lpszClientAddr, nMsgLen, Packets_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Forward客户端:%s,投递数据包失败,大小:%d,错误:%lX"), lpszClientAddr, nMsgLen, Packets_GetLastError()); } } SocketOpt_HeartBeat_ActiveAddrEx(xhForwardHeart, lpszClientAddr); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _T("Forward客户端:%s,投递数据包到组包队列成功,大小:%d"), lpszClientAddr, nMsgLen); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("Forward客户端:%s,投递数据包到组包队列成功,大小:%d"), lpszClientAddr, nMsgLen); } void CALLBACK Network_Callback_ForwardLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket, XPVOID lParam) { @@ -121,7 +121,7 @@ void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType) ProxyProtocol_SocksCore_GetList((XPPPMEM)&ppSt_ClientList, &nListCount, sizeof(PROXYPROTOCOL_CLIENTINFO)); for (int i = 0; i < nListCount; i++) { - if (0 == _tcsnicmp(lpszClientAddr, ppSt_ClientList[i]->tszIPAddr, _tcslen(lpszClientAddr))) + if (0 == _tcsxnicmp(lpszClientAddr, ppSt_ClientList[i]->tszIPAddr, _tcsxlen(lpszClientAddr))) { XClient_TCPSelect_DeleteEx(xhSocksClient, ppSt_ClientList[i]->xhClient); break; @@ -129,7 +129,7 @@ void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType) } BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ClientList, nListCount); ProxyProtocol_SocksCore_Delete(lpszClientAddr); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("SOCKS客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("SOCKS客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType); } else if (XENGINE_CLIENT_NETTYPE_TUNNEL == nIPProto) { @@ -152,7 +152,7 @@ void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType) ProxyProtocol_TunnelCore_GetList((XPPPMEM)&ppSt_ClientList, &nListCount, sizeof(PROXYPROTOCOL_CLIENTINFO)); for (int i = 0; i < nListCount; i++) { - if (0 == _tcsnicmp(lpszClientAddr, ppSt_ClientList[i]->tszIPAddr, _tcslen(lpszClientAddr))) + if (0 == _tcsxnicmp(lpszClientAddr, ppSt_ClientList[i]->tszIPAddr, _tcsxlen(lpszClientAddr))) { XClient_TCPSelect_DeleteEx(xhTunnelClient, ppSt_ClientList[i]->xhClient); break; @@ -160,7 +160,7 @@ void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType) } BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ClientList, nListCount); ProxyProtocol_TunnelCore_Delete(lpszClientAddr); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Tunnel客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Tunnel客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType); } else if (XENGINE_CLIENT_NETTYPE_FORWARD == nIPProto) { @@ -181,15 +181,15 @@ void XEngine_Network_Close(LPCXSTR lpszClientAddr, int nIPProto, int nCloseType) memset(tszClientAddr, '\0', sizeof(tszClientAddr)); ModuleSession_Forward_Delete(lpszClientAddr, tszClientAddr); - if (_tcslen(tszClientAddr) > 0) + if (_tcsxlen(tszClientAddr) > 0) { XEngine_Network_Close(tszClientAddr, XENGINE_CLIENT_NETTYPE_FORWARD, XENGINE_CLIENT_CLOSE_SERVICE); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Forward客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Forward客户端:%s,离开服务器,离开类型;%d"), lpszClientAddr, nCloseType); } else { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("未知客户端:%s,离开服务器"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("未知客户端:%s,离开服务器"), lpszClientAddr); } } ////////////////////////////////////////////////////////////////////////// @@ -201,7 +201,7 @@ bool XEngine_Network_Send(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMs //发送数据给指定客户端 if (!NetCore_TCPXCore_SendEx(xhSocksSocket, lpszClientAddr, lpszMsgBuffer, nMsgLen, 1, 1)) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,发送数据失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("SOCKS客户端:%s,发送数据失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); return false; } //发送成功激活一次心跳 @@ -211,7 +211,7 @@ bool XEngine_Network_Send(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMs { if (!NetCore_TCPXCore_SendEx(xhTunnelSocket, lpszClientAddr, lpszMsgBuffer, nMsgLen, 1, 1)) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Tunnel客户端:%s,发送数据失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Tunnel客户端:%s,发送数据失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); return false; } SocketOpt_HeartBeat_ActiveAddrEx(xhTunnelHeart, lpszClientAddr); @@ -220,14 +220,14 @@ bool XEngine_Network_Send(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMs { if (!NetCore_TCPXCore_SendEx(xhForwardSocket, lpszClientAddr, lpszMsgBuffer, nMsgLen, 1, 1)) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Forward客户端:%s,发送数据失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Forward客户端:%s,发送数据失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); return false; } SocketOpt_HeartBeat_ActiveAddrEx(xhForwardHeart, lpszClientAddr); } else { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("未知客户端:%s,发送数据给失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("未知客户端:%s,发送数据给失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError()); } return true; } \ No newline at end of file diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp index 6fb3ce1..e22895e 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_ServiceApp.cpp @@ -22,7 +22,7 @@ void ServiceApp_Stop(int signo) { if (bIsRun) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("服务器退出...")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("服务器退出...")); bIsRun = false; //销毁Socks资源 NetCore_TCPXCore_DestroyEx(xhSocksSocket); @@ -106,7 +106,7 @@ int main(int argc, char** argv) //初始日志 st_XLogConfig.XLog_MaxBackupFile = 10; st_XLogConfig.XLog_MaxSize = 1024000; - _tcscpy(st_XLogConfig.tszFileName, st_ServiceConfig.st_XLog.tszLogFile); + _tcsxcpy(st_XLogConfig.tszFileName, st_ServiceConfig.st_XLog.tszLogFile); xhLog = HelpComponents_XLog_Init(HELPCOMPONENTS_XLOG_OUTTYPE_STD | HELPCOMPONENTS_XLOG_OUTTYPE_FILE, &st_XLogConfig); if (NULL == xhLog) { @@ -115,20 +115,20 @@ int main(int argc, char** argv) } //设置日志打印级别 HelpComponents_XLog_SetLogPriority(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,初始化日志系统成功")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化日志系统成功")); if (st_ServiceConfig.st_XAuth.bAuth >0) { if (!ModuleAuthorize_User_Init(st_ServiceConfig.st_XAuth.tszAuthFile)) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,启用用户验证服务失败,错误:%lX"), ModuleAuthorize_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,启用用户验证服务失败,错误:%lX"), ModuleAuthorize_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,启用用户验证服务,用户列表地址:%s"), st_ServiceConfig.st_XAuth.tszAuthFile); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启用用户验证服务,用户列表地址:%s"), st_ServiceConfig.st_XAuth.tszAuthFile); } else { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("启动服务中,没有启用用户验证服务")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,没有启用用户验证服务")); } //启动Socks服务相关代码 if (st_ServiceConfig.nSocksPort > 0) @@ -139,38 +139,38 @@ int main(int argc, char** argv) xhSocksHeart = SocketOpt_HeartBeat_InitEx(st_ServiceConfig.st_XTime.nSocksTimeOut, st_ServiceConfig.st_XTime.nTimeCheck, Network_Callback_SocksHeart); if (NULL == xhSocksHeart) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,初始化Socks心跳服务失败,错误:%lX"), NetCore_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化Socks心跳服务失败,错误:%lX"), NetCore_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,初始化Socks心跳服务成功,时间:%d,次数:%d"), st_ServiceConfig.st_XTime.nSocksTimeOut, st_ServiceConfig.st_XTime.nTimeCheck); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化Socks心跳服务成功,时间:%d,次数:%d"), st_ServiceConfig.st_XTime.nSocksTimeOut, st_ServiceConfig.st_XTime.nTimeCheck); } else { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("启动服务中,Socks心跳服务被设置为不启用")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,Socks心跳服务被设置为不启用")); } //启动网络 xhSocksSocket = NetCore_TCPXCore_StartEx(st_ServiceConfig.nSocksPort, st_ServiceConfig.st_XMax.nMaxClient, st_ServiceConfig.st_XMax.nIOThread); if (NULL == xhSocksSocket) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,启动Socks网络服务器失败,错误:%lX"), NetCore_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,启动Socks网络服务器失败,错误:%lX"), NetCore_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,启动Socks网络服务器成功,Socks端口:%d,网络IO线程个数:%d"), st_ServiceConfig.nSocksPort, st_ServiceConfig.st_XMax.nIOThread); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动Socks网络服务器成功,Socks端口:%d,网络IO线程个数:%d"), st_ServiceConfig.nSocksPort, st_ServiceConfig.st_XMax.nIOThread); //绑定网络事件 NetCore_TCPXCore_RegisterCallBackEx(xhSocksSocket, Network_Callback_SocksLogin, Network_Callback_SocksRecv, Network_Callback_SocksLeave); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,注册Socks网络事件成功")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,注册Socks网络事件成功")); //客户端 xhSocksClient = XClient_TCPSelect_StartEx(XEngine_Socks_CBRecv); if (NULL == xhSocksClient) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动Socks客户端服务失败,错误:%lX"), XClient_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动Socks客户端服务失败,错误:%lX"), XClient_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,启动Socks客户端服务成功")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动Socks客户端服务成功")); } else { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("启动服务中,Socks消息服务没有被启用")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,Socks消息服务没有被启用")); } //启动Tunnel服务相关代码 if (st_ServiceConfig.nTunnelPort > 0) @@ -181,37 +181,37 @@ int main(int argc, char** argv) xhTunnelHeart = SocketOpt_HeartBeat_InitEx(st_ServiceConfig.st_XTime.nTunnelTimeOut, st_ServiceConfig.st_XTime.nTimeCheck, Network_Callback_TunnelHeart); if (NULL == xhTunnelHeart) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,初始化Tunnel心跳服务失败,错误:%lX"), NetCore_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化Tunnel心跳服务失败,错误:%lX"), NetCore_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,初始化Tunnel心跳服务成功,时间:%d,次数:%d"), st_ServiceConfig.st_XTime.nTunnelTimeOut, st_ServiceConfig.st_XTime.nTimeCheck); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化Tunnel心跳服务成功,时间:%d,次数:%d"), st_ServiceConfig.st_XTime.nTunnelTimeOut, st_ServiceConfig.st_XTime.nTimeCheck); } else { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("启动服务中,Tunnel心跳服务被设置为不启用")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,Tunnel心跳服务被设置为不启用")); } //网络 xhTunnelSocket = NetCore_TCPXCore_StartEx(st_ServiceConfig.nTunnelPort, st_ServiceConfig.st_XMax.nMaxClient, st_ServiceConfig.st_XMax.nIOThread); if (NULL == xhTunnelSocket) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,启动Tunnel网络服务器失败,错误:%lX"), NetCore_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,启动Tunnel网络服务器失败,错误:%lX"), NetCore_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,启动Tunnel网络服务器成功,Tunnel端口:%d,IO:%d"), st_ServiceConfig.nTunnelPort, st_ServiceConfig.st_XMax.nIOThread); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动Tunnel网络服务器成功,Tunnel端口:%d,IO:%d"), st_ServiceConfig.nTunnelPort, st_ServiceConfig.st_XMax.nIOThread); NetCore_TCPXCore_RegisterCallBackEx(xhTunnelSocket, Network_Callback_TunnelLogin, Network_Callback_TunnelRecv, Network_Callback_TunnelLeave); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,注册Tunnel网络事件成功")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,注册Tunnel网络事件成功")); //客户端 xhTunnelClient = XClient_TCPSelect_StartEx(XEngine_Tunnel_CBRecv); if (NULL == xhTunnelClient) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动Tunnel客户端服务失败,错误:%lX"), XClient_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动Tunnel客户端服务失败,错误:%lX"), XClient_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,启动Tunnel客户端服务成功")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动Tunnel客户端服务成功")); } else { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("启动服务中,Tunnel消息服务没有被启用")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,Tunnel消息服务没有被启用")); } //启动转发协议服务 if (st_ServiceConfig.nForwardPort > 0) @@ -220,35 +220,35 @@ int main(int argc, char** argv) xhForwardPacket = HelpComponents_Datas_Init(st_ServiceConfig.st_XMax.nMaxQueue, st_ServiceConfig.st_XMax.nForwardThread); if (NULL == xhForwardPacket) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("初始化Forward组包器失败,错误:%lX"), Packets_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("初始化Forward组包器失败,错误:%lX"), Packets_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,启动Forward组包器成功")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动Forward组包器成功")); //启动心跳 if (st_ServiceConfig.st_XTime.nForwardTimeOut > 0) { xhForwardHeart = SocketOpt_HeartBeat_InitEx(st_ServiceConfig.st_XTime.nForwardTimeOut, st_ServiceConfig.st_XTime.nTimeCheck, Network_Callback_ForwardHeart); if (NULL == xhForwardHeart) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,初始化Forward心跳服务失败,错误:%lX"), NetCore_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化Forward心跳服务失败,错误:%lX"), NetCore_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,初始化Forward心跳服务成功,时间:%d,次数:%d"), st_ServiceConfig.st_XTime.nForwardTimeOut, st_ServiceConfig.st_XTime.nTimeCheck); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化Forward心跳服务成功,时间:%d,次数:%d"), st_ServiceConfig.st_XTime.nForwardTimeOut, st_ServiceConfig.st_XTime.nTimeCheck); } else { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("启动服务中,Forward心跳服务被设置为不启用")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,Forward心跳服务被设置为不启用")); } //网络 xhForwardSocket = NetCore_TCPXCore_StartEx(st_ServiceConfig.nForwardPort, st_ServiceConfig.st_XMax.nMaxClient, st_ServiceConfig.st_XMax.nIOThread); if (NULL == xhForwardSocket) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动服务中,启动Forward网络服务器失败,错误:%lX"), NetCore_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,启动Forward网络服务器失败,错误:%lX"), NetCore_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,启动Forward网络服务器成功,Forward端口:%d,IO:%d"), st_ServiceConfig.nForwardPort, st_ServiceConfig.st_XMax.nIOThread); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动Forward网络服务器成功,Forward端口:%d,IO:%d"), st_ServiceConfig.nForwardPort, st_ServiceConfig.st_XMax.nIOThread); NetCore_TCPXCore_RegisterCallBackEx(xhForwardSocket, Network_Callback_ForwardLogin, Network_Callback_ForwardRecv, Network_Callback_ForwardLeave); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,注册Forward网络事件成功")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,注册Forward网络事件成功")); //任务池 THREADPOOL_PARAMENT** ppSt_ListParam; BaseLib_OperatorMemory_Malloc((XPPPMEM)&ppSt_ListParam, st_ServiceConfig.st_XMax.nForwardThread, sizeof(THREADPOOL_PARAMENT)); @@ -263,17 +263,17 @@ int main(int argc, char** argv) xhForwardPool = ManagePool_Thread_NQCreate(&ppSt_ListParam, st_ServiceConfig.st_XMax.nForwardThread); if (NULL == xhForwardPool) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("启动Forward线程池服务失败,错误:%lX"), ManagePool_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动Forward线程池服务失败,错误:%lX"), ManagePool_GetLastError()); goto XENGINE_SERVICEAPP_EXIT; } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("启动服务中,启动Forward线程池服务成功,启动个数:%d"), st_ServiceConfig.st_XMax.nForwardThread); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动Forward线程池服务成功,启动个数:%d"), st_ServiceConfig.st_XMax.nForwardThread); } else { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T("启动服务中,Forward服务没有被启用")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,Forward服务没有被启用")); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("所有服务成功启动,服务运行中,XEngine版本:%s%s,服务版本:%s,发行次数:%d。。。"), BaseLib_OperatorVer_XNumberStr(), BaseLib_OperatorVer_XTypeStr(), st_ServiceConfig.st_XVer.pStl_ListVer->front().c_str(), st_ServiceConfig.st_XVer.pStl_ListVer->size()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("所有服务成功启动,服务运行中,XEngine版本:%s%s,服务版本:%s,发行次数:%d。。。"), BaseLib_OperatorVer_XNumberStr(), BaseLib_OperatorVer_XTypeStr(), st_ServiceConfig.st_XVer.pStl_ListVer->front().c_str(), st_ServiceConfig.st_XVer.pStl_ListVer->size()); while (true) { @@ -282,7 +282,7 @@ int main(int argc, char** argv) XENGINE_SERVICEAPP_EXIT: if (bIsRun) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("有服务启动失败,服务器退出...")); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("有服务启动失败,服务器退出...")); bIsRun = false; //销毁Socks资源 NetCore_TCPXCore_DestroyEx(xhSocksSocket); diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp index 40ecb56..2d36f14 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_SocksTask.cpp @@ -19,7 +19,7 @@ bool XEngine_SocksTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int ENUM_RFCCOMPONENTS_PROXY_STATUS enSocksStatus; if (!ProxyProtocol_SocksCore_GetStatus(lpszClientAddr, &enSocksStatus)) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,获取状态失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("SOCKS客户端:%s,获取状态失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); return false; } //获取到的状态来处理相对应的事件 @@ -31,7 +31,7 @@ bool XEngine_SocksTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int { ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, ENUM_RFCCOMPONENTS_PROXYSOCKS_AUTH_NOAUTH); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_SOCKS); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,解析验证协议失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("SOCKS客户端:%s,解析验证协议失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); return false; } bool bFoundAuth = false; @@ -44,9 +44,9 @@ bool XEngine_SocksTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int XCHAR tszTmpBuffer[64]; memset(tszTmpBuffer, '\0', sizeof(tszTmpBuffer)); - _stprintf(tszTmpBuffer, _T("%d"), enListAuths[i]); - _tcscat(tszAuthBuffer, tszTmpBuffer); - _tcscat(tszAuthBuffer, _T(" ")); + _xstprintf(tszTmpBuffer, _X("%d"), enListAuths[i]); + _tcsxcat(tszAuthBuffer, tszTmpBuffer); + _tcsxcat(tszAuthBuffer, _X(" ")); //服务器是否支持 if (st_ServiceConfig.st_XAuth.bAuth == enListAuths[i]) { @@ -57,7 +57,7 @@ bool XEngine_SocksTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int { ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, ENUM_RFCCOMPONENTS_PROXYSOCKS_AUTH_NOAUTH); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_SOCKS); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,解析验证协议成功,但是验证类型不支持,客户端的支持验证:%s,服务器支持的验证:%d"), lpszClientAddr, tszAuthBuffer, st_ServiceConfig.st_XAuth.bAuth); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("SOCKS客户端:%s,解析验证协议成功,但是验证类型不支持,客户端的支持验证:%s,服务器支持的验证:%d"), lpszClientAddr, tszAuthBuffer, st_ServiceConfig.st_XAuth.bAuth); return false; } ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, st_ServiceConfig.st_XAuth.bAuth); @@ -68,7 +68,7 @@ bool XEngine_SocksTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int //跳过 ProxyProtocol_SocksCore_SetStatus(lpszClientAddr, ENUM_RFCCOMPONENTS_PROXY_STATUS_USER); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("SOCKS客户端:%s,解析验证协议成功,支持的验证类型:%s,使用的验证类型:%d"), lpszClientAddr, tszAuthBuffer, st_ServiceConfig.st_XAuth.bAuth); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("SOCKS客户端:%s,解析验证协议成功,支持的验证类型:%s,使用的验证类型:%d"), lpszClientAddr, tszAuthBuffer, st_ServiceConfig.st_XAuth.bAuth); } else if (ENUM_RFCCOMPONENTS_PROXY_STATUS_AUTH == enSocksStatus) { @@ -83,26 +83,26 @@ bool XEngine_SocksTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int { ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, XENGINE_RFCCOMPONENT_PROXY_SOCKS_RESPONSE_FAILED); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_SOCKS); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,用户登录验证失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("SOCKS客户端:%s,用户登录验证失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); return false; } if (enProxyAuth != st_ServiceConfig.st_XAuth.bAuth) { ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, XENGINE_RFCCOMPONENT_PROXY_SOCKS_RESPONSE_FAILED); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_SOCKS); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,用户登录验证失败,客户端发送的验证类型不支持"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("SOCKS客户端:%s,用户登录验证失败,客户端发送的验证类型不支持"), lpszClientAddr); return false; } if (!ModuleAuthorize_User_Exist(tszUserName, tszUserPass)) { ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, XENGINE_RFCCOMPONENT_PROXY_SOCKS_RESPONSE_FAILED); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_SOCKS); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,用户登录验证失败,用户名:%s,或者密码:%s 不正确"), lpszClientAddr, tszUserPass, tszUserPass); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("SOCKS客户端:%s,用户登录验证失败,用户名:%s,或者密码:%s 不正确"), lpszClientAddr, tszUserPass, tszUserPass); return false; } ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, XENGINE_RFCCOMPONENT_PROXY_SOCKS_RESPONSE_SUCCESS); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_SOCKS); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("SOCKS客户端:%s,用户登录验证成功,使用的验证类型:%d,用户名:%s"), lpszClientAddr, enProxyAuth, tszUserName); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("SOCKS客户端:%s,用户登录验证成功,使用的验证类型:%d,用户名:%s"), lpszClientAddr, enProxyAuth, tszUserName); } else if (ENUM_RFCCOMPONENTS_PROXY_STATUS_USER == enSocksStatus) { @@ -118,7 +118,7 @@ bool XEngine_SocksTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int { ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, XENGINE_RFCCOMPONENT_PROXY_SOCKS_RESPONSE_NETWORK); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_SOCKS); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,用户连接失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("SOCKS客户端:%s,用户连接失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); return false; } //命令类型 @@ -129,14 +129,14 @@ bool XEngine_SocksTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int { if (!XClient_TCPSelect_InsertEx(xhSocksClient, &st_ProxyClient.xhClient, tszClientAddr, nPort)) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,创建客户端连接失败,连接到服务器:%s:%d,错误:%lX"), lpszClientAddr, tszClientAddr, nPort, ProxyProtocol_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("SOCKS客户端:%s,创建客户端连接失败,连接到服务器:%s:%d,错误:%lX"), lpszClientAddr, tszClientAddr, nPort, ProxyProtocol_GetLastError()); return false; } } else { int nListCount = 0; - CHAR** ppszListAddr; + XCHAR** ppszListAddr; ENUM_APIHELP_DOMAINTYPE enDomainType; APIHELP_DOMAIN st_APIUrl; @@ -144,38 +144,38 @@ bool XEngine_SocksTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int APIHelp_Domain_GetInfo(tszClientAddr, &st_APIUrl, &enDomainType); memset(tszClientAddr, '\0', sizeof(tszClientAddr)); - if (_tcslen(st_APIUrl.tszSubDomain) > 0) + if (_tcsxlen(st_APIUrl.tszSubDomain) > 0) { - _stprintf(tszClientAddr, _T("%s.%s"), st_APIUrl.tszSubDomain, st_APIUrl.tszMainDomain); + _xstprintf(tszClientAddr, _X("%s.%s"), st_APIUrl.tszSubDomain, st_APIUrl.tszMainDomain); } else { - _stprintf(tszClientAddr, _T("%s"), st_APIUrl.tszMainDomain); + _xstprintf(tszClientAddr, _X("%s"), st_APIUrl.tszMainDomain); } if (!NetXApi_Socket_DomainToAddr(tszClientAddr, &ppszListAddr, &nListCount)) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,解析域名失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("SOCKS客户端:%s,解析域名失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); return false; } memset(tszClientAddr, '\0', sizeof(tszClientAddr)); - _tcscpy(tszClientAddr, ppszListAddr[0]); //随便选择一个IP地址 + _tcsxcpy(tszClientAddr, ppszListAddr[0]); //随便选择一个IP地址 BaseLib_OperatorMemory_Free((XPPPMEM)&ppszListAddr, nListCount); if (!XClient_TCPSelect_InsertEx(xhSocksClient, &st_ProxyClient.xhClient, tszClientAddr, nPort)) { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("SOCKS客户端:%s,创建客户端连接失败,连接到服务器:%s:%d,错误:%lX"), lpszClientAddr, tszClientAddr, nPort, ProxyProtocol_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("SOCKS客户端:%s,创建客户端连接失败,连接到服务器:%s:%d,错误:%lX"), lpszClientAddr, tszClientAddr, nPort, ProxyProtocol_GetLastError()); return false; } } } //配置客户端信息 st_ProxyClient.enStatus = ENUM_RFCCOMPONENTS_PROXY_STATUS_FORWARD; - _tcscpy(st_ProxyClient.tszIPAddr, lpszClientAddr); + _tcsxcpy(st_ProxyClient.tszIPAddr, lpszClientAddr); ProxyProtocol_SocksCore_SetInfo(lpszClientAddr, &st_ProxyClient, sizeof(PROXYPROTOCOL_CLIENTINFO)); //回复结果 ProxyProtocol_SocksCore_HdrPacket(lpszClientAddr, tszMsgBuffer, &nLen, XENGINE_RFCCOMPONENT_PROXY_SOCKS_RESPONSE_SUCCESS); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_SOCKS); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("SOCKS客户端:%s,用户登录验证成功,连接到地址:%s:%d"), lpszClientAddr, tszClientAddr, nPort); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("SOCKS客户端:%s,用户登录验证成功,连接到地址:%s:%d"), lpszClientAddr, tszClientAddr, nPort); } else { @@ -188,7 +188,7 @@ bool XEngine_SocksTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int } else { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Socks客户端:%s,转发数据失败,可能与服务器的连接已经关闭,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Socks客户端:%s,转发数据失败,可能与服务器的连接已经关闭,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); } } return true; @@ -214,7 +214,7 @@ void CALLBACK XEngine_Socks_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, XSOCKET { //退出处理 SocketOpt_HeartBeat_ForceOutAddrEx(xhSocksHeart, ppSt_ClientList[i]->tszIPAddr); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Socks客户端:%s,离开服务器,客户端主动断开"), ppSt_ClientList[i]->tszIPAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Socks客户端:%s,离开服务器,客户端主动断开"), ppSt_ClientList[i]->tszIPAddr); } break; } diff --git a/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp b/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp index 24eed87..39b979f 100644 --- a/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp +++ b/XEngine_Source/XEngine_ServiceApp/XEngine_TunnelTask.cpp @@ -33,7 +33,7 @@ bool XEngine_TunnelTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in { ProxyProtocol_TunnelCore_Packet(tszMsgBuffer, &nLen, 400); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_TUNNEL); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Tunnel客户端:%s,解析协议失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Tunnel客户端:%s,解析协议失败,错误:%lX"), lpszClientAddr, ProxyProtocol_GetLastError()); return false; } XCHAR tszConnectAddr[128]; @@ -49,26 +49,26 @@ bool XEngine_TunnelTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in { ProxyProtocol_TunnelCore_Packet(tszMsgBuffer, &nLen, 401); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_TUNNEL); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Tunnel客户端:%s,失败无法继续,错误:%lX"), lpszClientAddr, OPenSsl_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Tunnel客户端:%s,失败无法继续,错误:%lX"), lpszClientAddr, OPenSsl_GetLastError()); return false; } if (!ModuleAuthorize_User_Exist(tszUser, tszPass)) { ProxyProtocol_TunnelCore_Packet(tszMsgBuffer, &nLen, 401); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_TUNNEL); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Tunnel客户端:%s,验证用户名:%s,密码:%s 失败,错误:%lX"), lpszClientAddr, tszUser, tszPass); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Tunnel客户端:%s,验证用户名:%s,密码:%s 失败,错误:%lX"), lpszClientAddr, tszUser, tszPass); return false; } } //是否为IP地址 if (BaseLib_OperatorIPAddr_IsIPV4Addr(tszIPAddr)) { - _tcscpy(tszConnectAddr, tszIPAddr); + _tcsxcpy(tszConnectAddr, tszIPAddr); } else { int nListCount = 0; - CHAR** ppszListAddr; + XCHAR** ppszListAddr; ENUM_APIHELP_DOMAINTYPE enDomainType; APIHELP_DOMAIN st_APIUrl; @@ -76,35 +76,35 @@ bool XEngine_TunnelTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in APIHelp_Domain_GetInfo(tszIPAddr, &st_APIUrl, &enDomainType); memset(tszIPAddr, '\0', sizeof(tszIPAddr)); - if (_tcslen(st_APIUrl.tszSubDomain) > 0) + if (_tcsxlen(st_APIUrl.tszSubDomain) > 0) { - _stprintf(tszIPAddr, _T("%s.%s"), st_APIUrl.tszSubDomain, st_APIUrl.tszMainDomain); + _xstprintf(tszIPAddr, _X("%s.%s"), st_APIUrl.tszSubDomain, st_APIUrl.tszMainDomain); } else { - _stprintf(tszIPAddr, _T("%s"), st_APIUrl.tszMainDomain); + _xstprintf(tszIPAddr, _X("%s"), st_APIUrl.tszMainDomain); } if (!NetXApi_Socket_DomainToAddr(tszIPAddr, &ppszListAddr, &nListCount)) { ProxyProtocol_TunnelCore_Packet(tszMsgBuffer, &nLen, 500); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_TUNNEL); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Tunnel客户端:%s,解析域名:%s,失败,错误:%lX"), lpszClientAddr, tszIPAddr, ProxyProtocol_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Tunnel客户端:%s,解析域名:%s,失败,错误:%lX"), lpszClientAddr, tszIPAddr, ProxyProtocol_GetLastError()); return false; } - _tcscpy(tszConnectAddr, ppszListAddr[0]); //随便选择一个IP地址 + _tcsxcpy(tszConnectAddr, ppszListAddr[0]); //随便选择一个IP地址 BaseLib_OperatorMemory_Free((XPPPMEM)&ppszListAddr, nListCount); } if (!XClient_TCPSelect_InsertEx(xhTunnelClient, &st_ProxyClient.xhClient, tszConnectAddr, nIPPort)) { ProxyProtocol_TunnelCore_Packet(tszMsgBuffer, &nLen, 500); XEngine_Network_Send(lpszClientAddr, tszMsgBuffer, nLen, XENGINE_CLIENT_NETTYPE_TUNNEL); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T("Tunnel客户端:%s,创建客户端连接失败,连接到服务器:%s:%d,错误:%lX"), lpszClientAddr, tszConnectAddr, nIPPort, ProxyProtocol_GetLastError()); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("Tunnel客户端:%s,创建客户端连接失败,连接到服务器:%s:%d,错误:%lX"), lpszClientAddr, tszConnectAddr, nIPPort, ProxyProtocol_GetLastError()); return false; } //设置属于 st_ProxyClient.enStatus = ENUM_RFCCOMPONENTS_PROXY_STATUS_FORWARD; - _tcscpy(st_ProxyClient.tszIPAddr, lpszClientAddr); + _tcsxcpy(st_ProxyClient.tszIPAddr, lpszClientAddr); ProxyProtocol_TunnelCore_SetInfo(lpszClientAddr, &st_ProxyClient, sizeof(PROXYPROTOCOL_CLIENTINFO)); //判断是代理还是非代理协议 if (bProxy) @@ -118,7 +118,7 @@ bool XEngine_TunnelTask_Handle(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in //非代理协议直接发送数据,客户端->代理服务->服务器 XClient_TCPSelect_SendEx(xhTunnelClient, st_ProxyClient.xhClient, lpszMsgBuffer, nMsgLen); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Tunnel客户端:%s,创建隧道代理服务成功,连接到服务器:%s:%d,代理模式:%s"), lpszClientAddr, tszConnectAddr, nIPPort, bProxy ? "代理" : "直连"); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Tunnel客户端:%s,创建隧道代理服务成功,连接到服务器:%s:%d,代理模式:%s"), lpszClientAddr, tszConnectAddr, nIPPort, bProxy ? "代理" : "直连"); } else { @@ -148,7 +148,7 @@ void CALLBACK XEngine_Tunnel_CBRecv(XHANDLE xhToken, XNETHANDLE xhClient, XSOCKE { //退出处理 SocketOpt_HeartBeat_ForceOutAddrEx(xhTunnelHeart, ppSt_ClientList[i]->tszIPAddr); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T("Tunnel客户端:%s,离开服务器,客户端主动断开"), ppSt_ClientList[i]->tszIPAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("Tunnel客户端:%s,离开服务器,客户端主动断开"), ppSt_ClientList[i]->tszIPAddr); } break; } -- Gitee From ed8d51a153874c6d2d697eeb40ec42ea90464d76 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 25 Apr 2023 10:33:01 +0800 Subject: [PATCH 5/9] update:linux build for example --- .../APPClient_ForwardExample.cpp | 23 ++++++++++--------- .../APPClient_SocksExample.cpp | 17 +++++++------- .../APPClient_TunnelExample.cpp | 17 +++++++------- XEngine_APPClient/README.md | 13 +++++++++++ 4 files changed, 43 insertions(+), 27 deletions(-) create mode 100644 XEngine_APPClient/README.md diff --git a/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.cpp b/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.cpp index f5ba9c4..2a44da8 100644 --- a/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.cpp +++ b/XEngine_APPClient/APPClient_ForwardExample/APPClient_ForwardExample.cpp @@ -26,15 +26,16 @@ //需要优先配置XEngine //WINDOWS支持VS2022 x86 debug 编译调试 //linux使用下面的命令编译 -//g++ -std=c++17 -Wall -g APPClient_ForwardExample.cpp -o APPClient_ForwardExample.exe -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L /usr/local/lib/XEngine_Release/XEngine_Client -L /usr/local/lib/XEngine_Release/XEngine_RfcComponents -lXEngine_BaseLib -lXClient_Socket -lRfcComponents_ProxyProtocol +//g++ -std=c++17 -Wall -g APPClient_ForwardExample.cpp -o APPClient_ForwardExample.exe -I ../../XEngine_Source/XEngine_ThirdPart/jsoncpp -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L /usr/local/lib/XEngine_Release/XEngine_Client -L /usr/local/lib/XEngine_Release/XEngine_RfcComponents -L ../../XEngine_Source/XEngine_ThirdPart/jsoncpp -lXEngine_BaseLib -lXClient_Socket -lRfcComponents_ProxyProtocol -ljsoncpp -Wl,-rpath=../../XEngine_Source/XEngine_ThirdPart/jsoncpp,--disable-new-dtags + int main(int argc, char** argv) { #ifdef _MSC_BUILD WSADATA st_WSAData; WSAStartup(MAKEWORD(2, 2), &st_WSAData); #endif - SOCKET m_Socket; - LPCTSTR lpszServiceAddr = _T("127.0.0.1"); + XSOCKET m_Socket; + LPCXSTR lpszServiceAddr = _X("127.0.0.1"); if (!XClient_TCPSelect_Create(&m_Socket, lpszServiceAddr, 5402)) { printf("连接失败!错误:%lX\n", XClient_GetLastError()); @@ -53,14 +54,14 @@ int main(int argc, char** argv) st_ProtocolHdr.unOperatorType = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_AUTH; st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LOGREQ; - if (!XClient_TCPSelect_SendMsg(m_Socket, (LPCTSTR)&st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR))) + if (!XClient_TCPSelect_SendMsg(m_Socket, (LPCXSTR)&st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR))) { printf("发送失败!\n"); return 0; } nMsgLen = 0; - TCHAR* ptszMsgBuffer = NULL; + XCHAR* ptszMsgBuffer = NULL; memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR)); if (!XClient_TCPSelect_RecvPkt(m_Socket, &ptszMsgBuffer, &nMsgLen, &st_ProtocolHdr)) { @@ -75,7 +76,7 @@ int main(int argc, char** argv) st_ProtocolHdr.byVersion = 0; st_ProtocolHdr.unOperatorType = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_USER_FORWARD; st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_LISTREQ; - if (!XClient_TCPSelect_SendMsg(m_Socket, (LPCTSTR)&st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR))) + if (!XClient_TCPSelect_SendMsg(m_Socket, (LPCXSTR)&st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR))) { printf("发送失败!\n"); return 0; @@ -95,7 +96,7 @@ int main(int argc, char** argv) std::unique_ptr const pSt_JsonReader(st_JsonBuilder.newCharReader()); if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonAddr, &st_JsonError)) { - return FALSE; + return false; } BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); if (st_JsonAddr["Count"].asInt() > 0) @@ -112,7 +113,7 @@ int main(int argc, char** argv) st_ProtocolHdr.unPacketSize = st_JsonRoot.toStyledString().length(); st_ProtocolHdr.unOperatorType = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_USER_FORWARD; st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_BINDREQ; - if (!XClient_TCPSelect_SendMsg(m_Socket, (LPCTSTR)&st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR))) + if (!XClient_TCPSelect_SendMsg(m_Socket, (LPCXSTR)&st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR))) { printf("发送失败!\n"); return 0; @@ -139,14 +140,14 @@ int main(int argc, char** argv) } else { - BOOL bGet = FALSE; + bool bGet = false; while (1) { if (bGet) { //收到转发请求 nMsgLen = 2048; - TCHAR tszMsgBuffer[2048]; + XCHAR tszMsgBuffer[2048]; memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); @@ -162,7 +163,7 @@ int main(int argc, char** argv) //收到转发请求 if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_FORWARD_BINDREQ == st_ProtocolHdr.unOperatorCode) { - bGet = TRUE; + bGet = true; printf("get forward\n"); } BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); diff --git a/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.cpp b/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.cpp index 004e160..c2e32f1 100644 --- a/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.cpp +++ b/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.cpp @@ -1,4 +1,4 @@ -#ifdef _WINDOWS +#ifdef _MSC_BUILD #include #include #pragma comment(lib,"Ws2_32.lib") @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -25,12 +26,12 @@ //g++ -std=c++17 -Wall -g APPClient_SocksExample.cpp -o APPClient_SocksExample.exe -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L /usr/local/lib/XEngine_Release/XEngine_Client -L /usr/local/lib/XEngine_Release/XEngine_RfcComponents -lXEngine_BaseLib -lXClient_Socket -lRfcComponents_ProxyProtocol int main(int argc, char** argv) { -#ifdef _WINDOWS +#ifdef _MSC_BUILD WSADATA st_WSAData; WSAStartup(MAKEWORD(2, 2), &st_WSAData); #endif - SOCKET m_Socket; - LPCTSTR lpszServiceAddr = _T("127.0.0.1"); + XSOCKET m_Socket; + LPCXSTR lpszServiceAddr = _X("127.0.0.1"); if (!XClient_TCPSelect_Create(&m_Socket, lpszServiceAddr, 5400)) { printf("连接失败!错误:%lX\n", XClient_GetLastError()); @@ -39,7 +40,7 @@ int main(int argc, char** argv) printf("连接成功!\n"); int nMsgLen = 2048; - TCHAR tszMsgBuffer[2048]; + XCHAR tszMsgBuffer[2048]; memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); int nCount = 2; @@ -102,8 +103,8 @@ int main(int argc, char** argv) int nCode = 0; ProxyProtocol_SocksClient_ConnectParse(tszMsgBuffer, &nCode); //请求 - LPCTSTR lpszGetHttp = _T("GET / HTTP/1.1\r\nHost: www.xyry.org\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36\r\nAccept: text/html\r\n\r\n"); - if (!XClient_TCPSelect_SendMsg(m_Socket, lpszGetHttp, _tcslen(lpszGetHttp))) + LPCXSTR lpszGetHttp = _X("GET / HTTP/1.1\r\nHost: www.xyry.org\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36\r\nAccept: text/html\r\n\r\n"); + if (!XClient_TCPSelect_SendMsg(m_Socket, lpszGetHttp, _tcsxlen(lpszGetHttp))) { printf("发送投递失败!\n"); return 0; @@ -120,7 +121,7 @@ int main(int argc, char** argv) } XClient_TCPSelect_Close(m_Socket); -#ifdef _WINDOWS +#ifdef _MSC_BUILD WSACleanup(); #endif return 0; diff --git a/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.cpp b/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.cpp index aeceed6..be75e30 100644 --- a/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.cpp +++ b/XEngine_APPClient/APPClient_TunnelExample/APPClient_TunnelExample.cpp @@ -1,4 +1,4 @@ -#ifdef _WINDOWS +#ifdef _MSC_BUILD #include #include #pragma comment(lib,"Ws2_32.lib") @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -25,12 +26,12 @@ //g++ -std=c++17 -Wall -g APPClient_TunnelExample.cpp -o APPClient_TunnelExample.exe -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L /usr/local/lib/XEngine_Release/XEngine_Client -L /usr/local/lib/XEngine_Release/XEngine_RfcComponents -lXEngine_BaseLib -lXClient_Socket -lRfcComponents_ProxyProtocol int main(int argc, char** argv) { -#ifdef _WINDOWS +#ifdef _MSC_BUILD WSADATA st_WSAData; WSAStartup(MAKEWORD(2, 2), &st_WSAData); #endif - SOCKET m_Socket; - LPCTSTR lpszServiceAddr = _T("127.0.0.1"); + XSOCKET m_Socket; + LPCXSTR lpszServiceAddr = _X("127.0.0.1"); if (!XClient_TCPSelect_Create(&m_Socket, lpszServiceAddr, 5401)) { @@ -39,7 +40,7 @@ int main(int argc, char** argv) } printf("连接成功!\n"); int nMsgLen = 2048; - TCHAR tszMsgBuffer[2048]; + XCHAR tszMsgBuffer[2048]; memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); ProxyProtocol_TunnelClient_Packet(tszMsgBuffer, &nMsgLen, "www.xyry.org:80", "MTIzMTIzYWE6MTIzMTIz"); @@ -58,8 +59,8 @@ int main(int argc, char** argv) } printf("接受服务器返回数据,内容:%s\n", tszMsgBuffer); - LPCTSTR lpszGetHttp = _T("GET / HTTP/1.1\r\nHost: www.xyry.org\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36\r\nAccept: text/html\r\n\r\n"); - if (!XClient_TCPSelect_SendMsg(m_Socket, lpszGetHttp, _tcslen(lpszGetHttp))) + LPCXSTR lpszGetHttp = _X("GET / HTTP/1.1\r\nHost: www.xyry.org\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36\r\nAccept: text/html\r\n\r\n"); + if (!XClient_TCPSelect_SendMsg(m_Socket, lpszGetHttp, _tcsxlen(lpszGetHttp))) { printf("发送投递失败!\n"); return 0; @@ -77,7 +78,7 @@ int main(int argc, char** argv) } XClient_TCPSelect_Close(m_Socket); -#ifdef _WINDOWS +#ifdef _MSC_BUILD WSACleanup(); #endif return 0; diff --git a/XEngine_APPClient/README.md b/XEngine_APPClient/README.md new file mode 100644 index 0000000..4b2ff81 --- /dev/null +++ b/XEngine_APPClient/README.md @@ -0,0 +1,13 @@ +## XEngine_APPClient + +windows:use x86 debug mode complie by vs2022 +linux or macos:g++ command + +#### APPClient_ForwardExample +xengine data forward protocol example + +#### APPClient_SocksExample +socks v4 and v5 proxy forward example + +#### APPClient_TunnelExample +http tunnel example \ No newline at end of file -- Gitee From aaafa4568acd49e2fcfcfa7c2d48cbdeb069561a Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 25 Apr 2023 13:21:54 +0800 Subject: [PATCH 6/9] fixed:socks example --- .../APPClient_SocksExample.cpp | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.cpp b/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.cpp index c2e32f1..9353d16 100644 --- a/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.cpp +++ b/XEngine_APPClient/APPClient_SocksExample/APPClient_SocksExample.cpp @@ -63,28 +63,31 @@ int main(int argc, char** argv) ENUM_RFCCOMPONENTS_PROXYSOCKS_AUTH enServerAuth; ProxyProtocol_SocksClient_AuthParse(tszMsgBuffer, &enServerAuth); printf("接受服务器返回数据,内容:%d\n", enServerAuth); - //////////////////////////////////////////////////////////////////////////登录 匿名登录注释下面的代码 - ProxyProtocol_SocksClient_LoginPacket(tszMsgBuffer, &nMsgLen, "123123aa", "123123"); - if (!XClient_TCPSelect_SendMsg(m_Socket, tszMsgBuffer, nMsgLen)) + if (ENUM_RFCCOMPONENTS_PROXYSOCKS_AUTH_USERPASS == enServerAuth) { - printf("发送投递失败!\n"); - return 0; - } + //////////////////////////////////////////////////////////////////////////登录 匿名登录注释下面的代码 + ProxyProtocol_SocksClient_LoginPacket(tszMsgBuffer, &nMsgLen, "123123aa", "123123"); + if (!XClient_TCPSelect_SendMsg(m_Socket, tszMsgBuffer, nMsgLen)) + { + printf("发送投递失败!\n"); + return 0; + } - nMsgLen = 2048; - memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); - if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen)) - { - printf("接受数据失败!\n"); - return 0; - } - if (ProxyProtocol_SocksClient_LoginParse(tszMsgBuffer)) - { - printf("login ok\n"); - } - else - { - printf("login failed\n"); + nMsgLen = 2048; + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + if (!XClient_TCPSelect_RecvMsg(m_Socket, tszMsgBuffer, &nMsgLen)) + { + printf("接受数据失败!\n"); + return 0; + } + if (ProxyProtocol_SocksClient_LoginParse(tszMsgBuffer)) + { + printf("login ok\n"); + } + else + { + printf("login failed\n"); + } } //////////////////////////////////////////////////////////////////////////连接 ProxyProtocol_SocksClient_ConnectPacket(tszMsgBuffer, &nMsgLen, "www.xyry.org", 80, ENUM_RFCCOMPONENTS_PROXYSOCKS_COMMAND_CONNECT, ENUM_RFCCOMPONENTS_PROXYSOCKS_IPADDR_DOMAIN); -- Gitee From e17050f70c37d9976e84ce2d54a08a643e7c7f69 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 25 Apr 2023 13:49:39 +0800 Subject: [PATCH 7/9] modify:Use a more permissive protocol --- LICENSE | 186 +++++++------------------------------------------------- 1 file changed, 21 insertions(+), 165 deletions(-) diff --git a/LICENSE b/LICENSE index 65c5ca8..b4ec123 100644 --- a/LICENSE +++ b/LICENSE @@ -1,165 +1,21 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. +MIT License + +Copyright (c) 2023 XEngine:www.xyry.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file -- Gitee From 4fecb45207f55214840ea8041b6e61e3d7f31989 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 26 Apr 2023 09:34:07 +0800 Subject: [PATCH 8/9] update:readme and docment --- README.en.md | 15 +++++++++------ README.md | 16 ++++++++++------ XEngine_Docment/Docment_en.docx | Bin 116740 -> 116354 bytes XEngine_Docment/Docment_zh.docx | Bin 114937 -> 114886 bytes .../XEngine_Config/XEngine_Config.json | 1 + 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/README.en.md b/README.en.md index ec1ff5f..4244be2 100644 --- a/README.en.md +++ b/README.en.md @@ -25,7 +25,7 @@ this software support following features ## install #### XEngine Evn -you must install XEngine,need V7.38 or above,install XEngine can be refer to xengine Readme docment +you must install XEngine,need V8.10 or above,install XEngine can be refer to xengine Readme docment GITEE:https://gitee.com/xyry/libxengine GITHUB:https://github.com/libxengine/xengine @@ -40,11 +40,7 @@ use vs open and compile,suport windows 7sp1 and above Just Run it,use XEngine_AuthorizeApp #### Linux -use makefile compile,UBUNTU20.04 x64 or CENTOS8 x64 -Run it on the terminal - -#### Macos -use makefile compile,mac 12 and above +use makefile compile,UBUNTU22.04 x64 or RockyLinux9 x64 Run it on the terminal ##### complie @@ -53,6 +49,13 @@ make complie make FLAGS=InstallAll install make FLAGS=CleanAll clear +#### Macos +use makefile compile,mac 12 and above +Run it on the terminal + +##### complie +Refer to Linux + #### use 1. Switch to the MASTER branch diff --git a/README.md b/README.md index 59f97b4..3a20df4 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ c c++ Socks5 Proxy Service,HTTP Tunnel Proxy Service,tcp forward service ## 安装教程 #### XEngine环境 -必须安装XEngine,版本需要V7.38或者以上版本,安装XEngine可以参考其Readme文档 +必须安装XEngine,版本需要V8.10或者以上版本,安装XEngine可以参考其Readme文档 GITEE:https://gitee.com/xyry/libxengine GITHUB:https://github.com/libxengine/xengine @@ -40,11 +40,7 @@ macos执行:./XEngine_LINEnv.sh -i 3 直接运行即可,使用XEngine_AuthorizeApp #### Linux -Linux使用Makefile编译,UBUNTU20.04 x64或者CENTOS8 x64 -在控制台运行 - -#### Macos -使用makefile编译,控制台运行,需要mac 12以及以上版本 +Linux使用Makefile编译,UBUNTU22.04 x64或者RockyLinux9 x64 在控制台运行 ##### 编译命令 @@ -53,6 +49,13 @@ make 编译 make FLAGS=InstallAll 安装库程序 make FLAGS=CleanAll 清理编译 +#### Macos +使用makefile编译,控制台运行,需要mac 13以及以上版本 +在控制台运行 + +##### 编译命令 +参考Linux + #### 使用说明 1. 切换到MASTER分支 @@ -85,6 +88,7 @@ make FLAGS=CleanAll 清理编译 ## 开发计划 透传代理 转发代理支持权限和确认 +支持加密代理 ## 关注我们 如果你觉得这个软件对你有帮助,请你给我们一个START吧 diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx index c9b672c64b35ecc8e821cde87cf9a2c534d73077..300c22efd5f6ee8484f37cd4b9d1dcf358766510 100644 GIT binary patch delta 98210 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 ssUBT<5RZYD< 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 p4Ew*DIs<UEZJtv94Sd<&62(BvhP`DCMi3U zeHmtCn-~lRWA?w_%m1tM=3LKxKKEz2o^xM!WGwHS1l|OVBRm)0$N47Slmq@r9iEl9 zPFk95&v=zDSDdHeS_nRRxS{dgT{#0a116(#^@mj@YJDxCV@l%ZEaQe8^xx}7k5A{c zErhT422W>ct^_iYD~9E6zqqOW_;u#aM`@HW0n(*Ar8+R7KIo*Cm3}TTc{;{KhryWAd_XK4CUnK{{$z zzx*CLrIxp^Jtew5*eN*Kz^4=T^Wyjql_TQi%*6XGPPrPe=nE5EG+ufpBaF5_?2xu7wT9RhFq= zkWwXX&K{x`^}SZf2iuII8HEBA3ep=W^zxW*+WdEk|rGw*fno47Y@GXzWfZ^%8 zhhOQqI>z3y` zlnVdv0;wfubOdaanL9tR+wp)i`u*Chi>bb@O)a#m;EO}{5|0P zOcS)vIh7{&UwYT|o}Q0Zy+W{a8;9qdcz79k4zl;59wTUS=&-HcL=?dN|C_u)l5_cF ze@GcvwwO?sfOJj!UX(nOg-W|Vdjeve^z!B}vTtYBeEWx_2m2`9FuY6B80pXJ{OgS) zN>SG@o;HzxIZ}!^ksIRhOS-!9k@>8*{DaV>bCtEY%*CO9Ru?8r`E+khosrBEOFQr2 zpI`_%By}aXe)?ns#kQ`i1)?Kurd(v86fG(p2wc5H+KK2?6>r;2HKy9S<^P@i#g<{kF_6P5)PyziPkl2z_--;muO{WG87r=kP+?8yT8wO16S#xtKD<9<&JkV$e zG{8+Y(Ea7h7rvf>DxnacdX}BQOS@n^ZB}eE&uq}XO&Q>AmbuOF@fYk+TW0++m;4^1YipdtxV{TxP`vVpj#+DSPhrrxt z=+Q9DTuwYEnls|U$tQ63qxJT^F&y5O{aG?+2ny^ToU6*-jK(mH0eUfpGv>nF$4MbM z0sy^F3NYR$>amzODfS$PMFRlV2!Xvx!EnkjOey5<2$ZuOt;eJjSadB6yMw@7SqO$7 zR1Kz#=&?Ux=(G^dKWOW|6p}%5VKGO@0G*=u@e=1>u^xxw!ddOYuyQfpTNI80hS8PU zWr3lW5!m~!dd%$)2XDq>{(F0Xnt|Ehbz!r~FvdEk2|&?)VfI_^vpWE?EV}~=P(lE5 z6}gFnCopkX)-zQ+IHc*Sj2D!fD!N`Mts@61;8RB*?)<8Ds`teb7SXKfrHinWX|RY zG+v6m*+HOECjiz2XS0g4P33IbVi-6Bre|3&z*Zarymk~gb4?h!@d0J5SqnYRCK>q* z&fZ1PKXK|%G%0|-(!`mo;taX4_bF9Zn_>~Ite#x{b_@j+%-9;y20m}9D*3mp0a7Q?_sZ+7tmyCQl_W=B>3Z$g}(*85z5K0sit-I&$Gg>&rm0Nh5} zGrjS@RPcJ&0V+-!K<{#={na{c9jY@m&^xyFu51{zxvIDJk}R8fM4y z*${grUXK|q)pQ_5GQi0^5UmL5dkRvJJqBfu9iXJADKZwMnA=TQ4oh{`iLo1nAh1z}l~~VB(ZFLt@7X%)cBuiNInP1036DCLEh$piPmpBt^CtX0}Qpy>mHR z7Mwjc(^HQ%6%X9nvDM=Mbh5w@!KvLvVE6fE9}6Y|pxVZ>?=roh44RAd`A@bAjAB%p|nQaaN)1?JiQ6RC%7(KMn)S zBC{q{;mh=a14ZYurpGoZQX(51sNNpwz^+n2qdJlWbVwnYp1yBgILw1EQNsdl3G4%b z>#<0{P8URNFwPNvn zMQ&C73J7Rfa+g)KWmo|2#X$D=f62O>&@u%VfI5N$uWassz-J39A>0H|5 zTvr5w9x~1dLI<3E6#oeOj~)hSx08sE;Y*D;(wf){xGx!P+_b{n&VW>fvA1=qq98jT zdTB1%bL$8PhTD1wDH~#fUi-#E<6+dKEKnn>K?N1SfX~8~_ORZo5*T3IlXQkbqz545 za3s9!jg78R20hf-#Tl5U_-Dc@P2+O1M_vyFBEWGW@pJV-XcI7Hln^+Z>*Bjj3Tj2X zpiJY#9?U?g)Qo&IA!p=@Ed!b9T;({z7*MAa4lu&{Mna_wyRAO8VI89wEE+m)dVp+b`C+>%$o4h zxm|5kBtth|nGnSw)=}3j0#w2n1R`;FwPt`^sv)gKuHWIelOi2Z0dC5t4&EGa2_B<6 z1NI-#Rk<%V@QqF88J@nFSzJa7Ilh9>$zUV*yn_jPjA2Zmu3nd{v7c@lPNav_u;>t= z2c=fvvMOKWb%>C3Sn$ji70*iyq}37zSCG4DIU}?c(CY8dB}O1-V+61Dd-ppql|S(k z&&YDlEnIi4T%=whAJXbZ^ht2O1E}<`4FPh-r2KdW1hjn}yiwJl5#6;=M^y~dg;Mc0 za)IQbF3MI0Y!tf^xHnnUwfAo-y$G^0l@6xJ+TuE1ddGftgPvO23iz;832P%5d;f~Z z#>(W9Ix?mMFrXX9m)X|HC}iFDv(AAVLtVt6-6>=^8YLf3W8a|y{lG|IkMO+!X)D@~@wjB_;4@m=L=GvXquh3Iozvg?o(dr`=4#M62$xUdZ~#k3>cZoF zL*gH7B*exgsg68@JFhFNEmQjNQ}}rFZ^=yWV!#tau5uok9a!A?H zmR=lo;U5A4;C3R{p7^?gR(OinapN0t0fYcvP}*`mo5Ii&>b4Bp4hR&vvgJi$X@jU& zsN7|Vs#hjAP7BBpiL-Jk0i>RMN%tCTGZa*R;-?)+T5gF;j6Ua1P=l zFcQf2fn(bPIPafsjF#fo|)b3_*4z3uR)ynBJ_rH&g+tyXpL5Fnzo-qfxJw00=Yfy_0933&Alg1>w zp_i!lw4T(7i}g(J&HQ=-1TCX4HQVcbZabgL9%fv}f+88DwK`Ck$jweQkmN*8NY#%& z-m78owlsP2p}@dBCk@b%4Rn3FFU#xx&-3emENy2)-cAyvgI#H(n>qEN;Ol=1LsWZ2 z7@oC%r;Bgey+!`lCek;YAKdg(yrUgFU73q-vc*JU%sZC zckDr<9htgUYmV>S`)d*YVx5+*Iq|qkz?5`mq?40UMXBGK+HI?$+*G^1t{NB59CnHT z5jtOR`XTE{j)04tb5R{!$GIsEWzj|Qf$qNy--A~vma+S0;b>#Hr_JbGitDG)A%NFYkRdR$Lu-#QnL#RPQyYa%w@uI!s5|k z6#EW^uY~22+(^g)A7#kQY~liQd^xP~Nat0W&;sv?P(Tdl4f)ug2|OA*cU}QU>3zWQ z@Y+Lc9@TsS*<``|=80`q7cpzj%fT3VvR1eaIa@%^uIgu3eoDx(@U77h-JWTD6_q*7 z@WBwVQ{UUE0ea~2pWBk^sW9%veF6zwTPeIm0ENN)3ZfJ{;p(dd+CziTg0U7X6jC_1R-zIV|@rn{7O9z{0W&qes^5f*^2z|Mxu=)bw_m0I%M`dC4uSrPmK=W6PUM$PF9XS~i!uL5iLLL8?gdl#uC0w4 zeg}k`8b5wFuQDn}JeNilNlhCWUnw7~0Nu-t!DsHxbm3-93I&XRr;)=<{Z~@ppqckU z=fG817_^6R$w~%S{Y{7X_t1&y$#E=W_eGXO&k(v@;7)-B$Z>`4jsWvu!xU~sUI<2F zqd~icr?S5jx$YMGXG?MFiNp@PGv%Bx;CSO^-ku#g%)cC$7Jdoe)P*Og*GIGoM?stR zq{7Fscv#-?&o_S>)HW6mDZ}c49a$qWyg0p!k*zKJgp7Myjc|{cw zy~c!s@;BI}#$3^yrBSI75!GE{C=`;593++@E{At{W6n#3rYUQTVRzqz^aG-2`DWqq z&Pf$8ewF=Sqg9?pxRg4>fQsf5b?=DD7{i~C$N4!^|Kc6B2URPRd@0TJ;B;=^92ST= zk=9n4E;xPuWKV4T9#>NM(1NFFz(M%^?qy^R9=bKEt|a_5{~6^|ex4`scs4$e6@C?Q z!L!Gk#qP&98|`taAno}+1I0~0o>pe*yTTnj9d`P_5mJzfz-1%YZd$7{&5)!3PN){2(5iG8$F4l_I~@*t6PRQ%kGH->(Dj|;wXhmqI6I)y4; zaM$04@H;2z!7HOwG2vLT6W1Ctme#NC;I}kG%3-2L5HjHGJc|xF*K3wfPfNG1S*px1 z7J6b9IzoqgtayVO@7y=R>saq%$G^Yn#K#&+`?HoOQ?Wzj6`2$JOYlczNAzGHUAd*L zyt)viL)!8E*k6kTuPdaLd~YBCQSnLnoUT}j~4|84i za2wm}0OChp7ULZ5ZytQKLwE-ATx=krX0s#s+_|2iy_tZ3_`Q-B+_8-=_u1bhaoR$~ z0cQuP`6$W0Ae`7#UH5M=V=UQjBB%VU>V1ZxNoCwfWfNm+E9vZw{9UCaRq;a|R>SzJ zlnaDO-K2)Vvj)rPU+Hh$o!9LiON9?L7m_loC=*mPl$|pF3M!v;~z@`v>#6 z77>Q2km~;3CXnE@HqdzZ%eK!4!Wcu|*fsl!+jiCo57Wk8D{Qqj&A00N8G8j6B6a#6 z4+*%Mra(TORJSFaRn6Sc*7Wc0EUZ{dQDs2F3@n17WYy*x5-gX2beQNWbNLaJos-SL zR3@2N>*=rl*F=0dyD7d?qV;J+y(LD6+6IwPL`Zc@uT3&q5YHf|w^QU&)mt8T!CWXo z$n@;j6DVlf!j{*Smmo=(9W6eXH+c~T_)&JzV6d?)*cSSTkvQ&ck6!ylLNE%te8fyY zHlL6qj}uH%cg-@1Gt|pU*{b5Fg2xPv>C*KuVw--dc1mF zvF0!L^V(Rsa@A+>V^PQ#>JbT3nPOTzz*vf9ttJ;GrrAS?(Zc zPpu3#c`S4DOzFISD$MIME-cjirx~1!BlS7<+4x|2A}C|3BbUT+k{{P8$Z%2IN!gLs zG;>@_pQeRNKur@3fz%Fs3?R|{yK1x3#A@Y68v<`%^n$EsvNhhM@Raq+NLe+qFJ)rc zo&uS9&Rg*{VJ%i~a$MxdS7VmFy$J5Mu9yJdna%a<@4bU{y>XWjp!~IwID`)a;lU$cVrSTW(O8%LH*ZXi;99hv$8W6D_LE+;QaVGJ z#+w|RxaFqU+0K|lfLqoxO3vPZaSZr^y270&^jfg$ly{hd^)LM*_+c_NO%qzO=sZI8 zUYYPIE^b7jfTKq&Lw=f0{pOJR`>Hy!#7d7#9!Ce5u*i1~u}dGgRtKdz)GfS{ z>nk4={Vn&$C!Jv#1#6(tdc5{`-i`HI`HC=kX1(PqM0x4zlZM~*9|UjEro2v z7g8^G?@fiu9S(H~jW-=f!%g=FPx5eac0TZPp_|CZKXaq}*OmCwRkxBlAb;S|iywlo zeAZ}MM(E0?FFOFP*U2Fpq5O-GID1Kb!dApNm(zd*@6*V*W8$*Q8PlEIia7F&v|^DU zJ^Eh8fqg8_t5D#MHnID<_$2uUq{CT2WAw^-FB?2B?}eR4{`h$OHb|cK^9{Ve$vD4L zU}k2$NzU%Tzf-go3AJa}du@gL=lMQtxASkbQn{+V)=tFi2UKFWzuzRyN2GWOjQpMT z1=i0!(G==pN}&Ih+Hz;Eq~W3pws^ag7PMW=g?hc>_1``tOANLfMVPUeKRrWyPLH_2 z0`FP}ZYErm=&4yB8QOpStcyPfU-c}lVBDoQVEy^9wB#%u$8Cr!NnMD{S!rE`sZ=n` z0*{22tAhSM!KHF@ohjeYOx_;NvwGsR4)}XKG>h!TZ``Pd`BeTIe{=bA)82EQ@>yJt zPVPLe+3}D)@e{x_iI%|W}IPeAvKx0Fs zxy$;SI}1lt*H<(kahZVzVV{fHhvmIrcE+@Sw@Oi9XR9(UxXq=g(vP42<8Pldk)|H4 zP)oUWWCuMfO?vZFi3r)%T!zCcb9ehT&R+0}r}RurApv=0Nw#+6DIMqdQ_I9YyU908 z45K6wx_g5b6tT)%-1cYhPHq-(%VqChWvEH+1NPA1%FX7x_7CLKr-c;4f^O3vrhT=l zB3kOe&EvH;Z7Y8&rjC$*$_syi2a1Jn%*$Tbdgbgf_?768_TwSZ}{a?1lf+lJSKtp;}y65xlz^A;F2fYztYetC#UJ)3TD)%>2jJrob^X#dD2Zn(|PSC zIkI(jxm4WE?2`Nf+64V?QG~yyabMNKl|eAUyLb>`;uQ+8GevtCCy~xlFz)dOA(4us z!p?u}*R8T&+z$pebrw+GUI~^*y%A^L!FpUih}w`=M#cm#>qImKoqKrf?|4PX{c{;t z=`G4D_phc7uWeY0op<)~Nw|~SrufCkIo9yMTx*#?pPVU=lM;>}D=PAj+A=Q^PpQx9 zuzINs?k8DgetL=YF@A%tNS#u7*X$TjYW9)!&v4=^Z^fD`fXtEY!9X7iw>nWL$)&oz zwnR(Ik9H*~5B{#FmiV_r>CbNrZNSMAZ|_Znw_zTlP3u{g*MkZLmg1-%K7BU= zDIG0@8gjok1>XBLT18jeax(^!G}k4r3``NvME5G>qn{TnWiEju{xBCAfxPLhg`5cQ zBZfw(dnM;zDNx*`$3orSEDS#DI$SpO_tX?NU+xQ50^5Q$JU&?$%cSo-57_H{-y_&P zym8`??CvL{3`{=yCCtro8rg%`NJJo_Peq?#162;{}CzR|ZK-if1+l1iYQb zqg5B~U?l{^L*?W9XU`l=l#i_VW}nR;?X1(DCaYaOZ8?!v*_t(#+m&?QL2;>74rad0q6J~qd%q2PV1)aqm1#Yet*~q zWdrmiSKT>4YAb1{J7Eqs5GLGpI=xi&2zbAM*Yf=g;_jQ?Y+fgc^tFM^^cFpIV%Hd{ zLt}DF=)HX8PK!YGB}LN*T0(o?c0~#zSwEqX-sVl-wXe*+NZ4J zp+a97Yi9d!eh)wf@qBZdaDLEeaZlB=>l3ms6Iy`W{?^&MWpB;v-6hNX9gu*bBy=V@ zD=MuOU(x?K&o`i0cHE{pcr2mhwR1l5YG`R+XT%FD!E#*IMw6q|J0Z9VKumg*g2^{Z zF#sNloze32xYa6O?u0D;or+69nY)DcyE;kshIxu zTsCmnIIBkBqRN@mG@X&hYgtweI?G@_@%lg+5h-EU;JhTMYYW&NNH>`7h$@nWOYfe} zOzUXELzrdZP0a-7ytEbVLcBw(ZtRJwAmCi;e7pX=Fj-WzP_~X>-*fn^;Lnc_arPrv z{mv!uT#F4;9jE(WD{(_2C{yjHf#?wpGCugMa6qMJ@-^ zCrY|T*em#LaAt|^vC|i9H$v^|oX86`KP9Os!@Rd{aa=8$LGEL&;7G{SviOtl$>9g9 z4L(0!m6qCz4@QKGX@zH3Kt6u__HjbC+olgzRs&f*TcGy_azxCJy>UC8vAjj#_aV=xeHRW`tf3=T3D;TrfI0fe}`Y1HzIolr*!)Nmu7r*+} zkI=_i$|s!qP9MH$P1%{#6O=qL%#rMPd4lQtr6W zKr&vUeSdBB2QvtV#3u2Nq`yxjZfSowRhmpRo-|Ht5sX3WjY!NvRg@Ez<%eTGU9l@wNN;QgZ+~lYg8-JB$eY8I4!d8? z*&({cg_g)zNY{lNb~X{MIGjo8j0P?>oeM31X=v-H;fs(KOC=}<+Nfwc^gXfr=iRK= z3J-SFFb^M{R7DPOCrBjiB(FJt8WoT0m|uc~O>U(hXXy@#-2BFr_&2>n*8MGlp4nPU zQU~!dBencm=n_%9K&Z}xT0QD`oBV`@XglH-yAmZZ2j|vW4Vi<3xD*Ayn`NF`sWAo- zPX#f?RYw~BJf&0^Z(VBAG5*4K1Xcw%l!!H zui!CczH^!3q!4~+G^b7En5K8I-|?7dqmE_&$z9ELfw|ZKAImbsg?>WfMPn}X1}*=J z+6dpR0iQo%1FLX~iaO3QXcV3Cj#)nUf^v9*^>*U_pcYI%ZXM-zvXT1HNRY zt*9g@iU9*s&j|A z-f2h!#@7CLAb;BA^hQnCdF#M0c1lP~XRistF(r$b$47n^U&!n)@UW%~UU_a6^6sC2 z!dxmU`{E!C%PUfTLra# z=*4P?qZO`mp88BUKHdkV;*5167G3d%4!|hgi z>_w2+)q2pxV@$1N>AIk;N$#=Gt1j)Wn) z*txhE5sc9(f7yHKN$tToffpb7U0Mw~(@Z)h9dn9+2{aFsIdL|VZf)vmGPo13)XDQV zMg4@)z1QDVLF)-_H$H{a-{zKT<{vYX5k8vUwD}ll6#Q(eSAL;vrwJyqsD0{b$G`O; zhp+mp=Y&~d*DbE~z_E|{MJ}I*?HLI#B$NogGYk%TZ*V$lO&ZsI&-~20Hf4FdS0(Dd zcv%Y+k%#@o`Q*tFakU14@4hzpe!|y6^A}rYuaVmpuym5GE%KcA88^l3$fsH= zALx=crlJeVPo6LJmTsIhNr9x|QUx8^b~duG!y@0lW(|EsyN_!hKI?)QY>?;D`Bqb! zhA244g7y8p%Mp9La-Aw3?iX8ZaZHsb)O)a`1p!>_)X;o1o+HRV70YA?VNi3QGtWXU zlXO*gb^cs(`f6#p*x<2u;o6^56=8cvuchV~ZSW1|!ALIZxrScZuFJ9)9WZs4#uUiT zK34;A@?68s5z3)Gvzp%Q?`zd>wO6B{vg%_lWs}CsX$fCe1_<1$XwRJQ`h#M-{sY`R zEg)chU4*B_b2_lf+^YEFN@BHGU}f~8S>{=5MZ(pbxxoyCDeaSyHKC3%TE7!sbS5+F z(8?31;>o3-X9gv(FOk$9p=+y3yFX%1&(T!Gp)pww2!Th%+WxPt)%0TVZcE3*izOom zcu!O#iQ)HcjcUePMSc!s3Pj)a6p5U^(wYUp&lKMwZ6!@_c+y#>MIK9XVFSj1Kye7H zG*K2&qM^;Z|3)qM(Y3x(tX5yp%K{Wv##VS+p!t%sFDPF(<6ZVsAF>$ZhIX6LlLhxH zI%dut@SgAe4m?h>M=$p(-5z@p9(cGOrJuL>2$iv*4PE;$CMh!L!MpRbGyWR97w4LQ z`nntbzqq}-;_Hn~Q>Vn_?&EDrVx6u9wO-_Tb-c1}^U(%XeZq^c{`lKv>SflH<3fJq zQkEv2L3_Ade}9|{b$7W`RpLi%j)Z>npcj(Qr#7do>2I4kkTRFGn3*M!uue>8Tu5pT zR0R$Ay>31+V{Plv6MGf3)Dt**I*K+7pxrb7KE-N&dwz+S!aI37pvxj4qN&B{w35O2 zC_@(WK=Ro}wup(TOkP1hdSdj=9LCtcjV@W(_KNr*kH;F%7V66l&zO2E2d%ME`jUTa zKLM&H|4r*?pN`ARuDiFOaae^hXH8bU*=^`qptZZz zwmGo^x^3s-0=tg#fBs?Hr%(Ff`Bo!T8+725-1(FC$*9tr*M-$E2l?l_SDxK0eB&ne zG5{eJx;lYO|6@C=W)`O&&IKifjD{t!a)l0}L)&Kf(7=8C)5lEd@>(r_;;3STWzm)Y z^q{}q8yo4Gevha0ua{GITo#^50uk>oi1l81cVNxuMV^0SO<|_Yb}`WtN|~$XJ&$M- z%7Qxm*_VIstW9ZOtEXlLeP0wNbKa_PiDLy_gYQ8TuU{`%)t-1?(nIdX&s2&2e#?Fo zBoB2zPgKrd3a`#XYwKJad?)L5xc>Q~xuStgI^HyjS2wO1t{CGKw5|Mj5V%`OXuq%% zz6e^?_B`(|kY?Pgb5)Hz>TKj1WyITN5^i*-GLBG%k%ce&=JO(x1-FJv~ zWVon_f${yF%wyqo-vY_k(l3U2`-I+YY^xfAyenDSKs=E&lLCYNnW-!t-Q5*#rr-F* ziElM1n#p6p~;8sx~;uSGIs^B#eN2?xca{ufpnwG-*`PMR$SC|5-GMg^dnIX_gEE!5zpj34`{Xd6Q(gLP z>rqqfReuj7)S!Cs`(=eRfyiqYJ$d2b6CN7gS5Ym5eN({oLje9w9Sqal;g&O6N@dRA zX`0*m-w+QJyi+fXb_*uOAI`GZ{`V1Nb@UsQFLd18Ao6tW{cGg*I(68Sg|iR3ciXYN zuPmSCm)KsN>?t=D+IXrJNl1)B)G?nc@Ick_38W4sR6#_v{8X&_l2Tvv6vVja3hSO{MZ6UzRElkQ~ zP-lN}tMHG`V{Pw-C(bW4c6H{qT$H?(x6}2NwnNr_{qk21|E5CosrycY`CKW!R}r5^ zyh>y?@#RH>j+H@tT4JI**hgY7Y=vD$t;hix@=-Wo!2 z8+cd~f>-$=>ar(xdP^t2Z`H!@&$8DD4Y;}7qTib%TH{Z2ebC(+@n# zCq^baH%1LAC>MFW)W(c%+g0-uMqc0FUiE5{dv37}e?&P?5<6|nN3ejnXnO8Wdbn0ZSFl~cv`UIB0z zNUrLXQXSpeQqjj!@l{Xn=S02iKhhqV-f}T1iw}Qaq6D0aIkj&4NMIl{g>)!(_30qt z)uxxZ$2~%DiIR)l?D!c;erWul6s*c%5}! zxp0Q$6fT|q_Yr?(1@Tm*4R_0hS3X5?>$g7q=N`cSD|_O$b47leUHqx;b<{HdmfE~| zNlknF-JrWYYDr!8YR67n2Xq@8EI=6!cf4_nepWuXmr#x(Bp-h6+<5kW(0zVC;H;FL zdb4rOg&b+~P`4Ib+WE0JkixZFXJ+f1O4=*!2rQVVa{Lgl`neIWBNI~2HGhEyOQs*VBq-^!tvsxv{m^L))kz0d_z zRZWZl?68B(!x;#d$|u&*r`%`s0O}y`iT{-SlWT|1Qm!Yx^@rygK#Qql2_{)tUt!rSQ^?Ze4hDu`xK0lXUybMES5$~) z_6N!FlIZjlG}nvhytA{Nq)))4s)KQ!V`aQsdcH+|fnlkTcB4UIutkh6d-0-uywje2 z4qb5b9vps$J#KUS&+;r7afNb&!aqJKr>`;XU&zoBnO7=}NU=g`%el5Iie_D<6|UwY zo6F7+A81{MzjhsXJ`Af!ilFdY-JuMT0u7M6_+~$FqvmCi%Bd~QQQ&s1;L}l)?!PC! z@Fs@^NRLvr&Be;J^&ydn3S9rjw+zxLV_gm;&Ky^IPZa@2p`tNNu zG24U>FA@H@Fbo=!;!Sa%_B$GM=e*ERLDr$KeV#@I#)wyy1MkN+{XKj{j8kF!4GT5% zx>+q5q{LWsaOQ_w835@}?ZrGBlz-a5O5ohV!uvK_GD(poErxu*e04U##5qRl$ih?8 z#a;tZpBSS;n%t=TwQGxz=pTHhZWo5usY!|Hdle^iK8=-YH)1VR}!D5EPb z-y8xKk+Q86?|(t!-MJfY7w78SY#E@SbolCqLtuo@X0M1P!n-*Vqu-qqJtkhgZEqrt|V266N^n)k%~^27Ahg%tPm==bAd-Co3!GORKSG~bOq3TmNC z2Ho+kI4+&z-{m1T#Hqh^uj~S7dDI;rD(`BZPX}iLA~~nB zQYAEU#-@MD06N8h%-nSHeD`KKp-eg8@{tmwSnsE%%!d7n&-#0pB$bI@U=OYq`I9Pd z*EEWAn=VvQ6=vldf`np%nuX0XWBO{o=9rRu*^bWHVR^vYlMZ?Hu}(2_%caC9o8txL z;z_EXjcC7IzH!}MORctUTH-&`S^U`LeH2eYwcL%1evyT@%VqMPSyHq#y&BtZW%{d& z+vHz#Z`kTroKF(MTFn2xf!uIF+sWn1*Qwb!oRMA={BAfbL>OBq^_rhHK7A-m76IOK z7>pCLqq1{=|CZfU2+}wAL%o9MeEr=D4%6(g8Upkz&AIzcxA`nl$|o7BLPx!@mw)hC ze_k_>kVg6FOdgh3#BEmXl!&|_#(*A8Kb8!rjO3ct(HL`DU-8(GO%%z1dq%b0z0Iq4 z3hIp4X&ZexPq!}QX*nl5|DU^9fK-GvMo6R@+8sLr6wRg|fix#wzMDW+l##f3EB3-! zQ`v=4qD|U$Vnk(l5!rP7+O6hrv&%A;a~eD^$8w0t-QxE>1gnIcv?pHj%H5CeM{=Dk zaN^P9182zU_e|OSXZd*&8en7^*RMLY6xY*IrfNgVBYAI_TnEig8C62f3UYlbqE8OA zl3xpJ1J3r^O0uZTU8K~@1Q2hDReP@Ys7NS;-Xkbex8JAq!!$zZ5>)QAD0eMWB1)95 zk>3?kAC7qx79AG&oPmtBy+l4VrYIS6?P$vO(FtV7@N**){Ikb!Hi;>oT46_e zc&6=jch_2k+t<&PnURNoyI0J#^FvjX!rpf$0cLle37 zU(U7HfZXqiPvqKkldT>s^nzd~bCN$E(=QI~Uv;-u4174+X9W%Q58&S@Pp==iwsrS# zNh>viVpML0ksT=gPtW%>`?ceGbdwy5%`0-bAcQ@r#JFS|r-jey)4W<;pCBL!6}i{& z1V}SsnjF7BRgW)Bo5?JGvp5z){x5t#Mr_d_ou2*a)HXff!dZEn<_0744)V+i?~0q& zm8E{>bvr-JpT4S~M*m91f_nQ~)LKv91gsb8j82(pc|v5Ed?9iTQyzcbEF#75tonVF zyHY_~+#5qmkjI+D-CYCQa=~i1{dH@#rvR)OJkvWMhj6Wc?;=>u@x2ARI+s0?h41$C zz3r1w9XSz;Y~1?d!OjvtC%95JeYx>37b5ZcAa^l?_qhtL#AaM;&17|zoGvi!8Xt?h zrtT^jWPUl{`|x{h#}yHsx7?}h*N4h6-V2HPN=x*swSK~kATAfo@V8E9)sd2&A>dhi zSjuFZ^xxZ9Rn+Bzuyb5fZcrPsBMTQqL&}dismpG;nv34qD{6E1@DjgxdlFkaP?U3f zqbXKhw?Z-M(i-0JNM(k)hRWUgeSkCgVMIDabvMKLK|X%Y)!xwmm3Yj(8#m~dt+r6{ zXHNf#om|TIaBSR~E*^NfCelJ_ThIU!avq{2pk>)wQpcHrjdpI+%OAJ@_C4&@Vs)el)mw&3q|m2n4_NQTG#THm)+;$4p<_u`C}uE-566-O?eJT*#S<`ZnASd>+F~ z3p!P5$Xn^x;!gUG(j`jnLhmUsh(11vz`#N?_^@y~32iTnuf9|)scoiH1-xb|R&Ur_k|O{)ozpXih43bPSR;6S&>iJj5d3+kFAdL- zWTM>HFIH`4gwUeJ%USVh-`zNud{s4k#n9XUibK0DV-V{#Er;vO6CvVgp{xf(kG;P zm*8QKnx`VI(DNgdKjm$Sj0%l$jR38a9LJV?z>iZRWYjn8Ak#^7hNu1uSF)!b_A2iX zd9G{X0!}<7ds@intSVdj`A!gCwH1Hsdlb@M(uaQvHy#<2kSIur%{{6L;3GLYPIb%Y z64MAtVhk8On@nQvQF_5 zh{tLpgs}HrwcVepOlKRo_1^I)Al5a%6wQw;j_mCvi7-#rhRL(_5SKFgrtE)h9*IUN zIR`sKO0GNgza)UI+{7u_X(D<13s*RF+2#Zb$Pr-rW=~a{Q5-how5aL$PP;dGriq@x z$BdaL$Hr)SrNwfJigd*hlJ}L?;mODV5UlT^#O`S~4ggWt)F3go+&e1Vv~S~d=&tl5 zo#%mBD(Cv7`KFipG=y7gLZ^RPG5w{A5j#LN2XIeq?J6e@2cNgU04}vJd!ya?5=&Ne3uQ@t3DwsI1Aew4UYBBOf4 zaSc|P5)}e7hK%xxCX|0OI=w$zVlZ%`(ID&Ix#T-9`I@PyE}OOP(QD#ANUW|xudgj_ zrVBt)m7V%h4(H~ByZ|H>+v_&3NBZM0Q4zEa*@h%hyxJ({mg@uhETopbjXj^UBg?fj zPh^m|tMYq5^S1OJUlI=XFOvDze0C!rv5`F_$olh?4A!Ea1DbzjWB2Kt_^Wyj?6^Ls z3S@LOu8USR_xgNBPFLPYE(2><>m#*r{UUL?x4e~spF7X!GNFJ+^*cbs3bLd`JUB6@ z*CLZAGZL@Gu1?GxzlPMhT)D-o*>A8&3Z<*YCSC%iSrQ2TgD2Vh zllQ1%s=#?Qg6)5eWFW`3jlw*++6w*M(lU~9LBGy<1C_lJH35clZ~rI>?*AMC(CO6g z4=AQ1I=p>rqIw5;{ z@0{|PGOyrb=1`>bcW`*6=jS>x0HwVRu?K~iqaK;I=|O+L;E{0i)Cg>k#OgY}gGDTU zhlCzdxBwDC>_Q<9i4qyz+kU?)E~5>OxAOCmocCmCx*IeDEasX-ihtc9L(*uVJIoWa zEl2&p@LZWE+9=&#ewQJ6ziWL+q+^s-O~M0MF$t3OV_W^VYszH9g0#nK4`WVxVY~}N z@;WLG_=|r;(slk0zkk`z+VE{x+?fO(w)`Qg%45MOk0uHJ)9y{=5bI)%jd!1iv?cGX zZR~dh^2?SX!53YTt|8&{j=PFvo|cN64T)rkoKaDPv^BM1>Ghd|TU^SAq76h+<&Kd! z_5G!z!cEx=&ei>$)l^Ano#kO7;eabkf!v%7oj}cBw}D+MsPkkX>$%#u_=px@Nz#g zAALxWK*ZZPBvKCY9+jg_QL7PPLE8I!z%2HD7i7kMSsz6Xo)xj7x6l&H&LR;6tJj%i zuvmZQ`hc0^g{kiu-u=?wOaLzWEo`PCd3|{o=&;HBBE@x}taEJAPcutF8>I*KTm=*^ z$=Rcg^p3I@h6Iz^T63^2UE6E4c|mk%8}Weht*fdvrY&?nl4obQkh~Do=1!zvf7$VJ zeI4%_+on=WSvh`(#b3UFA@O45`cT#ptJi<;>9 z#;LJ!Q}iB1c%@Ks&W>77{CU|MKJSX7Qzzc0yKV|mu6I@f(FRX^`5;LKg>cR&tOpId z#)h?9>Q+lWpYk*c4x&ma+!G0B+EjmM8~@NF>)2?+GODPt=CjqfiDUaAf(G+(C|%)2@F}FE`A- zIXf5+IYhDz&ut+-2kU>MwMcd(z4@h!hpwW&+FbPL95p50;A(6DM9Hm%23H;S%GM{5 zQ|LDzA;iF|9ln5|>Ctq<@hBsMj29G}YAb_2v=Y zvkk{w`PTi;A|9M8w^8lN-z$F=0vNRNc1h^U>36x?9!I~lNI|orh2DmrJkO~#L4L#f zQdI!2^7o>UQ4+HvLzFk0vG4~Z2puX1YDjnkas(WJET9_ODH7RtJP1+i{u2AZuX7I0 zO%0^-3GtGMh30KJsKyJmM?FyAtYT9nqHyUYP-;*%T;49D&Ub3wE>VB1PBk_zJ1nDh z_l`huTh%ao^0T^);x1_~;4|{j)SE>jU{Ys+a;?Zhz0MCTe942(vx2s$@O=JUq&jsz zdP~>a)rKE9ZzP0z6x_PWAu2J<)E-593DuHcDna_0w)3FMgn)~E{a_dEdGkFUoA5&I zkWmrf)1!XMc_^+4C9hldn>IbWk#TTA_3XAj1Dw^6zK}vtU>Vef=L9iTwS}27~ z;MNx7m~(dI-YA$>z4>$4?3B=v3T-dx#C_B^#SE5Q*cELsaUA(O^QaM@UpiRpiuD96 z;$~=hQ^?c9yj9$q=)qI7du#`{a_%a$ zTOBLlM0ziMS1D)i39Pa0;+p+paJACYvJJNLiixWVgkOIw_0fm4VZo{DjR!DmHR}zw zrx+#f4@G45p0|@a(Ck{g<=gEUt+dkdnzPsMqXCgOuZ6Yl?aEmHr(lI|fzvw&P>WeK0(l8FPJpcuv!c zL!wS&jt!f)O1L#@7`IQK)A9ZlzvZZ0#nQ{~8C4C_(+EGr)XX*gNLBB>Gq|5CBg6>s ztK@%cMk2nPUpn7DOGXuuTMClq*w6%{hO2o~Q2d=9KwPRw6Y}2SZA~_9{HvFTJ5QD& z3w_rJxT5z$6bhHfcdo1plFuizb4lorRkMMFuPC+XCst_Ou{AcOo|1VC{v43FZ{<}+ zeq||)+*4?voP&)T+q+khdNnd?Y@9d*HX^-f#ydf@q}T zb+qES^D1YQ2R-0N0q*)8nOnEMs|4qg=M?j&dI=e05%PVvM+T}#g`1qwQMx1JS;#|J z)p;5Z+$u-DKL-Z+^aMYTQ6Df@&W9#54`)1}UwX1g;81c`$+dc=@Ai4Bq|>LKiw%Fz zL9Nf_X{?<5`;%)!z$Dv17F9O5HuF#wv&|}6k>7LepUlhAn>vJPeUN1efcT zQP1LzdnLw3BCq*N8yMQ!A*hY*(XyE!Bd~YWTzi|}l5KMYSOGF-qzXG++FosVYcSTN zgf}neT3+9MK5I=$Ko?7Qnbf+4F3Nx388w}1wNbp?@Mc$=Q4%^a7-C7PEacc80z-)@ z0ZHbkuD6i{^KnbygerpqBhA{(BJc_?;kMid&jH1$SH?DEu(agh)y>&?^3|l5K!HTA z*t*|v-O`bAUt@>xKG!O6n*vz11eUscyP!04Ur(&iVui+v&Ha{^1aI$iPE3FBG%6%k z&Yj+dXCZe8(1a~g--8NK4daxITRG3qTN%ytlql5+=Ugu>zBc^Ic~1G4GRFp>Lnd0E zACmRR)948XX0Gp<<=6MUGrK3!-#g8tBy;ZT1%fpr4->`z>bnX-#`2{%NX(39O$$_5 zY7S}xs{WR{mw^GhUUT5^h-`nR&9`KcNJeJn)vLEPpHrK#)n^d)e<7zh#BqkF)Z$!>up>-`90F~M4D=BN-FUMr-Zk+ z*JhWDin){m4NREoTjHrcu9<5FYDsPi7hiiS(GerFJ1CvqNsiIRVoW23{K{iV`e zlZRG8TMtco7Dlpj=A&z4<%)BWL?E)ihXVQKoKn{3^oIaBKr-i=9xK>h-c<)K(Zq{! zKz{Ly;aC`^QLO@hZ)4d&*+yif+Hg3`iDaG-{n)12W|jw*y9#AP<~NG#a;~SpSK0}$ zYVHsTp2;dGGREZ2xEX&5KTdw>WnaJZ4l!*)&-JB}E~J&E1jlr1(bvKQ*T16*MZaeJ z*U2m8OPM)eMvWIBF`76QT#0q}a@kpknjQ5Kg-mJ{NUV0v!Rxk)pFU!CNFG_I3;tm+ zq<0(nCFzZTXt}S6GI$}FR_MD%z=Q5iO38p1)qRaT*XX`T+n^;Muo!MI}col zsZ+=~$C{dZRA>m(PyNpG;VREj!+Jo1WE)0kMjp@}<0#B86)kxungL4+X2TpcBs2Xf zM}R*#J%D(Mxr9pU9(_G|LDK_>vq&toZh!EQXEMwHvqSu(7QiTZC(8y{2yn*3^|j!&$qz z+9YT1D(~N|7_@vT&}n)!U+?{sHDK?r51O6ynAuaetf-`on$W4Cz%tyaFEwu?T9L5= z)qY=7#+@-oVVBH3>HsGXAV@tNaYon$-tWrA)YychT_P!2g_-jGnKvPcZo^_pui=Zs z4uZ6P2NnloT7OFbRB}cQIvGQmI6U}?1`@jb9ElcIzXkFscl@$Hj8ez>2_#M?MC4Axi2HOPuDAi`e>Rvhd(lPK}_BjPmf!xU6 ztU}+Gj%n7c^E=So>GLLmGRvDn;0|9|jR2WkR@S-$6o2Bp%H0d%HmBVvU6i(wyLVSv zGIP3K`!Z4(a%`A4GschB7yO{dhEuT5w)EsBQI$wjLD%zS9cYl!)}*PU0_isDr1Xt+ z;8ZWRGTVL7-R4<1fftLJN1NfcOdSaZeN9^vkN}>cf9J!qkURby?xOtCQw%JleU7if z!g(5{kAGvms@2A4_eCF-DX6GywYfm^G6wb%racl<@?tkG>B-_a6;(^^_EHrm{jhMY zH&s+}Z0naSInaz}V~d>ZVHQMhZ~DCpt|jibI@{WOI-2x`lu{Ejdt#m=~Y-gZbxE0NMt?aTo1!OvzCCyrP_9z z=YMlc9}3n!On0Sm2|DAs$^E7>(Uz$3_qhJk`-Pv0!jr2_ZRnTjErmX-A7BRO>dbfv zUG(wpRltmW%s-Gs7K*h&LqeS1BE3(2g*vRz- zQzBvL-BHqCBSVceoZ*rz9DQjO z2(OEmXK(7td(yMFfymucB1b#%iEmZ`=TEi~o9Z_Urk=Mx+rWhN{kFy^?c{ zcueun8ruNZrY!>~C5t3qncW=p$pZFIzUVt59mtKGgAwHEH~4^*&8Ud72ukO!^*x6j z-|xbp08bR6bP!ff>Hg}`$Oz0iP=8ixNksb__G`;1f~AH}ymHj4HTR8lxZlzSl%DMJ z&wKO)=FTY38|9+PI5mRvGrf}0$kh+EP?oD|zr#_Ty{S2po~$=p=2^_Xa!;Wx`=%HX zsJ@lCgj9X35rA?ZTk2I83oNtf-`63$TsIOoA3$Nv0V*m`u6h?fc(%EPVt;HO6*X|O zq=W+@{g!Y_JlOT6;E@k`jMba$A4+UWI7@Oy*?E#5>kdKt^2CCgz0EwNb$&kZghz4| zQl6gNHPxFi#*}%;qb~QE83&(H2R?5;Wf`!~^zVqGr}bfN=wi8Y4|+)62OnHMS(TdC zhk2U&8hA&}Lyk>^qccxFPk+9_%r9XqQ2TP_)c?uqAp;x#+VdWjP9^z2cRVHJ$cWmw zj+V4OxV)b@W@@!xYgg|TTrfMy0U@_tX~*30e8>0Hk;FZ|#DgVceAYd8uUv$=Pvd96 z?Mp)ea*&Rld&lBP%&9pTNP^U>JbzT>?2QX_Pg_&1!%5m|{SHMLS$|kcRL9s$w*+5R zld~moFkgPhyU^zcH=To@BTyS6K+uF@;p zOmd2IeFi2g{UOw0v~~HVyy1EUG6`mmSaduy&?HlTj8jSR=+G?&FG`!nOtBna4Qc1VCHYerQAlhRZ#Ek8Z~ zWX=K7o+Hn~JZ|260S6!Dp0_f|yLp0Vv<+Ds0#(=oh>~NYqa7J{o;grtMaF7-=Dy%z zF&&BCJ+qAz_J2gVsgLV8)P9?#)(MbhZwH$;ca^xE2dLUe@9zjZR~qN!k!=Qswr+ov zviQ8~oX*p*_`A(&)VZs8oRtR35uAJu{X5rvNljHY?R!mMr;^?3TGjg_RT1e{j*b6s zON(X3&AKOsiPlT4$W>r!X3d8C3^~$S^j?_fn)u$C^MC0~&m4=%@8qsh*%94Q&9%y2 zteKK9e(vd=1oxMjlV3{l-O}qpr}=_*#NqO6UibNFVzhMb9YDjCzgYStH=P zZRS{}4CTMuuxVRE0hNLg$=^{YtatA|>ZtYasDDe{CwRwNm$(`kSV)m`1T^9+ZOxg7 zwt0_9xst}o@gZ9WG$989aZclcDl?49!lVwU^hq^9+*@}T4Ytg)TE$C;ZX zhf=sLPd(TouvGS@R$9jR`G>`6b9PiUT+%ZqXG$z5f9G0UBHi2K8qM`lWJgwHjT!($ zL4U}UFmuvFJFEA8rDt2<&Vx}S_$8#55yDZ+fnzsDpqeK=874LAfelX^eUYNw87`P&q%r2G2Y)4V>WOf&xXWKP0$`WU15@4Rd8G$%nbx7> zXK!xAv?wt|0paC-;|aK@Z6@cBVN!3F`n-H7IRYH8I2>zi@=v!!++eC4S8TR{d`eqp zrUMpmXOrA6wH>Mm2GCp4XL3l6qmiv z&&<2iH{T$}?wf+-%lW~%c%`Pg%-D_7i?hrS5Sb~ss9P@St=0!kFyL!Sz-KawAOq_S zhnQ^+yEOOCBJ(7%I1AupGobPhPk&o_vUu32(PdSWJW%D=*jDhFz7v_C@*%Q~H>*$m zx?nuad0T~w(>uASTP|o*zq8r9ue`7E4bp3}&8Zq>o|4_|pY|MIyfoLmVKHOVujsV^6 zm)Q~hmlji_e(?PCyot&;-f~s%_eg$<_31m`xpFAz=8OpN|G`=3D#(0n95I_wDXeVc zqIl&AUMKm+>5CRRgdEAa#t_AnsCk+NIs}zt2ec$ zJIW(g4o{vVAi46*TA_u7wDNaG)@<&#w=%`4$1AA;SCb>4U$3|Po;SPXo@>fg)0l;o z1nqB)8oZX)*AkxKmY|Z(45SrVCn~_~O-wH%cPlMgic7UoHLuY?s7>Bm;&*WHeL-}r zh}@dNk%SLF??m4C=6^w7ks2y*lB3>OIk|FJe%3w3J3aBjiqHZxZz~-nb4tMYq{UspLHMP{~`rSxDXh zt!o67b&qXJ#Nl#H_o43OTq{e5U^08#Z;nt&fPs$W1{$z+#4FiGmiPvzS|YP zmrFBy!-n6ti+?(VXRr48kV=y?iWs}`A&j;MFMf^S1anJXsr3}q>r+pUSHCKITi=?c zWP^5`QlfZ!VrVg$vQP7OetEX@uDV79HTQv(=Em7=O295h?GO^B9cu*J&6dwEg)f$! z`;0Fo0bs3tz#HP`t2bC8v`S1Z!P}ZK2}r4j^vfCnJ%3($)ECK-c?F_oEacK%hQ!FT zw+*7BN8n^<)OWiduOm-2|+7a<7DlcjQcGiVvvga)a82gMopWJ=Caa`B7gm3J?1Go2#GrY`q! zP(L`Ym}nxoUE3>O{5= za^$KUy$VCaPkUQ+na7^_OjwWElzAG*J&`(+-+z#5n{5UmJbQP zOU}U}!Les&*-(_{X z8-JW$oDEE=QM^+7 z1cl(=OU8^gN<0@&{?0O7b17NxvSV8!j@^>|?&YpFN<%QKTf%9WD|f-)WlUmY6(GpV z-r!Wzd%RuZ&S^K2fUduyxBZ45JaGZ4sG&};8C5R1y56@E#HOn=|J z5B5={H@y)%)W(|n=%6}ko&{06&z9a5w<{cRX((7dP*K%QvBP;^nURR^ic_j?F?DYg z^~m2re|_bR1k;H}ruGipio##{JJfp)*P3foM|1Kcu}SW8-Y&8PQBBl+z=uP7$`Q~y z=R}F(cvF-)cOu`{o_UneZ#d|>4Mo3pGNtUufw~5Tnt6!(a*w*Km*n2u-{Mah8RD&C ziPudrBx~MPY!4ZzrIW*QW5%wVoCLJACD(^{yH*?N{g#%5T&72pZgm}h$Ad1Cp1pZ} zGTyi^BiAZNt-KAWMfJ8m-dE--Dr7CgGIt0!wYmh^+x}`l5@PHx6_qFs7(25!n~h(p zeur7mnhvy=gKnGLuQckaX6PZa*{jT;+*HzqULZ0XP9s16Z z9;W?JW3AsGnoxU6_Mz2(B=SnuFrJ^h#g0vNzMO-@+n7=L{ZJ_^J;6I>IQ25~OC^H! z&3B@UPV_T15f~`<^*O4$EB*5D;<2`W@2=ai0>KH&L&D`^B7k=Iwu-ieh$e zfE!!QHMAH(oh&cbjg=l_J8ml))>`f3wjrLZ{YLWX+S7+xHK6ACJ0~`|?Cp+VKXZ!F zp`d)asyEyW&y1UiZm1Shw?7IMpqA1@NZ?d+4&*wac*zkczLq!nA+cPFOSX{*mf91J zH@>GFwQOfYsNUp%-Z1%Ff+H%wRNi6Zs}9K}s;g9QSQ{ES?;3T<=dMy%am|>7dVVPS z@_X>iDaxE9IBDxWHuQ-FF-&HP>%d zCljAYQ=VR_sX`x!<>XC)m%3vTifyQ|lRJc}++L~UBfyaU9l8c|QJyT-&5n%R(VZ9t zxvQ{Uv~L{}6sLKf1!<{L{A)&WT6DItU@Y$R+`UMTr^HGf@XGk{@^=tmC!Soza8)$( zWX$$Ll020ujp4lTal;B9_&6^vuUn4Pg4l97skmcO&SP!gv^47X=T_^B~w2Zt{- zO!hVa2)ReO8o^t$&4nx_cj5>)w)V7(OeHEA?hDX7SAjD`{!NWQh9$PhlpwcHG@X1d ze5Sc~w^y%=I`fW#+oK%axex!(!=*Q zshJ;tHE&A8D)yHWXvef04@}Za`VUCN^zsDT1ZN_%j|*32->~@KAa!zVw8TE!m(p6j zK7xP}<+8U^P4)hrQ;n)x1#FO?EAw^{_q`z0<9AND(j)64(7Ra@rN`sWMe|m7@2SS< zHnoI?lDFl_f4ybY$_(7D^r67x@)Fb@#Z5GSiO|)Tl5|}w*o-eVX->5Nd)Ax6vMpUE zXOx*YXRPhK`}6eBl3?QKQLE~kI6F0U`D%I&XxGWpctW*w-EtB>=em{InG%iaek1ud zJNSde)M^!=YMNn_h3-mRvyJ$6YWQBVPv^df;~?zJ*-t9xhBMa z5O^@^b|F#pB)^Ak23=ZTim39H_K!HEbfR1zwON~$lY1 zm8TmxKlM8Q;!=HPZ_K%_6$AYsmo#TojKu=g*cKe4$pL-}bJ>mA#(MYeg`VkuYQ!h> zOtTwfsNx&U^+A31N_^Exy?B6&><6n2ZHW<@(xjxW=g}$MbmocE$3JIk8*-L^9H5$OwjBGk z*7V{p;|!<~Acy6+Y>8k}?f8qT+`cD~B!SKT9hmXVfl{xI$2n(bU`^J#$+6WuQDxPr zhd(}X_{h%rw)1;viBOH%8|QIii!NRYIK*m$%)9X}7-^iwZgWn}b9%k52U@cFoi|@v z-ifkTQwyl2N!z5w$Hnrx%oe^_pn9i_X{Fwb#N! z`^dcmWexF?W5a2bUeIegSzKFSjFVi=Wwlj5&brfS~01|UyQc)UjrFPQ^@t9tT(Ir1wkYv zP&2CBRo8U7_{o)jXU#TV?nH%&RH${4uOKke&-HB()3PVN?mmI z(d$rKGIet7n(CnEiviiQCX?F5>3wCkq-eB~yLlt=Y=2T8#SlMrmMN$%r)usuMy-PD zwLYf;sObsDF92+xX93q77*QWWaSBeb{M77WN*-K{nC0iuk^@R z0rA+>DO{ImVDond2Y8Qd33co|LKvCtIDv+@jdQ+PNx+vF&BkQW@Kk6M! zLuI{_z^zxM2@*<3{OB-I7E=pir+QDr=P$O2RTKJ&|Pb0_E(`NB2UxX>+N7 zmu(K&+ZA(FTt-LQ{+@Sf&0R3d;8ErVQ?|HvT-(y$T zJ`mb{m5<9;9t@-0*B2aF@vc0eM&3uoz(}4BevXatyp;~C4Yu>%z1RMF7bZ&^p!(7} zNk)0T&<43lM7Il>O~Q3su{IL z`7Ye$Cuer9h&)#4iuw-8L-0F)2NhIVEZV@9mL>j+WX~5}<}&P8e$UYC%2Pk8Y7IbA zjg3U1u9Q%s^OXTmkt0x=H{E(5H?p^Xi@}f*5lRn3wRt@oj|6FgWT*0JNhZcj?s%~m z#8UY?m}65%QbtDs`R)yiOP}o*9>C((a=$B(Tb`03LC{y$2mjvrJabAlX z$fzadmuG?Gk{nyQm?Bm5w_JtcSMD7mkMb<02YgESg!0Y0qmJ4uTCR;OfiENQG8K|c z8!nkC=Nk3&ni{d-7^Kiv>jN>czPdM6#46tS7!H(kE&cjFyt=&)77*4oS9?+ar%#DQ zdE2x`4Hs~vz5^GIslGG^)B{j|S$VS7wb}8&R@4UX`(Txe-E+;gF%{kt$(#qHyr3lb z4^meq`D6uFZJ3&ckR+L#DTM?_Q(7z}ICJuBZ{p7BT^SGKRVcUNy-?^Vd!vdy%X6yD zTPdv4Veg8)CkKQ!c4FGwTx<&4=S>a{o1S2SmzUUXw^2Q+^|xbTA*UXHLch+usfVO8 zIcoW(Am|zU(8gPqdN1X=Gf%YHL6~xEJi!>S>txZ%SxqScT&zeJwO?jmYh0HgOZqKs z94w=C8ixb0b$@O{VT?N4oKHi?j!{!BnVUySaJE%;l(Vy|3{>|HGe>4>j(XHqDO4C& z9%x*#j1CE6tJ-fQm@n&pWpe%FWUloYmx!u<^`%4eE?k-szz4R3?tP`dN+X=eIW{78 zV2uFs7n^lT*gt7ibA8>A&tw~nzZIkOD;Le7cDw{j%1e$7iZ@w$v3c7&g)AkpcPblv zNFa>s=EHia%1^z)Bpku{rHbOrl~ZgwsgM;99uv)8=n;J0TWSt}54c+}x0>roNG&Z1 zu+k}W`yM2t!gKYeF3?=K8f_REJ=d@%Qg^dAG3@@*VNa$VEUwxtNJaoxnm4)3WeR)l z-naTL>HT_$95Rw?)bAA*rzNuMi_5^$K($mH9ZKkq7BugW5B0WCd)g?WQt@pPj30f6 zfRvnRp9*|f?cCRYs9O9}b1*Aem)?C`og$IB+9Y#v&$uX7e*c_<8R>6fWQJc|-bcO| z+;6Yq$yT54hWB@7|FtS?E9+v(iF;Q&)bVl|NJWC;7-_sd?Mf zGwN4nlWEnrG6V!Ke)WbZ3u@tu1gC0Co>Q?LJRUoZt1^d4z=+d({EMVV&3`@hYVVhX zoqV?eSKhta62vke5Gdd+mnKiWhY>$S&B4JAPFr&rbLz5X8`-((VL}Pb7oGR0#GGW; zR|FBxFQcS?k5j&L-y!OJ@5L@j*}!+3kuGd)pnkbSP#cSj)R$iHP?as|cQ(}qQ>)>> zPIlwLCjlr_yB8gc0z_qfFb$hARBtka(hI6``%@v>_@03QkzJRPLC8{fBG86vWhtSR zvumrjp>L#r6v&P#Q>*YC)iLq~#F8Z<-ECAps|>M!QS`+Sa?}_yI>L^%$imerA^FG? zs4so0j*;k$=iogq1i0`Z9>9$9NN;&$jvC8wj4pQw)=Ae`jcrl~BkvGux5^^jo2X*d zxTbjXaAoWr#SRBt?kYc@)zb8)fJxr4Qnax#=E}WZlC5w?S}OHfOBQvd@|=F;{->uA^D{S6y)sWVPk6Ix1hTN0jwM+j+Ee#` zE{FsY*&|u={z$*elLm=oEq{lVQ;5O`Dn{>rcCNzW1y0S*dnGDT`ZX2~g;w)q0dYMG z8OIUfpr#(LbUc?#uFtxBXgu|$D>rEGDkUwp!s;@&;R5=;2A9rEXl*Wgr?j*uU97bL zWv!G4%u&n20vxaJ0m;Hj))H8<+*P}(2=CI;p0co#=^Kdn(>dQHstNTAxO3X2ABkIk zTNEMhYYuPbM|}@=h^&-6BBaRVN=rkb|5jZkdsF4D?*mxfqwlI?!-kb-fo^&B&4-2W zUKy}*4&hTOA7e0;@x0`|mNMkv*Y`+;PF5$qnVYm_o+oDEL`^);Yx2_7?_BB>r_X`M z{Vjbh+Z>R7x!=Hr#qOdFA2qO6wVAMgHmn(IBauK}Z`PzNs${GD9reUBTCNb*V=d-? z1C#oavoj=8#OimTYbEof1aKs^Xkm02e03j~8V9xRg9$PMpR~{%7dBE9bR9LH9OwQ6P^Nct&;T%#Uo|s0wDD^uOzRwqbiNM(x z2{zuNd&An$JCUXgh*BevY&_-rGdc6fRl;%`S(e zcq6Fyt0vuM++z8q3OC(*t_N}XGqnxcEghxCcEHJ=-3CIk-=AYvQ$6PZ>7+!x`W?0L zB+9i!Drb&O$&)3c6`r4e_mZ*QY1Ft*Y!NpjwI*+6Cg>-TvO*#N_c=SK45%|-j8iG= z^zSH_AV)dda9@K>)a-!2Ej@3_*B^-~nIxAlbH2`izcQEdclhc1e!DPEo!w@Btm$!{ z;TZMWsn5AL_Eca%x=YJIauX=3{UIjtIIwdbh#3rrZQU8H|7Ml_bP3a}T9!$6E zHY%1T)`NX~lP8_OBTk#1xz{gf;hO6g6m7Cp4HPklc-^B?jp6KSzu_LZ&AH!5LSA{rbC5bYk_Az?oHwZCIp4Y0a3JJ;AQVeuubW)5^LtJVAlNNH zdG0C~2+(J(DKwvxZi*Ct;1AxZ3AsSz;O0J{?aal8k4YPvI{j6UY?6@jOSv}Y)LmY0 zZt}d5Fm{u5Z&0skV<@$O%pku9%HWn>YU#;B{JD2Y;WF<-jRiMC zo-8+fBYR#Sp{8CRQzNCS_6|#PPQ<_qpahya+hG4pZ9~=;3psCpF%HdVF^fF7=|Mj8 zMk0|_Tq95t=bfG(1#Z6BS+98py{#8;B*L{WHY6CeYXn1&KdzLF5=42jJPJ#CwqG*d zmh?E2bS>aP3aTbet||A05|TBx6$5vACtnCL0iUvs=w)KISw+p2%wD=4T%^_8W+x`5 zaU_!Bg~>Kv;PeH5;QMVRD6UaWRHf)*nhQAbS`|@h; zK!|CdB0N;oJ$Kc3eljxjg5m`ft+7Gz&V46BGt7yZL*f70i_gJ!pP{mHR}F1F^IVy_ z;GlV1%B+L6s8KW89{v6xuZ615HnNryJtK4oWsoa}D{M}GUjTgqmaE5R$7k&QHFE9} zPw~10efyQUAf|iA51d0{rC=bX>7^EcXQAzSRp4Qd^M=K446Yk9`gTg6`2tG$whA=@ z&R$-&+P!>}AR=WiywN66A#(%=8@*n@aZkvTt2U?@mDx^-?2cl;fpq*#jPY#a)Tizu z&4^BsqXs^I?wm+Wh;ouFGA{n zX-_0@H96OG|0{JDer^0ac^cmbAX(lnbbqOjIcfpaFQdk5)n^;kQAbh`-BCkw1S$r- z`kbOuCHuH73AGJOFbR8X}4{2l(@^d56s zTGl$-7*o7-WZG*;@;NhNBW;S#m1ENifvVQ;aIULEo)TPtSjk$)s~{D-ZvP=slPr5vk0tE|7S3%=>yYIBOxu}6 zAR)g;lt-FcjQ}D_vS3Qwd>O$VhS4+MIg-!SrxEVyO0U!hLpy*|jez9Lyn+v%=AJQ$ z!A{;tOcMG|t`Af9Q;f(`R=v%M=lh6?-1_cC(9VHS-=ixi=ai@s-=}eZ9%*HHg6B~c z=d9j@_&@2d;wFIr&zl@gBmTnd4emFiW8e=ei9V|h)X|zYx*(I{F1g=UL~1>6L%Hp{ z7fodQI=Qt~Z0oV%8c&Q2lC0;J@gKxz>Q|M14Jj;tJHKbcjnHq__JkA4x!xoeJWIdE zv^1i-HP`Y&uZ*#LRD(Q!Gak%Gu0ngh&O2U$#05wn2k`0h2FXCaW=Oj! z|Jeq9r)N}cNz63a26i%S+K(*LW;~SI!F!wgT3LiMBka(gN{DTLH3E2~TWbLqR*k;> zFVU=w|0vhPi&JwA_Y3}3^F{(&R4eEAxpixY%yLN9WCX)xVCCvdSr`=3V zXoeqs=GYKTh_T0vvUR0A*RH~u_a)bgEPLmg2Avdsa8Qt#bMxp|1wt)ndSXRFy8E;D@vqB)s z738jxBcNhi_6DJnIVqg22vK?j)b(Uvn3rlJcHxNFojZ~5RU zQQ9Omlo_1CQ=4t}+qbdpNEosW6+q43>P@@^E-NLnm(#{DX7S5^Jf{PpnV3fYOz7G? zjUU0BWEq7DFgw}CHP*cQ9Oy4a@9TTeAvZE%)`&|p+wfoa*l-7C%{n+XR3Pb*ftZk5 zou__*g8b43tR^i9c)6kE*Qixn|1zVaa$wKsB6lET$ny%8mJ!dHrn*)YK$I~2z3C^P zSIIYs=q3hSJP^Gk!j5MU7zRIZe;@yfaxcA`NrP%*uO|K8ivK z;(Hl-0MS4$zk}$Y+VF-q8g=Fp0zb<(D0D zSv~%N-I??2sNWHOYQ(^-TFsU=;0S9z(i=W27OjeM{*FaRY|#wwuLe=JS-b8f4Dndh zT%S?QCu38~4Xa;Tf4hjS?kYmY2uKEpa7u6+XY`-1=qBEmZ9XE!^#Y0<@}boCEO(5Q z8Cj(@uo$-b9c0Oz>nRbfPoIOhlzq^>v2vyyH6DTET{o zgDv9Vsqc}~{K->~^7l*RK|u@5L3{QlpSE|%^I(J3`B_A>f1asd%TV}Y*AK~=+WN?! zSP~URBGi?u0GH4>dEg0bFIM@n=$>SqqcoNK;lRk!kY+`VZ@xUJoZ-A0}7 z)M^&Ncf=a`e>(>QwI$G6iG!3dI>MpV8~aOrv6Q^9`Q#~K0D`$?8!^4!J6xUDnmYtY zwC&Rc!RM3}ZWd21cJ3Mh#jd${7X*$+dW%S2K-1aV=LL_GlKJ(?*vF!Rq^ME0!R(v< zYuSj?arE~fK2G*ESaPO#?orACYL6NLpSR4=lt{fyf1d-G5G-}xd_rKiWY|Q54xo~A zfcz7CQ;y&xA0y`gvS;pn?a`DBP`v@HS&5XOu+NypvTdN4d9pT{02xtR_`EsI@^@sp z_FVIZZ>d`%i3i}x_2Jp>+_43fb#v&GAok6%QCtwO)TlY7&R%VH$&p^_Wyf}rzQKiW zou43of9IeP_m^H0-}B5JYPqF-x~MbsO51EXR##PyfV+858)IR8h+EaD54kUird!x0 zufAPmHYg5Wy#abW5{JK>9{bdl7j8bjlI#t>xHS~n5P|~Ph6R@1l|@$bGf{gB{vC-d z*&C}dv%xtqpqugzxs*g}EkNpJXL2fj@Q|cjeY|X(cxX|?**PEQx)QCx5uS8z01K*YBl;p_~TVs=eGi-R zq;OK*Ya zf7ykJ7!Yy2p@6Fy9k`n0^Il1gJ@<}d#iv=lar>YFPYKUY<`t|Xha~UoRmH6>{fQ$~ zz2ym3?}U0?FUBfI06x6N=Hit=mJ*h8`n<*6**{ygfgI_0$!e*u)JGLInHtT#BJWjw zI)6v?s^kJ$wP?=Yl}>JxR&Ro*M`pP2e*=Gsv8>Sc%@(st)xW2uhyRqppQl8Y9yZ(> zn}FIY@nVPw)t=7T0d>cAl)X{xdgYMa0+VGMUeIJFU4P*;?@{BPNe}uu!&s-yv?`F; zh-ng83TKW@4f2e5$|!p__Y8@A%^dZ@rcSO277ilzZnN|~=ZNi`F9tX}^nUiX-Otu3M#v~5 zDS|JM<9UJ)Si|%UO1c1&%sWIDfAE>n@>P9Jx#~6QLw(xBJz<+d>z8}y*wlA^WN+IS zK9m)5o{F7q;Nvr6XFU!n_Wh+0C4Gk|z0-9Oq@>8H%Ga4Ik6Wt7Cfiuegpyn$xXBu{ zDjao7W;h5CMqqvqpSMCo`8(d=e4RHq6pY@{W|SU4V3iV8(DO8IsyqP6e`K3Oq1U>R zux~4}kiVnEXJhxb`v6g0^*d??Ey>ZbDP;$kmTgqU*|WC+X6Ug&dIA>%_HxgVN_;tN9B=WR#78`D@%ZL`!<5|hPcg>fwy!&ch0YnB=ZB%m2Uuep>H3+KxzS)>`7Ug4DT#^6B9V8P zBY2O@?)*|&{GCH6qUdexHkT}p{2shG9ANdOa$|*!QZlwq&L}ANe>0IV@aHb_(gNfF z`=Z>vDxx)O!-k9g%T5HrqyN{aLD@QwWt*j_^({8zZ#f6}cNDqF-@*TrF;_Y7 z{FZsU@N5h2R&Of~f0fiNRoSC*<(IDKC`Vkq$xQ7m`VEcEBN?knK)rKKX~bP0ecLcn zrmaaL^D*Z@sxRBIM(z1&W|0j%f6W|$P3UFoT{YMx`_vEZw)K$X_2l`ev5_39-EOp7 z6)LigY>12^81VZj|=*yvmRr59$a^eb-{vn_oa+aUTki)ZW?Ipn&7q+vz4RO-N=1 z#=&|UMX<4M)ee!up_pCH=m7Cf`912Vz_i!c@JKgP@y_2X9UO#uk3BGn&)a$Z69f)LptK(%^AhOy7WF67HvidF=DD`lyfc6cBHnk z)1oD#)%U=Z+!ASyGU0=$H`}lq`vl7+;##gYA27&#=M=yLXwTK=J?`8J88P=OGii2= zEUkatLe9utUTbWCWP9=i?=!mS#5DT*u;F=vv7YRSDcOO3+?O>1;WSW-lt4H2ImK-P za+7T!yb_bOLs}@Pmu+O$CDKBbJwyw+-xPjUSgLwctaI)iLUN=B9ZMH$s`L;n?4KoT z@SzR&Xy*3_m`Li%v5oF>RkDA&zjU7j!SZ*msq5e(JbZ5HC*RTL-FlBo zxj;Kyzq3)~)Bh%#cB3q3o0FlJH_~?9yE4PRVSdg!0{c$o>w5>B0_LVh0BO-2Yx_>M zOCPZ)7wu)Q-VT{G8L?5TO%2OjIn^z{=tzegr1Va*XXTFN9b)U^Y|F8U+a(%xKiq%i z{Vp8p|Mba%!Qca|-#OJC%NPqty&z?t5?CS_bhLJsz%$5`z3=evpZC6a!_+8 z(xN+FztfdD3hGO*<1y!clQGLJR-<+!YEyehgojtPB`Q(n9WRW5w4t<(<30+X)u>4n zIjwu=xT{H>y5(VHpTuz;cRF;wv?PDXT6zR7k&GeRxvEaq`iMh<>1?qIDjd)cat^!~ z@@BIQyl_i~2PHY<9AG=7Zax+7)#a&uEk>#mV$Q+vzU66@a}Kk8)TqTbz*v2|+F<$|4s}iL=@*mZgHI^eM`B&GjB+eMyXTDZ+;)G>pu-); z$yBrRvVZg4R*%NC)h$M%W<%Yhd^q>ktE868wawj&V-#s}JZJ_DW zmf?-D<@1yP7$cUd-nbl|$$D}iCzpGlZ6sWO=?&v;>eq)FfUR|Ul@LATj#p!Q|MEQ| zyQ#b2p_=COlz2|R@V}9KL0*5!M!dHl35_#<;BW0H9Aw}$! z{?S9h6G7MP?V9*VOTvwGC6+*R9bzEgEC7ADW0WZ4*tB`-cl=)cnvn>t*7ryOZZ?0pV^=LSz553= z!>wQE9Y`~)CqkmiImmm*WkpG;v2oPj6aNP1?uyMjgk(#k(gCy3c$Y(WUv8I^5}p2# z;{n%M9JNIo`7-rqH{RFPu9F$!sY3i17v>g8AU)HC{EhF z@i`<924}dsIJt5()n|XkC=bN;!c#eFzPvsQun}ikdM87(J*$YrvmZ`wcV0;2x_scWBh~_hQx(%IP-r?!4cih(#6aRv!3bneRD*LH%EA3WEX+ zTK5}?n=gCg)ouO*1T(KkA|QsOtsGfkRw2K~8v`m--^2cD?lXVYorUG|d*IdXJ#W%0 zJ0D$C=DuZK^+4hvsHm~=I6L<#nQ5JMwokyxJx`YGpGnQq>P@N&7i~&-HXb<#ydhrh zY$HQDZSfZclXfO6m_O_r^%I|T3@C8>JrkUtRN;tBTRl}_#Epy8@Zw}ua!N?m3!;NWQGnb#Dv5R`&AC8{Cd%NHNC^Z{^ClJT%e}Lxu=6~s4Hv%aB_)78=`A`( zVnN0zNk+gVdz0IdI20KQw<{S?Nsuw-+o*2Rl3M4v%Ct(f33no(L+*HRx_8=|r-Iqa z%+>dRpLKusw3IG}aNc|ye!$jUwpHjOzjWJqb@Q&;sE}D_2mnI-G)F+PChOKI4A&KM zNnTtsH3yK{;+H8I*}184d4RiW#L3Dz6SHs%J?v>wN|IBQI`3YttS_^}w~l_gMm>z` ziJ?SpuIZ`#PI`ayKv$qa^PHYIAo^@yRPr--FAsWG zZFT1is_&W|rsg{{x6TUzLS`E?nOKy0=Ac^Eewi+*4awh&aYQ-sy7{gf;O|=dKuVEDJCSy5J-uLHGJ09dm=1J`X5-CVEZ`W;>wp6RY&&Y+*W0PW;KKv0QrNPDeSZqXq zbsB$%gy$vOz+dOP&7_s7kz)ggVl-uMt20+`FzgwWL1}ipmXAl;3nakYId7h<&MCf} zp03r*5SJXAI|LE?YwO>6PmPh`D|&XlHj!$Pp{8;SG?qeLoQ zoV~Yao*%FctO?Z{PYt5CmWYYxyg}LF*UvVn<* zsU8ei(0aF>#K+n%#^-(8-ub1_A909 zh6z7W&B0)p>DdveMjx1MX5>-%0xo}Ev&`YR7Ffe%BN1oA6Pzb&P)hXPS)gHCb1>D7 z54o63uZ%Z>A56Sl^`%l^8)JqSNKhh24M9ZhtKOuqsgszJ5pvCY6w!n0H`}lZ(mx6l zt@37`)BTPcp(WgGsX<<9Ep;~0wL3no4dRgWFx04F>N`X1+P#^5O4KvjS`&Xdn1_iL zcIR*wa_L=2AM#alfQ#`EcJMq;L=Z1bGXneCwuO7 zp`}iHfkaYd-bf?%kvRMdey5RSBtT)gd#}OEmb;hr@kpG*bqP3T#OAuxQr-G@PCoQJ zrHGA+i>&bm%ixA#o)+O1X)^f&EZ3OuZ6=O5}wBV9&QDq`ck1b zaO#w(C-KOAz<=RutBrpQ&;82YMuDb!=b-HPR7(#bc`LCNTELK~!;!ZOBHVjn=ClD` zDIYP3?2ba4FpJRL7S@AglIN3ifV^<;vyCGCD$P!BD#X9@WQiiorSCkI(GiBr)n4qX zicxBV#jGqa4k5Yid!8)ER9UH7?Ezaa%|UOX|9y)|L_<5Dy}^H)l33t?p{-56OVr9ej!abYHVuxtbOxI8|LZDHeYZk&zk^8W~P$ZJcWQ55{cD$7B*hK zvN5#bqb@8p$?4w7RTz~~%W{3*ls7xeXE!AH4|4ZPU&Am~vqOURDkXS03bp5V20$^_ zXI~x|5VAM*disC-Af3dxo^4K5(DUY#HOn7SZAfH~r9>81Wi5HMRb{K_B?Gf4vaDSaeu~ONCgE4ESkCaPtM-?3jiY_-b9$<@R6Ym2$?7V9FA4NP zMTSUV8OjIwym2c#_O%LJr$^cK+Td2HNF<5ptn%7O;1hqpjDRn=5I3TbH^;8D04x}v z^lfM}-Iu%*?;;PfR^v-iyiH*6DLGuewXY#T;i&3%!Do(_pl%99PE`P^^TP^%Bp*Jv zHl~uY>xYEbE=OQV4X?fjTa2<1DN%~#OKkun0ZJx_F`->B$(9e1s5xSgF=KficyQhk&I9RidDi3S#c!-9vCOFhzPo>QM-@KMz_YXl2~SKoZJ=-ZbzG>WR^hICmC zzP?@1c2Cb-pJgzA<$m*^C$jV@x$(JFz6=Qx@bvuL>9DHy)Ev-Z6EDVLCkr?&usb3q z2?T%H+bn^+^tS=slroxaHV)b;CD^!9tGRDZa8*;4U?V%X;+iC2uZ7wpc`BEgW0U=f zHMGVi+4qsU@_omS+IO$CS+R%g?Rv?ZEy;mxDYa-?kcG%KRZS@4&YormKeZ@9Vnf=Evc};1a-E34KCgsf&TW2zOc)f zK$_L3 zv%^?-FZGcZy+j$~JQQ zGLE6m7azWl5!E}Yw^0x|eL^ZMIH%o){c+??K4X0EJ5ixM9^@Q>TFHIKbM~%ZMvZ5v z7+KVXP!pgyI)=pCn7axPX07}m>Eo{6z7H6uTgE80`J&y*9N^K+9kR&fDVA#^@Xn?t z^cZDi3V)!DNO9`qj|JW_V^e<*HU>W6S|2WmS3jUF?N=;{vP<7aQk2UHzV_*u&dc z-!m+UFTHIOL~6DfS*EE43=O}q`(i(@=h<_8VDCshUfLFZ<-9GA!K;6f@4`p}?zzV2 zz4Z=3tcabbzEtuU>{UwOk&sA8Ft=W|WnpD$h(R*vnGagY|WfpPiP z$pWYlNvS(gkRLs4t*PMDt-UKk90Nrg-^0BxQDbV!%Q~b4zBZ$9+^w(VfPfdEC1s?T zy`r*WtpZmG-p4xI!?}O4zXu6Cje zfwEqwgak4==K$72K52~&)}#GZW3taYB?iZq$Pv&{1as3@5E1Zq>K5a55Tsgon-{_>taXMA?O z59UkcE_W3LR>EeDdI7FY4dtnl4p(`#kryhdHzhd1GWJ1h8`?2wf|4)} zmFG(dfPOK4NXqfZRETTk^MiLcmnBi~f(<#|RziYL5k)}CMqa6Ahg|vF3 zkHYV#`jC{HC6e8isIDX8IoQ(PEhotWd~F5U5YJ{nw0m! z1U;&jL5=!x0Z7)~aU+8EgcvlD;q{9^4=xZVt)8k?lhwtr-Be2%^D z5S}O1#p*O_@=msM8If{gDtDP={ZJ5cY(rDcdE+CV(>j!S$$GDM0mYjtbEO5SlH!WZ z*}*cmed+BK4$ZN-`uo0y2u3KLUn(2#y?1Z0pv8}53&;!Yy`!E|BViCgyd^f*Tmw;U z8JB+Fr_MLAG$nX+8-S=>Ifb8lwfw&^w1n`-NgMn(7jMqrg~ z-hxwgE5l>XZ;}gfjMbOo z4&3|2knBZ!$TowPChr5J;cC-Wn~{#uYr20%*pVlc^y%t+amCs0TJ4(82_&rRzA zAD?Yd8Ax)e-bm*3ILiWf;wsKIN?d15eA;H2(0RMatjmf$Pc*oaLb8o=yMP8Y0$d=; zEvz?nm@+bi3K&eMe+Nr$>dMnDLpUQTTvFV2xf7A`elkm88sw6hsUd~&%|lvWda!@Z z`nFUfajLp-PZt$vPo4#VRVs1)4oM?!CS-1N`T|e}Asp=9;Kiywld*x|C1ybiFo%5J zmZwV6>D2|%L1fcyHnDB$4{q8NG~-BLa><&cp(*1f?~e7P-2jwmcD;m)cRN`N^@Z8 z@?e}bqlky%?maHvu=%TT~(^gJt`v+8E>`O z5HP&6jl9F;vlC2myJY6DVq8kI=H5|k1DY*IKy%2oQhvc1TEn!+oDfRx4@D0}N2raA6*CRk4mG=(9(vd|Gt1wuy^p_Htg{tZy zP;B$;b-U0F#K7`*FpI2-@0EYcAM&gbV6RFBdu+%az~aAt4u0BXx+5X#-|;bXTKsBp z;e)J`^&Z)c8OMJh!S#@HAmX~`zJ}cA-+$B`41T737e-msjtG!o=*u0#YW$?VAb;(O9f9ZDvw5T) z%yI`yu3H%lW++fKHo>Gb5&GlEue}O`&pT~regGAwON)PI$1oXkC(1-vs^*D(7Hy^xbXHTo??uN^~ z^T9WDob@~N@TFZX5iiLR(Bs_|*#<9YS_P6z_!IM#%q#F!j(UbZOYGO1OV|J92u|Uw zJS7Vnnbdy<(I$PAT&&*I{(PkW4Nb~OV8}L*ei^NJW7J#I(gU}F!_SiiZllUU{SLAk zHN{hcG9ht7gBX?JmTk~WX8!4WsBf7eM)FRUYg!N&Q)+fYlC_q!q19yca!Ah9cSsm+ zd4j>akf_v`%8BgU%lAHkz~!#m`DA(y6#B!!lfQqXT1?**J6kHfMF{ZZFXUMee6fA& zcWjS)?`t)XOn0>ziB5gLohyiD&H>3%?741nQPT9s!*C(Cy4MIUtcLxT@DVq%hmOc2 zQe#6*cSn;OzvE7pY}IWfNq_0h`;*$B(EsP1StKf9-Or4cLog}uS#v;w;H++C06eMk zkNSTenXy;yc*#ugJM}gW`fZ8l*&DR|t8Vf^HrqEj36r6AJbGFxT%9?De*Ufd?L*^I zhOfp(S8YzE;ch;AO#zY~>0we(!yA}03PUTsp+*4GvE@BF%2|MkW*Z!DiQ@fCVn%t# zqYIVCQW_Wf1BW|DJ?f_=KYi_K2`qHRk4DoC;4qcBx@H81vp@blHGomIdXF~c>-}7-E zGhTwS;R}lkHWZ93Id2~YxKrTos2+zP>y8H`=|UGd#XL!E!wtjzR z*|~}D{kX!8d@&>hjN!{2`kJKvHo8OoF$3_$tTt30!&7xW`k4sM^n!zYwj zHV%Ag$T>UGUmyK0m{0|)>vwh_*1mfO!CC6$AXzuH*t0j@kbZymQ-~qwTFOP|I}5bg z+NoEec*8kZBRITRiJbo+M$LN2Al~3W>B&;;RzxjtB#qGbW*|Fv^b{n>;KVy!Jn0U0rRL8lL)W*rV@Kbx@H7@N1g=|2dGD_ zx=MP(6(#sG2N;z3PO~=>VeEhU()*$SYw0_qklU8XxcPxuB=-*g@CXgn?>vAv^DP;r z6li_fh9u)9n2x|b>UP0qhh(QmfL$!T5eiHT+|>!jEO}oOU!_{XT{*iN^>Z)@BKFvlCN-Y;4=k0&38f5wtXUO?8EtWAi&GVy1qw6xiR2mIzK+TTK<$HSB7zL0h zTeg|3Y4;{hoJ&t8(gVdvwvrM{!|&2&7=l0d-CZp@Wi9+N!wS_Q!h)Hr`B0i8^pVqSdDm)_)6 zZ@EVoK!?l(m>1ca8DE%}(^Zw>Zq$8cSIsK$oaOmZ& ztiH_F@0>!-&CGuz8qJc(w`7Nu>Mxbaxu*>{L(Xp*u~D08h-!97N{nqw zTm@*@2Je zrELi;b>8u(N-?cPpCSUS$6pWTN3IWm^Xr~tyQCRqRAhgqD7T$8U;MqT?_7uElboIF z#8jLo_>#_=Ua7@pfNeGAjc1TbQTq)}7fPmnhXf5#jcwe?_r$J{INEiOF1CADLxH-5 z4y@fPIZDvxs_#Jyz2>{U$TjZu8ImhmTo!29>7Ap74(Y7(1zqNzem-nmbd;QH;2B8O z`ks*wk{W;H!Zus7Ucn*>nL9drTW?3|NDE)P=mb&iaF(6#^@J4xgVw z<8`u@!OdN@CFRUop+sVm&>-tRSfu7=B`Pg0{?Xh!6GHLST^5T#DXuwykMBA*i!9fU zxspIK*Bt_BqO^U^HGHuUREs~{2hPUfE`_4SW{Pe^YDteLe?AsJvA*O zlolc;dGEYsHe`PNBA*HkUj2^KqwHfzW|-5w{V^bkZ^5l`o-fZ}cR``BM=9~j; z+L#Tiw?!%K)cMr)`ce;UF>#!#*_-(3?i8$~+sZ%V_ z+)95j)d++ro0A!n0?yLh*AfnHncabTjarqr%Z3FoBQ^_Y(<`I$0x6D9zH{J-kMxUy z)sW;)B!QBwIRNOOcc#RaPps}RShlo(SRV2&a;|srte(+*Kw)ynd$tiz*4Th8aeJg> z6#2>P>&X=A-uk73tG={K=Kpy9%YcKyChx$aiZs zo{~l~FN5keqnGXvk7KUfb%_Jk?EGTQ6xU zF10!B5_K5_((AV54gu83z4Khqu-1J&a(ud4&A=B!*w&X~#$FRSkCp)LsqQ!SB!^X= zEEpLDpYnHbk)+>p9bW2;NW%o+JFkCx6dDT9;jG_5`P;XpykT^9xjxbqn$J#9UV2il z0t4fgIRdl;%m{fJ-@puM9rCdWALd*SWKX^&a@vqizYn0J`}}SYu;FZa;H)v zu9-L?7{o6bZbVmWW(X;)?`*oC7qPmaJ#pBU%$GdQnuzX{!O(N=F#hNORyq-3xt z=j_Z>zU1dyg+jZE%#iHKM7Yv>*VHyvPP^u+Tp6gcENj$@s)qSCA_=h-bB9PaUi+?M zGM&jCh=E*5w7hqO;J)>?yOpzz@J7c%SG5?sa+4%R6`8v?sS+6rUC|JBrHK`koAVBtRTFfDfbR7ddaLZ72O3^^VL+TWlwaVZ&C9k*9U)3$vZPOwE1>^ zAizCNHP@q5S-&M10y|H9<-3)dn!UY5;qptb&5pma&3^0kaeSPGngh&%gC#e5BT?s} z)<-Vut7nu1gs65R$Q-a?y=H)MQt0w`?gPO9{5lMBJ!tc6(&J z#C0I7Sr*u)NXR4c6i9#XQPtO)(lxvo*_))pj+VprV*SlFaNao5>r0VgHG*iPa7p9H zHjo5qNzg&?FxAcXOP2Wk%-&Y6jUL6T;h?b3IZ4(l&$Z0iUTmk>m|nS!1I` zU+H_=J{UHW@o-pxd&Zfz`N`xjYibm6Zco;R)9*^IiEUP$JpEOhG-y$Y`W})wed`<8 z6{gW@Lvr-Zhw*=-YxHhlX`e5@BUz+R2}k+fyLVY$vIui*xE(XscT+I+lgR81Wzd;g z+O~>~r5=KfQbnblQHJA}I}xEo$I+$SAzR85yiFn*d0%7iKpRwZ@Qc4U_ch=Z8vSfT z?S-Y?V{%GxSsTYmP`^aT7pY7_YO2eXY`^P z7gEdLp^kR;^mg)Cwa&*l72U0|T_a~GcQ4*NboAK<`9Sht4=Bzn^=lH@<@r6znVW_D z9hGnLEbM>WF2GXJ2IPlxuueV6`^dWrD>V#8?H!tnJEY#z9m;$8(%Y#(N47E5d&bfC zQC>MSV0XH0a|>hMd@PBX+tqN{GIF=ymoM3C``rbX+U*XK%xbB*zGJ&c`)8*%Ad#;& zIFO`Dq-2*zne&E;Lu51CsL#IU*d8O+R;O`LqgsFO>J8VPT#b}Cjp<9<#VVxGWg8l7 zVlZ|L8L+b11{?7s=k0kZWmBh-`(Rr0)DNr{&9{CB12;5vN>q_a{aOYtw^)w=Tq`qe zcNJ8m71!@@%XPk{DsG&RdA4Q7N*~DHE~}k0N?V6os5ZRRa_d?m*Ee^S*z%T{PCF3S znYn*2UZ3}zI;@DIa%DL?ynJW{b8L${Bu@#&a!x#-{B?B^avyxKy621TEb>=%8)419 zl}CzYvh?o1c&YPyNSbAb7g%M|Ty4-_`e4n@EaKQZ5qz`j&+QP#LNnPL?&qF^g*QC$ z*Hke+j7RmhNF7d(^Dgc2OlGTHkiRPjB1M0@ADMfJ6iubo{GL_hAv1Q=eDBE(W=hyZshv7_5joB zduZ#^J#Pv*k$YydBF1LE=cwgG?&Wj7^iP=-+7YK`q-6z>pXvC z3jQ4;sOEr9&OMltMak@((L<7%IV`$!%Tmb)7l3I+%5X19Km_pdIY@3mbKb=W6ner9*AC> z(ddxHh|Mi~gJDX)i_DHu(=XeoJ(}+iFB05fogb1fQAH;~NT6Ob%qI8~bKV}%$EkUX zv>`Ce-XLYWnjJnr-n2SDgTwzyoAyAoik_in$9`YZmxi*3ahS7%eVQ7byrP`wdI=ScG`S4C=7M3zoyC{gdX+Cy2w>nMkSCQ^@hZzi{MX{mm&25mH_W{7O^sd4Q)73T(U=Iw-`8#52>FYeWCa>0!1m7VLsy77S zmM$fO93t!z9oYChqt*nw@L|z}lw~BMa3b+k764>OVXerY_syoKL^Y0UO?o)yH@il9lF=Kn|Nw zzjG>NknDJvqaIy9SOq5PQ;u5dTGz)oE>WwrTn{yN+P5L}aqoY8nGyQvn(89*P}{k3 z*9je%d-S?wd(|nC7RqB)d-S}i!;uK^UotDQI)!SxSR8Bjp2qyh?CJA%yy4tp`mR}jD4tH@2$^0%5-nk zk$U&Y)bdM53D&e+MK}0EN)HhiVut3fQbrS@YJHEWvq*nNN?^@<-b9R=M@E*0A>@8j z74%G=Ms1`Q=F0Kh0>tLnPP$mG9M+;G{qcgnqux{Xh5~QPIw|t*?_Cps#GrGv(d~Bq zZQP^GxgNpsn$wqdzCjw(1E@H~V@WMw6mb^vtS^1z^h--()Guc9XPXcGE%y!rR+#c? zqfAO?`EZkv$P7VGBfQvB@LD_e@{TI~&mNori@hQ+1z9gb~|it3GXvJtFq7I>tbQLZA{4cVL8 z#=Q>?33RR1aEPEvtlo|d$@7^KDAhAhJ#_;WZM9KXzVo+F&+`{8;FRi=K1d}jm8Ho$ zfBsx~w(|u%%}w8l=cY1U?s&^^B!1_FPN$F6mtF`el0QVr`!{BfZ1ciH`%DQOej;H` zGy+m7v&{%1=l5W6Jk!p)@SrPJ8NFfFm$qATeW^IVrNys~&j{FOZ(vmU*3){a2eo(j zCJ}JgO-}NfG6KbK3yV`H_!6z>hODuv5_UKzuJeN5+46P~X2O|Wr|}w-2FfOX)7A6# z++I`qM=y6+*PnxaLy}nfn;;zPy>1uWd}w-WUtgvMPgQ*n3IA70WW1&K3ouUDDt8q& zJ9{yEJDx}HM2v?D%v7794Q4d<63Q`g*@mEZ2rM^ZfNY~Ucw+P901tDw+JGe>HBX71 zli2V}X2p{4&!xKNnKn8s5Fb~6t~Q2rl@@9QAI41LVbx0jJ<)=fq@@Ojl~E@&|=A^OVpaw`9Y* zRH_uNuCXa-!5xs2r+`-Oszq8szCUV`er}0F8DLbPwfr3gS^AYx{1j_{T(wyr&pFxG zpcWNO$a6Z<>oX#7sbP6b)^0T`RCLXq=s8ynvBm}f`0hQrLB=J+=C!@P_#8+uN$0%% zQmJyw5v+q~p(W@$a>wsCl|b^G?xSROx1kB8&->!p_C+;obt%iJ0cPec&Cg**WLWma%u4 zH~cQ$Mxmj!>o1;dIJf*Ae%<6G<2*)RnEOBya%ZMq*ulFh^@RgGc_RSbZ+F?3|LxdF zCi$oFY7WW!s0<_$>FDJxA`v_+MsX7P`h`Cr*^$J@8%%P%GV6SQg4k2GDDEASX#zK? zFQo>}rP*mSA}Mi7coUJ1RL;R2-egHvrS|Vvu-(KXD_G zFbZnFk$3{@H6vNTE#rnI5fdqkg@hqoNWWhsN3RbAxN>r}KGr+YKp4Q~4iu_|gl1W2 zVG`S*G$9gxm%=N5lN^t={IDdf)AAY)2`^V@wPiL>o%4w$SwjUrP^S+3gf8?K>o zjq*d-9rJhIlT`UU3xmvO&DDlO5wNfI;giZtXd_rBY;M`+dVI<+HgbUFtmeG~Ai0%I zs|}1-#rXdyDU{BTypnm0MBTn_LmRwRj1q`>_6XR|m2Z!0>+l&GfK_rbor zS*Y0tLbCKxClTX(`6(t8xpK#Hze%E(SXRG-@k7RDN~~L1Mt+A!rr1bGj$76@BRSD| z_Xynm#a$~$Z-AWhRuKG~H|!W9#r2+&s7lklok9iuJv=fMb5+M$kSF)SFOt;#?=Tok z)eF^s8>C0RfFz!oTA%w};(O1i)6;j=AahW+wPqBJ4R=~f1PkuDa^9F^;FkB|cF9{z z1u+R{`8_s)2vCh+5RX-i((f$o#UYWZk=m^jC#`v^-+6N0R&;rS8-bh1IiTTVR?prB zu~gj@a1o;Ab^F6SiDzY-kLX2zPNI(uKO!AaW z_HT+PvtuIkpW;d(VMv zq-dO4WAH-Ue|}&f77AyW|c*8nIQJ*6$2n+wKk5 zYM(6BQAh%FZ1DbRg~FhS<>W2K`oP0iy>U~#`wixlO2#Qp3aqvj=^{~L^h89nizK62hpsG~h!KnRsb+F2lolT6o~16hO>o04CDbHnhQW5cY7X|#I7c8>q1 zC5ic-@xobkPDk-kaJFpokQ=+F1W|tOg9jE%h0L;zS2d6{jFF5g%meT%F&h?pGyxJ%UlTj-Y zY3I3eNX(v<`KUJ$%JjcIp8FT;P}U(#R=sm1FSNgZHE+0dTvsWXl@qU9Or2R3SaU|< zSGn=4H#QT~J|#jA#f>`gxk$0hdBd`U8X{W3L_?=6_^HIHV-DWg);- z@OS3QE$R{X9)$o`^CNqcYMU_@+5N*5&Nkb_c}$54;Ax`|T6t!AwHfS^=|_63!)nX( z!_WjN&)z)2#kh-S50tF99R~v+KY7lM;P&}{${jMSw$!-XuIN;AeIVM^u&+^%>PUqX znmiacF3oIXU#BL7DA`o!`fPBWz1o{hn!*;zG*eI*w{bY>gAp=$cy6jDf+&#rX(V~#qoEKm6s!3>&eS*Q8@N32IfFJ@Y z)msnzeBV>M<&uI>sU5~e~AFLKuNzdA#&@yDb^&MU7k5%Z*G)4bBfsTG{4?j?M1@OaN=F-+>LkXYAuC4$0-4Z4SiP zb@x6$B6@`u9_iz+IbSo8Scsb(^{ltlm4&%pOXX)x3Tt&;o*@xr$x*{!XCA*cGN95D zXXQa>My>J05(ugBww6voe}eU~v;Z0(6D-GOTPK$eBmrP_#sL|dUX9wl!)Qu| zO}!l|B6k~pr1Tn65ZocTrV5fNlv4A?1IWFR62^1Ja;E1m*JZU4nre-UK%gr}F!`Fq zts^m0fi?FVOY_JG6x0TXV%=3j2;RA)MlCy7wb_gOL$yp63OIAjeHo{ftD>k>e$VHjuwu>|_UZYx)d zB7esl+?voyLE-I~t&vwomDl9Oa z>`iw(p;d-I%ke;%bslKi>4cZQ@<@Gr`G z@_KOWzcEVGO#$~SET6wKJ({-&A{g;l=Gc(96uUPnY(|QaajET`RI3$GV0x3qRugYh`mO`&!@&+=8j^M=1pUjPKUJzBR5pe~PD-Usgsk#v6PV4P1Z zwRct&JHM13e{}D;9`Ws-9rz)Mnf0X~nfHD30o}S0stxiGgr+GmrQI9mF=fQMjmISC zZT{fX&XwaP@z7;&RMm_XNVk48eutKNZ_JM{u{$wWLEa&>RE@0-@HSXe-lSkk3b3I%Khg+dAwU2e64C< z_l&N#eEP|ij~wxjngi8pzPxkm1zwe}CZFn=-td=guowFcD3D^niOpk9GEeht0|bBB zZ-AxA;_r7jAu|VxghiQiu<@l;-9DrQa$Ncj8M=SZ&WL=cpJEhjKt5Bepj^$;^R{2# zURns_f7X>>oRgg`X?M5~a>pO4>Gjp zo$4l~KKjD&tjb%CfCZR7@7L+YO3aVvqB)Gm&P7v_bD*nd=KtWg8Aa7=Yy+p7xDC!x zMnS#XZ!hDSR*n)ScqnRLlR)Iw?3iiaQ+E}~e`n8A@<#Q*EQs#`rE^Z}1cS11*7WbF zYLz}Nu2!40UM6IA0I9WmS&iZ)*+zpU{fWc=dS`|*$)w_KeJO4ImeDc0fa0BBDh0{F zv$q*CAXg5|T6TH0feY9(ehOsAp_#KYbpMQ!QqnL}*UQ8#g2*kMg0UcLsegwg(cId6 ze~FIC@EIAP`K2nKC7zskUsMb5R`?UouB!~$D0M=e0t zo^5SDoy904A6H7wD9y6(L@wf?UDmuw9m_f#+{$uU({K5f@0LtZ+Q8lRzQ&FxPFW*B z0iiHYOH_UAHgj`c!CAn1q*s?ju&v%xe|aL$wRfTiXiD5VL@@0?cL;QCRtX*q6fda9r*%G) zLk-BAZwBJcw^2Q4_2=?VM8nSMTyrqcwQ1!jF97nHCwLK6Ob_52h8E>+{*J=sfBijt z>uYLh??uhht$V{0-*d1?rRg_#y{m{`dOa7_w;FlPf{o$>zH;d13U^?n|7*kjvQu5(S$~NkKG`eXpOv}fs-e^0I z)Y7O2?8aOL1np8#vp2Qze^TpIZI^c?S3#huwNB|&U!tU7N)S=GtGJKx2G!WGC~sfd z>=O#oYV(E%N_@!3Apz3NHXN~eUkg?63FWRr2$S`|C@wsJJ=eU{KqWPTp{G_Y1&($8 zvc5-EHEfOR18JeEQ~nN*S^BTF86^g?&DC7iY6!S@5`!VJTp63ZfBDqZXdb4IvW~CR zUDQ;hb(Y@y;n-dhoo;gQ9_Q_{AY@4`?Xz$Wrq_@}$T82)0?R$+?p2I(%{ZX&Le~@o z+?1@CehM7h>PYANLvm!?`J8-|&_`Lv6Y^KFxaqtD? z?SDY`Zn>)2TW?a>)P2D@+m4xYKR4z&?pu6-bn=DDS1UHM#p*-a8;9BY(uR33IfXff?e>=HyDo4r8tlvQ>!5UAA2yWi~ z0J-mG7MTHSFp^|%c!stffm#lUrki&zy&pMmsc~t8UpZ$7+GI}s8grAUDetP!0FdU4LZNJ_SIz30eDYS7d84FL zo~%)3e<;y2d@fQE&RXqxg9Xhm#ijr-oNe5QJvJq~r;O#y3%pjM&xS;@di{M_QK!Kh2D5L&N|26;PBq2O|!|$9iS5$ixxSThcbPVclQRJf1X|sTjzcBP885Xxm(|}sc+U_s#rC( zyxXuB@;zmjsMncocEPspZ5I^CHiNY;wa$4*Oq#yI*~OQY!X|knCCr|Qo|(B_)Jw}YLleq1RkZKw9nboZMxVXy zh;8%CLBb$=tv2X?&^V@qN&BS@?{P-Q=If-p)bGf_lB{^d?_itzrb906fZ3gIRnMe{;If)xouD1hR}8>%NTLmR8P!zOZdtToK7J+f5eL% z8yhfRGn%r5uey7wJEJyt^(OS+%t`8CNtdacLg|jzt@qB@hZ(_LfKKJh=Li5udxzi^ z$=b%F%HB({z3PqTy``;*XGjz~SB{b1k)egUk@fWCAmhMGCIbkGfe3%e_B@BdioDQoJYyh8iAykweQ3gA6RBjtHI7X%)58+ zWc5z`iZWQXg+iJuH#ECsaalGLTA3@q48L-EN|p_oL2A)_qmFRC3(DYj)K~o$O240z z)oGRWw=ShYu8)~9RaVX_Aa2LiykXt{vZfEOLfR#(x^(pQ?CnJKf6%j|4sKd)!?V6- zRAhDU&B>}k^2|!`6Uht8xyFW=?MUC?3VW#75~N4qywf4@?T_Wmkyoo!sAx70&cAIe`;qn7NOwWr~-2Ou}+T8^g@JlPx0 zhSUbZ0)&x!)T^jSj}2lv@jH&Ew=M5fMUpg;NNzV1mgOJ{p zl@tG-+|TRGOORIRI^1k&v8=P~`n0p8L<+Iwmo9A0Hb>>P;Yrk2WRT9%-L4 z4q=$OH{PPGN&tiJXyxs)jj`p7?!3BL;d4dD1>RbthBTK9ml7%LX|b%kW73-4E;=^l zu0oZ$r)2~YcAJyaVinqL4hRy@W}dm@BeyQ+ZLq6ke}rR&Ti^EF2W+#eZ@y#a#K~2_ zD)>cLKCbtdy(6u9OF!Rwf>ZRFlh*xZk8%x4V5>Df*?E1#o~Qu(odXz23)9QCBC1@|H>lppZEHPIp$STP{*I?HvpZyv+_uDit?Hy;RLI^O;j}_| z`Rv|$e*rfP&ub#0NT7nd&E_VrorsER=xH&w?G6u=tG)5ZPiNgbqZStxGJ6BCO8<@u zVqbVUr_>lJLzYk=LW4doiVDJ2TIB??5? z`E^h1@dnTBpX?3JuU7#`=*;Mg8ZwYDxf3UBjF}zfF2KN(>oXlR@BY#gaYN~1GExw* zWgAw`+J|Pl`k2$0B ze%tds6^TWul=mnO@H2BSl}A^+Dra<&f56>mZc#iwtTIX4yN=tZ;Ekk=_6)Iq43Hz#lZbcpXw%ipraz&;Aw1aW2f?^ zUL`Pu@i6b5!SB-hP1!S7U(EsLmo>dbn*`4zqe(b0o4J!J! z_#F}#Pu(HAnEaf!%&_JZZjBL;e|%tjQnDzfQ!}c%=kv-}hGYV8%HBpjqk2zw%z^5l zR~yL?LXjy!U7IM;owKTSWu7#OL+wPBqFvkehKaY=0c9( zp^|A@lp|ElFsQKsUhRop87cYqyj@(0xGL)`3|ux6bC2#e_DYf9ogIQZYDKPJ$Gx4TGBUqpz4i&eeZkpL%U7?0d%DN z?Hn7)eCEo1XnR@+2!hPN6)X(=D40_B3nI{;eUE*QQ+dLrc zdAp1pfjv)&fZj9x2fIo-w^zPQpmE4vYXqF5ZD#>Ye?gk>U=wuGf9egKK`wMll=8`y z;}kp6UVsZ%)Tw(@c{3x@yHM9HeQDxSraJca=!CR5B29#AKi~@WdB!haO;RPQ^IGL-qv099jaZn8RZZ1 zJ~$zK6U~iX6V++n2MPf{GdoHug5Z1Z#0#jg-_wgvGh;^kwZB-;@jW1Ow>fR5ou-BEF&v(!*~cGiVd zo*VVQeurb7f5F`n;riTfye{v=9~=^JyLQKcBx}p8*+E!fw6y$EOuX_0YHU1qSLXlFdF3_N+jvN(z3x-?COIiJZ>d($O*yuC zx$nIXW?54i|2gLE*8DrifV$@$PlCKJ&o%|6v8~6@f8P>0e=JBsdcR3{Yqq}wRQ8e8 zh_Q6NufF|P7}0#^j&;4U>}wUIA9bYo5XOdH$u_DG_WdTby7eowq4!Fxl=QimB&hnG z4RpWH&jxwbduOLsWjy#8Gz*C}giaZy9%=+I7|n-rP0z_I6>R$nUw7qE8$B zxaL9VP`zEV=wa@IYgELn-79D53)cjR7;gOzf9iC+-H#XniIOz0l)!UjRS#u`pn+<3 zu%i#E)9h`1t@+ZrkM4-bv&|0iS#y2f%*|HkREEv-nO+>}wBEp)Yg_bz-K0jK>=@`` zO18(9w%OR$2+OJsJOzC{B@4R#Y{PT9rq1V`#oU+k_GB{UeZZ4uesbklfOrLKY!ZqA zf2~{cCAa*9dwph&QCNFza*x6w3L@9I)fT8R!ETi0ln7XyW|=uQ)sN zcaYib>G$U=l2w+gjZV8Ggiypc3E?$1>{T$iDfzsc+eG!b8-QT8Q4#aV`v7XNJqxm& z;GTK}`-IAxVP8CD#<|$)4K!e<>ppBXNDt2P7(AGt7bN2j?7s7_`4i*2ha_ z?E0Pgj!Ga$&7;|spJ9~+Ji84$<*(V+!Jwg3Sw{tXB%8Y$@?V_4vl2)Q8}v}n>sf>hxDyu z84`ESx#lhdmddeRuq*jCG8UBKt2R5Tqcy*D7ia2~+ffj;=HOVpQ}aHB9>6AY1oOZL zrbO;m>b)m6#?ByDdk!gCf2o|9e~jRw=lha%P91gXb4IZ-QWa~|13sG3m-E0bnOSlt zEOp13PH=(F<-u7rOuZU`B8@5&v_#5x>TmcHyY9Ee>>Oh{9^H6 zI5k|q*_$ewc_&(H(7f8$*Ilip)F4R|v#Zr6p$F8hETx!UReJ}gAVoDteScHq`*%Fg znad*&8YZ`YXGV%#_b8+k-)Y?;*InQ&F>}`)^MA&-ue-#8o`X?wD}6#ThM3z|t(+s* zyr9^x*(KdZZbf<{yugTTf3gj(@%9$UABV-s^`WXaAHI5mp!2z}p~=+^uP=qpuzDq7 zl(aYRVz?^em2E^^d-uX%yfbblR*zRbcdr7lDx&1?Eb=k(O9y{RMg&A}U-PrSl*OI- zGW66tHiH@gwT8u`8y7M=M`Lh z>+&nAHlrJyQj(DJMXR=U`KqcoKP~Vn}wOwlY z@Y>bb1bv~hQlf@Tf7%$ASi#);4Mi2DD|@@%G^mm+%4GFhGHB4#F1e(?(qgl>Q<7<( zQ)D2WXXJjrw`Yz7vNZPrqT(|n>=$O9&QcJ>hF8v0B54&`x4vh^(VJe-Yb4Mml8i(- zyIDB6B8NIH7})1M-iu}9H+BHAv^js%B( zy^SPD#7ajZnO}0Q|JyGe5*#-%ZzL|?+94$FgR-+oV3O;U7&4Zsipva1^U#vqA7b1! zYSxER@GW^=6(!Z%)?BS>%U<)WrBMC2l#eXo3-}yFjhddu}$#J_3c5-!ab8M`ftaYKy z#G>mqZ?|QSK-O$AWaw>sLKW8Rh-!KrOESS^RfIzpC5rTl!jYg#DZf9-DAO1(Es0Eo zvO-Bze-{2C;U9g*&8N*EG7G(mqQ?DxtDpv zjs%LH9YyQ1O1(6V0cy#!pjaD9hZ^-q9m2w;f9VbVKzTHW1l#$Vy_ zGfOTke4=VfY7dmYLn8Rnckj$IS2>>A@N||&Omeyt^QHjj08p$^b6cW;ZHXe1xeBOO zGt%XL$Ffj1ItjmW;e<#&7|!ypT0|AgGp7xv{>tGP5*a3WeilW83bDpCv=a+`Mxx+i zf1hCFcxUP4+F))iCJqvQ^1@`19C!R{wF<}?uEHL}@;Td;nK~p4hMZCK7;ACQXrt0> z<#>|FDXvKIkPLugj#}iqc=xsO{*+x$G6*4ak4pNG5njKuqg1Lqjl9cy+=ow zsUj&Dq19QfSR2V3!%OaKuDL|UX`>uUao7GL!An!$bMe^SbHCx7KXcTeXU&il8V7@QQfMgWnx7=|8@1VBWa>1Mh&0u`qmqIGpLI?>SaODPhal9;ikL6Jq7UV} zW>g>&*LO-(f+}Q!-o%X329*7Z7`w-II43;<5!^yI`5l>peItohv_C}Ff0k9vo#fgD*-UaP&{C^^LJ)8dfLH)W_RxBS~-$EtxyzR z@F98cxOAXovNuTrg*AL}5qRsfH^F5biq#uL)Gc2?#4|T#G_ws3$?}H#>l`J;=RktF zuTK_QPS<(8dvY zFeN%t^5WRe@4?jq-I{Fe=BAL5G+lP_-_-E4F!i}ULdAPpAJ{QO?(*Hn zl%Jd{#_SJqH64=t1YnAbAkuQ=7 z@qV>|VFD^i$)qYlf2}F2{;?Lf3D_j9FZBZ%&7*j3{SMp+4y}}!gS0;AoYF3G-X5dI zXpWj^Ff&t)n!oDExdwD!DzjlQ->A-)Ys&2}^ibbJyH!=TB)AaI^mrt@j@0tW9WtFLHkxf0PHzy(1L*DZUz21I=j9ju3LPExjJ=s6(4$b0JFAtJy(NeoLMF@&Bsp z-go9Xt}9L7isAo_{;IMLnZme%JkEH~hXIVa07{~5!4f5qbPGLKKTrH*wi@tT77UQz zW@JW1#$m_aYpuQF8RaQM{nQrHPgAoyvlTRcFjI3!e`wn%#S zMORla?Yg}#h7^7q&i?K z-3|Q(K$uz!JQsJF`aN>xfD<1qimBEATp|f0nQ}FPEPPno6FeaZLj4}e zg{<%FJ!(VbUd4iVIOWqYgEFoxt{~`;Ux9BqXYOOVA9v8FdJmU;U2|R=o>Yr@4z|oA zcV$EK?40YM)pe8_b4+pLT8)!hHOdBMug|YDBijy=$5}XHl`<*%W%Sthv|HvFI7w{g zf7OG>`@Q#!AC?b&o1xSDY3hh(mK5KC#AnVoXaX6S>f5&{WX`Jb?ebpli{7ai=hH|K z^{PjAruUa^U>frd=z45N$lda(a$)ZA)05hHMr2&sAoTOgz0`9}pO2OgjAs5){NO1g z^|;3OY0Vv0yw^5XV*t_d;rq~90yoJve?CJ0(l@QJ^a3XFUfW1M4Inmihm-n0B+jZ0 zxea2XX(6Om3XX2avru2RkrOXX7;W4Eiw*IdxO_bJ>cK*{HKTa~>vyUW*+$wo<5hCB zu=9B`DX>OCv7QFaEy0`?)f4mHXnQ3mlwW%l(#)IDwDP=r_ooRXRa-rq5;GR=61(3c28jt{@02ejt zUXOZuTRx4dZTjSsn*_DuY(p!#fA>W7e^e{0Hm6(3mUHx!iA-ea1n2O|ObT)T*PeHD zgjEcroV`Bi)jNfFuc=+VzLtCH?my`u-tHN5n686!m*b|WV&8+68srStDZ{C81FQXw z1>>xGjizU1)vRKH1?@J2*sut&Tu5)`>P*3VBf6((zRRDd11Wm-}<3YlXtCx zWByVpUt3@Oo`LD;bvmNq>5o!>8&tG>+5(!Fy%y445;rK=D+5(0puGEZrl0tDJAE?# z#zOBl`z8+D+!vKDjA+iP_wpf5{!rZc%ySOdo^VC(e2A&3KsPGle|*47k%hy*$vtG$ zqwHUb+6Q}8-$$xVn5!*>amqh{<`l}hc)b#VJ+;;E)?t2VsB zWQ4GAH*)=)yDEG+dx@KznMpy*d979R-p(&Hn0S9@f`D(1f9N3Pr$_u4)oK#0rBuy5 z6}0r=Ao!6d#zhn+Z$`*tpo29!W`T%r%~3QTtn=C_SmecPjt*K3W?9S~7TCqMxTB|M zC-h}$)l38de~T06dsIwKRM!ckvdoAd2R&BiJh!u4fn*|dr*8+=7M)r;RbfRZmL#M311A1))a!2BJ zcHO>F#8V~soIA8yw#?Ix0KTez)$7M49-cGgL0hD>eZr!40z&^^BT-yPR4s4CbjecPBK|{*Dx)|=>hFreLyd4gd>YjTqi}cH$??J}S zdocNU=>6Oeq$K1&>S-)+6KVOjE4Iabx6WYI#6>FdE4=W>dw+X5HGA)cTK}--qz9>i zRNufunu{Q3hLnrcvWFh}7-T!5-?q&zL+f3zHrwf(otr^^^VWqrpNfS7lM+!mDZd6WB)R;hgI}3UTVfYN!8xz( z{Z}H%_*4K0*|!%gLwdJ}*b^jI%^g`8)qK)&37BOYT(4&I0#bK12apY^hg7Z@4)NNv zmqUKf_#0J2iUm1G;a6{auEzKES~5mFWJ%{dgWswnbu9Wle-o$clZhxbNN$bj>@>@` zvZ%td6{i4uWG{2Z(+`>ZoLl6K@`h~KrmV&#%&GoeGC~w8`+6mw+^{DsUr zzrh9ejBSt;$3QASo<*^;eh)4B_SYHlGHMq%u#vXM&SW9a_pjUvtiD=LN8Cf32)}+Nh%Cmz#EB!|od)rkvL^nh^<; z>h%LKAa95B15&Ez&VvR-MzUtGqt1Ne-G6~XRu6#e&WzB`PouWgnI)bn+g5v(ItDbE zb41-s6v?d~NFI`IO$%5+?&PzuJBf^JqmE8;$7YJzeJ-%5(wOT<4W>q@%udtxU8n<& ze@#C7W*^VI<~-`f|JG5XBQ%(IwXGM#1;l2=ASW#HVab6!K+1J+azmK8H6+nCm^&o>j$ztSh4 z-3sUz)_Z8eWX)7M)}jF}a6vQ2VcRnYQbXGP|++U;}RXE0`(FkWsESm%3wpYF-brBiXlW7TeDCbE%z}S}pTM ziz+jO^x0+m@&uGckQL8fpHg5s4`dOpynW161(id|r(L*;Jvx_qU}X`ZMn|~C(*$wQ zlgf9YItE}{dpt%LafUk07Iju>f0x&L)Iy<=o|Z#^CEr8fvN3>AkYGpo9xmrQv90`J z`)JKX7OT zb)G)oPzG9ak5{ksL5;V5DQ~o6_>1^O>#{8ZS-1W^MxZsK5CsKMa+UDBr_>F{goCum zUO(4YtI5G^j50g*OP{BxZjLn-m%e>0s{AY&8(aX>Zi%a5dARXb4`_|k@=S|NWa4TT zIf+|FrKl1B>Euj=o`Hz1fA@^atmz|(thh9!N=;UzY+ zZXqZkmr^|-r}|3F!b00oqAA-bFq7WkGW$Bo_FCp`x-yTxkZf2|6O#oGtb0vYDtS{2 zN2FDH)uI#+$**8*Q4Fzu>42DJZfaQszxq5SM%;L@MNZ<~>y$`If7Uxh5rAmVs0V#D zg4#LXMt&i)u?y*etbUEBh}qrqdXsrb?D3*54-7($+a`jLxq@Xozp}=)9*CGFPj694 z2fnG^vKYGELb=iJPr^ za6)V4Sc_7hiJc^&e?L7lhpZMdbaw7Lr<+8gGZtdR3N==*N9CCw10mv89bT^0ahBgl zOtsPJVqbDO)$7&7p?Mp9lM$!GS9|<7OY-#AFR_5kF0-K2*7>sn@5l*c4`^$p2kDMO z@UOlp3yqt)mx#}*XiKOMkd0;GKnN;6yBsww%xhflRe`XYP>{NELeA+IKRNqvt z5%jn%YA5E}UMWR(#7zG7?mVd;kXdbx^g488^3-JcfW-VJrjR_al^7y+QuP4dMTjXa zqPpoTi!-7eD}sq>cLVEX>r?4&7Kw112nGMJZFmU<>9Y< z%dU~Q@*vR_fAeYA2i-}}A}yR>TUbsUw4R1U|Lj!)lDlL!b{&x1yiLhFIO}uO1FEj+ z$FIO&Htgz~%OUldv=ALmf7D+2KC|NDDni@ZfnwA&fO6IIpvDI*O|<2rQ3y0b6yLG zEQwHYW0Ta&v4&7t62U5{d+R!pR@FFw>i2Ndjt}p#_a@$DMSty^9`2kpV16Hqt}|-1 zyzMSIcLbGf2-Rz}VO+|zT%ZxTwzoT}@wSMqWQN18H|=?2SvS5$diX4Fl@Y3M8>Ug> zLss&0f66pw8wybwe_J=%iu9FNI_OYl^|XD&=5j>EqTP+M&7lBzep3RUbI-*6{D87v z4_dsL2Luy(fJ9Xf4x4XA0O94{OR|>MV+Qid6%0?&HAYt!ce?Dsg)x(Rm2yUSrqu?R zn}AeW=GT%L_VtvzOD5;aSDrI|y`CWY?G2vre^rTFUoX2spG<=Odq%d`Yho-&74VCDzKqyX{(Ks7lSppsM*avBuOx+3eQuR5RU>=eEp!z*x%&)b0YGa(A7o9;j8>bp(JN?Y;RGTruWE zO~}fii{!Y`^<5JQL*?6Em1{v2+>WWjf5z)W{!*Dk%#Zq|U_EEXuQ!z)*Nptod~~O+ zvr!JgOw2X+@)goUp{+tAxBMy=Ajy0h4V68a8g!`WOXdnT1SAw|3^3RQHOnIXqf}#C z9!uWq31ra4$=?IoL-sJAHr7vD25ch7nubbO1>L0Bm%Qa*#5}ql<&dS`(-T4=e^kM^ zyc)3(UoO{=Ff}>E`lWc3jS1eA_-Vb)ZBfam_k#rrzE>8C0_bn`fIhjHSzG9*=egke zz9%nqQ+4u8Tn!73O@31daKgvggB6i6d+p$sWvMos=*pHeep3UfSEFj{jkMTAf(5Gc zJv^bjy>BAH6yUOrdahTFC}5s6e_XZMNm?XFZQDmpnB04j(Uw&9bf-o~cd`q`&5 z!C$g***7@M%pudwa9zkTI7V&b98uo-)+gp)VnzI$zFfg`3n?%=ZisQ|<>2k~x`9+qplwW&?|$`KQzLOt<`kk&jgEa!M6tfl@Wj@PyI8-F8@1|LxQVs0 zpwiStMh5&1nv=KX{0QO*{IVP zUwemFJ~HnN*~IJ1U#g1cf021%XKtZ?0K$ODKl$Jy8uvUpU7N%`}AMQ@q#=`;TVb^I!uk>rnyfeJ?ZBN!YJUtV+Ah-BlBsl9O*vsW_7Fe^HgR^<8#njDUQ7 zpCPT7$OK3rjP%@HAd8yaL0JptwBMudX5I>R2yn&9s&6mZxyls&*8 zPcDKsA8M6h%nJ17nsZ-h?($Ccu^F(?HtJgC=-^(qn&~dO4_9Bm$KeCAoEBKays_*g z3c)w44G(|K*zL}8WX_01{kQx*2g+T>*7pPE=b7h%`+{GaeN$yS;|Dv4=-z&!DyRI; zdKw<3!tQC2f8x)$<$l5q_Q`Y-n@!bJG3AFMNco-}X*I{~9I`>Vw$D@KGH0UW{77Z_ z9rIBist1=@(0hnG2EbOfK`Kr^M4yo^s&DF|-q8NyX)J<8^?g|Ey|r7a;6l2n-{X#x zJFMC+%F~vAa7er(sa4<9vBt+v3z^=;`^%^CN4w2Me~i8EKdP3aRMq!Um5#<*j@!V9 zriXt(l)Q3RJ`_6_ld0dM%BfO1WkE+2j7|%+vW#HBj!pux*@kbI(Fi!u*OnR(2PwH{ zk2NI0SMH+0xvGKic$#`>{ye;WLqOikS)UEA!@<%fsPmhwa zRgT;9e^jY5=P21!aQ7PP7v-irvs7upaLIXKd-b?{8b)v4=MJ&;>&kikG75>F(MCOq zT-zWZN^n;X-T=HM+I++fn{H~NNnI2hST5x!QpG$uPHtI%|$K&-+ZjiW_1*=9&Zg*)w7W zOD8JNsyb*meTpgDJYg-e zZ^Rtdyw4r@nvLQ;&h0k$dCCI%lszC=lTkLR*njTz-D|j>J{u{Ebac{nLD(?o^+jzw z?=le9e5Cve+)>_L{hn)fKIiwjaCS0_eO%O4GBY$Rva9(XXp=kc)-68XqJpdfcXwfD8PVDgEW>;{ra_d}G0Z%CUy2R|u-c&E35|Jc|K{AU?oAojG?gIDp%$*!g%Knmjh=03T zS8h_%LutC4iDZYDWW3SXxxJD}Llsn|;+zL~Ta=}0+-PD_j!27}W@4r6VNTj^vnf#6 z77W8f4|iuPks`^KZD=N>?|-^C9vP(;?nU{|-?Pf3r$2i7IiO_K19Zg3$ed_k zM@GtVV>lTpXYQtGCHa1Gu%e*6q|Bfj~usw*6P*BBGQ+A<6xip<$rd-#XdD< zU#5&6gYN*1=NRnjv}BZxhMB@+xr+gUDh6M@mdl}2l@@hDGunCzaBX>$V0oOWO($l_ zTh6`-_)?Us9tcmmr>8|gGqeBaVJpwO8OzJ+&Zkke&4}4~hrcZJ@F;Cjo&@*f+oFs6w0fIf~|D+x<)3WRl%3PU8&Dz74inR)~Ud=JMs}U_&T2 zTfg*y4W4V;y1v8fRvWvUYQSxAG-a>d3fA;@C|)TJp6iF@=-G?j=-X8fa2{HvitaPj z`&{+dX73|sJT5{o=ikfQ81j`W_Rqdt4$d)3T?w8;GpU|Z6t zMh6&3Ifb@}2IPp&_+FXIxn_X!+{rHfWAi@yQ`aOJrj7D6%Xl1gpZ-Ds8*tvMot&w~2mAf+PCHpevEe8X50za-E?34sj zpMq}Sm!xa9v48JmWLuk2zPH*OWDQeoNs#){cQbf;>K%1oV6l^D-;SZ~mFrXj=$+`m zODLSwYWDhi%^3~XhS+z`1H-xI?N9+$naG^IC%|;Fuy}Ptn7aCg^xoN|OMP0hzuAUU z-g8ur<>*~m`INpdp!$B$0Ka57x|a5JUCzsS1h&PM{tkx^fpNH8ZdEz~+IJLWx?i(`H{Ql=T59N>eS zNqr@OAx4e887D|N0 zDq}%nuhX+4P?CG;m1_%Nu#XS#3GWM49 z4Y1R7GvBj-VC0%RKg!PciZVo(}b%@O6>Fi3GTsTiVTQ2~4frFnuAIt4kIit~r z*y|A^I#?20aTT?hIJY(5SfD-DeA-Bl)mTHWOhCEW=6V9LmIWY6RkE~@n9lvcI8&VJ zHp*jE>{cXC1)%h9Z#NmjiZl*v27kGlI%y?EBzf}pKoBX7P`}5v!y8JAWOc4Ne$ZH2 z+2*2CzqJJwJNsrS+$)wQY^v-_Rf`^$uGzq1Z5M)QSOD7VM882_FU9E9=6t%Q*YANx z+AD(ox(SniRpx;O*1hyYhUEofRqq)@=wc~o^LzmRW*Y(d!q931AYYj~7JpIQLg}zj zSSx13u)MEAc(G71%hOEV3~o*C2kQDJ!V6Q<%|3T!{1(iUoV_;qE%#AvC`#m5i)`FV zFIo@YP>4Bq+<%rl0r5M{kle)xJ0^?KdqnDc?vQ4ER8Cy2fD!V}zP;|Y?5Guh4CI>Iz;65dY?M6HOS`eiaa0d5 zyHjO{UV~`1?CCKMo!StS%jNRTSG`XT?4{)(7gX=wR1%1{Fh0}Jgr(M)l+8@2{Pie|* zGXXp1h^m;d7jNoy1H$+!b$u43*;3^k7In*WZ38V_d7HXjYJWNv>ebW44ErWAYNF-s z@W!DKt;sQfdi`L5qRLqGU9jrPcnHhDbi{j9 z^n2A76P&DhJqT)<-v%+DW>8oh7Sy`D<-h{D8|7HLor-(ZFI6f{g1arW;LE#}gd=y` zZRS?SmJc8ZS&A$ybXRgm!V7XZ=J!!|^DNv3g*ROJynh+NMSREu-W`8>QDdOy7FtSL z=C7@Aw=cmENwxgiELYwNv{5s)-$QJ?I5tvNHmgE6u}IZs9&lI^Q=-j#XiC&Coo9uu zDzQ*_TK5fHdoexwC$Og63EYt-O0zUhjBvx$nU4tA18v zAW?i~41YyvQe}}`bBY3V-dS>){6W5l1b0?885~zXC{HGGEM{=^nxrdnld>o$j?I%6 ztiQbFNPH`RR~`zK#c(|HX>^A2eo9r*xt(i{EKTw?C6X`!`jjE`ow_&!@bjP}S$!J> z?#%Ms!Cev`59@z}0LZb%o=(j;ZD7ALhN6^EtAAZ+BQ2Emz6qbnbKR8WGJL z>r3RPy&Az4#e8bqcy=Ahx~pk>EA%s59_9Uvf>JJ|V3NBF;8W_z$RJZ}%iI);L|1uF z)|Dw=>xYGuP0f&RmOSeRFkG>+7@f(@j37!|KHzGGN^oc8^_T)`oxz|pV~frA?6CW7 z!G8DD=YDnbVsjzURE< zAof{|wewBRbBY`Fd&K=45oLC$$C6`kSH(HwV(P`c*1}FAZK>Ii_igt)jzjIREKe!! z>b1u`pE*M`N|u5iP@B#DV44QpvU@3Y7l%!;7Vz=r4A_Tl&l^)&q89&DAo<>2u=fhVgC z;5{e6@LsQwDwMM zs+yWOt_emaxum#r)L9efz{01<6|8jcR7@H;oDsmt?;}RcDX(AZ^5L{?%Ug;gEwZG= zHr4|?y}XGJ%iib0wcJ&-%lCkV6ph%@ej zEGaow>*w($LR)o{FbGvu%zr(81bdYni7^1$u$fP3dERX!ZF#7ElNPA)yvx89y{=pf zWa@cBwId0ssxy>hK$-N&yBV;Hcu1{n_&>_nX#qMy<*(nv2}pHT*F1cg^j&1+Y3by+ zIk-{V@;%UjnG1cG)k|WS9^^i*M1`>kHRgzd(n<7G53rrjL`*+MWPdx^9oWgDll?TD zvOKr_-6ob}{csu2`w!KxNgg44ZC)owV5lo!#j6%!18b>jLM)_35_2jlCoPjBD%19r zF|JWHi8Mj=T5@~sF%YmLCzow5`Yu~p)C0SU)r=?d{(u2=o;T}H8)H!XITniV8PR-j z4jQTS0KaQI1;U+sNq_DBbP#1Yaz{eEOx5m}BDiWZ!p=1JxwOG_mFiLWXgF>^8V=E z1vfS;#=RaW3hL0-9NlK$Cwo1ZsTqe=)KIc5=Yf(isToIV zkRAADK8@~wuDK_L_SDRVDur3djKGs-!y~f@;3-3xt$OgL@1Jp4L-5rsA2dNR?;L~q zJ(TL}J%3_$v{%vsN1XRl@FB`8Id^zm_&4=5a-DQ-(;_I9Os64;iPe>Dq}VgMf{1N@ zseP1%VxPfM z5?98rpM*i1N%Q0*@wu{Zq68W19K=gN^lEd7S7mfX$CSm%v33b>n03MdWWC40?_m;b0=iatj`H!XaP#ET(|7@lr3W8T-k12uA6(zkp$6&kT7b@)X& zsQMx~iFus+ol${}ZUtW!*Gu~8wxy_8voE{3jn|-bt}=G-ljogpT**Cb@>wcFZ*=*!y+mduTuJ?ZXo0`LO2123=~a*VhJr zkY~xIb3LzF=FE7~=6mo+<9|JG7ydJM3KmrU>Khmglv_Vd&Bs!3e9V@(&g`$eO)x*RQMtg~0x$=w$YqL@$O(ji_MWk~md0^9bQ) z-)_kARsBE@xK$a!z`XRd{64r=Yx?nTx8PSs(1#`K`l7ecv&*;(_fKyDkA_34bTZlh1L3C+9ol)6^;M(c$-=iPn>%@lz@F_Oo-))t5@%#4Zfu3y+e&Rew2m2*dw1N)S2EOeRgP| zZu597dEW*F{puQ{I}W)RQ})1(;eX7p{gTy8hVo7mKm@yB032?Sz|CN zn`CCl+dm*Ws6gG2rBq?j;djOKsBi3T-h_iaXWU7vMnktCmy?-^LETV=r4-V1; z+x5Z1@vd)56O;~m%~1%9o8peuH^}g=7Jb~tU9-L%i_$awG}>CZg6YB$?5ufxj2hSJ zIfyuXEgAPe;A#kZ*Y6p3nN;GSrSLpc_2jspz?1pqCJ5txnhjR)se0hX@?i|nLS-ql z4Qf*2kq)yBKPuZmWPfE23>)zwi<@oc*PgMb!)+UNE8F10B_~p(6V$NIITnDzXFhG< zN857nta84&&Fy(B7@W+hzubsgrk94FhLxE;FsqTes@F61zg7>ZgD;xhImsbv)L4+`#Y$(!zI2Pe}fj(s#}SY>ciBOZ`+9F2@be z_L<7qhoi*aQ+*p{mwU}Qm$topibJ(F9IbpBuO^W&$D8lc`{;XDs4>TYo>8kL9z+wm zzS%KKkY}cg!+)jJYQD!U=b7=Hg9V+mekuCrl)gWlq3yEY1J#+h8uEPjC3(sS5igl9 zIe-E>!*PJyZ&~92ZbcdLoY%514u<-rbTrYR(gG#as}UkM(=Wm0%7Ewm9btEeiF(h#{*7&PFkeA@9kdqk-Q-G4KZg>NU2l&fS{n<1k($e*Io zId^t!jGk|l*dchT*E^k(BY!D4A&^=ns?fR?j%i#d>YI^A~BCkY^Be}>vROySo0@D zTHkGXqvfY%Xr$L19U@hI&pO?I=EOM57=fJj(|;%~CbQwZsb-g%NMB9y>m1QL$-#`r z^IK4dyA7?2yfd9@ozIC*KSx!oj4ZfieTaI{r$yMwISM1%)dEghWx{OreIDazsy+S` zGgNM{+CcSptmYhS=V#7d@mV0ie3~*cdC%h8^2xJrvP`YOaEde1^~?8cgPWQb-f|*X z&wu9u>DN!Qhh?1N#Qg7yS0`)+URm|Po-D4LmWgyleucNobKVYNj;I%Qo1tZp>s0U> zHXwVjx>e_wQ&zYc*XK+XG*8VFvge(-Lr{VbtaBxYA3)R9H`Bn)AT0_f<>`DP!!?=? zWZ|*)DnauB{;KyNBb<5PJ|%#AsQNHn&k-2l{`1Woo{0Dejed8xyd7l$f{gC?@5{0f> z^|XWTamGhas*kNK0)z5!4a}##)gjMbAEG#!-#*Drb-skXGg!>Kv+}3-wff4{0|g|v%t)Us+~scbP+u%9h(SH8 zK=Zb|XPtCc+>P>SviymJp}PD*hxQttUFP_C*WySuLoRrmJw1Gu_nLbMy+f$rTH7p? z7RtXKh|{j%btz5pp$9jr4Vj6&h<^!5vc$Nt$mDn5hE8yeH8#`BwYHuH6o$Z%7Wjvw z_R&jXcTS(;!ckCMGM`53DDhR-By5--G4BK&F#9&i^(AKeazj5d+b4c8QI@K{J>0i5 zN=;MB9-qI5vK_h5vn zv)2;UODZc~EFDi2ad*n7Js;~?%NR0$eBn^d+OClr|~Pj0F`&XTCbDkE_z$PM-b=e zJ${fbGU|RQcme{EPg55zd2QD$OZvg0Y+mM_uMtL?>I}XVn4Z#ez@l+8%K3)SCF5AV zUSQ^WzZTWKQiX!1Aqo3@&+0WjI&k<9zSV=(c%~PPa`#@-_rF%&TYsw349nGCz>2w* z?80kx()L)pqR$zp09T$suj=;z@6#4Zi}&>Tqny&7*cEtfsnxBX#>1D;`ef;|M41%D z=(El9OK?3cu*aDlyI@y3n#Y2bnWx!KRinQ)fCwB$^#C{ng!F@j9DG}##&drYJZ@!q z`YDr1Ur$rWpsRvjB7ecHEYHIA&oNN9oSIv`$I*CXwAD&bEFlNxA^R(gf z)!C>#lem9H30TzKtk?z%%23S^7OH~XH|bj{!vAr;X+s~QVnQq;%jKmF3-;$TpEme1 zu_wZ;W9^oI&4QZR--qZ)YP4(PRH!|XMPRHjKP(q~M$SZ3IO)*(J#ZV?>SCbS+KXNZ%>Tg(j?PH<+I92vxr64U4~^aY4V%W zpg1cZtj(bWMD8I}<{Wj^Yk1GAVgYZoApOo?`W}_j^DFRsRb#C82!&sj9rK=XZ;X?6 zSngM`{#ediGF*mbkma)n*i3~ew0i9b6~$qJ=B_&}3x7GGiY%~DgD-p)%ccf-oIfn$ zRpkw`xQiF!W>`eZbKJzDA9ZfO$?ZbibQ^-+g+10rWuS@#56e(3t+D3#Z@r5tH!r4{ zZQMgE77h4yf6KsB8>sO_cxeOCUbpH2BO~yiUtwLbfOEfw8sGbL9y&6GGEkiF1(TJh zrpqZsp?~^4P!lR(mu08^S&TQO{!|d_RgV|C*6l+Zw1UDP{KeAqfUaRiPPN%VrE(tZ zD&LfcKgtk_ujFYaG4-s>kT%mO_E)1bbPWsFsg2uqWqn!R_q|XCEXo8|)z)EwhfROy zklF2VgWEt;$X*}KHXaqs=;mb`DI+ALdfGXP8-M4B(i(T+&Nj`w0kw0QLe*;_Cj8j6fDjckhznx#FPsAl;C$)bvb?@hn}J0| zqq@(rKtxq^e^>|&)!d;==b)+m;5HyUjrUa4CIobNTczo8*Z>D7L~qHb*Mi6{bOLdp|@XNMXu z&s$hQxtv;a$Uk?G&-y*j?SYb>mLUsJdwMot00?z9Qek?pg^>Xa zCkd11Dag1)ZH^oHQHZ4Ko5(gNKP?tYueq1hcVTt)O`5b&Ei@8|#1{jW<%TC9RT1NfT{H208ugc)Uz9~+Tr}J$D>Wd+!4dt<3+a{G5VD)Vl=Sx3Pf`3qj z!tOPlltPXS1%Io!-=mWCo=<}oCYV-zQ(~aK=-Wcnukhq=1qD?A&)G{ja4sCNHkXQ} z`Q^ljxvJGSi3d|8Es}?oUm)-NglNy*WqqoPo%3x~sVncN01J2|-8Z*_%Gl@ugknWB zk#*3sik&+wB+c`e^1PLBtTBKO>3=&dIy^O>oCn+GD9Nv&4AoLOSLMt_!z}AF0wS8%*k`*pkEIcGyoFyJhX< z3cT^~vu|XNvnr1FkVPxzJ%5XOHLo0A!!|~qIzb4?w=c_XqQ1_-pRDErNS4Uyc5jezqOY4Y*mQ5isAzOz;RIQ)8 z-EGU=|2{n)E)&%^s3&N@w8#uq^$TBS3u^YnJu`hECVBa(`3U@G@=1M`v*h zE)*gQVq4y2SQHn_wSapwrSGDYgUOhy#Ok^79!wkQq5gG^sBk7J_O=ig&N-?K)Fbbw z7+76l4Y~_Yqt_foO0rJX16~N4Pg^K7<&1yQ`N=ra{fRT1ISCp&w1(<5yT3TtmD|Op zqPmqg%KJ;~HgiTS>VKC!>i4_^J2PvAwZ%c{Hg@GgpADv$O4fBUIsd+v;%8~&M9QhE(`>eZ+#fdi6?*V!x6H>h<^-7d7E$@5k zJq>k0`TCrric4aPn*TSy&O@Bu705rA9-!lXPGd?=Vb6I6uIsh5Fxc@8|2boO*(LwFb8NxE>E$2=K z5GB370(mB&`nHgf$+d7S&GofSs3Oz8%kcq|rOi%BI(PDO1Qzo9C=DS`TD?9OVXwj-R)$}PYY1e1|9stt&mS;Wa zB0+_GkGiq9Gc9V*WK4B(m12uF6IGfkcQF>Brz_itlPtAg1C9tV)$ajto;o|m0*P6_ z2erc;y)F1zg+|3GqtjIk3Kq)g86`lC!X2ycGu>f$b7k=k-tUY(3A&7HV2vC1y7R%j zZqWT~V}Cn(cdva^LGOCc!0%i&cU&58d#(i*pRVRL$Pa%szk>Tu>Q^BmsFph1YX`*K)$r6=U zvdu2on&0PCr6dtiisj%y<*9kvDvA}OXe{NKycH-`z>>SN>Z5Zh!+F{mxZD#@1+*Ud z6|OG{_8d20M}+4ZoeL|bs_MQeb}O9T?~w@1Ts2)F?nbx4U-;1Gd?9&e->%kVc7HA6 zi{%^z|0b4Md!k|myo&m!!?JW6qR>eB(Km4##dm5}k;?pl6B2&}LFlKQj`Z4HfHs8w zYhGgrK%lkd1u#&4B5(*ES*wnVCGz+?tH)LWp zWU_K5syT@`TYY=uE@#~T;ftaxW}8z<==`QLCpzz0w8h{La`v*EiAQ?ODt~}yu3!Xi zkBoWaNbq5EL`~h!GfA<4_;wp#E^jPg3Ah?L1}tl0J&3IjKx~cZGE|-JX;BJ3Pg;T7 zmta!1u}ad19l>5@va*esROYiDxR2f9t zcz@+hPg>I$^ET-spk*I7d7$gq{?z(Tw|Es!G;F!f78F*}kaAuh&K=joF+ck1FO zSwZtEaa?jgw>cvVPk+@*vYMTzIb&|M8u2t-YSV%aa?4ZZIXE#n-=2e!nD-wri&xeu zM!1vTPCnCfc&ZuS8I_4tJgl#Poz<)*7;D;rId^2u8Mn(hE-YyDCO@ZM`~S=?%KUSkR#>GP3Pf7$=*J&uyBnDBOO zo%S{7s00}K!hd|)`X%L<7G+m58V>cV22ze267rS!o#!YoQ%V9hYbr85-@qeN>06uW z$+N0nj{>!QnyENXMJ3zNDal(7xByGeH<89h@e(bv>a%Y=A@v-p2b3%BnHfT&lsC)M zS+<-%R!va^dR*-Mra*&dpFh|7TubRrv>8G_^$%Q}eTH0(*GaXZ_FhPP zD8TwYJhUlwsoyMb4~(ziPJ-`TGm*}>AWFXn*SBh6dCy@H*Ozf$ZA5vA_3Fyu@-u)?bds;Z(dUQjcHU`Y?Rxm-y=?PCT0%b zTR6V%3z$hZ^PE*8(IoZiJwlpU3)pQ1XuM}UxPMJ&Nja8Ml;!iWNa?j@#NTorxK;yo zWUq{xyusMkjRI!DyP%CE2tI(F_Zi#jriLs2d6 zz9eo#r1hpQLG_wtPwxqf2GTpf+^Y6YkAJ~-d$*<%p!o;vBznIw$Tf$4#8|!NQ24HG zad6+-VjkqqM^yb&mTvN%5RJ`}o{B);o_YZ-+z9b?;qF zbW&-c`aOtf9dQQGC$X0EjnsM8th3@F2F~pD;nVew#6kuy`*w`wm=>(ij7p7?Qh&`h z9%9k9t9lyIpjXx4d%wVY@4b`Lz>|;7r@1sGZ|ZfP0topPWb!+ri3}m9mNOo>cUp5t z5+5~1s&5Dssz9V=#5QttE_kTkVaZEAQ{hY%D*kAmKP*f8NEc{A#;cs?2%GhLh6PL~ zeh(78ykhmhRaa)HpXSuuyAAkT;(y79JP{?c>;bHMMuIJDK5VvOc;|=;m&rWWJV0-U z8K{|vSPhEOZB{j^YWGL1mQJcQ2hKNbnZ0DOPHXNAT3P3I(NzSH%O4%Y0zz{&q65O3 znN@&3@Pm9B9X0speA@a}lq@YLA3whjpwL%Fen3>5CAG5NSjcO}@IfH#uzxw$aG0vz zSKlbzrJgGC0`-ABON6M!U2=4=Bw#J-Jwmh;|I)%y?cbv=H^@M?f&b3i;d>xud-ftk zI-K%pB6E2zaO80w@|TV>(z%ll=klIs)`0!qdtSfR$Da2_N1zaG?nvC>E&VDKALnWQ zQtF%1|1}0Ih*NC=r`yspN`LIMg4@>J<`~zlE`=Bspd?4 z(?3W|i8fMaJvxVtJbNu=bkE!2d)~!1vInkt>YmhyipL*4uf^k4FYGo-24&w!L?L%) zn?azJAd*v#exixzmysY zpk2P_DJhV>c4KK~s#f$Oyo0jdJwQnp1Wn>aF$D*v&RZpX)-5eWaR_=9r4!hkyb6{^4Y@U42NSx&uxaHuf zRU6XwQ=jO^O@=Vf#(#qXP~NkMV2DfQnmc6fl4ApUrn*b6EMhUO6$U;eoR?#*T%1cr z{nB%HI(HjPjh;Ko?`#?UGR`-djCzmMN8{t)*JSSGS??y%d}sHVCm>3^hj`Sx*N-R( zHeUTwegnjG?XYwMrzJh_QFC%iB=fMGxg)U_;(D=Xh z#7eP1cxB&)ZhvfMN#$4QX&>2xRdvfcgXaluF?~xlFWqUg4S=uJQ15w&QzX91oo!Hn zstrx2sr%+u(6|ltoTeigiRw^kQ#%s&kNK86g=8qIdi8CHz^1au42A-pmu=oem2!>> z(Mru^8!9^)DG@t{n#kQ!3-2QTywf`WWIjp9zYe=FI|vu6L;%Zsz{bAYrz&tRi}9YvQE!i2%is|vkI_P zouBO6h?V4?xR}`)kEf>hL6dA=wjl&t?^)faG7dXqywN1iHWU~VpGXUmL{hd9UTWO> zD9|pcSAXx>@DviAF~rVQmCZKxmW-~<8%?qv(M?5*UJIMy$(zv(VcbgjaCs=3Id_Cm zn#198s19!Ke58&DpVTiUY%c+n7Np4DLw5JC-mBnh)V8XpA>a6{X(0-ew}P2swFpnP zp^uT+l^J@5E?Txx)-dl2xFrNb^F1Ix%aTtUhktYL2M(qW-qT5=Bb5^uYHYGlD!tDzdrPh;zys`mxyNX2Of1# z3?Lfvy=MsB3RK@Z8y9}>kvKbGN0Lw32DnNhA;uaE(h*#~3k>3mj!L#6k)9|6p_&i8 zf`5g!@s+W4`p!@-buta*=d2gX)j7$O)T+l+^uO#i`2$65>-UVhs2|#h$0tKf3YlPa zjwp_tC}h5e=bgUtLi=XQNXar$EXX_HLa&YES?{4=zvsDt+&*F5Wg90+|DNHGruRe@ zM`40|8b9$!tUD)wvQ_pP2BVo<3wTq^>}pL}^cHZ#M{BD0z^o@GxK$)fJdl@*8< zp@q&(vCx{xahpMLGDAq!m#Rg6xtR`OMsXIYf+MpCoI$*cT=g@TJadQ3Z1(1Px_`{H zno}KoQTK(`P~zCaGFbA<{nR&j+|RPO^w7o;PKO%eihf> zF80c&;g=-(Oz|Dzl^mUIfcEmtqJP-7riRKQU}u}p9;i#2`GsX0wIO;8u%r6i77%KL z3h8ubW8F(+g~%mm-v&B8{oZ94C&;MOvSYLM$`Y`X%&##3S{KDH3n*x7OoL?cp1O@? zpOKQ~5Cct*csXQ)du8$C37%))c1oT(4+f&WJ%{r}^*5iU4m)|{de6D?g@1D2QHOnN z&*6l!e&(Kd@j82tN2F;q!*aQ0<^7aJBE8>38zTAWwkl}hJT+-%yH(a0T}l(G!7HOhknYfqIXYBi-u)gR zs`;6}hk}=KHPr(IK2emk%o6$C12cQhU&?!X+7Z zQPw#tU!P;`#?q`MK7TacMb3kfsLgXuB{|pkDSJIcOLGj~u#>6exsF>-#>rPGcuCxP z51K@4e6CUgf~wg@-Iw%gRwcvty#K5-4q=bAkj$Lf3f~4&HphU2-MNpI8p*!p9#5=O z_0Re}CTZ(muTb!u&$g9Et?=J^Wf!SQW2EaJ;PK#1(9#k9GMhU2zqbi7@o7IeGq2pikU=vOx zPZWK_m7&ktJ%8Ao>D`8+UgoMtVyJ5hvM8%qJH^ItKt`y(;XUF8rDdg^(NCjQnc1;T z)o`;XpZ2K^2fmJC(b)rjRc9|ZoAqtV_lULj9neS*Y(n*oQrMn|&y8HBylb^lH$&Nz zw73)`Vp{bsYcA&wBF&VZs$yJlW>>ujj+pDv7G!{&Z-0cO$xmmSSrO;_+G@~J;K??$ zP0}CTl=#_u+~{C@SS8|19gQHAKOmpg12|%3KGQN2m(O3y-|1MI>;kG&zh@u6sNTc7 z-cnm@6Ki$UW}D|tS+umcx8}WG80pc`2z5l?N8b417OjSyA*4*DbE*gPph)K&9Vp(+ z_H8O>+aoaZ; z=^Pzpbh_rFn&kkT*#><=>Ava#aBr(&Z6bim#Z()?aNvlx5Rz%jH{4OSp;DFT%?*9L z*#jH+LF0%w9v9kQy$3Mi?6XA82FR9dqYh!_&G@|Ffw@YqkqfO=Zz4XP=~uB}q(7qv zJAZ|Y=CQEYdut}{AE+%j>UA}CX2{PdRS8dgf~)@RY9?Kd3nh za5DtPs&9acM7%y&-pK^mX`d~*C*p((ROHjttUJQ1;g~GWPW}!Co2jv<#F^TYsob zrwRo^h~!ItxwoPXnbX4te5|QM>!79eopV%<|HvCMX?t9R{G~SD#*^<7$ZMj{cA&wo zY(iaqWl$c$vNkX7?(Xg$+?@bHf(8ig?y|VMTW}5T7Tkiny9al-k8^H)b*t|F*sYze z-kI5|>F$}9hv975q0=YjWm1PWl2CpEB1W8J=fT8-xD2i!W%^|#^F(N7)PrNCNFxVt zz%bryq?UL)P$J{vgjP43pQK~8qw9!1WV&P-kdtKO3fqe%@sjd&HH@_x|6$iD8VmA? zSfIpUYf#l~#D+fRDi~Vhft(YV=7GK4Fw~=}>X$6f?(LXBgDQ{5tnQ2krw<k<^Lx0)AKQkuaZH43mfx4^2_HuibUJ!|2|ft=Q#hRIu?P0b~R30jIq2V zkD@KGC^$CdxZ*c=tNr1FKSB%pdG)xJ(&-|P{AWtz{Bv$nuNb`L_z(VIuT3&6ZkhyZ zlJ3p>7TAjTj^7Wt=Hfy{COvw#kv|XdfD<*nj0DAr-;qsnjvpvN?ObooY?AFGD2+%n z{&$Ti{Q2YbzLTYJD|cKbVo)7cZ-l>Pota4f;J{BVLk~EOH`KLI^-1f0E2*) zWUURWjqb4~vg~X@%}b?ryBS%$X3Sa&$uxcc*D`dDJL2Y?L9m^>_^4501r|A~FAE_^ z?E;&DwAota@fNEb+Wlf?WM+SzeMDauy@Gt6k!f4NX&X!lvX!6JLvPz&6q@i#Yd(v> z5Dwm2B0oal40&f9kKoY^Av_;P01k}cKFbga`c73F6ckg9KW|S1P3e@hq)5BK|KNWJ ze})66In;_fj8m}**B~-;JaIO>m@1L{eB26|hp6b{*iBiwv!`wS>L0)Nc}8o=SH#!P zHnmt*MV`vZ6pmu3^0WB7VTbL3;?12AO!xG(5p^}8GjayP?V;&eP%f?-54fS8K`2ub zI%Si`r*hpFnX@vTA~P`S8zZ)6Em`J)T9FJdM{J9cLCZtqvbM${L*+z&?5gmNszKfq1F4dB;7T9 z44SUeM|2LO+^>2!ijp|k1wedFU-as;M%8#mNfbXuoKvId&!aW|0qJD_I=dIfzznZy zzu(UZPsH}y#+#^l-7X`7)A7Dc%T|ul#$v~UDH=m4=AmnC>< zdU$=$i&st52c5*adfYt|nuxv#Vm@6wVfmF#7*`K#s?-guUuaCZ5CbvtW#QT325{(I z^C#1de`J-h(0)%6EhvKT2<1@AXQsD{6Ip1xEt~pdS2};&b-<0gV7m;S<8b(+-^8*+!%SL zJ7Jw?;V5J&ba}}>?JU(CcB*2?`g%C$l!6e8-#YG7zU2%${+5Y;=YIV(L+M$eCKpGf(kwKVHo@_2*U$vTm zXpC=rN73_2o*i}K&9QwYd3Hr-IQbE|Z;~=ME3_APL{G1uU_}snJyMEE$o0Vu&p1D$O(eAGA2+*=O9tA#?H;(6lbC~ zvbZII9CMV|v;{mp?1BOyX(#m%EqxRxj=vOG8gD#hT@=zgA?}%!{+P$@Cgvf&r|g-+ z0@On@9toZ}t&7KEeid>oL?zZM%S?Ls^>0{TI`zQHvSdI(vc7~=FUKc1dC>J|GayK| zT3t?$y3QSjRn;kkGZt~2FHPLl2kaEu_RCrx#S5WF?f^ts;)Z1HIX4Ca@Z&G{bRSNX z`GLU&X;z}|C1|rWHW*7S8D!_e=Ta7AQHj&L7`JlNf~#A~w<{YlFWJ-NmS0E&URB$? zM+GoOJA5>;X}hyvj)}kz)vMjus)X1I8P12V1l$a==BfmP)%5WIqixN7I*2%anp7BL z9gpExK>*&1&R4Z7G{0r0*1|!kS>HuD_P8Uph`}r?OMWlJa}o|M%R$JdFvRg5eMb{r z)cM;>L5%VR*(;)28aBV=LDbhq?>VS(Zg!NTmzRa9`}shXS{(1?XW33vqCPzx80Q==s*PX* zoPBukXq!eRze?R2)B04j?l@7(OICVbWWX@L(*+J>TW{fVAQ`#VVL(<`q{_Iv8w#Pn zH$JA2Nr2}hCvLcn7F?GzN`LKjic|bs21n#LdDEvZ;Q9#utmhKAT(G`^4Hb4hiq@zO z0%%tWC`{uZOJQ|7U>*@o z+n794^^t=iJ|mLjUdQ>e8}z8f!k0r9(@X043&Knvw2uyb@%?dJJWm8irTT@3Y{=vm zXlBWC)24?bUqxw>3~SHq5KhegA+TElZ_vcKnm450~+5%F9dU#gqiw2hy(@ z;yg%Ub(J9EO2Ct_DdH4Lfp-R~Mi*`3XU z0g9h%b4Pj~K84&y?_u<=!C@LF>@HpCRFV)|pu^K=$%jM33GU?gtd0%h-NHtq{SWCP znZX|3Ljl}t=5z*9>IZKstD`z1fXnopZyX# zbN|{beoWyxk?|6`yA0mEll;WZ_DGZlD%0(m;Hq49M)b4-n2)2$uIHi?>`@pP&VJ*9~NUb-wts4ntPu5s(oMDbKaf3 zKa@6!UtT_**JD3k7Z2ZGfGeZ-yXMW0*^jrb?7Peh;PL5&c^`2+oAs3!GrMouANl<=RkAbZ`<;+d^{iGRq zx)a{~SaxWLst*L^X>)kF(eFptbUwS-+x?|bRqWI zeLOO6zCYdwzg}i;eyrMc@re4q3~j#Nq6ok4PHw)v&f;zhe;k)w0Po97ueUiLK(o6g zs1OJEtwJwI#RLWhVE_(>1_lP^X6IqFSBiL zJgO3^-_LYyIq8EjyNiO8cBk5Yca{Se-P!w-435+vd8QcUsLvHxO0wDX z;c4IRYVE6jyk(k7UU{z*9~%vEPtvm#e}8(p@A_~9cWD62Mf_)6-f$3BuZjz#*mq8~g++wqU2W7kNag#Rq<7z+5XCO#b?pLd3|pDMgX{ zt$fr^jt+u}(%Zzy@J!yY-0(T(k0U%|BXXd({jX(C&51ef3k#fk)l0_yWjqZH!5>Q* zsYf7$KLF26iD^w%+2SvcPL3~&K7#J&-a^6|N*xq^#Q~JPK9*-p-k82+`JYbfg@J;z zmS+P*ugr26lPYe^e$r&_zg7Mm-lD=Kk2wT5A1$9NqnO=J@Wco;IC@0KyM(J@sgb^Q zFX3hVA?D2Ma`|uFTm8tC_mr7Y&e~62qambD4Z$+kBe#y~Q_GI8ws)Pb)8d!%%Z;_R z!gW@~ZwIqPZFgsXf;SO`ON^lah#?O#^vj7wJ(Bb05Hl>)t(%leC4CAI=Xa1X%&G$SrVeO`}wU&ugoc#&s98ncoKZ8R3 zsX?DQpD5I}qijLMCWTz_xbWHoq-}y5?AP3uh&+V{#L?rx1aMYG#@s}}j=#x_Y$|$+ zrB`W*IG^MmcW)~*lGYmSr%G@NkfO$L;2X_t+QrCwTDy&3sW{HZ;>{M;h9I8Y6g4t zhjT?zrZ~{Q9-^v&{HyLQ30x}HDD-X?ki={c)<U+7n#mjow>Pj>M~%b8sqRrf zHuBHt-McS(64p*$UQDBqFfQIqzx+!L>iCcfbAe?ZArpw)gLRWSEnZsDC=;- z%ciWnQ!9hTLK3{Vd_vDo$6%KkT&!HfLc`yU2z+r-(BigSpLIS=;0*}VNYDR0z#2@+ zGp*jNcRoSs%mGXi`1U7rT!L|-rbU&v)$Jp(G1ol8lY}33^E_PFk=MI2PgmvFy9%OS z$k}M{3a4amjij(2>Y_n>@5wqT1J+hx1zcGbwJB1 zf&Hg%{?loNO~68qzD|2$_)l&@{0eH=)1jc|cNzbL2RX(kT$P5?7MH|w4wF--4Y7cz zK?)Rpc*L;uWjZ|4wH{AF&0->_o|P-qA#m~PAZ5DjHSBo__X zQSQz^dF~dwUNJUAC{2~XNosNb&`KqSw!aj!)iD9$B;xrizwqA2*7*XBDCMA2`7{cR zV$1peZtLE&!{9_n`g=++J}ZU?IE`{4ZTed;tXGABV-@I(fYTvB)`{>7*_>ui>ZCAE zaa&@qec`~tLSv1uu_?&e(uN18gM|zbQ9r>qj3tG^l;6VMnKo9~OQM368L>2y@;^FR zSRw@SkI6Uv`QmKk!2?cvsYLY}s`ZpaWIu$lp%yKpkB7g)fCWI#Mev2|f1K${V#-2k zRd^-{MkZNe9{AyTtu~1}1-=xJI)jROvAz zpm1JJx0$$`JW}~|gP5=KPa(3|#+33hWej%AUCbL<3u5^9O`~a}Z(52ulJ#^u&Lj^_ z6kYRVDC|N43Ka?b?^?^>ZC=ZHjTBrqXQi%%bZ%4F236t)A-{)gobn^`^mu8wC0>98 z6)k5!TKs(sLSsd+8I2ey^YOvq^L?`gvjP2&YnFJ_qt+w5DlSPyMhUg{X=OU-mOZH> zM))jAb*ppNXiApV87aAVm*=k!j1 z2?$g;@GZ(#oCKln292(2s?Q7kYeWDyWn79i?Xq%zNJ&Yf_?Z4&%<)LkO^dj07>KDA z)gg~DI}&TMY)IQl*z%CQ=n{C@$JqyOoD(}!buEd)0=3&q31GMWfy)!AS`D`@NGMv= zY;wHLrPcEuvto0}`=wDHipx?d9#$+|Z{u_#xd+*s@K(r0UniwBw?f7j>;h!*aAr5@ z3k8B0Ta_Gh{9fiD?x0Rk6FwmzoqTBPrn%FJC{a^RVNPkv7k>)nYLsiBOu;}NKzzo3 zu`S#?-N5!HJW<}jy$PM6_T`4XY~cp)50s!;|LNg)^a0!MZM~2voN*I4C0Ey1xGNhP zq6x+QkXZY!y3vCPftGALcM0^PGH1PHtCOBI9+(Z+Ri;m& zRxU7!T>hrm%2PQ1wTF4+;nR(H4gY~l#GdRkzqfr&2L^*E0ErT$2nXP>Q?kM_zZ*n_ zq4=V%gz7)C>9}iRcW!eykL47AwC^xD6-S4hYD4t@A&NczTqKOW2)Hu0XHYQ4+;H~~ z&Fn#PuUp;;+~`47;`NWlIZ)U}Yq{@Df65Mr@z@@=ch<)DKK2nT?|#&L3`X3_m*h5g z*WS25CL}4=I(XwI76DQoM&nwWLk^lxPq-1UB)u?B@x)^{Ii9W`JUS6E!Fi(sd|5l^ z^udlVIRgq{P9nplCAW3Z+JuiOvjS?9f*c~k3S%KOY1X^D>E5#{_%#uqI7kmrs<Su0K6gagl>hPI-w6!ROo@!my@);0!>h=S z=};c{N%(oX#r~k{P#(W%-^?)YrZC#uEe;9l4vPuDWtkQgTY)0`wIvxeLTqa=!%3Tn zt5#F4m}ZE7=}EejBb;$=#A=LVN{~O@csoDHKy3>-_3ynyg>`V=uP3oe#9Ua@NJcbB zTquX%=!6ZIZWI{bx}|f?*B}!Ht9Olv11m?>tdwj%w(1IX&6>*7c`(}%i}~CD?1L8LDCI~I=NAC@;81c-(tf=s;nl>Hk$B3^ zjAgV{M5Q1W#tY2FdcP|}#F4+wpl+xr*oi3ZUNq7)N|T&Zw{%z!mc6vbe$9qEWx%Cp z$=4JX)veAimud`ut4JFP8T)zp0xmgtuqW$?@U{d_Yo?Rm#@P5EJ{dBD>&>@=5cMHa zf3N%i3;`l%3%qsvg~a6Fc1&f>cQVCgcjilDqBFv>91a<0!&?~+RBKUP7;dSd0 zsHe&+ei$+{apTJReuZwF-7Z^K68KTrsZR2djx0=awRsv%9{-vfkD)88n~K9X4w^T^ zn1M)9^hUiKyli#D#3UpZvHe&?hdO=y0$CH|8C*$b>eOq|ezD(Q?cZ>oIA}fc1wPT8 zf5Djh_y1AXmf$kO$wNi3EZvz5ksh+tKaS>WD_3J^D&vxnjJ_JvK+>{j8~9kEs11hX z@ny$N4pL_gO}ThJ)$T@mYCx{RjZ6z0)d6zfrIyX3t`1Y@zwnXc?wE*_yD+XYy(USn zDgRr%O2KiEj;x?`)=GCH=S>LKPeebcscO^+O}l%>OWw)2!5vw06xRw1&VsEQ zU3O8dDGHI$7^CE<0{=LPWmLlB8$?v6VW7>c6gSp%7_U9g6d&M;j<>;k)&%fED4ql) zVFo}4lxGkq;G=a+oE5Rcl2ieC$~lD##R{BNa8@BVwBb7j))K*-?1|>c{SExthq%~& z+E4!w&35M_@XNW-4Dx8OmXJ_VPM%VgeSI~``V8@Ujl^t-Tp;U4DH_0^H7U9JvuZaO zP$vW4a@`vOd=Ef^bvvHxsz8+jaNeRMx9Kpbv=D!n+nr}?QU!tc5(DlA!G$tzH#HFd zZk-<~vfL>|96Gse+*9sj!hr104}}?1I*^44>p1CV79#BQeH4F9ft2gJM3ItPVY_mBnP}buI+|J> zCkvKsPTZWRz)ywbvXe(-&I+&)2h&&z6F+I=neuAYq%{!bpty+vJw&0O2swi)Oluv* ztVWn;(X|(qw>wBo5K#2uCfgan7cOANX|YUSiMd>swATjLhtNjqj9V$zRFY>(mEwKE zAHlh6$x!LuGrIq;9qO?CsAXw7B&Z-cMl8Y^0Y0)w2%nZo;0wy6EX~N&r0^5Ig~38D z3{jO1-6sy5gm|H9u_(VbVuB0qXKws{&d@h?ij&w5&GvQ7nwnecv#GKEc=s$SiYk?Gh-nL7mu z=5bkUfsbvQs);A~jNj~lxqo^zdE--zJr!ewGoz}mHnmI%ZCiXEphK7l==t39beFp@-)z!k_W$uaw8wqs4DcMf(w5S zb?e)ccA7CwUdsgHn!w^S{zIaCQ6~0dW)*m4!{74c;h$=k>gdDhxj0ex%+Y=}*k_FA zru0(^<4NZFM7qp~XAR==W_;0bM^v0cgdp_w5sXK`uC|6dD3(~yr?*3=?$Jv|B3M#B zcpJY?@B9+ll8M)zWu6`?x9tFVQ$fXlXbHci?WMOvH|XU0taTjbz)%FteJYPiqudf{ z?U=10B;Pd?pCwS`1Ye$>lHcuw;$$rdl6C}jeae6(w8FkJZ-0=Qgq5HA8V*5@dG8-o zkE|i^j!cTpQ^

O7qn0`v6V8xxgX!4I0hf=bwVVsLBCt3$!kLxHK$uR}JTS{I%EL zPP{3x=uxiVO#=_JLw_HrffbcZ6$0m6EBa?JE=#HE9;G4K1J)M-7myCGDilgsRj~Mq zC2~O!Rd+<1(n5l?`4`IKaoUiA7frfE=FdY4PlqPikXuO(*#B1sWry0QP%5?*sUEgn@f-mCA0QLQSfiyL`0YxWZbr z{MVdgf;@Gc1uOXV&A|NA-C_GYSV1cxh!&$9FI&OM)5KSlE8bm?6Ed2);27E%U!odN zx|6;kDy+%bNJo*ezRa1Z%;SKed|^IMB7WP!NP^^5;>a@gvkcfa`;LNtGwa5u%yY}? zdcec6dU+LX&xyI`&m|g?9UtPc(bpUT=x=x7lp1c#gbI%fd|)>Ybk>AEGEXj) z_#6gW#S3$kLz9q(da>@tu|h#>k8}cNM#2RRWF;)ec*gh@;CRzej{5gjKd~NkHmL)!!{S8V{_9P&s$hHll zmR*9U2@X1HTR}gJM5sQmlP4D!|4Nz~e(i)DTzvX5kG)}yfZw)6tFicNm|P6;lGRh@XhbnNm^T! z_m=x8_dj=FcU_{`HymSP{&um>IT0M>-3nrw`q-Q835YXzBnErab%Gmxrb%%uxwYV} zwe;l~uHQ#com3;;S3zwdl>+5g{#t8VMCjI7%92nF8Dta0mp}Ij0eA_m8vv`$PK|q=<=}ZGX2rB(lCspW(yis zm@}Wc(NsVG(Y>F|+TZ{k3`=qfWG)Y4`h@E@}}eODQn@Y*JhMu2lPQ8=c*V z^K>?hx?PC(!g)7bCPwl-NXI|>2ZH;mp0Ys9q9t+V!i$!N9ZJ6%LFPB6WIG3XF(JFZ zX6gk{{sAghNey|Lps_V&riHm(4E$-#4PyD1GA=B7Qtkpkl52m$eL(wg+`| z{gys^zK6Ncte$Wa^#2_7$R|9I$HUm|_oSM1s&Rv>S05;)aCh zylWW{Go=LffS_;jgt`*#hv~t|E_)Wi$#1$0+DeYgN!X)o7I%q!^EqNJ1d(-R_zGZ5 z`l}1wMn0h^(JTKh~T>#G56> z$43UD1Kzm>g>Wf%;!%^(@9kSM=aCC52MDqCMXJZjGy(z5O3`Rk{9M@ z|9}N%`1?5)7PcCBM6~K_%e@Y;9Ky>F}L5+`)=2;IK}T$L&k#lpJ~QI$ErU z%Vhq#&!>zMgB+ZvF2Xfw&Hi__n%iZ@MG)x2nKp1#&co&pT(VyHIU<1XUp_$o{#(On z+p&1Nb=3$BsGJV+SI!I*olEM3qM?|{WCaVQ6c2_{D3iotGeqyZ^s??{^v_H(g_7qW z0JZb8N0&s8a6ojZTy3wfSy6dLO0gjGkP_-ox;xcaM+fUycq5oaz4^l(vY=LN#{snx z4+*DzD@|}n4%QHxlr7(=d()el?L~PO-sC8A7b1}=gKw}x)CHP7JhfLPg3ZoKt91Ed zwG>EF$h1nSQ8U>j(+lL?9Xh_}UWynz(cy3tre<%o?Jl5zrSAlh24?!v1ejJ|5jz$@ z*g;!~>mJz7A`MWZRuV#t?{V2kORta9SE zLeSFLX5A!Gz7S(t-=-GB$8>iv<9F+{n&a zzg^dBU7H+I(|2Emb8_4wNLe?5pX5@Wh)MB}+B-eY+03qGG6;Ma4qVg6vWj}x%F$GD zjkA`?@gC_kkyEYYJDgR6;DSe#-6$JrGJFVPtGy$8OgRZb2X;ACRi3F+vyc-s$LFlp zx6n>XTfEH9Z6X8kQxo75EPX&jQSJZ%C(TfOpY5hw;PB7#lVaC2>)j%_=v~!8jQ}}l zbKPE*R@eLmZnULpaSQMmo66#q{$7X~XOnuh_LN~F4!BqDLd}FytW++aOZS?`dff2YJU=4f7#C+3pH5t~VSG5uW6l{wgmHFnCbp82Hpo-ogWwshD9s-A9>W ze!&{Bd|^5>PP2aJ_7jwGotwF@^yl=PBwB;8NNrBCi*>d8+bLP7vrOHc{k0=0 zqNdgS5m+sdQ99muD6T_`N=MlcmC2be)QQ?FGTXVuagJ7A7FK%|QlyZ+Wn+{LQzczV zZBTb37gp$ko-(7iB?mEFznR$nVS*GxCh^UYMJ1?L*^4g}Eum#9$HB!b0ILdII|_~1gm}>>FwsbSs#Y$V+E0UluXQtS{^>^xkQ=wZ zu;Pg`IbDG@{);<|=E_0qwJCuPWf0X|5553p3wsZt7#7aS;2=)xDMW+2?@mT`*`z~Y ztSO7gO=l)nn;y$9O|&X6UO5`>6pv2V6&jSodT@T+Ckb2}cY3{D?Us~B+LizgJ}x=X zW)x|7z8Z$HLzdsW-S$tJ1M=<_OJ4M<0l>*?z3cpk{sypmlJ#KQN zOs)%Rk$_f@eVjI6s=s^g7PAVZ7mu`Ig$;t2e#zJFKYzPV>S{CxH@`T!B*|Nq#2~ed z5<`dx>j~$ral1R(eM1qP`h+=2dq+vK_;}#yc$p}9Z%%J*6sf@O&O$7QnQ+uI=NUGn z7gZ^)Uw6dkhhp9SlYGiya={&MJyhba?jNKJ1{mX#Q9ui=US1Gp!)fR4xAwhenzB?WtI60Bc=WS^<5};fvKq)A_n0s3G95D_}KE2f=vu>rZRP z^4f8DZbcx<1e$+iLg?;mP&FDqFB}l z3XynNE&r4qjniES^>1}4SQ!$|0`k906^XOf;bCZW2t8Cs82WX5eXxU-egePCXcoPSk2Uc7{7GJU5e}xQ=k01HIZPAt=d{GQ>2f-#th6u)!`JJ`DP|b* zYpCxVH->*|FitNr&#??8g-zLIQoVmsV(~|4wqV;sFAZNyU%y^egbNxAp^|9Q ziTtWpK^m#`9bdflxCl8>+ZbRw9%<5BZHRZmyrT*`(^FQNCU1~H5rk}}eVZQifk6H( zs}u8cPS5fyAwgo^FJh9R5E%Q8C?h9!gM0rbe>jVu#UlIF8R)x+3*WxXL}f0#!&}Aw zG}U9C52%Amozii=llz7|#JlvEn^qdxCl2BJ| zoo=(pGox}pt9OyY#k)r+f@!a-&Zc1y)dqGiU`~X`{;NVUC0M_L79;l zMIPghen&udry_ko#z75mV!pqgSk$`TsbbL?#pY%x-2*2pHdnTnZ%TyjBdusKX*_S`%GFf;dWRf08v*JIOi&`3yskvitacOI;(t_^r(=-`j-Cwyl7* z-D19)v~FG7c?34nnkf=|X~$?{Y(bVUBWY7pDREv%!7_3FPhAGjE?l?c5~DpHZfay^ z`d`Z*bLWSC;{{$7tiIzQIj$}i}2o_mfudmKz1B}2``jA}Ay zqbiHd=9Z#ivR72hCpBi&Y0R>yTCyNCPwEuSTRJvgZ-Jd@7mGIBkuqkSJu)||V-jk) zFp{cUeE-U%9)`=(@>(vU(-L<^wK#LBEytaZ9BsUas{7Ip^bAKEf9$T`&94st^kpY{ z?_oM>=zqZ%Y)Th@vc)O*o5{(}&%X5M{;kq%@Ab?i_^Q$NG{(HF#NG3IgUO2Fr^+z+ zLb?0DZ}*9cvyBvbn$?7=zC^Vf2Z9N? zn_AisNAiLJs$lb7|Krzda}@N&YijMVjCKLis8NXYHYt$-GqH0=K+B8T?AMG7x<%W# z_KySLFn#yKW-)zP=*b1I@X6mexX&3dp{yo1VoxZUR1MhmDNw4MKDuofpDm$2LaTsc zDVTVd5@X_+E1ZxbeZgNT@<&ULe=M93Do?VE$BZl$N(7AoWu<`6oxoQWAKs0q8Q+1UfNF72fGf0xSY~FR&MevX2rkEAmd} zvZy*?x>&QzQ|msCBEUnw1|5+e%>%JwTdb~6%3>L2^zK!D6#8_o zkzRIuhG9MaTHvWnbTlioMi!yX_rf&r5B2#AlCh;VL*FQ0hRBwqiZ`x>$pUt3|4hB_SzZ?_3-{&Iyn`ohlO+#E3= z8d3{wM8Ip5_>m>~dxX!_;!j3OVI349?uuBwL30b^Sv=x0_}3=C#92?^?Ib4-D94by zQRryOmmcL=h&r}!9~uy}&TC+5ulf;l66|>zOpb2q#ImwI_B+z!@(Q=dmtJ-mJO(2s zzg`}$`1MCS&6!#t83N@IxMxXm!^?um_vHk))=jKr0jTH`A2$aV=ApY0hYn!Pf`Rp= zwr&sih9Pd`sBn%O>Aj*g-q?8rC^j?5E);ivw>Ov@j&!p(8f3|Zl}h%tYs=nWvPiSe zjAZ_n`?uJvVL8g$6I<$Ge{SOq7E8MDdw>pU$vydS3?!e)jeDb_z?kUX^UjkRb482N z;7~-(1oxe0khjTXebTL#!5FzE&OV|q2V&L#NLP`_td-1sc;qoRG{EtO;AHftOsJww z-C_Ev2e#E&_bFo1_8MU()H#*cTRC0)ksCAfmqU`HMrUk_zB%*)lLbd55JjHP#?a!Tj#>_uGL9SqG5^iEq4G}snASsxF#Oz_-7ANecX_Wg zg<|8Hp`kP=GG~QB*EzW|KgEXnclbV9f6@>sZ10a)TSe*IRZK~W69>+aj~9cEt#6b6 zQMTS5a=@M>;o7~I$E2|nLz*c~kL2U_h-H|7h^ee(sIYtIE} zSO&sS=ibUs9T!pgRC$zs?&NPP^2KVx_MLLo$7AB-;#1#=8n-w8Ye=8@;_~&=rXR{8 z{epWIw|HX!&YBbMkTyp?i8{g&gx81jq&|1u0x&e9;ii5zys+)=V-`{O;;|s9^HYPT zjMIisxLa(oQEacTSk%j%`1Qo9|AAoAaWNi5$jtw-1HO7OT!X=R zMp@i|g99l-`J+#4qy3KxOB4gb^e^9+9T1ASVc!o%r7P1AL(h#q>(}UO)*G{`GDH`B zfF@B7nmQBO2zeS4m-BVNUU%`f7#R;ooVwpWR~(-I2W~ftavsIOKspaL{fMMfUTyc( zkc0ooje=t3ycJ}fiKD1a&R0Xtn7d$zMDsLdh@3(Luv>*bn&IL2@B`(w43uK473ip0 z3$4ET2rssZJftTU)l$C0t@|xr);Z}*AlS1Pr#RM4e_Q3IJ_5ckKW18w;_( ziTB2EKvdZHFM+51eC9DUapIiF!xG1>eLzi~k+(gQ+K^I{aEON-aU0y5qtO#I8Dm%R zjx+(Q+EI)^m;);Wlb`1nqP{&NST=8FcT2(j2TUA(b4w*?6$Tz`9Wv7n0t^fiCG}S$ z2oLx^ZM(vX>66m{gk5h8!udn0X@e-f6>rh5N#TD;1`MBbr z1vgP~WFb5Bs?IdwNUTVQvgi|z=}=^wenw6{m08!e*eKOmuQ(FoDZ%zR<|xU+qe$zr zX7yC!@*_q*)F1sATgEhV7Qx71B1Fjx`Bj3pYP?;57Cp>BJc%pIA-IV~=^rJKjKP;I z+4RJ{e4vY15-=nox5Oc@AQWQJrm*{L6^gZuV6`oWV z3>*Yz>yQGD#y#TKT_2VC$V3=o9AqZjge=~`r!scB?@Cj z;kz!Q32X#FbYHQpyGI99LbZWya4=?gKV0H9C{um6a;Y*&HTCG1wYsSf4lfB58fQ{- zC<<~t?nYrS9(uj}2JiE8bkYl#)XP@`=~QL)$0qqwKR)hO3FM%=j2Id%Dnj_6k59vb z{h*(Zze*&(JUkCRjE=m~F*pg`Xwfxae72zRyb$^jD7FQkS

TW+s5QLUW zHUJU?XRS>&7ywZcV2C>|-+u#vF)=~^pDCQC<_vtY^`veLeEu)hRDwYeFNC)jD8(Cu RooYP@LWP#<`J5Zr{{u1n$$0<( diff --git a/XEngine_Docment/Docment_zh.docx b/XEngine_Docment/Docment_zh.docx index a4512f5bc5397b4b05d4ffd7532fd65cfa455c48..456ab94df0fe5b4f2f74f52503d1f682d7d75a34 100644 GIT binary patch delta 97553 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

mYjRADsSiGg%+hvILh@MCD?r)( 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

IYqA5Tzvxn{_QHKMCoc_I9bS_^nLAF}z? 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 delta 97609 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 Date: Wed, 26 Apr 2023 09:40:31 +0800 Subject: [PATCH 9/9] update:CHANGELOG --- CHANGELOG | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 1c3b59f..5010432 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,15 @@ +XEngine_ProxyServer V1.5.1.1001 + +更新:匹配XEngine到V8.x版本 +更新:启动打印xengine版本类型了 +修改:启动参数-v现在打印自身版本信息 +删除:xengine版本判断代码 + +update:match xengine v8.x +update:start printf xengine ver type +modify:printf self version info for parament -v +delete:xengine version judgment code +====================================================================================== XEngine_ProxyServer V1.5.0.1001 优化:优化服务器性能和线程个数 -- Gitee