From b06908df987bb91156f7f13c9168f60f9c683dea Mon Sep 17 00:00:00 2001 From: "Mr. eXoDia" Date: Thu, 29 May 2014 03:19:39 +0200 Subject: [PATCH] - better library loaders (file mapping to send the file to debug) - fixed module base reserving (before it was always reserved) - some code refactoring in TitanEngine.Debugger --- TitanEngine/Global.Debugger.cpp | 5 +- TitanEngine/Global.Debugger.h | 1 + .../TitanEngine.Debugger.DebugLoop.cpp | 7 +- TitanEngine/TitanEngine.Debugger.cpp | 127 +++++++------- .../LibraryLoader/LibraryLoader.cpp | 24 +++ .../LibraryLoader/LibraryLoader.sln | 20 +++ .../LibraryLoader/LibraryLoader.vcxproj | 164 ++++++++++++++++++ .../LibraryLoader.vcxproj.filters | 22 +++ .../LibraryLoader/x32/LibraryLoader.asm | 31 ---- .../LibraryLoader/x32/LibraryLoader.exe | Bin 1536 -> 32256 bytes .../LibraryLoader/x64/LibraryLoader.asm | 31 ---- .../LibraryLoader/x64/LibraryLoader.exe | Bin 1536 -> 37376 bytes 12 files changed, 295 insertions(+), 137 deletions(-) create mode 100644 TitanEngineLoaders/LibraryLoader/LibraryLoader.cpp create mode 100644 TitanEngineLoaders/LibraryLoader/LibraryLoader.sln create mode 100644 TitanEngineLoaders/LibraryLoader/LibraryLoader.vcxproj create mode 100644 TitanEngineLoaders/LibraryLoader/LibraryLoader.vcxproj.filters delete mode 100644 TitanEngineLoaders/LibraryLoader/x32/LibraryLoader.asm delete mode 100644 TitanEngineLoaders/LibraryLoader/x64/LibraryLoader.asm diff --git a/TitanEngine/Global.Debugger.cpp b/TitanEngine/Global.Debugger.cpp index 96e6c16..f273b31 100644 --- a/TitanEngine/Global.Debugger.cpp +++ b/TitanEngine/Global.Debugger.cpp @@ -2,6 +2,7 @@ #include "definitions.h" #include "Global.Debugger.h" #include "Global.Engine.h" +#include "Global.Breakpoints.h" HARDWARE_DATA DebugRegister[4] = {}; PROCESS_INFORMATION dbgProcessInformation = {}; @@ -17,6 +18,7 @@ ULONG_PTR DebugAttachedProcessCallBack = NULL; ULONG_PTR DebugReserveModuleBase = NULL; ULONG_PTR DebugDebuggingMainModuleBase = NULL; ULONG_PTR DebugDebuggingDLLBase = NULL; +HANDLE DebugDLLFileMapping; bool DebugAttachedToProcess = false; bool DebugRemoveDebugPrivilege = false; bool DebugDebuggingDLL = false; @@ -45,7 +47,7 @@ long DebugLoopInSecondThread(LPVOID InputParameter) { __try { - if(InputParameter == NULL) + if(InputParameter == NULL) //IsFileDll { InitDebugExW(expertDebug.szFileName, expertDebug.szCommandLine, expertDebug.szCurrentFolder, expertDebug.EntryCallBack); } @@ -68,6 +70,7 @@ void DebuggerReset() { RtlZeroMemory(&myDBGCustomHandler, sizeof CustomHandler); } + std::vector().swap(BreakPointBuffer); } void ClearProcessList() diff --git a/TitanEngine/Global.Debugger.h b/TitanEngine/Global.Debugger.h index b7490a5..93da947 100644 --- a/TitanEngine/Global.Debugger.h +++ b/TitanEngine/Global.Debugger.h @@ -19,6 +19,7 @@ extern bool DebugRemoveDebugPrivilege; extern ULONG_PTR DebugReserveModuleBase; extern ULONG_PTR DebugDebuggingMainModuleBase; extern ULONG_PTR DebugDebuggingDLLBase; +extern HANDLE DebugDLLFileMapping; extern bool DebugDebuggingDLL; extern wchar_t* DebugDebuggingDLLFullFileName; extern wchar_t* DebugDebuggingDLLFileName; diff --git a/TitanEngine/TitanEngine.Debugger.DebugLoop.cpp b/TitanEngine/TitanEngine.Debugger.DebugLoop.cpp index 0d78a69..da10cc7 100644 --- a/TitanEngine/TitanEngine.Debugger.DebugLoop.cpp +++ b/TitanEngine/TitanEngine.Debugger.DebugLoop.cpp @@ -127,12 +127,6 @@ __declspec(dllexport) void TITCALL DebugLoop() DLLPatchAddress = (ULONG_PTR)DBGEvent.u.CreateProcessInfo.lpBaseOfImage; DLLPatchAddress = (ULONG_PTR)DLLPatchAddress + UE_MODULEx86; #endif - if(!WriteProcessMemory(DBGEvent.u.CreateProcessInfo.hProcess, (LPVOID)DLLPatchAddress, DebugDebuggingDLLFullFileName, lstrlenW(DebugDebuggingDLLFullFileName) * 2, &NumberOfBytesReadWritten)) - { - StopDebug(); - EngineCloseHandle(DBGFileHandle); //close file handle - return; - } if(DebugReserveModuleBase) //reserve original image base { VirtualAllocEx(dbgProcessInformation.hProcess, (void*)DebugReserveModuleBase, 0x1000, MEM_RESERVE, PAGE_READWRITE); //return value nt used, yea just ignore. return value doesnt matter and there is no possible fix when failed :D this is only used to make sure DLL loads on another image base @@ -325,6 +319,7 @@ __declspec(dllexport) void TITCALL DebugLoop() { if(lstrcmpiW(&DLLDebugFileName[i+1], DebugDebuggingDLLFileName) == NULL) { + CloseHandle(DebugDLLFileMapping); //close file mapping handle SetBPX(DebugModuleEntryPoint + (ULONG_PTR)DBGEvent.u.LoadDll.lpBaseOfDll, UE_SINGLESHOOT, DebugModuleEntryPointCallBack); DebugDebuggingDLLBase = (ULONG_PTR)DBGEvent.u.LoadDll.lpBaseOfDll; } diff --git a/TitanEngine/TitanEngine.Debugger.cpp b/TitanEngine/TitanEngine.Debugger.cpp index 3f12a1b..eb99de2 100644 --- a/TitanEngine/TitanEngine.Debugger.cpp +++ b/TitanEngine/TitanEngine.Debugger.cpp @@ -3,7 +3,6 @@ #include "Global.Debugger.h" #include "Global.Engine.h" #include "Global.Handle.h" -#include "Global.Breakpoints.h" #include "Global.Threader.h" static wchar_t szBackupDebuggedFileName[512]; @@ -44,68 +43,56 @@ __declspec(dllexport) void* TITCALL InitDebug(char* szFileName, char* szCommandL } __declspec(dllexport) void* TITCALL InitDebugW(wchar_t* szFileName, wchar_t* szCommandLine, wchar_t* szCurrentFolder) { - wchar_t szCreateWithCmdLine[1024]; int DebugConsoleFlag = NULL; DebuggerReset(); - if(engineRemoveConsoleForDebugee) + if(DebugDebuggingDLL) + { + DebugConsoleFlag = CREATE_NO_WINDOW|CREATE_SUSPENDED; + } + else if(engineRemoveConsoleForDebugee) { DebugConsoleFlag = CREATE_NO_WINDOW; } - std::vector().swap(BreakPointBuffer); + if(engineEnableDebugPrivilege) { EngineSetDebugPrivilege(GetCurrentProcess(), true); DebugRemoveDebugPrivilege = true; } + wchar_t* szFileNameCreateProcess; + wchar_t* szCommandLineCreateProcess; if(szCommandLine == NULL || !lstrlenW(szCommandLine)) { - if(CreateProcessW(szFileName, NULL, NULL, NULL, false, DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS|DebugConsoleFlag|CREATE_NEW_CONSOLE, NULL, szCurrentFolder, &dbgStartupInfo, &dbgProcessInformation)) - { - if(engineEnableDebugPrivilege) - EngineSetDebugPrivilege(GetCurrentProcess(), false); - DebugAttachedToProcess = false; - DebugAttachedProcessCallBack = NULL; - std::vector().swap(BreakPointBuffer); - return &dbgProcessInformation; - } - else - { - DWORD lastError = GetLastError(); - if(engineEnableDebugPrivilege) - { - EngineSetDebugPrivilege(GetCurrentProcess(), false); - DebugRemoveDebugPrivilege = false; - } - memset(&dbgProcessInformation, 0, sizeof(PROCESS_INFORMATION)); - SetLastError(lastError); - return 0; - } + szCommandLineCreateProcess=0; + szFileNameCreateProcess=szFileName; } else { + wchar_t szCreateWithCmdLine[1024]; wsprintfW(szCreateWithCmdLine, L"\"%s\" %s", szFileName, szCommandLine); - if(CreateProcessW(NULL, szCreateWithCmdLine, NULL, NULL, false, DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS|DebugConsoleFlag|CREATE_NEW_CONSOLE, NULL, szCurrentFolder, &dbgStartupInfo, &dbgProcessInformation)) + szCommandLineCreateProcess=szCreateWithCmdLine; + szFileNameCreateProcess=0; + } + if(CreateProcessW(szFileNameCreateProcess, szCommandLineCreateProcess, NULL, NULL, false, DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS|DebugConsoleFlag|CREATE_NEW_CONSOLE, NULL, szCurrentFolder, &dbgStartupInfo, &dbgProcessInformation)) + { + if(engineEnableDebugPrivilege) + EngineSetDebugPrivilege(GetCurrentProcess(), false); + DebugAttachedToProcess = false; + DebugAttachedProcessCallBack = NULL; + return &dbgProcessInformation; + } + else + { + DWORD lastError = GetLastError(); + if(engineEnableDebugPrivilege) { - if(engineEnableDebugPrivilege) - EngineSetDebugPrivilege(GetCurrentProcess(), false); - DebugAttachedToProcess = false; - DebugAttachedProcessCallBack = NULL; - std::vector().swap(BreakPointBuffer); - return &dbgProcessInformation; - } - else - { - DWORD lastError = GetLastError(); - if(engineEnableDebugPrivilege) - { - EngineSetDebugPrivilege(GetCurrentProcess(), false); - DebugRemoveDebugPrivilege = false; - } - memset(&dbgProcessInformation, 0, sizeof(PROCESS_INFORMATION)); - SetLastError(lastError); - return 0; + EngineSetDebugPrivilege(GetCurrentProcess(), false); + DebugRemoveDebugPrivilege = false; } + memset(&dbgProcessInformation, 0, sizeof(PROCESS_INFORMATION)); + SetLastError(lastError); + return 0; } } @@ -158,25 +145,17 @@ __declspec(dllexport) void* TITCALL InitDLLDebug(char* szFileName, bool ReserveM __declspec(dllexport) void* TITCALL InitDLLDebugW(wchar_t* szFileName, bool ReserveModuleBase, wchar_t* szCommandLine, wchar_t* szCurrentFolder, LPVOID EntryCallBack) { - - int i = NULL; - int j = NULL; - bool ReturnData = false; - DebugReserveModuleBase = NULL; - - RtlZeroMemory(&szDebuggerName, sizeof szDebuggerName); - if(lstrlenW(szFileName) < 512) + memset(szDebuggerName, 0, sizeof(szDebuggerName)); + if(lstrlenW(szFileName) < sizeof(szDebuggerName)) { - RtlZeroMemory(&szBackupDebuggedFileName, sizeof szBackupDebuggedFileName); + memset(szBackupDebuggedFileName, 0, sizeof(szBackupDebuggedFileName)); lstrcpyW(szBackupDebuggedFileName, szFileName); szFileName = &szBackupDebuggedFileName[0]; } lstrcpyW(szDebuggerName, szFileName); - i = lstrlenW(szDebuggerName); + int i = lstrlenW(szDebuggerName); while(szDebuggerName[i] != '\\' && i) - { i--; - } wchar_t DLLLoaderName[64]=L""; #ifdef _WIN64 wsprintfW(DLLLoaderName, L"DLLLoader64_%.4X.exe", GetTickCount()&0xFFFF); @@ -189,27 +168,40 @@ __declspec(dllexport) void* TITCALL InitDLLDebugW(wchar_t* szFileName, bool Rese lstrcpyW(szDebuggerName, DLLLoaderName); #if defined(_WIN64) - ReturnData = EngineExtractResource("LOADERX64", szDebuggerName); + if(EngineExtractResource("LOADERX64", szDebuggerName)) #else - ReturnData = EngineExtractResource("LOADERX86", szDebuggerName); + if(EngineExtractResource("LOADERX86", szDebuggerName)) #endif - if(ReturnData) { DebugDebuggingDLL = true; - i = lstrlenW(szFileName); - while(szFileName[i] != 0x5C && i >= NULL) - { + int i = lstrlenW(szFileName); + while(szFileName[i] != '\\' && i) i--; - } DebugDebuggingDLLBase = NULL; DebugDebuggingMainModuleBase = NULL; DebugDebuggingDLLFullFileName = szFileName; DebugDebuggingDLLFileName = &szFileName[i+1]; DebugModuleImageBase = (ULONG_PTR)GetPE32DataW(szFileName, NULL, UE_IMAGEBASE); - DebugReserveModuleBase = DebugModuleImageBase; DebugModuleEntryPoint = (ULONG_PTR)GetPE32DataW(szFileName, NULL, UE_OEP); DebugModuleEntryPointCallBack = EntryCallBack; - return InitDebugW(szDebuggerName, szCommandLine, szCurrentFolder); + DebugReserveModuleBase = 0; + if(ReserveModuleBase) + DebugReserveModuleBase = DebugModuleImageBase; + PPROCESS_INFORMATION ReturnValue = (PPROCESS_INFORMATION)InitDebugW(szDebuggerName, szCommandLine, szCurrentFolder); + wchar_t szName[256]=L""; + swprintf(szName, L"Global\\szLibraryName%X", (unsigned int)ReturnValue->dwProcessId); + DebugDLLFileMapping=CreateFileMappingW(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, 512*sizeof(wchar_t), szName); + if(DebugDLLFileMapping) + { + wchar_t* szLibraryPathMapping=(wchar_t*)MapViewOfFile(DebugDLLFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 512*sizeof(wchar_t)); + if(szLibraryPathMapping) + { + wcscpy(szLibraryPathMapping, DebugDebuggingDLLFullFileName); + UnmapViewOfFile(szLibraryPathMapping); + } + } + ResumeThread(ReturnValue->hThread); + return ReturnValue; } return 0; } @@ -234,7 +226,7 @@ __declspec(dllexport) bool TITCALL AttachDebugger(DWORD ProcessId, bool KillOnEx if(ProcessId != NULL && dbgProcessInformation.hProcess == NULL) { - std::vector().swap(BreakPointBuffer); + DebuggerReset(); if(engineEnableDebugPrivilege) { EngineSetDebugPrivilege(GetCurrentProcess(), true); @@ -253,7 +245,6 @@ __declspec(dllexport) bool TITCALL AttachDebugger(DWORD ProcessId, bool KillOnEx myDebugSetProcessKillOnExit(KillOnExit); } } - std::vector().swap(BreakPointBuffer); DebugDebuggingDLL = false; DebugAttachedToProcess = true; DebugAttachedProcessCallBack = (ULONG_PTR)CallBack; @@ -353,7 +344,7 @@ __declspec(dllexport) void TITCALL AutoDebugEx(char* szFileName, bool ReserveMod __declspec(dllexport) void TITCALL AutoDebugExW(wchar_t* szFileName, bool ReserveModuleBase, wchar_t* szCommandLine, wchar_t* szCurrentFolder, DWORD TimeOut, LPVOID EntryCallBack) { - DebugReserveModuleBase = NULL; + DebugReserveModuleBase = 0; DWORD ThreadId; DWORD ExitCode = 0; HANDLE hSecondThread; diff --git a/TitanEngineLoaders/LibraryLoader/LibraryLoader.cpp b/TitanEngineLoaders/LibraryLoader/LibraryLoader.cpp new file mode 100644 index 0000000..73cd528 --- /dev/null +++ b/TitanEngineLoaders/LibraryLoader/LibraryLoader.cpp @@ -0,0 +1,24 @@ +#include + +wchar_t szLibraryPath[512]; + +int main() +{ + memset(szLibraryPath, 0, sizeof(szLibraryPath)); + wchar_t szName[256]=L""; + wsprintfW(szName, L"Global\\szLibraryName%X", (unsigned int)GetCurrentProcessId()); + HANDLE hMapFile=OpenFileMappingW(FILE_MAP_READ, false, szName); + if(hMapFile) + { + const wchar_t* szLibraryPathMapping=(const wchar_t*)MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, sizeof(szLibraryPath)); + if(szLibraryPathMapping) + { + lstrcpyW(szLibraryPath, szLibraryPathMapping); + UnmapViewOfFile(szLibraryPathMapping); + } + CloseHandle(hMapFile); + } + if(szLibraryPath[0]) + return (LoadLibraryW(szLibraryPath)!=NULL); + return 0; +} \ No newline at end of file diff --git a/TitanEngineLoaders/LibraryLoader/LibraryLoader.sln b/TitanEngineLoaders/LibraryLoader/LibraryLoader.sln new file mode 100644 index 0000000..2ca8284 --- /dev/null +++ b/TitanEngineLoaders/LibraryLoader/LibraryLoader.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LibraryLoader", "LibraryLoader.vcxproj", "{92C90AAD-036E-474D-902C-CFD1E7422899}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {92C90AAD-036E-474D-902C-CFD1E7422899}.Release|Win32.ActiveCfg = Release|Win32 + {92C90AAD-036E-474D-902C-CFD1E7422899}.Release|Win32.Build.0 = Release|Win32 + {92C90AAD-036E-474D-902C-CFD1E7422899}.Release|x64.ActiveCfg = Release|x64 + {92C90AAD-036E-474D-902C-CFD1E7422899}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/TitanEngineLoaders/LibraryLoader/LibraryLoader.vcxproj b/TitanEngineLoaders/LibraryLoader/LibraryLoader.vcxproj new file mode 100644 index 0000000..288c6d6 --- /dev/null +++ b/TitanEngineLoaders/LibraryLoader/LibraryLoader.vcxproj @@ -0,0 +1,164 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + + {92C90AAD-036E-474D-902C-CFD1E7422899} + Win32Proj + LibraryLoader + + + + Application + true + v100 + Unicode + + + Application + true + v100 + Unicode + + + Application + false + v100 + true + Unicode + + + Application + false + v100 + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + $(ProjectName) + $(ProjectDir)x32\ + false + + + false + $(ProjectName) + $(ProjectDir)x64\ + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + + + Console + true + $(SolutionDir)ntdll;%(AdditionalLibraryDirectories) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + 1Byte + + + Console + true + $(SolutionDir)ntdll;%(AdditionalLibraryDirectories) + + + + + Level3 + + + MinSpace + true + true + WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + MultiThreaded + 1Byte + + + Console + false + true + true + false + $(SolutionDir)ntdll;%(AdditionalLibraryDirectories) + + + + + Level3 + + + MinSpace + true + true + WIN32;DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + MultiThreaded + 1Byte + false + + + Console + false + true + true + $(SolutionDir)ntdll;%(AdditionalLibraryDirectories) + + + + + + \ No newline at end of file diff --git a/TitanEngineLoaders/LibraryLoader/LibraryLoader.vcxproj.filters b/TitanEngineLoaders/LibraryLoader/LibraryLoader.vcxproj.filters new file mode 100644 index 0000000..0d694c7 --- /dev/null +++ b/TitanEngineLoaders/LibraryLoader/LibraryLoader.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file diff --git a/TitanEngineLoaders/LibraryLoader/x32/LibraryLoader.asm b/TitanEngineLoaders/LibraryLoader/x32/LibraryLoader.asm deleted file mode 100644 index 071dae1..0000000 --- a/TitanEngineLoaders/LibraryLoader/x32/LibraryLoader.asm +++ /dev/null @@ -1,31 +0,0 @@ -format PE GUI -entry start - -section '.text' code readable executable - start: - push szLibraryName - call [LoadLibraryW] - cmp eax,1 - sbb ecx,ecx - and ecx,61703078h - push ecx - call [ExitProcess] - -section '.data' data readable writeable - szLibraryName dw 512 dup (?) - -section '.idata' import data readable writeable - dd 0,0,0,rva kernel_name,rva kernel_table - dd 0,0,0,0,0 - - kernel_table: - ExitProcess dd rva _ExitProcess - LoadLibraryW dd rva _LoadLibraryW - dd 0 - - kernel_name db 'kernel32.dll',0 - - _ExitProcess dw 0 - db 'ExitProcess',0 - _LoadLibraryW dw 0 - db 'LoadLibraryW',0 \ No newline at end of file diff --git a/TitanEngineLoaders/LibraryLoader/x32/LibraryLoader.exe b/TitanEngineLoaders/LibraryLoader/x32/LibraryLoader.exe index 0d738b183ecdc061382ff1837b334d2f41c2d936..8e6c5759478d57081b9aaf7e8272292b6fa47ea3 100644 GIT binary patch literal 32256 zcmeIb4?vVvxicSoR~uFpS5;N>hI>m5wL+DlyvmTiD95n6x} zAnWn=+b12nKy>}%-LV1T!%>z$nGHJ@uRCog{=4Us(4 ziJVuPpKx;dQsiuoGqrgxt2nOA*EIN*Ec=@-ylJEuY|$7(_HH4UJwql3RaF9$?qHGqs7?gDY2<-n>T&g9ZKx@z2EU!ETE@SfYDpZhW z8fx5|eK!DaqCx2a0ggyO&2ecFj@KA=@qq zsP6H0Uv{r_FREy26Eqc5q(Zc>Ksq)qNYG1Jj8H$8<9x!PWWoe%YFn?Vm@J(}rxeJs z@kLIqbuVO->c?Jv5MC|~wT_hM;FB)AlG zh^3O~I*IJwjlCS@A4~aX;nn3Dyo|<(t{&-qtg9W;#u$z}^*Cs(Pa68BVe4tNZo`m> zHq$%SNbjjL>1~-t@057F%eKY3SrDDhf~f`;L`-49t#K^4JqE#3k49u75M5krG7HtM zPK17!rZtP=O+ACM+!fIbovH9^p~Ti?#JVDkc#l$ZZCw#&mKvNAzNX_S(xRz{Fij_c z%CX7R0rkiPrDmW-1r?keYX#9`EQS_i%|N{=lz~GJtE8JLkB4~6u|}j}z|TZ*sDo)i zbZJDc!Mdt$b&v2*-gWwLAzpOGq!=Q8Fo};%xru_YDK}FPmBKmyStUeB@6!NnE8MT< zJR2uaja0d*P2uOsWJ08a)YQhudaQ_|MyC>wz|fbw3ze)i4Gz+1BVueOavZMENONN$ zZU>M;k{dbmq`6v5qy9W8W)hYKiNB8CE7^MidsC4-=|PBvrC^1^JWmufrnZ0%!(1

SzQ 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 literal 1536 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 literal 1536 zcmeZ`YG7bwU|?Wj5McQKpMk*v!~p^aFo~aN07~=8@8V}w$pNkm3@L5Q3_ZIUgJ5DG z81xyqnHb#|n1CW63<3gB409QX50ryCmw^?e1_T^{7%1+s2&xsN4g_E{Tn9uLMGC|* zU|`5XNYRa@SCU#$0<=vTWFypXaKA%cp}@e9pqG+Zk_h6n05MPi3_xroaDai~fL