1
1
Fork 0
mirror of https://github.com/pbatard/rufus.git synced 2024-08-14 23:57:05 +00:00

[grub] add Grub 2.0 support

* Also moves secondary Grub boot record as a resource
* Also fix a typo in README.txt and update signtool path
* Closes #340
This commit is contained in:
Pete Batard 2014-11-17 23:41:46 +00:00
parent 306191fb85
commit b3947fc026
17 changed files with 105 additions and 758 deletions

View file

@ -15,7 +15,7 @@ Compilation:
Use either Visual Studio 2013, WDK 7.1 (Windows Driver Kit) or MinGW and then
invoke the .sln, wdk_build.cmd or configure/make respectively.
Note that, since Rufus is a OSI compliant Open Source project, you are entitled to
Note that, since Rufus is an OSI compliant Open Source project, you are entitled to
download and use the *freely available* Visual Studio 2013 Community Edition to
build, run or develop for Rufus. As per the Visual Studio Community Edition license
this applies regardless of whether you are an individual or a corporate user.

View file

@ -1,6 +1,6 @@
:retry
@set /p password=Please enter PFX password:
@"C:\Program Files (x86)\Windows Kits\8.0\bin\x64\signtool" sign /v /f D:\Secured\akeo\akeo.p12 /p %password% /tr http://timestamp.comodoca.com/rfc3161 %1 %2 %3 %4
@"C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool" sign /v /f D:\Secured\akeo\akeo.p12 /p %password% /tr http://timestamp.comodoca.com/rfc3161 %1 %2 %3 %4
@if ERRORLEVEL 1 goto retry
@set password=
@exit

BIN
res/grub/grldr.mbr Normal file

Binary file not shown.

10
res/grub/readme.txt Normal file
View file

@ -0,0 +1,10 @@
grldr.mbr was compiled on Linux Debian 7.7.0 x64, using gcc-multilib 4.7.2,
from https://github.com/chenall/grub4dos/commit/8549aae.
Note that, for convenience reasons, the first 512 bytes from this grldr.mbr are
*not* the ones that Rufus processes when writing the actual MBR (first 512 bytes).
Instead, the byte array from src/ms-sys/inc/mbr_grub.h (whose content is identical)
is what Rufus uses. If you have modified this file, and the MBR section is
altered, be mindful that you also need to update the array in mbr_grub.h.
For details, see src/format.c.

BIN
res/grub2/boot.img Normal file

Binary file not shown.

BIN
res/grub2/core.img Normal file

Binary file not shown.

16
res/grub2/readme.txt Normal file
View file

@ -0,0 +1,16 @@
boot.img and core.img were compiled from git://git.savannah.gnu.org/grub.git,
commit 72ec399ad8d6348b6c74ea63d80c79784c8b84ae, on a Debian 7.7.0 x64 system.
This was done following the guide from:
http://pete.akeo.ie/2014/05/compiling-and-installing-grub2-for.html.
boot.img has been modified to nop the jump @ 0x66 as per grub2's setup.c comments:
/* If DEST_DRIVE is a hard disk, enable the workaround, which is
for buggy BIOSes which don't pass boot drive correctly. Instead,
they pass 0x00 or 0x01 even when booted from 0x80. */
Note that, for convenience reasons, the content of boot.img is *not* the one that
Rufus processes when writing the MBR.
Instead, the byte array from src/ms-sys/inc/mbr_grub2.h (whose content is identical)
is what Rufus uses. If you modify these files, be mindful that you may also need
to update the array in mbr_grub2.h.

View file

