From: Toni Wilen Date: Sat, 4 Feb 2012 14:53:25 +0000 (+0200) Subject: 2400b15 X-Git-Tag: 2400~14 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=a7db160691e325b085364740b8b832eff7ec2876;p=francis%2Fwinuae.git 2400b15 --- diff --git a/a2091.cpp b/a2091.cpp index 5f46980a..873027ca 100644 --- a/a2091.cpp +++ b/a2091.cpp @@ -957,7 +957,6 @@ static int REGPARAM2 dmac_check (uaecptr addr, uae_u32 size) static uae_u8 *REGPARAM2 dmac_xlate (uaecptr addr) { - write_log (L"%x ", addr); addr &= rom_mask; addr += rombank * rom_size; return rom + addr; diff --git a/akiko.cpp b/akiko.cpp index 76e8db14..0ba5d430 100644 --- a/akiko.cpp +++ b/akiko.cpp @@ -291,6 +291,7 @@ static uae_u32 akiko_buffer[8]; static int akiko_read_offset, akiko_write_offset; static uae_u32 akiko_result[8]; +#if 0 static void akiko_c2p_do (void) { int i; @@ -303,6 +304,61 @@ static void akiko_c2p_do (void) akiko_result[i & 7] |= 1 << (i >> 3); } } +#else +/* Optimised Chunky-to-Planar algorithm by Mequa */ +static uae_u32 akiko_precalc_shift[32]; +static uae_u32 akiko_precalc_bytenum[32][8]; +static void akiko_precalculate (void) +{ + uae_u32 i, j; + for (i = 0; i < 32; i++) { + akiko_precalc_shift [(int)i] = 1 << i; + for (j = 0; j < 8; j++) { + akiko_precalc_bytenum[(int)i][(int)j] = (i >> 3) + ((7 - j) << 2); + } + } +} + +static void akiko_c2p_do (void) +{ + int i; + + for (i = 0; i < 8; i++) { + akiko_result[i] = (((akiko_buffer[0] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][0]) ) + | (((akiko_buffer[1] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][1]) ) + | (((akiko_buffer[2] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][2]) ) + | (((akiko_buffer[3] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][3]) ) + | (((akiko_buffer[4] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][4]) ) + | (((akiko_buffer[5] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][5]) ) + | (((akiko_buffer[6] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][6]) ) + | (((akiko_buffer[7] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][7]) ) + | (((akiko_buffer[0] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][0]) ) + | (((akiko_buffer[1] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][1]) ) + | (((akiko_buffer[2] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][2]) ) + | (((akiko_buffer[3] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][3]) ) + | (((akiko_buffer[4] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][4]) ) + | (((akiko_buffer[5] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][5]) ) + | (((akiko_buffer[6] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][6]) ) + | (((akiko_buffer[7] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][7]) ) + | (((akiko_buffer[0] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][0])) + | (((akiko_buffer[1] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][1])) + | (((akiko_buffer[2] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][2])) + | (((akiko_buffer[3] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][3])) + | (((akiko_buffer[4] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][4])) + | (((akiko_buffer[5] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][5])) + | (((akiko_buffer[6] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][6])) + | (((akiko_buffer[7] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][7])) + | (((akiko_buffer[0] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][0])) + | (((akiko_buffer[1] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][1])) + | (((akiko_buffer[2] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][2])) + | (((akiko_buffer[3] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][3])) + | (((akiko_buffer[4] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][4])) + | (((akiko_buffer[5] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][5])) + | (((akiko_buffer[6] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][6])) + | (((akiko_buffer[7] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][7])); + } +} +#endif static void akiko_c2p_write (int offset, uae_u32 v) { @@ -1712,6 +1768,7 @@ int akiko_init (void) if (!currprefs.cs_cd32cd) return 0; akiko_free (); + akiko_precalculate (); unitnum = -1; sys_cddev_open (); sector_buffer_1 = xmalloc (uae_u8, SECTOR_BUFFER_SIZE * 2352); diff --git a/cfgfile.cpp b/cfgfile.cpp index 7d7bd5d3..6c70c1df 100644 --- a/cfgfile.cpp +++ b/cfgfile.cpp @@ -689,6 +689,7 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) cfgfile_write_str (f, L"statefile_quit", p->quitstatefile); cfgfile_write (f, L"nr_floppies", L"%d", p->nr_floppies); + cfgfile_dwrite_bool (f, L"floppy_write_protect", p->floppy_read_only); cfgfile_write (f, L"floppy_speed", L"%d", p->floppy_speed); cfgfile_write (f, L"floppy_volume", L"%d", p->dfxclickvolume); cfgfile_dwrite (f, L"floppy_channel_mask", L"0x%x", p->dfxclickchannelmask); @@ -2279,6 +2280,7 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCH || cfgfile_yesno (option, value, L"comp_midopt", &p->comp_midopt) || cfgfile_yesno (option, value, L"comp_lowopt", &p->comp_lowopt) || cfgfile_yesno (option, value, L"rtg_nocustom", &p->picasso96_nocustom) + || cfgfile_yesno (option, value, L"floppy_write_protected", &p->floppy_read_only) || cfgfile_yesno (option, value, L"uaeserial", &p->uaeserial)) return 1; @@ -4084,6 +4086,7 @@ void default_prefs (struct uae_prefs *p, int type) p->custom_memory_sizes[1] = 0; p->nr_floppies = 2; + p->floppy_read_only = false; p->floppyslots[0].dfxtype = DRV_35_DD; p->floppyslots[1].dfxtype = DRV_35_DD; p->floppyslots[2].dfxtype = DRV_NONE; diff --git a/custom.cpp b/custom.cpp index 245d6149..77859523 100644 --- a/custom.cpp +++ b/custom.cpp @@ -2777,7 +2777,7 @@ int current_maxvpos (void) return maxvpos + (lof_store ? 1 : 0); } -static struct chipset_refresh *get_chipset_refresh (void) +struct chipset_refresh *get_chipset_refresh (void) { int islace = (bplcon0 & 4) ? 1 : 0; int isntsc = (beamcon0 & 0x20) ? 0 : 1; @@ -3800,9 +3800,6 @@ static void BPLCON0 (int hpos, uae_u16 v) if (bplcon0 == v) return; - if ((bplcon0 & 4) != (v & 4)) - write_log (L"lace=%d\n", v & 4); - if (!issyncstopped ()) { vpos_previous = vpos; hpos_previous = hpos; @@ -5175,7 +5172,7 @@ static void framewait (void) if (vs == -2 || vs == -3) { // fastest possible curr_time = vsync_busywait_end (); - vsync_busywait_do (NULL); + vsync_busywait_do (NULL, interlace_seen != 0, lof_store); curr_time = read_processor_time (); vsyncmintime = curr_time + vsynctime; vsync_busywait_start (); @@ -5183,7 +5180,7 @@ static void framewait (void) } else { render_screen (); - vsync_busywait_do (&freetime); + vsync_busywait_do (&freetime, interlace_seen != 0, lof_store); curr_time = read_processor_time (); vsyncmintime = curr_time + vsynctime; show_screen (); diff --git a/disk.cpp b/disk.cpp index 3e1ab0d7..edb4144c 100644 --- a/disk.cpp +++ b/disk.cpp @@ -674,18 +674,17 @@ static void update_drive_gui (int num) static void drive_fill_bigbuf (drive * drv,int); -int DISK_validate_filename (const TCHAR *fname, int leave_open, bool *wrprot, uae_u32 *crc32, struct zfile **zf) +int DISK_validate_filename (struct uae_prefs *p, const TCHAR *fname, int leave_open, bool *wrprot, uae_u32 *crc32, struct zfile **zf) { if (zf) *zf = NULL; if (crc32) *crc32 = 0; + if (wrprot) + *wrprot = p->floppy_read_only ? 1 : 0; if (leave_open || !zf) { struct zfile *f = zfile_fopen (fname, L"r+b", ZFD_NORMAL | ZFD_DISKHISTORY); - if (f) { - if (wrprot) - *wrprot = 0; - } else { + if (!f) { if (wrprot) *wrprot = 1; f = zfile_fopen (fname, L"rb", ZFD_NORMAL | ZFD_DISKHISTORY); @@ -795,14 +794,14 @@ TCHAR *DISK_get_saveimagepath (const TCHAR *name) return name1; } -static struct zfile *getwritefile (const TCHAR *name, bool *wrprot) +static struct zfile *getwritefile (struct uae_prefs *p, const TCHAR *name, bool *wrprot) { struct zfile *zf; - DISK_validate_filename (DISK_get_saveimagepath (name), 1, wrprot, NULL, &zf); + DISK_validate_filename (p, DISK_get_saveimagepath (name), 1, wrprot, NULL, &zf); return zf; } -static int iswritefileempty (const TCHAR *name) +static int iswritefileempty (struct uae_prefs *p, const TCHAR *name) { struct zfile *zf; bool wrprot; @@ -810,7 +809,7 @@ static int iswritefileempty (const TCHAR *name) trackid td[MAX_TRACKS]; int tracks, ddhd, i, ret; - zf = getwritefile (name, &wrprot); + zf = getwritefile (p, name, &wrprot); if (!zf) return 1; zfile_fread (buffer, sizeof (char), 8, zf); if (strncmp ((uae_char*)buffer, "UAE-1ADF", 8)) @@ -825,11 +824,11 @@ static int iswritefileempty (const TCHAR *name) return 1; } -static int openwritefile (drive *drv, int create) +static int openwritefile (struct uae_prefs *p, drive *drv, int create) { bool wrprot = 0; - drv->writediskfile = getwritefile (currprefs.floppyslots[drv - &floppy[0]].df, &wrprot); + drv->writediskfile = getwritefile (p, currprefs.floppyslots[drv - &floppy[0]].df, &wrprot); if (drv->writediskfile) { drv->wrprot = wrprot; if (!read_header_ext2 (drv->writediskfile, drv->writetrackdata, &drv->write_num_tracks, 0)) { @@ -846,7 +845,7 @@ static int openwritefile (drive *drv, int create) return drv->writediskfile ? 1 : 0; } -static bool diskfile_iswriteprotect (const TCHAR *fname, int *needwritefile, drive_type *drvtype) +static bool diskfile_iswriteprotect (struct uae_prefs *p, const TCHAR *fname, int *needwritefile, drive_type *drvtype) { struct zfile *zf1, *zf2; bool wrprot1 = 0, wrprot2 = 1; @@ -854,14 +853,14 @@ static bool diskfile_iswriteprotect (const TCHAR *fname, int *needwritefile, dri *needwritefile = 0; *drvtype = DRV_35_DD; - DISK_validate_filename (fname, 1, &wrprot1, NULL, &zf1); + DISK_validate_filename (p, fname, 1, &wrprot1, NULL, &zf1); if (!zf1) return 1; if (zfile_iscompressed (zf1)) { wrprot1 = 1; *needwritefile = 1; } - zf2 = getwritefile (fname, &wrprot2); + zf2 = getwritefile (p, fname, &wrprot2); zfile_fclose (zf2); zfile_fread (buffer, sizeof (char), 25, zf1); zfile_fclose (zf1); @@ -898,7 +897,7 @@ static int drive_insert (drive * drv, struct uae_prefs *p, int dnum, const TCHAR const TCHAR *ext; drive_image_free (drv); - DISK_validate_filename (fname, 1, &drv->wrprot, &drv->crc32, &drv->diskfile); + DISK_validate_filename (p, fname, 1, &drv->wrprot, &drv->crc32, &drv->diskfile); drv->ddhd = 1; drv->num_secs = 0; drv->hard_num_cyls = p->floppyslots[dnum].dfxtype == DRV_525_SD ? 40 : 80; @@ -1128,7 +1127,7 @@ static int drive_insert (drive * drv, struct uae_prefs *p, int dnum, const TCHAR tid->revolutions = 1; } } - openwritefile (drv, 0); + openwritefile (p, drv, 0); drive_settype_id (drv); /* Set DD or HD drive */ drive_fill_bigbuf (drv, 1); drv->mfmpos = uaerand (); @@ -1240,7 +1239,7 @@ static int drive_writeprotected (drive * drv) if (drv->catweasel) return 1; #endif - return drv->wrprot || drv->diskfile == NULL; + return currprefs.floppy_read_only || drv->wrprot || drv->diskfile == NULL; } static int drive_running (drive * drv) @@ -2171,11 +2170,11 @@ void disk_creatediskfile (const TCHAR *name, int type, drive_type adftype, const } -int disk_getwriteprotect (const TCHAR *name) +int disk_getwriteprotect (struct uae_prefs *p, const TCHAR *name) { int needwritefile; drive_type drvtype; - return diskfile_iswriteprotect (name, &needwritefile, &drvtype); + return diskfile_iswriteprotect (p, name, &needwritefile, &drvtype); } static void diskfile_readonly (const TCHAR *name, bool readonly) @@ -2215,7 +2214,7 @@ void DISK_reinsert (int num) setdskchangetime (&floppy[num], 100); } -int disk_setwriteprotect (int num, const TCHAR *name, bool writeprotected) +int disk_setwriteprotect (struct uae_prefs *p, int num, const TCHAR *name, bool writeprotected) { int needwritefile, oldprotect; struct zfile *zf1, *zf2; @@ -2224,20 +2223,22 @@ int disk_setwriteprotect (int num, const TCHAR *name, bool writeprotected) TCHAR *name2; drive_type drvtype; - oldprotect = diskfile_iswriteprotect (name, &needwritefile, &drvtype); - DISK_validate_filename (name, 1, &wrprot1, NULL, &zf1); + oldprotect = diskfile_iswriteprotect (p, name, &needwritefile, &drvtype); + DISK_validate_filename (p, name, 1, &wrprot1, NULL, &zf1); if (!zf1) return 0; + if (wrprot1 && p->floppy_read_only) + return 0; if (zfile_iscompressed (zf1)) wrprot1 = 1; zfile_fclose (zf1); - zf2 = getwritefile (name, &wrprot2); + zf2 = getwritefile (p, name, &wrprot2); name2 = DISK_get_saveimagepath (name); if (needwritefile && zf2 == 0) disk_creatediskfile (name2, 1, drvtype, NULL, false, false); zfile_fclose (zf2); - if (writeprotected && iswritefileempty (name)) { + if (writeprotected && iswritefileempty (p, name)) { for (i = 0; i < MAX_FLOPPY_DRIVES; i++) { if (!_tcscmp (name, floppy[i].newname)) drive_eject (&floppy[i]); @@ -2611,7 +2612,7 @@ void dumpdisk (void) if (!(disabled & (1 << i))) { console_out_f (L"Drive %d: motor %s cylinder %2d sel %s %s mfmpos %d/%d\n", i, drv->motoroff ? L"off" : L" on", drv->cyl, (selected & (1 << i)) ? L"no" : L"yes", - drive_writeprotected(drv) ? L"ro" : L"rw", drv->mfmpos, drv->tracklen); + drive_writeprotected (drv) ? L"ro" : L"rw", drv->mfmpos, drv->tracklen); if (drv->motoroff == 0) { w = word; for (j = 0; j < 15; j++) { diff --git a/drawing.cpp b/drawing.cpp index c52e9baa..006c6ebc 100644 --- a/drawing.cpp +++ b/drawing.cpp @@ -2328,7 +2328,7 @@ static void init_drawing_frame (void) if (currprefs.gfx_autoresolution_minv < 0) { if (nl < nr) nl = nr; - } else if (nr < currprefs.gfx_autoresolution_minv) { + } else if (nl < currprefs.gfx_autoresolution_minv) { nl = currprefs.gfx_autoresolution_minv; } diff --git a/filesys_bootrom.cpp b/filesys_bootrom.cpp index 6671c942..42d8a472 100644 --- a/filesys_bootrom.cpp +++ b/filesys_bootrom.cpp @@ -1,13 +1,13 @@ db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); - db(0x00); db(0x00); db(0x00); db(0x09); db(0x60); db(0x00); db(0x0b); db(0x8e); + db(0x00); db(0x00); db(0x00); db(0x09); db(0x60); db(0x00); db(0x0b); db(0x94); db(0x00); db(0x00); db(0x09); db(0x70); db(0x00); db(0x00); db(0x00); db(0xe0); db(0x00); db(0x00); db(0x02); db(0x9c); db(0x00); db(0x00); db(0x00); db(0x24); - db(0x00); db(0x00); db(0x03); db(0x58); db(0x00); db(0x00); db(0x0f); db(0x6a); - db(0x00); db(0x00); db(0x13); db(0xfa); db(0x43); db(0xfa); db(0x18); db(0xe8); + db(0x00); db(0x00); db(0x03); db(0x58); db(0x00); db(0x00); db(0x0f); db(0x70); + db(0x00); db(0x00); db(0x14); db(0x00); db(0x43); db(0xfa); db(0x18); db(0xec); db(0x4e); db(0xae); db(0xff); db(0xa0); db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x16); db(0x20); db(0x40); db(0x4e); db(0x90); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xe0); db(0xe2); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x11); db(0x61); db(0x00); db(0x0d); db(0x92); db(0x4e); db(0x90); + db(0x72); db(0x11); db(0x61); db(0x00); db(0x0d); db(0x98); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x4c); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x40); db(0x70); db(0x14); db(0x24); db(0x00); db(0x72); db(0x01); db(0x4e); db(0xae); @@ -22,16 +22,16 @@ db(0x20); db(0x68); db(0x00); db(0x02); db(0x2f); db(0x08); db(0x4e); db(0x90); db(0x20); db(0x5f); db(0x58); db(0x8f); db(0x48); db(0xe7); db(0xff); db(0x7e); db(0x22); db(0x4e); db(0x20); db(0x08); db(0x30); db(0x7c); db(0xff); db(0xb8); - db(0x4e); db(0xae); db(0xfe); db(0x5c); db(0x61); db(0x00); db(0x13); db(0x3c); - db(0x61); db(0x00); db(0x17); db(0x04); db(0x4c); db(0xdf); db(0x7e); db(0xff); + db(0x4e); db(0xae); db(0xfe); db(0x5c); db(0x61); db(0x00); db(0x13); db(0x42); + db(0x61); db(0x00); db(0x17); db(0x08); db(0x4c); db(0xdf); db(0x7e); db(0xff); db(0x4e); db(0x75); db(0x00); db(0x00); db(0x08); db(0x00); db(0x00); db(0x02); db(0x67); db(0x06); db(0x4e); db(0xb9); db(0x00); db(0xf0); db(0x00); db(0x00); - db(0x4e); db(0xf9); db(0x00); db(0xf0); db(0x00); db(0x00); db(0x7c); db(0x00); + db(0x4e); db(0xf9); db(0x00); db(0xf0); db(0x00); db(0x00); db(0x00); db(0x00); db(0x48); db(0xe7); db(0xff); db(0xfe); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x30); db(0x3c); db(0xff); db(0xfc); db(0x61); db(0x00); db(0x0c); db(0xe8); - db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x18); db(0x49); db(0x70); db(0x24); + db(0x30); db(0x3c); db(0xff); db(0xfc); db(0x61); db(0x00); db(0x0c); db(0xee); + db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x18); db(0x4d); db(0x70); db(0x24); db(0x7a); db(0x01); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); - db(0x66); db(0x0c); db(0x43); db(0xfa); db(0x18); db(0x39); db(0x70); db(0x00); + db(0x66); db(0x0c); db(0x43); db(0xfa); db(0x18); db(0x3d); db(0x70); db(0x00); db(0x7a); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x4a); db(0xad); db(0x01); db(0x0c); db(0x67); db(0x00); db(0x00); db(0x84); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); @@ -55,38 +55,38 @@ db(0x00); db(0x24); db(0x00); db(0x14); db(0x65); db(0x04); db(0x00); db(0x44); db(0x01); db(0x00); db(0x43); db(0xf9); db(0x00); db(0x21); db(0x00); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xea); db(0x4a); db(0x80); db(0x66); db(0x20); - db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x0c); db(0x10); + db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x0c); db(0x16); db(0x4e); db(0x90); db(0x22); db(0x04); db(0x74); db(0xf6); db(0x20); db(0x7c); db(0x00); db(0x20); db(0x00); db(0x00); db(0x90); db(0x88); db(0x65); db(0x08); db(0x67); db(0x06); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfd); db(0x96); - db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x0b); db(0xf0); + db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x0b); db(0xf6); db(0x4e); db(0x90); db(0x20); db(0x49); db(0x20); db(0x01); db(0x67); db(0x0c); - db(0x22); db(0x04); db(0x74); db(0xfb); db(0x43); db(0xfa); db(0x17); db(0x6d); - db(0x4e); db(0xae); db(0xfd); db(0x96); db(0x41); db(0xfa); db(0x16); db(0xe4); + db(0x22); db(0x04); db(0x74); db(0xfb); db(0x43); db(0xfa); db(0x17); db(0x71); + db(0x4e); db(0xae); db(0xfd); db(0x96); db(0x41); db(0xfa); db(0x16); db(0xe8); db(0x43); db(0xfa); db(0x00); db(0x54); db(0x70); db(0x0a); db(0x61); db(0x00); - db(0x0c); db(0xaa); db(0x22); db(0x40); db(0x72); db(0x01); db(0x30); db(0x3c); - db(0xff); db(0x48); db(0x61); db(0x00); db(0x0b); db(0xc2); db(0x4e); db(0x90); + db(0x0c); db(0xb0); db(0x22); db(0x40); db(0x72); db(0x01); db(0x30); db(0x3c); + db(0xff); db(0x48); db(0x61); db(0x00); db(0x0b); db(0xc8); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x00); db(0x28); db(0x01); db(0x26); db(0x09); db(0x24); db(0x48); db(0x43); db(0xfa); - db(0x16); db(0xde); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); + db(0x16); db(0xe2); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x67); db(0x14); db(0x2c); db(0x40); db(0x22); db(0x0a); db(0xe4); db(0x8b); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x22); db(0x4e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x4c); db(0xdf); db(0x44); db(0x1c); db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); - db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x41); db(0xfa); db(0x16); db(0x8f); + db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x41); db(0xfa); db(0x16); db(0x93); db(0x43); db(0xfa); db(0x00); db(0x16); db(0x70); db(0x0f); db(0x22); db(0x3c); db(0x00); db(0x00); db(0x1f); db(0x40); db(0x61); db(0x00); db(0xff); db(0xa8); - db(0x60); db(0xdc); db(0x6e); db(0x06); db(0x00); db(0x00); db(0x00); db(0x10); + db(0x60); db(0xdc); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); db(0x72); db(0x02); db(0x30); db(0x3c); - db(0xff); db(0x48); db(0x61); db(0x00); db(0x0b); db(0x4a); db(0x4e); db(0x90); - db(0x22); db(0x00); db(0x6b); db(0x04); db(0x61); db(0x00); db(0x08); db(0x86); + db(0xff); db(0x48); db(0x61); db(0x00); db(0x0b); db(0x50); db(0x4e); db(0x90); + db(0x22); db(0x00); db(0x6b); db(0x04); db(0x61); db(0x00); db(0x08); db(0x8c); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x20); - db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x0b); db(0x30); + db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x0b); db(0x36); db(0x70); db(0x00); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xa2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x30); db(0x3c); - db(0xff); db(0x50); db(0x61); db(0x00); db(0x0b); db(0x1a); db(0x70); db(0x02); + db(0xff); db(0x50); db(0x61); db(0x00); db(0x0b); db(0x20); db(0x70); db(0x02); db(0x4e); db(0x90); db(0x0c); db(0x40); db(0x00); db(0x01); db(0x6d); db(0x00); db(0x00); db(0x7c); db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0xe4); db(0x0c); db(0x40); db(0x00); db(0x02); db(0x6e); db(0x08); @@ -104,17 +104,17 @@ db(0x00); db(0x18); db(0x25); db(0x49); db(0x00); db(0x1a); db(0x20); db(0x69); db(0x00); db(0x10); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x00); db(0xff); db(0x74); db(0x30); db(0x3c); db(0xff); db(0x50); - db(0x61); db(0x00); db(0x0a); db(0x8c); db(0x70); db(0x04); db(0x4e); db(0x90); + db(0x61); db(0x00); db(0x0a); db(0x92); db(0x70); db(0x04); db(0x4e); db(0x90); db(0x70); db(0x01); db(0x4c); db(0xdf); db(0x04); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xc0); db(0x61); db(0x00); db(0xfc); db(0xda); db(0x70); db(0x1a); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); db(0x41); db(0xfa); - db(0x15); db(0x63); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); + db(0x15); db(0x67); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0xff); db(0x24); db(0x23); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xfa); db(0xff); db(0x1c); db(0x23); db(0x48); db(0x00); db(0x12); db(0x33); db(0x7c); db(0x02); db(0x14); db(0x00); db(0x08); db(0x70); db(0x03); db(0x4e); db(0xae); - db(0xff); db(0x58); db(0x30); db(0x3a); db(0x0b); db(0xd6); db(0x67); db(0x04); - db(0x61); db(0x00); db(0x0b); db(0x74); db(0x4c); db(0xdf); db(0x03); db(0x03); + db(0xff); db(0x58); db(0x30); db(0x3a); db(0x0b); db(0xdc); db(0x67); db(0x04); + db(0x61); db(0x00); db(0x0b); db(0x7a); db(0x4c); db(0xdf); db(0x03); db(0x03); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xf2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x48); db(0x26); db(0x49); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0xbe); db(0x22); db(0x3c); db(0x00); db(0x01); @@ -123,7 +123,7 @@ db(0x00); db(0x00); db(0x00); db(0x0e); db(0x52); db(0x40); db(0x0c); db(0x40); db(0x00); db(0x8c); db(0x66); db(0xf2); db(0x20); db(0x0a); db(0xe4); db(0x88); db(0x21); db(0x40); db(0x00); db(0x36); db(0x22); db(0x48); db(0x41); db(0xfa); - db(0x14); db(0xf3); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b); + db(0x14); db(0xf7); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b); db(0x01); db(0x98); db(0x41); db(0xe8); db(0x00); db(0x12); db(0x4e); db(0xae); db(0xff); db(0x10); db(0x4c); db(0xdf); db(0x4f); db(0x03); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x7f); db(0x7e); db(0x2c); db(0x78); db(0x00); db(0x04); @@ -160,13 +160,13 @@ db(0x60); db(0xf4); db(0x48); db(0xe7); db(0x40); db(0xe2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x41); db(0xee); db(0x01); db(0x50); db(0x20); db(0x50); db(0x4a); db(0x90); db(0x67); db(0x1a); db(0x22); db(0x68); db(0x00); db(0x0a); - db(0x45); db(0xfa); db(0x14); db(0x45); db(0x10); db(0x19); db(0x12); db(0x1a); + db(0x45); db(0xfa); db(0x14); db(0x49); db(0x10); db(0x19); db(0x12); db(0x1a); db(0xb0); db(0x01); db(0x66); db(0x06); db(0x4a); db(0x00); db(0x67); db(0x42); db(0x60); db(0xf2); db(0x20); db(0x50); db(0x60); db(0xe2); db(0x70); db(0x20); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x08); - db(0x00); db(0x08); db(0x41); db(0xfa); db(0x14); db(0x1b); db(0x25); db(0x48); - db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x13); db(0x97); db(0x25); db(0x48); + db(0x00); db(0x08); db(0x41); db(0xfa); db(0x14); db(0x1f); db(0x25); db(0x48); + db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x13); db(0x9b); db(0x25); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xea); db(0x00); db(0x12); db(0x20); db(0x88); db(0x58); db(0x90); db(0x21); db(0x48); db(0x00); db(0x08); db(0x41); db(0xee); db(0x01); db(0x50); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xff); db(0x0a); @@ -271,8 +271,8 @@ db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x20); db(0x6c); db(0x00); db(0x24); db(0x4a); db(0x90); db(0x4e); db(0x75); db(0x61); db(0x00); db(0xfc); db(0x7c); db(0x21); db(0x40); db(0x01); db(0x98); db(0x2f); db(0x08); db(0x30); db(0x3c); - db(0xff); db(0xfc); db(0x61); db(0x00); db(0x05); db(0x52); db(0x2a); db(0x50); - db(0x30); db(0x3c); db(0xff); db(0x28); db(0x61); db(0x00); db(0x05); db(0x48); + db(0xff); db(0xfc); db(0x61); db(0x00); db(0x05); db(0x58); db(0x2a); db(0x50); + db(0x30); db(0x3c); db(0xff); db(0x28); db(0x61); db(0x00); db(0x05); db(0x4e); db(0x22); db(0x48); db(0x20); db(0x5f); db(0x42); db(0xa8); db(0x01); db(0x90); db(0x42); db(0xa8); db(0x01); db(0x94); db(0x4e); db(0x91); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xcc); db(0x20); db(0x28); db(0x01); db(0x90); @@ -281,7 +281,7 @@ db(0x20); db(0x5f); db(0x21); db(0x40); db(0x01); db(0x94); db(0x67); db(0x00); db(0x00); db(0xae); db(0x2c); db(0x4c); db(0x2f); db(0x08); db(0x4e); db(0xae); db(0xff); db(0x70); db(0x20); db(0x5f); db(0x22); db(0x48); db(0x26); db(0x40); - db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00); db(0x05); db(0x00); + db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00); db(0x05); db(0x06); db(0x4e); db(0x90); db(0x70); db(0x00); db(0x27); db(0x40); db(0x00); db(0x08); db(0x27); db(0x40); db(0x00); db(0x10); db(0x27); db(0x40); db(0x00); db(0x20); db(0x20); db(0x29); db(0x01); db(0x94); db(0x67); db(0x22); db(0x20); db(0x40); @@ -289,7 +289,7 @@ db(0x20); db(0x29); db(0x01); db(0x90); db(0x22); db(0x69); db(0x01); db(0x94); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x4c); db(0xdf); db(0x03); db(0x01); db(0x61); db(0x00); db(0xfa); db(0x94); - db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00); db(0x04); db(0xc0); + db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00); db(0x04); db(0xc6); db(0x4e); db(0x90); db(0x16); db(0x29); db(0x00); db(0x4f); db(0x0c); db(0x03); db(0x00); db(0x80); db(0x67); db(0x38); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x14); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); @@ -303,8 +303,8 @@ db(0x2c); db(0x4c); db(0x4e); db(0xae); db(0xff); db(0x6a); db(0x4e); db(0x75); db(0x61); db(0x00); db(0xfb); db(0x80); db(0x21); db(0x40); db(0x01); db(0x98); db(0x2f); db(0x08); db(0x30); db(0x3c); db(0xff); db(0xfc); db(0x61); db(0x00); - db(0x04); db(0x56); db(0x2a); db(0x50); db(0x30); db(0x3c); db(0xff); db(0x28); - db(0x61); db(0x00); db(0x04); db(0x4c); db(0x22); db(0x48); db(0x20); db(0x5f); + db(0x04); db(0x5c); db(0x2a); db(0x50); db(0x30); db(0x3c); db(0xff); db(0x28); + db(0x61); db(0x00); db(0x04); db(0x52); db(0x22); db(0x48); db(0x20); db(0x5f); db(0x42); db(0xa8); db(0x01); db(0x90); db(0x42); db(0xa8); db(0x01); db(0x94); db(0x4e); db(0x91); db(0x26); db(0x00); db(0x0c); db(0x43); db(0xff); db(0xfe); db(0x67); db(0x00); db(0xf8); db(0x7a); db(0x20); db(0x28); db(0x01); db(0x90); @@ -312,10 +312,10 @@ db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x5f); db(0x21); db(0x40); db(0x01); db(0x94); db(0x4a); db(0x83); db(0x6a); db(0x0e); db(0x22); db(0x48); db(0x30); db(0x3c); db(0xff); db(0x20); - db(0x61); db(0x00); db(0x04); db(0x0c); db(0x4e); db(0x90); db(0x60); db(0x26); + db(0x61); db(0x00); db(0x04); db(0x12); db(0x4e); db(0x90); db(0x60); db(0x26); db(0x2c); db(0x4c); db(0x2f); db(0x08); db(0x4e); db(0xae); db(0xff); db(0x70); db(0x20); db(0x5f); db(0x22); db(0x48); db(0x26); db(0x40); db(0x30); db(0x3c); - db(0xff); db(0x20); db(0x61); db(0x00); db(0x03); db(0xf2); db(0x4e); db(0x90); + db(0xff); db(0x20); db(0x61); db(0x00); db(0x03); db(0xf8); db(0x4e); db(0x90); db(0x70); db(0x00); db(0x27); db(0x40); db(0x00); db(0x08); db(0x27); db(0x40); db(0x00); db(0x10); db(0x27); db(0x40); db(0x00); db(0x20); db(0x4a); db(0xa9); db(0x01); db(0x94); db(0x67); db(0x28); db(0x20); db(0x69); db(0x01); db(0x94); @@ -325,493 +325,494 @@ db(0x4c); db(0xdf); db(0x03); db(0x01); db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00); db(0xf9); db(0x80); db(0x4a); db(0x83); db(0x6b); db(0x00); db(0xf7); db(0xf4); db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00); - db(0x03); db(0xa6); db(0x4e); db(0x90); db(0x20); db(0x03); db(0x16); db(0x29); + db(0x03); db(0xac); db(0x4e); db(0x90); db(0x20); db(0x03); db(0x16); db(0x29); db(0x00); db(0x4f); db(0x4a); db(0x80); db(0x66); db(0x1a); db(0x27); db(0x7c); db(0x00); db(0x00); db(0x17); db(0x70); db(0x00); db(0x14); db(0x41); db(0xfa); db(0xf5); db(0xb4); db(0x20); db(0x08); db(0xe4); db(0x88); db(0x27); db(0x40); db(0x00); db(0x20); db(0x70); db(0xff); db(0x27); db(0x40); db(0x00); db(0x24); - db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x3a); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x70); db(0x14); db(0x22); db(0x3c); db(0x00); db(0x01); - db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); - db(0x30); db(0x3c); db(0x10); db(0x00); db(0x80); db(0x03); db(0x33); db(0x40); - db(0x00); db(0x08); db(0x23); db(0x6d); db(0x01); db(0x04); db(0x00); db(0x0a); - db(0x23); db(0x4b); db(0x00); db(0x10); db(0x41); db(0xec); db(0x00); db(0x4a); - db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x4e); db(0xae); db(0xfe); db(0xf2); - db(0x4e); db(0xae); db(0xff); db(0x76); db(0x70); db(0x00); db(0x4e); db(0x75); - db(0x24); db(0x49); db(0x20); db(0x4b); db(0x72); db(0x00); db(0x22); db(0x41); - db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x08); db(0x08); db(0x07); - db(0x00); db(0x02); db(0x67); db(0x02); db(0x72); db(0x01); db(0x70); db(0xec); - db(0x2c); db(0x4c); db(0x4e); db(0xae); db(0xff); db(0x6a); db(0x08); db(0x07); - db(0x00); db(0x01); db(0x67); db(0x5c); db(0x08); db(0x07); db(0x00); db(0x02); - db(0x66); db(0x56); db(0x20); db(0x52); db(0x74); db(0x02); db(0x52); db(0x82); - db(0x4a); db(0x30); db(0x28); db(0xfd); db(0x66); db(0xf8); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x20); db(0x02); db(0x72); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x3a); db(0x20); db(0x52); - db(0x24); db(0x40); db(0x22); db(0x4a); db(0x12); db(0xd8); db(0x66); db(0xfc); - db(0x13); db(0x7c); db(0x00); db(0x3a); db(0xff); db(0xff); db(0x42); db(0x11); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x0e); db(0x18); - db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2c); db(0x40); - db(0x22); db(0x0a); db(0x4e); db(0xae); db(0xff); db(0x52); db(0x22); db(0x4e); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); - db(0x22); db(0x4a); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e); - db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3f); db(0x3e); - db(0x2c); db(0x01); db(0x7e); db(0x06); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x43); db(0xfa); db(0x0e); db(0x13); db(0x70); db(0x24); db(0x4e); db(0xae); - db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x66); db(0x0e); db(0x08); db(0x87); - db(0x00); db(0x02); db(0x43); db(0xfa); db(0x0e); db(0x01); db(0x70); db(0x00); - db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x20); db(0x3c); - db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); - db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); - db(0x4a); db(0x80); db(0x67); db(0x2c); db(0x21); db(0x4c); db(0x01); db(0x9c); - db(0x48); db(0xe7); db(0x00); db(0x8a); db(0x61); db(0x00); db(0xfe); db(0x0a); - db(0x4c); db(0xdf); db(0x51); db(0x00); db(0x0c); db(0x80); db(0xff); db(0xff); - db(0xff); db(0xfe); db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46); - db(0x48); db(0x46); db(0x60); db(0xe4); db(0x22); db(0x48); db(0x20); db(0x3c); - db(0x00); db(0x00); db(0x02); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x2e); - db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x4c); db(0xdf); - db(0x7c); db(0xfc); db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x20); db(0x40); - db(0x4b); db(0xe8); db(0x00); db(0x5c); db(0x43); db(0xfa); db(0x0d); db(0x68); - db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x24); db(0x40); - db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0xb9); db(0x22); db(0x3c); - db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x26); db(0x40); db(0x7c); db(0x00); db(0x26); db(0x86); db(0x27); db(0x46); - db(0x00); db(0x04); db(0x27); db(0x46); db(0x00); db(0x08); db(0x27); db(0x4a); - db(0x00); db(0xa0); db(0x50); db(0xeb); db(0x00); db(0x9e); db(0x93); db(0xc9); - db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x27); db(0x40); db(0x00); db(0xb0); - db(0x41); db(0xfa); db(0x0c); db(0x50); db(0x70); db(0x00); db(0x72); db(0x00); - db(0x61); db(0x00); db(0x02); db(0x8e); db(0x27); db(0x40); db(0x00); db(0xa4); - db(0x41); db(0xfa); db(0x0c); db(0x4d); db(0x70); db(0x00); db(0x72); db(0x00); - db(0x61); db(0x00); db(0x02); db(0x7e); db(0x27); db(0x40); db(0x00); db(0xa8); - db(0x7a); db(0x00); db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x80); - db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); - db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x30); db(0x3c); db(0xff); db(0x40); - db(0x61); db(0x00); db(0x01); db(0xbc); db(0x70); db(0x00); db(0x4e); db(0x90); - db(0x24); db(0x00); db(0x70); db(0x01); db(0x61); db(0x00); db(0xf9); db(0x3c); - db(0x08); db(0x02); db(0x00); db(0x01); db(0x67); db(0x06); db(0x70); db(0x01); - db(0x61); db(0x00); db(0xfa); db(0xa4); db(0x60); db(0x00); db(0x01); db(0x02); - db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); - db(0x4a); db(0x80); db(0x66); db(0x10); db(0x70); db(0x00); db(0x12); db(0x2d); - db(0x00); db(0x0f); db(0x03); db(0xc0); db(0x08); db(0xc0); db(0x00); db(0x0d); - db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x4a); db(0x2b); db(0x00); db(0xac); - db(0x67); db(0x08); db(0x61); db(0x00); db(0xfb); db(0x50); db(0x42); db(0x2b); - db(0x00); db(0xac); db(0x20); db(0x0c); db(0x67); db(0x54); db(0x0c); db(0x6c); - db(0x00); db(0x26); db(0x00); db(0x12); db(0x66); db(0x4c); db(0x0c); db(0xac); - db(0x40); db(0x00); db(0x00); db(0x00); db(0x00); db(0x14); db(0x66); db(0x42); - db(0x0c); db(0x6c); db(0x12); db(0x34); db(0x00); db(0x18); db(0x66); db(0x3a); - db(0x20); db(0x6c); db(0x00); db(0x1a); db(0x20); db(0x28); db(0x00); db(0x0c); - db(0x02); db(0x80); db(0x80); db(0x00); db(0x00); db(0x08); db(0x0c); db(0x80); - db(0x80); db(0x00); db(0x00); db(0x08); db(0x66); db(0x18); db(0x02); db(0xa8); - db(0x7f); db(0xff); db(0xff); db(0xff); db(0x00); db(0x0c); db(0x20); db(0x68); - db(0x00); db(0x10); db(0x22); db(0x4c); db(0x12); db(0xbc); db(0x00); db(0x08); - db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x8a); db(0x22); db(0x4c); - db(0x70); db(0x26); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x00); - db(0xff); db(0x80); db(0x74); db(0xfe); db(0x20); db(0x0c); db(0x67); db(0x14); - db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x66); db(0x42); db(0x74); db(0xff); - db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x01); db(0x08); - db(0x70); db(0x01); db(0x4e); db(0x90); db(0x45); db(0xeb); db(0x00); db(0x04); - db(0x20); db(0x52); db(0x20); db(0x08); db(0x67); db(0x00); db(0xff); db(0x5a); - db(0x22); db(0x50); db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x04); - db(0xb4); db(0x80); db(0x66); db(0x16); db(0x48); db(0xe7); db(0x00); db(0xc0); - db(0x28); db(0x68); db(0x00); db(0x0a); db(0x61); db(0x4a); db(0x53); db(0x85); - db(0x4c); db(0xdf); db(0x03); db(0x00); db(0x24); db(0x89); db(0x20); db(0x49); - db(0x60); db(0xd8); db(0x24); db(0x48); db(0x20); db(0x49); db(0x60); db(0xd2); - db(0x0c); db(0x85); db(0x00); db(0x00); db(0x00); db(0x14); db(0x65); db(0x00); - db(0x00); db(0x0a); db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x04); - db(0x60); db(0x12); db(0x61); db(0x5c); db(0x30); db(0x3c); db(0xff); db(0x30); - db(0x61); db(0x00); db(0x00); db(0xb4); db(0x4e); db(0x90); db(0x4a); db(0x80); - db(0x67); db(0x0e); db(0x52); db(0x85); db(0x28); db(0xab); db(0x00); db(0x04); - db(0x27); db(0x4c); db(0x00); db(0x04); db(0x60); db(0x00); db(0xff); db(0x02); - db(0x28); db(0x43); db(0x61); db(0x04); db(0x60); db(0x00); db(0xfe); db(0xfa); - db(0x0c); db(0xac); db(0x00); db(0x00); db(0x00); db(0x1f); db(0x00); db(0x08); - db(0x66); db(0x04); db(0x61); db(0x00); db(0xfa); db(0x46); db(0x0c); db(0xac); - db(0x00); db(0x00); db(0x04); db(0x09); db(0x00); db(0x08); db(0x66); db(0x12); - db(0x61); db(0x00); db(0xfa); db(0x74); db(0x66); db(0x0c); db(0x30); db(0x3c); - db(0xff); db(0x58); db(0x61); db(0x00); db(0x00); db(0x72); db(0x4e); db(0x90); - db(0x60); db(0xee); db(0x22); db(0x54); db(0x20); db(0x6c); db(0x00); db(0x04); - db(0x29); db(0x4d); db(0x00); db(0x04); db(0x4e); db(0xee); db(0xfe); db(0x92); - db(0x2f); db(0x05); db(0x7a); db(0xfc); db(0x24); db(0x53); db(0x2e); db(0x0a); - db(0x22); db(0x0a); db(0x67); db(0x00); db(0x00); db(0x0c); db(0x52); db(0x85); - db(0x67); db(0x1e); db(0x22); db(0x4a); db(0x24); db(0x52); db(0x60); db(0xf0); - db(0x52); db(0x85); db(0x67); db(0x3c); db(0x24); db(0x47); db(0x70); db(0x18); - db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x52); db(0x46); - db(0x24); db(0x40); db(0x24); db(0x87); db(0x2e); db(0x0a); db(0x60); db(0xe8); - db(0x20); db(0x12); db(0x67); db(0x24); db(0x20); db(0x40); db(0x20); db(0x10); - db(0x67); db(0x1e); db(0x20); db(0x40); db(0x20); db(0x10); db(0x67); db(0x18); - db(0x70); db(0x00); db(0x22); db(0x80); db(0x22); db(0x4a); db(0x24); db(0x51); - db(0x70); db(0x18); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x06); db(0x86); - db(0x00); db(0x01); db(0x00); db(0x00); db(0x20); db(0x0a); db(0x66); db(0xec); - db(0x26); db(0x87); db(0x2a); db(0x1f); db(0x4e); db(0x75); db(0x41); db(0xfa); - db(0xf2); db(0x1c); db(0x02); db(0x80); db(0x00); db(0x00); db(0xff); db(0xff); - db(0xd1); db(0xc0); db(0x4e); db(0x75); db(0x20); db(0x88); db(0x58); db(0x90); - db(0x42); db(0xa8); db(0x00); db(0x04); db(0x21); db(0x48); db(0x00); db(0x08); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); - db(0x91); db(0xc8); db(0x24); db(0x00); db(0x6b); db(0x32); db(0x70); db(0x22); - db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x91); db(0xc8); db(0x24); db(0x40); db(0x4a); db(0x80); - db(0x67); db(0x1e); db(0x15); db(0x7c); db(0x00); db(0x04); db(0x00); db(0x08); - db(0x15); db(0x42); db(0x00); db(0x0f); db(0x93); db(0xc9); db(0x4e); db(0xae); - db(0xfe); db(0xda); db(0x25); db(0x40); db(0x00); db(0x10); db(0x41); db(0xea); - db(0x00); db(0x14); db(0x61); db(0x00); db(0xff); db(0xb0); db(0x20); db(0x4a); - db(0x20); db(0x08); db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); + db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x40); db(0x0c); db(0x03); + db(0x00); db(0x80); db(0x67); db(0x3a); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x70); db(0x14); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); db(0x30); db(0x3c); + db(0x10); db(0x00); db(0x80); db(0x03); db(0x33); db(0x40); db(0x00); db(0x08); + db(0x23); db(0x6d); db(0x01); db(0x04); db(0x00); db(0x0a); db(0x23); db(0x4b); + db(0x00); db(0x10); db(0x41); db(0xec); db(0x00); db(0x4a); db(0x4e); db(0xae); + db(0xff); db(0x7c); db(0x4e); db(0xae); db(0xfe); db(0xf2); db(0x4e); db(0xae); + db(0xff); db(0x76); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x24); db(0x49); + db(0x20); db(0x4b); db(0x72); db(0x00); db(0x22); db(0x41); db(0x08); db(0x07); + db(0x00); db(0x01); db(0x67); db(0x08); db(0x08); db(0x07); db(0x00); db(0x02); + db(0x67); db(0x02); db(0x72); db(0x01); db(0x70); db(0x80); db(0x2c); db(0x4c); + db(0x4e); db(0xae); db(0xff); db(0x6a); db(0x08); db(0x07); db(0x00); db(0x01); + db(0x67); db(0x5c); db(0x08); db(0x07); db(0x00); db(0x02); db(0x66); db(0x56); + db(0x20); db(0x52); db(0x74); db(0x02); db(0x52); db(0x82); db(0x4a); db(0x30); + db(0x28); db(0xfd); db(0x66); db(0xf8); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x20); db(0x02); db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x4a); db(0x80); db(0x67); db(0x3a); db(0x20); db(0x52); db(0x24); db(0x40); + db(0x22); db(0x4a); db(0x12); db(0xd8); db(0x66); db(0xfc); db(0x13); db(0x7c); + db(0x00); db(0x3a); db(0xff); db(0xff); db(0x42); db(0x11); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x43); db(0xfa); db(0x0e); db(0x16); db(0x70); db(0x00); + db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2c); db(0x40); db(0x22); db(0x0a); + db(0x4e); db(0xae); db(0xff); db(0x52); db(0x22); db(0x4e); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4a); + db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x70); db(0x00); + db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3f); db(0x3e); db(0x2c); db(0x01); + db(0x7e); db(0x06); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); + db(0x0e); db(0x11); db(0x70); db(0x24); db(0x4e); db(0xae); db(0xfd); db(0xd8); + db(0x4a); db(0x80); db(0x66); db(0x0e); db(0x08); db(0x87); db(0x00); db(0x02); + db(0x43); db(0xfa); db(0x0d); db(0xff); db(0x70); db(0x00); db(0x4e); db(0xae); + db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00); + db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); db(0x4a); db(0x80); + db(0x67); db(0x2c); db(0x21); db(0x4c); db(0x01); db(0x9c); db(0x48); db(0xe7); + db(0x00); db(0x8a); db(0x61); db(0x00); db(0xfe); db(0x04); db(0x4c); db(0xdf); + db(0x51); db(0x00); db(0x0c); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); + db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46); db(0x48); db(0x46); + db(0x60); db(0xe4); db(0x22); db(0x48); db(0x20); db(0x3c); db(0x00); db(0x00); + db(0x02); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x22); db(0x4c); + db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x4c); db(0xdf); db(0x7c); db(0xfc); + db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x93); db(0xc9); + db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x20); db(0x40); db(0x4b); db(0xe8); + db(0x00); db(0x5c); db(0x43); db(0xfa); db(0x0d); db(0x66); db(0x70); db(0x00); + db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x24); db(0x40); db(0x20); db(0x3c); + db(0x00); db(0x00); db(0x00); db(0xb9); db(0x22); db(0x3c); db(0x00); db(0x01); + db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x26); db(0x40); + db(0x7c); db(0x00); db(0x26); db(0x86); db(0x27); db(0x46); db(0x00); db(0x04); + db(0x27); db(0x46); db(0x00); db(0x08); db(0x27); db(0x4a); db(0x00); db(0xa0); + db(0x50); db(0xeb); db(0x00); db(0x9e); db(0x93); db(0xc9); db(0x4e); db(0xae); + db(0xfe); db(0xda); db(0x27); db(0x40); db(0x00); db(0xb0); db(0x41); db(0xfa); + db(0x0c); db(0x4e); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); + db(0x02); db(0x8e); db(0x27); db(0x40); db(0x00); db(0xa4); db(0x41); db(0xfa); + db(0x0c); db(0x4b); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); + db(0x02); db(0x7e); db(0x27); db(0x40); db(0x00); db(0xa8); db(0x7a); db(0x00); + db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x80); db(0x20); db(0x4d); + db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x26); db(0x2c); + db(0x00); db(0x0a); db(0x30); db(0x3c); db(0xff); db(0x40); db(0x61); db(0x00); + db(0x01); db(0xbc); db(0x70); db(0x00); db(0x4e); db(0x90); db(0x24); db(0x00); + db(0x70); db(0x01); db(0x61); db(0x00); db(0xf9); db(0x36); db(0x08); db(0x02); + db(0x00); db(0x01); db(0x67); db(0x06); db(0x70); db(0x01); db(0x61); db(0x00); + db(0xfa); db(0x9e); db(0x60); db(0x00); db(0x01); db(0x02); db(0x20); db(0x4d); + db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x4a); db(0x80); + db(0x66); db(0x10); db(0x70); db(0x00); db(0x12); db(0x2d); db(0x00); db(0x0f); + db(0x03); db(0xc0); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); + db(0xfe); db(0xc2); db(0x4a); db(0x2b); db(0x00); db(0xac); db(0x67); db(0x08); + db(0x61); db(0x00); db(0xfb); db(0x4a); db(0x42); db(0x2b); db(0x00); db(0xac); + db(0x20); db(0x0c); db(0x67); db(0x54); db(0x0c); db(0x6c); db(0x00); db(0x26); + db(0x00); db(0x12); db(0x66); db(0x4c); db(0x0c); db(0xac); db(0x40); db(0x00); + db(0x00); db(0x00); db(0x00); db(0x14); db(0x66); db(0x42); db(0x0c); db(0x6c); + db(0x12); db(0x34); db(0x00); db(0x18); db(0x66); db(0x3a); db(0x20); db(0x6c); + db(0x00); db(0x1a); db(0x20); db(0x28); db(0x00); db(0x0c); db(0x02); db(0x80); + db(0x80); db(0x00); db(0x00); db(0x08); db(0x0c); db(0x80); db(0x80); db(0x00); + db(0x00); db(0x08); db(0x66); db(0x18); db(0x02); db(0xa8); db(0x7f); db(0xff); + db(0xff); db(0xff); db(0x00); db(0x0c); db(0x20); db(0x68); db(0x00); db(0x10); + db(0x22); db(0x4c); db(0x12); db(0xbc); db(0x00); db(0x08); db(0x4e); db(0xae); + db(0xfe); db(0x92); db(0x60); db(0x8a); db(0x22); db(0x4c); db(0x70); db(0x26); + db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x00); db(0xff); db(0x80); + db(0x74); db(0xfe); db(0x20); db(0x0c); db(0x67); db(0x14); db(0x26); db(0x2c); + db(0x00); db(0x0a); db(0x66); db(0x42); db(0x74); db(0xff); db(0x30); db(0x3c); + db(0xff); db(0x50); db(0x61); db(0x00); db(0x01); db(0x08); db(0x70); db(0x01); + db(0x4e); db(0x90); db(0x45); db(0xeb); db(0x00); db(0x04); db(0x20); db(0x52); + db(0x20); db(0x08); db(0x67); db(0x00); db(0xff); db(0x5a); db(0x22); db(0x50); + db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x04); db(0xb4); db(0x80); + db(0x66); db(0x16); db(0x48); db(0xe7); db(0x00); db(0xc0); db(0x28); db(0x68); + db(0x00); db(0x0a); db(0x61); db(0x4a); db(0x53); db(0x85); db(0x4c); db(0xdf); + db(0x03); db(0x00); db(0x24); db(0x89); db(0x20); db(0x49); db(0x60); db(0xd8); + db(0x24); db(0x48); db(0x20); db(0x49); db(0x60); db(0xd2); db(0x0c); db(0x85); + db(0x00); db(0x00); db(0x00); db(0x14); db(0x65); db(0x00); db(0x00); db(0x0a); + db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x04); db(0x60); db(0x12); + db(0x61); db(0x5c); db(0x30); db(0x3c); db(0xff); db(0x30); db(0x61); db(0x00); + db(0x00); db(0xb4); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x0e); + db(0x52); db(0x85); db(0x28); db(0xab); db(0x00); db(0x04); db(0x27); db(0x4c); + db(0x00); db(0x04); db(0x60); db(0x00); db(0xff); db(0x02); db(0x28); db(0x43); + db(0x61); db(0x04); db(0x60); db(0x00); db(0xfe); db(0xfa); db(0x0c); db(0xac); + db(0x00); db(0x00); db(0x00); db(0x1f); db(0x00); db(0x08); db(0x66); db(0x04); + db(0x61); db(0x00); db(0xfa); db(0x40); db(0x0c); db(0xac); db(0x00); db(0x00); + db(0x04); db(0x09); db(0x00); db(0x08); db(0x66); db(0x12); db(0x61); db(0x00); + db(0xfa); db(0x6e); db(0x66); db(0x0c); db(0x30); db(0x3c); db(0xff); db(0x58); + db(0x61); db(0x00); db(0x00); db(0x72); db(0x4e); db(0x90); db(0x60); db(0xee); + db(0x22); db(0x54); db(0x20); db(0x6c); db(0x00); db(0x04); db(0x29); db(0x4d); + db(0x00); db(0x04); db(0x4e); db(0xee); db(0xfe); db(0x92); db(0x2f); db(0x05); + db(0x7a); db(0xfc); db(0x24); db(0x53); db(0x2e); db(0x0a); db(0x22); db(0x0a); + db(0x67); db(0x00); db(0x00); db(0x0c); db(0x52); db(0x85); db(0x67); db(0x1e); + db(0x22); db(0x4a); db(0x24); db(0x52); db(0x60); db(0xf0); db(0x52); db(0x85); + db(0x67); db(0x3c); db(0x24); db(0x47); db(0x70); db(0x18); db(0x72); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x52); db(0x46); db(0x24); db(0x40); + db(0x24); db(0x87); db(0x2e); db(0x0a); db(0x60); db(0xe8); db(0x20); db(0x12); + db(0x67); db(0x24); db(0x20); db(0x40); db(0x20); db(0x10); db(0x67); db(0x1e); + db(0x20); db(0x40); db(0x20); db(0x10); db(0x67); db(0x18); db(0x70); db(0x00); + db(0x22); db(0x80); db(0x22); db(0x4a); db(0x24); db(0x51); db(0x70); db(0x18); + db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x06); db(0x86); db(0x00); db(0x01); + db(0x00); db(0x00); db(0x20); db(0x0a); db(0x66); db(0xec); db(0x26); db(0x87); + db(0x2a); db(0x1f); db(0x4e); db(0x75); db(0x41); db(0xfa); db(0xf2); db(0x16); + db(0x02); db(0x80); db(0x00); db(0x00); db(0xff); db(0xff); db(0xd1); db(0xc0); + db(0x4e); db(0x75); db(0x20); db(0x88); db(0x58); db(0x90); db(0x42); db(0xa8); + db(0x00); db(0x04); db(0x21); db(0x48); db(0x00); db(0x08); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x4a); db(0x80); db(0x67); db(0x24); db(0x24); db(0x40); db(0x24); db(0x01); - db(0x66); db(0x02); db(0x74); db(0x30); db(0x20); db(0x02); db(0x22); db(0x3c); - db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x20); db(0x40); db(0x11); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x08); - db(0x31); db(0x42); db(0x00); db(0x12); db(0x21); db(0x4a); db(0x00); db(0x0e); - db(0x4a); db(0x80); db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); - db(0x48); db(0xe7); db(0x30); db(0x22); db(0x24); db(0x48); db(0x24); db(0x00); - db(0x26); db(0x01); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x61); db(0x00); - db(0xff); db(0x6a); db(0x22); db(0x03); db(0x61); db(0x00); db(0xff); db(0xb2); - db(0x67); db(0x18); db(0x20); db(0x4a); db(0x22); db(0x40); db(0x24); db(0x40); - db(0x20); db(0x02); db(0x72); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0x44); - db(0x22); db(0x00); db(0x70); db(0x00); db(0x4a); db(0x81); db(0x66); db(0x02); - db(0x20); db(0x0a); db(0x4a); db(0x80); db(0x4c); db(0xdf); db(0x44); db(0x0c); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x32); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x28); db(0x00); db(0x24); db(0x08); db(0x26); db(0x09); - db(0x20); db(0x3c); db(0x00); db(0x00); db(0x08); db(0x5c); db(0x22); db(0x3c); + db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x91); db(0xc8); + db(0x24); db(0x00); db(0x6b); db(0x32); db(0x70); db(0x22); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0x34); db(0x24); db(0x40); - db(0x15); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x08); db(0x15); db(0x44); - db(0x00); db(0x09); db(0x25); db(0x42); db(0x00); db(0x0a); db(0x47); db(0xea); - db(0x00); db(0x5c); db(0x25); db(0x4b); db(0x00); db(0x3a); db(0x47); db(0xeb); - db(0x08); db(0x00); db(0x25); db(0x4b); db(0x00); db(0x3e); db(0x25); db(0x4b); - db(0x00); db(0x36); db(0x22); db(0x4a); db(0x24); db(0x43); db(0x97); db(0xcb); - db(0x24); db(0x09); db(0x4e); db(0xae); db(0xfe); db(0xe6); db(0x20); db(0x02); - db(0x4c); db(0xdf); db(0x4c); db(0x1c); db(0x4e); db(0x75); db(0x41); db(0xfa); - db(0x09); db(0xb2); db(0x43); db(0xfa); db(0x01); db(0x5c); db(0x70); db(0x13); - db(0x61); db(0x00); db(0xff); db(0x98); db(0x4e); db(0x75); db(0x22); db(0x6d); - db(0x02); db(0x0c); db(0x33); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x1c); - db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); - db(0xfe); db(0x38); db(0x22); db(0x6d); db(0x02); db(0x0c); db(0x25); db(0x69); - db(0x00); db(0x20); db(0x00); db(0x0e); db(0x25); db(0x69); db(0x00); db(0x24); - db(0x00); db(0x12); db(0x22); db(0x6d); db(0x02); db(0x08); db(0x13); db(0x7c); - db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); - db(0x4e); db(0x75); db(0x42); db(0xaa); db(0x00); db(0x0e); db(0x42); db(0xaa); - db(0x00); db(0x12); db(0x22); db(0x6d); db(0x02); db(0x08); db(0x13); db(0x7c); + db(0x91); db(0xc8); db(0x24); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x1e); + db(0x15); db(0x7c); db(0x00); db(0x04); db(0x00); db(0x08); db(0x15); db(0x42); + db(0x00); db(0x0f); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); + db(0x25); db(0x40); db(0x00); db(0x10); db(0x41); db(0xea); db(0x00); db(0x14); + db(0x61); db(0x00); db(0xff); db(0xb0); db(0x20); db(0x4a); db(0x20); db(0x08); + db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0x20); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4a); db(0x80); + db(0x67); db(0x24); db(0x24); db(0x40); db(0x24); db(0x01); db(0x66); db(0x02); + db(0x74); db(0x30); db(0x20); db(0x02); db(0x22); db(0x3c); db(0x00); db(0x01); + db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); + db(0x11); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x08); db(0x31); db(0x42); + db(0x00); db(0x12); db(0x21); db(0x4a); db(0x00); db(0x0e); db(0x4a); db(0x80); + db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0x30); db(0x22); db(0x24); db(0x48); db(0x24); db(0x00); db(0x26); db(0x01); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x61); db(0x00); db(0xff); db(0x6a); + db(0x22); db(0x03); db(0x61); db(0x00); db(0xff); db(0xb2); db(0x67); db(0x18); + db(0x20); db(0x4a); db(0x22); db(0x40); db(0x24); db(0x40); db(0x20); db(0x02); + db(0x72); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0x44); db(0x22); db(0x00); + db(0x70); db(0x00); db(0x4a); db(0x81); db(0x66); db(0x02); db(0x20); db(0x0a); + db(0x4a); db(0x80); db(0x4c); db(0xdf); db(0x44); db(0x0c); db(0x4e); db(0x75); + db(0x48); db(0xe7); db(0x38); db(0x32); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x28); db(0x00); db(0x24); db(0x08); db(0x26); db(0x09); db(0x20); db(0x3c); + db(0x00); db(0x00); db(0x08); db(0x5c); db(0x22); db(0x3c); db(0x00); db(0x01); + db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); + db(0x67); db(0x00); db(0x00); db(0x34); db(0x24); db(0x40); db(0x15); db(0x7c); + db(0x00); db(0x01); db(0x00); db(0x08); db(0x15); db(0x44); db(0x00); db(0x09); + db(0x25); db(0x42); db(0x00); db(0x0a); db(0x47); db(0xea); db(0x00); db(0x5c); + db(0x25); db(0x4b); db(0x00); db(0x3a); db(0x47); db(0xeb); db(0x08); db(0x00); + db(0x25); db(0x4b); db(0x00); db(0x3e); db(0x25); db(0x4b); db(0x00); db(0x36); + db(0x22); db(0x4a); db(0x24); db(0x43); db(0x97); db(0xcb); db(0x24); db(0x09); + db(0x4e); db(0xae); db(0xfe); db(0xe6); db(0x20); db(0x02); db(0x4c); db(0xdf); + db(0x4c); db(0x1c); db(0x4e); db(0x75); db(0x41); db(0xfa); db(0x09); db(0xb0); + db(0x43); db(0xfa); db(0x01); db(0x5c); db(0x70); db(0x13); db(0x61); db(0x00); + db(0xff); db(0x98); db(0x4e); db(0x75); db(0x22); db(0x6d); db(0x02); db(0x0c); + db(0x33); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x1c); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); - db(0x4e); db(0x75); db(0x00); db(0x00); db(0xff); db(0xff); db(0x00); db(0x00); + db(0x22); db(0x6d); db(0x02); db(0x0c); db(0x25); db(0x69); db(0x00); db(0x20); + db(0x00); db(0x0e); db(0x25); db(0x69); db(0x00); db(0x24); db(0x00); db(0x12); + db(0x22); db(0x6d); db(0x02); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x01); + db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x4e); db(0x75); + db(0x42); db(0xaa); db(0x00); db(0x0e); db(0x42); db(0xaa); db(0x00); db(0x12); + db(0x22); db(0x6d); db(0x02); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x01); + db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x4e); db(0x75); + db(0x00); db(0x00); db(0xff); db(0xff); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); - db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x48); db(0xe7); - db(0xf8); db(0xfe); db(0x2a); db(0x48); db(0x95); db(0xca); db(0x97); db(0xcb); - db(0x99); db(0xcc); db(0x78); db(0x00); db(0x2c); db(0x6d); db(0x00); db(0x18); - db(0x20); db(0x6d); db(0x00); db(0x14); db(0x20); db(0x28); db(0x00); db(0x3c); - db(0x67); db(0x5c); db(0x20); db(0x40); db(0x41); db(0xe8); db(0x00); db(0x2c); - db(0x28); db(0x48); db(0x4e); db(0xae); db(0xfc); db(0xe8); db(0x72); db(0xff); - db(0x74); db(0xff); db(0xb2); db(0x80); db(0x67); db(0x48); db(0x26); db(0x00); - db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x41); db(0xed); db(0x00); db(0xc0); - db(0x70); db(0x66); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xed); - db(0x00); db(0xc0); db(0x38); db(0x28); db(0x00); db(0x64); db(0x2c); db(0x6d); - db(0x00); db(0x18); db(0x91); db(0xc8); db(0x43); db(0xed); db(0x00); db(0x38); - db(0x70); db(0x00); db(0x30); db(0x3c); db(0x00); db(0x58); db(0x22); db(0x3c); - db(0x80); db(0x00); db(0x10); db(0x00); db(0x24); db(0x03); db(0x4e); db(0xae); - db(0xfd); db(0x0c); db(0x72); db(0xff); db(0x74); db(0xff); db(0x4a); db(0x80); - db(0x6b); db(0x0c); db(0x45); db(0xed); db(0x00); db(0x38); db(0x22); db(0x2a); - db(0x00); db(0x32); db(0x24); db(0x2a); db(0x00); db(0x36); db(0x20); db(0x2c); - db(0x00); db(0x1c); db(0xb8); db(0x6d); db(0x00); db(0x2c); db(0x66); db(0x12); - db(0xb0); db(0xad); db(0x00); db(0x28); db(0x66); db(0x0c); db(0xb2); db(0xad); - db(0x00); db(0x20); db(0x66); db(0x06); db(0xb4); db(0xad); db(0x00); db(0x24); - db(0x67); db(0x40); db(0x2b); db(0x40); db(0x00); db(0x28); db(0x2b); db(0x41); - db(0x00); db(0x20); db(0x2b); db(0x42); db(0x00); db(0x24); db(0x3b); db(0x44); - db(0x00); db(0x2c); db(0x91); db(0xc8); db(0x43); db(0xed); db(0x00); db(0x90); - db(0x70); db(0x00); db(0x30); db(0x3c); db(0x00); db(0x58); db(0x22); db(0x3c); - db(0x80); db(0x00); db(0x00); db(0x00); db(0x24); db(0x03); db(0x4e); db(0xae); - db(0xfd); db(0x0c); db(0x4a); db(0x80); db(0x6b); db(0x04); db(0x47); db(0xed); - db(0x00); db(0x90); db(0x34); db(0x2d); db(0x00); db(0x2c); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x01); db(0x61); db(0x00); db(0xfd); db(0x70); - db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0x1f); db(0x4e); db(0x75); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x3e); db(0x2e); db(0x00); db(0x14); - db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x7c); db(0x00); - db(0x01); db(0xc6); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); - db(0x28); db(0x40); db(0x70); db(0x14); db(0x22); db(0x4c); db(0x4e); db(0xae); - db(0xfe); db(0xd4); db(0x70); db(0x00); db(0x30); db(0x3c); db(0x02); db(0x10); + db(0x00); db(0x00); db(0x00); db(0x00); db(0x48); db(0xe7); db(0xf8); db(0xfe); + db(0x2a); db(0x48); db(0x95); db(0xca); db(0x97); db(0xcb); db(0x99); db(0xcc); + db(0x78); db(0x00); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x20); db(0x6d); + db(0x00); db(0x14); db(0x20); db(0x28); db(0x00); db(0x3c); db(0x67); db(0x5c); + db(0x20); db(0x40); db(0x41); db(0xe8); db(0x00); db(0x2c); db(0x28); db(0x48); + db(0x4e); db(0xae); db(0xfc); db(0xe8); db(0x72); db(0xff); db(0x74); db(0xff); + db(0xb2); db(0x80); db(0x67); db(0x48); db(0x26); db(0x00); db(0x2c); db(0x6d); + db(0x00); db(0x14); db(0x41); db(0xed); db(0x00); db(0xc0); db(0x70); db(0x66); + db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xed); db(0x00); db(0xc0); + db(0x38); db(0x28); db(0x00); db(0x64); db(0x2c); db(0x6d); db(0x00); db(0x18); + db(0x91); db(0xc8); db(0x43); db(0xed); db(0x00); db(0x38); db(0x70); db(0x00); + db(0x30); db(0x3c); db(0x00); db(0x58); db(0x22); db(0x3c); db(0x80); db(0x00); + db(0x10); db(0x00); db(0x24); db(0x03); db(0x4e); db(0xae); db(0xfd); db(0x0c); + db(0x72); db(0xff); db(0x74); db(0xff); db(0x4a); db(0x80); db(0x6b); db(0x0c); + db(0x45); db(0xed); db(0x00); db(0x38); db(0x22); db(0x2a); db(0x00); db(0x32); + db(0x24); db(0x2a); db(0x00); db(0x36); db(0x20); db(0x2c); db(0x00); db(0x1c); + db(0xb8); db(0x6d); db(0x00); db(0x2c); db(0x66); db(0x12); db(0xb0); db(0xad); + db(0x00); db(0x28); db(0x66); db(0x0c); db(0xb2); db(0xad); db(0x00); db(0x20); + db(0x66); db(0x06); db(0xb4); db(0xad); db(0x00); db(0x24); db(0x67); db(0x40); + db(0x2b); db(0x40); db(0x00); db(0x28); db(0x2b); db(0x41); db(0x00); db(0x20); + db(0x2b); db(0x42); db(0x00); db(0x24); db(0x3b); db(0x44); db(0x00); db(0x2c); + db(0x91); db(0xc8); db(0x43); db(0xed); db(0x00); db(0x90); db(0x70); db(0x00); + db(0x30); db(0x3c); db(0x00); db(0x58); db(0x22); db(0x3c); db(0x80); db(0x00); + db(0x00); db(0x00); db(0x24); db(0x03); db(0x4e); db(0xae); db(0xfd); db(0x0c); + db(0x4a); db(0x80); db(0x6b); db(0x04); db(0x47); db(0xed); db(0x00); db(0x90); + db(0x34); db(0x2d); db(0x00); db(0x2c); db(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x01); db(0x61); db(0x00); db(0xfd); db(0x70); db(0x4e); db(0x90); + db(0x4c); db(0xdf); db(0x7f); db(0x1f); db(0x4e); db(0x75); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x3e); db(0x2e); db(0x00); db(0x14); db(0x70); db(0xff); + db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x7c); db(0x00); db(0x01); db(0xc6); + db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x28); db(0x40); + db(0x70); db(0x14); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0xd4); + db(0x70); db(0x00); db(0x30); db(0x3c); db(0x02); db(0x10); db(0x22); db(0x3c); + db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x2a); db(0x40); db(0x47); db(0xed); db(0x00); db(0x16); db(0x27); db(0x4e); + db(0x00); db(0x10); db(0x27); db(0x4c); db(0x00); db(0x08); db(0x27); db(0x46); + db(0x00); db(0x0c); db(0x70); db(0xff); db(0x37); db(0x40); db(0x00); db(0x00); + db(0x43); db(0xed); db(0x00); db(0x00); db(0x13); db(0x7c); db(0x00); db(0x02); + db(0x00); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x05); db(0x00); db(0x09); + db(0x41); db(0xfa); db(0x07); db(0xf4); db(0x23); db(0x48); db(0x00); db(0x0a); + db(0x41); db(0xfa); db(0x02); db(0xda); db(0x23); db(0x48); db(0x00); db(0x12); + db(0x23); db(0x4d); db(0x00); db(0x0e); db(0x70); db(0x05); db(0x4e); db(0xae); + db(0xff); db(0x58); db(0x20); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0xc2); + db(0x70); db(0x00); db(0x53); db(0xab); db(0x00); db(0x1c); db(0x6a); db(0x06); + db(0x70); db(0x0a); db(0x27); db(0x40); db(0x00); db(0x1c); db(0x4a); db(0xab); + db(0x00); db(0x14); db(0x66); db(0x16); db(0x4a); db(0xab); db(0x00); db(0x1c); + db(0x66); db(0xe0); db(0x43); db(0xfa); db(0x08); db(0x12); db(0x70); db(0x00); + db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x27); db(0x40); db(0x00); db(0x14); + db(0x67); db(0xd0); db(0x4a); db(0xab); db(0x00); db(0x18); db(0x66); db(0x18); + db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xc4); db(0x43); db(0xfa); + db(0x08); db(0x08); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); + db(0x27); db(0x40); db(0x00); db(0x18); db(0x67); db(0x00); db(0xff); db(0xb4); + db(0x4a); db(0xad); db(0x02); db(0x08); db(0x66); db(0x38); db(0x4a); db(0xab); + db(0x00); db(0x1c); db(0x66); db(0xa6); db(0x4e); db(0xae); db(0xff); db(0x7c); + db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x06); db(0xe8); + db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00); db(0x4e); db(0xae); + db(0xff); db(0x76); db(0x4a); db(0x82); db(0x67); db(0x8c); db(0x41); db(0xfa); + db(0x06); db(0xd6); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); + db(0xfd); db(0x16); db(0x2b); db(0x40); db(0x02); db(0x08); db(0x67); db(0x00); + db(0x02); db(0x42); db(0x60); db(0x00); db(0xff); db(0x76); db(0x4a); db(0xad); + db(0x02); db(0x0c); db(0x66); db(0x48); db(0x4a); db(0xab); db(0x00); db(0x1c); + db(0x66); db(0x00); db(0xff); db(0x68); db(0x4e); db(0xae); db(0xff); db(0x7c); + db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x06); db(0xb5); + db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00); db(0x4e); db(0xae); + db(0xff); db(0x76); db(0x4a); db(0x82); db(0x67); db(0x00); db(0xff); db(0x4c); + db(0x41); db(0xfa); db(0x06); db(0xa1); db(0x70); db(0x00); db(0x72); db(0x00); + db(0x61); db(0x00); db(0xfc); db(0xd4); db(0x2b); db(0x40); db(0x02); db(0x0c); + db(0x67); db(0x00); db(0x02); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x00); db(0x61); db(0x00); db(0xfc); db(0x20); db(0x4e); db(0x90); + db(0x60); db(0x00); db(0xff); db(0x28); db(0x0c); db(0x47); db(0x00); db(0x24); + db(0x65); db(0x12); db(0x53); db(0xab); db(0x00); db(0x34); db(0x6a); db(0x0c); + db(0x20); db(0x4b); db(0x61); db(0x00); db(0xfd); db(0xc8); db(0x70); db(0x32); + db(0x27); db(0x40); db(0x00); db(0x34); db(0x22); db(0x6d); db(0x02); db(0x08); + db(0x45); db(0xed); db(0x01); db(0x3c); db(0x33); db(0x7c); db(0x00); db(0x0b); + db(0x00); db(0x1c); db(0x23); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x16); + db(0x00); db(0x24); db(0x23); db(0x4a); db(0x00); db(0x28); db(0x10); db(0x3a); + db(0xfd); db(0x78); db(0x0c); db(0x47); db(0x00); db(0x27); db(0x65); db(0x00); + db(0x01); db(0x62); db(0x08); db(0x00); db(0x00); db(0x01); db(0x67); db(0x00); + db(0x01); db(0x5a); db(0x41); db(0xed); db(0x01); db(0x68); db(0x25); db(0x48); + db(0x00); db(0x0a); db(0x15); db(0x7c); db(0x00); db(0x13); db(0x00); db(0x04); + db(0x15); db(0x7c); db(0x00); db(0x03); db(0x00); db(0x05); db(0x42); db(0x90); + db(0x42); db(0xa8); db(0x00); db(0x04); db(0x42); db(0x6a); db(0x00); db(0x06); + db(0x42); db(0xa8); db(0x00); db(0x08); db(0x42); db(0x68); db(0x00); db(0x0c); + db(0x22); db(0x3a); db(0xfd); db(0x60); db(0x02); db(0x41); db(0x00); db(0x07); + db(0x70); db(0x07); db(0x90); db(0x41); db(0xe1); db(0x48); db(0xe9); db(0x48); + db(0x35); db(0x40); db(0x00); db(0x08); db(0x31); db(0x7a); db(0xfd); db(0x34); + db(0x00); db(0x0e); db(0x42); db(0x68); db(0x00); db(0x10); db(0x31); db(0x7a); + db(0xfd); db(0x2c); db(0x00); db(0x12); db(0x42); db(0x68); db(0x00); db(0x14); + db(0x31); db(0x7a); db(0xfd); db(0x1a); db(0x00); db(0x16); db(0x42); db(0x68); + db(0x00); db(0x18); db(0x31); db(0x7a); db(0xfd); db(0x12); db(0x00); db(0x1a); + db(0x43); db(0xed); db(0x01); db(0x88); db(0x21); db(0x49); db(0x00); db(0x1c); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x06); db(0x30); db(0x3a); + db(0xfd); db(0x18); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x07); db(0x22); db(0xfa); + db(0xfd); db(0x0a); db(0x70); db(0x00); db(0x30); db(0x3a); db(0xfc); db(0xf2); + db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x09); + db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xe6); db(0x6b); db(0x08); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x0a); db(0x22); db(0xc0); + db(0x30); db(0x3a); db(0xfc); db(0xce); db(0x6b); db(0x14); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x02); db(0x22); db(0xc0); db(0x30); db(0x3a); + db(0xfc); db(0xc6); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x01); + db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xc0); db(0x6b); db(0x10); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x03); db(0x30); db(0x3a); + db(0xfc); db(0xba); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); + db(0x30); db(0x3a); db(0xfc); db(0xac); db(0x6b); db(0x10); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x04); db(0x30); db(0x3a); db(0xfc); db(0xa6); + db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x30); db(0x3a); + db(0xfc); db(0x98); db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); + db(0xa0); db(0x05); db(0x30); db(0x3a); db(0xfc); db(0x92); db(0x48); db(0xc0); + db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x70); db(0x00); db(0x30); db(0x3a); + db(0xfc); db(0x8e); db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); + db(0xa0); db(0x08); db(0x22); db(0xc0); db(0x42); db(0x91); db(0x61); db(0x00); + db(0xfc); db(0x40); db(0x36); db(0x3c); db(0x00); db(0x68); db(0x74); db(0x01); + db(0x28); db(0x3a); db(0xfc); db(0x70); db(0x20); db(0x04); db(0xc0); db(0x82); + db(0x22); db(0x2b); db(0x00); db(0x04); db(0xc2); db(0x82); db(0xb2); db(0x80); + db(0x67); db(0x22); db(0x42); db(0x92); db(0x35); db(0x7c); db(0x02); db(0x00); + db(0x00); db(0x04); db(0x42); db(0xaa); db(0x00); db(0x0a); db(0x32); db(0x03); + db(0x4a); db(0x00); db(0x66); db(0x04); db(0x08); db(0xc1); db(0x00); db(0x07); + db(0x35); db(0x41); db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08); + db(0x61); db(0x00); db(0xfc); db(0x06); db(0x52); db(0x43); db(0xd4); db(0x42); + db(0x0c); db(0x42); db(0x00); db(0x08); db(0x66); db(0xc6); db(0x27); db(0x44); + db(0x00); db(0x04); db(0x10); db(0x3a); db(0xfc); db(0x0c); db(0x08); db(0x00); + db(0x00); db(0x00); db(0x67); db(0x00); db(0xfd); db(0x7e); db(0x42); db(0x92); + db(0x35); db(0x7c); db(0x04); db(0x00); db(0x00); db(0x04); db(0x42); db(0x6a); + db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08); db(0x20); db(0x6b); + db(0x00); db(0x14); db(0x30); db(0x3a); db(0xfc); db(0x14); db(0x32); db(0x28); + db(0x00); db(0x30); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x6a); db(0x02); + db(0x70); db(0x00); db(0x35); db(0x40); db(0x00); db(0x0a); db(0x30); db(0x3a); + db(0xfc); db(0x02); db(0x32); db(0x28); db(0x00); db(0x2e); db(0xd2); db(0x41); + db(0x90); db(0x41); db(0x6a); db(0x02); db(0x70); db(0x00); db(0x35); db(0x40); + db(0x00); db(0x0c); db(0x61); db(0x00); db(0xfb); db(0x78); db(0x60); db(0x00); + db(0xfd); db(0x3a); db(0x4e); db(0x75); db(0x4a); db(0xa9); db(0x02); db(0x08); + db(0x67); db(0x14); db(0x4a); db(0xa9); db(0x02); db(0x0c); db(0x67); db(0x0e); + db(0x30); db(0x3a); db(0xfb); db(0xb0); db(0xb0); db(0x69); db(0x00); db(0x16); + db(0x67); db(0x14); db(0x33); db(0x40); db(0x00); db(0x16); db(0x2c); db(0x69); + db(0x00); db(0x26); db(0x20); db(0x29); db(0x00); db(0x22); db(0x22); db(0x69); + db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x53); db(0x69); + db(0x00); db(0x46); db(0x6a); db(0x12); db(0x33); db(0x7c); db(0x00); db(0x32); + db(0x00); db(0x46); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x02); + db(0x61); db(0x00); db(0xf9); db(0xea); db(0x4e); db(0x90); db(0x41); db(0xf9); + db(0x00); db(0xdf); db(0xf0); db(0x00); db(0x70); db(0x00); db(0x4e); db(0x75); + db(0x48); db(0xe7); db(0x00); db(0x06); db(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x11); db(0x61); db(0x00); db(0xf9); db(0xd0); db(0x4e); db(0x90); + db(0x08); db(0x00); db(0x00); db(0x00); db(0x67); db(0x42); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0x88); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x2a); db(0x40); db(0x47); db(0xed); db(0x00); db(0x16); - db(0x27); db(0x4e); db(0x00); db(0x10); db(0x27); db(0x4c); db(0x00); db(0x08); - db(0x27); db(0x46); db(0x00); db(0x0c); db(0x70); db(0xff); db(0x37); db(0x40); - db(0x00); db(0x00); db(0x43); db(0xed); db(0x00); db(0x00); db(0x13); db(0x7c); - db(0x00); db(0x02); db(0x00); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x05); - db(0x00); db(0x09); db(0x41); db(0xfa); db(0x07); db(0xf6); db(0x23); db(0x48); - db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x02); db(0xda); db(0x23); db(0x48); - db(0x00); db(0x12); db(0x23); db(0x4d); db(0x00); db(0x0e); db(0x70); db(0x05); - db(0x4e); db(0xae); db(0xff); db(0x58); db(0x20); db(0x06); db(0x4e); db(0xae); - db(0xfe); db(0xc2); db(0x70); db(0x00); db(0x53); db(0xab); db(0x00); db(0x1c); - db(0x6a); db(0x06); db(0x70); db(0x0a); db(0x27); db(0x40); db(0x00); db(0x1c); - db(0x4a); db(0xab); db(0x00); db(0x14); db(0x66); db(0x16); db(0x4a); db(0xab); - db(0x00); db(0x1c); db(0x66); db(0xe0); db(0x43); db(0xfa); db(0x08); db(0x14); - db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x27); db(0x40); - db(0x00); db(0x14); db(0x67); db(0xd0); db(0x4a); db(0xab); db(0x00); db(0x18); - db(0x66); db(0x18); db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xc4); - db(0x43); db(0xfa); db(0x08); db(0x0a); db(0x70); db(0x00); db(0x4e); db(0xae); - db(0xfd); db(0xd8); db(0x27); db(0x40); db(0x00); db(0x18); db(0x67); db(0x00); - db(0xff); db(0xb4); db(0x4a); db(0xad); db(0x02); db(0x08); db(0x66); db(0x38); - db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xa6); db(0x4e); db(0xae); - db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); - db(0x06); db(0xea); db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00); - db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4a); db(0x82); db(0x67); db(0x8c); - db(0x41); db(0xfa); db(0x06); db(0xd8); db(0x70); db(0x00); db(0x72); db(0x00); - db(0x61); db(0x00); db(0xfd); db(0x16); db(0x2b); db(0x40); db(0x02); db(0x08); - db(0x67); db(0x00); db(0x02); db(0x42); db(0x60); db(0x00); db(0xff); db(0x76); - db(0x4a); db(0xad); db(0x02); db(0x0c); db(0x66); db(0x48); db(0x4a); db(0xab); - db(0x00); db(0x1c); db(0x66); db(0x00); db(0xff); db(0x68); db(0x4e); db(0xae); - db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); - db(0x06); db(0xb7); db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00); - db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4a); db(0x82); db(0x67); db(0x00); - db(0xff); db(0x4c); db(0x41); db(0xfa); db(0x06); db(0xa3); db(0x70); db(0x00); - db(0x72); db(0x00); db(0x61); db(0x00); db(0xfc); db(0xd4); db(0x2b); db(0x40); - db(0x02); db(0x0c); db(0x67); db(0x00); db(0x02); db(0x00); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x00); db(0x61); db(0x00); db(0xfc); db(0x20); - db(0x4e); db(0x90); db(0x60); db(0x00); db(0xff); db(0x28); db(0x0c); db(0x47); - db(0x00); db(0x24); db(0x65); db(0x12); db(0x53); db(0xab); db(0x00); db(0x34); - db(0x6a); db(0x0c); db(0x20); db(0x4b); db(0x61); db(0x00); db(0xfd); db(0xc8); - db(0x70); db(0x32); db(0x27); db(0x40); db(0x00); db(0x34); db(0x22); db(0x6d); - db(0x02); db(0x08); db(0x45); db(0xed); db(0x01); db(0x3c); db(0x33); db(0x7c); - db(0x00); db(0x0b); db(0x00); db(0x1c); db(0x23); db(0x7c); db(0x00); db(0x00); - db(0x00); db(0x16); db(0x00); db(0x24); db(0x23); db(0x4a); db(0x00); db(0x28); - db(0x10); db(0x3a); db(0xfd); db(0x78); db(0x0c); db(0x47); db(0x00); db(0x27); - db(0x65); db(0x00); db(0x01); db(0x62); db(0x08); db(0x00); db(0x00); db(0x01); - db(0x67); db(0x00); db(0x01); db(0x5a); db(0x41); db(0xed); db(0x01); db(0x68); - db(0x25); db(0x48); db(0x00); db(0x0a); db(0x15); db(0x7c); db(0x00); db(0x13); - db(0x00); db(0x04); db(0x15); db(0x7c); db(0x00); db(0x03); db(0x00); db(0x05); - db(0x42); db(0x90); db(0x42); db(0xa8); db(0x00); db(0x04); db(0x42); db(0x6a); - db(0x00); db(0x06); db(0x42); db(0xa8); db(0x00); db(0x08); db(0x42); db(0x68); - db(0x00); db(0x0c); db(0x22); db(0x3a); db(0xfd); db(0x60); db(0x02); db(0x41); - db(0x00); db(0x07); db(0x70); db(0x07); db(0x90); db(0x41); db(0xe1); db(0x48); - db(0xe9); db(0x48); db(0x35); db(0x40); db(0x00); db(0x08); db(0x31); db(0x7a); - db(0xfd); db(0x34); db(0x00); db(0x0e); db(0x42); db(0x68); db(0x00); db(0x10); - db(0x31); db(0x7a); db(0xfd); db(0x2c); db(0x00); db(0x12); db(0x42); db(0x68); - db(0x00); db(0x14); db(0x31); db(0x7a); db(0xfd); db(0x1a); db(0x00); db(0x16); - db(0x42); db(0x68); db(0x00); db(0x18); db(0x31); db(0x7a); db(0xfd); db(0x12); - db(0x00); db(0x1a); db(0x43); db(0xed); db(0x01); db(0x88); db(0x21); db(0x49); - db(0x00); db(0x1c); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x06); - db(0x30); db(0x3a); db(0xfd); db(0x18); db(0x48); db(0xc0); db(0xe1); db(0x80); - db(0x22); db(0xc0); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x07); - db(0x22); db(0xfa); db(0xfd); db(0x0a); db(0x70); db(0x00); db(0x30); db(0x3a); - db(0xfc); db(0xf2); db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); - db(0xa0); db(0x09); db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xe6); - db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x0a); - db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xce); db(0x6b); db(0x14); - db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x02); db(0x22); db(0xc0); - db(0x30); db(0x3a); db(0xfc); db(0xc6); db(0x22); db(0xfc); db(0x80); db(0x03); - db(0xa0); db(0x01); db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xc0); - db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x03); - db(0x30); db(0x3a); db(0xfc); db(0xba); db(0x48); db(0xc0); db(0xe1); db(0x80); - db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xac); db(0x6b); db(0x10); - db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x04); db(0x30); db(0x3a); - db(0xfc); db(0xa6); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); - db(0x30); db(0x3a); db(0xfc); db(0x98); db(0x6b); db(0x10); db(0x22); db(0xfc); - db(0x80); db(0x03); db(0xa0); db(0x05); db(0x30); db(0x3a); db(0xfc); db(0x92); - db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x70); db(0x00); - db(0x30); db(0x3a); db(0xfc); db(0x8e); db(0x6b); db(0x08); db(0x22); db(0xfc); - db(0x80); db(0x03); db(0xa0); db(0x08); db(0x22); db(0xc0); db(0x42); db(0x91); - db(0x61); db(0x00); db(0xfc); db(0x40); db(0x36); db(0x3c); db(0x00); db(0x68); - db(0x74); db(0x01); db(0x28); db(0x3a); db(0xfc); db(0x70); db(0x20); db(0x04); - db(0xc0); db(0x82); db(0x22); db(0x2b); db(0x00); db(0x04); db(0xc2); db(0x82); - db(0xb2); db(0x80); db(0x67); db(0x22); db(0x42); db(0x92); db(0x35); db(0x7c); - db(0x02); db(0x00); db(0x00); db(0x04); db(0x42); db(0xaa); db(0x00); db(0x0a); - db(0x32); db(0x03); db(0x4a); db(0x00); db(0x66); db(0x04); db(0x08); db(0xc1); - db(0x00); db(0x07); db(0x35); db(0x41); db(0x00); db(0x06); db(0x42); db(0x6a); - db(0x00); db(0x08); db(0x61); db(0x00); db(0xfc); db(0x06); db(0x52); db(0x43); - db(0xd4); db(0x42); db(0x0c); db(0x42); db(0x00); db(0x08); db(0x66); db(0xc6); - db(0x27); db(0x44); db(0x00); db(0x04); db(0x10); db(0x3a); db(0xfc); db(0x0c); - db(0x08); db(0x00); db(0x00); db(0x00); db(0x67); db(0x00); db(0xfd); db(0x7e); - db(0x42); db(0x92); db(0x35); db(0x7c); db(0x04); db(0x00); db(0x00); db(0x04); - db(0x42); db(0x6a); db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08); - db(0x20); db(0x6b); db(0x00); db(0x14); db(0x30); db(0x3a); db(0xfc); db(0x14); - db(0x32); db(0x28); db(0x00); db(0x30); db(0xd2); db(0x41); db(0x90); db(0x41); - db(0x6a); db(0x02); db(0x70); db(0x00); db(0x35); db(0x40); db(0x00); db(0x0a); - db(0x30); db(0x3a); db(0xfc); db(0x02); db(0x32); db(0x28); db(0x00); db(0x2e); - db(0xd2); db(0x41); db(0x90); db(0x41); db(0x6a); db(0x02); db(0x70); db(0x00); - db(0x35); db(0x40); db(0x00); db(0x0c); db(0x61); db(0x00); db(0xfb); db(0x78); - db(0x60); db(0x00); db(0xfd); db(0x3a); db(0x4e); db(0x75); db(0x4a); db(0xa9); - db(0x02); db(0x08); db(0x67); db(0x14); db(0x4a); db(0xa9); db(0x02); db(0x0c); - db(0x67); db(0x0e); db(0x30); db(0x3a); db(0xfb); db(0xb0); db(0xb0); db(0x69); - db(0x00); db(0x16); db(0x67); db(0x14); db(0x33); db(0x40); db(0x00); db(0x16); - db(0x2c); db(0x69); db(0x00); db(0x26); db(0x20); db(0x29); db(0x00); db(0x22); - db(0x22); db(0x69); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0xbc); - db(0x53); db(0x69); db(0x00); db(0x46); db(0x6a); db(0x12); db(0x33); db(0x7c); - db(0x00); db(0x32); db(0x00); db(0x46); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x02); db(0x61); db(0x00); db(0xf9); db(0xea); db(0x4e); db(0x90); - db(0x41); db(0xf9); db(0x00); db(0xdf); db(0xf0); db(0x00); db(0x70); db(0x00); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x06); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x11); db(0x61); db(0x00); db(0xf9); db(0xd0); - db(0x4e); db(0x90); db(0x08); db(0x00); db(0x00); db(0x00); db(0x67); db(0x42); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x20); db(0x3c); db(0x00); db(0x00); - db(0x00); db(0x88); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); - db(0x00); db(0x40); db(0x2a); db(0x40); db(0x2b); db(0x4e); db(0x00); db(0x14); - db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0e); db(0x61); db(0x00); - db(0xf9); db(0x9e); db(0x20); db(0x0d); db(0x4e); db(0x90); db(0x41); db(0xfa); - db(0x04); db(0x6c); db(0x43); db(0xfa); db(0x01); db(0x14); db(0x70); db(0xf6); - db(0x22); db(0x3c); db(0x00); db(0x00); db(0x27); db(0x10); db(0x61); db(0x00); - db(0xed); db(0xce); db(0x70); db(0x00); db(0x4c); db(0xdf); db(0x60); db(0x00); - db(0x4e); db(0x75); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0a); - db(0x61); db(0x00); db(0xf9); db(0x74); db(0x4e); db(0x90); db(0x4e); db(0x75); - db(0x61); db(0xf0); db(0x20); db(0x0d); db(0x67); db(0x1c); db(0x2c); db(0x6d); - db(0x00); db(0x14); db(0x20); db(0x2d); db(0x00); db(0x18); db(0x67); db(0x06); - db(0x22); db(0x40); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4d); - db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0x88); db(0x4e); db(0xae); - db(0xff); db(0x2e); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); - db(0x38); db(0x3e); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x41); db(0xfa); - db(0x03); db(0xfa); db(0x22); db(0x08); db(0x24); db(0x3c); db(0x00); db(0x00); - db(0x03); db(0xed); db(0x4e); db(0xae); db(0xff); db(0xe2); db(0x28); db(0x00); - db(0x67); db(0x4c); db(0x45); db(0xed); db(0x00); db(0x68); db(0x42); db(0x92); - db(0x34); db(0xaa); db(0x00); db(0x02); db(0x24); db(0x0a); db(0x54); db(0x82); - db(0x76); db(0x02); db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); - db(0xb6); db(0x80); db(0x66); db(0x32); db(0x0c); db(0x92); db(0x50); db(0x4e); - db(0x54); db(0x52); db(0x66); db(0xe4); db(0x24); db(0x0a); db(0x76); db(0x04); - db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); db(0x24); db(0x0a); - db(0x76); db(0x20); db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); - db(0xb6); db(0x80); db(0x66); db(0x12); db(0x4a); db(0x6a); db(0x00); db(0x10); - db(0x66); db(0xc4); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x10); - db(0x61); db(0x00); db(0xf8); db(0xe4); db(0x4e); db(0x90); db(0x22); db(0x04); - db(0x67); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xdc); db(0x4c); db(0xdf); - db(0x7c); db(0x1c); db(0x4e); db(0x75); db(0x2c); db(0x6d); db(0x00); db(0x18); - db(0x41); db(0xfa); db(0x03); db(0x72); db(0x22); db(0x08); db(0x74); db(0xfe); - db(0x4e); db(0xae); db(0xff); db(0xac); db(0x22); db(0x00); db(0x67); db(0x34); - db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14); - db(0x45); db(0xed); db(0x00); db(0x38); db(0x70); db(0xff); db(0x4e); db(0xae); - db(0xfe); db(0xb6); db(0x15); db(0x40); db(0x00); db(0x14); db(0x41); db(0xfa); - db(0x03); db(0x62); db(0x24); db(0x88); db(0x25); db(0x7c); db(0x00); db(0x00); - db(0x00); db(0x12); db(0x00); db(0x0c); db(0x25); db(0x6d); db(0x00); db(0x08); - db(0x00); db(0x10); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x22); db(0x0a); - db(0x4e); db(0xae); db(0xfc); db(0x88); db(0x2c); db(0x6d); db(0x00); db(0x14); - db(0x4e); db(0x75); db(0xff); db(0x3a); db(0x00); db(0x00); db(0x00); db(0x10); - db(0x00); db(0x00); db(0x00); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x0d); db(0x61); db(0x00); db(0xf8); db(0x72); db(0x4e); db(0x90); - db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0xfc); db(0x2a); db(0x40); - db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x93); db(0xc9); db(0x4e); db(0xae); - db(0xfe); db(0xda); db(0x2b); db(0x40); db(0x00); db(0x08); db(0x43); db(0xfa); - db(0x03); db(0x8e); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); - db(0x2b); db(0x40); db(0x00); db(0x18); db(0x67); db(0x00); db(0xfe); db(0xda); - db(0x2c); db(0x40); db(0x72); db(0x32); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x41); db(0xfa); db(0x02); db(0xc6); db(0x22); db(0x08); db(0x74); db(0xfe); - db(0x4e); db(0xae); db(0xff); db(0xac); db(0x4a); db(0x80); db(0x67); db(0xea); - db(0x22); db(0x00); db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x72); db(0x32); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x02); db(0xb0); + db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0x40); + db(0x2a); db(0x40); db(0x2b); db(0x4e); db(0x00); db(0x14); db(0x30); db(0x3c); + db(0xff); db(0x38); db(0x72); db(0x0e); db(0x61); db(0x00); db(0xf9); db(0x9e); + db(0x20); db(0x0d); db(0x4e); db(0x90); db(0x41); db(0xfa); db(0x04); db(0x6a); + db(0x43); db(0xfa); db(0x01); db(0x12); db(0x70); db(0xf6); db(0x22); db(0x3c); + db(0x00); db(0x00); db(0x27); db(0x10); db(0x61); db(0x00); db(0xed); db(0xc8); + db(0x70); db(0x00); db(0x4c); db(0xdf); db(0x60); db(0x00); db(0x4e); db(0x75); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0a); db(0x61); db(0x00); + db(0xf9); db(0x74); db(0x4e); db(0x90); db(0x4e); db(0x75); db(0x61); db(0xf0); + db(0x20); db(0x0d); db(0x67); db(0x1c); db(0x2c); db(0x6d); db(0x00); db(0x14); + db(0x20); db(0x2d); db(0x00); db(0x18); db(0x67); db(0x06); db(0x22); db(0x40); + db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4d); db(0x20); db(0x3c); + db(0x00); db(0x00); db(0x00); db(0x88); db(0x4e); db(0xae); db(0xff); db(0x2e); + db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x3e); + db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x41); db(0xfa); db(0x03); db(0xf8); + db(0x22); db(0x08); db(0x24); db(0x3c); db(0x00); db(0x00); db(0x03); db(0xed); + db(0x4e); db(0xae); db(0xff); db(0xe2); db(0x28); db(0x00); db(0x67); db(0x4c); + db(0x45); db(0xed); db(0x00); db(0x68); db(0x42); db(0x92); db(0x34); db(0xaa); + db(0x00); db(0x02); db(0x24); db(0x0a); db(0x54); db(0x82); db(0x76); db(0x02); + db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); db(0xb6); db(0x80); + db(0x66); db(0x32); db(0x0c); db(0x92); db(0x50); db(0x4e); db(0x54); db(0x52); + db(0x66); db(0xe4); db(0x24); db(0x0a); db(0x76); db(0x04); db(0x22); db(0x04); + db(0x4e); db(0xae); db(0xff); db(0xd6); db(0x24); db(0x0a); db(0x76); db(0x20); + db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); db(0xb6); db(0x80); + db(0x66); db(0x12); db(0x4a); db(0x6a); db(0x00); db(0x10); db(0x66); db(0xc4); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x10); db(0x61); db(0x00); + db(0xf8); db(0xe4); db(0x4e); db(0x90); db(0x22); db(0x04); db(0x67); db(0x04); + db(0x4e); db(0xae); db(0xff); db(0xdc); db(0x4c); db(0xdf); db(0x7c); db(0x1c); + db(0x4e); db(0x75); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x41); db(0xfa); + db(0x03); db(0x70); db(0x22); db(0x08); db(0x74); db(0xfe); db(0x4e); db(0xae); + db(0xff); db(0xac); db(0x22); db(0x00); db(0x67); db(0x34); db(0x4e); db(0xae); + db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x45); db(0xed); + db(0x00); db(0x38); db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); + db(0x15); db(0x40); db(0x00); db(0x14); db(0x41); db(0xfa); db(0x03); db(0x60); + db(0x24); db(0x88); db(0x25); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x12); + db(0x00); db(0x0c); db(0x25); db(0x6d); db(0x00); db(0x08); db(0x00); db(0x10); + db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x22); db(0x0a); db(0x4e); db(0xae); + db(0xfc); db(0x88); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x4e); db(0x75); + db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0d); db(0x61); db(0x00); + db(0xf8); db(0x74); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); + db(0xfe); db(0xfe); db(0x2a); db(0x40); db(0x2c); db(0x6d); db(0x00); db(0x14); + db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x2b); db(0x40); + db(0x00); db(0x08); db(0x43); db(0xfa); db(0x03); db(0x8e); db(0x70); db(0x00); + db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2b); db(0x40); db(0x00); db(0x18); + db(0x67); db(0x00); db(0xfe); db(0xdc); db(0x2c); db(0x40); db(0x72); db(0x32); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x02); db(0xc6); db(0x22); db(0x08); db(0x74); db(0xfe); db(0x4e); db(0xae); db(0xff); db(0xac); - db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0xa4); db(0x22); db(0x00); - db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14); - db(0x61); db(0x00); db(0xf8); db(0x20); db(0x72); db(0x00); db(0x32); db(0x3c); - db(0x00); db(0x34); db(0x61); db(0x00); db(0xf8); db(0x64); db(0x28); db(0x40); - db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0x84); db(0x70); db(0x00); - db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); - db(0x72); db(0x00); db(0x20); db(0x2d); db(0x00); db(0x0c); db(0x41); db(0xfa); - db(0x02); db(0x89); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x44); - db(0x4a); db(0x80); db(0x66); db(0xe2); db(0x20); db(0x6c); db(0x00); db(0x14); - db(0x0c); db(0x68); db(0x00); db(0x25); db(0x00); db(0x14); db(0x64); db(0x0c); - db(0x61); db(0x00); db(0xfe); db(0x48); db(0x70); db(0x00); db(0x4e); db(0xae); - db(0xfe); db(0xc2); db(0x60); db(0xf8); db(0x61); db(0x00); db(0xfe); db(0xe6); - db(0x41); db(0xed); db(0x00); db(0x1c); db(0x29); db(0x48); db(0x00); db(0x28); - db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x24); db(0x39); db(0x7c); - db(0x00); db(0x0c); db(0x00); db(0x1c); db(0x2b); db(0x4d); db(0x00); db(0x2c); - db(0x41); db(0xfa); db(0x01); db(0x60); db(0x2b); db(0x48); db(0x00); db(0x24); - db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x0f); db(0x61); db(0x00); db(0xf7); db(0x88); - db(0x4e); db(0x90); db(0x4a); db(0xad); db(0x00); db(0x00); db(0x66); db(0x1c); - db(0x70); db(0x00); db(0x74); db(0x00); db(0x14); db(0x2d); db(0x00); db(0x4c); - db(0x05); db(0xc0); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); - db(0xfe); db(0xc2); db(0x05); db(0x00); db(0x67); db(0x06); db(0x61); db(0x00); - db(0xfe); db(0x1e); db(0x60); db(0xe4); db(0x20); db(0x2d); db(0x00); db(0x00); - db(0x67); db(0x00); db(0x00); db(0x76); db(0x72); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x2b); db(0x40); db(0x00); db(0x04); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x0c); db(0x61); db(0x00); db(0xf7); db(0x48); - db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x40); db(0x4a); db(0xad); - db(0x00); db(0x04); db(0x67); db(0x3a); db(0x39); db(0x7c); db(0x00); db(0x03); - db(0x00); db(0x1c); db(0x42); db(0x2c); db(0x00); db(0x1f); db(0x42); db(0xac); - db(0x00); db(0x20); db(0x29); db(0x6d); db(0x00); db(0x00); db(0x00); db(0x24); - db(0x29); db(0x6d); db(0x00); db(0x04); db(0x00); db(0x28); db(0x42); db(0xac); - db(0x00); db(0x2c); db(0x42); db(0xac); db(0x00); db(0x30); db(0x22); db(0x4c); - db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x2b); db(0x6c); db(0x00); db(0x30); - db(0x00); db(0x10); db(0x39); db(0x7c); db(0x00); db(0x04); db(0x00); db(0x1c); - db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x20); db(0x2d); - db(0x00); db(0x00); db(0x42); db(0xad); db(0x00); db(0x00); db(0x22); db(0x2d); - db(0x00); db(0x04); db(0x67); db(0x00); db(0xff); db(0x74); db(0x22); db(0x41); - db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x00); db(0xff); db(0x6a); - db(0x39); db(0x7c); db(0x00); db(0x02); db(0x00); db(0x1c); db(0x41); db(0xed); - db(0x00); db(0x30); db(0x42); db(0x90); db(0x42); db(0xa8); db(0x00); db(0x04); - db(0x42); db(0x2c); db(0x00); db(0x1f); db(0x42); db(0xac); db(0x00); db(0x2c); - db(0x42); db(0xac); db(0x00); db(0x30); db(0x29); db(0x48); db(0x00); db(0x28); - db(0x70); db(0x08); db(0x29); db(0x40); db(0x00); db(0x24); db(0x22); db(0x4c); - db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x0c); db(0xad); db(0x46); db(0x4f); - db(0x52); db(0x4d); db(0x00); db(0x30); db(0x66); db(0x52); db(0x20); db(0x2d); - db(0x00); db(0x34); db(0x67); db(0x4c); db(0x6b); db(0x4a); db(0x2b); db(0x6c); - db(0x00); db(0x30); db(0x00); db(0x10); db(0x50); db(0x80); db(0x24); db(0x00); - db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); - db(0x67); db(0x36); db(0x24); db(0x40); db(0x20); db(0x4a); db(0x20); db(0xed); - db(0x00); db(0x30); db(0x20); db(0xed); db(0x00); db(0x34); db(0x29); db(0x48); - db(0x00); db(0x28); db(0x20); db(0x02); db(0x51); db(0x80); db(0x29); db(0x40); + db(0x4a); db(0x80); db(0x67); db(0xea); db(0x22); db(0x00); db(0x4e); db(0xae); + db(0xff); db(0xa6); db(0x72); db(0x32); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x41); db(0xfa); db(0x02); db(0xb0); db(0x22); db(0x08); db(0x74); db(0xfe); + db(0x4e); db(0xae); db(0xff); db(0xac); db(0x4a); db(0x80); db(0x67); db(0x00); + db(0xfe); db(0xa6); db(0x22); db(0x00); db(0x4e); db(0xae); db(0xff); db(0xa6); + db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x61); db(0x00); db(0xf8); db(0x22); + db(0x72); db(0x00); db(0x32); db(0x3c); db(0x00); db(0x34); db(0x61); db(0x00); + db(0xf8); db(0x66); db(0x28); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x00); + db(0xfe); db(0x86); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); + db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x72); db(0x00); db(0x20); db(0x2d); + db(0x00); db(0x0c); db(0x41); db(0xfa); db(0x02); db(0x89); db(0x22); db(0x4c); + db(0x4e); db(0xae); db(0xfe); db(0x44); db(0x4a); db(0x80); db(0x66); db(0xe2); + db(0x20); db(0x6c); db(0x00); db(0x14); db(0x0c); db(0x68); db(0x00); db(0x25); + db(0x00); db(0x14); db(0x64); db(0x0c); db(0x61); db(0x00); db(0xfe); db(0x4a); + db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x60); db(0xf8); + db(0x61); db(0x00); db(0xfe); db(0xe8); db(0x41); db(0xed); db(0x00); db(0x1c); + db(0x29); db(0x48); db(0x00); db(0x28); db(0x70); db(0x01); db(0x29); db(0x40); + db(0x00); db(0x24); db(0x39); db(0x7c); db(0x00); db(0x0c); db(0x00); db(0x1c); + db(0x2b); db(0x4d); db(0x00); db(0x2c); db(0x41); db(0xfa); db(0x01); db(0x60); + db(0x2b); db(0x48); db(0x00); db(0x24); db(0x22); db(0x4c); db(0x4e); db(0xae); + db(0xfe); db(0x38); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0f); + db(0x61); db(0x00); db(0xf7); db(0x8a); db(0x4e); db(0x90); db(0x4a); db(0xad); + db(0x00); db(0x00); db(0x66); db(0x1c); db(0x70); db(0x00); db(0x74); db(0x00); + db(0x14); db(0x2d); db(0x00); db(0x4c); db(0x05); db(0xc0); db(0x08); db(0xc0); + db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x05); db(0x00); + db(0x67); db(0x06); db(0x61); db(0x00); db(0xfe); db(0x20); db(0x60); db(0xe4); + db(0x20); db(0x2d); db(0x00); db(0x00); db(0x67); db(0x00); db(0x00); db(0x76); + db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x2b); db(0x40); + db(0x00); db(0x04); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0c); + db(0x61); db(0x00); db(0xf7); db(0x4a); db(0x4e); db(0x90); db(0x4a); db(0x80); + db(0x67); db(0x40); db(0x4a); db(0xad); db(0x00); db(0x04); db(0x67); db(0x3a); + db(0x39); db(0x7c); db(0x00); db(0x03); db(0x00); db(0x1c); db(0x42); db(0x2c); + db(0x00); db(0x1f); db(0x42); db(0xac); db(0x00); db(0x20); db(0x29); db(0x6d); + db(0x00); db(0x00); db(0x00); db(0x24); db(0x29); db(0x6d); db(0x00); db(0x04); + db(0x00); db(0x28); db(0x42); db(0xac); db(0x00); db(0x2c); db(0x42); db(0xac); + db(0x00); db(0x30); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); + db(0x2b); db(0x6c); db(0x00); db(0x30); db(0x00); db(0x10); db(0x39); db(0x7c); + db(0x00); db(0x04); db(0x00); db(0x1c); db(0x22); db(0x4c); db(0x4e); db(0xae); + db(0xfe); db(0x38); db(0x20); db(0x2d); db(0x00); db(0x00); db(0x42); db(0xad); + db(0x00); db(0x00); db(0x22); db(0x2d); db(0x00); db(0x04); db(0x67); db(0x00); + db(0xff); db(0x74); db(0x22); db(0x41); db(0x4e); db(0xae); db(0xff); db(0x2e); + db(0x60); db(0x00); db(0xff); db(0x6a); db(0x39); db(0x7c); db(0x00); db(0x02); + db(0x00); db(0x1c); db(0x41); db(0xed); db(0x00); db(0x30); db(0x42); db(0x90); + db(0x42); db(0xa8); db(0x00); db(0x04); db(0x42); db(0x2c); db(0x00); db(0x1f); + db(0x42); db(0xac); db(0x00); db(0x2c); db(0x42); db(0xac); db(0x00); db(0x30); + db(0x29); db(0x48); db(0x00); db(0x28); db(0x70); db(0x08); db(0x29); db(0x40); db(0x00); db(0x24); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); - db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0b); db(0x61); db(0x00); - db(0xf6); db(0x6e); db(0x20); db(0x2c); db(0x00); db(0x20); db(0x4e); db(0x90); - db(0x22); db(0x4a); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e); - db(0x4a); db(0xac); db(0x00); db(0x20); db(0x67); db(0x00); db(0xfe); db(0xda); - db(0x41); db(0xed); db(0x00); db(0x30); db(0x29); db(0x48); db(0x00); db(0x28); - db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x24); db(0x42); db(0xac); - db(0x00); db(0x20); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); - db(0x60); db(0xde); db(0x41); db(0xe8); db(0xff); db(0xe4); db(0x20); db(0x29); - db(0x00); db(0x08); db(0xb0); db(0xa8); db(0x00); db(0x10); db(0x67); db(0x1a); - db(0x21); db(0x40); db(0x00); db(0x10); db(0x2f); db(0x0e); db(0x2c); db(0x68); - db(0x00); db(0x14); db(0x22); db(0x68); db(0x00); db(0x08); db(0x70); db(0x00); - db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xbc); - db(0x2c); db(0x5f); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x74); db(0xff); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x11); db(0x61); db(0x00); db(0xf6); db(0x02); db(0x4e); db(0x90); - db(0x08); db(0x00); db(0x00); db(0x01); db(0x67); db(0x38); db(0x74); db(0x00); - db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e); - db(0x43); db(0xfa); db(0x00); db(0x62); db(0x4e); db(0xae); db(0xfe); db(0xec); - db(0x4a); db(0x80); db(0x67); db(0x1e); db(0x20); db(0x40); db(0x43); db(0xfa); - db(0x00); db(0x22); db(0x24); db(0x68); db(0xff); db(0xe4); db(0x21); db(0x49); - db(0xff); db(0xe4); db(0x22); db(0x48); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x65); db(0x61); db(0x00); db(0xf5); db(0xca); db(0x4e); db(0x90); - db(0x74); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x20); db(0x02); - db(0x4e); db(0x75); db(0x59); db(0x8f); db(0x48); db(0xe7); db(0xc0); db(0x80); - db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x66); db(0x61); db(0x00); - db(0xf5); db(0xae); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x01); db(0x03); - db(0x4e); db(0x75); db(0x69); db(0x6e); db(0x70); db(0x75); db(0x74); db(0x2e); - db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x74); - db(0x69); db(0x6d); db(0x65); db(0x72); db(0x2e); db(0x64); db(0x65); db(0x76); - db(0x69); db(0x63); db(0x65); db(0x00); db(0x63); db(0x6f); db(0x6e); db(0x73); - db(0x6f); db(0x6c); db(0x65); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); - db(0x63); db(0x65); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); db(0x00); - db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x00); db(0x44); db(0x45); - db(0x56); db(0x53); db(0x3a); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); - db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64); db(0x65); db(0x76); - db(0x69); db(0x63); db(0x65); db(0x00); db(0x52); db(0x41); db(0x4d); db(0x3a); - db(0x00); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); - db(0x72); db(0x64); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); - db(0x65); db(0x00); db(0x52); db(0x41); db(0x4d); db(0x3a); db(0x45); db(0x6e); - db(0x76); db(0x2f); db(0x53); db(0x79); db(0x73); db(0x2f); db(0x50); db(0x6f); - db(0x69); db(0x6e); db(0x74); db(0x65); db(0x72); db(0x2e); db(0x70); db(0x72); - db(0x65); db(0x66); db(0x73); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); - db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); - db(0x64); db(0x20); db(0x73); db(0x68); db(0x61); db(0x72); db(0x69); db(0x6e); - db(0x67); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x6d); db(0x6f); - db(0x75); db(0x73); db(0x65); db(0x20); db(0x64); db(0x72); db(0x69); db(0x76); - db(0x65); db(0x72); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); - db(0x69); db(0x6c); db(0x65); db(0x73); db(0x79); db(0x73); db(0x74); db(0x65); - db(0x6d); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); - db(0x20); db(0x61); db(0x75); db(0x74); db(0x6f); db(0x6d); db(0x6f); db(0x75); - db(0x6e); db(0x74); db(0x65); db(0x72); db(0x00); db(0x55); db(0x41); db(0x45); - db(0x20); db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); db(0x6f); - db(0x6d); db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x20); db(0x70); db(0x72); - db(0x6f); db(0x63); db(0x65); db(0x73); db(0x73); db(0x00); db(0x64); db(0x6f); - db(0x73); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); - db(0x79); db(0x00); db(0x69); db(0x6e); db(0x74); db(0x75); db(0x69); db(0x74); - db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); - db(0x61); db(0x72); db(0x79); db(0x00); db(0x67); db(0x72); db(0x61); db(0x70); - db(0x68); db(0x69); db(0x63); db(0x73); db(0x2e); db(0x6c); db(0x69); db(0x62); - db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x65); db(0x78); db(0x70); - db(0x61); db(0x6e); db(0x73); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); - db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x46); - db(0x69); db(0x6c); db(0x65); db(0x53); db(0x79); db(0x73); db(0x74); db(0x65); - db(0x6d); db(0x2e); db(0x72); db(0x65); db(0x73); db(0x6f); db(0x75); db(0x72); - db(0x63); db(0x65); db(0x00); db(0x6d); db(0x65); db(0x67); db(0x61); db(0x63); - db(0x68); db(0x69); db(0x70); db(0x20); db(0x6d); db(0x65); db(0x6d); db(0x6f); - db(0x72); db(0x79); db(0x00); db(0x00); db(0x00); db(0x00); db(0x03); db(0xf2); + db(0x0c); db(0xad); db(0x46); db(0x4f); db(0x52); db(0x4d); db(0x00); db(0x30); + db(0x66); db(0x52); db(0x20); db(0x2d); db(0x00); db(0x34); db(0x67); db(0x4c); + db(0x6b); db(0x4a); db(0x2b); db(0x6c); db(0x00); db(0x30); db(0x00); db(0x10); + db(0x50); db(0x80); db(0x24); db(0x00); db(0x72); db(0x01); db(0x4e); db(0xae); + db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x36); db(0x24); db(0x40); + db(0x20); db(0x4a); db(0x20); db(0xed); db(0x00); db(0x30); db(0x20); db(0xed); + db(0x00); db(0x34); db(0x29); db(0x48); db(0x00); db(0x28); db(0x20); db(0x02); + db(0x51); db(0x80); db(0x29); db(0x40); db(0x00); db(0x24); db(0x22); db(0x4c); + db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x0b); db(0x61); db(0x00); db(0xf6); db(0x70); db(0x20); db(0x2c); + db(0x00); db(0x20); db(0x4e); db(0x90); db(0x22); db(0x4a); db(0x20); db(0x02); + db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x4a); db(0xac); db(0x00); db(0x20); + db(0x67); db(0x00); db(0xfe); db(0xda); db(0x41); db(0xed); db(0x00); db(0x30); + db(0x29); db(0x48); db(0x00); db(0x28); db(0x70); db(0x01); db(0x29); db(0x40); + db(0x00); db(0x24); db(0x42); db(0xac); db(0x00); db(0x20); db(0x22); db(0x4c); + db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x60); db(0xde); db(0x41); db(0xe8); + db(0xff); db(0xe4); db(0x20); db(0x29); db(0x00); db(0x08); db(0xb0); db(0xa8); + db(0x00); db(0x10); db(0x67); db(0x1a); db(0x21); db(0x40); db(0x00); db(0x10); + db(0x2f); db(0x0e); db(0x2c); db(0x68); db(0x00); db(0x14); db(0x22); db(0x68); + db(0x00); db(0x08); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); + db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x2c); db(0x5f); db(0x70); db(0x00); + db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x74); db(0xff); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x11); db(0x61); db(0x00); + db(0xf6); db(0x04); db(0x4e); db(0x90); db(0x08); db(0x00); db(0x00); db(0x01); + db(0x67); db(0x38); db(0x74); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x7c); + db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x00); db(0x62); + db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x4a); db(0x80); db(0x67); db(0x1e); + db(0x20); db(0x40); db(0x43); db(0xfa); db(0x00); db(0x22); db(0x24); db(0x68); + db(0xff); db(0xe4); db(0x21); db(0x49); db(0xff); db(0xe4); db(0x22); db(0x48); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x65); db(0x61); db(0x00); + db(0xf5); db(0xcc); db(0x4e); db(0x90); db(0x74); db(0x01); db(0x4e); db(0xae); + db(0xff); db(0x76); db(0x20); db(0x02); db(0x4e); db(0x75); db(0x59); db(0x8f); + db(0x48); db(0xe7); db(0xc0); db(0x80); db(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x66); db(0x61); db(0x00); db(0xf5); db(0xb0); db(0x4e); db(0x90); + db(0x4c); db(0xdf); db(0x01); db(0x03); db(0x4e); db(0x75); db(0x69); db(0x6e); + db(0x70); db(0x75); db(0x74); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); + db(0x63); db(0x65); db(0x00); db(0x74); db(0x69); db(0x6d); db(0x65); db(0x72); + db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); + db(0x63); db(0x6f); db(0x6e); db(0x73); db(0x6f); db(0x6c); db(0x65); db(0x2e); + db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x44); + db(0x45); db(0x56); db(0x53); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); + db(0x3a); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x63); + db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); + db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); + db(0x52); db(0x41); db(0x4d); db(0x3a); db(0x00); db(0x63); db(0x6c); db(0x69); + db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64); + db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x52); db(0x41); + db(0x4d); db(0x3a); db(0x45); db(0x6e); db(0x76); db(0x2f); db(0x53); db(0x79); + db(0x73); db(0x2f); db(0x50); db(0x6f); db(0x69); db(0x6e); db(0x74); db(0x65); + db(0x72); db(0x2e); db(0x70); db(0x72); db(0x65); db(0x66); db(0x73); db(0x00); + db(0x55); db(0x41); db(0x45); db(0x20); db(0x63); db(0x6c); db(0x69); db(0x70); + db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x20); db(0x73); db(0x68); + db(0x61); db(0x72); db(0x69); db(0x6e); db(0x67); db(0x00); db(0x55); db(0x41); + db(0x45); db(0x20); db(0x6d); db(0x6f); db(0x75); db(0x73); db(0x65); db(0x20); + db(0x64); db(0x72); db(0x69); db(0x76); db(0x65); db(0x72); db(0x00); db(0x55); + db(0x41); db(0x45); db(0x20); db(0x66); db(0x69); db(0x6c); db(0x65); db(0x73); + db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x00); db(0x55); db(0x41); + db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); + db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x65); db(0x72); + db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); + db(0x61); db(0x75); db(0x74); db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); + db(0x74); db(0x20); db(0x70); db(0x72); db(0x6f); db(0x63); db(0x65); db(0x73); + db(0x73); db(0x00); db(0x64); db(0x6f); db(0x73); db(0x2e); db(0x6c); db(0x69); + db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x69); db(0x6e); + db(0x74); db(0x75); db(0x69); db(0x74); db(0x69); db(0x6f); db(0x6e); db(0x2e); + db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); + db(0x67); db(0x72); db(0x61); db(0x70); db(0x68); db(0x69); db(0x63); db(0x73); + db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); + db(0x00); db(0x65); db(0x78); db(0x70); db(0x61); db(0x6e); db(0x73); db(0x69); + db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); + db(0x72); db(0x79); db(0x00); db(0x46); db(0x69); db(0x6c); db(0x65); db(0x53); + db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x2e); db(0x72); db(0x65); + db(0x73); db(0x6f); db(0x75); db(0x72); db(0x63); db(0x65); db(0x00); db(0x6d); + db(0x65); db(0x67); db(0x61); db(0x63); db(0x68); db(0x69); db(0x70); db(0x20); + db(0x6d); db(0x65); db(0x6d); db(0x6f); db(0x72); db(0x79); db(0x00); db(0x00); + db(0x00); db(0x00); db(0x03); db(0xf2); diff --git a/gfxutil.cpp b/gfxutil.cpp index 44792f23..3011a37c 100644 --- a/gfxutil.cpp +++ b/gfxutil.cpp @@ -18,11 +18,13 @@ double getvsyncrate (double hz, int *mult) { + if (hz < 0) + return 0; if (hz > 85) { *mult = -1; return hz / 2; } - if (hz < 35) { + if (hz < 35 && hz > 0) { *mult = 1; return hz * 2; } diff --git a/include/custom.h b/include/custom.h index 93e6d2bf..00c8e1af 100644 --- a/include/custom.h +++ b/include/custom.h @@ -213,4 +213,5 @@ void customhack_put (struct customhack *ch, uae_u16 v, int hpos); uae_u16 customhack_get (struct customhack *ch, int hpos); extern void alloc_cycle_ext (int, int); extern bool ispal (void); -extern int current_maxvpos (void); \ No newline at end of file +extern int current_maxvpos (void); +struct chipset_refresh *get_chipset_refresh (void); diff --git a/include/disk.h b/include/disk.h index 45514d4d..4b28839c 100644 --- a/include/disk.h +++ b/include/disk.h @@ -21,14 +21,14 @@ extern int disk_empty (int num); extern void disk_insert (int num, const TCHAR *name); extern void disk_insert_force (int num, const TCHAR *name, bool writeprotected); extern void DISK_vsync (void); -extern int DISK_validate_filename (const TCHAR *fname, int leave_open, bool *wrprot, uae_u32 *crc32, struct zfile **zf); +extern int DISK_validate_filename (struct uae_prefs *p, const TCHAR *fname, int leave_open, bool *wrprot, uae_u32 *crc32, struct zfile **zf); extern void DISK_handler (uae_u32); extern void DISK_update (int hpos); extern void DISK_update_adkcon (int hpos, uae_u16 v); extern void DISK_hsync (void); extern void DISK_reset (void); -extern int disk_getwriteprotect (const TCHAR *name); -extern int disk_setwriteprotect (int num, const TCHAR *name, bool writeprotected); +extern int disk_getwriteprotect (struct uae_prefs *p, const TCHAR *name); +extern int disk_setwriteprotect (struct uae_prefs *p, int num, const TCHAR *name, bool writeprotected); extern void disk_creatediskfile (const TCHAR *name, int type, drive_type adftype, const TCHAR *disk_name, bool ffs, bool bootable); extern void dumpdisk (void); extern int DISK_history_add (const TCHAR *name, int idx, int type, int donotcheck); diff --git a/include/options.h b/include/options.h index 2df5ae4c..b6d48e07 100644 --- a/include/options.h +++ b/include/options.h @@ -414,6 +414,7 @@ struct uae_prefs { int nr_floppies; struct floppyslot floppyslots[4]; + bool floppy_read_only; TCHAR dfxlist[MAX_SPARE_DRIVES][MAX_DPATH]; int dfxclickvolume; int dfxclickchannelmask; diff --git a/include/xwin.h b/include/xwin.h index e836f579..7f4bd30e 100644 --- a/include/xwin.h +++ b/include/xwin.h @@ -29,9 +29,9 @@ extern void toggle_mousegrab (void); extern void desktop_coords (int *dw, int *dh, int *x, int *y, int *w, int *h); extern bool vsync_switchmode (int); extern frame_time_t vsync_busywait_end (void); -extern bool vsync_busywait_do (int*); +extern bool vsync_busywait_do (int*, bool, bool); extern void vsync_busywait_start (void); -bool vsync_busywait_check (void); +extern bool vsync_busywait_check (void); extern double vblank_calibrate (double, bool); extern void doflashscreen (void); extern int flashscreen; diff --git a/main.cpp b/main.cpp index 5158af0e..8403ddcd 100644 --- a/main.cpp +++ b/main.cpp @@ -186,6 +186,9 @@ void fixup_cpu (struct uae_prefs *p) if (p->cachesize && p->cpu_cycle_exact) p->cachesize = 0; + if (p->cpu_cycle_exact && p->m68k_speed < 0) + p->m68k_speed = 0; + if (p->immediate_blits && p->blitter_cycle_exact) p->immediate_blits = false; } diff --git a/od-win32/dinput.cpp b/od-win32/dinput.cpp index da12323a..36930c7e 100644 --- a/od-win32/dinput.cpp +++ b/od-win32/dinput.cpp @@ -1183,12 +1183,17 @@ static const struct hiddesc hidtable[] = { 0 } }; +static uae_u32 hidmask (int bits) +{ + return bits >= 32 ? 0xffffffff : (1 << bits) - 1; +} + static int extractbits (uae_u32 val, int bits, bool issigned) { if (issigned) - return val & (1 << (bits - 1)) ? val | (-1 << bits) : val; + return val & (hidmask (bits)) ? val | (bits >= 32 ? 0x80000000 : (-1 << bits)) : val; else - return val & ((1 << bits) - 1); + return val & hidmask (bits); } struct hidquirk @@ -1247,7 +1252,7 @@ static void fixhidvcaps (RID_DEVICE_INFO_HID *hid, HIDP_VALUE_CAPS *caps) { int pid = hid->dwProductId; int vid = hid->dwVendorId; - ULONG mask = (1 << caps->BitSize) - 1; + ULONG mask = hidmask (caps->BitSize); /* min is always signed. * if min < 0, max is signed, otherwise it is unsigned */ @@ -1826,7 +1831,7 @@ static void handle_rawinput_2 (RAWINPUT *raw) HIDP_VALUE_CAPS *vcaps = &did->hidvcaps[axisnum]; int type = did->axistype[axisnum]; int logicalrange = (vcaps->LogicalMax - vcaps->LogicalMin) / 2; - uae_u32 mask = (1 << vcaps->BitSize) - 1; + uae_u32 mask = hidmask (vcaps->BitSize); if (type == AXISTYPE_POV_X || type == AXISTYPE_POV_Y) { @@ -2407,7 +2412,7 @@ static int di_do_init (void) rawinput_enabled_hid = 0; hr = DirectInput8Create (hInst, DIRECTINPUT_VERSION, IID_IDirectInput8, (LPVOID *)&g_lpdi, NULL); - if (FAILED(hr)) { + if (FAILED (hr)) { write_log (L"DirectInput8Create failed, %s\n", DXError (hr)); } else { if (dinput_enum_all) { diff --git a/od-win32/direct3d.cpp b/od-win32/direct3d.cpp index 5eb71b01..b868f773 100644 --- a/od-win32/direct3d.cpp +++ b/od-win32/direct3d.cpp @@ -96,6 +96,7 @@ struct TLVERTEX { }; static int ddraw_fs; +static int ddraw_fs_attempt; static LPDIRECTDRAW7 ddraw; static void ddraw_fs_hack_free (void) @@ -122,10 +123,11 @@ static int ddraw_fs_hack_init (void) struct MultiDisplay *md; ddraw_fs_hack_free (); + DirectDraw_get_GUIDs (); md = getdisplay (&currprefs); if (!md) return 0; - hr = DirectDrawCreateEx (md->primary ? NULL : &md->guid, (LPVOID*)&ddraw, IID_IDirectDraw7, NULL); + hr = DirectDrawCreateEx (md->primary ? NULL : &md->ddguid, (LPVOID*)&ddraw, IID_IDirectDraw7, NULL); if (FAILED (hr)) { write_log (L"DirectDrawCreateEx failed, %s\n", DXError (hr)); return 0; @@ -139,9 +141,17 @@ static int ddraw_fs_hack_init (void) } hr = ddraw->SetDisplayMode (dpp.BackBufferWidth, dpp.BackBufferHeight, t_depth, dpp.FullScreen_RefreshRateInHz, 0); if (FAILED (hr)) { - write_log (L"IDirectDraw7_SetDisplayMode: %s\n", DXError (hr)); - ddraw_fs_hack_free (); - return 0; + write_log (L"1:IDirectDraw7_SetDisplayMode: %s\n", DXError (hr)); + if (dpp.FullScreen_RefreshRateInHz && isvsync_chipset () < 0) { + hr = ddraw->SetDisplayMode (dpp.BackBufferWidth, dpp.BackBufferHeight, t_depth, 0, 0); + if (FAILED (hr)) + write_log (L"2:IDirectDraw7_SetDisplayMode: %s\n", DXError (hr)); + } + if (FAILED (hr)) { + write_log (L"IDirectDraw7_SetDisplayMode: %s\n", DXError (hr)); + ddraw_fs_hack_free (); + return 0; + } } ddraw_fs = 2; return 1; @@ -1867,7 +1877,7 @@ bool D3D_getvblankpos (int *vpos) return true; } -void D3D_vblank_reset (void) +void D3D_vblank_reset (double freq) { if (!isd3d ()) return; @@ -1987,22 +1997,29 @@ const TCHAR *D3D_init (HWND ahwnd, int w_w, int w_h, int t_w, int t_h, int depth modeex.Format = mode.Format; vsync2 = 0; + int hzmult = 0; if (isfullscreen () > 0) { dpp.FullScreen_RefreshRateInHz = currprefs.gfx_refreshrate > 0 ? currprefs.gfx_refreshrate : 0; modeex.RefreshRate = dpp.FullScreen_RefreshRateInHz; if (vsync > 0) { dpp.PresentationInterval = D3DPRESENT_INTERVAL_ONE; - getvsyncrate (dpp.FullScreen_RefreshRateInHz, &mult); - if (mult < 0) { + getvsyncrate (dpp.FullScreen_RefreshRateInHz, &hzmult); + if (hzmult < 0) { if (d3dCaps.PresentationIntervals & D3DPRESENT_INTERVAL_TWO) dpp.PresentationInterval = D3DPRESENT_INTERVAL_TWO; else vsync2 = -1; - } else if (mult > 0) { + } else if (hzmult > 0) { vsync2 = 1; } } } + if (vsync < 0) { + vsync2 = 0; + getvsyncrate (dpp.FullScreen_RefreshRateInHz, &hzmult); + if (hzmult > 0) + vsync2 = 1; + } d3dhwnd = ahwnd; t_depth = depth; @@ -2184,6 +2201,7 @@ static HRESULT reset (void) int D3D_needreset (void) { HRESULT hr; + bool do_dd = false; if (!devicelost) return -1; @@ -2212,11 +2230,25 @@ int D3D_needreset (void) restoredeviceobjects (); return -1; } else if (hr == D3DERR_DEVICELOST) { + write_log (L"%s: D3DERR_DEVICELOST\n", D3DHEAD); invalidatedeviceobjects (); return 0; - } else if (SUCCEEDED (hr)) { + } else if (hr == S_PRESENT_MODE_CHANGED) { + write_log (L"%s: S_PRESENT_MODE_CHANGED (%d,%d)\n", D3DHEAD, ddraw_fs, ddraw_fs_attempt); + if (!ddraw_fs) { + ddraw_fs_attempt++; + if (ddraw_fs_attempt >= 5) { + do_dd = true; + } + } + } + if (SUCCEEDED (hr)) { devicelost = 0; invalidatedeviceobjects (); + if (do_dd) { + write_log (L"%s: S_PRESENT_MODE_CHANGED, Retrying fullscreen with DirectDraw\n", D3DHEAD); + ddraw_fs_hack_init (); + } hr = reset (); if (FAILED (hr)) write_log (L"%s: Reset failed %s\n", D3DHEAD, D3D_ErrorString (hr)); @@ -2240,20 +2272,27 @@ static void D3D_showframe2 (bool dowait) hr = d3ddev->Present (NULL, NULL, NULL, NULL); if (hr == D3DERR_WASSTILLDRAWING) { wasstilldrawing_broken = false; + if (!dowait) + return; + sleep_millis (1); + continue; } else if (hr == S_PRESENT_OCCLUDED) { - return; - } else { - if (hr != FAILED (hr)) { - write_log (L"%s: Present() %s\n", D3DHEAD, D3D_ErrorString (hr)); - if (hr == D3DERR_DEVICELOST || hr == S_PRESENT_MODE_CHANGED) { - devicelost = 1; - } + ; + } else if (hr == S_PRESENT_MODE_CHANGED) { + // In most cases mode actually didn't change but + // D3D is just being stupid and not accepting + // all modes that DirectDraw does accept, + // for example interlaced or EDS_RAWMODE modes! + devicelost = 1; + } else if (FAILED (hr)) { + write_log (L"%s: Present() %s\n", D3DHEAD, D3D_ErrorString (hr)); + if (hr == D3DERR_DEVICELOST || hr == S_PRESENT_MODE_CHANGED) { + devicelost = 1; } - return; + } else { + ddraw_fs_attempt = 0; } - if (!dowait) - return; - sleep_millis (1); + return; } } diff --git a/od-win32/direct3d.h b/od-win32/direct3d.h index e8a0838b..473aa72c 100644 --- a/od-win32/direct3d.h +++ b/od-win32/direct3d.h @@ -18,7 +18,7 @@ extern int D3D_goodenough (void); extern void D3D_setcursor (int x, int y, int width, int height, bool visible); extern bool D3D_getvblankpos (int *vpos); extern double D3D_getrefreshrate (void); -extern void D3D_vblank_reset (void); +extern void D3D_vblank_reset (double freq); extern LPDIRECT3DTEXTURE9 cursorsurfaced3d; #define CURSORMAXWIDTH 64 diff --git a/od-win32/dxwrap.cpp b/od-win32/dxwrap.cpp index 2c502944..78e73a75 100644 --- a/od-win32/dxwrap.cpp +++ b/od-win32/dxwrap.cpp @@ -1120,15 +1120,24 @@ static BOOL CALLBACK displaysCallback (GUID *guid, char *adesc, char *aname, LPV winmon = MonitorFromPoint (pt, MONITOR_DEFAULTTONEAREST); if (hm == winmon) { memcpy (&monitorguids[i], guid, sizeof GUID); + memcpy (&md->ddguid, guid, sizeof GUID); return TRUE; } } return TRUE; } -int DirectDraw_Start (void) +void DirectDraw_get_GUIDs (void) { static bool guidsenumerated; + if (guidsenumerated) + return; + guidsenumerated = true; + DirectDrawEnumerateExA (displaysCallback, 0, DDENUM_DETACHEDSECONDARYDEVICES | DDENUM_ATTACHEDSECONDARYDEVICES); +} + +int DirectDraw_Start (void) +{ static int first, firstdd; HRESULT ddrval; LPDIRECT3D9 d3d; @@ -1165,10 +1174,7 @@ int DirectDraw_Start (void) return 1; } - if (!guidsenumerated) { - guidsenumerated = true; - DirectDrawEnumerateExA (displaysCallback, 0, DDENUM_DETACHEDSECONDARYDEVICES | DDENUM_ATTACHEDSECONDARYDEVICES); - } + DirectDraw_get_GUIDs (); guid = NULL; if (isfullscreen () > 0) { @@ -1251,10 +1257,10 @@ void dx_check (void) bool DD_getvblankpos (int *vpos) { HRESULT hr; - DWORD sl; + DWORD sl, slstate; BOOL vbs; - *vpos = -2; + *vpos = -10; if ((dxdata.primary == NULL && dxdata.fsmodeset > 0) || dxdata.islost || !dxdata.maindd) return false; hr = IDirectDraw7_GetVerticalBlankStatus (dxdata.maindd, &vbs); @@ -1262,24 +1268,41 @@ bool DD_getvblankpos (int *vpos) write_log (L"IDirectDraw7_GetVerticalBlankStatus() failed, %s\n", DXError (hr)); return false; } - sl = -2; + slstate = 4; + sl = -1; if (!vbs) { + slstate = 3; hr = IDirectDraw7_GetScanLine (dxdata.maindd, &sl); if (hr == 0x88760219) { // "vertical blank is in progress" vbs = TRUE; + slstate = 2; + sl = -1; } else if (FAILED (hr) ) { write_log (L"IDirectDraw7_GetScanLine() failed, %s\n", DXError (hr)); return false; } } - *vpos = sl; if (vbs) *vpos = -1; + else + *vpos = sl; + +#if 0 + static DWORD oldsl, oldslstate; + if (oldsl != sl || oldslstate != slstate) { + write_log (L"%d:%d ", sl, slstate); + oldsl = sl; + oldslstate = slstate; + } +#endif + return true; } -void DD_vblank_reset (void) +void DD_vblank_reset (double freq) { + getvsyncrate (freq, &dxdata.vblank_skip); + dxdata.vblank_skip_cnt = 0; dx_check (); if ((dxdata.primary == NULL && dxdata.fsmodeset > 0) || dxdata.islost || !dxdata.maindd) return; diff --git a/od-win32/dxwrap.h b/od-win32/dxwrap.h index 08fc91fe..6f332b3e 100644 --- a/od-win32/dxwrap.h +++ b/od-win32/dxwrap.h @@ -64,11 +64,12 @@ struct PicassoResolution /* Bit mask of RGBFF_xxx values. */ uae_u32 colormodes; int rawmode; + bool lace; }; struct MultiDisplay { bool primary; - GUID guid; + GUID ddguid; TCHAR *adaptername, *adapterid, *adapterkey; TCHAR *monitorname, *monitorid; TCHAR *fullname; @@ -90,6 +91,7 @@ extern TCHAR *outGUID (const GUID *guid); HRESULT DirectDraw_GetDisplayMode (void); void DirectDraw_Release(void); int DirectDraw_Start(void); +void DirectDraw_get_GUIDs (void); void clearsurface(LPDIRECTDRAWSURFACE7 surf); int locksurface (LPDIRECTDRAWSURFACE7 surf, LPDDSURFACEDESC2 desc); void unlocksurface (LPDIRECTDRAWSURFACE7 surf); @@ -132,7 +134,7 @@ void DirectDraw_FillSurface (LPDIRECTDRAWSURFACE7 dst, RECT *rect, uae_u32 color void DirectDraw_Fill (RECT *rect, uae_u32 color); void DirectDraw_FillPrimary (void); bool DD_getvblankpos (int *vpos); -void DD_vblank_reset (void); +void DD_vblank_reset (double freq); void dx_check (void); int dx_islost (void); diff --git a/od-win32/midi.cpp b/od-win32/midi.cpp index 8a07533b..43b8a6cd 100644 --- a/od-win32/midi.cpp +++ b/od-win32/midi.cpp @@ -300,7 +300,7 @@ static void MidiIn_Free( void ) only_one_time = 0; } -static uae_u8 plen[128] = { +static const uae_u8 plen[128] = { 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, @@ -507,7 +507,6 @@ static void CALLBACK MidiInProc(HMIDIIN hMidiIn,UINT wMsg,DWORD_PTR dwInstance,D } if(wMsg == MIM_LONGDATA) { LPMIDIHDR midiin = (LPMIDIHDR)dwParam1; - static long synum; TRACE(("MIM_LONGDATA bytes=%d ts=%u\n", midiin->dwBytesRecorded, dwParam2)); if (exitin == 1) goto end; //for safeness midi want close @@ -615,6 +614,8 @@ int Midi_Open(void) unsigned long result = 0, i; TCHAR err[MAX_DPATH]; + if (currprefs.win32_midioutdev < -1) + return 0; if((result = midiOutOpen(&outHandle, currprefs.win32_midioutdev, 0, 0,CALLBACK_NULL))) { write_log (L"MIDI OUT: error %s / %d while opening port %d\n", getmidiouterr(err, result), result, currprefs.win32_midioutdev); result = 0; @@ -622,7 +623,7 @@ int Midi_Open(void) InitializeCriticalSection(&cs_proc); // We don't need input for output... if((currprefs.win32_midiindev >= 0) && - (result = midiInOpen( &inHandle, currprefs.win32_midiindev, (DWORD_PTR)MidiInProc, 0, CALLBACK_FUNCTION|MIDI_IO_STATUS))) { + (result = midiInOpen(&inHandle, currprefs.win32_midiindev, (DWORD_PTR)MidiInProc, 0, CALLBACK_FUNCTION|MIDI_IO_STATUS))) { write_log (L"MIDI IN: error %s / %d while opening port %d\n", getmidiinerr(err, result), result, currprefs.win32_midiindev); } else { midi_in_ready = TRUE; diff --git a/od-win32/parser.cpp b/od-win32/parser.cpp index 2e89521a..05f07f90 100644 --- a/od-win32/parser.cpp +++ b/od-win32/parser.cpp @@ -1545,7 +1545,8 @@ int enummidiports (void) break; midioutportinfo[i] = xcalloc (struct midiportinfo, 1); midioutportinfo[i]->name = my_strdup (midiOutCaps.szPname); - write_log (L"MIDI OUT: '%s' (%d/%d)\n", midioutportinfo[i]->name, midiOutCaps.wMid, midiOutCaps.wPid); + midioutportinfo[i]->devid = i - 1; + write_log (L"MIDI OUT: %d:'%s' (%d/%d)\n", midioutportinfo[i]->devid, midioutportinfo[i]->name, midiOutCaps.wMid, midiOutCaps.wPid); } total = num + 1; for (i = 1; i < num + 1; i++) { @@ -1565,7 +1566,8 @@ int enummidiports (void) break; midiinportinfo[i] = xcalloc (struct midiportinfo, 1); midiinportinfo[i]->name = my_strdup (midiInCaps.szPname); - write_log (L"MIDI IN: '%s' (%d/%d)\n", midiinportinfo[i]->name, midiInCaps.wMid, midiInCaps.wPid); + midiinportinfo[i]->devid = i; + write_log (L"MIDI IN: %d:'%s' (%d/%d)\n", midiinportinfo[i]->devid, midiinportinfo[i]->name, midiInCaps.wMid, midiInCaps.wPid); } total += num; for (i = 0; i < num; i++) { diff --git a/od-win32/parser.h b/od-win32/parser.h index cdc4c9dd..1317ccfb 100644 --- a/od-win32/parser.h +++ b/od-win32/parser.h @@ -37,6 +37,7 @@ extern int load_ghostscript (void); struct midiportinfo { TCHAR *name; + UINT devid; }; extern struct midiportinfo *midiinportinfo[MAX_MIDI_PORTS]; extern struct midiportinfo *midioutportinfo[MAX_MIDI_PORTS]; diff --git a/od-win32/picasso96_win.cpp b/od-win32/picasso96_win.cpp index 95554ab5..ad6602ed 100644 --- a/od-win32/picasso96_win.cpp +++ b/od-win32/picasso96_win.cpp @@ -726,7 +726,7 @@ void picasso_handle_vsync (void) if (vsync < 0) { vsync_busywait_end (); - vsync_busywait_do (NULL); + vsync_busywait_do (NULL, false, false); framecnt++; bool rendered = rtg_render (); picasso_trigger_vblank (); diff --git a/od-win32/resources/resource b/od-win32/resources/resource index 444f4073..debc7aa1 100644 --- a/od-win32/resources/resource +++ b/od-win32/resources/resource @@ -265,6 +265,8 @@ #define IDS_STMENUNOCD 270 #define IDS_ON 271 #define IDS_INPUTQUALIFIER 272 +#define IDS_GENERIC 273 +#define IDS_AUTODETECT 274 #define IDS_NUMSG_NEEDEXT2 300 #define IDS_NUMSG_NOROMKEY 301 #define IDS_NUMSG_KSROMCRCERROR 302 @@ -756,7 +758,6 @@ #define IDC_AVIOUTPUT_VIDEO 1613 #define IDC_INPUTAUTOFIRE 1613 #define IDC_PORT_MOUSETRICK 1613 -#define IDC_CLIPBOARDSHARE2 1613 #define IDC_NATIVECODE 1613 #define IDC_AVIOUTPUT_AUDIO 1614 #define IDC_INPUTCOPYFROM 1614 diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index bde0a3a6..c805adf2 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -1703,6 +1703,8 @@ END STRINGTABLE BEGIN IDS_INPUTQUALIFIER "Qualifiers" + IDS_GENERIC "Generic" + IDS_AUTODETECT "Autodetect" END #endif // English resources diff --git a/od-win32/rp.cpp b/od-win32/rp.cpp index 2b03a279..361837ab 100644 --- a/od-win32/rp.cpp +++ b/od-win32/rp.cpp @@ -752,7 +752,7 @@ static LRESULT CALLBACK RPHostMsgFunction2 (UINT uMessage, WPARAM wParam, LPARAM if (device == RP_DEVICE_FLOPPY) { int num = HIBYTE(wParam); if (lParam == RP_DEVICE_READONLY || lParam == RP_DEVICE_READWRITE) { - ret = disk_setwriteprotect (num, currprefs.floppyslots[num].df, lParam == RP_DEVICE_READONLY); + ret = disk_setwriteprotect (&currprefs, num, currprefs.floppyslots[num].df, lParam == RP_DEVICE_READONLY); } } return ret ? (LPARAM)1 : 0; diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index 92fda294..5af8a304 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -2826,8 +2826,19 @@ void target_default_options (struct uae_prefs *p, int type) static const TCHAR *scsimode[] = { L"SCSIEMU", L"SPTI", L"SPTI+SCSISCAN", L"AdaptecASPI", L"NeroASPI", L"FrogASPI", NULL }; static const TCHAR *statusbarmode[] = { L"none", L"normal", L"extended", NULL }; +static struct midiportinfo *getmidiport (struct midiportinfo **mi, int devid) +{ + for (int i = 0; i < MAX_MIDI_PORTS; i++) { + if (mi[i] != NULL && mi[i]->devid == devid) + return mi[i]; + } + return NULL; +} + void target_save_options (struct zfile *f, struct uae_prefs *p) { + struct midiportinfo *midp; + cfgfile_target_dwrite_bool (f, L"middle_mouse", p->win32_middle_mouse); cfgfile_target_dwrite_bool (f, L"logfile", p->win32_logfile); cfgfile_target_dwrite_bool (f, L"map_drives", p->win32_automount_drives); @@ -2853,24 +2864,20 @@ void target_save_options (struct zfile *f, struct uae_prefs *p) cfgfile_target_dwrite (f, L"midiout_device", L"%d", p->win32_midioutdev); cfgfile_target_dwrite (f, L"midiin_device", L"%d", p->win32_midiindev); + + midp = getmidiport (midioutportinfo, p->win32_midioutdev); if (p->win32_midioutdev < -1) cfgfile_target_dwrite_str (f, L"midiout_device_name", L"none"); - else if (p->win32_midioutdev == -1) + else if (p->win32_midioutdev == -1 || midp == NULL) cfgfile_target_dwrite_str (f, L"midiout_device_name", L"default"); - else if (p->win32_midioutdev >= 0 && p->win32_midioutdev < MAX_MIDI_PORTS - 1) { - if (midioutportinfo[p->win32_midioutdev + 1] == NULL) - p->win32_midioutdev = -1; - else - cfgfile_target_dwrite_str (f, L"midiout_device_name", midioutportinfo[p->win32_midioutdev + 1]->name); - } - if (p->win32_midiindev < 0) + else + cfgfile_target_dwrite_str (f, L"midiout_device_name", midp->name); + + midp = getmidiport (midiinportinfo, p->win32_midiindev); + if (p->win32_midiindev < 0 || midp == NULL) cfgfile_target_dwrite_str (f, L"midiin_device_name", L"none"); - else if (p->win32_midiindev >= 0 && p->win32_midiindev < MAX_MIDI_PORTS) { - if (midiinportinfo[p->win32_midiindev] == NULL) - p->win32_midiindev = -1; - else - cfgfile_target_dwrite_str (f, L"midiin_device_name", midiinportinfo[p->win32_midiindev]->name); - } + else + cfgfile_target_dwrite_str (f, L"midiin_device_name", midp->name); cfgfile_target_dwrite_bool (f, L"rtg_match_depth", p->win32_rtgmatchdepth); cfgfile_target_dwrite_bool (f, L"rtg_scale_small", p->win32_rtgscaleifsmall); @@ -3131,7 +3138,7 @@ int target_parse_option (struct uae_prefs *p, const TCHAR *option, const TCHAR * p->win32_midioutdev = -1; for (int i = 0; i < MAX_MIDI_PORTS && midioutportinfo[i]; i++) { if (!_tcsicmp (midioutportinfo[i]->name, tmpbuf)) { - p->win32_midioutdev = i - 1; + p->win32_midioutdev = midioutportinfo[i]->devid; } } return 1; @@ -3140,7 +3147,7 @@ int target_parse_option (struct uae_prefs *p, const TCHAR *option, const TCHAR * p->win32_midiindev = -1; for (int i = 0; i < MAX_MIDI_PORTS && midiinportinfo[i]; i++) { if (!_tcsicmp (midiinportinfo[i]->name, tmpbuf)) { - p->win32_midiindev = i; + p->win32_midiindev = midiinportinfo[i]->devid; } } return 1; diff --git a/od-win32/win32.h b/od-win32/win32.h index 210afd8e..99ada650 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -19,8 +19,8 @@ #define LANG_DLL 1 //#define WINUAEBETA L"" -#define WINUAEBETA L"Beta 14" -#define WINUAEDATE MAKEBD(2012, 1, 28) +#define WINUAEBETA L"Beta 15" +#define WINUAEDATE MAKEBD(2012, 2, 4) #define WINUAEEXTRA L"" //#define WINUAEEXTRA L"AmiKit Preview" #define WINUAEREV L"" diff --git a/od-win32/win32gfx.cpp b/od-win32/win32gfx.cpp index c529a9d7..287d68f7 100644 --- a/od-win32/win32gfx.cpp +++ b/od-win32/win32gfx.cpp @@ -104,6 +104,9 @@ int window_extra_width, window_extra_height; static struct winuae_currentmode *currentmode = ¤tmodestruct; static int wasfullwindow_a, wasfullwindow_p; static int vblankbasewait, vblankbasewait2, vblankbasewait3, vblankbasefull; +static bool vblankbaselace; +static int vblankbaselace_chipset; +static bool vblankthread_oddeven; int screen_is_picasso = 0; @@ -434,10 +437,24 @@ oops: return 0; } -static void addmode (struct MultiDisplay *md, int w, int h, int d, int rate, int rawmode) +static void addmode (struct MultiDisplay *md, DEVMODE *dm, int rawmode) { int ct; int i, j; + int w = dm->dmPelsWidth; + int h = dm->dmPelsHeight; + int d = dm->dmBitsPerPel; + bool lace = false; + + int freq = 0; + if (dm->dmFields & DM_DISPLAYFREQUENCY) { + freq = dm->dmDisplayFrequency; + if (freq < 10) + freq = 0; + } + if (dm->dmFields & DM_DISPLAYFLAGS) { + lace = (dm->dmDisplayFlags & DM_INTERLACED) != 0; + } ct = 0; if (d == 8) @@ -457,11 +474,11 @@ static void addmode (struct MultiDisplay *md, int w, int h, int d, int rate, int while (md->DisplayModes[i].depth >= 0) { if (md->DisplayModes[i].depth == d && md->DisplayModes[i].res.width == w && md->DisplayModes[i].res.height == h) { for (j = 0; j < MAX_REFRESH_RATES; j++) { - if (md->DisplayModes[i].refresh[j] == 0 || md->DisplayModes[i].refresh[j] == rate) + if (md->DisplayModes[i].refresh[j] == 0 || md->DisplayModes[i].refresh[j] == freq) break; } if (j < MAX_REFRESH_RATES) { - md->DisplayModes[i].refresh[j] = rate; + md->DisplayModes[i].refresh[j] = freq; md->DisplayModes[i].refreshtype[j] = rawmode; md->DisplayModes[i].refresh[j + 1] = 0; return; @@ -475,16 +492,19 @@ static void addmode (struct MultiDisplay *md, int w, int h, int d, int rate, int if (i >= MAX_PICASSO_MODES - 1) return; md->DisplayModes[i].rawmode = rawmode; + md->DisplayModes[i].lace = lace; md->DisplayModes[i].res.width = w; md->DisplayModes[i].res.height = h; md->DisplayModes[i].depth = d; - md->DisplayModes[i].refresh[0] = rate; + md->DisplayModes[i].refresh[0] = freq; md->DisplayModes[i].refreshtype[0] = rawmode; md->DisplayModes[i].refresh[1] = 0; md->DisplayModes[i].colormodes = ct; md->DisplayModes[i + 1].depth = -1; - _stprintf (md->DisplayModes[i].name, L"%dx%d, %d-bit", - md->DisplayModes[i].res.width, md->DisplayModes[i].res.height, md->DisplayModes[i].depth * 8); + _stprintf (md->DisplayModes[i].name, L"%dx%d%s, %d-bit", + md->DisplayModes[i].res.width, md->DisplayModes[i].res.height, + lace ? L"i" : L"", + md->DisplayModes[i].depth * 8); } static int _cdecl resolution_compare (const void *a, const void *b) @@ -676,13 +696,8 @@ void sortdisplays (void) write_log (L"EnumDisplaySettings(%dx%dx%d %dHz %08x)\n", dm.dmPelsWidth, dm.dmPelsHeight, dm.dmBitsPerPel, dm.dmDisplayFrequency, dm.dmFields); #endif - if (dm.dmFields & DM_DISPLAYFREQUENCY) { - freq = dm.dmDisplayFrequency; - if (freq < 10) - freq = 0; - } if ((dm.dmFields & DM_PELSWIDTH) && (dm.dmFields & DM_PELSHEIGHT) && (dm.dmFields & DM_BITSPERPEL)) { - addmode (md1, dm.dmPelsWidth, dm.dmPelsHeight, dm.dmBitsPerPel, freq, mode); + addmode (md1, &dm, mode); } } idx++; @@ -1362,6 +1377,8 @@ int check_prefs_changed_gfx (void) c |= currprefs.gfx_resolution != changed_prefs.gfx_resolution ? (128) : 0; c |= currprefs.gfx_vresolution != changed_prefs.gfx_vresolution ? (128) : 0; + c |= currprefs.gfx_autoresolution_minh != changed_prefs.gfx_autoresolution_minh ? (128) : 0; + c |= currprefs.gfx_autoresolution_minv != changed_prefs.gfx_autoresolution_minv ? (128) : 0; c |= currprefs.gfx_scanlines != changed_prefs.gfx_scanlines ? (2 | 8) : 0; c |= currprefs.monitoremu != changed_prefs.monitoremu ? (2 | 8) : 0; @@ -1429,6 +1446,8 @@ int check_prefs_changed_gfx (void) currprefs.gfx_resolution = changed_prefs.gfx_resolution; currprefs.gfx_vresolution = changed_prefs.gfx_vresolution; + currprefs.gfx_autoresolution_minh = changed_prefs.gfx_autoresolution_minh; + currprefs.gfx_autoresolution_minv = changed_prefs.gfx_autoresolution_minv; currprefs.gfx_scanlines = changed_prefs.gfx_scanlines; currprefs.monitoremu = changed_prefs.monitoremu; @@ -2243,6 +2262,8 @@ static bool getvblankpos (int *vp) prevvblankpos = sl; if (sl > maxscanline) maxscanline = sl; + if (sl > 0) + vblankthread_oddeven = (sl & 1) != 0; *vp = sl; return true; } @@ -2307,12 +2328,12 @@ static bool vblank_getstate (bool *state) return true; } -void vblank_reset (void) +void vblank_reset (double freq) { if (currprefs.gfx_api) - D3D_vblank_reset (); + D3D_vblank_reset (freq); else - DD_vblank_reset (); + DD_vblank_reset (freq); } static unsigned int __stdcall flipthread (void *dummy) @@ -2328,6 +2349,17 @@ static unsigned int __stdcall flipthread (void *dummy) return 0; } +static bool vblanklaceskip (void) +{ + if (vblankbaselace_chipset >= 0 && vblankbaselace) { + if ((vblankbaselace_chipset && !vblankthread_oddeven) || (!vblankbaselace_chipset && vblankthread_oddeven)) { + write_log (L"Interlaced frame type mismatch %d<>%d\n", vblankbaselace_chipset, vblankthread_oddeven); + return true; + } + } + return false; +} + static unsigned int __stdcall vblankthread (void *dummy) { while (vblankthread_mode > VBLANKTH_KILL) { @@ -2357,7 +2389,13 @@ static unsigned int __stdcall vblankthread (void *dummy) frame_time_t t = read_processor_time (); bool donotwait = false; if (!vblank_found) { - if (t - thread_vblank_time > vblankbasewait2) { + // immediate vblank if mismatched frame type + if (isvsync_chipset () < 0 && vblanklaceskip ()) { + vblank_found = true; + vblank_found_chipset = true; + vblankthread_mode = VBLANKTH_ACTIVE_WAIT; + donotwait = true; + } else if (t - thread_vblank_time > vblankbasewait2) { bool vb = false; bool ok = vblank_getstate (&vb); if (!ok || vb) { @@ -2398,22 +2436,28 @@ bool vsync_busywait_check (void) return vblankthread_mode == VBLANKTH_ACTIVE || vblankthread_mode == VBLANKTH_ACTIVE_WAIT; } -frame_time_t vsync_busywait_end (void) +static void vsync_notvblank (void) { - - while (!vblank_found && vblankthread_mode == VBLANKTH_ACTIVE) { - vsync_sleep (true); - } - changevblankthreadmode (VBLANKTH_ACTIVE_WAIT); for (;;) { int vp; - getvblankpos (&vp); - if (vp != -1) { + if (!getvblankpos (&vp)) + return; + if (vp > 0) { //write_log (L"%d ", vpos); break; } vsync_sleep (true); } +} + +frame_time_t vsync_busywait_end (void) +{ + + while (!vblank_found && vblankthread_mode == VBLANKTH_ACTIVE) { + vsync_sleep (true); + } + changevblankthreadmode (VBLANKTH_ACTIVE_WAIT); + vsync_notvblank (); return thread_vblank_time; } @@ -2428,7 +2472,7 @@ static bool isthreadedvsync (void) return isvsync_chipset () <= -2 || isvsync_rtg () < 0; } -bool vsync_busywait_do (int *freetime) +bool vsync_busywait_do (int *freetime, bool lace, bool oddeven) { bool v; static bool framelost; @@ -2436,6 +2480,11 @@ bool vsync_busywait_do (int *freetime) frame_time_t t; frame_time_t prevtime = vblank_prev_time; + if (lace) + vblankbaselace_chipset = oddeven; + else + vblankbaselace_chipset = -1; + t = read_processor_time (); ti = t - prevtime; if (ti > 2 * vblankbasefull || ti < -2 * vblankbasefull) { @@ -2477,19 +2526,28 @@ bool vsync_busywait_do (int *freetime) v = true; } else { + bool doskip = false; if (!framelost && t - prevtime > vblankbasefull) { framelost = true; frame_missed++; return true; } + + vsync_notvblank (); - while (!framelost && read_processor_time () - prevtime < vblankbasewait) { - vsync_sleep (false); - } + if (vblanklaceskip ()) + doskip = true; + if (!doskip) { + while (!framelost && read_processor_time () - prevtime < vblankbasewait) { + vsync_sleep (false); + } + v = vblank_wait (); + } else { + v = true; + } framelost = false; - v = vblank_wait (); } @@ -2508,7 +2566,7 @@ struct remembered_vsync { struct remembered_vsync *next; int width, height, depth, rate, mode; - bool rtg; + bool rtg, lace; double remembered_rate, remembered_rate2; int maxscanline, maxvpos; }; @@ -2525,6 +2583,7 @@ double vblank_calibrate (double approx_vblank, bool waitonly) double rval = -1; struct apmode *ap = picasso_on ? &currprefs.gfx_apmode[1] : &currprefs.gfx_apmode[0]; bool remembered = false; + bool lace = false; if (picasso_on) { width = picasso96_state.Width; @@ -2545,6 +2604,7 @@ double vblank_calibrate (double approx_vblank, bool waitonly) rval = rv->remembered_rate; maxscanline = rv->maxscanline; maxvpos = rv->maxvpos; + lace = rv->lace; waitonly = true; remembered = true; goto skip; @@ -2573,10 +2633,11 @@ double vblank_calibrate (double approx_vblank, bool waitonly) tsum2 = 0; tcnt2 = 0; for (maxcnt = 0; maxcnt < maxtotal; maxcnt++) { - total = 10; + total = 5; tsum = 0; cnt = total; for (cnt = 0; cnt < total; cnt++) { + int maxvpos1, maxvpos2; if (!waitvblankstate (true, NULL)) goto fail; if (!waitvblankstate (false, NULL)) @@ -2586,10 +2647,18 @@ double vblank_calibrate (double approx_vblank, bool waitonly) t1 = read_processor_time (); if (!waitvblankstate (false, NULL)) goto fail; - if (!waitvblankstate (true, &maxvpos)) + maxscanline = 0; + if (!waitvblankstate (true, &maxvpos1)) + goto fail; + if (!waitvblankstate (false, NULL)) + goto fail; + maxscanline = 0; + if (!waitvblankstate (true, &maxvpos2)) goto fail; t2 = read_processor_time (); - tval = (double)syncbase / (t2 - t1); + maxvpos = maxvpos1 > maxvpos2 ? maxvpos1 : maxvpos2; + // count two fields: works with interlaced modes too. + tval = (double)syncbase * 2.0 / (t2 - t1); if (cnt == 0) tfirst = tval; if (abs (tval - tfirst) > 1) { @@ -2603,6 +2672,8 @@ double vblank_calibrate (double approx_vblank, bool waitonly) break; } tsum += tval; + if (abs (maxvpos1 - maxvpos2) == 1) + lace = true; } if (cnt >= total) break; @@ -2633,7 +2704,9 @@ skip: vblankbasewait = (syncbase / tsum2) * 3 / 4; vblankbasewait2 = (syncbase / tsum2) * 70 / 100; vblankbasewait3 = (syncbase / tsum2) * 90 / 100; - write_log (L"VSync %s: %.6fHz/%.1f=%.6fHz. MaxV=%d Units=%d\n", waitonly ? L"remembered" : L"calibrated", tsum, div, tsum2, maxvpos, vblankbasefull); + vblankbaselace = lace; + write_log (L"VSync %s: %.6fHz/%.1f=%.6fHz. MaxV=%d%s Units=%d\n", + waitonly ? L"remembered" : L"calibrated", tsum, div, tsum2, maxvpos, lace ? L"i" : L"", vblankbasefull); remembered_vblank = tsum; vblank_prev_time = read_processor_time (); @@ -2649,6 +2722,7 @@ skip: rv->remembered_rate2 = tsum2; rv->maxscanline = maxscanline; rv->maxvpos = maxvpos; + rv->lace = lace; if (vsyncmemory == NULL) { vsyncmemory = rv; } else { @@ -2657,7 +2731,7 @@ skip: } } - vblank_reset (); + vblank_reset (tsum); return tsum; fail: write_log (L"VSync calibration failed\n"); diff --git a/od-win32/win32gfx.h b/od-win32/win32gfx.h index 6f50d9be..4438dd0d 100644 --- a/od-win32/win32gfx.h +++ b/od-win32/win32gfx.h @@ -41,5 +41,5 @@ void DX_Blit (int x, int y, int w, int h); void centerdstrect (RECT *); struct MultiDisplay *getdisplay (struct uae_prefs *p); double getcurrentvblankrate (void); -void vblank_reset (void); +void vblank_reset (double freq); #endif diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index b39c2235..b4a0e93f 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -1780,7 +1780,7 @@ static void flipgui (bool opengui) if (opengui) DirectDraw_FlipToGDISurface (); else - vblank_reset (); + vblank_reset (-1); } static int GetSettings (int all_options, HWND hwnd); @@ -5645,6 +5645,7 @@ static void values_to_displaydlg (HWND hDlg) SendDlgItemMessage(hDlg, IDC_RATE2BOX, CB_RESETCONTENT, 0, 0); v = 0; + struct chipset_refresh *selectcr = full_property_sheet ? (workprefs.ntscmode ? &workprefs.cr[CHIPSET_REFRESH_NTSC] : &workprefs.cr[CHIPSET_REFRESH_PAL]) : get_chipset_refresh () ; for (int i = 0; i < MAX_CHIPSET_REFRESH_TOTAL; i++) { struct chipset_refresh *cr = &workprefs.cr[i]; if (cr->rate > 0) { @@ -5655,16 +5656,17 @@ static void values_to_displaydlg (HWND hDlg) d = workprefs.chipset_refreshrate; if (abs (d) < 1) d = currprefs.ntscmode ? 60.0 : 50.0; - if (abs (cr->rate - d) < 1.5 && workprefs.cr_selected < 0) { + if (selectcr && selectcr->index == cr->index) workprefs.cr_selected = i; - } rates[i] = v; v++; } } + + if (workprefs.cr_selected < 0 || workprefs.cr[workprefs.cr_selected].rate <= 0) workprefs.cr_selected = CHIPSET_REFRESH_PAL; - struct chipset_refresh *selectcr = &workprefs.cr[workprefs.cr_selected]; + selectcr = &workprefs.cr[workprefs.cr_selected]; SendDlgItemMessage(hDlg, IDC_RATE2BOX, CB_SETCURSEL, rates[workprefs.cr_selected], 0); SendDlgItemMessage (hDlg, IDC_FRAMERATE2, TBM_SETPOS, TRUE, (LPARAM)(selectcr->rate + 0.5)); _stprintf (buffer, L"%.6f", selectcr->locked || full_property_sheet ? selectcr->rate : workprefs.chipset_refreshrate); @@ -5773,7 +5775,7 @@ static void init_resolution_combo (HWND hDlg) SendDlgItemMessage(hDlg, IDC_RESOLUTION, CB_RESETCONTENT, 0, 0); for (i = 0; md->DisplayModes[i].depth >= 0; i++) { if (md->DisplayModes[i].depth > 1 && md->DisplayModes[i].residx != idx) { - _stprintf (tmp, L"%dx%d", md->DisplayModes[i].res.width, md->DisplayModes[i].res.height); + _stprintf (tmp, L"%dx%d%s", md->DisplayModes[i].res.width, md->DisplayModes[i].res.height, md->DisplayModes[i].lace ? L"i" : L""); if (md->DisplayModes[i].rawmode) _tcscat (tmp, L" (*)"); SendDlgItemMessage(hDlg, IDC_RESOLUTION, CB_ADDSTRING, 0, (LPARAM)tmp); @@ -6172,6 +6174,7 @@ static void values_from_chipsetdlg (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l static INT_PTR CALLBACK ChipsetDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { static int recursive = 0; + TCHAR buffer[MAX_DPATH]; switch (msg) { case WM_INITDIALOG: @@ -6180,7 +6183,8 @@ static INT_PTR CALLBACK ChipsetDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPAR SendDlgItemMessage (hDlg, IDC_CS_EXT, CB_RESETCONTENT, 0, 0); SendDlgItemMessage (hDlg, IDC_CS_EXT, CB_ADDSTRING, 0, (LPARAM)L""); - SendDlgItemMessage (hDlg, IDC_CS_EXT, CB_ADDSTRING, 0, (LPARAM)L"Generic"); + WIN32GUI_LoadUIString(IDS_GENERIC, buffer, sizeof buffer / sizeof (TCHAR)); + SendDlgItemMessage (hDlg, IDC_CS_EXT, CB_ADDSTRING, 0, (LPARAM)buffer); SendDlgItemMessage (hDlg, IDC_CS_EXT, CB_ADDSTRING, 0, (LPARAM)L"CDTV"); SendDlgItemMessage (hDlg, IDC_CS_EXT, CB_ADDSTRING, 0, (LPARAM)L"CD32"); SendDlgItemMessage (hDlg, IDC_CS_EXT, CB_ADDSTRING, 0, (LPARAM)L"A500"); @@ -6196,7 +6200,8 @@ static INT_PTR CALLBACK ChipsetDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPAR SendDlgItemMessage (hDlg, IDC_MONITOREMU, CB_RESETCONTENT, 0, 0); SendDlgItemMessage (hDlg, IDC_MONITOREMU, CB_ADDSTRING, 0, (LPARAM)L"-"); - SendDlgItemMessage (hDlg, IDC_MONITOREMU, CB_ADDSTRING, 0, (LPARAM)L"Autodetect"); + WIN32GUI_LoadUIString(IDS_AUTODETECT, buffer, sizeof buffer / sizeof (TCHAR)); + SendDlgItemMessage (hDlg, IDC_MONITOREMU, CB_ADDSTRING, 0, (LPARAM)buffer); SendDlgItemMessage (hDlg, IDC_MONITOREMU, CB_ADDSTRING, 0, (LPARAM)L"A2024"); SendDlgItemMessage (hDlg, IDC_MONITOREMU, CB_ADDSTRING, 0, (LPARAM)L"Graffiti"); @@ -9774,10 +9779,10 @@ static void addfloppytype (HWND hDlg, int n) } CheckDlgButton (hDlg, f_enable, state ? BST_CHECKED : BST_UNCHECKED); } - chk = !showcd && disk_getwriteprotect (text) && state == TRUE ? BST_CHECKED : 0; + chk = !showcd && disk_getwriteprotect (&workprefs, text) && state == TRUE ? BST_CHECKED : 0; if (f_wp >= 0) CheckDlgButton (hDlg, f_wp, chk); - chk = !showcd && state && DISK_validate_filename (text, 0, NULL, NULL, NULL) ? TRUE : FALSE; + chk = !showcd && state && DISK_validate_filename (&workprefs, text, 0, NULL, NULL, NULL) ? TRUE : FALSE; if (f_wp >= 0) { ew (hDlg, f_wp, chk); if (f_wptext >= 0) @@ -9888,7 +9893,7 @@ static void addallfloppies (HWND hDlg) static void floppysetwriteprotect (HWND hDlg, int n, bool writeprotected) { if (!iscd (n)) { - disk_setwriteprotect (n, workprefs.floppyslots[n].df, writeprotected); + disk_setwriteprotect (&workprefs, n, workprefs.floppyslots[n].df, writeprotected); addfloppytype (hDlg, n); } } @@ -10729,6 +10734,23 @@ static void values_from_gameportsdlg (HWND hDlg, int d) } +static int midi2dev (struct midiportinfo **mid, int idx, int def) +{ + if (idx < 0) + return def; + if (mid[idx] == NULL) + return def; + return mid[idx]->devid; +} +static int midi2devidx (struct midiportinfo **mid, int devid) +{ + for (int i = 0; i < MAX_MIDI_PORTS; i++) { + if (mid[i] != NULL && mid[i]->devid == devid) + return i; + } + return -1; +} + static void values_from_portsdlg (HWND hDlg) { int v; @@ -10774,11 +10796,11 @@ static void values_from_portsdlg (HWND hDlg) #endif } - workprefs.win32_midioutdev = SendDlgItemMessage (hDlg, IDC_MIDIOUTLIST, CB_GETCURSEL, 0, 0) - 2; + workprefs.win32_midioutdev = midi2dev (midioutportinfo, SendDlgItemMessage (hDlg, IDC_MIDIOUTLIST, CB_GETCURSEL, 0, 0) - 1, -2); if (bNoMidiIn || workprefs.win32_midioutdev < -1) { workprefs.win32_midiindev = -1; } else { - workprefs.win32_midiindev = SendDlgItemMessage (hDlg, IDC_MIDIINLIST, CB_GETCURSEL, 0, 0) - 1; + workprefs.win32_midiindev = midi2dev (midiinportinfo, SendDlgItemMessage (hDlg, IDC_MIDIINLIST, CB_GETCURSEL, 0, 0) - 1, -1); } ew (hDlg, IDC_MIDIINLIST, workprefs.win32_midioutdev < -1 ? FALSE : TRUE); @@ -10859,9 +10881,9 @@ static void values_to_portsdlg (HWND hDlg) SetDlgItemText (hDlg, IDC_PS_PARAMS, workprefs.ghostscript_parameters); SendDlgItemMessage (hDlg, IDC_PRINTERLIST, CB_SETCURSEL, result, 0); - SendDlgItemMessage (hDlg, IDC_MIDIOUTLIST, CB_SETCURSEL, workprefs.win32_midioutdev + 2, 0); + SendDlgItemMessage (hDlg, IDC_MIDIOUTLIST, CB_SETCURSEL, midi2devidx (midioutportinfo, workprefs.win32_midioutdev) + 1, 0); if (workprefs.win32_midiindev >= 0) - SendDlgItemMessage (hDlg, IDC_MIDIINLIST, CB_SETCURSEL, workprefs.win32_midiindev + 1, 0); + SendDlgItemMessage (hDlg, IDC_MIDIINLIST, CB_SETCURSEL, midi2devidx (midiinportinfo, workprefs.win32_midiindev) + 1, 0); else SendDlgItemMessage (hDlg, IDC_MIDIINLIST, CB_SETCURSEL, 0, 0); ew (hDlg, IDC_MIDIINLIST, workprefs.win32_midioutdev < -1 ? FALSE : TRUE); diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 805693b5..0ed511fa 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,8 +1,25 @@ +Beta 15: + +- Append 'i' to PC resolutions that are interlaced. (TV Out, VGA + 15KHz hacks etc..) +- Low latency Amiga interlace mode odd/even fields are now in sync with output's odd/even fields, + if output resolution is also interlaced. +- Set cpu speed to "real" if it was fastest possible originally when switching cycle-exact on the fly + using uae-configuration. +- MIDI device IDs are correct again (b1) +- Display panel displaydata PAL/NTSC/etc select box now mirrors currently active emulated setting. +- "Default refresh rate" skipped every other frame in DirectDraw mode (b14) +- gfx_autoresolution_min_vertical and gfx_autoresolution_min_horizontal support on the fly adjustment + using uae-configuration. +- Write winuaebootlog.txt to Windows temp directory if original directory is read-only. +- Directory harddrives configured as unbootable are now really unbootable under KS 1.3. +- Mequa's optimized Akiko C2P added. +- HID raw input mask overflow when HID bitsize was 32. (PPJoy) + Beta 14: - Input panel qualifier key/button support. I think this was requested many many years ago. - (I didn't originally plan to this now but someone reminded me few days ago..) + (I didn't originally plan to do this now but someone reminded me few days ago..) - Any key or button can be configured as a qualifier (like a shift or control key that modifies behavior of other keys) - Any Input Target can be configured to require qualifiers. Input Target only triggers if it's @@ -105,7 +122,7 @@ Beta 9: accept it and new vsync can work with buffer smaller than old 1. (Buffer size "0" or "1/2" would have been too confusing..) In other words, if you load old configuration, only value shown in GUI increases by one, real buffer size does not change. -- Fixed Graffiti emulation crash in if Graffiti hires mode was detected but emulation was +- Fixed Graffiti emulation crash if Graffiti hires mode was detected but emulation was not configured for superhires support. (Only in some situations) - Disable genlock detected option if A2024 or Graffiti enabled, this is impossible configuration and would only slow down emulation (forces Graffiti emulation to keep looking for command codes continuously) diff --git a/od-win32/writelog.cpp b/od-win32/writelog.cpp index 42adb507..53f6ff2a 100644 --- a/od-win32/writelog.cpp +++ b/od-win32/writelog.cpp @@ -546,8 +546,17 @@ FILE *log_open (const TCHAR *name, int append, int bootlog) cs_init = 1; if (name != NULL) { - if (bootlog >= 0) + if (bootlog >= 0) { f = _tfopen (name, append ? L"a, ccs=UTF-8" : L"wt, ccs=UTF-8"); + if (!f && bootlog) { + TCHAR tmp[MAX_DPATH]; + tmp[0] = 0; + if (GetTempPath (MAX_DPATH, tmp) > 0) { + _tcscat (tmp, L"glog.txt"); + f = _tfopen (tmp, append ? L"a, ccs=UTF-8" : L"wt, ccs=UTF-8"); + } + } + } bootlogmode = bootlog; } else if (1) { TCHAR *c = GetCommandLine (); diff --git a/savestate.cpp b/savestate.cpp index 0fb9a714..5d539b62 100644 --- a/savestate.cpp +++ b/savestate.cpp @@ -1657,7 +1657,7 @@ retry2: input_record++; for (i = 0; i < 4; i++) { bool wp = true; - DISK_validate_filename (currprefs.floppyslots[i].df, false, &wp, NULL, NULL); + DISK_validate_filename (&currprefs, currprefs.floppyslots[i].df, false, &wp, NULL, NULL); inprec_recorddiskchange (i, currprefs.floppyslots[i].df, wp); } input_record--;