;.......script written by trancexx (trancexx at yahoo dot com)

#include <WinAPI.au3>

Opt("MustDeclareVars", 1)

Global $sModule = "atl71.dll" ; convinient victim
$sModule = "catsrv.dll" ; or this one maybe


Global $hModule = _DllFromMemory(_XMdll(), $sModule)
If @error Then
	MsgBox(48, 'Error occurred', "Error number: " & @error)
	Exit
EndIf

; Get pseudohandle for dll (not needed really)
Global $hDLL = DllOpen($sModule)

; GUI
Global $hGUI = GUICreate("XM Player", 280, 150)

Global $hExitButton = GUICtrlCreateButton("&Exit", 210, 70, 40, 25)
GUICtrlSetTip(-1, "Exit")

Global $hLoadButton = GUICtrlCreateButton("...", 157, 42, 40, 25)
GUICtrlSetTip(-1, "Browse for new")

Global $hPlayButton = GUICtrlCreateButton("&Play", 40, 15, 100, 25)
GUICtrlSetTip(-1, "Play some music")

Global $hStopButton = GUICtrlCreateButton("&Stop", 20, 80, 100, 25)
GUICtrlSetTip(-1, "Stop, stop...")


Global $hLabelPassed = GUICtrlCreateLabel("", 60, 55, 80, 18)

GUICtrlCreateLabel("", 0, 127, 280, 20)
GUICtrlSetBkColor(-1, 0xFFFFFF)

Global $hLabel = GUICtrlCreateLabel("", 280, 127, 280, 20)
GUICtrlSetFont(-1, 11, 800, 1, "Trebuchet MS")
GUICtrlSetColor(-1, 0x0000CC)
GUICtrlSetBkColor(-1, 0xFFFFFF)
Global $hleLabelHandle = GUICtrlGetHandle($hLabel)
Global $iX
AdlibRegister("_MoveLabel", 20)

Global $hSong
Global $sXM

GUISetState()

While 1
	Switch GUIGetMsg()
		Case -3, $hExitButton
			ExitLoop
		Case $hLoadButton
			$sXM = FileOpenDialog("Choose Extended Module", "", "Extenden Module (*.xm)", 1, "", $hGUI)
			If $sXM Then
				If $hSong Then
					DllCall($hDLL, "int:cdecl", "Stop", "ptr", $hSong)
					DllCall($hDLL, "int:cdecl", "Free", "ptr", $hSong)
				EndIf
				GUICtrlSetData($hLabel, StringRegExpReplace($sXM, ".*\\|\.xm", ""))
				$hSong = _LoadXM($sXM)
			EndIf
		Case $hPlayButton
			If $hSong Then DllCall($hDLL, "int:cdecl", "Play", "ptr", $hSong)
		Case $hStopButton
			If $hSong Then DllCall($hDLL, "int:cdecl", "Stop", "ptr", $hSong)
	EndSwitch
WEnd


; Free
DllCall($hDLL, "int:cdecl", "Stop", "ptr", $hSong)
DllCall($hDLL, "int:cdecl", "Free", "ptr", $hSong)
DllClose($hDLL)
_WinAPI_FreeLibrary($hModule)

Exit


Func _MoveLabel()

	$iX += 1
	WinMove($hleLabelHandle, 0, 280 - $iX / 2, 127)

	If Not Mod($iX, 10) And $hSong Then
		Local $aCall = DllCall($hDLL, "int:cdecl", "GetTime", "ptr", $hSong)
		Local $iGetPos = $aCall[0]
		Local $sPassed
		If $iGetPos < 60000 Then
			$sPassed = StringFormat('%.2f sec', $iGetPos / 1000)
		Else
			$sPassed = StringFormat('%d min %.2f sec', Floor($iGetPos / 60000), Mod($iGetPos / 1000, 60))
		EndIf
		GUICtrlSetData($hLabelPassed, $sPassed)
	EndIf

	If $iX > 840 Then $iX = 0

EndFunc   ;==>_MoveLabel


Func _LoadXM(ByRef $sXM)

	Local $aCall = DllCall($hDLL, "int:cdecl", "LoadFromFile", "str", $sXM)

	If @error Or Not $aCall[0] Then
		Return SetError(1, 0, 0)
	EndIf

	$sXM = ""

	Return $aCall[0]

EndFunc   ;==>_LoadXM


