[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 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. 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 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 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. this applies regardless of whether you are an individual or a corporate user.

View File

@ -1,6 +1,6 @@
:retry :retry
@set /p password=Please enter PFX password: @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 @if ERRORLEVEL 1 goto retry
@set password= @set password=
@exit @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)) { } else if (((dt == DT_ISO) && (iso_report.has_grub4dos)) || (dt == DT_GRUB4DOS)) {
uprintf(using_msg, "Grub4DOS"); uprintf(using_msg, "Grub4DOS");
r = write_grub_mbr(&fake_fd); 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"); uprintf(using_msg, "Grub 2.0");
r = write_grub2_mbr(&fake_fd); r = write_grub2_mbr(&fake_fd);
} else if (dt == DT_REACTOS) { } else if (dt == DT_REACTOS) {
@ -942,6 +942,41 @@ out:
return r; 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 * 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 // Thanks to Microsoft, we must fix the MBR AFTER the drive has been formatted
if (pt == PARTITION_STYLE_MBR) { if (pt == PARTITION_STYLE_MBR) {
PrintStatus(0, TRUE, MSG_228); // "Writing master boot record..." PrintStatus(0, TRUE, MSG_228); // "Writing master boot record..."
if (!WriteMBR(hPhysicalDrive)) { if ((!WriteMBR(hPhysicalDrive)) || (!WriteSBR(hPhysicalDrive))) {
if (!IS_ERROR(FormatStatus)) if (!IS_ERROR(FormatStatus))
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT; FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT;
goto out; goto out;
@ -1540,8 +1575,8 @@ DWORD WINAPI FormatThread(void* param)
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE; FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE;
goto out; goto out;
} }
} else if ((((dt == DT_WINME) || (dt == DT_FREEDOS) || (dt == DT_GRUB4DOS) || (dt == DT_REACTOS)) && } 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||iso_report.has_grub4dos)))) { (!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 // We still have a lock, which we need to modify the volume boot record
// => no need to reacquire the lock... // => no need to reacquire the lock...
hLogicalVolume = GetLogicalHandle(DriveIndex, TRUE, FALSE); 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_name = "ldlinux.sys";
static const char* ldlinux_c32 = "ldlinux.c32"; static const char* ldlinux_c32 = "ldlinux.c32";
static const char* efi_dirname = "/efi/boot"; 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* syslinux_cfg[] = { "isolinux.cfg", "syslinux.cfg", "extlinux.conf"};
static const char dot_isolinux_bin[] = ".\\isolinux.bin"; static const char dot_isolinux_bin[] = ".\\isolinux.bin";
static const char* isolinux_bin = &dot_isolinux_bin[2]; 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) if (safe_stricmp(psz_dirname, efi_dirname) == 0)
iso_report.has_efi = TRUE; 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" // Check for PE (XP) specific files in "/i386" or "/minint"
for (i=0; i<ARRAYSIZE(pe_dirname); i++) for (i=0; i<ARRAYSIZE(pe_dirname); i++)
if (safe_stricmp(psz_dirname, pe_dirname[i]) == 0) 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" #include "mbr_grub.h"
unsigned char aucRef[] = {0x55, 0xAA}; unsigned char aucRef[] = {0x55, 0xAA};
(void)mbr_grub_0x200; /* silence unused variable warning */
return return
contains_data(fp, 0x0, mbr_grub_0x0, sizeof(mbr_grub_0x0)) && contains_data(fp, 0x0, mbr_grub_0x0, sizeof(mbr_grub_0x0)) &&
@ -268,8 +267,7 @@ int write_grub_mbr(FILE *fp)
return return
write_data(fp, 0x0, mbr_grub_0x0, sizeof(mbr_grub_0x0)) && write_data(fp, 0x0, mbr_grub_0x0, sizeof(mbr_grub_0x0)) &&
write_data(fp, 0x1FE, aucRef, sizeof(aucRef)) && write_data(fp, 0x1FE, aucRef, sizeof(aucRef));
write_data(fp, 0x200, mbr_grub_0x200, sizeof(mbr_grub_0x200));
} }
int write_grub2_mbr(FILE *fp) int write_grub2_mbr(FILE *fp)

View File

