From f07fc28344ffbd184a483f602f66a1a2cfc97833 Mon Sep 17 00:00:00 2001 From: gho tik Date: Mon, 7 Mar 2016 11:46:17 -0500 Subject: [PATCH] v2_03_74_src Former-commit-id: 34b12a81c38fe41efec75082ef0312828ec7c5fe --- build/dxwnd.0.ini | 34 --- build/dxwnd.dll | 4 +- build/dxwnd.exe | 4 +- build/dxwnd.ini | 5 - .../Duke Nukem - Manhattan Project (D3D8).dxw | 15 +- build/exports/Midnight GT Primary Racer.dxw | 31 +++ build/exports/Total Annihilation.dxw | 31 +++ build/readme-relnotes.txt | 5 + dll/Inject.cpp | 2 +- dll/dxhelper.cpp | 4 +- dll/dxhook.cpp | 1 - dll/dxwnd.aps | Bin 58156 -> 58160 bytes dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.sln | 20 -- dll/dxwnd.vs2008.suo | Bin 814592 -> 814592 bytes dll/kernel32.cpp | 169 +++++++------- host/-dxwndhost.vs2008.suo | Bin 0 -> 26624 bytes host/CGlobalSettings.cpp | 218 ++++++++++++++++++ host/CGlobalSettings.h | 47 ++++ host/alt-ctrl-shift.png | Bin 0 -> 30959 bytes host/alt.png | Bin 0 -> 9052 bytes host/dxwndhost.aps | Bin 175524 -> 240056 bytes host/dxwndhost.rc | Bin 116288 -> 126068 bytes host/dxwndhost.vs2008.sln | 20 -- host/dxwndhost.vs2008.suo | Bin 227328 -> 236544 bytes host/dxwndhost.vs2008.vcproj | 32 +++ host/dxwndhostView.cpp | 96 ++++++-- host/dxwndhostView.h | 3 + host/host.aps | Bin 47496 -> 47504 bytes host/res/alt-ctrl-shift.bmp | Bin 0 -> 13394 bytes host/res/alt.bmp | Bin 0 -> 4114 bytes host/resource | Bin 41590 -> 46274 bytes 32 files changed, 551 insertions(+), 192 deletions(-) delete mode 100644 build/dxwnd.0.ini delete mode 100644 build/dxwnd.ini create mode 100644 build/exports/Midnight GT Primary Racer.dxw create mode 100644 build/exports/Total Annihilation.dxw delete mode 100644 dll/dxwnd.vs2008.sln create mode 100644 host/-dxwndhost.vs2008.suo create mode 100644 host/CGlobalSettings.cpp create mode 100644 host/CGlobalSettings.h create mode 100644 host/alt-ctrl-shift.png create mode 100644 host/alt.png delete mode 100644 host/dxwndhost.vs2008.sln create mode 100644 host/res/alt-ctrl-shift.bmp create mode 100644 host/res/alt.bmp diff --git a/build/dxwnd.0.ini b/build/dxwnd.0.ini deleted file mode 100644 index dfdaf5d..0000000 --- a/build/dxwnd.0.ini +++ /dev/null @@ -1,34 +0,0 @@ -[window] -posx=50 -posy=50 -sizx=320 -sizy=200 -lang=default -;lang=automatic -;updatepaths=1 -;debug=1 -;multiprocesshook=0 -;checkadmin=0 -[texture] -MinTexX=16 -MaxTexX=0 -MinTexY=16 -MaxTexY=0 -[keymapping] -timetoggle=0x72 -altf4=0x73 -timeslow=0x74 -timefast=0x75 -cliptoggle= -refresh= -logtoggle= -plocktoggle= -fpstoggle= -printscreen=0x7B -corner=0x7A -freezetime=0x79 -fullscreen=0x0D -workarea= -desktop= - - diff --git a/build/dxwnd.dll b/build/dxwnd.dll index b5b3282..f16fa96 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f80de53cd4be510b1bd1357b345ca6353b3d2b8a00a459b3d736f67b62bdee85 -size 660480 +oid sha256:49d7c2658bf62db9650233f60f2cf5dd82912f2a522c26d4c115891440ccabd9 +size 659968 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index e202d7b..275e23a 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:17c2ae808e9f1b33fb9f412cc91d8c501cec58f395a2e9d098c008abc9285e74 -size 576000 +oid sha256:c966fe71e5250ed781b9e1415ce53fec601a93c4384893a2afb78bab76d75e56 +size 640512 diff --git a/build/dxwnd.ini b/build/dxwnd.ini deleted file mode 100644 index 7f729a0..0000000 --- a/build/dxwnd.ini +++ /dev/null @@ -1,5 +0,0 @@ -[window] -posx=50 -posy=50 -sizx=320 -sizy=200 diff --git a/build/exports/Duke Nukem - Manhattan Project (D3D8).dxw b/build/exports/Duke Nukem - Manhattan Project (D3D8).dxw index 18b7b30..4eca481 100644 --- a/build/exports/Duke Nukem - Manhattan Project (D3D8).dxw +++ b/build/exports/Duke Nukem - Manhattan Project (D3D8).dxw @@ -5,10 +5,10 @@ module0=p3shared opengllib0= ver0=8 coord0=0 -flag0=134217762 +flag0=134217770 flagg0=1207959552 flagh0=20 -flagi0=4 +flagi0=4194308 tflag0=0 initx0=0 inity0=0 @@ -24,3 +24,14 @@ maxfps0=0 initts0=0 winver0=0 maxres0=-1 +launchpath0= +notes0= +registry0= +flagj0=0 +flagk0=0 +flagl0=0 +flagm0=0 +dflag0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=1 diff --git a/build/exports/Midnight GT Primary Racer.dxw b/build/exports/Midnight GT Primary Racer.dxw new file mode 100644 index 0000000..fc8fb88 --- /dev/null +++ b/build/exports/Midnight GT Primary Racer.dxw @@ -0,0 +1,31 @@ +[target] +title0=Midnight GT Primary Racer +path0=D:\Games\Midnight GT Primary Racer\game.exe +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +coord0=0 +flag0=136314914 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=4226 +flagk0=65552 +flagl0=0 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 diff --git a/build/exports/Total Annihilation.dxw b/build/exports/Total Annihilation.dxw new file mode 100644 index 0000000..1efaa12 --- /dev/null +++ b/build/exports/Total Annihilation.dxw @@ -0,0 +1,31 @@ +[target] +title0=Total Annihilation +path0=D:\Games\TOTA\totala.exe +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=1 +coord0=0 +flag0=136314914 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=4224 +flagk0=0 +flagl0=0 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index dcaf90c..91bdde8 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -1142,3 +1142,8 @@ fix: logic for restering last window position on multimonitor configurations add: "Help -> View Help" to show help page add: "Fix GlobalUnlock" flag to fix GlobalUnlock bad errorcodes in "Grand Prix World" and possibly other games. add: revised log configuration, added "Separate" mode to make each process to write on a dedicated file. + +v2.03.74 +fix: logging of dwFOURCC field text value +fix: Injection routine: avoid closing a few handles that should not be closed, simplified logic. +add: GUI global configuration panel \ No newline at end of file diff --git a/dll/Inject.cpp b/dll/Inject.cpp index a15bb83..8e88915 100644 --- a/dll/Inject.cpp +++ b/dll/Inject.cpp @@ -59,7 +59,7 @@ BOOL Inject(DWORD pID, const char * DLL_NAME) } CloseHandle(hThread); CloseHandle(hProc); - CloseHandle(hLib); + //CloseHandle(hLib); return true; } diff --git a/dll/dxhelper.cpp b/dll/dxhelper.cpp index 60a1b9f..64b4113 100644 --- a/dll/dxhelper.cpp +++ b/dll/dxhelper.cpp @@ -1834,8 +1834,8 @@ static char *sFourCC(DWORD fcc) char *t=&sRet[0]; for(i=0; i<4; i++){ c = fcc & (0xFF); - *t++ = isprint(c) ? c : '.'; - c = c >> 8; + *(t++) = isprint(c) ? c : '.'; + fcc = fcc >> 8; } *t = 0; return sRet; diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index fcadba5..4a8d6e9 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -1530,7 +1530,6 @@ void HookInit(TARGETMAP *target, HWND hwnd) else if(dxw.dwFlags7 & CPUMAXUSAGE) CreateThread(NULL, 0, CpuLimit, NULL, 0, NULL); - } LPCSTR ProcToString(LPCSTR proc) diff --git a/dll/dxwnd.aps b/dll/dxwnd.aps index fe3472b974ba58eebd53b886f52302c3ff77bb72..55e0ccb3abb4c2074cf05c9b6c39c30d3a07d982 100644 GIT binary patch delta 183 zcmZ2;jCsQ`<_QXn8WRJt@})ny(sFr-+;xKxDarNopO#TyvMn_0vc7bVA}FCm>C!rP7b}_$_CLl`Qd$I7*qNI zoEeH>_9K`lADAm(v(AP=h2j5y5N2SQEdNlIQGK)P!^Mn17rcC=%(!qe?_*^EiatpB diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 9527585..d8d9631 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -27,7 +27,7 @@ along with this program. If not, see . #include "TlHelp32.h" -#define VERSION "2.03.73" +#define VERSION "2.03.74" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.sln b/dll/dxwnd.vs2008.sln deleted file mode 100644 index 0d2e531..0000000 --- a/dll/dxwnd.vs2008.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dxwnd", "dxwnd.vs2008.vcproj", "{579E7FE7-2745-4100-A802-23511711FCDE}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.ActiveCfg = Debug|Win32 - {579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.Build.0 = Debug|Win32 - {579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.ActiveCfg = Release|Win32 - {579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 0df8b16191cc004af9f5841e729cccaa3c6de8a2..b035987adf9a347d411215de99b82a296f256d99 100644 GIT binary patch delta 7011 zcmeHMeRLF6makW@s=B(W2u;(35Sq~GbV3tCOqvK7LTF+P5JHR)5o0C<#90@SLBtVR zB#kmI?l5dfVP6g?6XR^lW-<^yCQpTlamQsCWthYRF0$xGX2$U_E&|IU3mEpk?&{DY zdk*aGKXcAh&h2;WSNDD0ckg}oy@XEYhfd}<2FV?}r;d@5y6PV~^3<^&LIpwS3Y)8> z8Rp$uzL_UU<|U~@b|EaAo0`Ui_baNoT0Sf_BV<-6SEbq^g0Q#3wvy0^f≪vZaIf zQ<7|6Rda__V6{@AP^iVl5(vRo@JT^(BK_v41zMN@z&E_nH z)R}9GheAme4el9LI>;>5^7gKnD0RA9u!+}@UP1a-Q4szLD{n-88kT!EUtDrGRABPNX>cfdJ4;6biFj7uXAJ@##*ff^bB$khMKZMItlPn0| z!IBHkx5{2D*}DDW8$_+*ONhiue<2=lLf=s0hGk=DBeYK=Ua0Sul2~3l^^tIuO=8jq z;&e~6OQgo8eISB3>;TIDFK9Bq|ju*^Xki3J}qGD|3Ftt@cBqu0G@K28a^f^v)O)0 zBxFA$WvEmLozR0U*eG_9NEVeqJg=jQyTud&`#g3JnE>epbT~{uDJ6@HK<@!92<>lc zDy;4ib31aVcU`n$==xf6vdBW?T@u+t1F&3^U2M%Fql9*hq^%-+Ad5ccJ58%o#FquO zN|av6gw}L=7&iBaypsh_(|ocMUM;s}LdZvxVW*cyBH5A)mRH(x;mB)>i-j|2CmN2F zX3lPP!gohYTcJH*N8J}orNj))@-R=m)SC|_UnxFVIYn9zjw!@=DX95aUY+D4uzZW= zg~gxIY*w*Z+BXTR=Syv{aR7BQcazjf!1bW&g@yGroBRycHc1)asZg@P*DalbiyoTH zQjSWWj|QnnS_(fYw|S#+VCW3=`o+Q{=#DFdT>M>ze}d4?8<+&kb}3Fc&?8+86WQ}~ zkKAixdp?jV33NB8*lVBkdsL~H)c+t1FUQNO+r^25F1sV5CV_AvDwG zVQUu4&k-m>buyz-zCfU=(2g=&aGwWUI^gC?;Tw#vszq(k;WZwe}V z{mb%70xcfuH9f5XX#JU@MNZ1)tZpB62A)b=4&?)rm>1FWgmgb)rJ!T`43>X$DV=4^XUSb8Cj?J2P{umfxXreo+8PtGNkOG zHbJPw_*@A0y(#X3(1+q0ma|(q>H<-h1FW!3IYJ_blpF|U$!RQWr*eXTW2P-D{IMjl z?1Rd70;MNpT=bPN|0ux0^GVa4UReMG8k zHRJ)G|W>v|Gew#gny+a@Q$msc^$o_^bw z42?b;dif#S_t8;ske(71SL|?+Tm1;)l21w@rt$hs6RmKB(rA$Qm^Xo@-DGpxKS1Z=b4GLHl5$ zF>RiDk-$#Bq%dW*T2CU4Y9qW;X{18vSv3Ufo20au@8kL>LCFThTJFPrrR;Z7GI{#IbNGU|+{VI%fX@+Fg3;OR3r=2rbl59gSKq0VmPUKv_3#1s;#q+8;5w8g~@Qj>u+B(ys@F zJ+NS^nql^?NP+Dk#RbXf+G%i%#MM+cYWu>Qd9z!!-gF4$+x@2JBb9xzQF9UV`0r9# zYLn)+B9u2wv*n*-7zn}CD*7aBxS$!(VQS?tw~RQ!xkamGVwcu80Da_TAeZ$_=>4fJ z1)4*OlXY&~Sz-LH;@LeRw4fs`TdjMulc`;mcmctVx z=!B^9*x?Vg0s`(M+Co^@gdvkBW!!cp_#{hCA|2cxGgu-ObG{v=LoD!xC6H1-BO2j3?np<2Ho{}BQwk#Mx%z-uvQcpQn>OK4w9Fxpoi zrx|di)JPqHGWetlbA;~+PYKI$BY8yd2xY=w3rmDY%vUv+rcV9=?^!rr5z_+hkjZf5 zKefR1xCDV;>C>YdLE}ZOc7ThZ^1jAl^&wH@4Wtf9uWI0lFH}9RyWr91^(}DLOEEgE z(?bpjUC?qM@JGzankLH=qrrexyrdT-*?H!1if38u#n<$w-5~mCF*A;9xEpj&RdIL! zOgl-TakPXxa+lsoIu7ZFDES4vqmeP}!uz_BnJ$&xLlCwOCE+ec9lbWHgA9+U?J1*$c zDS1COiWOh!6{La7`H@PIa8nTOL5gFX=UADAWm`PQrX^sU=h*ZFjPo3uk$`cYW98Q| z82q4`5lu4yZCI7~l%V&DxNwCfoQmZji=PGihie&7(rI(E)4$Xe(Mmzii8=Bv z9DNy(qcjsLk828ZAJj3gsP7gr#W=6mlcqnV(Q!f^q#qRLC=)PgtQXA7r+tVOa4bXq zH8yZKsv_l6T;cxD0Z1>T8S=02^FPNvPr}-@@!I*(&*~xk%qL+6Px({tiVEPM@%b7- zZZ(`F1^Nb3uQ3`;5MQGY6fGkjNknART0g884YwrY3+xaLzj_U=;0n_2wSEGh4A;Ej zG|dm^F*CjH>Qfh?r;JhsVIoo{_850F-p9X-(N*OGQ73;ifS1!JZsP?$V)PyR8uXx= z84Z8ZM!)Y3sJc@>3r}Pz!@+w_%m({RV=nw#sWGpACvtJD8eMvb5VHN4YTxSVnW&R? z4SO%v5jr0HaHg>Us*c&SpyfaGx{k~GA(1aLJ_F$ION||J0fvNye3c3?)sL$Dx2V&e zn9BXA(Ylz*3j|ydzKGd~{S&cHn#0t%Lc@P2t?YlnU(Ge<`EPk5Q)-MI;KhR`KMzDTG5hv3@wfN#1`;E+0ryuKb8meJTwnby zIHL=cd*}GuT8`)}PA$OGDK6!0P9WBOnEGM9Hc~Nd&R1VXgk%crmD6(CbB0tf!h+9{}Wkv`>gYdSEpIM+{ ztFDgadsQso@?mJ%igAZOC$Z%0EToSuEJ?J|KaACRW5qFcemfdX9(dV^*&-J#M0$~D zj`(b|FakaN`X;{7xBxR)b#$!fvzCk-<OC_MuC;58Ci(&>tFtWqr$MJ)4zRW{Lc}&Jvy!ReSc#*9K&E*xv`~x=cpNZ^T>6x zDmRJWw^aMy8tkw?bl>tge_YC|#m#TsIMY3Al8$B=<2!n^b%@iR704qZ27rVKOF z<)k6@aSRH?D{!7yKwt02IL|SDf{n{@o@2QQ80R^5M*_xqj`2fxye{WCmXH1SgZUO1 zNWeJH1;-^|oaY!dSwo?}xIFwS!en;^4NvP3`6{H DNL~LY delta 19518 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, path)){ - OutTrace("CreateProcess: Injection ERROR pid=%x dll=%s\n", lpProcessInformation->dwProcessId, path); - } + case EXIT_PROCESS_DEBUG_EVENT: + bContinueDebugging=false; + break; + case CREATE_PROCESS_DEBUG_EVENT: + GetModuleFileName(GetModuleHandle("dxwnd"), path, MAX_PATH); + OutTrace("CreateProcess: injecting path=%s\n", path); + if(!Inject(lpProcessInformation->dwProcessId, path)){ + OutTrace("CreateProcess: Injection ERROR pid=%x dll=%s\n", lpProcessInformation->dwProcessId, path); + } #ifdef LOCKINJECTIONTHREADS - extern LPVOID GetThreadStartAddress(HANDLE); - DWORD TargetHandle; - DWORD EndlessLoop; - EndlessLoop=0x9090FEEB; // assembly for JMP to here, NOP, NOP - SIZE_T BytesCount; - TargetHandle = (DWORD)OpenProcess( - PROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, - FALSE, - lpProcessInformation->dwProcessId); - if(TargetHandle){ - StartAddress = GetThreadStartAddress(lpProcessInformation->hThread); - OutTrace("CreateProcess: StartAddress=%x\n", StartAddress); - if(StartAddress){ - if(!ReadProcessMemory(lpProcessInformation->hProcess, StartAddress, &StartingCode, 4, &BytesCount)){ - OutTrace("CreateProcess: ReadProcessMemory error=%d\n", GetLastError()); - } - OutTrace("CreateProcess: StartCode=%x\n", StartingCode); - if(!WriteProcessMemory(lpProcessInformation->hProcess, StartAddress, &EndlessLoop, 4, &BytesCount)){ - OutTrace("CreateProcess: WriteProcessMemory error=%d\n", GetLastError()); + HANDLE TargetHandle; + extern LPVOID GetThreadStartAddress(HANDLE); + DWORD EndlessLoop; + EndlessLoop=0x9090FEEB; // assembly for JMP to here, NOP, NOP + SIZE_T BytesCount; + TargetHandle = (DWORD)OpenProcess( + PROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, + FALSE, + lpProcessInformation->dwProcessId); + if(TargetHandle){ + StartAddress = GetThreadStartAddress(lpProcessInformation->hThread); + OutTrace("CreateProcess: StartAddress=%x\n", StartAddress); + if(StartAddress){ + if(!ReadProcessMemory(lpProcessInformation->hProcess, StartAddress, &StartingCode, 4, &BytesCount)){ + OutTrace("CreateProcess: ReadProcessMemory error=%d\n", GetLastError()); + } + OutTrace("CreateProcess: StartCode=%x\n", StartingCode); + if(!WriteProcessMemory(lpProcessInformation->hProcess, StartAddress, &EndlessLoop, 4, &BytesCount)){ + OutTrace("CreateProcess: WriteProcessMemory error=%d\n", GetLastError()); + } } } - } #endif - OutTrace("CreateProcess: injection started\n", res); - CloseHandle(((CREATE_PROCESS_DEBUG_INFO *)&debug_event.u)->hProcess); - CloseHandle(((CREATE_PROCESS_DEBUG_INFO *)&debug_event.u)->hThread); - CloseHandle(((CREATE_PROCESS_DEBUG_INFO *)&debug_event.u)->hFile); - break; - case EXIT_THREAD_DEBUG_EVENT: - //OutTrace("CreateProcess: event=%x(%s) injection terminated\n", debug_event.dwDebugEventCode, ExplainDebugEvent(debug_event.dwDebugEventCode)); + OutTrace("CreateProcess: injection started\n", res); + CloseHandle(debug_event.u.CreateProcessInfo.hFile); + break; + case EXCEPTION_DEBUG_EVENT: + { + LPEXCEPTION_DEBUG_INFO ei; + ei=(LPEXCEPTION_DEBUG_INFO)&debug_event.u; + OutTraceE("CreateProcess: EXCEPTION code=%x flags=%x addr=%x firstchance=%x\n", + ei->ExceptionRecord.ExceptionCode, + ei->ExceptionRecord.ExceptionFlags, + ei->ExceptionRecord.ExceptionAddress, + debug_event.u.Exception.dwFirstChance); + // exception twice in same address, then do not continue. + if(LastExceptionPtr == ei->ExceptionRecord.ExceptionAddress) bContinueDebugging = FALSE; + //if(ei->dwFirstChance == 0) bContinueDebugging = FALSE; + LastExceptionPtr = ei->ExceptionRecord.ExceptionAddress; + } + bContinueDebugging=false; + break; + case LOAD_DLL_DEBUG_EVENT: + //OutTrace("CreateProcess: event=%x(%s) dll=%s address=%x\n", + // debug_event.dwDebugEventCode, ExplainDebugEvent(debug_event.dwDebugEventCode), + // ((LOAD_DLL_DEBUG_INFO *)&debug_event.u)->lpImageName, ((LOAD_DLL_DEBUG_INFO *)&debug_event.u)->lpBaseOfDll); + CloseHandle(debug_event.u.LoadDll.hFile); + break; + case CREATE_THREAD_DEBUG_EVENT: + OutTraceB("CreateProcess: THREAD %x\n", debug_event.u.CreateThread.hThread); + break; + case EXIT_THREAD_DEBUG_EVENT: #ifdef LOCKINJECTIONTHREADS - if(TargetHandle && StartAddress){ - if(dxw.dwFlags5 & FREEZEINJECTEDSON){ - OutTrace("CreateProcess: FREEZEINJECTEDSON leaving son process in endless loop\n", GetLastError()); + if(TargetHandle && StartAddress){ + if(dxw.dwFlags5 & FREEZEINJECTEDSON){ + OutTrace("CreateProcess: FREEZEINJECTEDSON leaving son process in endless loop\n", GetLastError()); + } + else{ + if(!WriteProcessMemory(lpProcessInformation->hProcess, StartAddress, &StartingCode, 4, &BytesCount)){ + OutTrace("CreateProcess: WriteProcessMemory error=%d\n", GetLastError()); + } + } + CloseHandle((HANDLE)TargetHandle); + OutTrace("CreateProcess: injection terminated\n", res); } - else{ - if(!WriteProcessMemory(lpProcessInformation->hProcess, StartAddress, &StartingCode, 4, &BytesCount)){ - OutTrace("CreateProcess: WriteProcessMemory error=%d\n", GetLastError()); - } - } - CloseHandle((HANDLE)TargetHandle); - OutTrace("CreateProcess: injection terminated\n", res); - } #endif - bContinueDebugging=false; - case EXCEPTION_DEBUG_EVENT: - //OutTrace("CreateProcess: event=%x(%s)\n", debug_event.dwDebugEventCode, ExplainDebugEvent(debug_event.dwDebugEventCode)); - { - LPEXCEPTION_DEBUG_INFO ei; - ei=(LPEXCEPTION_DEBUG_INFO)&debug_event.u; - OutTraceE("CreateProcess: EXCEPTION code=%x flags=%x addr=%x firstchance=%x\n", - ei->ExceptionRecord.ExceptionCode, - ei->ExceptionRecord.ExceptionFlags, - ei->ExceptionRecord.ExceptionAddress, - debug_event.u.Exception.dwFirstChance); - // exception twice in same address, then do not continue. - if(LastExceptionPtr == ei->ExceptionRecord.ExceptionAddress) bContinueDebugging = FALSE; - //if(ei->dwFirstChance == 0) bContinueDebugging = FALSE; - LastExceptionPtr = ei->ExceptionRecord.ExceptionAddress; - } - break; - case LOAD_DLL_DEBUG_EVENT: - //OutTrace("CreateProcess: event=%x(%s) dll=%s address=%x\n", - // debug_event.dwDebugEventCode, ExplainDebugEvent(debug_event.dwDebugEventCode), - // ((LOAD_DLL_DEBUG_INFO *)&debug_event.u)->lpImageName, ((LOAD_DLL_DEBUG_INFO *)&debug_event.u)->lpBaseOfDll); - CloseHandle(((LOAD_DLL_DEBUG_INFO *)&debug_event.u)->hFile); - break; - case CREATE_THREAD_DEBUG_EVENT: - CloseHandle(((CREATE_THREAD_DEBUG_INFO *)&debug_event.u)->hThread); - break; - default: - break; + OutTraceB("CreateProcess: thread exit code=%x\n", debug_event.u.ExitThread.dwExitCode); + bContinueDebugging=false; + default: + break; } if(bContinueDebugging){ ContinueDebugEvent(debug_event.dwProcessId, @@ -1027,12 +1023,17 @@ BOOL WINAPI extCreateProcessA( dwContinueStatus); } else{ - DebugSetProcessKillOnExit(FALSE); ContinueDebugEvent(debug_event.dwProcessId, debug_event.dwThreadId, DBG_CONTINUE); - DebugActiveProcessStop(debug_event.dwProcessId); + if(!DebugSetProcessKillOnExit(FALSE)){ + OutTraceE("CreateProcess: DebugSetProcessKillOnExit ERROR err=%d\n", GetLastError()); + } + if(!DebugActiveProcessStop(debug_event.dwProcessId)){ + OutTraceE("CreateProcess: DebugActiveProcessStop ERROR err=%d\n", GetLastError()); + MessageBox(NULL, "Error in DebugActiveProcessStop", "dxwnd", MB_OK); + } } } - OutTrace("CreateProcess: detached\n", res); + OutTrace("CreateProcess: detached\n"); } else{ res=(*pCreateProcessA)( diff --git a/host/-dxwndhost.vs2008.suo b/host/-dxwndhost.vs2008.suo new file mode 100644 index 0000000000000000000000000000000000000000..a23812bcd0e994390a9854feee5ccbdc6adbae40 GIT binary patch literal 26624 zcmeI43z$|_xyL_IQ1LFPh_~U6Ajk|L;DtK~3W9P~QRFgQ2L>6gdAFn8G^>-BOf%E8 zBb`!9Qqhx_veZgV(~edrJC#l1TlJooR{ch%)VZLv^fscARPcP5^Tkrnwwf98JMl`OSBAd^y)hhURw8y}x<)T$?<8Cv=g>zPVg0l%2u*n>TMx$y^Tg zpYjjX0)M5hyU=+ZfqmT?>*%Q02QD!=mxrguAn>U1A2g-;7HI5^ae+Pqd_Im=K7IVh3@e`rR6Pf zTCSFVtLTd{x#grQbL(l*(&a!bCM#9DDJrjYJnN=spV>*D@z9tw=VVH(%`M4|r}PDA zV{+??-lFlz1Mxyx`KFD}7dqBREYgArgP7zIWH&2lU_5sU-l!Aam`Fab;ir+`UdGB_2S2Bv_iU>cYXW`LRCbZ`bZ z6IiDVvpGHo%mH)3JTM?3x<%Wnej|4gTCn>msFy2I6S;`twN72N!_7 zFu;pQF9ttwKH$S=f*WJ(mlTFkjSwO9i&CR0i*73~CIhvJQgIAuN>zC`# z?;v_*HcwccjH+2YQ*Evey)RE(Oa28s;X=YmG!v_EPM|AGKZFzYfd_c|8dNh+J4$&cHgO#RF_-I*jk*}#Wa2`H{-SI zV$zlJ^)GEfspV@E`Zi@cgTx|d3 z!Q-cR?)0p2!kEZ7n&+R(9K0~>Z3cB%MawTr+NJrsIsY9@HeqGP~8G_oRmh6Qdl- ztTz#U9=V(oYncm;!>7a5F(RD*Dw1e)b>barIU0h8=*M-_iC1PNSFR$h;|}vkbGa*8 zT!Y5;XHA{Or%<2O$$g9aKc+|m%pBt(<2-86c)-)%C&5zaL)QO z`TnnQ`4bs?%P7@#(2Qt{+T7ZLKH#W$e&gv<%Xe*@jep0x5zoqG&aKI_lx$^GP2aAf zzxBrEZ0M1Wjq;O+FY)>Hm)AsdY@Y?{t7~Yl1&RG-c9SVk|Cv0aDL#e@CwuftQqh=1~W4~*8uK8Ocd;M26oUzPY)^&Rko0Z4AmsXY) zE`8ah1%AS+Lw^Dj`RKa zH<-p{%^eh`_0M7}m!_HiNqBlZixGEb?U4=Hv&$B9sx#S%$m0UMv?mhp1l+caLqRYPpdasLybq#V(#(T@5aN0pXWF> zsHj+hO|&Vwu6z7-MDHsf9(UJ^cRbbZi!=6_klXw5jx~STz00IeZ2r)npL*ohG29-1 z_e%S2Km2N!E+=mM)yo(3n7hnoK&IpdFKGYB`;Qzx;no}Hf92Z4-x$)e>yw*QRynT6 zWOL``d2{E)`nj@VLZa)f>*dsn9PP2A;)7z7X1Z_o_bS^K=-6PDmA^`?Zy!voKmK-L z5*t)uHdUBW7607Gt*q+r9=lVCdm821i`_c-sE_FuQI5X!>}?M@m|*Jnecf#|E*^{b zT*g>3s9C}N+k+)#Dx=u*WaTmSu&>{;Flv0Gc)q@zbkEv-miaBbXQBP^DXd4`H+OY9 zHHk~s=e3rr&vVLDQvFlZ*TwyX^gZz0GL_=~?p(~dmgiZK%pCQ7-;T1Dl*uQI;!Te4 z5#~}x4dc!C5c*)>^wrUV+Oxj7T((y1Jw|40hQ8$*tHsLm+1zU_*RwhIyH~%8_FO^# z zRO`?eCOaXsn5Lb{vbF0hA~09ldZAg|Q$M}}?ZRYPe+>5-#J~DpGD<3!^=<9Z(^YqU zX}+~DXPY(L5vni8NOx+P+H3?7`)HP!sSn?cJG<}G{92@8{NI(k`1Wrp{ox93DR$)^ zyzzb|_x4vQ6#vhB%Gsmw>Tc^5V4?Uwxj2{GdXH(#o9oEI=L`R+drUNMeZbe;gq*sJ zbmzhSv~&SB5TiLJS)}z(VqtgG#sC*?L+HX|$l0fvSb3|xhZeMb-~ShFzqKRiI|_f~ z8oDld@8rI1p*Ia%?6862`(M4g>yT3S-}2wTWP3Ee2U$T~eDmVlkZi`RZcy6R2bO;n zwDV`F<+EDNRT%Ii(=bg-ox|)~4YK;A`!dDe{HE9Y{y*D$E4BRm=O4#h=DhEFohj7B zm5@7J{^9eF>H-Oi=m z4%p`{vSrm^I&d#K+wV=k46EO3$f8GwYN7R@Z=SaC)klMRlr}Bpa`zqH_I#Tz+=pr+ zuJz@H0HYj5pCs1>xI$NqwB+2`cdeux0kZp5NFY6coYAapF759E~0=U$2~ zr>`j2s(9oB{Ga)gG-uPl&ObhHq3>&(y2|gQhDM_lE8mxk z&B?aJKkhFJrFi*io?^e*{HtFtb^g7Kyw~rR-nCfynf*0Wep0SwE5-6==T@R<6Urq( zdo(7^M0fom@L})~@KNwFa0R#$IGC;ip8%f(p9231J`Ju0ep_@cxDI>$HL6FN1#vUjbhQp1+IqZtykm_24#=egoVK?gRIO zO~CvQlKuzyCU^)u4CEgr{TBE(cno|8d>1?po&ZmR?}6`wAAqO8)8HBKL+~tk4*Uo_ z4_*L22LB0O1TTS~fS-b&f&T(O2QPzP0PFBe(qDmJgI9w44e4*e@4#!|b?|#&{y&iZ z5xfcB0&jzN!2f_hfj@))1?Fu^bOx%5?_k0A)UqQ>uaX;5e4sAKU~K$E}=Y{Tooe4&=mb{20&PPU`Uha1T&k z4(>4Yom%~N zX}<1od!s7{1*hI2xQ@Y9z#S6Y5y5qXs|c=laGl_e3hwyee6|yU8ylQ`abj>2f`iIU z3~o|zmN7ZFX~FFScRKn}q-O-@*gOl}K0P})`)Cfj<7{poH$S-Q;Kp!%I=ZqXxP#G` z26t|7w$;ku?hVds?h9^HaN6Vpp+6bvP`IZe-;aXx+UJ9NAvnA7O?1n8E4U-je;oPz z!&STAZal1Y{B0?zocXdX)RXhL3Fyj-;40A14eqi$?(*P18(e4d-4NXUdEBPpo(|6Y zJrmr!!F7duFSvF%G3%!tv`1IQ1?OX(j(!N~nZXT5A0PSZf;${;RdD|joX>k%a90Nh zmAfXmYlEwVyDqq!gX;nJh2U-rt~=cA!EFf6=lF7Pcjj?-1$R##w=uZ;gY$Ve1@~fJ zzL$b~H#pa^?*-Rw*R-u{`|jw<*x)MAPYiBJaJIqH;I0VHF?eNgUkR=Y+*gBpHaM?+ zF1UAsv)um)Zs*<7x_G}`(3SSVbwfWOxPHOub1H*do0o50aMuLq{jLq}#^7w{&joi& zaMt{`fUjA{@}cJQ*aOGagPM|-QaqV@A1%o(1_zy?x{TPX>{fJ;Oxs6f_pW% z6X1Rm+*kq$ZQL?WG^jup1gE|*xW&O81h)cRA9h}Fj)4o%wTFxIxLeU3CmZv)htTz* z-w95C@Ho1C`a~Z09QsLcKMt+}eF?hqT5$Tu*Moa2IP36sa0A<>&*t+DLqCIbcyJZy z$Dk`yg3}JB1~)S}=fBf~J1dVnJGi-d+`Qlx2G@&g7X?=nob&s#;O-@DI#MB16SCv> zUry??d9ei+ug#ABj_9MUD&|=W`zv2MavE2B@sq$>_NBjU`a zheSThb@uZ7*hooutB}gcB(`oGHcHC1f9HFrVqdlV?xHvUV$s=?srv-R|8mZu`-a{= zQh9Y{81UHE93Hy9ORg1A_a5&7xe8!`>bvn{YCd(v@uMpG@iU6FGC0fX;|XM7aK;SB z1b19;t`Uz9ZbWciGcvew!F7TgAKc{N^u4DBH!Zl~aG71t3r@D_OsGLbqQP=aDR5)~~jMoZ_6Oc#WJe{*c$|J$Bx) zoL*ogkTV|X43x8goaH-@*+&b3oFnXPpg6V5X-`Xl;@(c<_DxO{`6<^oZ^gfl9rnp? zNhPguzD(jkP9HEC_=Hn{oGa$(U_USm$k`LKfvtHCkh67{0p(mEXY_C$P%Z&-Mi5s6 z?|B`Nvo}5i4gl8!IsM$FKyj9rQ$Cj_$!@2d^|~J%2sVN2etLKB`)F{M`;*|_&*OIH zg4WIKe;ctB7w2DXr#mRM?;jzr>m;Sv{9l<^YMQUmuk)X_Y}rboeEIx;b5P3s@1OBC zCzjudOpeD=%YT);pSQb^;?G}F`N@8)Gh3I2(o)%-nphb-qyvhxz`?<3I|ra^ zPlp7jZQl!&is1ADozRsY!KwEQ?u6jH-*9xjQs(gwMbF*_jgEYJ?J;rfNx@mh$-$iw zoMYw8;1&gE8Ozaqp0&YQ#^T6#L0-PgBi~hd`7VrnR|ltMUlZId!Raw?4eo2f*#ln> z?%v?^p7#a!&EV|QheCfeQb*9YBj4k}`D`zt+x9O9Hxm7c$oK2uY^ygS-#ft#hkGUR zy&Ify%zMG@N$;z60(*rebjafl4z5RVWXtsou2*pSz}~@~5S$}%XmDeKvt6>k_CF;! zsNAH;w=_6svUAb(Yb%3urN0jSc+w99XM5D4k0iY+IP=|r-j4Lf;0B}DqARxqr+#a2 zw*}{O+#cMf;EWp|2=1Zay!K&q@B8iGy!Nrk_hfLc2EG^Ev%x_nf30Zxd~nC1zYzIe z3C`H{)!<$W&TC!|F5Bg{joySaeJk?WE^njnOWJ1Vw116jv)%CBgBu3d7G2pVIQ4ze zz4pN1oc|6&cYf&*Tu=1F(3O6{saK*`lJ*ZyTN@Dhjtg!S+zFwNjnp!ZZ^Y?;roriF zX2dz4Z6>;HdwOtQI}hE6r8+p8*s143*SD_zEx+X8*TJ*_q>w>c` z7e~HJ^737Z?(=>yxDn{%(UqHmvkg8U-0i_xuP+66UvOS?e{c^3r#(M`K8p0o;Pe|0 zhW=ut=KC%BDAG5A)9<~FK8Ez2;LPV+4#$yiGaUPJUHRFAv|DicwV!c~(kr-b=)T49 zngNm8em{wOXPnm#;=D30FW<@N-owB6_8zBz@sTfkW8wXLV^Kl6D)LQ2KQr_-q)pFm zTj{xOUpy{^rY`Nm^^xK<4e{<4l@GF}v&AR1_wkl`*y*uav z_5^aBfX}PwgR*NKlS;Pokv|M*L$r`w62}8bvo;HMbC+w+yU^wvD z)_3G6RwldFR#w&nIiscz0L4*}<-0Ip($OO)J_fAwm2oU*4~z!a2X_ML9l%k%Avhdg z?oMED-yK|Q(r(6YwHCb?w z75G8xnn|&|*}0`ChuaWHvGOaE-bnKm`gQ*yE8DbCzI@(H`XZyei}?Ld2= zAJKml`sOUZuK(2k{wMq;mS*X`#;{wKYjvB;|X5Q~Yn$ zt6sZgi51J9FRNs+HnfehxyW|&THDHbNwIz9js?z3is$8=$2tO~0?0Y>bD8;^+cOVod2)*NQAPqe`*;*k>_fReU_4N=KHM9<8tejA z0P`7FoeOM>l|asXtATOYdXRA!qZ|KS8l3UhbfA0`m~R637*MVSa>K!OK)D;pwF6%Z z{T|Xnw)H{IDIW)3cM!M=C|83**CiSFDfD+uE&czqoBR8vMU-{Q(SJO}a;;}3#pfR* zmg3_4(~2zGR&&pq-N~49V;mGO-{`2gSiW{>*-G);>Dm1#e{OywlyXs#JZZ`4Z;@;} z?9}#_?|8F09BYm(#kf`O03fgEZ!If1h@W!*pE=7o!J%*6e4;Zhg9}#J$ zLv48@;d69~^Zg^$PSur#!5Q~wZw{8_;S3W}8xUJJO4S&z!aC`m&^8WyIDTy=y literal 0 HcmV?d00001 diff --git a/host/CGlobalSettings.cpp b/host/CGlobalSettings.cpp new file mode 100644 index 0000000..c1afa05 --- /dev/null +++ b/host/CGlobalSettings.cpp @@ -0,0 +1,218 @@ +// CGlobalSettings.cpp : implementation file +// + +#include "stdafx.h" +#include "dxwndhost.h" +//#include "dxwndhostView.h" +#include "CGlobalSettings.h" + +extern char gInitPath[]; + +Key_Type FKeys[] = { + {IDC_KEY_LABEL1, "Time toggle", IDC_KEY_COMBO1, "timetoggle", 0}, + {IDC_KEY_LABEL2, "Time fast", IDC_KEY_COMBO2, "timefast", 0}, + {IDC_KEY_LABEL3, "Time slow", IDC_KEY_COMBO3, "timeslow", 0}, + {IDC_KEY_LABEL4, "Alt-F4", IDC_KEY_COMBO4, "altf4", 0}, + {IDC_KEY_LABEL5, "Clip toggle", IDC_KEY_COMBO5, "cliptoggle", 0}, + {IDC_KEY_LABEL6, "Refresh", IDC_KEY_COMBO6, "refresh", 0}, + {IDC_KEY_LABEL7, "Log toggle", IDC_KEY_COMBO7, "logtoggle", 0}, + {IDC_KEY_LABEL8, "label4", IDC_KEY_COMBO8, "plogtoggle", 0}, + {IDC_KEY_LABEL9, "FPS toggle", IDC_KEY_COMBO9, "fpstoggle", 0}, + {IDC_KEY_LABEL10, "Print screen", IDC_KEY_COMBO10, "printscreen", 0}, + {IDC_KEY_LABEL11, "Corner tog.", IDC_KEY_COMBO11, "corner", 0}, + {IDC_KEY_LABEL12, "Time freeze", IDC_KEY_COMBO12, "freezetime", 0}, + {IDC_KEY_LABEL13, "Fullscr. t.", IDC_KEY_COMBO13, "fullscreen", 0}, + {IDC_KEY_LABEL14, "Work area t.", IDC_KEY_COMBO14, "workarea", 0}, + {IDC_KEY_LABEL15, "Desktop t.", IDC_KEY_COMBO15, "desktop", 0}, + {0, "", 0, 0} +}; + +Key_Type HKeys[] = { + {IDC_HKEY_LABEL1, "Minimize", IDC_HKEY_COMBO1, "minimize", 0}, + {IDC_HKEY_LABEL2, "Restore", IDC_HKEY_COMBO2, "restore", 0}, + {IDC_HKEY_LABEL3, "Kill proc.", IDC_HKEY_COMBO3, "kill", 0}, + {0, "", 0, 0} +}; + +KeyCombo_Type FKeyCombo[] = { + {-1, "--"}, + {VK_F1, "F1"}, + {VK_F2, "F2"}, + {VK_F3, "F3"}, + {VK_F5, "F5"}, + {VK_F6, "F6"}, + {VK_F7, "F7"}, + {VK_F8, "F8"}, + {VK_F9, "F9"}, + {VK_F10, "F10"}, + {VK_F11, "F11"}, + {VK_F12, "F12"}, + {0, ""} +}; + +KeyCombo_Type HKeyCombo[] = { + {-1, "--"}, + {VK_END, "END"}, + {VK_HOME, "HOME"}, + {VK_DELETE, "DEL"}, + {VK_ESCAPE, "ESC"}, + {VK_F1, "F1"}, + {VK_F2, "F2"}, + {VK_F3, "F3"}, + {VK_F5, "F5"}, + {VK_F6, "F6"}, + {VK_F7, "F7"}, + {VK_F8, "F8"}, + {VK_F9, "F9"}, + {VK_F10, "F10"}, + {VK_F11, "F11"}, + {VK_F12, "F12"}, + {0, ""} +}; + +// CGlobalSettings dialog + +IMPLEMENT_DYNAMIC(CGlobalSettings, CDialog) + +CGlobalSettings::CGlobalSettings(CWnd* pParent /*=NULL*/) + : CDialog(CGlobalSettings::IDD, pParent) +{ +} + +CGlobalSettings::~CGlobalSettings() +{ +} + +void CGlobalSettings::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); + DDX_Check(pDX, IDC_CONFIG_DEBUGMODE, m_DebugMode); + DDX_Check(pDX, IDC_CONFIG_AUTOHIDE, m_AutoHideMode); + DDX_Check(pDX, IDC_CONFIG_CHECKADMIN, m_CheckAdminRights); + DDX_Check(pDX, IDC_CONFIG_SAVEPATHS, m_UpdatePaths); + DDX_Text (pDX, IDC_TEX_MINX, m_TexMinX); + DDX_Text (pDX, IDC_TEX_MINY, m_TexMinY); + DDX_Text (pDX, IDC_TEX_MAXX, m_TexMaxX); + DDX_Text (pDX, IDC_TEX_MAXY, m_TexMaxY); +} + +BEGIN_MESSAGE_MAP(CGlobalSettings, CDialog) +END_MESSAGE_MAP() + +#define IDPaletteTIMER 2 + +// CPaletteDialog message handlers + +//static void SetKeys(HWND hDlg, Key_Type *FKeys, KeyCombo_Type *FKeyCombo) +//{ +// for(int i=0; FKeys[i].iLabelResourceId; i++){ +// int iCursor = 0; +// DWORD dwKey; +// dwKey = GetPrivateProfileInt("keymapping", FKeys[i].sIniLabel, -1, gInitPath); +// SetDlgItemText(hDlg,FKeys[i].iLabelResourceId,FKeys[i].sLabel); +// CComboBox *pCombo=(CComboBox *)GetDlgItem(FKeys[i].iComboResourceId); +// pCombo->Clear(); +// for(int j=0; FKeyCombo[j].dwVKeyCode; j++) { +// pCombo->AddString(FKeyCombo[j].sVKeyLabel); +// if(dwKey == FKeyCombo[j].dwVKeyCode) iCursor=j; +// } +// pCombo->SetCurSel(iCursor); +// } +//} + +BOOL CGlobalSettings::OnInitDialog() +{ + for(int i=0; FKeys[i].iLabelResourceId; i++){ + int iCursor = 0; + DWORD dwKey; + dwKey = GetPrivateProfileInt("keymapping", FKeys[i].sIniLabel, -1, gInitPath); + SetDlgItemText(FKeys[i].iLabelResourceId,FKeys[i].sLabel); + CComboBox *pCombo=(CComboBox *)GetDlgItem(FKeys[i].iComboResourceId); + pCombo->Clear(); + for(int j=0; FKeyCombo[j].dwVKeyCode; j++) { + pCombo->AddString(FKeyCombo[j].sVKeyLabel); + if(dwKey == FKeyCombo[j].dwVKeyCode) iCursor=j; + } + pCombo->SetCurSel(iCursor); + } + for(int i=0; HKeys[i].iLabelResourceId; i++){ + int iCursor = 0; + DWORD dwKey; + dwKey = GetPrivateProfileInt("keymapping", HKeys[i].sIniLabel, -1, gInitPath); + SetDlgItemText(HKeys[i].iLabelResourceId,HKeys[i].sLabel); + CComboBox *pCombo=(CComboBox *)GetDlgItem(HKeys[i].iComboResourceId); + pCombo->Clear(); + for(int j=0; HKeyCombo[j].dwVKeyCode; j++) { + pCombo->AddString(HKeyCombo[j].sVKeyLabel); + if(dwKey == HKeyCombo[j].dwVKeyCode) iCursor=j; + } + pCombo->SetCurSel(iCursor); + } + //SetKeys(this, FKeys, FKeyCombo); + //SetKeys(this, HKeys, HKeyCombo); + + m_DebugMode = GetPrivateProfileInt("window", "debug", 0, gInitPath); + m_AutoHideMode = GetPrivateProfileInt("window", "autohide", 0, gInitPath); + m_CheckAdminRights = GetPrivateProfileInt("window", "checkadmin", 0, gInitPath); + m_UpdatePaths = GetPrivateProfileInt("window", "updatepaths", 1, gInitPath); + m_TexMinX = GetPrivateProfileInt("texture", "MinTexX", 0, gInitPath); + m_TexMinY = GetPrivateProfileInt("texture", "MinTexY", 0, gInitPath); + m_TexMaxX = GetPrivateProfileInt("texture", "MaxTexX", 0, gInitPath); + m_TexMaxY = GetPrivateProfileInt("texture", "MaxTexY", 0, gInitPath); + CDialog::OnInitDialog(); + return TRUE; // return TRUE unless you set the focus to a control + // EXCEPTION: OCX Property Pages should return FALSE +} + +void CGlobalSettings::OnOK() +{ + char val[32]; + CDialog::OnOK(); + // boolean flags + sprintf_s(val, sizeof(val), "%i", m_DebugMode); + WritePrivateProfileString("window", "debug", val, gInitPath); + sprintf_s(val, sizeof(val), "%i", m_AutoHideMode); + WritePrivateProfileString("window", "autohide", val, gInitPath); + sprintf_s(val, sizeof(val), "%i", m_CheckAdminRights); + WritePrivateProfileString("window", "checkadmin", val, gInitPath); + sprintf_s(val, sizeof(val), "%i", m_UpdatePaths); + WritePrivateProfileString("window", "updatepaths", val, gInitPath); + // texture limits + sprintf_s(val, sizeof(val), "%i", m_TexMinX); + WritePrivateProfileString("texture", "MinTexX", val, gInitPath); + sprintf_s(val, sizeof(val), "%i", m_TexMinY); + WritePrivateProfileString("texture", "MinTexY", val, gInitPath); + sprintf_s(val, sizeof(val), "%i", m_TexMaxX); + WritePrivateProfileString("texture", "MaxTexX", val, gInitPath); + sprintf_s(val, sizeof(val), "%i", m_TexMaxY); + WritePrivateProfileString("texture", "MaxTexY", val, gInitPath); + // fkeys + for(int i=0; FKeys[i].iLabelResourceId; i++){ + int iCursor = 0; + DWORD dwKey; + CComboBox *pCombo=(CComboBox *)GetDlgItem(FKeys[i].iComboResourceId); + dwKey = FKeyCombo[pCombo->GetCurSel()].dwVKeyCode; + if(dwKey != -1) { + char sKNum[20]; + sprintf_s(sKNum, sizeof(sKNum), "%i", dwKey); + WritePrivateProfileString("keymapping", FKeys[i].sIniLabel, sKNum, gInitPath); + } + else + WritePrivateProfileString("keymapping", FKeys[i].sIniLabel, "", gInitPath); + } + // hot keys + for(int i=0; HKeys[i].iLabelResourceId; i++){ + int iCursor = 0; + DWORD dwKey; + CComboBox *pCombo=(CComboBox *)GetDlgItem(HKeys[i].iComboResourceId); + dwKey = HKeyCombo[pCombo->GetCurSel()].dwVKeyCode; + if(dwKey != -1) { + char sKNum[20]; + sprintf_s(sKNum, sizeof(sKNum), "%i", dwKey); + WritePrivateProfileString("keymapping", HKeys[i].sIniLabel, sKNum, gInitPath); + } + else + WritePrivateProfileString("keymapping", HKeys[i].sIniLabel, "", gInitPath); + } + //(CDxwndhostView *)(this->GetParent())->UpdateHotKeys(); +} diff --git a/host/CGlobalSettings.h b/host/CGlobalSettings.h new file mode 100644 index 0000000..d961c61 --- /dev/null +++ b/host/CGlobalSettings.h @@ -0,0 +1,47 @@ +#pragma once + +typedef struct { + int iLabelResourceId; + char *sLabel; + int iComboResourceId; + char *sIniLabel; + int iComboSelection; +} Key_Type; + +typedef struct { + DWORD dwVKeyCode; + char *sVKeyLabel; +} KeyCombo_Type; + +// CGlobalSettings dialog + +class CGlobalSettings : public CDialog +{ + DECLARE_DYNAMIC(CGlobalSettings) + +public: + CGlobalSettings(CWnd* pParent = NULL); // standard constructor + virtual ~CGlobalSettings(); + +// Dialog Data + enum { IDD = IDD_GLOBAL_CONFIG }; + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + + BOOL m_DebugMode; + BOOL m_UpdatePaths; + BOOL m_AutoHideMode; + BOOL m_CheckAdminRights; + int m_TexMinX; + int m_TexMinY; + int m_TexMaxX; + int m_TexMaxY; + + DECLARE_MESSAGE_MAP() +public: +public: + virtual BOOL OnInitDialog(); +protected: + virtual void OnOK(); +}; diff --git a/host/alt-ctrl-shift.png b/host/alt-ctrl-shift.png new file mode 100644 index 0000000000000000000000000000000000000000..3067b3366e1c20447daec5cae0efb93363e2cf32 GIT binary patch literal 30959 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 literal 0 HcmV?d00001 diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index 105de259ca6902495f5155eaab18f0020b5067a7..b86bcd55c0c561116e03e4fe30324823a85c2b27 100644 GIT binary patch delta 74192 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≪Wm+DAQ+tC8mv!TSh)Pv~)VqMfOb_=L8bW>?afooRVi zOO@iRj0#Vmpm8KP>0=J|QsvO6lsxFEwW+VzsYZ%ZY{yr~u&-ssZly}GgGxz)l!+NUsjDBA| zqZS&F)DoIXj<$V}ihto!o{;cc%atS4{Ue_Zu;w55{BryphIXL;hYHIH8==7;`D}znf8?_Pnv~6t3SX`q zp;_4#z#l6Dv?zlQEr-VwQ~V~W3aKsfCz41qG^K?fXUNOK^OY>i5*F;6S}cA)p;ojA z7hZ|jkr+%xC$VlK@g~Dib0Dmgo>j!bwk*{tbAGyfpmjQ=`Z%_hii9W`3Fr5 zKvNWnSmIOzUaCXFoRH=f*C!HN7lB-1}XDOXlD<3TSRQ=ys@en(Gs=@E9e6Z+K4K-LWv3OV~eX3Cjt4tH4-ex(;5iPl~Sa(W^ zF2p<9)>g5bCjX(W7ql%N9XtG?v3zA?j{l*tiIKn43mhmYNfZI{We@ z96yTk6Q@W@MpI6|Zhu%iwfvzPMwmz@gj?b4&WKbcds5E#;q9ScfOuPTx zWp}8c1Xc(}iC;hE>5b)1$Yi8kO3`@Er-lJ~XKOZ_vwKqI}mPlL7Xw{TMbrEqMPZ^xZ=|z7oRo`7? z(Rp6d7hXw4X50T&g0V6AOpl7Ub=l z%nfY8Ya;@&1eKj)(}05YD&F8?k3Ws^#~gn+SP?BZs}phC;S&!0bi zrYuiOmnUlF@#DvjQ20lW9;(U%vD_ESJ+a)qd-wL8JGXD&F1mgDmRN3z<;IO0*RNl{ zCYCE=0R^q0K48$n{MxW_W2X)syj!*M_3`oX_Qp*sFE6i_w6tj69G~XRnl)?Mly8dS z>FMd=fscnfE%fTf#ytY1RzS7k4>eFP zWBGD?GSkynWMp6%Su0j#tz4PS2D56_8hk{+6f*#?TelH_H*BDoH*Hd42H@OWK;5x@ zJMcubX|rk5CPL5y&$^&cmMz;Z)&W}SQ)+a1dAl*dojWnWJ>mfO?b)+W93zIAzkmOM z{rd~@^9v3fC@3g6SWs}Npy2SqgXr!EK8FtvSdeI z9-1l>Mwu8?GB__nP|AUaIGCy=A*f@xs#YF8cz`*!fB$}1(zvl>Rg%HffE~k}(5?hV z0)QKJIsAr!_D{=y!NB|-b9_(}ruu>Wd>HijapP7{n_-g_mXnv4hmIr+5~|;g;a^@9 zhB^jj4@?M>xk_S?FaQP$bHwnxa5tE8CyyWJ$B!3h6Y~{t8ju+S^Sc~i`#c(y4C0Ph z;OF7|p$^OuEGAe|PzU#AVgLYE*usEoad9ymADr*0lP41s6Gbp^S=rE6X6DYFJJFk( z9C)e`kO0Nr-hTD!)o1}-W62pXV8D8Q_%S@pv7<)|&z_w$ zX_5$r$3g@Tj&*6*u3Z>7Ffe0Kw@Iwx;rP)qA!cS~0Dv2&8r%R3L|vy&o!75lOE8!m za0Lvpf8_-*P?(kx3LH9k@Hl_`IJ7Z&@?;SWTls)z_wL=WJ#`FhdV&byz~0a`7I_rh zKuYi4y{lBI5&!@OD4#!nMlTG8ItB(n!hjW##~&1o5K20E;>5q_&rh8)MFg{M?OLp7 zSk(Xq<7EJFWm5wb6o7$`8aZ-gTwEMPr>Cd)_U&5?O)i&1#fWiWFtE8jd-lMDm=sE5 z;O{U1xWedB30DM9M~@yoed-hzmuXX{W@cs*!j@HB(G)t>zyJygvxE;HKA_X2q$H>e z!-A|POqeim;K1X@k3)Tkg!=aF3nGJYhZnV>j)B1d5)2GifPsrSd*;mLOP8ikpDu#I z>W*+^De>{~Jm4~e_!9=e zKw&W=X2QvnCt<$ma>k4qA{ZKEY~GAGWADCwm;y`=5(YLYaAn2-fo$Kt9b7hi_@Dcj z-Y_7j3XX$e07_Ocd=v&i!hm700x-}K7H>2+bLLDD3|4EzXNc1F?b`>#V?xlt06HtM zhX?$F2k4Zc!40JS-!T9%D**rU#S7>NCWydz_N-YV7#1exZrzGC3w<#d(xhM*cy*&> zioo^%4Fh1X03Y%^S6GOJ3;@Gr&f(TAzQjQ=A^aB%stvKzc1DiEO?s<8*VmXJI0Rt0)x)zuzO4i6Ept3~zH-x~3FG+w6A6M2j%oPQz zDJ#$szFy`pUxxYKyL)&3{P`If00Sg+53zeU6b3H?FiNqA`!EJf@>!~hLLHZ~NV7#X zXO&74v1(`vPh@0iS|k;nb;9r%#_o)O79Y zRq8NAp8?pTMvcOi5EwJIBXnQ2Puy*YUC@1os(oeSM~~9Rj~_=c#2SW|!190Q%o!RC zo;{1H0jGh52D9}d;y-wKwyIpg;wCOB%zH5m^eQf-n6J@-AKC(JA%cSFT{x^uwYFF|tF~7&GgaT7hbMz$TzCtg!%r zf+Gl=g4&(`$VsvoNJpN$JZ1F-{sPXaRM>a4lP10P!bWu(m{H3}FP!!05 z-LR_)D*cH z{w*56O+s>t_wn)ldl4)6`TF96e}_Q%k<0z%@&JE-sS9UoP7Vv-7$6p~ zAYnyQe7^z0GD#P_{QQFl4j^sA79_eFiCM4X;(~NSTqls>!Okx-G7`Rn<_nhdsWiif z&+=u0&jOV8}!k5T8t%2*fT{X%1o*P&ux(bmOG1a~7jBQL{i0D=CIT z^^YA1obI9p3m6UxB{fw82fi{WEcuhJo{$6-BqaY1MI$Gr*te8*U!mH(!DFkscB2cFg z)YHmpC=dbBXlw6YWHx{WqLlC=$bw@*AO&qP8R7=EQ#KSj6Zw+dHg<8!$q3t5L18)L zGN7oYB!j|2GVHz>6aDix+2#wga`X56=|Hw5MT6)N`y}E!i}c z9w2Ynz_!2GaZ<$Mh7VI!i5Od)?b`uDO32d*%k;-m)=Y(BvYKiU`;UVM58@8OWb+mg zVsvygq6|W1mzIVr`b7MKWEZ;0+Na z<|eXuh`rmkZHs*uRVPCYc_J6e(z87K>%U)r&!S5CL+mVBfrd~J_}~g;FfF=f?B0#U zHI{trau^iMh7d31E&&A_B2k^ZQlH4@ zBWsNv5w=PHw?zY!Iv_NNqLNDq8ps9(TTbkMOHO3UOku$?Vc(dKz>eH0nrqjt9fEPC zKCu*H+a*b(%o_6znQh0{5E(NkCNc>MGGlNMYzq!^R-c|&foR@e?L_2vOd=GO{Yz{n z8FeTcQqh1S=}%pG@O;cCL3yk&=K>Fhf_rS?AVtJPJT}AaFh3=IVkP*CJ|*!nybSE$ zMaNXAE;@KE6yU{`?!RzK31woI0#9gIScyI{KgH=O2}k|r{~IX08WwmucnFr@fDHu( z1~PZcycX5xZ)blJ2U{I01dPIiyGDOVi^Ds7LWsuw0a`UfQ$QGohtkP%`vFUPGd6u zM=0*BsRjkcCZ)2Fb6^FML>kdqv8JL@ynb~|+7SksrNR_CXj2H`ag|;O%LV*}Bt_aSU8qqmqg5Lfv zI%xsG4URyu9fmG3Ns&$nLH+|;rG6qa6IXh;BuY?3q8Zwt8_X$WlHe#|BY*m15HX8K_GI>jE;8P#{bW+5<%C zYnjFkxdSUik1!g7gyJQfR&U%cB!yP^huSL~) z|2}q1cvlJxT1AxH3V#dL)zanI}p&;SYQjJvD-;m%6;4K5TO05(6vo9pH23=qU@FA< zA1#viz(6o5kh(&ojl&8I3QmJU!TS;!8Q8f%I1CMLP#6@52+~A<*ha&^FkbASVZnI) z!{6T@YQsHX!KMHO89UU3`Jvw%H+ao$rvwG^g==7EI@nA5i~59*fK*^zh?3AZ^a-`0 z;6|FBz=!z=3R5Th$}|d~%r8JI2?+^M5Sh0>@*I1H-_$!%B`ObHUl8j5TK>;kgOOy|>q1=fWy31Y$XXpU{}A==lJuCV z!E<0%!j(a(FsI(Vd&A%`8l->mt_rgGK|w({@Z|xR=}?j#6CAEgcG4Pv8$1uCu_H%x zK=oNz2lQDo z!9w6X8Z>BtgF?L90Gq=Y(Jk!qPol#Dz}5gwggC>DknqJ#Wjz>($TRDDJ9LSK`R<)NP$z@~PXVbwEC|5SF9n1B4=f&ri0051 z?2TCzuHZtApaT(@Mem_3gsSb;v_#ee`}N61R`iQGR<=WvAy0*fR*COuSzxKV%+ z)`=O49^n1)mB|Vtfb(E@(HRDcBFasC|4>7XYyrR(J_OMYl!-}-H4FNLIROM-t%nf7 z`V$nie(2C4^amdSmk0a8Av+|AC3Wf2rI@EMv`?Qtp?w}-z(7@un&D8lC?#P2h3 zG6@}^A!rh=bnDiwAmT9;w8%sPi-Ka=3d&eau&A%npz?hYbcxY}4zofC3N3VF>I7<> z-2nI{UNkrjH3G2YIsh1ZgF%A^p(RKSa=?KlCN^Y;SCoK=nLn;&Y7vj4z-{1)M=&R# zOUz100ET!0?_UE2#j<`qqz2La2@0ME7tR8H7w42%)iE5zobdmUvS?7$qHu!=fh`qY zyM(1N*TA$$fv5`dWr)WBg@?mO$VkJX2M^#X00oAQgJZ}*f`X1AK?oP(#!z4g7z*yu zI;ue`tf;#v;DG7l^$SFk@L}+(P%r=?3};IeL-K_eeF>_<98nvZ#Eio_il&+NAa>lK zK>sMX!Nh`rU~U0Ww{G1)Avj;gK@na_#oJ6kBo#@E>dpf_<4FdV?tkIw*qp@mf2t9~ zM}g>3AZQ2?%EYWhq>bqbx51!5hG0oJaH9@|nLqk^{+xdfxxi-t6cAz5Wm*)5jA3f1 zQG$XSK*7-A;o(ei9tC#`rNT$xcoOH72*A-jw8#K4D9|nj%tMW69aoqyqy$ZBs1Yzx zm~jIrDx;u3pn(kFJ^)>U0t%Xfc+oWG9qthsp)%03!nBAhCK4_Dix+4P(9kg^YxnNm zQI7yKPNL!F0Ft4_mFW=I67Qh`3&_$8P{+&6pGg&Xnawe#fvzS#?dYSAzssf!f@cKZvKCV!c-_JQvCg!h=*b+4F!t~JUpBNWJ#CLhY#Vk z00r+Y&@BwzywajB6{r_OfzY8X!1_BBCKX;1i-sCiLZN>{pO}VHfrd2H2)jUmQ@|Ay z8L*%as2CAFRVUUTyi$Of0X;LklIWQKSK8d)0ZXzgLyc;p16Wotu^>aJ5WWk8g*q`M zakLF6a2Cvk(DQEz%U{&U%pX@~QUAA4U|ASCyaNzGAk5oB9@}&ITo^jt!W0#$OGbhs zSr_b^S++D885E|*|EWbL5_J_aE%Hp0Y%+>kq-vB3(I zC5+G?E9#R`5*?GChUiM(KUALqDizYdff;?`3VlL|n1)atyc;qBP%Pdi!pk85gedke zP?+>2C?#5?_FvjDFdXWWQC)Tt6xcYrhrhrNUJ(t!CfVC3ur9315X0|M0r5A%@FmeZ zlZ=LOGdCqoMs+AmFiedl4wb&0N{ggI^&8OPZGi&=0Qv(ItT&Jm<|otuR{3G|(`qh){Uxx6)9A(yf*`8L3Xi z0)66drd8a)-2xoo!pA75Cnf|=4_MM!ldrFlr}Gl z1yB%d!<67G5byvZ-UCD5@DzZ8V=^55pf9Du_|hpibu{Ww)B(YGB>T}6k!toy8iJlA zA(eH*(_F7qPy_c65pZA}SU%Acfe`8Ir+fE8r8r-}W(x(Qpr6Bsk)b{!7MxQey@@Nr zJ?!KWBp^|Tg4Kl;9EV5+J_>n))2Dd)n+N*a1XV$91O)hWteu#jm=;)4umy!C z*_*HsB@SNb{$6Yd8$;!94v-5MKd?O%?04|N!bg{3B;G`iN#~h3)u13A2BYjo>1FyY7(snRs%qitR+E1=WLavzikl# zLFde-00lzjVZqo<|H8i%h97$GQU10DQ1F3Nm|$?ALx0RKT0A?DkxZP)26m{fdHo;gDN2L;9?5K>u>{^7{dRQfNhlpm@H;pOG; zl(VR;=k8ErAZ^>cPgMJ%z5@pg=ovp0UkULY(zDypo^h5V`V8%D8G!#sQC#Dm_}7Rm z@vqo*%z95FC@MDDd)Hu8wd_4=;N>OHIHfWm<_y-vw$T6U3Dzh^mj z(%#ttg5}iWfG!UX%((BdXwscg1zM@i`SRyRrdH`S?{mS4+%%(#)(xsxTM>73?tlT8 z4F=Sy*CB9b*6~NzJ4WC7Ha@D|uos;#-LhF0*ZIJfkzd>1>ac&zOV8V$!y4=E*fOP2 z|8C2c&6&QUg3t7R<FS8!Z7`QKXPY*@L_Ek%J?E0DN zS>ArwSM#s0KKg%XxnTE)di<@d726k{zM7NOy<;n{w!LOo)%DqQIDqocHrt`Kie+K_HVs0W3X(qF#CFUVme#4dgGCbf+rdBmHGJ5ZqY*TflP0bmvk={BQxjHnzrKjhpJj)8x{a2c_GPd%2 zQ~vGSR!jSKy=?Kg%X&Hgy2rkP=x5`-<3feQ1HIPIHniLI&hJfft#JVpB3c{u=o-uw zx3Zo;a{QZnN0I_owmH5vnA_6YrMb?5O|h?bJ$!INnC91JwtQt9GLKX!cg!_o_~x_? z%k3t)S6D4u@S$#l{E45Jm~C>Z79Ltp|LiEgHgOduelA!cpY^j}bBpq1egc2Cg4O=S zFryv|bPwXxYf=8EqHpbzPuNtb5tlgQLdD0sT#ffmh+X38I3h9jNZg&tt-8&gk@_wH zZzwFg|7K*toraEHCd=n0CFOd3zk8>>_59!(vR%i|U35LZzWn$>;pJYnGhL$B^-*Eg z;IW??n#?)(>wDoWUHO}oW$pui);)^i6 zIvm}#=k&={?H_jeF*_@9SM4SjHoI;8_x8`P3!4pp6t}m(*NY#xCz6kh1+0IUw;0o^!l-+P zXXt&aCHHm=e^_Dk==(?KQ0 zH)`FS2Cs^B#&$9IOr}|ezyI)I{xplP-;U?>IQF^U=6$OgcG~&+ z{e8M?*8lUwV)m!#v76@pxOk_EyJyd*Ej&C|AAaBeW?JVLyA^Ln*K6J1e7p9CofekP z0ZFGk7iSmu-QQ)z{{2~Ii(3|azjrFA9GSV|&c_=Ak4?}jf4teNy@y6TzdE5oyG`GN z{`rS5&d2*f^-~jkT34@aZ57w;jo;xP5B$#!)>>T8C^FnWu8qC^0iy(mfqk!~j;rx% zO_yEg_;Wd8!FiuHZ_CyB+Wb~jta zFX-3Gt?&7+I&WYi+N)VnOf7qo;p-4>o%-^z@W*b-ALww;jhF z^0{(-@6&$onzgO_Bk0wo0rHJMuj|X{6w{sIH}6CoJ_n2}D_qR89kI-EcD+EGnj~>$ zK$6d*o_;Ia%%027eOd0c%*xMciOWl^rl&lMEhn!CKVE0q8EcEA9v_}w>fN{R+pz`S zv2)YMZ*QJb>-EPIp6{+awyU>($Nfu>EIftDca0pFRXmNx4s|Fyzp({(Nt{7xCpfD_r=2e*mk-gLk8R>OJ%uaEpYRuH4dnkljM>HZ~4N&tKZU zp~A=J+7ouR)b$CxHtpf+u#MlowBWCFT1-9+9k8MIq{i*H5ch%AypwIFuef9Spx4wH zMs2l!jH^Fc*KygI#)|BS)ggLK?9H=0E4>+M)~L~$)^%LpTLV`e zOD!z))zxkoyMM#+_?(#&+xNB2&b{K*wCVM@o`$_0EVjiZ)vZ~vx8jSHZt>5jtiFrD->WYt3T6>0Fv(LTWW5K^eYES&O^~d-3xkZ!H$2$)mkTB|W zhtA7Pj&+;vXFc6tethe_!06HEllwM5@XOtDh2y!qd||h)R=WQbEY5v6YVqc48;<-q zpIp$r+zMxN?Zt@cj3O4XI~X}yL9?;YLonJaq~uIJ|1hm`r)CMb=SK^ z4G3PUJN@0jVAt9K&kl7B?OAW&s0A*2`NOlawJo9C^7|dN&97(QT^F_9(Q|cp{_MzptA2Xxr#X{LR)ui^k|?8dO_2Aw6M9$kLj6_ua3rGdHyPa4hTYkGijQ^)^PG z&8j%TsJ@n0n`<>c?&=qJ>1DfeBRaL{qZl);#-|6_y3_Bj(;pg~!1uaaloqjkm)7fB zOAZ~_mX+|R!>ICB+TGVw`98akOP}W_W;u*?xgQ!-Zb0{*F@61)&AOuh-HNw=l;q@a zZ<=HG%(^q096f3=VdL~gLsLAj1zG7HieCHGapShQQ7w!5%Ax~<7F~InUAWuFa_YrC z4~v~nota?wYn#o)ej{@e?zG6*MQp3b4)2|Osls=Ew^hxnojIm+`E}@U;oAmT@A>}S zn>I3*Id)pOZcKUqvAgb{YgqZ^&JMj5P44jPhkOVcwlRI2VJaQRgVpH?2mb9V=#^i# z++&gXhU7)>-!7=Qt!ab4G0u})RcV(!)7YfP7sC-9wwk@}=O46t)JccIYnLjVZ%FUpQg&_}3YAZ^hMWy3xD0;@SR)_+4jm9~SgWU({z#L?v%sS$dN0#2q`_ zT-@EC74zn1W)}-QrYm{mHeNsA79;0nmV-{Iq+%!rxq0^CU!Ue=fbYp>n99OK4T{Y zpE|O&-{&FTcB_*g)$-i^p=QKLp9@AGrq@&7#J+UQ#;YVO{> zdr)!O2rVedZbau zd4Ga#UR(Wqkc=SBN& zTpWl=s{ostj-5L?Ejj#(|1~D- zLZ9PXXG31kuWzr6C~i}&!bkfr#BV;^X?fD->5C>;FV1l3+9$$cbnIhT2#bq)a)8Xzp-Orf6x`c80Sx?x%za@^sAMH(e;^kX5FPE&*FJKjZ>P$`uFIuvPac1&%SIk zY4K0t@=GrUSABi0|K;H!@L^Xr$6n#>EXdeL&gn~Xirc(cynUxz)x94RlVkgrBYX3O zWlw6~KkVA}#KuqMH&1X*3%%d*_SZ!}I|c+ytGHoxSUPRH-RjZ7tpPVN>cUzRs zr$mM|3Cz8fKK^T;&fh9cOicgr{2$vb7R`oNInue!*g1-NM>2h<4ZW6JHwf9431eGs z=GQb-B*$Budk*o-w;=7e_gxrYSp063ekC1zeta5z?qHT}JCnXhrsS;kNS&!_xXDf^qAJAdgt65 z)y+H-&!2CzZO4wMkCGlayJG-3tTTO2cIn~JRLhqO5wz!~^(>N%l@sWY!-mDlJGN8#6?(pUNymo0*tBr&jorfeJr*FR0YscWvy%rtqv#fS}J+rRcn?FCYZ0yz7KL^<4RzEgO zShd{T=By`{yb4yIzh24T^oftj>8`W??ZVA>u5a(xb@tuM9S7=!pX5Eqd~8^A#$-ig zvllK%=uEHf_5Iuft=^&b+4?j54rZO7w5{38omxwRdtJWqWPHah=Ee;!zV=QYwjnEj z*ss;2JK5G%9GqFJ!Rv#So6vT5e=qO#nKSA!&!%FsO}7iHLRQ_MTia_cCVU~^?%avT zTXyW&u_8BD53f*XEU->5T)BOFtudco%14ZFAOB%}?AZwBo$I(-OW)%eV8B9_wj`yC1Kqo%!6L*{)92>_St| z^<3sQz$YQW8JnW_6`r45*dXVhLJPR;`$_!wl{3zKdE}m7F=kPw{mc{nyUp%4XwbPu z)10pi8F15emsh@1Z@pXl9R@ENOePjg-S{fmeCCP_3~$efS8hwX6ngz?{_m4*XC3ex z%@sHp)O$0s)9MC=%UjIq@3#JeaM{tg2j1d5aOaL?<4!v>PUQ`_(W{=9H=Oi@p-roj zk>6hAeYow`|0+==4|;jiGjeh?@44dfu3gtVk^E7`)h(yX8i&jyZezEYXQw?obft%W zSQ~w8HFRI)|7zJ~)Wcexe`YrsSFzdf=LgQ6)7AFoiIsM;P3GFQ75iP;bm?2?{bP;Y z2NwA?G;of4Ke(fAkk+1Zr(fL2LjZYW)5cx9jGqj>zF=VPxNpOCeJp2MLxk4zr$6yJ zvv*1LW|<2nhW2W9%gas6V`FI0%o~aR%T6tA-ZrdS&20U(QI#;u9s4ZZH|Eodyu2$} zp0(t+8jiTNn;$mXp%TGJ6aB33dhGCb?^|Wg`EF^csV+GiZAD0%YPv!Q!`etqUK^zpow^*+74 zHEYwR#Fv)`i}JFw zbz*-!Z8!MIzjf2n@c)5A9{=&nmzP~zX83oSll~;8oo>vc0c|ckdeo~*_3F>6Z5}>g zh5b_7V-s~MZyEX|V)op*Q)7Mk81mxm*~LAh&n4R=9wK^;`efPt^R=K~J#Cus`}rw9 zsi45S!bBo(^ZKaiz>JkEwNAwSyC{8=&b*c%)`l%vyi~9Y^GUW@c7ILCy39^H5v2L1IhvfFBUm{53yP+Pd!}^B(>QQ$B0|)IXmb zIwLOLWVo%XPO%w0?oq@1&vM}%zofAE&D&E=zKypxd7QAzY*UwgGasHx=@A#_=T*B$ zl@oC_SBIuKbuL^Lvh2M}?3vWNsdeTDKJK*7&2x6O_38gOb_}WY%XUs}y>hF@n%I@k zv)z_8D*RDQo$;&8Y+@GW^geI>{Ye;qunGSqsPmpZ*;f~tw(F>KHq~>IpLMryqZRsc z-mK-=_P?4L%<6V&UG(udr&SAEwb2ilHViUbjDOI;^MgmnPjjO4HodV8+nai=Rp|N) zr{A_Nbm{VaXm35QANJXps^`q3H;((5n?A)xvFS?R*(YslR_wHAc-2??zctqOCOxVg zOR9ZrQuUU-O;0`DvMDy-0;>>RSLO`M+3LBLkE(PkrOB0d10JnQdujJLu1n^N%RamO zwpQ9&_lIZs4tJN09{YN0!yZRw)*AV6VY@+3FV?%&X554M0b2&%Zi(ftnZMJVi;Ekc z3bYjv0od;tczaX7?o}`PFLTC-;^MUbIh%UEFyYz8yonKgTh}-@ZuA1GeQkrK%IczMkcWhd_cG59A8!i}zz`+bUJ?4Cb zVSLfvwWshe<-l8D0c*MZ@=eYy-&Y>4J<}IsL?5Z{4M7%Cr9u1$xMuM zT3bG2+d3ICLcWN)Hr-u$e$A7W1AHp%-m}Ni)3eW*C&@Ne^8>rWh`xFjrh6qd8GE-f z)kyr!ofEK8?mlRcF2X%`&(qY0IrXVOW5>F8NAhQ`=0go1yLR2z;xi5Co8A60_obQa zfOBE?bO(Cu}&L(9aFddB>bz=fkrrSS2q-9Xr~7M9(2Z zYGQ%j($cD;)#opT{M@kdZ-uKlJ<9Lse{JH%j(PWb)c&^k?6(_vJ=4F{ZT9?&%g+h5 zTODdv_nAla_I%i#cKSL&iy9UnCp9&%Xmrq(RsAk+DA20jJaPGQi_X5~jUyNJY~kL; z*}a-Y^ECm!J#vhuPMh|oXw0i8$2N4#t9HKk#rd*Y+8m9RJ{665gPfG-^>ZEi_3qtj z#E86?rWY&guI`&`6k~Gf%h2Ty&U!RFzr;1O?!M+deWFZ@JU;Wm9)VbKy?#6iJAeK9 z%&7WP`n%2gCw*MoCWG5-s}Te@i(G;E&;#{^Z|&zy)b4XaND8D8DStIkv5 z%|WNT1LTi46;9Hf2)k(h;bP?H_p80;T#4n)U+w#30nqaci>+o_Z@t!V_>1dP0&TD} zcof3#o)CGUuwKUFhLwNTnBIOyyZ&d={|{q-9TsJ`wvXeKbc;v~p-6)?3^?$ZCkJ!SthKH_&+A%u(gzG> zW{|o-JKdcL0VO{(`Y~%mkXO7XC)UWtg@jVTuJd~gBbbf0l1V&I7{w`BJA#8b+j0ki zC>S_LMTsC36x^!m_mTXY=LySwhPs~SrIcRw_BEQ6DlMX7cY6JEjMeV?8@zTvcWPSD z(=|5{oodQBaJC zULPQ+2c!-fk~qf=Vv|=5t8VgB;x#1Ncrbjoi7m#it0AKlc*Ue7v1&Ts!#!`Gd;F!S zk)QS07mU%AqOIdc;)2Sqo251YkUCY6n!@Y-wVU@eecwyMQmJ@~{yas-y(4}EPM&n=g<{ZSV`Bo11VMN_Ip8RZ;NXtAg?eRKvV8+cf2k6H|^ z>LbHJIzJpEU~zh9&U!9Et0XF+F37I!KWcUMF;&SfkG}dd_Im{y@ISyHyQ#sPOh;<` zaRn?z&h9FUKG4El54Tjg{4WB3Xuc*rW3XcQ7wm|68863E|CBfR*d>E7CUN0v!cb=^ za!wqF@CL_+IyY*p2lD=-EWC}C`H)769d8Wa8%y08bJCNla{+fu3a6%})W-*?$-Lq_ z3`fP!DygqQ(8Wx_m=q{76G|R{7!A+bwXVn6>TGt!y-grk9#P+CM_bxaMW22(L62vT zQ3tp7++OQ^jr2>WVTiglM67uJgQb83=9sc<9p13pf;Bc2ir-0V0KTrw+ig)8%_ue8 z($sQH@k3MW*Ge}6Y;P`1m8zl3H8mW6=uw|oNBpH!67Y7UkO|OIL>8UU!R*{@;7@)q zRArpXTbB$U5H7NK??=$4FEC+N8ZrdivWZ__*2X-qL%XfBpccHb*C#mTt4i&ulVdwrbPM`@Uq!c;2Wn?v_xS zi%i5mNK0wlw&5q}_P{)4M!NInjI26*_V&Xg+0P$eLuPkezFGL_P1VGSzkNn5&Y#@Y z*$I70l=fU zEjwI10B>7I1YNd|K*zO6vhMSOI`W2GYw6SuSf@!nBL?|#Bzzi?FfBGaN6DL!&!Y=f zZ?!4G%==&=-2sfM1~-?k;DKSOlJO5Q$P$A^jX(I{6N>OeY_GzMG>Tn4z6E4jif})! zh_m@SB-h`Cs!x}zlER3yF0A^t||%CS@YRi+eo>Y%o#+gOcb^{I_K{CSmDBL63_ z3g*nSqslSrw3vT5-zp&VO&m%8H91$D0KJ8s-FVSiM0ogT{JPmtuj|CX*^He?(npIy&3S0!uX>GxRU;tfQrQGrIt_>`gItZZA>4tyVQgQTM1g zB#SqMZ<4+U5q{zmBMjAZnuB50F&+%u1OVpjC}b$Zdh7>$$-0DS6I4fe9p%YbNuxQA z7@kqD4K7WTSY^JNvYeBXEf1dp5eF!6!K9kN`n-2H=OjRY6i!(ETYOzC*~0NS`!^Q3Y2`v*1(;{+9htr!$-O}(+N;K=hj4XoG_Iy$VsypI%{ zdccDC1dr<@&4(Fyz6QV&H`fS15(TgNeyLKqzpim)JUxbUU@dHEWh~Ujm{GK8j$U8Y{;7e4Ijfz!7 zmHkD%7*WqGi7)oo35Kh;G<~_5u)%`a!rs2;p|ZD*fIhejpd74-!SV!z&7+;~?{4;G zRaHiAM-y+IznM$8^FG)Y0NV0%LP zDXYkuJk94+yAiDEJ;i>591H)Khmr;64-XI=ca@W4 zRY>mhJ_2B^3Wk2{pn&`{N|cs(T1Nl6o1_l_vPuWFqMkt>Q?3W0L>$*^z0YwY;!L@O zU6@%v$UvY3I|zag@xb9|K5qfvIh_;O1Qx-i&6h0PNx08sUp^yN#STJI%vCFW#N3DZ zL~^7wl=71!>NS|E-K8N+?`GUvu5>pEfOF%OWtuxEC?xwbiytqa#W0UG=RI@h5(dn$ z&+Xn$GdNy+^>*l^x{eS=eE{@VsIj~(gQTf>23(kLJstIM9N^{7XG$C;>o=_!V8H#! z7{ta3q95JEDik!{2gtX}qPJ9F0+v?<79Q++J}0k1pu)Q51>^fD1%^N{Rdlbetvz!X zEd0SipIfEyocQJaI7^9qLURJJvI@R3E9btM;JL0&jSV>nC=aE9V4&xT)p@4$6E%_~_r4frcof#V$wMVt=Tm#1B=%PM|lhI3ynQwp&l{~OsmEex))TFfh z_9`g-g_5pLwbi40f)jSW5C{TebRhN@jaaR+G9_MzeI8oJsIi@?fl@~XIxB_JhsS(t z$^d`)wgaqbZt0_CGV1EIEv>AcW-$@J#Qb3cr#mkObO0Wdj{W&K2+s|GI$mJSccvAt zhRN;t^&^n|#W{}Q1#W+2!{-Ap45G0Yp>@Uk;Y)x7^l%Ejg;)WR6`0J;cT4YxCew(qN#YH@{&b86OxEC>k|n0j*&9 z*gEQ}*!-w4ej?9Mse>w)d4o2 zO?t6{H06%Lr;eefk7%Dyy!1ZKr0%H?Uv|3@Z%sE3J9+gqS{=NkKopz_@&e<)9>xyR z!aAi!KpDE}XL!3Ddt%FKI!R9S@PExk2&a-QQ$7Ma)WXnv3tcvM+%e~R_dYEW>D zh>anR&SX1jP1(T2=^ZkW*wdHepIYt**pXzVlq5@D8U*ZvFTb!}G6>9sEx4#f_cFajf{1;D`QqW6ymL&)+RPB>1$i z9aF&%{r}s-;~@cB9iZW%x0{O9NH67j=Y>u-Br4@t*1rVk&i!`eE7B*SN< zAAb1YI6=k-G8c*}l?AHVjvqdJVd~D1B#{jG_yY6eLI4hSAIl4#gMIr{ky53JuYZZ0 zHF+MHt=;*iE6>fiUTWt5)u8-3^{w4JU+wV*`a6fV2Xhn6Zc4Sl&o?@*+v8ui$4hi) zzG_!8yeFYfl6>4VqhUgf;Yxjw6V6Q=y}FECihEET(t*T5pp}$3#$H>zYs&;V{gxYf zq?=$Efo8M6mTbS*5!^ZjmTvXB?sKnYKD9p5eD@>O_mX@r7;ih!*1qZFO;fD5`SYBX z2t^6fY(aSJs)tShz}DTSX3~lnm~lIQ7iFA19wE-cI@NH{Iv`L=z~4OQHsgu`aS*d` zPY5XWJt^J;OXNYTt2r44$EXVjuz6GCRy|m8*dvcM1wziB zH|&h;R!``O@3r+3z4+Z3>Goo$OyW*#9L;o1qt%F&SF2b7$V#rqm4x?wg3v~@i}OdI ziViXA%($~y2RJT^*|yx^&)M2JCoiVZ;BpR%-UZmr*w*T9>!SxIG^${(A}brY23iL~Aw<^y2UW_c8N`vpIKtP4dT(@}t2kvonwpv4|;X zY^96Y$a{vWy0_Q`orIY#L$%&cf5u(@<+=T};pS`}h*CyvxE-%;{z<@Dvu`^S(aD5R zcqL3aj}*$Z8Z_ikJb5o-Ai0#S`_bl+^#Ce@&N#~9JAHzSz^sEr?Q+BmH}}S6Dn=^q zEi_aMv!608)4m*1=vlLLpBxYF(rqA*`$ewCVJ$YfV%jc#K|K6?GgOdr#Pf#6tA2Bl zQQL-Hx5Za%tL>UE8B|MgB`*#ST1QN|@Yj}Y?J6AKMR}cWkK2yw0uF7p^-X8L8bHx> zR6v5J`6?SVFvXv9l-krNz^`!A7q!akzCXiXTep2j9woy<+2fyHOU!LsJS4cjV+YD- zqonchuV38+U!Oa2KI{%7LnU!-Kjg22e}DF68QdkVQ)7WuIjqb@J1p?RBRTocve)mI zO)uut`131Z_cPUNug)<3YS6v;$ia-%F#6-FYwAF6w{r;%w zlAr4K*8O5Nfxz4>)2+!cP&YUXF4e!5x;_vuyKD?3_5R3INlK_4;rC?w6@b+@p;3u}H zz#$vy&=KMd3iSQh(ABTA=DFWJH1kc%RQs5Ld5{{5X zq@0{^uRs<F%{tZtgzh^@|5;1hv?4tb(q_DxaW+?}jA0!J4m~YSvdTOz(|w`l#I;`X;BM z!0ITj3#!FTE@Rt?KxH)zse|$3Yke@BXPCiFyFJc#m!@*nm~?AZNa_Nn!EP~1VaIJw zYuboJ&+L~-TZU^U#^)ZsNxfIfM8}Eg=B9$bsuY&sNu2^dN!`xe{(X|qEe23?tJGl* z^0hzTSa&G2K1@64++)?hkUR4y@TMi>qda6U)|D<8j2;Q=2RHbS1|~9@rY!+-TZqRhe`c-nDtE>$nB4&&f~CGb&ulTg#oV zPxXC?X`(&PJzTY8AEw4tuPGv)r6tIEk0#u!U;(Is<1iJu7hR~8+#fh1^0{$JZH)bQ z(G&DME#1!-LqgidlIO42_WD>$aZe_Uc26eeIc5l2T^yn*_Ok4Cde3=daJfi8Z1@$qdGO6CA3)!c7zsP< zrG2p+#?#KB-h92v5#l_d>#lo_&POE%s-4(hy;=;QuZF~%+~i|=hT5=|{+47oyzp4G z!2FcZ1trvmzK!|>{`RcNtPTo-X|l9AZ#CTB+gNLw_MP|dE`L-o4py{=3;Au4XCdU-AsAv@*2@8PClzBwFQ1!3*_0@`=Ki#$lxk8k z(zxLcrCxKaY_EM6ar7}oTgy?4_!v_T=4*GpE#u>i{@V21+PVA-s@Q081O`4#N(I&C z#>esc%c;!MnB_2e)-Ps8ah+k?riqW$P4y0vugqJ8Lu!F{rm|1^CW;ps>pmyM5@EbC zQ@3x{?t46aLQTm(J4WR){A5n)#qRJ|eU6qLii97vk+gAhE~AQb{utC_H&-n!wO)rY z>9fL{vdUX}M_(r1>*vp&l(_E>mF|mNO%1t@m#hzbYOP?{EJPjAmg*n>v>Nqat_%1p zML`J6B^+nQlt`>6tc(TY@uWKhO}yKy8y5|jaAq~oN4R^S7K||!OJZCbA6EPG9~2I( z!a)vM**)Y1Wcmi|iP;&19rc%$qOE_T$Jev*KK!1JS@Ydbe)?Amd$z!%2>A9yDZys> zKG#H%{e>y9E;IR%hAj`rL(1BrG~h}wUg|2ssaz*I(iEFHa-~p9a0-flSaDESP<2di zEG=i!Vdz(dVN8CoCO*~Oo`Uz*;zoD_OWuGb?gbc-SRza&@bq) z7CFu&IE$E!Xe(brmq{|?5W_(T3{JRC=u$!(c5A%mf9#PA#&LQPIg-090$)*t7vK<~ z*XE;d73Q>X?9=ote$l5M#oA&YZB=-)r+-|Ts%57{@2$X=XPVISvc+8C*((!kCJq{k ze&+!-YLwprZr6c!y)Wrkb?MtmLYp~dh2%Q3#*xDHLq2;)nMdsaTCk8e?^BpEBf%pB5JCKi0s1qMKuf(nA@fDV(AEfQwfzSjzBl=kKMA=GR&>^* zT3|8SUt$%D7HqC~+|ZUS70oFx%b(*|zOciOxC0Zs$G`5n*bWrjrp#62xyrhl_Z=g> zT=cJ|C+flSdoHuBc_Zsnd!*W)L&ysknwyOtPrI#aW;56Pv(J}+@(p-)sh&M{>t#bu zr@rfbm}Wukln7@_;UTJXkKDs>uCIu#@^?NPPb;l7%)d9cd0(uF-Ewo1&&0-B+r+>_ z9)MTfU3NA$NVa%X@J=+~Fx5M$T2eJ$u87a5#3G_o=m;_c_B_%>k}8@+jWUa!ARi>1%?isQRQv z>7!!Fsj2~kjJ8s^tbpEU&GVfoAN{NS7Jc_lB54;e!*@HYpJ*z%+MU1M-2+=ZaCdig z_nZ>ih(?p%sxJIcq$pq2X?JSAp4JkY{t{l>XwL46EXv^>yiD;X%bPWt(L%dM5xJ1& zb9W(!I$&EDG;TXGZ2v>R!y64}ggY^xqn&8k$0$F=N$&gww^=Q@*4K*#4CQa8`KeiS zxQNcmEdD|roc{;UwZ^X&7nXvO8CzEnEVPPX!9mV9+G$-W94&+v__+MS@ z_^gxRmnIv$iJL<0f)+~3aVHVYa6pYBy=J)#Nr5m|ccGWQ;ZD6zLR`S!r=+IYX}-ig z%pXl4WpfRr~(M&vnocwUe4Glp_g*zH6L z(?g9od^Y79K-K5pVKzkaK5Lk70?UpVl=&A8#oW^($22a({%wV$U+Kr2+qxU=KmLUE z0FxSswV&0w{@Z56ACtaTHIGFJ867J(q8@=QGvXffcr%uswqe00lF#tv!lVfeKknt} zZL%BkqcHB&Z`)x8WvkQ$OgZyw#X`|OwR7zXF$!mY4HyFc)K2CB&G^@IV-MaQzTHBh1|<`ZzJ>4AG`X#yUru5Hq~;AE<)P;Z zys@kKWgn6B#6YqJlq>Gl6G^>5kt&Lz4rF#XHNM67N(e`3a6F6vqiUgC@V6i8>3+Cs z3Jo&sJm-n#t>%ezF65m9OONZPgCv)}-KIM9H&f)sPZ%u9|kzisNJkl_nr zcF|1q|6>i{cPWL})&*K;?^}ffhOfdX&F#~E4L=d;^xxZNp0kk^xZ#9>Yb{3mufs=Q z?bRz5_F9()d`mZjq`lvuOS&BmxRE>Imf|Dmel<8YDg7l0ucF(GO%J(0==;^13+n0N z{Y!r91cEE4i;%*}t}K z{c8>LG$0^;qJ~uWFXhN=-=-vqF+Vxs*MvTV?En2lF`E5H3Gz`tZuwe-Y%tlyU_{u?yiScf&)6Q>Nisxak{4Mn= zP+v0WhnyN4Dc&B+r8uS>^*+OdhC2CgWdS_Qky{VG=$#XpY7dq^EO}3HfAs%|`;W%L zAY~+J)Z0jb;;30Ni+;R+59xq9ku zuM}F5`{=tX!o|>5O*1zscmG+_AB_V3wu)nKp%{AE^C&UcU*8c`&Isdp4miONKkcb6 ze3Gwnh^nsd*Y)r1{@ap@4C8ys@hPHYy%&!I6jq4dNK=n`YB0dGoiNy12tvp$F03!S z{#o9COLfh*PX^I430QOU7)hRJEsHJH?8kZ}=gR)C-4A~Zc}O#4sO2EbNW7$8FE>6XF3gB0K&e;Dh#mT~pdAi$W`Q$N!h(Hvx2#En&7 z{+C36dy)Lx(C&A5aLE5CXSF}hCv6*x$0&f;{}_HidYh;eJk(L^W}Wd5UE|LKE4g>FUY$gcEhevac*kQN(8I$n~6g$4^7 zeQ6sT$vL$8->xey#F)s3dnC#?6#tZ|UXs|foz-@d1Ni;GH0k-gM_*~m-@g8zE&p+s zRcpwZ8w#wJ8tBl(&vC+B$*=l&BvG>zR_pJGD9_jww=O6^Tlo*;`cFx|p(tky%#bdz ziPq$BHmww)eVW8>O0xQ2>MsxcF&Md&-!@iuces}Hm>NTbR316(PZX6CKg-sUVm7@y z3a^0t-^%}`M^EO3fgeVC)ziZ7E>Xm*q@NjHBDf_{B?&5$?Z?@Xj1}|)BmelqGU7jG z{b#8i$oGdIkF$I$j{vwNy<+=bvldMibIf}x@a8RN%x*GQAywlF|F{4ATi+&gWy>vB z9G($Q5Sog);{IUaZCWiVzDtSjir~Otf06ljg#7OliCQ;Qajf)(bs^8D^!NRweJq2e zCen)-rmx6lR|Gtv271&Px(mB^%*D@F*B1Ucp8q`5l=$JFt&VPQgP%+rr#aQ>=@Xf@ z=Fh5Q{vQsZt)p^1i9Jd}MDi7k;W3=$A(aGgpip|C2BT8u;j`F(fBoO#EG-21b2A2_ zDAFdDQom#8|I_~dRz@&xe#jpj@^}?SFd_qE{8Zp!G{tM0WH&CIFXW-Vs#&$N3cbEU zx&!LweXm>__M5$G!HNm*PDW+34t?b~_uxJU`5zVz#H%l}qZ_+^=^@1H{oZ%_&co+H zPgW;O7E0tJX%CKX{}|uDJ-f;h(IX<7lnLlTUw7h~yr3C;^`ja~OHjyv1hPNLLWdfh zxa){W&@uXVbV8R0`3Y|&w=4EZHAgfnQ=F)jJoS3w&C))Q;n04L;4uLq0{L37Wii-P zE1WW{VU14+_^rVOD2?Rs{EW$qWQe^l=u!TymerwB(+ zsANBe5HEgT1;i+y2T}UH%yNjY|KFPPC;t2i!Eg^0OS+^g@$*2 zRak!7(I)=HN&Aar%Q^)N!pX6J&kWRnTEYoDe1oDyvA#GupA!iDl=^?(_TK^@{*qsY zdK%h@A4k7Lo|r33+~sE!z>>Mt*I;Fie zh8JFwf|j`I_ptkrjz>@3VCpkDPb;?>mO7l}f8~0hud+^idWaz&>3vy0xMOzXFa~tF zc(z(>#h2NoZQZ?;+Tin&^FtccWJ50RQm_)_dH5;Px_EBexE#2YYvLxNn97o_h80g z48yyqtsAg?Ig84FNaN6oyr>xmK#h;qv|s)&ySxuWD$5_dL(!PrLr+6DF~lEOFOz(G z7A5H|6I#Kw14ip|PWkn}&ruErQKulo<5SpF^Y~YC;Fr#rc?StlCS8VWHN?|ir$jL6 z$c!QK5cYqk#Gu(LrD}S30Mz)2A^EP`!IXBrgP~fweD|&m5#yu%YeF;hor!wls+a4h zaCOmX-F039!J+$!j~zRoZ5@IUE|2DfcTV34DUHEKB>X`#C2}uBt43Pu-|7I`FKgSW zID*Sr28h(dtDk2E-^wI7Vj(PRs8_Oa)1TVhb?rm&D?JTPV2bWL<`Eu@HS@f!ZGco=S0Lyjp=f4&X~xvvfY{1>}b z>L6Q!;a=M?w_6{GFH|rCRxlwvaD`1&@GLrFR_&C&TZ$}LK|(T6%2&ae9EKDLWXN&Ws{f7#2UvIJe_mEo`2&>$lfpb1N_GEL_X6x4Y5==?=669Z z1ju*qfjBE{6i*3sUVM3Oa1sZGXt;;fj5k*5w;a0X+#&2B zjiyJSxi2iLx{onu;u9Cdj47MU(p^3UR=k(rZQ^E3$3B2NMjYFF&CJx#Up39+_zWMV z-(A}!+t!e4$v2=MuIkk zMfzQx*LQin5#ep^A#Bfr(b$A_WuOqBscmZ@jx{76hWP&5qyc#yUEJ?5!~zi04(a-G z*0?TQyHhp#90#w0;&ifk;+UGBZtG-m&G?x{z%gTw`oRGRUIh4uxO)a8#$k6E@)@BW9_6xcj@BNm zoNo`Dq!ryRu9SdHs{!X*PcW8qh_zd8^Em4-H>5==C@^dearDn$x`W)c+r&F(MF+|I zSr1pMi9)5QQLm!`%6bX>Iv)>_X+pNMrd~s8-Pjnf9vf7A>Vnnk$e9_Ob#F6n#$Lj z9WgS*$+UFtoPPE0>~|yp8&fSo?uqg2DwQeBh8npy%*@q;w~B~lMl7|0@TVvqzWf)C z%Wu-h`Wq<6Lty8Cdp$T&dNn2V_23=qkpKFb=pAq*I%j{~ZI3%r;&pd5KQFwc8i@^G zI$m}8!C;sVa*jv!`yi|y=t4T#3L@x_(W7S>TU`}T!dsp3K-axwhyVxSj4jNEUhH4r z*6%hAe9hb7h_%Nbiud|nX|%cn@}4dpB9qq~w@Vz{bg!%$s~ubYKPk<&i*r0&tr^|| zeiK>U2f{KkYJq@PDIdi!BFt|wfCG#cX z;<}Sj{LB4`expbRs z;F&paYChMr?*m>)=icIV1`_2wV^|bk6r#!b{4m~{uy1!a^LN6N?D(b6TM{xntstCT zFF^GU&VCLx>pzSJzFQXG2SzZYTEc88uU-g37;MQ=v;G<{b!U)G0! z6iM6SO4_6lAeS-JZkQQSG`C2L{EbgbnBF16Ttd)as0l=GZ(apHDf;9~%D97P?;&wE z({eNOnsFzTE&@{td*T&veow#8GVW69=ys4`c)$auXclCqnYF2{;cjvxXvFJuEYZxi zV%bJkjwt(G_wN1Ra0BMC0M$dH>n`Iocy$q`0PIvqE7FAHW~;MAMMxr1Wx5s*`->d5 zS`WAOp?q?SYNoq+RH!@SxP9H&(#hznY zMq@P5?J(x59SXSvhgLO@NfLZAx2p^c;R3IIW9oC~a_gxnBy~Bj$`q0)@>KI-2JX=jF5jq6J+Ov24I9 zNIy0l)7>spNw0>~IjwSbb#S4K38&~!KY*C(P>TtAP~Q_h?S8`n-@(bu9soB`Fy(7) z<0`vh4Q1+NTj||psk^dA`$Lp{*HSOtGOA<6IK@Q}#%b+YhCt4r0!g3ah6yC97V*+0 zqRzEQSyAF%QZ7<>KVH5^h&nqgHotkClRZa&|HLwT5Y8f7ve>)XA$Bmi+3y#z;m|p3 zE&i6JpTPGZkZ@vi0vwML^3G>kwOqWfqQRUtPdxuQY~%BLg2>`vi;2PrM^DxmeD$*r zigEMKsrQ+mG>|XB*h9RMy6?SSrr*III(a}xbJ4qZzw8dom{tG#$TX*a-KFo+a#_?O zREEZT0CM;O;Na}-k>Of9|Ayc7Sa)0Mo=bkxSFG0fbd`V*iJ5lV5Y^^!@_V}08v5~I z<4-;=W}Yp>Xc-;E6R5BxsEs%2{#;R(ArQbtkxxHlpCxXbuoRqRsOdeV7$U5zR*Xn$ zGbEKs#liWRduhR1ZCf)K|G=wo(zxs5_}yO|7z7yo9ohZRXV=)Vt6g9;zN7q^@P`0Q z1O2bt-66-_$jtud@f14XYa50SG0}l35JqrLDew~yU z<}#$3R;@C|8VEvV`o%_-og(YOa{KKda6qeFaC`^wr`Qo(PkAU*KC&TyLWDGXPvI z=#HZ!y>q<4kVXyd-#S$6>5=)I>vyj%nW}dK^Vb7q08Q9FI0@M`cXzvg7ksqSgfcxz z17C^82^Xjd6)_7bH{A*f&}OEP-*u25K71%w20@Ho{&ga?O-$zlX(e{5SMz`xFvGmS zZfx_;k#BLC94RaT;(-plcwmb=gC`~l^I-6gUou{%2#$;O#YKaMF2ih3iWKwsLDu~G z8FUgj@MBcoJucUQpj0d4@E0#fwXtq$_~ah7b|9<6ww|tOa(a(J%$b8!4J!iudAZsbB86>PYsd z(_nF;B2jSeJ-Neq%p7yL?PT$NdBrgpYyf*G9giV20VZlDZfo!=-B-iBxtgX4p}R+1 zl5j0QvA`?}f)V+h**3o+^L>v$(8k4i7#CM(^L0T7#bF<2osBW?5zR-D7#~MZK58}^ z8P;Ia8I_U_hup1l0D>B1_GvDJ{m+=rf8tyWYdb_P3_~|}kRRcyP`4Hktw(hOsQBTy z;zRkvPCxt1{#BY~pS|-7J91(ZU!tC38_~v$W)_W;qIPSl3dXs2;$@H>G|G;PyRY+? zUuioc%9Fq(A#D!6p8A;Il_y{|abS+ujW=z_xDo8iY~Ojz?+X&l52U3j;l3a8TqSmi z=5~H$mTPQ;alqduzXn1EQC_@COIx3M$Y`;Qp5Tq_NU>h(y~_Heq~;~#t9&ut!(X-c z$mr2wcMbcXuq?eGO_sFDeMc9`l4%sig?96MCe)`L}pQ-9rYX>TnbU@cR(yqO$gr(5supW`phi zjf(YX&$vJGNQuX|K5RCbbIh4?U}&{+t&=md3dQYHz~ z)65L!tiBoR1MJI5eodN%1R|~C|L|)peqT+=p8*L#`>qvvH6+q|Bf+o`OldJov*v{qb=4%`%djv_?n}{{|9% zDnRL~MA=#BmG=j7OGY6{!h4u6Yx+4hvc5Rj@e5fbcVB^{Q1qnU(cE7*=q^$HX-n@5 zQ#W|j45XpQuqz5HxK%?~cDn%`27h;Dm~<1ZN1r}ow7r8)dGCP|TBVNP73w)M-YH@s z)cVJz#Wtg5T?j7Jp}l}(jH+bfmwFmN^Uf^YWsPiM1v%yQ<=xM6X@4i zzK~;zB-@-cwTZ%z)?YX!$TunZwlWwh{j=(C`uwR;|n(Rlo#=plSxH5+b-cXT-U?mT53W**gdm#`QL{P;cW z!IUV~T2@F{Xa{Dxew)W+b6iWRWxs4$MPGe?g#fN<0h}wBo!%hl>ws`!n1%{Ui`?>r zCDcYEE6zgZ9iFsg>mmfoOiL4hFR1bD%Vg5;^)E+yjk6~? z!dXj=438@Nsyk2wb*HfoB!Gtz@O?rmwA0|ZA3w@7Wim>tv%we=)!hm_U^Bn)2c8~#-YL#)yoXbP=LmqK90e48Y5DC0gq}J zgxmuxmM?@6p@lZs{CGVS8ek9H0ywcpz_EG~gK z!E8{aAEfs8uZY1nT4nRyl1Jk}7%T6?YlE+q1y^IE@KfvGq74rT9$Qj& zs4;F@JRE6`26GHl7_3C#5Z$mqpC3eaiO0c4;r+%ScSNy%q`OUi%rffBXLMBYxNaME z?hS#T@UpVp2D9inRt-ACA~w)mm@y#0^>4#$+EgMS6`3j`0Am36?Vhj{_VLmHkCC}; zx?G3E<$XP}a5E}1Os0ah30v<%=$%#^?9t|ZWj6j8_pR1|Yls$OkLD~9`vi3K^kJ7H zUhG!g^%^IN0^gm5H*+F`^fU7IiDrO1)Ov6pI`&}jS-G`1+uJc~Q-^(z9*MvhMXA!v zpFk6mI;=0CBdF=Ox*LvONIR0Bs@rtyLc8B^(h9DDZjZ50KL8Om@er%|gg zoc7*;Z8^4O+9}xRf;%xrl|nq@W25i1)y58UN}T2|i13r=7qgDG_3u0e<6LI9@@8&UKLwy~{@zO8)t&m-#t{P9qr}2YIk%`N>eXqM{KcAH?g_+OOnMqrF zThl&AmRhv-3**M*J0Rp68~zNK3!>qsQC@)9j+cQ;n}=ijH>`K4bPqD{9?0{nQw#i_ zr6!&89vYAeNkvY^2uqVw-*1g)WlskA4$#6_-0TQHke$*+JwY)B9brwAU*1nvn9PwwZZn zZy-aF3!YdhSI;5^ob)na0U{H!T%e?-nBLxj?3orpmQUqXah7Tf9eda(4Z&azfgc_p zRB;$6Cj>PwBs(ntlJH|i#{!-DT5NnJB7c38<~6=jW+B6^)&)$i?e~?rXVOR6cgweq z_Kxkxw_By;aT29wY9-h^y`vyLhR;N&v_#Rf=^BdOW=^X=7ds}C_%1?#^N=7VWKPOgfaxO4e;}Nc4aZ8_JbLW|*G%}O zLYvVrRK^@E2c8a$QBOaWz3(bePoUqW&F7aF9&#P*080U5ds6-fQYh~hixifgq6$v2 zEnTFfY2=COk=vPvq7L!pK;ru*TRMQ^^q{mJv!si*!Z(clPk$x^CIkv|;uP`lW4m_u z(li7}d+7%b#HhRs&%WShLf%>^^YOa`Ih7j}*lyrL>@o9kqf^zObuy9%_4UiQXY5CM zCBS7qfX(xRjbLPb0Tz=#PG^=doHWk5MRk%$FNsq_Xp#C1?6S7kX zD4Pp*3m_Nr#p)}Dwu~^~&A5$BK-)5B`y(oK{aw(epPB7|_mH%9jBcY3KaE2j@ic)K zUnBtVb#{;x9W}spLJjenl)&!==7jVbdoFiR=XULSyxy;vchZjyGT&29k(9ytg97S> zo~ZCb>TI9WR)-F4gt;WpWszLftM$@wfC6<)yMkn+W8>lhIUc?N=_gm)C8*^_dlWN< z`Z`-C7av~YRxavl+NgzP?o+&aON}a&_2EBFaWI(cbCdA{gyH*2(DVsAk5zwaktQ%G zZ-K4svm-0FbKe=$r$zP4t&^!^kK6BO3pnd|>$vvG!xlP65MJxDJjI6{*5ibrJuyfoUoC+$E zZn4Y0e)lk3NJu6!yZZ!1h+vCtT~;EE@`#)X1}O=#?iK;3W-InmoST2uBJUJt;!)&3 zc2&*W((VHcRL-nhx<^*(rgFc7=$GhAc+Iq2>VdYfagximy!MwBxVk2DvfcC>hX`I6 z%`ZY_y=naM!}5azIY?iZjml*p!GqP-;04P%vF!@OZ5z4;Y0jO2mw9l1(d!OT+`H7i z;zvHHXCK-K+=iMu+^R&GRzHM;Scg}YYfkk=MlwJzfBL%pC;2m*5YN65`kP3U9z3sA z$OUR&7dM4hKT~A@GN})Zt7=_U%SN6;m8^}e3MWsmb2*rBZ03lE>{9-)WmHnjh`iDW zSQqr~I_OQPaRi%ucehXKBpO)Pd$zi{OA^e(ZOd#@b-(2JFIOxT&WxJTzEBo$uIZtoAe|D0u{i;_ZtlUJ@~}dk6o@_E!Ja1U(*j!3C z^Ea(QkyV4Y@iMl{)|!rvh}raH$|nW=Qt`K^DV($wmESix!Yq*rd8TFK`qKZ9zs55) zJVu?y(;5uF%ZqUrEhxf6vctl>o*!-=qOLM0*iX|7^?iOA%%hkr6JnZ51^mqZO$>H- zl*7=`cfOD6U*u(Yy9A6e?#S$N=d)rEL^@A04x#|clD@s)9$VEG50|BH;k$p6Ad780 zO5Mlx!NPwOgAUc46}2gdWposBJ8k)aj`TCqZi^beOsKBB8Hl-K-EL__imURx)tdPm zPzT%PNJuI)3lzPfQ^EIP0ZzycoZdb_Wja<<+7j}i^gj*c54X4JwhPKALG4qj=QRlY zVvlcmA)lBa5IjZ?w&*N;e8y2^{MF<$4v3r5f9wtyE+Ch~Cb;h|gKWqo@|*9boY+6O zvYZ?XLtY3{Cn}60W1w?*5G*fcbRkKpk<56R^j(!vfz@x%P!{nDzzE1RlEhB+@5t^} zDJ0}~7+ll-1Czk{JUpB}EyD|lqdvU5r{gQ5ockWBtxT94z2Kw9*TRkT^I3`=HYn5` z#;lB$?#Vt)2>huYxEhVYFGGFGxEf})$yUHKX=7Cz8+aLz5?$?s#b#iSB_G3E28HLe z-C{wkQ%#~I0IDukb0XLhZDn}HJ2RlNSQ+$|Qn*_AhJBrdbIs${ zl8iov&~@D`Oa%5vsG5HZi6y^6kB!!5J!P#F4%TM-1w4Lr;n=$Y6#FJK);mnPT%=!S z-w+2fqD%FASk67ONX>m$UmD3Pwx9ce`>;Yjy}xWR?8ng5m3=8<+^YmfWWlqlSsmZz zeNFh37=%0M*6Y<*d$dzu(5jFK>`xo>$g?u-WWC?S_n8yz<$dnXyugpyOLiZ{NsYaYld}yfS?;Z_$YP0uDX`j|#m;4zb8;f3^Fa=dwm$k}UEe))i7gh~L zC%@SB{%rcxC=iw_@q#;b1SAl5Im?uRt4mB<4cAxC&1)g*dP3w4f=NQ%%>+UiBbLJI z1=Qc_#PLy?`m$j!vF?+HBd1H{5683=-~^dA6x)%Y&$IjYc_6ZX?adne_dBgTqu{_J z%eN47A%hf3*O!?64qIF`eFE!zk!oqou@c%EG;X1R614hp9fq{wcu$7>k%NHhRmd7U zcz@0Oq-bTx@xy*GF4~Dh)`Fq8AfUOV8OEmb!(FxcEzSFwEU(z=w6gWjZvMy=u7mN4 zCky=!zXEt?rF}|b)y@CEvd#i7imhSegp{O!bO?wvNQi)>ASfs;f^>_3($Yh>gv8R) zAxeiJ-LjN~bV)BA((#?ed++-pI={$v$t61YcXsKeG|kA zrKRdHgzJAgE>6^|9J^1H!XovI36OL8L`ob`5W#O{)BIY$3(#HwQ&`N-4c=JV^)tVZSbHh< z{yi1xEiTM2aL(5TCu?1*ficM5_g_=uLi8MBlbtO2Sv>IDbm0$0BZwjSJFyLzy_T#^ z$e-&g{JXML=BI(c+=Q)CJ zy~A}p3~wuXJXwniAVx}bnpy^XnS6|cnd0nsYCAzQ__lc6xv@_82f7|5!L^Qr1FC&d zYo@*!N-7$hg?y46ow#P~lV)Z7R-Eo;BJ;NfK>uPwWj9-Iq_mRuN7{5+IEk>T6MvyrH+C2+t73ntSP~dk5Ivgs8wghk~%k zt2En+G~?C)%Nof~Jb^JS_us!3356Rxdhnk3u>$STx#9SYQsD%};P&CA+$JAa^EF)4 zbl>4~W8oNwY-E#H`B#q!JJl@Ci}^CXC?@G=LY$I)k7yZ*Xo1^`7{Sq`7nFxQVYg(@}!c@5Q(>Eun{1FECn*Z~)_SQ0`u74rrnV^ld0Q^aztev8R@L5kN4scxm| zbmkfS+}8S)p59-(RNYH<~uW$eeRnrTvyo6O*44x`zm|O+8QKJh${s_C@>>{oU+@a#rjg z{vxFj3<7>CzyPDFo=~a{(&owf{p3O44J?dSfea=Zd_#>peb3MyKM>LOOhsL`pfAB# zV4Hb3sECoKNcgxfw$Wu>8LLZBm&>_vom4`+coB_GjE>+CzXK;QjM**jX#%C$c3;tr zV-n8;LWwPxK3sPPiHguGW6&_6d=L^PbHCN7nR2Hd5REsXY)9b}F z&0(5PZ{ysf3qL6;S6;PKz24WR3G4!BH%XTR-XGK^$(T~my~SQ$EqE24cSh|~{?e_33E85NKG?P~ zRR*0FzBkp^D2XpHg4}byNBC-@o6(NrsQ4_qs^%{Tvg3cH&-BXAVe>|^-TQP6LH*mG zS>{`j-y)6~Zw?JxAi9yv| z-X;6@g$ss)iTi!Q=3yje6B6|b>DSf=1E@q#NcHM8%(?Dzw0qH*`#E2Sa~X!Th?(Yu zO6oQR8^vOFgxS}^A`Vwk-JT6GpU~_xvV76K7{Ljgw2Jj9&&rfAa!P4fQrpg?=PHY% zhiKhFj~A~sUbw74JW&yDfTb)lha%x2JIY8P?vc5Pg%Oi|tw(9E8+pN|y3#nYd`JvK zm?suf`sE5LQp~HO2&Xf#h1xMN#SHqq_(f!H(sJsA5+IePa=Z+zaocZ5E~p7}y90o6 z+hdM~N9R!>6<&J_D~55C*F7aXC`dlda{VPin4&&&8ee@vA!w7n!YHBst3=Hli;=5K zmzKYe7|hGbTp|@xJ$pJWxG!YXEvT90f)>7Nvywc!R)HvrQs{(MyMWBoPBk^|0fxYw ztmiW`^APwg=n0dEOhnh`%^|%Z!>6V~Q)h=PPFRntMwNYf__4S~NR^`CZmB4mT_y={ z*!7jhkP|c#vvg`RD-YtijEzwGmsdP_G4E_g2J>@mp%2zQ??eqR>rGzX^^=3L2$B!v zYH zDd-6jvf{kgJDMZ$N< zES-~ceOB%~`Q;#fmeEPYZ@1eKrEs5aFrU}X8&^phANpI#sXSjITz?t!n2@!3@D>Fe zgVGU|`Hk)!J37PH%QgaFW)e7Ak~;!k`>X92`(Vxc{ydO0?nfZ<2H)) z7RTAJP3`naFVoY>Jk501#}Q093K`c0w{m`GUlWrcEDFfpQzu)LS>uahIiJG2-C!dC zwK6}}F_Bzo{XO>GzPL}?;R)3^KaB;=YtO}+QAt-bQTcw+do#p2&fR3utQm6}7603luW2Si<( z8qGp=+X^C?$(KoC%c_k(lzoB5&ETy_jrz8RnH79mdiF<$u)|WLu(i6d2KAR7c?-{L zBE;4@6+eDP)mZB&q}7i}5sY-|QCTP7{FIw>HB+~}TTW7Si@lVU2i~kg-}S!o(I+{_ zteW{X4g?)tFUe_yjTvM|pg}d-5`&v;9M_88^}0p0@rFW5vCeD_HnVUzg{fJ;!Gzh{ zYN3dp<>Z^8$>QO*UsuQ-G!)iYPg5(NZs!>bDb}!~Q+)2nLXZWJCek~0ir83%b$Ab6 zV26u5sf<8hpJCKbJ3%>6Oo}2%v-$M;^r81uUeN@-9lRj%&RwqeyUVMG zHxt^wSZ&`gqcCeF{UB)=n-$N_3T~@LE)*Pu5#&`y@d%lnj^^5CG+}r|b)!ec?TA(9UuE zovz@Q39T*~#C=fHQo-4UJvRH`*G|bA0WDuJ^JPb471SOfF@%Z0+j$|~9a5sB`TEHI zWJoqaN<*&KuGoWWfB$l^ctQs~!Dp{B-TY2OB!Q@aQV+RJ>e)s;X|j+7 zzp8#MDkhgyr{ zP;mT2@Iy^jAvLulz~-!k*P|`O>CKrgkuMRI6cx`poBw#c6P}g)60GIy2RBbd>vxrj zG8aVB_vb85p>ay~$veLv<-VC+a!RW39ts64pP81y@C?j1~#eMayWy!>x4FPO)cDqmDrhAnl zInF0v(yzg#u+Fg@Vb%Kjh ztK5g;h{|1)r(GL>$r6Z)&0_EikuXd&%7)PcK;KX z2;rspG+)KgF}?#9Wxavd2^BgT`qz!zG;p`#l z8Sj7^RHAl2%Jf;IU9PT(vNHKTPXp=VxEN_^qq;?6BQu8qNryTT%kv*2n6VyXrzBd#J z&1WA%)B^a5auV0DtG;L80=qtpQi~p&jk}5424YZrWs`Yl{2?j(2_gy?mkU} zOE_>++?Dlb*tQ-S)f#C(&MbR^?|;U-WG*^SDW!-Z-R>zcozrcF%7i7tAp)t1+}nMQ zu8}AHXM_o9^S*}Q$yH13IsyH%&hM|c5z1rzahxa#py>~Omsz6qw(d50bo*&oTmm5i z2J5D+Dj9RRO(rJK(s*0bMRq%xzLD2&`=@&k1`zjSkN1=>H1UR$DN>c`3&aZy;E_5% z5U&|B`*B%WRmU|d0f|zX=*A7%sY%F}wMiC5d2LKYiJK04+{t>Ohp(XzM!ht-^`P56 zbTaT#Hf*_L!DmD1QZ!6aPfjx`(=4n{XqFbUH{$(=AF&!DYMV3v2!uq}qfxt&_5&LN z7GLq85k^{%{U3(Ky=lJyVCmhfwc{P!-$+%l{?P-73FCLr^6nfVBs2uJpm-f6JfG0% zn63`b=y5@@soLn1YmMS6$wH2^D1CUkpY%_kPpiaH6S3(-LTT=T2pFO+F7(tM_%bjP z4&HCMj(mGaE$uqaePTRLwL!h{8)Z1QOAXoV>fhTDgIb?-2uBT>Fo)^sN0G^p=5ux_ zK+1)~Q7x*@0s~%f1e4-$pNO!jY zMquZKVEg07i4W|k&`zb9`1+#Vp63C-s;TI2*@doqx#nrBYGOctn(Q+BW4WjAw^ zwwUwDLszX7?vWU(WTZXu^6M)T(WD+XURWSF7+9EE(=jF zR50k{B64&*M!`g*JIIz%&wB-l!m-wX@)lb13bxNPxx zH>4tm;j8eQ?Quux08&J;srKxi_57SJ1M1WU4iuutao>^gRJo#0|mD2({6taQ&=e39IX)&d352ZeWi%o=dZY`Wjf(L~Xo6l)8eEvFEu=J9mqM?i#b zqb)wqnC6e!?MCF~nux{R2h`>)%WXp7%ggH4RU&!gC(poW4Fk zH!LJ-Ku17G)1SAUb~lJPXLq4iXTBzlIz`Bx;?`lnUS~pG#{Ap~j?L^+nu}d(HXYin z_fE?0ne++bzBD;qMX$bV7m8LZf*u!NpU^!2ocQ<;dLo2oQBI&zw#4y*l0ygGDV7xB z>77?HHhG6rhm}(hayGqpyn>Odpa*L+WwZ5i&HBMS3g<{&{KIfL;c7EXj8Xhk)}!A% zNoE$D#rN0a1JqMI5Z85tCUYl0m-vWQds?MnQtA$&f7wf3j&F~XOkMGnqh%~~%rqM$ z%VJ*9KpFUr>LCKI}Y*Sl3{Z5cRVK~2pq!DGH z*yBlhK`me)*;+rgl}LT49_GlT{Y~S-!cTCexP<_x!-7(D1PADkyw7E8x*9zgXq{U1 zBr7B$xP?Yh39t`u=80SR)oGOX(CHcg$YhjT*gBGUMnKd{;!9nD+B^3ZXrX9@9t%lW z;i9ZU{Ldp5*RW@Xc)ytEd!TA_Z$=!vomBXuKTgP2P8W@3mr8!}yP3 z3w0JD|DUE4qb^1d90U+SDq}8A)#Z#-@RH{P{2@TAzZX6#ClSJQ$0=px0mno!s@yt( zhcB~4e_j((TCRylsGSiefa%~o-igSI-J5(t#XE7=?&F;EZkFe&N56w`d5vNboj(*f z^T{fNjqWhz)P$B-Yngsl zeLkk{^oUJ*AkG6l;m03%od*o&G>h5p+^maWbj)@S*(6XF4-4zkn0MR%+G;+Z<%25W>+py`i$Krj?{dUcRYNG?=7_ zfn#hMK9l!6@eG39)@!*|u(o8H0P zu{~xWC5DERd>3QW4nIEvGAi(0H1!r#VL~0e^o)mHb~X+5KE+O7ilXJyS0B9t(}i>d ztUIa^)ve$NbLKeHc_3%BfF*HJIf^SyAu(Rj)L7Tlt$VG1UqcX{ME>c;KHxliwQZL( zsF^FY#Gq#v*NAR!=j^W@$4I+aPjT$1Izymspn3i6ltTU`hj_R+oA-QYNr zYLO-XxMvQqxjAJ5vw4S{I7%-3PHW}xT^lRA_*^UGK>-8)VzUMdh#V0ZoriGm=+A4y zsf>#-XEM6*<^p(TQ7ku@mwqiu)Ca$>a${#MYO&;Qck%5fez%@!{a9!fC7%p|{s-Ct z{PALaRkS|_C0AS)Q3#mDedLxbRo{uM|%IHu9$>56%6k=gDQ_A*m+ss!@?^84aYVCucvM1?)Q-d1^b_rr28X7MQ(c;S<`2^W`WG7rOsGbv z+35)p_rY&-mlB&@SPry5`r*(-jyo)t-GFqL{{_wfvZuY19AWq7B-$?#gZA;!%-_k< z+(TJIcauLemv>ue{bL2b0uLcA?kJXhYL)o%rBn;Qxg5o4WGUTjWT5HmpC*=sG0Xx- z(+a~!)s=JK3s~8_STOVDtTna#A8gT|x!%29`PrD{k;pCqA!(Yp!?O>qR%$SoquRADgvWF&JeKZOqqHLpH|7I)z}4{4dnf-$rzY132Sh z+*xv}mX?Ri?2jhHm|*v6EGn|ZDlRpG|Ho+&!nF0e6%eBk-6fE^`?_-{vl|g-XE^es z^8A>SY+QeZ(-5B4z_)PohVY8VNLeD)gE$}A+=O3gdh3S2<`!484iXIm*rr6dx_s>TWh9rW*$ zm8~+`xffZfdBs_NvieumiE)9-6n1WPaAg-6#z_IN^U&5++{B178qJ3KaXKCgw!|qGG#C@aC(roURchkO1lLxq>PQci=7zxSHN$ zh2$f;gBIbHItIteGn^7PkCJGp?SPtl@ZF-;N`;cH<$st+|6nsT*&{BQWN+IEv+UFY z5h917nc_P^HSNe}eW-9Lc(R@XQ0+i}PXC{yjLAc|>?vB7y&CXJQjxqvt%gaUZkV^g zeo$^x#O|LHfvgh4AcDJ*5mtCRiCnE_u+$n)xk^k5p6}h@%kXsPpLwHy5xfF;S?q2E z*K$UG^&>6~U7LT(B}fQ?X~rUENbJg^e?>?8bD4>gGZw)VyqC&M@+y%*!;D11vGF=xy-tGRiU>_k?TM2z;`lm!m%kA;|HX6y4nZ+! z59*;NbLJCf2AC88u#O9^6|A%qHqsW^mtA|t{Z~!8y36|n+R9@^EiVk_f3^-ZGWV>y zy&{%e7jfgSCcqzTkF$%I{Ve_uujHqW1W~eS;omv6joXq?_Af~OzRms5Df!~;1Vy$n z2+UoVc#j_CpDF%qj6~b9mH4R`9^gU#AzHf+o&h_&c3R%DT_%9+{$%xigUg>*ncWi4=ekhdizfcEytxKRr*G%4RkNH z>%*Hje$VATqtzwYNyGnZ^&#ig0eo9Z-B*coGL4@(`?TAPh_)7gearkZS%J6*|^qf7-wt@6RXN0)hf2dwA&SeCo9f^9keY6r-BA%CfPp^%iAN&{3 z@Xxp8a$zRmHxyCfQhY8-`25IG3+Ij8)7-8Xx!vX}t~O+U*b;!DNLD-Kd4ypSV^PCE z6*&UkgKM|hNp5+#UaI|5N%c~1S##XmAi|H2J^tMnI$Zext8S*kZSyZz>)&+=sr;6w zNjWBS5nYbWwh=Zudpim|@-x6TPW}!Fk=MsosSnXwk&dQDA_1=`KiS(tKP3=T#dA60 z;hZv9ub{*dQ3Tbs9tM7@(W-8%&&`a}mnZ1Rrpq5z5}8Ob(S(K~5&m}9_`{7v_nZsX z)5{mF%ZqNC|DXl`UKc19hf*pmt2W=%Sa?9So{=9k1`auX=sv_c^Rpd=h=)L82*630(i z2@P+Gw=O@2=>8(f0V!l9*f0Ni1@7wGqr!^HemM}R>?&l7zwJ0NwXG{E>0jxL=z^5k zbb`1-!<%LO=HiZh$ZpBMfP`twt5rwQE|?k;M@@u1C>#h?8%+R$JM5=71sw0gfKhfb z-+cyv5&?ZZQBiQsxgNfncK{HzMBtYG7Gqg2nQoX;5uDRFh`^yxyXx7yF;mz(04mo4 zJG4>^2QEG6^z;zyAM-5yAy6;ar8&@G=Pe@$M*1FD3t0%N{INl<+cu0 z`sIWh_EKNLVrPhk2V1k8?Q$G^$6mGmgkgM}U3hHcy_?djc0sL{0Dn$8AaC=7f@`*$PX z=%(pshQKE};->Vn$6-craScy%y4Tnp2!<|p5l*O@%Uq-?jt{86c2xN)+r!!OnHFm z6++YVHVAmzk7;?mjQHwj&coLMnRw)`uh&T4vPQ|-D+`;(78U2}u6b(d+70Ws)Mkwo zD#)<(jrR%6@&yIcQfxnqX8Ip!!{>ugDOV>4HX1HHr=|g#TX|K(+HF3q!rJ%efwk~x z2gqHjEWUkQ-Ip>3+K`XZQ6o}@tW9QHytEzol@h>1$XNRp=L-c;Y^8KnE| z!SoKnRN=Qxb{3725VYb1`@VD66=hA#1#;F9+qV1%CZp`M!}+Zro_> z)u$AZ0`p;CID3PpCZ}&OF|l(EZjpv#`gCi)map5(_WeESAb~+aou#f53-Y%{qZ~h< ztz@1_mk0J|P4+)6y|Jrzs!7JClKSkYvHZ-DgYL&pJ{B|?@g(l$eVd)hg4z-KE!wq< zRp}@<>KVq*4YIY|4$7l=PJEV3#Pl%ctw_Uy?w}M`c7CHiT{1bmZ7Yg4Z9@PJ#&3-yVq5FBP(O`x3qy!4Lo-~qQdwYP3BusQRALY)>42>>@OX#L>qqnQ^@T zQl|2z$WUj*?j(Z~k*E|mubevMw9&03%EGs<6~1cxoU9&mVMD+@e8H1i3B2uzuIkLS z9jfxrKdb4hLcPS^w9KKI?L~gY{t>8aT`?>;_2o^)vq(11K1TDv@#P=T<(!|Nrf%9>WLZ+*h4=+^SKzN6uC0#92{x%tNsqG_aGr1?k z%bKP(es3351mV7!vSH%;yZ??$Uu8?^Z8WAH|-xvM+M@w8(pOVnzX z#kO4FOQ2aDc~®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 delta 9658 zcmZu%33yaRwywHOg6vCrU$PO9C4t@-1VX3#CTY{@+w?*bL|Yt}(NP2k5mAY_f*=Y9 zxqz~RfFgpeA`BzA%ySu(#dR1*oHx!4jx51ZL6GsCs_HDwoBqDsTlN2^&Z+g(sk(XX zqrMye-1Es&I&yK@Aj{k9C35}f$>CW|Q?H*q)0wfmGCo)4x*KLpal+yiMcoOx{ANNb z)caOzN_H;)R_Yzf1k)*nxa@W^0uF16##Ry%35PP_NJ0*!ntjMPNmU-^N6bY==3xQE z++-A#bs$c^z-3tDnGiLX<%kdmZlT6!4R*DpVSC4N7bZjYvlw}7$6}6 zZ@gxd!UT@JW@?p%92?cfU@8(q8Ek*8Kx-n=NK6hUu!$*N99vx{C~Q-twxv-?Cz(Nq zo74+D8Js9bm0*~G9umn32b*i-NraqEa;1P+C)GuxWsw>NyGet9Sv?YRZ9-16&T)E3 z6m}LGq(%aVcN?S_fm6FpRDp|yMopX$m~y`k#_uUGPY|VRBh4wfIi;jiSlHzt2^5+3 zu+D}VCrJt!tZ<^P#^d!c5f@1jShvTbNu%U|`C8b~y+AV&(=W_5z`^bXgPTO5R3ya* z&=nxf0!c=dCe+}zlNJK@-|4iI1RjY+QYqF{x0752SO3mJC&ReQ43n=GbW{m7G(}=@ zg^PH|H3G(bGb`gInGT?Z0X}lA0FseOT*6PLbO2l;K(2$Gml=J(5^$rOOa|-ZctT-A z>2Z+j1&+&8VRI;ykmVQ-9vd}}i`=lJhlSn<)*dG9O+ql3#13Np=kbzXL!^hrj2?i^ z^IX-FsTST9UOTx3=JYTcf74Fa$+2KfRAxi(b&^|Qdk=%@HbF)j<4Pihi%b-Cld14! z4=cSLF7zm-)4<%*YMd@4v1-9+hm8Qa17bZb^tW(JPqQ?GK-uehdMB*vX_aOYxaM`k zxVv)JBaM-im}5Q{d-yIJy6xlAl*xV?$goxU~(^$ zZjKOUYrifW!3O!Aq!k|PWtQ$IFnyn1H&+ORl*Sr`54Yb#9)QEWEYgFxy!I989ufjk zbTxwalZOeM*;k~0L@?MH@nB4jqVj;9JPOslbyf2O6;o=0u^3-)0VkO+K=ccVR9LP_ z*Rc{V@)*qRt&b^cS0QKFUVrJ>J2kp0!kl47=%nJg0n0xvysL%M3xGanF>dvyqKFj z)d_Y?3!GDA8QlJ+g{ttvn+CcZzU-qnt`L$n(I763`bY|ACRUZKgx-Bk^l4c9RbTu@*ZKiABiN0347Pj>@TGk2CCZ);i?(p)r9)6ZaeUXa2u%i)NEzKijGvJDRRGt(E~L_ec# zyO6@ZZU{!BxwXyopmTc>%KGa~JA_2e_csL-xJ5Y7ukD0*fAgr91RIP6qb=y%#kzO6 zJR~cKP%z#YOg6A0Uh*}>iY$&J?Nm%grI8r=3Wqm9KFXO($C(>WPOJ+e?z5AR z3B3Nke#9p^YqEFY0Z&Myc{!0Q;~^&q#6PgmlR)*xQKy6qUtjIuL-icyIsU8@L&i%0fqp(y~HVC9^6Fy z48t=nRN0IrZovd`#bPYLTqi5bBm%^P{dMgl+CqmDy{s4J*!0u~PuWVXeo+V;8;VBa zaXAr8$moonK0HpsVOudB4Q)0ny#o3amq=qMRDWic#!|@OYaCAG&kVF0<`fs#kIxy8 zB_lYj%&Ol(f&vW1)9iGD(}S%C^qn<1oUi6|B7sq#AVL%de6BTxJIXZ%o73$0z-Tv- zVL*xD%38s;FI9Gmhz8k2MaNp#MYF$#&lbOr)OSH0-W=>F5qP3RZ@#h%>2eAZ9c=@f zVT-h_4rjnYqD&?uj+n&d^!Xg5kwak_M_cBQlf*cL{m=6*qVT-j97m@mWZWdqu|zt? zWqf1;&&S&VKS>Cn-PSE=EI^V1?6iivQ%YbtbJ*Ky0d%p4T|JS5IK`WyN*%L_-Ow!iCX2A&+OtG$*BV4u|C#YwLB{J1|%;W)dz$grwmNk7K&*Kw5B zH6CPVdj@;Rui)Fkw#fB@Oaxmp=(O2Eozs4D11DGoSdH=eg5v>lBgezd=tnYgb0o!J z+%Il|2}885Uw0N_3n$3}g#?#ylACh{n_^*X7YAMB7F-VhG|=C`jv+eJtz3dv6zh`4 zg~xOU$ZfC~Wv0Rl|1^!ioy){=gfQx1JjUtM1eO~JztcsgbA(sE-I*{^4<0?0%ggcT zIpw$k;>UZ_8JHS`r%#q&i}{(b^LRPE3+Pa@c@|f~do$;mQHRS-?xxWH8#A2^@u6ls zXvV%Vn(yrtWz}cCm&y9ceXwe%k@4DPHJs)04wJskHF2t2GK|1@nOS^^EfXC zQQUDk{T@4+4<8OQ`5vPr+{{KdfuUZ89Wz+S=fztu2U(EE@u-UtPO^}~sIx}taojx5 z8t5X354X}M;I`pb=}8LP&RV3!6h1g>mX=UBdDbQY_SHFqw3I^CIg9iZg&4k;;U;*l zxKz!v!KWslwP*+fhvgJrIaeaBpm6k@ONSyjWFP zjOWE@rB$;Qm)`!(TKMXxLTMd^6DYf$LZ9;%x&iiATBVH?l=D_;6NTyLt@K$iRawVu z&Z~x;z~Bg-4eJM&oovY?lPqAXXKRG94zd-dR~6Ie;K?eT>3Jc^E*&T0tXH^*n`}di z7j*U)I@#Q{D(Agqdlv#PJDFY|d6B}}3wpzjP7arPl9K^E1=>gIq?a(FxuB<6xMrl@ z`mzwrjbtQ@H!`RQ=g=$IA5*sKN?6WKUhUK;B0UCs$Sw+Ve>PUV*2(fvjgdaGo03d0 zp3Jzy7|X;kN@14)WFPbxW$R`q`*8>V)~0ciH{i-qHoW$H6K)x0rEg^)9W}mMdO+In z{#2T+n6{C2BV?)*^mo*D?{XDQt=XA(R8r7>(?9#i-+oNHa@p7JEY1Vq^vr*B6@XKB zHRR~}lzcrTvqaZk0>6@V%C6_sMYw_kM(>Ber% zaCgUR0;P_*1@c}un0DVucxle?t_7(x`{SG+^K?nqVVpRtI6L@(b$K{ll>O?VR6evT z8+&wFUeoC(+5gP@TfS5`xUeA4s?<|L6aMV1g*WF*y0aG+oyphNlr3DmG9S7V_AI#~ zuNC(}KgdTOhU-DjlX)E8f^Z)4RJLsCkbKq8!<47=aN~->d4juP(~A7r08p?puSs+% zL{?s&SL!KvY-PTlW$@n0p?NYY%zrvx&szB4>3luwpzkyJ$a+wo8Iq@G13d9ezO9Y$ z;U&l>=(8$c=2?hdf^3Ebmmpi<{Y#Lo&|`I;p2Fue737y+pl!PrzL?uTuVOo4!Roqf zV$F3u={$I4Yp9P4ub8hRH;@^4k?hQBp1X<`{!4@3c!=6}jiwmkrC%@cKV{k49*>c3RtQz zd(Do%w4e-=c9_0%zM&jryGSP7%v}$=TSA7CK``JYEuI*Lyj0OTm`h-chNnq%Oq?Im zjyVy-Pdu#5QkWli_&O@BX9K%Fr9+j7Z) zw^43OAs-nBw0^tM>cWQbFIO4na6|iI!lkrmp$W1)OBxauC5^E9OAtd%<@(`E!^i(NI zoaImB=~7mFl;7N)SCFaln?+?kaF1Z$SYHG?PWQ$_zd!9AgJ+3whFv#g_?1ou??wr0 z0-oWyiY`1mQ*+9hqhM5<$=@kZi|1$|;J&mhUfJSVgBSL+7rwu(h5F%Wn@#d#rv%Jn zF0q%!Q@JQobE&$7+)jnswJB$|;<@mrGv(9`*6&RC^nSOMdf}_@%+#B`@ZGyqauPV; zGSzZ3PS$L!ZzL4N;5!pbH!@Q`jI{n6jh}jWulO*m&+$;=HV*!8viNmKsLD0e2~&P3 z!O1iChtV{U-TOnD7LVx~0CoxT`1~J(fu4 z_&j;G9H0HqG3lyv43F{W?dJwz8qSsB^ObWI_&j>9oQ}nKjy+3%D#d5;r$PAaUuhLK z#=^)-TYIvx($bw<9@`$<^+MSbyj-92tn?d|xw_#;*YjlvOy^H?RR{bsm-~dnXU~_@ zaj>{bTgJ7H<9%>x*d{0p-OMO^%LS{sQ;dC+#@GnMw4Bh|3lE~Y7PD5Q|w4ABAKig2}nxC1e-9KAPMw4J|b0!i_W|H_J zU?QK{we5?3G=5;+SkxD%Q*HZnLTF008Ae?!kT5x?+A5YOrdL&4#qt~t_gu8$mBosS zC3t1A`(mkd1%ZC!joE)++*3jOsoQbX=#X7Fzjso4zq+ADvn*R{*|d%nn$hS)Z2L&e$c|-_j%ZQ zj#a3Rm8c?x@p7j{{Fa5khw?DIslwmOd6<`DU#oLbMU}Ros|viM!e2NK3vg@(!_?_d z)1qC+SJD%jUDh@9*JF3}E|c2c*){KB%@(7yx2Nh{ttqD?)%0r3AnEd()!CRWd;q)Z z>zm=jsl|m;@!vQW-U{YBiVN|`NlMqio~^|^205^n#~_9C@T>6`7(cyO+-nF{`k{do z2eg}7QX%QoX=^myqyu_&CI%~->y1>sFqE3q9SmJ)QeQ<>+G|ojW$cy`s#e>P?Y|b; z6Q!ztEuu@ys5-)lXq=&KgVc$LN|htjne4r7l)8*bT{fDkYpz78Lnx(L8p1Lu%(d}c z6mwTIz3Y%0nxN{w>o8|$xuuhlyA5-3mir!a3s`O%=A_CS)tT#9{ccm2vG@Hm)K~G{ z+j=K!ADgsps_tK>(Q4kkld73Vn1%JIWyVaZ_Ii|AU^)L?R6WRYah6+p587LZxhFYy zFI6qesJRfwskD`<$ClHvg+qQq3FiJ>yw*G<)yes!n3>Zm+7dH)zb= zkK-^!-=ylFH)w2{d4Hg)QX!eTZ|P4+{0OSvi0I_MQS}OzsA!|=RhW?MRGqz%DIch= z#J6VXAW1zvS27i{ausg%C?iW{^*no9C#vR6C}g}zQjh&1C#0RFPGVpRE#9*UbsN#h zu^_VLI1^70bq{0D4Up7*(-71m_$H4 z`PE(OO7{L@p1Oy<`_EU8GU0{uCAIpvR8@%0CI{xLBR6ZDnr@GA(4x-StQpvSAu?kS zIkp+AbsQ7Futa!)q?T;K#M_vtW{JwjB{jnm&5IIK~rC lp&piqFGD?BF>y{sJuI<&IqG4F@1H?EEb;O>)U#D%`ac-uWP1Pr diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index e2fabd868a2c4a9c4c897c0b11a2ea011d307010..df676ffffec3d7ab4466c21c0d412567fdd35061 100644 GIT binary patch delta 3710 zcmb_fU1(cn7=FLi+NRRK)h^U_nzYljw3|Im(rVt_ z7A?CFMV#duelQp~@4BmP6$*kfsNM_|=9PF+D0nAc48$uH-}ifSa!#|9B|!o?Cpq8q zywCUko%g%UoLfL8G1QUV#!fxqb5PC)tLcTYGHdzROl z%MI}1$Ab9D*7%DBe(=iOjv9G?{DtEN1d?>THlPg=vISm4FO8$0M)5m@8;{`q5c-TZ z-;ek4BwJgO?Z~7H-bX2Mje8YWu%~12I^M@%0DnjEt_9j~=d=mhP#bQDG-hY<%7)L= zha6+5i9#`e@f<`B;_+(j%;$wx`TK@PHr_fRuWcO3fFa+T7*oyTFr?JP_;mChZzo{G zbfC9s*L&UI?uVfEYZ|IKlP$X^42%RvW{<`U{xeV^MUD4Io=LNn z0mBK*m~4H{8O)e$eNM$B{SE^XYKOlH`O_^P|g|H%ZRN_ zS0J(YYeLx364;VmFo$jUZR}<)to{**$p>ehLQRQc28jzV73v(+ zaQd+tvlR1D!wsKPhI#T)!$r<&%p%W64K*;+H_Vfd8g3t~#%v!cH97d08B9IQl+qK* zK69wBt@1WoQ+|rsgkFhG&(f*q*|vn zaM;_vflZI6GxL?H8}YuovG_8#V&bEmq}|l)tHA!M|34JiW1O9Wy)QAY=CqelPCnS1 z9YHTnl#Pda1tzQvtHL)sQE~KMaLb+Fk(~*1#ZSwS!&*`VN`Y9aMXP#wTc@$Rkq%Z@C zt=I?R$B6p%vbbG1LqQn7>|j`Xy0Pms@xVKK5DAJeh|I?0luTj>Hq)$ delta 77 zcmV-T0J8t|*ayIj2e2Fhmlmr5q_e&PU=Fjc5q4aY@NNjRLT-@lxB7emU?8{Vo&m}O jml&%7u(x)k0S-f#LgxV*w`S=9A_ABAd;z4FD(nGDKcXRn diff --git a/host/dxwndhost.vs2008.sln b/host/dxwndhost.vs2008.sln deleted file mode 100644 index 5bf4fb1..0000000 --- a/host/dxwndhost.vs2008.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dxwndhost", "dxwndhost.vs2008.vcproj", "{FD0B0234-8EC5-43C0-A384-1B881DD3D925}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Debug|Win32.ActiveCfg = Debug|Win32 - {FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Debug|Win32.Build.0 = Debug|Win32 - {FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Release|Win32.ActiveCfg = Release|Win32 - {FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index 9fc09eb4c8a70e36d9338666d2e74e8612a4dbde..fa826d61fe8be3353702046337680617496a554a 100644 GIT binary patch delta 22599 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