Func _DllFromMemory($bBinaryImage, $sSubrogatedModule)

	Local $pBaseinary = Binary($bBinaryImage) ; this is redundant but still...

	; Make structure out of binary data that was passed
	Local $tBinary = DllStructCreate("byte[" & BinaryLen($pBaseinary) & "]")
	DllStructSetData($tBinary, 1, $pBaseinary) ; fill it

	; Get pointer to it
	Local $pPointer = DllStructGetPtr($tBinary)

	; Start processing passed binary data. 'Reading' PE format follows.
	Local $tIMAGE_DOS_HEADER = DllStructCreate("char Magic[2];" & _
			"ushort BytesOnLastPage;" & _
			"ushort Pages;" & _
			"ushort Relocations;" & _
			"ushort SizeofHeader;" & _
			"ushort MinimumExtra;" & _
			"ushort MaximumExtra;" & _
			"ushort SS;" & _
			"ushort SP;" & _
			"ushort Checksum;" & _
			"ushort IP;" & _
			"ushort CS;" & _
			"ushort Relocation;" & _
			"ushort Overlay;" & _
			"char Reserved[8];" & _
			"ushort OEMIdentifier;" & _
			"ushort OEMInformation;" & _
			"char Reserved2[20];" & _
			"dword AddressOfNewExeHeader", _
			$pPointer)

	; Move pointer
	$pPointer += DllStructGetData($tIMAGE_DOS_HEADER, "AddressOfNewExeHeader") ; move to PE file header

	Local $sMagic = DllStructGetData($tIMAGE_DOS_HEADER, "Magic")

	; Check if it's valid format
	If Not ($sMagic == "MZ") Then
		Return SetError(3, 0, 0) ; MS-DOS header missing. Btw 'MZ' are the initials of Mark Zbikowski in case you didn't know.
	EndIf

	Local $tIMAGE_NT_SIGNATURE = DllStructCreate("dword Signature", $pPointer)

	; Move pointer
	$pPointer += 4 ; size of $tIMAGE_NT_SIGNATURE structure

	; Check signature
	If DllStructGetData($tIMAGE_NT_SIGNATURE, "Signature") <> 17744 Then ; IMAGE_NT_SIGNATURE
		Return SetError(4, 0, 0) ; wrong signature. For PE image should be "PE\0\0" or 17744 dword.
	EndIf

	Local $tIMAGE_FILE_HEADER = DllStructCreate("ushort Machine;" & _
			"ushort NumberOfSections;" & _
			"dword TimeDateStamp;" & _
			"dword PointerToSymbolTable;" & _
			"dword NumberOfSymbols;" & _
			"ushort SizeOfOptionalHeader;" & _
			"ushort Characteristics", _
			$pPointer)

	; Get number of sections
	Local $iNumberOfSections = DllStructGetData($tIMAGE_FILE_HEADER, "NumberOfSections")

	; Move pointer
	$pPointer += 20 ; size of $tIMAGE_FILE_HEADER structure

	Local $tIMAGE_OPTIONAL_HEADER = DllStructCreate("ushort Magic;" & _
			"ubyte MajorLinkerVersion;" & _
			"ubyte MinorLinkerVersion;" & _
			"dword SizeOfCode;" & _
			"dword SizeOfInitializedData;" & _
			"dword SizeOfUninitializedData;" & _
			"dword AddressOfEntryPoint;" & _
			"dword BaseOfCode;" & _
			"dword BaseOfData;" & _
			"dword ImageBase;" & _
			"dword SectionAlignment;" & _
			"dword FileAlignment;" & _
			"ushort MajorOperatingSystemVersion;" & _
			"ushort MinorOperatingSystemVersion;" & _
			"ushort MajorImageVersion;" & _
			"ushort MinorImageVersion;" & _
			"ushort MajorSubsystemVersion;" & _
			"ushort MinorSubsystemVersion;" & _
			"dword Win32VersionValue;" & _
			"dword SizeOfImage;" & _
			"dword SizeOfHeaders;" & _
			"dword CheckSum;" & _
			"ushort Subsystem;" & _
			"ushort DllCharacteristics;" & _
			"dword SizeOfStackReserve;" & _
			"dword SizeOfStackCommit;" & _
			"dword SizeOfHeapReserve;" & _
			"dword SizeOfHeapCommit;" & _
			"dword LoaderFlags;" & _
			"dword NumberOfRvaAndSizes", _
			$pPointer)

	; Move pointer
	$pPointer += 96 ; size of $tIMAGE_OPTIONAL_HEADER

	Local $iMagic = DllStructGetData($tIMAGE_OPTIONAL_HEADER, "Magic")

	; Check if it's 32-bit application
	If $iMagic <> 267 Then
		Return SetError(5, 0, 0) ; not 32-bit application. Structures (and sizes) are for 32-bit apps.
	EndIf

	; Extract entry point address
	Local $iEntryPointNEW = DllStructGetData($tIMAGE_OPTIONAL_HEADER, "AddressOfEntryPoint") ; if loaded binary image would start executing at this address

	Local $pOptionalHeaderImageBase = DllStructGetData($tIMAGE_OPTIONAL_HEADER, "ImageBase") ; address of the first byte of the image when it's loaded in memory
	Local $iOptionalHeaderSizeOfImage = DllStructGetData($tIMAGE_OPTIONAL_HEADER, "SizeOfImage") ; the size of the image including all headers

	; Export Directory - not used here
	Local $tIMAGE_DIRECTORY_ENTRY_EXPORT = DllStructCreate("dword VirtualAddress;" & _
			"dword Size", _
			$pPointer)

	$pPointer += 8

	; Import Directory
	Local $tIMAGE_DIRECTORY_ENTRY_IMPORT = DllStructCreate("dword VirtualAddress;" & _
			"dword Size", _
			$pPointer)

	Local $pAddressImport = DllStructGetData($tIMAGE_DIRECTORY_ENTRY_IMPORT, "VirtualAddress")
	Local $iSizeImport = DllStructGetData($tIMAGE_DIRECTORY_ENTRY_IMPORT, "Size")

	$pPointer += 8

	; Resource Directory - not used here
	Local $tIMAGE_DIRECTORY_ENTRY_RESOURCE = DllStructCreate("dword VirtualAddress;" & _
			"dword Size", _
			$pPointer)

	$pPointer += 8

	; Exception Directory - not used here
	Local $tIMAGE_DIRECTORY_ENTRY_EXCEPTION = DllStructCreate("dword VirtualAddress;" & _
			"dword Size", _
			$pPointer)

	$pPointer += 8

	; Security Directory - not used here
	Local $tIMAGE_DIRECTORY_ENTRY_SECURITY = DllStructCreate("dword VirtualAddress;" & _
			"dword Size", _
			$pPointer)

	$pPointer += 8

	; Base Relocation Directory
	Local $tIMAGE_DIRECTORY_ENTRY_BASERELOC = DllStructCreate("dword VirtualAddress;" & _
			"dword Size", _
			$pPointer)

	Local $pAddressNewBaseReloc = DllStructGetData($tIMAGE_DIRECTORY_ENTRY_BASERELOC, "VirtualAddress")
	Local $iSizeBaseReloc = DllStructGetData($tIMAGE_DIRECTORY_ENTRY_BASERELOC, "Size")

	$pPointer += 8

	; Debug Directory - not used here
	Local $tIMAGE_DIRECTORY_ENTRY_DEBUG = DllStructCreate("dword VirtualAddress;" & _
			"dword Size", _
			$pPointer)

	$pPointer += 8

	; Description String - not used here
	Local $tIMAGE_DIRECTORY_ENTRY_COPYRIGHT = DllStructCreate("dword VirtualAddress;" & _
			"dword Size", _
			$pPointer)

	$pPointer += 8

	; Machine Value (MIPS GP) - not used here
	Local $tIMAGE_DIRECTORY_ENTRY_GLOBALPTR = DllStructCreate("dword VirtualAddress;" & _
			"dword Size", _
			$pPointer)

	$pPointer += 8

	; TLS Directory - not used here
	Local $tIMAGE_DIRECTORY_ENTRY_TLS = DllStructCreate("dword VirtualAddress;" & _
			"dword Size", _
			$pPointer)

	$pPointer += 8

	; Load Configuration Directory - not used here
	Local $tIMAGE_DIRECTORY_ENTRY_LOAD_CONFIG = DllStructCreate("dword VirtualAddress;" & _
			"dword Size", _
			$pPointer)

	$pPointer += 8

	$pPointer += 40 ; five more unused data directories

	; Load the victim
	Local $pBaseAddress = _WinAPI_LoadLibrary($sSubrogatedModule)

	If @error Then
		Return SetError(6, 0, 0) ; Couldn't load
	EndIf

	; Set MEM_EXECUTE_READWRITE on everything (for simplicity)
	Local $aCall = DllCall("kernel32.dll", "int", "VirtualProtect", _
			"ptr", $pBaseAddress, _
			"dword_ptr", $iOptionalHeaderSizeOfImage + 1, _
			"dword", 64, _ ; MEM_EXECUTE_READWRITE
			"dword*", 0)

	If @error Or Not $aCall[0] Then
		Return SetError(7, 0, 0) ; Setting MEM_EXECUTE_READWRITE failed
	EndIf

	Local $pHeadersNew = DllStructGetPtr($tIMAGE_DOS_HEADER) ; starting address of binary image headers
	Local $iOptionalHeaderSizeOfHeaders = DllStructGetData($tIMAGE_OPTIONAL_HEADER, "SizeOfHeaders") ; the size of the MS-DOS stub, the PE header, and the section headers

	; Write NEW headers
	DllCall("kernel32.dll", "none", "RtlMoveMemory", _
			"ptr", $pBaseAddress, _
			"ptr", $pHeadersNew, _
			"dword_ptr", $iOptionalHeaderSizeOfHeaders)

	If @error Then
		Return SetError(8, 0, 0) ; RtlMoveMemory function or call to it while writting new PE headers failed
	EndIf

	; Dealing with sections. Will write them.
	Local $tIMAGE_SECTION_HEADER
	Local $iSizeOfRawData, $pPointerToRawData
	Local $iVirtualAddress
	Local $tStructure

	For $i = 1 To $iNumberOfSections

		$tIMAGE_SECTION_HEADER = DllStructCreate("char Name[8];" & _
				"dword UnionOfVirtualSizeAndPhysicalAddress;" & _
				"dword VirtualAddress;" & _
				"dword SizeOfRawData;" & _
				"dword PointerToRawData;" & _
				"dword PointerToRelocations;" & _
				"dword PointerToLinenumbers;" & _
				"ushort NumberOfRelocations;" & _
				"ushort NumberOfLinenumbers;" & _
				"dword Characteristics", _
				$pPointer)

		$iSizeOfRawData = DllStructGetData($tIMAGE_SECTION_HEADER, "SizeOfRawData")
		$pPointerToRawData = DllStructGetPtr($tIMAGE_DOS_HEADER) + DllStructGetData($tIMAGE_SECTION_HEADER, "PointerToRawData")
		$iVirtualAddress = DllStructGetData($tIMAGE_SECTION_HEADER, "VirtualAddress")

		; If there is data to write, write it where is should be written
		If $iSizeOfRawData Then
			DllCall("kernel32.dll", "none", "RtlMoveMemory", _
					"ptr", $pBaseAddress + $iVirtualAddress, _
					"ptr", $pPointerToRawData, _
					"dword_ptr", $iSizeOfRawData)
			If @error Then
				Return SetError(9, $i, 0) ; RtlMoveMemory function or call to it while writting new sections failed
			EndIf
		Else ; If not wipe the space out
			DllCall("kernel32.dll", "none", "RtlZeroMemory", _
					"ptr", $pBaseAddress + $iVirtualAddress, _
					"dword_ptr", DllStructGetData($tIMAGE_SECTION_HEADER, "UnionOfVirtualSizeAndPhysicalAddress"))
		EndIf

		; Relocations
		If $iVirtualAddress <= $pAddressNewBaseReloc And $iVirtualAddress + $iSizeOfRawData > $pAddressNewBaseReloc Then
			$tStructure = DllStructCreate("byte[" & $iSizeBaseReloc & "]", $pPointerToRawData + ($pAddressNewBaseReloc - $iVirtualAddress))
			_FixReloc($tStructure, $pBaseAddress, $pOptionalHeaderImageBase)
		EndIf

		; Imports
		If $iVirtualAddress <= $pAddressImport And $iVirtualAddress + $iSizeOfRawData > $pAddressImport Then
			$tStructure = DllStructCreate("byte[" & $iSizeImport & "]", $pPointerToRawData + ($pAddressImport - $iVirtualAddress))
			_FixImports($tStructure, $pBaseAddress)
		EndIf

		; Move pointer
		$pPointer += 40 ; size of $tIMAGE_SECTION_HEADER structure

	Next

	; Entry point address
	Local $pEntryFunc = $pBaseAddress + $iEntryPointNEW

	; allocating space
	Local $tCode = DllStructCreate("byte[23]")
	Local $pCode = DllStructGetPtr($tCode)

	; Write opcodes
	DllStructSetData($tCode, 1, _
			"0x" & _
			"68" & SwapEndian(0) & _
			"68" & SwapEndian(1) & _
			"68" & SwapEndian($pBaseAddress) & _
			"B8" & SwapEndian($pEntryFunc) & _
			"FFD0" & _
			"C3")

	; Make it executable
	$aCall = DllCall("kernel32.dll", "int", "VirtualProtect", _
			"ptr", $pCode, _
			"dword_ptr", DllStructGetSize($tCode), _
			"dword", 64, _ ; MEM_EXECUTE_READWRITE
			"dword*", 0)

	If @error Or Not $aCall[0] Then
		Return SetError(10, 0, 0) ; Could not allocate exe-code
	EndIf

	; Simulate DllMain
	$aCall = DllCall("user32.dll", "int", "CallWindowProcW", _
			"ptr", $pCode, _
			"int", 0, _
			"int", 0, _
			"int", 0, _
			"int", 0)

	If @error Or Not $aCall[0] Then
		Return SetError(11, 0, 0) ; DllMain failure
	EndIf

	Return $pBaseAddress