@ -4,7 +4,7 @@
#include <stdint.h> #include <stdint.h>
/* Max valid value of uiLen for contains_data */ /* 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 /* Checks if a file contains a data pattern of length Len at position
Position. The file pointer will change when calling this function! */ 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[] = { unsigned char mbr_grub_0x0[] = {
0xEB, 0x5E, 0x80, 0x00, 0x20, 0x39, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x5E, 0x80, 0x00, 0x20, 0x39, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x6E, 0x67, 0x20, 0x4D, 0x42, 0x52, 0x2D, 0x68, 0x65, 0x6C, 0x70, 0x65,
0x72, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 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 * First 432 bytes of MBR from Grub2 (boot.img), with 2 bytes NOPed @0x66
* as per grub2's setup.c comments: * as per grub2's setup.c comments:
* * If DEST_DRIVE is a hard disk, enable the workaround, which is
* If DEST_DRIVE is a hard disk, enable the workaround, which is * for buggy BIOSes which don't pass boot drive correctly. Instead,
* for buggy BIOSes which don't pass boot drive correctly. Instead, * they pass 0x00 or 0x01 even when booted from 0x80.
* 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, 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,
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_BSS 402
#define IDR_SL_LDLINUX_V6_SYS 403 #define IDR_SL_LDLINUX_V6_SYS 403
#define IDR_SL_MBOOT_C32 404 #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_LC_RUFUS_LOC 500
#define IDR_XT_HOGGER 501 #define IDR_XT_HOGGER 501
#define IDC_DEVICE 1001 #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(" Has a >4GB file: %s", YesNo(iso_report.has_4GB_file));
uprintf(" Uses Bootmgr: %s", YesNo(iso_report.has_bootmgr)); 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 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 Grub4DOS: %s", YesNo(iso_report.has_grub4dos));
uprintf(" Uses isolinux: %s", isolinux_str); uprintf(" Uses isolinux: %s", isolinux_str);
if (HAS_SYSLINUX(iso_report) && (SL_MAJOR(iso_report.sl_version) < 5)) { if (HAS_SYSLINUX(iso_report) && (SL_MAJOR(iso_report.sl_version) < 5)) {
@ -975,7 +976,7 @@ DWORD WINAPI ISOScanThread(LPVOID param)
} else { } else {
DisplayISOProps(); 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)) ) { && (!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); MessageBoxU(hMainDialog, lmprintf(MSG_082), lmprintf(MSG_081), MB_OK|MB_ICONINFORMATION|MB_IS_RTL);
safe_free(image_path); safe_free(image_path);
@ -1135,7 +1136,7 @@ static BOOL BootCheck(void)
ShellExecuteA(hMainDialog, "open", SEVENZIP_URL, NULL, NULL, SW_SHOWNORMAL); ShellExecuteA(hMainDialog, "open", SEVENZIP_URL, NULL, NULL, SW_SHOWNORMAL);
return FALSE; 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)) { if (HAS_SYSLINUX(iso_report)) {
// Only FAT/FAT32 is supported for this type of ISO // 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); 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); MessageBoxU(hMainDialog, lmprintf(MSG_189), lmprintf(MSG_099), MB_OK|MB_ICONERROR|MB_IS_RTL);
return FALSE; return FALSE;
} else if (((fs == FS_FAT16)||(fs == FS_FAT32)) && (!HAS_SYSLINUX(iso_report)) && } 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 // 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); MessageBoxU(hMainDialog, lmprintf(MSG_098), lmprintf(MSG_090), MB_OK|MB_ICONERROR|MB_IS_RTL);
return FALSE; return FALSE;
@ -1555,7 +1556,7 @@ void SetBoot(int fs, int bt)
static_sprintf(tmp, "Syslinux %s", embedded_sl_version_str[1]); 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, tmp), DT_SYSLINUX_V6));
IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "ReactOS"), DT_REACTOS)); 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)); IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "Grub4DOS"), DT_GRUB4DOS));
} }
if ((!advanced_mode) && (selection_default >= DT_SYSLINUX_V4)) { 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_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_EFI(r) ((r.has_efi) || (r.has_win7_efi))
#define IS_REACTOS(r) (r.reactos_path[0] != 0) #define IS_REACTOS(r) (r.reactos_path[0] != 0)
#define IS_GRUB(r) ((r.has_grub2) || (r.has_grub4dos))
typedef struct { typedef struct {
char label[192]; /* 3*64 to account for UTF-8 */ char label[192]; /* 3*64 to account for UTF-8 */
@ -251,6 +252,7 @@ typedef struct {
BOOL has_old_vesamenu; BOOL has_old_vesamenu;
BOOL has_efi_syslinux; BOOL has_efi_syslinux;
BOOL has_grub4dos; BOOL has_grub4dos;
BOOL has_grub2;
BOOL has_kolibrios; BOOL has_kolibrios;
BOOL uses_minint; BOOL uses_minint;
BOOL is_bootable_img; BOOL is_bootable_img;

View File

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