WQAaBDAxN{rfIut?y>@2YfO{ zue;$0&KP8o9?8#s+zhDn`(JOlW!yU<{%}BIaQg(ye4mt}WpD0WPK-0vie&2D=(o09yv* zS_8%w!aoBWm4qKeAh;JV{KZ2<&qO!`tb+jrUnFBSmxaZw|crvxut?{}1h32l}A)Jtu~4!>NUA;70B2aFAiP7#QRYu9wAnGrvev#lp~B zp~J+*HvY#4T>MO5R=EhjfX|;wDZ*D6i=1)6QNxJhQXHlgIzkR~d=<zm}~696!iQY2 zr@{Kc2a6M!8}7^n3QYgh&OGtI#6oz;!#Ex=0h+0@SUu<}Wc-ztdi;TbYJdFMuH<2} zTR0rwGW=#o+{&TU-+r&hjPW}!#V>DRM?e2-cNBg}HOmb2mYmJ@!y`jS*6%e5>&J!4 z`tAz+kk-`O-12^<$4rgLKqpTb;27INnVMx~YPMMX`}NGcFNW{gpRYoG)t+gc7)$73 zu_we>7#qZbuh+AxSpUxn?o=SzOWwY-HBf3(1fH+=DxdEuS8S8-i=7m^1niVp{EO@jIGA3_H>pVD;CV16E+b}&e;J+cS*L<= zLOM@zyqozYa~9V6{igi#pUsZwj=iQw#q~eq{ZE0LmDm!WEw<$KC*6d8u4Vk2U#((a z4Ey5z7sC*UQGiwlV!bxoDBh delta 13139 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 diff --git a/host/dxwndhost.vs2008.vcproj b/host/dxwndhost.vs2008.vcproj index bbe4e0b..c567b8d 100644 --- a/host/dxwndhost.vs2008.vcproj +++ b/host/dxwndhost.vs2008.vcproj @@ -221,6 +221,10 @@ Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" > + + @@ -504,6 +508,10 @@ RelativePath=".\cdib.h" > + + @@ -617,6 +625,14 @@ Name="Resource Files" Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" > + + + + @@ -698,6 +714,22 @@ > + + + + + + + + diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index 50e25ae..4a3299f 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -17,6 +17,7 @@ #include "PaletteDialog.h" #include "TimeSliderDialog.h" #include "ShimsDialog.h" +#include "CGlobalSettings.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -126,13 +127,13 @@ BEGIN_MESSAGE_MAP(CDxwndhostView, CListView) ON_COMMAND(ID_FILE_IMPORT, OnImport) ON_COMMAND(ID_DELETE, OnDelete) ON_COMMAND(ID_FILE_SORTPROGRAMSLIST, OnSort) + ON_COMMAND(ID_EDIT_GLOBALSETTINGS, OnGlobalSettings) ON_COMMAND(ID_FILE_CLEARALLLOGS, OnClearAllLogs) ON_COMMAND(ID_FILE_GOTOTRAYICON, OnGoToTrayIcon) ON_COMMAND(ID_FILE_SAVE, OnSaveFile) ON_COMMAND(ID_HOOK_START, OnHookStart) ON_COMMAND(ID_HOOK_STOP, OnHookStop) ON_COMMAND(ID_DXAPP_EXIT, OnExit) - ON_WM_RBUTTONDOWN() ON_COMMAND(ID_RUN, OnRun) ON_COMMAND(ID_TRAY_RESTORE, OnTrayRestore) ON_COMMAND(ID_VIEW_STATUS, OnViewStatus) @@ -150,6 +151,8 @@ BEGIN_MESSAGE_MAP(CDxwndhostView, CListView) ON_COMMAND(ID_MOVE_UP, OnMoveUp) ON_COMMAND(ID_MOVE_DOWN, OnMoveDown) ON_COMMAND(ID_MOVE_BOTTOM, OnMoveBottom) + ON_WM_RBUTTONDOWN() + ON_WM_HOTKEY() //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -1105,6 +1108,44 @@ void CDxwndhostView::OnDraw(CDC* pDC) ASSERT_VALID(pDoc); } +void CDxwndhostView::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2) +{ + switch(nHotKeyId){ + case 0: // minimize + this->OnWindowMinimize(); + break; + case 1: // restore + this->OnWindowRestore(); + break; + case 2: // kill + this->OnProcessKill(); + break; + } +} + +void VKeyError(char *key) +{ + char Msg[81]; + sprintf(Msg, "RegisterHotKey(%s) failed err=%d", key, GetLastError()); + MessageBox(NULL, Msg, "DxWnd error", MB_OK+MB_ICONWARNING); +} + +void CDxwndhostView::UpdateHotKeys() +{ + // Hot Keys + DWORD dwKey; + extern Key_Type HKeys[]; + extern KeyCombo_Type HKeyCombo[]; + // MessageBox("update global settings", "debug", MB_OK); + for(int i=0; HKeys[i].iLabelResourceId; i++){ + dwKey = GetPrivateProfileInt("keymapping", HKeys[i].sIniLabel, 0, gInitPath); + if(dwKey) { + UnregisterHotKey(this->GetSafeHwnd(), i); + if(!RegisterHotKey(this->GetSafeHwnd(), i, MOD_ALT+MOD_SHIFT+MOD_CONTROL, dwKey)) VKeyError(HKeys[i].sIniLabel); + } + } +} + void CDxwndhostView::OnInitialUpdate() { CListView::OnInitialUpdate(); @@ -1167,6 +1208,17 @@ void CDxwndhostView::OnInitialUpdate() pTitles = &PrivateMaps[0]; pTargets= &TargetMaps[0]; + // Hot Keys + //DWORD dwKey; + //extern Key_Type HKeys[]; + //extern KeyCombo_Type HKeyCombo[]; + //for(int i=0; HKeys[i].iLabelResourceId; i++){ + // dwKey = GetPrivateProfileInt("keymapping", HKeys[i].sIniLabel, 0, gInitPath); + // if(dwKey) if(!RegisterHotKey(this->GetSafeHwnd(), i, MOD_ALT+MOD_SHIFT+MOD_CONTROL, dwKey)) VKeyError(HKeys[i].sIniLabel); + //} + UpdateHotKeys(); + + // Transient mode if(gTransientMode){ this->OnRun(); } @@ -1651,28 +1703,29 @@ void CDxwndhostView::OnResume() extern HWND find_main_window(unsigned long); -void CDxwndhostView::OnWindowMinimize() +static void SendMessageToHookedWin(DWORD message) { DXWNDSTATUS DxWndStatus; - if ((GetHookStatus(&DxWndStatus) == DXW_RUNNING) && (DxWndStatus.hWnd!=NULL)) - //::PostMessage(DxWndStatus.hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); - ::PostMessage(find_main_window(DxWndStatus.dwPid), WM_SYSCOMMAND, SC_MINIMIZE, 0); + HWND TargethWnd; + if (GetHookStatus(&DxWndStatus) == DXW_RUNNING){ + TargethWnd = (DxWndStatus.hWnd) ? DxWndStatus.hWnd : find_main_window(DxWndStatus.dwPid); + ::PostMessage(TargethWnd, WM_SYSCOMMAND, message, 0); + } +} + +void CDxwndhostView::OnWindowMinimize() +{ + SendMessageToHookedWin(SC_MINIMIZE); } void CDxwndhostView::OnWindowRestore() { - DXWNDSTATUS DxWndStatus; - if ((GetHookStatus(&DxWndStatus) == DXW_RUNNING) && (DxWndStatus.hWnd!=NULL)) - //::PostMessage(DxWndStatus.hWnd, WM_SYSCOMMAND, SC_RESTORE, 0); - ::PostMessage(find_main_window(DxWndStatus.dwPid), WM_SYSCOMMAND, SC_RESTORE, 0); + SendMessageToHookedWin(SC_RESTORE); } void CDxwndhostView::OnWindowClose() { - DXWNDSTATUS DxWndStatus; - if ((GetHookStatus(&DxWndStatus) == DXW_RUNNING) && (DxWndStatus.hWnd!=NULL)) - //::PostMessage(DxWndStatus.hWnd, WM_SYSCOMMAND, SC_CLOSE, 0); - ::PostMessage(find_main_window(DxWndStatus.dwPid), WM_SYSCOMMAND, SC_CLOSE, 0); + SendMessageToHookedWin(SC_CLOSE); } void CDxwndhostView::OnTaskbarHide() @@ -2211,6 +2264,13 @@ void CDxwndhostView::OnViewPalette() pDlg->ShowWindow(SW_SHOW); } +void CDxwndhostView::OnGlobalSettings() +{ + CGlobalSettings *pDlg = new CGlobalSettings(); + BOOL ret = pDlg->Create(CGlobalSettings::IDD, this); + pDlg->ShowWindow(SW_SHOW); +} + void CDxwndhostView::OnViewTimeSlider() { CTimeSliderDialog *pDlg = new CTimeSliderDialog(); @@ -2401,7 +2461,7 @@ DWORD WINAPI StartDebug(void *p) (strlen(ThInfo->PM->launchpath)>0) ? ThInfo->PM->launchpath : ThInfo->TM->path, 0, 0, false, DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS, NULL, path, &sinfo, &pinfo)){ sprintf(DebugMessage, "CREATE PROCESS error=%d", GetLastError()); - MessageBoxEx(0, DebugMessage, "ERROR", MB_YESNO | MB_ICONQUESTION, NULL); + MessageBoxEx(0, DebugMessage, "ERROR", MB_ICONEXCLAMATION|MB_OK, NULL); } CString strEventMessage; @@ -2421,7 +2481,7 @@ DWORD WINAPI StartDebug(void *p) if(!Inject(pinfo.dwProcessId, path)){ // DXW_STRING_INJECTION sprintf(DebugMessage,"Injection error: pid=%x dll=%s", pinfo.dwProcessId, path); - MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION, NULL); + MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); } #ifdef LOCKINJECTIONTHREADS extern LPVOID GetThreadStartAddress(HANDLE); @@ -2434,11 +2494,11 @@ DWORD WINAPI StartDebug(void *p) if(StartAddress){ if(!ReadProcessMemory(pinfo.hProcess, StartAddress, &StartingCode, 4, &BytesCount)){ sprintf(DebugMessage,"ReadProcessMemory error=%d", GetLastError()); - MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION, NULL); + MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); } if(!WriteProcessMemory(pinfo.hProcess, StartAddress, &EndlessLoop, 4, &BytesCount)){ sprintf(DebugMessage,"WriteProcessMemory error=%d", GetLastError()); - MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION, NULL); + MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); } } } @@ -2455,7 +2515,7 @@ DWORD WINAPI StartDebug(void *p) if(TargetHandle && StartAddress){ if(!WriteProcessMemory(pinfo.hProcess, StartAddress, &StartingCode, 4, &BytesCount)){ sprintf(DebugMessage,"WriteProcessMemory error=%d", GetLastError()); - MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION, NULL); + MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION|MB_OK, NULL); } } if(TargetHandle) CloseHandle((HANDLE)TargetHandle); diff --git a/host/dxwndhostView.h b/host/dxwndhostView.h index 287005a..835cbd0 100644 --- a/host/dxwndhostView.h +++ b/host/dxwndhostView.h @@ -15,6 +15,7 @@ class CDxwndhostView : public CListView { protected: // Create from serialization only features. CDxwndhostView(); + afx_msg void OnHotKey(UINT, UINT, UINT); DECLARE_DYNCREATE(CDxwndhostView) BOOL isUpdated; void SaveConfigFile(); @@ -43,6 +44,7 @@ public: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); protected: virtual void OnInitialUpdate(); // Called once after the initial construction. + void UpdateHotKeys(); //}}AFX_VIRTUAL // Implementation @@ -76,6 +78,7 @@ protected: afx_msg void OnTaskbarHide(); afx_msg void OnTaskbarShow(); afx_msg void OnSort(); + afx_msg void OnGlobalSettings(); afx_msg void OnViewLog(); afx_msg void OnDeleteLog(); afx_msg void OnDebugView(); diff --git a/host/host.aps b/host/host.aps index 561c5cec6de379264872fea2b007472aff1da11e..2ead7e837b8072ac825350d967b0985aa43deef4 100644 GIT binary patch delta 624 zcmZY5v1=1y9LDkYS1LMm$l%~mxW1%d2Qfhd7U|$Yg$@pGE(h_oQCkdc)gTreJaEY1 z(DL{Pc;L`MVxqA&n+FaZ92^`vxEv^S6m)P9>h~f}zTAD@<9LSO@9F-S*y5S7+P1IO z_Iu8?E+&f)udTI`2j`mg^UVv5=8c=3kgTlV@0?v;U%Rz>`|tO?WjDC9*|VCy^-kN) z_TAdChB^0B@vF#|6mVK8URQ=g<=9n$A7%Z>X5^7P&MV+krAQuMD92wako+LBiagd8 z4n_Y~uS0=`s=-<9E_ zay+F16WN={`ttZhG43lMo8eVu$fS6n0?){XIoV!hv+}s37*8tT7p3F>+1MO6RN%C1RCeY^Rr{^W*wyMN F`U8S;;xYgL delta 661 zcmXBQKWGzS7zXg~K0L`$siA}t&TwC21Ia1I#0C^`XrUBu(5aw9ApSWal~U0LX~Cg` zLk~n+p2b0=gF_BVnzU(}fRqjno``gCl;UVWrO=M0_$0UdhWB~jm+$>nj^y%@Tp7_a ztI5&yUQG!1W^r=i-ke)}d99QiD_zf*9zCf%ES8_mSNddMJZ{V{*0c=%*3#PA>f%+s zpb7B@&W4iX5?N{L7ljZpcpFN)51+0hV7R1XPB;7ApJCLM7KcqaSywU_ffX_JCMRFR zW0{lmJpzV@12`B6*K)FEIA%UHfo;jEqE}5yF+1n0RbBq(53HS zY$|OQ_NJ2cVSE@4yZ7VRjfdSI;j!a4e0mE3`=SY)UI^bj4P#4bRoL_uoGm5yEYvJh zkA>H=d>cOHn;GsWv6~FT6pUu?Ae*kkX)5_Eh3}~_EWl&A44-~N!0<4QgLD{9!r1OT z-=^Q-Y%3`)N9fyZ(cKFcR# z_}a2$t^ljRLwU;$7&}UP1Dm>V=oie;S$MP!pB52N7u_8$p1|OQsk>5$1njnwYg2eT oW$M*4LY%`)TWLSw(FFXy0WG6TV=y|s&$K(E+A;3XB|Pt_{|!#n+5i9m diff --git a/host/res/alt-ctrl-shift.bmp b/host/res/alt-ctrl-shift.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0caa8d2d5c34f7886c5e4d42e12eb993605f95a4 GIT binary patch literal 13394 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 Qa@Le?_^Q}h1iSA40BVVjpa1{> literal 0 HcmV?d00001 diff --git a/host/res/alt.bmp b/host/res/alt.bmp new file mode 100644 index 0000000000000000000000000000000000000000..20b2a79f94a371f63216fe0c19e258227b449eab GIT binary patch literal 4114 zcmbuCOH7nk6oCI$S1#J7ZklKlqZ?wA#+6l2R2r8x+NJ4IHzsQ03h+^>Vtr64+Qc9# z3^0NNGdzcRF*6L0nc@8qpCE|Uf(mGSBrZ(a@7^=>_ZP)zdvfRU^Upu`eD|Dl&pCg_ z4_|&^Xj#pi!slB)U-S9I_=?#uMn5-<_Rr*_Z!rC>WoBk(dV2cN9o%cYJ(&Y<&EVmQgJuBO|wO-@c{gh8FIy7|%nYS*o4RpSEw` zv~lD285tRyHgU0W!-fs%O4hGi$5@w^mX@kz?b@|#)-cw5r$o)GS2N3yuXrStk($a+ z)JRL?=M2_KXSMa~(;4aMtdF8^R<8VX!GgB7wz07>!Y2uGMnvkc{!tkVYkmW zD(&_w6%~%k%BsrBYKNn`s>;Q1I%}NHT9>P?rl!8OwxO=BvA&++ZftC7Z1lL@-lit6 z$K&&Q{XSp7=WF)+n*)JRb8{#dY;SAhG2DY`45P~7xL8zFeDNaV(uE5b&Yzz<3Jc{9 zkMRJHm0Y^SuoV}VmXxrG^3u}svNF4D9169BLXmJd($W%% zL|P+}wn(JCwH0k0jP~|uM@OuqBOZ(KSY2(c2YWR&@vH2ttkTj_!;q~q7oIzJP0R3m zFsBgHV_a;Pot(@E5LJRbCz2qx6qfnYU+ zSbw?9{>5!A$^V{N02PAn6SKU1;U>7%viXqh1^cU z2Z6&u{h*5Q4A<{OK);9-1Ln!eNzxq|x4WzB@ZrOng-m6~SvH&3>qXn!RsbX=C8eUG zf(6h_mD#;}_r87m&YU^3bLURJMgNi|OBOC%$j?z|wL+3$L=dDl$vinVMP?!C^!D`p zl9QuZRKB#^!QrTrI53U4KxWP*`|RlGAWhHC&ayTpShZ>u(H@J%mMvTM;>C-+yu2-2 zw!D7*8ijy}7pzt=5hyx{s+nVB52vQcEU{>`zpwAekt3Rg(nHp!68U^Swhe-r7t9ku z)!w>wD>zG+E=4~V;ukJp!OkmIta$qLsYxMLV1`1gPfSoC;$ljFTWf1P9>)_$j~>-5 zQtQC+`~8F-ASME62sbeep@wEEJHiDvdj9L@cSp;Jz!iNGC1qTuDr zm*~vT&&OZv3QOhWS|apxLCnN5DM-itkjVDf=&@8H_sHvf?XbuJmezAgyAjg4O0s(Wl-EO{>&9gm@HL-)6$QNP- zF#)r(fwqDbflY|Of`h2mtakF`NzFoerWvCp3kHM4oS0w^0{2CT1r|o9uyBE?KO6yG z5!h#EW^fSEM+=;H>Xc@Ymaw6|o-&0hp)ikwiNIIZK)@IO4FL*itiYFu)ddoTW+004 zWDu&qm_Rmf?q4>~ESiZ_g!(ChgZP*HLEzq-m?$VH&@6zcR|UTxXYnO0m`3?UzibIt z0&F6YCd@PP#yLqI)`W*N>Kr!-FLVOJTN{DPB4^K@EiNuLjBqfhI(ps9)8MP#T$_nf zNrfUAOTW(p)_$Mh!j6f4zqOUhLaV4odwZhakHtu3jLvwxv$K;_LT}LB-QCmELyL6l z=1r9+bgBS4D=UlHFbHGbI@HTkP`^}Y4eE6wxqM>nXjH8okJI|d!ej@^eQ$5CYW({8 zI20rciVMe-w9b%1a)WZFtBB+*K~S@6eF2|et=qDuAHy3I!6 rRb9@NPU-0AsC4l{Eqhi&ng`v*p_v_vS``7w^gtlsEQ%^1h++H#OX?Na literal 0 HcmV?d00001 diff --git a/host/resource b/host/resource index d39417f0e27a6940fef872f53e85fb0064ab3771..2c6819e0db3b15e88d631f82fb4547c9445f784b 100644 GIT binary patch delta 1703 zcmZ`)OHUI~6u#3=hiXboDOhZ6J0lQ$#!g$F8X|>K8s1V#i$-MYMle1SLQE@56C<4X z1BxzPfZezh!rF+x0NlA_VO)Feoz9(^a7`C8neTk(e&>AWp8h>_9sG9fX8cfTmOXQ1 zhUDR-q{DHi3`4aJICaSsX<`UT!F>GYwj@hBY+Z>lV3OoWnPica2G`R|^xL_{HzS;; zlKP<_@aRmzbAckB zP{NRD3@wooX#Lk=wJbwNdA-?z!M?k5Tk^tbO@?RX4I8n5xh>+4@_Nug!~#+fJb#s? zy|EOxrA4MK?Z<0Nkr;mjzfK z#oTFqceOUeVdeR}8+ZB<5!*pH;rU$tn*zUD2^`#tHLbOaByFo<-}Yn5#** z0)P6fo^!O}sVfxcesTP6VHM~T0Wk7^7HxWHq5~0jXtXPK; z+49=TZMwO#8RJuGp{AQhgQ9MjZr*!nxoL5^n-XplW6oH&Z4ri_s4fM2K9M@h(d=!@ zQF{i{(G;vnmZSCv(@{O5g(k?EsWN8{RnnX4R~0_DJc}6vsb#fYkb}?V-W|<`b3Vsw zQSG90t&EWSxK3ut1a3sVl%Ug3=ioyal74U489RnEn8o-!>1lLG`;HZS0JVx2s}j%%}<=qA_6A<;3Dd17KFABl~-1 GTfzYDb1c&U