EndFunc   ;==>_DllFromMemory


Func SwapEndian($iValue)
	Return Hex(BinaryMid($iValue, 1, 4))
EndFunc   ;==>SwapEndian


Func _FixReloc($tData, $pAddressNew, $pAddressOld)

	Local $iDelta = $pAddressNew - $pAddressOld
	Local $iSize = DllStructGetSize($tData)

	Local $tIMAGE_BASE_RELOCATION
	Local $iVirtualAddress
	Local $iSizeofBlock
	Local $iNumberOfEntries
	Local $tEnries
	Local $iRelativeMove

	While $iRelativeMove < $iSize

		$tIMAGE_BASE_RELOCATION = DllStructCreate("dword VirtualAddress; dword SizeOfBlock", DllStructGetPtr($tData) + $iRelativeMove)
		$iVirtualAddress = DllStructGetData($tIMAGE_BASE_RELOCATION, "VirtualAddress")
		$iSizeofBlock = DllStructGetData($tIMAGE_BASE_RELOCATION, "SizeOfBlock")
		$iNumberOfEntries = ($iSizeofBlock - 8) / 2
		$tEnries = DllStructCreate("ushort[" & $iNumberOfEntries & "]", DllStructGetPtr($tIMAGE_BASE_RELOCATION) + 8)

		Local $iData
		Local $iType, $iOffset
		Local $tAddress

		For $i = 1 To $iNumberOfEntries
			$iData = DllStructGetData($tEnries, 1, $i)
			$iType = BitShift($iData, 12)
			$iOffset = BitAND($iData, 0xFFF)
			If $iType = 3 Then
				$tAddress = DllStructCreate("ptr", $pAddressNew + $iVirtualAddress + $iOffset)
				DllStructSetData($tAddress, 1, DllStructGetData($tAddress, 1) + $iDelta)
			EndIf
		Next
		$iRelativeMove += $iSizeofBlock

	WEnd

	Return 1

EndFunc   ;==>_FixReloc



Func _FixImports($tData, $pAddressNew)

	Local $pImportDirectory = DllStructGetPtr($tData)
	Local $hInstance = $pAddressNew
	Local $sModule
	Local $sFuncName
	Local $hModule
	Local $pFuncAddress
	Local $tIMAGE_IMPORT_MODULE_DIRECTORY
	Local $tModuleName
	Local $tAddress, $tBufferOffset2, $iBufferOffset2
	Local $tBuffer
	Local $iOffset2

	While 1

		$tIMAGE_IMPORT_MODULE_DIRECTORY = DllStructCreate("dword RVAOriginalFirstThunk;" & _
				"dword TimeDateStamp;" & _
				"dword ForwarderChain;" & _
				"dword RVAModuleName;" & _
				"dword RVAFirstThunk", _
				$pImportDirectory)

		If Not DllStructGetData($tIMAGE_IMPORT_MODULE_DIRECTORY, "RVAFirstThunk") Then ; the end
			ExitLoop
		EndIf

		$tModuleName = DllStructCreate("char Name[64]", $hInstance + DllStructGetData($tIMAGE_IMPORT_MODULE_DIRECTORY, "RVAModuleName"))

		$sModule = DllStructGetData($tModuleName, "Name")
		$hModule = _WinAPI_LoadLibrary($sModule) ; load the module

		Local $iInitialOffset = $hInstance + DllStructGetData($tIMAGE_IMPORT_MODULE_DIRECTORY, "RVAFirstThunk")
		Local $iInitialOffset2 = $hInstance + DllStructGetData($tIMAGE_IMPORT_MODULE_DIRECTORY, "RVAOriginalFirstThunk")

		$iOffset2 = 0

		While 1
			$tBufferOffset2 = DllStructCreate("dword", $iInitialOffset2 + $iOffset2)

			$iBufferOffset2 = DllStructGetData($tBufferOffset2, 1)
			If Not $iBufferOffset2 Then ; zero value is the end
				ExitLoop
			EndIf

			If BitShift($iBufferOffset2, 24) Then ; MSB is set for imports by ordinal, otherwise not
				$pFuncAddress = _GetAddress($hModule, BitAND($iBufferOffset2, 0xFFFFFF))
			Else
				$tBuffer = DllStructCreate("ushort Ordinal; char Name[64]", $hInstance + $iBufferOffset2)
				$sFuncName = DllStructGetData($tBuffer, "Name")
				$pFuncAddress = _GetAddress($hModule, $sFuncName)
			EndIf

			$tAddress = DllStructCreate("ptr", $iInitialOffset + $iOffset2)
			DllStructSetData($tAddress, 1, $pFuncAddress)
			$iOffset2 += 4 ; size of $tBufferOffset2
		WEnd

		$pImportDirectory += 20 ; size of $tIMAGE_IMPORT_MODULE_DIRECTORY

	WEnd

	Return 1

EndFunc   ;==>_FixImports


Func _GetAddress($hModule, $vFuncName)

	Local $sType = "str"
	If IsNumber($vFuncName) Then $sType = "int"

	Local $aCall = DllCall("kernel32.dll", "ptr", "GetProcAddress", "ptr", $hModule, $sType, $vFuncName)

	If @error Or Not $aCall[0] Then
		Return SetError(1, 0, 0)
	EndIf

	Return $aCall[0]

EndFunc   ;==>_GetAddress