@ -914,7 +914,7 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive)
} else if (((dt == DT_ISO) && (iso_report.has_grub4dos)) || (dt == DT_GRUB4DOS)) {
uprintf(using_msg, "Grub4DOS");
r = write_grub_mbr(&fake_fd);
} else if (dt == DT_GRUB2) {
} else if (((dt == DT_ISO) && (iso_report.has_grub2)) || (dt == DT_GRUB2)) {
uprintf(using_msg, "Grub 2.0");
r = write_grub2_mbr(&fake_fd);
} else if (dt == DT_REACTOS) {
@ -942,6 +942,41 @@ out:
return r;
}
/*
* Write Secondary Boot Record (usually right after the MBR)
*/
static BOOL WriteSBR(HANDLE hPhysicalDrive)
{
BOOL r = FALSE;
DWORD size;
int dt = (int)ComboBox_GetItemData(hBootType, ComboBox_GetCurSel(hBootType));
unsigned char* buf = NULL;
FILE fake_fd = { 0 };
const char* using_msg = "Using %s SBR\n";
fake_fd._ptr = (char*)hPhysicalDrive;
fake_fd._bufsiz = SelectedDrive.Geometry.BytesPerSector;
if ((dt == DT_GRUB4DOS) || ((dt == DT_ISO) && (iso_report.has_grub4dos))) {
buf = GetResource(hMainInstance, MAKEINTRESOURCEA(IDR_GR_GRUB_GRLDR_MBR), _RT_RCDATA, "grldr.mbr", &size, FALSE);
if ((buf != NULL) && (size > 0x200)) {
uprintf(using_msg, "Grub4DOS");
// -0x200 to remove the MBR part
r = (write_data(&fake_fd, 512, &buf[0x200], (uint64_t)(size - 0x200)) != 0);
}
} else if ((dt == DT_GRUB2) || ((dt == DT_ISO) && (iso_report.has_grub2))) {
buf = GetResource(hMainInstance, MAKEINTRESOURCEA(IDR_GR_GRUB2_CORE_IMG), _RT_RCDATA, "core.img", &size, FALSE);
if (buf != NULL) {
uprintf(using_msg, "Grub 2.0");
// TODO: test what happens for 4096 bytes sectors
r = (write_data(&fake_fd, 512, buf, (uint64_t)size) != 0);
}
} else {
// No need to write secondary block
r = TRUE;
}
return r;
}
/*
* Process the Partition Boot Record
*/
@ -1505,7 +1540,7 @@ DWORD WINAPI FormatThread(void* param)
// Thanks to Microsoft, we must fix the MBR AFTER the drive has been formatted
if (pt == PARTITION_STYLE_MBR) {
PrintStatus(0, TRUE, MSG_228); // "Writing master boot record..."
if (!WriteMBR(hPhysicalDrive)) {
if ((!WriteMBR(hPhysicalDrive)) || (!WriteSBR(hPhysicalDrive))) {
if (!IS_ERROR(FormatStatus))
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT;
goto out;
@ -1540,8 +1575,8 @@ DWORD WINAPI FormatThread(void* param)
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE;
goto out;
}
} else if ((((dt == DT_WINME) || (dt == DT_FREEDOS) || (dt == DT_GRUB4DOS) || (dt == DT_REACTOS)) &&
(!use_large_fat32)) || ((dt == DT_ISO) && ((fs == FS_NTFS)||(iso_report.has_kolibrios||iso_report.has_grub4dos)))) {
} else if ((((dt == DT_WINME) || (dt == DT_FREEDOS) || (dt == DT_GRUB4DOS) || (dt == DT_GRUB2) || (dt == DT_REACTOS)) &&
(!use_large_fat32)) || ((dt == DT_ISO) && ((fs == FS_NTFS)||(iso_report.has_kolibrios||IS_GRUB(iso_report))))) {
// We still have a lock, which we need to modify the volume boot record
// => no need to reacquire the lock...
hLogicalVolume = GetLogicalHandle(DriveIndex, TRUE, FALSE);

View file

@ -62,6 +62,7 @@ static const char* grldr_name = "grldr";
static const char* ldlinux_name = "ldlinux.sys";
static const char* ldlinux_c32 = "ldlinux.c32";
static const char* efi_dirname = "/efi/boot";
static const char* grub_dirname = "/boot/grub"; // NB: We don't support nonstandard config dir such as AROS' "/boot/pc/grub/"
static const char* syslinux_cfg[] = { "isolinux.cfg", "syslinux.cfg", "extlinux.conf"};
static const char dot_isolinux_bin[] = ".\\isolinux.bin";
static const char* isolinux_bin = &dot_isolinux_bin[2];
@ -166,6 +167,13 @@ static BOOL check_iso_props(const char* psz_dirname, BOOL* is_syslinux_cfg, BOOL
if (safe_stricmp(psz_dirname, efi_dirname) == 0)
iso_report.has_efi = TRUE;
// Check for the Grub boot directory
// TODO: If there is a need to point to a different config file, as we do with Syslinux,
// see http://www.gnu.org/software/grub/manual/grub.html#Embedded-configuration
// However, this allegedly requires normal.mod (105 KB!) to be in core.img...
if (safe_stricmp(psz_dirname, grub_dirname) == 0)
iso_report.has_grub2 = TRUE;
// Check for PE (XP) specific files in "/i386" or "/minint"
for (i=0; i<ARRAYSIZE(pe_dirname); i++)
if (safe_stricmp(psz_dirname, pe_dirname[i]) == 0)

View file

@ -124,7 +124,6 @@ int is_grub_mbr(FILE *fp)
{
#include "mbr_grub.h"
unsigned char aucRef[] = {0x55, 0xAA};
(void)mbr_grub_0x200; /* silence unused variable warning */
return
contains_data(fp, 0x0, mbr_grub_0x0, sizeof(mbr_grub_0x0)) &&
@ -268,8 +267,7 @@ int write_grub_mbr(FILE *fp)
return
write_data(fp, 0x0, mbr_grub_0x0, sizeof(mbr_grub_0x0)) &&
write_data(fp, 0x1FE, aucRef, sizeof(aucRef)) &&
write_data(fp, 0x200, mbr_grub_0x200, sizeof(mbr_grub_0x200));
write_data(fp, 0x1FE, aucRef, sizeof(aucRef));
}
int write_grub2_mbr(FILE *fp)

View file

@ -4,7 +4,7 @@
#include <stdint.h>
/* Max valid value of uiLen for contains_data */
#define MAX_DATA_LEN 16384
#define MAX_DATA_LEN 32768
/* Checks if a file contains a data pattern of length Len at position
Position. The file pointer will change when calling this function! */

View file

@ -1,4 +1,6 @@
/* First 432 bytes of MBR from Grub4DOS */
/*
* First 432 bytes of MBR from Grub4DOS (Converted from res/grub4dos/grldr.mbr)
*/
unsigned char mbr_grub_0x0[] = {
0xEB, 0x5E, 0x80, 0x00, 0x20, 0x39, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@ -37,733 +39,3 @@ unsigned char mbr_grub_0x0[] = {
0x6E, 0x67, 0x20, 0x4D, 0x42, 0x52, 0x2D, 0x68, 0x65, 0x6C, 0x70, 0x65,
0x72, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
/* Remaining 8704 bytes from the higher GRUB MBR data */
unsigned char mbr_grub_0x200[] = {
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0xB2, 0x7F,
0xE9, 0x91, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x58, 0x90, 0x47,
0x52, 0x4C, 0x44, 0x52, 0x20, 0x20, 0x20, 0x00, 0x02, 0x01, 0x01, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x12, 0x00, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x29, 0x63, 0xAF, 0xC4, 0x0A, 0x4E, 0x4F, 0x20, 0x4E, 0x41,
0x4D, 0x45, 0x20, 0x20, 0x20, 0x20, 0x46, 0x41, 0x54, 0x33, 0x32, 0x20,
0x20, 0x20, 0xFA, 0xFC, 0xB6, 0xFF, 0x80, 0xFE, 0xFF, 0x75, 0x02, 0xB2,
0x00, 0x31, 0xC0, 0xBD, 0x00, 0x7C, 0x8E, 0xD0, 0x8D, 0x66, 0xE0, 0xFB,
0x89, 0x56, 0x40, 0x16, 0xB4, 0x41, 0xBB, 0xAA, 0x55, 0xCD, 0x13, 0x1F,
0x72, 0x10, 0x81, 0xFB, 0x55, 0xAA, 0x75, 0x0A, 0xF6, 0xC1, 0x01, 0x74,
0x05, 0xC6, 0x06, 0x90, 0x7D, 0x42, 0x16, 0x07, 0x66, 0x31, 0xC0, 0x66,
0x89, 0x46, 0x44, 0x8B, 0x46, 0x0E, 0x66, 0x03, 0x46, 0x1C, 0x66, 0x89,
0x46, 0x48, 0x66, 0x89, 0x46, 0x4C, 0x66, 0x8B, 0x46, 0x10, 0x66, 0xF7,
0x66, 0x24, 0x66, 0x01, 0x46, 0x4C, 0x66, 0x8B, 0x46, 0x2C, 0x66, 0x50,
0xE8, 0x8B, 0x00, 0xBE, 0xBD, 0x7D, 0x0F, 0x82, 0x2F, 0x01, 0xC4, 0x9E,
0xE8, 0x01, 0xE8, 0x99, 0x00, 0x31, 0xFF, 0xB9, 0x0B, 0x00, 0xBE, 0xC0,
0x7D, 0xF3, 0xA6, 0x74, 0x15, 0x83, 0xC7, 0x20, 0x83, 0xE7, 0xE0, 0x3B,
0x7E, 0x0B, 0x75, 0xEB, 0x4A, 0x75, 0xDF, 0x66, 0x58, 0xE8, 0x2A, 0x00,
0xEB, 0xCC, 0x26, 0xFF, 0x75, 0x09, 0x26, 0xFF, 0x75, 0x0F, 0x66, 0x58,
0x31, 0xDB, 0x66, 0x50, 0xE8, 0x4B, 0x00, 0x73, 0x08, 0x8B, 0x56, 0x40,
0x52, 0xFF, 0xAE, 0xE8, 0x01, 0xE8, 0x5A, 0x00, 0x4A, 0x75, 0xFA, 0x66,
0x58, 0xE8, 0x02, 0x00, 0xEB, 0xE4, 0x06, 0x53, 0x66, 0xC1, 0xE0, 0x02,
0x66, 0x0F, 0xB7, 0x5E, 0x0B, 0x66, 0xF7, 0xF3, 0x66, 0x03, 0x46, 0x48,
0xBB, 0x60, 0x00, 0x8E, 0xC3, 0x31, 0xDB, 0x66, 0x3B, 0x46, 0x44, 0x74,
0x07, 0x66, 0x89, 0x46, 0x44, 0xE8, 0x2A, 0x00, 0x26, 0x67, 0x80, 0x62,
0x03, 0x0F, 0x26, 0x67, 0x66, 0x8B, 0x02, 0x5B, 0x07, 0xC3, 0x66, 0x3D,
0xF8, 0xFF, 0xFF, 0x0F, 0xF5, 0x72, 0x12, 0x66, 0x48, 0x66, 0x48, 0x66,
0x0F, 0xB6, 0x56, 0x0D, 0x52, 0x66, 0xF7, 0xE2, 0x5A, 0x66, 0x03, 0x46,
0x4C, 0xC3, 0x66, 0x60, 0x66, 0x31, 0xD2, 0x66, 0x52, 0x66, 0x50, 0x06,
0x53, 0x6A, 0x01, 0x6A, 0x10, 0x66, 0x31, 0xC9, 0x66, 0xFF, 0x76, 0x18,
0x59, 0x66, 0xF7, 0xF1, 0x42, 0x59, 0x52, 0x31, 0xD2, 0x66, 0xF7, 0xF1,
0x86, 0xD6, 0x59, 0x86, 0xC5, 0xC0, 0xE4, 0x06, 0x08, 0xE1, 0xB8, 0x01,
0x02, 0x89, 0xE6, 0x8A, 0x56, 0x40, 0x06, 0x1E, 0xCD, 0x13, 0x1F, 0x07,
0x61, 0x66, 0x61, 0x72, 0x4D, 0x66, 0x40, 0x03, 0x5E, 0x0B, 0x73, 0x09,
0x52, 0x8C, 0xC2, 0x80, 0xC6, 0x10, 0x8E, 0xC2, 0x5A, 0xC3, 0x64, 0x69,
0x73, 0x6B, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x00, 0x4E, 0x6F, 0x20,
0x47, 0x52, 0x4C, 0x44, 0x52, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xC0, 0x59, 0xBE, 0xB2,
0x7D, 0xAC, 0xB4, 0x0E, 0xCD, 0x10, 0x3C, 0x00, 0x75, 0xF7, 0xEB, 0xFE,
0x00, 0x00, 0x55, 0xAA, 0xEB, 0x3C, 0x90, 0x47, 0x52, 0x4C, 0x44, 0x52,
0x20, 0x20, 0x20, 0x00, 0x02, 0x01, 0x01, 0x00, 0x02, 0xE0, 0x00, 0x40,
0x0B, 0xF0, 0x09, 0x00, 0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x63, 0xAF, 0xC4, 0x0A, 0x4E,
0x4F, 0x20, 0x4E, 0x41, 0x4D, 0x45, 0x20, 0x20, 0x20, 0x20, 0x46, 0x41,
0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0xFA, 0xFC, 0xB6, 0xFF, 0x80, 0xFE,
0xFF, 0x75, 0x02, 0xB2, 0x00, 0x31, 0xC0, 0xBD, 0x00, 0x7C, 0x8E, 0xD0,
0x8D, 0x66, 0xE0, 0xFB, 0x89, 0x56, 0x24, 0x60, 0xB4, 0x41, 0xBB, 0xAA,
0x55, 0x52, 0xCD, 0x13, 0x5A, 0x16, 0x1F, 0x72, 0x14, 0x81, 0xFB, 0x55,
0xAA, 0x75, 0x0E, 0xF6, 0xC1, 0x01, 0x74, 0x09, 0x84, 0xD2, 0x79, 0x05,
0xC6, 0x06, 0x98, 0x7D, 0x42, 0x61, 0x8E, 0xC0, 0x8B, 0x76, 0x1C, 0x8B,
0x7E, 0x1E, 0x03, 0x76, 0x0E, 0x11, 0xC7, 0x89, 0x76, 0x28, 0x89, 0x7E,
0x2A, 0x8A, 0x46, 0x10, 0xF7, 0x66, 0x16, 0x01, 0xC6, 0x11, 0xD7, 0x89,
0x76, 0x2C, 0x89, 0x7E, 0x2E, 0x8B, 0x5E, 0x0B, 0xB1, 0x05, 0xD3, 0xEB,
0x8B, 0x46, 0x11, 0x01, 0xD8, 0x48, 0xF7, 0xF3, 0x99, 0x89, 0x46, 0x26,
0x01, 0xC6, 0x11, 0xD7, 0x89, 0x76, 0x30, 0x89, 0x7E, 0x32, 0xC7, 0x46,
0x36, 0xFF, 0xFF, 0x8B, 0x46, 0x16, 0xF7, 0x66, 0x0B, 0x72, 0x03, 0x89,
0x46, 0x36, 0x8B, 0x46, 0x2C, 0x8B, 0x56, 0x2E, 0x8B, 0x4E, 0x26, 0xC4,
0x9E, 0xE8, 0x01, 0xE8, 0x8D, 0x00, 0xC4, 0xBE, 0xE8, 0x01, 0xBE, 0xC3,
0x7D, 0xB1, 0x0B, 0x57, 0xF3, 0xA6, 0x5F, 0x74, 0x10, 0x83, 0xC7, 0x20,
0x74, 0x05, 0x26, 0x38, 0x2D, 0x75, 0xEB, 0xBE, 0xC0, 0x7D, 0xE9, 0xF8,
0x00, 0x26, 0xFF, 0x75, 0x1A, 0x8B, 0x4E, 0x16, 0x8B, 0x46, 0x28, 0x8B,
0x56, 0x2A, 0x06, 0xE8, 0x5D, 0x00, 0x1F, 0x58, 0x1E, 0x16, 0x07, 0xBF,
0x00, 0x20, 0xAB, 0x89, 0xC6, 0x5A, 0x52, 0x01, 0xF6, 0x73, 0x03, 0x80,
0xC6, 0x10, 0x81, 0x7E, 0x36, 0x01, 0x18, 0x73, 0x13, 0x01, 0xC6, 0xD1,
0xEE, 0xAD, 0x73, 0x04, 0xB1, 0x04, 0xD3, 0xE8, 0x80, 0xE4, 0x0F, 0x3D,
0xF7, 0x0F, 0xEB, 0x06, 0x8E, 0xDA, 0xAD, 0x83, 0xF8, 0xF7, 0x76, 0xD2,
0x31, 0xC0, 0xAB, 0x07, 0x16, 0x1F, 0xBE, 0x00, 0x20, 0xAD, 0x83, 0xE8,
0x02, 0x72, 0x10, 0x8A, 0x4E, 0x0D, 0xF7, 0xE1, 0x03, 0x46, 0x30, 0x13,
0x56, 0x32, 0xE8, 0x0A, 0x00, 0xEB, 0xEA, 0x8B, 0x56, 0x24, 0x52, 0xFF,
0xAE, 0xE8, 0x01, 0x9C, 0x60, 0x31, 0xC9, 0x51, 0x51, 0x52, 0x50, 0x06,
0x53, 0x41, 0x51, 0xB1, 0x10, 0x51, 0x91, 0x53, 0x52, 0x8B, 0x46, 0x18,
0x89, 0xC3, 0xF7, 0x66, 0x1A, 0x91, 0x5A, 0xF7, 0xF1, 0x92, 0xF6, 0xF3,
0x86, 0xC4, 0x40, 0x92, 0x91, 0x86, 0xCD, 0xD0, 0xC9, 0xD0, 0xC9, 0x08,
0xD1, 0x5B, 0xB8, 0x01, 0x02, 0x89, 0xE6, 0x8A, 0x56, 0x24, 0x06, 0x1E,
0xCD, 0x13, 0x1F, 0x72, 0x49, 0x5B, 0x8D, 0x5F, 0x20, 0x8E, 0xC3, 0x61,
0x61, 0x9D, 0x40, 0x75, 0x01, 0x42, 0xE2, 0xB3, 0xC3, 0x64, 0x69, 0x73,
0x6B, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x00, 0x4E, 0x6F, 0x20, 0x47,
0x52, 0x4C, 0x44, 0x52, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x20, 0xC3, 0x59, 0xBE, 0xB5, 0x7D, 0xAC, 0xB4, 0x0E,
0xCD, 0x10, 0x3C, 0x00, 0x75, 0xF7, 0xEB, 0xFE, 0x00, 0x00, 0x55, 0xAA,
0xEB, 0x2E, 0x02, 0x49, 0x2F, 0x4F, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72,
0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00,
0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0B, 0x00, 0x00,
0x00, 0xFF, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0xFC, 0x31, 0xC0, 0x90, 0x8E, 0xD0, 0xBC, 0x00, 0x7C, 0x89, 0xE5, 0x50,
0xBB, 0x00, 0x10, 0x53, 0x50, 0x88, 0x56, 0x24, 0x16, 0xB4, 0x41, 0xBB,
0xAA, 0x55, 0xCD, 0x13, 0x1F, 0x72, 0x09, 0xD0, 0xD9, 0x73, 0x05, 0xC6,
0x06, 0xC5, 0x7D, 0x42, 0x66, 0x31, 0xC0, 0xB0, 0x02, 0x57, 0x16, 0x9C,
0x66, 0x48, 0x66, 0x99, 0x66, 0xF7, 0x76, 0x28, 0x66, 0x52, 0x66, 0x99,
0x66, 0xC1, 0xE0, 0x05, 0x66, 0xF7, 0x76, 0x0E, 0x52, 0x66, 0x03, 0x46,
0x2C, 0xE8, 0x0B, 0x01, 0x5E, 0x66, 0x58, 0x8B, 0x56, 0x26, 0x66, 0xF7,
0xE2, 0x66, 0xF7, 0x76, 0x0E, 0x52, 0x66, 0x03, 0x40, 0x08, 0xE8, 0xF6,
0x00, 0x5E, 0x01, 0xDE, 0x16, 0x07, 0x8D, 0x7F, 0xA8, 0xB1, 0x2C, 0xF3,
0xA5, 0x66, 0x89, 0x4D, 0xB4, 0x66, 0x8B, 0x45, 0xAC, 0x66, 0x48, 0x66,
0xF7, 0x76, 0x0E, 0x66, 0x40, 0x66, 0x89, 0x45, 0xB0, 0x66, 0xAD, 0x66,
0x85, 0xC0, 0x74, 0x1B, 0xB7, 0x80, 0xE8, 0xC7, 0x00, 0x66, 0xAD, 0x66,
0x85, 0xC0, 0x74, 0x0F, 0xB7, 0xC0, 0xE8, 0xBB, 0x00, 0x66, 0xAD, 0x66,
0x85, 0xC0, 0x74, 0x03, 0xE8, 0xB4, 0x00, 0x66, 0x8B, 0x5D, 0xB4, 0x66,
0x83, 0xEB, 0x0C, 0x72, 0x4F, 0x53, 0x66, 0x2B, 0x5E, 0x14, 0x58, 0x73,
0x05, 0x80, 0xC4, 0x1C, 0xEB, 0x41, 0x66, 0x53, 0x66, 0x2B, 0x5E, 0x10,
0x72, 0x1C, 0x66, 0x58, 0x66, 0x93, 0x66, 0xF7, 0x76, 0x10, 0x66, 0x52,
0x66, 0x85, 0xD2, 0x75, 0x0D, 0xC1, 0xE0, 0x02, 0x93, 0x66, 0x8B, 0x01,
0xBB, 0x00, 0xC0, 0xE8, 0x76, 0x00, 0x66, 0x58, 0x66, 0x99, 0x66, 0xF7,
0x76, 0x14, 0x52, 0x85, 0xD2, 0x75, 0x0F, 0xC1, 0xE0, 0x02, 0x93, 0x66,
0x8B, 0x81, 0x00, 0xB0, 0xBB, 0x00, 0x80, 0xE8, 0x5A, 0x00, 0x58, 0x93,
0xC1, 0xE3, 0x02, 0x66, 0x8B, 0x01, 0x9D, 0x5B, 0x07, 0x9C, 0xE8, 0x4E,
0x00, 0x9D, 0x06, 0x53, 0x9C, 0x72, 0x2D, 0x31, 0xF6, 0x16, 0x07, 0x1E,
0x8E, 0xDF, 0xBF, 0xE3, 0x7D, 0x56, 0x66, 0xAD, 0x66, 0x50, 0xAD, 0x92,
0xAD, 0xFE, 0xCC, 0x91, 0xF3, 0xA6, 0x75, 0x02, 0x91, 0xAE, 0x66, 0x58,
0x5E, 0x8C, 0xDF, 0x1F, 0xF9, 0x0F, 0x84, 0xF8, 0xFE, 0x01, 0xD6, 0x3B,
0x76, 0x0E, 0x72, 0xD7, 0x66, 0xFF, 0x45, 0xB4, 0x66, 0xFF, 0x4D, 0xB0,
0x0F, 0x85, 0x5B, 0xFF, 0xBE, 0xE0, 0x7D, 0x73, 0x76, 0x8B, 0x56, 0x24,
0x52, 0x57, 0x16, 0xCB, 0x16, 0x07, 0xF9, 0x72, 0x08, 0xC4, 0x5E, 0xFC,
0x75, 0x03, 0xC4, 0x5E, 0xFA, 0x66, 0x0F, 0xB6, 0x4E, 0x0D, 0x66, 0xF7,
0xE1, 0x66, 0x03, 0x46, 0x1C, 0x66, 0x60, 0x66, 0x52, 0x66, 0x50, 0x06,
0x53, 0x6A, 0x01, 0x6A, 0x10, 0x66, 0xFF, 0x76, 0x18, 0x59, 0x66, 0xF7,
0xF1, 0x42, 0x59, 0x52, 0x31, 0xD2, 0x66, 0xF7, 0xF1, 0x86, 0xD6, 0x59,
0x86, 0xC5, 0xC0, 0xE4, 0x06, 0x08, 0xE1, 0x40, 0xB4, 0x02, 0x89, 0xE6,
0x8A, 0x56, 0x24, 0x06, 0x1E, 0xCD, 0x13, 0x1F, 0x5B, 0x72, 0x1D, 0x8D,
0x5F, 0x20, 0x8E, 0xC3, 0x61, 0x66, 0x61, 0x66, 0x40, 0xE2, 0xBE, 0xC3,
0x4E, 0x6F, 0x20, 0x67, 0x72, 0x6C, 0x64, 0x72, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE3, 0x51, 0xBE, 0x03, 0x7C, 0xAC, 0xB4, 0x0E, 0xCD, 0x10,
0x3C, 0x00, 0x75, 0xF7, 0xEB, 0xFE, 0x55, 0xAA, 0xEB, 0x52, 0x90, 0x4E,
0x54, 0x46, 0x53, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xFF, 0x00, 0x3F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFC, 0xB6, 0xFF,
0x31, 0xC0, 0xBD, 0x00, 0x7C, 0x8E, 0xD0, 0x8D, 0x66, 0xE0, 0xFB, 0x89,
0x56, 0xFE, 0x50, 0xB4, 0x41, 0xBB, 0xAA, 0x55, 0xCD, 0x13, 0x1F, 0x72,
0x10, 0x81, 0xFB, 0x55, 0xAA, 0x75, 0x0A, 0xF6, 0xC1, 0x01, 0x74, 0x05,
0xC6, 0x86, 0xAA, 0x01, 0x42, 0x16, 0x07, 0x66, 0x81, 0xBE, 0xFC, 0x07,
0x47, 0x52, 0x55, 0x42, 0x74, 0x13, 0xBB, 0x00, 0x7E, 0x66, 0x8B, 0x86,
0x1C, 0x00, 0x66, 0x40, 0xE8, 0xE1, 0x00, 0xE8, 0xDE, 0x00, 0xE8, 0xDB,
0x00, 0x66, 0x31, 0xC0, 0x8B, 0x46, 0x0B, 0x89, 0x46, 0xFC, 0xE8, 0x8C,
0x00, 0x88, 0xCB, 0x8A, 0x46, 0x0D, 0xE8, 0x84, 0x00, 0x88, 0xCD, 0x00,
0xDD, 0x80, 0xED, 0x09, 0x88, 0x6E, 0xFB, 0x8A, 0x46, 0x44, 0xE8, 0x65,
0x00, 0x80, 0xF9, 0x03, 0x76, 0x05, 0xB0, 0x01, 0xE9, 0xFB, 0x00, 0x88,
0x4E, 0xF9, 0x8A, 0x46, 0x40, 0xE8, 0x52, 0x00, 0x80, 0xF9, 0x01, 0x75,
0xED, 0x88, 0x4E, 0xFA, 0x66, 0x8B, 0x46, 0x30, 0x88, 0xE9, 0x66, 0xD3,
0xE0, 0x66, 0x03, 0x86, 0x1C, 0x00, 0x66, 0x89, 0x46, 0xF4, 0xBA, 0x01,
0x00, 0x8A, 0x4E, 0xFA, 0xD3, 0xE2, 0x89, 0xD1, 0xBB, 0x00, 0x20, 0x53,
0xE8, 0x79, 0x00, 0xE2, 0xFB, 0x5B, 0x81, 0x3F, 0x46, 0x49, 0x75, 0x6C,
0x89, 0xD1, 0xE8, 0x34, 0x00, 0x89, 0xDF, 0xB0, 0x80, 0xE8, 0x40, 0x02,
0x72, 0x5E, 0xBB, 0x00, 0x38, 0x66, 0x31, 0xC0, 0xB0, 0x05, 0xE8, 0x8A,
0x03, 0x89, 0xDF, 0xE9, 0xD6, 0x00, 0x08, 0xC0, 0x78, 0x04, 0x88, 0xE9,
0xEB, 0x09, 0xF6, 0xD8, 0x2C, 0x09, 0x88, 0xC1, 0xC3, 0x30, 0xC9, 0xFE,
0xC1, 0x66, 0xD1, 0xE8, 0x73, 0xF9, 0xFE, 0xC9, 0xC3, 0x53, 0x57, 0x89,
0xDF, 0x8B, 0x47, 0x06, 0x48, 0x89, 0xC3, 0xF7, 0x66, 0xFC, 0xC1, 0xE1,
0x09, 0x39, 0xC1, 0x75, 0x1F, 0x89, 0xD9, 0x89, 0xFB, 0x03, 0x5F, 0x04,
0x8B, 0x07, 0x83, 0xEF, 0x02, 0x03, 0x7E, 0xFC, 0x83, 0xC3, 0x02, 0x3B,
0x05, 0x75, 0x09, 0x8B, 0x17, 0x89, 0x15, 0xE2, 0xF0, 0x5F, 0x5B, 0xC3,
0xB0, 0x02, 0xEB, 0x4E, 0x66, 0x60, 0x66, 0x31, 0xD2, 0x66, 0x52, 0x66,
0x50, 0x06, 0x53, 0x6A, 0x01, 0x6A, 0x10, 0x66, 0x31, 0xC9, 0x66, 0xFF,
0x76, 0x18, 0x59, 0x66, 0xF7, 0xF1, 0x42, 0x59, 0x52, 0x31, 0xD2, 0x66,
0xF7, 0xF1, 0x86, 0xD6, 0x59, 0x86, 0xC5, 0xC0, 0xE4, 0x06, 0x08, 0xE1,
0xB8, 0x01, 0x02, 0x89, 0xE6, 0x8A, 0x56, 0xFE, 0xCD, 0x13, 0x61, 0x66,
0x61, 0x72, 0x37, 0x66, 0x40, 0x03, 0x5E, 0x0B, 0x73, 0x09, 0x52, 0x8C,
0xC2, 0x80, 0xC6, 0x10, 0x8E, 0xC2, 0x5A, 0xC3, 0x30, 0x00, 0x00, 0x86,
0xC8, 0x01, 0xEB, 0x1E, 0x4E, 0x6F, 0x20, 0x67, 0x72, 0x6C, 0x64, 0x72,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xD3, 0xA1, 0xBE, 0xC8,
0x7D, 0xAC, 0xB4, 0x0E, 0xCD, 0x10, 0x3C, 0x00, 0x75, 0xF7, 0xEB, 0xFE,
0x00, 0x00, 0x55, 0xAA, 0xE8, 0x6F, 0x01, 0xB0, 0x90, 0xE8, 0x85, 0x01,
0x0F, 0x82, 0xBE, 0x00, 0x66, 0x81, 0x7C, 0x08, 0x00, 0x04, 0x18, 0x00,
0x75, 0xEF, 0x03, 0x74, 0x14, 0x80, 0x3C, 0x30, 0x75, 0xE7, 0x83, 0xC6,
0x10, 0x03, 0x34, 0xE8, 0xF5, 0x00, 0x0F, 0x83, 0xA7, 0x00, 0xE8, 0x45,
0x01, 0xB0, 0xB0, 0xE8, 0x5B, 0x01, 0x0F, 0x82, 0x94, 0x00, 0x8B, 0x5C,
0x09, 0x80, 0xFB, 0x04, 0x75, 0xF1, 0x80, 0x7C, 0x08, 0x00, 0x75, 0x09,
0xFF, 0x74, 0x10, 0x03, 0x74, 0x14, 0x56, 0xEB, 0x1B, 0xFF, 0x74, 0x30,
0x66, 0x31, 0xD2, 0x66, 0x8B, 0x4C, 0x28, 0x81, 0xF9, 0x00, 0x10, 0x77,
0x6D, 0x66, 0xC1, 0xE9, 0x09, 0xBB, 0x00, 0x60, 0x53, 0xE8, 0xB9, 0x02,
0xB0, 0xA0, 0xE8, 0xEB, 0x00, 0x72, 0x5B, 0x66, 0x81, 0x7C, 0x08, 0x01,
0x04, 0x40, 0x00, 0x75, 0xF1, 0x8A, 0x4E, 0xF9, 0x66, 0x31, 0xDB, 0xB3,
0x01, 0x66, 0xD3, 0xE3, 0x66, 0x31, 0xD2, 0x5E, 0x59, 0x51, 0xAC, 0xB9,
0x08, 0x00, 0x51, 0x50, 0xA8, 0x01, 0x74, 0x2A, 0x56, 0x66, 0x52, 0x66,
0x53, 0x66, 0x89, 0xD9, 0xBB, 0x00, 0x50, 0xE8, 0x3A, 0x02, 0x72, 0x26,
0x81, 0x3F, 0x49, 0x4E, 0x75, 0x20, 0xE8, 0x98, 0xFE, 0x89, 0xDE, 0x83,
0xC6, 0x18, 0x03, 0x34, 0xE8, 0x64, 0x00, 0x73, 0x18, 0x66, 0x5B, 0x66,
0x5A, 0x5E, 0x66, 0x01, 0xDA, 0x58, 0xD0, 0xE8, 0x59, 0xE2, 0xC7, 0x59,
0xE2, 0xBF, 0x8D, 0xB6, 0xD0, 0x01, 0xE9, 0x20, 0xFF, 0x83, 0x7C, 0x04,
0x00, 0x0F, 0x85, 0xF1, 0xFD, 0x66, 0x8B, 0x04, 0x89, 0xFB, 0xE8, 0xCE,
0x01, 0xB0, 0x80, 0xE8, 0x72, 0x00, 0x72, 0x2E, 0x80, 0x7C, 0x08, 0x01,
0x74, 0x0E, 0x8B, 0x4C, 0x10, 0xC4, 0xBE, 0xE8, 0x01, 0x03, 0x74, 0x14,
0xF3, 0xA4, 0xEB, 0x12, 0x66, 0x31, 0xD2, 0x66, 0x8B, 0x4C, 0x28, 0x66,
0xC1, 0xE9, 0x09, 0xC4, 0x9E, 0xE8, 0x01, 0xE8, 0x13, 0x02, 0x8B, 0x56,
0xFE, 0x52, 0xFF, 0xAE, 0xE8, 0x01, 0xB0, 0x04, 0xE9, 0xAF, 0xFE, 0x89,
0xF3, 0xF6, 0x47, 0x0C, 0x02, 0x74, 0x02, 0xF9, 0xC3, 0x30, 0xED, 0x56,
0x8D, 0xB6, 0xD3, 0x01, 0x83, 0xC3, 0x52, 0x8A, 0x4F, 0xFE, 0xAC, 0x8A,
0x27, 0x80, 0xFC, 0x41, 0x72, 0x08, 0x80, 0xFC, 0x5A, 0x77, 0x03, 0x80,
0xC4, 0x20, 0x38, 0xE0, 0x75, 0x0C, 0x43, 0x43, 0xE2, 0xE8, 0x80, 0x3C,
0x00, 0x75, 0x03, 0x5E, 0xF8, 0xC3, 0x5E, 0x03, 0x74, 0x08, 0xEB, 0xC3,
0xE8, 0x17, 0x00, 0xE8, 0x2F, 0x00, 0x72, 0x11, 0xF6, 0x05, 0x04, 0x75,
0x0B, 0xE8, 0x25, 0x00, 0x73, 0xF6, 0xE8, 0x05, 0x00, 0xE8, 0x1D, 0x00,
0xF8, 0xC3, 0x50, 0x31, 0xC0, 0x89, 0x05, 0x89, 0x45, 0x06, 0x8B, 0x45,
0x14, 0x01, 0xF8, 0x89, 0x45, 0x04, 0x58, 0x81, 0xFF, 0x00, 0x20, 0x75,
0x03, 0x80, 0x0D, 0x02, 0xC3, 0x8B, 0x5D, 0x04, 0xF6, 0x05, 0x04, 0x75,
0x66, 0x89, 0xDE, 0x80, 0x3C, 0xFF, 0x74, 0x16, 0x80, 0x3C, 0x20, 0x75,
0x03, 0x89, 0x75, 0x06, 0x03, 0x5F, 0x04, 0x38, 0x04, 0x75, 0xEA, 0x89,
0x5D, 0x04, 0x89, 0x75, 0x02, 0xC3, 0x83, 0x7D, 0x06, 0x01, 0x72, 0xF9,
0x8B, 0x75, 0x06, 0x80, 0x7C, 0x08, 0x00, 0x75, 0x0A, 0x89, 0xF3, 0x03,
0x5F, 0x14, 0x03, 0x74, 0x04, 0xEB, 0x22, 0x66, 0x8B, 0x4C, 0x28, 0x66,
0xC1, 0xE9, 0x09, 0x83, 0xF9, 0x08, 0x0F, 0x87, 0x9E, 0xFD, 0x8D, 0x9D,
0x00, 0x08, 0x50, 0x66, 0x31, 0xD2, 0xE8, 0x3C, 0x01, 0x58, 0x72, 0xC9,
0x8B, 0x74, 0x30, 0x01, 0xDE, 0x89, 0x75, 0x06, 0x80, 0x0D, 0x04, 0xF6,
0x05, 0x02, 0x74, 0x03, 0xE8, 0x5C, 0x00, 0x89, 0xDE, 0x3B, 0x5D, 0x06,
0x72, 0x02, 0xF9, 0xC3, 0x03, 0x5F, 0x04, 0x38, 0x04, 0x75, 0xF0, 0x50,
0x06, 0x1E, 0x07, 0x89, 0x75, 0x02, 0x89, 0x5D, 0x04, 0x66, 0x8B, 0x44,
0x10, 0x8D, 0x9D, 0x00, 0x04, 0xF6, 0x05, 0x02, 0x75, 0x05, 0xE8, 0x8A,
0x00, 0xEB, 0x1A, 0x53, 0xE8, 0x51, 0xFD, 0x66, 0x8B, 0x44, 0x14, 0xE8,
0x4A, 0xFD, 0x5B, 0x81, 0x3F, 0x46, 0x49, 0x0F, 0x85, 0x3D, 0xFD, 0xB9,
0x02, 0x00, 0xE8, 0x04, 0xFD, 0x07, 0x58, 0x03, 0x5F, 0x14, 0x80, 0x3F,
0xFF, 0x74, 0xB7, 0x38, 0x07, 0x74, 0x05, 0x03, 0x5F, 0x04, 0xEB, 0xF2,
0x89, 0xDE, 0xC3, 0x50, 0x80, 0x0D, 0x08, 0x3B, 0x5D, 0x06, 0x0F, 0x83,
0x16, 0xFD, 0x38, 0x07, 0x74, 0x05, 0x03, 0x5F, 0x04, 0xEB, 0xF0, 0x89,
0x5D, 0x02, 0x66, 0x8B, 0x46, 0xF4, 0x66, 0x89, 0x47, 0x10, 0x66, 0x40,
0x66, 0x89, 0x47, 0x14, 0x03, 0x5F, 0x04, 0x3B, 0x5D, 0x06, 0x73, 0x23,
0x80, 0x3F, 0x80, 0x75, 0x1E, 0x66, 0x8B, 0x57, 0x10, 0x8A, 0x4E, 0xFA,
0x66, 0xD3, 0xE2, 0xE8, 0x46, 0x00, 0x66, 0x09, 0xC0, 0x0F, 0x84, 0xDB,
0xFC, 0x66, 0x89, 0x47, 0x10, 0x66, 0x89, 0x57, 0x14, 0xEB, 0xD5, 0x8B,
0x5D, 0x02, 0x80, 0x25, 0xF7, 0x58, 0xC3, 0x57, 0xBF, 0x00, 0x20, 0x8A,
0x4E, 0xFA, 0x66, 0xD3, 0xE0, 0x66, 0x89, 0xC2, 0x66, 0xB8, 0x01, 0x00,
0x00, 0x00, 0x66, 0xD3, 0xE0, 0x66, 0x89, 0xC1, 0xE8, 0x11, 0x00, 0x0F,
0x82, 0xA9, 0xFC, 0x81, 0x3F, 0x46, 0x49, 0x0F, 0x85, 0xA1, 0xFC, 0xE8,
0x6B, 0xFC, 0x5F, 0xC3, 0xFF, 0x75, 0x02, 0x66, 0x52, 0x66, 0x51, 0x53,
0x8B, 0x75, 0x02, 0x8A, 0x04, 0xF6, 0x05, 0x04, 0x74, 0x1E, 0x89, 0xF3,
0x8A, 0x4E, 0xFB, 0x66, 0xD3, 0xEA, 0x3B, 0x5D, 0x06, 0x73, 0x11, 0x38,
0x07, 0x75, 0x0D, 0x66, 0x39, 0x57, 0x08, 0x77, 0x07, 0x89, 0xDE, 0x03,
0x5F, 0x04, 0xEB, 0xEA, 0x89, 0x75, 0x04, 0xE8, 0x7B, 0xFE, 0x5B, 0x66,
0x59, 0x66, 0x5A, 0x72, 0x04, 0xE8, 0x05, 0x00, 0xF8, 0x8F, 0x45, 0x02,
0xC3, 0x51, 0x53, 0xF6, 0x44, 0x08, 0x01, 0x0F, 0x84, 0x4D, 0xFC, 0x8A,
0x44, 0x0C, 0x24, 0x01, 0x08, 0x05, 0x66, 0x89, 0x4D, 0x1C, 0x8A, 0x4E,
0xFB, 0x66, 0x89, 0xD0, 0x66, 0xD3, 0xE8, 0x66, 0x89, 0x45, 0x18, 0x66,
0xD3, 0xE0, 0x66, 0x29, 0xC2, 0x66, 0x89, 0x55, 0x20, 0x31, 0xD2, 0x66,
0x89, 0x55, 0x10, 0x66, 0x8B, 0x54, 0x10, 0x03, 0x74, 0x20, 0xE8, 0xC7,
0x00, 0x66, 0x3B, 0x55, 0x18, 0x76, 0xF7, 0x8A, 0x4E, 0xFB, 0x66, 0x09,
0xC0, 0x74, 0x47, 0x66, 0x8B, 0x45, 0x18, 0x66, 0x2B, 0x45, 0x08, 0x66,
0x03, 0x45, 0x10, 0x66, 0xD3, 0xE0, 0x66, 0x03, 0x45, 0x20, 0xF6, 0x05,
0x08, 0x74, 0x2A, 0x66, 0x50, 0x66, 0x40, 0x66, 0x2B, 0x55, 0x08, 0x66,
0x03, 0x55, 0x10, 0x66, 0xD3, 0xE2, 0x66, 0x39, 0xC2, 0x75, 0x0C, 0x51,
0xE8, 0x89, 0x00, 0x59, 0x66, 0x8B, 0x45, 0x10, 0x66, 0xD3, 0xE0, 0x66,
0x89, 0xC2, 0x66, 0x58, 0x66, 0x03, 0x96, 0x1C, 0x00, 0x66, 0x03, 0x86,
0x1C, 0x00, 0xF6, 0x05, 0x08, 0x75, 0x4A, 0x66, 0x53, 0x66, 0x89, 0xD3,
0x66, 0x2B, 0x5D, 0x18, 0x66, 0xD3, 0xE3, 0x66, 0x89, 0xD9, 0x66, 0x5B,
0x66, 0x2B, 0x4D, 0x20, 0x66, 0xC7, 0x45, 0x20, 0x00, 0x00, 0x00, 0x00,
0x66, 0x3B, 0x4D, 0x1C, 0x76, 0x04, 0x66, 0x8B, 0x4D, 0x1C, 0x66, 0x51,
0x66, 0x09, 0xC0, 0x75, 0x05, 0xE8, 0xC7, 0x00, 0xEB, 0x05, 0xE8, 0x8F,
0xFB, 0xE2, 0xFB, 0x66, 0x59, 0x66, 0x29, 0x4D, 0x1C, 0x76, 0x0A, 0x66,
0x89, 0x55, 0x18, 0xE8, 0x26, 0x00, 0xE9, 0x62, 0xFF, 0x5B, 0x59, 0xC3,
0x66, 0x31, 0xC0, 0x84, 0xC9, 0x74, 0x13, 0x51, 0xAC, 0x66, 0xC1, 0xC8,
0x08, 0xFE, 0xC9, 0x75, 0xF7, 0x59, 0xF6, 0xD9, 0x80, 0xC1, 0x04, 0xC0,
0xE1, 0x03, 0xC3, 0xB0, 0x03, 0xE9, 0xA6, 0xFB, 0xAC, 0x88, 0xC1, 0x88,
0xCD, 0x80, 0xE1, 0x0F, 0x74, 0x1D, 0xC0, 0xED, 0x04, 0xE8, 0xD0, 0xFF,
0x66, 0xD3, 0xE8, 0x66, 0x89, 0x55, 0x08, 0x66, 0x01, 0xC2, 0x88, 0xE9,
0xE8, 0xC1, 0xFF, 0x66, 0xD3, 0xF8, 0x66, 0x01, 0x45, 0x10, 0xC3, 0xF6,
0x05, 0x04, 0x74, 0xCF, 0x66, 0x52, 0x53, 0x8B, 0x75, 0x02, 0x8A, 0x04,
0xE8, 0x32, 0xFD, 0x72, 0xC2, 0x80, 0x7C, 0x08, 0x00, 0x74, 0xBC, 0x66,
0xC7, 0x45, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x66, 0x5A, 0x03, 0x74,
0x20, 0xEB, 0xB1, 0x55, 0x89, 0xE5, 0x66, 0x31, 0xC0, 0x87, 0x46, 0x06,
0x66, 0xC1, 0xE0, 0x04, 0x66, 0x03, 0x46, 0x04, 0x5D, 0xC2, 0x04, 0x00,
0x55, 0x89, 0xE5, 0x66, 0xC1, 0x66, 0x04, 0x0C, 0xC1, 0x6E, 0x04, 0x0C,
0x5D, 0xC3, 0x1E, 0x56, 0xE8, 0xD8, 0xFF, 0x66, 0x50, 0xE8, 0xE8, 0xFF,
0x5E, 0x1F, 0x06, 0x57, 0xE8, 0xCC, 0xFF, 0x66, 0x50, 0xE8, 0xDC, 0xFF,
0x5F, 0x07, 0xC3, 0x57, 0x66, 0x52, 0x66, 0xC1, 0xE1, 0x09, 0xF6, 0x05,
0x01, 0x74, 0x43, 0x66, 0x31, 0xD2, 0x8A, 0x55, 0x18, 0x80, 0xE2, 0x0F,
0x74, 0x38, 0x89, 0xDF, 0x51, 0x8A, 0x4E, 0xFB, 0x80, 0xC1, 0x09, 0x66,
0xD3, 0xE2, 0x06, 0x57, 0xE8, 0x9C, 0xFF, 0x66, 0x29, 0xD0, 0x66, 0xC7,
0x46, 0xF0, 0x10, 0x00, 0x00, 0x00, 0x66, 0xD3, 0x66, 0xF0, 0x59, 0x66,
0x01, 0xD1, 0x66, 0x2B, 0x4E, 0xF0, 0x66, 0x51, 0xE8, 0x39, 0x00, 0x66,
0x59, 0x66, 0x03, 0x4E, 0xF0, 0x67, 0xE3, 0x2A, 0x89, 0xFB, 0x89, 0xDF,
0x66, 0x89, 0xCA, 0x66, 0x31, 0xC0, 0x66, 0x89, 0xC1, 0xE8, 0x96, 0xFF,
0xB9, 0x00, 0x80, 0x66, 0x39, 0xD1, 0x76, 0x02, 0x89, 0xD1, 0x51, 0xC1,
0xE9, 0x02, 0x66, 0xF3, 0xAB, 0xE8, 0x82, 0xFF, 0x59, 0x66, 0x29, 0xCA,
0x75, 0xE6, 0x89, 0xFB, 0x66, 0x5A, 0x5F, 0xC3, 0x1E, 0x56, 0xFC, 0x66,
0x50, 0xE8, 0x54, 0xFF, 0x5E, 0x1F, 0x66, 0x8B, 0x56, 0xF0, 0x66, 0x01,
0xD0, 0x66, 0x50, 0xE8, 0x46, 0xFF, 0x5F, 0x07, 0x06, 0x57, 0x1E, 0x56,
0x66, 0x31, 0xC9, 0xB9, 0x00, 0x80, 0x66, 0x39, 0xD1, 0x76, 0x02, 0x89,
0xD1, 0x51, 0xC1, 0xE9, 0x02, 0x66, 0xF3, 0xA5, 0xE8, 0x37, 0xFF, 0x59,
0x66, 0x29, 0xCA, 0x75, 0xE6, 0x5F, 0x07, 0x5E, 0x1F, 0x66, 0x31, 0xD2,
0xAD, 0xF6, 0xC4, 0x80, 0x75, 0x0A, 0xB9, 0x00, 0x08, 0xF3, 0xA5, 0xBA,
0x00, 0x10, 0xEB, 0x5D, 0x89, 0xC1, 0x81, 0xE1, 0xFF, 0x0F, 0x41, 0x01,
0xF1, 0x30, 0xFF, 0x81, 0xFA, 0x00, 0x10, 0x77, 0x5E, 0x08, 0xFF, 0x75,
0x05, 0xAC, 0x88, 0xC3, 0xB7, 0x08, 0xF6, 0xC3, 0x01, 0x74, 0x34, 0x89,
0xD0, 0x48, 0x51, 0x53, 0xB1, 0x0C, 0x83, 0xF8, 0x10, 0x72, 0x06, 0xD1,
0xE8, 0xFE, 0xC9, 0xEB, 0xF5, 0xAD, 0x89, 0xC3, 0xD3, 0xEB, 0x52, 0xBA,
0x01, 0x00, 0xD3, 0xE2, 0x4A, 0x21, 0xD0, 0x5A, 0x83, 0xC0, 0x03, 0x89,
0xC1, 0xF7, 0xDB, 0x4B, 0x26, 0x8A, 0x01, 0xAA, 0x42, 0xE2, 0xF9, 0x5B,
0x59, 0xEB, 0x02, 0xA4, 0x42, 0xD0, 0xEB, 0xFE, 0xCF, 0x39, 0xCE, 0x72,
0xAE, 0xE8, 0xBA, 0xFE, 0x66, 0x29, 0x56, 0xF0, 0x74, 0x06, 0x81, 0xFA,
0x00, 0x10, 0x74, 0x81, 0x5E, 0x1F, 0xC3, 0x16, 0x1F, 0xB0, 0x05, 0xE9,
0xD8, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x47, 0x52, 0x55, 0x42, 0xE8, 0x00, 0x00, 0x5B, 0x8C, 0xC8, 0xC1, 0xEB,
0x04, 0x01, 0xC3, 0x53, 0x68, 0x10, 0x00, 0xCB, 0x66, 0x31, 0xC0, 0x89,
0xD8, 0x66, 0xC1, 0xE0, 0x04, 0x66, 0x05, 0x60, 0x00, 0x00, 0x00, 0x2E,
0x66, 0xA3, 0x62, 0x00, 0xBB, 0x00, 0x20, 0x8E, 0xC3, 0x8C, 0xDB, 0xFA,
0x2E, 0x0F, 0x01, 0x16, 0x60, 0x00, 0x0F, 0x20, 0xC0, 0x0C, 0x01, 0x0F,
0x22, 0xC0, 0xBE, 0x08, 0x00, 0x8E, 0xDE, 0x66, 0x31, 0xF6, 0x66, 0x31,
0xFF, 0x66, 0xB9, 0x00, 0x24, 0x00, 0x00, 0xFC, 0x66, 0xF3, 0xA5, 0xBE,
0x10, 0x00, 0x8E, 0xDE, 0x24, 0xFE, 0x0F, 0x22, 0xC0, 0x8E, 0xDB, 0xEA,
0x4F, 0x01, 0x00, 0x20, 0x17, 0x00, 0x60, 0x12, 0x02, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0x00, 0x00, 0x20, 0x92, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00,
0x00, 0x92, 0x00, 0x00, 0xFB, 0x0E, 0x1F, 0x68, 0x00, 0x0D, 0x07, 0x1E,
0x06, 0x66, 0x60, 0x9C, 0x2E, 0xF6, 0x06, 0x02, 0x00, 0x0C, 0x74, 0x19,
0x06, 0x31, 0xC0, 0x8E, 0xC0, 0xBF, 0xFC, 0x05, 0x66, 0xB8, 0x44, 0x55,
0x43, 0x45, 0x2E, 0xA0, 0x02, 0x00, 0x24, 0x0C, 0x0C, 0x40, 0x66, 0xAB,
0x07, 0x2E, 0xF6, 0x06, 0x02, 0x00, 0x80, 0x75, 0x24, 0x2E, 0x80, 0x3E,
0x03, 0x00, 0x00, 0x74, 0x12, 0xBE, 0xA9, 0x1D, 0xE8, 0xCF, 0xEE, 0xBE,
0xE8, 0x1F, 0xE8, 0xC9, 0xEE, 0xBE, 0xB2, 0x1D, 0xE8, 0xC3, 0xEE, 0xE8,
0xFB, 0x08, 0x72, 0x2D, 0xE8, 0x00, 0x08, 0xEB, 0x28, 0x2E, 0x80, 0x3E,
0x03, 0x00, 0x00, 0x74, 0x12, 0xBE, 0xA9, 0x1D, 0xE8, 0xAB, 0xEE, 0xBE,
0xE8, 0x1F, 0xE8, 0xA5, 0xEE, 0xBE, 0xE9, 0x1D, 0xE8, 0x9F, 0xEE, 0xE8,
0xD7, 0x08, 0x73, 0x09, 0x2E, 0x80, 0x26, 0x02, 0x00, 0x7F, 0xE8, 0xD6,
0x07, 0xC7, 0x06, 0xD1, 0x12, 0xEB, 0x32, 0x2E, 0x80, 0x0E, 0x02, 0x00,
0x80, 0x9D, 0x66, 0x61, 0x07, 0x1F, 0x1E, 0x06, 0x66, 0x60, 0x9C, 0xC6,
0x06, 0x00, 0x00, 0x02, 0xB4, 0x41, 0xBB, 0xAA, 0x55, 0xE8, 0x23, 0xEE,
0x72, 0x10, 0x81, 0xFB, 0x55, 0xAA, 0x75, 0x0A, 0xF6, 0xC1, 0x01, 0x74,
0x05, 0xC6, 0x06, 0x00, 0x00, 0x42, 0x9D, 0x66, 0x61, 0x07, 0x1F, 0x1E,
0x06, 0x66, 0x60, 0x9C, 0x60, 0x81, 0xFE, 0xC2, 0x01, 0x75, 0x0C, 0xC7,
0x06, 0xBC, 0x01, 0xFF, 0xFF, 0xC7, 0x06, 0xBA, 0x01, 0xFE, 0x01, 0x52,
0x1E, 0x06, 0xE8, 0x1A, 0x0A, 0x07, 0x1F, 0x84, 0xD2, 0x79, 0x15, 0x81,
0xFE, 0xF2, 0x01, 0x77, 0x0F, 0x66, 0x8B, 0x44, 0x04, 0x66, 0x89, 0x44,
0x08, 0x66, 0x31, 0xC0, 0x66, 0x89, 0x44, 0x04, 0x60, 0x83, 0x3E, 0x08,
0x00, 0xFF, 0x75, 0x1B, 0xC7, 0x06, 0x08, 0x00, 0x3F, 0xFE, 0xB4, 0x08,
0x1E, 0x06, 0xCD, 0x13, 0x07, 0x1F, 0x72, 0x0B, 0x80, 0xE1, 0x3F, 0x74,
0x06, 0x88, 0xF5, 0x89, 0x0E, 0x08, 0x00, 0x61, 0x66, 0x31, 0xDB, 0x84,
0xD2, 0x79, 0x0E, 0x66, 0x8B, 0x5C, 0x04, 0x66, 0x03, 0x5C, 0x08, 0x66,
0x85, 0xDB, 0xF9, 0x74, 0x5A, 0x80, 0x3E, 0x00, 0x00, 0x42, 0x74, 0x3C,
0xBD, 0x00, 0x00, 0xA1, 0x08, 0x00, 0x89, 0xC2, 0xB6, 0x00, 0x89, 0x16,
0x18, 0x00, 0x88, 0xE2, 0x42, 0x89, 0x16, 0x1A, 0x00, 0x58, 0x50, 0xA2,
0x24, 0x00, 0xFF, 0x36, 0xA3, 0x07, 0xC7, 0x06, 0xA3, 0x07, 0xEB, 0x00,
0x06, 0x66, 0x53, 0x66, 0x53, 0x31, 0xDB, 0xB9, 0x21, 0x00, 0x58, 0x5A,
0xE8, 0x88, 0xF3, 0x66, 0x5B, 0x07, 0x8F, 0x06, 0xA3, 0x07, 0xEB, 0x17,
0x58, 0x50, 0x31, 0xD2, 0x52, 0x52, 0x66, 0x53, 0x06, 0x52, 0x6A, 0x3F,
0x6A, 0x10, 0x92, 0xB4, 0x42, 0x89, 0xE6, 0xE8, 0x41, 0xED, 0x61, 0x5A,
0x61, 0x58, 0x66, 0x61, 0x07, 0x1F, 0x1E, 0x06, 0x66, 0x60, 0x9C, 0x56,
0x9C, 0x06, 0x1E, 0x07, 0xFC, 0x31, 0xC0, 0x84, 0xD2, 0x79, 0x10, 0xFF,
0x06, 0xBC, 0x01, 0xA1, 0xBC, 0x01, 0x3C, 0x04, 0x72, 0x05, 0xC6, 0x06,
0x22, 0x01, 0xFC, 0x50, 0xBF, 0x37, 0x1F, 0x88, 0xD0, 0xC0, 0xE8, 0x07,
0xD0, 0xE0, 0x05, 0x66, 0x64, 0xAB, 0x88, 0xD0, 0x24, 0x7F, 0xD4, 0x0A,
0x84, 0xE4, 0x74, 0x06, 0x80, 0xC4, 0x30, 0x88, 0x25, 0x47, 0x04, 0x30,
0xAA, 0x58, 0x84, 0xD2, 0x79, 0x13, 0xC6, 0x05, 0x2C, 0x47, 0xD4, 0x0A,
0x84, 0xE4, 0x74, 0x06, 0x80, 0xC4, 0x30, 0x88, 0x25, 0x47, 0x04, 0x30,
0xAA, 0x66, 0xC7, 0x05, 0x29, 0x3A, 0x20, 0x00, 0xBE, 0x30, 0x1F, 0xE8,
0x1C, 0xED, 0x07, 0x9D, 0x0F, 0x82, 0x58, 0x04, 0x31, 0xF6, 0x06, 0x1F,
0x81, 0x3E, 0x38, 0x04, 0x53, 0xEF, 0x0F, 0x85, 0x2C, 0x01, 0x66, 0x31,
0xC0, 0x66, 0x39, 0x06, 0x00, 0x04, 0x0F, 0x84, 0x20, 0x01, 0x66, 0x39,
0x06, 0x04, 0x04, 0x0F, 0x84, 0x17, 0x01, 0x66, 0x39, 0x06, 0x20, 0x04,
0x0F, 0x84, 0x0E, 0x01, 0x66, 0x39, 0x06, 0x28, 0x04, 0x0F, 0x84, 0x05,
0x01, 0x66, 0xA1, 0x14, 0x04, 0x89, 0xC3, 0x66, 0xD1, 0xE8, 0x0F, 0x85,
0xF8, 0x00, 0x66, 0x8B, 0x0E, 0x18, 0x04, 0x66, 0x83, 0xF9, 0x04, 0x0F,
0x87, 0xEB, 0x00, 0xF7, 0xD9, 0x11, 0xC3, 0x4B, 0x0F, 0x85, 0xE2, 0x00,
0xB8, 0x80, 0x00, 0x2E, 0xA3, 0x26, 0x08, 0x66, 0x8B, 0x0E, 0x4C, 0x04,
0x67, 0xE3, 0x29, 0xA1, 0x58, 0x04, 0x85, 0xC0, 0x0F, 0x84, 0xCA, 0x00,
0x50, 0x52, 0x8A, 0x0E, 0x18, 0x04, 0x80, 0xC1, 0x0A, 0x31, 0xD2, 0x42,
0xD3, 0xE2, 0x91, 0x92, 0x31, 0xD2, 0xF7, 0xF1, 0x85, 0xD2, 0x5A, 0x58,
0x0F, 0x85, 0xAE, 0x00, 0x2E, 0xA3, 0x26, 0x08, 0xFC, 0xBE, 0x00, 0x08,
0x31, 0xFF, 0xB9, 0x00, 0x02, 0x2E, 0xF3, 0xA5, 0x84, 0xD2, 0x79, 0x08,
0xBF, 0x25, 0x00, 0x2E, 0xA1, 0xBC, 0x01, 0xAA, 0x5E, 0x56, 0x66, 0x31,
0xC0, 0x84, 0xD2, 0x79, 0x0A, 0x2E, 0x66, 0x8B, 0x44, 0x04, 0x2E, 0x66,
0x03, 0x44, 0x08, 0x26, 0x66, 0x89, 0x47, 0x1C, 0x2E, 0x8A, 0x07, 0x26,
0x88, 0x47, 0x02, 0x26, 0x8A, 0x0E, 0x18, 0x04, 0x66, 0xB8, 0x02, 0x00,
0x00, 0x00, 0xD3, 0xE0, 0x26, 0x88, 0x47, 0x0D, 0xC1, 0xE0, 0x09, 0x26,
0x89, 0x47, 0x0E, 0xC1, 0xE8, 0x02, 0x26, 0x66, 0x89, 0x47, 0x14, 0x80,
0xC1, 0x08, 0x66, 0xD3, 0xE0, 0x26, 0x66, 0x89, 0x47, 0x10, 0x2E, 0x8B,
0x47, 0x08, 0x83, 0xF8, 0xFF, 0x74, 0x0C, 0x26, 0x88, 0x47, 0x18, 0xC1,
0xE8, 0x08, 0x40, 0x26, 0x89, 0x47, 0x1A, 0x26, 0x66, 0xA1, 0x28, 0x04,
0x26, 0x66, 0x89, 0x47, 0x28, 0x26, 0x66, 0xA1, 0x14, 0x04, 0x40, 0x26,
0x66, 0x89, 0x47, 0x2C, 0xBE, 0xFC, 0x01, 0x89, 0xF7, 0xAD, 0x3D, 0xEB,
0xFE, 0x75, 0x09, 0x48, 0xAA, 0xB8, 0x10, 0x84, 0xAB, 0x31, 0xC0, 0xAB,
0xBE, 0x42, 0x1F, 0xE8, 0xE0, 0xEB, 0xF8, 0xE9, 0x25, 0x03, 0x84, 0xD2,
0x78, 0x4D, 0x2E, 0xC6, 0x06, 0xBC, 0x01, 0xFF, 0x66, 0xA1, 0x1C, 0x40,
0x66, 0x83, 0xF8, 0x20, 0x75, 0x3D, 0x31, 0xDB, 0xBF, 0xC6, 0x01, 0xB9,
0x04, 0x00, 0xFC, 0x66, 0xAF, 0x75, 0x06, 0x46, 0x2E, 0x88, 0x1E, 0xBC,
0x01, 0x83, 0xC7, 0x0C, 0x43, 0xE2, 0xEF, 0x4E, 0x75, 0x21, 0xB0, 0x00,
0xBF, 0x0B, 0x00, 0xB9, 0x4F, 0x00, 0xFC, 0xF3, 0xAE, 0x75, 0x14, 0xBE,
0x0B, 0x40, 0xBF, 0x0B, 0x00, 0xB9, 0x4F, 0x00, 0xFC, 0xF3, 0xA5, 0x86,
0x06, 0x1C, 0x00, 0x01, 0x06, 0x0E, 0x00, 0x31, 0xF6, 0x81, 0x7C, 0x0B,
0x00, 0x02, 0x0F, 0x85, 0xA2, 0x01, 0x8A, 0x44, 0x0D, 0x84, 0xC0, 0x0F,
0x84, 0x99, 0x01, 0x88, 0xC1, 0xB8, 0x80, 0x00, 0xF6, 0xF1, 0x84, 0xE4,
0x0F, 0x85, 0x8C, 0x01, 0x8B, 0x44, 0x18, 0x85, 0xC0, 0x0F, 0x84, 0x83,
0x01, 0x83, 0xF8, 0x3F, 0x0F, 0x87, 0x7C, 0x01, 0x8B, 0x44, 0x1A, 0x48,
0x84, 0xE4, 0x0F, 0x85, 0x72, 0x01, 0x80, 0x7C, 0x15, 0xF0, 0x0F, 0x82,
0x6A, 0x01, 0x2E, 0x80, 0x3E, 0x00, 0x00, 0x42, 0x75, 0x04, 0xC6, 0x44,
0x02, 0x0E, 0xFC, 0xBB, 0x00, 0x06, 0xB9, 0x3C, 0x00, 0x8A, 0x44, 0x10,
0x3C, 0x02, 0x0F, 0x87, 0x4E, 0x01, 0x8B, 0x44, 0x11, 0x85, 0xC0, 0x0F,
0x85, 0xC0, 0x00, 0x8B, 0x44, 0x13, 0x85, 0xC0, 0x0F, 0x85, 0x3C, 0x01,
0x8B, 0x44, 0x16, 0x85, 0xC0, 0x0F, 0x85, 0x33, 0x01, 0x8A, 0x44, 0x10,
0x84, 0xC0, 0x74, 0x22, 0x66, 0x8B, 0x44, 0x20, 0x66, 0x85, 0xC0, 0x0F,
0x84, 0x21, 0x01, 0x66, 0x8B, 0x44, 0x24, 0x66, 0x85, 0xC0, 0x0F, 0x84,
0x16, 0x01, 0xBB, 0x00, 0x04, 0xB9, 0x58, 0x00, 0xBE, 0x51, 0x1F, 0xE9,
0xA0, 0x00, 0x66, 0x8B, 0x44, 0x20, 0x66, 0x85, 0xC0, 0x0F, 0x85, 0xFF,
0x00, 0x8B, 0x44, 0x0E, 0x85, 0xC0, 0x0F, 0x85, 0xF6, 0x00, 0x2E, 0x8B,
0x44, 0x08, 0x83, 0xF8, 0xFF, 0x74, 0x0A, 0x88, 0x44, 0x18, 0xC1, 0xE8,
0x08, 0x40, 0x89, 0x44, 0x1A, 0x5E, 0x56, 0x66, 0x31, 0xC0, 0x84, 0xD2,
0x79, 0x0A, 0x2E, 0x66, 0x8B, 0x44, 0x04, 0x2E, 0x66, 0x03, 0x44, 0x08,
0x66, 0xA3, 0x1C, 0x00, 0x88, 0x16, 0x24, 0x00, 0xBE, 0x49, 0x1F, 0xE8,
0xA0, 0xEA, 0xBB, 0x00, 0x0A, 0xB9, 0x52, 0x00, 0x0E, 0x1F, 0x89, 0xDE,
0x31, 0xFF, 0xAD, 0xAB, 0x01, 0xCE, 0x01, 0xCF, 0xB9, 0x00, 0x08, 0x29,
0xF9, 0xF3, 0xA4, 0x26, 0xA0, 0x01, 0x00, 0x04, 0x05, 0x98, 0x97, 0xA0,
0xBC, 0x01, 0xAA, 0xBF, 0xFA, 0x01, 0x26, 0x8B, 0x05, 0x3D, 0xEB, 0xFE,
0x75, 0x09, 0x48, 0xAA, 0xB8, 0x10, 0x84, 0xAB, 0x31, 0xC0, 0xAB, 0xF8,
0xE9, 0xAC, 0x01, 0x31, 0xF6, 0x8A, 0x44, 0x10, 0x84, 0xC0, 0x74, 0x7C,
0x8B, 0x44, 0x16, 0x85, 0xC0, 0x74, 0x75, 0xBE, 0x59, 0x1F, 0x83, 0xF8,
0x0C, 0x77, 0x03, 0xBE, 0x61, 0x1F, 0x53, 0x51, 0xE8, 0x43, 0xEA, 0x59,
0x5B, 0x31, 0xF6, 0x2E, 0x8B, 0x44, 0x08, 0x83, 0xF8, 0xFF, 0x74, 0x0A,
0x88, 0x44, 0x18, 0xC1, 0xE8, 0x08, 0x40, 0x89, 0x44, 0x1A, 0x5F, 0x57,
0x66, 0x31, 0xC0, 0x84, 0xD2, 0x79, 0x0A, 0x2E, 0x66, 0x8B, 0x45, 0x04,
0x2E, 0x66, 0x03, 0x45, 0x08, 0x66, 0xA3, 0x1C, 0x00, 0x0E, 0x1F, 0x89,
0xDE, 0x31, 0xFF, 0xAD, 0xAB, 0x01, 0xCE, 0x01, 0xCF, 0xB9, 0x00, 0x02,
0x29, 0xF9, 0xF3, 0xA4, 0x26, 0xA0, 0x01, 0x00, 0x04, 0x05, 0x98, 0x97,
0xA0, 0xBC, 0x01, 0xAA, 0xBF, 0xFA, 0x01, 0x26, 0x8B, 0x05, 0x3D, 0xEB,
0xFE, 0x75, 0x09, 0x48, 0xAA, 0xB8, 0x10, 0x84, 0xAB, 0x31, 0xC0, 0xAB,
0xF8, 0xE9, 0x27, 0x01, 0x0E, 0x07, 0x5E, 0x56, 0x26, 0x80, 0x3C, 0x05,
0x74, 0x22, 0x26, 0x80, 0x3C, 0x0F, 0x74, 0x1C, 0x26, 0x80, 0x3C, 0x15,
0x74, 0x16, 0x26, 0x80, 0x3C, 0x1F, 0x74, 0x10, 0x26, 0x80, 0x3C, 0x85,
0x74, 0x0A, 0xBE, 0x69, 0x1F, 0xE8, 0xB6, 0xE9, 0xF9, 0xE9, 0xFB, 0x00,
0x81, 0xFE, 0xFE, 0x01, 0x72, 0x05, 0x26, 0xFF, 0x0E, 0xBC, 0x01, 0xBE,
0x77, 0x1F, 0xE8, 0xA1, 0xE9, 0xBE, 0xBE, 0x01, 0xB9, 0x04, 0x00, 0x66,
0x8B, 0x04, 0x3B, 0x44, 0x02, 0x75, 0x16, 0x38, 0xC4, 0x75, 0x12, 0x66,
0x39, 0x44, 0x04, 0x75, 0x0C, 0x66, 0x39, 0x44, 0x08, 0x75, 0x06, 0x66,
0x39, 0x44, 0x0C, 0x74, 0x30, 0x8A, 0x04, 0xD0, 0xE0, 0x0F, 0x85, 0xB7,
0x00, 0x8A, 0x44, 0x02, 0x24, 0x3F, 0x0F, 0x84, 0xAE, 0x00, 0x8A, 0x44,
0x06, 0x24, 0x3F, 0x0F, 0x84, 0xA5, 0x00, 0x66, 0x8B, 0x44, 0x08, 0x66,
0x85, 0xC0, 0x0F, 0x84, 0x9A, 0x00, 0x66, 0x8B, 0x44, 0x0C, 0x66, 0x85,
0xC0, 0x0F, 0x84, 0x8F, 0x00, 0x83, 0xC6, 0x10, 0xE2, 0xAD, 0x81, 0x3C,
0x55, 0xAA, 0x0F, 0x85, 0x82, 0x00, 0xBE, 0xBE, 0x01, 0xB9, 0x04, 0x00,
0x5B, 0x53, 0x66, 0x8B, 0x04, 0x3B, 0x44, 0x02, 0x75, 0x16, 0x38, 0xC4,
0x75, 0x12, 0x66, 0x39, 0x44, 0x04, 0x75, 0x0C, 0x66, 0x39, 0x44, 0x08,
0x75, 0x06, 0x66, 0x39, 0x44, 0x0C, 0x74, 0x54, 0x26, 0x8B, 0x3E, 0xBA,
0x01, 0x81, 0xFF, 0xF0, 0x83, 0x77, 0x49, 0x81, 0xFF, 0xFE, 0x03, 0x75,
0x08, 0xBF, 0x00, 0x7E, 0x26, 0x89, 0x3E, 0xBA, 0x01, 0x26, 0x83, 0x06,
0xBA, 0x01, 0x10, 0x66, 0xAD, 0x66, 0xAB, 0x66, 0xAD, 0x66, 0xAB, 0x92,
0x66, 0xAD, 0x66, 0x92, 0x3C, 0x05, 0x74, 0x15, 0x3C, 0x0F, 0x74, 0x11,
0x3C, 0x15, 0x74, 0x0D, 0x3C, 0x1F, 0x74, 0x09, 0x3C, 0x85, 0x74, 0x05,
0x26, 0x66, 0x03, 0x57, 0x04, 0x66, 0x92, 0x66, 0xAB, 0x66, 0xAD, 0x26,
0x66, 0x8B, 0x47, 0x08, 0x66, 0xAB, 0xEB, 0x03, 0x83, 0xC6, 0x10, 0xE2,
0x89, 0xF9, 0xEB, 0x07, 0xBE, 0x82, 0x1F, 0xE8, 0xB8, 0xE8, 0xF9, 0x5E,
0x9C, 0x0E, 0x1F, 0x0E, 0x07, 0x56, 0x81, 0xFE, 0x02, 0x02, 0x75, 0x37,
0xBF, 0xFE, 0x01, 0xBE, 0x0E, 0x02, 0xB9, 0xF8, 0x00, 0xFC, 0xF3, 0xA5,
0xBF, 0xEE, 0x03, 0xBE, 0x00, 0x7E, 0xB9, 0x08, 0x00, 0xFC, 0xF3, 0xA5,
0xBF, 0x00, 0x7E, 0xBE, 0x10, 0x7E, 0xB9, 0xF8, 0x02, 0xFC, 0xF3, 0xA5,
0x81, 0x3E, 0xBA, 0x01, 0x10, 0x7E, 0x75, 0x06, 0xC7, 0x06, 0xBA, 0x01,
0x0E, 0x04, 0x83, 0x2E, 0xBA, 0x01, 0x10, 0x5E, 0xB8, 0xFE, 0x01, 0xBF,
0x25, 0x01, 0x89, 0x05, 0x81, 0xFE, 0xB2, 0x31, 0x0F, 0x84, 0x2B, 0x01,
0xFF, 0x05, 0x39, 0x06, 0xBA, 0x01, 0x0F, 0x85, 0x35, 0x01, 0xFF, 0x0D,
0x81, 0xFE, 0xF2, 0x01, 0x77, 0x0D, 0x0F, 0x82, 0x29, 0x01, 0x83, 0x3E,
0xBC, 0x01, 0x03, 0x0F, 0x87, 0x20, 0x01, 0x31, 0xC0, 0x8E, 0xD8, 0x8A,
0x36, 0x75, 0x04, 0x0E, 0x1F, 0x80, 0xCE, 0x80, 0x89, 0xE5, 0x8A, 0x56,
0x18, 0x73, 0x17, 0xE8, 0x2C, 0xE8, 0xBE, 0xC5, 0x1E, 0x88, 0xD0, 0x24,
0x7F, 0xD4, 0x0A, 0x05, 0x30, 0x30, 0x86, 0xC4, 0x89, 0x44, 0x20, 0xE8,
0x18, 0xE8, 0x42, 0x38, 0xF2, 0x0F, 0x83, 0xDA, 0x00, 0x53, 0xB4, 0x08,
0xE8, 0xC0, 0xE7, 0x72, 0x19, 0x80, 0xE1, 0x3F, 0xF9, 0x74, 0x13, 0x5B,
0x88, 0xD5, 0x51, 0xB8, 0x01, 0x02, 0xBB, 0x00, 0x7E, 0xB9, 0x01, 0x00,
0x30, 0xF6, 0xE8, 0xA6, 0xE7, 0xFB, 0x5B, 0xBE, 0xA7, 0x1E, 0x72, 0xB9,
0x84, 0xE4, 0xF9, 0x75, 0xB4, 0xBE, 0xBE, 0x7F, 0xBF, 0xBE, 0x01, 0x81,
0xFF, 0xFE, 0x01, 0x73, 0x73, 0x66, 0x31, 0xC9, 0x66, 0xAD, 0x66, 0xAB,
0x66, 0x09, 0xC1, 0x66, 0xAD, 0x66, 0xAB, 0x66, 0x09, 0xC1, 0x66, 0xAD,
0x66, 0xAB, 0x66, 0x09, 0xC1, 0x66, 0xAD, 0x66, 0xAB, 0x66, 0x09, 0xC1,
0x67, 0xE3, 0xD8, 0x8A, 0x44, 0xF0, 0xD0, 0xE0, 0xF9, 0x96, 0xBE, 0xEA,
0x1E, 0x0F, 0x85, 0x78, 0xFF, 0x96, 0x8A, 0x44, 0xF2, 0x24, 0x3F, 0xF9,
0x96, 0xBE, 0xEA, 0x1E, 0x0F, 0x84, 0x69, 0xFF, 0x96, 0x8A, 0x44, 0xF6,
0x24, 0x3F, 0xF9, 0x96, 0xBE, 0xEA, 0x1E, 0x0F, 0x84, 0x5A, 0xFF, 0x96,
0x66, 0x8B, 0x44, 0xF8, 0x66, 0x85, 0xC0, 0xF9, 0x96, 0xBE, 0xEA, 0x1E,
0x0F, 0x84, 0x49, 0xFF, 0x96, 0x66, 0x8B, 0x44, 0xFC, 0x66, 0x85, 0xC0,
0xF9, 0x96, 0xBE, 0xEA, 0x1E, 0x0F, 0x84, 0x38, 0xFF, 0x96, 0xEB, 0x87,
0x81, 0x3C, 0x55, 0xAA, 0xF9, 0x96, 0xBE, 0xEA, 0x1E, 0x0F, 0x85, 0x28,
0xFF, 0x96, 0x89, 0x5E, 0x0C, 0xC7, 0x46, 0x08, 0xB2, 0x01, 0xC6, 0x06,
0x20, 0x01, 0xE8, 0xC7, 0x06, 0x21, 0x01, 0x78, 0x19, 0xC7, 0x06, 0xBC,
0x01, 0xFF, 0xFF, 0xC7, 0x06, 0xBA, 0x01, 0xFE, 0x01, 0xEB, 0x14, 0xC6,
0x06, 0x37, 0x01, 0xE9, 0xC7, 0x06, 0x38, 0x01, 0x74, 0x19, 0xA0, 0x02,
0x00, 0x24, 0x01, 0x28, 0x06, 0x25, 0x01, 0x58, 0x9D, 0x9F, 0xC0, 0xE4,
0x02, 0xC1, 0xC8, 0x02, 0x9E, 0x72, 0x23, 0x66, 0x61, 0x66, 0x60, 0x9C,
0x2E, 0x80, 0x3E, 0x06, 0x00, 0xFF, 0x74, 0x15, 0x2E, 0x8A, 0x36, 0xBC,
0x01, 0x84, 0xD2, 0x78, 0x02, 0xB6, 0xFF, 0x2E, 0x3B, 0x16, 0x06, 0x00,
0x74, 0x03, 0x9D, 0xF9, 0x9C, 0x9D, 0x66, 0x61, 0x07, 0x1F, 0xC3, 0x83,
0xC6, 0x0C, 0x89, 0xE8, 0x88, 0xE2, 0xC7, 0x06, 0x20, 0x01, 0x83, 0xC6,
0xC6, 0x06, 0x22, 0x01, 0x0C, 0xC3, 0x2E, 0x80, 0x3E, 0x06, 0x00, 0xFF,
0x74, 0x19, 0x2E, 0xC6, 0x06, 0x06, 0x00, 0xFF, 0xB2, 0x7F, 0xF9, 0x68,
0x1C, 0x01, 0x0E, 0x68, 0x00, 0x0D, 0x66, 0x60, 0x9C, 0x9C, 0x0E, 0x07,
0xE9, 0x78, 0xFE, 0x31, 0xC0, 0x8E, 0xC0, 0x8E, 0xD8, 0xB8, 0x02, 0x02,
0xBB, 0x00, 0x7A, 0xB9, 0x01, 0x00, 0xBA, 0x80, 0x00, 0xE8, 0x5B, 0xE6,
0xFB, 0x0F, 0x82, 0xB6, 0x00, 0x84, 0xE4, 0x0F, 0x85, 0xB0, 0x00, 0x81,
0x3E, 0xFE, 0x7D, 0x55, 0xAA, 0x0F, 0x85, 0xA6, 0x00, 0x81, 0x3E, 0xFE,
0x7B, 0x55, 0xAA, 0x0F, 0x85, 0x9C, 0x00, 0xBE, 0xBE, 0x7D, 0x81, 0xFE,
0xFE, 0x7D, 0x73, 0x31, 0xB9, 0x04, 0x00, 0x89, 0xF7, 0x66, 0xAD, 0x66,
0xF7, 0xD8, 0x72, 0x04, 0xE2, 0xF7, 0xEB, 0xEA, 0x89, 0xFE, 0xAD, 0xD0,
0xE0, 0x75, 0x19, 0xAD, 0x24, 0x3F, 0x74, 0x14, 0xAD, 0xAD, 0x24, 0x3F,
0x74, 0x0E, 0x66, 0xAD, 0x66, 0xF7, 0xD8, 0x73, 0x07, 0x66, 0xAD, 0x66,
0xF7, 0xD8, 0x72, 0xCA, 0xF9, 0x9C, 0x2E, 0xF6, 0x06, 0x02, 0x00, 0x02,
0x74, 0x04, 0x9D, 0x72, 0x56, 0x9C, 0x9D, 0x72, 0x0C, 0xBE, 0xB8, 0x7B,
0xBF, 0xB8, 0x7D, 0xB9, 0x24, 0x00, 0xFC, 0xF3, 0xA5, 0x2E, 0xF6, 0x06,
0x02, 0x00, 0x80, 0x74, 0x30, 0xBE, 0xF2, 0x1E, 0xE8, 0x23, 0xE6, 0xBE,
0xD3, 0x0B, 0xE8, 0x1D, 0xE6, 0xBE, 0x97, 0x1D, 0x2E, 0xC7, 0x06, 0x04,
0x00, 0x20, 0x39, 0x2E, 0xC6, 0x06, 0x03, 0x00, 0x0F, 0xE8, 0x0A, 0xE6,
0xBE, 0x6B, 0x1E, 0xE8, 0x04, 0xE6, 0xE8, 0x3C, 0x00, 0x2E, 0xC6, 0x06,
0x03, 0x00, 0xFF, 0x72, 0xF5, 0x66, 0xC7, 0x06, 0xFC, 0x05, 0x00, 0x00,
0x00, 0x00, 0xEA, 0x00, 0x7C, 0x00, 0x00, 0x2E, 0xF6, 0x06, 0x02, 0x00,
0x80, 0x75, 0x0A, 0xBE, 0x33, 0x1E, 0xE8, 0xDD, 0xE5, 0xE8, 0x15, 0x00,
0xC3, 0xBE, 0xF2, 0x1E, 0xE8, 0xD3, 0xE5, 0xBE, 0xD3, 0x0B, 0xE8, 0xCD,
0xE5, 0xBE, 0x01, 0x1F, 0xE8, 0xC7, 0xE5, 0xEB, 0xFE, 0x1E, 0x66, 0x56,
0x66, 0x52, 0x66, 0xBA, 0xFF, 0xFF, 0xFF, 0xFF, 0x2E, 0x66, 0x0F, 0xB6,
0x06, 0x03, 0x00, 0x3C, 0xFF, 0x74, 0x09, 0x66, 0xBA, 0x12, 0x00, 0x00,
0x00, 0xF7, 0xE2, 0x92, 0x31, 0xC0, 0x8E, 0xD8, 0x66, 0xA1, 0x6C, 0x04,
0x66, 0x89, 0xC1, 0x66, 0x85, 0xD2, 0x78, 0x2C, 0x66, 0x01, 0xD0, 0x66,
0x50, 0x2E, 0x66, 0x0F, 0xB6, 0x06, 0x03, 0x00, 0x66, 0x09, 0xC0, 0x74,
0x10, 0xBE, 0x20, 0x1E, 0x66, 0x50, 0xE8, 0x7D, 0xE5, 0x66, 0x58, 0xBE,
0x2C, 0x1E, 0xE8, 0xCF, 0x00, 0x66, 0x89, 0xCE, 0x66, 0x83, 0xC6, 0x12,
0x66, 0x58, 0xEB, 0x06, 0x66, 0x89, 0xD0, 0x66, 0x89, 0xD6, 0x66, 0x8B,
0x1E, 0x6C, 0x04, 0x66, 0x39, 0xCB, 0x73, 0x0C, 0x66, 0x31, 0xC9, 0x66,
0x89, 0xD0, 0x66, 0xBE, 0x12, 0x00, 0x00, 0x00, 0x66, 0x50, 0xB4, 0x01,
0xCD, 0x16, 0x50, 0x9C, 0xB4, 0x11, 0xCD, 0x16, 0x75, 0x3F, 0x9D, 0x75,
0x3D, 0x58, 0x66, 0x58, 0x66, 0x39, 0xF3, 0x72, 0x29, 0x66, 0x56, 0x66,
0x50, 0x66, 0x52, 0x66, 0x29, 0xF0, 0x66, 0x31, 0xD2, 0x66, 0xBE, 0x12,
0x00, 0x00, 0x00, 0x66, 0xF7, 0xF6, 0xBE, 0x2C, 0x1E, 0x66, 0x53, 0xE8,
0x72, 0x00, 0x66, 0x5B, 0x66, 0x5A, 0x66, 0x58, 0x66, 0x5E, 0x66, 0x83,
0xC6, 0x12, 0x66, 0x39, 0xC3, 0x76, 0xA3, 0x66, 0x5A, 0x66, 0x5E, 0x1F,
0xC3, 0x9D, 0x2E, 0x33, 0x06, 0x04, 0x00, 0x58, 0x74, 0x0D, 0x2E, 0x33,
0x06, 0x04, 0x00, 0x75, 0x0B, 0xB4, 0x00, 0xCD, 0x16, 0xEB, 0x04, 0xB4,
0x10, 0xCD, 0x16, 0xF9, 0x66, 0x58, 0x66, 0x5A, 0x66, 0x5E, 0x1F, 0xC3,
0x66, 0x52, 0x66, 0x51, 0x53, 0x66, 0xB9, 0x0A, 0x00, 0x00, 0x00, 0x89,
0xF3, 0x66, 0x31, 0xD2, 0x66, 0xF7, 0xF1, 0x80, 0xC2, 0x30, 0x2E, 0x88,
0x14, 0x46, 0x66, 0x09, 0xC0, 0x75, 0xEE, 0x56, 0x4E, 0x39, 0xDE, 0x76,
0x0C, 0x2E, 0x8A, 0x04, 0x2E, 0x86, 0x07, 0x2E, 0x88, 0x04, 0x43, 0xEB,
0xEF, 0x5E, 0x5B, 0x66, 0x59, 0x66, 0x5A, 0xC3, 0x56, 0xE8, 0xC4, 0xFF,
0x2E, 0x80, 0x3C, 0x08, 0x74, 0x07, 0x2E, 0xC6, 0x04, 0x20, 0x46, 0xEB,
0xF3, 0x5E, 0xE8, 0x91, 0xE4, 0xC3, 0x56, 0x53, 0x66, 0x50, 0xB8, 0x03,
0x00, 0xCD, 0x10, 0xBE, 0x00, 0x02, 0x89, 0xF7, 0xB9, 0x00, 0x3E, 0xFC,
0xF3, 0xA5, 0x66, 0x58, 0x5B, 0x5E, 0xC3, 0x1E, 0x06, 0x66, 0x60, 0x8C,
0xC3, 0xFA, 0x0F, 0x01, 0x16, 0x60, 0x12, 0x0F, 0x20, 0xC0, 0x0C, 0x01,
0x0F, 0x22, 0xC0, 0xBE, 0x08, 0x00, 0x8E, 0xC6, 0x66, 0x31, 0xF6, 0x66,
0x31, 0xFF, 0x66, 0xB9, 0x00, 0x24, 0x00, 0x00, 0xFC, 0x66, 0xF3, 0xA5,
0xBE, 0x10, 0x00, 0x8E, 0xC6, 0x24, 0xFE, 0x0F, 0x22, 0xC0, 0x8E, 0xC3,
0xB9, 0x00, 0x04, 0x31, 0xF6, 0x56, 0xBF, 0x00, 0x7C, 0x57, 0x06, 0x1F,
0x56, 0x07, 0xFC, 0xF3, 0xA5, 0xBF, 0x10, 0x84, 0xBE, 0x00, 0x12, 0xB9,
0x1E, 0x00, 0xFC, 0x2E, 0x66, 0xF3, 0xA5, 0x06, 0x1F, 0xFB, 0xCB, 0x84,
0xD2, 0x79, 0x06, 0x81, 0xFE, 0xC2, 0x01, 0x75, 0x21, 0xC7, 0x06, 0x08,
0x00, 0xFF, 0xFF, 0x80, 0x3E, 0x00, 0x00, 0x42, 0x74, 0x14, 0xF6, 0x06,
0x02, 0x00, 0x08, 0x75, 0x0D, 0x66, 0x81, 0x3E, 0xFC, 0x23, 0x47, 0x52,
0x55, 0xAA, 0x0F, 0x84, 0x6A, 0x02, 0xC3, 0x0D, 0x0A, 0x50, 0x72, 0x65,
0x73, 0x73, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x62, 0x61, 0x72,
0x00, 0x0D, 0x0A, 0x50, 0x72, 0x65, 0x73, 0x73, 0x20, 0x00, 0x20, 0x74,
0x6F, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x47, 0x52, 0x55, 0x42,
0x2C, 0x20, 0x61, 0x6E, 0x79, 0x20, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x20,
0x6B, 0x65, 0x79, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x6F, 0x6F, 0x74, 0x20,
0x70, 0x72, 0x65, 0x76, 0x69, 0x6F, 0x75, 0x73, 0x20, 0x4D, 0x42, 0x52,
0x20, 0x2E, 0x2E, 0x2E, 0x00, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x6F, 0x6F,
0x74, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6F, 0x75, 0x73, 0x20, 0x4D,
0x42, 0x52, 0x2C, 0x20, 0x61, 0x6E, 0x79, 0x20, 0x6F, 0x74, 0x68, 0x65,
0x72, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x74, 0x6F, 0x20, 0x73, 0x74, 0x61,
0x72, 0x74, 0x20, 0x47, 0x52, 0x55, 0x42, 0x20, 0x2E, 0x2E, 0x2E, 0x00,
0x0D, 0x0A, 0x54, 0x69, 0x6D, 0x65, 0x6F, 0x75, 0x74, 0x3A, 0x20, 0x00,
0x20, 0x20, 0x20, 0x08, 0x08, 0x08, 0x00, 0x0D, 0x0A, 0x49, 0x6E, 0x76,
0x61, 0x6C, 0x69, 0x64, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6F, 0x75,
0x73, 0x20, 0x4D, 0x42, 0x52, 0x2E, 0x20, 0x50, 0x72, 0x65, 0x73, 0x73,
0x20, 0x61, 0x6E, 0x79, 0x20, 0x6B, 0x65, 0x79, 0x20, 0x74, 0x6F, 0x20,
0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x47, 0x52, 0x55, 0x42, 0x20, 0x2E,
0x2E, 0x2E, 0x00, 0x20, 0x74, 0x6F, 0x20, 0x68, 0x6F, 0x6C, 0x64, 0x20,
0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6E, 0x2C, 0x20,
0x61, 0x6E, 0x79, 0x20, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6B, 0x65,
0x79, 0x20, 0x74, 0x6F, 0x20, 0x62, 0x6F, 0x6F, 0x74, 0x20, 0x70, 0x72,
0x65, 0x76, 0x69, 0x6F, 0x75, 0x73, 0x20, 0x4D, 0x42, 0x52, 0x20, 0x2E,
0x2E, 0x2E, 0x00, 0x0D, 0x0A, 0x45, 0x72, 0x72, 0x6F, 0x72, 0x20, 0x77,
0x68, 0x69, 0x6C, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6E, 0x67,
0x20, 0x4D, 0x42, 0x52, 0x20, 0x6F, 0x66, 0x20, 0x00, 0x20, 0x69, 0x6E,
0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x74,
0x61, 0x62, 0x6C, 0x65, 0x20, 0x6F, 0x66, 0x20, 0x64, 0x72, 0x69, 0x76,
0x65, 0x20, 0x28, 0x68, 0x64, 0x30, 0x20, 0x29, 0x20, 0x00, 0x0D, 0x0A,
0x45, 0x72, 0x72, 0x6F, 0x72, 0x00, 0x0D, 0x0A, 0x43, 0x61, 0x6E, 0x6E,
0x6F, 0x74, 0x20, 0x66, 0x69, 0x6E, 0x64, 0x20, 0x00, 0x20, 0x69, 0x6E,
0x20, 0x61, 0x6C, 0x6C, 0x20, 0x64, 0x72, 0x69, 0x76, 0x65, 0x73, 0x2E,
0x20, 0x50, 0x72, 0x65, 0x73, 0x73, 0x20, 0x43, 0x74, 0x72, 0x6C, 0x2B,
0x41, 0x6C, 0x74, 0x2B, 0x44, 0x65, 0x6C, 0x20, 0x74, 0x6F, 0x20, 0x72,
0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x2E, 0x00, 0x0D, 0x0A, 0x54, 0x72,
0x79, 0x20, 0x28, 0x68, 0x64, 0x30, 0x2C, 0x30, 0x20, 0x29, 0x20, 0x3A,
0x20, 0x00, 0x45, 0x58, 0x54, 0x32, 0x3A, 0x20, 0x00, 0x4E, 0x54, 0x46,
0x53, 0x35, 0x3A, 0x20, 0x00, 0x46, 0x41, 0x54, 0x33, 0x32, 0x3A, 0x20,
0x00, 0x46, 0x41, 0x54, 0x31, 0x36, 0x3A, 0x20, 0x00, 0x46, 0x41, 0x54,
0x31, 0x32, 0x3A, 0x20, 0x00, 0x6E, 0x6F, 0x6E, 0x2D, 0x4D, 0x53, 0x3A,
0x20, 0x73, 0x6B, 0x69, 0x70, 0x20, 0x00, 0x45, 0x78, 0x74, 0x65, 0x6E,
0x64, 0x65, 0x64, 0x3A, 0x20, 0x00, 0x69, 0x6E, 0x76, 0x61, 0x6C, 0x69,
0x64, 0x20, 0x6F, 0x72, 0x20, 0x6E, 0x75, 0x6C, 0x6C, 0x20, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x68, 0x6F, 0x74, 0x2D, 0x6B, 0x65, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xB5, 0x00, 0x04, 0x00, 0x05, 0x4D, 0xCB, 0x93,
0x60, 0x66, 0x31, 0xC0, 0x2E, 0x66, 0xA3, 0x14, 0x23, 0x2E, 0x66, 0xA3,
0x18, 0x23, 0xB4, 0x08, 0xCD, 0x13, 0x72, 0x14, 0xF6, 0xC1, 0x3F, 0x74,
0x0F, 0x80, 0xE1, 0x3F, 0x2E, 0x88, 0x0E, 0x14, 0x23, 0xFE, 0xC6, 0x2E,
0x88, 0x36, 0x18, 0x23, 0x61, 0x2E, 0x0F, 0xB6, 0x0E, 0x14, 0x23, 0x51,
0x2E, 0x0F, 0xB6, 0x0E, 0x18, 0x23, 0x51, 0x0F, 0xB6, 0xCA, 0x51, 0x68,
0xD2, 0x22, 0xE8, 0x21, 0x02, 0x83, 0xC4, 0x08, 0x2E, 0x8B, 0x0E, 0x14,
0x23, 0xE8, 0x1F, 0x00, 0x73, 0x02, 0x31, 0xC9, 0x83, 0xF9, 0x3F, 0x73,
0x2D, 0x41, 0xE8, 0x12, 0x00, 0x72, 0x07, 0x83, 0xF9, 0x3F, 0x72, 0xF0,
0xEB, 0x20, 0x49, 0x80, 0xF9, 0x02, 0x73, 0x1A, 0xB4, 0x01, 0xC3, 0xB8,
0x00, 0x50, 0x8E, 0xC0, 0x8E, 0xD8, 0x31, 0xDB, 0xB8, 0x01, 0x02, 0xB6,
0x00, 0x60, 0x89, 0xDE, 0x89, 0xDF, 0xCD, 0x13, 0x61, 0xC3, 0x83, 0xF9,
0x3F, 0x76, 0x03, 0xB9, 0x3F, 0x00, 0x2E, 0x89, 0x0E, 0x1C, 0x23, 0x2E,
0x8A, 0x36, 0x18, 0x23, 0x84, 0xF6, 0x74, 0x09, 0xE8, 0x92, 0x00, 0x0F,
0x82, 0x8B, 0x00, 0x77, 0x0F, 0xB6, 0x01, 0xE8, 0x87, 0x00, 0x0F, 0x82,
0x80, 0x00, 0x77, 0x04, 0xFE, 0xC6, 0x75, 0xF3, 0xFE, 0xCE, 0x2E, 0x88,
0x36, 0x1E, 0x23, 0x80, 0xFE, 0xFF, 0x75, 0x12, 0x2E, 0x8A, 0x36, 0x18,
0x23, 0x84, 0xF6, 0x75, 0x02, 0xFE, 0xCE, 0xFE, 0xCE, 0x2E, 0x88, 0x36,
0x1E, 0x23, 0x2E, 0x8A, 0x0E, 0x14, 0x23, 0xE8, 0xEF, 0x00, 0x72, 0x52,
0x77, 0x18, 0xB1, 0x08, 0xE8, 0xE6, 0x00, 0x72, 0x49, 0x77, 0x0F, 0x41,
0x2E, 0x3A, 0x0E, 0x1C, 0x23, 0x72, 0xF1, 0x80, 0xF9, 0x3F, 0x76, 0x02,
0xB1, 0x3F, 0x2E, 0x88, 0x0E, 0x1C, 0x23, 0x2E, 0x0F, 0xB6, 0x0E, 0x1C,
0x23, 0x51, 0x2E, 0x0F, 0xB6, 0x0E, 0x1E, 0x23, 0x41, 0x51, 0x0F, 0xB6,
0xCA, 0x51, 0x68, 0xF3, 0x22, 0xE8, 0x52, 0x01, 0x83, 0xC4, 0x08, 0x2E,
0x8B, 0x0E, 0x1C, 0x23, 0x2E, 0x8A, 0x36, 0x1E, 0x23, 0x2E, 0x88, 0x0E,
0x08, 0x00, 0x2E, 0x88, 0x36, 0x09, 0x00, 0xB4, 0x00, 0xC3, 0xB4, 0x01,
0xC3, 0xB5, 0x00, 0xB1, 0x01, 0xB4, 0x02, 0x2E, 0xA0, 0x1C, 0x23, 0xBB,
0x00, 0x50, 0x8E, 0xC3, 0x8E, 0xDB, 0x31, 0xDB, 0x60, 0x89, 0xDE, 0x89,
0xDF, 0xCD, 0x13, 0x61, 0xFE, 0xC5, 0x72, 0x48, 0xFE, 0xCD, 0xB1, 0x01,
0xB4, 0x02, 0x2E, 0xA0, 0x1C, 0x23, 0xBB, 0x00, 0x58, 0x8E, 0xC3, 0x8E,
0xDB, 0x31, 0xDB, 0x60, 0x89, 0xDE, 0x89, 0xDF, 0xB6, 0x00, 0xCD, 0x13,
0x61, 0x72, 0x37, 0xFE, 0xC5, 0xE8, 0x34, 0x00, 0x74, 0x22, 0xB1, 0x01,
0xB4, 0x02, 0x2E, 0xA0, 0x1C, 0x23, 0xBB, 0x00, 0x58, 0x8E, 0xC3, 0x8E,
0xDB, 0x31, 0xDB, 0x60, 0x89, 0xDE, 0x89, 0xDF, 0xB6, 0x00, 0xCD, 0x13,
0x61, 0x72, 0x13, 0xE8, 0x12, 0x00, 0x75, 0x0B, 0x80, 0xFD, 0x05, 0x72,
0x96, 0x80, 0xFE, 0x00, 0x74, 0x04, 0xC3, 0x38, 0xF6, 0xC3, 0xF9, 0xC3,
0x51, 0x56, 0x57, 0x2E, 0x8B, 0x0E, 0x1C, 0x23, 0xC1, 0xE1, 0x07, 0xB8,
0x00, 0x50, 0x8E, 0xD8, 0xB8, 0x00, 0x58, 0x8E, 0xC0, 0x31, 0xF6, 0x31,
0xFF, 0xFC, 0x66, 0xF3, 0xA7, 0x5F, 0x5E, 0x59, 0xC3, 0x2E, 0xC7, 0x06,
0x20, 0x23, 0x10, 0x00, 0xB5, 0x00, 0xB6, 0x00, 0xB8, 0x01, 0x02, 0xBB,
0x00, 0x58, 0x8E, 0xC3, 0x8E, 0xDB, 0x31, 0xDB, 0x60, 0xB1, 0x01, 0x89,
0xDE, 0x89, 0xDF, 0xCD, 0x13, 0x61, 0x72, 0x5C, 0xB8, 0x02, 0x02, 0xBB,
0x00, 0x50, 0x8E, 0xC3, 0x8E, 0xDB, 0x31, 0xDB, 0x60, 0x89, 0xDE, 0x89,
0xDF, 0xCD, 0x13, 0x61, 0x9C, 0x2E, 0x3A, 0x36, 0x1E, 0x23, 0x72, 0x04,
0xB6, 0xFF, 0xFE, 0xC5, 0xFE, 0xC6, 0x9D, 0x72, 0x22, 0xE8, 0x36, 0x00,
0x74, 0x1D, 0xB8, 0x01, 0x02, 0xBB, 0x00, 0x58, 0x8E, 0xC3, 0x8E, 0xDB,
0x31, 0xDB, 0x60, 0x89, 0xDE, 0x89, 0xDF, 0xB1, 0x01, 0xCD, 0x13, 0x61,
0x72, 0x1A, 0xE8, 0x19, 0x00, 0x75, 0x12, 0x2E, 0xFF, 0x0E, 0x20, 0x23,
0x74, 0x05, 0x80, 0xFD, 0x07, 0x72, 0x95, 0x80, 0xF9, 0x01, 0x76, 0x04,
0xC3, 0x38, 0xC9, 0xC3, 0xF9, 0xC3, 0x51, 0x56, 0x57, 0xB9, 0x80, 0x00,
0xB8, 0x20, 0x50, 0x8E, 0xD8, 0xB8, 0x00, 0x58, 0x8E, 0xC0, 0x31, 0xF6,
0x31, 0xFF, 0xFC, 0x66, 0xF3, 0xA7, 0x5F, 0x5E, 0x59, 0xC3, 0x60, 0x89,
0xE5, 0x83, 0xC5, 0x12, 0x8B, 0x76, 0x00, 0x83, 0xC5, 0x02, 0x2E, 0xAC,
0x84, 0xC0, 0x74, 0x5C, 0x3C, 0x25, 0x75, 0x50, 0x2E, 0xAC, 0x84, 0xC0,
0x74, 0x52, 0x3C, 0x64, 0xBB, 0x0A, 0x00, 0x74, 0x0B, 0x3C, 0x78, 0x74,
0x04, 0x3C, 0x58, 0x75, 0xE1, 0xBB, 0x10, 0x00, 0x66, 0x57, 0x66, 0x31,
0xFF, 0x31, 0xC9, 0x8B, 0x46, 0x00, 0x31, 0xD2, 0xF7, 0xF3, 0x89, 0xD7,
0x66, 0xC1, 0xCF, 0x04, 0x41, 0x85, 0xC0, 0x75, 0xF1, 0x31, 0xDB, 0x66,
0xC1, 0xC7, 0x04, 0x89, 0xF8, 0x24, 0x0F, 0x3C, 0x09, 0x76, 0x02, 0x04,
0x07, 0x04, 0x30, 0xB4, 0x0E, 0xCD, 0x10, 0xE2, 0xEA, 0x66, 0x5F, 0x83,
0xC5, 0x02, 0xEB, 0xA6, 0x31, 0xDB, 0xB4, 0x0E, 0xCD, 0x10, 0xEB, 0x9E,
0x61, 0xC3, 0x0D, 0x0A, 0x42, 0x49, 0x4F, 0x53, 0x3A, 0x20, 0x44, 0x72,
0x69, 0x76, 0x65, 0x3D, 0x30, 0x78, 0x25, 0x58, 0x2C, 0x20, 0x48, 0x3D,
0x25, 0x64, 0x2C, 0x20, 0x53, 0x3D, 0x25, 0x64, 0x0D, 0x0A, 0x00, 0x54,
0x55, 0x4E, 0x45, 0x3A, 0x20, 0x44, 0x72, 0x69, 0x76, 0x65, 0x3D, 0x30,
0x78, 0x25, 0x58, 0x2C, 0x20, 0x48, 0x3D, 0x25, 0x64, 0x2C, 0x20, 0x53,
0x3D, 0x25, 0x64, 0x0D, 0x0A, 0x00, 0x66, 0x90, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
0x47, 0x52, 0x55, 0xAA
};

View file

@ -1,13 +1,12 @@
/*
* First 432 bytes of MBR from Grub2 (boot.img), with 2 bytes NOPed @0x66
* as per grub2's setup.c comments:
*
* If DEST_DRIVE is a hard disk, enable the workaround, which is
* for buggy BIOSes which don't pass boot drive correctly. Instead,
* they pass 0x00 or 0x01 even when booted from 0x80.
*/
unsigned char mbr_grub2_0x0[432] = {
unsigned char mbr_grub2_0x0[] = {
0xEB, 0x63, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

View file

@ -69,6 +69,8 @@
#define IDR_SL_LDLINUX_V6_BSS 402
#define IDR_SL_LDLINUX_V6_SYS 403
#define IDR_SL_MBOOT_C32 404
#define IDR_GR_GRUB_GRLDR_MBR 450
#define IDR_GR_GRUB2_CORE_IMG 451
#define IDR_LC_RUFUS_LOC 500
#define IDR_XT_HOGGER 501
#define IDC_DEVICE 1001

View file

@ -937,6 +937,7 @@ static void DisplayISOProps(void)
uprintf(" Has a >4GB file: %s", YesNo(iso_report.has_4GB_file));
uprintf(" Uses Bootmgr: %s", YesNo(iso_report.has_bootmgr));
uprintf(" Uses EFI: %s%s", YesNo(iso_report.has_efi || iso_report.has_win7_efi), (iso_report.has_win7_efi && (!iso_report.has_efi)) ? " (win7_x64)" : "");
uprintf(" Uses Grub 2: %s", YesNo(iso_report.has_grub2));
uprintf(" Uses Grub4DOS: %s", YesNo(iso_report.has_grub4dos));
uprintf(" Uses isolinux: %s", isolinux_str);
if (HAS_SYSLINUX(iso_report) && (SL_MAJOR(iso_report.sl_version) < 5)) {
@ -975,7 +976,7 @@ DWORD WINAPI ISOScanThread(LPVOID param)
} else {
DisplayISOProps();
}
if ( (!iso_report.has_bootmgr) && (!HAS_SYSLINUX(iso_report)) && (!IS_WINPE(iso_report.winpe)) && (!iso_report.has_grub4dos)
if ( (!iso_report.has_bootmgr) && (!HAS_SYSLINUX(iso_report)) && (!IS_WINPE(iso_report.winpe)) && (!IS_GRUB(iso_report))
&& (!iso_report.has_efi) && (!IS_REACTOS(iso_report) && (!iso_report.has_kolibrios) && (!iso_report.is_bootable_img)) ) {
MessageBoxU(hMainDialog, lmprintf(MSG_082), lmprintf(MSG_081), MB_OK|MB_ICONINFORMATION|MB_IS_RTL);
safe_free(image_path);
@ -1135,7 +1136,7 @@ static BOOL BootCheck(void)
ShellExecuteA(hMainDialog, "open", SEVENZIP_URL, NULL, NULL, SW_SHOWNORMAL);
return FALSE;
}
} else if ((fs == FS_NTFS) && (!iso_report.has_bootmgr) && (!IS_WINPE(iso_report.winpe)) && (!iso_report.has_grub4dos)) {
} else if ((fs == FS_NTFS) && (!iso_report.has_bootmgr) && (!IS_WINPE(iso_report.winpe)) && (!IS_GRUB(iso_report))) {
if (HAS_SYSLINUX(iso_report)) {
// Only FAT/FAT32 is supported for this type of ISO
MessageBoxU(hMainDialog, lmprintf(MSG_096), lmprintf(MSG_092), MB_OK|MB_ICONERROR|MB_IS_RTL);
@ -1149,7 +1150,7 @@ static BOOL BootCheck(void)
MessageBoxU(hMainDialog, lmprintf(MSG_189), lmprintf(MSG_099), MB_OK|MB_ICONERROR|MB_IS_RTL);
return FALSE;
} else if (((fs == FS_FAT16)||(fs == FS_FAT32)) && (!HAS_SYSLINUX(iso_report)) &&
(!IS_REACTOS(iso_report)) && (!iso_report.has_kolibrios) && (!iso_report.has_grub4dos)) {
(!IS_REACTOS(iso_report)) && (!iso_report.has_kolibrios) && (!IS_GRUB(iso_report))) {
// FAT/FAT32 can only be used for isolinux based ISO images or when the Target Type is UEFI
MessageBoxU(hMainDialog, lmprintf(MSG_098), lmprintf(MSG_090), MB_OK|MB_ICONERROR|MB_IS_RTL);
return FALSE;
@ -1555,7 +1556,7 @@ void SetBoot(int fs, int bt)
static_sprintf(tmp, "Syslinux %s", embedded_sl_version_str[1]);
IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, tmp), DT_SYSLINUX_V6));
IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "ReactOS"), DT_REACTOS));
// IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "Grub 2.0"), DT_GRUB2));
IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "Grub 2.0"), DT_GRUB2));
IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "Grub4DOS"), DT_GRUB4DOS));
}
if ((!advanced_mode) && (selection_default >= DT_SYSLINUX_V4)) {

View file

@ -231,6 +231,7 @@ typedef struct {
#define IS_WINPE(r) (((r&WINPE_MININT) == WINPE_MININT)||((r&WINPE_I386) == WINPE_I386))
#define IS_EFI(r) ((r.has_efi) || (r.has_win7_efi))
#define IS_REACTOS(r) (r.reactos_path[0] != 0)
#define IS_GRUB(r) ((r.has_grub2) || (r.has_grub4dos))
typedef struct {
char label[192]; /* 3*64 to account for UTF-8 */
@ -251,6 +252,7 @@ typedef struct {
BOOL has_old_vesamenu;
BOOL has_efi_syslinux;
BOOL has_grub4dos;
BOOL has_grub2;
BOOL has_kolibrios;
BOOL uses_minint;
BOOL is_bootable_img;

View file

@ -32,7 +32,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDD_DIALOG DIALOGEX 12, 12, 227, 329
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Rufus 1.5.0.542"
CAPTION "Rufus 1.5.0.543"
FONT 8, "Segoe UI", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Start",IDC_START,113,291,50,14
@ -164,7 +164,7 @@ END
IDD_DIALOG_XP DIALOGEX 12, 12, 227, 329
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Rufus 1.5.0.542"
CAPTION "Rufus 1.5.0.543"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Start",IDC_START,113,291,50,14
@ -297,7 +297,7 @@ END
IDD_DIALOG_RTL DIALOGEX 12, 12, 227, 329
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
CAPTION "Rufus 1.5.0.542"
CAPTION "Rufus 1.5.0.543"
FONT 8, "Segoe UI", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Start",IDC_START,113,291,50,14
@ -437,7 +437,7 @@ END
IDD_DIALOG_RTL_XP DIALOGEX 12, 12, 227, 329
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
CAPTION "Rufus 1.5.0.542"
CAPTION "Rufus 1.5.0.543"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Start",IDC_START,113,291,50,14
@ -610,6 +610,8 @@ BEGIN
"IDR_SL_LDLINUX_V6_BSS RCDATA ""../res/syslinux/ldlinux_v6.bss""\r\n"
"IDR_SL_LDLINUX_V6_SYS RCDATA ""../res/syslinux/ldlinux_v6.sys""\r\n"
"IDR_SL_MBOOT_C32 RCDATA ""../res/syslinux/mboot.c32""\r\n"
"IDR_GR_GRUB_GRLDR_MBR RCDATA ""../res/grub/grldr.mbr""\r\n"
"IDR_GR_GRUB2_CORE_IMG RCDATA ""../res/grub2/core.img""\r\n"
"IDR_FD_COMMAND_COM RCDATA ""../res/freedos/COMMAND.COM""\r\n"
"IDR_FD_KERNEL_SYS RCDATA ""../res/freedos/KERNEL.SYS""\r\n"
"IDR_FD_DISPLAY_EXE RCDATA ""../res/freedos/DISPLAY.EXE""\r\n"
@ -699,8 +701,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,5,0,542
PRODUCTVERSION 1,5,0,542
FILEVERSION 1,5,0,543
PRODUCTVERSION 1,5,0,543
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@ -717,13 +719,13 @@ BEGIN
BEGIN
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
VALUE "FileDescription", "Rufus"
VALUE "FileVersion", "1.5.0.542"
VALUE "FileVersion", "1.5.0.543"
VALUE "InternalName", "Rufus"
VALUE "LegalCopyright", "© 2011-2014 Pete Batard (GPL v3)"
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
VALUE "OriginalFilename", "rufus.exe"
VALUE "ProductName", "Rufus"
VALUE "ProductVersion", "1.5.0.542"
VALUE "ProductVersion", "1.5.0.543"
END
END
BLOCK "VarFileInfo"
@ -764,6 +766,8 @@ IDR_SL_LDLINUX_V4_SYS RCDATA "../res/syslinux/ldlinux_v4.sys"
IDR_SL_LDLINUX_V6_BSS RCDATA "../res/syslinux/ldlinux_v6.bss"
IDR_SL_LDLINUX_V6_SYS RCDATA "../res/syslinux/ldlinux_v6.sys"
IDR_SL_MBOOT_C32 RCDATA "../res/syslinux/mboot.c32"
IDR_GR_GRUB_GRLDR_MBR RCDATA "../res/grub/grldr.mbr"
IDR_GR_GRUB2_CORE_IMG RCDATA "../res/grub2/core.img"
IDR_FD_COMMAND_COM RCDATA "../res/freedos/COMMAND.COM"
IDR_FD_KERNEL_SYS RCDATA "../res/freedos/KERNEL.SYS"
IDR_FD_DISPLAY_EXE RCDATA "../res/freedos/DISPLAY.EXE"