From 4b352ebb2a8f0f95071fa8ce4926a8c0113fbaf8 Mon Sep 17 00:00:00 2001 From: "Mr. eXoDia" Date: Fri, 14 Mar 2014 22:14:08 +0100 Subject: [PATCH] - removed titanscript related projects (moved to titanscript-update) --- TitanEngine.sln | 26 -- TitanEngine/Global.Engine.GUI.cpp | 6 +- TitanEngine/TitanEngine.Disassembler.cpp | 7 +- TitanScriptGui/MAINICON.ico | Bin 15342 -> 0 bytes TitanScriptGui/TitanScript.h | 29 -- TitanScriptGui/TitanScriptGui.cpp | 324 ------------------ TitanScriptGui/TitanScriptGui.h | 3 - TitanScriptGui/TitanScriptGui.rc | Bin 7314 -> 0 bytes TitanScriptGui/TitanScriptGui.vcxproj | 188 ---------- TitanScriptGui/TitanScriptGui.vcxproj.filters | 64 ---- TitanScriptGui/manifest.xml | 17 - TitanScriptGui/resource.h | Bin 2182 -> 0 bytes TitanScriptGui/stdafx.cpp | 1 - TitanScriptGui/stdafx.h | 12 - TitanScriptGui/targetver.h | 3 - TitanUnitTest/README | 16 - TitanUnitTest/TitanScript.h | 26 -- TitanUnitTest/TitanUnitTest.cpp | 43 --- TitanUnitTest/TitanUnitTest.vcxproj | 174 ---------- TitanUnitTest/TitanUnitTest.vcxproj.filters | 41 --- TitanUnitTest/disasm.dll | Bin 77824 -> 0 bytes TitanUnitTest/stdafx.cpp | 1 - TitanUnitTest/stdafx.h | 6 - TitanUnitTest/targetver.h | 3 - release_titanscript.bat | 29 -- 25 files changed, 7 insertions(+), 1012 deletions(-) delete mode 100644 TitanScriptGui/MAINICON.ico delete mode 100644 TitanScriptGui/TitanScript.h delete mode 100644 TitanScriptGui/TitanScriptGui.cpp delete mode 100644 TitanScriptGui/TitanScriptGui.h delete mode 100644 TitanScriptGui/TitanScriptGui.rc delete mode 100644 TitanScriptGui/TitanScriptGui.vcxproj delete mode 100644 TitanScriptGui/TitanScriptGui.vcxproj.filters delete mode 100644 TitanScriptGui/manifest.xml delete mode 100644 TitanScriptGui/resource.h delete mode 100644 TitanScriptGui/stdafx.cpp delete mode 100644 TitanScriptGui/stdafx.h delete mode 100644 TitanScriptGui/targetver.h delete mode 100644 TitanUnitTest/README delete mode 100644 TitanUnitTest/TitanScript.h delete mode 100644 TitanUnitTest/TitanUnitTest.cpp delete mode 100644 TitanUnitTest/TitanUnitTest.vcxproj delete mode 100644 TitanUnitTest/TitanUnitTest.vcxproj.filters delete mode 100644 TitanUnitTest/disasm.dll delete mode 100644 TitanUnitTest/stdafx.cpp delete mode 100644 TitanUnitTest/stdafx.h delete mode 100644 TitanUnitTest/targetver.h delete mode 100644 release_titanscript.bat diff --git a/TitanEngine.sln b/TitanEngine.sln index 69436f8..8b4e093 100644 --- a/TitanEngine.sln +++ b/TitanEngine.sln @@ -3,16 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TitanEngine", "TitanEngine\TitanEngine.vcxproj", "{9C7B8246-FDDA-48C7-9634-044969701E40}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TitanUnitTest", "TitanUnitTest\TitanUnitTest.vcxproj", "{5B5AB3CD-4D32-43B0-8840-E05C9483381D}" - ProjectSection(ProjectDependencies) = postProject - {9C7B8246-FDDA-48C7-9634-044969701E40} = {9C7B8246-FDDA-48C7-9634-044969701E40} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TitanScriptGui", "TitanScriptGui\TitanScriptGui.vcxproj", "{49C88677-C374-4AE2-B431-8F3B424BF245}" - ProjectSection(ProjectDependencies) = postProject - {9C7B8246-FDDA-48C7-9634-044969701E40} = {9C7B8246-FDDA-48C7-9634-044969701E40} - EndProjectSection -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -29,22 +19,6 @@ Global {9C7B8246-FDDA-48C7-9634-044969701E40}.Release|Win32.Build.0 = Release|Win32 {9C7B8246-FDDA-48C7-9634-044969701E40}.Release|x64.ActiveCfg = Release|x64 {9C7B8246-FDDA-48C7-9634-044969701E40}.Release|x64.Build.0 = Release|x64 - {5B5AB3CD-4D32-43B0-8840-E05C9483381D}.Debug|Win32.ActiveCfg = Debug|Win32 - {5B5AB3CD-4D32-43B0-8840-E05C9483381D}.Debug|Win32.Build.0 = Debug|Win32 - {5B5AB3CD-4D32-43B0-8840-E05C9483381D}.Debug|x64.ActiveCfg = Debug|x64 - {5B5AB3CD-4D32-43B0-8840-E05C9483381D}.Debug|x64.Build.0 = Debug|x64 - {5B5AB3CD-4D32-43B0-8840-E05C9483381D}.Release|Win32.ActiveCfg = Release|Win32 - {5B5AB3CD-4D32-43B0-8840-E05C9483381D}.Release|Win32.Build.0 = Release|Win32 - {5B5AB3CD-4D32-43B0-8840-E05C9483381D}.Release|x64.ActiveCfg = Release|x64 - {5B5AB3CD-4D32-43B0-8840-E05C9483381D}.Release|x64.Build.0 = Release|x64 - {49C88677-C374-4AE2-B431-8F3B424BF245}.Debug|Win32.ActiveCfg = Debug|Win32 - {49C88677-C374-4AE2-B431-8F3B424BF245}.Debug|Win32.Build.0 = Debug|Win32 - {49C88677-C374-4AE2-B431-8F3B424BF245}.Debug|x64.ActiveCfg = Debug|x64 - {49C88677-C374-4AE2-B431-8F3B424BF245}.Debug|x64.Build.0 = Debug|x64 - {49C88677-C374-4AE2-B431-8F3B424BF245}.Release|Win32.ActiveCfg = Release|Win32 - {49C88677-C374-4AE2-B431-8F3B424BF245}.Release|Win32.Build.0 = Release|Win32 - {49C88677-C374-4AE2-B431-8F3B424BF245}.Release|x64.ActiveCfg = Release|x64 - {49C88677-C374-4AE2-B431-8F3B424BF245}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/TitanEngine/Global.Engine.GUI.cpp b/TitanEngine/Global.Engine.GUI.cpp index 796d594..2770cc5 100644 --- a/TitanEngine/Global.Engine.GUI.cpp +++ b/TitanEngine/Global.Engine.GUI.cpp @@ -55,9 +55,9 @@ long EngineWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) if(uMsg == WM_INITDIALOG) { SendMessageA(hwndDlg, WM_SETTEXT, NULL, (LPARAM)&szWindowUnpackerTitle); - HICON hIconLarge = (HICON)LoadImage(engineHandle, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 32, 32, LR_DEFAULTSIZE); - SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIconLarge); - HICON hIconSmall = (HICON)LoadImage(engineHandle, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16, 16, LR_DEFAULTSIZE); + HICON hIconLarge = (HICON)LoadImage(engineHandle, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 32, 32, LR_DEFAULTSIZE); + SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIconLarge); + HICON hIconSmall = (HICON)LoadImage(engineHandle, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16, 16, LR_DEFAULTSIZE); SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIconSmall); SetDlgItemTextA(hwndDlg, IDD_UNPACKERTITLE, szWindowUnpackerLongTitle); SetDlgItemTextA(hwndDlg, IDC_FILENAME, "filename.exe"); diff --git a/TitanEngine/TitanEngine.Disassembler.cpp b/TitanEngine/TitanEngine.Disassembler.cpp index 9fcf7ef..ddacaed 100644 --- a/TitanEngine/TitanEngine.Disassembler.cpp +++ b/TitanEngine/TitanEngine.Disassembler.cpp @@ -50,7 +50,8 @@ long IsBadReadPtrRemote(HANDLE hProcess, const VOID *lp, SIZE_T length) section += (ULONG_PTR)MemInfo.RegionSize; - } while (res < length); + } + while (res < length); return length; //good } @@ -95,7 +96,7 @@ __declspec(dllexport) void* TITCALL DisassembleEx(HANDLE hProcess, LPVOID Disass { _DecodedInst engineDecodedInstructions[1]; unsigned int DecodedInstructionsCount = 0; - BYTE readBuffer[MAXIMUM_INSTRUCTION_SIZE] = {0}; + BYTE readBuffer[MAXIMUM_INSTRUCTION_SIZE] = {0}; if(hProcess != NULL) { @@ -183,4 +184,4 @@ __declspec(dllexport) long TITCALL LengthDisassembleEx(HANDLE hProcess, LPVOID D __declspec(dllexport) long TITCALL LengthDisassemble(LPVOID DisassmAddress) { return LengthDisassembleEx(dbgProcessInformation.hProcess, DisassmAddress); -} \ No newline at end of file +} diff --git a/TitanScriptGui/MAINICON.ico b/TitanScriptGui/MAINICON.ico deleted file mode 100644 index 3da8e95c2e1a2f313820f4fe6cb21baeaacf1820..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15342 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 D+6OFw diff --git a/TitanScriptGui/TitanScript.h b/TitanScriptGui/TitanScript.h deleted file mode 100644 index 59cf769..0000000 --- a/TitanScriptGui/TitanScript.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef TITANSCRIPT_H -#define TITANSCRIPT_H - -#if _MSC_VER > 1000 -//#pragma once -#endif - -#include - -enum eLogType {TS_LOG_NORMAL, TS_LOG_ERROR, TS_LOG_COMMAND, TS_LOG_DEBUG}; -typedef void(*fLogCallback)(const char* szString, eLogType Type); -typedef void(*fLogCallbackW)(const wchar_t* szString, eLogType Type); - -typedef bool (*tScripterLoadFileA)(const char*); -typedef bool (*tScripterLoadFileW)(const wchar_t*); -typedef bool (*tScripterLoadBuffer)(const char*); -typedef bool (*tScripterResume)(); -typedef bool (*tScripterPause)(); -typedef bool (*tScripterAutoDebugA)(const char*); -typedef bool (*tScripterAutoDebugW)(const wchar_t*); -typedef void (*tScripterSetLogCallback)(fLogCallback Callback); -typedef void (*tScripterSetLogCallbackW)(fLogCallbackW Callback); -typedef bool (*tScripterExecuteWithTitanMistA)(const char*, const char*); -typedef bool (*tScripterExecuteWithTitanMistW)(const wchar_t*, const wchar_t*); - -// use like this: tScripterResume foo = GetTSFunctionPointer(Resume); -#define GetTSFunctionPointer(x) ((tScripter ## x)GetProcAddress(GetModuleHandleA("TitanScript"), "Scripter" #x)) - -#endif /*TITANSCRIPT_H*/ diff --git a/TitanScriptGui/TitanScriptGui.cpp b/TitanScriptGui/TitanScriptGui.cpp deleted file mode 100644 index 8a89f8e..0000000 --- a/TitanScriptGui/TitanScriptGui.cpp +++ /dev/null @@ -1,324 +0,0 @@ -#include "stdafx.h" -#include "TitanScriptGui.h" -#include "..\SDK\CPP\TitanEngine.h" -#include "TitanScript.h" - -#define MAX_LOG_LINE_LENGTH 100 -#define MAX_LOG_LINE_COUNT 100 - -#ifdef _WIN64 -const WCHAR WindowTitle[] = L"TitanScriptGUI x64"; -#else -const WCHAR WindowTitle[] = L"TitanScriptGUI x86"; -#endif - -//variables -static HINSTANCE hInst; -static HWND hLogBox; -static HWND hRunBtn; -static bool bRunning; -static TCHAR FileNameTarget[MAX_PATH] = {}; -static TCHAR FileNameScript[MAX_PATH] = {}; -static TCHAR FileNameIni[MAX_PATH] = {}; - -//functions -static INT_PTR CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); -static bool GetFileDialog(TCHAR[MAX_PATH]); -static void AddLogMessageW(const wchar_t* szLogMessage, eLogType Type); -static void SettingSet(const TCHAR* name, const TCHAR* value); -static void SettingGet(const TCHAR* name, TCHAR* value, int value_size); -static bool FileExists(LPCTSTR szPath); -static void CreateDummyUnicodeFile(const TCHAR* szFileName); -static DWORD WINAPI TitanScriptExecThread(LPVOID lpParam); - -//TitanScript functions -static tScripterLoadFileW load_file = NULL; -static tScripterExecuteWithTitanMistW exec = NULL; -static tScripterSetLogCallbackW set_log_callback = NULL; - -int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) -{ - UNREFERENCED_PARAMETER(hPrevInstance); - UNREFERENCED_PARAMETER(lpCmdLine); - - hInst = hInstance; - - DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAINWINDOW), NULL, &WndProc); - ExitProcess(NULL); -} - -INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - switch (message) - { - case WM_INITDIALOG: - { - SetWindowTextW(hWnd, WindowTitle); - - //set icon - HICON hIconLarge = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 32, 32, LR_DEFAULTSIZE); - SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIconLarge); - HICON hIconSmall = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16, 16, LR_DEFAULTSIZE); - SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIconSmall); - - //initialize variables - hLogBox = GetDlgItem(hWnd, IDC_LOG); - hRunBtn = GetDlgItem(hWnd, IDC_RUN); - int i = GetModuleFileName(hInst, FileNameIni, _countof(FileNameIni)); - while(FileNameIni[i] != TCHAR('\\') && i) - i--; - if(i) - { - int len = lstrlen(FileNameIni); - while(FileNameIni[i] != TCHAR('.') && i < len) - i++; - if(i+1 < len) - FileNameIni[i] = TCHAR('\0'); - } - lstrcat(FileNameIni, _T(".ini")); - CreateDummyUnicodeFile(FileNameIni); - - //restore last files - SettingGet(_T("Target"), FileNameTarget, _countof(FileNameTarget)); - if(lstrlen(FileNameTarget)) - SetDlgItemText(hWnd, IDC_TARGETPATH, FileNameTarget); - SettingGet(_T("Script"), FileNameScript, _countof(FileNameScript)); - if(lstrlen(FileNameScript)) - SetDlgItemText(hWnd, IDC_SCRIPTPATH, FileNameScript); - - //make sure TitanScript is available - if ( !ExtensionManagerIsPluginLoaded( "TitanScript" ) || !ExtensionManagerIsPluginEnabled( "TitanScript" ) ) - { - AddLogMessageW(L"TitanScript failed to load", TS_LOG_ERROR); -#ifdef _WIN64 - AddLogMessageW(L"Ensure plugins\\x64\\TitanScript.dll exists !", TS_LOG_ERROR); -#else - AddLogMessageW(L"Ensure plugins\\x86\\TitanScript.dll exists !", TS_LOG_ERROR); -#endif //_WIN64 - EnableWindow(GetDlgItem(hWnd, IDC_RUN ), FALSE); - } - else - { - load_file = GetTSFunctionPointer( LoadFileW ); - exec = GetTSFunctionPointer( ExecuteWithTitanMistW ); - set_log_callback = GetTSFunctionPointer( SetLogCallbackW ); - set_log_callback(&AddLogMessageW); - } - - break; - } - - case WM_COMMAND: - { - switch (LOWORD(wParam)) - { - case IDC_BROWSETARGET: - { - if(GetFileDialog(FileNameTarget)) - { - SetDlgItemText(hWnd, IDC_TARGETPATH, FileNameTarget); - SettingSet(_T("Target"), FileNameTarget); - } - break; - } - case IDC_BROWSESCRIPT: - { - if(GetFileDialog(FileNameScript)) - { - SetDlgItemText(hWnd, IDC_SCRIPTPATH, FileNameScript); - SettingSet(_T("Script"), FileNameScript); - } - break; - } - case IDC_RUN: - { - if(!bRunning) - CreateThread(0, 0, TitanScriptExecThread, 0, 0, 0); - else - StopDebug(); - - break; - } - case IDC_COPY: { - //get lines - LRESULT cnt = SendMessageW(hLogBox, LB_GETCOUNT, 0, 0); - - if (cnt != 0 && cnt != LB_ERR) - { - WCHAR * copy = (WCHAR *)calloc(1, sizeof(WCHAR)); - int copyLength = 1; - - for(LRESULT i=0; i 0) - { - LRESULT cSelect = SendMessage(hLogBox, LB_INSERTSTRING, (WPARAM)-1, (LPARAM)szLogMessage); - if (cSelect == LB_ERR) - { - MessageBoxW(0, L"ERROR LOG MESSAGE - LB_INSERTSTRING", L"ERROR", MB_ICONWARNING); - } else if (cSelect == LB_ERRSPACE) - { - MessageBoxW(0, L"ERROR LOG MESSAGE - LB_ERRSPACE - Not enough space!", L"ERROR", MB_ICONWARNING); - } - else - { - SendMessage(hLogBox, LB_SETCURSEL, cSelect, NULL); - } - } -} - -static bool IsValidChar(char s) -{ - if (isalnum(s)) - { - return true; - } - else if (s == '$' || s == '-' || s == '>') - { - return true; - } - else - { - return false; - } -} - -static void SettingSet(const TCHAR* name, const TCHAR* value) -{ - WritePrivateProfileString(_T("Settings"), name, value, FileNameIni); -} - -static void SettingGet(const TCHAR* name, TCHAR* value, int value_size) -{ - GetPrivateProfileString(_T("Settings"), name, _T(""), value, value_size, FileNameIni); -} - -static bool FileExists(LPCTSTR szPath) -{ - DWORD dwAttrib = GetFileAttributes(szPath); - return (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)); -} - -static void CreateDummyUnicodeFile(const TCHAR* szFileName) -{ - //http://www.codeproject.com/Articles/9071/Using-Unicode-in-INI-files - if (!FileExists(szFileName)) - { - // UTF16-LE BOM(FFFE) - WORD wBOM = 0xFEFF; - DWORD NumberOfBytesWritten; - HANDLE hFile = CreateFile(szFileName, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); - WriteFile(hFile, &wBOM, sizeof(WORD), &NumberOfBytesWritten, NULL); - CloseHandle(hFile); - } -} - -static DWORD WINAPI TitanScriptExecThread(LPVOID lpParam) -{ - if(!load_file(FileNameScript)) - { - AddLogMessageW(L"Script failed to load", TS_LOG_ERROR); - return 0; - } - SetWindowText(hRunBtn, _T("Stop")); - bRunning = true; - if(!exec(FileNameTarget, L"")) //TitanScript will generate the output filename - { - AddLogMessageW(L"Failed to execute", TS_LOG_ERROR); - } - else - AddLogMessageW(L"Debugging stopped", TS_LOG_NORMAL); - bRunning = false; - SetWindowText(hRunBtn, _T("Run")); - return 0; -} \ No newline at end of file diff --git a/TitanScriptGui/TitanScriptGui.h b/TitanScriptGui/TitanScriptGui.h deleted file mode 100644 index e60f2eb..0000000 --- a/TitanScriptGui/TitanScriptGui.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#include "resource.h" diff --git a/TitanScriptGui/TitanScriptGui.rc b/TitanScriptGui/TitanScriptGui.rc deleted file mode 100644 index 2d7a72ef6b88f92201d1809bc20f11b226d187b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7314 zcmdT}TW=ai6h6L@U;$p|GD`XktAYozwu3IU;J?;0M!*nmq zVzBeD(Q4V(B&(JJ2C(vnMz^zeHsWsJ1&?&y<;>|KsK_Y9-~y(D!! zhL%3dJ>*|PJJdrTQh&s66H-?oC-qUo_#y73Mb>RF1_kPW4Cr-@66ZOz_W>BIsdih! z2j=P#OZf}9=CHN1+@8uXg4M>W^+t`>_gnD7(p{n@VO}U$Bptm zN6XnFd)`8h$lV^|XOjiDiHYn>NofQ4#4V&-yD@a}02aYb{mMdyl|3;~{FxtlG0MCZT zrW+aRcNaN|5P4wk0jdmIwjw@H?n4Q7iP~)Xuk+#PGcBJvA9Xq?Kv!v*k1%EExuH3c zU%~3~*O)7LyQ(uaSi$lfS22UWga$LzE_w9|8S@IBYqc)q)tBjV@PB`{%>hRm9@Y`d z!Raus$;;_j*Qa|Z8>h68cg3z$ME_r zneA*r>3L_HOS5JTetw4@mmTyCdLq`W0djmP6E%w2ZkrlKxCUxc6P%xTt5h6fs4{*( zc5>dt4xq2m2OcW*724hQmR3G2eg(tiu=NSdP4F&OxDz z6`>A@zbNm#(0%aV*^(RX>iW3O0H5T)011BeQaAy8SAI|MQ%K?74_!oO5Y=(mHH2^J z`FYz6@BA*CdCqa?p7iGlI+H2(V0Wq=^37S^o4l7RL*M0IHb6f{FR|Z({3Zqcrk52J zANT#2@OJKVtB6?c^lKPnyteUVpYCQ(F;>;ssKfFl_zG8r^L0@Fh%w^1#2uYu_fLHE zVH>|tYUfzPJi$)gVY8VED0HxbClc-08pBTN%(~PHWsOQ=7&tmqES*@Cb43z+4wNR^ z5zc@qJZrINvwkwv$+2oN2Mtilo}M2}^;D;d-#hf5)cO(h9@YO_`5XEtb$>2lUaLc9 z*0mGB48RkklG5|a$sf=jd$>Q90)3$Z3A=z~wkd!b?OQ;^9^v^;sV5_{1)O%y;j&Tu zNhYPzVn_0!<8#yeh9_Sf<|NC~7qgo3oo4)+C z8_M?pdS=aIevDs~x}|ydIh!9rPSSk8iUDTSxQ{Wf^;75shzpBd>obgdYK%V4_@&Jm z&$N0ASS&NM;<}vdM%$2t-3FtK^09Y0!Mp1);@NgRUMyGAilkzFLsXJ&>{Wrz9^@Zr z)2F=(IP9Pz$aGK8~%?$~+W9B6%i!a3Xm zRmc1xz?m=W{-d7fKH%*dSnVGHp4QJ-uuD)1Fh0XK{~_S%?=|$#75vwM|07J4n?S## zeA!9%Jz#ipu)s>=dx39qLagM6YlzjV+5)z<*?T_>#S1wtdZc6Q8@DiG6R8^t%6Qc - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {49C88677-C374-4AE2-B431-8F3B424BF245} - Win32Proj - TitanScriptGui - - - - Application - true - Unicode - - - Application - true - Unicode - - - Application - false - true - Unicode - - - Application - false - true - Unicode - - - - - - - - - - - - - - - - - - - true - $(SolutionDir)\$(Configuration)\x32\ - $(Configuration)\x32\ - - - true - $(SolutionDir)\$(Configuration)\x64\ - $(Configuration)\x64\ - - - false - $(SolutionDir)\$(Configuration)\x32\ - $(Configuration)\x32\ - - - false - $(SolutionDir)\$(Configuration)\x64\ - $(Configuration)\x64\ - - - - Use - Level3 - Disabled - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - - - Windows - true - $(OutDir)TitanEngine.lib;comdlg32.lib;user32.lib - - - manifest.xml - - - - - Use - Level3 - Disabled - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - - - Windows - true - $(OutDir)TitanEngine.lib;comdlg32.lib;user32.lib - - - manifest.xml - - - - - Level3 - Use - MaxSpeed - true - true - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - MultiThreaded - - - Windows - false - true - true - $(OutDir)TitanEngine.lib;comdlg32.lib;user32.lib - true - - - manifest.xml - - - - - Level3 - Use - MaxSpeed - true - true - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - MultiThreaded - - - Windows - false - true - true - $(OutDir)TitanEngine.lib;comdlg32.lib;user32.lib - true - - - manifest.xml - - - - - - - - - - - - - - - - - Create - Create - Create - Create - - - - - - - - - - \ No newline at end of file diff --git a/TitanScriptGui/TitanScriptGui.vcxproj.filters b/TitanScriptGui/TitanScriptGui.vcxproj.filters deleted file mode 100644 index 039b995..0000000 --- a/TitanScriptGui/TitanScriptGui.vcxproj.filters +++ /dev/null @@ -1,64 +0,0 @@ - - - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {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 - - - {6072cfa4-c101-4f1a-9920-89951ba83a2b} - - - {a0cc27fd-de5f-4551-9fe5-4a45f9ae862c} - - - - - Resource Files\Images - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files\SDK - - - Header Files\SDK - - - - - Source Files - - - Source Files - - - - - Resource Files - - - \ No newline at end of file diff --git a/TitanScriptGui/manifest.xml b/TitanScriptGui/manifest.xml deleted file mode 100644 index 618fb8e..0000000 --- a/TitanScriptGui/manifest.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/TitanScriptGui/resource.h b/TitanScriptGui/resource.h deleted file mode 100644 index 28bdea692ef08c1280222bc1b26bbccccde60912..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2182 zcmb7`-EPxB5Ju-3iFdHXC4%4S-tQC5%UMPERv>%Cm?yM-Nu?<&`v()6(BQZ^!ZhY9H^z2ZW{we7NtNK9Auk`J(&{ z@b01&TgmSm$r|q=zkVxT6@f3ucpWT)7zFNjiWTQ8%}F{<~gRAp7z1-iLI zVO6Dn&{yT1qpzyGE40%qRq`kIm0Za;p3RuMsqxIoDVT3~9)2d&Tt=o<-}K9&YBHtw ziAoIiIn+0nj(1Y#_L;3a6_M2(<|R5ez!K57o!ET8cFsGx?ih9Kk}vyNty4q!Ok_DH zOTT<)#F(-|h-J#!5##@LSk{t4Cd=G$+1{?qY diff --git a/TitanScriptGui/stdafx.cpp b/TitanScriptGui/stdafx.cpp deleted file mode 100644 index 1577c4e..0000000 --- a/TitanScriptGui/stdafx.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "stdafx.h" \ No newline at end of file diff --git a/TitanScriptGui/stdafx.h b/TitanScriptGui/stdafx.h deleted file mode 100644 index dbf3c98..0000000 --- a/TitanScriptGui/stdafx.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once -#define _CRT_SECURE_NO_WARNINGS -#include "targetver.h" - -#define WIN32_LEAN_AND_MEAN -#include -#include - -#include -#include -#include -#include diff --git a/TitanScriptGui/targetver.h b/TitanScriptGui/targetver.h deleted file mode 100644 index 2b26ce2..0000000 --- a/TitanScriptGui/targetver.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#include diff --git a/TitanUnitTest/README b/TitanUnitTest/README deleted file mode 100644 index a496c61..0000000 --- a/TitanUnitTest/README +++ /dev/null @@ -1,16 +0,0 @@ -Setup: -- Put disasm.dll into Debug/Release folder. -- Put TitanEngine.dll into Debug/Release folder. -- Put TitanScript.dll into plugins/x86/ folder in Debug/Release folder. -(Can be found here https://bitbucket.org/cypherpunk/titanscript-update) - -Usage: -- TitanUnitTest.exe script.osc target.exe - -It understands complete OllyDbgScript language and adds additional TE commands - -Example script: -#log - -GPA "IsDebuggerPresent", "kernel32.dll" -LOG $RESULT \ No newline at end of file diff --git a/TitanUnitTest/TitanScript.h b/TitanUnitTest/TitanScript.h deleted file mode 100644 index 28e5c8c..0000000 --- a/TitanUnitTest/TitanScript.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef TITANSCRIPT_H -#define TITANSCRIPT_H - -#if _MSC_VER > 1000 -//#pragma once -#endif - -#include - -enum eLogType {TS_LOG_NORMAL, TS_LOG_ERROR, TS_LOG_COMMAND, TS_LOG_DEBUG}; -typedef void(*fLogCallback)(const char* szString, eLogType Type); - -typedef bool (*tScripterLoadFileA)(const char*); -typedef bool (*tScripterLoadFileW)(const wchar_t*); -typedef bool (*tScripterLoadBuffer)(const char*); -typedef bool (*tScripterResume)(); -typedef bool (*tScripterPause)(); -typedef bool (*tScripterAutoDebugA)(const char*); -typedef bool (*tScripterAutoDebugW)(const wchar_t*); -typedef void (*tScripterSetLogCallback)(fLogCallback Callback); -typedef bool (*tScripterExecuteWithTitanMistA)(const char*, const char*); - -// use like this: tScripterResume foo = GetTSFunctionPointer(Resume); -#define GetTSFunctionPointer(x) ((tScripter ## x)GetProcAddress(GetModuleHandleA("TitanScript"), "Scripter" #x)) - -#endif /*TITANSCRIPT_H*/ diff --git a/TitanUnitTest/TitanUnitTest.cpp b/TitanUnitTest/TitanUnitTest.cpp deleted file mode 100644 index 176bae1..0000000 --- a/TitanUnitTest/TitanUnitTest.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#include "stdafx.h" -#include "..\SDK\CPP\TitanEngine.h" -#include "TitanScript.h" -#include - -void log_callback( const char* str, eLogType log_type ); - -int main(int argc, char* argv[]) -{ - if(argc < 3) - { - log_callback("Usage: titan_unittest.exe script.osc target.exe", TS_LOG_ERROR); - return -1; - } - - if ( !ExtensionManagerIsPluginLoaded( "TitanScript" ) || !ExtensionManagerIsPluginEnabled( "TitanScript" ) ) - { - throw std::runtime_error( "TitanScript failed to load!" ); - } - - tScripterLoadFileA load_file = GetTSFunctionPointer( LoadFileA ); - tScripterExecuteWithTitanMistA exec = GetTSFunctionPointer( ExecuteWithTitanMistA ); - tScripterSetLogCallback set_log_callback = GetTSFunctionPointer( SetLogCallback ); - - set_log_callback(&log_callback ); - - if(!load_file(argv[1])) - { - log_callback("Error loading script", TS_LOG_ERROR); - return -1; - } - - exec(argv[2], "dump.exe" ); - - return 0; -} - - -void log_callback( const char* str, eLogType log_type ) -{ - std::cout << str << "\n" << std::flush; -} - diff --git a/TitanUnitTest/TitanUnitTest.vcxproj b/TitanUnitTest/TitanUnitTest.vcxproj deleted file mode 100644 index 02edfc5..0000000 --- a/TitanUnitTest/TitanUnitTest.vcxproj +++ /dev/null @@ -1,174 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {5B5AB3CD-4D32-43B0-8840-E05C9483381D} - Win32Proj - titan_unittest - - - - Application - true - Unicode - true - - - Application - true - Unicode - true - - - Application - false - true - Unicode - - - Application - false - true - Unicode - - - - - - - - - - - - - - - - - - - true - $(SolutionDir)\$(Configuration)\x32\ - $(Configuration)\x32\ - - - true - $(SolutionDir)\$(Configuration)\x64\ - $(Configuration)\x64\ - - - false - $(SolutionDir)\$(Configuration)\x32\ - $(Configuration)\x32\ - - - false - $(SolutionDir)\$(Configuration)\x64\ - $(Configuration)\x64\ - - - - Use - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDebugDLL - - - Console - true - $(OutDir)TitanEngine.lib;%(AdditionalDependencies) - - - - - - - Use - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDebugDLL - - - Console - true - $(OutDir)TitanEngine.lib;%(AdditionalDependencies) - - - - - - - Level3 - Use - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - - - Console - true - true - true - $(OutDir)TitanEngine.lib;%(AdditionalDependencies) - - - - - Level3 - Use - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - - - Console - true - true - true - $(OutDir)TitanEngine.lib;%(AdditionalDependencies) - - - - - - - - - - - - Create - Create - Create - Create - - - - - - - \ No newline at end of file diff --git a/TitanUnitTest/TitanUnitTest.vcxproj.filters b/TitanUnitTest/TitanUnitTest.vcxproj.filters deleted file mode 100644 index 6cccd5b..0000000 --- a/TitanUnitTest/TitanUnitTest.vcxproj.filters +++ /dev/null @@ -1,41 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {dcabac3b-acfe-4e79-a827-01d97b369669} - - - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files\SDK - - - Header Files\SDK - - - \ No newline at end of file diff --git a/TitanUnitTest/disasm.dll b/TitanUnitTest/disasm.dll deleted file mode 100644 index ef17bf19e260ff04add2982beee52c359955833f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77824 zcmeEveSB2ang5;4BpJelJ7}U2gAO`CFrbkHO-P~%Ng!Z=$r}XUzzQ@*sub?6Xah{V zGnmQE*tAPs+Ok`-+AiCrExV1eP`AJR z?C1B#?_>1LIp=$x^PJ~A=Q*$U+{^4cyCkb5NjA7>RFbyCr@u1({cnCOk~HGl7e+{1 zhrKdpyQSupF%8WRtaL43@$lDI-1iOF{r5fe(8G%BYfD@!)Q4OTJmjjJTkrbD!;6>P zn4X^IHdwoUGNEYkz8Nj1`%o%sS%i2+Qc26#*`M07l>G_p|Le=6*k8PFddpnKZ)j22 zFKt=EezD=-&VJnk_cs&oFRF>BN|I_U$7AH+>QH{y~x&K)UgSB$Y6oMe0NRl0TXpR5w)q%RV+By^@xLCgblXq8^M})?j`#1Yd@PGf zI(4l1jZ4Y`ckPV*RJObMaAFZoFfnTc3GDu(;NVb8hSaNRXuTXm>s5x-gnBt7u2&z` zt8cBERYz=VnS~*_5{sbZ<9|K%_tXrf#cSrgxD2yq!beed ze-G##^K`|1nOd>be^kA#?E)0MmNjf|cDDcG?_8+Uex<@;mr1j)_2yZ@ zCe3doR*@O_4=F{T9H29a|2FgXOEdSVZqmZFs3r`}(888PDOn5L8jiS~T}A4+#LlQb zr;;}z_p#%!$mFLH>fcxX*sx=-{oynMO7`*4v7;1Bek|`)@&+P2K~al3=G1YrlT*hG zBke+3++2w9@k7VnW-gD(r;^(#D@QHLlvByxShW1HDk_^;-bU?huv-O!SjTa)-pRVm z(k@Ltb&P6g4v1aGoY*6+3-EPP63fsK-dMg^~c(!|fDD-JGs`mwLw>6iv$ku7u79j%{aZk|n9z^S#K(cHgZsZJ#wXXZta@OdVL&Uiv~8R zbf3Ek#Etr9PMN1~W#8IY{MT3=PLT}{>Zhrfdi!2)OTU*&Z^1m_1Iv+n*cTd*Lt z_^&H%`e(TV`p3DSfjoZ2MHhu3{6ykj}xmr8uEhEEik%FCWH_rBI=gqGR zD88Ifb-g56D&0i>;|`cs3nohiZbY+QeZh}G*G-IehDCrs@Tirf!#ZpuK~gR&7K zMKr)K?pv9p_s!RLa4hI3EPfw)c^{?Uja2`kHO0Bdat}0Ge{UVgKZ|H?@JEnV@<+cl z1~sm9XL#n#uMgc*CrR3Vi}e`QwRp385%RX4xCdNFpoKcxA9DQHGOC3k2b)#whej!f zzh6zs@3|K<51DhLzRaCL=9aDf%~HI7Wp;-n&pX(qBzp%BtFpgW8NTqI?Q}v&8G_Z8 z;#XGA1WCth-ghr}&#hDJ-gnM>2iw(xj+#7+_njW^V2_$Z;f~jO{$ic{TK}F@49N$t ze^ncl6&XVd@uRa@!7mB?Zu6Gp1=T{4$@^}P_gtBJgSRy=Nm8%(zLV-5v?*6##F3bw z$_5iFm`r9S6NfOl228AydSy@8I=LnN*U?2Sd^ZOjAfj0DrF3|lGrSPSIyB_ zf-!~!S9PRz93(~uO*VAaN^BP1Beco(k_A=8?Ii;-J$*U4-~9Y&@v8@tS0N|`N>_a# zIn^6_lNTe}{<`GsO;!+!g5g3mCgnmqUi%=mBQf0D_#6C6dbGn*;!S@fa=G$0yTMt{q;!@@-j<}?hWR)T38V0VS5KH74RItkwR~c^>rS({9pP^z{EMlnS9oi)$ zWB8$HH0qD4R|&m)hUh&!4-$)}lDCaC>r}1QX|1S?nI~sxp6g2A5$|6wD&+=&1t!G{zZ!*i#Y_LDSvu?KcnFOGoo3V;T$QSbH8@j3gJdwl$tlz# z@;0aTm%IRmU1*h+DsPiKryAT@CqVf7LnkZUE^u*~qV-%Vn(Y5M1Yw@w;VqoRY}9n^ z<*3OslKdiBH?cMu8BLTiRNcQCk=R7}{if_U(^A7Ct-jK*0cX&$4a|eetRq~S0mBLn z6}~F}^231QcA^$evO!GuDCyXt-|zYTp@@x<(akU+(Tt-ZT=-U$E$rs}Q8R)1Yxo)@ zd~u_nOE((5!*1R09UL!|=>INqcG!J~loj5=yVVr$DvP9i9m%GhogP}o3*bV8N!I;n z5-=(pAIPMp7RsDt-OmAx59rq}8oFtO*dOU*IBtyLZ-SAiMbFR@nvl?*PNNgX0d24~ zkWTCmBtHg3I*|M*d1^tSUH1PY+RD1WH<{8~TZ!EwB&MN4?de3uMFvLGcot5g+7FHs z8NZv5aojjFBlYM@GahnC(hFG5OT{lCvs3nO#f)K=T8acwDkg5JJ@evHJCRu%93wJ* zJ2B&!FV9%d8B5g5I_y(lQfG)dmg4zfr-LXiS!PPtSR3pjcQ zOJx7QA=#9_1RRC@G=p7Q`NP906Uxg=(AaG#>&r6zBQl9}JUNvN{XY&+8@yNce+o>b zVx%`y7ss;DOlD-6%Y~1V{l5a%?{iOt3`wS0ZW(Gc*Mqjhkz?JTf7Ew~+g-U1f-4K! zJIIo(Z(8@aokPczR!$&eSO3T~-oo3I5@Cevhw^(JR%BQ#O^mHWQ-5uy8rFW`ah^FqT(H(<2T-+~QpH#SL6i+MG_|2I^>h&}kM z8@|+~JARGF%1$gu-8^4(IH!(OvwTMtXNSi!wbr6KtoyC6_>QW7&hLpNV~=?(THLGL zsvWRs7wl_x=l6qw+h7n}?3OtHq=fuq67r8q99CgPQuse%+a}X#2GgJC_YaY;`V#pj zB=8@d!2b%tKQM{Ms(A^#Z!vgpVS$&K0?+)vke9l4I4RCk_Wdgm=9|*`vt5hPRzbz> zexB&^dp`WB?2jO%v(dCzLcjVr!TeJKDe~{e4*W zz}4yl+FPhd)(kigvyRaj`}TpGR8Eu;2cG z4O=TEW5`fa%wdv-O_7sU1mT0ovn#`7PRgTBLh}&i!$1pjqAWZt{D_DhCNZ@nOOhEU z77OF>3L>-(A^cpfAd|vXL@b%a1YN>)G>H(-Mq0kuV(l7u&FI%8GWF^W@V$jt>eJZ= z23a0?FBy-q8rP@La^Kjxh?zk4ZAK=sX~KTVV@wcAVI8@i#TMY)+o;v@LnKv1vdSchbwPv6 zbwqLMazLLT>iSQK^ zzW$y7k7NnQHq8rS$2MZ)juRa>6m{=i_bkMz&dhl7;ltV)_k4YTXK{az>|2SpYWxkU zta!idTa1`CkXEnOPuU)ljFWUkOUGsKA7OD7v?E4qYo!UT>?E3)+tg^3*1IcQx&b!OrRI;7G ze0%tZNVrQZlnh<9z9~5uYWv)KwSg4%a_+~ysWdJJX4u0IGM`j6Lo7{tQ*Wh&x%O}! zC)kl-6i{dsP{avkf?oDN3mEHlwG36=bSAN?qp*A*xSAF@+3HL|{>gDfdQ&HG85y$w zEDSO5NLKhy@Uik2V=x#kyok|t#Ar0~Dp~gqtsD(tM&+_iNtyk8uz%8EzmC`sjFNr( z(KoA2S%$G^R136&8DFEVG*k~c-JMx=b2>rC$s_EZ>FMRYJR=`e(0Yf z36p1;T3p2EJxB{Yk{$9Q@uKzMZ=>2knK~9_$o{{83y!QG#c6MRNm|dPX{FS2WZw<+_K?^#PEvDPB>i~kvcFuc?fj!Vx#yy1ZNh*WN#>~b>Fr_$(FQE4 ztN10HzhZ>aKAj}{@-eRz{{@?KbVxlE{%3gH9j(B%0juo)0ZM1eVL(vo`=O2Di%TWh zmSR_{-iJn5Z6?1!l3-{k-Xr_2hA=R4*>{2q7^Ms&WA*=uN)T-o7jejK9DfCk4^J+8&zD+9l z7F6(Z6CTNkSS^oaPCNYzwvlQ+L z7vVmb>gVB2Ux1gGc#Ly4kU%CCHngWviJyl%zJQ+id{M8ZQUmFimO)Z}9?oTd4n3D0 z$DuvhzknJ58uWV*@Sj!Y=l7sHD5+Yj4~LLxSmSB~_BCfBm;>xCTbm)_ z0mRxYNgdvsnnNZ-mK;;c`5{NiteE_x`GtGdR(mKm!x72i*fOGBy;SRo3OF#= zX?@H3TW!$3<~zNqyoRkz6p%D=k+zH962s?7$iAi^Ru!_4izxj^je!qWr6Y}}9C7$SQ`#5Is6D6xmrrHz zsMDKTzzWR3+@+Qp5N{t{1eUGV6! zFCEA>=ASLzKW{!BTQvpn07bC|nq64ovT1tl%sipf7E`>Ns7BeNFs`B1BS z86G_>KVX$Yzx`ueeUv8~wAw(Xa)UN-g)&wfxKeRx16iu4_%rnueE=MgH}r#qOp(`$ zKbHM%*lOr~NCw-`V~NTC`8=)cciNBPkm%D7f3ox^&xQja)&{PU{Y4bu(;%n(or#F> z92;U!3biWcKCiWA3lJ~y=npZCJV z^6+$bBAr?y><)S?9d^O*liWQ;Q`)=PdOV;hps?)wA>JUuy^R9B&e@Svg69gf6nGx| zBtBXOVGSl{sl%3*-|y=|saeVby;SPQu?EfuN~S6^N^VdmcK8ZNhLZVesyLCpzN8XC z${ESZ@9{_F@Am{Nr6fHRaZDAo>IfX*byTKVa7yXxQGZRWy*rqVq+X8leAsY(0tO{h zW#8X~2)-UgMv=qg+1~e-q)nCmemm@Ew}lG~d+->!#4Y=&sq@crU5GhV1#23!DrPmn zZ!W4(5U)a-Ng2sOEjY#%!CjnKMPL*)UsRQ!$Eq=$tDzL2j64zieDM#^R%N%vRCag) zJqYiYeZK&XOGyP0g@&m7vt~6|9C{wyVVhhsQIVk+=wz}58ZDWqzOVl__toMWw?`d~ z&9uj3{aqbK1v}aYkNKa)Ar=M&Os5&dS+8|^OD0RfH5SFLe-im6VZ|5Z?-Zcqj@mSy zel0L6-_iC4_qEDA?>XM@bu~s)hzz*J*x+7RJY;>Y+((<{}4|4 zOq+(=GzsJ>dYGxh;dxA~Iz&MusGztAoG~e~9~Dgp0WFO#qR<|-VO>26Odv~mM4TA} zxQG-I%f3F;jws(Fe_$An1ZLX(xX5yh;)8bC_bLLcg79uZf(>>I`UOL2vhUww5S;>J z^P!{ahL+QYHW}5eotfJs-5`;Dk0B-!ox8P zk>GI=v{ENVen~I4sl$qU*ChWSch74B)M54@OY#2je~PMxJ1$(D(@^CPnYAta_!kj8 z$^`cCeP2Y-!~|*KvP%eH;Zk^lfYog6QD=&Jh4!dDsyektvH3{T9?g1l#OWgXjbf(%vIoJn5IoLCG(me!GkFyA&9tpzeGc&Y7Z!0#>Yvm`8 zBDw8lFMh*&1*Lj<(W4o%?|F)mqW!-_Nbu?w6qoXHv<=e6M}AVnuV5E>ErwvR=U~DdOOP!d99=7YU{)i2m=$E3`zptIOV7^?2h4N{zgV#qM zxWjqiav*03&c4bJb|d*cK@}3-8S=K8Sw9lsfbh;YlD_Gc5mmz)5uOf$zzWcYDMTvAEUFqi2lg4U>ILW zh?+UeF3M>!a-!69?>l|o!PDwUdE49+KJDZx)wnD351~@ka1-GQal^R5e<)}>grgmW z7b0p3vZO^u6#te(!y`7t9i-JmG_CE9whfB;`j?o#VK;KOW zK;p9SI6?{?RFG1EJjA=lVBSM~JJvJSAh&GzEKE+)EqKtIy(Ey@1FP&v z4tN~eDvWjGSqrT$ZIvTQ9Yxj36xCXt&ec*=1hMY1vyuX^CNS|wSEm`ZvqfrAa3&Wl zYtdvSp78f6tnw0t`AmiB)efUYda*)LiSxUtPgw*iw8f%c9BZPdQir5eGO`cIhq_^0 z6kI*le{^*!R6^S5@Ys`%(tl7o(R&XS!p?|Hi`rLDMb$vbcR!4#a>De6v{px%6P<bt zh|u7a#JPXOxs!BHhALxFs@(mqvkjYYtbSh8%d&=HjIsV6!)PTFKLlbD#FHgPGm?fL zF_0K_oW}NxsgF7r>MMv5S_Ha6v+2U)VtkNvH<2meeM&fwUOK6^(`I3THkhn5V6C^h6a(Ycy9$1cz4=x?6X2dew<2Vp z4Lt)^0OL3f9%KsMcY2eKro99^ASCh)@3S1}g->eijoh`XCV>_8EMj#)%uF(TB8&3P zcQpf}n4?b&s_j1aJH+vFjGsw|=s)kFw)Rd2k&8xJnkO2tAuFRP5IbKe7WK#EI{X~! zg`>Otesr#8#c@FDJ5c6~^6>vWY)mS`)TCbKT|3N$L|fj{1C@EsDE7U;Yg9tMZX(*b zs4@#LI;8*{hY9PPg@ZRnCKbQNp<5!?Yv-&SybXuK*u)X(V)U$Y$+G`JG#a8yV(ePo zIntV05SrfW%0mTmf+b0{xRAFv=qvdXM60vz_k>)Ms>npXPX9Z)FJyBA#>Mt&Ltw=U_+>N(X?q-f|_<2D`Ua&RS zVtqCDHM}ra<8BIO-xer$2WoQy3nt3GM@WE9zHLhLZ8@U3ui=pytn+T!pFx8(ZRBMC zFbbaYwmOVWb>{$D4QY#!_6mZu#KK@e`vr7@#Za;oF2KWb7(#|P=-P^dt`Bh%x|WK} z+(^e>xDpV+HM*w}4piIp%x5X!vFquZ7;)&Cn;CI-q;Ek08d~07oe|)-8N#;`AM|&B z&zjqVwjMmC@JQ+uJ-wYMiL+hL?Bwh=J-v$p)j-xW;^;`LGH!`yShA> z0Y2*$Nx4-|S3qF$S;e`)r(g{d+A+R=nO#NEc_o ze$vz4B;|^DVhJZc8*bqw8?H%^zOcxWc4lx=*uyEf0KOk!|6ZpuMbDIw#G*lYHiTJu zb_$U49E>bz2g*wQI&xYSblJCT$qAr*$rJb8% z+35I9PhXF?siO@D2RzWxMhcLQo@Rt}^ejTGqsJ*5Rgu}P0{r1m!rve;a}gqDr5008 zvWR91P^FeJ0*hGAh!ac|gupZ-Jc;wyAZq6KFg5ZwFg5ZwF#@IBjQ}ZyR?jR6ju@q# zIY31tohH1-oe>nrub$=sJVcMZGUy2RP!Oz~@}Qg261_Gg;i?5n&l6(=jy|pt zM7|Q53V4L@gxgfl`zXMf1Oo4iP_Yv|d9D4d2oC1wy9z$qppgseF zHuaXdAQ(Mmp%q>(zd;naviOuTQarra3|iyiMSc&42znN?P`s{p0hbrr_R$lYJy}xM zRZ}JB{cv4y{{eRjF11*4-T+q$=Yjhk+%CAYa38?UERmdZ;I4*S2DcXO-{9VXODdI| z1#l&B_rR@z`!U=$xOd>LzfE%90yh)x0$k4Rl5-ZE0`~{RzX$gM+&AHV01VH9oxN~> zgKL?IQx2SHCs}RDDXFRUVQIr1=_Ard$j*_MU7nGddBv4k`2VV_t{Qc9_UO^qTU$B{_G(Mc`7WBMojA+!DC; zaQ_6y^*}Y~56xhW{n;-1OHN8oNl8gfiq#bxsQ;ZmE}MSn0iJfoX+FHGbfc4Q!u3c@ z%+wv_&gWoe+B>Oq5d*v7$S53QVseDoQUph5xb3nIK|Wi?v@LhGBNlY*wjR`NLB8~! z;U4+`MJvteM>8tv!3?@Hzll%2ZEdZ1&Va0|@6gk?pm;rV1Ac=xw1xczs=3Db?57dLPwN z2)BJA3R9D}(|z+=4~7bRvpcbPC#KFENxezWBw6R_Q&?EM@gLlJ1qrLamis}+$o7m8 z^c3Z&`jL?KUdZEuxT`0VxbD4ic?=241V25U*lDLtX@Z?2iRlX^EYu5yBuQO!9=zDV z<`g9uEZfe|V+FH{K7P1p)Di=R6KMgPTkiZA0XjE3OT?^BR(*Zry!pW$b}F)aD+I~! z$0?g0!V&pq+!?@HZwj3@D)s}Zcku#HE6t(?)kjm)VBiecXlma*me!%#K%U|#J&ll( z+`rqR)M)31Z*PX=E3Y#SEtTZ$XMT*9bbP8WgCqhmvf! zdFUNQytu5Dp7|IBYQdzr208exLQ0PfG1ev&aQ0?&G-$SQm&a`@K8vMT;xY`23B=2nYYPgh8rdmsR;U`w@Xs# z1^hfhUp;VoizMZmPfj&9SDGpsMRo9E%WpDkY%ZfTyxVTn2Zh{&LM&{di0~wU`G8s% zrue~4G#8My#I2Fu-*y0r+YhC44=+mI2!mKTMs&0QcQi1gbTIn~Go!3~^~`n6|75&*`0V=L?ACAMJQqyb~>de~NJss_I=uC*4Al7Q}W2Xrxr~iOL)E=`c#vjr|a)xOsZ}6k&1muq{52_ zBxb9>-1bfn*yW#X8zdhOLLoAG9@k=Er0koIxHfQ^?3=@Z%klVt130Or>uqT43{S28 za_D~SyR?1w@QncZyb?Of@E;;gDeJkcz;>=u=Ppo4k<+`V8j<6>XjK$>%YTRitXSWD z*v@bkQD3}cD23~Q1y?0u7#GaIR~+djD24`7t-Sz>OA252_tJlcnShQVjq&t(uh1gB z7f>sPH=)J#7Sdu}_}8G_MI~|Z;j2)NG0cpBX$YahKL$~-M55{lvL`7QRa`{>NKsON zh`vElQiO=^rzkJY$vVQ@5QTn-JjM{s05m~K$wWCxP!gvE%FBjQ(tV zTSz+XkEzxZ^q;<0?{eUnQ}^2O+gRrbcT?U^lhtpC(o%YpNjTEg%Hg8ia66Ik>}-)c zzm13xT%VPs?MW({^epIO%E+Xc=A~O6csz<53SKIoj4h_2n}`E0ny2ohQi|V_{goiW zYavvZZS#`Y9E<;e?R!RVau-0#eW21!4{o+0sK1Tsct6EC$R@;u*r|b15_{!sy7Kdy!ig*Sl65D_wwI;mMBSG4gq^ONIOAJX0#)OOng?UZJeB6rdd zAG6tU6rm=%0m}2DC`q|G2v6&ccFeWljWJw0>c@7u6(i`9ic$#EkK`%sS2*LFUX6tlMFhP5>tHCbc~2V$&RnP_cQ zVi?jNNYZvE8J2fZU)geLU%A-kE-|-Ow_y(I)n=<^@FSVV+B*Grp-H#`hs7xtT6C$~ z*u@u)qm>&kwz`HjNY0PpE^m~aqYO6&KDivjl_5Q8p5&a3_-eSf;Qj>X07mX=xEtV# z;Hu$Pz-@#(0Cybj44k=PF)GmdbsQ2w;n*tj{KhB2c!4Os1iKPvy0Cs;q73Jw+&~va z;yo?DrzqVA9xW1`vEn^ETaWJWXVLn-#Tv@TjXcymac#=`H)Fr_ZBafKZoHuLmJq@o z*usT=kpNqLCQ*dmWP)HQbdOR9lWhp|Q+@~25#UVsCd$-y#)e)TUoX?Bishai zo+Y^x{OAKuPQ-G*VS$byn#*FXw&!?-)cwh!F=hIA}Jyhm30%e zf!o2KnpB286>Y2@$r20EPfpZ}4b^(yW!FV6=e=;f*hzIdsSdGywsG#Dm2QSW zk}@6xHawRo3nQSjZ4a4(elYj7#7m>}u`ma4^j+HjUq@Y+=nNy$(`o+E*i>-S3`-4Y z8A}bag>ITFt$VDzRT5?rtaN@B^w@+|taKV{OVcQfz1KXwAPI&+io**hVuh4Afot2% z=Gwx|HE5jOn51jPr|gu5mege4=`y!1Y({ToQ(+r+Abwh9-{C@z!we9rAN! zmdJI+h+j?@V$F_`65w@_wvKy-zbCMcSDb0R>tdbZGwZ#rPLHuN4n6o+9>?x6+8g5q zgh&`K5To$|Ua;2a?JM0EwJS`BM2G#9y4ZdYL0hxsoWnJFQE?AYSP-gg3<*2GWx+We z9$BZzyAZVM-?GqA2&slT^q;vy3p)vHp(jQ|jD$|~=!Obd)?@7A6P{9YQ%5hFE6LCA zL&F=Jx}ez4@!qa3`a459%u;+>#}&dX(0Xk$8Na8Q>Vr;$ue60GY{q))7*j-&@B*LF z^>h6vl<^oU97X{z{1=4DeXTC&#atM?4<%`grmhmJpkmez05spCLOD_(}7eIv?4(_35b)NOt` zQ%gLXo%aPNvxY2spE5d;+&IQXH#bgv#gPI0;MrExGG*~@)!8w_>P{_5MqWDHz`B6>U>7e%atuB$ zk#to;5$Q%!GCu_@eq}}K!h5+E@-~}{8E)@kY!Phw9_=)q4~&qXcn19BZC-CPUHkIi z4G*W5_OTMmjNCy%?X)E_O$5p!MIulh$zv)n2{Tq;wn(V^?Y4& zz6|#U+$p#}!@Uo84sJYTZ-kTV7JHK2YPZ>w?J4$DoR_Y`kPsiw6~r)}x0BcDZiQD* zE5J?!UZ7T*7vK|^0I#0&kK&GnJHW>)pe7={FOV}|do`MWqP>eo%3d!m+~_<#(B(i# zETRKl)IS4VJT`REHZIUb^H89R#tCsY6X?p}Fili}E?NbOgAGWx5e4O+Eq*CbN-N#~ zFE#?1wC)V>VpN>7;3y&s7jCixnO;uWK)*Z<2l%`rkV)eNs9XV_WS^mNPG0v4m?wN+ zMw}gO8x|~oyYv-QLw;f@2w)Twy=)Zc*P=H>qq08fhiSj`6&FJO zC5ZpVgKuHu=C3on12IEbx$`PScrBK@|G@NAsdpV$7uv(;Q?wpoOOM<|cGM>92u8^#rGpm+`qvw6`DjxA5p{xTCk1#il80~HIyKN5o%Ca~DQ}yWjvGp3v#byrYVigJ?uOD` zS$dm5J7^b49n*%Dc<~ZC+q*3?yrc~``Zxy%x6*rW$;j^-u zdR<4krDPw1XVfeE%ag3i$TrUCMLo4AxgoqoPx3&erVQIjP33*eZqz_sCfG^Xj_f4a zBa6*Om}(r8Z^IIiMgk8H5IL}by6Bt2oQ&-WzQn)_U83T0G`uni?engM7aQ0iP$kT= zQbbv(^d^fkvfqMl(1~G=nk;hdCOd)lAz<1j7d|}2JBL^YJpgijnv=fFG)}eaoERDI z9dxS?>bz3%N0s~V9InSwXjf+Fljsda{m8H86R8HYFhuBHgC{U<3| z2Pz$vm5~v6hdsUhZbxOr)((KSUwbUHR^KaH9*5l7L@7lIaoewQ=p}>vp2AAp(z`}{ z58B&mtDJ~t@3BxwQvVi7K2V7OZv6XpP#cwIKrTu4{Spz;+w-H?+E+@-I6e=pEUCm7 zgfrTGJZjQsymo_C30S=s;D_}Taj6*x1c3|50w>Zz`|3P>G!3r5!AeBRjWh;**U;$O z;_`&r&@a())>EQV0jASmX68W@t5nnbgwA#`UZVz7a-pQ25&R<)jPV?`jSWyP-uV~? z!e&8*n?uwUZ3n3Ed181nrxhE&xR)*TrLi5-`Uy{ovQqiP=SuNEI^=DSrUgdR z5lG~E|B2pY3X$E=3Dl!$5t;5!QjlK-c+`Q{Gkr(#a4%*xI%wOXUi`|zwfOa);LVCU z`+zTnWOJdOMWd-ro*~JVd+}D?>IM3-&(UA`$j{RsOd~SEU^bDIR_dY#7TlZ(r7#kl z5iNa!gn42Fq{M8p;c+pWU{XnZ?423l(JTJcIvnB$V>G;op4wum#qed>9kzxxoun;4 zzE4JjenOUCa~A4~{B&I2HmoJd6M78PW>eV1-v!N=7yK|Nx;KFdX5ZFsTz+ibXpR-r zEW1OzUvl{Q=>={~cUanSU`_o8uk?Ok8bSv4)f2HLr2Uv#wv8JC{b?dzPUW^RZb!Ts zv!n0?Jkk*duPwH^{6nFgClY0U6N{^sv~dWqyxul3Q&_@pVE|`I@$^DmVW1C7&>9&nCe06ZCuRz70(IyY_&AEt ze|Q7MufgYNjCecZv0n3Sj_`_;=kx%dW(C$cfp6b{K97qsUGQ2YPm7hG--bR+P_839 z6@)a4_D>szPjs-9{Zf*GFH4XG&&Ovk^J7KBboot0Bdr!qa>bCuvzWv~75IFSA?hhw zk(f_PkHjL@-gUGaq0s>k)c_k8yL^04s(B0K^_X)R$`m{Ka2E(64+`y$DTgFl#ds3% zKqB7HW#E;cCZxxw-tbIBL%ZTK79ox;7EO$Jep4$9@L_!4DrWv+T3CrXPOZaWTiT0Et#*3kr*A>f_Fep5YoTi;6k$twrsB~VpU`geY z{f~l77+R9Jbt~2-wH7aZ{l5p6#sd^tn$cUzETJFAScQwIn7=2_iFlr5&O-*${5bg5 zhSSbtU=t5u@c12&F`gvenS%)i*SnV?E8m-otyZ*s&hS>wLSq-s7XS4N@>_7sFx@(89ScQcLGMg!jVyI4c)vqzc?BW#^(2-!Nldoh;#7}E-KkBIp#@o3&04P8WF z+((R=L&VT1rUeQANQU;Qm9}ki=Lvk~m}bZBXHgA2s<>R+Njq$5O?ZlNMU2HmVKuwVmuhjZgyjlXioI8m4Kb6JCVbJ_X*8qt&F8>)Vu~F$?KM(6PT>r z^0p)0w5+TP)}+{)Y4KSb@31&qr8FLoEXg#hP2ekH#xhf0Hzt7p}3v^RYJ)+}F$yS19rCKL|CE z%178Bnb11R7kynwCD@>1SYYmR6!R4j!KQV0HyI3F?9^ZqpHt4mqMUdsICd~gsr%AW zh_P8pB!|l}pI?&5*4ZQu(!OY~;pkr4wn52UE5v zqe`%!5fcF*^cN$X2NM!&TUG9+Nf~|D7^V60GQUs5V<@R_B3WDyUPe!rpNK$}IK6af zu&XjiYN4^a3?-qvTHXA;`hhleAN z!HR~Loo^sXyu3UEhdD5}%zey(xOE?75@M#OA7&CdA<#3AFi94|{8CF| zAx|So6w--gBZcORo%F(hNLhiD?k?snieJyXMe!S$Hx<9Mdn3Y2vHqZfO7SBOAvW2R zd0J@!wS_tx_f|MFGs^UGW7DUSSe(Jsvy674-Q&(2kkETrhbi5OmoH0gtm@1}A{&UpR8MT#>y6_lb(WsV z2T#I6`P|8{P(FAvER+wPp5n&n7Uxdu$f`Qh`QYhES|3H~H4wXNn+#V3R|Yo&ZVp@{+}&{Z!?nQu|5pD8S4hqtxcA^5Unx1C zhWjbp9=PAbeGGS*B02AXdmiq`a6Y(K;7-Avg)3Ik&EV$3ZGig|+-GnTzlHaf;1Xw}zv08vhu8?ctrUA* ziQiPZX59bIAKrJm_F8)3>HDpC?+We^+#lg?T#Y+jaOMNZ;&cz5Y^q5g?hVs{V_We%ui1-nBbuqusX!l2iB=)t?_aRsnd*L=$5i4+P0sHryLYcPP73`eHptD3 z+a+h{DTI3Q4`Mula0kK*@UMIArN?#rq(WD)iZ`a%!O(!467J7Oa6)~(HUjVw5lIUw?;aL~}ihGqSn?sN}nmG}vEzU z#ZSnAv;~1u=5=;~YHx%R@{pjF)*w4x!DuEw^e8F`7K$8I+}ZQ#Cz?qK(PXM%_$e^O z*9rYkQf*49DxxOC6U1+9vCND94&p~xay&gz(jYe-f-HzMMW>L)_0neK#a)VH{u2w7 zg6I@#f#~lR=mYp-Rw~vnN%&yk-)zO7u6(~fnz;4W+Q`aO0e2CCk}CqHJN4@_x-l?1BJ7r&3MIdHS#hTAzHxcRqus<1d6@A$y8au z(Y@Gr*)3{v=mp?tRvT^faBSiTy@G5DpteT+OxqdS;yrWlLntVHAN^+b(C_FS^gCrc z{g!UU@6yi9)9j_c!QSXC>?LnzZ|o-aCOr#p<9Cve!PBdxXAZM(d*%rIV3qxulN9%# z#>TrhISXM6&QrQ6@tMOgwcg|&{0_58J-x~M5F!KTXVC%wF=Xj(pjPysL@=6}L5AT( zP8{|;M4D+qPs#$=?1j#wnb`>9Jt+|2aRg{)5lu7kj%K=$hD#J~c!%~jzxOc==VnUY z+mg||h|GvyR5pxu3LEWP3#gq3qN*dR+M}6wBjg6TY-ED=QDs2Ay@((R-Ta`83BCp4t1oP4mhDDoRU1B|m8$TKK z^W^8gnSz@L{quvB_N;GRL$5XCb0furD~9P!cI)xtPggi_bgT8`6u-3s|3VNtFDlpU zgN0T!5OC>Q(mKJ)XMI_Xr>)S1)t#4qf}n5nQ$~)D>}2N0D?K zx0Yha!$k-Z5go-y&+iF&!FF$S>|)aU*c$#V;onO9ihgoA_SG;QTpJ@jM>CyB!61Te za`FsKM=orMa!raps^w~sjt~#H;-xF98imC&8)p?`jK-EC7s&DZ# zly9#-yKixT-d2(pEJW4yKiyMHP3lZ^&1Kk^HPfUPqSqv}eOb5?c*cCKRa-K^N~)i~ zYtEm`UM%i?5q662-uU+_!#+9k4E2x5qItop0a$kd#MjmH`RYJ4Q=+Q$MKf)NZ)YEp zfzCm6RUhS7_2u^!f1;-DoD0s8;rblp#tt*c-J9lvKrZ< zV>j@xhkqORw~2oj;g>4<)!$bd_(}s`Y2Ygje7*+K{vb&o{a%vZgL?_?7jQp>YlT|` zR|8iFHwx}DxbwJ4=0YC&n}hJ(aLeGdeC*kuSQvQaQDJB8|8}9#qZsitrFuDo>SC6gM2Jmq#C#* zZwps5x8e?0#cWSgMfHrrX|8YF_o(as75A-dcCCE)8%tcvS3G?Gl9ekTUa`{kNb{11 zTuW9hxnEV5EXHd3frpBw+*DMUkb^1at*Uh0f8VlYt_N1es9g^{gJ|!;6=o z>@UhYXKsV5s@{{B^^0k%W?VvBF?;U3iVEC@tZE=nnuTA;Qvq?Lrke7GX~3q>FQ3@} z-(53zuIGk1cOqzn@09AQJg&Ko4fU14%<%k#Fy$wF<{Tz5!$e|+i9|AakWY!^Q-YZf zKIehY^x!$C%2i)c4z}^|{Dkl{BaDWM(NNf=p)k{!Y=~ZjQBo|7(l{*G#KR_yU_-d8 zzF}@m4-_VWO`L?LaLwGx7!8F@8VZ{k9b{$ zXJ*4>kW#q5c4ouPMwoCT3}Q3Au0iDC_~e;nQ&blF(`T1AF+O|d9QGkqRW0b@&!Bwd zSHUNVsJ!~dX?2Fr@$yRMQ$BA-BeYUKy=qPcwgaB}>PD)Jr@p*$8u@iq)6o^GN$OY_ zlE%V#USWpkG?Ysos%s4jzk}3`@XR@l2$4?;^gwhGFK^;FV5mp(R5dlQ519~^ zJn)V7n$u8=b}O&H18fmOnjsg{8DYYwSIwSXPw7o_QCs+pb37Gy)KpR?BRrq$EpV!$ zfmbKcR433>3!3`68s-6?^TX%7^>yV&yj;X<47wVFu13&79MTO%SV!!m4N#JYo6Pi~ zJC09dzp7T?RkZ@Iss&y?r;^(oKGzXV+XzK^*r)W$N{+LSIB?c8`P2@;IZi&sfr~mc z8g*@)MtUbY#^H0_;0wIs4)CWSXe#cgujgbVEO4`(;IoWIvq;k`XV%X|KA0PM()6bK z@_Dek=}mR$wsq2U5tYzAD2jMP)tq_oYbu3b-%vraATIow^$i}1!)JaoS?!2d%$>4-Bu#NoIQOYooRF?_)vQRdHjrU`9MBjV&w zgQh8s!c`_F{6+%@38zz=5FJXLKE1ArGK#vOEUE*Qf$myf0X;O8Q`JZ(WLDDjIde%w z#4E~ch)+!=&ynzJ=3pEle}?cqEF;rQpZKEl z&jtni94~JuM~9g1VGrfboKrEkp5&yVfaAii#fXY{gJ~;sDyTW9S5^ss<{X~ar&rWe z(bzh@e45B#Q7!z*O;oH@UtU8)s#L$AzN!g1$e+_t1#7}TB2zh8s;i$Z)m3_C6Vd#- z+4YoAS84hU^@Pu>qLGe$&R0L1RVURLetkooR0CIEQ^|IX(S-f_nMU03>t`5o!=FEG z<{avA_^t6^wN_JKBh{4GQJni>g{P6{5ezY6xds`GF#NgmW=v$`pl0KEO_cy>;m7Gl zoaQKs*BHqry=Sff$N(taBk0*4m@_mzuT;nbhTdFFbi zBW;|gvA!CC`ts`OlvZQ-#`2cdNq15|pmi^$SJyO1mF4wtfK>a>UCKr?nid zQHhSin9_O8N^v6$Uy{s@VyvCXY>c&YmEog2V{F5uRZfOeUtPzxTVE~4Zq$tBMLEWr zm&-&LmJA7ii*+mVa#+AD7p)DcOp=k-cV-xM<*=DfYeh;kag)|yg*E3)*wswbygLArCG3oS+Idwuz*>p%q-|-7C6r;2aGnKg%+QM_C^GL1>zHD zQG3opYtBMT)}!y%RgkNZ>M$YJ&8?BfRm`uPTEWW|gs07)ia06Kn93xYdS)8)33=s} z6%uuJst>h&x!Lvz)Ku~GE6u5bEo0V)j-^>MAPVe!)(nyjc3oX3VP7TDa${BvAgn7% zFJv1SIwhK?(I&JcK|19DFHBb$g&CiSL`sA1BwCg=REhC-7UHw!+zI+B$cS|grj1$1 zPIeBtB+MS%KgmofKgxt09;vdf3GP<7Ti~X^6~N`gO@_M}E>EfeO$BHwKvMyl3eZ%5 zrUEn-ps4`O?Ac9lx5C{5HwCT$E+1|(+|6)#m{S_juD8P70yhP&04^VHGThB@c_f-N z&68V6a~XVI-%M*V;!PsnFl|8twNXydBnnNSJhk)ZvSH`k8po!a*pxU{X=3?t%zz|= zt(21&Pphw*aXazHkcPPrZ3KrQPO5;z@FvyePnN16Z51S~n&yEIH?0X6Tm>9<7Iim6 zx2O#!|-<){&vIPYWQ2=6Ce7v6ZxAA{8__)8h#Xb7aSh9@Lv;X zFCf$bXR%lu1U3L0fR8GI4xF5@KZCBFFpGn;6CLpjFB}O4 zAB1-sSeP-$XJAxcA7Ms4vO#wNWgHL~mqB$SI&g~VCCk93CSV!BSU%)8doGITiU{nvvW!f&;2AAQAm-~i6SHg5Q)^n_lh>qIGBkYCs=Olip2g*G{c~Q3> zlG)<8k+8!CKfr_mktF5^e>Gu-{`P^6WL}$q?J)Vd;{3K7{6-NS7c5Cz4Z8j;ro#{H z#Nc;`=-}vYlYuQlm@(-4X~H1fcNjxG#)y7IvfP(Iw*hnmh<7nYxAG7MMmk+bm{B(q zqjVD^Jrf;NB`}oRY2>|(F(@zrbD4DT&Gxv?q)Wh%B~}L63zdgyI5b+K4| zX>dhe#>{$56d3a}>yd3@;AhsOAR#Zyg7&34v$>$*&AxvDc}$G@5z%Z)$ZL*u{jNA& zJJEq(e@-0p0^`2_OYVaty2Kd#2jOs^!7&kKnb-pcHo?G{AL-BNN3CWVD96MUDg*g8 za9;f2ui3zUfH2!L{JV|3M+mbxCQ(9@iJ?3bYcMftUxUtLVp(yl#>8B4jQb#DJ0f(z zWgIr?gv^Xp8`x1HOKPGlM};hmnX()evM^@Ka#YB|m?_IqAq!)sEJuYbjG3|=6|yj9 z%F-ib;jzioOOKF+F;kWvAq!)sEImRN#!OjyL>Y`x8PrD0sSIOWt2D50CSYX-wju#5 zG_aKkSe}7>D*?+futyRwmw~NHz_JbO(F82Zz#cQPW{gP&_U#1BZeV{TjAnJvo&P7p z#=Y_Rjq8RA%WZLt>qgk)ag6Imm=?#lZiHd*H0Noq8(~kxF|He7?Qx9jMpz(@aoq^( zFfg-jgz0gN>qb~-Jnu28FJV}8nX>SFMA(yYY`~<$WMR_nFmyG*y220s21r-%2jR?q z`H_KrY+`n-1q|%GiNQZ(V6-kY^M(xUoQWatdj|Gt0(RQKP&LWoa!jE)r2*qO$%1MC zo5J%9VKmnLlrYP<@l?<;VZ- z%ofY|aZmgQc$*jsLAj4V@jT{V6GLXuJx+A%O$-8>dD~441)FrO2KGS$-EtF4pj%8B zWcv%rCt-GIGS<83yU`rNvT*w*z6SoGNw-R@(RsZF5~f3kqIEm*dztClB&i+au2IHI zjODe(Fc8YnL6YRK+=#RWq9Y7CFtHjF`-#9(6X|{)$Cz#ac@GkXB?#KLlJY{&at|-D!jF%>+6V8_$^F zchaCE#hJ1kGq8^c^Wx_qWH7K1Om_<}$Y|e4^`K3kMH-4-^Ep_`#TYWnPgC6z@)EY` zA`JPiHS^}g*SlnQTy6q(<;58B>o)kAbcFreMHuq^j`M;DZF!jLOLRMl&XP{bIc<)o z+v3k&rv1@9zhI#R&W#J(HHmYdl3 z;@Dyn`-eEzWMb>%SdEE&KaQ1|*i&(=z{LJBj^&uxhB)Rju^+^-EEB_^$n}6u9VUhb zF)_)+plGwcAN|PC0TgXwArnI*nb=7aLt~oQ5ylE7`2`p3#c>ncPz=k7VFzPaUJTn8 z!wO?q4`XPLXHW*l;y6EG{~pH#KVZL#V}c*B7vmW7L!0i0!}|V8vb7yl2IBh?uO)>_6k!W`p1T%ukH%&l=d*L>Z%~+>K`59h{fv_zfoZn>e=K#4vCq zdBFgAJ58(%m{Xi-`An=lj-pFybe$ z${0rc1XgBZ7W7|(t}uqVVsv>XCdILw7)IlP;OAnjN0P7W0l!=EEj#l}5SR;?G%;*wOl-Z0p)Z+Or-`A0CgwA-Pvcmt ziG2{q6chW9v2|3BWhRC-bdt2rPuOA;`#6r>ZDQ}o^EQ~+U>vJ4F>K&W`6^8;L>T^1 zMu~}q<5+=-{Uwh5pZ2~zKC0^4{~%BT#u^^2Xi-NbN^8LLem{Z)3>qOq(6o&=&q*>e znZ%h1h8k;B+D1i9YZR*VHrA-LMoTT)Xt|ndY*TOAqDGAvAl6v1qGC&HtXO~Fz0cV* zgSG$s{<`;b=X^dZbLM;2+K;vNT6^s?=j;?P?CmtRh+&7)*aC*Vlg8#T?AmO>^=%kyO!wm$>Yne0%yUY^NP%$H@@{tRp}lcjo|N&PLv zFsf%Cn;&5N{CX*09>ZvxeZCwfo1uFyz{Vy?`~0>rY<~texz!(kqZIRPbU47qXnDRY z!}e!j2LrxW25230>`nyOzKp(&Gc2QTqfFM<3+>w;g6X*D!jYIA`WA;gtBUjk*cipm zI0oBGu~R8F6v*zU*q4sMMnmcH=r|zdQOqxoVS6d&mp8!5qnKYF!$udU%PVBtUQYOtW?l%rB2&2dIrs$HN-P9Rt1twBFOdMX)X=n@8&PWjh0GFU9;i7`A_Yny-WLQOxIK z*a436;YWF_VFSKbDR$~H*n!1_@3dpFjJC8e*^IU@>_A3a8W~?kTNrjgr*+VA&oE3q zM9;Kd>X+czN3k=G!Cs~9TX+oi3T=z;gX2NH`zYqyh+(hLw)lLbjE`bIAH!ay?ORCO z$FNsuy$fjEs0w6Xp?p48&MuM9BMpU1Em!DgLEeo)L| z*f$Aw;;dt^X3964{_x27t|8cL%EvLRHsC|PedG?(X5`)*0u1@_L54M?`NkM_G{BI* zk1*`xG~Y18{+TXskYST)+1(8LFfF@_VKk4OHJjX8?qe9u*MOnkUWUzKSf@S{Y)hkAVs zeAH+BdJi+cD?+JyeGGhmOzYqv$jl_)-}78UsFz=RwK`ERt?ZKf^9h*W1UisZG=-3+Tq%XTvC zy#Pa7Iv9qfK8;Pl+9(EF;uZ+K*8(h>!bq&cd<3kD$GDVf)i{EMOR25Bhxb7={Fp z`X$PBd-WJTO_`#dm<46k2B^d4Rp%nJZ6yF5FVCwroQ;5xRj0Jr4_mi>VA0q)DpcLP5 zfc0fygG~0pwCwJH4^T>WSAg|qV0}#X-n49Qzy~NLyFI{=`lPUKCi~Mgwk6;Ll;YbQ zV7P^s!rGba1L=B`0Uw|gUo_yOzl#GW4>VR$>=Um3ulM@80#?TO&}gbtV8slBvKVHk zWFJh)@{AA4Vtk7jhDI}NeoFR%lx!~JL!%iV$1oU}VMo44#tUgP8IyiL4pI!i`NP1B zZ;WA3G{g3!WPh5H9b|k=_vmkbfYIOggF5<{>|fIL_AtJTdb=5xQEz8THeGK!-5oR%#P_yDD33j@BtqGF~inPNoG zO(|V1W_+la@hxB&DrQ(-O13#AJB{(7V#YW5UBADt(Y7FnSK&AH02|N1CIaj(is28A zu>iw#*X;^Sddm zi(n_viUt^8A;J9Lt@?qXsACTDd^c&!r|Tt51pfeeH9eq=Eu>6>jij-v03-7B0N)~t zP2%^RAs?E7=M6q%Zxd2?{+Ua)25|99d2Y$-WvfH^ydEvbMt~XTOIEF38Ctng=g9%y zbI5ls{T*cpYP2Cko|TeWP8vI=ybvvw7JN*(88|85C<$}^XFd0RP&cWyn_x&!-z4^y4$H6@>5}U2H?F`N~)*QWuUTBlVGR9PfXuJD*#>8ZUO@Z5O;B zw+gSB;9bEr%gO|vD_XPuJpWxod`CZ)7vsel9P3xFTXp{G6-DHnovm5960b>tXU%H* zB1$QF*A9Ca5FYYQ(bs~{75*prN^tU(d~&N|$#4U12l39#3cn2{Ye-8`fAJdn{^1JpzGmtAP(0iaNhHJZM5wWPV;DOe)M0OgM2HV1 zn?oA-mq(iukyt~hr8*8JG=>v&KZKw%QXcwH*4!M5HiIccQE9BHr8%Aq#j2aar2h42 zcf2VQt43o(kz=o|+Z0Pyw}ry-cr!HpDc;(~>UcG}7!TDp#}divSdv@O)RM$D5C3`r zva6euq3TdwxHi&M9SyWZ%3KxOSRIYj5rs9!&?ADCM#I&KaHy_1c6Kt<6ln|bZRI#Z z)v>w|IcW^lH^-Y2TyeOqnw3}=X^12fq3U|lBED_u(xqt|kTNmL7Sa!HQQ>O5at+P4 zv?fE*NG!}<(Av}zs;;YxV@nFMmjoSJWVeVIX>>H&d?gHtgV~s|ri_ehYhuw&A@m?+ zK)QiNO*oXOt&T#R^)rx7eW#ZpzaECJM`P-Ifq$ueeXP1B8YZJ4(OQ!vnorflt!s|Q zHx+~gbxBPG4fZ=i21(F`L~9GNIqd`)2Tj$nO)2RFZkq*NM}LS4BF!;ey`nXOFQFP# zwIQ4Y7sgh&DN@^vk(Hs^qSlsZq?V4JM7W^|7EG1QWnPPXBb-t#DJ!L~=9X}bv^A(G zQ{U@j@o;T(LkzNYA@Id90Eq0$XmfQEGD}*TBdE`JIoLiP&a@cW9i+Co37sWEO#eV? z$Y>{>Y_1Po{#m9coh7!8$1qgal$3n6=)Cip7i9E_ye$V+!5V6S!eAo5tqJZ@G_!$4 z*JDaew}+~i^eSVdrN(=zBtJgZhp$W*j&>X~*3!c!Jr0&765%GeAYwa_vL?nSMsSD|ViR-jI7?06N1C3uvL=0cI#LK{& z*~xW{k@{q6$_QmTLr7S(l}|8(UIf>TZ(;#7GnSyND1;FXh`$o=4W{YLxc%wymnxqP zCl(`Wz0WNOiid6{EjC+Dg2WjS;fP$tq-FFhA#^ zk9bFR?YdQ8qj^XXwme|xROh%($^t7r$bOq-AI{?7`~S}e*&HzRs=r(3+I2$YU>lx&L*tW~?H^a1*hXv0x^8}Q+)Z@=$FW|>!TUhi*LZb)1Y~5 zy#T)bIJdiSFO~cl798dQoB;c*bYstVU#E)QEmaw+Grw$cMPW| zn~^qzPhKTyj?1vWaBkmn>ha^GoaCh)q)}!?9ZI%2i3H zXq0mEag|8?FvKfs5kF$=dR=9#75wi^tB;3~kJe79L_(J-H|w~{NGy^hNh)`I`n)pC z&7V?P-IQpk47Wwlj@kHzsFg@o*4IVwo5cpMvT}J#OL=Wea%Ch6ac=b#QZ>r2X>CBJ zUfI~(yn(!rTUl9)(HN^tZfXgmuKMOmk{c&*>Sq8P_s-PH))@89t>8xgFk_NR+mEZH z=)$R$0kRSOYO4*mBr6+{c3`rQD~apJL+vV`>@8(M$b}(-5<#oF7guZ;g|wmVvRU>tlYsqz1GC@iXW=cfr(k;pD%) zY#g^LQ4}bq6lotx#Bah}o*+qQSz|n0T~`u8h8Ewn97arV_Z)X|YdF5C6yXV(cy+8c zyu7)U=!-i*+Eo^*-9Q1v9Nn z)Iq=1lMGwn3k5L~kdM8tlgrs7tAVTrvKq*0Agh6_2C^E+Y9OnDtOl|g$Z8;~fvg6O z)xfm7aYq4kv-)CJlC>I7{Db%5GIZJ;Em1r!A} zg6cq3pb8MvD*3NCKRfx!BHYfU2g9?USq)@0kkvp|16d7ZHIUUnRs&fLWHpf0Kvn}; z4gAm10Nr(xn~&EYk8P8`lR5txIR2k8-6OmT&k@`*wpZVD$BdhQ9c>}vn{#!Vp<5KA}< z@noHusBH{4RVS9} ze(fguJp)Mwk2tUkxWsB+MIY;#zAB9#+0Eys4~tLzt+izE-c1YK&?j zEa+jWW}$1J`{~xO4xG#SbZigo6i)k^mUsWvK3OEIfvg6y8pvuOtAVTrvKq*0Agh6_ z2C^E+YT*Bf2Jp*uAJ*+>@QZnmU&+_;8~E$^8~6wKhxy;|zvn;XIpHMXG{F&ygbJZn z_?ECmxLepEye|A%I8K}?E*CElH;XrkzY>SUx5UHZT?H?A|jYxEgAjYo}VjNcn0#$MwC<1}-zshJm=7n_%wN%MB|F7rY2dGjsv zh&jdjl6AV3Z^>4vRbw?+H&}OBcUwEHUDo5)Z>>LAf3fD-^X=1Y+g@g0U{~7>_D1^~ zc87hdeV2W=y~F;c{fzwwd&J&rAF=;w=Qt-ga~;94oE6RmPN{RblXSl6T<_fA{Lp#a z`L(mhdC_^*dEfcSneNVV^W3vs-Zfp%UE!9xUvpz_n|r-`v-^PiQ}+>f*nP!4?0)2a z;!gMGdMA6QdS`lqr+coq!YlLs!@JJw^zQK<@OF7mcthR`-ahYj?=A1|-cb+ZF@(L` zV5^z@7kH6h#b3m)<7@a$u-7*J=ll^qB%CFz6FP)%3-=0pgqMU5g*oCvajCdWJYU=( zCd3X{>PGSV;t$1p#b?CdihmIIixc9z;#6s!)FFLa`nfbN{YjcD7s@N;gxn+FC;v)* zNgkKqmOqlGDYKM38 z)~Hvg*QocXkE>6r&#Nz~W9r-L6m6z%h5x+ zu3w~oU2oC9so$pGtv{*{>aXZ;>L2Pej0MJ54BNQCsKjXarg5Wji_vZLU_|s|JiKPi zFh$cf?=*jEK59O0{?`1X`H?xt`m(jmid$Q(+pMkDz1D>Fw)LKMygkSMqOHU37u%QG z{r0b5=NIkQ?Kkar>`&~e&P?Y^&go9RqruwCoI0n`i8)U?&p3)}xn=IP?hNk)YOPDX zA9;^@yS;b454?|vZE$mJ7$2YGPvqzFr}1a==iu&-$1mqE=GXII=OcU*pWv_Mzs29g zf1m#We-Hl%{}}%y|2zIU{$>6R{w@AJ{$qZMFhi&pE*Dya8RGHcY*_CsQ4kf;5=+EV zv0SVW!{U|VRpPbcZDODJh&Tufz5&1cKs;Njk?P@dTcvlUsj@C#D%Z=`$~Vj3lef!v z%MZzq%fs@h{Ac;^@*HKRda|mhg=&S`sNSURfoTkyn>tl4&fE!j`l|82iu zkJ%Hj#0U0V=S-&rzEFjd)o!!oWGw2LC!|==zXVe*U#+?c0pmWGM>>P0>oy~5iyT$EtyWMT>cDKjvb$7UZ z?oM}?+wbmn2i!8R%G=>R=?!}ayf?hR`My_*{}lwCOy^JGi}+H$0-hJ)ll)b%=l9@! z&-1VHuknB8Kj8n#PZx59F9>G~s!%3;4c6=sx`eI5lfrL=Kfo*Z32zDS3zNc3@eJ`R zqAsoxFB2QYZt({qCoPaGH>f{XIcTZA6>U{-%AR zP1gg`Zum-=J^RA4b&u6C!S&afz`35%yQcUt!tLn`fG9&CAW}&3;7G9IMGn zSPxo1xBhBWxW?YG~s^PG9kd}o0Zauzv@odSnK zivNu@uXAp4Zgc+NyyhI|9*@|0fxFhd3^DT>cdPrL`(N(w-4S=peckdUs{g% zxJkNJ`i^vqbh~u7^b?`bV+TXHovb*i=m`Q(z7&~AO+b<)=9=4C#y5l()I+r<|I|H+1+`Z2I zt^1t&NB3>_i2F|(T~G0NPxBnF+-vf#_OAEt^zQc__sGUgi|``%6n-sV$=|}?$M51_ z;>Y;U37;2E7ZwYGpb6&-7h&$}5*`y?5dI{*EqoDHl|)0lP^^N7#WDZgD&8(WDE?f0 z3icfp-xfa6 z>X7=fdQhFEEz%^-)ylO7Ev{V;54}VCf!3!zqCKtc(O%N_X@}sc^Yqj8#X7IA)+_WH z{YHJK{+K?hzo$<#zGR$fh=ysbGQMim8&|->n_=H=#(x^U#?Oq$ji-&@87~pbgxItIel25Xabjn!%0f=IsI`jPbj&8P;fUt7c0^VUAhu_xIpkxAW% znD8U}A^UO6trOJlGmt@@?wE+@wNA5hmGd3v9>nW@=V|!<7-I9s&ga}Y?x`3PWp0(b z0Wxm1TywGlD>R_QK`t0$!2U~Ii9y@SYpGV)u*(WSMO5qR_{k#ctqWe*zm0S zoI0wGW0W0MkE+wPSz4ZUigu>9R5OuvtwG-PHLVJ>!qwVlWM4nf?$Lgs4I=}a#LSSZ zFV~Cp2E>!;#$2Pt*hus4TM;*YZ2a1oW1eK5W3D#8ZZ??B=9QQi?nl1$xH(|{+8oBn z88yjX1i4WE0CFL&$In%Bq3Z?EbAccWHr5a&m=i06Iw2|~5sx2}gsRQZ=^mSCt zgJ0@e3G|cHI<@WEPRyF4@I_9a2T!#1QbgM}eT&|s@6w0#G5s)nalTQ2RZ5xB2wio- z|N4z#W863buUmk;sK_iwR@4C>+hOiD_m~srq?rq!l93fvAS2prZL|8U0pvmlt)o_+ zy$G3UiCtwUF{^I3ciMyYsC~%hFt0AgJX(q@s0~?953-ygc+FvFnmgYua0}rxjcz+K znqFiu!|pg@X^yu5{!)Y}8udE7Zsaq&F>g+gS(EMq*$Y3(g=ffoF>;v}elyk(ef$7F zf_d{Op9hQSuvHbT)QS0Wr!Xjt3Wwk+^WYgaa?v`B{4HXSxC`sPF|7NhN%Jx43lT*d zrFN+c`AfevjP=A3DMwx)^OzmWk-v1v-SQ61k9!b7C*@qsjt7jHl&SdhqYNH=Enc zK8)oN^PqXu%(E6Db1ku|Fza<9((SYctx@Zc#o6=h#aK0#Vy0`ex7a=QE_(<$>tTBu zGM@ruI%QZfv?DL=MQj^J-g(5yaTg$}6}jbZ)a^jdxdS=o9(MxyOs*I5WUm6Sj5OZ9fvPjXD60G==N~f|NIm@6jsvJ@{b)LFdwbfF!4)fau*N@V95wQ=zRK=nnuCZmhmfJnvld%6*7tQ*8`gL| zn2Cn0G3&534J-QsyU;G9*=d*EiwtDg9>+>P2e~PaT(sPYVg=ES6~k_<5GJr9$aO=m z>=wHfZi~Aa^G+Y;oe}pS=AArm5!QPpSP`^&Tf82u%ZEH}5B`5U+^7SiX3!imORaKv za~tNwZ5DSJ_fv4~v*(}!?2RbHo;F{IRYWoDTFRI4 -#include diff --git a/TitanUnitTest/targetver.h b/TitanUnitTest/targetver.h deleted file mode 100644 index 2b26ce2..0000000 --- a/TitanUnitTest/targetver.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#include diff --git a/release_titanscript.bat b/release_titanscript.bat deleted file mode 100644 index b6c76ed..0000000 --- a/release_titanscript.bat +++ /dev/null @@ -1,29 +0,0 @@ -@echo off -IF EXIST TitanScriptRelease rmdir TitanScriptRelease /s /q -mkdir TitanScriptRelease -mkdir .\TitanScriptRelease\x86 -mkdir .\TitanScriptRelease\x64 - - -copy .\Release\x32\TitanScriptGui.exe .\TitanScriptRelease\x86\TitanScriptGuix86.exe -copy .\Release\x32\TitanScriptGui.map .\TitanScriptRelease\x86\TitanScriptGuix86.map -copy .\Release\x32\TitanEngine.dll .\TitanScriptRelease\x86\TitanEngine.dll -copy .\Release\x32\TitanEngine.map .\TitanScriptRelease\x86\TitanEngine.map - -copy .\Release\x64\TitanScriptGui.exe .\TitanScriptRelease\x64\TitanScriptGuix64.exe -copy .\Release\x64\TitanScriptGui.map .\TitanScriptRelease\x64\TitanScriptGuix64.map -copy .\Release\x64\TitanEngine.dll .\TitanScriptRelease\x64\TitanEngine.dll -copy .\Release\x64\TitanEngine.map .\TitanScriptRelease\x64\TitanEngine.map - -mkdir .\TitanScriptRelease\x86\plugins -mkdir .\TitanScriptRelease\x86\plugins\x86 -mkdir .\TitanScriptRelease\x64\plugins -mkdir .\TitanScriptRelease\x64\plugins\x64 - -copy ..\titanscript-update\Release\Win32\TitanScript.dll .\TitanScriptRelease\x86\plugins\x86\TitanScript.dll -copy ..\titanscript-update\Release\Win32\TitanScript.map .\TitanScriptRelease\x86\plugins\x86\TitanScript.map -copy ..\titanscript-update\Release\x64\TitanScript.dll .\TitanScriptRelease\x64\plugins\x64\TitanScript.dll -copy ..\titanscript-update\Release\x64\TitanScript.map .\TitanScriptRelease\x64\plugins\x64\TitanScript.map - -pause -