Func _XMdll()

	Local $bBinary = "0xE7BA684D5A0036008037E8067250004500004C0107003108301C400514E0000E21400B0102370036001112410003720000481100071045000350000300001000" & _
			"0100200002000001020E0000B204040700200011040C030213BB00340137000507013C0018100027C1000200F00000B4061E0218110C02010008810FD0000006" & _
			"70110FB4092E7465787479801D5C350002004D82038C4320800000602E62737380107C0044013E837D01078A0180C3C0C02E726461746184518555263A0B1580" & _
			"27402E0313009069010DE00083033CCB090062C05C2E69030AC246C5483ECB0960840000C01D656C6F63C054D1C22E010010C10146CB09C01DB8022E65041EC1" & _
			"5CC55E4CCE09FFC6804B067F037F107F107F107F104D1002B8E131C331C0408B4C402404F7410406000474000F8B4424088B542410108902B88168C353560257" & _
			"400210506AFE68062010001064FFA15600640C8925C1092003208B5808008B700C83FEFF7420003B742424741A8D3410768B0CB3800A088B48000C837CB30400" & _
			"75D700FF54B308EBD1648F0205A10683C40C5F5E5B10C35589E5800B556A00106A006898400BFF750840E88C3300005D80038910EC5DC3FC000483EC08016104" & _
			"8B5D0C8B4508F702406214756D8945F88B0045108945FC8D45F8008943FC8B730C8B7B02082110628D0C76837C008F0400743A56558D006B10FF548F045D5E81" & _
			"A00709C074287831A0040053E885FFFFFF83C44204A0035653E81E82010881C0068B048F8B430C00060608A004E101348FEBAC3108C0EB19E1086AFF53E804F3" & _
			"FEE1060C6A0BE8EF0F80142008E514E318837D0C01107505E81C001CE87932000000FF7510FF750C01601AA100E00010FFD021801AC9C20C00621A0C5771801E" & _
			"F6E8E7C00440196001F514E8DB6201FC6001F4E8CF116201F4681E010775F8E892B3E001A3088001681C220228FCE8A12102042702F4E8828F200283C430A30C" & _
			"8002048B3D410309FF740B6A100057E84DA215088B3D2B41038002108102388302E82811C0155FC9C3C212C4F4D9007DFE668B45FE80CC040C66802BD96DFCDB" & _
			"5D80F4D96DFE8B45F4400445431714C031C745F4C0060000E8BB31000089C389805DF0EB21803C1D4102003D7403FF45F489DF0031C0F919C9F2AEF700D98D41" & _
			"FE89C7478D041C3B04040075D58B7D20F4478D3CBDC105897D40ECFF75ECE863601759090021A3108017837DF800A47504002F768B000B546E0908897DFC860D" & _
			"30FF75FC04E825A1078B75F8890401225309C07502EB3A53408B7DF8FF343D810CE80264000483C4088345F880048B55FC8D1C13661180A28B55F8C70415A104"
	$bBinary &= "6761000262E134C300A06283355680576A016A0CE854411D58C7686C0014C15469C0018300C41089C609F67442806A026A0056E87A40020856E880A00089076A" & _
			"0110FF37E82141014708832C6704005C210458000256FF423780037708E8338101E80215A00083C43889F85F0C5E5DE461C20DE530000021401689C76A0AC00D" & _
			"6A0044E844000289C656200152212101C353E856E1004708B541026F410107010D01095B2209A0578B7D08FFE00CD760035857E8D1A000E0095F46035734E8BE" & _
			"4002590301103E750C008B7D108B470401F0003B077C078B0789C6102B77045600010347080A50110FCB12040C0177040C89F0C10A3143807C240C0800750940" & _
			"400889410454EB20F10001F30001F0001065F10002F0000103304510028B00013941047E058B0145B000C301048B4104510F68407E140010683D410006294100" & _
			"DA13E000224000E8352C0900C013F107D3C04A83C4561C020CFD02F5F10290F102050DF602A3F802F103C7020000F659D203D100757048D700B105D700162570" & _
			"50D7003BD60083EC380056578D7DC88D3534495020B90E1023F3A5C1043C6921025F5E213200B010601350080C8B889079003BD17D20130FB6B084A0028D1400" & _
			"B23BD189500C7E1A10EB157E164401C1E602042BD662017D0389480C00804802015EC3005641202018FF1594F16043740024108BF08A442418048806A0051C89" & _
			"4614FF20156C50001020548946001085C0750C56FF1502A890025933C05EC38B02C6E00300568B7424080085F67412FF7610FF6C1570D002350259E101310A0C" & _
			"01900301C3FF7010FF7424240C320015745305C30061320C85C07414B6016002159678E601F40175F303157C80015859C3DB101E000A08B207D8000D0CD00010" & _
			"89863C113018D83D08B000DA0D84113013D80D34B000E890FB60FFFF89460CB208E135682E607002F30EE04F0060071C8B08F0E8F6E0568BF883C4201485FF74" & _
			"29A005105320575689865CA002E83F001F0000578AD8E81301C25B0C84DB5B750B560CE80D50165010EB028BC6025FB205558BEC83EC0C00568B75085733FF3B" & _
			"80F7750732C0E9BC400208803D05300B0075F7530856E86C306E397E045900745E66397E20897D40F47E55897DF8C043830065FC00037E04833F00007E2E8D47" & _
			"048945020800688B1885DB741114FF33231753941759FF4500FC834508048B45FC41C033D80FBF46204050810845F854C00A3945F47C00B033FF8B46043BC710" & _
			"740C8B1DB11A50FFD30859EB06B300393E742480837E1C007E148B101E14F804801704F101473B7EA01C7CEC8B06F50056300398B0015B6126720D1C53860D88" & _
			"0F849FC02D56E8A0500084393DD121590F848CC20031C11F0F8480B200011E0F84C674B200D11C0F8468B200011C480F845CB0008B1D511AB902E830116A148D"
	$bBinary &= "049BC140E00299D90510301BF708F9DB05121CF959680000580000D91D00C00020108BF8A188601D99F700F983C70383E7FC89083DFCBF5001C88BC3C100E007" & _
			"0FAFCF99BB4400AC0000F7FBD1E13310DB890DF4B001895DFC1853A360D017D05EDF6DF8008BC199D8F9F7FFBF00F067001057D91D64898001DDD8A016E8692C" & _
			"F14F000C33C9B824680010208948CCC700B014008320C058413D2490077CEC100FB68628200189862C515000838E505000FF90172488838E4CA1008986386000" & _
			"810001265056899E40B00008899E4451005E08899E1A34E200485200311AE83EFD22FFC1031469C0F00A0050885368E09008E8E42B4108001433C966395E147E" & _
			"0818B8E440018938410F80BF561483C75805A102003BCA7CED8B450889243500B0018B35213B6A01008D0440D1E050FFD614A3D84001A1611359894500E85966" & _
			"C745E401000130158945EC53538D4580E453506AFF6808D00C919001E602005000F210510000F0040066895DF4FF04153C703D85C00F85C005402BA1E1136A01" & _
			"8BF8C100E70257FFD659830D22349003FF5989F210BF2041C0006A2057A340410135514105C70530B0000CA003A311C101891D28E000891D2C315000FF154090" & _
			"0514058D0416C5B115F10AF0101A83C00F405924F059A3107002E822862012391D0C600C75F345D005FF8205FF154CD00388041D0460018D4508505380536830" & _
			"1D001053E030927C8001A30870016A0FB002077000E0472001B001EB023202C082755333DB395C240008750432C05BC3C64205310401381D05A0027508F8391D" & _
			"A1037418381D928C5025750AB06F1578E00328EBEE899201A1F109568B423521343BC3740A200B5924891D4101391D210E7429586A20688100750A48C003FF52" & _
			"3511018325C110FD701389E5A202A1A119891D511B970431018DA50344A2037114FF1534B000A2895210891DF820125E703821605200837C2480A6178B820D81" & _
			"0385C9740DA1D10101D01F0FB60441C333C01537021836020E37024441018743027F0474048B444102740433323FB1978B35E118B21B8B0D81E136990FAFF1F7" & _
			"F9302502A1211B8D3CF08BC1C108E00350409E897DF0E8E020290000A1C229C202514D07A06320BB504EB5BD0085C90F8E870000000085DB751D50FF90580001" & _
			"0000A10050001000598B0DFCBF00108B00780C897DF48BDFEB08058BFB012045FC8D1400073BD17E072BC88B02F900406A0057FF75F800E816200000DB45F400" & _
			"8B45F8017DFC2BDF0083C40CD80D00C00040108D04F88B3D019C890045F8D80D08D0001000E897F5FFFF0187542300CE03C2394DFC02700F8C8079FFFFFF8B0D" & _
			"0C007C288B15D801058001258D0C404989444A02A102170D03014B031D8D04408A8940A10046884C4201131D44011D840C42025E895808A101D0422500643F50"
	$bBinary &= "A140009CFF0075F08D04B050E8F5982500008058822140A382338045EC5F5E5B39058105187C0AC78203809100C9C30000558BEC83EC0C530033DB57881D8CE0" & _
			"008810A1F4809299F73D029610F8381D04005C757956008D45F46A0C50C74544F404801BFF35080137150038F10010C16DF8022700938018011C8BC2051DF039" & _
			"82358136742DC6050500210001E80FFEFFFFA1F849002E40A38102393D81027C4806891D8103881D0112EBC0CB6A05FF1578802A833B2074895EC605014A015F" & _
			"2033C05BC9C38055535600578B7D0833DB3BFB00743B8B750C3BF37400348B55103BD3742D008B4D143BCB74268B0045183BC3741F893D226C401D8935704101" & _
			"15744941010D784001A37C0001EBA81E891D82071D82071D8207321D8107891DC107C04A5DC3040000C146568B75088A0486A2000383E003742E0083F801740E" & _
			"7E5D8340F8037F58B8FF4005EB10548A8E85C0018AC1C000E00384C97D0780C900FF2AC88AC10FB6C020EB390FBE86C1068945080851DBC000DCC0DC0D022080" & _
			"8CDD1C24E89926A00000DC0D184403D7406C005959E84CF3FFFFEB40038B45080FB6C2B00F00AFC8C1F90583E1FC0480BEC111007C02F7D900804E0201894E1C" & _
			"5E170128C04381430CC0280FB687024E408783E80074554800743D48741E48756E24B8808004B90000012B46405C99F7F9B880402A2B00C2D1F8EB568B465C82" & _
			"B9410303C15399BB4108A0F7FB8BC15BC2063A02060033C0394E5C0F9DC0004823C183C0C0EB2500DB465C5151D80D30C5442CD9402CDC0D284003C02D0494F2" & _
			"C32D0C0FB68F5031401B8A974F4001402F84D280740E8B46600FAFC0430ACA00208BC03306014E1C12FFC004B68701098B4E60A03BC87E0389020451400D2801" & _
			"465CC0263DC1567E0844050040B789465C013D5F8B823CC66496C1648A8E89403400C1EA048AC183E20300241F83EA0074304A00741A4A740E4A755A180FBEC1" & _
			"402F202FEB25C7544618A23546AF3430C604DC48C051512734F72429343503A001201DAAF1FFFF894620180FB6868B000F0FAF1046188A964210F8068402D200" & _
			"037C118B4E100300C183F8407E1F6A4000582BC1EB15668B468010662B4618790600014140048B4618F7D8E0008A04868A400802C23C1F88C28641087E082C40" & _
			"2301A01D0602E53BE25D0C8B073B4510180F8DC500068B551C008B75100FB70C8239100E0F85A42002F64514000474140FB64D203B04C1754030452489070F00" & _
			"B7048289068B0F0F00B7348A8D048A8D54008A048975240FB732000FB758020FB74202008B55188975208BF300C1E610C1E0104A3B00CA75168B452C8A4D003C" & _
			"89188B4534C6008201A050084802EB70A00B240274001E55286004108B004D0880796500750A2180058918EB4CE0018B5500202B55248BDA740C082BC699A048"
	$bBinary &= "5538890200EB068B4538832000008B45308930FF07EB9212C0018B08A0010108200619A0034D088018E0018B552C008B00C1F8108902FF80068A453C08410268" & _
			"6F008A4D0C80F91072173080F950772008A062C98300E91080480202894800105DC30FB6C18BD001603F83C2FA83FA090F0487966021FF2495962201A0BC4D08" & _
			"83E00F29410010791C83611000EB0616A00E00026A40014110408B5110583BD0404E418010804902025DC3201DC080E10F888886E007A7010761C8A0010209C1" & _
			"E0048941A814EB14A30829400109430128014114600804A206F6C1000F7409C0E1048888028400098B486880600288F78988816C5DC305801256166000E50032" & _
			"60014060004ED560005C6000676000766000668E42B88108572BC6518487D8440D40236FDD0538000151525181882422415400E0018300C410E80EEFFFFF8300" & _
			"7D0C008BF87D4B85D0F67447B861865143088060893208E2212508E8CFEE606D00750C8BF72BF0E82F01C00283C4140FAFC6EBD840B883C019DC089BC6080111" & _
			"028520098BC88BC72BC1000FAF450C6A80995940F7F903F88BC722788B80442404568A8892800A088A9093A0003ACA7208808B7010F7DE8970C04C94B0944002" & _
			"FEC085D28862040003F20FB6C93BCE5ED07C0780A0610600C13F64B3025183C18B770485F6894075FC74058B06A0258B00470C03471C750480006702FEF64702" & _
			"080F0C848D200520526BF6588120C6F0670010B002837E001C007443837D0820007D0683450820EB0410836D082090206A586B20C058568D98710253E806AB60" & _
			"80400183C40C89030033C0894610894604008946208946248BF30150048977048B4D0C8D04461800598B510C035100083910720633C9890008EB0233C98B1089" & _
			"004E2C895628C7463801704D008908894E4489204E48894E54600902BB01F14874548B471803471210610B4510401ADB473400DEC9DA4F58DA882C113003D80D" & _
			"54B01DE835ED057084C8300E4D0874238B204614894E101055894E18048BCB3055F0088BC32B5246C01A4508E20024E0050440745F8B47142DC1275040E8611F" & _
			"000059425D6A3220608EC1596002F019474C0883E820405A034F147981E00A3BCB7E028BCB80239E25704AD2094006003D894E0007A60C5306001D4610310146" & _
			"41060001747E8B4510F6400022017437DB470C511051D82D50F00ADA471CB8D80D4C8000202AD92A76600898DC0D448001412260EC3063000E8B4F0CB80076DA" & _
			"1000034F1C40096A6489004510598946083BC1007D03894D1050535180528B4DFC8B1D84808901A00633D2F7F3894134414100305A595B58800E2084740B8119" & _
			"2C894628305583C043208D008B4C2408712600530FB65110895010048A90C1628B49188ADA0089481480E30F33C98080FB04C740344090210089482C89482889"
	$bBinary &= "481038C7404CE01E008948004489484089485088404865C7405800C0718800483C8848548948600089485C5B730688880191350FB6D283E2F083F8FA407D0001" & _
			"015C90299000412A01F42983EC28538B5D08008065FC00560FBF5348148B83019C838B2172FF08838B4C101EFF8B330F00B64C18288BC20FAF0283C19F8B4CCE" & _
			"048D04008003C8894DF00F84046907909C65EC0085D2280F8E5DB00057D0814DF0008B75EC8A410469F602ACD00B8AD0240FC0EA00048855FF8A51038100C6E0" & _
			"50001080FA03008845FE740B80FA050074068065FD00EB0400C645FD018A51018410D28855FB80017DFD00007505FECA8856668A021133010F80FAFF740A0A80" & _
			"8101048001168A566600660FB6FA663B7B20207C158325C0503300BF306066001010A0C100EB3709D00169FFF1AC0FB61603007B048A543A4480FA2810720905" & _
			"020AF0118B542097048955F46205068B0055F48956088B561000807E6C078955E88B00560C8955DC8B5614008955D875128079038807740CB0710345E8703608" & _
			"8A45FEF00C88566C838066180080660200810A04745B510A568B45F48A00481F02CAFEC9884E0067F64322010FBE400811741A7042992BC2F700D9D1F8C1E106" & _
			"2BC80081C1001E0000894E1068EB0F50906250E8A348FAFFFFB0256859E40846106889460C70068B4DF000C646020883661C000180770380790100741100FF75" & _
			"F456E8B5FDFF12FF0002595920028A510281C08C0F5256E863F95701088039FF2016790314758004C64665018A97311D00F6C2018855E4745800807E3C008D56" & _
			"3C7500598D46386A02508D08463052400034508A875646901F60004763004861008D6C87A4D01C900A87312270022808FF75E460002C5056E80CF5F712075008" & _
			"83C438EB000A807E6500740483C06634008A974DB003F20640E07456807E54F0065480754D8D46506A04B0032A48F1064C80064911068A878A4A63004B61008D" & _
			"87F4F4068245E2004640FF75E030031A44F00685F906D206140FB784975270022956587990070A58911202C0350383FA15080F8F1B30C10F8449030000004A83" & _
			"FA100F87028AF000FF24953E2E0000108A490484C90F8482781001884E79E970700045240165220178E95D2501745806888E9273801986814BEB0C138BA50032" & _
			"037403884E227CB020F6E92931034DFF4C84C93103617B84C090008601217B56E847F4FFFFE916E5C0084303EE4003EBE98A83D502319784C00F84E600021288" & _
			"429CE9DBA0000FB6415804E9B2100E430306102389004670837E04000F8402BBF0018B4DF48B467008C1E008635E3BC2720F008A460224F70C2088504602E999" & _
			"11024E3082188CE98EA00032040F8483A00099C007E97B7000F10583A3D121100089835070060FBF4384103992007C0783A311018000C645FC01E94EC40216E9"
	$bBinary &= "311B309DFF80C48D0C89008D044883F83F89830D11047E00039204807DFC0014750D5345406D050F8C0383A004A405E9F7020000D104804983F90D0F87E9D000" & _
			"B0FF248D82001A9313A8B020080FB6866100C1E002E9766DF0018301A98301610080010150460CE9ADB0018AC2B78D028E515580E2F00AD0881811E995700150" & _
			"1288411104E98AA00084C075118B91124D8986984004E975F10124969CA0008D8E510085D2047507B00D8901EB034AD0891183398016522102D20219830EE941" & _
			"0001B906C0E0040080E20F0AC28801E90E26A001E00391994614E91403D000030BA7D6BD800000000FB686A70060000146106A4058394600107E03894610804E" & _
			"000202E9F00100008430C07406880280049C2946001079E183661000EB10DB8B45E800A88B45DC0089460C8B45D889468014806602F0E9B9006C088B8B38000A" & _
			"0FB6C00F20AFC8898B480016E9A20100088A490480F9200F40B6C1730B89830142E9028C00155053E8C0E9FF10FF59E95D000C0FB64940046A408D832C000B5A" & _
			"003BCA89080F8E6FFFC0FFFF8910E968000600402084C90F8456001C888B12300005E94B0004F6874CA10005010F843E0006660141088D97A800D333C0663B00" & _
			"0A761B8955E80FB6049744001B3BC27D0D838045E804408B55E8001A427700BF2C0FB68F010D8D0051FF3BC27C140FB708848FA2001D894634C620463C01E9EC" & _
			"80058B4D00F080663C008D580101012D894E280FB7948782A4000C0FB78C87A6820304849F8107C1E1102BC2008955DC8945D874160580249F010EC1E0102BC1" & _
			"0899F77D808F38EB0483006638008B4628895E002C2B45DC8B5D080F00AF463803C8894E3000C1F910894E34EB7F0083EA19746C4A4A74025780013183EA0475" & _
			"6D40807DFF01751000C4030088467B0FB6467B2910460CEB57800A02755105830A7A800A7AE98CFDFF00FF8079040074138A004DFFFEC1FEC0888E2293004E88" & _
			"8694800256E8A4B1F500B1EB1F82101980100088467F884E7EEB0E4182547407884E7D007D04005756E8D4F0FFFF5340FF75F456E8C6800C0F00BF43148345F0" & _
			"058300C414FF45EC3945EC000F8CA7F8FFFF5F5E005BC9C38E290010A155C000B4C000E8C000CCC0000A502A001016C00036C0003F55C00083C00096C000C3C0" & _
			"00CC01C0001A2B00106F2C00541092C000B0C0002FC0034841C000112E001064C0017CD5C00087C000D0C000EBC000C1055AF9C00121C00AC1023DC0015801C0" & _
			"00000083EC10558B406C2418568B8501708B0075000FBF4D140FB6405428288B8540407B0F00AFC18B54D6048D04008003D0895424100F08840F06800D642414" & _
			"002085C90F8E020003535700EB048B5424188B7400241CB9C06700106904F6AC404B81C6E0500010108A46660093F8663B407D207C12832581070000BF606600"
	$bBinary &= "10894C240014EB330FB6F869FF0254C119B606037D048A804438443C1072060207020B80BE8B4487048944902414837C001C7504C105008A4203884424138A00" & _
			"4204836618008366041C0040CC008AD8240F098005248A82B1C0EB04A82001744E807E409C4E3C0075458D56386A025210518D4E30C00034518A6C8F46801C80" & _
			"01478301C1D651148D8F819F5184B251508D044628C0002C5056E8E781007383C4388A8F4D800B04F6C1021654008D4654A10116506A0452E004486000604C50" & _
			"8A87494004C0004A43C300016B508D87F4C02150100FB68745A1028D464015810B44000B8E030B807E65240074A0668752E0032946245879201B5800C1878B44" & _
			"2024188A4802807D8BD000C1EA0483EA06746E484A7458405A7427605B1B004A740C4A756C56E804CDE4E1526383E00F014100884E0204EB57600129004614EB" & _
			"F280E10F5688888E872010E89FEDA004888D868560018A8E86A0000000088A0880F91F7E002A80E9408808EB235960066A408098429811E092EB2A0CC2081021" & _
			"121022120FB681602F83F8070F8FB58015080F84A7A00033C92BC1080F84E5000A480F84C417C300C1A1A00191A101746448007454480F85A70300500056E819" & _
			"B51005A2108A00467C8AC8240FC0E93A048194604006A01F06AB0F8E665E20022013E956E000813F5608E8D0E3811FC756E8BF62ECF31B0F8E2D8005A20BE94A" & _
			"23C60699C006E9268118B6004678C1E00201460C08894E1CA02E01E9FE021941BA4679A002E0846A385841000339460C7DE280B4EB02DD8132807804000F8622" & _
			"D6E0048B853460086A03009959F7F94A74564A0075BDF6452201740D01012524C1E00689461C20EBAA8B5C24806A4C2420240FBE4311204146672003C150E883" & _
			"C03F8BD0214202895424300090675004E86E81024C243483C4C4102B609A1CE96A40B6420AC0050FB6C3EBADA00F400950CB0FBE4007093A6106D8C520031CC6" & _
			"0250E8258002810840D8895E1CE92580085604E832402FEB3683E80A000F8495FEFFFF83E810040F8479A01783E803080F84130201080F84CEA1613648741448" & _
			"4036F480028856E8BA400959E9E86001008A467F84C00F84DD1140010FB6C8631F99F7F9A085D20F85C9C2037EC1030270C203C04883F80E770066FF24850835" & _
			"001000FF4E10EB5A83461088FEEB54A000FCEB4EA00008F8EB48A000F0EB428B1100E703D1E06128EB2DD1007E10EB30FF4610EB222B800302EB25A00004EB22" & _
			"1FA00008EB19A00010EB0213C0058D0440992BC244D1F8815403D166E0EE8D0046105939087E028900088338007D03832089E255E9E4A0198A467D664A447415" & _
			"E24914B8FF0003395046147E1560EEEB41C30C580FB6C04066615D1461070434E9F661078541E4C707270F20B6C9018D2C201C83BD11A100408D8561000F8EC9"
	$bBinary &= "91C002C700405000E9BE40005D7110B67000410512028D42030F0489A14001832100E99981C201C383E809745E00185C744AE016A1398223395225750030FF74" & _
			"241456E89EC0F1FFFF8B4668B129102881701E20598A400259806B2A09504444013559C00108EB0E48A050E014290435EB2B80407C242400742CD31A0F26B660" & _
			"28221B751A30030BEB1E146004A30F683E206C11EAFF04FF55F0072056E802EF00FFFF0FBF4514834484242C426C44241C393000100F8C04FA606C5B5E5D8180" & _
			"26C3263300102B3000AA3130003730003D3000433000AA5030008530005530005A3000AA6030006630006C300072300002823000568B7424088302BEA1340075" & _
			"758B865081F01585C07C06898662698E86B189F300416956E81010110483BE5101FF59754C8B128651018B8EB10240538B0C1E89F202506C31283B0400D35B7C" & _
			"2B8D41010F40BF4E103BC18992057C200A0FBF4612B30083A681510400EB0756E8EF307948598B963195FF86A10803929691618B8EB1008D86B100903BCA7C0A" & _
			"902583A6210100005EC3558BEC81EC01F11F53568B750C573300FF575756897DE4E80000E0FFFF568D85D48150366A1150E8D1DFD03680C41833C08A8C053101" & _
			"003A8870E000100F85021AE0734083F8117CE701608C576A3C56C7835845900F44F032C6832890004004E8B6A003568D45D86A100450E88AB0008D7B1040566A" & _
			"0657E87E7301E4206A0250E8727101432088566808200350E863E00041B0A46A0083C03CF0217441E0000FBF078363D072C4004885C07E1C6AD88D004B285F2B" & _
			"FB0FB611003B53187C044289530018418D140F3BD07C00EC0FB745E48B4B18003BC87E028BC18943001C6A01C1E00350FF001594F100108365F4000066837DE4" & _
			"0059891003590F86A10A8B038B004DF48065FF00568D203CC88D45DC610AE3DE01C10F45FF6A0150E8D735B300FC610ACBB000E005FC896A07000DEE1101B911" & _
			"01C0910F30AF076A0130867506C438A88947049006EE4056E2713200BF4B140FAF0F8365A0E8008945F08187CC500150408945F890040B71066F0190048A450B" & _
			"83C40CA808807466C07F0E566A0160FF75F0E85680015001F610450B02743301F8E842A136010474108B4004402104222C5601087412510183C08A0271011476" & _
			"01107423730152037001EB0F80330570AD880001566A04FF75F8E814EBDD511E0CA1AE39617510038009FFD0028038801076038020B0180583C16205100BFF45" & _
			"E8F1A0200F390045E8894DF00F8C3803C0596117FF45F43945F4580F8CA85023F1008B6018C1607D348945F4521610123C90C8C70740F2104314E0120FE06514" & _
			"13A00310138B45F459403B4318597CCF1006201C69C08195900AC31B89430441B0BC394320595910050F048E9790708945E0EB0301802B8B7DE056037B04E089"
	$bBinary &= "7DF8E866400C3016701515B21C17E0008B601D010145C0F06A1756E827F000B00129F21CFBDCF10E28701AFC10F80F874EF004500BD01D0101801B22FFD07180" & _
			"650B902145D4056121CCE002568D47446A306050E8C0B20002C06A30B850E8B1E3007192E100A2E000048D87D13C566A1050E8A293E000668B8FD1918D329200" & _
			"83C43C66D1E180BF0111020266890873078052A7523C80BF219602F1004D11A030006A00202056E8726100048365EC007020B4092101D0018D47048945E86A08" & _
			"016A300312FF750C8B02F0F0D86A0E89308D460DE0361B600340018D45FFC680461D01C6461C08C01404E805C104C420F645FF0001740A8A461D24FEA00C0288" & _
			"461DF00002F30088FC0C04F30010740440038410F6C003740A8B46509D040800F05B807E1C10750009D16E04D16E08D1006E0C837E0C00750E4FE701B1065207" & _
			"722D97DBA057B604450B10018946188D451D4201824001C02EA00B178846321FA001E89010012104C42404D1E0D01B8B0685C0740A08B021A8503B59837DF010" & _
			"0074158B001C0183C00210142359890659EB03D8832600311B50C98320DD91C90482EBD027837DEC107300198B4DF88B45EC6A00108D7C8104592BC804B8C0B0" & _
			"BDF3AB8B7DF84BB11484143A801483C79023E8408B370FB67E1C40080FC0AFF8C1EF03856082A13B108D440010372845F88B04835C20035985C059740021FF75" & _
			"EC0FB64E1C0970D251570034FFD06A012170000CE8C2DA812520EBA60FA00D8101E89102010C90130008752C8B3E33C0390046047E138B55F83300C98A2C1066" & _
			"890F478047403B46047CED5004092117FF15820FEB0EFF3687A3008038000F33FF39BBD10700751B8B0E33D2397E000476120FB70103C7006689014141423B56" & _
			"00048BF872EE8A4E1D008B0680F90475128B004E0C034E088D044810668B48FE6026EB158000F90275108B4E088B04560C40878B0C486689000C5033B8000FB7" & _
			"45FC8B7DE8FF0045EC83C7043945EC00897DE80F82EEFEFF00FFEB208B45F86A1000596A008D7804FF7500F0B8C0670010F3AB00FF750CE8E0D9FFFF0083C40C" & _
			"0FBF4320FF0045F48145E054010000003945F40F8C6EFC00FFFFB0015F5E5BC900C332C0EBF700000000558BEC8B450C5356005785C00F8E84060000008B4D08" & _
			"8325145020001000A318000A890D821C00058D04C1A320000782A101186BC05805F0006C44A3100011558B1D012089241D24000C8B0D0112890D0230000B83F9" & _
			"000F841F410150591C891D2C0111FB4500110D011103A338000FA112180004A33400048B712842BD008B00892D28000D8300793801751D8B53080003530C3BF2" & _
			"7E038B0053042BD68B412C3300ED2BE883DA008BC520EB0C8B5128000883E840001B530881FA001D010073470FACD008C1EA00088B69348B79308500ED750985"
	$bBinary &= "FF7505BF008C6F7C01C1E518C100EF0881E7FFFFFF00000BEFF7F50BD2740148403B05813C77100240BA510090008915813E8B82558B318261C705588047814C" & _
			"C7054A5C8404A1011BA3488006C70405548409837954007400318B41208B513C3B00C275278B41248B51824080041D8B4154A38112108B414CA381258B4150B2" & _
			"A38124E984802A02184480590089413C2BC283F80090742FA3440029DB05810200D80D60D00010D80D52644004D91D010FA101018970414CA16080048415001A" & _
			"482D4210405D10811DA1010189411A504710A14127801E7E1089C8415439C244760503658240E38032CE24D91D400020402F50066A3C4206484A0664C2314133" & _
			"D9541D50C20744D6074CC007A101C18F8B58308B48348B80682C8B70288B3D41970083783801740C83F300FF83F1FF83C3018308D100A18191D1E803F0248B15" & _
			"4165833D0133000F0485398073D1EA0BD20F0484264102ED83C710DF20443602892DC155DF040236035803ED03EB13F198D80D6880278107D1ED030803430780" & _
			"09D9CDD8E4D1E584DECB8308D9C9D8E4010C00DEC9D9C9DEC2D9C10CD80DC13AC002C3D9C9E982798073908D64240005113F01144C1A402143120C1A4026D9CC" & _
			"54D8E3401ACA011DC9841BCC04D8E1821BCCD9CADEC120D9CCD95FE48100E8D902C2060FC4D9C9D95FEC85E0120DE131D9CAD9C0450302D82402D847F0D9CBD8" & _
			"0447F4600447F8D9CBD9045FF02101FC4A0F8554078061C1074003D95FF8D95F52FC4428E201C126CCC019D925825FD9025FD905E132D90541A137EB0C8DA424" & _
			"E0030031E41D83C708811D8C2BD1E5058117906419CAD8E1D9D0C92100DECAE300D9D0601A210228C0D8CB2014C5C012CAD958CAD8C46014A002D88015CA68D8" & _
			"47FC401AD0A113C01CFCA0D9C94A759200021D4158A3E1008161D80D58624B5CA000434008A80133C0DB1D6116DB93224E04452BF045448492201885497DA181" & _
			"05894144A1411C48894148C27C8B15014A2B0AD0F1808962038951548380FA007547C7414C412208C74150C1008B5120C100E2088951448B5124110201483905" & _
			"2186741F8940712889692CA161A92BA0C7C1E80389235BF88056B4F2FAA0B63D4190C0A4DAC00881C9138A531DF6C202608C00430803430C2B730C903BF073F9" & _
			"9709849AE00704E9A0200AF6C2040F840685A001A1AA74308B43080448BA403FFF2BD51BC6508BF08BEA0002BAA003008003EA13F0C74138C06506004002600C" & _
			"3BF07D02EB7E2F630122042806C003A308A406024120083B73087CA1361274080CE912A01133ED33F63889711CA3AB0021E0055DFF120581CA833DA100400F8C" & _
			"9099F9FFFF00D45DC363D3044D10C0D3568B75088500C98945087E4285F600743E85C0743A8D04000985C07E33578BF800BA0080FFFFB9FF7F0140D74508D900"
	$bBinary &= "8345081004DB5D0CA0063BC27D00048BC2EB063BC17E00028BC16689064646204F75DB5F5E410B00FF802534F100109090611FA8FF253868013C68014068012A" & _
			"4468014868014C660131C00840C20C000A50D93C24008B04240FBA3424080066810C240002D92C00245988E083E003C331610358EBF34404A20303EB54E000E0" & _
			"1158680A5C68016055B80064B80068B8006CB8007055B80074B80078B8007CB8008855B8008CB80090B80094B8009855B8009CB800A0B800A4B800A855B800AC" & _
			"B800B0B800B4B800B855B800BCB800C0B800C4B800C855B800CCB800D0B800D4B800D8FFB600B11F3F001F011F011F011F011F010F1F011F011F011001C02A40" & _
			"0000007A44CDCCCC3E001800803FB100730270407AC0008BFCFA21A930011101005040D80FC93C6F1204833AF3010040ABAAAA623DB1008055C0B10070019082" & _
			"45D0263100007F43B00460438180803B7000300000E0300000C05974036F001F01FF1F011F011F011F011F011F011F011F01FF1F011F011F011F011F011F011F" & _
			"011F010F1F011F011F011C011C130010014F0200002573000077CC0072AF0110010D0A6F011F010918010D0A1100007262000000457874656E64650064204D6F" & _
			"64756C65043A20600244AC0000E8F8030000C1615803AF001F011F01FF1F011F011F011F011F011F011F011F01FF1F011F011F011F011F011F011F011F01091C" & _
			"0184F00701F4F3000009506B00A838011CF40000E9906300D83801543001505D9C040FEF001F011F011101E4F1000082F430000CF200001C30006A3430004430" & _
			"0060300015037055B000803000903000AC3000BC553000CC3000D83000EC300000ADB00B083000F50218B000243000AA3830004030004C3000543000AA603000" & _
			"683000703000783000AA803000883000943000A03000AAAC3000B83000C03000CC3000EAD43000E03000E83000B505FF0A3C0000FF0A504F7009FF0A0000C9FF" & _
			"0A0000FF0A0000FF0A30053F7008FF0A90557001FF0A130BAC0000776176654F757443806C6F73650000B5F500004765747DB700506F736974696F6E02000000" & _
			"B80077617665404F75744F70650180BA0105785072657061726500486561646572000002BB055C5265736574004400C0051E556E700B52000400C10536577269" & _
			"74650000008100457869748050726F6365737300E640A30046696E6400486F00757263654100ED0000476574456E766972006F6E6D656E7453744072696E6773" & _
			"41002A0020AC014C6F61062B000012BA000F636B053B00000E800252746C556E770050000057025365745468427200B25072696F007C790000630253697A656F" & _
			"0266073100006402536C806565700047004380150474650319000080005F8866646F83834F015F8104005F6F736668616E64826C006300F5016162815F000002"
	$bBinary &= "63616C6C6F6311814F0B0266020A0C026610636C6F730113001602226682221B02668145001C038103800C200266736565006B0022026674656C806C0039005F" & _
			"6365808C1181234D026D862953026DA0656D637079810B5581050182B800005902706F7791000A5A027000907466810F205F02726169003B6602090012627582" & _
			"096A027369C181E5740273747284230090306D6D2E64803A801AF000041000D4006B65726E65686C3332850A14C009E1006DA07376637274430D28C00CF9FF00" & _
			"0010C910C13AFF007F107F10637F107F100000208408E20010D580014660005060006260005F00FF3F043F043F043F043F043F043F043F047F3F043F043F043F" & _
			"043F042104E03D740001000031308C30680031A131AE31B331C00031C531D531DB31F00031923233338A348F0034943499349E34BA0034BF34C434C934CE0034" & _
			"39359F35B835C90035E635ED350E362D003646365B3667366D003673368F36FA363C0037433775378137D60037E337EF37FB37070038133827382F383D003844" & _
			"3853386F387800388A389138A538B700381B3930394C39520039613966398539A10039AE39BF39C739CC0039D439DA39E039E90039EF39F539FB3900003A113A" & _
			"1D3A283A33003A393A3F3A4A3A52003A573A5F3A653A83003A8A3A923A9A3AA4003AAC3AB13AB83AC6003ACC3AD53ADB3AE1003AE73AED3AF73AFC003A023B10" & _
			"3B163B1C003B223B283B2E3B34003B493B523B6D3B76003B913B9A3BB73BBC003BC23BD03BE93BEF003B143C1B3C5A3C63003C6C3C7D3C853C91003C973CA93C" & _
			"AF3CB5003CC73CCD3CD33CE4003CEC3CF73C0B3D11003D1D3D253D3C3D41003D483D503D663D6C003D7A3D833D8B3D93003D9E3DA43DAA3DB2003DB83DC23DC8" & _
			"3DD1003D093E0F3E153E1B003E203E283E2E3E34003E3A3E403E9F3EAD603E5F3F6D3F802E006D9801C00041304F3001329600329A329E32A232A60032AA32AE" & _
			"32B232B60032BA32D932E232F200321B33243334336200336B337B331F344701E02E7E3587359035A00035D535FE3655375B0037623783378A392B003B3E3E42" & _
			"3E463E4A003E4E3E523E563E5A003E5E3E623E663E6A003E6E3E723E763E7A003E7E3E823E863E8A003E8E3E923E963E9A003E9E3EA23EA63EAA003EAE3EB23E" & _
			"B63E0D003F193F2C3F323F00043000A060000022330800350C35103514351800351C35203524352800352C35303534353800353C3540353536520036E6364E37" & _
			"8038A30038C4399C3AB23AE9003A273B953BA03B2A003C763C7C3C823C8A443C8F30149C3CA37614D7003CDC3CE13CEF3C5B003D623D6D3D733D79003D7F3D89" & _
			"3D923D97003D9D3DC33DCB3DD3003DF03DF63DFC3D02103E083E0DB0131A3E32403E383E3E3E44500D4F003E573E5C3E613E6F51B00C7C3E84700C90500C9E04"
	$bBinary &= "3EA4100CB03EB83EBE003EC43ECA3ED03ED8003EDE3EE43EEA3EF0003EF53E073F1E3F28003F2E3F4E3F573F63003F6F3F753F863F9C003FB43FC13FD03FD810" & _
			"3FDE3FF5711840000002AC70181530263030300038306B307C3082300088308E30AB30B43000C13012311A3120310026312E3134313C31004231473151315E31" & _
			"006431693171317931007F31873191319B3120C931D631E1B032FD3100033223322E32B53200C032D732E432EA32005A33663372337E33008A339633A233EA33" & _
			"00F63302340E341A3400263432343E344A3400563462346E347A3408863492D035AA34B63402C2301EDA34E634F23400FE340A3516352235002E353A35463552" & _
			"35E000E000000CB00A311A411A0254B10034043408340C00341034143418342C00343034343438343C00344034443448344C00345034603464346800346C3470" & _
			"3474347800347C34803484348810348C3490103D98349C0034A034A434A834ACF834B034E1043F001F011F011F01FF1F011F011F011F011F011F011F011F01FF" & _
			"1F011F011F011F011F011F011F011F01FF1F011F011F011F011F011F011F011F010831301C903000002810640100A0600008200231003875F000583000783000" & _
			"5803622802501500001030001E30002C41300086140000B63000E6553000F43000883003943000A4553000B03000BC3000D03000E8153000F430000090060200" & _
			"03000004000500060007000046726565536F6EE667710610C04F7292C65307F0008E52C2AEE000B00054696DA2B50200D1C046726F6D46691F22B9C202350139" & _
			"BE8101506C61C332B4B10053746F7071003F00FF1F011F011F011F011F011F011F011F013F1F011F011F011F011F011501"

	Local $tBinary = DllStructCreate("byte[13873]")
	DllStructSetData($tBinary, 1, $bBinary)

	Local $tOut = DllStructCreate("byte[19968]")

	; Decompression:
	Local $aCall = DllCall("ntdll.dll", "int", "RtlDecompressBuffer", _
			"ushort", 2, _
			"ptr", DllStructGetPtr($tOut), _
			"dword", DllStructGetSize($tOut), _
			"ptr", DllStructGetPtr($tBinary), _
			"dword", DllStructGetSize($tBinary), _
			"dword*", 0)

	Return DllStructGetData($tOut, 1)

EndFunc   ;==>_XMdll







